From 33b891186d31de47c583dab401955b3c10781441 Mon Sep 17 00:00:00 2001 From: Tiago Quintino Date: Mon, 25 Mar 2013 12:04:10 +0000 Subject: [PATCH] Ported grib_api 1.10.4 from p4 to git --- .gitignore | 36 + AUTHORS | 5 + CMakeLists.txt | 101 + COPYING | 1 + ChangeLog | 457 + INSTALL | 40 + LICENSE | 202 + Makefile.am | 437 + NEWS | 0 NOTICE | 7 + README | 45 + VERSION.cmake | 2 + acinclude.m4 | 480 + autogen.sh | 25 + concepts/grib1_short_name | 1117 + config/config.guess | 1511 ++ config/config.sub | 1705 ++ config/depcomp | 630 + config/install-sh | 520 + config/ltmain.sh | 8406 ++++++++ config/missing | 376 + configure.ac | 634 + definitions/CMakeLists.txt | 0 definitions/Makefile.am | 2119 ++ definitions/boot.def | 87 + definitions/budg/boot.def | 30 + definitions/budg/mars_labeling.def | 20 + definitions/budg/section.1.def | 107 + definitions/budg/section.4.def | 107 + definitions/bufr/boot.def | 53 + definitions/bufr/old_section.1.def | 27 + definitions/bufr/rdb_key.def | 90 + definitions/bufr/section.0.def | 10 + definitions/bufr/section.1.def | 43 + definitions/bufr/section.2.def | 15 + definitions/bufr/section.3.def | 14 + definitions/bufr/section.4.def | 12 + definitions/bufr/section.5.def | 12 + definitions/bufr/section1_flags.table | 3 + definitions/bufr/section3_flags.table | 5 + definitions/cdf/boot.def | 1 + definitions/common/statistics_grid.def | 33 + definitions/common/statistics_spectral.def | 24 + definitions/create_def.pl | 209 + definitions/create_mars_struct.pl | 89 + definitions/create_tables.pl | 121 + definitions/dummy.am | 0 definitions/empty_template.def | 2 + definitions/extrules.am | 4 + definitions/grib1/0.ecmf.table | 1 + definitions/grib1/0.table | 96 + definitions/grib1/1.table | 5 + definitions/grib1/10.table | 4 + definitions/grib1/11-2.table | 34 + definitions/grib1/11.table | 9 + definitions/grib1/12.table | 13 + definitions/grib1/13.table | 4 + definitions/grib1/2.0.1.table | 129 + definitions/grib1/2.0.2.table | 128 + definitions/grib1/2.0.3.table | 129 + definitions/grib1/2.128.table | 255 + definitions/grib1/2.253.128.table | 253 + definitions/grib1/2.46.254.table | 256 + definitions/grib1/2.98.128.table | 255 + definitions/grib1/2.98.129.table | 237 + definitions/grib1/2.98.130.table | 27 + definitions/grib1/2.98.131.table | 74 + definitions/grib1/2.98.132.table | 10 + definitions/grib1/2.98.133.table | 93 + definitions/grib1/2.98.140.table | 47 + definitions/grib1/2.98.150.table | 33 + definitions/grib1/2.98.151.table | 80 + definitions/grib1/2.98.160.table | 109 + definitions/grib1/2.98.162.table | 78 + definitions/grib1/2.98.170.table | 18 + definitions/grib1/2.98.171.table | 185 + definitions/grib1/2.98.172.table | 37 + definitions/grib1/2.98.173.table | 37 + definitions/grib1/2.98.174.table | 53 + definitions/grib1/2.98.175.table | 31 + definitions/grib1/2.98.180.table | 33 + definitions/grib1/2.98.190.table | 33 + definitions/grib1/2.98.200.table | 237 + definitions/grib1/2.98.201.table | 78 + definitions/grib1/2.98.210.table | 101 + definitions/grib1/2.98.211.table | 15 + definitions/grib1/2.98.220.table | 2 + definitions/grib1/2.98.228.table | 12 + definitions/grib1/2.98.230.table | 32 + definitions/grib1/2.table | 5 + definitions/grib1/3.table | 53 + definitions/grib1/4.table | 15 + definitions/grib1/5.table | 17 + definitions/grib1/6.table | 24 + definitions/grib1/7.table | 7 + definitions/grib1/8.table | 7 + definitions/grib1/9.table | 2 + definitions/grib1/Makefile.am | 0 definitions/grib1/boot.def | 77 + definitions/grib1/cfName.def | 310 + definitions/grib1/cluster_domain.def | 7 + definitions/grib1/data.grid_ieee.def | 49 + definitions/grib1/data.grid_jpeg.def | 1 + definitions/grib1/data.grid_second_order.def | 172 + .../grib1/data.grid_second_order_SPD1.def | 1 + .../grib1/data.grid_second_order_SPD2.def | 1 + .../grib1/data.grid_second_order_SPD3.def | 1 + .../data.grid_second_order_constant_width.def | 142 + .../data.grid_second_order_general_grib1.def | 141 + .../grib1/data.grid_second_order_no_SPD.def | 1 + .../data.grid_second_order_row_by_row.def | 100 + definitions/grib1/data.grid_simple.def | 75 + definitions/grib1/data.grid_simple_matrix.def | 183 + definitions/grib1/data.spectral_complex.def | 142 + definitions/grib1/data.spectral_ieee.def | 138 + definitions/grib1/data.spectral_simple.def | 46 + definitions/grib1/gds_not_present_bitmap.def | 35 + definitions/grib1/grid.192.78.3.10.table | 7 + definitions/grib1/grid.192.78.3.9.table | 3 + definitions/grib1/grid_21.def | 26 + definitions/grib1/grid_22.def | 26 + definitions/grib1/grid_23.def | 26 + definitions/grib1/grid_24.def | 26 + definitions/grib1/grid_25.def | 26 + definitions/grib1/grid_26.def | 25 + definitions/grib1/grid_61.def | 26 + definitions/grib1/grid_62.def | 26 + definitions/grib1/grid_63.def | 26 + definitions/grib1/grid_64.def | 26 + definitions/grib1/grid_definition_0.def | 18 + definitions/grib1/grid_definition_1.def | 57 + definitions/grib1/grid_definition_10.def | 19 + definitions/grib1/grid_definition_13.def | 14 + definitions/grib1/grid_definition_14.def | 17 + definitions/grib1/grid_definition_192.78.def | 51 + definitions/grib1/grid_definition_192.98.def | 31 + definitions/grib1/grid_definition_193.98.def | 100 + definitions/grib1/grid_definition_20.def | 20 + definitions/grib1/grid_definition_24.def | 17 + definitions/grib1/grid_definition_3.def | 15 + definitions/grib1/grid_definition_30.def | 22 + definitions/grib1/grid_definition_34.def | 20 + definitions/grib1/grid_definition_4.def | 15 + definitions/grib1/grid_definition_5.def | 83 + definitions/grib1/grid_definition_50.def | 14 + definitions/grib1/grid_definition_60.def | 17 + definitions/grib1/grid_definition_70.def | 19 + definitions/grib1/grid_definition_8.def | 14 + definitions/grib1/grid_definition_80.def | 19 + definitions/grib1/grid_definition_90.def | 76 + .../grib1/grid_definition_gaussian.def | 90 + definitions/grib1/grid_definition_lambert.def | 124 + definitions/grib1/grid_definition_latlon.def | 73 + .../grid_definition_spherical_harmonics.def | 44 + .../grib1/grid_first_last_resandcomp.def | 42 + definitions/grib1/grid_rotation.def | 19 + definitions/grib1/grid_stretching.def | 19 + definitions/grib1/local.1.def | 12 + definitions/grib1/local.13.table | 5 + definitions/grib1/local.214.1.def | 58 + definitions/grib1/local.214.244.def | 303 + definitions/grib1/local.214.245.def | 65 + definitions/grib1/local.214.def | 3 + definitions/grib1/local.253.def | 12 + definitions/grib1/local.254.def | 10 + definitions/grib1/local.34.def | 1 + definitions/grib1/local.46.def | 13 + definitions/grib1/local.54.def | 33 + definitions/grib1/local.7.1.def | 100 + definitions/grib1/local.7.def | 3 + definitions/grib1/local.78.def | 2 + definitions/grib1/local.80.def | 11 + definitions/grib1/local.96.def | 3 + definitions/grib1/local.98.1.def | 79 + definitions/grib1/local.98.10.def | 97 + definitions/grib1/local.98.11.def | 75 + definitions/grib1/local.98.13.def | 196 + definitions/grib1/local.98.14.def | 61 + definitions/grib1/local.98.15.def | 71 + definitions/grib1/local.98.16.def | 94 + definitions/grib1/local.98.17.def | 66 + definitions/grib1/local.98.18.def | 77 + definitions/grib1/local.98.19.def | 65 + definitions/grib1/local.98.190.def | 58 + definitions/grib1/local.98.191.def | 70 + definitions/grib1/local.98.192.def | 70 + definitions/grib1/local.98.2.def | 82 + definitions/grib1/local.98.20.def | 46 + definitions/grib1/local.98.21.def | 99 + definitions/grib1/local.98.218.def | 76 + definitions/grib1/local.98.23.def | 97 + definitions/grib1/local.98.24.def | 45 + definitions/grib1/local.98.244.def | 1 + definitions/grib1/local.98.245.def | 1 + definitions/grib1/local.98.25.def | 52 + definitions/grib1/local.98.26.def | 61 + definitions/grib1/local.98.27.def | 67 + definitions/grib1/local.98.28.def | 54 + definitions/grib1/local.98.29.def | 104 + definitions/grib1/local.98.3.def | 46 + definitions/grib1/local.98.30.def | 101 + definitions/grib1/local.98.31.def | 66 + definitions/grib1/local.98.32.def | 87 + definitions/grib1/local.98.33.def | 33 + definitions/grib1/local.98.35.def | 40 + definitions/grib1/local.98.36.def | 83 + definitions/grib1/local.98.37.def | 68 + definitions/grib1/local.98.38.def | 54 + definitions/grib1/local.98.39.def | 59 + definitions/grib1/local.98.4.def | 239 + definitions/grib1/local.98.40.def | 52 + definitions/grib1/local.98.5.def | 94 + definitions/grib1/local.98.50.def | 68 + definitions/grib1/local.98.6.def | 55 + definitions/grib1/local.98.7.def | 62 + definitions/grib1/local.98.8.def | 37 + definitions/grib1/local.98.9.def | 111 + definitions/grib1/local.98.def | 12 + definitions/grib1/localConcepts/ammc/name.def | 5 + .../grib1/localConcepts/ammc/paramId.def | 5 + .../grib1/localConcepts/ammc/shortName.def | 5 + .../grib1/localConcepts/ammc/units.def | 5 + definitions/grib1/localConcepts/cnmc/name.def | 2435 +++ .../grib1/localConcepts/cnmc/paramId.def | 2435 +++ .../grib1/localConcepts/cnmc/shortName.def | 2435 +++ .../grib1/localConcepts/cnmc/units.def | 2435 +++ .../grib1/localConcepts/ecmf/cfName.def | 196 + definitions/grib1/localConcepts/ecmf/name.def | 15316 ++++++++++++++ .../grib1/localConcepts/ecmf/paramId.def | 15316 ++++++++++++++ .../grib1/localConcepts/ecmf/shortName.def | 15316 ++++++++++++++ .../grib1/localConcepts/ecmf/units.def | 15316 ++++++++++++++ definitions/grib1/localConcepts/edzw/name.def | 2442 +++ .../grib1/localConcepts/edzw/paramId.def | 2442 +++ .../grib1/localConcepts/edzw/shortName.def | 2442 +++ .../grib1/localConcepts/edzw/units.def | 2442 +++ definitions/grib1/localConcepts/lfpw/name.def | 18 + .../grib1/localConcepts/lfpw/paramId.def | 18 + .../grib1/localConcepts/lfpw/shortName.def | 18 + .../grib1/localConcepts/lfpw/units.def | 18 + definitions/grib1/localConcepts/sbsj/name.def | 1136 + .../grib1/localConcepts/sbsj/paramId.def | 1136 + .../grib1/localConcepts/sbsj/shortName.def | 1136 + .../grib1/localConcepts/sbsj/units.def | 1136 + .../grib1/localDefinitionNumber.96.table | 1 + .../grib1/localDefinitionNumber.98.table | 42 + definitions/grib1/local_no_mars.98.1.def | 78 + definitions/grib1/local_no_mars.98.24.def | 43 + definitions/grib1/ls.def | 16 + definitions/grib1/mars_labeling.23.def | 9 + definitions/grib1/mars_labeling.4.def | 209 + definitions/grib1/mars_labeling.def | 24 + definitions/grib1/name.def | 2109 ++ definitions/grib1/ocean.1.table | 17 + definitions/grib1/param.pl | 61 + definitions/grib1/paramId.def | 2109 ++ definitions/grib1/precision.table | 6 + definitions/grib1/predefined_grid.def | 139 + definitions/grib1/regimes.table | 5 + definitions/grib1/resolution_flags.def | 33 + definitions/grib1/scanning_mode.def | 46 + definitions/grib1/section.0.def | 10 + definitions/grib1/section.1.def | 358 + definitions/grib1/section.2.def | 105 + definitions/grib1/section.3.def | 39 + definitions/grib1/section.4.def | 237 + definitions/grib1/section.5.def | 21 + definitions/grib1/sensitive_area_domain.def | 27 + definitions/grib1/shortName.def | 2109 ++ definitions/grib1/tube_domain.def | 7 + definitions/grib1/units.def | 2109 ++ definitions/grib2/boot.def | 40 + definitions/grib2/boot_multifield.def | 31 + definitions/grib2/cfName.def | 134 + definitions/grib2/d | 98 + definitions/grib2/diff.out | 793 + definitions/grib2/dimension.0.table | 1 + definitions/grib2/dimensionTableNumber.table | 1 + definitions/grib2/dimensionType.table | 2 + .../grib2/grib2LocalSectionNumber.98.table | 19 + definitions/grib2/local.98.0.def | 3 + definitions/grib2/local.98.1.def | 3 + definitions/grib2/local.98.11.def | 28 + definitions/grib2/local.98.15.def | 18 + definitions/grib2/local.98.16.def | 16 + definitions/grib2/local.98.18.def | 26 + definitions/grib2/local.98.20.def | 20 + definitions/grib2/local.98.21.def | 42 + definitions/grib2/local.98.24.def | 12 + definitions/grib2/local.98.25.def | 19 + definitions/grib2/local.98.26.def | 18 + definitions/grib2/local.98.28.def | 16 + definitions/grib2/local.98.30.def | 28 + definitions/grib2/local.98.300.def | 22 + definitions/grib2/local.98.36.def | 17 + definitions/grib2/local.98.38.def | 28 + definitions/grib2/local.98.39.def | 26 + definitions/grib2/local.98.500.def | 53 + definitions/grib2/local.98.7.def | 24 + definitions/grib2/local.98.9.def | 47 + definitions/grib2/local.98.def | 34 + definitions/grib2/local.tigge.1.def | 5 + definitions/grib2/local/1098/2.1.table | 1 + definitions/grib2/local/1098/centres.table | 12 + definitions/grib2/local/1098/models.table | 13 + definitions/grib2/local/1098/template.2.0.def | 19 + .../grib2/local/1098/template.2.0.def~ | 19 + definitions/grib2/local/2.0.table | 91 + definitions/grib2/localConcepts/cnmc/name.def | 3050 +++ .../grib2/localConcepts/cnmc/paramId.def | 3050 +++ .../grib2/localConcepts/cnmc/shortName.def | 3050 +++ .../grib2/localConcepts/cnmc/units.def | 3050 +++ .../grib2/localConcepts/ecmf/cfName.def | 51 + definitions/grib2/localConcepts/ecmf/name.def | 17149 ++++++++++++++++ .../grib2/localConcepts/ecmf/paramId.def | 17149 ++++++++++++++++ .../grib2/localConcepts/ecmf/shortName.def | 17149 ++++++++++++++++ .../grib2/localConcepts/ecmf/units.def | 17149 ++++++++++++++++ definitions/grib2/localConcepts/edzw/name.def | 3050 +++ .../grib2/localConcepts/edzw/paramId.def | 3050 +++ .../grib2/localConcepts/edzw/shortName.def | 3050 +++ .../grib2/localConcepts/edzw/units.def | 3050 +++ definitions/grib2/localConcepts/kwbc/name.def | 1633 ++ .../grib2/localConcepts/kwbc/paramId.def | 1633 ++ .../grib2/localConcepts/kwbc/shortName.def | 1633 ++ .../grib2/localConcepts/kwbc/units.def | 1633 ++ definitions/grib2/localConcepts/lfpw/name.def | 21 + .../grib2/localConcepts/lfpw/paramId.def | 21 + .../grib2/localConcepts/lfpw/shortName.def | 21 + .../grib2/localConcepts/lfpw/units.def | 21 + .../grib2/localConcepts/lfpw1/name.def | 7 + .../grib2/localConcepts/lfpw1/paramId.def | 7 + .../grib2/localConcepts/lfpw1/shortName.def | 7 + .../grib2/localConcepts/lfpw1/units.def | 7 + definitions/grib2/ls.def | 2 + definitions/grib2/mars_labeling.def | 52 + definitions/grib2/meta.def | 12 + definitions/grib2/name.def | 2246 ++ definitions/grib2/paramId.def | 2246 ++ definitions/grib2/parameters.def | 33 + definitions/grib2/products_0.def | 18 + definitions/grib2/products_1.def | 20 + definitions/grib2/products_2.def | 19 + definitions/grib2/products_3.def | 19 + definitions/grib2/products_4.def | 103 + definitions/grib2/products_5.def | 103 + definitions/grib2/rules.def | 19 + definitions/grib2/section.0.def | 22 + definitions/grib2/section.1.def | 115 + definitions/grib2/section.2.def | 46 + definitions/grib2/section.3.def | 109 + definitions/grib2/section.4.def | 75 + definitions/grib2/section.5.def | 72 + definitions/grib2/section.6.def | 64 + definitions/grib2/section.7.def | 49 + definitions/grib2/section.8.def | 15 + definitions/grib2/sections.def | 71 + definitions/grib2/shortName.def | 2246 ++ definitions/grib2/tables/0.0.table | 10 + definitions/grib2/tables/0/0.0.table | 10 + definitions/grib2/tables/0/1.0.table | 7 + definitions/grib2/tables/0/1.1.table | 5 + definitions/grib2/tables/0/1.2.table | 8 + definitions/grib2/tables/0/1.3.table | 10 + definitions/grib2/tables/0/1.4.table | 13 + definitions/grib2/tables/0/3.0.table | 6 + definitions/grib2/tables/0/3.1.table | 43 + definitions/grib2/tables/0/3.10.table | 7 + definitions/grib2/tables/0/3.11.table | 5 + definitions/grib2/tables/0/3.15.table | 25 + definitions/grib2/tables/0/3.2.table | 11 + definitions/grib2/tables/0/3.20.table | 6 + definitions/grib2/tables/0/3.21.table | 8 + definitions/grib2/tables/0/3.3.table | 7 + definitions/grib2/tables/0/3.4.table | 9 + definitions/grib2/tables/0/3.5.table | 5 + definitions/grib2/tables/0/3.6.table | 2 + definitions/grib2/tables/0/3.7.table | 11 + definitions/grib2/tables/0/3.8.table | 8 + definitions/grib2/tables/0/3.9.table | 3 + definitions/grib2/tables/0/4.0.table | 38 + definitions/grib2/tables/0/4.1.0.table | 30 + definitions/grib2/tables/0/4.1.1.table | 9 + definitions/grib2/tables/0/4.1.10.table | 12 + definitions/grib2/tables/0/4.1.2.table | 11 + definitions/grib2/tables/0/4.1.3.table | 9 + definitions/grib2/tables/0/4.1.table | 5 + definitions/grib2/tables/0/4.10.table | 14 + definitions/grib2/tables/0/4.11.table | 9 + definitions/grib2/tables/0/4.12.table | 69 + definitions/grib2/tables/0/4.13.table | 68 + definitions/grib2/tables/0/4.14.table | 68 + definitions/grib2/tables/0/4.15.table | 68 + definitions/grib2/tables/0/4.151.table | 70 + definitions/grib2/tables/0/4.2.0.0.table | 23 + definitions/grib2/tables/0/4.2.0.1.table | 66 + definitions/grib2/tables/0/4.2.0.13.table | 6 + definitions/grib2/tables/0/4.2.0.14.table | 7 + definitions/grib2/tables/0/4.2.0.15.table | 14 + definitions/grib2/tables/0/4.2.0.18.table | 14 + definitions/grib2/tables/0/4.2.0.19.table | 24 + definitions/grib2/tables/0/4.2.0.190.table | 6 + definitions/grib2/tables/0/4.2.0.191.table | 6 + definitions/grib2/tables/0/4.2.0.2.table | 35 + definitions/grib2/tables/0/4.2.0.20.table | 26 + definitions/grib2/tables/0/4.2.0.3.table | 25 + definitions/grib2/tables/0/4.2.0.4.table | 14 + definitions/grib2/tables/0/4.2.0.5.table | 11 + definitions/grib2/tables/0/4.2.0.6.table | 30 + definitions/grib2/tables/0/4.2.0.7.table | 18 + definitions/grib2/tables/0/4.2.1.0.table | 16 + definitions/grib2/tables/0/4.2.1.1.table | 8 + definitions/grib2/tables/0/4.2.10.0.table | 20 + definitions/grib2/tables/0/4.2.10.1.table | 8 + definitions/grib2/tables/0/4.2.10.2.table | 12 + definitions/grib2/tables/0/4.2.10.3.table | 6 + definitions/grib2/tables/0/4.2.10.4.table | 9 + definitions/grib2/tables/0/4.2.2.0.table | 29 + definitions/grib2/tables/0/4.2.2.3.table | 16 + definitions/grib2/tables/0/4.2.3.0.table | 14 + definitions/grib2/tables/0/4.2.3.1.table | 11 + definitions/grib2/tables/0/4.2.table | 5 + definitions/grib2/tables/0/4.201.table | 71 + definitions/grib2/tables/0/4.202.table | 66 + definitions/grib2/tables/0/4.203.table | 88 + definitions/grib2/tables/0/4.204.table | 71 + definitions/grib2/tables/0/4.205.table | 68 + definitions/grib2/tables/0/4.206.table | 68 + definitions/grib2/tables/0/4.207.table | 70 + definitions/grib2/tables/0/4.208.table | 71 + definitions/grib2/tables/0/4.209.table | 70 + definitions/grib2/tables/0/4.210.table | 68 + definitions/grib2/tables/0/4.211.table | 69 + definitions/grib2/tables/0/4.212.table | 79 + definitions/grib2/tables/0/4.213.table | 77 + definitions/grib2/tables/0/4.215.table | 10 + definitions/grib2/tables/0/4.216.table | 95 + definitions/grib2/tables/0/4.217.table | 70 + definitions/grib2/tables/0/4.220.table | 68 + definitions/grib2/tables/0/4.221.table | 68 + definitions/grib2/tables/0/4.230.table | 117 + definitions/grib2/tables/0/4.3.table | 13 + definitions/grib2/tables/0/4.4.table | 16 + definitions/grib2/tables/0/4.5.table | 33 + definitions/grib2/tables/0/4.6.table | 8 + definitions/grib2/tables/0/4.7.table | 73 + definitions/grib2/tables/0/4.8.table | 68 + definitions/grib2/tables/0/4.9.table | 71 + definitions/grib2/tables/0/4.91.table | 78 + definitions/grib2/tables/0/5.0.table | 16 + definitions/grib2/tables/0/5.1.table | 5 + definitions/grib2/tables/0/5.2.table | 6 + definitions/grib2/tables/0/5.3.table | 6 + definitions/grib2/tables/0/5.4.table | 5 + definitions/grib2/tables/0/5.40.table | 5 + definitions/grib2/tables/0/5.40000.table | 5 + definitions/grib2/tables/0/5.5.table | 7 + definitions/grib2/tables/0/5.6.table | 68 + definitions/grib2/tables/0/5.7.table | 6 + definitions/grib2/tables/0/5.8.table | 3 + definitions/grib2/tables/0/5.9.table | 4 + definitions/grib2/tables/0/6.0.table | 7 + definitions/grib2/tables/0/stepType.table | 4 + definitions/grib2/tables/1.0.table | 15 + definitions/grib2/tables/1/0.0.table | 10 + definitions/grib2/tables/1/1.0.table | 7 + definitions/grib2/tables/1/1.1.table | 5 + definitions/grib2/tables/1/1.2.table | 8 + definitions/grib2/tables/1/1.3.table | 10 + definitions/grib2/tables/1/1.4.table | 13 + definitions/grib2/tables/1/3.0.table | 6 + definitions/grib2/tables/1/3.1.table | 43 + definitions/grib2/tables/1/3.10.table | 7 + definitions/grib2/tables/1/3.11.table | 5 + definitions/grib2/tables/1/3.15.table | 25 + definitions/grib2/tables/1/3.2.table | 11 + definitions/grib2/tables/1/3.20.table | 6 + definitions/grib2/tables/1/3.21.table | 8 + definitions/grib2/tables/1/3.3.table | 7 + definitions/grib2/tables/1/3.4.table | 9 + definitions/grib2/tables/1/3.5.table | 5 + definitions/grib2/tables/1/3.6.table | 2 + definitions/grib2/tables/1/3.7.table | 11 + definitions/grib2/tables/1/3.8.table | 8 + definitions/grib2/tables/1/3.9.table | 3 + definitions/grib2/tables/1/4.0.table | 38 + definitions/grib2/tables/1/4.1.0.table | 30 + definitions/grib2/tables/1/4.1.1.table | 9 + definitions/grib2/tables/1/4.1.10.table | 12 + definitions/grib2/tables/1/4.1.2.table | 11 + definitions/grib2/tables/1/4.1.3.table | 9 + definitions/grib2/tables/1/4.1.table | 5 + definitions/grib2/tables/1/4.10.table | 14 + definitions/grib2/tables/1/4.11.table | 9 + definitions/grib2/tables/1/4.12.table | 69 + definitions/grib2/tables/1/4.13.table | 68 + definitions/grib2/tables/1/4.14.table | 68 + definitions/grib2/tables/1/4.15.table | 68 + definitions/grib2/tables/1/4.151.table | 70 + definitions/grib2/tables/1/4.2.0.0.table | 23 + definitions/grib2/tables/1/4.2.0.1.table | 62 + definitions/grib2/tables/1/4.2.0.13.table | 6 + definitions/grib2/tables/1/4.2.0.14.table | 7 + definitions/grib2/tables/1/4.2.0.15.table | 14 + definitions/grib2/tables/1/4.2.0.18.table | 14 + definitions/grib2/tables/1/4.2.0.19.table | 24 + definitions/grib2/tables/1/4.2.0.190.table | 6 + definitions/grib2/tables/1/4.2.0.191.table | 6 + definitions/grib2/tables/1/4.2.0.2.table | 35 + definitions/grib2/tables/1/4.2.0.20.table | 13 + definitions/grib2/tables/1/4.2.0.3.table | 25 + definitions/grib2/tables/1/4.2.0.4.table | 14 + definitions/grib2/tables/1/4.2.0.5.table | 11 + definitions/grib2/tables/1/4.2.0.6.table | 30 + definitions/grib2/tables/1/4.2.0.7.table | 18 + definitions/grib2/tables/1/4.2.1.0.table | 16 + definitions/grib2/tables/1/4.2.1.1.table | 8 + definitions/grib2/tables/1/4.2.10.0.table | 20 + definitions/grib2/tables/1/4.2.10.1.table | 8 + definitions/grib2/tables/1/4.2.10.2.table | 12 + definitions/grib2/tables/1/4.2.10.3.table | 6 + definitions/grib2/tables/1/4.2.10.4.table | 9 + definitions/grib2/tables/1/4.2.2.0.table | 29 + definitions/grib2/tables/1/4.2.2.3.table | 16 + definitions/grib2/tables/1/4.2.3.0.table | 14 + definitions/grib2/tables/1/4.2.3.1.table | 11 + definitions/grib2/tables/1/4.2.table | 5 + definitions/grib2/tables/1/4.201.table | 71 + definitions/grib2/tables/1/4.202.table | 66 + definitions/grib2/tables/1/4.203.table | 88 + definitions/grib2/tables/1/4.204.table | 71 + definitions/grib2/tables/1/4.205.table | 68 + definitions/grib2/tables/1/4.206.table | 68 + definitions/grib2/tables/1/4.207.table | 70 + definitions/grib2/tables/1/4.208.table | 71 + definitions/grib2/tables/1/4.209.table | 70 + definitions/grib2/tables/1/4.210.table | 68 + definitions/grib2/tables/1/4.211.table | 69 + definitions/grib2/tables/1/4.212.table | 79 + definitions/grib2/tables/1/4.213.table | 77 + definitions/grib2/tables/1/4.215.table | 10 + definitions/grib2/tables/1/4.216.table | 95 + definitions/grib2/tables/1/4.217.table | 70 + definitions/grib2/tables/1/4.220.table | 68 + definitions/grib2/tables/1/4.221.table | 68 + definitions/grib2/tables/1/4.230.table | 47 + definitions/grib2/tables/1/4.3.table | 13 + definitions/grib2/tables/1/4.4.table | 16 + definitions/grib2/tables/1/4.5.table | 33 + definitions/grib2/tables/1/4.6.table | 8 + definitions/grib2/tables/1/4.7.table | 73 + definitions/grib2/tables/1/4.8.table | 68 + definitions/grib2/tables/1/4.9.table | 71 + definitions/grib2/tables/1/4.91.table | 78 + definitions/grib2/tables/1/5.0.table | 16 + definitions/grib2/tables/1/5.1.table | 5 + definitions/grib2/tables/1/5.2.table | 6 + definitions/grib2/tables/1/5.3.table | 6 + definitions/grib2/tables/1/5.4.table | 5 + definitions/grib2/tables/1/5.40.table | 5 + definitions/grib2/tables/1/5.40000.table | 5 + definitions/grib2/tables/1/5.5.table | 7 + definitions/grib2/tables/1/5.6.table | 68 + definitions/grib2/tables/1/5.7.table | 6 + definitions/grib2/tables/1/5.8.table | 3 + definitions/grib2/tables/1/5.9.table | 4 + definitions/grib2/tables/1/6.0.table | 7 + definitions/grib2/tables/1/stepType.table | 4 + definitions/grib2/tables/10/0.0.table | 10 + definitions/grib2/tables/10/1.0.table | 15 + definitions/grib2/tables/10/1.1.table | 4 + definitions/grib2/tables/10/1.2.table | 8 + definitions/grib2/tables/10/1.3.table | 10 + definitions/grib2/tables/10/1.4.table | 13 + definitions/grib2/tables/10/3.0.table | 6 + definitions/grib2/tables/10/3.1.table | 47 + definitions/grib2/tables/10/3.10.table | 8 + definitions/grib2/tables/10/3.11.table | 7 + definitions/grib2/tables/10/3.15.table | 23 + definitions/grib2/tables/10/3.2.table | 14 + definitions/grib2/tables/10/3.20.table | 6 + definitions/grib2/tables/10/3.21.table | 8 + definitions/grib2/tables/10/3.3.table | 9 + definitions/grib2/tables/10/3.4.table | 10 + definitions/grib2/tables/10/3.5.table | 5 + definitions/grib2/tables/10/3.6.table | 2 + definitions/grib2/tables/10/3.7.table | 5 + definitions/grib2/tables/10/3.8.table | 7 + definitions/grib2/tables/10/3.9.table | 4 + definitions/grib2/tables/10/4.0.table | 54 + definitions/grib2/tables/10/4.1.0.table | 27 + definitions/grib2/tables/10/4.1.1.table | 7 + definitions/grib2/tables/10/4.1.10.table | 10 + definitions/grib2/tables/10/4.1.192.table | 4 + definitions/grib2/tables/10/4.1.2.table | 9 + definitions/grib2/tables/10/4.1.3.table | 8 + definitions/grib2/tables/10/4.1.table | 5 + definitions/grib2/tables/10/4.10.table | 16 + definitions/grib2/tables/10/4.11.table | 10 + definitions/grib2/tables/10/4.12.table | 7 + definitions/grib2/tables/10/4.13.table | 6 + definitions/grib2/tables/10/4.14.table | 6 + definitions/grib2/tables/10/4.15.table | 11 + definitions/grib2/tables/10/4.151.table | 70 + definitions/grib2/tables/10/4.192.table | 4 + definitions/grib2/tables/10/4.2.0.0.table | 25 + definitions/grib2/tables/10/4.2.0.1.table | 95 + definitions/grib2/tables/10/4.2.0.13.table | 5 + definitions/grib2/tables/10/4.2.0.14.table | 7 + definitions/grib2/tables/10/4.2.0.15.table | 19 + definitions/grib2/tables/10/4.2.0.16.table | 10 + definitions/grib2/tables/10/4.2.0.18.table | 18 + definitions/grib2/tables/10/4.2.0.19.table | 32 + definitions/grib2/tables/10/4.2.0.190.table | 5 + definitions/grib2/tables/10/4.2.0.191.table | 7 + definitions/grib2/tables/10/4.2.0.2.table | 40 + definitions/grib2/tables/10/4.2.0.20.table | 42 + definitions/grib2/tables/10/4.2.0.3.table | 31 + definitions/grib2/tables/10/4.2.0.4.table | 20 + definitions/grib2/tables/10/4.2.0.5.table | 11 + definitions/grib2/tables/10/4.2.0.6.table | 40 + definitions/grib2/tables/10/4.2.0.7.table | 20 + definitions/grib2/tables/10/4.2.1.0.table | 11 + definitions/grib2/tables/10/4.2.1.1.table | 7 + definitions/grib2/tables/10/4.2.1.2.table | 14 + definitions/grib2/tables/10/4.2.10.0.table | 50 + definitions/grib2/tables/10/4.2.10.1.table | 8 + definitions/grib2/tables/10/4.2.10.191.table | 6 + definitions/grib2/tables/10/4.2.10.2.table | 14 + definitions/grib2/tables/10/4.2.10.3.table | 6 + definitions/grib2/tables/10/4.2.10.4.table | 18 + definitions/grib2/tables/10/4.2.2.0.table | 37 + definitions/grib2/tables/10/4.2.2.3.table | 27 + definitions/grib2/tables/10/4.2.2.4.table | 8 + definitions/grib2/tables/10/4.2.3.0.table | 14 + definitions/grib2/tables/10/4.2.3.1.table | 28 + definitions/grib2/tables/10/4.2.table | 5 + definitions/grib2/tables/10/4.201.table | 10 + definitions/grib2/tables/10/4.202.table | 4 + definitions/grib2/tables/10/4.203.table | 26 + definitions/grib2/tables/10/4.204.table | 9 + definitions/grib2/tables/10/4.205.table | 6 + definitions/grib2/tables/10/4.206.table | 6 + definitions/grib2/tables/10/4.207.table | 10 + definitions/grib2/tables/10/4.208.table | 9 + definitions/grib2/tables/10/4.209.table | 9 + definitions/grib2/tables/10/4.210.table | 6 + definitions/grib2/tables/10/4.211.table | 7 + definitions/grib2/tables/10/4.212.table | 18 + definitions/grib2/tables/10/4.213.table | 16 + definitions/grib2/tables/10/4.215.table | 9 + definitions/grib2/tables/10/4.216.table | 96 + definitions/grib2/tables/10/4.217.table | 8 + definitions/grib2/tables/10/4.218.table | 38 + definitions/grib2/tables/10/4.219.table | 8 + definitions/grib2/tables/10/4.220.table | 6 + definitions/grib2/tables/10/4.221.table | 6 + definitions/grib2/tables/10/4.222.table | 6 + definitions/grib2/tables/10/4.223.table | 5 + definitions/grib2/tables/10/4.224.table | 18 + definitions/grib2/tables/10/4.225.table | 266 + definitions/grib2/tables/10/4.227.table | 9 + definitions/grib2/tables/10/4.230.table | 415 + definitions/grib2/tables/10/4.233.table | 415 + definitions/grib2/tables/10/4.234.table | 21 + definitions/grib2/tables/10/4.235.table | 8 + definitions/grib2/tables/10/4.3.table | 16 + definitions/grib2/tables/10/4.4.table | 17 + definitions/grib2/tables/10/4.5.table | 49 + definitions/grib2/tables/10/4.6.table | 9 + definitions/grib2/tables/10/4.7.table | 14 + definitions/grib2/tables/10/4.8.table | 6 + definitions/grib2/tables/10/4.9.table | 9 + definitions/grib2/tables/10/4.91.table | 16 + definitions/grib2/tables/10/5.0.table | 24 + definitions/grib2/tables/10/5.1.table | 6 + definitions/grib2/tables/10/5.2.table | 8 + definitions/grib2/tables/10/5.3.table | 7 + definitions/grib2/tables/10/5.4.table | 6 + definitions/grib2/tables/10/5.40.table | 5 + definitions/grib2/tables/10/5.40000.table | 5 + definitions/grib2/tables/10/5.5.table | 7 + definitions/grib2/tables/10/5.50002.table | 19 + definitions/grib2/tables/10/5.6.table | 7 + definitions/grib2/tables/10/5.7.table | 7 + definitions/grib2/tables/10/5.8.table | 3 + definitions/grib2/tables/10/5.9.table | 4 + definitions/grib2/tables/10/6.0.table | 6 + definitions/grib2/tables/10/stepType.table | 4 + definitions/grib2/tables/2/0.0.table | 10 + definitions/grib2/tables/2/1.0.table | 7 + definitions/grib2/tables/2/1.1.table | 5 + definitions/grib2/tables/2/1.2.table | 8 + definitions/grib2/tables/2/1.3.table | 10 + definitions/grib2/tables/2/1.4.table | 13 + definitions/grib2/tables/2/3.0.table | 6 + definitions/grib2/tables/2/3.1.table | 43 + definitions/grib2/tables/2/3.10.table | 7 + definitions/grib2/tables/2/3.11.table | 5 + definitions/grib2/tables/2/3.15.table | 25 + definitions/grib2/tables/2/3.2.table | 11 + definitions/grib2/tables/2/3.20.table | 6 + definitions/grib2/tables/2/3.21.table | 8 + definitions/grib2/tables/2/3.3.table | 7 + definitions/grib2/tables/2/3.4.table | 9 + definitions/grib2/tables/2/3.5.table | 5 + definitions/grib2/tables/2/3.6.table | 2 + definitions/grib2/tables/2/3.7.table | 11 + definitions/grib2/tables/2/3.8.table | 8 + definitions/grib2/tables/2/3.9.table | 3 + definitions/grib2/tables/2/4.0.table | 38 + definitions/grib2/tables/2/4.1.0.table | 30 + definitions/grib2/tables/2/4.1.1.table | 9 + definitions/grib2/tables/2/4.1.10.table | 12 + definitions/grib2/tables/2/4.1.2.table | 11 + definitions/grib2/tables/2/4.1.3.table | 9 + definitions/grib2/tables/2/4.1.table | 5 + definitions/grib2/tables/2/4.10.table | 14 + definitions/grib2/tables/2/4.11.table | 9 + definitions/grib2/tables/2/4.12.table | 69 + definitions/grib2/tables/2/4.13.table | 68 + definitions/grib2/tables/2/4.14.table | 68 + definitions/grib2/tables/2/4.15.table | 68 + definitions/grib2/tables/2/4.151.table | 70 + definitions/grib2/tables/2/4.2.0.0.table | 23 + definitions/grib2/tables/2/4.2.0.1.table | 62 + definitions/grib2/tables/2/4.2.0.13.table | 6 + definitions/grib2/tables/2/4.2.0.14.table | 7 + definitions/grib2/tables/2/4.2.0.15.table | 14 + definitions/grib2/tables/2/4.2.0.18.table | 14 + definitions/grib2/tables/2/4.2.0.19.table | 24 + definitions/grib2/tables/2/4.2.0.190.table | 6 + definitions/grib2/tables/2/4.2.0.191.table | 6 + definitions/grib2/tables/2/4.2.0.2.table | 35 + definitions/grib2/tables/2/4.2.0.20.table | 13 + definitions/grib2/tables/2/4.2.0.3.table | 25 + definitions/grib2/tables/2/4.2.0.4.table | 14 + definitions/grib2/tables/2/4.2.0.5.table | 11 + definitions/grib2/tables/2/4.2.0.6.table | 30 + definitions/grib2/tables/2/4.2.0.7.table | 18 + definitions/grib2/tables/2/4.2.1.0.table | 16 + definitions/grib2/tables/2/4.2.1.1.table | 8 + definitions/grib2/tables/2/4.2.10.0.table | 20 + definitions/grib2/tables/2/4.2.10.1.table | 8 + definitions/grib2/tables/2/4.2.10.2.table | 12 + definitions/grib2/tables/2/4.2.10.3.table | 6 + definitions/grib2/tables/2/4.2.10.4.table | 9 + definitions/grib2/tables/2/4.2.2.0.table | 29 + definitions/grib2/tables/2/4.2.2.3.table | 16 + definitions/grib2/tables/2/4.2.3.0.table | 14 + definitions/grib2/tables/2/4.2.3.1.table | 11 + definitions/grib2/tables/2/4.2.table | 5 + definitions/grib2/tables/2/4.201.table | 71 + definitions/grib2/tables/2/4.202.table | 66 + definitions/grib2/tables/2/4.203.table | 88 + definitions/grib2/tables/2/4.204.table | 71 + definitions/grib2/tables/2/4.205.table | 68 + definitions/grib2/tables/2/4.206.table | 68 + definitions/grib2/tables/2/4.207.table | 70 + definitions/grib2/tables/2/4.208.table | 71 + definitions/grib2/tables/2/4.209.table | 70 + definitions/grib2/tables/2/4.210.table | 68 + definitions/grib2/tables/2/4.211.table | 69 + definitions/grib2/tables/2/4.212.table | 79 + definitions/grib2/tables/2/4.213.table | 77 + definitions/grib2/tables/2/4.215.table | 10 + definitions/grib2/tables/2/4.216.table | 95 + definitions/grib2/tables/2/4.217.table | 70 + definitions/grib2/tables/2/4.220.table | 68 + definitions/grib2/tables/2/4.221.table | 68 + definitions/grib2/tables/2/4.230.table | 47 + definitions/grib2/tables/2/4.3.table | 13 + definitions/grib2/tables/2/4.4.table | 16 + definitions/grib2/tables/2/4.5.table | 33 + definitions/grib2/tables/2/4.6.table | 8 + definitions/grib2/tables/2/4.7.table | 73 + definitions/grib2/tables/2/4.8.table | 68 + definitions/grib2/tables/2/4.9.table | 71 + definitions/grib2/tables/2/4.91.table | 78 + definitions/grib2/tables/2/5.0.table | 16 + definitions/grib2/tables/2/5.1.table | 5 + definitions/grib2/tables/2/5.2.table | 6 + definitions/grib2/tables/2/5.3.table | 6 + definitions/grib2/tables/2/5.4.table | 5 + definitions/grib2/tables/2/5.40.table | 5 + definitions/grib2/tables/2/5.40000.table | 5 + definitions/grib2/tables/2/5.5.table | 7 + definitions/grib2/tables/2/5.6.table | 68 + definitions/grib2/tables/2/5.7.table | 6 + definitions/grib2/tables/2/5.8.table | 3 + definitions/grib2/tables/2/5.9.table | 4 + definitions/grib2/tables/2/6.0.table | 7 + definitions/grib2/tables/2/stepType.table | 4 + definitions/grib2/tables/3/0.0.table | 10 + definitions/grib2/tables/3/1.0.table | 7 + definitions/grib2/tables/3/1.1.table | 5 + definitions/grib2/tables/3/1.2.table | 8 + definitions/grib2/tables/3/1.3.table | 10 + definitions/grib2/tables/3/1.4.table | 13 + definitions/grib2/tables/3/3.0.table | 6 + definitions/grib2/tables/3/3.1.table | 43 + definitions/grib2/tables/3/3.10.table | 7 + definitions/grib2/tables/3/3.11.table | 5 + definitions/grib2/tables/3/3.15.table | 25 + definitions/grib2/tables/3/3.2.table | 11 + definitions/grib2/tables/3/3.20.table | 6 + definitions/grib2/tables/3/3.21.table | 8 + definitions/grib2/tables/3/3.3.table | 7 + definitions/grib2/tables/3/3.4.table | 9 + definitions/grib2/tables/3/3.5.table | 5 + definitions/grib2/tables/3/3.6.table | 2 + definitions/grib2/tables/3/3.7.table | 11 + definitions/grib2/tables/3/3.8.table | 8 + definitions/grib2/tables/3/3.9.table | 3 + definitions/grib2/tables/3/4.0.table | 38 + definitions/grib2/tables/3/4.1.0.table | 30 + definitions/grib2/tables/3/4.1.1.table | 9 + definitions/grib2/tables/3/4.1.10.table | 12 + definitions/grib2/tables/3/4.1.2.table | 11 + definitions/grib2/tables/3/4.1.3.table | 9 + definitions/grib2/tables/3/4.1.table | 5 + definitions/grib2/tables/3/4.10.table | 14 + definitions/grib2/tables/3/4.11.table | 9 + definitions/grib2/tables/3/4.12.table | 69 + definitions/grib2/tables/3/4.13.table | 68 + definitions/grib2/tables/3/4.14.table | 68 + definitions/grib2/tables/3/4.15.table | 68 + definitions/grib2/tables/3/4.151.table | 70 + definitions/grib2/tables/3/4.2.0.0.table | 23 + definitions/grib2/tables/3/4.2.0.1.table | 62 + definitions/grib2/tables/3/4.2.0.13.table | 6 + definitions/grib2/tables/3/4.2.0.14.table | 7 + definitions/grib2/tables/3/4.2.0.15.table | 14 + definitions/grib2/tables/3/4.2.0.18.table | 14 + definitions/grib2/tables/3/4.2.0.19.table | 24 + definitions/grib2/tables/3/4.2.0.190.table | 6 + definitions/grib2/tables/3/4.2.0.191.table | 6 + definitions/grib2/tables/3/4.2.0.2.table | 35 + definitions/grib2/tables/3/4.2.0.20.table | 13 + definitions/grib2/tables/3/4.2.0.3.table | 25 + definitions/grib2/tables/3/4.2.0.4.table | 14 + definitions/grib2/tables/3/4.2.0.5.table | 11 + definitions/grib2/tables/3/4.2.0.6.table | 30 + definitions/grib2/tables/3/4.2.0.7.table | 18 + definitions/grib2/tables/3/4.2.1.0.table | 16 + definitions/grib2/tables/3/4.2.1.1.table | 8 + definitions/grib2/tables/3/4.2.10.0.table | 20 + definitions/grib2/tables/3/4.2.10.1.table | 8 + definitions/grib2/tables/3/4.2.10.2.table | 12 + definitions/grib2/tables/3/4.2.10.3.table | 6 + definitions/grib2/tables/3/4.2.10.4.table | 9 + definitions/grib2/tables/3/4.2.2.0.table | 29 + definitions/grib2/tables/3/4.2.2.3.table | 16 + definitions/grib2/tables/3/4.2.3.0.table | 14 + definitions/grib2/tables/3/4.2.3.1.table | 11 + definitions/grib2/tables/3/4.2.table | 5 + definitions/grib2/tables/3/4.201.table | 71 + definitions/grib2/tables/3/4.202.table | 66 + definitions/grib2/tables/3/4.203.table | 88 + definitions/grib2/tables/3/4.204.table | 71 + definitions/grib2/tables/3/4.205.table | 68 + definitions/grib2/tables/3/4.206.table | 68 + definitions/grib2/tables/3/4.207.table | 70 + definitions/grib2/tables/3/4.208.table | 71 + definitions/grib2/tables/3/4.209.table | 70 + definitions/grib2/tables/3/4.210.table | 68 + definitions/grib2/tables/3/4.211.table | 69 + definitions/grib2/tables/3/4.212.table | 79 + definitions/grib2/tables/3/4.213.table | 77 + definitions/grib2/tables/3/4.215.table | 10 + definitions/grib2/tables/3/4.216.table | 95 + definitions/grib2/tables/3/4.217.table | 70 + definitions/grib2/tables/3/4.220.table | 68 + definitions/grib2/tables/3/4.221.table | 68 + definitions/grib2/tables/3/4.230.table | 47 + definitions/grib2/tables/3/4.3.table | 13 + definitions/grib2/tables/3/4.4.table | 16 + definitions/grib2/tables/3/4.5.table | 33 + definitions/grib2/tables/3/4.6.table | 8 + definitions/grib2/tables/3/4.7.table | 73 + definitions/grib2/tables/3/4.8.table | 68 + definitions/grib2/tables/3/4.9.table | 71 + definitions/grib2/tables/3/4.91.table | 78 + definitions/grib2/tables/3/5.0.table | 16 + definitions/grib2/tables/3/5.1.table | 5 + definitions/grib2/tables/3/5.2.table | 6 + definitions/grib2/tables/3/5.3.table | 6 + definitions/grib2/tables/3/5.4.table | 5 + definitions/grib2/tables/3/5.40.table | 5 + definitions/grib2/tables/3/5.40000.table | 5 + definitions/grib2/tables/3/5.5.table | 7 + definitions/grib2/tables/3/5.50002.table | 19 + definitions/grib2/tables/3/5.6.table | 68 + definitions/grib2/tables/3/5.7.table | 6 + definitions/grib2/tables/3/5.8.table | 3 + definitions/grib2/tables/3/5.9.table | 4 + definitions/grib2/tables/3/6.0.table | 7 + definitions/grib2/tables/3/stepType.table | 4 + definitions/grib2/tables/4/0.0.table | 10 + definitions/grib2/tables/4/1.0.table | 7 + definitions/grib2/tables/4/1.1.table | 5 + definitions/grib2/tables/4/1.2.table | 8 + definitions/grib2/tables/4/1.3.table | 10 + definitions/grib2/tables/4/1.4.table | 13 + definitions/grib2/tables/4/3.0.table | 6 + definitions/grib2/tables/4/3.1.table | 43 + definitions/grib2/tables/4/3.10.table | 7 + definitions/grib2/tables/4/3.11.table | 5 + definitions/grib2/tables/4/3.15.table | 25 + definitions/grib2/tables/4/3.2.table | 11 + definitions/grib2/tables/4/3.20.table | 6 + definitions/grib2/tables/4/3.21.table | 8 + definitions/grib2/tables/4/3.3.table | 7 + definitions/grib2/tables/4/3.4.table | 9 + definitions/grib2/tables/4/3.5.table | 5 + definitions/grib2/tables/4/3.6.table | 2 + definitions/grib2/tables/4/3.7.table | 11 + definitions/grib2/tables/4/3.8.table | 8 + definitions/grib2/tables/4/3.9.table | 3 + definitions/grib2/tables/4/4.0.table | 39 + definitions/grib2/tables/4/4.1.0.table | 30 + definitions/grib2/tables/4/4.1.1.table | 9 + definitions/grib2/tables/4/4.1.10.table | 12 + definitions/grib2/tables/4/4.1.192.table | 4 + definitions/grib2/tables/4/4.1.2.table | 11 + definitions/grib2/tables/4/4.1.3.table | 9 + definitions/grib2/tables/4/4.1.table | 5 + definitions/grib2/tables/4/4.10.table | 14 + definitions/grib2/tables/4/4.11.table | 9 + definitions/grib2/tables/4/4.12.table | 69 + definitions/grib2/tables/4/4.13.table | 68 + definitions/grib2/tables/4/4.14.table | 68 + definitions/grib2/tables/4/4.15.table | 68 + definitions/grib2/tables/4/4.151.table | 70 + definitions/grib2/tables/4/4.2.0.0.table | 23 + definitions/grib2/tables/4/4.2.0.1.table | 62 + definitions/grib2/tables/4/4.2.0.13.table | 6 + definitions/grib2/tables/4/4.2.0.14.table | 7 + definitions/grib2/tables/4/4.2.0.15.table | 14 + definitions/grib2/tables/4/4.2.0.18.table | 14 + definitions/grib2/tables/4/4.2.0.19.table | 24 + definitions/grib2/tables/4/4.2.0.190.table | 6 + definitions/grib2/tables/4/4.2.0.191.table | 6 + definitions/grib2/tables/4/4.2.0.2.table | 35 + definitions/grib2/tables/4/4.2.0.20.table | 13 + definitions/grib2/tables/4/4.2.0.3.table | 25 + definitions/grib2/tables/4/4.2.0.4.table | 14 + definitions/grib2/tables/4/4.2.0.5.table | 11 + definitions/grib2/tables/4/4.2.0.6.table | 30 + definitions/grib2/tables/4/4.2.0.7.table | 18 + definitions/grib2/tables/4/4.2.1.0.table | 16 + definitions/grib2/tables/4/4.2.1.1.table | 8 + definitions/grib2/tables/4/4.2.10.0.table | 20 + definitions/grib2/tables/4/4.2.10.1.table | 8 + definitions/grib2/tables/4/4.2.10.2.table | 12 + definitions/grib2/tables/4/4.2.10.3.table | 6 + definitions/grib2/tables/4/4.2.10.4.table | 9 + definitions/grib2/tables/4/4.2.192.0.table | 2 + definitions/grib2/tables/4/4.2.192.1.table | 2 + definitions/grib2/tables/4/4.2.192.10.table | 2 + definitions/grib2/tables/4/4.2.192.100.table | 2 + definitions/grib2/tables/4/4.2.192.101.table | 2 + definitions/grib2/tables/4/4.2.192.102.table | 2 + definitions/grib2/tables/4/4.2.192.103.table | 2 + definitions/grib2/tables/4/4.2.192.104.table | 2 + definitions/grib2/tables/4/4.2.192.105.table | 2 + definitions/grib2/tables/4/4.2.192.106.table | 2 + definitions/grib2/tables/4/4.2.192.107.table | 2 + definitions/grib2/tables/4/4.2.192.108.table | 2 + definitions/grib2/tables/4/4.2.192.109.table | 2 + definitions/grib2/tables/4/4.2.192.11.table | 2 + definitions/grib2/tables/4/4.2.192.110.table | 2 + definitions/grib2/tables/4/4.2.192.111.table | 2 + definitions/grib2/tables/4/4.2.192.112.table | 2 + definitions/grib2/tables/4/4.2.192.113.table | 2 + definitions/grib2/tables/4/4.2.192.114.table | 2 + definitions/grib2/tables/4/4.2.192.115.table | 2 + definitions/grib2/tables/4/4.2.192.116.table | 2 + definitions/grib2/tables/4/4.2.192.117.table | 2 + definitions/grib2/tables/4/4.2.192.118.table | 2 + definitions/grib2/tables/4/4.2.192.119.table | 2 + definitions/grib2/tables/4/4.2.192.12.table | 2 + definitions/grib2/tables/4/4.2.192.120.table | 2 + definitions/grib2/tables/4/4.2.192.121.table | 2 + definitions/grib2/tables/4/4.2.192.122.table | 2 + definitions/grib2/tables/4/4.2.192.123.table | 2 + definitions/grib2/tables/4/4.2.192.124.table | 2 + definitions/grib2/tables/4/4.2.192.125.table | 2 + definitions/grib2/tables/4/4.2.192.126.table | 2 + definitions/grib2/tables/4/4.2.192.127.table | 2 + definitions/grib2/tables/4/4.2.192.128.table | 2 + definitions/grib2/tables/4/4.2.192.129.table | 2 + definitions/grib2/tables/4/4.2.192.13.table | 2 + definitions/grib2/tables/4/4.2.192.130.table | 2 + definitions/grib2/tables/4/4.2.192.131.table | 2 + definitions/grib2/tables/4/4.2.192.132.table | 2 + definitions/grib2/tables/4/4.2.192.133.table | 2 + definitions/grib2/tables/4/4.2.192.134.table | 2 + definitions/grib2/tables/4/4.2.192.135.table | 2 + definitions/grib2/tables/4/4.2.192.136.table | 2 + definitions/grib2/tables/4/4.2.192.137.table | 2 + definitions/grib2/tables/4/4.2.192.138.table | 2 + definitions/grib2/tables/4/4.2.192.139.table | 2 + definitions/grib2/tables/4/4.2.192.14.table | 2 + definitions/grib2/tables/4/4.2.192.140.table | 2 + definitions/grib2/tables/4/4.2.192.141.table | 2 + definitions/grib2/tables/4/4.2.192.142.table | 2 + definitions/grib2/tables/4/4.2.192.143.table | 2 + definitions/grib2/tables/4/4.2.192.144.table | 2 + definitions/grib2/tables/4/4.2.192.145.table | 2 + definitions/grib2/tables/4/4.2.192.146.table | 2 + definitions/grib2/tables/4/4.2.192.147.table | 2 + definitions/grib2/tables/4/4.2.192.148.table | 2 + definitions/grib2/tables/4/4.2.192.149.table | 2 + definitions/grib2/tables/4/4.2.192.15.table | 2 + definitions/grib2/tables/4/4.2.192.150.table | 2 + definitions/grib2/tables/4/4.2.192.151.table | 2 + definitions/grib2/tables/4/4.2.192.152.table | 2 + definitions/grib2/tables/4/4.2.192.153.table | 2 + definitions/grib2/tables/4/4.2.192.154.table | 2 + definitions/grib2/tables/4/4.2.192.155.table | 2 + definitions/grib2/tables/4/4.2.192.156.table | 2 + definitions/grib2/tables/4/4.2.192.157.table | 2 + definitions/grib2/tables/4/4.2.192.158.table | 2 + definitions/grib2/tables/4/4.2.192.159.table | 2 + definitions/grib2/tables/4/4.2.192.16.table | 2 + definitions/grib2/tables/4/4.2.192.160.table | 2 + definitions/grib2/tables/4/4.2.192.161.table | 2 + definitions/grib2/tables/4/4.2.192.162.table | 2 + definitions/grib2/tables/4/4.2.192.163.table | 2 + definitions/grib2/tables/4/4.2.192.164.table | 2 + definitions/grib2/tables/4/4.2.192.165.table | 2 + definitions/grib2/tables/4/4.2.192.166.table | 2 + definitions/grib2/tables/4/4.2.192.167.table | 2 + definitions/grib2/tables/4/4.2.192.168.table | 2 + definitions/grib2/tables/4/4.2.192.169.table | 2 + definitions/grib2/tables/4/4.2.192.17.table | 2 + definitions/grib2/tables/4/4.2.192.170.table | 2 + definitions/grib2/tables/4/4.2.192.171.table | 2 + definitions/grib2/tables/4/4.2.192.172.table | 2 + definitions/grib2/tables/4/4.2.192.173.table | 2 + definitions/grib2/tables/4/4.2.192.174.table | 2 + definitions/grib2/tables/4/4.2.192.175.table | 2 + definitions/grib2/tables/4/4.2.192.176.table | 2 + definitions/grib2/tables/4/4.2.192.177.table | 2 + definitions/grib2/tables/4/4.2.192.178.table | 2 + definitions/grib2/tables/4/4.2.192.179.table | 2 + definitions/grib2/tables/4/4.2.192.18.table | 2 + definitions/grib2/tables/4/4.2.192.180.table | 2 + definitions/grib2/tables/4/4.2.192.181.table | 2 + definitions/grib2/tables/4/4.2.192.182.table | 2 + definitions/grib2/tables/4/4.2.192.183.table | 2 + definitions/grib2/tables/4/4.2.192.184.table | 2 + definitions/grib2/tables/4/4.2.192.185.table | 2 + definitions/grib2/tables/4/4.2.192.186.table | 2 + definitions/grib2/tables/4/4.2.192.187.table | 2 + definitions/grib2/tables/4/4.2.192.188.table | 2 + definitions/grib2/tables/4/4.2.192.189.table | 2 + definitions/grib2/tables/4/4.2.192.19.table | 2 + definitions/grib2/tables/4/4.2.192.190.table | 2 + definitions/grib2/tables/4/4.2.192.191.table | 2 + definitions/grib2/tables/4/4.2.192.192.table | 2 + definitions/grib2/tables/4/4.2.192.193.table | 2 + definitions/grib2/tables/4/4.2.192.194.table | 2 + definitions/grib2/tables/4/4.2.192.195.table | 2 + definitions/grib2/tables/4/4.2.192.196.table | 2 + definitions/grib2/tables/4/4.2.192.197.table | 2 + definitions/grib2/tables/4/4.2.192.198.table | 2 + definitions/grib2/tables/4/4.2.192.199.table | 2 + definitions/grib2/tables/4/4.2.192.2.table | 2 + definitions/grib2/tables/4/4.2.192.20.table | 2 + definitions/grib2/tables/4/4.2.192.200.table | 2 + definitions/grib2/tables/4/4.2.192.201.table | 2 + definitions/grib2/tables/4/4.2.192.202.table | 2 + definitions/grib2/tables/4/4.2.192.203.table | 2 + definitions/grib2/tables/4/4.2.192.204.table | 2 + definitions/grib2/tables/4/4.2.192.205.table | 2 + definitions/grib2/tables/4/4.2.192.206.table | 2 + definitions/grib2/tables/4/4.2.192.207.table | 2 + definitions/grib2/tables/4/4.2.192.208.table | 2 + definitions/grib2/tables/4/4.2.192.209.table | 2 + definitions/grib2/tables/4/4.2.192.21.table | 2 + definitions/grib2/tables/4/4.2.192.210.table | 2 + definitions/grib2/tables/4/4.2.192.211.table | 2 + definitions/grib2/tables/4/4.2.192.212.table | 2 + definitions/grib2/tables/4/4.2.192.213.table | 2 + definitions/grib2/tables/4/4.2.192.214.table | 2 + definitions/grib2/tables/4/4.2.192.215.table | 2 + definitions/grib2/tables/4/4.2.192.216.table | 2 + definitions/grib2/tables/4/4.2.192.217.table | 2 + definitions/grib2/tables/4/4.2.192.218.table | 2 + definitions/grib2/tables/4/4.2.192.219.table | 2 + definitions/grib2/tables/4/4.2.192.22.table | 2 + definitions/grib2/tables/4/4.2.192.220.table | 2 + definitions/grib2/tables/4/4.2.192.221.table | 2 + definitions/grib2/tables/4/4.2.192.222.table | 2 + definitions/grib2/tables/4/4.2.192.223.table | 2 + definitions/grib2/tables/4/4.2.192.224.table | 2 + definitions/grib2/tables/4/4.2.192.225.table | 2 + definitions/grib2/tables/4/4.2.192.226.table | 2 + definitions/grib2/tables/4/4.2.192.227.table | 2 + definitions/grib2/tables/4/4.2.192.228.table | 2 + definitions/grib2/tables/4/4.2.192.229.table | 2 + definitions/grib2/tables/4/4.2.192.23.table | 2 + definitions/grib2/tables/4/4.2.192.230.table | 2 + definitions/grib2/tables/4/4.2.192.231.table | 2 + definitions/grib2/tables/4/4.2.192.232.table | 2 + definitions/grib2/tables/4/4.2.192.233.table | 2 + definitions/grib2/tables/4/4.2.192.234.table | 2 + definitions/grib2/tables/4/4.2.192.235.table | 2 + definitions/grib2/tables/4/4.2.192.236.table | 2 + definitions/grib2/tables/4/4.2.192.237.table | 2 + definitions/grib2/tables/4/4.2.192.238.table | 2 + definitions/grib2/tables/4/4.2.192.239.table | 2 + definitions/grib2/tables/4/4.2.192.24.table | 2 + definitions/grib2/tables/4/4.2.192.240.table | 2 + definitions/grib2/tables/4/4.2.192.241.table | 2 + definitions/grib2/tables/4/4.2.192.242.table | 2 + definitions/grib2/tables/4/4.2.192.243.table | 2 + definitions/grib2/tables/4/4.2.192.244.table | 2 + definitions/grib2/tables/4/4.2.192.245.table | 2 + definitions/grib2/tables/4/4.2.192.246.table | 2 + definitions/grib2/tables/4/4.2.192.247.table | 2 + definitions/grib2/tables/4/4.2.192.248.table | 2 + definitions/grib2/tables/4/4.2.192.249.table | 2 + definitions/grib2/tables/4/4.2.192.25.table | 2 + definitions/grib2/tables/4/4.2.192.250.table | 2 + definitions/grib2/tables/4/4.2.192.251.table | 2 + definitions/grib2/tables/4/4.2.192.252.table | 2 + definitions/grib2/tables/4/4.2.192.253.table | 2 + definitions/grib2/tables/4/4.2.192.254.table | 2 + definitions/grib2/tables/4/4.2.192.255.table | 2 + definitions/grib2/tables/4/4.2.192.26.table | 2 + definitions/grib2/tables/4/4.2.192.27.table | 2 + definitions/grib2/tables/4/4.2.192.28.table | 2 + definitions/grib2/tables/4/4.2.192.29.table | 2 + definitions/grib2/tables/4/4.2.192.3.table | 2 + definitions/grib2/tables/4/4.2.192.30.table | 2 + definitions/grib2/tables/4/4.2.192.31.table | 2 + definitions/grib2/tables/4/4.2.192.32.table | 2 + definitions/grib2/tables/4/4.2.192.33.table | 2 + definitions/grib2/tables/4/4.2.192.34.table | 2 + definitions/grib2/tables/4/4.2.192.35.table | 2 + definitions/grib2/tables/4/4.2.192.36.table | 2 + definitions/grib2/tables/4/4.2.192.37.table | 2 + definitions/grib2/tables/4/4.2.192.38.table | 2 + definitions/grib2/tables/4/4.2.192.39.table | 2 + definitions/grib2/tables/4/4.2.192.4.table | 2 + definitions/grib2/tables/4/4.2.192.40.table | 2 + definitions/grib2/tables/4/4.2.192.41.table | 2 + definitions/grib2/tables/4/4.2.192.42.table | 2 + definitions/grib2/tables/4/4.2.192.43.table | 2 + definitions/grib2/tables/4/4.2.192.44.table | 2 + definitions/grib2/tables/4/4.2.192.45.table | 2 + definitions/grib2/tables/4/4.2.192.46.table | 2 + definitions/grib2/tables/4/4.2.192.47.table | 2 + definitions/grib2/tables/4/4.2.192.48.table | 2 + definitions/grib2/tables/4/4.2.192.49.table | 2 + definitions/grib2/tables/4/4.2.192.5.table | 2 + definitions/grib2/tables/4/4.2.192.50.table | 2 + definitions/grib2/tables/4/4.2.192.51.table | 2 + definitions/grib2/tables/4/4.2.192.52.table | 2 + definitions/grib2/tables/4/4.2.192.53.table | 2 + definitions/grib2/tables/4/4.2.192.54.table | 2 + definitions/grib2/tables/4/4.2.192.55.table | 2 + definitions/grib2/tables/4/4.2.192.56.table | 2 + definitions/grib2/tables/4/4.2.192.57.table | 2 + definitions/grib2/tables/4/4.2.192.58.table | 2 + definitions/grib2/tables/4/4.2.192.59.table | 2 + definitions/grib2/tables/4/4.2.192.6.table | 2 + definitions/grib2/tables/4/4.2.192.60.table | 2 + definitions/grib2/tables/4/4.2.192.61.table | 2 + definitions/grib2/tables/4/4.2.192.62.table | 2 + definitions/grib2/tables/4/4.2.192.63.table | 2 + definitions/grib2/tables/4/4.2.192.64.table | 2 + definitions/grib2/tables/4/4.2.192.65.table | 2 + definitions/grib2/tables/4/4.2.192.66.table | 2 + definitions/grib2/tables/4/4.2.192.67.table | 2 + definitions/grib2/tables/4/4.2.192.68.table | 2 + definitions/grib2/tables/4/4.2.192.69.table | 2 + definitions/grib2/tables/4/4.2.192.7.table | 2 + definitions/grib2/tables/4/4.2.192.70.table | 2 + definitions/grib2/tables/4/4.2.192.71.table | 2 + definitions/grib2/tables/4/4.2.192.72.table | 2 + definitions/grib2/tables/4/4.2.192.73.table | 2 + definitions/grib2/tables/4/4.2.192.74.table | 2 + definitions/grib2/tables/4/4.2.192.75.table | 2 + definitions/grib2/tables/4/4.2.192.76.table | 2 + definitions/grib2/tables/4/4.2.192.77.table | 2 + definitions/grib2/tables/4/4.2.192.78.table | 2 + definitions/grib2/tables/4/4.2.192.79.table | 2 + definitions/grib2/tables/4/4.2.192.8.table | 2 + definitions/grib2/tables/4/4.2.192.80.table | 2 + definitions/grib2/tables/4/4.2.192.81.table | 2 + definitions/grib2/tables/4/4.2.192.82.table | 2 + definitions/grib2/tables/4/4.2.192.83.table | 2 + definitions/grib2/tables/4/4.2.192.84.table | 2 + definitions/grib2/tables/4/4.2.192.85.table | 2 + definitions/grib2/tables/4/4.2.192.86.table | 2 + definitions/grib2/tables/4/4.2.192.87.table | 2 + definitions/grib2/tables/4/4.2.192.88.table | 2 + definitions/grib2/tables/4/4.2.192.89.table | 2 + definitions/grib2/tables/4/4.2.192.9.table | 2 + definitions/grib2/tables/4/4.2.192.90.table | 2 + definitions/grib2/tables/4/4.2.192.91.table | 2 + definitions/grib2/tables/4/4.2.192.92.table | 2 + definitions/grib2/tables/4/4.2.192.93.table | 2 + definitions/grib2/tables/4/4.2.192.94.table | 2 + definitions/grib2/tables/4/4.2.192.95.table | 2 + definitions/grib2/tables/4/4.2.192.96.table | 2 + definitions/grib2/tables/4/4.2.192.97.table | 2 + definitions/grib2/tables/4/4.2.192.98.table | 2 + definitions/grib2/tables/4/4.2.192.99.table | 2 + definitions/grib2/tables/4/4.2.2.0.table | 29 + definitions/grib2/tables/4/4.2.2.3.table | 16 + definitions/grib2/tables/4/4.2.3.0.table | 14 + definitions/grib2/tables/4/4.2.3.1.table | 11 + definitions/grib2/tables/4/4.2.table | 5 + definitions/grib2/tables/4/4.201.table | 71 + definitions/grib2/tables/4/4.202.table | 66 + definitions/grib2/tables/4/4.203.table | 88 + definitions/grib2/tables/4/4.204.table | 71 + definitions/grib2/tables/4/4.205.table | 68 + definitions/grib2/tables/4/4.206.table | 68 + definitions/grib2/tables/4/4.207.table | 70 + definitions/grib2/tables/4/4.208.table | 71 + definitions/grib2/tables/4/4.209.table | 70 + definitions/grib2/tables/4/4.210.table | 68 + definitions/grib2/tables/4/4.211.table | 69 + definitions/grib2/tables/4/4.212.table | 79 + definitions/grib2/tables/4/4.213.table | 77 + definitions/grib2/tables/4/4.215.table | 10 + definitions/grib2/tables/4/4.216.table | 95 + definitions/grib2/tables/4/4.217.table | 70 + definitions/grib2/tables/4/4.220.table | 68 + definitions/grib2/tables/4/4.221.table | 68 + definitions/grib2/tables/4/4.230.table | 47 + definitions/grib2/tables/4/4.3.table | 13 + definitions/grib2/tables/4/4.4.table | 16 + definitions/grib2/tables/4/4.5.table | 33 + definitions/grib2/tables/4/4.6.table | 8 + definitions/grib2/tables/4/4.7.table | 73 + definitions/grib2/tables/4/4.8.table | 68 + definitions/grib2/tables/4/4.9.table | 71 + definitions/grib2/tables/4/4.91.table | 78 + definitions/grib2/tables/4/5.0.table | 16 + definitions/grib2/tables/4/5.1.table | 5 + definitions/grib2/tables/4/5.2.table | 6 + definitions/grib2/tables/4/5.3.table | 6 + definitions/grib2/tables/4/5.4.table | 5 + definitions/grib2/tables/4/5.40.table | 5 + definitions/grib2/tables/4/5.40000.table | 5 + definitions/grib2/tables/4/5.5.table | 7 + definitions/grib2/tables/4/5.50002.table | 19 + definitions/grib2/tables/4/5.6.table | 68 + definitions/grib2/tables/4/5.7.table | 6 + definitions/grib2/tables/4/5.8.table | 3 + definitions/grib2/tables/4/5.9.table | 4 + definitions/grib2/tables/4/6.0.table | 7 + definitions/grib2/tables/4/stepType.table | 4 + definitions/grib2/tables/5/0.0.table | 10 + definitions/grib2/tables/5/1.0.table | 10 + definitions/grib2/tables/5/1.1.table | 5 + definitions/grib2/tables/5/1.2.table | 8 + definitions/grib2/tables/5/1.3.table | 10 + definitions/grib2/tables/5/1.4.table | 13 + definitions/grib2/tables/5/3.0.table | 6 + definitions/grib2/tables/5/3.1.table | 43 + definitions/grib2/tables/5/3.10.table | 7 + definitions/grib2/tables/5/3.11.table | 5 + definitions/grib2/tables/5/3.15.table | 25 + definitions/grib2/tables/5/3.2.table | 11 + definitions/grib2/tables/5/3.20.table | 6 + definitions/grib2/tables/5/3.21.table | 8 + definitions/grib2/tables/5/3.3.table | 7 + definitions/grib2/tables/5/3.4.table | 9 + definitions/grib2/tables/5/3.5.table | 5 + definitions/grib2/tables/5/3.6.table | 2 + definitions/grib2/tables/5/3.7.table | 11 + definitions/grib2/tables/5/3.8.table | 8 + definitions/grib2/tables/5/3.9.table | 3 + definitions/grib2/tables/5/4.0.table | 41 + definitions/grib2/tables/5/4.1.0.table | 30 + definitions/grib2/tables/5/4.1.1.table | 9 + definitions/grib2/tables/5/4.1.10.table | 12 + definitions/grib2/tables/5/4.1.192.table | 4 + definitions/grib2/tables/5/4.1.2.table | 11 + definitions/grib2/tables/5/4.1.3.table | 9 + definitions/grib2/tables/5/4.1.table | 5 + definitions/grib2/tables/5/4.10.table | 14 + definitions/grib2/tables/5/4.11.table | 9 + definitions/grib2/tables/5/4.12.table | 69 + definitions/grib2/tables/5/4.13.table | 68 + definitions/grib2/tables/5/4.14.table | 68 + definitions/grib2/tables/5/4.15.table | 10 + definitions/grib2/tables/5/4.151.table | 70 + definitions/grib2/tables/5/4.192.table | 4 + definitions/grib2/tables/5/4.2.0.0.table | 20 + definitions/grib2/tables/5/4.2.0.1.table | 71 + definitions/grib2/tables/5/4.2.0.13.table | 3 + definitions/grib2/tables/5/4.2.0.14.table | 5 + definitions/grib2/tables/5/4.2.0.15.table | 11 + definitions/grib2/tables/5/4.2.0.18.table | 11 + definitions/grib2/tables/5/4.2.0.19.table | 26 + definitions/grib2/tables/5/4.2.0.190.table | 3 + definitions/grib2/tables/5/4.2.0.191.table | 3 + definitions/grib2/tables/5/4.2.0.2.table | 33 + definitions/grib2/tables/5/4.2.0.20.table | 26 + definitions/grib2/tables/5/4.2.0.20.table~ | 13 + definitions/grib2/tables/5/4.2.0.3.table | 27 + definitions/grib2/tables/5/4.2.0.4.table | 17 + definitions/grib2/tables/5/4.2.0.5.table | 9 + definitions/grib2/tables/5/4.2.0.6.table | 28 + definitions/grib2/tables/5/4.2.0.7.table | 15 + definitions/grib2/tables/5/4.2.1.0.table | 9 + definitions/grib2/tables/5/4.2.1.1.table | 5 + definitions/grib2/tables/5/4.2.10.0.table | 16 + definitions/grib2/tables/5/4.2.10.1.table | 6 + definitions/grib2/tables/5/4.2.10.191.table | 0 definitions/grib2/tables/5/4.2.10.2.table | 11 + definitions/grib2/tables/5/4.2.10.3.table | 4 + definitions/grib2/tables/5/4.2.10.4.table | 6 + definitions/grib2/tables/5/4.2.192.0.table | 2 + definitions/grib2/tables/5/4.2.192.1.table | 2 + definitions/grib2/tables/5/4.2.192.10.table | 2 + definitions/grib2/tables/5/4.2.192.100.table | 2 + definitions/grib2/tables/5/4.2.192.101.table | 2 + definitions/grib2/tables/5/4.2.192.102.table | 2 + definitions/grib2/tables/5/4.2.192.103.table | 2 + definitions/grib2/tables/5/4.2.192.104.table | 2 + definitions/grib2/tables/5/4.2.192.105.table | 2 + definitions/grib2/tables/5/4.2.192.106.table | 2 + definitions/grib2/tables/5/4.2.192.107.table | 2 + definitions/grib2/tables/5/4.2.192.108.table | 2 + definitions/grib2/tables/5/4.2.192.109.table | 2 + definitions/grib2/tables/5/4.2.192.11.table | 2 + definitions/grib2/tables/5/4.2.192.110.table | 2 + definitions/grib2/tables/5/4.2.192.111.table | 2 + definitions/grib2/tables/5/4.2.192.112.table | 2 + definitions/grib2/tables/5/4.2.192.113.table | 2 + definitions/grib2/tables/5/4.2.192.114.table | 2 + definitions/grib2/tables/5/4.2.192.115.table | 2 + definitions/grib2/tables/5/4.2.192.116.table | 2 + definitions/grib2/tables/5/4.2.192.117.table | 2 + definitions/grib2/tables/5/4.2.192.118.table | 2 + definitions/grib2/tables/5/4.2.192.119.table | 2 + definitions/grib2/tables/5/4.2.192.12.table | 2 + definitions/grib2/tables/5/4.2.192.120.table | 2 + definitions/grib2/tables/5/4.2.192.121.table | 2 + definitions/grib2/tables/5/4.2.192.122.table | 2 + definitions/grib2/tables/5/4.2.192.123.table | 2 + definitions/grib2/tables/5/4.2.192.124.table | 2 + definitions/grib2/tables/5/4.2.192.125.table | 2 + definitions/grib2/tables/5/4.2.192.126.table | 2 + definitions/grib2/tables/5/4.2.192.127.table | 2 + definitions/grib2/tables/5/4.2.192.128.table | 2 + definitions/grib2/tables/5/4.2.192.129.table | 2 + definitions/grib2/tables/5/4.2.192.13.table | 2 + definitions/grib2/tables/5/4.2.192.130.table | 2 + definitions/grib2/tables/5/4.2.192.131.table | 2 + definitions/grib2/tables/5/4.2.192.132.table | 2 + definitions/grib2/tables/5/4.2.192.133.table | 2 + definitions/grib2/tables/5/4.2.192.134.table | 2 + definitions/grib2/tables/5/4.2.192.135.table | 2 + definitions/grib2/tables/5/4.2.192.136.table | 2 + definitions/grib2/tables/5/4.2.192.137.table | 2 + definitions/grib2/tables/5/4.2.192.138.table | 2 + definitions/grib2/tables/5/4.2.192.139.table | 2 + definitions/grib2/tables/5/4.2.192.14.table | 2 + definitions/grib2/tables/5/4.2.192.140.table | 2 + definitions/grib2/tables/5/4.2.192.141.table | 2 + definitions/grib2/tables/5/4.2.192.142.table | 2 + definitions/grib2/tables/5/4.2.192.143.table | 2 + definitions/grib2/tables/5/4.2.192.144.table | 2 + definitions/grib2/tables/5/4.2.192.145.table | 2 + definitions/grib2/tables/5/4.2.192.146.table | 2 + definitions/grib2/tables/5/4.2.192.147.table | 2 + definitions/grib2/tables/5/4.2.192.148.table | 2 + definitions/grib2/tables/5/4.2.192.149.table | 2 + definitions/grib2/tables/5/4.2.192.15.table | 2 + definitions/grib2/tables/5/4.2.192.150.table | 2 + definitions/grib2/tables/5/4.2.192.151.table | 2 + definitions/grib2/tables/5/4.2.192.152.table | 2 + definitions/grib2/tables/5/4.2.192.153.table | 2 + definitions/grib2/tables/5/4.2.192.154.table | 2 + definitions/grib2/tables/5/4.2.192.155.table | 2 + definitions/grib2/tables/5/4.2.192.156.table | 2 + definitions/grib2/tables/5/4.2.192.157.table | 2 + definitions/grib2/tables/5/4.2.192.158.table | 2 + definitions/grib2/tables/5/4.2.192.159.table | 2 + definitions/grib2/tables/5/4.2.192.16.table | 2 + definitions/grib2/tables/5/4.2.192.160.table | 2 + definitions/grib2/tables/5/4.2.192.161.table | 2 + definitions/grib2/tables/5/4.2.192.162.table | 2 + definitions/grib2/tables/5/4.2.192.163.table | 2 + definitions/grib2/tables/5/4.2.192.164.table | 2 + definitions/grib2/tables/5/4.2.192.165.table | 2 + definitions/grib2/tables/5/4.2.192.166.table | 2 + definitions/grib2/tables/5/4.2.192.167.table | 2 + definitions/grib2/tables/5/4.2.192.168.table | 2 + definitions/grib2/tables/5/4.2.192.169.table | 2 + definitions/grib2/tables/5/4.2.192.17.table | 2 + definitions/grib2/tables/5/4.2.192.170.table | 2 + definitions/grib2/tables/5/4.2.192.171.table | 2 + definitions/grib2/tables/5/4.2.192.172.table | 2 + definitions/grib2/tables/5/4.2.192.173.table | 2 + definitions/grib2/tables/5/4.2.192.174.table | 2 + definitions/grib2/tables/5/4.2.192.175.table | 2 + definitions/grib2/tables/5/4.2.192.176.table | 2 + definitions/grib2/tables/5/4.2.192.177.table | 2 + definitions/grib2/tables/5/4.2.192.178.table | 2 + definitions/grib2/tables/5/4.2.192.179.table | 2 + definitions/grib2/tables/5/4.2.192.18.table | 2 + definitions/grib2/tables/5/4.2.192.180.table | 2 + definitions/grib2/tables/5/4.2.192.181.table | 2 + definitions/grib2/tables/5/4.2.192.182.table | 2 + definitions/grib2/tables/5/4.2.192.183.table | 2 + definitions/grib2/tables/5/4.2.192.184.table | 2 + definitions/grib2/tables/5/4.2.192.185.table | 2 + definitions/grib2/tables/5/4.2.192.186.table | 2 + definitions/grib2/tables/5/4.2.192.187.table | 2 + definitions/grib2/tables/5/4.2.192.188.table | 2 + definitions/grib2/tables/5/4.2.192.189.table | 2 + definitions/grib2/tables/5/4.2.192.19.table | 2 + definitions/grib2/tables/5/4.2.192.190.table | 2 + definitions/grib2/tables/5/4.2.192.191.table | 2 + definitions/grib2/tables/5/4.2.192.192.table | 2 + definitions/grib2/tables/5/4.2.192.193.table | 2 + definitions/grib2/tables/5/4.2.192.194.table | 2 + definitions/grib2/tables/5/4.2.192.195.table | 2 + definitions/grib2/tables/5/4.2.192.196.table | 2 + definitions/grib2/tables/5/4.2.192.197.table | 2 + definitions/grib2/tables/5/4.2.192.198.table | 2 + definitions/grib2/tables/5/4.2.192.199.table | 2 + definitions/grib2/tables/5/4.2.192.2.table | 2 + definitions/grib2/tables/5/4.2.192.20.table | 2 + definitions/grib2/tables/5/4.2.192.200.table | 2 + definitions/grib2/tables/5/4.2.192.201.table | 2 + definitions/grib2/tables/5/4.2.192.202.table | 2 + definitions/grib2/tables/5/4.2.192.203.table | 2 + definitions/grib2/tables/5/4.2.192.204.table | 2 + definitions/grib2/tables/5/4.2.192.205.table | 2 + definitions/grib2/tables/5/4.2.192.206.table | 2 + definitions/grib2/tables/5/4.2.192.207.table | 2 + definitions/grib2/tables/5/4.2.192.208.table | 2 + definitions/grib2/tables/5/4.2.192.209.table | 2 + definitions/grib2/tables/5/4.2.192.21.table | 2 + definitions/grib2/tables/5/4.2.192.210.table | 2 + definitions/grib2/tables/5/4.2.192.211.table | 2 + definitions/grib2/tables/5/4.2.192.212.table | 2 + definitions/grib2/tables/5/4.2.192.213.table | 2 + definitions/grib2/tables/5/4.2.192.214.table | 2 + definitions/grib2/tables/5/4.2.192.215.table | 2 + definitions/grib2/tables/5/4.2.192.216.table | 2 + definitions/grib2/tables/5/4.2.192.217.table | 2 + definitions/grib2/tables/5/4.2.192.218.table | 2 + definitions/grib2/tables/5/4.2.192.219.table | 2 + definitions/grib2/tables/5/4.2.192.22.table | 2 + definitions/grib2/tables/5/4.2.192.220.table | 2 + definitions/grib2/tables/5/4.2.192.221.table | 2 + definitions/grib2/tables/5/4.2.192.222.table | 2 + definitions/grib2/tables/5/4.2.192.223.table | 2 + definitions/grib2/tables/5/4.2.192.224.table | 2 + definitions/grib2/tables/5/4.2.192.225.table | 2 + definitions/grib2/tables/5/4.2.192.226.table | 2 + definitions/grib2/tables/5/4.2.192.227.table | 2 + definitions/grib2/tables/5/4.2.192.228.table | 2 + definitions/grib2/tables/5/4.2.192.229.table | 2 + definitions/grib2/tables/5/4.2.192.23.table | 2 + definitions/grib2/tables/5/4.2.192.230.table | 2 + definitions/grib2/tables/5/4.2.192.231.table | 2 + definitions/grib2/tables/5/4.2.192.232.table | 2 + definitions/grib2/tables/5/4.2.192.233.table | 2 + definitions/grib2/tables/5/4.2.192.234.table | 2 + definitions/grib2/tables/5/4.2.192.235.table | 2 + definitions/grib2/tables/5/4.2.192.236.table | 2 + definitions/grib2/tables/5/4.2.192.237.table | 2 + definitions/grib2/tables/5/4.2.192.238.table | 2 + definitions/grib2/tables/5/4.2.192.239.table | 2 + definitions/grib2/tables/5/4.2.192.24.table | 2 + definitions/grib2/tables/5/4.2.192.240.table | 2 + definitions/grib2/tables/5/4.2.192.241.table | 2 + definitions/grib2/tables/5/4.2.192.242.table | 2 + definitions/grib2/tables/5/4.2.192.243.table | 2 + definitions/grib2/tables/5/4.2.192.244.table | 2 + definitions/grib2/tables/5/4.2.192.245.table | 2 + definitions/grib2/tables/5/4.2.192.246.table | 2 + definitions/grib2/tables/5/4.2.192.247.table | 2 + definitions/grib2/tables/5/4.2.192.248.table | 2 + definitions/grib2/tables/5/4.2.192.249.table | 2 + definitions/grib2/tables/5/4.2.192.25.table | 2 + definitions/grib2/tables/5/4.2.192.250.table | 2 + definitions/grib2/tables/5/4.2.192.251.table | 2 + definitions/grib2/tables/5/4.2.192.252.table | 2 + definitions/grib2/tables/5/4.2.192.253.table | 2 + definitions/grib2/tables/5/4.2.192.254.table | 2 + definitions/grib2/tables/5/4.2.192.255.table | 2 + definitions/grib2/tables/5/4.2.192.26.table | 2 + definitions/grib2/tables/5/4.2.192.27.table | 2 + definitions/grib2/tables/5/4.2.192.28.table | 2 + definitions/grib2/tables/5/4.2.192.29.table | 2 + definitions/grib2/tables/5/4.2.192.3.table | 2 + definitions/grib2/tables/5/4.2.192.30.table | 2 + definitions/grib2/tables/5/4.2.192.31.table | 2 + definitions/grib2/tables/5/4.2.192.32.table | 2 + definitions/grib2/tables/5/4.2.192.33.table | 2 + definitions/grib2/tables/5/4.2.192.34.table | 2 + definitions/grib2/tables/5/4.2.192.35.table | 2 + definitions/grib2/tables/5/4.2.192.36.table | 2 + definitions/grib2/tables/5/4.2.192.37.table | 2 + definitions/grib2/tables/5/4.2.192.38.table | 2 + definitions/grib2/tables/5/4.2.192.39.table | 2 + definitions/grib2/tables/5/4.2.192.4.table | 2 + definitions/grib2/tables/5/4.2.192.40.table | 2 + definitions/grib2/tables/5/4.2.192.41.table | 2 + definitions/grib2/tables/5/4.2.192.42.table | 2 + definitions/grib2/tables/5/4.2.192.43.table | 2 + definitions/grib2/tables/5/4.2.192.44.table | 2 + definitions/grib2/tables/5/4.2.192.45.table | 2 + definitions/grib2/tables/5/4.2.192.46.table | 2 + definitions/grib2/tables/5/4.2.192.47.table | 2 + definitions/grib2/tables/5/4.2.192.48.table | 2 + definitions/grib2/tables/5/4.2.192.49.table | 2 + definitions/grib2/tables/5/4.2.192.5.table | 2 + definitions/grib2/tables/5/4.2.192.50.table | 2 + definitions/grib2/tables/5/4.2.192.51.table | 2 + definitions/grib2/tables/5/4.2.192.52.table | 2 + definitions/grib2/tables/5/4.2.192.53.table | 2 + definitions/grib2/tables/5/4.2.192.54.table | 2 + definitions/grib2/tables/5/4.2.192.55.table | 2 + definitions/grib2/tables/5/4.2.192.56.table | 2 + definitions/grib2/tables/5/4.2.192.57.table | 2 + definitions/grib2/tables/5/4.2.192.58.table | 2 + definitions/grib2/tables/5/4.2.192.59.table | 2 + definitions/grib2/tables/5/4.2.192.6.table | 2 + definitions/grib2/tables/5/4.2.192.60.table | 2 + definitions/grib2/tables/5/4.2.192.61.table | 2 + definitions/grib2/tables/5/4.2.192.62.table | 2 + definitions/grib2/tables/5/4.2.192.63.table | 2 + definitions/grib2/tables/5/4.2.192.64.table | 2 + definitions/grib2/tables/5/4.2.192.65.table | 2 + definitions/grib2/tables/5/4.2.192.66.table | 2 + definitions/grib2/tables/5/4.2.192.67.table | 2 + definitions/grib2/tables/5/4.2.192.68.table | 2 + definitions/grib2/tables/5/4.2.192.69.table | 2 + definitions/grib2/tables/5/4.2.192.7.table | 2 + definitions/grib2/tables/5/4.2.192.70.table | 2 + definitions/grib2/tables/5/4.2.192.71.table | 2 + definitions/grib2/tables/5/4.2.192.72.table | 2 + definitions/grib2/tables/5/4.2.192.73.table | 2 + definitions/grib2/tables/5/4.2.192.74.table | 2 + definitions/grib2/tables/5/4.2.192.75.table | 2 + definitions/grib2/tables/5/4.2.192.76.table | 2 + definitions/grib2/tables/5/4.2.192.77.table | 2 + definitions/grib2/tables/5/4.2.192.78.table | 2 + definitions/grib2/tables/5/4.2.192.79.table | 2 + definitions/grib2/tables/5/4.2.192.8.table | 2 + definitions/grib2/tables/5/4.2.192.80.table | 2 + definitions/grib2/tables/5/4.2.192.81.table | 2 + definitions/grib2/tables/5/4.2.192.82.table | 2 + definitions/grib2/tables/5/4.2.192.83.table | 2 + definitions/grib2/tables/5/4.2.192.84.table | 2 + definitions/grib2/tables/5/4.2.192.85.table | 2 + definitions/grib2/tables/5/4.2.192.86.table | 2 + definitions/grib2/tables/5/4.2.192.87.table | 2 + definitions/grib2/tables/5/4.2.192.88.table | 2 + definitions/grib2/tables/5/4.2.192.89.table | 2 + definitions/grib2/tables/5/4.2.192.9.table | 2 + definitions/grib2/tables/5/4.2.192.90.table | 2 + definitions/grib2/tables/5/4.2.192.91.table | 2 + definitions/grib2/tables/5/4.2.192.92.table | 2 + definitions/grib2/tables/5/4.2.192.93.table | 2 + definitions/grib2/tables/5/4.2.192.94.table | 2 + definitions/grib2/tables/5/4.2.192.95.table | 2 + definitions/grib2/tables/5/4.2.192.96.table | 2 + definitions/grib2/tables/5/4.2.192.97.table | 2 + definitions/grib2/tables/5/4.2.192.98.table | 2 + definitions/grib2/tables/5/4.2.192.99.table | 2 + definitions/grib2/tables/5/4.2.2.0.table | 30 + definitions/grib2/tables/5/4.2.2.3.table | 20 + definitions/grib2/tables/5/4.2.3.0.table | 12 + definitions/grib2/tables/5/4.2.3.1.table | 16 + definitions/grib2/tables/5/4.2.table | 5 + definitions/grib2/tables/5/4.201.table | 71 + definitions/grib2/tables/5/4.202.table | 66 + definitions/grib2/tables/5/4.203.table | 88 + definitions/grib2/tables/5/4.204.table | 71 + definitions/grib2/tables/5/4.205.table | 68 + definitions/grib2/tables/5/4.206.table | 68 + definitions/grib2/tables/5/4.207.table | 70 + definitions/grib2/tables/5/4.208.table | 71 + definitions/grib2/tables/5/4.209.table | 70 + definitions/grib2/tables/5/4.210.table | 68 + definitions/grib2/tables/5/4.211.table | 69 + definitions/grib2/tables/5/4.212.table | 79 + definitions/grib2/tables/5/4.213.table | 77 + definitions/grib2/tables/5/4.215.table | 10 + definitions/grib2/tables/5/4.216.table | 95 + definitions/grib2/tables/5/4.217.table | 70 + definitions/grib2/tables/5/4.218.table | 35 + definitions/grib2/tables/5/4.219.table | 6 + definitions/grib2/tables/5/4.220.table | 68 + definitions/grib2/tables/5/4.221.table | 68 + definitions/grib2/tables/5/4.222.table | 4 + definitions/grib2/tables/5/4.223.table | 5 + definitions/grib2/tables/5/4.230.table | 117 + definitions/grib2/tables/5/4.3.table | 13 + definitions/grib2/tables/5/4.4.table | 16 + definitions/grib2/tables/5/4.5.table | 38 + definitions/grib2/tables/5/4.6.table | 8 + definitions/grib2/tables/5/4.7.table | 73 + definitions/grib2/tables/5/4.8.table | 68 + definitions/grib2/tables/5/4.9.table | 71 + definitions/grib2/tables/5/4.91.table | 78 + definitions/grib2/tables/5/5.0.table | 19 + definitions/grib2/tables/5/5.1.table | 5 + definitions/grib2/tables/5/5.2.table | 6 + definitions/grib2/tables/5/5.3.table | 6 + definitions/grib2/tables/5/5.4.table | 5 + definitions/grib2/tables/5/5.40.table | 5 + definitions/grib2/tables/5/5.40000.table | 5 + definitions/grib2/tables/5/5.5.table | 7 + definitions/grib2/tables/5/5.50002.table | 19 + definitions/grib2/tables/5/5.6.table | 68 + definitions/grib2/tables/5/5.7.table | 6 + definitions/grib2/tables/5/5.8.table | 3 + definitions/grib2/tables/5/5.9.table | 4 + definitions/grib2/tables/5/6.0.table | 7 + definitions/grib2/tables/5/stepType.table | 4 + definitions/grib2/tables/6/0.0.table | 10 + definitions/grib2/tables/6/1.0.table | 12 + definitions/grib2/tables/6/1.1.table | 5 + definitions/grib2/tables/6/1.2.table | 8 + definitions/grib2/tables/6/1.3.table | 10 + definitions/grib2/tables/6/1.4.table | 13 + definitions/grib2/tables/6/1.4.table~ | 13 + definitions/grib2/tables/6/3.0.table | 6 + definitions/grib2/tables/6/3.1.table | 43 + definitions/grib2/tables/6/3.10.table | 7 + definitions/grib2/tables/6/3.11.table | 5 + definitions/grib2/tables/6/3.15.table | 25 + definitions/grib2/tables/6/3.2.table | 11 + definitions/grib2/tables/6/3.20.table | 6 + definitions/grib2/tables/6/3.21.table | 8 + definitions/grib2/tables/6/3.3.table | 7 + definitions/grib2/tables/6/3.4.table | 9 + definitions/grib2/tables/6/3.5.table | 5 + definitions/grib2/tables/6/3.6.table | 2 + definitions/grib2/tables/6/3.7.table | 11 + definitions/grib2/tables/6/3.8.table | 8 + definitions/grib2/tables/6/3.9.table | 3 + definitions/grib2/tables/6/4.0.table | 43 + definitions/grib2/tables/6/4.1.0.table | 30 + definitions/grib2/tables/6/4.1.1.table | 9 + definitions/grib2/tables/6/4.1.10.table | 12 + definitions/grib2/tables/6/4.1.192.table | 4 + definitions/grib2/tables/6/4.1.2.table | 11 + definitions/grib2/tables/6/4.1.3.table | 9 + definitions/grib2/tables/6/4.1.table | 5 + definitions/grib2/tables/6/4.10.table | 14 + definitions/grib2/tables/6/4.11.table | 9 + definitions/grib2/tables/6/4.12.table | 69 + definitions/grib2/tables/6/4.13.table | 68 + definitions/grib2/tables/6/4.14.table | 68 + definitions/grib2/tables/6/4.15.table | 10 + definitions/grib2/tables/6/4.151.table | 70 + definitions/grib2/tables/6/4.192.table | 4 + definitions/grib2/tables/6/4.2.0.0.table | 23 + definitions/grib2/tables/6/4.2.0.1.table | 89 + definitions/grib2/tables/6/4.2.0.13.table | 3 + definitions/grib2/tables/6/4.2.0.14.table | 5 + definitions/grib2/tables/6/4.2.0.15.table | 17 + definitions/grib2/tables/6/4.2.0.16.table | 8 + definitions/grib2/tables/6/4.2.0.18.table | 11 + definitions/grib2/tables/6/4.2.0.19.table | 28 + definitions/grib2/tables/6/4.2.0.190.table | 3 + definitions/grib2/tables/6/4.2.0.191.table | 5 + definitions/grib2/tables/6/4.2.0.2.table | 35 + definitions/grib2/tables/6/4.2.0.20.table | 22 + definitions/grib2/tables/6/4.2.0.20.table~ | 13 + definitions/grib2/tables/6/4.2.0.3.table | 28 + definitions/grib2/tables/6/4.2.0.4.table | 17 + definitions/grib2/tables/6/4.2.0.5.table | 9 + definitions/grib2/tables/6/4.2.0.6.table | 36 + definitions/grib2/tables/6/4.2.0.7.table | 16 + definitions/grib2/tables/6/4.2.1.0.table | 9 + definitions/grib2/tables/6/4.2.1.1.table | 5 + definitions/grib2/tables/6/4.2.10.0.table | 18 + definitions/grib2/tables/6/4.2.10.1.table | 6 + definitions/grib2/tables/6/4.2.10.191.table | 6 + definitions/grib2/tables/6/4.2.10.2.table | 11 + definitions/grib2/tables/6/4.2.10.3.table | 4 + definitions/grib2/tables/6/4.2.10.4.table | 6 + definitions/grib2/tables/6/4.2.192.0.table | 2 + definitions/grib2/tables/6/4.2.192.1.table | 2 + definitions/grib2/tables/6/4.2.192.10.table | 2 + definitions/grib2/tables/6/4.2.192.100.table | 2 + definitions/grib2/tables/6/4.2.192.101.table | 2 + definitions/grib2/tables/6/4.2.192.102.table | 2 + definitions/grib2/tables/6/4.2.192.103.table | 2 + definitions/grib2/tables/6/4.2.192.104.table | 2 + definitions/grib2/tables/6/4.2.192.105.table | 2 + definitions/grib2/tables/6/4.2.192.106.table | 2 + definitions/grib2/tables/6/4.2.192.107.table | 2 + definitions/grib2/tables/6/4.2.192.108.table | 2 + definitions/grib2/tables/6/4.2.192.109.table | 2 + definitions/grib2/tables/6/4.2.192.11.table | 2 + definitions/grib2/tables/6/4.2.192.110.table | 2 + definitions/grib2/tables/6/4.2.192.111.table | 2 + definitions/grib2/tables/6/4.2.192.112.table | 2 + definitions/grib2/tables/6/4.2.192.113.table | 2 + definitions/grib2/tables/6/4.2.192.114.table | 2 + definitions/grib2/tables/6/4.2.192.115.table | 2 + definitions/grib2/tables/6/4.2.192.116.table | 2 + definitions/grib2/tables/6/4.2.192.117.table | 2 + definitions/grib2/tables/6/4.2.192.118.table | 2 + definitions/grib2/tables/6/4.2.192.119.table | 2 + definitions/grib2/tables/6/4.2.192.12.table | 2 + definitions/grib2/tables/6/4.2.192.120.table | 2 + definitions/grib2/tables/6/4.2.192.121.table | 2 + definitions/grib2/tables/6/4.2.192.122.table | 2 + definitions/grib2/tables/6/4.2.192.123.table | 2 + definitions/grib2/tables/6/4.2.192.124.table | 2 + definitions/grib2/tables/6/4.2.192.125.table | 2 + definitions/grib2/tables/6/4.2.192.126.table | 2 + definitions/grib2/tables/6/4.2.192.127.table | 2 + definitions/grib2/tables/6/4.2.192.128.table | 2 + definitions/grib2/tables/6/4.2.192.129.table | 2 + definitions/grib2/tables/6/4.2.192.13.table | 2 + definitions/grib2/tables/6/4.2.192.130.table | 2 + definitions/grib2/tables/6/4.2.192.131.table | 2 + definitions/grib2/tables/6/4.2.192.132.table | 2 + definitions/grib2/tables/6/4.2.192.133.table | 2 + definitions/grib2/tables/6/4.2.192.134.table | 2 + definitions/grib2/tables/6/4.2.192.135.table | 2 + definitions/grib2/tables/6/4.2.192.136.table | 2 + definitions/grib2/tables/6/4.2.192.137.table | 2 + definitions/grib2/tables/6/4.2.192.138.table | 2 + definitions/grib2/tables/6/4.2.192.139.table | 2 + definitions/grib2/tables/6/4.2.192.14.table | 2 + definitions/grib2/tables/6/4.2.192.140.table | 2 + definitions/grib2/tables/6/4.2.192.141.table | 2 + definitions/grib2/tables/6/4.2.192.142.table | 2 + definitions/grib2/tables/6/4.2.192.143.table | 2 + definitions/grib2/tables/6/4.2.192.144.table | 2 + definitions/grib2/tables/6/4.2.192.145.table | 2 + definitions/grib2/tables/6/4.2.192.146.table | 2 + definitions/grib2/tables/6/4.2.192.147.table | 2 + definitions/grib2/tables/6/4.2.192.148.table | 2 + definitions/grib2/tables/6/4.2.192.149.table | 2 + definitions/grib2/tables/6/4.2.192.15.table | 2 + definitions/grib2/tables/6/4.2.192.150.table | 2 + definitions/grib2/tables/6/4.2.192.151.table | 2 + definitions/grib2/tables/6/4.2.192.152.table | 2 + definitions/grib2/tables/6/4.2.192.153.table | 2 + definitions/grib2/tables/6/4.2.192.154.table | 2 + definitions/grib2/tables/6/4.2.192.155.table | 2 + definitions/grib2/tables/6/4.2.192.156.table | 2 + definitions/grib2/tables/6/4.2.192.157.table | 2 + definitions/grib2/tables/6/4.2.192.158.table | 2 + definitions/grib2/tables/6/4.2.192.159.table | 2 + definitions/grib2/tables/6/4.2.192.16.table | 2 + definitions/grib2/tables/6/4.2.192.160.table | 2 + definitions/grib2/tables/6/4.2.192.161.table | 2 + definitions/grib2/tables/6/4.2.192.162.table | 2 + definitions/grib2/tables/6/4.2.192.163.table | 2 + definitions/grib2/tables/6/4.2.192.164.table | 2 + definitions/grib2/tables/6/4.2.192.165.table | 2 + definitions/grib2/tables/6/4.2.192.166.table | 2 + definitions/grib2/tables/6/4.2.192.167.table | 2 + definitions/grib2/tables/6/4.2.192.168.table | 2 + definitions/grib2/tables/6/4.2.192.169.table | 2 + definitions/grib2/tables/6/4.2.192.17.table | 2 + definitions/grib2/tables/6/4.2.192.170.table | 2 + definitions/grib2/tables/6/4.2.192.171.table | 2 + definitions/grib2/tables/6/4.2.192.172.table | 2 + definitions/grib2/tables/6/4.2.192.173.table | 2 + definitions/grib2/tables/6/4.2.192.174.table | 2 + definitions/grib2/tables/6/4.2.192.175.table | 2 + definitions/grib2/tables/6/4.2.192.176.table | 2 + definitions/grib2/tables/6/4.2.192.177.table | 2 + definitions/grib2/tables/6/4.2.192.178.table | 2 + definitions/grib2/tables/6/4.2.192.179.table | 2 + definitions/grib2/tables/6/4.2.192.18.table | 2 + definitions/grib2/tables/6/4.2.192.180.table | 2 + definitions/grib2/tables/6/4.2.192.181.table | 2 + definitions/grib2/tables/6/4.2.192.182.table | 2 + definitions/grib2/tables/6/4.2.192.183.table | 2 + definitions/grib2/tables/6/4.2.192.184.table | 2 + definitions/grib2/tables/6/4.2.192.185.table | 2 + definitions/grib2/tables/6/4.2.192.186.table | 2 + definitions/grib2/tables/6/4.2.192.187.table | 2 + definitions/grib2/tables/6/4.2.192.188.table | 2 + definitions/grib2/tables/6/4.2.192.189.table | 2 + definitions/grib2/tables/6/4.2.192.19.table | 2 + definitions/grib2/tables/6/4.2.192.190.table | 2 + definitions/grib2/tables/6/4.2.192.191.table | 2 + definitions/grib2/tables/6/4.2.192.192.table | 2 + definitions/grib2/tables/6/4.2.192.193.table | 2 + definitions/grib2/tables/6/4.2.192.194.table | 2 + definitions/grib2/tables/6/4.2.192.195.table | 2 + definitions/grib2/tables/6/4.2.192.196.table | 2 + definitions/grib2/tables/6/4.2.192.197.table | 2 + definitions/grib2/tables/6/4.2.192.198.table | 2 + definitions/grib2/tables/6/4.2.192.199.table | 2 + definitions/grib2/tables/6/4.2.192.2.table | 2 + definitions/grib2/tables/6/4.2.192.20.table | 2 + definitions/grib2/tables/6/4.2.192.200.table | 2 + definitions/grib2/tables/6/4.2.192.201.table | 2 + definitions/grib2/tables/6/4.2.192.202.table | 2 + definitions/grib2/tables/6/4.2.192.203.table | 2 + definitions/grib2/tables/6/4.2.192.204.table | 2 + definitions/grib2/tables/6/4.2.192.205.table | 2 + definitions/grib2/tables/6/4.2.192.206.table | 2 + definitions/grib2/tables/6/4.2.192.207.table | 2 + definitions/grib2/tables/6/4.2.192.208.table | 2 + definitions/grib2/tables/6/4.2.192.209.table | 2 + definitions/grib2/tables/6/4.2.192.21.table | 2 + definitions/grib2/tables/6/4.2.192.210.table | 2 + definitions/grib2/tables/6/4.2.192.211.table | 2 + definitions/grib2/tables/6/4.2.192.212.table | 2 + definitions/grib2/tables/6/4.2.192.213.table | 2 + definitions/grib2/tables/6/4.2.192.214.table | 2 + definitions/grib2/tables/6/4.2.192.215.table | 2 + definitions/grib2/tables/6/4.2.192.216.table | 2 + definitions/grib2/tables/6/4.2.192.217.table | 2 + definitions/grib2/tables/6/4.2.192.218.table | 2 + definitions/grib2/tables/6/4.2.192.219.table | 2 + definitions/grib2/tables/6/4.2.192.22.table | 2 + definitions/grib2/tables/6/4.2.192.220.table | 2 + definitions/grib2/tables/6/4.2.192.221.table | 2 + definitions/grib2/tables/6/4.2.192.222.table | 2 + definitions/grib2/tables/6/4.2.192.223.table | 2 + definitions/grib2/tables/6/4.2.192.224.table | 2 + definitions/grib2/tables/6/4.2.192.225.table | 2 + definitions/grib2/tables/6/4.2.192.226.table | 2 + definitions/grib2/tables/6/4.2.192.227.table | 2 + definitions/grib2/tables/6/4.2.192.228.table | 2 + definitions/grib2/tables/6/4.2.192.229.table | 2 + definitions/grib2/tables/6/4.2.192.23.table | 2 + definitions/grib2/tables/6/4.2.192.230.table | 2 + definitions/grib2/tables/6/4.2.192.231.table | 2 + definitions/grib2/tables/6/4.2.192.232.table | 2 + definitions/grib2/tables/6/4.2.192.233.table | 2 + definitions/grib2/tables/6/4.2.192.234.table | 2 + definitions/grib2/tables/6/4.2.192.235.table | 2 + definitions/grib2/tables/6/4.2.192.236.table | 2 + definitions/grib2/tables/6/4.2.192.237.table | 2 + definitions/grib2/tables/6/4.2.192.238.table | 2 + definitions/grib2/tables/6/4.2.192.239.table | 2 + definitions/grib2/tables/6/4.2.192.24.table | 2 + definitions/grib2/tables/6/4.2.192.240.table | 2 + definitions/grib2/tables/6/4.2.192.241.table | 2 + definitions/grib2/tables/6/4.2.192.242.table | 2 + definitions/grib2/tables/6/4.2.192.243.table | 2 + definitions/grib2/tables/6/4.2.192.244.table | 2 + definitions/grib2/tables/6/4.2.192.245.table | 2 + definitions/grib2/tables/6/4.2.192.246.table | 2 + definitions/grib2/tables/6/4.2.192.247.table | 2 + definitions/grib2/tables/6/4.2.192.248.table | 2 + definitions/grib2/tables/6/4.2.192.249.table | 2 + definitions/grib2/tables/6/4.2.192.25.table | 2 + definitions/grib2/tables/6/4.2.192.250.table | 2 + definitions/grib2/tables/6/4.2.192.251.table | 2 + definitions/grib2/tables/6/4.2.192.252.table | 2 + definitions/grib2/tables/6/4.2.192.253.table | 2 + definitions/grib2/tables/6/4.2.192.254.table | 2 + definitions/grib2/tables/6/4.2.192.255.table | 2 + definitions/grib2/tables/6/4.2.192.26.table | 2 + definitions/grib2/tables/6/4.2.192.27.table | 2 + definitions/grib2/tables/6/4.2.192.28.table | 2 + definitions/grib2/tables/6/4.2.192.29.table | 2 + definitions/grib2/tables/6/4.2.192.3.table | 2 + definitions/grib2/tables/6/4.2.192.30.table | 2 + definitions/grib2/tables/6/4.2.192.31.table | 2 + definitions/grib2/tables/6/4.2.192.32.table | 2 + definitions/grib2/tables/6/4.2.192.33.table | 2 + definitions/grib2/tables/6/4.2.192.34.table | 2 + definitions/grib2/tables/6/4.2.192.35.table | 2 + definitions/grib2/tables/6/4.2.192.36.table | 2 + definitions/grib2/tables/6/4.2.192.37.table | 2 + definitions/grib2/tables/6/4.2.192.38.table | 2 + definitions/grib2/tables/6/4.2.192.39.table | 2 + definitions/grib2/tables/6/4.2.192.4.table | 2 + definitions/grib2/tables/6/4.2.192.40.table | 2 + definitions/grib2/tables/6/4.2.192.41.table | 2 + definitions/grib2/tables/6/4.2.192.42.table | 2 + definitions/grib2/tables/6/4.2.192.43.table | 2 + definitions/grib2/tables/6/4.2.192.44.table | 2 + definitions/grib2/tables/6/4.2.192.45.table | 2 + definitions/grib2/tables/6/4.2.192.46.table | 2 + definitions/grib2/tables/6/4.2.192.47.table | 2 + definitions/grib2/tables/6/4.2.192.48.table | 2 + definitions/grib2/tables/6/4.2.192.49.table | 2 + definitions/grib2/tables/6/4.2.192.5.table | 2 + definitions/grib2/tables/6/4.2.192.50.table | 2 + definitions/grib2/tables/6/4.2.192.51.table | 2 + definitions/grib2/tables/6/4.2.192.52.table | 2 + definitions/grib2/tables/6/4.2.192.53.table | 2 + definitions/grib2/tables/6/4.2.192.54.table | 2 + definitions/grib2/tables/6/4.2.192.55.table | 2 + definitions/grib2/tables/6/4.2.192.56.table | 2 + definitions/grib2/tables/6/4.2.192.57.table | 2 + definitions/grib2/tables/6/4.2.192.58.table | 2 + definitions/grib2/tables/6/4.2.192.59.table | 2 + definitions/grib2/tables/6/4.2.192.6.table | 2 + definitions/grib2/tables/6/4.2.192.60.table | 2 + definitions/grib2/tables/6/4.2.192.61.table | 2 + definitions/grib2/tables/6/4.2.192.62.table | 2 + definitions/grib2/tables/6/4.2.192.63.table | 2 + definitions/grib2/tables/6/4.2.192.64.table | 2 + definitions/grib2/tables/6/4.2.192.65.table | 2 + definitions/grib2/tables/6/4.2.192.66.table | 2 + definitions/grib2/tables/6/4.2.192.67.table | 2 + definitions/grib2/tables/6/4.2.192.68.table | 2 + definitions/grib2/tables/6/4.2.192.69.table | 2 + definitions/grib2/tables/6/4.2.192.7.table | 2 + definitions/grib2/tables/6/4.2.192.70.table | 2 + definitions/grib2/tables/6/4.2.192.71.table | 2 + definitions/grib2/tables/6/4.2.192.72.table | 2 + definitions/grib2/tables/6/4.2.192.73.table | 2 + definitions/grib2/tables/6/4.2.192.74.table | 2 + definitions/grib2/tables/6/4.2.192.75.table | 2 + definitions/grib2/tables/6/4.2.192.76.table | 2 + definitions/grib2/tables/6/4.2.192.77.table | 2 + definitions/grib2/tables/6/4.2.192.78.table | 2 + definitions/grib2/tables/6/4.2.192.79.table | 2 + definitions/grib2/tables/6/4.2.192.8.table | 2 + definitions/grib2/tables/6/4.2.192.80.table | 2 + definitions/grib2/tables/6/4.2.192.81.table | 2 + definitions/grib2/tables/6/4.2.192.82.table | 2 + definitions/grib2/tables/6/4.2.192.83.table | 2 + definitions/grib2/tables/6/4.2.192.84.table | 2 + definitions/grib2/tables/6/4.2.192.85.table | 2 + definitions/grib2/tables/6/4.2.192.86.table | 2 + definitions/grib2/tables/6/4.2.192.87.table | 2 + definitions/grib2/tables/6/4.2.192.88.table | 2 + definitions/grib2/tables/6/4.2.192.89.table | 2 + definitions/grib2/tables/6/4.2.192.9.table | 2 + definitions/grib2/tables/6/4.2.192.90.table | 2 + definitions/grib2/tables/6/4.2.192.91.table | 2 + definitions/grib2/tables/6/4.2.192.92.table | 2 + definitions/grib2/tables/6/4.2.192.93.table | 2 + definitions/grib2/tables/6/4.2.192.94.table | 2 + definitions/grib2/tables/6/4.2.192.95.table | 2 + definitions/grib2/tables/6/4.2.192.96.table | 2 + definitions/grib2/tables/6/4.2.192.97.table | 2 + definitions/grib2/tables/6/4.2.192.98.table | 2 + definitions/grib2/tables/6/4.2.192.99.table | 2 + definitions/grib2/tables/6/4.2.2.0.table | 35 + definitions/grib2/tables/6/4.2.2.3.table | 25 + definitions/grib2/tables/6/4.2.2.4.table | 4 + definitions/grib2/tables/6/4.2.3.0.table | 12 + definitions/grib2/tables/6/4.2.3.1.table | 21 + definitions/grib2/tables/6/4.2.table | 5 + definitions/grib2/tables/6/4.201.table | 71 + definitions/grib2/tables/6/4.202.table | 66 + definitions/grib2/tables/6/4.203.table | 88 + definitions/grib2/tables/6/4.204.table | 71 + definitions/grib2/tables/6/4.205.table | 68 + definitions/grib2/tables/6/4.206.table | 68 + definitions/grib2/tables/6/4.207.table | 70 + definitions/grib2/tables/6/4.208.table | 71 + definitions/grib2/tables/6/4.209.table | 70 + definitions/grib2/tables/6/4.210.table | 68 + definitions/grib2/tables/6/4.211.table | 69 + definitions/grib2/tables/6/4.212.table | 79 + definitions/grib2/tables/6/4.213.table | 77 + definitions/grib2/tables/6/4.215.table | 10 + definitions/grib2/tables/6/4.216.table | 95 + definitions/grib2/tables/6/4.217.table | 70 + definitions/grib2/tables/6/4.218.table | 35 + definitions/grib2/tables/6/4.219.table | 6 + definitions/grib2/tables/6/4.220.table | 68 + definitions/grib2/tables/6/4.221.table | 68 + definitions/grib2/tables/6/4.222.table | 4 + definitions/grib2/tables/6/4.223.table | 5 + definitions/grib2/tables/6/4.230.table | 117 + definitions/grib2/tables/6/4.3.table | 16 + definitions/grib2/tables/6/4.4.table | 16 + definitions/grib2/tables/6/4.5.table | 38 + definitions/grib2/tables/6/4.6.table | 10 + definitions/grib2/tables/6/4.7.table | 73 + definitions/grib2/tables/6/4.8.table | 68 + definitions/grib2/tables/6/4.9.table | 71 + definitions/grib2/tables/6/4.91.table | 78 + definitions/grib2/tables/6/5.0.table | 19 + definitions/grib2/tables/6/5.1.table | 5 + definitions/grib2/tables/6/5.2.table | 6 + definitions/grib2/tables/6/5.3.table | 6 + definitions/grib2/tables/6/5.4.table | 5 + definitions/grib2/tables/6/5.40.table | 5 + definitions/grib2/tables/6/5.40000.table | 5 + definitions/grib2/tables/6/5.5.table | 7 + definitions/grib2/tables/6/5.50002.table | 19 + definitions/grib2/tables/6/5.6.table | 68 + definitions/grib2/tables/6/5.7.table | 6 + definitions/grib2/tables/6/5.8.table | 3 + definitions/grib2/tables/6/5.9.table | 4 + definitions/grib2/tables/6/6.0.table | 7 + definitions/grib2/tables/6/stepType.table | 4 + definitions/grib2/tables/7/0.0.table | 10 + definitions/grib2/tables/7/1.0.table | 12 + definitions/grib2/tables/7/1.1.table | 5 + definitions/grib2/tables/7/1.2.table | 8 + definitions/grib2/tables/7/1.3.table | 10 + definitions/grib2/tables/7/1.4.table | 13 + definitions/grib2/tables/7/1.4.table~ | 13 + definitions/grib2/tables/7/3.0.table | 6 + definitions/grib2/tables/7/3.1.table | 43 + definitions/grib2/tables/7/3.10.table | 8 + definitions/grib2/tables/7/3.11.table | 7 + definitions/grib2/tables/7/3.15.table | 25 + definitions/grib2/tables/7/3.2.table | 13 + definitions/grib2/tables/7/3.20.table | 6 + definitions/grib2/tables/7/3.21.table | 8 + definitions/grib2/tables/7/3.3.table | 9 + definitions/grib2/tables/7/3.4.table | 10 + definitions/grib2/tables/7/3.5.table | 5 + definitions/grib2/tables/7/3.6.table | 2 + definitions/grib2/tables/7/3.7.table | 11 + definitions/grib2/tables/7/3.8.table | 8 + definitions/grib2/tables/7/3.9.table | 4 + definitions/grib2/tables/7/4.0.table | 54 + definitions/grib2/tables/7/4.1.0.table | 28 + definitions/grib2/tables/7/4.1.1.table | 9 + definitions/grib2/tables/7/4.1.10.table | 11 + definitions/grib2/tables/7/4.1.192.table | 4 + definitions/grib2/tables/7/4.1.2.table | 9 + definitions/grib2/tables/7/4.1.3.table | 9 + definitions/grib2/tables/7/4.1.table | 5 + definitions/grib2/tables/7/4.10.table | 14 + definitions/grib2/tables/7/4.11.table | 10 + definitions/grib2/tables/7/4.12.table | 69 + definitions/grib2/tables/7/4.13.table | 68 + definitions/grib2/tables/7/4.14.table | 68 + definitions/grib2/tables/7/4.15.table | 10 + definitions/grib2/tables/7/4.151.table | 70 + definitions/grib2/tables/7/4.192.table | 4 + definitions/grib2/tables/7/4.2.0.0.table | 25 + definitions/grib2/tables/7/4.2.0.1.table | 91 + definitions/grib2/tables/7/4.2.0.13.table | 5 + definitions/grib2/tables/7/4.2.0.14.table | 7 + definitions/grib2/tables/7/4.2.0.15.table | 19 + definitions/grib2/tables/7/4.2.0.16.table | 10 + definitions/grib2/tables/7/4.2.0.18.table | 18 + definitions/grib2/tables/7/4.2.0.19.table | 31 + definitions/grib2/tables/7/4.2.0.190.table | 5 + definitions/grib2/tables/7/4.2.0.191.table | 7 + definitions/grib2/tables/7/4.2.0.2.table | 37 + definitions/grib2/tables/7/4.2.0.20.table | 26 + definitions/grib2/tables/7/4.2.0.20.table~ | 13 + definitions/grib2/tables/7/4.2.0.3.table | 30 + definitions/grib2/tables/7/4.2.0.4.table | 20 + definitions/grib2/tables/7/4.2.0.5.table | 11 + definitions/grib2/tables/7/4.2.0.6.table | 39 + definitions/grib2/tables/7/4.2.0.7.table | 20 + definitions/grib2/tables/7/4.2.1.0.table | 11 + definitions/grib2/tables/7/4.2.1.1.table | 7 + definitions/grib2/tables/7/4.2.10.0.table | 20 + definitions/grib2/tables/7/4.2.10.1.table | 8 + definitions/grib2/tables/7/4.2.10.191.table | 6 + definitions/grib2/tables/7/4.2.10.2.table | 14 + definitions/grib2/tables/7/4.2.10.3.table | 6 + definitions/grib2/tables/7/4.2.10.4.table | 11 + definitions/grib2/tables/7/4.2.192.0.table | 2 + definitions/grib2/tables/7/4.2.192.1.table | 2 + definitions/grib2/tables/7/4.2.192.10.table | 2 + definitions/grib2/tables/7/4.2.192.100.table | 2 + definitions/grib2/tables/7/4.2.192.101.table | 2 + definitions/grib2/tables/7/4.2.192.102.table | 2 + definitions/grib2/tables/7/4.2.192.103.table | 2 + definitions/grib2/tables/7/4.2.192.104.table | 2 + definitions/grib2/tables/7/4.2.192.105.table | 2 + definitions/grib2/tables/7/4.2.192.106.table | 2 + definitions/grib2/tables/7/4.2.192.107.table | 2 + definitions/grib2/tables/7/4.2.192.108.table | 2 + definitions/grib2/tables/7/4.2.192.109.table | 2 + definitions/grib2/tables/7/4.2.192.11.table | 2 + definitions/grib2/tables/7/4.2.192.110.table | 2 + definitions/grib2/tables/7/4.2.192.111.table | 2 + definitions/grib2/tables/7/4.2.192.112.table | 2 + definitions/grib2/tables/7/4.2.192.113.table | 2 + definitions/grib2/tables/7/4.2.192.114.table | 2 + definitions/grib2/tables/7/4.2.192.115.table | 2 + definitions/grib2/tables/7/4.2.192.116.table | 2 + definitions/grib2/tables/7/4.2.192.117.table | 2 + definitions/grib2/tables/7/4.2.192.118.table | 2 + definitions/grib2/tables/7/4.2.192.119.table | 2 + definitions/grib2/tables/7/4.2.192.12.table | 2 + definitions/grib2/tables/7/4.2.192.120.table | 2 + definitions/grib2/tables/7/4.2.192.121.table | 2 + definitions/grib2/tables/7/4.2.192.122.table | 2 + definitions/grib2/tables/7/4.2.192.123.table | 2 + definitions/grib2/tables/7/4.2.192.124.table | 2 + definitions/grib2/tables/7/4.2.192.125.table | 2 + definitions/grib2/tables/7/4.2.192.126.table | 2 + definitions/grib2/tables/7/4.2.192.127.table | 2 + definitions/grib2/tables/7/4.2.192.128.table | 2 + definitions/grib2/tables/7/4.2.192.129.table | 2 + definitions/grib2/tables/7/4.2.192.13.table | 2 + definitions/grib2/tables/7/4.2.192.130.table | 2 + definitions/grib2/tables/7/4.2.192.131.table | 2 + definitions/grib2/tables/7/4.2.192.132.table | 2 + definitions/grib2/tables/7/4.2.192.133.table | 2 + definitions/grib2/tables/7/4.2.192.134.table | 2 + definitions/grib2/tables/7/4.2.192.135.table | 2 + definitions/grib2/tables/7/4.2.192.136.table | 2 + definitions/grib2/tables/7/4.2.192.137.table | 2 + definitions/grib2/tables/7/4.2.192.138.table | 2 + definitions/grib2/tables/7/4.2.192.139.table | 2 + definitions/grib2/tables/7/4.2.192.14.table | 2 + definitions/grib2/tables/7/4.2.192.140.table | 2 + definitions/grib2/tables/7/4.2.192.141.table | 2 + definitions/grib2/tables/7/4.2.192.142.table | 2 + definitions/grib2/tables/7/4.2.192.143.table | 2 + definitions/grib2/tables/7/4.2.192.144.table | 2 + definitions/grib2/tables/7/4.2.192.145.table | 2 + definitions/grib2/tables/7/4.2.192.146.table | 2 + definitions/grib2/tables/7/4.2.192.147.table | 2 + definitions/grib2/tables/7/4.2.192.148.table | 2 + definitions/grib2/tables/7/4.2.192.149.table | 2 + definitions/grib2/tables/7/4.2.192.15.table | 2 + definitions/grib2/tables/7/4.2.192.150.table | 2 + definitions/grib2/tables/7/4.2.192.151.table | 2 + definitions/grib2/tables/7/4.2.192.152.table | 2 + definitions/grib2/tables/7/4.2.192.153.table | 2 + definitions/grib2/tables/7/4.2.192.154.table | 2 + definitions/grib2/tables/7/4.2.192.155.table | 2 + definitions/grib2/tables/7/4.2.192.156.table | 2 + definitions/grib2/tables/7/4.2.192.157.table | 2 + definitions/grib2/tables/7/4.2.192.158.table | 2 + definitions/grib2/tables/7/4.2.192.159.table | 2 + definitions/grib2/tables/7/4.2.192.16.table | 2 + definitions/grib2/tables/7/4.2.192.160.table | 2 + definitions/grib2/tables/7/4.2.192.161.table | 2 + definitions/grib2/tables/7/4.2.192.162.table | 2 + definitions/grib2/tables/7/4.2.192.163.table | 2 + definitions/grib2/tables/7/4.2.192.164.table | 2 + definitions/grib2/tables/7/4.2.192.165.table | 2 + definitions/grib2/tables/7/4.2.192.166.table | 2 + definitions/grib2/tables/7/4.2.192.167.table | 2 + definitions/grib2/tables/7/4.2.192.168.table | 2 + definitions/grib2/tables/7/4.2.192.169.table | 2 + definitions/grib2/tables/7/4.2.192.17.table | 2 + definitions/grib2/tables/7/4.2.192.170.table | 2 + definitions/grib2/tables/7/4.2.192.171.table | 2 + definitions/grib2/tables/7/4.2.192.172.table | 2 + definitions/grib2/tables/7/4.2.192.173.table | 2 + definitions/grib2/tables/7/4.2.192.174.table | 2 + definitions/grib2/tables/7/4.2.192.175.table | 2 + definitions/grib2/tables/7/4.2.192.176.table | 2 + definitions/grib2/tables/7/4.2.192.177.table | 2 + definitions/grib2/tables/7/4.2.192.178.table | 2 + definitions/grib2/tables/7/4.2.192.179.table | 2 + definitions/grib2/tables/7/4.2.192.18.table | 2 + definitions/grib2/tables/7/4.2.192.180.table | 2 + definitions/grib2/tables/7/4.2.192.181.table | 2 + definitions/grib2/tables/7/4.2.192.182.table | 2 + definitions/grib2/tables/7/4.2.192.183.table | 2 + definitions/grib2/tables/7/4.2.192.184.table | 2 + definitions/grib2/tables/7/4.2.192.185.table | 2 + definitions/grib2/tables/7/4.2.192.186.table | 2 + definitions/grib2/tables/7/4.2.192.187.table | 2 + definitions/grib2/tables/7/4.2.192.188.table | 2 + definitions/grib2/tables/7/4.2.192.189.table | 2 + definitions/grib2/tables/7/4.2.192.19.table | 2 + definitions/grib2/tables/7/4.2.192.190.table | 2 + definitions/grib2/tables/7/4.2.192.191.table | 2 + definitions/grib2/tables/7/4.2.192.192.table | 2 + definitions/grib2/tables/7/4.2.192.193.table | 2 + definitions/grib2/tables/7/4.2.192.194.table | 2 + definitions/grib2/tables/7/4.2.192.195.table | 2 + definitions/grib2/tables/7/4.2.192.196.table | 2 + definitions/grib2/tables/7/4.2.192.197.table | 2 + definitions/grib2/tables/7/4.2.192.198.table | 2 + definitions/grib2/tables/7/4.2.192.199.table | 2 + definitions/grib2/tables/7/4.2.192.2.table | 2 + definitions/grib2/tables/7/4.2.192.20.table | 2 + definitions/grib2/tables/7/4.2.192.200.table | 2 + definitions/grib2/tables/7/4.2.192.201.table | 2 + definitions/grib2/tables/7/4.2.192.202.table | 2 + definitions/grib2/tables/7/4.2.192.203.table | 2 + definitions/grib2/tables/7/4.2.192.204.table | 2 + definitions/grib2/tables/7/4.2.192.205.table | 2 + definitions/grib2/tables/7/4.2.192.206.table | 2 + definitions/grib2/tables/7/4.2.192.207.table | 2 + definitions/grib2/tables/7/4.2.192.208.table | 2 + definitions/grib2/tables/7/4.2.192.209.table | 2 + definitions/grib2/tables/7/4.2.192.21.table | 2 + definitions/grib2/tables/7/4.2.192.210.table | 2 + definitions/grib2/tables/7/4.2.192.211.table | 2 + definitions/grib2/tables/7/4.2.192.212.table | 2 + definitions/grib2/tables/7/4.2.192.213.table | 2 + definitions/grib2/tables/7/4.2.192.214.table | 2 + definitions/grib2/tables/7/4.2.192.215.table | 2 + definitions/grib2/tables/7/4.2.192.216.table | 2 + definitions/grib2/tables/7/4.2.192.217.table | 2 + definitions/grib2/tables/7/4.2.192.218.table | 2 + definitions/grib2/tables/7/4.2.192.219.table | 2 + definitions/grib2/tables/7/4.2.192.22.table | 2 + definitions/grib2/tables/7/4.2.192.220.table | 2 + definitions/grib2/tables/7/4.2.192.221.table | 2 + definitions/grib2/tables/7/4.2.192.222.table | 2 + definitions/grib2/tables/7/4.2.192.223.table | 2 + definitions/grib2/tables/7/4.2.192.224.table | 2 + definitions/grib2/tables/7/4.2.192.225.table | 2 + definitions/grib2/tables/7/4.2.192.226.table | 2 + definitions/grib2/tables/7/4.2.192.227.table | 2 + definitions/grib2/tables/7/4.2.192.228.table | 2 + definitions/grib2/tables/7/4.2.192.229.table | 2 + definitions/grib2/tables/7/4.2.192.23.table | 2 + definitions/grib2/tables/7/4.2.192.230.table | 2 + definitions/grib2/tables/7/4.2.192.231.table | 2 + definitions/grib2/tables/7/4.2.192.232.table | 2 + definitions/grib2/tables/7/4.2.192.233.table | 2 + definitions/grib2/tables/7/4.2.192.234.table | 2 + definitions/grib2/tables/7/4.2.192.235.table | 2 + definitions/grib2/tables/7/4.2.192.236.table | 2 + definitions/grib2/tables/7/4.2.192.237.table | 2 + definitions/grib2/tables/7/4.2.192.238.table | 2 + definitions/grib2/tables/7/4.2.192.239.table | 2 + definitions/grib2/tables/7/4.2.192.24.table | 2 + definitions/grib2/tables/7/4.2.192.240.table | 2 + definitions/grib2/tables/7/4.2.192.241.table | 2 + definitions/grib2/tables/7/4.2.192.242.table | 2 + definitions/grib2/tables/7/4.2.192.243.table | 2 + definitions/grib2/tables/7/4.2.192.244.table | 2 + definitions/grib2/tables/7/4.2.192.245.table | 2 + definitions/grib2/tables/7/4.2.192.246.table | 2 + definitions/grib2/tables/7/4.2.192.247.table | 2 + definitions/grib2/tables/7/4.2.192.248.table | 2 + definitions/grib2/tables/7/4.2.192.249.table | 2 + definitions/grib2/tables/7/4.2.192.25.table | 2 + definitions/grib2/tables/7/4.2.192.250.table | 2 + definitions/grib2/tables/7/4.2.192.251.table | 2 + definitions/grib2/tables/7/4.2.192.252.table | 2 + definitions/grib2/tables/7/4.2.192.253.table | 2 + definitions/grib2/tables/7/4.2.192.254.table | 2 + definitions/grib2/tables/7/4.2.192.255.table | 2 + definitions/grib2/tables/7/4.2.192.26.table | 2 + definitions/grib2/tables/7/4.2.192.27.table | 2 + definitions/grib2/tables/7/4.2.192.28.table | 2 + definitions/grib2/tables/7/4.2.192.29.table | 2 + definitions/grib2/tables/7/4.2.192.3.table | 2 + definitions/grib2/tables/7/4.2.192.30.table | 2 + definitions/grib2/tables/7/4.2.192.31.table | 2 + definitions/grib2/tables/7/4.2.192.32.table | 2 + definitions/grib2/tables/7/4.2.192.33.table | 2 + definitions/grib2/tables/7/4.2.192.34.table | 2 + definitions/grib2/tables/7/4.2.192.35.table | 2 + definitions/grib2/tables/7/4.2.192.36.table | 2 + definitions/grib2/tables/7/4.2.192.37.table | 2 + definitions/grib2/tables/7/4.2.192.38.table | 2 + definitions/grib2/tables/7/4.2.192.39.table | 2 + definitions/grib2/tables/7/4.2.192.4.table | 2 + definitions/grib2/tables/7/4.2.192.40.table | 2 + definitions/grib2/tables/7/4.2.192.41.table | 2 + definitions/grib2/tables/7/4.2.192.42.table | 2 + definitions/grib2/tables/7/4.2.192.43.table | 2 + definitions/grib2/tables/7/4.2.192.44.table | 2 + definitions/grib2/tables/7/4.2.192.45.table | 2 + definitions/grib2/tables/7/4.2.192.46.table | 2 + definitions/grib2/tables/7/4.2.192.47.table | 2 + definitions/grib2/tables/7/4.2.192.48.table | 2 + definitions/grib2/tables/7/4.2.192.49.table | 2 + definitions/grib2/tables/7/4.2.192.5.table | 2 + definitions/grib2/tables/7/4.2.192.50.table | 2 + definitions/grib2/tables/7/4.2.192.51.table | 2 + definitions/grib2/tables/7/4.2.192.52.table | 2 + definitions/grib2/tables/7/4.2.192.53.table | 2 + definitions/grib2/tables/7/4.2.192.54.table | 2 + definitions/grib2/tables/7/4.2.192.55.table | 2 + definitions/grib2/tables/7/4.2.192.56.table | 2 + definitions/grib2/tables/7/4.2.192.57.table | 2 + definitions/grib2/tables/7/4.2.192.58.table | 2 + definitions/grib2/tables/7/4.2.192.59.table | 2 + definitions/grib2/tables/7/4.2.192.6.table | 2 + definitions/grib2/tables/7/4.2.192.60.table | 2 + definitions/grib2/tables/7/4.2.192.61.table | 2 + definitions/grib2/tables/7/4.2.192.62.table | 2 + definitions/grib2/tables/7/4.2.192.63.table | 2 + definitions/grib2/tables/7/4.2.192.64.table | 2 + definitions/grib2/tables/7/4.2.192.65.table | 2 + definitions/grib2/tables/7/4.2.192.66.table | 2 + definitions/grib2/tables/7/4.2.192.67.table | 2 + definitions/grib2/tables/7/4.2.192.68.table | 2 + definitions/grib2/tables/7/4.2.192.69.table | 2 + definitions/grib2/tables/7/4.2.192.7.table | 2 + definitions/grib2/tables/7/4.2.192.70.table | 2 + definitions/grib2/tables/7/4.2.192.71.table | 2 + definitions/grib2/tables/7/4.2.192.72.table | 2 + definitions/grib2/tables/7/4.2.192.73.table | 2 + definitions/grib2/tables/7/4.2.192.74.table | 2 + definitions/grib2/tables/7/4.2.192.75.table | 2 + definitions/grib2/tables/7/4.2.192.76.table | 2 + definitions/grib2/tables/7/4.2.192.77.table | 2 + definitions/grib2/tables/7/4.2.192.78.table | 2 + definitions/grib2/tables/7/4.2.192.79.table | 2 + definitions/grib2/tables/7/4.2.192.8.table | 2 + definitions/grib2/tables/7/4.2.192.80.table | 2 + definitions/grib2/tables/7/4.2.192.81.table | 2 + definitions/grib2/tables/7/4.2.192.82.table | 2 + definitions/grib2/tables/7/4.2.192.83.table | 2 + definitions/grib2/tables/7/4.2.192.84.table | 2 + definitions/grib2/tables/7/4.2.192.85.table | 2 + definitions/grib2/tables/7/4.2.192.86.table | 2 + definitions/grib2/tables/7/4.2.192.87.table | 2 + definitions/grib2/tables/7/4.2.192.88.table | 2 + definitions/grib2/tables/7/4.2.192.89.table | 2 + definitions/grib2/tables/7/4.2.192.9.table | 2 + definitions/grib2/tables/7/4.2.192.90.table | 2 + definitions/grib2/tables/7/4.2.192.91.table | 2 + definitions/grib2/tables/7/4.2.192.92.table | 2 + definitions/grib2/tables/7/4.2.192.93.table | 2 + definitions/grib2/tables/7/4.2.192.94.table | 2 + definitions/grib2/tables/7/4.2.192.95.table | 2 + definitions/grib2/tables/7/4.2.192.96.table | 2 + definitions/grib2/tables/7/4.2.192.97.table | 2 + definitions/grib2/tables/7/4.2.192.98.table | 2 + definitions/grib2/tables/7/4.2.192.99.table | 2 + definitions/grib2/tables/7/4.2.2.0.table | 37 + definitions/grib2/tables/7/4.2.2.3.table | 27 + definitions/grib2/tables/7/4.2.2.4.table | 3 + definitions/grib2/tables/7/4.2.3.0.table | 14 + definitions/grib2/tables/7/4.2.3.1.table | 28 + definitions/grib2/tables/7/4.2.table | 5 + definitions/grib2/tables/7/4.201.table | 72 + definitions/grib2/tables/7/4.202.table | 66 + definitions/grib2/tables/7/4.203.table | 88 + definitions/grib2/tables/7/4.204.table | 71 + definitions/grib2/tables/7/4.205.table | 68 + definitions/grib2/tables/7/4.206.table | 68 + definitions/grib2/tables/7/4.207.table | 70 + definitions/grib2/tables/7/4.208.table | 71 + definitions/grib2/tables/7/4.209.table | 70 + definitions/grib2/tables/7/4.210.table | 68 + definitions/grib2/tables/7/4.211.table | 69 + definitions/grib2/tables/7/4.212.table | 79 + definitions/grib2/tables/7/4.213.table | 77 + definitions/grib2/tables/7/4.215.table | 10 + definitions/grib2/tables/7/4.216.table | 95 + definitions/grib2/tables/7/4.217.table | 70 + definitions/grib2/tables/7/4.218.table | 35 + definitions/grib2/tables/7/4.219.table | 6 + definitions/grib2/tables/7/4.220.table | 68 + definitions/grib2/tables/7/4.221.table | 68 + definitions/grib2/tables/7/4.222.table | 4 + definitions/grib2/tables/7/4.223.table | 5 + definitions/grib2/tables/7/4.224.table | 18 + definitions/grib2/tables/7/4.230.table | 117 + definitions/grib2/tables/7/4.3.table | 16 + definitions/grib2/tables/7/4.4.table | 16 + definitions/grib2/tables/7/4.5.table | 38 + definitions/grib2/tables/7/4.6.table | 10 + definitions/grib2/tables/7/4.7.table | 77 + definitions/grib2/tables/7/4.8.table | 68 + definitions/grib2/tables/7/4.9.table | 71 + definitions/grib2/tables/7/4.91.table | 79 + definitions/grib2/tables/7/5.0.table | 19 + definitions/grib2/tables/7/5.1.table | 5 + definitions/grib2/tables/7/5.2.table | 6 + definitions/grib2/tables/7/5.3.table | 6 + definitions/grib2/tables/7/5.4.table | 5 + definitions/grib2/tables/7/5.40.table | 5 + definitions/grib2/tables/7/5.40000.table | 5 + definitions/grib2/tables/7/5.5.table | 7 + definitions/grib2/tables/7/5.50002.table | 19 + definitions/grib2/tables/7/5.6.table | 68 + definitions/grib2/tables/7/5.7.table | 6 + definitions/grib2/tables/7/5.8.table | 3 + definitions/grib2/tables/7/5.9.table | 4 + definitions/grib2/tables/7/6.0.table | 7 + definitions/grib2/tables/7/stepType.table | 4 + definitions/grib2/tables/8/0.0.table | 10 + definitions/grib2/tables/8/1.0.table | 13 + definitions/grib2/tables/8/1.1.table | 4 + definitions/grib2/tables/8/1.2.table | 8 + definitions/grib2/tables/8/1.3.table | 10 + definitions/grib2/tables/8/1.4.table | 13 + definitions/grib2/tables/8/3.0.table | 6 + definitions/grib2/tables/8/3.1.table | 43 + definitions/grib2/tables/8/3.10.table | 8 + definitions/grib2/tables/8/3.11.table | 7 + definitions/grib2/tables/8/3.15.table | 22 + definitions/grib2/tables/8/3.2.table | 13 + definitions/grib2/tables/8/3.20.table | 6 + definitions/grib2/tables/8/3.21.table | 8 + definitions/grib2/tables/8/3.3.table | 9 + definitions/grib2/tables/8/3.4.table | 10 + definitions/grib2/tables/8/3.5.table | 5 + definitions/grib2/tables/8/3.6.table | 2 + definitions/grib2/tables/8/3.7.table | 11 + definitions/grib2/tables/8/3.8.table | 7 + definitions/grib2/tables/8/3.9.table | 4 + definitions/grib2/tables/8/4.0.table | 54 + definitions/grib2/tables/8/4.1.0.table | 27 + definitions/grib2/tables/8/4.1.1.table | 7 + definitions/grib2/tables/8/4.1.10.table | 10 + definitions/grib2/tables/8/4.1.192.table | 4 + definitions/grib2/tables/8/4.1.2.table | 9 + definitions/grib2/tables/8/4.1.3.table | 8 + definitions/grib2/tables/8/4.1.table | 5 + definitions/grib2/tables/8/4.10.table | 15 + definitions/grib2/tables/8/4.11.table | 10 + definitions/grib2/tables/8/4.12.table | 7 + definitions/grib2/tables/8/4.13.table | 6 + definitions/grib2/tables/8/4.14.table | 6 + definitions/grib2/tables/8/4.15.table | 11 + definitions/grib2/tables/8/4.151.table | 70 + definitions/grib2/tables/8/4.192.table | 4 + definitions/grib2/tables/8/4.2.0.0.table | 25 + definitions/grib2/tables/8/4.2.0.1.table | 95 + definitions/grib2/tables/8/4.2.0.13.table | 5 + definitions/grib2/tables/8/4.2.0.14.table | 7 + definitions/grib2/tables/8/4.2.0.15.table | 19 + definitions/grib2/tables/8/4.2.0.16.table | 10 + definitions/grib2/tables/8/4.2.0.18.table | 18 + definitions/grib2/tables/8/4.2.0.19.table | 31 + definitions/grib2/tables/8/4.2.0.190.table | 5 + definitions/grib2/tables/8/4.2.0.191.table | 7 + definitions/grib2/tables/8/4.2.0.2.table | 38 + definitions/grib2/tables/8/4.2.0.20.table | 42 + definitions/grib2/tables/8/4.2.0.3.table | 30 + definitions/grib2/tables/8/4.2.0.4.table | 20 + definitions/grib2/tables/8/4.2.0.5.table | 11 + definitions/grib2/tables/8/4.2.0.6.table | 38 + definitions/grib2/tables/8/4.2.0.7.table | 20 + definitions/grib2/tables/8/4.2.1.0.table | 11 + definitions/grib2/tables/8/4.2.1.1.table | 7 + definitions/grib2/tables/8/4.2.1.2.table | 14 + definitions/grib2/tables/8/4.2.10.0.table | 53 + definitions/grib2/tables/8/4.2.10.1.table | 8 + definitions/grib2/tables/8/4.2.10.191.table | 6 + definitions/grib2/tables/8/4.2.10.2.table | 14 + definitions/grib2/tables/8/4.2.10.3.table | 6 + definitions/grib2/tables/8/4.2.10.4.table | 18 + definitions/grib2/tables/8/4.2.192.0.table | 2 + definitions/grib2/tables/8/4.2.192.1.table | 2 + definitions/grib2/tables/8/4.2.192.10.table | 2 + definitions/grib2/tables/8/4.2.192.100.table | 2 + definitions/grib2/tables/8/4.2.192.101.table | 2 + definitions/grib2/tables/8/4.2.192.102.table | 2 + definitions/grib2/tables/8/4.2.192.103.table | 2 + definitions/grib2/tables/8/4.2.192.104.table | 2 + definitions/grib2/tables/8/4.2.192.105.table | 2 + definitions/grib2/tables/8/4.2.192.106.table | 2 + definitions/grib2/tables/8/4.2.192.107.table | 2 + definitions/grib2/tables/8/4.2.192.108.table | 2 + definitions/grib2/tables/8/4.2.192.109.table | 2 + definitions/grib2/tables/8/4.2.192.11.table | 2 + definitions/grib2/tables/8/4.2.192.110.table | 2 + definitions/grib2/tables/8/4.2.192.111.table | 2 + definitions/grib2/tables/8/4.2.192.112.table | 2 + definitions/grib2/tables/8/4.2.192.113.table | 2 + definitions/grib2/tables/8/4.2.192.114.table | 2 + definitions/grib2/tables/8/4.2.192.115.table | 2 + definitions/grib2/tables/8/4.2.192.116.table | 2 + definitions/grib2/tables/8/4.2.192.117.table | 2 + definitions/grib2/tables/8/4.2.192.118.table | 2 + definitions/grib2/tables/8/4.2.192.119.table | 2 + definitions/grib2/tables/8/4.2.192.12.table | 2 + definitions/grib2/tables/8/4.2.192.120.table | 2 + definitions/grib2/tables/8/4.2.192.121.table | 2 + definitions/grib2/tables/8/4.2.192.122.table | 2 + definitions/grib2/tables/8/4.2.192.123.table | 2 + definitions/grib2/tables/8/4.2.192.124.table | 2 + definitions/grib2/tables/8/4.2.192.125.table | 2 + definitions/grib2/tables/8/4.2.192.126.table | 2 + definitions/grib2/tables/8/4.2.192.127.table | 2 + definitions/grib2/tables/8/4.2.192.128.table | 2 + definitions/grib2/tables/8/4.2.192.129.table | 2 + definitions/grib2/tables/8/4.2.192.13.table | 2 + definitions/grib2/tables/8/4.2.192.130.table | 2 + definitions/grib2/tables/8/4.2.192.131.table | 2 + definitions/grib2/tables/8/4.2.192.132.table | 2 + definitions/grib2/tables/8/4.2.192.133.table | 2 + definitions/grib2/tables/8/4.2.192.134.table | 2 + definitions/grib2/tables/8/4.2.192.135.table | 2 + definitions/grib2/tables/8/4.2.192.136.table | 2 + definitions/grib2/tables/8/4.2.192.137.table | 2 + definitions/grib2/tables/8/4.2.192.138.table | 2 + definitions/grib2/tables/8/4.2.192.139.table | 2 + definitions/grib2/tables/8/4.2.192.14.table | 2 + definitions/grib2/tables/8/4.2.192.140.table | 2 + definitions/grib2/tables/8/4.2.192.141.table | 2 + definitions/grib2/tables/8/4.2.192.142.table | 2 + definitions/grib2/tables/8/4.2.192.143.table | 2 + definitions/grib2/tables/8/4.2.192.144.table | 2 + definitions/grib2/tables/8/4.2.192.145.table | 2 + definitions/grib2/tables/8/4.2.192.146.table | 2 + definitions/grib2/tables/8/4.2.192.147.table | 2 + definitions/grib2/tables/8/4.2.192.148.table | 2 + definitions/grib2/tables/8/4.2.192.149.table | 2 + definitions/grib2/tables/8/4.2.192.15.table | 2 + definitions/grib2/tables/8/4.2.192.150.table | 2 + definitions/grib2/tables/8/4.2.192.151.table | 2 + definitions/grib2/tables/8/4.2.192.152.table | 2 + definitions/grib2/tables/8/4.2.192.153.table | 2 + definitions/grib2/tables/8/4.2.192.154.table | 2 + definitions/grib2/tables/8/4.2.192.155.table | 2 + definitions/grib2/tables/8/4.2.192.156.table | 2 + definitions/grib2/tables/8/4.2.192.157.table | 2 + definitions/grib2/tables/8/4.2.192.158.table | 2 + definitions/grib2/tables/8/4.2.192.159.table | 2 + definitions/grib2/tables/8/4.2.192.16.table | 2 + definitions/grib2/tables/8/4.2.192.160.table | 2 + definitions/grib2/tables/8/4.2.192.161.table | 2 + definitions/grib2/tables/8/4.2.192.162.table | 2 + definitions/grib2/tables/8/4.2.192.163.table | 2 + definitions/grib2/tables/8/4.2.192.164.table | 2 + definitions/grib2/tables/8/4.2.192.165.table | 2 + definitions/grib2/tables/8/4.2.192.166.table | 2 + definitions/grib2/tables/8/4.2.192.167.table | 2 + definitions/grib2/tables/8/4.2.192.168.table | 2 + definitions/grib2/tables/8/4.2.192.169.table | 2 + definitions/grib2/tables/8/4.2.192.17.table | 2 + definitions/grib2/tables/8/4.2.192.170.table | 2 + definitions/grib2/tables/8/4.2.192.171.table | 2 + definitions/grib2/tables/8/4.2.192.172.table | 2 + definitions/grib2/tables/8/4.2.192.173.table | 2 + definitions/grib2/tables/8/4.2.192.174.table | 2 + definitions/grib2/tables/8/4.2.192.175.table | 2 + definitions/grib2/tables/8/4.2.192.176.table | 2 + definitions/grib2/tables/8/4.2.192.177.table | 2 + definitions/grib2/tables/8/4.2.192.178.table | 2 + definitions/grib2/tables/8/4.2.192.179.table | 2 + definitions/grib2/tables/8/4.2.192.18.table | 2 + definitions/grib2/tables/8/4.2.192.180.table | 2 + definitions/grib2/tables/8/4.2.192.181.table | 2 + definitions/grib2/tables/8/4.2.192.182.table | 2 + definitions/grib2/tables/8/4.2.192.183.table | 2 + definitions/grib2/tables/8/4.2.192.184.table | 2 + definitions/grib2/tables/8/4.2.192.185.table | 2 + definitions/grib2/tables/8/4.2.192.186.table | 2 + definitions/grib2/tables/8/4.2.192.187.table | 2 + definitions/grib2/tables/8/4.2.192.188.table | 2 + definitions/grib2/tables/8/4.2.192.189.table | 2 + definitions/grib2/tables/8/4.2.192.19.table | 2 + definitions/grib2/tables/8/4.2.192.190.table | 2 + definitions/grib2/tables/8/4.2.192.191.table | 2 + definitions/grib2/tables/8/4.2.192.192.table | 2 + definitions/grib2/tables/8/4.2.192.193.table | 2 + definitions/grib2/tables/8/4.2.192.194.table | 2 + definitions/grib2/tables/8/4.2.192.195.table | 2 + definitions/grib2/tables/8/4.2.192.196.table | 2 + definitions/grib2/tables/8/4.2.192.197.table | 2 + definitions/grib2/tables/8/4.2.192.198.table | 2 + definitions/grib2/tables/8/4.2.192.199.table | 2 + definitions/grib2/tables/8/4.2.192.2.table | 2 + definitions/grib2/tables/8/4.2.192.20.table | 2 + definitions/grib2/tables/8/4.2.192.200.table | 2 + definitions/grib2/tables/8/4.2.192.201.table | 2 + definitions/grib2/tables/8/4.2.192.202.table | 2 + definitions/grib2/tables/8/4.2.192.203.table | 2 + definitions/grib2/tables/8/4.2.192.204.table | 2 + definitions/grib2/tables/8/4.2.192.205.table | 2 + definitions/grib2/tables/8/4.2.192.206.table | 2 + definitions/grib2/tables/8/4.2.192.207.table | 2 + definitions/grib2/tables/8/4.2.192.208.table | 2 + definitions/grib2/tables/8/4.2.192.209.table | 2 + definitions/grib2/tables/8/4.2.192.21.table | 2 + definitions/grib2/tables/8/4.2.192.210.table | 2 + definitions/grib2/tables/8/4.2.192.211.table | 2 + definitions/grib2/tables/8/4.2.192.212.table | 2 + definitions/grib2/tables/8/4.2.192.213.table | 2 + definitions/grib2/tables/8/4.2.192.214.table | 2 + definitions/grib2/tables/8/4.2.192.215.table | 2 + definitions/grib2/tables/8/4.2.192.216.table | 2 + definitions/grib2/tables/8/4.2.192.217.table | 2 + definitions/grib2/tables/8/4.2.192.218.table | 2 + definitions/grib2/tables/8/4.2.192.219.table | 2 + definitions/grib2/tables/8/4.2.192.22.table | 2 + definitions/grib2/tables/8/4.2.192.220.table | 2 + definitions/grib2/tables/8/4.2.192.221.table | 2 + definitions/grib2/tables/8/4.2.192.222.table | 2 + definitions/grib2/tables/8/4.2.192.223.table | 2 + definitions/grib2/tables/8/4.2.192.224.table | 2 + definitions/grib2/tables/8/4.2.192.225.table | 2 + definitions/grib2/tables/8/4.2.192.226.table | 2 + definitions/grib2/tables/8/4.2.192.227.table | 2 + definitions/grib2/tables/8/4.2.192.228.table | 2 + definitions/grib2/tables/8/4.2.192.229.table | 2 + definitions/grib2/tables/8/4.2.192.23.table | 2 + definitions/grib2/tables/8/4.2.192.230.table | 2 + definitions/grib2/tables/8/4.2.192.231.table | 2 + definitions/grib2/tables/8/4.2.192.232.table | 2 + definitions/grib2/tables/8/4.2.192.233.table | 2 + definitions/grib2/tables/8/4.2.192.234.table | 2 + definitions/grib2/tables/8/4.2.192.235.table | 2 + definitions/grib2/tables/8/4.2.192.236.table | 2 + definitions/grib2/tables/8/4.2.192.237.table | 2 + definitions/grib2/tables/8/4.2.192.238.table | 2 + definitions/grib2/tables/8/4.2.192.239.table | 2 + definitions/grib2/tables/8/4.2.192.24.table | 2 + definitions/grib2/tables/8/4.2.192.240.table | 2 + definitions/grib2/tables/8/4.2.192.241.table | 2 + definitions/grib2/tables/8/4.2.192.242.table | 2 + definitions/grib2/tables/8/4.2.192.243.table | 2 + definitions/grib2/tables/8/4.2.192.244.table | 2 + definitions/grib2/tables/8/4.2.192.245.table | 2 + definitions/grib2/tables/8/4.2.192.246.table | 2 + definitions/grib2/tables/8/4.2.192.247.table | 2 + definitions/grib2/tables/8/4.2.192.248.table | 2 + definitions/grib2/tables/8/4.2.192.249.table | 2 + definitions/grib2/tables/8/4.2.192.25.table | 2 + definitions/grib2/tables/8/4.2.192.250.table | 2 + definitions/grib2/tables/8/4.2.192.251.table | 2 + definitions/grib2/tables/8/4.2.192.252.table | 2 + definitions/grib2/tables/8/4.2.192.253.table | 2 + definitions/grib2/tables/8/4.2.192.254.table | 2 + definitions/grib2/tables/8/4.2.192.255.table | 2 + definitions/grib2/tables/8/4.2.192.26.table | 2 + definitions/grib2/tables/8/4.2.192.27.table | 2 + definitions/grib2/tables/8/4.2.192.28.table | 2 + definitions/grib2/tables/8/4.2.192.29.table | 2 + definitions/grib2/tables/8/4.2.192.3.table | 2 + definitions/grib2/tables/8/4.2.192.30.table | 2 + definitions/grib2/tables/8/4.2.192.31.table | 2 + definitions/grib2/tables/8/4.2.192.32.table | 2 + definitions/grib2/tables/8/4.2.192.33.table | 2 + definitions/grib2/tables/8/4.2.192.34.table | 2 + definitions/grib2/tables/8/4.2.192.35.table | 2 + definitions/grib2/tables/8/4.2.192.36.table | 2 + definitions/grib2/tables/8/4.2.192.37.table | 2 + definitions/grib2/tables/8/4.2.192.38.table | 2 + definitions/grib2/tables/8/4.2.192.39.table | 2 + definitions/grib2/tables/8/4.2.192.4.table | 2 + definitions/grib2/tables/8/4.2.192.40.table | 2 + definitions/grib2/tables/8/4.2.192.41.table | 2 + definitions/grib2/tables/8/4.2.192.42.table | 2 + definitions/grib2/tables/8/4.2.192.43.table | 2 + definitions/grib2/tables/8/4.2.192.44.table | 2 + definitions/grib2/tables/8/4.2.192.45.table | 2 + definitions/grib2/tables/8/4.2.192.46.table | 2 + definitions/grib2/tables/8/4.2.192.47.table | 2 + definitions/grib2/tables/8/4.2.192.48.table | 2 + definitions/grib2/tables/8/4.2.192.49.table | 2 + definitions/grib2/tables/8/4.2.192.5.table | 2 + definitions/grib2/tables/8/4.2.192.50.table | 2 + definitions/grib2/tables/8/4.2.192.51.table | 2 + definitions/grib2/tables/8/4.2.192.52.table | 2 + definitions/grib2/tables/8/4.2.192.53.table | 2 + definitions/grib2/tables/8/4.2.192.54.table | 2 + definitions/grib2/tables/8/4.2.192.55.table | 2 + definitions/grib2/tables/8/4.2.192.56.table | 2 + definitions/grib2/tables/8/4.2.192.57.table | 2 + definitions/grib2/tables/8/4.2.192.58.table | 2 + definitions/grib2/tables/8/4.2.192.59.table | 2 + definitions/grib2/tables/8/4.2.192.6.table | 2 + definitions/grib2/tables/8/4.2.192.60.table | 2 + definitions/grib2/tables/8/4.2.192.61.table | 2 + definitions/grib2/tables/8/4.2.192.62.table | 2 + definitions/grib2/tables/8/4.2.192.63.table | 2 + definitions/grib2/tables/8/4.2.192.64.table | 2 + definitions/grib2/tables/8/4.2.192.65.table | 2 + definitions/grib2/tables/8/4.2.192.66.table | 2 + definitions/grib2/tables/8/4.2.192.67.table | 2 + definitions/grib2/tables/8/4.2.192.68.table | 2 + definitions/grib2/tables/8/4.2.192.69.table | 2 + definitions/grib2/tables/8/4.2.192.7.table | 2 + definitions/grib2/tables/8/4.2.192.70.table | 2 + definitions/grib2/tables/8/4.2.192.71.table | 2 + definitions/grib2/tables/8/4.2.192.72.table | 2 + definitions/grib2/tables/8/4.2.192.73.table | 2 + definitions/grib2/tables/8/4.2.192.74.table | 2 + definitions/grib2/tables/8/4.2.192.75.table | 2 + definitions/grib2/tables/8/4.2.192.76.table | 2 + definitions/grib2/tables/8/4.2.192.77.table | 2 + definitions/grib2/tables/8/4.2.192.78.table | 2 + definitions/grib2/tables/8/4.2.192.79.table | 2 + definitions/grib2/tables/8/4.2.192.8.table | 2 + definitions/grib2/tables/8/4.2.192.80.table | 2 + definitions/grib2/tables/8/4.2.192.81.table | 2 + definitions/grib2/tables/8/4.2.192.82.table | 2 + definitions/grib2/tables/8/4.2.192.83.table | 2 + definitions/grib2/tables/8/4.2.192.84.table | 2 + definitions/grib2/tables/8/4.2.192.85.table | 2 + definitions/grib2/tables/8/4.2.192.86.table | 2 + definitions/grib2/tables/8/4.2.192.87.table | 2 + definitions/grib2/tables/8/4.2.192.88.table | 2 + definitions/grib2/tables/8/4.2.192.89.table | 2 + definitions/grib2/tables/8/4.2.192.9.table | 2 + definitions/grib2/tables/8/4.2.192.90.table | 2 + definitions/grib2/tables/8/4.2.192.91.table | 2 + definitions/grib2/tables/8/4.2.192.92.table | 2 + definitions/grib2/tables/8/4.2.192.93.table | 2 + definitions/grib2/tables/8/4.2.192.94.table | 2 + definitions/grib2/tables/8/4.2.192.95.table | 2 + definitions/grib2/tables/8/4.2.192.96.table | 2 + definitions/grib2/tables/8/4.2.192.97.table | 2 + definitions/grib2/tables/8/4.2.192.98.table | 2 + definitions/grib2/tables/8/4.2.192.99.table | 2 + definitions/grib2/tables/8/4.2.2.0.table | 37 + definitions/grib2/tables/8/4.2.2.3.table | 27 + definitions/grib2/tables/8/4.2.2.4.table | 4 + definitions/grib2/tables/8/4.2.3.0.table | 14 + definitions/grib2/tables/8/4.2.3.1.table | 28 + definitions/grib2/tables/8/4.2.table | 5 + definitions/grib2/tables/8/4.201.table | 10 + definitions/grib2/tables/8/4.202.table | 4 + definitions/grib2/tables/8/4.203.table | 26 + definitions/grib2/tables/8/4.204.table | 9 + definitions/grib2/tables/8/4.205.table | 6 + definitions/grib2/tables/8/4.206.table | 6 + definitions/grib2/tables/8/4.207.table | 10 + definitions/grib2/tables/8/4.208.table | 9 + definitions/grib2/tables/8/4.209.table | 9 + definitions/grib2/tables/8/4.210.table | 6 + definitions/grib2/tables/8/4.211.table | 7 + definitions/grib2/tables/8/4.212.table | 18 + definitions/grib2/tables/8/4.213.table | 21 + definitions/grib2/tables/8/4.215.table | 9 + definitions/grib2/tables/8/4.216.table | 96 + definitions/grib2/tables/8/4.217.table | 8 + definitions/grib2/tables/8/4.218.table | 38 + definitions/grib2/tables/8/4.219.table | 8 + definitions/grib2/tables/8/4.220.table | 6 + definitions/grib2/tables/8/4.221.table | 6 + definitions/grib2/tables/8/4.222.table | 6 + definitions/grib2/tables/8/4.223.table | 5 + definitions/grib2/tables/8/4.224.table | 18 + definitions/grib2/tables/8/4.230.table | 415 + definitions/grib2/tables/8/4.233.table | 415 + definitions/grib2/tables/8/4.3.table | 16 + definitions/grib2/tables/8/4.4.table | 17 + definitions/grib2/tables/8/4.5.table | 48 + definitions/grib2/tables/8/4.6.table | 9 + definitions/grib2/tables/8/4.7.table | 14 + definitions/grib2/tables/8/4.8.table | 6 + definitions/grib2/tables/8/4.9.table | 9 + definitions/grib2/tables/8/4.91.table | 16 + definitions/grib2/tables/8/5.0.table | 24 + definitions/grib2/tables/8/5.1.table | 6 + definitions/grib2/tables/8/5.2.table | 8 + definitions/grib2/tables/8/5.3.table | 7 + definitions/grib2/tables/8/5.4.table | 6 + definitions/grib2/tables/8/5.40.table | 5 + definitions/grib2/tables/8/5.40000.table | 5 + definitions/grib2/tables/8/5.5.table | 7 + definitions/grib2/tables/8/5.50002.table | 19 + definitions/grib2/tables/8/5.6.table | 7 + definitions/grib2/tables/8/5.7.table | 7 + definitions/grib2/tables/8/5.8.table | 3 + definitions/grib2/tables/8/5.9.table | 4 + definitions/grib2/tables/8/6.0.table | 6 + definitions/grib2/tables/8/stepType.table | 4 + definitions/grib2/tables/9/0.0.table | 10 + definitions/grib2/tables/9/1.0.table | 14 + definitions/grib2/tables/9/1.1.table | 4 + definitions/grib2/tables/9/1.2.table | 8 + definitions/grib2/tables/9/1.3.table | 10 + definitions/grib2/tables/9/1.4.table | 13 + definitions/grib2/tables/9/3.0.table | 6 + definitions/grib2/tables/9/3.1.table | 43 + definitions/grib2/tables/9/3.10.table | 8 + definitions/grib2/tables/9/3.11.table | 7 + definitions/grib2/tables/9/3.15.table | 23 + definitions/grib2/tables/9/3.2.table | 13 + definitions/grib2/tables/9/3.20.table | 6 + definitions/grib2/tables/9/3.21.table | 8 + definitions/grib2/tables/9/3.3.table | 9 + definitions/grib2/tables/9/3.4.table | 10 + definitions/grib2/tables/9/3.5.table | 5 + definitions/grib2/tables/9/3.6.table | 2 + definitions/grib2/tables/9/3.7.table | 11 + definitions/grib2/tables/9/3.8.table | 7 + definitions/grib2/tables/9/3.9.table | 4 + definitions/grib2/tables/9/4.0.table | 54 + definitions/grib2/tables/9/4.1.0.table | 27 + definitions/grib2/tables/9/4.1.1.table | 7 + definitions/grib2/tables/9/4.1.10.table | 10 + definitions/grib2/tables/9/4.1.192.table | 4 + definitions/grib2/tables/9/4.1.2.table | 9 + definitions/grib2/tables/9/4.1.3.table | 8 + definitions/grib2/tables/9/4.1.table | 5 + definitions/grib2/tables/9/4.10.table | 15 + definitions/grib2/tables/9/4.11.table | 10 + definitions/grib2/tables/9/4.12.table | 7 + definitions/grib2/tables/9/4.13.table | 6 + definitions/grib2/tables/9/4.14.table | 6 + definitions/grib2/tables/9/4.15.table | 11 + definitions/grib2/tables/9/4.151.table | 70 + definitions/grib2/tables/9/4.192.table | 4 + definitions/grib2/tables/9/4.2.0.0.table | 25 + definitions/grib2/tables/9/4.2.0.1.table | 95 + definitions/grib2/tables/9/4.2.0.13.table | 5 + definitions/grib2/tables/9/4.2.0.14.table | 7 + definitions/grib2/tables/9/4.2.0.15.table | 19 + definitions/grib2/tables/9/4.2.0.16.table | 10 + definitions/grib2/tables/9/4.2.0.18.table | 18 + definitions/grib2/tables/9/4.2.0.19.table | 32 + definitions/grib2/tables/9/4.2.0.190.table | 5 + definitions/grib2/tables/9/4.2.0.191.table | 7 + definitions/grib2/tables/9/4.2.0.2.table | 40 + definitions/grib2/tables/9/4.2.0.20.table | 42 + definitions/grib2/tables/9/4.2.0.3.table | 31 + definitions/grib2/tables/9/4.2.0.4.table | 20 + definitions/grib2/tables/9/4.2.0.5.table | 11 + definitions/grib2/tables/9/4.2.0.6.table | 40 + definitions/grib2/tables/9/4.2.0.7.table | 20 + definitions/grib2/tables/9/4.2.1.0.table | 11 + definitions/grib2/tables/9/4.2.1.1.table | 7 + definitions/grib2/tables/9/4.2.1.2.table | 14 + definitions/grib2/tables/9/4.2.10.0.table | 50 + definitions/grib2/tables/9/4.2.10.1.table | 8 + definitions/grib2/tables/9/4.2.10.191.table | 6 + definitions/grib2/tables/9/4.2.10.2.table | 14 + definitions/grib2/tables/9/4.2.10.3.table | 6 + definitions/grib2/tables/9/4.2.10.4.table | 18 + definitions/grib2/tables/9/4.2.192.0.table | 2 + definitions/grib2/tables/9/4.2.192.1.table | 2 + definitions/grib2/tables/9/4.2.192.10.table | 2 + definitions/grib2/tables/9/4.2.192.100.table | 2 + definitions/grib2/tables/9/4.2.192.101.table | 2 + definitions/grib2/tables/9/4.2.192.102.table | 2 + definitions/grib2/tables/9/4.2.192.103.table | 2 + definitions/grib2/tables/9/4.2.192.104.table | 2 + definitions/grib2/tables/9/4.2.192.105.table | 2 + definitions/grib2/tables/9/4.2.192.106.table | 2 + definitions/grib2/tables/9/4.2.192.107.table | 2 + definitions/grib2/tables/9/4.2.192.108.table | 2 + definitions/grib2/tables/9/4.2.192.109.table | 2 + definitions/grib2/tables/9/4.2.192.11.table | 2 + definitions/grib2/tables/9/4.2.192.110.table | 2 + definitions/grib2/tables/9/4.2.192.111.table | 2 + definitions/grib2/tables/9/4.2.192.112.table | 2 + definitions/grib2/tables/9/4.2.192.113.table | 2 + definitions/grib2/tables/9/4.2.192.114.table | 2 + definitions/grib2/tables/9/4.2.192.115.table | 2 + definitions/grib2/tables/9/4.2.192.116.table | 2 + definitions/grib2/tables/9/4.2.192.117.table | 2 + definitions/grib2/tables/9/4.2.192.118.table | 2 + definitions/grib2/tables/9/4.2.192.119.table | 2 + definitions/grib2/tables/9/4.2.192.12.table | 2 + definitions/grib2/tables/9/4.2.192.120.table | 2 + definitions/grib2/tables/9/4.2.192.121.table | 2 + definitions/grib2/tables/9/4.2.192.122.table | 2 + definitions/grib2/tables/9/4.2.192.123.table | 2 + definitions/grib2/tables/9/4.2.192.124.table | 2 + definitions/grib2/tables/9/4.2.192.125.table | 2 + definitions/grib2/tables/9/4.2.192.126.table | 2 + definitions/grib2/tables/9/4.2.192.127.table | 2 + definitions/grib2/tables/9/4.2.192.128.table | 2 + definitions/grib2/tables/9/4.2.192.129.table | 2 + definitions/grib2/tables/9/4.2.192.13.table | 2 + definitions/grib2/tables/9/4.2.192.130.table | 2 + definitions/grib2/tables/9/4.2.192.131.table | 2 + definitions/grib2/tables/9/4.2.192.132.table | 2 + definitions/grib2/tables/9/4.2.192.133.table | 2 + definitions/grib2/tables/9/4.2.192.134.table | 2 + definitions/grib2/tables/9/4.2.192.135.table | 2 + definitions/grib2/tables/9/4.2.192.136.table | 2 + definitions/grib2/tables/9/4.2.192.137.table | 2 + definitions/grib2/tables/9/4.2.192.138.table | 2 + definitions/grib2/tables/9/4.2.192.139.table | 2 + definitions/grib2/tables/9/4.2.192.14.table | 2 + definitions/grib2/tables/9/4.2.192.140.table | 2 + definitions/grib2/tables/9/4.2.192.141.table | 2 + definitions/grib2/tables/9/4.2.192.142.table | 2 + definitions/grib2/tables/9/4.2.192.143.table | 2 + definitions/grib2/tables/9/4.2.192.144.table | 2 + definitions/grib2/tables/9/4.2.192.145.table | 2 + definitions/grib2/tables/9/4.2.192.146.table | 2 + definitions/grib2/tables/9/4.2.192.147.table | 2 + definitions/grib2/tables/9/4.2.192.148.table | 2 + definitions/grib2/tables/9/4.2.192.149.table | 2 + definitions/grib2/tables/9/4.2.192.15.table | 2 + definitions/grib2/tables/9/4.2.192.150.table | 2 + definitions/grib2/tables/9/4.2.192.151.table | 2 + definitions/grib2/tables/9/4.2.192.152.table | 2 + definitions/grib2/tables/9/4.2.192.153.table | 2 + definitions/grib2/tables/9/4.2.192.154.table | 2 + definitions/grib2/tables/9/4.2.192.155.table | 2 + definitions/grib2/tables/9/4.2.192.156.table | 2 + definitions/grib2/tables/9/4.2.192.157.table | 2 + definitions/grib2/tables/9/4.2.192.158.table | 2 + definitions/grib2/tables/9/4.2.192.159.table | 2 + definitions/grib2/tables/9/4.2.192.16.table | 2 + definitions/grib2/tables/9/4.2.192.160.table | 2 + definitions/grib2/tables/9/4.2.192.161.table | 2 + definitions/grib2/tables/9/4.2.192.162.table | 2 + definitions/grib2/tables/9/4.2.192.163.table | 2 + definitions/grib2/tables/9/4.2.192.164.table | 2 + definitions/grib2/tables/9/4.2.192.165.table | 2 + definitions/grib2/tables/9/4.2.192.166.table | 2 + definitions/grib2/tables/9/4.2.192.167.table | 2 + definitions/grib2/tables/9/4.2.192.168.table | 2 + definitions/grib2/tables/9/4.2.192.169.table | 2 + definitions/grib2/tables/9/4.2.192.17.table | 2 + definitions/grib2/tables/9/4.2.192.170.table | 2 + definitions/grib2/tables/9/4.2.192.171.table | 2 + definitions/grib2/tables/9/4.2.192.172.table | 2 + definitions/grib2/tables/9/4.2.192.173.table | 2 + definitions/grib2/tables/9/4.2.192.174.table | 2 + definitions/grib2/tables/9/4.2.192.175.table | 2 + definitions/grib2/tables/9/4.2.192.176.table | 2 + definitions/grib2/tables/9/4.2.192.177.table | 2 + definitions/grib2/tables/9/4.2.192.178.table | 2 + definitions/grib2/tables/9/4.2.192.179.table | 2 + definitions/grib2/tables/9/4.2.192.18.table | 2 + definitions/grib2/tables/9/4.2.192.180.table | 2 + definitions/grib2/tables/9/4.2.192.181.table | 2 + definitions/grib2/tables/9/4.2.192.182.table | 2 + definitions/grib2/tables/9/4.2.192.183.table | 2 + definitions/grib2/tables/9/4.2.192.184.table | 2 + definitions/grib2/tables/9/4.2.192.185.table | 2 + definitions/grib2/tables/9/4.2.192.186.table | 2 + definitions/grib2/tables/9/4.2.192.187.table | 2 + definitions/grib2/tables/9/4.2.192.188.table | 2 + definitions/grib2/tables/9/4.2.192.189.table | 2 + definitions/grib2/tables/9/4.2.192.19.table | 2 + definitions/grib2/tables/9/4.2.192.190.table | 2 + definitions/grib2/tables/9/4.2.192.191.table | 2 + definitions/grib2/tables/9/4.2.192.192.table | 2 + definitions/grib2/tables/9/4.2.192.193.table | 2 + definitions/grib2/tables/9/4.2.192.194.table | 2 + definitions/grib2/tables/9/4.2.192.195.table | 2 + definitions/grib2/tables/9/4.2.192.196.table | 2 + definitions/grib2/tables/9/4.2.192.197.table | 2 + definitions/grib2/tables/9/4.2.192.198.table | 2 + definitions/grib2/tables/9/4.2.192.199.table | 2 + definitions/grib2/tables/9/4.2.192.2.table | 2 + definitions/grib2/tables/9/4.2.192.20.table | 2 + definitions/grib2/tables/9/4.2.192.200.table | 2 + definitions/grib2/tables/9/4.2.192.201.table | 2 + definitions/grib2/tables/9/4.2.192.202.table | 2 + definitions/grib2/tables/9/4.2.192.203.table | 2 + definitions/grib2/tables/9/4.2.192.204.table | 2 + definitions/grib2/tables/9/4.2.192.205.table | 2 + definitions/grib2/tables/9/4.2.192.206.table | 2 + definitions/grib2/tables/9/4.2.192.207.table | 2 + definitions/grib2/tables/9/4.2.192.208.table | 2 + definitions/grib2/tables/9/4.2.192.209.table | 2 + definitions/grib2/tables/9/4.2.192.21.table | 2 + definitions/grib2/tables/9/4.2.192.210.table | 2 + definitions/grib2/tables/9/4.2.192.211.table | 2 + definitions/grib2/tables/9/4.2.192.212.table | 2 + definitions/grib2/tables/9/4.2.192.213.table | 2 + definitions/grib2/tables/9/4.2.192.214.table | 2 + definitions/grib2/tables/9/4.2.192.215.table | 2 + definitions/grib2/tables/9/4.2.192.216.table | 2 + definitions/grib2/tables/9/4.2.192.217.table | 2 + definitions/grib2/tables/9/4.2.192.218.table | 2 + definitions/grib2/tables/9/4.2.192.219.table | 2 + definitions/grib2/tables/9/4.2.192.22.table | 2 + definitions/grib2/tables/9/4.2.192.220.table | 2 + definitions/grib2/tables/9/4.2.192.221.table | 2 + definitions/grib2/tables/9/4.2.192.222.table | 2 + definitions/grib2/tables/9/4.2.192.223.table | 2 + definitions/grib2/tables/9/4.2.192.224.table | 2 + definitions/grib2/tables/9/4.2.192.225.table | 2 + definitions/grib2/tables/9/4.2.192.226.table | 2 + definitions/grib2/tables/9/4.2.192.227.table | 2 + definitions/grib2/tables/9/4.2.192.228.table | 2 + definitions/grib2/tables/9/4.2.192.229.table | 2 + definitions/grib2/tables/9/4.2.192.23.table | 2 + definitions/grib2/tables/9/4.2.192.230.table | 2 + definitions/grib2/tables/9/4.2.192.231.table | 2 + definitions/grib2/tables/9/4.2.192.232.table | 2 + definitions/grib2/tables/9/4.2.192.233.table | 2 + definitions/grib2/tables/9/4.2.192.234.table | 2 + definitions/grib2/tables/9/4.2.192.235.table | 2 + definitions/grib2/tables/9/4.2.192.236.table | 2 + definitions/grib2/tables/9/4.2.192.237.table | 2 + definitions/grib2/tables/9/4.2.192.238.table | 2 + definitions/grib2/tables/9/4.2.192.239.table | 2 + definitions/grib2/tables/9/4.2.192.24.table | 2 + definitions/grib2/tables/9/4.2.192.240.table | 2 + definitions/grib2/tables/9/4.2.192.241.table | 2 + definitions/grib2/tables/9/4.2.192.242.table | 2 + definitions/grib2/tables/9/4.2.192.243.table | 2 + definitions/grib2/tables/9/4.2.192.244.table | 2 + definitions/grib2/tables/9/4.2.192.245.table | 2 + definitions/grib2/tables/9/4.2.192.246.table | 2 + definitions/grib2/tables/9/4.2.192.247.table | 2 + definitions/grib2/tables/9/4.2.192.248.table | 2 + definitions/grib2/tables/9/4.2.192.249.table | 2 + definitions/grib2/tables/9/4.2.192.25.table | 2 + definitions/grib2/tables/9/4.2.192.250.table | 2 + definitions/grib2/tables/9/4.2.192.251.table | 2 + definitions/grib2/tables/9/4.2.192.252.table | 2 + definitions/grib2/tables/9/4.2.192.253.table | 2 + definitions/grib2/tables/9/4.2.192.254.table | 2 + definitions/grib2/tables/9/4.2.192.255.table | 2 + definitions/grib2/tables/9/4.2.192.26.table | 2 + definitions/grib2/tables/9/4.2.192.27.table | 2 + definitions/grib2/tables/9/4.2.192.28.table | 2 + definitions/grib2/tables/9/4.2.192.29.table | 2 + definitions/grib2/tables/9/4.2.192.3.table | 2 + definitions/grib2/tables/9/4.2.192.30.table | 2 + definitions/grib2/tables/9/4.2.192.31.table | 2 + definitions/grib2/tables/9/4.2.192.32.table | 2 + definitions/grib2/tables/9/4.2.192.33.table | 2 + definitions/grib2/tables/9/4.2.192.34.table | 2 + definitions/grib2/tables/9/4.2.192.35.table | 2 + definitions/grib2/tables/9/4.2.192.36.table | 2 + definitions/grib2/tables/9/4.2.192.37.table | 2 + definitions/grib2/tables/9/4.2.192.38.table | 2 + definitions/grib2/tables/9/4.2.192.39.table | 2 + definitions/grib2/tables/9/4.2.192.4.table | 2 + definitions/grib2/tables/9/4.2.192.40.table | 2 + definitions/grib2/tables/9/4.2.192.41.table | 2 + definitions/grib2/tables/9/4.2.192.42.table | 2 + definitions/grib2/tables/9/4.2.192.43.table | 2 + definitions/grib2/tables/9/4.2.192.44.table | 2 + definitions/grib2/tables/9/4.2.192.45.table | 2 + definitions/grib2/tables/9/4.2.192.46.table | 2 + definitions/grib2/tables/9/4.2.192.47.table | 2 + definitions/grib2/tables/9/4.2.192.48.table | 2 + definitions/grib2/tables/9/4.2.192.49.table | 2 + definitions/grib2/tables/9/4.2.192.5.table | 2 + definitions/grib2/tables/9/4.2.192.50.table | 2 + definitions/grib2/tables/9/4.2.192.51.table | 2 + definitions/grib2/tables/9/4.2.192.52.table | 2 + definitions/grib2/tables/9/4.2.192.53.table | 2 + definitions/grib2/tables/9/4.2.192.54.table | 2 + definitions/grib2/tables/9/4.2.192.55.table | 2 + definitions/grib2/tables/9/4.2.192.56.table | 2 + definitions/grib2/tables/9/4.2.192.57.table | 2 + definitions/grib2/tables/9/4.2.192.58.table | 2 + definitions/grib2/tables/9/4.2.192.59.table | 2 + definitions/grib2/tables/9/4.2.192.6.table | 2 + definitions/grib2/tables/9/4.2.192.60.table | 2 + definitions/grib2/tables/9/4.2.192.61.table | 2 + definitions/grib2/tables/9/4.2.192.62.table | 2 + definitions/grib2/tables/9/4.2.192.63.table | 2 + definitions/grib2/tables/9/4.2.192.64.table | 2 + definitions/grib2/tables/9/4.2.192.65.table | 2 + definitions/grib2/tables/9/4.2.192.66.table | 2 + definitions/grib2/tables/9/4.2.192.67.table | 2 + definitions/grib2/tables/9/4.2.192.68.table | 2 + definitions/grib2/tables/9/4.2.192.69.table | 2 + definitions/grib2/tables/9/4.2.192.7.table | 2 + definitions/grib2/tables/9/4.2.192.70.table | 2 + definitions/grib2/tables/9/4.2.192.71.table | 2 + definitions/grib2/tables/9/4.2.192.72.table | 2 + definitions/grib2/tables/9/4.2.192.73.table | 2 + definitions/grib2/tables/9/4.2.192.74.table | 2 + definitions/grib2/tables/9/4.2.192.75.table | 2 + definitions/grib2/tables/9/4.2.192.76.table | 2 + definitions/grib2/tables/9/4.2.192.77.table | 2 + definitions/grib2/tables/9/4.2.192.78.table | 2 + definitions/grib2/tables/9/4.2.192.79.table | 2 + definitions/grib2/tables/9/4.2.192.8.table | 2 + definitions/grib2/tables/9/4.2.192.80.table | 2 + definitions/grib2/tables/9/4.2.192.81.table | 2 + definitions/grib2/tables/9/4.2.192.82.table | 2 + definitions/grib2/tables/9/4.2.192.83.table | 2 + definitions/grib2/tables/9/4.2.192.84.table | 2 + definitions/grib2/tables/9/4.2.192.85.table | 2 + definitions/grib2/tables/9/4.2.192.86.table | 2 + definitions/grib2/tables/9/4.2.192.87.table | 2 + definitions/grib2/tables/9/4.2.192.88.table | 2 + definitions/grib2/tables/9/4.2.192.89.table | 2 + definitions/grib2/tables/9/4.2.192.9.table | 2 + definitions/grib2/tables/9/4.2.192.90.table | 2 + definitions/grib2/tables/9/4.2.192.91.table | 2 + definitions/grib2/tables/9/4.2.192.92.table | 2 + definitions/grib2/tables/9/4.2.192.93.table | 2 + definitions/grib2/tables/9/4.2.192.94.table | 2 + definitions/grib2/tables/9/4.2.192.95.table | 2 + definitions/grib2/tables/9/4.2.192.96.table | 2 + definitions/grib2/tables/9/4.2.192.97.table | 2 + definitions/grib2/tables/9/4.2.192.98.table | 2 + definitions/grib2/tables/9/4.2.192.99.table | 2 + definitions/grib2/tables/9/4.2.2.0.table | 37 + definitions/grib2/tables/9/4.2.2.3.table | 27 + definitions/grib2/tables/9/4.2.2.4.table | 7 + definitions/grib2/tables/9/4.2.3.0.table | 14 + definitions/grib2/tables/9/4.2.3.1.table | 28 + definitions/grib2/tables/9/4.2.table | 5 + definitions/grib2/tables/9/4.201.table | 10 + definitions/grib2/tables/9/4.202.table | 4 + definitions/grib2/tables/9/4.203.table | 26 + definitions/grib2/tables/9/4.204.table | 9 + definitions/grib2/tables/9/4.205.table | 6 + definitions/grib2/tables/9/4.206.table | 6 + definitions/grib2/tables/9/4.207.table | 10 + definitions/grib2/tables/9/4.208.table | 9 + definitions/grib2/tables/9/4.209.table | 9 + definitions/grib2/tables/9/4.210.table | 6 + definitions/grib2/tables/9/4.211.table | 7 + definitions/grib2/tables/9/4.212.table | 18 + definitions/grib2/tables/9/4.213.table | 21 + definitions/grib2/tables/9/4.215.table | 9 + definitions/grib2/tables/9/4.216.table | 96 + definitions/grib2/tables/9/4.217.table | 8 + definitions/grib2/tables/9/4.218.table | 38 + definitions/grib2/tables/9/4.219.table | 8 + definitions/grib2/tables/9/4.220.table | 6 + definitions/grib2/tables/9/4.221.table | 6 + definitions/grib2/tables/9/4.222.table | 6 + definitions/grib2/tables/9/4.223.table | 5 + definitions/grib2/tables/9/4.224.table | 18 + definitions/grib2/tables/9/4.227.table | 10 + definitions/grib2/tables/9/4.230.table | 415 + definitions/grib2/tables/9/4.233.table | 415 + definitions/grib2/tables/9/4.234.table | 21 + definitions/grib2/tables/9/4.235.table | 8 + definitions/grib2/tables/9/4.3.table | 16 + definitions/grib2/tables/9/4.4.table | 17 + definitions/grib2/tables/9/4.5.table | 48 + definitions/grib2/tables/9/4.6.table | 9 + definitions/grib2/tables/9/4.7.table | 14 + definitions/grib2/tables/9/4.8.table | 6 + definitions/grib2/tables/9/4.9.table | 9 + definitions/grib2/tables/9/4.91.table | 16 + definitions/grib2/tables/9/5.0.table | 24 + definitions/grib2/tables/9/5.1.table | 6 + definitions/grib2/tables/9/5.2.table | 8 + definitions/grib2/tables/9/5.3.table | 7 + definitions/grib2/tables/9/5.4.table | 6 + definitions/grib2/tables/9/5.40.table | 5 + definitions/grib2/tables/9/5.40000.table | 5 + definitions/grib2/tables/9/5.5.table | 7 + definitions/grib2/tables/9/5.50002.table | 19 + definitions/grib2/tables/9/5.6.table | 7 + definitions/grib2/tables/9/5.7.table | 7 + definitions/grib2/tables/9/5.8.table | 3 + definitions/grib2/tables/9/5.9.table | 4 + definitions/grib2/tables/9/6.0.table | 6 + definitions/grib2/tables/9/stepType.table | 4 + .../grib2/tables/local/ecmf/4/1.2.table | 4 + .../grib2/tables/local/ecmf/obstat.1.0.table | 2 + .../grib2/tables/local/ecmf/obstat.10.0.table | 42 + .../grib2/tables/local/ecmf/obstat.11.0.table | 4 + .../grib2/tables/local/ecmf/obstat.2.0.table | 13 + .../grib2/tables/local/ecmf/obstat.3.0.table | 52 + .../grib2/tables/local/ecmf/obstat.4.0.table | 58 + .../grib2/tables/local/ecmf/obstat.5.0.table | 45 + .../grib2/tables/local/ecmf/obstat.6.0.table | 6 + .../grib2/tables/local/ecmf/obstat.7.0.table | 6 + .../grib2/tables/local/ecmf/obstat.8.0.table | 6 + .../grib2/tables/local/ecmf/obstat.9.0.table | 37 + .../grib2/tables/local/ecmf/obstat.reporttype | 185 + .../grib2/tables/local/ecmf/obstat.varno | 31 + definitions/grib2/template.3.0.def | 13 + definitions/grib2/template.3.1.def | 14 + definitions/grib2/template.3.10.def | 74 + definitions/grib2/template.3.100.def | 50 + definitions/grib2/template.3.1000.def | 69 + definitions/grib2/template.3.101.def | 19 + definitions/grib2/template.3.110.def | 44 + definitions/grib2/template.3.1100.def | 89 + definitions/grib2/template.3.12.def | 79 + definitions/grib2/template.3.120.def | 51 + definitions/grib2/template.3.1200.def | 66 + definitions/grib2/template.3.130.def | 17 + definitions/grib2/template.3.140.def | 71 + definitions/grib2/template.3.2.def | 14 + definitions/grib2/template.3.20.def | 72 + definitions/grib2/template.3.3.def | 16 + definitions/grib2/template.3.30.def | 104 + definitions/grib2/template.3.31.def | 72 + definitions/grib2/template.3.4.def | 13 + definitions/grib2/template.3.40.def | 11 + definitions/grib2/template.3.41.def | 14 + definitions/grib2/template.3.42.def | 14 + definitions/grib2/template.3.43.def | 15 + definitions/grib2/template.3.5.def | 14 + definitions/grib2/template.3.50.def | 12 + definitions/grib2/template.3.51.def | 13 + definitions/grib2/template.3.52.def | 13 + definitions/grib2/template.3.53.def | 14 + definitions/grib2/template.3.90.def | 78 + definitions/grib2/template.3.gaussian.def | 80 + definitions/grib2/template.3.grid.def | 66 + definitions/grib2/template.3.latlon.def | 81 + definitions/grib2/template.3.latlon_vares.def | 55 + .../grib2/template.3.resolution_flags.def | 46 + definitions/grib2/template.3.rotation.def | 27 + .../grib2/template.3.scanning_mode.def | 45 + .../grib2/template.3.shape_of_the_earth.def | 53 + .../grib2/template.3.spherical_harmonics.def | 37 + definitions/grib2/template.3.stretching.def | 27 + definitions/grib2/template.4.0.def | 15 + definitions/grib2/template.4.1.def | 15 + definitions/grib2/template.4.10.def | 15 + definitions/grib2/template.4.1000.def | 13 + definitions/grib2/template.4.1001.def | 13 + definitions/grib2/template.4.1002.def | 36 + definitions/grib2/template.4.11.def | 15 + definitions/grib2/template.4.1100.def | 13 + definitions/grib2/template.4.1101.def | 14 + definitions/grib2/template.4.12.def | 15 + definitions/grib2/template.4.13.def | 22 + definitions/grib2/template.4.14.def | 20 + definitions/grib2/template.4.15.def | 18 + definitions/grib2/template.4.2.def | 15 + definitions/grib2/template.4.20.def | 85 + definitions/grib2/template.4.2000.def | 15 + definitions/grib2/template.4.254.def | 21 + definitions/grib2/template.4.3.def | 20 + definitions/grib2/template.4.30.def | 46 + definitions/grib2/template.4.31.def | 44 + definitions/grib2/template.4.311.def | 45 + definitions/grib2/template.4.32.def | 39 + definitions/grib2/template.4.4.def | 20 + definitions/grib2/template.4.40.def | 14 + definitions/grib2/template.4.40033.def | 17 + definitions/grib2/template.4.40034.def | 18 + definitions/grib2/template.4.40052.def | 16 + definitions/grib2/template.4.41.def | 15 + definitions/grib2/template.4.42.def | 14 + definitions/grib2/template.4.43.def | 15 + definitions/grib2/template.4.44.def | 14 + definitions/grib2/template.4.45.def | 15 + definitions/grib2/template.4.46.def | 14 + definitions/grib2/template.4.47.def | 15 + definitions/grib2/template.4.48.def | 14 + definitions/grib2/template.4.5.def | 15 + definitions/grib2/template.4.51.def | 15 + definitions/grib2/template.4.6.def | 15 + definitions/grib2/template.4.7.def | 13 + definitions/grib2/template.4.8.def | 14 + definitions/grib2/template.4.9.def | 15 + definitions/grib2/template.4.91.def | 15 + definitions/grib2/template.4.categorical.def | 30 + .../grib2/template.4.circular_cluster.def | 56 + definitions/grib2/template.4.derived.def | 17 + definitions/grib2/template.4.eps.def | 27 + definitions/grib2/template.4.horizontal.def | 121 + definitions/grib2/template.4.parameter.def | 48 + .../grib2/template.4.parameter_aerosol.def | 59 + .../template.4.parameter_aerosol_optical.def | 68 + .../grib2/template.4.parameter_chemical.def | 52 + .../grib2/template.4.parameter_partition.def | 55 + definitions/grib2/template.4.percentile.def | 14 + .../grib2/template.4.point_in_time.def | 37 + definitions/grib2/template.4.probability.def | 32 + .../grib2/template.4.rectangular_cluster.def | 59 + definitions/grib2/template.4.statistical.def | 127 + definitions/grib2/template.5.0.def | 14 + definitions/grib2/template.5.1.def | 87 + definitions/grib2/template.5.2.def | 59 + definitions/grib2/template.5.3.def | 67 + definitions/grib2/template.5.4.def | 24 + definitions/grib2/template.5.40.def | 25 + definitions/grib2/template.5.40000.def | 10 + definitions/grib2/template.5.40010.def | 10 + definitions/grib2/template.5.41.def | 14 + definitions/grib2/template.5.42.def | 28 + definitions/grib2/template.5.50.def | 15 + definitions/grib2/template.5.50000.def | 44 + definitions/grib2/template.5.50001.def | 33 + definitions/grib2/template.5.50002.def | 34 + definitions/grib2/template.5.51.def | 46 + definitions/grib2/template.5.6.def | 19 + definitions/grib2/template.5.61.def | 19 + .../grib2/template.5.original_values.def | 11 + definitions/grib2/template.5.packing.def | 29 + definitions/grib2/template.5.second_order.def | 30 + definitions/grib2/template.7.0.def | 41 + definitions/grib2/template.7.1.def | 42 + definitions/grib2/template.7.2.def | 61 + definitions/grib2/template.7.3.def | 59 + definitions/grib2/template.7.4.def | 33 + definitions/grib2/template.7.40.def | 60 + definitions/grib2/template.7.40000.def | 10 + definitions/grib2/template.7.40010.def | 10 + definitions/grib2/template.7.41.def | 43 + definitions/grib2/template.7.42.def | 42 + definitions/grib2/template.7.50.def | 50 + definitions/grib2/template.7.50000.def | 113 + definitions/grib2/template.7.50001.def | 105 + definitions/grib2/template.7.50002.def | 152 + definitions/grib2/template.7.51.def | 118 + definitions/grib2/template.7.6.def | 41 + definitions/grib2/template.7.61.def | 41 + definitions/grib2/template.7.second_order.def | 67 + definitions/grib2/template.second_order.def | 1 + definitions/grib2/tiggeLocalVersion.table | 1 + definitions/grib2/tigge_name.def | 45 + definitions/grib2/tigge_parameter.def | 396 + definitions/grib2/tigge_short_name.def | 44 + definitions/grib2/tigge_suiteName.table | 13 + definitions/grib2/units.def | 2246 ++ definitions/gts/boot.def | 53 + definitions/inject_download_page.pl | 57 + definitions/installDefinitions.sh | 116 + definitions/make_makefile_am.pl | 80 + definitions/mars/analyse.pl | 23 + definitions/mars/base.def | 2 + definitions/mars/class.table | 51 + definitions/mars/default_labeling.def | 13 + definitions/mars/domain.96.table | 4 + definitions/mars/domain.table | 39 + definitions/mars/genfiles.ksh | 18 + definitions/mars/grib1.amap.an.def | 3 + definitions/mars/grib1.dacl.pb.def | 4 + definitions/mars/grib1.dacw.pb.def | 4 + definitions/mars/grib1.dcda.4i.def | 1 + definitions/mars/grib1.dcda.me.def | 1 + definitions/mars/grib1.dcda.sim.def | 3 + definitions/mars/grib1.edmm.an.def | 4 + definitions/mars/grib1.edmm.cl.def | 2 + definitions/mars/grib1.edmm.fc.def | 10 + definitions/mars/grib1.edmm.fg.def | 12 + definitions/mars/grib1.edmm.ia.def | 4 + definitions/mars/grib1.edmm.ssd.def | 5 + definitions/mars/grib1.edmo.an.def | 10 + definitions/mars/grib1.edmo.cl.def | 2 + definitions/mars/grib1.edmo.fc.def | 13 + definitions/mars/grib1.edmo.ssd.def | 16 + definitions/mars/grib1.efhc.cf.def | 1 + definitions/mars/grib1.efhc.icp.def | 2 + definitions/mars/grib1.efhc.pf.def | 2 + definitions/mars/grib1.efho.cf.def | 2 + definitions/mars/grib1.efho.pf.def | 3 + definitions/mars/grib1.efhs.cd.def | 3 + definitions/mars/grib1.efhs.ed.def | 1 + definitions/mars/grib1.efhs.em.def | 1 + definitions/mars/grib1.efhs.es.def | 1 + definitions/mars/grib1.efhs.taem.def | 1 + definitions/mars/grib1.efhs.taes.def | 1 + definitions/mars/grib1.efov.pf.def | 1 + definitions/mars/grib1.ehmm.em.def | 8 + definitions/mars/grib1.elda.4i.def | 2 + definitions/mars/grib1.elda.4v.def | 2 + definitions/mars/grib1.elda.an.def | 2 + definitions/mars/grib1.elda.ea.def | 2 + definitions/mars/grib1.elda.ef.def | 2 + definitions/mars/grib1.elda.em.def | 1 + definitions/mars/grib1.elda.es.def | 1 + definitions/mars/grib1.elda.fc.def | 2 + definitions/mars/grib1.elda.me.def | 2 + definitions/mars/grib1.elda.ses.def | 1 + definitions/mars/grib1.enda.4v.def | 1 + definitions/mars/grib1.enda.an.def | 1 + definitions/mars/grib1.enda.def | 1 + definitions/mars/grib1.enda.ea.def | 1 + definitions/mars/grib1.enda.ef.def | 1 + definitions/mars/grib1.enda.em.def | 1 + definitions/mars/grib1.enda.es.def | 1 + definitions/mars/grib1.enda.fc.def | 1 + definitions/mars/grib1.enda.ssd.def | 5 + definitions/mars/grib1.enda.sv.def | 1 + definitions/mars/grib1.enda.svar.def | 1 + definitions/mars/grib1.enfh.cf.def | 3 + definitions/mars/grib1.enfh.fcmax.def | 5 + definitions/mars/grib1.enfh.fcmean.def | 5 + definitions/mars/grib1.enfh.fcmin.def | 5 + definitions/mars/grib1.enfh.fcstdev.def | 5 + definitions/mars/grib1.enfh.ff.def | 3 + definitions/mars/grib1.enfh.icp.def | 4 + definitions/mars/grib1.enfh.pf.def | 4 + definitions/mars/grib1.enfh.tims.def | 3 + definitions/mars/grib1.enfo.cf.def | 1 + definitions/mars/grib1.enfo.ci.def | 1 + definitions/mars/grib1.enfo.cm.def | 2 + definitions/mars/grib1.enfo.cr.def | 1 + definitions/mars/grib1.enfo.cs.def | 4 + definitions/mars/grib1.enfo.cv.def | 1 + definitions/mars/grib1.enfo.ed.def | 1 + definitions/mars/grib1.enfo.ef.def | 1 + definitions/mars/grib1.enfo.efi.def | 1 + definitions/mars/grib1.enfo.efic.def | 2 + definitions/mars/grib1.enfo.em.def | 1 + definitions/mars/grib1.enfo.ep.def | 1 + definitions/mars/grib1.enfo.es.def | 1 + definitions/mars/grib1.enfo.fc.def | 1 + definitions/mars/grib1.enfo.fcmax.def | 2 + definitions/mars/grib1.enfo.fcmean.def | 2 + definitions/mars/grib1.enfo.fcmin.def | 2 + definitions/mars/grib1.enfo.fcstdev.def | 2 + definitions/mars/grib1.enfo.ff.def | 1 + definitions/mars/grib1.enfo.fp.def | 31 + definitions/mars/grib1.enfo.icp.def | 1 + definitions/mars/grib1.enfo.pb.def | 4 + definitions/mars/grib1.enfo.pd.def | 3 + definitions/mars/grib1.enfo.pf.def | 2 + definitions/mars/grib1.enfo.sot.def | 2 + definitions/mars/grib1.enfo.sv.def | 1 + definitions/mars/grib1.enfo.svar.def | 1 + definitions/mars/grib1.enfo.taem.def | 1 + definitions/mars/grib1.enfo.taes.def | 1 + definitions/mars/grib1.enfo.tu.def | 3 + definitions/mars/grib1.enwh.cf.def | 2 + definitions/mars/grib1.enwh.fcmax.def | 5 + definitions/mars/grib1.enwh.fcmean.def | 5 + definitions/mars/grib1.enwh.fcmin.def | 5 + definitions/mars/grib1.enwh.fcstdev.def | 5 + definitions/mars/grib1.enwh.pf.def | 3 + definitions/mars/grib1.esmm.em.def | 6 + definitions/mars/grib1.espd.an.def | 13 + definitions/mars/grib1.ewda.4v.def | 1 + definitions/mars/grib1.ewda.an.def | 1 + definitions/mars/grib1.ewda.def | 1 + definitions/mars/grib1.ewda.fc.def | 1 + definitions/mars/grib1.ewhc.cf.def | 1 + definitions/mars/grib1.ewhc.pf.def | 2 + definitions/mars/grib1.ewho.cf.def | 2 + definitions/mars/grib1.ewho.pf.def | 3 + definitions/mars/grib1.ewla.4v.def | 2 + definitions/mars/grib1.ewla.an.def | 2 + definitions/mars/grib1.ewla.fc.def | 2 + definitions/mars/grib1.ewmm.an.def | 2 + definitions/mars/grib1.ewmm.cl.def | 2 + definitions/mars/grib1.ewmm.fc.def | 10 + definitions/mars/grib1.ewmo.an.def | 10 + definitions/mars/grib1.ewmo.cl.def | 3 + definitions/mars/grib1.ewmo.def | 1 + definitions/mars/grib1.ewmo.fc.def | 13 + definitions/mars/grib1.kwbc.pf.def | 1 + definitions/mars/grib1.lwda.4i.def | 3 + definitions/mars/grib1.lwda.4v.def | 3 + definitions/mars/grib1.lwda.an.def | 3 + definitions/mars/grib1.lwda.ea.def | 3 + definitions/mars/grib1.lwda.ef.def | 3 + definitions/mars/grib1.lwda.fc.def | 3 + definitions/mars/grib1.lwda.me.def | 4 + definitions/mars/grib1.lwwv.4v.def | 4 + definitions/mars/grib1.lwwv.an.def | 4 + definitions/mars/grib1.lwwv.fc.def | 4 + definitions/mars/grib1.maed.an.def | 1 + definitions/mars/grib1.maed.fc.def | 1 + definitions/mars/grib1.mawv.fc.def | 1 + definitions/mars/grib1.mdfa.fc.def | 3 + definitions/mars/grib1.me.def | 3 + definitions/mars/grib1.mfam.em.def | 8 + definitions/mars/grib1.mfam.fcmean.def | 9 + definitions/mars/grib1.mfam.fp.def | 8 + definitions/mars/grib1.mfam.pb.def | 14 + definitions/mars/grib1.mfam.pd.def | 13 + definitions/mars/grib1.mfhm.em.def | 10 + definitions/mars/grib1.mfhm.es.def | 10 + definitions/mars/grib1.mfhm.fcmax.def | 10 + definitions/mars/grib1.mfhm.fcmean.def | 10 + definitions/mars/grib1.mfhm.fcmin.def | 10 + definitions/mars/grib1.mfhm.fcstdev.def | 10 + definitions/mars/grib1.mfhw.cf.def | 6 + definitions/mars/grib1.mfhw.fc.def | 6 + definitions/mars/grib1.mfwm.fcmax.def | 9 + definitions/mars/grib1.mfwm.fcmean.def | 9 + definitions/mars/grib1.mfwm.fcmin.def | 9 + definitions/mars/grib1.mfwm.fcstdev.def | 9 + definitions/mars/grib1.mhwm.fcmax.def | 10 + definitions/mars/grib1.mhwm.fcmean.def | 10 + definitions/mars/grib1.mhwm.fcmin.def | 10 + definitions/mars/grib1.mhwm.fcstdev.def | 10 + definitions/mars/grib1.mmaf.fc.def | 5 + definitions/mars/grib1.mmaf.fcmean.def | 2 + definitions/mars/grib1.mmam.fcmean.def | 8 + definitions/mars/grib1.mmsa.em.def | 6 + definitions/mars/grib1.mmsa.fcmean.def | 7 + definitions/mars/grib1.mmsf.fc.def | 7 + definitions/mars/grib1.mmsf.icp.def | 5 + definitions/mars/grib1.mnfc.cf.def | 3 + definitions/mars/grib1.mnfc.ed.def | 6 + definitions/mars/grib1.mnfc.em.def | 4 + definitions/mars/grib1.mnfc.es.def | 3 + definitions/mars/grib1.mnfc.fc.def | 4 + definitions/mars/grib1.mnfc.ff.def | 4 + definitions/mars/grib1.mnfc.icp.def | 4 + definitions/mars/grib1.mnfc.of.def | 4 + definitions/mars/grib1.mnfh.cf.def | 6 + definitions/mars/grib1.mnfh.ed.def | 7 + definitions/mars/grib1.mnfh.em.def | 5 + definitions/mars/grib1.mnfh.es.def | 5 + definitions/mars/grib1.mnfh.fc.def | 6 + definitions/mars/grib1.mnfh.icp.def | 5 + definitions/mars/grib1.mnfm.em.def | 8 + definitions/mars/grib1.mnfm.es.def | 8 + definitions/mars/grib1.mnfm.fcmax.def | 8 + definitions/mars/grib1.mnfm.fcmean.def | 8 + definitions/mars/grib1.mnfm.fcmin.def | 8 + definitions/mars/grib1.mnfm.fcstdev.def | 8 + definitions/mars/grib1.mnfw.cf.def | 3 + definitions/mars/grib1.mnfw.fc.def | 4 + definitions/mars/grib1.mnth.an.def | 2 + definitions/mars/grib1.mnth.cl.def | 1 + definitions/mars/grib1.mnth.fc.def | 8 + definitions/mars/grib1.mnth.fg.def | 10 + definitions/mars/grib1.mnth.ia.def | 2 + definitions/mars/grib1.mnth.ssd.def | 12 + definitions/mars/grib1.moda.an.def | 9 + definitions/mars/grib1.moda.cl.def | 2 + definitions/mars/grib1.moda.fc.def | 12 + definitions/mars/grib1.moda.ssd.def | 16 + definitions/mars/grib1.mofc.cf.def | 2 + definitions/mars/grib1.mofc.ed.def | 3 + definitions/mars/grib1.mofc.em.def | 2 + definitions/mars/grib1.mofc.es.def | 2 + definitions/mars/grib1.mofc.fc.def | 3 + definitions/mars/grib1.mofc.ff.def | 3 + definitions/mars/grib1.mofc.of.def | 3 + definitions/mars/grib1.mofm.fcmax.def | 12 + definitions/mars/grib1.mofm.fcmean.def | 12 + definitions/mars/grib1.mofm.fcmin.def | 12 + definitions/mars/grib1.mofm.fcstdev.def | 12 + definitions/mars/grib1.mpic.s3.def | 3 + definitions/mars/grib1.msda.an.def | 2 + definitions/mars/grib1.msdc.an.def | 2 + definitions/mars/grib1.msdc.fc.def | 6 + definitions/mars/grib1.msmm.em.def | 10 + definitions/mars/grib1.msmm.fcmax.def | 11 + definitions/mars/grib1.msmm.fcmean.def | 11 + definitions/mars/grib1.msmm.fcmin.def | 11 + definitions/mars/grib1.msmm.fcstdev.def | 12 + definitions/mars/grib1.msmm.hcmean.def | 1 + definitions/mars/grib1.ocea.an.def | 5 + definitions/mars/grib1.ocea.ff.def | 5 + definitions/mars/grib1.ocea.fx.def | 5 + definitions/mars/grib1.ocea.of.def | 5 + definitions/mars/grib1.ocea.or.def | 5 + definitions/mars/grib1.oper.3v.def | 1 + definitions/mars/grib1.oper.4i.def | 1 + definitions/mars/grib1.oper.4v.def | 1 + definitions/mars/grib1.oper.an.def | 1 + definitions/mars/grib1.oper.ea.def | 4 + definitions/mars/grib1.oper.ef.def | 1 + definitions/mars/grib1.oper.fa.def | 3 + definitions/mars/grib1.oper.fc.def | 1 + definitions/mars/grib1.oper.fg.def | 7 + definitions/mars/grib1.oper.go.def | 12 + definitions/mars/grib1.oper.ia.def | 1 + definitions/mars/grib1.oper.im.def | 20 + definitions/mars/grib1.oper.me.def | 1 + definitions/mars/grib1.oper.oi.def | 1 + definitions/mars/grib1.oper.si.def | 1 + definitions/mars/grib1.oper.sim.def | 3 + definitions/mars/grib1.oper.ssd.def | 4 + definitions/mars/grib1.scda.4i.def | 1 + definitions/mars/grib1.scda.me.def | 1 + definitions/mars/grib1.seap.an.def | 2 + definitions/mars/grib1.seap.ef.def | 1 + definitions/mars/grib1.seap.es.def | 2 + definitions/mars/grib1.seap.fc.def | 2 + definitions/mars/grib1.seap.sv.def | 5 + definitions/mars/grib1.seap.svar.def | 5 + definitions/mars/grib1.seas.an.def | 3 + definitions/mars/grib1.seas.fc.def | 3 + definitions/mars/grib1.seas.ff.def | 3 + definitions/mars/grib1.seas.fx.def | 3 + definitions/mars/grib1.seas.of.def | 3 + definitions/mars/grib1.seas.or.def | 3 + definitions/mars/grib1.sens.me.def | 4 + definitions/mars/grib1.sens.sf.def | 6 + definitions/mars/grib1.sens.sg.def | 5 + definitions/mars/grib1.sfmm.em.def | 6 + definitions/mars/grib1.sfmm.fcmax.def | 8 + definitions/mars/grib1.sfmm.fcmean.def | 9 + definitions/mars/grib1.sfmm.fcmin.def | 8 + definitions/mars/grib1.sfmm.fcstdev.def | 8 + definitions/mars/grib1.smma.em.def | 7 + definitions/mars/grib1.smma.fcmean.def | 8 + definitions/mars/grib1.supd.an.def | 21 + definitions/mars/grib1.swmm.fcmax.def | 9 + definitions/mars/grib1.swmm.fcmean.def | 9 + definitions/mars/grib1.swmm.fcmin.def | 9 + definitions/mars/grib1.swmm.fcstdev.def | 9 + definitions/mars/grib1.ukmo.s3.def | 3 + definitions/mars/grib1.waef.cv.def | 1 + definitions/mars/grib1.waef.efi.def | 1 + definitions/mars/grib1.waef.efic.def | 2 + definitions/mars/grib1.waef.ep.def | 2 + definitions/mars/grib1.waef.fcmax.def | 2 + definitions/mars/grib1.waef.fcmean.def | 2 + definitions/mars/grib1.waef.fcmin.def | 2 + definitions/mars/grib1.waef.fcstdev.def | 3 + definitions/mars/grib1.waef.fp.def | 3 + definitions/mars/grib1.waef.pf.def | 1 + definitions/mars/grib1.waef.sot.def | 2 + definitions/mars/grib1.wamf.cf.def | 2 + definitions/mars/grib1.wamf.fc.def | 3 + definitions/mars/grib1.wamo.an.def | 1 + definitions/mars/grib1.wamo.cl.def | 1 + definitions/mars/grib1.wasf.fc.def | 5 + definitions/mars/grib1.wave.4v.def | 1 + definitions/mars/grib1.wave.an.def | 3 + definitions/mars/grib1.wave.def | 3 + definitions/mars/grib1.wave.fc.def | 3 + definitions/mars/grib1.wave.fg.def | 3 + definitions/mars/grib1.wehs.cd.def | 3 + definitions/mars/grib1.wehs.ed.def | 1 + definitions/mars/grib1.wehs.em.def | 1 + definitions/mars/grib1.wehs.es.def | 1 + definitions/mars/grib1.weov.pf.def | 1 + definitions/mars/grib1.wmfm.fcmax.def | 11 + definitions/mars/grib1.wmfm.fcmean.def | 11 + definitions/mars/grib1.wmfm.fcmin.def | 11 + definitions/mars/grib1.wmfm.fcstdev.def | 11 + definitions/mars/make_type_switch_case.sh | 15 + definitions/mars/marsTypeConcept.def | 9 + definitions/mars/metdb.pl | 22 + definitions/mars/model.96.table | 3 + definitions/mars/stream.table | 98 + definitions/mars/type.table | 66 + definitions/mars/wave_domain.def | 61 + definitions/mars_param.table | 6809 ++++++ definitions/param_id.table | 4056 ++++ definitions/parameters_version.def | 1 + definitions/publish_new_parameters.sh | 34 + definitions/stepUnits.table | 16 + definitions/tide/boot.def | 28 + definitions/tide/mars_labeling.def | 27 + definitions/tide/section.1.def | 56 + definitions/tide/section.4.def | 101 + definitions/x.grib | Bin 0 -> 108 bytes doxygen/build_gribex.ksh | 16 + doxygen/conversion.dox | 144 + doxygen/doxygen.css | 322 + doxygen/doxypy.py | 414 + doxygen/environment.dox | 23 + doxygen/examples.dox | 58 + doxygen/grib_api.dox | 79 + doxygen/grib_api_site.cfg | 300 + doxygen/grib_api_wiz.cfg | 298 + doxygen/grib_examples.dox | 69 + doxygen/gribex/callGribex.html | 453 + doxygen/gribex/gaussianGrid.html | 595 + doxygen/gribex/ksec0.html | 461 + doxygen/gribex/ksec1.html | 694 + doxygen/gribex/ksec2.html | 466 + doxygen/gribex/ksec3.html | 464 + doxygen/gribex/ksec4.html | 754 + doxygen/gribex/lambertEtcGrid.html | 601 + doxygen/gribex/latLongGrid.html | 589 + doxygen/gribex/localDefinition1.html | 114 + doxygen/gribex/localDefinition10.html | 293 + doxygen/gribex/localDefinition11.html | 212 + doxygen/gribex/localDefinition13.html | 271 + doxygen/gribex/localDefinition14.html | 157 + doxygen/gribex/localDefinition15.html | 128 + doxygen/gribex/localDefinition16.html | 167 + doxygen/gribex/localDefinition17.html | 249 + doxygen/gribex/localDefinition18.html | 157 + doxygen/gribex/localDefinition19.html | 412 + doxygen/gribex/localDefinition190.html | 167 + doxygen/gribex/localDefinition191.html | 163 + doxygen/gribex/localDefinition192.html | 184 + doxygen/gribex/localDefinition2.html | 232 + doxygen/gribex/localDefinition20.html | 100 + doxygen/gribex/localDefinition21.html | 341 + doxygen/gribex/localDefinition22.html | 144 + doxygen/gribex/localDefinition23.html | 255 + doxygen/gribex/localDefinition24.html | 129 + doxygen/gribex/localDefinition25.html | 103 + doxygen/gribex/localDefinition26.html | 112 + doxygen/gribex/localDefinition27.html | 198 + doxygen/gribex/localDefinition3.html | 106 + doxygen/gribex/localDefinition30.html | 198 + doxygen/gribex/localDefinition31.html | 163 + doxygen/gribex/localDefinition4.html | 889 + doxygen/gribex/localDefinition5.html | 156 + doxygen/gribex/localDefinition50.html | 199 + doxygen/gribex/localDefinition6.html | 220 + doxygen/gribex/localDefinition7.html | 128 + doxygen/gribex/localDefinition8.html | 92 + doxygen/gribex/localDefinition9.html | 268 + doxygen/gribex/localGRIBUsage.html | 266 + doxygen/gribex/mercatorGrid.html | 574 + doxygen/gribex/oceanData.html | 488 + doxygen/gribex/polarStereoGrid.html | 567 + doxygen/gribex/psec2.html | 474 + doxygen/gribex/psec3.html | 458 + doxygen/gribex/psec4.html | 448 + .../gribex/reducedGaussianGridSubArea.html | 594 + doxygen/gribex/spaceView.html | 583 + doxygen/gribex/sphericalHarmonics.html | 530 + doxygen/gribex/wmoCodeTable6.html | 294 + doxygen/head.html | 377 + doxygen/installation.dox | 80 + doxygen/keys.dox | 145 + doxygen/latex/grib_api.tex | 88 + doxygen/make_dox.sh | 10 + doxygen/make_dox_web.sh | 13 + doxygen/make_site.ksh | 20 + doxygen/modules.dox | 3 + doxygen/prepare_pydocs.pl | 56 + doxygen/tail.html | 57 + examples.dev/create_grib.c | 122 + examples.dev/eps_wind_rose.c | 228 + examples.dev/get.c | 96 + examples.dev/get_set.c | 112 + examples.dev/keys_iterator.c | 93 + examples.dev/sample1.c | 84 + examples.dev/sample3.c | 35 + examples.dev/sample4.c | 92 + examples/C/Makefile.am | 37 + examples/C/box.c | 64 + examples/C/ecmwf_link.sh | 26 + examples/C/fieldset.c | 84 + examples/C/get.c | 114 + examples/C/get.sh | 7 + examples/C/grib_precipitation.c | 73 + examples/C/include.sh | 44 + examples/C/iterator.c | 89 + examples/C/iterator.sh | 15 + examples/C/keys_iterator.c | 103 + examples/C/keys_iterator.sh | 15 + examples/C/list.c | 86 + examples/C/list.sh | 14 + examples/C/mars_param.c | 53 + examples/C/multi.c | 68 + examples/C/multi.sh | 19 + examples/C/multi_write.c | 85 + examples/C/multi_write.sh | 29 + examples/C/nc.c | 36 + examples/C/nearest.c | 93 + examples/C/points.c | 130 + examples/C/precision.c | 124 + examples/C/precision.sh | 14 + examples/C/print_data.c | 80 + examples/C/print_data.sh | 20 + examples/C/rename.sh | 14 + examples/C/run_examples.sh | 18 + examples/C/sections_copy.c | 57 + examples/C/sections_copy.sh | 14 + examples/C/set.c | 86 + examples/C/set.sh | 16 + examples/C/set_bitmap.c | 92 + examples/C/set_data.c | 69 + examples/C/set_missing.c | 77 + examples/C/set_pv.c | 79 + examples/C/values_check.c | 64 + examples/CMakeLists.txt | 0 examples/F77/Makefile.am | 26 + examples/F77/example.F | 91 + examples/F77/files_fortran.F | 74 + examples/F77/get_fortran.F | 130 + examples/F77/get_fortran.sh | 7 + examples/F77/grib_convert.F | 423 + examples/F77/include.sh | 37 + examples/F77/iterator_fortran.F | 82 + examples/F77/iterator_fortran.sh | 7 + examples/F77/keys_iterator_fortran.F | 78 + examples/F77/keys_iterator_fortran.sh | 27 + examples/F77/missing_value.F | 80 + examples/F77/msg_fortran.F | 78 + examples/F77/multi_fortran.F | 78 + examples/F77/multi_fortran.sh | 13 + examples/F77/nearest_fortran.F | 79 + examples/F77/precision_fortran.F | 97 + examples/F77/precision_fortran.sh | 7 + examples/F77/print_data_fortran.F | 80 + examples/F77/print_data_fortran.sh | 13 + examples/F77/set_fortran.F | 68 + examples/F77/set_fortran.sh | 8 + examples/F77/set_missing_fortran.F | 62 + examples/F77/set_pv_fortran.F | 55 + examples/F90/Makefile.am | 44 + examples/F90/clone.f90 | 79 + examples/F90/clone.sh | 12 + examples/F90/copy_message.f90 | 54 + examples/F90/copy_message.sh | 12 + examples/F90/copy_namespace.f90 | 37 + examples/F90/count_messages.f90 | 110 + examples/F90/count_messages.sh | 12 + examples/F90/get.f90 | 123 + examples/F90/get.sh | 12 + examples/F90/get_data.f90 | 67 + examples/F90/get_data.sh | 12 + examples/F90/get_fortran.f90 | 115 + examples/F90/get_pl.f90 | 47 + examples/F90/get_pl.sh | 12 + examples/F90/get_pv.f90 | 48 + examples/F90/get_pv.sh | 12 + examples/F90/include.sh | 45 + examples/F90/index.f90 | 114 + examples/F90/index.sh | 19 + examples/F90/iterator_fortran.f90 | 71 + examples/F90/keys_iterator.f90 | 64 + examples/F90/keys_iterator.sh | 12 + examples/F90/keys_iterator_fortran.f90 | 68 + examples/F90/multi.f90 | 50 + examples/F90/multi.sh | 13 + examples/F90/multi_fortran.f90 | 69 + examples/F90/multi_write.f90 | 51 + examples/F90/multi_write.sh | 17 + examples/F90/nearest.f90 | 81 + examples/F90/nearest.sh | 12 + examples/F90/new_from_file.f90 | 45 + examples/F90/precision.f90 | 98 + examples/F90/precision.sh | 12 + examples/F90/precision_fortran.f90 | 93 + examples/F90/print_data.f90 | 61 + examples/F90/print_data.sh | 12 + examples/F90/print_data_fortran.f90 | 65 + examples/F90/read_from_file.f90 | 52 + examples/F90/read_message.f90 | 53 + examples/F90/read_message.sh | 22 + examples/F90/samples.f90 | 96 + examples/F90/samples.sh | 25 + examples/F90/set.f90 | 85 + examples/F90/set.sh | 12 + examples/F90/set_bitmap.f90 | 80 + examples/F90/set_bitmap.sh | 11 + examples/F90/set_fortran.f90 | 61 + examples/F90/set_missing.f90 | 48 + examples/F90/set_missing.sh | 12 + examples/F90/set_missing_fortran.f90 | 47 + examples/F90/set_pv.f90 | 74 + examples/F90/set_pv.sh | 12 + examples/Makefile.am | 37 + examples/ecmwf_link.sh | 18 + examples/extra/Makefile.am | 22 + examples/extra/c_clone.c | 59 + examples/extra/c_clone.sh | 24 + examples/extra/ens_mean.f90 | 73 + examples/extra/ens_mean.sh | 15 + examples/extra/f_clone.f90 | 53 + examples/extra/f_clone.sh | 24 + examples/extra/include.sh | 37 + examples/extra/message_count.sh | 33 + examples/extra/message_count_multi.f90 | 38 + examples/extra/multi_support.sh | 22 + examples/extra/nearest.c | 92 + examples/extra/std_dev.f90 | 69 + examples/extra/std_dev.sh | 15 + examples/fieldset.c | 84 + examples/get.c | 114 + examples/get.sh | 7 + examples/get_fortran.F | 130 + examples/get_fortran.sh | 7 + examples/grib_precipitation.c | 73 + examples/include.sh | 37 + examples/iterator.c | 89 + examples/iterator.sh | 8 + examples/iterator_fortran.F | 82 + examples/iterator_fortran.sh | 7 + examples/keys_iterator.c | 103 + examples/keys_iterator.sh | 8 + examples/keys_iterator_fortran.F | 78 + examples/keys_iterator_fortran.sh | 7 + examples/multi.c | 71 + examples/multi.sh | 12 + examples/multi_fortran.F | 78 + examples/multi_fortran.sh | 13 + examples/nearest.c | 92 + examples/precision.c | 124 + examples/precision.sh | 7 + examples/precision_fortran.F | 97 + examples/precision_fortran.sh | 7 + examples/print_data.c | 80 + examples/print_data.sh | 13 + examples/print_data_fortran.F | 80 + examples/print_data_fortran.sh | 13 + examples/python/Makefile.am | 17 + examples/python/binary_message.py | 39 + examples/python/binary_message.sh | 12 + examples/python/clone.py | 48 + examples/python/clone.sh | 7 + examples/python/count_messages.c | 122 + examples/python/count_messages.py | 60 + examples/python/count_messages.sh | 12 + examples/python/get.py | 54 + examples/python/get.sh | 10 + examples/python/include.sh | 19 + examples/python/index.py | 73 + examples/python/index.sh | 7 + examples/python/iterator.c | 89 + examples/python/iterator.py | 53 + examples/python/iterator.sh | 12 + examples/python/keys_iterator.c | 103 + examples/python/keys_iterator.py | 48 + examples/python/keys_iterator.sh | 12 + examples/python/launcher.sh | 4 + examples/python/multi_write.py | 41 + examples/python/multi_write.sh | 7 + examples/python/nearest.py | 42 + examples/python/nearest.sh | 6 + examples/python/print_data.c | 80 + examples/python/print_data.py | 37 + examples/python/print_data.sh | 12 + examples/python/samples.py | 73 + examples/python/samples.sh | 7 + examples/python/set.py | 72 + examples/python/set.sh | 7 + examples/python/set_missing.py | 39 + examples/python/set_missing.sh | 7 + examples/python/set_pv.py | 46 + examples/run_examples.sh | 10 + examples/set.c | 86 + examples/set.sh | 7 + examples/set_bitmap.c | 92 + examples/set_fortran.F | 68 + examples/set_fortran.sh | 7 + examples/set_pv.c | 79 + examples/set_pv_fortran.F | 55 + fortran/CMakeLists.txt | 8 + fortran/Makefile.am | 54 + fortran/create_grib_f90.sh | 19 + fortran/extrules.am | 1 + fortran/fortranCtypes/sizes.c | 45 + fortran/fortranCtypes/test.f90 | 165 + fortran/grib_api_constants.h | 57 + fortran/grib_api_externals.h | 62 + fortran/grib_api_f77.h | 107 + fortran/grib_api_visibility.h | 26 + fortran/grib_f77.c | 518 + fortran/grib_f90.f90.head | 19 + fortran/grib_f90.f90.tail | 2635 +++ fortran/grib_f90_int.f90 | 310 + fortran/grib_f90_long_int.f90 | 318 + fortran/grib_fortran.c | 2674 +++ fortran/grib_fortran_kinds.c | 52 + fortran/grib_fortran_prototypes.h | 280 + fortran/grib_typeSizes.f90 | 58 + fortran/grib_types.f90 | 153 + fortran/same_int_long.f90 | 138 + gaussian_experimental/Makefile | 40 + gaussian_experimental/gaussian.c | 193 + gaussian_experimental/gaussian.h | 12 + gaussian_experimental/grib_rgauss.h | 613 + gaussian_experimental/rg/grib_rgauss.h | 613 + gaussian_experimental/rg/grib_rgauss_032.h | 4 + gaussian_experimental/rg/grib_rgauss_048.h | 13 + gaussian_experimental/rg/grib_rgauss_080.h | 21 + gaussian_experimental/rg/grib_rgauss_1024.h | 98 + gaussian_experimental/rg/grib_rgauss_128.h | 33 + gaussian_experimental/rg/grib_rgauss_160.h | 41 + gaussian_experimental/rg/grib_rgauss_200.h | 51 + gaussian_experimental/rg/grib_rgauss_256.h | 65 + gaussian_experimental/rg/grib_rgauss_320.h | 81 + gaussian_experimental/rg/grib_rgauss_400.h | 81 + gaussian_experimental/rg/grib_rgauss_512.h | 97 + .../rg/no_rgauss_080_19940113.h | 22 + .../rg/no_rgauss_080_19980130.h | 22 + .../rg/no_rgauss_160_19931222.h | 42 + gaussian_experimental/rg/rgauss2c.ksh | 46 + gaussian_experimental/rg/rgauss_032.h | 5 + gaussian_experimental/rg/rgauss_048.h | 14 + gaussian_experimental/rg/rgauss_080.h | 22 + gaussian_experimental/rg/rgauss_1024.h | 99 + gaussian_experimental/rg/rgauss_128.h | 34 + gaussian_experimental/rg/rgauss_160.h | 42 + gaussian_experimental/rg/rgauss_200.h | 52 + gaussian_experimental/rg/rgauss_256.h | 66 + gaussian_experimental/rg/rgauss_320.h | 82 + gaussian_experimental/rg/rgauss_400.h | 82 + gaussian_experimental/rg/rgauss_512.h | 98 + grib_api.pc.in | 11 + grib_api.spec.in | 134 + grib_api_config.h.in | 17 + grib_api_f90.pc.in | 12 + gribex/Makefile | 29 + gribex/grib_api_count.c | 45 + gribex/gribex_check.ksh | 43 + gribex/gribex_check_nofail.ksh | 42 + gribex/gribex_count.F | 102 + gribex/gribex_count.ksh | 8 + ifs_samples/grib1/Makefile.am | 272 + ifs_samples/grib1/gg_ml.tmpl | Bin 0 -> 27596 bytes ifs_samples/grib1/gg_sfc.tmpl | Bin 0 -> 26860 bytes ifs_samples/grib1/sh_ml.tmpl | Bin 0 -> 10094 bytes ifs_samples/grib1/sh_sfc.tmpl | Bin 0 -> 9358 bytes ifs_samples/grib1_mlgrib2/Makefile.am | 272 + ifs_samples/grib1_mlgrib2/gg_ml.tmpl | Bin 0 -> 27684 bytes ifs_samples/grib1_mlgrib2/gg_sfc.tmpl | Bin 0 -> 26860 bytes ifs_samples/grib1_mlgrib2/sh_ml.tmpl | Bin 0 -> 10146 bytes ifs_samples/grib1_mlgrib2/sh_sfc.tmpl | Bin 0 -> 9358 bytes ifs_samples/grib1_mlgrib2_ieee32/Makefile.am | 268 + ifs_samples/grib1_mlgrib2_ieee32/gg_ml.tmpl | Bin 0 -> 27684 bytes ifs_samples/grib1_mlgrib2_ieee32/gg_sfc.tmpl | Bin 0 -> 26860 bytes ifs_samples/grib1_mlgrib2_ieee32/sh_ml.tmpl | Bin 0 -> 17536 bytes ifs_samples/grib1_mlgrib2_ieee32/sh_sfc.tmpl | Bin 0 -> 9358 bytes ifs_samples/grib1_mlgrib2_ieee64/Makefile.am | 272 + ifs_samples/grib1_mlgrib2_ieee64/gg_ml.tmpl | Bin 0 -> 27684 bytes ifs_samples/grib1_mlgrib2_ieee64/gg_sfc.tmpl | Bin 0 -> 26860 bytes ifs_samples/grib1_mlgrib2_ieee64/sh_ml.tmpl | Bin 0 -> 34176 bytes ifs_samples/grib1_mlgrib2_ieee64/sh_sfc.tmpl | Bin 0 -> 9358 bytes ifs_samples/make_makefile_am.pl | 112 + .../gribview/src/gribview/BevelArrowIcon.java | 142 + java/gribview/src/gribview/BlankIcon.java | 39 + java/gribview/src/gribview/GribAnimator.java | 62 + java/gribview/src/gribview/GribHandleSet.java | 177 + java/gribview/src/gribview/GribMainFrame.java | 697 + .../gribview/src/gribview/GribRenderPane.java | 632 + java/gribview/src/gribview/GribView.java | 81 + .../src/gribview/GribViewAboutBox.java | 108 + .../src/gribview/JGribEditComponent.java | 224 + java/gribview/src/gribview/JGribMarker.java | 192 + java/gribview/src/gribview/JGribToolBar.java | 260 + java/gribview/src/gribview/JGribTreeNode.java | 95 + .../gribview/JGribViewDescriptorProducer.java | 38 + .../JGribViewEditionNodeProducer.java | 39 + .../src/gribview/SortButtonRenderer.java | 99 + java/jgribapi/src/jgribapi/GribDump.java | 32 + java/jgribapi/src/jgribapi/GribFile.java | 69 + java/jgribapi/src/jgribapi/GribHandle.java | 158 + java/jgribapi/src/jgribapi/GribIterator.java | 53 + java/jgribapi/src/jgribapi/GribKey.java | 27 + java/jgribapi/src/jgribapi/GribPoint.java | 74 + .../src/jgribapi/JGribObjectProducer.java | 26 + license.pl | 131 + m4/ax_linux_distribution.m4 | 77 + m4/ax_python_devel.m4 | 325 + m4/ax_rpm_init.m4 | 258 + m4/libtool.m4 | 7831 +++++++ m4/ltoptions.m4 | 369 + m4/ltsugar.m4 | 123 + m4/ltversion.m4 | 23 + m4/lt~obsolete.m4 | 98 + make_dist_definitions | 29 + parameters/Makefile | 23 + parameters/feed_metdb.pl | 88 + parameters/feed_tigge.pl | 115 + parameters/grib1_def.pl | 166 + parameters/human_readable.pl | 89 + parameters/master.info | 69 + parameters/report.pl | 41 + parameters/tigge.pm | 55 + parameters/tigge_check.info | 44 + parameters/tigge_check.pl | 51 + parameters/tigge_def.pl | 84 + parameters/tigge_parameters.pl | 51 + perf/jmeter.awk | 85 + perf/time.sh | 3 + perl/GRIB-API/API.xs | 987 + perl/GRIB-API/Changes | 6 + perl/GRIB-API/INSTALL | 13 + perl/GRIB-API/MANIFEST | 12 + perl/GRIB-API/Makefile.PL.in | 23 + perl/GRIB-API/README | 38 + perl/GRIB-API/convert.pl | 529 + perl/GRIB-API/lib/GRIB/API.pm | 97 + perl/GRIB-API/lib/GRIB/API/Debug.pm | 7 + perl/GRIB-API/lib/GRIB/API/Tie.pm | 46 + perl/GRIB-API/ppport.h | 1096 + perl/GRIB-API/t/GRIB-API.t | 27 + perl/GRIB-API/test.pl | 133 + perl/GRIB-API/typemap | 2 + perl/Makefile.am | 39 + perl/README | 20 + project_summary.cmake | 10 + python/CMakeLists.txt | 65 + python/Makefile.am | 109 + python/README | 24 + python/compare_iterator_values.sh | 19 + python/dummy.am | 0 python/extrules.am | 8 + python/grib_errors.h | 121 + python/grib_interface.c | 1968 ++ python/grib_interface.h | 109 + python/gribapi.c | 187 + python/gribapi.py | 1661 ++ python/gribapi_swig.i | 208 + python/numpy.i | 1634 ++ python/run_tests.sh | 8 + python/setup.py.in | 68 + python/swig_wrap_array.c | 8124 ++++++++ python/swig_wrap_array.py | 546 + python/swig_wrap_numpy.c | 8957 ++++++++ python/swig_wrap_numpy.py | 570 + python/test_extra.py | 46 + python/test_general.py | 172 + python/test_index.py | 83 + python/test_iterator.py | 42 + python/test_keysiterator.py | 32 + rpms/grib_api.pc.in | 11 + rpms/grib_api.spec.in | 130 + rpms/grib_api_f90.pc.in | 12 + samples/GRIB1.tmpl | Bin 0 -> 107 bytes samples/GRIB2.tmpl | Bin 0 -> 184 bytes samples/Makefile.am | 69 + samples/budg.tmpl | Bin 0 -> 6000 bytes samples/gg_sfc_grib1.tmpl | Bin 0 -> 26860 bytes samples/gg_sfc_grib2.tmpl | Bin 0 -> 26948 bytes samples/polar_stereographic_pl_grib1.tmpl | Bin 0 -> 108 bytes samples/polar_stereographic_pl_grib2.tmpl | Bin 0 -> 196 bytes samples/polar_stereographic_sfc_grib1.tmpl | Bin 0 -> 108 bytes samples/polar_stereographic_sfc_grib2.tmpl | Bin 0 -> 189 bytes samples/reduced_gg_ml_grib1.tmpl | Bin 0 -> 972 bytes samples/reduced_gg_ml_grib2.tmpl | Bin 0 -> 1048 bytes samples/reduced_gg_pl_1024_grib1.tmpl | Bin 0 -> 4204 bytes samples/reduced_gg_pl_1024_grib2.tmpl | Bin 0 -> 4292 bytes samples/reduced_gg_pl_128_grib1.tmpl | Bin 0 -> 620 bytes samples/reduced_gg_pl_128_grib2.tmpl | Bin 0 -> 708 bytes samples/reduced_gg_pl_160_grib1.tmpl | Bin 0 -> 748 bytes samples/reduced_gg_pl_160_grib2.tmpl | Bin 0 -> 836 bytes samples/reduced_gg_pl_2000_grib1.tmpl | Bin 0 -> 8108 bytes samples/reduced_gg_pl_2000_grib2.tmpl | Bin 0 -> 8196 bytes samples/reduced_gg_pl_200_grib1.tmpl | Bin 0 -> 908 bytes samples/reduced_gg_pl_200_grib2.tmpl | Bin 0 -> 996 bytes samples/reduced_gg_pl_256_grib1.tmpl | Bin 0 -> 1132 bytes samples/reduced_gg_pl_256_grib2.tmpl | Bin 0 -> 1220 bytes samples/reduced_gg_pl_320_grib1.tmpl | Bin 0 -> 1388 bytes samples/reduced_gg_pl_320_grib2.tmpl | Bin 0 -> 1476 bytes samples/reduced_gg_pl_32_grib1.tmpl | Bin 0 -> 236 bytes samples/reduced_gg_pl_32_grib2.tmpl | Bin 0 -> 324 bytes samples/reduced_gg_pl_400_grib1.tmpl | Bin 0 -> 1708 bytes samples/reduced_gg_pl_400_grib2.tmpl | Bin 0 -> 1796 bytes samples/reduced_gg_pl_48_grib1.tmpl | Bin 0 -> 300 bytes samples/reduced_gg_pl_48_grib2.tmpl | Bin 0 -> 388 bytes samples/reduced_gg_pl_512_grib1.tmpl | Bin 0 -> 2156 bytes samples/reduced_gg_pl_512_grib2.tmpl | Bin 0 -> 2244 bytes samples/reduced_gg_pl_640_grib1.tmpl | Bin 0 -> 2668 bytes samples/reduced_gg_pl_640_grib2.tmpl | Bin 0 -> 2756 bytes samples/reduced_gg_pl_80_grib1.tmpl | Bin 0 -> 428 bytes samples/reduced_gg_pl_80_grib2.tmpl | Bin 0 -> 516 bytes samples/reduced_gg_pl_grib1.tmpl | Bin 0 -> 236 bytes samples/reduced_gg_pl_grib2.tmpl | Bin 0 -> 312 bytes samples/reduced_gg_sfc_grib1.tmpl | Bin 0 -> 236 bytes samples/reduced_gg_sfc_grib2.tmpl | Bin 0 -> 312 bytes samples/reduced_gg_sfc_jpeg_grib2.tmpl | Bin 0 -> 501 bytes samples/reduced_ll_sfc_grib1.tmpl | Bin 0 -> 40288 bytes samples/reduced_ll_sfc_grib2.tmpl | Bin 0 -> 40357 bytes samples/regular_gg_ml_grib1.tmpl | Bin 0 -> 844 bytes samples/regular_gg_ml_grib2.tmpl | Bin 0 -> 920 bytes samples/regular_gg_pl_grib1.tmpl | Bin 0 -> 108 bytes samples/regular_gg_pl_grib2.tmpl | Bin 0 -> 184 bytes samples/regular_gg_sfc_grib1.tmpl | Bin 0 -> 108 bytes samples/regular_gg_sfc_grib2.tmpl | Bin 0 -> 184 bytes samples/regular_ll_pl_grib1.tmpl | Bin 0 -> 108 bytes samples/regular_ll_pl_grib2.tmpl | Bin 0 -> 184 bytes samples/regular_ll_sfc_grib1.tmpl | Bin 0 -> 108 bytes samples/regular_ll_sfc_grib2.tmpl | Bin 0 -> 184 bytes samples/rotated_ll_pl_grib1.tmpl | Bin 0 -> 118 bytes samples/rotated_ll_pl_grib2.tmpl | Bin 0 -> 196 bytes samples/rotated_ll_sfc_grib1.tmpl | Bin 0 -> 118 bytes samples/rotated_ll_sfc_grib2.tmpl | Bin 0 -> 196 bytes samples/sh_ml_grib1.tmpl | Bin 0 -> 10200 bytes samples/sh_ml_grib2.tmpl | Bin 0 -> 10134 bytes samples/sh_pl_grib1.tmpl | Bin 0 -> 9360 bytes samples/sh_pl_grib2.tmpl | Bin 0 -> 9398 bytes samples/sh_sfc_grib1.tmpl | Bin 0 -> 9358 bytes samples/sh_sfc_grib2.tmpl | Bin 0 -> 9410 bytes share/grib_api/definitions | 1 + sms/grib_api/grib_api.def | 201 + sms/grib_api/include/endt.h | 18 + sms/grib_api/include/eoj.h | 21 + sms/grib_api/include/grib_api.h | 15 + sms/grib_api/include/head.h | 40 + sms/grib_api/include/perforce.h | 16 + sms/grib_api/include/qsub.h | 13 + sms/grib_api/include/step1.h | 18 + sms/grib_api/include/step2.h | 17 + sms/grib_api/smsfiles/buildLibrary.sms | 22 + sms/grib_api/smsfiles/checking.sms | 22 + sms/grib_api/smsfiles/createTar.sms | 49 + sms/grib_api/smsfiles/install.sms | 39 + sms/grib_api/smsfiles/setup.sms | 27 + sms/submit.ksh | 5 + sms/submit.sge | 22 + sms/test_gribs/bin/cube.pl | 283 + sms/test_gribs/bin/samples.pl | 93 + sms/test_gribs/mars_server.def | 58 + sms/test_gribs/smsfiles/cleanup.sms | 6 + sms/test_gribs/smsfiles/compare.sms | 17 + sms/test_gribs/smsfiles/copy.sms | 6 + sms/test_gribs/smsfiles/cube.sms | 11 + sms/test_gribs/smsfiles/grib_api.sms | 46 + sms/test_gribs/smsfiles/gribex.sms | 7 + sms/test_gribs/smsfiles/make.sms | 19 + sms/test_gribs/smsfiles/prod_retrieve.sms | 17 + sms/test_gribs/smsfiles/sample.sms | 7 + sms/test_gribs/smsfiles/samples.sms | 11 + sms/test_gribs/smsfiles/test.sms | 52 + sms/test_gribs/smsfiles/test_archive.sms | 16 + sms/test_gribs/smsfiles/test_retrieve.sms | 21 + sms/test_gribs/smsinclude/head.h | 63 + sms/test_gribs/smsinclude/tail.h | 4 + src/CMakeLists.txt | 318 + src/Makefile.am | 333 + src/TODO | 24 + src/action.c | 190 + src/action_class_alias.c | 304 + src/action_class_assert.c | 160 + src/action_class_concept.c | 398 + src/action_class_gen.c | 239 + src/action_class_if.c | 301 + src/action_class_list.c | 214 + src/action_class_meta.c | 118 + src/action_class_modify.c | 152 + src/action_class_noop.c | 120 + src/action_class_print.c | 156 + src/action_class_put.c | 140 + src/action_class_remove.c | 169 + src/action_class_section.c | 231 + src/action_class_set.c | 157 + src/action_class_set_darray.c | 138 + src/action_class_set_iarray.c | 138 + src/action_class_set_missing.c | 129 + src/action_class_switch.c | 241 + src/action_class_template.c | 239 + src/action_class_trigger.c | 181 + src/action_class_variable.c | 135 + src/action_class_when.c | 249 + src/action_class_while.c | 179 + src/action_class_write.c | 203 + src/build_jgribapi.sh | 1 + src/compile.c | 105 + src/dummy.am | 0 src/dummy_yyunput | 5 + src/errors.pl | 166 + src/extrules.am | 43 + src/functions.c | 98 + src/grib2c.pl | 70 + src/grib_2order_packer_simple.c | 103 + src/grib_accessor.c | 544 + src/grib_accessor_class.c | 369 + src/grib_accessor_class.h | 168 + ...grib_accessor_class_abstract_long_vector.c | 133 + src/grib_accessor_class_abstract_vector.c | 132 + src/grib_accessor_class_array.c | 144 + src/grib_accessor_class_ascii.c | 267 + src/grib_accessor_class_assert.c | 146 + src/grib_accessor_class_bit.c | 198 + src/grib_accessor_class_bitmap.c | 290 + src/grib_accessor_class_bits.c | 205 + src/grib_accessor_class_bits_per_value.c | 186 + src/grib_accessor_class_box.c | 161 + src/grib_accessor_class_budgdate.c | 199 + src/grib_accessor_class_bytes.c | 169 + ...accessor_class_change_scanning_direction.c | 266 + src/grib_accessor_class_codeflag.c | 238 + src/grib_accessor_class_codetable.c | 674 + src/grib_accessor_class_codetable_title.c | 205 + src/grib_accessor_class_codetable_units.c | 205 + src/grib_accessor_class_concept.c | 275 + src/grib_accessor_class_constant.c | 158 + src/grib_accessor_class_count_file.c | 140 + src/grib_accessor_class_count_missing.c | 225 + src/grib_accessor_class_count_total.c | 142 + src/grib_accessor_class_data_2order_packing.c | 982 + ...accessor_class_data_2order_packing_count.c | 196 + src/grib_accessor_class_data_apply_bitmap.c | 359 + ...ccessor_class_data_apply_boustrophedonic.c | 334 + ..._accessor_class_data_apply_gdsnotpresent.c | 302 + ...grib_accessor_class_data_complex_packing.c | 877 + src/grib_accessor_class_data_constant_field.c | 192 + src/grib_accessor_class_data_dummy_field.c | 247 + ...ib_accessor_class_data_g1complex_packing.c | 259 + ...ta_g1second_order_constant_width_packing.c | 324 + ..._g1second_order_general_extended_packing.c | 1157 ++ ...lass_data_g1second_order_general_packing.c | 319 + ...s_data_g1second_order_row_by_row_packing.c | 424 + ...b_accessor_class_data_g1secondary_bitmap.c | 244 + ...b_accessor_class_data_g1shsimple_packing.c | 176 + ...rib_accessor_class_data_g1simple_packing.c | 343 + ...rib_accessor_class_data_g22order_packing.c | 745 + ...ib_accessor_class_data_g2complex_packing.c | 187 + ...b_accessor_class_data_g2secondary_bitmap.c | 238 + ...b_accessor_class_data_g2shsimple_packing.c | 218 + ...rib_accessor_class_data_g2simple_packing.c | 263 + ...data_g2simple_packing_with_preprocessing.c | 302 + ...rib_accessor_class_data_jpeg2000_packing.c | 550 + src/grib_accessor_class_data_png_packing.c | 679 + src/grib_accessor_class_data_raw_packing.c | 326 + ...rib_accessor_class_data_secondary_bitmap.c | 245 + src/grib_accessor_class_data_sh_packed.c | 404 + src/grib_accessor_class_data_sh_unpacked.c | 390 + ...rib_accessor_class_data_shsimple_packing.c | 179 + src/grib_accessor_class_data_simple_packing.c | 646 + src/grib_accessor_class_data_szip_packing.c | 559 + src/grib_accessor_class_decimal_precision.c | 229 + src/grib_accessor_class_dirty.c | 161 + src/grib_accessor_class_divdouble.c | 169 + src/grib_accessor_class_double.c | 224 + src/grib_accessor_class_element.c | 211 + src/grib_accessor_class_evaluate.c | 153 + src/grib_accessor_class_forward.c | 145 + ...sor_class_from_scale_factor_scaled_value.c | 184 + ...rib_accessor_class_g1_half_byte_codeflag.c | 194 + src/grib_accessor_class_g1_increment.c | 276 + src/grib_accessor_class_g1_message_length.c | 257 + src/grib_accessor_class_g1_section4_length.c | 167 + src/grib_accessor_class_g1area.c | 228 + src/grib_accessor_class_g1bitmap.c | 237 + src/grib_accessor_class_g1date.c | 298 + ...ib_accessor_class_g1day_of_the_year_date.c | 188 + ...accessor_class_g1end_of_interval_monthly.c | 235 + src/grib_accessor_class_g1fcperiod.c | 160 + src/grib_accessor_class_g1forecastmonth.c | 213 + src/grib_accessor_class_g1monthlydate.c | 164 + ...lass_g1number_of_coded_values_sh_complex.c | 207 + ...class_g1number_of_coded_values_sh_simple.c | 184 + src/grib_accessor_class_g1p1p2.c | 174 + src/grib_accessor_class_g1param.c | 181 + src/grib_accessor_class_g1step_range.c | 692 + src/grib_accessor_class_g1verificationdate.c | 183 + src/grib_accessor_class_g2_eps.c | 238 + src/grib_accessor_class_g2_mars_labeling.c | 513 + src/grib_accessor_class_g2bitmap.c | 206 + src/grib_accessor_class_g2bitmap_present.c | 171 + src/grib_accessor_class_g2date.c | 197 + src/grib_accessor_class_g2end_step.c | 370 + src/grib_accessor_class_g2grid.c | 387 + src/grib_accessor_class_g2latlon.c | 234 + src/grib_accessor_class_g2level.c | 275 + src/grib_accessor_class_g2lon.c | 176 + src/grib_accessor_class_g2step.c | 192 + src/grib_accessor_class_g2step_range.c | 255 + src/grib_accessor_class_gds_is_present.c | 206 + ...ib_accessor_class_gds_not_present_bitmap.c | 293 + src/grib_accessor_class_gen.c | 538 + src/grib_accessor_class_global_gaussian.c | 320 + src/grib_accessor_class_gts_header.c | 178 + src/grib_accessor_class_headers_only.c | 140 + src/grib_accessor_class_ibmfloat.c | 257 + src/grib_accessor_class_ieeefloat.c | 228 + src/grib_accessor_class_ifs_param.c | 213 + src/grib_accessor_class_iterator.c | 158 + src/grib_accessor_class_julian_day.c | 224 + src/grib_accessor_class_ksec1expver.c | 202 + src/grib_accessor_class_label.c | 155 + src/grib_accessor_class_laplacian.c | 271 + src/grib_accessor_class_latitudes.c | 301 + src/grib_accessor_class_latlon_increment.c | 333 + src/grib_accessor_class_latlonvalues.c | 189 + src/grib_accessor_class_library_version.c | 157 + src/grib_accessor_class_local_definition.c | 306 + src/grib_accessor_class_long.c | 276 + src/grib_accessor_class_long_vector.c | 225 + src/grib_accessor_class_longitudes.c | 295 + src/grib_accessor_class_lookup.c | 261 + src/grib_accessor_class_mars_param.c | 197 + src/grib_accessor_class_mars_step.c | 216 + src/grib_accessor_class_md5.c | 206 + src/grib_accessor_class_message.c | 186 + src/grib_accessor_class_missing.c | 213 + src/grib_accessor_class_nearest.c | 161 + ...ib_accessor_class_number_of_coded_values.c | 187 + src/grib_accessor_class_number_of_points.c | 185 + ...accessor_class_number_of_points_gaussian.c | 272 + src/grib_accessor_class_number_of_values.c | 206 + ..._class_number_of_values_data_raw_packing.c | 188 + src/grib_accessor_class_octect_number.c | 169 + src/grib_accessor_class_offset_file.c | 169 + src/grib_accessor_class_offset_values.c | 190 + src/grib_accessor_class_pad.c | 152 + src/grib_accessor_class_padding.c | 161 + src/grib_accessor_class_padto.c | 161 + src/grib_accessor_class_padtoeven.c | 170 + src/grib_accessor_class_padtomultiple.c | 158 + src/grib_accessor_class_position.c | 169 + ...rib_accessor_class_reference_value_error.c | 166 + src/grib_accessor_class_round.c | 186 + src/grib_accessor_class_scale.c | 266 + src/grib_accessor_class_scale_values.c | 189 + ...cessor_class_second_order_bits_per_value.c | 227 + src/grib_accessor_class_section.c | 221 + src/grib_accessor_class_section_length.c | 145 + src/grib_accessor_class_section_padding.c | 186 + src/grib_accessor_class_section_pointer.c | 216 + ...grib_accessor_class_select_step_template.c | 250 + src/grib_accessor_class_signed.c | 308 + src/grib_accessor_class_signed_bits.c | 271 + ...grib_accessor_class_simple_packing_error.c | 194 + src/grib_accessor_class_size.c | 145 + src/grib_accessor_class_spd.c | 275 + src/grib_accessor_class_spectral_truncation.c | 209 + src/grib_accessor_class_sprintf.c | 248 + src/grib_accessor_class_statistics.c | 285 + src/grib_accessor_class_statistics_spectral.c | 283 + src/grib_accessor_class_step_in_units.c | 274 + src/grib_accessor_class_sum.c | 212 + src/grib_accessor_class_suppressed.c | 201 + src/grib_accessor_class_time.c | 230 + src/grib_accessor_class_times.c | 215 + src/grib_accessor_class_transient.c | 124 + src/grib_accessor_class_unsigned.c | 340 + src/grib_accessor_class_unsigned_bits.c | 280 + src/grib_accessor_class_validity_date.c | 239 + src/grib_accessor_class_validity_time.c | 232 + src/grib_accessor_class_values.c | 268 + src/grib_accessor_class_variable.c | 375 + src/grib_accessor_class_vector.c | 190 + src/grib_accessor_class_when.c | 147 + src/grib_accessor_classes_hash.c | 497 + src/grib_accessor_factory.h | 168 + src/grib_accessor_factory_hash_list | 174 + src/grib_api.h | 1548 ++ src/grib_api.h.in | 10 + src/grib_api_fortran.h | 96 + src/grib_api_internal.h | 1202 ++ src/grib_api_internal.h.in | 5 + src/grib_api_prototypes.h | 1118 + src/grib_bits.c | 171 + src/grib_bits_any_endian.c | 167 + src/grib_bits_any_endian_omp.c | 137 + src/grib_bits_any_endian_simple.c | 167 + src/grib_bits_any_endian_vector.c | 134 + src/grib_bits_fast_big_endian.c | 98 + src/grib_bits_fast_big_endian_omp.c | 360 + src/grib_bits_fast_big_endian_simple.c | 306 + src/grib_bits_fast_big_endian_vector.c | 394 + src/grib_box.c | 104 + src/grib_box_class.c | 58 + src/grib_box_class.h | 4 + src/grib_box_class_gen.c | 92 + src/grib_box_class_reduced_gaussian.c | 246 + src/grib_box_class_regular_gaussian.c | 92 + src/grib_box_factory.h | 4 + src/grib_buffer.c | 268 + src/grib_compressor.c | 85 + src/grib_concept.c | 49 + src/grib_concept_index.c | 171 + src/grib_context.c | 754 + src/grib_darray.c | 72 + src/grib_date.c | 190 + src/grib_db.c | 838 + src/grib_dependency.c | 162 + src/grib_dumper.c | 199 + src/grib_dumper_class.c | 85 + src/grib_dumper_class.h | 10 + src/grib_dumper_class_c_code.c | 453 + src/grib_dumper_class_debug.c | 460 + src/grib_dumper_class_default.c | 618 + src/grib_dumper_class_keys.c | 320 + src/grib_dumper_class_serialize.c | 428 + src/grib_dumper_class_wmo.c | 560 + src/grib_dumper_factory.h | 7 + src/grib_emoslib.h | 21 + src/grib_errors.c | 110 + src/grib_errors.c.in | 42 + src/grib_errors.txt | 63 + src/grib_errors_internal.txt | 14 + src/grib_expression.c | 282 + src/grib_expression.h | 78 + src/grib_expression_class_accessor.c | 182 + src/grib_expression_class_binop.c | 190 + src/grib_expression_class_column.c | 152 + src/grib_expression_class_constant.c | 112 + src/grib_expression_class_double.c | 141 + src/grib_expression_class_functor.c | 196 + src/grib_expression_class_long.c | 140 + src/grib_expression_class_string.c | 132 + src/grib_expression_class_string_compare.c | 173 + src/grib_expression_class_true.c | 126 + src/grib_expression_class_unop.c | 166 + src/grib_fieldset.c | 829 + src/grib_filepool.c | 362 + src/grib_fortran_interface.c | 1107 + src/grib_gaussian_reduced.c | 119 + src/grib_geography.c | 116 + src/grib_handle.c | 1399 ++ src/grib_hash_keys.c | 5443 +++++ src/grib_header_compute.c | 463 + src/grib_iarray.c | 72 + src/grib_ibmfloat.c | 227 + src/grib_ieeefloat.c | 484 + src/grib_index.c | 1372 ++ src/grib_io.c | 1124 + src/grib_iterator.c | 134 + src/grib_iterator_class.c | 59 + src/grib_iterator_class.h | 10 + src/grib_iterator_class_gaussian.c | 172 + src/grib_iterator_class_gaussian_reduced.c | 208 + src/grib_iterator_class_gen.c | 130 + ...rator_class_lambert_azimuthal_equal_area.c | 288 + src/grib_iterator_class_lambert_conformal.c | 274 + src/grib_iterator_class_latlon.c | 115 + src/grib_iterator_class_latlon_reduced.c | 193 + src/grib_iterator_class_polar_stereographic.c | 279 + src/grib_iterator_class_regular.c | 185 + src/grib_iterator_factory.h | 10 + src/grib_itrie.c | 384 + src/grib_itrie_keys.c | 394 + src/grib_jasper_encoding.c | 203 + src/grib_keys_iterator.c | 219 + src/grib_lex.c | 2954 +++ src/grib_loader_from_array.c | 232 + src/grib_loader_from_file.c | 165 + src/grib_loader_from_handle.c | 256 + src/grib_memory.c | 372 + src/grib_nearest.c | 197 + src/grib_nearest_class.c | 58 + src/grib_nearest_class.h | 6 + src/grib_nearest_class_gen.c | 109 + src/grib_nearest_class_latlon_reduced.c | 355 + src/grib_nearest_class_reduced.c | 511 + src/grib_nearest_class_regular.c | 393 + src/grib_nearest_class_sh.c | 291 + src/grib_nearest_factory.h | 6 + src/grib_openjpeg_encoding.c | 220 + src/grib_parse_utils.c | 630 + src/grib_query.c | 249 + src/grib_rules.c | 41 + src/grib_scaling.c | 171 + src/grib_templates.c | 131 + src/grib_templates.h | 77 + src/grib_timer.c | 365 + src/grib_timer.c_off | 336 + src/grib_trie.c | 406 + src/grib_util.c | 1237 ++ src/grib_value.c | 1359 ++ src/grib_yacc.c | 3787 ++++ src/grib_yacc.h | 256 + src/gribl.l | 224 + src/griby.y | 700 + src/hash.c | 127 + src/jgribapi_GribFile.h | 71 + src/jgribapi_GribHandle.h | 175 + src/jgribapi_GribIterator.h | 39 + src/latlon.req | 1 + src/make_accessor_class_hash.ksh | 18 + src/make_class.pl | 389 + src/make_hash_keys.ksh | 15 + src/make_table.pl | 145 + src/md5.c | 296 + src/md5.h | 31 + src/spectral.req | 1 + templates/GRIB1 | 0 templates/GRIB1.tmpl | Bin 0 -> 107 bytes templates/GRIB2 | 0 templates/GRIB2.tmpl | Bin 0 -> 184 bytes templates/Makefile.am | 27 + templates/dummy.am | 0 templates/ifs_templates/grib1/gg_ml.tmpl | Bin 0 -> 27596 bytes templates/ifs_templates/grib1/gg_sfc.tmpl | Bin 0 -> 26860 bytes templates/ifs_templates/grib1/sh_ml.tmpl | Bin 0 -> 10094 bytes templates/ifs_templates/grib1/sh_sfc.tmpl | Bin 0 -> 9358 bytes .../ifs_templates/grib1_mlgrib2/gg_ml.tmpl | Bin 0 -> 27684 bytes .../ifs_templates/grib1_mlgrib2/gg_sfc.tmpl | Bin 0 -> 26860 bytes .../ifs_templates/grib1_mlgrib2/sh_ml.tmpl | Bin 0 -> 10146 bytes .../ifs_templates/grib1_mlgrib2/sh_sfc.tmpl | Bin 0 -> 9358 bytes templates/make_ifs_templates.sh | 108 + templates/reduced_gg_ml_grib1.tmpl | Bin 0 -> 972 bytes templates/reduced_gg_ml_grib2.tmpl | Bin 0 -> 1048 bytes templates/reduced_gg_pl_grib1.tmpl | Bin 0 -> 236 bytes templates/reduced_gg_pl_grib2.tmpl | Bin 0 -> 312 bytes templates/reduced_gg_sfc_grib1.tmpl | Bin 0 -> 236 bytes templates/reduced_gg_sfc_grib2.tmpl | Bin 0 -> 312 bytes templates/reduced_gg_sfc_jpeg_grib2.tmpl | Bin 0 -> 501 bytes templates/reduced_ll_sfc_grib1.tmpl | Bin 0 -> 40288 bytes templates/reduced_ll_sfc_grib2.tmpl | Bin 0 -> 40357 bytes templates/regular_gg_ml_grib1.tmpl | Bin 0 -> 844 bytes templates/regular_gg_ml_grib2.tmpl | Bin 0 -> 920 bytes templates/regular_gg_pl_grib1.tmpl | Bin 0 -> 108 bytes templates/regular_gg_pl_grib2.tmpl | Bin 0 -> 184 bytes templates/regular_ll_pl_grib1.tmpl | Bin 0 -> 108 bytes templates/regular_ll_pl_grib2.tmpl | Bin 0 -> 184 bytes templates/regular_ll_sfc_grib1.tmpl | Bin 0 -> 108 bytes templates/regular_ll_sfc_grib2.tmpl | Bin 0 -> 184 bytes templates/sh_ml_grib1.tmpl | Bin 0 -> 10200 bytes templates/sh_ml_grib2.tmpl | Bin 0 -> 10134 bytes templates/sh_pl_grib1.tmpl | Bin 0 -> 9360 bytes templates/sh_pl_grib2.tmpl | Bin 0 -> 9398 bytes tests.ecmwf/Makefile | 82 + tests.ecmwf/chemical.c | 257 + tests.ecmwf/compare.c | 822 + tests.ecmwf/compatibility.c | 57 + tests.ecmwf/compatibility.test | 5 + tests.ecmwf/compatibility_ex.c | 78 + tests.ecmwf/concept | 33 + tests.ecmwf/concept.test | 5 + tests.ecmwf/deserialize.c | 52 + tests.ecmwf/dump.test | 5 + tests.ecmwf/filter | 9 + tests.ecmwf/filter.test | 5 + tests.ecmwf/grib1to2.c | 98 + tests.ecmwf/grib1to2.test | 5 + tests.ecmwf/grib_ls | 19 + tests.ecmwf/grib_ls.test | 5 + tests.ecmwf/gribex | 26 + tests.ecmwf/gribex.test | 5 + tests.ecmwf/memory.c | 223 + tests.ecmwf/memory.test | 14 + tests.ecmwf/packing.c | 162 + tests.ecmwf/packing.test | 5 + tests.ecmwf/request.c | 223 + tests.ecmwf/sample.c | 169 + tests.ecmwf/sample1.c | 58 + tests.ecmwf/serialize.c | 66 + tests.ecmwf/set | 14 + tests.ecmwf/set.test | 5 + tests.ecmwf/set1to2 | 14 + tests.ecmwf/set1to2.test | 5 + tests.ecmwf/skip.t | 4 + tests.ecmwf/test.h | 20 + tests.ecmwf/test.ksh | 51 + tests.ecmwf/tests | 5 + tests.ecmwf/values.c | 95 + tests.ecmwf/values.test | 5 + tests/CMakeLists.txt | 0 tests/Makefile.am | 40 + tests/badgrib.sh | 17 + tests/bitmap.sh | 63 + tests/bits.c | 322 + tests/bitsPerValue.sh | 35 + tests/bpv_limit.c | 129 + tests/bpv_limit.sh | 22 + tests/budg.sh | 17 + tests/change_packing.sh | 58 + tests/change_scanning.sh | 78 + tests/compare.sh | 24 + tests/concept.sh | 34 + tests/convert.sh | 49 + tests/debug.sh | 20 + tests/decimalPrecision.sh | 40 + tests/decode.c | 10 + tests/definitions.sh | 22 + tests/double_cmp.c | 81 + tests/double_cmp.sh | 25 + tests/filter.sh | 62 + tests/filter_rules | 69 + tests/fortran_interface.sh | 36 + tests/gauss_sub.c | 138 + tests/get_fail.sh | 25 + tests/grib1to2.sh | 66 + tests/grib2to1.sh | 56 + tests/grib_to_netcdf.sh | 68 + tests/gribex_perf.c | 442 + tests/gridType.sh | 43 + tests/ibm.c | 37 + tests/ieee.c | 80 + tests/ieee.sh | 75 + tests/include.sh | 54 + tests/index.c | 140 + tests/index.sh | 31 + tests/index_orderby.c | 67 + tests/iterator.sh | 36 + tests/jpeg.sh | 42 + tests/jpeg_perf.c | 247 + tests/julian.c | 158 + tests/julian.sh | 17 + tests/keys | 1439 ++ tests/lamb_az_eq_area.ref | 101 + tests/lamb_az_eq_area.sh | 57 + tests/laplacian.c | 287 + tests/largefile.c | 71 + tests/level.sh | 63 + tests/list.sh | 53 + tests/list_all_keys.ksh | 31 + tests/local.sh | 95 + tests/ls.sh | 76 + tests/make_hash.ksh | 11 + tests/mf.rules | 125 + tests/migration_ml.sh | 36 + tests/missing.sh | 40 + tests/multi.sh | 48 + tests/multi_from_message.c | 82 + tests/multi_from_message.sh | 38 + tests/pack_unpack.c | 276 + tests/packing.c | 585 + tests/packing_check.c | 292 + tests/padding.sh | 53 + tests/png_perf.c | 247 + tests/read_any.c | 79 + tests/read_any.sh | 35 + tests/read_index.c | 132 + tests/readvalues.F | 152 + tests/second_order.sh | 84 + tests/set.sh | 60 + tests/so_perf.c | 505 + tests/statistics.sh | 40 + tests/step.sh | 76 + tests/tigge.sh | 43 + tests/tigge_conversions.sh | 47 + tests/timing.c | 325 + tests/timing.sh | 1 + tests/tiny.sh | 22 + tests/values_to_ascii.c | 84 + tigge/CMakeLists.txt | 0 tigge/Makefile.am | 16 + tigge/jma.pl | 108 + tigge/kma.pl | 106 + tigge/ncep.pl | 166 + tigge/ncep.rules | 66 + tigge/reprocess_ncep.ksh | 211 + tigge/tigge_accumulations.c | 277 + tigge/tigge_check.c | 1090 + tigge/tigge_check.h | 677 + tigge/tigge_name.c | 267 + tigge/tigge_split.c | 254 + tigge/tools/convert.pm | 113 + tools/CMakeLists.txt | 35 + tools/Makefile.am | 78 + tools/all_keys.c | 36 + tools/big2gribex.c | 83 + tools/compile.c | 113 + tools/dump.c | 245 + tools/dumpload.c | 58 + tools/filter_rules | 130 + tools/gaussian.c | 43 + tools/gg_sub_area_check.c | 131 + tools/grib1to2 | 59 + tools/grib1to2.txt | 59 + tools/grib2ppm.c | 83 + tools/grib_2_request.c | 82 + tools/grib_add.c | 111 + tools/grib_cmp.c | 108 + tools/grib_compare.c | 1050 + tools/grib_compare.sh | 280 + tools/grib_convert.c | 206 + tools/grib_convert.dox | 38 + tools/grib_convert.sh | 18 + tools/grib_copy.c | 125 + tools/grib_copy.dox | 57 + tools/grib_copy.sh | 24 + tools/grib_corruption_check.c | 48 + tools/grib_count.c | 59 + tools/grib_debug.c | 79 + tools/grib_debug.dox | 626 + tools/grib_debug.sh | 22 + tools/grib_diff.c | 447 + tools/grib_distance.c | 166 + tools/grib_dump.c | 154 + tools/grib_dump.dox | 246 + tools/grib_dump.sh | 24 + tools/grib_error.c | 263 + tools/grib_filter.c | 109 + tools/grib_filter.dox | 128 + tools/grib_filter.h | 70 + tools/grib_filter.sh | 131 + tools/grib_filtery.y | 115 + tools/grib_gen.c | 90 + tools/grib_get.c | 211 + tools/grib_get.dox | 59 + tools/grib_get.sh | 16 + tools/grib_get_data.c | 273 + tools/grib_get_data.dox | 45 + tools/grib_get_data.sh | 21 + tools/grib_histogram.c | 153 + tools/grib_index_build.c | 139 + tools/grib_index_build.dox | 28 + tools/grib_index_build.sh | 14 + tools/grib_info.c | 120 + tools/grib_keys.c | 176 + tools/grib_keys.sh | 15 + tools/grib_ls.c | 326 + tools/grib_ls.dox | 89 + tools/grib_ls.sh | 35 + tools/grib_moments.c | 134 + tools/grib_nearest_land.c | 110 + tools/grib_options.c | 427 + tools/grib_packing.c | 151 + tools/grib_points.c | 195 + tools/grib_repair.c | 109 + tools/grib_set.c | 165 + tools/grib_set.dox | 83 + tools/grib_set.sh | 48 + tools/grib_split | 160 + tools/grib_to_netcdf.c | 3911 ++++ tools/grib_tools.c | 945 + tools/grib_tools.h | 193 + tools/list_keys.c | 73 + tools/load.c | 192 + tools/load.h | 24 + tools/loadl.l | 82 + tools/loady.y | 72 + tools/make_dox.ksh | 37 + tools/mars_request.c | 61 + tools/mf.rules | 125 + tools/parser.c | 35 + tools/test.c | 35 + tools/tigge_check.filter | 114 + tools/tools.dox | 27 + tools/tools_head.dox | 16 + tools/xref.c | 34 + tools/xref.pl | 339 + use/sh.grib_api | 123 + use/use.grib_api | 136 + version.sh | 12 + 4745 files changed, 508491 insertions(+) create mode 100644 .gitignore create mode 100755 AUTHORS create mode 100644 CMakeLists.txt create mode 120000 COPYING create mode 100644 ChangeLog create mode 100755 INSTALL create mode 100755 LICENSE create mode 100644 Makefile.am create mode 100644 NEWS create mode 100644 NOTICE create mode 100755 README create mode 100644 VERSION.cmake create mode 100644 acinclude.m4 create mode 100755 autogen.sh create mode 100644 concepts/grib1_short_name create mode 100755 config/config.guess create mode 100755 config/config.sub create mode 100755 config/depcomp create mode 100755 config/install-sh create mode 100755 config/ltmain.sh create mode 100755 config/missing create mode 100755 configure.ac create mode 100644 definitions/CMakeLists.txt create mode 100644 definitions/Makefile.am create mode 100644 definitions/boot.def create mode 100644 definitions/budg/boot.def create mode 100644 definitions/budg/mars_labeling.def create mode 100644 definitions/budg/section.1.def create mode 100644 definitions/budg/section.4.def create mode 100644 definitions/bufr/boot.def create mode 100644 definitions/bufr/old_section.1.def create mode 100644 definitions/bufr/rdb_key.def create mode 100644 definitions/bufr/section.0.def create mode 100644 definitions/bufr/section.1.def create mode 100644 definitions/bufr/section.2.def create mode 100644 definitions/bufr/section.3.def create mode 100644 definitions/bufr/section.4.def create mode 100644 definitions/bufr/section.5.def create mode 100644 definitions/bufr/section1_flags.table create mode 100644 definitions/bufr/section3_flags.table create mode 100644 definitions/cdf/boot.def create mode 100644 definitions/common/statistics_grid.def create mode 100644 definitions/common/statistics_spectral.def create mode 100755 definitions/create_def.pl create mode 100755 definitions/create_mars_struct.pl create mode 100755 definitions/create_tables.pl create mode 100644 definitions/dummy.am create mode 100644 definitions/empty_template.def create mode 100644 definitions/extrules.am create mode 100644 definitions/grib1/0.ecmf.table create mode 100644 definitions/grib1/0.table create mode 100644 definitions/grib1/1.table create mode 100644 definitions/grib1/10.table create mode 100644 definitions/grib1/11-2.table create mode 100644 definitions/grib1/11.table create mode 100644 definitions/grib1/12.table create mode 100644 definitions/grib1/13.table create mode 100644 definitions/grib1/2.0.1.table create mode 100644 definitions/grib1/2.0.2.table create mode 100644 definitions/grib1/2.0.3.table create mode 100644 definitions/grib1/2.128.table create mode 100644 definitions/grib1/2.253.128.table create mode 100644 definitions/grib1/2.46.254.table create mode 100644 definitions/grib1/2.98.128.table create mode 100644 definitions/grib1/2.98.129.table create mode 100644 definitions/grib1/2.98.130.table create mode 100644 definitions/grib1/2.98.131.table create mode 100644 definitions/grib1/2.98.132.table create mode 100644 definitions/grib1/2.98.133.table create mode 100644 definitions/grib1/2.98.140.table create mode 100644 definitions/grib1/2.98.150.table create mode 100644 definitions/grib1/2.98.151.table create mode 100644 definitions/grib1/2.98.160.table create mode 100644 definitions/grib1/2.98.162.table create mode 100644 definitions/grib1/2.98.170.table create mode 100644 definitions/grib1/2.98.171.table create mode 100644 definitions/grib1/2.98.172.table create mode 100644 definitions/grib1/2.98.173.table create mode 100644 definitions/grib1/2.98.174.table create mode 100644 definitions/grib1/2.98.175.table create mode 100644 definitions/grib1/2.98.180.table create mode 100644 definitions/grib1/2.98.190.table create mode 100644 definitions/grib1/2.98.200.table create mode 100644 definitions/grib1/2.98.201.table create mode 100644 definitions/grib1/2.98.210.table create mode 100644 definitions/grib1/2.98.211.table create mode 100644 definitions/grib1/2.98.220.table create mode 100644 definitions/grib1/2.98.228.table create mode 100644 definitions/grib1/2.98.230.table create mode 100644 definitions/grib1/2.table create mode 100644 definitions/grib1/3.table create mode 100644 definitions/grib1/4.table create mode 100644 definitions/grib1/5.table create mode 100644 definitions/grib1/6.table create mode 100644 definitions/grib1/7.table create mode 100644 definitions/grib1/8.table create mode 100644 definitions/grib1/9.table create mode 100644 definitions/grib1/Makefile.am create mode 100644 definitions/grib1/boot.def create mode 100644 definitions/grib1/cfName.def create mode 100644 definitions/grib1/cluster_domain.def create mode 100644 definitions/grib1/data.grid_ieee.def create mode 120000 definitions/grib1/data.grid_jpeg.def create mode 100644 definitions/grib1/data.grid_second_order.def create mode 120000 definitions/grib1/data.grid_second_order_SPD1.def create mode 120000 definitions/grib1/data.grid_second_order_SPD2.def create mode 120000 definitions/grib1/data.grid_second_order_SPD3.def create mode 100644 definitions/grib1/data.grid_second_order_constant_width.def create mode 100644 definitions/grib1/data.grid_second_order_general_grib1.def create mode 120000 definitions/grib1/data.grid_second_order_no_SPD.def create mode 100644 definitions/grib1/data.grid_second_order_row_by_row.def create mode 100644 definitions/grib1/data.grid_simple.def create mode 100644 definitions/grib1/data.grid_simple_matrix.def create mode 100644 definitions/grib1/data.spectral_complex.def create mode 100644 definitions/grib1/data.spectral_ieee.def create mode 100644 definitions/grib1/data.spectral_simple.def create mode 100644 definitions/grib1/gds_not_present_bitmap.def create mode 100755 definitions/grib1/grid.192.78.3.10.table create mode 100755 definitions/grib1/grid.192.78.3.9.table create mode 100644 definitions/grib1/grid_21.def create mode 100644 definitions/grib1/grid_22.def create mode 100644 definitions/grib1/grid_23.def create mode 100644 definitions/grib1/grid_24.def create mode 100644 definitions/grib1/grid_25.def create mode 100644 definitions/grib1/grid_26.def create mode 100644 definitions/grib1/grid_61.def create mode 100644 definitions/grib1/grid_62.def create mode 100644 definitions/grib1/grid_63.def create mode 100644 definitions/grib1/grid_64.def create mode 100644 definitions/grib1/grid_definition_0.def create mode 100644 definitions/grib1/grid_definition_1.def create mode 100644 definitions/grib1/grid_definition_10.def create mode 100644 definitions/grib1/grid_definition_13.def create mode 100644 definitions/grib1/grid_definition_14.def create mode 100755 definitions/grib1/grid_definition_192.78.def create mode 100644 definitions/grib1/grid_definition_192.98.def create mode 100644 definitions/grib1/grid_definition_193.98.def create mode 100644 definitions/grib1/grid_definition_20.def create mode 100644 definitions/grib1/grid_definition_24.def create mode 100644 definitions/grib1/grid_definition_3.def create mode 100644 definitions/grib1/grid_definition_30.def create mode 100644 definitions/grib1/grid_definition_34.def create mode 100644 definitions/grib1/grid_definition_4.def create mode 100644 definitions/grib1/grid_definition_5.def create mode 100644 definitions/grib1/grid_definition_50.def create mode 100644 definitions/grib1/grid_definition_60.def create mode 100644 definitions/grib1/grid_definition_70.def create mode 100644 definitions/grib1/grid_definition_8.def create mode 100644 definitions/grib1/grid_definition_80.def create mode 100644 definitions/grib1/grid_definition_90.def create mode 100644 definitions/grib1/grid_definition_gaussian.def create mode 100644 definitions/grib1/grid_definition_lambert.def create mode 100644 definitions/grib1/grid_definition_latlon.def create mode 100644 definitions/grib1/grid_definition_spherical_harmonics.def create mode 100644 definitions/grib1/grid_first_last_resandcomp.def create mode 100644 definitions/grib1/grid_rotation.def create mode 100644 definitions/grib1/grid_stretching.def create mode 100644 definitions/grib1/local.1.def create mode 100644 definitions/grib1/local.13.table create mode 100644 definitions/grib1/local.214.1.def create mode 100644 definitions/grib1/local.214.244.def create mode 100644 definitions/grib1/local.214.245.def create mode 100644 definitions/grib1/local.214.def create mode 100644 definitions/grib1/local.253.def create mode 100644 definitions/grib1/local.254.def create mode 100644 definitions/grib1/local.34.def create mode 100644 definitions/grib1/local.46.def create mode 100644 definitions/grib1/local.54.def create mode 100644 definitions/grib1/local.7.1.def create mode 100644 definitions/grib1/local.7.def create mode 100644 definitions/grib1/local.78.def create mode 100644 definitions/grib1/local.80.def create mode 100644 definitions/grib1/local.96.def create mode 100644 definitions/grib1/local.98.1.def create mode 100644 definitions/grib1/local.98.10.def create mode 100644 definitions/grib1/local.98.11.def create mode 100644 definitions/grib1/local.98.13.def create mode 100644 definitions/grib1/local.98.14.def create mode 100644 definitions/grib1/local.98.15.def create mode 100644 definitions/grib1/local.98.16.def create mode 100644 definitions/grib1/local.98.17.def create mode 100644 definitions/grib1/local.98.18.def create mode 100644 definitions/grib1/local.98.19.def create mode 100644 definitions/grib1/local.98.190.def create mode 100644 definitions/grib1/local.98.191.def create mode 100644 definitions/grib1/local.98.192.def create mode 100644 definitions/grib1/local.98.2.def create mode 100644 definitions/grib1/local.98.20.def create mode 100644 definitions/grib1/local.98.21.def create mode 100644 definitions/grib1/local.98.218.def create mode 100644 definitions/grib1/local.98.23.def create mode 100644 definitions/grib1/local.98.24.def create mode 120000 definitions/grib1/local.98.244.def create mode 120000 definitions/grib1/local.98.245.def create mode 100644 definitions/grib1/local.98.25.def create mode 100644 definitions/grib1/local.98.26.def create mode 100644 definitions/grib1/local.98.27.def create mode 100644 definitions/grib1/local.98.28.def create mode 100644 definitions/grib1/local.98.29.def create mode 100644 definitions/grib1/local.98.3.def create mode 100644 definitions/grib1/local.98.30.def create mode 100644 definitions/grib1/local.98.31.def create mode 100644 definitions/grib1/local.98.32.def create mode 100644 definitions/grib1/local.98.33.def create mode 100644 definitions/grib1/local.98.35.def create mode 100644 definitions/grib1/local.98.36.def create mode 100644 definitions/grib1/local.98.37.def create mode 100644 definitions/grib1/local.98.38.def create mode 100644 definitions/grib1/local.98.39.def create mode 100644 definitions/grib1/local.98.4.def create mode 100644 definitions/grib1/local.98.40.def create mode 100644 definitions/grib1/local.98.5.def create mode 100644 definitions/grib1/local.98.50.def create mode 100644 definitions/grib1/local.98.6.def create mode 100644 definitions/grib1/local.98.7.def create mode 100644 definitions/grib1/local.98.8.def create mode 100644 definitions/grib1/local.98.9.def create mode 100644 definitions/grib1/local.98.def create mode 100644 definitions/grib1/localConcepts/ammc/name.def create mode 100644 definitions/grib1/localConcepts/ammc/paramId.def create mode 100644 definitions/grib1/localConcepts/ammc/shortName.def create mode 100644 definitions/grib1/localConcepts/ammc/units.def create mode 100644 definitions/grib1/localConcepts/cnmc/name.def create mode 100644 definitions/grib1/localConcepts/cnmc/paramId.def create mode 100644 definitions/grib1/localConcepts/cnmc/shortName.def create mode 100644 definitions/grib1/localConcepts/cnmc/units.def create mode 100644 definitions/grib1/localConcepts/ecmf/cfName.def create mode 100644 definitions/grib1/localConcepts/ecmf/name.def create mode 100644 definitions/grib1/localConcepts/ecmf/paramId.def create mode 100644 definitions/grib1/localConcepts/ecmf/shortName.def create mode 100644 definitions/grib1/localConcepts/ecmf/units.def create mode 100644 definitions/grib1/localConcepts/edzw/name.def create mode 100644 definitions/grib1/localConcepts/edzw/paramId.def create mode 100644 definitions/grib1/localConcepts/edzw/shortName.def create mode 100644 definitions/grib1/localConcepts/edzw/units.def create mode 100644 definitions/grib1/localConcepts/lfpw/name.def create mode 100644 definitions/grib1/localConcepts/lfpw/paramId.def create mode 100644 definitions/grib1/localConcepts/lfpw/shortName.def create mode 100644 definitions/grib1/localConcepts/lfpw/units.def create mode 100644 definitions/grib1/localConcepts/sbsj/name.def create mode 100644 definitions/grib1/localConcepts/sbsj/paramId.def create mode 100644 definitions/grib1/localConcepts/sbsj/shortName.def create mode 100644 definitions/grib1/localConcepts/sbsj/units.def create mode 100644 definitions/grib1/localDefinitionNumber.96.table create mode 100644 definitions/grib1/localDefinitionNumber.98.table create mode 100644 definitions/grib1/local_no_mars.98.1.def create mode 100644 definitions/grib1/local_no_mars.98.24.def create mode 100644 definitions/grib1/ls.def create mode 100644 definitions/grib1/mars_labeling.23.def create mode 100644 definitions/grib1/mars_labeling.4.def create mode 100644 definitions/grib1/mars_labeling.def create mode 100644 definitions/grib1/name.def create mode 100644 definitions/grib1/ocean.1.table create mode 100755 definitions/grib1/param.pl create mode 100644 definitions/grib1/paramId.def create mode 100644 definitions/grib1/precision.table create mode 100644 definitions/grib1/predefined_grid.def create mode 100644 definitions/grib1/regimes.table create mode 100644 definitions/grib1/resolution_flags.def create mode 100644 definitions/grib1/scanning_mode.def create mode 100644 definitions/grib1/section.0.def create mode 100644 definitions/grib1/section.1.def create mode 100644 definitions/grib1/section.2.def create mode 100644 definitions/grib1/section.3.def create mode 100644 definitions/grib1/section.4.def create mode 100644 definitions/grib1/section.5.def create mode 100644 definitions/grib1/sensitive_area_domain.def create mode 100644 definitions/grib1/shortName.def create mode 100644 definitions/grib1/tube_domain.def create mode 100644 definitions/grib1/units.def create mode 100644 definitions/grib2/boot.def create mode 100644 definitions/grib2/boot_multifield.def create mode 100644 definitions/grib2/cfName.def create mode 100644 definitions/grib2/d create mode 100644 definitions/grib2/diff.out create mode 100644 definitions/grib2/dimension.0.table create mode 100644 definitions/grib2/dimensionTableNumber.table create mode 100644 definitions/grib2/dimensionType.table create mode 100644 definitions/grib2/grib2LocalSectionNumber.98.table create mode 100644 definitions/grib2/local.98.0.def create mode 100644 definitions/grib2/local.98.1.def create mode 100644 definitions/grib2/local.98.11.def create mode 100644 definitions/grib2/local.98.15.def create mode 100644 definitions/grib2/local.98.16.def create mode 100644 definitions/grib2/local.98.18.def create mode 100644 definitions/grib2/local.98.20.def create mode 100644 definitions/grib2/local.98.21.def create mode 100644 definitions/grib2/local.98.24.def create mode 100644 definitions/grib2/local.98.25.def create mode 100644 definitions/grib2/local.98.26.def create mode 100644 definitions/grib2/local.98.28.def create mode 100644 definitions/grib2/local.98.30.def create mode 100644 definitions/grib2/local.98.300.def create mode 100644 definitions/grib2/local.98.36.def create mode 100644 definitions/grib2/local.98.38.def create mode 100644 definitions/grib2/local.98.39.def create mode 100755 definitions/grib2/local.98.500.def create mode 100644 definitions/grib2/local.98.7.def create mode 100644 definitions/grib2/local.98.9.def create mode 100644 definitions/grib2/local.98.def create mode 100644 definitions/grib2/local.tigge.1.def create mode 100644 definitions/grib2/local/1098/2.1.table create mode 100644 definitions/grib2/local/1098/centres.table create mode 100644 definitions/grib2/local/1098/models.table create mode 100644 definitions/grib2/local/1098/template.2.0.def create mode 100644 definitions/grib2/local/1098/template.2.0.def~ create mode 100644 definitions/grib2/local/2.0.table create mode 100644 definitions/grib2/localConcepts/cnmc/name.def create mode 100644 definitions/grib2/localConcepts/cnmc/paramId.def create mode 100644 definitions/grib2/localConcepts/cnmc/shortName.def create mode 100644 definitions/grib2/localConcepts/cnmc/units.def create mode 100644 definitions/grib2/localConcepts/ecmf/cfName.def create mode 100644 definitions/grib2/localConcepts/ecmf/name.def create mode 100644 definitions/grib2/localConcepts/ecmf/paramId.def create mode 100644 definitions/grib2/localConcepts/ecmf/shortName.def create mode 100644 definitions/grib2/localConcepts/ecmf/units.def create mode 100644 definitions/grib2/localConcepts/edzw/name.def create mode 100644 definitions/grib2/localConcepts/edzw/paramId.def create mode 100644 definitions/grib2/localConcepts/edzw/shortName.def create mode 100644 definitions/grib2/localConcepts/edzw/units.def create mode 100644 definitions/grib2/localConcepts/kwbc/name.def create mode 100644 definitions/grib2/localConcepts/kwbc/paramId.def create mode 100644 definitions/grib2/localConcepts/kwbc/shortName.def create mode 100644 definitions/grib2/localConcepts/kwbc/units.def create mode 100644 definitions/grib2/localConcepts/lfpw/name.def create mode 100644 definitions/grib2/localConcepts/lfpw/paramId.def create mode 100644 definitions/grib2/localConcepts/lfpw/shortName.def create mode 100644 definitions/grib2/localConcepts/lfpw/units.def create mode 100644 definitions/grib2/localConcepts/lfpw1/name.def create mode 100644 definitions/grib2/localConcepts/lfpw1/paramId.def create mode 100644 definitions/grib2/localConcepts/lfpw1/shortName.def create mode 100644 definitions/grib2/localConcepts/lfpw1/units.def create mode 100644 definitions/grib2/ls.def create mode 100644 definitions/grib2/mars_labeling.def create mode 100644 definitions/grib2/meta.def create mode 100644 definitions/grib2/name.def create mode 100644 definitions/grib2/paramId.def create mode 100644 definitions/grib2/parameters.def create mode 100644 definitions/grib2/products_0.def create mode 100644 definitions/grib2/products_1.def create mode 100644 definitions/grib2/products_2.def create mode 100644 definitions/grib2/products_3.def create mode 100644 definitions/grib2/products_4.def create mode 100644 definitions/grib2/products_5.def create mode 100644 definitions/grib2/rules.def create mode 100644 definitions/grib2/section.0.def create mode 100644 definitions/grib2/section.1.def create mode 100644 definitions/grib2/section.2.def create mode 100644 definitions/grib2/section.3.def create mode 100644 definitions/grib2/section.4.def create mode 100644 definitions/grib2/section.5.def create mode 100644 definitions/grib2/section.6.def create mode 100644 definitions/grib2/section.7.def create mode 100644 definitions/grib2/section.8.def create mode 100644 definitions/grib2/sections.def create mode 100644 definitions/grib2/shortName.def create mode 100644 definitions/grib2/tables/0.0.table create mode 100644 definitions/grib2/tables/0/0.0.table create mode 100644 definitions/grib2/tables/0/1.0.table create mode 100644 definitions/grib2/tables/0/1.1.table create mode 100644 definitions/grib2/tables/0/1.2.table create mode 100644 definitions/grib2/tables/0/1.3.table create mode 100644 definitions/grib2/tables/0/1.4.table create mode 100644 definitions/grib2/tables/0/3.0.table create mode 100644 definitions/grib2/tables/0/3.1.table create mode 100644 definitions/grib2/tables/0/3.10.table create mode 100644 definitions/grib2/tables/0/3.11.table create mode 100644 definitions/grib2/tables/0/3.15.table create mode 100644 definitions/grib2/tables/0/3.2.table create mode 100644 definitions/grib2/tables/0/3.20.table create mode 100644 definitions/grib2/tables/0/3.21.table create mode 100644 definitions/grib2/tables/0/3.3.table create mode 100644 definitions/grib2/tables/0/3.4.table create mode 100644 definitions/grib2/tables/0/3.5.table create mode 100644 definitions/grib2/tables/0/3.6.table create mode 100644 definitions/grib2/tables/0/3.7.table create mode 100644 definitions/grib2/tables/0/3.8.table create mode 100644 definitions/grib2/tables/0/3.9.table create mode 100644 definitions/grib2/tables/0/4.0.table create mode 100644 definitions/grib2/tables/0/4.1.0.table create mode 100644 definitions/grib2/tables/0/4.1.1.table create mode 100644 definitions/grib2/tables/0/4.1.10.table create mode 100644 definitions/grib2/tables/0/4.1.2.table create mode 100644 definitions/grib2/tables/0/4.1.3.table create mode 100644 definitions/grib2/tables/0/4.1.table create mode 100644 definitions/grib2/tables/0/4.10.table create mode 100644 definitions/grib2/tables/0/4.11.table create mode 100644 definitions/grib2/tables/0/4.12.table create mode 100644 definitions/grib2/tables/0/4.13.table create mode 100644 definitions/grib2/tables/0/4.14.table create mode 100644 definitions/grib2/tables/0/4.15.table create mode 100644 definitions/grib2/tables/0/4.151.table create mode 100644 definitions/grib2/tables/0/4.2.0.0.table create mode 100644 definitions/grib2/tables/0/4.2.0.1.table create mode 100644 definitions/grib2/tables/0/4.2.0.13.table create mode 100644 definitions/grib2/tables/0/4.2.0.14.table create mode 100644 definitions/grib2/tables/0/4.2.0.15.table create mode 100644 definitions/grib2/tables/0/4.2.0.18.table create mode 100644 definitions/grib2/tables/0/4.2.0.19.table create mode 100644 definitions/grib2/tables/0/4.2.0.190.table create mode 100644 definitions/grib2/tables/0/4.2.0.191.table create mode 100644 definitions/grib2/tables/0/4.2.0.2.table create mode 100644 definitions/grib2/tables/0/4.2.0.20.table create mode 100644 definitions/grib2/tables/0/4.2.0.3.table create mode 100644 definitions/grib2/tables/0/4.2.0.4.table create mode 100644 definitions/grib2/tables/0/4.2.0.5.table create mode 100644 definitions/grib2/tables/0/4.2.0.6.table create mode 100644 definitions/grib2/tables/0/4.2.0.7.table create mode 100644 definitions/grib2/tables/0/4.2.1.0.table create mode 100644 definitions/grib2/tables/0/4.2.1.1.table create mode 100644 definitions/grib2/tables/0/4.2.10.0.table create mode 100644 definitions/grib2/tables/0/4.2.10.1.table create mode 100644 definitions/grib2/tables/0/4.2.10.2.table create mode 100644 definitions/grib2/tables/0/4.2.10.3.table create mode 100644 definitions/grib2/tables/0/4.2.10.4.table create mode 100644 definitions/grib2/tables/0/4.2.2.0.table create mode 100644 definitions/grib2/tables/0/4.2.2.3.table create mode 100644 definitions/grib2/tables/0/4.2.3.0.table create mode 100644 definitions/grib2/tables/0/4.2.3.1.table create mode 100644 definitions/grib2/tables/0/4.2.table create mode 100644 definitions/grib2/tables/0/4.201.table create mode 100644 definitions/grib2/tables/0/4.202.table create mode 100644 definitions/grib2/tables/0/4.203.table create mode 100644 definitions/grib2/tables/0/4.204.table create mode 100644 definitions/grib2/tables/0/4.205.table create mode 100644 definitions/grib2/tables/0/4.206.table create mode 100644 definitions/grib2/tables/0/4.207.table create mode 100644 definitions/grib2/tables/0/4.208.table create mode 100644 definitions/grib2/tables/0/4.209.table create mode 100644 definitions/grib2/tables/0/4.210.table create mode 100644 definitions/grib2/tables/0/4.211.table create mode 100644 definitions/grib2/tables/0/4.212.table create mode 100644 definitions/grib2/tables/0/4.213.table create mode 100644 definitions/grib2/tables/0/4.215.table create mode 100644 definitions/grib2/tables/0/4.216.table create mode 100644 definitions/grib2/tables/0/4.217.table create mode 100644 definitions/grib2/tables/0/4.220.table create mode 100644 definitions/grib2/tables/0/4.221.table create mode 100644 definitions/grib2/tables/0/4.230.table create mode 100644 definitions/grib2/tables/0/4.3.table create mode 100644 definitions/grib2/tables/0/4.4.table create mode 100644 definitions/grib2/tables/0/4.5.table create mode 100644 definitions/grib2/tables/0/4.6.table create mode 100644 definitions/grib2/tables/0/4.7.table create mode 100644 definitions/grib2/tables/0/4.8.table create mode 100644 definitions/grib2/tables/0/4.9.table create mode 100644 definitions/grib2/tables/0/4.91.table create mode 100644 definitions/grib2/tables/0/5.0.table create mode 100644 definitions/grib2/tables/0/5.1.table create mode 100644 definitions/grib2/tables/0/5.2.table create mode 100644 definitions/grib2/tables/0/5.3.table create mode 100644 definitions/grib2/tables/0/5.4.table create mode 100644 definitions/grib2/tables/0/5.40.table create mode 100644 definitions/grib2/tables/0/5.40000.table create mode 100644 definitions/grib2/tables/0/5.5.table create mode 100644 definitions/grib2/tables/0/5.6.table create mode 100644 definitions/grib2/tables/0/5.7.table create mode 100644 definitions/grib2/tables/0/5.8.table create mode 100644 definitions/grib2/tables/0/5.9.table create mode 100644 definitions/grib2/tables/0/6.0.table create mode 100644 definitions/grib2/tables/0/stepType.table create mode 100644 definitions/grib2/tables/1.0.table create mode 100644 definitions/grib2/tables/1/0.0.table create mode 100644 definitions/grib2/tables/1/1.0.table create mode 100644 definitions/grib2/tables/1/1.1.table create mode 100644 definitions/grib2/tables/1/1.2.table create mode 100644 definitions/grib2/tables/1/1.3.table create mode 100644 definitions/grib2/tables/1/1.4.table create mode 100644 definitions/grib2/tables/1/3.0.table create mode 100644 definitions/grib2/tables/1/3.1.table create mode 100644 definitions/grib2/tables/1/3.10.table create mode 100644 definitions/grib2/tables/1/3.11.table create mode 100644 definitions/grib2/tables/1/3.15.table create mode 100644 definitions/grib2/tables/1/3.2.table create mode 100644 definitions/grib2/tables/1/3.20.table create mode 100644 definitions/grib2/tables/1/3.21.table create mode 100644 definitions/grib2/tables/1/3.3.table create mode 100644 definitions/grib2/tables/1/3.4.table create mode 100644 definitions/grib2/tables/1/3.5.table create mode 100644 definitions/grib2/tables/1/3.6.table create mode 100644 definitions/grib2/tables/1/3.7.table create mode 100644 definitions/grib2/tables/1/3.8.table create mode 100644 definitions/grib2/tables/1/3.9.table create mode 100644 definitions/grib2/tables/1/4.0.table create mode 100644 definitions/grib2/tables/1/4.1.0.table create mode 100644 definitions/grib2/tables/1/4.1.1.table create mode 100644 definitions/grib2/tables/1/4.1.10.table create mode 100644 definitions/grib2/tables/1/4.1.2.table create mode 100644 definitions/grib2/tables/1/4.1.3.table create mode 100644 definitions/grib2/tables/1/4.1.table create mode 100644 definitions/grib2/tables/1/4.10.table create mode 100644 definitions/grib2/tables/1/4.11.table create mode 100644 definitions/grib2/tables/1/4.12.table create mode 100644 definitions/grib2/tables/1/4.13.table create mode 100644 definitions/grib2/tables/1/4.14.table create mode 100644 definitions/grib2/tables/1/4.15.table create mode 100644 definitions/grib2/tables/1/4.151.table create mode 100644 definitions/grib2/tables/1/4.2.0.0.table create mode 100644 definitions/grib2/tables/1/4.2.0.1.table create mode 100644 definitions/grib2/tables/1/4.2.0.13.table create mode 100644 definitions/grib2/tables/1/4.2.0.14.table create mode 100644 definitions/grib2/tables/1/4.2.0.15.table create mode 100644 definitions/grib2/tables/1/4.2.0.18.table create mode 100644 definitions/grib2/tables/1/4.2.0.19.table create mode 100644 definitions/grib2/tables/1/4.2.0.190.table create mode 100644 definitions/grib2/tables/1/4.2.0.191.table create mode 100644 definitions/grib2/tables/1/4.2.0.2.table create mode 100644 definitions/grib2/tables/1/4.2.0.20.table create mode 100644 definitions/grib2/tables/1/4.2.0.3.table create mode 100644 definitions/grib2/tables/1/4.2.0.4.table create mode 100644 definitions/grib2/tables/1/4.2.0.5.table create mode 100644 definitions/grib2/tables/1/4.2.0.6.table create mode 100644 definitions/grib2/tables/1/4.2.0.7.table create mode 100644 definitions/grib2/tables/1/4.2.1.0.table create mode 100644 definitions/grib2/tables/1/4.2.1.1.table create mode 100644 definitions/grib2/tables/1/4.2.10.0.table create mode 100644 definitions/grib2/tables/1/4.2.10.1.table create mode 100644 definitions/grib2/tables/1/4.2.10.2.table create mode 100644 definitions/grib2/tables/1/4.2.10.3.table create mode 100644 definitions/grib2/tables/1/4.2.10.4.table create mode 100644 definitions/grib2/tables/1/4.2.2.0.table create mode 100644 definitions/grib2/tables/1/4.2.2.3.table create mode 100644 definitions/grib2/tables/1/4.2.3.0.table create mode 100644 definitions/grib2/tables/1/4.2.3.1.table create mode 100644 definitions/grib2/tables/1/4.2.table create mode 100644 definitions/grib2/tables/1/4.201.table create mode 100644 definitions/grib2/tables/1/4.202.table create mode 100644 definitions/grib2/tables/1/4.203.table create mode 100644 definitions/grib2/tables/1/4.204.table create mode 100644 definitions/grib2/tables/1/4.205.table create mode 100644 definitions/grib2/tables/1/4.206.table create mode 100644 definitions/grib2/tables/1/4.207.table create mode 100644 definitions/grib2/tables/1/4.208.table create mode 100644 definitions/grib2/tables/1/4.209.table create mode 100644 definitions/grib2/tables/1/4.210.table create mode 100644 definitions/grib2/tables/1/4.211.table create mode 100644 definitions/grib2/tables/1/4.212.table create mode 100644 definitions/grib2/tables/1/4.213.table create mode 100644 definitions/grib2/tables/1/4.215.table create mode 100644 definitions/grib2/tables/1/4.216.table create mode 100644 definitions/grib2/tables/1/4.217.table create mode 100644 definitions/grib2/tables/1/4.220.table create mode 100644 definitions/grib2/tables/1/4.221.table create mode 100644 definitions/grib2/tables/1/4.230.table create mode 100644 definitions/grib2/tables/1/4.3.table create mode 100644 definitions/grib2/tables/1/4.4.table create mode 100644 definitions/grib2/tables/1/4.5.table create mode 100644 definitions/grib2/tables/1/4.6.table create mode 100644 definitions/grib2/tables/1/4.7.table create mode 100644 definitions/grib2/tables/1/4.8.table create mode 100644 definitions/grib2/tables/1/4.9.table create mode 100644 definitions/grib2/tables/1/4.91.table create mode 100644 definitions/grib2/tables/1/5.0.table create mode 100644 definitions/grib2/tables/1/5.1.table create mode 100644 definitions/grib2/tables/1/5.2.table create mode 100644 definitions/grib2/tables/1/5.3.table create mode 100644 definitions/grib2/tables/1/5.4.table create mode 100644 definitions/grib2/tables/1/5.40.table create mode 100644 definitions/grib2/tables/1/5.40000.table create mode 100644 definitions/grib2/tables/1/5.5.table create mode 100644 definitions/grib2/tables/1/5.6.table create mode 100644 definitions/grib2/tables/1/5.7.table create mode 100644 definitions/grib2/tables/1/5.8.table create mode 100644 definitions/grib2/tables/1/5.9.table create mode 100644 definitions/grib2/tables/1/6.0.table create mode 100644 definitions/grib2/tables/1/stepType.table create mode 100644 definitions/grib2/tables/10/0.0.table create mode 100644 definitions/grib2/tables/10/1.0.table create mode 100644 definitions/grib2/tables/10/1.1.table create mode 100644 definitions/grib2/tables/10/1.2.table create mode 100644 definitions/grib2/tables/10/1.3.table create mode 100644 definitions/grib2/tables/10/1.4.table create mode 100644 definitions/grib2/tables/10/3.0.table create mode 100644 definitions/grib2/tables/10/3.1.table create mode 100644 definitions/grib2/tables/10/3.10.table create mode 100644 definitions/grib2/tables/10/3.11.table create mode 100644 definitions/grib2/tables/10/3.15.table create mode 100644 definitions/grib2/tables/10/3.2.table create mode 100644 definitions/grib2/tables/10/3.20.table create mode 100644 definitions/grib2/tables/10/3.21.table create mode 100644 definitions/grib2/tables/10/3.3.table create mode 100644 definitions/grib2/tables/10/3.4.table create mode 100644 definitions/grib2/tables/10/3.5.table create mode 100644 definitions/grib2/tables/10/3.6.table create mode 100644 definitions/grib2/tables/10/3.7.table create mode 100644 definitions/grib2/tables/10/3.8.table create mode 100644 definitions/grib2/tables/10/3.9.table create mode 100644 definitions/grib2/tables/10/4.0.table create mode 100644 definitions/grib2/tables/10/4.1.0.table create mode 100644 definitions/grib2/tables/10/4.1.1.table create mode 100644 definitions/grib2/tables/10/4.1.10.table create mode 100644 definitions/grib2/tables/10/4.1.192.table create mode 100644 definitions/grib2/tables/10/4.1.2.table create mode 100644 definitions/grib2/tables/10/4.1.3.table create mode 100644 definitions/grib2/tables/10/4.1.table create mode 100644 definitions/grib2/tables/10/4.10.table create mode 100644 definitions/grib2/tables/10/4.11.table create mode 100644 definitions/grib2/tables/10/4.12.table create mode 100644 definitions/grib2/tables/10/4.13.table create mode 100644 definitions/grib2/tables/10/4.14.table create mode 100644 definitions/grib2/tables/10/4.15.table create mode 100644 definitions/grib2/tables/10/4.151.table create mode 100644 definitions/grib2/tables/10/4.192.table create mode 100644 definitions/grib2/tables/10/4.2.0.0.table create mode 100644 definitions/grib2/tables/10/4.2.0.1.table create mode 100644 definitions/grib2/tables/10/4.2.0.13.table create mode 100644 definitions/grib2/tables/10/4.2.0.14.table create mode 100644 definitions/grib2/tables/10/4.2.0.15.table create mode 100644 definitions/grib2/tables/10/4.2.0.16.table create mode 100644 definitions/grib2/tables/10/4.2.0.18.table create mode 100644 definitions/grib2/tables/10/4.2.0.19.table create mode 100644 definitions/grib2/tables/10/4.2.0.190.table create mode 100644 definitions/grib2/tables/10/4.2.0.191.table create mode 100644 definitions/grib2/tables/10/4.2.0.2.table create mode 100644 definitions/grib2/tables/10/4.2.0.20.table create mode 100644 definitions/grib2/tables/10/4.2.0.3.table create mode 100644 definitions/grib2/tables/10/4.2.0.4.table create mode 100644 definitions/grib2/tables/10/4.2.0.5.table create mode 100644 definitions/grib2/tables/10/4.2.0.6.table create mode 100644 definitions/grib2/tables/10/4.2.0.7.table create mode 100644 definitions/grib2/tables/10/4.2.1.0.table create mode 100644 definitions/grib2/tables/10/4.2.1.1.table create mode 100644 definitions/grib2/tables/10/4.2.1.2.table create mode 100644 definitions/grib2/tables/10/4.2.10.0.table create mode 100644 definitions/grib2/tables/10/4.2.10.1.table create mode 100644 definitions/grib2/tables/10/4.2.10.191.table create mode 100644 definitions/grib2/tables/10/4.2.10.2.table create mode 100644 definitions/grib2/tables/10/4.2.10.3.table create mode 100644 definitions/grib2/tables/10/4.2.10.4.table create mode 100644 definitions/grib2/tables/10/4.2.2.0.table create mode 100644 definitions/grib2/tables/10/4.2.2.3.table create mode 100644 definitions/grib2/tables/10/4.2.2.4.table create mode 100644 definitions/grib2/tables/10/4.2.3.0.table create mode 100644 definitions/grib2/tables/10/4.2.3.1.table create mode 100644 definitions/grib2/tables/10/4.2.table create mode 100644 definitions/grib2/tables/10/4.201.table create mode 100644 definitions/grib2/tables/10/4.202.table create mode 100644 definitions/grib2/tables/10/4.203.table create mode 100644 definitions/grib2/tables/10/4.204.table create mode 100644 definitions/grib2/tables/10/4.205.table create mode 100644 definitions/grib2/tables/10/4.206.table create mode 100644 definitions/grib2/tables/10/4.207.table create mode 100644 definitions/grib2/tables/10/4.208.table create mode 100644 definitions/grib2/tables/10/4.209.table create mode 100644 definitions/grib2/tables/10/4.210.table create mode 100644 definitions/grib2/tables/10/4.211.table create mode 100644 definitions/grib2/tables/10/4.212.table create mode 100644 definitions/grib2/tables/10/4.213.table create mode 100644 definitions/grib2/tables/10/4.215.table create mode 100644 definitions/grib2/tables/10/4.216.table create mode 100644 definitions/grib2/tables/10/4.217.table create mode 100644 definitions/grib2/tables/10/4.218.table create mode 100644 definitions/grib2/tables/10/4.219.table create mode 100644 definitions/grib2/tables/10/4.220.table create mode 100644 definitions/grib2/tables/10/4.221.table create mode 100644 definitions/grib2/tables/10/4.222.table create mode 100644 definitions/grib2/tables/10/4.223.table create mode 100644 definitions/grib2/tables/10/4.224.table create mode 100644 definitions/grib2/tables/10/4.225.table create mode 100644 definitions/grib2/tables/10/4.227.table create mode 100644 definitions/grib2/tables/10/4.230.table create mode 100644 definitions/grib2/tables/10/4.233.table create mode 100644 definitions/grib2/tables/10/4.234.table create mode 100644 definitions/grib2/tables/10/4.235.table create mode 100644 definitions/grib2/tables/10/4.3.table create mode 100644 definitions/grib2/tables/10/4.4.table create mode 100644 definitions/grib2/tables/10/4.5.table create mode 100644 definitions/grib2/tables/10/4.6.table create mode 100644 definitions/grib2/tables/10/4.7.table create mode 100644 definitions/grib2/tables/10/4.8.table create mode 100644 definitions/grib2/tables/10/4.9.table create mode 100644 definitions/grib2/tables/10/4.91.table create mode 100644 definitions/grib2/tables/10/5.0.table create mode 100644 definitions/grib2/tables/10/5.1.table create mode 100644 definitions/grib2/tables/10/5.2.table create mode 100644 definitions/grib2/tables/10/5.3.table create mode 100644 definitions/grib2/tables/10/5.4.table create mode 100644 definitions/grib2/tables/10/5.40.table create mode 100644 definitions/grib2/tables/10/5.40000.table create mode 100644 definitions/grib2/tables/10/5.5.table create mode 100644 definitions/grib2/tables/10/5.50002.table create mode 100644 definitions/grib2/tables/10/5.6.table create mode 100644 definitions/grib2/tables/10/5.7.table create mode 100644 definitions/grib2/tables/10/5.8.table create mode 100644 definitions/grib2/tables/10/5.9.table create mode 100644 definitions/grib2/tables/10/6.0.table create mode 100644 definitions/grib2/tables/10/stepType.table create mode 100644 definitions/grib2/tables/2/0.0.table create mode 100644 definitions/grib2/tables/2/1.0.table create mode 100644 definitions/grib2/tables/2/1.1.table create mode 100644 definitions/grib2/tables/2/1.2.table create mode 100644 definitions/grib2/tables/2/1.3.table create mode 100644 definitions/grib2/tables/2/1.4.table create mode 100644 definitions/grib2/tables/2/3.0.table create mode 100644 definitions/grib2/tables/2/3.1.table create mode 100644 definitions/grib2/tables/2/3.10.table create mode 100644 definitions/grib2/tables/2/3.11.table create mode 100644 definitions/grib2/tables/2/3.15.table create mode 100644 definitions/grib2/tables/2/3.2.table create mode 100644 definitions/grib2/tables/2/3.20.table create mode 100644 definitions/grib2/tables/2/3.21.table create mode 100644 definitions/grib2/tables/2/3.3.table create mode 100644 definitions/grib2/tables/2/3.4.table create mode 100644 definitions/grib2/tables/2/3.5.table create mode 100644 definitions/grib2/tables/2/3.6.table create mode 100644 definitions/grib2/tables/2/3.7.table create mode 100644 definitions/grib2/tables/2/3.8.table create mode 100644 definitions/grib2/tables/2/3.9.table create mode 100644 definitions/grib2/tables/2/4.0.table create mode 100644 definitions/grib2/tables/2/4.1.0.table create mode 100644 definitions/grib2/tables/2/4.1.1.table create mode 100644 definitions/grib2/tables/2/4.1.10.table create mode 100644 definitions/grib2/tables/2/4.1.2.table create mode 100644 definitions/grib2/tables/2/4.1.3.table create mode 100644 definitions/grib2/tables/2/4.1.table create mode 100644 definitions/grib2/tables/2/4.10.table create mode 100644 definitions/grib2/tables/2/4.11.table create mode 100644 definitions/grib2/tables/2/4.12.table create mode 100644 definitions/grib2/tables/2/4.13.table create mode 100644 definitions/grib2/tables/2/4.14.table create mode 100644 definitions/grib2/tables/2/4.15.table create mode 100644 definitions/grib2/tables/2/4.151.table create mode 100644 definitions/grib2/tables/2/4.2.0.0.table create mode 100644 definitions/grib2/tables/2/4.2.0.1.table create mode 100644 definitions/grib2/tables/2/4.2.0.13.table create mode 100644 definitions/grib2/tables/2/4.2.0.14.table create mode 100644 definitions/grib2/tables/2/4.2.0.15.table create mode 100644 definitions/grib2/tables/2/4.2.0.18.table create mode 100644 definitions/grib2/tables/2/4.2.0.19.table create mode 100644 definitions/grib2/tables/2/4.2.0.190.table create mode 100644 definitions/grib2/tables/2/4.2.0.191.table create mode 100644 definitions/grib2/tables/2/4.2.0.2.table create mode 100644 definitions/grib2/tables/2/4.2.0.20.table create mode 100644 definitions/grib2/tables/2/4.2.0.3.table create mode 100644 definitions/grib2/tables/2/4.2.0.4.table create mode 100644 definitions/grib2/tables/2/4.2.0.5.table create mode 100644 definitions/grib2/tables/2/4.2.0.6.table create mode 100644 definitions/grib2/tables/2/4.2.0.7.table create mode 100644 definitions/grib2/tables/2/4.2.1.0.table create mode 100644 definitions/grib2/tables/2/4.2.1.1.table create mode 100644 definitions/grib2/tables/2/4.2.10.0.table create mode 100644 definitions/grib2/tables/2/4.2.10.1.table create mode 100644 definitions/grib2/tables/2/4.2.10.2.table create mode 100644 definitions/grib2/tables/2/4.2.10.3.table create mode 100644 definitions/grib2/tables/2/4.2.10.4.table create mode 100644 definitions/grib2/tables/2/4.2.2.0.table create mode 100644 definitions/grib2/tables/2/4.2.2.3.table create mode 100644 definitions/grib2/tables/2/4.2.3.0.table create mode 100644 definitions/grib2/tables/2/4.2.3.1.table create mode 100644 definitions/grib2/tables/2/4.2.table create mode 100644 definitions/grib2/tables/2/4.201.table create mode 100644 definitions/grib2/tables/2/4.202.table create mode 100644 definitions/grib2/tables/2/4.203.table create mode 100644 definitions/grib2/tables/2/4.204.table create mode 100644 definitions/grib2/tables/2/4.205.table create mode 100644 definitions/grib2/tables/2/4.206.table create mode 100644 definitions/grib2/tables/2/4.207.table create mode 100644 definitions/grib2/tables/2/4.208.table create mode 100644 definitions/grib2/tables/2/4.209.table create mode 100644 definitions/grib2/tables/2/4.210.table create mode 100644 definitions/grib2/tables/2/4.211.table create mode 100644 definitions/grib2/tables/2/4.212.table create mode 100644 definitions/grib2/tables/2/4.213.table create mode 100644 definitions/grib2/tables/2/4.215.table create mode 100644 definitions/grib2/tables/2/4.216.table create mode 100644 definitions/grib2/tables/2/4.217.table create mode 100644 definitions/grib2/tables/2/4.220.table create mode 100644 definitions/grib2/tables/2/4.221.table create mode 100644 definitions/grib2/tables/2/4.230.table create mode 100644 definitions/grib2/tables/2/4.3.table create mode 100644 definitions/grib2/tables/2/4.4.table create mode 100644 definitions/grib2/tables/2/4.5.table create mode 100644 definitions/grib2/tables/2/4.6.table create mode 100644 definitions/grib2/tables/2/4.7.table create mode 100644 definitions/grib2/tables/2/4.8.table create mode 100644 definitions/grib2/tables/2/4.9.table create mode 100644 definitions/grib2/tables/2/4.91.table create mode 100644 definitions/grib2/tables/2/5.0.table create mode 100644 definitions/grib2/tables/2/5.1.table create mode 100644 definitions/grib2/tables/2/5.2.table create mode 100644 definitions/grib2/tables/2/5.3.table create mode 100644 definitions/grib2/tables/2/5.4.table create mode 100644 definitions/grib2/tables/2/5.40.table create mode 100644 definitions/grib2/tables/2/5.40000.table create mode 100644 definitions/grib2/tables/2/5.5.table create mode 100644 definitions/grib2/tables/2/5.6.table create mode 100644 definitions/grib2/tables/2/5.7.table create mode 100644 definitions/grib2/tables/2/5.8.table create mode 100644 definitions/grib2/tables/2/5.9.table create mode 100644 definitions/grib2/tables/2/6.0.table create mode 100644 definitions/grib2/tables/2/stepType.table create mode 100644 definitions/grib2/tables/3/0.0.table create mode 100644 definitions/grib2/tables/3/1.0.table create mode 100644 definitions/grib2/tables/3/1.1.table create mode 100644 definitions/grib2/tables/3/1.2.table create mode 100644 definitions/grib2/tables/3/1.3.table create mode 100644 definitions/grib2/tables/3/1.4.table create mode 100644 definitions/grib2/tables/3/3.0.table create mode 100644 definitions/grib2/tables/3/3.1.table create mode 100644 definitions/grib2/tables/3/3.10.table create mode 100644 definitions/grib2/tables/3/3.11.table create mode 100644 definitions/grib2/tables/3/3.15.table create mode 100644 definitions/grib2/tables/3/3.2.table create mode 100644 definitions/grib2/tables/3/3.20.table create mode 100644 definitions/grib2/tables/3/3.21.table create mode 100644 definitions/grib2/tables/3/3.3.table create mode 100644 definitions/grib2/tables/3/3.4.table create mode 100644 definitions/grib2/tables/3/3.5.table create mode 100644 definitions/grib2/tables/3/3.6.table create mode 100644 definitions/grib2/tables/3/3.7.table create mode 100644 definitions/grib2/tables/3/3.8.table create mode 100644 definitions/grib2/tables/3/3.9.table create mode 100644 definitions/grib2/tables/3/4.0.table create mode 100644 definitions/grib2/tables/3/4.1.0.table create mode 100644 definitions/grib2/tables/3/4.1.1.table create mode 100644 definitions/grib2/tables/3/4.1.10.table create mode 100644 definitions/grib2/tables/3/4.1.2.table create mode 100644 definitions/grib2/tables/3/4.1.3.table create mode 100644 definitions/grib2/tables/3/4.1.table create mode 100644 definitions/grib2/tables/3/4.10.table create mode 100644 definitions/grib2/tables/3/4.11.table create mode 100644 definitions/grib2/tables/3/4.12.table create mode 100644 definitions/grib2/tables/3/4.13.table create mode 100644 definitions/grib2/tables/3/4.14.table create mode 100644 definitions/grib2/tables/3/4.15.table create mode 100644 definitions/grib2/tables/3/4.151.table create mode 100644 definitions/grib2/tables/3/4.2.0.0.table create mode 100644 definitions/grib2/tables/3/4.2.0.1.table create mode 100644 definitions/grib2/tables/3/4.2.0.13.table create mode 100644 definitions/grib2/tables/3/4.2.0.14.table create mode 100644 definitions/grib2/tables/3/4.2.0.15.table create mode 100644 definitions/grib2/tables/3/4.2.0.18.table create mode 100644 definitions/grib2/tables/3/4.2.0.19.table create mode 100644 definitions/grib2/tables/3/4.2.0.190.table create mode 100644 definitions/grib2/tables/3/4.2.0.191.table create mode 100644 definitions/grib2/tables/3/4.2.0.2.table create mode 100644 definitions/grib2/tables/3/4.2.0.20.table create mode 100644 definitions/grib2/tables/3/4.2.0.3.table create mode 100644 definitions/grib2/tables/3/4.2.0.4.table create mode 100644 definitions/grib2/tables/3/4.2.0.5.table create mode 100644 definitions/grib2/tables/3/4.2.0.6.table create mode 100644 definitions/grib2/tables/3/4.2.0.7.table create mode 100644 definitions/grib2/tables/3/4.2.1.0.table create mode 100644 definitions/grib2/tables/3/4.2.1.1.table create mode 100644 definitions/grib2/tables/3/4.2.10.0.table create mode 100644 definitions/grib2/tables/3/4.2.10.1.table create mode 100644 definitions/grib2/tables/3/4.2.10.2.table create mode 100644 definitions/grib2/tables/3/4.2.10.3.table create mode 100644 definitions/grib2/tables/3/4.2.10.4.table create mode 100644 definitions/grib2/tables/3/4.2.2.0.table create mode 100644 definitions/grib2/tables/3/4.2.2.3.table create mode 100644 definitions/grib2/tables/3/4.2.3.0.table create mode 100644 definitions/grib2/tables/3/4.2.3.1.table create mode 100644 definitions/grib2/tables/3/4.2.table create mode 100644 definitions/grib2/tables/3/4.201.table create mode 100644 definitions/grib2/tables/3/4.202.table create mode 100644 definitions/grib2/tables/3/4.203.table create mode 100644 definitions/grib2/tables/3/4.204.table create mode 100644 definitions/grib2/tables/3/4.205.table create mode 100644 definitions/grib2/tables/3/4.206.table create mode 100644 definitions/grib2/tables/3/4.207.table create mode 100644 definitions/grib2/tables/3/4.208.table create mode 100644 definitions/grib2/tables/3/4.209.table create mode 100644 definitions/grib2/tables/3/4.210.table create mode 100644 definitions/grib2/tables/3/4.211.table create mode 100644 definitions/grib2/tables/3/4.212.table create mode 100644 definitions/grib2/tables/3/4.213.table create mode 100644 definitions/grib2/tables/3/4.215.table create mode 100644 definitions/grib2/tables/3/4.216.table create mode 100644 definitions/grib2/tables/3/4.217.table create mode 100644 definitions/grib2/tables/3/4.220.table create mode 100644 definitions/grib2/tables/3/4.221.table create mode 100644 definitions/grib2/tables/3/4.230.table create mode 100644 definitions/grib2/tables/3/4.3.table create mode 100644 definitions/grib2/tables/3/4.4.table create mode 100644 definitions/grib2/tables/3/4.5.table create mode 100644 definitions/grib2/tables/3/4.6.table create mode 100644 definitions/grib2/tables/3/4.7.table create mode 100644 definitions/grib2/tables/3/4.8.table create mode 100644 definitions/grib2/tables/3/4.9.table create mode 100644 definitions/grib2/tables/3/4.91.table create mode 100644 definitions/grib2/tables/3/5.0.table create mode 100644 definitions/grib2/tables/3/5.1.table create mode 100644 definitions/grib2/tables/3/5.2.table create mode 100644 definitions/grib2/tables/3/5.3.table create mode 100644 definitions/grib2/tables/3/5.4.table create mode 100644 definitions/grib2/tables/3/5.40.table create mode 100644 definitions/grib2/tables/3/5.40000.table create mode 100644 definitions/grib2/tables/3/5.5.table create mode 100644 definitions/grib2/tables/3/5.50002.table create mode 100644 definitions/grib2/tables/3/5.6.table create mode 100644 definitions/grib2/tables/3/5.7.table create mode 100644 definitions/grib2/tables/3/5.8.table create mode 100644 definitions/grib2/tables/3/5.9.table create mode 100644 definitions/grib2/tables/3/6.0.table create mode 100644 definitions/grib2/tables/3/stepType.table create mode 100644 definitions/grib2/tables/4/0.0.table create mode 100644 definitions/grib2/tables/4/1.0.table create mode 100644 definitions/grib2/tables/4/1.1.table create mode 100644 definitions/grib2/tables/4/1.2.table create mode 100644 definitions/grib2/tables/4/1.3.table create mode 100644 definitions/grib2/tables/4/1.4.table create mode 100644 definitions/grib2/tables/4/3.0.table create mode 100644 definitions/grib2/tables/4/3.1.table create mode 100644 definitions/grib2/tables/4/3.10.table create mode 100644 definitions/grib2/tables/4/3.11.table create mode 100644 definitions/grib2/tables/4/3.15.table create mode 100644 definitions/grib2/tables/4/3.2.table create mode 100644 definitions/grib2/tables/4/3.20.table create mode 100644 definitions/grib2/tables/4/3.21.table create mode 100644 definitions/grib2/tables/4/3.3.table create mode 100644 definitions/grib2/tables/4/3.4.table create mode 100644 definitions/grib2/tables/4/3.5.table create mode 100644 definitions/grib2/tables/4/3.6.table create mode 100644 definitions/grib2/tables/4/3.7.table create mode 100644 definitions/grib2/tables/4/3.8.table create mode 100644 definitions/grib2/tables/4/3.9.table create mode 100644 definitions/grib2/tables/4/4.0.table create mode 100644 definitions/grib2/tables/4/4.1.0.table create mode 100644 definitions/grib2/tables/4/4.1.1.table create mode 100644 definitions/grib2/tables/4/4.1.10.table create mode 100644 definitions/grib2/tables/4/4.1.192.table create mode 100644 definitions/grib2/tables/4/4.1.2.table create mode 100644 definitions/grib2/tables/4/4.1.3.table create mode 100644 definitions/grib2/tables/4/4.1.table create mode 100644 definitions/grib2/tables/4/4.10.table create mode 100644 definitions/grib2/tables/4/4.11.table create mode 100644 definitions/grib2/tables/4/4.12.table create mode 100644 definitions/grib2/tables/4/4.13.table create mode 100644 definitions/grib2/tables/4/4.14.table create mode 100644 definitions/grib2/tables/4/4.15.table create mode 100644 definitions/grib2/tables/4/4.151.table create mode 100644 definitions/grib2/tables/4/4.2.0.0.table create mode 100644 definitions/grib2/tables/4/4.2.0.1.table create mode 100644 definitions/grib2/tables/4/4.2.0.13.table create mode 100644 definitions/grib2/tables/4/4.2.0.14.table create mode 100644 definitions/grib2/tables/4/4.2.0.15.table create mode 100644 definitions/grib2/tables/4/4.2.0.18.table create mode 100644 definitions/grib2/tables/4/4.2.0.19.table create mode 100644 definitions/grib2/tables/4/4.2.0.190.table create mode 100644 definitions/grib2/tables/4/4.2.0.191.table create mode 100644 definitions/grib2/tables/4/4.2.0.2.table create mode 100644 definitions/grib2/tables/4/4.2.0.20.table create mode 100644 definitions/grib2/tables/4/4.2.0.3.table create mode 100644 definitions/grib2/tables/4/4.2.0.4.table create mode 100644 definitions/grib2/tables/4/4.2.0.5.table create mode 100644 definitions/grib2/tables/4/4.2.0.6.table create mode 100644 definitions/grib2/tables/4/4.2.0.7.table create mode 100644 definitions/grib2/tables/4/4.2.1.0.table create mode 100644 definitions/grib2/tables/4/4.2.1.1.table create mode 100644 definitions/grib2/tables/4/4.2.10.0.table create mode 100644 definitions/grib2/tables/4/4.2.10.1.table create mode 100644 definitions/grib2/tables/4/4.2.10.2.table create mode 100644 definitions/grib2/tables/4/4.2.10.3.table create mode 100644 definitions/grib2/tables/4/4.2.10.4.table create mode 100644 definitions/grib2/tables/4/4.2.192.0.table create mode 100644 definitions/grib2/tables/4/4.2.192.1.table create mode 100644 definitions/grib2/tables/4/4.2.192.10.table create mode 100644 definitions/grib2/tables/4/4.2.192.100.table create mode 100644 definitions/grib2/tables/4/4.2.192.101.table create mode 100644 definitions/grib2/tables/4/4.2.192.102.table create mode 100644 definitions/grib2/tables/4/4.2.192.103.table create mode 100644 definitions/grib2/tables/4/4.2.192.104.table create mode 100644 definitions/grib2/tables/4/4.2.192.105.table create mode 100644 definitions/grib2/tables/4/4.2.192.106.table create mode 100644 definitions/grib2/tables/4/4.2.192.107.table create mode 100644 definitions/grib2/tables/4/4.2.192.108.table create mode 100644 definitions/grib2/tables/4/4.2.192.109.table create mode 100644 definitions/grib2/tables/4/4.2.192.11.table create mode 100644 definitions/grib2/tables/4/4.2.192.110.table create mode 100644 definitions/grib2/tables/4/4.2.192.111.table create mode 100644 definitions/grib2/tables/4/4.2.192.112.table create mode 100644 definitions/grib2/tables/4/4.2.192.113.table create mode 100644 definitions/grib2/tables/4/4.2.192.114.table create mode 100644 definitions/grib2/tables/4/4.2.192.115.table create mode 100644 definitions/grib2/tables/4/4.2.192.116.table create mode 100644 definitions/grib2/tables/4/4.2.192.117.table create mode 100644 definitions/grib2/tables/4/4.2.192.118.table create mode 100644 definitions/grib2/tables/4/4.2.192.119.table create mode 100644 definitions/grib2/tables/4/4.2.192.12.table create mode 100644 definitions/grib2/tables/4/4.2.192.120.table create mode 100644 definitions/grib2/tables/4/4.2.192.121.table create mode 100644 definitions/grib2/tables/4/4.2.192.122.table create mode 100644 definitions/grib2/tables/4/4.2.192.123.table create mode 100644 definitions/grib2/tables/4/4.2.192.124.table create mode 100644 definitions/grib2/tables/4/4.2.192.125.table create mode 100644 definitions/grib2/tables/4/4.2.192.126.table create mode 100644 definitions/grib2/tables/4/4.2.192.127.table create mode 100644 definitions/grib2/tables/4/4.2.192.128.table create mode 100644 definitions/grib2/tables/4/4.2.192.129.table create mode 100644 definitions/grib2/tables/4/4.2.192.13.table create mode 100644 definitions/grib2/tables/4/4.2.192.130.table create mode 100644 definitions/grib2/tables/4/4.2.192.131.table create mode 100644 definitions/grib2/tables/4/4.2.192.132.table create mode 100644 definitions/grib2/tables/4/4.2.192.133.table create mode 100644 definitions/grib2/tables/4/4.2.192.134.table create mode 100644 definitions/grib2/tables/4/4.2.192.135.table create mode 100644 definitions/grib2/tables/4/4.2.192.136.table create mode 100644 definitions/grib2/tables/4/4.2.192.137.table create mode 100644 definitions/grib2/tables/4/4.2.192.138.table create mode 100644 definitions/grib2/tables/4/4.2.192.139.table create mode 100644 definitions/grib2/tables/4/4.2.192.14.table create mode 100644 definitions/grib2/tables/4/4.2.192.140.table create mode 100644 definitions/grib2/tables/4/4.2.192.141.table create mode 100644 definitions/grib2/tables/4/4.2.192.142.table create mode 100644 definitions/grib2/tables/4/4.2.192.143.table create mode 100644 definitions/grib2/tables/4/4.2.192.144.table create mode 100644 definitions/grib2/tables/4/4.2.192.145.table create mode 100644 definitions/grib2/tables/4/4.2.192.146.table create mode 100644 definitions/grib2/tables/4/4.2.192.147.table create mode 100644 definitions/grib2/tables/4/4.2.192.148.table create mode 100644 definitions/grib2/tables/4/4.2.192.149.table create mode 100644 definitions/grib2/tables/4/4.2.192.15.table create mode 100644 definitions/grib2/tables/4/4.2.192.150.table create mode 100644 definitions/grib2/tables/4/4.2.192.151.table create mode 100644 definitions/grib2/tables/4/4.2.192.152.table create mode 100644 definitions/grib2/tables/4/4.2.192.153.table create mode 100644 definitions/grib2/tables/4/4.2.192.154.table create mode 100644 definitions/grib2/tables/4/4.2.192.155.table create mode 100644 definitions/grib2/tables/4/4.2.192.156.table create mode 100644 definitions/grib2/tables/4/4.2.192.157.table create mode 100644 definitions/grib2/tables/4/4.2.192.158.table create mode 100644 definitions/grib2/tables/4/4.2.192.159.table create mode 100644 definitions/grib2/tables/4/4.2.192.16.table create mode 100644 definitions/grib2/tables/4/4.2.192.160.table create mode 100644 definitions/grib2/tables/4/4.2.192.161.table create mode 100644 definitions/grib2/tables/4/4.2.192.162.table create mode 100644 definitions/grib2/tables/4/4.2.192.163.table create mode 100644 definitions/grib2/tables/4/4.2.192.164.table create mode 100644 definitions/grib2/tables/4/4.2.192.165.table create mode 100644 definitions/grib2/tables/4/4.2.192.166.table create mode 100644 definitions/grib2/tables/4/4.2.192.167.table create mode 100644 definitions/grib2/tables/4/4.2.192.168.table create mode 100644 definitions/grib2/tables/4/4.2.192.169.table create mode 100644 definitions/grib2/tables/4/4.2.192.17.table create mode 100644 definitions/grib2/tables/4/4.2.192.170.table create mode 100644 definitions/grib2/tables/4/4.2.192.171.table create mode 100644 definitions/grib2/tables/4/4.2.192.172.table create mode 100644 definitions/grib2/tables/4/4.2.192.173.table create mode 100644 definitions/grib2/tables/4/4.2.192.174.table create mode 100644 definitions/grib2/tables/4/4.2.192.175.table create mode 100644 definitions/grib2/tables/4/4.2.192.176.table create mode 100644 definitions/grib2/tables/4/4.2.192.177.table create mode 100644 definitions/grib2/tables/4/4.2.192.178.table create mode 100644 definitions/grib2/tables/4/4.2.192.179.table create mode 100644 definitions/grib2/tables/4/4.2.192.18.table create mode 100644 definitions/grib2/tables/4/4.2.192.180.table create mode 100644 definitions/grib2/tables/4/4.2.192.181.table create mode 100644 definitions/grib2/tables/4/4.2.192.182.table create mode 100644 definitions/grib2/tables/4/4.2.192.183.table create mode 100644 definitions/grib2/tables/4/4.2.192.184.table create mode 100644 definitions/grib2/tables/4/4.2.192.185.table create mode 100644 definitions/grib2/tables/4/4.2.192.186.table create mode 100644 definitions/grib2/tables/4/4.2.192.187.table create mode 100644 definitions/grib2/tables/4/4.2.192.188.table create mode 100644 definitions/grib2/tables/4/4.2.192.189.table create mode 100644 definitions/grib2/tables/4/4.2.192.19.table create mode 100644 definitions/grib2/tables/4/4.2.192.190.table create mode 100644 definitions/grib2/tables/4/4.2.192.191.table create mode 100644 definitions/grib2/tables/4/4.2.192.192.table create mode 100644 definitions/grib2/tables/4/4.2.192.193.table create mode 100644 definitions/grib2/tables/4/4.2.192.194.table create mode 100644 definitions/grib2/tables/4/4.2.192.195.table create mode 100644 definitions/grib2/tables/4/4.2.192.196.table create mode 100644 definitions/grib2/tables/4/4.2.192.197.table create mode 100644 definitions/grib2/tables/4/4.2.192.198.table create mode 100644 definitions/grib2/tables/4/4.2.192.199.table create mode 100644 definitions/grib2/tables/4/4.2.192.2.table create mode 100644 definitions/grib2/tables/4/4.2.192.20.table create mode 100644 definitions/grib2/tables/4/4.2.192.200.table create mode 100644 definitions/grib2/tables/4/4.2.192.201.table create mode 100644 definitions/grib2/tables/4/4.2.192.202.table create mode 100644 definitions/grib2/tables/4/4.2.192.203.table create mode 100644 definitions/grib2/tables/4/4.2.192.204.table create mode 100644 definitions/grib2/tables/4/4.2.192.205.table create mode 100644 definitions/grib2/tables/4/4.2.192.206.table create mode 100644 definitions/grib2/tables/4/4.2.192.207.table create mode 100644 definitions/grib2/tables/4/4.2.192.208.table create mode 100644 definitions/grib2/tables/4/4.2.192.209.table create mode 100644 definitions/grib2/tables/4/4.2.192.21.table create mode 100644 definitions/grib2/tables/4/4.2.192.210.table create mode 100644 definitions/grib2/tables/4/4.2.192.211.table create mode 100644 definitions/grib2/tables/4/4.2.192.212.table create mode 100644 definitions/grib2/tables/4/4.2.192.213.table create mode 100644 definitions/grib2/tables/4/4.2.192.214.table create mode 100644 definitions/grib2/tables/4/4.2.192.215.table create mode 100644 definitions/grib2/tables/4/4.2.192.216.table create mode 100644 definitions/grib2/tables/4/4.2.192.217.table create mode 100644 definitions/grib2/tables/4/4.2.192.218.table create mode 100644 definitions/grib2/tables/4/4.2.192.219.table create mode 100644 definitions/grib2/tables/4/4.2.192.22.table create mode 100644 definitions/grib2/tables/4/4.2.192.220.table create mode 100644 definitions/grib2/tables/4/4.2.192.221.table create mode 100644 definitions/grib2/tables/4/4.2.192.222.table create mode 100644 definitions/grib2/tables/4/4.2.192.223.table create mode 100644 definitions/grib2/tables/4/4.2.192.224.table create mode 100644 definitions/grib2/tables/4/4.2.192.225.table create mode 100644 definitions/grib2/tables/4/4.2.192.226.table create mode 100644 definitions/grib2/tables/4/4.2.192.227.table create mode 100644 definitions/grib2/tables/4/4.2.192.228.table create mode 100644 definitions/grib2/tables/4/4.2.192.229.table create mode 100644 definitions/grib2/tables/4/4.2.192.23.table create mode 100644 definitions/grib2/tables/4/4.2.192.230.table create mode 100644 definitions/grib2/tables/4/4.2.192.231.table create mode 100644 definitions/grib2/tables/4/4.2.192.232.table create mode 100644 definitions/grib2/tables/4/4.2.192.233.table create mode 100644 definitions/grib2/tables/4/4.2.192.234.table create mode 100644 definitions/grib2/tables/4/4.2.192.235.table create mode 100644 definitions/grib2/tables/4/4.2.192.236.table create mode 100644 definitions/grib2/tables/4/4.2.192.237.table create mode 100644 definitions/grib2/tables/4/4.2.192.238.table create mode 100644 definitions/grib2/tables/4/4.2.192.239.table create mode 100644 definitions/grib2/tables/4/4.2.192.24.table create mode 100644 definitions/grib2/tables/4/4.2.192.240.table create mode 100644 definitions/grib2/tables/4/4.2.192.241.table create mode 100644 definitions/grib2/tables/4/4.2.192.242.table create mode 100644 definitions/grib2/tables/4/4.2.192.243.table create mode 100644 definitions/grib2/tables/4/4.2.192.244.table create mode 100644 definitions/grib2/tables/4/4.2.192.245.table create mode 100644 definitions/grib2/tables/4/4.2.192.246.table create mode 100644 definitions/grib2/tables/4/4.2.192.247.table create mode 100644 definitions/grib2/tables/4/4.2.192.248.table create mode 100644 definitions/grib2/tables/4/4.2.192.249.table create mode 100644 definitions/grib2/tables/4/4.2.192.25.table create mode 100644 definitions/grib2/tables/4/4.2.192.250.table create mode 100644 definitions/grib2/tables/4/4.2.192.251.table create mode 100644 definitions/grib2/tables/4/4.2.192.252.table create mode 100644 definitions/grib2/tables/4/4.2.192.253.table create mode 100644 definitions/grib2/tables/4/4.2.192.254.table create mode 100644 definitions/grib2/tables/4/4.2.192.255.table create mode 100644 definitions/grib2/tables/4/4.2.192.26.table create mode 100644 definitions/grib2/tables/4/4.2.192.27.table create mode 100644 definitions/grib2/tables/4/4.2.192.28.table create mode 100644 definitions/grib2/tables/4/4.2.192.29.table create mode 100644 definitions/grib2/tables/4/4.2.192.3.table create mode 100644 definitions/grib2/tables/4/4.2.192.30.table create mode 100644 definitions/grib2/tables/4/4.2.192.31.table create mode 100644 definitions/grib2/tables/4/4.2.192.32.table create mode 100644 definitions/grib2/tables/4/4.2.192.33.table create mode 100644 definitions/grib2/tables/4/4.2.192.34.table create mode 100644 definitions/grib2/tables/4/4.2.192.35.table create mode 100644 definitions/grib2/tables/4/4.2.192.36.table create mode 100644 definitions/grib2/tables/4/4.2.192.37.table create mode 100644 definitions/grib2/tables/4/4.2.192.38.table create mode 100644 definitions/grib2/tables/4/4.2.192.39.table create mode 100644 definitions/grib2/tables/4/4.2.192.4.table create mode 100644 definitions/grib2/tables/4/4.2.192.40.table create mode 100644 definitions/grib2/tables/4/4.2.192.41.table create mode 100644 definitions/grib2/tables/4/4.2.192.42.table create mode 100644 definitions/grib2/tables/4/4.2.192.43.table create mode 100644 definitions/grib2/tables/4/4.2.192.44.table create mode 100644 definitions/grib2/tables/4/4.2.192.45.table create mode 100644 definitions/grib2/tables/4/4.2.192.46.table create mode 100644 definitions/grib2/tables/4/4.2.192.47.table create mode 100644 definitions/grib2/tables/4/4.2.192.48.table create mode 100644 definitions/grib2/tables/4/4.2.192.49.table create mode 100644 definitions/grib2/tables/4/4.2.192.5.table create mode 100644 definitions/grib2/tables/4/4.2.192.50.table create mode 100644 definitions/grib2/tables/4/4.2.192.51.table create mode 100644 definitions/grib2/tables/4/4.2.192.52.table create mode 100644 definitions/grib2/tables/4/4.2.192.53.table create mode 100644 definitions/grib2/tables/4/4.2.192.54.table create mode 100644 definitions/grib2/tables/4/4.2.192.55.table create mode 100644 definitions/grib2/tables/4/4.2.192.56.table create mode 100644 definitions/grib2/tables/4/4.2.192.57.table create mode 100644 definitions/grib2/tables/4/4.2.192.58.table create mode 100644 definitions/grib2/tables/4/4.2.192.59.table create mode 100644 definitions/grib2/tables/4/4.2.192.6.table create mode 100644 definitions/grib2/tables/4/4.2.192.60.table create mode 100644 definitions/grib2/tables/4/4.2.192.61.table create mode 100644 definitions/grib2/tables/4/4.2.192.62.table create mode 100644 definitions/grib2/tables/4/4.2.192.63.table create mode 100644 definitions/grib2/tables/4/4.2.192.64.table create mode 100644 definitions/grib2/tables/4/4.2.192.65.table create mode 100644 definitions/grib2/tables/4/4.2.192.66.table create mode 100644 definitions/grib2/tables/4/4.2.192.67.table create mode 100644 definitions/grib2/tables/4/4.2.192.68.table create mode 100644 definitions/grib2/tables/4/4.2.192.69.table create mode 100644 definitions/grib2/tables/4/4.2.192.7.table create mode 100644 definitions/grib2/tables/4/4.2.192.70.table create mode 100644 definitions/grib2/tables/4/4.2.192.71.table create mode 100644 definitions/grib2/tables/4/4.2.192.72.table create mode 100644 definitions/grib2/tables/4/4.2.192.73.table create mode 100644 definitions/grib2/tables/4/4.2.192.74.table create mode 100644 definitions/grib2/tables/4/4.2.192.75.table create mode 100644 definitions/grib2/tables/4/4.2.192.76.table create mode 100644 definitions/grib2/tables/4/4.2.192.77.table create mode 100644 definitions/grib2/tables/4/4.2.192.78.table create mode 100644 definitions/grib2/tables/4/4.2.192.79.table create mode 100644 definitions/grib2/tables/4/4.2.192.8.table create mode 100644 definitions/grib2/tables/4/4.2.192.80.table create mode 100644 definitions/grib2/tables/4/4.2.192.81.table create mode 100644 definitions/grib2/tables/4/4.2.192.82.table create mode 100644 definitions/grib2/tables/4/4.2.192.83.table create mode 100644 definitions/grib2/tables/4/4.2.192.84.table create mode 100644 definitions/grib2/tables/4/4.2.192.85.table create mode 100644 definitions/grib2/tables/4/4.2.192.86.table create mode 100644 definitions/grib2/tables/4/4.2.192.87.table create mode 100644 definitions/grib2/tables/4/4.2.192.88.table create mode 100644 definitions/grib2/tables/4/4.2.192.89.table create mode 100644 definitions/grib2/tables/4/4.2.192.9.table create mode 100644 definitions/grib2/tables/4/4.2.192.90.table create mode 100644 definitions/grib2/tables/4/4.2.192.91.table create mode 100644 definitions/grib2/tables/4/4.2.192.92.table create mode 100644 definitions/grib2/tables/4/4.2.192.93.table create mode 100644 definitions/grib2/tables/4/4.2.192.94.table create mode 100644 definitions/grib2/tables/4/4.2.192.95.table create mode 100644 definitions/grib2/tables/4/4.2.192.96.table create mode 100644 definitions/grib2/tables/4/4.2.192.97.table create mode 100644 definitions/grib2/tables/4/4.2.192.98.table create mode 100644 definitions/grib2/tables/4/4.2.192.99.table create mode 100644 definitions/grib2/tables/4/4.2.2.0.table create mode 100644 definitions/grib2/tables/4/4.2.2.3.table create mode 100644 definitions/grib2/tables/4/4.2.3.0.table create mode 100644 definitions/grib2/tables/4/4.2.3.1.table create mode 100644 definitions/grib2/tables/4/4.2.table create mode 100644 definitions/grib2/tables/4/4.201.table create mode 100644 definitions/grib2/tables/4/4.202.table create mode 100644 definitions/grib2/tables/4/4.203.table create mode 100644 definitions/grib2/tables/4/4.204.table create mode 100644 definitions/grib2/tables/4/4.205.table create mode 100644 definitions/grib2/tables/4/4.206.table create mode 100644 definitions/grib2/tables/4/4.207.table create mode 100644 definitions/grib2/tables/4/4.208.table create mode 100644 definitions/grib2/tables/4/4.209.table create mode 100644 definitions/grib2/tables/4/4.210.table create mode 100644 definitions/grib2/tables/4/4.211.table create mode 100644 definitions/grib2/tables/4/4.212.table create mode 100644 definitions/grib2/tables/4/4.213.table create mode 100644 definitions/grib2/tables/4/4.215.table create mode 100644 definitions/grib2/tables/4/4.216.table create mode 100644 definitions/grib2/tables/4/4.217.table create mode 100644 definitions/grib2/tables/4/4.220.table create mode 100644 definitions/grib2/tables/4/4.221.table create mode 100644 definitions/grib2/tables/4/4.230.table create mode 100644 definitions/grib2/tables/4/4.3.table create mode 100644 definitions/grib2/tables/4/4.4.table create mode 100644 definitions/grib2/tables/4/4.5.table create mode 100644 definitions/grib2/tables/4/4.6.table create mode 100644 definitions/grib2/tables/4/4.7.table create mode 100644 definitions/grib2/tables/4/4.8.table create mode 100644 definitions/grib2/tables/4/4.9.table create mode 100644 definitions/grib2/tables/4/4.91.table create mode 100644 definitions/grib2/tables/4/5.0.table create mode 100644 definitions/grib2/tables/4/5.1.table create mode 100644 definitions/grib2/tables/4/5.2.table create mode 100644 definitions/grib2/tables/4/5.3.table create mode 100644 definitions/grib2/tables/4/5.4.table create mode 100644 definitions/grib2/tables/4/5.40.table create mode 100644 definitions/grib2/tables/4/5.40000.table create mode 100644 definitions/grib2/tables/4/5.5.table create mode 100644 definitions/grib2/tables/4/5.50002.table create mode 100644 definitions/grib2/tables/4/5.6.table create mode 100644 definitions/grib2/tables/4/5.7.table create mode 100644 definitions/grib2/tables/4/5.8.table create mode 100644 definitions/grib2/tables/4/5.9.table create mode 100644 definitions/grib2/tables/4/6.0.table create mode 100644 definitions/grib2/tables/4/stepType.table create mode 100644 definitions/grib2/tables/5/0.0.table create mode 100644 definitions/grib2/tables/5/1.0.table create mode 100644 definitions/grib2/tables/5/1.1.table create mode 100644 definitions/grib2/tables/5/1.2.table create mode 100644 definitions/grib2/tables/5/1.3.table create mode 100644 definitions/grib2/tables/5/1.4.table create mode 100644 definitions/grib2/tables/5/3.0.table create mode 100644 definitions/grib2/tables/5/3.1.table create mode 100644 definitions/grib2/tables/5/3.10.table create mode 100644 definitions/grib2/tables/5/3.11.table create mode 100644 definitions/grib2/tables/5/3.15.table create mode 100644 definitions/grib2/tables/5/3.2.table create mode 100644 definitions/grib2/tables/5/3.20.table create mode 100644 definitions/grib2/tables/5/3.21.table create mode 100644 definitions/grib2/tables/5/3.3.table create mode 100644 definitions/grib2/tables/5/3.4.table create mode 100644 definitions/grib2/tables/5/3.5.table create mode 100644 definitions/grib2/tables/5/3.6.table create mode 100644 definitions/grib2/tables/5/3.7.table create mode 100644 definitions/grib2/tables/5/3.8.table create mode 100644 definitions/grib2/tables/5/3.9.table create mode 100644 definitions/grib2/tables/5/4.0.table create mode 100644 definitions/grib2/tables/5/4.1.0.table create mode 100644 definitions/grib2/tables/5/4.1.1.table create mode 100644 definitions/grib2/tables/5/4.1.10.table create mode 100644 definitions/grib2/tables/5/4.1.192.table create mode 100644 definitions/grib2/tables/5/4.1.2.table create mode 100644 definitions/grib2/tables/5/4.1.3.table create mode 100644 definitions/grib2/tables/5/4.1.table create mode 100644 definitions/grib2/tables/5/4.10.table create mode 100644 definitions/grib2/tables/5/4.11.table create mode 100644 definitions/grib2/tables/5/4.12.table create mode 100644 definitions/grib2/tables/5/4.13.table create mode 100644 definitions/grib2/tables/5/4.14.table create mode 100644 definitions/grib2/tables/5/4.15.table create mode 100644 definitions/grib2/tables/5/4.151.table create mode 100644 definitions/grib2/tables/5/4.192.table create mode 100644 definitions/grib2/tables/5/4.2.0.0.table create mode 100644 definitions/grib2/tables/5/4.2.0.1.table create mode 100644 definitions/grib2/tables/5/4.2.0.13.table create mode 100644 definitions/grib2/tables/5/4.2.0.14.table create mode 100644 definitions/grib2/tables/5/4.2.0.15.table create mode 100644 definitions/grib2/tables/5/4.2.0.18.table create mode 100644 definitions/grib2/tables/5/4.2.0.19.table create mode 100644 definitions/grib2/tables/5/4.2.0.190.table create mode 100644 definitions/grib2/tables/5/4.2.0.191.table create mode 100644 definitions/grib2/tables/5/4.2.0.2.table create mode 100644 definitions/grib2/tables/5/4.2.0.20.table create mode 100644 definitions/grib2/tables/5/4.2.0.20.table~ create mode 100644 definitions/grib2/tables/5/4.2.0.3.table create mode 100644 definitions/grib2/tables/5/4.2.0.4.table create mode 100644 definitions/grib2/tables/5/4.2.0.5.table create mode 100644 definitions/grib2/tables/5/4.2.0.6.table create mode 100644 definitions/grib2/tables/5/4.2.0.7.table create mode 100644 definitions/grib2/tables/5/4.2.1.0.table create mode 100644 definitions/grib2/tables/5/4.2.1.1.table create mode 100644 definitions/grib2/tables/5/4.2.10.0.table create mode 100644 definitions/grib2/tables/5/4.2.10.1.table create mode 100644 definitions/grib2/tables/5/4.2.10.191.table create mode 100644 definitions/grib2/tables/5/4.2.10.2.table create mode 100644 definitions/grib2/tables/5/4.2.10.3.table create mode 100644 definitions/grib2/tables/5/4.2.10.4.table create mode 100644 definitions/grib2/tables/5/4.2.192.0.table create mode 100644 definitions/grib2/tables/5/4.2.192.1.table create mode 100644 definitions/grib2/tables/5/4.2.192.10.table create mode 100644 definitions/grib2/tables/5/4.2.192.100.table create mode 100644 definitions/grib2/tables/5/4.2.192.101.table create mode 100644 definitions/grib2/tables/5/4.2.192.102.table create mode 100644 definitions/grib2/tables/5/4.2.192.103.table create mode 100644 definitions/grib2/tables/5/4.2.192.104.table create mode 100644 definitions/grib2/tables/5/4.2.192.105.table create mode 100644 definitions/grib2/tables/5/4.2.192.106.table create mode 100644 definitions/grib2/tables/5/4.2.192.107.table create mode 100644 definitions/grib2/tables/5/4.2.192.108.table create mode 100644 definitions/grib2/tables/5/4.2.192.109.table create mode 100644 definitions/grib2/tables/5/4.2.192.11.table create mode 100644 definitions/grib2/tables/5/4.2.192.110.table create mode 100644 definitions/grib2/tables/5/4.2.192.111.table create mode 100644 definitions/grib2/tables/5/4.2.192.112.table create mode 100644 definitions/grib2/tables/5/4.2.192.113.table create mode 100644 definitions/grib2/tables/5/4.2.192.114.table create mode 100644 definitions/grib2/tables/5/4.2.192.115.table create mode 100644 definitions/grib2/tables/5/4.2.192.116.table create mode 100644 definitions/grib2/tables/5/4.2.192.117.table create mode 100644 definitions/grib2/tables/5/4.2.192.118.table create mode 100644 definitions/grib2/tables/5/4.2.192.119.table create mode 100644 definitions/grib2/tables/5/4.2.192.12.table create mode 100644 definitions/grib2/tables/5/4.2.192.120.table create mode 100644 definitions/grib2/tables/5/4.2.192.121.table create mode 100644 definitions/grib2/tables/5/4.2.192.122.table create mode 100644 definitions/grib2/tables/5/4.2.192.123.table create mode 100644 definitions/grib2/tables/5/4.2.192.124.table create mode 100644 definitions/grib2/tables/5/4.2.192.125.table create mode 100644 definitions/grib2/tables/5/4.2.192.126.table create mode 100644 definitions/grib2/tables/5/4.2.192.127.table create mode 100644 definitions/grib2/tables/5/4.2.192.128.table create mode 100644 definitions/grib2/tables/5/4.2.192.129.table create mode 100644 definitions/grib2/tables/5/4.2.192.13.table create mode 100644 definitions/grib2/tables/5/4.2.192.130.table create mode 100644 definitions/grib2/tables/5/4.2.192.131.table create mode 100644 definitions/grib2/tables/5/4.2.192.132.table create mode 100644 definitions/grib2/tables/5/4.2.192.133.table create mode 100644 definitions/grib2/tables/5/4.2.192.134.table create mode 100644 definitions/grib2/tables/5/4.2.192.135.table create mode 100644 definitions/grib2/tables/5/4.2.192.136.table create mode 100644 definitions/grib2/tables/5/4.2.192.137.table create mode 100644 definitions/grib2/tables/5/4.2.192.138.table create mode 100644 definitions/grib2/tables/5/4.2.192.139.table create mode 100644 definitions/grib2/tables/5/4.2.192.14.table create mode 100644 definitions/grib2/tables/5/4.2.192.140.table create mode 100644 definitions/grib2/tables/5/4.2.192.141.table create mode 100644 definitions/grib2/tables/5/4.2.192.142.table create mode 100644 definitions/grib2/tables/5/4.2.192.143.table create mode 100644 definitions/grib2/tables/5/4.2.192.144.table create mode 100644 definitions/grib2/tables/5/4.2.192.145.table create mode 100644 definitions/grib2/tables/5/4.2.192.146.table create mode 100644 definitions/grib2/tables/5/4.2.192.147.table create mode 100644 definitions/grib2/tables/5/4.2.192.148.table create mode 100644 definitions/grib2/tables/5/4.2.192.149.table create mode 100644 definitions/grib2/tables/5/4.2.192.15.table create mode 100644 definitions/grib2/tables/5/4.2.192.150.table create mode 100644 definitions/grib2/tables/5/4.2.192.151.table create mode 100644 definitions/grib2/tables/5/4.2.192.152.table create mode 100644 definitions/grib2/tables/5/4.2.192.153.table create mode 100644 definitions/grib2/tables/5/4.2.192.154.table create mode 100644 definitions/grib2/tables/5/4.2.192.155.table create mode 100644 definitions/grib2/tables/5/4.2.192.156.table create mode 100644 definitions/grib2/tables/5/4.2.192.157.table create mode 100644 definitions/grib2/tables/5/4.2.192.158.table create mode 100644 definitions/grib2/tables/5/4.2.192.159.table create mode 100644 definitions/grib2/tables/5/4.2.192.16.table create mode 100644 definitions/grib2/tables/5/4.2.192.160.table create mode 100644 definitions/grib2/tables/5/4.2.192.161.table create mode 100644 definitions/grib2/tables/5/4.2.192.162.table create mode 100644 definitions/grib2/tables/5/4.2.192.163.table create mode 100644 definitions/grib2/tables/5/4.2.192.164.table create mode 100644 definitions/grib2/tables/5/4.2.192.165.table create mode 100644 definitions/grib2/tables/5/4.2.192.166.table create mode 100644 definitions/grib2/tables/5/4.2.192.167.table create mode 100644 definitions/grib2/tables/5/4.2.192.168.table create mode 100644 definitions/grib2/tables/5/4.2.192.169.table create mode 100644 definitions/grib2/tables/5/4.2.192.17.table create mode 100644 definitions/grib2/tables/5/4.2.192.170.table create mode 100644 definitions/grib2/tables/5/4.2.192.171.table create mode 100644 definitions/grib2/tables/5/4.2.192.172.table create mode 100644 definitions/grib2/tables/5/4.2.192.173.table create mode 100644 definitions/grib2/tables/5/4.2.192.174.table create mode 100644 definitions/grib2/tables/5/4.2.192.175.table create mode 100644 definitions/grib2/tables/5/4.2.192.176.table create mode 100644 definitions/grib2/tables/5/4.2.192.177.table create mode 100644 definitions/grib2/tables/5/4.2.192.178.table create mode 100644 definitions/grib2/tables/5/4.2.192.179.table create mode 100644 definitions/grib2/tables/5/4.2.192.18.table create mode 100644 definitions/grib2/tables/5/4.2.192.180.table create mode 100644 definitions/grib2/tables/5/4.2.192.181.table create mode 100644 definitions/grib2/tables/5/4.2.192.182.table create mode 100644 definitions/grib2/tables/5/4.2.192.183.table create mode 100644 definitions/grib2/tables/5/4.2.192.184.table create mode 100644 definitions/grib2/tables/5/4.2.192.185.table create mode 100644 definitions/grib2/tables/5/4.2.192.186.table create mode 100644 definitions/grib2/tables/5/4.2.192.187.table create mode 100644 definitions/grib2/tables/5/4.2.192.188.table create mode 100644 definitions/grib2/tables/5/4.2.192.189.table create mode 100644 definitions/grib2/tables/5/4.2.192.19.table create mode 100644 definitions/grib2/tables/5/4.2.192.190.table create mode 100644 definitions/grib2/tables/5/4.2.192.191.table create mode 100644 definitions/grib2/tables/5/4.2.192.192.table create mode 100644 definitions/grib2/tables/5/4.2.192.193.table create mode 100644 definitions/grib2/tables/5/4.2.192.194.table create mode 100644 definitions/grib2/tables/5/4.2.192.195.table create mode 100644 definitions/grib2/tables/5/4.2.192.196.table create mode 100644 definitions/grib2/tables/5/4.2.192.197.table create mode 100644 definitions/grib2/tables/5/4.2.192.198.table create mode 100644 definitions/grib2/tables/5/4.2.192.199.table create mode 100644 definitions/grib2/tables/5/4.2.192.2.table create mode 100644 definitions/grib2/tables/5/4.2.192.20.table create mode 100644 definitions/grib2/tables/5/4.2.192.200.table create mode 100644 definitions/grib2/tables/5/4.2.192.201.table create mode 100644 definitions/grib2/tables/5/4.2.192.202.table create mode 100644 definitions/grib2/tables/5/4.2.192.203.table create mode 100644 definitions/grib2/tables/5/4.2.192.204.table create mode 100644 definitions/grib2/tables/5/4.2.192.205.table create mode 100644 definitions/grib2/tables/5/4.2.192.206.table create mode 100644 definitions/grib2/tables/5/4.2.192.207.table create mode 100644 definitions/grib2/tables/5/4.2.192.208.table create mode 100644 definitions/grib2/tables/5/4.2.192.209.table create mode 100644 definitions/grib2/tables/5/4.2.192.21.table create mode 100644 definitions/grib2/tables/5/4.2.192.210.table create mode 100644 definitions/grib2/tables/5/4.2.192.211.table create mode 100644 definitions/grib2/tables/5/4.2.192.212.table create mode 100644 definitions/grib2/tables/5/4.2.192.213.table create mode 100644 definitions/grib2/tables/5/4.2.192.214.table create mode 100644 definitions/grib2/tables/5/4.2.192.215.table create mode 100644 definitions/grib2/tables/5/4.2.192.216.table create mode 100644 definitions/grib2/tables/5/4.2.192.217.table create mode 100644 definitions/grib2/tables/5/4.2.192.218.table create mode 100644 definitions/grib2/tables/5/4.2.192.219.table create mode 100644 definitions/grib2/tables/5/4.2.192.22.table create mode 100644 definitions/grib2/tables/5/4.2.192.220.table create mode 100644 definitions/grib2/tables/5/4.2.192.221.table create mode 100644 definitions/grib2/tables/5/4.2.192.222.table create mode 100644 definitions/grib2/tables/5/4.2.192.223.table create mode 100644 definitions/grib2/tables/5/4.2.192.224.table create mode 100644 definitions/grib2/tables/5/4.2.192.225.table create mode 100644 definitions/grib2/tables/5/4.2.192.226.table create mode 100644 definitions/grib2/tables/5/4.2.192.227.table create mode 100644 definitions/grib2/tables/5/4.2.192.228.table create mode 100644 definitions/grib2/tables/5/4.2.192.229.table create mode 100644 definitions/grib2/tables/5/4.2.192.23.table create mode 100644 definitions/grib2/tables/5/4.2.192.230.table create mode 100644 definitions/grib2/tables/5/4.2.192.231.table create mode 100644 definitions/grib2/tables/5/4.2.192.232.table create mode 100644 definitions/grib2/tables/5/4.2.192.233.table create mode 100644 definitions/grib2/tables/5/4.2.192.234.table create mode 100644 definitions/grib2/tables/5/4.2.192.235.table create mode 100644 definitions/grib2/tables/5/4.2.192.236.table create mode 100644 definitions/grib2/tables/5/4.2.192.237.table create mode 100644 definitions/grib2/tables/5/4.2.192.238.table create mode 100644 definitions/grib2/tables/5/4.2.192.239.table create mode 100644 definitions/grib2/tables/5/4.2.192.24.table create mode 100644 definitions/grib2/tables/5/4.2.192.240.table create mode 100644 definitions/grib2/tables/5/4.2.192.241.table create mode 100644 definitions/grib2/tables/5/4.2.192.242.table create mode 100644 definitions/grib2/tables/5/4.2.192.243.table create mode 100644 definitions/grib2/tables/5/4.2.192.244.table create mode 100644 definitions/grib2/tables/5/4.2.192.245.table create mode 100644 definitions/grib2/tables/5/4.2.192.246.table create mode 100644 definitions/grib2/tables/5/4.2.192.247.table create mode 100644 definitions/grib2/tables/5/4.2.192.248.table create mode 100644 definitions/grib2/tables/5/4.2.192.249.table create mode 100644 definitions/grib2/tables/5/4.2.192.25.table create mode 100644 definitions/grib2/tables/5/4.2.192.250.table create mode 100644 definitions/grib2/tables/5/4.2.192.251.table create mode 100644 definitions/grib2/tables/5/4.2.192.252.table create mode 100644 definitions/grib2/tables/5/4.2.192.253.table create mode 100644 definitions/grib2/tables/5/4.2.192.254.table create mode 100644 definitions/grib2/tables/5/4.2.192.255.table create mode 100644 definitions/grib2/tables/5/4.2.192.26.table create mode 100644 definitions/grib2/tables/5/4.2.192.27.table create mode 100644 definitions/grib2/tables/5/4.2.192.28.table create mode 100644 definitions/grib2/tables/5/4.2.192.29.table create mode 100644 definitions/grib2/tables/5/4.2.192.3.table create mode 100644 definitions/grib2/tables/5/4.2.192.30.table create mode 100644 definitions/grib2/tables/5/4.2.192.31.table create mode 100644 definitions/grib2/tables/5/4.2.192.32.table create mode 100644 definitions/grib2/tables/5/4.2.192.33.table create mode 100644 definitions/grib2/tables/5/4.2.192.34.table create mode 100644 definitions/grib2/tables/5/4.2.192.35.table create mode 100644 definitions/grib2/tables/5/4.2.192.36.table create mode 100644 definitions/grib2/tables/5/4.2.192.37.table create mode 100644 definitions/grib2/tables/5/4.2.192.38.table create mode 100644 definitions/grib2/tables/5/4.2.192.39.table create mode 100644 definitions/grib2/tables/5/4.2.192.4.table create mode 100644 definitions/grib2/tables/5/4.2.192.40.table create mode 100644 definitions/grib2/tables/5/4.2.192.41.table create mode 100644 definitions/grib2/tables/5/4.2.192.42.table create mode 100644 definitions/grib2/tables/5/4.2.192.43.table create mode 100644 definitions/grib2/tables/5/4.2.192.44.table create mode 100644 definitions/grib2/tables/5/4.2.192.45.table create mode 100644 definitions/grib2/tables/5/4.2.192.46.table create mode 100644 definitions/grib2/tables/5/4.2.192.47.table create mode 100644 definitions/grib2/tables/5/4.2.192.48.table create mode 100644 definitions/grib2/tables/5/4.2.192.49.table create mode 100644 definitions/grib2/tables/5/4.2.192.5.table create mode 100644 definitions/grib2/tables/5/4.2.192.50.table create mode 100644 definitions/grib2/tables/5/4.2.192.51.table create mode 100644 definitions/grib2/tables/5/4.2.192.52.table create mode 100644 definitions/grib2/tables/5/4.2.192.53.table create mode 100644 definitions/grib2/tables/5/4.2.192.54.table create mode 100644 definitions/grib2/tables/5/4.2.192.55.table create mode 100644 definitions/grib2/tables/5/4.2.192.56.table create mode 100644 definitions/grib2/tables/5/4.2.192.57.table create mode 100644 definitions/grib2/tables/5/4.2.192.58.table create mode 100644 definitions/grib2/tables/5/4.2.192.59.table create mode 100644 definitions/grib2/tables/5/4.2.192.6.table create mode 100644 definitions/grib2/tables/5/4.2.192.60.table create mode 100644 definitions/grib2/tables/5/4.2.192.61.table create mode 100644 definitions/grib2/tables/5/4.2.192.62.table create mode 100644 definitions/grib2/tables/5/4.2.192.63.table create mode 100644 definitions/grib2/tables/5/4.2.192.64.table create mode 100644 definitions/grib2/tables/5/4.2.192.65.table create mode 100644 definitions/grib2/tables/5/4.2.192.66.table create mode 100644 definitions/grib2/tables/5/4.2.192.67.table create mode 100644 definitions/grib2/tables/5/4.2.192.68.table create mode 100644 definitions/grib2/tables/5/4.2.192.69.table create mode 100644 definitions/grib2/tables/5/4.2.192.7.table create mode 100644 definitions/grib2/tables/5/4.2.192.70.table create mode 100644 definitions/grib2/tables/5/4.2.192.71.table create mode 100644 definitions/grib2/tables/5/4.2.192.72.table create mode 100644 definitions/grib2/tables/5/4.2.192.73.table create mode 100644 definitions/grib2/tables/5/4.2.192.74.table create mode 100644 definitions/grib2/tables/5/4.2.192.75.table create mode 100644 definitions/grib2/tables/5/4.2.192.76.table create mode 100644 definitions/grib2/tables/5/4.2.192.77.table create mode 100644 definitions/grib2/tables/5/4.2.192.78.table create mode 100644 definitions/grib2/tables/5/4.2.192.79.table create mode 100644 definitions/grib2/tables/5/4.2.192.8.table create mode 100644 definitions/grib2/tables/5/4.2.192.80.table create mode 100644 definitions/grib2/tables/5/4.2.192.81.table create mode 100644 definitions/grib2/tables/5/4.2.192.82.table create mode 100644 definitions/grib2/tables/5/4.2.192.83.table create mode 100644 definitions/grib2/tables/5/4.2.192.84.table create mode 100644 definitions/grib2/tables/5/4.2.192.85.table create mode 100644 definitions/grib2/tables/5/4.2.192.86.table create mode 100644 definitions/grib2/tables/5/4.2.192.87.table create mode 100644 definitions/grib2/tables/5/4.2.192.88.table create mode 100644 definitions/grib2/tables/5/4.2.192.89.table create mode 100644 definitions/grib2/tables/5/4.2.192.9.table create mode 100644 definitions/grib2/tables/5/4.2.192.90.table create mode 100644 definitions/grib2/tables/5/4.2.192.91.table create mode 100644 definitions/grib2/tables/5/4.2.192.92.table create mode 100644 definitions/grib2/tables/5/4.2.192.93.table create mode 100644 definitions/grib2/tables/5/4.2.192.94.table create mode 100644 definitions/grib2/tables/5/4.2.192.95.table create mode 100644 definitions/grib2/tables/5/4.2.192.96.table create mode 100644 definitions/grib2/tables/5/4.2.192.97.table create mode 100644 definitions/grib2/tables/5/4.2.192.98.table create mode 100644 definitions/grib2/tables/5/4.2.192.99.table create mode 100644 definitions/grib2/tables/5/4.2.2.0.table create mode 100644 definitions/grib2/tables/5/4.2.2.3.table create mode 100644 definitions/grib2/tables/5/4.2.3.0.table create mode 100644 definitions/grib2/tables/5/4.2.3.1.table create mode 100644 definitions/grib2/tables/5/4.2.table create mode 100644 definitions/grib2/tables/5/4.201.table create mode 100644 definitions/grib2/tables/5/4.202.table create mode 100644 definitions/grib2/tables/5/4.203.table create mode 100644 definitions/grib2/tables/5/4.204.table create mode 100644 definitions/grib2/tables/5/4.205.table create mode 100644 definitions/grib2/tables/5/4.206.table create mode 100644 definitions/grib2/tables/5/4.207.table create mode 100644 definitions/grib2/tables/5/4.208.table create mode 100644 definitions/grib2/tables/5/4.209.table create mode 100644 definitions/grib2/tables/5/4.210.table create mode 100644 definitions/grib2/tables/5/4.211.table create mode 100644 definitions/grib2/tables/5/4.212.table create mode 100644 definitions/grib2/tables/5/4.213.table create mode 100644 definitions/grib2/tables/5/4.215.table create mode 100644 definitions/grib2/tables/5/4.216.table create mode 100644 definitions/grib2/tables/5/4.217.table create mode 100644 definitions/grib2/tables/5/4.218.table create mode 100644 definitions/grib2/tables/5/4.219.table create mode 100644 definitions/grib2/tables/5/4.220.table create mode 100644 definitions/grib2/tables/5/4.221.table create mode 100644 definitions/grib2/tables/5/4.222.table create mode 100644 definitions/grib2/tables/5/4.223.table create mode 100644 definitions/grib2/tables/5/4.230.table create mode 100644 definitions/grib2/tables/5/4.3.table create mode 100644 definitions/grib2/tables/5/4.4.table create mode 100644 definitions/grib2/tables/5/4.5.table create mode 100644 definitions/grib2/tables/5/4.6.table create mode 100644 definitions/grib2/tables/5/4.7.table create mode 100644 definitions/grib2/tables/5/4.8.table create mode 100644 definitions/grib2/tables/5/4.9.table create mode 100644 definitions/grib2/tables/5/4.91.table create mode 100644 definitions/grib2/tables/5/5.0.table create mode 100644 definitions/grib2/tables/5/5.1.table create mode 100644 definitions/grib2/tables/5/5.2.table create mode 100644 definitions/grib2/tables/5/5.3.table create mode 100644 definitions/grib2/tables/5/5.4.table create mode 100644 definitions/grib2/tables/5/5.40.table create mode 100644 definitions/grib2/tables/5/5.40000.table create mode 100644 definitions/grib2/tables/5/5.5.table create mode 100644 definitions/grib2/tables/5/5.50002.table create mode 100644 definitions/grib2/tables/5/5.6.table create mode 100644 definitions/grib2/tables/5/5.7.table create mode 100644 definitions/grib2/tables/5/5.8.table create mode 100644 definitions/grib2/tables/5/5.9.table create mode 100644 definitions/grib2/tables/5/6.0.table create mode 100644 definitions/grib2/tables/5/stepType.table create mode 100644 definitions/grib2/tables/6/0.0.table create mode 100644 definitions/grib2/tables/6/1.0.table create mode 100644 definitions/grib2/tables/6/1.1.table create mode 100644 definitions/grib2/tables/6/1.2.table create mode 100644 definitions/grib2/tables/6/1.3.table create mode 100644 definitions/grib2/tables/6/1.4.table create mode 100644 definitions/grib2/tables/6/1.4.table~ create mode 100644 definitions/grib2/tables/6/3.0.table create mode 100644 definitions/grib2/tables/6/3.1.table create mode 100644 definitions/grib2/tables/6/3.10.table create mode 100644 definitions/grib2/tables/6/3.11.table create mode 100644 definitions/grib2/tables/6/3.15.table create mode 100644 definitions/grib2/tables/6/3.2.table create mode 100644 definitions/grib2/tables/6/3.20.table create mode 100644 definitions/grib2/tables/6/3.21.table create mode 100644 definitions/grib2/tables/6/3.3.table create mode 100644 definitions/grib2/tables/6/3.4.table create mode 100644 definitions/grib2/tables/6/3.5.table create mode 100644 definitions/grib2/tables/6/3.6.table create mode 100644 definitions/grib2/tables/6/3.7.table create mode 100644 definitions/grib2/tables/6/3.8.table create mode 100644 definitions/grib2/tables/6/3.9.table create mode 100644 definitions/grib2/tables/6/4.0.table create mode 100644 definitions/grib2/tables/6/4.1.0.table create mode 100644 definitions/grib2/tables/6/4.1.1.table create mode 100644 definitions/grib2/tables/6/4.1.10.table create mode 100644 definitions/grib2/tables/6/4.1.192.table create mode 100644 definitions/grib2/tables/6/4.1.2.table create mode 100644 definitions/grib2/tables/6/4.1.3.table create mode 100644 definitions/grib2/tables/6/4.1.table create mode 100644 definitions/grib2/tables/6/4.10.table create mode 100644 definitions/grib2/tables/6/4.11.table create mode 100644 definitions/grib2/tables/6/4.12.table create mode 100644 definitions/grib2/tables/6/4.13.table create mode 100644 definitions/grib2/tables/6/4.14.table create mode 100644 definitions/grib2/tables/6/4.15.table create mode 100644 definitions/grib2/tables/6/4.151.table create mode 100644 definitions/grib2/tables/6/4.192.table create mode 100644 definitions/grib2/tables/6/4.2.0.0.table create mode 100644 definitions/grib2/tables/6/4.2.0.1.table create mode 100644 definitions/grib2/tables/6/4.2.0.13.table create mode 100644 definitions/grib2/tables/6/4.2.0.14.table create mode 100644 definitions/grib2/tables/6/4.2.0.15.table create mode 100644 definitions/grib2/tables/6/4.2.0.16.table create mode 100644 definitions/grib2/tables/6/4.2.0.18.table create mode 100644 definitions/grib2/tables/6/4.2.0.19.table create mode 100644 definitions/grib2/tables/6/4.2.0.190.table create mode 100644 definitions/grib2/tables/6/4.2.0.191.table create mode 100644 definitions/grib2/tables/6/4.2.0.2.table create mode 100644 definitions/grib2/tables/6/4.2.0.20.table create mode 100644 definitions/grib2/tables/6/4.2.0.20.table~ create mode 100644 definitions/grib2/tables/6/4.2.0.3.table create mode 100644 definitions/grib2/tables/6/4.2.0.4.table create mode 100644 definitions/grib2/tables/6/4.2.0.5.table create mode 100644 definitions/grib2/tables/6/4.2.0.6.table create mode 100644 definitions/grib2/tables/6/4.2.0.7.table create mode 100644 definitions/grib2/tables/6/4.2.1.0.table create mode 100644 definitions/grib2/tables/6/4.2.1.1.table create mode 100644 definitions/grib2/tables/6/4.2.10.0.table create mode 100644 definitions/grib2/tables/6/4.2.10.1.table create mode 100644 definitions/grib2/tables/6/4.2.10.191.table create mode 100644 definitions/grib2/tables/6/4.2.10.2.table create mode 100644 definitions/grib2/tables/6/4.2.10.3.table create mode 100644 definitions/grib2/tables/6/4.2.10.4.table create mode 100644 definitions/grib2/tables/6/4.2.192.0.table create mode 100644 definitions/grib2/tables/6/4.2.192.1.table create mode 100644 definitions/grib2/tables/6/4.2.192.10.table create mode 100644 definitions/grib2/tables/6/4.2.192.100.table create mode 100644 definitions/grib2/tables/6/4.2.192.101.table create mode 100644 definitions/grib2/tables/6/4.2.192.102.table create mode 100644 definitions/grib2/tables/6/4.2.192.103.table create mode 100644 definitions/grib2/tables/6/4.2.192.104.table create mode 100644 definitions/grib2/tables/6/4.2.192.105.table create mode 100644 definitions/grib2/tables/6/4.2.192.106.table create mode 100644 definitions/grib2/tables/6/4.2.192.107.table create mode 100644 definitions/grib2/tables/6/4.2.192.108.table create mode 100644 definitions/grib2/tables/6/4.2.192.109.table create mode 100644 definitions/grib2/tables/6/4.2.192.11.table create mode 100644 definitions/grib2/tables/6/4.2.192.110.table create mode 100644 definitions/grib2/tables/6/4.2.192.111.table create mode 100644 definitions/grib2/tables/6/4.2.192.112.table create mode 100644 definitions/grib2/tables/6/4.2.192.113.table create mode 100644 definitions/grib2/tables/6/4.2.192.114.table create mode 100644 definitions/grib2/tables/6/4.2.192.115.table create mode 100644 definitions/grib2/tables/6/4.2.192.116.table create mode 100644 definitions/grib2/tables/6/4.2.192.117.table create mode 100644 definitions/grib2/tables/6/4.2.192.118.table create mode 100644 definitions/grib2/tables/6/4.2.192.119.table create mode 100644 definitions/grib2/tables/6/4.2.192.12.table create mode 100644 definitions/grib2/tables/6/4.2.192.120.table create mode 100644 definitions/grib2/tables/6/4.2.192.121.table create mode 100644 definitions/grib2/tables/6/4.2.192.122.table create mode 100644 definitions/grib2/tables/6/4.2.192.123.table create mode 100644 definitions/grib2/tables/6/4.2.192.124.table create mode 100644 definitions/grib2/tables/6/4.2.192.125.table create mode 100644 definitions/grib2/tables/6/4.2.192.126.table create mode 100644 definitions/grib2/tables/6/4.2.192.127.table create mode 100644 definitions/grib2/tables/6/4.2.192.128.table create mode 100644 definitions/grib2/tables/6/4.2.192.129.table create mode 100644 definitions/grib2/tables/6/4.2.192.13.table create mode 100644 definitions/grib2/tables/6/4.2.192.130.table create mode 100644 definitions/grib2/tables/6/4.2.192.131.table create mode 100644 definitions/grib2/tables/6/4.2.192.132.table create mode 100644 definitions/grib2/tables/6/4.2.192.133.table create mode 100644 definitions/grib2/tables/6/4.2.192.134.table create mode 100644 definitions/grib2/tables/6/4.2.192.135.table create mode 100644 definitions/grib2/tables/6/4.2.192.136.table create mode 100644 definitions/grib2/tables/6/4.2.192.137.table create mode 100644 definitions/grib2/tables/6/4.2.192.138.table create mode 100644 definitions/grib2/tables/6/4.2.192.139.table create mode 100644 definitions/grib2/tables/6/4.2.192.14.table create mode 100644 definitions/grib2/tables/6/4.2.192.140.table create mode 100644 definitions/grib2/tables/6/4.2.192.141.table create mode 100644 definitions/grib2/tables/6/4.2.192.142.table create mode 100644 definitions/grib2/tables/6/4.2.192.143.table create mode 100644 definitions/grib2/tables/6/4.2.192.144.table create mode 100644 definitions/grib2/tables/6/4.2.192.145.table create mode 100644 definitions/grib2/tables/6/4.2.192.146.table create mode 100644 definitions/grib2/tables/6/4.2.192.147.table create mode 100644 definitions/grib2/tables/6/4.2.192.148.table create mode 100644 definitions/grib2/tables/6/4.2.192.149.table create mode 100644 definitions/grib2/tables/6/4.2.192.15.table create mode 100644 definitions/grib2/tables/6/4.2.192.150.table create mode 100644 definitions/grib2/tables/6/4.2.192.151.table create mode 100644 definitions/grib2/tables/6/4.2.192.152.table create mode 100644 definitions/grib2/tables/6/4.2.192.153.table create mode 100644 definitions/grib2/tables/6/4.2.192.154.table create mode 100644 definitions/grib2/tables/6/4.2.192.155.table create mode 100644 definitions/grib2/tables/6/4.2.192.156.table create mode 100644 definitions/grib2/tables/6/4.2.192.157.table create mode 100644 definitions/grib2/tables/6/4.2.192.158.table create mode 100644 definitions/grib2/tables/6/4.2.192.159.table create mode 100644 definitions/grib2/tables/6/4.2.192.16.table create mode 100644 definitions/grib2/tables/6/4.2.192.160.table create mode 100644 definitions/grib2/tables/6/4.2.192.161.table create mode 100644 definitions/grib2/tables/6/4.2.192.162.table create mode 100644 definitions/grib2/tables/6/4.2.192.163.table create mode 100644 definitions/grib2/tables/6/4.2.192.164.table create mode 100644 definitions/grib2/tables/6/4.2.192.165.table create mode 100644 definitions/grib2/tables/6/4.2.192.166.table create mode 100644 definitions/grib2/tables/6/4.2.192.167.table create mode 100644 definitions/grib2/tables/6/4.2.192.168.table create mode 100644 definitions/grib2/tables/6/4.2.192.169.table create mode 100644 definitions/grib2/tables/6/4.2.192.17.table create mode 100644 definitions/grib2/tables/6/4.2.192.170.table create mode 100644 definitions/grib2/tables/6/4.2.192.171.table create mode 100644 definitions/grib2/tables/6/4.2.192.172.table create mode 100644 definitions/grib2/tables/6/4.2.192.173.table create mode 100644 definitions/grib2/tables/6/4.2.192.174.table create mode 100644 definitions/grib2/tables/6/4.2.192.175.table create mode 100644 definitions/grib2/tables/6/4.2.192.176.table create mode 100644 definitions/grib2/tables/6/4.2.192.177.table create mode 100644 definitions/grib2/tables/6/4.2.192.178.table create mode 100644 definitions/grib2/tables/6/4.2.192.179.table create mode 100644 definitions/grib2/tables/6/4.2.192.18.table create mode 100644 definitions/grib2/tables/6/4.2.192.180.table create mode 100644 definitions/grib2/tables/6/4.2.192.181.table create mode 100644 definitions/grib2/tables/6/4.2.192.182.table create mode 100644 definitions/grib2/tables/6/4.2.192.183.table create mode 100644 definitions/grib2/tables/6/4.2.192.184.table create mode 100644 definitions/grib2/tables/6/4.2.192.185.table create mode 100644 definitions/grib2/tables/6/4.2.192.186.table create mode 100644 definitions/grib2/tables/6/4.2.192.187.table create mode 100644 definitions/grib2/tables/6/4.2.192.188.table create mode 100644 definitions/grib2/tables/6/4.2.192.189.table create mode 100644 definitions/grib2/tables/6/4.2.192.19.table create mode 100644 definitions/grib2/tables/6/4.2.192.190.table create mode 100644 definitions/grib2/tables/6/4.2.192.191.table create mode 100644 definitions/grib2/tables/6/4.2.192.192.table create mode 100644 definitions/grib2/tables/6/4.2.192.193.table create mode 100644 definitions/grib2/tables/6/4.2.192.194.table create mode 100644 definitions/grib2/tables/6/4.2.192.195.table create mode 100644 definitions/grib2/tables/6/4.2.192.196.table create mode 100644 definitions/grib2/tables/6/4.2.192.197.table create mode 100644 definitions/grib2/tables/6/4.2.192.198.table create mode 100644 definitions/grib2/tables/6/4.2.192.199.table create mode 100644 definitions/grib2/tables/6/4.2.192.2.table create mode 100644 definitions/grib2/tables/6/4.2.192.20.table create mode 100644 definitions/grib2/tables/6/4.2.192.200.table create mode 100644 definitions/grib2/tables/6/4.2.192.201.table create mode 100644 definitions/grib2/tables/6/4.2.192.202.table create mode 100644 definitions/grib2/tables/6/4.2.192.203.table create mode 100644 definitions/grib2/tables/6/4.2.192.204.table create mode 100644 definitions/grib2/tables/6/4.2.192.205.table create mode 100644 definitions/grib2/tables/6/4.2.192.206.table create mode 100644 definitions/grib2/tables/6/4.2.192.207.table create mode 100644 definitions/grib2/tables/6/4.2.192.208.table create mode 100644 definitions/grib2/tables/6/4.2.192.209.table create mode 100644 definitions/grib2/tables/6/4.2.192.21.table create mode 100644 definitions/grib2/tables/6/4.2.192.210.table create mode 100644 definitions/grib2/tables/6/4.2.192.211.table create mode 100644 definitions/grib2/tables/6/4.2.192.212.table create mode 100644 definitions/grib2/tables/6/4.2.192.213.table create mode 100644 definitions/grib2/tables/6/4.2.192.214.table create mode 100644 definitions/grib2/tables/6/4.2.192.215.table create mode 100644 definitions/grib2/tables/6/4.2.192.216.table create mode 100644 definitions/grib2/tables/6/4.2.192.217.table create mode 100644 definitions/grib2/tables/6/4.2.192.218.table create mode 100644 definitions/grib2/tables/6/4.2.192.219.table create mode 100644 definitions/grib2/tables/6/4.2.192.22.table create mode 100644 definitions/grib2/tables/6/4.2.192.220.table create mode 100644 definitions/grib2/tables/6/4.2.192.221.table create mode 100644 definitions/grib2/tables/6/4.2.192.222.table create mode 100644 definitions/grib2/tables/6/4.2.192.223.table create mode 100644 definitions/grib2/tables/6/4.2.192.224.table create mode 100644 definitions/grib2/tables/6/4.2.192.225.table create mode 100644 definitions/grib2/tables/6/4.2.192.226.table create mode 100644 definitions/grib2/tables/6/4.2.192.227.table create mode 100644 definitions/grib2/tables/6/4.2.192.228.table create mode 100644 definitions/grib2/tables/6/4.2.192.229.table create mode 100644 definitions/grib2/tables/6/4.2.192.23.table create mode 100644 definitions/grib2/tables/6/4.2.192.230.table create mode 100644 definitions/grib2/tables/6/4.2.192.231.table create mode 100644 definitions/grib2/tables/6/4.2.192.232.table create mode 100644 definitions/grib2/tables/6/4.2.192.233.table create mode 100644 definitions/grib2/tables/6/4.2.192.234.table create mode 100644 definitions/grib2/tables/6/4.2.192.235.table create mode 100644 definitions/grib2/tables/6/4.2.192.236.table create mode 100644 definitions/grib2/tables/6/4.2.192.237.table create mode 100644 definitions/grib2/tables/6/4.2.192.238.table create mode 100644 definitions/grib2/tables/6/4.2.192.239.table create mode 100644 definitions/grib2/tables/6/4.2.192.24.table create mode 100644 definitions/grib2/tables/6/4.2.192.240.table create mode 100644 definitions/grib2/tables/6/4.2.192.241.table create mode 100644 definitions/grib2/tables/6/4.2.192.242.table create mode 100644 definitions/grib2/tables/6/4.2.192.243.table create mode 100644 definitions/grib2/tables/6/4.2.192.244.table create mode 100644 definitions/grib2/tables/6/4.2.192.245.table create mode 100644 definitions/grib2/tables/6/4.2.192.246.table create mode 100644 definitions/grib2/tables/6/4.2.192.247.table create mode 100644 definitions/grib2/tables/6/4.2.192.248.table create mode 100644 definitions/grib2/tables/6/4.2.192.249.table create mode 100644 definitions/grib2/tables/6/4.2.192.25.table create mode 100644 definitions/grib2/tables/6/4.2.192.250.table create mode 100644 definitions/grib2/tables/6/4.2.192.251.table create mode 100644 definitions/grib2/tables/6/4.2.192.252.table create mode 100644 definitions/grib2/tables/6/4.2.192.253.table create mode 100644 definitions/grib2/tables/6/4.2.192.254.table create mode 100644 definitions/grib2/tables/6/4.2.192.255.table create mode 100644 definitions/grib2/tables/6/4.2.192.26.table create mode 100644 definitions/grib2/tables/6/4.2.192.27.table create mode 100644 definitions/grib2/tables/6/4.2.192.28.table create mode 100644 definitions/grib2/tables/6/4.2.192.29.table create mode 100644 definitions/grib2/tables/6/4.2.192.3.table create mode 100644 definitions/grib2/tables/6/4.2.192.30.table create mode 100644 definitions/grib2/tables/6/4.2.192.31.table create mode 100644 definitions/grib2/tables/6/4.2.192.32.table create mode 100644 definitions/grib2/tables/6/4.2.192.33.table create mode 100644 definitions/grib2/tables/6/4.2.192.34.table create mode 100644 definitions/grib2/tables/6/4.2.192.35.table create mode 100644 definitions/grib2/tables/6/4.2.192.36.table create mode 100644 definitions/grib2/tables/6/4.2.192.37.table create mode 100644 definitions/grib2/tables/6/4.2.192.38.table create mode 100644 definitions/grib2/tables/6/4.2.192.39.table create mode 100644 definitions/grib2/tables/6/4.2.192.4.table create mode 100644 definitions/grib2/tables/6/4.2.192.40.table create mode 100644 definitions/grib2/tables/6/4.2.192.41.table create mode 100644 definitions/grib2/tables/6/4.2.192.42.table create mode 100644 definitions/grib2/tables/6/4.2.192.43.table create mode 100644 definitions/grib2/tables/6/4.2.192.44.table create mode 100644 definitions/grib2/tables/6/4.2.192.45.table create mode 100644 definitions/grib2/tables/6/4.2.192.46.table create mode 100644 definitions/grib2/tables/6/4.2.192.47.table create mode 100644 definitions/grib2/tables/6/4.2.192.48.table create mode 100644 definitions/grib2/tables/6/4.2.192.49.table create mode 100644 definitions/grib2/tables/6/4.2.192.5.table create mode 100644 definitions/grib2/tables/6/4.2.192.50.table create mode 100644 definitions/grib2/tables/6/4.2.192.51.table create mode 100644 definitions/grib2/tables/6/4.2.192.52.table create mode 100644 definitions/grib2/tables/6/4.2.192.53.table create mode 100644 definitions/grib2/tables/6/4.2.192.54.table create mode 100644 definitions/grib2/tables/6/4.2.192.55.table create mode 100644 definitions/grib2/tables/6/4.2.192.56.table create mode 100644 definitions/grib2/tables/6/4.2.192.57.table create mode 100644 definitions/grib2/tables/6/4.2.192.58.table create mode 100644 definitions/grib2/tables/6/4.2.192.59.table create mode 100644 definitions/grib2/tables/6/4.2.192.6.table create mode 100644 definitions/grib2/tables/6/4.2.192.60.table create mode 100644 definitions/grib2/tables/6/4.2.192.61.table create mode 100644 definitions/grib2/tables/6/4.2.192.62.table create mode 100644 definitions/grib2/tables/6/4.2.192.63.table create mode 100644 definitions/grib2/tables/6/4.2.192.64.table create mode 100644 definitions/grib2/tables/6/4.2.192.65.table create mode 100644 definitions/grib2/tables/6/4.2.192.66.table create mode 100644 definitions/grib2/tables/6/4.2.192.67.table create mode 100644 definitions/grib2/tables/6/4.2.192.68.table create mode 100644 definitions/grib2/tables/6/4.2.192.69.table create mode 100644 definitions/grib2/tables/6/4.2.192.7.table create mode 100644 definitions/grib2/tables/6/4.2.192.70.table create mode 100644 definitions/grib2/tables/6/4.2.192.71.table create mode 100644 definitions/grib2/tables/6/4.2.192.72.table create mode 100644 definitions/grib2/tables/6/4.2.192.73.table create mode 100644 definitions/grib2/tables/6/4.2.192.74.table create mode 100644 definitions/grib2/tables/6/4.2.192.75.table create mode 100644 definitions/grib2/tables/6/4.2.192.76.table create mode 100644 definitions/grib2/tables/6/4.2.192.77.table create mode 100644 definitions/grib2/tables/6/4.2.192.78.table create mode 100644 definitions/grib2/tables/6/4.2.192.79.table create mode 100644 definitions/grib2/tables/6/4.2.192.8.table create mode 100644 definitions/grib2/tables/6/4.2.192.80.table create mode 100644 definitions/grib2/tables/6/4.2.192.81.table create mode 100644 definitions/grib2/tables/6/4.2.192.82.table create mode 100644 definitions/grib2/tables/6/4.2.192.83.table create mode 100644 definitions/grib2/tables/6/4.2.192.84.table create mode 100644 definitions/grib2/tables/6/4.2.192.85.table create mode 100644 definitions/grib2/tables/6/4.2.192.86.table create mode 100644 definitions/grib2/tables/6/4.2.192.87.table create mode 100644 definitions/grib2/tables/6/4.2.192.88.table create mode 100644 definitions/grib2/tables/6/4.2.192.89.table create mode 100644 definitions/grib2/tables/6/4.2.192.9.table create mode 100644 definitions/grib2/tables/6/4.2.192.90.table create mode 100644 definitions/grib2/tables/6/4.2.192.91.table create mode 100644 definitions/grib2/tables/6/4.2.192.92.table create mode 100644 definitions/grib2/tables/6/4.2.192.93.table create mode 100644 definitions/grib2/tables/6/4.2.192.94.table create mode 100644 definitions/grib2/tables/6/4.2.192.95.table create mode 100644 definitions/grib2/tables/6/4.2.192.96.table create mode 100644 definitions/grib2/tables/6/4.2.192.97.table create mode 100644 definitions/grib2/tables/6/4.2.192.98.table create mode 100644 definitions/grib2/tables/6/4.2.192.99.table create mode 100644 definitions/grib2/tables/6/4.2.2.0.table create mode 100644 definitions/grib2/tables/6/4.2.2.3.table create mode 100644 definitions/grib2/tables/6/4.2.2.4.table create mode 100644 definitions/grib2/tables/6/4.2.3.0.table create mode 100644 definitions/grib2/tables/6/4.2.3.1.table create mode 100644 definitions/grib2/tables/6/4.2.table create mode 100644 definitions/grib2/tables/6/4.201.table create mode 100644 definitions/grib2/tables/6/4.202.table create mode 100644 definitions/grib2/tables/6/4.203.table create mode 100644 definitions/grib2/tables/6/4.204.table create mode 100644 definitions/grib2/tables/6/4.205.table create mode 100644 definitions/grib2/tables/6/4.206.table create mode 100644 definitions/grib2/tables/6/4.207.table create mode 100644 definitions/grib2/tables/6/4.208.table create mode 100644 definitions/grib2/tables/6/4.209.table create mode 100644 definitions/grib2/tables/6/4.210.table create mode 100644 definitions/grib2/tables/6/4.211.table create mode 100644 definitions/grib2/tables/6/4.212.table create mode 100644 definitions/grib2/tables/6/4.213.table create mode 100644 definitions/grib2/tables/6/4.215.table create mode 100644 definitions/grib2/tables/6/4.216.table create mode 100644 definitions/grib2/tables/6/4.217.table create mode 100644 definitions/grib2/tables/6/4.218.table create mode 100644 definitions/grib2/tables/6/4.219.table create mode 100644 definitions/grib2/tables/6/4.220.table create mode 100644 definitions/grib2/tables/6/4.221.table create mode 100644 definitions/grib2/tables/6/4.222.table create mode 100644 definitions/grib2/tables/6/4.223.table create mode 100644 definitions/grib2/tables/6/4.230.table create mode 100644 definitions/grib2/tables/6/4.3.table create mode 100644 definitions/grib2/tables/6/4.4.table create mode 100644 definitions/grib2/tables/6/4.5.table create mode 100644 definitions/grib2/tables/6/4.6.table create mode 100644 definitions/grib2/tables/6/4.7.table create mode 100644 definitions/grib2/tables/6/4.8.table create mode 100644 definitions/grib2/tables/6/4.9.table create mode 100644 definitions/grib2/tables/6/4.91.table create mode 100644 definitions/grib2/tables/6/5.0.table create mode 100644 definitions/grib2/tables/6/5.1.table create mode 100644 definitions/grib2/tables/6/5.2.table create mode 100644 definitions/grib2/tables/6/5.3.table create mode 100644 definitions/grib2/tables/6/5.4.table create mode 100644 definitions/grib2/tables/6/5.40.table create mode 100644 definitions/grib2/tables/6/5.40000.table create mode 100644 definitions/grib2/tables/6/5.5.table create mode 100644 definitions/grib2/tables/6/5.50002.table create mode 100644 definitions/grib2/tables/6/5.6.table create mode 100644 definitions/grib2/tables/6/5.7.table create mode 100644 definitions/grib2/tables/6/5.8.table create mode 100644 definitions/grib2/tables/6/5.9.table create mode 100644 definitions/grib2/tables/6/6.0.table create mode 100644 definitions/grib2/tables/6/stepType.table create mode 100644 definitions/grib2/tables/7/0.0.table create mode 100644 definitions/grib2/tables/7/1.0.table create mode 100644 definitions/grib2/tables/7/1.1.table create mode 100644 definitions/grib2/tables/7/1.2.table create mode 100644 definitions/grib2/tables/7/1.3.table create mode 100644 definitions/grib2/tables/7/1.4.table create mode 100644 definitions/grib2/tables/7/1.4.table~ create mode 100644 definitions/grib2/tables/7/3.0.table create mode 100644 definitions/grib2/tables/7/3.1.table create mode 100644 definitions/grib2/tables/7/3.10.table create mode 100644 definitions/grib2/tables/7/3.11.table create mode 100644 definitions/grib2/tables/7/3.15.table create mode 100644 definitions/grib2/tables/7/3.2.table create mode 100644 definitions/grib2/tables/7/3.20.table create mode 100644 definitions/grib2/tables/7/3.21.table create mode 100644 definitions/grib2/tables/7/3.3.table create mode 100644 definitions/grib2/tables/7/3.4.table create mode 100644 definitions/grib2/tables/7/3.5.table create mode 100644 definitions/grib2/tables/7/3.6.table create mode 100644 definitions/grib2/tables/7/3.7.table create mode 100644 definitions/grib2/tables/7/3.8.table create mode 100644 definitions/grib2/tables/7/3.9.table create mode 100644 definitions/grib2/tables/7/4.0.table create mode 100644 definitions/grib2/tables/7/4.1.0.table create mode 100644 definitions/grib2/tables/7/4.1.1.table create mode 100644 definitions/grib2/tables/7/4.1.10.table create mode 100644 definitions/grib2/tables/7/4.1.192.table create mode 100644 definitions/grib2/tables/7/4.1.2.table create mode 100644 definitions/grib2/tables/7/4.1.3.table create mode 100644 definitions/grib2/tables/7/4.1.table create mode 100644 definitions/grib2/tables/7/4.10.table create mode 100644 definitions/grib2/tables/7/4.11.table create mode 100644 definitions/grib2/tables/7/4.12.table create mode 100644 definitions/grib2/tables/7/4.13.table create mode 100644 definitions/grib2/tables/7/4.14.table create mode 100644 definitions/grib2/tables/7/4.15.table create mode 100644 definitions/grib2/tables/7/4.151.table create mode 100644 definitions/grib2/tables/7/4.192.table create mode 100644 definitions/grib2/tables/7/4.2.0.0.table create mode 100644 definitions/grib2/tables/7/4.2.0.1.table create mode 100644 definitions/grib2/tables/7/4.2.0.13.table create mode 100644 definitions/grib2/tables/7/4.2.0.14.table create mode 100644 definitions/grib2/tables/7/4.2.0.15.table create mode 100644 definitions/grib2/tables/7/4.2.0.16.table create mode 100644 definitions/grib2/tables/7/4.2.0.18.table create mode 100644 definitions/grib2/tables/7/4.2.0.19.table create mode 100644 definitions/grib2/tables/7/4.2.0.190.table create mode 100644 definitions/grib2/tables/7/4.2.0.191.table create mode 100644 definitions/grib2/tables/7/4.2.0.2.table create mode 100644 definitions/grib2/tables/7/4.2.0.20.table create mode 100644 definitions/grib2/tables/7/4.2.0.20.table~ create mode 100644 definitions/grib2/tables/7/4.2.0.3.table create mode 100644 definitions/grib2/tables/7/4.2.0.4.table create mode 100644 definitions/grib2/tables/7/4.2.0.5.table create mode 100644 definitions/grib2/tables/7/4.2.0.6.table create mode 100644 definitions/grib2/tables/7/4.2.0.7.table create mode 100644 definitions/grib2/tables/7/4.2.1.0.table create mode 100644 definitions/grib2/tables/7/4.2.1.1.table create mode 100644 definitions/grib2/tables/7/4.2.10.0.table create mode 100644 definitions/grib2/tables/7/4.2.10.1.table create mode 100644 definitions/grib2/tables/7/4.2.10.191.table create mode 100644 definitions/grib2/tables/7/4.2.10.2.table create mode 100644 definitions/grib2/tables/7/4.2.10.3.table create mode 100644 definitions/grib2/tables/7/4.2.10.4.table create mode 100644 definitions/grib2/tables/7/4.2.192.0.table create mode 100644 definitions/grib2/tables/7/4.2.192.1.table create mode 100644 definitions/grib2/tables/7/4.2.192.10.table create mode 100644 definitions/grib2/tables/7/4.2.192.100.table create mode 100644 definitions/grib2/tables/7/4.2.192.101.table create mode 100644 definitions/grib2/tables/7/4.2.192.102.table create mode 100644 definitions/grib2/tables/7/4.2.192.103.table create mode 100644 definitions/grib2/tables/7/4.2.192.104.table create mode 100644 definitions/grib2/tables/7/4.2.192.105.table create mode 100644 definitions/grib2/tables/7/4.2.192.106.table create mode 100644 definitions/grib2/tables/7/4.2.192.107.table create mode 100644 definitions/grib2/tables/7/4.2.192.108.table create mode 100644 definitions/grib2/tables/7/4.2.192.109.table create mode 100644 definitions/grib2/tables/7/4.2.192.11.table create mode 100644 definitions/grib2/tables/7/4.2.192.110.table create mode 100644 definitions/grib2/tables/7/4.2.192.111.table create mode 100644 definitions/grib2/tables/7/4.2.192.112.table create mode 100644 definitions/grib2/tables/7/4.2.192.113.table create mode 100644 definitions/grib2/tables/7/4.2.192.114.table create mode 100644 definitions/grib2/tables/7/4.2.192.115.table create mode 100644 definitions/grib2/tables/7/4.2.192.116.table create mode 100644 definitions/grib2/tables/7/4.2.192.117.table create mode 100644 definitions/grib2/tables/7/4.2.192.118.table create mode 100644 definitions/grib2/tables/7/4.2.192.119.table create mode 100644 definitions/grib2/tables/7/4.2.192.12.table create mode 100644 definitions/grib2/tables/7/4.2.192.120.table create mode 100644 definitions/grib2/tables/7/4.2.192.121.table create mode 100644 definitions/grib2/tables/7/4.2.192.122.table create mode 100644 definitions/grib2/tables/7/4.2.192.123.table create mode 100644 definitions/grib2/tables/7/4.2.192.124.table create mode 100644 definitions/grib2/tables/7/4.2.192.125.table create mode 100644 definitions/grib2/tables/7/4.2.192.126.table create mode 100644 definitions/grib2/tables/7/4.2.192.127.table create mode 100644 definitions/grib2/tables/7/4.2.192.128.table create mode 100644 definitions/grib2/tables/7/4.2.192.129.table create mode 100644 definitions/grib2/tables/7/4.2.192.13.table create mode 100644 definitions/grib2/tables/7/4.2.192.130.table create mode 100644 definitions/grib2/tables/7/4.2.192.131.table create mode 100644 definitions/grib2/tables/7/4.2.192.132.table create mode 100644 definitions/grib2/tables/7/4.2.192.133.table create mode 100644 definitions/grib2/tables/7/4.2.192.134.table create mode 100644 definitions/grib2/tables/7/4.2.192.135.table create mode 100644 definitions/grib2/tables/7/4.2.192.136.table create mode 100644 definitions/grib2/tables/7/4.2.192.137.table create mode 100644 definitions/grib2/tables/7/4.2.192.138.table create mode 100644 definitions/grib2/tables/7/4.2.192.139.table create mode 100644 definitions/grib2/tables/7/4.2.192.14.table create mode 100644 definitions/grib2/tables/7/4.2.192.140.table create mode 100644 definitions/grib2/tables/7/4.2.192.141.table create mode 100644 definitions/grib2/tables/7/4.2.192.142.table create mode 100644 definitions/grib2/tables/7/4.2.192.143.table create mode 100644 definitions/grib2/tables/7/4.2.192.144.table create mode 100644 definitions/grib2/tables/7/4.2.192.145.table create mode 100644 definitions/grib2/tables/7/4.2.192.146.table create mode 100644 definitions/grib2/tables/7/4.2.192.147.table create mode 100644 definitions/grib2/tables/7/4.2.192.148.table create mode 100644 definitions/grib2/tables/7/4.2.192.149.table create mode 100644 definitions/grib2/tables/7/4.2.192.15.table create mode 100644 definitions/grib2/tables/7/4.2.192.150.table create mode 100644 definitions/grib2/tables/7/4.2.192.151.table create mode 100644 definitions/grib2/tables/7/4.2.192.152.table create mode 100644 definitions/grib2/tables/7/4.2.192.153.table create mode 100644 definitions/grib2/tables/7/4.2.192.154.table create mode 100644 definitions/grib2/tables/7/4.2.192.155.table create mode 100644 definitions/grib2/tables/7/4.2.192.156.table create mode 100644 definitions/grib2/tables/7/4.2.192.157.table create mode 100644 definitions/grib2/tables/7/4.2.192.158.table create mode 100644 definitions/grib2/tables/7/4.2.192.159.table create mode 100644 definitions/grib2/tables/7/4.2.192.16.table create mode 100644 definitions/grib2/tables/7/4.2.192.160.table create mode 100644 definitions/grib2/tables/7/4.2.192.161.table create mode 100644 definitions/grib2/tables/7/4.2.192.162.table create mode 100644 definitions/grib2/tables/7/4.2.192.163.table create mode 100644 definitions/grib2/tables/7/4.2.192.164.table create mode 100644 definitions/grib2/tables/7/4.2.192.165.table create mode 100644 definitions/grib2/tables/7/4.2.192.166.table create mode 100644 definitions/grib2/tables/7/4.2.192.167.table create mode 100644 definitions/grib2/tables/7/4.2.192.168.table create mode 100644 definitions/grib2/tables/7/4.2.192.169.table create mode 100644 definitions/grib2/tables/7/4.2.192.17.table create mode 100644 definitions/grib2/tables/7/4.2.192.170.table create mode 100644 definitions/grib2/tables/7/4.2.192.171.table create mode 100644 definitions/grib2/tables/7/4.2.192.172.table create mode 100644 definitions/grib2/tables/7/4.2.192.173.table create mode 100644 definitions/grib2/tables/7/4.2.192.174.table create mode 100644 definitions/grib2/tables/7/4.2.192.175.table create mode 100644 definitions/grib2/tables/7/4.2.192.176.table create mode 100644 definitions/grib2/tables/7/4.2.192.177.table create mode 100644 definitions/grib2/tables/7/4.2.192.178.table create mode 100644 definitions/grib2/tables/7/4.2.192.179.table create mode 100644 definitions/grib2/tables/7/4.2.192.18.table create mode 100644 definitions/grib2/tables/7/4.2.192.180.table create mode 100644 definitions/grib2/tables/7/4.2.192.181.table create mode 100644 definitions/grib2/tables/7/4.2.192.182.table create mode 100644 definitions/grib2/tables/7/4.2.192.183.table create mode 100644 definitions/grib2/tables/7/4.2.192.184.table create mode 100644 definitions/grib2/tables/7/4.2.192.185.table create mode 100644 definitions/grib2/tables/7/4.2.192.186.table create mode 100644 definitions/grib2/tables/7/4.2.192.187.table create mode 100644 definitions/grib2/tables/7/4.2.192.188.table create mode 100644 definitions/grib2/tables/7/4.2.192.189.table create mode 100644 definitions/grib2/tables/7/4.2.192.19.table create mode 100644 definitions/grib2/tables/7/4.2.192.190.table create mode 100644 definitions/grib2/tables/7/4.2.192.191.table create mode 100644 definitions/grib2/tables/7/4.2.192.192.table create mode 100644 definitions/grib2/tables/7/4.2.192.193.table create mode 100644 definitions/grib2/tables/7/4.2.192.194.table create mode 100644 definitions/grib2/tables/7/4.2.192.195.table create mode 100644 definitions/grib2/tables/7/4.2.192.196.table create mode 100644 definitions/grib2/tables/7/4.2.192.197.table create mode 100644 definitions/grib2/tables/7/4.2.192.198.table create mode 100644 definitions/grib2/tables/7/4.2.192.199.table create mode 100644 definitions/grib2/tables/7/4.2.192.2.table create mode 100644 definitions/grib2/tables/7/4.2.192.20.table create mode 100644 definitions/grib2/tables/7/4.2.192.200.table create mode 100644 definitions/grib2/tables/7/4.2.192.201.table create mode 100644 definitions/grib2/tables/7/4.2.192.202.table create mode 100644 definitions/grib2/tables/7/4.2.192.203.table create mode 100644 definitions/grib2/tables/7/4.2.192.204.table create mode 100644 definitions/grib2/tables/7/4.2.192.205.table create mode 100644 definitions/grib2/tables/7/4.2.192.206.table create mode 100644 definitions/grib2/tables/7/4.2.192.207.table create mode 100644 definitions/grib2/tables/7/4.2.192.208.table create mode 100644 definitions/grib2/tables/7/4.2.192.209.table create mode 100644 definitions/grib2/tables/7/4.2.192.21.table create mode 100644 definitions/grib2/tables/7/4.2.192.210.table create mode 100644 definitions/grib2/tables/7/4.2.192.211.table create mode 100644 definitions/grib2/tables/7/4.2.192.212.table create mode 100644 definitions/grib2/tables/7/4.2.192.213.table create mode 100644 definitions/grib2/tables/7/4.2.192.214.table create mode 100644 definitions/grib2/tables/7/4.2.192.215.table create mode 100644 definitions/grib2/tables/7/4.2.192.216.table create mode 100644 definitions/grib2/tables/7/4.2.192.217.table create mode 100644 definitions/grib2/tables/7/4.2.192.218.table create mode 100644 definitions/grib2/tables/7/4.2.192.219.table create mode 100644 definitions/grib2/tables/7/4.2.192.22.table create mode 100644 definitions/grib2/tables/7/4.2.192.220.table create mode 100644 definitions/grib2/tables/7/4.2.192.221.table create mode 100644 definitions/grib2/tables/7/4.2.192.222.table create mode 100644 definitions/grib2/tables/7/4.2.192.223.table create mode 100644 definitions/grib2/tables/7/4.2.192.224.table create mode 100644 definitions/grib2/tables/7/4.2.192.225.table create mode 100644 definitions/grib2/tables/7/4.2.192.226.table create mode 100644 definitions/grib2/tables/7/4.2.192.227.table create mode 100644 definitions/grib2/tables/7/4.2.192.228.table create mode 100644 definitions/grib2/tables/7/4.2.192.229.table create mode 100644 definitions/grib2/tables/7/4.2.192.23.table create mode 100644 definitions/grib2/tables/7/4.2.192.230.table create mode 100644 definitions/grib2/tables/7/4.2.192.231.table create mode 100644 definitions/grib2/tables/7/4.2.192.232.table create mode 100644 definitions/grib2/tables/7/4.2.192.233.table create mode 100644 definitions/grib2/tables/7/4.2.192.234.table create mode 100644 definitions/grib2/tables/7/4.2.192.235.table create mode 100644 definitions/grib2/tables/7/4.2.192.236.table create mode 100644 definitions/grib2/tables/7/4.2.192.237.table create mode 100644 definitions/grib2/tables/7/4.2.192.238.table create mode 100644 definitions/grib2/tables/7/4.2.192.239.table create mode 100644 definitions/grib2/tables/7/4.2.192.24.table create mode 100644 definitions/grib2/tables/7/4.2.192.240.table create mode 100644 definitions/grib2/tables/7/4.2.192.241.table create mode 100644 definitions/grib2/tables/7/4.2.192.242.table create mode 100644 definitions/grib2/tables/7/4.2.192.243.table create mode 100644 definitions/grib2/tables/7/4.2.192.244.table create mode 100644 definitions/grib2/tables/7/4.2.192.245.table create mode 100644 definitions/grib2/tables/7/4.2.192.246.table create mode 100644 definitions/grib2/tables/7/4.2.192.247.table create mode 100644 definitions/grib2/tables/7/4.2.192.248.table create mode 100644 definitions/grib2/tables/7/4.2.192.249.table create mode 100644 definitions/grib2/tables/7/4.2.192.25.table create mode 100644 definitions/grib2/tables/7/4.2.192.250.table create mode 100644 definitions/grib2/tables/7/4.2.192.251.table create mode 100644 definitions/grib2/tables/7/4.2.192.252.table create mode 100644 definitions/grib2/tables/7/4.2.192.253.table create mode 100644 definitions/grib2/tables/7/4.2.192.254.table create mode 100644 definitions/grib2/tables/7/4.2.192.255.table create mode 100644 definitions/grib2/tables/7/4.2.192.26.table create mode 100644 definitions/grib2/tables/7/4.2.192.27.table create mode 100644 definitions/grib2/tables/7/4.2.192.28.table create mode 100644 definitions/grib2/tables/7/4.2.192.29.table create mode 100644 definitions/grib2/tables/7/4.2.192.3.table create mode 100644 definitions/grib2/tables/7/4.2.192.30.table create mode 100644 definitions/grib2/tables/7/4.2.192.31.table create mode 100644 definitions/grib2/tables/7/4.2.192.32.table create mode 100644 definitions/grib2/tables/7/4.2.192.33.table create mode 100644 definitions/grib2/tables/7/4.2.192.34.table create mode 100644 definitions/grib2/tables/7/4.2.192.35.table create mode 100644 definitions/grib2/tables/7/4.2.192.36.table create mode 100644 definitions/grib2/tables/7/4.2.192.37.table create mode 100644 definitions/grib2/tables/7/4.2.192.38.table create mode 100644 definitions/grib2/tables/7/4.2.192.39.table create mode 100644 definitions/grib2/tables/7/4.2.192.4.table create mode 100644 definitions/grib2/tables/7/4.2.192.40.table create mode 100644 definitions/grib2/tables/7/4.2.192.41.table create mode 100644 definitions/grib2/tables/7/4.2.192.42.table create mode 100644 definitions/grib2/tables/7/4.2.192.43.table create mode 100644 definitions/grib2/tables/7/4.2.192.44.table create mode 100644 definitions/grib2/tables/7/4.2.192.45.table create mode 100644 definitions/grib2/tables/7/4.2.192.46.table create mode 100644 definitions/grib2/tables/7/4.2.192.47.table create mode 100644 definitions/grib2/tables/7/4.2.192.48.table create mode 100644 definitions/grib2/tables/7/4.2.192.49.table create mode 100644 definitions/grib2/tables/7/4.2.192.5.table create mode 100644 definitions/grib2/tables/7/4.2.192.50.table create mode 100644 definitions/grib2/tables/7/4.2.192.51.table create mode 100644 definitions/grib2/tables/7/4.2.192.52.table create mode 100644 definitions/grib2/tables/7/4.2.192.53.table create mode 100644 definitions/grib2/tables/7/4.2.192.54.table create mode 100644 definitions/grib2/tables/7/4.2.192.55.table create mode 100644 definitions/grib2/tables/7/4.2.192.56.table create mode 100644 definitions/grib2/tables/7/4.2.192.57.table create mode 100644 definitions/grib2/tables/7/4.2.192.58.table create mode 100644 definitions/grib2/tables/7/4.2.192.59.table create mode 100644 definitions/grib2/tables/7/4.2.192.6.table create mode 100644 definitions/grib2/tables/7/4.2.192.60.table create mode 100644 definitions/grib2/tables/7/4.2.192.61.table create mode 100644 definitions/grib2/tables/7/4.2.192.62.table create mode 100644 definitions/grib2/tables/7/4.2.192.63.table create mode 100644 definitions/grib2/tables/7/4.2.192.64.table create mode 100644 definitions/grib2/tables/7/4.2.192.65.table create mode 100644 definitions/grib2/tables/7/4.2.192.66.table create mode 100644 definitions/grib2/tables/7/4.2.192.67.table create mode 100644 definitions/grib2/tables/7/4.2.192.68.table create mode 100644 definitions/grib2/tables/7/4.2.192.69.table create mode 100644 definitions/grib2/tables/7/4.2.192.7.table create mode 100644 definitions/grib2/tables/7/4.2.192.70.table create mode 100644 definitions/grib2/tables/7/4.2.192.71.table create mode 100644 definitions/grib2/tables/7/4.2.192.72.table create mode 100644 definitions/grib2/tables/7/4.2.192.73.table create mode 100644 definitions/grib2/tables/7/4.2.192.74.table create mode 100644 definitions/grib2/tables/7/4.2.192.75.table create mode 100644 definitions/grib2/tables/7/4.2.192.76.table create mode 100644 definitions/grib2/tables/7/4.2.192.77.table create mode 100644 definitions/grib2/tables/7/4.2.192.78.table create mode 100644 definitions/grib2/tables/7/4.2.192.79.table create mode 100644 definitions/grib2/tables/7/4.2.192.8.table create mode 100644 definitions/grib2/tables/7/4.2.192.80.table create mode 100644 definitions/grib2/tables/7/4.2.192.81.table create mode 100644 definitions/grib2/tables/7/4.2.192.82.table create mode 100644 definitions/grib2/tables/7/4.2.192.83.table create mode 100644 definitions/grib2/tables/7/4.2.192.84.table create mode 100644 definitions/grib2/tables/7/4.2.192.85.table create mode 100644 definitions/grib2/tables/7/4.2.192.86.table create mode 100644 definitions/grib2/tables/7/4.2.192.87.table create mode 100644 definitions/grib2/tables/7/4.2.192.88.table create mode 100644 definitions/grib2/tables/7/4.2.192.89.table create mode 100644 definitions/grib2/tables/7/4.2.192.9.table create mode 100644 definitions/grib2/tables/7/4.2.192.90.table create mode 100644 definitions/grib2/tables/7/4.2.192.91.table create mode 100644 definitions/grib2/tables/7/4.2.192.92.table create mode 100644 definitions/grib2/tables/7/4.2.192.93.table create mode 100644 definitions/grib2/tables/7/4.2.192.94.table create mode 100644 definitions/grib2/tables/7/4.2.192.95.table create mode 100644 definitions/grib2/tables/7/4.2.192.96.table create mode 100644 definitions/grib2/tables/7/4.2.192.97.table create mode 100644 definitions/grib2/tables/7/4.2.192.98.table create mode 100644 definitions/grib2/tables/7/4.2.192.99.table create mode 100644 definitions/grib2/tables/7/4.2.2.0.table create mode 100644 definitions/grib2/tables/7/4.2.2.3.table create mode 100644 definitions/grib2/tables/7/4.2.2.4.table create mode 100644 definitions/grib2/tables/7/4.2.3.0.table create mode 100644 definitions/grib2/tables/7/4.2.3.1.table create mode 100644 definitions/grib2/tables/7/4.2.table create mode 100644 definitions/grib2/tables/7/4.201.table create mode 100644 definitions/grib2/tables/7/4.202.table create mode 100644 definitions/grib2/tables/7/4.203.table create mode 100644 definitions/grib2/tables/7/4.204.table create mode 100644 definitions/grib2/tables/7/4.205.table create mode 100644 definitions/grib2/tables/7/4.206.table create mode 100644 definitions/grib2/tables/7/4.207.table create mode 100644 definitions/grib2/tables/7/4.208.table create mode 100644 definitions/grib2/tables/7/4.209.table create mode 100644 definitions/grib2/tables/7/4.210.table create mode 100644 definitions/grib2/tables/7/4.211.table create mode 100644 definitions/grib2/tables/7/4.212.table create mode 100644 definitions/grib2/tables/7/4.213.table create mode 100644 definitions/grib2/tables/7/4.215.table create mode 100644 definitions/grib2/tables/7/4.216.table create mode 100644 definitions/grib2/tables/7/4.217.table create mode 100644 definitions/grib2/tables/7/4.218.table create mode 100644 definitions/grib2/tables/7/4.219.table create mode 100644 definitions/grib2/tables/7/4.220.table create mode 100644 definitions/grib2/tables/7/4.221.table create mode 100644 definitions/grib2/tables/7/4.222.table create mode 100644 definitions/grib2/tables/7/4.223.table create mode 100644 definitions/grib2/tables/7/4.224.table create mode 100644 definitions/grib2/tables/7/4.230.table create mode 100644 definitions/grib2/tables/7/4.3.table create mode 100644 definitions/grib2/tables/7/4.4.table create mode 100644 definitions/grib2/tables/7/4.5.table create mode 100644 definitions/grib2/tables/7/4.6.table create mode 100644 definitions/grib2/tables/7/4.7.table create mode 100644 definitions/grib2/tables/7/4.8.table create mode 100644 definitions/grib2/tables/7/4.9.table create mode 100644 definitions/grib2/tables/7/4.91.table create mode 100644 definitions/grib2/tables/7/5.0.table create mode 100644 definitions/grib2/tables/7/5.1.table create mode 100644 definitions/grib2/tables/7/5.2.table create mode 100644 definitions/grib2/tables/7/5.3.table create mode 100644 definitions/grib2/tables/7/5.4.table create mode 100644 definitions/grib2/tables/7/5.40.table create mode 100644 definitions/grib2/tables/7/5.40000.table create mode 100644 definitions/grib2/tables/7/5.5.table create mode 100644 definitions/grib2/tables/7/5.50002.table create mode 100644 definitions/grib2/tables/7/5.6.table create mode 100644 definitions/grib2/tables/7/5.7.table create mode 100644 definitions/grib2/tables/7/5.8.table create mode 100644 definitions/grib2/tables/7/5.9.table create mode 100644 definitions/grib2/tables/7/6.0.table create mode 100644 definitions/grib2/tables/7/stepType.table create mode 100644 definitions/grib2/tables/8/0.0.table create mode 100644 definitions/grib2/tables/8/1.0.table create mode 100644 definitions/grib2/tables/8/1.1.table create mode 100644 definitions/grib2/tables/8/1.2.table create mode 100644 definitions/grib2/tables/8/1.3.table create mode 100644 definitions/grib2/tables/8/1.4.table create mode 100644 definitions/grib2/tables/8/3.0.table create mode 100644 definitions/grib2/tables/8/3.1.table create mode 100644 definitions/grib2/tables/8/3.10.table create mode 100644 definitions/grib2/tables/8/3.11.table create mode 100644 definitions/grib2/tables/8/3.15.table create mode 100644 definitions/grib2/tables/8/3.2.table create mode 100644 definitions/grib2/tables/8/3.20.table create mode 100644 definitions/grib2/tables/8/3.21.table create mode 100644 definitions/grib2/tables/8/3.3.table create mode 100644 definitions/grib2/tables/8/3.4.table create mode 100644 definitions/grib2/tables/8/3.5.table create mode 100644 definitions/grib2/tables/8/3.6.table create mode 100644 definitions/grib2/tables/8/3.7.table create mode 100644 definitions/grib2/tables/8/3.8.table create mode 100644 definitions/grib2/tables/8/3.9.table create mode 100644 definitions/grib2/tables/8/4.0.table create mode 100644 definitions/grib2/tables/8/4.1.0.table create mode 100644 definitions/grib2/tables/8/4.1.1.table create mode 100644 definitions/grib2/tables/8/4.1.10.table create mode 100644 definitions/grib2/tables/8/4.1.192.table create mode 100644 definitions/grib2/tables/8/4.1.2.table create mode 100644 definitions/grib2/tables/8/4.1.3.table create mode 100644 definitions/grib2/tables/8/4.1.table create mode 100644 definitions/grib2/tables/8/4.10.table create mode 100644 definitions/grib2/tables/8/4.11.table create mode 100644 definitions/grib2/tables/8/4.12.table create mode 100644 definitions/grib2/tables/8/4.13.table create mode 100644 definitions/grib2/tables/8/4.14.table create mode 100644 definitions/grib2/tables/8/4.15.table create mode 100644 definitions/grib2/tables/8/4.151.table create mode 100644 definitions/grib2/tables/8/4.192.table create mode 100644 definitions/grib2/tables/8/4.2.0.0.table create mode 100644 definitions/grib2/tables/8/4.2.0.1.table create mode 100644 definitions/grib2/tables/8/4.2.0.13.table create mode 100644 definitions/grib2/tables/8/4.2.0.14.table create mode 100644 definitions/grib2/tables/8/4.2.0.15.table create mode 100644 definitions/grib2/tables/8/4.2.0.16.table create mode 100644 definitions/grib2/tables/8/4.2.0.18.table create mode 100644 definitions/grib2/tables/8/4.2.0.19.table create mode 100644 definitions/grib2/tables/8/4.2.0.190.table create mode 100644 definitions/grib2/tables/8/4.2.0.191.table create mode 100644 definitions/grib2/tables/8/4.2.0.2.table create mode 100644 definitions/grib2/tables/8/4.2.0.20.table create mode 100644 definitions/grib2/tables/8/4.2.0.3.table create mode 100644 definitions/grib2/tables/8/4.2.0.4.table create mode 100644 definitions/grib2/tables/8/4.2.0.5.table create mode 100644 definitions/grib2/tables/8/4.2.0.6.table create mode 100644 definitions/grib2/tables/8/4.2.0.7.table create mode 100644 definitions/grib2/tables/8/4.2.1.0.table create mode 100644 definitions/grib2/tables/8/4.2.1.1.table create mode 100644 definitions/grib2/tables/8/4.2.1.2.table create mode 100644 definitions/grib2/tables/8/4.2.10.0.table create mode 100644 definitions/grib2/tables/8/4.2.10.1.table create mode 100644 definitions/grib2/tables/8/4.2.10.191.table create mode 100644 definitions/grib2/tables/8/4.2.10.2.table create mode 100644 definitions/grib2/tables/8/4.2.10.3.table create mode 100644 definitions/grib2/tables/8/4.2.10.4.table create mode 100644 definitions/grib2/tables/8/4.2.192.0.table create mode 100644 definitions/grib2/tables/8/4.2.192.1.table create mode 100644 definitions/grib2/tables/8/4.2.192.10.table create mode 100644 definitions/grib2/tables/8/4.2.192.100.table create mode 100644 definitions/grib2/tables/8/4.2.192.101.table create mode 100644 definitions/grib2/tables/8/4.2.192.102.table create mode 100644 definitions/grib2/tables/8/4.2.192.103.table create mode 100644 definitions/grib2/tables/8/4.2.192.104.table create mode 100644 definitions/grib2/tables/8/4.2.192.105.table create mode 100644 definitions/grib2/tables/8/4.2.192.106.table create mode 100644 definitions/grib2/tables/8/4.2.192.107.table create mode 100644 definitions/grib2/tables/8/4.2.192.108.table create mode 100644 definitions/grib2/tables/8/4.2.192.109.table create mode 100644 definitions/grib2/tables/8/4.2.192.11.table create mode 100644 definitions/grib2/tables/8/4.2.192.110.table create mode 100644 definitions/grib2/tables/8/4.2.192.111.table create mode 100644 definitions/grib2/tables/8/4.2.192.112.table create mode 100644 definitions/grib2/tables/8/4.2.192.113.table create mode 100644 definitions/grib2/tables/8/4.2.192.114.table create mode 100644 definitions/grib2/tables/8/4.2.192.115.table create mode 100644 definitions/grib2/tables/8/4.2.192.116.table create mode 100644 definitions/grib2/tables/8/4.2.192.117.table create mode 100644 definitions/grib2/tables/8/4.2.192.118.table create mode 100644 definitions/grib2/tables/8/4.2.192.119.table create mode 100644 definitions/grib2/tables/8/4.2.192.12.table create mode 100644 definitions/grib2/tables/8/4.2.192.120.table create mode 100644 definitions/grib2/tables/8/4.2.192.121.table create mode 100644 definitions/grib2/tables/8/4.2.192.122.table create mode 100644 definitions/grib2/tables/8/4.2.192.123.table create mode 100644 definitions/grib2/tables/8/4.2.192.124.table create mode 100644 definitions/grib2/tables/8/4.2.192.125.table create mode 100644 definitions/grib2/tables/8/4.2.192.126.table create mode 100644 definitions/grib2/tables/8/4.2.192.127.table create mode 100644 definitions/grib2/tables/8/4.2.192.128.table create mode 100644 definitions/grib2/tables/8/4.2.192.129.table create mode 100644 definitions/grib2/tables/8/4.2.192.13.table create mode 100644 definitions/grib2/tables/8/4.2.192.130.table create mode 100644 definitions/grib2/tables/8/4.2.192.131.table create mode 100644 definitions/grib2/tables/8/4.2.192.132.table create mode 100644 definitions/grib2/tables/8/4.2.192.133.table create mode 100644 definitions/grib2/tables/8/4.2.192.134.table create mode 100644 definitions/grib2/tables/8/4.2.192.135.table create mode 100644 definitions/grib2/tables/8/4.2.192.136.table create mode 100644 definitions/grib2/tables/8/4.2.192.137.table create mode 100644 definitions/grib2/tables/8/4.2.192.138.table create mode 100644 definitions/grib2/tables/8/4.2.192.139.table create mode 100644 definitions/grib2/tables/8/4.2.192.14.table create mode 100644 definitions/grib2/tables/8/4.2.192.140.table create mode 100644 definitions/grib2/tables/8/4.2.192.141.table create mode 100644 definitions/grib2/tables/8/4.2.192.142.table create mode 100644 definitions/grib2/tables/8/4.2.192.143.table create mode 100644 definitions/grib2/tables/8/4.2.192.144.table create mode 100644 definitions/grib2/tables/8/4.2.192.145.table create mode 100644 definitions/grib2/tables/8/4.2.192.146.table create mode 100644 definitions/grib2/tables/8/4.2.192.147.table create mode 100644 definitions/grib2/tables/8/4.2.192.148.table create mode 100644 definitions/grib2/tables/8/4.2.192.149.table create mode 100644 definitions/grib2/tables/8/4.2.192.15.table create mode 100644 definitions/grib2/tables/8/4.2.192.150.table create mode 100644 definitions/grib2/tables/8/4.2.192.151.table create mode 100644 definitions/grib2/tables/8/4.2.192.152.table create mode 100644 definitions/grib2/tables/8/4.2.192.153.table create mode 100644 definitions/grib2/tables/8/4.2.192.154.table create mode 100644 definitions/grib2/tables/8/4.2.192.155.table create mode 100644 definitions/grib2/tables/8/4.2.192.156.table create mode 100644 definitions/grib2/tables/8/4.2.192.157.table create mode 100644 definitions/grib2/tables/8/4.2.192.158.table create mode 100644 definitions/grib2/tables/8/4.2.192.159.table create mode 100644 definitions/grib2/tables/8/4.2.192.16.table create mode 100644 definitions/grib2/tables/8/4.2.192.160.table create mode 100644 definitions/grib2/tables/8/4.2.192.161.table create mode 100644 definitions/grib2/tables/8/4.2.192.162.table create mode 100644 definitions/grib2/tables/8/4.2.192.163.table create mode 100644 definitions/grib2/tables/8/4.2.192.164.table create mode 100644 definitions/grib2/tables/8/4.2.192.165.table create mode 100644 definitions/grib2/tables/8/4.2.192.166.table create mode 100644 definitions/grib2/tables/8/4.2.192.167.table create mode 100644 definitions/grib2/tables/8/4.2.192.168.table create mode 100644 definitions/grib2/tables/8/4.2.192.169.table create mode 100644 definitions/grib2/tables/8/4.2.192.17.table create mode 100644 definitions/grib2/tables/8/4.2.192.170.table create mode 100644 definitions/grib2/tables/8/4.2.192.171.table create mode 100644 definitions/grib2/tables/8/4.2.192.172.table create mode 100644 definitions/grib2/tables/8/4.2.192.173.table create mode 100644 definitions/grib2/tables/8/4.2.192.174.table create mode 100644 definitions/grib2/tables/8/4.2.192.175.table create mode 100644 definitions/grib2/tables/8/4.2.192.176.table create mode 100644 definitions/grib2/tables/8/4.2.192.177.table create mode 100644 definitions/grib2/tables/8/4.2.192.178.table create mode 100644 definitions/grib2/tables/8/4.2.192.179.table create mode 100644 definitions/grib2/tables/8/4.2.192.18.table create mode 100644 definitions/grib2/tables/8/4.2.192.180.table create mode 100644 definitions/grib2/tables/8/4.2.192.181.table create mode 100644 definitions/grib2/tables/8/4.2.192.182.table create mode 100644 definitions/grib2/tables/8/4.2.192.183.table create mode 100644 definitions/grib2/tables/8/4.2.192.184.table create mode 100644 definitions/grib2/tables/8/4.2.192.185.table create mode 100644 definitions/grib2/tables/8/4.2.192.186.table create mode 100644 definitions/grib2/tables/8/4.2.192.187.table create mode 100644 definitions/grib2/tables/8/4.2.192.188.table create mode 100644 definitions/grib2/tables/8/4.2.192.189.table create mode 100644 definitions/grib2/tables/8/4.2.192.19.table create mode 100644 definitions/grib2/tables/8/4.2.192.190.table create mode 100644 definitions/grib2/tables/8/4.2.192.191.table create mode 100644 definitions/grib2/tables/8/4.2.192.192.table create mode 100644 definitions/grib2/tables/8/4.2.192.193.table create mode 100644 definitions/grib2/tables/8/4.2.192.194.table create mode 100644 definitions/grib2/tables/8/4.2.192.195.table create mode 100644 definitions/grib2/tables/8/4.2.192.196.table create mode 100644 definitions/grib2/tables/8/4.2.192.197.table create mode 100644 definitions/grib2/tables/8/4.2.192.198.table create mode 100644 definitions/grib2/tables/8/4.2.192.199.table create mode 100644 definitions/grib2/tables/8/4.2.192.2.table create mode 100644 definitions/grib2/tables/8/4.2.192.20.table create mode 100644 definitions/grib2/tables/8/4.2.192.200.table create mode 100644 definitions/grib2/tables/8/4.2.192.201.table create mode 100644 definitions/grib2/tables/8/4.2.192.202.table create mode 100644 definitions/grib2/tables/8/4.2.192.203.table create mode 100644 definitions/grib2/tables/8/4.2.192.204.table create mode 100644 definitions/grib2/tables/8/4.2.192.205.table create mode 100644 definitions/grib2/tables/8/4.2.192.206.table create mode 100644 definitions/grib2/tables/8/4.2.192.207.table create mode 100644 definitions/grib2/tables/8/4.2.192.208.table create mode 100644 definitions/grib2/tables/8/4.2.192.209.table create mode 100644 definitions/grib2/tables/8/4.2.192.21.table create mode 100644 definitions/grib2/tables/8/4.2.192.210.table create mode 100644 definitions/grib2/tables/8/4.2.192.211.table create mode 100644 definitions/grib2/tables/8/4.2.192.212.table create mode 100644 definitions/grib2/tables/8/4.2.192.213.table create mode 100644 definitions/grib2/tables/8/4.2.192.214.table create mode 100644 definitions/grib2/tables/8/4.2.192.215.table create mode 100644 definitions/grib2/tables/8/4.2.192.216.table create mode 100644 definitions/grib2/tables/8/4.2.192.217.table create mode 100644 definitions/grib2/tables/8/4.2.192.218.table create mode 100644 definitions/grib2/tables/8/4.2.192.219.table create mode 100644 definitions/grib2/tables/8/4.2.192.22.table create mode 100644 definitions/grib2/tables/8/4.2.192.220.table create mode 100644 definitions/grib2/tables/8/4.2.192.221.table create mode 100644 definitions/grib2/tables/8/4.2.192.222.table create mode 100644 definitions/grib2/tables/8/4.2.192.223.table create mode 100644 definitions/grib2/tables/8/4.2.192.224.table create mode 100644 definitions/grib2/tables/8/4.2.192.225.table create mode 100644 definitions/grib2/tables/8/4.2.192.226.table create mode 100644 definitions/grib2/tables/8/4.2.192.227.table create mode 100644 definitions/grib2/tables/8/4.2.192.228.table create mode 100644 definitions/grib2/tables/8/4.2.192.229.table create mode 100644 definitions/grib2/tables/8/4.2.192.23.table create mode 100644 definitions/grib2/tables/8/4.2.192.230.table create mode 100644 definitions/grib2/tables/8/4.2.192.231.table create mode 100644 definitions/grib2/tables/8/4.2.192.232.table create mode 100644 definitions/grib2/tables/8/4.2.192.233.table create mode 100644 definitions/grib2/tables/8/4.2.192.234.table create mode 100644 definitions/grib2/tables/8/4.2.192.235.table create mode 100644 definitions/grib2/tables/8/4.2.192.236.table create mode 100644 definitions/grib2/tables/8/4.2.192.237.table create mode 100644 definitions/grib2/tables/8/4.2.192.238.table create mode 100644 definitions/grib2/tables/8/4.2.192.239.table create mode 100644 definitions/grib2/tables/8/4.2.192.24.table create mode 100644 definitions/grib2/tables/8/4.2.192.240.table create mode 100644 definitions/grib2/tables/8/4.2.192.241.table create mode 100644 definitions/grib2/tables/8/4.2.192.242.table create mode 100644 definitions/grib2/tables/8/4.2.192.243.table create mode 100644 definitions/grib2/tables/8/4.2.192.244.table create mode 100644 definitions/grib2/tables/8/4.2.192.245.table create mode 100644 definitions/grib2/tables/8/4.2.192.246.table create mode 100644 definitions/grib2/tables/8/4.2.192.247.table create mode 100644 definitions/grib2/tables/8/4.2.192.248.table create mode 100644 definitions/grib2/tables/8/4.2.192.249.table create mode 100644 definitions/grib2/tables/8/4.2.192.25.table create mode 100644 definitions/grib2/tables/8/4.2.192.250.table create mode 100644 definitions/grib2/tables/8/4.2.192.251.table create mode 100644 definitions/grib2/tables/8/4.2.192.252.table create mode 100644 definitions/grib2/tables/8/4.2.192.253.table create mode 100644 definitions/grib2/tables/8/4.2.192.254.table create mode 100644 definitions/grib2/tables/8/4.2.192.255.table create mode 100644 definitions/grib2/tables/8/4.2.192.26.table create mode 100644 definitions/grib2/tables/8/4.2.192.27.table create mode 100644 definitions/grib2/tables/8/4.2.192.28.table create mode 100644 definitions/grib2/tables/8/4.2.192.29.table create mode 100644 definitions/grib2/tables/8/4.2.192.3.table create mode 100644 definitions/grib2/tables/8/4.2.192.30.table create mode 100644 definitions/grib2/tables/8/4.2.192.31.table create mode 100644 definitions/grib2/tables/8/4.2.192.32.table create mode 100644 definitions/grib2/tables/8/4.2.192.33.table create mode 100644 definitions/grib2/tables/8/4.2.192.34.table create mode 100644 definitions/grib2/tables/8/4.2.192.35.table create mode 100644 definitions/grib2/tables/8/4.2.192.36.table create mode 100644 definitions/grib2/tables/8/4.2.192.37.table create mode 100644 definitions/grib2/tables/8/4.2.192.38.table create mode 100644 definitions/grib2/tables/8/4.2.192.39.table create mode 100644 definitions/grib2/tables/8/4.2.192.4.table create mode 100644 definitions/grib2/tables/8/4.2.192.40.table create mode 100644 definitions/grib2/tables/8/4.2.192.41.table create mode 100644 definitions/grib2/tables/8/4.2.192.42.table create mode 100644 definitions/grib2/tables/8/4.2.192.43.table create mode 100644 definitions/grib2/tables/8/4.2.192.44.table create mode 100644 definitions/grib2/tables/8/4.2.192.45.table create mode 100644 definitions/grib2/tables/8/4.2.192.46.table create mode 100644 definitions/grib2/tables/8/4.2.192.47.table create mode 100644 definitions/grib2/tables/8/4.2.192.48.table create mode 100644 definitions/grib2/tables/8/4.2.192.49.table create mode 100644 definitions/grib2/tables/8/4.2.192.5.table create mode 100644 definitions/grib2/tables/8/4.2.192.50.table create mode 100644 definitions/grib2/tables/8/4.2.192.51.table create mode 100644 definitions/grib2/tables/8/4.2.192.52.table create mode 100644 definitions/grib2/tables/8/4.2.192.53.table create mode 100644 definitions/grib2/tables/8/4.2.192.54.table create mode 100644 definitions/grib2/tables/8/4.2.192.55.table create mode 100644 definitions/grib2/tables/8/4.2.192.56.table create mode 100644 definitions/grib2/tables/8/4.2.192.57.table create mode 100644 definitions/grib2/tables/8/4.2.192.58.table create mode 100644 definitions/grib2/tables/8/4.2.192.59.table create mode 100644 definitions/grib2/tables/8/4.2.192.6.table create mode 100644 definitions/grib2/tables/8/4.2.192.60.table create mode 100644 definitions/grib2/tables/8/4.2.192.61.table create mode 100644 definitions/grib2/tables/8/4.2.192.62.table create mode 100644 definitions/grib2/tables/8/4.2.192.63.table create mode 100644 definitions/grib2/tables/8/4.2.192.64.table create mode 100644 definitions/grib2/tables/8/4.2.192.65.table create mode 100644 definitions/grib2/tables/8/4.2.192.66.table create mode 100644 definitions/grib2/tables/8/4.2.192.67.table create mode 100644 definitions/grib2/tables/8/4.2.192.68.table create mode 100644 definitions/grib2/tables/8/4.2.192.69.table create mode 100644 definitions/grib2/tables/8/4.2.192.7.table create mode 100644 definitions/grib2/tables/8/4.2.192.70.table create mode 100644 definitions/grib2/tables/8/4.2.192.71.table create mode 100644 definitions/grib2/tables/8/4.2.192.72.table create mode 100644 definitions/grib2/tables/8/4.2.192.73.table create mode 100644 definitions/grib2/tables/8/4.2.192.74.table create mode 100644 definitions/grib2/tables/8/4.2.192.75.table create mode 100644 definitions/grib2/tables/8/4.2.192.76.table create mode 100644 definitions/grib2/tables/8/4.2.192.77.table create mode 100644 definitions/grib2/tables/8/4.2.192.78.table create mode 100644 definitions/grib2/tables/8/4.2.192.79.table create mode 100644 definitions/grib2/tables/8/4.2.192.8.table create mode 100644 definitions/grib2/tables/8/4.2.192.80.table create mode 100644 definitions/grib2/tables/8/4.2.192.81.table create mode 100644 definitions/grib2/tables/8/4.2.192.82.table create mode 100644 definitions/grib2/tables/8/4.2.192.83.table create mode 100644 definitions/grib2/tables/8/4.2.192.84.table create mode 100644 definitions/grib2/tables/8/4.2.192.85.table create mode 100644 definitions/grib2/tables/8/4.2.192.86.table create mode 100644 definitions/grib2/tables/8/4.2.192.87.table create mode 100644 definitions/grib2/tables/8/4.2.192.88.table create mode 100644 definitions/grib2/tables/8/4.2.192.89.table create mode 100644 definitions/grib2/tables/8/4.2.192.9.table create mode 100644 definitions/grib2/tables/8/4.2.192.90.table create mode 100644 definitions/grib2/tables/8/4.2.192.91.table create mode 100644 definitions/grib2/tables/8/4.2.192.92.table create mode 100644 definitions/grib2/tables/8/4.2.192.93.table create mode 100644 definitions/grib2/tables/8/4.2.192.94.table create mode 100644 definitions/grib2/tables/8/4.2.192.95.table create mode 100644 definitions/grib2/tables/8/4.2.192.96.table create mode 100644 definitions/grib2/tables/8/4.2.192.97.table create mode 100644 definitions/grib2/tables/8/4.2.192.98.table create mode 100644 definitions/grib2/tables/8/4.2.192.99.table create mode 100644 definitions/grib2/tables/8/4.2.2.0.table create mode 100644 definitions/grib2/tables/8/4.2.2.3.table create mode 100644 definitions/grib2/tables/8/4.2.2.4.table create mode 100644 definitions/grib2/tables/8/4.2.3.0.table create mode 100644 definitions/grib2/tables/8/4.2.3.1.table create mode 100644 definitions/grib2/tables/8/4.2.table create mode 100644 definitions/grib2/tables/8/4.201.table create mode 100644 definitions/grib2/tables/8/4.202.table create mode 100644 definitions/grib2/tables/8/4.203.table create mode 100644 definitions/grib2/tables/8/4.204.table create mode 100644 definitions/grib2/tables/8/4.205.table create mode 100644 definitions/grib2/tables/8/4.206.table create mode 100644 definitions/grib2/tables/8/4.207.table create mode 100644 definitions/grib2/tables/8/4.208.table create mode 100644 definitions/grib2/tables/8/4.209.table create mode 100644 definitions/grib2/tables/8/4.210.table create mode 100644 definitions/grib2/tables/8/4.211.table create mode 100644 definitions/grib2/tables/8/4.212.table create mode 100644 definitions/grib2/tables/8/4.213.table create mode 100644 definitions/grib2/tables/8/4.215.table create mode 100644 definitions/grib2/tables/8/4.216.table create mode 100644 definitions/grib2/tables/8/4.217.table create mode 100644 definitions/grib2/tables/8/4.218.table create mode 100644 definitions/grib2/tables/8/4.219.table create mode 100644 definitions/grib2/tables/8/4.220.table create mode 100644 definitions/grib2/tables/8/4.221.table create mode 100644 definitions/grib2/tables/8/4.222.table create mode 100644 definitions/grib2/tables/8/4.223.table create mode 100644 definitions/grib2/tables/8/4.224.table create mode 100644 definitions/grib2/tables/8/4.230.table create mode 100644 definitions/grib2/tables/8/4.233.table create mode 100644 definitions/grib2/tables/8/4.3.table create mode 100644 definitions/grib2/tables/8/4.4.table create mode 100644 definitions/grib2/tables/8/4.5.table create mode 100644 definitions/grib2/tables/8/4.6.table create mode 100644 definitions/grib2/tables/8/4.7.table create mode 100644 definitions/grib2/tables/8/4.8.table create mode 100644 definitions/grib2/tables/8/4.9.table create mode 100644 definitions/grib2/tables/8/4.91.table create mode 100644 definitions/grib2/tables/8/5.0.table create mode 100644 definitions/grib2/tables/8/5.1.table create mode 100644 definitions/grib2/tables/8/5.2.table create mode 100644 definitions/grib2/tables/8/5.3.table create mode 100644 definitions/grib2/tables/8/5.4.table create mode 100644 definitions/grib2/tables/8/5.40.table create mode 100644 definitions/grib2/tables/8/5.40000.table create mode 100644 definitions/grib2/tables/8/5.5.table create mode 100644 definitions/grib2/tables/8/5.50002.table create mode 100644 definitions/grib2/tables/8/5.6.table create mode 100644 definitions/grib2/tables/8/5.7.table create mode 100644 definitions/grib2/tables/8/5.8.table create mode 100644 definitions/grib2/tables/8/5.9.table create mode 100644 definitions/grib2/tables/8/6.0.table create mode 100644 definitions/grib2/tables/8/stepType.table create mode 100644 definitions/grib2/tables/9/0.0.table create mode 100644 definitions/grib2/tables/9/1.0.table create mode 100644 definitions/grib2/tables/9/1.1.table create mode 100644 definitions/grib2/tables/9/1.2.table create mode 100644 definitions/grib2/tables/9/1.3.table create mode 100644 definitions/grib2/tables/9/1.4.table create mode 100644 definitions/grib2/tables/9/3.0.table create mode 100644 definitions/grib2/tables/9/3.1.table create mode 100644 definitions/grib2/tables/9/3.10.table create mode 100644 definitions/grib2/tables/9/3.11.table create mode 100644 definitions/grib2/tables/9/3.15.table create mode 100644 definitions/grib2/tables/9/3.2.table create mode 100644 definitions/grib2/tables/9/3.20.table create mode 100644 definitions/grib2/tables/9/3.21.table create mode 100644 definitions/grib2/tables/9/3.3.table create mode 100644 definitions/grib2/tables/9/3.4.table create mode 100644 definitions/grib2/tables/9/3.5.table create mode 100644 definitions/grib2/tables/9/3.6.table create mode 100644 definitions/grib2/tables/9/3.7.table create mode 100644 definitions/grib2/tables/9/3.8.table create mode 100644 definitions/grib2/tables/9/3.9.table create mode 100644 definitions/grib2/tables/9/4.0.table create mode 100644 definitions/grib2/tables/9/4.1.0.table create mode 100644 definitions/grib2/tables/9/4.1.1.table create mode 100644 definitions/grib2/tables/9/4.1.10.table create mode 100644 definitions/grib2/tables/9/4.1.192.table create mode 100644 definitions/grib2/tables/9/4.1.2.table create mode 100644 definitions/grib2/tables/9/4.1.3.table create mode 100644 definitions/grib2/tables/9/4.1.table create mode 100644 definitions/grib2/tables/9/4.10.table create mode 100644 definitions/grib2/tables/9/4.11.table create mode 100644 definitions/grib2/tables/9/4.12.table create mode 100644 definitions/grib2/tables/9/4.13.table create mode 100644 definitions/grib2/tables/9/4.14.table create mode 100644 definitions/grib2/tables/9/4.15.table create mode 100644 definitions/grib2/tables/9/4.151.table create mode 100644 definitions/grib2/tables/9/4.192.table create mode 100644 definitions/grib2/tables/9/4.2.0.0.table create mode 100644 definitions/grib2/tables/9/4.2.0.1.table create mode 100644 definitions/grib2/tables/9/4.2.0.13.table create mode 100644 definitions/grib2/tables/9/4.2.0.14.table create mode 100644 definitions/grib2/tables/9/4.2.0.15.table create mode 100644 definitions/grib2/tables/9/4.2.0.16.table create mode 100644 definitions/grib2/tables/9/4.2.0.18.table create mode 100644 definitions/grib2/tables/9/4.2.0.19.table create mode 100644 definitions/grib2/tables/9/4.2.0.190.table create mode 100644 definitions/grib2/tables/9/4.2.0.191.table create mode 100644 definitions/grib2/tables/9/4.2.0.2.table create mode 100644 definitions/grib2/tables/9/4.2.0.20.table create mode 100644 definitions/grib2/tables/9/4.2.0.3.table create mode 100644 definitions/grib2/tables/9/4.2.0.4.table create mode 100644 definitions/grib2/tables/9/4.2.0.5.table create mode 100644 definitions/grib2/tables/9/4.2.0.6.table create mode 100644 definitions/grib2/tables/9/4.2.0.7.table create mode 100644 definitions/grib2/tables/9/4.2.1.0.table create mode 100644 definitions/grib2/tables/9/4.2.1.1.table create mode 100644 definitions/grib2/tables/9/4.2.1.2.table create mode 100644 definitions/grib2/tables/9/4.2.10.0.table create mode 100644 definitions/grib2/tables/9/4.2.10.1.table create mode 100644 definitions/grib2/tables/9/4.2.10.191.table create mode 100644 definitions/grib2/tables/9/4.2.10.2.table create mode 100644 definitions/grib2/tables/9/4.2.10.3.table create mode 100644 definitions/grib2/tables/9/4.2.10.4.table create mode 100644 definitions/grib2/tables/9/4.2.192.0.table create mode 100644 definitions/grib2/tables/9/4.2.192.1.table create mode 100644 definitions/grib2/tables/9/4.2.192.10.table create mode 100644 definitions/grib2/tables/9/4.2.192.100.table create mode 100644 definitions/grib2/tables/9/4.2.192.101.table create mode 100644 definitions/grib2/tables/9/4.2.192.102.table create mode 100644 definitions/grib2/tables/9/4.2.192.103.table create mode 100644 definitions/grib2/tables/9/4.2.192.104.table create mode 100644 definitions/grib2/tables/9/4.2.192.105.table create mode 100644 definitions/grib2/tables/9/4.2.192.106.table create mode 100644 definitions/grib2/tables/9/4.2.192.107.table create mode 100644 definitions/grib2/tables/9/4.2.192.108.table create mode 100644 definitions/grib2/tables/9/4.2.192.109.table create mode 100644 definitions/grib2/tables/9/4.2.192.11.table create mode 100644 definitions/grib2/tables/9/4.2.192.110.table create mode 100644 definitions/grib2/tables/9/4.2.192.111.table create mode 100644 definitions/grib2/tables/9/4.2.192.112.table create mode 100644 definitions/grib2/tables/9/4.2.192.113.table create mode 100644 definitions/grib2/tables/9/4.2.192.114.table create mode 100644 definitions/grib2/tables/9/4.2.192.115.table create mode 100644 definitions/grib2/tables/9/4.2.192.116.table create mode 100644 definitions/grib2/tables/9/4.2.192.117.table create mode 100644 definitions/grib2/tables/9/4.2.192.118.table create mode 100644 definitions/grib2/tables/9/4.2.192.119.table create mode 100644 definitions/grib2/tables/9/4.2.192.12.table create mode 100644 definitions/grib2/tables/9/4.2.192.120.table create mode 100644 definitions/grib2/tables/9/4.2.192.121.table create mode 100644 definitions/grib2/tables/9/4.2.192.122.table create mode 100644 definitions/grib2/tables/9/4.2.192.123.table create mode 100644 definitions/grib2/tables/9/4.2.192.124.table create mode 100644 definitions/grib2/tables/9/4.2.192.125.table create mode 100644 definitions/grib2/tables/9/4.2.192.126.table create mode 100644 definitions/grib2/tables/9/4.2.192.127.table create mode 100644 definitions/grib2/tables/9/4.2.192.128.table create mode 100644 definitions/grib2/tables/9/4.2.192.129.table create mode 100644 definitions/grib2/tables/9/4.2.192.13.table create mode 100644 definitions/grib2/tables/9/4.2.192.130.table create mode 100644 definitions/grib2/tables/9/4.2.192.131.table create mode 100644 definitions/grib2/tables/9/4.2.192.132.table create mode 100644 definitions/grib2/tables/9/4.2.192.133.table create mode 100644 definitions/grib2/tables/9/4.2.192.134.table create mode 100644 definitions/grib2/tables/9/4.2.192.135.table create mode 100644 definitions/grib2/tables/9/4.2.192.136.table create mode 100644 definitions/grib2/tables/9/4.2.192.137.table create mode 100644 definitions/grib2/tables/9/4.2.192.138.table create mode 100644 definitions/grib2/tables/9/4.2.192.139.table create mode 100644 definitions/grib2/tables/9/4.2.192.14.table create mode 100644 definitions/grib2/tables/9/4.2.192.140.table create mode 100644 definitions/grib2/tables/9/4.2.192.141.table create mode 100644 definitions/grib2/tables/9/4.2.192.142.table create mode 100644 definitions/grib2/tables/9/4.2.192.143.table create mode 100644 definitions/grib2/tables/9/4.2.192.144.table create mode 100644 definitions/grib2/tables/9/4.2.192.145.table create mode 100644 definitions/grib2/tables/9/4.2.192.146.table create mode 100644 definitions/grib2/tables/9/4.2.192.147.table create mode 100644 definitions/grib2/tables/9/4.2.192.148.table create mode 100644 definitions/grib2/tables/9/4.2.192.149.table create mode 100644 definitions/grib2/tables/9/4.2.192.15.table create mode 100644 definitions/grib2/tables/9/4.2.192.150.table create mode 100644 definitions/grib2/tables/9/4.2.192.151.table create mode 100644 definitions/grib2/tables/9/4.2.192.152.table create mode 100644 definitions/grib2/tables/9/4.2.192.153.table create mode 100644 definitions/grib2/tables/9/4.2.192.154.table create mode 100644 definitions/grib2/tables/9/4.2.192.155.table create mode 100644 definitions/grib2/tables/9/4.2.192.156.table create mode 100644 definitions/grib2/tables/9/4.2.192.157.table create mode 100644 definitions/grib2/tables/9/4.2.192.158.table create mode 100644 definitions/grib2/tables/9/4.2.192.159.table create mode 100644 definitions/grib2/tables/9/4.2.192.16.table create mode 100644 definitions/grib2/tables/9/4.2.192.160.table create mode 100644 definitions/grib2/tables/9/4.2.192.161.table create mode 100644 definitions/grib2/tables/9/4.2.192.162.table create mode 100644 definitions/grib2/tables/9/4.2.192.163.table create mode 100644 definitions/grib2/tables/9/4.2.192.164.table create mode 100644 definitions/grib2/tables/9/4.2.192.165.table create mode 100644 definitions/grib2/tables/9/4.2.192.166.table create mode 100644 definitions/grib2/tables/9/4.2.192.167.table create mode 100644 definitions/grib2/tables/9/4.2.192.168.table create mode 100644 definitions/grib2/tables/9/4.2.192.169.table create mode 100644 definitions/grib2/tables/9/4.2.192.17.table create mode 100644 definitions/grib2/tables/9/4.2.192.170.table create mode 100644 definitions/grib2/tables/9/4.2.192.171.table create mode 100644 definitions/grib2/tables/9/4.2.192.172.table create mode 100644 definitions/grib2/tables/9/4.2.192.173.table create mode 100644 definitions/grib2/tables/9/4.2.192.174.table create mode 100644 definitions/grib2/tables/9/4.2.192.175.table create mode 100644 definitions/grib2/tables/9/4.2.192.176.table create mode 100644 definitions/grib2/tables/9/4.2.192.177.table create mode 100644 definitions/grib2/tables/9/4.2.192.178.table create mode 100644 definitions/grib2/tables/9/4.2.192.179.table create mode 100644 definitions/grib2/tables/9/4.2.192.18.table create mode 100644 definitions/grib2/tables/9/4.2.192.180.table create mode 100644 definitions/grib2/tables/9/4.2.192.181.table create mode 100644 definitions/grib2/tables/9/4.2.192.182.table create mode 100644 definitions/grib2/tables/9/4.2.192.183.table create mode 100644 definitions/grib2/tables/9/4.2.192.184.table create mode 100644 definitions/grib2/tables/9/4.2.192.185.table create mode 100644 definitions/grib2/tables/9/4.2.192.186.table create mode 100644 definitions/grib2/tables/9/4.2.192.187.table create mode 100644 definitions/grib2/tables/9/4.2.192.188.table create mode 100644 definitions/grib2/tables/9/4.2.192.189.table create mode 100644 definitions/grib2/tables/9/4.2.192.19.table create mode 100644 definitions/grib2/tables/9/4.2.192.190.table create mode 100644 definitions/grib2/tables/9/4.2.192.191.table create mode 100644 definitions/grib2/tables/9/4.2.192.192.table create mode 100644 definitions/grib2/tables/9/4.2.192.193.table create mode 100644 definitions/grib2/tables/9/4.2.192.194.table create mode 100644 definitions/grib2/tables/9/4.2.192.195.table create mode 100644 definitions/grib2/tables/9/4.2.192.196.table create mode 100644 definitions/grib2/tables/9/4.2.192.197.table create mode 100644 definitions/grib2/tables/9/4.2.192.198.table create mode 100644 definitions/grib2/tables/9/4.2.192.199.table create mode 100644 definitions/grib2/tables/9/4.2.192.2.table create mode 100644 definitions/grib2/tables/9/4.2.192.20.table create mode 100644 definitions/grib2/tables/9/4.2.192.200.table create mode 100644 definitions/grib2/tables/9/4.2.192.201.table create mode 100644 definitions/grib2/tables/9/4.2.192.202.table create mode 100644 definitions/grib2/tables/9/4.2.192.203.table create mode 100644 definitions/grib2/tables/9/4.2.192.204.table create mode 100644 definitions/grib2/tables/9/4.2.192.205.table create mode 100644 definitions/grib2/tables/9/4.2.192.206.table create mode 100644 definitions/grib2/tables/9/4.2.192.207.table create mode 100644 definitions/grib2/tables/9/4.2.192.208.table create mode 100644 definitions/grib2/tables/9/4.2.192.209.table create mode 100644 definitions/grib2/tables/9/4.2.192.21.table create mode 100644 definitions/grib2/tables/9/4.2.192.210.table create mode 100644 definitions/grib2/tables/9/4.2.192.211.table create mode 100644 definitions/grib2/tables/9/4.2.192.212.table create mode 100644 definitions/grib2/tables/9/4.2.192.213.table create mode 100644 definitions/grib2/tables/9/4.2.192.214.table create mode 100644 definitions/grib2/tables/9/4.2.192.215.table create mode 100644 definitions/grib2/tables/9/4.2.192.216.table create mode 100644 definitions/grib2/tables/9/4.2.192.217.table create mode 100644 definitions/grib2/tables/9/4.2.192.218.table create mode 100644 definitions/grib2/tables/9/4.2.192.219.table create mode 100644 definitions/grib2/tables/9/4.2.192.22.table create mode 100644 definitions/grib2/tables/9/4.2.192.220.table create mode 100644 definitions/grib2/tables/9/4.2.192.221.table create mode 100644 definitions/grib2/tables/9/4.2.192.222.table create mode 100644 definitions/grib2/tables/9/4.2.192.223.table create mode 100644 definitions/grib2/tables/9/4.2.192.224.table create mode 100644 definitions/grib2/tables/9/4.2.192.225.table create mode 100644 definitions/grib2/tables/9/4.2.192.226.table create mode 100644 definitions/grib2/tables/9/4.2.192.227.table create mode 100644 definitions/grib2/tables/9/4.2.192.228.table create mode 100644 definitions/grib2/tables/9/4.2.192.229.table create mode 100644 definitions/grib2/tables/9/4.2.192.23.table create mode 100644 definitions/grib2/tables/9/4.2.192.230.table create mode 100644 definitions/grib2/tables/9/4.2.192.231.table create mode 100644 definitions/grib2/tables/9/4.2.192.232.table create mode 100644 definitions/grib2/tables/9/4.2.192.233.table create mode 100644 definitions/grib2/tables/9/4.2.192.234.table create mode 100644 definitions/grib2/tables/9/4.2.192.235.table create mode 100644 definitions/grib2/tables/9/4.2.192.236.table create mode 100644 definitions/grib2/tables/9/4.2.192.237.table create mode 100644 definitions/grib2/tables/9/4.2.192.238.table create mode 100644 definitions/grib2/tables/9/4.2.192.239.table create mode 100644 definitions/grib2/tables/9/4.2.192.24.table create mode 100644 definitions/grib2/tables/9/4.2.192.240.table create mode 100644 definitions/grib2/tables/9/4.2.192.241.table create mode 100644 definitions/grib2/tables/9/4.2.192.242.table create mode 100644 definitions/grib2/tables/9/4.2.192.243.table create mode 100644 definitions/grib2/tables/9/4.2.192.244.table create mode 100644 definitions/grib2/tables/9/4.2.192.245.table create mode 100644 definitions/grib2/tables/9/4.2.192.246.table create mode 100644 definitions/grib2/tables/9/4.2.192.247.table create mode 100644 definitions/grib2/tables/9/4.2.192.248.table create mode 100644 definitions/grib2/tables/9/4.2.192.249.table create mode 100644 definitions/grib2/tables/9/4.2.192.25.table create mode 100644 definitions/grib2/tables/9/4.2.192.250.table create mode 100644 definitions/grib2/tables/9/4.2.192.251.table create mode 100644 definitions/grib2/tables/9/4.2.192.252.table create mode 100644 definitions/grib2/tables/9/4.2.192.253.table create mode 100644 definitions/grib2/tables/9/4.2.192.254.table create mode 100644 definitions/grib2/tables/9/4.2.192.255.table create mode 100644 definitions/grib2/tables/9/4.2.192.26.table create mode 100644 definitions/grib2/tables/9/4.2.192.27.table create mode 100644 definitions/grib2/tables/9/4.2.192.28.table create mode 100644 definitions/grib2/tables/9/4.2.192.29.table create mode 100644 definitions/grib2/tables/9/4.2.192.3.table create mode 100644 definitions/grib2/tables/9/4.2.192.30.table create mode 100644 definitions/grib2/tables/9/4.2.192.31.table create mode 100644 definitions/grib2/tables/9/4.2.192.32.table create mode 100644 definitions/grib2/tables/9/4.2.192.33.table create mode 100644 definitions/grib2/tables/9/4.2.192.34.table create mode 100644 definitions/grib2/tables/9/4.2.192.35.table create mode 100644 definitions/grib2/tables/9/4.2.192.36.table create mode 100644 definitions/grib2/tables/9/4.2.192.37.table create mode 100644 definitions/grib2/tables/9/4.2.192.38.table create mode 100644 definitions/grib2/tables/9/4.2.192.39.table create mode 100644 definitions/grib2/tables/9/4.2.192.4.table create mode 100644 definitions/grib2/tables/9/4.2.192.40.table create mode 100644 definitions/grib2/tables/9/4.2.192.41.table create mode 100644 definitions/grib2/tables/9/4.2.192.42.table create mode 100644 definitions/grib2/tables/9/4.2.192.43.table create mode 100644 definitions/grib2/tables/9/4.2.192.44.table create mode 100644 definitions/grib2/tables/9/4.2.192.45.table create mode 100644 definitions/grib2/tables/9/4.2.192.46.table create mode 100644 definitions/grib2/tables/9/4.2.192.47.table create mode 100644 definitions/grib2/tables/9/4.2.192.48.table create mode 100644 definitions/grib2/tables/9/4.2.192.49.table create mode 100644 definitions/grib2/tables/9/4.2.192.5.table create mode 100644 definitions/grib2/tables/9/4.2.192.50.table create mode 100644 definitions/grib2/tables/9/4.2.192.51.table create mode 100644 definitions/grib2/tables/9/4.2.192.52.table create mode 100644 definitions/grib2/tables/9/4.2.192.53.table create mode 100644 definitions/grib2/tables/9/4.2.192.54.table create mode 100644 definitions/grib2/tables/9/4.2.192.55.table create mode 100644 definitions/grib2/tables/9/4.2.192.56.table create mode 100644 definitions/grib2/tables/9/4.2.192.57.table create mode 100644 definitions/grib2/tables/9/4.2.192.58.table create mode 100644 definitions/grib2/tables/9/4.2.192.59.table create mode 100644 definitions/grib2/tables/9/4.2.192.6.table create mode 100644 definitions/grib2/tables/9/4.2.192.60.table create mode 100644 definitions/grib2/tables/9/4.2.192.61.table create mode 100644 definitions/grib2/tables/9/4.2.192.62.table create mode 100644 definitions/grib2/tables/9/4.2.192.63.table create mode 100644 definitions/grib2/tables/9/4.2.192.64.table create mode 100644 definitions/grib2/tables/9/4.2.192.65.table create mode 100644 definitions/grib2/tables/9/4.2.192.66.table create mode 100644 definitions/grib2/tables/9/4.2.192.67.table create mode 100644 definitions/grib2/tables/9/4.2.192.68.table create mode 100644 definitions/grib2/tables/9/4.2.192.69.table create mode 100644 definitions/grib2/tables/9/4.2.192.7.table create mode 100644 definitions/grib2/tables/9/4.2.192.70.table create mode 100644 definitions/grib2/tables/9/4.2.192.71.table create mode 100644 definitions/grib2/tables/9/4.2.192.72.table create mode 100644 definitions/grib2/tables/9/4.2.192.73.table create mode 100644 definitions/grib2/tables/9/4.2.192.74.table create mode 100644 definitions/grib2/tables/9/4.2.192.75.table create mode 100644 definitions/grib2/tables/9/4.2.192.76.table create mode 100644 definitions/grib2/tables/9/4.2.192.77.table create mode 100644 definitions/grib2/tables/9/4.2.192.78.table create mode 100644 definitions/grib2/tables/9/4.2.192.79.table create mode 100644 definitions/grib2/tables/9/4.2.192.8.table create mode 100644 definitions/grib2/tables/9/4.2.192.80.table create mode 100644 definitions/grib2/tables/9/4.2.192.81.table create mode 100644 definitions/grib2/tables/9/4.2.192.82.table create mode 100644 definitions/grib2/tables/9/4.2.192.83.table create mode 100644 definitions/grib2/tables/9/4.2.192.84.table create mode 100644 definitions/grib2/tables/9/4.2.192.85.table create mode 100644 definitions/grib2/tables/9/4.2.192.86.table create mode 100644 definitions/grib2/tables/9/4.2.192.87.table create mode 100644 definitions/grib2/tables/9/4.2.192.88.table create mode 100644 definitions/grib2/tables/9/4.2.192.89.table create mode 100644 definitions/grib2/tables/9/4.2.192.9.table create mode 100644 definitions/grib2/tables/9/4.2.192.90.table create mode 100644 definitions/grib2/tables/9/4.2.192.91.table create mode 100644 definitions/grib2/tables/9/4.2.192.92.table create mode 100644 definitions/grib2/tables/9/4.2.192.93.table create mode 100644 definitions/grib2/tables/9/4.2.192.94.table create mode 100644 definitions/grib2/tables/9/4.2.192.95.table create mode 100644 definitions/grib2/tables/9/4.2.192.96.table create mode 100644 definitions/grib2/tables/9/4.2.192.97.table create mode 100644 definitions/grib2/tables/9/4.2.192.98.table create mode 100644 definitions/grib2/tables/9/4.2.192.99.table create mode 100644 definitions/grib2/tables/9/4.2.2.0.table create mode 100644 definitions/grib2/tables/9/4.2.2.3.table create mode 100644 definitions/grib2/tables/9/4.2.2.4.table create mode 100644 definitions/grib2/tables/9/4.2.3.0.table create mode 100644 definitions/grib2/tables/9/4.2.3.1.table create mode 100644 definitions/grib2/tables/9/4.2.table create mode 100644 definitions/grib2/tables/9/4.201.table create mode 100644 definitions/grib2/tables/9/4.202.table create mode 100644 definitions/grib2/tables/9/4.203.table create mode 100644 definitions/grib2/tables/9/4.204.table create mode 100644 definitions/grib2/tables/9/4.205.table create mode 100644 definitions/grib2/tables/9/4.206.table create mode 100644 definitions/grib2/tables/9/4.207.table create mode 100644 definitions/grib2/tables/9/4.208.table create mode 100644 definitions/grib2/tables/9/4.209.table create mode 100644 definitions/grib2/tables/9/4.210.table create mode 100644 definitions/grib2/tables/9/4.211.table create mode 100644 definitions/grib2/tables/9/4.212.table create mode 100644 definitions/grib2/tables/9/4.213.table create mode 100644 definitions/grib2/tables/9/4.215.table create mode 100644 definitions/grib2/tables/9/4.216.table create mode 100644 definitions/grib2/tables/9/4.217.table create mode 100644 definitions/grib2/tables/9/4.218.table create mode 100644 definitions/grib2/tables/9/4.219.table create mode 100644 definitions/grib2/tables/9/4.220.table create mode 100644 definitions/grib2/tables/9/4.221.table create mode 100644 definitions/grib2/tables/9/4.222.table create mode 100644 definitions/grib2/tables/9/4.223.table create mode 100644 definitions/grib2/tables/9/4.224.table create mode 100644 definitions/grib2/tables/9/4.227.table create mode 100644 definitions/grib2/tables/9/4.230.table create mode 100644 definitions/grib2/tables/9/4.233.table create mode 100644 definitions/grib2/tables/9/4.234.table create mode 100644 definitions/grib2/tables/9/4.235.table create mode 100644 definitions/grib2/tables/9/4.3.table create mode 100644 definitions/grib2/tables/9/4.4.table create mode 100644 definitions/grib2/tables/9/4.5.table create mode 100644 definitions/grib2/tables/9/4.6.table create mode 100644 definitions/grib2/tables/9/4.7.table create mode 100644 definitions/grib2/tables/9/4.8.table create mode 100644 definitions/grib2/tables/9/4.9.table create mode 100644 definitions/grib2/tables/9/4.91.table create mode 100644 definitions/grib2/tables/9/5.0.table create mode 100644 definitions/grib2/tables/9/5.1.table create mode 100644 definitions/grib2/tables/9/5.2.table create mode 100644 definitions/grib2/tables/9/5.3.table create mode 100644 definitions/grib2/tables/9/5.4.table create mode 100644 definitions/grib2/tables/9/5.40.table create mode 100644 definitions/grib2/tables/9/5.40000.table create mode 100644 definitions/grib2/tables/9/5.5.table create mode 100644 definitions/grib2/tables/9/5.50002.table create mode 100644 definitions/grib2/tables/9/5.6.table create mode 100644 definitions/grib2/tables/9/5.7.table create mode 100644 definitions/grib2/tables/9/5.8.table create mode 100644 definitions/grib2/tables/9/5.9.table create mode 100644 definitions/grib2/tables/9/6.0.table create mode 100644 definitions/grib2/tables/9/stepType.table create mode 100644 definitions/grib2/tables/local/ecmf/4/1.2.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.1.0.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.10.0.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.11.0.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.2.0.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.3.0.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.4.0.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.5.0.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.6.0.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.7.0.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.8.0.table create mode 100644 definitions/grib2/tables/local/ecmf/obstat.9.0.table create mode 100755 definitions/grib2/tables/local/ecmf/obstat.reporttype create mode 100755 definitions/grib2/tables/local/ecmf/obstat.varno create mode 100644 definitions/grib2/template.3.0.def create mode 100644 definitions/grib2/template.3.1.def create mode 100644 definitions/grib2/template.3.10.def create mode 100644 definitions/grib2/template.3.100.def create mode 100644 definitions/grib2/template.3.1000.def create mode 100644 definitions/grib2/template.3.101.def create mode 100644 definitions/grib2/template.3.110.def create mode 100644 definitions/grib2/template.3.1100.def create mode 100644 definitions/grib2/template.3.12.def create mode 100644 definitions/grib2/template.3.120.def create mode 100644 definitions/grib2/template.3.1200.def create mode 100644 definitions/grib2/template.3.130.def create mode 100644 definitions/grib2/template.3.140.def create mode 100644 definitions/grib2/template.3.2.def create mode 100644 definitions/grib2/template.3.20.def create mode 100644 definitions/grib2/template.3.3.def create mode 100644 definitions/grib2/template.3.30.def create mode 100644 definitions/grib2/template.3.31.def create mode 100644 definitions/grib2/template.3.4.def create mode 100644 definitions/grib2/template.3.40.def create mode 100644 definitions/grib2/template.3.41.def create mode 100644 definitions/grib2/template.3.42.def create mode 100644 definitions/grib2/template.3.43.def create mode 100644 definitions/grib2/template.3.5.def create mode 100644 definitions/grib2/template.3.50.def create mode 100644 definitions/grib2/template.3.51.def create mode 100644 definitions/grib2/template.3.52.def create mode 100644 definitions/grib2/template.3.53.def create mode 100644 definitions/grib2/template.3.90.def create mode 100755 definitions/grib2/template.3.gaussian.def create mode 100644 definitions/grib2/template.3.grid.def create mode 100755 definitions/grib2/template.3.latlon.def create mode 100755 definitions/grib2/template.3.latlon_vares.def create mode 100644 definitions/grib2/template.3.resolution_flags.def create mode 100755 definitions/grib2/template.3.rotation.def create mode 100644 definitions/grib2/template.3.scanning_mode.def create mode 100755 definitions/grib2/template.3.shape_of_the_earth.def create mode 100755 definitions/grib2/template.3.spherical_harmonics.def create mode 100755 definitions/grib2/template.3.stretching.def create mode 100644 definitions/grib2/template.4.0.def create mode 100644 definitions/grib2/template.4.1.def create mode 100644 definitions/grib2/template.4.10.def create mode 100644 definitions/grib2/template.4.1000.def create mode 100644 definitions/grib2/template.4.1001.def create mode 100644 definitions/grib2/template.4.1002.def create mode 100644 definitions/grib2/template.4.11.def create mode 100644 definitions/grib2/template.4.1100.def create mode 100644 definitions/grib2/template.4.1101.def create mode 100644 definitions/grib2/template.4.12.def create mode 100644 definitions/grib2/template.4.13.def create mode 100644 definitions/grib2/template.4.14.def create mode 100644 definitions/grib2/template.4.15.def create mode 100644 definitions/grib2/template.4.2.def create mode 100644 definitions/grib2/template.4.20.def create mode 100644 definitions/grib2/template.4.2000.def create mode 100644 definitions/grib2/template.4.254.def create mode 100644 definitions/grib2/template.4.3.def create mode 100644 definitions/grib2/template.4.30.def create mode 100644 definitions/grib2/template.4.31.def create mode 100644 definitions/grib2/template.4.311.def create mode 100644 definitions/grib2/template.4.32.def create mode 100644 definitions/grib2/template.4.4.def create mode 100644 definitions/grib2/template.4.40.def create mode 100644 definitions/grib2/template.4.40033.def create mode 100644 definitions/grib2/template.4.40034.def create mode 100644 definitions/grib2/template.4.40052.def create mode 100644 definitions/grib2/template.4.41.def create mode 100644 definitions/grib2/template.4.42.def create mode 100644 definitions/grib2/template.4.43.def create mode 100644 definitions/grib2/template.4.44.def create mode 100644 definitions/grib2/template.4.45.def create mode 100644 definitions/grib2/template.4.46.def create mode 100644 definitions/grib2/template.4.47.def create mode 100644 definitions/grib2/template.4.48.def create mode 100644 definitions/grib2/template.4.5.def create mode 100644 definitions/grib2/template.4.51.def create mode 100644 definitions/grib2/template.4.6.def create mode 100644 definitions/grib2/template.4.7.def create mode 100644 definitions/grib2/template.4.8.def create mode 100644 definitions/grib2/template.4.9.def create mode 100644 definitions/grib2/template.4.91.def create mode 100755 definitions/grib2/template.4.categorical.def create mode 100755 definitions/grib2/template.4.circular_cluster.def create mode 100755 definitions/grib2/template.4.derived.def create mode 100644 definitions/grib2/template.4.eps.def create mode 100755 definitions/grib2/template.4.horizontal.def create mode 100644 definitions/grib2/template.4.parameter.def create mode 100644 definitions/grib2/template.4.parameter_aerosol.def create mode 100644 definitions/grib2/template.4.parameter_aerosol_optical.def create mode 100644 definitions/grib2/template.4.parameter_chemical.def create mode 100644 definitions/grib2/template.4.parameter_partition.def create mode 100755 definitions/grib2/template.4.percentile.def create mode 100644 definitions/grib2/template.4.point_in_time.def create mode 100755 definitions/grib2/template.4.probability.def create mode 100755 definitions/grib2/template.4.rectangular_cluster.def create mode 100644 definitions/grib2/template.4.statistical.def create mode 100644 definitions/grib2/template.5.0.def create mode 100644 definitions/grib2/template.5.1.def create mode 100644 definitions/grib2/template.5.2.def create mode 100644 definitions/grib2/template.5.3.def create mode 100644 definitions/grib2/template.5.4.def create mode 100644 definitions/grib2/template.5.40.def create mode 100644 definitions/grib2/template.5.40000.def create mode 100644 definitions/grib2/template.5.40010.def create mode 100644 definitions/grib2/template.5.41.def create mode 100644 definitions/grib2/template.5.42.def create mode 100644 definitions/grib2/template.5.50.def create mode 100644 definitions/grib2/template.5.50000.def create mode 100755 definitions/grib2/template.5.50001.def create mode 100755 definitions/grib2/template.5.50002.def create mode 100644 definitions/grib2/template.5.51.def create mode 100644 definitions/grib2/template.5.6.def create mode 100644 definitions/grib2/template.5.61.def create mode 100644 definitions/grib2/template.5.original_values.def create mode 100755 definitions/grib2/template.5.packing.def create mode 100644 definitions/grib2/template.5.second_order.def create mode 100644 definitions/grib2/template.7.0.def create mode 100644 definitions/grib2/template.7.1.def create mode 100644 definitions/grib2/template.7.2.def create mode 100644 definitions/grib2/template.7.3.def create mode 100644 definitions/grib2/template.7.4.def create mode 100644 definitions/grib2/template.7.40.def create mode 100644 definitions/grib2/template.7.40000.def create mode 100644 definitions/grib2/template.7.40010.def create mode 100644 definitions/grib2/template.7.41.def create mode 100644 definitions/grib2/template.7.42.def create mode 100644 definitions/grib2/template.7.50.def create mode 100644 definitions/grib2/template.7.50000.def create mode 100644 definitions/grib2/template.7.50001.def create mode 100644 definitions/grib2/template.7.50002.def create mode 100644 definitions/grib2/template.7.51.def create mode 100644 definitions/grib2/template.7.6.def create mode 100644 definitions/grib2/template.7.61.def create mode 100644 definitions/grib2/template.7.second_order.def create mode 100644 definitions/grib2/template.second_order.def create mode 100644 definitions/grib2/tiggeLocalVersion.table create mode 100644 definitions/grib2/tigge_name.def create mode 100644 definitions/grib2/tigge_parameter.def create mode 100644 definitions/grib2/tigge_short_name.def create mode 100644 definitions/grib2/tigge_suiteName.table create mode 100644 definitions/grib2/units.def create mode 100644 definitions/gts/boot.def create mode 100755 definitions/inject_download_page.pl create mode 100755 definitions/installDefinitions.sh create mode 100755 definitions/make_makefile_am.pl create mode 100755 definitions/mars/analyse.pl create mode 100644 definitions/mars/base.def create mode 100644 definitions/mars/class.table create mode 100644 definitions/mars/default_labeling.def create mode 100644 definitions/mars/domain.96.table create mode 100644 definitions/mars/domain.table create mode 100755 definitions/mars/genfiles.ksh create mode 100644 definitions/mars/grib1.amap.an.def create mode 100644 definitions/mars/grib1.dacl.pb.def create mode 100644 definitions/mars/grib1.dacw.pb.def create mode 100644 definitions/mars/grib1.dcda.4i.def create mode 120000 definitions/mars/grib1.dcda.me.def create mode 100644 definitions/mars/grib1.dcda.sim.def create mode 100644 definitions/mars/grib1.edmm.an.def create mode 100644 definitions/mars/grib1.edmm.cl.def create mode 100644 definitions/mars/grib1.edmm.fc.def create mode 100644 definitions/mars/grib1.edmm.fg.def create mode 100644 definitions/mars/grib1.edmm.ia.def create mode 100644 definitions/mars/grib1.edmm.ssd.def create mode 100644 definitions/mars/grib1.edmo.an.def create mode 100644 definitions/mars/grib1.edmo.cl.def create mode 100644 definitions/mars/grib1.edmo.fc.def create mode 100644 definitions/mars/grib1.edmo.ssd.def create mode 100644 definitions/mars/grib1.efhc.cf.def create mode 100644 definitions/mars/grib1.efhc.icp.def create mode 100644 definitions/mars/grib1.efhc.pf.def create mode 100644 definitions/mars/grib1.efho.cf.def create mode 100644 definitions/mars/grib1.efho.pf.def create mode 100644 definitions/mars/grib1.efhs.cd.def create mode 100644 definitions/mars/grib1.efhs.ed.def create mode 100644 definitions/mars/grib1.efhs.em.def create mode 100644 definitions/mars/grib1.efhs.es.def create mode 100644 definitions/mars/grib1.efhs.taem.def create mode 100644 definitions/mars/grib1.efhs.taes.def create mode 100644 definitions/mars/grib1.efov.pf.def create mode 100644 definitions/mars/grib1.ehmm.em.def create mode 100644 definitions/mars/grib1.elda.4i.def create mode 100644 definitions/mars/grib1.elda.4v.def create mode 100644 definitions/mars/grib1.elda.an.def create mode 100644 definitions/mars/grib1.elda.ea.def create mode 100644 definitions/mars/grib1.elda.ef.def create mode 100644 definitions/mars/grib1.elda.em.def create mode 100644 definitions/mars/grib1.elda.es.def create mode 100644 definitions/mars/grib1.elda.fc.def create mode 100644 definitions/mars/grib1.elda.me.def create mode 100644 definitions/mars/grib1.elda.ses.def create mode 120000 definitions/mars/grib1.enda.4v.def create mode 120000 definitions/mars/grib1.enda.an.def create mode 100644 definitions/mars/grib1.enda.def create mode 120000 definitions/mars/grib1.enda.ea.def create mode 120000 definitions/mars/grib1.enda.ef.def create mode 120000 definitions/mars/grib1.enda.em.def create mode 120000 definitions/mars/grib1.enda.es.def create mode 100644 definitions/mars/grib1.enda.fc.def create mode 100644 definitions/mars/grib1.enda.ssd.def create mode 120000 definitions/mars/grib1.enda.sv.def create mode 120000 definitions/mars/grib1.enda.svar.def create mode 100644 definitions/mars/grib1.enfh.cf.def create mode 100644 definitions/mars/grib1.enfh.fcmax.def create mode 100644 definitions/mars/grib1.enfh.fcmean.def create mode 100644 definitions/mars/grib1.enfh.fcmin.def create mode 100644 definitions/mars/grib1.enfh.fcstdev.def create mode 100644 definitions/mars/grib1.enfh.ff.def create mode 100644 definitions/mars/grib1.enfh.icp.def create mode 100644 definitions/mars/grib1.enfh.pf.def create mode 100644 definitions/mars/grib1.enfh.tims.def create mode 120000 definitions/mars/grib1.enfo.cf.def create mode 100644 definitions/mars/grib1.enfo.ci.def create mode 100644 definitions/mars/grib1.enfo.cm.def create mode 120000 definitions/mars/grib1.enfo.cr.def create mode 100644 definitions/mars/grib1.enfo.cs.def create mode 100644 definitions/mars/grib1.enfo.cv.def create mode 100644 definitions/mars/grib1.enfo.ed.def create mode 120000 definitions/mars/grib1.enfo.ef.def create mode 100644 definitions/mars/grib1.enfo.efi.def create mode 100644 definitions/mars/grib1.enfo.efic.def create mode 100644 definitions/mars/grib1.enfo.em.def create mode 100644 definitions/mars/grib1.enfo.ep.def create mode 100644 definitions/mars/grib1.enfo.es.def create mode 120000 definitions/mars/grib1.enfo.fc.def create mode 100644 definitions/mars/grib1.enfo.fcmax.def create mode 100644 definitions/mars/grib1.enfo.fcmean.def create mode 100644 definitions/mars/grib1.enfo.fcmin.def create mode 100644 definitions/mars/grib1.enfo.fcstdev.def create mode 100644 definitions/mars/grib1.enfo.ff.def create mode 100644 definitions/mars/grib1.enfo.fp.def create mode 100644 definitions/mars/grib1.enfo.icp.def create mode 100644 definitions/mars/grib1.enfo.pb.def create mode 100644 definitions/mars/grib1.enfo.pd.def create mode 100644 definitions/mars/grib1.enfo.pf.def create mode 100644 definitions/mars/grib1.enfo.sot.def create mode 100644 definitions/mars/grib1.enfo.sv.def create mode 100644 definitions/mars/grib1.enfo.svar.def create mode 100644 definitions/mars/grib1.enfo.taem.def create mode 100644 definitions/mars/grib1.enfo.taes.def create mode 100644 definitions/mars/grib1.enfo.tu.def create mode 100644 definitions/mars/grib1.enwh.cf.def create mode 100644 definitions/mars/grib1.enwh.fcmax.def create mode 100644 definitions/mars/grib1.enwh.fcmean.def create mode 100644 definitions/mars/grib1.enwh.fcmin.def create mode 100644 definitions/mars/grib1.enwh.fcstdev.def create mode 100644 definitions/mars/grib1.enwh.pf.def create mode 100644 definitions/mars/grib1.esmm.em.def create mode 100644 definitions/mars/grib1.espd.an.def create mode 120000 definitions/mars/grib1.ewda.4v.def create mode 120000 definitions/mars/grib1.ewda.an.def create mode 100644 definitions/mars/grib1.ewda.def create mode 120000 definitions/mars/grib1.ewda.fc.def create mode 100644 definitions/mars/grib1.ewhc.cf.def create mode 100644 definitions/mars/grib1.ewhc.pf.def create mode 100644 definitions/mars/grib1.ewho.cf.def create mode 100644 definitions/mars/grib1.ewho.pf.def create mode 100644 definitions/mars/grib1.ewla.4v.def create mode 100644 definitions/mars/grib1.ewla.an.def create mode 100644 definitions/mars/grib1.ewla.fc.def create mode 100644 definitions/mars/grib1.ewmm.an.def create mode 100644 definitions/mars/grib1.ewmm.cl.def create mode 100644 definitions/mars/grib1.ewmm.fc.def create mode 100644 definitions/mars/grib1.ewmo.an.def create mode 100644 definitions/mars/grib1.ewmo.cl.def create mode 100644 definitions/mars/grib1.ewmo.def create mode 100644 definitions/mars/grib1.ewmo.fc.def create mode 100644 definitions/mars/grib1.kwbc.pf.def create mode 100644 definitions/mars/grib1.lwda.4i.def create mode 100644 definitions/mars/grib1.lwda.4v.def create mode 100644 definitions/mars/grib1.lwda.an.def create mode 100644 definitions/mars/grib1.lwda.ea.def create mode 100644 definitions/mars/grib1.lwda.ef.def create mode 100644 definitions/mars/grib1.lwda.fc.def create mode 100644 definitions/mars/grib1.lwda.me.def create mode 100644 definitions/mars/grib1.lwwv.4v.def create mode 100644 definitions/mars/grib1.lwwv.an.def create mode 100644 definitions/mars/grib1.lwwv.fc.def create mode 100644 definitions/mars/grib1.maed.an.def create mode 100644 definitions/mars/grib1.maed.fc.def create mode 100644 definitions/mars/grib1.mawv.fc.def create mode 100644 definitions/mars/grib1.mdfa.fc.def create mode 100644 definitions/mars/grib1.me.def create mode 100644 definitions/mars/grib1.mfam.em.def create mode 100644 definitions/mars/grib1.mfam.fcmean.def create mode 100644 definitions/mars/grib1.mfam.fp.def create mode 100644 definitions/mars/grib1.mfam.pb.def create mode 100644 definitions/mars/grib1.mfam.pd.def create mode 100644 definitions/mars/grib1.mfhm.em.def create mode 100644 definitions/mars/grib1.mfhm.es.def create mode 100644 definitions/mars/grib1.mfhm.fcmax.def create mode 100644 definitions/mars/grib1.mfhm.fcmean.def create mode 100644 definitions/mars/grib1.mfhm.fcmin.def create mode 100644 definitions/mars/grib1.mfhm.fcstdev.def create mode 100644 definitions/mars/grib1.mfhw.cf.def create mode 100644 definitions/mars/grib1.mfhw.fc.def create mode 100644 definitions/mars/grib1.mfwm.fcmax.def create mode 100644 definitions/mars/grib1.mfwm.fcmean.def create mode 100644 definitions/mars/grib1.mfwm.fcmin.def create mode 100644 definitions/mars/grib1.mfwm.fcstdev.def create mode 100644 definitions/mars/grib1.mhwm.fcmax.def create mode 100644 definitions/mars/grib1.mhwm.fcmean.def create mode 100644 definitions/mars/grib1.mhwm.fcmin.def create mode 100644 definitions/mars/grib1.mhwm.fcstdev.def create mode 100644 definitions/mars/grib1.mmaf.fc.def create mode 100644 definitions/mars/grib1.mmaf.fcmean.def create mode 100644 definitions/mars/grib1.mmam.fcmean.def create mode 100644 definitions/mars/grib1.mmsa.em.def create mode 100644 definitions/mars/grib1.mmsa.fcmean.def create mode 100644 definitions/mars/grib1.mmsf.fc.def create mode 100644 definitions/mars/grib1.mmsf.icp.def create mode 100644 definitions/mars/grib1.mnfc.cf.def create mode 100644 definitions/mars/grib1.mnfc.ed.def create mode 100644 definitions/mars/grib1.mnfc.em.def create mode 100644 definitions/mars/grib1.mnfc.es.def create mode 100644 definitions/mars/grib1.mnfc.fc.def create mode 100644 definitions/mars/grib1.mnfc.ff.def create mode 100644 definitions/mars/grib1.mnfc.icp.def create mode 100644 definitions/mars/grib1.mnfc.of.def create mode 100644 definitions/mars/grib1.mnfh.cf.def create mode 100644 definitions/mars/grib1.mnfh.ed.def create mode 100644 definitions/mars/grib1.mnfh.em.def create mode 100644 definitions/mars/grib1.mnfh.es.def create mode 100644 definitions/mars/grib1.mnfh.fc.def create mode 100644 definitions/mars/grib1.mnfh.icp.def create mode 100644 definitions/mars/grib1.mnfm.em.def create mode 100644 definitions/mars/grib1.mnfm.es.def create mode 100644 definitions/mars/grib1.mnfm.fcmax.def create mode 100644 definitions/mars/grib1.mnfm.fcmean.def create mode 100644 definitions/mars/grib1.mnfm.fcmin.def create mode 100644 definitions/mars/grib1.mnfm.fcstdev.def create mode 100644 definitions/mars/grib1.mnfw.cf.def create mode 100644 definitions/mars/grib1.mnfw.fc.def create mode 100644 definitions/mars/grib1.mnth.an.def create mode 100644 definitions/mars/grib1.mnth.cl.def create mode 100644 definitions/mars/grib1.mnth.fc.def create mode 100644 definitions/mars/grib1.mnth.fg.def create mode 100644 definitions/mars/grib1.mnth.ia.def create mode 100644 definitions/mars/grib1.mnth.ssd.def create mode 100644 definitions/mars/grib1.moda.an.def create mode 100644 definitions/mars/grib1.moda.cl.def create mode 100644 definitions/mars/grib1.moda.fc.def create mode 100644 definitions/mars/grib1.moda.ssd.def create mode 100644 definitions/mars/grib1.mofc.cf.def create mode 100644 definitions/mars/grib1.mofc.ed.def create mode 100644 definitions/mars/grib1.mofc.em.def create mode 100644 definitions/mars/grib1.mofc.es.def create mode 100644 definitions/mars/grib1.mofc.fc.def create mode 100644 definitions/mars/grib1.mofc.ff.def create mode 100644 definitions/mars/grib1.mofc.of.def create mode 100644 definitions/mars/grib1.mofm.fcmax.def create mode 100644 definitions/mars/grib1.mofm.fcmean.def create mode 100644 definitions/mars/grib1.mofm.fcmin.def create mode 100644 definitions/mars/grib1.mofm.fcstdev.def create mode 100644 definitions/mars/grib1.mpic.s3.def create mode 100644 definitions/mars/grib1.msda.an.def create mode 100644 definitions/mars/grib1.msdc.an.def create mode 100644 definitions/mars/grib1.msdc.fc.def create mode 100644 definitions/mars/grib1.msmm.em.def create mode 100644 definitions/mars/grib1.msmm.fcmax.def create mode 100644 definitions/mars/grib1.msmm.fcmean.def create mode 100644 definitions/mars/grib1.msmm.fcmin.def create mode 100644 definitions/mars/grib1.msmm.fcstdev.def create mode 120000 definitions/mars/grib1.msmm.hcmean.def create mode 100644 definitions/mars/grib1.ocea.an.def create mode 100644 definitions/mars/grib1.ocea.ff.def create mode 100644 definitions/mars/grib1.ocea.fx.def create mode 100644 definitions/mars/grib1.ocea.of.def create mode 100644 definitions/mars/grib1.ocea.or.def create mode 120000 definitions/mars/grib1.oper.3v.def create mode 100644 definitions/mars/grib1.oper.4i.def create mode 120000 definitions/mars/grib1.oper.4v.def create mode 120000 definitions/mars/grib1.oper.an.def create mode 100644 definitions/mars/grib1.oper.ea.def create mode 120000 definitions/mars/grib1.oper.ef.def create mode 100644 definitions/mars/grib1.oper.fa.def create mode 100644 definitions/mars/grib1.oper.fc.def create mode 100644 definitions/mars/grib1.oper.fg.def create mode 100644 definitions/mars/grib1.oper.go.def create mode 120000 definitions/mars/grib1.oper.ia.def create mode 100644 definitions/mars/grib1.oper.im.def create mode 120000 definitions/mars/grib1.oper.me.def create mode 120000 definitions/mars/grib1.oper.oi.def create mode 120000 definitions/mars/grib1.oper.si.def create mode 100644 definitions/mars/grib1.oper.sim.def create mode 100644 definitions/mars/grib1.oper.ssd.def create mode 100644 definitions/mars/grib1.scda.4i.def create mode 120000 definitions/mars/grib1.scda.me.def create mode 100644 definitions/mars/grib1.seap.an.def create mode 100644 definitions/mars/grib1.seap.ef.def create mode 100644 definitions/mars/grib1.seap.es.def create mode 100644 definitions/mars/grib1.seap.fc.def create mode 100644 definitions/mars/grib1.seap.sv.def create mode 100644 definitions/mars/grib1.seap.svar.def create mode 100644 definitions/mars/grib1.seas.an.def create mode 100644 definitions/mars/grib1.seas.fc.def create mode 100644 definitions/mars/grib1.seas.ff.def create mode 100644 definitions/mars/grib1.seas.fx.def create mode 100644 definitions/mars/grib1.seas.of.def create mode 100644 definitions/mars/grib1.seas.or.def create mode 100644 definitions/mars/grib1.sens.me.def create mode 100644 definitions/mars/grib1.sens.sf.def create mode 100644 definitions/mars/grib1.sens.sg.def create mode 100644 definitions/mars/grib1.sfmm.em.def create mode 100644 definitions/mars/grib1.sfmm.fcmax.def create mode 100644 definitions/mars/grib1.sfmm.fcmean.def create mode 100644 definitions/mars/grib1.sfmm.fcmin.def create mode 100644 definitions/mars/grib1.sfmm.fcstdev.def create mode 100644 definitions/mars/grib1.smma.em.def create mode 100644 definitions/mars/grib1.smma.fcmean.def create mode 100644 definitions/mars/grib1.supd.an.def create mode 100644 definitions/mars/grib1.swmm.fcmax.def create mode 100644 definitions/mars/grib1.swmm.fcmean.def create mode 100644 definitions/mars/grib1.swmm.fcmin.def create mode 100644 definitions/mars/grib1.swmm.fcstdev.def create mode 100644 definitions/mars/grib1.ukmo.s3.def create mode 100644 definitions/mars/grib1.waef.cv.def create mode 100644 definitions/mars/grib1.waef.efi.def create mode 100644 definitions/mars/grib1.waef.efic.def create mode 100644 definitions/mars/grib1.waef.ep.def create mode 100644 definitions/mars/grib1.waef.fcmax.def create mode 100644 definitions/mars/grib1.waef.fcmean.def create mode 100644 definitions/mars/grib1.waef.fcmin.def create mode 100644 definitions/mars/grib1.waef.fcstdev.def create mode 100644 definitions/mars/grib1.waef.fp.def create mode 100644 definitions/mars/grib1.waef.pf.def create mode 100644 definitions/mars/grib1.waef.sot.def create mode 100644 definitions/mars/grib1.wamf.cf.def create mode 100644 definitions/mars/grib1.wamf.fc.def create mode 100644 definitions/mars/grib1.wamo.an.def create mode 100644 definitions/mars/grib1.wamo.cl.def create mode 100644 definitions/mars/grib1.wasf.fc.def create mode 120000 definitions/mars/grib1.wave.4v.def create mode 100644 definitions/mars/grib1.wave.an.def create mode 100644 definitions/mars/grib1.wave.def create mode 100644 definitions/mars/grib1.wave.fc.def create mode 100644 definitions/mars/grib1.wave.fg.def create mode 100644 definitions/mars/grib1.wehs.cd.def create mode 100644 definitions/mars/grib1.wehs.ed.def create mode 100644 definitions/mars/grib1.wehs.em.def create mode 100644 definitions/mars/grib1.wehs.es.def create mode 100644 definitions/mars/grib1.weov.pf.def create mode 100644 definitions/mars/grib1.wmfm.fcmax.def create mode 100644 definitions/mars/grib1.wmfm.fcmean.def create mode 100644 definitions/mars/grib1.wmfm.fcmin.def create mode 100644 definitions/mars/grib1.wmfm.fcstdev.def create mode 100755 definitions/mars/make_type_switch_case.sh create mode 100644 definitions/mars/marsTypeConcept.def create mode 100755 definitions/mars/metdb.pl create mode 100644 definitions/mars/model.96.table create mode 100644 definitions/mars/stream.table create mode 100644 definitions/mars/type.table create mode 100644 definitions/mars/wave_domain.def create mode 100644 definitions/mars_param.table create mode 100644 definitions/param_id.table create mode 100644 definitions/parameters_version.def create mode 100755 definitions/publish_new_parameters.sh create mode 100644 definitions/stepUnits.table create mode 100644 definitions/tide/boot.def create mode 100644 definitions/tide/mars_labeling.def create mode 100644 definitions/tide/section.1.def create mode 100644 definitions/tide/section.4.def create mode 100644 definitions/x.grib create mode 100755 doxygen/build_gribex.ksh create mode 100644 doxygen/conversion.dox create mode 100644 doxygen/doxygen.css create mode 100755 doxygen/doxypy.py create mode 100644 doxygen/environment.dox create mode 100644 doxygen/examples.dox create mode 100644 doxygen/grib_api.dox create mode 100644 doxygen/grib_api_site.cfg create mode 100644 doxygen/grib_api_wiz.cfg create mode 100644 doxygen/grib_examples.dox create mode 100644 doxygen/gribex/callGribex.html create mode 100644 doxygen/gribex/gaussianGrid.html create mode 100644 doxygen/gribex/ksec0.html create mode 100644 doxygen/gribex/ksec1.html create mode 100644 doxygen/gribex/ksec2.html create mode 100644 doxygen/gribex/ksec3.html create mode 100644 doxygen/gribex/ksec4.html create mode 100644 doxygen/gribex/lambertEtcGrid.html create mode 100644 doxygen/gribex/latLongGrid.html create mode 100644 doxygen/gribex/localDefinition1.html create mode 100644 doxygen/gribex/localDefinition10.html create mode 100644 doxygen/gribex/localDefinition11.html create mode 100644 doxygen/gribex/localDefinition13.html create mode 100644 doxygen/gribex/localDefinition14.html create mode 100644 doxygen/gribex/localDefinition15.html create mode 100644 doxygen/gribex/localDefinition16.html create mode 100644 doxygen/gribex/localDefinition17.html create mode 100644 doxygen/gribex/localDefinition18.html create mode 100644 doxygen/gribex/localDefinition19.html create mode 100644 doxygen/gribex/localDefinition190.html create mode 100644 doxygen/gribex/localDefinition191.html create mode 100644 doxygen/gribex/localDefinition192.html create mode 100644 doxygen/gribex/localDefinition2.html create mode 100644 doxygen/gribex/localDefinition20.html create mode 100644 doxygen/gribex/localDefinition21.html create mode 100644 doxygen/gribex/localDefinition22.html create mode 100644 doxygen/gribex/localDefinition23.html create mode 100644 doxygen/gribex/localDefinition24.html create mode 100644 doxygen/gribex/localDefinition25.html create mode 100644 doxygen/gribex/localDefinition26.html create mode 100644 doxygen/gribex/localDefinition27.html create mode 100644 doxygen/gribex/localDefinition3.html create mode 100644 doxygen/gribex/localDefinition30.html create mode 100644 doxygen/gribex/localDefinition31.html create mode 100644 doxygen/gribex/localDefinition4.html create mode 100644 doxygen/gribex/localDefinition5.html create mode 100644 doxygen/gribex/localDefinition50.html create mode 100644 doxygen/gribex/localDefinition6.html create mode 100644 doxygen/gribex/localDefinition7.html create mode 100644 doxygen/gribex/localDefinition8.html create mode 100644 doxygen/gribex/localDefinition9.html create mode 100644 doxygen/gribex/localGRIBUsage.html create mode 100644 doxygen/gribex/mercatorGrid.html create mode 100644 doxygen/gribex/oceanData.html create mode 100644 doxygen/gribex/polarStereoGrid.html create mode 100644 doxygen/gribex/psec2.html create mode 100644 doxygen/gribex/psec3.html create mode 100644 doxygen/gribex/psec4.html create mode 100644 doxygen/gribex/reducedGaussianGridSubArea.html create mode 100644 doxygen/gribex/spaceView.html create mode 100644 doxygen/gribex/sphericalHarmonics.html create mode 100644 doxygen/gribex/wmoCodeTable6.html create mode 100644 doxygen/head.html create mode 100644 doxygen/installation.dox create mode 100644 doxygen/keys.dox create mode 100644 doxygen/latex/grib_api.tex create mode 100755 doxygen/make_dox.sh create mode 100755 doxygen/make_dox_web.sh create mode 100755 doxygen/make_site.ksh create mode 100644 doxygen/modules.dox create mode 100755 doxygen/prepare_pydocs.pl create mode 100644 doxygen/tail.html create mode 100644 examples.dev/create_grib.c create mode 100644 examples.dev/eps_wind_rose.c create mode 100644 examples.dev/get.c create mode 100644 examples.dev/get_set.c create mode 100644 examples.dev/keys_iterator.c create mode 100644 examples.dev/sample1.c create mode 100644 examples.dev/sample3.c create mode 100644 examples.dev/sample4.c create mode 100644 examples/C/Makefile.am create mode 100644 examples/C/box.c create mode 100755 examples/C/ecmwf_link.sh create mode 100644 examples/C/fieldset.c create mode 100644 examples/C/get.c create mode 100755 examples/C/get.sh create mode 100644 examples/C/grib_precipitation.c create mode 100644 examples/C/include.sh create mode 100644 examples/C/iterator.c create mode 100755 examples/C/iterator.sh create mode 100644 examples/C/keys_iterator.c create mode 100755 examples/C/keys_iterator.sh create mode 100644 examples/C/list.c create mode 100755 examples/C/list.sh create mode 100644 examples/C/mars_param.c create mode 100644 examples/C/multi.c create mode 100755 examples/C/multi.sh create mode 100644 examples/C/multi_write.c create mode 100755 examples/C/multi_write.sh create mode 100644 examples/C/nc.c create mode 100644 examples/C/nearest.c create mode 100644 examples/C/points.c create mode 100644 examples/C/precision.c create mode 100755 examples/C/precision.sh create mode 100644 examples/C/print_data.c create mode 100755 examples/C/print_data.sh create mode 100755 examples/C/rename.sh create mode 100644 examples/C/run_examples.sh create mode 100644 examples/C/sections_copy.c create mode 100755 examples/C/sections_copy.sh create mode 100644 examples/C/set.c create mode 100755 examples/C/set.sh create mode 100644 examples/C/set_bitmap.c create mode 100644 examples/C/set_data.c create mode 100644 examples/C/set_missing.c create mode 100644 examples/C/set_pv.c create mode 100644 examples/C/values_check.c create mode 100644 examples/CMakeLists.txt create mode 100644 examples/F77/Makefile.am create mode 100644 examples/F77/example.F create mode 100644 examples/F77/files_fortran.F create mode 100644 examples/F77/get_fortran.F create mode 100755 examples/F77/get_fortran.sh create mode 100644 examples/F77/grib_convert.F create mode 100644 examples/F77/include.sh create mode 100644 examples/F77/iterator_fortran.F create mode 100755 examples/F77/iterator_fortran.sh create mode 100644 examples/F77/keys_iterator_fortran.F create mode 100755 examples/F77/keys_iterator_fortran.sh create mode 100644 examples/F77/missing_value.F create mode 100644 examples/F77/msg_fortran.F create mode 100644 examples/F77/multi_fortran.F create mode 100755 examples/F77/multi_fortran.sh create mode 100755 examples/F77/nearest_fortran.F create mode 100644 examples/F77/precision_fortran.F create mode 100755 examples/F77/precision_fortran.sh create mode 100644 examples/F77/print_data_fortran.F create mode 100755 examples/F77/print_data_fortran.sh create mode 100644 examples/F77/set_fortran.F create mode 100755 examples/F77/set_fortran.sh create mode 100644 examples/F77/set_missing_fortran.F create mode 100644 examples/F77/set_pv_fortran.F create mode 100644 examples/F90/Makefile.am create mode 100644 examples/F90/clone.f90 create mode 100755 examples/F90/clone.sh create mode 100644 examples/F90/copy_message.f90 create mode 100755 examples/F90/copy_message.sh create mode 100644 examples/F90/copy_namespace.f90 create mode 100644 examples/F90/count_messages.f90 create mode 100755 examples/F90/count_messages.sh create mode 100644 examples/F90/get.f90 create mode 100755 examples/F90/get.sh create mode 100644 examples/F90/get_data.f90 create mode 100755 examples/F90/get_data.sh create mode 100644 examples/F90/get_fortran.f90 create mode 100644 examples/F90/get_pl.f90 create mode 100755 examples/F90/get_pl.sh create mode 100644 examples/F90/get_pv.f90 create mode 100755 examples/F90/get_pv.sh create mode 100755 examples/F90/include.sh create mode 100644 examples/F90/index.f90 create mode 100755 examples/F90/index.sh create mode 100644 examples/F90/iterator_fortran.f90 create mode 100644 examples/F90/keys_iterator.f90 create mode 100755 examples/F90/keys_iterator.sh create mode 100644 examples/F90/keys_iterator_fortran.f90 create mode 100644 examples/F90/multi.f90 create mode 100755 examples/F90/multi.sh create mode 100644 examples/F90/multi_fortran.f90 create mode 100644 examples/F90/multi_write.f90 create mode 100755 examples/F90/multi_write.sh create mode 100644 examples/F90/nearest.f90 create mode 100755 examples/F90/nearest.sh create mode 100644 examples/F90/new_from_file.f90 create mode 100644 examples/F90/precision.f90 create mode 100755 examples/F90/precision.sh create mode 100644 examples/F90/precision_fortran.f90 create mode 100644 examples/F90/print_data.f90 create mode 100755 examples/F90/print_data.sh create mode 100644 examples/F90/print_data_fortran.f90 create mode 100644 examples/F90/read_from_file.f90 create mode 100644 examples/F90/read_message.f90 create mode 100755 examples/F90/read_message.sh create mode 100644 examples/F90/samples.f90 create mode 100755 examples/F90/samples.sh create mode 100644 examples/F90/set.f90 create mode 100755 examples/F90/set.sh create mode 100644 examples/F90/set_bitmap.f90 create mode 100755 examples/F90/set_bitmap.sh create mode 100644 examples/F90/set_fortran.f90 create mode 100644 examples/F90/set_missing.f90 create mode 100755 examples/F90/set_missing.sh create mode 100644 examples/F90/set_missing_fortran.f90 create mode 100644 examples/F90/set_pv.f90 create mode 100755 examples/F90/set_pv.sh create mode 100644 examples/Makefile.am create mode 100755 examples/ecmwf_link.sh create mode 100644 examples/extra/Makefile.am create mode 100644 examples/extra/c_clone.c create mode 100755 examples/extra/c_clone.sh create mode 100644 examples/extra/ens_mean.f90 create mode 100755 examples/extra/ens_mean.sh create mode 100755 examples/extra/f_clone.f90 create mode 100755 examples/extra/f_clone.sh create mode 100755 examples/extra/include.sh create mode 100755 examples/extra/message_count.sh create mode 100644 examples/extra/message_count_multi.f90 create mode 100755 examples/extra/multi_support.sh create mode 100644 examples/extra/nearest.c create mode 100644 examples/extra/std_dev.f90 create mode 100755 examples/extra/std_dev.sh create mode 100644 examples/fieldset.c create mode 100644 examples/get.c create mode 100755 examples/get.sh create mode 100644 examples/get_fortran.F create mode 100755 examples/get_fortran.sh create mode 100644 examples/grib_precipitation.c create mode 100644 examples/include.sh create mode 100644 examples/iterator.c create mode 100755 examples/iterator.sh create mode 100644 examples/iterator_fortran.F create mode 100755 examples/iterator_fortran.sh create mode 100644 examples/keys_iterator.c create mode 100755 examples/keys_iterator.sh create mode 100644 examples/keys_iterator_fortran.F create mode 100755 examples/keys_iterator_fortran.sh create mode 100644 examples/multi.c create mode 100755 examples/multi.sh create mode 100644 examples/multi_fortran.F create mode 100755 examples/multi_fortran.sh create mode 100644 examples/nearest.c create mode 100644 examples/precision.c create mode 100755 examples/precision.sh create mode 100644 examples/precision_fortran.F create mode 100755 examples/precision_fortran.sh create mode 100644 examples/print_data.c create mode 100755 examples/print_data.sh create mode 100644 examples/print_data_fortran.F create mode 100755 examples/print_data_fortran.sh create mode 100644 examples/python/Makefile.am create mode 100644 examples/python/binary_message.py create mode 100755 examples/python/binary_message.sh create mode 100644 examples/python/clone.py create mode 100755 examples/python/clone.sh create mode 100644 examples/python/count_messages.c create mode 100644 examples/python/count_messages.py create mode 100755 examples/python/count_messages.sh create mode 100644 examples/python/get.py create mode 100755 examples/python/get.sh create mode 100644 examples/python/include.sh create mode 100644 examples/python/index.py create mode 100755 examples/python/index.sh create mode 100644 examples/python/iterator.c create mode 100644 examples/python/iterator.py create mode 100755 examples/python/iterator.sh create mode 100644 examples/python/keys_iterator.c create mode 100644 examples/python/keys_iterator.py create mode 100755 examples/python/keys_iterator.sh create mode 100755 examples/python/launcher.sh create mode 100644 examples/python/multi_write.py create mode 100755 examples/python/multi_write.sh create mode 100644 examples/python/nearest.py create mode 100755 examples/python/nearest.sh create mode 100644 examples/python/print_data.c create mode 100644 examples/python/print_data.py create mode 100755 examples/python/print_data.sh create mode 100644 examples/python/samples.py create mode 100755 examples/python/samples.sh create mode 100644 examples/python/set.py create mode 100755 examples/python/set.sh create mode 100644 examples/python/set_missing.py create mode 100755 examples/python/set_missing.sh create mode 100644 examples/python/set_pv.py create mode 100644 examples/run_examples.sh create mode 100644 examples/set.c create mode 100755 examples/set.sh create mode 100644 examples/set_bitmap.c create mode 100644 examples/set_fortran.F create mode 100755 examples/set_fortran.sh create mode 100644 examples/set_pv.c create mode 100644 examples/set_pv_fortran.F create mode 100644 fortran/CMakeLists.txt create mode 100644 fortran/Makefile.am create mode 100755 fortran/create_grib_f90.sh create mode 100644 fortran/extrules.am create mode 100644 fortran/fortranCtypes/sizes.c create mode 100644 fortran/fortranCtypes/test.f90 create mode 100644 fortran/grib_api_constants.h create mode 100644 fortran/grib_api_externals.h create mode 100644 fortran/grib_api_f77.h create mode 100644 fortran/grib_api_visibility.h create mode 100644 fortran/grib_f77.c create mode 100644 fortran/grib_f90.f90.head create mode 100644 fortran/grib_f90.f90.tail create mode 100644 fortran/grib_f90_int.f90 create mode 100644 fortran/grib_f90_long_int.f90 create mode 100644 fortran/grib_fortran.c create mode 100644 fortran/grib_fortran_kinds.c create mode 100644 fortran/grib_fortran_prototypes.h create mode 100644 fortran/grib_typeSizes.f90 create mode 100644 fortran/grib_types.f90 create mode 100644 fortran/same_int_long.f90 create mode 100644 gaussian_experimental/Makefile create mode 100644 gaussian_experimental/gaussian.c create mode 100644 gaussian_experimental/gaussian.h create mode 100644 gaussian_experimental/grib_rgauss.h create mode 100644 gaussian_experimental/rg/grib_rgauss.h create mode 100644 gaussian_experimental/rg/grib_rgauss_032.h create mode 100644 gaussian_experimental/rg/grib_rgauss_048.h create mode 100644 gaussian_experimental/rg/grib_rgauss_080.h create mode 100644 gaussian_experimental/rg/grib_rgauss_1024.h create mode 100644 gaussian_experimental/rg/grib_rgauss_128.h create mode 100644 gaussian_experimental/rg/grib_rgauss_160.h create mode 100644 gaussian_experimental/rg/grib_rgauss_200.h create mode 100644 gaussian_experimental/rg/grib_rgauss_256.h create mode 100644 gaussian_experimental/rg/grib_rgauss_320.h create mode 100644 gaussian_experimental/rg/grib_rgauss_400.h create mode 100644 gaussian_experimental/rg/grib_rgauss_512.h create mode 100644 gaussian_experimental/rg/no_rgauss_080_19940113.h create mode 100644 gaussian_experimental/rg/no_rgauss_080_19980130.h create mode 100644 gaussian_experimental/rg/no_rgauss_160_19931222.h create mode 100755 gaussian_experimental/rg/rgauss2c.ksh create mode 100644 gaussian_experimental/rg/rgauss_032.h create mode 100644 gaussian_experimental/rg/rgauss_048.h create mode 100644 gaussian_experimental/rg/rgauss_080.h create mode 100644 gaussian_experimental/rg/rgauss_1024.h create mode 100644 gaussian_experimental/rg/rgauss_128.h create mode 100644 gaussian_experimental/rg/rgauss_160.h create mode 100644 gaussian_experimental/rg/rgauss_200.h create mode 100644 gaussian_experimental/rg/rgauss_256.h create mode 100644 gaussian_experimental/rg/rgauss_320.h create mode 100644 gaussian_experimental/rg/rgauss_400.h create mode 100644 gaussian_experimental/rg/rgauss_512.h create mode 100644 grib_api.pc.in create mode 100644 grib_api.spec.in create mode 100644 grib_api_config.h.in create mode 100644 grib_api_f90.pc.in create mode 100644 gribex/Makefile create mode 100644 gribex/grib_api_count.c create mode 100755 gribex/gribex_check.ksh create mode 100755 gribex/gribex_check_nofail.ksh create mode 100644 gribex/gribex_count.F create mode 100755 gribex/gribex_count.ksh create mode 100644 ifs_samples/grib1/Makefile.am create mode 100644 ifs_samples/grib1/gg_ml.tmpl create mode 100644 ifs_samples/grib1/gg_sfc.tmpl create mode 100644 ifs_samples/grib1/sh_ml.tmpl create mode 100644 ifs_samples/grib1/sh_sfc.tmpl create mode 100644 ifs_samples/grib1_mlgrib2/Makefile.am create mode 100644 ifs_samples/grib1_mlgrib2/gg_ml.tmpl create mode 100644 ifs_samples/grib1_mlgrib2/gg_sfc.tmpl create mode 100644 ifs_samples/grib1_mlgrib2/sh_ml.tmpl create mode 100644 ifs_samples/grib1_mlgrib2/sh_sfc.tmpl create mode 100644 ifs_samples/grib1_mlgrib2_ieee32/Makefile.am create mode 100755 ifs_samples/grib1_mlgrib2_ieee32/gg_ml.tmpl create mode 100755 ifs_samples/grib1_mlgrib2_ieee32/gg_sfc.tmpl create mode 100644 ifs_samples/grib1_mlgrib2_ieee32/sh_ml.tmpl create mode 100755 ifs_samples/grib1_mlgrib2_ieee32/sh_sfc.tmpl create mode 100644 ifs_samples/grib1_mlgrib2_ieee64/Makefile.am create mode 100755 ifs_samples/grib1_mlgrib2_ieee64/gg_ml.tmpl create mode 100755 ifs_samples/grib1_mlgrib2_ieee64/gg_sfc.tmpl create mode 100644 ifs_samples/grib1_mlgrib2_ieee64/sh_ml.tmpl create mode 100755 ifs_samples/grib1_mlgrib2_ieee64/sh_sfc.tmpl create mode 100755 ifs_samples/make_makefile_am.pl create mode 100755 java/gribview/src/gribview/BevelArrowIcon.java create mode 100755 java/gribview/src/gribview/BlankIcon.java create mode 100755 java/gribview/src/gribview/GribAnimator.java create mode 100755 java/gribview/src/gribview/GribHandleSet.java create mode 100755 java/gribview/src/gribview/GribMainFrame.java create mode 100755 java/gribview/src/gribview/GribRenderPane.java create mode 100755 java/gribview/src/gribview/GribView.java create mode 100755 java/gribview/src/gribview/GribViewAboutBox.java create mode 100755 java/gribview/src/gribview/JGribEditComponent.java create mode 100755 java/gribview/src/gribview/JGribMarker.java create mode 100755 java/gribview/src/gribview/JGribToolBar.java create mode 100644 java/gribview/src/gribview/JGribTreeNode.java create mode 100644 java/gribview/src/gribview/JGribViewDescriptorProducer.java create mode 100644 java/gribview/src/gribview/JGribViewEditionNodeProducer.java create mode 100755 java/gribview/src/gribview/SortButtonRenderer.java create mode 100755 java/jgribapi/src/jgribapi/GribDump.java create mode 100755 java/jgribapi/src/jgribapi/GribFile.java create mode 100755 java/jgribapi/src/jgribapi/GribHandle.java create mode 100755 java/jgribapi/src/jgribapi/GribIterator.java create mode 100644 java/jgribapi/src/jgribapi/GribKey.java create mode 100755 java/jgribapi/src/jgribapi/GribPoint.java create mode 100644 java/jgribapi/src/jgribapi/JGribObjectProducer.java create mode 100755 license.pl create mode 100644 m4/ax_linux_distribution.m4 create mode 100644 m4/ax_python_devel.m4 create mode 100644 m4/ax_rpm_init.m4 create mode 100644 m4/libtool.m4 create mode 100644 m4/ltoptions.m4 create mode 100644 m4/ltsugar.m4 create mode 100644 m4/ltversion.m4 create mode 100644 m4/lt~obsolete.m4 create mode 100755 make_dist_definitions create mode 100644 parameters/Makefile create mode 100755 parameters/feed_metdb.pl create mode 100755 parameters/feed_tigge.pl create mode 100755 parameters/grib1_def.pl create mode 100755 parameters/human_readable.pl create mode 100644 parameters/master.info create mode 100755 parameters/report.pl create mode 100755 parameters/tigge.pm create mode 100644 parameters/tigge_check.info create mode 100755 parameters/tigge_check.pl create mode 100755 parameters/tigge_def.pl create mode 100755 parameters/tigge_parameters.pl create mode 100644 perf/jmeter.awk create mode 100755 perf/time.sh create mode 100644 perl/GRIB-API/API.xs create mode 100644 perl/GRIB-API/Changes create mode 100644 perl/GRIB-API/INSTALL create mode 100644 perl/GRIB-API/MANIFEST create mode 100755 perl/GRIB-API/Makefile.PL.in create mode 100644 perl/GRIB-API/README create mode 100755 perl/GRIB-API/convert.pl create mode 100644 perl/GRIB-API/lib/GRIB/API.pm create mode 100644 perl/GRIB-API/lib/GRIB/API/Debug.pm create mode 100644 perl/GRIB-API/lib/GRIB/API/Tie.pm create mode 100644 perl/GRIB-API/ppport.h create mode 100644 perl/GRIB-API/t/GRIB-API.t create mode 100755 perl/GRIB-API/test.pl create mode 100644 perl/GRIB-API/typemap create mode 100644 perl/Makefile.am create mode 100644 perl/README create mode 100644 project_summary.cmake create mode 100644 python/CMakeLists.txt create mode 100644 python/Makefile.am create mode 100755 python/README create mode 100755 python/compare_iterator_values.sh create mode 100644 python/dummy.am create mode 100644 python/extrules.am create mode 100644 python/grib_errors.h create mode 100644 python/grib_interface.c create mode 100644 python/grib_interface.h create mode 100644 python/gribapi.c create mode 100644 python/gribapi.py create mode 100644 python/gribapi_swig.i create mode 100644 python/numpy.i create mode 100755 python/run_tests.sh create mode 100644 python/setup.py.in create mode 100644 python/swig_wrap_array.c create mode 100644 python/swig_wrap_array.py create mode 100644 python/swig_wrap_numpy.c create mode 100644 python/swig_wrap_numpy.py create mode 100755 python/test_extra.py create mode 100755 python/test_general.py create mode 100755 python/test_index.py create mode 100755 python/test_iterator.py create mode 100755 python/test_keysiterator.py create mode 100644 rpms/grib_api.pc.in create mode 100644 rpms/grib_api.spec.in create mode 100644 rpms/grib_api_f90.pc.in create mode 100644 samples/GRIB1.tmpl create mode 100644 samples/GRIB2.tmpl create mode 100644 samples/Makefile.am create mode 100644 samples/budg.tmpl create mode 100644 samples/gg_sfc_grib1.tmpl create mode 100644 samples/gg_sfc_grib2.tmpl create mode 100644 samples/polar_stereographic_pl_grib1.tmpl create mode 100644 samples/polar_stereographic_pl_grib2.tmpl create mode 100644 samples/polar_stereographic_sfc_grib1.tmpl create mode 100644 samples/polar_stereographic_sfc_grib2.tmpl create mode 100644 samples/reduced_gg_ml_grib1.tmpl create mode 100644 samples/reduced_gg_ml_grib2.tmpl create mode 100644 samples/reduced_gg_pl_1024_grib1.tmpl create mode 100644 samples/reduced_gg_pl_1024_grib2.tmpl create mode 100644 samples/reduced_gg_pl_128_grib1.tmpl create mode 100644 samples/reduced_gg_pl_128_grib2.tmpl create mode 100644 samples/reduced_gg_pl_160_grib1.tmpl create mode 100644 samples/reduced_gg_pl_160_grib2.tmpl create mode 100644 samples/reduced_gg_pl_2000_grib1.tmpl create mode 100644 samples/reduced_gg_pl_2000_grib2.tmpl create mode 100644 samples/reduced_gg_pl_200_grib1.tmpl create mode 100644 samples/reduced_gg_pl_200_grib2.tmpl create mode 100644 samples/reduced_gg_pl_256_grib1.tmpl create mode 100644 samples/reduced_gg_pl_256_grib2.tmpl create mode 100644 samples/reduced_gg_pl_320_grib1.tmpl create mode 100644 samples/reduced_gg_pl_320_grib2.tmpl create mode 100644 samples/reduced_gg_pl_32_grib1.tmpl create mode 100644 samples/reduced_gg_pl_32_grib2.tmpl create mode 100644 samples/reduced_gg_pl_400_grib1.tmpl create mode 100644 samples/reduced_gg_pl_400_grib2.tmpl create mode 100644 samples/reduced_gg_pl_48_grib1.tmpl create mode 100644 samples/reduced_gg_pl_48_grib2.tmpl create mode 100644 samples/reduced_gg_pl_512_grib1.tmpl create mode 100644 samples/reduced_gg_pl_512_grib2.tmpl create mode 100644 samples/reduced_gg_pl_640_grib1.tmpl create mode 100644 samples/reduced_gg_pl_640_grib2.tmpl create mode 100644 samples/reduced_gg_pl_80_grib1.tmpl create mode 100644 samples/reduced_gg_pl_80_grib2.tmpl create mode 100644 samples/reduced_gg_pl_grib1.tmpl create mode 100644 samples/reduced_gg_pl_grib2.tmpl create mode 100644 samples/reduced_gg_sfc_grib1.tmpl create mode 100644 samples/reduced_gg_sfc_grib2.tmpl create mode 100644 samples/reduced_gg_sfc_jpeg_grib2.tmpl create mode 100644 samples/reduced_ll_sfc_grib1.tmpl create mode 100644 samples/reduced_ll_sfc_grib2.tmpl create mode 100644 samples/regular_gg_ml_grib1.tmpl create mode 100644 samples/regular_gg_ml_grib2.tmpl create mode 100644 samples/regular_gg_pl_grib1.tmpl create mode 100644 samples/regular_gg_pl_grib2.tmpl create mode 100644 samples/regular_gg_sfc_grib1.tmpl create mode 100644 samples/regular_gg_sfc_grib2.tmpl create mode 100644 samples/regular_ll_pl_grib1.tmpl create mode 100644 samples/regular_ll_pl_grib2.tmpl create mode 100644 samples/regular_ll_sfc_grib1.tmpl create mode 100644 samples/regular_ll_sfc_grib2.tmpl create mode 100644 samples/rotated_ll_pl_grib1.tmpl create mode 100644 samples/rotated_ll_pl_grib2.tmpl create mode 100644 samples/rotated_ll_sfc_grib1.tmpl create mode 100644 samples/rotated_ll_sfc_grib2.tmpl create mode 100644 samples/sh_ml_grib1.tmpl create mode 100644 samples/sh_ml_grib2.tmpl create mode 100644 samples/sh_pl_grib1.tmpl create mode 100644 samples/sh_pl_grib2.tmpl create mode 100644 samples/sh_sfc_grib1.tmpl create mode 100644 samples/sh_sfc_grib2.tmpl create mode 120000 share/grib_api/definitions create mode 100644 sms/grib_api/grib_api.def create mode 100644 sms/grib_api/include/endt.h create mode 100644 sms/grib_api/include/eoj.h create mode 100644 sms/grib_api/include/grib_api.h create mode 100644 sms/grib_api/include/head.h create mode 100644 sms/grib_api/include/perforce.h create mode 100644 sms/grib_api/include/qsub.h create mode 100644 sms/grib_api/include/step1.h create mode 100644 sms/grib_api/include/step2.h create mode 100755 sms/grib_api/smsfiles/buildLibrary.sms create mode 100755 sms/grib_api/smsfiles/checking.sms create mode 100755 sms/grib_api/smsfiles/createTar.sms create mode 100755 sms/grib_api/smsfiles/install.sms create mode 100755 sms/grib_api/smsfiles/setup.sms create mode 100755 sms/submit.ksh create mode 100755 sms/submit.sge create mode 100755 sms/test_gribs/bin/cube.pl create mode 100755 sms/test_gribs/bin/samples.pl create mode 100644 sms/test_gribs/mars_server.def create mode 100644 sms/test_gribs/smsfiles/cleanup.sms create mode 100644 sms/test_gribs/smsfiles/compare.sms create mode 100644 sms/test_gribs/smsfiles/copy.sms create mode 100644 sms/test_gribs/smsfiles/cube.sms create mode 100644 sms/test_gribs/smsfiles/grib_api.sms create mode 100644 sms/test_gribs/smsfiles/gribex.sms create mode 100644 sms/test_gribs/smsfiles/make.sms create mode 100644 sms/test_gribs/smsfiles/prod_retrieve.sms create mode 100644 sms/test_gribs/smsfiles/sample.sms create mode 100644 sms/test_gribs/smsfiles/samples.sms create mode 100644 sms/test_gribs/smsfiles/test.sms create mode 100644 sms/test_gribs/smsfiles/test_archive.sms create mode 100644 sms/test_gribs/smsfiles/test_retrieve.sms create mode 100644 sms/test_gribs/smsinclude/head.h create mode 100644 sms/test_gribs/smsinclude/tail.h create mode 100644 src/CMakeLists.txt create mode 100644 src/Makefile.am create mode 100644 src/TODO create mode 100644 src/action.c create mode 100644 src/action_class_alias.c create mode 100644 src/action_class_assert.c create mode 100644 src/action_class_concept.c create mode 100644 src/action_class_gen.c create mode 100644 src/action_class_if.c create mode 100644 src/action_class_list.c create mode 100644 src/action_class_meta.c create mode 100644 src/action_class_modify.c create mode 100644 src/action_class_noop.c create mode 100644 src/action_class_print.c create mode 100644 src/action_class_put.c create mode 100644 src/action_class_remove.c create mode 100644 src/action_class_section.c create mode 100644 src/action_class_set.c create mode 100644 src/action_class_set_darray.c create mode 100644 src/action_class_set_iarray.c create mode 100644 src/action_class_set_missing.c create mode 100644 src/action_class_switch.c create mode 100644 src/action_class_template.c create mode 100644 src/action_class_trigger.c create mode 100644 src/action_class_variable.c create mode 100644 src/action_class_when.c create mode 100755 src/action_class_while.c create mode 100755 src/action_class_write.c create mode 100755 src/build_jgribapi.sh create mode 100644 src/compile.c create mode 100644 src/dummy.am create mode 100644 src/dummy_yyunput create mode 100755 src/errors.pl create mode 100644 src/extrules.am create mode 100644 src/functions.c create mode 100755 src/grib2c.pl create mode 100644 src/grib_2order_packer_simple.c create mode 100644 src/grib_accessor.c create mode 100644 src/grib_accessor_class.c create mode 100644 src/grib_accessor_class.h create mode 100644 src/grib_accessor_class_abstract_long_vector.c create mode 100644 src/grib_accessor_class_abstract_vector.c create mode 100644 src/grib_accessor_class_array.c create mode 100644 src/grib_accessor_class_ascii.c create mode 100644 src/grib_accessor_class_assert.c create mode 100644 src/grib_accessor_class_bit.c create mode 100644 src/grib_accessor_class_bitmap.c create mode 100644 src/grib_accessor_class_bits.c create mode 100644 src/grib_accessor_class_bits_per_value.c create mode 100644 src/grib_accessor_class_box.c create mode 100644 src/grib_accessor_class_budgdate.c create mode 100644 src/grib_accessor_class_bytes.c create mode 100644 src/grib_accessor_class_change_scanning_direction.c create mode 100644 src/grib_accessor_class_codeflag.c create mode 100644 src/grib_accessor_class_codetable.c create mode 100644 src/grib_accessor_class_codetable_title.c create mode 100644 src/grib_accessor_class_codetable_units.c create mode 100644 src/grib_accessor_class_concept.c create mode 100644 src/grib_accessor_class_constant.c create mode 100644 src/grib_accessor_class_count_file.c create mode 100644 src/grib_accessor_class_count_missing.c create mode 100644 src/grib_accessor_class_count_total.c create mode 100644 src/grib_accessor_class_data_2order_packing.c create mode 100644 src/grib_accessor_class_data_2order_packing_count.c create mode 100644 src/grib_accessor_class_data_apply_bitmap.c create mode 100644 src/grib_accessor_class_data_apply_boustrophedonic.c create mode 100644 src/grib_accessor_class_data_apply_gdsnotpresent.c create mode 100644 src/grib_accessor_class_data_complex_packing.c create mode 100644 src/grib_accessor_class_data_constant_field.c create mode 100644 src/grib_accessor_class_data_dummy_field.c create mode 100644 src/grib_accessor_class_data_g1complex_packing.c create mode 100644 src/grib_accessor_class_data_g1second_order_constant_width_packing.c create mode 100644 src/grib_accessor_class_data_g1second_order_general_extended_packing.c create mode 100644 src/grib_accessor_class_data_g1second_order_general_packing.c create mode 100644 src/grib_accessor_class_data_g1second_order_row_by_row_packing.c create mode 100644 src/grib_accessor_class_data_g1secondary_bitmap.c create mode 100644 src/grib_accessor_class_data_g1shsimple_packing.c create mode 100644 src/grib_accessor_class_data_g1simple_packing.c create mode 100644 src/grib_accessor_class_data_g22order_packing.c create mode 100644 src/grib_accessor_class_data_g2complex_packing.c create mode 100644 src/grib_accessor_class_data_g2secondary_bitmap.c create mode 100644 src/grib_accessor_class_data_g2shsimple_packing.c create mode 100644 src/grib_accessor_class_data_g2simple_packing.c create mode 100644 src/grib_accessor_class_data_g2simple_packing_with_preprocessing.c create mode 100644 src/grib_accessor_class_data_jpeg2000_packing.c create mode 100644 src/grib_accessor_class_data_png_packing.c create mode 100644 src/grib_accessor_class_data_raw_packing.c create mode 100644 src/grib_accessor_class_data_secondary_bitmap.c create mode 100644 src/grib_accessor_class_data_sh_packed.c create mode 100644 src/grib_accessor_class_data_sh_unpacked.c create mode 100644 src/grib_accessor_class_data_shsimple_packing.c create mode 100644 src/grib_accessor_class_data_simple_packing.c create mode 100644 src/grib_accessor_class_data_szip_packing.c create mode 100644 src/grib_accessor_class_decimal_precision.c create mode 100644 src/grib_accessor_class_dirty.c create mode 100644 src/grib_accessor_class_divdouble.c create mode 100644 src/grib_accessor_class_double.c create mode 100644 src/grib_accessor_class_element.c create mode 100644 src/grib_accessor_class_evaluate.c create mode 100644 src/grib_accessor_class_forward.c create mode 100644 src/grib_accessor_class_from_scale_factor_scaled_value.c create mode 100644 src/grib_accessor_class_g1_half_byte_codeflag.c create mode 100644 src/grib_accessor_class_g1_increment.c create mode 100644 src/grib_accessor_class_g1_message_length.c create mode 100644 src/grib_accessor_class_g1_section4_length.c create mode 100644 src/grib_accessor_class_g1area.c create mode 100644 src/grib_accessor_class_g1bitmap.c create mode 100644 src/grib_accessor_class_g1date.c create mode 100644 src/grib_accessor_class_g1day_of_the_year_date.c create mode 100644 src/grib_accessor_class_g1end_of_interval_monthly.c create mode 100644 src/grib_accessor_class_g1fcperiod.c create mode 100644 src/grib_accessor_class_g1forecastmonth.c create mode 100644 src/grib_accessor_class_g1monthlydate.c create mode 100644 src/grib_accessor_class_g1number_of_coded_values_sh_complex.c create mode 100644 src/grib_accessor_class_g1number_of_coded_values_sh_simple.c create mode 100644 src/grib_accessor_class_g1p1p2.c create mode 100644 src/grib_accessor_class_g1param.c create mode 100644 src/grib_accessor_class_g1step_range.c create mode 100644 src/grib_accessor_class_g1verificationdate.c create mode 100644 src/grib_accessor_class_g2_eps.c create mode 100644 src/grib_accessor_class_g2_mars_labeling.c create mode 100644 src/grib_accessor_class_g2bitmap.c create mode 100644 src/grib_accessor_class_g2bitmap_present.c create mode 100644 src/grib_accessor_class_g2date.c create mode 100644 src/grib_accessor_class_g2end_step.c create mode 100644 src/grib_accessor_class_g2grid.c create mode 100644 src/grib_accessor_class_g2latlon.c create mode 100644 src/grib_accessor_class_g2level.c create mode 100644 src/grib_accessor_class_g2lon.c create mode 100644 src/grib_accessor_class_g2step.c create mode 100644 src/grib_accessor_class_g2step_range.c create mode 100644 src/grib_accessor_class_gds_is_present.c create mode 100644 src/grib_accessor_class_gds_not_present_bitmap.c create mode 100644 src/grib_accessor_class_gen.c create mode 100644 src/grib_accessor_class_global_gaussian.c create mode 100644 src/grib_accessor_class_gts_header.c create mode 100644 src/grib_accessor_class_headers_only.c create mode 100644 src/grib_accessor_class_ibmfloat.c create mode 100644 src/grib_accessor_class_ieeefloat.c create mode 100644 src/grib_accessor_class_ifs_param.c create mode 100644 src/grib_accessor_class_iterator.c create mode 100644 src/grib_accessor_class_julian_day.c create mode 100644 src/grib_accessor_class_ksec1expver.c create mode 100644 src/grib_accessor_class_label.c create mode 100644 src/grib_accessor_class_laplacian.c create mode 100644 src/grib_accessor_class_latitudes.c create mode 100644 src/grib_accessor_class_latlon_increment.c create mode 100644 src/grib_accessor_class_latlonvalues.c create mode 100644 src/grib_accessor_class_library_version.c create mode 100644 src/grib_accessor_class_local_definition.c create mode 100644 src/grib_accessor_class_long.c create mode 100644 src/grib_accessor_class_long_vector.c create mode 100644 src/grib_accessor_class_longitudes.c create mode 100644 src/grib_accessor_class_lookup.c create mode 100644 src/grib_accessor_class_mars_param.c create mode 100644 src/grib_accessor_class_mars_step.c create mode 100644 src/grib_accessor_class_md5.c create mode 100644 src/grib_accessor_class_message.c create mode 100644 src/grib_accessor_class_missing.c create mode 100644 src/grib_accessor_class_nearest.c create mode 100644 src/grib_accessor_class_number_of_coded_values.c create mode 100644 src/grib_accessor_class_number_of_points.c create mode 100644 src/grib_accessor_class_number_of_points_gaussian.c create mode 100644 src/grib_accessor_class_number_of_values.c create mode 100644 src/grib_accessor_class_number_of_values_data_raw_packing.c create mode 100644 src/grib_accessor_class_octect_number.c create mode 100644 src/grib_accessor_class_offset_file.c create mode 100644 src/grib_accessor_class_offset_values.c create mode 100644 src/grib_accessor_class_pad.c create mode 100644 src/grib_accessor_class_padding.c create mode 100644 src/grib_accessor_class_padto.c create mode 100644 src/grib_accessor_class_padtoeven.c create mode 100644 src/grib_accessor_class_padtomultiple.c create mode 100644 src/grib_accessor_class_position.c create mode 100644 src/grib_accessor_class_reference_value_error.c create mode 100644 src/grib_accessor_class_round.c create mode 100644 src/grib_accessor_class_scale.c create mode 100644 src/grib_accessor_class_scale_values.c create mode 100644 src/grib_accessor_class_second_order_bits_per_value.c create mode 100644 src/grib_accessor_class_section.c create mode 100644 src/grib_accessor_class_section_length.c create mode 100644 src/grib_accessor_class_section_padding.c create mode 100644 src/grib_accessor_class_section_pointer.c create mode 100644 src/grib_accessor_class_select_step_template.c create mode 100644 src/grib_accessor_class_signed.c create mode 100644 src/grib_accessor_class_signed_bits.c create mode 100644 src/grib_accessor_class_simple_packing_error.c create mode 100644 src/grib_accessor_class_size.c create mode 100644 src/grib_accessor_class_spd.c create mode 100644 src/grib_accessor_class_spectral_truncation.c create mode 100644 src/grib_accessor_class_sprintf.c create mode 100644 src/grib_accessor_class_statistics.c create mode 100644 src/grib_accessor_class_statistics_spectral.c create mode 100644 src/grib_accessor_class_step_in_units.c create mode 100644 src/grib_accessor_class_sum.c create mode 100644 src/grib_accessor_class_suppressed.c create mode 100644 src/grib_accessor_class_time.c create mode 100755 src/grib_accessor_class_times.c create mode 100644 src/grib_accessor_class_transient.c create mode 100644 src/grib_accessor_class_unsigned.c create mode 100644 src/grib_accessor_class_unsigned_bits.c create mode 100644 src/grib_accessor_class_validity_date.c create mode 100644 src/grib_accessor_class_validity_time.c create mode 100644 src/grib_accessor_class_values.c create mode 100644 src/grib_accessor_class_variable.c create mode 100644 src/grib_accessor_class_vector.c create mode 100644 src/grib_accessor_class_when.c create mode 100644 src/grib_accessor_classes_hash.c create mode 100644 src/grib_accessor_factory.h create mode 100644 src/grib_accessor_factory_hash_list create mode 100644 src/grib_api.h create mode 100644 src/grib_api.h.in create mode 100644 src/grib_api_fortran.h create mode 100644 src/grib_api_internal.h create mode 100644 src/grib_api_internal.h.in create mode 100644 src/grib_api_prototypes.h create mode 100644 src/grib_bits.c create mode 100644 src/grib_bits_any_endian.c create mode 100644 src/grib_bits_any_endian_omp.c create mode 100644 src/grib_bits_any_endian_simple.c create mode 100644 src/grib_bits_any_endian_vector.c create mode 100644 src/grib_bits_fast_big_endian.c create mode 100644 src/grib_bits_fast_big_endian_omp.c create mode 100644 src/grib_bits_fast_big_endian_simple.c create mode 100644 src/grib_bits_fast_big_endian_vector.c create mode 100644 src/grib_box.c create mode 100644 src/grib_box_class.c create mode 100644 src/grib_box_class.h create mode 100644 src/grib_box_class_gen.c create mode 100644 src/grib_box_class_reduced_gaussian.c create mode 100644 src/grib_box_class_regular_gaussian.c create mode 100644 src/grib_box_factory.h create mode 100644 src/grib_buffer.c create mode 100644 src/grib_compressor.c create mode 100644 src/grib_concept.c create mode 100644 src/grib_concept_index.c create mode 100644 src/grib_context.c create mode 100644 src/grib_darray.c create mode 100644 src/grib_date.c create mode 100644 src/grib_db.c create mode 100644 src/grib_dependency.c create mode 100644 src/grib_dumper.c create mode 100644 src/grib_dumper_class.c create mode 100644 src/grib_dumper_class.h create mode 100644 src/grib_dumper_class_c_code.c create mode 100644 src/grib_dumper_class_debug.c create mode 100644 src/grib_dumper_class_default.c create mode 100644 src/grib_dumper_class_keys.c create mode 100644 src/grib_dumper_class_serialize.c create mode 100644 src/grib_dumper_class_wmo.c create mode 100644 src/grib_dumper_factory.h create mode 100644 src/grib_emoslib.h create mode 100644 src/grib_errors.c create mode 100644 src/grib_errors.c.in create mode 100644 src/grib_errors.txt create mode 100644 src/grib_errors_internal.txt create mode 100644 src/grib_expression.c create mode 100644 src/grib_expression.h create mode 100644 src/grib_expression_class_accessor.c create mode 100644 src/grib_expression_class_binop.c create mode 100644 src/grib_expression_class_column.c create mode 100644 src/grib_expression_class_constant.c create mode 100644 src/grib_expression_class_double.c create mode 100644 src/grib_expression_class_functor.c create mode 100644 src/grib_expression_class_long.c create mode 100644 src/grib_expression_class_string.c create mode 100644 src/grib_expression_class_string_compare.c create mode 100644 src/grib_expression_class_true.c create mode 100644 src/grib_expression_class_unop.c create mode 100644 src/grib_fieldset.c create mode 100644 src/grib_filepool.c create mode 100644 src/grib_fortran_interface.c create mode 100644 src/grib_gaussian_reduced.c create mode 100644 src/grib_geography.c create mode 100644 src/grib_handle.c create mode 100644 src/grib_hash_keys.c create mode 100644 src/grib_header_compute.c create mode 100644 src/grib_iarray.c create mode 100644 src/grib_ibmfloat.c create mode 100644 src/grib_ieeefloat.c create mode 100644 src/grib_index.c create mode 100644 src/grib_io.c create mode 100644 src/grib_iterator.c create mode 100644 src/grib_iterator_class.c create mode 100644 src/grib_iterator_class.h create mode 100644 src/grib_iterator_class_gaussian.c create mode 100644 src/grib_iterator_class_gaussian_reduced.c create mode 100644 src/grib_iterator_class_gen.c create mode 100644 src/grib_iterator_class_lambert_azimuthal_equal_area.c create mode 100644 src/grib_iterator_class_lambert_conformal.c create mode 100644 src/grib_iterator_class_latlon.c create mode 100644 src/grib_iterator_class_latlon_reduced.c create mode 100644 src/grib_iterator_class_polar_stereographic.c create mode 100644 src/grib_iterator_class_regular.c create mode 100644 src/grib_iterator_factory.h create mode 100755 src/grib_itrie.c create mode 100755 src/grib_itrie_keys.c create mode 100644 src/grib_jasper_encoding.c create mode 100644 src/grib_keys_iterator.c create mode 100644 src/grib_lex.c create mode 100644 src/grib_loader_from_array.c create mode 100644 src/grib_loader_from_file.c create mode 100644 src/grib_loader_from_handle.c create mode 100755 src/grib_memory.c create mode 100644 src/grib_nearest.c create mode 100644 src/grib_nearest_class.c create mode 100644 src/grib_nearest_class.h create mode 100644 src/grib_nearest_class_gen.c create mode 100644 src/grib_nearest_class_latlon_reduced.c create mode 100644 src/grib_nearest_class_reduced.c create mode 100644 src/grib_nearest_class_regular.c create mode 100644 src/grib_nearest_class_sh.c create mode 100644 src/grib_nearest_factory.h create mode 100644 src/grib_openjpeg_encoding.c create mode 100644 src/grib_parse_utils.c create mode 100644 src/grib_query.c create mode 100644 src/grib_rules.c create mode 100644 src/grib_scaling.c create mode 100644 src/grib_templates.c create mode 100644 src/grib_templates.h create mode 100644 src/grib_timer.c create mode 100644 src/grib_timer.c_off create mode 100755 src/grib_trie.c create mode 100644 src/grib_util.c create mode 100644 src/grib_value.c create mode 100644 src/grib_yacc.c create mode 100644 src/grib_yacc.h create mode 100644 src/gribl.l create mode 100644 src/griby.y create mode 100755 src/hash.c create mode 100644 src/jgribapi_GribFile.h create mode 100644 src/jgribapi_GribHandle.h create mode 100644 src/jgribapi_GribIterator.h create mode 100644 src/latlon.req create mode 100755 src/make_accessor_class_hash.ksh create mode 100755 src/make_class.pl create mode 100755 src/make_hash_keys.ksh create mode 100755 src/make_table.pl create mode 100644 src/md5.c create mode 100644 src/md5.h create mode 100644 src/spectral.req create mode 100644 templates/GRIB1 create mode 100644 templates/GRIB1.tmpl create mode 100644 templates/GRIB2 create mode 100644 templates/GRIB2.tmpl create mode 100644 templates/Makefile.am create mode 100644 templates/dummy.am create mode 100644 templates/ifs_templates/grib1/gg_ml.tmpl create mode 100644 templates/ifs_templates/grib1/gg_sfc.tmpl create mode 100644 templates/ifs_templates/grib1/sh_ml.tmpl create mode 100644 templates/ifs_templates/grib1/sh_sfc.tmpl create mode 100644 templates/ifs_templates/grib1_mlgrib2/gg_ml.tmpl create mode 100644 templates/ifs_templates/grib1_mlgrib2/gg_sfc.tmpl create mode 100644 templates/ifs_templates/grib1_mlgrib2/sh_ml.tmpl create mode 100644 templates/ifs_templates/grib1_mlgrib2/sh_sfc.tmpl create mode 100755 templates/make_ifs_templates.sh create mode 100644 templates/reduced_gg_ml_grib1.tmpl create mode 100644 templates/reduced_gg_ml_grib2.tmpl create mode 100644 templates/reduced_gg_pl_grib1.tmpl create mode 100644 templates/reduced_gg_pl_grib2.tmpl create mode 100644 templates/reduced_gg_sfc_grib1.tmpl create mode 100644 templates/reduced_gg_sfc_grib2.tmpl create mode 100644 templates/reduced_gg_sfc_jpeg_grib2.tmpl create mode 100644 templates/reduced_ll_sfc_grib1.tmpl create mode 100644 templates/reduced_ll_sfc_grib2.tmpl create mode 100644 templates/regular_gg_ml_grib1.tmpl create mode 100644 templates/regular_gg_ml_grib2.tmpl create mode 100644 templates/regular_gg_pl_grib1.tmpl create mode 100644 templates/regular_gg_pl_grib2.tmpl create mode 100644 templates/regular_ll_pl_grib1.tmpl create mode 100644 templates/regular_ll_pl_grib2.tmpl create mode 100644 templates/regular_ll_sfc_grib1.tmpl create mode 100644 templates/regular_ll_sfc_grib2.tmpl create mode 100644 templates/sh_ml_grib1.tmpl create mode 100644 templates/sh_ml_grib2.tmpl create mode 100644 templates/sh_pl_grib1.tmpl create mode 100644 templates/sh_pl_grib2.tmpl create mode 100644 tests.ecmwf/Makefile create mode 100644 tests.ecmwf/chemical.c create mode 100644 tests.ecmwf/compare.c create mode 100644 tests.ecmwf/compatibility.c create mode 100755 tests.ecmwf/compatibility.test create mode 100644 tests.ecmwf/compatibility_ex.c create mode 100755 tests.ecmwf/concept create mode 100755 tests.ecmwf/concept.test create mode 100644 tests.ecmwf/deserialize.c create mode 100755 tests.ecmwf/dump.test create mode 100755 tests.ecmwf/filter create mode 100755 tests.ecmwf/filter.test create mode 100644 tests.ecmwf/grib1to2.c create mode 100755 tests.ecmwf/grib1to2.test create mode 100755 tests.ecmwf/grib_ls create mode 100755 tests.ecmwf/grib_ls.test create mode 100755 tests.ecmwf/gribex create mode 100755 tests.ecmwf/gribex.test create mode 100644 tests.ecmwf/memory.c create mode 100755 tests.ecmwf/memory.test create mode 100644 tests.ecmwf/packing.c create mode 100755 tests.ecmwf/packing.test create mode 100644 tests.ecmwf/request.c create mode 100644 tests.ecmwf/sample.c create mode 100644 tests.ecmwf/sample1.c create mode 100644 tests.ecmwf/serialize.c create mode 100755 tests.ecmwf/set create mode 100755 tests.ecmwf/set.test create mode 100755 tests.ecmwf/set1to2 create mode 100755 tests.ecmwf/set1to2.test create mode 100644 tests.ecmwf/skip.t create mode 100644 tests.ecmwf/test.h create mode 100755 tests.ecmwf/test.ksh create mode 100644 tests.ecmwf/tests create mode 100644 tests.ecmwf/values.c create mode 100755 tests.ecmwf/values.test create mode 100644 tests/CMakeLists.txt create mode 100755 tests/Makefile.am create mode 100755 tests/badgrib.sh create mode 100755 tests/bitmap.sh create mode 100755 tests/bits.c create mode 100755 tests/bitsPerValue.sh create mode 100644 tests/bpv_limit.c create mode 100755 tests/bpv_limit.sh create mode 100755 tests/budg.sh create mode 100755 tests/change_packing.sh create mode 100755 tests/change_scanning.sh create mode 100755 tests/compare.sh create mode 100755 tests/concept.sh create mode 100755 tests/convert.sh create mode 100755 tests/debug.sh create mode 100755 tests/decimalPrecision.sh create mode 100755 tests/decode.c create mode 100755 tests/definitions.sh create mode 100644 tests/double_cmp.c create mode 100755 tests/double_cmp.sh create mode 100755 tests/filter.sh create mode 100644 tests/filter_rules create mode 100755 tests/fortran_interface.sh create mode 100644 tests/gauss_sub.c create mode 100755 tests/get_fail.sh create mode 100755 tests/grib1to2.sh create mode 100755 tests/grib2to1.sh create mode 100755 tests/grib_to_netcdf.sh create mode 100644 tests/gribex_perf.c create mode 100755 tests/gridType.sh create mode 100755 tests/ibm.c create mode 100755 tests/ieee.c create mode 100755 tests/ieee.sh create mode 100644 tests/include.sh create mode 100644 tests/index.c create mode 100755 tests/index.sh create mode 100644 tests/index_orderby.c create mode 100755 tests/iterator.sh create mode 100755 tests/jpeg.sh create mode 100644 tests/jpeg_perf.c create mode 100644 tests/julian.c create mode 100755 tests/julian.sh create mode 100644 tests/keys create mode 100644 tests/lamb_az_eq_area.ref create mode 100755 tests/lamb_az_eq_area.sh create mode 100644 tests/laplacian.c create mode 100644 tests/largefile.c create mode 100755 tests/level.sh create mode 100755 tests/list.sh create mode 100755 tests/list_all_keys.ksh create mode 100755 tests/local.sh create mode 100755 tests/ls.sh create mode 100644 tests/make_hash.ksh create mode 100644 tests/mf.rules create mode 100755 tests/migration_ml.sh create mode 100755 tests/missing.sh create mode 100755 tests/multi.sh create mode 100644 tests/multi_from_message.c create mode 100755 tests/multi_from_message.sh create mode 100644 tests/pack_unpack.c create mode 100644 tests/packing.c create mode 100644 tests/packing_check.c create mode 100755 tests/padding.sh create mode 100644 tests/png_perf.c create mode 100644 tests/read_any.c create mode 100755 tests/read_any.sh create mode 100644 tests/read_index.c create mode 100644 tests/readvalues.F create mode 100755 tests/second_order.sh create mode 100755 tests/set.sh create mode 100644 tests/so_perf.c create mode 100755 tests/statistics.sh create mode 100755 tests/step.sh create mode 100755 tests/tigge.sh create mode 100755 tests/tigge_conversions.sh create mode 100644 tests/timing.c create mode 100755 tests/timing.sh create mode 100755 tests/tiny.sh create mode 100755 tests/values_to_ascii.c create mode 100644 tigge/CMakeLists.txt create mode 100755 tigge/Makefile.am create mode 100755 tigge/jma.pl create mode 100755 tigge/kma.pl create mode 100755 tigge/ncep.pl create mode 100755 tigge/ncep.rules create mode 100755 tigge/reprocess_ncep.ksh create mode 100755 tigge/tigge_accumulations.c create mode 100755 tigge/tigge_check.c create mode 100644 tigge/tigge_check.h create mode 100755 tigge/tigge_name.c create mode 100755 tigge/tigge_split.c create mode 100755 tigge/tools/convert.pm create mode 100644 tools/CMakeLists.txt create mode 100644 tools/Makefile.am create mode 100755 tools/all_keys.c create mode 100644 tools/big2gribex.c create mode 100755 tools/compile.c create mode 100644 tools/dump.c create mode 100644 tools/dumpload.c create mode 100644 tools/filter_rules create mode 100644 tools/gaussian.c create mode 100644 tools/gg_sub_area_check.c create mode 100755 tools/grib1to2 create mode 100755 tools/grib1to2.txt create mode 100644 tools/grib2ppm.c create mode 100644 tools/grib_2_request.c create mode 100644 tools/grib_add.c create mode 100644 tools/grib_cmp.c create mode 100644 tools/grib_compare.c create mode 100755 tools/grib_compare.sh create mode 100644 tools/grib_convert.c create mode 100644 tools/grib_convert.dox create mode 100755 tools/grib_convert.sh create mode 100644 tools/grib_copy.c create mode 100644 tools/grib_copy.dox create mode 100755 tools/grib_copy.sh create mode 100644 tools/grib_corruption_check.c create mode 100644 tools/grib_count.c create mode 100644 tools/grib_debug.c create mode 100644 tools/grib_debug.dox create mode 100755 tools/grib_debug.sh create mode 100644 tools/grib_diff.c create mode 100644 tools/grib_distance.c create mode 100644 tools/grib_dump.c create mode 100644 tools/grib_dump.dox create mode 100755 tools/grib_dump.sh create mode 100644 tools/grib_error.c create mode 100644 tools/grib_filter.c create mode 100644 tools/grib_filter.dox create mode 100644 tools/grib_filter.h create mode 100755 tools/grib_filter.sh create mode 100644 tools/grib_filtery.y create mode 100644 tools/grib_gen.c create mode 100644 tools/grib_get.c create mode 100644 tools/grib_get.dox create mode 100755 tools/grib_get.sh create mode 100644 tools/grib_get_data.c create mode 100644 tools/grib_get_data.dox create mode 100755 tools/grib_get_data.sh create mode 100644 tools/grib_histogram.c create mode 100644 tools/grib_index_build.c create mode 100644 tools/grib_index_build.dox create mode 100755 tools/grib_index_build.sh create mode 100644 tools/grib_info.c create mode 100644 tools/grib_keys.c create mode 100755 tools/grib_keys.sh create mode 100644 tools/grib_ls.c create mode 100644 tools/grib_ls.dox create mode 100755 tools/grib_ls.sh create mode 100644 tools/grib_moments.c create mode 100644 tools/grib_nearest_land.c create mode 100644 tools/grib_options.c create mode 100644 tools/grib_packing.c create mode 100644 tools/grib_points.c create mode 100644 tools/grib_repair.c create mode 100644 tools/grib_set.c create mode 100644 tools/grib_set.dox create mode 100755 tools/grib_set.sh create mode 100755 tools/grib_split create mode 100644 tools/grib_to_netcdf.c create mode 100644 tools/grib_tools.c create mode 100644 tools/grib_tools.h create mode 100755 tools/list_keys.c create mode 100644 tools/load.c create mode 100644 tools/load.h create mode 100644 tools/loadl.l create mode 100644 tools/loady.y create mode 100755 tools/make_dox.ksh create mode 100644 tools/mars_request.c create mode 100644 tools/mf.rules create mode 100755 tools/parser.c create mode 100644 tools/test.c create mode 100644 tools/tigge_check.filter create mode 100644 tools/tools.dox create mode 100644 tools/tools_head.dox create mode 100755 tools/xref.c create mode 100755 tools/xref.pl create mode 100644 use/sh.grib_api create mode 100644 use/use.grib_api create mode 100644 version.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..a77244e3f --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# compiled source # +################### +*.com +*.dll +*.exe +*.o +*.so + +# Packages # +############ +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +Icon? +ehthumbs.db +Thumbs.db +.directory + diff --git a/AUTHORS b/AUTHORS new file mode 100755 index 000000000..f3ab3b067 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,5 @@ +Shahram Najm +Enrico Fucile +Baudoin Raoult +Cristian Codorean +Jean-Baptiste Filippi diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..41acbafe5 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,101 @@ +############################################################################################ +# cmake options: +# +# -DCMAKE_BUILD_TYPE=Debug|RelWithDebInfo|Release|Production +# -DCMAKE_INSTALL_PREFIX=/path/to/install +# +# -DCMAKE_MODULE_PATH=/path/to/ecbuild/cmake +# +# -DCMAKE_C_COMPILER=gcc +# -DCMAKE_C_COMPILER=g++ +# +# -DCMAKE_PREFIX_PATH=/path/to/jasper:/path/to/any/package/out/of/place +# +# -DGRIB_API_PATH=/path/to/grib + +cmake_minimum_required( VERSION 2.8.4 FATAL_ERROR ) + +project( grib_api C ) + +set( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH} ) + +include( ecbuild_system ) + +############################################################################### +# local project + +ecbuild_declare_project() + +############################################################################### +# some variables/options of this project + +option( GRIB_API_PYTHON "whether or not to build the GRIB_API python interface" ON ) + +############################################################################### +# macro processing + +find_package( CMath ) + +find_package( SZip ) +set( HAVE_LIBSZIP ${SZIP_FOUND} ) + +find_package( SWIG ) +if( SWIG_FOUND ) + include( ${SWIG_USE_FILE} ) +endif() + +############################################################################### +# contents + +### config header + +configure_file( grib_api_config.h.in grib_api_config.h ) + +### include directories + +include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) +include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src ) + +add_definitions( -DHAVE_GRIB_API_CONFIG_H ) + +if( NOT DEFINED GRIB_API_DEFINITION_PATH ) + set( GRIB_API_DEFINITION_PATH ${CMAKE_INSTALL_PREFIX}/share/grib_api/definitions ) +endif() +if( NOT DEFINED GRIB_API_SAMPLES_PATH ) + set( GRIB_API_SAMPLES_PATH ${CMAKE_INSTALL_PREFIX}/share/grib_api/samples ) +endif() + +if( IEEE_BE ) + add_definitions( -DIEEE_BE ) +endif() +if( IEEE_LE ) + add_definitions( -DIEEE_LE ) +endif() + +add_subdirectory( src ) +add_subdirectory( tools ) +add_subdirectory( fortran ) +add_subdirectory( python ) +add_subdirectory( definitions ) +add_subdirectory( tests ) +add_subdirectory( tigge ) +add_subdirectory( examples ) +# add_subdirectory( samples ) + +# ecbuild_dont_pack( DIRS samples DONT_PACK_REGEX "*.grib" ) + +############################################################################################ +# installation + +if( NOT ${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME} ) + set( GRIB_API_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src PARENT_SCOPE ) + set( GRIB_API_LIBRARIES grib_api ${CMATH_LIBRARIES} PARENT_SCOPE ) + set( GRIB_API_FOUND TRUE PARENT_SCOPE ) +endif() + +############################################################################################ +# finalize + +ecbuild_install_project( NAME grib_api ) + +ecbuild_print_summary() diff --git a/COPYING b/COPYING new file mode 120000 index 000000000..7a694c969 --- /dev/null +++ b/COPYING @@ -0,0 +1 @@ +LICENSE \ No newline at end of file diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 000000000..a2ed62153 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,457 @@ +21-01-2013 Shahram Najm +-- released version 1.10.0 + * Updated copyright notices to Apache Licence Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0 + * Availability of grib2netcdf tool from grib_api + * Support in grib_api for Lambert Conformal grid (grib_get_data) + * Updated GRIB edition 2 definitions with the latest WMO V9 templates/tables + * ERA-CLIM: Added support for Simulated Radiances + * LWDA: Added support to Long Window 4DVar + * ERA-CLIM: New stream (ensemble supplementary data) and origin (Hadley Centre) + * GRIB definitions of new variables from LISFLOOD hydrological model + * Added Local Definition 21 (Sensitive area predictions) for GRIB edition 2 + * Provided user-friendly function in API to check if a key is defined (grib_is_defined) + * Python: Provided function to set key values in one go (like grib_set -s) + * New MARS codes for surface parameters (effective total cloudiness) + * Corrected ifs_samples installation path + * New streams for ensemble data added to the parameter database + * New mars streams added for ensemble data assimilation + * Added pseudo-grib (budg) sample file for IFS + * Added new centre codes for COSMO, Ireland and Austria + * Bug fix: python interface missing __version__ + * Bug fix: on make dist, definitions and sample go to /usr/share instead of /usr/share/grib_api/ + * Bug fix: padding.sh fails in Debian automatic build machines + * Bug fix: Lambert azimuthal equal area + * Bug fix: Assertion when trying to encode the level information of some cloud cover fields + * Bug fix: ERA-CLIM: Support for existing streams EDMM, EDMO, EWMM, EWMO + * Bug fix: Netcdfs generated by grib_to_netcdf seem to be upside down + * Bug fix: python binding without numpy support grib_get_array(gid,'pv',float) + * Bug fix: grib_dump crashing with some second order packed files + * Bug fix: running grib_to_netcdf on a non regular lat/lon grid grib file results in invalid netcdf + * Bug fix: Assertion: Interpolation (or truncation) of GRIB 2 data into T21 + * Bug fix: Make sure that grib_filter checks all disk writes. + * Bug fix: if "configure" is run without --prefix, IFS_SAMPLES_PATH starts with "NONE" + * Bug fix: grib_to_netcdf: long_name/units incorrect + * Bug fix: grib_filter error: converting edition 1 to 2: unable to get extraDimensionPresent as long + * Bug fix: grib_check Fortran definition is inconsistent with other Fortran definition: + uses "integer" instead of "integer(kind=kindOfInt)" as status variable + * Bug fix: Remove redundant MARS type and stream entries for TIGGE + * Bug fix: Remove layer information from grib_api concepts for soil parameters + * Bug fix: grib_api 1.10.0 with MARS client: Interpolation failed + * Bug fix: Remove parameter 500011: 2m Temperature + * Bug fix: Remove new grib2 representations for parameters: 210004 and 210061 + * Bug fix: Wrong short name for centre 82 in 0.table + * Bug fix: configure option disable-vector actually enables it! + * Bug fix: LWDA: Support for Errors in Analysis + + +19-10-2012 Shahram Najm +-- released version 1.9.18 + * Updated sample gribs with recent changes for Reduced Gaussian N1024 and N2000 + * Updated GRIB2 definitions with the latest WMO version 8 templates/tables + * Added missing parts in Grid Definition Template 3.120 + * Added GRIB2 template 4.32 (simulated satellite data) + * Removed redundant MARS files for type and stream combinations + * Bug fix: Segmentation violation: calling grib_set on 'values' (decimal scale factor) + * Bug fix: grib_get_data returns incorrect lat-lon values for some GRIBS + * Bug fix: grib_filter does not fail with a non-zero return code when setting an invalid key + * Bug fix: Cannot set paramId to 228170 (Field Capacity) for grib edition 2 + * Bug fix: grib_api compilation fails when enabling pthreads in recent Linux distributions + * Bug fix: Segmentation violation when GRIB_DEFINITION_PATH contains colon + * Bug fix: Compilation failure: problems with GRIB_INLINE: undefined reference to stdio_read etc + * Bug fix: Setting step to the new value in GRIB2 creates wrong [day,hour]endOfOverallTimeInterval + * Bug fix: grib_keys -L should show the real contents of SAMPLES PATH + * Bug fix: Crash: Running the fortran example get_data + * Bug fix: grib_filter with verbose option -v writes out lots of blank lines + * Bug fix: tools/grib1to2.sh depends on /usr/bin/ksh which is a non standard location and breaks RPMs + * Bug fix: GRIB1: Problem with derive probability for wave height larger than 8m + * Bug fix: Bug when printing thickness of layers (typeOfLevel = depthBelowLandLayer) + * Bug fix: Correct typos in parameter database + * Bug fix: test script second_order.sh not working on some stricter shells + * Bug fix: Compilation failure: tools/grib_compare.c - error on SX9 with the "end" variable + * Bug fix: Build fails in Solaris 10: Wrong Fortran module include + +16-03-2012 Shahram Najm +-- released version 1.9.16 + * Disabled boustrophedonic ordering in second order packing. + * Fixed the python bug in setting keys of type "double". + * New parameters have been added to the parameter database and to the definition files. + * Fixed a problem producing unwanted padding between messages when converting some fields from second order packing + * Improved thread safety in relation to the creation of an index. Creating a new grib_handle or indexing different files is thread safe. + * Fixed grib_dump not to display zeros when all values were missing. + * Fixed minor bugs + +17-03-2011 Enrico Fucile +-- released version 1.9.9 + * Several changes have been made to the internal functions used by the interpolation package in EMOSLIB 381 + to make the results of the grib_api based interpolation as close as possible to the GRIBEX based one. + * laplacianOperator for spectral fields is always computed. If the computation is not required please + set the key computeLaplacianOperator=0. Default behaviour is computeLaplacianOperator=1. + * New parameters have been added to the parameter database and to the definition files regarding + the MACC project. + * Second order packing (packingType=grid_second_order) is producing smaller fields as the default setting + is to use the boustrophedonic option. + +25-02-2011 Enrico Fucile +-- released version 1.9.8 + * WARNING: A significant change in the fortran interface has been done for which some + software using the previous versions could exhibits memory allocation problems due + to unreleased memory associated with the GRIB messages. In the previous versions + (starting from version 1.6.1) the argument IGRIB of the functions GRIB_NEW_FROM_FILE, + GRIB_NEW_FROM_MESSAGE, GRIB_NEW_FROM_INDEX, GRIB_CLONE was an input and output argument. + In the new version IGRIB is output only and the grib message associated with IGRIB will + never be released by the GRIB_NEW_FROM_FILE function. This means that to release the memory + associated to the message a call to GRIB_RELEASE(IGRIB) has to be introduced when the message + is not needed any more. In the previous version the memory was released when a value of IGRIB + associated with a valid message was passed to the function. It has been realised that this + behaviour was source of unexpected results when the IGRIB variables used in the user code were + not initialised to a non valid IGRIB value (zero or negative integer). We strongly advise the + users to revise the existing code using previous grib_api versions or to link to the new library, + add the appropriate GRIB_RELEASE calls and test it for memory allocation. + + For convenience we report an example of code which could cause problems and has to be reviewed. + + integer :: IGRIB1 + integer :: IGRIB2 + + call grib_new_from_file(IGRIB1,...) + ... do something ... + call grib_new_from_file(IGRIB2,...) + ... do something ... + + IGRIB1 and IGRIB2 are not initialised to zero and we don't know which value is assigned to them. + It could be IGRIB1=IGRIB2=5 or any other number greather or equal to zero. If this happens at the + second call of grib_new_from_file IGRIB1 will be replaced by IGRIB2 producing very dangerous + consequences as the IGRIB1 doesn't point any more to the GRIB message it was supposed to. + Please revise your code in view of this example or link to the new version and add a call + to the GRIB_RELEASE function to release the memory when the which is not any more released in the new version. + + * Second order packing algorithm rewritten and working in GRIB edition 1 and 2 with + packingType=grid_second_order. + * This version is ready to be used with the new GRIB1 and GRIB2 interpolation function (INTF2) + available in EMOSLIB. + * A significant change in the fortran interface has been done for which some software using the + previous versions could exhibits memory allocation problems due to unreleased memory associated + with the GRIB messages. In the previous versions (starting from version 1.6.1) the argument IGRIB + of the function GRIB_NEW_FROM_FILE(IFILE,IGRIB) was an input and output argument. + In the new version is output only and the grib message associated with IGRIB will never be released + by the GRIB_NEW_FROM_FILE function. This means that to release the memory associated to the message + a call to GRIB_RELEASE(IGRIB) has to be introduced when the message is not needed any more. In the + previous version the memory was released when a value of IGRIB associated with a valid message was + passed to the function. It has been realised that this behaviour was source of unexpected results + when the IGRIB variables used in the user code were not initialised to a non valid IGRIB value + (zero or negative integer). + * Review and update of the code tables. + * Added new parameters. Full list of parameters accessible from + http://www.ecmwf.int/publications/manuals/d/gribapi/param/ + * Bug fixes. + +14-10-2010 Enrico Fucile +-- released version 1.9.5 + * Python interface available with the configure option --enable-python. + See http://www.ecmwf.int/publications/manuals/grib_api/namespacegribapi.html + and http://www.ecmwf.int/publications/manuals/grib_api/grib_examples.html + * Available new environment variable GRIB_API_IO_BUFFER_SIZE defining the size in bytes of the buffer + used in the IO calls from Fortran and in the tools. + * Performance improvements and partial vectorisation for the NEC SX platform. + * Review and update of the code tables. + * Update of paramId, shortName, name key values and release of a new parameter database web interface. + * Added a new key called 'global' for regular_gg and reduced_gg which can take the values 1 ( =True) or 0 (=False). + This is used to specify whether the grid is global or not. Setting global=1 will set the grid parameters computed + only from N and Ni. It is used in the conversion from one edition to the other. + * Available new environment variable GRIB_API_NO_ABORT. Default value is 0 and when it is set to 1 the library will not + abort on failing asserts. + * Bug fixes. + + +07-05-2010 Enrico Fucile +-- released version 1.9.0 + * Setting paramId or converting from one edition to the other when a parameter is not + defined in the paramId.def file will result in a failure. + * Improved performance in reading/cloning a message. + * Changed the indexing system and provided new functions to write the index on a file + grib_index_write and read it grib_index_read + * Provided a new tool to build an index from a set of files: grib_index_build. + * The tool grib_compare is able to compare two index files, going through the grib messages + indexed in the first and searching for them in the second. + * definition files and library have been updated to be used in operational status in the + IFS cycle 36R2 + * grib_ls has slightly changed format. + * A -j option is provided in grib_ls (-l only) to have the output in json format. + * BUFR messages are read, but only very basic decoding is provided. + * Parameters have been updated. + * Native type of paramId has been changed from string to integer. + * Several small bug fixes. + +23-07-2009 Enrico Fucile +-- released version 1.8.0 + * Improved conversion from edition 1 to 2. Set edition=2 will do the conversion + from edition 1 to 2 also of the parameter information. + * shortName, paramId and units are defined for all the official WMO parameters + and for local parameters used at ECMWF and NCEP + * grib_compare has been modified to compare grib 1 and 2 (option -e). + Other important chages have been done on grib_compare to have a more powerful tool to compare headers and + values. New options are provided to choose the tolerance and new namespaces are available to + compare only the relevant part of information. The new namespaces are. + parameter,geography,vertical,time,local,data. + * For some ECMWF local definitions the conversion rules have been included in grib_api. + * A new key cfName is provided for the netcdf CF name. It is at the moment defined + only for some parameters. + * The parameter information is generated from a parameter database maintained at ECMWF + and accessible from a new section in the grib_api web pages. + * A new key typeOfLevel valid for grib edition 1 and 2, with the following values has been introduced + 'surface', 'cloudBase', 'cloudTop', 'isothermZero', 'adiabaticCondensation', 'maxWind', + 'tropopause', 'nominalTop', 'seaBottom', 'isobaricInhPa', 'isobaricInPa', 'isobaricLayer', + 'meanSea', 'isobaricLayerHighPrecision', 'isobaricLayerMixedPrecision', 'heightAboveSea', + 'heightAboveSeaLayer', 'heightAboveGroundHighPrecision', 'heightAboveGround', 'heightAboveGroundLayer' + 'sigma', 'sigmaLayer', 'sigmaLayerHighPrecision', 'hybrid', 'hybridLayer', 'depthBelowLand', + 'depthBelowLandLayer', 'theta', 'thetaLayer', 'pressureFromGround', 'pressureFromGroundLayer', + 'potentialVorticity', 'depthBelowSea', 'entireAtmosphere', 'entireOcean', 'oceanWave', 'oceanMixedLayer' + * The open source library OpenJpeg can be used in place of Jasper for the jpeg 2000 coding. + --with-openjpeg options in the configure. + * decimalPrecision can be used also with grid_jpeg packing. + * parameterName,parameterUnits are provided from the code tables. + * packingError is also available for spherical harmonics packing. It provieds the error due to simple packing. + * option -l added in grib_get + * option -F added in grib_get and grib_ls to control the format of floating point keys. + * grib_ls output has been changed due to the introduction of the new typeOfLevel key + * Subroutine grib_is_missing added in the Fortran interface to check if a header value is missing. + * Changed step behaviour. If the step is "instant" and the value doesn't fit into one byte (in grib 1) + * an appropriate value of timeRangeIndicator is found to code the value in two bytes instead of 1. + * In grib_filter the function "append" has been added to append a message to a file as opposed to "write" which is + writing from the beginning of the file. + * A new grib_count function is available to count (very fate) the number of messages in a list of files. + * The value of the key level is zero in both edition when it is not relevant for the message and it is + missing in grib edition 2. + * The indexing routines have been improved to process string keys. + +06-03-2009 Enrico Fucile +-- released version 1.7.0 + * New indexing routines. + Example: index.f90 + (http://www.ecmwf.int/publications/manuals/grib_api/grib_examples.html) + * New keys stepType,stepUnits,stepRange,startStep,endStep. + * New keys swapScanningX, swapScanningY, swapScanningLat, swapScanningLon. To + swap the field respect one axis. They swap data and fix the header accordingly. + * "Improved" error messages. + * write multi fields. Previous versions of grib_api were able only to read multi + fields, now you can also write multi fields. We don't suggest to you this + feature, it is included only to be compliant with FM-92 spec. + Examples: multi.f90, multi_write.f90 + (http://www.ecmwf.int/publications/manuals/grib_api/grib_examples.html) + * function grib_new_from_template is deprecated and it will be replaced with + grib_new_from_samples. Also the environment variable GRIB_TEMPLATES_PATH is + replaced by GRIB_SAMPLES_PATH. Please replace "template" with "samples" in all + the C functions also. The behavior is the same. I made a new example showing the + best practice to use samples. The technique of cloning is strongly recommended. + Example: samples.f90 + (http://www.ecmwf.int/publications/manuals/grib_api/grib_examples.html) + * New key decimalPrecision provided. Used in the previous example. Regarding + decimalPrecision and bitsPerValue the following problem was found in the + previous version. If after loading from file or from sample (template) or + cloning a constant field you set some non constant values the library doesn't + know the bitsPerValue or the decimalPrecision you want to code (those are zero + in the constant field). The result could have been a field coded with a poor + precision. Starting with the new 1.7.0 version in these ambiguous cases grib_api + is using 24 bits to pack the field (safe value). We always suggest to set + explicitly the bitsPerValue or decimalPrecision or to clone non constant fields + with those values properly set. + * grib_copy, grib_set. A key name in square brackets can be used in the output + file name. The key will be replaced with its value in the processed grib + message. This will provide an easy way for splitting fields as the file name + will be dependent on some key values. Example: + grib_copy input.grib "output_[shortName]_[date]_[step].grib" + Please remember to quote the file name otherwise you can get strange behaviors + due to the shell. + * New key packingError. The error introduced by the packing algorithm is + returned with this key. It is available only for some packing algorithms. All + the packed values are affected by this error in the sense that + original value before packing = unpacked value ± packingError + packingError is different for different fields (also for different steps of the + same parameter/level/run). + * all the nearest functions are returning the distance from the grid point in + Km, using the radius coded in the message. + * key bitmapPresent now available also in grib 2. Example: bitmap.f90 + (http://www.ecmwf.int/publications/manuals/grib_api/grib_examples.html) + +30-09-2008 Enrico Fucile +-- released version 1.6.4 + * Fields containing a bitmap with all missing values can be coded in grib1 and grib2 + * Multifields grib2 messages can be loaded from memory. + * local definition 31 added + * Better use of memory + * minor bug fixes + +16-07-2008 Enrico Fucile +-- released version 1.6.1 + * More efficient use of memory and improvement of performance. + * Thread safe version available through the --enable-pthread configure option. + * New computation of kindOfInt, kindOfLong, kindOfDouble, kindOfFloat, kindOfSize + to allow safe arguments handing between Fortran 90 and C. + * A new key bitmap is provided to get the full bitmap as a string with the grib_filter + instruction: print "[bitmap]"; + * all the tools are failing on error and can be forced to proceed execution with + the option -f . The only exception is grib_ls because we already have an identical + tool failing (grib_get). + * new error messages from the Fortran 90 interface will give you some more chance to debug + your code. + * New function grib_count_in_file available from Fortran and C to count the messages in a file. + See example: examples/F90/count_messages.f90 + * In the Fortran 90 interface any valid grib id passed to a grib_new_from_file or grib_new_from_message + will be released before being assigned to a new grib message. + Example + call grib_new_from_file(ifile,igrib, iret) + do while (iret /= GRIB_END_OF_FILE) + ... do something with the message pointed by igrib + ... igrib will have the same value, but + ... it will point to a different message each cycle + ... the message from the previous cycle will be released + ... no need for grib_release(igrib) + call grib_new_from_file(ifile,igrib, iret) + enddo + If you want to keep the grib message in memory remember to pass a negative grib id. + Example + call grib_count_in_file(ifile,n) + allocate (igrib(n)) + do i=1,n + call grib_new_from_file(ifile,igrib(i), iret) + ... + enddo + ... remember to release the grib ids to free memory + do i=1,n + call grib_release(igrib(i)) + enddo + * grib_filter is now able to print with a format, number of colums and a separator for array keys. + The format is expressed with a % followed by a C like (printf) format declarator. + The number of columns is started with ! + The separator string is delimited by ' ' + Examples + print "[values!6%.5f',']" values with 5 digits precision in 6 columns separated by , + print "[latitudes%.3f!1]" latitudes with 3 digits precision in a column + print "pl={[pl!7', ']}" pl (number of point for each latitude) in 7 columns separated by ', ' + * New keys: + julianDay + latLonValues array containing latitude(1),longitude(1),value(1), latitude(2),longitude(2),value(2),..., + latitude(N),longitude(N),value(N) (N=number of points in the grid) + latitudes latitude(1),latitude(2),...,latitude(N) (N=number of points in the grid) + longitudes longitude(1),longitude(2),...,longitude(N) (N=number of points in the grid) + distinctLatitudes list of distinct latitudes + distinctLongitudes list of distinct longitudes + * minor bug fixes + +03-06-2008 Enrico Fucile +-- released version 1.5.0 + * Review of packing algorithms. Improvement of performance mainly on big endian + platforms. + * Modified the internal retrieval of keys, improving performance in getting and setting + keys. + * Implemented memory management. An efficient tecnique to reuse memory is implemented. + --disable-memory-management configure option available to disable the memory managemet + and use system malloc/free. + * Some experimental multithreaded packing is available for big endian machines. + A configure option --enable-omp-packing is provided to enable the openMP instructions + contained in the new packing. The environment variable OMP_NUM_THREADS sets the number + of threads used in the packing algorithm. + * grib_filter improvement: + * it is now possible to set array keys like values or pl as follows: + values = { 0.1, 3.2, 7.5 }; + * it is now possible to print array keys like values or pl as follows: + print "values=[values]"; + it is also possible to print on a file ("test.out") doing: + print("test.out") "values=[values]"; + * better error messages are printed + * it does not fail if an undefined key is used in a write or print statement + * New keys or changed keys: + * a scale factor and an offset can be applied to the data values through the keys + "scaleValuesBy" and "offsetValuesBy". + * setBitsPerValue is the new key to be used to change the number of bits per value. + It also executes the repacking. + * The keys periodOfTime is now working also when indicatorOfUnitOfTimeRange=0 (time units is + minutes) + * Concepts can be defined by the user. Concepts are a way to link the value of a key to + a combination of values of other keys. They are used to define the short_name and the + name. + * minor bug fixes + +07-02-2008 Enrico Fucile +-- released version 1.4.0 + * New Fortan 90 interface. Main featues: + * unique grib_get/grib_set subroutines to get/set any variable type. + * status code is an optional argument in all the subroutines (when omitted + the program will exit in case of error) + * new subroutine grib_get_data to get the latitude/longitude/values arrays. + * new subroutine grib_get_element to get one or several elements of an array key + through their index. + * new subroutine grib_nearest function to get the nearest grid point of a given lat/lon. + It accepts in input also arrays of latitude/longitudes to find the nearest points in one + single call. A land sea mask mode is also available to get the nearest land point. + * New Fortran 90 examples and documentation. + * New grib_keys tool to obtain the list of keys available for a specified type of grib. + * Modified the -l option in grib_ls (see documentation or type grib_ls without arguments) + * fixed a bug in the grib_filter and added the -o option for the output file. + * minor bug fixes. + +12-11-2007 Enrico Fucile +-- released version 1.3.0 + * grib_ls -l lat/lon/mode to retrieve values in the nearest grid points of a given + latitude longitude point + * grib_ls -B"order by" to order the output using some keys + * grib_ls -i index. To extract the value in the index grid point. + * new grib_dump exposing a minimum set of keys which are the ones suggested for the + standard use. Some options added to the grib_dump. The output of this new + grib_dump is ready to be coupled to the new grib_gen which will be released in the + next version. + * grib_copy -r to repack data fixing problems in the original file + * improved keys search for faster tools + * grib_get_data and grib_iterator working with all scanning mode + * new experimental functions introduced, not available in the fortran + interface: grib_fieldset_new,grib_fieldset_apply_order_by,grib_fieldset_next_handle + grib_nearest_new,grib_nearest_find,grib_nearest_delete + * some examples on the grib_fieldset and grib_nearest are added. + * The management of the missing data in grib_get_data is changed. Please refer to the help + obtained executing grib_get_data without arguments. + * Added the key stepRange which is native type string. It can represent start and end of a + cumulation or a max of min interval. Example stepRange=24-36 for a precipitation means that it + is cumulated between 24 and 36. It also addresses the problems with the big steps which don't + fit in the grib1 P1 and P2. + * Added key numberOfCodedValues. It is different from numberOfValues only if a bitmap is present and + the difference between the two should be numberOfMissingValues. + * Added the option -g to grib_copy, grib_set, grib_convert, grib_filter to preserve GTS headers + wrapping the grib message + * fixed some bugs in the fortran interface + * fixed a bug in reading the signed floats with the grib_convert. + +01-09-2007 Enrico Fucile +-- released version 1.2.0 + * changed license. Now grib_api is distributed under LGPL see LICENSE file in distribution. + * changed io functions and configure.ac to support files larger than 2GB + * as a consequence to the large file support the key offset has native type double + * added support for predefined grids + * modified grib_handle_new_from_file to read messages with wrong message length. + In this case an error will be raised. + * A new -M option is provided for all the tools to turn off the multi-field grib + support. + * Changed behaviour of grib_copy. Default is quiet and option -v (verbose) is available. + +09-07-2007 Enrico Fucile +-- released version 1.1.0 + * fixed a bug affecting constant fields. + * rewritten the ibm floating point encoding/decoding routines gaining a factor of 7 in performance + * fixed a problem in the configure affecting compilation of fortran programs on AIX platforms + * Added some new keys: + * max,min,average (maximum, minimum and average respectively of the data ) + * numberOfDataPoints(alias numberOfPoints) computed from the grid description + * numberOfValues is the same as the numberOfPoints if a bitmap is not present + otherwise it takes into account the bitmap + * numberOfMissing (alias numberOfMissingValues) number of missing values in the field + It's easy to check if a field is constant by simply comparing max,min,average + and some information about bitmap and missing values can be found comparing numberOfValues + numberOfPoints, numberOfMissing. + * added some new tests + * added a new example on how to print all the data when the iterator is not available. + * grib_tools are now failing with an error when the input file does not contain any + valid grib message + * added management of reduced gaussian non global fields. + +17-04-2007 Enrico Fucile + * grib_api version 1.0 released diff --git a/INSTALL b/INSTALL new file mode 100755 index 000000000..0587564b8 --- /dev/null +++ b/INSTALL @@ -0,0 +1,40 @@ + +The grib_api installation is based on the standard configure utility. +It is tested on several platforms and with several compilers. However for some platforms +modifications to the installation engine may be required. If you encounter any problem +during the installation procedure please send an e-mail with your problem to +Software.Support@ecmwf.int. + +The only required package for a standard installation is jasper which enables the jpeg2000 +packing/unpacking algorithm. +It is possible to build grib_api without jasper, by using the --disable-jpeg configure option, +but to install a fully functional library, its download is recommended. + + +Standard Installation +===================== + + 1. Download grib_api from http://www.ecmwf.int/products/data/software/download/grib_api.html. + 2. Unpack distribution: + + > gunzip grib_api-X.tar.gz + > tar xf grib_api-X.tar + + 3. Create the directory where to install grib_api say grib_api_dir + + > mkdir grib_api_dir + + 4. Run the configure in the grib_api-X + + > cd grib_api-X + > ./configure --prefix=grib_api_dir + + 5. make, check and install + + > make + ... + > make check + ... + > make install + ... + diff --git a/LICENSE b/LICENSE new file mode 100755 index 000000000..57bc88a15 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..7701fb382 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,437 @@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +libtool: $(LIBTOOL_DEPS) + $(SHELL) ./configure_status libtool +ACLOCAL_AMFLAGS = -I m4 + +CONFIGURE_DEPENDENCIES = $(top_srcdir)/version.sh + +$(top_srcdir)/configure: $(top_srcdir)/version.sh + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = grib_api.pc grib_api_f90.pc + +if WITH_PERL + PERL_OPT = @PERLDIR@ +else + PERL_OPT = +endif + +if WITH_PYTHON + PYTHON_OPT = python +else + PYTHON_OPT = +endif + +SUBDIRS = src tools definitions samples ifs_samples/grib1 ifs_samples/grib1_mlgrib2 ifs_samples/grib1_mlgrib2_ieee64 tests tigge $(FORTRAN_MOD) examples/C $(F90_CHECK) $(PERL_OPT) python examples/python + +EXTRA_DIST = README AUTHORS NOTICE LICENSE ChangeLog version.sh html \ + src/extrules.am \ + definitions/extrules.am \ + src/dummy.am \ + definitions/dummy.am \ + data/ls.log \ + data/multi.ok \ + data/in_copy.grib \ + data/bad.grib \ + data/local.good.log \ + data/typeOfProcessedData.ok \ + data/gts.grib \ + data/v.grib2 \ + data/satellite.grib \ + data/pad.grib \ + data/missing_field.grib1 \ + data/multi_step.txt \ + data/multi_created.grib2 \ + data/multi.grib2 \ + data/sample.grib2 \ + data/bitmap.diff \ + data/no_bitmap.diff \ + data/ieee_test.good \ + data/index.grib \ + data/index.ok \ + data/index_f90.ok \ + data/grid_ieee.grib \ + data/spherical_model_level.grib1_32.good \ + data/spherical_model_level.grib1.good \ + data/budg \ + data/tp_ecmwf.grib \ + data/statistics.out.good \ + data/jpeg.grib2 \ + data/scan_x_regular_gg_5_7_good.dump \ + data/scan_x_regular_ll_5_4_good.dump \ + data/scan_x_regular_ll_5_7_good.dump \ + data/scan_x_regular_ll_8_4_good.dump \ + data/scan_x_regular_ll_8_7_good.dump \ + data/scan_x_rotated_ll_5_4_good.dump \ + data/scan_x_rotated_ll_5_7_good.dump \ + data/scan_x_rotated_ll_8_4_good.dump \ + data/scan_x_rotated_ll_8_7_good.dump \ + data/scan_y_regular_ll_5_4_good.dump \ + data/scan_y_regular_ll_5_7_good.dump \ + data/scan_y_regular_ll_8_4_good.dump \ + data/scan_y_regular_ll_8_7_good.dump \ + data/scan_y_rotated_ll_5_4_good.dump \ + data/scan_y_rotated_ll_5_7_good.dump \ + data/scan_y_rotated_ll_8_4_good.dump \ + data/scan_y_rotated_ll_8_7_good.dump \ + data/tigge_pf_ecmwf.grib2 \ + data/regular_gaussian_pressure_level.grib1 \ + data/regular_gaussian_model_level.grib1 \ + data/regular_gaussian_surface.grib1 \ + data/regular_latlon_surface.grib1 \ + data/reduced_gaussian_model_level.grib1 \ + data/reduced_gaussian_pressure_level.grib1 \ + data/reduced_gaussian_lsm.grib1 \ + data/reduced_gaussian_surface_jpeg.grib2 \ + data/timeRangeIndicator_0.grib \ + data/timeRangeIndicator_10.grib \ + data/timeRangeIndicator_5.grib \ + data/reduced_gaussian_model_level.grib1 \ + data/reduced_gaussian_surface.grib1 \ + data/reduced_latlon_surface.grib1 \ + data/spherical_model_level.grib1 \ + data/spherical_pressure_level.grib1 \ + data/missing.grib2 \ + data/gfs.c255.grib2 \ + data/constant_field.grib1 \ + data/reduced_gaussian_pressure_level_constant.grib1 \ + data/reduced_latlon_surface_constant.grib1 \ + data/regular_gaussian_pressure_level_constant.grib1 \ + data/regular_latlon_surface_constant.grib1 \ + data/reduced_gaussian_sub_area.grib1 \ + data/constant_field.grib1 \ + data/60_model_levels \ + data/list_points \ + data/step.log \ + data/step_grib1.filter \ + data/step_grib1.log \ + data/julian.out.good \ + data/tigge/tigge_ammc_pl_gh.grib \ + data/tigge/tigge_ammc_pl_q.grib \ + data/tigge/tigge_ammc_pl_t.grib \ + data/tigge/tigge_ammc_pl_u.grib \ + data/tigge/tigge_ammc_pl_v.grib \ + data/tigge/tigge_ammc_sfc_10u.grib \ + data/tigge/tigge_ammc_sfc_10v.grib \ + data/tigge/tigge_ammc_sfc_2t.grib \ + data/tigge/tigge_ammc_sfc_lsm.grib \ + data/tigge/tigge_ammc_sfc_mn2t6.grib \ + data/tigge/tigge_ammc_sfc_msl.grib \ + data/tigge/tigge_ammc_sfc_mx2t6.grib \ + data/tigge/tigge_ammc_sfc_orog.grib \ + data/tigge/tigge_ammc_sfc_sf.grib \ + data/tigge/tigge_ammc_sfc_sp.grib \ + data/tigge/tigge_ammc_sfc_st.grib \ + data/tigge/tigge_ammc_sfc_tcc.grib \ + data/tigge/tigge_ammc_sfc_tcw.grib \ + data/tigge/tigge_ammc_sfc_tp.grib \ + data/tigge/tigge_babj_pl_gh.grib \ + data/tigge/tigge_babj_pl_q.grib \ + data/tigge/tigge_babj_pl_t.grib \ + data/tigge/tigge_babj_pl_u.grib \ + data/tigge/tigge_babj_pl_v.grib \ + data/tigge/tigge_babj_sfc_10u.grib \ + data/tigge/tigge_babj_sfc_10v.grib \ + data/tigge/tigge_babj_sfc_2d.grib \ + data/tigge/tigge_babj_sfc_2t.grib \ + data/tigge/tigge_babj_sfc_lsm.grib \ + data/tigge/tigge_babj_sfc_mn2t6.grib \ + data/tigge/tigge_babj_sfc_msl.grib \ + data/tigge/tigge_babj_sfc_mx2t6.grib \ + data/tigge/tigge_babj_sfc_orog.grib \ + data/tigge/tigge_babj_sfc_sd.grib \ + data/tigge/tigge_babj_sfc_sf.grib \ + data/tigge/tigge_babj_sfc_slhf.grib \ + data/tigge/tigge_babj_sfc_sp.grib \ + data/tigge/tigge_babj_sfc_sshf.grib \ + data/tigge/tigge_babj_sfc_ssr.grib \ + data/tigge/tigge_babj_sfc_str.grib \ + data/tigge/tigge_babj_sfc_tcc.grib \ + data/tigge/tigge_babj_sfc_tcw.grib \ + data/tigge/tigge_babj_sfc_tp.grib \ + data/tigge/tigge_cwao_pl_gh.grib \ + data/tigge/tigge_cwao_pl_q.grib \ + data/tigge/tigge_cwao_pl_t.grib \ + data/tigge/tigge_cwao_pl_u.grib \ + data/tigge/tigge_cwao_pl_v.grib \ + data/tigge/tigge_cwao_sfc_10u.grib \ + data/tigge/tigge_cwao_sfc_10v.grib \ + data/tigge/tigge_cwao_sfc_2d.grib \ + data/tigge/tigge_cwao_sfc_2t.grib \ + data/tigge/tigge_cwao_sfc_mn2t6.grib \ + data/tigge/tigge_cwao_sfc_msl.grib \ + data/tigge/tigge_cwao_sfc_mx2t6.grib \ + data/tigge/tigge_cwao_sfc_orog.grib \ + data/tigge/tigge_cwao_sfc_sd.grib \ + data/tigge/tigge_cwao_sfc_skt.grib \ + data/tigge/tigge_cwao_sfc_sp.grib \ + data/tigge/tigge_cwao_sfc_st.grib \ + data/tigge/tigge_cwao_sfc_tcc.grib \ + data/tigge/tigge_cwao_sfc_tcw.grib \ + data/tigge/tigge_cwao_sfc_tp.grib \ + data/tigge/tigge_ecmf_pl_gh.grib \ + data/tigge/tigge_ecmf_pl_q.grib \ + data/tigge/tigge_ecmf_pl_t.grib \ + data/tigge/tigge_ecmf_pl_u.grib \ + data/tigge/tigge_ecmf_pl_v.grib \ + data/tigge/tigge_ecmf_pt_pv.grib \ + data/tigge/tigge_ecmf_pv_pt.grib \ + data/tigge/tigge_ecmf_pv_u.grib \ + data/tigge/tigge_ecmf_pv_v.grib \ + data/tigge/tigge_ecmf_sfc_10u.grib \ + data/tigge/tigge_ecmf_sfc_10v.grib \ + data/tigge/tigge_ecmf_sfc_2d.grib \ + data/tigge/tigge_ecmf_sfc_2t.grib \ + data/tigge/tigge_ecmf_sfc_cap.grib \ + data/tigge/tigge_ecmf_sfc_cape.grib \ + data/tigge/tigge_ecmf_sfc_mn2t6.grib \ + data/tigge/tigge_ecmf_sfc_msl.grib \ + data/tigge/tigge_ecmf_sfc_mx2t6.grib \ + data/tigge/tigge_ecmf_sfc_sd.grib \ + data/tigge/tigge_ecmf_sfc_sf.grib \ + data/tigge/tigge_ecmf_sfc_skt.grib \ + data/tigge/tigge_ecmf_sfc_slhf.grib \ + data/tigge/tigge_ecmf_sfc_sm.grib \ + data/tigge/tigge_ecmf_sfc_sp.grib \ + data/tigge/tigge_ecmf_sfc_sshf.grib \ + data/tigge/tigge_ecmf_sfc_ssr.grib \ + data/tigge/tigge_ecmf_sfc_st.grib \ + data/tigge/tigge_ecmf_sfc_str.grib \ + data/tigge/tigge_ecmf_sfc_sund.grib \ + data/tigge/tigge_ecmf_sfc_tcc.grib \ + data/tigge/tigge_ecmf_sfc_tcw.grib \ + data/tigge/tigge_ecmf_sfc_tp.grib \ + data/tigge/tigge_ecmf_sfc_ttr.grib \ + data/tigge/tigge_egrr_pl_gh.grib \ + data/tigge/tigge_egrr_pl_q.grib \ + data/tigge/tigge_egrr_pl_t.grib \ + data/tigge/tigge_egrr_pl_u.grib \ + data/tigge/tigge_egrr_pl_v.grib \ + data/tigge/tigge_egrr_pt_pv.grib \ + data/tigge/tigge_egrr_pv_pt.grib \ + data/tigge/tigge_egrr_pv_u.grib \ + data/tigge/tigge_egrr_pv_v.grib \ + data/tigge/tigge_egrr_sfc_10u.grib \ + data/tigge/tigge_egrr_sfc_10v.grib \ + data/tigge/tigge_egrr_sfc_2d.grib \ + data/tigge/tigge_egrr_sfc_2t.grib \ + data/tigge/tigge_egrr_sfc_mn2t6.grib \ + data/tigge/tigge_egrr_sfc_msl.grib \ + data/tigge/tigge_egrr_sfc_mx2t6.grib \ + data/tigge/tigge_egrr_sfc_sd.grib \ + data/tigge/tigge_egrr_sfc_sf.grib \ + data/tigge/tigge_egrr_sfc_skt.grib \ + data/tigge/tigge_egrr_sfc_slhf.grib \ + data/tigge/tigge_egrr_sfc_sm.grib \ + data/tigge/tigge_egrr_sfc_sp.grib \ + data/tigge/tigge_egrr_sfc_sshf.grib \ + data/tigge/tigge_egrr_sfc_ssr.grib \ + data/tigge/tigge_egrr_sfc_st.grib \ + data/tigge/tigge_egrr_sfc_str.grib \ + data/tigge/tigge_egrr_sfc_tcc.grib \ + data/tigge/tigge_egrr_sfc_tcw.grib \ + data/tigge/tigge_egrr_sfc_tp.grib \ + data/tigge/tigge_egrr_sfc_ttr.grib \ + data/tigge/tigge_kwbc_pl_gh.grib \ + data/tigge/tigge_kwbc_pl_q.grib \ + data/tigge/tigge_kwbc_pl_t.grib \ + data/tigge/tigge_kwbc_pl_u.grib \ + data/tigge/tigge_kwbc_pl_v.grib \ + data/tigge/tigge_kwbc_pt_pv.grib \ + data/tigge/tigge_kwbc_pv_pt.grib \ + data/tigge/tigge_kwbc_pv_u.grib \ + data/tigge/tigge_kwbc_pv_v.grib \ + data/tigge/tigge_kwbc_sfc_10u.grib \ + data/tigge/tigge_kwbc_sfc_10v.grib \ + data/tigge/tigge_kwbc_sfc_2d.grib \ + data/tigge/tigge_kwbc_sfc_2t.grib \ + data/tigge/tigge_kwbc_sfc_cap.grib \ + data/tigge/tigge_kwbc_sfc_cape.grib \ + data/tigge/tigge_kwbc_sfc_ci.grib \ + data/tigge/tigge_kwbc_sfc_lsm.grib \ + data/tigge/tigge_kwbc_sfc_mn2t6.grib \ + data/tigge/tigge_kwbc_sfc_msl.grib \ + data/tigge/tigge_kwbc_sfc_mx2t6.grib \ + data/tigge/tigge_kwbc_sfc_sd.grib \ + data/tigge/tigge_kwbc_sfc_sf.grib \ + data/tigge/tigge_kwbc_sfc_skt.grib \ + data/tigge/tigge_kwbc_sfc_slhf.grib \ + data/tigge/tigge_kwbc_sfc_sm.grib \ + data/tigge/tigge_kwbc_sfc_sp.grib \ + data/tigge/tigge_kwbc_sfc_sshf.grib \ + data/tigge/tigge_kwbc_sfc_ssr.grib \ + data/tigge/tigge_kwbc_sfc_st.grib \ + data/tigge/tigge_kwbc_sfc_str.grib \ + data/tigge/tigge_kwbc_sfc_tcw.grib \ + data/tigge/tigge_kwbc_sfc_tp.grib \ + data/tigge/tigge_kwbc_sfc_ttr.grib \ + data/tigge/tigge_lfpw_pl_gh.grib \ + data/tigge/tigge_lfpw_pl_q.grib \ + data/tigge/tigge_lfpw_pl_t.grib \ + data/tigge/tigge_lfpw_pl_u.grib \ + data/tigge/tigge_lfpw_pl_v.grib \ + data/tigge/tigge_lfpw_pv_pt.grib \ + data/tigge/tigge_lfpw_pv_u.grib \ + data/tigge/tigge_lfpw_pv_v.grib \ + data/tigge/tigge_lfpw_sfc_10u.grib \ + data/tigge/tigge_lfpw_sfc_10v.grib \ + data/tigge/tigge_lfpw_sfc_2d.grib \ + data/tigge/tigge_lfpw_sfc_2t.grib \ + data/tigge/tigge_lfpw_sfc_cap.grib \ + data/tigge/tigge_lfpw_sfc_cape.grib \ + data/tigge/tigge_lfpw_sfc_mn2t6.grib \ + data/tigge/tigge_lfpw_sfc_msl.grib \ + data/tigge/tigge_lfpw_sfc_mx2t6.grib \ + data/tigge/tigge_lfpw_sfc_sd.grib \ + data/tigge/tigge_lfpw_sfc_sf.grib \ + data/tigge/tigge_lfpw_sfc_skt.grib \ + data/tigge/tigge_lfpw_sfc_slhf.grib \ + data/tigge/tigge_lfpw_sfc_sp.grib \ + data/tigge/tigge_lfpw_sfc_sshf.grib \ + data/tigge/tigge_lfpw_sfc_ssr.grib \ + data/tigge/tigge_lfpw_sfc_st.grib \ + data/tigge/tigge_lfpw_sfc_str.grib \ + data/tigge/tigge_lfpw_sfc_tcc.grib \ + data/tigge/tigge_lfpw_sfc_tcw.grib \ + data/tigge/tigge_lfpw_sfc_tp.grib \ + data/tigge/tigge_lfpw_sfc_ttr.grib \ + data/tigge/tigge_rjtd_pl_gh.grib \ + data/tigge/tigge_rjtd_pl_q.grib \ + data/tigge/tigge_rjtd_pl_t.grib \ + data/tigge/tigge_rjtd_pl_u.grib \ + data/tigge/tigge_rjtd_pl_v.grib \ + data/tigge/tigge_rjtd_sfc_10u.grib \ + data/tigge/tigge_rjtd_sfc_10v.grib \ + data/tigge/tigge_rjtd_sfc_2d.grib \ + data/tigge/tigge_rjtd_sfc_2t.grib \ + data/tigge/tigge_rjtd_sfc_mn2t6.grib \ + data/tigge/tigge_rjtd_sfc_msl.grib \ + data/tigge/tigge_rjtd_sfc_mx2t6.grib \ + data/tigge/tigge_rjtd_sfc_sd.grib \ + data/tigge/tigge_rjtd_sfc_skt.grib \ + data/tigge/tigge_rjtd_sfc_slhf.grib \ + data/tigge/tigge_rjtd_sfc_sm.grib \ + data/tigge/tigge_rjtd_sfc_sp.grib \ + data/tigge/tigge_rjtd_sfc_sshf.grib \ + data/tigge/tigge_rjtd_sfc_ssr.grib \ + data/tigge/tigge_rjtd_sfc_str.grib \ + data/tigge/tigge_rjtd_sfc_tcc.grib \ + data/tigge/tigge_rjtd_sfc_tcw.grib \ + data/tigge/tigge_rjtd_sfc_tp.grib \ + data/tigge/tigge_rjtd_sfc_ttr.grib \ + data/tigge/tigge_rksl_pl_gh.grib \ + data/tigge/tigge_rksl_pl_q.grib \ + data/tigge/tigge_rksl_pl_t.grib \ + data/tigge/tigge_rksl_pl_u.grib \ + data/tigge/tigge_rksl_pl_v.grib \ + data/tigge/tigge_rksl_sfc_10u.grib \ + data/tigge/tigge_rksl_sfc_10v.grib \ + data/tigge/tigge_rksl_sfc_2t.grib \ + data/tigge/tigge_rksl_sfc_msl.grib \ + data/tigge/tigge_rksl_sfc_sp.grib \ + data/tigge/tigge_sbsj_pl_gh.grib \ + data/tigge/tigge_sbsj_pl_q.grib \ + data/tigge/tigge_sbsj_pl_t.grib \ + data/tigge/tigge_sbsj_pl_u.grib \ + data/tigge/tigge_sbsj_pl_v.grib \ + data/tigge/tigge_sbsj_sfc_10u.grib \ + data/tigge/tigge_sbsj_sfc_10v.grib \ + data/tigge/tigge_sbsj_sfc_2t.grib \ + data/tigge/tigge_sbsj_sfc_msl.grib \ + data/tigge/tigge_sbsj_sfc_sf.grib \ + data/tigge/tigge_sbsj_sfc_skt.grib \ + data/tigge/tigge_sbsj_sfc_sp.grib \ + data/tigge/tigge_sbsj_sfc_ssr.grib \ + data/tigge/tigge_sbsj_sfc_st.grib \ + data/tigge/tigge_sbsj_sfc_tcc.grib \ + data/tigge/tigge_sbsj_sfc_tcw.grib \ + data/tigge/tigge_sbsj_sfc_tp.grib \ + data/tigge/tiggelam_cnmc_sfc.grib \ + data/constant_width_bitmap.grib \ + data/constant_width_boust_bitmap.grib \ + data/gen.grib \ + data/gen_bitmap.grib \ + data/gen_ext.grib \ + data/gen_ext_bitmap.grib \ + data/gen_ext_boust.grib \ + data/gen_ext_boust_bitmap.grib \ + data/gen_ext_spd_2.grib \ + data/gen_ext_spd_2_bitmap.grib \ + data/gen_ext_spd_2_boust_bitmap.grib \ + data/gen_ext_spd_3.grib \ + data/gen_ext_spd_3_boust_bitmap.grib \ + data/row.grib \ + data/simple.grib \ + data/read_any.ok \ + data/simple_bitmap.grib \ + data/second_ord_rbr.grib1 \ + perf/jmeter.awk \ + perf/time.sh + + +perf_dir = @abs_builddir@/perf + + +check-perf: + @echo "Running and benchmarking tests $(perf_dir). This process will take some time." +# -rm -f $(perf_dir)/report.out* + for i in 1 2 3 ; do \ + echo "Running iteration $$i" ;\ + $(MAKE) check PYTHON=$(PYTHON) TOPBUILDDIR=$(abs_builddir) TESTS_ENVIRONMENT=$(perf_dir)/time.sh \ + > $(perf_dir)/report.out.$$i 2>&1; done + cat $(perf_dir)/report.out* | $(AWK) -f $(perf_dir)/jmeter.awk -v JMETER="true" TIMESTAMP=`date +%s`000 > $(perf_dir)/report.jtl + cat $(perf_dir)/report.out* | $(AWK) -f $(perf_dir)/jmeter.awk -v JMETER="false" TIMESTAMP=`date +%s`000 > $(perf_dir)/report.xml +# -rm -f $(perf_dir)/report.out* + @echo "Testing and benchmarks have finished" + +rpmspec = $(PACKAGE_TARNAME).spec + +rpmmacros = \ + --define="_rpmdir $${PWD}"\ + --define="_srcrpmdir $${PWD}"\ + --define="_sourcedir $${PWD}"\ + --define="_specdir $${PWD}"\ + --define="_builddir $${PWD}" + +RPMBUILD = rpmbuild +RPMFLAGS = --nodeps --buildroot="$${PWD}/_rpm" + +rpmcheck: + @if [ which $(RPMBUILD) &> /dev/null ]; then \ + echo "*** This make target requires an rpm-based Linux distribution"; \ + (exit 1); exit 1; \ + fi + +srcrpm: dist rpmcheck $(rpmspec) + $(RPMBUILD) $(RPMFLAGS) -bs $(rpmmacros) $(rpmspec) + +rpms: dist rpmcheck $(rpmspec) + $(RPMBUILD) $(RPMFLAGS) -ba $(rpmmacros) $(rpmspec) + +main_package = $(abs_top_srcdir)/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-$(host_os)-$(host_cpu)-$(RPM_RELEASE).tar + +dist-defs: + @rm -f $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-defs.tar.gz + cd definitions; \ + $(MAKE) top_distdir=$(abs_top_srcdir)/_distdefs distdir=$(abs_top_srcdir)/_distdefs/definitions distdir; \ + cd $(abs_top_srcdir)/_distdefs; \ + tar zcvf $(abs_top_srcdir)/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-defs.tar.gz definitions > /dev/null + @rm -rf _distdefs + @echo "Created definitions tar ball \"$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-defs.tar.gz\"" + +bindist: + $(MAKE) DESTDIR=$(abs_top_srcdir)/_dist + $(MAKE) DESTDIR=$(abs_top_srcdir)/_dist install + cd $(abs_top_srcdir)/_dist; \ + find . -type f | grep $(prefix) | \ + cpio -ov -H ustar > $(main_package) ; \ + gzip $(main_package) + +distclean-local: + rm -rf $${PWD}/_rpm + find $${PWD} -name "*.rpm" -exec rm {} \; + rm -f *.tar.gz + rm -rf $(RPM_HOST_CPU) + rm -rf _dist _distdefs + + diff --git a/NEWS b/NEWS new file mode 100644 index 000000000..e69de29bb diff --git a/NOTICE b/NOTICE new file mode 100644 index 000000000..2a483a8fb --- /dev/null +++ b/NOTICE @@ -0,0 +1,7 @@ +ECMWF GRIB API +Copyright 2005-2012 ECMWF. + +This product includes software developed at ECMWF (http://www.ecmwf.int). + +Parts of the definitions provided by WMO (http://www.wmo.int/pages/index_en.html) + diff --git a/README b/README new file mode 100755 index 000000000..e0aa9d268 --- /dev/null +++ b/README @@ -0,0 +1,45 @@ +grib_api is the ECMWF encoding/decoding software for GRIB edition 1 and 2. + +Documentation in html format can be found in the html directory of the +distribution directory. + +INSTALLATION + +Standard Installation + 1. Download grib_api from https://software.ecmwf.int/wiki/display/GRIB/Releases + 2. Unpack distribution: + + > gunzip grib_api-X.tar.gz + > tar xf grib_api-X.tar + + 3. Create the directory where to install grib_api say /usr/local/grib_api_dir + + > mkdir /usr/local/grib_api_dir + + 4. Run the configure in the grib_api-X + + > cd grib_api-X + > ./configure --prefix=/usr/local/grib_api_dir + + Note that the prefix must be the absolute path of the + directory created. + + 5. make, check and install + + > make + ... + > make check + ... + > make install + ... + +COPYRIGHT AND LICENSE + +Copyright 2005-2012 ECMWF. + +This software is licensed under the terms of the Apache Licence Version 2.0 +which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + +In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + diff --git a/VERSION.cmake b/VERSION.cmake new file mode 100644 index 000000000..f29f069f6 --- /dev/null +++ b/VERSION.cmake @@ -0,0 +1,2 @@ +set( ${PROJECT_NAME}_VERSION_STR "1.10.4" ) + diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 000000000..0be554876 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,480 @@ +dnl ieee big endian double and float compliancy +dnl Enrico Fucile 12-2008 +AC_DEFUN([AC_IEEE_BE], +[ + AC_MSG_CHECKING([if double and float are ieee big endian]) + AC_LANG(C) + AC_RUN_IFELSE( + [ + AC_LANG_SOURCE([ + int compare(unsigned char* a,unsigned char* b) { + while(*a != 0) if (*(b++)!=*(a++)) return 1; + return 0; + } + int main(int argc,char** argv) { + unsigned char dc[[]]={0x30,0x61,0xDE,0x80,0x93,0x67,0xCC,0xD9,0}; + double da=1.23456789e-75; + unsigned char* ca; + + unsigned char fc[[]]={0x05,0x83,0x48,0x22,0}; + float fa=1.23456789e-35; + + if (sizeof(double)!=8) return 1; + + ca=(unsigned char*)&da; + if (compare(dc,ca)) return 1; + + if (sizeof(float)!=4) return 1; + + ca=(unsigned char*)&fa; + if (compare(fc,ca)) return 1; + + return 0; + } + ]) + ], + [AS_VAR_SET(IS_IEEE_BE, 1)], + [AS_VAR_SET(IS_IEEE_BE, 0)], + []) + if test $IS_IEEE_BE = 0 + then + AC_MSG_RESULT(no) + else + AC_MSG_RESULT(yes) + fi +] +) + +dnl ieee little endian double and float compliancy +dnl Enrico Fucile 12-2008 +AC_DEFUN([AC_IEEE_LE], +[ + AC_MSG_CHECKING([if double and float are ieee little endian]) + AC_LANG(C) + AC_RUN_IFELSE( + [ + AC_LANG_SOURCE([ + int compare(unsigned char* a,unsigned char* b) { + while(*a != 0) if (*(b++)!=*(a++)) return 1; + return 0; + } + int main(int argc,char** argv) { + unsigned char dc[[]]={0xD9,0xCC,0x67,0x93,0x80,0xDE,0x61,0x30,0}; + double da=1.23456789e-75; + unsigned char* ca; + + unsigned char fc[[]]={0x22,0x48,0x83,0x05,0}; + float fa=1.23456789e-35; + + if (sizeof(double)!=8) return 1; + + ca=(unsigned char*)&da; + if (compare(dc,ca)) return 1; + + if (sizeof(float)!=4) return 1; + + ca=(unsigned char*)&fa; + if (compare(fc,ca)) return 1; + + return 0; + } + ]) + ], + [AS_VAR_SET(IS_IEEE_LE, 1)], + [AS_VAR_SET(IS_IEEE_LE, 0)], + []) + if test $IS_IEEE_LE = 0 + then + AC_MSG_RESULT(no) + else + AC_MSG_RESULT(yes) + fi +] +) + +dnl pthreads +dnl Enrico Fucile 06-2008 +AC_DEFUN([AC_GRIB_PTHREADS], +[ + AC_MSG_CHECKING([if pthreads available]) + AC_LANG(C) + OLDLIBS=$LIBS + LIBS="$LIBS -lpthread" + AC_RUN_IFELSE( + [ + AC_LANG_SOURCE([ + #include + #include + + #define NUMTHRDS 4 + static int count; + + static pthread_once_t once = PTHREAD_ONCE_INIT; + static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + static pthread_t callThd[[NUMTHRDS]]; + + static void init() { + pthread_mutexattr_t attr; + + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex,&attr); + pthread_mutexattr_destroy(&attr); + } + + void* increment(void* arg); + + int main(int argc,char** argv){ + int i; + void* status=0; + pthread_attr_t attr; + pthread_attr_init(&attr); + count=0; + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + for (i=0;i + #include + + #define NUMTHRDS 4 + static int count; + #define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP + extern int pthread_mutexattr_settype(pthread_mutexattr_t* attr,int type); + + static pthread_once_t once = PTHREAD_ONCE_INIT; + static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + static pthread_t callThd[[NUMTHRDS]]; + + static void init() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex,&attr); + pthread_mutexattr_destroy(&attr); + } + + void* increment(void* arg); + + int main(int argc,char** argv){ + int i; + void* status=0; + pthread_attr_t attr; + pthread_attr_init(&attr); + count=0; + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + for (i=0;iconftest.f90 + module conftest + end module conftest +EOF + +ac_try='$FC $FCFLAGS -c conftest.f90 >&AS_MESSAGE_LOG_FD' +if AC_TRY_EVAL(ac_try) && test -f CONFTEST.mod ; then + ac_cv_prog_f90_uppercase_mod=yes + rm -f CONFTEST.mod +else + ac_cv_prog_f90_uppercase_mod=no +fi +AC_MSG_RESULT($ac_cv_prog_f90_uppercase_mod) +#rm -f conftest* +AC_LANG_POP(Fortran) +]) + +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_f90_module_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_F90_MODULE_FLAG +# +# DESCRIPTION +# +# Find Fortran 90 modules inclusion flag. The module inclusion flag is +# stored in the cached variable ax_f90_modflag. An error is triggered if +# the flag cannot be found. Supported are the -I GNU compilers flag, the +# -M SUN compilers flag, and the -p Absoft Pro Fortran compiler flag. +# +# LICENSE +# +# Copyright (c) 2009 Luc Maisonobe +# Copyright (c) 2009 Julian C. Cummings +# Copyright (c) 2009 Alexander Pletzer +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +##serial 12 + +AC_DEFUN([AX_F90_MODULE_FLAG],[ +AC_CACHE_CHECK([fortran 90 modules inclusion flag], +ax_cv_f90_modflag, +[AC_LANG_PUSH(Fortran) +i=0 +while test \( -f tmpdir_$i \) -o \( -d tmpdir_$i \) ; do + i=`expr $i + 1` +done +mkdir tmpdir_$i +cd tmpdir_$i +AC_COMPILE_IFELSE([ +!234567 + module conftest_module + contains + subroutine conftest_routine + write(*,'(a)') 'gotcha!' + end subroutine conftest_routine + end module conftest_module + ],[],[]) +cd .. +ax_cv_f90_modflag="not found" +for ax_flag in "-I" "-M" "-p"; do + if test "$ax_cv_f90_modflag" = "not found" ; then + ax_save_FCFLAGS="$FCFLAGS" + FCFLAGS="$ax_save_FCFLAGS ${ax_flag}tmpdir_$i" + AC_COMPILE_IFELSE([ +!234567 + program conftest_program + use conftest_module + call conftest_routine + end program conftest_program + ],[ax_cv_f90_modflag="$ax_flag"],[]) + FCFLAGS="$ax_save_FCFLAGS" + fi +done +rm -fr tmpdir_$i +#if test "$ax_cv_f90_modflag" = "not found" ; then +# AC_MSG_ERROR([unable to find compiler flag for modules inclusion]) +#fi +AC_LANG_POP(Fortran) +])]) + +dnl AC_PROG_FC_DEBUG_IN_MODULE +dnl Daniel Varela 2011-03-25 +dnl --------------- +AC_DEFUN([AC_PROG_FC_DEBUG_IN_MODULE], +[ +AC_LANG_PUSH(Fortran) +AC_MSG_CHECKING([if Fortran 90 can resolve debug symbols in modules]) +cat <conftest-module.f90 + module conftest + end module conftest +EOF +cat <conftest.f90 + program f90usemodule + use CONFTEST + end program f90usemodule +EOF + +ac_compile_module='$FC -g -c conftest-module.f90 >&AS_MESSAGE_LOG_FD' +ac_link_program='$FC -g -o conftest -I. conftest.f90 >&AS_MESSAGE_LOG_FD' + +if AC_TRY_EVAL(ac_compile_module) && AC_TRY_EVAL(ac_link_program) && test -f conftest ; then + ac_cv_prog_f90_debug_in_module=yes + rm -f conftest +else + ac_cv_prog_f90_debug_in_module=no +fi +AC_MSG_RESULT($ac_cv_prog_f90_debug_in_module) +#rm -f conftest* +AC_LANG_POP(Fortran) +]) + + diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 000000000..922c27bc0 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +autotools_dir=/usr/bin + +export PATH=$autotools_dir:$PATH + +autoreconf=$autotools_dir/autoreconf + +goodversion=`$autoreconf --version | grep 2.65` +if [ -z "$goodversion" ] +then +echo + echo "!!!!! ERROR: wrong autoreconf version" + echo "We have to use autoconf 2.65" + echo "ABORTED" + echo + exit 1 +fi + +echo ----------------------- +$autoreconf --version +echo ----------------------- +$autoreconf -i -f -Im4 + + diff --git a/concepts/grib1_short_name b/concepts/grib1_short_name new file mode 100644 index 000000000..61afcc567 --- /dev/null +++ b/concepts/grib1_short_name @@ -0,0 +1,1117 @@ +# Automatically generated by ./grib1_def.pl, do not edit + +concept grib1_short_name { + + 'STRF' = { indicatorOfParameter=1 ; gribTablesVersionNo=128 ;centre=98;} + 'VPOT' = { indicatorOfParameter=2 ; gribTablesVersionNo=128 ;centre=98;} + 'PT' = { indicatorOfParameter=3 ; gribTablesVersionNo=128 ;centre=98;} + 'EQPT' = { indicatorOfParameter=4 ; gribTablesVersionNo=128 ;centre=98;} + 'SEPT' = { indicatorOfParameter=5 ; gribTablesVersionNo=128 ;centre=98;} + 'SSFR' = { indicatorOfParameter=6 ; gribTablesVersionNo=128 ;centre=98;} + 'SCFR' = { indicatorOfParameter=7 ; gribTablesVersionNo=128 ;centre=98;} + 'SRO' = { indicatorOfParameter=8 ; gribTablesVersionNo=128 ;centre=98;} + 'SSRO' = { indicatorOfParameter=9 ; gribTablesVersionNo=128 ;centre=98;} + 'WIND' = { indicatorOfParameter=10 ; gribTablesVersionNo=128 ;centre=98;} + 'UDVW' = { indicatorOfParameter=11 ; gribTablesVersionNo=128 ;centre=98;} + 'VDVW' = { indicatorOfParameter=12 ; gribTablesVersionNo=128 ;centre=98;} + 'URTW' = { indicatorOfParameter=13 ; gribTablesVersionNo=128 ;centre=98;} + 'VRTW' = { indicatorOfParameter=14 ; gribTablesVersionNo=128 ;centre=98;} + 'ALUVP' = { indicatorOfParameter=15 ; gribTablesVersionNo=128 ;centre=98;} + 'ALUVD' = { indicatorOfParameter=16 ; gribTablesVersionNo=128 ;centre=98;} + 'ALNIP' = { indicatorOfParameter=17 ; gribTablesVersionNo=128 ;centre=98;} + 'ALNID' = { indicatorOfParameter=18 ; gribTablesVersionNo=128 ;centre=98;} + 'UVCS' = { indicatorOfParameter=19 ; gribTablesVersionNo=128 ;centre=98;} + 'PARCS' = { indicatorOfParameter=20 ; gribTablesVersionNo=128 ;centre=98;} + 'UCTP' = { indicatorOfParameter=21 ; gribTablesVersionNo=128 ;centre=98;} + 'UCLN' = { indicatorOfParameter=22 ; gribTablesVersionNo=128 ;centre=98;} + 'UCDV' = { indicatorOfParameter=23 ; gribTablesVersionNo=128 ;centre=98;} + 'CL' = { indicatorOfParameter=26 ; gribTablesVersionNo=128 ;centre=98;} + 'CVL' = { indicatorOfParameter=27 ; gribTablesVersionNo=128 ;centre=98;} + 'CVH' = { indicatorOfParameter=28 ; gribTablesVersionNo=128 ;centre=98;} + 'TVL' = { indicatorOfParameter=29 ; gribTablesVersionNo=128 ;centre=98;} + 'TVH' = { indicatorOfParameter=30 ; gribTablesVersionNo=128 ;centre=98;} + 'CI' = { indicatorOfParameter=31 ; gribTablesVersionNo=128 ;centre=98;} + 'ASN' = { indicatorOfParameter=32 ; gribTablesVersionNo=128 ;centre=98;} + 'RSN' = { indicatorOfParameter=33 ; gribTablesVersionNo=128 ;centre=98;} + 'SSTK' = { indicatorOfParameter=34 ; gribTablesVersionNo=128 ;centre=98;} + 'ISTL1' = { indicatorOfParameter=35 ; gribTablesVersionNo=128 ;centre=98;} + 'ISTL2' = { indicatorOfParameter=36 ; gribTablesVersionNo=128 ;centre=98;} + 'ISTL3' = { indicatorOfParameter=37 ; gribTablesVersionNo=128 ;centre=98;} + 'ISTL4' = { indicatorOfParameter=38 ; gribTablesVersionNo=128 ;centre=98;} + 'SWVL1' = { indicatorOfParameter=39 ; gribTablesVersionNo=128 ;centre=98;} + 'SWVL2' = { indicatorOfParameter=40 ; gribTablesVersionNo=128 ;centre=98;} + 'SWVL3' = { indicatorOfParameter=41 ; gribTablesVersionNo=128 ;centre=98;} + 'SWVL4' = { indicatorOfParameter=42 ; gribTablesVersionNo=128 ;centre=98;} + 'SLT' = { indicatorOfParameter=43 ; gribTablesVersionNo=128 ;centre=98;} + 'ES' = { indicatorOfParameter=44 ; gribTablesVersionNo=128 ;centre=98;} + 'SMLT' = { indicatorOfParameter=45 ; gribTablesVersionNo=128 ;centre=98;} + 'SDUR' = { indicatorOfParameter=46 ; gribTablesVersionNo=128 ;centre=98;} + 'DSRP' = { indicatorOfParameter=47 ; gribTablesVersionNo=128 ;centre=98;} + 'MAGSS' = { indicatorOfParameter=48 ; gribTablesVersionNo=128 ;centre=98;} + '10FG' = { indicatorOfParameter=49 ; gribTablesVersionNo=128 ;centre=98;} + 'LSPF' = { indicatorOfParameter=50 ; gribTablesVersionNo=128 ;centre=98;} + 'MX2T24' = { indicatorOfParameter=51 ; gribTablesVersionNo=128 ;centre=98;} + 'MN2T24' = { indicatorOfParameter=52 ; gribTablesVersionNo=128 ;centre=98;} + 'MONT' = { indicatorOfParameter=53 ; gribTablesVersionNo=128 ;centre=98;} + 'PRES' = { indicatorOfParameter=54 ; gribTablesVersionNo=128 ;centre=98;} + 'MEAN2T24' = { indicatorOfParameter=55 ; gribTablesVersionNo=128 ;centre=98;} + 'MN2D24' = { indicatorOfParameter=56 ; gribTablesVersionNo=128 ;centre=98;} + 'UVB' = { indicatorOfParameter=57 ; gribTablesVersionNo=128 ;centre=98;} + 'PAR' = { indicatorOfParameter=58 ; gribTablesVersionNo=128 ;centre=98;} + 'CAPE' = { indicatorOfParameter=59 ; gribTablesVersionNo=128 ;centre=98;} + 'PV' = { indicatorOfParameter=60 ; gribTablesVersionNo=128 ;centre=98;} + 'TPO' = { indicatorOfParameter=61 ; gribTablesVersionNo=128 ;centre=98;} + 'OBCT' = { indicatorOfParameter=62 ; gribTablesVersionNo=128 ;centre=98;} + 'ISSRD' = { indicatorOfParameter=72 ; gribTablesVersionNo=128 ;centre=98;} + 'ISTRD' = { indicatorOfParameter=73 ; gribTablesVersionNo=128 ;centre=98;} + 'SDFOR' = { indicatorOfParameter=74 ; gribTablesVersionNo=128 ;centre=98;} + 'MX2T6' = { indicatorOfParameter=121 ; gribTablesVersionNo=128 ;centre=98;} + 'MN2T6' = { indicatorOfParameter=122 ; gribTablesVersionNo=128 ;centre=98;} + '10FG6' = { indicatorOfParameter=123 ; gribTablesVersionNo=128 ;centre=98;} + 'EMIS' = { indicatorOfParameter=124 ; gribTablesVersionNo=128 ;centre=98;} + 'AT' = { indicatorOfParameter=127 ; gribTablesVersionNo=128 ;centre=98;} + 'BV' = { indicatorOfParameter=128 ; gribTablesVersionNo=128 ;centre=98;} + 'Z' = { indicatorOfParameter=129 ; gribTablesVersionNo=128 ;centre=98;} + 'T' = { indicatorOfParameter=130 ; gribTablesVersionNo=128 ;centre=98;} + 'U' = { indicatorOfParameter=131 ; gribTablesVersionNo=128 ;centre=98;} + 'V' = { indicatorOfParameter=132 ; gribTablesVersionNo=128 ;centre=98;} + 'Q' = { indicatorOfParameter=133 ; gribTablesVersionNo=128 ;centre=98;} + 'SP' = { indicatorOfParameter=134 ; gribTablesVersionNo=128 ;centre=98;} + 'W' = { indicatorOfParameter=135 ; gribTablesVersionNo=128 ;centre=98;} + 'TCW' = { indicatorOfParameter=136 ; gribTablesVersionNo=128 ;centre=98;} + 'TCWV' = { indicatorOfParameter=137 ; gribTablesVersionNo=128 ;centre=98;} + 'VO' = { indicatorOfParameter=138 ; gribTablesVersionNo=128 ;centre=98;} + 'STL1' = { indicatorOfParameter=139 ; gribTablesVersionNo=128 ;centre=98;} + 'SWL1' = { indicatorOfParameter=140 ; gribTablesVersionNo=128 ;centre=98;} + 'SD' = { indicatorOfParameter=141 ; gribTablesVersionNo=128 ;centre=98;} + 'LSP' = { indicatorOfParameter=142 ; gribTablesVersionNo=128 ;centre=98;} + 'CP' = { indicatorOfParameter=143 ; gribTablesVersionNo=128 ;centre=98;} + 'SF' = { indicatorOfParameter=144 ; gribTablesVersionNo=128 ;centre=98;} + 'BLD' = { indicatorOfParameter=145 ; gribTablesVersionNo=128 ;centre=98;} + 'SSHF' = { indicatorOfParameter=146 ; gribTablesVersionNo=128 ;centre=98;} + 'SLHF' = { indicatorOfParameter=147 ; gribTablesVersionNo=128 ;centre=98;} + 'CHNK' = { indicatorOfParameter=148 ; gribTablesVersionNo=128 ;centre=98;} + 'SNR' = { indicatorOfParameter=149 ; gribTablesVersionNo=128 ;centre=98;} + 'TNR' = { indicatorOfParameter=150 ; gribTablesVersionNo=128 ;centre=98;} + 'MSL' = { indicatorOfParameter=151 ; gribTablesVersionNo=128 ;centre=98;} + 'LNSP' = { indicatorOfParameter=152 ; gribTablesVersionNo=128 ;centre=98;} + 'SWHR' = { indicatorOfParameter=153 ; gribTablesVersionNo=128 ;centre=98;} + 'LWHR' = { indicatorOfParameter=154 ; gribTablesVersionNo=128 ;centre=98;} + 'D' = { indicatorOfParameter=155 ; gribTablesVersionNo=128 ;centre=98;} + 'GH' = { indicatorOfParameter=156 ; gribTablesVersionNo=128 ;centre=98;} + 'R' = { indicatorOfParameter=157 ; gribTablesVersionNo=128 ;centre=98;} + 'TSP' = { indicatorOfParameter=158 ; gribTablesVersionNo=128 ;centre=98;} + 'BLH' = { indicatorOfParameter=159 ; gribTablesVersionNo=128 ;centre=98;} + 'SDOR' = { indicatorOfParameter=160 ; gribTablesVersionNo=128 ;centre=98;} + 'ISOR' = { indicatorOfParameter=161 ; gribTablesVersionNo=128 ;centre=98;} + 'ANOR' = { indicatorOfParameter=162 ; gribTablesVersionNo=128 ;centre=98;} + 'SLOR' = { indicatorOfParameter=163 ; gribTablesVersionNo=128 ;centre=98;} + 'TCC' = { indicatorOfParameter=164 ; gribTablesVersionNo=128 ;centre=98;} + '10U' = { indicatorOfParameter=165 ; gribTablesVersionNo=128 ;centre=98;} + '10V' = { indicatorOfParameter=166 ; gribTablesVersionNo=128 ;centre=98;} + '2T' = { indicatorOfParameter=167 ; gribTablesVersionNo=128 ;centre=98;} + '2D' = { indicatorOfParameter=168 ; gribTablesVersionNo=128 ;centre=98;} + 'SSRD' = { indicatorOfParameter=169 ; gribTablesVersionNo=128 ;centre=98;} + 'STL2' = { indicatorOfParameter=170 ; gribTablesVersionNo=128 ;centre=98;} + 'SWL2' = { indicatorOfParameter=171 ; gribTablesVersionNo=128 ;centre=98;} + 'LSM' = { indicatorOfParameter=172 ; gribTablesVersionNo=128 ;centre=98;} + 'SR' = { indicatorOfParameter=173 ; gribTablesVersionNo=128 ;centre=98;} + 'AL' = { indicatorOfParameter=174 ; gribTablesVersionNo=128 ;centre=98;} + 'STRD' = { indicatorOfParameter=175 ; gribTablesVersionNo=128 ;centre=98;} + 'SSR' = { indicatorOfParameter=176 ; gribTablesVersionNo=128 ;centre=98;} + 'STR' = { indicatorOfParameter=177 ; gribTablesVersionNo=128 ;centre=98;} + 'TSR' = { indicatorOfParameter=178 ; gribTablesVersionNo=128 ;centre=98;} + 'TTR' = { indicatorOfParameter=179 ; gribTablesVersionNo=128 ;centre=98;} + 'EWSS' = { indicatorOfParameter=180 ; gribTablesVersionNo=128 ;centre=98;} + 'NSSS' = { indicatorOfParameter=181 ; gribTablesVersionNo=128 ;centre=98;} + 'E' = { indicatorOfParameter=182 ; gribTablesVersionNo=128 ;centre=98;} + 'STL3' = { indicatorOfParameter=183 ; gribTablesVersionNo=128 ;centre=98;} + 'SWL3' = { indicatorOfParameter=184 ; gribTablesVersionNo=128 ;centre=98;} + 'CCC' = { indicatorOfParameter=185 ; gribTablesVersionNo=128 ;centre=98;} + 'LCC' = { indicatorOfParameter=186 ; gribTablesVersionNo=128 ;centre=98;} + 'MCC' = { indicatorOfParameter=187 ; gribTablesVersionNo=128 ;centre=98;} + 'HCC' = { indicatorOfParameter=188 ; gribTablesVersionNo=128 ;centre=98;} + 'SUND' = { indicatorOfParameter=189 ; gribTablesVersionNo=128 ;centre=98;} + 'EWOV' = { indicatorOfParameter=190 ; gribTablesVersionNo=128 ;centre=98;} + 'NSOV' = { indicatorOfParameter=191 ; gribTablesVersionNo=128 ;centre=98;} + 'NWOV' = { indicatorOfParameter=192 ; gribTablesVersionNo=128 ;centre=98;} + 'NEOV' = { indicatorOfParameter=193 ; gribTablesVersionNo=128 ;centre=98;} + 'BTMP' = { indicatorOfParameter=194 ; gribTablesVersionNo=128 ;centre=98;} + 'LGWS' = { indicatorOfParameter=195 ; gribTablesVersionNo=128 ;centre=98;} + 'MGWS' = { indicatorOfParameter=196 ; gribTablesVersionNo=128 ;centre=98;} + 'GWD' = { indicatorOfParameter=197 ; gribTablesVersionNo=128 ;centre=98;} + 'SRC' = { indicatorOfParameter=198 ; gribTablesVersionNo=128 ;centre=98;} + 'VEG' = { indicatorOfParameter=199 ; gribTablesVersionNo=128 ;centre=98;} + 'VSO' = { indicatorOfParameter=200 ; gribTablesVersionNo=128 ;centre=98;} + 'MX2T' = { indicatorOfParameter=201 ; gribTablesVersionNo=128 ;centre=98;} + 'MN2T' = { indicatorOfParameter=202 ; gribTablesVersionNo=128 ;centre=98;} + 'O3' = { indicatorOfParameter=203 ; gribTablesVersionNo=128 ;centre=98;} + 'PAW' = { indicatorOfParameter=204 ; gribTablesVersionNo=128 ;centre=98;} + 'RO' = { indicatorOfParameter=205 ; gribTablesVersionNo=128 ;centre=98;} + 'TCO3' = { indicatorOfParameter=206 ; gribTablesVersionNo=128 ;centre=98;} + '10SI' = { indicatorOfParameter=207 ; gribTablesVersionNo=128 ;centre=98;} + 'TSRC' = { indicatorOfParameter=208 ; gribTablesVersionNo=128 ;centre=98;} + 'TTRC' = { indicatorOfParameter=209 ; gribTablesVersionNo=128 ;centre=98;} + 'SSRC' = { indicatorOfParameter=210 ; gribTablesVersionNo=128 ;centre=98;} + 'STRC' = { indicatorOfParameter=211 ; gribTablesVersionNo=128 ;centre=98;} + 'TISR' = { indicatorOfParameter=212 ; gribTablesVersionNo=128 ;centre=98;} + 'VIMD' = { indicatorOfParameter=213 ; gribTablesVersionNo=128 ;centre=98;} + 'DHR' = { indicatorOfParameter=214 ; gribTablesVersionNo=128 ;centre=98;} + 'DHVD' = { indicatorOfParameter=215 ; gribTablesVersionNo=128 ;centre=98;} + 'DHCC' = { indicatorOfParameter=216 ; gribTablesVersionNo=128 ;centre=98;} + 'DHLC' = { indicatorOfParameter=217 ; gribTablesVersionNo=128 ;centre=98;} + 'VDZW' = { indicatorOfParameter=218 ; gribTablesVersionNo=128 ;centre=98;} + 'VDMW' = { indicatorOfParameter=219 ; gribTablesVersionNo=128 ;centre=98;} + 'EWGD' = { indicatorOfParameter=220 ; gribTablesVersionNo=128 ;centre=98;} + 'NSGD' = { indicatorOfParameter=221 ; gribTablesVersionNo=128 ;centre=98;} + 'CTZW' = { indicatorOfParameter=222 ; gribTablesVersionNo=128 ;centre=98;} + 'CTMW' = { indicatorOfParameter=223 ; gribTablesVersionNo=128 ;centre=98;} + 'VDH' = { indicatorOfParameter=224 ; gribTablesVersionNo=128 ;centre=98;} + 'HTCC' = { indicatorOfParameter=225 ; gribTablesVersionNo=128 ;centre=98;} + 'HTLC' = { indicatorOfParameter=226 ; gribTablesVersionNo=128 ;centre=98;} + 'CRNH' = { indicatorOfParameter=227 ; gribTablesVersionNo=128 ;centre=98;} + 'TP' = { indicatorOfParameter=228 ; gribTablesVersionNo=128 ;centre=98;} + 'IEWS' = { indicatorOfParameter=229 ; gribTablesVersionNo=128 ;centre=98;} + 'INSS' = { indicatorOfParameter=230 ; gribTablesVersionNo=128 ;centre=98;} + 'ISHF' = { indicatorOfParameter=231 ; gribTablesVersionNo=128 ;centre=98;} + 'IE' = { indicatorOfParameter=232 ; gribTablesVersionNo=128 ;centre=98;} + 'ASQ' = { indicatorOfParameter=233 ; gribTablesVersionNo=128 ;centre=98;} + 'LSRH' = { indicatorOfParameter=234 ; gribTablesVersionNo=128 ;centre=98;} + 'SKT' = { indicatorOfParameter=235 ; gribTablesVersionNo=128 ;centre=98;} + 'STL4' = { indicatorOfParameter=236 ; gribTablesVersionNo=128 ;centre=98;} + 'SWL4' = { indicatorOfParameter=237 ; gribTablesVersionNo=128 ;centre=98;} + 'TSN' = { indicatorOfParameter=238 ; gribTablesVersionNo=128 ;centre=98;} + 'CSF' = { indicatorOfParameter=239 ; gribTablesVersionNo=128 ;centre=98;} + 'LSF' = { indicatorOfParameter=240 ; gribTablesVersionNo=128 ;centre=98;} + 'ACF' = { indicatorOfParameter=241 ; gribTablesVersionNo=128 ;centre=98;} + 'ALW' = { indicatorOfParameter=242 ; gribTablesVersionNo=128 ;centre=98;} + 'FAL' = { indicatorOfParameter=243 ; gribTablesVersionNo=128 ;centre=98;} + 'FSR' = { indicatorOfParameter=244 ; gribTablesVersionNo=128 ;centre=98;} + 'FLSR' = { indicatorOfParameter=245 ; gribTablesVersionNo=128 ;centre=98;} + 'CLWC' = { indicatorOfParameter=246 ; gribTablesVersionNo=128 ;centre=98;} + 'CIWC' = { indicatorOfParameter=247 ; gribTablesVersionNo=128 ;centre=98;} + 'CC' = { indicatorOfParameter=248 ; gribTablesVersionNo=128 ;centre=98;} + 'AIW' = { indicatorOfParameter=249 ; gribTablesVersionNo=128 ;centre=98;} + 'ICE' = { indicatorOfParameter=250 ; gribTablesVersionNo=128 ;centre=98;} + 'ATTE' = { indicatorOfParameter=251 ; gribTablesVersionNo=128 ;centre=98;} + 'ATHE' = { indicatorOfParameter=252 ; gribTablesVersionNo=128 ;centre=98;} + 'ATZE' = { indicatorOfParameter=253 ; gribTablesVersionNo=128 ;centre=98;} + 'ATMW' = { indicatorOfParameter=254 ; gribTablesVersionNo=128 ;centre=98;} + 'STRF' = { indicatorOfParameter=1 ; gribTablesVersionNo=129 ;centre=98;} + 'VPOT' = { indicatorOfParameter=2 ; gribTablesVersionNo=129 ;centre=98;} + 'PT' = { indicatorOfParameter=3 ; gribTablesVersionNo=129 ;centre=98;} + 'EQPT' = { indicatorOfParameter=4 ; gribTablesVersionNo=129 ;centre=98;} + 'SEPT' = { indicatorOfParameter=5 ; gribTablesVersionNo=129 ;centre=98;} + 'UDVW' = { indicatorOfParameter=11 ; gribTablesVersionNo=129 ;centre=98;} + 'VDVW' = { indicatorOfParameter=12 ; gribTablesVersionNo=129 ;centre=98;} + 'URTW' = { indicatorOfParameter=13 ; gribTablesVersionNo=129 ;centre=98;} + 'VRTW' = { indicatorOfParameter=14 ; gribTablesVersionNo=129 ;centre=98;} + 'UCTP' = { indicatorOfParameter=21 ; gribTablesVersionNo=129 ;centre=98;} + 'UCLN' = { indicatorOfParameter=22 ; gribTablesVersionNo=129 ;centre=98;} + 'UCDV' = { indicatorOfParameter=23 ; gribTablesVersionNo=129 ;centre=98;} + 'CL' = { indicatorOfParameter=26 ; gribTablesVersionNo=129 ;centre=98;} + 'CVL' = { indicatorOfParameter=27 ; gribTablesVersionNo=129 ;centre=98;} + 'CVH' = { indicatorOfParameter=28 ; gribTablesVersionNo=129 ;centre=98;} + 'TVL' = { indicatorOfParameter=29 ; gribTablesVersionNo=129 ;centre=98;} + 'TVH' = { indicatorOfParameter=30 ; gribTablesVersionNo=129 ;centre=98;} + 'CI' = { indicatorOfParameter=31 ; gribTablesVersionNo=129 ;centre=98;} + 'ASN' = { indicatorOfParameter=32 ; gribTablesVersionNo=129 ;centre=98;} + 'RSN' = { indicatorOfParameter=33 ; gribTablesVersionNo=129 ;centre=98;} + 'SSTK' = { indicatorOfParameter=34 ; gribTablesVersionNo=129 ;centre=98;} + 'ISTL1' = { indicatorOfParameter=35 ; gribTablesVersionNo=129 ;centre=98;} + 'ISTL2' = { indicatorOfParameter=36 ; gribTablesVersionNo=129 ;centre=98;} + 'ISTL3' = { indicatorOfParameter=37 ; gribTablesVersionNo=129 ;centre=98;} + 'ISTL4' = { indicatorOfParameter=38 ; gribTablesVersionNo=129 ;centre=98;} + 'SWVL1' = { indicatorOfParameter=39 ; gribTablesVersionNo=129 ;centre=98;} + 'SWVL2' = { indicatorOfParameter=40 ; gribTablesVersionNo=129 ;centre=98;} + 'SWVL3' = { indicatorOfParameter=41 ; gribTablesVersionNo=129 ;centre=98;} + 'SWVL4' = { indicatorOfParameter=42 ; gribTablesVersionNo=129 ;centre=98;} + 'SLT' = { indicatorOfParameter=43 ; gribTablesVersionNo=129 ;centre=98;} + 'ES' = { indicatorOfParameter=44 ; gribTablesVersionNo=129 ;centre=98;} + 'SMLT' = { indicatorOfParameter=45 ; gribTablesVersionNo=129 ;centre=98;} + 'SDUR' = { indicatorOfParameter=46 ; gribTablesVersionNo=129 ;centre=98;} + 'DSRP' = { indicatorOfParameter=47 ; gribTablesVersionNo=129 ;centre=98;} + 'MAGSS' = { indicatorOfParameter=48 ; gribTablesVersionNo=129 ;centre=98;} + '10FG' = { indicatorOfParameter=49 ; gribTablesVersionNo=129 ;centre=98;} + 'LSPF' = { indicatorOfParameter=50 ; gribTablesVersionNo=129 ;centre=98;} + 'MX2T24' = { indicatorOfParameter=51 ; gribTablesVersionNo=129 ;centre=98;} + 'MN2T24' = { indicatorOfParameter=52 ; gribTablesVersionNo=129 ;centre=98;} + 'MONT' = { indicatorOfParameter=53 ; gribTablesVersionNo=129 ;centre=98;} + 'PRES' = { indicatorOfParameter=54 ; gribTablesVersionNo=129 ;centre=98;} + 'MEAN2T24' = { indicatorOfParameter=55 ; gribTablesVersionNo=129 ;centre=98;} + 'MN2D24' = { indicatorOfParameter=56 ; gribTablesVersionNo=129 ;centre=98;} + 'UVB' = { indicatorOfParameter=57 ; gribTablesVersionNo=129 ;centre=98;} + 'PAR' = { indicatorOfParameter=58 ; gribTablesVersionNo=129 ;centre=98;} + 'CAPE' = { indicatorOfParameter=59 ; gribTablesVersionNo=129 ;centre=98;} + 'PV' = { indicatorOfParameter=60 ; gribTablesVersionNo=129 ;centre=98;} + 'TPO' = { indicatorOfParameter=61 ; gribTablesVersionNo=129 ;centre=98;} + 'OBCT' = { indicatorOfParameter=62 ; gribTablesVersionNo=129 ;centre=98;} + 'MX2T6' = { indicatorOfParameter=121 ; gribTablesVersionNo=129 ;centre=98;} + 'MN2T6' = { indicatorOfParameter=122 ; gribTablesVersionNo=129 ;centre=98;} + '10FG6' = { indicatorOfParameter=123 ; gribTablesVersionNo=129 ;centre=98;} + 'AT' = { indicatorOfParameter=127 ; gribTablesVersionNo=129 ;centre=98;} + 'BV' = { indicatorOfParameter=128 ; gribTablesVersionNo=129 ;centre=98;} + 'Z' = { indicatorOfParameter=129 ; gribTablesVersionNo=129 ;centre=98;} + 'T' = { indicatorOfParameter=130 ; gribTablesVersionNo=129 ;centre=98;} + 'U' = { indicatorOfParameter=131 ; gribTablesVersionNo=129 ;centre=98;} + 'V' = { indicatorOfParameter=132 ; gribTablesVersionNo=129 ;centre=98;} + 'Q' = { indicatorOfParameter=133 ; gribTablesVersionNo=129 ;centre=98;} + 'SP' = { indicatorOfParameter=134 ; gribTablesVersionNo=129 ;centre=98;} + 'W' = { indicatorOfParameter=135 ; gribTablesVersionNo=129 ;centre=98;} + 'TCW' = { indicatorOfParameter=136 ; gribTablesVersionNo=129 ;centre=98;} + 'TCWV' = { indicatorOfParameter=137 ; gribTablesVersionNo=129 ;centre=98;} + 'VO' = { indicatorOfParameter=138 ; gribTablesVersionNo=129 ;centre=98;} + 'STL1' = { indicatorOfParameter=139 ; gribTablesVersionNo=129 ;centre=98;} + 'SWL1' = { indicatorOfParameter=140 ; gribTablesVersionNo=129 ;centre=98;} + 'SD' = { indicatorOfParameter=141 ; gribTablesVersionNo=129 ;centre=98;} + 'LSP' = { indicatorOfParameter=142 ; gribTablesVersionNo=129 ;centre=98;} + 'CP' = { indicatorOfParameter=143 ; gribTablesVersionNo=129 ;centre=98;} + 'SF' = { indicatorOfParameter=144 ; gribTablesVersionNo=129 ;centre=98;} + 'BLD' = { indicatorOfParameter=145 ; gribTablesVersionNo=129 ;centre=98;} + 'SSHF' = { indicatorOfParameter=146 ; gribTablesVersionNo=129 ;centre=98;} + 'SLHF' = { indicatorOfParameter=147 ; gribTablesVersionNo=129 ;centre=98;} + 'CHNK' = { indicatorOfParameter=148 ; gribTablesVersionNo=129 ;centre=98;} + 'SNR' = { indicatorOfParameter=149 ; gribTablesVersionNo=129 ;centre=98;} + 'TNR' = { indicatorOfParameter=150 ; gribTablesVersionNo=129 ;centre=98;} + 'MSL' = { indicatorOfParameter=151 ; gribTablesVersionNo=129 ;centre=98;} + 'LNSP' = { indicatorOfParameter=152 ; gribTablesVersionNo=129 ;centre=98;} + 'SWHR' = { indicatorOfParameter=153 ; gribTablesVersionNo=129 ;centre=98;} + 'LWHR' = { indicatorOfParameter=154 ; gribTablesVersionNo=129 ;centre=98;} + 'D' = { indicatorOfParameter=155 ; gribTablesVersionNo=129 ;centre=98;} + 'GH' = { indicatorOfParameter=156 ; gribTablesVersionNo=129 ;centre=98;} + 'R' = { indicatorOfParameter=157 ; gribTablesVersionNo=129 ;centre=98;} + 'TSP' = { indicatorOfParameter=158 ; gribTablesVersionNo=129 ;centre=98;} + 'BLH' = { indicatorOfParameter=159 ; gribTablesVersionNo=129 ;centre=98;} + 'SDOR' = { indicatorOfParameter=160 ; gribTablesVersionNo=129 ;centre=98;} + 'ISOR' = { indicatorOfParameter=161 ; gribTablesVersionNo=129 ;centre=98;} + 'ANOR' = { indicatorOfParameter=162 ; gribTablesVersionNo=129 ;centre=98;} + 'SLOR' = { indicatorOfParameter=163 ; gribTablesVersionNo=129 ;centre=98;} + 'TCC' = { indicatorOfParameter=164 ; gribTablesVersionNo=129 ;centre=98;} + '10U' = { indicatorOfParameter=165 ; gribTablesVersionNo=129 ;centre=98;} + '10V' = { indicatorOfParameter=166 ; gribTablesVersionNo=129 ;centre=98;} + '2T' = { indicatorOfParameter=167 ; gribTablesVersionNo=129 ;centre=98;} + '2D' = { indicatorOfParameter=168 ; gribTablesVersionNo=129 ;centre=98;} + 'SSRD' = { indicatorOfParameter=169 ; gribTablesVersionNo=129 ;centre=98;} + 'STL2' = { indicatorOfParameter=170 ; gribTablesVersionNo=129 ;centre=98;} + 'SWL2' = { indicatorOfParameter=171 ; gribTablesVersionNo=129 ;centre=98;} + 'LSM' = { indicatorOfParameter=172 ; gribTablesVersionNo=129 ;centre=98;} + 'SR' = { indicatorOfParameter=173 ; gribTablesVersionNo=129 ;centre=98;} + 'AL' = { indicatorOfParameter=174 ; gribTablesVersionNo=129 ;centre=98;} + 'STRD' = { indicatorOfParameter=175 ; gribTablesVersionNo=129 ;centre=98;} + 'SSR' = { indicatorOfParameter=176 ; gribTablesVersionNo=129 ;centre=98;} + 'STR' = { indicatorOfParameter=177 ; gribTablesVersionNo=129 ;centre=98;} + 'TSR' = { indicatorOfParameter=178 ; gribTablesVersionNo=129 ;centre=98;} + 'TTR' = { indicatorOfParameter=179 ; gribTablesVersionNo=129 ;centre=98;} + 'EWSS' = { indicatorOfParameter=180 ; gribTablesVersionNo=129 ;centre=98;} + 'NSSS' = { indicatorOfParameter=181 ; gribTablesVersionNo=129 ;centre=98;} + 'E' = { indicatorOfParameter=182 ; gribTablesVersionNo=129 ;centre=98;} + 'STL3' = { indicatorOfParameter=183 ; gribTablesVersionNo=129 ;centre=98;} + 'SWL3' = { indicatorOfParameter=184 ; gribTablesVersionNo=129 ;centre=98;} + 'CCC' = { indicatorOfParameter=185 ; gribTablesVersionNo=129 ;centre=98;} + 'LCC' = { indicatorOfParameter=186 ; gribTablesVersionNo=129 ;centre=98;} + 'MCC' = { indicatorOfParameter=187 ; gribTablesVersionNo=129 ;centre=98;} + 'HCC' = { indicatorOfParameter=188 ; gribTablesVersionNo=129 ;centre=98;} + 'SUND' = { indicatorOfParameter=189 ; gribTablesVersionNo=129 ;centre=98;} + 'EWOV' = { indicatorOfParameter=190 ; gribTablesVersionNo=129 ;centre=98;} + 'NSOV' = { indicatorOfParameter=191 ; gribTablesVersionNo=129 ;centre=98;} + 'NWOV' = { indicatorOfParameter=192 ; gribTablesVersionNo=129 ;centre=98;} + 'NEOV' = { indicatorOfParameter=193 ; gribTablesVersionNo=129 ;centre=98;} + 'BTMP' = { indicatorOfParameter=194 ; gribTablesVersionNo=129 ;centre=98;} + 'LGWS' = { indicatorOfParameter=195 ; gribTablesVersionNo=129 ;centre=98;} + 'MGWS' = { indicatorOfParameter=196 ; gribTablesVersionNo=129 ;centre=98;} + 'GWD' = { indicatorOfParameter=197 ; gribTablesVersionNo=129 ;centre=98;} + 'SRC' = { indicatorOfParameter=198 ; gribTablesVersionNo=129 ;centre=98;} + 'VEG' = { indicatorOfParameter=199 ; gribTablesVersionNo=129 ;centre=98;} + 'VSO' = { indicatorOfParameter=200 ; gribTablesVersionNo=129 ;centre=98;} + 'MX2T' = { indicatorOfParameter=201 ; gribTablesVersionNo=129 ;centre=98;} + 'MN2T' = { indicatorOfParameter=202 ; gribTablesVersionNo=129 ;centre=98;} + 'O3' = { indicatorOfParameter=203 ; gribTablesVersionNo=129 ;centre=98;} + 'PAW' = { indicatorOfParameter=204 ; gribTablesVersionNo=129 ;centre=98;} + 'RO' = { indicatorOfParameter=205 ; gribTablesVersionNo=129 ;centre=98;} + 'TCO3' = { indicatorOfParameter=206 ; gribTablesVersionNo=129 ;centre=98;} + '10SI' = { indicatorOfParameter=207 ; gribTablesVersionNo=129 ;centre=98;} + 'TSRC' = { indicatorOfParameter=208 ; gribTablesVersionNo=129 ;centre=98;} + 'TTRC' = { indicatorOfParameter=209 ; gribTablesVersionNo=129 ;centre=98;} + 'SSRC' = { indicatorOfParameter=210 ; gribTablesVersionNo=129 ;centre=98;} + 'STRC' = { indicatorOfParameter=211 ; gribTablesVersionNo=129 ;centre=98;} + 'TISR' = { indicatorOfParameter=212 ; gribTablesVersionNo=129 ;centre=98;} + 'DHR' = { indicatorOfParameter=214 ; gribTablesVersionNo=129 ;centre=98;} + 'DHVD' = { indicatorOfParameter=215 ; gribTablesVersionNo=129 ;centre=98;} + 'DHCC' = { indicatorOfParameter=216 ; gribTablesVersionNo=129 ;centre=98;} + 'DHLC' = { indicatorOfParameter=217 ; gribTablesVersionNo=129 ;centre=98;} + 'VDZW' = { indicatorOfParameter=218 ; gribTablesVersionNo=129 ;centre=98;} + 'VDMW' = { indicatorOfParameter=219 ; gribTablesVersionNo=129 ;centre=98;} + 'EWGD' = { indicatorOfParameter=220 ; gribTablesVersionNo=129 ;centre=98;} + 'NSGD' = { indicatorOfParameter=221 ; gribTablesVersionNo=129 ;centre=98;} + 'CTZW' = { indicatorOfParameter=222 ; gribTablesVersionNo=129 ;centre=98;} + 'CTMW' = { indicatorOfParameter=223 ; gribTablesVersionNo=129 ;centre=98;} + 'VDH' = { indicatorOfParameter=224 ; gribTablesVersionNo=129 ;centre=98;} + 'HTCC' = { indicatorOfParameter=225 ; gribTablesVersionNo=129 ;centre=98;} + 'HTLC' = { indicatorOfParameter=226 ; gribTablesVersionNo=129 ;centre=98;} + 'CRNH' = { indicatorOfParameter=227 ; gribTablesVersionNo=129 ;centre=98;} + 'TP' = { indicatorOfParameter=228 ; gribTablesVersionNo=129 ;centre=98;} + 'IEWS' = { indicatorOfParameter=229 ; gribTablesVersionNo=129 ;centre=98;} + 'INSS' = { indicatorOfParameter=230 ; gribTablesVersionNo=129 ;centre=98;} + 'ISHF' = { indicatorOfParameter=231 ; gribTablesVersionNo=129 ;centre=98;} + 'IE' = { indicatorOfParameter=232 ; gribTablesVersionNo=129 ;centre=98;} + 'ASQ' = { indicatorOfParameter=233 ; gribTablesVersionNo=129 ;centre=98;} + 'LSRH' = { indicatorOfParameter=234 ; gribTablesVersionNo=129 ;centre=98;} + 'SKT' = { indicatorOfParameter=235 ; gribTablesVersionNo=129 ;centre=98;} + 'STL4' = { indicatorOfParameter=236 ; gribTablesVersionNo=129 ;centre=98;} + 'SWL4' = { indicatorOfParameter=237 ; gribTablesVersionNo=129 ;centre=98;} + 'TSN' = { indicatorOfParameter=238 ; gribTablesVersionNo=129 ;centre=98;} + 'CSF' = { indicatorOfParameter=239 ; gribTablesVersionNo=129 ;centre=98;} + 'LSF' = { indicatorOfParameter=240 ; gribTablesVersionNo=129 ;centre=98;} + 'ACF' = { indicatorOfParameter=241 ; gribTablesVersionNo=129 ;centre=98;} + 'ALW' = { indicatorOfParameter=242 ; gribTablesVersionNo=129 ;centre=98;} + 'FAL' = { indicatorOfParameter=243 ; gribTablesVersionNo=129 ;centre=98;} + 'FSR' = { indicatorOfParameter=244 ; gribTablesVersionNo=129 ;centre=98;} + 'FLSR' = { indicatorOfParameter=245 ; gribTablesVersionNo=129 ;centre=98;} + 'CLWC' = { indicatorOfParameter=246 ; gribTablesVersionNo=129 ;centre=98;} + 'CIWC' = { indicatorOfParameter=247 ; gribTablesVersionNo=129 ;centre=98;} + 'CC' = { indicatorOfParameter=248 ; gribTablesVersionNo=129 ;centre=98;} + 'AIW' = { indicatorOfParameter=249 ; gribTablesVersionNo=129 ;centre=98;} + 'ICE' = { indicatorOfParameter=250 ; gribTablesVersionNo=129 ;centre=98;} + 'ATTE' = { indicatorOfParameter=251 ; gribTablesVersionNo=129 ;centre=98;} + 'ATHE' = { indicatorOfParameter=252 ; gribTablesVersionNo=129 ;centre=98;} + 'ATZE' = { indicatorOfParameter=253 ; gribTablesVersionNo=129 ;centre=98;} + 'ATMW' = { indicatorOfParameter=254 ; gribTablesVersionNo=129 ;centre=98;} + 'TSRU' = { indicatorOfParameter=208 ; gribTablesVersionNo=130 ;centre=98;} + 'TTRU' = { indicatorOfParameter=209 ; gribTablesVersionNo=130 ;centre=98;} + 'TSUC' = { indicatorOfParameter=210 ; gribTablesVersionNo=130 ;centre=98;} + 'TTUC' = { indicatorOfParameter=211 ; gribTablesVersionNo=130 ;centre=98;} + 'CLW' = { indicatorOfParameter=212 ; gribTablesVersionNo=130 ;centre=98;} + 'CF' = { indicatorOfParameter=213 ; gribTablesVersionNo=130 ;centre=98;} + 'DHR' = { indicatorOfParameter=214 ; gribTablesVersionNo=130 ;centre=98;} + 'DHVD' = { indicatorOfParameter=215 ; gribTablesVersionNo=130 ;centre=98;} + 'DHCC' = { indicatorOfParameter=216 ; gribTablesVersionNo=130 ;centre=98;} + 'DHLC' = { indicatorOfParameter=217 ; gribTablesVersionNo=130 ;centre=98;} + 'VDZW' = { indicatorOfParameter=218 ; gribTablesVersionNo=130 ;centre=98;} + 'VDMW' = { indicatorOfParameter=219 ; gribTablesVersionNo=130 ;centre=98;} + 'EWGD' = { indicatorOfParameter=220 ; gribTablesVersionNo=130 ;centre=98;} + 'NSGD' = { indicatorOfParameter=221 ; gribTablesVersionNo=130 ;centre=98;} + 'CTZW' = { indicatorOfParameter=222 ; gribTablesVersionNo=130 ;centre=98;} + 'CTMW' = { indicatorOfParameter=223 ; gribTablesVersionNo=130 ;centre=98;} + 'VDH' = { indicatorOfParameter=224 ; gribTablesVersionNo=130 ;centre=98;} + 'HTCC' = { indicatorOfParameter=225 ; gribTablesVersionNo=130 ;centre=98;} + 'HTLC' = { indicatorOfParameter=226 ; gribTablesVersionNo=130 ;centre=98;} + 'CRNH' = { indicatorOfParameter=227 ; gribTablesVersionNo=130 ;centre=98;} + 'ATT' = { indicatorOfParameter=228 ; gribTablesVersionNo=130 ;centre=98;} + 'ATH' = { indicatorOfParameter=229 ; gribTablesVersionNo=130 ;centre=98;} + 'ATZW' = { indicatorOfParameter=230 ; gribTablesVersionNo=130 ;centre=98;} + 'ATMWAX' = { indicatorOfParameter=231 ; gribTablesVersionNo=130 ;centre=98;} + 'MVV' = { indicatorOfParameter=232 ; gribTablesVersionNo=130 ;centre=98;} + '2TAG2' = { indicatorOfParameter=1 ; gribTablesVersionNo=131 ;centre=98;} + '2TAG1' = { indicatorOfParameter=2 ; gribTablesVersionNo=131 ;centre=98;} + '2TAG0' = { indicatorOfParameter=3 ; gribTablesVersionNo=131 ;centre=98;} + '2TALM1' = { indicatorOfParameter=4 ; gribTablesVersionNo=131 ;centre=98;} + '2TALM2' = { indicatorOfParameter=5 ; gribTablesVersionNo=131 ;centre=98;} + 'TPAG20' = { indicatorOfParameter=6 ; gribTablesVersionNo=131 ;centre=98;} + 'TPAG10' = { indicatorOfParameter=7 ; gribTablesVersionNo=131 ;centre=98;} + 'H0DIP' = { indicatorOfParameter=15 ; gribTablesVersionNo=131 ;centre=98;} + 'HSLP' = { indicatorOfParameter=16 ; gribTablesVersionNo=131 ;centre=98;} + 'SAIP' = { indicatorOfParameter=17 ; gribTablesVersionNo=131 ;centre=98;} + 'WHIP' = { indicatorOfParameter=18 ; gribTablesVersionNo=131 ;centre=98;} + 'TALM2' = { indicatorOfParameter=20 ; gribTablesVersionNo=131 ;centre=98;} + 'TAG2' = { indicatorOfParameter=21 ; gribTablesVersionNo=131 ;centre=98;} + 'TALM8' = { indicatorOfParameter=22 ; gribTablesVersionNo=131 ;centre=98;} + 'TALM4' = { indicatorOfParameter=23 ; gribTablesVersionNo=131 ;centre=98;} + 'TAG4' = { indicatorOfParameter=24 ; gribTablesVersionNo=131 ;centre=98;} + 'TAG8' = { indicatorOfParameter=25 ; gribTablesVersionNo=131 ;centre=98;} + '10GP' = { indicatorOfParameter=49 ; gribTablesVersionNo=131 ;centre=98;} + 'CAPEP' = { indicatorOfParameter=59 ; gribTablesVersionNo=131 ;centre=98;} + 'TPG1' = { indicatorOfParameter=60 ; gribTablesVersionNo=131 ;centre=98;} + 'TPG5' = { indicatorOfParameter=61 ; gribTablesVersionNo=131 ;centre=98;} + 'TPG10' = { indicatorOfParameter=62 ; gribTablesVersionNo=131 ;centre=98;} + 'TPG20' = { indicatorOfParameter=63 ; gribTablesVersionNo=131 ;centre=98;} + 'TPL01' = { indicatorOfParameter=64 ; gribTablesVersionNo=131 ;centre=98;} + 'TPRL1' = { indicatorOfParameter=65 ; gribTablesVersionNo=131 ;centre=98;} + 'TPRG3' = { indicatorOfParameter=66 ; gribTablesVersionNo=131 ;centre=98;} + 'TPRG5' = { indicatorOfParameter=67 ; gribTablesVersionNo=131 ;centre=98;} + '10SPG10' = { indicatorOfParameter=68 ; gribTablesVersionNo=131 ;centre=98;} + '10SPG15' = { indicatorOfParameter=69 ; gribTablesVersionNo=131 ;centre=98;} + '10FGG15' = { indicatorOfParameter=70 ; gribTablesVersionNo=131 ;centre=98;} + '10FGG20' = { indicatorOfParameter=71 ; gribTablesVersionNo=131 ;centre=98;} + '10FGG25' = { indicatorOfParameter=72 ; gribTablesVersionNo=131 ;centre=98;} + '2TL273' = { indicatorOfParameter=73 ; gribTablesVersionNo=131 ;centre=98;} + 'SWHG2' = { indicatorOfParameter=74 ; gribTablesVersionNo=131 ;centre=98;} + 'SWHG4' = { indicatorOfParameter=75 ; gribTablesVersionNo=131 ;centre=98;} + 'SWHG6' = { indicatorOfParameter=76 ; gribTablesVersionNo=131 ;centre=98;} + 'SWHG8' = { indicatorOfParameter=77 ; gribTablesVersionNo=131 ;centre=98;} + 'MWPG8' = { indicatorOfParameter=78 ; gribTablesVersionNo=131 ;centre=98;} + 'MWPG10' = { indicatorOfParameter=79 ; gribTablesVersionNo=131 ;centre=98;} + 'MWPG12' = { indicatorOfParameter=80 ; gribTablesVersionNo=131 ;centre=98;} + 'MWPG15' = { indicatorOfParameter=81 ; gribTablesVersionNo=131 ;centre=98;} + 'TAP' = { indicatorOfParameter=130 ; gribTablesVersionNo=131 ;centre=98;} + 'SFP' = { indicatorOfParameter=144 ; gribTablesVersionNo=131 ;centre=98;} + 'TCCP' = { indicatorOfParameter=164 ; gribTablesVersionNo=131 ;centre=98;} + '10SP' = { indicatorOfParameter=165 ; gribTablesVersionNo=131 ;centre=98;} + '2TP' = { indicatorOfParameter=167 ; gribTablesVersionNo=131 ;centre=98;} + 'MX2TP' = { indicatorOfParameter=201 ; gribTablesVersionNo=131 ;centre=98;} + 'MN2TP' = { indicatorOfParameter=202 ; gribTablesVersionNo=131 ;centre=98;} + 'TPP' = { indicatorOfParameter=228 ; gribTablesVersionNo=131 ;centre=98;} + 'SWHP' = { indicatorOfParameter=229 ; gribTablesVersionNo=131 ;centre=98;} + 'MWPP' = { indicatorOfParameter=232 ; gribTablesVersionNo=131 ;centre=98;} + '10GP' = { indicatorOfParameter=49 ; gribTablesVersionNo=132 ;centre=98;} + '10SP' = { indicatorOfParameter=165 ; gribTablesVersionNo=132 ;centre=98;} + '2TP' = { indicatorOfParameter=167 ; gribTablesVersionNo=132 ;centre=98;} + 'TTP' = { indicatorOfParameter=228 ; gribTablesVersionNo=132 ;centre=98;} + 'WMB' = { indicatorOfParameter=219 ; gribTablesVersionNo=140 ;centre=98;} + 'MP1' = { indicatorOfParameter=220 ; gribTablesVersionNo=140 ;centre=98;} + 'MP2' = { indicatorOfParameter=221 ; gribTablesVersionNo=140 ;centre=98;} + 'WDW' = { indicatorOfParameter=222 ; gribTablesVersionNo=140 ;centre=98;} + 'P1WW' = { indicatorOfParameter=223 ; gribTablesVersionNo=140 ;centre=98;} + 'P2WW' = { indicatorOfParameter=224 ; gribTablesVersionNo=140 ;centre=98;} + 'DWWW' = { indicatorOfParameter=225 ; gribTablesVersionNo=140 ;centre=98;} + 'P1PS' = { indicatorOfParameter=226 ; gribTablesVersionNo=140 ;centre=98;} + 'P2PS' = { indicatorOfParameter=227 ; gribTablesVersionNo=140 ;centre=98;} + 'DWPS' = { indicatorOfParameter=228 ; gribTablesVersionNo=140 ;centre=98;} + 'SWH' = { indicatorOfParameter=229 ; gribTablesVersionNo=140 ;centre=98;} + 'MWD' = { indicatorOfParameter=230 ; gribTablesVersionNo=140 ;centre=98;} + 'PP1D' = { indicatorOfParameter=231 ; gribTablesVersionNo=140 ;centre=98;} + 'MWP' = { indicatorOfParameter=232 ; gribTablesVersionNo=140 ;centre=98;} + 'CDWW' = { indicatorOfParameter=233 ; gribTablesVersionNo=140 ;centre=98;} + 'SHWW' = { indicatorOfParameter=234 ; gribTablesVersionNo=140 ;centre=98;} + 'MDWW' = { indicatorOfParameter=235 ; gribTablesVersionNo=140 ;centre=98;} + 'MPWW' = { indicatorOfParameter=236 ; gribTablesVersionNo=140 ;centre=98;} + 'SHTS' = { indicatorOfParameter=237 ; gribTablesVersionNo=140 ;centre=98;} + 'MDTS' = { indicatorOfParameter=238 ; gribTablesVersionNo=140 ;centre=98;} + 'MPTS' = { indicatorOfParameter=239 ; gribTablesVersionNo=140 ;centre=98;} + 'SDHS' = { indicatorOfParameter=240 ; gribTablesVersionNo=140 ;centre=98;} + 'MU10' = { indicatorOfParameter=241 ; gribTablesVersionNo=140 ;centre=98;} + 'MDWI' = { indicatorOfParameter=242 ; gribTablesVersionNo=140 ;centre=98;} + 'SDU' = { indicatorOfParameter=243 ; gribTablesVersionNo=140 ;centre=98;} + 'MSQS' = { indicatorOfParameter=244 ; gribTablesVersionNo=140 ;centre=98;} + 'WIND' = { indicatorOfParameter=245 ; gribTablesVersionNo=140 ;centre=98;} + 'AWH' = { indicatorOfParameter=246 ; gribTablesVersionNo=140 ;centre=98;} + 'ACWH' = { indicatorOfParameter=247 ; gribTablesVersionNo=140 ;centre=98;} + 'ARRC' = { indicatorOfParameter=248 ; gribTablesVersionNo=140 ;centre=98;} + 'DWI' = { indicatorOfParameter=249 ; gribTablesVersionNo=140 ;centre=98;} + '2DSP' = { indicatorOfParameter=250 ; gribTablesVersionNo=140 ;centre=98;} + '2DFD' = { indicatorOfParameter=251 ; gribTablesVersionNo=140 ;centre=98;} + 'WSK' = { indicatorOfParameter=252 ; gribTablesVersionNo=140 ;centre=98;} + 'BFI' = { indicatorOfParameter=253 ; gribTablesVersionNo=140 ;centre=98;} + 'WSP' = { indicatorOfParameter=254 ; gribTablesVersionNo=140 ;centre=98;} + 'OCPT' = { indicatorOfParameter=129 ; gribTablesVersionNo=151 ;centre=98;} + 'S' = { indicatorOfParameter=130 ; gribTablesVersionNo=151 ;centre=98;} + 'U' = { indicatorOfParameter=131 ; gribTablesVersionNo=151 ;centre=98;} + 'V' = { indicatorOfParameter=132 ; gribTablesVersionNo=151 ;centre=98;} + 'WV' = { indicatorOfParameter=133 ; gribTablesVersionNo=151 ;centre=98;} + 'MST' = { indicatorOfParameter=134 ; gribTablesVersionNo=151 ;centre=98;} + 'VVS' = { indicatorOfParameter=135 ; gribTablesVersionNo=151 ;centre=98;} + 'VDF' = { indicatorOfParameter=136 ; gribTablesVersionNo=151 ;centre=98;} + 'DEP' = { indicatorOfParameter=137 ; gribTablesVersionNo=151 ;centre=98;} + 'STH' = { indicatorOfParameter=138 ; gribTablesVersionNo=151 ;centre=98;} + 'RN' = { indicatorOfParameter=139 ; gribTablesVersionNo=151 ;centre=98;} + 'UV' = { indicatorOfParameter=140 ; gribTablesVersionNo=151 ;centre=98;} + 'UT' = { indicatorOfParameter=141 ; gribTablesVersionNo=151 ;centre=98;} + 'VT' = { indicatorOfParameter=142 ; gribTablesVersionNo=151 ;centre=98;} + 'UU' = { indicatorOfParameter=143 ; gribTablesVersionNo=151 ;centre=98;} + 'VV' = { indicatorOfParameter=144 ; gribTablesVersionNo=151 ;centre=98;} + 'SL' = { indicatorOfParameter=145 ; gribTablesVersionNo=151 ;centre=98;} + 'SL_1' = { indicatorOfParameter=146 ; gribTablesVersionNo=151 ;centre=98;} + 'BSF' = { indicatorOfParameter=147 ; gribTablesVersionNo=151 ;centre=98;} + 'MLD' = { indicatorOfParameter=148 ; gribTablesVersionNo=151 ;centre=98;} + 'BTP' = { indicatorOfParameter=149 ; gribTablesVersionNo=151 ;centre=98;} + 'SH' = { indicatorOfParameter=150 ; gribTablesVersionNo=151 ;centre=98;} + 'CRL' = { indicatorOfParameter=151 ; gribTablesVersionNo=151 ;centre=98;} + 'TAX' = { indicatorOfParameter=153 ; gribTablesVersionNo=151 ;centre=98;} + 'TAY' = { indicatorOfParameter=154 ; gribTablesVersionNo=151 ;centre=98;} + 'TKI' = { indicatorOfParameter=155 ; gribTablesVersionNo=151 ;centre=98;} + 'NSF' = { indicatorOfParameter=156 ; gribTablesVersionNo=151 ;centre=98;} + 'ASR' = { indicatorOfParameter=157 ; gribTablesVersionNo=151 ;centre=98;} + 'PME' = { indicatorOfParameter=158 ; gribTablesVersionNo=151 ;centre=98;} + 'SST' = { indicatorOfParameter=159 ; gribTablesVersionNo=151 ;centre=98;} + 'SHF' = { indicatorOfParameter=160 ; gribTablesVersionNo=151 ;centre=98;} + 'DTE' = { indicatorOfParameter=161 ; gribTablesVersionNo=151 ;centre=98;} + 'HFC' = { indicatorOfParameter=162 ; gribTablesVersionNo=151 ;centre=98;} + '20D' = { indicatorOfParameter=163 ; gribTablesVersionNo=151 ;centre=98;} + 'TAV300' = { indicatorOfParameter=164 ; gribTablesVersionNo=151 ;centre=98;} + 'UBA1' = { indicatorOfParameter=165 ; gribTablesVersionNo=151 ;centre=98;} + 'VBA1' = { indicatorOfParameter=166 ; gribTablesVersionNo=151 ;centre=98;} + 'ZTR' = { indicatorOfParameter=167 ; gribTablesVersionNo=151 ;centre=98;} + 'MTR' = { indicatorOfParameter=168 ; gribTablesVersionNo=151 ;centre=98;} + 'ZHT' = { indicatorOfParameter=169 ; gribTablesVersionNo=151 ;centre=98;} + 'MHT' = { indicatorOfParameter=170 ; gribTablesVersionNo=151 ;centre=98;} + 'UMAX' = { indicatorOfParameter=171 ; gribTablesVersionNo=151 ;centre=98;} + 'DUMAX' = { indicatorOfParameter=172 ; gribTablesVersionNo=151 ;centre=98;} + 'SMAX' = { indicatorOfParameter=173 ; gribTablesVersionNo=151 ;centre=98;} + 'DSMAX' = { indicatorOfParameter=174 ; gribTablesVersionNo=151 ;centre=98;} + 'SAV300' = { indicatorOfParameter=175 ; gribTablesVersionNo=151 ;centre=98;} + 'LDP' = { indicatorOfParameter=176 ; gribTablesVersionNo=151 ;centre=98;} + 'LDU' = { indicatorOfParameter=177 ; gribTablesVersionNo=151 ;centre=98;} + 'PTI' = { indicatorOfParameter=178 ; gribTablesVersionNo=151 ;centre=98;} + 'PTAE' = { indicatorOfParameter=179 ; gribTablesVersionNo=151 ;centre=98;} + 'BPT' = { indicatorOfParameter=180 ; gribTablesVersionNo=151 ;centre=98;} + 'APT' = { indicatorOfParameter=181 ; gribTablesVersionNo=151 ;centre=98;} + 'PTBE' = { indicatorOfParameter=182 ; gribTablesVersionNo=151 ;centre=98;} + 'AS' = { indicatorOfParameter=183 ; gribTablesVersionNo=151 ;centre=98;} + 'SALI' = { indicatorOfParameter=184 ; gribTablesVersionNo=151 ;centre=98;} + 'EBT' = { indicatorOfParameter=185 ; gribTablesVersionNo=151 ;centre=98;} + 'EBS' = { indicatorOfParameter=186 ; gribTablesVersionNo=151 ;centre=98;} + 'UVI' = { indicatorOfParameter=187 ; gribTablesVersionNo=151 ;centre=98;} + 'VVI' = { indicatorOfParameter=188 ; gribTablesVersionNo=151 ;centre=98;} + 'SUBI' = { indicatorOfParameter=190 ; gribTablesVersionNo=151 ;centre=98;} + 'SALE' = { indicatorOfParameter=191 ; gribTablesVersionNo=151 ;centre=98;} + 'BSAL' = { indicatorOfParameter=192 ; gribTablesVersionNo=151 ;centre=98;} + 'SALBE' = { indicatorOfParameter=194 ; gribTablesVersionNo=151 ;centre=98;} + 'EBTA' = { indicatorOfParameter=199 ; gribTablesVersionNo=151 ;centre=98;} + 'EBSA' = { indicatorOfParameter=200 ; gribTablesVersionNo=151 ;centre=98;} + 'LTI' = { indicatorOfParameter=201 ; gribTablesVersionNo=151 ;centre=98;} + 'LSI' = { indicatorOfParameter=202 ; gribTablesVersionNo=151 ;centre=98;} + 'BZPGA' = { indicatorOfParameter=203 ; gribTablesVersionNo=151 ;centre=98;} + 'BMPGA' = { indicatorOfParameter=204 ; gribTablesVersionNo=151 ;centre=98;} + 'EBTL' = { indicatorOfParameter=205 ; gribTablesVersionNo=151 ;centre=98;} + 'EBSL' = { indicatorOfParameter=206 ; gribTablesVersionNo=151 ;centre=98;} + 'FGBT' = { indicatorOfParameter=207 ; gribTablesVersionNo=151 ;centre=98;} + 'FGBS' = { indicatorOfParameter=208 ; gribTablesVersionNo=151 ;centre=98;} + 'BPA' = { indicatorOfParameter=209 ; gribTablesVersionNo=151 ;centre=98;} + 'FGBP' = { indicatorOfParameter=210 ; gribTablesVersionNo=151 ;centre=98;} + 'PTA' = { indicatorOfParameter=211 ; gribTablesVersionNo=151 ;centre=98;} + 'PSA' = { indicatorOfParameter=212 ; gribTablesVersionNo=151 ;centre=98;} + 'AT' = { indicatorOfParameter=127 ; gribTablesVersionNo=160 ;centre=98;} + 'BV' = { indicatorOfParameter=128 ; gribTablesVersionNo=160 ;centre=98;} + 'Z' = { indicatorOfParameter=129 ; gribTablesVersionNo=160 ;centre=98;} + 'T' = { indicatorOfParameter=130 ; gribTablesVersionNo=160 ;centre=98;} + 'U' = { indicatorOfParameter=131 ; gribTablesVersionNo=160 ;centre=98;} + 'V' = { indicatorOfParameter=132 ; gribTablesVersionNo=160 ;centre=98;} + 'Q' = { indicatorOfParameter=133 ; gribTablesVersionNo=160 ;centre=98;} + 'SP' = { indicatorOfParameter=134 ; gribTablesVersionNo=160 ;centre=98;} + 'W' = { indicatorOfParameter=135 ; gribTablesVersionNo=160 ;centre=98;} + 'TCW' = { indicatorOfParameter=136 ; gribTablesVersionNo=160 ;centre=98;} + 'PWC' = { indicatorOfParameter=137 ; gribTablesVersionNo=160 ;centre=98;} + 'VO' = { indicatorOfParameter=138 ; gribTablesVersionNo=160 ;centre=98;} + 'STL1' = { indicatorOfParameter=139 ; gribTablesVersionNo=160 ;centre=98;} + 'SWL1' = { indicatorOfParameter=140 ; gribTablesVersionNo=160 ;centre=98;} + 'SD' = { indicatorOfParameter=141 ; gribTablesVersionNo=160 ;centre=98;} + 'LSP' = { indicatorOfParameter=142 ; gribTablesVersionNo=160 ;centre=98;} + 'CP' = { indicatorOfParameter=143 ; gribTablesVersionNo=160 ;centre=98;} + 'SF' = { indicatorOfParameter=144 ; gribTablesVersionNo=160 ;centre=98;} + 'BLD' = { indicatorOfParameter=145 ; gribTablesVersionNo=160 ;centre=98;} + 'SSHF' = { indicatorOfParameter=146 ; gribTablesVersionNo=160 ;centre=98;} + 'SLHF' = { indicatorOfParameter=147 ; gribTablesVersionNo=160 ;centre=98;} + 'MSL' = { indicatorOfParameter=151 ; gribTablesVersionNo=160 ;centre=98;} + 'LNSP' = { indicatorOfParameter=152 ; gribTablesVersionNo=160 ;centre=98;} + 'D' = { indicatorOfParameter=155 ; gribTablesVersionNo=160 ;centre=98;} + 'GH' = { indicatorOfParameter=156 ; gribTablesVersionNo=160 ;centre=98;} + 'R' = { indicatorOfParameter=157 ; gribTablesVersionNo=160 ;centre=98;} + 'TSP' = { indicatorOfParameter=158 ; gribTablesVersionNo=160 ;centre=98;} + 'TCC' = { indicatorOfParameter=164 ; gribTablesVersionNo=160 ;centre=98;} + '10U' = { indicatorOfParameter=165 ; gribTablesVersionNo=160 ;centre=98;} + '10V' = { indicatorOfParameter=166 ; gribTablesVersionNo=160 ;centre=98;} + '2T' = { indicatorOfParameter=167 ; gribTablesVersionNo=160 ;centre=98;} + '2D' = { indicatorOfParameter=168 ; gribTablesVersionNo=160 ;centre=98;} + 'STL2' = { indicatorOfParameter=170 ; gribTablesVersionNo=160 ;centre=98;} + 'SWL2' = { indicatorOfParameter=171 ; gribTablesVersionNo=160 ;centre=98;} + 'LSM' = { indicatorOfParameter=172 ; gribTablesVersionNo=160 ;centre=98;} + 'SR' = { indicatorOfParameter=173 ; gribTablesVersionNo=160 ;centre=98;} + 'AL' = { indicatorOfParameter=174 ; gribTablesVersionNo=160 ;centre=98;} + 'SSR' = { indicatorOfParameter=176 ; gribTablesVersionNo=160 ;centre=98;} + 'STR' = { indicatorOfParameter=177 ; gribTablesVersionNo=160 ;centre=98;} + 'TSR' = { indicatorOfParameter=178 ; gribTablesVersionNo=160 ;centre=98;} + 'TTR' = { indicatorOfParameter=179 ; gribTablesVersionNo=160 ;centre=98;} + 'EWSS' = { indicatorOfParameter=180 ; gribTablesVersionNo=160 ;centre=98;} + 'NSSS' = { indicatorOfParameter=181 ; gribTablesVersionNo=160 ;centre=98;} + 'E' = { indicatorOfParameter=182 ; gribTablesVersionNo=160 ;centre=98;} + 'STL3' = { indicatorOfParameter=183 ; gribTablesVersionNo=160 ;centre=98;} + 'SWL3' = { indicatorOfParameter=184 ; gribTablesVersionNo=160 ;centre=98;} + 'CCC' = { indicatorOfParameter=185 ; gribTablesVersionNo=160 ;centre=98;} + 'LCC' = { indicatorOfParameter=186 ; gribTablesVersionNo=160 ;centre=98;} + 'MCC' = { indicatorOfParameter=187 ; gribTablesVersionNo=160 ;centre=98;} + 'HCC' = { indicatorOfParameter=188 ; gribTablesVersionNo=160 ;centre=98;} + 'EWOV' = { indicatorOfParameter=190 ; gribTablesVersionNo=160 ;centre=98;} + 'NSOV' = { indicatorOfParameter=191 ; gribTablesVersionNo=160 ;centre=98;} + 'NWOV' = { indicatorOfParameter=192 ; gribTablesVersionNo=160 ;centre=98;} + 'NEOV' = { indicatorOfParameter=193 ; gribTablesVersionNo=160 ;centre=98;} + 'LGWS' = { indicatorOfParameter=195 ; gribTablesVersionNo=160 ;centre=98;} + 'MGWS' = { indicatorOfParameter=196 ; gribTablesVersionNo=160 ;centre=98;} + 'GWD' = { indicatorOfParameter=197 ; gribTablesVersionNo=160 ;centre=98;} + 'SRC' = { indicatorOfParameter=198 ; gribTablesVersionNo=160 ;centre=98;} + 'VEG' = { indicatorOfParameter=199 ; gribTablesVersionNo=160 ;centre=98;} + 'VSO' = { indicatorOfParameter=200 ; gribTablesVersionNo=160 ;centre=98;} + 'MX2T' = { indicatorOfParameter=201 ; gribTablesVersionNo=160 ;centre=98;} + 'MN2T' = { indicatorOfParameter=202 ; gribTablesVersionNo=160 ;centre=98;} + 'PAW' = { indicatorOfParameter=204 ; gribTablesVersionNo=160 ;centre=98;} + 'RO' = { indicatorOfParameter=205 ; gribTablesVersionNo=160 ;centre=98;} + 'ZZ' = { indicatorOfParameter=206 ; gribTablesVersionNo=160 ;centre=98;} + 'TZ' = { indicatorOfParameter=207 ; gribTablesVersionNo=160 ;centre=98;} + 'TT' = { indicatorOfParameter=208 ; gribTablesVersionNo=160 ;centre=98;} + 'QZ' = { indicatorOfParameter=209 ; gribTablesVersionNo=160 ;centre=98;} + 'QT' = { indicatorOfParameter=210 ; gribTablesVersionNo=160 ;centre=98;} + 'QQ' = { indicatorOfParameter=211 ; gribTablesVersionNo=160 ;centre=98;} + 'UZ' = { indicatorOfParameter=212 ; gribTablesVersionNo=160 ;centre=98;} + 'UT' = { indicatorOfParameter=213 ; gribTablesVersionNo=160 ;centre=98;} + 'UQ' = { indicatorOfParameter=214 ; gribTablesVersionNo=160 ;centre=98;} + 'UU' = { indicatorOfParameter=215 ; gribTablesVersionNo=160 ;centre=98;} + 'VZ' = { indicatorOfParameter=216 ; gribTablesVersionNo=160 ;centre=98;} + 'VT' = { indicatorOfParameter=217 ; gribTablesVersionNo=160 ;centre=98;} + 'VQ' = { indicatorOfParameter=218 ; gribTablesVersionNo=160 ;centre=98;} + 'VU' = { indicatorOfParameter=219 ; gribTablesVersionNo=160 ;centre=98;} + 'VV' = { indicatorOfParameter=220 ; gribTablesVersionNo=160 ;centre=98;} + 'WZ' = { indicatorOfParameter=221 ; gribTablesVersionNo=160 ;centre=98;} + 'WT' = { indicatorOfParameter=222 ; gribTablesVersionNo=160 ;centre=98;} + 'WQ' = { indicatorOfParameter=223 ; gribTablesVersionNo=160 ;centre=98;} + 'WU' = { indicatorOfParameter=224 ; gribTablesVersionNo=160 ;centre=98;} + 'WV' = { indicatorOfParameter=225 ; gribTablesVersionNo=160 ;centre=98;} + 'WW' = { indicatorOfParameter=226 ; gribTablesVersionNo=160 ;centre=98;} + 'TP' = { indicatorOfParameter=228 ; gribTablesVersionNo=160 ;centre=98;} + 'IEWS' = { indicatorOfParameter=229 ; gribTablesVersionNo=160 ;centre=98;} + 'INSS' = { indicatorOfParameter=230 ; gribTablesVersionNo=160 ;centre=98;} + 'ISHF' = { indicatorOfParameter=231 ; gribTablesVersionNo=160 ;centre=98;} + 'IE' = { indicatorOfParameter=232 ; gribTablesVersionNo=160 ;centre=98;} + 'ASQ' = { indicatorOfParameter=233 ; gribTablesVersionNo=160 ;centre=98;} + 'LSRH' = { indicatorOfParameter=234 ; gribTablesVersionNo=160 ;centre=98;} + 'SKT' = { indicatorOfParameter=235 ; gribTablesVersionNo=160 ;centre=98;} + 'STL4' = { indicatorOfParameter=236 ; gribTablesVersionNo=160 ;centre=98;} + 'SWL4' = { indicatorOfParameter=237 ; gribTablesVersionNo=160 ;centre=98;} + 'TSN' = { indicatorOfParameter=238 ; gribTablesVersionNo=160 ;centre=98;} + 'CSF' = { indicatorOfParameter=239 ; gribTablesVersionNo=160 ;centre=98;} + 'LSF' = { indicatorOfParameter=240 ; gribTablesVersionNo=160 ;centre=98;} + 'CLWCER' = { indicatorOfParameter=241 ; gribTablesVersionNo=160 ;centre=98;} + 'CC' = { indicatorOfParameter=242 ; gribTablesVersionNo=160 ;centre=98;} + 'FAL' = { indicatorOfParameter=243 ; gribTablesVersionNo=160 ;centre=98;} + 'FSR' = { indicatorOfParameter=244 ; gribTablesVersionNo=160 ;centre=98;} + 'FLSR' = { indicatorOfParameter=245 ; gribTablesVersionNo=160 ;centre=98;} + '10WS' = { indicatorOfParameter=246 ; gribTablesVersionNo=160 ;centre=98;} + 'MOFL' = { indicatorOfParameter=247 ; gribTablesVersionNo=160 ;centre=98;} + 'HSD' = { indicatorOfParameter=254 ; gribTablesVersionNo=160 ;centre=98;} + 'Z' = { indicatorOfParameter=129 ; gribTablesVersionNo=170 ;centre=98;} + 'T' = { indicatorOfParameter=130 ; gribTablesVersionNo=170 ;centre=98;} + 'U' = { indicatorOfParameter=131 ; gribTablesVersionNo=170 ;centre=98;} + 'V' = { indicatorOfParameter=132 ; gribTablesVersionNo=170 ;centre=98;} + 'VO' = { indicatorOfParameter=138 ; gribTablesVersionNo=170 ;centre=98;} + 'SWL1' = { indicatorOfParameter=140 ; gribTablesVersionNo=170 ;centre=98;} + 'SD' = { indicatorOfParameter=141 ; gribTablesVersionNo=170 ;centre=98;} + 'TSW' = { indicatorOfParameter=149 ; gribTablesVersionNo=170 ;centre=98;} + 'MSL' = { indicatorOfParameter=151 ; gribTablesVersionNo=170 ;centre=98;} + 'D' = { indicatorOfParameter=155 ; gribTablesVersionNo=170 ;centre=98;} + 'SWL2' = { indicatorOfParameter=171 ; gribTablesVersionNo=170 ;centre=98;} + 'TTR' = { indicatorOfParameter=179 ; gribTablesVersionNo=170 ;centre=98;} + 'SWL3' = { indicatorOfParameter=184 ; gribTablesVersionNo=170 ;centre=98;} + 'MX2T' = { indicatorOfParameter=201 ; gribTablesVersionNo=170 ;centre=98;} + 'MN2T' = { indicatorOfParameter=202 ; gribTablesVersionNo=170 ;centre=98;} + 'TP' = { indicatorOfParameter=228 ; gribTablesVersionNo=170 ;centre=98;} + 'SRO' = { indicatorOfParameter=8 ; gribTablesVersionNo=174 ;centre=98;} + 'SSRO' = { indicatorOfParameter=9 ; gribTablesVersionNo=174 ;centre=98;} + 'Z' = { indicatorOfParameter=129 ; gribTablesVersionNo=180 ;centre=98;} + 'T' = { indicatorOfParameter=130 ; gribTablesVersionNo=180 ;centre=98;} + 'U' = { indicatorOfParameter=131 ; gribTablesVersionNo=180 ;centre=98;} + 'V' = { indicatorOfParameter=132 ; gribTablesVersionNo=180 ;centre=98;} + 'Q' = { indicatorOfParameter=133 ; gribTablesVersionNo=180 ;centre=98;} + 'SP' = { indicatorOfParameter=134 ; gribTablesVersionNo=180 ;centre=98;} + 'TCWV' = { indicatorOfParameter=137 ; gribTablesVersionNo=180 ;centre=98;} + 'VO' = { indicatorOfParameter=138 ; gribTablesVersionNo=180 ;centre=98;} + 'SD' = { indicatorOfParameter=141 ; gribTablesVersionNo=180 ;centre=98;} + 'LSP' = { indicatorOfParameter=142 ; gribTablesVersionNo=180 ;centre=98;} + 'CP' = { indicatorOfParameter=143 ; gribTablesVersionNo=180 ;centre=98;} + 'SF' = { indicatorOfParameter=144 ; gribTablesVersionNo=180 ;centre=98;} + 'SSHF' = { indicatorOfParameter=146 ; gribTablesVersionNo=180 ;centre=98;} + 'SLHF' = { indicatorOfParameter=147 ; gribTablesVersionNo=180 ;centre=98;} + 'TSW' = { indicatorOfParameter=149 ; gribTablesVersionNo=180 ;centre=98;} + 'MSL' = { indicatorOfParameter=151 ; gribTablesVersionNo=180 ;centre=98;} + 'D' = { indicatorOfParameter=155 ; gribTablesVersionNo=180 ;centre=98;} + 'TCC' = { indicatorOfParameter=164 ; gribTablesVersionNo=180 ;centre=98;} + '10U' = { indicatorOfParameter=165 ; gribTablesVersionNo=180 ;centre=98;} + '10V' = { indicatorOfParameter=166 ; gribTablesVersionNo=180 ;centre=98;} + '2T' = { indicatorOfParameter=167 ; gribTablesVersionNo=180 ;centre=98;} + '2D' = { indicatorOfParameter=168 ; gribTablesVersionNo=180 ;centre=98;} + 'LSM' = { indicatorOfParameter=172 ; gribTablesVersionNo=180 ;centre=98;} + 'SSR' = { indicatorOfParameter=176 ; gribTablesVersionNo=180 ;centre=98;} + 'STR' = { indicatorOfParameter=177 ; gribTablesVersionNo=180 ;centre=98;} + 'TSR' = { indicatorOfParameter=178 ; gribTablesVersionNo=180 ;centre=98;} + 'TTR' = { indicatorOfParameter=179 ; gribTablesVersionNo=180 ;centre=98;} + 'EWSS' = { indicatorOfParameter=180 ; gribTablesVersionNo=180 ;centre=98;} + 'NSSS' = { indicatorOfParameter=181 ; gribTablesVersionNo=180 ;centre=98;} + 'E' = { indicatorOfParameter=182 ; gribTablesVersionNo=180 ;centre=98;} + 'RO' = { indicatorOfParameter=205 ; gribTablesVersionNo=180 ;centre=98;} + 'Z' = { indicatorOfParameter=129 ; gribTablesVersionNo=190 ;centre=98;} + 'T' = { indicatorOfParameter=130 ; gribTablesVersionNo=190 ;centre=98;} + 'U' = { indicatorOfParameter=131 ; gribTablesVersionNo=190 ;centre=98;} + 'V' = { indicatorOfParameter=132 ; gribTablesVersionNo=190 ;centre=98;} + 'Q' = { indicatorOfParameter=133 ; gribTablesVersionNo=190 ;centre=98;} + 'STL1' = { indicatorOfParameter=139 ; gribTablesVersionNo=190 ;centre=98;} + 'SD' = { indicatorOfParameter=141 ; gribTablesVersionNo=190 ;centre=98;} + 'SSHF' = { indicatorOfParameter=146 ; gribTablesVersionNo=190 ;centre=98;} + 'SLHF' = { indicatorOfParameter=147 ; gribTablesVersionNo=190 ;centre=98;} + 'MSL' = { indicatorOfParameter=151 ; gribTablesVersionNo=190 ;centre=98;} + 'TCC' = { indicatorOfParameter=164 ; gribTablesVersionNo=190 ;centre=98;} + '10U' = { indicatorOfParameter=165 ; gribTablesVersionNo=190 ;centre=98;} + '10V' = { indicatorOfParameter=166 ; gribTablesVersionNo=190 ;centre=98;} + '2T' = { indicatorOfParameter=167 ; gribTablesVersionNo=190 ;centre=98;} + '2D' = { indicatorOfParameter=168 ; gribTablesVersionNo=190 ;centre=98;} + 'SSRD' = { indicatorOfParameter=169 ; gribTablesVersionNo=190 ;centre=98;} + 'CAP' = { indicatorOfParameter=170 ; gribTablesVersionNo=190 ;centre=98;} + 'WILT' = { indicatorOfParameter=171 ; gribTablesVersionNo=190 ;centre=98;} + 'LSM' = { indicatorOfParameter=172 ; gribTablesVersionNo=190 ;centre=98;} + 'SR' = { indicatorOfParameter=173 ; gribTablesVersionNo=190 ;centre=98;} + 'AL' = { indicatorOfParameter=174 ; gribTablesVersionNo=190 ;centre=98;} + 'STRD' = { indicatorOfParameter=175 ; gribTablesVersionNo=190 ;centre=98;} + 'SSR' = { indicatorOfParameter=176 ; gribTablesVersionNo=190 ;centre=98;} + 'STR' = { indicatorOfParameter=177 ; gribTablesVersionNo=190 ;centre=98;} + 'TSR' = { indicatorOfParameter=178 ; gribTablesVersionNo=190 ;centre=98;} + 'TTR' = { indicatorOfParameter=179 ; gribTablesVersionNo=190 ;centre=98;} + 'E' = { indicatorOfParameter=182 ; gribTablesVersionNo=190 ;centre=98;} + 'MX2T' = { indicatorOfParameter=201 ; gribTablesVersionNo=190 ;centre=98;} + 'MN2T' = { indicatorOfParameter=202 ; gribTablesVersionNo=190 ;centre=98;} + 'TP' = { indicatorOfParameter=228 ; gribTablesVersionNo=190 ;centre=98;} + 'TSM' = { indicatorOfParameter=229 ; gribTablesVersionNo=190 ;centre=98;} + 'STRF' = { indicatorOfParameter=1 ; gribTablesVersionNo=200 ;centre=98;} + 'VPOT' = { indicatorOfParameter=2 ; gribTablesVersionNo=200 ;centre=98;} + 'PT' = { indicatorOfParameter=3 ; gribTablesVersionNo=200 ;centre=98;} + 'EQPT' = { indicatorOfParameter=4 ; gribTablesVersionNo=200 ;centre=98;} + 'SEPT' = { indicatorOfParameter=5 ; gribTablesVersionNo=200 ;centre=98;} + 'UDVW' = { indicatorOfParameter=11 ; gribTablesVersionNo=200 ;centre=98;} + 'VDVW' = { indicatorOfParameter=12 ; gribTablesVersionNo=200 ;centre=98;} + 'URTW' = { indicatorOfParameter=13 ; gribTablesVersionNo=200 ;centre=98;} + 'VRTW' = { indicatorOfParameter=14 ; gribTablesVersionNo=200 ;centre=98;} + 'UCTP' = { indicatorOfParameter=21 ; gribTablesVersionNo=200 ;centre=98;} + 'UCLN' = { indicatorOfParameter=22 ; gribTablesVersionNo=200 ;centre=98;} + 'UCDV' = { indicatorOfParameter=23 ; gribTablesVersionNo=200 ;centre=98;} + 'CL' = { indicatorOfParameter=26 ; gribTablesVersionNo=200 ;centre=98;} + 'CVL' = { indicatorOfParameter=27 ; gribTablesVersionNo=200 ;centre=98;} + 'CVH' = { indicatorOfParameter=28 ; gribTablesVersionNo=200 ;centre=98;} + 'TVL' = { indicatorOfParameter=29 ; gribTablesVersionNo=200 ;centre=98;} + 'TVH' = { indicatorOfParameter=30 ; gribTablesVersionNo=200 ;centre=98;} + 'CI' = { indicatorOfParameter=31 ; gribTablesVersionNo=200 ;centre=98;} + 'ASN' = { indicatorOfParameter=32 ; gribTablesVersionNo=200 ;centre=98;} + 'RSN' = { indicatorOfParameter=33 ; gribTablesVersionNo=200 ;centre=98;} + 'SSTK' = { indicatorOfParameter=34 ; gribTablesVersionNo=200 ;centre=98;} + 'ISTL1' = { indicatorOfParameter=35 ; gribTablesVersionNo=200 ;centre=98;} + 'ISTL2' = { indicatorOfParameter=36 ; gribTablesVersionNo=200 ;centre=98;} + 'ISTL3' = { indicatorOfParameter=37 ; gribTablesVersionNo=200 ;centre=98;} + 'ISTL4' = { indicatorOfParameter=38 ; gribTablesVersionNo=200 ;centre=98;} + 'SWVL1' = { indicatorOfParameter=39 ; gribTablesVersionNo=200 ;centre=98;} + 'SWVL2' = { indicatorOfParameter=40 ; gribTablesVersionNo=200 ;centre=98;} + 'SWVL3' = { indicatorOfParameter=41 ; gribTablesVersionNo=200 ;centre=98;} + 'SWVL4' = { indicatorOfParameter=42 ; gribTablesVersionNo=200 ;centre=98;} + 'SLT' = { indicatorOfParameter=43 ; gribTablesVersionNo=200 ;centre=98;} + 'ES' = { indicatorOfParameter=44 ; gribTablesVersionNo=200 ;centre=98;} + 'SMLT' = { indicatorOfParameter=45 ; gribTablesVersionNo=200 ;centre=98;} + 'SDUR' = { indicatorOfParameter=46 ; gribTablesVersionNo=200 ;centre=98;} + 'DSRP' = { indicatorOfParameter=47 ; gribTablesVersionNo=200 ;centre=98;} + 'MAGSS' = { indicatorOfParameter=48 ; gribTablesVersionNo=200 ;centre=98;} + '10FG' = { indicatorOfParameter=49 ; gribTablesVersionNo=200 ;centre=98;} + 'LSPF' = { indicatorOfParameter=50 ; gribTablesVersionNo=200 ;centre=98;} + 'MX2T24' = { indicatorOfParameter=51 ; gribTablesVersionNo=200 ;centre=98;} + 'MN2T24' = { indicatorOfParameter=52 ; gribTablesVersionNo=200 ;centre=98;} + 'MONT' = { indicatorOfParameter=53 ; gribTablesVersionNo=200 ;centre=98;} + 'PRES' = { indicatorOfParameter=54 ; gribTablesVersionNo=200 ;centre=98;} + 'MEAN2T24' = { indicatorOfParameter=55 ; gribTablesVersionNo=200 ;centre=98;} + 'MN2D24' = { indicatorOfParameter=56 ; gribTablesVersionNo=200 ;centre=98;} + 'UVB' = { indicatorOfParameter=57 ; gribTablesVersionNo=200 ;centre=98;} + 'PAR' = { indicatorOfParameter=58 ; gribTablesVersionNo=200 ;centre=98;} + 'CAPE' = { indicatorOfParameter=59 ; gribTablesVersionNo=200 ;centre=98;} + 'PV' = { indicatorOfParameter=60 ; gribTablesVersionNo=200 ;centre=98;} + 'TPO' = { indicatorOfParameter=61 ; gribTablesVersionNo=200 ;centre=98;} + 'OBCT' = { indicatorOfParameter=62 ; gribTablesVersionNo=200 ;centre=98;} + 'MX2T6' = { indicatorOfParameter=121 ; gribTablesVersionNo=200 ;centre=98;} + 'MN2T6' = { indicatorOfParameter=122 ; gribTablesVersionNo=200 ;centre=98;} + '10FG6' = { indicatorOfParameter=123 ; gribTablesVersionNo=200 ;centre=98;} + 'AT' = { indicatorOfParameter=127 ; gribTablesVersionNo=200 ;centre=98;} + 'BV' = { indicatorOfParameter=128 ; gribTablesVersionNo=200 ;centre=98;} + 'Z' = { indicatorOfParameter=129 ; gribTablesVersionNo=200 ;centre=98;} + 'T' = { indicatorOfParameter=130 ; gribTablesVersionNo=200 ;centre=98;} + 'U' = { indicatorOfParameter=131 ; gribTablesVersionNo=200 ;centre=98;} + 'V' = { indicatorOfParameter=132 ; gribTablesVersionNo=200 ;centre=98;} + 'Q' = { indicatorOfParameter=133 ; gribTablesVersionNo=200 ;centre=98;} + 'SP' = { indicatorOfParameter=134 ; gribTablesVersionNo=200 ;centre=98;} + 'W' = { indicatorOfParameter=135 ; gribTablesVersionNo=200 ;centre=98;} + 'TCW' = { indicatorOfParameter=136 ; gribTablesVersionNo=200 ;centre=98;} + 'TCWV' = { indicatorOfParameter=137 ; gribTablesVersionNo=200 ;centre=98;} + 'VO' = { indicatorOfParameter=138 ; gribTablesVersionNo=200 ;centre=98;} + 'STL1' = { indicatorOfParameter=139 ; gribTablesVersionNo=200 ;centre=98;} + 'SWL1' = { indicatorOfParameter=140 ; gribTablesVersionNo=200 ;centre=98;} + 'SD' = { indicatorOfParameter=141 ; gribTablesVersionNo=200 ;centre=98;} + 'LSP' = { indicatorOfParameter=142 ; gribTablesVersionNo=200 ;centre=98;} + 'CP' = { indicatorOfParameter=143 ; gribTablesVersionNo=200 ;centre=98;} + 'SF' = { indicatorOfParameter=144 ; gribTablesVersionNo=200 ;centre=98;} + 'BLD' = { indicatorOfParameter=145 ; gribTablesVersionNo=200 ;centre=98;} + 'SSHF' = { indicatorOfParameter=146 ; gribTablesVersionNo=200 ;centre=98;} + 'SLHF' = { indicatorOfParameter=147 ; gribTablesVersionNo=200 ;centre=98;} + 'CHNK' = { indicatorOfParameter=148 ; gribTablesVersionNo=200 ;centre=98;} + 'SNR' = { indicatorOfParameter=149 ; gribTablesVersionNo=200 ;centre=98;} + 'TNR' = { indicatorOfParameter=150 ; gribTablesVersionNo=200 ;centre=98;} + 'MSL' = { indicatorOfParameter=151 ; gribTablesVersionNo=200 ;centre=98;} + 'LNSP' = { indicatorOfParameter=152 ; gribTablesVersionNo=200 ;centre=98;} + 'SWHR' = { indicatorOfParameter=153 ; gribTablesVersionNo=200 ;centre=98;} + 'LWHR' = { indicatorOfParameter=154 ; gribTablesVersionNo=200 ;centre=98;} + 'D' = { indicatorOfParameter=155 ; gribTablesVersionNo=200 ;centre=98;} + 'GH' = { indicatorOfParameter=156 ; gribTablesVersionNo=200 ;centre=98;} + 'R' = { indicatorOfParameter=157 ; gribTablesVersionNo=200 ;centre=98;} + 'TSP' = { indicatorOfParameter=158 ; gribTablesVersionNo=200 ;centre=98;} + 'BLH' = { indicatorOfParameter=159 ; gribTablesVersionNo=200 ;centre=98;} + 'SDOR' = { indicatorOfParameter=160 ; gribTablesVersionNo=200 ;centre=98;} + 'ISOR' = { indicatorOfParameter=161 ; gribTablesVersionNo=200 ;centre=98;} + 'ANOR' = { indicatorOfParameter=162 ; gribTablesVersionNo=200 ;centre=98;} + 'SLOR' = { indicatorOfParameter=163 ; gribTablesVersionNo=200 ;centre=98;} + 'TCC' = { indicatorOfParameter=164 ; gribTablesVersionNo=200 ;centre=98;} + '10U' = { indicatorOfParameter=165 ; gribTablesVersionNo=200 ;centre=98;} + '10V' = { indicatorOfParameter=166 ; gribTablesVersionNo=200 ;centre=98;} + '2T' = { indicatorOfParameter=167 ; gribTablesVersionNo=200 ;centre=98;} + '2D' = { indicatorOfParameter=168 ; gribTablesVersionNo=200 ;centre=98;} + 'SSRD' = { indicatorOfParameter=169 ; gribTablesVersionNo=200 ;centre=98;} + 'STL2' = { indicatorOfParameter=170 ; gribTablesVersionNo=200 ;centre=98;} + 'SWL2' = { indicatorOfParameter=171 ; gribTablesVersionNo=200 ;centre=98;} + 'LSM' = { indicatorOfParameter=172 ; gribTablesVersionNo=200 ;centre=98;} + 'SR' = { indicatorOfParameter=173 ; gribTablesVersionNo=200 ;centre=98;} + 'AL' = { indicatorOfParameter=174 ; gribTablesVersionNo=200 ;centre=98;} + 'STRD' = { indicatorOfParameter=175 ; gribTablesVersionNo=200 ;centre=98;} + 'SSR' = { indicatorOfParameter=176 ; gribTablesVersionNo=200 ;centre=98;} + 'STR' = { indicatorOfParameter=177 ; gribTablesVersionNo=200 ;centre=98;} + 'TSR' = { indicatorOfParameter=178 ; gribTablesVersionNo=200 ;centre=98;} + 'TTR' = { indicatorOfParameter=179 ; gribTablesVersionNo=200 ;centre=98;} + 'EWSS' = { indicatorOfParameter=180 ; gribTablesVersionNo=200 ;centre=98;} + 'NSSS' = { indicatorOfParameter=181 ; gribTablesVersionNo=200 ;centre=98;} + 'E' = { indicatorOfParameter=182 ; gribTablesVersionNo=200 ;centre=98;} + 'STL3' = { indicatorOfParameter=183 ; gribTablesVersionNo=200 ;centre=98;} + 'SWL3' = { indicatorOfParameter=184 ; gribTablesVersionNo=200 ;centre=98;} + 'CCC' = { indicatorOfParameter=185 ; gribTablesVersionNo=200 ;centre=98;} + 'LCC' = { indicatorOfParameter=186 ; gribTablesVersionNo=200 ;centre=98;} + 'MCC' = { indicatorOfParameter=187 ; gribTablesVersionNo=200 ;centre=98;} + 'HCC' = { indicatorOfParameter=188 ; gribTablesVersionNo=200 ;centre=98;} + 'SUND' = { indicatorOfParameter=189 ; gribTablesVersionNo=200 ;centre=98;} + 'EWOV' = { indicatorOfParameter=190 ; gribTablesVersionNo=200 ;centre=98;} + 'NSOV' = { indicatorOfParameter=191 ; gribTablesVersionNo=200 ;centre=98;} + 'NWOV' = { indicatorOfParameter=192 ; gribTablesVersionNo=200 ;centre=98;} + 'NEOV' = { indicatorOfParameter=193 ; gribTablesVersionNo=200 ;centre=98;} + 'BTMP' = { indicatorOfParameter=194 ; gribTablesVersionNo=200 ;centre=98;} + 'LGWS' = { indicatorOfParameter=195 ; gribTablesVersionNo=200 ;centre=98;} + 'MGWS' = { indicatorOfParameter=196 ; gribTablesVersionNo=200 ;centre=98;} + 'GWD' = { indicatorOfParameter=197 ; gribTablesVersionNo=200 ;centre=98;} + 'SRC' = { indicatorOfParameter=198 ; gribTablesVersionNo=200 ;centre=98;} + 'VEG' = { indicatorOfParameter=199 ; gribTablesVersionNo=200 ;centre=98;} + 'VSO' = { indicatorOfParameter=200 ; gribTablesVersionNo=200 ;centre=98;} + 'MX2T' = { indicatorOfParameter=201 ; gribTablesVersionNo=200 ;centre=98;} + 'MN2T' = { indicatorOfParameter=202 ; gribTablesVersionNo=200 ;centre=98;} + 'O3' = { indicatorOfParameter=203 ; gribTablesVersionNo=200 ;centre=98;} + 'PAW' = { indicatorOfParameter=204 ; gribTablesVersionNo=200 ;centre=98;} + 'RO' = { indicatorOfParameter=205 ; gribTablesVersionNo=200 ;centre=98;} + 'TCO3' = { indicatorOfParameter=206 ; gribTablesVersionNo=200 ;centre=98;} + '10SI' = { indicatorOfParameter=207 ; gribTablesVersionNo=200 ;centre=98;} + 'TSRC' = { indicatorOfParameter=208 ; gribTablesVersionNo=200 ;centre=98;} + 'TTRC' = { indicatorOfParameter=209 ; gribTablesVersionNo=200 ;centre=98;} + 'SSRC' = { indicatorOfParameter=210 ; gribTablesVersionNo=200 ;centre=98;} + 'STRC' = { indicatorOfParameter=211 ; gribTablesVersionNo=200 ;centre=98;} + 'TISR' = { indicatorOfParameter=212 ; gribTablesVersionNo=200 ;centre=98;} + 'DHR' = { indicatorOfParameter=214 ; gribTablesVersionNo=200 ;centre=98;} + 'DHVD' = { indicatorOfParameter=215 ; gribTablesVersionNo=200 ;centre=98;} + 'DHCC' = { indicatorOfParameter=216 ; gribTablesVersionNo=200 ;centre=98;} + 'DHLC' = { indicatorOfParameter=217 ; gribTablesVersionNo=200 ;centre=98;} + 'VDZW' = { indicatorOfParameter=218 ; gribTablesVersionNo=200 ;centre=98;} + 'VDMW' = { indicatorOfParameter=219 ; gribTablesVersionNo=200 ;centre=98;} + 'EWGD' = { indicatorOfParameter=220 ; gribTablesVersionNo=200 ;centre=98;} + 'NSGD' = { indicatorOfParameter=221 ; gribTablesVersionNo=200 ;centre=98;} + 'CTZW' = { indicatorOfParameter=222 ; gribTablesVersionNo=200 ;centre=98;} + 'CTMW' = { indicatorOfParameter=223 ; gribTablesVersionNo=200 ;centre=98;} + 'VDH' = { indicatorOfParameter=224 ; gribTablesVersionNo=200 ;centre=98;} + 'HTCC' = { indicatorOfParameter=225 ; gribTablesVersionNo=200 ;centre=98;} + 'HTLC' = { indicatorOfParameter=226 ; gribTablesVersionNo=200 ;centre=98;} + 'CRNH' = { indicatorOfParameter=227 ; gribTablesVersionNo=200 ;centre=98;} + 'TP' = { indicatorOfParameter=228 ; gribTablesVersionNo=200 ;centre=98;} + 'IEWS' = { indicatorOfParameter=229 ; gribTablesVersionNo=200 ;centre=98;} + 'INSS' = { indicatorOfParameter=230 ; gribTablesVersionNo=200 ;centre=98;} + 'ISHF' = { indicatorOfParameter=231 ; gribTablesVersionNo=200 ;centre=98;} + 'IE' = { indicatorOfParameter=232 ; gribTablesVersionNo=200 ;centre=98;} + 'ASQ' = { indicatorOfParameter=233 ; gribTablesVersionNo=200 ;centre=98;} + 'LSRH' = { indicatorOfParameter=234 ; gribTablesVersionNo=200 ;centre=98;} + 'SKT' = { indicatorOfParameter=235 ; gribTablesVersionNo=200 ;centre=98;} + 'STL4' = { indicatorOfParameter=236 ; gribTablesVersionNo=200 ;centre=98;} + 'SWL4' = { indicatorOfParameter=237 ; gribTablesVersionNo=200 ;centre=98;} + 'TSN' = { indicatorOfParameter=238 ; gribTablesVersionNo=200 ;centre=98;} + 'CSF' = { indicatorOfParameter=239 ; gribTablesVersionNo=200 ;centre=98;} + 'LSF' = { indicatorOfParameter=240 ; gribTablesVersionNo=200 ;centre=98;} + 'ACF' = { indicatorOfParameter=241 ; gribTablesVersionNo=200 ;centre=98;} + 'ALW' = { indicatorOfParameter=242 ; gribTablesVersionNo=200 ;centre=98;} + 'FAL' = { indicatorOfParameter=243 ; gribTablesVersionNo=200 ;centre=98;} + 'FSR' = { indicatorOfParameter=244 ; gribTablesVersionNo=200 ;centre=98;} + 'FLSR' = { indicatorOfParameter=245 ; gribTablesVersionNo=200 ;centre=98;} + 'CLWC' = { indicatorOfParameter=246 ; gribTablesVersionNo=200 ;centre=98;} + 'CIWC' = { indicatorOfParameter=247 ; gribTablesVersionNo=200 ;centre=98;} + 'CC' = { indicatorOfParameter=248 ; gribTablesVersionNo=200 ;centre=98;} + 'AIW' = { indicatorOfParameter=249 ; gribTablesVersionNo=200 ;centre=98;} + 'ICE' = { indicatorOfParameter=250 ; gribTablesVersionNo=200 ;centre=98;} + 'ATTE' = { indicatorOfParameter=251 ; gribTablesVersionNo=200 ;centre=98;} + 'ATHE' = { indicatorOfParameter=252 ; gribTablesVersionNo=200 ;centre=98;} + 'ATZE' = { indicatorOfParameter=253 ; gribTablesVersionNo=200 ;centre=98;} + 'ATMW' = { indicatorOfParameter=254 ; gribTablesVersionNo=200 ;centre=98;} + 'APAB_S' = { indicatorOfParameter=5 ; gribTablesVersionNo=201 ;centre=98;} + 'SOHR_RAD' = { indicatorOfParameter=13 ; gribTablesVersionNo=201 ;centre=98;} + 'THHR_RAD' = { indicatorOfParameter=14 ; gribTablesVersionNo=201 ;centre=98;} + 'CLC' = { indicatorOfParameter=29 ; gribTablesVersionNo=201 ;centre=98;} + 'QC' = { indicatorOfParameter=31 ; gribTablesVersionNo=201 ;centre=98;} + 'QI' = { indicatorOfParameter=33 ; gribTablesVersionNo=201 ;centre=98;} + 'TWATER' = { indicatorOfParameter=41 ; gribTablesVersionNo=201 ;centre=98;} + 'CH_CM_CL' = { indicatorOfParameter=50 ; gribTablesVersionNo=201 ;centre=98;} + 'HBAS_CON' = { indicatorOfParameter=68 ; gribTablesVersionNo=201 ;centre=98;} + 'HTOP_CON' = { indicatorOfParameter=69 ; gribTablesVersionNo=201 ;centre=98;} + 'BAS_CON' = { indicatorOfParameter=72 ; gribTablesVersionNo=201 ;centre=98;} + 'TOP_CON' = { indicatorOfParameter=73 ; gribTablesVersionNo=201 ;centre=98;} + 'DT_CON' = { indicatorOfParameter=74 ; gribTablesVersionNo=201 ;centre=98;} + 'DQV_CON' = { indicatorOfParameter=75 ; gribTablesVersionNo=201 ;centre=98;} + 'DU_CON' = { indicatorOfParameter=78 ; gribTablesVersionNo=201 ;centre=98;} + 'DV_CON' = { indicatorOfParameter=79 ; gribTablesVersionNo=201 ;centre=98;} + 'HTOP_DC' = { indicatorOfParameter=82 ; gribTablesVersionNo=201 ;centre=98;} + 'HZEROCL' = { indicatorOfParameter=84 ; gribTablesVersionNo=201 ;centre=98;} + 'SNOWLMT' = { indicatorOfParameter=85 ; gribTablesVersionNo=201 ;centre=98;} + 'QRS_GSP' = { indicatorOfParameter=99 ; gribTablesVersionNo=201 ;centre=98;} + 'PRR_GSP' = { indicatorOfParameter=100 ; gribTablesVersionNo=201 ;centre=98;} + 'PRS_GSP' = { indicatorOfParameter=101 ; gribTablesVersionNo=201 ;centre=98;} + 'RAIN_GSP' = { indicatorOfParameter=102 ; gribTablesVersionNo=201 ;centre=98;} + 'PRR_CON' = { indicatorOfParameter=111 ; gribTablesVersionNo=201 ;centre=98;} + 'PRS_CON' = { indicatorOfParameter=112 ; gribTablesVersionNo=201 ;centre=98;} + 'RAIN_CON' = { indicatorOfParameter=113 ; gribTablesVersionNo=201 ;centre=98;} + 'PP' = { indicatorOfParameter=139 ; gribTablesVersionNo=201 ;centre=98;} + 'VMAX_10M' = { indicatorOfParameter=187 ; gribTablesVersionNo=201 ;centre=98;} + 'W_I' = { indicatorOfParameter=200 ; gribTablesVersionNo=201 ;centre=98;} + 'T_SNOW' = { indicatorOfParameter=203 ; gribTablesVersionNo=201 ;centre=98;} + 'T_ICE' = { indicatorOfParameter=215 ; gribTablesVersionNo=201 ;centre=98;} + 'CAPE_CON' = { indicatorOfParameter=241 ; gribTablesVersionNo=201 ;centre=98;} + 'AERMR01' = { indicatorOfParameter=1 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR02' = { indicatorOfParameter=2 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR03' = { indicatorOfParameter=3 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR04' = { indicatorOfParameter=4 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR05' = { indicatorOfParameter=5 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR06' = { indicatorOfParameter=6 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR07' = { indicatorOfParameter=7 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR08' = { indicatorOfParameter=8 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR09' = { indicatorOfParameter=9 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR10' = { indicatorOfParameter=10 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR11' = { indicatorOfParameter=11 ; gribTablesVersionNo=210 ;centre=98;} + 'AERMR12' = { indicatorOfParameter=12 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN01' = { indicatorOfParameter=16 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN02' = { indicatorOfParameter=17 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN03' = { indicatorOfParameter=18 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN04' = { indicatorOfParameter=19 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN05' = { indicatorOfParameter=20 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN06' = { indicatorOfParameter=21 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN07' = { indicatorOfParameter=22 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN08' = { indicatorOfParameter=23 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN09' = { indicatorOfParameter=24 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN10' = { indicatorOfParameter=25 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN11' = { indicatorOfParameter=26 ; gribTablesVersionNo=210 ;centre=98;} + 'AERGN12' = { indicatorOfParameter=27 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS01' = { indicatorOfParameter=31 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS02' = { indicatorOfParameter=32 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS03' = { indicatorOfParameter=33 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS04' = { indicatorOfParameter=34 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS05' = { indicatorOfParameter=35 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS06' = { indicatorOfParameter=36 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS07' = { indicatorOfParameter=37 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS08' = { indicatorOfParameter=38 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS09' = { indicatorOfParameter=39 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS10' = { indicatorOfParameter=40 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS11' = { indicatorOfParameter=41 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLS12' = { indicatorOfParameter=42 ; gribTablesVersionNo=210 ;centre=98;} + 'AERPR' = { indicatorOfParameter=46 ; gribTablesVersionNo=210 ;centre=98;} + 'AERSM' = { indicatorOfParameter=47 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLG' = { indicatorOfParameter=48 ; gribTablesVersionNo=210 ;centre=98;} + 'AODPR' = { indicatorOfParameter=49 ; gribTablesVersionNo=210 ;centre=98;} + 'AODSM' = { indicatorOfParameter=50 ; gribTablesVersionNo=210 ;centre=98;} + 'AODLG' = { indicatorOfParameter=51 ; gribTablesVersionNo=210 ;centre=98;} + 'AERDEP' = { indicatorOfParameter=52 ; gribTablesVersionNo=210 ;centre=98;} + 'AERLTS' = { indicatorOfParameter=53 ; gribTablesVersionNo=210 ;centre=98;} + 'AERSCC' = { indicatorOfParameter=54 ; gribTablesVersionNo=210 ;centre=98;} + 'CO2' = { indicatorOfParameter=61 ; gribTablesVersionNo=210 ;centre=98;} + 'CH4' = { indicatorOfParameter=62 ; gribTablesVersionNo=210 ;centre=98;} + 'N2O' = { indicatorOfParameter=63 ; gribTablesVersionNo=210 ;centre=98;} + 'TCCO2' = { indicatorOfParameter=64 ; gribTablesVersionNo=210 ;centre=98;} + 'TCCH4' = { indicatorOfParameter=65 ; gribTablesVersionNo=210 ;centre=98;} + 'TCN2O' = { indicatorOfParameter=66 ; gribTablesVersionNo=210 ;centre=98;} + 'CO2OF' = { indicatorOfParameter=67 ; gribTablesVersionNo=210 ;centre=98;} + 'CO2NBF' = { indicatorOfParameter=68 ; gribTablesVersionNo=210 ;centre=98;} + 'CO2APF' = { indicatorOfParameter=69 ; gribTablesVersionNo=210 ;centre=98;} + 'CO2FIRE' = { indicatorOfParameter=80 ; gribTablesVersionNo=210 ;centre=98;} + 'COFIRE' = { indicatorOfParameter=81 ; gribTablesVersionNo=210 ;centre=98;} + 'CH4FIRE' = { indicatorOfParameter=82 ; gribTablesVersionNo=210 ;centre=98;} + 'NMHCFIRE' = { indicatorOfParameter=83 ; gribTablesVersionNo=210 ;centre=98;} + 'H2FIRE' = { indicatorOfParameter=84 ; gribTablesVersionNo=210 ;centre=98;} + 'NOXFIRE' = { indicatorOfParameter=85 ; gribTablesVersionNo=210 ;centre=98;} + 'N2OFIRE' = { indicatorOfParameter=86 ; gribTablesVersionNo=210 ;centre=98;} + 'PM2P5FIRE' = { indicatorOfParameter=87 ; gribTablesVersionNo=210 ;centre=98;} + 'TPMFIRE' = { indicatorOfParameter=88 ; gribTablesVersionNo=210 ;centre=98;} + 'TCFIRE' = { indicatorOfParameter=89 ; gribTablesVersionNo=210 ;centre=98;} + 'OCFIRE' = { indicatorOfParameter=90 ; gribTablesVersionNo=210 ;centre=98;} + 'BCFIRE' = { indicatorOfParameter=91 ; gribTablesVersionNo=210 ;centre=98;} + 'CFIRE' = { indicatorOfParameter=92 ; gribTablesVersionNo=210 ;centre=98;} + 'C4FFIRE' = { indicatorOfParameter=93 ; gribTablesVersionNo=210 ;centre=98;} + 'VEGFIRE' = { indicatorOfParameter=94 ; gribTablesVersionNo=210 ;centre=98;} + 'CCFIRE' = { indicatorOfParameter=95 ; gribTablesVersionNo=210 ;centre=98;} + 'FLFIRE' = { indicatorOfParameter=96 ; gribTablesVersionNo=210 ;centre=98;} + 'BFFIRE' = { indicatorOfParameter=97 ; gribTablesVersionNo=210 ;centre=98;} + 'NO2' = { indicatorOfParameter=121 ; gribTablesVersionNo=210 ;centre=98;} + 'SO2' = { indicatorOfParameter=122 ; gribTablesVersionNo=210 ;centre=98;} + 'CO' = { indicatorOfParameter=123 ; gribTablesVersionNo=210 ;centre=98;} + 'HCHO' = { indicatorOfParameter=124 ; gribTablesVersionNo=210 ;centre=98;} + 'TCNO2' = { indicatorOfParameter=125 ; gribTablesVersionNo=210 ;centre=98;} + 'TCSO2' = { indicatorOfParameter=126 ; gribTablesVersionNo=210 ;centre=98;} + 'TCCO' = { indicatorOfParameter=127 ; gribTablesVersionNo=210 ;centre=98;} + 'TCHCHO' = { indicatorOfParameter=128 ; gribTablesVersionNo=210 ;centre=98;} + 'Ra' = { indicatorOfParameter=181 ; gribTablesVersionNo=210 ;centre=98;} + 'SF6' = { indicatorOfParameter=182 ; gribTablesVersionNo=210 ;centre=98;} + 'TCRa' = { indicatorOfParameter=183 ; gribTablesVersionNo=210 ;centre=98;} + 'TCSF6' = { indicatorOfParameter=184 ; gribTablesVersionNo=210 ;centre=98;} + 'SF6APF' = { indicatorOfParameter=185 ; gribTablesVersionNo=210 ;centre=98;} + 'GO3' = { indicatorOfParameter=203 ; gribTablesVersionNo=210 ;centre=98;} + 'GTCO3' = { indicatorOfParameter=206 ; gribTablesVersionNo=210 ;centre=98;} + 'AERPR' = { indicatorOfParameter=46 ; gribTablesVersionNo=211 ;centre=98;} + 'AERSM' = { indicatorOfParameter=47 ; gribTablesVersionNo=211 ;centre=98;} + 'AERLG' = { indicatorOfParameter=48 ; gribTablesVersionNo=211 ;centre=98;} + 'AODPR' = { indicatorOfParameter=49 ; gribTablesVersionNo=211 ;centre=98;} + 'AODSM' = { indicatorOfParameter=50 ; gribTablesVersionNo=211 ;centre=98;} + 'AODLG' = { indicatorOfParameter=51 ; gribTablesVersionNo=211 ;centre=98;} + 'CO2' = { indicatorOfParameter=61 ; gribTablesVersionNo=211 ;centre=98;} + 'CH4' = { indicatorOfParameter=62 ; gribTablesVersionNo=211 ;centre=98;} + 'N2O' = { indicatorOfParameter=63 ; gribTablesVersionNo=211 ;centre=98;} + 'NO2' = { indicatorOfParameter=121 ; gribTablesVersionNo=211 ;centre=98;} + 'SO2' = { indicatorOfParameter=122 ; gribTablesVersionNo=211 ;centre=98;} + 'CO' = { indicatorOfParameter=123 ; gribTablesVersionNo=211 ;centre=98;} + 'HCHO' = { indicatorOfParameter=124 ; gribTablesVersionNo=211 ;centre=98;} + 'GO3' = { indicatorOfParameter=203 ; gribTablesVersionNo=211 ;centre=98;} + 'TPOC' = { indicatorOfParameter=228 ; gribTablesVersionNo=220 ;centre=98;} + 'CIN' = { indicatorOfParameter=1 ; gribTablesVersionNo=228 ;centre=98;} + 'OROG' = { indicatorOfParameter=2 ; gribTablesVersionNo=228 ;centre=98;} + 'ZUST' = { indicatorOfParameter=3 ; gribTablesVersionNo=228 ;centre=98;} + 'SM' = { indicatorOfParameter=39 ; gribTablesVersionNo=228 ;centre=98;} + 'U10N' = { indicatorOfParameter=131 ; gribTablesVersionNo=228 ;centre=98;} + 'V10N' = { indicatorOfParameter=132 ; gribTablesVersionNo=228 ;centre=98;} + 'ST' = { indicatorOfParameter=139 ; gribTablesVersionNo=228 ;centre=98;} + 'SD' = { indicatorOfParameter=141 ; gribTablesVersionNo=228 ;centre=98;} + 'SF' = { indicatorOfParameter=144 ; gribTablesVersionNo=228 ;centre=98;} + 'TCC' = { indicatorOfParameter=164 ; gribTablesVersionNo=228 ;centre=98;} + 'CAP' = { indicatorOfParameter=170 ; gribTablesVersionNo=228 ;centre=98;} + 'WILT' = { indicatorOfParameter=171 ; gribTablesVersionNo=228 ;centre=98;} + 'SAT' = { indicatorOfParameter=172 ; gribTablesVersionNo=228 ;centre=98;} + 'TP' = { indicatorOfParameter=228 ; gribTablesVersionNo=228 ;centre=98;} + 'ESVAR' = { indicatorOfParameter=44 ; gribTablesVersionNo=230 ;centre=98;} + 'SMLTVAR' = { indicatorOfParameter=45 ; gribTablesVersionNo=230 ;centre=98;} + 'SDURVAR' = { indicatorOfParameter=46 ; gribTablesVersionNo=230 ;centre=98;} + 'UVBVAR' = { indicatorOfParameter=57 ; gribTablesVersionNo=230 ;centre=98;} + 'PARVAR' = { indicatorOfParameter=58 ; gribTablesVersionNo=230 ;centre=98;} + 'LSPVAR' = { indicatorOfParameter=142 ; gribTablesVersionNo=230 ;centre=98;} + 'CPVAR' = { indicatorOfParameter=143 ; gribTablesVersionNo=230 ;centre=98;} + 'SFVAR' = { indicatorOfParameter=144 ; gribTablesVersionNo=230 ;centre=98;} + 'BLDVAR' = { indicatorOfParameter=145 ; gribTablesVersionNo=230 ;centre=98;} + 'SSHFVAR' = { indicatorOfParameter=146 ; gribTablesVersionNo=230 ;centre=98;} + 'SLHFVAR' = { indicatorOfParameter=147 ; gribTablesVersionNo=230 ;centre=98;} + 'SSRDVAR' = { indicatorOfParameter=169 ; gribTablesVersionNo=230 ;centre=98;} + 'STRDVAR' = { indicatorOfParameter=175 ; gribTablesVersionNo=230 ;centre=98;} + 'SSRVAR' = { indicatorOfParameter=176 ; gribTablesVersionNo=230 ;centre=98;} + 'STRVAR' = { indicatorOfParameter=177 ; gribTablesVersionNo=230 ;centre=98;} + 'TSRVAR' = { indicatorOfParameter=178 ; gribTablesVersionNo=230 ;centre=98;} + 'TTRVAR' = { indicatorOfParameter=179 ; gribTablesVersionNo=230 ;centre=98;} + 'EWSSVAR' = { indicatorOfParameter=180 ; gribTablesVersionNo=230 ;centre=98;} + 'NSSSVAR' = { indicatorOfParameter=181 ; gribTablesVersionNo=230 ;centre=98;} + 'EVAR' = { indicatorOfParameter=182 ; gribTablesVersionNo=230 ;centre=98;} + 'SUNDVAR' = { indicatorOfParameter=189 ; gribTablesVersionNo=230 ;centre=98;} + 'LGWSVAR' = { indicatorOfParameter=195 ; gribTablesVersionNo=230 ;centre=98;} + 'MGWSVAR' = { indicatorOfParameter=196 ; gribTablesVersionNo=230 ;centre=98;} + 'GWDVAR' = { indicatorOfParameter=197 ; gribTablesVersionNo=230 ;centre=98;} + 'SRCVAR' = { indicatorOfParameter=198 ; gribTablesVersionNo=230 ;centre=98;} + 'ROVAR' = { indicatorOfParameter=205 ; gribTablesVersionNo=230 ;centre=98;} + 'TSRCVAR' = { indicatorOfParameter=208 ; gribTablesVersionNo=230 ;centre=98;} + 'TTRCVAR' = { indicatorOfParameter=209 ; gribTablesVersionNo=230 ;centre=98;} + 'SSRCVAR' = { indicatorOfParameter=210 ; gribTablesVersionNo=230 ;centre=98;} + 'STRCVAR' = { indicatorOfParameter=211 ; gribTablesVersionNo=230 ;centre=98;} + 'TISRVAR' = { indicatorOfParameter=212 ; gribTablesVersionNo=230 ;centre=98;} +} + diff --git a/config/config.guess b/config/config.guess new file mode 100755 index 000000000..666c5ad92 --- /dev/null +++ b/config/config.guess @@ -0,0 +1,1511 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-11-20' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_MACHINE}" in + i?86) + test -z "$VENDOR" && VENDOR=pc + ;; + *) + test -z "$VENDOR" && VENDOR=unknown + ;; +esac +test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-${VENDOR}-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-${VENDOR}-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-${VENDOR}-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-${VENDOR}-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-${VENDOR}-osf1mk + else + echo ${UNAME_MACHINE}-${VENDOR}-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-${VENDOR}-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-${VENDOR}-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-${VENDOR}-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-${VENDOR}-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-${VENDOR}-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-${VENDOR}-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-${VENDOR}-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-${VENDOR}-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + else + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-${VENDOR}-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-${VENDOR}-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-${VENDOR}-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-${VENDOR}-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;; + PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;; + *) echo hppa-${VENDOR}-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-${VENDOR}-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-${VENDOR}-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-${VENDOR}-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-${VENDOR}-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-${VENDOR}-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-${VENDOR}-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-${VENDOR}-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-${VENDOR}-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-${VENDOR}-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-${VENDOR}-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-${VENDOR}-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-${VENDOR}-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-${VENDOR}-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-${VENDOR}-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/config.sub b/config/config.sub new file mode 100755 index 000000000..2a55a5075 --- /dev/null +++ b/config/config.sub @@ -0,0 +1,1705 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-11-20' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/depcomp b/config/depcomp new file mode 100755 index 000000000..df8eea7e4 --- /dev/null +++ b/config/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config/install-sh b/config/install-sh new file mode 100755 index 000000000..6781b987b --- /dev/null +++ b/config/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config/ltmain.sh b/config/ltmain.sh new file mode 100755 index 000000000..a72f2fd78 --- /dev/null +++ b/config/ltmain.sh @@ -0,0 +1,8406 @@ +# Generated from ltmain.m4sh. + +# ltmain.sh (GNU libtool) 2.2.6b +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print informational messages (default) +# --version print version information +# -h, --help print short or long help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.6b +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=2.2.6b +TIMESTAMP="" +package_revision=1.3017 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# NLS nuisances: We save the old values to restore during execute mode. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done + +$lt_unset CDPATH + + + + + +: ${CP="cp -f"} +: ${ECHO="echo"} +: ${EGREP="/bin/grep -E"} +: ${FGREP="/bin/grep -F"} +: ${GREP="/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/bin/sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +# Generated shell functions inserted here. + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +# In the unlikely event $progname began with a '-', it would play havoc with +# func_echo (imagine progname=-n), so we prepend ./ in that case: +func_dirname_and_basename "$progpath" +progname=$func_basename_result +case $progname in + -*) progname=./$progname ;; +esac + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` + done + my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "X$my_tmpdir" | $Xsed +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "X$1" | $Xsed \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + + + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/# -h/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + $ECHO + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help +# Echo long help message to standard output and exit. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + exit $? +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +exit_cmd=: + + + + + +# Check that we have a working $ECHO. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell, and then maybe $ECHO will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case "$@ " in + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { +test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + $ECHO + $ECHO "Try \`$progname --help' for more information about other modes." + + exit $? +} + + # Now that we've collected a possible --mode arg, show help if necessary + $opt_help && func_mode_help + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + $ECHO "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + $ECHO "X----------------------------------------------------------------------" | $Xsed + $ECHO "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + $ECHO + $ECHO "If you ever happen to want to link against installed libraries" + $ECHO "in a given directory, LIBDIR, you must either use libtool, and" + $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" + $ECHO "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" + $ECHO " during execution" + fi + if test -n "$runpath_var"; then + $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" + $ECHO " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $ECHO + + $ECHO "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" + $ECHO "pages." + ;; + *) + $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + $ECHO "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $ECHO "X$nonopt" | $GREP shtool >/dev/null; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + $ECHO >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + $ECHO >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + $ECHO >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + $ECHO >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + + +# func_emit_wrapper_part1 [arg=no] +# +# Emit the first part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part1 () +{ + func_emit_wrapper_part1_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part1_arg1=$1 + fi + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + ECHO=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$ECHO works! + : + else + # Restart under the correct shell, and then maybe \$ECHO will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $ECHO "\ + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done +" +} +# end: func_emit_wrapper_part1 + +# func_emit_wrapper_part2 [arg=no] +# +# Emit the second part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part2 () +{ + func_emit_wrapper_part2_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part2_arg1=$1 + fi + + $ECHO "\ + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} +# end: func_emit_wrapper_part2 + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=no + if test -n "$1" ; then + func_emit_wrapper_arg1=$1 + fi + + # split this up so that func_emit_cwrapperexe_src + # can call each part independently. + func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" + func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_path_tmp1=`( cmd //c echo "$1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_tmp1=`cygpath -w "$1"` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result="" + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_to_host_pathlist_tmp2="$1" + # Once set for this call, this variable should not be + # reassigned. It is used in tha fallback case. + func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e 's|^:*||' -e 's|:*$||'` + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" + fi + fi + fi + IFS=: + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result" ; then + func_error "Could not determine the host path(s) corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +# define setmode _setmode +#else +# include +# include +# ifdef __CYGWIN__ +# include +# define HAVE_SETENV +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +#ifdef _MSC_VER +# define S_IXUSR _S_IEXEC +# define stat _stat +# ifndef _INTPTR_T_DEFINED +# define intptr_t int +# endif +#endif + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifdef __CYGWIN__ +# define FOPEN_WB "wb" +#endif + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#undef LTWRAPPER_DEBUGPRINTF +#if defined DEBUGWRAPPER +# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args +static void +ltwrapper_debugprintf (const char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); +} +#else +# define LTWRAPPER_DEBUGPRINTF(args) +#endif + +const char *program_name = NULL; + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_fatal (const char *message, ...); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_opt_process_env_set (const char *arg); +void lt_opt_process_env_prepend (const char *arg); +void lt_opt_process_env_append (const char *arg); +int lt_split_name_value (const char *arg, char** name, char** value); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); + +static const char *script_text_part1 = +EOF + + func_emit_wrapper_part1 yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ "/' -e 's/$/\\n"/' + echo ";" + cat <"))); + for (i = 0; i < newargc; i++) + { + LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); + } + +EOF + + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac + + cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable (const char *path) +{ + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", + wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", + tmp_pathspec)); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + char *errstr = strerror (errno); + lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal ("Could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} + +void +lt_setenv (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", + (name ? name : ""), + (value ? value : ""))); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +int +lt_split_name_value (const char *arg, char** name, char** value) +{ + const char *p; + int len; + if (!arg || !*arg) + return 1; + + p = strchr (arg, (int)'='); + + if (!p) + return 1; + + *value = xstrdup (++p); + + len = strlen (arg) - strlen (*value); + *name = XMALLOC (char, len); + strncpy (*name, arg, len-1); + (*name)[len - 1] = '\0'; + + return 0; +} + +void +lt_opt_process_env_set (const char *arg) +{ + char *name = NULL; + char *value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); + } + + lt_setenv (name, value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_prepend (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_append (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 1); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + + +EOF +} +# end: func_emit_cwrapperexe_src + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $ECHO + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because the file extensions .$libext of this argument makes me believe" + $ECHO "*** that it is just a static archive that I should not use here." + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + $ECHO + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $ECHO + $ECHO "*** And there doesn't seem to be a static archive available" + $ECHO "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $ECHO + $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $ECHO "*** But as you try to build a module library, libtool will still create " + $ECHO "*** a static module, that should work as long as the dlopening application" + $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` + # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` + # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ + -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` + done + fi + if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | + $GREP . >/dev/null; then + $ECHO + if test "X$deplibs_check_method" = "Xnone"; then + $ECHO "*** Warning: inter-library dependencies are not supported in this platform." + else + $ECHO "*** Warning: inter-library dependencies are not known to be supported." + fi + $ECHO "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $ECHO + $ECHO "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + $ECHO "*** a static module, that should work as long as the dlopening" + $ECHO "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $ECHO "*** The inter-library dependencies that have been dropped here will be" + $ECHO "*** automatically added whenever a program is linked with this library" + $ECHO "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $ECHO + $ECHO "*** Since this library must not contain undefined symbols," + $ECHO "*** because either the platform does not support them or" + $ECHO "*** it was explicitly requested with -no-undefined," + $ECHO "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$ECHO "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + $ECHO 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + $ECHO ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *cegcc) + # Disable wrappers for cegcc, we are cross compiling anyway. + wrappers_required=no + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $ECHO for shipping. + if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $ECHO "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/config/missing b/config/missing new file mode 100755 index 000000000..28055d2ae --- /dev/null +++ b/config/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/configure.ac b/configure.ac new file mode 100755 index 000000000..b230f80ce --- /dev/null +++ b/configure.ac @@ -0,0 +1,634 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_DEFUN([_AM_AUTOCONF_VERSION],[]) + +AC_PREREQ([2.59]) +AC_INIT([grib_api],[ ], [Software.Support@ecmwf.int]) + +AC_CONFIG_AUX_DIR([config]) + +LT_INIT([shared]) +AC_SUBST([LIBTOOL_DEPS]) +AC_CONFIG_MACRO_DIR([m4]) + +# Source file containing package/library versioning information. + + . ${srcdir}/version.sh + +GRIB_API_MAIN_VERSION="${GRIB_API_MAJOR_VERSION}.${GRIB_API_MINOR_VERSION}.${GRIB_API_REVISION_VERSION}" + echo $GRIB_API_MAIN_VERSION +PACKAGE_VERSION="${GRIB_API_MAIN_VERSION}" +AC_SUBST(GRIB_API_MAIN_VERSION) +echo "configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" + + +# Ensure that make can run correctly +AM_SANITY_CHECK + +AC_CONFIG_SRCDIR([src/grib_api.h]) +AC_CONFIG_HEADER([src/config.h]) +AC_CONFIG_FILES([grib_api.pc grib_api.spec grib_api_f90.pc]) +AM_INIT_AUTOMAKE($PACKAGE_NAME,[${PACKAGE_VERSION}],[http://www.ecmwf.int]) + +definition_files_path=/usr/local/share/grib_api/definitions +samples_files_path=/usr/local/share/grib_api/samples +ifs_samples_files_path=/usr/local/share/grib_api/ifs_samples +default_perl_install=/usr/local/perl + +if test "$prefix" != 'NONE' ; then + definition_files_path=${prefix}/share/grib_api/definitions + samples_files_path=${prefix}/share/grib_api/samples + ifs_samples_files_path=${prefix}/share/grib_api/ifs_samples + default_perl_install=${prefix}/perl +fi + +if test "$datadir" != '${datarootdir}' ; then + definition_files_path=$datadir/grib_api/definitions +fi + + +AC_DEFINE_UNQUOTED(GRIB_API_MAIN_VERSION,$GRIB_API_MAIN_VERSION,Grib Api version) +AC_DEFINE_UNQUOTED(GRIB_API_MAJOR_VERSION,$GRIB_API_MAJOR_VERSION,Grib Api Major release) +AC_DEFINE_UNQUOTED(GRIB_API_MINOR_VERSION,$GRIB_API_MINOR_VERSION,Grib Api Minor release) +AC_DEFINE_UNQUOTED(GRIB_API_REVISION_VERSION,$GRIB_API_REVISION_VERSION,Grib Api Revision release) +AH_TEMPLATE([_LARGE_FILE_API], + [Needs to be undefined on some AIX]) + +PERLDIR=perl +AC_SUBST(PERLDIR) + + +dnl Checks for programs. +AC_PROG_CC(xlc_r xlc gcc cc pgcc) +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +AC_PROG_YACC +AC_PROG_LEX +AC_PROG_F77(pgf90 pgf77 xlf gfortran f77 g77 f90 ifort) +AC_PROG_FC(pgf90 xlf90 gfortran f90 ifort) + +dnl check availability of pthreads +AC_ARG_ENABLE([pthread], + [AS_HELP_STRING([--enable-pthread],[enable POSIX threads [by default disabled]])], + GRIB_PTHREADS=1 , GRIB_PTHREADS=0 +) + +if test $GRIB_PTHREADS -eq 1 +then +AC_GRIB_PTHREADS +AC_GRIB_LINUX_PTHREADS +else +GRIB_LINUX_PTHREADS=0 +fi + +AC_DEFINE_UNQUOTED(GRIB_PTHREADS,$GRIB_PTHREADS,1->pthreads enabled 0->pthreads disabled) +AC_DEFINE_UNQUOTED(GRIB_LINUX_PTHREADS,$GRIB_LINUX_PTHREADS,1->pthreads enabled 0->pthreads disabled) + +dnl check on uppercase fortran modules not working to be fixed +dnl some fortran compilers change the name of the .mod file in upper case! +ac_cv_prog_f90_uppercase_mod=no +AC_PROG_FC_UPPERCASE_MOD +AM_CONDITIONAL(UPPER_CASE_MOD, [test "x$ac_cv_prog_f90_uppercase_mod" = xyes]) + +AC_IEEE_BE +AC_DEFINE_UNQUOTED(IEEE_BE,$IS_IEEE_BE,1-> ieee big endian float/double 0->no ieee big endian float/double) + +AC_IEEE_LE +AC_DEFINE_UNQUOTED(IEEE_LE,$IS_IEEE_LE,1-> ieee little endian float/double 0->no ieee little endian float/double) + +dnl disable ieee native packing +AC_ARG_ENABLE([ieee-native], + [AS_HELP_STRING([--disable-ieee-native],[disable ieee native packing])], + without_ieee=1,without_ieee=0) + +if test $without_ieee -eq 1 +then +AC_DEFINE_UNQUOTED(IEEE_LE,0,1-> ieee little endian float/double 0->no ieee little endian float/double) +AC_DEFINE_UNQUOTED(IEEE_BE,0,1-> ieee big endian float/double 0->no ieee big endian float/double) +fi + +AC_BIG_ENDIAN +AC_DEFINE_UNQUOTED(IS_BIG_ENDIAN,$IS_BIG_ENDIAN,1-> big endian 0->little endian) + +AC_INLINE +AC_DEFINE_UNQUOTED(GRIB_INLINE,$HAS_INLINE,inline if available) + +AC_ALIGN +AC_DEFINE_UNQUOTED(GRIB_MEM_ALIGN,$MEM_ALIGN,memory alignment required) + +AC_CHECK_FUNC([posix_memalign], + [AC_DEFINE_UNQUOTED(POSIX_MEMALIGN,1,posix_memalign present)]) + +AC_ARG_ENABLE([align-memory], + [AS_HELP_STRING([--enable-align-memory],[enable memory alignment [by default disabled]])], +AC_DEFINE_UNQUOTED(GRIB_MEM_ALIGN,1,memory alignment required) , + ) + +dnl use vectorised code +AC_ARG_ENABLE([vector], + [AS_HELP_STRING([--enable-vector],[enable vectorised code [by default disabled]] )], + [vectorise=${enableval}],[vectorise=no]) +if test "x${vectorise}" = xyes +then + vectorise=1 +else + vectorise=0 +fi +AC_DEFINE_UNQUOTED(VECTOR,$vectorise,vectorised code) + +dnl enable memory management +AC_ARG_ENABLE([memory-management], + [AS_HELP_STRING([--enable-memory-management],[enable memory [by default disabled]])], +AC_DEFINE_UNQUOTED(MANAGE_MEM,1,memory management) , +AC_DEFINE_UNQUOTED(MANAGE_MEM,0,memory management) + ) + +dnl enable development configuration +DEVEL_RULES='' +AC_ARG_ENABLE([development], + [AS_HELP_STRING([--enable-development],[enable development configuration [by default disabled]])], + [GRIB_DEVEL=${enableval}] , [GRIB_DEVEL=no] +) +if test "x${GRIB_DEVEL}" = xyes +then + GRIB_DEVEL=1 + DEVEL_RULES='extrules.am' +else + GRIB_DEVEL=0 + DEVEL_RULES='dummy.am' +fi +AC_SUBST(DEVEL_RULES) +AC_SUBST(GRIB_DEVEL) + + +dnl Large file support +AC_FUNC_FSEEKO +CREATE_H='' +if test x"$ac_cv_func_fseeko" != xyes ; then + CREATE_H='./create_h.sh 1' +else + CREATE_H='./create_h.sh 0' +fi + +AC_SYS_LARGEFILE + +dnl What OS are we running? +AC_CANONICAL_HOST + +dnl RPM related variables +RPM_HOST_CPU=${host_cpu} +RPM_HOST_VENDOR=${host_vendor} +RPM_HOST_OS=${host_os} +RPM_CONFIGURE_ARGS=${ac_configure_args} +AC_SUBST(RPM_HOST_CPU) +AC_SUBST(RPM_HOST_VENDOR) +AC_SUBST(RPM_HOST_OS) +AC_SUBST(RPM_CONFIGURE_ARGS) +AC_ARG_WITH(rpm-release, [ --with-rpm-release=NUMBER The rpms will use this release number (defaults to 1)], + RPM_RELEASE="$withval", RPM_RELEASE=1) +AC_SUBST(RPM_RELEASE) + + +GRIB_SAMPLES_PATH=$samples_files_path +GRIB_TEMPLATES_PATH=$samples_files_path +GRIB_DEFINITION_PATH=$definition_files_path + +AC_DEFINE_UNQUOTED(GRIB_TEMPLATES_PATH,"$samples_files_path",Directory where templates are) +AC_DEFINE_UNQUOTED(GRIB_SAMPLES_PATH,"$samples_files_path",Directory where samples are) +AC_DEFINE_UNQUOTED(GRIB_DEFINITION_PATH,"$definition_files_path",Directory where definition files are) + +AC_SUBST(GRIB_TEMPLATES_PATH) +AC_SUBST(GRIB_SAMPLES_PATH) +AC_SUBST(GRIB_DEFINITION_PATH) + +dnl Fortran interface +AC_ARG_ENABLE([fortran], + [AS_HELP_STRING([--disable-fortran],[disable fortran interface [by default enabled]])], + without_fortran=1,without_fortran=0) + +if test "x$FC" = "x" +then + without_fortran=1 +fi + +dnl check on uppercase fortran modules not working to be fixed +dnl some fortran compilers change the name of the .mod file in upper case! +ac_cv_prog_f90_uppercase_mod=no +AC_PROG_FC_UPPERCASE_MOD +AM_CONDITIONAL(UPPER_CASE_MOD, [test "x$ac_cv_prog_f90_uppercase_mod" = xyes]) + +dnl check if the fortran compiler has problems using modules when in debug mode +dnl Porland compilers versions 7 and 8 are known to fail here +AC_PROG_FC_DEBUG_IN_MODULE +AM_CONDITIONAL(DEBUG_IN_MOD, [test "x$ac_cv_prog_f90_debug_in_module" = xyes]) + +if test $without_fortran -ne 1 && test "x$ac_cv_prog_f90_debug_in_module" != xyes \ + && test "x$enable_shared" = xyes && test "x$FCFLAGS" = "x-g" +then + without_fortran=1 + AC_MSG_WARN([ + + Your Fortran compiler ($FC) does not support linking to dynamic library modules when debug is enabled. This is a known +problem with Portland compilers versions 7 and 8, for example. Possible workarounds are: + + - Use a Portland compiler version 10 or higher or a different compiler. + - Disable shared libraries (e.g. configure --disable-shared) + - Disable debug (e.g. configure FCFLAGS=\"\") + + Compilation of the Fortran module has been disabled + +]) +fi + + +if test $without_fortran -ne 1 +then + FORTRAN_MOD=fortran + AC_SUBST(FORTRAN_MOD) + F90_CHECK="examples/F90" + AC_SUBST(F90_CHECK) + + dnl detect the Fortran 90 modules inclusion flag. + AX_F90_MODULE_FLAG + if test "$ax_cv_f90_modflag" = "not found" ; then + AC_MSG_ERROR([unable to find compiler flag for modules inclusion]) + fi + F90_MODULE_FLAG=$ax_cv_f90_modflag + AC_SUBST([F90_MODULE_FLAG]) +fi + +dnl ifs_samples +AC_ARG_WITH([ifs-samples], + [AS_HELP_STRING([--with-ifs-samples=ifs-samples-dir],[ifs_samples will be installed in ifs-samples-dir])], + ifs_samples=$withval, ifs_samples='none') +IFS_SAMPLES_DIR="" + +if test $ifs_samples != 'none' +then + IFS_SAMPLES_DIR=$ifs_samples +else + IFS_SAMPLES_DIR=$ifs_samples_files_path +fi +AC_SUBST([IFS_SAMPLES_DIR]) + + +dnl EMOS +AC_ARG_WITH([emos], + [AS_HELP_STRING([--with-emos=EMOS],[use emos for tests])], + emos=$withval, emos='none') + +EMOS_LIB="" +if test "$emos" != 'none' +then + EMOS_LIB=$emos + AC_DEFINE(HAVE_LIBEMOS,1,Define if you have EMOS library) +fi + + +dnl fortran libraries +AC_ARG_WITH([fortranlibdir], + [AS_HELP_STRING([--with-fortranlibdir=FORTRANDIR],[fortran libraries directory ])], + fortranlibdir=$withval, fortranlibdir='') + +AC_ARG_WITH([fortranlibs], + [AS_HELP_STRING([--with-fortranlibs=FORTRANLIBS],[fortran libraries to link from C])], + fortranlibs=$withval, fortranlibs='none') + +if test "$fortranlibs" != 'none' +then + EMOS_LIB="$emos -L$fortranlibdir $fortranlibs -Wl,-rpath $fortranlibdir" +fi + +AC_SUBST(EMOS_LIB) + +dnl timer +AC_ARG_ENABLE([timer], + [AS_HELP_STRING([--enable-timer],[enable timer [by default disabled]])], + with_timer=1,with_timer=0) +if test ${with_timer} -eq 1 +then + AC_DEFINE(GRIB_TIMER,1,1->Timer on 0->Timer off) +else + AC_DEFINE(GRIB_TIMER,0,1->Timer on 0->Timer off) +fi + + +dnl multithread packing +AC_ARG_ENABLE([omp-packing], + [AS_HELP_STRING([--enable-omp-packing],[enable OpenMP multithreaded packing [by default disabled]])], + with_omp=1,with_omp=0) +if test ${with_omp} -eq 1 +then + AC_DEFINE(OMP_PACKING,1,1->OpenMP packing 0->single thread packing) +else + AC_DEFINE(OMP_PACKING,0,1->OpenMP packing 0->single thread packing) +fi + +AC_ARG_WITH([netcdf], +[AS_HELP_STRING([--with-netcdf=NETCDF],[enable netcdf encoding/decoding using netcdf library in NETCDF])], + netcdf_dir=$withval,netcdf_dir='none') +with_netcdf=0 +if test $netcdf_dir != 'none' +then + with_netcdf=1 + CFLAGS="$CFLAGS -I${netcdf_dir}/include" + LDFLAGS="$LDFLAGS -L${netcdf_dir}/lib" + AC_CHECK_LIB(netcdf,nc_open,netcdf_ok=1,netcdf_ok=0) + if test $netcdf_ok -eq 0 + then + AC_MSG_NOTICE([ +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + CONFIGURATION ERROR: netcdf test not passed. + Please check that the path to the netcdf library given in --with-netcdf=PATH_TO_NETCDF + is correct. Otherwise build without netcdf. +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ]) + test 0 -eq 1 + exit + fi + LIBS="-lnetcdf $LIBS" + AC_DEFINE(HAVE_NETCDF,1,NETCDF enabled) +fi + +dnl Check for jpeg +AC_ARG_ENABLE([jpeg], + [AS_HELP_STRING([--disable-jpeg],[disable jpeg 2000 for grib 2 decoding/encoding [by default enabled]])], + without_jpeg=1,without_jpeg=0) + +AC_ARG_WITH([jasper], + [AS_HELP_STRING([--with-jasper=JASPER],[use specified jasper installation directory])], + jasper_dir=$withval, jasper_dir='system') + +JASPER_DIR=$jasper_dir +AC_SUBST(JASPER_DIR) + +if test $jasper_dir != 'system' +then + CFLAGS="$CFLAGS -I${jasper_dir}/include" + LDFLAGS="$LDFLAGS -L${jasper_dir}/lib" +fi + +AC_ARG_WITH([openjpeg], + [AS_HELP_STRING([--with-openjpeg=OPENJPEG],[use specified openjpeg installation directory])], + openjpeg_dir=$withval, openjpeg_dir='system') + +OPENJPEG_DIR=$openjpeg_dir +AC_SUBST(OPENJPEG_DIR) + +if test $openjpeg_dir != 'system' +then + CFLAGS="$CFLAGS -I${openjpeg_dir}/include" + LDFLAGS="$LDFLAGS -L${openjpeg_dir}/lib" +fi + +if test $without_jpeg -ne 1 +then + AC_DEFINE(HAVE_JPEG,1,JPEG enabled) + AC_CHECK_LIB(jasper,jas_stream_memopen,jasper_ok=1,jasper_ok=0) + AC_CHECK_LIB(openjpeg,opj_image_create,openjpeg_ok=1,openjpeg_ok=0) + + jpeg_ok=0 + + # prefer openjpeg over jasper + if test $openjpeg_ok -eq 1 + then + jpeg_ok=1 + LIB_OPENJPEG='-lopenjpeg -lm' + LIBS="$LIB_OPENJPEG $LIBS" + AC_DEFINE(HAVE_LIBOPENJPEG,1,Define if you have JPEG version 2 "Openjpeg" library) + AC_SUBST(LIB_OPENJPEG) + elif test $jasper_ok -eq 1 + then + jpeg_ok=1 + LIB_JASPER='-ljasper' + LIBS="$LIB_JASPER $LIBS" + AC_DEFINE(HAVE_LIBJASPER,1,Define if you have JPEG version 2 "Jasper" library) + AC_SUBST(LIB_JASPER) + fi + + if test $jpeg_ok -eq 0 + then + AC_MSG_NOTICE([ +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + CONFIGURATION ERROR: jpeg library (jasper or openjpeg) required. + jpeg library installation is not working or missing. + + To fix this problem you have the following options. + 1) Install without jpeg support enabled (--disable-jpeg), but you won't be able to + decode grib 2 data encoded in jpeg. + 2) Check if you have a jpeg library installed in a path different from your system path. + In this case you can provide your jpeg library installation path to the configure + through the options: + --with-jasper="jasper_lib_path" + --with-openjpeg="openjpeg_lib_path" + 3) Download and install one of the supported jpeg libraries. +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ]) + [ 0 -eq 1 ] + exit + fi + JPEG_TEST="jpeg.sh" + AC_SUBST(JPEG_TEST) +fi + + +dnl Check for png +AC_ARG_WITH([png-support], + [AS_HELP_STRING([--with-png-support],[add support for png decoding/encoding])], + with_png=1,with_png=0) + +if test $with_png -gt 0 +then + AC_MSG_CHECKING(for PNG ) + AC_MSG_RESULT() + AC_CHECK_HEADER(png.h,passed=1,passed=0) + AC_CHECK_LIB(png,png_read_png,passed=1,passed=0) + AC_MSG_CHECKING(if PNG support package is complete) + + if test $passed -gt 0 + then + LIB_PNG='-lpng' + LIBS="$LIB_PNG $LIBS" + AC_DEFINE(HAVE_LIBPNG,1,Define to 1 if you have the png library (-lpng)) + AC_SUBST(LIB_PNG) + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no -- some components failed test) + fi +fi + +dnl Perl installation directory + +#PERL_INSTALL_OPTIONS="PREFIX=$prefix INSTALLDIRS=perl" +PERL_INSTALL_OPTIONS="LIB=$default_perl_install" + +AC_ARG_ENABLE([install-system-perl], + [AS_HELP_STRING([--enable-install-system-perl],[perl modules will install in the standard perl installation ])], + enable_perl_install='yes', enable_perl_install='no') + +if test "$enable_perl_install" = 'yes' +then + PERL_INSTALL_OPTIONS="" +fi + +AC_SUBST(PERL_INSTALL_OPTIONS) + +dnl Disable build/install of Perl grib_api. +AC_ARG_WITH([perl], + [AS_HELP_STRING([--with-perl=PERL],[use specified Perl binary to configure Perl grib_api])], + with_perl=$withval, with_perl='no') + +dnl Look for PERL if Perl requested +if test "$with_perl" != 'no' +then + if test "$with_perl" != 'yes' + then + AC_CACHE_CHECK(for perl,ac_cv_path_PERL,ac_cv_path_PERL="$with_perl"); + PERL=$ac_cv_path_PERL + AC_SUBST(PERL)dnl + else + AC_PATH_PROGS(PERL,perl perl5,perl)dnl + fi +fi + +dnl Get full paths +builddir=`pwd` + +dnl Options to pass when configuring Perl grib_api +GRIB_API_LIB="${builddir}/src/grib_api.a" +GRIB_API_INC="${builddir}/src" +AC_ARG_WITH([perl-options], + [AS_HELP_STRING([--with-perl-options=[OPTIONS]], [options to pass on command-line when + generating Perl grib_api's Makefile from Makefile.PL])], + PERL_MAKE_OPTIONS=$withval) +AC_SUBST(PERL_MAKE_OPTIONS) +AC_SUBST(GRIB_API_LIB) +AC_SUBST(GRIB_API_INC) + +AM_CONDITIONAL(WITH_PERL, test $with_perl != no) + +dnl Enable the Python interface in the build +AC_ARG_ENABLE([python], + [AS_HELP_STRING([--enable-python],[Enable the Python interface in the build [by default disabled]])]) + +dnl Check if the user wants numpy disabled +AC_ARG_ENABLE([numpy], + [AS_HELP_STRING([--disable-numpy],[Disable NumPy as the data handling package for the Python interface [by default enabled]])]) + +dnl Look for Python if requested +if test "x$enable_python" = "xyes" +then + dnl search for a python interpreter on the system dnl abort if one not found + dnl am_path_python sets many python vars - RTFM for more info + AM_PATH_PYTHON([2.5]) + + AC_ARG_VAR([PYTHON_INCLUDES], [Include flags for python]) + AC_ARG_VAR([PYTHON_LDFLAGS], [Link flags for python]) + AC_ARG_VAR([PYTHON_CFLAGS], [C flags for python]) + AC_ARG_VAR([PYTHON_LIBS], [Libraries for python]) + AC_ARG_VAR([PYTHON_CONFIG], [Path to python-config]) + + AC_PATH_PROGS([PYTHON_CONFIG], + [python$PYTHON_VERSION-config python-config], + [no], + [`dirname $PYTHON`]) + AS_IF([test "$PYTHON_CONFIG" = no], [AC_MSG_ERROR([cannot find python-config for $PYTHON.])]) + + AC_MSG_CHECKING([python include flags]) + PYTHON_INCLUDES=`$PYTHON_CONFIG --includes` + AC_MSG_RESULT([$PYTHON_INCLUDES]) + + AC_MSG_CHECKING([python link flags]) + PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags` + AC_MSG_RESULT([$PYTHON_LDFLAGS]) + + AC_MSG_CHECKING([python C flags]) + PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags` + AC_MSG_RESULT([$PYTHON_CFLAGS]) + + AC_MSG_CHECKING([python libraries]) + PYTHON_LIBS=`$PYTHON_CONFIG --libs` + AC_MSG_RESULT([$PYTHON_LIBS]) + + # macro that gets the include path for Python.h which is used to build + # the shared library corresponding to the GRIB API Python module. + # AX_PYTHON_DEVEL + + # enable testing scripts if building with Python + PYTHON_CHECK='examples/python' + AC_SUBST(PYTHON_CHECK) + + data_handler=numpy + if test "x$enable_numpy" != "xno" + then + AC_MSG_CHECKING(whether numpy is installed) + + has_numpy=`$PYTHON -c "import numpy;print numpy" 2> /dev/null` + if test "x$has_numpy" = "x" + then + AC_MSG_RESULT(no) + AC_MSG_ERROR([NumPy is not installed. Use --disable-numpy if you want to disable Numpy from the build.]) + else + AC_MSG_RESULT(yes) + NUMPY_INCLUDE=`$PYTHON -c "import numpy;print numpy.get_include()"` + AC_SUBST(NUMPY_INCLUDE) + fi + else + data_handler=array + fi + + PYTHON_DATA_HANDLER=$data_handler + AC_SUBST(PYTHON_DATA_HANDLER) +fi + +AM_CONDITIONAL([WITH_PYTHON], [test x$PYTHON != x]) +AM_CONDITIONAL([WITH_FORTRAN], [test x$FORTRAN_MOD != x]) +AM_CONDITIONAL([CREATING_SHARED_LIBS], [test "x$enable_shared" = xyes]) + + +dnl AC_DISABLE_SHARED +dnl LT_INIT + +dnl Checks for ar and rm +AC_CHECK_PROG(RM, rm, rm) +AC_CHECK_TOOL(AR, ar, ar) + +dnl Check if -pedantic available +grib_api_PROG_CC_WARNING_PEDANTIC([-Wall]) + +dnl Enable -Werror despite compiler version +grib_api_ENABLE_WARNINGS_ARE_ERRORS + +dnl Checks for libraries +AC_CHECK_LIB(m,pow) + +dnl Checks for header files. +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS([stddef.h stdlib.h string.h sys/param.h sys/time.h unistd.h math.h stdarg.h assert.h ctype.h fcntl.h]) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_TYPE_SIZE_T +AC_HEADER_TIME + +dnl Checks for library functions. +AC_FUNC_CLOSEDIR_VOID +AC_TYPE_SIGNAL +AC_FUNC_VPRINTF +AC_CHECK_FUNCS([bzero gettimeofday]) + +AX_LINUX_DISTRIBUTION + +AC_OUTPUT( Makefile src/Makefile fortran/Makefile tools/Makefile definitions/Makefile samples/Makefile ifs_samples/grib1/Makefile ifs_samples/grib1_mlgrib2/Makefile ifs_samples/grib1_mlgrib2_ieee64/Makefile tests/Makefile examples/C/Makefile examples/F90/Makefile tigge/Makefile perl/GRIB-API/Makefile.PL perl/Makefile python/Makefile examples/python/Makefile rpms/grib_api.spec rpms/grib_api.pc rpms/grib_api_f90.pc) + +AC_MSG_NOTICE([ + + Configuration completed. + + You can now say 'make' to compile the grib_api package, 'make check' to + test it and 'make install' to install it afterwards. + ]) diff --git a/definitions/CMakeLists.txt b/definitions/CMakeLists.txt new file mode 100644 index 000000000..e69de29bb diff --git a/definitions/Makefile.am b/definitions/Makefile.am new file mode 100644 index 000000000..b433fb2cd --- /dev/null +++ b/definitions/Makefile.am @@ -0,0 +1,2119 @@ +#This file is generated by make_makefile_am.pl +# DON'T EDIT!!! +definitionsdir = @GRIB_DEFINITION_PATH@ +dist_definitions_DATA = \ + ./boot.def\ + ./empty_template.def\ + ./installDefinitions.sh\ + ./mars_param.table\ + ./param_id.table\ + ./parameters_version.def\ + ./publish_new_parameters.sh\ + ./stepUnits.table\ + ./x.grib + +definitionsbudgdir = @GRIB_DEFINITION_PATH@/budg +dist_definitionsbudg_DATA = \ + budg/boot.def\ + budg/mars_labeling.def\ + budg/section.1.def\ + budg/section.4.def + +definitionscdfdir = @GRIB_DEFINITION_PATH@/cdf +dist_definitionscdf_DATA = \ + cdf/boot.def + +definitionscommondir = @GRIB_DEFINITION_PATH@/common +dist_definitionscommon_DATA = \ + common/statistics_grid.def\ + common/statistics_spectral.def + +definitionsgrib1dir = @GRIB_DEFINITION_PATH@/grib1 +dist_definitionsgrib1_DATA = \ + grib1/0.ecmf.table\ + grib1/0.table\ + grib1/1.table\ + grib1/10.table\ + grib1/11-2.table\ + grib1/11.table\ + grib1/12.table\ + grib1/13.table\ + grib1/2.0.1.table\ + grib1/2.0.2.table\ + grib1/2.0.3.table\ + grib1/2.128.table\ + grib1/2.253.128.table\ + grib1/2.46.254.table\ + grib1/2.98.128.table\ + grib1/2.98.129.table\ + grib1/2.98.130.table\ + grib1/2.98.131.table\ + grib1/2.98.132.table\ + grib1/2.98.133.table\ + grib1/2.98.140.table\ + grib1/2.98.150.table\ + grib1/2.98.151.table\ + grib1/2.98.160.table\ + grib1/2.98.162.table\ + grib1/2.98.170.table\ + grib1/2.98.171.table\ + grib1/2.98.172.table\ + grib1/2.98.173.table\ + grib1/2.98.174.table\ + grib1/2.98.175.table\ + grib1/2.98.180.table\ + grib1/2.98.190.table\ + grib1/2.98.200.table\ + grib1/2.98.201.table\ + grib1/2.98.210.table\ + grib1/2.98.211.table\ + grib1/2.98.220.table\ + grib1/2.98.228.table\ + grib1/2.98.230.table\ + grib1/2.table\ + grib1/3.table\ + grib1/4.table\ + grib1/5.table\ + grib1/6.table\ + grib1/7.table\ + grib1/8.table\ + grib1/9.table\ + grib1/boot.def\ + grib1/cfName.def\ + grib1/cluster_domain.def\ + grib1/data.grid_ieee.def\ + grib1/data.grid_jpeg.def\ + grib1/data.grid_second_order.def\ + grib1/data.grid_second_order_SPD1.def\ + grib1/data.grid_second_order_SPD2.def\ + grib1/data.grid_second_order_SPD3.def\ + grib1/data.grid_second_order_constant_width.def\ + grib1/data.grid_second_order_general_grib1.def\ + grib1/data.grid_second_order_no_SPD.def\ + grib1/data.grid_second_order_row_by_row.def\ + grib1/data.grid_simple.def\ + grib1/data.grid_simple_matrix.def\ + grib1/data.spectral_complex.def\ + grib1/data.spectral_ieee.def\ + grib1/data.spectral_simple.def\ + grib1/gds_not_present_bitmap.def\ + grib1/grid.192.78.3.10.table\ + grib1/grid.192.78.3.9.table\ + grib1/grid_21.def\ + grib1/grid_22.def\ + grib1/grid_23.def\ + grib1/grid_24.def\ + grib1/grid_25.def\ + grib1/grid_26.def\ + grib1/grid_61.def\ + grib1/grid_62.def\ + grib1/grid_63.def\ + grib1/grid_64.def\ + grib1/grid_definition_0.def\ + grib1/grid_definition_1.def\ + grib1/grid_definition_10.def\ + grib1/grid_definition_13.def\ + grib1/grid_definition_14.def\ + grib1/grid_definition_192.78.def\ + grib1/grid_definition_192.98.def\ + grib1/grid_definition_193.98.def\ + grib1/grid_definition_20.def\ + grib1/grid_definition_24.def\ + grib1/grid_definition_3.def\ + grib1/grid_definition_30.def\ + grib1/grid_definition_34.def\ + grib1/grid_definition_4.def\ + grib1/grid_definition_5.def\ + grib1/grid_definition_50.def\ + grib1/grid_definition_60.def\ + grib1/grid_definition_70.def\ + grib1/grid_definition_8.def\ + grib1/grid_definition_80.def\ + grib1/grid_definition_90.def\ + grib1/grid_definition_gaussian.def\ + grib1/grid_definition_lambert.def\ + grib1/grid_definition_latlon.def\ + grib1/grid_definition_spherical_harmonics.def\ + grib1/grid_first_last_resandcomp.def\ + grib1/grid_rotation.def\ + grib1/grid_stretching.def\ + grib1/local.1.def\ + grib1/local.13.table\ + grib1/local.214.1.def\ + grib1/local.214.244.def\ + grib1/local.214.245.def\ + grib1/local.214.def\ + grib1/local.253.def\ + grib1/local.254.def\ + grib1/local.34.def\ + grib1/local.46.def\ + grib1/local.54.def\ + grib1/local.7.1.def\ + grib1/local.7.def\ + grib1/local.78.def\ + grib1/local.80.def\ + grib1/local.96.def\ + grib1/local.98.1.def\ + grib1/local.98.10.def\ + grib1/local.98.11.def\ + grib1/local.98.13.def\ + grib1/local.98.14.def\ + grib1/local.98.15.def\ + grib1/local.98.16.def\ + grib1/local.98.17.def\ + grib1/local.98.18.def\ + grib1/local.98.19.def\ + grib1/local.98.190.def\ + grib1/local.98.191.def\ + grib1/local.98.192.def\ + grib1/local.98.2.def\ + grib1/local.98.20.def\ + grib1/local.98.21.def\ + grib1/local.98.218.def\ + grib1/local.98.23.def\ + grib1/local.98.24.def\ + grib1/local.98.244.def\ + grib1/local.98.245.def\ + grib1/local.98.25.def\ + grib1/local.98.26.def\ + grib1/local.98.27.def\ + grib1/local.98.28.def\ + grib1/local.98.29.def\ + grib1/local.98.3.def\ + grib1/local.98.30.def\ + grib1/local.98.31.def\ + grib1/local.98.32.def\ + grib1/local.98.33.def\ + grib1/local.98.35.def\ + grib1/local.98.36.def\ + grib1/local.98.37.def\ + grib1/local.98.38.def\ + grib1/local.98.39.def\ + grib1/local.98.4.def\ + grib1/local.98.40.def\ + grib1/local.98.5.def\ + grib1/local.98.50.def\ + grib1/local.98.6.def\ + grib1/local.98.7.def\ + grib1/local.98.8.def\ + grib1/local.98.9.def\ + grib1/local.98.def\ + grib1/localDefinitionNumber.96.table\ + grib1/localDefinitionNumber.98.table\ + grib1/local_no_mars.98.1.def\ + grib1/local_no_mars.98.24.def\ + grib1/ls.def\ + grib1/mars_labeling.23.def\ + grib1/mars_labeling.4.def\ + grib1/mars_labeling.def\ + grib1/name.def\ + grib1/ocean.1.table\ + grib1/paramId.def\ + grib1/precision.table\ + grib1/predefined_grid.def\ + grib1/regimes.table\ + grib1/resolution_flags.def\ + grib1/scanning_mode.def\ + grib1/section.0.def\ + grib1/section.1.def\ + grib1/section.2.def\ + grib1/section.3.def\ + grib1/section.4.def\ + grib1/section.5.def\ + grib1/sensitive_area_domain.def\ + grib1/shortName.def\ + grib1/tube_domain.def\ + grib1/units.def + +definitionsgrib1_localConcepts_ammcdir = @GRIB_DEFINITION_PATH@/grib1/localConcepts/ammc +dist_definitionsgrib1_localConcepts_ammc_DATA = \ + grib1/localConcepts/ammc/name.def\ + grib1/localConcepts/ammc/paramId.def\ + grib1/localConcepts/ammc/shortName.def\ + grib1/localConcepts/ammc/units.def + +definitionsgrib1_localConcepts_cnmcdir = @GRIB_DEFINITION_PATH@/grib1/localConcepts/cnmc +dist_definitionsgrib1_localConcepts_cnmc_DATA = \ + grib1/localConcepts/cnmc/name.def\ + grib1/localConcepts/cnmc/paramId.def\ + grib1/localConcepts/cnmc/shortName.def\ + grib1/localConcepts/cnmc/units.def + +definitionsgrib1_localConcepts_ecmfdir = @GRIB_DEFINITION_PATH@/grib1/localConcepts/ecmf +dist_definitionsgrib1_localConcepts_ecmf_DATA = \ + grib1/localConcepts/ecmf/cfName.def\ + grib1/localConcepts/ecmf/name.def\ + grib1/localConcepts/ecmf/paramId.def\ + grib1/localConcepts/ecmf/shortName.def\ + grib1/localConcepts/ecmf/units.def + +definitionsgrib1_localConcepts_edzwdir = @GRIB_DEFINITION_PATH@/grib1/localConcepts/edzw +dist_definitionsgrib1_localConcepts_edzw_DATA = \ + grib1/localConcepts/edzw/name.def\ + grib1/localConcepts/edzw/paramId.def\ + grib1/localConcepts/edzw/shortName.def\ + grib1/localConcepts/edzw/units.def + +definitionsgrib1_localConcepts_lfpwdir = @GRIB_DEFINITION_PATH@/grib1/localConcepts/lfpw +dist_definitionsgrib1_localConcepts_lfpw_DATA = \ + grib1/localConcepts/lfpw/name.def\ + grib1/localConcepts/lfpw/paramId.def\ + grib1/localConcepts/lfpw/shortName.def\ + grib1/localConcepts/lfpw/units.def + +definitionsgrib1_localConcepts_sbsjdir = @GRIB_DEFINITION_PATH@/grib1/localConcepts/sbsj +dist_definitionsgrib1_localConcepts_sbsj_DATA = \ + grib1/localConcepts/sbsj/name.def\ + grib1/localConcepts/sbsj/paramId.def\ + grib1/localConcepts/sbsj/shortName.def\ + grib1/localConcepts/sbsj/units.def + +definitionsgrib2dir = @GRIB_DEFINITION_PATH@/grib2 +dist_definitionsgrib2_DATA = \ + grib2/boot.def\ + grib2/boot_multifield.def\ + grib2/cfName.def\ + grib2/dimension.0.table\ + grib2/dimensionTableNumber.table\ + grib2/dimensionType.table\ + grib2/grib2LocalSectionNumber.98.table\ + grib2/local.98.0.def\ + grib2/local.98.1.def\ + grib2/local.98.11.def\ + grib2/local.98.15.def\ + grib2/local.98.16.def\ + grib2/local.98.18.def\ + grib2/local.98.20.def\ + grib2/local.98.21.def\ + grib2/local.98.24.def\ + grib2/local.98.25.def\ + grib2/local.98.26.def\ + grib2/local.98.28.def\ + grib2/local.98.30.def\ + grib2/local.98.300.def\ + grib2/local.98.36.def\ + grib2/local.98.38.def\ + grib2/local.98.39.def\ + grib2/local.98.500.def\ + grib2/local.98.7.def\ + grib2/local.98.9.def\ + grib2/local.98.def\ + grib2/local.tigge.1.def\ + grib2/ls.def\ + grib2/mars_labeling.def\ + grib2/meta.def\ + grib2/name.def\ + grib2/paramId.def\ + grib2/parameters.def\ + grib2/products_0.def\ + grib2/products_1.def\ + grib2/products_2.def\ + grib2/products_3.def\ + grib2/products_4.def\ + grib2/products_5.def\ + grib2/rules.def\ + grib2/section.0.def\ + grib2/section.1.def\ + grib2/section.2.def\ + grib2/section.3.def\ + grib2/section.4.def\ + grib2/section.5.def\ + grib2/section.6.def\ + grib2/section.7.def\ + grib2/section.8.def\ + grib2/sections.def\ + grib2/shortName.def\ + grib2/template.3.0.def\ + grib2/template.3.1.def\ + grib2/template.3.10.def\ + grib2/template.3.100.def\ + grib2/template.3.1000.def\ + grib2/template.3.101.def\ + grib2/template.3.110.def\ + grib2/template.3.1100.def\ + grib2/template.3.12.def\ + grib2/template.3.120.def\ + grib2/template.3.1200.def\ + grib2/template.3.130.def\ + grib2/template.3.140.def\ + grib2/template.3.2.def\ + grib2/template.3.20.def\ + grib2/template.3.3.def\ + grib2/template.3.30.def\ + grib2/template.3.31.def\ + grib2/template.3.4.def\ + grib2/template.3.40.def\ + grib2/template.3.41.def\ + grib2/template.3.42.def\ + grib2/template.3.43.def\ + grib2/template.3.5.def\ + grib2/template.3.50.def\ + grib2/template.3.51.def\ + grib2/template.3.52.def\ + grib2/template.3.53.def\ + grib2/template.3.90.def\ + grib2/template.3.gaussian.def\ + grib2/template.3.grid.def\ + grib2/template.3.latlon.def\ + grib2/template.3.latlon_vares.def\ + grib2/template.3.resolution_flags.def\ + grib2/template.3.rotation.def\ + grib2/template.3.scanning_mode.def\ + grib2/template.3.shape_of_the_earth.def\ + grib2/template.3.spherical_harmonics.def\ + grib2/template.3.stretching.def\ + grib2/template.4.0.def\ + grib2/template.4.1.def\ + grib2/template.4.10.def\ + grib2/template.4.1000.def\ + grib2/template.4.1001.def\ + grib2/template.4.1002.def\ + grib2/template.4.11.def\ + grib2/template.4.1100.def\ + grib2/template.4.1101.def\ + grib2/template.4.12.def\ + grib2/template.4.13.def\ + grib2/template.4.14.def\ + grib2/template.4.15.def\ + grib2/template.4.2.def\ + grib2/template.4.20.def\ + grib2/template.4.2000.def\ + grib2/template.4.254.def\ + grib2/template.4.3.def\ + grib2/template.4.30.def\ + grib2/template.4.31.def\ + grib2/template.4.311.def\ + grib2/template.4.32.def\ + grib2/template.4.4.def\ + grib2/template.4.40.def\ + grib2/template.4.40033.def\ + grib2/template.4.40034.def\ + grib2/template.4.40052.def\ + grib2/template.4.41.def\ + grib2/template.4.42.def\ + grib2/template.4.43.def\ + grib2/template.4.44.def\ + grib2/template.4.45.def\ + grib2/template.4.46.def\ + grib2/template.4.47.def\ + grib2/template.4.48.def\ + grib2/template.4.5.def\ + grib2/template.4.51.def\ + grib2/template.4.6.def\ + grib2/template.4.7.def\ + grib2/template.4.8.def\ + grib2/template.4.9.def\ + grib2/template.4.91.def\ + grib2/template.4.categorical.def\ + grib2/template.4.circular_cluster.def\ + grib2/template.4.derived.def\ + grib2/template.4.eps.def\ + grib2/template.4.horizontal.def\ + grib2/template.4.parameter.def\ + grib2/template.4.parameter_aerosol.def\ + grib2/template.4.parameter_aerosol_optical.def\ + grib2/template.4.parameter_chemical.def\ + grib2/template.4.parameter_partition.def\ + grib2/template.4.percentile.def\ + grib2/template.4.point_in_time.def\ + grib2/template.4.probability.def\ + grib2/template.4.rectangular_cluster.def\ + grib2/template.4.statistical.def\ + grib2/template.5.0.def\ + grib2/template.5.1.def\ + grib2/template.5.2.def\ + grib2/template.5.3.def\ + grib2/template.5.4.def\ + grib2/template.5.40.def\ + grib2/template.5.40000.def\ + grib2/template.5.40010.def\ + grib2/template.5.41.def\ + grib2/template.5.42.def\ + grib2/template.5.50.def\ + grib2/template.5.50000.def\ + grib2/template.5.50001.def\ + grib2/template.5.50002.def\ + grib2/template.5.51.def\ + grib2/template.5.6.def\ + grib2/template.5.61.def\ + grib2/template.5.original_values.def\ + grib2/template.5.packing.def\ + grib2/template.5.second_order.def\ + grib2/template.7.0.def\ + grib2/template.7.1.def\ + grib2/template.7.2.def\ + grib2/template.7.3.def\ + grib2/template.7.4.def\ + grib2/template.7.40.def\ + grib2/template.7.40000.def\ + grib2/template.7.40010.def\ + grib2/template.7.41.def\ + grib2/template.7.42.def\ + grib2/template.7.50.def\ + grib2/template.7.50000.def\ + grib2/template.7.50001.def\ + grib2/template.7.50002.def\ + grib2/template.7.51.def\ + grib2/template.7.6.def\ + grib2/template.7.61.def\ + grib2/template.7.second_order.def\ + grib2/template.second_order.def\ + grib2/tiggeLocalVersion.table\ + grib2/tigge_name.def\ + grib2/tigge_parameter.def\ + grib2/tigge_short_name.def\ + grib2/tigge_suiteName.table\ + grib2/units.def + +definitionsgrib2_localdir = @GRIB_DEFINITION_PATH@/grib2/local +dist_definitionsgrib2_local_DATA = \ + grib2/local/2.0.table + +definitionsgrib2_local_1098dir = @GRIB_DEFINITION_PATH@/grib2/local/1098 +dist_definitionsgrib2_local_1098_DATA = \ + grib2/local/1098/2.1.table\ + grib2/local/1098/centres.table\ + grib2/local/1098/models.table\ + grib2/local/1098/template.2.0.def + +definitionsgrib2_localConcepts_cnmcdir = @GRIB_DEFINITION_PATH@/grib2/localConcepts/cnmc +dist_definitionsgrib2_localConcepts_cnmc_DATA = \ + grib2/localConcepts/cnmc/name.def\ + grib2/localConcepts/cnmc/paramId.def\ + grib2/localConcepts/cnmc/shortName.def\ + grib2/localConcepts/cnmc/units.def + +definitionsgrib2_localConcepts_ecmfdir = @GRIB_DEFINITION_PATH@/grib2/localConcepts/ecmf +dist_definitionsgrib2_localConcepts_ecmf_DATA = \ + grib2/localConcepts/ecmf/cfName.def\ + grib2/localConcepts/ecmf/name.def\ + grib2/localConcepts/ecmf/paramId.def\ + grib2/localConcepts/ecmf/shortName.def\ + grib2/localConcepts/ecmf/units.def + +definitionsgrib2_localConcepts_edzwdir = @GRIB_DEFINITION_PATH@/grib2/localConcepts/edzw +dist_definitionsgrib2_localConcepts_edzw_DATA = \ + grib2/localConcepts/edzw/name.def\ + grib2/localConcepts/edzw/paramId.def\ + grib2/localConcepts/edzw/shortName.def\ + grib2/localConcepts/edzw/units.def + +definitionsgrib2_localConcepts_kwbcdir = @GRIB_DEFINITION_PATH@/grib2/localConcepts/kwbc +dist_definitionsgrib2_localConcepts_kwbc_DATA = \ + grib2/localConcepts/kwbc/name.def\ + grib2/localConcepts/kwbc/paramId.def\ + grib2/localConcepts/kwbc/shortName.def\ + grib2/localConcepts/kwbc/units.def + +definitionsgrib2_localConcepts_lfpwdir = @GRIB_DEFINITION_PATH@/grib2/localConcepts/lfpw +dist_definitionsgrib2_localConcepts_lfpw_DATA = \ + grib2/localConcepts/lfpw/name.def\ + grib2/localConcepts/lfpw/paramId.def\ + grib2/localConcepts/lfpw/shortName.def\ + grib2/localConcepts/lfpw/units.def + +definitionsgrib2_localConcepts_lfpw1dir = @GRIB_DEFINITION_PATH@/grib2/localConcepts/lfpw1 +dist_definitionsgrib2_localConcepts_lfpw1_DATA = \ + grib2/localConcepts/lfpw1/name.def\ + grib2/localConcepts/lfpw1/paramId.def\ + grib2/localConcepts/lfpw1/shortName.def\ + grib2/localConcepts/lfpw1/units.def + +definitionsgrib2_tablesdir = @GRIB_DEFINITION_PATH@/grib2/tables +dist_definitionsgrib2_tables_DATA = \ + grib2/tables/0.0.table\ + grib2/tables/1.0.table + +definitionsgrib2_tables_0dir = @GRIB_DEFINITION_PATH@/grib2/tables/0 +dist_definitionsgrib2_tables_0_DATA = \ + grib2/tables/0/0.0.table\ + grib2/tables/0/1.0.table\ + grib2/tables/0/1.1.table\ + grib2/tables/0/1.2.table\ + grib2/tables/0/1.3.table\ + grib2/tables/0/1.4.table\ + grib2/tables/0/3.0.table\ + grib2/tables/0/3.1.table\ + grib2/tables/0/3.10.table\ + grib2/tables/0/3.11.table\ + grib2/tables/0/3.15.table\ + grib2/tables/0/3.2.table\ + grib2/tables/0/3.20.table\ + grib2/tables/0/3.21.table\ + grib2/tables/0/3.3.table\ + grib2/tables/0/3.4.table\ + grib2/tables/0/3.5.table\ + grib2/tables/0/3.6.table\ + grib2/tables/0/3.7.table\ + grib2/tables/0/3.8.table\ + grib2/tables/0/3.9.table\ + grib2/tables/0/4.0.table\ + grib2/tables/0/4.1.0.table\ + grib2/tables/0/4.1.1.table\ + grib2/tables/0/4.1.10.table\ + grib2/tables/0/4.1.2.table\ + grib2/tables/0/4.1.3.table\ + grib2/tables/0/4.1.table\ + grib2/tables/0/4.10.table\ + grib2/tables/0/4.11.table\ + grib2/tables/0/4.12.table\ + grib2/tables/0/4.13.table\ + grib2/tables/0/4.14.table\ + grib2/tables/0/4.15.table\ + grib2/tables/0/4.151.table\ + grib2/tables/0/4.2.0.0.table\ + grib2/tables/0/4.2.0.1.table\ + grib2/tables/0/4.2.0.13.table\ + grib2/tables/0/4.2.0.14.table\ + grib2/tables/0/4.2.0.15.table\ + grib2/tables/0/4.2.0.18.table\ + grib2/tables/0/4.2.0.19.table\ + grib2/tables/0/4.2.0.190.table\ + grib2/tables/0/4.2.0.191.table\ + grib2/tables/0/4.2.0.2.table\ + grib2/tables/0/4.2.0.20.table\ + grib2/tables/0/4.2.0.3.table\ + grib2/tables/0/4.2.0.4.table\ + grib2/tables/0/4.2.0.5.table\ + grib2/tables/0/4.2.0.6.table\ + grib2/tables/0/4.2.0.7.table\ + grib2/tables/0/4.2.1.0.table\ + grib2/tables/0/4.2.1.1.table\ + grib2/tables/0/4.2.10.0.table\ + grib2/tables/0/4.2.10.1.table\ + grib2/tables/0/4.2.10.2.table\ + grib2/tables/0/4.2.10.3.table\ + grib2/tables/0/4.2.10.4.table\ + grib2/tables/0/4.2.2.0.table\ + grib2/tables/0/4.2.2.3.table\ + grib2/tables/0/4.2.3.0.table\ + grib2/tables/0/4.2.3.1.table\ + grib2/tables/0/4.2.table\ + grib2/tables/0/4.201.table\ + grib2/tables/0/4.202.table\ + grib2/tables/0/4.203.table\ + grib2/tables/0/4.204.table\ + grib2/tables/0/4.205.table\ + grib2/tables/0/4.206.table\ + grib2/tables/0/4.207.table\ + grib2/tables/0/4.208.table\ + grib2/tables/0/4.209.table\ + grib2/tables/0/4.210.table\ + grib2/tables/0/4.211.table\ + grib2/tables/0/4.212.table\ + grib2/tables/0/4.213.table\ + grib2/tables/0/4.215.table\ + grib2/tables/0/4.216.table\ + grib2/tables/0/4.217.table\ + grib2/tables/0/4.220.table\ + grib2/tables/0/4.221.table\ + grib2/tables/0/4.230.table\ + grib2/tables/0/4.3.table\ + grib2/tables/0/4.4.table\ + grib2/tables/0/4.5.table\ + grib2/tables/0/4.6.table\ + grib2/tables/0/4.7.table\ + grib2/tables/0/4.8.table\ + grib2/tables/0/4.9.table\ + grib2/tables/0/4.91.table\ + grib2/tables/0/5.0.table\ + grib2/tables/0/5.1.table\ + grib2/tables/0/5.2.table\ + grib2/tables/0/5.3.table\ + grib2/tables/0/5.4.table\ + grib2/tables/0/5.40.table\ + grib2/tables/0/5.40000.table\ + grib2/tables/0/5.5.table\ + grib2/tables/0/5.6.table\ + grib2/tables/0/5.7.table\ + grib2/tables/0/5.8.table\ + grib2/tables/0/5.9.table\ + grib2/tables/0/6.0.table\ + grib2/tables/0/stepType.table + +definitionsgrib2_tables_1dir = @GRIB_DEFINITION_PATH@/grib2/tables/1 +dist_definitionsgrib2_tables_1_DATA = \ + grib2/tables/1/0.0.table\ + grib2/tables/1/1.0.table\ + grib2/tables/1/1.1.table\ + grib2/tables/1/1.2.table\ + grib2/tables/1/1.3.table\ + grib2/tables/1/1.4.table\ + grib2/tables/1/3.0.table\ + grib2/tables/1/3.1.table\ + grib2/tables/1/3.10.table\ + grib2/tables/1/3.11.table\ + grib2/tables/1/3.15.table\ + grib2/tables/1/3.2.table\ + grib2/tables/1/3.20.table\ + grib2/tables/1/3.21.table\ + grib2/tables/1/3.3.table\ + grib2/tables/1/3.4.table\ + grib2/tables/1/3.5.table\ + grib2/tables/1/3.6.table\ + grib2/tables/1/3.7.table\ + grib2/tables/1/3.8.table\ + grib2/tables/1/3.9.table\ + grib2/tables/1/4.0.table\ + grib2/tables/1/4.1.0.table\ + grib2/tables/1/4.1.1.table\ + grib2/tables/1/4.1.10.table\ + grib2/tables/1/4.1.2.table\ + grib2/tables/1/4.1.3.table\ + grib2/tables/1/4.1.table\ + grib2/tables/1/4.10.table\ + grib2/tables/1/4.11.table\ + grib2/tables/1/4.12.table\ + grib2/tables/1/4.13.table\ + grib2/tables/1/4.14.table\ + grib2/tables/1/4.15.table\ + grib2/tables/1/4.151.table\ + grib2/tables/1/4.2.0.0.table\ + grib2/tables/1/4.2.0.1.table\ + grib2/tables/1/4.2.0.13.table\ + grib2/tables/1/4.2.0.14.table\ + grib2/tables/1/4.2.0.15.table\ + grib2/tables/1/4.2.0.18.table\ + grib2/tables/1/4.2.0.19.table\ + grib2/tables/1/4.2.0.190.table\ + grib2/tables/1/4.2.0.191.table\ + grib2/tables/1/4.2.0.2.table\ + grib2/tables/1/4.2.0.20.table\ + grib2/tables/1/4.2.0.3.table\ + grib2/tables/1/4.2.0.4.table\ + grib2/tables/1/4.2.0.5.table\ + grib2/tables/1/4.2.0.6.table\ + grib2/tables/1/4.2.0.7.table\ + grib2/tables/1/4.2.1.0.table\ + grib2/tables/1/4.2.1.1.table\ + grib2/tables/1/4.2.10.0.table\ + grib2/tables/1/4.2.10.1.table\ + grib2/tables/1/4.2.10.2.table\ + grib2/tables/1/4.2.10.3.table\ + grib2/tables/1/4.2.10.4.table\ + grib2/tables/1/4.2.2.0.table\ + grib2/tables/1/4.2.2.3.table\ + grib2/tables/1/4.2.3.0.table\ + grib2/tables/1/4.2.3.1.table\ + grib2/tables/1/4.2.table\ + grib2/tables/1/4.201.table\ + grib2/tables/1/4.202.table\ + grib2/tables/1/4.203.table\ + grib2/tables/1/4.204.table\ + grib2/tables/1/4.205.table\ + grib2/tables/1/4.206.table\ + grib2/tables/1/4.207.table\ + grib2/tables/1/4.208.table\ + grib2/tables/1/4.209.table\ + grib2/tables/1/4.210.table\ + grib2/tables/1/4.211.table\ + grib2/tables/1/4.212.table\ + grib2/tables/1/4.213.table\ + grib2/tables/1/4.215.table\ + grib2/tables/1/4.216.table\ + grib2/tables/1/4.217.table\ + grib2/tables/1/4.220.table\ + grib2/tables/1/4.221.table\ + grib2/tables/1/4.230.table\ + grib2/tables/1/4.3.table\ + grib2/tables/1/4.4.table\ + grib2/tables/1/4.5.table\ + grib2/tables/1/4.6.table\ + grib2/tables/1/4.7.table\ + grib2/tables/1/4.8.table\ + grib2/tables/1/4.9.table\ + grib2/tables/1/4.91.table\ + grib2/tables/1/5.0.table\ + grib2/tables/1/5.1.table\ + grib2/tables/1/5.2.table\ + grib2/tables/1/5.3.table\ + grib2/tables/1/5.4.table\ + grib2/tables/1/5.40.table\ + grib2/tables/1/5.40000.table\ + grib2/tables/1/5.5.table\ + grib2/tables/1/5.6.table\ + grib2/tables/1/5.7.table\ + grib2/tables/1/5.8.table\ + grib2/tables/1/5.9.table\ + grib2/tables/1/6.0.table\ + grib2/tables/1/stepType.table + +definitionsgrib2_tables_10dir = @GRIB_DEFINITION_PATH@/grib2/tables/10 +dist_definitionsgrib2_tables_10_DATA = \ + grib2/tables/10/0.0.table\ + grib2/tables/10/1.0.table\ + grib2/tables/10/1.1.table\ + grib2/tables/10/1.2.table\ + grib2/tables/10/1.3.table\ + grib2/tables/10/1.4.table\ + grib2/tables/10/3.0.table\ + grib2/tables/10/3.1.table\ + grib2/tables/10/3.10.table\ + grib2/tables/10/3.11.table\ + grib2/tables/10/3.15.table\ + grib2/tables/10/3.2.table\ + grib2/tables/10/3.20.table\ + grib2/tables/10/3.21.table\ + grib2/tables/10/3.3.table\ + grib2/tables/10/3.4.table\ + grib2/tables/10/3.5.table\ + grib2/tables/10/3.6.table\ + grib2/tables/10/3.7.table\ + grib2/tables/10/3.8.table\ + grib2/tables/10/3.9.table\ + grib2/tables/10/4.0.table\ + grib2/tables/10/4.1.0.table\ + grib2/tables/10/4.1.1.table\ + grib2/tables/10/4.1.10.table\ + grib2/tables/10/4.1.192.table\ + grib2/tables/10/4.1.2.table\ + grib2/tables/10/4.1.3.table\ + grib2/tables/10/4.1.table\ + grib2/tables/10/4.10.table\ + grib2/tables/10/4.11.table\ + grib2/tables/10/4.12.table\ + grib2/tables/10/4.13.table\ + grib2/tables/10/4.14.table\ + grib2/tables/10/4.15.table\ + grib2/tables/10/4.151.table\ + grib2/tables/10/4.192.table\ + grib2/tables/10/4.2.0.0.table\ + grib2/tables/10/4.2.0.1.table\ + grib2/tables/10/4.2.0.13.table\ + grib2/tables/10/4.2.0.14.table\ + grib2/tables/10/4.2.0.15.table\ + grib2/tables/10/4.2.0.16.table\ + grib2/tables/10/4.2.0.18.table\ + grib2/tables/10/4.2.0.19.table\ + grib2/tables/10/4.2.0.190.table\ + grib2/tables/10/4.2.0.191.table\ + grib2/tables/10/4.2.0.2.table\ + grib2/tables/10/4.2.0.20.table\ + grib2/tables/10/4.2.0.3.table\ + grib2/tables/10/4.2.0.4.table\ + grib2/tables/10/4.2.0.5.table\ + grib2/tables/10/4.2.0.6.table\ + grib2/tables/10/4.2.0.7.table\ + grib2/tables/10/4.2.1.0.table\ + grib2/tables/10/4.2.1.1.table\ + grib2/tables/10/4.2.1.2.table\ + grib2/tables/10/4.2.10.0.table\ + grib2/tables/10/4.2.10.1.table\ + grib2/tables/10/4.2.10.191.table\ + grib2/tables/10/4.2.10.2.table\ + grib2/tables/10/4.2.10.3.table\ + grib2/tables/10/4.2.10.4.table\ + grib2/tables/10/4.2.2.0.table\ + grib2/tables/10/4.2.2.3.table\ + grib2/tables/10/4.2.2.4.table\ + grib2/tables/10/4.2.3.0.table\ + grib2/tables/10/4.2.3.1.table\ + grib2/tables/10/4.2.table\ + grib2/tables/10/4.201.table\ + grib2/tables/10/4.202.table\ + grib2/tables/10/4.203.table\ + grib2/tables/10/4.204.table\ + grib2/tables/10/4.205.table\ + grib2/tables/10/4.206.table\ + grib2/tables/10/4.207.table\ + grib2/tables/10/4.208.table\ + grib2/tables/10/4.209.table\ + grib2/tables/10/4.210.table\ + grib2/tables/10/4.211.table\ + grib2/tables/10/4.212.table\ + grib2/tables/10/4.213.table\ + grib2/tables/10/4.215.table\ + grib2/tables/10/4.216.table\ + grib2/tables/10/4.217.table\ + grib2/tables/10/4.218.table\ + grib2/tables/10/4.219.table\ + grib2/tables/10/4.220.table\ + grib2/tables/10/4.221.table\ + grib2/tables/10/4.222.table\ + grib2/tables/10/4.223.table\ + grib2/tables/10/4.224.table\ + grib2/tables/10/4.225.table\ + grib2/tables/10/4.227.table\ + grib2/tables/10/4.230.table\ + grib2/tables/10/4.233.table\ + grib2/tables/10/4.234.table\ + grib2/tables/10/4.235.table\ + grib2/tables/10/4.3.table\ + grib2/tables/10/4.4.table\ + grib2/tables/10/4.5.table\ + grib2/tables/10/4.6.table\ + grib2/tables/10/4.7.table\ + grib2/tables/10/4.8.table\ + grib2/tables/10/4.9.table\ + grib2/tables/10/4.91.table\ + grib2/tables/10/5.0.table\ + grib2/tables/10/5.1.table\ + grib2/tables/10/5.2.table\ + grib2/tables/10/5.3.table\ + grib2/tables/10/5.4.table\ + grib2/tables/10/5.40.table\ + grib2/tables/10/5.40000.table\ + grib2/tables/10/5.5.table\ + grib2/tables/10/5.50002.table\ + grib2/tables/10/5.6.table\ + grib2/tables/10/5.7.table\ + grib2/tables/10/5.8.table\ + grib2/tables/10/5.9.table\ + grib2/tables/10/6.0.table\ + grib2/tables/10/stepType.table + +definitionsgrib2_tables_2dir = @GRIB_DEFINITION_PATH@/grib2/tables/2 +dist_definitionsgrib2_tables_2_DATA = \ + grib2/tables/2/0.0.table\ + grib2/tables/2/1.0.table\ + grib2/tables/2/1.1.table\ + grib2/tables/2/1.2.table\ + grib2/tables/2/1.3.table\ + grib2/tables/2/1.4.table\ + grib2/tables/2/3.0.table\ + grib2/tables/2/3.1.table\ + grib2/tables/2/3.10.table\ + grib2/tables/2/3.11.table\ + grib2/tables/2/3.15.table\ + grib2/tables/2/3.2.table\ + grib2/tables/2/3.20.table\ + grib2/tables/2/3.21.table\ + grib2/tables/2/3.3.table\ + grib2/tables/2/3.4.table\ + grib2/tables/2/3.5.table\ + grib2/tables/2/3.6.table\ + grib2/tables/2/3.7.table\ + grib2/tables/2/3.8.table\ + grib2/tables/2/3.9.table\ + grib2/tables/2/4.0.table\ + grib2/tables/2/4.1.0.table\ + grib2/tables/2/4.1.1.table\ + grib2/tables/2/4.1.10.table\ + grib2/tables/2/4.1.2.table\ + grib2/tables/2/4.1.3.table\ + grib2/tables/2/4.1.table\ + grib2/tables/2/4.10.table\ + grib2/tables/2/4.11.table\ + grib2/tables/2/4.12.table\ + grib2/tables/2/4.13.table\ + grib2/tables/2/4.14.table\ + grib2/tables/2/4.15.table\ + grib2/tables/2/4.151.table\ + grib2/tables/2/4.2.0.0.table\ + grib2/tables/2/4.2.0.1.table\ + grib2/tables/2/4.2.0.13.table\ + grib2/tables/2/4.2.0.14.table\ + grib2/tables/2/4.2.0.15.table\ + grib2/tables/2/4.2.0.18.table\ + grib2/tables/2/4.2.0.19.table\ + grib2/tables/2/4.2.0.190.table\ + grib2/tables/2/4.2.0.191.table\ + grib2/tables/2/4.2.0.2.table\ + grib2/tables/2/4.2.0.20.table\ + grib2/tables/2/4.2.0.3.table\ + grib2/tables/2/4.2.0.4.table\ + grib2/tables/2/4.2.0.5.table\ + grib2/tables/2/4.2.0.6.table\ + grib2/tables/2/4.2.0.7.table\ + grib2/tables/2/4.2.1.0.table\ + grib2/tables/2/4.2.1.1.table\ + grib2/tables/2/4.2.10.0.table\ + grib2/tables/2/4.2.10.1.table\ + grib2/tables/2/4.2.10.2.table\ + grib2/tables/2/4.2.10.3.table\ + grib2/tables/2/4.2.10.4.table\ + grib2/tables/2/4.2.2.0.table\ + grib2/tables/2/4.2.2.3.table\ + grib2/tables/2/4.2.3.0.table\ + grib2/tables/2/4.2.3.1.table\ + grib2/tables/2/4.2.table\ + grib2/tables/2/4.201.table\ + grib2/tables/2/4.202.table\ + grib2/tables/2/4.203.table\ + grib2/tables/2/4.204.table\ + grib2/tables/2/4.205.table\ + grib2/tables/2/4.206.table\ + grib2/tables/2/4.207.table\ + grib2/tables/2/4.208.table\ + grib2/tables/2/4.209.table\ + grib2/tables/2/4.210.table\ + grib2/tables/2/4.211.table\ + grib2/tables/2/4.212.table\ + grib2/tables/2/4.213.table\ + grib2/tables/2/4.215.table\ + grib2/tables/2/4.216.table\ + grib2/tables/2/4.217.table\ + grib2/tables/2/4.220.table\ + grib2/tables/2/4.221.table\ + grib2/tables/2/4.230.table\ + grib2/tables/2/4.3.table\ + grib2/tables/2/4.4.table\ + grib2/tables/2/4.5.table\ + grib2/tables/2/4.6.table\ + grib2/tables/2/4.7.table\ + grib2/tables/2/4.8.table\ + grib2/tables/2/4.9.table\ + grib2/tables/2/4.91.table\ + grib2/tables/2/5.0.table\ + grib2/tables/2/5.1.table\ + grib2/tables/2/5.2.table\ + grib2/tables/2/5.3.table\ + grib2/tables/2/5.4.table\ + grib2/tables/2/5.40.table\ + grib2/tables/2/5.40000.table\ + grib2/tables/2/5.5.table\ + grib2/tables/2/5.6.table\ + grib2/tables/2/5.7.table\ + grib2/tables/2/5.8.table\ + grib2/tables/2/5.9.table\ + grib2/tables/2/6.0.table\ + grib2/tables/2/stepType.table + +definitionsgrib2_tables_3dir = @GRIB_DEFINITION_PATH@/grib2/tables/3 +dist_definitionsgrib2_tables_3_DATA = \ + grib2/tables/3/0.0.table\ + grib2/tables/3/1.0.table\ + grib2/tables/3/1.1.table\ + grib2/tables/3/1.2.table\ + grib2/tables/3/1.3.table\ + grib2/tables/3/1.4.table\ + grib2/tables/3/3.0.table\ + grib2/tables/3/3.1.table\ + grib2/tables/3/3.10.table\ + grib2/tables/3/3.11.table\ + grib2/tables/3/3.15.table\ + grib2/tables/3/3.2.table\ + grib2/tables/3/3.20.table\ + grib2/tables/3/3.21.table\ + grib2/tables/3/3.3.table\ + grib2/tables/3/3.4.table\ + grib2/tables/3/3.5.table\ + grib2/tables/3/3.6.table\ + grib2/tables/3/3.7.table\ + grib2/tables/3/3.8.table\ + grib2/tables/3/3.9.table\ + grib2/tables/3/4.0.table\ + grib2/tables/3/4.1.0.table\ + grib2/tables/3/4.1.1.table\ + grib2/tables/3/4.1.10.table\ + grib2/tables/3/4.1.2.table\ + grib2/tables/3/4.1.3.table\ + grib2/tables/3/4.1.table\ + grib2/tables/3/4.10.table\ + grib2/tables/3/4.11.table\ + grib2/tables/3/4.12.table\ + grib2/tables/3/4.13.table\ + grib2/tables/3/4.14.table\ + grib2/tables/3/4.15.table\ + grib2/tables/3/4.151.table\ + grib2/tables/3/4.2.0.0.table\ + grib2/tables/3/4.2.0.1.table\ + grib2/tables/3/4.2.0.13.table\ + grib2/tables/3/4.2.0.14.table\ + grib2/tables/3/4.2.0.15.table\ + grib2/tables/3/4.2.0.18.table\ + grib2/tables/3/4.2.0.19.table\ + grib2/tables/3/4.2.0.190.table\ + grib2/tables/3/4.2.0.191.table\ + grib2/tables/3/4.2.0.2.table\ + grib2/tables/3/4.2.0.20.table\ + grib2/tables/3/4.2.0.3.table\ + grib2/tables/3/4.2.0.4.table\ + grib2/tables/3/4.2.0.5.table\ + grib2/tables/3/4.2.0.6.table\ + grib2/tables/3/4.2.0.7.table\ + grib2/tables/3/4.2.1.0.table\ + grib2/tables/3/4.2.1.1.table\ + grib2/tables/3/4.2.10.0.table\ + grib2/tables/3/4.2.10.1.table\ + grib2/tables/3/4.2.10.2.table\ + grib2/tables/3/4.2.10.3.table\ + grib2/tables/3/4.2.10.4.table\ + grib2/tables/3/4.2.2.0.table\ + grib2/tables/3/4.2.2.3.table\ + grib2/tables/3/4.2.3.0.table\ + grib2/tables/3/4.2.3.1.table\ + grib2/tables/3/4.2.table\ + grib2/tables/3/4.201.table\ + grib2/tables/3/4.202.table\ + grib2/tables/3/4.203.table\ + grib2/tables/3/4.204.table\ + grib2/tables/3/4.205.table\ + grib2/tables/3/4.206.table\ + grib2/tables/3/4.207.table\ + grib2/tables/3/4.208.table\ + grib2/tables/3/4.209.table\ + grib2/tables/3/4.210.table\ + grib2/tables/3/4.211.table\ + grib2/tables/3/4.212.table\ + grib2/tables/3/4.213.table\ + grib2/tables/3/4.215.table\ + grib2/tables/3/4.216.table\ + grib2/tables/3/4.217.table\ + grib2/tables/3/4.220.table\ + grib2/tables/3/4.221.table\ + grib2/tables/3/4.230.table\ + grib2/tables/3/4.3.table\ + grib2/tables/3/4.4.table\ + grib2/tables/3/4.5.table\ + grib2/tables/3/4.6.table\ + grib2/tables/3/4.7.table\ + grib2/tables/3/4.8.table\ + grib2/tables/3/4.9.table\ + grib2/tables/3/4.91.table\ + grib2/tables/3/5.0.table\ + grib2/tables/3/5.1.table\ + grib2/tables/3/5.2.table\ + grib2/tables/3/5.3.table\ + grib2/tables/3/5.4.table\ + grib2/tables/3/5.40.table\ + grib2/tables/3/5.40000.table\ + grib2/tables/3/5.5.table\ + grib2/tables/3/5.50002.table\ + grib2/tables/3/5.6.table\ + grib2/tables/3/5.7.table\ + grib2/tables/3/5.8.table\ + grib2/tables/3/5.9.table\ + grib2/tables/3/6.0.table\ + grib2/tables/3/stepType.table + +definitionsgrib2_tables_4dir = @GRIB_DEFINITION_PATH@/grib2/tables/4 +dist_definitionsgrib2_tables_4_DATA = \ + grib2/tables/4/0.0.table\ + grib2/tables/4/1.0.table\ + grib2/tables/4/1.1.table\ + grib2/tables/4/1.2.table\ + grib2/tables/4/1.3.table\ + grib2/tables/4/1.4.table\ + grib2/tables/4/3.0.table\ + grib2/tables/4/3.1.table\ + grib2/tables/4/3.10.table\ + grib2/tables/4/3.11.table\ + grib2/tables/4/3.15.table\ + grib2/tables/4/3.2.table\ + grib2/tables/4/3.20.table\ + grib2/tables/4/3.21.table\ + grib2/tables/4/3.3.table\ + grib2/tables/4/3.4.table\ + grib2/tables/4/3.5.table\ + grib2/tables/4/3.6.table\ + grib2/tables/4/3.7.table\ + grib2/tables/4/3.8.table\ + grib2/tables/4/3.9.table\ + grib2/tables/4/4.0.table\ + grib2/tables/4/4.1.0.table\ + grib2/tables/4/4.1.1.table\ + grib2/tables/4/4.1.10.table\ + grib2/tables/4/4.1.192.table\ + grib2/tables/4/4.1.2.table\ + grib2/tables/4/4.1.3.table\ + grib2/tables/4/4.1.table\ + grib2/tables/4/4.10.table\ + grib2/tables/4/4.11.table\ + grib2/tables/4/4.12.table\ + grib2/tables/4/4.13.table\ + grib2/tables/4/4.14.table\ + grib2/tables/4/4.15.table\ + grib2/tables/4/4.151.table\ + grib2/tables/4/4.2.0.0.table\ + grib2/tables/4/4.2.0.1.table\ + grib2/tables/4/4.2.0.13.table\ + grib2/tables/4/4.2.0.14.table\ + grib2/tables/4/4.2.0.15.table\ + grib2/tables/4/4.2.0.18.table\ + grib2/tables/4/4.2.0.19.table\ + grib2/tables/4/4.2.0.190.table\ + grib2/tables/4/4.2.0.191.table\ + grib2/tables/4/4.2.0.2.table\ + grib2/tables/4/4.2.0.20.table\ + grib2/tables/4/4.2.0.3.table\ + grib2/tables/4/4.2.0.4.table\ + grib2/tables/4/4.2.0.5.table\ + grib2/tables/4/4.2.0.6.table\ + grib2/tables/4/4.2.0.7.table\ + grib2/tables/4/4.2.1.0.table\ + grib2/tables/4/4.2.1.1.table\ + grib2/tables/4/4.2.10.0.table\ + grib2/tables/4/4.2.10.1.table\ + grib2/tables/4/4.2.10.2.table\ + grib2/tables/4/4.2.10.3.table\ + grib2/tables/4/4.2.10.4.table\ + grib2/tables/4/4.2.2.0.table\ + grib2/tables/4/4.2.2.3.table\ + grib2/tables/4/4.2.3.0.table\ + grib2/tables/4/4.2.3.1.table\ + grib2/tables/4/4.2.table\ + grib2/tables/4/4.201.table\ + grib2/tables/4/4.202.table\ + grib2/tables/4/4.203.table\ + grib2/tables/4/4.204.table\ + grib2/tables/4/4.205.table\ + grib2/tables/4/4.206.table\ + grib2/tables/4/4.207.table\ + grib2/tables/4/4.208.table\ + grib2/tables/4/4.209.table\ + grib2/tables/4/4.210.table\ + grib2/tables/4/4.211.table\ + grib2/tables/4/4.212.table\ + grib2/tables/4/4.213.table\ + grib2/tables/4/4.215.table\ + grib2/tables/4/4.216.table\ + grib2/tables/4/4.217.table\ + grib2/tables/4/4.220.table\ + grib2/tables/4/4.221.table\ + grib2/tables/4/4.230.table\ + grib2/tables/4/4.3.table\ + grib2/tables/4/4.4.table\ + grib2/tables/4/4.5.table\ + grib2/tables/4/4.6.table\ + grib2/tables/4/4.7.table\ + grib2/tables/4/4.8.table\ + grib2/tables/4/4.9.table\ + grib2/tables/4/4.91.table\ + grib2/tables/4/5.0.table\ + grib2/tables/4/5.1.table\ + grib2/tables/4/5.2.table\ + grib2/tables/4/5.3.table\ + grib2/tables/4/5.4.table\ + grib2/tables/4/5.40.table\ + grib2/tables/4/5.40000.table\ + grib2/tables/4/5.5.table\ + grib2/tables/4/5.50002.table\ + grib2/tables/4/5.6.table\ + grib2/tables/4/5.7.table\ + grib2/tables/4/5.8.table\ + grib2/tables/4/5.9.table\ + grib2/tables/4/6.0.table\ + grib2/tables/4/stepType.table + +definitionsgrib2_tables_5dir = @GRIB_DEFINITION_PATH@/grib2/tables/5 +dist_definitionsgrib2_tables_5_DATA = \ + grib2/tables/5/0.0.table\ + grib2/tables/5/1.0.table\ + grib2/tables/5/1.1.table\ + grib2/tables/5/1.2.table\ + grib2/tables/5/1.3.table\ + grib2/tables/5/1.4.table\ + grib2/tables/5/3.0.table\ + grib2/tables/5/3.1.table\ + grib2/tables/5/3.10.table\ + grib2/tables/5/3.11.table\ + grib2/tables/5/3.15.table\ + grib2/tables/5/3.2.table\ + grib2/tables/5/3.20.table\ + grib2/tables/5/3.21.table\ + grib2/tables/5/3.3.table\ + grib2/tables/5/3.4.table\ + grib2/tables/5/3.5.table\ + grib2/tables/5/3.6.table\ + grib2/tables/5/3.7.table\ + grib2/tables/5/3.8.table\ + grib2/tables/5/3.9.table\ + grib2/tables/5/4.0.table\ + grib2/tables/5/4.1.0.table\ + grib2/tables/5/4.1.1.table\ + grib2/tables/5/4.1.10.table\ + grib2/tables/5/4.1.192.table\ + grib2/tables/5/4.1.2.table\ + grib2/tables/5/4.1.3.table\ + grib2/tables/5/4.1.table\ + grib2/tables/5/4.10.table\ + grib2/tables/5/4.11.table\ + grib2/tables/5/4.12.table\ + grib2/tables/5/4.13.table\ + grib2/tables/5/4.14.table\ + grib2/tables/5/4.15.table\ + grib2/tables/5/4.151.table\ + grib2/tables/5/4.192.table\ + grib2/tables/5/4.2.0.0.table\ + grib2/tables/5/4.2.0.1.table\ + grib2/tables/5/4.2.0.13.table\ + grib2/tables/5/4.2.0.14.table\ + grib2/tables/5/4.2.0.15.table\ + grib2/tables/5/4.2.0.18.table\ + grib2/tables/5/4.2.0.19.table\ + grib2/tables/5/4.2.0.190.table\ + grib2/tables/5/4.2.0.191.table\ + grib2/tables/5/4.2.0.2.table\ + grib2/tables/5/4.2.0.20.table\ + grib2/tables/5/4.2.0.3.table\ + grib2/tables/5/4.2.0.4.table\ + grib2/tables/5/4.2.0.5.table\ + grib2/tables/5/4.2.0.6.table\ + grib2/tables/5/4.2.0.7.table\ + grib2/tables/5/4.2.1.0.table\ + grib2/tables/5/4.2.1.1.table\ + grib2/tables/5/4.2.10.0.table\ + grib2/tables/5/4.2.10.1.table\ + grib2/tables/5/4.2.10.191.table\ + grib2/tables/5/4.2.10.2.table\ + grib2/tables/5/4.2.10.3.table\ + grib2/tables/5/4.2.10.4.table\ + grib2/tables/5/4.2.2.0.table\ + grib2/tables/5/4.2.2.3.table\ + grib2/tables/5/4.2.3.0.table\ + grib2/tables/5/4.2.3.1.table\ + grib2/tables/5/4.2.table\ + grib2/tables/5/4.201.table\ + grib2/tables/5/4.202.table\ + grib2/tables/5/4.203.table\ + grib2/tables/5/4.204.table\ + grib2/tables/5/4.205.table\ + grib2/tables/5/4.206.table\ + grib2/tables/5/4.207.table\ + grib2/tables/5/4.208.table\ + grib2/tables/5/4.209.table\ + grib2/tables/5/4.210.table\ + grib2/tables/5/4.211.table\ + grib2/tables/5/4.212.table\ + grib2/tables/5/4.213.table\ + grib2/tables/5/4.215.table\ + grib2/tables/5/4.216.table\ + grib2/tables/5/4.217.table\ + grib2/tables/5/4.218.table\ + grib2/tables/5/4.219.table\ + grib2/tables/5/4.220.table\ + grib2/tables/5/4.221.table\ + grib2/tables/5/4.222.table\ + grib2/tables/5/4.223.table\ + grib2/tables/5/4.230.table\ + grib2/tables/5/4.3.table\ + grib2/tables/5/4.4.table\ + grib2/tables/5/4.5.table\ + grib2/tables/5/4.6.table\ + grib2/tables/5/4.7.table\ + grib2/tables/5/4.8.table\ + grib2/tables/5/4.9.table\ + grib2/tables/5/4.91.table\ + grib2/tables/5/5.0.table\ + grib2/tables/5/5.1.table\ + grib2/tables/5/5.2.table\ + grib2/tables/5/5.3.table\ + grib2/tables/5/5.4.table\ + grib2/tables/5/5.40.table\ + grib2/tables/5/5.40000.table\ + grib2/tables/5/5.5.table\ + grib2/tables/5/5.50002.table\ + grib2/tables/5/5.6.table\ + grib2/tables/5/5.7.table\ + grib2/tables/5/5.8.table\ + grib2/tables/5/5.9.table\ + grib2/tables/5/6.0.table\ + grib2/tables/5/stepType.table + +definitionsgrib2_tables_6dir = @GRIB_DEFINITION_PATH@/grib2/tables/6 +dist_definitionsgrib2_tables_6_DATA = \ + grib2/tables/6/0.0.table\ + grib2/tables/6/1.0.table\ + grib2/tables/6/1.1.table\ + grib2/tables/6/1.2.table\ + grib2/tables/6/1.3.table\ + grib2/tables/6/1.4.table\ + grib2/tables/6/3.0.table\ + grib2/tables/6/3.1.table\ + grib2/tables/6/3.10.table\ + grib2/tables/6/3.11.table\ + grib2/tables/6/3.15.table\ + grib2/tables/6/3.2.table\ + grib2/tables/6/3.20.table\ + grib2/tables/6/3.21.table\ + grib2/tables/6/3.3.table\ + grib2/tables/6/3.4.table\ + grib2/tables/6/3.5.table\ + grib2/tables/6/3.6.table\ + grib2/tables/6/3.7.table\ + grib2/tables/6/3.8.table\ + grib2/tables/6/3.9.table\ + grib2/tables/6/4.0.table\ + grib2/tables/6/4.1.0.table\ + grib2/tables/6/4.1.1.table\ + grib2/tables/6/4.1.10.table\ + grib2/tables/6/4.1.192.table\ + grib2/tables/6/4.1.2.table\ + grib2/tables/6/4.1.3.table\ + grib2/tables/6/4.1.table\ + grib2/tables/6/4.10.table\ + grib2/tables/6/4.11.table\ + grib2/tables/6/4.12.table\ + grib2/tables/6/4.13.table\ + grib2/tables/6/4.14.table\ + grib2/tables/6/4.15.table\ + grib2/tables/6/4.151.table\ + grib2/tables/6/4.192.table\ + grib2/tables/6/4.2.0.0.table\ + grib2/tables/6/4.2.0.1.table\ + grib2/tables/6/4.2.0.13.table\ + grib2/tables/6/4.2.0.14.table\ + grib2/tables/6/4.2.0.15.table\ + grib2/tables/6/4.2.0.16.table\ + grib2/tables/6/4.2.0.18.table\ + grib2/tables/6/4.2.0.19.table\ + grib2/tables/6/4.2.0.190.table\ + grib2/tables/6/4.2.0.191.table\ + grib2/tables/6/4.2.0.2.table\ + grib2/tables/6/4.2.0.20.table\ + grib2/tables/6/4.2.0.3.table\ + grib2/tables/6/4.2.0.4.table\ + grib2/tables/6/4.2.0.5.table\ + grib2/tables/6/4.2.0.6.table\ + grib2/tables/6/4.2.0.7.table\ + grib2/tables/6/4.2.1.0.table\ + grib2/tables/6/4.2.1.1.table\ + grib2/tables/6/4.2.10.0.table\ + grib2/tables/6/4.2.10.1.table\ + grib2/tables/6/4.2.10.191.table\ + grib2/tables/6/4.2.10.2.table\ + grib2/tables/6/4.2.10.3.table\ + grib2/tables/6/4.2.10.4.table\ + grib2/tables/6/4.2.2.0.table\ + grib2/tables/6/4.2.2.3.table\ + grib2/tables/6/4.2.2.4.table\ + grib2/tables/6/4.2.3.0.table\ + grib2/tables/6/4.2.3.1.table\ + grib2/tables/6/4.2.table\ + grib2/tables/6/4.201.table\ + grib2/tables/6/4.202.table\ + grib2/tables/6/4.203.table\ + grib2/tables/6/4.204.table\ + grib2/tables/6/4.205.table\ + grib2/tables/6/4.206.table\ + grib2/tables/6/4.207.table\ + grib2/tables/6/4.208.table\ + grib2/tables/6/4.209.table\ + grib2/tables/6/4.210.table\ + grib2/tables/6/4.211.table\ + grib2/tables/6/4.212.table\ + grib2/tables/6/4.213.table\ + grib2/tables/6/4.215.table\ + grib2/tables/6/4.216.table\ + grib2/tables/6/4.217.table\ + grib2/tables/6/4.218.table\ + grib2/tables/6/4.219.table\ + grib2/tables/6/4.220.table\ + grib2/tables/6/4.221.table\ + grib2/tables/6/4.222.table\ + grib2/tables/6/4.223.table\ + grib2/tables/6/4.230.table\ + grib2/tables/6/4.3.table\ + grib2/tables/6/4.4.table\ + grib2/tables/6/4.5.table\ + grib2/tables/6/4.6.table\ + grib2/tables/6/4.7.table\ + grib2/tables/6/4.8.table\ + grib2/tables/6/4.9.table\ + grib2/tables/6/4.91.table\ + grib2/tables/6/5.0.table\ + grib2/tables/6/5.1.table\ + grib2/tables/6/5.2.table\ + grib2/tables/6/5.3.table\ + grib2/tables/6/5.4.table\ + grib2/tables/6/5.40.table\ + grib2/tables/6/5.40000.table\ + grib2/tables/6/5.5.table\ + grib2/tables/6/5.50002.table\ + grib2/tables/6/5.6.table\ + grib2/tables/6/5.7.table\ + grib2/tables/6/5.8.table\ + grib2/tables/6/5.9.table\ + grib2/tables/6/6.0.table\ + grib2/tables/6/stepType.table + +definitionsgrib2_tables_7dir = @GRIB_DEFINITION_PATH@/grib2/tables/7 +dist_definitionsgrib2_tables_7_DATA = \ + grib2/tables/7/0.0.table\ + grib2/tables/7/1.0.table\ + grib2/tables/7/1.1.table\ + grib2/tables/7/1.2.table\ + grib2/tables/7/1.3.table\ + grib2/tables/7/1.4.table\ + grib2/tables/7/3.0.table\ + grib2/tables/7/3.1.table\ + grib2/tables/7/3.10.table\ + grib2/tables/7/3.11.table\ + grib2/tables/7/3.15.table\ + grib2/tables/7/3.2.table\ + grib2/tables/7/3.20.table\ + grib2/tables/7/3.21.table\ + grib2/tables/7/3.3.table\ + grib2/tables/7/3.4.table\ + grib2/tables/7/3.5.table\ + grib2/tables/7/3.6.table\ + grib2/tables/7/3.7.table\ + grib2/tables/7/3.8.table\ + grib2/tables/7/3.9.table\ + grib2/tables/7/4.0.table\ + grib2/tables/7/4.1.0.table\ + grib2/tables/7/4.1.1.table\ + grib2/tables/7/4.1.10.table\ + grib2/tables/7/4.1.192.table\ + grib2/tables/7/4.1.2.table\ + grib2/tables/7/4.1.3.table\ + grib2/tables/7/4.1.table\ + grib2/tables/7/4.10.table\ + grib2/tables/7/4.11.table\ + grib2/tables/7/4.12.table\ + grib2/tables/7/4.13.table\ + grib2/tables/7/4.14.table\ + grib2/tables/7/4.15.table\ + grib2/tables/7/4.151.table\ + grib2/tables/7/4.192.table\ + grib2/tables/7/4.2.0.0.table\ + grib2/tables/7/4.2.0.1.table\ + grib2/tables/7/4.2.0.13.table\ + grib2/tables/7/4.2.0.14.table\ + grib2/tables/7/4.2.0.15.table\ + grib2/tables/7/4.2.0.16.table\ + grib2/tables/7/4.2.0.18.table\ + grib2/tables/7/4.2.0.19.table\ + grib2/tables/7/4.2.0.190.table\ + grib2/tables/7/4.2.0.191.table\ + grib2/tables/7/4.2.0.2.table\ + grib2/tables/7/4.2.0.20.table\ + grib2/tables/7/4.2.0.3.table\ + grib2/tables/7/4.2.0.4.table\ + grib2/tables/7/4.2.0.5.table\ + grib2/tables/7/4.2.0.6.table\ + grib2/tables/7/4.2.0.7.table\ + grib2/tables/7/4.2.1.0.table\ + grib2/tables/7/4.2.1.1.table\ + grib2/tables/7/4.2.10.0.table\ + grib2/tables/7/4.2.10.1.table\ + grib2/tables/7/4.2.10.191.table\ + grib2/tables/7/4.2.10.2.table\ + grib2/tables/7/4.2.10.3.table\ + grib2/tables/7/4.2.10.4.table\ + grib2/tables/7/4.2.2.0.table\ + grib2/tables/7/4.2.2.3.table\ + grib2/tables/7/4.2.2.4.table\ + grib2/tables/7/4.2.3.0.table\ + grib2/tables/7/4.2.3.1.table\ + grib2/tables/7/4.2.table\ + grib2/tables/7/4.201.table\ + grib2/tables/7/4.202.table\ + grib2/tables/7/4.203.table\ + grib2/tables/7/4.204.table\ + grib2/tables/7/4.205.table\ + grib2/tables/7/4.206.table\ + grib2/tables/7/4.207.table\ + grib2/tables/7/4.208.table\ + grib2/tables/7/4.209.table\ + grib2/tables/7/4.210.table\ + grib2/tables/7/4.211.table\ + grib2/tables/7/4.212.table\ + grib2/tables/7/4.213.table\ + grib2/tables/7/4.215.table\ + grib2/tables/7/4.216.table\ + grib2/tables/7/4.217.table\ + grib2/tables/7/4.218.table\ + grib2/tables/7/4.219.table\ + grib2/tables/7/4.220.table\ + grib2/tables/7/4.221.table\ + grib2/tables/7/4.222.table\ + grib2/tables/7/4.223.table\ + grib2/tables/7/4.224.table\ + grib2/tables/7/4.230.table\ + grib2/tables/7/4.3.table\ + grib2/tables/7/4.4.table\ + grib2/tables/7/4.5.table\ + grib2/tables/7/4.6.table\ + grib2/tables/7/4.7.table\ + grib2/tables/7/4.8.table\ + grib2/tables/7/4.9.table\ + grib2/tables/7/4.91.table\ + grib2/tables/7/5.0.table\ + grib2/tables/7/5.1.table\ + grib2/tables/7/5.2.table\ + grib2/tables/7/5.3.table\ + grib2/tables/7/5.4.table\ + grib2/tables/7/5.40.table\ + grib2/tables/7/5.40000.table\ + grib2/tables/7/5.5.table\ + grib2/tables/7/5.50002.table\ + grib2/tables/7/5.6.table\ + grib2/tables/7/5.7.table\ + grib2/tables/7/5.8.table\ + grib2/tables/7/5.9.table\ + grib2/tables/7/6.0.table\ + grib2/tables/7/stepType.table + +definitionsgrib2_tables_8dir = @GRIB_DEFINITION_PATH@/grib2/tables/8 +dist_definitionsgrib2_tables_8_DATA = \ + grib2/tables/8/0.0.table\ + grib2/tables/8/1.0.table\ + grib2/tables/8/1.1.table\ + grib2/tables/8/1.2.table\ + grib2/tables/8/1.3.table\ + grib2/tables/8/1.4.table\ + grib2/tables/8/3.0.table\ + grib2/tables/8/3.1.table\ + grib2/tables/8/3.10.table\ + grib2/tables/8/3.11.table\ + grib2/tables/8/3.15.table\ + grib2/tables/8/3.2.table\ + grib2/tables/8/3.20.table\ + grib2/tables/8/3.21.table\ + grib2/tables/8/3.3.table\ + grib2/tables/8/3.4.table\ + grib2/tables/8/3.5.table\ + grib2/tables/8/3.6.table\ + grib2/tables/8/3.7.table\ + grib2/tables/8/3.8.table\ + grib2/tables/8/3.9.table\ + grib2/tables/8/4.0.table\ + grib2/tables/8/4.1.0.table\ + grib2/tables/8/4.1.1.table\ + grib2/tables/8/4.1.10.table\ + grib2/tables/8/4.1.192.table\ + grib2/tables/8/4.1.2.table\ + grib2/tables/8/4.1.3.table\ + grib2/tables/8/4.1.table\ + grib2/tables/8/4.10.table\ + grib2/tables/8/4.11.table\ + grib2/tables/8/4.12.table\ + grib2/tables/8/4.13.table\ + grib2/tables/8/4.14.table\ + grib2/tables/8/4.15.table\ + grib2/tables/8/4.151.table\ + grib2/tables/8/4.192.table\ + grib2/tables/8/4.2.0.0.table\ + grib2/tables/8/4.2.0.1.table\ + grib2/tables/8/4.2.0.13.table\ + grib2/tables/8/4.2.0.14.table\ + grib2/tables/8/4.2.0.15.table\ + grib2/tables/8/4.2.0.16.table\ + grib2/tables/8/4.2.0.18.table\ + grib2/tables/8/4.2.0.19.table\ + grib2/tables/8/4.2.0.190.table\ + grib2/tables/8/4.2.0.191.table\ + grib2/tables/8/4.2.0.2.table\ + grib2/tables/8/4.2.0.20.table\ + grib2/tables/8/4.2.0.3.table\ + grib2/tables/8/4.2.0.4.table\ + grib2/tables/8/4.2.0.5.table\ + grib2/tables/8/4.2.0.6.table\ + grib2/tables/8/4.2.0.7.table\ + grib2/tables/8/4.2.1.0.table\ + grib2/tables/8/4.2.1.1.table\ + grib2/tables/8/4.2.1.2.table\ + grib2/tables/8/4.2.10.0.table\ + grib2/tables/8/4.2.10.1.table\ + grib2/tables/8/4.2.10.191.table\ + grib2/tables/8/4.2.10.2.table\ + grib2/tables/8/4.2.10.3.table\ + grib2/tables/8/4.2.10.4.table\ + grib2/tables/8/4.2.2.0.table\ + grib2/tables/8/4.2.2.3.table\ + grib2/tables/8/4.2.2.4.table\ + grib2/tables/8/4.2.3.0.table\ + grib2/tables/8/4.2.3.1.table\ + grib2/tables/8/4.2.table\ + grib2/tables/8/4.201.table\ + grib2/tables/8/4.202.table\ + grib2/tables/8/4.203.table\ + grib2/tables/8/4.204.table\ + grib2/tables/8/4.205.table\ + grib2/tables/8/4.206.table\ + grib2/tables/8/4.207.table\ + grib2/tables/8/4.208.table\ + grib2/tables/8/4.209.table\ + grib2/tables/8/4.210.table\ + grib2/tables/8/4.211.table\ + grib2/tables/8/4.212.table\ + grib2/tables/8/4.213.table\ + grib2/tables/8/4.215.table\ + grib2/tables/8/4.216.table\ + grib2/tables/8/4.217.table\ + grib2/tables/8/4.218.table\ + grib2/tables/8/4.219.table\ + grib2/tables/8/4.220.table\ + grib2/tables/8/4.221.table\ + grib2/tables/8/4.222.table\ + grib2/tables/8/4.223.table\ + grib2/tables/8/4.224.table\ + grib2/tables/8/4.230.table\ + grib2/tables/8/4.233.table\ + grib2/tables/8/4.3.table\ + grib2/tables/8/4.4.table\ + grib2/tables/8/4.5.table\ + grib2/tables/8/4.6.table\ + grib2/tables/8/4.7.table\ + grib2/tables/8/4.8.table\ + grib2/tables/8/4.9.table\ + grib2/tables/8/4.91.table\ + grib2/tables/8/5.0.table\ + grib2/tables/8/5.1.table\ + grib2/tables/8/5.2.table\ + grib2/tables/8/5.3.table\ + grib2/tables/8/5.4.table\ + grib2/tables/8/5.40.table\ + grib2/tables/8/5.40000.table\ + grib2/tables/8/5.5.table\ + grib2/tables/8/5.50002.table\ + grib2/tables/8/5.6.table\ + grib2/tables/8/5.7.table\ + grib2/tables/8/5.8.table\ + grib2/tables/8/5.9.table\ + grib2/tables/8/6.0.table\ + grib2/tables/8/stepType.table + +definitionsgrib2_tables_9dir = @GRIB_DEFINITION_PATH@/grib2/tables/9 +dist_definitionsgrib2_tables_9_DATA = \ + grib2/tables/9/0.0.table\ + grib2/tables/9/1.0.table\ + grib2/tables/9/1.1.table\ + grib2/tables/9/1.2.table\ + grib2/tables/9/1.3.table\ + grib2/tables/9/1.4.table\ + grib2/tables/9/3.0.table\ + grib2/tables/9/3.1.table\ + grib2/tables/9/3.10.table\ + grib2/tables/9/3.11.table\ + grib2/tables/9/3.15.table\ + grib2/tables/9/3.2.table\ + grib2/tables/9/3.20.table\ + grib2/tables/9/3.21.table\ + grib2/tables/9/3.3.table\ + grib2/tables/9/3.4.table\ + grib2/tables/9/3.5.table\ + grib2/tables/9/3.6.table\ + grib2/tables/9/3.7.table\ + grib2/tables/9/3.8.table\ + grib2/tables/9/3.9.table\ + grib2/tables/9/4.0.table\ + grib2/tables/9/4.1.0.table\ + grib2/tables/9/4.1.1.table\ + grib2/tables/9/4.1.10.table\ + grib2/tables/9/4.1.192.table\ + grib2/tables/9/4.1.2.table\ + grib2/tables/9/4.1.3.table\ + grib2/tables/9/4.1.table\ + grib2/tables/9/4.10.table\ + grib2/tables/9/4.11.table\ + grib2/tables/9/4.12.table\ + grib2/tables/9/4.13.table\ + grib2/tables/9/4.14.table\ + grib2/tables/9/4.15.table\ + grib2/tables/9/4.151.table\ + grib2/tables/9/4.192.table\ + grib2/tables/9/4.2.0.0.table\ + grib2/tables/9/4.2.0.1.table\ + grib2/tables/9/4.2.0.13.table\ + grib2/tables/9/4.2.0.14.table\ + grib2/tables/9/4.2.0.15.table\ + grib2/tables/9/4.2.0.16.table\ + grib2/tables/9/4.2.0.18.table\ + grib2/tables/9/4.2.0.19.table\ + grib2/tables/9/4.2.0.190.table\ + grib2/tables/9/4.2.0.191.table\ + grib2/tables/9/4.2.0.2.table\ + grib2/tables/9/4.2.0.20.table\ + grib2/tables/9/4.2.0.3.table\ + grib2/tables/9/4.2.0.4.table\ + grib2/tables/9/4.2.0.5.table\ + grib2/tables/9/4.2.0.6.table\ + grib2/tables/9/4.2.0.7.table\ + grib2/tables/9/4.2.1.0.table\ + grib2/tables/9/4.2.1.1.table\ + grib2/tables/9/4.2.1.2.table\ + grib2/tables/9/4.2.10.0.table\ + grib2/tables/9/4.2.10.1.table\ + grib2/tables/9/4.2.10.191.table\ + grib2/tables/9/4.2.10.2.table\ + grib2/tables/9/4.2.10.3.table\ + grib2/tables/9/4.2.10.4.table\ + grib2/tables/9/4.2.2.0.table\ + grib2/tables/9/4.2.2.3.table\ + grib2/tables/9/4.2.2.4.table\ + grib2/tables/9/4.2.3.0.table\ + grib2/tables/9/4.2.3.1.table\ + grib2/tables/9/4.2.table\ + grib2/tables/9/4.201.table\ + grib2/tables/9/4.202.table\ + grib2/tables/9/4.203.table\ + grib2/tables/9/4.204.table\ + grib2/tables/9/4.205.table\ + grib2/tables/9/4.206.table\ + grib2/tables/9/4.207.table\ + grib2/tables/9/4.208.table\ + grib2/tables/9/4.209.table\ + grib2/tables/9/4.210.table\ + grib2/tables/9/4.211.table\ + grib2/tables/9/4.212.table\ + grib2/tables/9/4.213.table\ + grib2/tables/9/4.215.table\ + grib2/tables/9/4.216.table\ + grib2/tables/9/4.217.table\ + grib2/tables/9/4.218.table\ + grib2/tables/9/4.219.table\ + grib2/tables/9/4.220.table\ + grib2/tables/9/4.221.table\ + grib2/tables/9/4.222.table\ + grib2/tables/9/4.223.table\ + grib2/tables/9/4.224.table\ + grib2/tables/9/4.227.table\ + grib2/tables/9/4.230.table\ + grib2/tables/9/4.233.table\ + grib2/tables/9/4.234.table\ + grib2/tables/9/4.235.table\ + grib2/tables/9/4.3.table\ + grib2/tables/9/4.4.table\ + grib2/tables/9/4.5.table\ + grib2/tables/9/4.6.table\ + grib2/tables/9/4.7.table\ + grib2/tables/9/4.8.table\ + grib2/tables/9/4.9.table\ + grib2/tables/9/4.91.table\ + grib2/tables/9/5.0.table\ + grib2/tables/9/5.1.table\ + grib2/tables/9/5.2.table\ + grib2/tables/9/5.3.table\ + grib2/tables/9/5.4.table\ + grib2/tables/9/5.40.table\ + grib2/tables/9/5.40000.table\ + grib2/tables/9/5.5.table\ + grib2/tables/9/5.50002.table\ + grib2/tables/9/5.6.table\ + grib2/tables/9/5.7.table\ + grib2/tables/9/5.8.table\ + grib2/tables/9/5.9.table\ + grib2/tables/9/6.0.table\ + grib2/tables/9/stepType.table + +definitionsgrib2_tables_local_ecmfdir = @GRIB_DEFINITION_PATH@/grib2/tables/local/ecmf +dist_definitionsgrib2_tables_local_ecmf_DATA = \ + grib2/tables/local/ecmf/obstat.1.0.table\ + grib2/tables/local/ecmf/obstat.10.0.table\ + grib2/tables/local/ecmf/obstat.11.0.table\ + grib2/tables/local/ecmf/obstat.2.0.table\ + grib2/tables/local/ecmf/obstat.3.0.table\ + grib2/tables/local/ecmf/obstat.4.0.table\ + grib2/tables/local/ecmf/obstat.5.0.table\ + grib2/tables/local/ecmf/obstat.6.0.table\ + grib2/tables/local/ecmf/obstat.7.0.table\ + grib2/tables/local/ecmf/obstat.8.0.table\ + grib2/tables/local/ecmf/obstat.9.0.table + +definitionsgrib2_tables_local_ecmf_4dir = @GRIB_DEFINITION_PATH@/grib2/tables/local/ecmf/4 +dist_definitionsgrib2_tables_local_ecmf_4_DATA = \ + grib2/tables/local/ecmf/4/1.2.table + +definitionsgtsdir = @GRIB_DEFINITION_PATH@/gts +dist_definitionsgts_DATA = \ + gts/boot.def + +definitionsmarsdir = @GRIB_DEFINITION_PATH@/mars +dist_definitionsmars_DATA = \ + mars/base.def\ + mars/class.table\ + mars/default_labeling.def\ + mars/domain.96.table\ + mars/domain.table\ + mars/grib1.amap.an.def\ + mars/grib1.dacl.pb.def\ + mars/grib1.dacw.pb.def\ + mars/grib1.dcda.4i.def\ + mars/grib1.dcda.me.def\ + mars/grib1.dcda.sim.def\ + mars/grib1.edmm.an.def\ + mars/grib1.edmm.cl.def\ + mars/grib1.edmm.fc.def\ + mars/grib1.edmm.fg.def\ + mars/grib1.edmm.ia.def\ + mars/grib1.edmm.ssd.def\ + mars/grib1.edmo.an.def\ + mars/grib1.edmo.cl.def\ + mars/grib1.edmo.fc.def\ + mars/grib1.edmo.ssd.def\ + mars/grib1.efhc.cf.def\ + mars/grib1.efhc.icp.def\ + mars/grib1.efhc.pf.def\ + mars/grib1.efho.cf.def\ + mars/grib1.efho.pf.def\ + mars/grib1.efhs.cd.def\ + mars/grib1.efhs.ed.def\ + mars/grib1.efhs.em.def\ + mars/grib1.efhs.es.def\ + mars/grib1.efhs.taem.def\ + mars/grib1.efhs.taes.def\ + mars/grib1.efov.pf.def\ + mars/grib1.ehmm.em.def\ + mars/grib1.elda.4i.def\ + mars/grib1.elda.4v.def\ + mars/grib1.elda.an.def\ + mars/grib1.elda.ea.def\ + mars/grib1.elda.ef.def\ + mars/grib1.elda.em.def\ + mars/grib1.elda.es.def\ + mars/grib1.elda.fc.def\ + mars/grib1.elda.me.def\ + mars/grib1.elda.ses.def\ + mars/grib1.enda.4v.def\ + mars/grib1.enda.an.def\ + mars/grib1.enda.def\ + mars/grib1.enda.ea.def\ + mars/grib1.enda.ef.def\ + mars/grib1.enda.em.def\ + mars/grib1.enda.es.def\ + mars/grib1.enda.fc.def\ + mars/grib1.enda.ssd.def\ + mars/grib1.enda.sv.def\ + mars/grib1.enda.svar.def\ + mars/grib1.enfh.cf.def\ + mars/grib1.enfh.fcmax.def\ + mars/grib1.enfh.fcmean.def\ + mars/grib1.enfh.fcmin.def\ + mars/grib1.enfh.fcstdev.def\ + mars/grib1.enfh.ff.def\ + mars/grib1.enfh.icp.def\ + mars/grib1.enfh.pf.def\ + mars/grib1.enfh.tims.def\ + mars/grib1.enfo.cf.def\ + mars/grib1.enfo.ci.def\ + mars/grib1.enfo.cm.def\ + mars/grib1.enfo.cr.def\ + mars/grib1.enfo.cs.def\ + mars/grib1.enfo.cv.def\ + mars/grib1.enfo.ed.def\ + mars/grib1.enfo.ef.def\ + mars/grib1.enfo.efi.def\ + mars/grib1.enfo.efic.def\ + mars/grib1.enfo.em.def\ + mars/grib1.enfo.ep.def\ + mars/grib1.enfo.es.def\ + mars/grib1.enfo.fc.def\ + mars/grib1.enfo.fcmax.def\ + mars/grib1.enfo.fcmean.def\ + mars/grib1.enfo.fcmin.def\ + mars/grib1.enfo.fcstdev.def\ + mars/grib1.enfo.ff.def\ + mars/grib1.enfo.fp.def\ + mars/grib1.enfo.icp.def\ + mars/grib1.enfo.pb.def\ + mars/grib1.enfo.pd.def\ + mars/grib1.enfo.pf.def\ + mars/grib1.enfo.sot.def\ + mars/grib1.enfo.sv.def\ + mars/grib1.enfo.svar.def\ + mars/grib1.enfo.taem.def\ + mars/grib1.enfo.taes.def\ + mars/grib1.enfo.tu.def\ + mars/grib1.enwh.cf.def\ + mars/grib1.enwh.fcmax.def\ + mars/grib1.enwh.fcmean.def\ + mars/grib1.enwh.fcmin.def\ + mars/grib1.enwh.fcstdev.def\ + mars/grib1.enwh.pf.def\ + mars/grib1.esmm.em.def\ + mars/grib1.espd.an.def\ + mars/grib1.ewda.4v.def\ + mars/grib1.ewda.an.def\ + mars/grib1.ewda.def\ + mars/grib1.ewda.fc.def\ + mars/grib1.ewhc.cf.def\ + mars/grib1.ewhc.pf.def\ + mars/grib1.ewho.cf.def\ + mars/grib1.ewho.pf.def\ + mars/grib1.ewla.4v.def\ + mars/grib1.ewla.an.def\ + mars/grib1.ewla.fc.def\ + mars/grib1.ewmm.an.def\ + mars/grib1.ewmm.cl.def\ + mars/grib1.ewmm.fc.def\ + mars/grib1.ewmo.an.def\ + mars/grib1.ewmo.cl.def\ + mars/grib1.ewmo.def\ + mars/grib1.ewmo.fc.def\ + mars/grib1.kwbc.pf.def\ + mars/grib1.lwda.4i.def\ + mars/grib1.lwda.4v.def\ + mars/grib1.lwda.an.def\ + mars/grib1.lwda.ea.def\ + mars/grib1.lwda.ef.def\ + mars/grib1.lwda.fc.def\ + mars/grib1.lwda.me.def\ + mars/grib1.lwwv.4v.def\ + mars/grib1.lwwv.an.def\ + mars/grib1.lwwv.fc.def\ + mars/grib1.maed.an.def\ + mars/grib1.maed.fc.def\ + mars/grib1.mawv.fc.def\ + mars/grib1.mdfa.fc.def\ + mars/grib1.me.def\ + mars/grib1.mfam.em.def\ + mars/grib1.mfam.fcmean.def\ + mars/grib1.mfam.fp.def\ + mars/grib1.mfam.pb.def\ + mars/grib1.mfam.pd.def\ + mars/grib1.mfhm.em.def\ + mars/grib1.mfhm.es.def\ + mars/grib1.mfhm.fcmax.def\ + mars/grib1.mfhm.fcmean.def\ + mars/grib1.mfhm.fcmin.def\ + mars/grib1.mfhm.fcstdev.def\ + mars/grib1.mfhw.cf.def\ + mars/grib1.mfhw.fc.def\ + mars/grib1.mfwm.fcmax.def\ + mars/grib1.mfwm.fcmean.def\ + mars/grib1.mfwm.fcmin.def\ + mars/grib1.mfwm.fcstdev.def\ + mars/grib1.mhwm.fcmax.def\ + mars/grib1.mhwm.fcmean.def\ + mars/grib1.mhwm.fcmin.def\ + mars/grib1.mhwm.fcstdev.def\ + mars/grib1.mmaf.fc.def\ + mars/grib1.mmaf.fcmean.def\ + mars/grib1.mmam.fcmean.def\ + mars/grib1.mmsa.em.def\ + mars/grib1.mmsa.fcmean.def\ + mars/grib1.mmsf.fc.def\ + mars/grib1.mmsf.icp.def\ + mars/grib1.mnfc.cf.def\ + mars/grib1.mnfc.ed.def\ + mars/grib1.mnfc.em.def\ + mars/grib1.mnfc.es.def\ + mars/grib1.mnfc.fc.def\ + mars/grib1.mnfc.ff.def\ + mars/grib1.mnfc.icp.def\ + mars/grib1.mnfc.of.def\ + mars/grib1.mnfh.cf.def\ + mars/grib1.mnfh.ed.def\ + mars/grib1.mnfh.em.def\ + mars/grib1.mnfh.es.def\ + mars/grib1.mnfh.fc.def\ + mars/grib1.mnfh.icp.def\ + mars/grib1.mnfm.em.def\ + mars/grib1.mnfm.es.def\ + mars/grib1.mnfm.fcmax.def\ + mars/grib1.mnfm.fcmean.def\ + mars/grib1.mnfm.fcmin.def\ + mars/grib1.mnfm.fcstdev.def\ + mars/grib1.mnfw.cf.def\ + mars/grib1.mnfw.fc.def\ + mars/grib1.mnth.an.def\ + mars/grib1.mnth.cl.def\ + mars/grib1.mnth.fc.def\ + mars/grib1.mnth.fg.def\ + mars/grib1.mnth.ia.def\ + mars/grib1.mnth.ssd.def\ + mars/grib1.moda.an.def\ + mars/grib1.moda.cl.def\ + mars/grib1.moda.fc.def\ + mars/grib1.moda.ssd.def\ + mars/grib1.mofc.cf.def\ + mars/grib1.mofc.ed.def\ + mars/grib1.mofc.em.def\ + mars/grib1.mofc.es.def\ + mars/grib1.mofc.fc.def\ + mars/grib1.mofc.ff.def\ + mars/grib1.mofc.of.def\ + mars/grib1.mofm.fcmax.def\ + mars/grib1.mofm.fcmean.def\ + mars/grib1.mofm.fcmin.def\ + mars/grib1.mofm.fcstdev.def\ + mars/grib1.mpic.s3.def\ + mars/grib1.msda.an.def\ + mars/grib1.msdc.an.def\ + mars/grib1.msdc.fc.def\ + mars/grib1.msmm.em.def\ + mars/grib1.msmm.fcmax.def\ + mars/grib1.msmm.fcmean.def\ + mars/grib1.msmm.fcmin.def\ + mars/grib1.msmm.fcstdev.def\ + mars/grib1.msmm.hcmean.def\ + mars/grib1.ocea.an.def\ + mars/grib1.ocea.ff.def\ + mars/grib1.ocea.fx.def\ + mars/grib1.ocea.of.def\ + mars/grib1.ocea.or.def\ + mars/grib1.oper.3v.def\ + mars/grib1.oper.4i.def\ + mars/grib1.oper.4v.def\ + mars/grib1.oper.an.def\ + mars/grib1.oper.ea.def\ + mars/grib1.oper.ef.def\ + mars/grib1.oper.fa.def\ + mars/grib1.oper.fc.def\ + mars/grib1.oper.fg.def\ + mars/grib1.oper.go.def\ + mars/grib1.oper.ia.def\ + mars/grib1.oper.im.def\ + mars/grib1.oper.me.def\ + mars/grib1.oper.oi.def\ + mars/grib1.oper.si.def\ + mars/grib1.oper.sim.def\ + mars/grib1.oper.ssd.def\ + mars/grib1.scda.4i.def\ + mars/grib1.scda.me.def\ + mars/grib1.seap.an.def\ + mars/grib1.seap.ef.def\ + mars/grib1.seap.es.def\ + mars/grib1.seap.fc.def\ + mars/grib1.seap.sv.def\ + mars/grib1.seap.svar.def\ + mars/grib1.seas.an.def\ + mars/grib1.seas.fc.def\ + mars/grib1.seas.ff.def\ + mars/grib1.seas.fx.def\ + mars/grib1.seas.of.def\ + mars/grib1.seas.or.def\ + mars/grib1.sens.me.def\ + mars/grib1.sens.sf.def\ + mars/grib1.sens.sg.def\ + mars/grib1.sfmm.em.def\ + mars/grib1.sfmm.fcmax.def\ + mars/grib1.sfmm.fcmean.def\ + mars/grib1.sfmm.fcmin.def\ + mars/grib1.sfmm.fcstdev.def\ + mars/grib1.smma.em.def\ + mars/grib1.smma.fcmean.def\ + mars/grib1.supd.an.def\ + mars/grib1.swmm.fcmax.def\ + mars/grib1.swmm.fcmean.def\ + mars/grib1.swmm.fcmin.def\ + mars/grib1.swmm.fcstdev.def\ + mars/grib1.ukmo.s3.def\ + mars/grib1.waef.cv.def\ + mars/grib1.waef.efi.def\ + mars/grib1.waef.efic.def\ + mars/grib1.waef.ep.def\ + mars/grib1.waef.fcmax.def\ + mars/grib1.waef.fcmean.def\ + mars/grib1.waef.fcmin.def\ + mars/grib1.waef.fcstdev.def\ + mars/grib1.waef.fp.def\ + mars/grib1.waef.pf.def\ + mars/grib1.waef.sot.def\ + mars/grib1.wamf.cf.def\ + mars/grib1.wamf.fc.def\ + mars/grib1.wamo.an.def\ + mars/grib1.wamo.cl.def\ + mars/grib1.wasf.fc.def\ + mars/grib1.wave.4v.def\ + mars/grib1.wave.an.def\ + mars/grib1.wave.def\ + mars/grib1.wave.fc.def\ + mars/grib1.wave.fg.def\ + mars/grib1.wehs.cd.def\ + mars/grib1.wehs.ed.def\ + mars/grib1.wehs.em.def\ + mars/grib1.wehs.es.def\ + mars/grib1.weov.pf.def\ + mars/grib1.wmfm.fcmax.def\ + mars/grib1.wmfm.fcmean.def\ + mars/grib1.wmfm.fcmin.def\ + mars/grib1.wmfm.fcstdev.def\ + mars/make_type_switch_case.sh\ + mars/marsTypeConcept.def\ + mars/model.96.table\ + mars/stream.table\ + mars/type.table\ + mars/wave_domain.def + +definitionstidedir = @GRIB_DEFINITION_PATH@/tide +dist_definitionstide_DATA = \ + tide/boot.def\ + tide/mars_labeling.def\ + tide/section.1.def\ + tide/section.4.def + +include $(DEVEL_RULES) diff --git a/definitions/boot.def b/definitions/boot.def new file mode 100644 index 000000000..0310b93db --- /dev/null +++ b/definitions/boot.def @@ -0,0 +1,87 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# +include "parameters_version.def"; +constant definitionFilesVersion="2.0.0.0" : hidden; +constant internalVersion=22 : hidden; + +constant zero=0 : hidden; +constant one=1 : hidden; +constant two=1 : hidden; +constant three=1 : hidden; +constant eight=8 : hidden; +constant hundred=100 : hidden; +constant eleven=11 : hidden; +constant false="false" : hidden; +transient truncateLaplacian=0 : hidden; +constant marsDir="mars" : no_copy,hidden; +constant present=1 : hidden; +constant epsPoint=1 : hidden; +constant epsContinous=11 : hidden; +constant epsStatisticsPoint=2 : hidden; +constant epsStatisticsContinous=12 : hidden; +alias epsStatistics=zero : hidden; + +constant defaultParameter = 0 : hidden; +constant defaultName="unknown" :hidden; +constant defaultShortName="unknown" : hidden; +transient truncateDegrees=0 : hidden; +transient dummy = 1 :hidden; +constant unknown="unknown" : hidden; +constant oneConstant=1 : hidden; +constant thousand=1000; +constant hundred=100; +constant oneMillionConstant=1000000 : hidden; +constant grib1divider = 1000 : hidden; +meta offset offset_file() : hidden; +meta count count_file() : hidden; +meta countTotal count_total() : hidden; +transient file="unknown" : hidden; +transient changingPrecision=0 : hidden; +transient unitsFactor=1 : hidden; +transient unitsBias=0 : hidden; +constant globalDomain = "g"; +transient timeRangeIndicatorFromStepRange=-1 : hidden; + + +meta libraryVersion library_version() : hidden; + +lookup[4] kindOfProduct (0,identifier) : hidden; +# grib templates +# `ABCD` is a number, each letter being a byte + +if(kindOfProduct == `GRIB`){ + lookup[1] GRIBEditionNumber (7,editionNumber) : edition_specific ; + template GRIB "grib[GRIBEditionNumber:l]/boot.def" ; +} + +if(kindOfProduct == `BUDG`){ + template BUDG "budg/boot.def" ; +} + +if(kindOfProduct == `TIDE`){ + template TIDE "tide/boot.def" ; +} + +if(kindOfProduct == `BUFR`){ + template BUFR "bufr/boot.def" ; + constant BUFRstr="BUFR"; + alias ls.identifier=BUFRstr; +} + +if(kindOfProduct == `CDFX`){ + template CDF "cdf/boot.def" ; + constant CDFstr="netCDF"; + alias ls.identifier=CDFstr; +} + +if(kindOfProduct == 17632522 ){ + template GTS "gts/boot.def" ; + constant GTSstr="GTS"; + alias ls.identifier=GTSstr; +} diff --git a/definitions/budg/boot.def b/definitions/budg/boot.def new file mode 100644 index 000000000..6978541d5 --- /dev/null +++ b/definitions/budg/boot.def @@ -0,0 +1,30 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +position startOfHeaders; +ascii[4] identifier ; + +alias ls.identifier=identifier; +transient missingValue = 9999 ; +constant ieeeFloats = 0: edition_specific; +constant zero=0:hidden; + + + +template section1 "budg/section.1.def" ; +template mars_labeling "budg/mars_labeling.def" ; +template section4 "budg/section.4.def" ; +ascii[4] endMark ; +position totalLength; + + +# This needs to be there for the MARS server, so the totalLength is processed correctly +position endOfHeadersMaker ; +meta lengthOfHeaders evaluate( endOfHeadersMaker-startOfHeaders); +meta md5Headers md5(startOfHeaders,lengthOfHeaders); diff --git a/definitions/budg/mars_labeling.def b/definitions/budg/mars_labeling.def new file mode 100644 index 000000000..3edf8c352 --- /dev/null +++ b/definitions/budg/mars_labeling.def @@ -0,0 +1,20 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +constant domain = "g"; +constant levtype = "sfc"; +constant param = "128.128"; + + + +alias mars.param = param; +alias mars.levtype = levtype; +#alias mars.domain = domain; + + diff --git a/definitions/budg/section.1.def b/definitions/budg/section.1.def new file mode 100644 index 000000000..96dc74707 --- /dev/null +++ b/definitions/budg/section.1.def @@ -0,0 +1,107 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +length[3] section1Length ; + +unsigned[1] gribTablesVersionNo ; +codetable[1] centre 'grib1/0.table' : string_type; + +alias ls.centre=centre; +alias identificationOfOriginatingGeneratingCentre=centre; + +unsigned[1] generatingProcessIdentifier ; + +unsigned[1] gridDefinition ; + +flags[1] flag 'grib1/1.table'; + +codetable[1] indicatorOfParameter 'grib1/2.[centre:l].[gribTablesVersionNo:l].table'; + +codetable[1] indicatorOfTypeOfLevel 'grib1/3.table'; +codetable[2] heightPressureEtcOfLevels 'grib1/3.table'; +alias ls.levelType=indicatorOfTypeOfLevel; + +# Year of century +# NOTE 6 NOT FOUND +unsigned[1] yearOfCentury ; + +# Month +unsigned[1] month ; + +# Day +unsigned[1] day; + +# Hour +unsigned[1] hour ; + +# Minute +unsigned[1] minute ; + + +constant second = 0; +meta dataDate budgdate(yearOfCentury,month,day); +alias ls.date=dataDate; +meta dataTime time(hour,minute,second); + +meta julianDay julian_day(dataDate,hour,minute,second) : edition_specific; + + +# Indicator of unit of time range +codetable[1] indicatorOfUnitOfTimeRange 'grib1/4.table'; + +# P1 - Period of time +# (number of time units) +unsigned[1] periodOfTime ; + +alias P1 = periodOfTime ; + +# P2 - Period of time +# (number of time units) +unsigned[1] periodOfTimeIntervals ; + +alias P2 = periodOfTimeIntervals ; + +codetable[1] timeRangeIndicator 'grib1/5.table'; + +codetable[1] stepUnits 'grib2/tables/1/4.4.table' = 1 : transient,dump,no_copy; + +concept stepType { + "instant" = {timeRangeIndicator=0;} + "instant" = {timeRangeIndicator=1;} + "instant" = {timeRangeIndicator=10;} + "avg" = {timeRangeIndicator=3;} + "accum" = {timeRangeIndicator=4;} + "max" = {timeRangeIndicator=2;} + "min" = {timeRangeIndicator=2;} + "diff" = {timeRangeIndicator=5;} + "rms" = {timeRangeIndicator=2;} + "sd" = {timeRangeIndicator=2;} + "cov" = {timeRangeIndicator=2;} + "ratio" = {timeRangeIndicator=2;} +} + +meta ls.stepRange g1step_range(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange,stepUnits,stepType) : dump; +meta startStep long_vector(stepRange,0) : dump; +meta endStep long_vector(stepRange,1) : dump; + +meta stepRangeInHours g1step_range(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange,stepType); +meta startStepInHours long_vector(stepRangeInHours,0) : dump; +meta endStepInHours long_vector(stepRangeInHours,1) : dump; + +meta marsStep mars_step(stepRange,stepType); + +alias mars.date = dataDate; +alias mars.time = dataTime; +alias mars.step = marsStep; + +# This does not work? gribTablesVersionNo is 0 +#meta param sprintf("%d.0",indicatorOfParameter) ; +constant paramId = 128; +alias parameter = paramId; +alias ls.parameter=parameter; diff --git a/definitions/budg/section.4.def b/definitions/budg/section.4.def new file mode 100644 index 000000000..f3e9a7710 --- /dev/null +++ b/definitions/budg/section.4.def @@ -0,0 +1,107 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +length[3] section4Length ; + +unsigned[1] reserved1=0 : hidden; + +if (reserved1 == 0) { + +flags[1] missingDataFlag 'grib1/1.table'; + +unsigned[1] numberOfBytesPerInteger ; + +unsigned[2] reserved=0 : hidden ; + +unsigned[3] numberOfChars ; + +unsigned[3] numberOfFloats ; + +unsigned[3] numberOfInts ; + +unsigned[3] numberOfLogicals ; + +unsigned[3] numberOfReservedBytes ; + +unsigned[4] reserved=0 : hidden; +unsigned[4] reserved=0 : hidden; +unsigned[1] reserved=0 : hidden; + +ibmfloat floatVal[numberOfFloats]; + +if(numberOfBytesPerInteger == 1) { signed[1] integerValues[numberOfInts]; } +if(numberOfBytesPerInteger == 2) { signed[2] integerValues[numberOfInts]; } +if(numberOfBytesPerInteger == 3) { signed[3] integerValues[numberOfInts]; } +if(numberOfBytesPerInteger == 4) { signed[4] integerValues[numberOfInts]; } + +if(numberOfChars >= 12) +{ + ascii[2] marsClass; + ascii[2] dummy1; + ascii[2] marsType; + ascii[2] dummy2; + ascii[4] experimentVersionNumber; + + alias expver=experimentVersionNumber; + alias marsExpver=experimentVersionNumber; + + constant numberOfRemaininChars = numberOfChars - 12; + + charValues list(numberOfRemaininChars) { + ascii[1] char; + } + + + constant zero = 0; + concept isEps(zero) { 1 = { marsType = "pf"; } } + concept isSens(zero) { 1 = { marsType = "sf"; } } + + constant oper = "oper"; + + concept marsStream(oper) { + "enfo" = { marsType = "pf"; } + "enfo" = { marsType = "cf"; } + "sens" = { marsType = "sf"; } + } + + if(isEps) + { + constant perturbationNumber = 0; + alias mars.number = perturbationNumber; + } + + if(isSens) + { + constant iterationNumber = 0; + constant diagnosticNumber = 0; + alias mars.iteration = iterationNumber; + alias mars.diagnostic = diagnosticNumber; + } + + # This is commented out because some of the BUDG have the wrong info there + alias mars.stream = marsStream; + alias mars.class = marsClass; + alias mars.type = marsType; + alias mars.expver = marsExpver; + +} +else +{ + + charValues list(numberOfChars) { + ascii[1] char; + } + +} +} else { +#TODO: decode properly these old data + section_padding padding; + +} + diff --git a/definitions/bufr/boot.def b/definitions/bufr/boot.def new file mode 100644 index 000000000..f69571e29 --- /dev/null +++ b/definitions/bufr/boot.def @@ -0,0 +1,53 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +lookup[1] ed (7,editionNumber); + +ascii[4] identifier = "BUFR" : read_only,hidden; +alias ls.identifier=identifier; + +if(ed < 2) +{ + unsigned[3] section1Length; +} +else +{ + unsigned[3] totalLength ; +} + +unsigned[1] editionNumber = 2; + +if(editionNumber < 2) +{ + template section_1 "bufr/old_section.1.def" ; +} +else +{ + template section_1 "bufr/section.1.def" ; +} + + +flagbit section2Present(section1Flags,7) = 1; + +if(section2Present){ + template section_2 "bufr/section.2.def" ; +} +else { + transient section2Length = 0; +} + +template section_3 "bufr/section.3.def" ; +template section_4 "bufr/section.4.def" ; +template section_5 "bufr/section.5.def" ; + +if(ed < 2) +{ + transient totalLength = section1Length + section2Length + section3Length + section4Length + 8; +} + diff --git a/definitions/bufr/old_section.1.def b/definitions/bufr/old_section.1.def new file mode 100644 index 000000000..9379195c5 --- /dev/null +++ b/definitions/bufr/old_section.1.def @@ -0,0 +1,27 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +codetable[2] originatingCentrer 'grib1/0.table' : dump; +unsigned[1] updateSequenceNumber; + +flags[1] section1Flags 'bufr/section1_flags.table' = 128 : hidden ; # = section 2 present + + +unsigned[1] dataCategory; +unsigned[1] dataSubCategory; +unsigned[2] localTablesVersionNumber; + +unsigned[1] yearOfCentury; +unsigned[1] month; +unsigned[1] day; +unsigned[1] hour; +unsigned[1] minute; +unsigned[1] masterTablesVersionNumber; + +alias masterTableNumber = editionNumber; # ? diff --git a/definitions/bufr/rdb_key.def b/definitions/bufr/rdb_key.def new file mode 100644 index 000000000..33251694c --- /dev/null +++ b/definitions/bufr/rdb_key.def @@ -0,0 +1,90 @@ +unsigned[1] rdbType ; +unsigned[1] rdbSubtype; + +alias rdb.rdbType=rdbType; +alias rdb.rdbSubtype=rdbSubtype; + +byte[10] keyData : hidden; + +meta localYear bits(keyData,0,12) ; +meta localMonth bits(keyData,12,4) ; +meta localDay bits(keyData,16,6) ; +meta localHour bits(keyData,22,5) ; +meta localMinute bits(keyData,27,6) ; +meta localSecond bits(keyData,33,6) ; +meta spare bits(keyData,39,1); # 40 bits = 10 bytes + +meta rdb.typicalDate sprintf("%d%d%d",localYear,localMonth,localDay) : dump; +meta rdb.typicalTime sprintf("%.2d%.2d%.2d",localHour,localMinute,localSecond) :dump; + +byte[3] keyMore : hidden; + +constant zero = 0; +concept isSatellite(zero) { + 1 = {keyType = 2; } + 1 = {keyType = 3; } + 1 = {keyType = 12; } +} + +alias rdb.isSatellite=isSatellite; + +# real latitude = (key latitude - 9000000.0)/100000.0; +# real longitude = (key longitude - 18000000.0)/100000.0; + +if(isSatellite) +{ + meta rdb.latitude1 bits(keyData,72,25) : dump; + meta rdb.latitude2 bits(keyData,136,25) : dump; + meta rdb.longitude1 bits(keyData,40,26) : dump; + meta rdb.longitude2 bits(keyData,104,26) : dump; + meta rdb.satelliteID bits(keyData,176,16) : dump; +byte[9] stuff : hidden; + +} +else +{ + meta rdb.latitude bits(keyData,72,25) : dump; + meta rdb.longitude bits(keyData,40,26) : dump; + ascii[9] ident : hidden; + alias rdb.ident=ident; +} + +byte[8] keyMore : hidden; + +meta rdb.numberOfObservations bits(keyData,168,8) : dump; + +# 16 bytes +unsigned[2] messageLength; +alias rdb.messageLength=messageLength; + +byte[3] rdbtime; +meta rdb.rdbtimeDay bits(rdbtime,0,6) : dump; +meta rdb.rdbtimeHour bits(rdbtime,6,5) : dump; +meta rdb.rdbtimeMinute bits(rdbtime,11,6) : dump; +meta rdb.rdbtimeSecond bits(rdbtime,17,6) : dump; + +byte[3] rectime; +meta rdb.rectimeDay bits(rectime,0,6) : dump; +meta rdb.rectimeHour bits(rectime,6,5) : dump; +meta rdb.rectimeMinute bits(rectime,11,6) : dump; +meta rdb.rectimeSecond bits(rectime,17,6) : dump; + +byte[1] corr1Data; +meta rdb.correction1 bits(corr1Data,0,6) : dump; +meta rdb.correction1Part bits(corr1Data,6,2) : dump; + +byte[1] corr2Data; +meta rdb.correction2 bits(corr2Data,0,6) : dump; +meta rdb.correction2Part bits(corr2Data,6,2) : dump; + +byte[1] corr3Data; +meta rdb.correction3 bits(corr3Data,0,6) : dump; +meta rdb.correction3Part bits(corr3Data,6,2) : dump; + +byte[1] corr4Data; +meta rdb.correction4 bits(corr4Data,0,6) : dump; +meta rdb.correction4Part bits(corr4Data,6,2) : dump; + +unsigned[1] qualityControl : dump; +alias rdb.qualityControl=qualityControl; +unsigned[3] spare; diff --git a/definitions/bufr/section.0.def b/definitions/bufr/section.0.def new file mode 100644 index 000000000..5e007f62b --- /dev/null +++ b/definitions/bufr/section.0.def @@ -0,0 +1,10 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label empty; diff --git a/definitions/bufr/section.1.def b/definitions/bufr/section.1.def new file mode 100644 index 000000000..2b3a2f6bd --- /dev/null +++ b/definitions/bufr/section.1.def @@ -0,0 +1,43 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +position offsetSection1; +length[3] section1Length ; + +unsigned[1] masterTableNumber; + +if(editionNumber < 3) +{ + codetable[2] centre 'grib1/0.table' : dump; +} +else +{ + codetable[1] subCentre 'grib1/0.table' : dump; + codetable[1] centre 'grib1/0.table' : dump; +} + +unsigned[1] updateSequenceNumber; + +flags[1] section1Flags 'bufr/section1_flags.table' = 128 : hidden ; # = section 2 present + +unsigned[1] dataCategory : dump; +unsigned[1] dataSubCategory : dump; +unsigned[1] masterTablesVersionNumber; +unsigned[1] localTablesVersionNumber; + +unsigned[1] typicalYearOfCentury : dump; +unsigned[1] typicalMonth : dump; +unsigned[1] typicalDay : dump; +unsigned[1] typicalHour : dump; +unsigned[1] typicalMinute : dump; +unsigned[1] spare; # ??? + +section_padding section1Padding; + diff --git a/definitions/bufr/section.2.def b/definitions/bufr/section.2.def new file mode 100644 index 000000000..bbf300e13 --- /dev/null +++ b/definitions/bufr/section.2.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +length[3] section2Length ; +unsigned[1] reserved = 0; +if(originatingCentre == 98) { + template rdb_key "bufr/rdb_key.def"; +} +section_padding section2Padding; diff --git a/definitions/bufr/section.3.def b/definitions/bufr/section.3.def new file mode 100644 index 000000000..7b0fc97c3 --- /dev/null +++ b/definitions/bufr/section.3.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +length[3] section3Length ; +unsigned[1] reserved = 0; +unsigned[2] numberOfDataSubsets; +flags[1] section3Flags 'bufr/section3_flags.table'; +section_padding section3Padding; diff --git a/definitions/bufr/section.4.def b/definitions/bufr/section.4.def new file mode 100644 index 000000000..9eed3a171 --- /dev/null +++ b/definitions/bufr/section.4.def @@ -0,0 +1,12 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +length[3] section4Length ; +unsigned[1] reserved = 0; +section_padding section4Padding; diff --git a/definitions/bufr/section.5.def b/definitions/bufr/section.5.def new file mode 100644 index 000000000..dfc18d5a9 --- /dev/null +++ b/definitions/bufr/section.5.def @@ -0,0 +1,12 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +constant section5Length=4; +ascii[4] '7777' = "7777" : read_only; + diff --git a/definitions/bufr/section1_flags.table b/definitions/bufr/section1_flags.table new file mode 100644 index 000000000..e1fd4f500 --- /dev/null +++ b/definitions/bufr/section1_flags.table @@ -0,0 +1,3 @@ +# CODE TABLE 1, Flag indication relative to section 2 and 3 +1 0 Section 2 omited +1 1 Section 2 included diff --git a/definitions/bufr/section3_flags.table b/definitions/bufr/section3_flags.table new file mode 100644 index 000000000..56b6d217b --- /dev/null +++ b/definitions/bufr/section3_flags.table @@ -0,0 +1,5 @@ +# CODE TABLE 1, Flag indication relative to section 2 and 3 +1 0 Other data +1 1 Observed data +2 0 Non-compressed data +2 1 Compressed data diff --git a/definitions/cdf/boot.def b/definitions/cdf/boot.def new file mode 100644 index 000000000..cd6673891 --- /dev/null +++ b/definitions/cdf/boot.def @@ -0,0 +1 @@ +constant identifier="netCDF"; diff --git a/definitions/common/statistics_grid.def b/definitions/common/statistics_grid.def new file mode 100644 index 000000000..60861c57a --- /dev/null +++ b/definitions/common/statistics_grid.def @@ -0,0 +1,33 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +meta dirty_statistics dirty(computeStatistics) ; +when (changed(values)) { set dirty_statistics=1;} + +meta computeStatistics statistics(missingValue,values); + +meta maximum vector(computeStatistics,0) : dump; +meta minimum vector(computeStatistics,1) : dump; +meta average vector(computeStatistics,2) : dump; +#meta numberOfMissing vector(computeStatistics,3) : dump; +meta numberOfMissing count_missing(bitmap,unusedBitsInBitmap,numberOfDataPoints) : dump; +meta standardDeviation vector(computeStatistics,4) : dump; +meta skewness vector(computeStatistics,5) : dump; +meta kurtosis vector(computeStatistics,6) : dump; +meta isConstant vector(computeStatistics,7) : dump; + +alias numberOfMissingValues=numberOfMissing; + +alias statistics.avg = average; +alias statistics.max = maximum; +alias statistics.min = minimum; +alias statistics.sd = standardDeviation; +alias statistics.skew = skewness; +alias statistics.kurt = kurtosis; +alias statistics.const = isConstant; diff --git a/definitions/common/statistics_spectral.def b/definitions/common/statistics_spectral.def new file mode 100644 index 000000000..dfc7c894c --- /dev/null +++ b/definitions/common/statistics_spectral.def @@ -0,0 +1,24 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +meta dirty_statistics dirty(computeStatistics) ; +when (changed(values)) { set dirty_statistics=1;} + +meta computeStatistics statistics_spectral(values,J,K,M,JS) : hidden; + +meta average vector(computeStatistics,0) : dump; +meta energyNorm vector(computeStatistics,1) : dump; +meta standardDeviation vector(computeStatistics,2) : dump; +meta isConstant vector(computeStatistics,3) : dump; + +alias statistics.avg = average; +alias statistics.enorm = energyNorm; +alias statistics.sd = standardDeviation; +alias statistics.const = isConstant; + diff --git a/definitions/create_def.pl b/definitions/create_def.pl new file mode 100755 index 000000000..81409432e --- /dev/null +++ b/definitions/create_def.pl @@ -0,0 +1,209 @@ +#!/usr/local/bin/perl56 -I/usr/local/lib/metaps/perl +use strict; +use File::Path ; +use File::Basename ; +use File::Copy; +use Cwd; +use DBI; + +my $basedir = dirname($0); + +my $db="param"; +my $host="wrep-db-misc-prod"; +my $user="ecmwf"; +my $pass=""; +my $filename; my $filebase; my $out; my $conceptDir; +my $query; my $q; my $qh; + +my $dbh = DBI->connect("dbi:mysql(RaiseError=>1):database=$db;host=$host",$user,$pass) or die $DBI::errstr; + +# I have written to it already or not +my $tarfilesflag = 0; + +sub create_def { + my $p; my %seen; + my ($key) =@_; + my $field=$key; + + if ($key =~ /paramId/) { $field="param.id"; } + if ($key =~ /name/) { $field="param.name"; } + if ($key =~ /units/) { $field="units.name"; } + + my $query= <<"EOF"; + select $field,force128,edition, + centre.abbreviation,param_id,attribute.name,attribute_value,param.name,param.shortName + from param,grib,attribute,centre,units where param.hide_def=0 and param.id=grib.param_id + and attribute.id=grib.attribute_id and centre.id=grib.centre and units.id=param.units_id + order by edition,centre,param.o,param.id,grib.param_version,attribute.o; +EOF + + my $qh=$dbh->prepare($query); + $qh->execute(); + + # file containing the list of grib api parameters files we want to tar and + # distribute to users for them to download and update their list of parameter + # to the latest + open(TAR,$tarfilesflag ? ">>" : ">","tarfiles.txt") or die "Count not open file tarfiles.txt: $!"; + $tarfilesflag=1; + + while (my ($keyval,$force128,$edition,$centre,$paramId,$attribute,$value,$name,$shortName)=$qh->fetchrow_array ) + { + if ($centre eq "all" ) { $conceptDir=""; } + else { $conceptDir="/localConcepts/$centre"; } + #if ($key =~ /paramId/ && $force128==1 && $keyval >1000) { + # $keyval= $keyval % 1000; + #} + + if ($filebase ne "$basedir/grib$edition$conceptDir") { + if ($filebase) { + print $out "}\n"; + close $out; + } + $filebase="$basedir/grib$edition$conceptDir"; + mkpath($filebase); + + #copy("$filebase/$key.def","$filebase/$key.def.bkp") + # or die ("unable to copy $filebase/$key.def"); + + print TAR "grib$edition$conceptDir/$key.def\n"; + + system("p4 edit $filebase/$key.def"); + open($out,"> $filebase/$key.def") + or die "unable to open $filebase/$key.def"; + print $out "# Automatically generated by $0 from database $db\@$host, do not edit\n"; + $p=(); + } + if ($p ne $paramId || exists($seen{$attribute}) ) { + if ($p) { print $out "\t}\n"; } + print $out "#$name\n" ; + print $out "\'".$keyval."\' = {\n" ; + $p=$paramId; + %seen=(); + } + $seen{$attribute}=1; + print "($key=$keyval) $edition,$centre,$shortName,$paramId,$name,$attribute,$value\n"; + # we need to allow strings in the attribute_value field + # for the moment we apply a patch here + if ($attribute =~ /stepType/ ) { + $value="\"accum\""; + } + print $out "\t $attribute = $value ;\n" ; + } + if ($filebase) { + print $out "}\n"; + close $out; + } + + close(TAR); +} + +sub create_paramId_def { + my $p; my %seen; + + my $query="select edition,centre.abbreviation,param_id,attribute.name,attribute_value,param.name,param.shortName + from param,grib,attribute,centre where param.hide_def=0 and param.id=grib.param_id + and attribute.id=grib.attribute_id and centre.id=grib.centre + order by edition,centre,param.o,param.id,attribute.o"; + + my $qh=$dbh->prepare($query); + $qh->execute(); + + while (my ($edition,$centre,$paramId,$attribute,$value,$name,$shortName)=$qh->fetchrow_array ) + { + if ($centre eq "all" ) { $conceptDir=""; } + else { $conceptDir="/localConcepts/$centre"; } + + if ($filebase ne "$basedir/grib$edition$conceptDir") { + if ($filebase) { + print $out "}\n"; + close $out; + } + $filebase="$basedir/grib$edition$conceptDir"; + mkpath($filebase); + + copy("$filebase/paramId.def","$filebase/paramId.def.bkp") + or die ("unable to copy $filebase/paramId.def"); + system("p4 edit $filebase/paramId.def"); + open($out,"> $filebase/paramId.def") + or die "unable to open $filebase/paramId.def"; + print $out "# Automatically generated by $0 from database $db\@$host, do not edit\n"; + $p=(); + } + if ($p ne $paramId || exists($seen{$attribute}) ) { + if ($p) { print $out "\t}\n"; } + print $out "#$name\n" ; + print $out "\'".$paramId."\' = {\n" ; + $p=$paramId; + %seen=(); + } + $seen{$attribute}=1; + print "$edition,$centre,$shortName,$paramId,$name,$attribute,$value\n"; + print $out "\t $attribute = $value ;\n" ; + } + if ($filebase) { + print $out "}\n"; + close $out; + } +} + +sub create_def_old { + my ($key,$query)=@_; + + my $qh=$dbh->prepare($query); + $qh->execute(); + + while (my ($edition,$centre,$paramId,$value)=$qh->fetchrow_array ) + { + if ($centre eq "all" ) { $conceptDir=""; } + else { $conceptDir="/localConcepts/$centre"; } + + if ($filebase ne "$basedir/grib$edition$conceptDir") { + if ($filebase) { + close $out; + } + $filebase="$basedir/grib$edition$conceptDir"; + mkpath($filebase); + + copy("$filebase/$key.def","$filebase/$key.def.bkp") + or die ("unable to copy $filebase/$key.def"); + system("p4 edit $filebase/$key.def"); + open($out,"> $filebase/$key.def") + or die "unable to open $filebase/$key.def"; + print $out "# Automatically generated by $0 from database $db\@$host, do not edit\n"; + } + print $out "\'$value\' \t= { paramId=$paramId; }\n"; + } + if ($filebase) { + close $out; + } +} + +create_def("paramId"); +create_def("shortName"); +create_def("name"); +create_def("units"); + + +#create_paramId_def(); + +$query="select distinct edition,centre.abbreviation,param_id,param.shortName +from param,grib,centre where param.hide_def=0 and param.id=grib.param_id and +centre.id=grib.centre and shortName!='~' +order by centre,edition,param.o,param_id"; + +#create_def("shortName",$query); + +$query="select distinct edition,centre.abbreviation,param_id,param.name +from param,grib,centre where param.hide_def=0 and param.id=grib.param_id and +centre.id=grib.centre and shortName!='~' +order by centre,edition,param.o,param_id"; + +#create_def("name",$query); + +$query="select distinct edition,centre.abbreviation,param_id,units.name +from param,grib,centre,units where param.hide_def=0 and param.id=grib.param_id and units.id=param.units_id +and centre.id=grib.centre and shortName!='~' +order by centre,edition,param.o,param_id"; + +#create_def("units",$query); + diff --git a/definitions/create_mars_struct.pl b/definitions/create_mars_struct.pl new file mode 100755 index 000000000..31d4e724f --- /dev/null +++ b/definitions/create_mars_struct.pl @@ -0,0 +1,89 @@ +#!/usr/local/bin/perl56 -I/usr/local/lib/metaps/perl +use strict; +use File::Path ; +use File::Copy; +use DBI; +use Data::Dumper; + +my $db="param"; +my $host="wrep-db-misc-prod"; +my $user="ecmwf"; +my $pass=""; +my $filename; my $filebase; my $out; my $conceptDir; +my $query; my $q; my $qh; + +my $dbh = DBI->connect("dbi:mysql(RaiseError=>1):database=$db;host=$host",$user,$pass) or die $DBI::errstr; + +my $table; +my $number; +my $query="select id,shortName from param"; +my %grib1=(); +my $name; my $value; my $centre; + +my $qh=$dbh->prepare($query); +$qh->execute(); +$query="select grib.centre,attribute.name,grib.attribute_value,param_version + from grib,attribute where edition=1 and grib.param_id=? + and ( grib.attribute_id=3 or grib.attribute_id=1) and attribute.id=grib.attribute_id + order by grib.centre,param_version,attribute_id"; +my $qh1=$dbh->prepare($query); +my %values; +my %pvalues; +my $mars; + +while (my ($paramId,$shortName)=$qh->fetchrow_array ) +{ + die "$paramId" unless($shortName); + if ($shortName =~ /\w+/ ) { + push @{$values{$shortName}},$paramId; + push @{$pvalues{$paramId}},$shortName; + } + + $qh1->execute($paramId); + %grib1=(); + my $centre_last=""; + my $param_version; + + while ( ($centre,$name,$value,$param_version)=$qh1->fetchrow_array ) { + if (join(":",$centre,$param_version) ne $centre_last) { + $centre_last=join(":",$centre,$param_version); + if (exists $grib1{"indicatorOfParameter"} && exists $grib1{"table2Version"}) { + my $mars=$grib1{"indicatorOfParameter"}.".".$grib1{"table2Version"}; + push @{$values{$mars}},$paramId; + push @{$pvalues{$paramId}},$mars; + %grib1=(); + } + } + $grib1{$name}=$value; + } + + if (exists $grib1{"indicatorOfParameter"} && exists $grib1{"table2Version"}) { + my $mars=$grib1{"indicatorOfParameter"}.".".$grib1{"table2Version"}; + push @{$values{$mars}},$paramId; + push @{$pvalues{$paramId}},$mars; + } +} + +system("p4 edit mars_param.table"); +open(my $mars_param_out,"> mars_param.table") + or die "unable to open mars_param.table: $!"; + +foreach my $k ( sort keys %values ) { + print $mars_param_out "$k "; + print $mars_param_out join(" ", sort { $a <=> $b } @{$values{$k}}); + print $mars_param_out " | \n"; +} + +close $mars_param_out or die " mars_param.table: $!"; + +system("p4 edit param_id.table"); +open(my $param_id_out,"> param_id.table") + or die "unable to open param_id.table: $!"; + +foreach my $k ( sort keys %pvalues ) { + print $param_id_out "$k "; + print $param_id_out join(" ", sort { $a <=> $b } @{$pvalues{$k}}); + print $param_id_out " | \n"; +} + +close $param_id_out or die "param_id.table: $!"; diff --git a/definitions/create_tables.pl b/definitions/create_tables.pl new file mode 100755 index 000000000..25a0c4b3c --- /dev/null +++ b/definitions/create_tables.pl @@ -0,0 +1,121 @@ +#! /usr/local/apps/perl/current/bin/perl +# /usr/local/bin/perl56 -I/usr/local/lib/metaps/perl +# +# Script to update GRIB2 tables from database +# Usage: $0 [version] +# + +use strict; +use File::Path; +use File::Basename; +use File::Copy; +use DBI; + +my $basedir=dirname($0); # the "definitions" dir in grib_api workspace + +my $db="fm92_grib2"; +my $host="wrep-db-misc-prod"; +my $user="ecmwf"; +my $pass=""; +my $filename; my $filebase; my $out; my $conceptDir; +my $query; my $q; my $qh; +my $tablesVersion=6; # default GRIB2 version +my %records; + +# Check if user has provided arg to set table version +if ( @ARGV) { + $tablesVersion = $ARGV[0]; + if ($tablesVersion !~ /^\d+$/ ) { + die "Bad version number: '$tablesVersion'. Please enter a positive integer.\n"; + } +} +print "GRIB2 tablesVersion set to $tablesVersion\n"; + +my $dbh = DBI->connect("dbi:mysql(RaiseError=>1):database=$db;host=$host",$user,$pass) or die $DBI::errstr; + +########################################################################################### +sub create_parameter_tables { + my $tablesDir="$basedir/grib2/tables/$tablesVersion"; + my $tableFile=""; + + my $query="select discipline_id,category_id,param_id,name,units ". + "from parameter_specs order by discipline_id,category_id,param_id"; + + my $qh=$dbh->prepare($query); + $qh->execute(); + + while (my ($discipline,$category,$code,$name,$units)=$qh->fetchrow_array ) + { + my $f="$tablesDir/4.2.$discipline.$category.table"; + if ($f ne $tableFile) { + print "discipline=$discipline category=$category;\n"; + $tableFile=$f; + if ($out) { + # Write out what we stored in 'records' into the PREVIOUS file + print $out "# Automatically generated by $0 from database $db\@$host, do not edit\n"; + my @keys = sort { $a <=> $b } (keys %records); + foreach my $key (@keys) { print $out $records{$key}."\n"; } + close $out; + %records=(); + @keys=(); + } + system("p4 edit $tableFile"); + open($out,"> $tableFile") or die "unable to open $tableFile"; + } + next if ($code !~ /^\s*[0-9]/); + if (!$units) { $units="-"; } + my $codeText = "$code $code"; + my $unitsText = "($units)"; + if ($code =~ /\d\-\d/ ) { + # This is a range like 24-191 e.g. for Reserved entries + $codeText = "#$code"; # Comment out + $unitsText = ""; # Units do not make sense + } + $records{$code}="$codeText $name $unitsText"; + } + # Now write the final records set into the last opened file + if ($out) { + print $out "# Automatically generated by $0 from database $db\@$host, do not edit\n"; + my @keys = sort { $a <=> $b } (keys %records); + foreach my $key (@keys) { print $out $records{$key}."\n"; } + } + close $out; +} + +########################################################################################### +sub create_tables { + my $tablesDir="$basedir/grib2/tables/$tablesVersion"; + my $tableFile=""; + + my $query="select section_id,ctable_id,code,meaning from ctable_specs order by section_id,ctable_id"; + + my $qh=$dbh->prepare($query); + $qh->execute(); + + while (my ($section,$table,$code,$meaning)=$qh->fetchrow_array ) + { + my $f="$tablesDir/$section.$table.table"; + if ($f ne $tableFile) { + print "section=$section table=$table\n"; + $tableFile=$f; + if ($out) { + print $out "# Automatically generated by $0 from database $db\@$host, do not edit\n"; + my @keys = sort { $a <=> $b } (keys %records); + foreach my $key (@keys) { print $out $records{$key}."\n"; } + close $out; + %records=(); + @keys=(); + } + system("p4 edit $tableFile"); + open($out,"> $tableFile") or die "unable to open $tableFile"; + } + next if ($code =~ /-/) ; + $records{$code}="$code $code $meaning"; + } + close $out; +} + +create_parameter_tables(); + +#create_tables(); + diff --git a/definitions/dummy.am b/definitions/dummy.am new file mode 100644 index 000000000..e69de29bb diff --git a/definitions/empty_template.def b/definitions/empty_template.def new file mode 100644 index 000000000..cc16a58ce --- /dev/null +++ b/definitions/empty_template.def @@ -0,0 +1,2 @@ +label "x"; + diff --git a/definitions/extrules.am b/definitions/extrules.am new file mode 100644 index 000000000..1ddbb2184 --- /dev/null +++ b/definitions/extrules.am @@ -0,0 +1,4 @@ +paramid: + ./create_def.pl + ./create_mars_struct.pl + diff --git a/definitions/grib1/0.ecmf.table b/definitions/grib1/0.ecmf.table new file mode 100644 index 000000000..9d3538c16 --- /dev/null +++ b/definitions/grib1/0.ecmf.table @@ -0,0 +1 @@ +# Code table 0: Identification of centers diff --git a/definitions/grib1/0.table b/definitions/grib1/0.table new file mode 100644 index 000000000..36f492e52 --- /dev/null +++ b/definitions/grib1/0.table @@ -0,0 +1,96 @@ +# Code table 0: Identification of centers +0 0 Absent +1 ammc Melbourne (WMC) +2 2 Melbourne (WMC) +4 4 Moscow (WMC) +5 5 Moscow (WMC) +7 kwbc US National Weather Service - NCEP (WMC) +8 8 US National Weather Service - NWSTG (WMC) +9 9 US National Weather Service - Other (WMC) +10 10 Cairo (RSMC/RAFC) +12 12 Dakar (RSMC/RAFC) +14 14 Nairobi (RSMC/RAFC) +16 16 Atananarivo (RSMC) +18 18 Tunis-Casablanca (RSMC) +20 20 Las Palmas (RAFC) +21 21 Algiers (RSMC) +22 22 Lagos (RSMC) +26 26 Khabarovsk (RSMC) +28 28 New Delhi (RSMC/RAFC) +30 30 Novosibirsk (RSMC) +32 32 Tashkent (RSMC) +33 33 Jeddah (RSMC) +34 rjtd Japanese Meteorological Agency - Tokyo (RSMC) +36 36 Bankok +37 37 Ulan Bator +38 babj Beijing (RSMC) +40 rksl Seoul +41 41 Buenos Aires (RSMC/RAFC) +43 43 Brasilia (RSMC/RAFC) +45 45 Santiago +46 sbsj Brasilian Space Agency - INPE +51 51 Miami (RSMC/RAFC) +52 52 National Hurricane Center, Miami +53 53 Canadian Meteorological Service - Montreal (RSMC) +54 cwao Canadian Meteorological Service - Montreal (RSMC) +55 55 San Francisco +57 57 U.S. Air Force - Global Weather Center +58 fnmo US Navy - Fleet Numerical Oceanography Center +59 59 NOAA Forecast Systems Lab, Boulder CO +60 60 National Center for Atmospheric Research (NCAR), Boulder, CO +64 64 Honolulu +65 65 Darwin (RSMC) +67 67 Melbourne (RSMC) +69 69 Wellington (RSMC/RAFC) +74 egrr U.K. Met Office - Exeter +76 76 Moscow (RSMC/RAFC) +78 edzw Offenbach (RSMC) +80 cnmc Rome (RSMC) +82 eswi Norrkoping +84 lfpw French Weather Service - Toulouse +85 lfpw French Weather Service - Toulouse +86 86 Helsinki +87 87 Belgrade +88 enmi Oslo +89 89 Prague +90 90 Episkopi +91 91 Ankara +92 92 Frankfurt/Main (RAFC) +93 93 London (WAFC) +94 94 Copenhagen +95 95 Rota +96 96 Athens +97 97 European Space Agency (ESA) +98 ecmf European Center for Medium-Range Weather Forecasts +99 99 DeBilt, Netherlands +#100 to 109 Reserved for centres in Region I which are not in the list above +110 110 Hong-Kong +#111 to 133 Reserved for centres in Region II which are not in the list above +#134 to 153 Reserved for centres in Region I which are not listed above +#154 to 159 Reserved for centres in Region III which are not in the list above +160 160 US NOAA/NESDIS +# 161 to 185 Reserved for centres in Region IV which are not in the list above +# 186 to 198 Reserved for centres in Region I which are not listed above +# 199 to 209 Reserved for centres in Region V which are not in the list above +210 210 Frascati (ESA/ESRIN) +211 211 Lannion +212 212 Lisboa +213 213 Reykjavik +214 lemm INM +215 215 Zurich +216 216 Service ARGOS Toulouse +# 217 to 220 Reserved for centres in Region V which are not in the list above +# 221 to 253 Reserved for centres in Region VI which are not in the list above or below +224 lowm Austria +233 eidb Dublin +235 ingv INGV +239 crfc CERFAX +244 vuwien VUWien +245 knmi KNMI +246 ifmk IfM-Kiel +247 hadc Hadley Centre +250 cosmo COnsortium for Small scale MOdelling (COSMO) +254 eums EUMETSAT Operation Centre +# 255 Missing value +255 consensus Consensus + diff --git a/definitions/grib1/1.table b/definitions/grib1/1.table new file mode 100644 index 000000000..7dc22b125 --- /dev/null +++ b/definitions/grib1/1.table @@ -0,0 +1,5 @@ +# CODE TABLE 1, Flag indication relative to section 2 and 3 +1 0 Section 2 omited +1 1 Section 2 included +2 0 Section 3 omited +2 1 Section 3 included diff --git a/definitions/grib1/10.table b/definitions/grib1/10.table new file mode 100644 index 000000000..cd51461a4 --- /dev/null +++ b/definitions/grib1/10.table @@ -0,0 +1,4 @@ +# CODE TABLE 10, Coefficient Storage Mode +1 1 The complex coefficients Xnm are stored for m>0 as pairs of real numbers +2 2 Spherical harmonics-complex packing +3 3 Spherical harmonics ieee packing diff --git a/definitions/grib1/11-2.table b/definitions/grib1/11-2.table new file mode 100644 index 000000000..ef1c3c1b3 --- /dev/null +++ b/definitions/grib1/11-2.table @@ -0,0 +1,34 @@ +# CODE TABLE 11-2, Flag + +# Undocumented use of octet 14 extededFlags +# Taken from d2ordr.F +# R------- only bit 1 is reserved. +# -0------ single datum at each grid point. +# -1------ matrix of values at each grid point. +# --0----- no secondary bit map. +# --1----- secondary bit map present. +# ---0---- second order values have constant width. +# ---1---- second order values have different widths. +# ----0--- no general extended second order packing. +# ----1--- general extended second order packing used. +# -----0-- standard field ordering in section 4. +# -----1-- boustrophedonic ordering in section 4. + + +1 0 Reserved +1 1 Reserved +2 0 Single datum at each grid point +2 1 Matrix of values at each grid point +3 0 No secondary bitmap Present +3 1 Secondary bitmap Present +4 0 Second-order values constant width +4 1 Second-order values different widths +5 0 no general extended second order packing +5 1 general extended second order packing used +6 0 standard field ordering in section 4 +6 1 boustrophedonic ordering in section 4 +# ------00 no spatial differencing used. +# ------01 1st-order spatial differencing used. +# ------10 2nd-order " " " . +# ------11 3rd-order " " " . + diff --git a/definitions/grib1/11.table b/definitions/grib1/11.table new file mode 100644 index 000000000..ec5376c11 --- /dev/null +++ b/definitions/grib1/11.table @@ -0,0 +1,9 @@ +# CODE TABLE 11, Flag +1 0 Grid-point data +1 1 Spherical harmonic coefficients +2 0 Simple packing +2 1 Complex or second-order packing +3 0 Floating point values are represented +3 1 Integer values are represented +4 0 No additional flags at octet 14 +4 1 Octet 14 contains additional flag bits diff --git a/definitions/grib1/12.table b/definitions/grib1/12.table new file mode 100644 index 000000000..a72a64c38 --- /dev/null +++ b/definitions/grib1/12.table @@ -0,0 +1,13 @@ +# CODE TABLE 12, matrix coordinates values functions +0 0 Explicit co-ordinate values sent +1 1 Linear co-cordinates +2 2 Log co-ordinates +3 3 Reserved +4 4 Reserved +5 5 Reserved +6 6 Reserved +7 7 Reserved +8 8 Reserved +9 9 Reserved +10 10 Reserved +11 11 Geometric Co-ordinates diff --git a/definitions/grib1/13.table b/definitions/grib1/13.table new file mode 100644 index 000000000..e4724a016 --- /dev/null +++ b/definitions/grib1/13.table @@ -0,0 +1,4 @@ +# CODE TABLE 13, matrix coordinates parameter +1 1 Direction +2 2 Frequency +3 3 Radial number diff --git a/definitions/grib1/2.0.1.table b/definitions/grib1/2.0.1.table new file mode 100644 index 000000000..4a94b8acf --- /dev/null +++ b/definitions/grib1/2.0.1.table @@ -0,0 +1,129 @@ +1 p P Pressure Pa +2 msl MSL Mean sea level pressure Pa +3 3 None Pressure tendency Pa s**-1 +4 pv PV Potential vorticity K m**2 kg**-1 s**-1 +5 5 None ICAO Standard Atmosphere reference height m +6 z Z Geopotential m**2 s**-2 +7 gh GH Geopotential height gpm +8 h H Geometrical height m +9 9 None Standard deviation of height m +10 tco3 TCO3 Total (column) ozone Dobson (kg m**-2) +11 t T Temperature K +12 12 None Virtual temperature K +13 13 None Potential temperature K +14 14 None Pseudo-adiabatic potential temperature K +15 15 None Maximum temperature K +16 16 None Minimum temperature K +17 17 None Dew-point temperature K +18 18 None Dew-point depression (or deficit) K +19 19 None Lapse rate K s**-1 +20 20 None Visibility m +21 21 None Radar spectra (1) - +22 22 None Radar spectra (2) - +23 23 None Radar spectra (3) - +24 24 None Parcel lifted index (to 500 hPa) K +25 25 None Temperature anomaly K +26 26 None Pressure anomaly Pa +27 27 None Geopotential height anomaly gpm +28 28 None Wave spectra (1) - +29 29 None Wave spectra (2) - +30 30 None Wave spectra (3) - +31 31 None Wind direction Degree true +32 32 None Wind speed m s**-1 +33 u U U-component of wind m s**-1 +34 v V V-component of wind m s**-1 +35 35 None Stream Function m**2 s**-1 +36 36 None Velocity Potential m**2 s**-1 +37 37 None Montgomery stream Function m**2 s**-1 +38 38 None Sigma coordinate vertical velocity s**-1 +39 w W Vertical velocity Pa s**-1 +40 40 None Vertical velocity m s**-1 +41 41 None Absolute vorticity s**-1 +42 42 None Absolute divergence s**-1 +43 vo VO Relative vorticity s**-1 +44 d D Relative divergence s**-1 +45 45 None Vertical u-component shear s**-1 +46 46 None Vertical v-component shear s**-1 +47 47 None Direction of current Degree true +48 48 None Speed of current m s**-1 +49 49 None U-component of current m s**-1 +50 50 None V-component of current m s**-1 +51 q Q Specific humidity kg kg**-1 +52 r R Relative humidity % +53 53 None Humidity mixing ratio kg m**-2 +54 54 None Precipitable water kg m**-2 +55 55 None Vapour pressure Pa +56 56 None Saturation deficit Pa +57 e E Evaporation kg m**-2 +58 ciwc CIWC Cloud ice kg m**-2 +59 59 None Precipitation rate kg m**-2 s**-1 +60 60 None Thunderstorm probability % +61 tp TP Total precipitation kg m**-2 +62 62 LSP Large scale precipitation kg m**-2 +63 63 None Convective precipitation (water) kg m**-2 +64 64 None Snow fall rate water equivalent kg m**-2 s**-1 +65 sf SF Water equivalentof accumulated snow depth kg m**-2 +66 sd SD Snow depth m (of water equivalent) +67 67 None Mixed layer depth m +68 68 None Transient thermocline depth m +69 69 None Main thermocline depth m +70 70 None Main thermocline anomaly m +71 tcc TCC Total cloud cover % +72 ccc CCC Convective cloud cover % +73 lcc LCC Low cloud cover % +74 mcc MCC Medium cloud cover % +75 hcc HCC High cloud cover % +76 clwc CLWC Cloud liquid water content kg kg**-1 +77 77 None Best lifted index (to 500 hPa) K +78 csf CSF Convective snow-fall kg m**-2 +79 lsf LSF Large scale snow-fall kg m**-2 +80 80 None Water temperature K +81 lsm LSM Land cover (1=land, 0=sea) (0 - 1) +82 82 None Deviation of sea-level from mean m +83 sr SR Surface roughness m +84 al AL Albedo - +85 st ST Surface temperature of soil K +86 ssw SSW Soil moisture content kg m**-2 +87 veg VEG Percentage of vegetation % +88 88 None Salinity kg kg**-1 +89 89 None Density kg m**-3 +90 ro RO Water run-off kg m**-2 +91 91 None Ice cover (1=land, 0=sea) (0 - 1) +92 92 None Ice thickness m +93 93 None Direction of ice drift Degree true +94 94 None Speed of ice drift m s*-1 +95 95 None U-component of ice drift m s**-1 +96 96 None V-component of ice drift m s**-1 +97 97 None Ice growth rate m s**-1 +98 98 None Ice divergence s**-1 +99 99 None Snow melt kg m**-2 +100 swh SWH Signific.height,combined wind waves+swell m +101 mdww MDWW Mean direction of wind waves Degree true +102 shww SHWW Significant height of wind waves m +103 mpww MPWW Mean period of wind waves s +104 104 None Direction of swell waves Degree true +105 105 None Significant height of swell waves m +106 106 None Mean period of swell waves s +107 mdps MDPS Mean direction of primary swell Degree true +108 mpps MPPS Mean period of primary swell s +109 109 None Secondary wave direction Degree true +110 110 None Secondary wave period s +111 111 None Net short-wave radiation flux (surface) W m**-2 +112 112 None Net long-wave radiation flux (surface) W m**-2 +113 113 None Net short-wave radiationflux(atmosph.top) W m**-2 +114 114 None Net long-wave radiation flux(atmosph.top) W m**-2 +115 115 None Long-wave radiation flux W m**-2 +116 116 None Short-wave radiation flux W m**-2 +117 117 None Global radiation flux W m**-2 +118 118 None Brightness temperature K +119 119 None Radiance (with respect to wave number) W m**-1 sr**-1 +120 120 None Radiance (with respect to wave length) W m**-1 sr**-1 +121 slhf SLHF (surface) Latent heat flux W m**-2 +122 sshf SSHF (surface) Sensible heat flux W m**-2 +123 bld BLD Boundary layer dissipation W m**-2 +124 124 None Momentum flux, u-component N m**-2 +125 125 None Momentum flux, v-component N m**-2 +126 126 None Wind mixing energy J +127 127 None Image data - +160 160 Unknown +255 - - Indicates a missing value - diff --git a/definitions/grib1/2.0.2.table b/definitions/grib1/2.0.2.table new file mode 100644 index 000000000..48b7b84a1 --- /dev/null +++ b/definitions/grib1/2.0.2.table @@ -0,0 +1,128 @@ +1 p P Pressure Pa +2 msl MSL Mean sea level pressure Pa +3 3 None Pressure tendency Pa s**-1 +4 pv PV Potential vorticity K m**2 kg**-1 s**-1 +5 5 None ICAO Standard Atmosphere reference height m +6 z Z Geopotential m**2 s**-2 +7 gh GH Geopotential height gpm +8 h H Geometrical height m +9 9 None Standard deviation of height m +10 tco3 TCO3 Total (column) ozone Dobson (kg m**-2) +11 t T Temperature K +12 12 None Virtual temperature K +13 13 None Potential temperature K +14 14 None Pseudo-adiabatic potential temperature K +15 15 None Maximum temperature K +16 16 None Minimum temperature K +17 17 None Dew-point temperature K +18 18 None Dew-point depression (or deficit) K +19 19 None Lapse rate K s**-1 +20 20 None Visibility m +21 21 None Radar spectra (1) - +22 22 None Radar spectra (2) - +23 23 None Radar spectra (3) - +24 24 None Parcel lifted index (to 500 hPa) K +25 25 None Temperature anomaly K +26 26 None Pressure anomaly Pa +27 27 None Geopotential height anomaly gpm +28 28 None Wave spectra (1) - +29 29 None Wave spectra (2) - +30 30 None Wave spectra (3) - +31 31 None Wind direction Degree true +32 32 None Wind speed m s**-1 +33 u U U-component of wind m s**-1 +34 v V V-component of wind m s**-1 +35 35 None Stream Function m**2 s**-1 +36 36 None Velocity Potential m**2 s**-1 +37 37 None Montgomery stream Function m**2 s**-1 +38 38 None Sigma coordinate vertical velocity s**-1 +39 w W Vertical velocity Pa s**-1 +40 40 None Vertical velocity m s**-1 +41 41 None Absolute vorticity s**-1 +42 42 None Absolute divergence s**-1 +43 vo VO Relative vorticity s**-1 +44 d D Relative divergence s**-1 +45 45 None Vertical u-component shear s**-1 +46 46 None Vertical v-component shear s**-1 +47 47 None Direction of current Degree true +48 48 None Speed of current m s**-1 +49 49 None U-component of current m s**-1 +50 50 None V-component of current m s**-1 +51 q Q Specific humidity kg kg**-1 +52 r R Relative humidity % +53 53 None Humidity mixing ratio kg m**-2 +54 54 None Precipitable water kg m**-2 +55 55 None Vapour pressure Pa +56 56 None Saturation deficit Pa +57 e E Evaporation kg m**-2 +58 ciwc CIWC Cloud ice kg m**-2 +59 59 None Precipitation rate kg m**-2 s**-1 +60 60 None Thunderstorm probability % +61 tp TP Total precipitation kg m**-2 +62 62 LSP Large scale precipitation kg m**-2 +63 63 None Convective precipitation (water) kg m**-2 +64 64 None Snow fall rate water equivalent kg m**-2 s**-1 +65 sf SF Water equivalentof accumulated snow depth kg m**-2 +66 sd SD Snow depth m (of water equivalent) +67 67 None Mixed layer depth m +68 68 None Transient thermocline depth m +69 69 None Main thermocline depth m +70 70 None Main thermocline anomaly m +71 tcc TCC Total cloud cover % +72 ccc CCC Convective cloud cover % +73 lcc LCC Low cloud cover % +74 mcc MCC Medium cloud cover % +75 hcc HCC High cloud cover % +76 clwc CLWC Cloud liquid water content kg kg**-1 +77 77 None Best lifted index (to 500 hPa) K +78 csf CSF Convective snow-fall kg m**-2 +79 lsf LSF Large scale snow-fall kg m**-2 +80 80 None Water temperature K +81 lsm LSM Land cover (1=land, 0=sea) (0 - 1) +82 82 None Deviation of sea-level from mean m +83 sr SR Surface roughness m +84 al AL Albedo - +85 st ST Surface temperature of soil K +86 ssw SSW Soil moisture content kg m**-2 +87 veg VEG Percentage of vegetation % +88 88 None Salinity kg kg**-1 +89 89 None Density kg m**-3 +90 ro RO Water run-off kg m**-2 +91 91 None Ice cover (1=land, 0=sea) (0 - 1) +92 92 None Ice thickness m +93 93 None Direction of ice drift Degree true +94 94 None Speed of ice drift m s*-1 +95 95 None U-component of ice drift m s**-1 +96 96 None V-component of ice drift m s**-1 +97 97 None Ice growth rate m s**-1 +98 98 None Ice divergence s**-1 +99 99 None Snow melt kg m**-2 +100 swh SWH Signific.height,combined wind waves+swell m +101 mdww MDWW Mean direction of wind waves Degree true +102 shww SHWW Significant height of wind waves m +103 mpww MPWW Mean period of wind waves s +104 104 None Direction of swell waves Degree true +105 105 None Significant height of swell waves m +106 106 None Mean period of swell waves s +107 mdps MDPS Mean direction of primary swell Degree true +108 mpps MPPS Mean period of primary swell s +109 109 None Secondary wave direction Degree true +110 110 None Secondary wave period s +111 111 None Net short-wave radiation flux (surface) W m**-2 +112 112 None Net long-wave radiation flux (surface) W m**-2 +113 113 None Net short-wave radiationflux(atmosph.top) W m**-2 +114 114 None Net long-wave radiation flux(atmosph.top) W m**-2 +115 115 None Long-wave radiation flux W m**-2 +116 116 None Short-wave radiation flux W m**-2 +117 117 None Global radiation flux W m**-2 +118 118 None Brightness temperature K +119 119 None Radiance (with respect to wave number) W m**-1 sr**-1 +120 120 None Radiance (with respect to wave length) W m**-1 sr**-1 +121 slhf SLHF (surface) Latent heat flux W m**-2 +122 sshf SSHF (surface) Sensible heat flux W m**-2 +123 bld BLD Boundary layer dissipation W m**-2 +124 124 None Momentum flux, u-component N m**-2 +125 125 None Momentum flux, v-component N m**-2 +126 126 None Wind mixing energy J +127 127 None Image data - +255 - - Indicates a missing value - diff --git a/definitions/grib1/2.0.3.table b/definitions/grib1/2.0.3.table new file mode 100644 index 000000000..4a94b8acf --- /dev/null +++ b/definitions/grib1/2.0.3.table @@ -0,0 +1,129 @@ +1 p P Pressure Pa +2 msl MSL Mean sea level pressure Pa +3 3 None Pressure tendency Pa s**-1 +4 pv PV Potential vorticity K m**2 kg**-1 s**-1 +5 5 None ICAO Standard Atmosphere reference height m +6 z Z Geopotential m**2 s**-2 +7 gh GH Geopotential height gpm +8 h H Geometrical height m +9 9 None Standard deviation of height m +10 tco3 TCO3 Total (column) ozone Dobson (kg m**-2) +11 t T Temperature K +12 12 None Virtual temperature K +13 13 None Potential temperature K +14 14 None Pseudo-adiabatic potential temperature K +15 15 None Maximum temperature K +16 16 None Minimum temperature K +17 17 None Dew-point temperature K +18 18 None Dew-point depression (or deficit) K +19 19 None Lapse rate K s**-1 +20 20 None Visibility m +21 21 None Radar spectra (1) - +22 22 None Radar spectra (2) - +23 23 None Radar spectra (3) - +24 24 None Parcel lifted index (to 500 hPa) K +25 25 None Temperature anomaly K +26 26 None Pressure anomaly Pa +27 27 None Geopotential height anomaly gpm +28 28 None Wave spectra (1) - +29 29 None Wave spectra (2) - +30 30 None Wave spectra (3) - +31 31 None Wind direction Degree true +32 32 None Wind speed m s**-1 +33 u U U-component of wind m s**-1 +34 v V V-component of wind m s**-1 +35 35 None Stream Function m**2 s**-1 +36 36 None Velocity Potential m**2 s**-1 +37 37 None Montgomery stream Function m**2 s**-1 +38 38 None Sigma coordinate vertical velocity s**-1 +39 w W Vertical velocity Pa s**-1 +40 40 None Vertical velocity m s**-1 +41 41 None Absolute vorticity s**-1 +42 42 None Absolute divergence s**-1 +43 vo VO Relative vorticity s**-1 +44 d D Relative divergence s**-1 +45 45 None Vertical u-component shear s**-1 +46 46 None Vertical v-component shear s**-1 +47 47 None Direction of current Degree true +48 48 None Speed of current m s**-1 +49 49 None U-component of current m s**-1 +50 50 None V-component of current m s**-1 +51 q Q Specific humidity kg kg**-1 +52 r R Relative humidity % +53 53 None Humidity mixing ratio kg m**-2 +54 54 None Precipitable water kg m**-2 +55 55 None Vapour pressure Pa +56 56 None Saturation deficit Pa +57 e E Evaporation kg m**-2 +58 ciwc CIWC Cloud ice kg m**-2 +59 59 None Precipitation rate kg m**-2 s**-1 +60 60 None Thunderstorm probability % +61 tp TP Total precipitation kg m**-2 +62 62 LSP Large scale precipitation kg m**-2 +63 63 None Convective precipitation (water) kg m**-2 +64 64 None Snow fall rate water equivalent kg m**-2 s**-1 +65 sf SF Water equivalentof accumulated snow depth kg m**-2 +66 sd SD Snow depth m (of water equivalent) +67 67 None Mixed layer depth m +68 68 None Transient thermocline depth m +69 69 None Main thermocline depth m +70 70 None Main thermocline anomaly m +71 tcc TCC Total cloud cover % +72 ccc CCC Convective cloud cover % +73 lcc LCC Low cloud cover % +74 mcc MCC Medium cloud cover % +75 hcc HCC High cloud cover % +76 clwc CLWC Cloud liquid water content kg kg**-1 +77 77 None Best lifted index (to 500 hPa) K +78 csf CSF Convective snow-fall kg m**-2 +79 lsf LSF Large scale snow-fall kg m**-2 +80 80 None Water temperature K +81 lsm LSM Land cover (1=land, 0=sea) (0 - 1) +82 82 None Deviation of sea-level from mean m +83 sr SR Surface roughness m +84 al AL Albedo - +85 st ST Surface temperature of soil K +86 ssw SSW Soil moisture content kg m**-2 +87 veg VEG Percentage of vegetation % +88 88 None Salinity kg kg**-1 +89 89 None Density kg m**-3 +90 ro RO Water run-off kg m**-2 +91 91 None Ice cover (1=land, 0=sea) (0 - 1) +92 92 None Ice thickness m +93 93 None Direction of ice drift Degree true +94 94 None Speed of ice drift m s*-1 +95 95 None U-component of ice drift m s**-1 +96 96 None V-component of ice drift m s**-1 +97 97 None Ice growth rate m s**-1 +98 98 None Ice divergence s**-1 +99 99 None Snow melt kg m**-2 +100 swh SWH Signific.height,combined wind waves+swell m +101 mdww MDWW Mean direction of wind waves Degree true +102 shww SHWW Significant height of wind waves m +103 mpww MPWW Mean period of wind waves s +104 104 None Direction of swell waves Degree true +105 105 None Significant height of swell waves m +106 106 None Mean period of swell waves s +107 mdps MDPS Mean direction of primary swell Degree true +108 mpps MPPS Mean period of primary swell s +109 109 None Secondary wave direction Degree true +110 110 None Secondary wave period s +111 111 None Net short-wave radiation flux (surface) W m**-2 +112 112 None Net long-wave radiation flux (surface) W m**-2 +113 113 None Net short-wave radiationflux(atmosph.top) W m**-2 +114 114 None Net long-wave radiation flux(atmosph.top) W m**-2 +115 115 None Long-wave radiation flux W m**-2 +116 116 None Short-wave radiation flux W m**-2 +117 117 None Global radiation flux W m**-2 +118 118 None Brightness temperature K +119 119 None Radiance (with respect to wave number) W m**-1 sr**-1 +120 120 None Radiance (with respect to wave length) W m**-1 sr**-1 +121 slhf SLHF (surface) Latent heat flux W m**-2 +122 sshf SSHF (surface) Sensible heat flux W m**-2 +123 bld BLD Boundary layer dissipation W m**-2 +124 124 None Momentum flux, u-component N m**-2 +125 125 None Momentum flux, v-component N m**-2 +126 126 None Wind mixing energy J +127 127 None Image data - +160 160 Unknown +255 - - Indicates a missing value - diff --git a/definitions/grib1/2.128.table b/definitions/grib1/2.128.table new file mode 100644 index 000000000..ed1bac730 --- /dev/null +++ b/definitions/grib1/2.128.table @@ -0,0 +1,255 @@ +# CODE TABLE 2, 128 Flag indication relative to section 2 and 3 +001 001 STRF Stream function m**2 s**-1 - +002 002 VPOT Velocity potential m**2 s**-1 - +003 003 PT Potential temperature K - +004 004 EQPT Equivalent potential temperature K - +005 005 SEPT Saturated equivalent potential temperature K - +006 006 None Reserved for Metview - - +007 007 None Reserved for Metview - - +008 008 None Reserved for Metview - - +009 009 None Reserved for Metview - - +010 010 None Reserved for Metview - - +011 011 UDVW U component of divergent wind m s**-1 - +012 012 VDVW V component of divergent wind m s**-1 - +013 013 URTW U component of rotational wind m s**-1 - +014 014 VRTW V component of rotational wind m s**-1 - +015 015 None Reserved for Metview - - +016 016 None Reserved for Metview - - +017 017 None Reserved for Metview - - +018 018 None Reserved for Metview - - +019 019 None Reserved for Metview - - +020 020 None Reserved for Metview - - +021 021 UCTP Unbalanced component of temperature K - +022 022 UCLN Unbalanced component of logarithm of surface pressure - - +023 023 UCDV Unbalanced component of divergence s**-1 - +024 024 None Reserved for future unbalanced components - - +025 025 None Reserved for future unbalanced components - - +026 026 CL Lake cover (0-1) - +027 027 CVL Low vegetation cover (0-1) - +028 028 CVH High vegetation cover (0-1) - +029 029 TVL Type of low vegetation - Table index +030 030 TVH Type of high vegetation - Table index +031 031 CI Sea-ice cover (0-1) - +032 032 ASN Snow albedo (0-1) - +033 033 RSN Snow density kg m**-3 - +034 034 SSTK Sea surface temperature K K +035 035 ISTL1 Ice surface temperature layer 1 K - +036 036 ISTL2 Ice surface temperature layer 2 K - +037 037 ISTL3 Ice surface temperature layer 3 K - +038 038 ISTL4 Ice surface temperature layer 4 K - +039 039 SWVL1 Volumetric soil water layer 1 m**3 m**-3 - +040 040 SWVL2 Volumetric soil water layer 2 m**3 m**-3 - +041 041 SWVL3 Volumetric soil water layer 3 m**3 m**-3 - +042 042 SWVL4 Volumetric soil water layer 4 m**3 m**-3 - +043 043 SLT Soil type - - +044 044 ES Snow evaporation m of water Accumulated field +045 045 SMLT Snowmelt m of water Accumulated field +046 046 SDUR Solar duration s - +047 047 DSRP Direct solar radiation w m**-2 Incident on a plane perpendicular to the Sun's direction +048 048 MAGSS Magnitude of surface stress N m**-2 s Accumulated field +049 049 10FG 10 metre wind gust m s**-1 Maximum since previous post-processing +050 050 LSPF Large-scale precipitation fraction s Accumulated field +051 051 MX2T24 Maximum 2 metre temperature K During previous 24 hours +052 052 - Minimum 2 metre temperature K During previous 24 hours +053 053 MONT Montgomery potential m**2 s**-2 - +054 054 PRES Pressure Pa - +055 055 - Mean 2 metre temperature in past 24 hours K 6-hourly intervals +056 056 MN2D24 Mean 2 metre dewpoint temperature in past 24 hours K 6-hourly intervals +57 57 UVB Downward UV radiation at the surface w m**-2 s Ultra-violet band B. Accumulated field. +58 58 PAR Photosynthetically active radiation at the surface w m**-2 s Accumulated field. +59 59 CAPE Convective available potential energy J kg**-1 - +060 060 PV Potential vorticity K m**2 kg**-1 s**-1 - +061 061 TPO Total precipitation from observations Millimetres*100 + number of stations Rainfall amount found by averaging over a number of observing stations +062 062 OBCT Observation count - Count of observations used in calculating value at a gridpoint +063 063 - Start time for skin temperature difference s Seconds from reference time +064 064 - Finish time for skin temperature difference s Seconds from reference time +065 065 - Skin temperature difference K - +066 066 - Leaf area index, low vegetation m**2 / m**2 - +067 067 - Leaf area index, high vegetation m**2 / m**2 - +068 068 - Minimum stomatal resistance, low vegetation s m**2 +069 069 - Minimum stomatal resistance, high vegetation s m**2 +070 070 - Biome cover, low vegetation [0,1] +071 071 - Biome cover, high vegetation [0,1] +72 72 - Unused +73 73 - Unused +74 74 - Unused +75 75 - Unused +76 76 - Unused +77 77 - Unused +78 78 TCLW Total column liquid water kg m**-2 +79 79 TCIW Total column ice water kg m**-2 +80 80 80 Experimental product Undefined Contents may vary +81 81 81 Experimental product Undefined Contents may vary +82 82 82 Experimental product Undefined Contents may vary +83 83 83 Experimental product Undefined Contents may vary +84 84 84 Experimental product Undefined Contents may vary +85 85 85 Experimental product Undefined Contents may vary +86 86 86 Experimental product Undefined Contents may vary +87 87 87 Experimental product Undefined Contents may vary +88 88 88 Experimental product Undefined Contents may vary +89 89 89 Experimental product Undefined Contents may vary +90 90 90 Experimental product Undefined Contents may vary +91 91 91 Experimental product Undefined Contents may vary +92 92 92 Experimental product Undefined Contents may vary +93 93 93 Experimental product Undefined Contents may vary +94 94 94 Experimental product Undefined Contents may vary +95 95 95 Experimental product Undefined Contents may vary +96 96 96 Experimental product Undefined Contents may vary +97 97 97 Experimental product Undefined Contents may vary +98 98 98 Experimental product Undefined Contents may vary +99 99 99 Experimental product Undefined Contents may vary +100 100 100 Experimental product Undefined Contents may vary +101 101 101 Experimental product Undefined Contents may vary +102 102 102 Experimental product Undefined Contents may vary +103 103 103 Experimental product Undefined Contents may vary +104 104 104 Experimental product Undefined Contents may vary +105 105 105 Experimental product Undefined Contents may vary +106 106 106 Experimental product Undefined Contents may vary +107 107 107 Experimental product Undefined Contents may vary +108 108 108 Experimental product Undefined Contents may vary +109 109 109 Experimental product Undefined Contents may vary +110 110 110 Experimental product Undefined Contents may vary +111 111 111 Experimental product Undefined Contents may vary +112 112 112 Experimental product Undefined Contents may vary +113 113 113 Experimental product Undefined Contents may vary +114 114 114 Experimental product Undefined Contents may vary +115 115 115 Experimental product Undefined Contents may vary +116 116 116 Experimental product Undefined Contents may vary +117 117 117 Experimental product Undefined Contents may vary +118 118 118 Experimental product Undefined Contents may vary +119 119 119 Experimental product Undefined Contents may vary +121 121 MX2T6 Maximum temperature at 2 metres K During previous 6 hours +122 122 MN2T6 Minimum temperature at 2 metres K During previous 6 hours +123 123 10FG6 10 metre wind gust m s**-1 During previous 6 hours +124 124 - Unused - - +125 125 - Vertically integrated total energy J m**-2 Integrated over a number of model levels +126 126 - Generic parameter for sensitive area prediction Various Originating centre dependent +127 127 AT Atmospheric tide - Not GRIB data +128 128 BV Budget values - Not GRIB data +129 129 Z Geopotential m**2 s**-2 At the surface: orography +130 130 T Temperature K - +131 131 U U velocity m s**-1 - +132 132 V V velocity m s**-1 - +133 133 Q Specific humidity kg kg**-1 - +134 134 SP Surface pressure Pa - +135 135 W Vertical velocity Pa s**-1 - +136 136 TCW Total column water kg m**-2 Liquid + ice + vapour +137 137 TCWV Total column water vapour kg m**-2 - +138 138 VO Vorticity (relative) s**-1 - +139 139 STL1 Soil temperature level 1 K Soil temperature (ST) before 19930804 +140 140 SWL1 Soil wetness level 1 m of water Surface soil wetness (SSW) before 19930804 +141 141 SD Snow depth m of water equivalent - +142 142 LSP Large scale precipitation m Accumulated field +143 143 CP Convective precipitation m Accumulated field +144 144 SF Snowfall (convective + stratiform) m of water equivalent Accumulated field +145 145 BLD Boundary layer dissipation W m**-2 s Accumulated field +146 146 SSHF Surface sensible heat flux W m**-2 s Accumulated field +147 147 SLHF Surface latent heat flux W m**-2 s Accumulated field +148 148 CHNK Charnock - Surface stress (SS) before 19980519 +149 149 SNR Surface net radiation W m**-2 s Accumulated field +150 150 TNR Top net radiation - - +151 151 MSL Mean sea level pressure Pa - +152 152 LNSP Logarithm of surface pressure - - +153 153 SWHR Short-wave heating rate K Accumulated field +154 154 LWHR Long-wave heating rate K Accumulated field +155 155 D Divergence s**-1 - +156 156 GH Height m Geopotential height +157 157 R Relative humidity % - +158 158 TSP Tendency of surface pressure Pa s**-1 - +159 159 BLH Boundary layer height m - +160 160 SDOR Standard deviation of orography - - +161 161 ISOR Anisotropy of sub-gridscale orography - - +162 162 ANOR Angle of sub-gridscale orography rad - +163 163 SLOR Slope of sub-gridscale orography - - +164 164 TCC Total cloud cover (0 - 1) - +165 165 10U 10 metre U wind component m s**-1 - +166 166 10V 10 metre V wind component m s**-1 - +167 167 2T 2 metre temperature K - +168 168 2D 2 metre dewpoint temperature K - +169 169 SSRD Surface solar radiation downwards W m**-2 s Accumulated field +170 170 STL2 Soil temperature level 2 K Deep soil temperature (DST) before 19930804 +171 171 SWL2 Soil wetness level 2 m of water Deep soil wetness (DSW) before 19930804. Scaled: depth surf water layer 7cm deep +172 172 LSM Land-sea mask (0, 1) - +173 173 SR Surface roughness m - +174 174 AL Albedo (0 - 1) - +175 175 STRD Surface thermal radiation downwards W m**-2 s Accumulated field +176 176 SSR Surface solar radiation W m**-2 s Accumulated field +177 177 STR Surface thermal radiation W m**-2 s Accumulated field +178 178 TSR Top solar radiation W m**-2 s Accumulated field +179 179 TTR Top thermal radiation W m**-2 s Accumulated field +180 180 EWSS East-West surface stress N m**-2 s Accumulated field +181 181 NSSS North-South surface stress N m**-2 s Accumulated field +182 182 E Evaporation m of water Accumulated field +183 183 STL3 Soil temperature level 3 K Climatological deep soil temperature (CDST) before 19930804 +184 184 SWL3 Soil wetness level 3 m of water Climatological deep soil wetness (CDSW) before 19930804.Scaled depth surf water 7cm deep +185 185 CCC Convective cloud cover (0 - 1) - +186 186 LCC Low cloud cover (0 - 1) - +187 187 MCC Medium cloud cover (0 - 1) - +188 188 HCC High cloud cover (0 - 1) - +189 189 SUND Sunshine duration s Accumulated field +190 190 EWOV East-West component of sub-grid orographic variance m**2 - +191 191 NSOV North-South component of sub-grid orographic variance m**2 - +192 192 NWOV North-West/South-East component of sub-grid orographic variance m**2 - +193 193 NEOV North-East/South-West component of sub-grid orographic variance m**2 - +194 194 BTMP Brightness temperature K - +195 195 LGWS Latitudinal component of gravity wave stress N m**-2 s Accumulated field +196 196 MGWS Meridional component of gravity wave stress N m**-2 s Accumulated field +197 197 GWD Gravity wave dissipation W m**-2 s Accumulated field +198 198 SRC Skin reservoir content m of water - +199 199 VEG Vegetation fraction (0 - 1) - +200 200 VSO Variance of sub-gridscale orography m**2 - +201 201 MX2T Maximum temperature at 2 metres since previous post-processing K - +202 202 MN2T Minimum temperature at 2 metres since previous post-processing K - +203 203 O3 Ozone mass mixing ratio kg kg**-1 - +204 204 PAW Precipiation analysis weights - - +205 205 RO Runoff m Accumulated field +206 206 TCO3 Total column ozone kg m**-2 Before 20010612 was in Dobsons. 1 Dobson = 2.1415E-5 kg m**-2 +207 207 10SI 10 metre wind speed m s**-1 - +208 208 TSRC Top net solar radiation, clear sky W m**-2 s Accumulated field +209 209 TTRC Top net thermal radiation, clear sky W m**-2 s Accumulated field +210 210 SSRC Surface net solar radiation, clear sky W m**-2 s Accumulated field +211 211 STRC Surface net thermal radiation, clear sky W m**-2 s Accumulated field +212 212 SI Solar insolation W m**-2 s Accumulated field +213 213 - Unused - - +214 214 DHR Diabatic heating by radiation K - +215 215 DHVD Diabatic heating by vertical diffusion K - +216 216 DHCC Diabatic heating by cumulus convection K - +217 217 DHLC Diabatic heating large-scale condensation K - +218 218 VDZW Vertical diffusion of zonal wind m s**-1 - +219 219 VDMW Vertical diffusion of meridional wind m s**-1 - +220 220 EWGD East-West gravity wave drag tendency m s**-1 - +221 221 NSGD North-South gravity wave drag tendency m s**-1 - +222 222 CTZW Convective tendency of zonal wind m s**-1 - +223 223 CTMW Convective tendency of meridional wind m s**-1 - +224 224 VDH Vertical diffusion of humidity kg kg**-1 - +225 225 HTCC Humidity tendency by cumulus convection kg kg**-1 - +226 226 HTLC Humidity tendency large-scale condensation kg kg**-1 - +227 227 CRNH Change from removing negative humidity kg kg**-1 - +228 228 TP Total precipitation m Accumulated +229 229 IEWS Instantaneous X surface stress N m**-2 - +230 230 INSS Instantaneous Y surface stress N m**-2 - +231 231 ISHF Instantaneous surface heat flux W m**-2 - +232 232 IE Instantaneous moisture flux kg m**-2 s Evaporation +233 233 ASQ Apparent surface humidity kg kg**-1 - +234 234 LSRH Logarithm of surface roughness length for heat - - +235 235 SKT Skin temperature K - +236 236 STL4 Soil temperature level 4 K - +237 237 SWL4 Soil wetness level 4 m Scaled to depth of surface water layer 7cm deep +238 238 TSN Temperature of snow layer K - +239 239 CSF Convective snowfall m of water equivalent Accumulated field +240 240 LSF Large-scale snowfall m of water equivalent Accumulated field +241 241 ACF Accumulated cloud fraction tendency (-1 to 1) - +242 242 ALW Accumulated liquid water tendency (-1 to 1) - +243 243 FAL Forecast albedo (0 - 1) - +244 244 FSR Forecast surface roughness m - +245 245 FLSR Forecast log of surface roughness for heat - - +246 246 CLWC Cloud liquid water content kg kg**-1 - +247 247 CIWC Cloud ice water content kg kg**-1 - +248 248 CC Cloud cover (0 - 1) - +249 249 AIW Accumulated ice water tendency (-1 to 1) - +250 250 ICE Ice age 1,0 0 first-year, 1 multi-year +251 251 ATTE Adiabatic tendency of temperature K - +252 252 ATHE Adiabatic tendency of humidity kg kg**-1 - +253 253 ATZE Adiabatic tendency of zonal wind m s**-1 - +254 254 ATMW Adiabatic tendency of meridional wind m s**-1 - +255 255 - Indicates a missing value - - diff --git a/definitions/grib1/2.253.128.table b/definitions/grib1/2.253.128.table new file mode 100644 index 000000000..746626381 --- /dev/null +++ b/definitions/grib1/2.253.128.table @@ -0,0 +1,253 @@ +# This file was automatically generated by ./param.pl +1 1 STRF Stream function m**2 s**-1 +2 2 VPOT Velocity potential m**2 s**-1 +3 3 PT Potential temperature K +4 4 EQPT Equivalent potential temperature K +5 5 SEPT Saturated equivalent potential temperature K +6 6 SSFR Soil sand fraction (0 - 1) +7 7 SCFR Soil clay fraction (0 - 1) +8 8 SRO Surface runoff m +9 9 SSRO Sub-surface runoff m +10 10 WIND Wind speed m s**-1 +11 11 UDVW U component of divergent wind m s**-1 +12 12 VDVW V component of divergent wind m s**-1 +13 13 URTW U component of rotational wind m s**-1 +14 14 VRTW V component of rotational wind m s**-1 +15 15 ALUVP UV visible albedo for direct radiation (0 - 1) +16 16 ALUVD UV visible albedo for diffuse radiation (0 - 1) +17 17 ALNIP Near IR albedo for direct radiation (0 - 1) +18 18 ALNID Near IR albedo for diffuse radiation (0 - 1) +19 19 UVCS Clear sky surface UV W m**-2 s +20 20 PARCS Clear sky surface photosynthetically active radiation W m**-2 s +21 21 UCTP Unbalanced component of temperature K +22 22 UCLN Unbalanced component of logarithm of surface pressure +23 23 UCDV Unbalanced component of divergence s**-1 +24 24 - Reserved for future unbalanced components +25 25 - Reserved for future unbalanced components +26 26 CL Lake cover (0 - 1) +27 27 CVL Low vegetation cover (0 - 1) +28 28 CVH High vegetation cover (0 - 1) +29 29 TVL Type of low vegetation +30 30 TVH Type of high vegetation +31 31 CI Sea-ice cover (0 - 1) +32 32 ASN Snow albedo (0 - 1) +33 33 RSN Snow density kg m**-3 +34 34 SSTK Sea surface temperature K +35 35 ISTL1 Ice surface temperature layer 1 K +36 36 ISTL2 Ice surface temperature layer 2 K +37 37 ISTL3 Ice surface temperature layer 3 K +38 38 ISTL4 Ice surface temperature layer 4 K +39 39 SWVL1 Volumetric soil water layer 1 m**3 m**-3 +40 40 SWVL2 Volumetric soil water layer 2 m**3 m**-3 +41 41 SWVL3 Volumetric soil water layer 3 m**3 m**-3 +42 42 SWVL4 Volumetric soil water layer 4 m**3 m**-3 +43 43 SLT Soil type +44 44 ES Snow evaporation m of water +45 45 SMLT Snowmelt m of water +46 46 SDUR Solar duration s +47 47 DSRP Direct solar radiation w m**-2 +48 48 MAGSS Magnitude of surface stress N m**-2 s +49 49 10FG 10 metre wind gust m s**-1 +50 50 LSPF Large-scale precipitation fraction s +51 51 MX2T24 Maximum temperature at 2 metres since last 24 hours K +52 52 MN2T24 Minimum temperature at 2 metres since last 24 hours K +53 53 MONT Montgomery potential m**2 s**-2 +54 54 PRES Pressure Pa +55 55 MEAN2T24 Mean temperature at 2 metres since last 24 hours K +56 56 MN2D24 Mean 2 metre dewpoint temperature in past 24 hours K +57 57 UVB Downward UV radiation at the surface w m**-2 s +58 58 PAR Photosynthetically active radiation at the surface w m**-2 s +59 59 CAPE Convective available potential energy J kg**-1 +60 60 PV Potential vorticity K m**2 kg**-1 s**-1 +61 61 TPO Total precipitation from observations Millimetres*100 + number of stations +62 62 OBCT Observation count +63 63 - Start time for skin temperature difference s +64 64 - Finish time for skin temperature difference s +65 65 - Skin temperature difference K +66 66 - Leaf area index, low vegetation m**2 / m**2 +67 67 - Leaf area index, high vegetation m**2 / m**2 +68 68 - Minimum stomatal resistance, low vegetation s m**-1 +69 69 - Minimum stomatal resistance, high vegetation s m**-1 +70 70 - Biome cover, low vegetation (0 - 1) +71 71 - Biome cover, high vegetation (0 - 1) +72 72 ISSRD Instantaneous surface solar radiation downwards w m**-2 +73 73 ISTRD Instantaneous surface thermal radiation downwards w m**-2 +74 74 SDFOR Standard deviation of filtered subgrid orography m +78 78 - Total column liquid water kg m**-2 +79 79 - Total column ice water kg m**-2 +80 80 - Experimental product +81 81 - Experimental product +82 82 - Experimental product +83 83 - Experimental product +84 84 - Experimental product +85 85 - Experimental product +86 86 - Experimental product +87 87 - Experimental product +88 88 - Experimental product +89 89 - Experimental product +90 90 - Experimental product +91 91 - Experimental product +92 92 - Experimental product +93 93 - Experimental product +94 94 - Experimental product +95 95 - Experimental product +96 96 - Experimental product +97 97 - Experimental product +98 98 - Experimental product +99 99 - Experimental product +100 100 - Experimental product +101 101 - Experimental product +102 102 - Experimental product +103 103 - Experimental product +104 104 - Experimental product +105 105 - Experimental product +106 106 - Experimental product +107 107 - Experimental product +108 108 - Experimental product +109 109 - Experimental product +110 110 - Experimental product +111 111 - Experimental product +112 112 - Experimental product +113 113 - Experimental product +114 114 - Experimental product +115 115 - Experimental product +116 116 - Experimental product +117 117 - Experimental product +118 118 - Experimental product +119 119 - Experimental product +120 120 - Experimental product +121 121 MX2T6 Maximum temperature at 2 metres since last 6 hours K +122 122 MN2T6 Minimum temperature at 2 metres since last 6 hours K +123 123 10FG6 10 metre wind gust in the past 6 hours m s**-1 +124 124 EMIS Surface emissivity dimensionless +125 125 - Vertically integrated total energy J m**-2 +126 126 - Generic parameter for sensitive area prediction Various +127 127 AT Atmospheric tide +128 128 BV Budget values +129 129 Z Geopotential m**2 s**-2 +130 130 T Temperature K +131 131 U U velocity m s**-1 +132 132 V V velocity m s**-1 +133 133 Q Specific humidity kg kg**-1 +134 134 SP Surface pressure Pa +135 135 W Vertical velocity Pa s**-1 +136 136 TCW Total column water kg m**-2 +137 137 TCWV Total column water vapour kg m**-2 +138 138 VO Vorticity (relative) s**-1 +139 139 STL1 Soil temperature level 1 K +140 140 SWL1 Soil wetness level 1 m of water +141 141 SD Snow depth m of water equivalent +142 142 LSP Stratiform precipitation (Large-scale precipitation) m +143 143 CP Convective precipitation m +144 144 SF Snowfall (convective + stratiform) m of water equivalent +145 145 BLD Boundary layer dissipation W m**-2 s +146 146 SSHF Surface sensible heat flux W m**-2 s +147 147 SLHF Surface latent heat flux W m**-2 s +148 148 CHNK Charnock +149 149 SNR Surface net radiation W m**-2 s +150 150 TNR Top net radiation +151 151 MSL Mean sea level pressure Pa +152 152 LNSP Logarithm of surface pressure +153 153 SWHR Short-wave heating rate K +154 154 LWHR Long-wave heating rate K +155 155 D Divergence s**-1 +156 156 GH Gepotential Height gpm +157 157 R Relative humidity % +158 158 TSP Tendency of surface pressure Pa s**-1 +159 159 BLH Boundary layer height m +160 160 SDOR Standard deviation of orography +161 161 ISOR Anisotropy of sub-gridscale orography +162 162 ANOR Angle of sub-gridscale orography rad +163 163 SLOR Slope of sub-gridscale orography +164 164 TCC Total cloud cover (0 - 1) +165 165 10U 10 metre U wind component m s**-1 +166 166 10V 10 metre V wind component m s**-1 +167 167 2T 2 metre temperature K +168 168 2D 2 metre dewpoint temperature K +169 169 SSRD Surface solar radiation downwards W m**-2 s +170 170 STL2 Soil temperature level 2 K +171 171 SWL2 Soil wetness level 2 m of water +172 172 LSM Land-sea mask (0 - 1) +173 173 SR Surface roughness m +174 174 AL Albedo (0 - 1) +175 175 STRD Surface thermal radiation downwards W m**-2 s +176 176 SSR Surface solar radiation W m**-2 s +177 177 STR Surface thermal radiation W m**-2 s +178 178 TSR Top solar radiation W m**-2 s +179 179 TTR Top thermal radiation W m**-2 s +180 180 EWSS East-West surface stress N m**-2 s +181 181 NSSS North-South surface stress N m**-2 s +182 182 E Evaporation m of water +183 183 STL3 Soil temperature level 3 K +184 184 SWL3 Soil wetness level 3 m of water +185 185 CCC Convective cloud cover (0 - 1) +186 186 LCC Low cloud cover (0 - 1) +187 187 MCC Medium cloud cover (0 - 1) +188 188 HCC High cloud cover (0 - 1) +189 189 SUND Sunshine duration s +190 190 EWOV East-West component of sub-gridscale orographic variance m**2 +191 191 NSOV North-South component of sub-gridscale orographic variance m**2 +192 192 NWOV North-West/South-East component of sub-gridscale orographic variance m**2 +193 193 NEOV North-East/South-West component of sub-gridscale orographic variance m**2 +194 194 BTMP Brightness temperature K +195 195 LGWS Latitudinal component of gravity wave stress N m**-2 s +196 196 MGWS Meridional component of gravity wave stress N m**-2 s +197 197 GWD Gravity wave dissipation W m**-2 s +198 198 SRC Skin reservoir content m of water +199 199 VEG Vegetation fraction (0 - 1) +200 200 VSO Variance of sub-gridscale orography m**2 +201 201 MX2T Maximum temperature at 2 metres since previous post-processing K +202 202 MN2T Minimum temperature at 2 metres since previous post-processing K +203 203 O3 Ozone mass mixing ratio kg kg**-1 +204 204 PAW Precipitation analysis weights +205 205 RO Runoff m +206 206 TCO3 Total column ozone kg m**-2 +207 207 10SI 10 metre wind speed m s**-1 +208 208 TSRC Top net solar radiation, clear sky W m**-2 s +209 209 TTRC Top net thermal radiation, clear sky W m**-2 s +210 210 SSRC Surface net solar radiation, clear sky W m**-2 s +211 211 STRC Surface net thermal radiation, clear sky W m**-2 s +212 212 TISR TOA incident solar radiation W m**-2 s +213 213 VIMD Vertically integrated moisture divergence kg m**-2 +214 214 DHR Diabatic heating by radiation K +215 215 DHVD Diabatic heating by vertical diffusion K +216 216 DHCC Diabatic heating by cumulus convection K +217 217 DHLC Diabatic heating large-scale condensation K +218 218 VDZW Vertical diffusion of zonal wind m s**-1 +219 219 VDMW Vertical diffusion of meridional wind m s**-1 +220 220 EWGD East-West gravity wave drag tendency m s**-1 +221 221 NSGD North-South gravity wave drag tendency m s**-1 +222 222 CTZW Convective tendency of zonal wind m s**-1 +223 223 CTMW Convective tendency of meridional wind m s**-1 +224 224 VDH Vertical diffusion of humidity kg kg**-1 +225 225 HTCC Humidity tendency by cumulus convection kg kg**-1 +226 226 HTLC Humidity tendency by large-scale condensation kg kg**-1 +227 227 CRNH Change from removal of negative humidity kg kg**-1 +228 228 TP Total precipitation m +229 229 IEWS Instantaneous X surface stress N m**-2 +230 230 INSS Instantaneous Y surface stress N m**-2 +231 231 ISHF Instantaneous surface heat flux W m**-2 +232 232 IE Instantaneous moisture flux kg m**-2 s +233 233 ASQ Apparent surface humidity kg kg**-1 +234 234 LSRH Logarithm of surface roughness length for heat +235 235 SKT Skin temperature K +236 236 STL4 Soil temperature level 4 K +237 237 SWL4 Soil wetness level 4 m +238 238 TSN Temperature of snow layer K +239 239 CSF Convective snowfall m of water equivalent +240 240 LSF Large-scale snowfall m of water equivalent +241 241 ACF Accumulated cloud fraction tendency (-1 to 1) +242 242 ALW Accumulated liquid water tendency (-1 to 1) +243 243 FAL Forecast albedo (0 - 1) +244 244 FSR Forecast surface roughness m +245 245 FLSR Forecast logarithm of surface roughness for heat +246 246 CLWC Cloud liquid water content kg kg**-1 +247 247 CIWC Cloud ice water content kg kg**-1 +248 248 CC Cloud cover (0 - 1) +249 249 AIW Accumulated ice water tendency (-1 to 1) +250 250 ICE Ice age (0 - 1) +251 251 ATTE Adiabatic tendency of temperature K +252 252 ATHE Adiabatic tendency of humidity kg kg**-1 +253 253 ATZE Adiabatic tendency of zonal wind m s**-1 +254 254 ATMW Adiabatic tendency of meridional wind m s**-1 +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.46.254.table b/definitions/grib1/2.46.254.table new file mode 100644 index 000000000..d4e38fce8 --- /dev/null +++ b/definitions/grib1/2.46.254.table @@ -0,0 +1,256 @@ +# This file was automatically generated by ./param.pl +1 1 PRES Pressure [hPa] +2 2 psnm Pressure reduced to MSL [hPa] +3 3 tsps Pressure tendency [Pa/s] +4 4 var4 undefined +5 5 var5 undefined +6 6 geop Geopotential [dam] +7 7 zgeo Geopotential height [gpm] +8 8 gzge Geometric height [m] +9 9 var9 undefined +10 10 var10 undefined +11 11 temp ABSOLUTE TEMPERATURE [K] +12 12 vtmp VIRTUAL TEMPERATURE [K] +13 13 ptmp POTENTIAL TEMPERATURE [K] +14 14 psat PSEUDO-ADIABATIC POTENTIAL TEMPERATURE [K] +15 15 mxtp MAXIMUM TEMPERATURE [K] +16 16 mntp MINIMUM TEMPERATURE [K] +17 17 tpor DEW POINT TEMPERATURE [K] +18 18 dptd DEW POINT DEPRESSION [K] +19 19 lpsr LAPSE RATE [K/m] +20 20 var20 undefined +21 21 rds1 RADAR SPECTRA(1) [non-dim] +22 22 rds2 RADAR SPECTRA(2) [non-dim] +23 23 rds3 RADAR SPECTRA(3) [non-dim] +24 24 var24 undefined +25 25 tpan TEMPERATURE ANOMALY [K] +26 26 psan PRESSURE ANOMALY [Pa hPa] +27 27 zgan GEOPOT HEIGHT ANOMALY [m] +28 28 wvs1 WAVE SPECTRA(1) [non-dim] +29 29 wvs2 WAVE SPECTRA(2) [non-dim] +30 30 wvs3 WAVE SPECTRA(3) [non-dim] +31 31 wind WIND DIRECTION [deg] +32 32 wins WIND SPEED [m/s] +33 33 uvel ZONAL WIND (U) [m/s] +34 34 vvel MERIDIONAL WIND (V) [m/s] +35 35 fcor STREAM FUNCTION [m2/s] +36 36 potv VELOCITY POTENTIAL [m2/s] +37 37 var37 undefined +38 38 sgvv SIGMA COORD VERT VEL [sec/sec] +39 39 omeg OMEGA [Pa/s] +40 40 omg2 VERTICAL VELOCITY [m/s] +41 41 abvo ABSOLUTE VORTICITY [10**5/sec] +42 42 abdv ABSOLUTE DIVERGENCE [10**5/sec] +43 43 vort VORTICITY [1/s] +44 44 divg DIVERGENCE [1/s] +45 45 vucs VERTICAL U-COMP SHEAR [1/sec] +46 46 vvcs VERT V-COMP SHEAR [1/sec] +47 47 dirc DIRECTION OF CURRENT [deg] +48 48 spdc SPEED OF CURRENT [m/s] +49 49 ucpc U-COMPONENT OF CURRENT [m/s] +50 50 vcpc V-COMPONENT OF CURRENT [m/s] +51 51 umes SPECIFIC HUMIDITY [kg/kg] +52 52 umrl RELATIVE HUMIDITY [no Dim] +53 53 hmxr HUMIDITY MIXING RATIO [kg/kg] +54 54 agpl INST. PRECIPITABLE WATER [Kg/m2] +55 55 vapp VAPOUR PRESSURE [Pa hpa] +56 56 sadf SATURATION DEFICIT [Pa hPa] +57 57 evap EVAPORATION [Kg/m2/day] +58 58 var58 undefined +59 59 prcr PRECIPITATION RATE [kg/m2/day] +60 60 thpb THUNDER PROBABILITY [%] +61 61 prec TOTAL PRECIPITATION [Kg/m2/day] +62 62 prge LARGE SCALE PRECIPITATION [Kg/m2/day] +63 63 prcv CONVECTIVE PRECIPITATION [Kg/m2/day] +64 64 neve SNOWFALL [Kg/m2/day] +65 65 wenv WAT EQUIV ACC SNOW DEPTH [kg/m2] +66 66 nvde SNOW DEPTH [cm] +67 67 mxld MIXED LAYER DEPTH [m cm] +68 68 tthd TRANS THERMOCLINE DEPTH [m cm] +69 69 mthd MAIN THERMOCLINE DEPTH [m cm] +70 70 mtha MAIN THERMOCLINE ANOM [m cm] +71 71 cbnv CLOUD COVER [0-1] +72 72 cvnv CONVECTIVE CLOUD COVER [0-1] +73 73 lwnv LOW CLOUD COVER [0-1] +74 74 mdnv MEDIUM CLOUD COVER [0-1] +75 75 hinv HIGH CLOUD COVER [0-1] +76 76 wtnv CLOUD WATER [kg/m2] +77 77 bli BEST LIFTED INDEX (TO 500 HPA) [K] +78 78 var78 undefined +79 79 var79 undefined +80 80 var80 undefined +81 81 lsmk LAND SEA MASK [0,1] +82 82 dslm DEV SEA_LEV FROM MEAN [m] +83 83 zorl ROUGHNESS LENGTH [m] +84 84 albe ALBEDO [%] +85 85 dstp DEEP SOIL TEMPERATURE [K] +86 86 soic SOIL MOISTURE CONTENT [Kg/m2] +87 87 vege VEGETATION [%] +88 88 var88 undefined +89 89 dens DENSITY [kg/m3] +90 90 var90 Undefined +91 91 icec ICE CONCENTRATION [fraction] +92 92 icet ICE THICKNESS [m] +93 93 iced DIRECTION OF ICE DRIFT [deg] +94 94 ices SPEED OF ICE DRIFT [m/s] +95 95 iceu U-COMP OF ICE DRIFT [m/s] +96 96 icev V-COMP OF ICE DRIFT [m/s] +97 97 iceg ICE GROWTH [m] +98 98 icdv ICE DIVERGENCE [sec/sec] +99 99 var99 undefined +100 100 shcw SIG HGT COM WAVE/SWELL [m] +101 101 wwdi DIRECTION OF WIND WAVE [deg] +102 102 wwsh SIG HGHT OF WIND WAVES [m] +103 103 wwmp MEAN PERIOD WIND WAVES [sec] +104 104 swdi DIRECTION OF SWELL WAVE [deg] +105 105 swsh SIG HEIGHT SWELL WAVES [m] +106 106 swmp MEAN PERIOD SWELL WAVES [sec] +107 107 prwd PRIMARY WAVE DIRECTION [deg] +108 108 prmp PRIM WAVE MEAN PERIOD [s] +109 109 swdi SECOND WAVE DIRECTION [deg] +110 110 swmp SECOND WAVE MEAN PERIOD [s] +111 111 ocas SHORT WAVE ABSORBED AT GROUND [W/m2] +112 112 slds NET LONG WAVE AT BOTTOM [W/m2] +113 113 nswr NET SHORT-WAV RAD(TOP) [W/m2] +114 114 role OUTGOING LONG WAVE AT TOP [W/m2] +115 115 lwrd LONG-WAV RAD [W/m2] +116 116 swea SHORT WAVE ABSORBED BY EARTH/ATMOSPHERE [W/m2] +117 117 glbr GLOBAL RADIATION [W/m2 ] +118 118 var118 undefined +119 119 var119 undefined +120 120 var120 undefined +121 121 clsf LATENT HEAT FLUX FROM SURFACE [W/m2] +122 122 cssf SENSIBLE HEAT FLUX FROM SURFACE [W/m2] +123 123 blds BOUND LAYER DISSIPATION [W/m2] +124 124 var124 undefined +125 125 var125 undefined +126 126 var126 undefined +127 127 imag IMAGE [image^data] +128 128 tp2m 2 METRE TEMPERATURE [K] +129 129 dp2m 2 METRE DEWPOINT TEMPERATURE [K] +130 130 u10m 10 METRE U-WIND COMPONENT [m/s] +131 131 v10m 10 METRE V-WIND COMPONENT [m/s] +132 132 topo TOPOGRAPHY [m] +133 133 gsfp GEOMETRIC MEAN SURFACE PRESSURE [hPa] +134 134 lnsp LN SURFACE PRESSURE [hPa] +135 135 pslc SURFACE PRESSURE [hPa] +136 136 pslm M S L PRESSURE (MESINGER METHOD) [hPa] +137 137 mask MASK [-/+] +138 138 mxwu MAXIMUM U-WIND [m/s] +139 139 mxwv MAXIMUM V-WIND [m/s] +140 140 cape CONVECTIVE AVAIL. POT.ENERGY [m2/s2] +141 141 cine CONVECTIVE INHIB. ENERGY [m2/s2] +142 142 lhcv CONVECTIVE LATENT HEATING [K/s] +143 143 mscv CONVECTIVE MOISTURE SOURCE [1/s] +144 144 scvm SHALLOW CONV. MOISTURE SOURCE [1/s] +145 145 scvh SHALLOW CONVECTIVE HEATING [K/s] +146 146 mxwp MAXIMUM WIND PRESS. LVL [hPa] +147 147 ustr STORM MOTION U-COMPONENT [m/s] +148 148 vstr STORM MOTION V-COMPONENT [m/s] +149 149 cbnt MEAN CLOUD COVER [0-1] +150 150 pcbs PRESSURE AT CLOUD BASE [hPa] +151 151 pctp PRESSURE AT CLOUD TOP [hPa] +152 152 fzht FREEZING LEVEL HEIGHT [m] +153 153 fzrh FREEZING LEVEL RELATIVE HUMIDITY [%] +154 154 fdlt FLIGHT LEVELS TEMPERATURE [K] +155 155 fdlu FLIGHT LEVELS U-WIND [m/s] +156 156 fdlv FLIGHT LEVELS V-WIND [m/s] +157 157 tppp TROPOPAUSE PRESSURE [hPa] +158 158 tppt TROPOPAUSE TEMPERATURE [K] +159 159 tppu TROPOPAUSE U-WIND COMPONENT [m/s] +160 160 tppv TROPOPAUSE v-WIND COMPONENT [m/s] +161 161 var161 undefined +162 162 gvdu GRAVITY WAVE DRAG DU/DT [m/s2] +163 163 gvdv GRAVITY WAVE DRAG DV/DT [m/s2] +164 164 gvus GRAVITY WAVE DRAG SFC ZONAL STRESS [Pa] +165 165 gvvs GRAVITY WAVE DRAG SFC MERIDIONAL STRESS [Pa] +166 166 var166 undefined +167 167 dvsh DIVERGENCE OF SPECIFIC HUMIDITY [1/s] +168 168 hmfc HORIZ. MOISTURE FLUX CONV. [1/s] +169 169 vmfl VERT. INTEGRATED MOISTURE FLUX CONV. [kg/(m2*s)] +170 170 vadv VERTICAL MOISTURE ADVECTION [kg/(kg*s)] +171 171 nhcm NEG. HUM. CORR. MOISTURE SOURCE [kg/(kg*s)] +172 172 lglh LARGE SCALE LATENT HEATING [K/s] +173 173 lgms LARGE SCALE MOISTURE SOURCE [1/s] +174 174 smav SOIL MOISTURE AVAILABILITY [0-1] +175 175 tgrz SOIL TEMPERATURE OF ROOT ZONE [K] +176 176 bslh BARE SOIL LATENT HEAT [Ws/m2] +177 177 evpp POTENTIAL SFC EVAPORATION [m] +178 178 rnof RUNOFF [kg/m2/s)] +179 179 pitp INTERCEPTION LOSS [W/m2] +180 180 vpca VAPOR PRESSURE OF CANOPY AIR SPACE [mb] +181 181 qsfc SURFACE SPEC HUMIDITY [kg/kg] +182 182 ussl SOIL WETNESS OF SURFACE [0-1] +183 183 uzrs SOIL WETNESS OF ROOT ZONE [0-1] +184 184 uzds SOIL WETNESS OF DRAINAGE ZONE [0-1] +185 185 amdl STORAGE ON CANOPY [m] +186 186 amsl STORAGE ON GROUND [m] +187 187 tsfc SURFACE TEMPERATURE [K] +188 188 tems SURFACE ABSOLUTE TEMPERATURE [K] +189 189 tcas TEMPERATURE OF CANOPY AIR SPACE [K] +190 190 ctmp TEMPERATURE AT CANOPY [K] +191 191 tgsc GROUND/SURFACE COVER TEMPERATURE [K] +192 192 uves SURFACE ZONAL WIND (U) [m/s] +193 193 usst SURFACE ZONAL WIND STRESS [Pa] +194 194 vves SURFACE MERIDIONAL WIND (V) [m/s] +195 195 vsst SURFACE MERIDIONAL WIND STRESS [Pa] +196 196 suvf SURFACE MOMENTUM FLUX [W/m2] +197 197 iswf INCIDENT SHORT WAVE FLUX [W/m2] +198 198 ghfl TIME AVE GROUND HT FLX [W/m2] +199 199 var199 undefined +200 200 lwbc NET LONG WAVE AT BOTTOM (CLEAR) [W/m2] +201 201 lwtc OUTGOING LONG WAVE AT TOP (CLEAR) [W/m2] +202 202 swec SHORT WV ABSRBD BY EARTH/ATMOS (CLEAR) [W/m2] +203 203 ocac SHORT WAVE ABSORBED AT GROUND (CLEAR) [W/m2] +204 204 var204 undefined +205 205 lwrh LONG WAVE RADIATIVE HEATING [K/s] +206 206 swrh SHORT WAVE RADIATIVE HEATING [K/s] +207 207 olis DOWNWARD LONG WAVE AT BOTTOM [W/m2] +208 208 olic DOWNWARD LONG WAVE AT BOTTOM (CLEAR) [W/m2] +209 209 ocis DOWNWARD SHORT WAVE AT GROUND [W/m2] +210 210 ocic DOWNWARD SHORT WAVE AT GROUND (CLEAR) [W/m2] +211 211 oles UPWARD LONG WAVE AT BOTTOM [W/m2] +212 212 oces UPWARD SHORT WAVE AT GROUND [W/m2] +213 213 swgc UPWARD SHORT WAVE AT GROUND (CLEAR) [W/m2] +214 214 roce UPWARD SHORT WAVE AT TOP [W/m2] +215 215 swtc UPWARD SHORT WAVE AT TOP (CLEAR) [W/m2] +216 216 var216 undefined +217 217 var217 undefined +218 218 hhdf HORIZONTAL HEATING DIFFUSION [K/s] +219 219 hmdf HORIZONTAL MOISTURE DIFFUSION [1/s] +220 220 hddf HORIZONTAL DIVERGENCE DIFFUSION [1/s2] +221 221 hvdf HORIZONTAL VORTICITY DIFFUSION [1/s2] +222 222 vdms VERTICAL DIFF. MOISTURE SOURCE [1/s] +223 223 vdfu VERTICAL DIFFUSION DU/DT [m/s2] +224 224 vdfv VERTICAL DIFFUSION DV/DT [m/s2] +225 225 vdfh VERTICAL DIFFUSION HEATING [K/s] +226 226 umrs SURFACE RELATIVE HUMIDITY [no Dim] +227 227 vdcc VERTICAL DIST TOTAL CLOUD COVER [no Dim] +228 228 var228 undefined +229 229 var229 undefined +230 230 usmt TIME MEAN SURFACE ZONAL WIND (U) [m/s] +231 231 vsmt TIME MEAN SURFACE MERIDIONAL WIND (V) [m/s] +232 232 tsmt TIME MEAN SURFACE ABSOLUTE TEMPERATURE [K] +233 233 rsmt TIME MEAN SURFACE RELATIVE HUMIDITY [no Dim] +234 234 atmt TIME MEAN ABSOLUTE TEMPERATURE [K] +235 235 stmt TIME MEAN DEEP SOIL TEMPERATURE [K] +236 236 ommt TIME MEAN DERIVED OMEGA [Pa/s] +237 237 dvmt TIME MEAN DIVERGENCE [1/s] +238 238 zhmt TIME MEAN GEOPOTENTIAL HEIGHT [m] +239 239 lnmt TIME MEAN LOG SURFACE PRESSURE [ln(cbar)] +240 240 mkmt TIME MEAN MASK [-/+] +241 241 vvmt TIME MEAN MERIDIONAL WIND (V) [m/s] +242 242 omtm TIME MEAN OMEGA [cbar/s] +243 243 ptmt TIME MEAN POTENTIAL TEMPERATURE [K] +244 244 pcmt TIME MEAN PRECIP. WATER [kg/m2] +245 245 rhmt TIME MEAN RELATIVE HUMIDITY [%] +246 246 mpmt TIME MEAN SEA LEVEL PRESSURE [hPa] +247 247 simt TIME MEAN SIGMADOT [1/s] +248 248 uemt TIME MEAN SPECIFIC HUMIDITY [kg/kg] +249 249 fcmt TIME MEAN STREAM FUNCTION| m2/s] +250 250 psmt TIME MEAN SURFACE PRESSURE [hPa] +251 251 tmmt TIME MEAN SURFACE TEMPERATURE [K] +252 252 pvmt TIME MEAN VELOCITY POTENTIAL [m2/s] +253 253 tvmt TIME MEAN VIRTUAL TEMPERATURE [K] +254 254 vtmt TIME MEAN VORTICITY [1/s] +255 255 uvmt TIME MEAN ZONAL WIND (U) [m/s] diff --git a/definitions/grib1/2.98.128.table b/definitions/grib1/2.98.128.table new file mode 100644 index 000000000..061076be1 --- /dev/null +++ b/definitions/grib1/2.98.128.table @@ -0,0 +1,255 @@ +# This file was automatically generated by ./param.pl +1 strf Stream function (m**2 s**-1) +2 vpot Velocity potential (m**2 s**-1) +3 pt Potential temperature (K) +4 eqpt Equivalent potential temperature (K) +5 sept Saturated equivalent potential temperature (K) +6 ssfr Soil sand fraction ((0 - 1)) +7 scfr Soil clay fraction ((0 - 1)) +8 sro Surface runoff (m) +9 ssro Sub-surface runoff (m) +10 wind Wind speed (m s**-1) +11 udvw U component of divergent wind (m s**-1) +12 vdvw V component of divergent wind (m s**-1) +13 urtw U component of rotational wind (m s**-1) +14 vrtw V component of rotational wind (m s**-1) +15 aluvp UV visible albedo for direct radiation ((0 - 1)) +16 aluvd UV visible albedo for diffuse radiation ((0 - 1)) +17 alnip Near IR albedo for direct radiation ((0 - 1)) +18 alnid Near IR albedo for diffuse radiation ((0 - 1)) +19 uvcs Clear sky surface UV (W m**-2 s) +20 parcs Clear sky surface photosynthetically active radiation (W m**-2 s) +21 uctp Unbalanced component of temperature (K) +22 ucln Unbalanced component of logarithm of surface pressure () +23 ucdv Unbalanced component of divergence (s**-1) +24 - Reserved for future unbalanced components () +25 - Reserved for future unbalanced components () +26 cl Lake cover ((0 - 1)) +27 cvl Low vegetation cover ((0 - 1)) +28 cvh High vegetation cover ((0 - 1)) +29 tvl Type of low vegetation () +30 tvh Type of high vegetation () +31 ci Sea-ice cover ((0 - 1)) +32 asn Snow albedo ((0 - 1)) +33 rsn Snow density (kg m**-3) +34 sstk Sea surface temperature (K) +35 istl1 Ice surface temperature layer 1 (K) +36 istl2 Ice surface temperature layer 2 (K) +37 istl3 Ice surface temperature layer 3 (K) +38 istl4 Ice surface temperature layer 4 (K) +39 swvl1 Volumetric soil water layer 1 (m**3 m**-3) +40 swvl2 Volumetric soil water layer 2 (m**3 m**-3) +41 swvl3 Volumetric soil water layer 3 (m**3 m**-3) +42 swvl4 Volumetric soil water layer 4 (m**3 m**-3) +43 slt Soil type () +44 es Snow evaporation (m of water) +45 smlt Snowmelt (m of water) +46 sdur Solar duration (s) +47 dsrp Direct solar radiation (w m**-2) +48 magss Magnitude of surface stress (N m**-2 s) +49 10fg 10 metre wind gust (m s**-1) +50 lspf Large-scale precipitation fraction (s) +51 mx2t24 Maximum temperature at 2 metres since last 24 hours (K) +52 mn2t24 Minimum temperature at 2 metres since last 24 hours (K) +53 mont Montgomery potential (m**2 s**-2) +54 pres Pressure (Pa) +55 mean2t24 Mean temperature at 2 metres since last 24 hours (K) +56 mn2d24 Mean 2 metre dewpoint temperature in past 24 hours (K) +57 uvb Downward UV radiation at the surface (w m**-2 s) +58 par Photosynthetically active radiation at the surface (w m**-2 s) +59 cape Convective available potential energy (J kg**-1) +60 pv Potential vorticity (K m**2 kg**-1 s**-1) +62 obct Observation count () +63 - Start time for skin temperature difference (s) +64 - Finish time for skin temperature difference (s) +65 - Skin temperature difference (K) +66 - Leaf area index, low vegetation (m**2 / m**2) +67 - Leaf area index, high vegetation (m**2 / m**2) +68 - Minimum stomatal resistance, low vegetation (s m**-1) +69 - Minimum stomatal resistance, high vegetation (s m**-1) +70 - Biome cover, low vegetation ((0 - 1)) +71 - Biome cover, high vegetation ((0 - 1)) +72 issrd Instantaneous surface solar radiation downwards (w m**-2) +73 istrd Instantaneous surface thermal radiation downwards (w m**-2) +74 sdfor Standard deviation of filtered subgrid orography (m) +75 crwc Cloud rain water content (kg kg**-1) +76 cswc Cloud snow water content (kg kg**-1) +77 etadot Eta-coordinate vertical velocity (s**-1) +78 tclw Total column liquid water (kg m**-2) +79 tciw Total column ice water (kg m**-2) +80 - Experimental product () +81 - Experimental product () +82 - Experimental product () +83 - Experimental product () +84 - Experimental product () +85 - Experimental product () +86 - Experimental product () +87 - Experimental product () +88 - Experimental product () +89 - Experimental product () +90 - Experimental product () +91 - Experimental product () +92 - Experimental product () +93 - Experimental product () +94 - Experimental product () +95 - Experimental product () +96 - Experimental product () +97 - Experimental product () +98 - Experimental product () +99 - Experimental product () +100 - Experimental product () +101 - Experimental product () +102 - Experimental product () +103 - Experimental product () +104 - Experimental product () +105 - Experimental product () +106 - Experimental product () +107 - Experimental product () +108 - Experimental product () +109 - Experimental product () +110 - Experimental product () +111 - Experimental product () +112 - Experimental product () +113 - Experimental product () +114 - Experimental product () +115 - Experimental product () +116 - Experimental product () +117 - Experimental product () +118 - Experimental product () +119 - Experimental product () +120 - Experimental product () +121 mx2t6 Maximum temperature at 2 metres since last 6 hours (K) +122 mn2t6 Minimum temperature at 2 metres since last 6 hours (K) +123 10fg6 10 metre wind gust in the past 6 hours (m s**-1) +124 emis Surface emissivity (dimensionless) +125 - Vertically integrated total energy (J m**-2) +126 - Generic parameter for sensitive area prediction (Various) +127 at Atmospheric tide () +128 bv Budget values () +129 z Geopotential (m**2 s**-2) +130 t Temperature (K) +131 u U velocity (m s**-1) +132 v V velocity (m s**-1) +133 q Specific humidity (kg kg**-1) +134 sp Surface pressure (Pa) +135 w Vertical velocity (Pa s**-1) +136 tcw Total column water (kg m**-2) +137 tcwv Total column water vapour (kg m**-2) +138 vo Vorticity (relative) (s**-1) +139 stl1 Soil temperature level 1 (K) +140 swl1 Soil wetness level 1 (m of water) +141 sd Snow depth (m of water equivalent) +142 lsp Stratiform precipitation (Large-scale precipitation) (m) +143 cp Convective precipitation (m) +144 sf Snowfall (m of water equivalent) +145 bld Boundary layer dissipation (W m**-2 s) +146 sshf Surface sensible heat flux (W m**-2 s) +147 slhf Surface latent heat flux (W m**-2 s) +148 chnk Charnock () +149 snr Surface net radiation (W m**-2 s) +150 tnr Top net radiation () +151 msl Mean sea level pressure (Pa) +152 lnsp Logarithm of surface pressure () +153 swhr Short-wave heating rate (K) +154 lwhr Long-wave heating rate (K) +155 d Divergence (s**-1) +156 gh Gepotential Height (gpm) +157 r Relative humidity (%) +158 tsp Tendency of surface pressure (Pa s**-1) +159 blh Boundary layer height (m) +160 sdor Standard deviation of orography () +161 isor Anisotropy of sub-gridscale orography () +162 anor Angle of sub-gridscale orography (rad) +163 slor Slope of sub-gridscale orography () +164 tcc Total cloud cover ((0 - 1)) +165 10u 10 metre U wind component (m s**-1) +166 10v 10 metre V wind component (m s**-1) +167 2t 2 metre temperature (K) +168 2d 2 metre dewpoint temperature (K) +169 ssrd Surface solar radiation downwards (W m**-2 s) +170 stl2 Soil temperature level 2 (K) +171 swl2 Soil wetness level 2 (m of water) +172 lsm Land-sea mask ((0 - 1)) +173 sr Surface roughness (m) +174 al Albedo ((0 - 1)) +175 strd Surface thermal radiation downwards (W m**-2 s) +176 ssr Surface solar radiation (W m**-2 s) +177 str Surface thermal radiation (W m**-2 s) +178 tsr Top solar radiation (W m**-2 s) +179 ttr Top thermal radiation (W m**-2 s) +180 ewss East-West surface stress (N m**-2 s) +181 nsss North-South surface stress (N m**-2 s) +182 e Evaporation (m of water) +183 stl3 Soil temperature level 3 (K) +184 swl3 Soil wetness level 3 (m of water) +185 ccc Convective cloud cover ((0 - 1)) +186 lcc Low cloud cover ((0 - 1)) +187 mcc Medium cloud cover ((0 - 1)) +188 hcc High cloud cover ((0 - 1)) +189 sund Sunshine duration (s) +190 ewov East-West component of sub-gridscale orographic variance (m**2) +191 nsov North-South component of sub-gridscale orographic variance (m**2) +192 nwov North-West/South-East component of sub-gridscale orographic variance (m**2) +193 neov North-East/South-West component of sub-gridscale orographic variance (m**2) +194 btmp Brightness temperature (K) +195 lgws Latitudinal component of gravity wave stress (N m**-2 s) +196 mgws Meridional component of gravity wave stress (N m**-2 s) +197 gwd Gravity wave dissipation (W m**-2 s) +198 src Skin reservoir content (m of water) +199 veg Vegetation fraction ((0 - 1)) +200 vso Variance of sub-gridscale orography (m**2) +201 mx2t Maximum temperature at 2 metres since previous post-processing (K) +202 mn2t Minimum temperature at 2 metres since previous post-processing (K) +203 o3 Ozone mass mixing ratio (kg kg**-1) +204 paw Precipitation analysis weights () +205 ro Runoff (m) +206 tco3 Total column ozone (kg m**-2) +207 10si 10 metre wind speed (m s**-1) +208 tsrc Top net solar radiation, clear sky (W m**-2 s) +209 ttrc Top net thermal radiation, clear sky (W m**-2 s) +210 ssrc Surface net solar radiation, clear sky (W m**-2 s) +211 strc Surface net thermal radiation, clear sky (W m**-2 s) +212 tisr TOA incident solar radiation (W m**-2 s) +213 vimd Vertically integrated moisture divergence (kg m**-2) +214 dhr Diabatic heating by radiation (K) +215 dhvd Diabatic heating by vertical diffusion (K) +216 dhcc Diabatic heating by cumulus convection (K) +217 dhlc Diabatic heating large-scale condensation (K) +218 vdzw Vertical diffusion of zonal wind (m s**-1) +219 vdmw Vertical diffusion of meridional wind (m s**-1) +220 ewgd East-West gravity wave drag tendency (m s**-1) +221 nsgd North-South gravity wave drag tendency (m s**-1) +222 ctzw Convective tendency of zonal wind (m s**-1) +223 ctmw Convective tendency of meridional wind (m s**-1) +224 vdh Vertical diffusion of humidity (kg kg**-1) +225 htcc Humidity tendency by cumulus convection (kg kg**-1) +226 htlc Humidity tendency by large-scale condensation (kg kg**-1) +227 crnh Change from removal of negative humidity (kg kg**-1) +228 tp Total precipitation (m) +229 iews Instantaneous X surface stress (N m**-2) +230 inss Instantaneous Y surface stress (N m**-2) +231 ishf Instantaneous surface heat flux (W m**-2) +232 ie Instantaneous moisture flux (kg m**-2 s**-1) +233 asq Apparent surface humidity (kg kg**-1) +234 lsrh Logarithm of surface roughness length for heat () +235 skt Skin temperature (K) +236 stl4 Soil temperature level 4 (K) +237 swl4 Soil wetness level 4 (m) +238 tsn Temperature of snow layer (K) +239 csf Convective snowfall (m of water equivalent) +240 lsf Large-scale snowfall (m of water equivalent) +241 acf Accumulated cloud fraction tendency ((-1 to 1)) +242 alw Accumulated liquid water tendency ((-1 to 1)) +243 fal Forecast albedo ((0 - 1)) +244 fsr Forecast surface roughness (m) +245 flsr Forecast logarithm of surface roughness for heat () +246 clwc Cloud liquid water content (kg kg**-1) +247 ciwc Cloud ice water content (kg kg**-1) +248 cc Cloud cover ((0 - 1)) +249 aiw Accumulated ice water tendency ((-1 to 1)) +250 ice Ice age ((0 - 1)) +251 atte Adiabatic tendency of temperature (K) +252 athe Adiabatic tendency of humidity (kg kg**-1) +253 atze Adiabatic tendency of zonal wind (m s**-1) +254 atmw Adiabatic tendency of meridional wind (m s**-1) +255 - Indicates a missing value () diff --git a/definitions/grib1/2.98.129.table b/definitions/grib1/2.98.129.table new file mode 100644 index 000000000..dd9991b36 --- /dev/null +++ b/definitions/grib1/2.98.129.table @@ -0,0 +1,237 @@ +# This file was automatically generated by ./param.pl +1 1 STRF Stream function gradient (m**2 s**-1) +2 2 VPOT Velocity potential gradient (m**2 s**-1) +3 3 PT Potential temperature gradient (K) +4 4 EQPT Equivalent potential temperature gradient (K) +5 5 SEPT Saturated equivalent potential temperature gradient (K) +11 11 UDVW U component of divergent wind gradient (m s**-1) +12 12 VDVW V component of divergent wind gradient (m s**-1) +13 13 URTW U component of rotational wind gradient (m s**-1) +14 14 VRTW V component of rotational wind gradient (m s**-1) +21 21 UCTP Unbalanced component of temperature gradient (K) +22 22 UCLN Unbalanced component of logarithm of surface pressure gradient +23 23 UCDV Unbalanced component of divergence gradient (s**-1) +24 24 - Reserved for future unbalanced components +25 25 - Reserved for future unbalanced components +26 26 CL Lake cover gradient (0 - 1) +27 27 CVL Low vegetation cover gradient (0 - 1) +28 28 CVH High vegetation cover gradient (0 - 1) +29 29 TVL Type of low vegetation gradient +30 30 TVH Type of high vegetation gradient +31 31 CI Sea-ice cover gradient (0 - 1) +32 32 ASN Snow albedo gradient (0 - 1) +33 33 RSN Snow density gradient (kg m**-3) +34 34 SSTK Sea surface temperature gradient K +35 35 ISTL1 Ice surface temperature layer 1 gradient K +36 36 ISTL2 Ice surface temperature layer 2 gradient K +37 37 ISTL3 Ice surface temperature layer 3 gradient K +38 38 ISTL4 Ice surface temperature layer 4 gradient K +39 39 SWVL1 Volumetric soil water layer 1 gradient (m**3 m**-3) +40 40 SWVL2 Volumetric soil water layer 2 gradient (m**3 m**-3) +41 41 SWVL3 Volumetric soil water layer 3 gradient (m**3 m**-3) +42 42 SWVL4 Volumetric soil water layer 4 gradient (m**3 m**-3) +43 43 SLT Soil type gradient +44 44 ES Snow evaporation gradient (kg m**-2) +45 45 SMLT Snowmelt gradient (kg m**-2) +46 46 SDUR Solar duration gradient s +47 47 DSRP Direct solar radiation gradient (J m**-2) +48 48 MAGSS Magnitude of surface stress gradient (N m**-2 s) +49 49 10FG 10 metre wind gust gradient (m s**-1) +50 50 LSPF Large-scale precipitation fraction gradient (s) +51 51 MX2T24 Maximum 2 metre temperature gradient (K) +52 52 MN2T24 Minimum 2 metre temperature gradient (K) +53 53 MONT Montgomery potential gradient (m**2 s**-2) +54 54 PRES Pressure gradient (Pa) +55 55 MEAN2T24 Mean 2 metre temperature in the last 24 hours gradient (K) +56 56 MN2D24 Mean 2 metre dewpoint temperature in the last 24 hours gradient K +57 57 UVB Downward UV radiation at the surface gradient (J m**-2) +58 58 PAR Photosynthetically active radiation at the surface gradient (J m**-2) +59 59 CAPE Convective available potential energy gradient (J kg**-1) +60 60 PV Potential vorticity gradient (K m**2 kg**-1 s**-1) +61 61 TPO Total precipitation from observations gradient Millimetres*100 + number of stations +62 62 OBCT Observation count gradient +63 63 - Start time for skin temperature difference (s) +64 64 - Finish time for skin temperature difference (s) +65 65 - Skin temperature difference (K) +66 66 - Leaf area index, low vegetation (m**2 / m**2) +67 67 - Leaf area index, high vegetation (m**2 / m**2) +68 68 - Minimum stomatal resistance, low vegetation (s m**-1) +69 69 - Minimum stomatal resistance, high vegetation (s m**-1) +70 70 - Biome cover, low vegetation (0 - 1) +71 71 - Biome cover, high vegetation (0 - 1) +78 78 - Total column liquid water (kg m**-2) +79 79 - Total column ice water (kg m**-2) +80 80 - Experimental product +81 81 - Experimental product +82 82 - Experimental product +83 83 - Experimental product +84 84 - Experimental product +85 85 - Experimental product +86 86 - Experimental product +87 87 - Experimental product +88 88 - Experimental product +89 89 - Experimental product +90 90 - Experimental product +91 91 - Experimental product +92 92 - Experimental product +93 93 - Experimental product +94 94 - Experimental product +95 95 - Experimental product +96 96 - Experimental product +97 97 - Experimental product +98 98 - Experimental product +99 99 - Experimental product +100 100 - Experimental product +101 101 - Experimental product +102 102 - Experimental product +103 103 - Experimental product +104 104 - Experimental product +105 105 - Experimental product +106 106 - Experimental product +107 107 - Experimental product +108 108 - Experimental product +109 109 - Experimental product +110 110 - Experimental product +111 111 - Experimental product +112 112 - Experimental product +113 113 - Experimental product +114 114 - Experimental product +115 115 - Experimental product +116 116 - Experimental product +117 117 - Experimental product +118 118 - Experimental product +119 119 - Experimental product +120 120 - Experimental product +121 121 MX2T6 Maximum temperature at 2 metres gradient (K) +122 122 MN2T6 Minimum temperature at 2 metres gradient (K) +123 123 10FG6 10 metre wind gust in the last 6 hours gradient (m s**-1) +125 125 - Vertically integrated total energy (J m**-2) +126 126 - Generic parameter for sensitive area prediction Various +127 127 AT Atmospheric tide gradient +128 128 BV Budget values gradient +129 129 Z Geopotential gradient (m**2 s**-2) +130 130 T Temperature gradient (K) +131 131 U U component of wind gradient (m s**-1) +132 132 V V component of wind gradient (m s**-1) +133 133 Q Specific humidity gradient (kg kg**-1) +134 134 SP Surface pressure gradient (Pa) +135 135 W vertical velocity (pressure) gradient (Pa s**-1) +136 136 TCW Total column water gradient (kg m**-2) +137 137 TCWV Total column water vapour gradient (kg m**-2) +138 138 VO Vorticity (relative) gradient (s**-1) +139 139 STL1 Soil temperature level 1 gradient (K) +140 140 SWL1 Soil wetness level 1 gradient (kg m**-2) +141 141 SD Snow depth gradient (m of water equivalent) +142 142 LSP Stratiform precipitation (Large-scale precipitation) gradient (m) +143 143 CP Convective precipitation gradient (m) +144 144 SF Snowfall (convective + stratiform) gradient m of water equivalent +145 145 BLD Boundary layer dissipation gradient (J m**-2) +146 146 SSHF Surface sensible heat flux gradient (J m**-2) +147 147 SLHF Surface latent heat flux gradient (J m**-2) +148 148 CHNK Charnock gradient +149 149 SNR Surface net radiation gradient (J m**-2) +150 150 TNR Top net radiation gradient +151 151 MSL Mean sea level pressure gradient (Pa) +152 152 LNSP Logarithm of surface pressure gradient +153 153 SWHR Short-wave heating rate gradient (K) +154 154 LWHR Long-wave heating rate gradient (K) +155 155 D Divergence gradient (s**-1) +156 156 GH Height gradient (m) +157 157 R Relative humidity gradient (%) +158 158 TSP Tendency of surface pressure gradient (Pa s**-1) +159 159 BLH Boundary layer height gradient (m) +160 160 SDOR Standard deviation of orography gradient +161 161 ISOR Anisotropy of sub-gridscale orography gradient +162 162 ANOR Angle of sub-gridscale orography gradient +163 163 SLOR Slope of sub-gridscale orography gradient +164 164 TCC Total cloud cover gradient (0 - 1) +165 165 10U 10 metre U wind component gradient (m s**-1) +166 166 10V 10 metre V wind component gradient (m s**-1) +167 167 2T 2 metre temperature gradient (K) +168 168 2D 2 metre dewpoint temperature gradient (K) +169 169 SSRD Surface solar radiation downwards gradient (J m**-2) +170 170 STL2 Soil temperature level 2 gradient (K) +171 171 SWL2 Soil wetness level 2 gradient (kg m**-2) +172 172 LSM Land-sea mask gradient (0 - 1) +173 173 SR Surface roughness gradient (m) +174 174 AL Albedo gradient (0 - 1) +175 175 STRD Surface thermal radiation downwards gradient (J m**-2) +176 176 SSR Surface solar radiation gradient (J m**-2) +177 177 STR Surface thermal radiation gradient (J m**-2) +178 178 TSR Top solar radiation gradient (J m**-2) +179 179 TTR Top thermal radiation gradient (J m**-2) +180 180 EWSS East-West surface stress gradient (N m**-2 s) +181 181 NSSS North-South surface stress gradient (N m**-2 s) +182 182 E Evaporation gradient (kg m**-2) +183 183 STL3 Soil temperature level 3 gradient (K) +184 184 SWL3 Soil wetness level 3 gradient (kg m**-2) +185 185 CCC Convective cloud cover gradient (0 - 1) +186 186 LCC Low cloud cover gradient (0 - 1) +187 187 MCC Medium cloud cover gradient (0 - 1) +188 188 HCC High cloud cover gradient (0 - 1) +189 189 SUND Sunshine duration gradient (s) +190 190 EWOV East-West component of sub-gridscale orographic variance gradient (m**2) +191 191 NSOV North-South component of sub-gridscale orographic variance gradient (m**2) +192 192 NWOV North-West/South-East component of sub-gridscale orographic variance gradient (m**2) +193 193 NEOV North-East/South-West component of sub-gridscale orographic variance gradient (m**2) +194 194 BTMP Brightness temperature gradient (K) +195 195 LGWS Longitudinal component of gravity wave stress gradient (N m**-2 s) +196 196 MGWS Meridional component of gravity wave stress gradient (N m**-2 s) +197 197 GWD Gravity wave dissipation gradient (J m**-2) +198 198 SRC Skin reservoir content gradient (kg m**-2) +199 199 VEG Vegetation fraction gradient (0 - 1) +200 200 VSO Variance of sub-gridscale orography gradient (m**2) +201 201 MX2T Maximum temperature at 2 metres since previous post-processing gradient (K) +202 202 MN2T Minimum temperature at 2 metres since previous post-processing gradient (K) +203 203 O3 Ozone mass mixing ratio gradient (kg kg**-1) +204 204 PAW Precipitation analysis weights gradient +205 205 RO Runoff gradient (m) +206 206 TCO3 Total column ozone gradient (kg m**-2) +207 207 10SI 10 metre wind speed gradient (m s**-1) +208 208 TSRC Top net solar radiation, clear sky gradient (J m**-2) +209 209 TTRC Top net thermal radiation, clear sky gradient (J m**-2) +210 210 SSRC Surface net solar radiation, clear sky gradient (J m**-2) +211 211 STRC Surface net thermal radiation, clear sky gradient (J m**-2) +212 212 TISR TOA incident solar radiation gradient (J m**-2) +214 214 DHR Diabatic heating by radiation gradient (K) +215 215 DHVD Diabatic heating by vertical diffusion gradient (K) +216 216 DHCC Diabatic heating by cumulus convection gradient (K) +217 217 DHLC Diabatic heating large-scale condensation gradient (K) +218 218 VDZW Vertical diffusion of zonal wind gradient (m s**-1) +219 219 VDMW Vertical diffusion of meridional wind gradient (m s**-1) +220 220 EWGD East-West gravity wave drag tendency gradient (m s**-1) +221 221 NSGD North-South gravity wave drag tendency gradient (m s**-1) +222 222 CTZW Convective tendency of zonal wind gradient (m s**-1) +223 223 CTMW Convective tendency of meridional wind gradient (m s**-1) +224 224 VDH Vertical diffusion of humidity gradient (kg kg**-1) +225 225 HTCC Humidity tendency by cumulus convection gradient (kg kg**-1) +226 226 HTLC Humidity tendency by large-scale condensation gradient (kg kg**-1) +227 227 CRNH Change from removal of negative humidity gradient (kg kg**-1) +228 228 TP Total precipitation gradient (m) +229 229 IEWS Instantaneous X surface stress gradient (N m**-2) +230 230 INSS Instantaneous Y surface stress gradient (N m**-2) +231 231 ISHF Instantaneous surface heat flux gradient (W m**-2) +232 232 IE Instantaneous moisture flux gradient (kg m**-2 s) +233 233 ASQ Apparent surface humidity gradient (kg kg**-1) +234 234 LSRH Logarithm of surface roughness length for heat gradient +235 235 SKT Skin temperature gradient (K) +236 236 STL4 Soil temperature level 4 gradient (K) +237 237 SWL4 Soil wetness level 4 gradient (m) +238 238 TSN Temperature of snow layer gradient (K) +239 239 CSF Convective snowfall gradient (m of water equivalent) +240 240 LSF Large scale snowfall gradient (m of water equivalent) +241 241 ACF Accumulated cloud fraction tendency gradient (-1 to 1) +242 242 ALW Accumulated liquid water tendency gradient gradient (-1 to 1) +243 243 FAL Forecast albedo gradient (0 - 1) +244 244 FSR Forecast surface roughness gradient (m) +245 245 FLSR Forecast logarithm of surface roughness for heat gradient +246 246 CLWC Specific cloud liquid water content gradient (kg kg**-1) +247 247 CIWC Specific cloud ice water content gradient (kg kg**-1) +248 248 CC Cloud cover gradient (0 - 1) +249 249 AIW Accumulated ice water tendency gradient (-1 to 1) +250 250 ICE Ice age gradient (0 - 1) +251 251 ATTE Adiabatic tendency of temperature gradient (K) +252 252 ATHE Adiabatic tendency of humidity gradient (kg kg**-1) +253 253 ATZE Adiabatic tendency of zonal wind gradient (m s**-1) +254 254 ATMW Adiabatic tendency of meridional wind gradient (m s**-1) +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.130.table b/definitions/grib1/2.98.130.table new file mode 100644 index 000000000..0e3b8642f --- /dev/null +++ b/definitions/grib1/2.98.130.table @@ -0,0 +1,27 @@ +# This file was automatically generated by ./param.pl +208 208 TSRU Top solar radiation upward W m**-2 +209 209 TTRU Top thermal radiation upward W m**-2 +210 210 TSUC Top solar radiation upward, clear sky W m**-2 +211 211 TTUC Top thermal radiation upward, clear sky W m**-2 +212 212 CLW Cloud liquid water kg kg**-1 +213 213 CF Cloud fraction (0 - 1) +214 214 DHR Diabatic heating by radiation K s**-1 +215 215 DHVD Diabatic heating by vertical diffusion K s**-1 +216 216 DHCC Diabatic heating by cumulus convection K s**-1 +217 217 DHLC Diabatic heating by large-scale condensation K s**-1 +218 218 VDZW Vertical diffusion of zonal wind m**2 s**-3 +219 219 VDMW Vertical diffusion of meridional wind m**2 s**-3 +220 220 EWGD East-West gravity wave drag m**2 s**-3 +221 221 NSGD North-South gravity wave drag m**2 s**-3 +222 222 CTZW Convective tendency of zonal wind m**2 s**-3 +223 223 CTMW Convective tendency of meridional wind m**2 s**-3 +224 224 VDH Vertical diffusion of humidity kg kg**-1 s**-1 +225 225 HTCC Humidity tendency by cumulus convection kg kg**-1 s**-1 +226 226 HTLC Humidity tendency by large-scale condensation kg kg**-1 s**-1 +227 227 CRNH Change from removal of negative humidity kg kg**-1 s**-1 +228 228 ATT Adiabatic tendency of temperature K s**-1 +229 229 ATH Adiabatic tendency of humidity kg kg**-1 s**-1 +230 230 ATZW Adiabatic tendency of zonal wind m**2 s**-3 +231 231 ATMWAX Adiabatic tendency of meridional wind m**2 s**-3 +232 232 MVV Mean vertical velocity Pa s**-1 +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.131.table b/definitions/grib1/2.98.131.table new file mode 100644 index 000000000..948f4bb1a --- /dev/null +++ b/definitions/grib1/2.98.131.table @@ -0,0 +1,74 @@ +# This file was automatically generated by ./param.pl +1 1 2TAG2 2m temperature anomaly of at least +2K % +2 2 2TAG1 2m temperature anomaly of at least +1K % +3 3 2TAG0 2m temperature anomaly of at least 0K % +4 4 2TALM1 2m temperature anomaly of at most -1K % +5 5 2TALM2 2m temperature anomaly of at most -2K % +6 6 TPAG20 Total precipitation anomaly of at least 20 mm % +7 7 TPAG10 Total precipitation anomaly of at least 10 mm % +8 8 TPAG0 Total precipitation anomaly of at least 0 mm % +9 9 STAG0 Surface temperature anomaly of at least 0K % +10 10 mslag0 Mean sea level pressure anomaly of at least 0 Pa % +15 15 H0DIP Height of 0 degree isotherm probability percentage +16 16 HSLP Height of snowfall limit probability percentage +17 17 SAIP Showalter index probability percentage +18 18 WHIP Whiting index probability percentage +20 20 TALM2 Temperature anomaly less than -2 K % +21 21 TAG2 Temperature anomaly of at least +2 K % +22 22 TALM8 Temperature anomaly less than -8 K % +23 23 TALM4 Temperature anomaly less than -4 K % +24 24 TAG4 Temperature anomaly greater than +4 K % +25 25 TAG8 Temperature anomaly greater than +8 K % +49 49 10GP 10 metre wind gust probability percentage +59 59 CAPEP Convective available potential energy probability percentage +60 60 TPG1 Total precipitation of at least 1 mm % +61 61 TPG5 Total precipitation of at least 5 mm % +62 62 TPG10 Total precipitation of at least 10 mm % +63 63 TPG20 Total precipitation of at least 20 mm % +64 64 TPL01 Total precipitation less than 0.1 mm % +65 65 TPRL1 Total precipitation rate less than 1 mm/day % +66 66 TPRG3 Total precipitation rate of at least 3 mm/day % +67 67 TPRG5 Total precipitation rate of at least 5 mm/day % +68 68 10SPG10 10 metre Wind speed of at least 10 m/s % +69 69 10SPG15 10 metre Wind speed of at least 15 m/s % +70 70 10FGG15 10 metre Wind gust of at least 15 m/s % +71 71 10FGG20 10 metre Wind gust of at least 20 m/s % +72 72 10FGG25 10 metre Wind gust of at least 25 m/s % +73 73 2TL273 2 metre temperature less than 273.15 K % +74 74 SWHG2 Significant wave height of at least 2 m % +75 75 SWHG4 Significant wave height of at least 4 m % +76 76 SWHG6 Significant wave height of at least 6 m % +77 77 SWHG8 Significant wave height of at least 8 m % +79 79 MWPG10 Mean wave period of at least 10 s % +80 80 MWPG12 Mean wave period of at least 12 s % +81 81 MWPG15 Mean wave period of at least 15 s % +82 82 tpg40 Total precipitation of at least 40 mm % +83 83 Total precipitation of at least 60 mm % +84 84 Total precipitation of at least 80 mm % +85 85 Total precipitation of at least 100 mm % +86 86 Total precipitation of at least 150 mm % +87 87 Total precipitation of at least 200 mm % +88 88 Total precipitation of at least 300 mm % +89 89 Probability of a tropical storm % +90 90 Probability of a hurricane % +91 91 Probability of a tropical depression % +92 92 Climatological probability of a tropical storm % +93 93 Climatological probability of a hurricane % +94 94 Climatological probability of a tropical depression % +95 95 Probability anomaly of a tropical storm % +96 96 Probability anomaly of a hurricane % +97 97 PATD Probability anomaly of a tropical depression % +129 129 ZP Geopotential probability zp % +130 130 TAP Temperature anomaly probability percentage +139 139 2TP 2 metre temperature probability % +144 144 SFP Snowfall (convective + stratiform) probability percentage +151 151 TPP Total precipitation probability +164 164 TCCP Total cloud cover probability percentage +165 165 10SP 10 metre speed probability percentage +167 167 2TP 2 metre temperature probability percentage +201 201 MX2TP Maximum 2 metre temperature probability percentage +202 202 MN2TP Minimum 2 metre temperature probability percentage +228 228 TPP Total precipitation probability percentage +229 229 SWHP Significant wave height probability percentage +232 232 MWPP Mean wave period probability percentage +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.132.table b/definitions/grib1/2.98.132.table new file mode 100644 index 000000000..787260b5f --- /dev/null +++ b/definitions/grib1/2.98.132.table @@ -0,0 +1,10 @@ +# This file was automatically generated by ./param.pl +49 49 10GP 10 metre wind gust index (-1 to 1) +144 144 sfi Snowfall index (-1 to 1) +165 165 10SP 10 metre speed index (-1 to 1) +167 167 2TP 2 metre temperature index (-1 to 1) +201 201 Maximum temperature at 2 metres index (-1 to 1) +202 202 Minimum temperature at 2 metres index (-1 to 1) +216 216 Maximum of significant wave height index (-1 to 1) +228 228 TTP Total precipitation index (-1 to 1) +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.133.table b/definitions/grib1/2.98.133.table new file mode 100644 index 000000000..4c26adce7 --- /dev/null +++ b/definitions/grib1/2.98.133.table @@ -0,0 +1,93 @@ +# This file was automatically generated by ./param.pl +1 1 2tplm10 2m temperature probability less than -10 C % +2 2 2tplm5 2m temperature probability less than -5 C % +3 3 2tpl0 2m temperature probability less than 0 C % +4 4 2tpl5 2m temperature probability less than 5 C % +5 5 2tpl10 2m temperature probability less than 10 C % +6 6 2tpg25 2m temperature probability greater than 25 C % +7 7 2tpg30 2m temperature probability greater than 30 C % +8 8 2tpg35 2m temperature probability greater than 35 C % +9 9 2tpg40 2m temperature probability greater than 40 C % +10 10 2tpg45 2m temperature probability greater than 45 C % +11 11 mn2tplm10 Minimum 2 metre temperature probability less than -10 C % +12 12 mn2tplm5 Minimum 2 metre temperature probability less than -5 C % +13 13 mn2tpl0 Minimum 2 metre temperature probability less than 0 C % +14 14 mn2tpl5 Minimum 2 metre temperature probability less than 5 C % +15 15 mn2tpl10 Minimum 2 metre temperature probability less than 10 C % +16 16 mx2tpg25 Maximum 2 metre temperature probability greater than 25 C % +17 17 mx2tpg30 Maximum 2 metre temperature probability greater than 30 C % +18 18 mx2tpg35 Maximum 2 metre temperature probability greater than 35 C % +19 19 mx2tpg40 Maximum 2 metre temperature probability greater than 40 C % +20 20 mx2tpg45 Maximum 2 metre temperature probability greater than 45 C % +21 21 10spg10 10 metre wind speed probability of at least 10 m/s % +22 22 10spg15 10 metre wind speed probability of at least 15 m/s % +23 23 10spg20 10 metre wind speed probability of at least 20 m/s % +24 24 10spg35 10 metre wind speed probability of at least 35 m/s % +25 25 10spg50 10 metre wind speed probability of at least 50 m/s % +26 26 10gpg20 10 metre wind gust probability of at least 20 m/s % +27 27 10gpg35 10 metre wind gust probability of at least 35 m/s % +28 28 10gpg50 10 metre wind gust probability of at least 50 m/s % +29 29 10gpg75 10 metre wind gust probability of at least 75 m/s % +30 30 10gpg100 10 metre wind gust probability of at least 100 m/s % +31 31 tppg1 Total precipitation probability of at least 1 mm % +32 32 tppg5 Total precipitation probability of at least 5 mm % +33 33 tppg10 Total precipitation probability of at least 10 mm % +34 34 tppg20 Total precipitation probability of at least 20 mm % +35 35 tppg40 Total precipitation probability of at least 40 mm % +36 36 tppg60 Total precipitation probability of at least 60 mm % +37 37 tppg80 Total precipitation probability of at least 80 mm % +38 38 tppg100 Total precipitation probability of at least 100 mm % +39 39 tppg150 Total precipitation probability of at least 150 mm % +40 40 tppg200 Total precipitation probability of at least 200 mm % +41 41 tppg300 Total precipitation probability of at least 300 mm % +42 42 sfpg1 Snowfall probability of at least 1 mm % +43 43 sfpg5 Snowfall probability of at least 5 mm % +44 44 sfpg10 Snowfall probability of at least 10 mm % +45 45 sfpg20 Snowfall probability of at least 20 mm % +46 46 sfpg40 Snowfall probability of at least 40 mm % +47 47 sfpg60 Snowfall probability of at least 60 mm % +48 48 sfpg80 Snowfall probability of at least 80 mm % +49 49 sfpg100 Snowfall probability of at least 100 mm % +50 50 sfpg150 Snowfall probability of at least 150 mm % +51 51 sfpg200 Snowfall probability of at least 200 mm % +52 52 sfpg300 Snowfall probability of at least 300 mm % +53 53 tccpg10 Total Cloud Cover probability greater than 10% % +54 54 tccpg20 Total Cloud Cover probability greater than 20% % +55 55 tccpg30 Total Cloud Cover probability greater than 30% % +56 56 tccpg40 Total Cloud Cover probability greater than 40% % +57 57 tccpg50 Total Cloud Cover probability greater than 50% % +58 58 tccpg60 Total Cloud Cover probability greater than 60% % +59 59 tccpg70 Total Cloud Cover probability greater than 70% % +60 60 tccpg80 Total Cloud Cover probability greater than 80% % +61 61 tccpg90 Total Cloud Cover probability greater than 90% % +62 62 tccpg99 Total Cloud Cover probability greater than 99% % +63 63 hccpg10 High Cloud Cover probability greater than 10% % +64 64 hccpg20 High Cloud Cover probability greater than 20% % +65 65 hccpg30 High Cloud Cover probability greater than 30% % +66 66 hccpg40 High Cloud Cover probability greater than 40% % +67 67 hccpg50 High Cloud Cover probability greater than 50% % +68 68 hccpg60 High Cloud Cover probability greater than 60% % +69 69 hccpg70 High Cloud Cover probability greater than 70% % +70 70 hccpg80 High Cloud Cover probability greater than 80% % +71 71 hccpg90 High Cloud Cover probability greater than 90% % +72 72 hccpg99 High Cloud Cover probability greater than 99% % +73 73 mccpg10 Medium Cloud Cover probability greater than 10% % +74 74 mccpg20 Medium Cloud Cover probability greater than 20% % +75 75 mccpg30 Medium Cloud Cover probability greater than 30% % +76 76 mccpg40 Medium Cloud Cover probability greater than 40% % +77 77 mccpg50 Medium Cloud Cover probability greater than 50% % +78 78 mccpg60 Medium Cloud Cover probability greater than 60% % +79 79 mccpg70 Medium Cloud Cover probability greater than 70% % +80 80 mccpg80 Medium Cloud Cover probability greater than 80% % +81 81 mccpg90 Medium Cloud Cover probability greater than 90% % +82 82 mccpg99 Medium Cloud Cover probability greater than 99% % +83 83 lccpg10 Low Cloud Cover probability greater than 10% % +84 84 lccpg20 Low Cloud Cover probability greater than 20% % +85 85 lccpg30 Low Cloud Cover probability greater than 30% % +86 86 lccpg40 Low Cloud Cover probability greater than 40% % +87 87 lccpg50 Low Cloud Cover probability greater than 50% % +88 88 lccpg60 Low Cloud Cover probability greater than 60% % +89 89 lccpg70 Low Cloud Cover probability greater than 70% % +90 90 lccpg80 Low Cloud Cover probability greater than 80% % +91 91 lccpg90 Low Cloud Cover probability greater than 90% % +92 92 lccpg99 Low Cloud Cover probability greater than 99% % diff --git a/definitions/grib1/2.98.140.table b/definitions/grib1/2.98.140.table new file mode 100644 index 000000000..95b656fef --- /dev/null +++ b/definitions/grib1/2.98.140.table @@ -0,0 +1,47 @@ +# This file was automatically generated by ./param.pl +200 200 maxswh Maximum of significant wave height m +211 211 Normalized energy flux into waves +212 212 Normalized energy flux into ocean +213 213 Turbulent Langmuir number +214 214 Normalized stress into ocean +215 215 U-component stokes drift +216 216 V-component stokes drift m s**-1 +217 217 Period corresponding to maximum individual wave height +218 218 Maximum individual wave height m +219 219 WMB Model bathymetry m +220 220 MP1 Mean wave period based on first moment s +221 221 MP2 Mean wave period based on second moment s +222 222 WDW Wave spectral directional width +223 223 P1WW Mean wave period based on first moment for wind waves s +224 224 P2WW Mean wave period based on second moment for wind waves s +225 225 DWWW Wave spectral directional width for wind waves +226 226 P1PS Mean wave period based on first moment for swell s +227 227 P2PS Mean wave period based on second moment for swell s +228 228 DWPS Wave spectral directional width for swell +229 229 SWH Significant height of combined wind waves and swell (m) +230 230 MWD Mean wave direction degrees +231 231 PP1D Peak period of 1D spectra s +232 232 MWP Mean wave period s +233 233 CDWW Coefficient of drag with waves +234 234 SHWW Significant height of wind waves m +235 235 MDWW Mean direction of wind waves degrees +236 236 MPWW Mean period of wind waves s +237 237 SHTS Significant height of total swell m +238 238 MDTS Mean direction of total swell degrees +239 239 MPTS Mean period of total swell s +240 240 SDHS Standard deviation wave height m +241 241 MU10 Mean of 10 metre wind speed m s**-1 +242 242 MDWI Mean wind direction degrees +243 243 SDU Standard deviation of 10 metre wind speed m s**-1 +244 244 MSQS Mean square slope of waves dimensionless +245 245 WIND 10 metre wind speed m s**-1 +246 246 AWH Altimeter wave height m +247 247 ACWH Altimeter corrected wave height m +248 248 ARRC Altimeter range relative correction +249 249 DWI 10 metre wind direction degrees +250 250 2DSP 2D wave spectra (multiple) m**2 s radian**-1 +251 251 2DFD 2D wave spectra (single) m**2 s radian**-1 +252 252 WSK Wave spectral kurtosis +253 253 BFI Benjamin-Feir index +254 254 WSP Wave spectral peakedness s**-1 +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.150.table b/definitions/grib1/2.98.150.table new file mode 100644 index 000000000..ecaa92cdb --- /dev/null +++ b/definitions/grib1/2.98.150.table @@ -0,0 +1,33 @@ +# This file was automatically generated by ./param.pl +129 129 - Ocean potential temperature (deg C) +130 130 - Ocean salinity psu +131 131 - Ocean potential density kg m**-3 -1000 +133 133 - Ocean U wind component (m s**-1) +134 134 - Ocean V wind component (m s**-1) +135 135 - Ocean W wind component (m s**-1) +137 137 - Richardson number +139 139 - U*V product (m s**-2) +140 140 - U*T product (m s**-1 deg C) +141 141 - V*T product (m s**-1 deg C) +142 142 - U*U product (m s**-2) +143 143 - V*V product (m s**-2) +144 144 - UV - U~V~ (m s**-2) +145 145 - UT - U~T~ m s**-1 deg C +146 146 - VT - V~T~ (m s**-1 deg C) +147 147 - UU - U~U~ (m s**-2) +148 148 - VV - V~V~ (m s**-2) +152 152 - Sea level (m) +153 153 - Barotropic stream function +154 154 - Mixed layer depth (m) +155 155 - Depth (m) +168 168 - U stress (Pa) +169 169 - V stress (Pa) +170 170 - Turbulent kinetic energy input +171 171 - Net surface heat flux +172 172 - Surface solar radiation +173 173 - P-E +180 180 - Diagnosed sea surface temperature error (deg C) +181 181 - Heat flux correction (W m**-2) +182 182 - Observed sea surface temperature (deg C) +183 183 - Observed heat flux (W m**-2) +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.151.table b/definitions/grib1/2.98.151.table new file mode 100644 index 000000000..836c23cdc --- /dev/null +++ b/definitions/grib1/2.98.151.table @@ -0,0 +1,80 @@ +# This file was automatically generated by ./param.pl +129 129 OCPT Ocean potential temperature deg C +130 130 S Salinity psu +131 131 OCU Ocean current zonal component (m s**-1) +132 132 OCV Ocean current meridional component (m s**-1) +133 133 OCW Ocean current vertical component (m s**-1) +134 134 MST Modulus of strain rate tensor s**-1 +135 135 VVS Vertical viscosity m**2 s**-1 +136 136 VDF Vertical diffusivity m**2 s**-1 +137 137 DEP Bottom level Depth (m) +138 138 STH Sigma-theta kg m**-3 +139 139 RN Richardson number +140 140 UV UV product m**2 s**-2 +141 141 UT UT product m s**-1 degC +142 142 VT VT product m s**-1 deg C +143 143 UU UU product m**2 s**-2 +144 144 VV VV product m**2 s**-2 +145 145 SL Sea level m +146 146 SL_1 Sea level previous timestep m +147 147 BSF Barotropic stream function m**3 s**-1 +148 148 MLD Mixed layer depth m +149 149 BTP Bottom Pressure (equivalent height) (m) +151 151 CRL Curl of Wind Stress N m**-3 +152 152 Divergence of wind stress (Nm**-3) +153 153 TAX U stress Pa +154 154 TAY V stress Pa +155 155 TKI Turbulent kinetic energy input W m**-2 +156 156 NSF Net surface heat flux W m**-2 +157 157 ASR Absorbed solar radiation W m**-2 +158 158 PME Precipitation - evaporation m s**-1 +159 159 SST Specified sea surface temperature deg C +160 160 SHF Specified surface heat flux W m**-2 +161 161 DTE Diagnosed sea surface temperature error deg C +162 162 HFC Heat flux correction W m**-2 +163 163 20D 20 degrees isotherm depth m +164 164 TAV300 Average potential temperature in the upper 300m degrees C +165 165 UBA1 Vertically integrated zonal velocity (previous time step) m**2 s**-1 +166 166 VBA1 Vertically Integrated meridional velocity (previous time step) m**2 s**-1 +167 167 ZTR Vertically integrated zonal volume transport m**2 s**-1 +168 168 MTR Vertically integrated meridional volume transport m**2 s**-1 +169 169 ZHT Vertically integrated zonal heat transport J m**-1 s**-1 +170 170 MHT Vertically integrated meridional heat transport J m**-1 s**-1 +171 171 UMAX U velocity maximum m s**-1 +172 172 DUMAX Depth of the velocity maximum m +173 173 SMAX Salinity maximum psu +174 174 DSMAX Depth of salinity maximum m +175 175 SAV300 Average salinity in the upper 300m psu +176 176 LDP Layer Thickness at scalar points (m) +177 177 LDU Layer Thickness at vector points (m) +178 178 PTI Potential temperature increment deg C +179 179 PTAE Potential temperature analysis error deg C +180 180 BPT Background potential temperature deg C +181 181 APT Analysed potential temperature deg C +182 182 PTBE Potential temperature background error deg C +183 183 AS Analysed salinity psu +184 184 SALI Salinity increment psu +185 185 EBT Estimated Bias in Temperature deg C +186 186 EBS Estimated Bias in Salinity psu +187 187 UVI Zonal Velocity increment (from balance operator) m/s per time step +188 188 VVI Meridional Velocity increment (from balance operator) +190 190 SUBI Salinity increment (from salinity data) psu per time step +191 191 SALE Salinity analysis error psu +192 192 BSAL Background Salinity psu +193 193 - Reserved +194 194 SALBE Salinity background error psu +199 199 EBTA Estimated temperature bias from assimilation deg C +200 200 EBSA Estimated salinity bias from assimilation psu +201 201 LTI Temperature increment from relaxation term deg C per time step +202 202 EBSA Salinity increment from relaxation term psu per time step +203 203 BZPGA Bias in the zonal pressure gradient (applied) (Pa**m-1) +204 204 BMPGA Bias in the meridional pressure gradient (applied) (Pa**m-1) +205 205 EBTL Estimated temperature bias from relaxation deg C +206 206 EBSL Estimated salinity bias from relaxation psu +207 207 FGBT First guess bias in temperature deg C +208 208 FGBS First guess bias in salinity psu +209 209 ABP Applied bias in pressure Pa +210 210 FGBP FG bias in pressure Pa +211 211 PTA Bias in temperature(applied) (deg C) +212 212 PSA Bias in salinity (applied) (psu) +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.160.table b/definitions/grib1/2.98.160.table new file mode 100644 index 000000000..b87f8872d --- /dev/null +++ b/definitions/grib1/2.98.160.table @@ -0,0 +1,109 @@ +# This file was automatically generated by ./param.pl +127 127 AT Atmospheric tide +128 128 BV Budget values +129 129 Z Geopotential m**2 s**-2 +130 130 T Temperature K +131 131 U U velocity m s**-1 +132 132 V V velocity m s**-1 +133 133 Q Specific humidity kg kg**-1 +134 134 SP Surface pressure Pa +135 135 W Vertical velocity (pressure) Pa s**-1 +136 136 TCW Total column water kg m**-2 +137 137 PWC Precipitable water content kg m**-2 +138 138 VO Vorticity (relative) s**-1 +139 139 STL1 Soil temperature level 1 K +140 140 SWL1 Soil wetness level 1 m +141 141 SD Snow depth m of water +142 142 LSP Large-scale precipitation kg m**-2 s**-1 +143 143 CP Convective precipitation kg m**-2 s**-1 +144 144 SF Snowfall kg m**-2 s**-1 +145 145 BLD Boundary layer dissipation W m**-2 +146 146 SSHF Surface sensible heat flux W m**-2 +147 147 SLHF Surface latent heat flux W m**-2 +151 151 MSL Mean sea level pressure Pa +152 152 LNSP Logarithm of surface pressure +155 155 D Divergence s**-1 +156 156 GH Height m +157 157 R Relative humidity (0 - 1) +158 158 TSP Tendency of surface pressure Pa s**-1 +164 164 TCC Total cloud cover (0 - 1) +165 165 10U 10 metre U wind component m s**-1 +166 166 10V 10 metre V wind component m s**-1 +167 167 2T 2 metre temperature K +168 168 2D 2 metre dewpoint temperature K +170 170 STL2 Soil temperature level 2 K +171 171 SWL2 Soil wetness level 2 m +172 172 LSM Land-sea mask (0 - 1) +173 173 SR Surface roughness m +174 174 AL Albedo (0 - 1) +176 176 SSR Surface solar radiation W m**-2 +177 177 STR Surface thermal radiation W m**-2 +178 178 TSR Top solar radiation W m**-2 +179 179 TTR Top thermal radiation W m**-2 +180 180 EWSS East-West surface stress N m**-2 s**-1 +181 181 NSSS North-South surface stress N m**-2 s**-1 +182 182 E Evaporation kg m**-2 s**-1 +183 183 STL3 Soil temperature level 3 K +184 184 SWL3 Soil wetness level 3 m +185 185 CCC Convective cloud cover (0 - 1) +186 186 LCC Low cloud cover (0 - 1) +187 187 MCC Medium cloud cover (0 - 1) +188 188 HCC High cloud cover (0 - 1) +190 190 EWOV East-West component of sub-gridscale orographic variance m**2 +191 191 NSOV North-South component of sub-gridscale orographic variance m**2 +192 192 NWOV North-West/South-East component of sub-gridscale orographic variance m**2 +193 193 NEOV North-East/South-West component of sub-gridscale orographic variance m**2 +195 195 LGWS Latitudinal component of gravity wave stress N m**-2 s +196 196 MGWS Meridional component of gravity wave stress N m**-2 s +197 197 GWD Gravity wave dissipation W m**-2 s +198 198 SRC Skin reservoir content m of water +199 199 VEG Percentage of vegetation % +200 200 VSO Variance of sub-gridscale orography m**2 +201 201 MX2T Maximum temperature at 2 metres during averaging time K +202 202 MN2T Minimum temperature at 2 metres during averaging time K +204 204 PAW Precipitation analysis weights +205 205 RO Runoff kg m**-2 s**-1 +206 206 ZZ Standard deviation of geopotential m**2 s**-2 +207 207 TZ Covariance of temperature and geopotential K m**2 s**-2 +208 208 TT Standard deviation of temperature K +209 209 QZ Covariance of specific humidity and geopotential m**2 s**-2 +210 210 QT Covariance of specific humidity and temperature K +211 211 QQ Standard deviation of specific humidity (0 - 1) +212 212 UZ Covariance of U component and geopotential m**3 s**-3 +213 213 UT Covariance of U component and temperature K m s**-1 +214 214 UQ Covariance of U component and specific humidity m s**-1 +215 215 UU Standard deviation of U velocity m s**-1 +216 216 VZ Covariance of V component and geopotential m**3 s**-3 +217 217 VT Covariance of V component and temperature K m s**-1 +218 218 VQ Covariance of V component and specific humidity m s**-1 +219 219 VU Covariance of V component and U component m**2 s**-2 +220 220 VV Standard deviation of V component m s**-1 +221 221 WZ Covariance of W component and geopotential Pa m**2 s**-3 +222 222 WT Covariance of W component and temperature K Pa s**-1 +223 223 WQ Covariance of W component and specific humidity Pa s**-1 +224 224 WU Covariance of W component and U component Pa m s**-2 +225 225 WV Covariance of W component and V component Pa m s**-2 +226 226 WW Standard deviation of vertical velocity Pa s**-1 +228 228 TP Total precipitation m +229 229 IEWS Instantaneous X surface stress N m**-2 +230 230 INSS Instantaneous Y surface stress N m**-2 +231 231 ISHF Instantaneous surface heat flux W m**-2 +232 232 IE Instantaneous moisture flux kg m**-2 s**-1 +233 233 ASQ Apparent surface humidity kg kg**-1 +234 234 LSRH Logarithm of surface roughness length for heat +235 235 SKT Skin temperature K +236 236 STL4 Soil temperature level 4 K +237 237 SWL4 Soil wetness level 4 m +238 238 TSN Temperature of snow layer K +239 239 CSF Convective snowfall kg m**-2 s**-1 +240 240 LSF Large scale snowfall kg m**-2 s**-1 +241 241 CLWCER Cloud liquid water content kg kg**-1 +242 242 CC Cloud cover (0 - 1) +243 243 FAL Forecast albedo +244 244 FSR Forecast surface roughness m +245 245 FLSR Forecast logarithm of surface roughness for heat +246 246 10WS 10 metre wind speed m s**-1 +247 247 MOFL Momentum flux N m**-2 +249 249 - Gravity wave dissipation flux W m**-2 +254 254 HSD Heaviside beta function (0 - 1) +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.162.table b/definitions/grib1/2.98.162.table new file mode 100644 index 000000000..5cb790512 --- /dev/null +++ b/definitions/grib1/2.98.162.table @@ -0,0 +1,78 @@ +# This file was automatically generated by ./param.pl +51 51 - Surface geopotential m**2 s**-2 +52 52 - Surface pressure Pa +53 53 - Vertical integral of mass of atmosphere kg m**-2 +54 54 - Vertical integral of temperature K kg m**-2 +55 55 - Vertical integral of water vapour kg m**-2 +56 56 - Vertical integral of cloud liquid water kg m**-2 +57 57 - Vertical integral of cloud frozen water kg m**-2 +58 58 - Vertical integral of ozone kg m**-2 +59 59 - Vertical integral of kinetic energy J m**-2 +60 60 - Vertical integral of thermal energy J m**-2 +61 61 - Vertical integral of potential+internal energy J m**-2 +62 62 - Vertical integral of potential+internal+latent energy J m**-2 +63 63 - Vertical integral of total energy J m**-2 +64 64 - Vertical integral of energy conversion W m**-2 +65 65 - Vertical integral of eastward mass flux kg m**-1 s**-1 +66 66 - Vertical integral of northward mass flux kg m**-1 s**-1 +67 67 - Vertical integral of eastward kinetic energy flux W m**-2 +68 68 - Vertical integral of northward kinetic energy flux W m**-2 +69 69 - Vertical integral of eastward heat flux W m**-2 +70 70 - Vertical integral of northward heat flux W m**-2 +71 71 - Vertical integral of eastward water vapour flux kg m**-1 s**-1 +72 72 - Vertical integral of northward water vapour flux kg m**-1 s**-1 +73 73 - Vertical integral of eastward geopotential flux W m**-2 +74 74 - Vertical integral of northward geopotential flux W m**-2 +75 75 - Vertical integral of eastward total energy flux W m**-2 +76 76 - Vertical integral of northward total energy flux W m**-2 +77 77 - Vertical integral of eastward ozone flux kg m**-1 s**-1 +78 78 - Vertical integral of northward ozone flux kg m**-1 s**-1 +81 81 - Vertical integral of divergence of mass flux kg m**-2 s**-1 +82 82 - Vertical integral of divergence of kinetic energy flux W m**-2 +83 83 - Vertical integral of divergence of thermal energy flux W m**-2 +84 84 - Vertical integral of divergence of moisture flux kg m**-2 s**-1 +85 85 - Vertical integral of divergence of geopotential flux W m**-2 +86 86 - Vertical integral of divergence of total energy flux W m**-2 +87 87 - Vertical integral of divergence of ozone flux kg m**-2 s**-1 +100 100 - Tendency of short wave radiation K +101 101 - Tendency of long wave radiation K +102 102 - Tendency of clear sky short wave radiation K +103 103 - Tendency of clear sky long wave radiation K +104 104 - Updraught mass flux kg m**-2 +105 105 - Downdraught mass flux kg m**-2 +106 106 - Updraught detrainment rate kg m**-3 +107 107 - Downdraught detrainment rate kg m**-3 +108 108 - Total precipitation flux kg m**-2 +109 109 - Turbulent diffusion coefficient for heat m**2 +110 110 - Tendency of temperature due to physics K +111 111 - Tendency of specific humidity due to physics kg kg**-1 +112 112 - Tendency of u component due to physics m s**-1 +113 113 - Tendency of v component due to physics m s**-1 +206 206 - Variance of geopotential m**4 s**-4 +207 207 - Covariance of geopotential/temperature m**2 K s**-2 +208 208 - Variance of temperature K**2 +209 209 - Covariance of geopotential/specific humidity m**2 s**-2 +210 210 - Covariance of temperature/specific humidity K +211 211 - Variance of specific humidity +212 212 - Covariance of u component/geopotential M**3 s**-3 +213 213 - Covariance of u component/temperature m s**-1 K +214 214 - Covariance of u component/specific humidity m s**-1 +215 215 - Variance of u component m**2 s**-2 +216 216 - Covariance of v component/geopotential M**3 s**-3 +217 217 - Covariance of v component/temperature m s**-1 K +218 218 - Covariance of v component/specific humidity m s**-1 +219 219 - Covariance of v component/u component m**2 s**-2 +220 220 - Variance of v component m**2 s**-2 +221 221 - Covariance of omega/geopotential m**2 Pa s**-3 +222 222 - Covariance of omega/temperature Pa s**-1 K +223 223 - Covariance of omega/specific humidity Pa s**-1 +224 224 - Covariance of omega/u component m Pa s**-2 +225 225 - Covariance of omega/v component m Pa s**-2 +226 226 - Variance of omega Pa**2 s**-2 +227 227 - Variance of surface pressure Pa**2 +229 229 - Variance of relative humidity dimensionless +230 230 - Covariance of u component/ozone m s**-1 +231 231 - Covariance of v component/ozone m s**-1 +232 232 - Covariance of omega/ozone Pa s**-1 +233 233 - Variance of ozone dimensionless +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.170.table b/definitions/grib1/2.98.170.table new file mode 100644 index 000000000..4b2ae81a2 --- /dev/null +++ b/definitions/grib1/2.98.170.table @@ -0,0 +1,18 @@ +# This file was automatically generated by ./param.pl +129 129 Z Geopotential m**2 s**-2 +130 130 T Temperature K +131 131 U U velocity m s**-1 +132 132 V V velocity m s**-1 +138 138 VO Vorticity (relative) s**-1 +140 140 SWL1 Soil wetness level 1 m +141 141 SD Snow depth m of water equivalent +149 149 TSW Total soil moisture m +151 151 MSL Mean sea level pressure Pa +155 155 D Divergence s**-1 +171 171 SWL2 Soil wetness level 2 m +179 179 TTR Top thermal radiation W m-2 +184 184 SWL3 Soil wetness level 3 m +201 201 MX2T Maximum temperature at 2 metres K +202 202 MN2T Minimum temperature at 2 metres K +228 228 TP Total precipitation m +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.171.table b/definitions/grib1/2.98.171.table new file mode 100644 index 000000000..699ca37b7 --- /dev/null +++ b/definitions/grib1/2.98.171.table @@ -0,0 +1,185 @@ +# This file was automatically generated by ./param.pl +1 1 - Stream function anomaly (m**2 s**-1) +2 2 - Velocity potential anomaly (m**2 s**-1) +3 3 - Potential temperature anomaly (K) +4 4 - Equivalent potential temperature anomaly (K) +5 5 - Saturated equivalent potential temperature anomaly (K) +11 11 - U component of divergent wind anomaly (m s**-1) +12 12 - V component of divergent wind anomaly (m s**-1) +13 13 - U component of rotational wind anomaly (m s**-1) +14 14 - V component of rotational wind anomaly (m s**-1) +21 21 - Unbalanced component of temperature anomaly (K) +22 22 - Unbalanced component of logarithm of surface pressure anomaly +23 23 - Unbalanced component of divergence anomaly (s**-1) +26 26 - Lake cover anomaly (0 - 1) +27 27 - Low vegetation cover anomaly (0 - 1) +28 28 - High vegetation cover anomaly (0 - 1) +29 29 - Type of low vegetation anomaly +30 30 - Type of high vegetation anomaly +31 31 - Sea-ice cover anomaly (0 - 1) +32 32 - Snow albedo anomaly (0 - 1) +33 33 - Snow density anomaly (kg m**-3) +34 34 - Sea surface temperature anomaly (K) +35 35 - Ice surface temperature anomaly layer 1 (K) +36 36 - Ice surface temperature anomaly layer 2 (K) +37 37 - Ice surface temperature anomaly layer 3 (K) +38 38 - Ice surface temperature anomaly layer 4 (K) +39 39 - Volumetric soil water anomaly layer 1 (m**3 m**-3) +40 40 - Volumetric soil water anomaly layer 2 (m**3 m**-3) +41 41 - Volumetric soil water anomaly layer 3 (m**3 m**-3) +42 42 - Volumetric soil water anomaly layer 4 (m**3 m**-3) +43 43 - Soil type anomaly +44 44 - Snow evaporation anomaly m of water +45 45 - Snowmelt anomaly m of water +46 46 - Solar duration anomaly s +47 47 - Direct solar radiation anomaly (w m**-2) +48 48 - Magnitude of surface stress anomaly (N m**-2 s) +49 49 - 10 metre wind gust anomaly (m s**-1) +50 50 - Large-scale precipitation fraction anomaly (s) +51 51 - Maximum 2 metre temperature in the last 24 hours anomaly (K) +52 52 - Minimum 2 metre temperature in the last 24 hours anomaly (K) +53 53 - Montgomery potential anomaly (m**2 s**-2) +54 54 - Pressure anomaly (Pa) +55 55 - Mean 2 metre temperature in the last 24 hours anomaly (K) +56 56 - Mean 2 metre dewpoint temperature in the last 24 hours anomaly (K) +57 57 - Downward UV radiation at the surface anomaly (w m**-2) +58 58 - Photosynthetically active radiation at the surface anomaly (w m**-2) +59 59 - Convective available potential energy anomaly (J kg**-1) +60 60 - Potential vorticity anomaly (K m**2 kg**-1 s**-1) +61 61 - Total precipitation from observations anomaly (Millimetres*100 + number of stations) +62 62 - Observation count anomaly +63 63 - Start time for skin temperature difference anomaly (s) +64 64 - Finish time for skin temperature difference anomaly (s) +65 65 - Skin temperature difference anomaly (K) +78 78 - Total column liquid water anomaly (kg m**-2) +79 79 - Total column ice water anomaly (kg m**-2) +125 125 - Vertically integrated total energy anomaly (J m**-2) +126 126 - Generic parameter for sensitive area prediction Various +127 127 - Atmospheric tide anomaly +128 128 - Budget values anomaly +129 129 - Geopotential anomaly (m**2 s**-2) +130 130 - Temperature anomaly (K) +131 131 - U component of wind anomaly (m s**-1) +132 132 - V component of wind anomaly (m s**-1) +133 133 - Specific humidity anomaly (kg kg**-1) +134 134 - Surface pressure anomaly (Pa) +135 135 - Vertical velocity (pressure) anomaly (Pa s**-1) +136 136 - Total column water anomaly (kg m**-2) +137 137 - Total column water vapour anomaly (kg m**-2) +138 138 - Relative vorticity anomaly (s**-1) +139 139 - Soil temperature anomaly level 1 (K) +140 140 - Soil wetness anomaly level 1 (m of water) +141 141 - Snow depth anomaly m of water equivalent +142 142 - Stratiform precipitation (Large-scale precipitation) anomaly (m) +143 143 - Convective precipitation anomaly (m) +144 144 - Snowfall (convective + stratiform) anomaly m of water equivalent +145 145 - Boundary layer dissipation anomaly (W m**-2 s) +146 146 - Surface sensible heat flux anomaly (W m**-2 s) +147 147 - Surface latent heat flux anomaly (W m**-2 s) +148 148 - Charnock anomaly +149 149 - Surface net radiation anomaly (W m**-2 s) +150 150 - Top net radiation anomaly +151 151 - Mean sea level pressure anomaly (Pa) +152 152 - Logarithm of surface pressure anomaly +153 153 - Short-wave heating rate anomaly (K) +154 154 - Long-wave heating rate anomaly (K) +155 155 - Relative divergence anomaly (s**-1) +156 156 - Height anomaly (m) +157 157 - Relative humidity anomaly (%) +158 158 - Tendency of surface pressure anomaly (Pa s**-1) +159 159 - Boundary layer height anomaly (m) +160 160 - Standard deviation of orography anomaly +161 161 - Anisotropy of sub-gridscale orography anomaly +162 162 - Angle of sub-gridscale orography anomaly +163 163 - Slope of sub-gridscale orography anomaly +164 164 - Total cloud cover anomaly (0 - 1) +165 165 - 10 metre U wind component anomaly (m s**-1) +166 166 - 10 metre V wind component anomaly (m s**-1) +167 167 - 2 metre temperature anomaly (K) +168 168 - 2 metre dewpoint temperature anomaly (K) +169 169 - Surface solar radiation downwards anomaly (W m**-2 s) +170 170 - Soil temperature anomaly level 2 (K) +171 171 - Soil wetness anomaly level 2 m of water +172 172 - Land-sea mask (0 - 1) +173 173 - Surface roughness anomaly (m) +174 174 - Albedo anomaly (0 - 1) +175 175 - Surface thermal radiation downwards anomaly (W m**-2 s) +176 176 - Surface solar radiation anomaly (W m**-2 s) +177 177 - Surface thermal radiation anomaly (W m**-2 s) +178 178 - Top solar radiation anomaly (W m**-2 s) +179 179 - Top thermal radiation anomaly (W m**-2 s) +180 180 - East-West surface stress anomaly (N m**-2 s) +181 181 - North-South surface stress anomaly (N m**-2 s) +182 182 - Evaporation anomaly (m of water anomaly) +183 183 - Soil temperature anomaly level 3 (K) +184 184 - Soil wetness anomaly level 3 m of water +185 185 - Convective cloud cover anomaly (0 - 1) +186 186 - Low cloud cover anomaly (0 - 1) +187 187 - Medium cloud cover anomaly (0 - 1) +188 188 - High cloud cover anomaly (0 - 1) +189 189 - Sunshine duration anomaly (s) +190 190 - East-West component of sub-gridscale orographic variance anomaly (m**2) +191 191 - North-South component of sub-gridscale orographic variance anomaly (m**2) +192 192 - North-West/South-East component of sub-gridscale orographic variance anomaly (m**2) +193 193 - North-East/South-West component of sub-gridscale orographic variance anomaly (m**2) +194 194 - Brightness temperature anomaly (K) +195 195 - Longitudinal component of gravity wave stress anomaly (N m**-2 s) +196 196 - Meridional component of gravity wave stress anomaly (N m**-2 s) +197 197 - Gravity wave dissipation anomaly (W m**-2 s) +198 198 - Skin reservoir content anomaly (m of water) +199 199 - Vegetation fraction anomaly (0 - 1) +200 200 - Variance of sub-gridscale orography anomaly (m**2) +201 201 - Maximum temperature at 2 metres anomaly (K) +202 202 - Minimum temperature at 2 metres anomaly (K) +203 203 - Ozone mass mixing ratio (kg kg**-1) +204 204 - Precipitation analysis weights +205 205 - Runoff (m) +206 206 - Total column ozone (kg m**-2) +207 207 - 10 metre wind speed (m s**-1) +208 208 - Top net solar radiation, clear sky (W m**-2 s) +209 209 - Top net thermal radiation, clear sky (W m**-2 s) +210 210 - Surface net solar radiation, clear sky (W m**-2 s) +211 211 - Surface net thermal radiation, clear sky (W m**-2 s) +212 212 - Solar insolation (W m**-2) +214 214 - Diabatic heating by radiation (K) +215 215 - Diabatic heating by vertical diffusion (K) +216 216 - Diabatic heating by cumulus convection (K) +217 217 - Diabatic heating by large-scale condensation (K) +218 218 - Vertical diffusion of zonal wind (m s**-1) +219 219 - Vertical diffusion of meridional wind (m s**-1) +220 220 - East-West gravity wave drag tendency (m s**-1) +221 221 - North-South gravity wave drag tendency (m s**-1) +222 222 - Convective tendency of zonal wind (m s**-1) +223 223 - Convective tendency of meridional wind (m s**-1) +224 224 - Vertical diffusion of humidity anomaly (kg kg**-1) +225 225 - Humidity tendency by cumulus convection anomaly (kg kg**-1) +226 226 - Humidity tendency by large-scale condensation anomaly (kg kg**-1) +227 227 - Change from removal of negative humidity anomaly (kg kg**-1) +228 228 - Total precipitation anomaly (m) +229 229 - Instantaneous X surface stress anomaly (N m**-2) +230 230 - Instantaneous Y surface stress anomaly (N m**-2) +231 231 - Instantaneous surface heat flux anomaly (W m**-2) +232 232 - Instantaneous moisture flux anomaly (kg m**-2 s) +233 233 - Apparent surface humidity anomaly (kg kg**-1) +234 234 - Logarithm of surface roughness length for heat anomaly +235 235 - Skin temperature anomaly (K) +236 236 - Soil temperature level 4 anomaly (K) +237 237 - Soil wetness level 4 anomaly (m) +238 238 - Temperature of snow layer anomaly (K) +239 239 - Convective snowfall anomaly (m of water equivalent) +240 240 - Large scale snowfall anomaly (m of water equivalent) +241 241 - Accumulated cloud fraction tendency anomaly (-1 to 1) +242 242 - Accumulated liquid water tendency anomaly (-1 to 1) +243 243 - Forecast albedo anomaly (0 - 1) +244 244 - Forecast surface roughness anomaly (m) +245 245 - Forecast logarithm of surface roughness for heat anomaly +246 246 - Cloud liquid water content anomaly (kg kg**-1) +247 247 - Cloud ice water content anomaly (kg kg**-1) +248 248 - Cloud cover anomaly (0 - 1) +249 249 - Accumulated ice water tendency anomaly (-1 to 1) +250 250 - Ice age anomaly (0 - 1) +251 251 - Adiabatic tendency of temperature anomaly (K) +252 252 - Adiabatic tendency of humidity anomaly (kg kg**-1) +253 253 - Adiabatic tendency of zonal wind anomaly (m s**-1) +254 254 - Adiabatic tendency of meridional wind anomaly (m s**-1) +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.172.table b/definitions/grib1/2.98.172.table new file mode 100644 index 000000000..7716d3c2d --- /dev/null +++ b/definitions/grib1/2.98.172.table @@ -0,0 +1,37 @@ +# This file was automatically generated by ./param.pl +44 44 - Snow evaporation m of water (s**-1) +45 45 - Snowmelt m of water (s**-1) +48 48 - Magnitude of surface stress (N m**-2) +50 50 - Large-scale precipitation fraction +142 142 - Stratiform precipitation (Large-scale precipitation) (m s**-1) +143 143 - Convective precipitation (m s**-1) +144 144 - Snowfall (convective + stratiform) (m of water equivalent s**-1) +145 145 - Boundary layer dissipation (W m**-2) +146 146 - Surface sensible heat flux (W m**-2) +147 147 - Surface latent heat flux 9W m**-2) +149 149 - Surface net radiation (W m**-2) +153 153 - Short-wave heating rate (K s**-1) +154 154 - Long-wave heating rate (K s**-1) +169 169 - Surface solar radiation downwards (W m**-2) +175 175 - Surface thermal radiation downwards (W m**-2) +176 176 - Surface solar radiation (W m**-2) +177 177 - Surface thermal radiation (W m**-2) +178 178 - Top solar radiation (W m**-2) +179 179 - Top thermal radiation (W m**-2) +180 180 - East-West surface stress (N m**-2) +181 181 - North-South surface stress (N m**-2) +182 182 - Evaporation m of water (s**-1) +189 189 - Sunshine duration +195 195 - Longitudinal component of gravity wave stress (N m**-2) +196 196 - Meridional component of gravity wave stress (N m**-2) +197 197 - Gravity wave dissipation (W m**-2) +205 205 - Runoff (m s**-1) +208 208 - Top net solar radiation, clear sky (W m**-2) +209 209 - Top net thermal radiation, clear sky (W m**-2) +210 210 - Surface net solar radiation, clear sky (W m**-2) +211 211 - Surface net thermal radiation, clear sky (W m**-2) +212 212 - Solar insolation (W m**-2 s**-1) +228 228 - Total precipitation (m s**-1) +239 239 - Convective snowfall m of water equivalent (s**-1) +240 240 - Large scale snowfall m of water equivalent (s**-1) +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.173.table b/definitions/grib1/2.98.173.table new file mode 100644 index 000000000..b1e658169 --- /dev/null +++ b/definitions/grib1/2.98.173.table @@ -0,0 +1,37 @@ +# This file was automatically generated by ./param.pl +44 44 - Snow evaporation anomaly m of water (s**-1) +45 45 - Snowmelt anomaly m of water (s**-1) +48 48 - Magnitude of surface stress anomaly (N m**-2) +50 50 - Large-scale precipitation fraction anomaly +142 142 - Stratiform precipitation (Large-scale precipitation) anomaly (m s**-1) +143 143 - Convective precipitation anomaly (m s**-1) +144 144 - Snowfall (convective + stratiform) anomalous rate of accumulation (m of water equivalent s**-1) +145 145 - Boundary layer dissipation anomaly (W m**-2) +146 146 - Surface sensible heat flux anomaly (W m**-2) +147 147 - Surface latent heat flux anomaly (W m**-2) +149 149 - Surface net radiation anomaly (W m**-2) +153 153 - Short-wave heating rate anomaly (K s**-1) +154 154 - Long-wave heating rate anomaly (K s**-1) +169 169 - Surface solar radiation downwards anomaly (W m**-2) +175 175 - Surface thermal radiation downwards anomaly (W m**-2) +176 176 - Surface solar radiation anomaly (W m**-2) +177 177 - Surface thermal radiation anomaly (W m**-2) +178 178 - Top solar radiation anomaly (W m**-2) +179 179 - Top thermal radiation anomaly (W m**-2) +180 180 - East-West surface stress anomaly (N m**-2) +181 181 - North-South surface stress anomaly (N m**-2) +182 182 - Evaporation anomaly (m of water s**-1) +189 189 - Sunshine duration anomalous rate of accumulation +195 195 - Longitudinal component of gravity wave stress anomaly (N m**-2) +196 196 - Meridional component of gravity wave stress anomaly (N m**-2) +197 197 - Gravity wave dissipation anomaly (W m**-2) +205 205 - Runoff anomaly (m s**-1) +208 208 - Top net solar radiation, clear sky anomaly (W m**-2) +209 209 - Top net thermal radiation, clear sky anomaly (W m**-2) +210 210 - Surface net solar radiation, clear sky anomaly (W m**-2) +211 211 - Surface net thermal radiation, clear sky anomaly (W m**-2) +212 212 - Solar insolation anomaly (W m**-2 s**-1) +228 228 - Total precipitation anomalous rate of accumulation (m s**-1) +239 239 - Convective snowfall anomaly (m of water equivalent s**-1) +240 240 - Large scale snowfall anomaly (m of water equivalent s**-1) +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.174.table b/definitions/grib1/2.98.174.table new file mode 100644 index 000000000..f74b19ec7 --- /dev/null +++ b/definitions/grib1/2.98.174.table @@ -0,0 +1,53 @@ +# This file was automatically generated by ./param.pl +6 6 - Total soil moisture (m) +8 8 SRO Surface runoff (kg m**-2) +9 9 SSRO Sub-surface runoff (kg m**-2) +10 10 - Clear-sky II down surface sw flux +13 13 - Clear-sky II up surface sw flux +25 25 - Visibility at 1.5m +31 31 - Fraction of sea-ice in sea (0 - 1) +34 34 - Open-sea surface temperature (K) +39 39 - Volumetric soil water layer 1 (m**3 m**-3) +40 40 - Volumetric soil water layer 2 (m**3 m**-3) +41 41 - Volumetric soil water layer 3 (m**3 m**-3) +42 42 - Volumetric soil water layer 4 (m**3 m**-3) +49 49 - 10 metre wind gust in the last 24 hours (m s**-1) +50 50 - Minimum temperature at 1.5m since previous post-processing (K) +51 51 - Maximum temperature at 1.5m since previous post-processing (K) +52 52 - Relative humidity at 1.5m +55 55 - 1.5m temperature - mean in the last 24 hours (K) +83 83 - Net primary productivity (kg C m**-2 s**-1) +85 85 - 10m U wind over land (m s**-1) +86 86 - 10m V wind over land (m s**-1) +87 87 - 1.5m temperature over land (K) +88 88 - 1.5m dewpoint temperature over land (K) +89 89 - Top incoming solar radiation (W m**-2 s) +90 90 - Top outgoing solar radiation (W m**-2 s) +94 94 - Mean sea surface temperature (K) +95 95 - 1.5m specific humidity (kg kg**-1) +98 98 - Sea-ice thickness (m) +99 99 - Liquid water potential temperature (K) +110 110 - Ocean ice concentration (0 - 1) +111 111 - Ocean mean ice depth (m) +116 116 - Short wave radiation flux at surface (J m**-2) +117 117 - Short wave radiation flux at top of atmosphere (J m**-2) +137 137 - Total column water vapour (kg m**-2) +139 139 - Soil temperature layer 1 (K) +142 142 - Large scale rainfall rate +143 143 - Convective rainfall rate +164 164 - Average potential temperature in upper 293.4m (degrees C) +167 167 - 1.5m temperature (K) +168 168 - 1.5m dewpoint temperature (K) +170 170 - Soil temperature layer 2 (K) +172 172 - Fractional land mask (0 - 1) +175 175 - Average salinity in upper 293.4m psu +183 183 - Soil temperature layer 3 (K) +186 186 - Very low cloud amount +201 201 - 1.5m temperature - maximum in the last 24 hours (K) +202 202 - 1.5m temperature - minimum in the last 24 hours (K) +236 236 - Soil temperature layer 4 (K) +239 239 - Convective snowfall rate +240 240 - Large scale snowfall rate +248 248 - Total cloud amount - random overlap +249 249 - Total cloud amount in lw radiation +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.175.table b/definitions/grib1/2.98.175.table new file mode 100644 index 000000000..7d2a1b373 --- /dev/null +++ b/definitions/grib1/2.98.175.table @@ -0,0 +1,31 @@ +# This file was automatically generated by ./param.pl +6 6 - Total soil moisture (m) +31 31 - Fraction of sea-ice in sea (0 - 1) +34 34 - Open-sea surface temperature (K) +39 39 - Volumetric soil water layer 1 (m**3 m**-3) +40 40 - Volumetric soil water layer 2 (m**3 m**-3) +41 41 - Volumetric soil water layer 3 (m**3 m**-3) +42 42 - Volumetric soil water layer 4 (m**3 m**-3) +49 49 - 10m wind gust in the last 24 hours (m s**-1) +55 55 - 1.5m temperature - mean in the last 24 hours (K) +83 83 - Net primary productivity (kg C m**-2 s**-1) +85 85 - 10m U wind over land (m s**-1) +86 86 - 10m V wind over land (m s**-1) +87 87 - 1.5m temperature over land (K) +88 88 - 1.5m dewpoint temperature over land (K) +89 89 - Top incoming solar radiation (W m**-2 s) +90 90 - Top outgoing solar radiation (W m**-2 s) +110 110 - Ocean ice concentration (0 - 1) +111 111 - Ocean mean ice depth (m) +139 139 - Soil temperature layer 1 (K) +164 164 - Average potential temperature in upper 293.4m degrees C +167 167 - 1.5m temperature (K) +168 168 - 1.5m dewpoint temperature (K) +170 170 - Soil temperature layer 2 (K) +172 172 - Fractional land mask (0 - 1) +175 175 - Average salinity in upper 293.4m psu +183 183 - Soil temperature layer 3 (K) +201 201 - 1.5m temperature - maximum in the last 24 hours (K) +202 202 - 1.5m temperature - minimum in the last 24 hours (K) +236 236 - Soil temperature layer 4 (K) +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.180.table b/definitions/grib1/2.98.180.table new file mode 100644 index 000000000..50cbbad6a --- /dev/null +++ b/definitions/grib1/2.98.180.table @@ -0,0 +1,33 @@ +# This file was automatically generated by ./param.pl +129 129 Z Geopotential m**2 s**-2 +130 130 T Temperature K +131 131 U U velocity m s**-1 +132 132 V V velocity m s**-1 +133 133 Q Specific humidity kg kg**-1 +134 134 SP Surface pressure Pa +137 137 TCWV Total column water vapour kg m**-2 +138 138 VO Vorticity (relative) s**-1 +141 141 SD Snow depth m of water equivalent +142 142 LSP Large-scale precipitation m +143 143 CP Convective precipitation m +144 144 SF Snowfall m of water equivalent +146 146 SSHF Surface sensible heat flux W m**-2 s +147 147 SLHF Surface latent heat flux W m**-2 s +149 149 TSW Total soil wetness m +151 151 MSL Mean sea level pressure Pa +155 155 D Divergence s**-1 +164 164 TCC Total cloud cover (0 - 1) +165 165 10U 10 metre U wind component m s**-1 +166 166 10V 10 metre V wind component m s**-1 +167 167 2T 2 metre temperature K +168 168 2D 2 metre dewpoint temperature K +172 172 LSM Land-sea mask (0 - 1) +176 176 SSR Surface solar radiation J m**-2 s +177 177 STR Surface thermal radiation J m**-2 s +178 178 TSR Top solar radiation J m**-2 s +179 179 TTR Top thermal radiation J m**-2 s +180 180 EWSS East-West surface stress N m**-2 s +181 181 NSSS North-South surface stress N m**-2 s +182 182 E Evaporation m of water +205 205 RO Runoff m +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.190.table b/definitions/grib1/2.98.190.table new file mode 100644 index 000000000..66acd840a --- /dev/null +++ b/definitions/grib1/2.98.190.table @@ -0,0 +1,33 @@ +# This file was automatically generated by ./param.pl +129 129 Z Geopotential m**2 s**-2 +130 130 T Temperature K +131 131 U U velocity m s**-1 +132 132 V V velocity m s**-1 +133 133 Q Specific humidity kg kg**-1 +139 139 STL1 Soil temperature level 1 K +141 141 SD Snow depth m of water +146 146 SSHF Surface sensible heat flux W m**-2 s +147 147 SLHF Surface latent heat flux W m**-2 s +151 151 MSL Mean sea level pressure Pa +164 164 TCC Total cloud cover (0 - 1) +165 165 10U 10 metre U wind component m s**-1 +166 166 10V 10 metre V wind component m s**-1 +167 167 2T 2 metre temperature K +168 168 2D 2 metre dewpoint temperature K +169 169 SSRD Downward surface solar radiation W m**-2 s (W m**-2 for monthly means) +170 170 CAP Field capacity ? +171 171 WILT Wilting points ? +172 172 LSM Land-sea mask (0 - 1) +173 173 SR Roughness length (0 - 1) +174 174 AL Albedo (0 - 1) +175 175 STRD Downward surface long wave radiation W m**-2 s (W m**-2 for monthly means) +176 176 SSR Surface net solar radiation W m**-2 s (W m**-2 for monthly means) +177 177 STR Surface net long wave radiation W m**-2 s (W m**-2 for monthly means) +178 178 TSR Top net solar radiation W m**-2 s (W m**-2 for monthly means) +179 179 TTR Top net long wave radiation W m**-2 s (W m**-2 for monthly means) +182 182 E Evaporation m (m s**-1 for monthly means) +201 201 MX2T Maximum 2 metre temperature K +202 202 MN2T Minimum 2 metre temperature K +228 228 TP Total precipitation m (m s**-1 for monthly means) +229 229 TSM Total soil moisture m**3 m**-3 +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.200.table b/definitions/grib1/2.98.200.table new file mode 100644 index 000000000..591a5ffe1 --- /dev/null +++ b/definitions/grib1/2.98.200.table @@ -0,0 +1,237 @@ +# This file was automatically generated by ./param.pl +1 1 STRF Stream function m**2 s**-1 +2 2 VPOT Velocity potential m**2 s**-1 +3 3 PT Potential temperature K +4 4 EQPT Equivalent potential temperature K +5 5 SEPT Saturated equivalent potential temperature K +11 11 UDVW U component of divergent wind m s**-1 +12 12 VDVW V component of divergent wind m s**-1 +13 13 URTW U component of rotational wind m s**-1 +14 14 VRTW V component of rotational wind m s**-1 +21 21 UCTP Unbalanced component of temperature K +22 22 UCLN Unbalanced component of logarithm of surface pressure +23 23 UCDV Unbalanced component of divergence s**-1 +24 24 - Reserved for future unbalanced components +25 25 - Reserved for future unbalanced components +26 26 CL Lake cover (0 - 1) +27 27 CVL Low vegetation cover (0 - 1) +28 28 CVH High vegetation cover (0 - 1) +29 29 TVL Type of low vegetation +30 30 TVH Type of high vegetation +31 31 CI Sea-ice cover (0 - 1) +32 32 ASN Snow albedo (0 - 1) +33 33 RSN Snow density kg m**-3 +34 34 SSTK Sea surface temperature K +35 35 ISTL1 Ice surface temperature layer 1 K +36 36 ISTL2 Ice surface temperature layer 2 K +37 37 ISTL3 Ice surface temperature layer 3 K +38 38 ISTL4 Ice surface temperature layer 4 K +39 39 SWVL1 Volumetric soil water layer 1 m**3 m**-3 +40 40 SWVL2 Volumetric soil water layer 2 m**3 m**-3 +41 41 SWVL3 Volumetric soil water layer 3 m**3 m**-3 +42 42 SWVL4 Volumetric soil water layer 4 m**3 m**-3 +43 43 SLT Soil type +44 44 ES Snow evaporation m of water +45 45 SMLT Snowmelt m of water +46 46 SDUR Solar duration s +47 47 DSRP Direct solar radiation w m**-2 +48 48 MAGSS Magnitude of surface stress N m**-2 s +49 49 10FG 10 metre wind gust m s**-1 +50 50 LSPF Large-scale precipitation fraction s +51 51 MX2T24 Maximum 2 metre temperature K +52 52 MN2T24 Minimum 2 metre temperature K +53 53 MONT Montgomery potential m**2 s**-2 +54 54 PRES Pressure Pa +55 55 MEAN2T24 Mean 2 metre temperature in past 24 hours K +56 56 MN2D24 Mean 2 metre dewpoint temperature in past 24 hours K +57 57 UVB Downward UV radiation at the surface w m**-2 s +58 58 PAR Photosynthetically active radiation at the surface w m**-2 s +59 59 CAPE Convective available potential energy J kg**-1 +60 60 PV Potential vorticity K m**2 kg**-1 s**-1 +61 61 TPO Total precipitation from observations Millimetres*100 + number of stations +62 62 OBCT Observation count +63 63 - Start time for skin temperature difference s +64 64 - Finish time for skin temperature difference s +65 65 - Skin temperature difference K +66 66 - Leaf area index, low vegetation m**2 / m**2 +67 67 - Leaf area index, high vegetation m**2 / m**2 +68 68 - Minimum stomatal resistance, low vegetation s m**-1 +69 69 - Minimum stomatal resistance, high vegetation s m**-1 +70 70 - Biome cover, low vegetation (0 - 1) +71 71 - Biome cover, high vegetation (0 - 1) +78 78 - Total column liquid water kg m**-2 +79 79 - Total column ice water kg m**-2 +80 80 - Experimental product +81 81 - Experimental product +82 82 - Experimental product +83 83 - Experimental product +84 84 - Experimental product +85 85 - Experimental product +86 86 - Experimental product +87 87 - Experimental product +88 88 - Experimental product +89 89 - Experimental product +90 90 - Experimental product +91 91 - Experimental product +92 92 - Experimental product +93 93 - Experimental product +94 94 - Experimental product +95 95 - Experimental product +96 96 - Experimental product +97 97 - Experimental product +98 98 - Experimental product +99 99 - Experimental product +100 100 - Experimental product +101 101 - Experimental product +102 102 - Experimental product +103 103 - Experimental product +104 104 - Experimental product +105 105 - Experimental product +106 106 - Experimental product +107 107 - Experimental product +108 108 - Experimental product +109 109 - Experimental product +110 110 - Experimental product +111 111 - Experimental product +112 112 - Experimental product +113 113 - Experimental product +114 114 - Experimental product +115 115 - Experimental product +116 116 - Experimental product +117 117 - Experimental product +118 118 - Experimental product +119 119 - Experimental product +120 120 - Experimental product +121 121 MX2T6 Maximum temperature at 2 metres K +122 122 MN2T6 Minimum temperature at 2 metres K +123 123 10FG6 10 metre wind gust in the past 6 hours m s**-1 +125 125 - Vertically integrated total energy J m**-2 +126 126 - Generic parameter for sensitive area prediction Various +127 127 AT Atmospheric tide +128 128 BV Budget values +129 129 Z Geopotential m**2 s**-2 +130 130 T Temperature K +131 131 U U velocity m s**-1 +132 132 V V velocity m s**-1 +133 133 Q Specific humidity kg kg**-1 +134 134 SP Surface pressure Pa +135 135 W Vertical velocity Pa s**-1 +136 136 TCW Total column water kg m**-2 +137 137 TCWV Total column water vapour kg m**-2 +138 138 VO Vorticity (relative) s**-1 +139 139 STL1 Soil temperature level 1 K +140 140 SWL1 Soil wetness level 1 m of water +141 141 SD Snow depth m of water equivalent +142 142 LSP Stratiform precipitation (Large-scale precipitation) m +143 143 CP Convective precipitation m +144 144 SF Snowfall (convective + stratiform) m of water equivalent +145 145 BLD Boundary layer dissipation W m**-2 s +146 146 SSHF Surface sensible heat flux W m**-2 s +147 147 SLHF Surface latent heat flux W m**-2 s +148 148 CHNK Charnock +149 149 SNR Surface net radiation W m**-2 s +150 150 TNR Top net radiation +151 151 MSL Mean sea level pressure Pa +152 152 LNSP Logarithm of surface pressure +153 153 SWHR Short-wave heating rate K +154 154 LWHR Long-wave heating rate K +155 155 D Divergence s**-1 +156 156 GH Height m +157 157 R Relative humidity % +158 158 TSP Tendency of surface pressure Pa s**-1 +159 159 BLH Boundary layer height m +160 160 SDOR Standard deviation of orography +161 161 ISOR Anisotropy of sub-gridscale orography +162 162 ANOR Angle of sub-gridscale orography rad +163 163 SLOR Slope of sub-gridscale orography +164 164 TCC Total cloud cover (0 - 1) +165 165 10U 10 metre U wind component m s**-1 +166 166 10V 10 metre V wind component m s**-1 +167 167 2T 2 metre temperature K +168 168 2D 2 metre dewpoint temperature K +169 169 SSRD Surface solar radiation downwards W m**-2 s +170 170 STL2 Soil temperature level 2 K +171 171 SWL2 Soil wetness level 2 m of water +172 172 LSM Land-sea mask (0 - 1) +173 173 SR Surface roughness m +174 174 AL Albedo (0 - 1) +175 175 STRD Surface thermal radiation downwards W m**-2 s +176 176 SSR Surface solar radiation W m**-2 s +177 177 STR Surface thermal radiation W m**-2 s +178 178 TSR Top solar radiation W m**-2 s +179 179 TTR Top thermal radiation W m**-2 s +180 180 EWSS East-West surface stress N m**-2 s +181 181 NSSS North-South surface stress N m**-2 s +182 182 E Evaporation m of water +183 183 STL3 Soil temperature level 3 K +184 184 SWL3 Soil wetness level 3 m of water +185 185 CCC Convective cloud cover (0 - 1) +186 186 LCC Low cloud cover (0 - 1) +187 187 MCC Medium cloud cover (0 - 1) +188 188 HCC High cloud cover (0 - 1) +189 189 SUND Sunshine duration s +190 190 EWOV East-West component of sub-gridscale orographic variance m**2 +191 191 NSOV North-South component of sub-gridscale orographic variance m**2 +192 192 NWOV North-West/South-East component of sub-gridscale orographic variance m**2 +193 193 NEOV North-East/South-West component of sub-gridscale orographic variance m**2 +194 194 BTMP Brightness temperature K +195 195 LGWS Latitudinal component of gravity wave stress N m**-2 s +196 196 MGWS Meridional component of gravity wave stress N m**-2 s +197 197 GWD Gravity wave dissipation W m**-2 s +198 198 SRC Skin reservoir content m of water +199 199 VEG Vegetation fraction (0 - 1) +200 200 VSO Variance of sub-gridscale orography m**2 +201 201 MX2T Maximum temperature at 2 metres since previous post-processing K +202 202 MN2T Minimum temperature at 2 metres since previous post-processing K +203 203 O3 Ozone mass mixing ratio kg kg**-1 +204 204 PAW Precipitation analysis weights +205 205 RO Runoff m +206 206 TCO3 Total column ozone kg m**-2 +207 207 10SI 10 metre wind speed m s**-1 +208 208 TSRC Top net solar radiation, clear sky W m**-2 s +209 209 TTRC Top net thermal radiation, clear sky W m**-2 s +210 210 SSRC Surface net solar radiation, clear sky W m**-2 s +211 211 STRC Surface net thermal radiation, clear sky W m**-2 s +212 212 TISR TOA incident solar radiation W m**-2 s +214 214 DHR Diabatic heating by radiation K +215 215 DHVD Diabatic heating by vertical diffusion K +216 216 DHCC Diabatic heating by cumulus convection K +217 217 DHLC Diabatic heating large-scale condensation K +218 218 VDZW Vertical diffusion of zonal wind m s**-1 +219 219 VDMW Vertical diffusion of meridional wind m s**-1 +220 220 EWGD East-West gravity wave drag tendency m s**-1 +221 221 NSGD North-South gravity wave drag tendency m s**-1 +222 222 CTZW Convective tendency of zonal wind m s**-1 +223 223 CTMW Convective tendency of meridional wind m s**-1 +224 224 VDH Vertical diffusion of humidity kg kg**-1 +225 225 HTCC Humidity tendency by cumulus convection kg kg**-1 +226 226 HTLC Humidity tendency by large-scale condensation kg kg**-1 +227 227 CRNH Change from removal of negative humidity kg kg**-1 +228 228 TP Total precipitation m +229 229 IEWS Instantaneous X surface stress N m**-2 +230 230 INSS Instantaneous Y surface stress N m**-2 +231 231 ISHF Instantaneous surface heat flux W m**-2 +232 232 IE Instantaneous moisture flux kg m**-2 s +233 233 ASQ Apparent surface humidity kg kg**-1 +234 234 LSRH Logarithm of surface roughness length for heat +235 235 SKT Skin temperature K +236 236 STL4 Soil temperature level 4 K +237 237 SWL4 Soil wetness level 4 m +238 238 TSN Temperature of snow layer K +239 239 CSF Convective snowfall m of water equivalent +240 240 LSF Large-scale snowfall m of water equivalent +241 241 ACF Accumulated cloud fraction tendency (-1 to 1) +242 242 ALW Accumulated liquid water tendency (-1 to 1) +243 243 FAL Forecast albedo (0 - 1) +244 244 FSR Forecast surface roughness m +245 245 FLSR Forecast logarithm of surface roughness for heat +246 246 CLWC Cloud liquid water content kg kg**-1 +247 247 CIWC Cloud ice water content kg kg**-1 +248 248 CC Cloud cover (0 - 1) +249 249 AIW Accumulated ice water tendency (-1 to 1) +250 250 ICE Ice age (0 - 1) +251 251 ATTE Adiabatic tendency of temperature K +252 252 ATHE Adiabatic tendency of humidity kg kg**-1 +253 253 ATZE Adiabatic tendency of zonal wind m s**-1 +254 254 ATMW Adiabatic tendency of meridional wind m s**-1 +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.201.table b/definitions/grib1/2.98.201.table new file mode 100644 index 000000000..0117fff8d --- /dev/null +++ b/definitions/grib1/2.98.201.table @@ -0,0 +1,78 @@ +# This file was automatically generated by ./param.pl +1 1 - downward shortwave radiant flux density W m**-2 +2 2 - upward shortwave radiant flux density W m**-2 +3 3 - downward longwave radiant flux density W m**-2 +4 4 - upward longwave radiant flux density W m**-2 +5 5 APAB_S downwd photosynthetic active radiant flux density W m**-2 +6 6 - net shortwave flux W m**-2 +7 7 - net longwave flux W m**-2 +8 8 - total net radiative flux density W m**-2 +9 9 - downw shortw radiant flux density, cloudfree part W m**-2 +10 10 - upw shortw radiant flux density, cloudy part W m**-2 +11 11 - downw longw radiant flux density, cloudfree part W m**-2 +12 12 - upw longw radiant flux density, cloudy part W m**-2 +13 13 SOHR_RAD shortwave radiative heating rate K s**-1 +14 14 THHR_RAD longwave radiative heating rate K s**-1 +15 15 - total radiative heating rate W m**-2 +16 16 - soil heat flux, surface W m**-2 +17 17 - soil heat flux, bottom of layer W m**-2 +29 29 CLC fractional cloud cover (0-1) +30 30 - cloud cover, grid scale (0-1) +31 31 QC specific cloud water content kg kg**-1 +32 32 - cloud water content, grid scale, vert integrated kg m**-2 +33 33 QI specific cloud ice content, grid scale kg kg**-1 +34 34 - cloud ice content, grid scale, vert integrated kg m**-2 +35 35 - specific rainwater content, grid scale kg kg**-1 +36 36 - specific snow content, grid scale kg kg**-1 +37 37 - specific rainwater content, gs, vert. integrated kg m**-2 +38 38 - specific snow content, gs, vert. integrated kg m**-2 +41 41 TWATER total column water kg m**-2 +42 42 - vert. integral of divergence of tot. water content kg m**-2 +50 50 CH_CM_CL cloud covers CH_CM_CL (000...888) (0-1) +51 51 - cloud cover CH (0..8) (0-1) +52 52 - cloud cover CM (0..8) (0-1) +53 53 - cloud cover CL (0..8) (0-1) +54 54 - total cloud cover (0..8) (0-1) +55 55 - fog (0..8) (0-1) +56 56 - fog (0-1) +60 60 - cloud cover, convective cirrus (0-1) +61 61 - specific cloud water content, convective clouds kg kg**-1 +62 62 - cloud water content, conv clouds, vert integrated kg m**-2 +63 63 - specific cloud ice content, convective clouds kg kg**-1 +64 64 - cloud ice content, conv clouds, vert integrated kg m**-2 +65 65 - convective mass flux kg s**-1 m**-2 +66 66 - updraft velocity, convection m s**-1 +67 67 - entrainment parameter, convection m**-1 +68 68 HBAS_CON cloud base, convective clouds (above msl) m +69 69 HTOP_CON cloud top, convective clouds (above msl) m +70 70 - convective layers (00...77) (BKE) (0-1) +71 71 - KO-index (1) +72 72 BAS_CON convection base index (1) +73 73 TOP_CON convection top index (1) +74 74 DT_CON convective temperature tendency K s**-1 +75 75 DQV_CON convective tendency of specific humidity s**-1 +76 76 - convective tendency of total heat J kg**-1 s**-1 +77 77 - convective tendency of total water s**-1 +78 78 DU_CON convective momentum tendency (X-component) m s**-2 +79 79 DV_CON convective momentum tendency (Y-component) m s**-2 +80 80 - convective vorticity tendency s**-2 +81 81 - convective divergence tendency s**-2 +82 82 HTOP_DC top of dry convection (above msl) m +83 83 - dry convection top index (1) +84 84 HZEROCL height of 0 degree Celsius isotherm above msl m +85 85 SNOWLMT height of snow-fall limit m +99 99 QRS_GSP spec. content of precip. particles kg kg**-1 +100 100 PRR_GSP surface precipitation rate, rain, grid scale kg s**-1 m**-2 +101 101 PRS_GSP surface precipitation rate, snow, grid scale kg s**-1 m**-2 +102 102 RAIN_GSP surface precipitation amount, rain, grid scale kg m**-2 +111 111 PRR_CON surface precipitation rate, rain, convective kg s**-1 m**-2 +112 112 PRS_CON surface precipitation rate, snow, convective kg s**-1 m**-2 +113 113 RAIN_CON surface precipitation amount, rain, convective kg m**-2 +139 139 PP deviation of pressure from reference value Pa +150 150 - coefficient of horizontal diffusion m**2 s**-1 +187 187 VMAX_10M maximum wind velocity m s**-1 +200 200 W_I water content of interception store kg m**-2 +203 203 T_SNOW snow temperature K +215 215 T_ICE ice surface temperature K +241 241 CAPE_CON convective available potential energy J kg**-1 +255 255 - Indicates a missing value diff --git a/definitions/grib1/2.98.210.table b/definitions/grib1/2.98.210.table new file mode 100644 index 000000000..383f91385 --- /dev/null +++ b/definitions/grib1/2.98.210.table @@ -0,0 +1,101 @@ +# This file was automatically generated by ./param.pl +1 1 AERMR01 Aerosol type 1 mixing ratio kg kg**-1 +2 2 AERMR02 Aerosol type 2 mixing ratio kg kg**-1 +3 3 AERMR03 Aerosol type 3 mixing ratio kg kg**-1 +4 4 AERMR04 Aerosol type 4 mixing ratio kg kg**-1 +5 5 AERMR05 Aerosol type 5 mixing ratio kg kg**-1 +6 6 AERMR06 Aerosol type 6 mixing ratio kg kg**-1 +7 7 AERMR07 Aerosol type 7 mixing ratio kg kg**-1 +8 8 AERMR08 Aerosol type 8 mixing ratio kg kg**-1 +9 9 AERMR09 Aerosol type 9 mixing ratio kg kg**-1 +10 10 AERMR10 Aerosol type 10 mixing ratio kg kg**-1 +11 11 AERMR11 Aerosol type 11 mixing ratio kg kg**-1 +12 12 AERMR12 Aerosol type 12 mixing ratio kg kg**-1 +16 16 AERGN01 Aerosol type 1 source/gain accumulated kg m**-2 +17 17 AERGN02 Aerosol type 2 source/gain accumulated kg m**-2 +18 18 AERGN03 Aerosol type 3 source/gain accumulated kg m**-2 +19 19 AERGN04 Aerosol type 4 source/gain accumulated kg m**-2 +20 20 AERGN05 Aerosol type 5 source/gain accumulated kg m**-2 +21 21 AERGN06 Aerosol type 6 source/gain accumulated kg m**-2 +22 22 AERGN07 Aerosol type 7 source/gain accumulated kg m**-2 +23 23 AERGN08 Aerosol type 8 source/gain accumulated kg m**-2 +24 24 AERGN09 Aerosol type 9 source/gain accumulated kg m**-2 +25 25 AERGN10 Aerosol type 10 source/gain accumulated kg m**-2 +26 26 AERGN11 Aerosol type 11 source/gain accumulated kg m**-2 +27 27 AERGN12 Aerosol type 12 source/gain accumulated kg m**-2 +31 31 AERLS01 Aerosol type 1 sink/loss accumulated kg m**-2 +32 32 AERLS02 Aerosol type 2 sink/loss accumulated kg m**-2 +33 33 AERLS03 Aerosol type 3 sink/loss accumulated kg m**-2 +34 34 AERLS04 Aerosol type 4 sink/loss accumulated kg m**-2 +35 35 AERLS05 Aerosol type 5 sink/loss accumulated kg m**-2 +36 36 AERLS06 Aerosol type 6 sink/loss accumulated kg m**-2 +37 37 AERLS07 Aerosol type 7 sink/loss accumulated kg m**-2 +38 38 AERLS08 Aerosol type 8 sink/loss accumulated kg m**-2 +39 39 AERLS09 Aerosol type 9 sink/loss accumulated kg m**-2 +40 40 AERLS10 Aerosol type 10 sink/loss accumulated kg m**-2 +41 41 AERLS11 Aerosol type 11 sink/loss accumulated kg m**-2 +42 42 AERLS12 Aerosol type 12 sink/loss accumulated kg m**-2 +46 46 AERPR Aerosol precursor mixing ratio kg kg**-1 +47 47 AERSM Aerosol small mode mixing ratio kg kg**-1 +48 48 AERLG Aerosol large mode mixing ratio kg kg**-1 +49 49 AODPR Aerosol precursor optical depth dimensionless +50 50 AODSM Aerosol small mode optical depth dimensionless +51 51 AODLG Aerosol large mode optical depth dimensionless +52 52 AERDEP Dust emission potential kg s**2 m**-5 +53 53 AERLTS Lifting threshold speed m s**-1 +54 54 AERSCC Soil clay content % +61 61 CO2 Carbon Dioxide kg kg**-1 +62 62 CH4 Methane kg kg**-1 +63 63 N2O Nitrous oxide kg kg**-1 +64 64 TCCO2 Total column Carbon Dioxide kg m**-2 +65 65 TCCH4 Total column Methane kg m**-2 +66 66 TCN2O Total column Nitrous oxide kg m**-2 +67 67 CO2OF Ocean flux of Carbon Dioxide kg m**-2 s**-1 +68 68 CO2NBF Natural biosphere flux of Carbon Dioxide kg m**-2 s**-1 +69 69 CO2APF Anthropogenic emissions of Carbon Dioxide kg m**-2 s**-1 +80 80 CO2FIRE Wildfire flux of Carbon Dioxide kg m**-2 s**-1 +81 81 COFIRE Wildfire flux of Carbon Monoxide kg m**-2 s**-1 +82 82 CH4FIRE Wildfire flux of Methane kg m**-2 s**-1 +83 83 NMHCFIRE Wildfire flux of Non-Methane Hydro-Carbons kg m**-2 s**-1 +84 84 H2FIRE Wildfire flux of Hydrogen kg m**-2 s**-1 +85 85 NOXFIRE Wildfire flux of Nitrogen Oxides NOx kg m**-2 s**-1 +86 86 N2OFIRE Wildfire flux of Nitrous Oxide kg m**-2 s**-1 +87 87 PM2P5FIRE Wildfire flux of Particulate Matter PM2.5 kg m**-2 s**-1 +88 88 TPMFIRE Wildfire flux of Total Particulate Matter kg m**-2 s**-1 +89 89 TCFIRE Wildfire flux of Total Carbon in Aerosols kg m**-2 s**-1 +90 90 OCFIRE Wildfire flux of Organic Carbon kg m**-2 s**-1 +91 91 BCFIRE Wildfire flux of Black Carbon kg m**-2 s**-1 +92 92 CFIRE Wildfire overall flux of burnt Carbon kg m**-2 s**-1 +93 93 C4FFIRE Wildfire fraction of C4 plants dimensionless +94 94 VEGFIRE Wildfire vegetation map index dimensionless +95 95 CCFIRE Wildfire Combustion Completeness dimensionless +96 96 FLFIRE Wildfire Fuel Load: Carbon per unit area kg m**-2 +97 97 BFFIRE Wildfire fraction of area burnt dimensionless +121 121 NO2 Nitrogen dioxide kg kg**-1 +122 122 SO2 Sulphur dioxide kg kg**-1 +123 123 CO Carbon monoxide kg kg**-1 +124 124 HCHO Formaldehyde kg kg**-1 +125 125 TCNO2 Total column Nitrogen dioxide kg m**-2 +126 126 TCSO2 Total column Sulphur dioxide kg m**-2 +127 127 TCCO Total column Carbon monoxide kg m**-2 +128 128 TCHCHO Total column Formaldehyde kg m**-2 +181 181 Ra Radon kg kg**-1 +182 182 SF6 Sulphur Hexafluoride kg kg**-1 +183 183 TCRa Total column Radon kg m**-2 +184 184 TCSF6 Total column Sulphur Hexafluoride kg m**-2 +185 185 SF6APF Anthropogenic Emissions of Sulphur Hexafluoride kg m**-2 s**-1 +203 203 GO3 GEMS Ozone kg kg**-1 +206 206 GTCO3 GEMS Total column ozone kg m**-2 +207 207 AOD550 Total Aerosol Optical Depth at 550nm +208 208 SSAOD550 Sea Salt Aerosol Optical Depth at 550nm +209 209 DUAOD550 Dust Aerosol Optical Depth at 550nm +210 210 OMAOD550 Organic Matter Aerosol Optical Depth at 550nm +211 211 BCAOD550 Black Carbon Aerosol Optical Depth at 550nm +212 212 SUAOD550 Sulphate Aerosol Optical Depth at 550nm +213 213 AOD469 Total Aerosol Optical Depth at 469nm +214 214 AOD670 Total Aerosol Optical Depth at 670nm +215 215 AOD865 Total Aerosol Optical Depth at 865nm +216 216 AOD1240 Total Aerosol Optical Depth at 1240nm +217 217 AOD340 Total aerosol optical depth at 340 nm +218 218 AOD355 Total aerosol optical depth at 355 nm +219 219 AOD380 Total aerosol optical depth at 380 nm diff --git a/definitions/grib1/2.98.211.table b/definitions/grib1/2.98.211.table new file mode 100644 index 000000000..ed4a866ca --- /dev/null +++ b/definitions/grib1/2.98.211.table @@ -0,0 +1,15 @@ +# This file was automatically generated by ./param.pl +46 46 AERPR Aerosol precursor mixing ratio kg kg**-1 +47 47 AERSM Aerosol small mode mixing ratio kg kg**-1 +48 48 AERLG Aerosol large mode mixing ratio kg kg**-1 +49 49 AODPR Aerosol precursor optical depth dimensionless +50 50 AODSM Aerosol small mode optical depth dimensionless +51 51 AODLG Aerosol large mode optical depth dimensionless +61 61 CO2 Carbon Dioxide kg kg**-1 +62 62 CH4 Methane kg kg**-1 +63 63 N2O Nitrous oxide kg kg**-1 +121 121 NO2 Nitrogen dioxide kg kg**-1 +122 122 SO2 Sulphur dioxide kg kg**-1 +123 123 CO Carbon monoxide kg kg**-1 +124 124 HCHO Formaldehyde kg kg**-1 +203 203 GO3 GEMS Ozone kg kg**-1 diff --git a/definitions/grib1/2.98.220.table b/definitions/grib1/2.98.220.table new file mode 100644 index 000000000..c79a13ad2 --- /dev/null +++ b/definitions/grib1/2.98.220.table @@ -0,0 +1,2 @@ +# This file was automatically generated by ./param.pl +228 228 TPOC Total precipitation observation count dimensionless diff --git a/definitions/grib1/2.98.228.table b/definitions/grib1/2.98.228.table new file mode 100644 index 000000000..8119335fd --- /dev/null +++ b/definitions/grib1/2.98.228.table @@ -0,0 +1,12 @@ +# This file was automatically generated by ./param.pl +1 1 CIN Convective inhibition (J kg**-1) +2 2 OROG Orography (m) +3 3 ZUST Friction velocity (m s**-1) +39 39 SM Soil Moisture (kg m**-3) +131 131 U10N Neutral wind at 10 m u-component (m s**-1) +132 132 V10N Neutral wind at 10 m v-component (m s**-1) +139 139 ST Soil Temperature (K) +141 141 SD Snow depth water equivalent (m) +144 144 SF Snow Fall water equivalent (kg m**-2) +164 164 TCC Total Cloud Cover (%) +228 228 TP Total Precipitation (kg m**-2) diff --git a/definitions/grib1/2.98.230.table b/definitions/grib1/2.98.230.table new file mode 100644 index 000000000..a628fca69 --- /dev/null +++ b/definitions/grib1/2.98.230.table @@ -0,0 +1,32 @@ +# This file was automatically generated by ./param.pl +44 44 ESVAR Snow evaporation (variable resolution) m of water +45 45 SMLTVAR Snowmelt (variable resolution) m of water +46 46 SDURVAR Solar duration (variable resolution) (s) +57 57 UVBVAR Downward UV radiation at the surface (variable resolution) (w m**-2 s) +58 58 PARVAR Photosynthetically active radiation at the surface (variable resolution) (w m**-2 s) +142 142 LSPVAR Stratiform precipitation (Large-scale precipitation) (variable resolution) (m) +143 143 CPVAR Convective precipitation (variable resolution) (m) +144 144 SFVAR Snowfall (convective + stratiform) (variable resolution) m of water equivalent +145 145 BLDVAR Boundary layer dissipation (variable resolution) (W m**-2 s) +146 146 SSHFVAR Surface sensible heat flux (variable resolution) (W m**-2 s) +147 147 SLHFVAR Surface latent heat flux (variable resolution) (W m**-2 s) +169 169 SSRDVAR Surface solar radiation downwards (variable resolution) (W m**-2 s) +175 175 STRDVAR Surface thermal radiation downwards (variable resolution) (W m**-2 s) +176 176 SSRVAR Surface solar radiation (variable resolution) (W m**-2 s) +177 177 STRVAR Surface thermal radiation (variable resolution) (W m**-2 s) +178 178 TSRVAR Top solar radiation (variable resolution) (W m**-2 s) +179 179 TTRVAR Top thermal radiation (variable resolution) (W m**-2 s) +180 180 EWSSVAR East-West surface stress (variable resolution) (N m**-2 s) +181 181 NSSSVAR North-South surface stress (variable resolution) (N m**-2 s) +182 182 EVAR Evaporation (variable resolution) m of water +189 189 SUNDVAR Sunshine duration (variable resolution) (s) +195 195 LGWSVAR Longitudinal component of gravity wave stress (variable resolution) (N m**-2 s) +196 196 MGWSVAR Meridional component of gravity wave stress (variable resolution) (N m**-2 s) +197 197 GWDVAR Gravity wave dissipation (variable resolution) (W m**-2 s) +198 198 SRCVAR Skin reservoir content (variable resolution) m of water +205 205 ROVAR Runoff (variable resolution) (m) +208 208 TSRCVAR Top net solar radiation, clear sky (variable resolution) (W m**-2 s) +209 209 TTRCVAR Top net thermal radiation, clear sky (variable resolution) (W m**-2 s) +210 210 SSRCVAR Surface net solar radiation, clear sky (variable resolution) (W m**-2 s) +211 211 STRCVAR Surface net thermal radiation, clear sky (variable resolution) (W m**-2 s) +212 212 TISRVAR TOA incident solar radiation (variable resolution) (W m**-2 s) diff --git a/definitions/grib1/2.table b/definitions/grib1/2.table new file mode 100644 index 000000000..7dc22b125 --- /dev/null +++ b/definitions/grib1/2.table @@ -0,0 +1,5 @@ +# CODE TABLE 1, Flag indication relative to section 2 and 3 +1 0 Section 2 omited +1 1 Section 2 included +2 0 Section 3 omited +2 1 Section 3 included diff --git a/definitions/grib1/3.table b/definitions/grib1/3.table new file mode 100644 index 000000000..cc2ed0a24 --- /dev/null +++ b/definitions/grib1/3.table @@ -0,0 +1,53 @@ +# CODE TABLE 3 Fixed levels or layers for which the data are included +0 0 Reserved +1 sfc Surface (of the Earth, which includes sea surface) +2 sfc Cloud base level +3 sfc Cloud top level +4 sfc 0 deg (C) isotherm level +5 5 Adiabatic condensation level (parcel lifted from surface) +6 6 Maximum wind speed level +7 7 Tropopause level +8 sfc Nominal top of atmosphere +9 9 Sea bottom +# 10-19 Reserved +20 20 Isothermal level Temperature in 1/100 K +# 21-99 Reserved +100 pl Isobaric level pressure in hectoPascals (hPa) (2 octets) +101 101 Layer between two isobaric levels pressure of top (kPa) pressure of bottom (kPa) +102 sfc Mean sea level 0 0 +103 103 Fixed height level height above mean sea level (MSL) in meters +104 104 Layer between two height levels above msl height of top (hm) above mean sea level height of bottom (hm) above mean sea level +105 sfc Fixed height above ground height in meters (2 octets) +106 106 Layer between two height levels above ground height of top (hm) above ground height of bottom (hm) above ground +107 107 Sigma level sigma value in 1/10000 (2 octets) +108 108 Layer between two sigma levels sigma value at top in 1/100 sigma value at bottom in 1/100 +109 ml Hybrid level level number (2 octets) +110 ml Layer between two hybrid levels level number of top level number of bottom +111 sfc Depth below land surface centimeters (2 octets) +112 sfc Layer between two depths below land surface depth of upper surface (cm) depth of lower surface (cm) +113 pt Isentropic (theta) level Potential Temp. degrees K (2 octets) +114 114 Layer between two isentropic levels 475K minus theta of top in Deg. K 475K minus theta of bottom in Deg. K +115 115 Level at specified pressure difference from ground to level hPa (2 octets) +116 116 Layer between two levels at specified pressure differences from ground to levels pressure difference from ground to top level hPa pressure difference from ground to bottom level hPa +117 pv Potential vorticity surface 10-9 K m2 kg-1 s-1 +# 118 Reserved +119 119 ETA level: ETA value in 1/10000 (2 octets) +120 120 Layer between two ETA levels: ETA value at top of layer in 1/100, ETA value at bottom of layer in 1/100 +121 121 Layer between two isobaric surfaces (high precision) 1100 hPa minus pressure of top, in hPa 1100 hPa minus pressure of bottom, in hPa +# 122-124 Reserved +125 125 Height level above ground (high precision) centimeters (2 octets) +# 126-127 Reserved +128 128 Layer between two sigma levels (high precision) 1.1 minus sigma of top, in 1/1000 of sigma 1.1 minus sigma of bottom, in 1/1000 of sigma +# 129-140 Reserved +141 141 Layer between two isobaric surfaces (mixed precision) pressure of top, in kPa 1100hPa minus pressure of bottom, in hPa +# 142-159 Reserved +160 dp Depth below sea level meters (2 octets) +# 161-199Reserved +200 sfc Entire atmosphere considered as a single layer 0 (2 octets) +201 201 Entire ocean considered as a single layer 0 (2 octets) +# 202-209 Reserved +210 pl Isobaric surface (Pa) (ECMWF extension) +# 211-254 Reserved for local use +211 wv Ocean wave level (ECMWF extension) +212 oml Ocean mixed layer (ECMWF extension) +255 255 Indicates a missing value diff --git a/definitions/grib1/4.table b/definitions/grib1/4.table new file mode 100644 index 000000000..1ddcb8cd7 --- /dev/null +++ b/definitions/grib1/4.table @@ -0,0 +1,15 @@ +# CODE TABLE 4 Unit of Time +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade +6 30Y Normal (30 years) +7 C Century +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 15m 15 minutes +14 30m 30 minutes +254 s Second diff --git a/definitions/grib1/5.table b/definitions/grib1/5.table new file mode 100644 index 000000000..d6768cb33 --- /dev/null +++ b/definitions/grib1/5.table @@ -0,0 +1,17 @@ +# CODE TABLE 5 Time Range Indicator +0 0 Forecast product valid at reference time + P1 (P1>0) +1 1 Initialized analysis product for reference time (P1=0). +2 2 Product with a valid time ranging between reference time + P1 and reference time + P2 +3 3 Average (reference time + P1 to reference time + P2) +4 4 Accumulation (reference time + P1 to reference time + P2) product considered valid at reference time + P2 +5 5 Difference (reference time + P2 minus reference time + P1) product considered valid at reference time + P2 +10 10 P1 occupies octets 19 and 20; product valid at reference time + P1 +51 51 Climatological Mean Value: +113 113 Average of N forecasts (or initialized analyses); each product has forecast period of P1 (P1=0 for initialized analyses); products have reference times at intervals of P2, beginning at the given reference time. +114 114 Accumulation of N forecasts (or initialized analyses); each product has forecast period of P1 (P1=0 for initialized analyses); products have reference times at intervals of P2, beginning at the given reference time. +115 115 Average of N forecasts, all with the same reference time; the first has a forecast period of P1, the remaining forecasts follow at intervals of P2. +116 116 Accumulation of N forecasts, all with the same reference time; the first has a forecast period of P1, the remaining follow at intervals of P2. +117 117 Average of N forecasts, the first has a period of P1, the subsequent ones have forecast periods reduced from the previous one by an interval of P2; the reference time for the first is given in octets 13- 17, the subsequent ones have reference times increased from the previous one by an interval of P2. Thus all the forecasts have the same valid time, given by the initial reference time + P1. +118 118 Temporal variance, or covariance, of N initialized analyses; each product has forecast period P1=0; products have reference times at intervals of P2, beginning at the given reference time. +123 123 Average of N uninitialized analyses, starting at the reference time, at intervals of P2. +124 124 Accumulation of N uninitialized analyses, starting at the reference time, at intervals of P2. diff --git a/definitions/grib1/6.table b/definitions/grib1/6.table new file mode 100644 index 000000000..211e6fb5a --- /dev/null +++ b/definitions/grib1/6.table @@ -0,0 +1,24 @@ +# CODE TABLE 6 Data Representation Type +0 ll Latitude/Longitude Grid +1 mm Mercator Projection Grid +2 gp Gnomonic Projection Grid +3 lc Lambert Conformal +4 gg Gaussian Latitude/Longitude Grid +5 ps Polar Stereographic Projection Grid +6 6 Universal Transverse Mercator +7 7 Simple polyconic projection +8 8 Albers equal-area, secant or tangent, conic or bi-polar +9 9 Miller's cylingrical projection +10 10 Rotated Latitude/Longitude grid +13 ol Oblique Lambert conformal +14 14 Rotated Gaussian latitude/longitude grid +20 20 Stretched latitude/longitude grid +24 24 Stretched Gaussian latitude/longitude +30 30 Stretched and rotated latitude/longitude +34 34 Stretched and rotated Gaussian latitude/longitude +50 sh Spherical Harmonic Coefficients +60 60 Rotated Spherical Harmonic coefficients +70 70 Stretched Spherical Harmonic coefficients +80 80 Stretched and rotated Spherical Harmonic +90 sv Space view perspective or orthographic grid +193 193 Quasi-regular latitude/longitude \ No newline at end of file diff --git a/definitions/grib1/7.table b/definitions/grib1/7.table new file mode 100644 index 000000000..5fefe61fa --- /dev/null +++ b/definitions/grib1/7.table @@ -0,0 +1,7 @@ +# CODE TABLE 7, Resolution and Component Flags +1 0 Direction increments not given +1 1 Direction increments given +2 0 Earth assumed spherical with radius = 6367.47 km +2 1 Earth assumed oblate spheroid with size as determined by IAU in 1965: 6378.160 km, 6356.775 km, f = 1/297.0 +5 0 u and v components resolved relative to easterly and northerly directions +5 1 u and v components resolved relative to the defined grid diff --git a/definitions/grib1/8.table b/definitions/grib1/8.table new file mode 100644 index 000000000..b4ea17ff1 --- /dev/null +++ b/definitions/grib1/8.table @@ -0,0 +1,7 @@ +# CODE TABLE 8, Scanning Mode Flag +1 0 Points scan in +i direction +1 1 Points scan in -i direction +2 0 Points scan in -j direction +2 1 Points scan in +j direction +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction are consecutive diff --git a/definitions/grib1/9.table b/definitions/grib1/9.table new file mode 100644 index 000000000..521a1324b --- /dev/null +++ b/definitions/grib1/9.table @@ -0,0 +1,2 @@ +# CODE TABLE 9, Spectral Representation Type +1 1 Associated Legendre Polynomials of the First Kind with normalization such that the integral equals 1 diff --git a/definitions/grib1/Makefile.am b/definitions/grib1/Makefile.am new file mode 100644 index 000000000..e69de29bb diff --git a/definitions/grib1/boot.def b/definitions/grib1/boot.def new file mode 100644 index 000000000..0739bd553 --- /dev/null +++ b/definitions/grib1/boot.def @@ -0,0 +1,77 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +constant ieeeFloats = 0 : hidden, edition_specific; +transient eps=0; + +meta headersOnly headers_only(); + +#template section_0 "grib1/section.0.def" ; + +meta gts_header gts_header() : no_copy,hidden,read_only; +meta gts_TTAAii gts_header(20,6) : no_copy,hidden,read_only; +meta gts_CCCC gts_header(27,4) : no_copy,hidden,read_only; +meta gts_ddhh00 gts_header(32,6) : no_copy,hidden,read_only; + +ascii[4] identifier = "GRIB" : read_only,hidden; + +constant offsetSection0=0; +constant section0Length=8 ; +meta section0Pointer section_pointer(offsetSection0,section0Length,0); + +# Due to a trick done by GRIBEX to support large GRIBs, we need a special treatment +# of the message length and of the section4 lenth, so instead of +# length[3] totalLength ; +# we get: + + + +g1_message_length[3] totalLength(section4Length) ; +position startOfHeaders; +unsigned[1] editionNumber = 1 : edition_specific,dump; + +template section_1 "grib1/section.1.def" ; + +alias ls.edition = editionNumber; + +# Not flagbit numbers 7 to 0, while wmo is 1 to 8 +flagbit gridDescriptionSectionPresent(section1Flags,7) = 1; +meta GDSPresent gds_is_present(gridDescriptionSectionPresent,gridDefinition,bitmapPresent,values): dump ; +#alias GDSPresent = gridDescriptionSectionPresent; + +flagbit bitmapPresent(section1Flags,6) :dump; +alias bitmapSectionPresent=bitmapPresent; +alias geography.bitmapPresent=bitmapPresent; + +if(gridDescriptionSectionPresent){ + template section_2 "grib1/section.2.def" ; +} else { + template predefined_grid "grib1/predefined_grid.def"; +} + + +# Used to mark end of headers. Can be accessed with grib_get_offset() +position endOfHeadersMaker; + +meta lengthOfHeaders evaluate( endOfHeadersMaker-startOfHeaders); +meta md5Headers md5(startOfHeaders,lengthOfHeaders); + +if (!headersOnly) { +transient missingValue = 9999 : dump; + +if(bitmapPresent) { + template section3 "grib1/section.3.def" ; +} else { + constant tableReference = 0; +} + +template section_4 "grib1/section.4.def" ; + +template section_5 "grib1/section.5.def" ; +} diff --git a/definitions/grib1/cfName.def b/definitions/grib1/cfName.def new file mode 100644 index 000000000..eb3e5e66d --- /dev/null +++ b/definitions/grib1/cfName.def @@ -0,0 +1,310 @@ +# Automatically generated by ./create_param.pl from database param@balthasar, do not edit +#Geopotential +'geopotential' = { + indicatorOfParameter = 6 ; + table2Version = 3 ; + } +#Temperature +'air_temperature' = { + indicatorOfParameter = 11 ; + table2Version = 3 ; + } +#u-component of wind +'eastward_wind' = { + indicatorOfParameter = 33 ; + table2Version = 3 ; + } +#v-component of wind +'northward_wind' = { + indicatorOfParameter = 34 ; + table2Version = 3 ; + } +#Specific humidity +'specific_humidity' = { + indicatorOfParameter = 51 ; + table2Version = 3 ; + } +#Surface pressure +'surface_air_pressure' = { + indicatorOfParameter = 1 ; + table2Version = 3 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity (geometric) +'lagrangian_tendency_of_air_pressure' = { + indicatorOfParameter = 40 ; + table2Version = 3 ; + } +#Relative vorticity +'atmosphere_relative_vorticity' = { + indicatorOfParameter = 43 ; + table2Version = 3 ; + } +#Boundary layer dissipation +'dissipation_in_atmosphere_boundary_layer' = { + indicatorOfParameter = 123 ; + table2Version = 3 ; + } +#Surface sensible heat flux +'surface_upward_sensible_heat_flux' = { + indicatorOfParameter = 122 ; + table2Version = 3 ; + } +#Surface latent heat flux +'surface_upward_latent_heat_flux' = { + indicatorOfParameter = 121 ; + table2Version = 3 ; + } +#Mean sea level pressure +'air_pressure_at_sea_level' = { + indicatorOfParameter = 2 ; + table2Version = 3 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Relative divergence +'divergence_of_wind' = { + indicatorOfParameter = 44 ; + table2Version = 3 ; + } +#Geopotential height +'geopotential_height' = { + indicatorOfParameter = 7 ; + table2Version = 3 ; + } +#Relative humidity +'relative_humidity' = { + indicatorOfParameter = 52 ; + table2Version = 3 ; + } +#Land-sea mask +'land_binary_mask' = { + indicatorOfParameter = 81 ; + table2Version = 3 ; + } +#Surface roughness +'surface_roughness_length' = { + indicatorOfParameter = 83 ; + table2Version = 3 ; + } +#Albedo +'surface_albedo' = { + indicatorOfParameter = 84 ; + table2Version = 3 ; + } +#Evaporation +'lwe_thickness_of_water_evaporation_amount' = { + indicatorOfParameter = 57 ; + table2Version = 3 ; + } +#Convective cloud cover +'convective_cloud_area_fraction' = { + indicatorOfParameter = 72 ; + table2Version = 3 ; + } +#Geopotential +'geopotential' = { + indicatorOfParameter = 6 ; + table2Version = 2 ; + } +#Temperature +'air_temperature' = { + indicatorOfParameter = 11 ; + table2Version = 2 ; + } +#u-component of wind +'eastward_wind' = { + indicatorOfParameter = 33 ; + table2Version = 2 ; + } +#v-component of wind +'northward_wind' = { + indicatorOfParameter = 34 ; + table2Version = 2 ; + } +#Specific humidity +'specific_humidity' = { + indicatorOfParameter = 51 ; + table2Version = 2 ; + } +#Surface pressure +'surface_air_pressure' = { + indicatorOfParameter = 1 ; + table2Version = 2 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity (geometric) +'lagrangian_tendency_of_air_pressure' = { + indicatorOfParameter = 40 ; + table2Version = 2 ; + } +#Relative vorticity +'atmosphere_relative_vorticity' = { + indicatorOfParameter = 43 ; + table2Version = 2 ; + } +#Boundary layer dissipation +'dissipation_in_atmosphere_boundary_layer' = { + indicatorOfParameter = 123 ; + table2Version = 2 ; + } +#Surface sensible heat flux +'surface_upward_sensible_heat_flux' = { + indicatorOfParameter = 122 ; + table2Version = 2 ; + } +#Surface latent heat flux +'surface_upward_latent_heat_flux' = { + indicatorOfParameter = 121 ; + table2Version = 2 ; + } +#Mean sea level pressure +'air_pressure_at_sea_level' = { + indicatorOfParameter = 2 ; + table2Version = 2 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Relative divergence +'divergence_of_wind' = { + indicatorOfParameter = 44 ; + table2Version = 2 ; + } +#Geopotential height +'geopotential_height' = { + indicatorOfParameter = 7 ; + table2Version = 2 ; + } +#Relative humidity +'relative_humidity' = { + indicatorOfParameter = 52 ; + table2Version = 2 ; + } +#Land-sea mask +'land_binary_mask' = { + indicatorOfParameter = 81 ; + table2Version = 2 ; + } +#Surface roughness +'surface_roughness_length' = { + indicatorOfParameter = 83 ; + table2Version = 2 ; + } +#Albedo +'surface_albedo' = { + indicatorOfParameter = 84 ; + table2Version = 2 ; + } +#Evaporation +'lwe_thickness_of_water_evaporation_amount' = { + indicatorOfParameter = 57 ; + table2Version = 2 ; + } +#Convective cloud cover +'convective_cloud_area_fraction' = { + indicatorOfParameter = 72 ; + table2Version = 2 ; + } +#Geopotential +'geopotential' = { + indicatorOfParameter = 6 ; + table2Version = 1 ; + } +#Temperature +'air_temperature' = { + indicatorOfParameter = 11 ; + table2Version = 1 ; + } +#u-component of wind +'eastward_wind' = { + indicatorOfParameter = 33 ; + table2Version = 1 ; + } +#v-component of wind +'northward_wind' = { + indicatorOfParameter = 34 ; + table2Version = 1 ; + } +#Specific humidity +'specific_humidity' = { + indicatorOfParameter = 51 ; + table2Version = 1 ; + } +#Surface pressure +'surface_air_pressure' = { + indicatorOfParameter = 1 ; + table2Version = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity (geometric) +'lagrangian_tendency_of_air_pressure' = { + indicatorOfParameter = 40 ; + table2Version = 1 ; + } +#Relative vorticity +'atmosphere_relative_vorticity' = { + indicatorOfParameter = 43 ; + table2Version = 1 ; + } +#Boundary layer dissipation +'dissipation_in_atmosphere_boundary_layer' = { + indicatorOfParameter = 123 ; + table2Version = 1 ; + } +#Surface sensible heat flux +'surface_upward_sensible_heat_flux' = { + indicatorOfParameter = 122 ; + table2Version = 1 ; + } +#Surface latent heat flux +'surface_upward_latent_heat_flux' = { + indicatorOfParameter = 121 ; + table2Version = 1 ; + } +#Mean sea level pressure +'air_pressure_at_sea_level' = { + indicatorOfParameter = 2 ; + table2Version = 1 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Relative divergence +'divergence_of_wind' = { + indicatorOfParameter = 44 ; + table2Version = 1 ; + } +#Geopotential height +'geopotential_height' = { + indicatorOfParameter = 7 ; + table2Version = 1 ; + } +#Relative humidity +'relative_humidity' = { + indicatorOfParameter = 52 ; + table2Version = 1 ; + } +#Land-sea mask +'land_binary_mask' = { + indicatorOfParameter = 81 ; + table2Version = 1 ; + } +#Surface roughness +'surface_roughness_length' = { + indicatorOfParameter = 83 ; + table2Version = 1 ; + } +#Albedo +'surface_albedo' = { + indicatorOfParameter = 84 ; + table2Version = 1 ; + } +#Evaporation +'lwe_thickness_of_water_evaporation_amount' = { + indicatorOfParameter = 57 ; + table2Version = 1 ; + } +#Convective cloud cover +'convective_cloud_area_fraction' = { + indicatorOfParameter = 72 ; + table2Version = 1 ; +} diff --git a/definitions/grib1/cluster_domain.def b/definitions/grib1/cluster_domain.def new file mode 100644 index 000000000..1cff2a5c7 --- /dev/null +++ b/definitions/grib1/cluster_domain.def @@ -0,0 +1,7 @@ +'a' = { northernLatitudeOfDomain=70000; westernLongitudeOfDomain=332500; southernLatitudeOfDomain=40000; easternLongitudeOfDomain=10000; } +'b' = { northernLatitudeOfDomain=72500; westernLongitudeOfDomain=0; southernLatitudeOfDomain=50000; easternLongitudeOfDomain=45000; } +'c' = { northernLatitudeOfDomain=57500; westernLongitudeOfDomain=345000; southernLatitudeOfDomain=32500; easternLongitudeOfDomain=17500; } +'d' = { northernLatitudeOfDomain=57500; westernLongitudeOfDomain=2500; southernLatitudeOfDomain=32500; easternLongitudeOfDomain=42500; } +'e' = { northernLatitudeOfDomain=75000; westernLongitudeOfDomain=340000; southernLatitudeOfDomain=30000; easternLongitudeOfDomain=45000; } +'f' = { northernLatitudeOfDomain=60000; westernLongitudeOfDomain=310000; southernLatitudeOfDomain=40000; easternLongitudeOfDomain=0; } + diff --git a/definitions/grib1/data.grid_ieee.def b/definitions/grib1/data.grid_ieee.def new file mode 100644 index 000000000..78918a6d4 --- /dev/null +++ b/definitions/grib1/data.grid_ieee.def @@ -0,0 +1,49 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# moved here to allow different bitsPerValue in second order packing +unsigned[1] bitsPerValue : dump ; +alias numberOfBitsContainingEachPackedValue = bitsPerValue; + +# For grib1 -> grib2 +#constant dataRepresentationTemplateNumber = ?; + +# TODO +codetable[1] precision "grib1/precision.table" = 2 : dump,edition_specific; +position offsetBeforeData; +if( bitmapPresent || !GDSPresent ) { + # For grib1 -> grib2 + constant bitMapIndicator = 0; + meta codedValues data_raw_packing( + section4Length, + offsetBeforeData, + offsetSection4, + numberOfCodedValues, + precision + ); + meta values data_apply_bitmap(codedValues, + bitmap,missingValue,binaryScaleFactor) : dump; + alias data.packedValues = codedValues; +} else { + # For grib1 -> grib2 + constant bitMapIndicator = 255; + + meta values data_raw_packing( + section4Length, + offsetBeforeData, + offsetSection4, + numberOfCodedValues, + precision + ); + alias data.packedValues = values; +} + +meta numberOfCodedValues number_of_values_data_raw_packing(values,precision); + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib1/data.grid_jpeg.def b/definitions/grib1/data.grid_jpeg.def new file mode 120000 index 000000000..6acfdfc95 --- /dev/null +++ b/definitions/grib1/data.grid_jpeg.def @@ -0,0 +1 @@ +data.grid_simple.def \ No newline at end of file diff --git a/definitions/grib1/data.grid_second_order.def b/definitions/grib1/data.grid_second_order.def new file mode 100644 index 000000000..5f9bbff2e --- /dev/null +++ b/definitions/grib1/data.grid_second_order.def @@ -0,0 +1,172 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned [2] N2 : dump; +unsigned [2] codedNumberOfGroups : no_copy ; +unsigned [2] numberOfSecondOrderPackedValues : dump; + +# used to extend +unsigned [1] extraValues=0 : hidden, edition_specific; + +meta numberOfGroups evaluate(codedNumberOfGroups + 65536 * extraValues); + +unsigned [1] widthOfWidths : dump; +unsigned [1] widthOfLengths : dump; +unsigned [2] NL : dump; + +if (orderOfSPD) { + unsigned[1] widthOfSPD ; + meta SPD spd(widthOfSPD,orderOfSPD) : read_only; +} + + +meta groupWidths unsigned_bits(widthOfWidths,numberOfGroups) : read_only; +meta groupLengths unsigned_bits(widthOfLengths,numberOfGroups) : read_only; +meta firstOrderValues unsigned_bits(widthOfFirstOrderValues,numberOfGroups) : read_only; +meta countOfGroupLengths sum(groupLengths); + +transient numberOfCodedValues=countOfGroupLengths+orderOfSPD; +#transient numberOfCodedValues=countOfGroupLengths; +meta bitsPerValue second_order_bits_per_value(codedValues,binaryScaleFactor,decimalScaleFactor); + + +position offsetBeforeData; +if(bitmapPresent) { + meta codedValues data_g1second_order_general_extended_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + firstOrderValues, + N1, + N2, + numberOfGroups, + codedNumberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + groupWidths, + widthOfWidths, + groupLengths, + widthOfLengths, + NL, + SPD, + widthOfSPD, + orderOfSPD, + numberOfPoints + + ): read_only; + alias data.packedValues = codedValues; + + if (boustrophedonicOrdering) { + meta preBitmapValues data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : read_only; + meta values data_apply_boustrophedonic(preBitmapValues,numberOfRows,numberOfColumns,numberOfPoints,pl) : dump; + } else { + meta values data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : dump; + } +} else { + if (boustrophedonicOrdering) { + + meta codedValues data_g1second_order_general_extended_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + firstOrderValues, + N1, + N2, + numberOfGroups, + codedNumberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + groupWidths, + widthOfWidths, + groupLengths, + widthOfLengths, + NL, + SPD, + widthOfSPD, + orderOfSPD, + numberOfPoints + + ) : read_only; + meta values data_apply_boustrophedonic(codedValues,numberOfRows,numberOfColumns,numberOfPoints,pl) : dump; + } else { + meta values data_g1second_order_general_extended_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + firstOrderValues, + N1, + N2, + numberOfGroups, + codedNumberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + groupWidths, + widthOfWidths, + groupLengths, + widthOfLengths, + NL, + SPD, + widthOfSPD, + orderOfSPD, + numberOfPoints + + ) : dump; + alias codedValues=values; + } + alias data.packedValues = values; +} + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib1/data.grid_second_order_SPD1.def b/definitions/grib1/data.grid_second_order_SPD1.def new file mode 120000 index 000000000..0dd046896 --- /dev/null +++ b/definitions/grib1/data.grid_second_order_SPD1.def @@ -0,0 +1 @@ +data.grid_second_order.def \ No newline at end of file diff --git a/definitions/grib1/data.grid_second_order_SPD2.def b/definitions/grib1/data.grid_second_order_SPD2.def new file mode 120000 index 000000000..0dd046896 --- /dev/null +++ b/definitions/grib1/data.grid_second_order_SPD2.def @@ -0,0 +1 @@ +data.grid_second_order.def \ No newline at end of file diff --git a/definitions/grib1/data.grid_second_order_SPD3.def b/definitions/grib1/data.grid_second_order_SPD3.def new file mode 120000 index 000000000..0dd046896 --- /dev/null +++ b/definitions/grib1/data.grid_second_order_SPD3.def @@ -0,0 +1 @@ +data.grid_second_order.def \ No newline at end of file diff --git a/definitions/grib1/data.grid_second_order_constant_width.def b/definitions/grib1/data.grid_second_order_constant_width.def new file mode 100644 index 000000000..e6bb4d791 --- /dev/null +++ b/definitions/grib1/data.grid_second_order_constant_width.def @@ -0,0 +1,142 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned [2] N2 : dump; +unsigned [2] codedNumberOfFirstOrderPackedValues : no_copy ; +unsigned [2] numberOfSecondOrderPackedValues : dump; + +# used to extend +unsigned [1] extraValues=0 : hidden, edition_specific; + +meta numberOfGroups evaluate(codedNumberOfFirstOrderPackedValues + 65536 * extraValues); + +unsigned[1] groupWidth :dump; +meta bitsPerValue second_order_bits_per_value(values,binaryScaleFactor,decimalScaleFactor); + +position offsetBeforeData; + +if(bitmapPresent) { + meta codedValues data_g1second_order_constant_width_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + N1, + N2, + numberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + Ni, + Nj, + pl, + jPointsAreConsecutive, + bitmap, + groupWidth + + ): read_only; + alias data.packedValues = codedValues; + if (boustrophedonicOrdering) { + meta preBitmapValues data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : read_only; + meta values data_apply_boustrophedonic(preBitmapValues,numberOfRows,numberOfColumns,numberOfPoints,pl) : dump; + } else { + meta values data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : dump; + } + +} else { + + if (boustrophedonicOrdering) { + meta codedValues data_g1second_order_constant_width_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + N1, + N2, + numberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + Ni, + Nj, + pl, + jPointsAreConsecutive, + bitmap, + groupWidth + + ) : read_only; + meta values data_apply_boustrophedonic(codedValues,numberOfRows,numberOfColumns,numberOfPoints,pl) : dump; + } else { + meta values data_g1second_order_constant_width_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + N1, + N2, + numberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + Ni, + Nj, + pl, + jPointsAreConsecutive, + bitmap, + groupWidth + + ) : dump; + } + alias data.packedValues = values; +} + +transient numberOfCodedValues = numberOfSecondOrderPackedValues; + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib1/data.grid_second_order_general_grib1.def b/definitions/grib1/data.grid_second_order_general_grib1.def new file mode 100644 index 000000000..c8e2f2f4c --- /dev/null +++ b/definitions/grib1/data.grid_second_order_general_grib1.def @@ -0,0 +1,141 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned [2] N2 : dump; +unsigned [2] codedNumberOfFirstOrderPackedValues : no_copy ; +unsigned [2] numberOfSecondOrderPackedValues : dump; + +# used to extend +unsigned [1] extraValues=0 : hidden, edition_specific; + +meta numberOfGroups evaluate(codedNumberOfFirstOrderPackedValues + 65536 * extraValues); + +unsigned[1] groupWidths[numberOfGroups] :dump; +meta bitsPerValue second_order_bits_per_value(values,binaryScaleFactor,decimalScaleFactor); + +position offsetBeforeData; + +if(bitmapPresent) { + meta codedValues data_g1second_order_general_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + N1, + N2, + numberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + Ni, + Nj, + pl, + jPointsAreConsecutive, + bitmap, + groupWidths + + ): read_only; + alias data.packedValues = codedValues; + if (boustrophedonicOrdering) { + meta preBitmapValues data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : read_only; + meta values data_apply_boustrophedonic(preBitmapValues,numberOfRows,numberOfColumns,numberOfPoints,pl) : dump; + } else { + meta values data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : dump; + } + +} else { + if (boustrophedonicOrdering) { + meta values data_g1second_order_general_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + N1, + N2, + numberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + Ni, + Nj, + pl, + jPointsAreConsecutive, + bitmap, + groupWidths + + ) : dump; + meta values data_apply_boustrophedonic(codedValues,numberOfRows,numberOfColumns,numberOfPoints,pl) : dump; + } else { + meta values data_g1second_order_general_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + N1, + N2, + numberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + Ni, + Nj, + pl, + jPointsAreConsecutive, + bitmap, + groupWidths + + ) : dump; + } + alias data.packedValues = values; +} + +transient numberOfCodedValues = numberOfSecondOrderPackedValues; + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib1/data.grid_second_order_no_SPD.def b/definitions/grib1/data.grid_second_order_no_SPD.def new file mode 120000 index 000000000..0dd046896 --- /dev/null +++ b/definitions/grib1/data.grid_second_order_no_SPD.def @@ -0,0 +1 @@ +data.grid_second_order.def \ No newline at end of file diff --git a/definitions/grib1/data.grid_second_order_row_by_row.def b/definitions/grib1/data.grid_second_order_row_by_row.def new file mode 100644 index 000000000..b50d079f6 --- /dev/null +++ b/definitions/grib1/data.grid_second_order_row_by_row.def @@ -0,0 +1,100 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned [2] N2 : dump; +unsigned [2] codedNumberOfFirstOrderPackedValues : no_copy ; +unsigned [2] numberOfSecondOrderPackedValues : dump; + +# used to extend +unsigned [1] extraValues=0 : hidden, edition_specific; + +meta numberOfGroups evaluate(codedNumberOfFirstOrderPackedValues + 65536 * extraValues); + +unsigned[1] groupWidths[numberOfGroups] :dump; +meta bitsPerValue second_order_bits_per_value(values,binaryScaleFactor,decimalScaleFactor); + +position offsetBeforeData; + +if(bitmapPresent) { + meta codedValues data_g1second_order_row_by_row_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + N1, + N2, + numberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + Ni, + Nj, + pl, + jPointsAreConsecutive, + groupWidths, + bitmap + + ): read_only; + alias data.packedValues = codedValues; + + meta values data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : dump; +} else { + + meta values data_g1second_order_row_by_row_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + N1, + N2, + numberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + Ni, + Nj, + pl, + jPointsAreConsecutive, + groupWidths + + ) : dump; + alias data.packedValues = values; +} + +transient numberOfCodedValues = numberOfSecondOrderPackedValues; + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib1/data.grid_simple.def b/definitions/grib1/data.grid_simple.def new file mode 100644 index 000000000..0603b91d6 --- /dev/null +++ b/definitions/grib1/data.grid_simple.def @@ -0,0 +1,75 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# moved here to allow different bitsPerValue in second order packing +unsigned[1] bitsPerValue : dump ; +alias numberOfBitsContainingEachPackedValue = bitsPerValue; +constant constantFieldHalfByte=8; + +# For grib1 -> grib2 +#constant dataRepresentationTemplateNumber = 0; + +position offsetBeforeData; + +if( bitmapPresent || !GDSPresent ) { + # For grib1 -> grib2 + constant bitMapIndicator = 0; + + meta codedValues data_g1simple_packing( + #simple_packing args + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1simple_packing args + halfByte, + packingType, + grid_ieee,precision + ) : read_only; + meta values data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : dump; + alias data.packedValues = codedValues; +} else { + + # For grib1 -> grib2 + constant bitMapIndicator = 255; + + meta values data_g1simple_packing( + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + halfByte, + packingType, + grid_ieee,precision + ) : dump; + alias data.packedValues = values; +} + + + +meta numberOfCodedValues number_of_coded_values(bitsPerValue,offsetBeforeData,offsetAfterData,halfByte,numberOfValues) : dump; + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; +meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; +template statistics "common/statistics_grid.def"; + diff --git a/definitions/grib1/data.grid_simple_matrix.def b/definitions/grib1/data.grid_simple_matrix.def new file mode 100644 index 000000000..c3c8fd2bc --- /dev/null +++ b/definitions/grib1/data.grid_simple_matrix.def @@ -0,0 +1,183 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +#used in packing +constant constantFieldHalfByte=0; + +# moved here to allow different bitsPerValue in second order packing +unsigned[1] bitsPerValue : dump ; +alias numberOfBitsContainingEachPackedValue = bitsPerValue; + +unsigned[2] octetAtWichPackedDataBegins; +flags[1] extendedFlag "grib1/11-2.table"; + +flagbit matrixOfValues(extendedFlag,3) : dump; +flagbit secondaryBitmapPresent(extendedFlag,2) : dump; +flagbit secondOrderOfDifferentWidth(extendedFlag,1) : dump; + +alias secondOrderValuesDifferentWidths = secondOrderOfDifferentWidth; +alias secondaryBitMap=secondaryBitmapPresent; + +unsigned[2] NR : dump; +alias firstDimension = NR; + +unsigned[2] NC : dump; +alias secondDimension = NC; + +flags[1] coordinateFlag1 "grib1/12.table" : dump; +alias firstDimensionCoordinateValueDefinition = coordinateFlag1; + +unsigned[1] NC1 : dump; +alias numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction = NC1; + + +flags[1] coordinateFlag2 "grib1/12.table" : dump; +alias secondDimensionCoordinateValueDefinition = coordinateFlag2; + +unsigned[1] NC2 : dump; +alias numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction = NC2; + +flags[1] physicalFlag1 "grib1/13.table" : dump; +alias firstDimensionPhysicalSignificance = physicalFlag1; # TODO: Check if grib1 and 2 table are the same + + +flags[1] physicalFlag2 "grib1/13.table" : dump; +alias secondDimensionPhysicalSignificance = physicalFlag2; # TODO: Check if grib1 and 2 table are the same + +ibmfloat coefsFirst[NC1] : dump; + +ibmfloat coefsSecond[NC2] : dump; + +alias data.coefsFirst = coefsFirst; +alias data.coefsSecond=coefsSecond; + +position offsetBeforeData; + +if(matrixOfValues == 0) +{ + constant matrixBitmapsPresent = 0; + position offsetBeforeData; + + if(bitmapPresent) { + + # For grib1 -> grib2 + constant bitMapIndicator = 0; + + meta codedValues data_g1simple_packing ( + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + halfByte, + packingType, + grid_ieee + ) : read_only; + alias data.packedValues = codedValues; + meta values data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : dump; + when(changed(values)) {set octetAtWichPackedDataBegins=numberOfCodedValues;} + } else { + # For grib1 -> grib2 + constant bitMapIndicator = 255; + + meta values data_g1simple_packing( + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + halfByte + ) : dump; + + alias data.packedValues = values; + } +} else { + if(secondaryBitmapPresent == 0) { meta error not_implemented(); } + + constant matrixBitmapsPresent = 1; + constant bitMapIndicator = 0; + +# From GRIBEX: +# +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# ! ! +# ! This is the WMO definition, but it is entirely ! +# ! inadequate when secondary bit maps are present ! +# ! eg 3x3 global grid with a matrix of values ! +# ! 12x26 at each point. This gives a bit map with ! +# ! a length of 285480 octets which cannot be given! +# ! in 16 bits. ! +# ! ! +# ! ECMWF uses the following definition for its ! +# ! wave model data. ! +# ! N - Number of secondary bit maps ! +# ! (ie the number of points which are 'not ! +# ! missing'). ! +# ! This definition will accommodate a 1x1 ! +# ! degree global grid. ! +# ! ! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# + + constant datumSize = NC*NR; + transient secondaryBitmapsCount = octetAtWichPackedDataBegins*datumSize; # + transient secondaryBitmapsSize = secondaryBitmapsCount/8; + + #alias numberOfDataPoints = secondaryBitmapsCount; # grib 1 -> 2 + + position offsetBBitmap; + + meta secondaryBitmaps g1bitmap( + dummy, + missingValue, + offsetBBitmap, + secondaryBitmapsSize, + dummy) : read_only; + + position offsetBeforeData; + + meta codedValues data_g1simple_packing( + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + halfByte + ) : read_only; + + alias data.packedValues = codedValues; + + constant expandBy = NC*NR; + meta secondaryBitmap data_g1secondary_bitmap(bitmap,secondaryBitmaps,missingValue,expandBy,octetAtWichPackedDataBegins); + + meta values data_apply_bitmap(codedValues,secondaryBitmap,missingValue,binaryScaleFactor) : dump; + +} +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; +meta numberOfCodedValues number_of_coded_values(bitsPerValue,offsetBeforeData,offsetAfterData,halfByte,numberOfValues) : dump; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib1/data.spectral_complex.def b/definitions/grib1/data.spectral_complex.def new file mode 100644 index 000000000..5e8ff7bd4 --- /dev/null +++ b/definitions/grib1/data.spectral_complex.def @@ -0,0 +1,142 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# moved here to allow different bitsPerValue in second order packing +unsigned[1] bitsPerValue : dump ; +alias numberOfBitsContainingEachPackedValue = bitsPerValue; + +# For grib1 -> grib2 + +#constant dataRepresentationTemplateNumber = 51; + +constant PUnset = -32767; + + unsigned[2] N : read_only,dump; + signed[2] P = PUnset ; + + unsigned[1] JS=0 : dump; + unsigned[1] KS=0 : dump; + unsigned[1] MS=0 : dump; + + alias subSetJ=JS ; + alias subSetK=KS ; + alias subSetM=MS ; + + constant GRIBEXShBugPresent = 1; + if (gribex_mode_on()) { + transient computeLaplacianOperator=0 : hidden; + } else { + transient computeLaplacianOperator=1 : hidden; + } + + meta data.laplacianOperator scale(P,oneConstant,grib1divider,truncateLaplacian) : dump; + meta laplacianOperatorIsSet evaluate(P != PUnset && !computeLaplacianOperator ); + + if (localUsePresent) { + if (changed(localDefinitionNumber)) { + transient TS = 0 ; + meta TScalc spectral_truncation(JS,KS,MS,TS) : read_only,hidden; + meta Nassigned octect_number(N,4*TScalc) : hidden ; + } + } + + position offsetBeforeData; + meta values data_g1complex_packing( + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + ieeeFloats, + + laplacianOperatorIsSet, + laplacianOperator, + subSetJ, + subSetK, + subSetM, + pentagonalResolutionParameterJ, + pentagonalResolutionParameterK, + pentagonalResolutionParameterM, + + halfByte, + N,packingType,spectral_ieee,precision + ) : dump ; + + meta data.packedValues data_sh_packed( + section4Length, + offsetBeforeData, + offsetSection4, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + ieeeFloats, + + laplacianOperatorIsSet, + laplacianOperator, + subSetJ, + subSetK, + subSetM, + + pentagonalResolutionParameterJ, + pentagonalResolutionParameterK, + pentagonalResolutionParameterM + ) : read_only; + + meta data.unpackedValues data_sh_unpacked( + section4Length, + offsetBeforeData, + offsetSection4, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + ieeeFloats, + + laplacianOperatorIsSet, + laplacianOperator, + subSetJ, + subSetK, + subSetM, + + pentagonalResolutionParameterJ, + pentagonalResolutionParameterK, + pentagonalResolutionParameterM + ) : read_only; + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; +meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; + +# nearest sh(values,radius,J,K,M); + +meta numberOfCodedValues g1number_of_coded_values_sh_complex(bitsPerValue,offsetBeforeData,offsetAfterData,halfByte,numberOfValues,subSetJ,subSetK,subSetM) : dump; + +template statistics "common/statistics_spectral.def"; diff --git a/definitions/grib1/data.spectral_ieee.def b/definitions/grib1/data.spectral_ieee.def new file mode 100644 index 000000000..ba2dde8fb --- /dev/null +++ b/definitions/grib1/data.spectral_ieee.def @@ -0,0 +1,138 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# moved here to allow different bitsPerValue in second order packing +unsigned[1] bitsPerValue : dump ; +alias numberOfBitsContainingEachPackedValue = bitsPerValue; + +# For grib1 -> grib2 + +#constant dataRepresentationTemplateNumber = 51; + +constant PUnset = -32767; + + unsigned[2] N : read_only,dump; + signed[2] P = PUnset ; + + unsigned[1] JS=0 : dump; + unsigned[1] KS=0 : dump; + unsigned[1] MS=0 : dump; + + alias subSetJ=JS ; + alias subSetK=KS ; + alias subSetM=MS ; + + constant GRIBEXShBugPresent = 1; + transient computeLaplacianOperator=0; + + meta data.laplacianOperator scale(P,oneConstant,grib1divider,truncateLaplacian) : dump; + meta laplacianOperatorIsSet evaluate(P != PUnset && !computeLaplacianOperator ); + + if (localUsePresent) { + if (changed(localDefinitionNumber)) { + transient TS = 0 ; + meta TScalc spectral_truncation(JS,KS,MS,TS) : read_only,hidden; + meta Nassigned octect_number(N,4*TScalc) : hidden ; + } + } + + position offsetBeforeData; + meta values data_g1complex_packing( + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + ieeeFloats, + + laplacianOperatorIsSet, + laplacianOperator, + subSetJ, + subSetK, + subSetM, + pentagonalResolutionParameterJ, + pentagonalResolutionParameterK, + pentagonalResolutionParameterM, + + halfByte, + N,packingType,spectral_ieee,precision + ) : dump ; + + meta data.packedValues data_sh_packed( + section4Length, + offsetBeforeData, + offsetSection4, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + ieeeFloats, + + laplacianOperatorIsSet, + laplacianOperator, + subSetJ, + subSetK, + subSetM, + + pentagonalResolutionParameterJ, + pentagonalResolutionParameterK, + pentagonalResolutionParameterM + ) : read_only; + + meta data.unpackedValues data_sh_unpacked( + section4Length, + offsetBeforeData, + offsetSection4, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + ieeeFloats, + + laplacianOperatorIsSet, + laplacianOperator, + subSetJ, + subSetK, + subSetM, + + pentagonalResolutionParameterJ, + pentagonalResolutionParameterK, + pentagonalResolutionParameterM + ) : read_only; + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; +meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy; + +# nearest sh(values,radius,J,K,M); + +meta numberOfCodedValues g1number_of_coded_values_sh_complex(bitsPerValue,offsetBeforeData,offsetAfterData,halfByte,numberOfValues,subSetJ,subSetK,subSetM) : dump; + +template statistics "common/statistics_spectral.def"; diff --git a/definitions/grib1/data.spectral_simple.def b/definitions/grib1/data.spectral_simple.def new file mode 100644 index 000000000..6cfd7139b --- /dev/null +++ b/definitions/grib1/data.spectral_simple.def @@ -0,0 +1,46 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# moved here to allow different bitsPerValue in second order packing +unsigned[1] bitsPerValue : dump ; +alias numberOfBitsContainingEachPackedValue = bitsPerValue; + +# For grib1 -> grib2 +#constant dataRepresentationTemplateNumber = 50; + +ibmfloat realPart ; +position offsetBeforeData; +transient P=0; + +_if (gribex_mode_on()) { + transient computeLaplacianOperator=0 : hidden; +} else { + transient computeLaplacianOperator=1 : hidden; +} + +meta codedValues data_g1simple_packing( + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + halfByte +): read_only; + +meta values data_g1shsimple_packing(codedValues,realPart) : dump; +alias data.packedValues = values; +meta numberOfCodedValues g1number_of_coded_values_sh_simple(bitsPerValue,offsetBeforeData,offsetAfterData,halfByte,numberOfValues) : dump; + +template statistics "common/statistics_spectral.def"; diff --git a/definitions/grib1/gds_not_present_bitmap.def b/definitions/grib1/gds_not_present_bitmap.def new file mode 100644 index 000000000..315676409 --- /dev/null +++ b/definitions/grib1/gds_not_present_bitmap.def @@ -0,0 +1,35 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START grib1::section +# SECTION 3, Bit-map section +# Length of section +# (octets) +position offsetSection3; +transient section3Length=1; +meta section3Pointer section_pointer(offsetSection3,section3Length,3); + +# Number of unused bits at end of Section 3 +transient numberOfUnusedBitsAtEndOfSection3 = 0 : read_only; + +# Table reference: +transient tableReference = 0; + +#position offsetBeforeBitmap; +meta bitmap gds_not_present_bitmap( missingValue,numberOfValues, + numberOfPoints, + latitudeOfFirstGridPoint, + Ni,numberOfUnusedBitsAtEndOfSection3) : read_only; + +#position offsetAfterBitmap; + +# END grib1::section + +#padtoeven padding_sec3_1(offsetSection3,section3Length); +#section_padding section3Padding; diff --git a/definitions/grib1/grid.192.78.3.10.table b/definitions/grib1/grid.192.78.3.10.table new file mode 100755 index 000000000..ae5baf9d5 --- /dev/null +++ b/definitions/grib1/grid.192.78.3.10.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.10, Scanning mode for one diamond +1 0 Points scan in +i direction, i.e. from pole to equator +1 1 Points scan in -i direction, i.e. from equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction is consecutive diff --git a/definitions/grib1/grid.192.78.3.9.table b/definitions/grib1/grid.192.78.3.9.table new file mode 100755 index 000000000..800c08259 --- /dev/null +++ b/definitions/grib1/grid.192.78.3.9.table @@ -0,0 +1,3 @@ +# FLAG TABLE 3.9, Numbering order of diamonds as seen from the corresponding pole +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e., counter-clockwise) orientation diff --git a/definitions/grib1/grid_21.def b/definitions/grib1/grid_21.def new file mode 100644 index 000000000..da80e5825 --- /dev/null +++ b/definitions/grib1/grid_21.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 21 + +constant Ni = 37; +constant Nj = 37; + +constant longitudeOfFirstGridPoint = 0; +constant longitudeOfLastGridPoint = 180000; + +constant latitudeOfFirstGridPoint = 0; +constant latitudeOfLastGridPoint = 90000; + +constant iDirectionIncrement = 5000; +constant jDirectionIncrement = 2500; + +constant numberOfDataPoints=1369; +constant numberOfValues=1333 ; + diff --git a/definitions/grib1/grid_22.def b/definitions/grib1/grid_22.def new file mode 100644 index 000000000..506dded25 --- /dev/null +++ b/definitions/grib1/grid_22.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 22 + +constant Ni = 37; +constant Nj = 37; + +constant longitudeOfFirstGridPoint = -180000; +constant longitudeOfLastGridPoint = 0; + +constant latitudeOfFirstGridPoint = 0; +constant latitudeOfLastGridPoint = 90000; + +constant iDirectionIncrement = 5000; +constant jDirectionIncrement = 2500; + +constant numberOfDataPoints=1369; +constant numberOfValues=1333 ; + diff --git a/definitions/grib1/grid_23.def b/definitions/grib1/grid_23.def new file mode 100644 index 000000000..66cb46fdd --- /dev/null +++ b/definitions/grib1/grid_23.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 23 + +constant Ni = 37; +constant Nj = 37; + +constant longitudeOfFirstGridPoint = 0; +constant longitudeOfLastGridPoint = 180000; + +constant latitudeOfFirstGridPoint = -90000; +constant latitudeOfLastGridPoint = 0; + +constant iDirectionIncrement = 5000; +constant jDirectionIncrement = 2500; + +constant numberOfDataPoints=1369; +constant numberOfValues=1333 ; + diff --git a/definitions/grib1/grid_24.def b/definitions/grib1/grid_24.def new file mode 100644 index 000000000..bc6a1417e --- /dev/null +++ b/definitions/grib1/grid_24.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 24 + +constant Ni = 37; +constant Nj = 37; + +constant longitudeOfFirstGridPoint = -180000; +constant longitudeOfLastGridPoint = 0; + +constant latitudeOfFirstGridPoint = -90000; +constant latitudeOfLastGridPoint = 0; + +constant iDirectionIncrement = 5000; +constant jDirectionIncrement = 2500; + +constant numberOfDataPoints=1369; +constant numberOfValues=1333 ; + diff --git a/definitions/grib1/grid_25.def b/definitions/grib1/grid_25.def new file mode 100644 index 000000000..8757dffaa --- /dev/null +++ b/definitions/grib1/grid_25.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 25 + +constant Ni = 72; +constant Nj = 19; + +constant longitudeOfFirstGridPoint = 0; +constant longitudeOfLastGridPoint = 355000; + +constant latitudeOfFirstGridPoint = 0; +constant latitudeOfLastGridPoint = 90000; + +constant iDirectionIncrement = 5000; +constant jDirectionIncrement = 5000; + +constant numberOfDataPoints=1368; +constant numberOfValues=1297 ; + diff --git a/definitions/grib1/grid_26.def b/definitions/grib1/grid_26.def new file mode 100644 index 000000000..5169574e3 --- /dev/null +++ b/definitions/grib1/grid_26.def @@ -0,0 +1,25 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 26 + +constant Ni = 72; +constant Nj = 19; + +constant longitudeOfFirstGridPoint = 0; +constant longitudeOfLastGridPoint = 355000; + +constant latitudeOfFirstGridPoint = -90000; +constant latitudeOfLastGridPoint = 0; + +constant iDirectionIncrement = 5000; +constant jDirectionIncrement = 5000; + +constant numberOfDataPoints=1368; +constant numberOfValues=1297 ; diff --git a/definitions/grib1/grid_61.def b/definitions/grib1/grid_61.def new file mode 100644 index 000000000..973f208ab --- /dev/null +++ b/definitions/grib1/grid_61.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 61 + +constant Ni = 91; +constant Nj = 46; + +constant longitudeOfFirstGridPoint = 0; +constant longitudeOfLastGridPoint = 180000; + +constant latitudeOfFirstGridPoint = 0; +constant latitudeOfLastGridPoint = 90000; + +constant iDirectionIncrement = 2000; +constant jDirectionIncrement = 2000; + +constant numberOfDataPoints=4186; +constant numberOfValues=4096 ; + diff --git a/definitions/grib1/grid_62.def b/definitions/grib1/grid_62.def new file mode 100644 index 000000000..d97606011 --- /dev/null +++ b/definitions/grib1/grid_62.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 62 + +constant Ni = 91; +constant Nj = 46; + +constant longitudeOfFirstGridPoint = -180000; +constant longitudeOfLastGridPoint = 0; + +constant latitudeOfFirstGridPoint = 0; +constant latitudeOfLastGridPoint = 90000; + +constant iDirectionIncrement = 2000; +constant jDirectionIncrement = 2000; + +constant numberOfDataPoints=4186; +constant numberOfValues=4096 ; + diff --git a/definitions/grib1/grid_63.def b/definitions/grib1/grid_63.def new file mode 100644 index 000000000..1f33173c2 --- /dev/null +++ b/definitions/grib1/grid_63.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 63 + +constant Ni = 91; +constant Nj = 46; + +constant longitudeOfFirstGridPoint = 0; +constant longitudeOfLastGridPoint = 180000; + +constant latitudeOfFirstGridPoint = -90000; +constant latitudeOfLastGridPoint = 0; + +constant iDirectionIncrement = 2000; +constant jDirectionIncrement = 2000; + +constant numberOfDataPoints=4186; +constant numberOfValues=4096 ; + diff --git a/definitions/grib1/grid_64.def b/definitions/grib1/grid_64.def new file mode 100644 index 000000000..b3568a91d --- /dev/null +++ b/definitions/grib1/grid_64.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 21 + +constant Ni = 91; +constant Nj = 46; + +constant longitudeOfFirstGridPoint = -180000; +constant longitudeOfLastGridPoint = 0; + +constant latitudeOfFirstGridPoint = -90000; +constant latitudeOfLastGridPoint = 0; + +constant iDirectionIncrement = 2000; +constant jDirectionIncrement = 2000; + +constant numberOfDataPoints=4186; +constant numberOfValues=4096 ; + diff --git a/definitions/grib1/grid_definition_0.def b/definitions/grib1/grid_definition_0.def new file mode 100644 index 000000000..39e49932c --- /dev/null +++ b/definitions/grib1/grid_definition_0.def @@ -0,0 +1,18 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION latitude/longitude grid (or equidistant cylindrical) + +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 0; + +template commonBlock "grib1/grid_definition_latlon.def"; + +pad padding_grid0_1(4); + diff --git a/definitions/grib1/grid_definition_1.def b/definitions/grib1/grid_definition_1.def new file mode 100644 index 000000000..8ffd1d4fd --- /dev/null +++ b/definitions/grib1/grid_definition_1.def @@ -0,0 +1,57 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION Mercator +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 20; + +signed[2] Ni : dump; +alias numberOfPointsAlongAParallel= Ni ; +alias Nx =Ni; +alias geography.Ni=Ni; + +signed[2] Nj : dump; +alias numberOfPointsAlongAMeridian=Nj; +alias Nx=Nj; +alias geography.Nj=Nj; + +include "grid_first_last_resandcomp.def"; + +signed[3] Latin : edition_specific,no_copy; +meta geography.LaDInDegrees scale(Latin,oneConstant,grib1divider,truncateDegrees) : dump; + +pad padding_grid1_1(1); + +# for change_scanning_direction +alias yFirst=latitudeOfFirstGridPointInDegrees; +alias yLast=latitudeOfLastGridPointInDegrees; +alias xFirst=longitudeOfFirstGridPointInDegrees; +alias xLast=longitudeOfLastGridPointInDegrees; + +include "scanning_mode.def"; + +signed[3] DiInMetres : dump; +alias longitudinalDirectionGridLength=DiInMetres; +alias Di=DiInMetres; +alias geography.DiInMetres=DiInMetres; + +signed[3] DjInMetres : dump; +alias latitudinalDirectionGridLength=DjInMetres; +alias Dj=DjInMetres; +alias geography.DjInMetres=DjInMetres; + +constant orientationOfTheGridInDegrees=0; + +pad padding_grid1_2(8); + +meta numberOfDataPoints number_of_points(Ni,Nj) : dump; +alias numberOfPoints=numberOfDataPoints; +meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints,bitmapPresent,bitmap,numberOfCodedValues) : dump; +#alias ls.valuesCount=numberOfValues; + diff --git a/definitions/grib1/grid_definition_10.def b/definitions/grib1/grid_definition_10.def new file mode 100644 index 000000000..6b07a956c --- /dev/null +++ b/definitions/grib1/grid_definition_10.def @@ -0,0 +1,19 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION rotated latitude/longitude grid (or equidistant cylindrical) +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 1; + +template commonBlock "grib1/grid_definition_latlon.def"; + +ascii[4] zero : read_only; + +# Rotation parameters +include "grid_rotation.def" \ No newline at end of file diff --git a/definitions/grib1/grid_definition_13.def b/definitions/grib1/grid_definition_13.def new file mode 100644 index 000000000..f6f6fa1b3 --- /dev/null +++ b/definitions/grib1/grid_definition_13.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION Oblique Lambert conformal, secant or tangent, conic or bi-polar +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 30; + +template commonBlock "grib1/grid_definition_lambert.def"; \ No newline at end of file diff --git a/definitions/grib1/grid_definition_14.def b/definitions/grib1/grid_definition_14.def new file mode 100644 index 000000000..0a5156777 --- /dev/null +++ b/definitions/grib1/grid_definition_14.def @@ -0,0 +1,17 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION Rotated Gaussian latitude/longitude grid +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 41; + +template commonBlock "grib1/grid_definition_gaussian.def"; + +# Rotation parameters +include "grid_rotation.def" \ No newline at end of file diff --git a/definitions/grib1/grid_definition_192.78.def b/definitions/grib1/grid_definition_192.78.def new file mode 100755 index 000000000..25db40a72 --- /dev/null +++ b/definitions/grib1/grid_definition_192.78.def @@ -0,0 +1,51 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# DWD local grid definition 192 - triangular grid base on icosahedron subdivision + +# n2 - exponent of 2 for the number of intervals on main triangle sides +unsigned[2] n2 : dump ; + +# n3 - exponent of 3 for the number of intervals on main triangle sides +unsigned[2] n3 : dump ; + +# nd - Number of diamonds +unsigned[3] nd : dump ; +alias numberOfDiamonds=nd; +alias Nj=nd; + +# Ni - number of intervals on main triangle sides of the icosahedron +unsigned[3] Ni : dump ; + +# Numbering order of diamonds +flags[1] numberingOrderOfDiamonds 'grib1/grid.192.78.3.9.table'; + +# Latitude of the pole point of the icosahedron on the sphere +signed[4] latitudeOfIcosahedronPole : dump ; + +# Longitude of the pole point of the icosahedron on the sphere +unsigned[4] longitudeOfIcosahedronPole : dump ; + +# Longitude of the center line of the first diamond of the icosahedron on the sphere +unsigned[4] longitudeOfFirstDiamondCenterLine : dump ; + +# Reserved +unsigned[1] reservedOctet; + +# Scanning mode for one diamond +flags[1] scanningModeForOneDiamond 'grib1/grid.192.78.3.10.table'; + +transient numberOfPoints= nd *(Ni + 1) * (Ni + 1); +alias numberOfDataPoints=numberOfPoints; + +meta numberOfValues +number_of_values(values,bitsPerValue,numberOfDataPoints, + bitmapPresent,bitmap,numberOfCodedValues) : dump; + + diff --git a/definitions/grib1/grid_definition_192.98.def b/definitions/grib1/grid_definition_192.98.def new file mode 100644 index 000000000..c740876af --- /dev/null +++ b/definitions/grib1/grid_definition_192.98.def @@ -0,0 +1,31 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION ocean ECMWF convention + +unsigned[2] Ni : dump; +alias numberOfPointsAlongFirstAxis = Ni; +alias Nx = Ni; + +unsigned[2] Nj : dump; +alias numberOfPointsAlongSecondAxis = Nj; +alias Nx = Nj; + +# La1 - latitude of first grid point +signed[3] latitudeOfFirstGridPoint : no_copy; +meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump,no_copy; +alias La1 = latitudeOfFirstGridPoint : no_copy; + +include "scanning_mode.def"; + +meta numberOfDataPoints number_of_points(Ni,Nj,PLPresent,pl) : dump; +alias numberOfPoints=numberOfDataPoints; +meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints,bitmapPresent,bitmap,numberOfCodedValues) : dump; +#alias ls.valuesCount=numberOfValues; + diff --git a/definitions/grib1/grid_definition_193.98.def b/definitions/grib1/grid_definition_193.98.def new file mode 100644 index 000000000..6c3340167 --- /dev/null +++ b/definitions/grib1/grid_definition_193.98.def @@ -0,0 +1,100 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION quasi-regular latitude/longitude grid +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 0; + +unsigned[2] NRj : can_be_missing,dump; + +unsigned[2] numberOfPointsAlongAMeridian : can_be_missing,dump; +alias Nj = numberOfPointsAlongAMeridian; + +# Latitudes and Longitudes of the first and the last points +# Resolution and component flags +include "grid_first_last_resandcomp.def"; + +unsigned[2] iDirectionIncrement : can_be_missing; +unsigned[2] jDirectionIncrement : can_be_missing; +alias Dj = jDirectionIncrement; +alias Di = iDirectionIncrement; + +# for change_scanning_direction +alias yFirst=latitudeOfFirstGridPointInDegrees; +alias yLast=latitudeOfLastGridPointInDegrees; +alias xFirst=longitudeOfFirstGridPointInDegrees; +alias xLast=longitudeOfLastGridPointInDegrees; + +include "scanning_mode.def"; + +# Lar1 - latitude of first grid point of reference domain +signed[3] Lar1 : edition_specific; +meta geography.Lar1InDegrees scale(latitudeOfFirstGridPointOfReferenceDomain,oneConstant,grib1divider,truncateDegrees) :dump; +alias La1 = Lar1; + +# Lor1 - longitude of first grid point of reference domain +signed[3] Lor1 : edition_specific; +meta geography.Lor1InDegrees scale(longitudeOfFirstGridPointOfReferenceDomain,oneConstant,grib1divider,truncateDegrees) : dump; +alias Lo1 = Lor1; + +# Lar2 - latitude of last grid point of reference domain +signed[3] Lar2 : edition_specific; +meta geography.Lar2InDegrees scale(latitudeOfLastGridPointOfReferenceDomain,oneConstant,grib1divider,truncateDegrees) : dump; +alias La2 = Lar2; + +# Lor2 - longitude of last grid point of reference domain +signed[3] Lor2 ; +meta geography.Lor2InDegrees scale(longitudeOfLastGridPointOfReferenceDomain,oneConstant,grib1divider,truncateDegrees) : dump; +alias Lo2 = Lor2; + +meta geography.jDirectionIncrementInDegrees latlon_increment(ijDirectionIncrementGiven,jDirectionIncrement, + jScansPositively, + latitudeOfFirstGridPointInDegrees,latitudeOfLastGridPointInDegrees, + numberOfPointsAlongAMeridian,oneConstant,grib1divider,0) : can_be_missing,dump; +#transient DjInMicrodegrees = times(jDirectionIncrement,thousand); + +meta geography.iDirectionIncrementInDegrees latlon_increment(ijDirectionIncrementGiven,iDirectionIncrement, + iScansPositively, + longitudeOfFirstGridPointInDegrees,longitudeOfLastGridPointInDegrees, + Ni,oneConstant,grib1divider,1) : can_be_missing,dump; +#meta DiInMicrodegrees times(iDirectionIncrement,thousand); + +alias latitudeFirstInDegrees = latitudeOfFirstGridPointInDegrees; +alias longitudeFirstInDegrees = longitudeOfFirstGridPointInDegrees; + +alias latitudeLastInDegrees = latitudeOfLastGridPointInDegrees; +alias longitudeLastInDegrees = longitudeOfLastGridPointInDegrees; +alias DiInDegrees = iDirectionIncrementInDegrees; +alias DjInDegrees = jDirectionIncrementInDegrees; + +meta numberOfDataPoints number_of_points(Ni,Nj,PLPresent,pl) : dump; +alias numberOfPoints=numberOfDataPoints; +meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints,bitmapPresent,bitmap,numberOfCodedValues) : dump; +#alias ls.valuesCount=numberOfValues; + +if(missing(Ni)){ + iterator latlon_reduced(numberOfPoints,missingValue,values, + latitudeFirstInDegrees,longitudeFirstInDegrees, + latitudeLastInDegrees,loLast, + Nj,DjInDegrees,pl); + nearest latlon_reduced(values,radius,Nj,pl); +} else { + iterator latlon(numberOfPoints,missingValue,values,longitudeFirstInDegrees,iInc , + Ni,Nj,iScansNegatively , + latitudeFirstInDegrees,DjInDegrees,jScansPositively ); + nearest regular(values,radius,Ni,Nj); +} +meta latLonValues latlonvalues(values); +alias latitudeLongitudeValues=latLonValues; +meta latitudes latitudes(values,0); +meta longitudes longitudes(values,0); +meta distinctLatitudes latitudes(values,1); +meta distinctLongitudes longitudes(values,1); + +# END 1/grid_definition.latitude_longitude_grid ---------------------------------------------------------------------- diff --git a/definitions/grib1/grid_definition_20.def b/definitions/grib1/grid_definition_20.def new file mode 100644 index 000000000..43106fc7a --- /dev/null +++ b/definitions/grib1/grid_definition_20.def @@ -0,0 +1,20 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION stretched and rotated latitude/longitude grid (or equidistant cylindrical) +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 2; + +template commonBlock "grib1/grid_definition_latlon.def"; + +ascii[4] zero : read_only; + +# Stretching parameters +include "grid_stretching.def" + diff --git a/definitions/grib1/grid_definition_24.def b/definitions/grib1/grid_definition_24.def new file mode 100644 index 000000000..2b451117c --- /dev/null +++ b/definitions/grib1/grid_definition_24.def @@ -0,0 +1,17 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION Stretched Rotated Gaussian latitude/longitude grid +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 42; + +template commonBlock "grib1/grid_definition_gaussian.def"; + +# Stretching parameters +include "grid_stretching.def" diff --git a/definitions/grib1/grid_definition_3.def b/definitions/grib1/grid_definition_3.def new file mode 100644 index 000000000..c73a18005 --- /dev/null +++ b/definitions/grib1/grid_definition_3.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION Lambert conformal, secant or tangent, conic or bi-polar +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 30; + +template commonBlock "grib1/grid_definition_lambert.def"; + diff --git a/definitions/grib1/grid_definition_30.def b/definitions/grib1/grid_definition_30.def new file mode 100644 index 000000000..08b93b351 --- /dev/null +++ b/definitions/grib1/grid_definition_30.def @@ -0,0 +1,22 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION stretched and rotated latitude/longitude grid (or equidistant cylindrical) +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 3; + +template commonBlock "grib1/grid_definition_latlon.def"; + +ascii[4] zero : read_only; + +# Rotation parameters +include "grid_rotation.def" + +# Stretching parameters +include "grid_stretching.def" diff --git a/definitions/grib1/grid_definition_34.def b/definitions/grib1/grid_definition_34.def new file mode 100644 index 000000000..af1d9b138 --- /dev/null +++ b/definitions/grib1/grid_definition_34.def @@ -0,0 +1,20 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION stretched Rotated Gaussian latitude/longitude grid +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 43; + +template commonBlock "grib1/grid_definition_gaussian.def"; + +# Rotation parameters +include "grid_rotation.def" + +# Stretching parameters +include "grid_stretching.def" diff --git a/definitions/grib1/grid_definition_4.def b/definitions/grib1/grid_definition_4.def new file mode 100644 index 000000000..85ec48eb9 --- /dev/null +++ b/definitions/grib1/grid_definition_4.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION Gaussian latitude/longitude grid = including rotated, stretched, or stretched and rotated) +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 40; + +template commonBlock "grib1/grid_definition_gaussian.def"; + diff --git a/definitions/grib1/grid_definition_5.def b/definitions/grib1/grid_definition_5.def new file mode 100644 index 000000000..1bceb7d6d --- /dev/null +++ b/definitions/grib1/grid_definition_5.def @@ -0,0 +1,83 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION polar stereographic +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 20; + +unsigned[2] Nx : dump; +alias Ni = Nx; +alias numberOfPointsAlongXAxis = Nx; +alias geography.Nx=Nx; + +unsigned[2] Ny : dump; +alias Nj = Ny; +alias numberOfPointsAlongYAxis = Ny; +alias geography.Ny=Ny; + +signed[3] latitudeOfFirstGridPoint : edition_specific ; +meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; +alias La1 = latitudeOfFirstGridPoint; + +signed[3] longitudeOfFirstGridPoint : edition_specific; +meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; +alias Lo1 = longitudeOfFirstGridPoint; + +include "resolution_flags.def"; + +# LoV - orientation of the grid; i.e. the longitude value of the meridian which is parallel to the Y-axis +signed[3] orientationOfTheGrid ; +meta geography.orientationOfTheGridInDegrees scale(orientationOfTheGrid,oneConstant,grib1divider,truncateDegrees) : dump; +alias LoV = orientationOfTheGrid ; + +# Dx - X-direction grid length +unsigned[3] DxInMetres : dump; +alias xDirectionGridLengthInMetres=DxInMetres; +alias Dx=DxInMetres; +alias geography.DxInMetres=DxInMetres; +alias Di = DxInMetres; + +# Dy - Y-direction grid length +unsigned[3] DyInMetres : dump; +alias yDirectionGridLengthInMetres=DyInMetres; +alias Dy = DyInMetres; +alias Dj = DyInMetres; +alias geography.DyInMetres=DyInMetres; + +constant latitudeWhereDxAndDyAreSpecifiedInDegrees=60; +constant LaDInDegrees=60; +alias geography.LaDInDegrees=LaDInDegrees; + +# Projection center flag +unsigned[1] projectionCentreFlag : dump ; +alias projectionCenterFlag=projectionCentreFlag; + +# for change_scanning_direction +alias yFirst=latitudeOfFirstGridPointInDegrees; +alias xFirst=longitudeOfFirstGridPointInDegrees; + +include "scanning_mode.def"; + +pad padding_grid5_1(4); + +meta numberOfDataPoints number_of_points(Nx,Ny,PLPresent,pl) : dump; +alias numberOfPoints=numberOfDataPoints; +meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints,bitmapPresent,bitmap,numberOfCodedValues) : dump; +#alias ls.valuesCount=numberOfValues; + +iterator polar_stereographic(numberOfPoints,missingValue,values, + radius,Nx,Ny, + latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees, + LaDInDegrees,orientationOfTheGridInDegrees, + Dx,Dy, + iScansNegatively, + jScansPositively, + jPointsAreConsecutive, + alternativeRowScanning); + diff --git a/definitions/grib1/grid_definition_50.def b/definitions/grib1/grid_definition_50.def new file mode 100644 index 000000000..85e826440 --- /dev/null +++ b/definitions/grib1/grid_definition_50.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION spherical harmonic coefficients (including rotated, stretched, or stretched and rotated) +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 50; + +template commonBlock "grib1/grid_definition_spherical_harmonics.def"; diff --git a/definitions/grib1/grid_definition_60.def b/definitions/grib1/grid_definition_60.def new file mode 100644 index 000000000..c0908f07a --- /dev/null +++ b/definitions/grib1/grid_definition_60.def @@ -0,0 +1,17 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION spherical harmonic coefficients (including rotated, stretched, or stretched and rotated) +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 51; + +template commonBlock "grib1/grid_definition_spherical_harmonics.def"; + +# Rotation parameters +include "grid_rotation.def" \ No newline at end of file diff --git a/definitions/grib1/grid_definition_70.def b/definitions/grib1/grid_definition_70.def new file mode 100644 index 000000000..60abda636 --- /dev/null +++ b/definitions/grib1/grid_definition_70.def @@ -0,0 +1,19 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 52; + +template commonBlock "grib1/grid_definition_spherical_harmonics.def"; + +# Rotation parameters +include "grid_rotation.def" + +# Stretching parameters +include "grid_stretching.def" diff --git a/definitions/grib1/grid_definition_8.def b/definitions/grib1/grid_definition_8.def new file mode 100644 index 000000000..510820c31 --- /dev/null +++ b/definitions/grib1/grid_definition_8.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID Albers equal area +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 31; + +template commonBlock "grib1/grid_definition_lambert.def"; \ No newline at end of file diff --git a/definitions/grib1/grid_definition_80.def b/definitions/grib1/grid_definition_80.def new file mode 100644 index 000000000..3b1fe3f21 --- /dev/null +++ b/definitions/grib1/grid_definition_80.def @@ -0,0 +1,19 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 53; + +template commonBlock "grib1/grid_definition_spherical_harmonics.def"; + +# Rotation parameters +include "grid_rotation.def" + +# Stretching parameters +include "grid_stretching.def" diff --git a/definitions/grib1/grid_definition_90.def b/definitions/grib1/grid_definition_90.def new file mode 100644 index 000000000..e071c587a --- /dev/null +++ b/definitions/grib1/grid_definition_90.def @@ -0,0 +1,76 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION Space view perspective or orthographic +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 90; + +unsigned[2] Nx : dump; +alias numberOfPointsAlongXAxis = Nx; +alias Ni = Nx; +alias geography.Nx=Nx; + +unsigned[2] Ny : dump; +alias numberOfPointsAlongYAxis = Ny; +alias Nj = Ny; +alias geography.Ny=Ny; + +signed[3] latitudeOfSubSatellitePoint ; +meta geography.latitudeOfSubSatellitePointInDegrees scale(latitudeOfSubSatellitePoint,oneConstant,grib1divider,truncateDegrees) : dump; +alias Lap=latitudeOfSubSatellitePoint; + +signed[3] longitudeOfSubSatellitePoint ; +meta geography.longitudeOfSubSatellitePointInDegrees scale(longitudeOfSubSatellitePoint,oneConstant,grib1divider,truncateDegrees) : dump; +alias Lap=longitudeOfSubSatellitePoint; + +include "resolution_flags.def"; + +unsigned[3] dx : dump; +alias geography.dx=dx; + +unsigned[3] dy : dump; +alias geography.dy=dy; + +unsigned[2] XpInGridLengths : dump; +alias geography.XpInGridLengths=XpInGridLengths; + + +unsigned[2] YpInGridLengths : dump; +alias geography.YpInGridLengths=YpInGridLengths; + +include "scanning_mode.def"; + +unsigned[3] orientationOfTheGrid : edition_specific ; +meta geography.orientationOfTheGridInDegrees scale(orientationOfTheGrid,oneConstant,grib1divider,truncateDegrees) : dump; + +unsigned[3] NrInRadiusOfEarth : edition_specific,no_copy; +alias altitudeOfTheCameraFromTheEarthSCenterMeasuredInUnitsOfTheEarth = NrInRadiusOfEarth; + +unsigned[2] Xo : dump; +alias xCoordinateOfOriginOfSectorImage=Xo; +alias geography.Xo=Xo; + +unsigned[2] Yo : dump; +alias yCoordinateOfOriginOfSectorImage=Yo; +alias geography.Yo=Yo; + +#Ce Length is normally 32 + stretched and/or rotated +#Ce parameters + vertical coordinate parameters + list of +#Ce numbers of points. +#Ce (Lambert conformal and Mercator are 42 octets in length, +#Ce while Space view is 40 for ECMWF (44 in GRIB specification) +if ( centre != 98 ) { + pad padding_grid90_1(6); +} + +meta numberOfDataPoints number_of_points(Ni,Nj,PLPresent,pl) : dump; +alias numberOfPoints=numberOfDataPoints; +meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints,bitmapPresent,bitmap,numberOfCodedValues) : dump; +#alias ls.valuesCount=numberOfValues; + diff --git a/definitions/grib1/grid_definition_gaussian.def b/definitions/grib1/grid_definition_gaussian.def new file mode 100644 index 000000000..2b7e092ed --- /dev/null +++ b/definitions/grib1/grid_definition_gaussian.def @@ -0,0 +1,90 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[2] Ni : can_be_missing,dump; +alias numberOfPointsAlongAParallel= Ni ; +alias Nx =Ni; + +signed[2] Nj : dump; +alias numberOfPointsAlongAMeridian=Nj; +alias Ny=Nj; + +# Latitudes and Longitudes of the first and the last points +# Resolution and component flags +include "grid_first_last_resandcomp.def"; + +# Di - i direction increment +unsigned[2] iDirectionIncrement : can_be_missing,dump,edition_specific; +meta geography.iDirectionIncrementInDegrees scale(iDirectionIncrement,oneConstant,grib1divider,truncateDegrees) : can_be_missing,dump; +alias Di = iDirectionIncrement; + +# N - number of parallels between a pole and the equator +unsigned[2] N : dump ; +alias numberOfParallelsBetweenAPoleAndTheEquator=N; +alias geography.N=N; + +# for change_scanning_direction +alias yFirst=latitudeOfFirstGridPointInDegrees; +alias yLast=latitudeOfLastGridPointInDegrees; +alias xFirst=longitudeOfFirstGridPointInDegrees; +alias xLast=longitudeOfLastGridPointInDegrees; + +include "scanning_mode.def"; + +pad padding_grid4_1(4); + +alias latitudeFirstInDegrees = latitudeOfFirstGridPointInDegrees; +alias longitudeFirstInDegrees = longitudeOfFirstGridPointInDegrees; +alias latitudeLastInDegrees = latitudeOfLastGridPointInDegrees; +alias longitudeLastInDegrees = longitudeOfLastGridPointInDegrees; +alias DiInDegrees = iDirectionIncrementInDegrees; + +meta global global_gaussian(N,Ni,iDirectionIncrement, + latitudeOfFirstGridPoint, + longitudeOfFirstGridPoint, + latitudeOfLastGridPoint, + longitudeOfLastGridPoint) = 0 : dump; + +meta numberOfDataPoints number_of_points_gaussian(Ni,Nj,PLPresent,pl, + N, + latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees, + latitudeOfLastGridPointInDegrees,longitudeOfLastGridPointInDegrees) : dump; + +alias numberOfPoints=numberOfDataPoints; +meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints,bitmapPresent,bitmap,numberOfCodedValues) : dump; +#alias ls.valuesCount=numberOfValues; + +if(missing(Ni)){ + iterator gaussian_reduced(numberOfPoints,missingValue,values, + latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees, + latitudeOfLastGridPointInDegrees,longitudeOfLastGridPointInDegrees, + N,pl,Nj); + nearest reduced(values,radius,Nj,pl); + box reduced_gaussian(latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees, + latitudeOfLastGridPointInDegrees,longitudeOfLastGridPointInDegrees, + N,pl); +} else { + iterator gaussian(numberOfPoints,missingValue,values,longitudeFirstInDegrees, + DiInDegrees ,Ni,Nj,iScansNegatively , + latitudeFirstInDegrees, latitudeLastInDegrees, + N,jScansPositively); + nearest regular(values,radius,Ni,Nj); + # box regular_gaussian(latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees, + # latitudeOfLastGridPointInDegrees,longitudeOfLastGridPointInDegrees, +# DiInDegrees,Ni,N,iScansNegatively,jScansPositively); +} + +meta latLonValues latlonvalues(values); +alias latitudeLongitudeValues=latLonValues; +meta latitudes latitudes(values,0); +meta longitudes longitudes(values,0); +meta distinctLatitudes latitudes(values,1); +meta distinctLongitudes longitudes(values,1); + + diff --git a/definitions/grib1/grid_definition_lambert.def b/definitions/grib1/grid_definition_lambert.def new file mode 100644 index 000000000..f7a3a676d --- /dev/null +++ b/definitions/grib1/grid_definition_lambert.def @@ -0,0 +1,124 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[2] Nx : dump; +alias Ni = Nx; +alias numberOfPointsAlongXAxis = Nx; +alias geography.Nx=Nx; + +unsigned[2] Ny : dump; +alias Nj = Ny; +alias numberOfPointsAlongYAxis = Ny; +alias geography.Ny=Ny; + +# La1 - latitude of first grid point +signed[3] latitudeOfFirstGridPoint : edition_specific; +meta geography.latitudeOfFirstGridPointInDegrees + scale(latitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; +alias La1 = latitudeOfFirstGridPoint; +alias La1InDegrees=latitudeOfFirstGridPointInDegrees; +#meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPoint,thousand); + + +# Lo1 - longitude of first grid point +signed[3] longitudeOfFirstGridPoint : edition_specific; +meta geography.longitudeOfFirstGridPointInDegrees + scale(longitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; +alias Lo1 = longitudeOfFirstGridPoint; +alias Lo1InDegrees = longitudeOfFirstGridPointInDegrees; +#meta longitudeOfFirstGridPointInMicrodegrees times(longitudeOfFirstGridPoint,thousand); + +# Resolution and component flags +include "resolution_flags.def"; + +# LoV - orientation of the grid; i.e. the east longitude value of the meridian which is parallel to the Y-axis +signed[3] LoV : edition_specific ; +meta geography.LoVInDegrees + scale(LoV,oneConstant,grib1divider,truncateDegrees) : dump; +alias orientationOfTheGrid = LoV; +alias orientationOfTheGridInDegrees = LoVInDegrees; + +# Dx - X-direction grid length +unsigned[3] DxInMetres : dump; +alias xDirectionGridLength=DxInMetres; +alias geography.DxInMetres=DxInMetres ; +alias Dx = DxInMetres; +alias Di = DxInMetres; + + +# Dy - Y-direction grid length +unsigned[3] DyInMetres : dump; +alias yDirectionGridLength=DyInMetres; +alias geography.DyInMetres=DyInMetres; +alias Dy= DyInMetres; +alias Dj = DyInMetres; + + +unsigned[1] projectionCenterFlag : dump; + +# for change_scanning_direction +alias yFirst=latitudeOfFirstGridPointInDegrees; +alias xFirst=longitudeOfFirstGridPointInDegrees; + +include "scanning_mode.def"; + +# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere +signed[3] Latin1 : edition_specific; +meta geography.Latin1InDegrees scale(Latin1,oneConstant,grib1divider,truncateDegrees) : dump; +alias firstLatitude=Latin1; +alias firstLatitudeInDegrees=Latin1InDegrees; + +# GRIB Edition 1 does not have the LaD parameter so we use Latin1 instead +constant LaDInDegrees = Latin1InDegrees : dump; +alias geography.LaDInDegrees=LaDInDegrees; + +# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere +signed[3] Latin2 :edition_specific; +alias secondLatitude=Latin2; +meta geography.Latin2InDegrees scale(Latin2,oneConstant,grib1divider,truncateDegrees) : dump; +alias secondLatitudeInDegrees=Latin2InDegrees; + +signed[3] latitudeOfSouthernPole : no_copy; +meta geography.latitudeOfSouthernPoleInDegrees + scale(latitudeOfSouthernPole,oneConstant,grib1divider,truncateDegrees) : dump; + +signed[3] longitudeOfSouthernPole : no_copy; +meta geography.longitudeOfSouthernPoleInDegrees + scale(longitudeOfSouthernPole,oneConstant,grib1divider,truncateDegrees) : dump; + +meta numberOfDataPoints number_of_points(Nx,Ny,PLPresent,pl) : dump; +alias numberOfPoints=numberOfDataPoints; +meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints, + bitmapPresent,bitmap,numberOfCodedValues) : dump; +#alias ls.valuesCount=numberOfValues; + +iterator lambert_conformal(numberOfPoints,missingValue,values, + radius,Nx,Ny, + LoVInDegrees,LaDInDegrees, + Latin1InDegrees,Latin2InDegrees, + latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees, + Dx,Dy, + iScansNegatively, + jScansPositively, + jPointsAreConsecutive, + alternativeRowScanning); + + +meta latLonValues latlonvalues(values); +alias latitudeLongitudeValues=latLonValues; +meta latitudes latitudes(values,0); +meta longitudes longitudes(values,0); +#meta distinctLatitudes latitudes(values,1); +#meta distinctLongitudes longitudes(values,1); + + +pad padding_grid3_1(2); + +# END 1/grid_definition.lambert_conformal ---------------------------------------------------------------------- + diff --git a/definitions/grib1/grid_definition_latlon.def b/definitions/grib1/grid_definition_latlon.def new file mode 100644 index 000000000..80f77c8de --- /dev/null +++ b/definitions/grib1/grid_definition_latlon.def @@ -0,0 +1,73 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +unsigned[2] Ni : can_be_missing,dump; +alias numberOfPointsAlongAParallel=Ni; +alias Nx = Ni; + +unsigned[2] Nj : can_be_missing,dump; +alias numberOfPointsAlongAMeridian=Nj; +alias Ny = Nj; + +# Latitudes and Longitudes of the first and the last points +# Resolution and component flags +include "grid_first_last_resandcomp.def"; + +unsigned[2] iDirectionIncrement : can_be_missing, edition_specific; +unsigned[2] jDirectionIncrement : can_be_missing, edition_specific; +alias Dj = jDirectionIncrement; +alias Dy = jDirectionIncrement; +alias Di = iDirectionIncrement; +alias Dx = iDirectionIncrement; + +include "scanning_mode.def"; + +meta geography.jDirectionIncrementInDegrees latlon_increment(ijDirectionIncrementGiven,jDirectionIncrement, + jScansPositively, + latitudeOfFirstGridPointInDegrees,latitudeOfLastGridPointInDegrees, + numberOfPointsAlongAMeridian,oneConstant,grib1divider,0) : can_be_missing,dump; + +alias DjInDegrees=jDirectionIncrementInDegrees; +alias DyInDegrees=jDirectionIncrementInDegrees; + +meta geography.iDirectionIncrementInDegrees latlon_increment(ijDirectionIncrementGiven,iDirectionIncrement, + iScansPositively, + longitudeOfFirstGridPointInDegrees,longitudeOfLastGridPointInDegrees, + Ni,oneConstant,grib1divider,1) : can_be_missing,dump; +alias DiInDegrees=iDirectionIncrementInDegrees; +alias DxInDegrees=iDirectionIncrementInDegrees; + +meta numberOfDataPoints number_of_points(Ni,Nj,PLPresent,pl) : dump; +alias numberOfPoints=numberOfDataPoints; +meta numberOfValues number_of_values(values,bitsPerValue,numberOfDataPoints, + bitmapPresent,bitmap,numberOfCodedValues) : dump; +#alias ls.valuesCount=numberOfValues; + +if(missing(Ni)){ + iterator latlon_reduced(numberOfPoints,missingValue,values, + latitudeFirstInDegrees,longitudeFirstInDegrees, + latitudeLastInDegrees,longitudeLastInDegrees, + Nj,DjInDegrees,pl); + nearest latlon_reduced(values,radius,Nj,pl,longitudeFirstInDegrees,longitudeLastInDegrees); +} else { + iterator latlon(numberOfPoints,missingValue,values,longitudeFirstInDegrees, + DiInDegrees ,Ni,Nj,iScansNegatively , + latitudeFirstInDegrees,DjInDegrees,jScansPositively ); + nearest regular(values,radius,Ni,Nj); +} + + +meta latLonValues latlonvalues(values); +alias latitudeLongitudeValues=latLonValues; +meta latitudes latitudes(values,0); +meta longitudes longitudes(values,0); +meta distinctLatitudes latitudes(values,1); +meta distinctLongitudes longitudes(values,1); + diff --git a/definitions/grib1/grid_definition_spherical_harmonics.def b/definitions/grib1/grid_definition_spherical_harmonics.def new file mode 100644 index 000000000..c9c296790 --- /dev/null +++ b/definitions/grib1/grid_definition_spherical_harmonics.def @@ -0,0 +1,44 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# GRID DEFINITION spherical harmonic coefficients (including rotated, stretched, or stretched and rotated) + +# J - pentagonal resolution parameter +unsigned[2] J : dump ; +alias pentagonalResolutionParameterJ= J; +alias geography.J=J; + +# K - pentagonal resolution parameter +unsigned[2] K : dump; +alias pentagonalResolutionParameterK=K; +alias geography.K=K; + +# M - pentagonal resolution parameter +unsigned[2] M : dump ; +alias pentagonalResolutionParameterM=M; +alias geography.M=M; + +constant _T = -1 : hidden; +meta numberOfValues spectral_truncation(J,K,M,_T) : dump; +alias numberOfPoints=numberOfValues; +alias numberOfDataPoints=numberOfValues; +#alias ls.valuesCount=numberOfValues; + +# Representation type +codetable[1] representationType 'grib1/9.table' = 1 : no_copy; + +# Representation mode +codetable[1] representationMode 'grib1/10.table' = 2 : no_copy; + +# Set to zero +# (reserved) +pad padding_grid50_1(18); + +# For now, to make section2 happy +constant Nj = 0; diff --git a/definitions/grib1/grid_first_last_resandcomp.def b/definitions/grib1/grid_first_last_resandcomp.def new file mode 100644 index 000000000..aba416416 --- /dev/null +++ b/definitions/grib1/grid_first_last_resandcomp.def @@ -0,0 +1,42 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# La1 - latitude of first grid point +signed[3] latitudeOfFirstGridPoint : edition_specific; +meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) :dump; +alias La1 = latitudeOfFirstGridPoint; + +# Lo1 - longitude of first grid point +signed[3] longitudeOfFirstGridPoint : edition_specific; +meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; +alias Lo1 = longitudeOfFirstGridPoint; + +include "resolution_flags.def"; + +# La2 - latitude of last grid point +signed[3] latitudeOfLastGridPoint : edition_specific; +meta geography.latitudeOfLastGridPointInDegrees scale(latitudeOfLastGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; +alias La2 = latitudeOfLastGridPoint; + +# Lo2 - longitude of last grid point +signed[3] longitudeOfLastGridPoint : edition_specific; +meta geography.longitudeOfLastGridPointInDegrees scale(longitudeOfLastGridPoint,oneConstant,grib1divider,truncateDegrees) : dump; +alias Lo2 = longitudeOfLastGridPoint; + +# for change_scanning_direction +alias yFirst=latitudeOfFirstGridPointInDegrees; +alias yLast=latitudeOfLastGridPointInDegrees; +alias xFirst=longitudeOfFirstGridPointInDegrees; +alias xLast=longitudeOfLastGridPointInDegrees; + +alias latitudeFirstInDegrees = latitudeOfFirstGridPointInDegrees; +alias longitudeFirstInDegrees = longitudeOfFirstGridPointInDegrees; +alias latitudeLastInDegrees = latitudeOfLastGridPointInDegrees; +alias longitudeLastInDegrees = longitudeOfLastGridPointInDegrees; + diff --git a/definitions/grib1/grid_rotation.def b/definitions/grib1/grid_rotation.def new file mode 100644 index 000000000..0e649e665 --- /dev/null +++ b/definitions/grib1/grid_rotation.def @@ -0,0 +1,19 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +signed[3] latitudeOfSouthernPole : edition_specific; +meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfSouthernPole ,oneConstant,grib1divider,truncateDegrees) : dump; + +signed[3] longitudeOfSouthernPole : edition_specific ; +meta geography.longitudeOfSouthernPoleInDegrees scale(longitudeOfSouthernPole ,oneConstant,grib1divider,truncateDegrees) : dump; + +ibmfloat geography.angleOfRotationInDegrees : dump; + +alias angleOfRotation =angleOfRotationInDegrees; \ No newline at end of file diff --git a/definitions/grib1/grid_stretching.def b/definitions/grib1/grid_stretching.def new file mode 100644 index 000000000..fd38380db --- /dev/null +++ b/definitions/grib1/grid_stretching.def @@ -0,0 +1,19 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +signed[3] latitudeOfStretchingPole : edition_specific,no_copy; +signed[3] longitudeOfStretchingPole : edition_specific,no_copy; + +meta geography.latitudeOfStretchingPoleInDegrees + scale(latitudeOfStretchingPole,oneConstant,grib1divider,truncateDegrees) : dump; +meta geography.longitudeOfStretchingPoleInDegrees + scale(longitudeOfStretchingPole,oneConstant,grib1divider,truncateDegrees) : dump; +ibmfloat stretchingFactor : dump; +alias geography.stretchingFactor=stretchingFactor; + diff --git a/definitions/grib1/local.1.def b/definitions/grib1/local.1.def new file mode 100644 index 000000000..b630ec7c0 --- /dev/null +++ b/definitions/grib1/local.1.def @@ -0,0 +1,12 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Definition for BOM , same as ECWF +unsigned[1] localDefinitionNumber = 1 : dump; +template localDefinition "grib1/local.98.[localDefinitionNumber:l].def"; diff --git a/definitions/grib1/local.13.table b/definitions/grib1/local.13.table new file mode 100644 index 000000000..6d7aa09c3 --- /dev/null +++ b/definitions/grib1/local.13.table @@ -0,0 +1,5 @@ +# CODE TABLE local definition 13 (wave) +0 0 System and method are not included +1 1 System and method are included +2 2 System, method, reference date, climate date (from) and climate date (to) are included +3 3 All information in 2 plus leg information for variable resolution systems are included diff --git a/definitions/grib1/local.214.1.def b/definitions/grib1/local.214.1.def new file mode 100644 index 000000000..7feb6bcbc --- /dev/null +++ b/definitions/grib1/local.214.1.def @@ -0,0 +1,58 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.1 ---------------------------------------------------------------------- +# LOCAL 98 1 +# +# localDefinitionTemplate_001 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#spareSetToZero 52 PAD n/a 1 +# + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump; +if(perturbationNumber != 0) +{ + alias number = perturbationNumber; +} + +unsigned[1] numberOfForecastsInEnsemble : dump; +pad padding_local1_1(1); + +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=1; + +if (stepType is "instant" ) { + if (numberOfForecastsInEnsemble!=0) { + alias productDefinitionTemplateNumber=epsPoint; +} +} else { + if (numberOfForecastsInEnsemble!=0) { + alias productDefinitionTemplateNumber=epsContinous; +} +} + +# monthly mean +#if (timeRangeIndicator==113) { +#} + + +# END 1/local.98.1 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.214.244.def b/definitions/grib1/local.214.244.def new file mode 100644 index 000000000..9fa9a92b3 --- /dev/null +++ b/definitions/grib1/local.214.244.def @@ -0,0 +1,303 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.244 ---------------------------------------------------------------------- +# LOCAL 214 98 244 +# +#! +#! localDefinitionTemplate_244 +#! --------------------------- +#! +#! # SREPS Short-Range EPS information +#! +#! Last update: 20070223 +#! +#!Description Octet Code Ksec1 Count +#!----------- ----- ---- ----- ----- +#! +#! +#! Compatibility with MARS +#! +#localDefinitionNumber 41 I1 37 - +#Class 42 I1 38 - +#Type 43 I1 39 - +#Stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#Number. 50 I1 42 - +#Total. 51 I1 43 - +#! +#! **_EXPERIMENT_** +#! +#************_EXPERIMENT_************ 52 A4 44 - +#Experiment_Identifier_1 56 A4 45 - +#Experiment_Identifier_2 60 A4 46 - +#Sub-Experiment_Identifier_1 64 A4 47 - +#Sub-Experiment_Identifier_2 68 A4 48 - +#! +#! **_PRODUCT_** +#! +#************_PRODUCT_*************** 72 A4 49 - +#Original_CodeTable_2_Version_Number 76 I1 50 - +#Original_Parameter_Iden_(CodeTable2) 77 I1 51 - +#Original_Parameter_Identifier_1 78 A4 52 - +#Original_Parameter_Identifier_2 82 A4 53 - +#Product_Identifier_1 86 A4 54 - +#Product_Identifier_2 90 A4 55 - +#! +#! Thresholds and Distributions +#! +#Threshold_[Distribution]_(0=n,1=yes) 94 I2 56 - +#Threshold_[Distribution]_Units 96 A4 57 - +#At_least__[Distribut._Proportion_Of] 100 I4 58 - +#Less_Than_[To_Overall_Distribution] 104 I4 59 - +#! +#zeroForFutureProducts 108 PAD 60 40 +#! +#! **_ENSEMBLE_** +#! +#************_ENSEMBLE_************** 148 A4 100 - +#Number_Combination_Ensembles_(1=no) 152 I2 101 - +#Show_Combination_E._[2]_(0=no,1=yes) 154 I1 102 - +#Show_Combination_E._[3]_(0=no,1=yes) 155 I1 103 - +#Show_Combination_E._[4]_(0=no,1=yes) 156 I1 104 - +#zeroForFutureCombinations 157 PAD 105 7 +#Total_Number_Members_Used 164 I2 112 - +#Total_Number_Members_Possible 166 I2 113 - +#Total_Number_Members_Missing 168 I2 114 - +#Ensemble_Combination_Number 170 I2 115 - +#Ensemble_Identifier_1 172 A4 116 - +#Ensemble_Identifier_2 176 A4 117 - +#Local_Number_Members_Used 180 I2 118 - +#Local_Number_Members_Possible 182 I2 119 - +#Local_Number_Members_Missing 184 I2 120 - +#! +#listMembersUsed - LIST - Local_Number_Members_Used +#Used_Model_LBC - A4 - - +#endlistMembersUsed - ENDLIST - listMembersUsed +#! +#listMembersMissing - LIST - Local_Number_Members_Missing +#Missing_Model_LBC - A4 - - +#endlistMembersMissing - ENDLIST - listMembersMissing +#! +#! More than one Combination +#! +#listEnsembleCombination2 - LIST - Show_Combination_E._[2]_(0=no,1=yes) +#Ensemble_Combinat._Number_(0=no)_[2] - I2 - - +#Ensemble_Identifier_1_[2] - A4 - - +#Ensemble_Identifier_2_[2] - A4 - - +#Local_Number_Members_Used_[2] - I2 - - +#Local_Number_Members_Possible_[2] - I2 - - +#Local_Number_Members_Missing_[2] - I2 - - +#Date_[2] - D3 - - +#Hour_[2] - I1 - - +#Minute_[2] - I1 - - +#Time_Range_One_[2] - I2 - - +#Time_Range_Two_[2] - I2 - - +#endlistEnsembleCombination2 - ENDLIST - listEnsembleCombination2 +#! +#listMembersUsed_[2] - LIST - Local_Number_Members_Used_[2] +#Used_Model_LBC_[2] - A4 - - +#endlistMembersUsed_[2] - ENDLIST - listMembersUsed_[2] +#! +#listMembersMissing_[2] - LIST - Local_Number_Members_Missing_[2] +#Missing_Model_LBC_[2] - A4 - - +#endlistMembersMissing_[2] - ENDLIST - listMembersMissing_[2] +#! +#listEnsembleCombination3 - LIST - Show_Combination_E._[3]_(0=no,1=yes) +#Ensemble_Combinat._Number_(0=no)_[3] - I2 - - +#Ensemble_Identifier_1_[3] - A4 - - +#Ensemble_Identifier_1_[3] - A4 - - +#Local_Number_Members_Used_[3] - I2 - - +#Local_Number_Members_Possible_[3] - I2 - - +#Local_Number_Members_Missing_[3] - I2 - - +#Date_[3] - D3 - - +#Hour_[3] - I1 - - +#Minute_[3] - I1 - - +#Time_Range_One_[3] - I2 - - +#Time_Range_Two_[3] - I2 - - +#endlistEnsembleCombination3 - ENDLIST - listEnsembleCombination3 +#! +#listMembersUsed_[3] - LIST - Local_Number_Members_Used_[3] +#Used_Model_LBC_[3] - A4 - - +#endlistMembersUsed_[3] - ENDLIST - listMembersUsed_[3] +#! +#listMembersMissing_[3] - LIST - Local_Number_Members_Missing_[3] +#Missing_Model_LBC_[3] - A4 - - +#endlistMembersMissing_[3] - ENDLIST - listMembersMissing_[3] +#! +#listEnsembleCombination4 - LIST - Show_Combination_E._[4]_(0=no,1=yes) +#Ensemble_Combinat._Number_(0=no)_[4] - I2 - - +#Ensemble_Identifier_1_[4] - A4 - - +#Ensemble_Identifier_2_[4] - A4 - - +#Local_Number_Members_Used_[4] - I2 - - +#Local_Number_Members_Possible_[4] - I2 - - +#Local_Number_Members_Missing_[4] - I2 - - +#Date_[4] - D3 - - +#Hour_[4] - I1 - - +#Minute_[4] - I1 - - +#Time_Range_One_[4] - I2 - - +#Time_Range_Two_[4] - I2 - - +#endlistEnsembleCombination4 - ENDLIST - listEnsembleCombination4 +#! +#listMembersUsed_[4] - LIST - Local_Number_Members_Used_[4] +#Used_Model_LBC_[4] - A4 - - +#endlistMembersUsed_[4] - ENDLIST - listMembersUsed_[4] +#! +#listMembersMissing_[4] - LIST - Local_Number_Members_Missing_[4] +#Missing_Model_LBC_[4] - A4 - - +#endlistMembersMissing_[4] - ENDLIST - listMembersMissing_[4] +#! +#! EXTRA INFORMATION like 191 +#! +#*********_EXTRA_DATA_*************** - A4 - - +#Extra_Data_FreeFormat_(0=none) - I2 - - +#Data_Descriptor_Bytes - BYTES - Extra_Data_FreeFormat_(0=none) +#padToAMultipleOf80Bytes - PADFROM n/a 80 +#! +# + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump ; +alias number = perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump; + +# +# **_EXPERIMENT_** +# + +ascii[4] '************_EXPERIMENT_************' ; +ascii[8] 'Experiment_Identifier' ; +ascii[8] 'Sub-Experiment_Identifier' ; + +# +# **_PRODUCT_** +# + +ascii[4] '************_PRODUCT_***************' ; +unsigned[1] Original_CodeTable_2_Version_Number : dump ; +unsigned[1] Original_Parameter_Iden_CodeTable2 : dump; +ascii[8] 'Original_Parameter_Identifier' ; +ascii[8] 'Product_Identifier' ; + +# Thresholds and Distributions + +unsigned[2] Threshold_Or_Distribution_0_no_1_yes : dump ; +ascii[4] 'Threshold_Or_Distribution_Units' ; +unsigned[4] At_least__Or_Distribut_Proportion_Of : dump ; +unsigned[4] Less_Than_Or_To_Overall_Distribution : dump ; + +pad padding_loc244_1(40); + +ascii[4] '************_ENSEMBLE_**************' ; +unsigned[2] Number_Combination_Ensembles_1_none : dump ; +unsigned[1] Show_Combination_Ensem_E2_0_no_1_yes : dump ; +unsigned[1] Show_Combination_Ensem_E3_0_no_1_yes : dump ; +unsigned[1] Show_Combination_Ensem_E4_0_no_1_yes : dump ; + +pad padding_loc244_2(7); + +unsigned[2] Total_Number_Members_Used : dump; +unsigned[2] Total_Number_Members_Possible : dump ; +unsigned[2] Total_Number_Members_Missing : dump ; +unsigned[2] Ensemble_Combination_Number : dump ; +ascii[8] 'Ensemble_Identifier' ; +unsigned[2] Local_Number_Members_Used : dump ; +unsigned[2] Local_Number_Members_Possible : dump ; +unsigned[2] Local_Number_Members_Missing : dump ; + +listMembersUsed list(Local_Number_Members_Used){ +ascii[4] 'Used_Model_LBC' ; +} + +listMembersMissing list(Local_Number_Members_Missing){ +ascii[4] 'Missing_Model_LBC' ; +} + +# +# More than one Combination +# + +if (Show_Combination_Ensem_E2_0_no_1_yes == 1){ +unsigned[2] Ensemble_Combinat_Number_0_none_E2 : dump ; +ascii[8] 'Ensemble_Identifier_E2' ; +unsigned[2] Local_Number_Members_Used_E2 : dump ; +unsigned[2] Local_Number_Members_Possible_E2 : dump ; +unsigned[2] Local_Number_Members_Missing_E2 : dump ; +unsigned[3] Date_E2 : dump; +unsigned[1] Hour_E2 : dump; +unsigned[1] Minute_E2 : dump; +unsigned[2] Time_Range_One_E2 : dump ; +unsigned[2] Time_Range_Two_E2 : dump; + +listMembersUsed2 list(Local_Number_Members_Used_E2){ +ascii[4] 'Used_Model_LBC_E2' ; +} + +listMembersMissing2 list(Local_Number_Members_Missing_E2){ +ascii[4] 'Missing_Model_LBC_E2' ; +} +} + +if (Show_Combination_Ensem_E3_0_no_1_yes == 1){ +unsigned[2] Ensemble_Combinat_Number_0_none_E3 : dump ; +ascii[8] 'Ensemble_Identifier_E3' ; +unsigned[2] Local_Number_Members_Used_E3 : dump; +unsigned[2] Local_Number_Members_Possible_E3 : dump; +unsigned[2] Local_Number_Members_Missing_E3 : dump; +unsigned[3] Date_E3 : dump; +unsigned[1] Hour_E3 : dump; +unsigned[1] Minute_E3 : dump; +unsigned[2] Time_Range_One_E3 : dump; +unsigned[2] Time_Range_Two_E3 : dump; + +listMembersUsed3 list(Local_Number_Members_Used_E3){ +ascii[4] 'Used_Model_LBC_E3' ; +} + +listMembersMissing3 list(Local_Number_Members_Missing_E3){ +ascii[4] 'Missing_Model_LBC_E3' ; +} +} + +if (Show_Combination_Ensem_E4_0_no_1_yes == 1){ +unsigned[2] Ensemble_Combinat_Number_0_none_E4 : dump ; +ascii[8] 'Ensemble_Identifier_E4' ; +unsigned[2] Local_Number_Members_Used_E4 : dump; +unsigned[2] Local_Number_Members_Possible_E4 : dump; +unsigned[2] Local_Number_Members_Missing_E4 : dump; +unsigned[3] Date_E4 : dump; +unsigned[1] Hour_E4 : dump; +unsigned[1] Minute_E4 : dump; +unsigned[2] Time_Range_One_E4 : dump ; +unsigned[2] Time_Range_Two_E4 : dump; + +listMembersUsed4 list(Local_Number_Members_Used_E4){ +ascii[4] 'Used_Model_LBC_E4' ; +} + +listMembersMissing4 list(Local_Number_Members_Missing_E4){ +ascii[4] 'Missing_Model_LBC_E4' ; +} +} + +# +# EXTRA INFORMATION like 191 +# + +ascii[4] '*********_EXTRA_DATA_***************' ; +unsigned[2] Extra_Data_FreeFormat_0_none : dump; +position offsetFreeFormData; +unsigned[1] freeFormData[Extra_Data_FreeFormat_0_none] : dump; +# +padtomultiple padding_loc244_3(offsetSection1,80); +# + +# END 1/local.98.5 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.214.245.def b/definitions/grib1/local.214.245.def new file mode 100644 index 000000000..0afdfcebf --- /dev/null +++ b/definitions/grib1/local.214.245.def @@ -0,0 +1,65 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.245 ---------------------------------------------------------------------- +# LOCAL 214 98 245 +# +#! +#! localDefinitionTemplate_245 +#! --------------------------- +#! +#! # Members iformation of +#! # SREPS Short-Range EPS +#! +#! Last update: 20070323 +#! +#!Description Octet Code Ksec1 Count +#!----------- ----- ---- ----- ----- +#! +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#Model_Identifier 52 A8 44 - +#LBC_Initial_Conditions 60 A8 46 - +#Model_LBC_Member_Identifier 68 A4 48 - +#Model_Additional_Information 72 A8 49 - +#zeroForFutureDevelopments 80 PAD 51 20 +#Extra_Data_FreeFormat_(0=none) 100 I2 71 - +#Data_Descriptor_Bytes 102 BYTES 72 Extra_Data_FreeFormat_(0=none) +#padToAMultipleOf80Bytes 103 PADFROM n/a 80 +#! +# + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump; +alias number = perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump ; + +ascii[8] 'Model_Identifier' ; +ascii[8] 'LBC_Initial_Conditions' ; +ascii[4] 'Model_LBC_Member_Identifier' ; +ascii[8] 'Model_Additional_Information' ; + +pad padding_loc245_1(20); + +unsigned[2] Extra_Data_FreeFormat_0_none : dump ; +position offsetFreeFormData; +unsigned[1] freeFormData[Extra_Data_FreeFormat_0_none] : dump ; + +# +padtomultiple padding_loc245_2(offsetSection1,80); +# + +# END 1/local.98.245 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.214.def b/definitions/grib1/local.214.def new file mode 100644 index 000000000..2b9e13ba3 --- /dev/null +++ b/definitions/grib1/local.214.def @@ -0,0 +1,3 @@ +codetable[1] localDefinitionNumber 'grib1/localDefinitionNumber.214.table' = 244 : dump; +template localDefinition "grib1/local.214.[localDefinitionNumber:l].def"; + diff --git a/definitions/grib1/local.253.def b/definitions/grib1/local.253.def new file mode 100644 index 000000000..923ba8199 --- /dev/null +++ b/definitions/grib1/local.253.def @@ -0,0 +1,12 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "local.253.def"; + + diff --git a/definitions/grib1/local.254.def b/definitions/grib1/local.254.def new file mode 100644 index 000000000..6a42f65d0 --- /dev/null +++ b/definitions/grib1/local.254.def @@ -0,0 +1,10 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "EUMETSAT local definition (unknown)"; diff --git a/definitions/grib1/local.34.def b/definitions/grib1/local.34.def new file mode 100644 index 000000000..ba2fccbd9 --- /dev/null +++ b/definitions/grib1/local.34.def @@ -0,0 +1 @@ +label "JMA - extension"; diff --git a/definitions/grib1/local.46.def b/definitions/grib1/local.46.def new file mode 100644 index 000000000..a69f24d78 --- /dev/null +++ b/definitions/grib1/local.46.def @@ -0,0 +1,13 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "CPTEC local definition"; +# Same as NCEP +include "local.7.def"; +section_padding local_padding; diff --git a/definitions/grib1/local.54.def b/definitions/grib1/local.54.def new file mode 100644 index 000000000..2227db96f --- /dev/null +++ b/definitions/grib1/local.54.def @@ -0,0 +1,33 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "CMC local definition (Canada)"; +# START 1/local.7.1 ---------------------------------------------------------------------- +# LOCAL 7 1 +# +# CMC localDefinitionTemplate, based on KWBC +# -------------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +# + +unsigned[1] applicationIdentifier : dump ; + +unsigned[1] type : dump; + +unsigned[1] identificationNumber : dump; + +unsigned[1] productIdentifier : dump ; + +unsigned[1] spatialSmoothingOfProduct : dump ; + +# + + diff --git a/definitions/grib1/local.7.1.def b/definitions/grib1/local.7.1.def new file mode 100644 index 000000000..5388fdd44 --- /dev/null +++ b/definitions/grib1/local.7.1.def @@ -0,0 +1,100 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.7.1 ---------------------------------------------------------------------- +# LOCAL 7 1 +# +# KWBC localDefinitionTemplate_001 +# -------------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +# +#sectionLength 1 L3 n/a ignore +#applicationIdentifier 41 I1 37 - +#type 42 I1 38 - +#identificationNumber 43 I1 39 - +#productIdentifier 44 I1 40 - +#spatialSmoothingOfProduct 45 I1 41 - +#! +#if_ge_46 - IF_GT 45 sectionLength +#probProductDefinition 46 I1 42 - +#probabilityType 47 I1 43 - +#lowerLimit 48 I4 44 - +#upperLimit 52 I4 45 - +#padding 56 PAD n/a 5 +#endif_ge_46 - ENDIF if_ge_46 +#! +#if_ge_61 - IF_GT 60 sectionLength +#ensembleSize 61 I1 46 - +#clusterSize 62 I1 47 - +#numberOfClusters 63 I1 48 - +#clusteringMethod 64 I1 49 - +#northLatitudeOfCluster 65 S3 50 - +#southLatitudeOfCluster 68 S3 51 - +#westLongitudeOfCluster 71 S3 52 - +#eastLongitudeOfCluster 74 S3 53 - +#clusterMember1 77 I1 54 - +#clusterMember2 78 I1 55 - +#clusterMember3 79 I1 56 - +#clusterMember4 80 I1 57 - +#clusterMember5 81 I1 58 - +#clusterMember6 82 I1 59 - +#clusterMember7 83 I1 60 - +#clusterMember8 84 I1 61 - +#clusterMember9 85 I1 62 - +#clusterMember10 86 I1 63 - +#endif_ge_61 - ENDIF if_ge_61 + +#applicationIdentifier 1= ensemble + +#unsigned[1] applicationIdentifier : dump ; # 1= ensemble +unsigned[1] type : dump ; # 1=unperturbed control forecast,2=individual negative perturbed fcst 3=individual positive perturbed fcst, 4=cluster, 5=whole cluster +unsigned[1] identificationNumber : dump ; # if(type=1) { 1=high resolution control fcst, 2=low resolution control fcst} else { ensemble number } +unsigned[1] productIdentifier : dump; # 1= full field, 2=weighted mean, 3= etc +unsigned[1] spatialSmoothingOfProduct : dump ; +# +constant sectionLengthLimitForProbability = 45 : dump; +if(section1Length > sectionLengthLimitForProbability) +{ + unsigned[1] probProductDefinition : dump; + unsigned[1] probabilityType : dump; + unsigned[4] lowerLimit : dump; + unsigned[4] upperLimit : dump; + + # padding + pad padding_local_7_1(5); +} + +# +constant sectionLengthLimitForEnsembles = 60; + +if(section1Length > sectionLengthLimitForEnsembles) +{ + unsigned[1] ensembleSize : dump ; + unsigned[1] clusterSize : dump; + unsigned[1] numberOfClusters : dump ; + unsigned[1] clusteringMethod : dump ; + signed[3] northLatitudeOfCluster : dump ; + signed[3] southLatitudeOfCluster : dump ; + signed[3] westLongitudeOfCluster : dump ; + signed[3] eastLongitudeOfCluster : dump ; + unsigned[1] clusterMember1 : dump ; + unsigned[1] clusterMember2 : dump ; + unsigned[1] clusterMember3 : dump ; + unsigned[1] clusterMember4 : dump ; + unsigned[1] clusterMember5 : dump ; + unsigned[1] clusterMember6 : dump ; + unsigned[1] clusterMember7 : dump ; + unsigned[1] clusterMember8 : dump ; + unsigned[1] clusterMember9 : dump ; + unsigned[1] clusterMember10 : dump ; +} + +# END 1/local.7.1 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.7.def b/definitions/grib1/local.7.def new file mode 100644 index 000000000..94937ee8c --- /dev/null +++ b/definitions/grib1/local.7.def @@ -0,0 +1,3 @@ +codetable[1] localDefinitionNumber 'grib1/localDefinitionNumber.7.table' = 1 : dump; +template localDefinition "grib1/local.7.[localDefinitionNumber:l].def"; + diff --git a/definitions/grib1/local.78.def b/definitions/grib1/local.78.def new file mode 100644 index 000000000..3b2de1fe9 --- /dev/null +++ b/definitions/grib1/local.78.def @@ -0,0 +1,2 @@ +# Local definition for Offenbach +label "Local definition for Offenbach"; diff --git a/definitions/grib1/local.80.def b/definitions/grib1/local.80.def new file mode 100644 index 000000000..4b3a245fd --- /dev/null +++ b/definitions/grib1/local.80.def @@ -0,0 +1,11 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +#Local definition for Rome +label "Local definition for Rome CNMC"; diff --git a/definitions/grib1/local.96.def b/definitions/grib1/local.96.def new file mode 100644 index 000000000..06d1b9346 --- /dev/null +++ b/definitions/grib1/local.96.def @@ -0,0 +1,3 @@ +codetable[1] localDefinitionNumber 'grib1/localDefinitionNumber.[centre:l].table' = 1 : dump; +template localDefinition "grib1/local.[centre:l].[localDefinitionNumber:l].def"; + diff --git a/definitions/grib1/local.98.1.def b/definitions/grib1/local.98.1.def new file mode 100644 index 000000000..0ecc734c5 --- /dev/null +++ b/definitions/grib1/local.98.1.def @@ -0,0 +1,79 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.1 ---------------------------------------------------------------------- +# LOCAL 98 1 +# +# localDefinitionTemplate_001 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#spareSetToZero 52 PAD n/a 1 +# +constant GRIBEXSection1Problem = 52 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump; +alias number = perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; +pad padding_local1_1(1); + +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=1; + +if (stepType is "instant" ) { + if (type is "em" || type is "es" ) { + alias productDefinitionTemplateNumber=epsStatisticsPoint; + } else { + if (numberOfForecastsInEnsemble!=0) { + if ((perturbationNumber/2)*2 == perturbationNumber) { + alias typeOfEnsembleForecast=two; + } else { + alias typeOfEnsembleForecast=three; + } + alias productDefinitionTemplateNumber=epsPoint; + } else { + alias productDefinitionTemplateNumber=zero; + } + } +} else { + if (type is "em" || type is "es" ) { + alias productDefinitionTemplateNumber=epsStatisticsContinous; + } else { + if (numberOfForecastsInEnsemble!=0) { + if ((perturbationNumber/2)*2 == perturbationNumber) { + alias typeOfEnsembleForecast=two; + } else { + alias typeOfEnsembleForecast=three; + } + alias productDefinitionTemplateNumber=epsContinous; + } else { + alias productDefinitionTemplateNumber=eight; + } + } +} + +# monthly mean +#if (timeRangeIndicator==113) { +#} + + +# END 1/local.98.1 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.10.def b/definitions/grib1/local.98.10.def new file mode 100644 index 000000000..51a0e2a41 --- /dev/null +++ b/definitions/grib1/local.98.10.def @@ -0,0 +1,97 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 1/local.98.10 ---------------------------------------------------------------------- +# LOCAL 98 10 +# +# localDefinitionTemplate_010 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +# +#number 50 I1 42 - +#total 51 I1 43 - +#centralClusterDefinition 52 I1 44 - +#parameterIndicator 53 I1 45 - +#levelIndicator 54 I1 46 - +#northLatitudeOfDomainOfTubing 55 S3 47 - +#westLongitudeOfDomainOfTubing 58 S3 48 - +#southLatitudeOfDomainOfTubing 61 S3 49 - +#eastLongitudeOfDomainOfTubing 64 S3 50 - +#numberOfOperationalForecastTube 67 I1 51 - +#numberOfControlForecastTube 68 I1 52 - +#heightOrPressureOfLevel 69 I2 53 - +#referenceStep 71 I2 54 - +#radiusOfCentralCluster 73 I2 55 - +#ensembleStandardDeviation 75 I2 56 - +#distanceFromTubeToEnsembleMean 77 I2 57 - +#numberOfForecastsInTube 79 I1 58 - +#ensembleForecastNumbers 80 LP_I1 59 numberOfForecastsInTube +#spareToEnsureFixedLength - PADTO n/a 334 +# + +constant GRIBEXSection1Problem = 334 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] tubeNumber : dump; + +unsigned[1] totalNumberOfTubes : dump; +unsigned[1] centralClusterDefinition : dump; + +unsigned[1] parameterIndicator : dump; +#alias indicatorOfParameter = parameterIndicator; + +unsigned[1] levelIndicator : dump; + +signed[3] northLatitudeOfDomainOfTubing : dump; + +signed[3] westLongitudeOfDomainOfTubing : dump; + +signed[3] southLatitudeOfDomainOfTubing : dump; + +signed[3] eastLongitudeOfDomainOfTubing : dump; + +unsigned[1] numberOfOperationalForecastTube : dump; + +unsigned[1] numberOfControlForecastTube : dump; + +unsigned[2] heightOrPressureOfLevel : dump; + +unsigned[2] referenceStep : dump; + +unsigned[2] radiusOfCentralCluster : dump; + +unsigned[2] ensembleStandardDeviation : dump; + +unsigned[2] distanceFromTubeToEnsembleMean : dump; + +unsigned[1] numberOfForecastsInTube : dump; + +unsigned[1] ensembleForecastNumbers[numberOfForecastsInTube] : dump; + +# spareToEnsureFixedLength +padto padding_loc10_1(offsetSection1 + 334); + +concept tubeDomain(unknown,"tube_domain.def",conceptsMasterDir,conceptsLocalDirAll): no_copy; + +alias number = tubeNumber; +alias totalNumber = totalNumberOfTubes; +alias reference = referenceStep; +alias domain = tubeDomain; + + + diff --git a/definitions/grib1/local.98.11.def b/definitions/grib1/local.98.11.def new file mode 100644 index 000000000..fd8fef3d4 --- /dev/null +++ b/definitions/grib1/local.98.11.def @@ -0,0 +1,75 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.11 ---------------------------------------------------------------------- +# LOCAL 98 11 +# +# localDefinitionTemplate_011 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#classOfAnalysis 50 I1 42 - +#typeOfAnalysis 51 I1 43 - +#streamOfAnalysis 52 I2 44 - +#experimentVersionNumberOfAnalysis 54 A4 45 - +#yearOfAnalysis 58 I1 46 - +#monthOfAnalysis 59 I1 47 - +#dayOfAnalysis 60 I1 48 - +#hourOfAnalysis 61 I1 49 - +#minuteOfAnalysis 62 I1 50 - +#centuryOfAnalysis 63 I1 51 - +#originatingCentreOfAnalysis 64 I1 52 - +#subcentreOfAnalysis 65 I1 53 - +#spareSetToZero 66 PAD n/a 7 +# + +constant GRIBEXSection1Problem = 72 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] classOfAnalysis = marsClass : dump; +unsigned[1] typeOfAnalysis = marsType : dump; +unsigned[2] streamOfAnalysis = marsStream : dump; +ksec1expver[4] experimentVersionNumberOfAnalysis = expver : dump; + +unsigned[1] yearOfAnalysis = yearOfCentury : dump; +unsigned[1] monthOfAnalysis = month : dump; +unsigned[1] dayOfAnalysis = day : dump; + +unsigned[1] hourOfAnalysis = hour : dump; + +unsigned[1] minuteOfAnalysis = minute : dump; + +unsigned[1] centuryOfAnalysis = centuryOfReferenceTimeOfData : dump; + +unsigned[1] originatingCentreOfAnalysis = originatingCentre : dump; + +unsigned[1] subcentreOfAnalysis = subCentre : dump; + +# spareSetToZero +pad padding_local11_1(7); + +constant secondsOfAnalysis = 0; + +meta dateOfAnalysis g1date(centuryOfAnalysis,yearOfAnalysis,monthOfAnalysis,dayOfAnalysis) : dump; +meta timeOfAnalysis time(hourOfAnalysis,minuteOfAnalysis,secondsOfAnalysis) : dump; + +alias date = dateOfAnalysis; +alias time = timeOfAnalysis; + + +# --------------------------------------------------------- + +# END 1/local.98.11 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.13.def b/definitions/grib1/local.98.13.def new file mode 100644 index 000000000..b57de821b --- /dev/null +++ b/definitions/grib1/local.98.13.def @@ -0,0 +1,196 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.13 ---------------------------------------------------------------------- +# LOCAL 98 13 +# +# localDefinitionTemplate_013 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#directionNumber 52 I1 44 - +#frequencyNumber 53 I1 45 - +#numberOfDirections 54 I1 46 - +#numberOfFrequencies 55 I1 47 - +#directionScalingFactor 56 I4 48 - +#frequencyScalingFactor 60 I4 49 - +#flag 64 F1 - 3 +#scaledDirections 101 LP_I4 50 numberOfDirections +#scaledFrequencies - LP_I4 - numberOfFrequencies +# + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump; +alias number = perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump ; +alias totalNumber=numberOfForecastsInEnsemble; + +unsigned[1] directionNumber : dump ; +alias mars.direction = directionNumber; + +unsigned[1] frequencyNumber : dump ; +alias mars.frequency = frequencyNumber; + +unsigned[1] numberOfDirections : dump ; +alias totalNumberOfDirections = numberOfDirections ; + +unsigned[1] numberOfFrequencies : dump; +alias totalNumberOfFrequencies = numberOfFrequencies ; + +unsigned[4] directionScalingFactor : dump; +alias integerScalingFactorAppliedToDirections = directionScalingFactor; + +unsigned[4] frequencyScalingFactor : dump; +alias integerScalingFactorAppliedToFrequencies = frequencyScalingFactor ; + +codetable[1] localFlag "grib1/local.13.table" = 4; + +#! +#! Old versions of wave 2D spectra direction and frequency do not +#! have the systemNumber and methodNumber, and the flag is set to 0. +#! +#if0 - IF_EQ 0 flag +#spareSetToZero 65 PAD n/a 36 +#endif0 - ENDIF if0 +if(localFlag == 0) +{ + pad padding_loc13_1(36); +} + +#! +#! Old versions of wave 2D spectra direction and frequency do not +#! have the systemNumber and methodNumber, and the flag is set to 0. +#! +#! +#! +#if1 - IF_EQ 1 flag +#systemNumber 065 I2 - - +#methodNumber 067 I2 - - +#spareSetToZero1 069 PAD n/a 32 +#endif1 - ENDIF if1 +if(localFlag == 1) +{ + unsigned[2] systemNumber : dump; + unsigned[2] methodNumber : dump; + alias system = systemNumber; + alias method = methodNumber; + pad padding_loc13_2(32); +} + +#if2 - IF_EQ 2 flag +#systemNumber 065 I2 - - +#methodNumber 067 I2 - - +#referenceDate 069 I4 - - +#climateDateFrom 073 I4 - - +#climateDateTo 077 I4 - - +#spareSetToZero2 081 PAD n/a 20 +#endif2 - ENDIF if2 +if(localFlag == 2) +{ + unsigned[2] systemNumber : dump; + unsigned[2] methodNumber : dump; + unsigned[4] referenceDate : dump ; + unsigned[4] climateDateFrom : dump ; + unsigned[4] climateDateTo : dump ; + alias system = systemNumber; + alias method = methodNumber; + alias refdate = referenceDate; + pad padding_loc13_3(20); +} + +#if3 - IF_EQ 3 flag +#systemNumber 065 I2 - - +#methodNumber 067 I2 - - +#referenceDate 069 I4 - - +#climateDateFrom 073 I4 - - +#climateDateTo 077 I4 - - +#legBaseDate 081 I4 - - +#legBaseTime 085 I2 - - +#legNumber 087 I1 - - +#oceanAtmosphereCoupling 088 I1 - - +#spareSetToZero3 089 PAD n/a 12 +#endif3 - ENDIF if3 +if(localFlag == 3) +{ + unsigned[2] systemNumber = 65535 : dump,can_be_missing ; + unsigned[2] methodNumber = 65535 : dump,can_be_missing ; + unsigned[4] referenceDate : dump ; + unsigned[4] climateDateFrom : dump ; + unsigned[4] climateDateTo : dump ; + unsigned[4] legBaseDate : dump; + alias baseDateOfThisLeg = legBaseDate; + unsigned[2] legBaseTime : dump; + alias baseTimeOfThisLeg = legBaseTime; + unsigned[1] legNumber : dump; + unsigned[1] oceanAtmosphereCoupling : dump; + pad padding_loc13_4(12); + alias system = systemNumber; + alias method = methodNumber; + alias refdate = referenceDate; + + alias mars._leg_number = legNumber; +} + +#if4 - IF_EQ 4 flag +#systemNumber 065 I2 - - +#methodNumber 067 I2 - - +#referenceDate 069 I4 - - +#climateDateFrom 073 I4 - - +#climateDateTo 077 I4 - - +#legBaseDate 081 I4 - - +#legBaseTime 085 I2 - - +#legNumber 087 I1 - - +#oceanAtmosphereCoupling 088 I1 - - +#offsetToEndOf4DvarWindow 089 I2 - - +#lengthOf4DvarWindow 091 I2 - - +#spareSetToZero3 093 PAD n/a 8 +#endif4 - ENDIF if4 +if(localFlag == 4) +{ + unsigned[2] systemNumber = 65535 : dump,can_be_missing ; + unsigned[2] methodNumber = 65535 : dump,can_be_missing ; + unsigned[4] referenceDate : dump ; + unsigned[4] climateDateFrom : dump ; + unsigned[4] climateDateTo : dump ; + unsigned[4] legBaseDate : dump; + alias baseDateOfThisLeg = legBaseDate; + unsigned[2] legBaseTime : dump; + alias baseTimeOfThisLeg = legBaseTime; + unsigned[1] legNumber : dump; + unsigned[1] oceanAtmosphereCoupling : dump; + + # Hours + unsigned[2] offsetToEndOf4DvarWindow : dump; + unsigned[2] lengthOf4DvarWindow : dump; + + alias system = systemNumber; + alias method = methodNumber; + alias refdate = referenceDate; + + alias mars._leg_number = legNumber; + + pad padding_loc13_5(8); +} + + unsigned[4] scaledDirections[numberOfDirections] : dump; + unsigned[4] scaledFrequencies[numberOfFrequencies] : dump; + +constant GRIBEXSection1Problem = 100 + 4 * numberOfDirections + 4 * numberOfFrequencies - section1Length ; + +# END 1/local.98.13 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.14.def b/definitions/grib1/local.98.14.def new file mode 100644 index 000000000..0379df571 --- /dev/null +++ b/definitions/grib1/local.98.14.def @@ -0,0 +1,61 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.14 ---------------------------------------------------------------------- +# LOCAL 98 14 +# +# localDefinitionTemplate_014 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#channelNumber 52 I1 44 - +#scalingFactorForFrequencies 53 I4 45 - +#numberOfFrequencies 57 I1 46 - +#spareSetToZero 58 PAD n/a 3 +#listOfScaledFrequencies 61 LP_I4 47 numberOfFrequencies +#moreSpareSetToZero - PADTO - 1080 +# + +constant GRIBEXSection1Problem = 1080 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump; +alias number = perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump ; +alias totalNumber=numberOfForecastsInEnsemble; + +unsigned[1] channelNumber : dump ; +alias mars.channel = channelNumber; + +unsigned[4] scalingFactorForFrequencies : dump ; +alias integerScalingFactorAppliedToFrequencies = scalingFactorForFrequencies ; + +unsigned[1] numberOfFrequencies : dump ; +alias totalNumberOfFrequencies = numberOfFrequencies ; +alias Nf = numberOfFrequencies ; + +# spareSetToZero +pad padding_loc14_1(3); + +unsigned[4] listOfScaledFrequencies[numberOfFrequencies] : dump; + +# moreSpareSetToZero +padto padding_loc14_2(offsetSection1 + 1080); + +# END 1/local.98.14 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.15.def b/definitions/grib1/local.98.15.def new file mode 100644 index 000000000..3025c5309 --- /dev/null +++ b/definitions/grib1/local.98.15.def @@ -0,0 +1,71 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.15 ---------------------------------------------------------------------- +# LOCAL 98 15 +# +# localDefinitionTemplate_015 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I2 42 - +#total 56 I2 43 - +#systemNumber 52 I2 44 - +#methodNumber 54 I2 45 - +#spareSetToZero 58 PAD n/a 3 +# + +# used in local definition 13 + +constant GRIBEXSection1Problem = 60 - section1Length ; + +transient localFlag=1 : hidden ; + +template mars_labeling "grib1/mars_labeling.def"; +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=15; +if (stepType is "instant") { + alias productDefinitionTemplateNumber=one; +} else { + alias productDefinitionTemplateNumber=eleven; +} + +unsigned[2] perturbationNumber : dump ; +alias number=perturbationNumber; + +unsigned[2] systemNumber : dump ; + +unsigned[2] methodNumber : dump ; + +unsigned[2] numberOfForecastsInEnsemble : dump ; +alias totalNumber=numberOfForecastsInEnsemble; + +# spareSetToZero +pad padding_loc15_1(3); + +alias origin = centre; +alias number = perturbationNumber; +alias total=numberOfForecastsInEnsemble; +alias system = systemNumber; +alias method = methodNumber; + +alias local.perturbationNumber=perturbationNumber; +alias local.systemNumber=systemNumber; +alias local.methodNumber=methodNumber; + + + + diff --git a/definitions/grib1/local.98.16.def b/definitions/grib1/local.98.16.def new file mode 100644 index 000000000..05b98c354 --- /dev/null +++ b/definitions/grib1/local.98.16.def @@ -0,0 +1,94 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.16 --------------------------------------------------------------------- +# LOCAL 98 16 +# +# localDefinitionTemplate_016 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I2 42 - +#zero n/a PAD 43 1 +#systemNumber 52 I2 44 - +#methodNumber 54 I2 45 - +#verifyingMonth 56 I4 46 - +#averagingPeriod 60 I1 47 - +#forecastMonth 61 I2 48 - +#spareSetToZero 63 PAD n/a 18 +# + +# ------------------- From section 1 +# ------------------- End of section 1 + +constant GRIBEXSection1Problem = 80 - section1Length ; + +# used in local definition 13 +transient localFlag=1 : hidden; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[2] perturbationNumber : dump ; + +# zero + +unsigned[2] systemNumber : dump ; + +unsigned[2] methodNumber : dump ; + +unsigned[4] verifyingMonth : dump ; + +meta endOfInterval g1end_of_interval_monthly(verifyingMonth); + +meta yearOfEndOfOverallTimeInterval vector(endOfInterval,0); +meta monthOfEndOfOverallTimeInterval vector(endOfInterval,1); +meta dayOfEndOfOverallTimeInterval vector(endOfInterval,2); +meta hourOfEndOfOverallTimeInterval vector(endOfInterval,3); +meta minuteOfEndOfOverallTimeInterval vector(endOfInterval,4); +meta secondOfEndOfOverallTimeInterval vector(endOfInterval,5); + +transient hourOfEndOfOverallTimeInterval=23; +transient minuteOfEndOfOverallTimeInterval=59; +transient secondOfEndOfOverallTimeInterval=59; + +transient indicatorOfUnitForTimeRange=3; +transient lengthOfTimeRange=1; +unsigned[1] averagingPeriod : dump ; + +transient typeOfStatisticalProcessing=0; +transient indicatorOfUnitForTimeIncrement = 1; +transient timeIncrement=averagingPeriod; + +unsigned[2] forecastMonth : dump ; +remove forecastTime; +transient forecastTime=forecastMonth - 1; +#remove typeOfTimeIncrement; +transient typeOfTimeIncrement = 3; + +# Old GRIBS do not have forecast forecastMonth set. It is computed from verifyingMonth +meta marsForecastMonth g1forecastmonth(verifyingMonth,dataDate,day,hour,forecastMonth) : read_only; + +alias origin = centre; +alias number = perturbationNumber; +alias system = systemNumber; +alias method = methodNumber; + + + +# spareSetToZero +pad padding_loc16_1(18); + +# END 1/local.98.16 ---------------------------------------------------------------------- + diff --git a/definitions/grib1/local.98.17.def b/definitions/grib1/local.98.17.def new file mode 100644 index 000000000..225134826 --- /dev/null +++ b/definitions/grib1/local.98.17.def @@ -0,0 +1,66 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.17 ---------------------------------------------------------------------- +# LOCAL 98 17 +# +# localDefinitionTemplate_017 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#zeroes 50 PAD 42 2 +#dateOfSSTFieldUsed 52 D3 44 - +#typeOfSSTFieldUsed 55 I1 45 - +#countOfICEFieldsUsed 56 I1 46 - +#iceFieldDate+Satellite 57 LIST 47 countOfICEFieldsUsed +#dateOfIceFieldUsed - D3 - - +#satelliteNumber - I1 - - +#ENDLIST - ENDLIST - iceFieldDate+Satellite +#paddingToMultipleOf40Bytes 57 PADMULT - 40 +# + + +template mars_labeling "grib1/mars_labeling.def"; + +# zeroes +#pad padding_loc17_1(2); + +unsigned[1] perturbationNumber : dump; +alias number = perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump; + +# Need a proper date (sst_date) +unsigned[3] dateOfSSTFieldUsed : dump ; + +unsigned[1] typeOfSSTFieldUsed : dump ; + +unsigned[1] countOfICEFieldsUsed : dump ; + +position offsetICEFieldsUsed; +ICEFieldsUsed list(countOfICEFieldsUsed) +{ + unsigned[3] dateOfIceFieldUsed : dump ; +# d3date dateOfIceFieldUsed ; + unsigned[1] satelliteNumber : dump ; +} + +# paddingToMultipleOf40Bytes +padtomultiple padding_loc17_2(offsetICEFieldsUsed,40); +position offsetAfterPadding; + +constant GRIBEXSection1Problem = ( offsetAfterPadding - offsetICEFieldsUsed ) % 40; + +# END 1/local.98.17 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.18.def b/definitions/grib1/local.98.18.def new file mode 100644 index 000000000..6482e657e --- /dev/null +++ b/definitions/grib1/local.98.18.def @@ -0,0 +1,77 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.18 ---------------------------------------------------------------------- +# LOCAL 98 18 +# +# localDefinitionTemplate_018 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#dataOrigin 52 I1 44 - +#modelIdentifier 53 A4 45 - +#consensusCount 57 I1 46 - +#spareSetToZero 58 PAD n/a 3 +#wmoCentreIdentifiers 61 LIST 47 consensusCount +#ccccIdentifiers - A4 - - +#ENDLIST - ENDLIST - wmoCentreIdentifiers +#unusedEntriesSetToBlanks - SP_TO - 120 +# + +constant GRIBEXSection1Problem = 120 - section1Length ; + +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=18; + +if (stepType is "instant" ) { + alias productDefinitionTemplateNumber=epsPoint; +} else { + alias productDefinitionTemplateNumber=epsContinous; +} +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump ; +alias number=perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump ; +alias totalNumber=numberOfForecastsInEnsemble; + +codetable[1] dataOrigin "grib1/0.table" : dump; +alias origin = dataOrigin; + +ascii[4] modelIdentifier : dump ; + +unsigned[1] consensusCount : dump ; + +# spareSetToZero +pad padding_loc18_1(3); + +#ascii[60] ccccIdentifiers : dump ; + +consensus list(consensusCount) +{ + ascii[4] ccccIdentifiers : dump; +} + +padto padding_loc18_2(offsetSection1 + 120); + +alias local.dataOrigin=dataOrigin; +alias local.modelIdentifier=modelIdentifier; +alias local.consensusCount=consensusCount; + +# END 1/local.98.18 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.19.def b/definitions/grib1/local.98.19.def new file mode 100644 index 000000000..834b7a49c --- /dev/null +++ b/definitions/grib1/local.98.19.def @@ -0,0 +1,65 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.19 ---------------------------------------------------------------------- +# LOCAL 98 19 +# +# localDefinitionTemplate_019 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#zeroForMarsCompatibility 50 PAD 42 1 +#ensembleSize 51 I1 43 - +#powerOfTenUsedToScaleClimateWeight 52 I1 44 - +#weightAppliedToClimateMonth1 53 I4 45 - +#firstMonthUsedToBuildClimateMonth1 57 I3 46 - +#lastMonthUsedToBuildClimateMonth1 60 I3 47 - +#firstMonthUsedToBuildClimateMonth2 63 I3 48 - +#lastMonthUsedToBuildClimateMonth2 66 I3 49 - +#efiOrder 69 I1 50 - +#spareSetToZero 70 PAD n/a 11 +# +template mars_labeling "grib1/mars_labeling.def"; + +constant GRIBEXSection1Problem = 80 - section1Length ; + +# zeroForMarsCompatibility +#pad padding_loc19_1(1); +unsigned[1] number : dump; +alias perturbationNumber=number; + +unsigned[1] ensembleSize : dump; +alias totalNumber=ensembleSize; + +meta quantile sprintf("%s:%s",number,ensembleSize); + +unsigned[1] powerOfTenUsedToScaleClimateWeight : dump; + +unsigned[4] weightAppliedToClimateMonth1 : dump; + +unsigned[3] firstMonthUsedToBuildClimateMonth1 : dump; + +unsigned[3] lastMonthUsedToBuildClimateMonth1 : dump; + +unsigned[3] firstMonthUsedToBuildClimateMonth2 : dump; + +unsigned[3] lastMonthUsedToBuildClimateMonth2 : dump; + +unsigned[1] efiOrder : dump; + +# spareSetToZero +pad padding_loc19_2(11); + +# END 1/local.98.19 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.190.def b/definitions/grib1/local.98.190.def new file mode 100644 index 000000000..1d0cd660e --- /dev/null +++ b/definitions/grib1/local.98.190.def @@ -0,0 +1,58 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 1/local.98.190 ---------------------------------------------------------------------- +# LOCAL 98 190 +# +# localDefinitionTemplate_190 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#zeroesForCompatibilityWithMars 50 PAD 42 2 +#numberOfLocalDefinitions 52 I1 44 - +#localDefinitions 53 LIST 45 numberOfLocalDefinitions +#localDefinitionNumber - I1 - - +#numberOfBytesInLocalDefinition - I2 - - +#ENDLIST - ENDLIST - localDefinitions +#streamOfLocalDefinitionBytes - BYTES - numberOfBytesInLocalDefinition +# + +constant GRIBEXSection1Problem = 0 ; + +template mars_labeling "grib1/mars_labeling.def"; + +# zeroesForCompatibilityWithMars +pad padding_loc190_1(2); + +unsigned[1] numberOfLocalDefinitions : dump; + +if(numberOfLocalDefinitions == 1){ + unsigned[1] localDefNumberOne : dump; + unsigned[2] numberOfBytesInLocalDefinition : dump; + template subLocalDefinition1 "grib1/local.[centre:l].[localDefNumberOne:l].def"; +} + +if(numberOfLocalDefinitions == 2){ + unsigned[1] localDefNumberOne : dump; + unsigned[2] numberOfBytesInLocalDefinition : dump; + unsigned[1] localDefNumberTwo : dump; + unsigned[2] numberOfBytesInLocalDefinition : dump; + template subLocalDefinition1 "grib1/local.[centre:l].[localDefNumberOne:l].def"; + unsigned[4] spare2; + template subLocalDefinition2 "grib1/local.[centre:l].[localDefNumberTwo:l].def"; +} + +# END 1/local.98.190 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.191.def b/definitions/grib1/local.98.191.def new file mode 100644 index 000000000..ff9e3bda3 --- /dev/null +++ b/definitions/grib1/local.98.191.def @@ -0,0 +1,70 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.191 ---------------------------------------------------------------------- +# LOCAL 98 191 +# +# localDefinitionTemplate_191 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#zeroForCompatibilityWithMars 50 PAD 42 2 +#formatVersionMajorNumber 52 I1 44 - +#formatVersionMinorNumber 53 I1 45 - +#originalSubCentreIdentifier 54 I1 46 - +#setToZero 55 PAD 47 4 +#numberOfBytesOfFreeFormatData 59 I2 51 - +#dataDescriptorBytes 61 BYTES 52 numberOfBytesOfFreeFormatData +#padToAMultipleOf80Bytes 60 PADFROM n/a 80 +# + + +template mars_labeling "grib1/mars_labeling.def"; + +# zeroForCompatibilityWithMars +pad padding_loc191_1(2); + +unsigned[1] formatVersionMajorNumber : dump; + +unsigned[1] formatVersionMinorNumber : dump; + +unsigned[1] originalSubCentreIdentifier : dump; + +# This does not belong here, this is for class=ms,country=de +alias mars.levelist = level; + + +# setToZero + +pad padding_loc191_2(4); + +unsigned[2] numberOfBytesOfFreeFormatData : dump; + +position offsetFreeFormData; +#freeFormDataList list(numberOfBytesOfFreeFormatData) { +# unsigned[1] freeFormData; +#} + +unsigned[1] freeFormData[numberOfBytesOfFreeFormatData] : dump; + +# padToAMultipleOf80Bytes +# -1 comes from gribex +padtomultiple padding_loc191_3(offsetFreeFormData,80); +position offsetAfterPadding; +constant GRIBEXSection1Problem = ( offsetAfterPadding - offsetFreeFormData) % 80 ; + + + +# END 1/local.98.191 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.192.def b/definitions/grib1/local.98.192.def new file mode 100644 index 000000000..f13b45faf --- /dev/null +++ b/definitions/grib1/local.98.192.def @@ -0,0 +1,70 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 1/local.98.192 ---------------------------------------------------------------------- +# LOCAL 98 192 +# +# localDefinitionTemplate_192 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#zeroForCompatibilityWithMars 50 PAD 42 2 +#numberOfLocalDefinitions 52 I1 44 - +#listOfLocalDefinitions - LIST - numberOfLocalDefinitions +#localDefinitionLength - I2 - - +#localDefinition - LOCAL - - +#endListOfLocalDefinitions - ENDLIST - listOfLocalDefinitions +# + +# The mars labeling must be inline +# template mars_labeling "grib1/mars_labeling.def"; + +constant GRIBEXSection1Problem = 0 ; + +codetable[1] thisMarsClass "mars/class.table" = "od" : dump,lowercase; +codetable[1] thisMarsType "mars/type.table" = "an" : dump,string_type,lowercase; +codetable[2] thisMarsStream "mars/stream.table" = "oper" : dump,lowercase ; +ksec1expver[4] thisExperimentVersionNumber = "0001" : dump; + +alias ls.dataType = thisMarsType; +alias mars.class = thisMarsClass; +alias mars.type = thisMarsType; +alias mars.stream = thisMarsStream; +alias mars.expver = thisExperimentVersionNumber; + +# zeroForCompatibilityWithMars +pad padding_loc192_1(2); + +unsigned[1] numberOfLocalDefinitions = 2 : dump; + +if (numberOfLocalDefinitions == 2 ) { + unsigned[2] subLocalDefinitionLength1 = 7 : dump; + unsigned[1] subLocalDefinitionNumber1 = 1 : dump; + codetable[1] marsClass1 "mars/class.table" = "od" : dump,lowercase; + codetable[1] marsType1 "mars/type.table" = "an" : dump,string_type,lowercase; + codetable[2] marsStream1 "mars/stream.table" = "oper" : dump,lowercase ; + ksec1expver[4] experimentVersionNumber1 = "0001" : dump; + template subDefinitions1 "grib1/local_no_mars.98.[subLocalDefinitionNumber1].def"; + unsigned[2] subLocalDefinitionLength2 = 9 : dump; + unsigned[1] subLocalDefinitionNumber2 = 24 : dump; + codetable[1] marsClass2 "mars/class.table" = "od" : dump,lowercase; + codetable[1] marsType2 "mars/type.table" = "an" : dump,string_type,lowercase; + codetable[2] marsStream2 "mars/stream.table" = "oper" : dump,lowercase ; + ksec1expver[4] experimentVersionNumber2 = "0001" : dump; + template subDefinitions2 "grib1/local_no_mars.98.[subLocalDefinitionNumber2].def"; +} + + diff --git a/definitions/grib1/local.98.2.def b/definitions/grib1/local.98.2.def new file mode 100644 index 000000000..53acd7e8e --- /dev/null +++ b/definitions/grib1/local.98.2.def @@ -0,0 +1,82 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.2 ---------------------------------------------------------------------- +# LOCAL 98 2 +# +# localDefinitionTemplate_002 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#totalNumberOfClusters 51 I1 43 - +#spareSetToZero 52 PAD n/a 1 +#clusteringMethod 53 I1 44 - +#startTimeStep 54 I2 45 - +#endTimeStep 56 I2 46 - +#northernLatititudeOfDomain 58 S3 47 - +#westernLongititudeOfDomain 61 S3 48 - +#southernLatititudeOfDomain 64 S3 49 - +#easternLongititudeOfDomain 67 S3 50 - +#operationalForecastCluster 70 I1 51 - +#controlForecastCluster 71 I1 52 - +#numberOfForecastsInCluster 72 I1 53 - +#ensembleForecastNumbers 73 LP_I1 54 numberOfForecastsInCluster +#spareToEnsureFixedLength - PADTO n/a 328 +# + +constant GRIBEXSection1Problem = 328 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] clusterNumber : dump; +alias number=clusterNumber; + +unsigned[1] totalNumberOfClusters : dump; +alias totalNumber=totalNumberOfClusters; + +# spareSetToZero +pad padding_loc2_1(1); + +unsigned[1] clusteringMethod : dump; + +unsigned[2] startTimeStep : dump; + +unsigned[2] endTimeStep : dump; + +signed[3] northernLatitudeOfDomain : dump; + +signed[3] westernLongitudeOfDomain : dump; + +signed[3] southernLatitudeOfDomain : dump; + +signed[3] easternLongitudeOfDomain : dump; + +unsigned[1] operationalForecastCluster : dump; + +unsigned[1] controlForecastCluster : dump; + +unsigned[1] numberOfForecastsInCluster : dump; +if (numberOfForecastsInCluster > 0) { +unsigned[1] ensembleForecastNumbers[numberOfForecastsInCluster] : dump; +} +# spareToEnsureFixedLength +padto padding_loc2_2(offsetSection1 + 328); + + +constant unknown="-"; +concept_nofail clusteringDomain(unknown,"cluster_domain.def",conceptsMasterDir,conceptsLocalDirAll); +alias number = clusterNumber; +alias domain = clusteringDomain; diff --git a/definitions/grib1/local.98.20.def b/definitions/grib1/local.98.20.def new file mode 100644 index 000000000..b2650e120 --- /dev/null +++ b/definitions/grib1/local.98.20.def @@ -0,0 +1,46 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.20 ---------------------------------------------------------------------- +# LOCAL 98 20 +# +# localDefinitionTemplate_020 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#iteration 50 I1 42 - +#totalNumberOfIterations 51 I1 43 - +#spareSetToZero 52 PAD n/a 1 +# + +constant GRIBEXSection1Problem = 52 - section1Length ; + +# 1 -> 2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=20; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] iterationNumber : dump; +unsigned[1] totalNumberOfIterations : dump; +alias iteration = iterationNumber; + +alias local.iterationNumber=iterationNumber; +alias local.totalNumberOfIterations=totalNumberOfIterations; + +# spareSetToZero +pad padding_loc20_1(1); + +# END 1/local.98.20 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.21.def b/definitions/grib1/local.98.21.def new file mode 100644 index 000000000..10c2b14f1 --- /dev/null +++ b/definitions/grib1/local.98.21.def @@ -0,0 +1,99 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.21 ---------------------------------------------------------------------- +# LOCAL 98 21 +# +# localDefinitionTemplate_021 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#forecastOrSingularVectorNumber 50 I2 42 - +#numberOfIterations 52 I2 43 - +#numberOfSingularVectorsComputed 54 I2 44 - +#normAtInitialTime 56 I1 45 - +#normAtFinalTime 57 I1 46 - +#multiplicationFactorForLatLong 58 I4 47 - +#northWestLatitudeOfVerficationArea 62 S4 48 - +#northWestLongitudeOfVerficationArea 66 S4 49 - +#southEastLatitudeOfVerficationArea 70 S4 50 - +#southEastLongitudeOfVerficationArea 74 S4 51 - +#accuracyMultipliedByFactor 78 I4 52 - +#numberOfSingularVectorsEvolved 82 I2 53 - +#!Ritz numbers: +#NINT(LOG10(RITZ)-5) 84 S4 54 - +#NINT(RITZ/(EXP(LOG(10.0*KSEC1(54)) 88 S4 55 - +#optimisationTime 92 I1 56 - +#forecastLeadTime 93 I1 57 - +#domain 94 A1 58 - +#methodNumber 95 I2 59 - +#totalNumberOfForecastsInEnsemble 97 I2 60 - +#shapeOfVerificationArea 99 I1 61 - +#spareSetToZero 100 PAD n/a 1 +# + +constant GRIBEXSection1Problem = 100 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[2] forecastOrSingularVectorNumber : dump; + +unsigned[2] numberOfIterations : dump; + +unsigned[2] numberOfSingularVectorsComputed : dump; + +unsigned[1] normAtInitialTime : dump; + +unsigned[1] normAtFinalTime : dump; + +unsigned[4] multiplicationFactorForLatLong : dump; + +signed[4] northWestLatitudeOfVerficationArea : dump; + +signed[4] northWestLongitudeOfVerficationArea : dump; + +signed[4] southEastLatitudeOfVerficationArea : dump; + +signed[4] southEastLongitudeOfVerficationArea : dump; + +unsigned[4] accuracyMultipliedByFactor : dump; + +unsigned[2] numberOfSingularVectorsEvolved : dump; + +# Ritz numbers: +signed[4] NINT_LOG10_RITZ : dump; + +signed[4] NINT_RITZ_EXP : dump; + +unsigned[1] optimisationTime : dump; +alias mars.opttime = optimisationTime; + +unsigned[1] forecastLeadTime : dump; +alias mars.leadtime = forecastLeadTime; + +ascii[1] marsDomain : dump; + +unsigned[2] methodNumber : dump; + +unsigned[2] numberOfForecastsInEnsemble : dump; + +unsigned[1] shapeOfVerificationArea : dump; + +# spareSetToZero +pad padding_loc21_1(1); + + +# concept sensitiveAreaDomain(unknown,"sensitive_area_domain.def",conceptsMasterDir,conceptsLocalDir); +alias mars.domain = marsDomain; diff --git a/definitions/grib1/local.98.218.def b/definitions/grib1/local.98.218.def new file mode 100644 index 000000000..9ec77a9c5 --- /dev/null +++ b/definitions/grib1/local.98.218.def @@ -0,0 +1,76 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.18 ---------------------------------------------------------------------- +# LOCAL 98 18 +# +# localDefinitionTemplate_018 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#dataOrigin 52 I1 44 - +#modelIdentifier 53 A4 45 - +#consensusCount 57 I1 46 - +#spareSetToZero 58 PAD n/a 3 +#wmoCentreIdentifiers 61 LIST 47 consensusCount +#ccccIdentifiers - A4 - - +#ENDLIST - ENDLIST - wmoCentreIdentifiers +#unusedEntriesSetToBlanks - SP_TO - 120 +# + +constant GRIBEXSection1Problem = 120 - section1Length ; + + +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=18; + +if (stepType is "instant" ) { + alias productDefinitionTemplateNumber=epsPoint; +} else { + alias productDefinitionTemplateNumber=epsContinous; +} +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump ; +alias number=perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump ; +alias totalNumber=numberOfForecastsInEnsemble; + +codetable[1] dataOrigin "grib1/0.table" : dump; +alias origin = dataOrigin; + +ascii[4] modelIdentifier : dump ; + +unsigned[1] consensusCount =1 : dump ; + +# spareSetToZero +pad padding_loc18_1(3); + +ascii[4] ccccIdentifiers ; + +#consensus list(consensusCount) +#{ ascii[4] ccccIdentifiers : dump;} + +padto padding_loc18_2(offsetSection1 + 120); + +alias local.dataOrigin=dataOrigin; +alias local.modelIdentifier=modelIdentifier; +alias local.consensusCount=consensusCount; + +# END 1/local.98.18 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.23.def b/definitions/grib1/local.98.23.def new file mode 100644 index 000000000..157c949ac --- /dev/null +++ b/definitions/grib1/local.98.23.def @@ -0,0 +1,97 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.23 ---------------------------------------------------------------------- +# LOCAL 98 23 +# +# localDefinitionTemplate_023 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#ensembleNumber 50 I2 42 - +#totalNumber 81 I2 43 - +#systemNumber 52 I2 44 - +#methodNumber 54 I2 45 - +#verifyingMonth 56 I4 46 - +#averagingPeriod 60 I1 47 - +#forecastMonth 61 I2 48 - +#referenceDate 63 I4 49 - +#climateDateFrom 67 I4 50 - +#climateDateTo 71 I4 51 - +#unitsDecimalScaleFactor 75 S1 52 - +#thresholdIndicator 76 I1 53 - +#lowerThresholdValue 77 I2 54 - +#upperThresholdValue 79 I2 55 - +#spareSetToZero 83 PAD 56 2 +# + +constant GRIBEXSection1Problem = 84 - section1Length ; + +#used in local definition 13 +transient localFlag=2 : hidden; + +template mars_labeling "grib1/mars_labeling.def"; +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=23; + +unsigned[2] perturbationNumber : dump; + +# unsigned[2] numberOfForecastsInEnsemble : dump; + +unsigned[2] systemNumber : dump; +unsigned[2] methodNumber : dump; +unsigned[4] verifyingMonth : dump; +unsigned[1] averagingPeriod : dump ; +unsigned[2] forecastMonth : dump ; +unsigned[4] referenceDate : dump; +unsigned[4] climateDateFrom : dump; +unsigned[4] climateDateTo : dump; +signed[1] unitsDecimalScaleFactor : dump; +unsigned[1] thresholdIndicator : dump; +unsigned[2] lowerThresholdValue : dump; +unsigned[2] upperThresholdValue : dump; + +alias local.systemNumber=systemNumber; +alias local.methodNumber=methodNumber; +alias local.verifyingMonth=verifyingMonth ; +alias local.averagingPeriod=averagingPeriod ; +alias local.forecastMonth=forecastMonth ; +alias local.referenceDate=referenceDate ; +alias local.climateDateFrom=climateDateFrom ; +alias local.climateDateTo=climateDateTo ; +alias local.unitsDecimalScaleFactor=unitsDecimalScaleFactor ; +alias local.thresholdIndicator=thresholdIndicator ; +alias local.lowerThresholdValue=lowerThresholdValue ; +alias local.upperThresholdValue=upperThresholdValue; + + +# TODO: BR Note: this is not where we expect it!! + +unsigned[2] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; + + +#spareSetToZero +pad padding_loc23_1(2); + +alias number = perturbationNumber; +alias system = systemNumber; +alias method = methodNumber; +alias refdate = referenceDate; + + +# END 1/local.98.23 ---------------------------------------------------------------------- + diff --git a/definitions/grib1/local.98.24.def b/definitions/grib1/local.98.24.def new file mode 100644 index 000000000..f51ed85a2 --- /dev/null +++ b/definitions/grib1/local.98.24.def @@ -0,0 +1,45 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.24 ---------------------------------------------------------------------- +# LOCAL 98 24 +# +# localDefinitionTemplate_024 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#satelliteIdentifier 50 I2 42 - +#instrumentIdentifier 52 I2 43 - +#channelNumber 54 I2 44 - +#functionCode 56 I1 45 - +# + +constant GRIBEXSection1Problem = 56 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[2] satelliteIdentifier : dump; +alias mars.ident = satelliteIdentifier; + +unsigned[2] instrumentIdentifier : dump; +alias mars.instrument = instrumentIdentifier; + +unsigned[2] channelNumber : dump ; +alias mars.channel = channelNumber; + +unsigned[1] functionCode : dump ; + + +# END 1/local.98.24 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.244.def b/definitions/grib1/local.98.244.def new file mode 120000 index 000000000..80f7dfbd6 --- /dev/null +++ b/definitions/grib1/local.98.244.def @@ -0,0 +1 @@ +local.214.244.def \ No newline at end of file diff --git a/definitions/grib1/local.98.245.def b/definitions/grib1/local.98.245.def new file mode 120000 index 000000000..c488089bd --- /dev/null +++ b/definitions/grib1/local.98.245.def @@ -0,0 +1 @@ +local.214.245.def \ No newline at end of file diff --git a/definitions/grib1/local.98.25.def b/definitions/grib1/local.98.25.def new file mode 100644 index 000000000..a64913a06 --- /dev/null +++ b/definitions/grib1/local.98.25.def @@ -0,0 +1,52 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 1/local.98.25 ---------------------------------------------------------------------- +# LOCAL 98 25 +# +# localDefinitionTemplate_025 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#componentIndex 50 I1 42 - +#numberOfComponents 51 I1 43 - +#modelErrorType 52 I1 44 - +# + +template mars_labeling "grib1/mars_labeling.def"; + +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=25; +if (stepType is "instant") { + alias productDefinitionTemplateNumber=zero; +} else { + alias productDefinitionTemplateNumber=eight; +} + + +constant GRIBEXSection1Problem = 52 - section1Length ; + +unsigned[1] componentIndex : dump; +alias mars.number=componentIndex; +unsigned[1] numberOfComponents : dump; +unsigned[1] modelErrorType : dump; + +alias local.componentIndex=componentIndex; +alias local.numberOfComponents=numberOfComponents; +alias local.modelErrorType=modelErrorType; + +# END 1/local.98.25 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.26.def b/definitions/grib1/local.98.26.def new file mode 100644 index 000000000..b8db7859f --- /dev/null +++ b/definitions/grib1/local.98.26.def @@ -0,0 +1,61 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.21 ---------------------------------------------------------------------- +# LOCAL 98 21 +# +# localDefinitionTemplate_026 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#referenceDate 52 I4 44 - +#climateDateFrom 56 I4 45 - +#climateDateTo 60 I4 46 - +#spareSetToZero 64 PAD n/a 6 +# + +constant GRIBEXSection1Problem = 69 - section1Length ; + +#used in local definition 13 +transient localFlag=2 : hidden; + +template mars_labeling "grib1/mars_labeling.def"; +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=26; + +if (stepType is "instant" ) { + alias productDefinitionTemplateNumber=epsPoint; +} else { + alias productDefinitionTemplateNumber=epsContinous; +} + +constant wrongPadding=1 : hidden; + +unsigned[1] number : dump; +unsigned[1] numberOfForecastsInEnsemble : dump ; +alias totalNumber=numberOfForecastsInEnsemble; +unsigned[4] referenceDate : dump ; +unsigned[4] climateDateFrom : dump; +unsigned[4] climateDateTo : dump ; +pad padding_loc26_1(6); +alias perturbationNumber=number; + +alias local.referenceDate= referenceDate ; +alias local.climateDateFrom= climateDateFrom ; +alias local.climateDateTo= climateDateTo ; + diff --git a/definitions/grib1/local.98.27.def b/definitions/grib1/local.98.27.def new file mode 100644 index 000000000..f054fa741 --- /dev/null +++ b/definitions/grib1/local.98.27.def @@ -0,0 +1,67 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.21 ---------------------------------------------------------------------- +# LOCAL 98 21 +# +# localDefinitionTemplate_027 (replaced by 30) +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#oceanAtmosphereCoupling 52 I1 44 - +#spare 53 I1 45 - +#padding 54 PAD n/a 2 +#! VAriable Resolution (VAREPS) +#legBaseDate 56 I4 46 - ! yyyymmdd +#legBaseTime 60 I2 47 - ! hhmm +#legNumber 62 I1 48 - +#! For hindcasts +#referenceDate 63 I4 49 - ! +#climateDateFrom 67 I4 50 - ! yyyymmdd (ensemble means of hindcasts) +#climateDateTo 71 I4 51 - ! yyyymmdd (ensemble means of hindcasts) +#spareSetToZero 75 PAD n/a 33 +# + +constant GRIBEXSection1Problem = 107 - section1Length ; + +#1->2 +transient grib2LocalSectionNumber=30; + +template mars_labeling "grib1/mars_labeling.def"; +constant wrongPadding=1 : hidden; + + +unsigned[1] perturbationNumber : dump ; +unsigned[1] numberOfForecastsInEnsemble : dump ; +alias totalNumber=numberOfForecastsInEnsemble; +alias number = perturbationNumber; + + +unsigned[1] oceanAtmosphereCoupling : dump ; + +pad padding_loc27_1(3); + +unsigned[4] legBaseDate : dump ; +unsigned[2] legBaseTime : dump ; +unsigned[1] legNumber : dump ; +unsigned[4] referenceDate : dump ; +unsigned[4] climateDateFrom : dump ; +unsigned[4] climateDateTo : dump ; + +alias mars._leg_number = legNumber; + +pad padding_loc27_2(33); diff --git a/definitions/grib1/local.98.28.def b/definitions/grib1/local.98.28.def new file mode 100644 index 000000000..1cb340712 --- /dev/null +++ b/definitions/grib1/local.98.28.def @@ -0,0 +1,54 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.21 ---------------------------------------------------------------------- +# LOCAL 98 21 +# +# localDefinitionTemplate_028 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#baseDateEPS 52 I4 44 - +#baseTimeEPS 56 I2 45 - +#numberOfRepresentativeMember 58 I1 46 - +#numberOfMembersInCluster 59 I1 47 - +#totalInitialConditions 60 I1 48 - +#spareSetToZero 61 PAD n/a 19 +#! + information about probabilities (they have already probabilities) +#! + information about clustering (they save it as ASCII, at the moment...) +# + +constant GRIBEXSection1Problem = 79 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; +constant wrongPadding=1 : hidden; + +unsigned[1] perturbationNumber : dump; +alias number = perturbationNumber; +unsigned[1] numberOfForecastsInEnsemble : dump ; +alias totalNumber=numberOfForecastsInEnsemble; +unsigned[4] baseDateEPS : dump ; +unsigned[2] baseTimeEPS : dump; +unsigned[1] numberOfRepresentativeMember : dump ; +unsigned[1] numberOfMembersInCluster : dump; +unsigned[1] totalInitialConditions : dump; + +pad padding_loc28_1(19); + + +#! + information about probabilities (they have already probabilities) +#! + information about clustering (they save it as ASCII, at the moment...) diff --git a/definitions/grib1/local.98.29.def b/definitions/grib1/local.98.29.def new file mode 100644 index 000000000..2317e35f4 --- /dev/null +++ b/definitions/grib1/local.98.29.def @@ -0,0 +1,104 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.21 ---------------------------------------------------------------------- +# LOCAL 98 21 +# +# localDefinitionTemplate_029 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#totalNumberOfClusters 51 I1 43 - +#spareSetToZero 52 PAD n/a 1 +#clusteringMethod 53 I1 44 - +#northernLatitudeOfDomain 54 S3 45 - +#westernLongitudeOfDomain 57 S3 46 - +#southernLatitudeOfDomain 60 S3 47 - +#easternLongitudeOfDomain 63 S3 48 - +#numberOfForecastsInCluster 66 I1 49 - +#numberOfParametersUsedForClustering 67 I1 50 - +#numberOfPressureLevelsUsedForClustering 68 I1 51 - +#numberOfStepsUsedForClustering 69 I1 52 - +#spareSetToZero 70 PAD n/a 10 +#! +#! EPS members +#listOfEnsembleForecastNumbers - LIST - numberOfForecastsInCluster +#baseDateEPS - I4 - - +#baseTimeEPS - I2 - - +#number - I1 - - +#endListOfEnsembleForecastNumbers - ENDLIST - listOfEnsembleForecastNumbers +#! +#! Variables +#listOfParametersUsedForClustering - LIST - numberOfParametersUsedForClustering +#parameterCode - I1 - - +#tableCode - I1 - - +#endListOfParametersUsedForClustering - ENDLIST - listOfParametersUsedForClustering +#! +#! Pressure levels +#listOfPressureLevelsUsedForClustering - LIST - numberOfPressureLevelsUsedForClustering +#pressureLevel - I2 - - +#endListOfPressureLevelsUsedForClustering - ENDLIST - listOfPressureLevelsUsedForClustering +#! +#! Steps +#listOfStepsUsedForClustering - LIST - numberOfStepsUsedForClustering +#step - I2 - - +#endListOfStepsUsedForClustering - ENDLIST - listOfStepsUsedForClustering +#! +#spareToEnsureFixedLength - PADTO n/a 960 +# + +constant GRIBEXSection1Problem = 960 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] clusterNumber : dump; +alias number=clusterNumber; + +unsigned[1] totalNumberOfClusters : dump ; +alias totalNumber=totalNumberOfClusters; +pad padding_loc29_1(1); +unsigned[1] clusteringMethod : dump ; +signed[3] northernLatitudeOfDomain : dump; +signed[3] westernLongitudeOfDomain : dump ; +signed[3] southernLatitudeOfDomain : dump ; +signed[3] easternLongitudeOfDomain : dump ; +unsigned[1] numberOfForecastsInCluster : dump; +unsigned[1] numberOfParametersUsedForClustering : dump ; +unsigned[1] numberOfPressureLevelsUsedForClustering : dump ; +unsigned[1] numberOfStepsUsedForClustering : dump ; + +pad padding_loc29_2(10); + +listOfEnsembleForecastNumbers list(numberOfForecastsInCluster){ + unsigned[4] baseDateEPS : dump; + unsigned[2] baseTimeEPS : dump; + unsigned[1] number : dump; +} + +listOfParametersUsedForClustering list(numberOfParametersUsedForClustering){ + unsigned[1] parameterCode; + unsigned[1] tableCode; +} + +unsigned[2] pressureLevel[numberOfPressureLevelsUsedForClustering] : dump; + +# Name_change old=step new=stepForClustering +unsigned[2] stepForClustering[numberOfStepsUsedForClustering] : dump; + +#spareToEnsureFixedLength - PADTO n/a 960 +padto padding_loc29_3(offsetSection1 + 960); + +alias number = clusterNumber; diff --git a/definitions/grib1/local.98.3.def b/definitions/grib1/local.98.3.def new file mode 100644 index 000000000..4f8408fc5 --- /dev/null +++ b/definitions/grib1/local.98.3.def @@ -0,0 +1,46 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 1/local.98.3 ---------------------------------------------------------------------- +# LOCAL 98 3 +# +# localDefinitionTemplate_003 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#band 50 I1 42 - +#functionCode 51 I1 43 - +#spareSetToZero 52 PAD n/a 1 +# + +constant GRIBEXSection1Problem = 52 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; +constant operStream = "oper"; +alias mars.stream = operStream; + + +unsigned[1] band : dump; +alias mars.obstype = band; + +meta marsIdent sprintf("%d",indicatorOfTypeOfLevel) : dump; +alias mars.ident = marsIdent; + +unsigned[1] functionCode : dump; + +pad padding_loc3_1(1); + +# END 1/local.98.3 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.30.def b/definitions/grib1/local.98.30.def new file mode 100644 index 000000000..5a1081cbe --- /dev/null +++ b/definitions/grib1/local.98.30.def @@ -0,0 +1,101 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.30 ---------------------------------------------------------------------- +# LOCAL 98 30 +# +#! localDefinitionTemplate_030 +#! --------------------------- +#! +#! # Forecasting Systems with Variable Resolution +#! +#!Description Octet Code Ksec1 Count +#!----------- ----- ---- ----- ----- +#! +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - + +#number 50 I1 42 - +#total 51 I1 43 - + +#oceanAtmosphereCoupling 52 I1 44 - +#spare 53 I1 45 - +#padding 54 PAD n/a 2 +#! VAriable Resolution (VAREPS) +#legBaseDate 56 I4 46 - ! yyyymmdd +#legBaseTime 60 I2 47 - ! hhmm +#legNumber 62 I1 48 - +#! For hindcasts +#dateOfForecastRun 63 I4 49 - ! +#climateDateFrom 67 I4 50 - ! yyyymmdd (ensemble means of hindcasts) +#climateDateTo 71 I4 51 - ! yyyymmdd (ensemble means of hindcasts) +#spareSetToZero 75 PAD n/a 32 +# + +constant GRIBEXSection1Problem = 106 - section1Length ; + +# used in local definition 13 +transient localFlag=3 : hidden; + +# 1-> 2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=30; + +template mars_labeling "grib1/mars_labeling.def"; + +#1->2 +if (stepType is "instant" ) { + if (type is "em" || type is "es" ) { + alias productDefinitionTemplateNumber=epsStatisticsPoint; + } else { + alias productDefinitionTemplateNumber=epsPoint; + } +} else { + if (type is "em" || type is "es" ) { + alias productDefinitionTemplateNumber=epsStatisticsContinous; + } else { + alias productDefinitionTemplateNumber=epsContinous; + } +} + + +unsigned[1] perturbationNumber : dump; +alias number=perturbationNumber; +unsigned[1] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; + + +unsigned[1] oceanAtmosphereCoupling : dump; + +pad padding_loc30_1(3); + +unsigned[4] legBaseDate : dump ; +unsigned[2] legBaseTime : dump ; +unsigned[1] legNumber : dump ; +unsigned[4] referenceDate : dump ; +unsigned[4] climateDateFrom : dump ; +unsigned[4] climateDateTo : dump; + + +alias local.oceanAtmosphereCoupling=oceanAtmosphereCoupling; +alias local.legBaseDate=legBaseDate ; +alias local.legBaseTime=legBaseTime ; +alias local.legNumber=legNumber ; +alias local.referenceDate=referenceDate ; +alias local.climateDateFrom=climateDateFrom ; +alias local.climateDateTo=climateDateTo; + +alias mars._leg_number = legNumber; + +pad padding_loc30_2(32); + +# END 1/local.98.30 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.31.def b/definitions/grib1/local.98.31.def new file mode 100644 index 000000000..7963a7828 --- /dev/null +++ b/definitions/grib1/local.98.31.def @@ -0,0 +1,66 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.31 ---------------------------------------------------------------------- +# LOCAL 98 1 +# +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#forecastMonth 52 I2 44 - +#dateOfForecastRun 54 I4 45 - ! yyyymmdd +#numberOfModels 58 I1 46 - +#spareSetToZero 59 PAD n/a 42 +#originatingCentreIdentifiers 101 LIST 47 numberOfModels +#ccccIdentifiers - I2 - - +#ENDLIST - ENDLIST - originatingCentreIdentifiers +#unusedEntriesSetToBlanks - SP_TO - 240 +# + +constant GRIBEXSection1Problem = 240 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump; +alias number=perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; + +unsigned[2] forecastMonth : dump; + + + + +unsigned[4] dateOfForecastRun : dump; +alias referenceDate = dateOfForecastRun; + + +unsigned[1] numberOfModels :dump; +pad padding_local1_31(42); +listOfModelIdentifiers list (numberOfModels) { + codetable[2] modelIdentifier 'grib1/0.table' :dump; +} +padto padding_sec1_loc(offsetSection1 + 240 ); + +alias number = perturbationNumber; + +alias total=numberOfForecastsInEnsemble; + + +# END 1/local.98.1 ---------------------------------------------------------------------- + diff --git a/definitions/grib1/local.98.32.def b/definitions/grib1/local.98.32.def new file mode 100644 index 000000000..654a464a9 --- /dev/null +++ b/definitions/grib1/local.98.32.def @@ -0,0 +1,87 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.2 ---------------------------------------------------------------------- +# LOCAL 98 2 +# +# localDefinitionTemplate_002 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#totalNumberOfClusters 51 I1 43 - +#spareSetToZero 52 PAD n/a 1 +#clusteringMethod 53 I1 44 - +#startTimeStep 54 I2 45 - +#endTimeStep 56 I2 46 - +#northernLatititudeOfDomain 58 S3 47 - +#westernLongititudeOfDomain 61 S3 48 - +#southernLatititudeOfDomain 64 S3 49 - +#easternLongititudeOfDomain 67 S3 50 - +#domain 70 A1 51 - +#operationalForecastCluster 71 I1 51 - +#controlForecastCluster 72 I1 52 - +#representativeMember 73 I1 54 - +#climatologicalRegime 74 I1 55 - +#numberOfForecastsInCluster 75 I1 53 - +#ensembleForecastNumbers 76 LP_I1 54 numberOfForecastsInCluster +#spareToEnsureFixedLength - PADTO n/a 328 +# + +constant GRIBEXSection1Problem = 328 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] clusterNumber : dump; +alias number=clusterNumber; + +unsigned[1] totalNumberOfClusters : dump; +alias totalNumber=totalNumberOfClusters; + +# spareSetToZero +pad padding_loc2_1(1); + +unsigned[1] clusteringMethod : dump; + +unsigned[2] startTimeStep : dump; + +unsigned[2] endTimeStep : dump; + +signed[3] northernLatitudeOfDomain : dump; + +signed[3] westernLongitudeOfDomain : dump; + +signed[3] southernLatitudeOfDomain : dump; + +signed[3] easternLongitudeOfDomain : dump; + +ascii[1] clusteringDomain : dump; + +unsigned[1] operationalForecastCluster : dump; + +unsigned[1] controlForecastCluster : dump; +unsigned[1] representativeMember : dump; +codetable[1] climatologicalRegime "grib1/regime.table" : dump; + +unsigned[1] numberOfForecastsInCluster : dump; +if (numberOfForecastsInCluster > 0) { +unsigned[1] ensembleForecastNumbers[numberOfForecastsInCluster] : dump; +} +# spareToEnsureFixedLength +padto padding_loc2_2(offsetSection1 + 328); + +alias mars.number = clusterNumber; +alias mars.domain=clusteringDomain; + diff --git a/definitions/grib1/local.98.33.def b/definitions/grib1/local.98.33.def new file mode 100644 index 000000000..bec5d3b32 --- /dev/null +++ b/definitions/grib1/local.98.33.def @@ -0,0 +1,33 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +template mars_labeling "grib1/mars_labeling.def"; + +constant GRIBEXSection1Problem = 0 ; + +unsigned[1] yearOfReference = yearOfCentury : dump; +unsigned[1] monthOfReference = month : dump; +unsigned[1] dayOfReference = day : dump; +unsigned[1] hourOfReference = hour : dump; +unsigned[1] minuteOfReference = minute : dump; +unsigned[1] centuryOfReference = centuryOfReferenceTimeOfData : dump; +transient secondsOfReference = 0 ; + +unsigned[1] numberOfForcasts=0 : dump; +if (numberOfForcasts) { + unsigned[3] forecastSteps[numberOfForcasts] : dump; +} +unsigned[1] numberOfAnalysis=1 : dump; +if (numberOfAnalysis) { + signed[3] analysisOffsets[numberOfAnalysis] : dump; +} + +meta dateOfReference g1date(centuryOfReference,yearOfReference,monthOfReference,dayOfReference) : dump; +meta timeOfReference time(hourOfReference,minuteOfReference,secondsOfReference) : dump; + diff --git a/definitions/grib1/local.98.35.def b/definitions/grib1/local.98.35.def new file mode 100644 index 000000000..9ca59ced4 --- /dev/null +++ b/definitions/grib1/local.98.35.def @@ -0,0 +1,40 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +constant GRIBEXSection1Problem = 120 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] yearOfReference = yearOfCentury : dump; +unsigned[1] monthOfReference = month : dump; +unsigned[1] dayOfReference = day : dump; +unsigned[1] hourOfReference = hour : dump; +unsigned[1] minuteOfReference = minute : dump; +unsigned[1] centuryOfReference = centuryOfReferenceTimeOfData : dump; +transient secondsOfReference = 0 ; + +unsigned[1] numberOfForcasts=0 : dump; +unsigned[1] numberOfAnalysis=1 : dump; + +if (numberOfForcasts) { + unsigned[3] forecastSteps[numberOfForcasts] : dump; +} +if (numberOfAnalysis) { + signed[3] analysisOffsets[numberOfAnalysis] : dump; +} + +padto padding_local_35(offsetSection1 + 120); + +meta dateOfReference g1date(centuryOfReference,yearOfReference,monthOfReference,dayOfReference) : dump; +meta timeOfReference time(hourOfReference,minuteOfReference,secondsOfReference) : dump; + +if (indicatorOfTypeOfLevel==160) { + alias mars.levelist = level; +} + diff --git a/definitions/grib1/local.98.36.def b/definitions/grib1/local.98.36.def new file mode 100644 index 000000000..2be4b42ba --- /dev/null +++ b/definitions/grib1/local.98.36.def @@ -0,0 +1,83 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.36 ---------------------------------------------------------------------- +# LOCAL 98 36 +# +# localDefinitionTemplate_036 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#offsetToEndOf4DvarWindow 52 I2 44 - +#lengthOf4DvarWindow 54 I2 45 - +#spareSetToZero 56 PAD n/a 1 +# +constant GRIBEXSection1Problem = 56 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump; +alias number = perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; + +# Hours +unsigned[2] offsetToEndOf4DvarWindow : dump; +unsigned[2] lengthOf4DvarWindow : dump; +alias anoffset=offsetToEndOf4DvarWindow; + +pad padding_local1_1(1); + +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=1; + +if (stepType is "instant" ) { + if (type is "em" || type is "es" ) { + alias productDefinitionTemplateNumber=epsStatisticsPoint; + } else { + if (numberOfForecastsInEnsemble!=0) { + if ((perturbationNumber/2)*2 == perturbationNumber) { + alias typeOfEnsembleForecast=two; + } else { + alias typeOfEnsembleForecast=three; + } + alias productDefinitionTemplateNumber=epsPoint; + } else { + alias productDefinitionTemplateNumber=zero; + } + } +} else { + if (type is "em" || type is "es" ) { + alias productDefinitionTemplateNumber=epsStatisticsContinous; + } else { + if (numberOfForecastsInEnsemble!=0) { + if ((perturbationNumber/2)*2 == perturbationNumber) { + alias typeOfEnsembleForecast=two; + } else { + alias typeOfEnsembleForecast=three; + } + alias productDefinitionTemplateNumber=epsContinous; + } else { + alias productDefinitionTemplateNumber=eight; + } + } +} + +# END 1/local.98.36 ---------------------------------------------------------------------- + diff --git a/definitions/grib1/local.98.37.def b/definitions/grib1/local.98.37.def new file mode 100644 index 000000000..d9ede3e8f --- /dev/null +++ b/definitions/grib1/local.98.37.def @@ -0,0 +1,68 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# +# START 1/local.98.37 ---------------------------------------------------------------------- +# LOCAL 98 37 +# +# localDefinitionTemplate_037 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#channelNumber 52 I1 44 - +#scalingFactorForFrequencies 53 I4 45 - +#numberOfFrequencies 57 I1 46 - +#spareSetToZero 58 PAD n/a 3 +#listOfScaledFrequencies 61 LP_I4 47 numberOfFrequencies +#offsetToEndOf4DvarWindow - I2 - - +#lengthOf4DvarWindow - I2 - - +#moreSpareSetToZero - PADTO - 1080 +# + +constant GRIBEXSection1Problem = 1080 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump; +alias number = perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump ; +alias totalNumber=numberOfForecastsInEnsemble; + +unsigned[1] channelNumber : dump ; +alias mars.channel = channelNumber; + +unsigned[4] scalingFactorForFrequencies : dump ; +alias integerScalingFactorAppliedToFrequencies = scalingFactorForFrequencies ; + +unsigned[1] numberOfFrequencies : dump ; +alias totalNumberOfFrequencies = numberOfFrequencies ; +alias Nf = numberOfFrequencies ; + +# spareSetToZero +pad padding_loc37_1(3); + +unsigned[4] listOfScaledFrequencies[numberOfFrequencies] : dump; + +# Hours +unsigned[2] offsetToEndOf4DvarWindow : dump; +unsigned[2] lengthOf4DvarWindow : dump; +alias anoffset=offsetToEndOf4DvarWindow; + +# moreSpareSetToZero +padto padding_loc37_2(offsetSection1 + 1080); + +# END 1/local.98.37 ---------------------------------------------------------------------- + diff --git a/definitions/grib1/local.98.38.def b/definitions/grib1/local.98.38.def new file mode 100644 index 000000000..fe3fbe463 --- /dev/null +++ b/definitions/grib1/local.98.38.def @@ -0,0 +1,54 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.38 ---------------------------------------------------------------------- +# LOCAL 98 38 +# +# localDefinitionTemplate_038 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#iteration 50 I1 42 - +#totalNumberOfIterations 51 I1 43 - +#offsetToEndOf4DvarWindow 52 I2 44 - +#lengthOf4DvarWindow 54 I2 45 - +#spareSetToZero 56 PAD n/a 1 +# + +constant GRIBEXSection1Problem = 56 - section1Length ; + +# 1 -> 2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=38; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] iterationNumber : dump; +unsigned[1] totalNumberOfIterations : dump; +alias iteration = iterationNumber; + +alias local.iterationNumber=iterationNumber; +alias local.totalNumberOfIterations=totalNumberOfIterations; + +# Hours +unsigned[2] offsetToEndOf4DvarWindow : dump; +unsigned[2] lengthOf4DvarWindow : dump; +alias anoffset=offsetToEndOf4DvarWindow; + +# spareSetToZero +pad padding_loc38_1(1); + +# END 1/local.98.38 ---------------------------------------------------------------------- + diff --git a/definitions/grib1/local.98.39.def b/definitions/grib1/local.98.39.def new file mode 100644 index 000000000..0f404918a --- /dev/null +++ b/definitions/grib1/local.98.39.def @@ -0,0 +1,59 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 1/local.98.39 ---------------------------------------------------------------------- +# LOCAL 98 39 +# +# localDefinitionTemplate_039 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#componentIndex 50 I1 42 - +#numberOfComponents 51 I1 43 - +#modelErrorType 52 I1 44 - +#offsetToEndOf4DvarWindow 53 I2 45 - +#lengthOf4DvarWindow 55 I2 46 - +# + +template mars_labeling "grib1/mars_labeling.def"; + +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=39; +if (stepType is "instant") { + alias productDefinitionTemplateNumber=zero; +} else { + alias productDefinitionTemplateNumber=eight; +} + +constant GRIBEXSection1Problem = 56 - section1Length ; + +unsigned[1] componentIndex : dump; +alias mars.number=componentIndex; +unsigned[1] numberOfComponents : dump; +unsigned[1] modelErrorType : dump; + +# Hours +unsigned[2] offsetToEndOf4DvarWindow : dump; +unsigned[2] lengthOf4DvarWindow : dump; +alias anoffset=offsetToEndOf4DvarWindow; + +alias local.componentIndex=componentIndex; +alias local.numberOfComponents=numberOfComponents; +alias local.modelErrorType=modelErrorType; + +# END 1/local.98.39 ---------------------------------------------------------------------- + diff --git a/definitions/grib1/local.98.4.def b/definitions/grib1/local.98.4.def new file mode 100644 index 000000000..3768c3c9b --- /dev/null +++ b/definitions/grib1/local.98.4.def @@ -0,0 +1,239 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.4 ---------------------------------------------------------------------- +# LOCAL 98 4 +# +# localDefinitionTemplate_004 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#! if stream == 1090 +#if1 - IF_EQ 1090 stream +#ensembleMemberNumber 50 I2 42 - +#setToZeroForStream1090Unpacking n/a PAD 43 1 +#endif1 - ENDIF if1 +#! if stream != 1090 +#if2 - IF_NEQ 1090 stream +#ensembleMemberNumber 50 I1 42 - +#setToZero 51 PAD 43 1 +#endif2 - ENDIF if2 +#flagShowingPostAuxiliaryArrayInUse 52 F1 - 1 +#systemNumber 53 I1 44 - +#methodNumber 54 I1 45 - +#! Coordinate structure definition +#spaceUnitFlag 55 I1 46 - +#verticalCoordinateDefinition 56 I1 47 - +#horizontalCoordinateDefinition 57 I1 48 - +#timeUnitFlag 58 I1 49 - +#timeCoordinateDefinition 59 I1 50 - +#! Position definition: mixed coordinates +#mixedCoordinateFieldFlag 60 I1 51 - +#coordinate1Flag 61 I1 52 - +#averagingFlag 62 I1 53 - +#positionOfLevel1 63 S4 54 - +#positionOfLevel2 67 S4 55 - +#coordinate2Flag 71 I1 56 - +#averagingFlag 72 I1 57 - +#positionOfLevel1 73 S4 58 - +#positionOfLevel2 77 S4 59 - +#! Data grid definitions +#coordinate3Flag 81 I1 60 - +#coordinate4Flag 82 I1 61 - +#coordinate4OfFirstGridPoint 83 S4 62 - +#coordinate3OfFirstGridPoint 87 S4 63 - +#coordinate4OfLastGridPoint 91 S4 64 - +#coordinate3OfLastGridPoint 95 S4 65 - +#iIncrement 99 S4 66 - +#jIncrement 103 S4 67 - +#flagForIrregularGridCoordinateList 107 I1 68 - +#flagForNormalOrStaggeredGrid 108 I1 69 - +#! Auxiliary information +#flagForAnyFurtherInformation 109 I1 70 - +#numberInHorizontalCoordinates 110 I1 71 - +#numberInMixedCoordinateDefinition 111 I2 72 - +#numberInTheGridCoordinateList 113 I2 73 - +#numberInTheAuxiliaryArray 115 I2 74 - +#! Horizontal coordinate definition +#horizontalCoordinateSupplement - LP_S4 - numberInHorizontalCoordinates +#! Mixed coordinate definition +#mixedCoordinateDefinition - LP_S4 - numberInMixedCoordinateDefinition +#! Grid coordinate list +#gridCoordinateList - LP_S4 - numberInTheGridCoordinateList +#! Auxiliary array +#auxiliaryArray - LP_I4 - numberInTheAuxiliaryArray +#! Post-auxiliary array +#if3 - IF_EQ 1 flagShowingPostAuxiliaryArrayInUse +#sizeOfPostAuxiliaryArray - I4 - - +#arrayValues - LP_I4M1 - sizeOfPostAuxiliaryArray +#endif3 - ENDIF if3 +## + +constant GRIBEXSection1Problem = 0 ; + +template mars_labeling "grib1/mars_labeling.def"; +transient localFlag=1 : hidden ; + +constant oceanStream = 1090; + +if(marsStream == oceanStream) +{ + unsigned[2] perturbationNumber : dump ; +} + +if(marsStream != oceanStream) +{ + unsigned[1] perturbationNumber : dump ; + pad padding_loc4_2(1); +} + +unsigned[1] flagShowingPostAuxiliaryArrayInUse; +# 'grib1/ocean.1.table'; + +unsigned[1] systemNumber : dump ; +alias system=systemNumber; + +unsigned[1] methodNumber : dump ; + + +# +# Coordinate structure definition +# + +unsigned[1] spaceUnitFlag : dump ; + +unsigned[1] verticalCoordinateDefinition : dump ; + +unsigned[1] horizontalCoordinateDefinition : dump ; + +unsigned[1] timeUnitFlag : dump ; + +unsigned[1] timeCoordinateDefinition : dump ; + + +# +# Position definition: mixed coordinates +# + +unsigned[1] mixedCoordinateFieldFlag : dump ; + +unsigned[1] coordinate1Flag : dump ; + +unsigned[1] averaging1Flag : dump ; + +signed[4] coordinate1Start : dump ; + +signed[4] coordinate1End : dump ; + +unsigned[1] coordinate2Flag : dump ; + +unsigned[1] averaging2Flag : dump ; + +signed[4] coordinate2Start : dump ; + +signed[4] coordinate2End : dump ; + +# +# Data grid definitions +# + +unsigned[1] coordinate3Flag : dump ; + +unsigned[1] coordinate4Flag : dump ; + +signed[4] coordinate4OfFirstGridPoint : dump; + +signed[4] coordinate3OfFirstGridPoint : dump ; + +signed[4] coordinate4OfLastGridPoint : dump; + +signed[4] coordinate3OfLastGridPoint : dump ; + +signed[4] iIncrement : dump ; + +signed[4] jIncrement : dump; + +flags[1] flagForIrregularGridCoordinateList 'grib1/ocean.1.table' : dump; + +flags[1] flagForNormalOrStaggeredGrid 'grib1/ocean.1.table' : dump; + +# +# Auxiliary information +# + +flags[1] flagForAnyFurtherInformation 'grib1/ocean.1.table' : dump; + +unsigned[1] numberInHorizontalCoordinates : dump; + +unsigned[2] numberInMixedCoordinateDefinition : dump; + +unsigned[2] numberInTheGridCoordinateList : dump; + +unsigned[2] numberInTheAuxiliaryArray : dump ; + +# +# Horizontal coordinate definition +# + + +unsigned[4] horizontalCoordinateSupplement[numberInHorizontalCoordinates] : dump; + +# +# Mixed coordinate definition +# + + +unsigned[4] mixedCoordinateDefinition[numberInMixedCoordinateDefinition] : dump; + +# +# Grid coordinate list +# +if (numberInTheGridCoordinateList>0) { + + signed[4] gridCoordinate[numberInTheGridCoordinateList] : dump; +} + +# +# Auxiliary array +# + +unsigned[4] auxiliary[numberInTheAuxiliaryArray] : dump; + +# +# Post-auxiliary array +# + +constant postAuxiliaryArrayPresent = 1; + +if (flagShowingPostAuxiliaryArrayInUse == postAuxiliaryArrayPresent){ + unsigned[4] sizeOfPostAuxiliaryArrayPlusOne : dump; + meta sizeOfPostAuxiliaryArray evaluate(sizeOfPostAuxiliaryArrayPlusOne - 1); + if (sizeOfPostAuxiliaryArray>0) { + unsigned[4] postAuxiliary[sizeOfPostAuxiliaryArray] : dump; + + if (sizeOfPostAuxiliaryArray>3) { + meta referenceDate element(postAuxiliary,3); + } + } else { + transient referenceDate=0; + } + +} +alias hdate = dataDate; + + + +template local_use "grib1/mars_labeling.4.def"; +# END 1/local.98.4 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.40.def b/definitions/grib1/local.98.40.def new file mode 100644 index 000000000..4cc4c586b --- /dev/null +++ b/definitions/grib1/local.98.40.def @@ -0,0 +1,52 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.40 ---------------------------------------------------------------------- +# LOCAL 98 40 +# +# localDefinitionTemplate_040 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#model 52 I2 +#domain 54 I2 +#spareSetToZero 56 + +constant GRIBEXSection1Problem = 56 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump; +alias number = perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; + +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=1; + +codetable[2] marsModel "mars/model.[centre:l].table" = "cosmo" : dump,lowercase ; +alias mars.model = marsModel; + +codetable[2] marsDomain "mars/domain.[centre:l].table" = "s" : dump,lowercase ; +alias mars.domain = marsDomain; + +pad padding_local40_1(1); + +# END 1/local.98.40 ---------------------------------------------------------------------- + diff --git a/definitions/grib1/local.98.5.def b/definitions/grib1/local.98.5.def new file mode 100644 index 000000000..3ff722f27 --- /dev/null +++ b/definitions/grib1/local.98.5.def @@ -0,0 +1,94 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.5 ---------------------------------------------------------------------- +# LOCAL 98 5 +# +# localDefinitionTemplate_005 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#decimalScaleFactor 52 S1 44 - +#thresholdIndicator 53 I1 45 - +#lowerThreshold 54 S2 46 - +#upperThreshold 56 S2 47 - +#spareSetToZero 58 PAD n/a 1 +# + +constant GRIBEXSection1Problem = 58 - section1Length ; + +constant probPoint=5 : hidden; +constant probContinous=9 : hidden; + +# 1 to 2 conversion +_if (timeRangeIndicator==3 || timeRangeIndicator==4 + || timeRangeIndicator==5) { + alias productDefinitionTemplateNumber=probContinous; +} else { + alias productDefinitionTemplateNumber=probPoint; +} + + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] forecastProbabilityNumber : dump ; + +unsigned[1] totalNumberOfForecastProbabilities : dump; + +signed[1] localDecimalScaleFactor : dump ; + +unsigned[1] thresholdIndicator : dump ; + +signed[2] lowerThreshold : dump ; + +signed[2] upperThreshold : dump; + +# 1 to 2 conversion +_if (thresholdIndicator == 1) { +# Probability of event above lower limit + transient probabilityType=3; + transient scaleFactorOfLowerLimit=localDecimalScaleFactor; + transient scaledValueOfLowerLimit=lowerThreshold; + transient scaleFactorOfUpperLimit=missing(); + transient scaledValueOfUpperLimit=missing(); + +} +_if (thresholdIndicator == 2) { +# Probability of event below upper limit + transient probabilityType=4; + transient scaleFactorOfLowerLimit= missing(); + transient scaledValueOfLowerLimit=missing(); + transient scaleFactorOfUpperLimit=localDecimalScaleFactor; + transient scaledValueOfUpperLimit=upperThreshold; +} +_if (thresholdIndicator == 3) { +# Probability of event between lower and upper limits. +# The range includes the lower limit but not the upper limit + transient probabilityType=2; + transient scaleFactorOfLowerLimit=localDecimalScaleFactor; + transient scaledValueOfLowerLimit=lowerThreshold; + transient scaleFactorOfUpperLimit=localDecimalScaleFactor; + transient scaledValueOfUpperLimit=upperThreshold; +} + + +# spareSetToZero +pad padding_loc5_1(1); +alias number = forecastProbabilityNumber; +alias totalNumber=totalNumberOfForecastProbabilities; + +# END 1/local.98.5 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.50.def b/definitions/grib1/local.98.50.def new file mode 100644 index 000000000..e1e3c2f04 --- /dev/null +++ b/definitions/grib1/local.98.50.def @@ -0,0 +1,68 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.50 ---------------------------------------------------------------------- +# LOCAL 98 50 +# +# localDefinitionTemplate_050 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#modelIdentifier 52 I1 44 - +#latitudeOfNorthWestCornerOfArea 53 S4 45 - +#longitudeOfNorthWestCornerOfArea 57 S4 46 - +#latitudeOfSouthEastCornerOfArea 61 S4 47 - +#longitudeOfSouthEastCornerOfArea 65 S4 48 - +#!reservedForECMWFAdditions +#originalParameterNumber 69 I1 49 - +#originalParameterNumber 70 I1 50 - +#spareSetToZeroOctets 71 PAD n/a 46 +#spareSetToZeroKsec1 n/a PAD 51 10 +#optionalData 117 BYTES 61 184 +# + +constant GRIBEXSection1Problem = 300 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] perturbationNumber : dump ; +alias number=perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump ; +alias totalNumber=numberOfForecastsInEnsemble; + +unsigned[1] modelIdentifier : dump ; + +signed[4] latitudeOfNorthWestCornerOfArea : dump; + +signed[4] longitudeOfNorthWestCornerOfArea : dump ; + +signed[4] latitudeOfSouthEastCornerOfArea : dump; + +signed[4] longitudeOfSouthEastCornerOfArea : dump; + +# reservedForECMWFAdditions +unsigned[1] originalParameterNumber : dump ; + +unsigned[1] originalParameterTableNumber : dump ; + +pad padding_loc50_1(46); + +ascii[184] optionalData : dump ; + + +# END 1/local.98.50 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.6.def b/definitions/grib1/local.98.6.def new file mode 100644 index 000000000..3e69998bd --- /dev/null +++ b/definitions/grib1/local.98.6.def @@ -0,0 +1,55 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.6 ---------------------------------------------------------------------- +# LOCAL 98 6 +# +# localDefinitionTemplate_006 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#zeroes 50 PAD 42 2 +#dateOfSSTFieldUsed 52 D3 44 - +#typeOfSSTFieldUsed 55 I1 45 - +#countOfICEFieldsUsed 56 I1 46 - +#iceFieldDate+Satellite 57 LIST 47 countOfICEFieldsUsed +#dateOfIceFieldUsed - D3 - - +#satelliteNumber - I1 - - +#ENDLIST - ENDLIST - iceFieldDate+Satellite +# + + +template mars_labeling "grib1/mars_labeling.def"; + +# zeroes + +pad padding_loc6_1(2); + +unsigned[3] dateSSTFieldUsed : dump; + +unsigned[1] typeOfSSTFieldUsed : dump; + +unsigned[1] countOfICEFieldsUsed : dump; + + +ICEFieldsUsed list(countOfICEFieldsUsed) +{ + unsigned[3] dateOfIceFieldUsed : dump ; + unsigned[1] satelliteNumber : dump ; +} + +constant GRIBEXSection1Problem = 56 + countOfICEFieldsUsed * 3 - section1Length ; + +# END 1/local.98.6 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.7.def b/definitions/grib1/local.98.7.def new file mode 100644 index 000000000..1b2c6176b --- /dev/null +++ b/definitions/grib1/local.98.7.def @@ -0,0 +1,62 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 1/local.98.7 ---------------------------------------------------------------------- +# LOCAL 98 7 +# +# localDefinitionTemplate_007 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#domain 52 I1 44 - +#diagnosticNumber 53 I1 45 - +#spareSetToZero 54 PAD n/a 1 +# +# 1-> 2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=7; + +constant GRIBEXSection1Problem = 54 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] iterationNumber : dump; +alias number=iterationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; + +unsigned[1] sensitiveAreaDomain : dump; +#alias mars.domain=sensitiveAreaDomain; + +unsigned[1] diagnosticNumber : dump; + +alias iteration = iterationNumber; +alias diagnostic = diagnosticNumber; + +alias local.iterationNumber=iterationNumber; +alias local.numberOfForecastsInEnsemble=numberOfForecastsInEnsemble; +alias local.sensitiveAreaDomain=sensitiveAreaDomain; +alias local.diagnosticNumber=diagnosticNumber; + + +# spareSetToZero +pad padding_loc7_1(1); + + +# END 1/local.98.7 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.8.def b/definitions/grib1/local.98.8.def new file mode 100644 index 000000000..e25383c55 --- /dev/null +++ b/definitions/grib1/local.98.8.def @@ -0,0 +1,37 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.8 ---------------------------------------------------------------------- +# LOCAL 98 8 +# +# localDefinitionTemplate_008 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#intervalBetweenTimes 50 I1 42 - +#unsignedIntegers 51 I1 43 12 +# + +constant GRIBEXSection1Problem = 62 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[1] intervalBetweenTimes : dump; + +constant numberOfIntegers=12; +unsigned[1] unsignedIntegers[numberOfIntegers] : dump; + + +# END 1/local.98.8 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local.98.9.def b/definitions/grib1/local.98.9.def new file mode 100644 index 000000000..8633f944e --- /dev/null +++ b/definitions/grib1/local.98.9.def @@ -0,0 +1,111 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.9 ---------------------------------------------------------------------- +# LOCAL 98 9 +# +# localDefinitionTemplate_009 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#forecastOrSingularVectorNumber 50 I2 42 - +#! These elements are set to zero for perturbed forecast +#if1 - IF_EQ 60 type +#octetsSetToZero 52 PAD n/a 41 +#ksec1SetToZero n/a PAD 43 13 +#endif1 - ENDIF if1 +#! These elements are coded for singular vectors +#if2 - IF_NEQ 60 type +#numberOfIterations 52 I2 43 - +#numberOfSingularVectorsComputed 54 I2 44 - +#normAtInitialTime 56 I1 45 - +#normAtFinalTime 57 I1 46 - +#multiplicationFactorForLatLong 58 I4 47 - +#northWestLatitudeOfLPOArea 62 S4 48 - +#northWestLongitudeOfLPOArea 66 S4 49 - +#southEastLatitudeOfLPOArea 70 S4 50 - +#southEastLongitudeOfLPOArea 74 S4 51 - +#accuracyMultipliedByFactor 78 I4 52 - +#numberOfSingularVectorsEvolved 82 I2 53 - +#!Ritz numbers: +#NINT(LOG10(RITZ)-5) 84 S4 54 - +#NINT(RITZ/(EXP(LOG(10.0*KSEC1(54)) 88 S4 55 - +#endif2 - ENDIF if2 +#spareSetToZero 92 PAD n/a 1 +# +# 1-> 2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=9; + +constant GRIBEXSection1Problem = 92 - section1Length ; + +template mars_labeling "grib1/mars_labeling.def"; + +unsigned[2] forecastOrSingularVectorNumber : dump; + +# +# These elements are set to zero for perturbed forecast +# + +constant perturbedType = 60; +if(type == perturbedType) +{ + # octetsSetToZero + pad padding_loc9_1(41); +} + +# +# These elements are coded for singular vectors +# + +if(type != perturbedType) +{ + unsigned[2] numberOfIterations : dump; + unsigned[2] numberOfSingularVectorsComputed : dump; + unsigned[1] normAtInitialTime : dump ; + unsigned[1] normAtFinalTime : dump ; + unsigned[4] multiplicationFactorForLatLong : dump; + signed[4] northWestLatitudeOfLPOArea : dump ; + signed[4] northWestLongitudeOfLPOArea : dump; + signed[4] southEastLatitudeOfLPOArea : dump; + signed[4] southEastLongitudeOfLPOArea : dump; + unsigned[4] accuracyMultipliedByFactor : dump; + unsigned[2] numberOfSingularVectorsEvolved : dump; + # Ritz numbers: + signed[4] NINT_LOG10_RITZ : dump ; + signed[4] NINT_RITZ_EXP : dump ; + + alias local.numberOfIterations= numberOfIterations; + alias local.numberOfSingularVectorsComputed= numberOfSingularVectorsComputed ; + alias local.normAtInitialTime= normAtInitialTime ; + alias local.normAtFinalTime= normAtFinalTime ; + alias local.multiplicationFactorForLatLong= multiplicationFactorForLatLong ; + alias local.northWestLatitudeOfLPOArea= northWestLatitudeOfLPOArea ; + alias local.northWestLongitudeOfLPOArea= northWestLongitudeOfLPOArea ; + alias local.southEastLatitudeOfLPOArea= southEastLatitudeOfLPOArea ; + alias local.southEastLongitudeOfLPOArea= southEastLongitudeOfLPOArea ; + alias local.accuracyMultipliedByFactor= accuracyMultipliedByFactor ; + alias local.numberOfSingularVectorsEvolved= numberOfSingularVectorsEvolved ; +# Ritz numbers: + alias local.NINT_LOG10_RITZ= NINT_LOG10_RITZ ; + alias local.NINT_RITZ_EXP= NINT_RITZ_EXP ; +} + +# spareSetToZero +pad padding_loc9_2(1); + +# END 1/local.98.9 ---------------------------------------------------------------------- + +# END grib::edition diff --git a/definitions/grib1/local.98.def b/definitions/grib1/local.98.def new file mode 100644 index 000000000..77b4550ad --- /dev/null +++ b/definitions/grib1/local.98.def @@ -0,0 +1,12 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[1] localDefinitionNumber = 1 : dump,edition_specific,no_copy; +template localDefinition "grib1/local.[centre:l].[localDefinitionNumber:l].def"; + diff --git a/definitions/grib1/localConcepts/ammc/name.def b/definitions/grib1/localConcepts/ammc/name.def new file mode 100644 index 000000000..79eee6809 --- /dev/null +++ b/definitions/grib1/localConcepts/ammc/name.def @@ -0,0 +1,5 @@ +# Automatically generated by ./create_def.pl from database param@balthasar, do not edit +#test +'test' = { + indicatorOfParameter = 1 ; +} diff --git a/definitions/grib1/localConcepts/ammc/paramId.def b/definitions/grib1/localConcepts/ammc/paramId.def new file mode 100644 index 000000000..39a39732f --- /dev/null +++ b/definitions/grib1/localConcepts/ammc/paramId.def @@ -0,0 +1,5 @@ +# Automatically generated by ./create_def.pl from database param@balthasar, do not edit +#test +'999999999' = { + indicatorOfParameter = 1 ; +} diff --git a/definitions/grib1/localConcepts/ammc/shortName.def b/definitions/grib1/localConcepts/ammc/shortName.def new file mode 100644 index 000000000..b391987fd --- /dev/null +++ b/definitions/grib1/localConcepts/ammc/shortName.def @@ -0,0 +1,5 @@ +# Automatically generated by ./create_def.pl from database param@balthasar, do not edit +#test +'' = { + indicatorOfParameter = 1 ; +} diff --git a/definitions/grib1/localConcepts/ammc/units.def b/definitions/grib1/localConcepts/ammc/units.def new file mode 100644 index 000000000..1b229b505 --- /dev/null +++ b/definitions/grib1/localConcepts/ammc/units.def @@ -0,0 +1,5 @@ +# Automatically generated by ./create_def.pl from database param@balthasar, do not edit +#test +'(-1 to 1)' = { + indicatorOfParameter = 1 ; +} diff --git a/definitions/grib1/localConcepts/cnmc/name.def b/definitions/grib1/localConcepts/cnmc/name.def new file mode 100644 index 000000000..6d14b52b6 --- /dev/null +++ b/definitions/grib1/localConcepts/cnmc/name.def @@ -0,0 +1,2435 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'Pressure (S) (not reduced)' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure +'Pressure' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Pressure Reduced to MSL +'Pressure Reduced to MSL' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 102 ; + } +#Pressure Tendency (S) +'Pressure Tendency (S)' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (S) +'Geopotential (S)' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (full lev) +'Geopotential (full lev)' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 110 ; + } +#Geopotential +'Geopotential' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Geometric Height of the earths surface above sea level +'Geometric Height of the earths surface above sea level' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'Geometric Height of the layer limits above sea level(NN)' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 109 ; + } +#Total Column Integrated Ozone +'Total Column Integrated Ozone' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature (G) +'Temperature (G)' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 1 ; + } +#2m Temperature (AV) +'2m Temperature (AV)' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Climat. temperature, 2m Temperature +'Climat. temperature, 2m Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Temperature +'Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#Max 2m Temperature (i) +'Max 2m Temperature (i)' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#Min 2m Temperature (i) +'Min 2m Temperature (i)' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#2m Dew Point Temperature +'2m Dew Point Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Dew Point Temperature (AV) +'2m Dew Point Temperature (AV)' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Radar spectra (1) +'Radar spectra (1)' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + } +#Wave spectra (1) +'Wave spectra (1)' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'Wave spectra (2)' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'Wave spectra (3)' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind Direction (DD_10M) +'Wind Direction (DD_10M)' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind Direction (DD) +'Wind Direction (DD)' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Wind speed (SP_10M) +'Wind speed (SP_10M)' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind speed (SP) +'Wind speed (SP)' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 110 ; + } +#U component of wind +'U component of wind' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#U component of wind +'U component of wind' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'V component of wind' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#V component of wind +'V component of wind' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'Vertical Velocity (Pressure) ( omega=dp/dt )' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vertical Velocity (Geometric) (w) +'Vertical Velocity (Geometric) (w)' = { + table2Version = 2 ; + indicatorOfParameter = 40 ; + } +#Specific Humidity (S) +'Specific Humidity (S)' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 1 ; + } +#Specific Humidity (2m) +'Specific Humidity (2m)' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Specific Humidity +'Specific Humidity' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#2m Relative Humidity +'2m Relative Humidity' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Relative Humidity +'Relative Humidity' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#Total column integrated water vapour +'Total column integrated water vapour' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + indicatorOfTypeOfLevel = 1 ; + } +#Evaporation (s) +'Evaporation (s)' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Total Column-Integrated Cloud Ice +'Total Column-Integrated Cloud Ice' = { + table2Version = 2 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Precipitation rate (S) +'Total Precipitation rate (S)' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale Precipitation rate +'Large-Scale Precipitation rate' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + timeRangeIndicator = 4 ; + } +#Convective Precipitation rate +'Convective Precipitation rate' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow depth water equivalent +'Snow depth water equivalent' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow Depth +'Snow Depth' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Cloud Cover +'Total Cloud Cover' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Cloud Cover +'Convective Cloud Cover' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Cover (800 hPa - Soil) +'Cloud Cover (800 hPa - Soil)' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (400 - 800 hPa) +'Cloud Cover (400 - 800 hPa)' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (0 - 400 hPa) +'Cloud Cover (0 - 400 hPa)' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Column-Integrated Cloud Water +'Total Column-Integrated Cloud Water' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'Convective Snowfall rate water equivalent (s)' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale snowfall rate water equivalent (s) +'Large-Scale snowfall rate water equivalent (s)' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Land Cover (1=land, 0=sea) +'Land Cover (1=land, 0=sea)' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + indicatorOfTypeOfLevel = 1 ; + } +#Surface Roughness length Surface Roughness +'Surface Roughness length Surface Roughness' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'Albedo (in short-wave)' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'Albedo (in short-wave)' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'Soil Temperature ( 36 cm depth, vv=0h)' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 36 ; + } +#Soil Temperature (41 cm depth) +'Soil Temperature (41 cm depth)' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 41 ; + } +#Soil Temperature +'Soil Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 9 ; + } +#Soil Temperature +'Soil Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#Column-integrated Soil Moisture +'Column-integrated Soil Moisture' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 190 ; + topLevel = 100 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'Column-integrated Soil Moisture (1) 0 -10 cm' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + bottomLevel = 10 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'Column-integrated Soil Moisture (2) 10-100cm' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#Plant cover +'Plant cover' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + indicatorOfTypeOfLevel = 1 ; + } +#Water Runoff (10-100) +'Water Runoff (10-100)' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + timeRangeIndicator = 4 ; + topLevel = 10 ; + bottomLevel = 100 ; + } +#Water Runoff (10-190) +'Water Runoff (10-190)' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + timeRangeIndicator = 4 ; + topLevel = 10 ; + bottomLevel = 190 ; + } +#Water Runoff (s) +'Water Runoff (s)' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + timeRangeIndicator = 4 ; + topLevel = 0 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'Sea Ice Cover ( 0= free, 1=cover)' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Thickness +'sea Ice Thickness' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + indicatorOfTypeOfLevel = 1 ; + } +#Significant height of combined wind waves and swell +'Significant height of combined wind waves and swell' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Direction of wind waves +'Direction of wind waves' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'Significant height of wind waves' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'Mean period of wind waves' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'Direction of swell waves' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'Significant height of swell waves' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'Mean period of swell waves' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Net short wave radiation flux (m) (at the surface) +'Net short wave radiation flux (m) (at the surface)' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'Net short wave radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (at the surface) +'Net long wave radiation flux (m) (at the surface)' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'Net long wave radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net short wave radiation flux (m) (on the model top) +'Net short wave radiation flux (m) (on the model top)' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'Net short wave radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'Net long wave radiation flux (m) (on the model top)' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'Net long wave radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Latent Heat Net Flux (m) +'Latent Heat Net Flux (m)' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Sensible Heat Net Flux (m) +'Sensible Heat Net Flux (m)' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, U-Component (m) +'Momentum Flux, U-Component (m)' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, V-Component (m) +'Momentum Flux, V-Component (m)' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation (m) (at the surface) +'Photosynthetically active radiation (m) (at the surface)' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation +'Photosynthetically active radiation' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Solar radiation heating rate +'Solar radiation heating rate' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + indicatorOfTypeOfLevel = 110 ; + } +#Thermal radiation heating rate +'Thermal radiation heating rate' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + indicatorOfTypeOfLevel = 110 ; + } +#Latent heat flux from bare soil +'Latent heat flux from bare soil' = { + table2Version = 201 ; + indicatorOfParameter = 18 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Latent heat flux from plants +'Latent heat flux from plants' = { + table2Version = 201 ; + indicatorOfParameter = 19 ; + indicatorOfTypeOfLevel = 111 ; + timeRangeIndicator = 3 ; + } +#Sunshine +'Sunshine' = { + table2Version = 201 ; + indicatorOfParameter = 20 ; + timeRangeIndicator = 4 ; + } +#Stomatal Resistance +'Stomatal Resistance' = { + table2Version = 201 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Cloud cover +'Cloud cover' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#Non-Convective Cloud Cover, grid scale +'Non-Convective Cloud Cover, grid scale' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Mixing Ratio +'Cloud Mixing Ratio' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Ice Mixing Ratio +'Cloud Ice Mixing Ratio' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 110 ; + } +#Rain mixing ratio +'Rain mixing ratio' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + indicatorOfTypeOfLevel = 110 ; + } +#Snow mixing ratio +'Snow mixing ratio' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated rain +'Total column integrated rain' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total column integrated snow +'Total column integrated snow' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + indicatorOfTypeOfLevel = 1 ; + } +#Grauple +'Grauple' = { + table2Version = 201 ; + indicatorOfParameter = 39 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated grauple +'Total column integrated grauple' = { + table2Version = 201 ; + indicatorOfParameter = 40 ; + } +#Total Column integrated water (all components incl. precipitation) +'Total Column integrated water (all components incl. precipitation)' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertical integral of divergence of total water content (s) +'vertical integral of divergence of total water content (s)' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + indicatorOfTypeOfLevel = 1 ; + } +#subgrid scale cloud water +'subgrid scale cloud water' = { + table2Version = 201 ; + indicatorOfParameter = 43 ; + indicatorOfTypeOfLevel = 110 ; + } +#subgridscale cloud ice +'subgridscale cloud ice' = { + table2Version = 201 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#cloud cover CH (0..8) +'cloud cover CH (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'cloud cover CM (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'cloud cover CL (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#cloud base above msl, shallow convection +'cloud base above msl, shallow convection' = { + table2Version = 201 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 2 ; + } +#cloud top above msl, shallow convection +'cloud top above msl, shallow convection' = { + table2Version = 201 ; + indicatorOfParameter = 59 ; + indicatorOfTypeOfLevel = 3 ; + } +#specific cloud water content, convective cloud +'specific cloud water content, convective cloud' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 110 ; + } +#Height of Convective Cloud Base (i) +'Height of Convective Cloud Base (i)' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 2 ; + } +#Height of Convective Cloud Top (i) +'Height of Convective Cloud Top (i)' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'base index (vertical level) of main convective cloud (i)' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'top index (vertical level) of main convective cloud (i)' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to convection +'Temperature tendency due to convection' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to convection +'Specific humitiy tendency due to convection' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 110 ; + } +#zonal wind tendency due to convection +'zonal wind tendency due to convection' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to convection +'meridional wind tendency due to convection' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 110 ; + } +#height of top of dry convection +'height of top of dry convection' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'height of 0 degree celsius level code 0,3,6 ?' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 4 ; + } +#Height of snow fall limit +'Height of snow fall limit' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 4 ; + } +#Tendency of specific cloud liquid water content due to conversion +'Tendency of specific cloud liquid water content due to conversion' = { + table2Version = 201 ; + indicatorOfParameter = 88 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud ice content due to convection +'tendency of specific cloud ice content due to convection' = { + table2Version = 201 ; + indicatorOfParameter = 89 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'Specific content of precipitation particles (needed for water loadin)g' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 110 ; + } +#Large scale rain rate +'Large scale rain rate' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale snowfall rate water equivalent +'Large scale snowfall rate water equivalent' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale rain rate (s) +'Large scale rain rate (s)' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Convective rain rate +'Convective rain rate' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective snowfall rate water equivalent +'Convective snowfall rate water equivalent' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective rain rate (s) +'Convective rain rate (s)' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#rain amount, grid-scale plus convective +'rain amount, grid-scale plus convective' = { + table2Version = 201 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#snow amount, grid-scale plus convective +'snow amount, grid-scale plus convective' = { + table2Version = 201 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to grid scale precipation +'Temperature tendency due to grid scale precipation' = { + table2Version = 201 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to grid scale precipitation +'Specific humitiy tendency due to grid scale precipitation' = { + table2Version = 201 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'tendency of specific cloud liquid water content due to grid scale precipitation' = { + table2Version = 201 ; + indicatorOfParameter = 127 ; + indicatorOfTypeOfLevel = 110 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'Fresh snow factor (weighting function for albedo indicating freshness of snow)' = { + table2Version = 201 ; + indicatorOfParameter = 129 ; + indicatorOfTypeOfLevel = 1 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'tendency of specific cloud ice content due to grid scale precipitation' = { + table2Version = 201 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 110 ; + } +#Graupel (snow pellets) precipitation rate +'Graupel (snow pellets) precipitation rate' = { + table2Version = 201 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 1 ; + } +#Graupel (snow pellets) precipitation rate +'Graupel (snow pellets) precipitation rate' = { + table2Version = 201 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow density +'Snow density' = { + table2Version = 201 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure perturbation +'Pressure perturbation' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + indicatorOfTypeOfLevel = 110 ; + } +#supercell detection index 1 (rot. up+down drafts) +'supercell detection index 1 (rot. up+down drafts)' = { + table2Version = 201 ; + indicatorOfParameter = 141 ; + indicatorOfTypeOfLevel = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'supercell detection index 2 (only rot. up drafts)' = { + table2Version = 201 ; + indicatorOfParameter = 142 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, most unstable +'Convective Available Potential Energy, most unstable' = { + table2Version = 201 ; + indicatorOfParameter = 143 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, most unstable +'Convective Inhibition, most unstable' = { + table2Version = 201 ; + indicatorOfParameter = 144 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, mean layer +'Convective Available Potential Energy, mean layer' = { + table2Version = 201 ; + indicatorOfParameter = 145 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, mean layer +'Convective Inhibition, mean layer' = { + table2Version = 201 ; + indicatorOfParameter = 146 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective turbulent kinetic enery +'Convective turbulent kinetic enery' = { + table2Version = 201 ; + indicatorOfParameter = 147 ; + } +#Tendency of turbulent kinetic energy +'Tendency of turbulent kinetic energy' = { + table2Version = 201 ; + indicatorOfParameter = 148 ; + indicatorOfTypeOfLevel = 109 ; + } +#Kinetic Energy +'Kinetic Energy' = { + table2Version = 201 ; + indicatorOfParameter = 149 ; + indicatorOfTypeOfLevel = 110 ; + } +#Turbulent Kinetic Energy +'Turbulent Kinetic Energy' = { + table2Version = 201 ; + indicatorOfParameter = 152 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusioncoefficient for momentum +'Turbulent diffusioncoefficient for momentum' = { + table2Version = 201 ; + indicatorOfParameter = 153 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'Turbulent diffusion coefficient for heat (and moisture)' = { + table2Version = 201 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent transfer coefficient for impulse +'Turbulent transfer coefficient for impulse' = { + table2Version = 201 ; + indicatorOfParameter = 170 ; + indicatorOfTypeOfLevel = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'Turbulent transfer coefficient for heat (and Moisture)' = { + table2Version = 201 ; + indicatorOfParameter = 171 ; + indicatorOfTypeOfLevel = 1 ; + } +#mixed layer depth +'mixed layer depth' = { + table2Version = 201 ; + indicatorOfParameter = 173 ; + indicatorOfTypeOfLevel = 1 ; + } +#maximum Wind 10m +'maximum Wind 10m' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + timeRangeIndicator = 2 ; + } +#Air concentration of Ruthenium 103 +'Air concentration of Ruthenium 103' = { + table2Version = 201 ; + indicatorOfParameter = 194 ; + indicatorOfTypeOfLevel = 100 ; + } +#Soil Temperature (multilayers) +'Soil Temperature (multilayers)' = { + table2Version = 201 ; + indicatorOfParameter = 197 ; + indicatorOfTypeOfLevel = 111 ; + } +#Column-integrated Soil Moisture (multilayers) +'Column-integrated Soil Moisture (multilayers)' = { + table2Version = 201 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 111 ; + } +#soil ice content (multilayers) +'soil ice content (multilayers)' = { + table2Version = 201 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 111 ; + } +#Plant Canopy Surface Water +'Plant Canopy Surface Water' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow temperature (top of snow) +'Snow temperature (top of snow)' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#Minimal Stomatal Resistance +'Minimal Stomatal Resistance' = { + table2Version = 201 ; + indicatorOfParameter = 212 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Temperature +'sea Ice Temperature' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'Base reflectivity' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'Base reflectivity' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 110 ; + } +#Base reflectivity (cmax) +'Base reflectivity (cmax)' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 200 ; + } +#unknown +'unknown' = { + table2Version = 201 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 110 ; + } +#Effective transmissivity of solar radiation +'Effective transmissivity of solar radiation' = { + table2Version = 201 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 110 ; + } +#sum of contributions to evaporation +'sum of contributions to evaporation' = { + table2Version = 201 ; + indicatorOfParameter = 236 ; + } +#total transpiration from all soil layers +'total transpiration from all soil layers' = { + table2Version = 201 ; + indicatorOfParameter = 237 ; + } +#total forcing at soil surface +'total forcing at soil surface' = { + table2Version = 201 ; + indicatorOfParameter = 238 ; + } +#residuum of soil moisture +'residuum of soil moisture' = { + table2Version = 201 ; + indicatorOfParameter = 239 ; + } +#Massflux at convective cloud base +'Massflux at convective cloud base' = { + table2Version = 201 ; + indicatorOfParameter = 240 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy +'Convective Available Potential Energy' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + indicatorOfTypeOfLevel = 1 ; + } +#moisture convergence for Kuo-type closure +'moisture convergence for Kuo-type closure' = { + table2Version = 201 ; + indicatorOfParameter = 243 ; + indicatorOfTypeOfLevel = 1 ; + } +#total wave direction +'total wave direction' = { + table2Version = 202 ; + indicatorOfParameter = 4 ; + } +#wind sea mean period +'wind sea mean period' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 102 ; + } +#wind sea peak period +'wind sea peak period' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + } +#swell mean period +'swell mean period' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 102 ; + } +#swell peak period +'swell peak period' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + } +#total wave peak period +'total wave peak period' = { + table2Version = 202 ; + indicatorOfParameter = 9 ; + } +#total wave mean period +'total wave mean period' = { + table2Version = 202 ; + indicatorOfParameter = 10 ; + } +#total Tm1 period +'total Tm1 period' = { + table2Version = 202 ; + indicatorOfParameter = 17 ; + } +#total Tm2 period +'total Tm2 period' = { + table2Version = 202 ; + indicatorOfParameter = 18 ; + } +#total directional spread +'total directional spread' = { + table2Version = 202 ; + indicatorOfParameter = 19 ; + } +#analysis error(standard deviation), geopotential(gpm) +'analysis error(standard deviation), geopotential(gpm)' = { + table2Version = 202 ; + indicatorOfParameter = 40 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), u-comp. of wind +'analysis error(standard deviation), u-comp. of wind' = { + table2Version = 202 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), v-comp. of wind +'analysis error(standard deviation), v-comp. of wind' = { + table2Version = 202 ; + indicatorOfParameter = 42 ; + level = 100 ; + } +#zonal wind tendency due to subgrid scale oro. +'zonal wind tendency due to subgrid scale oro.' = { + table2Version = 202 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to subgrid scale oro. +'meridional wind tendency due to subgrid scale oro.' = { + table2Version = 202 ; + indicatorOfParameter = 45 ; + indicatorOfTypeOfLevel = 110 ; + } +#Standard deviation of sub-grid scale orography +'Standard deviation of sub-grid scale orography' = { + table2Version = 202 ; + indicatorOfParameter = 46 ; + indicatorOfTypeOfLevel = 1 ; + } +#Anisotropy of sub-gridscale orography +'Anisotropy of sub-gridscale orography' = { + table2Version = 202 ; + indicatorOfParameter = 47 ; + indicatorOfTypeOfLevel = 1 ; + } +#Angle of sub-gridscale orography +'Angle of sub-gridscale orography' = { + table2Version = 202 ; + indicatorOfParameter = 48 ; + indicatorOfTypeOfLevel = 1 ; + } +#Slope of sub-gridscale orography +'Slope of sub-gridscale orography' = { + table2Version = 202 ; + indicatorOfParameter = 49 ; + indicatorOfTypeOfLevel = 1 ; + } +#surface emissivity +'surface emissivity' = { + table2Version = 202 ; + indicatorOfParameter = 56 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + timeRangeIndicator = 0 ; + } +#Soil Type +'Soil Type' = { + table2Version = 202 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + } +#Leaf area index +'Leaf area index' = { + table2Version = 202 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#root depth of vegetation +'root depth of vegetation' = { + table2Version = 202 ; + indicatorOfParameter = 62 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of ozone maximum (climatological) +'height of ozone maximum (climatological)' = { + table2Version = 202 ; + indicatorOfParameter = 64 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertically integrated ozone content (climatological) +'vertically integrated ozone content (climatological)' = { + table2Version = 202 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the vegetation phase +'Plant covering degree in the vegetation phase' = { + table2Version = 202 ; + indicatorOfParameter = 67 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the quiescent phas +'Plant covering degree in the quiescent phas' = { + table2Version = 202 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 1 ; + } +#Max Leaf area index +'Max Leaf area index' = { + table2Version = 202 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 1 ; + } +#Min Leaf area index +'Min Leaf area index' = { + table2Version = 202 ; + indicatorOfParameter = 70 ; + indicatorOfTypeOfLevel = 1 ; + } +#Orographie + Land-Meer-Verteilung +'Orographie + Land-Meer-Verteilung' = { + table2Version = 202 ; + indicatorOfParameter = 71 ; + } +#variance of soil moisture content (0-10) +'variance of soil moisture content (0-10)' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + bottomLevel = 10 ; + } +#variance of soil moisture content (10-100) +'variance of soil moisture content (10-100)' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 10 ; + bottomLevel = 100 ; + } +#evergreen forest +'evergreen forest' = { + table2Version = 202 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#deciduous forest +'deciduous forest' = { + table2Version = 202 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#normalized differential vegetation index +'normalized differential vegetation index' = { + table2Version = 202 ; + indicatorOfParameter = 77 ; + timeRangeIndicator = 3 ; + } +#normalized differential vegetation index (NDVI) +'normalized differential vegetation index (NDVI)' = { + table2Version = 202 ; + indicatorOfParameter = 78 ; + timeRangeIndicator = 3 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Total sulfate aerosol +'Total sulfate aerosol' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + } +#Total sulfate aerosol (12M) +'Total sulfate aerosol (12M)' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + timeRangeIndicator = 3 ; + } +#Total soil dust aerosol +'Total soil dust aerosol' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + } +#Total soil dust aerosol (12M) +'Total soil dust aerosol (12M)' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + timeRangeIndicator = 3 ; + } +#Organic aerosol +'Organic aerosol' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + } +#Organic aerosol (12M) +'Organic aerosol (12M)' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + timeRangeIndicator = 3 ; + } +#Black carbon aerosol +'Black carbon aerosol' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + } +#Black carbon aerosol (12M) +'Black carbon aerosol (12M)' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + timeRangeIndicator = 3 ; + } +#Sea salt aerosol +'Sea salt aerosol' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + } +#Sea salt aerosol (12M) +'Sea salt aerosol (12M)' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + timeRangeIndicator = 3 ; + } +#tendency of specific humidity +'tendency of specific humidity' = { + table2Version = 202 ; + indicatorOfParameter = 104 ; + indicatorOfTypeOfLevel = 110 ; + } +#water vapor flux +'water vapor flux' = { + table2Version = 202 ; + indicatorOfParameter = 105 ; + indicatorOfTypeOfLevel = 1 ; + } +#Coriolis parameter +'Coriolis parameter' = { + table2Version = 202 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical latitude +'geographical latitude' = { + table2Version = 202 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical longitude +'geographical longitude' = { + table2Version = 202 ; + indicatorOfParameter = 115 ; + indicatorOfTypeOfLevel = 1 ; + } +#Friction velocity +'Friction velocity' = { + table2Version = 202 ; + indicatorOfParameter = 120 ; + indicatorOfTypeOfLevel = 110 ; + } +#Delay of the GPS signal trough the (total) atm. +'Delay of the GPS signal trough the (total) atm.' = { + table2Version = 202 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'Delay of the GPS signal trough wet atmos.' = { + table2Version = 202 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'Delay of the GPS signal trough dry atmos.' = { + table2Version = 202 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ozone Mixing Ratio +'Ozone Mixing Ratio' = { + table2Version = 202 ; + indicatorOfParameter = 180 ; + indicatorOfTypeOfLevel = 110 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'Air concentration of Ruthenium 103 (Ru103- concentration)' = { + table2Version = 202 ; + indicatorOfParameter = 194 ; + } +#Ru103-dry deposition +'Ru103-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 195 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ru103-wet deposition +'Ru103-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Strontium 90 +'Air concentration of Strontium 90' = { + table2Version = 202 ; + indicatorOfParameter = 197 ; + } +#Sr90-dry deposition +'Sr90-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 1 ; + } +#Sr90-wet deposition +'Sr90-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-concentration +'I131-concentration' = { + table2Version = 202 ; + indicatorOfParameter = 200 ; + } +#I131-dry deposition +'I131-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 201 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-wet deposition +'I131-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 202 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-concentration +'Cs137-concentration' = { + table2Version = 202 ; + indicatorOfParameter = 203 ; + } +#Cs137-dry deposition +'Cs137-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-wet deposition +'Cs137-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 205 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'Air concentration of Tellurium 132 (Te132-concentration)' = { + table2Version = 202 ; + indicatorOfParameter = 206 ; + } +#Te132-dry deposition +'Te132-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 207 ; + indicatorOfTypeOfLevel = 1 ; + } +#Te132-wet deposition +'Te132-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 208 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'Air concentration of Zirconium 95 (Zr95-concentration)' = { + table2Version = 202 ; + indicatorOfParameter = 209 ; + } +#Zr95-dry deposition +'Zr95-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 210 ; + indicatorOfTypeOfLevel = 1 ; + } +#Zr95-wet deposition +'Zr95-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 211 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'Air concentration of Krypton 85 (Kr85-concentration)' = { + table2Version = 202 ; + indicatorOfParameter = 212 ; + } +#Kr85-dry deposition +'Kr85-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 213 ; + indicatorOfTypeOfLevel = 1 ; + } +#Kr85-wet deposition +'Kr85-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 214 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - concentration +'TRACER - concentration' = { + table2Version = 202 ; + indicatorOfParameter = 215 ; + } +#TRACER - dry deposition +'TRACER - dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 216 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - wet deposition +'TRACER - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 217 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'Air concentration of Xenon 133 (Xe133 - concentration)' = { + table2Version = 202 ; + indicatorOfParameter = 218 ; + } +#Xe133 - dry deposition +'Xe133 - dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 219 ; + indicatorOfTypeOfLevel = 1 ; + } +#Xe133 - wet deposition +'Xe133 - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 220 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - concentration +'I131g - concentration' = { + table2Version = 202 ; + indicatorOfParameter = 221 ; + } +#Xe133 - wet deposition +'Xe133 - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 222 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - wet deposition +'I131g - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 223 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - concentration +'I131o - concentration' = { + table2Version = 202 ; + indicatorOfParameter = 224 ; + } +#I131o - dry deposition +'I131o - dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 225 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - wet deposition +'I131o - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 226 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Barium 40 +'Air concentration of Barium 40' = { + table2Version = 202 ; + indicatorOfParameter = 227 ; + } +#Ba140 - dry deposition +'Ba140 - dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 228 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ba140 - wet deposition +'Ba140 - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 229 ; + indicatorOfTypeOfLevel = 1 ; + } +#u-momentum flux due to SSO-effects +'u-momentum flux due to SSO-effects' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#u-momentum flux due to SSO-effects +'u-momentum flux due to SSO-effects' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#v-momentum flux due to SSO-effects +'v-momentum flux due to SSO-effects' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#v-momentum flux due to SSO-effects +'v-momentum flux due to SSO-effects' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Gravity wave dissipation (vertical integral) +'Gravity wave dissipation (vertical integral)' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Gravity wave dissipation (vertical integral) +'Gravity wave dissipation (vertical integral)' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'UV_Index_Maximum_W UV_Index clouded (W), daily maximum' = { + table2Version = 202 ; + indicatorOfParameter = 248 ; + indicatorOfTypeOfLevel = 1 ; + } +#wind shear +'wind shear' = { + table2Version = 203 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#storm relative helicity +'storm relative helicity' = { + table2Version = 203 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#absolute vorticity advection +'absolute vorticity advection' = { + table2Version = 203 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 100 ; + } +#NiederschlagBew.-ArtKombination Niederschl.-Bew.-Blautherm. (283..407) +'NiederschlagBew.-ArtKombination Niederschl.-Bew.-Blautherm. (283..407)' = { + table2Version = 203 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konvektions-U-GrenzeHoehe der Konvektionsuntergrenze ueber Grund +'Konvektions-U-GrenzeHoehe der Konvektionsuntergrenze ueber Grund' = { + table2Version = 203 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn' = { + table2Version = 203 ; + indicatorOfParameter = 94 ; + indicatorOfTypeOfLevel = 1 ; + } +#weather interpretation (WMO) +'weather interpretation (WMO)' = { + table2Version = 203 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 1 ; + } +#geostrophische Vorticityadvektion +'geostrophische Vorticityadvektion' = { + table2Version = 203 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 100 ; + } +#Geo Temperatur Adv geostrophische Schichtdickenadvektion +'Geo Temperatur Adv geostrophische Schichtdickenadvektion' = { + table2Version = 203 ; + indicatorOfParameter = 103 ; + indicatorOfTypeOfLevel = 101 ; + } +#Schichtdicken-Advektion +'Schichtdicken-Advektion' = { + table2Version = 203 ; + indicatorOfParameter = 107 ; + indicatorOfTypeOfLevel = 101 ; + } +#Winddivergenz +'Winddivergenz' = { + table2Version = 203 ; + indicatorOfParameter = 109 ; + indicatorOfTypeOfLevel = 100 ; + } +#Qn-Vektor Q isother-senkr-KompQn ,Komp. Q-Vektor senkrecht zu den Isothermen +'Qn-Vektor Q isother-senkr-KompQn ,Komp. Q-Vektor senkrecht zu den Isothermen' = { + table2Version = 203 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 100 ; + } +#Isentrope potentielle Vorticity +'Isentrope potentielle Vorticity' = { + table2Version = 203 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 100 ; + } +#XIPV Wind X-Komp Wind X-Komponente auf isentropen Flaechen +'XIPV Wind X-Komp Wind X-Komponente auf isentropen Flaechen' = { + table2Version = 203 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 100 ; + } +#YIPV Wind Y-Komp Wind Y-Komponente auf isentropen Flaechen +'YIPV Wind Y-Komp Wind Y-Komponente auf isentropen Flaechen' = { + table2Version = 203 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 100 ; + } +#Druck einer isentropen Flaeche +'Druck einer isentropen Flaeche' = { + table2Version = 203 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 100 ; + } +#KO index +'KO index' = { + table2Version = 203 ; + indicatorOfParameter = 140 ; + indicatorOfTypeOfLevel = 1 ; + } +#Aequivalentpotentielle Temperatur +'Aequivalentpotentielle Temperatur' = { + table2Version = 203 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 100 ; + } +#Ceiling +'Ceiling' = { + table2Version = 203 ; + indicatorOfParameter = 157 ; + indicatorOfTypeOfLevel = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'Icing Grade (1=LGT,2=MOD,3=SEV)' = { + table2Version = 203 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 100 ; + } +#modified cloud depth for media +'modified cloud depth for media' = { + table2Version = 203 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#modified cloud cover for media +'modified cloud cover for media' = { + table2Version = 203 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL' = { + table2Version = 204 ; + indicatorOfParameter = 1 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL' = { + table2Version = 204 ; + indicatorOfParameter = 2 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'Monthly Mean of RMS of difference FG-AN of u-component of wind' = { + table2Version = 204 ; + indicatorOfParameter = 3 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'Monthly Mean of RMS of difference IA-AN of u-component of wind' = { + table2Version = 204 ; + indicatorOfParameter = 4 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'Monthly Mean of RMS of difference FG-AN of v-component of wind' = { + table2Version = 204 ; + indicatorOfParameter = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'Monthly Mean of RMS of difference IA-AN of v-component of wind' = { + table2Version = 204 ; + indicatorOfParameter = 6 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'Monthly Mean of RMS of difference FG-AN of geopotential' = { + table2Version = 204 ; + indicatorOfParameter = 7 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'Monthly Mean of RMS of difference IA-AN of geopotential' = { + table2Version = 204 ; + indicatorOfParameter = 8 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'Monthly Mean of RMS of difference FG-AN of relative humidity' = { + table2Version = 204 ; + indicatorOfParameter = 9 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'Monthly Mean of RMS of difference IA-AN of relative humidity' = { + table2Version = 204 ; + indicatorOfParameter = 10 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'Monthly Mean of RMS of difference FG-AN of temperature' = { + table2Version = 204 ; + indicatorOfParameter = 11 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'Monthly Mean of RMS of difference IA-AN of temperature' = { + table2Version = 204 ; + indicatorOfParameter = 12 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure)' = { + table2Version = 204 ; + indicatorOfParameter = 13 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure)' = { + table2Version = 204 ; + indicatorOfParameter = 14 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'Monthly Mean of RMS of difference FG-AN of kinetic energy' = { + table2Version = 204 ; + indicatorOfParameter = 15 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'Monthly Mean of RMS of difference IA-AN of kinetic energy' = { + table2Version = 204 ; + indicatorOfParameter = 16 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 4 ; + } +#smoothed forecast, temperature +'smoothed forecast, temperature' = { + table2Version = 206 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, maximum temp. +'smoothed forecast, maximum temp.' = { + table2Version = 206 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, minimum temp. +'smoothed forecast, minimum temp.' = { + table2Version = 206 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, dew point temp. +'smoothed forecast, dew point temp.' = { + table2Version = 206 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, u comp. of wind +'smoothed forecast, u comp. of wind' = { + table2Version = 206 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, v comp. of wind +'smoothed forecast, v comp. of wind' = { + table2Version = 206 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, total precipitation rate +'smoothed forecast, total precipitation rate' = { + table2Version = 206 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, total cloud cover +'smoothed forecast, total cloud cover' = { + table2Version = 206 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover low +'smoothed forecast, cloud cover low' = { + table2Version = 206 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover medium +'smoothed forecast, cloud cover medium' = { + table2Version = 206 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover high +'smoothed forecast, cloud cover high' = { + table2Version = 206 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'smoothed forecast, large-scale snowfall rate w.e.' = { + table2Version = 206 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, soil temperature +'smoothed forecast, soil temperature' = { + table2Version = 206 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#smoothed forecast, wind speed (gust) +'smoothed forecast, wind speed (gust)' = { + table2Version = 206 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#calibrated forecast, total precipitation rate +'calibrated forecast, total precipitation rate' = { + table2Version = 207 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'calibrated forecast, large-scale snowfall rate w.e.' = { + table2Version = 207 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, wind speed (gust) +'calibrated forecast, wind speed (gust)' = { + table2Version = 207 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; +} diff --git a/definitions/grib1/localConcepts/cnmc/paramId.def b/definitions/grib1/localConcepts/cnmc/paramId.def new file mode 100644 index 000000000..3ab737762 --- /dev/null +++ b/definitions/grib1/localConcepts/cnmc/paramId.def @@ -0,0 +1,2435 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'500000' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure +'500001' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Pressure Reduced to MSL +'500002' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 102 ; + } +#Pressure Tendency (S) +'500003' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (S) +'500004' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (full lev) +'500005' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 110 ; + } +#Geopotential +'500006' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Geometric Height of the earths surface above sea level +'500007' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'500008' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 109 ; + } +#Total Column Integrated Ozone +'500009' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature (G) +'500010' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 1 ; + } +#2m Temperature (AV) +'500012' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Climat. temperature, 2m Temperature +'500013' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Temperature +'500014' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#Max 2m Temperature (i) +'500015' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#Min 2m Temperature (i) +'500016' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#2m Dew Point Temperature +'500017' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Dew Point Temperature (AV) +'500018' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Radar spectra (1) +'500019' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + } +#Wave spectra (1) +'500020' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'500021' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'500022' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind Direction (DD_10M) +'500023' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind Direction (DD) +'500024' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Wind speed (SP_10M) +'500025' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind speed (SP) +'500026' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 110 ; + } +#U component of wind +'500027' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#U component of wind +'500028' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'500029' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#V component of wind +'500030' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'500031' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vertical Velocity (Geometric) (w) +'500032' = { + table2Version = 2 ; + indicatorOfParameter = 40 ; + } +#Specific Humidity (S) +'500033' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 1 ; + } +#Specific Humidity (2m) +'500034' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Specific Humidity +'500035' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#2m Relative Humidity +'500036' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Relative Humidity +'500037' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#Total column integrated water vapour +'500038' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + indicatorOfTypeOfLevel = 1 ; + } +#Evaporation (s) +'500039' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Total Column-Integrated Cloud Ice +'500040' = { + table2Version = 2 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Precipitation rate (S) +'500041' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale Precipitation rate +'500042' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + timeRangeIndicator = 4 ; + } +#Convective Precipitation rate +'500043' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow depth water equivalent +'500044' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow Depth +'500045' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Cloud Cover +'500046' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Cloud Cover +'500047' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Cover (800 hPa - Soil) +'500048' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (400 - 800 hPa) +'500049' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (0 - 400 hPa) +'500050' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Column-Integrated Cloud Water +'500051' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'500052' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale snowfall rate water equivalent (s) +'500053' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Land Cover (1=land, 0=sea) +'500054' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + indicatorOfTypeOfLevel = 1 ; + } +#Surface Roughness length Surface Roughness +'500055' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'500056' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'500057' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'500058' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 36 ; + } +#Soil Temperature (41 cm depth) +'500059' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 41 ; + } +#Soil Temperature +'500060' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 9 ; + } +#Soil Temperature +'500061' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#Column-integrated Soil Moisture +'500062' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 190 ; + topLevel = 100 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'500063' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + topLevel = 0 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'500064' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 10 ; + bottomLevel = 100 ; + } +#Plant cover +'500065' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + indicatorOfTypeOfLevel = 1 ; + } +#Water Runoff (10-100) +'500066' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 10 ; + timeRangeIndicator = 4 ; + bottomLevel = 100 ; + } +#Water Runoff (10-190) +'500067' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 10 ; + timeRangeIndicator = 4 ; + bottomLevel = 190 ; + } +#Water Runoff (s) +'500068' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + topLevel = 0 ; + timeRangeIndicator = 4 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'500069' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Thickness +'500070' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + indicatorOfTypeOfLevel = 1 ; + } +#Significant height of combined wind waves and swell +'500071' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Direction of wind waves +'500072' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'500073' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'500074' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'500075' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'500076' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'500077' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Net short wave radiation flux (m) (at the surface) +'500078' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'500079' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (at the surface) +'500080' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'500081' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net short wave radiation flux (m) (on the model top) +'500082' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'500083' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'500084' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'500085' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Latent Heat Net Flux (m) +'500086' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Sensible Heat Net Flux (m) +'500087' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, U-Component (m) +'500088' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, V-Component (m) +'500089' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation (m) (at the surface) +'500090' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation +'500091' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Solar radiation heating rate +'500092' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + indicatorOfTypeOfLevel = 110 ; + } +#Thermal radiation heating rate +'500093' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + indicatorOfTypeOfLevel = 110 ; + } +#Latent heat flux from bare soil +'500094' = { + table2Version = 201 ; + indicatorOfParameter = 18 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Latent heat flux from plants +'500095' = { + table2Version = 201 ; + indicatorOfParameter = 19 ; + indicatorOfTypeOfLevel = 111 ; + timeRangeIndicator = 3 ; + } +#Sunshine +'500096' = { + table2Version = 201 ; + indicatorOfParameter = 20 ; + timeRangeIndicator = 4 ; + } +#Stomatal Resistance +'500097' = { + table2Version = 201 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Cloud cover +'500098' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#Non-Convective Cloud Cover, grid scale +'500099' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Mixing Ratio +'500100' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Ice Mixing Ratio +'500101' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 110 ; + } +#Rain mixing ratio +'500102' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + indicatorOfTypeOfLevel = 110 ; + } +#Snow mixing ratio +'500103' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated rain +'500104' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total column integrated snow +'500105' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + indicatorOfTypeOfLevel = 1 ; + } +#Grauple +'500106' = { + table2Version = 201 ; + indicatorOfParameter = 39 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated grauple +'500107' = { + table2Version = 201 ; + indicatorOfParameter = 40 ; + } +#Total Column integrated water (all components incl. precipitation) +'500108' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertical integral of divergence of total water content (s) +'500109' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + indicatorOfTypeOfLevel = 1 ; + } +#subgrid scale cloud water +'500110' = { + table2Version = 201 ; + indicatorOfParameter = 43 ; + indicatorOfTypeOfLevel = 110 ; + } +#subgridscale cloud ice +'500111' = { + table2Version = 201 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#cloud cover CH (0..8) +'500112' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'500113' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'500114' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#cloud base above msl, shallow convection +'500115' = { + table2Version = 201 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 2 ; + } +#cloud top above msl, shallow convection +'500116' = { + table2Version = 201 ; + indicatorOfParameter = 59 ; + indicatorOfTypeOfLevel = 3 ; + } +#specific cloud water content, convective cloud +'500117' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 110 ; + } +#Height of Convective Cloud Base (i) +'500118' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 2 ; + } +#Height of Convective Cloud Top (i) +'500119' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'500120' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'500121' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to convection +'500122' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to convection +'500123' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 110 ; + } +#zonal wind tendency due to convection +'500124' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to convection +'500125' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 110 ; + } +#height of top of dry convection +'500126' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'500127' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 4 ; + } +#Height of snow fall limit +'500128' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 4 ; + } +#Tendency of specific cloud liquid water content due to conversion +'500129' = { + table2Version = 201 ; + indicatorOfParameter = 88 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud ice content due to convection +'500130' = { + table2Version = 201 ; + indicatorOfParameter = 89 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'500131' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 110 ; + } +#Large scale rain rate +'500132' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale snowfall rate water equivalent +'500133' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale rain rate (s) +'500134' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Convective rain rate +'500135' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective snowfall rate water equivalent +'500136' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective rain rate (s) +'500137' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#rain amount, grid-scale plus convective +'500138' = { + table2Version = 201 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#snow amount, grid-scale plus convective +'500139' = { + table2Version = 201 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to grid scale precipation +'500140' = { + table2Version = 201 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to grid scale precipitation +'500141' = { + table2Version = 201 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'500142' = { + table2Version = 201 ; + indicatorOfParameter = 127 ; + indicatorOfTypeOfLevel = 110 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'500143' = { + table2Version = 201 ; + indicatorOfParameter = 129 ; + indicatorOfTypeOfLevel = 1 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'500144' = { + table2Version = 201 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 110 ; + } +#Graupel (snow pellets) precipitation rate +'500145' = { + table2Version = 201 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 1 ; + } +#Graupel (snow pellets) precipitation rate +'500146' = { + table2Version = 201 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow density +'500147' = { + table2Version = 201 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure perturbation +'500148' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + indicatorOfTypeOfLevel = 110 ; + } +#supercell detection index 1 (rot. up+down drafts) +'500149' = { + table2Version = 201 ; + indicatorOfParameter = 141 ; + indicatorOfTypeOfLevel = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'500150' = { + table2Version = 201 ; + indicatorOfParameter = 142 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, most unstable +'500151' = { + table2Version = 201 ; + indicatorOfParameter = 143 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, most unstable +'500152' = { + table2Version = 201 ; + indicatorOfParameter = 144 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, mean layer +'500153' = { + table2Version = 201 ; + indicatorOfParameter = 145 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, mean layer +'500154' = { + table2Version = 201 ; + indicatorOfParameter = 146 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective turbulent kinetic enery +'500155' = { + table2Version = 201 ; + indicatorOfParameter = 147 ; + } +#Tendency of turbulent kinetic energy +'500156' = { + table2Version = 201 ; + indicatorOfParameter = 148 ; + indicatorOfTypeOfLevel = 109 ; + } +#Kinetic Energy +'500157' = { + table2Version = 201 ; + indicatorOfParameter = 149 ; + indicatorOfTypeOfLevel = 110 ; + } +#Turbulent Kinetic Energy +'500158' = { + table2Version = 201 ; + indicatorOfParameter = 152 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusioncoefficient for momentum +'500159' = { + table2Version = 201 ; + indicatorOfParameter = 153 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'500160' = { + table2Version = 201 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent transfer coefficient for impulse +'500161' = { + table2Version = 201 ; + indicatorOfParameter = 170 ; + indicatorOfTypeOfLevel = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'500162' = { + table2Version = 201 ; + indicatorOfParameter = 171 ; + indicatorOfTypeOfLevel = 1 ; + } +#mixed layer depth +'500163' = { + table2Version = 201 ; + indicatorOfParameter = 173 ; + indicatorOfTypeOfLevel = 1 ; + } +#maximum Wind 10m +'500164' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + timeRangeIndicator = 2 ; + } +#Air concentration of Ruthenium 103 +'500165' = { + table2Version = 201 ; + indicatorOfParameter = 194 ; + indicatorOfTypeOfLevel = 100 ; + } +#Soil Temperature (multilayers) +'500166' = { + table2Version = 201 ; + indicatorOfParameter = 197 ; + indicatorOfTypeOfLevel = 111 ; + } +#Column-integrated Soil Moisture (multilayers) +'500167' = { + table2Version = 201 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 111 ; + } +#soil ice content (multilayers) +'500168' = { + table2Version = 201 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 111 ; + } +#Plant Canopy Surface Water +'500169' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow temperature (top of snow) +'500170' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#Minimal Stomatal Resistance +'500171' = { + table2Version = 201 ; + indicatorOfParameter = 212 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Temperature +'500172' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'500173' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'500174' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 110 ; + } +#Base reflectivity (cmax) +'500175' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 200 ; + } +#unknown +'500176' = { + table2Version = 201 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 110 ; + } +#Effective transmissivity of solar radiation +'500177' = { + table2Version = 201 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 110 ; + } +#sum of contributions to evaporation +'500178' = { + table2Version = 201 ; + indicatorOfParameter = 236 ; + } +#total transpiration from all soil layers +'500179' = { + table2Version = 201 ; + indicatorOfParameter = 237 ; + } +#total forcing at soil surface +'500180' = { + table2Version = 201 ; + indicatorOfParameter = 238 ; + } +#residuum of soil moisture +'500181' = { + table2Version = 201 ; + indicatorOfParameter = 239 ; + } +#Massflux at convective cloud base +'500182' = { + table2Version = 201 ; + indicatorOfParameter = 240 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy +'500183' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + indicatorOfTypeOfLevel = 1 ; + } +#moisture convergence for Kuo-type closure +'500184' = { + table2Version = 201 ; + indicatorOfParameter = 243 ; + indicatorOfTypeOfLevel = 1 ; + } +#total wave direction +'500185' = { + table2Version = 202 ; + indicatorOfParameter = 4 ; + } +#wind sea mean period +'500186' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 102 ; + } +#wind sea peak period +'500187' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + } +#swell mean period +'500188' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 102 ; + } +#swell peak period +'500189' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + } +#total wave peak period +'500190' = { + table2Version = 202 ; + indicatorOfParameter = 9 ; + } +#total wave mean period +'500191' = { + table2Version = 202 ; + indicatorOfParameter = 10 ; + } +#total Tm1 period +'500192' = { + table2Version = 202 ; + indicatorOfParameter = 17 ; + } +#total Tm2 period +'500193' = { + table2Version = 202 ; + indicatorOfParameter = 18 ; + } +#total directional spread +'500194' = { + table2Version = 202 ; + indicatorOfParameter = 19 ; + } +#analysis error(standard deviation), geopotential(gpm) +'500195' = { + table2Version = 202 ; + indicatorOfParameter = 40 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), u-comp. of wind +'500196' = { + table2Version = 202 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), v-comp. of wind +'500197' = { + table2Version = 202 ; + indicatorOfParameter = 42 ; + level = 100 ; + } +#zonal wind tendency due to subgrid scale oro. +'500198' = { + table2Version = 202 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to subgrid scale oro. +'500199' = { + table2Version = 202 ; + indicatorOfParameter = 45 ; + indicatorOfTypeOfLevel = 110 ; + } +#Standard deviation of sub-grid scale orography +'500200' = { + table2Version = 202 ; + indicatorOfParameter = 46 ; + indicatorOfTypeOfLevel = 1 ; + } +#Anisotropy of sub-gridscale orography +'500201' = { + table2Version = 202 ; + indicatorOfParameter = 47 ; + indicatorOfTypeOfLevel = 1 ; + } +#Angle of sub-gridscale orography +'500202' = { + table2Version = 202 ; + indicatorOfParameter = 48 ; + indicatorOfTypeOfLevel = 1 ; + } +#Slope of sub-gridscale orography +'500203' = { + table2Version = 202 ; + indicatorOfParameter = 49 ; + indicatorOfTypeOfLevel = 1 ; + } +#surface emissivity +'500204' = { + table2Version = 202 ; + indicatorOfParameter = 56 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + timeRangeIndicator = 0 ; + } +#Soil Type +'500205' = { + table2Version = 202 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + } +#Leaf area index +'500206' = { + table2Version = 202 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#root depth of vegetation +'500207' = { + table2Version = 202 ; + indicatorOfParameter = 62 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of ozone maximum (climatological) +'500208' = { + table2Version = 202 ; + indicatorOfParameter = 64 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertically integrated ozone content (climatological) +'500209' = { + table2Version = 202 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the vegetation phase +'500210' = { + table2Version = 202 ; + indicatorOfParameter = 67 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the quiescent phas +'500211' = { + table2Version = 202 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 1 ; + } +#Max Leaf area index +'500212' = { + table2Version = 202 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 1 ; + } +#Min Leaf area index +'500213' = { + table2Version = 202 ; + indicatorOfParameter = 70 ; + indicatorOfTypeOfLevel = 1 ; + } +#Orographie + Land-Meer-Verteilung +'500214' = { + table2Version = 202 ; + indicatorOfParameter = 71 ; + } +#variance of soil moisture content (0-10) +'500215' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + bottomLevel = 10 ; + } +#variance of soil moisture content (10-100) +'500216' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 10 ; + bottomLevel = 100 ; + } +#evergreen forest +'500217' = { + table2Version = 202 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#deciduous forest +'500218' = { + table2Version = 202 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#normalized differential vegetation index +'500219' = { + table2Version = 202 ; + indicatorOfParameter = 77 ; + timeRangeIndicator = 3 ; + } +#normalized differential vegetation index (NDVI) +'500220' = { + table2Version = 202 ; + indicatorOfParameter = 78 ; + timeRangeIndicator = 3 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'500221' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'500222' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Total sulfate aerosol +'500223' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + } +#Total sulfate aerosol (12M) +'500224' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + timeRangeIndicator = 3 ; + } +#Total soil dust aerosol +'500225' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + } +#Total soil dust aerosol (12M) +'500226' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + timeRangeIndicator = 3 ; + } +#Organic aerosol +'500227' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + } +#Organic aerosol (12M) +'500228' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + timeRangeIndicator = 3 ; + } +#Black carbon aerosol +'500229' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + } +#Black carbon aerosol (12M) +'500230' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + timeRangeIndicator = 3 ; + } +#Sea salt aerosol +'500231' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + } +#Sea salt aerosol (12M) +'500232' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + timeRangeIndicator = 3 ; + } +#tendency of specific humidity +'500233' = { + table2Version = 202 ; + indicatorOfParameter = 104 ; + indicatorOfTypeOfLevel = 110 ; + } +#water vapor flux +'500234' = { + table2Version = 202 ; + indicatorOfParameter = 105 ; + indicatorOfTypeOfLevel = 1 ; + } +#Coriolis parameter +'500235' = { + table2Version = 202 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical latitude +'500236' = { + table2Version = 202 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical longitude +'500237' = { + table2Version = 202 ; + indicatorOfParameter = 115 ; + indicatorOfTypeOfLevel = 1 ; + } +#Friction velocity +'500238' = { + table2Version = 202 ; + indicatorOfParameter = 120 ; + indicatorOfTypeOfLevel = 110 ; + } +#Delay of the GPS signal trough the (total) atm. +'500239' = { + table2Version = 202 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'500240' = { + table2Version = 202 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'500241' = { + table2Version = 202 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ozone Mixing Ratio +'500242' = { + table2Version = 202 ; + indicatorOfParameter = 180 ; + indicatorOfTypeOfLevel = 110 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'500243' = { + table2Version = 202 ; + indicatorOfParameter = 194 ; + } +#Ru103-dry deposition +'500244' = { + table2Version = 202 ; + indicatorOfParameter = 195 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ru103-wet deposition +'500245' = { + table2Version = 202 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Strontium 90 +'500246' = { + table2Version = 202 ; + indicatorOfParameter = 197 ; + } +#Sr90-dry deposition +'500247' = { + table2Version = 202 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 1 ; + } +#Sr90-wet deposition +'500248' = { + table2Version = 202 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-concentration +'500249' = { + table2Version = 202 ; + indicatorOfParameter = 200 ; + } +#I131-dry deposition +'500250' = { + table2Version = 202 ; + indicatorOfParameter = 201 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-wet deposition +'500251' = { + table2Version = 202 ; + indicatorOfParameter = 202 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-concentration +'500252' = { + table2Version = 202 ; + indicatorOfParameter = 203 ; + } +#Cs137-dry deposition +'500253' = { + table2Version = 202 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-wet deposition +'500254' = { + table2Version = 202 ; + indicatorOfParameter = 205 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'500255' = { + table2Version = 202 ; + indicatorOfParameter = 206 ; + } +#Te132-dry deposition +'500256' = { + table2Version = 202 ; + indicatorOfParameter = 207 ; + indicatorOfTypeOfLevel = 1 ; + } +#Te132-wet deposition +'500257' = { + table2Version = 202 ; + indicatorOfParameter = 208 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'500258' = { + table2Version = 202 ; + indicatorOfParameter = 209 ; + } +#Zr95-dry deposition +'500259' = { + table2Version = 202 ; + indicatorOfParameter = 210 ; + indicatorOfTypeOfLevel = 1 ; + } +#Zr95-wet deposition +'500260' = { + table2Version = 202 ; + indicatorOfParameter = 211 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'500261' = { + table2Version = 202 ; + indicatorOfParameter = 212 ; + } +#Kr85-dry deposition +'500262' = { + table2Version = 202 ; + indicatorOfParameter = 213 ; + indicatorOfTypeOfLevel = 1 ; + } +#Kr85-wet deposition +'500263' = { + table2Version = 202 ; + indicatorOfParameter = 214 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - concentration +'500264' = { + table2Version = 202 ; + indicatorOfParameter = 215 ; + } +#TRACER - dry deposition +'500265' = { + table2Version = 202 ; + indicatorOfParameter = 216 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - wet deposition +'500266' = { + table2Version = 202 ; + indicatorOfParameter = 217 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'500267' = { + table2Version = 202 ; + indicatorOfParameter = 218 ; + } +#Xe133 - dry deposition +'500268' = { + table2Version = 202 ; + indicatorOfParameter = 219 ; + indicatorOfTypeOfLevel = 1 ; + } +#Xe133 - wet deposition +'500269' = { + table2Version = 202 ; + indicatorOfParameter = 220 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - concentration +'500270' = { + table2Version = 202 ; + indicatorOfParameter = 221 ; + } +#Xe133 - wet deposition +'500271' = { + table2Version = 202 ; + indicatorOfParameter = 222 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - wet deposition +'500272' = { + table2Version = 202 ; + indicatorOfParameter = 223 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - concentration +'500273' = { + table2Version = 202 ; + indicatorOfParameter = 224 ; + } +#I131o - dry deposition +'500274' = { + table2Version = 202 ; + indicatorOfParameter = 225 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - wet deposition +'500275' = { + table2Version = 202 ; + indicatorOfParameter = 226 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Barium 40 +'500276' = { + table2Version = 202 ; + indicatorOfParameter = 227 ; + } +#Ba140 - dry deposition +'500277' = { + table2Version = 202 ; + indicatorOfParameter = 228 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ba140 - wet deposition +'500278' = { + table2Version = 202 ; + indicatorOfParameter = 229 ; + indicatorOfTypeOfLevel = 1 ; + } +#u-momentum flux due to SSO-effects +'500279' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#u-momentum flux due to SSO-effects +'500280' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#v-momentum flux due to SSO-effects +'500281' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#v-momentum flux due to SSO-effects +'500282' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Gravity wave dissipation (vertical integral) +'500283' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Gravity wave dissipation (vertical integral) +'500284' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'500285' = { + table2Version = 202 ; + indicatorOfParameter = 248 ; + indicatorOfTypeOfLevel = 1 ; + } +#wind shear +'500286' = { + table2Version = 203 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#storm relative helicity +'500287' = { + table2Version = 203 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#absolute vorticity advection +'500288' = { + table2Version = 203 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 100 ; + } +#NiederschlagBew.-ArtKombination Niederschl.-Bew.-Blautherm. (283..407) +'500289' = { + table2Version = 203 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konvektions-U-GrenzeHoehe der Konvektionsuntergrenze ueber Grund +'500290' = { + table2Version = 203 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'500291' = { + table2Version = 203 ; + indicatorOfParameter = 94 ; + indicatorOfTypeOfLevel = 1 ; + } +#weather interpretation (WMO) +'500292' = { + table2Version = 203 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 1 ; + } +#geostrophische Vorticityadvektion +'500293' = { + table2Version = 203 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 100 ; + } +#Geo Temperatur Adv geostrophische Schichtdickenadvektion +'500294' = { + table2Version = 203 ; + indicatorOfParameter = 103 ; + indicatorOfTypeOfLevel = 101 ; + } +#Schichtdicken-Advektion +'500295' = { + table2Version = 203 ; + indicatorOfParameter = 107 ; + indicatorOfTypeOfLevel = 101 ; + } +#Winddivergenz +'500296' = { + table2Version = 203 ; + indicatorOfParameter = 109 ; + indicatorOfTypeOfLevel = 100 ; + } +#Qn-Vektor Q isother-senkr-KompQn ,Komp. Q-Vektor senkrecht zu den Isothermen +'500297' = { + table2Version = 203 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 100 ; + } +#Isentrope potentielle Vorticity +'500298' = { + table2Version = 203 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 100 ; + } +#XIPV Wind X-Komp Wind X-Komponente auf isentropen Flaechen +'500299' = { + table2Version = 203 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 100 ; + } +#YIPV Wind Y-Komp Wind Y-Komponente auf isentropen Flaechen +'500300' = { + table2Version = 203 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 100 ; + } +#Druck einer isentropen Flaeche +'500301' = { + table2Version = 203 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 100 ; + } +#KO index +'500302' = { + table2Version = 203 ; + indicatorOfParameter = 140 ; + indicatorOfTypeOfLevel = 1 ; + } +#Aequivalentpotentielle Temperatur +'500303' = { + table2Version = 203 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 100 ; + } +#Ceiling +'500304' = { + table2Version = 203 ; + indicatorOfParameter = 157 ; + indicatorOfTypeOfLevel = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'500305' = { + table2Version = 203 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 100 ; + } +#modified cloud depth for media +'500306' = { + table2Version = 203 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#modified cloud cover for media +'500307' = { + table2Version = 203 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'500308' = { + table2Version = 204 ; + indicatorOfParameter = 1 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'500309' = { + table2Version = 204 ; + indicatorOfParameter = 2 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'500310' = { + table2Version = 204 ; + indicatorOfParameter = 3 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'500311' = { + table2Version = 204 ; + indicatorOfParameter = 4 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'500312' = { + table2Version = 204 ; + indicatorOfParameter = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'500313' = { + table2Version = 204 ; + indicatorOfParameter = 6 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'500314' = { + table2Version = 204 ; + indicatorOfParameter = 7 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'500315' = { + table2Version = 204 ; + indicatorOfParameter = 8 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'500316' = { + table2Version = 204 ; + indicatorOfParameter = 9 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'500317' = { + table2Version = 204 ; + indicatorOfParameter = 10 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'500318' = { + table2Version = 204 ; + indicatorOfParameter = 11 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'500319' = { + table2Version = 204 ; + indicatorOfParameter = 12 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'500320' = { + table2Version = 204 ; + indicatorOfParameter = 13 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'500321' = { + table2Version = 204 ; + indicatorOfParameter = 14 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'500322' = { + table2Version = 204 ; + indicatorOfParameter = 15 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'500323' = { + table2Version = 204 ; + indicatorOfParameter = 16 ; + } +#Synth. Sat. brightness temperature cloudy +'500324' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'500325' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'500326' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500327' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'500328' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'500329' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'500330' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500331' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature clear sky +'500332' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500333' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'500334' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature cloudy +'500335' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance clear sky +'500336' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500337' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'500338' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance cloudy +'500339' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'500340' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500341' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500342' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500343' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500344' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500345' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500346' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500347' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'500348' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500349' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500350' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500351' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500352' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500353' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500354' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500355' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'500356' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500357' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500358' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500359' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500360' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500361' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500362' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500363' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'500364' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500365' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500366' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500367' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500368' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500369' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500370' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500371' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 4 ; + } +#smoothed forecast, temperature +'500372' = { + table2Version = 206 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, maximum temp. +'500373' = { + table2Version = 206 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, minimum temp. +'500374' = { + table2Version = 206 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, dew point temp. +'500375' = { + table2Version = 206 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, u comp. of wind +'500376' = { + table2Version = 206 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, v comp. of wind +'500377' = { + table2Version = 206 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, total precipitation rate +'500378' = { + table2Version = 206 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, total cloud cover +'500379' = { + table2Version = 206 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover low +'500380' = { + table2Version = 206 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover medium +'500381' = { + table2Version = 206 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover high +'500382' = { + table2Version = 206 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'500383' = { + table2Version = 206 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, soil temperature +'500384' = { + table2Version = 206 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#smoothed forecast, wind speed (gust) +'500385' = { + table2Version = 206 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#calibrated forecast, total precipitation rate +'500386' = { + table2Version = 207 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'500387' = { + table2Version = 207 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, wind speed (gust) +'500388' = { + table2Version = 207 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; +} diff --git a/definitions/grib1/localConcepts/cnmc/shortName.def b/definitions/grib1/localConcepts/cnmc/shortName.def new file mode 100644 index 000000000..404cbbdc4 --- /dev/null +++ b/definitions/grib1/localConcepts/cnmc/shortName.def @@ -0,0 +1,2435 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'ps' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure +'p' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Pressure Reduced to MSL +'pmsl' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 102 ; + } +#Pressure Tendency (S) +'dpsdt' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (S) +'fis' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (full lev) +'fif' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 110 ; + } +#Geopotential +'fi' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Geometric Height of the earths surface above sea level +'hsurf' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'hhl' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 109 ; + } +#Total Column Integrated Ozone +'to3' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature (G) +'t_g' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 1 ; + } +#2m Temperature (AV) +'t_2m_av' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Climat. temperature, 2m Temperature +'t_2m_cl' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Temperature +'t' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#Max 2m Temperature (i) +'tmax_2m' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#Min 2m Temperature (i) +'tmin_2m' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#2m Dew Point Temperature +'td_2m' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Dew Point Temperature (AV) +'td_2m_av' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Radar spectra (1) +'dbz_max' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + } +#Wave spectra (1) +'wvsp1' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'wvsp2' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'wvsp3' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind Direction (DD_10M) +'dd_10m' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind Direction (DD) +'dd' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Wind speed (SP_10M) +'sp_10m' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind speed (SP) +'sp' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 110 ; + } +#U component of wind +'u_10m' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#U component of wind +'u' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'v_10m' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#V component of wind +'v' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'omega' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vertical Velocity (Geometric) (w) +'w' = { + table2Version = 2 ; + indicatorOfParameter = 40 ; + } +#Specific Humidity (S) +'qv_s' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 1 ; + } +#Specific Humidity (2m) +'qv_2m' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Specific Humidity +'qv' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#2m Relative Humidity +'relhum_2m' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Relative Humidity +'relhum' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#Total column integrated water vapour +'tqv' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + indicatorOfTypeOfLevel = 1 ; + } +#Evaporation (s) +'aevap_s' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Total Column-Integrated Cloud Ice +'tqi' = { + table2Version = 2 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Precipitation rate (S) +'tot_prec' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale Precipitation rate +'prec_gsp' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + timeRangeIndicator = 4 ; + } +#Convective Precipitation rate +'prec_con' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow depth water equivalent +'w_snow' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow Depth +'h_snow' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Cloud Cover +'clct' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Cloud Cover +'clc_con' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Cover (800 hPa - Soil) +'clcl' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (400 - 800 hPa) +'clcm' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (0 - 400 hPa) +'clch' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Column-Integrated Cloud Water +'tqc' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'snow_con' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale snowfall rate water equivalent (s) +'snow_gsp' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Land Cover (1=land, 0=sea) +'fr_land' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + indicatorOfTypeOfLevel = 1 ; + } +#Surface Roughness length Surface Roughness +'z0' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'alb_rad' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'albedo_b' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'t_cl' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 36 ; + } +#Soil Temperature (41 cm depth) +'t_cl_lm' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 41 ; + } +#Soil Temperature +'t_m' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 9 ; + } +#Soil Temperature +'t_s' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#Column-integrated Soil Moisture +'w_cl' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 190 ; + topLevel = 100 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'w_g1' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + topLevel = 0 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'w_g2' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#Plant cover +'plcov' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + indicatorOfTypeOfLevel = 1 ; + } +#Water Runoff (10-100) +'runoff_g' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + timeRangeIndicator = 4 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#Water Runoff (10-190) +'runoff_g_lm' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + timeRangeIndicator = 4 ; + bottomLevel = 190 ; + topLevel = 10 ; + } +#Water Runoff (s) +'runoff_s' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + topLevel = 0 ; + timeRangeIndicator = 4 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'fr_ice' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Thickness +'h_ice' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + indicatorOfTypeOfLevel = 1 ; + } +#Significant height of combined wind waves and swell +'swh' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Direction of wind waves +'mdww' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'shww' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'mpww' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'mdps' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'shps' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'mpps' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Net short wave radiation flux (m) (at the surface) +'asob_s' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'sobs_rad' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (at the surface) +'athb_s' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'thbs_rad' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net short wave radiation flux (m) (on the model top) +'asob_t' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'sobt_rad' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'athb_t' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'thbt_rad' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Latent Heat Net Flux (m) +'alhfl_s' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Sensible Heat Net Flux (m) +'ashfl_s' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, U-Component (m) +'aumfl_s' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, V-Component (m) +'avmfl_s' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation (m) (at the surface) +'apab_s' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation +'pabs_rad' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Solar radiation heating rate +'sohr_rad' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + indicatorOfTypeOfLevel = 110 ; + } +#Thermal radiation heating rate +'thhr_rad' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + indicatorOfTypeOfLevel = 110 ; + } +#Latent heat flux from bare soil +'alhfl_bs' = { + table2Version = 201 ; + indicatorOfParameter = 18 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Latent heat flux from plants +'alhfl_pl' = { + table2Version = 201 ; + indicatorOfParameter = 19 ; + indicatorOfTypeOfLevel = 111 ; + timeRangeIndicator = 3 ; + } +#Sunshine +'dursun' = { + table2Version = 201 ; + indicatorOfParameter = 20 ; + timeRangeIndicator = 4 ; + } +#Stomatal Resistance +'rstom' = { + table2Version = 201 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Cloud cover +'clc' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#Non-Convective Cloud Cover, grid scale +'clc_sgs' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Mixing Ratio +'qc' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Ice Mixing Ratio +'qi' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 110 ; + } +#Rain mixing ratio +'qr' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + indicatorOfTypeOfLevel = 110 ; + } +#Snow mixing ratio +'qs' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated rain +'tqr' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total column integrated snow +'tqs' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + indicatorOfTypeOfLevel = 1 ; + } +#Grauple +'qg' = { + table2Version = 201 ; + indicatorOfParameter = 39 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated grauple +'tqg' = { + table2Version = 201 ; + indicatorOfParameter = 40 ; + } +#Total Column integrated water (all components incl. precipitation) +'twater' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertical integral of divergence of total water content (s) +'tdiv_hum' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + indicatorOfTypeOfLevel = 1 ; + } +#subgrid scale cloud water +'qc_rad' = { + table2Version = 201 ; + indicatorOfParameter = 43 ; + indicatorOfTypeOfLevel = 110 ; + } +#subgridscale cloud ice +'qi_rad' = { + table2Version = 201 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#cloud cover CH (0..8) +'clch_8' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'clcm_8' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'clcl_8' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#cloud base above msl, shallow convection +'hbas_sc' = { + table2Version = 201 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 2 ; + } +#cloud top above msl, shallow convection +'htop_sc' = { + table2Version = 201 ; + indicatorOfParameter = 59 ; + indicatorOfTypeOfLevel = 3 ; + } +#specific cloud water content, convective cloud +'clw_con' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 110 ; + } +#Height of Convective Cloud Base (i) +'hbas_con' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 2 ; + } +#Height of Convective Cloud Top (i) +'htop_con' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'bas_con' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'top_con' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to convection +'dt_con' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to convection +'dqv_con' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 110 ; + } +#zonal wind tendency due to convection +'du_con' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to convection +'dv_con' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 110 ; + } +#height of top of dry convection +'htop_dc' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'hzerocl' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 4 ; + } +#Height of snow fall limit +'snowlmt' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 4 ; + } +#Tendency of specific cloud liquid water content due to conversion +'dqc_con' = { + table2Version = 201 ; + indicatorOfParameter = 88 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud ice content due to convection +'dqi_con' = { + table2Version = 201 ; + indicatorOfParameter = 89 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'q_sedim' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 110 ; + } +#Large scale rain rate +'prr_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale snowfall rate water equivalent +'prs_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale rain rate (s) +'rain_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Convective rain rate +'prr_con' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective snowfall rate water equivalent +'prs_con' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective rain rate (s) +'rain_con' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#rain amount, grid-scale plus convective +'rr_f' = { + table2Version = 201 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#snow amount, grid-scale plus convective +'rr_c' = { + table2Version = 201 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to grid scale precipation +'dt_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to grid scale precipitation +'dqv_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'dqc_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 127 ; + indicatorOfTypeOfLevel = 110 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'freshsnw' = { + table2Version = 201 ; + indicatorOfParameter = 129 ; + indicatorOfTypeOfLevel = 1 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'dqi_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 110 ; + } +#Graupel (snow pellets) precipitation rate +'prg_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 1 ; + } +#Graupel (snow pellets) precipitation rate +'grau_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow density +'rho_snow' = { + table2Version = 201 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure perturbation +'pp' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + indicatorOfTypeOfLevel = 110 ; + } +#supercell detection index 1 (rot. up+down drafts) +'sdi_1' = { + table2Version = 201 ; + indicatorOfParameter = 141 ; + indicatorOfTypeOfLevel = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'sdi_2' = { + table2Version = 201 ; + indicatorOfParameter = 142 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, most unstable +'cape_mu' = { + table2Version = 201 ; + indicatorOfParameter = 143 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, most unstable +'cin_mu' = { + table2Version = 201 ; + indicatorOfParameter = 144 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, mean layer +'cape_ml' = { + table2Version = 201 ; + indicatorOfParameter = 145 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, mean layer +'cin_ml' = { + table2Version = 201 ; + indicatorOfParameter = 146 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective turbulent kinetic enery +'tke_con' = { + table2Version = 201 ; + indicatorOfParameter = 147 ; + } +#Tendency of turbulent kinetic energy +'tketens' = { + table2Version = 201 ; + indicatorOfParameter = 148 ; + indicatorOfTypeOfLevel = 109 ; + } +#Kinetic Energy +'ke' = { + table2Version = 201 ; + indicatorOfParameter = 149 ; + indicatorOfTypeOfLevel = 110 ; + } +#Turbulent Kinetic Energy +'tke' = { + table2Version = 201 ; + indicatorOfParameter = 152 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusioncoefficient for momentum +'tkvm' = { + table2Version = 201 ; + indicatorOfParameter = 153 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'tkvh' = { + table2Version = 201 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent transfer coefficient for impulse +'tcm' = { + table2Version = 201 ; + indicatorOfParameter = 170 ; + indicatorOfTypeOfLevel = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'tch' = { + table2Version = 201 ; + indicatorOfParameter = 171 ; + indicatorOfTypeOfLevel = 1 ; + } +#mixed layer depth +'mh' = { + table2Version = 201 ; + indicatorOfParameter = 173 ; + indicatorOfTypeOfLevel = 1 ; + } +#maximum Wind 10m +'vmax_10m' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + timeRangeIndicator = 2 ; + } +#Air concentration of Ruthenium 103 +'ru-103' = { + table2Version = 201 ; + indicatorOfParameter = 194 ; + indicatorOfTypeOfLevel = 100 ; + } +#Soil Temperature (multilayers) +'t_so' = { + table2Version = 201 ; + indicatorOfParameter = 197 ; + indicatorOfTypeOfLevel = 111 ; + } +#Column-integrated Soil Moisture (multilayers) +'w_so' = { + table2Version = 201 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 111 ; + } +#soil ice content (multilayers) +'w_so_ice' = { + table2Version = 201 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 111 ; + } +#Plant Canopy Surface Water +'w_i' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow temperature (top of snow) +'t_snow' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#Minimal Stomatal Resistance +'prs_min' = { + table2Version = 201 ; + indicatorOfParameter = 212 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Temperature +'t_ice' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'dbz_850' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'dbz' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 110 ; + } +#Base reflectivity (cmax) +'dbz_cmax' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 200 ; + } +#unknown +'dttdiv' = { + table2Version = 201 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 110 ; + } +#Effective transmissivity of solar radiation +'sotr_rad' = { + table2Version = 201 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 110 ; + } +#sum of contributions to evaporation +'evatra_sum' = { + table2Version = 201 ; + indicatorOfParameter = 236 ; + } +#total transpiration from all soil layers +'tra_sum' = { + table2Version = 201 ; + indicatorOfParameter = 237 ; + } +#total forcing at soil surface +'totforce_s' = { + table2Version = 201 ; + indicatorOfParameter = 238 ; + } +#residuum of soil moisture +'resid_wso' = { + table2Version = 201 ; + indicatorOfParameter = 239 ; + } +#Massflux at convective cloud base +'mflx_con' = { + table2Version = 201 ; + indicatorOfParameter = 240 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy +'cape_con' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + indicatorOfTypeOfLevel = 1 ; + } +#moisture convergence for Kuo-type closure +'qcvg_con' = { + table2Version = 201 ; + indicatorOfParameter = 243 ; + indicatorOfTypeOfLevel = 1 ; + } +#total wave direction +'mwd' = { + table2Version = 202 ; + indicatorOfParameter = 4 ; + } +#wind sea mean period +'mwp_x' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 102 ; + } +#wind sea peak period +'ppww' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + } +#swell mean period +'mpp_s' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 102 ; + } +#swell peak period +'ppps' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + } +#total wave peak period +'pp1d' = { + table2Version = 202 ; + indicatorOfParameter = 9 ; + } +#total wave mean period +'tm10' = { + table2Version = 202 ; + indicatorOfParameter = 10 ; + } +#total Tm1 period +'tm01' = { + table2Version = 202 ; + indicatorOfParameter = 17 ; + } +#total Tm2 period +'tm02' = { + table2Version = 202 ; + indicatorOfParameter = 18 ; + } +#total directional spread +'sprd' = { + table2Version = 202 ; + indicatorOfParameter = 19 ; + } +#analysis error(standard deviation), geopotential(gpm) +'ana_err_fi' = { + table2Version = 202 ; + indicatorOfParameter = 40 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), u-comp. of wind +'ana_err_u' = { + table2Version = 202 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), v-comp. of wind +'ana_err_v' = { + table2Version = 202 ; + indicatorOfParameter = 42 ; + level = 100 ; + } +#zonal wind tendency due to subgrid scale oro. +'du_sso' = { + table2Version = 202 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to subgrid scale oro. +'dv_sso' = { + table2Version = 202 ; + indicatorOfParameter = 45 ; + indicatorOfTypeOfLevel = 110 ; + } +#Standard deviation of sub-grid scale orography +'sso_stdh' = { + table2Version = 202 ; + indicatorOfParameter = 46 ; + indicatorOfTypeOfLevel = 1 ; + } +#Anisotropy of sub-gridscale orography +'sso_gamma' = { + table2Version = 202 ; + indicatorOfParameter = 47 ; + indicatorOfTypeOfLevel = 1 ; + } +#Angle of sub-gridscale orography +'sso_theta' = { + table2Version = 202 ; + indicatorOfParameter = 48 ; + indicatorOfTypeOfLevel = 1 ; + } +#Slope of sub-gridscale orography +'sso_sigma' = { + table2Version = 202 ; + indicatorOfParameter = 49 ; + indicatorOfTypeOfLevel = 1 ; + } +#surface emissivity +'emis_rad' = { + table2Version = 202 ; + indicatorOfParameter = 56 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + timeRangeIndicator = 0 ; + } +#Soil Type +'soiltyp' = { + table2Version = 202 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + } +#Leaf area index +'lai' = { + table2Version = 202 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#root depth of vegetation +'rootdp' = { + table2Version = 202 ; + indicatorOfParameter = 62 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of ozone maximum (climatological) +'hmo3' = { + table2Version = 202 ; + indicatorOfParameter = 64 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertically integrated ozone content (climatological) +'vio3' = { + table2Version = 202 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the vegetation phase +'plcov_mx' = { + table2Version = 202 ; + indicatorOfParameter = 67 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the quiescent phas +'plcov_mn' = { + table2Version = 202 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 1 ; + } +#Max Leaf area index +'lai_mx' = { + table2Version = 202 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 1 ; + } +#Min Leaf area index +'lai_mn' = { + table2Version = 202 ; + indicatorOfParameter = 70 ; + indicatorOfTypeOfLevel = 1 ; + } +#Orographie + Land-Meer-Verteilung +'oro_mod' = { + table2Version = 202 ; + indicatorOfParameter = 71 ; + } +#variance of soil moisture content (0-10) +'wvar1' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + bottomLevel = 10 ; + } +#variance of soil moisture content (10-100) +'wvar2' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#evergreen forest +'for_e' = { + table2Version = 202 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#deciduous forest +'for_d' = { + table2Version = 202 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#normalized differential vegetation index +'ndvi' = { + table2Version = 202 ; + indicatorOfParameter = 77 ; + timeRangeIndicator = 3 ; + } +#normalized differential vegetation index (NDVI) +'ndvi_max' = { + table2Version = 202 ; + indicatorOfParameter = 78 ; + timeRangeIndicator = 3 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ndvi_mrat' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ndviratio' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Total sulfate aerosol +'aer_so4' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + } +#Total sulfate aerosol (12M) +'aer_so412' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + timeRangeIndicator = 3 ; + } +#Total soil dust aerosol +'aer_dust' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + } +#Total soil dust aerosol (12M) +'aer_dust12' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + timeRangeIndicator = 3 ; + } +#Organic aerosol +'aer_org' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + } +#Organic aerosol (12M) +'aer_org12' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + timeRangeIndicator = 3 ; + } +#Black carbon aerosol +'aer_bc' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + } +#Black carbon aerosol (12M) +'aer_bc12' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + timeRangeIndicator = 3 ; + } +#Sea salt aerosol +'aer_ss' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + } +#Sea salt aerosol (12M) +'aer_ss12' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + timeRangeIndicator = 3 ; + } +#tendency of specific humidity +'dqvdt' = { + table2Version = 202 ; + indicatorOfParameter = 104 ; + indicatorOfTypeOfLevel = 110 ; + } +#water vapor flux +'qvsflx' = { + table2Version = 202 ; + indicatorOfParameter = 105 ; + indicatorOfTypeOfLevel = 1 ; + } +#Coriolis parameter +'fc' = { + table2Version = 202 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical latitude +'rlat' = { + table2Version = 202 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical longitude +'rlon' = { + table2Version = 202 ; + indicatorOfParameter = 115 ; + indicatorOfTypeOfLevel = 1 ; + } +#Friction velocity +'ustr' = { + table2Version = 202 ; + indicatorOfParameter = 120 ; + indicatorOfTypeOfLevel = 110 ; + } +#Delay of the GPS signal trough the (total) atm. +'ztd' = { + table2Version = 202 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'zwd' = { + table2Version = 202 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'zhd' = { + table2Version = 202 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ozone Mixing Ratio +'o3' = { + table2Version = 202 ; + indicatorOfParameter = 180 ; + indicatorOfTypeOfLevel = 110 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'ru-103' = { + table2Version = 202 ; + indicatorOfParameter = 194 ; + } +#Ru103-dry deposition +'ru-103d' = { + table2Version = 202 ; + indicatorOfParameter = 195 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ru103-wet deposition +'ru-103w' = { + table2Version = 202 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Strontium 90 +'sr-90' = { + table2Version = 202 ; + indicatorOfParameter = 197 ; + } +#Sr90-dry deposition +'sr-90d' = { + table2Version = 202 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 1 ; + } +#Sr90-wet deposition +'sr-90w' = { + table2Version = 202 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-concentration +'i-131a' = { + table2Version = 202 ; + indicatorOfParameter = 200 ; + } +#I131-dry deposition +'i-131ad' = { + table2Version = 202 ; + indicatorOfParameter = 201 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-wet deposition +'i-131aw' = { + table2Version = 202 ; + indicatorOfParameter = 202 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-concentration +'cs-137' = { + table2Version = 202 ; + indicatorOfParameter = 203 ; + } +#Cs137-dry deposition +'cs-137d' = { + table2Version = 202 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-wet deposition +'cs-137w' = { + table2Version = 202 ; + indicatorOfParameter = 205 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'te-132' = { + table2Version = 202 ; + indicatorOfParameter = 206 ; + } +#Te132-dry deposition +'te-132d' = { + table2Version = 202 ; + indicatorOfParameter = 207 ; + indicatorOfTypeOfLevel = 1 ; + } +#Te132-wet deposition +'te-132w' = { + table2Version = 202 ; + indicatorOfParameter = 208 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'zr-95' = { + table2Version = 202 ; + indicatorOfParameter = 209 ; + } +#Zr95-dry deposition +'zr-95d' = { + table2Version = 202 ; + indicatorOfParameter = 210 ; + indicatorOfTypeOfLevel = 1 ; + } +#Zr95-wet deposition +'zr-95w' = { + table2Version = 202 ; + indicatorOfParameter = 211 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'kr-85' = { + table2Version = 202 ; + indicatorOfParameter = 212 ; + } +#Kr85-dry deposition +'kr-85d' = { + table2Version = 202 ; + indicatorOfParameter = 213 ; + indicatorOfTypeOfLevel = 1 ; + } +#Kr85-wet deposition +'kr-85w' = { + table2Version = 202 ; + indicatorOfParameter = 214 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - concentration +'tr-2' = { + table2Version = 202 ; + indicatorOfParameter = 215 ; + } +#TRACER - dry deposition +'tr-2d' = { + table2Version = 202 ; + indicatorOfParameter = 216 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - wet deposition +'tr-2w' = { + table2Version = 202 ; + indicatorOfParameter = 217 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'xe-133' = { + table2Version = 202 ; + indicatorOfParameter = 218 ; + } +#Xe133 - dry deposition +'xe-133d' = { + table2Version = 202 ; + indicatorOfParameter = 219 ; + indicatorOfTypeOfLevel = 1 ; + } +#Xe133 - wet deposition +'xe-133w' = { + table2Version = 202 ; + indicatorOfParameter = 220 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - concentration +'i-131g' = { + table2Version = 202 ; + indicatorOfParameter = 221 ; + } +#Xe133 - wet deposition +'i-131gd' = { + table2Version = 202 ; + indicatorOfParameter = 222 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - wet deposition +'i-131gw' = { + table2Version = 202 ; + indicatorOfParameter = 223 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - concentration +'i-131o' = { + table2Version = 202 ; + indicatorOfParameter = 224 ; + } +#I131o - dry deposition +'i-131od' = { + table2Version = 202 ; + indicatorOfParameter = 225 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - wet deposition +'i-131ow' = { + table2Version = 202 ; + indicatorOfParameter = 226 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Barium 40 +'ba-140' = { + table2Version = 202 ; + indicatorOfParameter = 227 ; + } +#Ba140 - dry deposition +'ba-140d' = { + table2Version = 202 ; + indicatorOfParameter = 228 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ba140 - wet deposition +'ba-140w' = { + table2Version = 202 ; + indicatorOfParameter = 229 ; + indicatorOfTypeOfLevel = 1 ; + } +#u-momentum flux due to SSO-effects +'austr_sso' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#u-momentum flux due to SSO-effects +'ustr_sso' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#v-momentum flux due to SSO-effects +'avstr_sso' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#v-momentum flux due to SSO-effects +'vstr_sso' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Gravity wave dissipation (vertical integral) +'avdis_sso' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Gravity wave dissipation (vertical integral) +'vdis_sso' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'uv_max' = { + table2Version = 202 ; + indicatorOfParameter = 248 ; + indicatorOfTypeOfLevel = 1 ; + } +#wind shear +'w_shaer' = { + table2Version = 203 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#storm relative helicity +'srh' = { + table2Version = 203 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#absolute vorticity advection +'vabs' = { + table2Version = 203 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 100 ; + } +#NiederschlagBew.-ArtKombination Niederschl.-Bew.-Blautherm. (283..407) +'cl_typ' = { + table2Version = 203 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konvektions-U-GrenzeHoehe der Konvektionsuntergrenze ueber Grund +'ccl_gnd' = { + table2Version = 203 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'ccl_nn' = { + table2Version = 203 ; + indicatorOfParameter = 94 ; + indicatorOfTypeOfLevel = 1 ; + } +#weather interpretation (WMO) +'ww' = { + table2Version = 203 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 1 ; + } +#geostrophische Vorticityadvektion +'advorg' = { + table2Version = 203 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 100 ; + } +#Geo Temperatur Adv geostrophische Schichtdickenadvektion +'advor' = { + table2Version = 203 ; + indicatorOfParameter = 103 ; + indicatorOfTypeOfLevel = 101 ; + } +#Schichtdicken-Advektion +'adrtg' = { + table2Version = 203 ; + indicatorOfParameter = 107 ; + indicatorOfTypeOfLevel = 101 ; + } +#Winddivergenz +'wdiv' = { + table2Version = 203 ; + indicatorOfParameter = 109 ; + indicatorOfTypeOfLevel = 100 ; + } +#Qn-Vektor Q isother-senkr-KompQn ,Komp. Q-Vektor senkrecht zu den Isothermen +'fqn' = { + table2Version = 203 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 100 ; + } +#Isentrope potentielle Vorticity +'ipv' = { + table2Version = 203 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 100 ; + } +#XIPV Wind X-Komp Wind X-Komponente auf isentropen Flaechen +'up' = { + table2Version = 203 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 100 ; + } +#YIPV Wind Y-Komp Wind Y-Komponente auf isentropen Flaechen +'vp' = { + table2Version = 203 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 100 ; + } +#Druck einer isentropen Flaeche +'ptheta' = { + table2Version = 203 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 100 ; + } +#KO index +'ko' = { + table2Version = 203 ; + indicatorOfParameter = 140 ; + indicatorOfTypeOfLevel = 1 ; + } +#Aequivalentpotentielle Temperatur +'thetae' = { + table2Version = 203 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 100 ; + } +#Ceiling +'ceiling' = { + table2Version = 203 ; + indicatorOfParameter = 157 ; + indicatorOfTypeOfLevel = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'ice_grd' = { + table2Version = 203 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 100 ; + } +#modified cloud depth for media +'cldepth' = { + table2Version = 203 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#modified cloud cover for media +'clct_mod' = { + table2Version = 203 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'efa-ps' = { + table2Version = 204 ; + indicatorOfParameter = 1 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'eia-ps' = { + table2Version = 204 ; + indicatorOfParameter = 2 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'efa-u' = { + table2Version = 204 ; + indicatorOfParameter = 3 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'eia-u' = { + table2Version = 204 ; + indicatorOfParameter = 4 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'efa-v' = { + table2Version = 204 ; + indicatorOfParameter = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'eia-v' = { + table2Version = 204 ; + indicatorOfParameter = 6 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'efa-fi' = { + table2Version = 204 ; + indicatorOfParameter = 7 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'eia-fi' = { + table2Version = 204 ; + indicatorOfParameter = 8 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'efa-rh' = { + table2Version = 204 ; + indicatorOfParameter = 9 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'eia-rh' = { + table2Version = 204 ; + indicatorOfParameter = 10 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'efa-t' = { + table2Version = 204 ; + indicatorOfParameter = 11 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'eia-t' = { + table2Version = 204 ; + indicatorOfParameter = 12 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'efa-om' = { + table2Version = 204 ; + indicatorOfParameter = 13 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'eia-om' = { + table2Version = 204 ; + indicatorOfParameter = 14 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'efa-ke' = { + table2Version = 204 ; + indicatorOfParameter = 15 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'eia-ke' = { + table2Version = 204 ; + indicatorOfParameter = 16 ; + } +#Synth. Sat. brightness temperature cloudy +'synme5_bt_cl' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'synme5_bt_cs' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'synme5_rad_cl' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synme5_rad_cs' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'synme6_bt_cl' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'synme6_bt_cs' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'synme6_rad_cl' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synme6_rad_cs' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature clear sky +'synme7_bt_cl_ir11.5' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synme7_bt_cl_wv6.4' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'synme7_bt_cs_ir11.5' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature cloudy +'synme7_bt_cs_wv6.4' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance clear sky +'synme7_rad_cl_ir11.5' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synme7_rad_cl_wv6.4' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'synme7_rad_cs_ir11.5' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance cloudy +'synme7_rad_cs_wv6.4' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir10.8' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir12.1' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir13.4' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir3.9' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir8.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir9.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_wv6.2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_wv7.3' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir8.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir10.8' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir12.1' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir13.4' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir3.9' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir9.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_wv6.2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_wv7.3' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir10.8' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir12.1' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir13.4' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir3.9' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir8.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir9.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_wv6.2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_wv7.3' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir10.8' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir12.1' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir13.4' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir3.9' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir8.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir9.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_wv6.2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_wv7.3' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 4 ; + } +#smoothed forecast, temperature +'t_2m_s' = { + table2Version = 206 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, maximum temp. +'tmax_2m_s' = { + table2Version = 206 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, minimum temp. +'tmin_2m_s' = { + table2Version = 206 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, dew point temp. +'td_2m_s' = { + table2Version = 206 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, u comp. of wind +'u_10m_s' = { + table2Version = 206 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, v comp. of wind +'v_10m_s' = { + table2Version = 206 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, total precipitation rate +'tot_prec_s' = { + table2Version = 206 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, total cloud cover +'clct_s' = { + table2Version = 206 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover low +'clcl_s' = { + table2Version = 206 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover medium +'clcm_s' = { + table2Version = 206 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover high +'clch_s' = { + table2Version = 206 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'snow_gsp_s' = { + table2Version = 206 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, soil temperature +'t_s_s' = { + table2Version = 206 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#smoothed forecast, wind speed (gust) +'vmax_10m_s' = { + table2Version = 206 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#calibrated forecast, total precipitation rate +'tot_prec_c' = { + table2Version = 207 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'snow_gsp_c' = { + table2Version = 207 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, wind speed (gust) +'vmax_10m_c' = { + table2Version = 207 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; +} diff --git a/definitions/grib1/localConcepts/cnmc/units.def b/definitions/grib1/localConcepts/cnmc/units.def new file mode 100644 index 000000000..1c5b0ebaf --- /dev/null +++ b/definitions/grib1/localConcepts/cnmc/units.def @@ -0,0 +1,2435 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Pressure Reduced to MSL +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 102 ; + } +#Pressure Tendency (S) +'Pa s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (S) +'m**2 s**-2' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (full lev) +'m**2 s**-2' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 110 ; + } +#Geopotential +'m**2 s**-2' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Geometric Height of the earths surface above sea level +'m' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'m' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 109 ; + } +#Total Column Integrated Ozone +'Dobson' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature (G) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 1 ; + } +#2m Temperature (AV) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Climat. temperature, 2m Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#Max 2m Temperature (i) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#Min 2m Temperature (i) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#2m Dew Point Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Dew Point Temperature (AV) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Radar spectra (1) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + } +#Wave spectra (1) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind Direction (DD_10M) +'degrees' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind Direction (DD) +'degrees' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Wind speed (SP_10M) +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind speed (SP) +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 110 ; + } +#U component of wind +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#U component of wind +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#V component of wind +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'Pa s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vertical Velocity (Geometric) (w) +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 40 ; + } +#Specific Humidity (S) +'kg kg**-1' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 1 ; + } +#Specific Humidity (2m) +'kg kg**-1' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Specific Humidity +'kg kg**-1' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#2m Relative Humidity +'%' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Relative Humidity +'%' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#Total column integrated water vapour +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + indicatorOfTypeOfLevel = 1 ; + } +#Evaporation (s) +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Total Column-Integrated Cloud Ice +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Precipitation rate (S) +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale Precipitation rate +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + timeRangeIndicator = 4 ; + } +#Convective Precipitation rate +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow depth water equivalent +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow Depth +'m' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Cloud Cover +'%' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Cloud Cover +'%' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Cover (800 hPa - Soil) +'%' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (400 - 800 hPa) +'%' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (0 - 400 hPa) +'%' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Column-Integrated Cloud Water +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale snowfall rate water equivalent (s) +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Land Cover (1=land, 0=sea) +'(0 - 1)' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + indicatorOfTypeOfLevel = 1 ; + } +#Surface Roughness length Surface Roughness +'m' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'%' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'%' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 36 ; + } +#Soil Temperature (41 cm depth) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 41 ; + } +#Soil Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 9 ; + } +#Soil Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#Column-integrated Soil Moisture +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 190 ; + topLevel = 100 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + bottomLevel = 10 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#Plant cover +'%' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + indicatorOfTypeOfLevel = 1 ; + } +#Water Runoff (10-100) +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + timeRangeIndicator = 4 ; + topLevel = 10 ; + bottomLevel = 100 ; + } +#Water Runoff (10-190) +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + timeRangeIndicator = 4 ; + topLevel = 10 ; + bottomLevel = 190 ; + } +#Water Runoff (s) +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + timeRangeIndicator = 4 ; + topLevel = 0 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Thickness +'m' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + indicatorOfTypeOfLevel = 1 ; + } +#Significant height of combined wind waves and swell +'m' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Direction of wind waves +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'m' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'s' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'m' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'s' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Net short wave radiation flux (m) (at the surface) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (at the surface) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net short wave radiation flux (m) (on the model top) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Latent Heat Net Flux (m) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Sensible Heat Net Flux (m) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, U-Component (m) +'N m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, V-Component (m) +'N m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation (m) (at the surface) +'W m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation +'W m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Solar radiation heating rate +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + indicatorOfTypeOfLevel = 110 ; + } +#Thermal radiation heating rate +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + indicatorOfTypeOfLevel = 110 ; + } +#Latent heat flux from bare soil +'W m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 18 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Latent heat flux from plants +'W m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 19 ; + indicatorOfTypeOfLevel = 111 ; + timeRangeIndicator = 3 ; + } +#Sunshine +'~' = { + table2Version = 201 ; + indicatorOfParameter = 20 ; + timeRangeIndicator = 4 ; + } +#Stomatal Resistance +'s m**-1' = { + table2Version = 201 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Cloud cover +'%' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#Non-Convective Cloud Cover, grid scale +'%' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Mixing Ratio +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Ice Mixing Ratio +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 110 ; + } +#Rain mixing ratio +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + indicatorOfTypeOfLevel = 110 ; + } +#Snow mixing ratio +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated rain +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total column integrated snow +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + indicatorOfTypeOfLevel = 1 ; + } +#Grauple +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 39 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated grauple +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 40 ; + } +#Total Column integrated water (all components incl. precipitation) +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertical integral of divergence of total water content (s) +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + indicatorOfTypeOfLevel = 1 ; + } +#subgrid scale cloud water +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 43 ; + indicatorOfTypeOfLevel = 110 ; + } +#subgridscale cloud ice +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#cloud cover CH (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#cloud base above msl, shallow convection +'m' = { + table2Version = 201 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 2 ; + } +#cloud top above msl, shallow convection +'m' = { + table2Version = 201 ; + indicatorOfParameter = 59 ; + indicatorOfTypeOfLevel = 3 ; + } +#specific cloud water content, convective cloud +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 110 ; + } +#Height of Convective Cloud Base (i) +'m' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 2 ; + } +#Height of Convective Cloud Top (i) +'m' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to convection +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to convection +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 110 ; + } +#zonal wind tendency due to convection +'m s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to convection +'m s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 110 ; + } +#height of top of dry convection +'m' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'m' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 4 ; + } +#Height of snow fall limit +'m' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 4 ; + } +#Tendency of specific cloud liquid water content due to conversion +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 88 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud ice content due to convection +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 89 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 110 ; + } +#Large scale rain rate +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale snowfall rate water equivalent +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale rain rate (s) +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Convective rain rate +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective snowfall rate water equivalent +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective rain rate (s) +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#rain amount, grid-scale plus convective +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#snow amount, grid-scale plus convective +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to grid scale precipation +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to grid scale precipitation +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 127 ; + indicatorOfTypeOfLevel = 110 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 129 ; + indicatorOfTypeOfLevel = 1 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 110 ; + } +#Graupel (snow pellets) precipitation rate +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 1 ; + } +#Graupel (snow pellets) precipitation rate +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow density +'kg m**-3' = { + table2Version = 201 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure perturbation +'Pa' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + indicatorOfTypeOfLevel = 110 ; + } +#supercell detection index 1 (rot. up+down drafts) +'s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 141 ; + indicatorOfTypeOfLevel = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 142 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, most unstable +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 143 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, most unstable +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 144 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, mean layer +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 145 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, mean layer +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 146 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective turbulent kinetic enery +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 147 ; + } +#Tendency of turbulent kinetic energy +'m s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 148 ; + indicatorOfTypeOfLevel = 109 ; + } +#Kinetic Energy +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 149 ; + indicatorOfTypeOfLevel = 110 ; + } +#Turbulent Kinetic Energy +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 152 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusioncoefficient for momentum +'m**2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 153 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'m**2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent transfer coefficient for impulse +'~' = { + table2Version = 201 ; + indicatorOfParameter = 170 ; + indicatorOfTypeOfLevel = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 171 ; + indicatorOfTypeOfLevel = 1 ; + } +#mixed layer depth +'m' = { + table2Version = 201 ; + indicatorOfParameter = 173 ; + indicatorOfTypeOfLevel = 1 ; + } +#maximum Wind 10m +'m s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + timeRangeIndicator = 2 ; + } +#Air concentration of Ruthenium 103 +'Bq m**-3' = { + table2Version = 201 ; + indicatorOfParameter = 194 ; + indicatorOfTypeOfLevel = 100 ; + } +#Soil Temperature (multilayers) +'K' = { + table2Version = 201 ; + indicatorOfParameter = 197 ; + indicatorOfTypeOfLevel = 111 ; + } +#Column-integrated Soil Moisture (multilayers) +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 111 ; + } +#soil ice content (multilayers) +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 111 ; + } +#Plant Canopy Surface Water +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow temperature (top of snow) +'K' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#Minimal Stomatal Resistance +'s m**-1' = { + table2Version = 201 ; + indicatorOfParameter = 212 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Temperature +'K' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'dB' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'dB' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 110 ; + } +#Base reflectivity (cmax) +'dB' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 200 ; + } +#unknown +'m' = { + table2Version = 201 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 110 ; + } +#Effective transmissivity of solar radiation +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 110 ; + } +#sum of contributions to evaporation +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 236 ; + } +#total transpiration from all soil layers +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 237 ; + } +#total forcing at soil surface +'W m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 238 ; + } +#residuum of soil moisture +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 239 ; + } +#Massflux at convective cloud base +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 240 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + indicatorOfTypeOfLevel = 1 ; + } +#moisture convergence for Kuo-type closure +'s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 243 ; + indicatorOfTypeOfLevel = 1 ; + } +#total wave direction +'Degree true' = { + table2Version = 202 ; + indicatorOfParameter = 4 ; + } +#wind sea mean period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 102 ; + } +#wind sea peak period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + } +#swell mean period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 102 ; + } +#swell peak period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + } +#total wave peak period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 9 ; + } +#total wave mean period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 10 ; + } +#total Tm1 period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 17 ; + } +#total Tm2 period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 18 ; + } +#total directional spread +'Degree true' = { + table2Version = 202 ; + indicatorOfParameter = 19 ; + } +#analysis error(standard deviation), geopotential(gpm) +'gpm' = { + table2Version = 202 ; + indicatorOfParameter = 40 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), u-comp. of wind +'m**2 s**-2' = { + table2Version = 202 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), v-comp. of wind +'m**2 s**-2' = { + table2Version = 202 ; + indicatorOfParameter = 42 ; + level = 100 ; + } +#zonal wind tendency due to subgrid scale oro. +'m s**-1' = { + table2Version = 202 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to subgrid scale oro. +'m s**-1' = { + table2Version = 202 ; + indicatorOfParameter = 45 ; + indicatorOfTypeOfLevel = 110 ; + } +#Standard deviation of sub-grid scale orography +'m' = { + table2Version = 202 ; + indicatorOfParameter = 46 ; + indicatorOfTypeOfLevel = 1 ; + } +#Anisotropy of sub-gridscale orography +'~' = { + table2Version = 202 ; + indicatorOfParameter = 47 ; + indicatorOfTypeOfLevel = 1 ; + } +#Angle of sub-gridscale orography +'radians' = { + table2Version = 202 ; + indicatorOfParameter = 48 ; + indicatorOfTypeOfLevel = 1 ; + } +#Slope of sub-gridscale orography +'~' = { + table2Version = 202 ; + indicatorOfParameter = 49 ; + indicatorOfTypeOfLevel = 1 ; + } +#surface emissivity +'~' = { + table2Version = 202 ; + indicatorOfParameter = 56 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + timeRangeIndicator = 0 ; + } +#Soil Type +'~' = { + table2Version = 202 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + } +#Leaf area index +'~' = { + table2Version = 202 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#root depth of vegetation +'m' = { + table2Version = 202 ; + indicatorOfParameter = 62 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of ozone maximum (climatological) +'Pa' = { + table2Version = 202 ; + indicatorOfParameter = 64 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertically integrated ozone content (climatological) +'Pa' = { + table2Version = 202 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the vegetation phase +'~' = { + table2Version = 202 ; + indicatorOfParameter = 67 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the quiescent phas +'~' = { + table2Version = 202 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 1 ; + } +#Max Leaf area index +'~' = { + table2Version = 202 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 1 ; + } +#Min Leaf area index +'~' = { + table2Version = 202 ; + indicatorOfParameter = 70 ; + indicatorOfTypeOfLevel = 1 ; + } +#Orographie + Land-Meer-Verteilung +'m' = { + table2Version = 202 ; + indicatorOfParameter = 71 ; + } +#variance of soil moisture content (0-10) +'kg**2 m**-4' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + bottomLevel = 10 ; + } +#variance of soil moisture content (10-100) +'kg**2 m**-4' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 10 ; + bottomLevel = 100 ; + } +#evergreen forest +'~' = { + table2Version = 202 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#deciduous forest +'~' = { + table2Version = 202 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#normalized differential vegetation index +'~' = { + table2Version = 202 ; + indicatorOfParameter = 77 ; + timeRangeIndicator = 3 ; + } +#normalized differential vegetation index (NDVI) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 78 ; + timeRangeIndicator = 3 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'~' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'~' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Total sulfate aerosol +'~' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + } +#Total sulfate aerosol (12M) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + timeRangeIndicator = 3 ; + } +#Total soil dust aerosol +'~' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + } +#Total soil dust aerosol (12M) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + timeRangeIndicator = 3 ; + } +#Organic aerosol +'~' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + } +#Organic aerosol (12M) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + timeRangeIndicator = 3 ; + } +#Black carbon aerosol +'~' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + } +#Black carbon aerosol (12M) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + timeRangeIndicator = 3 ; + } +#Sea salt aerosol +'~' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + } +#Sea salt aerosol (12M) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + timeRangeIndicator = 3 ; + } +#tendency of specific humidity +'s**-1' = { + table2Version = 202 ; + indicatorOfParameter = 104 ; + indicatorOfTypeOfLevel = 110 ; + } +#water vapor flux +'s**-1 m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 105 ; + indicatorOfTypeOfLevel = 1 ; + } +#Coriolis parameter +'s**-1' = { + table2Version = 202 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical latitude +'Degree N' = { + table2Version = 202 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical longitude +'Degree E' = { + table2Version = 202 ; + indicatorOfParameter = 115 ; + indicatorOfTypeOfLevel = 1 ; + } +#Friction velocity +'m s**-1' = { + table2Version = 202 ; + indicatorOfParameter = 120 ; + indicatorOfTypeOfLevel = 110 ; + } +#Delay of the GPS signal trough the (total) atm. +'m' = { + table2Version = 202 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'m' = { + table2Version = 202 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'m' = { + table2Version = 202 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ozone Mixing Ratio +'kg kg**-1' = { + table2Version = 202 ; + indicatorOfParameter = 180 ; + indicatorOfTypeOfLevel = 110 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 194 ; + } +#Ru103-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 195 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ru103-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Strontium 90 +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 197 ; + } +#Sr90-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 1 ; + } +#Sr90-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-concentration +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 200 ; + } +#I131-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 201 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 202 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-concentration +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 203 ; + } +#Cs137-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 205 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 206 ; + } +#Te132-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 207 ; + indicatorOfTypeOfLevel = 1 ; + } +#Te132-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 208 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 209 ; + } +#Zr95-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 210 ; + indicatorOfTypeOfLevel = 1 ; + } +#Zr95-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 211 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 212 ; + } +#Kr85-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 213 ; + indicatorOfTypeOfLevel = 1 ; + } +#Kr85-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 214 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - concentration +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 215 ; + } +#TRACER - dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 216 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 217 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 218 ; + } +#Xe133 - dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 219 ; + indicatorOfTypeOfLevel = 1 ; + } +#Xe133 - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 220 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - concentration +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 221 ; + } +#Xe133 - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 222 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 223 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - concentration +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 224 ; + } +#I131o - dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 225 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 226 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Barium 40 +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 227 ; + } +#Ba140 - dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 228 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ba140 - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 229 ; + indicatorOfTypeOfLevel = 1 ; + } +#u-momentum flux due to SSO-effects +'N m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#u-momentum flux due to SSO-effects +'N m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#v-momentum flux due to SSO-effects +'N m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#v-momentum flux due to SSO-effects +'N m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Gravity wave dissipation (vertical integral) +'W m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Gravity wave dissipation (vertical integral) +'W m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'~' = { + table2Version = 202 ; + indicatorOfParameter = 248 ; + indicatorOfTypeOfLevel = 1 ; + } +#wind shear +'m s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#storm relative helicity +'J kg**-1' = { + table2Version = 203 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#absolute vorticity advection +'s**-2' = { + table2Version = 203 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 100 ; + } +#NiederschlagBew.-ArtKombination Niederschl.-Bew.-Blautherm. (283..407) +'~' = { + table2Version = 203 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konvektions-U-GrenzeHoehe der Konvektionsuntergrenze ueber Grund +'m' = { + table2Version = 203 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'m' = { + table2Version = 203 ; + indicatorOfParameter = 94 ; + indicatorOfTypeOfLevel = 1 ; + } +#weather interpretation (WMO) +'~' = { + table2Version = 203 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 1 ; + } +#geostrophische Vorticityadvektion +'s**-2' = { + table2Version = 203 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 100 ; + } +#Geo Temperatur Adv geostrophische Schichtdickenadvektion +'m**3 kg**-1 s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 103 ; + indicatorOfTypeOfLevel = 101 ; + } +#Schichtdicken-Advektion +'m**3 kg**-1 s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 107 ; + indicatorOfTypeOfLevel = 101 ; + } +#Winddivergenz +'s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 109 ; + indicatorOfTypeOfLevel = 100 ; + } +#Qn-Vektor Q isother-senkr-KompQn ,Komp. Q-Vektor senkrecht zu den Isothermen +'m**2 kg**-1 s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 100 ; + } +#Isentrope potentielle Vorticity +'K m**2 kg**-1 s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 100 ; + } +#XIPV Wind X-Komp Wind X-Komponente auf isentropen Flaechen +'m s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 100 ; + } +#YIPV Wind Y-Komp Wind Y-Komponente auf isentropen Flaechen +'m s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 100 ; + } +#Druck einer isentropen Flaeche +'Pa' = { + table2Version = 203 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 100 ; + } +#KO index +'K' = { + table2Version = 203 ; + indicatorOfParameter = 140 ; + indicatorOfTypeOfLevel = 1 ; + } +#Aequivalentpotentielle Temperatur +'K' = { + table2Version = 203 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 100 ; + } +#Ceiling +'m' = { + table2Version = 203 ; + indicatorOfParameter = 157 ; + indicatorOfTypeOfLevel = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'~' = { + table2Version = 203 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 100 ; + } +#modified cloud depth for media +'~' = { + table2Version = 203 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#modified cloud cover for media +'~' = { + table2Version = 203 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'Pa' = { + table2Version = 204 ; + indicatorOfParameter = 1 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'Pa' = { + table2Version = 204 ; + indicatorOfParameter = 2 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'m s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 3 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'m s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 4 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'m s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'m s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 6 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'m**2 s**-2' = { + table2Version = 204 ; + indicatorOfParameter = 7 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'m**2 s**-2' = { + table2Version = 204 ; + indicatorOfParameter = 8 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'%' = { + table2Version = 204 ; + indicatorOfParameter = 9 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'%' = { + table2Version = 204 ; + indicatorOfParameter = 10 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'K' = { + table2Version = 204 ; + indicatorOfParameter = 11 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'K' = { + table2Version = 204 ; + indicatorOfParameter = 12 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'Pa s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 13 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'Pa s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 14 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'J kg**-1' = { + table2Version = 204 ; + indicatorOfParameter = 15 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'J kg**-1' = { + table2Version = 204 ; + indicatorOfParameter = 16 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 4 ; + } +#smoothed forecast, temperature +'K' = { + table2Version = 206 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, maximum temp. +'K' = { + table2Version = 206 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, minimum temp. +'K' = { + table2Version = 206 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, dew point temp. +'K' = { + table2Version = 206 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, u comp. of wind +'m s**-1' = { + table2Version = 206 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, v comp. of wind +'m s**-1' = { + table2Version = 206 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, total precipitation rate +'kg m**-2 s**-1' = { + table2Version = 206 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, total cloud cover +'%' = { + table2Version = 206 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover low +'%' = { + table2Version = 206 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover medium +'%' = { + table2Version = 206 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover high +'%' = { + table2Version = 206 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'kg m**-2 s**-1' = { + table2Version = 206 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, soil temperature +'K' = { + table2Version = 206 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#smoothed forecast, wind speed (gust) +'m s**-1' = { + table2Version = 206 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#calibrated forecast, total precipitation rate +'kg m**-2 s**-1' = { + table2Version = 207 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'kg m**-2 s**-1' = { + table2Version = 207 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, wind speed (gust) +'m s**-1' = { + table2Version = 207 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; +} diff --git a/definitions/grib1/localConcepts/ecmf/cfName.def b/definitions/grib1/localConcepts/ecmf/cfName.def new file mode 100644 index 000000000..1a35e0807 --- /dev/null +++ b/definitions/grib1/localConcepts/ecmf/cfName.def @@ -0,0 +1,196 @@ +# Automatically generated by ./create_param.pl from database param@balthasar, do not edit +#Geopotential +'geopotential' = { + indicatorOfParameter = 129 ; + table2Version = 128 ; + } +#Temperature +'air_temperature' = { + indicatorOfParameter = 130 ; + table2Version = 128 ; + } +#u-component of wind +'eastward_wind' = { + indicatorOfParameter = 131 ; + table2Version = 128 ; + } +#v-component of wind +'northward_wind' = { + indicatorOfParameter = 132 ; + table2Version = 128 ; + } +#Specific humidity +'specific_humidity' = { + indicatorOfParameter = 133 ; + table2Version = 128 ; + } +#Surface pressure +'surface_air_pressure' = { + indicatorOfParameter = 134 ; + table2Version = 128 ; + } +#Vertical velocity (geometric) +'lagrangian_tendency_of_air_pressure' = { + indicatorOfParameter = 135 ; + table2Version = 128 ; + } +#Total column water vapour +'lwe_thickness_of_atmosphere_water_vapor_content' = { + indicatorOfParameter = 137 ; + table2Version = 128 ; + } +#Relative vorticity +'atmosphere_relative_vorticity' = { + indicatorOfParameter = 138 ; + table2Version = 128 ; + } +#Soil temperature level 1 +'surface_temperature' = { + indicatorOfParameter = 139 ; + table2Version = 128 ; + } +#Soil wetness level 1 +'lwe_thickness_of_soil_moisture_content' = { + indicatorOfParameter = 140 ; + table2Version = 128 ; + } +#Snow depth +'lwe_thickness_of_surface_snow_amount' = { + indicatorOfParameter = 141 ; + table2Version = 128 ; + } +#Stratiform precipitation (Large-scale precipitation) +'lwe_thickness_of_large_scale_precipitation_amount' = { + indicatorOfParameter = 142 ; + table2Version = 128 ; + } +#Convective precipitation +'lwe_thickness_of_convective_precipitation_amount' = { + indicatorOfParameter = 143 ; + table2Version = 128 ; + } +#Snowfall +'lwe_thickness_of_snowfall_amount' = { + indicatorOfParameter = 144 ; + table2Version = 128 ; + } +#Boundary layer dissipation +'dissipation_in_atmosphere_boundary_layer' = { + indicatorOfParameter = 145 ; + table2Version = 128 ; + } +#Surface sensible heat flux +'surface_upward_sensible_heat_flux' = { + indicatorOfParameter = 146 ; + table2Version = 128 ; + } +#Surface latent heat flux +'surface_upward_latent_heat_flux' = { + indicatorOfParameter = 147 ; + table2Version = 128 ; + } +#Mean sea level pressure +'air_pressure_at_sea_level' = { + indicatorOfParameter = 151 ; + table2Version = 128 ; + } +#Relative divergence +'divergence_of_wind' = { + indicatorOfParameter = 155 ; + table2Version = 128 ; + } +#Geopotential height +'geopotential_height' = { + indicatorOfParameter = 156 ; + table2Version = 128 ; + } +#Relative humidity +'relative_humidity' = { + indicatorOfParameter = 157 ; + table2Version = 128 ; + } +#Tendency of surface pressure +'tendency_of_surface_air_pressure' = { + indicatorOfParameter = 158 ; + table2Version = 128 ; + } +#Total cloud cover +'cloud_area_fraction' = { + indicatorOfParameter = 164 ; + table2Version = 128 ; + } +#Surface solar radiation downwards +'surface_downwelling_shortwave_flux_in_air' = { + indicatorOfParameter = 169 ; + table2Version = 128 ; + } +#Land-sea mask +'land_binary_mask' = { + indicatorOfParameter = 172 ; + table2Version = 128 ; + } +#Surface roughness +'surface_roughness_length' = { + indicatorOfParameter = 173 ; + table2Version = 128 ; + } +#Albedo +'surface_albedo' = { + indicatorOfParameter = 174 ; + table2Version = 128 ; + } +#Surface solar radiation +'surface_net_upward_longwave_flux' = { + indicatorOfParameter = 176 ; + table2Version = 128 ; + } +#Surface thermal radiation +'surface_net_upward_shortwave_flux' = { + indicatorOfParameter = 177 ; + table2Version = 128 ; + } +#Top solar radiation +'toa_net_upward_shortwave_flux' = { + indicatorOfParameter = 178 ; + table2Version = 128 ; + } +#Top thermal radiation +'toa_outgoing_longwave_flux' = { + indicatorOfParameter = 179 ; + table2Version = 128 ; + } +#East-West surface stress +'surface_downward_eastward_stress' = { + indicatorOfParameter = 180 ; + table2Version = 128 ; + } +#North-South surface stress +'surface_downward_northward_stress' = { + indicatorOfParameter = 181 ; + table2Version = 128 ; + } +#Evaporation +'lwe_thickness_of_water_evaporation_amount' = { + indicatorOfParameter = 182 ; + table2Version = 128 ; + } +#Convective cloud cover +'convective_cloud_area_fraction' = { + indicatorOfParameter = 185 ; + table2Version = 128 ; + } +#Surface net solar radiation, clear sky +'surface_net_downward_shortwave_flux_assuming_clear_sky' = { + indicatorOfParameter = 210 ; + table2Version = 128 ; + } +#Surface net thermal radiation, clear sky +'surface_net_downward_longwave_flux_assuming_clear_sky' = { + indicatorOfParameter = 211 ; + table2Version = 128 ; + } +#Temperature of snow layer +'snow_temperature' = { + indicatorOfParameter = 238 ; + table2Version = 128 ; +} diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def new file mode 100644 index 000000000..cd21fce93 --- /dev/null +++ b/definitions/grib1/localConcepts/ecmf/name.def @@ -0,0 +1,15316 @@ +# Automatically generated by create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total precipitation of at least 1 mm +'Total precipitation of at least 1 mm' = { + table2Version = 131 ; + indicatorOfParameter = 60 ; + } +#Total precipitation of at least 5 mm +'Total precipitation of at least 5 mm' = { + table2Version = 131 ; + indicatorOfParameter = 61 ; + } +#Total precipitation of at least 10 mm +'Total precipitation of at least 10 mm' = { + table2Version = 131 ; + indicatorOfParameter = 62 ; + } +#Total precipitation of at least 20 mm +'Total precipitation of at least 20 mm' = { + table2Version = 131 ; + indicatorOfParameter = 63 ; + } +#Total precipitation of at least 40 mm +'Total precipitation of at least 40 mm' = { + table2Version = 131 ; + indicatorOfParameter = 82 ; + } +#Total precipitation of at least 60 mm +'Total precipitation of at least 60 mm' = { + table2Version = 131 ; + indicatorOfParameter = 83 ; + } +#Total precipitation of at least 80 mm +'Total precipitation of at least 80 mm' = { + table2Version = 131 ; + indicatorOfParameter = 84 ; + } +#Total precipitation of at least 100 mm +'Total precipitation of at least 100 mm' = { + table2Version = 131 ; + indicatorOfParameter = 85 ; + } +#Total precipitation of at least 150 mm +'Total precipitation of at least 150 mm' = { + table2Version = 131 ; + indicatorOfParameter = 86 ; + } +#Total precipitation of at least 200 mm +'Total precipitation of at least 200 mm' = { + table2Version = 131 ; + indicatorOfParameter = 87 ; + } +#Total precipitation of at least 300 mm +'Total precipitation of at least 300 mm' = { + table2Version = 131 ; + indicatorOfParameter = 88 ; + } +#Stream function +'Stream function' = { + table2Version = 128 ; + indicatorOfParameter = 1 ; + } +#Velocity potential +'Velocity potential' = { + table2Version = 128 ; + indicatorOfParameter = 2 ; + } +#Potential temperature +'Potential temperature' = { + table2Version = 128 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature +'Equivalent potential temperature' = { + table2Version = 128 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature +'Saturated equivalent potential temperature' = { + table2Version = 128 ; + indicatorOfParameter = 5 ; + } +#Soil sand fraction +'Soil sand fraction' = { + table2Version = 128 ; + indicatorOfParameter = 6 ; + } +#Soil clay fraction +'Soil clay fraction' = { + table2Version = 128 ; + indicatorOfParameter = 7 ; + } +#Surface runoff +'Surface runoff' = { + table2Version = 128 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff +'Sub-surface runoff' = { + table2Version = 128 ; + indicatorOfParameter = 9 ; + } +#Wind speed +'Wind speed' = { + table2Version = 128 ; + indicatorOfParameter = 10 ; + } +#U component of divergent wind +'U component of divergent wind' = { + table2Version = 128 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind +'V component of divergent wind' = { + table2Version = 128 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind +'U component of rotational wind' = { + table2Version = 128 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind +'V component of rotational wind' = { + table2Version = 128 ; + indicatorOfParameter = 14 ; + } +#UV visible albedo for direct radiation +'UV visible albedo for direct radiation' = { + table2Version = 128 ; + indicatorOfParameter = 15 ; + } +#UV visible albedo for diffuse radiation +'UV visible albedo for diffuse radiation' = { + table2Version = 128 ; + indicatorOfParameter = 16 ; + } +#Near IR albedo for direct radiation +'Near IR albedo for direct radiation' = { + table2Version = 128 ; + indicatorOfParameter = 17 ; + } +#Near IR albedo for diffuse radiation +'Near IR albedo for diffuse radiation' = { + table2Version = 128 ; + indicatorOfParameter = 18 ; + } +#Clear sky surface UV +'Clear sky surface UV' = { + table2Version = 128 ; + indicatorOfParameter = 19 ; + } +#Clear sky surface photosynthetically active radiation +'Clear sky surface photosynthetically active radiation' = { + table2Version = 128 ; + indicatorOfParameter = 20 ; + } +#Unbalanced component of temperature +'Unbalanced component of temperature' = { + table2Version = 128 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'Unbalanced component of logarithm of surface pressure' = { + table2Version = 128 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence +'Unbalanced component of divergence' = { + table2Version = 128 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + table2Version = 128 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + table2Version = 128 ; + indicatorOfParameter = 25 ; + } +#Lake cover +'Lake cover' = { + table2Version = 128 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover +'Low vegetation cover' = { + table2Version = 128 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover +'High vegetation cover' = { + table2Version = 128 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation +'Type of low vegetation' = { + table2Version = 128 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation +'Type of high vegetation' = { + table2Version = 128 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover +'Sea-ice cover' = { + table2Version = 128 ; + indicatorOfParameter = 31 ; + } +#Snow albedo +'Snow albedo' = { + table2Version = 128 ; + indicatorOfParameter = 32 ; + } +#Snow density +'Snow density' = { + table2Version = 128 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature +'Sea surface temperature' = { + table2Version = 128 ; + indicatorOfParameter = 34 ; + } +#Ice temperature layer 1 +'Ice temperature layer 1' = { + table2Version = 128 ; + indicatorOfParameter = 35 ; + } +#Ice temperature layer 2 +'Ice temperature layer 2' = { + table2Version = 128 ; + indicatorOfParameter = 36 ; + } +#Ice temperature layer 3 +'Ice temperature layer 3' = { + table2Version = 128 ; + indicatorOfParameter = 37 ; + } +#Ice temperature layer 4 +'Ice temperature layer 4' = { + table2Version = 128 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 +'Volumetric soil water layer 1' = { + table2Version = 128 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'Volumetric soil water layer 2' = { + table2Version = 128 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'Volumetric soil water layer 3' = { + table2Version = 128 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'Volumetric soil water layer 4' = { + table2Version = 128 ; + indicatorOfParameter = 42 ; + } +#Soil type +'Soil type' = { + table2Version = 128 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation +'Snow evaporation' = { + table2Version = 128 ; + indicatorOfParameter = 44 ; + } +#Snowmelt +'Snowmelt' = { + table2Version = 128 ; + indicatorOfParameter = 45 ; + } +#Solar duration +'Solar duration' = { + table2Version = 128 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation +'Direct solar radiation' = { + table2Version = 128 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress +'Magnitude of surface stress' = { + table2Version = 128 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust +'10 metre wind gust' = { + table2Version = 128 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction +'Large-scale precipitation fraction' = { + table2Version = 128 ; + indicatorOfParameter = 50 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'Maximum temperature at 2 metres in the last 24 hours' = { + table2Version = 128 ; + indicatorOfParameter = 51 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'Minimum temperature at 2 metres in the last 24 hours' = { + table2Version = 128 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential +'Montgomery potential' = { + table2Version = 128 ; + indicatorOfParameter = 53 ; + } +#Pressure +'Pressure' = { + table2Version = 128 ; + indicatorOfParameter = 54 ; + } +#Mean temperature at 2 metres in the last 24 hours +'Mean temperature at 2 metres in the last 24 hours' = { + table2Version = 128 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours +'Mean 2 metre dewpoint temperature in the last 24 hours' = { + table2Version = 128 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface +'Downward UV radiation at the surface' = { + table2Version = 128 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface +'Photosynthetically active radiation at the surface' = { + table2Version = 128 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy +'Convective available potential energy' = { + table2Version = 128 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity +'Potential vorticity' = { + table2Version = 128 ; + indicatorOfParameter = 60 ; + } +#Observation count +'Observation count' = { + table2Version = 128 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'Start time for skin temperature difference' = { + table2Version = 128 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'Finish time for skin temperature difference' = { + table2Version = 128 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'Skin temperature difference' = { + table2Version = 128 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'Leaf area index, low vegetation' = { + table2Version = 128 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'Leaf area index, high vegetation' = { + table2Version = 128 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'Minimum stomatal resistance, low vegetation' = { + table2Version = 128 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'Minimum stomatal resistance, high vegetation' = { + table2Version = 128 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'Biome cover, low vegetation' = { + table2Version = 128 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'Biome cover, high vegetation' = { + table2Version = 128 ; + indicatorOfParameter = 71 ; + } +#Instantaneous surface solar radiation downwards +'Instantaneous surface solar radiation downwards' = { + table2Version = 128 ; + indicatorOfParameter = 72 ; + } +#Instantaneous surface thermal radiation downwards +'Instantaneous surface thermal radiation downwards' = { + table2Version = 128 ; + indicatorOfParameter = 73 ; + } +#Standard deviation of filtered subgrid orography +'Standard deviation of filtered subgrid orography' = { + table2Version = 128 ; + indicatorOfParameter = 74 ; + } +#Specific rain water content +'Specific rain water content' = { + table2Version = 128 ; + indicatorOfParameter = 75 ; + } +#Specific snow water content +'Specific snow water content' = { + table2Version = 128 ; + indicatorOfParameter = 76 ; + } +#Eta-coordinate vertical velocity +'Eta-coordinate vertical velocity' = { + table2Version = 128 ; + indicatorOfParameter = 77 ; + } +#Total column liquid water +'Total column liquid water' = { + table2Version = 128 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'Total column ice water' = { + table2Version = 128 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'Experimental product' = { + table2Version = 128 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'Maximum temperature at 2 metres in the last 6 hours' = { + table2Version = 128 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'Minimum temperature at 2 metres in the last 6 hours' = { + table2Version = 128 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours +'10 metre wind gust in the last 6 hours' = { + table2Version = 128 ; + indicatorOfParameter = 123 ; + } +#Surface emissivity +'Surface emissivity' = { + table2Version = 128 ; + indicatorOfParameter = 124 ; + } +#Vertically integrated total energy +'Vertically integrated total energy' = { + table2Version = 128 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'Generic parameter for sensitive area prediction' = { + table2Version = 128 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide +'Atmospheric tide' = { + table2Version = 128 ; + indicatorOfParameter = 127 ; + } +#Atmospheric tide +'Atmospheric tide' = { + table2Version = 160 ; + indicatorOfParameter = 127 ; + } +#Budget values +'Budget values' = { + table2Version = 128 ; + indicatorOfParameter = 128 ; + } +#Budget values +'Budget values' = { + table2Version = 160 ; + indicatorOfParameter = 128 ; + } +#Geopotential +'Geopotential' = { + table2Version = 128 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'Geopotential' = { + table2Version = 160 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'Geopotential' = { + table2Version = 170 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'Geopotential' = { + table2Version = 180 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'Geopotential' = { + table2Version = 190 ; + indicatorOfParameter = 129 ; + } +#Temperature +'Temperature' = { + table2Version = 128 ; + indicatorOfParameter = 130 ; + } +#Temperature +'Temperature' = { + table2Version = 160 ; + indicatorOfParameter = 130 ; + } +#Temperature +'Temperature' = { + table2Version = 170 ; + indicatorOfParameter = 130 ; + } +#Temperature +'Temperature' = { + table2Version = 180 ; + indicatorOfParameter = 130 ; + } +#Temperature +'Temperature' = { + table2Version = 190 ; + indicatorOfParameter = 130 ; + } +#U component of wind +'U component of wind' = { + table2Version = 128 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'U component of wind' = { + table2Version = 160 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'U component of wind' = { + table2Version = 170 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'U component of wind' = { + table2Version = 180 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'U component of wind' = { + table2Version = 190 ; + indicatorOfParameter = 131 ; + } +#V component of wind +'V component of wind' = { + table2Version = 128 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'V component of wind' = { + table2Version = 160 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'V component of wind' = { + table2Version = 170 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'V component of wind' = { + table2Version = 180 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'V component of wind' = { + table2Version = 190 ; + indicatorOfParameter = 132 ; + } +#Specific humidity +'Specific humidity' = { + table2Version = 128 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'Specific humidity' = { + table2Version = 160 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'Specific humidity' = { + table2Version = 170 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'Specific humidity' = { + table2Version = 180 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'Specific humidity' = { + table2Version = 190 ; + indicatorOfParameter = 133 ; + } +#Surface pressure +'Surface pressure' = { + table2Version = 128 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'Surface pressure' = { + table2Version = 160 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'Surface pressure' = { + table2Version = 162 ; + indicatorOfParameter = 52 ; + } +#Surface pressure +'Surface pressure' = { + table2Version = 180 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'Surface pressure' = { + table2Version = 190 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity +'Vertical velocity' = { + table2Version = 128 ; + indicatorOfParameter = 135 ; + } +#Vertical velocity +'Vertical velocity' = { + table2Version = 170 ; + indicatorOfParameter = 135 ; + } +#Total column water +'Total column water' = { + table2Version = 128 ; + indicatorOfParameter = 136 ; + } +#Total column water +'Total column water' = { + table2Version = 160 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour +'Total column water vapour' = { + table2Version = 128 ; + indicatorOfParameter = 137 ; + } +#Total column water vapour +'Total column water vapour' = { + table2Version = 180 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) +'Vorticity (relative)' = { + table2Version = 128 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'Vorticity (relative)' = { + table2Version = 160 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'Vorticity (relative)' = { + table2Version = 170 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'Vorticity (relative)' = { + table2Version = 180 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'Vorticity (relative)' = { + table2Version = 190 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 +'Soil temperature level 1' = { + table2Version = 128 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'Soil temperature level 1' = { + table2Version = 160 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'Soil temperature level 1' = { + table2Version = 170 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'Soil temperature level 1' = { + table2Version = 190 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 +'Soil wetness level 1' = { + table2Version = 128 ; + indicatorOfParameter = 140 ; + } +#Soil wetness level 1 +'Soil wetness level 1' = { + table2Version = 170 ; + indicatorOfParameter = 140 ; + } +#Snow depth +'Snow depth' = { + table2Version = 128 ; + indicatorOfParameter = 141 ; + } +#Snow depth +'Snow depth' = { + table2Version = 170 ; + indicatorOfParameter = 141 ; + } +#Snow depth +'Snow depth' = { + table2Version = 180 ; + indicatorOfParameter = 141 ; + } +#Large-scale precipitation +'Large-scale precipitation' = { + table2Version = 128 ; + indicatorOfParameter = 142 ; + } +#Large-scale precipitation +'Large-scale precipitation' = { + table2Version = 170 ; + indicatorOfParameter = 142 ; + } +#Large-scale precipitation +'Large-scale precipitation' = { + table2Version = 180 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'Convective precipitation' = { + table2Version = 128 ; + indicatorOfParameter = 143 ; + } +#Convective precipitation +'Convective precipitation' = { + table2Version = 170 ; + indicatorOfParameter = 143 ; + } +#Convective precipitation +'Convective precipitation' = { + table2Version = 180 ; + indicatorOfParameter = 143 ; + } +#Snowfall +'Snowfall' = { + table2Version = 128 ; + indicatorOfParameter = 144 ; + } +#Snowfall +'Snowfall' = { + table2Version = 180 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation +'Boundary layer dissipation' = { + table2Version = 128 ; + indicatorOfParameter = 145 ; + } +#Boundary layer dissipation +'Boundary layer dissipation' = { + table2Version = 160 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux +'Surface sensible heat flux' = { + table2Version = 128 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'Surface sensible heat flux' = { + table2Version = 160 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'Surface sensible heat flux' = { + table2Version = 170 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'Surface sensible heat flux' = { + table2Version = 180 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'Surface sensible heat flux' = { + table2Version = 190 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux +'Surface latent heat flux' = { + table2Version = 128 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'Surface latent heat flux' = { + table2Version = 160 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'Surface latent heat flux' = { + table2Version = 170 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'Surface latent heat flux' = { + table2Version = 180 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'Surface latent heat flux' = { + table2Version = 190 ; + indicatorOfParameter = 147 ; + } +#Charnock +'Charnock' = { + table2Version = 128 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation +'Surface net radiation' = { + table2Version = 128 ; + indicatorOfParameter = 149 ; + } +#Top net radiation +'Top net radiation' = { + table2Version = 128 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure +'Mean sea level pressure' = { + table2Version = 128 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'Mean sea level pressure' = { + table2Version = 160 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'Mean sea level pressure' = { + table2Version = 170 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'Mean sea level pressure' = { + table2Version = 180 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'Mean sea level pressure' = { + table2Version = 190 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure +'Logarithm of surface pressure' = { + table2Version = 128 ; + indicatorOfParameter = 152 ; + } +#Logarithm of surface pressure +'Logarithm of surface pressure' = { + table2Version = 160 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate +'Short-wave heating rate' = { + table2Version = 128 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate +'Long-wave heating rate' = { + table2Version = 128 ; + indicatorOfParameter = 154 ; + } +#Divergence +'Divergence' = { + table2Version = 128 ; + indicatorOfParameter = 155 ; + } +#Divergence +'Divergence' = { + table2Version = 160 ; + indicatorOfParameter = 155 ; + } +#Divergence +'Divergence' = { + table2Version = 170 ; + indicatorOfParameter = 155 ; + } +#Divergence +'Divergence' = { + table2Version = 180 ; + indicatorOfParameter = 155 ; + } +#Divergence +'Divergence' = { + table2Version = 190 ; + indicatorOfParameter = 155 ; + } +#Geopotential Height +'Geopotential Height' = { + table2Version = 128 ; + indicatorOfParameter = 156 ; + } +#Relative humidity +'Relative humidity' = { + table2Version = 128 ; + indicatorOfParameter = 157 ; + } +#Relative humidity +'Relative humidity' = { + table2Version = 170 ; + indicatorOfParameter = 157 ; + } +#Relative humidity +'Relative humidity' = { + table2Version = 190 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure +'Tendency of surface pressure' = { + table2Version = 128 ; + indicatorOfParameter = 158 ; + } +#Tendency of surface pressure +'Tendency of surface pressure' = { + table2Version = 160 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height +'Boundary layer height' = { + table2Version = 128 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography +'Standard deviation of orography' = { + table2Version = 128 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography +'Anisotropy of sub-gridscale orography' = { + table2Version = 128 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography +'Angle of sub-gridscale orography' = { + table2Version = 128 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography +'Slope of sub-gridscale orography' = { + table2Version = 128 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover +'Total cloud cover' = { + table2Version = 128 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'Total cloud cover' = { + table2Version = 160 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'Total cloud cover' = { + table2Version = 170 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'Total cloud cover' = { + table2Version = 180 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'Total cloud cover' = { + table2Version = 190 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component +'10 metre U wind component' = { + table2Version = 128 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'10 metre U wind component' = { + table2Version = 160 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'10 metre U wind component' = { + table2Version = 180 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'10 metre U wind component' = { + table2Version = 190 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component +'10 metre V wind component' = { + table2Version = 128 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'10 metre V wind component' = { + table2Version = 160 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'10 metre V wind component' = { + table2Version = 180 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'10 metre V wind component' = { + table2Version = 190 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature +'2 metre temperature' = { + table2Version = 128 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'2 metre temperature' = { + table2Version = 160 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'2 metre temperature' = { + table2Version = 180 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'2 metre temperature' = { + table2Version = 190 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature +'2 metre dewpoint temperature' = { + table2Version = 128 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'2 metre dewpoint temperature' = { + table2Version = 160 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'2 metre dewpoint temperature' = { + table2Version = 180 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'2 metre dewpoint temperature' = { + table2Version = 190 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards +'Surface solar radiation downwards' = { + table2Version = 128 ; + indicatorOfParameter = 169 ; + } +#Surface solar radiation downwards +'Surface solar radiation downwards' = { + table2Version = 190 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 +'Soil temperature level 2' = { + table2Version = 128 ; + indicatorOfParameter = 170 ; + } +#Soil temperature level 2 +'Soil temperature level 2' = { + table2Version = 160 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 +'Soil wetness level 2' = { + table2Version = 128 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask +'Land-sea mask' = { + table2Version = 128 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'Land-sea mask' = { + table2Version = 160 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'Land-sea mask' = { + table2Version = 171 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'Land-sea mask' = { + table2Version = 174 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'Land-sea mask' = { + table2Version = 175 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'Land-sea mask' = { + table2Version = 180 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'Land-sea mask' = { + table2Version = 190 ; + indicatorOfParameter = 172 ; + } +#Surface roughness +'Surface roughness' = { + table2Version = 128 ; + indicatorOfParameter = 173 ; + } +#Surface roughness +'Surface roughness' = { + table2Version = 160 ; + indicatorOfParameter = 173 ; + } +#Albedo +'Albedo' = { + table2Version = 128 ; + indicatorOfParameter = 174 ; + } +#Albedo +'Albedo' = { + table2Version = 160 ; + indicatorOfParameter = 174 ; + } +#Albedo +'Albedo' = { + table2Version = 190 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards +'Surface thermal radiation downwards' = { + table2Version = 128 ; + indicatorOfParameter = 175 ; + } +#Surface thermal radiation downwards +'Surface thermal radiation downwards' = { + table2Version = 190 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation +'Surface net solar radiation' = { + table2Version = 128 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'Surface net solar radiation' = { + table2Version = 160 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'Surface net solar radiation' = { + table2Version = 170 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'Surface net solar radiation' = { + table2Version = 190 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation +'Surface net thermal radiation' = { + table2Version = 128 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'Surface net thermal radiation' = { + table2Version = 160 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'Surface net thermal radiation' = { + table2Version = 170 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'Surface net thermal radiation' = { + table2Version = 190 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation +'Top net solar radiation' = { + table2Version = 128 ; + indicatorOfParameter = 178 ; + } +#Top net solar radiation +'Top net solar radiation' = { + table2Version = 160 ; + indicatorOfParameter = 178 ; + } +#Top net solar radiation +'Top net solar radiation' = { + table2Version = 190 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation +'Top net thermal radiation' = { + table2Version = 128 ; + indicatorOfParameter = 179 ; + } +#Top net thermal radiation +'Top net thermal radiation' = { + table2Version = 160 ; + indicatorOfParameter = 179 ; + } +#Top net thermal radiation +'Top net thermal radiation' = { + table2Version = 190 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress +'East-West surface stress' = { + table2Version = 128 ; + indicatorOfParameter = 180 ; + } +#East-West surface stress +'East-West surface stress' = { + table2Version = 170 ; + indicatorOfParameter = 180 ; + } +#East-West surface stress +'East-West surface stress' = { + table2Version = 180 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'North-South surface stress' = { + table2Version = 128 ; + indicatorOfParameter = 181 ; + } +#North-South surface stress +'North-South surface stress' = { + table2Version = 170 ; + indicatorOfParameter = 181 ; + } +#North-South surface stress +'North-South surface stress' = { + table2Version = 180 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'Evaporation' = { + table2Version = 128 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'Evaporation' = { + table2Version = 170 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'Evaporation' = { + table2Version = 180 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'Evaporation' = { + table2Version = 190 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 +'Soil temperature level 3' = { + table2Version = 128 ; + indicatorOfParameter = 183 ; + } +#Soil temperature level 3 +'Soil temperature level 3' = { + table2Version = 160 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 +'Soil wetness level 3' = { + table2Version = 128 ; + indicatorOfParameter = 184 ; + } +#Soil wetness level 3 +'Soil wetness level 3' = { + table2Version = 170 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover +'Convective cloud cover' = { + table2Version = 128 ; + indicatorOfParameter = 185 ; + } +#Convective cloud cover +'Convective cloud cover' = { + table2Version = 160 ; + indicatorOfParameter = 185 ; + } +#Convective cloud cover +'Convective cloud cover' = { + table2Version = 170 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover +'Low cloud cover' = { + table2Version = 128 ; + indicatorOfParameter = 186 ; + } +#Low cloud cover +'Low cloud cover' = { + table2Version = 160 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover +'Medium cloud cover' = { + table2Version = 128 ; + indicatorOfParameter = 187 ; + } +#Medium cloud cover +'Medium cloud cover' = { + table2Version = 160 ; + indicatorOfParameter = 187 ; + } +#High cloud cover +'High cloud cover' = { + table2Version = 128 ; + indicatorOfParameter = 188 ; + } +#High cloud cover +'High cloud cover' = { + table2Version = 160 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration +'Sunshine duration' = { + table2Version = 128 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance +'East-West component of sub-gridscale orographic variance' = { + table2Version = 128 ; + indicatorOfParameter = 190 ; + } +#East-West component of sub-gridscale orographic variance +'East-West component of sub-gridscale orographic variance' = { + table2Version = 160 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance +'North-South component of sub-gridscale orographic variance' = { + table2Version = 128 ; + indicatorOfParameter = 191 ; + } +#North-South component of sub-gridscale orographic variance +'North-South component of sub-gridscale orographic variance' = { + table2Version = 160 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'North-West/South-East component of sub-gridscale orographic variance' = { + table2Version = 128 ; + indicatorOfParameter = 192 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'North-West/South-East component of sub-gridscale orographic variance' = { + table2Version = 160 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'North-East/South-West component of sub-gridscale orographic variance' = { + table2Version = 128 ; + indicatorOfParameter = 193 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'North-East/South-West component of sub-gridscale orographic variance' = { + table2Version = 160 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature +'Brightness temperature' = { + table2Version = 128 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress +'Longitudinal component of gravity wave stress' = { + table2Version = 128 ; + indicatorOfParameter = 195 ; + } +#Longitudinal component of gravity wave stress +'Longitudinal component of gravity wave stress' = { + table2Version = 160 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress +'Meridional component of gravity wave stress' = { + table2Version = 128 ; + indicatorOfParameter = 196 ; + } +#Meridional component of gravity wave stress +'Meridional component of gravity wave stress' = { + table2Version = 160 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation +'Gravity wave dissipation' = { + table2Version = 128 ; + indicatorOfParameter = 197 ; + } +#Gravity wave dissipation +'Gravity wave dissipation' = { + table2Version = 160 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content +'Skin reservoir content' = { + table2Version = 128 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction +'Vegetation fraction' = { + table2Version = 128 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography +'Variance of sub-gridscale orography' = { + table2Version = 128 ; + indicatorOfParameter = 200 ; + } +#Variance of sub-gridscale orography +'Variance of sub-gridscale orography' = { + table2Version = 160 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing +'Maximum temperature at 2 metres since previous post-processing' = { + table2Version = 128 ; + indicatorOfParameter = 201 ; + } +#Maximum temperature at 2 metres since previous post-processing +'Maximum temperature at 2 metres since previous post-processing' = { + table2Version = 170 ; + indicatorOfParameter = 201 ; + } +#Maximum temperature at 2 metres since previous post-processing +'Maximum temperature at 2 metres since previous post-processing' = { + table2Version = 190 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing +'Minimum temperature at 2 metres since previous post-processing' = { + table2Version = 128 ; + indicatorOfParameter = 202 ; + } +#Minimum temperature at 2 metres since previous post-processing +'Minimum temperature at 2 metres since previous post-processing' = { + table2Version = 170 ; + indicatorOfParameter = 202 ; + } +#Minimum temperature at 2 metres since previous post-processing +'Minimum temperature at 2 metres since previous post-processing' = { + table2Version = 190 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio +'Ozone mass mixing ratio' = { + table2Version = 128 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights +'Precipitation analysis weights' = { + table2Version = 128 ; + indicatorOfParameter = 204 ; + } +#Precipitation analysis weights +'Precipitation analysis weights' = { + table2Version = 160 ; + indicatorOfParameter = 204 ; + } +#Runoff +'Runoff' = { + table2Version = 128 ; + indicatorOfParameter = 205 ; + } +#Runoff +'Runoff' = { + table2Version = 180 ; + indicatorOfParameter = 205 ; + } +#Total column ozone +'Total column ozone' = { + table2Version = 128 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed +'10 metre wind speed' = { + table2Version = 128 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky +'Top net solar radiation, clear sky' = { + table2Version = 128 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky +'Top net thermal radiation, clear sky' = { + table2Version = 128 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky +'Surface net solar radiation, clear sky' = { + table2Version = 128 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky +'Surface net thermal radiation, clear sky' = { + table2Version = 128 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation +'TOA incident solar radiation' = { + table2Version = 128 ; + indicatorOfParameter = 212 ; + } +#Vertically integrated moisture divergence +'Vertically integrated moisture divergence' = { + table2Version = 128 ; + indicatorOfParameter = 213 ; + } +#Diabatic heating by radiation +'Diabatic heating by radiation' = { + table2Version = 128 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion +'Diabatic heating by vertical diffusion' = { + table2Version = 128 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection +'Diabatic heating by cumulus convection' = { + table2Version = 128 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation +'Diabatic heating large-scale condensation' = { + table2Version = 128 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind +'Vertical diffusion of zonal wind' = { + table2Version = 128 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind +'Vertical diffusion of meridional wind' = { + table2Version = 128 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency +'East-West gravity wave drag tendency' = { + table2Version = 128 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency +'North-South gravity wave drag tendency' = { + table2Version = 128 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind +'Convective tendency of zonal wind' = { + table2Version = 128 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of zonal wind +'Convective tendency of zonal wind' = { + table2Version = 130 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind +'Convective tendency of meridional wind' = { + table2Version = 128 ; + indicatorOfParameter = 223 ; + } +#Convective tendency of meridional wind +'Convective tendency of meridional wind' = { + table2Version = 130 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity +'Vertical diffusion of humidity' = { + table2Version = 128 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection +'Humidity tendency by cumulus convection' = { + table2Version = 128 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation +'Humidity tendency by large-scale condensation' = { + table2Version = 128 ; + indicatorOfParameter = 226 ; + } +#Tendency due to removal of negative humidity +'Tendency due to removal of negative humidity' = { + table2Version = 128 ; + indicatorOfParameter = 227 ; + } +#Tendency due to removal of negative humidity +'Tendency due to removal of negative humidity' = { + table2Version = 130 ; + indicatorOfParameter = 227 ; + } +#Total precipitation +'Total precipitation' = { + table2Version = 128 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'Total precipitation' = { + table2Version = 160 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'Total precipitation' = { + table2Version = 170 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'Total precipitation' = { + table2Version = 190 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress +'Instantaneous X surface stress' = { + table2Version = 128 ; + indicatorOfParameter = 229 ; + } +#Instantaneous X surface stress +'Instantaneous X surface stress' = { + table2Version = 160 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress +'Instantaneous Y surface stress' = { + table2Version = 128 ; + indicatorOfParameter = 230 ; + } +#Instantaneous Y surface stress +'Instantaneous Y surface stress' = { + table2Version = 160 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface sensible heat flux +'Instantaneous surface sensible heat flux' = { + table2Version = 128 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux +'Instantaneous moisture flux' = { + table2Version = 128 ; + indicatorOfParameter = 232 ; + } +#Instantaneous moisture flux +'Instantaneous moisture flux' = { + table2Version = 160 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity +'Apparent surface humidity' = { + table2Version = 128 ; + indicatorOfParameter = 233 ; + } +#Apparent surface humidity +'Apparent surface humidity' = { + table2Version = 160 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat +'Logarithm of surface roughness length for heat' = { + table2Version = 128 ; + indicatorOfParameter = 234 ; + } +#Logarithm of surface roughness length for heat +'Logarithm of surface roughness length for heat' = { + table2Version = 160 ; + indicatorOfParameter = 234 ; + } +#Skin temperature +'Skin temperature' = { + table2Version = 128 ; + indicatorOfParameter = 235 ; + } +#Skin temperature +'Skin temperature' = { + table2Version = 160 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 +'Soil temperature level 4' = { + table2Version = 128 ; + indicatorOfParameter = 236 ; + } +#Soil temperature level 4 +'Soil temperature level 4' = { + table2Version = 160 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 +'Soil wetness level 4' = { + table2Version = 128 ; + indicatorOfParameter = 237 ; + } +#Soil wetness level 4 +'Soil wetness level 4' = { + table2Version = 160 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer +'Temperature of snow layer' = { + table2Version = 128 ; + indicatorOfParameter = 238 ; + } +#Temperature of snow layer +'Temperature of snow layer' = { + table2Version = 160 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall +'Convective snowfall' = { + table2Version = 128 ; + indicatorOfParameter = 239 ; + } +#Large-scale snowfall +'Large-scale snowfall' = { + table2Version = 128 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency +'Accumulated cloud fraction tendency' = { + table2Version = 128 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency +'Accumulated liquid water tendency' = { + table2Version = 128 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo +'Forecast albedo' = { + table2Version = 128 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness +'Forecast surface roughness' = { + table2Version = 128 ; + indicatorOfParameter = 244 ; + } +#Forecast surface roughness +'Forecast surface roughness' = { + table2Version = 160 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat +'Forecast logarithm of surface roughness for heat' = { + table2Version = 128 ; + indicatorOfParameter = 245 ; + } +#Forecast logarithm of surface roughness for heat +'Forecast logarithm of surface roughness for heat' = { + table2Version = 160 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content +'Specific cloud liquid water content' = { + table2Version = 128 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content +'Specific cloud ice water content' = { + table2Version = 128 ; + indicatorOfParameter = 247 ; + } +#Cloud cover +'Cloud cover' = { + table2Version = 128 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency +'Accumulated ice water tendency' = { + table2Version = 128 ; + indicatorOfParameter = 249 ; + } +#Ice age +'Ice age' = { + table2Version = 128 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature +'Adiabatic tendency of temperature' = { + table2Version = 128 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity +'Adiabatic tendency of humidity' = { + table2Version = 128 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind +'Adiabatic tendency of zonal wind' = { + table2Version = 128 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind +'Adiabatic tendency of meridional wind' = { + table2Version = 128 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 128 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 130 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 132 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 160 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 170 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 180 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 190 ; + indicatorOfParameter = 255 ; + } +#Stream function difference +'Stream function difference' = { + table2Version = 200 ; + indicatorOfParameter = 1 ; + } +#Velocity potential difference +'Velocity potential difference' = { + table2Version = 200 ; + indicatorOfParameter = 2 ; + } +#Potential temperature difference +'Potential temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature difference +'Equivalent potential temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature difference +'Saturated equivalent potential temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind difference +'U component of divergent wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind difference +'V component of divergent wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind difference +'U component of rotational wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind difference +'V component of rotational wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature difference +'Unbalanced component of temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure difference +'Unbalanced component of logarithm of surface pressure difference' = { + table2Version = 200 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence difference +'Unbalanced component of divergence difference' = { + table2Version = 200 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + table2Version = 200 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + table2Version = 200 ; + indicatorOfParameter = 25 ; + } +#Lake cover difference +'Lake cover difference' = { + table2Version = 200 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover difference +'Low vegetation cover difference' = { + table2Version = 200 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover difference +'High vegetation cover difference' = { + table2Version = 200 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation difference +'Type of low vegetation difference' = { + table2Version = 200 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation difference +'Type of high vegetation difference' = { + table2Version = 200 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover difference +'Sea-ice cover difference' = { + table2Version = 200 ; + indicatorOfParameter = 31 ; + } +#Snow albedo difference +'Snow albedo difference' = { + table2Version = 200 ; + indicatorOfParameter = 32 ; + } +#Snow density difference +'Snow density difference' = { + table2Version = 200 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature difference +'Sea surface temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature layer 1 difference +'Ice surface temperature layer 1 difference' = { + table2Version = 200 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature layer 2 difference +'Ice surface temperature layer 2 difference' = { + table2Version = 200 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature layer 3 difference +'Ice surface temperature layer 3 difference' = { + table2Version = 200 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature layer 4 difference +'Ice surface temperature layer 4 difference' = { + table2Version = 200 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 difference +'Volumetric soil water layer 1 difference' = { + table2Version = 200 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 difference +'Volumetric soil water layer 2 difference' = { + table2Version = 200 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 difference +'Volumetric soil water layer 3 difference' = { + table2Version = 200 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 difference +'Volumetric soil water layer 4 difference' = { + table2Version = 200 ; + indicatorOfParameter = 42 ; + } +#Soil type difference +'Soil type difference' = { + table2Version = 200 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation difference +'Snow evaporation difference' = { + table2Version = 200 ; + indicatorOfParameter = 44 ; + } +#Snowmelt difference +'Snowmelt difference' = { + table2Version = 200 ; + indicatorOfParameter = 45 ; + } +#Solar duration difference +'Solar duration difference' = { + table2Version = 200 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation difference +'Direct solar radiation difference' = { + table2Version = 200 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress difference +'Magnitude of surface stress difference' = { + table2Version = 200 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust difference +'10 metre wind gust difference' = { + table2Version = 200 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction difference +'Large-scale precipitation fraction difference' = { + table2Version = 200 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature difference +'Maximum 2 metre temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature difference +'Minimum 2 metre temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential difference +'Montgomery potential difference' = { + table2Version = 200 ; + indicatorOfParameter = 53 ; + } +#Pressure difference +'Pressure difference' = { + table2Version = 200 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours difference +'Mean 2 metre temperature in the last 24 hours difference' = { + table2Version = 200 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours difference +'Mean 2 metre dewpoint temperature in the last 24 hours difference' = { + table2Version = 200 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface difference +'Downward UV radiation at the surface difference' = { + table2Version = 200 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface difference +'Photosynthetically active radiation at the surface difference' = { + table2Version = 200 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy difference +'Convective available potential energy difference' = { + table2Version = 200 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity difference +'Potential vorticity difference' = { + table2Version = 200 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations difference +'Total precipitation from observations difference' = { + table2Version = 200 ; + indicatorOfParameter = 61 ; + } +#Observation count difference +'Observation count difference' = { + table2Version = 200 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'Start time for skin temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'Finish time for skin temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'Skin temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'Leaf area index, low vegetation' = { + table2Version = 200 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'Leaf area index, high vegetation' = { + table2Version = 200 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'Minimum stomatal resistance, low vegetation' = { + table2Version = 200 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'Minimum stomatal resistance, high vegetation' = { + table2Version = 200 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'Biome cover, low vegetation' = { + table2Version = 200 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'Biome cover, high vegetation' = { + table2Version = 200 ; + indicatorOfParameter = 71 ; + } +#Total column liquid water +'Total column liquid water' = { + table2Version = 200 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'Total column ice water' = { + table2Version = 200 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'Experimental product' = { + table2Version = 200 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres difference +'Maximum temperature at 2 metres difference' = { + table2Version = 200 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres difference +'Minimum temperature at 2 metres difference' = { + table2Version = 200 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours difference +'10 metre wind gust in the last 6 hours difference' = { + table2Version = 200 ; + indicatorOfParameter = 123 ; + } +#Vertically integrated total energy +'Vertically integrated total energy' = { + table2Version = 200 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'Generic parameter for sensitive area prediction' = { + table2Version = 200 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide difference +'Atmospheric tide difference' = { + table2Version = 200 ; + indicatorOfParameter = 127 ; + } +#Budget values difference +'Budget values difference' = { + table2Version = 200 ; + indicatorOfParameter = 128 ; + } +#Geopotential difference +'Geopotential difference' = { + table2Version = 200 ; + indicatorOfParameter = 129 ; + } +#Temperature difference +'Temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 130 ; + } +#U component of wind difference +'U component of wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 131 ; + } +#V component of wind difference +'V component of wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 132 ; + } +#Specific humidity difference +'Specific humidity difference' = { + table2Version = 200 ; + indicatorOfParameter = 133 ; + } +#Surface pressure difference +'Surface pressure difference' = { + table2Version = 200 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity (pressure) difference +'Vertical velocity (pressure) difference' = { + table2Version = 200 ; + indicatorOfParameter = 135 ; + } +#Total column water difference +'Total column water difference' = { + table2Version = 200 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour difference +'Total column water vapour difference' = { + table2Version = 200 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) difference +'Vorticity (relative) difference' = { + table2Version = 200 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 difference +'Soil temperature level 1 difference' = { + table2Version = 200 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 difference +'Soil wetness level 1 difference' = { + table2Version = 200 ; + indicatorOfParameter = 140 ; + } +#Snow depth difference +'Snow depth difference' = { + table2Version = 200 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) difference +'Stratiform precipitation (Large-scale precipitation) difference' = { + table2Version = 200 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation difference +'Convective precipitation difference' = { + table2Version = 200 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) difference +'Snowfall (convective + stratiform) difference' = { + table2Version = 200 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation difference +'Boundary layer dissipation difference' = { + table2Version = 200 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux difference +'Surface sensible heat flux difference' = { + table2Version = 200 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux difference +'Surface latent heat flux difference' = { + table2Version = 200 ; + indicatorOfParameter = 147 ; + } +#Charnock difference +'Charnock difference' = { + table2Version = 200 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation difference +'Surface net radiation difference' = { + table2Version = 200 ; + indicatorOfParameter = 149 ; + } +#Top net radiation difference +'Top net radiation difference' = { + table2Version = 200 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure difference +'Mean sea level pressure difference' = { + table2Version = 200 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure difference +'Logarithm of surface pressure difference' = { + table2Version = 200 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate difference +'Short-wave heating rate difference' = { + table2Version = 200 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate difference +'Long-wave heating rate difference' = { + table2Version = 200 ; + indicatorOfParameter = 154 ; + } +#Divergence difference +'Divergence difference' = { + table2Version = 200 ; + indicatorOfParameter = 155 ; + } +#Height difference +'Height difference' = { + table2Version = 200 ; + indicatorOfParameter = 156 ; + } +#Relative humidity difference +'Relative humidity difference' = { + table2Version = 200 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure difference +'Tendency of surface pressure difference' = { + table2Version = 200 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height difference +'Boundary layer height difference' = { + table2Version = 200 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography difference +'Standard deviation of orography difference' = { + table2Version = 200 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography difference +'Anisotropy of sub-gridscale orography difference' = { + table2Version = 200 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography difference +'Angle of sub-gridscale orography difference' = { + table2Version = 200 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography difference +'Slope of sub-gridscale orography difference' = { + table2Version = 200 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover difference +'Total cloud cover difference' = { + table2Version = 200 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component difference +'10 metre U wind component difference' = { + table2Version = 200 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component difference +'10 metre V wind component difference' = { + table2Version = 200 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature difference +'2 metre temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 167 ; + } +#Surface solar radiation downwards difference +'Surface solar radiation downwards difference' = { + table2Version = 200 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 difference +'Soil temperature level 2 difference' = { + table2Version = 200 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 difference +'Soil wetness level 2 difference' = { + table2Version = 200 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask difference +'Land-sea mask difference' = { + table2Version = 200 ; + indicatorOfParameter = 172 ; + } +#Surface roughness difference +'Surface roughness difference' = { + table2Version = 200 ; + indicatorOfParameter = 173 ; + } +#Albedo difference +'Albedo difference' = { + table2Version = 200 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards difference +'Surface thermal radiation downwards difference' = { + table2Version = 200 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation difference +'Surface net solar radiation difference' = { + table2Version = 200 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation difference +'Surface net thermal radiation difference' = { + table2Version = 200 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation difference +'Top net solar radiation difference' = { + table2Version = 200 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation difference +'Top net thermal radiation difference' = { + table2Version = 200 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress difference +'East-West surface stress difference' = { + table2Version = 200 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress difference +'North-South surface stress difference' = { + table2Version = 200 ; + indicatorOfParameter = 181 ; + } +#Evaporation difference +'Evaporation difference' = { + table2Version = 200 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 difference +'Soil temperature level 3 difference' = { + table2Version = 200 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 difference +'Soil wetness level 3 difference' = { + table2Version = 200 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover difference +'Convective cloud cover difference' = { + table2Version = 200 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover difference +'Low cloud cover difference' = { + table2Version = 200 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover difference +'Medium cloud cover difference' = { + table2Version = 200 ; + indicatorOfParameter = 187 ; + } +#High cloud cover difference +'High cloud cover difference' = { + table2Version = 200 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration difference +'Sunshine duration difference' = { + table2Version = 200 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance difference +'East-West component of sub-gridscale orographic variance difference' = { + table2Version = 200 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance difference +'North-South component of sub-gridscale orographic variance difference' = { + table2Version = 200 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance difference +'North-West/South-East component of sub-gridscale orographic variance difference' = { + table2Version = 200 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance difference +'North-East/South-West component of sub-gridscale orographic variance difference' = { + table2Version = 200 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature difference +'Brightness temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress difference +'Longitudinal component of gravity wave stress difference' = { + table2Version = 200 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress difference +'Meridional component of gravity wave stress difference' = { + table2Version = 200 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation difference +'Gravity wave dissipation difference' = { + table2Version = 200 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content difference +'Skin reservoir content difference' = { + table2Version = 200 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction difference +'Vegetation fraction difference' = { + table2Version = 200 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography difference +'Variance of sub-gridscale orography difference' = { + table2Version = 200 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing difference +'Maximum temperature at 2 metres since previous post-processing difference' = { + table2Version = 200 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing difference +'Minimum temperature at 2 metres since previous post-processing difference' = { + table2Version = 200 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio difference +'Ozone mass mixing ratio difference' = { + table2Version = 200 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights difference +'Precipitation analysis weights difference' = { + table2Version = 200 ; + indicatorOfParameter = 204 ; + } +#Runoff difference +'Runoff difference' = { + table2Version = 200 ; + indicatorOfParameter = 205 ; + } +#Total column ozone difference +'Total column ozone difference' = { + table2Version = 200 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed difference +'10 metre wind speed difference' = { + table2Version = 200 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky difference +'Top net solar radiation, clear sky difference' = { + table2Version = 200 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky difference +'Top net thermal radiation, clear sky difference' = { + table2Version = 200 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky difference +'Surface net solar radiation, clear sky difference' = { + table2Version = 200 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky difference +'Surface net thermal radiation, clear sky difference' = { + table2Version = 200 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation difference +'TOA incident solar radiation difference' = { + table2Version = 200 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation difference +'Diabatic heating by radiation difference' = { + table2Version = 200 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion difference +'Diabatic heating by vertical diffusion difference' = { + table2Version = 200 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection difference +'Diabatic heating by cumulus convection difference' = { + table2Version = 200 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation difference +'Diabatic heating large-scale condensation difference' = { + table2Version = 200 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind difference +'Vertical diffusion of zonal wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind difference +'Vertical diffusion of meridional wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency difference +'East-West gravity wave drag tendency difference' = { + table2Version = 200 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency difference +'North-South gravity wave drag tendency difference' = { + table2Version = 200 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind difference +'Convective tendency of zonal wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind difference +'Convective tendency of meridional wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity difference +'Vertical diffusion of humidity difference' = { + table2Version = 200 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection difference +'Humidity tendency by cumulus convection difference' = { + table2Version = 200 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation difference +'Humidity tendency by large-scale condensation difference' = { + table2Version = 200 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity difference +'Change from removal of negative humidity difference' = { + table2Version = 200 ; + indicatorOfParameter = 227 ; + } +#Total precipitation difference +'Total precipitation difference' = { + table2Version = 200 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress difference +'Instantaneous X surface stress difference' = { + table2Version = 200 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress difference +'Instantaneous Y surface stress difference' = { + table2Version = 200 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux difference +'Instantaneous surface heat flux difference' = { + table2Version = 200 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux difference +'Instantaneous moisture flux difference' = { + table2Version = 200 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity difference +'Apparent surface humidity difference' = { + table2Version = 200 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat difference +'Logarithm of surface roughness length for heat difference' = { + table2Version = 200 ; + indicatorOfParameter = 234 ; + } +#Skin temperature difference +'Skin temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 difference +'Soil temperature level 4 difference' = { + table2Version = 200 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 difference +'Soil wetness level 4 difference' = { + table2Version = 200 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer difference +'Temperature of snow layer difference' = { + table2Version = 200 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall difference +'Convective snowfall difference' = { + table2Version = 200 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall difference +'Large scale snowfall difference' = { + table2Version = 200 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency difference +'Accumulated cloud fraction tendency difference' = { + table2Version = 200 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency difference +'Accumulated liquid water tendency difference' = { + table2Version = 200 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo difference +'Forecast albedo difference' = { + table2Version = 200 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness difference +'Forecast surface roughness difference' = { + table2Version = 200 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat difference +'Forecast logarithm of surface roughness for heat difference' = { + table2Version = 200 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content difference +'Specific cloud liquid water content difference' = { + table2Version = 200 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content difference +'Specific cloud ice water content difference' = { + table2Version = 200 ; + indicatorOfParameter = 247 ; + } +#Cloud cover difference +'Cloud cover difference' = { + table2Version = 200 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency difference +'Accumulated ice water tendency difference' = { + table2Version = 200 ; + indicatorOfParameter = 249 ; + } +#Ice age difference +'Ice age difference' = { + table2Version = 200 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature difference +'Adiabatic tendency of temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity difference +'Adiabatic tendency of humidity difference' = { + table2Version = 200 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind difference +'Adiabatic tendency of zonal wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind difference +'Adiabatic tendency of meridional wind difference' = { + table2Version = 200 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 200 ; + indicatorOfParameter = 255 ; + } +#Maximum of significant wave height index +'Maximum of significant wave height index' = { + table2Version = 132 ; + indicatorOfParameter = 216 ; + } +#Normalized energy flux into waves +'Normalized energy flux into waves' = { + table2Version = 140 ; + indicatorOfParameter = 211 ; + } +#Normalized energy flux into ocean +'Normalized energy flux into ocean' = { + table2Version = 140 ; + indicatorOfParameter = 212 ; + } +#Turbulent Langmuir number +'Turbulent Langmuir number' = { + table2Version = 140 ; + indicatorOfParameter = 213 ; + } +#Normalized stress into ocean +'Normalized stress into ocean' = { + table2Version = 140 ; + indicatorOfParameter = 214 ; + } +#Reserved +'Reserved' = { + table2Version = 151 ; + indicatorOfParameter = 193 ; + } +#Vertical integral of divergence of cloud liquid water flux +'Vertical integral of divergence of cloud liquid water flux' = { + table2Version = 162 ; + indicatorOfParameter = 79 ; + } +#Vertical integral of divergence of cloud frozen water flux +'Vertical integral of divergence of cloud frozen water flux' = { + table2Version = 162 ; + indicatorOfParameter = 80 ; + } +#Vertical integral of eastward cloud liquid water flux +'Vertical integral of eastward cloud liquid water flux' = { + table2Version = 162 ; + indicatorOfParameter = 88 ; + } +#Vertical integral of northward cloud liquid water flux +'Vertical integral of northward cloud liquid water flux' = { + table2Version = 162 ; + indicatorOfParameter = 89 ; + } +#Vertical integral of eastward cloud frozen water flux +'Vertical integral of eastward cloud frozen water flux' = { + table2Version = 162 ; + indicatorOfParameter = 90 ; + } +#Vertical integral of northward cloud frozen water flux +'Vertical integral of northward cloud frozen water flux ' = { + table2Version = 162 ; + indicatorOfParameter = 91 ; + } +#Vertical integral of mass tendency +'Vertical integral of mass tendency' = { + table2Version = 162 ; + indicatorOfParameter = 92 ; + } +#U-tendency from dynamics +'U-tendency from dynamics' = { + table2Version = 162 ; + indicatorOfParameter = 114 ; + } +#V-tendency from dynamics +'V-tendency from dynamics' = { + table2Version = 162 ; + indicatorOfParameter = 115 ; + } +#T-tendency from dynamics +'T-tendency from dynamics' = { + table2Version = 162 ; + indicatorOfParameter = 116 ; + } +#q-tendency from dynamics +'q-tendency from dynamics' = { + table2Version = 162 ; + indicatorOfParameter = 117 ; + } +#T-tendency from radiation +'T-tendency from radiation' = { + table2Version = 162 ; + indicatorOfParameter = 118 ; + } +#U-tendency from turbulent diffusion + subgrid orography +'U-tendency from turbulent diffusion + subgrid orography' = { + table2Version = 162 ; + indicatorOfParameter = 119 ; + } +#V-tendency from turbulent diffusion + subgrid orography +'V-tendency from turbulent diffusion + subgrid orography' = { + table2Version = 162 ; + indicatorOfParameter = 120 ; + } +#T-tendency from turbulent diffusion + subgrid orography +'T-tendency from turbulent diffusion + subgrid orography' = { + table2Version = 162 ; + indicatorOfParameter = 121 ; + } +#q-tendency from turbulent diffusion +'q-tendency from turbulent diffusion' = { + table2Version = 162 ; + indicatorOfParameter = 122 ; + } +#U-tendency from subgrid orography +'U-tendency from subgrid orography' = { + table2Version = 162 ; + indicatorOfParameter = 123 ; + } +#V-tendency from subgrid orography +'V-tendency from subgrid orography' = { + table2Version = 162 ; + indicatorOfParameter = 124 ; + } +#T-tendency from subgrid orography +'T-tendency from subgrid orography' = { + table2Version = 162 ; + indicatorOfParameter = 125 ; + } +#U-tendency from convection (deep+shallow) +'U-tendency from convection (deep+shallow)' = { + table2Version = 162 ; + indicatorOfParameter = 126 ; + } +#V-tendency from convection (deep+shallow) +'V-tendency from convection (deep+shallow)' = { + table2Version = 162 ; + indicatorOfParameter = 127 ; + } +#T-tendency from convection (deep+shallow) +'T-tendency from convection (deep+shallow)' = { + table2Version = 162 ; + indicatorOfParameter = 128 ; + } +#q-tendency from convection (deep+shallow) +'q-tendency from convection (deep+shallow)' = { + table2Version = 162 ; + indicatorOfParameter = 129 ; + } +#Liquid Precipitation flux from convection +'Liquid Precipitation flux from convection' = { + table2Version = 162 ; + indicatorOfParameter = 130 ; + } +#Ice Precipitation flux from convection +'Ice Precipitation flux from convection' = { + table2Version = 162 ; + indicatorOfParameter = 131 ; + } +#T-tendency from cloud scheme +'T-tendency from cloud scheme' = { + table2Version = 162 ; + indicatorOfParameter = 132 ; + } +#q-tendency from cloud scheme +'q-tendency from cloud scheme' = { + table2Version = 162 ; + indicatorOfParameter = 133 ; + } +#ql-tendency from cloud scheme +'ql-tendency from cloud scheme' = { + table2Version = 162 ; + indicatorOfParameter = 134 ; + } +#qi-tendency from cloud scheme +'qi-tendency from cloud scheme' = { + table2Version = 162 ; + indicatorOfParameter = 135 ; + } +#Liquid Precip flux from cloud scheme (stratiform) +'Liquid Precip flux from cloud scheme (stratiform)' = { + table2Version = 162 ; + indicatorOfParameter = 136 ; + } +#Ice Precip flux from cloud scheme (stratiform) +'Ice Precip flux from cloud scheme (stratiform)' = { + table2Version = 162 ; + indicatorOfParameter = 137 ; + } +#U-tendency from shallow convection +'U-tendency from shallow convection' = { + table2Version = 162 ; + indicatorOfParameter = 138 ; + } +#V-tendency from shallow convection +'V-tendency from shallow convection' = { + table2Version = 162 ; + indicatorOfParameter = 139 ; + } +#T-tendency from shallow convection +'T-tendency from shallow convection' = { + table2Version = 162 ; + indicatorOfParameter = 140 ; + } +#q-tendency from shallow convection +'q-tendency from shallow convection' = { + table2Version = 162 ; + indicatorOfParameter = 141 ; + } +#100 metre U wind component anomaly +'100 metre U wind component anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 6 ; + } +#100 metre V wind component anomaly +'100 metre V wind component anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 7 ; + } +#Maximum temperature at 2 metres in the last 6 hours anomaly +'Maximum temperature at 2 metres in the last 6 hours anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours anomaly +'Minimum temperature at 2 metres in the last 6 hours anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 122 ; + } +#Clear-sky (II) down surface sw flux +'Clear-sky (II) down surface sw flux' = { + table2Version = 174 ; + indicatorOfParameter = 10 ; + } +#Clear-sky (II) up surface sw flux +'Clear-sky (II) up surface sw flux' = { + table2Version = 174 ; + indicatorOfParameter = 13 ; + } +#Visibility at 1.5m +'Visibility at 1.5m' = { + table2Version = 174 ; + indicatorOfParameter = 25 ; + } +#Minimum temperature at 1.5m since previous post-processing +'Minimum temperature at 1.5m since previous post-processing' = { + table2Version = 174 ; + indicatorOfParameter = 50 ; + } +#Maximum temperature at 1.5m since previous post-processing +'Maximum temperature at 1.5m since previous post-processing' = { + table2Version = 174 ; + indicatorOfParameter = 51 ; + } +#Relative humidity at 1.5m +'Relative humidity at 1.5m' = { + table2Version = 174 ; + indicatorOfParameter = 52 ; + } +#Short wave radiation flux at surface +'Short wave radiation flux at surface' = { + table2Version = 174 ; + indicatorOfParameter = 116 ; + } +#Short wave radiation flux at top of atmosphere +'Short wave radiation flux at top of atmosphere' = { + table2Version = 174 ; + indicatorOfParameter = 117 ; + } +#Total column water vapour +'Total column water vapour' = { + table2Version = 174 ; + indicatorOfParameter = 137 ; + } +#Large scale rainfall rate +'Large scale rainfall rate' = { + table2Version = 174 ; + indicatorOfParameter = 142 ; + } +#Convective rainfall rate +'Convective rainfall rate' = { + table2Version = 174 ; + indicatorOfParameter = 143 ; + } +#Very low cloud amount +'Very low cloud amount' = { + table2Version = 174 ; + indicatorOfParameter = 186 ; + } +#Convective snowfall rate +'Convective snowfall rate' = { + table2Version = 174 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall rate +'Large scale snowfall rate' = { + table2Version = 174 ; + indicatorOfParameter = 240 ; + } +#Total cloud amount - random overlap +'Total cloud amount - random overlap' = { + table2Version = 174 ; + indicatorOfParameter = 248 ; + } +#Total cloud amount in lw radiation +'Total cloud amount in lw radiation' = { + table2Version = 174 ; + indicatorOfParameter = 249 ; + } +#Aerosol type 13 mass mixing ratio +'Aerosol type 13 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 13 ; + } +#Aerosol type 14 mass mixing ratio +'Aerosol type 14 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 14 ; + } +#Aerosol type 15 mass mixing ratio +'Aerosol type 15 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 15 ; + } +#SO4 aerosol precursor mass mixing ratio +'SO4 aerosol precursor mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'Water vapour mixing ratio for hydrophilic aerosols in mode 1' = { + table2Version = 210 ; + indicatorOfParameter = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'Water vapour mixing ratio for hydrophilic aerosols in mode 2' = { + table2Version = 210 ; + indicatorOfParameter = 30 ; + } +#DMS surface emission +'DMS surface emission' = { + table2Version = 210 ; + indicatorOfParameter = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'Water vapour mixing ratio for hydrophilic aerosols in mode 3' = { + table2Version = 210 ; + indicatorOfParameter = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'Water vapour mixing ratio for hydrophilic aerosols in mode 4' = { + table2Version = 210 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'Experimental product' = { + table2Version = 210 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'Experimental product' = { + table2Version = 210 ; + indicatorOfParameter = 56 ; + } +#Mixing ration of organic carbon aerosol, nucleation mode +'Mixing ration of organic carbon aerosol, nucleation mode' = { + table2Version = 210 ; + indicatorOfParameter = 57 ; + } +#Monoterpene precursor mixing ratio +'Monoterpene precursor mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 58 ; + } +#Secondary organic precursor mixing ratio +'Secondary organic precursor mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 59 ; + } +#Particulate matter d < 1 um +'Particulate matter d < 1 um' = { + table2Version = 210 ; + indicatorOfParameter = 72 ; + } +#Particulate matter d < 2.5 um +'Particulate matter d < 2.5 um' = { + table2Version = 210 ; + indicatorOfParameter = 73 ; + } +#Particulate matter d < 10 um +'Particulate matter d < 10 um' = { + table2Version = 210 ; + indicatorOfParameter = 74 ; + } +#Wildfire viewing angle of observation +'Wildfire viewing angle of observation' = { + table2Version = 210 ; + indicatorOfParameter = 79 ; + } +#Wildfire Flux of Ethane (C2H6) +'Wildfire Flux of Ethane (C2H6)' = { + table2Version = 210 ; + indicatorOfParameter = 118 ; + } +#Altitude of emitter +'Altitude of emitter' = { + table2Version = 210 ; + indicatorOfParameter = 119 ; + } +#Altitude of plume top +'Altitude of plume top' = { + table2Version = 210 ; + indicatorOfParameter = 120 ; + } +#UV visible albedo for direct radiation, isotropic component +'UV visible albedo for direct radiation, isotropic component ' = { + table2Version = 210 ; + indicatorOfParameter = 186 ; + } +#UV visible albedo for direct radiation, volumetric component +'UV visible albedo for direct radiation, volumetric component ' = { + table2Version = 210 ; + indicatorOfParameter = 187 ; + } +#UV visible albedo for direct radiation, geometric component +'UV visible albedo for direct radiation, geometric component ' = { + table2Version = 210 ; + indicatorOfParameter = 188 ; + } +#Near IR albedo for direct radiation, isotropic component +'Near IR albedo for direct radiation, isotropic component ' = { + table2Version = 210 ; + indicatorOfParameter = 189 ; + } +#Near IR albedo for direct radiation, volumetric component +'Near IR albedo for direct radiation, volumetric component' = { + table2Version = 210 ; + indicatorOfParameter = 190 ; + } +#Near IR albedo for direct radiation, geometric component +'Near IR albedo for direct radiation, geometric component ' = { + table2Version = 210 ; + indicatorOfParameter = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component +'UV visible albedo for diffuse radiation, isotropic component ' = { + table2Version = 210 ; + indicatorOfParameter = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component +'UV visible albedo for diffuse radiation, volumetric component ' = { + table2Version = 210 ; + indicatorOfParameter = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component +'UV visible albedo for diffuse radiation, geometric component ' = { + table2Version = 210 ; + indicatorOfParameter = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component +'Near IR albedo for diffuse radiation, isotropic component ' = { + table2Version = 210 ; + indicatorOfParameter = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component +'Near IR albedo for diffuse radiation, volumetric component ' = { + table2Version = 210 ; + indicatorOfParameter = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component +'Near IR albedo for diffuse radiation, geometric component ' = { + table2Version = 210 ; + indicatorOfParameter = 197 ; + } +#Total aerosol optical depth at 340 nm +'Total aerosol optical depth at 340 nm' = { + table2Version = 210 ; + indicatorOfParameter = 217 ; + } +#Total aerosol optical depth at 355 nm +'Total aerosol optical depth at 355 nm' = { + table2Version = 210 ; + indicatorOfParameter = 218 ; + } +#Total aerosol optical depth at 380 nm +'Total aerosol optical depth at 380 nm' = { + table2Version = 210 ; + indicatorOfParameter = 219 ; + } +#Total aerosol optical depth at 400 nm +'Total aerosol optical depth at 400 nm' = { + table2Version = 210 ; + indicatorOfParameter = 220 ; + } +#Total aerosol optical depth at 440 nm +'Total aerosol optical depth at 440 nm' = { + table2Version = 210 ; + indicatorOfParameter = 221 ; + } +#Total aerosol optical depth at 500 nm +'Total aerosol optical depth at 500 nm' = { + table2Version = 210 ; + indicatorOfParameter = 222 ; + } +#Total aerosol optical depth at 532 nm +'Total aerosol optical depth at 532 nm' = { + table2Version = 210 ; + indicatorOfParameter = 223 ; + } +#Total aerosol optical depth at 645 nm +'Total aerosol optical depth at 645 nm' = { + table2Version = 210 ; + indicatorOfParameter = 224 ; + } +#Total aerosol optical depth at 800 nm +'Total aerosol optical depth at 800 nm' = { + table2Version = 210 ; + indicatorOfParameter = 225 ; + } +#Total aerosol optical depth at 858 nm +'Total aerosol optical depth at 858 nm' = { + table2Version = 210 ; + indicatorOfParameter = 226 ; + } +#Total aerosol optical depth at 1020 nm +'Total aerosol optical depth at 1020 nm' = { + table2Version = 210 ; + indicatorOfParameter = 227 ; + } +#Total aerosol optical depth at 1064 nm +'Total aerosol optical depth at 1064 nm' = { + table2Version = 210 ; + indicatorOfParameter = 228 ; + } +#Total aerosol optical depth at 1640 nm +'Total aerosol optical depth at 1640 nm' = { + table2Version = 210 ; + indicatorOfParameter = 229 ; + } +#Total aerosol optical depth at 2130 nm +'Total aerosol optical depth at 2130 nm' = { + table2Version = 210 ; + indicatorOfParameter = 230 ; + } +#Wildfire Flux of Toluene (C7H8) +'Wildfire Flux of Toluene (C7H8)' = { + table2Version = 210 ; + indicatorOfParameter = 231 ; + } +#Wildfire Flux of Benzene (C6H6) +'Wildfire Flux of Benzene (C6H6)' = { + table2Version = 210 ; + indicatorOfParameter = 232 ; + } +#Wildfire Flux of Xylene (C8H10) +'Wildfire Flux of Xylene (C8H10)' = { + table2Version = 210 ; + indicatorOfParameter = 233 ; + } +#Wildfire Flux of Butenes (C4H8) +'Wildfire Flux of Butenes (C4H8)' = { + table2Version = 210 ; + indicatorOfParameter = 234 ; + } +#Wildfire Flux of Pentenes (C5H10) +'Wildfire Flux of Pentenes (C5H10)' = { + table2Version = 210 ; + indicatorOfParameter = 235 ; + } +#Wildfire Flux of Hexene (C6H12) +'Wildfire Flux of Hexene (C6H12)' = { + table2Version = 210 ; + indicatorOfParameter = 236 ; + } +#Wildfire Flux of Octene (C8H16) +'Wildfire Flux of Octene (C8H16)' = { + table2Version = 210 ; + indicatorOfParameter = 237 ; + } +#Wildfire Flux of Butanes (C4H10) +'Wildfire Flux of Butanes (C4H10)' = { + table2Version = 210 ; + indicatorOfParameter = 238 ; + } +#Wildfire Flux of Pentanes (C5H12) +'Wildfire Flux of Pentanes (C5H12)' = { + table2Version = 210 ; + indicatorOfParameter = 239 ; + } +#Wildfire Flux of Hexanes (C6H14) +'Wildfire Flux of Hexanes (C6H14)' = { + table2Version = 210 ; + indicatorOfParameter = 240 ; + } +#Wildfire Flux of Heptane (C7H16) +'Wildfire Flux of Heptane (C7H16)' = { + table2Version = 210 ; + indicatorOfParameter = 241 ; + } +#Aerosol type 13 mass mixing ratio +'Aerosol type 13 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 13 ; + } +#Aerosol type 14 mass mixing ratio +'Aerosol type 14 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 14 ; + } +#SO4 aerosol precursor mass mixing ratio +'SO4 aerosol precursor mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'Water vapour mixing ratio for hydrophilic aerosols in mode 1' = { + table2Version = 211 ; + indicatorOfParameter = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'Water vapour mixing ratio for hydrophilic aerosols in mode 2' = { + table2Version = 211 ; + indicatorOfParameter = 30 ; + } +#DMS surface emission +'DMS surface emission' = { + table2Version = 211 ; + indicatorOfParameter = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'Water vapour mixing ratio for hydrophilic aerosols in mode 3' = { + table2Version = 211 ; + indicatorOfParameter = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'Water vapour mixing ratio for hydrophilic aerosols in mode 4' = { + table2Version = 211 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'Experimental product' = { + table2Version = 211 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'Experimental product' = { + table2Version = 211 ; + indicatorOfParameter = 56 ; + } +#Wildfire Flux of Ethane (C2H6) +'Wildfire Flux of Ethane (C2H6)' = { + table2Version = 211 ; + indicatorOfParameter = 118 ; + } +#Altitude of emitter +'Altitude of emitter' = { + table2Version = 211 ; + indicatorOfParameter = 119 ; + } +#Altitude of plume top +'Altitude of plume top' = { + table2Version = 211 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 1 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 2 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 3 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 4 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 5 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 6 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 7 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 8 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 9 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 10 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 11 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 12 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 13 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 14 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 15 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 16 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 17 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 18 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 19 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 20 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 21 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 22 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 23 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 24 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 25 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 26 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 27 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 28 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 29 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 30 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 31 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 32 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 33 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 34 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 35 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 36 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 37 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 38 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 39 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 40 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 41 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 42 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 43 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 44 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 46 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 47 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 48 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 49 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 50 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 51 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 52 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 53 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 54 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 56 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 57 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 58 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 59 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 60 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 61 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 62 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 63 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 64 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 65 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 66 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 67 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 68 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 69 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 70 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 71 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 72 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 73 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 74 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 75 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 76 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 77 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 78 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 121 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 122 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 123 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 124 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 125 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 126 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 127 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 128 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 129 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 130 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 131 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 132 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 133 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 134 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 135 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 136 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 137 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 138 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 139 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 140 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 141 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 142 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 143 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 144 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 145 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 146 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 147 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 148 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 149 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 150 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 151 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 152 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 153 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 154 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 155 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 156 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 157 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 158 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 159 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 160 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 161 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 162 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 163 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 164 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 165 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 166 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 167 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 168 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 169 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 170 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 171 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 172 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 173 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 174 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 175 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 176 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 177 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 178 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 180 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 181 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 182 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 183 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 184 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 185 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 186 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 187 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 188 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 189 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 190 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 191 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 192 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 193 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 194 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 195 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 196 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 197 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 198 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 199 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 200 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 201 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 202 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 203 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 204 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 205 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 206 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 207 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 208 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 209 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 210 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 211 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 212 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 213 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 214 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 215 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 216 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 217 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 218 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 219 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 220 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 221 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 222 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 223 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 224 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 225 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 226 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 227 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 228 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 229 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 230 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 231 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 232 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 233 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 234 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 235 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 236 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 237 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 238 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 239 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 240 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 241 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 242 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 243 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 244 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 245 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 246 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 247 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 248 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 249 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 250 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 251 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 252 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 253 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 254 ; + } +#Experimental product +'Experimental product' = { + table2Version = 212 ; + indicatorOfParameter = 255 ; + } +#Random pattern 1 for sppt +'Random pattern 1 for sppt' = { + table2Version = 213 ; + indicatorOfParameter = 1 ; + } +#Random pattern 2 for sppt +'Random pattern 2 for sppt' = { + table2Version = 213 ; + indicatorOfParameter = 2 ; + } +#Random pattern 3 for sppt +'Random pattern 3 for sppt' = { + table2Version = 213 ; + indicatorOfParameter = 3 ; + } +#Random pattern 4 for sppt +'Random pattern 4 for sppt' = { + table2Version = 213 ; + indicatorOfParameter = 4 ; + } +#Random pattern 5 for sppt +'Random pattern 5 for sppt' = { + table2Version = 213 ; + indicatorOfParameter = 5 ; + } +# Cosine of solar zenith angle +' Cosine of solar zenith angle' = { + table2Version = 214 ; + indicatorOfParameter = 1 ; + } +# UV biologically effective dose +' UV biologically effective dose' = { + table2Version = 214 ; + indicatorOfParameter = 2 ; + } +# UV biologically effective dose clear-sky +' UV biologically effective dose clear-sky' = { + table2Version = 214 ; + indicatorOfParameter = 3 ; + } +# Total surface UV spectral flux (280-285 nm) +' Total surface UV spectral flux (280-285 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 4 ; + } +# Total surface UV spectral flux (285-290 nm) +' Total surface UV spectral flux (285-290 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 5 ; + } +# Total surface UV spectral flux (290-295 nm) +' Total surface UV spectral flux (290-295 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 6 ; + } +# Total surface UV spectral flux (295-300 nm) +' Total surface UV spectral flux (295-300 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 7 ; + } +# Total surface UV spectral flux (300-305 nm) +' Total surface UV spectral flux (300-305 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 8 ; + } +# Total surface UV spectral flux (305-310 nm) +' Total surface UV spectral flux (305-310 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 9 ; + } +# Total surface UV spectral flux (310-315 nm) +' Total surface UV spectral flux (310-315 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 10 ; + } +# Total surface UV spectral flux (315-320 nm) +' Total surface UV spectral flux (315-320 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 11 ; + } +# Total surface UV spectral flux (320-325 nm) +' Total surface UV spectral flux (320-325 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 12 ; + } +# Total surface UV spectral flux (325-330 nm) +' Total surface UV spectral flux (325-330 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 13 ; + } +# Total surface UV spectral flux (330-335 nm) +' Total surface UV spectral flux (330-335 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 14 ; + } +# Total surface UV spectral flux (335-340 nm) +' Total surface UV spectral flux (335-340 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 15 ; + } +# Total surface UV spectral flux (340-345 nm) +' Total surface UV spectral flux (340-345 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 16 ; + } +# Total surface UV spectral flux (345-350 nm) +' Total surface UV spectral flux (345-350 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 17 ; + } +# Total surface UV spectral flux (350-355 nm) +' Total surface UV spectral flux (350-355 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 18 ; + } +# Total surface UV spectral flux (355-360 nm) +' Total surface UV spectral flux (355-360 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 19 ; + } +# Total surface UV spectral flux (360-365 nm) +' Total surface UV spectral flux (360-365 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 20 ; + } +# Total surface UV spectral flux (365-370 nm) +' Total surface UV spectral flux (365-370 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 21 ; + } +# Total surface UV spectral flux (370-375 nm) +' Total surface UV spectral flux (370-375 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 22 ; + } +# Total surface UV spectral flux (375-380 nm) +' Total surface UV spectral flux (375-380 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 23 ; + } +# Total surface UV spectral flux (380-385 nm) +' Total surface UV spectral flux (380-385 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 24 ; + } +# Total surface UV spectral flux (385-390 nm) +' Total surface UV spectral flux (385-390 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 25 ; + } +# Total surface UV spectral flux (390-395 nm) +' Total surface UV spectral flux (390-395 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 26 ; + } +# Total surface UV spectral flux (395-400 nm) +' Total surface UV spectral flux (395-400 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 27 ; + } +# Clear-sky surface UV spectral flux (280-285 nm) +' Clear-sky surface UV spectral flux (280-285 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 28 ; + } +# Clear-sky surface UV spectral flux (285-290 nm) +' Clear-sky surface UV spectral flux (285-290 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 29 ; + } +# Clear-sky surface UV spectral flux (290-295 nm) +' Clear-sky surface UV spectral flux (290-295 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 30 ; + } +# Clear-sky surface UV spectral flux (295-300 nm) +' Clear-sky surface UV spectral flux (295-300 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 31 ; + } +# Clear-sky surface UV spectral flux (300-305 nm) +' Clear-sky surface UV spectral flux (300-305 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 32 ; + } +# Clear-sky surface UV spectral flux (305-310 nm) +' Clear-sky surface UV spectral flux (305-310 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 33 ; + } +# Clear-sky surface UV spectral flux (310-315 nm) +' Clear-sky surface UV spectral flux (310-315 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 34 ; + } +# Clear-sky surface UV spectral flux (315-320 nm) +' Clear-sky surface UV spectral flux (315-320 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 35 ; + } +# Clear-sky surface UV spectral flux (320-325 nm) +' Clear-sky surface UV spectral flux (320-325 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 36 ; + } +# Clear-sky surface UV spectral flux (325-330 nm) +' Clear-sky surface UV spectral flux (325-330 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 37 ; + } +# Clear-sky surface UV spectral flux (330-335 nm) +' Clear-sky surface UV spectral flux (330-335 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 38 ; + } +# Clear-sky surface UV spectral flux (335-340 nm) +' Clear-sky surface UV spectral flux (335-340 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 39 ; + } +# Clear-sky surface UV spectral flux (340-345 nm) +' Clear-sky surface UV spectral flux (340-345 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 40 ; + } +# Clear-sky surface UV spectral flux (345-350 nm) +' Clear-sky surface UV spectral flux (345-350 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 41 ; + } +# Clear-sky surface UV spectral flux (350-355 nm) +' Clear-sky surface UV spectral flux (350-355 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 42 ; + } +# Clear-sky surface UV spectral flux (355-360 nm) +' Clear-sky surface UV spectral flux (355-360 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 43 ; + } +# Clear-sky surface UV spectral flux (360-365 nm) +' Clear-sky surface UV spectral flux (360-365 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 44 ; + } +# Clear-sky surface UV spectral flux (365-370 nm) +' Clear-sky surface UV spectral flux (365-370 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 45 ; + } +# Clear-sky surface UV spectral flux (370-375 nm) +' Clear-sky surface UV spectral flux (370-375 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 46 ; + } +# Clear-sky surface UV spectral flux (375-380 nm) +' Clear-sky surface UV spectral flux (375-380 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 47 ; + } +# Clear-sky surface UV spectral flux (380-385 nm) +' Clear-sky surface UV spectral flux (380-385 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 48 ; + } +# Clear-sky surface UV spectral flux (385-390 nm) +' Clear-sky surface UV spectral flux (385-390 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 49 ; + } +# Clear-sky surface UV spectral flux (390-395 nm) +' Clear-sky surface UV spectral flux (390-395 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 50 ; + } +# Clear-sky surface UV spectral flux (395-400 nm) +' Clear-sky surface UV spectral flux (395-400 nm)' = { + table2Version = 214 ; + indicatorOfParameter = 51 ; + } +# Profile of optical thickness at 340 nm +' Profile of optical thickness at 340 nm' = { + table2Version = 214 ; + indicatorOfParameter = 52 ; + } +# Source/gain of sea salt aerosol (0.03 - 0.5 um) +' Source/gain of sea salt aerosol (0.03 - 0.5 um)' = { + table2Version = 215 ; + indicatorOfParameter = 1 ; + } +# Source/gain of sea salt aerosol (0.5 - 5 um) +' Source/gain of sea salt aerosol (0.5 - 5 um)' = { + table2Version = 215 ; + indicatorOfParameter = 2 ; + } +# Source/gain of sea salt aerosol (5 - 20 um) +' Source/gain of sea salt aerosol (5 - 20 um)' = { + table2Version = 215 ; + indicatorOfParameter = 3 ; + } +# Dry deposition of sea salt aerosol (0.03 - 0.5 um) +' Dry deposition of sea salt aerosol (0.03 - 0.5 um)' = { + table2Version = 215 ; + indicatorOfParameter = 4 ; + } +# Dry deposition of sea salt aerosol (0.5 - 5 um) +' Dry deposition of sea salt aerosol (0.5 - 5 um)' = { + table2Version = 215 ; + indicatorOfParameter = 5 ; + } +# Dry deposition of sea salt aerosol (5 - 20 um) +' Dry deposition of sea salt aerosol (5 - 20 um)' = { + table2Version = 215 ; + indicatorOfParameter = 6 ; + } +# Sedimentation of sea salt aerosol (0.03 - 0.5 um) +' Sedimentation of sea salt aerosol (0.03 - 0.5 um)' = { + table2Version = 215 ; + indicatorOfParameter = 7 ; + } +# Sedimentation of sea salt aerosol (0.5 - 5 um) +' Sedimentation of sea salt aerosol (0.5 - 5 um)' = { + table2Version = 215 ; + indicatorOfParameter = 8 ; + } +# Sedimentation of sea salt aerosol (5 - 20 um) +' Sedimentation of sea salt aerosol (5 - 20 um)' = { + table2Version = 215 ; + indicatorOfParameter = 9 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation +' Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 10 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation +' Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 11 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation +' Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 12 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation +' Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 13 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation +' Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 14 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation +' Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 15 ; + } +# Negative fixer of sea salt aerosol (0.03 - 0.5 um) +' Negative fixer of sea salt aerosol (0.03 - 0.5 um)' = { + table2Version = 215 ; + indicatorOfParameter = 16 ; + } +# Negative fixer of sea salt aerosol (0.5 - 5 um) +' Negative fixer of sea salt aerosol (0.5 - 5 um)' = { + table2Version = 215 ; + indicatorOfParameter = 17 ; + } +# Negative fixer of sea salt aerosol (5 - 20 um) +' Negative fixer of sea salt aerosol (5 - 20 um)' = { + table2Version = 215 ; + indicatorOfParameter = 18 ; + } +# Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um) +' Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um)' = { + table2Version = 215 ; + indicatorOfParameter = 19 ; + } +# Vertically integrated mass of sea salt aerosol (0.5 - 5 um) +' Vertically integrated mass of sea salt aerosol (0.5 - 5 um)' = { + table2Version = 215 ; + indicatorOfParameter = 20 ; + } +# Vertically integrated mass of sea salt aerosol (5 - 20 um) +' Vertically integrated mass of sea salt aerosol (5 - 20 um)' = { + table2Version = 215 ; + indicatorOfParameter = 21 ; + } +# Sea salt aerosol (0.03 - 0.5 um) optical depth +' Sea salt aerosol (0.03 - 0.5 um) optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 22 ; + } +# Sea salt aerosol (0.5 - 5 um) optical depth +' Sea salt aerosol (0.5 - 5 um) optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 23 ; + } +# Sea salt aerosol (5 - 20 um) optical depth +' Sea salt aerosol (5 - 20 um) optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 24 ; + } +# Source/gain of dust aerosol (0.03 - 0.55 um) +' Source/gain of dust aerosol (0.03 - 0.55 um)' = { + table2Version = 215 ; + indicatorOfParameter = 25 ; + } +# Source/gain of dust aerosol (0.55 - 9 um) +' Source/gain of dust aerosol (0.55 - 9 um)' = { + table2Version = 215 ; + indicatorOfParameter = 26 ; + } +# Source/gain of dust aerosol (9 - 20 um) +' Source/gain of dust aerosol (9 - 20 um)' = { + table2Version = 215 ; + indicatorOfParameter = 27 ; + } +# Dry deposition of dust aerosol (0.03 - 0.55 um) +' Dry deposition of dust aerosol (0.03 - 0.55 um)' = { + table2Version = 215 ; + indicatorOfParameter = 28 ; + } +# Dry deposition of dust aerosol (0.55 - 9 um) +' Dry deposition of dust aerosol (0.55 - 9 um)' = { + table2Version = 215 ; + indicatorOfParameter = 29 ; + } +# Dry deposition of dust aerosol (9 - 20 um) +' Dry deposition of dust aerosol (9 - 20 um)' = { + table2Version = 215 ; + indicatorOfParameter = 30 ; + } +# Sedimentation of dust aerosol (0.03 - 0.55 um) +' Sedimentation of dust aerosol (0.03 - 0.55 um)' = { + table2Version = 215 ; + indicatorOfParameter = 31 ; + } +# Sedimentation of dust aerosol (0.55 - 9 um) +' Sedimentation of dust aerosol (0.55 - 9 um)' = { + table2Version = 215 ; + indicatorOfParameter = 32 ; + } +# Sedimentation of dust aerosol (9 - 20 um) +' Sedimentation of dust aerosol (9 - 20 um)' = { + table2Version = 215 ; + indicatorOfParameter = 33 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation +' Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 34 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation +' Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 35 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation +' Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 36 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation +' Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 37 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation +' Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 38 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by convective precipitation +' Wet deposition of dust aerosol (9 - 20 um) by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 39 ; + } +# Negative fixer of dust aerosol (0.03 - 0.55 um) +' Negative fixer of dust aerosol (0.03 - 0.55 um)' = { + table2Version = 215 ; + indicatorOfParameter = 40 ; + } +# Negative fixer of dust aerosol (0.55 - 9 um) +' Negative fixer of dust aerosol (0.55 - 9 um)' = { + table2Version = 215 ; + indicatorOfParameter = 41 ; + } +# Negative fixer of dust aerosol (9 - 20 um) +' Negative fixer of dust aerosol (9 - 20 um)' = { + table2Version = 215 ; + indicatorOfParameter = 42 ; + } +# Vertically integrated mass of dust aerosol (0.03 - 0.55 um) +' Vertically integrated mass of dust aerosol (0.03 - 0.55 um)' = { + table2Version = 215 ; + indicatorOfParameter = 43 ; + } +# Vertically integrated mass of dust aerosol (0.55 - 9 um) +' Vertically integrated mass of dust aerosol (0.55 - 9 um)' = { + table2Version = 215 ; + indicatorOfParameter = 44 ; + } +# Vertically integrated mass of dust aerosol (9 - 20 um) +' Vertically integrated mass of dust aerosol (9 - 20 um)' = { + table2Version = 215 ; + indicatorOfParameter = 45 ; + } +# Dust aerosol (0.03 - 0.55 um) optical depth +' Dust aerosol (0.03 - 0.55 um) optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 46 ; + } +# Dust aerosol (0.55 - 9 um) optical depth +' Dust aerosol (0.55 - 9 um) optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 47 ; + } +# Dust aerosol (9 - 20 um) optical depth +' Dust aerosol (9 - 20 um) optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 48 ; + } +# Source/gain of hydrophobic organic matter aerosol +' Source/gain of hydrophobic organic matter aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 49 ; + } +# Source/gain of hydrophilic organic matter aerosol +' Source/gain of hydrophilic organic matter aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 50 ; + } +# Dry deposition of hydrophobic organic matter aerosol +' Dry deposition of hydrophobic organic matter aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 51 ; + } +# Dry deposition of hydrophilic organic matter aerosol +' Dry deposition of hydrophilic organic matter aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 52 ; + } +# Sedimentation of hydrophobic organic matter aerosol +' Sedimentation of hydrophobic organic matter aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 53 ; + } +# Sedimentation of hydrophilic organic matter aerosol +' Sedimentation of hydrophilic organic matter aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 54 ; + } +# Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation +' Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 55 ; + } +# Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation +' Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 56 ; + } +# Wet deposition of hydrophobic organic matter aerosol by convective precipitation +' Wet deposition of hydrophobic organic matter aerosol by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 57 ; + } +# Wet deposition of hydrophilic organic matter aerosol by convective precipitation +' Wet deposition of hydrophilic organic matter aerosol by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 58 ; + } +# Negative fixer of hydrophobic organic matter aerosol +' Negative fixer of hydrophobic organic matter aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 59 ; + } +# Negative fixer of hydrophilic organic matter aerosol +' Negative fixer of hydrophilic organic matter aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 60 ; + } +# Vertically integrated mass of hydrophobic organic matter aerosol +' Vertically integrated mass of hydrophobic organic matter aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 61 ; + } +# Vertically integrated mass of hydrophilic organic matter aerosol +' Vertically integrated mass of hydrophilic organic matter aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 62 ; + } +# Hydrophobic organic matter aerosol optical depth +' Hydrophobic organic matter aerosol optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 63 ; + } +# Hydrophilic organic matter aerosol optical depth +' Hydrophilic organic matter aerosol optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 64 ; + } +# Source/gain of hydrophobic black carbon aerosol +' Source/gain of hydrophobic black carbon aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 65 ; + } +# Source/gain of hydrophilic black carbon aerosol +' Source/gain of hydrophilic black carbon aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 66 ; + } +# Dry deposition of hydrophobic black carbon aerosol +' Dry deposition of hydrophobic black carbon aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 67 ; + } +# Dry deposition of hydrophilic black carbon aerosol +' Dry deposition of hydrophilic black carbon aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 68 ; + } +# Sedimentation of hydrophobic black carbon aerosol +' Sedimentation of hydrophobic black carbon aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 69 ; + } +# Sedimentation of hydrophilic black carbon aerosol +' Sedimentation of hydrophilic black carbon aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 70 ; + } +# Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation +' Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 71 ; + } +# Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation +' Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 72 ; + } +# Wet deposition of hydrophobic black carbon aerosol by convective precipitation +' Wet deposition of hydrophobic black carbon aerosol by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 73 ; + } +# Wet deposition of hydrophilic black carbon aerosol by convective precipitation +' Wet deposition of hydrophilic black carbon aerosol by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 74 ; + } +# Negative fixer of hydrophobic black carbon aerosol +' Negative fixer of hydrophobic black carbon aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 75 ; + } +# Negative fixer of hydrophilic black carbon aerosol +' Negative fixer of hydrophilic black carbon aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 76 ; + } +# Vertically integrated mass of hydrophobic black carbon aerosol +' Vertically integrated mass of hydrophobic black carbon aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 77 ; + } +# Vertically integrated mass of hydrophilic black carbon aerosol +' Vertically integrated mass of hydrophilic black carbon aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 78 ; + } +# Hydrophobic black carbon aerosol optical depth +' Hydrophobic black carbon aerosol optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 79 ; + } +# Hydrophilic black carbon aerosol optical depth +' Hydrophilic black carbon aerosol optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 80 ; + } +# Source/gain of sulphate aerosol +' Source/gain of sulphate aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 81 ; + } +# Dry deposition of sulphate aerosol +' Dry deposition of sulphate aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 82 ; + } +# Sedimentation of sulphate aerosol +' Sedimentation of sulphate aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 83 ; + } +# Wet deposition of sulphate aerosol by large-scale precipitation +' Wet deposition of sulphate aerosol by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 84 ; + } +# Wet deposition of sulphate aerosol by convective precipitation +' Wet deposition of sulphate aerosol by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 85 ; + } +# Negative fixer of sulphate aerosol +' Negative fixer of sulphate aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 86 ; + } +# Vertically integrated mass of sulphate aerosol +' Vertically integrated mass of sulphate aerosol' = { + table2Version = 215 ; + indicatorOfParameter = 87 ; + } +# Sulphate aerosol optical depth +' Sulphate aerosol optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 88 ; + } +#Accumulated total aerosol optical depth at 550 nm +'Accumulated total aerosol optical depth at 550 nm' = { + table2Version = 215 ; + indicatorOfParameter = 89 ; + } +#Effective (snow effect included) UV visible albedo for direct radiation +'Effective (snow effect included) UV visible albedo for direct radiation' = { + table2Version = 215 ; + indicatorOfParameter = 90 ; + } +#10 metre wind speed dust emission potential +'10 metre wind speed dust emission potential' = { + table2Version = 215 ; + indicatorOfParameter = 91 ; + } +#10 metre wind gustiness dust emission potential +'10 metre wind gustiness dust emission potential' = { + table2Version = 215 ; + indicatorOfParameter = 92 ; + } +#Profile of total aerosol optical depth at 532 nm +'Profile of total aerosol optical depth at 532 nm' = { + table2Version = 215 ; + indicatorOfParameter = 93 ; + } +#Profile of natural (sea-salt and dust) aerosol optical depth at 532 nm +'Profile of natural (sea-salt and dust) aerosol optical depth at 532 nm' = { + table2Version = 215 ; + indicatorOfParameter = 94 ; + } +#Profile of antropogenic (black carbon, organic matter, sulphate) aerosol optical depth at 532 nm +'Profile of antropogenic (black carbon, organic matter, sulphate) aerosol optical depth at 532 nm' = { + table2Version = 215 ; + indicatorOfParameter = 95 ; + } +#Total absorption aerosol optical depth at 340 nm +'Total absorption aerosol optical depth at 340 nm' = { + table2Version = 215 ; + indicatorOfParameter = 96 ; + } +#Total absorption aerosol optical depth at 355 nm +'Total absorption aerosol optical depth at 355 nm' = { + table2Version = 215 ; + indicatorOfParameter = 97 ; + } +#Total absorption aerosol optical depth at 380 nm +'Total absorption aerosol optical depth at 380 nm' = { + table2Version = 215 ; + indicatorOfParameter = 98 ; + } +#Total absorption aerosol optical depth at 400 nm +'Total absorption aerosol optical depth at 400 nm' = { + table2Version = 215 ; + indicatorOfParameter = 99 ; + } +#Total absorption aerosol optical depth at 440 nm +'Total absorption aerosol optical depth at 440 nm' = { + table2Version = 215 ; + indicatorOfParameter = 100 ; + } +#Total absorption aerosol optical depth at 469 nm +'Total absorption aerosol optical depth at 469 nm' = { + table2Version = 215 ; + indicatorOfParameter = 101 ; + } +#Total absorption aerosol optical depth at 500 nm +'Total absorption aerosol optical depth at 500 nm' = { + table2Version = 215 ; + indicatorOfParameter = 102 ; + } +#Total absorption aerosol optical depth at 532 nm +'Total absorption aerosol optical depth at 532 nm' = { + table2Version = 215 ; + indicatorOfParameter = 103 ; + } +#Total absorption aerosol optical depth at 550 nm +'Total absorption aerosol optical depth at 550 nm' = { + table2Version = 215 ; + indicatorOfParameter = 104 ; + } +#Total absorption aerosol optical depth at 645 nm +'Total absorption aerosol optical depth at 645 nm' = { + table2Version = 215 ; + indicatorOfParameter = 105 ; + } +#Total absorption aerosol optical depth at 670 nm +'Total absorption aerosol optical depth at 670 nm' = { + table2Version = 215 ; + indicatorOfParameter = 106 ; + } +#Total absorption aerosol optical depth at 800 nm +'Total absorption aerosol optical depth at 800 nm' = { + table2Version = 215 ; + indicatorOfParameter = 107 ; + } +#Total absorption aerosol optical depth at 858 nm +'Total absorption aerosol optical depth at 858 nm' = { + table2Version = 215 ; + indicatorOfParameter = 108 ; + } +#Total absorption aerosol optical depth at 865 nm +'Total absorption aerosol optical depth at 865 nm' = { + table2Version = 215 ; + indicatorOfParameter = 109 ; + } +#Total absorption aerosol optical depth at 1020 nm +'Total absorption aerosol optical depth at 1020 nm' = { + table2Version = 215 ; + indicatorOfParameter = 110 ; + } +#Total absorption aerosol optical depth at 1064 nm +'Total absorption aerosol optical depth at 1064 nm' = { + table2Version = 215 ; + indicatorOfParameter = 111 ; + } +#Total absorption aerosol optical depth at 1240 nm +'Total absorption aerosol optical depth at 1240 nm' = { + table2Version = 215 ; + indicatorOfParameter = 112 ; + } +#Total absorption aerosol optical depth at 1640 nm +'Total absorption aerosol optical depth at 1640 nm' = { + table2Version = 215 ; + indicatorOfParameter = 113 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm' = { + table2Version = 215 ; + indicatorOfParameter = 114 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm' = { + table2Version = 215 ; + indicatorOfParameter = 115 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm' = { + table2Version = 215 ; + indicatorOfParameter = 116 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm' = { + table2Version = 215 ; + indicatorOfParameter = 117 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm' = { + table2Version = 215 ; + indicatorOfParameter = 118 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm' = { + table2Version = 215 ; + indicatorOfParameter = 119 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm' = { + table2Version = 215 ; + indicatorOfParameter = 120 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm' = { + table2Version = 215 ; + indicatorOfParameter = 121 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm' = { + table2Version = 215 ; + indicatorOfParameter = 122 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm' = { + table2Version = 215 ; + indicatorOfParameter = 123 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm' = { + table2Version = 215 ; + indicatorOfParameter = 124 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm' = { + table2Version = 215 ; + indicatorOfParameter = 125 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm' = { + table2Version = 215 ; + indicatorOfParameter = 126 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm' = { + table2Version = 215 ; + indicatorOfParameter = 127 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm' = { + table2Version = 215 ; + indicatorOfParameter = 128 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm' = { + table2Version = 215 ; + indicatorOfParameter = 129 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm' = { + table2Version = 215 ; + indicatorOfParameter = 130 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm' = { + table2Version = 215 ; + indicatorOfParameter = 131 ; + } +#Single scattering albedo at 340 nm +'Single scattering albedo at 340 nm' = { + table2Version = 215 ; + indicatorOfParameter = 132 ; + } +#Single scattering albedo at 355 nm +'Single scattering albedo at 355 nm' = { + table2Version = 215 ; + indicatorOfParameter = 133 ; + } +#Single scattering albedo at 380 nm +'Single scattering albedo at 380 nm' = { + table2Version = 215 ; + indicatorOfParameter = 134 ; + } +#Single scattering albedo at 400 nm +'Single scattering albedo at 400 nm' = { + table2Version = 215 ; + indicatorOfParameter = 135 ; + } +#Single scattering albedo at 440 nm +'Single scattering albedo at 440 nm' = { + table2Version = 215 ; + indicatorOfParameter = 136 ; + } +#Single scattering albedo at 469 nm +'Single scattering albedo at 469 nm' = { + table2Version = 215 ; + indicatorOfParameter = 137 ; + } +#Single scattering albedo at 500 nm +'Single scattering albedo at 500 nm' = { + table2Version = 215 ; + indicatorOfParameter = 138 ; + } +#Single scattering albedo at 532 nm +'Single scattering albedo at 532 nm' = { + table2Version = 215 ; + indicatorOfParameter = 139 ; + } +#Single scattering albedo at 550 nm +'Single scattering albedo at 550 nm' = { + table2Version = 215 ; + indicatorOfParameter = 140 ; + } +#Single scattering albedo at 645 nm +'Single scattering albedo at 645 nm' = { + table2Version = 215 ; + indicatorOfParameter = 141 ; + } +#Single scattering albedo at 670 nm +'Single scattering albedo at 670 nm' = { + table2Version = 215 ; + indicatorOfParameter = 142 ; + } +#Single scattering albedo at 800 nm +'Single scattering albedo at 800 nm' = { + table2Version = 215 ; + indicatorOfParameter = 143 ; + } +#Single scattering albedo at 858 nm +'Single scattering albedo at 858 nm' = { + table2Version = 215 ; + indicatorOfParameter = 144 ; + } +#Single scattering albedo at 865 nm +'Single scattering albedo at 865 nm' = { + table2Version = 215 ; + indicatorOfParameter = 145 ; + } +#Single scattering albedo at 1020 nm +'Single scattering albedo at 1020 nm' = { + table2Version = 215 ; + indicatorOfParameter = 146 ; + } +#Single scattering albedo at 1064 nm +'Single scattering albedo at 1064 nm' = { + table2Version = 215 ; + indicatorOfParameter = 147 ; + } +#Single scattering albedo at 1240 nm +'Single scattering albedo at 1240 nm' = { + table2Version = 215 ; + indicatorOfParameter = 148 ; + } +#Single scattering albedo at 1640 nm +'Single scattering albedo at 1640 nm' = { + table2Version = 215 ; + indicatorOfParameter = 149 ; + } +#Assimetry factor at 340 nm +'Assimetry factor at 340 nm' = { + table2Version = 215 ; + indicatorOfParameter = 150 ; + } +#Assimetry factor at 355 nm +'Assimetry factor at 355 nm' = { + table2Version = 215 ; + indicatorOfParameter = 151 ; + } +#Assimetry factor at 380 nm +'Assimetry factor at 380 nm' = { + table2Version = 215 ; + indicatorOfParameter = 152 ; + } +#Assimetry factor at 400 nm +'Assimetry factor at 400 nm' = { + table2Version = 215 ; + indicatorOfParameter = 153 ; + } +#Assimetry factor at 440 nm +'Assimetry factor at 440 nm' = { + table2Version = 215 ; + indicatorOfParameter = 154 ; + } +#Assimetry factor at 469 nm +'Assimetry factor at 469 nm' = { + table2Version = 215 ; + indicatorOfParameter = 155 ; + } +#Assimetry factor at 500 nm +'Assimetry factor at 500 nm' = { + table2Version = 215 ; + indicatorOfParameter = 156 ; + } +#Assimetry factor at 532 nm +'Assimetry factor at 532 nm' = { + table2Version = 215 ; + indicatorOfParameter = 157 ; + } +#Assimetry factor at 550 nm +'Assimetry factor at 550 nm' = { + table2Version = 215 ; + indicatorOfParameter = 158 ; + } +#Assimetry factor at 645 nm +'Assimetry factor at 645 nm' = { + table2Version = 215 ; + indicatorOfParameter = 159 ; + } +#Assimetry factor at 670 nm +'Assimetry factor at 670 nm' = { + table2Version = 215 ; + indicatorOfParameter = 160 ; + } +#Assimetry factor at 800 nm +'Assimetry factor at 800 nm' = { + table2Version = 215 ; + indicatorOfParameter = 161 ; + } +#Assimetry factor at 858 nm +'Assimetry factor at 858 nm' = { + table2Version = 215 ; + indicatorOfParameter = 162 ; + } +#Assimetry factor at 865 nm +'Assimetry factor at 865 nm' = { + table2Version = 215 ; + indicatorOfParameter = 163 ; + } +#Assimetry factor at 1020 nm +'Assimetry factor at 1020 nm' = { + table2Version = 215 ; + indicatorOfParameter = 164 ; + } +#Assimetry factor at 1064 nm +'Assimetry factor at 1064 nm' = { + table2Version = 215 ; + indicatorOfParameter = 165 ; + } +#Assimetry factor at 1240 nm +'Assimetry factor at 1240 nm' = { + table2Version = 215 ; + indicatorOfParameter = 166 ; + } +#Assimetry factor at 1640 nm +'Assimetry factor at 1640 nm' = { + table2Version = 215 ; + indicatorOfParameter = 167 ; + } +#Source/gain of sulphur dioxide +'Source/gain of sulphur dioxide' = { + table2Version = 215 ; + indicatorOfParameter = 168 ; + } +#Dry deposition of sulphur dioxide +'Dry deposition of sulphur dioxide' = { + table2Version = 215 ; + indicatorOfParameter = 169 ; + } +#Sedimentation of sulphur dioxide +'Sedimentation of sulphur dioxide' = { + table2Version = 215 ; + indicatorOfParameter = 170 ; + } +#Wet deposition of sulphur dioxide by large-scale precipitation +'Wet deposition of sulphur dioxide by large-scale precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 171 ; + } +#Wet deposition of sulphur dioxide by convective precipitation +'Wet deposition of sulphur dioxide by convective precipitation' = { + table2Version = 215 ; + indicatorOfParameter = 172 ; + } +#Negative fixer of sulphur dioxide +'Negative fixer of sulphur dioxide' = { + table2Version = 215 ; + indicatorOfParameter = 173 ; + } +#Vertically integrated mass of sulphur dioxide +'Vertically integrated mass of sulphur dioxide' = { + table2Version = 215 ; + indicatorOfParameter = 174 ; + } +#Sulphur dioxide optical depth +'Sulphur dioxide optical depth' = { + table2Version = 215 ; + indicatorOfParameter = 175 ; + } +#Total absorption aerosol optical depth at 2130 nm +'Total absorption aerosol optical depth at 2130 nm' = { + table2Version = 215 ; + indicatorOfParameter = 176 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm' = { + table2Version = 215 ; + indicatorOfParameter = 177 ; + } +#Single scattering albedo at 2130 nm +'Single scattering albedo at 2130 nm' = { + table2Version = 215 ; + indicatorOfParameter = 178 ; + } +#Assimetry factor at 2130 nm +'Assimetry factor at 2130 nm' = { + table2Version = 215 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 1 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 2 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 3 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 4 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 5 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 6 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 7 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 8 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 9 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 10 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 11 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 12 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 13 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 14 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 15 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 16 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 17 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 18 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 19 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 20 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 21 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 22 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 23 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 24 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 25 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 26 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 27 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 28 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 29 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 30 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 31 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 32 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 33 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 34 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 35 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 36 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 37 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 38 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 39 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 40 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 41 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 42 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 43 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 44 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 46 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 47 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 48 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 49 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 50 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 51 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 52 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 53 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 54 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 56 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 57 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 58 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 59 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 60 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 61 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 62 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 63 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 64 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 65 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 66 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 67 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 68 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 69 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 70 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 71 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 72 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 73 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 74 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 75 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 76 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 77 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 78 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 121 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 122 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 123 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 124 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 125 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 126 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 127 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 128 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 129 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 130 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 131 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 132 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 133 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 134 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 135 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 136 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 137 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 138 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 139 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 140 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 141 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 142 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 143 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 144 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 145 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 146 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 147 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 148 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 149 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 150 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 151 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 152 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 153 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 154 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 155 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 156 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 157 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 158 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 159 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 160 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 161 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 162 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 163 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 164 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 165 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 166 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 167 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 168 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 169 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 170 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 171 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 172 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 173 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 174 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 175 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 176 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 177 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 178 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 180 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 181 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 182 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 183 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 184 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 185 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 186 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 187 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 188 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 189 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 190 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 191 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 192 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 193 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 194 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 195 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 196 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 197 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 198 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 199 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 200 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 201 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 202 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 203 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 204 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 205 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 206 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 207 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 208 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 209 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 210 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 211 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 212 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 213 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 214 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 215 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 216 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 217 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 218 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 219 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 220 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 221 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 222 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 223 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 224 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 225 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 226 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 227 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 228 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 229 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 230 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 231 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 232 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 233 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 234 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 235 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 236 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 237 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 238 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 239 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 240 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 241 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 242 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 243 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 244 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 245 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 246 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 247 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 248 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 249 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 250 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 251 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 252 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 253 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 254 ; + } +#Experimental product +'Experimental product' = { + table2Version = 216 ; + indicatorOfParameter = 255 ; + } +#Total sky direct solar radiation at surface +'Total sky direct solar radiation at surface' = { + table2Version = 228 ; + indicatorOfParameter = 21 ; + } +#Clear-sky direct solar radiation at surface +'Clear-sky direct solar radiation at surface' = { + table2Version = 228 ; + indicatorOfParameter = 22 ; + } +#Cloud base height +'Cloud base height' = { + table2Version = 228 ; + indicatorOfParameter = 23 ; + } +#Zero degree level +'Zero degree level' = { + table2Version = 228 ; + indicatorOfParameter = 24 ; + } +#Horizontal visibility +'Horizontal visibility' = { + table2Version = 228 ; + indicatorOfParameter = 25 ; + } +#Maximum temperature at 2 metres in the last 3 hours +'Maximum temperature at 2 metres in the last 3 hours' = { + table2Version = 228 ; + indicatorOfParameter = 26 ; + } +#Minimum temperature at 2 metres in the last 3 hours +'Minimum temperature at 2 metres in the last 3 hours' = { + table2Version = 228 ; + indicatorOfParameter = 27 ; + } +#10 metre wind gust in the last 3 hours +'10 metre wind gust in the last 3 hours' = { + table2Version = 228 ; + indicatorOfParameter = 28 ; + } +#Soil wetness index in layer 1 +'Soil wetness index in layer 1' = { + table2Version = 228 ; + indicatorOfParameter = 40 ; + } +#Soil wetness index in layer 2 +'Soil wetness index in layer 2' = { + table2Version = 228 ; + indicatorOfParameter = 41 ; + } +#Soil wetness index in layer 3 +'Soil wetness index in layer 3' = { + table2Version = 228 ; + indicatorOfParameter = 42 ; + } +#Soil wetness index in layer 4 +'Soil wetness index in layer 4' = { + table2Version = 228 ; + indicatorOfParameter = 43 ; + } +#Accumulated Carbon Dioxide Net Ecosystem Exchange +'Accumulated Carbon Dioxide Net Ecosystem Exchange' = { + table2Version = 228 ; + indicatorOfParameter = 80 ; + } +#Accumulated Carbon Dioxide Gross Primary Production +'Accumulated Carbon Dioxide Gross Primary Production' = { + table2Version = 228 ; + indicatorOfParameter = 81 ; + } +#Accumulated Carbon Dioxide Ecosystem Respiration +'Accumulated Carbon Dioxide Ecosystem Respiration' = { + table2Version = 228 ; + indicatorOfParameter = 82 ; + } +#Flux of Carbon Dioxide Net Ecosystem Exchange +'Flux of Carbon Dioxide Net Ecosystem Exchange' = { + table2Version = 228 ; + indicatorOfParameter = 83 ; + } +#Flux of Carbon Dioxide Gross Primary Production +'Flux of Carbon Dioxide Gross Primary Production' = { + table2Version = 228 ; + indicatorOfParameter = 84 ; + } +#Flux of Carbon Dioxide Ecosystem Respiration +'Flux of Carbon Dioxide Ecosystem Respiration' = { + table2Version = 228 ; + indicatorOfParameter = 85 ; + } +#Total column rain water +'Total column rain water' = { + table2Version = 228 ; + indicatorOfParameter = 89 ; + } +#Total column snow water +'Total column snow water' = { + table2Version = 228 ; + indicatorOfParameter = 90 ; + } +#Canopy cover fraction +'Canopy cover fraction' = { + table2Version = 228 ; + indicatorOfParameter = 91 ; + } +#Soil texture fraction +'Soil texture fraction' = { + table2Version = 228 ; + indicatorOfParameter = 92 ; + } +#Volumetric soil moisture +'Volumetric soil moisture' = { + table2Version = 228 ; + indicatorOfParameter = 93 ; + } +#Ice temperature +'Ice temperature' = { + table2Version = 228 ; + indicatorOfParameter = 94 ; + } +#Surface solar radiation downward clear-sky +'Surface solar radiation downward clear-sky' = { + table2Version = 228 ; + indicatorOfParameter = 129 ; + } +#Surface thermal radiation downward clear-sky +'Surface thermal radiation downward clear-sky' = { + table2Version = 228 ; + indicatorOfParameter = 130 ; + } +#SMOS first Brightness Temperature Bias Correction parameter +'SMOS first Brightness Temperature Bias Correction parameter' = { + table2Version = 228 ; + indicatorOfParameter = 229 ; + } +#SMOS second Brightness Temperature Bias Correction parameter +'SMOS second Brightness Temperature Bias Correction parameter' = { + table2Version = 228 ; + indicatorOfParameter = 230 ; + } +#Surface solar radiation diffuse total sky +'Surface solar radiation diffuse total sky' = { + table2Version = 228 ; + indicatorOfParameter = 242 ; + } +#Surface solar radiation diffuse clear-sky +'Surface solar radiation diffuse clear-sky' = { + table2Version = 228 ; + indicatorOfParameter = 243 ; + } +#Surface albedo of direct radiation +'Surface albedo of direct radiation' = { + table2Version = 228 ; + indicatorOfParameter = 244 ; + } +#Surface albedo of diffuse radiation +'Surface albedo of diffuse radiation' = { + table2Version = 228 ; + indicatorOfParameter = 245 ; + } +#100 metre wind speed +'100 metre wind speed' = { + table2Version = 228 ; + indicatorOfParameter = 249 ; + } +#Irrigation fraction +'Irrigation fraction' = { + table2Version = 228 ; + indicatorOfParameter = 250 ; + } +#Potential evaporation +'Potential evaporation' = { + table2Version = 228 ; + indicatorOfParameter = 251 ; + } +#Irrigation +'Irrigation' = { + table2Version = 228 ; + indicatorOfParameter = 252 ; + } +#Surface runoff (variable resolution) +'Surface runoff (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff (variable resolution) +'Sub-surface runoff (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 9 ; + } +#Total sky direct solar radiation at surface (variable resolution) +'Total sky direct solar radiation at surface (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 21 ; + } +#Clear-sky direct solar radiation at surface (variable resolution) +'Clear-sky direct solar radiation at surface (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 22 ; + } +#Albedo (variable resolution) +'Albedo (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 174 ; + } +#Total precipitation (variable resolution) +'Total precipitation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 228 ; + } +#K index +'K index' = { + table2Version = 228 ; + indicatorOfParameter = 121 ; + } +#Total totals index +'Total totals index' = { + table2Version = 228 ; + indicatorOfParameter = 123 ; + } +#Stream function gradient +'Stream function gradient' = { + table2Version = 129 ; + indicatorOfParameter = 1 ; + } +#Velocity potential gradient +'Velocity potential gradient' = { + table2Version = 129 ; + indicatorOfParameter = 2 ; + } +#Potential temperature gradient +'Potential temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature gradient +'Equivalent potential temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature gradient +'Saturated equivalent potential temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind gradient +'U component of divergent wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind gradient +'V component of divergent wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind gradient +'U component of rotational wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind gradient +'V component of rotational wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature gradient +'Unbalanced component of temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure gradient +'Unbalanced component of logarithm of surface pressure gradient' = { + table2Version = 129 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence gradient +'Unbalanced component of divergence gradient' = { + table2Version = 129 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + table2Version = 129 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + table2Version = 129 ; + indicatorOfParameter = 25 ; + } +#Lake cover gradient +'Lake cover gradient' = { + table2Version = 129 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover gradient +'Low vegetation cover gradient' = { + table2Version = 129 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover gradient +'High vegetation cover gradient' = { + table2Version = 129 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation gradient +'Type of low vegetation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation gradient +'Type of high vegetation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover gradient +'Sea-ice cover gradient' = { + table2Version = 129 ; + indicatorOfParameter = 31 ; + } +#Snow albedo gradient +'Snow albedo gradient' = { + table2Version = 129 ; + indicatorOfParameter = 32 ; + } +#Snow density gradient +'Snow density gradient' = { + table2Version = 129 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature gradient +'Sea surface temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature layer 1 gradient +'Ice surface temperature layer 1 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature layer 2 gradient +'Ice surface temperature layer 2 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature layer 3 gradient +'Ice surface temperature layer 3 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature layer 4 gradient +'Ice surface temperature layer 4 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 gradient +'Volumetric soil water layer 1 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 gradient +'Volumetric soil water layer 2 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 gradient +'Volumetric soil water layer 3 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 gradient +'Volumetric soil water layer 4 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 42 ; + } +#Soil type gradient +'Soil type gradient' = { + table2Version = 129 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation gradient +'Snow evaporation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 44 ; + } +#Snowmelt gradient +'Snowmelt gradient' = { + table2Version = 129 ; + indicatorOfParameter = 45 ; + } +#Solar duration gradient +'Solar duration gradient' = { + table2Version = 129 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation gradient +'Direct solar radiation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress gradient +'Magnitude of surface stress gradient' = { + table2Version = 129 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust gradient +'10 metre wind gust gradient' = { + table2Version = 129 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction gradient +'Large-scale precipitation fraction gradient' = { + table2Version = 129 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature gradient +'Maximum 2 metre temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature gradient +'Minimum 2 metre temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential gradient +'Montgomery potential gradient' = { + table2Version = 129 ; + indicatorOfParameter = 53 ; + } +#Pressure gradient +'Pressure gradient' = { + table2Version = 129 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'Mean 2 metre temperature in the last 24 hours gradient' = { + table2Version = 129 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours gradient +'Mean 2 metre dewpoint temperature in the last 24 hours gradient' = { + table2Version = 129 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface gradient +'Downward UV radiation at the surface gradient' = { + table2Version = 129 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface gradient +'Photosynthetically active radiation at the surface gradient' = { + table2Version = 129 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy gradient +'Convective available potential energy gradient' = { + table2Version = 129 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity gradient +'Potential vorticity gradient' = { + table2Version = 129 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations gradient +'Total precipitation from observations gradient' = { + table2Version = 129 ; + indicatorOfParameter = 61 ; + } +#Observation count gradient +'Observation count gradient' = { + table2Version = 129 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'Start time for skin temperature difference' = { + table2Version = 129 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'Finish time for skin temperature difference' = { + table2Version = 129 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'Skin temperature difference' = { + table2Version = 129 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'Leaf area index, low vegetation' = { + table2Version = 129 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'Leaf area index, high vegetation' = { + table2Version = 129 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'Minimum stomatal resistance, low vegetation' = { + table2Version = 129 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'Minimum stomatal resistance, high vegetation' = { + table2Version = 129 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'Biome cover, low vegetation' = { + table2Version = 129 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'Biome cover, high vegetation' = { + table2Version = 129 ; + indicatorOfParameter = 71 ; + } +#Total column liquid water +'Total column liquid water' = { + table2Version = 129 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'Total column ice water' = { + table2Version = 129 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'Experimental product' = { + table2Version = 129 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres gradient +'Maximum temperature at 2 metres gradient' = { + table2Version = 129 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres gradient +'Minimum temperature at 2 metres gradient' = { + table2Version = 129 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours gradient +'10 metre wind gust in the last 6 hours gradient' = { + table2Version = 129 ; + indicatorOfParameter = 123 ; + } +#Vertically integrated total energy +'Vertically integrated total energy' = { + table2Version = 129 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'Generic parameter for sensitive area prediction' = { + table2Version = 129 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide gradient +'Atmospheric tide gradient' = { + table2Version = 129 ; + indicatorOfParameter = 127 ; + } +#Budget values gradient +'Budget values gradient' = { + table2Version = 129 ; + indicatorOfParameter = 128 ; + } +#Geopotential gradient +'Geopotential gradient' = { + table2Version = 129 ; + indicatorOfParameter = 129 ; + } +#Temperature gradient +'Temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 130 ; + } +#U component of wind gradient +'U component of wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 131 ; + } +#V component of wind gradient +'V component of wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 132 ; + } +#Specific humidity gradient +'Specific humidity gradient' = { + table2Version = 129 ; + indicatorOfParameter = 133 ; + } +#Surface pressure gradient +'Surface pressure gradient' = { + table2Version = 129 ; + indicatorOfParameter = 134 ; + } +#vertical velocity (pressure) gradient +'vertical velocity (pressure) gradient' = { + table2Version = 129 ; + indicatorOfParameter = 135 ; + } +#Total column water gradient +'Total column water gradient' = { + table2Version = 129 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour gradient +'Total column water vapour gradient' = { + table2Version = 129 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) gradient +'Vorticity (relative) gradient' = { + table2Version = 129 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 gradient +'Soil temperature level 1 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 gradient +'Soil wetness level 1 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 140 ; + } +#Snow depth gradient +'Snow depth gradient' = { + table2Version = 129 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) gradient +'Stratiform precipitation (Large-scale precipitation) gradient' = { + table2Version = 129 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation gradient +'Convective precipitation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) gradient +'Snowfall (convective + stratiform) gradient' = { + table2Version = 129 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation gradient +'Boundary layer dissipation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux gradient +'Surface sensible heat flux gradient' = { + table2Version = 129 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux gradient +'Surface latent heat flux gradient' = { + table2Version = 129 ; + indicatorOfParameter = 147 ; + } +#Charnock gradient +'Charnock gradient' = { + table2Version = 129 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation gradient +'Surface net radiation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 149 ; + } +#Top net radiation gradient +'Top net radiation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure gradient +'Mean sea level pressure gradient' = { + table2Version = 129 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure gradient +'Logarithm of surface pressure gradient' = { + table2Version = 129 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate gradient +'Short-wave heating rate gradient' = { + table2Version = 129 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate gradient +'Long-wave heating rate gradient' = { + table2Version = 129 ; + indicatorOfParameter = 154 ; + } +#Divergence gradient +'Divergence gradient' = { + table2Version = 129 ; + indicatorOfParameter = 155 ; + } +#Height gradient +'Height gradient' = { + table2Version = 129 ; + indicatorOfParameter = 156 ; + } +#Relative humidity gradient +'Relative humidity gradient' = { + table2Version = 129 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure gradient +'Tendency of surface pressure gradient' = { + table2Version = 129 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height gradient +'Boundary layer height gradient' = { + table2Version = 129 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography gradient +'Standard deviation of orography gradient' = { + table2Version = 129 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography gradient +'Anisotropy of sub-gridscale orography gradient' = { + table2Version = 129 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography gradient +'Angle of sub-gridscale orography gradient' = { + table2Version = 129 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography gradient +'Slope of sub-gridscale orography gradient' = { + table2Version = 129 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover gradient +'Total cloud cover gradient' = { + table2Version = 129 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component gradient +'10 metre U wind component gradient' = { + table2Version = 129 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component gradient +'10 metre V wind component gradient' = { + table2Version = 129 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature gradient +'2 metre temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature gradient +'2 metre dewpoint temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards gradient +'Surface solar radiation downwards gradient' = { + table2Version = 129 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 gradient +'Soil temperature level 2 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 gradient +'Soil wetness level 2 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask gradient +'Land-sea mask gradient' = { + table2Version = 129 ; + indicatorOfParameter = 172 ; + } +#Surface roughness gradient +'Surface roughness gradient' = { + table2Version = 129 ; + indicatorOfParameter = 173 ; + } +#Albedo gradient +'Albedo gradient' = { + table2Version = 129 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards gradient +'Surface thermal radiation downwards gradient' = { + table2Version = 129 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation gradient +'Surface net solar radiation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation gradient +'Surface net thermal radiation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation gradient +'Top net solar radiation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation gradient +'Top net thermal radiation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress gradient +'East-West surface stress gradient' = { + table2Version = 129 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress gradient +'North-South surface stress gradient' = { + table2Version = 129 ; + indicatorOfParameter = 181 ; + } +#Evaporation gradient +'Evaporation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 gradient +'Soil temperature level 3 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 gradient +'Soil wetness level 3 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover gradient +'Convective cloud cover gradient' = { + table2Version = 129 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover gradient +'Low cloud cover gradient' = { + table2Version = 129 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover gradient +'Medium cloud cover gradient' = { + table2Version = 129 ; + indicatorOfParameter = 187 ; + } +#High cloud cover gradient +'High cloud cover gradient' = { + table2Version = 129 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration gradient +'Sunshine duration gradient' = { + table2Version = 129 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance gradient +'East-West component of sub-gridscale orographic variance gradient' = { + table2Version = 129 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance gradient +'North-South component of sub-gridscale orographic variance gradient' = { + table2Version = 129 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance gradient +'North-West/South-East component of sub-gridscale orographic variance gradient' = { + table2Version = 129 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance gradient +'North-East/South-West component of sub-gridscale orographic variance gradient' = { + table2Version = 129 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature gradient +'Brightness temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress gradient +'Longitudinal component of gravity wave stress gradient' = { + table2Version = 129 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress gradient +'Meridional component of gravity wave stress gradient' = { + table2Version = 129 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation gradient +'Gravity wave dissipation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content gradient +'Skin reservoir content gradient' = { + table2Version = 129 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction gradient +'Vegetation fraction gradient' = { + table2Version = 129 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography gradient +'Variance of sub-gridscale orography gradient' = { + table2Version = 129 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing gradient +'Maximum temperature at 2 metres since previous post-processing gradient' = { + table2Version = 129 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing gradient +'Minimum temperature at 2 metres since previous post-processing gradient' = { + table2Version = 129 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio gradient +'Ozone mass mixing ratio gradient' = { + table2Version = 129 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights gradient +'Precipitation analysis weights gradient' = { + table2Version = 129 ; + indicatorOfParameter = 204 ; + } +#Runoff gradient +'Runoff gradient' = { + table2Version = 129 ; + indicatorOfParameter = 205 ; + } +#Total column ozone gradient +'Total column ozone gradient' = { + table2Version = 129 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed gradient +'10 metre wind speed gradient' = { + table2Version = 129 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky gradient +'Top net solar radiation, clear sky gradient' = { + table2Version = 129 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky gradient +'Top net thermal radiation, clear sky gradient' = { + table2Version = 129 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky gradient +'Surface net solar radiation, clear sky gradient' = { + table2Version = 129 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky gradient +'Surface net thermal radiation, clear sky gradient' = { + table2Version = 129 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation gradient +'TOA incident solar radiation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation gradient +'Diabatic heating by radiation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion gradient +'Diabatic heating by vertical diffusion gradient' = { + table2Version = 129 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection gradient +'Diabatic heating by cumulus convection gradient' = { + table2Version = 129 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation gradient +'Diabatic heating large-scale condensation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind gradient +'Vertical diffusion of zonal wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind gradient +'Vertical diffusion of meridional wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency gradient +'East-West gravity wave drag tendency gradient' = { + table2Version = 129 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency gradient +'North-South gravity wave drag tendency gradient' = { + table2Version = 129 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind gradient +'Convective tendency of zonal wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind gradient +'Convective tendency of meridional wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity gradient +'Vertical diffusion of humidity gradient' = { + table2Version = 129 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection gradient +'Humidity tendency by cumulus convection gradient' = { + table2Version = 129 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation gradient +'Humidity tendency by large-scale condensation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity gradient +'Change from removal of negative humidity gradient' = { + table2Version = 129 ; + indicatorOfParameter = 227 ; + } +#Total precipitation gradient +'Total precipitation gradient' = { + table2Version = 129 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress gradient +'Instantaneous X surface stress gradient' = { + table2Version = 129 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress gradient +'Instantaneous Y surface stress gradient' = { + table2Version = 129 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux gradient +'Instantaneous surface heat flux gradient' = { + table2Version = 129 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux gradient +'Instantaneous moisture flux gradient' = { + table2Version = 129 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity gradient +'Apparent surface humidity gradient' = { + table2Version = 129 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat gradient +'Logarithm of surface roughness length for heat gradient' = { + table2Version = 129 ; + indicatorOfParameter = 234 ; + } +#Skin temperature gradient +'Skin temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 gradient +'Soil temperature level 4 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 gradient +'Soil wetness level 4 gradient' = { + table2Version = 129 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer gradient +'Temperature of snow layer gradient' = { + table2Version = 129 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall gradient +'Convective snowfall gradient' = { + table2Version = 129 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall gradient +'Large scale snowfall gradient' = { + table2Version = 129 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency gradient +'Accumulated cloud fraction tendency gradient' = { + table2Version = 129 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency gradient +'Accumulated liquid water tendency gradient' = { + table2Version = 129 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo gradient +'Forecast albedo gradient' = { + table2Version = 129 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness gradient +'Forecast surface roughness gradient' = { + table2Version = 129 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat gradient +'Forecast logarithm of surface roughness for heat gradient' = { + table2Version = 129 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content gradient +'Specific cloud liquid water content gradient' = { + table2Version = 129 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content gradient +'Specific cloud ice water content gradient' = { + table2Version = 129 ; + indicatorOfParameter = 247 ; + } +#Cloud cover gradient +'Cloud cover gradient' = { + table2Version = 129 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency gradient +'Accumulated ice water tendency gradient' = { + table2Version = 129 ; + indicatorOfParameter = 249 ; + } +#Ice age gradient +'Ice age gradient' = { + table2Version = 129 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature gradient +'Adiabatic tendency of temperature gradient' = { + table2Version = 129 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity gradient +'Adiabatic tendency of humidity gradient' = { + table2Version = 129 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind gradient +'Adiabatic tendency of zonal wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind gradient +'Adiabatic tendency of meridional wind gradient' = { + table2Version = 129 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 129 ; + indicatorOfParameter = 255 ; + } +#Top solar radiation upward +'Top solar radiation upward' = { + table2Version = 130 ; + indicatorOfParameter = 208 ; + } +#Top thermal radiation upward +'Top thermal radiation upward' = { + table2Version = 130 ; + indicatorOfParameter = 209 ; + } +#Top solar radiation upward, clear sky +'Top solar radiation upward, clear sky' = { + table2Version = 130 ; + indicatorOfParameter = 210 ; + } +#Top thermal radiation upward, clear sky +'Top thermal radiation upward, clear sky' = { + table2Version = 130 ; + indicatorOfParameter = 211 ; + } +#Cloud liquid water +'Cloud liquid water' = { + table2Version = 130 ; + indicatorOfParameter = 212 ; + } +#Cloud fraction +'Cloud fraction' = { + table2Version = 130 ; + indicatorOfParameter = 213 ; + } +#Diabatic heating by radiation +'Diabatic heating by radiation' = { + table2Version = 130 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion +'Diabatic heating by vertical diffusion' = { + table2Version = 130 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection +'Diabatic heating by cumulus convection' = { + table2Version = 130 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating by large-scale condensation +'Diabatic heating by large-scale condensation' = { + table2Version = 130 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind +'Vertical diffusion of zonal wind' = { + table2Version = 130 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind +'Vertical diffusion of meridional wind' = { + table2Version = 130 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag +'East-West gravity wave drag' = { + table2Version = 130 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag +'North-South gravity wave drag' = { + table2Version = 130 ; + indicatorOfParameter = 221 ; + } +#Vertical diffusion of humidity +'Vertical diffusion of humidity' = { + table2Version = 130 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection +'Humidity tendency by cumulus convection' = { + table2Version = 130 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation +'Humidity tendency by large-scale condensation' = { + table2Version = 130 ; + indicatorOfParameter = 226 ; + } +#Adiabatic tendency of temperature +'Adiabatic tendency of temperature' = { + table2Version = 130 ; + indicatorOfParameter = 228 ; + } +#Adiabatic tendency of humidity +'Adiabatic tendency of humidity' = { + table2Version = 130 ; + indicatorOfParameter = 229 ; + } +#Adiabatic tendency of zonal wind +'Adiabatic tendency of zonal wind' = { + table2Version = 130 ; + indicatorOfParameter = 230 ; + } +#Adiabatic tendency of meridional wind +'Adiabatic tendency of meridional wind' = { + table2Version = 130 ; + indicatorOfParameter = 231 ; + } +#Mean vertical velocity +'Mean vertical velocity' = { + table2Version = 130 ; + indicatorOfParameter = 232 ; + } +#2m temperature anomaly of at least +2K +'2m temperature anomaly of at least +2K' = { + table2Version = 131 ; + indicatorOfParameter = 1 ; + } +#2m temperature anomaly of at least +1K +'2m temperature anomaly of at least +1K' = { + table2Version = 131 ; + indicatorOfParameter = 2 ; + } +#2m temperature anomaly of at least 0K +'2m temperature anomaly of at least 0K' = { + table2Version = 131 ; + indicatorOfParameter = 3 ; + } +#2m temperature anomaly of at most -1K +'2m temperature anomaly of at most -1K' = { + table2Version = 131 ; + indicatorOfParameter = 4 ; + } +#2m temperature anomaly of at most -2K +'2m temperature anomaly of at most -2K' = { + table2Version = 131 ; + indicatorOfParameter = 5 ; + } +#Total precipitation anomaly of at least 20 mm +'Total precipitation anomaly of at least 20 mm' = { + table2Version = 131 ; + indicatorOfParameter = 6 ; + } +#Total precipitation anomaly of at least 10 mm +'Total precipitation anomaly of at least 10 mm' = { + table2Version = 131 ; + indicatorOfParameter = 7 ; + } +#Total precipitation anomaly of at least 0 mm +'Total precipitation anomaly of at least 0 mm' = { + table2Version = 131 ; + indicatorOfParameter = 8 ; + } +#Surface temperature anomaly of at least 0K +'Surface temperature anomaly of at least 0K' = { + table2Version = 131 ; + indicatorOfParameter = 9 ; + } +#Mean sea level pressure anomaly of at least 0 Pa +'Mean sea level pressure anomaly of at least 0 Pa' = { + table2Version = 131 ; + indicatorOfParameter = 10 ; + } +#Height of 0 degree isotherm probability +'Height of 0 degree isotherm probability' = { + table2Version = 131 ; + indicatorOfParameter = 15 ; + } +#Height of snowfall limit probability +'Height of snowfall limit probability' = { + table2Version = 131 ; + indicatorOfParameter = 16 ; + } +#Showalter index probability +'Showalter index probability' = { + table2Version = 131 ; + indicatorOfParameter = 17 ; + } +#Whiting index probability +'Whiting index probability' = { + table2Version = 131 ; + indicatorOfParameter = 18 ; + } +#Temperature anomaly less than -2 K +'Temperature anomaly less than -2 K' = { + table2Version = 131 ; + indicatorOfParameter = 20 ; + } +#Temperature anomaly of at least +2 K +'Temperature anomaly of at least +2 K' = { + table2Version = 131 ; + indicatorOfParameter = 21 ; + } +#Temperature anomaly less than -8 K +'Temperature anomaly less than -8 K' = { + table2Version = 131 ; + indicatorOfParameter = 22 ; + } +#Temperature anomaly less than -4 K +'Temperature anomaly less than -4 K' = { + table2Version = 131 ; + indicatorOfParameter = 23 ; + } +#Temperature anomaly greater than +4 K +'Temperature anomaly greater than +4 K' = { + table2Version = 131 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly greater than +8 K +'Temperature anomaly greater than +8 K' = { + table2Version = 131 ; + indicatorOfParameter = 25 ; + } +#10 metre wind gust probability +'10 metre wind gust probability' = { + table2Version = 131 ; + indicatorOfParameter = 49 ; + } +#Convective available potential energy probability +'Convective available potential energy probability' = { + table2Version = 131 ; + indicatorOfParameter = 59 ; + } +#Total precipitation less than 0.1 mm +'Total precipitation less than 0.1 mm' = { + table2Version = 131 ; + indicatorOfParameter = 64 ; + } +#Total precipitation rate less than 1 mm/day +'Total precipitation rate less than 1 mm/day' = { + table2Version = 131 ; + indicatorOfParameter = 65 ; + } +#Total precipitation rate of at least 3 mm/day +'Total precipitation rate of at least 3 mm/day' = { + table2Version = 131 ; + indicatorOfParameter = 66 ; + } +#Total precipitation rate of at least 5 mm/day +'Total precipitation rate of at least 5 mm/day' = { + table2Version = 131 ; + indicatorOfParameter = 67 ; + } +#10 metre Wind speed of at least 10 m/s +'10 metre Wind speed of at least 10 m/s' = { + table2Version = 131 ; + indicatorOfParameter = 68 ; + } +#10 metre Wind speed of at least 15 m/s +'10 metre Wind speed of at least 15 m/s' = { + table2Version = 131 ; + indicatorOfParameter = 69 ; + } +#10 metre Wind gust of at least 15 m/s +'10 metre Wind gust of at least 15 m/s' = { + table2Version = 131 ; + indicatorOfParameter = 70 ; + } +#10 metre Wind gust of at least 20 m/s +'10 metre Wind gust of at least 20 m/s' = { + table2Version = 131 ; + indicatorOfParameter = 71 ; + } +#10 metre Wind gust of at least 25 m/s +'10 metre Wind gust of at least 25 m/s' = { + table2Version = 131 ; + indicatorOfParameter = 72 ; + } +#2 metre temperature less than 273.15 K +'2 metre temperature less than 273.15 K' = { + table2Version = 131 ; + indicatorOfParameter = 73 ; + } +#Significant wave height of at least 2 m +'Significant wave height of at least 2 m' = { + table2Version = 131 ; + indicatorOfParameter = 74 ; + } +#Significant wave height of at least 4 m +'Significant wave height of at least 4 m' = { + table2Version = 131 ; + indicatorOfParameter = 75 ; + } +#Significant wave height of at least 6 m +'Significant wave height of at least 6 m' = { + table2Version = 131 ; + indicatorOfParameter = 76 ; + } +#Significant wave height of at least 8 m +'Significant wave height of at least 8 m' = { + table2Version = 131 ; + indicatorOfParameter = 77 ; + } +#Mean wave period of at least 8 s +'Mean wave period of at least 8 s' = { + table2Version = 131 ; + indicatorOfParameter = 78 ; + } +#Mean wave period of at least 10 s +'Mean wave period of at least 10 s' = { + table2Version = 131 ; + indicatorOfParameter = 79 ; + } +#Mean wave period of at least 12 s +'Mean wave period of at least 12 s' = { + table2Version = 131 ; + indicatorOfParameter = 80 ; + } +#Mean wave period of at least 15 s +'Mean wave period of at least 15 s' = { + table2Version = 131 ; + indicatorOfParameter = 81 ; + } +#Geopotential probability +'Geopotential probability' = { + table2Version = 131 ; + indicatorOfParameter = 129 ; + } +#Temperature anomaly probability +'Temperature anomaly probability' = { + table2Version = 131 ; + indicatorOfParameter = 130 ; + } +#2 metre temperature probability +'2 metre temperature probability' = { + table2Version = 131 ; + indicatorOfParameter = 139 ; + } +#Snowfall (convective + stratiform) probability +'Snowfall (convective + stratiform) probability' = { + table2Version = 131 ; + indicatorOfParameter = 144 ; + } +#Total precipitation probability +'Total precipitation probability' = { + table2Version = 131 ; + indicatorOfParameter = 151 ; + } +#Total cloud cover probability +'Total cloud cover probability' = { + table2Version = 131 ; + indicatorOfParameter = 164 ; + } +#10 metre speed probability +'10 metre speed probability' = { + table2Version = 131 ; + indicatorOfParameter = 165 ; + } +#2 metre temperature probability +'2 metre temperature probability' = { + table2Version = 131 ; + indicatorOfParameter = 167 ; + } +#Maximum 2 metre temperature probability +'Maximum 2 metre temperature probability' = { + table2Version = 131 ; + indicatorOfParameter = 201 ; + } +#Minimum 2 metre temperature probability +'Minimum 2 metre temperature probability' = { + table2Version = 131 ; + indicatorOfParameter = 202 ; + } +#Total precipitation probability +'Total precipitation probability' = { + table2Version = 131 ; + indicatorOfParameter = 228 ; + } +#Significant wave height probability +'Significant wave height probability' = { + table2Version = 131 ; + indicatorOfParameter = 229 ; + } +#Mean wave period probability +'Mean wave period probability' = { + table2Version = 131 ; + indicatorOfParameter = 232 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 131 ; + indicatorOfParameter = 255 ; + } +#10 metre wind gust index +'10 metre wind gust index' = { + table2Version = 132 ; + indicatorOfParameter = 49 ; + } +#Snowfall index +'Snowfall index' = { + table2Version = 132 ; + indicatorOfParameter = 144 ; + } +#10 metre speed index +'10 metre speed index' = { + table2Version = 132 ; + indicatorOfParameter = 165 ; + } +#2 metre temperature index +'2 metre temperature index' = { + table2Version = 132 ; + indicatorOfParameter = 167 ; + } +#Maximum temperature at 2 metres index +'Maximum temperature at 2 metres index' = { + table2Version = 132 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres index +'Minimum temperature at 2 metres index' = { + table2Version = 132 ; + indicatorOfParameter = 202 ; + } +#Total precipitation index +'Total precipitation index' = { + table2Version = 132 ; + indicatorOfParameter = 228 ; + } +#2m temperature probability less than -10 C +'2m temperature probability less than -10 C' = { + table2Version = 133 ; + indicatorOfParameter = 1 ; + } +#2m temperature probability less than -5 C +'2m temperature probability less than -5 C' = { + table2Version = 133 ; + indicatorOfParameter = 2 ; + } +#2m temperature probability less than 0 C +'2m temperature probability less than 0 C' = { + table2Version = 133 ; + indicatorOfParameter = 3 ; + } +#2m temperature probability less than 5 C +'2m temperature probability less than 5 C' = { + table2Version = 133 ; + indicatorOfParameter = 4 ; + } +#2m temperature probability less than 10 C +'2m temperature probability less than 10 C' = { + table2Version = 133 ; + indicatorOfParameter = 5 ; + } +#2m temperature probability greater than 25 C +'2m temperature probability greater than 25 C' = { + table2Version = 133 ; + indicatorOfParameter = 6 ; + } +#2m temperature probability greater than 30 C +'2m temperature probability greater than 30 C' = { + table2Version = 133 ; + indicatorOfParameter = 7 ; + } +#2m temperature probability greater than 35 C +'2m temperature probability greater than 35 C' = { + table2Version = 133 ; + indicatorOfParameter = 8 ; + } +#2m temperature probability greater than 40 C +'2m temperature probability greater than 40 C' = { + table2Version = 133 ; + indicatorOfParameter = 9 ; + } +#2m temperature probability greater than 45 C +'2m temperature probability greater than 45 C' = { + table2Version = 133 ; + indicatorOfParameter = 10 ; + } +#Minimum 2 metre temperature probability less than -10 C +'Minimum 2 metre temperature probability less than -10 C' = { + table2Version = 133 ; + indicatorOfParameter = 11 ; + } +#Minimum 2 metre temperature probability less than -5 C +'Minimum 2 metre temperature probability less than -5 C' = { + table2Version = 133 ; + indicatorOfParameter = 12 ; + } +#Minimum 2 metre temperature probability less than 0 C +'Minimum 2 metre temperature probability less than 0 C' = { + table2Version = 133 ; + indicatorOfParameter = 13 ; + } +#Minimum 2 metre temperature probability less than 5 C +'Minimum 2 metre temperature probability less than 5 C' = { + table2Version = 133 ; + indicatorOfParameter = 14 ; + } +#Minimum 2 metre temperature probability less than 10 C +'Minimum 2 metre temperature probability less than 10 C' = { + table2Version = 133 ; + indicatorOfParameter = 15 ; + } +#Maximum 2 metre temperature probability greater than 25 C +'Maximum 2 metre temperature probability greater than 25 C' = { + table2Version = 133 ; + indicatorOfParameter = 16 ; + } +#Maximum 2 metre temperature probability greater than 30 C +'Maximum 2 metre temperature probability greater than 30 C' = { + table2Version = 133 ; + indicatorOfParameter = 17 ; + } +#Maximum 2 metre temperature probability greater than 35 C +'Maximum 2 metre temperature probability greater than 35 C' = { + table2Version = 133 ; + indicatorOfParameter = 18 ; + } +#Maximum 2 metre temperature probability greater than 40 C +'Maximum 2 metre temperature probability greater than 40 C' = { + table2Version = 133 ; + indicatorOfParameter = 19 ; + } +#Maximum 2 metre temperature probability greater than 45 C +'Maximum 2 metre temperature probability greater than 45 C' = { + table2Version = 133 ; + indicatorOfParameter = 20 ; + } +#10 metre wind speed probability of at least 10 m/s +'10 metre wind speed probability of at least 10 m/s' = { + table2Version = 133 ; + indicatorOfParameter = 21 ; + } +#10 metre wind speed probability of at least 15 m/s +'10 metre wind speed probability of at least 15 m/s' = { + table2Version = 133 ; + indicatorOfParameter = 22 ; + } +#10 metre wind speed probability of at least 20 m/s +'10 metre wind speed probability of at least 20 m/s' = { + table2Version = 133 ; + indicatorOfParameter = 23 ; + } +#10 metre wind speed probability of at least 35 m/s +'10 metre wind speed probability of at least 35 m/s' = { + table2Version = 133 ; + indicatorOfParameter = 24 ; + } +#10 metre wind speed probability of at least 50 m/s +'10 metre wind speed probability of at least 50 m/s' = { + table2Version = 133 ; + indicatorOfParameter = 25 ; + } +#10 metre wind gust probability of at least 20 m/s +'10 metre wind gust probability of at least 20 m/s' = { + table2Version = 133 ; + indicatorOfParameter = 26 ; + } +#10 metre wind gust probability of at least 35 m/s +'10 metre wind gust probability of at least 35 m/s' = { + table2Version = 133 ; + indicatorOfParameter = 27 ; + } +#10 metre wind gust probability of at least 50 m/s +'10 metre wind gust probability of at least 50 m/s' = { + table2Version = 133 ; + indicatorOfParameter = 28 ; + } +#10 metre wind gust probability of at least 75 m/s +'10 metre wind gust probability of at least 75 m/s' = { + table2Version = 133 ; + indicatorOfParameter = 29 ; + } +#10 metre wind gust probability of at least 100 m/s +'10 metre wind gust probability of at least 100 m/s' = { + table2Version = 133 ; + indicatorOfParameter = 30 ; + } +#Total precipitation probability of at least 1 mm +'Total precipitation probability of at least 1 mm' = { + table2Version = 133 ; + indicatorOfParameter = 31 ; + } +#Total precipitation probability of at least 5 mm +'Total precipitation probability of at least 5 mm' = { + table2Version = 133 ; + indicatorOfParameter = 32 ; + } +#Total precipitation probability of at least 10 mm +'Total precipitation probability of at least 10 mm' = { + table2Version = 133 ; + indicatorOfParameter = 33 ; + } +#Total precipitation probability of at least 20 mm +'Total precipitation probability of at least 20 mm' = { + table2Version = 133 ; + indicatorOfParameter = 34 ; + } +#Total precipitation probability of at least 40 mm +'Total precipitation probability of at least 40 mm' = { + table2Version = 133 ; + indicatorOfParameter = 35 ; + } +#Total precipitation probability of at least 60 mm +'Total precipitation probability of at least 60 mm' = { + table2Version = 133 ; + indicatorOfParameter = 36 ; + } +#Total precipitation probability of at least 80 mm +'Total precipitation probability of at least 80 mm' = { + table2Version = 133 ; + indicatorOfParameter = 37 ; + } +#Total precipitation probability of at least 100 mm +'Total precipitation probability of at least 100 mm' = { + table2Version = 133 ; + indicatorOfParameter = 38 ; + } +#Total precipitation probability of at least 150 mm +'Total precipitation probability of at least 150 mm' = { + table2Version = 133 ; + indicatorOfParameter = 39 ; + } +#Total precipitation probability of at least 200 mm +'Total precipitation probability of at least 200 mm' = { + table2Version = 133 ; + indicatorOfParameter = 40 ; + } +#Total precipitation probability of at least 300 mm +'Total precipitation probability of at least 300 mm' = { + table2Version = 133 ; + indicatorOfParameter = 41 ; + } +#Snowfall probability of at least 1 mm +'Snowfall probability of at least 1 mm' = { + table2Version = 133 ; + indicatorOfParameter = 42 ; + } +#Snowfall probability of at least 5 mm +'Snowfall probability of at least 5 mm' = { + table2Version = 133 ; + indicatorOfParameter = 43 ; + } +#Snowfall probability of at least 10 mm +'Snowfall probability of at least 10 mm' = { + table2Version = 133 ; + indicatorOfParameter = 44 ; + } +#Snowfall probability of at least 20 mm +'Snowfall probability of at least 20 mm' = { + table2Version = 133 ; + indicatorOfParameter = 45 ; + } +#Snowfall probability of at least 40 mm +'Snowfall probability of at least 40 mm' = { + table2Version = 133 ; + indicatorOfParameter = 46 ; + } +#Snowfall probability of at least 60 mm +'Snowfall probability of at least 60 mm' = { + table2Version = 133 ; + indicatorOfParameter = 47 ; + } +#Snowfall probability of at least 80 mm +'Snowfall probability of at least 80 mm' = { + table2Version = 133 ; + indicatorOfParameter = 48 ; + } +#Snowfall probability of at least 100 mm +'Snowfall probability of at least 100 mm' = { + table2Version = 133 ; + indicatorOfParameter = 49 ; + } +#Snowfall probability of at least 150 mm +'Snowfall probability of at least 150 mm' = { + table2Version = 133 ; + indicatorOfParameter = 50 ; + } +#Snowfall probability of at least 200 mm +'Snowfall probability of at least 200 mm' = { + table2Version = 133 ; + indicatorOfParameter = 51 ; + } +#Snowfall probability of at least 300 mm +'Snowfall probability of at least 300 mm' = { + table2Version = 133 ; + indicatorOfParameter = 52 ; + } +#Total Cloud Cover probability greater than 10% +'Total Cloud Cover probability greater than 10%' = { + table2Version = 133 ; + indicatorOfParameter = 53 ; + } +#Total Cloud Cover probability greater than 20% +'Total Cloud Cover probability greater than 20%' = { + table2Version = 133 ; + indicatorOfParameter = 54 ; + } +#Total Cloud Cover probability greater than 30% +'Total Cloud Cover probability greater than 30%' = { + table2Version = 133 ; + indicatorOfParameter = 55 ; + } +#Total Cloud Cover probability greater than 40% +'Total Cloud Cover probability greater than 40%' = { + table2Version = 133 ; + indicatorOfParameter = 56 ; + } +#Total Cloud Cover probability greater than 50% +'Total Cloud Cover probability greater than 50%' = { + table2Version = 133 ; + indicatorOfParameter = 57 ; + } +#Total Cloud Cover probability greater than 60% +'Total Cloud Cover probability greater than 60%' = { + table2Version = 133 ; + indicatorOfParameter = 58 ; + } +#Total Cloud Cover probability greater than 70% +'Total Cloud Cover probability greater than 70%' = { + table2Version = 133 ; + indicatorOfParameter = 59 ; + } +#Total Cloud Cover probability greater than 80% +'Total Cloud Cover probability greater than 80%' = { + table2Version = 133 ; + indicatorOfParameter = 60 ; + } +#Total Cloud Cover probability greater than 90% +'Total Cloud Cover probability greater than 90%' = { + table2Version = 133 ; + indicatorOfParameter = 61 ; + } +#Total Cloud Cover probability greater than 99% +'Total Cloud Cover probability greater than 99%' = { + table2Version = 133 ; + indicatorOfParameter = 62 ; + } +#High Cloud Cover probability greater than 10% +'High Cloud Cover probability greater than 10%' = { + table2Version = 133 ; + indicatorOfParameter = 63 ; + } +#High Cloud Cover probability greater than 20% +'High Cloud Cover probability greater than 20%' = { + table2Version = 133 ; + indicatorOfParameter = 64 ; + } +#High Cloud Cover probability greater than 30% +'High Cloud Cover probability greater than 30%' = { + table2Version = 133 ; + indicatorOfParameter = 65 ; + } +#High Cloud Cover probability greater than 40% +'High Cloud Cover probability greater than 40%' = { + table2Version = 133 ; + indicatorOfParameter = 66 ; + } +#High Cloud Cover probability greater than 50% +'High Cloud Cover probability greater than 50%' = { + table2Version = 133 ; + indicatorOfParameter = 67 ; + } +#High Cloud Cover probability greater than 60% +'High Cloud Cover probability greater than 60%' = { + table2Version = 133 ; + indicatorOfParameter = 68 ; + } +#High Cloud Cover probability greater than 70% +'High Cloud Cover probability greater than 70%' = { + table2Version = 133 ; + indicatorOfParameter = 69 ; + } +#High Cloud Cover probability greater than 80% +'High Cloud Cover probability greater than 80%' = { + table2Version = 133 ; + indicatorOfParameter = 70 ; + } +#High Cloud Cover probability greater than 90% +'High Cloud Cover probability greater than 90%' = { + table2Version = 133 ; + indicatorOfParameter = 71 ; + } +#High Cloud Cover probability greater than 99% +'High Cloud Cover probability greater than 99%' = { + table2Version = 133 ; + indicatorOfParameter = 72 ; + } +#Medium Cloud Cover probability greater than 10% +'Medium Cloud Cover probability greater than 10%' = { + table2Version = 133 ; + indicatorOfParameter = 73 ; + } +#Medium Cloud Cover probability greater than 20% +'Medium Cloud Cover probability greater than 20%' = { + table2Version = 133 ; + indicatorOfParameter = 74 ; + } +#Medium Cloud Cover probability greater than 30% +'Medium Cloud Cover probability greater than 30%' = { + table2Version = 133 ; + indicatorOfParameter = 75 ; + } +#Medium Cloud Cover probability greater than 40% +'Medium Cloud Cover probability greater than 40%' = { + table2Version = 133 ; + indicatorOfParameter = 76 ; + } +#Medium Cloud Cover probability greater than 50% +'Medium Cloud Cover probability greater than 50%' = { + table2Version = 133 ; + indicatorOfParameter = 77 ; + } +#Medium Cloud Cover probability greater than 60% +'Medium Cloud Cover probability greater than 60%' = { + table2Version = 133 ; + indicatorOfParameter = 78 ; + } +#Medium Cloud Cover probability greater than 70% +'Medium Cloud Cover probability greater than 70%' = { + table2Version = 133 ; + indicatorOfParameter = 79 ; + } +#Medium Cloud Cover probability greater than 80% +'Medium Cloud Cover probability greater than 80%' = { + table2Version = 133 ; + indicatorOfParameter = 80 ; + } +#Medium Cloud Cover probability greater than 90% +'Medium Cloud Cover probability greater than 90%' = { + table2Version = 133 ; + indicatorOfParameter = 81 ; + } +#Medium Cloud Cover probability greater than 99% +'Medium Cloud Cover probability greater than 99%' = { + table2Version = 133 ; + indicatorOfParameter = 82 ; + } +#Low Cloud Cover probability greater than 10% +'Low Cloud Cover probability greater than 10%' = { + table2Version = 133 ; + indicatorOfParameter = 83 ; + } +#Low Cloud Cover probability greater than 20% +'Low Cloud Cover probability greater than 20%' = { + table2Version = 133 ; + indicatorOfParameter = 84 ; + } +#Low Cloud Cover probability greater than 30% +'Low Cloud Cover probability greater than 30%' = { + table2Version = 133 ; + indicatorOfParameter = 85 ; + } +#Low Cloud Cover probability greater than 40% +'Low Cloud Cover probability greater than 40%' = { + table2Version = 133 ; + indicatorOfParameter = 86 ; + } +#Low Cloud Cover probability greater than 50% +'Low Cloud Cover probability greater than 50%' = { + table2Version = 133 ; + indicatorOfParameter = 87 ; + } +#Low Cloud Cover probability greater than 60% +'Low Cloud Cover probability greater than 60%' = { + table2Version = 133 ; + indicatorOfParameter = 88 ; + } +#Low Cloud Cover probability greater than 70% +'Low Cloud Cover probability greater than 70%' = { + table2Version = 133 ; + indicatorOfParameter = 89 ; + } +#Low Cloud Cover probability greater than 80% +'Low Cloud Cover probability greater than 80%' = { + table2Version = 133 ; + indicatorOfParameter = 90 ; + } +#Low Cloud Cover probability greater than 90% +'Low Cloud Cover probability greater than 90%' = { + table2Version = 133 ; + indicatorOfParameter = 91 ; + } +#Low Cloud Cover probability greater than 99% +'Low Cloud Cover probability greater than 99%' = { + table2Version = 133 ; + indicatorOfParameter = 92 ; + } +#Maximum of significant wave height +'Maximum of significant wave height' = { + table2Version = 140 ; + indicatorOfParameter = 200 ; + } +#Period corresponding to maximum individual wave height +'Period corresponding to maximum individual wave height' = { + table2Version = 140 ; + indicatorOfParameter = 217 ; + } +#Maximum individual wave height +'Maximum individual wave height' = { + table2Version = 140 ; + indicatorOfParameter = 218 ; + } +#Model bathymetry +'Model bathymetry' = { + table2Version = 140 ; + indicatorOfParameter = 219 ; + } +#Mean wave period based on first moment +'Mean wave period based on first moment' = { + table2Version = 140 ; + indicatorOfParameter = 220 ; + } +#Mean wave period based on second moment +'Mean wave period based on second moment' = { + table2Version = 140 ; + indicatorOfParameter = 221 ; + } +#Wave spectral directional width +'Wave spectral directional width' = { + table2Version = 140 ; + indicatorOfParameter = 222 ; + } +#Mean wave period based on first moment for wind waves +'Mean wave period based on first moment for wind waves' = { + table2Version = 140 ; + indicatorOfParameter = 223 ; + } +#Mean wave period based on second moment for wind waves +'Mean wave period based on second moment for wind waves' = { + table2Version = 140 ; + indicatorOfParameter = 224 ; + } +#Wave spectral directional width for wind waves +'Wave spectral directional width for wind waves' = { + table2Version = 140 ; + indicatorOfParameter = 225 ; + } +#Mean wave period based on first moment for swell +'Mean wave period based on first moment for swell' = { + table2Version = 140 ; + indicatorOfParameter = 226 ; + } +#Mean wave period based on second moment for swell +'Mean wave period based on second moment for swell' = { + table2Version = 140 ; + indicatorOfParameter = 227 ; + } +#Wave spectral directional width for swell +'Wave spectral directional width for swell' = { + table2Version = 140 ; + indicatorOfParameter = 228 ; + } +#Significant height of combined wind waves and swell +'Significant height of combined wind waves and swell' = { + table2Version = 140 ; + indicatorOfParameter = 229 ; + } +#Mean wave direction +'Mean wave direction' = { + table2Version = 140 ; + indicatorOfParameter = 230 ; + } +#Peak period of 1D spectra +'Peak period of 1D spectra' = { + table2Version = 140 ; + indicatorOfParameter = 231 ; + } +#Mean wave period +'Mean wave period' = { + table2Version = 140 ; + indicatorOfParameter = 232 ; + } +#Coefficient of drag with waves +'Coefficient of drag with waves' = { + table2Version = 140 ; + indicatorOfParameter = 233 ; + } +#Significant height of wind waves +'Significant height of wind waves' = { + table2Version = 140 ; + indicatorOfParameter = 234 ; + } +#Mean direction of wind waves +'Mean direction of wind waves' = { + table2Version = 140 ; + indicatorOfParameter = 235 ; + } +#Mean period of wind waves +'Mean period of wind waves' = { + table2Version = 140 ; + indicatorOfParameter = 236 ; + } +#Significant height of total swell +'Significant height of total swell' = { + table2Version = 140 ; + indicatorOfParameter = 237 ; + } +#Mean direction of total swell +'Mean direction of total swell' = { + table2Version = 140 ; + indicatorOfParameter = 238 ; + } +#Mean period of total swell +'Mean period of total swell' = { + table2Version = 140 ; + indicatorOfParameter = 239 ; + } +#Standard deviation wave height +'Standard deviation wave height' = { + table2Version = 140 ; + indicatorOfParameter = 240 ; + } +#Mean of 10 metre wind speed +'Mean of 10 metre wind speed' = { + table2Version = 140 ; + indicatorOfParameter = 241 ; + } +#Mean wind direction +'Mean wind direction' = { + table2Version = 140 ; + indicatorOfParameter = 242 ; + } +#Standard deviation of 10 metre wind speed +'Standard deviation of 10 metre wind speed' = { + table2Version = 140 ; + indicatorOfParameter = 243 ; + } +#Mean square slope of waves +'Mean square slope of waves' = { + table2Version = 140 ; + indicatorOfParameter = 244 ; + } +#10 metre wind speed +'10 metre wind speed' = { + table2Version = 140 ; + indicatorOfParameter = 245 ; + } +#Altimeter wave height +'Altimeter wave height' = { + table2Version = 140 ; + indicatorOfParameter = 246 ; + } +#Altimeter corrected wave height +'Altimeter corrected wave height' = { + table2Version = 140 ; + indicatorOfParameter = 247 ; + } +#Altimeter range relative correction +'Altimeter range relative correction' = { + table2Version = 140 ; + indicatorOfParameter = 248 ; + } +#10 metre wind direction +'10 metre wind direction' = { + table2Version = 140 ; + indicatorOfParameter = 249 ; + } +#2D wave spectra (multiple) +'2D wave spectra (multiple)' = { + table2Version = 140 ; + indicatorOfParameter = 250 ; + } +#2D wave spectra (single) +'2D wave spectra (single)' = { + table2Version = 140 ; + indicatorOfParameter = 251 ; + } +#Wave spectral kurtosis +'Wave spectral kurtosis' = { + table2Version = 140 ; + indicatorOfParameter = 252 ; + } +#Benjamin-Feir index +'Benjamin-Feir index' = { + table2Version = 140 ; + indicatorOfParameter = 253 ; + } +#Wave spectral peakedness +'Wave spectral peakedness' = { + table2Version = 140 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 140 ; + indicatorOfParameter = 255 ; + } +#Ocean potential temperature +'Ocean potential temperature' = { + table2Version = 150 ; + indicatorOfParameter = 129 ; + } +#Ocean salinity +'Ocean salinity' = { + table2Version = 150 ; + indicatorOfParameter = 130 ; + } +#Ocean potential density +'Ocean potential density' = { + table2Version = 150 ; + indicatorOfParameter = 131 ; + } +#Ocean U wind component +'Ocean U wind component' = { + table2Version = 150 ; + indicatorOfParameter = 133 ; + } +#Ocean V wind component +'Ocean V wind component' = { + table2Version = 150 ; + indicatorOfParameter = 134 ; + } +#Ocean W wind component +'Ocean W wind component' = { + table2Version = 150 ; + indicatorOfParameter = 135 ; + } +#Richardson number +'Richardson number' = { + table2Version = 150 ; + indicatorOfParameter = 137 ; + } +#U*V product +'U*V product' = { + table2Version = 150 ; + indicatorOfParameter = 139 ; + } +#U*T product +'U*T product' = { + table2Version = 150 ; + indicatorOfParameter = 140 ; + } +#V*T product +'V*T product' = { + table2Version = 150 ; + indicatorOfParameter = 141 ; + } +#U*U product +'U*U product' = { + table2Version = 150 ; + indicatorOfParameter = 142 ; + } +#V*V product +'V*V product' = { + table2Version = 150 ; + indicatorOfParameter = 143 ; + } +#UV - U~V~ +'UV - U~V~' = { + table2Version = 150 ; + indicatorOfParameter = 144 ; + } +#UT - U~T~ +'UT - U~T~' = { + table2Version = 150 ; + indicatorOfParameter = 145 ; + } +#VT - V~T~ +'VT - V~T~' = { + table2Version = 150 ; + indicatorOfParameter = 146 ; + } +#UU - U~U~ +'UU - U~U~' = { + table2Version = 150 ; + indicatorOfParameter = 147 ; + } +#VV - V~V~ +'VV - V~V~' = { + table2Version = 150 ; + indicatorOfParameter = 148 ; + } +#Sea level +'Sea level' = { + table2Version = 150 ; + indicatorOfParameter = 152 ; + } +#Barotropic stream function +'Barotropic stream function' = { + table2Version = 150 ; + indicatorOfParameter = 153 ; + } +#Mixed layer depth +'Mixed layer depth' = { + table2Version = 150 ; + indicatorOfParameter = 154 ; + } +#Depth +'Depth' = { + table2Version = 150 ; + indicatorOfParameter = 155 ; + } +#U stress +'U stress' = { + table2Version = 150 ; + indicatorOfParameter = 168 ; + } +#V stress +'V stress' = { + table2Version = 150 ; + indicatorOfParameter = 169 ; + } +#Turbulent kinetic energy input +'Turbulent kinetic energy input' = { + table2Version = 150 ; + indicatorOfParameter = 170 ; + } +#Net surface heat flux +'Net surface heat flux' = { + table2Version = 150 ; + indicatorOfParameter = 171 ; + } +#Surface solar radiation +'Surface solar radiation' = { + table2Version = 150 ; + indicatorOfParameter = 172 ; + } +#P-E +'P-E' = { + table2Version = 150 ; + indicatorOfParameter = 173 ; + } +#Diagnosed sea surface temperature error +'Diagnosed sea surface temperature error' = { + table2Version = 150 ; + indicatorOfParameter = 180 ; + } +#Heat flux correction +'Heat flux correction' = { + table2Version = 150 ; + indicatorOfParameter = 181 ; + } +#Observed sea surface temperature +'Observed sea surface temperature' = { + table2Version = 150 ; + indicatorOfParameter = 182 ; + } +#Observed heat flux +'Observed heat flux' = { + table2Version = 150 ; + indicatorOfParameter = 183 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 150 ; + indicatorOfParameter = 255 ; + } +#In situ Temperature +'In situ Temperature' = { + table2Version = 151 ; + indicatorOfParameter = 128 ; + } +#Ocean potential temperature +'Ocean potential temperature' = { + table2Version = 151 ; + indicatorOfParameter = 129 ; + } +#Salinity +'Salinity' = { + table2Version = 151 ; + indicatorOfParameter = 130 ; + } +#Ocean current zonal component +'Ocean current zonal component' = { + table2Version = 151 ; + indicatorOfParameter = 131 ; + } +#Ocean current meridional component +'Ocean current meridional component' = { + table2Version = 151 ; + indicatorOfParameter = 132 ; + } +#Ocean current vertical component +'Ocean current vertical component' = { + table2Version = 151 ; + indicatorOfParameter = 133 ; + } +#Modulus of strain rate tensor +'Modulus of strain rate tensor' = { + table2Version = 151 ; + indicatorOfParameter = 134 ; + } +#Vertical viscosity +'Vertical viscosity' = { + table2Version = 151 ; + indicatorOfParameter = 135 ; + } +#Vertical diffusivity +'Vertical diffusivity' = { + table2Version = 151 ; + indicatorOfParameter = 136 ; + } +#Bottom level Depth +'Bottom level Depth' = { + table2Version = 151 ; + indicatorOfParameter = 137 ; + } +#Sigma-theta +'Sigma-theta' = { + table2Version = 151 ; + indicatorOfParameter = 138 ; + } +#Richardson number +'Richardson number' = { + table2Version = 151 ; + indicatorOfParameter = 139 ; + } +#UV product +'UV product' = { + table2Version = 151 ; + indicatorOfParameter = 140 ; + } +#UT product +'UT product' = { + table2Version = 151 ; + indicatorOfParameter = 141 ; + } +#VT product +'VT product' = { + table2Version = 151 ; + indicatorOfParameter = 142 ; + } +#UU product +'UU product' = { + table2Version = 151 ; + indicatorOfParameter = 143 ; + } +#VV product +'VV product' = { + table2Version = 151 ; + indicatorOfParameter = 144 ; + } +#Sea level +'Sea level' = { + table2Version = 151 ; + indicatorOfParameter = 145 ; + } +#Sea level previous timestep +'Sea level previous timestep' = { + table2Version = 151 ; + indicatorOfParameter = 146 ; + } +#Barotropic stream function +'Barotropic stream function' = { + table2Version = 151 ; + indicatorOfParameter = 147 ; + } +#Mixed layer depth +'Mixed layer depth' = { + table2Version = 151 ; + indicatorOfParameter = 148 ; + } +#Bottom Pressure (equivalent height) +'Bottom Pressure (equivalent height)' = { + table2Version = 151 ; + indicatorOfParameter = 149 ; + } +#Steric height +'Steric height' = { + table2Version = 151 ; + indicatorOfParameter = 150 ; + } +#Curl of Wind Stress +'Curl of Wind Stress' = { + table2Version = 151 ; + indicatorOfParameter = 151 ; + } +#Divergence of wind stress +'Divergence of wind stress' = { + table2Version = 151 ; + indicatorOfParameter = 152 ; + } +#U stress +'U stress' = { + table2Version = 151 ; + indicatorOfParameter = 153 ; + } +#V stress +'V stress' = { + table2Version = 151 ; + indicatorOfParameter = 154 ; + } +#Turbulent kinetic energy input +'Turbulent kinetic energy input' = { + table2Version = 151 ; + indicatorOfParameter = 155 ; + } +#Net surface heat flux +'Net surface heat flux' = { + table2Version = 151 ; + indicatorOfParameter = 156 ; + } +#Absorbed solar radiation +'Absorbed solar radiation' = { + table2Version = 151 ; + indicatorOfParameter = 157 ; + } +#Precipitation - evaporation +'Precipitation - evaporation' = { + table2Version = 151 ; + indicatorOfParameter = 158 ; + } +#Specified sea surface temperature +'Specified sea surface temperature' = { + table2Version = 151 ; + indicatorOfParameter = 159 ; + } +#Specified surface heat flux +'Specified surface heat flux' = { + table2Version = 151 ; + indicatorOfParameter = 160 ; + } +#Diagnosed sea surface temperature error +'Diagnosed sea surface temperature error' = { + table2Version = 151 ; + indicatorOfParameter = 161 ; + } +#Heat flux correction +'Heat flux correction' = { + table2Version = 151 ; + indicatorOfParameter = 162 ; + } +#20 degrees isotherm depth +'20 degrees isotherm depth' = { + table2Version = 151 ; + indicatorOfParameter = 163 ; + } +#Average potential temperature in the upper 300m +'Average potential temperature in the upper 300m' = { + table2Version = 151 ; + indicatorOfParameter = 164 ; + } +#Vertically integrated zonal velocity (previous time step) +'Vertically integrated zonal velocity (previous time step)' = { + table2Version = 151 ; + indicatorOfParameter = 165 ; + } +#Vertically Integrated meridional velocity (previous time step) +'Vertically Integrated meridional velocity (previous time step)' = { + table2Version = 151 ; + indicatorOfParameter = 166 ; + } +#Vertically integrated zonal volume transport +'Vertically integrated zonal volume transport' = { + table2Version = 151 ; + indicatorOfParameter = 167 ; + } +#Vertically integrated meridional volume transport +'Vertically integrated meridional volume transport' = { + table2Version = 151 ; + indicatorOfParameter = 168 ; + } +#Vertically integrated zonal heat transport +'Vertically integrated zonal heat transport' = { + table2Version = 151 ; + indicatorOfParameter = 169 ; + } +#Vertically integrated meridional heat transport +'Vertically integrated meridional heat transport' = { + table2Version = 151 ; + indicatorOfParameter = 170 ; + } +#U velocity maximum +'U velocity maximum' = { + table2Version = 151 ; + indicatorOfParameter = 171 ; + } +#Depth of the velocity maximum +'Depth of the velocity maximum' = { + table2Version = 151 ; + indicatorOfParameter = 172 ; + } +#Salinity maximum +'Salinity maximum' = { + table2Version = 151 ; + indicatorOfParameter = 173 ; + } +#Depth of salinity maximum +'Depth of salinity maximum' = { + table2Version = 151 ; + indicatorOfParameter = 174 ; + } +#Average salinity in the upper 300m +'Average salinity in the upper 300m' = { + table2Version = 151 ; + indicatorOfParameter = 175 ; + } +#Layer Thickness at scalar points +'Layer Thickness at scalar points' = { + table2Version = 151 ; + indicatorOfParameter = 176 ; + } +#Layer Thickness at vector points +'Layer Thickness at vector points' = { + table2Version = 151 ; + indicatorOfParameter = 177 ; + } +#Potential temperature increment +'Potential temperature increment' = { + table2Version = 151 ; + indicatorOfParameter = 178 ; + } +#Potential temperature analysis error +'Potential temperature analysis error' = { + table2Version = 151 ; + indicatorOfParameter = 179 ; + } +#Background potential temperature +'Background potential temperature' = { + table2Version = 151 ; + indicatorOfParameter = 180 ; + } +#Analysed potential temperature +'Analysed potential temperature' = { + table2Version = 151 ; + indicatorOfParameter = 181 ; + } +#Potential temperature background error +'Potential temperature background error' = { + table2Version = 151 ; + indicatorOfParameter = 182 ; + } +#Analysed salinity +'Analysed salinity' = { + table2Version = 151 ; + indicatorOfParameter = 183 ; + } +#Salinity increment +'Salinity increment' = { + table2Version = 151 ; + indicatorOfParameter = 184 ; + } +#Estimated Bias in Temperature +'Estimated Bias in Temperature' = { + table2Version = 151 ; + indicatorOfParameter = 185 ; + } +#Estimated Bias in Salinity +'Estimated Bias in Salinity' = { + table2Version = 151 ; + indicatorOfParameter = 186 ; + } +#Zonal Velocity increment (from balance operator) +'Zonal Velocity increment (from balance operator)' = { + table2Version = 151 ; + indicatorOfParameter = 187 ; + } +#Meridional Velocity increment (from balance operator) +'Meridional Velocity increment (from balance operator)' = { + table2Version = 151 ; + indicatorOfParameter = 188 ; + } +#Salinity increment (from salinity data) +'Salinity increment (from salinity data)' = { + table2Version = 151 ; + indicatorOfParameter = 190 ; + } +#Salinity analysis error +'Salinity analysis error' = { + table2Version = 151 ; + indicatorOfParameter = 191 ; + } +#Background Salinity +'Background Salinity' = { + table2Version = 151 ; + indicatorOfParameter = 192 ; + } +#Salinity background error +'Salinity background error' = { + table2Version = 151 ; + indicatorOfParameter = 194 ; + } +#Estimated temperature bias from assimilation +'Estimated temperature bias from assimilation' = { + table2Version = 151 ; + indicatorOfParameter = 199 ; + } +#Estimated salinity bias from assimilation +'Estimated salinity bias from assimilation' = { + table2Version = 151 ; + indicatorOfParameter = 200 ; + } +#Temperature increment from relaxation term +'Temperature increment from relaxation term' = { + table2Version = 151 ; + indicatorOfParameter = 201 ; + } +#Salinity increment from relaxation term +'Salinity increment from relaxation term' = { + table2Version = 151 ; + indicatorOfParameter = 202 ; + } +#Bias in the zonal pressure gradient (applied) +'Bias in the zonal pressure gradient (applied)' = { + table2Version = 151 ; + indicatorOfParameter = 203 ; + } +#Bias in the meridional pressure gradient (applied) +'Bias in the meridional pressure gradient (applied)' = { + table2Version = 151 ; + indicatorOfParameter = 204 ; + } +#Estimated temperature bias from relaxation +'Estimated temperature bias from relaxation' = { + table2Version = 151 ; + indicatorOfParameter = 205 ; + } +#Estimated salinity bias from relaxation +'Estimated salinity bias from relaxation' = { + table2Version = 151 ; + indicatorOfParameter = 206 ; + } +#First guess bias in temperature +'First guess bias in temperature' = { + table2Version = 151 ; + indicatorOfParameter = 207 ; + } +#First guess bias in salinity +'First guess bias in salinity' = { + table2Version = 151 ; + indicatorOfParameter = 208 ; + } +#Applied bias in pressure +'Applied bias in pressure' = { + table2Version = 151 ; + indicatorOfParameter = 209 ; + } +#FG bias in pressure +'FG bias in pressure' = { + table2Version = 151 ; + indicatorOfParameter = 210 ; + } +#Bias in temperature(applied) +'Bias in temperature(applied)' = { + table2Version = 151 ; + indicatorOfParameter = 211 ; + } +#Bias in salinity (applied) +'Bias in salinity (applied)' = { + table2Version = 151 ; + indicatorOfParameter = 212 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 151 ; + indicatorOfParameter = 255 ; + } +#10 metre wind gust during averaging time +'10 metre wind gust during averaging time' = { + table2Version = 160 ; + indicatorOfParameter = 49 ; + } +#vertical velocity (pressure) +'vertical velocity (pressure)' = { + table2Version = 160 ; + indicatorOfParameter = 135 ; + } +#Precipitable water content +'Precipitable water content' = { + table2Version = 160 ; + indicatorOfParameter = 137 ; + } +#Soil wetness level 1 +'Soil wetness level 1' = { + table2Version = 160 ; + indicatorOfParameter = 140 ; + } +#Snow depth +'Snow depth' = { + table2Version = 160 ; + indicatorOfParameter = 141 ; + } +#Large-scale precipitation +'Large-scale precipitation' = { + table2Version = 160 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'Convective precipitation' = { + table2Version = 160 ; + indicatorOfParameter = 143 ; + } +#Snowfall +'Snowfall' = { + table2Version = 160 ; + indicatorOfParameter = 144 ; + } +#Height +'Height' = { + table2Version = 160 ; + indicatorOfParameter = 156 ; + } +#Relative humidity +'Relative humidity' = { + table2Version = 160 ; + indicatorOfParameter = 157 ; + } +#Soil wetness level 2 +'Soil wetness level 2' = { + table2Version = 160 ; + indicatorOfParameter = 171 ; + } +#East-West surface stress +'East-West surface stress' = { + table2Version = 160 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'North-South surface stress' = { + table2Version = 160 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'Evaporation' = { + table2Version = 160 ; + indicatorOfParameter = 182 ; + } +#Soil wetness level 3 +'Soil wetness level 3' = { + table2Version = 160 ; + indicatorOfParameter = 184 ; + } +#Skin reservoir content +'Skin reservoir content' = { + table2Version = 160 ; + indicatorOfParameter = 198 ; + } +#Percentage of vegetation +'Percentage of vegetation' = { + table2Version = 160 ; + indicatorOfParameter = 199 ; + } +#Maximum temperature at 2 metres during averaging time +'Maximum temperature at 2 metres during averaging time' = { + table2Version = 160 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres during averaging time +'Minimum temperature at 2 metres during averaging time' = { + table2Version = 160 ; + indicatorOfParameter = 202 ; + } +#Runoff +'Runoff' = { + table2Version = 160 ; + indicatorOfParameter = 205 ; + } +#Standard deviation of geopotential +'Standard deviation of geopotential' = { + table2Version = 160 ; + indicatorOfParameter = 206 ; + } +#Covariance of temperature and geopotential +'Covariance of temperature and geopotential' = { + table2Version = 160 ; + indicatorOfParameter = 207 ; + } +#Standard deviation of temperature +'Standard deviation of temperature' = { + table2Version = 160 ; + indicatorOfParameter = 208 ; + } +#Covariance of specific humidity and geopotential +'Covariance of specific humidity and geopotential' = { + table2Version = 160 ; + indicatorOfParameter = 209 ; + } +#Covariance of specific humidity and temperature +'Covariance of specific humidity and temperature' = { + table2Version = 160 ; + indicatorOfParameter = 210 ; + } +#Standard deviation of specific humidity +'Standard deviation of specific humidity' = { + table2Version = 160 ; + indicatorOfParameter = 211 ; + } +#Covariance of U component and geopotential +'Covariance of U component and geopotential' = { + table2Version = 160 ; + indicatorOfParameter = 212 ; + } +#Covariance of U component and temperature +'Covariance of U component and temperature' = { + table2Version = 160 ; + indicatorOfParameter = 213 ; + } +#Covariance of U component and specific humidity +'Covariance of U component and specific humidity' = { + table2Version = 160 ; + indicatorOfParameter = 214 ; + } +#Standard deviation of U velocity +'Standard deviation of U velocity' = { + table2Version = 160 ; + indicatorOfParameter = 215 ; + } +#Covariance of V component and geopotential +'Covariance of V component and geopotential' = { + table2Version = 160 ; + indicatorOfParameter = 216 ; + } +#Covariance of V component and temperature +'Covariance of V component and temperature' = { + table2Version = 160 ; + indicatorOfParameter = 217 ; + } +#Covariance of V component and specific humidity +'Covariance of V component and specific humidity' = { + table2Version = 160 ; + indicatorOfParameter = 218 ; + } +#Covariance of V component and U component +'Covariance of V component and U component' = { + table2Version = 160 ; + indicatorOfParameter = 219 ; + } +#Standard deviation of V component +'Standard deviation of V component' = { + table2Version = 160 ; + indicatorOfParameter = 220 ; + } +#Covariance of W component and geopotential +'Covariance of W component and geopotential' = { + table2Version = 160 ; + indicatorOfParameter = 221 ; + } +#Covariance of W component and temperature +'Covariance of W component and temperature' = { + table2Version = 160 ; + indicatorOfParameter = 222 ; + } +#Covariance of W component and specific humidity +'Covariance of W component and specific humidity' = { + table2Version = 160 ; + indicatorOfParameter = 223 ; + } +#Covariance of W component and U component +'Covariance of W component and U component' = { + table2Version = 160 ; + indicatorOfParameter = 224 ; + } +#Covariance of W component and V component +'Covariance of W component and V component' = { + table2Version = 160 ; + indicatorOfParameter = 225 ; + } +#Standard deviation of vertical velocity +'Standard deviation of vertical velocity' = { + table2Version = 160 ; + indicatorOfParameter = 226 ; + } +#Instantaneous surface heat flux +'Instantaneous surface heat flux' = { + table2Version = 160 ; + indicatorOfParameter = 231 ; + } +#Convective snowfall +'Convective snowfall' = { + table2Version = 160 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall +'Large scale snowfall' = { + table2Version = 160 ; + indicatorOfParameter = 240 ; + } +#Cloud liquid water content +'Cloud liquid water content' = { + table2Version = 160 ; + indicatorOfParameter = 241 ; + } +#Cloud cover +'Cloud cover' = { + table2Version = 160 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo +'Forecast albedo' = { + table2Version = 160 ; + indicatorOfParameter = 243 ; + } +#10 metre wind speed +'10 metre wind speed' = { + table2Version = 160 ; + indicatorOfParameter = 246 ; + } +#Momentum flux +'Momentum flux' = { + table2Version = 160 ; + indicatorOfParameter = 247 ; + } +#Gravity wave dissipation flux +'Gravity wave dissipation flux' = { + table2Version = 160 ; + indicatorOfParameter = 249 ; + } +#Heaviside beta function +'Heaviside beta function' = { + table2Version = 160 ; + indicatorOfParameter = 254 ; + } +#Surface geopotential +'Surface geopotential' = { + table2Version = 162 ; + indicatorOfParameter = 51 ; + } +#Vertical integral of mass of atmosphere +'Vertical integral of mass of atmosphere' = { + table2Version = 162 ; + indicatorOfParameter = 53 ; + } +#Vertical integral of temperature +'Vertical integral of temperature' = { + table2Version = 162 ; + indicatorOfParameter = 54 ; + } +#Vertical integral of water vapour +'Vertical integral of water vapour' = { + table2Version = 162 ; + indicatorOfParameter = 55 ; + } +#Vertical integral of cloud liquid water +'Vertical integral of cloud liquid water' = { + table2Version = 162 ; + indicatorOfParameter = 56 ; + } +#Vertical integral of cloud frozen water +'Vertical integral of cloud frozen water' = { + table2Version = 162 ; + indicatorOfParameter = 57 ; + } +#Vertical integral of ozone +'Vertical integral of ozone' = { + table2Version = 162 ; + indicatorOfParameter = 58 ; + } +#Vertical integral of kinetic energy +'Vertical integral of kinetic energy' = { + table2Version = 162 ; + indicatorOfParameter = 59 ; + } +#Vertical integral of thermal energy +'Vertical integral of thermal energy' = { + table2Version = 162 ; + indicatorOfParameter = 60 ; + } +#Vertical integral of potential+internal energy +'Vertical integral of potential+internal energy' = { + table2Version = 162 ; + indicatorOfParameter = 61 ; + } +#Vertical integral of potential+internal+latent energy +'Vertical integral of potential+internal+latent energy' = { + table2Version = 162 ; + indicatorOfParameter = 62 ; + } +#Vertical integral of total energy +'Vertical integral of total energy' = { + table2Version = 162 ; + indicatorOfParameter = 63 ; + } +#Vertical integral of energy conversion +'Vertical integral of energy conversion' = { + table2Version = 162 ; + indicatorOfParameter = 64 ; + } +#Vertical integral of eastward mass flux +'Vertical integral of eastward mass flux' = { + table2Version = 162 ; + indicatorOfParameter = 65 ; + } +#Vertical integral of northward mass flux +'Vertical integral of northward mass flux' = { + table2Version = 162 ; + indicatorOfParameter = 66 ; + } +#Vertical integral of eastward kinetic energy flux +'Vertical integral of eastward kinetic energy flux' = { + table2Version = 162 ; + indicatorOfParameter = 67 ; + } +#Vertical integral of northward kinetic energy flux +'Vertical integral of northward kinetic energy flux' = { + table2Version = 162 ; + indicatorOfParameter = 68 ; + } +#Vertical integral of eastward heat flux +'Vertical integral of eastward heat flux' = { + table2Version = 162 ; + indicatorOfParameter = 69 ; + } +#Vertical integral of northward heat flux +'Vertical integral of northward heat flux' = { + table2Version = 162 ; + indicatorOfParameter = 70 ; + } +#Vertical integral of eastward water vapour flux +'Vertical integral of eastward water vapour flux' = { + table2Version = 162 ; + indicatorOfParameter = 71 ; + } +#Vertical integral of northward water vapour flux +'Vertical integral of northward water vapour flux' = { + table2Version = 162 ; + indicatorOfParameter = 72 ; + } +#Vertical integral of eastward geopotential flux +'Vertical integral of eastward geopotential flux' = { + table2Version = 162 ; + indicatorOfParameter = 73 ; + } +#Vertical integral of northward geopotential flux +'Vertical integral of northward geopotential flux' = { + table2Version = 162 ; + indicatorOfParameter = 74 ; + } +#Vertical integral of eastward total energy flux +'Vertical integral of eastward total energy flux' = { + table2Version = 162 ; + indicatorOfParameter = 75 ; + } +#Vertical integral of northward total energy flux +'Vertical integral of northward total energy flux' = { + table2Version = 162 ; + indicatorOfParameter = 76 ; + } +#Vertical integral of eastward ozone flux +'Vertical integral of eastward ozone flux' = { + table2Version = 162 ; + indicatorOfParameter = 77 ; + } +#Vertical integral of northward ozone flux +'Vertical integral of northward ozone flux' = { + table2Version = 162 ; + indicatorOfParameter = 78 ; + } +#Vertical integral of divergence of mass flux +'Vertical integral of divergence of mass flux' = { + table2Version = 162 ; + indicatorOfParameter = 81 ; + } +#Vertical integral of divergence of kinetic energy flux +'Vertical integral of divergence of kinetic energy flux' = { + table2Version = 162 ; + indicatorOfParameter = 82 ; + } +#Vertical integral of divergence of thermal energy flux +'Vertical integral of divergence of thermal energy flux' = { + table2Version = 162 ; + indicatorOfParameter = 83 ; + } +#Vertical integral of divergence of moisture flux +'Vertical integral of divergence of moisture flux' = { + table2Version = 162 ; + indicatorOfParameter = 84 ; + } +#Vertical integral of divergence of geopotential flux +'Vertical integral of divergence of geopotential flux' = { + table2Version = 162 ; + indicatorOfParameter = 85 ; + } +#Vertical integral of divergence of total energy flux +'Vertical integral of divergence of total energy flux' = { + table2Version = 162 ; + indicatorOfParameter = 86 ; + } +#Vertical integral of divergence of ozone flux +'Vertical integral of divergence of ozone flux' = { + table2Version = 162 ; + indicatorOfParameter = 87 ; + } +#Tendency of short wave radiation +'Tendency of short wave radiation' = { + table2Version = 162 ; + indicatorOfParameter = 100 ; + } +#Tendency of long wave radiation +'Tendency of long wave radiation' = { + table2Version = 162 ; + indicatorOfParameter = 101 ; + } +#Tendency of clear sky short wave radiation +'Tendency of clear sky short wave radiation' = { + table2Version = 162 ; + indicatorOfParameter = 102 ; + } +#Tendency of clear sky long wave radiation +'Tendency of clear sky long wave radiation' = { + table2Version = 162 ; + indicatorOfParameter = 103 ; + } +#Updraught mass flux +'Updraught mass flux' = { + table2Version = 162 ; + indicatorOfParameter = 104 ; + } +#Downdraught mass flux +'Downdraught mass flux' = { + table2Version = 162 ; + indicatorOfParameter = 105 ; + } +#Updraught detrainment rate +'Updraught detrainment rate' = { + table2Version = 162 ; + indicatorOfParameter = 106 ; + } +#Downdraught detrainment rate +'Downdraught detrainment rate' = { + table2Version = 162 ; + indicatorOfParameter = 107 ; + } +#Total precipitation flux +'Total precipitation flux' = { + table2Version = 162 ; + indicatorOfParameter = 108 ; + } +#Turbulent diffusion coefficient for heat +'Turbulent diffusion coefficient for heat' = { + table2Version = 162 ; + indicatorOfParameter = 109 ; + } +#Tendency of temperature due to physics +'Tendency of temperature due to physics' = { + table2Version = 162 ; + indicatorOfParameter = 110 ; + } +#Tendency of specific humidity due to physics +'Tendency of specific humidity due to physics' = { + table2Version = 162 ; + indicatorOfParameter = 111 ; + } +#Tendency of u component due to physics +'Tendency of u component due to physics' = { + table2Version = 162 ; + indicatorOfParameter = 112 ; + } +#Tendency of v component due to physics +'Tendency of v component due to physics' = { + table2Version = 162 ; + indicatorOfParameter = 113 ; + } +#Variance of geopotential +'Variance of geopotential' = { + table2Version = 162 ; + indicatorOfParameter = 206 ; + } +#Covariance of geopotential/temperature +'Covariance of geopotential/temperature' = { + table2Version = 162 ; + indicatorOfParameter = 207 ; + } +#Variance of temperature +'Variance of temperature' = { + table2Version = 162 ; + indicatorOfParameter = 208 ; + } +#Covariance of geopotential/specific humidity +'Covariance of geopotential/specific humidity' = { + table2Version = 162 ; + indicatorOfParameter = 209 ; + } +#Covariance of temperature/specific humidity +'Covariance of temperature/specific humidity' = { + table2Version = 162 ; + indicatorOfParameter = 210 ; + } +#Variance of specific humidity +'Variance of specific humidity' = { + table2Version = 162 ; + indicatorOfParameter = 211 ; + } +#Covariance of u component/geopotential +'Covariance of u component/geopotential' = { + table2Version = 162 ; + indicatorOfParameter = 212 ; + } +#Covariance of u component/temperature +'Covariance of u component/temperature' = { + table2Version = 162 ; + indicatorOfParameter = 213 ; + } +#Covariance of u component/specific humidity +'Covariance of u component/specific humidity' = { + table2Version = 162 ; + indicatorOfParameter = 214 ; + } +#Variance of u component +'Variance of u component' = { + table2Version = 162 ; + indicatorOfParameter = 215 ; + } +#Covariance of v component/geopotential +'Covariance of v component/geopotential' = { + table2Version = 162 ; + indicatorOfParameter = 216 ; + } +#Covariance of v component/temperature +'Covariance of v component/temperature' = { + table2Version = 162 ; + indicatorOfParameter = 217 ; + } +#Covariance of v component/specific humidity +'Covariance of v component/specific humidity' = { + table2Version = 162 ; + indicatorOfParameter = 218 ; + } +#Covariance of v component/u component +'Covariance of v component/u component' = { + table2Version = 162 ; + indicatorOfParameter = 219 ; + } +#Variance of v component +'Variance of v component' = { + table2Version = 162 ; + indicatorOfParameter = 220 ; + } +#Covariance of omega/geopotential +'Covariance of omega/geopotential' = { + table2Version = 162 ; + indicatorOfParameter = 221 ; + } +#Covariance of omega/temperature +'Covariance of omega/temperature' = { + table2Version = 162 ; + indicatorOfParameter = 222 ; + } +#Covariance of omega/specific humidity +'Covariance of omega/specific humidity' = { + table2Version = 162 ; + indicatorOfParameter = 223 ; + } +#Covariance of omega/u component +'Covariance of omega/u component' = { + table2Version = 162 ; + indicatorOfParameter = 224 ; + } +#Covariance of omega/v component +'Covariance of omega/v component' = { + table2Version = 162 ; + indicatorOfParameter = 225 ; + } +#Variance of omega +'Variance of omega' = { + table2Version = 162 ; + indicatorOfParameter = 226 ; + } +#Variance of surface pressure +'Variance of surface pressure' = { + table2Version = 162 ; + indicatorOfParameter = 227 ; + } +#Variance of relative humidity +'Variance of relative humidity' = { + table2Version = 162 ; + indicatorOfParameter = 229 ; + } +#Covariance of u component/ozone +'Covariance of u component/ozone' = { + table2Version = 162 ; + indicatorOfParameter = 230 ; + } +#Covariance of v component/ozone +'Covariance of v component/ozone' = { + table2Version = 162 ; + indicatorOfParameter = 231 ; + } +#Covariance of omega/ozone +'Covariance of omega/ozone' = { + table2Version = 162 ; + indicatorOfParameter = 232 ; + } +#Variance of ozone +'Variance of ozone' = { + table2Version = 162 ; + indicatorOfParameter = 233 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 162 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'Total soil moisture' = { + table2Version = 170 ; + indicatorOfParameter = 149 ; + } +#Soil wetness level 2 +'Soil wetness level 2' = { + table2Version = 170 ; + indicatorOfParameter = 171 ; + } +#Top net thermal radiation +'Top net thermal radiation' = { + table2Version = 170 ; + indicatorOfParameter = 179 ; + } +#Stream function anomaly +'Stream function anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 1 ; + } +#Velocity potential anomaly +'Velocity potential anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 2 ; + } +#Potential temperature anomaly +'Potential temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature anomaly +'Equivalent potential temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature anomaly +'Saturated equivalent potential temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind anomaly +'U component of divergent wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind anomaly +'V component of divergent wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind anomaly +'U component of rotational wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind anomaly +'V component of rotational wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature anomaly +'Unbalanced component of temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure anomaly +'Unbalanced component of logarithm of surface pressure anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence anomaly +'Unbalanced component of divergence anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 23 ; + } +#Lake cover anomaly +'Lake cover anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover anomaly +'Low vegetation cover anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover anomaly +'High vegetation cover anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation anomaly +'Type of low vegetation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation anomaly +'Type of high vegetation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover anomaly +'Sea-ice cover anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 31 ; + } +#Snow albedo anomaly +'Snow albedo anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 32 ; + } +#Snow density anomaly +'Snow density anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature anomaly +'Sea surface temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature anomaly layer 1 +'Ice surface temperature anomaly layer 1' = { + table2Version = 171 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature anomaly layer 2 +'Ice surface temperature anomaly layer 2' = { + table2Version = 171 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature anomaly layer 3 +'Ice surface temperature anomaly layer 3' = { + table2Version = 171 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature anomaly layer 4 +'Ice surface temperature anomaly layer 4' = { + table2Version = 171 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water anomaly layer 1 +'Volumetric soil water anomaly layer 1' = { + table2Version = 171 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water anomaly layer 2 +'Volumetric soil water anomaly layer 2' = { + table2Version = 171 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water anomaly layer 3 +'Volumetric soil water anomaly layer 3' = { + table2Version = 171 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water anomaly layer 4 +'Volumetric soil water anomaly layer 4' = { + table2Version = 171 ; + indicatorOfParameter = 42 ; + } +#Soil type anomaly +'Soil type anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation anomaly +'Snow evaporation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 44 ; + } +#Snowmelt anomaly +'Snowmelt anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 45 ; + } +#Solar duration anomaly +'Solar duration anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation anomaly +'Direct solar radiation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress anomaly +'Magnitude of surface stress anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust anomaly +'10 metre wind gust anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction anomaly +'Large-scale precipitation fraction anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature in the last 24 hours anomaly +'Maximum 2 metre temperature in the last 24 hours anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature in the last 24 hours anomaly +'Minimum 2 metre temperature in the last 24 hours anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential anomaly +'Montgomery potential anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 53 ; + } +#Pressure anomaly +'Pressure anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours anomaly +'Mean 2 metre temperature in the last 24 hours anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours anomaly +'Mean 2 metre dewpoint temperature in the last 24 hours anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface anomaly +'Downward UV radiation at the surface anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface anomaly +'Photosynthetically active radiation at the surface anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy anomaly +'Convective available potential energy anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity anomaly +'Potential vorticity anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations anomaly +'Total precipitation from observations anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 61 ; + } +#Observation count anomaly +'Observation count anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference anomaly +'Start time for skin temperature difference anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference anomaly +'Finish time for skin temperature difference anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference anomaly +'Skin temperature difference anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 65 ; + } +#Total column liquid water anomaly +'Total column liquid water anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 78 ; + } +#Total column ice water anomaly +'Total column ice water anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 79 ; + } +#Vertically integrated total energy anomaly +'Vertically integrated total energy anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'Generic parameter for sensitive area prediction' = { + table2Version = 171 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide anomaly +'Atmospheric tide anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 127 ; + } +#Budget values anomaly +'Budget values anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 128 ; + } +#Geopotential anomaly +'Geopotential anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 129 ; + } +#Temperature anomaly +'Temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 130 ; + } +#U component of wind anomaly +'U component of wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 131 ; + } +#V component of wind anomaly +'V component of wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 132 ; + } +#Specific humidity anomaly +'Specific humidity anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 133 ; + } +#Surface pressure anomaly +'Surface pressure anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity (pressure) anomaly +'Vertical velocity (pressure) anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 135 ; + } +#Total column water anomaly +'Total column water anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour anomaly +'Total column water vapour anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 137 ; + } +#Relative vorticity anomaly +'Relative vorticity anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 138 ; + } +#Soil temperature anomaly level 1 +'Soil temperature anomaly level 1' = { + table2Version = 171 ; + indicatorOfParameter = 139 ; + } +#Soil wetness anomaly level 1 +'Soil wetness anomaly level 1' = { + table2Version = 171 ; + indicatorOfParameter = 140 ; + } +#Snow depth anomaly +'Snow depth anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'Stratiform precipitation (Large-scale precipitation) anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation anomaly +'Convective precipitation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) anomaly +'Snowfall (convective + stratiform) anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation anomaly +'Boundary layer dissipation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux anomaly +'Surface sensible heat flux anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux anomaly +'Surface latent heat flux anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 147 ; + } +#Charnock anomaly +'Charnock anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation anomaly +'Surface net radiation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 149 ; + } +#Top net radiation anomaly +'Top net radiation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure anomaly +'Mean sea level pressure anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure anomaly +'Logarithm of surface pressure anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate anomaly +'Short-wave heating rate anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate anomaly +'Long-wave heating rate anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 154 ; + } +#Relative divergence anomaly +'Relative divergence anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 155 ; + } +#Height anomaly +'Height anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 156 ; + } +#Relative humidity anomaly +'Relative humidity anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure anomaly +'Tendency of surface pressure anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height anomaly +'Boundary layer height anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography anomaly +'Standard deviation of orography anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography anomaly +'Anisotropy of sub-gridscale orography anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography anomaly +'Angle of sub-gridscale orography anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography anomaly +'Slope of sub-gridscale orography anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover anomaly +'Total cloud cover anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component anomaly +'10 metre U wind component anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component anomaly +'10 metre V wind component anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature anomaly +'2 metre temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature anomaly +'2 metre dewpoint temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards anomaly +'Surface solar radiation downwards anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 169 ; + } +#Soil temperature anomaly level 2 +'Soil temperature anomaly level 2' = { + table2Version = 171 ; + indicatorOfParameter = 170 ; + } +#Soil wetness anomaly level 2 +'Soil wetness anomaly level 2' = { + table2Version = 171 ; + indicatorOfParameter = 171 ; + } +#Surface roughness anomaly +'Surface roughness anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 173 ; + } +#Albedo anomaly +'Albedo anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards anomaly +'Surface thermal radiation downwards anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation anomaly +'Surface net solar radiation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation anomaly +'Surface net thermal radiation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation anomaly +'Top net solar radiation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation anomaly +'Top net thermal radiation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress anomaly +'East-West surface stress anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress anomaly +'North-South surface stress anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 181 ; + } +#Evaporation anomaly +'Evaporation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 182 ; + } +#Soil temperature anomaly level 3 +'Soil temperature anomaly level 3' = { + table2Version = 171 ; + indicatorOfParameter = 183 ; + } +#Soil wetness anomaly level 3 +'Soil wetness anomaly level 3' = { + table2Version = 171 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover anomaly +'Convective cloud cover anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover anomaly +'Low cloud cover anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover anomaly +'Medium cloud cover anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 187 ; + } +#High cloud cover anomaly +'High cloud cover anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration anomaly +'Sunshine duration anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance anomaly +'East-West component of sub-gridscale orographic variance anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance anomaly +'North-South component of sub-gridscale orographic variance anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance anomaly +'North-West/South-East component of sub-gridscale orographic variance anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance anomaly +'North-East/South-West component of sub-gridscale orographic variance anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature anomaly +'Brightness temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress anomaly +'Longitudinal component of gravity wave stress anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress anomaly +'Meridional component of gravity wave stress anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation anomaly +'Gravity wave dissipation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content anomaly +'Skin reservoir content anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction anomaly +'Vegetation fraction anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography anomaly +'Variance of sub-gridscale orography anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres anomaly +'Maximum temperature at 2 metres anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres anomaly +'Minimum temperature at 2 metres anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio anomaly +'Ozone mass mixing ratio anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights anomaly +'Precipitation analysis weights anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 204 ; + } +#Runoff anomaly +'Runoff anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 205 ; + } +#Total column ozone anomaly +'Total column ozone anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed anomaly +'10 metre wind speed anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation clear sky anomaly +'Top net solar radiation clear sky anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation clear sky anomaly +'Top net thermal radiation clear sky anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation clear sky anomaly +'Surface net solar radiation clear sky anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'Surface net thermal radiation, clear sky anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 211 ; + } +#Solar insolation anomaly +'Solar insolation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation anomaly +'Diabatic heating by radiation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion anomaly +'Diabatic heating by vertical diffusion anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection anomaly +'Diabatic heating by cumulus convection anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating by large-scale condensation anomaly +'Diabatic heating by large-scale condensation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind anomaly +'Vertical diffusion of zonal wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind anomaly +'Vertical diffusion of meridional wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency anomaly +'East-West gravity wave drag tendency anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency anomaly +'North-South gravity wave drag tendency anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind anomaly +'Convective tendency of zonal wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind anomaly +'Convective tendency of meridional wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity anomaly +'Vertical diffusion of humidity anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection anomaly +'Humidity tendency by cumulus convection anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation anomaly +'Humidity tendency by large-scale condensation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity anomaly +'Change from removal of negative humidity anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 227 ; + } +#Total precipitation anomaly +'Total precipitation anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress anomaly +'Instantaneous X surface stress anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress anomaly +'Instantaneous Y surface stress anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux anomaly +'Instantaneous surface heat flux anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux anomaly +'Instantaneous moisture flux anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity anomaly +'Apparent surface humidity anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat anomaly +'Logarithm of surface roughness length for heat anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 234 ; + } +#Skin temperature anomaly +'Skin temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 anomaly +'Soil temperature level 4 anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 anomaly +'Soil wetness level 4 anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer anomaly +'Temperature of snow layer anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall anomaly +'Convective snowfall anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall anomaly +'Large scale snowfall anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency anomaly +'Accumulated cloud fraction tendency anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency anomaly +'Accumulated liquid water tendency anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo anomaly +'Forecast albedo anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness anomaly +'Forecast surface roughness anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat anomaly +'Forecast logarithm of surface roughness for heat anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 245 ; + } +#Cloud liquid water content anomaly +'Cloud liquid water content anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 246 ; + } +#Cloud ice water content anomaly +'Cloud ice water content anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 247 ; + } +#Cloud cover anomaly +'Cloud cover anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency anomaly +'Accumulated ice water tendency anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 249 ; + } +#Ice age anomaly +'Ice age anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature anomaly +'Adiabatic tendency of temperature anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity anomaly +'Adiabatic tendency of humidity anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind anomaly +'Adiabatic tendency of zonal wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind anomaly +'Adiabatic tendency of meridional wind anomaly' = { + table2Version = 171 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 171 ; + indicatorOfParameter = 255 ; + } +#Snow evaporation +'Snow evaporation' = { + table2Version = 172 ; + indicatorOfParameter = 44 ; + } +#Snowmelt +'Snowmelt' = { + table2Version = 172 ; + indicatorOfParameter = 45 ; + } +#Magnitude of surface stress +'Magnitude of surface stress' = { + table2Version = 172 ; + indicatorOfParameter = 48 ; + } +#Large-scale precipitation fraction +'Large-scale precipitation fraction' = { + table2Version = 172 ; + indicatorOfParameter = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) +'Stratiform precipitation (Large-scale precipitation)' = { + table2Version = 172 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'Convective precipitation' = { + table2Version = 172 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) +'Snowfall (convective + stratiform)' = { + table2Version = 172 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation +'Boundary layer dissipation' = { + table2Version = 172 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux +'Surface sensible heat flux' = { + table2Version = 172 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux +'Surface latent heat flux' = { + table2Version = 172 ; + indicatorOfParameter = 147 ; + } +#Surface net radiation +'Surface net radiation' = { + table2Version = 172 ; + indicatorOfParameter = 149 ; + } +#Short-wave heating rate +'Short-wave heating rate' = { + table2Version = 172 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate +'Long-wave heating rate' = { + table2Version = 172 ; + indicatorOfParameter = 154 ; + } +#Surface solar radiation downwards +'Surface solar radiation downwards' = { + table2Version = 172 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards +'Surface thermal radiation downwards' = { + table2Version = 172 ; + indicatorOfParameter = 175 ; + } +#Surface solar radiation +'Surface solar radiation' = { + table2Version = 172 ; + indicatorOfParameter = 176 ; + } +#Surface thermal radiation +'Surface thermal radiation' = { + table2Version = 172 ; + indicatorOfParameter = 177 ; + } +#Top solar radiation +'Top solar radiation' = { + table2Version = 172 ; + indicatorOfParameter = 178 ; + } +#Top thermal radiation +'Top thermal radiation' = { + table2Version = 172 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress +'East-West surface stress' = { + table2Version = 172 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'North-South surface stress' = { + table2Version = 172 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'Evaporation' = { + table2Version = 172 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration +'Sunshine duration' = { + table2Version = 172 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress +'Longitudinal component of gravity wave stress' = { + table2Version = 172 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress +'Meridional component of gravity wave stress' = { + table2Version = 172 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation +'Gravity wave dissipation' = { + table2Version = 172 ; + indicatorOfParameter = 197 ; + } +#Runoff +'Runoff' = { + table2Version = 172 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky +'Top net solar radiation, clear sky' = { + table2Version = 172 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky +'Top net thermal radiation, clear sky' = { + table2Version = 172 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky +'Surface net solar radiation, clear sky' = { + table2Version = 172 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky +'Surface net thermal radiation, clear sky' = { + table2Version = 172 ; + indicatorOfParameter = 211 ; + } +#Solar insolation +'Solar insolation' = { + table2Version = 172 ; + indicatorOfParameter = 212 ; + } +#Total precipitation +'Total precipitation' = { + table2Version = 172 ; + indicatorOfParameter = 228 ; + } +#Convective snowfall +'Convective snowfall' = { + table2Version = 172 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall +'Large scale snowfall' = { + table2Version = 172 ; + indicatorOfParameter = 240 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 172 ; + indicatorOfParameter = 255 ; + } +#Snow evaporation anomaly +'Snow evaporation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 44 ; + } +#Snowmelt anomaly +'Snowmelt anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 45 ; + } +#Magnitude of surface stress anomaly +'Magnitude of surface stress anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 48 ; + } +#Large-scale precipitation fraction anomaly +'Large-scale precipitation fraction anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'Stratiform precipitation (Large-scale precipitation) anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation anomaly +'Convective precipitation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) anomalous rate of accumulation +'Snowfall (convective + stratiform) anomalous rate of accumulation' = { + table2Version = 173 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation anomaly +'Boundary layer dissipation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux anomaly +'Surface sensible heat flux anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux anomaly +'Surface latent heat flux anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 147 ; + } +#Surface net radiation anomaly +'Surface net radiation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 149 ; + } +#Short-wave heating rate anomaly +'Short-wave heating rate anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate anomaly +'Long-wave heating rate anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 154 ; + } +#Surface solar radiation downwards anomaly +'Surface solar radiation downwards anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards anomaly +'Surface thermal radiation downwards anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 175 ; + } +#Surface solar radiation anomaly +'Surface solar radiation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 176 ; + } +#Surface thermal radiation anomaly +'Surface thermal radiation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 177 ; + } +#Top solar radiation anomaly +'Top solar radiation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 178 ; + } +#Top thermal radiation anomaly +'Top thermal radiation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress anomaly +'East-West surface stress anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress anomaly +'North-South surface stress anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 181 ; + } +#Evaporation anomaly +'Evaporation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration anomalous rate of accumulation +'Sunshine duration anomalous rate of accumulation' = { + table2Version = 173 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress anomaly +'Longitudinal component of gravity wave stress anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress anomaly +'Meridional component of gravity wave stress anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation anomaly +'Gravity wave dissipation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 197 ; + } +#Runoff anomaly +'Runoff anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky anomaly +'Top net solar radiation, clear sky anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky anomaly +'Top net thermal radiation, clear sky anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky anomaly +'Surface net solar radiation, clear sky anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'Surface net thermal radiation, clear sky anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 211 ; + } +#Solar insolation anomaly +'Solar insolation anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 212 ; + } +#Total precipitation anomalous rate of accumulation +'Total precipitation anomalous rate of accumulation' = { + table2Version = 173 ; + indicatorOfParameter = 228 ; + } +#Convective snowfall anomaly +'Convective snowfall anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall anomaly +'Large scale snowfall anomaly' = { + table2Version = 173 ; + indicatorOfParameter = 240 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 173 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'Total soil moisture' = { + table2Version = 174 ; + indicatorOfParameter = 6 ; + } +#Surface runoff +'Surface runoff' = { + table2Version = 174 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff +'Sub-surface runoff' = { + table2Version = 174 ; + indicatorOfParameter = 9 ; + } +#Fraction of sea-ice in sea +'Fraction of sea-ice in sea' = { + table2Version = 174 ; + indicatorOfParameter = 31 ; + } +#Open-sea surface temperature +'Open-sea surface temperature' = { + table2Version = 174 ; + indicatorOfParameter = 34 ; + } +#Volumetric soil water layer 1 +'Volumetric soil water layer 1' = { + table2Version = 174 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'Volumetric soil water layer 2' = { + table2Version = 174 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'Volumetric soil water layer 3' = { + table2Version = 174 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'Volumetric soil water layer 4' = { + table2Version = 174 ; + indicatorOfParameter = 42 ; + } +#10 metre wind gust in the last 24 hours +'10 metre wind gust in the last 24 hours' = { + table2Version = 174 ; + indicatorOfParameter = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'1.5m temperature - mean in the last 24 hours' = { + table2Version = 174 ; + indicatorOfParameter = 55 ; + } +#Net primary productivity +'Net primary productivity' = { + table2Version = 174 ; + indicatorOfParameter = 83 ; + } +#10m U wind over land +'10m U wind over land' = { + table2Version = 174 ; + indicatorOfParameter = 85 ; + } +#10m V wind over land +'10m V wind over land' = { + table2Version = 174 ; + indicatorOfParameter = 86 ; + } +#1.5m temperature over land +'1.5m temperature over land' = { + table2Version = 174 ; + indicatorOfParameter = 87 ; + } +#1.5m dewpoint temperature over land +'1.5m dewpoint temperature over land' = { + table2Version = 174 ; + indicatorOfParameter = 88 ; + } +#Top incoming solar radiation +'Top incoming solar radiation' = { + table2Version = 174 ; + indicatorOfParameter = 89 ; + } +#Top outgoing solar radiation +'Top outgoing solar radiation' = { + table2Version = 174 ; + indicatorOfParameter = 90 ; + } +#Mean sea surface temperature +'Mean sea surface temperature' = { + table2Version = 174 ; + indicatorOfParameter = 94 ; + } +#1.5m specific humidity +'1.5m specific humidity' = { + table2Version = 174 ; + indicatorOfParameter = 95 ; + } +#Sea-ice thickness +'Sea-ice thickness' = { + table2Version = 174 ; + indicatorOfParameter = 98 ; + } +#Liquid water potential temperature +'Liquid water potential temperature' = { + table2Version = 174 ; + indicatorOfParameter = 99 ; + } +#Ocean ice concentration +'Ocean ice concentration' = { + table2Version = 174 ; + indicatorOfParameter = 110 ; + } +#Ocean mean ice depth +'Ocean mean ice depth' = { + table2Version = 174 ; + indicatorOfParameter = 111 ; + } +#Soil temperature layer 1 +'Soil temperature layer 1' = { + table2Version = 174 ; + indicatorOfParameter = 139 ; + } +#Average potential temperature in upper 293.4m +'Average potential temperature in upper 293.4m' = { + table2Version = 174 ; + indicatorOfParameter = 164 ; + } +#1.5m temperature +'1.5m temperature' = { + table2Version = 174 ; + indicatorOfParameter = 167 ; + } +#1.5m dewpoint temperature +'1.5m dewpoint temperature' = { + table2Version = 174 ; + indicatorOfParameter = 168 ; + } +#Soil temperature layer 2 +'Soil temperature layer 2' = { + table2Version = 174 ; + indicatorOfParameter = 170 ; + } +#Average salinity in upper 293.4m +'Average salinity in upper 293.4m' = { + table2Version = 174 ; + indicatorOfParameter = 175 ; + } +#Soil temperature layer 3 +'Soil temperature layer 3' = { + table2Version = 174 ; + indicatorOfParameter = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'1.5m temperature - maximum in the last 24 hours' = { + table2Version = 174 ; + indicatorOfParameter = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'1.5m temperature - minimum in the last 24 hours' = { + table2Version = 174 ; + indicatorOfParameter = 202 ; + } +#Soil temperature layer 4 +'Soil temperature layer 4' = { + table2Version = 174 ; + indicatorOfParameter = 236 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 174 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'Total soil moisture' = { + table2Version = 175 ; + indicatorOfParameter = 6 ; + } +#Fraction of sea-ice in sea +'Fraction of sea-ice in sea' = { + table2Version = 175 ; + indicatorOfParameter = 31 ; + } +#Open-sea surface temperature +'Open-sea surface temperature' = { + table2Version = 175 ; + indicatorOfParameter = 34 ; + } +#Volumetric soil water layer 1 +'Volumetric soil water layer 1' = { + table2Version = 175 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'Volumetric soil water layer 2' = { + table2Version = 175 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'Volumetric soil water layer 3' = { + table2Version = 175 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'Volumetric soil water layer 4' = { + table2Version = 175 ; + indicatorOfParameter = 42 ; + } +#10m wind gust in the last 24 hours +'10m wind gust in the last 24 hours' = { + table2Version = 175 ; + indicatorOfParameter = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'1.5m temperature - mean in the last 24 hours' = { + table2Version = 175 ; + indicatorOfParameter = 55 ; + } +#Net primary productivity +'Net primary productivity' = { + table2Version = 175 ; + indicatorOfParameter = 83 ; + } +#10m U wind over land +'10m U wind over land' = { + table2Version = 175 ; + indicatorOfParameter = 85 ; + } +#10m V wind over land +'10m V wind over land' = { + table2Version = 175 ; + indicatorOfParameter = 86 ; + } +#1.5m temperature over land +'1.5m temperature over land' = { + table2Version = 175 ; + indicatorOfParameter = 87 ; + } +#1.5m dewpoint temperature over land +'1.5m dewpoint temperature over land' = { + table2Version = 175 ; + indicatorOfParameter = 88 ; + } +#Top incoming solar radiation +'Top incoming solar radiation' = { + table2Version = 175 ; + indicatorOfParameter = 89 ; + } +#Top outgoing solar radiation +'Top outgoing solar radiation' = { + table2Version = 175 ; + indicatorOfParameter = 90 ; + } +#Ocean ice concentration +'Ocean ice concentration' = { + table2Version = 175 ; + indicatorOfParameter = 110 ; + } +#Ocean mean ice depth +'Ocean mean ice depth' = { + table2Version = 175 ; + indicatorOfParameter = 111 ; + } +#Soil temperature layer 1 +'Soil temperature layer 1' = { + table2Version = 175 ; + indicatorOfParameter = 139 ; + } +#Average potential temperature in upper 293.4m +'Average potential temperature in upper 293.4m' = { + table2Version = 175 ; + indicatorOfParameter = 164 ; + } +#1.5m temperature +'1.5m temperature' = { + table2Version = 175 ; + indicatorOfParameter = 167 ; + } +#1.5m dewpoint temperature +'1.5m dewpoint temperature' = { + table2Version = 175 ; + indicatorOfParameter = 168 ; + } +#Soil temperature layer 2 +'Soil temperature layer 2' = { + table2Version = 175 ; + indicatorOfParameter = 170 ; + } +#Average salinity in upper 293.4m +'Average salinity in upper 293.4m' = { + table2Version = 175 ; + indicatorOfParameter = 175 ; + } +#Soil temperature layer 3 +'Soil temperature layer 3' = { + table2Version = 175 ; + indicatorOfParameter = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'1.5m temperature - maximum in the last 24 hours' = { + table2Version = 175 ; + indicatorOfParameter = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'1.5m temperature - minimum in the last 24 hours' = { + table2Version = 175 ; + indicatorOfParameter = 202 ; + } +#Soil temperature layer 4 +'Soil temperature layer 4' = { + table2Version = 175 ; + indicatorOfParameter = 236 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 175 ; + indicatorOfParameter = 255 ; + } +#Total soil wetness +'Total soil wetness' = { + table2Version = 180 ; + indicatorOfParameter = 149 ; + } +#Surface net solar radiation +'Surface net solar radiation' = { + table2Version = 180 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation +'Surface net thermal radiation' = { + table2Version = 180 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation +'Top net solar radiation' = { + table2Version = 180 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation +'Top net thermal radiation' = { + table2Version = 180 ; + indicatorOfParameter = 179 ; + } +#Snow depth +'Snow depth' = { + table2Version = 190 ; + indicatorOfParameter = 141 ; + } +#Field capacity +'Field capacity' = { + table2Version = 190 ; + indicatorOfParameter = 170 ; + } +#Wilting point +'Wilting point' = { + table2Version = 190 ; + indicatorOfParameter = 171 ; + } +#Roughness length +'Roughness length' = { + table2Version = 190 ; + indicatorOfParameter = 173 ; + } +#Total soil moisture +'Total soil moisture' = { + table2Version = 190 ; + indicatorOfParameter = 229 ; + } +#2 metre dewpoint temperature difference +'2 metre dewpoint temperature difference' = { + table2Version = 200 ; + indicatorOfParameter = 168 ; + } +#downward shortwave radiant flux density +'downward shortwave radiant flux density' = { + table2Version = 201 ; + indicatorOfParameter = 1 ; + } +#upward shortwave radiant flux density +'upward shortwave radiant flux density' = { + table2Version = 201 ; + indicatorOfParameter = 2 ; + } +#downward longwave radiant flux density +'downward longwave radiant flux density' = { + table2Version = 201 ; + indicatorOfParameter = 3 ; + } +#upward longwave radiant flux density +'upward longwave radiant flux density' = { + table2Version = 201 ; + indicatorOfParameter = 4 ; + } +#downwd photosynthetic active radiant flux density +'downwd photosynthetic active radiant flux density' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + } +#net shortwave flux +'net shortwave flux' = { + table2Version = 201 ; + indicatorOfParameter = 6 ; + } +#net longwave flux +'net longwave flux' = { + table2Version = 201 ; + indicatorOfParameter = 7 ; + } +#total net radiative flux density +'total net radiative flux density' = { + table2Version = 201 ; + indicatorOfParameter = 8 ; + } +#downw shortw radiant flux density, cloudfree part +'downw shortw radiant flux density, cloudfree part' = { + table2Version = 201 ; + indicatorOfParameter = 9 ; + } +#upw shortw radiant flux density, cloudy part +'upw shortw radiant flux density, cloudy part' = { + table2Version = 201 ; + indicatorOfParameter = 10 ; + } +#downw longw radiant flux density, cloudfree part +'downw longw radiant flux density, cloudfree part' = { + table2Version = 201 ; + indicatorOfParameter = 11 ; + } +#upw longw radiant flux density, cloudy part +'upw longw radiant flux density, cloudy part' = { + table2Version = 201 ; + indicatorOfParameter = 12 ; + } +#shortwave radiative heating rate +'shortwave radiative heating rate' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + } +#longwave radiative heating rate +'longwave radiative heating rate' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + } +#total radiative heating rate +'total radiative heating rate' = { + table2Version = 201 ; + indicatorOfParameter = 15 ; + } +#soil heat flux, surface +'soil heat flux, surface' = { + table2Version = 201 ; + indicatorOfParameter = 16 ; + } +#soil heat flux, bottom of layer +'soil heat flux, bottom of layer' = { + table2Version = 201 ; + indicatorOfParameter = 17 ; + } +#fractional cloud cover +'fractional cloud cover' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + } +#cloud cover, grid scale +'cloud cover, grid scale' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + } +#specific cloud water content +'specific cloud water content' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + } +#cloud water content, grid scale, vert integrated +'cloud water content, grid scale, vert integrated' = { + table2Version = 201 ; + indicatorOfParameter = 32 ; + } +#specific cloud ice content, grid scale +'specific cloud ice content, grid scale' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + } +#cloud ice content, grid scale, vert integrated +'cloud ice content, grid scale, vert integrated' = { + table2Version = 201 ; + indicatorOfParameter = 34 ; + } +#specific rainwater content, grid scale +'specific rainwater content, grid scale' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + } +#specific snow content, grid scale +'specific snow content, grid scale' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + } +#specific rainwater content, gs, vert. integrated +'specific rainwater content, gs, vert. integrated' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + } +#specific snow content, gs, vert. integrated +'specific snow content, gs, vert. integrated' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + } +#total column water +'total column water' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + } +#vert. integral of divergence of tot. water content +'vert. integral of divergence of tot. water content' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + } +#cloud covers CH_CM_CL (000...888) +'cloud covers CH_CM_CL (000...888)' = { + table2Version = 201 ; + indicatorOfParameter = 50 ; + } +#cloud cover CH (0..8) +'cloud cover CH (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'cloud cover CM (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'cloud cover CL (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#total cloud cover (0..8) +'total cloud cover (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 54 ; + } +#fog (0..8) +'fog (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 55 ; + } +#fog +'fog' = { + table2Version = 201 ; + indicatorOfParameter = 56 ; + } +#cloud cover, convective cirrus +'cloud cover, convective cirrus' = { + table2Version = 201 ; + indicatorOfParameter = 60 ; + } +#specific cloud water content, convective clouds +'specific cloud water content, convective clouds' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + } +#cloud water content, conv clouds, vert integrated +'cloud water content, conv clouds, vert integrated' = { + table2Version = 201 ; + indicatorOfParameter = 62 ; + } +#specific cloud ice content, convective clouds +'specific cloud ice content, convective clouds' = { + table2Version = 201 ; + indicatorOfParameter = 63 ; + } +#cloud ice content, conv clouds, vert integrated +'cloud ice content, conv clouds, vert integrated' = { + table2Version = 201 ; + indicatorOfParameter = 64 ; + } +#convective mass flux +'convective mass flux' = { + table2Version = 201 ; + indicatorOfParameter = 65 ; + } +#Updraft velocity, convection +'Updraft velocity, convection' = { + table2Version = 201 ; + indicatorOfParameter = 66 ; + } +#entrainment parameter, convection +'entrainment parameter, convection' = { + table2Version = 201 ; + indicatorOfParameter = 67 ; + } +#cloud base, convective clouds (above msl) +'cloud base, convective clouds (above msl)' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + } +#cloud top, convective clouds (above msl) +'cloud top, convective clouds (above msl)' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + } +#convective layers (00...77) (BKE) +'convective layers (00...77) (BKE)' = { + table2Version = 201 ; + indicatorOfParameter = 70 ; + } +#KO-index +'KO-index' = { + table2Version = 201 ; + indicatorOfParameter = 71 ; + } +#convection base index +'convection base index' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + } +#convection top index +'convection top index' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + } +#convective temperature tendency +'convective temperature tendency' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + } +#convective tendency of specific humidity +'convective tendency of specific humidity' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + } +#convective tendency of total heat +'convective tendency of total heat' = { + table2Version = 201 ; + indicatorOfParameter = 76 ; + } +#convective tendency of total water +'convective tendency of total water' = { + table2Version = 201 ; + indicatorOfParameter = 77 ; + } +#convective momentum tendency (X-component) +'convective momentum tendency (X-component)' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + } +#convective momentum tendency (Y-component) +'convective momentum tendency (Y-component)' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + } +#convective vorticity tendency +'convective vorticity tendency' = { + table2Version = 201 ; + indicatorOfParameter = 80 ; + } +#convective divergence tendency +'convective divergence tendency' = { + table2Version = 201 ; + indicatorOfParameter = 81 ; + } +#top of dry convection (above msl) +'top of dry convection (above msl)' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + } +#dry convection top index +'dry convection top index' = { + table2Version = 201 ; + indicatorOfParameter = 83 ; + } +#height of 0 degree Celsius isotherm above msl +'height of 0 degree Celsius isotherm above msl' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + } +#height of snow-fall limit +'height of snow-fall limit' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + } +#spec. content of precip. particles +'spec. content of precip. particles' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + } +#surface precipitation rate, rain, grid scale +'surface precipitation rate, rain, grid scale' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + } +#surface precipitation rate, snow, grid scale +'surface precipitation rate, snow, grid scale' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + } +#surface precipitation amount, rain, grid scale +'surface precipitation amount, rain, grid scale' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + } +#surface precipitation rate, rain, convective +'surface precipitation rate, rain, convective' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + } +#surface precipitation rate, snow, convective +'surface precipitation rate, snow, convective' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + } +#surface precipitation amount, rain, convective +'surface precipitation amount, rain, convective' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + } +#deviation of pressure from reference value +'deviation of pressure from reference value' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + } +#coefficient of horizontal diffusion +'coefficient of horizontal diffusion' = { + table2Version = 201 ; + indicatorOfParameter = 150 ; + } +#Maximum wind velocity +'Maximum wind velocity' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + } +#water content of interception store +'water content of interception store' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + } +#snow temperature +'snow temperature' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + } +#ice surface temperature +'ice surface temperature' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + } +#convective available potential energy +'convective available potential energy' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + } +#Indicates a missing value +'Indicates a missing value' = { + table2Version = 201 ; + indicatorOfParameter = 255 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'Sea Salt Aerosol (5 - 20 um) Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'Dust Aerosol (0.03 - 0.55 um) Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'Dust Aerosol (0.55 - 0.9 um) Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'Dust Aerosol (0.9 - 20 um) Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'Hydrophobic Organic Matter Aerosol Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'Hydrophilic Organic Matter Aerosol Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'Hydrophobic Black Carbon Aerosol Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'Hydrophilic Black Carbon Aerosol Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'Sulphate Aerosol Mixing Ratio' = { + table2Version = 210 ; + indicatorOfParameter = 11 ; + } +#Aerosol type 12 mixing ratio +'Aerosol type 12 mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 12 ; + } +#Aerosol type 1 source/gain accumulated +'Aerosol type 1 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 16 ; + } +#Aerosol type 2 source/gain accumulated +'Aerosol type 2 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 17 ; + } +#Aerosol type 3 source/gain accumulated +'Aerosol type 3 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 18 ; + } +#Aerosol type 4 source/gain accumulated +'Aerosol type 4 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 19 ; + } +#Aerosol type 5 source/gain accumulated +'Aerosol type 5 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 20 ; + } +#Aerosol type 6 source/gain accumulated +'Aerosol type 6 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 21 ; + } +#Aerosol type 7 source/gain accumulated +'Aerosol type 7 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 22 ; + } +#Aerosol type 8 source/gain accumulated +'Aerosol type 8 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 23 ; + } +#Aerosol type 9 source/gain accumulated +'Aerosol type 9 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 24 ; + } +#Aerosol type 10 source/gain accumulated +'Aerosol type 10 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 25 ; + } +#Aerosol type 11 source/gain accumulated +'Aerosol type 11 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 26 ; + } +#Aerosol type 12 source/gain accumulated +'Aerosol type 12 source/gain accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'Aerosol type 1 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'Aerosol type 2 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'Aerosol type 3 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'Aerosol type 4 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'Aerosol type 5 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'Aerosol type 6 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'Aerosol type 7 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'Aerosol type 8 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'Aerosol type 9 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'Aerosol type 10 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'Aerosol type 11 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'Aerosol type 12 sink/loss accumulated' = { + table2Version = 210 ; + indicatorOfParameter = 42 ; + } +#Aerosol precursor mixing ratio +'Aerosol precursor mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 46 ; + } +#Aerosol small mode mixing ratio +'Aerosol small mode mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 47 ; + } +#Aerosol large mode mixing ratio +'Aerosol large mode mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 48 ; + } +#Aerosol precursor optical depth +'Aerosol precursor optical depth' = { + table2Version = 210 ; + indicatorOfParameter = 49 ; + } +#Aerosol small mode optical depth +'Aerosol small mode optical depth' = { + table2Version = 210 ; + indicatorOfParameter = 50 ; + } +#Aerosol large mode optical depth +'Aerosol large mode optical depth' = { + table2Version = 210 ; + indicatorOfParameter = 51 ; + } +#Dust emission potential +'Dust emission potential' = { + table2Version = 210 ; + indicatorOfParameter = 52 ; + } +#Lifting threshold speed +'Lifting threshold speed' = { + table2Version = 210 ; + indicatorOfParameter = 53 ; + } +#Soil clay content +'Soil clay content' = { + table2Version = 210 ; + indicatorOfParameter = 54 ; + } +#Carbon Dioxide +'Carbon Dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 61 ; + } +#Methane +'Methane' = { + table2Version = 210 ; + indicatorOfParameter = 62 ; + } +#Nitrous oxide +'Nitrous oxide' = { + table2Version = 210 ; + indicatorOfParameter = 63 ; + } +#Total column Carbon Dioxide +'Total column Carbon Dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 64 ; + } +#Total column Methane +'Total column Methane' = { + table2Version = 210 ; + indicatorOfParameter = 65 ; + } +#Total column Nitrous oxide +'Total column Nitrous oxide' = { + table2Version = 210 ; + indicatorOfParameter = 66 ; + } +#Ocean flux of Carbon Dioxide +'Ocean flux of Carbon Dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'Natural biosphere flux of Carbon Dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'Anthropogenic emissions of Carbon Dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 69 ; + } +#Methane Surface Fluxes +'Methane Surface Fluxes' = { + table2Version = 210 ; + indicatorOfParameter = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'Methane loss rate due to radical hydroxyl (OH)' = { + table2Version = 210 ; + indicatorOfParameter = 71 ; + } +#Wildfire flux of Carbon Dioxide +'Wildfire flux of Carbon Dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 80 ; + } +#Wildfire flux of Carbon Monoxide +'Wildfire flux of Carbon Monoxide' = { + table2Version = 210 ; + indicatorOfParameter = 81 ; + } +#Wildfire flux of Methane +'Wildfire flux of Methane' = { + table2Version = 210 ; + indicatorOfParameter = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'Wildfire flux of Non-Methane Hydro-Carbons' = { + table2Version = 210 ; + indicatorOfParameter = 83 ; + } +#Wildfire flux of Hydrogen +'Wildfire flux of Hydrogen' = { + table2Version = 210 ; + indicatorOfParameter = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'Wildfire flux of Nitrogen Oxides NOx' = { + table2Version = 210 ; + indicatorOfParameter = 85 ; + } +#Wildfire flux of Nitrous Oxide +'Wildfire flux of Nitrous Oxide' = { + table2Version = 210 ; + indicatorOfParameter = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'Wildfire flux of Particulate Matter PM2.5' = { + table2Version = 210 ; + indicatorOfParameter = 87 ; + } +#Wildfire flux of Total Particulate Matter +'Wildfire flux of Total Particulate Matter' = { + table2Version = 210 ; + indicatorOfParameter = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'Wildfire flux of Total Carbon in Aerosols' = { + table2Version = 210 ; + indicatorOfParameter = 89 ; + } +#Wildfire flux of Organic Carbon +'Wildfire flux of Organic Carbon' = { + table2Version = 210 ; + indicatorOfParameter = 90 ; + } +#Wildfire flux of Black Carbon +'Wildfire flux of Black Carbon' = { + table2Version = 210 ; + indicatorOfParameter = 91 ; + } +#Wildfire overall flux of burnt Carbon +'Wildfire overall flux of burnt Carbon' = { + table2Version = 210 ; + indicatorOfParameter = 92 ; + } +#Wildfire fraction of C4 plants +'Wildfire fraction of C4 plants' = { + table2Version = 210 ; + indicatorOfParameter = 93 ; + } +#Wildfire vegetation map index +'Wildfire vegetation map index' = { + table2Version = 210 ; + indicatorOfParameter = 94 ; + } +#Wildfire Combustion Completeness +'Wildfire Combustion Completeness' = { + table2Version = 210 ; + indicatorOfParameter = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'Wildfire Fuel Load: Carbon per unit area' = { + table2Version = 210 ; + indicatorOfParameter = 96 ; + } +#Wildfire fraction of area observed +'Wildfire fraction of area observed' = { + table2Version = 210 ; + indicatorOfParameter = 97 ; + } +#Wildfire observed area +'Wildfire observed area' = { + table2Version = 210 ; + indicatorOfParameter = 98 ; + } +#Wildfire radiative power +'Wildfire radiative power' = { + table2Version = 210 ; + indicatorOfParameter = 99 ; + } +#Wildfire combustion rate +'Wildfire combustion rate' = { + table2Version = 210 ; + indicatorOfParameter = 100 ; + } +#Nitrogen dioxide +'Nitrogen dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 121 ; + } +#Sulphur dioxide +'Sulphur dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 122 ; + } +#Carbon monoxide +'Carbon monoxide' = { + table2Version = 210 ; + indicatorOfParameter = 123 ; + } +#Formaldehyde +'Formaldehyde' = { + table2Version = 210 ; + indicatorOfParameter = 124 ; + } +#Total column Nitrogen dioxide +'Total column Nitrogen dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 125 ; + } +#Total column Sulphur dioxide +'Total column Sulphur dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 126 ; + } +#Total column Carbon monoxide +'Total column Carbon monoxide' = { + table2Version = 210 ; + indicatorOfParameter = 127 ; + } +#Total column Formaldehyde +'Total column Formaldehyde' = { + table2Version = 210 ; + indicatorOfParameter = 128 ; + } +#Nitrogen Oxides +'Nitrogen Oxides' = { + table2Version = 210 ; + indicatorOfParameter = 129 ; + } +#Total Column Nitrogen Oxides +'Total Column Nitrogen Oxides' = { + table2Version = 210 ; + indicatorOfParameter = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'Reactive tracer 1 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 131 ; + } +#Total column GRG tracer 1 +'Total column GRG tracer 1' = { + table2Version = 210 ; + indicatorOfParameter = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'Reactive tracer 2 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 133 ; + } +#Total column GRG tracer 2 +'Total column GRG tracer 2' = { + table2Version = 210 ; + indicatorOfParameter = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'Reactive tracer 3 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 135 ; + } +#Total column GRG tracer 3 +'Total column GRG tracer 3' = { + table2Version = 210 ; + indicatorOfParameter = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'Reactive tracer 4 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 137 ; + } +#Total column GRG tracer 4 +'Total column GRG tracer 4' = { + table2Version = 210 ; + indicatorOfParameter = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'Reactive tracer 5 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 139 ; + } +#Total column GRG tracer 5 +'Total column GRG tracer 5' = { + table2Version = 210 ; + indicatorOfParameter = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'Reactive tracer 6 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 141 ; + } +#Total column GRG tracer 6 +'Total column GRG tracer 6' = { + table2Version = 210 ; + indicatorOfParameter = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'Reactive tracer 7 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 143 ; + } +#Total column GRG tracer 7 +'Total column GRG tracer 7' = { + table2Version = 210 ; + indicatorOfParameter = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'Reactive tracer 8 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 145 ; + } +#Total column GRG tracer 8 +'Total column GRG tracer 8' = { + table2Version = 210 ; + indicatorOfParameter = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'Reactive tracer 9 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 147 ; + } +#Total column GRG tracer 9 +'Total column GRG tracer 9' = { + table2Version = 210 ; + indicatorOfParameter = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'Reactive tracer 10 mass mixing ratio' = { + table2Version = 210 ; + indicatorOfParameter = 149 ; + } +#Total column GRG tracer 10 +'Total column GRG tracer 10' = { + table2Version = 210 ; + indicatorOfParameter = 150 ; + } +#Surface flux Nitrogen oxides +'Surface flux Nitrogen oxides' = { + table2Version = 210 ; + indicatorOfParameter = 151 ; + } +#Surface flux Nitrogen dioxide +'Surface flux Nitrogen dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 152 ; + } +#Surface flux Sulphur dioxide +'Surface flux Sulphur dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 153 ; + } +#Surface flux Carbon monoxide +'Surface flux Carbon monoxide' = { + table2Version = 210 ; + indicatorOfParameter = 154 ; + } +#Surface flux Formaldehyde +'Surface flux Formaldehyde' = { + table2Version = 210 ; + indicatorOfParameter = 155 ; + } +#Surface flux GEMS Ozone +'Surface flux GEMS Ozone' = { + table2Version = 210 ; + indicatorOfParameter = 156 ; + } +#Surface flux reactive tracer 1 +'Surface flux reactive tracer 1' = { + table2Version = 210 ; + indicatorOfParameter = 157 ; + } +#Surface flux reactive tracer 2 +'Surface flux reactive tracer 2' = { + table2Version = 210 ; + indicatorOfParameter = 158 ; + } +#Surface flux reactive tracer 3 +'Surface flux reactive tracer 3' = { + table2Version = 210 ; + indicatorOfParameter = 159 ; + } +#Surface flux reactive tracer 4 +'Surface flux reactive tracer 4' = { + table2Version = 210 ; + indicatorOfParameter = 160 ; + } +#Surface flux reactive tracer 5 +'Surface flux reactive tracer 5' = { + table2Version = 210 ; + indicatorOfParameter = 161 ; + } +#Surface flux reactive tracer 6 +'Surface flux reactive tracer 6' = { + table2Version = 210 ; + indicatorOfParameter = 162 ; + } +#Surface flux reactive tracer 7 +'Surface flux reactive tracer 7' = { + table2Version = 210 ; + indicatorOfParameter = 163 ; + } +#Surface flux reactive tracer 8 +'Surface flux reactive tracer 8' = { + table2Version = 210 ; + indicatorOfParameter = 164 ; + } +#Surface flux reactive tracer 9 +'Surface flux reactive tracer 9' = { + table2Version = 210 ; + indicatorOfParameter = 165 ; + } +#Surface flux reactive tracer 10 +'Surface flux reactive tracer 10' = { + table2Version = 210 ; + indicatorOfParameter = 166 ; + } +#Radon +'Radon' = { + table2Version = 210 ; + indicatorOfParameter = 181 ; + } +#Sulphur Hexafluoride +'Sulphur Hexafluoride' = { + table2Version = 210 ; + indicatorOfParameter = 182 ; + } +#Total column Radon +'Total column Radon' = { + table2Version = 210 ; + indicatorOfParameter = 183 ; + } +#Total column Sulphur Hexafluoride +'Total column Sulphur Hexafluoride' = { + table2Version = 210 ; + indicatorOfParameter = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'Anthropogenic Emissions of Sulphur Hexafluoride' = { + table2Version = 210 ; + indicatorOfParameter = 185 ; + } +#GEMS Ozone +'GEMS Ozone' = { + table2Version = 210 ; + indicatorOfParameter = 203 ; + } +#GEMS Total column ozone +'GEMS Total column ozone' = { + table2Version = 210 ; + indicatorOfParameter = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'Total Aerosol Optical Depth at 550nm' = { + table2Version = 210 ; + indicatorOfParameter = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'Sea Salt Aerosol Optical Depth at 550nm' = { + table2Version = 210 ; + indicatorOfParameter = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'Dust Aerosol Optical Depth at 550nm' = { + table2Version = 210 ; + indicatorOfParameter = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'Organic Matter Aerosol Optical Depth at 550nm' = { + table2Version = 210 ; + indicatorOfParameter = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'Black Carbon Aerosol Optical Depth at 550nm' = { + table2Version = 210 ; + indicatorOfParameter = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'Sulphate Aerosol Optical Depth at 550nm' = { + table2Version = 210 ; + indicatorOfParameter = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'Total Aerosol Optical Depth at 469nm' = { + table2Version = 210 ; + indicatorOfParameter = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'Total Aerosol Optical Depth at 670nm' = { + table2Version = 210 ; + indicatorOfParameter = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'Total Aerosol Optical Depth at 865nm' = { + table2Version = 210 ; + indicatorOfParameter = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'Total Aerosol Optical Depth at 1240nm' = { + table2Version = 210 ; + indicatorOfParameter = 216 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'Sea Salt Aerosol (5 - 20 um) Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'Dust Aerosol (0.03 - 0.55 um) Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'Dust Aerosol (0.55 - 0.9 um) Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'Dust Aerosol (0.9 - 20 um) Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'Hydrophobic Organic Matter Aerosol Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'Hydrophilic Organic Matter Aerosol Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'Hydrophobic Black Carbon Aerosol Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'Hydrophilic Black Carbon Aerosol Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'Sulphate Aerosol Mixing Ratio' = { + table2Version = 211 ; + indicatorOfParameter = 11 ; + } +#Aerosol type 12 mixing ratio +'Aerosol type 12 mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 12 ; + } +#Aerosol type 1 source/gain accumulated +'Aerosol type 1 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 16 ; + } +#Aerosol type 2 source/gain accumulated +'Aerosol type 2 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 17 ; + } +#Aerosol type 3 source/gain accumulated +'Aerosol type 3 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 18 ; + } +#Aerosol type 4 source/gain accumulated +'Aerosol type 4 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 19 ; + } +#Aerosol type 5 source/gain accumulated +'Aerosol type 5 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 20 ; + } +#Aerosol type 6 source/gain accumulated +'Aerosol type 6 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 21 ; + } +#Aerosol type 7 source/gain accumulated +'Aerosol type 7 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 22 ; + } +#Aerosol type 8 source/gain accumulated +'Aerosol type 8 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 23 ; + } +#Aerosol type 9 source/gain accumulated +'Aerosol type 9 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 24 ; + } +#Aerosol type 10 source/gain accumulated +'Aerosol type 10 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 25 ; + } +#Aerosol type 11 source/gain accumulated +'Aerosol type 11 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 26 ; + } +#Aerosol type 12 source/gain accumulated +'Aerosol type 12 source/gain accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'Aerosol type 1 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'Aerosol type 2 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'Aerosol type 3 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'Aerosol type 4 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'Aerosol type 5 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'Aerosol type 6 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'Aerosol type 7 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'Aerosol type 8 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'Aerosol type 9 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'Aerosol type 10 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'Aerosol type 11 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'Aerosol type 12 sink/loss accumulated' = { + table2Version = 211 ; + indicatorOfParameter = 42 ; + } +#Aerosol precursor mixing ratio +'Aerosol precursor mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 46 ; + } +#Aerosol small mode mixing ratio +'Aerosol small mode mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 47 ; + } +#Aerosol large mode mixing ratio +'Aerosol large mode mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 48 ; + } +#Aerosol precursor optical depth +'Aerosol precursor optical depth' = { + table2Version = 211 ; + indicatorOfParameter = 49 ; + } +#Aerosol small mode optical depth +'Aerosol small mode optical depth' = { + table2Version = 211 ; + indicatorOfParameter = 50 ; + } +#Aerosol large mode optical depth +'Aerosol large mode optical depth' = { + table2Version = 211 ; + indicatorOfParameter = 51 ; + } +#Dust emission potential +'Dust emission potential' = { + table2Version = 211 ; + indicatorOfParameter = 52 ; + } +#Lifting threshold speed +'Lifting threshold speed' = { + table2Version = 211 ; + indicatorOfParameter = 53 ; + } +#Soil clay content +'Soil clay content' = { + table2Version = 211 ; + indicatorOfParameter = 54 ; + } +#Carbon Dioxide +'Carbon Dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 61 ; + } +#Methane +'Methane' = { + table2Version = 211 ; + indicatorOfParameter = 62 ; + } +#Nitrous oxide +'Nitrous oxide' = { + table2Version = 211 ; + indicatorOfParameter = 63 ; + } +#Total column Carbon Dioxide +'Total column Carbon Dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 64 ; + } +#Total column Methane +'Total column Methane' = { + table2Version = 211 ; + indicatorOfParameter = 65 ; + } +#Total column Nitrous oxide +'Total column Nitrous oxide' = { + table2Version = 211 ; + indicatorOfParameter = 66 ; + } +#Ocean flux of Carbon Dioxide +'Ocean flux of Carbon Dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'Natural biosphere flux of Carbon Dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'Anthropogenic emissions of Carbon Dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 69 ; + } +#Methane Surface Fluxes +'Methane Surface Fluxes' = { + table2Version = 211 ; + indicatorOfParameter = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'Methane loss rate due to radical hydroxyl (OH)' = { + table2Version = 211 ; + indicatorOfParameter = 71 ; + } +#Wildfire flux of Carbon Dioxide +'Wildfire flux of Carbon Dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 80 ; + } +#Wildfire flux of Carbon Monoxide +'Wildfire flux of Carbon Monoxide' = { + table2Version = 211 ; + indicatorOfParameter = 81 ; + } +#Wildfire flux of Methane +'Wildfire flux of Methane' = { + table2Version = 211 ; + indicatorOfParameter = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'Wildfire flux of Non-Methane Hydro-Carbons' = { + table2Version = 211 ; + indicatorOfParameter = 83 ; + } +#Wildfire flux of Hydrogen +'Wildfire flux of Hydrogen' = { + table2Version = 211 ; + indicatorOfParameter = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'Wildfire flux of Nitrogen Oxides NOx' = { + table2Version = 211 ; + indicatorOfParameter = 85 ; + } +#Wildfire flux of Nitrous Oxide +'Wildfire flux of Nitrous Oxide' = { + table2Version = 211 ; + indicatorOfParameter = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'Wildfire flux of Particulate Matter PM2.5' = { + table2Version = 211 ; + indicatorOfParameter = 87 ; + } +#Wildfire flux of Total Particulate Matter +'Wildfire flux of Total Particulate Matter' = { + table2Version = 211 ; + indicatorOfParameter = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'Wildfire flux of Total Carbon in Aerosols' = { + table2Version = 211 ; + indicatorOfParameter = 89 ; + } +#Wildfire flux of Organic Carbon +'Wildfire flux of Organic Carbon' = { + table2Version = 211 ; + indicatorOfParameter = 90 ; + } +#Wildfire flux of Black Carbon +'Wildfire flux of Black Carbon' = { + table2Version = 211 ; + indicatorOfParameter = 91 ; + } +#Wildfire overall flux of burnt Carbon +'Wildfire overall flux of burnt Carbon' = { + table2Version = 211 ; + indicatorOfParameter = 92 ; + } +#Wildfire fraction of C4 plants +'Wildfire fraction of C4 plants' = { + table2Version = 211 ; + indicatorOfParameter = 93 ; + } +#Wildfire vegetation map index +'Wildfire vegetation map index' = { + table2Version = 211 ; + indicatorOfParameter = 94 ; + } +#Wildfire Combustion Completeness +'Wildfire Combustion Completeness' = { + table2Version = 211 ; + indicatorOfParameter = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'Wildfire Fuel Load: Carbon per unit area' = { + table2Version = 211 ; + indicatorOfParameter = 96 ; + } +#Wildfire fraction of area observed +'Wildfire fraction of area observed' = { + table2Version = 211 ; + indicatorOfParameter = 97 ; + } +#Wildfire observed area +'Wildfire observed area' = { + table2Version = 211 ; + indicatorOfParameter = 98 ; + } +#Wildfire radiative power +'Wildfire radiative power' = { + table2Version = 211 ; + indicatorOfParameter = 99 ; + } +#Wildfire combustion rate +'Wildfire combustion rate' = { + table2Version = 211 ; + indicatorOfParameter = 100 ; + } +#Nitrogen dioxide +'Nitrogen dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 121 ; + } +#Sulphur dioxide +'Sulphur dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 122 ; + } +#Carbon monoxide +'Carbon monoxide' = { + table2Version = 211 ; + indicatorOfParameter = 123 ; + } +#Formaldehyde +'Formaldehyde' = { + table2Version = 211 ; + indicatorOfParameter = 124 ; + } +#Total column Nitrogen dioxide +'Total column Nitrogen dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 125 ; + } +#Total column Sulphur dioxide +'Total column Sulphur dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 126 ; + } +#Total column Carbon monoxide +'Total column Carbon monoxide' = { + table2Version = 211 ; + indicatorOfParameter = 127 ; + } +#Total column Formaldehyde +'Total column Formaldehyde' = { + table2Version = 211 ; + indicatorOfParameter = 128 ; + } +#Nitrogen Oxides +'Nitrogen Oxides' = { + table2Version = 211 ; + indicatorOfParameter = 129 ; + } +#Total Column Nitrogen Oxides +'Total Column Nitrogen Oxides' = { + table2Version = 211 ; + indicatorOfParameter = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'Reactive tracer 1 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 131 ; + } +#Total column GRG tracer 1 +'Total column GRG tracer 1' = { + table2Version = 211 ; + indicatorOfParameter = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'Reactive tracer 2 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 133 ; + } +#Total column GRG tracer 2 +'Total column GRG tracer 2' = { + table2Version = 211 ; + indicatorOfParameter = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'Reactive tracer 3 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 135 ; + } +#Total column GRG tracer 3 +'Total column GRG tracer 3' = { + table2Version = 211 ; + indicatorOfParameter = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'Reactive tracer 4 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 137 ; + } +#Total column GRG tracer 4 +'Total column GRG tracer 4' = { + table2Version = 211 ; + indicatorOfParameter = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'Reactive tracer 5 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 139 ; + } +#Total column GRG tracer 5 +'Total column GRG tracer 5' = { + table2Version = 211 ; + indicatorOfParameter = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'Reactive tracer 6 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 141 ; + } +#Total column GRG tracer 6 +'Total column GRG tracer 6' = { + table2Version = 211 ; + indicatorOfParameter = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'Reactive tracer 7 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 143 ; + } +#Total column GRG tracer 7 +'Total column GRG tracer 7' = { + table2Version = 211 ; + indicatorOfParameter = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'Reactive tracer 8 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 145 ; + } +#Total column GRG tracer 8 +'Total column GRG tracer 8' = { + table2Version = 211 ; + indicatorOfParameter = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'Reactive tracer 9 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 147 ; + } +#Total column GRG tracer 9 +'Total column GRG tracer 9' = { + table2Version = 211 ; + indicatorOfParameter = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'Reactive tracer 10 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 149 ; + } +#Total column GRG tracer 10 +'Total column GRG tracer 10' = { + table2Version = 211 ; + indicatorOfParameter = 150 ; + } +#Surface flux Nitrogen oxides +'Surface flux Nitrogen oxides' = { + table2Version = 211 ; + indicatorOfParameter = 151 ; + } +#Surface flux Nitrogen dioxide +'Surface flux Nitrogen dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 152 ; + } +#Surface flux Sulphur dioxide +'Surface flux Sulphur dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 153 ; + } +#Surface flux Carbon monoxide +'Surface flux Carbon monoxide' = { + table2Version = 211 ; + indicatorOfParameter = 154 ; + } +#Surface flux Formaldehyde +'Surface flux Formaldehyde' = { + table2Version = 211 ; + indicatorOfParameter = 155 ; + } +#Surface flux GEMS Ozone +'Surface flux GEMS Ozone' = { + table2Version = 211 ; + indicatorOfParameter = 156 ; + } +#Surface flux reactive tracer 1 +'Surface flux reactive tracer 1' = { + table2Version = 211 ; + indicatorOfParameter = 157 ; + } +#Surface flux reactive tracer 2 +'Surface flux reactive tracer 2' = { + table2Version = 211 ; + indicatorOfParameter = 158 ; + } +#Surface flux reactive tracer 3 +'Surface flux reactive tracer 3' = { + table2Version = 211 ; + indicatorOfParameter = 159 ; + } +#Surface flux reactive tracer 4 +'Surface flux reactive tracer 4' = { + table2Version = 211 ; + indicatorOfParameter = 160 ; + } +#Surface flux reactive tracer 5 +'Surface flux reactive tracer 5' = { + table2Version = 211 ; + indicatorOfParameter = 161 ; + } +#Surface flux reactive tracer 6 +'Surface flux reactive tracer 6' = { + table2Version = 211 ; + indicatorOfParameter = 162 ; + } +#Surface flux reactive tracer 7 +'Surface flux reactive tracer 7' = { + table2Version = 211 ; + indicatorOfParameter = 163 ; + } +#Surface flux reactive tracer 8 +'Surface flux reactive tracer 8' = { + table2Version = 211 ; + indicatorOfParameter = 164 ; + } +#Surface flux reactive tracer 9 +'Surface flux reactive tracer 9' = { + table2Version = 211 ; + indicatorOfParameter = 165 ; + } +#Surface flux reactive tracer 10 +'Surface flux reactive tracer 10' = { + table2Version = 211 ; + indicatorOfParameter = 166 ; + } +#Radon +'Radon' = { + table2Version = 211 ; + indicatorOfParameter = 181 ; + } +#Sulphur Hexafluoride +'Sulphur Hexafluoride' = { + table2Version = 211 ; + indicatorOfParameter = 182 ; + } +#Total column Radon +'Total column Radon' = { + table2Version = 211 ; + indicatorOfParameter = 183 ; + } +#Total column Sulphur Hexafluoride +'Total column Sulphur Hexafluoride' = { + table2Version = 211 ; + indicatorOfParameter = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'Anthropogenic Emissions of Sulphur Hexafluoride' = { + table2Version = 211 ; + indicatorOfParameter = 185 ; + } +#GEMS Ozone +'GEMS Ozone' = { + table2Version = 211 ; + indicatorOfParameter = 203 ; + } +#GEMS Total column ozone +'GEMS Total column ozone' = { + table2Version = 211 ; + indicatorOfParameter = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'Total Aerosol Optical Depth at 550nm' = { + table2Version = 211 ; + indicatorOfParameter = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'Sea Salt Aerosol Optical Depth at 550nm' = { + table2Version = 211 ; + indicatorOfParameter = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'Dust Aerosol Optical Depth at 550nm' = { + table2Version = 211 ; + indicatorOfParameter = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'Organic Matter Aerosol Optical Depth at 550nm' = { + table2Version = 211 ; + indicatorOfParameter = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'Black Carbon Aerosol Optical Depth at 550nm' = { + table2Version = 211 ; + indicatorOfParameter = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'Sulphate Aerosol Optical Depth at 550nm' = { + table2Version = 211 ; + indicatorOfParameter = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'Total Aerosol Optical Depth at 469nm' = { + table2Version = 211 ; + indicatorOfParameter = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'Total Aerosol Optical Depth at 670nm' = { + table2Version = 211 ; + indicatorOfParameter = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'Total Aerosol Optical Depth at 865nm' = { + table2Version = 211 ; + indicatorOfParameter = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'Total Aerosol Optical Depth at 1240nm' = { + table2Version = 211 ; + indicatorOfParameter = 216 ; + } +#Total precipitation observation count +'Total precipitation observation count' = { + table2Version = 220 ; + indicatorOfParameter = 228 ; + } +#Convective inhibition +'Convective inhibition' = { + table2Version = 228 ; + indicatorOfParameter = 1 ; + } +#Orography +'Orography' = { + table2Version = 228 ; + indicatorOfParameter = 2 ; + } +#Friction velocity +'Friction velocity' = { + table2Version = 228 ; + indicatorOfParameter = 3 ; + } +#Mean temperature at 2 metres +'Mean temperature at 2 metres' = { + table2Version = 228 ; + indicatorOfParameter = 4 ; + } +#Mean of 10 metre wind speed +'Mean of 10 metre wind speed' = { + table2Version = 228 ; + indicatorOfParameter = 5 ; + } +#Mean total cloud cover +'Mean total cloud cover' = { + table2Version = 228 ; + indicatorOfParameter = 6 ; + } +#Lake depth +'Lake depth' = { + table2Version = 228 ; + indicatorOfParameter = 7 ; + } +#Lake mix-layer temperature +'Lake mix-layer temperature' = { + table2Version = 228 ; + indicatorOfParameter = 8 ; + } +#Lake mix-layer depth +'Lake mix-layer depth' = { + table2Version = 228 ; + indicatorOfParameter = 9 ; + } +#Lake bottom temperature +'Lake bottom temperature' = { + table2Version = 228 ; + indicatorOfParameter = 10 ; + } +#Lake total layer temperature +'Lake total layer temperature' = { + table2Version = 228 ; + indicatorOfParameter = 11 ; + } +#Lake shape factor +'Lake shape factor' = { + table2Version = 228 ; + indicatorOfParameter = 12 ; + } +#Lake ice temperature +'Lake ice temperature' = { + table2Version = 228 ; + indicatorOfParameter = 13 ; + } +#Lake ice depth +'Lake ice depth' = { + table2Version = 228 ; + indicatorOfParameter = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'Minimum vertical gradient of refractivity inside trapping layer' = { + table2Version = 228 ; + indicatorOfParameter = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'Mean vertical gradient of refractivity inside trapping layer' = { + table2Version = 228 ; + indicatorOfParameter = 16 ; + } +#Duct base height +'Duct base height' = { + table2Version = 228 ; + indicatorOfParameter = 17 ; + } +#Trapping layer base height +'Trapping layer base height' = { + table2Version = 228 ; + indicatorOfParameter = 18 ; + } +#Trapping layer top height +'Trapping layer top height' = { + table2Version = 228 ; + indicatorOfParameter = 19 ; + } +#Soil Moisture +'Soil Moisture' = { + table2Version = 228 ; + indicatorOfParameter = 39 ; + } +#Neutral wind at 10 m u-component +'Neutral wind at 10 m u-component' = { + table2Version = 228 ; + indicatorOfParameter = 131 ; + } +#Neutral wind at 10 m v-component +'Neutral wind at 10 m v-component' = { + table2Version = 228 ; + indicatorOfParameter = 132 ; + } +#Soil Temperature +'Soil Temperature' = { + table2Version = 228 ; + indicatorOfParameter = 139 ; + } +#Snow depth water equivalent +'Snow depth water equivalent' = { + table2Version = 228 ; + indicatorOfParameter = 141 ; + } +#Snow Fall water equivalent +'Snow Fall water equivalent' = { + table2Version = 228 ; + indicatorOfParameter = 144 ; + } +#Total Cloud Cover +'Total Cloud Cover' = { + table2Version = 228 ; + indicatorOfParameter = 164 ; + } +#Field capacity +'Field capacity' = { + table2Version = 228 ; + indicatorOfParameter = 170 ; + } +#Wilting point +'Wilting point' = { + table2Version = 228 ; + indicatorOfParameter = 171 ; + } +#Total Precipitation +'Total Precipitation' = { + table2Version = 228 ; + indicatorOfParameter = 228 ; + } +#Snow evaporation (variable resolution) +'Snow evaporation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 44 ; + } +#Snowmelt (variable resolution) +'Snowmelt (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 45 ; + } +#Solar duration (variable resolution) +'Solar duration (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 46 ; + } +#Downward UV radiation at the surface (variable resolution) +'Downward UV radiation at the surface (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface (variable resolution) +'Photosynthetically active radiation at the surface (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 58 ; + } +#Stratiform precipitation (Large-scale precipitation) (variable resolution) +'Stratiform precipitation (Large-scale precipitation) (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation (variable resolution) +'Convective precipitation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) (variable resolution) +'Snowfall (convective + stratiform) (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation (variable resolution) +'Boundary layer dissipation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux (variable resolution) +'Surface sensible heat flux (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux (variable resolution) +'Surface latent heat flux (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 147 ; + } +#Surface solar radiation downwards (variable resolution) +'Surface solar radiation downwards (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards (variable resolution) +'Surface thermal radiation downwards (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation (variable resolution) +'Surface net solar radiation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation (variable resolution) +'Surface net thermal radiation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation (variable resolution) +'Top net solar radiation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation (variable resolution) +'Top net thermal radiation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress (variable resolution) +'East-West surface stress (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress (variable resolution) +'North-South surface stress (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 181 ; + } +#Evaporation (variable resolution) +'Evaporation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration (variable resolution) +'Sunshine duration (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress (variable resolution) +'Longitudinal component of gravity wave stress (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress (variable resolution) +'Meridional component of gravity wave stress (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation (variable resolution) +'Gravity wave dissipation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content (variable resolution) +'Skin reservoir content (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 198 ; + } +#Runoff (variable resolution) +'Runoff (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky (variable resolution) +'Top net solar radiation, clear sky (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky (variable resolution) +'Top net thermal radiation, clear sky (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky (variable resolution) +'Surface net solar radiation, clear sky (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky (variable resolution) +'Surface net thermal radiation, clear sky (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation (variable resolution) +'TOA incident solar radiation (variable resolution)' = { + table2Version = 230 ; + indicatorOfParameter = 212 ; + } +#Surface temperature significance +'Surface temperature significance' = { + table2Version = 234 ; + indicatorOfParameter = 139 ; + } +#Mean sea level pressure significance +'Mean sea level pressure significance' = { + table2Version = 234 ; + indicatorOfParameter = 151 ; + } +#2 metre temperature significance +'2 metre temperature significance' = { + table2Version = 234 ; + indicatorOfParameter = 167 ; + } +#Total precipitation significance +'Total precipitation significance' = { + table2Version = 234 ; + indicatorOfParameter = 228 ; + } +#U-component stokes drift +'U-component stokes drift' = { + table2Version = 140 ; + indicatorOfParameter = 215 ; + } +#V-component stokes drift +'V-component stokes drift' = { + table2Version = 140 ; + indicatorOfParameter = 216 ; + } +#Wildfire radiative power maximum +'Wildfire radiative power maximum' = { + table2Version = 210 ; + indicatorOfParameter = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'Wildfire flux of Sulfur Dioxide' = { + table2Version = 210 ; + indicatorOfParameter = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'Wildfire Flux of Methanol (CH3OH)' = { + table2Version = 210 ; + indicatorOfParameter = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'Wildfire Flux of Ethanol (C2H5OH)' = { + table2Version = 210 ; + indicatorOfParameter = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'Wildfire Flux of Propane (C3H8)' = { + table2Version = 210 ; + indicatorOfParameter = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'Wildfire Flux of Ethene (C2H4)' = { + table2Version = 210 ; + indicatorOfParameter = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'Wildfire Flux of Propene (C3H6)' = { + table2Version = 210 ; + indicatorOfParameter = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'Wildfire Flux of Isoprene (C5H8)' = { + table2Version = 210 ; + indicatorOfParameter = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'Wildfire Flux of Terpenes (C5H8)n' = { + table2Version = 210 ; + indicatorOfParameter = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10)' = { + table2Version = 210 ; + indicatorOfParameter = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'Wildfire Flux of Higher Alkenes (CnH2n, C>=4)' = { + table2Version = 210 ; + indicatorOfParameter = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4)' = { + table2Version = 210 ; + indicatorOfParameter = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'Wildfire Flux of Formaldehyde (CH2O)' = { + table2Version = 210 ; + indicatorOfParameter = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'Wildfire Flux of Acetaldehyde (C2H4O)' = { + table2Version = 210 ; + indicatorOfParameter = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'Wildfire Flux of Acetone (C3H6O)' = { + table2Version = 210 ; + indicatorOfParameter = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'Wildfire Flux of Ammonia (NH3)' = { + table2Version = 210 ; + indicatorOfParameter = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S)' = { + table2Version = 210 ; + indicatorOfParameter = 117 ; + } +#Wildfire radiative power maximum +'Wildfire radiative power maximum' = { + table2Version = 211 ; + indicatorOfParameter = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'Wildfire flux of Sulfur Dioxide' = { + table2Version = 211 ; + indicatorOfParameter = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'Wildfire Flux of Methanol (CH3OH)' = { + table2Version = 211 ; + indicatorOfParameter = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'Wildfire Flux of Ethanol (C2H5OH)' = { + table2Version = 211 ; + indicatorOfParameter = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'Wildfire Flux of Propane (C3H8)' = { + table2Version = 211 ; + indicatorOfParameter = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'Wildfire Flux of Ethene (C2H4)' = { + table2Version = 211 ; + indicatorOfParameter = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'Wildfire Flux of Propene (C3H6)' = { + table2Version = 211 ; + indicatorOfParameter = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'Wildfire Flux of Isoprene (C5H8)' = { + table2Version = 211 ; + indicatorOfParameter = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'Wildfire Flux of Terpenes (C5H8)n' = { + table2Version = 211 ; + indicatorOfParameter = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10)' = { + table2Version = 211 ; + indicatorOfParameter = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'Wildfire Flux of Higher Alkenes (CnH2n, C>=4)' = { + table2Version = 211 ; + indicatorOfParameter = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4)' = { + table2Version = 211 ; + indicatorOfParameter = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'Wildfire Flux of Formaldehyde (CH2O)' = { + table2Version = 211 ; + indicatorOfParameter = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'Wildfire Flux of Acetaldehyde (C2H4O)' = { + table2Version = 211 ; + indicatorOfParameter = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'Wildfire Flux of Acetone (C3H6O)' = { + table2Version = 211 ; + indicatorOfParameter = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'Wildfire Flux of Ammonia (NH3)' = { + table2Version = 211 ; + indicatorOfParameter = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S)' = { + table2Version = 211 ; + indicatorOfParameter = 117 ; + } +#V-tendency from non-orographic wave drag +'V-tendency from non-orographic wave drag' = { + table2Version = 228 ; + indicatorOfParameter = 134 ; + } +#U-tendency from non-orographic wave drag +'U-tendency from non-orographic wave drag' = { + table2Version = 228 ; + indicatorOfParameter = 136 ; + } +#100 metre U wind component +'100 metre U wind component' = { + table2Version = 228 ; + indicatorOfParameter = 246 ; + } +#100 metre V wind component +'100 metre V wind component' = { + table2Version = 228 ; + indicatorOfParameter = 247 ; + } +#ASCAT first soil moisture CDF matching parameter +'ASCAT first soil moisture CDF matching parameter' = { + table2Version = 228 ; + indicatorOfParameter = 253 ; + } +#ASCAT second soil moisture CDF matching parameter +'ASCAT second soil moisture CDF matching parameter' = { + table2Version = 228 ; + indicatorOfParameter = 254 ; +} diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def new file mode 100644 index 000000000..735363ea1 --- /dev/null +++ b/definitions/grib1/localConcepts/ecmf/paramId.def @@ -0,0 +1,15316 @@ +# Automatically generated by create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total precipitation of at least 1 mm +'131060' = { + table2Version = 131 ; + indicatorOfParameter = 60 ; + } +#Total precipitation of at least 5 mm +'131061' = { + table2Version = 131 ; + indicatorOfParameter = 61 ; + } +#Total precipitation of at least 10 mm +'131062' = { + table2Version = 131 ; + indicatorOfParameter = 62 ; + } +#Total precipitation of at least 20 mm +'131063' = { + table2Version = 131 ; + indicatorOfParameter = 63 ; + } +#Total precipitation of at least 40 mm +'131082' = { + table2Version = 131 ; + indicatorOfParameter = 82 ; + } +#Total precipitation of at least 60 mm +'131083' = { + table2Version = 131 ; + indicatorOfParameter = 83 ; + } +#Total precipitation of at least 80 mm +'131084' = { + table2Version = 131 ; + indicatorOfParameter = 84 ; + } +#Total precipitation of at least 100 mm +'131085' = { + table2Version = 131 ; + indicatorOfParameter = 85 ; + } +#Total precipitation of at least 150 mm +'131086' = { + table2Version = 131 ; + indicatorOfParameter = 86 ; + } +#Total precipitation of at least 200 mm +'131087' = { + table2Version = 131 ; + indicatorOfParameter = 87 ; + } +#Total precipitation of at least 300 mm +'131088' = { + table2Version = 131 ; + indicatorOfParameter = 88 ; + } +#Stream function +'1' = { + table2Version = 128 ; + indicatorOfParameter = 1 ; + } +#Velocity potential +'2' = { + table2Version = 128 ; + indicatorOfParameter = 2 ; + } +#Potential temperature +'3' = { + table2Version = 128 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature +'4' = { + table2Version = 128 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature +'5' = { + table2Version = 128 ; + indicatorOfParameter = 5 ; + } +#Soil sand fraction +'6' = { + table2Version = 128 ; + indicatorOfParameter = 6 ; + } +#Soil clay fraction +'7' = { + table2Version = 128 ; + indicatorOfParameter = 7 ; + } +#Surface runoff +'8' = { + table2Version = 128 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff +'9' = { + table2Version = 128 ; + indicatorOfParameter = 9 ; + } +#Wind speed +'10' = { + table2Version = 128 ; + indicatorOfParameter = 10 ; + } +#U component of divergent wind +'11' = { + table2Version = 128 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind +'12' = { + table2Version = 128 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind +'13' = { + table2Version = 128 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind +'14' = { + table2Version = 128 ; + indicatorOfParameter = 14 ; + } +#UV visible albedo for direct radiation +'15' = { + table2Version = 128 ; + indicatorOfParameter = 15 ; + } +#UV visible albedo for diffuse radiation +'16' = { + table2Version = 128 ; + indicatorOfParameter = 16 ; + } +#Near IR albedo for direct radiation +'17' = { + table2Version = 128 ; + indicatorOfParameter = 17 ; + } +#Near IR albedo for diffuse radiation +'18' = { + table2Version = 128 ; + indicatorOfParameter = 18 ; + } +#Clear sky surface UV +'19' = { + table2Version = 128 ; + indicatorOfParameter = 19 ; + } +#Clear sky surface photosynthetically active radiation +'20' = { + table2Version = 128 ; + indicatorOfParameter = 20 ; + } +#Unbalanced component of temperature +'21' = { + table2Version = 128 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'22' = { + table2Version = 128 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence +'23' = { + table2Version = 128 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'24' = { + table2Version = 128 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'25' = { + table2Version = 128 ; + indicatorOfParameter = 25 ; + } +#Lake cover +'26' = { + table2Version = 128 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover +'27' = { + table2Version = 128 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover +'28' = { + table2Version = 128 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation +'29' = { + table2Version = 128 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation +'30' = { + table2Version = 128 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover +'31' = { + table2Version = 128 ; + indicatorOfParameter = 31 ; + } +#Snow albedo +'32' = { + table2Version = 128 ; + indicatorOfParameter = 32 ; + } +#Snow density +'33' = { + table2Version = 128 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature +'34' = { + table2Version = 128 ; + indicatorOfParameter = 34 ; + } +#Ice temperature layer 1 +'35' = { + table2Version = 128 ; + indicatorOfParameter = 35 ; + } +#Ice temperature layer 2 +'36' = { + table2Version = 128 ; + indicatorOfParameter = 36 ; + } +#Ice temperature layer 3 +'37' = { + table2Version = 128 ; + indicatorOfParameter = 37 ; + } +#Ice temperature layer 4 +'38' = { + table2Version = 128 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 +'39' = { + table2Version = 128 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'40' = { + table2Version = 128 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'41' = { + table2Version = 128 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'42' = { + table2Version = 128 ; + indicatorOfParameter = 42 ; + } +#Soil type +'43' = { + table2Version = 128 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation +'44' = { + table2Version = 128 ; + indicatorOfParameter = 44 ; + } +#Snowmelt +'45' = { + table2Version = 128 ; + indicatorOfParameter = 45 ; + } +#Solar duration +'46' = { + table2Version = 128 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation +'47' = { + table2Version = 128 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress +'48' = { + table2Version = 128 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust +'49' = { + table2Version = 128 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction +'50' = { + table2Version = 128 ; + indicatorOfParameter = 50 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'51' = { + table2Version = 128 ; + indicatorOfParameter = 51 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'52' = { + table2Version = 128 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential +'53' = { + table2Version = 128 ; + indicatorOfParameter = 53 ; + } +#Pressure +'54' = { + table2Version = 128 ; + indicatorOfParameter = 54 ; + } +#Mean temperature at 2 metres in the last 24 hours +'55' = { + table2Version = 128 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours +'56' = { + table2Version = 128 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface +'57' = { + table2Version = 128 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface +'58' = { + table2Version = 128 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy +'59' = { + table2Version = 128 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity +'60' = { + table2Version = 128 ; + indicatorOfParameter = 60 ; + } +#Observation count +'62' = { + table2Version = 128 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'63' = { + table2Version = 128 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'64' = { + table2Version = 128 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'65' = { + table2Version = 128 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'66' = { + table2Version = 128 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'67' = { + table2Version = 128 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'68' = { + table2Version = 128 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'69' = { + table2Version = 128 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'70' = { + table2Version = 128 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'71' = { + table2Version = 128 ; + indicatorOfParameter = 71 ; + } +#Instantaneous surface solar radiation downwards +'72' = { + table2Version = 128 ; + indicatorOfParameter = 72 ; + } +#Instantaneous surface thermal radiation downwards +'73' = { + table2Version = 128 ; + indicatorOfParameter = 73 ; + } +#Standard deviation of filtered subgrid orography +'74' = { + table2Version = 128 ; + indicatorOfParameter = 74 ; + } +#Specific rain water content +'75' = { + table2Version = 128 ; + indicatorOfParameter = 75 ; + } +#Specific snow water content +'76' = { + table2Version = 128 ; + indicatorOfParameter = 76 ; + } +#Eta-coordinate vertical velocity +'77' = { + table2Version = 128 ; + indicatorOfParameter = 77 ; + } +#Total column liquid water +'78' = { + table2Version = 128 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'79' = { + table2Version = 128 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'80' = { + table2Version = 128 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'81' = { + table2Version = 128 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'82' = { + table2Version = 128 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'83' = { + table2Version = 128 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'84' = { + table2Version = 128 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'85' = { + table2Version = 128 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'86' = { + table2Version = 128 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'87' = { + table2Version = 128 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'88' = { + table2Version = 128 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'89' = { + table2Version = 128 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'90' = { + table2Version = 128 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'91' = { + table2Version = 128 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'92' = { + table2Version = 128 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'93' = { + table2Version = 128 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'94' = { + table2Version = 128 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'95' = { + table2Version = 128 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'96' = { + table2Version = 128 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'97' = { + table2Version = 128 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'98' = { + table2Version = 128 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'99' = { + table2Version = 128 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'100' = { + table2Version = 128 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'101' = { + table2Version = 128 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'102' = { + table2Version = 128 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'103' = { + table2Version = 128 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'104' = { + table2Version = 128 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'105' = { + table2Version = 128 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'106' = { + table2Version = 128 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'107' = { + table2Version = 128 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'108' = { + table2Version = 128 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'109' = { + table2Version = 128 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'110' = { + table2Version = 128 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'111' = { + table2Version = 128 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'112' = { + table2Version = 128 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'113' = { + table2Version = 128 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'114' = { + table2Version = 128 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'115' = { + table2Version = 128 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'116' = { + table2Version = 128 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'117' = { + table2Version = 128 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'118' = { + table2Version = 128 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'119' = { + table2Version = 128 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'120' = { + table2Version = 128 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'121' = { + table2Version = 128 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'122' = { + table2Version = 128 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours +'123' = { + table2Version = 128 ; + indicatorOfParameter = 123 ; + } +#Surface emissivity +'124' = { + table2Version = 128 ; + indicatorOfParameter = 124 ; + } +#Vertically integrated total energy +'125' = { + table2Version = 128 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'126' = { + table2Version = 128 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide +'127' = { + table2Version = 128 ; + indicatorOfParameter = 127 ; + } +#Atmospheric tide +'127' = { + table2Version = 160 ; + indicatorOfParameter = 127 ; + } +#Budget values +'128' = { + table2Version = 128 ; + indicatorOfParameter = 128 ; + } +#Budget values +'128' = { + table2Version = 160 ; + indicatorOfParameter = 128 ; + } +#Geopotential +'129' = { + table2Version = 128 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'129' = { + table2Version = 160 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'129' = { + table2Version = 170 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'129' = { + table2Version = 180 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'129' = { + table2Version = 190 ; + indicatorOfParameter = 129 ; + } +#Temperature +'130' = { + table2Version = 128 ; + indicatorOfParameter = 130 ; + } +#Temperature +'130' = { + table2Version = 160 ; + indicatorOfParameter = 130 ; + } +#Temperature +'130' = { + table2Version = 170 ; + indicatorOfParameter = 130 ; + } +#Temperature +'130' = { + table2Version = 180 ; + indicatorOfParameter = 130 ; + } +#Temperature +'130' = { + table2Version = 190 ; + indicatorOfParameter = 130 ; + } +#U component of wind +'131' = { + table2Version = 128 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'131' = { + table2Version = 160 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'131' = { + table2Version = 170 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'131' = { + table2Version = 180 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'131' = { + table2Version = 190 ; + indicatorOfParameter = 131 ; + } +#V component of wind +'132' = { + table2Version = 128 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'132' = { + table2Version = 160 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'132' = { + table2Version = 170 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'132' = { + table2Version = 180 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'132' = { + table2Version = 190 ; + indicatorOfParameter = 132 ; + } +#Specific humidity +'133' = { + table2Version = 128 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'133' = { + table2Version = 160 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'133' = { + table2Version = 170 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'133' = { + table2Version = 180 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'133' = { + table2Version = 190 ; + indicatorOfParameter = 133 ; + } +#Surface pressure +'134' = { + table2Version = 128 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'134' = { + table2Version = 160 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'134' = { + table2Version = 162 ; + indicatorOfParameter = 52 ; + } +#Surface pressure +'134' = { + table2Version = 180 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'134' = { + table2Version = 190 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity +'135' = { + table2Version = 128 ; + indicatorOfParameter = 135 ; + } +#Vertical velocity +'135' = { + table2Version = 170 ; + indicatorOfParameter = 135 ; + } +#Total column water +'136' = { + table2Version = 128 ; + indicatorOfParameter = 136 ; + } +#Total column water +'136' = { + table2Version = 160 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour +'137' = { + table2Version = 128 ; + indicatorOfParameter = 137 ; + } +#Total column water vapour +'137' = { + table2Version = 180 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) +'138' = { + table2Version = 128 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'138' = { + table2Version = 160 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'138' = { + table2Version = 170 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'138' = { + table2Version = 180 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'138' = { + table2Version = 190 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 +'139' = { + table2Version = 128 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'139' = { + table2Version = 160 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'139' = { + table2Version = 170 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'139' = { + table2Version = 190 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 +'140' = { + table2Version = 128 ; + indicatorOfParameter = 140 ; + } +#Soil wetness level 1 +'140' = { + table2Version = 170 ; + indicatorOfParameter = 140 ; + } +#Snow depth +'141' = { + table2Version = 128 ; + indicatorOfParameter = 141 ; + } +#Snow depth +'141' = { + table2Version = 170 ; + indicatorOfParameter = 141 ; + } +#Snow depth +'141' = { + table2Version = 180 ; + indicatorOfParameter = 141 ; + } +#Large-scale precipitation +'142' = { + table2Version = 128 ; + indicatorOfParameter = 142 ; + } +#Large-scale precipitation +'142' = { + table2Version = 170 ; + indicatorOfParameter = 142 ; + } +#Large-scale precipitation +'142' = { + table2Version = 180 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'143' = { + table2Version = 128 ; + indicatorOfParameter = 143 ; + } +#Convective precipitation +'143' = { + table2Version = 170 ; + indicatorOfParameter = 143 ; + } +#Convective precipitation +'143' = { + table2Version = 180 ; + indicatorOfParameter = 143 ; + } +#Snowfall +'144' = { + table2Version = 128 ; + indicatorOfParameter = 144 ; + } +#Snowfall +'144' = { + table2Version = 180 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation +'145' = { + table2Version = 128 ; + indicatorOfParameter = 145 ; + } +#Boundary layer dissipation +'145' = { + table2Version = 160 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux +'146' = { + table2Version = 128 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'146' = { + table2Version = 160 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'146' = { + table2Version = 170 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'146' = { + table2Version = 180 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'146' = { + table2Version = 190 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux +'147' = { + table2Version = 128 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'147' = { + table2Version = 160 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'147' = { + table2Version = 170 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'147' = { + table2Version = 180 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'147' = { + table2Version = 190 ; + indicatorOfParameter = 147 ; + } +#Charnock +'148' = { + table2Version = 128 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation +'149' = { + table2Version = 128 ; + indicatorOfParameter = 149 ; + } +#Top net radiation +'150' = { + table2Version = 128 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure +'151' = { + table2Version = 128 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'151' = { + table2Version = 160 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'151' = { + table2Version = 170 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'151' = { + table2Version = 180 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'151' = { + table2Version = 190 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure +'152' = { + table2Version = 128 ; + indicatorOfParameter = 152 ; + } +#Logarithm of surface pressure +'152' = { + table2Version = 160 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate +'153' = { + table2Version = 128 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate +'154' = { + table2Version = 128 ; + indicatorOfParameter = 154 ; + } +#Divergence +'155' = { + table2Version = 128 ; + indicatorOfParameter = 155 ; + } +#Divergence +'155' = { + table2Version = 160 ; + indicatorOfParameter = 155 ; + } +#Divergence +'155' = { + table2Version = 170 ; + indicatorOfParameter = 155 ; + } +#Divergence +'155' = { + table2Version = 180 ; + indicatorOfParameter = 155 ; + } +#Divergence +'155' = { + table2Version = 190 ; + indicatorOfParameter = 155 ; + } +#Geopotential Height +'156' = { + table2Version = 128 ; + indicatorOfParameter = 156 ; + } +#Relative humidity +'157' = { + table2Version = 128 ; + indicatorOfParameter = 157 ; + } +#Relative humidity +'157' = { + table2Version = 170 ; + indicatorOfParameter = 157 ; + } +#Relative humidity +'157' = { + table2Version = 190 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure +'158' = { + table2Version = 128 ; + indicatorOfParameter = 158 ; + } +#Tendency of surface pressure +'158' = { + table2Version = 160 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height +'159' = { + table2Version = 128 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography +'160' = { + table2Version = 128 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography +'161' = { + table2Version = 128 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography +'162' = { + table2Version = 128 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography +'163' = { + table2Version = 128 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover +'164' = { + table2Version = 128 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'164' = { + table2Version = 160 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'164' = { + table2Version = 170 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'164' = { + table2Version = 180 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'164' = { + table2Version = 190 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component +'165' = { + table2Version = 128 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'165' = { + table2Version = 160 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'165' = { + table2Version = 180 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'165' = { + table2Version = 190 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component +'166' = { + table2Version = 128 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'166' = { + table2Version = 160 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'166' = { + table2Version = 180 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'166' = { + table2Version = 190 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature +'167' = { + table2Version = 128 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'167' = { + table2Version = 160 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'167' = { + table2Version = 180 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'167' = { + table2Version = 190 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature +'168' = { + table2Version = 128 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'168' = { + table2Version = 160 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'168' = { + table2Version = 180 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'168' = { + table2Version = 190 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards +'169' = { + table2Version = 128 ; + indicatorOfParameter = 169 ; + } +#Surface solar radiation downwards +'169' = { + table2Version = 190 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 +'170' = { + table2Version = 128 ; + indicatorOfParameter = 170 ; + } +#Soil temperature level 2 +'170' = { + table2Version = 160 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 +'171' = { + table2Version = 128 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask +'172' = { + table2Version = 128 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'172' = { + table2Version = 160 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'172' = { + table2Version = 171 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'172' = { + table2Version = 174 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'172' = { + table2Version = 175 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'172' = { + table2Version = 180 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'172' = { + table2Version = 190 ; + indicatorOfParameter = 172 ; + } +#Surface roughness +'173' = { + table2Version = 128 ; + indicatorOfParameter = 173 ; + } +#Surface roughness +'173' = { + table2Version = 160 ; + indicatorOfParameter = 173 ; + } +#Albedo +'174' = { + table2Version = 128 ; + indicatorOfParameter = 174 ; + } +#Albedo +'174' = { + table2Version = 160 ; + indicatorOfParameter = 174 ; + } +#Albedo +'174' = { + table2Version = 190 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards +'175' = { + table2Version = 128 ; + indicatorOfParameter = 175 ; + } +#Surface thermal radiation downwards +'175' = { + table2Version = 190 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation +'176' = { + table2Version = 128 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'176' = { + table2Version = 160 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'176' = { + table2Version = 170 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'176' = { + table2Version = 190 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation +'177' = { + table2Version = 128 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'177' = { + table2Version = 160 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'177' = { + table2Version = 170 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'177' = { + table2Version = 190 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation +'178' = { + table2Version = 128 ; + indicatorOfParameter = 178 ; + } +#Top net solar radiation +'178' = { + table2Version = 160 ; + indicatorOfParameter = 178 ; + } +#Top net solar radiation +'178' = { + table2Version = 190 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation +'179' = { + table2Version = 128 ; + indicatorOfParameter = 179 ; + } +#Top net thermal radiation +'179' = { + table2Version = 160 ; + indicatorOfParameter = 179 ; + } +#Top net thermal radiation +'179' = { + table2Version = 190 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress +'180' = { + table2Version = 128 ; + indicatorOfParameter = 180 ; + } +#East-West surface stress +'180' = { + table2Version = 170 ; + indicatorOfParameter = 180 ; + } +#East-West surface stress +'180' = { + table2Version = 180 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'181' = { + table2Version = 128 ; + indicatorOfParameter = 181 ; + } +#North-South surface stress +'181' = { + table2Version = 170 ; + indicatorOfParameter = 181 ; + } +#North-South surface stress +'181' = { + table2Version = 180 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'182' = { + table2Version = 128 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'182' = { + table2Version = 170 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'182' = { + table2Version = 180 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'182' = { + table2Version = 190 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 +'183' = { + table2Version = 128 ; + indicatorOfParameter = 183 ; + } +#Soil temperature level 3 +'183' = { + table2Version = 160 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 +'184' = { + table2Version = 128 ; + indicatorOfParameter = 184 ; + } +#Soil wetness level 3 +'184' = { + table2Version = 170 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover +'185' = { + table2Version = 128 ; + indicatorOfParameter = 185 ; + } +#Convective cloud cover +'185' = { + table2Version = 160 ; + indicatorOfParameter = 185 ; + } +#Convective cloud cover +'185' = { + table2Version = 170 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover +'186' = { + table2Version = 128 ; + indicatorOfParameter = 186 ; + } +#Low cloud cover +'186' = { + table2Version = 160 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover +'187' = { + table2Version = 128 ; + indicatorOfParameter = 187 ; + } +#Medium cloud cover +'187' = { + table2Version = 160 ; + indicatorOfParameter = 187 ; + } +#High cloud cover +'188' = { + table2Version = 128 ; + indicatorOfParameter = 188 ; + } +#High cloud cover +'188' = { + table2Version = 160 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration +'189' = { + table2Version = 128 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance +'190' = { + table2Version = 128 ; + indicatorOfParameter = 190 ; + } +#East-West component of sub-gridscale orographic variance +'190' = { + table2Version = 160 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance +'191' = { + table2Version = 128 ; + indicatorOfParameter = 191 ; + } +#North-South component of sub-gridscale orographic variance +'191' = { + table2Version = 160 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'192' = { + table2Version = 128 ; + indicatorOfParameter = 192 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'192' = { + table2Version = 160 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'193' = { + table2Version = 128 ; + indicatorOfParameter = 193 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'193' = { + table2Version = 160 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature +'194' = { + table2Version = 128 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress +'195' = { + table2Version = 128 ; + indicatorOfParameter = 195 ; + } +#Longitudinal component of gravity wave stress +'195' = { + table2Version = 160 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress +'196' = { + table2Version = 128 ; + indicatorOfParameter = 196 ; + } +#Meridional component of gravity wave stress +'196' = { + table2Version = 160 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation +'197' = { + table2Version = 128 ; + indicatorOfParameter = 197 ; + } +#Gravity wave dissipation +'197' = { + table2Version = 160 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content +'198' = { + table2Version = 128 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction +'199' = { + table2Version = 128 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography +'200' = { + table2Version = 128 ; + indicatorOfParameter = 200 ; + } +#Variance of sub-gridscale orography +'200' = { + table2Version = 160 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing +'201' = { + table2Version = 128 ; + indicatorOfParameter = 201 ; + } +#Maximum temperature at 2 metres since previous post-processing +'201' = { + table2Version = 170 ; + indicatorOfParameter = 201 ; + } +#Maximum temperature at 2 metres since previous post-processing +'201' = { + table2Version = 190 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing +'202' = { + table2Version = 128 ; + indicatorOfParameter = 202 ; + } +#Minimum temperature at 2 metres since previous post-processing +'202' = { + table2Version = 170 ; + indicatorOfParameter = 202 ; + } +#Minimum temperature at 2 metres since previous post-processing +'202' = { + table2Version = 190 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio +'203' = { + table2Version = 128 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights +'204' = { + table2Version = 128 ; + indicatorOfParameter = 204 ; + } +#Precipitation analysis weights +'204' = { + table2Version = 160 ; + indicatorOfParameter = 204 ; + } +#Runoff +'205' = { + table2Version = 128 ; + indicatorOfParameter = 205 ; + } +#Runoff +'205' = { + table2Version = 180 ; + indicatorOfParameter = 205 ; + } +#Total column ozone +'206' = { + table2Version = 128 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed +'207' = { + table2Version = 128 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky +'208' = { + table2Version = 128 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky +'209' = { + table2Version = 128 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky +'210' = { + table2Version = 128 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky +'211' = { + table2Version = 128 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation +'212' = { + table2Version = 128 ; + indicatorOfParameter = 212 ; + } +#Vertically integrated moisture divergence +'213' = { + table2Version = 128 ; + indicatorOfParameter = 213 ; + } +#Diabatic heating by radiation +'214' = { + table2Version = 128 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion +'215' = { + table2Version = 128 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection +'216' = { + table2Version = 128 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation +'217' = { + table2Version = 128 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind +'218' = { + table2Version = 128 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind +'219' = { + table2Version = 128 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency +'220' = { + table2Version = 128 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency +'221' = { + table2Version = 128 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind +'222' = { + table2Version = 128 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of zonal wind +'222' = { + table2Version = 130 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind +'223' = { + table2Version = 128 ; + indicatorOfParameter = 223 ; + } +#Convective tendency of meridional wind +'223' = { + table2Version = 130 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity +'224' = { + table2Version = 128 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection +'225' = { + table2Version = 128 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation +'226' = { + table2Version = 128 ; + indicatorOfParameter = 226 ; + } +#Tendency due to removal of negative humidity +'227' = { + table2Version = 128 ; + indicatorOfParameter = 227 ; + } +#Tendency due to removal of negative humidity +'227' = { + table2Version = 130 ; + indicatorOfParameter = 227 ; + } +#Total precipitation +'228' = { + table2Version = 128 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'228' = { + table2Version = 160 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'228' = { + table2Version = 170 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'228' = { + table2Version = 190 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress +'229' = { + table2Version = 128 ; + indicatorOfParameter = 229 ; + } +#Instantaneous X surface stress +'229' = { + table2Version = 160 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress +'230' = { + table2Version = 128 ; + indicatorOfParameter = 230 ; + } +#Instantaneous Y surface stress +'230' = { + table2Version = 160 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface sensible heat flux +'231' = { + table2Version = 128 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux +'232' = { + table2Version = 128 ; + indicatorOfParameter = 232 ; + } +#Instantaneous moisture flux +'232' = { + table2Version = 160 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity +'233' = { + table2Version = 128 ; + indicatorOfParameter = 233 ; + } +#Apparent surface humidity +'233' = { + table2Version = 160 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat +'234' = { + table2Version = 128 ; + indicatorOfParameter = 234 ; + } +#Logarithm of surface roughness length for heat +'234' = { + table2Version = 160 ; + indicatorOfParameter = 234 ; + } +#Skin temperature +'235' = { + table2Version = 128 ; + indicatorOfParameter = 235 ; + } +#Skin temperature +'235' = { + table2Version = 160 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 +'236' = { + table2Version = 128 ; + indicatorOfParameter = 236 ; + } +#Soil temperature level 4 +'236' = { + table2Version = 160 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 +'237' = { + table2Version = 128 ; + indicatorOfParameter = 237 ; + } +#Soil wetness level 4 +'237' = { + table2Version = 160 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer +'238' = { + table2Version = 128 ; + indicatorOfParameter = 238 ; + } +#Temperature of snow layer +'238' = { + table2Version = 160 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall +'239' = { + table2Version = 128 ; + indicatorOfParameter = 239 ; + } +#Large-scale snowfall +'240' = { + table2Version = 128 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency +'241' = { + table2Version = 128 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency +'242' = { + table2Version = 128 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo +'243' = { + table2Version = 128 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness +'244' = { + table2Version = 128 ; + indicatorOfParameter = 244 ; + } +#Forecast surface roughness +'244' = { + table2Version = 160 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat +'245' = { + table2Version = 128 ; + indicatorOfParameter = 245 ; + } +#Forecast logarithm of surface roughness for heat +'245' = { + table2Version = 160 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content +'246' = { + table2Version = 128 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content +'247' = { + table2Version = 128 ; + indicatorOfParameter = 247 ; + } +#Cloud cover +'248' = { + table2Version = 128 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency +'249' = { + table2Version = 128 ; + indicatorOfParameter = 249 ; + } +#Ice age +'250' = { + table2Version = 128 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature +'251' = { + table2Version = 128 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity +'252' = { + table2Version = 128 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind +'253' = { + table2Version = 128 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind +'254' = { + table2Version = 128 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'255' = { + table2Version = 128 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'255' = { + table2Version = 130 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'255' = { + table2Version = 132 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'255' = { + table2Version = 160 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'255' = { + table2Version = 170 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'255' = { + table2Version = 180 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'255' = { + table2Version = 190 ; + indicatorOfParameter = 255 ; + } +#Stream function difference +'200001' = { + table2Version = 200 ; + indicatorOfParameter = 1 ; + } +#Velocity potential difference +'200002' = { + table2Version = 200 ; + indicatorOfParameter = 2 ; + } +#Potential temperature difference +'200003' = { + table2Version = 200 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature difference +'200004' = { + table2Version = 200 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature difference +'200005' = { + table2Version = 200 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind difference +'200011' = { + table2Version = 200 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind difference +'200012' = { + table2Version = 200 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind difference +'200013' = { + table2Version = 200 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind difference +'200014' = { + table2Version = 200 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature difference +'200021' = { + table2Version = 200 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure difference +'200022' = { + table2Version = 200 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence difference +'200023' = { + table2Version = 200 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'200024' = { + table2Version = 200 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'200025' = { + table2Version = 200 ; + indicatorOfParameter = 25 ; + } +#Lake cover difference +'200026' = { + table2Version = 200 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover difference +'200027' = { + table2Version = 200 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover difference +'200028' = { + table2Version = 200 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation difference +'200029' = { + table2Version = 200 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation difference +'200030' = { + table2Version = 200 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover difference +'200031' = { + table2Version = 200 ; + indicatorOfParameter = 31 ; + } +#Snow albedo difference +'200032' = { + table2Version = 200 ; + indicatorOfParameter = 32 ; + } +#Snow density difference +'200033' = { + table2Version = 200 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature difference +'200034' = { + table2Version = 200 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature layer 1 difference +'200035' = { + table2Version = 200 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature layer 2 difference +'200036' = { + table2Version = 200 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature layer 3 difference +'200037' = { + table2Version = 200 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature layer 4 difference +'200038' = { + table2Version = 200 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 difference +'200039' = { + table2Version = 200 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 difference +'200040' = { + table2Version = 200 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 difference +'200041' = { + table2Version = 200 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 difference +'200042' = { + table2Version = 200 ; + indicatorOfParameter = 42 ; + } +#Soil type difference +'200043' = { + table2Version = 200 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation difference +'200044' = { + table2Version = 200 ; + indicatorOfParameter = 44 ; + } +#Snowmelt difference +'200045' = { + table2Version = 200 ; + indicatorOfParameter = 45 ; + } +#Solar duration difference +'200046' = { + table2Version = 200 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation difference +'200047' = { + table2Version = 200 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress difference +'200048' = { + table2Version = 200 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust difference +'200049' = { + table2Version = 200 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction difference +'200050' = { + table2Version = 200 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature difference +'200051' = { + table2Version = 200 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature difference +'200052' = { + table2Version = 200 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential difference +'200053' = { + table2Version = 200 ; + indicatorOfParameter = 53 ; + } +#Pressure difference +'200054' = { + table2Version = 200 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours difference +'200055' = { + table2Version = 200 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours difference +'200056' = { + table2Version = 200 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface difference +'200057' = { + table2Version = 200 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface difference +'200058' = { + table2Version = 200 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy difference +'200059' = { + table2Version = 200 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity difference +'200060' = { + table2Version = 200 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations difference +'200061' = { + table2Version = 200 ; + indicatorOfParameter = 61 ; + } +#Observation count difference +'200062' = { + table2Version = 200 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'200063' = { + table2Version = 200 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'200064' = { + table2Version = 200 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'200065' = { + table2Version = 200 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'200066' = { + table2Version = 200 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'200067' = { + table2Version = 200 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'200068' = { + table2Version = 200 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'200069' = { + table2Version = 200 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'200070' = { + table2Version = 200 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'200071' = { + table2Version = 200 ; + indicatorOfParameter = 71 ; + } +#Total column liquid water +'200078' = { + table2Version = 200 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'200079' = { + table2Version = 200 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'200080' = { + table2Version = 200 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'200081' = { + table2Version = 200 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'200082' = { + table2Version = 200 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'200083' = { + table2Version = 200 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'200084' = { + table2Version = 200 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'200085' = { + table2Version = 200 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'200086' = { + table2Version = 200 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'200087' = { + table2Version = 200 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'200088' = { + table2Version = 200 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'200089' = { + table2Version = 200 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'200090' = { + table2Version = 200 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'200091' = { + table2Version = 200 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'200092' = { + table2Version = 200 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'200093' = { + table2Version = 200 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'200094' = { + table2Version = 200 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'200095' = { + table2Version = 200 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'200096' = { + table2Version = 200 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'200097' = { + table2Version = 200 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'200098' = { + table2Version = 200 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'200099' = { + table2Version = 200 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'200100' = { + table2Version = 200 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'200101' = { + table2Version = 200 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'200102' = { + table2Version = 200 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'200103' = { + table2Version = 200 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'200104' = { + table2Version = 200 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'200105' = { + table2Version = 200 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'200106' = { + table2Version = 200 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'200107' = { + table2Version = 200 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'200108' = { + table2Version = 200 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'200109' = { + table2Version = 200 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'200110' = { + table2Version = 200 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'200111' = { + table2Version = 200 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'200112' = { + table2Version = 200 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'200113' = { + table2Version = 200 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'200114' = { + table2Version = 200 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'200115' = { + table2Version = 200 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'200116' = { + table2Version = 200 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'200117' = { + table2Version = 200 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'200118' = { + table2Version = 200 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'200119' = { + table2Version = 200 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'200120' = { + table2Version = 200 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres difference +'200121' = { + table2Version = 200 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres difference +'200122' = { + table2Version = 200 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours difference +'200123' = { + table2Version = 200 ; + indicatorOfParameter = 123 ; + } +#Vertically integrated total energy +'200125' = { + table2Version = 200 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'200126' = { + table2Version = 200 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide difference +'200127' = { + table2Version = 200 ; + indicatorOfParameter = 127 ; + } +#Budget values difference +'200128' = { + table2Version = 200 ; + indicatorOfParameter = 128 ; + } +#Geopotential difference +'200129' = { + table2Version = 200 ; + indicatorOfParameter = 129 ; + } +#Temperature difference +'200130' = { + table2Version = 200 ; + indicatorOfParameter = 130 ; + } +#U component of wind difference +'200131' = { + table2Version = 200 ; + indicatorOfParameter = 131 ; + } +#V component of wind difference +'200132' = { + table2Version = 200 ; + indicatorOfParameter = 132 ; + } +#Specific humidity difference +'200133' = { + table2Version = 200 ; + indicatorOfParameter = 133 ; + } +#Surface pressure difference +'200134' = { + table2Version = 200 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity (pressure) difference +'200135' = { + table2Version = 200 ; + indicatorOfParameter = 135 ; + } +#Total column water difference +'200136' = { + table2Version = 200 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour difference +'200137' = { + table2Version = 200 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) difference +'200138' = { + table2Version = 200 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 difference +'200139' = { + table2Version = 200 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 difference +'200140' = { + table2Version = 200 ; + indicatorOfParameter = 140 ; + } +#Snow depth difference +'200141' = { + table2Version = 200 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) difference +'200142' = { + table2Version = 200 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation difference +'200143' = { + table2Version = 200 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) difference +'200144' = { + table2Version = 200 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation difference +'200145' = { + table2Version = 200 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux difference +'200146' = { + table2Version = 200 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux difference +'200147' = { + table2Version = 200 ; + indicatorOfParameter = 147 ; + } +#Charnock difference +'200148' = { + table2Version = 200 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation difference +'200149' = { + table2Version = 200 ; + indicatorOfParameter = 149 ; + } +#Top net radiation difference +'200150' = { + table2Version = 200 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure difference +'200151' = { + table2Version = 200 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure difference +'200152' = { + table2Version = 200 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate difference +'200153' = { + table2Version = 200 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate difference +'200154' = { + table2Version = 200 ; + indicatorOfParameter = 154 ; + } +#Divergence difference +'200155' = { + table2Version = 200 ; + indicatorOfParameter = 155 ; + } +#Height difference +'200156' = { + table2Version = 200 ; + indicatorOfParameter = 156 ; + } +#Relative humidity difference +'200157' = { + table2Version = 200 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure difference +'200158' = { + table2Version = 200 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height difference +'200159' = { + table2Version = 200 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography difference +'200160' = { + table2Version = 200 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography difference +'200161' = { + table2Version = 200 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography difference +'200162' = { + table2Version = 200 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography difference +'200163' = { + table2Version = 200 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover difference +'200164' = { + table2Version = 200 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component difference +'200165' = { + table2Version = 200 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component difference +'200166' = { + table2Version = 200 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature difference +'200167' = { + table2Version = 200 ; + indicatorOfParameter = 167 ; + } +#Surface solar radiation downwards difference +'200169' = { + table2Version = 200 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 difference +'200170' = { + table2Version = 200 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 difference +'200171' = { + table2Version = 200 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask difference +'200172' = { + table2Version = 200 ; + indicatorOfParameter = 172 ; + } +#Surface roughness difference +'200173' = { + table2Version = 200 ; + indicatorOfParameter = 173 ; + } +#Albedo difference +'200174' = { + table2Version = 200 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards difference +'200175' = { + table2Version = 200 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation difference +'200176' = { + table2Version = 200 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation difference +'200177' = { + table2Version = 200 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation difference +'200178' = { + table2Version = 200 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation difference +'200179' = { + table2Version = 200 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress difference +'200180' = { + table2Version = 200 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress difference +'200181' = { + table2Version = 200 ; + indicatorOfParameter = 181 ; + } +#Evaporation difference +'200182' = { + table2Version = 200 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 difference +'200183' = { + table2Version = 200 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 difference +'200184' = { + table2Version = 200 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover difference +'200185' = { + table2Version = 200 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover difference +'200186' = { + table2Version = 200 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover difference +'200187' = { + table2Version = 200 ; + indicatorOfParameter = 187 ; + } +#High cloud cover difference +'200188' = { + table2Version = 200 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration difference +'200189' = { + table2Version = 200 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance difference +'200190' = { + table2Version = 200 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance difference +'200191' = { + table2Version = 200 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance difference +'200192' = { + table2Version = 200 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance difference +'200193' = { + table2Version = 200 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature difference +'200194' = { + table2Version = 200 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress difference +'200195' = { + table2Version = 200 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress difference +'200196' = { + table2Version = 200 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation difference +'200197' = { + table2Version = 200 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content difference +'200198' = { + table2Version = 200 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction difference +'200199' = { + table2Version = 200 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography difference +'200200' = { + table2Version = 200 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing difference +'200201' = { + table2Version = 200 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing difference +'200202' = { + table2Version = 200 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio difference +'200203' = { + table2Version = 200 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights difference +'200204' = { + table2Version = 200 ; + indicatorOfParameter = 204 ; + } +#Runoff difference +'200205' = { + table2Version = 200 ; + indicatorOfParameter = 205 ; + } +#Total column ozone difference +'200206' = { + table2Version = 200 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed difference +'200207' = { + table2Version = 200 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky difference +'200208' = { + table2Version = 200 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky difference +'200209' = { + table2Version = 200 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky difference +'200210' = { + table2Version = 200 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky difference +'200211' = { + table2Version = 200 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation difference +'200212' = { + table2Version = 200 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation difference +'200214' = { + table2Version = 200 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion difference +'200215' = { + table2Version = 200 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection difference +'200216' = { + table2Version = 200 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation difference +'200217' = { + table2Version = 200 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind difference +'200218' = { + table2Version = 200 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind difference +'200219' = { + table2Version = 200 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency difference +'200220' = { + table2Version = 200 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency difference +'200221' = { + table2Version = 200 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind difference +'200222' = { + table2Version = 200 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind difference +'200223' = { + table2Version = 200 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity difference +'200224' = { + table2Version = 200 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection difference +'200225' = { + table2Version = 200 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation difference +'200226' = { + table2Version = 200 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity difference +'200227' = { + table2Version = 200 ; + indicatorOfParameter = 227 ; + } +#Total precipitation difference +'200228' = { + table2Version = 200 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress difference +'200229' = { + table2Version = 200 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress difference +'200230' = { + table2Version = 200 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux difference +'200231' = { + table2Version = 200 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux difference +'200232' = { + table2Version = 200 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity difference +'200233' = { + table2Version = 200 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat difference +'200234' = { + table2Version = 200 ; + indicatorOfParameter = 234 ; + } +#Skin temperature difference +'200235' = { + table2Version = 200 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 difference +'200236' = { + table2Version = 200 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 difference +'200237' = { + table2Version = 200 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer difference +'200238' = { + table2Version = 200 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall difference +'200239' = { + table2Version = 200 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall difference +'200240' = { + table2Version = 200 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency difference +'200241' = { + table2Version = 200 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency difference +'200242' = { + table2Version = 200 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo difference +'200243' = { + table2Version = 200 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness difference +'200244' = { + table2Version = 200 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat difference +'200245' = { + table2Version = 200 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content difference +'200246' = { + table2Version = 200 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content difference +'200247' = { + table2Version = 200 ; + indicatorOfParameter = 247 ; + } +#Cloud cover difference +'200248' = { + table2Version = 200 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency difference +'200249' = { + table2Version = 200 ; + indicatorOfParameter = 249 ; + } +#Ice age difference +'200250' = { + table2Version = 200 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature difference +'200251' = { + table2Version = 200 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity difference +'200252' = { + table2Version = 200 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind difference +'200253' = { + table2Version = 200 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind difference +'200254' = { + table2Version = 200 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'200255' = { + table2Version = 200 ; + indicatorOfParameter = 255 ; + } +#Maximum of significant wave height index +'132216' = { + table2Version = 132 ; + indicatorOfParameter = 216 ; + } +#Normalized energy flux into waves +'140211' = { + table2Version = 140 ; + indicatorOfParameter = 211 ; + } +#Normalized energy flux into ocean +'140212' = { + table2Version = 140 ; + indicatorOfParameter = 212 ; + } +#Turbulent Langmuir number +'140213' = { + table2Version = 140 ; + indicatorOfParameter = 213 ; + } +#Normalized stress into ocean +'140214' = { + table2Version = 140 ; + indicatorOfParameter = 214 ; + } +#Reserved +'151193' = { + table2Version = 151 ; + indicatorOfParameter = 193 ; + } +#Vertical integral of divergence of cloud liquid water flux +'162079' = { + table2Version = 162 ; + indicatorOfParameter = 79 ; + } +#Vertical integral of divergence of cloud frozen water flux +'162080' = { + table2Version = 162 ; + indicatorOfParameter = 80 ; + } +#Vertical integral of eastward cloud liquid water flux +'162088' = { + table2Version = 162 ; + indicatorOfParameter = 88 ; + } +#Vertical integral of northward cloud liquid water flux +'162089' = { + table2Version = 162 ; + indicatorOfParameter = 89 ; + } +#Vertical integral of eastward cloud frozen water flux +'162090' = { + table2Version = 162 ; + indicatorOfParameter = 90 ; + } +#Vertical integral of northward cloud frozen water flux +'162091' = { + table2Version = 162 ; + indicatorOfParameter = 91 ; + } +#Vertical integral of mass tendency +'162092' = { + table2Version = 162 ; + indicatorOfParameter = 92 ; + } +#U-tendency from dynamics +'162114' = { + table2Version = 162 ; + indicatorOfParameter = 114 ; + } +#V-tendency from dynamics +'162115' = { + table2Version = 162 ; + indicatorOfParameter = 115 ; + } +#T-tendency from dynamics +'162116' = { + table2Version = 162 ; + indicatorOfParameter = 116 ; + } +#q-tendency from dynamics +'162117' = { + table2Version = 162 ; + indicatorOfParameter = 117 ; + } +#T-tendency from radiation +'162118' = { + table2Version = 162 ; + indicatorOfParameter = 118 ; + } +#U-tendency from turbulent diffusion + subgrid orography +'162119' = { + table2Version = 162 ; + indicatorOfParameter = 119 ; + } +#V-tendency from turbulent diffusion + subgrid orography +'162120' = { + table2Version = 162 ; + indicatorOfParameter = 120 ; + } +#T-tendency from turbulent diffusion + subgrid orography +'162121' = { + table2Version = 162 ; + indicatorOfParameter = 121 ; + } +#q-tendency from turbulent diffusion +'162122' = { + table2Version = 162 ; + indicatorOfParameter = 122 ; + } +#U-tendency from subgrid orography +'162123' = { + table2Version = 162 ; + indicatorOfParameter = 123 ; + } +#V-tendency from subgrid orography +'162124' = { + table2Version = 162 ; + indicatorOfParameter = 124 ; + } +#T-tendency from subgrid orography +'162125' = { + table2Version = 162 ; + indicatorOfParameter = 125 ; + } +#U-tendency from convection (deep+shallow) +'162126' = { + table2Version = 162 ; + indicatorOfParameter = 126 ; + } +#V-tendency from convection (deep+shallow) +'162127' = { + table2Version = 162 ; + indicatorOfParameter = 127 ; + } +#T-tendency from convection (deep+shallow) +'162128' = { + table2Version = 162 ; + indicatorOfParameter = 128 ; + } +#q-tendency from convection (deep+shallow) +'162129' = { + table2Version = 162 ; + indicatorOfParameter = 129 ; + } +#Liquid Precipitation flux from convection +'162130' = { + table2Version = 162 ; + indicatorOfParameter = 130 ; + } +#Ice Precipitation flux from convection +'162131' = { + table2Version = 162 ; + indicatorOfParameter = 131 ; + } +#T-tendency from cloud scheme +'162132' = { + table2Version = 162 ; + indicatorOfParameter = 132 ; + } +#q-tendency from cloud scheme +'162133' = { + table2Version = 162 ; + indicatorOfParameter = 133 ; + } +#ql-tendency from cloud scheme +'162134' = { + table2Version = 162 ; + indicatorOfParameter = 134 ; + } +#qi-tendency from cloud scheme +'162135' = { + table2Version = 162 ; + indicatorOfParameter = 135 ; + } +#Liquid Precip flux from cloud scheme (stratiform) +'162136' = { + table2Version = 162 ; + indicatorOfParameter = 136 ; + } +#Ice Precip flux from cloud scheme (stratiform) +'162137' = { + table2Version = 162 ; + indicatorOfParameter = 137 ; + } +#U-tendency from shallow convection +'162138' = { + table2Version = 162 ; + indicatorOfParameter = 138 ; + } +#V-tendency from shallow convection +'162139' = { + table2Version = 162 ; + indicatorOfParameter = 139 ; + } +#T-tendency from shallow convection +'162140' = { + table2Version = 162 ; + indicatorOfParameter = 140 ; + } +#q-tendency from shallow convection +'162141' = { + table2Version = 162 ; + indicatorOfParameter = 141 ; + } +#100 metre U wind component anomaly +'171006' = { + table2Version = 171 ; + indicatorOfParameter = 6 ; + } +#100 metre V wind component anomaly +'171007' = { + table2Version = 171 ; + indicatorOfParameter = 7 ; + } +#Maximum temperature at 2 metres in the last 6 hours anomaly +'171121' = { + table2Version = 171 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours anomaly +'171122' = { + table2Version = 171 ; + indicatorOfParameter = 122 ; + } +#Clear-sky (II) down surface sw flux +'174010' = { + table2Version = 174 ; + indicatorOfParameter = 10 ; + } +#Clear-sky (II) up surface sw flux +'174013' = { + table2Version = 174 ; + indicatorOfParameter = 13 ; + } +#Visibility at 1.5m +'174025' = { + table2Version = 174 ; + indicatorOfParameter = 25 ; + } +#Minimum temperature at 1.5m since previous post-processing +'174050' = { + table2Version = 174 ; + indicatorOfParameter = 50 ; + } +#Maximum temperature at 1.5m since previous post-processing +'174051' = { + table2Version = 174 ; + indicatorOfParameter = 51 ; + } +#Relative humidity at 1.5m +'174052' = { + table2Version = 174 ; + indicatorOfParameter = 52 ; + } +#Short wave radiation flux at surface +'174116' = { + table2Version = 174 ; + indicatorOfParameter = 116 ; + } +#Short wave radiation flux at top of atmosphere +'174117' = { + table2Version = 174 ; + indicatorOfParameter = 117 ; + } +#Total column water vapour +'174137' = { + table2Version = 174 ; + indicatorOfParameter = 137 ; + } +#Large scale rainfall rate +'174142' = { + table2Version = 174 ; + indicatorOfParameter = 142 ; + } +#Convective rainfall rate +'174143' = { + table2Version = 174 ; + indicatorOfParameter = 143 ; + } +#Very low cloud amount +'174186' = { + table2Version = 174 ; + indicatorOfParameter = 186 ; + } +#Convective snowfall rate +'174239' = { + table2Version = 174 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall rate +'174240' = { + table2Version = 174 ; + indicatorOfParameter = 240 ; + } +#Total cloud amount - random overlap +'174248' = { + table2Version = 174 ; + indicatorOfParameter = 248 ; + } +#Total cloud amount in lw radiation +'174249' = { + table2Version = 174 ; + indicatorOfParameter = 249 ; + } +#Aerosol type 13 mass mixing ratio +'210013' = { + table2Version = 210 ; + indicatorOfParameter = 13 ; + } +#Aerosol type 14 mass mixing ratio +'210014' = { + table2Version = 210 ; + indicatorOfParameter = 14 ; + } +#Aerosol type 15 mass mixing ratio +'210015' = { + table2Version = 210 ; + indicatorOfParameter = 15 ; + } +#SO4 aerosol precursor mass mixing ratio +'210028' = { + table2Version = 210 ; + indicatorOfParameter = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'210029' = { + table2Version = 210 ; + indicatorOfParameter = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'210030' = { + table2Version = 210 ; + indicatorOfParameter = 30 ; + } +#DMS surface emission +'210043' = { + table2Version = 210 ; + indicatorOfParameter = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'210044' = { + table2Version = 210 ; + indicatorOfParameter = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'210045' = { + table2Version = 210 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'210055' = { + table2Version = 210 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'210056' = { + table2Version = 210 ; + indicatorOfParameter = 56 ; + } +#Mixing ration of organic carbon aerosol, nucleation mode +'210057' = { + table2Version = 210 ; + indicatorOfParameter = 57 ; + } +#Monoterpene precursor mixing ratio +'210058' = { + table2Version = 210 ; + indicatorOfParameter = 58 ; + } +#Secondary organic precursor mixing ratio +'210059' = { + table2Version = 210 ; + indicatorOfParameter = 59 ; + } +#Particulate matter d < 1 um +'210072' = { + table2Version = 210 ; + indicatorOfParameter = 72 ; + } +#Particulate matter d < 2.5 um +'210073' = { + table2Version = 210 ; + indicatorOfParameter = 73 ; + } +#Particulate matter d < 10 um +'210074' = { + table2Version = 210 ; + indicatorOfParameter = 74 ; + } +#Wildfire viewing angle of observation +'210079' = { + table2Version = 210 ; + indicatorOfParameter = 79 ; + } +#Wildfire Flux of Ethane (C2H6) +'210118' = { + table2Version = 210 ; + indicatorOfParameter = 118 ; + } +#Altitude of emitter +'210119' = { + table2Version = 210 ; + indicatorOfParameter = 119 ; + } +#Altitude of plume top +'210120' = { + table2Version = 210 ; + indicatorOfParameter = 120 ; + } +#UV visible albedo for direct radiation, isotropic component +'210186' = { + table2Version = 210 ; + indicatorOfParameter = 186 ; + } +#UV visible albedo for direct radiation, volumetric component +'210187' = { + table2Version = 210 ; + indicatorOfParameter = 187 ; + } +#UV visible albedo for direct radiation, geometric component +'210188' = { + table2Version = 210 ; + indicatorOfParameter = 188 ; + } +#Near IR albedo for direct radiation, isotropic component +'210189' = { + table2Version = 210 ; + indicatorOfParameter = 189 ; + } +#Near IR albedo for direct radiation, volumetric component +'210190' = { + table2Version = 210 ; + indicatorOfParameter = 190 ; + } +#Near IR albedo for direct radiation, geometric component +'210191' = { + table2Version = 210 ; + indicatorOfParameter = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component +'210192' = { + table2Version = 210 ; + indicatorOfParameter = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component +'210193' = { + table2Version = 210 ; + indicatorOfParameter = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component +'210194' = { + table2Version = 210 ; + indicatorOfParameter = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component +'210195' = { + table2Version = 210 ; + indicatorOfParameter = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component +'210196' = { + table2Version = 210 ; + indicatorOfParameter = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component +'210197' = { + table2Version = 210 ; + indicatorOfParameter = 197 ; + } +#Total aerosol optical depth at 340 nm +'210217' = { + table2Version = 210 ; + indicatorOfParameter = 217 ; + } +#Total aerosol optical depth at 355 nm +'210218' = { + table2Version = 210 ; + indicatorOfParameter = 218 ; + } +#Total aerosol optical depth at 380 nm +'210219' = { + table2Version = 210 ; + indicatorOfParameter = 219 ; + } +#Total aerosol optical depth at 400 nm +'210220' = { + table2Version = 210 ; + indicatorOfParameter = 220 ; + } +#Total aerosol optical depth at 440 nm +'210221' = { + table2Version = 210 ; + indicatorOfParameter = 221 ; + } +#Total aerosol optical depth at 500 nm +'210222' = { + table2Version = 210 ; + indicatorOfParameter = 222 ; + } +#Total aerosol optical depth at 532 nm +'210223' = { + table2Version = 210 ; + indicatorOfParameter = 223 ; + } +#Total aerosol optical depth at 645 nm +'210224' = { + table2Version = 210 ; + indicatorOfParameter = 224 ; + } +#Total aerosol optical depth at 800 nm +'210225' = { + table2Version = 210 ; + indicatorOfParameter = 225 ; + } +#Total aerosol optical depth at 858 nm +'210226' = { + table2Version = 210 ; + indicatorOfParameter = 226 ; + } +#Total aerosol optical depth at 1020 nm +'210227' = { + table2Version = 210 ; + indicatorOfParameter = 227 ; + } +#Total aerosol optical depth at 1064 nm +'210228' = { + table2Version = 210 ; + indicatorOfParameter = 228 ; + } +#Total aerosol optical depth at 1640 nm +'210229' = { + table2Version = 210 ; + indicatorOfParameter = 229 ; + } +#Total aerosol optical depth at 2130 nm +'210230' = { + table2Version = 210 ; + indicatorOfParameter = 230 ; + } +#Wildfire Flux of Toluene (C7H8) +'210231' = { + table2Version = 210 ; + indicatorOfParameter = 231 ; + } +#Wildfire Flux of Benzene (C6H6) +'210232' = { + table2Version = 210 ; + indicatorOfParameter = 232 ; + } +#Wildfire Flux of Xylene (C8H10) +'210233' = { + table2Version = 210 ; + indicatorOfParameter = 233 ; + } +#Wildfire Flux of Butenes (C4H8) +'210234' = { + table2Version = 210 ; + indicatorOfParameter = 234 ; + } +#Wildfire Flux of Pentenes (C5H10) +'210235' = { + table2Version = 210 ; + indicatorOfParameter = 235 ; + } +#Wildfire Flux of Hexene (C6H12) +'210236' = { + table2Version = 210 ; + indicatorOfParameter = 236 ; + } +#Wildfire Flux of Octene (C8H16) +'210237' = { + table2Version = 210 ; + indicatorOfParameter = 237 ; + } +#Wildfire Flux of Butanes (C4H10) +'210238' = { + table2Version = 210 ; + indicatorOfParameter = 238 ; + } +#Wildfire Flux of Pentanes (C5H12) +'210239' = { + table2Version = 210 ; + indicatorOfParameter = 239 ; + } +#Wildfire Flux of Hexanes (C6H14) +'210240' = { + table2Version = 210 ; + indicatorOfParameter = 240 ; + } +#Wildfire Flux of Heptane (C7H16) +'210241' = { + table2Version = 210 ; + indicatorOfParameter = 241 ; + } +#Aerosol type 13 mass mixing ratio +'211013' = { + table2Version = 211 ; + indicatorOfParameter = 13 ; + } +#Aerosol type 14 mass mixing ratio +'211014' = { + table2Version = 211 ; + indicatorOfParameter = 14 ; + } +#SO4 aerosol precursor mass mixing ratio +'211028' = { + table2Version = 211 ; + indicatorOfParameter = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'211029' = { + table2Version = 211 ; + indicatorOfParameter = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'211030' = { + table2Version = 211 ; + indicatorOfParameter = 30 ; + } +#DMS surface emission +'211043' = { + table2Version = 211 ; + indicatorOfParameter = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'211044' = { + table2Version = 211 ; + indicatorOfParameter = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'211045' = { + table2Version = 211 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'211055' = { + table2Version = 211 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'211056' = { + table2Version = 211 ; + indicatorOfParameter = 56 ; + } +#Wildfire Flux of Ethane (C2H6) +'211118' = { + table2Version = 211 ; + indicatorOfParameter = 118 ; + } +#Altitude of emitter +'211119' = { + table2Version = 211 ; + indicatorOfParameter = 119 ; + } +#Altitude of plume top +'211120' = { + table2Version = 211 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'212001' = { + table2Version = 212 ; + indicatorOfParameter = 1 ; + } +#Experimental product +'212002' = { + table2Version = 212 ; + indicatorOfParameter = 2 ; + } +#Experimental product +'212003' = { + table2Version = 212 ; + indicatorOfParameter = 3 ; + } +#Experimental product +'212004' = { + table2Version = 212 ; + indicatorOfParameter = 4 ; + } +#Experimental product +'212005' = { + table2Version = 212 ; + indicatorOfParameter = 5 ; + } +#Experimental product +'212006' = { + table2Version = 212 ; + indicatorOfParameter = 6 ; + } +#Experimental product +'212007' = { + table2Version = 212 ; + indicatorOfParameter = 7 ; + } +#Experimental product +'212008' = { + table2Version = 212 ; + indicatorOfParameter = 8 ; + } +#Experimental product +'212009' = { + table2Version = 212 ; + indicatorOfParameter = 9 ; + } +#Experimental product +'212010' = { + table2Version = 212 ; + indicatorOfParameter = 10 ; + } +#Experimental product +'212011' = { + table2Version = 212 ; + indicatorOfParameter = 11 ; + } +#Experimental product +'212012' = { + table2Version = 212 ; + indicatorOfParameter = 12 ; + } +#Experimental product +'212013' = { + table2Version = 212 ; + indicatorOfParameter = 13 ; + } +#Experimental product +'212014' = { + table2Version = 212 ; + indicatorOfParameter = 14 ; + } +#Experimental product +'212015' = { + table2Version = 212 ; + indicatorOfParameter = 15 ; + } +#Experimental product +'212016' = { + table2Version = 212 ; + indicatorOfParameter = 16 ; + } +#Experimental product +'212017' = { + table2Version = 212 ; + indicatorOfParameter = 17 ; + } +#Experimental product +'212018' = { + table2Version = 212 ; + indicatorOfParameter = 18 ; + } +#Experimental product +'212019' = { + table2Version = 212 ; + indicatorOfParameter = 19 ; + } +#Experimental product +'212020' = { + table2Version = 212 ; + indicatorOfParameter = 20 ; + } +#Experimental product +'212021' = { + table2Version = 212 ; + indicatorOfParameter = 21 ; + } +#Experimental product +'212022' = { + table2Version = 212 ; + indicatorOfParameter = 22 ; + } +#Experimental product +'212023' = { + table2Version = 212 ; + indicatorOfParameter = 23 ; + } +#Experimental product +'212024' = { + table2Version = 212 ; + indicatorOfParameter = 24 ; + } +#Experimental product +'212025' = { + table2Version = 212 ; + indicatorOfParameter = 25 ; + } +#Experimental product +'212026' = { + table2Version = 212 ; + indicatorOfParameter = 26 ; + } +#Experimental product +'212027' = { + table2Version = 212 ; + indicatorOfParameter = 27 ; + } +#Experimental product +'212028' = { + table2Version = 212 ; + indicatorOfParameter = 28 ; + } +#Experimental product +'212029' = { + table2Version = 212 ; + indicatorOfParameter = 29 ; + } +#Experimental product +'212030' = { + table2Version = 212 ; + indicatorOfParameter = 30 ; + } +#Experimental product +'212031' = { + table2Version = 212 ; + indicatorOfParameter = 31 ; + } +#Experimental product +'212032' = { + table2Version = 212 ; + indicatorOfParameter = 32 ; + } +#Experimental product +'212033' = { + table2Version = 212 ; + indicatorOfParameter = 33 ; + } +#Experimental product +'212034' = { + table2Version = 212 ; + indicatorOfParameter = 34 ; + } +#Experimental product +'212035' = { + table2Version = 212 ; + indicatorOfParameter = 35 ; + } +#Experimental product +'212036' = { + table2Version = 212 ; + indicatorOfParameter = 36 ; + } +#Experimental product +'212037' = { + table2Version = 212 ; + indicatorOfParameter = 37 ; + } +#Experimental product +'212038' = { + table2Version = 212 ; + indicatorOfParameter = 38 ; + } +#Experimental product +'212039' = { + table2Version = 212 ; + indicatorOfParameter = 39 ; + } +#Experimental product +'212040' = { + table2Version = 212 ; + indicatorOfParameter = 40 ; + } +#Experimental product +'212041' = { + table2Version = 212 ; + indicatorOfParameter = 41 ; + } +#Experimental product +'212042' = { + table2Version = 212 ; + indicatorOfParameter = 42 ; + } +#Experimental product +'212043' = { + table2Version = 212 ; + indicatorOfParameter = 43 ; + } +#Experimental product +'212044' = { + table2Version = 212 ; + indicatorOfParameter = 44 ; + } +#Experimental product +'212045' = { + table2Version = 212 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'212046' = { + table2Version = 212 ; + indicatorOfParameter = 46 ; + } +#Experimental product +'212047' = { + table2Version = 212 ; + indicatorOfParameter = 47 ; + } +#Experimental product +'212048' = { + table2Version = 212 ; + indicatorOfParameter = 48 ; + } +#Experimental product +'212049' = { + table2Version = 212 ; + indicatorOfParameter = 49 ; + } +#Experimental product +'212050' = { + table2Version = 212 ; + indicatorOfParameter = 50 ; + } +#Experimental product +'212051' = { + table2Version = 212 ; + indicatorOfParameter = 51 ; + } +#Experimental product +'212052' = { + table2Version = 212 ; + indicatorOfParameter = 52 ; + } +#Experimental product +'212053' = { + table2Version = 212 ; + indicatorOfParameter = 53 ; + } +#Experimental product +'212054' = { + table2Version = 212 ; + indicatorOfParameter = 54 ; + } +#Experimental product +'212055' = { + table2Version = 212 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'212056' = { + table2Version = 212 ; + indicatorOfParameter = 56 ; + } +#Experimental product +'212057' = { + table2Version = 212 ; + indicatorOfParameter = 57 ; + } +#Experimental product +'212058' = { + table2Version = 212 ; + indicatorOfParameter = 58 ; + } +#Experimental product +'212059' = { + table2Version = 212 ; + indicatorOfParameter = 59 ; + } +#Experimental product +'212060' = { + table2Version = 212 ; + indicatorOfParameter = 60 ; + } +#Experimental product +'212061' = { + table2Version = 212 ; + indicatorOfParameter = 61 ; + } +#Experimental product +'212062' = { + table2Version = 212 ; + indicatorOfParameter = 62 ; + } +#Experimental product +'212063' = { + table2Version = 212 ; + indicatorOfParameter = 63 ; + } +#Experimental product +'212064' = { + table2Version = 212 ; + indicatorOfParameter = 64 ; + } +#Experimental product +'212065' = { + table2Version = 212 ; + indicatorOfParameter = 65 ; + } +#Experimental product +'212066' = { + table2Version = 212 ; + indicatorOfParameter = 66 ; + } +#Experimental product +'212067' = { + table2Version = 212 ; + indicatorOfParameter = 67 ; + } +#Experimental product +'212068' = { + table2Version = 212 ; + indicatorOfParameter = 68 ; + } +#Experimental product +'212069' = { + table2Version = 212 ; + indicatorOfParameter = 69 ; + } +#Experimental product +'212070' = { + table2Version = 212 ; + indicatorOfParameter = 70 ; + } +#Experimental product +'212071' = { + table2Version = 212 ; + indicatorOfParameter = 71 ; + } +#Experimental product +'212072' = { + table2Version = 212 ; + indicatorOfParameter = 72 ; + } +#Experimental product +'212073' = { + table2Version = 212 ; + indicatorOfParameter = 73 ; + } +#Experimental product +'212074' = { + table2Version = 212 ; + indicatorOfParameter = 74 ; + } +#Experimental product +'212075' = { + table2Version = 212 ; + indicatorOfParameter = 75 ; + } +#Experimental product +'212076' = { + table2Version = 212 ; + indicatorOfParameter = 76 ; + } +#Experimental product +'212077' = { + table2Version = 212 ; + indicatorOfParameter = 77 ; + } +#Experimental product +'212078' = { + table2Version = 212 ; + indicatorOfParameter = 78 ; + } +#Experimental product +'212079' = { + table2Version = 212 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'212080' = { + table2Version = 212 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'212081' = { + table2Version = 212 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'212082' = { + table2Version = 212 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'212083' = { + table2Version = 212 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'212084' = { + table2Version = 212 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'212085' = { + table2Version = 212 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'212086' = { + table2Version = 212 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'212087' = { + table2Version = 212 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'212088' = { + table2Version = 212 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'212089' = { + table2Version = 212 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'212090' = { + table2Version = 212 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'212091' = { + table2Version = 212 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'212092' = { + table2Version = 212 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'212093' = { + table2Version = 212 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'212094' = { + table2Version = 212 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'212095' = { + table2Version = 212 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'212096' = { + table2Version = 212 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'212097' = { + table2Version = 212 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'212098' = { + table2Version = 212 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'212099' = { + table2Version = 212 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'212100' = { + table2Version = 212 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'212101' = { + table2Version = 212 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'212102' = { + table2Version = 212 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'212103' = { + table2Version = 212 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'212104' = { + table2Version = 212 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'212105' = { + table2Version = 212 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'212106' = { + table2Version = 212 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'212107' = { + table2Version = 212 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'212108' = { + table2Version = 212 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'212109' = { + table2Version = 212 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'212110' = { + table2Version = 212 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'212111' = { + table2Version = 212 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'212112' = { + table2Version = 212 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'212113' = { + table2Version = 212 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'212114' = { + table2Version = 212 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'212115' = { + table2Version = 212 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'212116' = { + table2Version = 212 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'212117' = { + table2Version = 212 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'212118' = { + table2Version = 212 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'212119' = { + table2Version = 212 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'212120' = { + table2Version = 212 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'212121' = { + table2Version = 212 ; + indicatorOfParameter = 121 ; + } +#Experimental product +'212122' = { + table2Version = 212 ; + indicatorOfParameter = 122 ; + } +#Experimental product +'212123' = { + table2Version = 212 ; + indicatorOfParameter = 123 ; + } +#Experimental product +'212124' = { + table2Version = 212 ; + indicatorOfParameter = 124 ; + } +#Experimental product +'212125' = { + table2Version = 212 ; + indicatorOfParameter = 125 ; + } +#Experimental product +'212126' = { + table2Version = 212 ; + indicatorOfParameter = 126 ; + } +#Experimental product +'212127' = { + table2Version = 212 ; + indicatorOfParameter = 127 ; + } +#Experimental product +'212128' = { + table2Version = 212 ; + indicatorOfParameter = 128 ; + } +#Experimental product +'212129' = { + table2Version = 212 ; + indicatorOfParameter = 129 ; + } +#Experimental product +'212130' = { + table2Version = 212 ; + indicatorOfParameter = 130 ; + } +#Experimental product +'212131' = { + table2Version = 212 ; + indicatorOfParameter = 131 ; + } +#Experimental product +'212132' = { + table2Version = 212 ; + indicatorOfParameter = 132 ; + } +#Experimental product +'212133' = { + table2Version = 212 ; + indicatorOfParameter = 133 ; + } +#Experimental product +'212134' = { + table2Version = 212 ; + indicatorOfParameter = 134 ; + } +#Experimental product +'212135' = { + table2Version = 212 ; + indicatorOfParameter = 135 ; + } +#Experimental product +'212136' = { + table2Version = 212 ; + indicatorOfParameter = 136 ; + } +#Experimental product +'212137' = { + table2Version = 212 ; + indicatorOfParameter = 137 ; + } +#Experimental product +'212138' = { + table2Version = 212 ; + indicatorOfParameter = 138 ; + } +#Experimental product +'212139' = { + table2Version = 212 ; + indicatorOfParameter = 139 ; + } +#Experimental product +'212140' = { + table2Version = 212 ; + indicatorOfParameter = 140 ; + } +#Experimental product +'212141' = { + table2Version = 212 ; + indicatorOfParameter = 141 ; + } +#Experimental product +'212142' = { + table2Version = 212 ; + indicatorOfParameter = 142 ; + } +#Experimental product +'212143' = { + table2Version = 212 ; + indicatorOfParameter = 143 ; + } +#Experimental product +'212144' = { + table2Version = 212 ; + indicatorOfParameter = 144 ; + } +#Experimental product +'212145' = { + table2Version = 212 ; + indicatorOfParameter = 145 ; + } +#Experimental product +'212146' = { + table2Version = 212 ; + indicatorOfParameter = 146 ; + } +#Experimental product +'212147' = { + table2Version = 212 ; + indicatorOfParameter = 147 ; + } +#Experimental product +'212148' = { + table2Version = 212 ; + indicatorOfParameter = 148 ; + } +#Experimental product +'212149' = { + table2Version = 212 ; + indicatorOfParameter = 149 ; + } +#Experimental product +'212150' = { + table2Version = 212 ; + indicatorOfParameter = 150 ; + } +#Experimental product +'212151' = { + table2Version = 212 ; + indicatorOfParameter = 151 ; + } +#Experimental product +'212152' = { + table2Version = 212 ; + indicatorOfParameter = 152 ; + } +#Experimental product +'212153' = { + table2Version = 212 ; + indicatorOfParameter = 153 ; + } +#Experimental product +'212154' = { + table2Version = 212 ; + indicatorOfParameter = 154 ; + } +#Experimental product +'212155' = { + table2Version = 212 ; + indicatorOfParameter = 155 ; + } +#Experimental product +'212156' = { + table2Version = 212 ; + indicatorOfParameter = 156 ; + } +#Experimental product +'212157' = { + table2Version = 212 ; + indicatorOfParameter = 157 ; + } +#Experimental product +'212158' = { + table2Version = 212 ; + indicatorOfParameter = 158 ; + } +#Experimental product +'212159' = { + table2Version = 212 ; + indicatorOfParameter = 159 ; + } +#Experimental product +'212160' = { + table2Version = 212 ; + indicatorOfParameter = 160 ; + } +#Experimental product +'212161' = { + table2Version = 212 ; + indicatorOfParameter = 161 ; + } +#Experimental product +'212162' = { + table2Version = 212 ; + indicatorOfParameter = 162 ; + } +#Experimental product +'212163' = { + table2Version = 212 ; + indicatorOfParameter = 163 ; + } +#Experimental product +'212164' = { + table2Version = 212 ; + indicatorOfParameter = 164 ; + } +#Experimental product +'212165' = { + table2Version = 212 ; + indicatorOfParameter = 165 ; + } +#Experimental product +'212166' = { + table2Version = 212 ; + indicatorOfParameter = 166 ; + } +#Experimental product +'212167' = { + table2Version = 212 ; + indicatorOfParameter = 167 ; + } +#Experimental product +'212168' = { + table2Version = 212 ; + indicatorOfParameter = 168 ; + } +#Experimental product +'212169' = { + table2Version = 212 ; + indicatorOfParameter = 169 ; + } +#Experimental product +'212170' = { + table2Version = 212 ; + indicatorOfParameter = 170 ; + } +#Experimental product +'212171' = { + table2Version = 212 ; + indicatorOfParameter = 171 ; + } +#Experimental product +'212172' = { + table2Version = 212 ; + indicatorOfParameter = 172 ; + } +#Experimental product +'212173' = { + table2Version = 212 ; + indicatorOfParameter = 173 ; + } +#Experimental product +'212174' = { + table2Version = 212 ; + indicatorOfParameter = 174 ; + } +#Experimental product +'212175' = { + table2Version = 212 ; + indicatorOfParameter = 175 ; + } +#Experimental product +'212176' = { + table2Version = 212 ; + indicatorOfParameter = 176 ; + } +#Experimental product +'212177' = { + table2Version = 212 ; + indicatorOfParameter = 177 ; + } +#Experimental product +'212178' = { + table2Version = 212 ; + indicatorOfParameter = 178 ; + } +#Experimental product +'212179' = { + table2Version = 212 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'212180' = { + table2Version = 212 ; + indicatorOfParameter = 180 ; + } +#Experimental product +'212181' = { + table2Version = 212 ; + indicatorOfParameter = 181 ; + } +#Experimental product +'212182' = { + table2Version = 212 ; + indicatorOfParameter = 182 ; + } +#Experimental product +'212183' = { + table2Version = 212 ; + indicatorOfParameter = 183 ; + } +#Experimental product +'212184' = { + table2Version = 212 ; + indicatorOfParameter = 184 ; + } +#Experimental product +'212185' = { + table2Version = 212 ; + indicatorOfParameter = 185 ; + } +#Experimental product +'212186' = { + table2Version = 212 ; + indicatorOfParameter = 186 ; + } +#Experimental product +'212187' = { + table2Version = 212 ; + indicatorOfParameter = 187 ; + } +#Experimental product +'212188' = { + table2Version = 212 ; + indicatorOfParameter = 188 ; + } +#Experimental product +'212189' = { + table2Version = 212 ; + indicatorOfParameter = 189 ; + } +#Experimental product +'212190' = { + table2Version = 212 ; + indicatorOfParameter = 190 ; + } +#Experimental product +'212191' = { + table2Version = 212 ; + indicatorOfParameter = 191 ; + } +#Experimental product +'212192' = { + table2Version = 212 ; + indicatorOfParameter = 192 ; + } +#Experimental product +'212193' = { + table2Version = 212 ; + indicatorOfParameter = 193 ; + } +#Experimental product +'212194' = { + table2Version = 212 ; + indicatorOfParameter = 194 ; + } +#Experimental product +'212195' = { + table2Version = 212 ; + indicatorOfParameter = 195 ; + } +#Experimental product +'212196' = { + table2Version = 212 ; + indicatorOfParameter = 196 ; + } +#Experimental product +'212197' = { + table2Version = 212 ; + indicatorOfParameter = 197 ; + } +#Experimental product +'212198' = { + table2Version = 212 ; + indicatorOfParameter = 198 ; + } +#Experimental product +'212199' = { + table2Version = 212 ; + indicatorOfParameter = 199 ; + } +#Experimental product +'212200' = { + table2Version = 212 ; + indicatorOfParameter = 200 ; + } +#Experimental product +'212201' = { + table2Version = 212 ; + indicatorOfParameter = 201 ; + } +#Experimental product +'212202' = { + table2Version = 212 ; + indicatorOfParameter = 202 ; + } +#Experimental product +'212203' = { + table2Version = 212 ; + indicatorOfParameter = 203 ; + } +#Experimental product +'212204' = { + table2Version = 212 ; + indicatorOfParameter = 204 ; + } +#Experimental product +'212205' = { + table2Version = 212 ; + indicatorOfParameter = 205 ; + } +#Experimental product +'212206' = { + table2Version = 212 ; + indicatorOfParameter = 206 ; + } +#Experimental product +'212207' = { + table2Version = 212 ; + indicatorOfParameter = 207 ; + } +#Experimental product +'212208' = { + table2Version = 212 ; + indicatorOfParameter = 208 ; + } +#Experimental product +'212209' = { + table2Version = 212 ; + indicatorOfParameter = 209 ; + } +#Experimental product +'212210' = { + table2Version = 212 ; + indicatorOfParameter = 210 ; + } +#Experimental product +'212211' = { + table2Version = 212 ; + indicatorOfParameter = 211 ; + } +#Experimental product +'212212' = { + table2Version = 212 ; + indicatorOfParameter = 212 ; + } +#Experimental product +'212213' = { + table2Version = 212 ; + indicatorOfParameter = 213 ; + } +#Experimental product +'212214' = { + table2Version = 212 ; + indicatorOfParameter = 214 ; + } +#Experimental product +'212215' = { + table2Version = 212 ; + indicatorOfParameter = 215 ; + } +#Experimental product +'212216' = { + table2Version = 212 ; + indicatorOfParameter = 216 ; + } +#Experimental product +'212217' = { + table2Version = 212 ; + indicatorOfParameter = 217 ; + } +#Experimental product +'212218' = { + table2Version = 212 ; + indicatorOfParameter = 218 ; + } +#Experimental product +'212219' = { + table2Version = 212 ; + indicatorOfParameter = 219 ; + } +#Experimental product +'212220' = { + table2Version = 212 ; + indicatorOfParameter = 220 ; + } +#Experimental product +'212221' = { + table2Version = 212 ; + indicatorOfParameter = 221 ; + } +#Experimental product +'212222' = { + table2Version = 212 ; + indicatorOfParameter = 222 ; + } +#Experimental product +'212223' = { + table2Version = 212 ; + indicatorOfParameter = 223 ; + } +#Experimental product +'212224' = { + table2Version = 212 ; + indicatorOfParameter = 224 ; + } +#Experimental product +'212225' = { + table2Version = 212 ; + indicatorOfParameter = 225 ; + } +#Experimental product +'212226' = { + table2Version = 212 ; + indicatorOfParameter = 226 ; + } +#Experimental product +'212227' = { + table2Version = 212 ; + indicatorOfParameter = 227 ; + } +#Experimental product +'212228' = { + table2Version = 212 ; + indicatorOfParameter = 228 ; + } +#Experimental product +'212229' = { + table2Version = 212 ; + indicatorOfParameter = 229 ; + } +#Experimental product +'212230' = { + table2Version = 212 ; + indicatorOfParameter = 230 ; + } +#Experimental product +'212231' = { + table2Version = 212 ; + indicatorOfParameter = 231 ; + } +#Experimental product +'212232' = { + table2Version = 212 ; + indicatorOfParameter = 232 ; + } +#Experimental product +'212233' = { + table2Version = 212 ; + indicatorOfParameter = 233 ; + } +#Experimental product +'212234' = { + table2Version = 212 ; + indicatorOfParameter = 234 ; + } +#Experimental product +'212235' = { + table2Version = 212 ; + indicatorOfParameter = 235 ; + } +#Experimental product +'212236' = { + table2Version = 212 ; + indicatorOfParameter = 236 ; + } +#Experimental product +'212237' = { + table2Version = 212 ; + indicatorOfParameter = 237 ; + } +#Experimental product +'212238' = { + table2Version = 212 ; + indicatorOfParameter = 238 ; + } +#Experimental product +'212239' = { + table2Version = 212 ; + indicatorOfParameter = 239 ; + } +#Experimental product +'212240' = { + table2Version = 212 ; + indicatorOfParameter = 240 ; + } +#Experimental product +'212241' = { + table2Version = 212 ; + indicatorOfParameter = 241 ; + } +#Experimental product +'212242' = { + table2Version = 212 ; + indicatorOfParameter = 242 ; + } +#Experimental product +'212243' = { + table2Version = 212 ; + indicatorOfParameter = 243 ; + } +#Experimental product +'212244' = { + table2Version = 212 ; + indicatorOfParameter = 244 ; + } +#Experimental product +'212245' = { + table2Version = 212 ; + indicatorOfParameter = 245 ; + } +#Experimental product +'212246' = { + table2Version = 212 ; + indicatorOfParameter = 246 ; + } +#Experimental product +'212247' = { + table2Version = 212 ; + indicatorOfParameter = 247 ; + } +#Experimental product +'212248' = { + table2Version = 212 ; + indicatorOfParameter = 248 ; + } +#Experimental product +'212249' = { + table2Version = 212 ; + indicatorOfParameter = 249 ; + } +#Experimental product +'212250' = { + table2Version = 212 ; + indicatorOfParameter = 250 ; + } +#Experimental product +'212251' = { + table2Version = 212 ; + indicatorOfParameter = 251 ; + } +#Experimental product +'212252' = { + table2Version = 212 ; + indicatorOfParameter = 252 ; + } +#Experimental product +'212253' = { + table2Version = 212 ; + indicatorOfParameter = 253 ; + } +#Experimental product +'212254' = { + table2Version = 212 ; + indicatorOfParameter = 254 ; + } +#Experimental product +'212255' = { + table2Version = 212 ; + indicatorOfParameter = 255 ; + } +#Random pattern 1 for sppt +'213001' = { + table2Version = 213 ; + indicatorOfParameter = 1 ; + } +#Random pattern 2 for sppt +'213002' = { + table2Version = 213 ; + indicatorOfParameter = 2 ; + } +#Random pattern 3 for sppt +'213003' = { + table2Version = 213 ; + indicatorOfParameter = 3 ; + } +#Random pattern 4 for sppt +'213004' = { + table2Version = 213 ; + indicatorOfParameter = 4 ; + } +#Random pattern 5 for sppt +'213005' = { + table2Version = 213 ; + indicatorOfParameter = 5 ; + } +# Cosine of solar zenith angle +'214001' = { + table2Version = 214 ; + indicatorOfParameter = 1 ; + } +# UV biologically effective dose +'214002' = { + table2Version = 214 ; + indicatorOfParameter = 2 ; + } +# UV biologically effective dose clear-sky +'214003' = { + table2Version = 214 ; + indicatorOfParameter = 3 ; + } +# Total surface UV spectral flux (280-285 nm) +'214004' = { + table2Version = 214 ; + indicatorOfParameter = 4 ; + } +# Total surface UV spectral flux (285-290 nm) +'214005' = { + table2Version = 214 ; + indicatorOfParameter = 5 ; + } +# Total surface UV spectral flux (290-295 nm) +'214006' = { + table2Version = 214 ; + indicatorOfParameter = 6 ; + } +# Total surface UV spectral flux (295-300 nm) +'214007' = { + table2Version = 214 ; + indicatorOfParameter = 7 ; + } +# Total surface UV spectral flux (300-305 nm) +'214008' = { + table2Version = 214 ; + indicatorOfParameter = 8 ; + } +# Total surface UV spectral flux (305-310 nm) +'214009' = { + table2Version = 214 ; + indicatorOfParameter = 9 ; + } +# Total surface UV spectral flux (310-315 nm) +'214010' = { + table2Version = 214 ; + indicatorOfParameter = 10 ; + } +# Total surface UV spectral flux (315-320 nm) +'214011' = { + table2Version = 214 ; + indicatorOfParameter = 11 ; + } +# Total surface UV spectral flux (320-325 nm) +'214012' = { + table2Version = 214 ; + indicatorOfParameter = 12 ; + } +# Total surface UV spectral flux (325-330 nm) +'214013' = { + table2Version = 214 ; + indicatorOfParameter = 13 ; + } +# Total surface UV spectral flux (330-335 nm) +'214014' = { + table2Version = 214 ; + indicatorOfParameter = 14 ; + } +# Total surface UV spectral flux (335-340 nm) +'214015' = { + table2Version = 214 ; + indicatorOfParameter = 15 ; + } +# Total surface UV spectral flux (340-345 nm) +'214016' = { + table2Version = 214 ; + indicatorOfParameter = 16 ; + } +# Total surface UV spectral flux (345-350 nm) +'214017' = { + table2Version = 214 ; + indicatorOfParameter = 17 ; + } +# Total surface UV spectral flux (350-355 nm) +'214018' = { + table2Version = 214 ; + indicatorOfParameter = 18 ; + } +# Total surface UV spectral flux (355-360 nm) +'214019' = { + table2Version = 214 ; + indicatorOfParameter = 19 ; + } +# Total surface UV spectral flux (360-365 nm) +'214020' = { + table2Version = 214 ; + indicatorOfParameter = 20 ; + } +# Total surface UV spectral flux (365-370 nm) +'214021' = { + table2Version = 214 ; + indicatorOfParameter = 21 ; + } +# Total surface UV spectral flux (370-375 nm) +'214022' = { + table2Version = 214 ; + indicatorOfParameter = 22 ; + } +# Total surface UV spectral flux (375-380 nm) +'214023' = { + table2Version = 214 ; + indicatorOfParameter = 23 ; + } +# Total surface UV spectral flux (380-385 nm) +'214024' = { + table2Version = 214 ; + indicatorOfParameter = 24 ; + } +# Total surface UV spectral flux (385-390 nm) +'214025' = { + table2Version = 214 ; + indicatorOfParameter = 25 ; + } +# Total surface UV spectral flux (390-395 nm) +'214026' = { + table2Version = 214 ; + indicatorOfParameter = 26 ; + } +# Total surface UV spectral flux (395-400 nm) +'214027' = { + table2Version = 214 ; + indicatorOfParameter = 27 ; + } +# Clear-sky surface UV spectral flux (280-285 nm) +'214028' = { + table2Version = 214 ; + indicatorOfParameter = 28 ; + } +# Clear-sky surface UV spectral flux (285-290 nm) +'214029' = { + table2Version = 214 ; + indicatorOfParameter = 29 ; + } +# Clear-sky surface UV spectral flux (290-295 nm) +'214030' = { + table2Version = 214 ; + indicatorOfParameter = 30 ; + } +# Clear-sky surface UV spectral flux (295-300 nm) +'214031' = { + table2Version = 214 ; + indicatorOfParameter = 31 ; + } +# Clear-sky surface UV spectral flux (300-305 nm) +'214032' = { + table2Version = 214 ; + indicatorOfParameter = 32 ; + } +# Clear-sky surface UV spectral flux (305-310 nm) +'214033' = { + table2Version = 214 ; + indicatorOfParameter = 33 ; + } +# Clear-sky surface UV spectral flux (310-315 nm) +'214034' = { + table2Version = 214 ; + indicatorOfParameter = 34 ; + } +# Clear-sky surface UV spectral flux (315-320 nm) +'214035' = { + table2Version = 214 ; + indicatorOfParameter = 35 ; + } +# Clear-sky surface UV spectral flux (320-325 nm) +'214036' = { + table2Version = 214 ; + indicatorOfParameter = 36 ; + } +# Clear-sky surface UV spectral flux (325-330 nm) +'214037' = { + table2Version = 214 ; + indicatorOfParameter = 37 ; + } +# Clear-sky surface UV spectral flux (330-335 nm) +'214038' = { + table2Version = 214 ; + indicatorOfParameter = 38 ; + } +# Clear-sky surface UV spectral flux (335-340 nm) +'214039' = { + table2Version = 214 ; + indicatorOfParameter = 39 ; + } +# Clear-sky surface UV spectral flux (340-345 nm) +'214040' = { + table2Version = 214 ; + indicatorOfParameter = 40 ; + } +# Clear-sky surface UV spectral flux (345-350 nm) +'214041' = { + table2Version = 214 ; + indicatorOfParameter = 41 ; + } +# Clear-sky surface UV spectral flux (350-355 nm) +'214042' = { + table2Version = 214 ; + indicatorOfParameter = 42 ; + } +# Clear-sky surface UV spectral flux (355-360 nm) +'214043' = { + table2Version = 214 ; + indicatorOfParameter = 43 ; + } +# Clear-sky surface UV spectral flux (360-365 nm) +'214044' = { + table2Version = 214 ; + indicatorOfParameter = 44 ; + } +# Clear-sky surface UV spectral flux (365-370 nm) +'214045' = { + table2Version = 214 ; + indicatorOfParameter = 45 ; + } +# Clear-sky surface UV spectral flux (370-375 nm) +'214046' = { + table2Version = 214 ; + indicatorOfParameter = 46 ; + } +# Clear-sky surface UV spectral flux (375-380 nm) +'214047' = { + table2Version = 214 ; + indicatorOfParameter = 47 ; + } +# Clear-sky surface UV spectral flux (380-385 nm) +'214048' = { + table2Version = 214 ; + indicatorOfParameter = 48 ; + } +# Clear-sky surface UV spectral flux (385-390 nm) +'214049' = { + table2Version = 214 ; + indicatorOfParameter = 49 ; + } +# Clear-sky surface UV spectral flux (390-395 nm) +'214050' = { + table2Version = 214 ; + indicatorOfParameter = 50 ; + } +# Clear-sky surface UV spectral flux (395-400 nm) +'214051' = { + table2Version = 214 ; + indicatorOfParameter = 51 ; + } +# Profile of optical thickness at 340 nm +'214052' = { + table2Version = 214 ; + indicatorOfParameter = 52 ; + } +# Source/gain of sea salt aerosol (0.03 - 0.5 um) +'215001' = { + table2Version = 215 ; + indicatorOfParameter = 1 ; + } +# Source/gain of sea salt aerosol (0.5 - 5 um) +'215002' = { + table2Version = 215 ; + indicatorOfParameter = 2 ; + } +# Source/gain of sea salt aerosol (5 - 20 um) +'215003' = { + table2Version = 215 ; + indicatorOfParameter = 3 ; + } +# Dry deposition of sea salt aerosol (0.03 - 0.5 um) +'215004' = { + table2Version = 215 ; + indicatorOfParameter = 4 ; + } +# Dry deposition of sea salt aerosol (0.5 - 5 um) +'215005' = { + table2Version = 215 ; + indicatorOfParameter = 5 ; + } +# Dry deposition of sea salt aerosol (5 - 20 um) +'215006' = { + table2Version = 215 ; + indicatorOfParameter = 6 ; + } +# Sedimentation of sea salt aerosol (0.03 - 0.5 um) +'215007' = { + table2Version = 215 ; + indicatorOfParameter = 7 ; + } +# Sedimentation of sea salt aerosol (0.5 - 5 um) +'215008' = { + table2Version = 215 ; + indicatorOfParameter = 8 ; + } +# Sedimentation of sea salt aerosol (5 - 20 um) +'215009' = { + table2Version = 215 ; + indicatorOfParameter = 9 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation +'215010' = { + table2Version = 215 ; + indicatorOfParameter = 10 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation +'215011' = { + table2Version = 215 ; + indicatorOfParameter = 11 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation +'215012' = { + table2Version = 215 ; + indicatorOfParameter = 12 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation +'215013' = { + table2Version = 215 ; + indicatorOfParameter = 13 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation +'215014' = { + table2Version = 215 ; + indicatorOfParameter = 14 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation +'215015' = { + table2Version = 215 ; + indicatorOfParameter = 15 ; + } +# Negative fixer of sea salt aerosol (0.03 - 0.5 um) +'215016' = { + table2Version = 215 ; + indicatorOfParameter = 16 ; + } +# Negative fixer of sea salt aerosol (0.5 - 5 um) +'215017' = { + table2Version = 215 ; + indicatorOfParameter = 17 ; + } +# Negative fixer of sea salt aerosol (5 - 20 um) +'215018' = { + table2Version = 215 ; + indicatorOfParameter = 18 ; + } +# Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um) +'215019' = { + table2Version = 215 ; + indicatorOfParameter = 19 ; + } +# Vertically integrated mass of sea salt aerosol (0.5 - 5 um) +'215020' = { + table2Version = 215 ; + indicatorOfParameter = 20 ; + } +# Vertically integrated mass of sea salt aerosol (5 - 20 um) +'215021' = { + table2Version = 215 ; + indicatorOfParameter = 21 ; + } +# Sea salt aerosol (0.03 - 0.5 um) optical depth +'215022' = { + table2Version = 215 ; + indicatorOfParameter = 22 ; + } +# Sea salt aerosol (0.5 - 5 um) optical depth +'215023' = { + table2Version = 215 ; + indicatorOfParameter = 23 ; + } +# Sea salt aerosol (5 - 20 um) optical depth +'215024' = { + table2Version = 215 ; + indicatorOfParameter = 24 ; + } +# Source/gain of dust aerosol (0.03 - 0.55 um) +'215025' = { + table2Version = 215 ; + indicatorOfParameter = 25 ; + } +# Source/gain of dust aerosol (0.55 - 9 um) +'215026' = { + table2Version = 215 ; + indicatorOfParameter = 26 ; + } +# Source/gain of dust aerosol (9 - 20 um) +'215027' = { + table2Version = 215 ; + indicatorOfParameter = 27 ; + } +# Dry deposition of dust aerosol (0.03 - 0.55 um) +'215028' = { + table2Version = 215 ; + indicatorOfParameter = 28 ; + } +# Dry deposition of dust aerosol (0.55 - 9 um) +'215029' = { + table2Version = 215 ; + indicatorOfParameter = 29 ; + } +# Dry deposition of dust aerosol (9 - 20 um) +'215030' = { + table2Version = 215 ; + indicatorOfParameter = 30 ; + } +# Sedimentation of dust aerosol (0.03 - 0.55 um) +'215031' = { + table2Version = 215 ; + indicatorOfParameter = 31 ; + } +# Sedimentation of dust aerosol (0.55 - 9 um) +'215032' = { + table2Version = 215 ; + indicatorOfParameter = 32 ; + } +# Sedimentation of dust aerosol (9 - 20 um) +'215033' = { + table2Version = 215 ; + indicatorOfParameter = 33 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation +'215034' = { + table2Version = 215 ; + indicatorOfParameter = 34 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation +'215035' = { + table2Version = 215 ; + indicatorOfParameter = 35 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation +'215036' = { + table2Version = 215 ; + indicatorOfParameter = 36 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation +'215037' = { + table2Version = 215 ; + indicatorOfParameter = 37 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation +'215038' = { + table2Version = 215 ; + indicatorOfParameter = 38 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by convective precipitation +'215039' = { + table2Version = 215 ; + indicatorOfParameter = 39 ; + } +# Negative fixer of dust aerosol (0.03 - 0.55 um) +'215040' = { + table2Version = 215 ; + indicatorOfParameter = 40 ; + } +# Negative fixer of dust aerosol (0.55 - 9 um) +'215041' = { + table2Version = 215 ; + indicatorOfParameter = 41 ; + } +# Negative fixer of dust aerosol (9 - 20 um) +'215042' = { + table2Version = 215 ; + indicatorOfParameter = 42 ; + } +# Vertically integrated mass of dust aerosol (0.03 - 0.55 um) +'215043' = { + table2Version = 215 ; + indicatorOfParameter = 43 ; + } +# Vertically integrated mass of dust aerosol (0.55 - 9 um) +'215044' = { + table2Version = 215 ; + indicatorOfParameter = 44 ; + } +# Vertically integrated mass of dust aerosol (9 - 20 um) +'215045' = { + table2Version = 215 ; + indicatorOfParameter = 45 ; + } +# Dust aerosol (0.03 - 0.55 um) optical depth +'215046' = { + table2Version = 215 ; + indicatorOfParameter = 46 ; + } +# Dust aerosol (0.55 - 9 um) optical depth +'215047' = { + table2Version = 215 ; + indicatorOfParameter = 47 ; + } +# Dust aerosol (9 - 20 um) optical depth +'215048' = { + table2Version = 215 ; + indicatorOfParameter = 48 ; + } +# Source/gain of hydrophobic organic matter aerosol +'215049' = { + table2Version = 215 ; + indicatorOfParameter = 49 ; + } +# Source/gain of hydrophilic organic matter aerosol +'215050' = { + table2Version = 215 ; + indicatorOfParameter = 50 ; + } +# Dry deposition of hydrophobic organic matter aerosol +'215051' = { + table2Version = 215 ; + indicatorOfParameter = 51 ; + } +# Dry deposition of hydrophilic organic matter aerosol +'215052' = { + table2Version = 215 ; + indicatorOfParameter = 52 ; + } +# Sedimentation of hydrophobic organic matter aerosol +'215053' = { + table2Version = 215 ; + indicatorOfParameter = 53 ; + } +# Sedimentation of hydrophilic organic matter aerosol +'215054' = { + table2Version = 215 ; + indicatorOfParameter = 54 ; + } +# Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation +'215055' = { + table2Version = 215 ; + indicatorOfParameter = 55 ; + } +# Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation +'215056' = { + table2Version = 215 ; + indicatorOfParameter = 56 ; + } +# Wet deposition of hydrophobic organic matter aerosol by convective precipitation +'215057' = { + table2Version = 215 ; + indicatorOfParameter = 57 ; + } +# Wet deposition of hydrophilic organic matter aerosol by convective precipitation +'215058' = { + table2Version = 215 ; + indicatorOfParameter = 58 ; + } +# Negative fixer of hydrophobic organic matter aerosol +'215059' = { + table2Version = 215 ; + indicatorOfParameter = 59 ; + } +# Negative fixer of hydrophilic organic matter aerosol +'215060' = { + table2Version = 215 ; + indicatorOfParameter = 60 ; + } +# Vertically integrated mass of hydrophobic organic matter aerosol +'215061' = { + table2Version = 215 ; + indicatorOfParameter = 61 ; + } +# Vertically integrated mass of hydrophilic organic matter aerosol +'215062' = { + table2Version = 215 ; + indicatorOfParameter = 62 ; + } +# Hydrophobic organic matter aerosol optical depth +'215063' = { + table2Version = 215 ; + indicatorOfParameter = 63 ; + } +# Hydrophilic organic matter aerosol optical depth +'215064' = { + table2Version = 215 ; + indicatorOfParameter = 64 ; + } +# Source/gain of hydrophobic black carbon aerosol +'215065' = { + table2Version = 215 ; + indicatorOfParameter = 65 ; + } +# Source/gain of hydrophilic black carbon aerosol +'215066' = { + table2Version = 215 ; + indicatorOfParameter = 66 ; + } +# Dry deposition of hydrophobic black carbon aerosol +'215067' = { + table2Version = 215 ; + indicatorOfParameter = 67 ; + } +# Dry deposition of hydrophilic black carbon aerosol +'215068' = { + table2Version = 215 ; + indicatorOfParameter = 68 ; + } +# Sedimentation of hydrophobic black carbon aerosol +'215069' = { + table2Version = 215 ; + indicatorOfParameter = 69 ; + } +# Sedimentation of hydrophilic black carbon aerosol +'215070' = { + table2Version = 215 ; + indicatorOfParameter = 70 ; + } +# Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation +'215071' = { + table2Version = 215 ; + indicatorOfParameter = 71 ; + } +# Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation +'215072' = { + table2Version = 215 ; + indicatorOfParameter = 72 ; + } +# Wet deposition of hydrophobic black carbon aerosol by convective precipitation +'215073' = { + table2Version = 215 ; + indicatorOfParameter = 73 ; + } +# Wet deposition of hydrophilic black carbon aerosol by convective precipitation +'215074' = { + table2Version = 215 ; + indicatorOfParameter = 74 ; + } +# Negative fixer of hydrophobic black carbon aerosol +'215075' = { + table2Version = 215 ; + indicatorOfParameter = 75 ; + } +# Negative fixer of hydrophilic black carbon aerosol +'215076' = { + table2Version = 215 ; + indicatorOfParameter = 76 ; + } +# Vertically integrated mass of hydrophobic black carbon aerosol +'215077' = { + table2Version = 215 ; + indicatorOfParameter = 77 ; + } +# Vertically integrated mass of hydrophilic black carbon aerosol +'215078' = { + table2Version = 215 ; + indicatorOfParameter = 78 ; + } +# Hydrophobic black carbon aerosol optical depth +'215079' = { + table2Version = 215 ; + indicatorOfParameter = 79 ; + } +# Hydrophilic black carbon aerosol optical depth +'215080' = { + table2Version = 215 ; + indicatorOfParameter = 80 ; + } +# Source/gain of sulphate aerosol +'215081' = { + table2Version = 215 ; + indicatorOfParameter = 81 ; + } +# Dry deposition of sulphate aerosol +'215082' = { + table2Version = 215 ; + indicatorOfParameter = 82 ; + } +# Sedimentation of sulphate aerosol +'215083' = { + table2Version = 215 ; + indicatorOfParameter = 83 ; + } +# Wet deposition of sulphate aerosol by large-scale precipitation +'215084' = { + table2Version = 215 ; + indicatorOfParameter = 84 ; + } +# Wet deposition of sulphate aerosol by convective precipitation +'215085' = { + table2Version = 215 ; + indicatorOfParameter = 85 ; + } +# Negative fixer of sulphate aerosol +'215086' = { + table2Version = 215 ; + indicatorOfParameter = 86 ; + } +# Vertically integrated mass of sulphate aerosol +'215087' = { + table2Version = 215 ; + indicatorOfParameter = 87 ; + } +# Sulphate aerosol optical depth +'215088' = { + table2Version = 215 ; + indicatorOfParameter = 88 ; + } +#Accumulated total aerosol optical depth at 550 nm +'215089' = { + table2Version = 215 ; + indicatorOfParameter = 89 ; + } +#Effective (snow effect included) UV visible albedo for direct radiation +'215090' = { + table2Version = 215 ; + indicatorOfParameter = 90 ; + } +#10 metre wind speed dust emission potential +'215091' = { + table2Version = 215 ; + indicatorOfParameter = 91 ; + } +#10 metre wind gustiness dust emission potential +'215092' = { + table2Version = 215 ; + indicatorOfParameter = 92 ; + } +#Profile of total aerosol optical depth at 532 nm +'215093' = { + table2Version = 215 ; + indicatorOfParameter = 93 ; + } +#Profile of natural (sea-salt and dust) aerosol optical depth at 532 nm +'215094' = { + table2Version = 215 ; + indicatorOfParameter = 94 ; + } +#Profile of antropogenic (black carbon, organic matter, sulphate) aerosol optical depth at 532 nm +'215095' = { + table2Version = 215 ; + indicatorOfParameter = 95 ; + } +#Total absorption aerosol optical depth at 340 nm +'215096' = { + table2Version = 215 ; + indicatorOfParameter = 96 ; + } +#Total absorption aerosol optical depth at 355 nm +'215097' = { + table2Version = 215 ; + indicatorOfParameter = 97 ; + } +#Total absorption aerosol optical depth at 380 nm +'215098' = { + table2Version = 215 ; + indicatorOfParameter = 98 ; + } +#Total absorption aerosol optical depth at 400 nm +'215099' = { + table2Version = 215 ; + indicatorOfParameter = 99 ; + } +#Total absorption aerosol optical depth at 440 nm +'215100' = { + table2Version = 215 ; + indicatorOfParameter = 100 ; + } +#Total absorption aerosol optical depth at 469 nm +'215101' = { + table2Version = 215 ; + indicatorOfParameter = 101 ; + } +#Total absorption aerosol optical depth at 500 nm +'215102' = { + table2Version = 215 ; + indicatorOfParameter = 102 ; + } +#Total absorption aerosol optical depth at 532 nm +'215103' = { + table2Version = 215 ; + indicatorOfParameter = 103 ; + } +#Total absorption aerosol optical depth at 550 nm +'215104' = { + table2Version = 215 ; + indicatorOfParameter = 104 ; + } +#Total absorption aerosol optical depth at 645 nm +'215105' = { + table2Version = 215 ; + indicatorOfParameter = 105 ; + } +#Total absorption aerosol optical depth at 670 nm +'215106' = { + table2Version = 215 ; + indicatorOfParameter = 106 ; + } +#Total absorption aerosol optical depth at 800 nm +'215107' = { + table2Version = 215 ; + indicatorOfParameter = 107 ; + } +#Total absorption aerosol optical depth at 858 nm +'215108' = { + table2Version = 215 ; + indicatorOfParameter = 108 ; + } +#Total absorption aerosol optical depth at 865 nm +'215109' = { + table2Version = 215 ; + indicatorOfParameter = 109 ; + } +#Total absorption aerosol optical depth at 1020 nm +'215110' = { + table2Version = 215 ; + indicatorOfParameter = 110 ; + } +#Total absorption aerosol optical depth at 1064 nm +'215111' = { + table2Version = 215 ; + indicatorOfParameter = 111 ; + } +#Total absorption aerosol optical depth at 1240 nm +'215112' = { + table2Version = 215 ; + indicatorOfParameter = 112 ; + } +#Total absorption aerosol optical depth at 1640 nm +'215113' = { + table2Version = 215 ; + indicatorOfParameter = 113 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm +'215114' = { + table2Version = 215 ; + indicatorOfParameter = 114 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm +'215115' = { + table2Version = 215 ; + indicatorOfParameter = 115 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm +'215116' = { + table2Version = 215 ; + indicatorOfParameter = 116 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm +'215117' = { + table2Version = 215 ; + indicatorOfParameter = 117 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm +'215118' = { + table2Version = 215 ; + indicatorOfParameter = 118 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm +'215119' = { + table2Version = 215 ; + indicatorOfParameter = 119 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm +'215120' = { + table2Version = 215 ; + indicatorOfParameter = 120 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm +'215121' = { + table2Version = 215 ; + indicatorOfParameter = 121 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm +'215122' = { + table2Version = 215 ; + indicatorOfParameter = 122 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm +'215123' = { + table2Version = 215 ; + indicatorOfParameter = 123 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm +'215124' = { + table2Version = 215 ; + indicatorOfParameter = 124 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm +'215125' = { + table2Version = 215 ; + indicatorOfParameter = 125 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm +'215126' = { + table2Version = 215 ; + indicatorOfParameter = 126 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm +'215127' = { + table2Version = 215 ; + indicatorOfParameter = 127 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm +'215128' = { + table2Version = 215 ; + indicatorOfParameter = 128 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm +'215129' = { + table2Version = 215 ; + indicatorOfParameter = 129 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm +'215130' = { + table2Version = 215 ; + indicatorOfParameter = 130 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm +'215131' = { + table2Version = 215 ; + indicatorOfParameter = 131 ; + } +#Single scattering albedo at 340 nm +'215132' = { + table2Version = 215 ; + indicatorOfParameter = 132 ; + } +#Single scattering albedo at 355 nm +'215133' = { + table2Version = 215 ; + indicatorOfParameter = 133 ; + } +#Single scattering albedo at 380 nm +'215134' = { + table2Version = 215 ; + indicatorOfParameter = 134 ; + } +#Single scattering albedo at 400 nm +'215135' = { + table2Version = 215 ; + indicatorOfParameter = 135 ; + } +#Single scattering albedo at 440 nm +'215136' = { + table2Version = 215 ; + indicatorOfParameter = 136 ; + } +#Single scattering albedo at 469 nm +'215137' = { + table2Version = 215 ; + indicatorOfParameter = 137 ; + } +#Single scattering albedo at 500 nm +'215138' = { + table2Version = 215 ; + indicatorOfParameter = 138 ; + } +#Single scattering albedo at 532 nm +'215139' = { + table2Version = 215 ; + indicatorOfParameter = 139 ; + } +#Single scattering albedo at 550 nm +'215140' = { + table2Version = 215 ; + indicatorOfParameter = 140 ; + } +#Single scattering albedo at 645 nm +'215141' = { + table2Version = 215 ; + indicatorOfParameter = 141 ; + } +#Single scattering albedo at 670 nm +'215142' = { + table2Version = 215 ; + indicatorOfParameter = 142 ; + } +#Single scattering albedo at 800 nm +'215143' = { + table2Version = 215 ; + indicatorOfParameter = 143 ; + } +#Single scattering albedo at 858 nm +'215144' = { + table2Version = 215 ; + indicatorOfParameter = 144 ; + } +#Single scattering albedo at 865 nm +'215145' = { + table2Version = 215 ; + indicatorOfParameter = 145 ; + } +#Single scattering albedo at 1020 nm +'215146' = { + table2Version = 215 ; + indicatorOfParameter = 146 ; + } +#Single scattering albedo at 1064 nm +'215147' = { + table2Version = 215 ; + indicatorOfParameter = 147 ; + } +#Single scattering albedo at 1240 nm +'215148' = { + table2Version = 215 ; + indicatorOfParameter = 148 ; + } +#Single scattering albedo at 1640 nm +'215149' = { + table2Version = 215 ; + indicatorOfParameter = 149 ; + } +#Assimetry factor at 340 nm +'215150' = { + table2Version = 215 ; + indicatorOfParameter = 150 ; + } +#Assimetry factor at 355 nm +'215151' = { + table2Version = 215 ; + indicatorOfParameter = 151 ; + } +#Assimetry factor at 380 nm +'215152' = { + table2Version = 215 ; + indicatorOfParameter = 152 ; + } +#Assimetry factor at 400 nm +'215153' = { + table2Version = 215 ; + indicatorOfParameter = 153 ; + } +#Assimetry factor at 440 nm +'215154' = { + table2Version = 215 ; + indicatorOfParameter = 154 ; + } +#Assimetry factor at 469 nm +'215155' = { + table2Version = 215 ; + indicatorOfParameter = 155 ; + } +#Assimetry factor at 500 nm +'215156' = { + table2Version = 215 ; + indicatorOfParameter = 156 ; + } +#Assimetry factor at 532 nm +'215157' = { + table2Version = 215 ; + indicatorOfParameter = 157 ; + } +#Assimetry factor at 550 nm +'215158' = { + table2Version = 215 ; + indicatorOfParameter = 158 ; + } +#Assimetry factor at 645 nm +'215159' = { + table2Version = 215 ; + indicatorOfParameter = 159 ; + } +#Assimetry factor at 670 nm +'215160' = { + table2Version = 215 ; + indicatorOfParameter = 160 ; + } +#Assimetry factor at 800 nm +'215161' = { + table2Version = 215 ; + indicatorOfParameter = 161 ; + } +#Assimetry factor at 858 nm +'215162' = { + table2Version = 215 ; + indicatorOfParameter = 162 ; + } +#Assimetry factor at 865 nm +'215163' = { + table2Version = 215 ; + indicatorOfParameter = 163 ; + } +#Assimetry factor at 1020 nm +'215164' = { + table2Version = 215 ; + indicatorOfParameter = 164 ; + } +#Assimetry factor at 1064 nm +'215165' = { + table2Version = 215 ; + indicatorOfParameter = 165 ; + } +#Assimetry factor at 1240 nm +'215166' = { + table2Version = 215 ; + indicatorOfParameter = 166 ; + } +#Assimetry factor at 1640 nm +'215167' = { + table2Version = 215 ; + indicatorOfParameter = 167 ; + } +#Source/gain of sulphur dioxide +'215168' = { + table2Version = 215 ; + indicatorOfParameter = 168 ; + } +#Dry deposition of sulphur dioxide +'215169' = { + table2Version = 215 ; + indicatorOfParameter = 169 ; + } +#Sedimentation of sulphur dioxide +'215170' = { + table2Version = 215 ; + indicatorOfParameter = 170 ; + } +#Wet deposition of sulphur dioxide by large-scale precipitation +'215171' = { + table2Version = 215 ; + indicatorOfParameter = 171 ; + } +#Wet deposition of sulphur dioxide by convective precipitation +'215172' = { + table2Version = 215 ; + indicatorOfParameter = 172 ; + } +#Negative fixer of sulphur dioxide +'215173' = { + table2Version = 215 ; + indicatorOfParameter = 173 ; + } +#Vertically integrated mass of sulphur dioxide +'215174' = { + table2Version = 215 ; + indicatorOfParameter = 174 ; + } +#Sulphur dioxide optical depth +'215175' = { + table2Version = 215 ; + indicatorOfParameter = 175 ; + } +#Total absorption aerosol optical depth at 2130 nm +'215176' = { + table2Version = 215 ; + indicatorOfParameter = 176 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm +'215177' = { + table2Version = 215 ; + indicatorOfParameter = 177 ; + } +#Single scattering albedo at 2130 nm +'215178' = { + table2Version = 215 ; + indicatorOfParameter = 178 ; + } +#Assimetry factor at 2130 nm +'215179' = { + table2Version = 215 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'216001' = { + table2Version = 216 ; + indicatorOfParameter = 1 ; + } +#Experimental product +'216002' = { + table2Version = 216 ; + indicatorOfParameter = 2 ; + } +#Experimental product +'216003' = { + table2Version = 216 ; + indicatorOfParameter = 3 ; + } +#Experimental product +'216004' = { + table2Version = 216 ; + indicatorOfParameter = 4 ; + } +#Experimental product +'216005' = { + table2Version = 216 ; + indicatorOfParameter = 5 ; + } +#Experimental product +'216006' = { + table2Version = 216 ; + indicatorOfParameter = 6 ; + } +#Experimental product +'216007' = { + table2Version = 216 ; + indicatorOfParameter = 7 ; + } +#Experimental product +'216008' = { + table2Version = 216 ; + indicatorOfParameter = 8 ; + } +#Experimental product +'216009' = { + table2Version = 216 ; + indicatorOfParameter = 9 ; + } +#Experimental product +'216010' = { + table2Version = 216 ; + indicatorOfParameter = 10 ; + } +#Experimental product +'216011' = { + table2Version = 216 ; + indicatorOfParameter = 11 ; + } +#Experimental product +'216012' = { + table2Version = 216 ; + indicatorOfParameter = 12 ; + } +#Experimental product +'216013' = { + table2Version = 216 ; + indicatorOfParameter = 13 ; + } +#Experimental product +'216014' = { + table2Version = 216 ; + indicatorOfParameter = 14 ; + } +#Experimental product +'216015' = { + table2Version = 216 ; + indicatorOfParameter = 15 ; + } +#Experimental product +'216016' = { + table2Version = 216 ; + indicatorOfParameter = 16 ; + } +#Experimental product +'216017' = { + table2Version = 216 ; + indicatorOfParameter = 17 ; + } +#Experimental product +'216018' = { + table2Version = 216 ; + indicatorOfParameter = 18 ; + } +#Experimental product +'216019' = { + table2Version = 216 ; + indicatorOfParameter = 19 ; + } +#Experimental product +'216020' = { + table2Version = 216 ; + indicatorOfParameter = 20 ; + } +#Experimental product +'216021' = { + table2Version = 216 ; + indicatorOfParameter = 21 ; + } +#Experimental product +'216022' = { + table2Version = 216 ; + indicatorOfParameter = 22 ; + } +#Experimental product +'216023' = { + table2Version = 216 ; + indicatorOfParameter = 23 ; + } +#Experimental product +'216024' = { + table2Version = 216 ; + indicatorOfParameter = 24 ; + } +#Experimental product +'216025' = { + table2Version = 216 ; + indicatorOfParameter = 25 ; + } +#Experimental product +'216026' = { + table2Version = 216 ; + indicatorOfParameter = 26 ; + } +#Experimental product +'216027' = { + table2Version = 216 ; + indicatorOfParameter = 27 ; + } +#Experimental product +'216028' = { + table2Version = 216 ; + indicatorOfParameter = 28 ; + } +#Experimental product +'216029' = { + table2Version = 216 ; + indicatorOfParameter = 29 ; + } +#Experimental product +'216030' = { + table2Version = 216 ; + indicatorOfParameter = 30 ; + } +#Experimental product +'216031' = { + table2Version = 216 ; + indicatorOfParameter = 31 ; + } +#Experimental product +'216032' = { + table2Version = 216 ; + indicatorOfParameter = 32 ; + } +#Experimental product +'216033' = { + table2Version = 216 ; + indicatorOfParameter = 33 ; + } +#Experimental product +'216034' = { + table2Version = 216 ; + indicatorOfParameter = 34 ; + } +#Experimental product +'216035' = { + table2Version = 216 ; + indicatorOfParameter = 35 ; + } +#Experimental product +'216036' = { + table2Version = 216 ; + indicatorOfParameter = 36 ; + } +#Experimental product +'216037' = { + table2Version = 216 ; + indicatorOfParameter = 37 ; + } +#Experimental product +'216038' = { + table2Version = 216 ; + indicatorOfParameter = 38 ; + } +#Experimental product +'216039' = { + table2Version = 216 ; + indicatorOfParameter = 39 ; + } +#Experimental product +'216040' = { + table2Version = 216 ; + indicatorOfParameter = 40 ; + } +#Experimental product +'216041' = { + table2Version = 216 ; + indicatorOfParameter = 41 ; + } +#Experimental product +'216042' = { + table2Version = 216 ; + indicatorOfParameter = 42 ; + } +#Experimental product +'216043' = { + table2Version = 216 ; + indicatorOfParameter = 43 ; + } +#Experimental product +'216044' = { + table2Version = 216 ; + indicatorOfParameter = 44 ; + } +#Experimental product +'216045' = { + table2Version = 216 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'216046' = { + table2Version = 216 ; + indicatorOfParameter = 46 ; + } +#Experimental product +'216047' = { + table2Version = 216 ; + indicatorOfParameter = 47 ; + } +#Experimental product +'216048' = { + table2Version = 216 ; + indicatorOfParameter = 48 ; + } +#Experimental product +'216049' = { + table2Version = 216 ; + indicatorOfParameter = 49 ; + } +#Experimental product +'216050' = { + table2Version = 216 ; + indicatorOfParameter = 50 ; + } +#Experimental product +'216051' = { + table2Version = 216 ; + indicatorOfParameter = 51 ; + } +#Experimental product +'216052' = { + table2Version = 216 ; + indicatorOfParameter = 52 ; + } +#Experimental product +'216053' = { + table2Version = 216 ; + indicatorOfParameter = 53 ; + } +#Experimental product +'216054' = { + table2Version = 216 ; + indicatorOfParameter = 54 ; + } +#Experimental product +'216055' = { + table2Version = 216 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'216056' = { + table2Version = 216 ; + indicatorOfParameter = 56 ; + } +#Experimental product +'216057' = { + table2Version = 216 ; + indicatorOfParameter = 57 ; + } +#Experimental product +'216058' = { + table2Version = 216 ; + indicatorOfParameter = 58 ; + } +#Experimental product +'216059' = { + table2Version = 216 ; + indicatorOfParameter = 59 ; + } +#Experimental product +'216060' = { + table2Version = 216 ; + indicatorOfParameter = 60 ; + } +#Experimental product +'216061' = { + table2Version = 216 ; + indicatorOfParameter = 61 ; + } +#Experimental product +'216062' = { + table2Version = 216 ; + indicatorOfParameter = 62 ; + } +#Experimental product +'216063' = { + table2Version = 216 ; + indicatorOfParameter = 63 ; + } +#Experimental product +'216064' = { + table2Version = 216 ; + indicatorOfParameter = 64 ; + } +#Experimental product +'216065' = { + table2Version = 216 ; + indicatorOfParameter = 65 ; + } +#Experimental product +'216066' = { + table2Version = 216 ; + indicatorOfParameter = 66 ; + } +#Experimental product +'216067' = { + table2Version = 216 ; + indicatorOfParameter = 67 ; + } +#Experimental product +'216068' = { + table2Version = 216 ; + indicatorOfParameter = 68 ; + } +#Experimental product +'216069' = { + table2Version = 216 ; + indicatorOfParameter = 69 ; + } +#Experimental product +'216070' = { + table2Version = 216 ; + indicatorOfParameter = 70 ; + } +#Experimental product +'216071' = { + table2Version = 216 ; + indicatorOfParameter = 71 ; + } +#Experimental product +'216072' = { + table2Version = 216 ; + indicatorOfParameter = 72 ; + } +#Experimental product +'216073' = { + table2Version = 216 ; + indicatorOfParameter = 73 ; + } +#Experimental product +'216074' = { + table2Version = 216 ; + indicatorOfParameter = 74 ; + } +#Experimental product +'216075' = { + table2Version = 216 ; + indicatorOfParameter = 75 ; + } +#Experimental product +'216076' = { + table2Version = 216 ; + indicatorOfParameter = 76 ; + } +#Experimental product +'216077' = { + table2Version = 216 ; + indicatorOfParameter = 77 ; + } +#Experimental product +'216078' = { + table2Version = 216 ; + indicatorOfParameter = 78 ; + } +#Experimental product +'216079' = { + table2Version = 216 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'216080' = { + table2Version = 216 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'216081' = { + table2Version = 216 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'216082' = { + table2Version = 216 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'216083' = { + table2Version = 216 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'216084' = { + table2Version = 216 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'216085' = { + table2Version = 216 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'216086' = { + table2Version = 216 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'216087' = { + table2Version = 216 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'216088' = { + table2Version = 216 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'216089' = { + table2Version = 216 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'216090' = { + table2Version = 216 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'216091' = { + table2Version = 216 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'216092' = { + table2Version = 216 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'216093' = { + table2Version = 216 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'216094' = { + table2Version = 216 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'216095' = { + table2Version = 216 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'216096' = { + table2Version = 216 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'216097' = { + table2Version = 216 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'216098' = { + table2Version = 216 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'216099' = { + table2Version = 216 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'216100' = { + table2Version = 216 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'216101' = { + table2Version = 216 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'216102' = { + table2Version = 216 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'216103' = { + table2Version = 216 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'216104' = { + table2Version = 216 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'216105' = { + table2Version = 216 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'216106' = { + table2Version = 216 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'216107' = { + table2Version = 216 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'216108' = { + table2Version = 216 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'216109' = { + table2Version = 216 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'216110' = { + table2Version = 216 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'216111' = { + table2Version = 216 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'216112' = { + table2Version = 216 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'216113' = { + table2Version = 216 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'216114' = { + table2Version = 216 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'216115' = { + table2Version = 216 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'216116' = { + table2Version = 216 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'216117' = { + table2Version = 216 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'216118' = { + table2Version = 216 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'216119' = { + table2Version = 216 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'216120' = { + table2Version = 216 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'216121' = { + table2Version = 216 ; + indicatorOfParameter = 121 ; + } +#Experimental product +'216122' = { + table2Version = 216 ; + indicatorOfParameter = 122 ; + } +#Experimental product +'216123' = { + table2Version = 216 ; + indicatorOfParameter = 123 ; + } +#Experimental product +'216124' = { + table2Version = 216 ; + indicatorOfParameter = 124 ; + } +#Experimental product +'216125' = { + table2Version = 216 ; + indicatorOfParameter = 125 ; + } +#Experimental product +'216126' = { + table2Version = 216 ; + indicatorOfParameter = 126 ; + } +#Experimental product +'216127' = { + table2Version = 216 ; + indicatorOfParameter = 127 ; + } +#Experimental product +'216128' = { + table2Version = 216 ; + indicatorOfParameter = 128 ; + } +#Experimental product +'216129' = { + table2Version = 216 ; + indicatorOfParameter = 129 ; + } +#Experimental product +'216130' = { + table2Version = 216 ; + indicatorOfParameter = 130 ; + } +#Experimental product +'216131' = { + table2Version = 216 ; + indicatorOfParameter = 131 ; + } +#Experimental product +'216132' = { + table2Version = 216 ; + indicatorOfParameter = 132 ; + } +#Experimental product +'216133' = { + table2Version = 216 ; + indicatorOfParameter = 133 ; + } +#Experimental product +'216134' = { + table2Version = 216 ; + indicatorOfParameter = 134 ; + } +#Experimental product +'216135' = { + table2Version = 216 ; + indicatorOfParameter = 135 ; + } +#Experimental product +'216136' = { + table2Version = 216 ; + indicatorOfParameter = 136 ; + } +#Experimental product +'216137' = { + table2Version = 216 ; + indicatorOfParameter = 137 ; + } +#Experimental product +'216138' = { + table2Version = 216 ; + indicatorOfParameter = 138 ; + } +#Experimental product +'216139' = { + table2Version = 216 ; + indicatorOfParameter = 139 ; + } +#Experimental product +'216140' = { + table2Version = 216 ; + indicatorOfParameter = 140 ; + } +#Experimental product +'216141' = { + table2Version = 216 ; + indicatorOfParameter = 141 ; + } +#Experimental product +'216142' = { + table2Version = 216 ; + indicatorOfParameter = 142 ; + } +#Experimental product +'216143' = { + table2Version = 216 ; + indicatorOfParameter = 143 ; + } +#Experimental product +'216144' = { + table2Version = 216 ; + indicatorOfParameter = 144 ; + } +#Experimental product +'216145' = { + table2Version = 216 ; + indicatorOfParameter = 145 ; + } +#Experimental product +'216146' = { + table2Version = 216 ; + indicatorOfParameter = 146 ; + } +#Experimental product +'216147' = { + table2Version = 216 ; + indicatorOfParameter = 147 ; + } +#Experimental product +'216148' = { + table2Version = 216 ; + indicatorOfParameter = 148 ; + } +#Experimental product +'216149' = { + table2Version = 216 ; + indicatorOfParameter = 149 ; + } +#Experimental product +'216150' = { + table2Version = 216 ; + indicatorOfParameter = 150 ; + } +#Experimental product +'216151' = { + table2Version = 216 ; + indicatorOfParameter = 151 ; + } +#Experimental product +'216152' = { + table2Version = 216 ; + indicatorOfParameter = 152 ; + } +#Experimental product +'216153' = { + table2Version = 216 ; + indicatorOfParameter = 153 ; + } +#Experimental product +'216154' = { + table2Version = 216 ; + indicatorOfParameter = 154 ; + } +#Experimental product +'216155' = { + table2Version = 216 ; + indicatorOfParameter = 155 ; + } +#Experimental product +'216156' = { + table2Version = 216 ; + indicatorOfParameter = 156 ; + } +#Experimental product +'216157' = { + table2Version = 216 ; + indicatorOfParameter = 157 ; + } +#Experimental product +'216158' = { + table2Version = 216 ; + indicatorOfParameter = 158 ; + } +#Experimental product +'216159' = { + table2Version = 216 ; + indicatorOfParameter = 159 ; + } +#Experimental product +'216160' = { + table2Version = 216 ; + indicatorOfParameter = 160 ; + } +#Experimental product +'216161' = { + table2Version = 216 ; + indicatorOfParameter = 161 ; + } +#Experimental product +'216162' = { + table2Version = 216 ; + indicatorOfParameter = 162 ; + } +#Experimental product +'216163' = { + table2Version = 216 ; + indicatorOfParameter = 163 ; + } +#Experimental product +'216164' = { + table2Version = 216 ; + indicatorOfParameter = 164 ; + } +#Experimental product +'216165' = { + table2Version = 216 ; + indicatorOfParameter = 165 ; + } +#Experimental product +'216166' = { + table2Version = 216 ; + indicatorOfParameter = 166 ; + } +#Experimental product +'216167' = { + table2Version = 216 ; + indicatorOfParameter = 167 ; + } +#Experimental product +'216168' = { + table2Version = 216 ; + indicatorOfParameter = 168 ; + } +#Experimental product +'216169' = { + table2Version = 216 ; + indicatorOfParameter = 169 ; + } +#Experimental product +'216170' = { + table2Version = 216 ; + indicatorOfParameter = 170 ; + } +#Experimental product +'216171' = { + table2Version = 216 ; + indicatorOfParameter = 171 ; + } +#Experimental product +'216172' = { + table2Version = 216 ; + indicatorOfParameter = 172 ; + } +#Experimental product +'216173' = { + table2Version = 216 ; + indicatorOfParameter = 173 ; + } +#Experimental product +'216174' = { + table2Version = 216 ; + indicatorOfParameter = 174 ; + } +#Experimental product +'216175' = { + table2Version = 216 ; + indicatorOfParameter = 175 ; + } +#Experimental product +'216176' = { + table2Version = 216 ; + indicatorOfParameter = 176 ; + } +#Experimental product +'216177' = { + table2Version = 216 ; + indicatorOfParameter = 177 ; + } +#Experimental product +'216178' = { + table2Version = 216 ; + indicatorOfParameter = 178 ; + } +#Experimental product +'216179' = { + table2Version = 216 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'216180' = { + table2Version = 216 ; + indicatorOfParameter = 180 ; + } +#Experimental product +'216181' = { + table2Version = 216 ; + indicatorOfParameter = 181 ; + } +#Experimental product +'216182' = { + table2Version = 216 ; + indicatorOfParameter = 182 ; + } +#Experimental product +'216183' = { + table2Version = 216 ; + indicatorOfParameter = 183 ; + } +#Experimental product +'216184' = { + table2Version = 216 ; + indicatorOfParameter = 184 ; + } +#Experimental product +'216185' = { + table2Version = 216 ; + indicatorOfParameter = 185 ; + } +#Experimental product +'216186' = { + table2Version = 216 ; + indicatorOfParameter = 186 ; + } +#Experimental product +'216187' = { + table2Version = 216 ; + indicatorOfParameter = 187 ; + } +#Experimental product +'216188' = { + table2Version = 216 ; + indicatorOfParameter = 188 ; + } +#Experimental product +'216189' = { + table2Version = 216 ; + indicatorOfParameter = 189 ; + } +#Experimental product +'216190' = { + table2Version = 216 ; + indicatorOfParameter = 190 ; + } +#Experimental product +'216191' = { + table2Version = 216 ; + indicatorOfParameter = 191 ; + } +#Experimental product +'216192' = { + table2Version = 216 ; + indicatorOfParameter = 192 ; + } +#Experimental product +'216193' = { + table2Version = 216 ; + indicatorOfParameter = 193 ; + } +#Experimental product +'216194' = { + table2Version = 216 ; + indicatorOfParameter = 194 ; + } +#Experimental product +'216195' = { + table2Version = 216 ; + indicatorOfParameter = 195 ; + } +#Experimental product +'216196' = { + table2Version = 216 ; + indicatorOfParameter = 196 ; + } +#Experimental product +'216197' = { + table2Version = 216 ; + indicatorOfParameter = 197 ; + } +#Experimental product +'216198' = { + table2Version = 216 ; + indicatorOfParameter = 198 ; + } +#Experimental product +'216199' = { + table2Version = 216 ; + indicatorOfParameter = 199 ; + } +#Experimental product +'216200' = { + table2Version = 216 ; + indicatorOfParameter = 200 ; + } +#Experimental product +'216201' = { + table2Version = 216 ; + indicatorOfParameter = 201 ; + } +#Experimental product +'216202' = { + table2Version = 216 ; + indicatorOfParameter = 202 ; + } +#Experimental product +'216203' = { + table2Version = 216 ; + indicatorOfParameter = 203 ; + } +#Experimental product +'216204' = { + table2Version = 216 ; + indicatorOfParameter = 204 ; + } +#Experimental product +'216205' = { + table2Version = 216 ; + indicatorOfParameter = 205 ; + } +#Experimental product +'216206' = { + table2Version = 216 ; + indicatorOfParameter = 206 ; + } +#Experimental product +'216207' = { + table2Version = 216 ; + indicatorOfParameter = 207 ; + } +#Experimental product +'216208' = { + table2Version = 216 ; + indicatorOfParameter = 208 ; + } +#Experimental product +'216209' = { + table2Version = 216 ; + indicatorOfParameter = 209 ; + } +#Experimental product +'216210' = { + table2Version = 216 ; + indicatorOfParameter = 210 ; + } +#Experimental product +'216211' = { + table2Version = 216 ; + indicatorOfParameter = 211 ; + } +#Experimental product +'216212' = { + table2Version = 216 ; + indicatorOfParameter = 212 ; + } +#Experimental product +'216213' = { + table2Version = 216 ; + indicatorOfParameter = 213 ; + } +#Experimental product +'216214' = { + table2Version = 216 ; + indicatorOfParameter = 214 ; + } +#Experimental product +'216215' = { + table2Version = 216 ; + indicatorOfParameter = 215 ; + } +#Experimental product +'216216' = { + table2Version = 216 ; + indicatorOfParameter = 216 ; + } +#Experimental product +'216217' = { + table2Version = 216 ; + indicatorOfParameter = 217 ; + } +#Experimental product +'216218' = { + table2Version = 216 ; + indicatorOfParameter = 218 ; + } +#Experimental product +'216219' = { + table2Version = 216 ; + indicatorOfParameter = 219 ; + } +#Experimental product +'216220' = { + table2Version = 216 ; + indicatorOfParameter = 220 ; + } +#Experimental product +'216221' = { + table2Version = 216 ; + indicatorOfParameter = 221 ; + } +#Experimental product +'216222' = { + table2Version = 216 ; + indicatorOfParameter = 222 ; + } +#Experimental product +'216223' = { + table2Version = 216 ; + indicatorOfParameter = 223 ; + } +#Experimental product +'216224' = { + table2Version = 216 ; + indicatorOfParameter = 224 ; + } +#Experimental product +'216225' = { + table2Version = 216 ; + indicatorOfParameter = 225 ; + } +#Experimental product +'216226' = { + table2Version = 216 ; + indicatorOfParameter = 226 ; + } +#Experimental product +'216227' = { + table2Version = 216 ; + indicatorOfParameter = 227 ; + } +#Experimental product +'216228' = { + table2Version = 216 ; + indicatorOfParameter = 228 ; + } +#Experimental product +'216229' = { + table2Version = 216 ; + indicatorOfParameter = 229 ; + } +#Experimental product +'216230' = { + table2Version = 216 ; + indicatorOfParameter = 230 ; + } +#Experimental product +'216231' = { + table2Version = 216 ; + indicatorOfParameter = 231 ; + } +#Experimental product +'216232' = { + table2Version = 216 ; + indicatorOfParameter = 232 ; + } +#Experimental product +'216233' = { + table2Version = 216 ; + indicatorOfParameter = 233 ; + } +#Experimental product +'216234' = { + table2Version = 216 ; + indicatorOfParameter = 234 ; + } +#Experimental product +'216235' = { + table2Version = 216 ; + indicatorOfParameter = 235 ; + } +#Experimental product +'216236' = { + table2Version = 216 ; + indicatorOfParameter = 236 ; + } +#Experimental product +'216237' = { + table2Version = 216 ; + indicatorOfParameter = 237 ; + } +#Experimental product +'216238' = { + table2Version = 216 ; + indicatorOfParameter = 238 ; + } +#Experimental product +'216239' = { + table2Version = 216 ; + indicatorOfParameter = 239 ; + } +#Experimental product +'216240' = { + table2Version = 216 ; + indicatorOfParameter = 240 ; + } +#Experimental product +'216241' = { + table2Version = 216 ; + indicatorOfParameter = 241 ; + } +#Experimental product +'216242' = { + table2Version = 216 ; + indicatorOfParameter = 242 ; + } +#Experimental product +'216243' = { + table2Version = 216 ; + indicatorOfParameter = 243 ; + } +#Experimental product +'216244' = { + table2Version = 216 ; + indicatorOfParameter = 244 ; + } +#Experimental product +'216245' = { + table2Version = 216 ; + indicatorOfParameter = 245 ; + } +#Experimental product +'216246' = { + table2Version = 216 ; + indicatorOfParameter = 246 ; + } +#Experimental product +'216247' = { + table2Version = 216 ; + indicatorOfParameter = 247 ; + } +#Experimental product +'216248' = { + table2Version = 216 ; + indicatorOfParameter = 248 ; + } +#Experimental product +'216249' = { + table2Version = 216 ; + indicatorOfParameter = 249 ; + } +#Experimental product +'216250' = { + table2Version = 216 ; + indicatorOfParameter = 250 ; + } +#Experimental product +'216251' = { + table2Version = 216 ; + indicatorOfParameter = 251 ; + } +#Experimental product +'216252' = { + table2Version = 216 ; + indicatorOfParameter = 252 ; + } +#Experimental product +'216253' = { + table2Version = 216 ; + indicatorOfParameter = 253 ; + } +#Experimental product +'216254' = { + table2Version = 216 ; + indicatorOfParameter = 254 ; + } +#Experimental product +'216255' = { + table2Version = 216 ; + indicatorOfParameter = 255 ; + } +#Total sky direct solar radiation at surface +'228021' = { + table2Version = 228 ; + indicatorOfParameter = 21 ; + } +#Clear-sky direct solar radiation at surface +'228022' = { + table2Version = 228 ; + indicatorOfParameter = 22 ; + } +#Cloud base height +'228023' = { + table2Version = 228 ; + indicatorOfParameter = 23 ; + } +#Zero degree level +'228024' = { + table2Version = 228 ; + indicatorOfParameter = 24 ; + } +#Horizontal visibility +'228025' = { + table2Version = 228 ; + indicatorOfParameter = 25 ; + } +#Maximum temperature at 2 metres in the last 3 hours +'228026' = { + table2Version = 228 ; + indicatorOfParameter = 26 ; + } +#Minimum temperature at 2 metres in the last 3 hours +'228027' = { + table2Version = 228 ; + indicatorOfParameter = 27 ; + } +#10 metre wind gust in the last 3 hours +'228028' = { + table2Version = 228 ; + indicatorOfParameter = 28 ; + } +#Soil wetness index in layer 1 +'228040' = { + table2Version = 228 ; + indicatorOfParameter = 40 ; + } +#Soil wetness index in layer 2 +'228041' = { + table2Version = 228 ; + indicatorOfParameter = 41 ; + } +#Soil wetness index in layer 3 +'228042' = { + table2Version = 228 ; + indicatorOfParameter = 42 ; + } +#Soil wetness index in layer 4 +'228043' = { + table2Version = 228 ; + indicatorOfParameter = 43 ; + } +#Accumulated Carbon Dioxide Net Ecosystem Exchange +'228080' = { + table2Version = 228 ; + indicatorOfParameter = 80 ; + } +#Accumulated Carbon Dioxide Gross Primary Production +'228081' = { + table2Version = 228 ; + indicatorOfParameter = 81 ; + } +#Accumulated Carbon Dioxide Ecosystem Respiration +'228082' = { + table2Version = 228 ; + indicatorOfParameter = 82 ; + } +#Flux of Carbon Dioxide Net Ecosystem Exchange +'228083' = { + table2Version = 228 ; + indicatorOfParameter = 83 ; + } +#Flux of Carbon Dioxide Gross Primary Production +'228084' = { + table2Version = 228 ; + indicatorOfParameter = 84 ; + } +#Flux of Carbon Dioxide Ecosystem Respiration +'228085' = { + table2Version = 228 ; + indicatorOfParameter = 85 ; + } +#Total column rain water +'228089' = { + table2Version = 228 ; + indicatorOfParameter = 89 ; + } +#Total column snow water +'228090' = { + table2Version = 228 ; + indicatorOfParameter = 90 ; + } +#Canopy cover fraction +'228091' = { + table2Version = 228 ; + indicatorOfParameter = 91 ; + } +#Soil texture fraction +'228092' = { + table2Version = 228 ; + indicatorOfParameter = 92 ; + } +#Volumetric soil moisture +'228093' = { + table2Version = 228 ; + indicatorOfParameter = 93 ; + } +#Ice temperature +'228094' = { + table2Version = 228 ; + indicatorOfParameter = 94 ; + } +#Surface solar radiation downward clear-sky +'228129' = { + table2Version = 228 ; + indicatorOfParameter = 129 ; + } +#Surface thermal radiation downward clear-sky +'228130' = { + table2Version = 228 ; + indicatorOfParameter = 130 ; + } +#SMOS first Brightness Temperature Bias Correction parameter +'228229' = { + table2Version = 228 ; + indicatorOfParameter = 229 ; + } +#SMOS second Brightness Temperature Bias Correction parameter +'228230' = { + table2Version = 228 ; + indicatorOfParameter = 230 ; + } +#Surface solar radiation diffuse total sky +'228242' = { + table2Version = 228 ; + indicatorOfParameter = 242 ; + } +#Surface solar radiation diffuse clear-sky +'228243' = { + table2Version = 228 ; + indicatorOfParameter = 243 ; + } +#Surface albedo of direct radiation +'228244' = { + table2Version = 228 ; + indicatorOfParameter = 244 ; + } +#Surface albedo of diffuse radiation +'228245' = { + table2Version = 228 ; + indicatorOfParameter = 245 ; + } +#100 metre wind speed +'228249' = { + table2Version = 228 ; + indicatorOfParameter = 249 ; + } +#Irrigation fraction +'228250' = { + table2Version = 228 ; + indicatorOfParameter = 250 ; + } +#Potential evaporation +'228251' = { + table2Version = 228 ; + indicatorOfParameter = 251 ; + } +#Irrigation +'228252' = { + table2Version = 228 ; + indicatorOfParameter = 252 ; + } +#Surface runoff (variable resolution) +'230008' = { + table2Version = 230 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff (variable resolution) +'230009' = { + table2Version = 230 ; + indicatorOfParameter = 9 ; + } +#Total sky direct solar radiation at surface (variable resolution) +'230021' = { + table2Version = 230 ; + indicatorOfParameter = 21 ; + } +#Clear-sky direct solar radiation at surface (variable resolution) +'230022' = { + table2Version = 230 ; + indicatorOfParameter = 22 ; + } +#Albedo (variable resolution) +'230174' = { + table2Version = 230 ; + indicatorOfParameter = 174 ; + } +#Total precipitation (variable resolution) +'230228' = { + table2Version = 230 ; + indicatorOfParameter = 228 ; + } +#K index +'260121' = { + table2Version = 228 ; + indicatorOfParameter = 121 ; + } +#Total totals index +'260123' = { + table2Version = 228 ; + indicatorOfParameter = 123 ; + } +#Stream function gradient +'129001' = { + table2Version = 129 ; + indicatorOfParameter = 1 ; + } +#Velocity potential gradient +'129002' = { + table2Version = 129 ; + indicatorOfParameter = 2 ; + } +#Potential temperature gradient +'129003' = { + table2Version = 129 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature gradient +'129004' = { + table2Version = 129 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature gradient +'129005' = { + table2Version = 129 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind gradient +'129011' = { + table2Version = 129 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind gradient +'129012' = { + table2Version = 129 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind gradient +'129013' = { + table2Version = 129 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind gradient +'129014' = { + table2Version = 129 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature gradient +'129021' = { + table2Version = 129 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure gradient +'129022' = { + table2Version = 129 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence gradient +'129023' = { + table2Version = 129 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'129024' = { + table2Version = 129 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'129025' = { + table2Version = 129 ; + indicatorOfParameter = 25 ; + } +#Lake cover gradient +'129026' = { + table2Version = 129 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover gradient +'129027' = { + table2Version = 129 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover gradient +'129028' = { + table2Version = 129 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation gradient +'129029' = { + table2Version = 129 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation gradient +'129030' = { + table2Version = 129 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover gradient +'129031' = { + table2Version = 129 ; + indicatorOfParameter = 31 ; + } +#Snow albedo gradient +'129032' = { + table2Version = 129 ; + indicatorOfParameter = 32 ; + } +#Snow density gradient +'129033' = { + table2Version = 129 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature gradient +'129034' = { + table2Version = 129 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature layer 1 gradient +'129035' = { + table2Version = 129 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature layer 2 gradient +'129036' = { + table2Version = 129 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature layer 3 gradient +'129037' = { + table2Version = 129 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature layer 4 gradient +'129038' = { + table2Version = 129 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 gradient +'129039' = { + table2Version = 129 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 gradient +'129040' = { + table2Version = 129 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 gradient +'129041' = { + table2Version = 129 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 gradient +'129042' = { + table2Version = 129 ; + indicatorOfParameter = 42 ; + } +#Soil type gradient +'129043' = { + table2Version = 129 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation gradient +'129044' = { + table2Version = 129 ; + indicatorOfParameter = 44 ; + } +#Snowmelt gradient +'129045' = { + table2Version = 129 ; + indicatorOfParameter = 45 ; + } +#Solar duration gradient +'129046' = { + table2Version = 129 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation gradient +'129047' = { + table2Version = 129 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress gradient +'129048' = { + table2Version = 129 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust gradient +'129049' = { + table2Version = 129 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction gradient +'129050' = { + table2Version = 129 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature gradient +'129051' = { + table2Version = 129 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature gradient +'129052' = { + table2Version = 129 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential gradient +'129053' = { + table2Version = 129 ; + indicatorOfParameter = 53 ; + } +#Pressure gradient +'129054' = { + table2Version = 129 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'129055' = { + table2Version = 129 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours gradient +'129056' = { + table2Version = 129 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface gradient +'129057' = { + table2Version = 129 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface gradient +'129058' = { + table2Version = 129 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy gradient +'129059' = { + table2Version = 129 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity gradient +'129060' = { + table2Version = 129 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations gradient +'129061' = { + table2Version = 129 ; + indicatorOfParameter = 61 ; + } +#Observation count gradient +'129062' = { + table2Version = 129 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'129063' = { + table2Version = 129 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'129064' = { + table2Version = 129 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'129065' = { + table2Version = 129 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'129066' = { + table2Version = 129 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'129067' = { + table2Version = 129 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'129068' = { + table2Version = 129 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'129069' = { + table2Version = 129 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'129070' = { + table2Version = 129 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'129071' = { + table2Version = 129 ; + indicatorOfParameter = 71 ; + } +#Total column liquid water +'129078' = { + table2Version = 129 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'129079' = { + table2Version = 129 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'129080' = { + table2Version = 129 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'129081' = { + table2Version = 129 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'129082' = { + table2Version = 129 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'129083' = { + table2Version = 129 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'129084' = { + table2Version = 129 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'129085' = { + table2Version = 129 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'129086' = { + table2Version = 129 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'129087' = { + table2Version = 129 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'129088' = { + table2Version = 129 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'129089' = { + table2Version = 129 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'129090' = { + table2Version = 129 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'129091' = { + table2Version = 129 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'129092' = { + table2Version = 129 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'129093' = { + table2Version = 129 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'129094' = { + table2Version = 129 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'129095' = { + table2Version = 129 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'129096' = { + table2Version = 129 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'129097' = { + table2Version = 129 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'129098' = { + table2Version = 129 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'129099' = { + table2Version = 129 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'129100' = { + table2Version = 129 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'129101' = { + table2Version = 129 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'129102' = { + table2Version = 129 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'129103' = { + table2Version = 129 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'129104' = { + table2Version = 129 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'129105' = { + table2Version = 129 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'129106' = { + table2Version = 129 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'129107' = { + table2Version = 129 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'129108' = { + table2Version = 129 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'129109' = { + table2Version = 129 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'129110' = { + table2Version = 129 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'129111' = { + table2Version = 129 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'129112' = { + table2Version = 129 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'129113' = { + table2Version = 129 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'129114' = { + table2Version = 129 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'129115' = { + table2Version = 129 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'129116' = { + table2Version = 129 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'129117' = { + table2Version = 129 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'129118' = { + table2Version = 129 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'129119' = { + table2Version = 129 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'129120' = { + table2Version = 129 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres gradient +'129121' = { + table2Version = 129 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres gradient +'129122' = { + table2Version = 129 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours gradient +'129123' = { + table2Version = 129 ; + indicatorOfParameter = 123 ; + } +#Vertically integrated total energy +'129125' = { + table2Version = 129 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'129126' = { + table2Version = 129 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide gradient +'129127' = { + table2Version = 129 ; + indicatorOfParameter = 127 ; + } +#Budget values gradient +'129128' = { + table2Version = 129 ; + indicatorOfParameter = 128 ; + } +#Geopotential gradient +'129129' = { + table2Version = 129 ; + indicatorOfParameter = 129 ; + } +#Temperature gradient +'129130' = { + table2Version = 129 ; + indicatorOfParameter = 130 ; + } +#U component of wind gradient +'129131' = { + table2Version = 129 ; + indicatorOfParameter = 131 ; + } +#V component of wind gradient +'129132' = { + table2Version = 129 ; + indicatorOfParameter = 132 ; + } +#Specific humidity gradient +'129133' = { + table2Version = 129 ; + indicatorOfParameter = 133 ; + } +#Surface pressure gradient +'129134' = { + table2Version = 129 ; + indicatorOfParameter = 134 ; + } +#vertical velocity (pressure) gradient +'129135' = { + table2Version = 129 ; + indicatorOfParameter = 135 ; + } +#Total column water gradient +'129136' = { + table2Version = 129 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour gradient +'129137' = { + table2Version = 129 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) gradient +'129138' = { + table2Version = 129 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 gradient +'129139' = { + table2Version = 129 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 gradient +'129140' = { + table2Version = 129 ; + indicatorOfParameter = 140 ; + } +#Snow depth gradient +'129141' = { + table2Version = 129 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) gradient +'129142' = { + table2Version = 129 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation gradient +'129143' = { + table2Version = 129 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) gradient +'129144' = { + table2Version = 129 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation gradient +'129145' = { + table2Version = 129 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux gradient +'129146' = { + table2Version = 129 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux gradient +'129147' = { + table2Version = 129 ; + indicatorOfParameter = 147 ; + } +#Charnock gradient +'129148' = { + table2Version = 129 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation gradient +'129149' = { + table2Version = 129 ; + indicatorOfParameter = 149 ; + } +#Top net radiation gradient +'129150' = { + table2Version = 129 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure gradient +'129151' = { + table2Version = 129 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure gradient +'129152' = { + table2Version = 129 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate gradient +'129153' = { + table2Version = 129 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate gradient +'129154' = { + table2Version = 129 ; + indicatorOfParameter = 154 ; + } +#Divergence gradient +'129155' = { + table2Version = 129 ; + indicatorOfParameter = 155 ; + } +#Height gradient +'129156' = { + table2Version = 129 ; + indicatorOfParameter = 156 ; + } +#Relative humidity gradient +'129157' = { + table2Version = 129 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure gradient +'129158' = { + table2Version = 129 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height gradient +'129159' = { + table2Version = 129 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography gradient +'129160' = { + table2Version = 129 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography gradient +'129161' = { + table2Version = 129 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography gradient +'129162' = { + table2Version = 129 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography gradient +'129163' = { + table2Version = 129 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover gradient +'129164' = { + table2Version = 129 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component gradient +'129165' = { + table2Version = 129 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component gradient +'129166' = { + table2Version = 129 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature gradient +'129167' = { + table2Version = 129 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature gradient +'129168' = { + table2Version = 129 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards gradient +'129169' = { + table2Version = 129 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 gradient +'129170' = { + table2Version = 129 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 gradient +'129171' = { + table2Version = 129 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask gradient +'129172' = { + table2Version = 129 ; + indicatorOfParameter = 172 ; + } +#Surface roughness gradient +'129173' = { + table2Version = 129 ; + indicatorOfParameter = 173 ; + } +#Albedo gradient +'129174' = { + table2Version = 129 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards gradient +'129175' = { + table2Version = 129 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation gradient +'129176' = { + table2Version = 129 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation gradient +'129177' = { + table2Version = 129 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation gradient +'129178' = { + table2Version = 129 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation gradient +'129179' = { + table2Version = 129 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress gradient +'129180' = { + table2Version = 129 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress gradient +'129181' = { + table2Version = 129 ; + indicatorOfParameter = 181 ; + } +#Evaporation gradient +'129182' = { + table2Version = 129 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 gradient +'129183' = { + table2Version = 129 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 gradient +'129184' = { + table2Version = 129 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover gradient +'129185' = { + table2Version = 129 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover gradient +'129186' = { + table2Version = 129 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover gradient +'129187' = { + table2Version = 129 ; + indicatorOfParameter = 187 ; + } +#High cloud cover gradient +'129188' = { + table2Version = 129 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration gradient +'129189' = { + table2Version = 129 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance gradient +'129190' = { + table2Version = 129 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance gradient +'129191' = { + table2Version = 129 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance gradient +'129192' = { + table2Version = 129 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance gradient +'129193' = { + table2Version = 129 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature gradient +'129194' = { + table2Version = 129 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress gradient +'129195' = { + table2Version = 129 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress gradient +'129196' = { + table2Version = 129 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation gradient +'129197' = { + table2Version = 129 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content gradient +'129198' = { + table2Version = 129 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction gradient +'129199' = { + table2Version = 129 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography gradient +'129200' = { + table2Version = 129 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing gradient +'129201' = { + table2Version = 129 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing gradient +'129202' = { + table2Version = 129 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio gradient +'129203' = { + table2Version = 129 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights gradient +'129204' = { + table2Version = 129 ; + indicatorOfParameter = 204 ; + } +#Runoff gradient +'129205' = { + table2Version = 129 ; + indicatorOfParameter = 205 ; + } +#Total column ozone gradient +'129206' = { + table2Version = 129 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed gradient +'129207' = { + table2Version = 129 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky gradient +'129208' = { + table2Version = 129 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky gradient +'129209' = { + table2Version = 129 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky gradient +'129210' = { + table2Version = 129 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky gradient +'129211' = { + table2Version = 129 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation gradient +'129212' = { + table2Version = 129 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation gradient +'129214' = { + table2Version = 129 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion gradient +'129215' = { + table2Version = 129 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection gradient +'129216' = { + table2Version = 129 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation gradient +'129217' = { + table2Version = 129 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind gradient +'129218' = { + table2Version = 129 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind gradient +'129219' = { + table2Version = 129 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency gradient +'129220' = { + table2Version = 129 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency gradient +'129221' = { + table2Version = 129 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind gradient +'129222' = { + table2Version = 129 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind gradient +'129223' = { + table2Version = 129 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity gradient +'129224' = { + table2Version = 129 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection gradient +'129225' = { + table2Version = 129 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation gradient +'129226' = { + table2Version = 129 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity gradient +'129227' = { + table2Version = 129 ; + indicatorOfParameter = 227 ; + } +#Total precipitation gradient +'129228' = { + table2Version = 129 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress gradient +'129229' = { + table2Version = 129 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress gradient +'129230' = { + table2Version = 129 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux gradient +'129231' = { + table2Version = 129 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux gradient +'129232' = { + table2Version = 129 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity gradient +'129233' = { + table2Version = 129 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat gradient +'129234' = { + table2Version = 129 ; + indicatorOfParameter = 234 ; + } +#Skin temperature gradient +'129235' = { + table2Version = 129 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 gradient +'129236' = { + table2Version = 129 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 gradient +'129237' = { + table2Version = 129 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer gradient +'129238' = { + table2Version = 129 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall gradient +'129239' = { + table2Version = 129 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall gradient +'129240' = { + table2Version = 129 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency gradient +'129241' = { + table2Version = 129 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency gradient +'129242' = { + table2Version = 129 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo gradient +'129243' = { + table2Version = 129 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness gradient +'129244' = { + table2Version = 129 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat gradient +'129245' = { + table2Version = 129 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content gradient +'129246' = { + table2Version = 129 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content gradient +'129247' = { + table2Version = 129 ; + indicatorOfParameter = 247 ; + } +#Cloud cover gradient +'129248' = { + table2Version = 129 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency gradient +'129249' = { + table2Version = 129 ; + indicatorOfParameter = 249 ; + } +#Ice age gradient +'129250' = { + table2Version = 129 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature gradient +'129251' = { + table2Version = 129 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity gradient +'129252' = { + table2Version = 129 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind gradient +'129253' = { + table2Version = 129 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind gradient +'129254' = { + table2Version = 129 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'129255' = { + table2Version = 129 ; + indicatorOfParameter = 255 ; + } +#Top solar radiation upward +'130208' = { + table2Version = 130 ; + indicatorOfParameter = 208 ; + } +#Top thermal radiation upward +'130209' = { + table2Version = 130 ; + indicatorOfParameter = 209 ; + } +#Top solar radiation upward, clear sky +'130210' = { + table2Version = 130 ; + indicatorOfParameter = 210 ; + } +#Top thermal radiation upward, clear sky +'130211' = { + table2Version = 130 ; + indicatorOfParameter = 211 ; + } +#Cloud liquid water +'130212' = { + table2Version = 130 ; + indicatorOfParameter = 212 ; + } +#Cloud fraction +'130213' = { + table2Version = 130 ; + indicatorOfParameter = 213 ; + } +#Diabatic heating by radiation +'130214' = { + table2Version = 130 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion +'130215' = { + table2Version = 130 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection +'130216' = { + table2Version = 130 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating by large-scale condensation +'130217' = { + table2Version = 130 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind +'130218' = { + table2Version = 130 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind +'130219' = { + table2Version = 130 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag +'130220' = { + table2Version = 130 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag +'130221' = { + table2Version = 130 ; + indicatorOfParameter = 221 ; + } +#Vertical diffusion of humidity +'130224' = { + table2Version = 130 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection +'130225' = { + table2Version = 130 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation +'130226' = { + table2Version = 130 ; + indicatorOfParameter = 226 ; + } +#Adiabatic tendency of temperature +'130228' = { + table2Version = 130 ; + indicatorOfParameter = 228 ; + } +#Adiabatic tendency of humidity +'130229' = { + table2Version = 130 ; + indicatorOfParameter = 229 ; + } +#Adiabatic tendency of zonal wind +'130230' = { + table2Version = 130 ; + indicatorOfParameter = 230 ; + } +#Adiabatic tendency of meridional wind +'130231' = { + table2Version = 130 ; + indicatorOfParameter = 231 ; + } +#Mean vertical velocity +'130232' = { + table2Version = 130 ; + indicatorOfParameter = 232 ; + } +#2m temperature anomaly of at least +2K +'131001' = { + table2Version = 131 ; + indicatorOfParameter = 1 ; + } +#2m temperature anomaly of at least +1K +'131002' = { + table2Version = 131 ; + indicatorOfParameter = 2 ; + } +#2m temperature anomaly of at least 0K +'131003' = { + table2Version = 131 ; + indicatorOfParameter = 3 ; + } +#2m temperature anomaly of at most -1K +'131004' = { + table2Version = 131 ; + indicatorOfParameter = 4 ; + } +#2m temperature anomaly of at most -2K +'131005' = { + table2Version = 131 ; + indicatorOfParameter = 5 ; + } +#Total precipitation anomaly of at least 20 mm +'131006' = { + table2Version = 131 ; + indicatorOfParameter = 6 ; + } +#Total precipitation anomaly of at least 10 mm +'131007' = { + table2Version = 131 ; + indicatorOfParameter = 7 ; + } +#Total precipitation anomaly of at least 0 mm +'131008' = { + table2Version = 131 ; + indicatorOfParameter = 8 ; + } +#Surface temperature anomaly of at least 0K +'131009' = { + table2Version = 131 ; + indicatorOfParameter = 9 ; + } +#Mean sea level pressure anomaly of at least 0 Pa +'131010' = { + table2Version = 131 ; + indicatorOfParameter = 10 ; + } +#Height of 0 degree isotherm probability +'131015' = { + table2Version = 131 ; + indicatorOfParameter = 15 ; + } +#Height of snowfall limit probability +'131016' = { + table2Version = 131 ; + indicatorOfParameter = 16 ; + } +#Showalter index probability +'131017' = { + table2Version = 131 ; + indicatorOfParameter = 17 ; + } +#Whiting index probability +'131018' = { + table2Version = 131 ; + indicatorOfParameter = 18 ; + } +#Temperature anomaly less than -2 K +'131020' = { + table2Version = 131 ; + indicatorOfParameter = 20 ; + } +#Temperature anomaly of at least +2 K +'131021' = { + table2Version = 131 ; + indicatorOfParameter = 21 ; + } +#Temperature anomaly less than -8 K +'131022' = { + table2Version = 131 ; + indicatorOfParameter = 22 ; + } +#Temperature anomaly less than -4 K +'131023' = { + table2Version = 131 ; + indicatorOfParameter = 23 ; + } +#Temperature anomaly greater than +4 K +'131024' = { + table2Version = 131 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly greater than +8 K +'131025' = { + table2Version = 131 ; + indicatorOfParameter = 25 ; + } +#10 metre wind gust probability +'131049' = { + table2Version = 131 ; + indicatorOfParameter = 49 ; + } +#Convective available potential energy probability +'131059' = { + table2Version = 131 ; + indicatorOfParameter = 59 ; + } +#Total precipitation less than 0.1 mm +'131064' = { + table2Version = 131 ; + indicatorOfParameter = 64 ; + } +#Total precipitation rate less than 1 mm/day +'131065' = { + table2Version = 131 ; + indicatorOfParameter = 65 ; + } +#Total precipitation rate of at least 3 mm/day +'131066' = { + table2Version = 131 ; + indicatorOfParameter = 66 ; + } +#Total precipitation rate of at least 5 mm/day +'131067' = { + table2Version = 131 ; + indicatorOfParameter = 67 ; + } +#10 metre Wind speed of at least 10 m/s +'131068' = { + table2Version = 131 ; + indicatorOfParameter = 68 ; + } +#10 metre Wind speed of at least 15 m/s +'131069' = { + table2Version = 131 ; + indicatorOfParameter = 69 ; + } +#10 metre Wind gust of at least 15 m/s +'131070' = { + table2Version = 131 ; + indicatorOfParameter = 70 ; + } +#10 metre Wind gust of at least 20 m/s +'131071' = { + table2Version = 131 ; + indicatorOfParameter = 71 ; + } +#10 metre Wind gust of at least 25 m/s +'131072' = { + table2Version = 131 ; + indicatorOfParameter = 72 ; + } +#2 metre temperature less than 273.15 K +'131073' = { + table2Version = 131 ; + indicatorOfParameter = 73 ; + } +#Significant wave height of at least 2 m +'131074' = { + table2Version = 131 ; + indicatorOfParameter = 74 ; + } +#Significant wave height of at least 4 m +'131075' = { + table2Version = 131 ; + indicatorOfParameter = 75 ; + } +#Significant wave height of at least 6 m +'131076' = { + table2Version = 131 ; + indicatorOfParameter = 76 ; + } +#Significant wave height of at least 8 m +'131077' = { + table2Version = 131 ; + indicatorOfParameter = 77 ; + } +#Mean wave period of at least 8 s +'131078' = { + table2Version = 131 ; + indicatorOfParameter = 78 ; + } +#Mean wave period of at least 10 s +'131079' = { + table2Version = 131 ; + indicatorOfParameter = 79 ; + } +#Mean wave period of at least 12 s +'131080' = { + table2Version = 131 ; + indicatorOfParameter = 80 ; + } +#Mean wave period of at least 15 s +'131081' = { + table2Version = 131 ; + indicatorOfParameter = 81 ; + } +#Geopotential probability +'131129' = { + table2Version = 131 ; + indicatorOfParameter = 129 ; + } +#Temperature anomaly probability +'131130' = { + table2Version = 131 ; + indicatorOfParameter = 130 ; + } +#2 metre temperature probability +'131139' = { + table2Version = 131 ; + indicatorOfParameter = 139 ; + } +#Snowfall (convective + stratiform) probability +'131144' = { + table2Version = 131 ; + indicatorOfParameter = 144 ; + } +#Total precipitation probability +'131151' = { + table2Version = 131 ; + indicatorOfParameter = 151 ; + } +#Total cloud cover probability +'131164' = { + table2Version = 131 ; + indicatorOfParameter = 164 ; + } +#10 metre speed probability +'131165' = { + table2Version = 131 ; + indicatorOfParameter = 165 ; + } +#2 metre temperature probability +'131167' = { + table2Version = 131 ; + indicatorOfParameter = 167 ; + } +#Maximum 2 metre temperature probability +'131201' = { + table2Version = 131 ; + indicatorOfParameter = 201 ; + } +#Minimum 2 metre temperature probability +'131202' = { + table2Version = 131 ; + indicatorOfParameter = 202 ; + } +#Total precipitation probability +'131228' = { + table2Version = 131 ; + indicatorOfParameter = 228 ; + } +#Significant wave height probability +'131229' = { + table2Version = 131 ; + indicatorOfParameter = 229 ; + } +#Mean wave period probability +'131232' = { + table2Version = 131 ; + indicatorOfParameter = 232 ; + } +#Indicates a missing value +'131255' = { + table2Version = 131 ; + indicatorOfParameter = 255 ; + } +#10 metre wind gust index +'132049' = { + table2Version = 132 ; + indicatorOfParameter = 49 ; + } +#Snowfall index +'132144' = { + table2Version = 132 ; + indicatorOfParameter = 144 ; + } +#10 metre speed index +'132165' = { + table2Version = 132 ; + indicatorOfParameter = 165 ; + } +#2 metre temperature index +'132167' = { + table2Version = 132 ; + indicatorOfParameter = 167 ; + } +#Maximum temperature at 2 metres index +'132201' = { + table2Version = 132 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres index +'132202' = { + table2Version = 132 ; + indicatorOfParameter = 202 ; + } +#Total precipitation index +'132228' = { + table2Version = 132 ; + indicatorOfParameter = 228 ; + } +#2m temperature probability less than -10 C +'133001' = { + table2Version = 133 ; + indicatorOfParameter = 1 ; + } +#2m temperature probability less than -5 C +'133002' = { + table2Version = 133 ; + indicatorOfParameter = 2 ; + } +#2m temperature probability less than 0 C +'133003' = { + table2Version = 133 ; + indicatorOfParameter = 3 ; + } +#2m temperature probability less than 5 C +'133004' = { + table2Version = 133 ; + indicatorOfParameter = 4 ; + } +#2m temperature probability less than 10 C +'133005' = { + table2Version = 133 ; + indicatorOfParameter = 5 ; + } +#2m temperature probability greater than 25 C +'133006' = { + table2Version = 133 ; + indicatorOfParameter = 6 ; + } +#2m temperature probability greater than 30 C +'133007' = { + table2Version = 133 ; + indicatorOfParameter = 7 ; + } +#2m temperature probability greater than 35 C +'133008' = { + table2Version = 133 ; + indicatorOfParameter = 8 ; + } +#2m temperature probability greater than 40 C +'133009' = { + table2Version = 133 ; + indicatorOfParameter = 9 ; + } +#2m temperature probability greater than 45 C +'133010' = { + table2Version = 133 ; + indicatorOfParameter = 10 ; + } +#Minimum 2 metre temperature probability less than -10 C +'133011' = { + table2Version = 133 ; + indicatorOfParameter = 11 ; + } +#Minimum 2 metre temperature probability less than -5 C +'133012' = { + table2Version = 133 ; + indicatorOfParameter = 12 ; + } +#Minimum 2 metre temperature probability less than 0 C +'133013' = { + table2Version = 133 ; + indicatorOfParameter = 13 ; + } +#Minimum 2 metre temperature probability less than 5 C +'133014' = { + table2Version = 133 ; + indicatorOfParameter = 14 ; + } +#Minimum 2 metre temperature probability less than 10 C +'133015' = { + table2Version = 133 ; + indicatorOfParameter = 15 ; + } +#Maximum 2 metre temperature probability greater than 25 C +'133016' = { + table2Version = 133 ; + indicatorOfParameter = 16 ; + } +#Maximum 2 metre temperature probability greater than 30 C +'133017' = { + table2Version = 133 ; + indicatorOfParameter = 17 ; + } +#Maximum 2 metre temperature probability greater than 35 C +'133018' = { + table2Version = 133 ; + indicatorOfParameter = 18 ; + } +#Maximum 2 metre temperature probability greater than 40 C +'133019' = { + table2Version = 133 ; + indicatorOfParameter = 19 ; + } +#Maximum 2 metre temperature probability greater than 45 C +'133020' = { + table2Version = 133 ; + indicatorOfParameter = 20 ; + } +#10 metre wind speed probability of at least 10 m/s +'133021' = { + table2Version = 133 ; + indicatorOfParameter = 21 ; + } +#10 metre wind speed probability of at least 15 m/s +'133022' = { + table2Version = 133 ; + indicatorOfParameter = 22 ; + } +#10 metre wind speed probability of at least 20 m/s +'133023' = { + table2Version = 133 ; + indicatorOfParameter = 23 ; + } +#10 metre wind speed probability of at least 35 m/s +'133024' = { + table2Version = 133 ; + indicatorOfParameter = 24 ; + } +#10 metre wind speed probability of at least 50 m/s +'133025' = { + table2Version = 133 ; + indicatorOfParameter = 25 ; + } +#10 metre wind gust probability of at least 20 m/s +'133026' = { + table2Version = 133 ; + indicatorOfParameter = 26 ; + } +#10 metre wind gust probability of at least 35 m/s +'133027' = { + table2Version = 133 ; + indicatorOfParameter = 27 ; + } +#10 metre wind gust probability of at least 50 m/s +'133028' = { + table2Version = 133 ; + indicatorOfParameter = 28 ; + } +#10 metre wind gust probability of at least 75 m/s +'133029' = { + table2Version = 133 ; + indicatorOfParameter = 29 ; + } +#10 metre wind gust probability of at least 100 m/s +'133030' = { + table2Version = 133 ; + indicatorOfParameter = 30 ; + } +#Total precipitation probability of at least 1 mm +'133031' = { + table2Version = 133 ; + indicatorOfParameter = 31 ; + } +#Total precipitation probability of at least 5 mm +'133032' = { + table2Version = 133 ; + indicatorOfParameter = 32 ; + } +#Total precipitation probability of at least 10 mm +'133033' = { + table2Version = 133 ; + indicatorOfParameter = 33 ; + } +#Total precipitation probability of at least 20 mm +'133034' = { + table2Version = 133 ; + indicatorOfParameter = 34 ; + } +#Total precipitation probability of at least 40 mm +'133035' = { + table2Version = 133 ; + indicatorOfParameter = 35 ; + } +#Total precipitation probability of at least 60 mm +'133036' = { + table2Version = 133 ; + indicatorOfParameter = 36 ; + } +#Total precipitation probability of at least 80 mm +'133037' = { + table2Version = 133 ; + indicatorOfParameter = 37 ; + } +#Total precipitation probability of at least 100 mm +'133038' = { + table2Version = 133 ; + indicatorOfParameter = 38 ; + } +#Total precipitation probability of at least 150 mm +'133039' = { + table2Version = 133 ; + indicatorOfParameter = 39 ; + } +#Total precipitation probability of at least 200 mm +'133040' = { + table2Version = 133 ; + indicatorOfParameter = 40 ; + } +#Total precipitation probability of at least 300 mm +'133041' = { + table2Version = 133 ; + indicatorOfParameter = 41 ; + } +#Snowfall probability of at least 1 mm +'133042' = { + table2Version = 133 ; + indicatorOfParameter = 42 ; + } +#Snowfall probability of at least 5 mm +'133043' = { + table2Version = 133 ; + indicatorOfParameter = 43 ; + } +#Snowfall probability of at least 10 mm +'133044' = { + table2Version = 133 ; + indicatorOfParameter = 44 ; + } +#Snowfall probability of at least 20 mm +'133045' = { + table2Version = 133 ; + indicatorOfParameter = 45 ; + } +#Snowfall probability of at least 40 mm +'133046' = { + table2Version = 133 ; + indicatorOfParameter = 46 ; + } +#Snowfall probability of at least 60 mm +'133047' = { + table2Version = 133 ; + indicatorOfParameter = 47 ; + } +#Snowfall probability of at least 80 mm +'133048' = { + table2Version = 133 ; + indicatorOfParameter = 48 ; + } +#Snowfall probability of at least 100 mm +'133049' = { + table2Version = 133 ; + indicatorOfParameter = 49 ; + } +#Snowfall probability of at least 150 mm +'133050' = { + table2Version = 133 ; + indicatorOfParameter = 50 ; + } +#Snowfall probability of at least 200 mm +'133051' = { + table2Version = 133 ; + indicatorOfParameter = 51 ; + } +#Snowfall probability of at least 300 mm +'133052' = { + table2Version = 133 ; + indicatorOfParameter = 52 ; + } +#Total Cloud Cover probability greater than 10% +'133053' = { + table2Version = 133 ; + indicatorOfParameter = 53 ; + } +#Total Cloud Cover probability greater than 20% +'133054' = { + table2Version = 133 ; + indicatorOfParameter = 54 ; + } +#Total Cloud Cover probability greater than 30% +'133055' = { + table2Version = 133 ; + indicatorOfParameter = 55 ; + } +#Total Cloud Cover probability greater than 40% +'133056' = { + table2Version = 133 ; + indicatorOfParameter = 56 ; + } +#Total Cloud Cover probability greater than 50% +'133057' = { + table2Version = 133 ; + indicatorOfParameter = 57 ; + } +#Total Cloud Cover probability greater than 60% +'133058' = { + table2Version = 133 ; + indicatorOfParameter = 58 ; + } +#Total Cloud Cover probability greater than 70% +'133059' = { + table2Version = 133 ; + indicatorOfParameter = 59 ; + } +#Total Cloud Cover probability greater than 80% +'133060' = { + table2Version = 133 ; + indicatorOfParameter = 60 ; + } +#Total Cloud Cover probability greater than 90% +'133061' = { + table2Version = 133 ; + indicatorOfParameter = 61 ; + } +#Total Cloud Cover probability greater than 99% +'133062' = { + table2Version = 133 ; + indicatorOfParameter = 62 ; + } +#High Cloud Cover probability greater than 10% +'133063' = { + table2Version = 133 ; + indicatorOfParameter = 63 ; + } +#High Cloud Cover probability greater than 20% +'133064' = { + table2Version = 133 ; + indicatorOfParameter = 64 ; + } +#High Cloud Cover probability greater than 30% +'133065' = { + table2Version = 133 ; + indicatorOfParameter = 65 ; + } +#High Cloud Cover probability greater than 40% +'133066' = { + table2Version = 133 ; + indicatorOfParameter = 66 ; + } +#High Cloud Cover probability greater than 50% +'133067' = { + table2Version = 133 ; + indicatorOfParameter = 67 ; + } +#High Cloud Cover probability greater than 60% +'133068' = { + table2Version = 133 ; + indicatorOfParameter = 68 ; + } +#High Cloud Cover probability greater than 70% +'133069' = { + table2Version = 133 ; + indicatorOfParameter = 69 ; + } +#High Cloud Cover probability greater than 80% +'133070' = { + table2Version = 133 ; + indicatorOfParameter = 70 ; + } +#High Cloud Cover probability greater than 90% +'133071' = { + table2Version = 133 ; + indicatorOfParameter = 71 ; + } +#High Cloud Cover probability greater than 99% +'133072' = { + table2Version = 133 ; + indicatorOfParameter = 72 ; + } +#Medium Cloud Cover probability greater than 10% +'133073' = { + table2Version = 133 ; + indicatorOfParameter = 73 ; + } +#Medium Cloud Cover probability greater than 20% +'133074' = { + table2Version = 133 ; + indicatorOfParameter = 74 ; + } +#Medium Cloud Cover probability greater than 30% +'133075' = { + table2Version = 133 ; + indicatorOfParameter = 75 ; + } +#Medium Cloud Cover probability greater than 40% +'133076' = { + table2Version = 133 ; + indicatorOfParameter = 76 ; + } +#Medium Cloud Cover probability greater than 50% +'133077' = { + table2Version = 133 ; + indicatorOfParameter = 77 ; + } +#Medium Cloud Cover probability greater than 60% +'133078' = { + table2Version = 133 ; + indicatorOfParameter = 78 ; + } +#Medium Cloud Cover probability greater than 70% +'133079' = { + table2Version = 133 ; + indicatorOfParameter = 79 ; + } +#Medium Cloud Cover probability greater than 80% +'133080' = { + table2Version = 133 ; + indicatorOfParameter = 80 ; + } +#Medium Cloud Cover probability greater than 90% +'133081' = { + table2Version = 133 ; + indicatorOfParameter = 81 ; + } +#Medium Cloud Cover probability greater than 99% +'133082' = { + table2Version = 133 ; + indicatorOfParameter = 82 ; + } +#Low Cloud Cover probability greater than 10% +'133083' = { + table2Version = 133 ; + indicatorOfParameter = 83 ; + } +#Low Cloud Cover probability greater than 20% +'133084' = { + table2Version = 133 ; + indicatorOfParameter = 84 ; + } +#Low Cloud Cover probability greater than 30% +'133085' = { + table2Version = 133 ; + indicatorOfParameter = 85 ; + } +#Low Cloud Cover probability greater than 40% +'133086' = { + table2Version = 133 ; + indicatorOfParameter = 86 ; + } +#Low Cloud Cover probability greater than 50% +'133087' = { + table2Version = 133 ; + indicatorOfParameter = 87 ; + } +#Low Cloud Cover probability greater than 60% +'133088' = { + table2Version = 133 ; + indicatorOfParameter = 88 ; + } +#Low Cloud Cover probability greater than 70% +'133089' = { + table2Version = 133 ; + indicatorOfParameter = 89 ; + } +#Low Cloud Cover probability greater than 80% +'133090' = { + table2Version = 133 ; + indicatorOfParameter = 90 ; + } +#Low Cloud Cover probability greater than 90% +'133091' = { + table2Version = 133 ; + indicatorOfParameter = 91 ; + } +#Low Cloud Cover probability greater than 99% +'133092' = { + table2Version = 133 ; + indicatorOfParameter = 92 ; + } +#Maximum of significant wave height +'140200' = { + table2Version = 140 ; + indicatorOfParameter = 200 ; + } +#Period corresponding to maximum individual wave height +'140217' = { + table2Version = 140 ; + indicatorOfParameter = 217 ; + } +#Maximum individual wave height +'140218' = { + table2Version = 140 ; + indicatorOfParameter = 218 ; + } +#Model bathymetry +'140219' = { + table2Version = 140 ; + indicatorOfParameter = 219 ; + } +#Mean wave period based on first moment +'140220' = { + table2Version = 140 ; + indicatorOfParameter = 220 ; + } +#Mean wave period based on second moment +'140221' = { + table2Version = 140 ; + indicatorOfParameter = 221 ; + } +#Wave spectral directional width +'140222' = { + table2Version = 140 ; + indicatorOfParameter = 222 ; + } +#Mean wave period based on first moment for wind waves +'140223' = { + table2Version = 140 ; + indicatorOfParameter = 223 ; + } +#Mean wave period based on second moment for wind waves +'140224' = { + table2Version = 140 ; + indicatorOfParameter = 224 ; + } +#Wave spectral directional width for wind waves +'140225' = { + table2Version = 140 ; + indicatorOfParameter = 225 ; + } +#Mean wave period based on first moment for swell +'140226' = { + table2Version = 140 ; + indicatorOfParameter = 226 ; + } +#Mean wave period based on second moment for swell +'140227' = { + table2Version = 140 ; + indicatorOfParameter = 227 ; + } +#Wave spectral directional width for swell +'140228' = { + table2Version = 140 ; + indicatorOfParameter = 228 ; + } +#Significant height of combined wind waves and swell +'140229' = { + table2Version = 140 ; + indicatorOfParameter = 229 ; + } +#Mean wave direction +'140230' = { + table2Version = 140 ; + indicatorOfParameter = 230 ; + } +#Peak period of 1D spectra +'140231' = { + table2Version = 140 ; + indicatorOfParameter = 231 ; + } +#Mean wave period +'140232' = { + table2Version = 140 ; + indicatorOfParameter = 232 ; + } +#Coefficient of drag with waves +'140233' = { + table2Version = 140 ; + indicatorOfParameter = 233 ; + } +#Significant height of wind waves +'140234' = { + table2Version = 140 ; + indicatorOfParameter = 234 ; + } +#Mean direction of wind waves +'140235' = { + table2Version = 140 ; + indicatorOfParameter = 235 ; + } +#Mean period of wind waves +'140236' = { + table2Version = 140 ; + indicatorOfParameter = 236 ; + } +#Significant height of total swell +'140237' = { + table2Version = 140 ; + indicatorOfParameter = 237 ; + } +#Mean direction of total swell +'140238' = { + table2Version = 140 ; + indicatorOfParameter = 238 ; + } +#Mean period of total swell +'140239' = { + table2Version = 140 ; + indicatorOfParameter = 239 ; + } +#Standard deviation wave height +'140240' = { + table2Version = 140 ; + indicatorOfParameter = 240 ; + } +#Mean of 10 metre wind speed +'140241' = { + table2Version = 140 ; + indicatorOfParameter = 241 ; + } +#Mean wind direction +'140242' = { + table2Version = 140 ; + indicatorOfParameter = 242 ; + } +#Standard deviation of 10 metre wind speed +'140243' = { + table2Version = 140 ; + indicatorOfParameter = 243 ; + } +#Mean square slope of waves +'140244' = { + table2Version = 140 ; + indicatorOfParameter = 244 ; + } +#10 metre wind speed +'140245' = { + table2Version = 140 ; + indicatorOfParameter = 245 ; + } +#Altimeter wave height +'140246' = { + table2Version = 140 ; + indicatorOfParameter = 246 ; + } +#Altimeter corrected wave height +'140247' = { + table2Version = 140 ; + indicatorOfParameter = 247 ; + } +#Altimeter range relative correction +'140248' = { + table2Version = 140 ; + indicatorOfParameter = 248 ; + } +#10 metre wind direction +'140249' = { + table2Version = 140 ; + indicatorOfParameter = 249 ; + } +#2D wave spectra (multiple) +'140250' = { + table2Version = 140 ; + indicatorOfParameter = 250 ; + } +#2D wave spectra (single) +'140251' = { + table2Version = 140 ; + indicatorOfParameter = 251 ; + } +#Wave spectral kurtosis +'140252' = { + table2Version = 140 ; + indicatorOfParameter = 252 ; + } +#Benjamin-Feir index +'140253' = { + table2Version = 140 ; + indicatorOfParameter = 253 ; + } +#Wave spectral peakedness +'140254' = { + table2Version = 140 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'140255' = { + table2Version = 140 ; + indicatorOfParameter = 255 ; + } +#Ocean potential temperature +'150129' = { + table2Version = 150 ; + indicatorOfParameter = 129 ; + } +#Ocean salinity +'150130' = { + table2Version = 150 ; + indicatorOfParameter = 130 ; + } +#Ocean potential density +'150131' = { + table2Version = 150 ; + indicatorOfParameter = 131 ; + } +#Ocean U wind component +'150133' = { + table2Version = 150 ; + indicatorOfParameter = 133 ; + } +#Ocean V wind component +'150134' = { + table2Version = 150 ; + indicatorOfParameter = 134 ; + } +#Ocean W wind component +'150135' = { + table2Version = 150 ; + indicatorOfParameter = 135 ; + } +#Richardson number +'150137' = { + table2Version = 150 ; + indicatorOfParameter = 137 ; + } +#U*V product +'150139' = { + table2Version = 150 ; + indicatorOfParameter = 139 ; + } +#U*T product +'150140' = { + table2Version = 150 ; + indicatorOfParameter = 140 ; + } +#V*T product +'150141' = { + table2Version = 150 ; + indicatorOfParameter = 141 ; + } +#U*U product +'150142' = { + table2Version = 150 ; + indicatorOfParameter = 142 ; + } +#V*V product +'150143' = { + table2Version = 150 ; + indicatorOfParameter = 143 ; + } +#UV - U~V~ +'150144' = { + table2Version = 150 ; + indicatorOfParameter = 144 ; + } +#UT - U~T~ +'150145' = { + table2Version = 150 ; + indicatorOfParameter = 145 ; + } +#VT - V~T~ +'150146' = { + table2Version = 150 ; + indicatorOfParameter = 146 ; + } +#UU - U~U~ +'150147' = { + table2Version = 150 ; + indicatorOfParameter = 147 ; + } +#VV - V~V~ +'150148' = { + table2Version = 150 ; + indicatorOfParameter = 148 ; + } +#Sea level +'150152' = { + table2Version = 150 ; + indicatorOfParameter = 152 ; + } +#Barotropic stream function +'150153' = { + table2Version = 150 ; + indicatorOfParameter = 153 ; + } +#Mixed layer depth +'150154' = { + table2Version = 150 ; + indicatorOfParameter = 154 ; + } +#Depth +'150155' = { + table2Version = 150 ; + indicatorOfParameter = 155 ; + } +#U stress +'150168' = { + table2Version = 150 ; + indicatorOfParameter = 168 ; + } +#V stress +'150169' = { + table2Version = 150 ; + indicatorOfParameter = 169 ; + } +#Turbulent kinetic energy input +'150170' = { + table2Version = 150 ; + indicatorOfParameter = 170 ; + } +#Net surface heat flux +'150171' = { + table2Version = 150 ; + indicatorOfParameter = 171 ; + } +#Surface solar radiation +'150172' = { + table2Version = 150 ; + indicatorOfParameter = 172 ; + } +#P-E +'150173' = { + table2Version = 150 ; + indicatorOfParameter = 173 ; + } +#Diagnosed sea surface temperature error +'150180' = { + table2Version = 150 ; + indicatorOfParameter = 180 ; + } +#Heat flux correction +'150181' = { + table2Version = 150 ; + indicatorOfParameter = 181 ; + } +#Observed sea surface temperature +'150182' = { + table2Version = 150 ; + indicatorOfParameter = 182 ; + } +#Observed heat flux +'150183' = { + table2Version = 150 ; + indicatorOfParameter = 183 ; + } +#Indicates a missing value +'150255' = { + table2Version = 150 ; + indicatorOfParameter = 255 ; + } +#In situ Temperature +'151128' = { + table2Version = 151 ; + indicatorOfParameter = 128 ; + } +#Ocean potential temperature +'151129' = { + table2Version = 151 ; + indicatorOfParameter = 129 ; + } +#Salinity +'151130' = { + table2Version = 151 ; + indicatorOfParameter = 130 ; + } +#Ocean current zonal component +'151131' = { + table2Version = 151 ; + indicatorOfParameter = 131 ; + } +#Ocean current meridional component +'151132' = { + table2Version = 151 ; + indicatorOfParameter = 132 ; + } +#Ocean current vertical component +'151133' = { + table2Version = 151 ; + indicatorOfParameter = 133 ; + } +#Modulus of strain rate tensor +'151134' = { + table2Version = 151 ; + indicatorOfParameter = 134 ; + } +#Vertical viscosity +'151135' = { + table2Version = 151 ; + indicatorOfParameter = 135 ; + } +#Vertical diffusivity +'151136' = { + table2Version = 151 ; + indicatorOfParameter = 136 ; + } +#Bottom level Depth +'151137' = { + table2Version = 151 ; + indicatorOfParameter = 137 ; + } +#Sigma-theta +'151138' = { + table2Version = 151 ; + indicatorOfParameter = 138 ; + } +#Richardson number +'151139' = { + table2Version = 151 ; + indicatorOfParameter = 139 ; + } +#UV product +'151140' = { + table2Version = 151 ; + indicatorOfParameter = 140 ; + } +#UT product +'151141' = { + table2Version = 151 ; + indicatorOfParameter = 141 ; + } +#VT product +'151142' = { + table2Version = 151 ; + indicatorOfParameter = 142 ; + } +#UU product +'151143' = { + table2Version = 151 ; + indicatorOfParameter = 143 ; + } +#VV product +'151144' = { + table2Version = 151 ; + indicatorOfParameter = 144 ; + } +#Sea level +'151145' = { + table2Version = 151 ; + indicatorOfParameter = 145 ; + } +#Sea level previous timestep +'151146' = { + table2Version = 151 ; + indicatorOfParameter = 146 ; + } +#Barotropic stream function +'151147' = { + table2Version = 151 ; + indicatorOfParameter = 147 ; + } +#Mixed layer depth +'151148' = { + table2Version = 151 ; + indicatorOfParameter = 148 ; + } +#Bottom Pressure (equivalent height) +'151149' = { + table2Version = 151 ; + indicatorOfParameter = 149 ; + } +#Steric height +'151150' = { + table2Version = 151 ; + indicatorOfParameter = 150 ; + } +#Curl of Wind Stress +'151151' = { + table2Version = 151 ; + indicatorOfParameter = 151 ; + } +#Divergence of wind stress +'151152' = { + table2Version = 151 ; + indicatorOfParameter = 152 ; + } +#U stress +'151153' = { + table2Version = 151 ; + indicatorOfParameter = 153 ; + } +#V stress +'151154' = { + table2Version = 151 ; + indicatorOfParameter = 154 ; + } +#Turbulent kinetic energy input +'151155' = { + table2Version = 151 ; + indicatorOfParameter = 155 ; + } +#Net surface heat flux +'151156' = { + table2Version = 151 ; + indicatorOfParameter = 156 ; + } +#Absorbed solar radiation +'151157' = { + table2Version = 151 ; + indicatorOfParameter = 157 ; + } +#Precipitation - evaporation +'151158' = { + table2Version = 151 ; + indicatorOfParameter = 158 ; + } +#Specified sea surface temperature +'151159' = { + table2Version = 151 ; + indicatorOfParameter = 159 ; + } +#Specified surface heat flux +'151160' = { + table2Version = 151 ; + indicatorOfParameter = 160 ; + } +#Diagnosed sea surface temperature error +'151161' = { + table2Version = 151 ; + indicatorOfParameter = 161 ; + } +#Heat flux correction +'151162' = { + table2Version = 151 ; + indicatorOfParameter = 162 ; + } +#20 degrees isotherm depth +'151163' = { + table2Version = 151 ; + indicatorOfParameter = 163 ; + } +#Average potential temperature in the upper 300m +'151164' = { + table2Version = 151 ; + indicatorOfParameter = 164 ; + } +#Vertically integrated zonal velocity (previous time step) +'151165' = { + table2Version = 151 ; + indicatorOfParameter = 165 ; + } +#Vertically Integrated meridional velocity (previous time step) +'151166' = { + table2Version = 151 ; + indicatorOfParameter = 166 ; + } +#Vertically integrated zonal volume transport +'151167' = { + table2Version = 151 ; + indicatorOfParameter = 167 ; + } +#Vertically integrated meridional volume transport +'151168' = { + table2Version = 151 ; + indicatorOfParameter = 168 ; + } +#Vertically integrated zonal heat transport +'151169' = { + table2Version = 151 ; + indicatorOfParameter = 169 ; + } +#Vertically integrated meridional heat transport +'151170' = { + table2Version = 151 ; + indicatorOfParameter = 170 ; + } +#U velocity maximum +'151171' = { + table2Version = 151 ; + indicatorOfParameter = 171 ; + } +#Depth of the velocity maximum +'151172' = { + table2Version = 151 ; + indicatorOfParameter = 172 ; + } +#Salinity maximum +'151173' = { + table2Version = 151 ; + indicatorOfParameter = 173 ; + } +#Depth of salinity maximum +'151174' = { + table2Version = 151 ; + indicatorOfParameter = 174 ; + } +#Average salinity in the upper 300m +'151175' = { + table2Version = 151 ; + indicatorOfParameter = 175 ; + } +#Layer Thickness at scalar points +'151176' = { + table2Version = 151 ; + indicatorOfParameter = 176 ; + } +#Layer Thickness at vector points +'151177' = { + table2Version = 151 ; + indicatorOfParameter = 177 ; + } +#Potential temperature increment +'151178' = { + table2Version = 151 ; + indicatorOfParameter = 178 ; + } +#Potential temperature analysis error +'151179' = { + table2Version = 151 ; + indicatorOfParameter = 179 ; + } +#Background potential temperature +'151180' = { + table2Version = 151 ; + indicatorOfParameter = 180 ; + } +#Analysed potential temperature +'151181' = { + table2Version = 151 ; + indicatorOfParameter = 181 ; + } +#Potential temperature background error +'151182' = { + table2Version = 151 ; + indicatorOfParameter = 182 ; + } +#Analysed salinity +'151183' = { + table2Version = 151 ; + indicatorOfParameter = 183 ; + } +#Salinity increment +'151184' = { + table2Version = 151 ; + indicatorOfParameter = 184 ; + } +#Estimated Bias in Temperature +'151185' = { + table2Version = 151 ; + indicatorOfParameter = 185 ; + } +#Estimated Bias in Salinity +'151186' = { + table2Version = 151 ; + indicatorOfParameter = 186 ; + } +#Zonal Velocity increment (from balance operator) +'151187' = { + table2Version = 151 ; + indicatorOfParameter = 187 ; + } +#Meridional Velocity increment (from balance operator) +'151188' = { + table2Version = 151 ; + indicatorOfParameter = 188 ; + } +#Salinity increment (from salinity data) +'151190' = { + table2Version = 151 ; + indicatorOfParameter = 190 ; + } +#Salinity analysis error +'151191' = { + table2Version = 151 ; + indicatorOfParameter = 191 ; + } +#Background Salinity +'151192' = { + table2Version = 151 ; + indicatorOfParameter = 192 ; + } +#Salinity background error +'151194' = { + table2Version = 151 ; + indicatorOfParameter = 194 ; + } +#Estimated temperature bias from assimilation +'151199' = { + table2Version = 151 ; + indicatorOfParameter = 199 ; + } +#Estimated salinity bias from assimilation +'151200' = { + table2Version = 151 ; + indicatorOfParameter = 200 ; + } +#Temperature increment from relaxation term +'151201' = { + table2Version = 151 ; + indicatorOfParameter = 201 ; + } +#Salinity increment from relaxation term +'151202' = { + table2Version = 151 ; + indicatorOfParameter = 202 ; + } +#Bias in the zonal pressure gradient (applied) +'151203' = { + table2Version = 151 ; + indicatorOfParameter = 203 ; + } +#Bias in the meridional pressure gradient (applied) +'151204' = { + table2Version = 151 ; + indicatorOfParameter = 204 ; + } +#Estimated temperature bias from relaxation +'151205' = { + table2Version = 151 ; + indicatorOfParameter = 205 ; + } +#Estimated salinity bias from relaxation +'151206' = { + table2Version = 151 ; + indicatorOfParameter = 206 ; + } +#First guess bias in temperature +'151207' = { + table2Version = 151 ; + indicatorOfParameter = 207 ; + } +#First guess bias in salinity +'151208' = { + table2Version = 151 ; + indicatorOfParameter = 208 ; + } +#Applied bias in pressure +'151209' = { + table2Version = 151 ; + indicatorOfParameter = 209 ; + } +#FG bias in pressure +'151210' = { + table2Version = 151 ; + indicatorOfParameter = 210 ; + } +#Bias in temperature(applied) +'151211' = { + table2Version = 151 ; + indicatorOfParameter = 211 ; + } +#Bias in salinity (applied) +'151212' = { + table2Version = 151 ; + indicatorOfParameter = 212 ; + } +#Indicates a missing value +'151255' = { + table2Version = 151 ; + indicatorOfParameter = 255 ; + } +#10 metre wind gust during averaging time +'160049' = { + table2Version = 160 ; + indicatorOfParameter = 49 ; + } +#vertical velocity (pressure) +'160135' = { + table2Version = 160 ; + indicatorOfParameter = 135 ; + } +#Precipitable water content +'160137' = { + table2Version = 160 ; + indicatorOfParameter = 137 ; + } +#Soil wetness level 1 +'160140' = { + table2Version = 160 ; + indicatorOfParameter = 140 ; + } +#Snow depth +'160141' = { + table2Version = 160 ; + indicatorOfParameter = 141 ; + } +#Large-scale precipitation +'160142' = { + table2Version = 160 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'160143' = { + table2Version = 160 ; + indicatorOfParameter = 143 ; + } +#Snowfall +'160144' = { + table2Version = 160 ; + indicatorOfParameter = 144 ; + } +#Height +'160156' = { + table2Version = 160 ; + indicatorOfParameter = 156 ; + } +#Relative humidity +'160157' = { + table2Version = 160 ; + indicatorOfParameter = 157 ; + } +#Soil wetness level 2 +'160171' = { + table2Version = 160 ; + indicatorOfParameter = 171 ; + } +#East-West surface stress +'160180' = { + table2Version = 160 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'160181' = { + table2Version = 160 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'160182' = { + table2Version = 160 ; + indicatorOfParameter = 182 ; + } +#Soil wetness level 3 +'160184' = { + table2Version = 160 ; + indicatorOfParameter = 184 ; + } +#Skin reservoir content +'160198' = { + table2Version = 160 ; + indicatorOfParameter = 198 ; + } +#Percentage of vegetation +'160199' = { + table2Version = 160 ; + indicatorOfParameter = 199 ; + } +#Maximum temperature at 2 metres during averaging time +'160201' = { + table2Version = 160 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres during averaging time +'160202' = { + table2Version = 160 ; + indicatorOfParameter = 202 ; + } +#Runoff +'160205' = { + table2Version = 160 ; + indicatorOfParameter = 205 ; + } +#Standard deviation of geopotential +'160206' = { + table2Version = 160 ; + indicatorOfParameter = 206 ; + } +#Covariance of temperature and geopotential +'160207' = { + table2Version = 160 ; + indicatorOfParameter = 207 ; + } +#Standard deviation of temperature +'160208' = { + table2Version = 160 ; + indicatorOfParameter = 208 ; + } +#Covariance of specific humidity and geopotential +'160209' = { + table2Version = 160 ; + indicatorOfParameter = 209 ; + } +#Covariance of specific humidity and temperature +'160210' = { + table2Version = 160 ; + indicatorOfParameter = 210 ; + } +#Standard deviation of specific humidity +'160211' = { + table2Version = 160 ; + indicatorOfParameter = 211 ; + } +#Covariance of U component and geopotential +'160212' = { + table2Version = 160 ; + indicatorOfParameter = 212 ; + } +#Covariance of U component and temperature +'160213' = { + table2Version = 160 ; + indicatorOfParameter = 213 ; + } +#Covariance of U component and specific humidity +'160214' = { + table2Version = 160 ; + indicatorOfParameter = 214 ; + } +#Standard deviation of U velocity +'160215' = { + table2Version = 160 ; + indicatorOfParameter = 215 ; + } +#Covariance of V component and geopotential +'160216' = { + table2Version = 160 ; + indicatorOfParameter = 216 ; + } +#Covariance of V component and temperature +'160217' = { + table2Version = 160 ; + indicatorOfParameter = 217 ; + } +#Covariance of V component and specific humidity +'160218' = { + table2Version = 160 ; + indicatorOfParameter = 218 ; + } +#Covariance of V component and U component +'160219' = { + table2Version = 160 ; + indicatorOfParameter = 219 ; + } +#Standard deviation of V component +'160220' = { + table2Version = 160 ; + indicatorOfParameter = 220 ; + } +#Covariance of W component and geopotential +'160221' = { + table2Version = 160 ; + indicatorOfParameter = 221 ; + } +#Covariance of W component and temperature +'160222' = { + table2Version = 160 ; + indicatorOfParameter = 222 ; + } +#Covariance of W component and specific humidity +'160223' = { + table2Version = 160 ; + indicatorOfParameter = 223 ; + } +#Covariance of W component and U component +'160224' = { + table2Version = 160 ; + indicatorOfParameter = 224 ; + } +#Covariance of W component and V component +'160225' = { + table2Version = 160 ; + indicatorOfParameter = 225 ; + } +#Standard deviation of vertical velocity +'160226' = { + table2Version = 160 ; + indicatorOfParameter = 226 ; + } +#Instantaneous surface heat flux +'160231' = { + table2Version = 160 ; + indicatorOfParameter = 231 ; + } +#Convective snowfall +'160239' = { + table2Version = 160 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall +'160240' = { + table2Version = 160 ; + indicatorOfParameter = 240 ; + } +#Cloud liquid water content +'160241' = { + table2Version = 160 ; + indicatorOfParameter = 241 ; + } +#Cloud cover +'160242' = { + table2Version = 160 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo +'160243' = { + table2Version = 160 ; + indicatorOfParameter = 243 ; + } +#10 metre wind speed +'160246' = { + table2Version = 160 ; + indicatorOfParameter = 246 ; + } +#Momentum flux +'160247' = { + table2Version = 160 ; + indicatorOfParameter = 247 ; + } +#Gravity wave dissipation flux +'160249' = { + table2Version = 160 ; + indicatorOfParameter = 249 ; + } +#Heaviside beta function +'160254' = { + table2Version = 160 ; + indicatorOfParameter = 254 ; + } +#Surface geopotential +'162051' = { + table2Version = 162 ; + indicatorOfParameter = 51 ; + } +#Vertical integral of mass of atmosphere +'162053' = { + table2Version = 162 ; + indicatorOfParameter = 53 ; + } +#Vertical integral of temperature +'162054' = { + table2Version = 162 ; + indicatorOfParameter = 54 ; + } +#Vertical integral of water vapour +'162055' = { + table2Version = 162 ; + indicatorOfParameter = 55 ; + } +#Vertical integral of cloud liquid water +'162056' = { + table2Version = 162 ; + indicatorOfParameter = 56 ; + } +#Vertical integral of cloud frozen water +'162057' = { + table2Version = 162 ; + indicatorOfParameter = 57 ; + } +#Vertical integral of ozone +'162058' = { + table2Version = 162 ; + indicatorOfParameter = 58 ; + } +#Vertical integral of kinetic energy +'162059' = { + table2Version = 162 ; + indicatorOfParameter = 59 ; + } +#Vertical integral of thermal energy +'162060' = { + table2Version = 162 ; + indicatorOfParameter = 60 ; + } +#Vertical integral of potential+internal energy +'162061' = { + table2Version = 162 ; + indicatorOfParameter = 61 ; + } +#Vertical integral of potential+internal+latent energy +'162062' = { + table2Version = 162 ; + indicatorOfParameter = 62 ; + } +#Vertical integral of total energy +'162063' = { + table2Version = 162 ; + indicatorOfParameter = 63 ; + } +#Vertical integral of energy conversion +'162064' = { + table2Version = 162 ; + indicatorOfParameter = 64 ; + } +#Vertical integral of eastward mass flux +'162065' = { + table2Version = 162 ; + indicatorOfParameter = 65 ; + } +#Vertical integral of northward mass flux +'162066' = { + table2Version = 162 ; + indicatorOfParameter = 66 ; + } +#Vertical integral of eastward kinetic energy flux +'162067' = { + table2Version = 162 ; + indicatorOfParameter = 67 ; + } +#Vertical integral of northward kinetic energy flux +'162068' = { + table2Version = 162 ; + indicatorOfParameter = 68 ; + } +#Vertical integral of eastward heat flux +'162069' = { + table2Version = 162 ; + indicatorOfParameter = 69 ; + } +#Vertical integral of northward heat flux +'162070' = { + table2Version = 162 ; + indicatorOfParameter = 70 ; + } +#Vertical integral of eastward water vapour flux +'162071' = { + table2Version = 162 ; + indicatorOfParameter = 71 ; + } +#Vertical integral of northward water vapour flux +'162072' = { + table2Version = 162 ; + indicatorOfParameter = 72 ; + } +#Vertical integral of eastward geopotential flux +'162073' = { + table2Version = 162 ; + indicatorOfParameter = 73 ; + } +#Vertical integral of northward geopotential flux +'162074' = { + table2Version = 162 ; + indicatorOfParameter = 74 ; + } +#Vertical integral of eastward total energy flux +'162075' = { + table2Version = 162 ; + indicatorOfParameter = 75 ; + } +#Vertical integral of northward total energy flux +'162076' = { + table2Version = 162 ; + indicatorOfParameter = 76 ; + } +#Vertical integral of eastward ozone flux +'162077' = { + table2Version = 162 ; + indicatorOfParameter = 77 ; + } +#Vertical integral of northward ozone flux +'162078' = { + table2Version = 162 ; + indicatorOfParameter = 78 ; + } +#Vertical integral of divergence of mass flux +'162081' = { + table2Version = 162 ; + indicatorOfParameter = 81 ; + } +#Vertical integral of divergence of kinetic energy flux +'162082' = { + table2Version = 162 ; + indicatorOfParameter = 82 ; + } +#Vertical integral of divergence of thermal energy flux +'162083' = { + table2Version = 162 ; + indicatorOfParameter = 83 ; + } +#Vertical integral of divergence of moisture flux +'162084' = { + table2Version = 162 ; + indicatorOfParameter = 84 ; + } +#Vertical integral of divergence of geopotential flux +'162085' = { + table2Version = 162 ; + indicatorOfParameter = 85 ; + } +#Vertical integral of divergence of total energy flux +'162086' = { + table2Version = 162 ; + indicatorOfParameter = 86 ; + } +#Vertical integral of divergence of ozone flux +'162087' = { + table2Version = 162 ; + indicatorOfParameter = 87 ; + } +#Tendency of short wave radiation +'162100' = { + table2Version = 162 ; + indicatorOfParameter = 100 ; + } +#Tendency of long wave radiation +'162101' = { + table2Version = 162 ; + indicatorOfParameter = 101 ; + } +#Tendency of clear sky short wave radiation +'162102' = { + table2Version = 162 ; + indicatorOfParameter = 102 ; + } +#Tendency of clear sky long wave radiation +'162103' = { + table2Version = 162 ; + indicatorOfParameter = 103 ; + } +#Updraught mass flux +'162104' = { + table2Version = 162 ; + indicatorOfParameter = 104 ; + } +#Downdraught mass flux +'162105' = { + table2Version = 162 ; + indicatorOfParameter = 105 ; + } +#Updraught detrainment rate +'162106' = { + table2Version = 162 ; + indicatorOfParameter = 106 ; + } +#Downdraught detrainment rate +'162107' = { + table2Version = 162 ; + indicatorOfParameter = 107 ; + } +#Total precipitation flux +'162108' = { + table2Version = 162 ; + indicatorOfParameter = 108 ; + } +#Turbulent diffusion coefficient for heat +'162109' = { + table2Version = 162 ; + indicatorOfParameter = 109 ; + } +#Tendency of temperature due to physics +'162110' = { + table2Version = 162 ; + indicatorOfParameter = 110 ; + } +#Tendency of specific humidity due to physics +'162111' = { + table2Version = 162 ; + indicatorOfParameter = 111 ; + } +#Tendency of u component due to physics +'162112' = { + table2Version = 162 ; + indicatorOfParameter = 112 ; + } +#Tendency of v component due to physics +'162113' = { + table2Version = 162 ; + indicatorOfParameter = 113 ; + } +#Variance of geopotential +'162206' = { + table2Version = 162 ; + indicatorOfParameter = 206 ; + } +#Covariance of geopotential/temperature +'162207' = { + table2Version = 162 ; + indicatorOfParameter = 207 ; + } +#Variance of temperature +'162208' = { + table2Version = 162 ; + indicatorOfParameter = 208 ; + } +#Covariance of geopotential/specific humidity +'162209' = { + table2Version = 162 ; + indicatorOfParameter = 209 ; + } +#Covariance of temperature/specific humidity +'162210' = { + table2Version = 162 ; + indicatorOfParameter = 210 ; + } +#Variance of specific humidity +'162211' = { + table2Version = 162 ; + indicatorOfParameter = 211 ; + } +#Covariance of u component/geopotential +'162212' = { + table2Version = 162 ; + indicatorOfParameter = 212 ; + } +#Covariance of u component/temperature +'162213' = { + table2Version = 162 ; + indicatorOfParameter = 213 ; + } +#Covariance of u component/specific humidity +'162214' = { + table2Version = 162 ; + indicatorOfParameter = 214 ; + } +#Variance of u component +'162215' = { + table2Version = 162 ; + indicatorOfParameter = 215 ; + } +#Covariance of v component/geopotential +'162216' = { + table2Version = 162 ; + indicatorOfParameter = 216 ; + } +#Covariance of v component/temperature +'162217' = { + table2Version = 162 ; + indicatorOfParameter = 217 ; + } +#Covariance of v component/specific humidity +'162218' = { + table2Version = 162 ; + indicatorOfParameter = 218 ; + } +#Covariance of v component/u component +'162219' = { + table2Version = 162 ; + indicatorOfParameter = 219 ; + } +#Variance of v component +'162220' = { + table2Version = 162 ; + indicatorOfParameter = 220 ; + } +#Covariance of omega/geopotential +'162221' = { + table2Version = 162 ; + indicatorOfParameter = 221 ; + } +#Covariance of omega/temperature +'162222' = { + table2Version = 162 ; + indicatorOfParameter = 222 ; + } +#Covariance of omega/specific humidity +'162223' = { + table2Version = 162 ; + indicatorOfParameter = 223 ; + } +#Covariance of omega/u component +'162224' = { + table2Version = 162 ; + indicatorOfParameter = 224 ; + } +#Covariance of omega/v component +'162225' = { + table2Version = 162 ; + indicatorOfParameter = 225 ; + } +#Variance of omega +'162226' = { + table2Version = 162 ; + indicatorOfParameter = 226 ; + } +#Variance of surface pressure +'162227' = { + table2Version = 162 ; + indicatorOfParameter = 227 ; + } +#Variance of relative humidity +'162229' = { + table2Version = 162 ; + indicatorOfParameter = 229 ; + } +#Covariance of u component/ozone +'162230' = { + table2Version = 162 ; + indicatorOfParameter = 230 ; + } +#Covariance of v component/ozone +'162231' = { + table2Version = 162 ; + indicatorOfParameter = 231 ; + } +#Covariance of omega/ozone +'162232' = { + table2Version = 162 ; + indicatorOfParameter = 232 ; + } +#Variance of ozone +'162233' = { + table2Version = 162 ; + indicatorOfParameter = 233 ; + } +#Indicates a missing value +'162255' = { + table2Version = 162 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'170149' = { + table2Version = 170 ; + indicatorOfParameter = 149 ; + } +#Soil wetness level 2 +'170171' = { + table2Version = 170 ; + indicatorOfParameter = 171 ; + } +#Top net thermal radiation +'170179' = { + table2Version = 170 ; + indicatorOfParameter = 179 ; + } +#Stream function anomaly +'171001' = { + table2Version = 171 ; + indicatorOfParameter = 1 ; + } +#Velocity potential anomaly +'171002' = { + table2Version = 171 ; + indicatorOfParameter = 2 ; + } +#Potential temperature anomaly +'171003' = { + table2Version = 171 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature anomaly +'171004' = { + table2Version = 171 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature anomaly +'171005' = { + table2Version = 171 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind anomaly +'171011' = { + table2Version = 171 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind anomaly +'171012' = { + table2Version = 171 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind anomaly +'171013' = { + table2Version = 171 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind anomaly +'171014' = { + table2Version = 171 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature anomaly +'171021' = { + table2Version = 171 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure anomaly +'171022' = { + table2Version = 171 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence anomaly +'171023' = { + table2Version = 171 ; + indicatorOfParameter = 23 ; + } +#Lake cover anomaly +'171026' = { + table2Version = 171 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover anomaly +'171027' = { + table2Version = 171 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover anomaly +'171028' = { + table2Version = 171 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation anomaly +'171029' = { + table2Version = 171 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation anomaly +'171030' = { + table2Version = 171 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover anomaly +'171031' = { + table2Version = 171 ; + indicatorOfParameter = 31 ; + } +#Snow albedo anomaly +'171032' = { + table2Version = 171 ; + indicatorOfParameter = 32 ; + } +#Snow density anomaly +'171033' = { + table2Version = 171 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature anomaly +'171034' = { + table2Version = 171 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature anomaly layer 1 +'171035' = { + table2Version = 171 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature anomaly layer 2 +'171036' = { + table2Version = 171 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature anomaly layer 3 +'171037' = { + table2Version = 171 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature anomaly layer 4 +'171038' = { + table2Version = 171 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water anomaly layer 1 +'171039' = { + table2Version = 171 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water anomaly layer 2 +'171040' = { + table2Version = 171 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water anomaly layer 3 +'171041' = { + table2Version = 171 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water anomaly layer 4 +'171042' = { + table2Version = 171 ; + indicatorOfParameter = 42 ; + } +#Soil type anomaly +'171043' = { + table2Version = 171 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation anomaly +'171044' = { + table2Version = 171 ; + indicatorOfParameter = 44 ; + } +#Snowmelt anomaly +'171045' = { + table2Version = 171 ; + indicatorOfParameter = 45 ; + } +#Solar duration anomaly +'171046' = { + table2Version = 171 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation anomaly +'171047' = { + table2Version = 171 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress anomaly +'171048' = { + table2Version = 171 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust anomaly +'171049' = { + table2Version = 171 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction anomaly +'171050' = { + table2Version = 171 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature in the last 24 hours anomaly +'171051' = { + table2Version = 171 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature in the last 24 hours anomaly +'171052' = { + table2Version = 171 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential anomaly +'171053' = { + table2Version = 171 ; + indicatorOfParameter = 53 ; + } +#Pressure anomaly +'171054' = { + table2Version = 171 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours anomaly +'171055' = { + table2Version = 171 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours anomaly +'171056' = { + table2Version = 171 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface anomaly +'171057' = { + table2Version = 171 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface anomaly +'171058' = { + table2Version = 171 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy anomaly +'171059' = { + table2Version = 171 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity anomaly +'171060' = { + table2Version = 171 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations anomaly +'171061' = { + table2Version = 171 ; + indicatorOfParameter = 61 ; + } +#Observation count anomaly +'171062' = { + table2Version = 171 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference anomaly +'171063' = { + table2Version = 171 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference anomaly +'171064' = { + table2Version = 171 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference anomaly +'171065' = { + table2Version = 171 ; + indicatorOfParameter = 65 ; + } +#Total column liquid water anomaly +'171078' = { + table2Version = 171 ; + indicatorOfParameter = 78 ; + } +#Total column ice water anomaly +'171079' = { + table2Version = 171 ; + indicatorOfParameter = 79 ; + } +#Vertically integrated total energy anomaly +'171125' = { + table2Version = 171 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'171126' = { + table2Version = 171 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide anomaly +'171127' = { + table2Version = 171 ; + indicatorOfParameter = 127 ; + } +#Budget values anomaly +'171128' = { + table2Version = 171 ; + indicatorOfParameter = 128 ; + } +#Geopotential anomaly +'171129' = { + table2Version = 171 ; + indicatorOfParameter = 129 ; + } +#Temperature anomaly +'171130' = { + table2Version = 171 ; + indicatorOfParameter = 130 ; + } +#U component of wind anomaly +'171131' = { + table2Version = 171 ; + indicatorOfParameter = 131 ; + } +#V component of wind anomaly +'171132' = { + table2Version = 171 ; + indicatorOfParameter = 132 ; + } +#Specific humidity anomaly +'171133' = { + table2Version = 171 ; + indicatorOfParameter = 133 ; + } +#Surface pressure anomaly +'171134' = { + table2Version = 171 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity (pressure) anomaly +'171135' = { + table2Version = 171 ; + indicatorOfParameter = 135 ; + } +#Total column water anomaly +'171136' = { + table2Version = 171 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour anomaly +'171137' = { + table2Version = 171 ; + indicatorOfParameter = 137 ; + } +#Relative vorticity anomaly +'171138' = { + table2Version = 171 ; + indicatorOfParameter = 138 ; + } +#Soil temperature anomaly level 1 +'171139' = { + table2Version = 171 ; + indicatorOfParameter = 139 ; + } +#Soil wetness anomaly level 1 +'171140' = { + table2Version = 171 ; + indicatorOfParameter = 140 ; + } +#Snow depth anomaly +'171141' = { + table2Version = 171 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'171142' = { + table2Version = 171 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation anomaly +'171143' = { + table2Version = 171 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) anomaly +'171144' = { + table2Version = 171 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation anomaly +'171145' = { + table2Version = 171 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux anomaly +'171146' = { + table2Version = 171 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux anomaly +'171147' = { + table2Version = 171 ; + indicatorOfParameter = 147 ; + } +#Charnock anomaly +'171148' = { + table2Version = 171 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation anomaly +'171149' = { + table2Version = 171 ; + indicatorOfParameter = 149 ; + } +#Top net radiation anomaly +'171150' = { + table2Version = 171 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure anomaly +'171151' = { + table2Version = 171 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure anomaly +'171152' = { + table2Version = 171 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate anomaly +'171153' = { + table2Version = 171 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate anomaly +'171154' = { + table2Version = 171 ; + indicatorOfParameter = 154 ; + } +#Relative divergence anomaly +'171155' = { + table2Version = 171 ; + indicatorOfParameter = 155 ; + } +#Height anomaly +'171156' = { + table2Version = 171 ; + indicatorOfParameter = 156 ; + } +#Relative humidity anomaly +'171157' = { + table2Version = 171 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure anomaly +'171158' = { + table2Version = 171 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height anomaly +'171159' = { + table2Version = 171 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography anomaly +'171160' = { + table2Version = 171 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography anomaly +'171161' = { + table2Version = 171 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography anomaly +'171162' = { + table2Version = 171 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography anomaly +'171163' = { + table2Version = 171 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover anomaly +'171164' = { + table2Version = 171 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component anomaly +'171165' = { + table2Version = 171 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component anomaly +'171166' = { + table2Version = 171 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature anomaly +'171167' = { + table2Version = 171 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature anomaly +'171168' = { + table2Version = 171 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards anomaly +'171169' = { + table2Version = 171 ; + indicatorOfParameter = 169 ; + } +#Soil temperature anomaly level 2 +'171170' = { + table2Version = 171 ; + indicatorOfParameter = 170 ; + } +#Soil wetness anomaly level 2 +'171171' = { + table2Version = 171 ; + indicatorOfParameter = 171 ; + } +#Surface roughness anomaly +'171173' = { + table2Version = 171 ; + indicatorOfParameter = 173 ; + } +#Albedo anomaly +'171174' = { + table2Version = 171 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards anomaly +'171175' = { + table2Version = 171 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation anomaly +'171176' = { + table2Version = 171 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation anomaly +'171177' = { + table2Version = 171 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation anomaly +'171178' = { + table2Version = 171 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation anomaly +'171179' = { + table2Version = 171 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress anomaly +'171180' = { + table2Version = 171 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress anomaly +'171181' = { + table2Version = 171 ; + indicatorOfParameter = 181 ; + } +#Evaporation anomaly +'171182' = { + table2Version = 171 ; + indicatorOfParameter = 182 ; + } +#Soil temperature anomaly level 3 +'171183' = { + table2Version = 171 ; + indicatorOfParameter = 183 ; + } +#Soil wetness anomaly level 3 +'171184' = { + table2Version = 171 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover anomaly +'171185' = { + table2Version = 171 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover anomaly +'171186' = { + table2Version = 171 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover anomaly +'171187' = { + table2Version = 171 ; + indicatorOfParameter = 187 ; + } +#High cloud cover anomaly +'171188' = { + table2Version = 171 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration anomaly +'171189' = { + table2Version = 171 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance anomaly +'171190' = { + table2Version = 171 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance anomaly +'171191' = { + table2Version = 171 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance anomaly +'171192' = { + table2Version = 171 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance anomaly +'171193' = { + table2Version = 171 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature anomaly +'171194' = { + table2Version = 171 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress anomaly +'171195' = { + table2Version = 171 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress anomaly +'171196' = { + table2Version = 171 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation anomaly +'171197' = { + table2Version = 171 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content anomaly +'171198' = { + table2Version = 171 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction anomaly +'171199' = { + table2Version = 171 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography anomaly +'171200' = { + table2Version = 171 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres anomaly +'171201' = { + table2Version = 171 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres anomaly +'171202' = { + table2Version = 171 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio anomaly +'171203' = { + table2Version = 171 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights anomaly +'171204' = { + table2Version = 171 ; + indicatorOfParameter = 204 ; + } +#Runoff anomaly +'171205' = { + table2Version = 171 ; + indicatorOfParameter = 205 ; + } +#Total column ozone anomaly +'171206' = { + table2Version = 171 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed anomaly +'171207' = { + table2Version = 171 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation clear sky anomaly +'171208' = { + table2Version = 171 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation clear sky anomaly +'171209' = { + table2Version = 171 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation clear sky anomaly +'171210' = { + table2Version = 171 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'171211' = { + table2Version = 171 ; + indicatorOfParameter = 211 ; + } +#Solar insolation anomaly +'171212' = { + table2Version = 171 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation anomaly +'171214' = { + table2Version = 171 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion anomaly +'171215' = { + table2Version = 171 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection anomaly +'171216' = { + table2Version = 171 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating by large-scale condensation anomaly +'171217' = { + table2Version = 171 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind anomaly +'171218' = { + table2Version = 171 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind anomaly +'171219' = { + table2Version = 171 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency anomaly +'171220' = { + table2Version = 171 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency anomaly +'171221' = { + table2Version = 171 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind anomaly +'171222' = { + table2Version = 171 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind anomaly +'171223' = { + table2Version = 171 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity anomaly +'171224' = { + table2Version = 171 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection anomaly +'171225' = { + table2Version = 171 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation anomaly +'171226' = { + table2Version = 171 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity anomaly +'171227' = { + table2Version = 171 ; + indicatorOfParameter = 227 ; + } +#Total precipitation anomaly +'171228' = { + table2Version = 171 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress anomaly +'171229' = { + table2Version = 171 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress anomaly +'171230' = { + table2Version = 171 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux anomaly +'171231' = { + table2Version = 171 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux anomaly +'171232' = { + table2Version = 171 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity anomaly +'171233' = { + table2Version = 171 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat anomaly +'171234' = { + table2Version = 171 ; + indicatorOfParameter = 234 ; + } +#Skin temperature anomaly +'171235' = { + table2Version = 171 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 anomaly +'171236' = { + table2Version = 171 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 anomaly +'171237' = { + table2Version = 171 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer anomaly +'171238' = { + table2Version = 171 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall anomaly +'171239' = { + table2Version = 171 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall anomaly +'171240' = { + table2Version = 171 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency anomaly +'171241' = { + table2Version = 171 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency anomaly +'171242' = { + table2Version = 171 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo anomaly +'171243' = { + table2Version = 171 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness anomaly +'171244' = { + table2Version = 171 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat anomaly +'171245' = { + table2Version = 171 ; + indicatorOfParameter = 245 ; + } +#Cloud liquid water content anomaly +'171246' = { + table2Version = 171 ; + indicatorOfParameter = 246 ; + } +#Cloud ice water content anomaly +'171247' = { + table2Version = 171 ; + indicatorOfParameter = 247 ; + } +#Cloud cover anomaly +'171248' = { + table2Version = 171 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency anomaly +'171249' = { + table2Version = 171 ; + indicatorOfParameter = 249 ; + } +#Ice age anomaly +'171250' = { + table2Version = 171 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature anomaly +'171251' = { + table2Version = 171 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity anomaly +'171252' = { + table2Version = 171 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind anomaly +'171253' = { + table2Version = 171 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind anomaly +'171254' = { + table2Version = 171 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'171255' = { + table2Version = 171 ; + indicatorOfParameter = 255 ; + } +#Snow evaporation +'172044' = { + table2Version = 172 ; + indicatorOfParameter = 44 ; + } +#Snowmelt +'172045' = { + table2Version = 172 ; + indicatorOfParameter = 45 ; + } +#Magnitude of surface stress +'172048' = { + table2Version = 172 ; + indicatorOfParameter = 48 ; + } +#Large-scale precipitation fraction +'172050' = { + table2Version = 172 ; + indicatorOfParameter = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) +'172142' = { + table2Version = 172 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'172143' = { + table2Version = 172 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) +'172144' = { + table2Version = 172 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation +'172145' = { + table2Version = 172 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux +'172146' = { + table2Version = 172 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux +'172147' = { + table2Version = 172 ; + indicatorOfParameter = 147 ; + } +#Surface net radiation +'172149' = { + table2Version = 172 ; + indicatorOfParameter = 149 ; + } +#Short-wave heating rate +'172153' = { + table2Version = 172 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate +'172154' = { + table2Version = 172 ; + indicatorOfParameter = 154 ; + } +#Surface solar radiation downwards +'172169' = { + table2Version = 172 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards +'172175' = { + table2Version = 172 ; + indicatorOfParameter = 175 ; + } +#Surface solar radiation +'172176' = { + table2Version = 172 ; + indicatorOfParameter = 176 ; + } +#Surface thermal radiation +'172177' = { + table2Version = 172 ; + indicatorOfParameter = 177 ; + } +#Top solar radiation +'172178' = { + table2Version = 172 ; + indicatorOfParameter = 178 ; + } +#Top thermal radiation +'172179' = { + table2Version = 172 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress +'172180' = { + table2Version = 172 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'172181' = { + table2Version = 172 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'172182' = { + table2Version = 172 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration +'172189' = { + table2Version = 172 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress +'172195' = { + table2Version = 172 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress +'172196' = { + table2Version = 172 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation +'172197' = { + table2Version = 172 ; + indicatorOfParameter = 197 ; + } +#Runoff +'172205' = { + table2Version = 172 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky +'172208' = { + table2Version = 172 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky +'172209' = { + table2Version = 172 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky +'172210' = { + table2Version = 172 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky +'172211' = { + table2Version = 172 ; + indicatorOfParameter = 211 ; + } +#Solar insolation +'172212' = { + table2Version = 172 ; + indicatorOfParameter = 212 ; + } +#Total precipitation +'172228' = { + table2Version = 172 ; + indicatorOfParameter = 228 ; + } +#Convective snowfall +'172239' = { + table2Version = 172 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall +'172240' = { + table2Version = 172 ; + indicatorOfParameter = 240 ; + } +#Indicates a missing value +'172255' = { + table2Version = 172 ; + indicatorOfParameter = 255 ; + } +#Snow evaporation anomaly +'173044' = { + table2Version = 173 ; + indicatorOfParameter = 44 ; + } +#Snowmelt anomaly +'173045' = { + table2Version = 173 ; + indicatorOfParameter = 45 ; + } +#Magnitude of surface stress anomaly +'173048' = { + table2Version = 173 ; + indicatorOfParameter = 48 ; + } +#Large-scale precipitation fraction anomaly +'173050' = { + table2Version = 173 ; + indicatorOfParameter = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'173142' = { + table2Version = 173 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation anomaly +'173143' = { + table2Version = 173 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) anomalous rate of accumulation +'173144' = { + table2Version = 173 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation anomaly +'173145' = { + table2Version = 173 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux anomaly +'173146' = { + table2Version = 173 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux anomaly +'173147' = { + table2Version = 173 ; + indicatorOfParameter = 147 ; + } +#Surface net radiation anomaly +'173149' = { + table2Version = 173 ; + indicatorOfParameter = 149 ; + } +#Short-wave heating rate anomaly +'173153' = { + table2Version = 173 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate anomaly +'173154' = { + table2Version = 173 ; + indicatorOfParameter = 154 ; + } +#Surface solar radiation downwards anomaly +'173169' = { + table2Version = 173 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards anomaly +'173175' = { + table2Version = 173 ; + indicatorOfParameter = 175 ; + } +#Surface solar radiation anomaly +'173176' = { + table2Version = 173 ; + indicatorOfParameter = 176 ; + } +#Surface thermal radiation anomaly +'173177' = { + table2Version = 173 ; + indicatorOfParameter = 177 ; + } +#Top solar radiation anomaly +'173178' = { + table2Version = 173 ; + indicatorOfParameter = 178 ; + } +#Top thermal radiation anomaly +'173179' = { + table2Version = 173 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress anomaly +'173180' = { + table2Version = 173 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress anomaly +'173181' = { + table2Version = 173 ; + indicatorOfParameter = 181 ; + } +#Evaporation anomaly +'173182' = { + table2Version = 173 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration anomalous rate of accumulation +'173189' = { + table2Version = 173 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress anomaly +'173195' = { + table2Version = 173 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress anomaly +'173196' = { + table2Version = 173 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation anomaly +'173197' = { + table2Version = 173 ; + indicatorOfParameter = 197 ; + } +#Runoff anomaly +'173205' = { + table2Version = 173 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky anomaly +'173208' = { + table2Version = 173 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky anomaly +'173209' = { + table2Version = 173 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky anomaly +'173210' = { + table2Version = 173 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'173211' = { + table2Version = 173 ; + indicatorOfParameter = 211 ; + } +#Solar insolation anomaly +'173212' = { + table2Version = 173 ; + indicatorOfParameter = 212 ; + } +#Total precipitation anomalous rate of accumulation +'173228' = { + table2Version = 173 ; + indicatorOfParameter = 228 ; + } +#Convective snowfall anomaly +'173239' = { + table2Version = 173 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall anomaly +'173240' = { + table2Version = 173 ; + indicatorOfParameter = 240 ; + } +#Indicates a missing value +'173255' = { + table2Version = 173 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'174006' = { + table2Version = 174 ; + indicatorOfParameter = 6 ; + } +#Surface runoff +'174008' = { + table2Version = 174 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff +'174009' = { + table2Version = 174 ; + indicatorOfParameter = 9 ; + } +#Fraction of sea-ice in sea +'174031' = { + table2Version = 174 ; + indicatorOfParameter = 31 ; + } +#Open-sea surface temperature +'174034' = { + table2Version = 174 ; + indicatorOfParameter = 34 ; + } +#Volumetric soil water layer 1 +'174039' = { + table2Version = 174 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'174040' = { + table2Version = 174 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'174041' = { + table2Version = 174 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'174042' = { + table2Version = 174 ; + indicatorOfParameter = 42 ; + } +#10 metre wind gust in the last 24 hours +'174049' = { + table2Version = 174 ; + indicatorOfParameter = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'174055' = { + table2Version = 174 ; + indicatorOfParameter = 55 ; + } +#Net primary productivity +'174083' = { + table2Version = 174 ; + indicatorOfParameter = 83 ; + } +#10m U wind over land +'174085' = { + table2Version = 174 ; + indicatorOfParameter = 85 ; + } +#10m V wind over land +'174086' = { + table2Version = 174 ; + indicatorOfParameter = 86 ; + } +#1.5m temperature over land +'174087' = { + table2Version = 174 ; + indicatorOfParameter = 87 ; + } +#1.5m dewpoint temperature over land +'174088' = { + table2Version = 174 ; + indicatorOfParameter = 88 ; + } +#Top incoming solar radiation +'174089' = { + table2Version = 174 ; + indicatorOfParameter = 89 ; + } +#Top outgoing solar radiation +'174090' = { + table2Version = 174 ; + indicatorOfParameter = 90 ; + } +#Mean sea surface temperature +'174094' = { + table2Version = 174 ; + indicatorOfParameter = 94 ; + } +#1.5m specific humidity +'174095' = { + table2Version = 174 ; + indicatorOfParameter = 95 ; + } +#Sea-ice thickness +'174098' = { + table2Version = 174 ; + indicatorOfParameter = 98 ; + } +#Liquid water potential temperature +'174099' = { + table2Version = 174 ; + indicatorOfParameter = 99 ; + } +#Ocean ice concentration +'174110' = { + table2Version = 174 ; + indicatorOfParameter = 110 ; + } +#Ocean mean ice depth +'174111' = { + table2Version = 174 ; + indicatorOfParameter = 111 ; + } +#Soil temperature layer 1 +'174139' = { + table2Version = 174 ; + indicatorOfParameter = 139 ; + } +#Average potential temperature in upper 293.4m +'174164' = { + table2Version = 174 ; + indicatorOfParameter = 164 ; + } +#1.5m temperature +'174167' = { + table2Version = 174 ; + indicatorOfParameter = 167 ; + } +#1.5m dewpoint temperature +'174168' = { + table2Version = 174 ; + indicatorOfParameter = 168 ; + } +#Soil temperature layer 2 +'174170' = { + table2Version = 174 ; + indicatorOfParameter = 170 ; + } +#Average salinity in upper 293.4m +'174175' = { + table2Version = 174 ; + indicatorOfParameter = 175 ; + } +#Soil temperature layer 3 +'174183' = { + table2Version = 174 ; + indicatorOfParameter = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'174201' = { + table2Version = 174 ; + indicatorOfParameter = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'174202' = { + table2Version = 174 ; + indicatorOfParameter = 202 ; + } +#Soil temperature layer 4 +'174236' = { + table2Version = 174 ; + indicatorOfParameter = 236 ; + } +#Indicates a missing value +'174255' = { + table2Version = 174 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'175006' = { + table2Version = 175 ; + indicatorOfParameter = 6 ; + } +#Fraction of sea-ice in sea +'175031' = { + table2Version = 175 ; + indicatorOfParameter = 31 ; + } +#Open-sea surface temperature +'175034' = { + table2Version = 175 ; + indicatorOfParameter = 34 ; + } +#Volumetric soil water layer 1 +'175039' = { + table2Version = 175 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'175040' = { + table2Version = 175 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'175041' = { + table2Version = 175 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'175042' = { + table2Version = 175 ; + indicatorOfParameter = 42 ; + } +#10m wind gust in the last 24 hours +'175049' = { + table2Version = 175 ; + indicatorOfParameter = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'175055' = { + table2Version = 175 ; + indicatorOfParameter = 55 ; + } +#Net primary productivity +'175083' = { + table2Version = 175 ; + indicatorOfParameter = 83 ; + } +#10m U wind over land +'175085' = { + table2Version = 175 ; + indicatorOfParameter = 85 ; + } +#10m V wind over land +'175086' = { + table2Version = 175 ; + indicatorOfParameter = 86 ; + } +#1.5m temperature over land +'175087' = { + table2Version = 175 ; + indicatorOfParameter = 87 ; + } +#1.5m dewpoint temperature over land +'175088' = { + table2Version = 175 ; + indicatorOfParameter = 88 ; + } +#Top incoming solar radiation +'175089' = { + table2Version = 175 ; + indicatorOfParameter = 89 ; + } +#Top outgoing solar radiation +'175090' = { + table2Version = 175 ; + indicatorOfParameter = 90 ; + } +#Ocean ice concentration +'175110' = { + table2Version = 175 ; + indicatorOfParameter = 110 ; + } +#Ocean mean ice depth +'175111' = { + table2Version = 175 ; + indicatorOfParameter = 111 ; + } +#Soil temperature layer 1 +'175139' = { + table2Version = 175 ; + indicatorOfParameter = 139 ; + } +#Average potential temperature in upper 293.4m +'175164' = { + table2Version = 175 ; + indicatorOfParameter = 164 ; + } +#1.5m temperature +'175167' = { + table2Version = 175 ; + indicatorOfParameter = 167 ; + } +#1.5m dewpoint temperature +'175168' = { + table2Version = 175 ; + indicatorOfParameter = 168 ; + } +#Soil temperature layer 2 +'175170' = { + table2Version = 175 ; + indicatorOfParameter = 170 ; + } +#Average salinity in upper 293.4m +'175175' = { + table2Version = 175 ; + indicatorOfParameter = 175 ; + } +#Soil temperature layer 3 +'175183' = { + table2Version = 175 ; + indicatorOfParameter = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'175201' = { + table2Version = 175 ; + indicatorOfParameter = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'175202' = { + table2Version = 175 ; + indicatorOfParameter = 202 ; + } +#Soil temperature layer 4 +'175236' = { + table2Version = 175 ; + indicatorOfParameter = 236 ; + } +#Indicates a missing value +'175255' = { + table2Version = 175 ; + indicatorOfParameter = 255 ; + } +#Total soil wetness +'180149' = { + table2Version = 180 ; + indicatorOfParameter = 149 ; + } +#Surface net solar radiation +'180176' = { + table2Version = 180 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation +'180177' = { + table2Version = 180 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation +'180178' = { + table2Version = 180 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation +'180179' = { + table2Version = 180 ; + indicatorOfParameter = 179 ; + } +#Snow depth +'190141' = { + table2Version = 190 ; + indicatorOfParameter = 141 ; + } +#Field capacity +'190170' = { + table2Version = 190 ; + indicatorOfParameter = 170 ; + } +#Wilting point +'190171' = { + table2Version = 190 ; + indicatorOfParameter = 171 ; + } +#Roughness length +'190173' = { + table2Version = 190 ; + indicatorOfParameter = 173 ; + } +#Total soil moisture +'190229' = { + table2Version = 190 ; + indicatorOfParameter = 229 ; + } +#2 metre dewpoint temperature difference +'200168' = { + table2Version = 200 ; + indicatorOfParameter = 168 ; + } +#downward shortwave radiant flux density +'201001' = { + table2Version = 201 ; + indicatorOfParameter = 1 ; + } +#upward shortwave radiant flux density +'201002' = { + table2Version = 201 ; + indicatorOfParameter = 2 ; + } +#downward longwave radiant flux density +'201003' = { + table2Version = 201 ; + indicatorOfParameter = 3 ; + } +#upward longwave radiant flux density +'201004' = { + table2Version = 201 ; + indicatorOfParameter = 4 ; + } +#downwd photosynthetic active radiant flux density +'201005' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + } +#net shortwave flux +'201006' = { + table2Version = 201 ; + indicatorOfParameter = 6 ; + } +#net longwave flux +'201007' = { + table2Version = 201 ; + indicatorOfParameter = 7 ; + } +#total net radiative flux density +'201008' = { + table2Version = 201 ; + indicatorOfParameter = 8 ; + } +#downw shortw radiant flux density, cloudfree part +'201009' = { + table2Version = 201 ; + indicatorOfParameter = 9 ; + } +#upw shortw radiant flux density, cloudy part +'201010' = { + table2Version = 201 ; + indicatorOfParameter = 10 ; + } +#downw longw radiant flux density, cloudfree part +'201011' = { + table2Version = 201 ; + indicatorOfParameter = 11 ; + } +#upw longw radiant flux density, cloudy part +'201012' = { + table2Version = 201 ; + indicatorOfParameter = 12 ; + } +#shortwave radiative heating rate +'201013' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + } +#longwave radiative heating rate +'201014' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + } +#total radiative heating rate +'201015' = { + table2Version = 201 ; + indicatorOfParameter = 15 ; + } +#soil heat flux, surface +'201016' = { + table2Version = 201 ; + indicatorOfParameter = 16 ; + } +#soil heat flux, bottom of layer +'201017' = { + table2Version = 201 ; + indicatorOfParameter = 17 ; + } +#fractional cloud cover +'201029' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + } +#cloud cover, grid scale +'201030' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + } +#specific cloud water content +'201031' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + } +#cloud water content, grid scale, vert integrated +'201032' = { + table2Version = 201 ; + indicatorOfParameter = 32 ; + } +#specific cloud ice content, grid scale +'201033' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + } +#cloud ice content, grid scale, vert integrated +'201034' = { + table2Version = 201 ; + indicatorOfParameter = 34 ; + } +#specific rainwater content, grid scale +'201035' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + } +#specific snow content, grid scale +'201036' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + } +#specific rainwater content, gs, vert. integrated +'201037' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + } +#specific snow content, gs, vert. integrated +'201038' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + } +#total column water +'201041' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + } +#vert. integral of divergence of tot. water content +'201042' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + } +#cloud covers CH_CM_CL (000...888) +'201050' = { + table2Version = 201 ; + indicatorOfParameter = 50 ; + } +#cloud cover CH (0..8) +'201051' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'201052' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'201053' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#total cloud cover (0..8) +'201054' = { + table2Version = 201 ; + indicatorOfParameter = 54 ; + } +#fog (0..8) +'201055' = { + table2Version = 201 ; + indicatorOfParameter = 55 ; + } +#fog +'201056' = { + table2Version = 201 ; + indicatorOfParameter = 56 ; + } +#cloud cover, convective cirrus +'201060' = { + table2Version = 201 ; + indicatorOfParameter = 60 ; + } +#specific cloud water content, convective clouds +'201061' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + } +#cloud water content, conv clouds, vert integrated +'201062' = { + table2Version = 201 ; + indicatorOfParameter = 62 ; + } +#specific cloud ice content, convective clouds +'201063' = { + table2Version = 201 ; + indicatorOfParameter = 63 ; + } +#cloud ice content, conv clouds, vert integrated +'201064' = { + table2Version = 201 ; + indicatorOfParameter = 64 ; + } +#convective mass flux +'201065' = { + table2Version = 201 ; + indicatorOfParameter = 65 ; + } +#Updraft velocity, convection +'201066' = { + table2Version = 201 ; + indicatorOfParameter = 66 ; + } +#entrainment parameter, convection +'201067' = { + table2Version = 201 ; + indicatorOfParameter = 67 ; + } +#cloud base, convective clouds (above msl) +'201068' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + } +#cloud top, convective clouds (above msl) +'201069' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + } +#convective layers (00...77) (BKE) +'201070' = { + table2Version = 201 ; + indicatorOfParameter = 70 ; + } +#KO-index +'201071' = { + table2Version = 201 ; + indicatorOfParameter = 71 ; + } +#convection base index +'201072' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + } +#convection top index +'201073' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + } +#convective temperature tendency +'201074' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + } +#convective tendency of specific humidity +'201075' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + } +#convective tendency of total heat +'201076' = { + table2Version = 201 ; + indicatorOfParameter = 76 ; + } +#convective tendency of total water +'201077' = { + table2Version = 201 ; + indicatorOfParameter = 77 ; + } +#convective momentum tendency (X-component) +'201078' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + } +#convective momentum tendency (Y-component) +'201079' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + } +#convective vorticity tendency +'201080' = { + table2Version = 201 ; + indicatorOfParameter = 80 ; + } +#convective divergence tendency +'201081' = { + table2Version = 201 ; + indicatorOfParameter = 81 ; + } +#top of dry convection (above msl) +'201082' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + } +#dry convection top index +'201083' = { + table2Version = 201 ; + indicatorOfParameter = 83 ; + } +#height of 0 degree Celsius isotherm above msl +'201084' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + } +#height of snow-fall limit +'201085' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + } +#spec. content of precip. particles +'201099' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + } +#surface precipitation rate, rain, grid scale +'201100' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + } +#surface precipitation rate, snow, grid scale +'201101' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + } +#surface precipitation amount, rain, grid scale +'201102' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + } +#surface precipitation rate, rain, convective +'201111' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + } +#surface precipitation rate, snow, convective +'201112' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + } +#surface precipitation amount, rain, convective +'201113' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + } +#deviation of pressure from reference value +'201139' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + } +#coefficient of horizontal diffusion +'201150' = { + table2Version = 201 ; + indicatorOfParameter = 150 ; + } +#Maximum wind velocity +'201187' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + } +#water content of interception store +'201200' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + } +#snow temperature +'201203' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + } +#ice surface temperature +'201215' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + } +#convective available potential energy +'201241' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + } +#Indicates a missing value +'201255' = { + table2Version = 201 ; + indicatorOfParameter = 255 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'210001' = { + table2Version = 210 ; + indicatorOfParameter = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'210002' = { + table2Version = 210 ; + indicatorOfParameter = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'210003' = { + table2Version = 210 ; + indicatorOfParameter = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'210004' = { + table2Version = 210 ; + indicatorOfParameter = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'210005' = { + table2Version = 210 ; + indicatorOfParameter = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'210006' = { + table2Version = 210 ; + indicatorOfParameter = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'210007' = { + table2Version = 210 ; + indicatorOfParameter = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'210008' = { + table2Version = 210 ; + indicatorOfParameter = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'210009' = { + table2Version = 210 ; + indicatorOfParameter = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'210010' = { + table2Version = 210 ; + indicatorOfParameter = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'210011' = { + table2Version = 210 ; + indicatorOfParameter = 11 ; + } +#Aerosol type 12 mixing ratio +'210012' = { + table2Version = 210 ; + indicatorOfParameter = 12 ; + } +#Aerosol type 1 source/gain accumulated +'210016' = { + table2Version = 210 ; + indicatorOfParameter = 16 ; + } +#Aerosol type 2 source/gain accumulated +'210017' = { + table2Version = 210 ; + indicatorOfParameter = 17 ; + } +#Aerosol type 3 source/gain accumulated +'210018' = { + table2Version = 210 ; + indicatorOfParameter = 18 ; + } +#Aerosol type 4 source/gain accumulated +'210019' = { + table2Version = 210 ; + indicatorOfParameter = 19 ; + } +#Aerosol type 5 source/gain accumulated +'210020' = { + table2Version = 210 ; + indicatorOfParameter = 20 ; + } +#Aerosol type 6 source/gain accumulated +'210021' = { + table2Version = 210 ; + indicatorOfParameter = 21 ; + } +#Aerosol type 7 source/gain accumulated +'210022' = { + table2Version = 210 ; + indicatorOfParameter = 22 ; + } +#Aerosol type 8 source/gain accumulated +'210023' = { + table2Version = 210 ; + indicatorOfParameter = 23 ; + } +#Aerosol type 9 source/gain accumulated +'210024' = { + table2Version = 210 ; + indicatorOfParameter = 24 ; + } +#Aerosol type 10 source/gain accumulated +'210025' = { + table2Version = 210 ; + indicatorOfParameter = 25 ; + } +#Aerosol type 11 source/gain accumulated +'210026' = { + table2Version = 210 ; + indicatorOfParameter = 26 ; + } +#Aerosol type 12 source/gain accumulated +'210027' = { + table2Version = 210 ; + indicatorOfParameter = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'210031' = { + table2Version = 210 ; + indicatorOfParameter = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'210032' = { + table2Version = 210 ; + indicatorOfParameter = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'210033' = { + table2Version = 210 ; + indicatorOfParameter = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'210034' = { + table2Version = 210 ; + indicatorOfParameter = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'210035' = { + table2Version = 210 ; + indicatorOfParameter = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'210036' = { + table2Version = 210 ; + indicatorOfParameter = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'210037' = { + table2Version = 210 ; + indicatorOfParameter = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'210038' = { + table2Version = 210 ; + indicatorOfParameter = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'210039' = { + table2Version = 210 ; + indicatorOfParameter = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'210040' = { + table2Version = 210 ; + indicatorOfParameter = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'210041' = { + table2Version = 210 ; + indicatorOfParameter = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'210042' = { + table2Version = 210 ; + indicatorOfParameter = 42 ; + } +#Aerosol precursor mixing ratio +'210046' = { + table2Version = 210 ; + indicatorOfParameter = 46 ; + } +#Aerosol small mode mixing ratio +'210047' = { + table2Version = 210 ; + indicatorOfParameter = 47 ; + } +#Aerosol large mode mixing ratio +'210048' = { + table2Version = 210 ; + indicatorOfParameter = 48 ; + } +#Aerosol precursor optical depth +'210049' = { + table2Version = 210 ; + indicatorOfParameter = 49 ; + } +#Aerosol small mode optical depth +'210050' = { + table2Version = 210 ; + indicatorOfParameter = 50 ; + } +#Aerosol large mode optical depth +'210051' = { + table2Version = 210 ; + indicatorOfParameter = 51 ; + } +#Dust emission potential +'210052' = { + table2Version = 210 ; + indicatorOfParameter = 52 ; + } +#Lifting threshold speed +'210053' = { + table2Version = 210 ; + indicatorOfParameter = 53 ; + } +#Soil clay content +'210054' = { + table2Version = 210 ; + indicatorOfParameter = 54 ; + } +#Carbon Dioxide +'210061' = { + table2Version = 210 ; + indicatorOfParameter = 61 ; + } +#Methane +'210062' = { + table2Version = 210 ; + indicatorOfParameter = 62 ; + } +#Nitrous oxide +'210063' = { + table2Version = 210 ; + indicatorOfParameter = 63 ; + } +#Total column Carbon Dioxide +'210064' = { + table2Version = 210 ; + indicatorOfParameter = 64 ; + } +#Total column Methane +'210065' = { + table2Version = 210 ; + indicatorOfParameter = 65 ; + } +#Total column Nitrous oxide +'210066' = { + table2Version = 210 ; + indicatorOfParameter = 66 ; + } +#Ocean flux of Carbon Dioxide +'210067' = { + table2Version = 210 ; + indicatorOfParameter = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'210068' = { + table2Version = 210 ; + indicatorOfParameter = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'210069' = { + table2Version = 210 ; + indicatorOfParameter = 69 ; + } +#Methane Surface Fluxes +'210070' = { + table2Version = 210 ; + indicatorOfParameter = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'210071' = { + table2Version = 210 ; + indicatorOfParameter = 71 ; + } +#Wildfire flux of Carbon Dioxide +'210080' = { + table2Version = 210 ; + indicatorOfParameter = 80 ; + } +#Wildfire flux of Carbon Monoxide +'210081' = { + table2Version = 210 ; + indicatorOfParameter = 81 ; + } +#Wildfire flux of Methane +'210082' = { + table2Version = 210 ; + indicatorOfParameter = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'210083' = { + table2Version = 210 ; + indicatorOfParameter = 83 ; + } +#Wildfire flux of Hydrogen +'210084' = { + table2Version = 210 ; + indicatorOfParameter = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'210085' = { + table2Version = 210 ; + indicatorOfParameter = 85 ; + } +#Wildfire flux of Nitrous Oxide +'210086' = { + table2Version = 210 ; + indicatorOfParameter = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'210087' = { + table2Version = 210 ; + indicatorOfParameter = 87 ; + } +#Wildfire flux of Total Particulate Matter +'210088' = { + table2Version = 210 ; + indicatorOfParameter = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'210089' = { + table2Version = 210 ; + indicatorOfParameter = 89 ; + } +#Wildfire flux of Organic Carbon +'210090' = { + table2Version = 210 ; + indicatorOfParameter = 90 ; + } +#Wildfire flux of Black Carbon +'210091' = { + table2Version = 210 ; + indicatorOfParameter = 91 ; + } +#Wildfire overall flux of burnt Carbon +'210092' = { + table2Version = 210 ; + indicatorOfParameter = 92 ; + } +#Wildfire fraction of C4 plants +'210093' = { + table2Version = 210 ; + indicatorOfParameter = 93 ; + } +#Wildfire vegetation map index +'210094' = { + table2Version = 210 ; + indicatorOfParameter = 94 ; + } +#Wildfire Combustion Completeness +'210095' = { + table2Version = 210 ; + indicatorOfParameter = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'210096' = { + table2Version = 210 ; + indicatorOfParameter = 96 ; + } +#Wildfire fraction of area observed +'210097' = { + table2Version = 210 ; + indicatorOfParameter = 97 ; + } +#Wildfire observed area +'210098' = { + table2Version = 210 ; + indicatorOfParameter = 98 ; + } +#Wildfire radiative power +'210099' = { + table2Version = 210 ; + indicatorOfParameter = 99 ; + } +#Wildfire combustion rate +'210100' = { + table2Version = 210 ; + indicatorOfParameter = 100 ; + } +#Nitrogen dioxide +'210121' = { + table2Version = 210 ; + indicatorOfParameter = 121 ; + } +#Sulphur dioxide +'210122' = { + table2Version = 210 ; + indicatorOfParameter = 122 ; + } +#Carbon monoxide +'210123' = { + table2Version = 210 ; + indicatorOfParameter = 123 ; + } +#Formaldehyde +'210124' = { + table2Version = 210 ; + indicatorOfParameter = 124 ; + } +#Total column Nitrogen dioxide +'210125' = { + table2Version = 210 ; + indicatorOfParameter = 125 ; + } +#Total column Sulphur dioxide +'210126' = { + table2Version = 210 ; + indicatorOfParameter = 126 ; + } +#Total column Carbon monoxide +'210127' = { + table2Version = 210 ; + indicatorOfParameter = 127 ; + } +#Total column Formaldehyde +'210128' = { + table2Version = 210 ; + indicatorOfParameter = 128 ; + } +#Nitrogen Oxides +'210129' = { + table2Version = 210 ; + indicatorOfParameter = 129 ; + } +#Total Column Nitrogen Oxides +'210130' = { + table2Version = 210 ; + indicatorOfParameter = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'210131' = { + table2Version = 210 ; + indicatorOfParameter = 131 ; + } +#Total column GRG tracer 1 +'210132' = { + table2Version = 210 ; + indicatorOfParameter = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'210133' = { + table2Version = 210 ; + indicatorOfParameter = 133 ; + } +#Total column GRG tracer 2 +'210134' = { + table2Version = 210 ; + indicatorOfParameter = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'210135' = { + table2Version = 210 ; + indicatorOfParameter = 135 ; + } +#Total column GRG tracer 3 +'210136' = { + table2Version = 210 ; + indicatorOfParameter = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'210137' = { + table2Version = 210 ; + indicatorOfParameter = 137 ; + } +#Total column GRG tracer 4 +'210138' = { + table2Version = 210 ; + indicatorOfParameter = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'210139' = { + table2Version = 210 ; + indicatorOfParameter = 139 ; + } +#Total column GRG tracer 5 +'210140' = { + table2Version = 210 ; + indicatorOfParameter = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'210141' = { + table2Version = 210 ; + indicatorOfParameter = 141 ; + } +#Total column GRG tracer 6 +'210142' = { + table2Version = 210 ; + indicatorOfParameter = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'210143' = { + table2Version = 210 ; + indicatorOfParameter = 143 ; + } +#Total column GRG tracer 7 +'210144' = { + table2Version = 210 ; + indicatorOfParameter = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'210145' = { + table2Version = 210 ; + indicatorOfParameter = 145 ; + } +#Total column GRG tracer 8 +'210146' = { + table2Version = 210 ; + indicatorOfParameter = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'210147' = { + table2Version = 210 ; + indicatorOfParameter = 147 ; + } +#Total column GRG tracer 9 +'210148' = { + table2Version = 210 ; + indicatorOfParameter = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'210149' = { + table2Version = 210 ; + indicatorOfParameter = 149 ; + } +#Total column GRG tracer 10 +'210150' = { + table2Version = 210 ; + indicatorOfParameter = 150 ; + } +#Surface flux Nitrogen oxides +'210151' = { + table2Version = 210 ; + indicatorOfParameter = 151 ; + } +#Surface flux Nitrogen dioxide +'210152' = { + table2Version = 210 ; + indicatorOfParameter = 152 ; + } +#Surface flux Sulphur dioxide +'210153' = { + table2Version = 210 ; + indicatorOfParameter = 153 ; + } +#Surface flux Carbon monoxide +'210154' = { + table2Version = 210 ; + indicatorOfParameter = 154 ; + } +#Surface flux Formaldehyde +'210155' = { + table2Version = 210 ; + indicatorOfParameter = 155 ; + } +#Surface flux GEMS Ozone +'210156' = { + table2Version = 210 ; + indicatorOfParameter = 156 ; + } +#Surface flux reactive tracer 1 +'210157' = { + table2Version = 210 ; + indicatorOfParameter = 157 ; + } +#Surface flux reactive tracer 2 +'210158' = { + table2Version = 210 ; + indicatorOfParameter = 158 ; + } +#Surface flux reactive tracer 3 +'210159' = { + table2Version = 210 ; + indicatorOfParameter = 159 ; + } +#Surface flux reactive tracer 4 +'210160' = { + table2Version = 210 ; + indicatorOfParameter = 160 ; + } +#Surface flux reactive tracer 5 +'210161' = { + table2Version = 210 ; + indicatorOfParameter = 161 ; + } +#Surface flux reactive tracer 6 +'210162' = { + table2Version = 210 ; + indicatorOfParameter = 162 ; + } +#Surface flux reactive tracer 7 +'210163' = { + table2Version = 210 ; + indicatorOfParameter = 163 ; + } +#Surface flux reactive tracer 8 +'210164' = { + table2Version = 210 ; + indicatorOfParameter = 164 ; + } +#Surface flux reactive tracer 9 +'210165' = { + table2Version = 210 ; + indicatorOfParameter = 165 ; + } +#Surface flux reactive tracer 10 +'210166' = { + table2Version = 210 ; + indicatorOfParameter = 166 ; + } +#Radon +'210181' = { + table2Version = 210 ; + indicatorOfParameter = 181 ; + } +#Sulphur Hexafluoride +'210182' = { + table2Version = 210 ; + indicatorOfParameter = 182 ; + } +#Total column Radon +'210183' = { + table2Version = 210 ; + indicatorOfParameter = 183 ; + } +#Total column Sulphur Hexafluoride +'210184' = { + table2Version = 210 ; + indicatorOfParameter = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'210185' = { + table2Version = 210 ; + indicatorOfParameter = 185 ; + } +#GEMS Ozone +'210203' = { + table2Version = 210 ; + indicatorOfParameter = 203 ; + } +#GEMS Total column ozone +'210206' = { + table2Version = 210 ; + indicatorOfParameter = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'210207' = { + table2Version = 210 ; + indicatorOfParameter = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'210208' = { + table2Version = 210 ; + indicatorOfParameter = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'210209' = { + table2Version = 210 ; + indicatorOfParameter = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'210210' = { + table2Version = 210 ; + indicatorOfParameter = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'210211' = { + table2Version = 210 ; + indicatorOfParameter = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'210212' = { + table2Version = 210 ; + indicatorOfParameter = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'210213' = { + table2Version = 210 ; + indicatorOfParameter = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'210214' = { + table2Version = 210 ; + indicatorOfParameter = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'210215' = { + table2Version = 210 ; + indicatorOfParameter = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'210216' = { + table2Version = 210 ; + indicatorOfParameter = 216 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'211001' = { + table2Version = 211 ; + indicatorOfParameter = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'211002' = { + table2Version = 211 ; + indicatorOfParameter = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'211003' = { + table2Version = 211 ; + indicatorOfParameter = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'211004' = { + table2Version = 211 ; + indicatorOfParameter = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'211005' = { + table2Version = 211 ; + indicatorOfParameter = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'211006' = { + table2Version = 211 ; + indicatorOfParameter = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'211007' = { + table2Version = 211 ; + indicatorOfParameter = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'211008' = { + table2Version = 211 ; + indicatorOfParameter = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'211009' = { + table2Version = 211 ; + indicatorOfParameter = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'211010' = { + table2Version = 211 ; + indicatorOfParameter = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'211011' = { + table2Version = 211 ; + indicatorOfParameter = 11 ; + } +#Aerosol type 12 mixing ratio +'211012' = { + table2Version = 211 ; + indicatorOfParameter = 12 ; + } +#Aerosol type 1 source/gain accumulated +'211016' = { + table2Version = 211 ; + indicatorOfParameter = 16 ; + } +#Aerosol type 2 source/gain accumulated +'211017' = { + table2Version = 211 ; + indicatorOfParameter = 17 ; + } +#Aerosol type 3 source/gain accumulated +'211018' = { + table2Version = 211 ; + indicatorOfParameter = 18 ; + } +#Aerosol type 4 source/gain accumulated +'211019' = { + table2Version = 211 ; + indicatorOfParameter = 19 ; + } +#Aerosol type 5 source/gain accumulated +'211020' = { + table2Version = 211 ; + indicatorOfParameter = 20 ; + } +#Aerosol type 6 source/gain accumulated +'211021' = { + table2Version = 211 ; + indicatorOfParameter = 21 ; + } +#Aerosol type 7 source/gain accumulated +'211022' = { + table2Version = 211 ; + indicatorOfParameter = 22 ; + } +#Aerosol type 8 source/gain accumulated +'211023' = { + table2Version = 211 ; + indicatorOfParameter = 23 ; + } +#Aerosol type 9 source/gain accumulated +'211024' = { + table2Version = 211 ; + indicatorOfParameter = 24 ; + } +#Aerosol type 10 source/gain accumulated +'211025' = { + table2Version = 211 ; + indicatorOfParameter = 25 ; + } +#Aerosol type 11 source/gain accumulated +'211026' = { + table2Version = 211 ; + indicatorOfParameter = 26 ; + } +#Aerosol type 12 source/gain accumulated +'211027' = { + table2Version = 211 ; + indicatorOfParameter = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'211031' = { + table2Version = 211 ; + indicatorOfParameter = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'211032' = { + table2Version = 211 ; + indicatorOfParameter = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'211033' = { + table2Version = 211 ; + indicatorOfParameter = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'211034' = { + table2Version = 211 ; + indicatorOfParameter = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'211035' = { + table2Version = 211 ; + indicatorOfParameter = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'211036' = { + table2Version = 211 ; + indicatorOfParameter = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'211037' = { + table2Version = 211 ; + indicatorOfParameter = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'211038' = { + table2Version = 211 ; + indicatorOfParameter = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'211039' = { + table2Version = 211 ; + indicatorOfParameter = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'211040' = { + table2Version = 211 ; + indicatorOfParameter = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'211041' = { + table2Version = 211 ; + indicatorOfParameter = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'211042' = { + table2Version = 211 ; + indicatorOfParameter = 42 ; + } +#Aerosol precursor mixing ratio +'211046' = { + table2Version = 211 ; + indicatorOfParameter = 46 ; + } +#Aerosol small mode mixing ratio +'211047' = { + table2Version = 211 ; + indicatorOfParameter = 47 ; + } +#Aerosol large mode mixing ratio +'211048' = { + table2Version = 211 ; + indicatorOfParameter = 48 ; + } +#Aerosol precursor optical depth +'211049' = { + table2Version = 211 ; + indicatorOfParameter = 49 ; + } +#Aerosol small mode optical depth +'211050' = { + table2Version = 211 ; + indicatorOfParameter = 50 ; + } +#Aerosol large mode optical depth +'211051' = { + table2Version = 211 ; + indicatorOfParameter = 51 ; + } +#Dust emission potential +'211052' = { + table2Version = 211 ; + indicatorOfParameter = 52 ; + } +#Lifting threshold speed +'211053' = { + table2Version = 211 ; + indicatorOfParameter = 53 ; + } +#Soil clay content +'211054' = { + table2Version = 211 ; + indicatorOfParameter = 54 ; + } +#Carbon Dioxide +'211061' = { + table2Version = 211 ; + indicatorOfParameter = 61 ; + } +#Methane +'211062' = { + table2Version = 211 ; + indicatorOfParameter = 62 ; + } +#Nitrous oxide +'211063' = { + table2Version = 211 ; + indicatorOfParameter = 63 ; + } +#Total column Carbon Dioxide +'211064' = { + table2Version = 211 ; + indicatorOfParameter = 64 ; + } +#Total column Methane +'211065' = { + table2Version = 211 ; + indicatorOfParameter = 65 ; + } +#Total column Nitrous oxide +'211066' = { + table2Version = 211 ; + indicatorOfParameter = 66 ; + } +#Ocean flux of Carbon Dioxide +'211067' = { + table2Version = 211 ; + indicatorOfParameter = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'211068' = { + table2Version = 211 ; + indicatorOfParameter = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'211069' = { + table2Version = 211 ; + indicatorOfParameter = 69 ; + } +#Methane Surface Fluxes +'211070' = { + table2Version = 211 ; + indicatorOfParameter = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'211071' = { + table2Version = 211 ; + indicatorOfParameter = 71 ; + } +#Wildfire flux of Carbon Dioxide +'211080' = { + table2Version = 211 ; + indicatorOfParameter = 80 ; + } +#Wildfire flux of Carbon Monoxide +'211081' = { + table2Version = 211 ; + indicatorOfParameter = 81 ; + } +#Wildfire flux of Methane +'211082' = { + table2Version = 211 ; + indicatorOfParameter = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'211083' = { + table2Version = 211 ; + indicatorOfParameter = 83 ; + } +#Wildfire flux of Hydrogen +'211084' = { + table2Version = 211 ; + indicatorOfParameter = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'211085' = { + table2Version = 211 ; + indicatorOfParameter = 85 ; + } +#Wildfire flux of Nitrous Oxide +'211086' = { + table2Version = 211 ; + indicatorOfParameter = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'211087' = { + table2Version = 211 ; + indicatorOfParameter = 87 ; + } +#Wildfire flux of Total Particulate Matter +'211088' = { + table2Version = 211 ; + indicatorOfParameter = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'211089' = { + table2Version = 211 ; + indicatorOfParameter = 89 ; + } +#Wildfire flux of Organic Carbon +'211090' = { + table2Version = 211 ; + indicatorOfParameter = 90 ; + } +#Wildfire flux of Black Carbon +'211091' = { + table2Version = 211 ; + indicatorOfParameter = 91 ; + } +#Wildfire overall flux of burnt Carbon +'211092' = { + table2Version = 211 ; + indicatorOfParameter = 92 ; + } +#Wildfire fraction of C4 plants +'211093' = { + table2Version = 211 ; + indicatorOfParameter = 93 ; + } +#Wildfire vegetation map index +'211094' = { + table2Version = 211 ; + indicatorOfParameter = 94 ; + } +#Wildfire Combustion Completeness +'211095' = { + table2Version = 211 ; + indicatorOfParameter = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'211096' = { + table2Version = 211 ; + indicatorOfParameter = 96 ; + } +#Wildfire fraction of area observed +'211097' = { + table2Version = 211 ; + indicatorOfParameter = 97 ; + } +#Wildfire observed area +'211098' = { + table2Version = 211 ; + indicatorOfParameter = 98 ; + } +#Wildfire radiative power +'211099' = { + table2Version = 211 ; + indicatorOfParameter = 99 ; + } +#Wildfire combustion rate +'211100' = { + table2Version = 211 ; + indicatorOfParameter = 100 ; + } +#Nitrogen dioxide +'211121' = { + table2Version = 211 ; + indicatorOfParameter = 121 ; + } +#Sulphur dioxide +'211122' = { + table2Version = 211 ; + indicatorOfParameter = 122 ; + } +#Carbon monoxide +'211123' = { + table2Version = 211 ; + indicatorOfParameter = 123 ; + } +#Formaldehyde +'211124' = { + table2Version = 211 ; + indicatorOfParameter = 124 ; + } +#Total column Nitrogen dioxide +'211125' = { + table2Version = 211 ; + indicatorOfParameter = 125 ; + } +#Total column Sulphur dioxide +'211126' = { + table2Version = 211 ; + indicatorOfParameter = 126 ; + } +#Total column Carbon monoxide +'211127' = { + table2Version = 211 ; + indicatorOfParameter = 127 ; + } +#Total column Formaldehyde +'211128' = { + table2Version = 211 ; + indicatorOfParameter = 128 ; + } +#Nitrogen Oxides +'211129' = { + table2Version = 211 ; + indicatorOfParameter = 129 ; + } +#Total Column Nitrogen Oxides +'211130' = { + table2Version = 211 ; + indicatorOfParameter = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'211131' = { + table2Version = 211 ; + indicatorOfParameter = 131 ; + } +#Total column GRG tracer 1 +'211132' = { + table2Version = 211 ; + indicatorOfParameter = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'211133' = { + table2Version = 211 ; + indicatorOfParameter = 133 ; + } +#Total column GRG tracer 2 +'211134' = { + table2Version = 211 ; + indicatorOfParameter = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'211135' = { + table2Version = 211 ; + indicatorOfParameter = 135 ; + } +#Total column GRG tracer 3 +'211136' = { + table2Version = 211 ; + indicatorOfParameter = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'211137' = { + table2Version = 211 ; + indicatorOfParameter = 137 ; + } +#Total column GRG tracer 4 +'211138' = { + table2Version = 211 ; + indicatorOfParameter = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'211139' = { + table2Version = 211 ; + indicatorOfParameter = 139 ; + } +#Total column GRG tracer 5 +'211140' = { + table2Version = 211 ; + indicatorOfParameter = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'211141' = { + table2Version = 211 ; + indicatorOfParameter = 141 ; + } +#Total column GRG tracer 6 +'211142' = { + table2Version = 211 ; + indicatorOfParameter = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'211143' = { + table2Version = 211 ; + indicatorOfParameter = 143 ; + } +#Total column GRG tracer 7 +'211144' = { + table2Version = 211 ; + indicatorOfParameter = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'211145' = { + table2Version = 211 ; + indicatorOfParameter = 145 ; + } +#Total column GRG tracer 8 +'211146' = { + table2Version = 211 ; + indicatorOfParameter = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'211147' = { + table2Version = 211 ; + indicatorOfParameter = 147 ; + } +#Total column GRG tracer 9 +'211148' = { + table2Version = 211 ; + indicatorOfParameter = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'211149' = { + table2Version = 211 ; + indicatorOfParameter = 149 ; + } +#Total column GRG tracer 10 +'211150' = { + table2Version = 211 ; + indicatorOfParameter = 150 ; + } +#Surface flux Nitrogen oxides +'211151' = { + table2Version = 211 ; + indicatorOfParameter = 151 ; + } +#Surface flux Nitrogen dioxide +'211152' = { + table2Version = 211 ; + indicatorOfParameter = 152 ; + } +#Surface flux Sulphur dioxide +'211153' = { + table2Version = 211 ; + indicatorOfParameter = 153 ; + } +#Surface flux Carbon monoxide +'211154' = { + table2Version = 211 ; + indicatorOfParameter = 154 ; + } +#Surface flux Formaldehyde +'211155' = { + table2Version = 211 ; + indicatorOfParameter = 155 ; + } +#Surface flux GEMS Ozone +'211156' = { + table2Version = 211 ; + indicatorOfParameter = 156 ; + } +#Surface flux reactive tracer 1 +'211157' = { + table2Version = 211 ; + indicatorOfParameter = 157 ; + } +#Surface flux reactive tracer 2 +'211158' = { + table2Version = 211 ; + indicatorOfParameter = 158 ; + } +#Surface flux reactive tracer 3 +'211159' = { + table2Version = 211 ; + indicatorOfParameter = 159 ; + } +#Surface flux reactive tracer 4 +'211160' = { + table2Version = 211 ; + indicatorOfParameter = 160 ; + } +#Surface flux reactive tracer 5 +'211161' = { + table2Version = 211 ; + indicatorOfParameter = 161 ; + } +#Surface flux reactive tracer 6 +'211162' = { + table2Version = 211 ; + indicatorOfParameter = 162 ; + } +#Surface flux reactive tracer 7 +'211163' = { + table2Version = 211 ; + indicatorOfParameter = 163 ; + } +#Surface flux reactive tracer 8 +'211164' = { + table2Version = 211 ; + indicatorOfParameter = 164 ; + } +#Surface flux reactive tracer 9 +'211165' = { + table2Version = 211 ; + indicatorOfParameter = 165 ; + } +#Surface flux reactive tracer 10 +'211166' = { + table2Version = 211 ; + indicatorOfParameter = 166 ; + } +#Radon +'211181' = { + table2Version = 211 ; + indicatorOfParameter = 181 ; + } +#Sulphur Hexafluoride +'211182' = { + table2Version = 211 ; + indicatorOfParameter = 182 ; + } +#Total column Radon +'211183' = { + table2Version = 211 ; + indicatorOfParameter = 183 ; + } +#Total column Sulphur Hexafluoride +'211184' = { + table2Version = 211 ; + indicatorOfParameter = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'211185' = { + table2Version = 211 ; + indicatorOfParameter = 185 ; + } +#GEMS Ozone +'211203' = { + table2Version = 211 ; + indicatorOfParameter = 203 ; + } +#GEMS Total column ozone +'211206' = { + table2Version = 211 ; + indicatorOfParameter = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'211207' = { + table2Version = 211 ; + indicatorOfParameter = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'211208' = { + table2Version = 211 ; + indicatorOfParameter = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'211209' = { + table2Version = 211 ; + indicatorOfParameter = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'211210' = { + table2Version = 211 ; + indicatorOfParameter = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'211211' = { + table2Version = 211 ; + indicatorOfParameter = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'211212' = { + table2Version = 211 ; + indicatorOfParameter = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'211213' = { + table2Version = 211 ; + indicatorOfParameter = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'211214' = { + table2Version = 211 ; + indicatorOfParameter = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'211215' = { + table2Version = 211 ; + indicatorOfParameter = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'211216' = { + table2Version = 211 ; + indicatorOfParameter = 216 ; + } +#Total precipitation observation count +'220228' = { + table2Version = 220 ; + indicatorOfParameter = 228 ; + } +#Convective inhibition +'228001' = { + table2Version = 228 ; + indicatorOfParameter = 1 ; + } +#Orography +'228002' = { + table2Version = 228 ; + indicatorOfParameter = 2 ; + } +#Friction velocity +'228003' = { + table2Version = 228 ; + indicatorOfParameter = 3 ; + } +#Mean temperature at 2 metres +'228004' = { + table2Version = 228 ; + indicatorOfParameter = 4 ; + } +#Mean of 10 metre wind speed +'228005' = { + table2Version = 228 ; + indicatorOfParameter = 5 ; + } +#Mean total cloud cover +'228006' = { + table2Version = 228 ; + indicatorOfParameter = 6 ; + } +#Lake depth +'228007' = { + table2Version = 228 ; + indicatorOfParameter = 7 ; + } +#Lake mix-layer temperature +'228008' = { + table2Version = 228 ; + indicatorOfParameter = 8 ; + } +#Lake mix-layer depth +'228009' = { + table2Version = 228 ; + indicatorOfParameter = 9 ; + } +#Lake bottom temperature +'228010' = { + table2Version = 228 ; + indicatorOfParameter = 10 ; + } +#Lake total layer temperature +'228011' = { + table2Version = 228 ; + indicatorOfParameter = 11 ; + } +#Lake shape factor +'228012' = { + table2Version = 228 ; + indicatorOfParameter = 12 ; + } +#Lake ice temperature +'228013' = { + table2Version = 228 ; + indicatorOfParameter = 13 ; + } +#Lake ice depth +'228014' = { + table2Version = 228 ; + indicatorOfParameter = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'228015' = { + table2Version = 228 ; + indicatorOfParameter = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'228016' = { + table2Version = 228 ; + indicatorOfParameter = 16 ; + } +#Duct base height +'228017' = { + table2Version = 228 ; + indicatorOfParameter = 17 ; + } +#Trapping layer base height +'228018' = { + table2Version = 228 ; + indicatorOfParameter = 18 ; + } +#Trapping layer top height +'228019' = { + table2Version = 228 ; + indicatorOfParameter = 19 ; + } +#Soil Moisture +'228039' = { + table2Version = 228 ; + indicatorOfParameter = 39 ; + } +#Neutral wind at 10 m u-component +'228131' = { + table2Version = 228 ; + indicatorOfParameter = 131 ; + } +#Neutral wind at 10 m v-component +'228132' = { + table2Version = 228 ; + indicatorOfParameter = 132 ; + } +#Soil Temperature +'228139' = { + table2Version = 228 ; + indicatorOfParameter = 139 ; + } +#Snow depth water equivalent +'228141' = { + table2Version = 228 ; + indicatorOfParameter = 141 ; + } +#Snow Fall water equivalent +'228144' = { + table2Version = 228 ; + indicatorOfParameter = 144 ; + } +#Total Cloud Cover +'228164' = { + table2Version = 228 ; + indicatorOfParameter = 164 ; + } +#Field capacity +'228170' = { + table2Version = 228 ; + indicatorOfParameter = 170 ; + } +#Wilting point +'228171' = { + table2Version = 228 ; + indicatorOfParameter = 171 ; + } +#Total Precipitation +'228228' = { + table2Version = 228 ; + indicatorOfParameter = 228 ; + } +#Snow evaporation (variable resolution) +'230044' = { + table2Version = 230 ; + indicatorOfParameter = 44 ; + } +#Snowmelt (variable resolution) +'230045' = { + table2Version = 230 ; + indicatorOfParameter = 45 ; + } +#Solar duration (variable resolution) +'230046' = { + table2Version = 230 ; + indicatorOfParameter = 46 ; + } +#Downward UV radiation at the surface (variable resolution) +'230057' = { + table2Version = 230 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface (variable resolution) +'230058' = { + table2Version = 230 ; + indicatorOfParameter = 58 ; + } +#Stratiform precipitation (Large-scale precipitation) (variable resolution) +'230142' = { + table2Version = 230 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation (variable resolution) +'230143' = { + table2Version = 230 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) (variable resolution) +'230144' = { + table2Version = 230 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation (variable resolution) +'230145' = { + table2Version = 230 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux (variable resolution) +'230146' = { + table2Version = 230 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux (variable resolution) +'230147' = { + table2Version = 230 ; + indicatorOfParameter = 147 ; + } +#Surface solar radiation downwards (variable resolution) +'230169' = { + table2Version = 230 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards (variable resolution) +'230175' = { + table2Version = 230 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation (variable resolution) +'230176' = { + table2Version = 230 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation (variable resolution) +'230177' = { + table2Version = 230 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation (variable resolution) +'230178' = { + table2Version = 230 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation (variable resolution) +'230179' = { + table2Version = 230 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress (variable resolution) +'230180' = { + table2Version = 230 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress (variable resolution) +'230181' = { + table2Version = 230 ; + indicatorOfParameter = 181 ; + } +#Evaporation (variable resolution) +'230182' = { + table2Version = 230 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration (variable resolution) +'230189' = { + table2Version = 230 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress (variable resolution) +'230195' = { + table2Version = 230 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress (variable resolution) +'230196' = { + table2Version = 230 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation (variable resolution) +'230197' = { + table2Version = 230 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content (variable resolution) +'230198' = { + table2Version = 230 ; + indicatorOfParameter = 198 ; + } +#Runoff (variable resolution) +'230205' = { + table2Version = 230 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky (variable resolution) +'230208' = { + table2Version = 230 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky (variable resolution) +'230209' = { + table2Version = 230 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky (variable resolution) +'230210' = { + table2Version = 230 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky (variable resolution) +'230211' = { + table2Version = 230 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation (variable resolution) +'230212' = { + table2Version = 230 ; + indicatorOfParameter = 212 ; + } +#Surface temperature significance +'234139' = { + table2Version = 234 ; + indicatorOfParameter = 139 ; + } +#Mean sea level pressure significance +'234151' = { + table2Version = 234 ; + indicatorOfParameter = 151 ; + } +#2 metre temperature significance +'234167' = { + table2Version = 234 ; + indicatorOfParameter = 167 ; + } +#Total precipitation significance +'234228' = { + table2Version = 234 ; + indicatorOfParameter = 228 ; + } +#U-component stokes drift +'140215' = { + table2Version = 140 ; + indicatorOfParameter = 215 ; + } +#V-component stokes drift +'140216' = { + table2Version = 140 ; + indicatorOfParameter = 216 ; + } +#Wildfire radiative power maximum +'210101' = { + table2Version = 210 ; + indicatorOfParameter = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'210102' = { + table2Version = 210 ; + indicatorOfParameter = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'210103' = { + table2Version = 210 ; + indicatorOfParameter = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'210104' = { + table2Version = 210 ; + indicatorOfParameter = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'210105' = { + table2Version = 210 ; + indicatorOfParameter = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'210106' = { + table2Version = 210 ; + indicatorOfParameter = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'210107' = { + table2Version = 210 ; + indicatorOfParameter = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'210108' = { + table2Version = 210 ; + indicatorOfParameter = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'210109' = { + table2Version = 210 ; + indicatorOfParameter = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'210110' = { + table2Version = 210 ; + indicatorOfParameter = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'210111' = { + table2Version = 210 ; + indicatorOfParameter = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'210112' = { + table2Version = 210 ; + indicatorOfParameter = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'210113' = { + table2Version = 210 ; + indicatorOfParameter = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'210114' = { + table2Version = 210 ; + indicatorOfParameter = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'210115' = { + table2Version = 210 ; + indicatorOfParameter = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'210116' = { + table2Version = 210 ; + indicatorOfParameter = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'210117' = { + table2Version = 210 ; + indicatorOfParameter = 117 ; + } +#Wildfire radiative power maximum +'211101' = { + table2Version = 211 ; + indicatorOfParameter = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'211102' = { + table2Version = 211 ; + indicatorOfParameter = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'211103' = { + table2Version = 211 ; + indicatorOfParameter = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'211104' = { + table2Version = 211 ; + indicatorOfParameter = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'211105' = { + table2Version = 211 ; + indicatorOfParameter = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'211106' = { + table2Version = 211 ; + indicatorOfParameter = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'211107' = { + table2Version = 211 ; + indicatorOfParameter = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'211108' = { + table2Version = 211 ; + indicatorOfParameter = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'211109' = { + table2Version = 211 ; + indicatorOfParameter = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'211110' = { + table2Version = 211 ; + indicatorOfParameter = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'211111' = { + table2Version = 211 ; + indicatorOfParameter = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'211112' = { + table2Version = 211 ; + indicatorOfParameter = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'211113' = { + table2Version = 211 ; + indicatorOfParameter = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'211114' = { + table2Version = 211 ; + indicatorOfParameter = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'211115' = { + table2Version = 211 ; + indicatorOfParameter = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'211116' = { + table2Version = 211 ; + indicatorOfParameter = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'211117' = { + table2Version = 211 ; + indicatorOfParameter = 117 ; + } +#V-tendency from non-orographic wave drag +'228134' = { + table2Version = 228 ; + indicatorOfParameter = 134 ; + } +#U-tendency from non-orographic wave drag +'228136' = { + table2Version = 228 ; + indicatorOfParameter = 136 ; + } +#100 metre U wind component +'228246' = { + table2Version = 228 ; + indicatorOfParameter = 246 ; + } +#100 metre V wind component +'228247' = { + table2Version = 228 ; + indicatorOfParameter = 247 ; + } +#ASCAT first soil moisture CDF matching parameter +'228253' = { + table2Version = 228 ; + indicatorOfParameter = 253 ; + } +#ASCAT second soil moisture CDF matching parameter +'228254' = { + table2Version = 228 ; + indicatorOfParameter = 254 ; +} diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def new file mode 100644 index 000000000..c98be6339 --- /dev/null +++ b/definitions/grib1/localConcepts/ecmf/shortName.def @@ -0,0 +1,15316 @@ +# Automatically generated by create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total precipitation of at least 1 mm +'tpg1' = { + table2Version = 131 ; + indicatorOfParameter = 60 ; + } +#Total precipitation of at least 5 mm +'tpg5' = { + table2Version = 131 ; + indicatorOfParameter = 61 ; + } +#Total precipitation of at least 10 mm +'tpg10' = { + table2Version = 131 ; + indicatorOfParameter = 62 ; + } +#Total precipitation of at least 20 mm +'tpg20' = { + table2Version = 131 ; + indicatorOfParameter = 63 ; + } +#Total precipitation of at least 40 mm +'tpg40' = { + table2Version = 131 ; + indicatorOfParameter = 82 ; + } +#Total precipitation of at least 60 mm +'tpg60' = { + table2Version = 131 ; + indicatorOfParameter = 83 ; + } +#Total precipitation of at least 80 mm +'tpg80' = { + table2Version = 131 ; + indicatorOfParameter = 84 ; + } +#Total precipitation of at least 100 mm +'tpg100' = { + table2Version = 131 ; + indicatorOfParameter = 85 ; + } +#Total precipitation of at least 150 mm +'tpg150' = { + table2Version = 131 ; + indicatorOfParameter = 86 ; + } +#Total precipitation of at least 200 mm +'tpg200' = { + table2Version = 131 ; + indicatorOfParameter = 87 ; + } +#Total precipitation of at least 300 mm +'tpg300' = { + table2Version = 131 ; + indicatorOfParameter = 88 ; + } +#Stream function +'strf' = { + table2Version = 128 ; + indicatorOfParameter = 1 ; + } +#Velocity potential +'vp' = { + table2Version = 128 ; + indicatorOfParameter = 2 ; + } +#Potential temperature +'pt' = { + table2Version = 128 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature +'eqpt' = { + table2Version = 128 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature +'sept' = { + table2Version = 128 ; + indicatorOfParameter = 5 ; + } +#Soil sand fraction +'ssfr' = { + table2Version = 128 ; + indicatorOfParameter = 6 ; + } +#Soil clay fraction +'scfr' = { + table2Version = 128 ; + indicatorOfParameter = 7 ; + } +#Surface runoff +'sro' = { + table2Version = 128 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff +'ssro' = { + table2Version = 128 ; + indicatorOfParameter = 9 ; + } +#Wind speed +'ws' = { + table2Version = 128 ; + indicatorOfParameter = 10 ; + } +#U component of divergent wind +'udvw' = { + table2Version = 128 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind +'vdvw' = { + table2Version = 128 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind +'urtw' = { + table2Version = 128 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind +'vrtw' = { + table2Version = 128 ; + indicatorOfParameter = 14 ; + } +#UV visible albedo for direct radiation +'aluvp' = { + table2Version = 128 ; + indicatorOfParameter = 15 ; + } +#UV visible albedo for diffuse radiation +'aluvd' = { + table2Version = 128 ; + indicatorOfParameter = 16 ; + } +#Near IR albedo for direct radiation +'alnip' = { + table2Version = 128 ; + indicatorOfParameter = 17 ; + } +#Near IR albedo for diffuse radiation +'alnid' = { + table2Version = 128 ; + indicatorOfParameter = 18 ; + } +#Clear sky surface UV +'uvcs' = { + table2Version = 128 ; + indicatorOfParameter = 19 ; + } +#Clear sky surface photosynthetically active radiation +'parcs' = { + table2Version = 128 ; + indicatorOfParameter = 20 ; + } +#Unbalanced component of temperature +'uctp' = { + table2Version = 128 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'ucln' = { + table2Version = 128 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence +'ucdv' = { + table2Version = 128 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 128 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 128 ; + indicatorOfParameter = 25 ; + } +#Lake cover +'cl' = { + table2Version = 128 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover +'cvl' = { + table2Version = 128 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover +'cvh' = { + table2Version = 128 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation +'tvl' = { + table2Version = 128 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation +'tvh' = { + table2Version = 128 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover +'ci' = { + table2Version = 128 ; + indicatorOfParameter = 31 ; + } +#Snow albedo +'asn' = { + table2Version = 128 ; + indicatorOfParameter = 32 ; + } +#Snow density +'rsn' = { + table2Version = 128 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature +'sst' = { + table2Version = 128 ; + indicatorOfParameter = 34 ; + } +#Ice temperature layer 1 +'istl1' = { + table2Version = 128 ; + indicatorOfParameter = 35 ; + } +#Ice temperature layer 2 +'istl2' = { + table2Version = 128 ; + indicatorOfParameter = 36 ; + } +#Ice temperature layer 3 +'istl3' = { + table2Version = 128 ; + indicatorOfParameter = 37 ; + } +#Ice temperature layer 4 +'istl4' = { + table2Version = 128 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 +'swvl1' = { + table2Version = 128 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'swvl2' = { + table2Version = 128 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'swvl3' = { + table2Version = 128 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'swvl4' = { + table2Version = 128 ; + indicatorOfParameter = 42 ; + } +#Soil type +'slt' = { + table2Version = 128 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation +'es' = { + table2Version = 128 ; + indicatorOfParameter = 44 ; + } +#Snowmelt +'smlt' = { + table2Version = 128 ; + indicatorOfParameter = 45 ; + } +#Solar duration +'sdur' = { + table2Version = 128 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation +'dsrp' = { + table2Version = 128 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress +'magss' = { + table2Version = 128 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust +'10fg' = { + table2Version = 128 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction +'lspf' = { + table2Version = 128 ; + indicatorOfParameter = 50 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'mx2t24' = { + table2Version = 128 ; + indicatorOfParameter = 51 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'mn2t24' = { + table2Version = 128 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential +'mont' = { + table2Version = 128 ; + indicatorOfParameter = 53 ; + } +#Pressure +'pres' = { + table2Version = 128 ; + indicatorOfParameter = 54 ; + } +#Mean temperature at 2 metres in the last 24 hours +'mean2t24' = { + table2Version = 128 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours +'mn2d24' = { + table2Version = 128 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface +'uvb' = { + table2Version = 128 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface +'par' = { + table2Version = 128 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy +'cape' = { + table2Version = 128 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity +'pv' = { + table2Version = 128 ; + indicatorOfParameter = 60 ; + } +#Observation count +'obct' = { + table2Version = 128 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'stsktd' = { + table2Version = 128 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'ftsktd' = { + table2Version = 128 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'sktd' = { + table2Version = 128 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'lai_lv' = { + table2Version = 128 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'lai_hv' = { + table2Version = 128 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'msr_lv' = { + table2Version = 128 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'msr_hv' = { + table2Version = 128 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'bc_lv' = { + table2Version = 128 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'bc_hv' = { + table2Version = 128 ; + indicatorOfParameter = 71 ; + } +#Instantaneous surface solar radiation downwards +'issrd' = { + table2Version = 128 ; + indicatorOfParameter = 72 ; + } +#Instantaneous surface thermal radiation downwards +'istrd' = { + table2Version = 128 ; + indicatorOfParameter = 73 ; + } +#Standard deviation of filtered subgrid orography +'sdfor' = { + table2Version = 128 ; + indicatorOfParameter = 74 ; + } +#Specific rain water content +'crwc' = { + table2Version = 128 ; + indicatorOfParameter = 75 ; + } +#Specific snow water content +'cswc' = { + table2Version = 128 ; + indicatorOfParameter = 76 ; + } +#Eta-coordinate vertical velocity +'etadot' = { + table2Version = 128 ; + indicatorOfParameter = 77 ; + } +#Total column liquid water +'tclw' = { + table2Version = 128 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'tciw' = { + table2Version = 128 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'mx2t6' = { + table2Version = 128 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'mn2t6' = { + table2Version = 128 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours +'10fg6' = { + table2Version = 128 ; + indicatorOfParameter = 123 ; + } +#Surface emissivity +'emis' = { + table2Version = 128 ; + indicatorOfParameter = 124 ; + } +#Vertically integrated total energy +'vite' = { + table2Version = 128 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'~' = { + table2Version = 128 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide +'at' = { + table2Version = 128 ; + indicatorOfParameter = 127 ; + } +#Atmospheric tide +'at' = { + table2Version = 160 ; + indicatorOfParameter = 127 ; + } +#Budget values +'bv' = { + table2Version = 128 ; + indicatorOfParameter = 128 ; + } +#Budget values +'bv' = { + table2Version = 160 ; + indicatorOfParameter = 128 ; + } +#Geopotential +'z' = { + table2Version = 128 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'z' = { + table2Version = 160 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'z' = { + table2Version = 170 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'z' = { + table2Version = 180 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'z' = { + table2Version = 190 ; + indicatorOfParameter = 129 ; + } +#Temperature +'t' = { + table2Version = 128 ; + indicatorOfParameter = 130 ; + } +#Temperature +'t' = { + table2Version = 160 ; + indicatorOfParameter = 130 ; + } +#Temperature +'t' = { + table2Version = 170 ; + indicatorOfParameter = 130 ; + } +#Temperature +'t' = { + table2Version = 180 ; + indicatorOfParameter = 130 ; + } +#Temperature +'t' = { + table2Version = 190 ; + indicatorOfParameter = 130 ; + } +#U component of wind +'u' = { + table2Version = 128 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'u' = { + table2Version = 160 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'u' = { + table2Version = 170 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'u' = { + table2Version = 180 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'u' = { + table2Version = 190 ; + indicatorOfParameter = 131 ; + } +#V component of wind +'v' = { + table2Version = 128 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'v' = { + table2Version = 160 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'v' = { + table2Version = 170 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'v' = { + table2Version = 180 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'v' = { + table2Version = 190 ; + indicatorOfParameter = 132 ; + } +#Specific humidity +'q' = { + table2Version = 128 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'q' = { + table2Version = 160 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'q' = { + table2Version = 170 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'q' = { + table2Version = 180 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'q' = { + table2Version = 190 ; + indicatorOfParameter = 133 ; + } +#Surface pressure +'sp' = { + table2Version = 128 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'sp' = { + table2Version = 160 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'sp' = { + table2Version = 162 ; + indicatorOfParameter = 52 ; + } +#Surface pressure +'sp' = { + table2Version = 180 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'sp' = { + table2Version = 190 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity +'w' = { + table2Version = 128 ; + indicatorOfParameter = 135 ; + } +#Vertical velocity +'w' = { + table2Version = 170 ; + indicatorOfParameter = 135 ; + } +#Total column water +'tcw' = { + table2Version = 128 ; + indicatorOfParameter = 136 ; + } +#Total column water +'tcw' = { + table2Version = 160 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour +'tcwv' = { + table2Version = 128 ; + indicatorOfParameter = 137 ; + } +#Total column water vapour +'tcwv' = { + table2Version = 180 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) +'vo' = { + table2Version = 128 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'vo' = { + table2Version = 160 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'vo' = { + table2Version = 170 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'vo' = { + table2Version = 180 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'vo' = { + table2Version = 190 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 +'stl1' = { + table2Version = 128 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'stl1' = { + table2Version = 160 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'stl1' = { + table2Version = 170 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'stl1' = { + table2Version = 190 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 +'swl1' = { + table2Version = 128 ; + indicatorOfParameter = 140 ; + } +#Soil wetness level 1 +'swl1' = { + table2Version = 170 ; + indicatorOfParameter = 140 ; + } +#Snow depth +'sd' = { + table2Version = 128 ; + indicatorOfParameter = 141 ; + } +#Snow depth +'sd' = { + table2Version = 170 ; + indicatorOfParameter = 141 ; + } +#Snow depth +'sd' = { + table2Version = 180 ; + indicatorOfParameter = 141 ; + } +#Large-scale precipitation +'lsp' = { + table2Version = 128 ; + indicatorOfParameter = 142 ; + } +#Large-scale precipitation +'lsp' = { + table2Version = 170 ; + indicatorOfParameter = 142 ; + } +#Large-scale precipitation +'lsp' = { + table2Version = 180 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'cp' = { + table2Version = 128 ; + indicatorOfParameter = 143 ; + } +#Convective precipitation +'cp' = { + table2Version = 170 ; + indicatorOfParameter = 143 ; + } +#Convective precipitation +'cp' = { + table2Version = 180 ; + indicatorOfParameter = 143 ; + } +#Snowfall +'sf' = { + table2Version = 128 ; + indicatorOfParameter = 144 ; + } +#Snowfall +'sf' = { + table2Version = 180 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation +'bld' = { + table2Version = 128 ; + indicatorOfParameter = 145 ; + } +#Boundary layer dissipation +'bld' = { + table2Version = 160 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux +'sshf' = { + table2Version = 128 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'sshf' = { + table2Version = 160 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'sshf' = { + table2Version = 170 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'sshf' = { + table2Version = 180 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'sshf' = { + table2Version = 190 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux +'slhf' = { + table2Version = 128 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'slhf' = { + table2Version = 160 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'slhf' = { + table2Version = 170 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'slhf' = { + table2Version = 180 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'slhf' = { + table2Version = 190 ; + indicatorOfParameter = 147 ; + } +#Charnock +'chnk' = { + table2Version = 128 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation +'snr' = { + table2Version = 128 ; + indicatorOfParameter = 149 ; + } +#Top net radiation +'tnr' = { + table2Version = 128 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure +'msl' = { + table2Version = 128 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'msl' = { + table2Version = 160 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'msl' = { + table2Version = 170 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'msl' = { + table2Version = 180 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'msl' = { + table2Version = 190 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure +'lnsp' = { + table2Version = 128 ; + indicatorOfParameter = 152 ; + } +#Logarithm of surface pressure +'lnsp' = { + table2Version = 160 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate +'swhr' = { + table2Version = 128 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate +'lwhr' = { + table2Version = 128 ; + indicatorOfParameter = 154 ; + } +#Divergence +'d' = { + table2Version = 128 ; + indicatorOfParameter = 155 ; + } +#Divergence +'d' = { + table2Version = 160 ; + indicatorOfParameter = 155 ; + } +#Divergence +'d' = { + table2Version = 170 ; + indicatorOfParameter = 155 ; + } +#Divergence +'d' = { + table2Version = 180 ; + indicatorOfParameter = 155 ; + } +#Divergence +'d' = { + table2Version = 190 ; + indicatorOfParameter = 155 ; + } +#Geopotential Height +'gh' = { + table2Version = 128 ; + indicatorOfParameter = 156 ; + } +#Relative humidity +'r' = { + table2Version = 128 ; + indicatorOfParameter = 157 ; + } +#Relative humidity +'r' = { + table2Version = 170 ; + indicatorOfParameter = 157 ; + } +#Relative humidity +'r' = { + table2Version = 190 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure +'tsp' = { + table2Version = 128 ; + indicatorOfParameter = 158 ; + } +#Tendency of surface pressure +'tsp' = { + table2Version = 160 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height +'blh' = { + table2Version = 128 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography +'sdor' = { + table2Version = 128 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography +'isor' = { + table2Version = 128 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography +'anor' = { + table2Version = 128 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography +'slor' = { + table2Version = 128 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover +'tcc' = { + table2Version = 128 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'tcc' = { + table2Version = 160 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'tcc' = { + table2Version = 170 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'tcc' = { + table2Version = 180 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'tcc' = { + table2Version = 190 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component +'10u' = { + table2Version = 128 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'10u' = { + table2Version = 160 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'10u' = { + table2Version = 180 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'10u' = { + table2Version = 190 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component +'10v' = { + table2Version = 128 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'10v' = { + table2Version = 160 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'10v' = { + table2Version = 180 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'10v' = { + table2Version = 190 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature +'2t' = { + table2Version = 128 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'2t' = { + table2Version = 160 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'2t' = { + table2Version = 180 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'2t' = { + table2Version = 190 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature +'2d' = { + table2Version = 128 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'2d' = { + table2Version = 160 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'2d' = { + table2Version = 180 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'2d' = { + table2Version = 190 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards +'ssrd' = { + table2Version = 128 ; + indicatorOfParameter = 169 ; + } +#Surface solar radiation downwards +'ssrd' = { + table2Version = 190 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 +'stl2' = { + table2Version = 128 ; + indicatorOfParameter = 170 ; + } +#Soil temperature level 2 +'stl2' = { + table2Version = 160 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 +'swl2' = { + table2Version = 128 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask +'lsm' = { + table2Version = 128 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'lsm' = { + table2Version = 160 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'lsm' = { + table2Version = 171 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'lsm' = { + table2Version = 174 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'lsm' = { + table2Version = 175 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'lsm' = { + table2Version = 180 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'lsm' = { + table2Version = 190 ; + indicatorOfParameter = 172 ; + } +#Surface roughness +'sr' = { + table2Version = 128 ; + indicatorOfParameter = 173 ; + } +#Surface roughness +'sr' = { + table2Version = 160 ; + indicatorOfParameter = 173 ; + } +#Albedo +'al' = { + table2Version = 128 ; + indicatorOfParameter = 174 ; + } +#Albedo +'al' = { + table2Version = 160 ; + indicatorOfParameter = 174 ; + } +#Albedo +'al' = { + table2Version = 190 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards +'strd' = { + table2Version = 128 ; + indicatorOfParameter = 175 ; + } +#Surface thermal radiation downwards +'strd' = { + table2Version = 190 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation +'ssr' = { + table2Version = 128 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'ssr' = { + table2Version = 160 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'ssr' = { + table2Version = 170 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'ssr' = { + table2Version = 190 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation +'str' = { + table2Version = 128 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'str' = { + table2Version = 160 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'str' = { + table2Version = 170 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'str' = { + table2Version = 190 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation +'tsr' = { + table2Version = 128 ; + indicatorOfParameter = 178 ; + } +#Top net solar radiation +'tsr' = { + table2Version = 160 ; + indicatorOfParameter = 178 ; + } +#Top net solar radiation +'tsr' = { + table2Version = 190 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation +'ttr' = { + table2Version = 128 ; + indicatorOfParameter = 179 ; + } +#Top net thermal radiation +'ttr' = { + table2Version = 160 ; + indicatorOfParameter = 179 ; + } +#Top net thermal radiation +'ttr' = { + table2Version = 190 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress +'ewss' = { + table2Version = 128 ; + indicatorOfParameter = 180 ; + } +#East-West surface stress +'ewss' = { + table2Version = 170 ; + indicatorOfParameter = 180 ; + } +#East-West surface stress +'ewss' = { + table2Version = 180 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'nsss' = { + table2Version = 128 ; + indicatorOfParameter = 181 ; + } +#North-South surface stress +'nsss' = { + table2Version = 170 ; + indicatorOfParameter = 181 ; + } +#North-South surface stress +'nsss' = { + table2Version = 180 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'e' = { + table2Version = 128 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'e' = { + table2Version = 170 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'e' = { + table2Version = 180 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'e' = { + table2Version = 190 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 +'stl3' = { + table2Version = 128 ; + indicatorOfParameter = 183 ; + } +#Soil temperature level 3 +'stl3' = { + table2Version = 160 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 +'swl3' = { + table2Version = 128 ; + indicatorOfParameter = 184 ; + } +#Soil wetness level 3 +'swl3' = { + table2Version = 170 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover +'ccc' = { + table2Version = 128 ; + indicatorOfParameter = 185 ; + } +#Convective cloud cover +'ccc' = { + table2Version = 160 ; + indicatorOfParameter = 185 ; + } +#Convective cloud cover +'ccc' = { + table2Version = 170 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover +'lcc' = { + table2Version = 128 ; + indicatorOfParameter = 186 ; + } +#Low cloud cover +'lcc' = { + table2Version = 160 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover +'mcc' = { + table2Version = 128 ; + indicatorOfParameter = 187 ; + } +#Medium cloud cover +'mcc' = { + table2Version = 160 ; + indicatorOfParameter = 187 ; + } +#High cloud cover +'hcc' = { + table2Version = 128 ; + indicatorOfParameter = 188 ; + } +#High cloud cover +'hcc' = { + table2Version = 160 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration +'sund' = { + table2Version = 128 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance +'ewov' = { + table2Version = 128 ; + indicatorOfParameter = 190 ; + } +#East-West component of sub-gridscale orographic variance +'ewov' = { + table2Version = 160 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance +'nsov' = { + table2Version = 128 ; + indicatorOfParameter = 191 ; + } +#North-South component of sub-gridscale orographic variance +'nsov' = { + table2Version = 160 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'nwov' = { + table2Version = 128 ; + indicatorOfParameter = 192 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'nwov' = { + table2Version = 160 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'neov' = { + table2Version = 128 ; + indicatorOfParameter = 193 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'neov' = { + table2Version = 160 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature +'btmp' = { + table2Version = 128 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress +'lgws' = { + table2Version = 128 ; + indicatorOfParameter = 195 ; + } +#Longitudinal component of gravity wave stress +'lgws' = { + table2Version = 160 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress +'mgws' = { + table2Version = 128 ; + indicatorOfParameter = 196 ; + } +#Meridional component of gravity wave stress +'mgws' = { + table2Version = 160 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation +'gwd' = { + table2Version = 128 ; + indicatorOfParameter = 197 ; + } +#Gravity wave dissipation +'gwd' = { + table2Version = 160 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content +'src' = { + table2Version = 128 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction +'veg' = { + table2Version = 128 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography +'vso' = { + table2Version = 128 ; + indicatorOfParameter = 200 ; + } +#Variance of sub-gridscale orography +'vso' = { + table2Version = 160 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing +'mx2t' = { + table2Version = 128 ; + indicatorOfParameter = 201 ; + } +#Maximum temperature at 2 metres since previous post-processing +'mx2t' = { + table2Version = 170 ; + indicatorOfParameter = 201 ; + } +#Maximum temperature at 2 metres since previous post-processing +'mx2t' = { + table2Version = 190 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing +'mn2t' = { + table2Version = 128 ; + indicatorOfParameter = 202 ; + } +#Minimum temperature at 2 metres since previous post-processing +'mn2t' = { + table2Version = 170 ; + indicatorOfParameter = 202 ; + } +#Minimum temperature at 2 metres since previous post-processing +'mn2t' = { + table2Version = 190 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio +'o3' = { + table2Version = 128 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights +'paw' = { + table2Version = 128 ; + indicatorOfParameter = 204 ; + } +#Precipitation analysis weights +'paw' = { + table2Version = 160 ; + indicatorOfParameter = 204 ; + } +#Runoff +'ro' = { + table2Version = 128 ; + indicatorOfParameter = 205 ; + } +#Runoff +'ro' = { + table2Version = 180 ; + indicatorOfParameter = 205 ; + } +#Total column ozone +'tco3' = { + table2Version = 128 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed +'10si' = { + table2Version = 128 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky +'tsrc' = { + table2Version = 128 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky +'ttrc' = { + table2Version = 128 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky +'ssrc' = { + table2Version = 128 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky +'strc' = { + table2Version = 128 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation +'tisr' = { + table2Version = 128 ; + indicatorOfParameter = 212 ; + } +#Vertically integrated moisture divergence +'vimd' = { + table2Version = 128 ; + indicatorOfParameter = 213 ; + } +#Diabatic heating by radiation +'dhr' = { + table2Version = 128 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion +'dhvd' = { + table2Version = 128 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection +'dhcc' = { + table2Version = 128 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation +'dhlc' = { + table2Version = 128 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind +'vdzw' = { + table2Version = 128 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind +'vdmw' = { + table2Version = 128 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency +'ewgd' = { + table2Version = 128 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency +'nsgd' = { + table2Version = 128 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind +'ctzw' = { + table2Version = 128 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of zonal wind +'ctzw' = { + table2Version = 130 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind +'ctmw' = { + table2Version = 128 ; + indicatorOfParameter = 223 ; + } +#Convective tendency of meridional wind +'ctmw' = { + table2Version = 130 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity +'vdh' = { + table2Version = 128 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection +'htcc' = { + table2Version = 128 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation +'htlc' = { + table2Version = 128 ; + indicatorOfParameter = 226 ; + } +#Tendency due to removal of negative humidity +'crnh' = { + table2Version = 128 ; + indicatorOfParameter = 227 ; + } +#Tendency due to removal of negative humidity +'crnh' = { + table2Version = 130 ; + indicatorOfParameter = 227 ; + } +#Total precipitation +'tp' = { + table2Version = 128 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'tp' = { + table2Version = 160 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'tp' = { + table2Version = 170 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'tp' = { + table2Version = 190 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress +'iews' = { + table2Version = 128 ; + indicatorOfParameter = 229 ; + } +#Instantaneous X surface stress +'iews' = { + table2Version = 160 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress +'inss' = { + table2Version = 128 ; + indicatorOfParameter = 230 ; + } +#Instantaneous Y surface stress +'inss' = { + table2Version = 160 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface sensible heat flux +'ishf' = { + table2Version = 128 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux +'ie' = { + table2Version = 128 ; + indicatorOfParameter = 232 ; + } +#Instantaneous moisture flux +'ie' = { + table2Version = 160 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity +'asq' = { + table2Version = 128 ; + indicatorOfParameter = 233 ; + } +#Apparent surface humidity +'asq' = { + table2Version = 160 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat +'lsrh' = { + table2Version = 128 ; + indicatorOfParameter = 234 ; + } +#Logarithm of surface roughness length for heat +'lsrh' = { + table2Version = 160 ; + indicatorOfParameter = 234 ; + } +#Skin temperature +'skt' = { + table2Version = 128 ; + indicatorOfParameter = 235 ; + } +#Skin temperature +'skt' = { + table2Version = 160 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 +'stl4' = { + table2Version = 128 ; + indicatorOfParameter = 236 ; + } +#Soil temperature level 4 +'stl4' = { + table2Version = 160 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 +'swl4' = { + table2Version = 128 ; + indicatorOfParameter = 237 ; + } +#Soil wetness level 4 +'swl4' = { + table2Version = 160 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer +'tsn' = { + table2Version = 128 ; + indicatorOfParameter = 238 ; + } +#Temperature of snow layer +'tsn' = { + table2Version = 160 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall +'csf' = { + table2Version = 128 ; + indicatorOfParameter = 239 ; + } +#Large-scale snowfall +'lsf' = { + table2Version = 128 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency +'acf' = { + table2Version = 128 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency +'alw' = { + table2Version = 128 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo +'fal' = { + table2Version = 128 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness +'fsr' = { + table2Version = 128 ; + indicatorOfParameter = 244 ; + } +#Forecast surface roughness +'fsr' = { + table2Version = 160 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat +'flsr' = { + table2Version = 128 ; + indicatorOfParameter = 245 ; + } +#Forecast logarithm of surface roughness for heat +'flsr' = { + table2Version = 160 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content +'clwc' = { + table2Version = 128 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content +'ciwc' = { + table2Version = 128 ; + indicatorOfParameter = 247 ; + } +#Cloud cover +'cc' = { + table2Version = 128 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency +'aiw' = { + table2Version = 128 ; + indicatorOfParameter = 249 ; + } +#Ice age +'ice' = { + table2Version = 128 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature +'atte' = { + table2Version = 128 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity +'athe' = { + table2Version = 128 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind +'atze' = { + table2Version = 128 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind +'atmw' = { + table2Version = 128 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'~' = { + table2Version = 128 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 130 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 132 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 160 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 170 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 180 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 190 ; + indicatorOfParameter = 255 ; + } +#Stream function difference +'strfdiff' = { + table2Version = 200 ; + indicatorOfParameter = 1 ; + } +#Velocity potential difference +'vpotdiff' = { + table2Version = 200 ; + indicatorOfParameter = 2 ; + } +#Potential temperature difference +'ptdiff' = { + table2Version = 200 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature difference +'eqptdiff' = { + table2Version = 200 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature difference +'septdiff' = { + table2Version = 200 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind difference +'udvwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind difference +'vdvwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind difference +'urtwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind difference +'vrtwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature difference +'uctpdiff' = { + table2Version = 200 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure difference +'uclndiff' = { + table2Version = 200 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence difference +'ucdvdiff' = { + table2Version = 200 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 200 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 200 ; + indicatorOfParameter = 25 ; + } +#Lake cover difference +'cldiff' = { + table2Version = 200 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover difference +'cvldiff' = { + table2Version = 200 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover difference +'cvhdiff' = { + table2Version = 200 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation difference +'tvldiff' = { + table2Version = 200 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation difference +'tvhdiff' = { + table2Version = 200 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover difference +'sicdiff' = { + table2Version = 200 ; + indicatorOfParameter = 31 ; + } +#Snow albedo difference +'asndiff' = { + table2Version = 200 ; + indicatorOfParameter = 32 ; + } +#Snow density difference +'rsndiff' = { + table2Version = 200 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature difference +'sstdiff' = { + table2Version = 200 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature layer 1 difference +'istl1diff' = { + table2Version = 200 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature layer 2 difference +'istl2diff' = { + table2Version = 200 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature layer 3 difference +'istl3diff' = { + table2Version = 200 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature layer 4 difference +'istl4diff' = { + table2Version = 200 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 difference +'swvl1diff' = { + table2Version = 200 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 difference +'swvl2diff' = { + table2Version = 200 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 difference +'swvl3diff' = { + table2Version = 200 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 difference +'swvl4diff' = { + table2Version = 200 ; + indicatorOfParameter = 42 ; + } +#Soil type difference +'sltdiff' = { + table2Version = 200 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation difference +'esdiff' = { + table2Version = 200 ; + indicatorOfParameter = 44 ; + } +#Snowmelt difference +'smltdiff' = { + table2Version = 200 ; + indicatorOfParameter = 45 ; + } +#Solar duration difference +'sdurdiff' = { + table2Version = 200 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation difference +'dsrpdiff' = { + table2Version = 200 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress difference +'magssdiff' = { + table2Version = 200 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust difference +'10fgdiff' = { + table2Version = 200 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction difference +'lspfdiff' = { + table2Version = 200 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature difference +'mx2t24diff' = { + table2Version = 200 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature difference +'mn2t24diff' = { + table2Version = 200 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential difference +'montdiff' = { + table2Version = 200 ; + indicatorOfParameter = 53 ; + } +#Pressure difference +'presdiff' = { + table2Version = 200 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours difference +'mean2t24diff' = { + table2Version = 200 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours difference +'mn2d24diff' = { + table2Version = 200 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface difference +'uvbdiff' = { + table2Version = 200 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface difference +'pardiff' = { + table2Version = 200 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy difference +'capediff' = { + table2Version = 200 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity difference +'pvdiff' = { + table2Version = 200 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations difference +'tpodiff' = { + table2Version = 200 ; + indicatorOfParameter = 61 ; + } +#Observation count difference +'obctdiff' = { + table2Version = 200 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'~' = { + table2Version = 200 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'~' = { + table2Version = 200 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'~' = { + table2Version = 200 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'~' = { + table2Version = 200 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'~' = { + table2Version = 200 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'~' = { + table2Version = 200 ; + indicatorOfParameter = 71 ; + } +#Total column liquid water +'~' = { + table2Version = 200 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'~' = { + table2Version = 200 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres difference +'mx2t6diff' = { + table2Version = 200 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres difference +'mn2t6diff' = { + table2Version = 200 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours difference +'10fg6diff' = { + table2Version = 200 ; + indicatorOfParameter = 123 ; + } +#Vertically integrated total energy +'~' = { + table2Version = 200 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'~' = { + table2Version = 200 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide difference +'atdiff' = { + table2Version = 200 ; + indicatorOfParameter = 127 ; + } +#Budget values difference +'bvdiff' = { + table2Version = 200 ; + indicatorOfParameter = 128 ; + } +#Geopotential difference +'zdiff' = { + table2Version = 200 ; + indicatorOfParameter = 129 ; + } +#Temperature difference +'tdiff' = { + table2Version = 200 ; + indicatorOfParameter = 130 ; + } +#U component of wind difference +'udiff' = { + table2Version = 200 ; + indicatorOfParameter = 131 ; + } +#V component of wind difference +'vdiff' = { + table2Version = 200 ; + indicatorOfParameter = 132 ; + } +#Specific humidity difference +'qdiff' = { + table2Version = 200 ; + indicatorOfParameter = 133 ; + } +#Surface pressure difference +'spdiff' = { + table2Version = 200 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity (pressure) difference +'wdiff' = { + table2Version = 200 ; + indicatorOfParameter = 135 ; + } +#Total column water difference +'tcwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour difference +'tcwvdiff' = { + table2Version = 200 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) difference +'vodiff' = { + table2Version = 200 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 difference +'stl1diff' = { + table2Version = 200 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 difference +'swl1diff' = { + table2Version = 200 ; + indicatorOfParameter = 140 ; + } +#Snow depth difference +'sddiff' = { + table2Version = 200 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) difference +'lspdiff' = { + table2Version = 200 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation difference +'cpdiff' = { + table2Version = 200 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) difference +'sfdiff' = { + table2Version = 200 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation difference +'blddiff' = { + table2Version = 200 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux difference +'sshfdiff' = { + table2Version = 200 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux difference +'slhfdiff' = { + table2Version = 200 ; + indicatorOfParameter = 147 ; + } +#Charnock difference +'chnkdiff' = { + table2Version = 200 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation difference +'snrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 149 ; + } +#Top net radiation difference +'tnrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure difference +'msldiff' = { + table2Version = 200 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure difference +'lnspdiff' = { + table2Version = 200 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate difference +'swhrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate difference +'lwhrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 154 ; + } +#Divergence difference +'ddiff' = { + table2Version = 200 ; + indicatorOfParameter = 155 ; + } +#Height difference +'ghdiff' = { + table2Version = 200 ; + indicatorOfParameter = 156 ; + } +#Relative humidity difference +'rdiff' = { + table2Version = 200 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure difference +'tspdiff' = { + table2Version = 200 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height difference +'blhdiff' = { + table2Version = 200 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography difference +'sdordiff' = { + table2Version = 200 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography difference +'isordiff' = { + table2Version = 200 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography difference +'anordiff' = { + table2Version = 200 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography difference +'slordiff' = { + table2Version = 200 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover difference +'tccdiff' = { + table2Version = 200 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component difference +'10udiff' = { + table2Version = 200 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component difference +'10vdiff' = { + table2Version = 200 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature difference +'2tdiff' = { + table2Version = 200 ; + indicatorOfParameter = 167 ; + } +#Surface solar radiation downwards difference +'ssrddiff' = { + table2Version = 200 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 difference +'stl2diff' = { + table2Version = 200 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 difference +'swl2diff' = { + table2Version = 200 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask difference +'lsmdiff' = { + table2Version = 200 ; + indicatorOfParameter = 172 ; + } +#Surface roughness difference +'srdiff' = { + table2Version = 200 ; + indicatorOfParameter = 173 ; + } +#Albedo difference +'aldiff' = { + table2Version = 200 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards difference +'strddiff' = { + table2Version = 200 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation difference +'ssrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation difference +'strdiff' = { + table2Version = 200 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation difference +'tsrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation difference +'ttrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress difference +'ewssdiff' = { + table2Version = 200 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress difference +'nsssdiff' = { + table2Version = 200 ; + indicatorOfParameter = 181 ; + } +#Evaporation difference +'ediff' = { + table2Version = 200 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 difference +'stl3diff' = { + table2Version = 200 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 difference +'swl3diff' = { + table2Version = 200 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover difference +'cccdiff' = { + table2Version = 200 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover difference +'lccdiff' = { + table2Version = 200 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover difference +'mccdiff' = { + table2Version = 200 ; + indicatorOfParameter = 187 ; + } +#High cloud cover difference +'hccdiff' = { + table2Version = 200 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration difference +'sunddiff' = { + table2Version = 200 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance difference +'ewovdiff' = { + table2Version = 200 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance difference +'nsovdiff' = { + table2Version = 200 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance difference +'nwovdiff' = { + table2Version = 200 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance difference +'neovdiff' = { + table2Version = 200 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature difference +'btmpdiff' = { + table2Version = 200 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress difference +'lgwsdiff' = { + table2Version = 200 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress difference +'mgwsdiff' = { + table2Version = 200 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation difference +'gwddiff' = { + table2Version = 200 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content difference +'srcdiff' = { + table2Version = 200 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction difference +'vegdiff' = { + table2Version = 200 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography difference +'vsodiff' = { + table2Version = 200 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing difference +'mx2tdiff' = { + table2Version = 200 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing difference +'mn2tdiff' = { + table2Version = 200 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio difference +'o3diff' = { + table2Version = 200 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights difference +'pawdiff' = { + table2Version = 200 ; + indicatorOfParameter = 204 ; + } +#Runoff difference +'rodiff' = { + table2Version = 200 ; + indicatorOfParameter = 205 ; + } +#Total column ozone difference +'tco3diff' = { + table2Version = 200 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed difference +'10sidiff' = { + table2Version = 200 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky difference +'tsrcdiff' = { + table2Version = 200 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky difference +'ttrcdiff' = { + table2Version = 200 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky difference +'ssrcdiff' = { + table2Version = 200 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky difference +'strcdiff' = { + table2Version = 200 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation difference +'tisrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation difference +'dhrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion difference +'dhvddiff' = { + table2Version = 200 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection difference +'dhccdiff' = { + table2Version = 200 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation difference +'dhlcdiff' = { + table2Version = 200 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind difference +'vdzwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind difference +'vdmwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency difference +'ewgddiff' = { + table2Version = 200 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency difference +'nsgddiff' = { + table2Version = 200 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind difference +'ctzwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind difference +'ctmwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity difference +'vdhdiff' = { + table2Version = 200 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection difference +'htccdiff' = { + table2Version = 200 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation difference +'htlcdiff' = { + table2Version = 200 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity difference +'crnhdiff' = { + table2Version = 200 ; + indicatorOfParameter = 227 ; + } +#Total precipitation difference +'tpdiff' = { + table2Version = 200 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress difference +'iewsdiff' = { + table2Version = 200 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress difference +'inssdiff' = { + table2Version = 200 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux difference +'ishfdiff' = { + table2Version = 200 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux difference +'iediff' = { + table2Version = 200 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity difference +'asqdiff' = { + table2Version = 200 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat difference +'lsrhdiff' = { + table2Version = 200 ; + indicatorOfParameter = 234 ; + } +#Skin temperature difference +'sktdiff' = { + table2Version = 200 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 difference +'stl4diff' = { + table2Version = 200 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 difference +'swl4diff' = { + table2Version = 200 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer difference +'tsndiff' = { + table2Version = 200 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall difference +'csfdiff' = { + table2Version = 200 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall difference +'lsfdiff' = { + table2Version = 200 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency difference +'acfdiff' = { + table2Version = 200 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency difference +'alwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo difference +'faldiff' = { + table2Version = 200 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness difference +'fsrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat difference +'flsrdiff' = { + table2Version = 200 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content difference +'clwcdiff' = { + table2Version = 200 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content difference +'ciwcdiff' = { + table2Version = 200 ; + indicatorOfParameter = 247 ; + } +#Cloud cover difference +'ccdiff' = { + table2Version = 200 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency difference +'aiwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 249 ; + } +#Ice age difference +'icediff' = { + table2Version = 200 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature difference +'attediff' = { + table2Version = 200 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity difference +'athediff' = { + table2Version = 200 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind difference +'atzediff' = { + table2Version = 200 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind difference +'atmwdiff' = { + table2Version = 200 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'~' = { + table2Version = 200 ; + indicatorOfParameter = 255 ; + } +#Maximum of significant wave height index +'maxswhi' = { + table2Version = 132 ; + indicatorOfParameter = 216 ; + } +#Normalized energy flux into waves +'phiaw' = { + table2Version = 140 ; + indicatorOfParameter = 211 ; + } +#Normalized energy flux into ocean +'phioc' = { + table2Version = 140 ; + indicatorOfParameter = 212 ; + } +#Turbulent Langmuir number +'tla' = { + table2Version = 140 ; + indicatorOfParameter = 213 ; + } +#Normalized stress into ocean +'tauoc' = { + table2Version = 140 ; + indicatorOfParameter = 214 ; + } +#Reserved +'~' = { + table2Version = 151 ; + indicatorOfParameter = 193 ; + } +#Vertical integral of divergence of cloud liquid water flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 79 ; + } +#Vertical integral of divergence of cloud frozen water flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 80 ; + } +#Vertical integral of eastward cloud liquid water flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 88 ; + } +#Vertical integral of northward cloud liquid water flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 89 ; + } +#Vertical integral of eastward cloud frozen water flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 90 ; + } +#Vertical integral of northward cloud frozen water flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 91 ; + } +#Vertical integral of mass tendency +'~' = { + table2Version = 162 ; + indicatorOfParameter = 92 ; + } +#U-tendency from dynamics +'utendd' = { + table2Version = 162 ; + indicatorOfParameter = 114 ; + } +#V-tendency from dynamics +'vtendd' = { + table2Version = 162 ; + indicatorOfParameter = 115 ; + } +#T-tendency from dynamics +'ttendd' = { + table2Version = 162 ; + indicatorOfParameter = 116 ; + } +#q-tendency from dynamics +'qtendd' = { + table2Version = 162 ; + indicatorOfParameter = 117 ; + } +#T-tendency from radiation +'ttendr' = { + table2Version = 162 ; + indicatorOfParameter = 118 ; + } +#U-tendency from turbulent diffusion + subgrid orography +'utendts' = { + table2Version = 162 ; + indicatorOfParameter = 119 ; + } +#V-tendency from turbulent diffusion + subgrid orography +'vtendts' = { + table2Version = 162 ; + indicatorOfParameter = 120 ; + } +#T-tendency from turbulent diffusion + subgrid orography +'ttendts' = { + table2Version = 162 ; + indicatorOfParameter = 121 ; + } +#q-tendency from turbulent diffusion +'qtendt' = { + table2Version = 162 ; + indicatorOfParameter = 122 ; + } +#U-tendency from subgrid orography +'utends' = { + table2Version = 162 ; + indicatorOfParameter = 123 ; + } +#V-tendency from subgrid orography +'vtends' = { + table2Version = 162 ; + indicatorOfParameter = 124 ; + } +#T-tendency from subgrid orography +'ttends' = { + table2Version = 162 ; + indicatorOfParameter = 125 ; + } +#U-tendency from convection (deep+shallow) +'utendcds' = { + table2Version = 162 ; + indicatorOfParameter = 126 ; + } +#V-tendency from convection (deep+shallow) +'vtendcds' = { + table2Version = 162 ; + indicatorOfParameter = 127 ; + } +#T-tendency from convection (deep+shallow) +'ttendcds' = { + table2Version = 162 ; + indicatorOfParameter = 128 ; + } +#q-tendency from convection (deep+shallow) +'qtendcds' = { + table2Version = 162 ; + indicatorOfParameter = 129 ; + } +#Liquid Precipitation flux from convection +'lpc' = { + table2Version = 162 ; + indicatorOfParameter = 130 ; + } +#Ice Precipitation flux from convection +'ipc' = { + table2Version = 162 ; + indicatorOfParameter = 131 ; + } +#T-tendency from cloud scheme +'ttendcs' = { + table2Version = 162 ; + indicatorOfParameter = 132 ; + } +#q-tendency from cloud scheme +'qtendcs' = { + table2Version = 162 ; + indicatorOfParameter = 133 ; + } +#ql-tendency from cloud scheme +'qltendcs' = { + table2Version = 162 ; + indicatorOfParameter = 134 ; + } +#qi-tendency from cloud scheme +'qitendcs' = { + table2Version = 162 ; + indicatorOfParameter = 135 ; + } +#Liquid Precip flux from cloud scheme (stratiform) +'lpcs' = { + table2Version = 162 ; + indicatorOfParameter = 136 ; + } +#Ice Precip flux from cloud scheme (stratiform) +'ipcs' = { + table2Version = 162 ; + indicatorOfParameter = 137 ; + } +#U-tendency from shallow convection +'utendcs' = { + table2Version = 162 ; + indicatorOfParameter = 138 ; + } +#V-tendency from shallow convection +'vtendcs' = { + table2Version = 162 ; + indicatorOfParameter = 139 ; + } +#T-tendency from shallow convection +'ttendsc' = { + table2Version = 162 ; + indicatorOfParameter = 140 ; + } +#q-tendency from shallow convection +'qtendsc' = { + table2Version = 162 ; + indicatorOfParameter = 141 ; + } +#100 metre U wind component anomaly +'100ua' = { + table2Version = 171 ; + indicatorOfParameter = 6 ; + } +#100 metre V wind component anomaly +'100va' = { + table2Version = 171 ; + indicatorOfParameter = 7 ; + } +#Maximum temperature at 2 metres in the last 6 hours anomaly +'mx2t6a' = { + table2Version = 171 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours anomaly +'mn2t6a' = { + table2Version = 171 ; + indicatorOfParameter = 122 ; + } +#Clear-sky (II) down surface sw flux +'sswcsdown' = { + table2Version = 174 ; + indicatorOfParameter = 10 ; + } +#Clear-sky (II) up surface sw flux +'sswcsup' = { + table2Version = 174 ; + indicatorOfParameter = 13 ; + } +#Visibility at 1.5m +'vis15' = { + table2Version = 174 ; + indicatorOfParameter = 25 ; + } +#Minimum temperature at 1.5m since previous post-processing +'mn15t' = { + table2Version = 174 ; + indicatorOfParameter = 50 ; + } +#Maximum temperature at 1.5m since previous post-processing +'mx15t' = { + table2Version = 174 ; + indicatorOfParameter = 51 ; + } +#Relative humidity at 1.5m +'rhum' = { + table2Version = 174 ; + indicatorOfParameter = 52 ; + } +#Short wave radiation flux at surface +'swrsurf' = { + table2Version = 174 ; + indicatorOfParameter = 116 ; + } +#Short wave radiation flux at top of atmosphere +'swrtop' = { + table2Version = 174 ; + indicatorOfParameter = 117 ; + } +#Total column water vapour +'tcwvap' = { + table2Version = 174 ; + indicatorOfParameter = 137 ; + } +#Large scale rainfall rate +'lsrrate' = { + table2Version = 174 ; + indicatorOfParameter = 142 ; + } +#Convective rainfall rate +'crfrate' = { + table2Version = 174 ; + indicatorOfParameter = 143 ; + } +#Very low cloud amount +'vlca' = { + table2Version = 174 ; + indicatorOfParameter = 186 ; + } +#Convective snowfall rate +'csfrate' = { + table2Version = 174 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall rate +'lsfrate' = { + table2Version = 174 ; + indicatorOfParameter = 240 ; + } +#Total cloud amount - random overlap +'tccro' = { + table2Version = 174 ; + indicatorOfParameter = 248 ; + } +#Total cloud amount in lw radiation +'tcclwr' = { + table2Version = 174 ; + indicatorOfParameter = 249 ; + } +#Aerosol type 13 mass mixing ratio +'aermr13' = { + table2Version = 210 ; + indicatorOfParameter = 13 ; + } +#Aerosol type 14 mass mixing ratio +'aermr14' = { + table2Version = 210 ; + indicatorOfParameter = 14 ; + } +#Aerosol type 15 mass mixing ratio +'aermr15' = { + table2Version = 210 ; + indicatorOfParameter = 15 ; + } +#SO4 aerosol precursor mass mixing ratio +'aerpr03' = { + table2Version = 210 ; + indicatorOfParameter = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'aerwv01' = { + table2Version = 210 ; + indicatorOfParameter = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'aerwv02' = { + table2Version = 210 ; + indicatorOfParameter = 30 ; + } +#DMS surface emission +'emdms' = { + table2Version = 210 ; + indicatorOfParameter = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'aerwv03' = { + table2Version = 210 ; + indicatorOfParameter = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'aerwv04' = { + table2Version = 210 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'~' = { + table2Version = 210 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'~' = { + table2Version = 210 ; + indicatorOfParameter = 56 ; + } +#Mixing ration of organic carbon aerosol, nucleation mode +'ocnuc' = { + table2Version = 210 ; + indicatorOfParameter = 57 ; + } +#Monoterpene precursor mixing ratio +'monot' = { + table2Version = 210 ; + indicatorOfParameter = 58 ; + } +#Secondary organic precursor mixing ratio +'soapr' = { + table2Version = 210 ; + indicatorOfParameter = 59 ; + } +#Particulate matter d < 1 um +'pm1' = { + table2Version = 210 ; + indicatorOfParameter = 72 ; + } +#Particulate matter d < 2.5 um +'pm2p5' = { + table2Version = 210 ; + indicatorOfParameter = 73 ; + } +#Particulate matter d < 10 um +'pm10' = { + table2Version = 210 ; + indicatorOfParameter = 74 ; + } +#Wildfire viewing angle of observation +'vafire' = { + table2Version = 210 ; + indicatorOfParameter = 79 ; + } +#Wildfire Flux of Ethane (C2H6) +'c2h6fire' = { + table2Version = 210 ; + indicatorOfParameter = 118 ; + } +#Altitude of emitter +'ale' = { + table2Version = 210 ; + indicatorOfParameter = 119 ; + } +#Altitude of plume top +'apt' = { + table2Version = 210 ; + indicatorOfParameter = 120 ; + } +#UV visible albedo for direct radiation, isotropic component +'aluvpi' = { + table2Version = 210 ; + indicatorOfParameter = 186 ; + } +#UV visible albedo for direct radiation, volumetric component +'aluvpv' = { + table2Version = 210 ; + indicatorOfParameter = 187 ; + } +#UV visible albedo for direct radiation, geometric component +'aluvpg' = { + table2Version = 210 ; + indicatorOfParameter = 188 ; + } +#Near IR albedo for direct radiation, isotropic component +'alnipi' = { + table2Version = 210 ; + indicatorOfParameter = 189 ; + } +#Near IR albedo for direct radiation, volumetric component +'alnipv' = { + table2Version = 210 ; + indicatorOfParameter = 190 ; + } +#Near IR albedo for direct radiation, geometric component +'alnipg' = { + table2Version = 210 ; + indicatorOfParameter = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component +'aluvdi' = { + table2Version = 210 ; + indicatorOfParameter = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component +'aluvdv' = { + table2Version = 210 ; + indicatorOfParameter = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component +'aluvdg' = { + table2Version = 210 ; + indicatorOfParameter = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component +'alnidi' = { + table2Version = 210 ; + indicatorOfParameter = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component +'alnidv' = { + table2Version = 210 ; + indicatorOfParameter = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component +'alnidg' = { + table2Version = 210 ; + indicatorOfParameter = 197 ; + } +#Total aerosol optical depth at 340 nm +'aod340' = { + table2Version = 210 ; + indicatorOfParameter = 217 ; + } +#Total aerosol optical depth at 355 nm +'aod355' = { + table2Version = 210 ; + indicatorOfParameter = 218 ; + } +#Total aerosol optical depth at 380 nm +'aod380' = { + table2Version = 210 ; + indicatorOfParameter = 219 ; + } +#Total aerosol optical depth at 400 nm +'aod400' = { + table2Version = 210 ; + indicatorOfParameter = 220 ; + } +#Total aerosol optical depth at 440 nm +'aod440' = { + table2Version = 210 ; + indicatorOfParameter = 221 ; + } +#Total aerosol optical depth at 500 nm +'aod500' = { + table2Version = 210 ; + indicatorOfParameter = 222 ; + } +#Total aerosol optical depth at 532 nm +'aod532' = { + table2Version = 210 ; + indicatorOfParameter = 223 ; + } +#Total aerosol optical depth at 645 nm +'aod645' = { + table2Version = 210 ; + indicatorOfParameter = 224 ; + } +#Total aerosol optical depth at 800 nm +'aod800' = { + table2Version = 210 ; + indicatorOfParameter = 225 ; + } +#Total aerosol optical depth at 858 nm +'aod858' = { + table2Version = 210 ; + indicatorOfParameter = 226 ; + } +#Total aerosol optical depth at 1020 nm +'aod1020' = { + table2Version = 210 ; + indicatorOfParameter = 227 ; + } +#Total aerosol optical depth at 1064 nm +'aod1064' = { + table2Version = 210 ; + indicatorOfParameter = 228 ; + } +#Total aerosol optical depth at 1640 nm +'aod1640' = { + table2Version = 210 ; + indicatorOfParameter = 229 ; + } +#Total aerosol optical depth at 2130 nm +'aod2130' = { + table2Version = 210 ; + indicatorOfParameter = 230 ; + } +#Wildfire Flux of Toluene (C7H8) +'c7h8fire' = { + table2Version = 210 ; + indicatorOfParameter = 231 ; + } +#Wildfire Flux of Benzene (C6H6) +'c6h6fire' = { + table2Version = 210 ; + indicatorOfParameter = 232 ; + } +#Wildfire Flux of Xylene (C8H10) +'c8h10fire' = { + table2Version = 210 ; + indicatorOfParameter = 233 ; + } +#Wildfire Flux of Butenes (C4H8) +'c4h8fire' = { + table2Version = 210 ; + indicatorOfParameter = 234 ; + } +#Wildfire Flux of Pentenes (C5H10) +'c5h10fire' = { + table2Version = 210 ; + indicatorOfParameter = 235 ; + } +#Wildfire Flux of Hexene (C6H12) +'c6h12fire' = { + table2Version = 210 ; + indicatorOfParameter = 236 ; + } +#Wildfire Flux of Octene (C8H16) +'c8h16fire' = { + table2Version = 210 ; + indicatorOfParameter = 237 ; + } +#Wildfire Flux of Butanes (C4H10) +'c4h10fire' = { + table2Version = 210 ; + indicatorOfParameter = 238 ; + } +#Wildfire Flux of Pentanes (C5H12) +'c5h12fire' = { + table2Version = 210 ; + indicatorOfParameter = 239 ; + } +#Wildfire Flux of Hexanes (C6H14) +'c6h14fire' = { + table2Version = 210 ; + indicatorOfParameter = 240 ; + } +#Wildfire Flux of Heptane (C7H16) +'c7h16fire' = { + table2Version = 210 ; + indicatorOfParameter = 241 ; + } +#Aerosol type 13 mass mixing ratio +'aermr13diff' = { + table2Version = 211 ; + indicatorOfParameter = 13 ; + } +#Aerosol type 14 mass mixing ratio +'aermr14diff' = { + table2Version = 211 ; + indicatorOfParameter = 14 ; + } +#SO4 aerosol precursor mass mixing ratio +'aerpr03diff' = { + table2Version = 211 ; + indicatorOfParameter = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'aerwv01diff' = { + table2Version = 211 ; + indicatorOfParameter = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'aerwv02diff' = { + table2Version = 211 ; + indicatorOfParameter = 30 ; + } +#DMS surface emission +'emdmsdiff' = { + table2Version = 211 ; + indicatorOfParameter = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'aerwv03diff' = { + table2Version = 211 ; + indicatorOfParameter = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'aerwv04diff' = { + table2Version = 211 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'~' = { + table2Version = 211 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'~' = { + table2Version = 211 ; + indicatorOfParameter = 56 ; + } +#Wildfire Flux of Ethane (C2H6) +'c2h6firediff' = { + table2Version = 211 ; + indicatorOfParameter = 118 ; + } +#Altitude of emitter +'alediff' = { + table2Version = 211 ; + indicatorOfParameter = 119 ; + } +#Altitude of plume top +'aptdiff' = { + table2Version = 211 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 1 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 2 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 3 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 4 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 5 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 6 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 7 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 8 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 9 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 10 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 11 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 12 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 13 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 14 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 15 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 16 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 17 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 18 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 19 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 20 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 21 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 22 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 23 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 24 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 25 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 26 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 27 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 28 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 29 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 30 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 31 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 32 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 33 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 34 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 35 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 36 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 37 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 38 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 39 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 40 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 41 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 42 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 43 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 44 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 46 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 47 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 48 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 49 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 50 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 51 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 52 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 53 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 54 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 56 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 57 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 58 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 59 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 60 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 61 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 62 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 63 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 64 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 65 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 66 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 67 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 68 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 69 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 70 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 71 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 72 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 73 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 74 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 75 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 76 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 77 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 78 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 121 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 122 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 123 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 124 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 125 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 126 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 127 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 128 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 129 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 130 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 131 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 132 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 133 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 134 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 135 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 136 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 137 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 138 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 139 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 140 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 141 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 142 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 143 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 144 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 145 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 146 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 147 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 148 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 149 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 150 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 151 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 152 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 153 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 154 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 155 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 156 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 157 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 158 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 159 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 160 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 161 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 162 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 163 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 164 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 165 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 166 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 167 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 168 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 169 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 170 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 171 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 172 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 173 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 174 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 175 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 176 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 177 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 178 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 180 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 181 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 182 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 183 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 184 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 185 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 186 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 187 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 188 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 189 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 190 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 191 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 192 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 193 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 194 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 195 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 196 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 197 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 198 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 199 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 200 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 201 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 202 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 203 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 204 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 205 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 206 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 207 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 208 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 209 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 210 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 211 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 212 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 213 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 214 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 215 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 216 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 217 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 218 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 219 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 220 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 221 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 222 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 223 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 224 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 225 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 226 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 227 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 228 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 229 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 230 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 231 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 232 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 233 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 234 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 235 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 236 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 237 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 238 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 239 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 240 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 241 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 242 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 243 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 244 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 245 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 246 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 247 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 248 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 249 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 250 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 251 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 252 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 253 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 254 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 255 ; + } +#Random pattern 1 for sppt +'sppt1' = { + table2Version = 213 ; + indicatorOfParameter = 1 ; + } +#Random pattern 2 for sppt +'sppt2' = { + table2Version = 213 ; + indicatorOfParameter = 2 ; + } +#Random pattern 3 for sppt +'sppt3' = { + table2Version = 213 ; + indicatorOfParameter = 3 ; + } +#Random pattern 4 for sppt +'sppt4' = { + table2Version = 213 ; + indicatorOfParameter = 4 ; + } +#Random pattern 5 for sppt +'sppt5' = { + table2Version = 213 ; + indicatorOfParameter = 5 ; + } +# Cosine of solar zenith angle +'uvcossza' = { + table2Version = 214 ; + indicatorOfParameter = 1 ; + } +# UV biologically effective dose +'uvbed' = { + table2Version = 214 ; + indicatorOfParameter = 2 ; + } +# UV biologically effective dose clear-sky +'uvbedcs' = { + table2Version = 214 ; + indicatorOfParameter = 3 ; + } +# Total surface UV spectral flux (280-285 nm) +'uvsflxt280285' = { + table2Version = 214 ; + indicatorOfParameter = 4 ; + } +# Total surface UV spectral flux (285-290 nm) +'uvsflxt285290' = { + table2Version = 214 ; + indicatorOfParameter = 5 ; + } +# Total surface UV spectral flux (290-295 nm) +'uvsflxt290295' = { + table2Version = 214 ; + indicatorOfParameter = 6 ; + } +# Total surface UV spectral flux (295-300 nm) +'uvsflxt295300' = { + table2Version = 214 ; + indicatorOfParameter = 7 ; + } +# Total surface UV spectral flux (300-305 nm) +'uvsflxt300305' = { + table2Version = 214 ; + indicatorOfParameter = 8 ; + } +# Total surface UV spectral flux (305-310 nm) +'uvsflxt305310' = { + table2Version = 214 ; + indicatorOfParameter = 9 ; + } +# Total surface UV spectral flux (310-315 nm) +'uvsflxt310315' = { + table2Version = 214 ; + indicatorOfParameter = 10 ; + } +# Total surface UV spectral flux (315-320 nm) +'uvsflxt315320' = { + table2Version = 214 ; + indicatorOfParameter = 11 ; + } +# Total surface UV spectral flux (320-325 nm) +'uvsflxt320325' = { + table2Version = 214 ; + indicatorOfParameter = 12 ; + } +# Total surface UV spectral flux (325-330 nm) +'uvsflxt325330' = { + table2Version = 214 ; + indicatorOfParameter = 13 ; + } +# Total surface UV spectral flux (330-335 nm) +'uvsflxt330335' = { + table2Version = 214 ; + indicatorOfParameter = 14 ; + } +# Total surface UV spectral flux (335-340 nm) +'uvsflxt335340' = { + table2Version = 214 ; + indicatorOfParameter = 15 ; + } +# Total surface UV spectral flux (340-345 nm) +'uvsflxt340345' = { + table2Version = 214 ; + indicatorOfParameter = 16 ; + } +# Total surface UV spectral flux (345-350 nm) +'uvsflxt345350' = { + table2Version = 214 ; + indicatorOfParameter = 17 ; + } +# Total surface UV spectral flux (350-355 nm) +'uvsflxt350355' = { + table2Version = 214 ; + indicatorOfParameter = 18 ; + } +# Total surface UV spectral flux (355-360 nm) +'uvsflxt355360' = { + table2Version = 214 ; + indicatorOfParameter = 19 ; + } +# Total surface UV spectral flux (360-365 nm) +'uvsflxt360365' = { + table2Version = 214 ; + indicatorOfParameter = 20 ; + } +# Total surface UV spectral flux (365-370 nm) +'uvsflxt365370' = { + table2Version = 214 ; + indicatorOfParameter = 21 ; + } +# Total surface UV spectral flux (370-375 nm) +'uvsflxt370375' = { + table2Version = 214 ; + indicatorOfParameter = 22 ; + } +# Total surface UV spectral flux (375-380 nm) +'uvsflxt375380' = { + table2Version = 214 ; + indicatorOfParameter = 23 ; + } +# Total surface UV spectral flux (380-385 nm) +'uvsflxt380385' = { + table2Version = 214 ; + indicatorOfParameter = 24 ; + } +# Total surface UV spectral flux (385-390 nm) +'uvsflxt385390' = { + table2Version = 214 ; + indicatorOfParameter = 25 ; + } +# Total surface UV spectral flux (390-395 nm) +'uvsflxt390395' = { + table2Version = 214 ; + indicatorOfParameter = 26 ; + } +# Total surface UV spectral flux (395-400 nm) +'uvsflxt395400' = { + table2Version = 214 ; + indicatorOfParameter = 27 ; + } +# Clear-sky surface UV spectral flux (280-285 nm) +'uvsflxcs280285' = { + table2Version = 214 ; + indicatorOfParameter = 28 ; + } +# Clear-sky surface UV spectral flux (285-290 nm) +'uvsflxcs285290' = { + table2Version = 214 ; + indicatorOfParameter = 29 ; + } +# Clear-sky surface UV spectral flux (290-295 nm) +'uvsflxcs290295' = { + table2Version = 214 ; + indicatorOfParameter = 30 ; + } +# Clear-sky surface UV spectral flux (295-300 nm) +'uvsflxcs295300' = { + table2Version = 214 ; + indicatorOfParameter = 31 ; + } +# Clear-sky surface UV spectral flux (300-305 nm) +'uvsflxcs300305' = { + table2Version = 214 ; + indicatorOfParameter = 32 ; + } +# Clear-sky surface UV spectral flux (305-310 nm) +'uvsflxcs305310' = { + table2Version = 214 ; + indicatorOfParameter = 33 ; + } +# Clear-sky surface UV spectral flux (310-315 nm) +'uvsflxcs310315' = { + table2Version = 214 ; + indicatorOfParameter = 34 ; + } +# Clear-sky surface UV spectral flux (315-320 nm) +'uvsflxcs315320' = { + table2Version = 214 ; + indicatorOfParameter = 35 ; + } +# Clear-sky surface UV spectral flux (320-325 nm) +'uvsflxcs320325' = { + table2Version = 214 ; + indicatorOfParameter = 36 ; + } +# Clear-sky surface UV spectral flux (325-330 nm) +'uvsflxcs325330' = { + table2Version = 214 ; + indicatorOfParameter = 37 ; + } +# Clear-sky surface UV spectral flux (330-335 nm) +'uvsflxcs330335' = { + table2Version = 214 ; + indicatorOfParameter = 38 ; + } +# Clear-sky surface UV spectral flux (335-340 nm) +'uvsflxcs335340' = { + table2Version = 214 ; + indicatorOfParameter = 39 ; + } +# Clear-sky surface UV spectral flux (340-345 nm) +'uvsflxcs340345' = { + table2Version = 214 ; + indicatorOfParameter = 40 ; + } +# Clear-sky surface UV spectral flux (345-350 nm) +'uvsflxcs345350' = { + table2Version = 214 ; + indicatorOfParameter = 41 ; + } +# Clear-sky surface UV spectral flux (350-355 nm) +'uvsflxcs350355' = { + table2Version = 214 ; + indicatorOfParameter = 42 ; + } +# Clear-sky surface UV spectral flux (355-360 nm) +'uvsflxcs355360' = { + table2Version = 214 ; + indicatorOfParameter = 43 ; + } +# Clear-sky surface UV spectral flux (360-365 nm) +'uvsflxcs360365' = { + table2Version = 214 ; + indicatorOfParameter = 44 ; + } +# Clear-sky surface UV spectral flux (365-370 nm) +'uvsflxcs365370' = { + table2Version = 214 ; + indicatorOfParameter = 45 ; + } +# Clear-sky surface UV spectral flux (370-375 nm) +'uvsflxcs370375' = { + table2Version = 214 ; + indicatorOfParameter = 46 ; + } +# Clear-sky surface UV spectral flux (375-380 nm) +'uvsflxcs375380' = { + table2Version = 214 ; + indicatorOfParameter = 47 ; + } +# Clear-sky surface UV spectral flux (380-385 nm) +'uvsflxcs380385' = { + table2Version = 214 ; + indicatorOfParameter = 48 ; + } +# Clear-sky surface UV spectral flux (385-390 nm) +'uvsflxcs385390' = { + table2Version = 214 ; + indicatorOfParameter = 49 ; + } +# Clear-sky surface UV spectral flux (390-395 nm) +'uvsflxcs390395' = { + table2Version = 214 ; + indicatorOfParameter = 50 ; + } +# Clear-sky surface UV spectral flux (395-400 nm) +'uvsflxcs395400' = { + table2Version = 214 ; + indicatorOfParameter = 51 ; + } +# Profile of optical thickness at 340 nm +'aot340' = { + table2Version = 214 ; + indicatorOfParameter = 52 ; + } +# Source/gain of sea salt aerosol (0.03 - 0.5 um) +'aersrcsss' = { + table2Version = 215 ; + indicatorOfParameter = 1 ; + } +# Source/gain of sea salt aerosol (0.5 - 5 um) +'aersrcssm' = { + table2Version = 215 ; + indicatorOfParameter = 2 ; + } +# Source/gain of sea salt aerosol (5 - 20 um) +'aersrcssl' = { + table2Version = 215 ; + indicatorOfParameter = 3 ; + } +# Dry deposition of sea salt aerosol (0.03 - 0.5 um) +'aerddpsss' = { + table2Version = 215 ; + indicatorOfParameter = 4 ; + } +# Dry deposition of sea salt aerosol (0.5 - 5 um) +'aerddpssm' = { + table2Version = 215 ; + indicatorOfParameter = 5 ; + } +# Dry deposition of sea salt aerosol (5 - 20 um) +'aerddpssl' = { + table2Version = 215 ; + indicatorOfParameter = 6 ; + } +# Sedimentation of sea salt aerosol (0.03 - 0.5 um) +'aersdmsss' = { + table2Version = 215 ; + indicatorOfParameter = 7 ; + } +# Sedimentation of sea salt aerosol (0.5 - 5 um) +'aersdmssm' = { + table2Version = 215 ; + indicatorOfParameter = 8 ; + } +# Sedimentation of sea salt aerosol (5 - 20 um) +'aersdmssl' = { + table2Version = 215 ; + indicatorOfParameter = 9 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation +'aerwdlssss' = { + table2Version = 215 ; + indicatorOfParameter = 10 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation +'aerwdlsssm' = { + table2Version = 215 ; + indicatorOfParameter = 11 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation +'aerwdlsssl' = { + table2Version = 215 ; + indicatorOfParameter = 12 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation +'aerwdccsss' = { + table2Version = 215 ; + indicatorOfParameter = 13 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation +'aerwdccssm' = { + table2Version = 215 ; + indicatorOfParameter = 14 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation +'aerwdccssl' = { + table2Version = 215 ; + indicatorOfParameter = 15 ; + } +# Negative fixer of sea salt aerosol (0.03 - 0.5 um) +'aerngtsss' = { + table2Version = 215 ; + indicatorOfParameter = 16 ; + } +# Negative fixer of sea salt aerosol (0.5 - 5 um) +'aerngtssm' = { + table2Version = 215 ; + indicatorOfParameter = 17 ; + } +# Negative fixer of sea salt aerosol (5 - 20 um) +'aerngtssl' = { + table2Version = 215 ; + indicatorOfParameter = 18 ; + } +# Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um) +'aermsssss' = { + table2Version = 215 ; + indicatorOfParameter = 19 ; + } +# Vertically integrated mass of sea salt aerosol (0.5 - 5 um) +'aermssssm' = { + table2Version = 215 ; + indicatorOfParameter = 20 ; + } +# Vertically integrated mass of sea salt aerosol (5 - 20 um) +'aermssssl' = { + table2Version = 215 ; + indicatorOfParameter = 21 ; + } +# Sea salt aerosol (0.03 - 0.5 um) optical depth +'aerodsss' = { + table2Version = 215 ; + indicatorOfParameter = 22 ; + } +# Sea salt aerosol (0.5 - 5 um) optical depth +'aerodssm' = { + table2Version = 215 ; + indicatorOfParameter = 23 ; + } +# Sea salt aerosol (5 - 20 um) optical depth +'aerodssl' = { + table2Version = 215 ; + indicatorOfParameter = 24 ; + } +# Source/gain of dust aerosol (0.03 - 0.55 um) +'aersrcdus' = { + table2Version = 215 ; + indicatorOfParameter = 25 ; + } +# Source/gain of dust aerosol (0.55 - 9 um) +'aersrcdum' = { + table2Version = 215 ; + indicatorOfParameter = 26 ; + } +# Source/gain of dust aerosol (9 - 20 um) +'aersrcdul' = { + table2Version = 215 ; + indicatorOfParameter = 27 ; + } +# Dry deposition of dust aerosol (0.03 - 0.55 um) +'aerddpdus' = { + table2Version = 215 ; + indicatorOfParameter = 28 ; + } +# Dry deposition of dust aerosol (0.55 - 9 um) +'aerddpdum' = { + table2Version = 215 ; + indicatorOfParameter = 29 ; + } +# Dry deposition of dust aerosol (9 - 20 um) +'aerddpdul' = { + table2Version = 215 ; + indicatorOfParameter = 30 ; + } +# Sedimentation of dust aerosol (0.03 - 0.55 um) +'aersdmdus' = { + table2Version = 215 ; + indicatorOfParameter = 31 ; + } +# Sedimentation of dust aerosol (0.55 - 9 um) +'aersdmdum' = { + table2Version = 215 ; + indicatorOfParameter = 32 ; + } +# Sedimentation of dust aerosol (9 - 20 um) +'aersdmdul' = { + table2Version = 215 ; + indicatorOfParameter = 33 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation +'aerwdlsdus' = { + table2Version = 215 ; + indicatorOfParameter = 34 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation +'aerwdlsdum' = { + table2Version = 215 ; + indicatorOfParameter = 35 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation +'aerwdlsdul' = { + table2Version = 215 ; + indicatorOfParameter = 36 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation +'aerwdccdus' = { + table2Version = 215 ; + indicatorOfParameter = 37 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation +'aerwdccdum' = { + table2Version = 215 ; + indicatorOfParameter = 38 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by convective precipitation +'aerwdccdul' = { + table2Version = 215 ; + indicatorOfParameter = 39 ; + } +# Negative fixer of dust aerosol (0.03 - 0.55 um) +'aerngtdus' = { + table2Version = 215 ; + indicatorOfParameter = 40 ; + } +# Negative fixer of dust aerosol (0.55 - 9 um) +'aerngtdum' = { + table2Version = 215 ; + indicatorOfParameter = 41 ; + } +# Negative fixer of dust aerosol (9 - 20 um) +'aerngtdul' = { + table2Version = 215 ; + indicatorOfParameter = 42 ; + } +# Vertically integrated mass of dust aerosol (0.03 - 0.55 um) +'aermssdus' = { + table2Version = 215 ; + indicatorOfParameter = 43 ; + } +# Vertically integrated mass of dust aerosol (0.55 - 9 um) +'aermssdum' = { + table2Version = 215 ; + indicatorOfParameter = 44 ; + } +# Vertically integrated mass of dust aerosol (9 - 20 um) +'aermssdul' = { + table2Version = 215 ; + indicatorOfParameter = 45 ; + } +# Dust aerosol (0.03 - 0.55 um) optical depth +'aeroddus' = { + table2Version = 215 ; + indicatorOfParameter = 46 ; + } +# Dust aerosol (0.55 - 9 um) optical depth +'aeroddum' = { + table2Version = 215 ; + indicatorOfParameter = 47 ; + } +# Dust aerosol (9 - 20 um) optical depth +'aeroddul' = { + table2Version = 215 ; + indicatorOfParameter = 48 ; + } +# Source/gain of hydrophobic organic matter aerosol +'aersrcomhphob' = { + table2Version = 215 ; + indicatorOfParameter = 49 ; + } +# Source/gain of hydrophilic organic matter aerosol +'aersrcomhphil' = { + table2Version = 215 ; + indicatorOfParameter = 50 ; + } +# Dry deposition of hydrophobic organic matter aerosol +'aerddpomhphob' = { + table2Version = 215 ; + indicatorOfParameter = 51 ; + } +# Dry deposition of hydrophilic organic matter aerosol +'aerddpomhphil' = { + table2Version = 215 ; + indicatorOfParameter = 52 ; + } +# Sedimentation of hydrophobic organic matter aerosol +'aersdmomhphob' = { + table2Version = 215 ; + indicatorOfParameter = 53 ; + } +# Sedimentation of hydrophilic organic matter aerosol +'aersdmomhphil' = { + table2Version = 215 ; + indicatorOfParameter = 54 ; + } +# Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation +'aerwdlsomhphob' = { + table2Version = 215 ; + indicatorOfParameter = 55 ; + } +# Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation +'aerwdlsomhphil' = { + table2Version = 215 ; + indicatorOfParameter = 56 ; + } +# Wet deposition of hydrophobic organic matter aerosol by convective precipitation +'aerwdccomhphob' = { + table2Version = 215 ; + indicatorOfParameter = 57 ; + } +# Wet deposition of hydrophilic organic matter aerosol by convective precipitation +'aerwdccomhphil' = { + table2Version = 215 ; + indicatorOfParameter = 58 ; + } +# Negative fixer of hydrophobic organic matter aerosol +'aerngtomhphob' = { + table2Version = 215 ; + indicatorOfParameter = 59 ; + } +# Negative fixer of hydrophilic organic matter aerosol +'aerngtomhphil' = { + table2Version = 215 ; + indicatorOfParameter = 60 ; + } +# Vertically integrated mass of hydrophobic organic matter aerosol +'aermssomhphob' = { + table2Version = 215 ; + indicatorOfParameter = 61 ; + } +# Vertically integrated mass of hydrophilic organic matter aerosol +'aermssomhphil' = { + table2Version = 215 ; + indicatorOfParameter = 62 ; + } +# Hydrophobic organic matter aerosol optical depth +'aerodomhphob' = { + table2Version = 215 ; + indicatorOfParameter = 63 ; + } +# Hydrophilic organic matter aerosol optical depth +'aerodomhphil' = { + table2Version = 215 ; + indicatorOfParameter = 64 ; + } +# Source/gain of hydrophobic black carbon aerosol +'aersrcbchphob' = { + table2Version = 215 ; + indicatorOfParameter = 65 ; + } +# Source/gain of hydrophilic black carbon aerosol +'aersrcbchphil' = { + table2Version = 215 ; + indicatorOfParameter = 66 ; + } +# Dry deposition of hydrophobic black carbon aerosol +'aerddpbchphob' = { + table2Version = 215 ; + indicatorOfParameter = 67 ; + } +# Dry deposition of hydrophilic black carbon aerosol +'aerddpbchphil' = { + table2Version = 215 ; + indicatorOfParameter = 68 ; + } +# Sedimentation of hydrophobic black carbon aerosol +'aersdmbchphob' = { + table2Version = 215 ; + indicatorOfParameter = 69 ; + } +# Sedimentation of hydrophilic black carbon aerosol +'aersdmbchphil' = { + table2Version = 215 ; + indicatorOfParameter = 70 ; + } +# Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation +'aerwdlsbchphob' = { + table2Version = 215 ; + indicatorOfParameter = 71 ; + } +# Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation +'aerwdlsbchphil' = { + table2Version = 215 ; + indicatorOfParameter = 72 ; + } +# Wet deposition of hydrophobic black carbon aerosol by convective precipitation +'aerwdccbchphob' = { + table2Version = 215 ; + indicatorOfParameter = 73 ; + } +# Wet deposition of hydrophilic black carbon aerosol by convective precipitation +'aerwdccbchphil' = { + table2Version = 215 ; + indicatorOfParameter = 74 ; + } +# Negative fixer of hydrophobic black carbon aerosol +'aerngtbchphob' = { + table2Version = 215 ; + indicatorOfParameter = 75 ; + } +# Negative fixer of hydrophilic black carbon aerosol +'aerngtbchphil' = { + table2Version = 215 ; + indicatorOfParameter = 76 ; + } +# Vertically integrated mass of hydrophobic black carbon aerosol +'aermssbchphob' = { + table2Version = 215 ; + indicatorOfParameter = 77 ; + } +# Vertically integrated mass of hydrophilic black carbon aerosol +'aermssbchphil' = { + table2Version = 215 ; + indicatorOfParameter = 78 ; + } +# Hydrophobic black carbon aerosol optical depth +'aerodbchphob' = { + table2Version = 215 ; + indicatorOfParameter = 79 ; + } +# Hydrophilic black carbon aerosol optical depth +'aerodbchphil' = { + table2Version = 215 ; + indicatorOfParameter = 80 ; + } +# Source/gain of sulphate aerosol +'aersrcsu' = { + table2Version = 215 ; + indicatorOfParameter = 81 ; + } +# Dry deposition of sulphate aerosol +'aerddpsu' = { + table2Version = 215 ; + indicatorOfParameter = 82 ; + } +# Sedimentation of sulphate aerosol +'aersdmsu' = { + table2Version = 215 ; + indicatorOfParameter = 83 ; + } +# Wet deposition of sulphate aerosol by large-scale precipitation +'aerwdlssu' = { + table2Version = 215 ; + indicatorOfParameter = 84 ; + } +# Wet deposition of sulphate aerosol by convective precipitation +'aerwdccsu' = { + table2Version = 215 ; + indicatorOfParameter = 85 ; + } +# Negative fixer of sulphate aerosol +'aerngtsu' = { + table2Version = 215 ; + indicatorOfParameter = 86 ; + } +# Vertically integrated mass of sulphate aerosol +'aermsssu' = { + table2Version = 215 ; + indicatorOfParameter = 87 ; + } +# Sulphate aerosol optical depth +'aerodsu' = { + table2Version = 215 ; + indicatorOfParameter = 88 ; + } +#Accumulated total aerosol optical depth at 550 nm +'accaod550' = { + table2Version = 215 ; + indicatorOfParameter = 89 ; + } +#Effective (snow effect included) UV visible albedo for direct radiation +'aluvpsn' = { + table2Version = 215 ; + indicatorOfParameter = 90 ; + } +#10 metre wind speed dust emission potential +'aerdep10si' = { + table2Version = 215 ; + indicatorOfParameter = 91 ; + } +#10 metre wind gustiness dust emission potential +'aerdep10fg' = { + table2Version = 215 ; + indicatorOfParameter = 92 ; + } +#Profile of total aerosol optical depth at 532 nm +'paod532' = { + table2Version = 215 ; + indicatorOfParameter = 93 ; + } +#Profile of natural (sea-salt and dust) aerosol optical depth at 532 nm +'pnaod532' = { + table2Version = 215 ; + indicatorOfParameter = 94 ; + } +#Profile of antropogenic (black carbon, organic matter, sulphate) aerosol optical depth at 532 nm +'paaod532' = { + table2Version = 215 ; + indicatorOfParameter = 95 ; + } +#Total absorption aerosol optical depth at 340 nm +'aodabs340' = { + table2Version = 215 ; + indicatorOfParameter = 96 ; + } +#Total absorption aerosol optical depth at 355 nm +'aodabs355' = { + table2Version = 215 ; + indicatorOfParameter = 97 ; + } +#Total absorption aerosol optical depth at 380 nm +'aodabs380' = { + table2Version = 215 ; + indicatorOfParameter = 98 ; + } +#Total absorption aerosol optical depth at 400 nm +'aodabs400' = { + table2Version = 215 ; + indicatorOfParameter = 99 ; + } +#Total absorption aerosol optical depth at 440 nm +'aodabs440' = { + table2Version = 215 ; + indicatorOfParameter = 100 ; + } +#Total absorption aerosol optical depth at 469 nm +'aodabs469' = { + table2Version = 215 ; + indicatorOfParameter = 101 ; + } +#Total absorption aerosol optical depth at 500 nm +'aodabs500' = { + table2Version = 215 ; + indicatorOfParameter = 102 ; + } +#Total absorption aerosol optical depth at 532 nm +'aodabs532' = { + table2Version = 215 ; + indicatorOfParameter = 103 ; + } +#Total absorption aerosol optical depth at 550 nm +'aodabs550' = { + table2Version = 215 ; + indicatorOfParameter = 104 ; + } +#Total absorption aerosol optical depth at 645 nm +'aodabs645' = { + table2Version = 215 ; + indicatorOfParameter = 105 ; + } +#Total absorption aerosol optical depth at 670 nm +'aodabs670' = { + table2Version = 215 ; + indicatorOfParameter = 106 ; + } +#Total absorption aerosol optical depth at 800 nm +'aodabs800' = { + table2Version = 215 ; + indicatorOfParameter = 107 ; + } +#Total absorption aerosol optical depth at 858 nm +'aodabs858' = { + table2Version = 215 ; + indicatorOfParameter = 108 ; + } +#Total absorption aerosol optical depth at 865 nm +'aodabs865' = { + table2Version = 215 ; + indicatorOfParameter = 109 ; + } +#Total absorption aerosol optical depth at 1020 nm +'aodabs1020' = { + table2Version = 215 ; + indicatorOfParameter = 110 ; + } +#Total absorption aerosol optical depth at 1064 nm +'aodabs1064' = { + table2Version = 215 ; + indicatorOfParameter = 111 ; + } +#Total absorption aerosol optical depth at 1240 nm +'aodabs1240' = { + table2Version = 215 ; + indicatorOfParameter = 112 ; + } +#Total absorption aerosol optical depth at 1640 nm +'aodabs1640' = { + table2Version = 215 ; + indicatorOfParameter = 113 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm +'aodfm340' = { + table2Version = 215 ; + indicatorOfParameter = 114 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm +'aodfm355' = { + table2Version = 215 ; + indicatorOfParameter = 115 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm +'aodfm380' = { + table2Version = 215 ; + indicatorOfParameter = 116 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm +'aodfm400' = { + table2Version = 215 ; + indicatorOfParameter = 117 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm +'aodfm440' = { + table2Version = 215 ; + indicatorOfParameter = 118 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm +'aodfm469' = { + table2Version = 215 ; + indicatorOfParameter = 119 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm +'aodfm500' = { + table2Version = 215 ; + indicatorOfParameter = 120 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm +'aodfm532' = { + table2Version = 215 ; + indicatorOfParameter = 121 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm +'aodfm550' = { + table2Version = 215 ; + indicatorOfParameter = 122 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm +'aodfm645' = { + table2Version = 215 ; + indicatorOfParameter = 123 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm +'aodfm670' = { + table2Version = 215 ; + indicatorOfParameter = 124 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm +'aodfm800' = { + table2Version = 215 ; + indicatorOfParameter = 125 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm +'aodfm858' = { + table2Version = 215 ; + indicatorOfParameter = 126 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm +'aodfm865' = { + table2Version = 215 ; + indicatorOfParameter = 127 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm +'aodfm1020' = { + table2Version = 215 ; + indicatorOfParameter = 128 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm +'aodfm1064' = { + table2Version = 215 ; + indicatorOfParameter = 129 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm +'aodfm1240' = { + table2Version = 215 ; + indicatorOfParameter = 130 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm +'aodfm1640' = { + table2Version = 215 ; + indicatorOfParameter = 131 ; + } +#Single scattering albedo at 340 nm +'ssa340' = { + table2Version = 215 ; + indicatorOfParameter = 132 ; + } +#Single scattering albedo at 355 nm +'ssa355' = { + table2Version = 215 ; + indicatorOfParameter = 133 ; + } +#Single scattering albedo at 380 nm +'ssa380' = { + table2Version = 215 ; + indicatorOfParameter = 134 ; + } +#Single scattering albedo at 400 nm +'ssa400' = { + table2Version = 215 ; + indicatorOfParameter = 135 ; + } +#Single scattering albedo at 440 nm +'ssa440' = { + table2Version = 215 ; + indicatorOfParameter = 136 ; + } +#Single scattering albedo at 469 nm +'ssa469' = { + table2Version = 215 ; + indicatorOfParameter = 137 ; + } +#Single scattering albedo at 500 nm +'ssa500' = { + table2Version = 215 ; + indicatorOfParameter = 138 ; + } +#Single scattering albedo at 532 nm +'ssa532' = { + table2Version = 215 ; + indicatorOfParameter = 139 ; + } +#Single scattering albedo at 550 nm +'ssa550' = { + table2Version = 215 ; + indicatorOfParameter = 140 ; + } +#Single scattering albedo at 645 nm +'ssa645' = { + table2Version = 215 ; + indicatorOfParameter = 141 ; + } +#Single scattering albedo at 670 nm +'ssa670' = { + table2Version = 215 ; + indicatorOfParameter = 142 ; + } +#Single scattering albedo at 800 nm +'ssa800' = { + table2Version = 215 ; + indicatorOfParameter = 143 ; + } +#Single scattering albedo at 858 nm +'ssa858' = { + table2Version = 215 ; + indicatorOfParameter = 144 ; + } +#Single scattering albedo at 865 nm +'ssa865' = { + table2Version = 215 ; + indicatorOfParameter = 145 ; + } +#Single scattering albedo at 1020 nm +'ssa1020' = { + table2Version = 215 ; + indicatorOfParameter = 146 ; + } +#Single scattering albedo at 1064 nm +'ssa1064' = { + table2Version = 215 ; + indicatorOfParameter = 147 ; + } +#Single scattering albedo at 1240 nm +'ssa1240' = { + table2Version = 215 ; + indicatorOfParameter = 148 ; + } +#Single scattering albedo at 1640 nm +'ssa1640' = { + table2Version = 215 ; + indicatorOfParameter = 149 ; + } +#Assimetry factor at 340 nm +'assimetry340' = { + table2Version = 215 ; + indicatorOfParameter = 150 ; + } +#Assimetry factor at 355 nm +'assimetry355' = { + table2Version = 215 ; + indicatorOfParameter = 151 ; + } +#Assimetry factor at 380 nm +'assimetry380' = { + table2Version = 215 ; + indicatorOfParameter = 152 ; + } +#Assimetry factor at 400 nm +'assimetry400' = { + table2Version = 215 ; + indicatorOfParameter = 153 ; + } +#Assimetry factor at 440 nm +'assimetry440' = { + table2Version = 215 ; + indicatorOfParameter = 154 ; + } +#Assimetry factor at 469 nm +'assimetry469' = { + table2Version = 215 ; + indicatorOfParameter = 155 ; + } +#Assimetry factor at 500 nm +'assimetry500' = { + table2Version = 215 ; + indicatorOfParameter = 156 ; + } +#Assimetry factor at 532 nm +'assimetry532' = { + table2Version = 215 ; + indicatorOfParameter = 157 ; + } +#Assimetry factor at 550 nm +'assimetry550' = { + table2Version = 215 ; + indicatorOfParameter = 158 ; + } +#Assimetry factor at 645 nm +'assimetry645' = { + table2Version = 215 ; + indicatorOfParameter = 159 ; + } +#Assimetry factor at 670 nm +'assimetry670' = { + table2Version = 215 ; + indicatorOfParameter = 160 ; + } +#Assimetry factor at 800 nm +'assimetry800' = { + table2Version = 215 ; + indicatorOfParameter = 161 ; + } +#Assimetry factor at 858 nm +'assimetry858' = { + table2Version = 215 ; + indicatorOfParameter = 162 ; + } +#Assimetry factor at 865 nm +'assimetry865' = { + table2Version = 215 ; + indicatorOfParameter = 163 ; + } +#Assimetry factor at 1020 nm +'assimetry1020' = { + table2Version = 215 ; + indicatorOfParameter = 164 ; + } +#Assimetry factor at 1064 nm +'assimetry1064' = { + table2Version = 215 ; + indicatorOfParameter = 165 ; + } +#Assimetry factor at 1240 nm +'assimetry1240' = { + table2Version = 215 ; + indicatorOfParameter = 166 ; + } +#Assimetry factor at 1640 nm +'assimetry1640' = { + table2Version = 215 ; + indicatorOfParameter = 167 ; + } +#Source/gain of sulphur dioxide +'aersrcso2' = { + table2Version = 215 ; + indicatorOfParameter = 168 ; + } +#Dry deposition of sulphur dioxide +'aerddpso2' = { + table2Version = 215 ; + indicatorOfParameter = 169 ; + } +#Sedimentation of sulphur dioxide +'aersdmso2' = { + table2Version = 215 ; + indicatorOfParameter = 170 ; + } +#Wet deposition of sulphur dioxide by large-scale precipitation +'aerwdlsso2' = { + table2Version = 215 ; + indicatorOfParameter = 171 ; + } +#Wet deposition of sulphur dioxide by convective precipitation +'aerwdccso2' = { + table2Version = 215 ; + indicatorOfParameter = 172 ; + } +#Negative fixer of sulphur dioxide +'aerngtso2' = { + table2Version = 215 ; + indicatorOfParameter = 173 ; + } +#Vertically integrated mass of sulphur dioxide +'aermssso2' = { + table2Version = 215 ; + indicatorOfParameter = 174 ; + } +#Sulphur dioxide optical depth +'aerodso2' = { + table2Version = 215 ; + indicatorOfParameter = 175 ; + } +#Total absorption aerosol optical depth at 2130 nm +'aodabs2130' = { + table2Version = 215 ; + indicatorOfParameter = 176 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm +'aodfm2130' = { + table2Version = 215 ; + indicatorOfParameter = 177 ; + } +#Single scattering albedo at 2130 nm +'ssa2130' = { + table2Version = 215 ; + indicatorOfParameter = 178 ; + } +#Assimetry factor at 2130 nm +'assimetry2130' = { + table2Version = 215 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 1 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 2 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 3 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 4 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 5 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 6 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 7 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 8 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 9 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 10 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 11 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 12 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 13 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 14 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 15 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 16 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 17 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 18 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 19 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 20 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 21 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 22 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 23 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 24 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 25 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 26 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 27 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 28 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 29 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 30 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 31 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 32 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 33 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 34 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 35 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 36 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 37 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 38 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 39 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 40 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 41 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 42 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 43 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 44 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 46 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 47 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 48 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 49 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 50 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 51 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 52 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 53 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 54 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 56 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 57 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 58 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 59 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 60 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 61 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 62 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 63 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 64 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 65 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 66 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 67 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 68 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 69 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 70 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 71 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 72 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 73 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 74 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 75 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 76 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 77 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 78 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 121 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 122 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 123 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 124 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 125 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 126 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 127 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 128 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 129 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 130 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 131 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 132 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 133 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 134 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 135 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 136 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 137 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 138 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 139 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 140 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 141 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 142 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 143 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 144 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 145 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 146 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 147 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 148 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 149 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 150 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 151 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 152 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 153 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 154 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 155 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 156 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 157 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 158 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 159 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 160 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 161 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 162 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 163 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 164 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 165 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 166 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 167 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 168 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 169 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 170 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 171 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 172 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 173 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 174 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 175 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 176 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 177 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 178 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 180 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 181 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 182 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 183 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 184 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 185 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 186 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 187 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 188 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 189 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 190 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 191 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 192 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 193 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 194 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 195 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 196 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 197 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 198 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 199 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 200 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 201 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 202 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 203 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 204 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 205 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 206 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 207 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 208 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 209 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 210 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 211 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 212 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 213 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 214 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 215 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 216 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 217 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 218 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 219 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 220 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 221 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 222 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 223 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 224 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 225 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 226 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 227 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 228 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 229 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 230 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 231 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 232 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 233 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 234 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 235 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 236 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 237 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 238 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 239 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 240 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 241 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 242 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 243 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 244 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 245 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 246 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 247 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 248 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 249 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 250 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 251 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 252 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 253 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 254 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 255 ; + } +#Total sky direct solar radiation at surface +'fdir' = { + table2Version = 228 ; + indicatorOfParameter = 21 ; + } +#Clear-sky direct solar radiation at surface +'cdir' = { + table2Version = 228 ; + indicatorOfParameter = 22 ; + } +#Cloud base height +'cbh' = { + table2Version = 228 ; + indicatorOfParameter = 23 ; + } +#Zero degree level +'deg0l' = { + table2Version = 228 ; + indicatorOfParameter = 24 ; + } +#Horizontal visibility +'hvis' = { + table2Version = 228 ; + indicatorOfParameter = 25 ; + } +#Maximum temperature at 2 metres in the last 3 hours +'mx2t3' = { + table2Version = 228 ; + indicatorOfParameter = 26 ; + } +#Minimum temperature at 2 metres in the last 3 hours +'mn2t3' = { + table2Version = 228 ; + indicatorOfParameter = 27 ; + } +#10 metre wind gust in the last 3 hours +'10fg3' = { + table2Version = 228 ; + indicatorOfParameter = 28 ; + } +#Soil wetness index in layer 1 +'swi1' = { + table2Version = 228 ; + indicatorOfParameter = 40 ; + } +#Soil wetness index in layer 2 +'swi2' = { + table2Version = 228 ; + indicatorOfParameter = 41 ; + } +#Soil wetness index in layer 3 +'swi3' = { + table2Version = 228 ; + indicatorOfParameter = 42 ; + } +#Soil wetness index in layer 4 +'swi4' = { + table2Version = 228 ; + indicatorOfParameter = 43 ; + } +#Accumulated Carbon Dioxide Net Ecosystem Exchange +'aco2nee' = { + table2Version = 228 ; + indicatorOfParameter = 80 ; + } +#Accumulated Carbon Dioxide Gross Primary Production +'aco2gpp' = { + table2Version = 228 ; + indicatorOfParameter = 81 ; + } +#Accumulated Carbon Dioxide Ecosystem Respiration +'aco2rec' = { + table2Version = 228 ; + indicatorOfParameter = 82 ; + } +#Flux of Carbon Dioxide Net Ecosystem Exchange +'fco2nee' = { + table2Version = 228 ; + indicatorOfParameter = 83 ; + } +#Flux of Carbon Dioxide Gross Primary Production +'fco2gpp' = { + table2Version = 228 ; + indicatorOfParameter = 84 ; + } +#Flux of Carbon Dioxide Ecosystem Respiration +'fco2rec' = { + table2Version = 228 ; + indicatorOfParameter = 85 ; + } +#Total column rain water +'tcrw' = { + table2Version = 228 ; + indicatorOfParameter = 89 ; + } +#Total column snow water +'tcsw' = { + table2Version = 228 ; + indicatorOfParameter = 90 ; + } +#Canopy cover fraction +'ccf' = { + table2Version = 228 ; + indicatorOfParameter = 91 ; + } +#Soil texture fraction +'stf' = { + table2Version = 228 ; + indicatorOfParameter = 92 ; + } +#Volumetric soil moisture +'swv' = { + table2Version = 228 ; + indicatorOfParameter = 93 ; + } +#Ice temperature +'ist' = { + table2Version = 228 ; + indicatorOfParameter = 94 ; + } +#Surface solar radiation downward clear-sky +'ssrdc' = { + table2Version = 228 ; + indicatorOfParameter = 129 ; + } +#Surface thermal radiation downward clear-sky +'strdc' = { + table2Version = 228 ; + indicatorOfParameter = 130 ; + } +#SMOS first Brightness Temperature Bias Correction parameter +'smos_tb_cdfa' = { + table2Version = 228 ; + indicatorOfParameter = 229 ; + } +#SMOS second Brightness Temperature Bias Correction parameter +'smos_tb_cdfb' = { + table2Version = 228 ; + indicatorOfParameter = 230 ; + } +#Surface solar radiation diffuse total sky +'fdif' = { + table2Version = 228 ; + indicatorOfParameter = 242 ; + } +#Surface solar radiation diffuse clear-sky +'cdif' = { + table2Version = 228 ; + indicatorOfParameter = 243 ; + } +#Surface albedo of direct radiation +'aldr' = { + table2Version = 228 ; + indicatorOfParameter = 244 ; + } +#Surface albedo of diffuse radiation +'aldf' = { + table2Version = 228 ; + indicatorOfParameter = 245 ; + } +#100 metre wind speed +'100si' = { + table2Version = 228 ; + indicatorOfParameter = 249 ; + } +#Irrigation fraction +'irrfr' = { + table2Version = 228 ; + indicatorOfParameter = 250 ; + } +#Potential evaporation +'pev' = { + table2Version = 228 ; + indicatorOfParameter = 251 ; + } +#Irrigation +'irr' = { + table2Version = 228 ; + indicatorOfParameter = 252 ; + } +#Surface runoff (variable resolution) +'srovar' = { + table2Version = 230 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff (variable resolution) +'ssrovar' = { + table2Version = 230 ; + indicatorOfParameter = 9 ; + } +#Total sky direct solar radiation at surface (variable resolution) +'fdirvar' = { + table2Version = 230 ; + indicatorOfParameter = 21 ; + } +#Clear-sky direct solar radiation at surface (variable resolution) +'cdirvar' = { + table2Version = 230 ; + indicatorOfParameter = 22 ; + } +#Albedo (variable resolution) +'alvar' = { + table2Version = 230 ; + indicatorOfParameter = 174 ; + } +#Total precipitation (variable resolution) +'tpvar' = { + table2Version = 230 ; + indicatorOfParameter = 228 ; + } +#K index +'kx' = { + table2Version = 228 ; + indicatorOfParameter = 121 ; + } +#Total totals index +'totalx' = { + table2Version = 228 ; + indicatorOfParameter = 123 ; + } +#Stream function gradient +'strfgrd' = { + table2Version = 129 ; + indicatorOfParameter = 1 ; + } +#Velocity potential gradient +'vpotgrd' = { + table2Version = 129 ; + indicatorOfParameter = 2 ; + } +#Potential temperature gradient +'ptgrd' = { + table2Version = 129 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature gradient +'eqptgrd' = { + table2Version = 129 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature gradient +'septgrd' = { + table2Version = 129 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind gradient +'udvwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind gradient +'vdvwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind gradient +'urtwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind gradient +'vrtwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature gradient +'uctpgrd' = { + table2Version = 129 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure gradient +'uclngrd' = { + table2Version = 129 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence gradient +'ucdvgrd' = { + table2Version = 129 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 129 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 129 ; + indicatorOfParameter = 25 ; + } +#Lake cover gradient +'clgrd' = { + table2Version = 129 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover gradient +'cvlgrd' = { + table2Version = 129 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover gradient +'cvhgrd' = { + table2Version = 129 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation gradient +'tvlgrd' = { + table2Version = 129 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation gradient +'tvhgrd' = { + table2Version = 129 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover gradient +'sicgrd' = { + table2Version = 129 ; + indicatorOfParameter = 31 ; + } +#Snow albedo gradient +'asngrd' = { + table2Version = 129 ; + indicatorOfParameter = 32 ; + } +#Snow density gradient +'rsngrd' = { + table2Version = 129 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature gradient +'sstkgrd' = { + table2Version = 129 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature layer 1 gradient +'istl1grd' = { + table2Version = 129 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature layer 2 gradient +'istl2grd' = { + table2Version = 129 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature layer 3 gradient +'istl3grd' = { + table2Version = 129 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature layer 4 gradient +'istl4grd' = { + table2Version = 129 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 gradient +'swvl1grd' = { + table2Version = 129 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 gradient +'swvl2grd' = { + table2Version = 129 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 gradient +'swvl3grd' = { + table2Version = 129 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 gradient +'swvl4grd' = { + table2Version = 129 ; + indicatorOfParameter = 42 ; + } +#Soil type gradient +'sltgrd' = { + table2Version = 129 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation gradient +'esgrd' = { + table2Version = 129 ; + indicatorOfParameter = 44 ; + } +#Snowmelt gradient +'smltgrd' = { + table2Version = 129 ; + indicatorOfParameter = 45 ; + } +#Solar duration gradient +'sdurgrd' = { + table2Version = 129 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation gradient +'dsrpgrd' = { + table2Version = 129 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress gradient +'magssgrd' = { + table2Version = 129 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust gradient +'10fggrd' = { + table2Version = 129 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction gradient +'lspfgrd' = { + table2Version = 129 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature gradient +'mx2t24grd' = { + table2Version = 129 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature gradient +'mn2t24grd' = { + table2Version = 129 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential gradient +'montgrd' = { + table2Version = 129 ; + indicatorOfParameter = 53 ; + } +#Pressure gradient +'presgrd' = { + table2Version = 129 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'mean2t24grd' = { + table2Version = 129 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours gradient +'mn2d24grd' = { + table2Version = 129 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface gradient +'uvbgrd' = { + table2Version = 129 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface gradient +'pargrd' = { + table2Version = 129 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy gradient +'capegrd' = { + table2Version = 129 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity gradient +'pvgrd' = { + table2Version = 129 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations gradient +'tpogrd' = { + table2Version = 129 ; + indicatorOfParameter = 61 ; + } +#Observation count gradient +'obctgrd' = { + table2Version = 129 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'~' = { + table2Version = 129 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'~' = { + table2Version = 129 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'~' = { + table2Version = 129 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'~' = { + table2Version = 129 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'~' = { + table2Version = 129 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'~' = { + table2Version = 129 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'~' = { + table2Version = 129 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'~' = { + table2Version = 129 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'~' = { + table2Version = 129 ; + indicatorOfParameter = 71 ; + } +#Total column liquid water +'~' = { + table2Version = 129 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'~' = { + table2Version = 129 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres gradient +'mx2t6grd' = { + table2Version = 129 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres gradient +'mn2t6grd' = { + table2Version = 129 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours gradient +'10fg6grd' = { + table2Version = 129 ; + indicatorOfParameter = 123 ; + } +#Vertically integrated total energy +'~' = { + table2Version = 129 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'~' = { + table2Version = 129 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide gradient +'atgrd' = { + table2Version = 129 ; + indicatorOfParameter = 127 ; + } +#Budget values gradient +'bvgrd' = { + table2Version = 129 ; + indicatorOfParameter = 128 ; + } +#Geopotential gradient +'zgrd' = { + table2Version = 129 ; + indicatorOfParameter = 129 ; + } +#Temperature gradient +'tgrd' = { + table2Version = 129 ; + indicatorOfParameter = 130 ; + } +#U component of wind gradient +'ugrd' = { + table2Version = 129 ; + indicatorOfParameter = 131 ; + } +#V component of wind gradient +'vgrd' = { + table2Version = 129 ; + indicatorOfParameter = 132 ; + } +#Specific humidity gradient +'qgrd' = { + table2Version = 129 ; + indicatorOfParameter = 133 ; + } +#Surface pressure gradient +'spgrd' = { + table2Version = 129 ; + indicatorOfParameter = 134 ; + } +#vertical velocity (pressure) gradient +'wgrd' = { + table2Version = 129 ; + indicatorOfParameter = 135 ; + } +#Total column water gradient +'tcwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour gradient +'tcwvgrd' = { + table2Version = 129 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) gradient +'vogrd' = { + table2Version = 129 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 gradient +'stl1grd' = { + table2Version = 129 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 gradient +'swl1grd' = { + table2Version = 129 ; + indicatorOfParameter = 140 ; + } +#Snow depth gradient +'sdgrd' = { + table2Version = 129 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) gradient +'lspgrd' = { + table2Version = 129 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation gradient +'cpgrd' = { + table2Version = 129 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) gradient +'sfgrd' = { + table2Version = 129 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation gradient +'bldgrd' = { + table2Version = 129 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux gradient +'sshfgrd' = { + table2Version = 129 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux gradient +'slhfgrd' = { + table2Version = 129 ; + indicatorOfParameter = 147 ; + } +#Charnock gradient +'chnkgrd' = { + table2Version = 129 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation gradient +'snrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 149 ; + } +#Top net radiation gradient +'tnrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure gradient +'mslgrd' = { + table2Version = 129 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure gradient +'lnspgrd' = { + table2Version = 129 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate gradient +'swhrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate gradient +'lwhrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 154 ; + } +#Divergence gradient +'dgrd' = { + table2Version = 129 ; + indicatorOfParameter = 155 ; + } +#Height gradient +'ghgrd' = { + table2Version = 129 ; + indicatorOfParameter = 156 ; + } +#Relative humidity gradient +'rgrd' = { + table2Version = 129 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure gradient +'tspgrd' = { + table2Version = 129 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height gradient +'blhgrd' = { + table2Version = 129 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography gradient +'sdorgrd' = { + table2Version = 129 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography gradient +'isorgrd' = { + table2Version = 129 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography gradient +'anorgrd' = { + table2Version = 129 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography gradient +'slorgrd' = { + table2Version = 129 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover gradient +'tccgrd' = { + table2Version = 129 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component gradient +'10ugrd' = { + table2Version = 129 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component gradient +'10vgrd' = { + table2Version = 129 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature gradient +'2tgrd' = { + table2Version = 129 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature gradient +'2dgrd' = { + table2Version = 129 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards gradient +'ssrdgrd' = { + table2Version = 129 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 gradient +'stl2grd' = { + table2Version = 129 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 gradient +'swl2grd' = { + table2Version = 129 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask gradient +'lsmgrd' = { + table2Version = 129 ; + indicatorOfParameter = 172 ; + } +#Surface roughness gradient +'srgrd' = { + table2Version = 129 ; + indicatorOfParameter = 173 ; + } +#Albedo gradient +'algrd' = { + table2Version = 129 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards gradient +'strdgrd' = { + table2Version = 129 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation gradient +'ssrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation gradient +'strgrd' = { + table2Version = 129 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation gradient +'tsrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation gradient +'ttrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress gradient +'ewssgrd' = { + table2Version = 129 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress gradient +'nsssgrd' = { + table2Version = 129 ; + indicatorOfParameter = 181 ; + } +#Evaporation gradient +'egrd' = { + table2Version = 129 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 gradient +'stl3grd' = { + table2Version = 129 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 gradient +'swl3grd' = { + table2Version = 129 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover gradient +'cccgrd' = { + table2Version = 129 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover gradient +'lccgrd' = { + table2Version = 129 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover gradient +'mccgrd' = { + table2Version = 129 ; + indicatorOfParameter = 187 ; + } +#High cloud cover gradient +'hccgrd' = { + table2Version = 129 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration gradient +'sundgrd' = { + table2Version = 129 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance gradient +'ewovgrd' = { + table2Version = 129 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance gradient +'nsovgrd' = { + table2Version = 129 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance gradient +'nwovgrd' = { + table2Version = 129 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance gradient +'neovgrd' = { + table2Version = 129 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature gradient +'btmpgrd' = { + table2Version = 129 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress gradient +'lgwsgrd' = { + table2Version = 129 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress gradient +'mgwsgrd' = { + table2Version = 129 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation gradient +'gwdgrd' = { + table2Version = 129 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content gradient +'srcgrd' = { + table2Version = 129 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction gradient +'veggrd' = { + table2Version = 129 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography gradient +'vsogrd' = { + table2Version = 129 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing gradient +'mx2tgrd' = { + table2Version = 129 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing gradient +'mn2tgrd' = { + table2Version = 129 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio gradient +'o3grd' = { + table2Version = 129 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights gradient +'pawgrd' = { + table2Version = 129 ; + indicatorOfParameter = 204 ; + } +#Runoff gradient +'rogrd' = { + table2Version = 129 ; + indicatorOfParameter = 205 ; + } +#Total column ozone gradient +'tco3grd' = { + table2Version = 129 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed gradient +'10sigrd' = { + table2Version = 129 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky gradient +'tsrcgrd' = { + table2Version = 129 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky gradient +'ttrcgrd' = { + table2Version = 129 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky gradient +'ssrcgrd' = { + table2Version = 129 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky gradient +'strcgrd' = { + table2Version = 129 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation gradient +'tisrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation gradient +'dhrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion gradient +'dhvdgrd' = { + table2Version = 129 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection gradient +'dhccgrd' = { + table2Version = 129 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation gradient +'dhlcgrd' = { + table2Version = 129 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind gradient +'vdzwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind gradient +'vdmwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency gradient +'ewgdgrd' = { + table2Version = 129 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency gradient +'nsgdgrd' = { + table2Version = 129 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind gradient +'ctzwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind gradient +'ctmwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity gradient +'vdhgrd' = { + table2Version = 129 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection gradient +'htccgrd' = { + table2Version = 129 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation gradient +'htlcgrd' = { + table2Version = 129 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity gradient +'crnhgrd' = { + table2Version = 129 ; + indicatorOfParameter = 227 ; + } +#Total precipitation gradient +'tpgrd' = { + table2Version = 129 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress gradient +'iewsgrd' = { + table2Version = 129 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress gradient +'inssgrd' = { + table2Version = 129 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux gradient +'ishfgrd' = { + table2Version = 129 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux gradient +'iegrd' = { + table2Version = 129 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity gradient +'asqgrd' = { + table2Version = 129 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat gradient +'lsrhgrd' = { + table2Version = 129 ; + indicatorOfParameter = 234 ; + } +#Skin temperature gradient +'sktgrd' = { + table2Version = 129 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 gradient +'stl4grd' = { + table2Version = 129 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 gradient +'swl4grd' = { + table2Version = 129 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer gradient +'tsngrd' = { + table2Version = 129 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall gradient +'csfgrd' = { + table2Version = 129 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall gradient +'lsfgrd' = { + table2Version = 129 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency gradient +'acfgrd' = { + table2Version = 129 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency gradient +'alwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo gradient +'falgrd' = { + table2Version = 129 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness gradient +'fsrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat gradient +'flsrgrd' = { + table2Version = 129 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content gradient +'clwcgrd' = { + table2Version = 129 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content gradient +'ciwcgrd' = { + table2Version = 129 ; + indicatorOfParameter = 247 ; + } +#Cloud cover gradient +'ccgrd' = { + table2Version = 129 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency gradient +'aiwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 249 ; + } +#Ice age gradient +'icegrd' = { + table2Version = 129 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature gradient +'attegrd' = { + table2Version = 129 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity gradient +'athegrd' = { + table2Version = 129 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind gradient +'atzegrd' = { + table2Version = 129 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind gradient +'atmwgrd' = { + table2Version = 129 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'~' = { + table2Version = 129 ; + indicatorOfParameter = 255 ; + } +#Top solar radiation upward +'tsru' = { + table2Version = 130 ; + indicatorOfParameter = 208 ; + } +#Top thermal radiation upward +'ttru' = { + table2Version = 130 ; + indicatorOfParameter = 209 ; + } +#Top solar radiation upward, clear sky +'tsuc' = { + table2Version = 130 ; + indicatorOfParameter = 210 ; + } +#Top thermal radiation upward, clear sky +'ttuc' = { + table2Version = 130 ; + indicatorOfParameter = 211 ; + } +#Cloud liquid water +'clw' = { + table2Version = 130 ; + indicatorOfParameter = 212 ; + } +#Cloud fraction +'cf' = { + table2Version = 130 ; + indicatorOfParameter = 213 ; + } +#Diabatic heating by radiation +'dhr' = { + table2Version = 130 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion +'dhvd' = { + table2Version = 130 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection +'dhcc' = { + table2Version = 130 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating by large-scale condensation +'dhlc' = { + table2Version = 130 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind +'vdzw' = { + table2Version = 130 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind +'vdmw' = { + table2Version = 130 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag +'ewgd' = { + table2Version = 130 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag +'nsgd' = { + table2Version = 130 ; + indicatorOfParameter = 221 ; + } +#Vertical diffusion of humidity +'vdh' = { + table2Version = 130 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection +'htcc' = { + table2Version = 130 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation +'htlc' = { + table2Version = 130 ; + indicatorOfParameter = 226 ; + } +#Adiabatic tendency of temperature +'att' = { + table2Version = 130 ; + indicatorOfParameter = 228 ; + } +#Adiabatic tendency of humidity +'ath' = { + table2Version = 130 ; + indicatorOfParameter = 229 ; + } +#Adiabatic tendency of zonal wind +'atzw' = { + table2Version = 130 ; + indicatorOfParameter = 230 ; + } +#Adiabatic tendency of meridional wind +'atmwax' = { + table2Version = 130 ; + indicatorOfParameter = 231 ; + } +#Mean vertical velocity +'mvv' = { + table2Version = 130 ; + indicatorOfParameter = 232 ; + } +#2m temperature anomaly of at least +2K +'2tag2' = { + table2Version = 131 ; + indicatorOfParameter = 1 ; + } +#2m temperature anomaly of at least +1K +'2tag1' = { + table2Version = 131 ; + indicatorOfParameter = 2 ; + } +#2m temperature anomaly of at least 0K +'2tag0' = { + table2Version = 131 ; + indicatorOfParameter = 3 ; + } +#2m temperature anomaly of at most -1K +'2talm1' = { + table2Version = 131 ; + indicatorOfParameter = 4 ; + } +#2m temperature anomaly of at most -2K +'2talm2' = { + table2Version = 131 ; + indicatorOfParameter = 5 ; + } +#Total precipitation anomaly of at least 20 mm +'tpag20' = { + table2Version = 131 ; + indicatorOfParameter = 6 ; + } +#Total precipitation anomaly of at least 10 mm +'tpag10' = { + table2Version = 131 ; + indicatorOfParameter = 7 ; + } +#Total precipitation anomaly of at least 0 mm +'tpag0' = { + table2Version = 131 ; + indicatorOfParameter = 8 ; + } +#Surface temperature anomaly of at least 0K +'stag0' = { + table2Version = 131 ; + indicatorOfParameter = 9 ; + } +#Mean sea level pressure anomaly of at least 0 Pa +'mslag0' = { + table2Version = 131 ; + indicatorOfParameter = 10 ; + } +#Height of 0 degree isotherm probability +'h0dip' = { + table2Version = 131 ; + indicatorOfParameter = 15 ; + } +#Height of snowfall limit probability +'hslp' = { + table2Version = 131 ; + indicatorOfParameter = 16 ; + } +#Showalter index probability +'saip' = { + table2Version = 131 ; + indicatorOfParameter = 17 ; + } +#Whiting index probability +'whip' = { + table2Version = 131 ; + indicatorOfParameter = 18 ; + } +#Temperature anomaly less than -2 K +'talm2' = { + table2Version = 131 ; + indicatorOfParameter = 20 ; + } +#Temperature anomaly of at least +2 K +'tag2' = { + table2Version = 131 ; + indicatorOfParameter = 21 ; + } +#Temperature anomaly less than -8 K +'talm8' = { + table2Version = 131 ; + indicatorOfParameter = 22 ; + } +#Temperature anomaly less than -4 K +'talm4' = { + table2Version = 131 ; + indicatorOfParameter = 23 ; + } +#Temperature anomaly greater than +4 K +'tag4' = { + table2Version = 131 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly greater than +8 K +'tag8' = { + table2Version = 131 ; + indicatorOfParameter = 25 ; + } +#10 metre wind gust probability +'10gp' = { + table2Version = 131 ; + indicatorOfParameter = 49 ; + } +#Convective available potential energy probability +'capep' = { + table2Version = 131 ; + indicatorOfParameter = 59 ; + } +#Total precipitation less than 0.1 mm +'tpl01' = { + table2Version = 131 ; + indicatorOfParameter = 64 ; + } +#Total precipitation rate less than 1 mm/day +'tprl1' = { + table2Version = 131 ; + indicatorOfParameter = 65 ; + } +#Total precipitation rate of at least 3 mm/day +'tprg3' = { + table2Version = 131 ; + indicatorOfParameter = 66 ; + } +#Total precipitation rate of at least 5 mm/day +'tprg5' = { + table2Version = 131 ; + indicatorOfParameter = 67 ; + } +#10 metre Wind speed of at least 10 m/s +'10spg10' = { + table2Version = 131 ; + indicatorOfParameter = 68 ; + } +#10 metre Wind speed of at least 15 m/s +'10spg15' = { + table2Version = 131 ; + indicatorOfParameter = 69 ; + } +#10 metre Wind gust of at least 15 m/s +'10fgg15' = { + table2Version = 131 ; + indicatorOfParameter = 70 ; + } +#10 metre Wind gust of at least 20 m/s +'10fgg20' = { + table2Version = 131 ; + indicatorOfParameter = 71 ; + } +#10 metre Wind gust of at least 25 m/s +'10fgg25' = { + table2Version = 131 ; + indicatorOfParameter = 72 ; + } +#2 metre temperature less than 273.15 K +'2tl273' = { + table2Version = 131 ; + indicatorOfParameter = 73 ; + } +#Significant wave height of at least 2 m +'swhg2' = { + table2Version = 131 ; + indicatorOfParameter = 74 ; + } +#Significant wave height of at least 4 m +'swhg4' = { + table2Version = 131 ; + indicatorOfParameter = 75 ; + } +#Significant wave height of at least 6 m +'swhg6' = { + table2Version = 131 ; + indicatorOfParameter = 76 ; + } +#Significant wave height of at least 8 m +'swhg8' = { + table2Version = 131 ; + indicatorOfParameter = 77 ; + } +#Mean wave period of at least 8 s +'mwpg8' = { + table2Version = 131 ; + indicatorOfParameter = 78 ; + } +#Mean wave period of at least 10 s +'mwpg10' = { + table2Version = 131 ; + indicatorOfParameter = 79 ; + } +#Mean wave period of at least 12 s +'mwpg12' = { + table2Version = 131 ; + indicatorOfParameter = 80 ; + } +#Mean wave period of at least 15 s +'mwpg15' = { + table2Version = 131 ; + indicatorOfParameter = 81 ; + } +#Geopotential probability +'zp' = { + table2Version = 131 ; + indicatorOfParameter = 129 ; + } +#Temperature anomaly probability +'tap' = { + table2Version = 131 ; + indicatorOfParameter = 130 ; + } +#2 metre temperature probability +'2tp' = { + table2Version = 131 ; + indicatorOfParameter = 139 ; + } +#Snowfall (convective + stratiform) probability +'sfp' = { + table2Version = 131 ; + indicatorOfParameter = 144 ; + } +#Total precipitation probability +'tpp' = { + table2Version = 131 ; + indicatorOfParameter = 151 ; + } +#Total cloud cover probability +'tccp' = { + table2Version = 131 ; + indicatorOfParameter = 164 ; + } +#10 metre speed probability +'10sp' = { + table2Version = 131 ; + indicatorOfParameter = 165 ; + } +#2 metre temperature probability +'2tp' = { + table2Version = 131 ; + indicatorOfParameter = 167 ; + } +#Maximum 2 metre temperature probability +'mx2tp' = { + table2Version = 131 ; + indicatorOfParameter = 201 ; + } +#Minimum 2 metre temperature probability +'mn2tp' = { + table2Version = 131 ; + indicatorOfParameter = 202 ; + } +#Total precipitation probability +'tpp' = { + table2Version = 131 ; + indicatorOfParameter = 228 ; + } +#Significant wave height probability +'swhp' = { + table2Version = 131 ; + indicatorOfParameter = 229 ; + } +#Mean wave period probability +'mwpp' = { + table2Version = 131 ; + indicatorOfParameter = 232 ; + } +#Indicates a missing value +'~' = { + table2Version = 131 ; + indicatorOfParameter = 255 ; + } +#10 metre wind gust index +'10fgi' = { + table2Version = 132 ; + indicatorOfParameter = 49 ; + } +#Snowfall index +'sfi' = { + table2Version = 132 ; + indicatorOfParameter = 144 ; + } +#10 metre speed index +'10wsi' = { + table2Version = 132 ; + indicatorOfParameter = 165 ; + } +#2 metre temperature index +'2ti' = { + table2Version = 132 ; + indicatorOfParameter = 167 ; + } +#Maximum temperature at 2 metres index +'mx2ti' = { + table2Version = 132 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres index +'mn2ti' = { + table2Version = 132 ; + indicatorOfParameter = 202 ; + } +#Total precipitation index +'tpi' = { + table2Version = 132 ; + indicatorOfParameter = 228 ; + } +#2m temperature probability less than -10 C +'2tplm10' = { + table2Version = 133 ; + indicatorOfParameter = 1 ; + } +#2m temperature probability less than -5 C +'2tplm5' = { + table2Version = 133 ; + indicatorOfParameter = 2 ; + } +#2m temperature probability less than 0 C +'2tpl0' = { + table2Version = 133 ; + indicatorOfParameter = 3 ; + } +#2m temperature probability less than 5 C +'2tpl5' = { + table2Version = 133 ; + indicatorOfParameter = 4 ; + } +#2m temperature probability less than 10 C +'2tpl10' = { + table2Version = 133 ; + indicatorOfParameter = 5 ; + } +#2m temperature probability greater than 25 C +'2tpg25' = { + table2Version = 133 ; + indicatorOfParameter = 6 ; + } +#2m temperature probability greater than 30 C +'2tpg30' = { + table2Version = 133 ; + indicatorOfParameter = 7 ; + } +#2m temperature probability greater than 35 C +'2tpg35' = { + table2Version = 133 ; + indicatorOfParameter = 8 ; + } +#2m temperature probability greater than 40 C +'2tpg40' = { + table2Version = 133 ; + indicatorOfParameter = 9 ; + } +#2m temperature probability greater than 45 C +'2tpg45' = { + table2Version = 133 ; + indicatorOfParameter = 10 ; + } +#Minimum 2 metre temperature probability less than -10 C +'mn2tplm10' = { + table2Version = 133 ; + indicatorOfParameter = 11 ; + } +#Minimum 2 metre temperature probability less than -5 C +'mn2tplm5' = { + table2Version = 133 ; + indicatorOfParameter = 12 ; + } +#Minimum 2 metre temperature probability less than 0 C +'mn2tpl0' = { + table2Version = 133 ; + indicatorOfParameter = 13 ; + } +#Minimum 2 metre temperature probability less than 5 C +'mn2tpl5' = { + table2Version = 133 ; + indicatorOfParameter = 14 ; + } +#Minimum 2 metre temperature probability less than 10 C +'mn2tpl10' = { + table2Version = 133 ; + indicatorOfParameter = 15 ; + } +#Maximum 2 metre temperature probability greater than 25 C +'mx2tpg25' = { + table2Version = 133 ; + indicatorOfParameter = 16 ; + } +#Maximum 2 metre temperature probability greater than 30 C +'mx2tpg30' = { + table2Version = 133 ; + indicatorOfParameter = 17 ; + } +#Maximum 2 metre temperature probability greater than 35 C +'mx2tpg35' = { + table2Version = 133 ; + indicatorOfParameter = 18 ; + } +#Maximum 2 metre temperature probability greater than 40 C +'mx2tpg40' = { + table2Version = 133 ; + indicatorOfParameter = 19 ; + } +#Maximum 2 metre temperature probability greater than 45 C +'mx2tpg45' = { + table2Version = 133 ; + indicatorOfParameter = 20 ; + } +#10 metre wind speed probability of at least 10 m/s +'10spg10' = { + table2Version = 133 ; + indicatorOfParameter = 21 ; + } +#10 metre wind speed probability of at least 15 m/s +'10spg15' = { + table2Version = 133 ; + indicatorOfParameter = 22 ; + } +#10 metre wind speed probability of at least 20 m/s +'10spg20' = { + table2Version = 133 ; + indicatorOfParameter = 23 ; + } +#10 metre wind speed probability of at least 35 m/s +'10spg35' = { + table2Version = 133 ; + indicatorOfParameter = 24 ; + } +#10 metre wind speed probability of at least 50 m/s +'10spg50' = { + table2Version = 133 ; + indicatorOfParameter = 25 ; + } +#10 metre wind gust probability of at least 20 m/s +'10gpg20' = { + table2Version = 133 ; + indicatorOfParameter = 26 ; + } +#10 metre wind gust probability of at least 35 m/s +'10gpg35' = { + table2Version = 133 ; + indicatorOfParameter = 27 ; + } +#10 metre wind gust probability of at least 50 m/s +'10gpg50' = { + table2Version = 133 ; + indicatorOfParameter = 28 ; + } +#10 metre wind gust probability of at least 75 m/s +'10gpg75' = { + table2Version = 133 ; + indicatorOfParameter = 29 ; + } +#10 metre wind gust probability of at least 100 m/s +'10gpg100' = { + table2Version = 133 ; + indicatorOfParameter = 30 ; + } +#Total precipitation probability of at least 1 mm +'tppg1' = { + table2Version = 133 ; + indicatorOfParameter = 31 ; + } +#Total precipitation probability of at least 5 mm +'tppg5' = { + table2Version = 133 ; + indicatorOfParameter = 32 ; + } +#Total precipitation probability of at least 10 mm +'tppg10' = { + table2Version = 133 ; + indicatorOfParameter = 33 ; + } +#Total precipitation probability of at least 20 mm +'tppg20' = { + table2Version = 133 ; + indicatorOfParameter = 34 ; + } +#Total precipitation probability of at least 40 mm +'tppg40' = { + table2Version = 133 ; + indicatorOfParameter = 35 ; + } +#Total precipitation probability of at least 60 mm +'tppg60' = { + table2Version = 133 ; + indicatorOfParameter = 36 ; + } +#Total precipitation probability of at least 80 mm +'tppg80' = { + table2Version = 133 ; + indicatorOfParameter = 37 ; + } +#Total precipitation probability of at least 100 mm +'tppg100' = { + table2Version = 133 ; + indicatorOfParameter = 38 ; + } +#Total precipitation probability of at least 150 mm +'tppg150' = { + table2Version = 133 ; + indicatorOfParameter = 39 ; + } +#Total precipitation probability of at least 200 mm +'tppg200' = { + table2Version = 133 ; + indicatorOfParameter = 40 ; + } +#Total precipitation probability of at least 300 mm +'tppg300' = { + table2Version = 133 ; + indicatorOfParameter = 41 ; + } +#Snowfall probability of at least 1 mm +'sfpg1' = { + table2Version = 133 ; + indicatorOfParameter = 42 ; + } +#Snowfall probability of at least 5 mm +'sfpg5' = { + table2Version = 133 ; + indicatorOfParameter = 43 ; + } +#Snowfall probability of at least 10 mm +'sfpg10' = { + table2Version = 133 ; + indicatorOfParameter = 44 ; + } +#Snowfall probability of at least 20 mm +'sfpg20' = { + table2Version = 133 ; + indicatorOfParameter = 45 ; + } +#Snowfall probability of at least 40 mm +'sfpg40' = { + table2Version = 133 ; + indicatorOfParameter = 46 ; + } +#Snowfall probability of at least 60 mm +'sfpg60' = { + table2Version = 133 ; + indicatorOfParameter = 47 ; + } +#Snowfall probability of at least 80 mm +'sfpg80' = { + table2Version = 133 ; + indicatorOfParameter = 48 ; + } +#Snowfall probability of at least 100 mm +'sfpg100' = { + table2Version = 133 ; + indicatorOfParameter = 49 ; + } +#Snowfall probability of at least 150 mm +'sfpg150' = { + table2Version = 133 ; + indicatorOfParameter = 50 ; + } +#Snowfall probability of at least 200 mm +'sfpg200' = { + table2Version = 133 ; + indicatorOfParameter = 51 ; + } +#Snowfall probability of at least 300 mm +'sfpg300' = { + table2Version = 133 ; + indicatorOfParameter = 52 ; + } +#Total Cloud Cover probability greater than 10% +'tccpg10' = { + table2Version = 133 ; + indicatorOfParameter = 53 ; + } +#Total Cloud Cover probability greater than 20% +'tccpg20' = { + table2Version = 133 ; + indicatorOfParameter = 54 ; + } +#Total Cloud Cover probability greater than 30% +'tccpg30' = { + table2Version = 133 ; + indicatorOfParameter = 55 ; + } +#Total Cloud Cover probability greater than 40% +'tccpg40' = { + table2Version = 133 ; + indicatorOfParameter = 56 ; + } +#Total Cloud Cover probability greater than 50% +'tccpg50' = { + table2Version = 133 ; + indicatorOfParameter = 57 ; + } +#Total Cloud Cover probability greater than 60% +'tccpg60' = { + table2Version = 133 ; + indicatorOfParameter = 58 ; + } +#Total Cloud Cover probability greater than 70% +'tccpg70' = { + table2Version = 133 ; + indicatorOfParameter = 59 ; + } +#Total Cloud Cover probability greater than 80% +'tccpg80' = { + table2Version = 133 ; + indicatorOfParameter = 60 ; + } +#Total Cloud Cover probability greater than 90% +'tccpg90' = { + table2Version = 133 ; + indicatorOfParameter = 61 ; + } +#Total Cloud Cover probability greater than 99% +'tccpg99' = { + table2Version = 133 ; + indicatorOfParameter = 62 ; + } +#High Cloud Cover probability greater than 10% +'hccpg10' = { + table2Version = 133 ; + indicatorOfParameter = 63 ; + } +#High Cloud Cover probability greater than 20% +'hccpg20' = { + table2Version = 133 ; + indicatorOfParameter = 64 ; + } +#High Cloud Cover probability greater than 30% +'hccpg30' = { + table2Version = 133 ; + indicatorOfParameter = 65 ; + } +#High Cloud Cover probability greater than 40% +'hccpg40' = { + table2Version = 133 ; + indicatorOfParameter = 66 ; + } +#High Cloud Cover probability greater than 50% +'hccpg50' = { + table2Version = 133 ; + indicatorOfParameter = 67 ; + } +#High Cloud Cover probability greater than 60% +'hccpg60' = { + table2Version = 133 ; + indicatorOfParameter = 68 ; + } +#High Cloud Cover probability greater than 70% +'hccpg70' = { + table2Version = 133 ; + indicatorOfParameter = 69 ; + } +#High Cloud Cover probability greater than 80% +'hccpg80' = { + table2Version = 133 ; + indicatorOfParameter = 70 ; + } +#High Cloud Cover probability greater than 90% +'hccpg90' = { + table2Version = 133 ; + indicatorOfParameter = 71 ; + } +#High Cloud Cover probability greater than 99% +'hccpg99' = { + table2Version = 133 ; + indicatorOfParameter = 72 ; + } +#Medium Cloud Cover probability greater than 10% +'mccpg10' = { + table2Version = 133 ; + indicatorOfParameter = 73 ; + } +#Medium Cloud Cover probability greater than 20% +'mccpg20' = { + table2Version = 133 ; + indicatorOfParameter = 74 ; + } +#Medium Cloud Cover probability greater than 30% +'mccpg30' = { + table2Version = 133 ; + indicatorOfParameter = 75 ; + } +#Medium Cloud Cover probability greater than 40% +'mccpg40' = { + table2Version = 133 ; + indicatorOfParameter = 76 ; + } +#Medium Cloud Cover probability greater than 50% +'mccpg50' = { + table2Version = 133 ; + indicatorOfParameter = 77 ; + } +#Medium Cloud Cover probability greater than 60% +'mccpg60' = { + table2Version = 133 ; + indicatorOfParameter = 78 ; + } +#Medium Cloud Cover probability greater than 70% +'mccpg70' = { + table2Version = 133 ; + indicatorOfParameter = 79 ; + } +#Medium Cloud Cover probability greater than 80% +'mccpg80' = { + table2Version = 133 ; + indicatorOfParameter = 80 ; + } +#Medium Cloud Cover probability greater than 90% +'mccpg90' = { + table2Version = 133 ; + indicatorOfParameter = 81 ; + } +#Medium Cloud Cover probability greater than 99% +'mccpg99' = { + table2Version = 133 ; + indicatorOfParameter = 82 ; + } +#Low Cloud Cover probability greater than 10% +'lccpg10' = { + table2Version = 133 ; + indicatorOfParameter = 83 ; + } +#Low Cloud Cover probability greater than 20% +'lccpg20' = { + table2Version = 133 ; + indicatorOfParameter = 84 ; + } +#Low Cloud Cover probability greater than 30% +'lccpg30' = { + table2Version = 133 ; + indicatorOfParameter = 85 ; + } +#Low Cloud Cover probability greater than 40% +'lccpg40' = { + table2Version = 133 ; + indicatorOfParameter = 86 ; + } +#Low Cloud Cover probability greater than 50% +'lccpg50' = { + table2Version = 133 ; + indicatorOfParameter = 87 ; + } +#Low Cloud Cover probability greater than 60% +'lccpg60' = { + table2Version = 133 ; + indicatorOfParameter = 88 ; + } +#Low Cloud Cover probability greater than 70% +'lccpg70' = { + table2Version = 133 ; + indicatorOfParameter = 89 ; + } +#Low Cloud Cover probability greater than 80% +'lccpg80' = { + table2Version = 133 ; + indicatorOfParameter = 90 ; + } +#Low Cloud Cover probability greater than 90% +'lccpg90' = { + table2Version = 133 ; + indicatorOfParameter = 91 ; + } +#Low Cloud Cover probability greater than 99% +'lccpg99' = { + table2Version = 133 ; + indicatorOfParameter = 92 ; + } +#Maximum of significant wave height +'maxswh' = { + table2Version = 140 ; + indicatorOfParameter = 200 ; + } +#Period corresponding to maximum individual wave height +'tmax' = { + table2Version = 140 ; + indicatorOfParameter = 217 ; + } +#Maximum individual wave height +'hmax' = { + table2Version = 140 ; + indicatorOfParameter = 218 ; + } +#Model bathymetry +'wmb' = { + table2Version = 140 ; + indicatorOfParameter = 219 ; + } +#Mean wave period based on first moment +'mp1' = { + table2Version = 140 ; + indicatorOfParameter = 220 ; + } +#Mean wave period based on second moment +'mp2' = { + table2Version = 140 ; + indicatorOfParameter = 221 ; + } +#Wave spectral directional width +'wdw' = { + table2Version = 140 ; + indicatorOfParameter = 222 ; + } +#Mean wave period based on first moment for wind waves +'p1ww' = { + table2Version = 140 ; + indicatorOfParameter = 223 ; + } +#Mean wave period based on second moment for wind waves +'p2ww' = { + table2Version = 140 ; + indicatorOfParameter = 224 ; + } +#Wave spectral directional width for wind waves +'dwww' = { + table2Version = 140 ; + indicatorOfParameter = 225 ; + } +#Mean wave period based on first moment for swell +'p1ps' = { + table2Version = 140 ; + indicatorOfParameter = 226 ; + } +#Mean wave period based on second moment for swell +'p2ps' = { + table2Version = 140 ; + indicatorOfParameter = 227 ; + } +#Wave spectral directional width for swell +'dwps' = { + table2Version = 140 ; + indicatorOfParameter = 228 ; + } +#Significant height of combined wind waves and swell +'swh' = { + table2Version = 140 ; + indicatorOfParameter = 229 ; + } +#Mean wave direction +'mwd' = { + table2Version = 140 ; + indicatorOfParameter = 230 ; + } +#Peak period of 1D spectra +'pp1d' = { + table2Version = 140 ; + indicatorOfParameter = 231 ; + } +#Mean wave period +'mwp' = { + table2Version = 140 ; + indicatorOfParameter = 232 ; + } +#Coefficient of drag with waves +'cdww' = { + table2Version = 140 ; + indicatorOfParameter = 233 ; + } +#Significant height of wind waves +'shww' = { + table2Version = 140 ; + indicatorOfParameter = 234 ; + } +#Mean direction of wind waves +'mdww' = { + table2Version = 140 ; + indicatorOfParameter = 235 ; + } +#Mean period of wind waves +'mpww' = { + table2Version = 140 ; + indicatorOfParameter = 236 ; + } +#Significant height of total swell +'shts' = { + table2Version = 140 ; + indicatorOfParameter = 237 ; + } +#Mean direction of total swell +'mdts' = { + table2Version = 140 ; + indicatorOfParameter = 238 ; + } +#Mean period of total swell +'mpts' = { + table2Version = 140 ; + indicatorOfParameter = 239 ; + } +#Standard deviation wave height +'sdhs' = { + table2Version = 140 ; + indicatorOfParameter = 240 ; + } +#Mean of 10 metre wind speed +'mu10' = { + table2Version = 140 ; + indicatorOfParameter = 241 ; + } +#Mean wind direction +'mdwi' = { + table2Version = 140 ; + indicatorOfParameter = 242 ; + } +#Standard deviation of 10 metre wind speed +'sdu' = { + table2Version = 140 ; + indicatorOfParameter = 243 ; + } +#Mean square slope of waves +'msqs' = { + table2Version = 140 ; + indicatorOfParameter = 244 ; + } +#10 metre wind speed +'wind' = { + table2Version = 140 ; + indicatorOfParameter = 245 ; + } +#Altimeter wave height +'awh' = { + table2Version = 140 ; + indicatorOfParameter = 246 ; + } +#Altimeter corrected wave height +'acwh' = { + table2Version = 140 ; + indicatorOfParameter = 247 ; + } +#Altimeter range relative correction +'arrc' = { + table2Version = 140 ; + indicatorOfParameter = 248 ; + } +#10 metre wind direction +'dwi' = { + table2Version = 140 ; + indicatorOfParameter = 249 ; + } +#2D wave spectra (multiple) +'2dsp' = { + table2Version = 140 ; + indicatorOfParameter = 250 ; + } +#2D wave spectra (single) +'2dfd' = { + table2Version = 140 ; + indicatorOfParameter = 251 ; + } +#Wave spectral kurtosis +'wsk' = { + table2Version = 140 ; + indicatorOfParameter = 252 ; + } +#Benjamin-Feir index +'bfi' = { + table2Version = 140 ; + indicatorOfParameter = 253 ; + } +#Wave spectral peakedness +'wsp' = { + table2Version = 140 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'~' = { + table2Version = 140 ; + indicatorOfParameter = 255 ; + } +#Ocean potential temperature +'ocpt' = { + table2Version = 150 ; + indicatorOfParameter = 129 ; + } +#Ocean salinity +'ocs' = { + table2Version = 150 ; + indicatorOfParameter = 130 ; + } +#Ocean potential density +'ocpd' = { + table2Version = 150 ; + indicatorOfParameter = 131 ; + } +#Ocean U wind component +'ocu' = { + table2Version = 150 ; + indicatorOfParameter = 133 ; + } +#Ocean V wind component +'ocv' = { + table2Version = 150 ; + indicatorOfParameter = 134 ; + } +#Ocean W wind component +'ocw' = { + table2Version = 150 ; + indicatorOfParameter = 135 ; + } +#Richardson number +'rn' = { + table2Version = 150 ; + indicatorOfParameter = 137 ; + } +#U*V product +'uv' = { + table2Version = 150 ; + indicatorOfParameter = 139 ; + } +#U*T product +'ut' = { + table2Version = 150 ; + indicatorOfParameter = 140 ; + } +#V*T product +'vt' = { + table2Version = 150 ; + indicatorOfParameter = 141 ; + } +#U*U product +'uu' = { + table2Version = 150 ; + indicatorOfParameter = 142 ; + } +#V*V product +'vv' = { + table2Version = 150 ; + indicatorOfParameter = 143 ; + } +#UV - U~V~ +'~' = { + table2Version = 150 ; + indicatorOfParameter = 144 ; + } +#UT - U~T~ +'~' = { + table2Version = 150 ; + indicatorOfParameter = 145 ; + } +#VT - V~T~ +'~' = { + table2Version = 150 ; + indicatorOfParameter = 146 ; + } +#UU - U~U~ +'~' = { + table2Version = 150 ; + indicatorOfParameter = 147 ; + } +#VV - V~V~ +'~' = { + table2Version = 150 ; + indicatorOfParameter = 148 ; + } +#Sea level +'sl' = { + table2Version = 150 ; + indicatorOfParameter = 152 ; + } +#Barotropic stream function +'~' = { + table2Version = 150 ; + indicatorOfParameter = 153 ; + } +#Mixed layer depth +'mld' = { + table2Version = 150 ; + indicatorOfParameter = 154 ; + } +#Depth +'~' = { + table2Version = 150 ; + indicatorOfParameter = 155 ; + } +#U stress +'~' = { + table2Version = 150 ; + indicatorOfParameter = 168 ; + } +#V stress +'~' = { + table2Version = 150 ; + indicatorOfParameter = 169 ; + } +#Turbulent kinetic energy input +'~' = { + table2Version = 150 ; + indicatorOfParameter = 170 ; + } +#Net surface heat flux +'nsf' = { + table2Version = 150 ; + indicatorOfParameter = 171 ; + } +#Surface solar radiation +'~' = { + table2Version = 150 ; + indicatorOfParameter = 172 ; + } +#P-E +'~' = { + table2Version = 150 ; + indicatorOfParameter = 173 ; + } +#Diagnosed sea surface temperature error +'~' = { + table2Version = 150 ; + indicatorOfParameter = 180 ; + } +#Heat flux correction +'~' = { + table2Version = 150 ; + indicatorOfParameter = 181 ; + } +#Observed sea surface temperature +'~' = { + table2Version = 150 ; + indicatorOfParameter = 182 ; + } +#Observed heat flux +'~' = { + table2Version = 150 ; + indicatorOfParameter = 183 ; + } +#Indicates a missing value +'~' = { + table2Version = 150 ; + indicatorOfParameter = 255 ; + } +#In situ Temperature +'~' = { + table2Version = 151 ; + indicatorOfParameter = 128 ; + } +#Ocean potential temperature +'ocpt' = { + table2Version = 151 ; + indicatorOfParameter = 129 ; + } +#Salinity +'s' = { + table2Version = 151 ; + indicatorOfParameter = 130 ; + } +#Ocean current zonal component +'ocu' = { + table2Version = 151 ; + indicatorOfParameter = 131 ; + } +#Ocean current meridional component +'ocv' = { + table2Version = 151 ; + indicatorOfParameter = 132 ; + } +#Ocean current vertical component +'ocw' = { + table2Version = 151 ; + indicatorOfParameter = 133 ; + } +#Modulus of strain rate tensor +'mst' = { + table2Version = 151 ; + indicatorOfParameter = 134 ; + } +#Vertical viscosity +'vvs' = { + table2Version = 151 ; + indicatorOfParameter = 135 ; + } +#Vertical diffusivity +'vdf' = { + table2Version = 151 ; + indicatorOfParameter = 136 ; + } +#Bottom level Depth +'dep' = { + table2Version = 151 ; + indicatorOfParameter = 137 ; + } +#Sigma-theta +'sth' = { + table2Version = 151 ; + indicatorOfParameter = 138 ; + } +#Richardson number +'rn' = { + table2Version = 151 ; + indicatorOfParameter = 139 ; + } +#UV product +'uv' = { + table2Version = 151 ; + indicatorOfParameter = 140 ; + } +#UT product +'ut' = { + table2Version = 151 ; + indicatorOfParameter = 141 ; + } +#VT product +'vt' = { + table2Version = 151 ; + indicatorOfParameter = 142 ; + } +#UU product +'uu' = { + table2Version = 151 ; + indicatorOfParameter = 143 ; + } +#VV product +'vv' = { + table2Version = 151 ; + indicatorOfParameter = 144 ; + } +#Sea level +'sl' = { + table2Version = 151 ; + indicatorOfParameter = 145 ; + } +#Sea level previous timestep +'sl_1' = { + table2Version = 151 ; + indicatorOfParameter = 146 ; + } +#Barotropic stream function +'bsf' = { + table2Version = 151 ; + indicatorOfParameter = 147 ; + } +#Mixed layer depth +'mld' = { + table2Version = 151 ; + indicatorOfParameter = 148 ; + } +#Bottom Pressure (equivalent height) +'btp' = { + table2Version = 151 ; + indicatorOfParameter = 149 ; + } +#Steric height +'sh' = { + table2Version = 151 ; + indicatorOfParameter = 150 ; + } +#Curl of Wind Stress +'crl' = { + table2Version = 151 ; + indicatorOfParameter = 151 ; + } +#Divergence of wind stress +'~' = { + table2Version = 151 ; + indicatorOfParameter = 152 ; + } +#U stress +'tax' = { + table2Version = 151 ; + indicatorOfParameter = 153 ; + } +#V stress +'tay' = { + table2Version = 151 ; + indicatorOfParameter = 154 ; + } +#Turbulent kinetic energy input +'tki' = { + table2Version = 151 ; + indicatorOfParameter = 155 ; + } +#Net surface heat flux +'nsf' = { + table2Version = 151 ; + indicatorOfParameter = 156 ; + } +#Absorbed solar radiation +'asr' = { + table2Version = 151 ; + indicatorOfParameter = 157 ; + } +#Precipitation - evaporation +'pme' = { + table2Version = 151 ; + indicatorOfParameter = 158 ; + } +#Specified sea surface temperature +'sst' = { + table2Version = 151 ; + indicatorOfParameter = 159 ; + } +#Specified surface heat flux +'shf' = { + table2Version = 151 ; + indicatorOfParameter = 160 ; + } +#Diagnosed sea surface temperature error +'dte' = { + table2Version = 151 ; + indicatorOfParameter = 161 ; + } +#Heat flux correction +'hfc' = { + table2Version = 151 ; + indicatorOfParameter = 162 ; + } +#20 degrees isotherm depth +'20d' = { + table2Version = 151 ; + indicatorOfParameter = 163 ; + } +#Average potential temperature in the upper 300m +'tav300' = { + table2Version = 151 ; + indicatorOfParameter = 164 ; + } +#Vertically integrated zonal velocity (previous time step) +'uba1' = { + table2Version = 151 ; + indicatorOfParameter = 165 ; + } +#Vertically Integrated meridional velocity (previous time step) +'vba1' = { + table2Version = 151 ; + indicatorOfParameter = 166 ; + } +#Vertically integrated zonal volume transport +'ztr' = { + table2Version = 151 ; + indicatorOfParameter = 167 ; + } +#Vertically integrated meridional volume transport +'mtr' = { + table2Version = 151 ; + indicatorOfParameter = 168 ; + } +#Vertically integrated zonal heat transport +'zht' = { + table2Version = 151 ; + indicatorOfParameter = 169 ; + } +#Vertically integrated meridional heat transport +'mht' = { + table2Version = 151 ; + indicatorOfParameter = 170 ; + } +#U velocity maximum +'umax' = { + table2Version = 151 ; + indicatorOfParameter = 171 ; + } +#Depth of the velocity maximum +'dumax' = { + table2Version = 151 ; + indicatorOfParameter = 172 ; + } +#Salinity maximum +'smax' = { + table2Version = 151 ; + indicatorOfParameter = 173 ; + } +#Depth of salinity maximum +'dsmax' = { + table2Version = 151 ; + indicatorOfParameter = 174 ; + } +#Average salinity in the upper 300m +'sav300' = { + table2Version = 151 ; + indicatorOfParameter = 175 ; + } +#Layer Thickness at scalar points +'ldp' = { + table2Version = 151 ; + indicatorOfParameter = 176 ; + } +#Layer Thickness at vector points +'ldu' = { + table2Version = 151 ; + indicatorOfParameter = 177 ; + } +#Potential temperature increment +'pti' = { + table2Version = 151 ; + indicatorOfParameter = 178 ; + } +#Potential temperature analysis error +'ptae' = { + table2Version = 151 ; + indicatorOfParameter = 179 ; + } +#Background potential temperature +'bpt' = { + table2Version = 151 ; + indicatorOfParameter = 180 ; + } +#Analysed potential temperature +'apt' = { + table2Version = 151 ; + indicatorOfParameter = 181 ; + } +#Potential temperature background error +'ptbe' = { + table2Version = 151 ; + indicatorOfParameter = 182 ; + } +#Analysed salinity +'as' = { + table2Version = 151 ; + indicatorOfParameter = 183 ; + } +#Salinity increment +'sali' = { + table2Version = 151 ; + indicatorOfParameter = 184 ; + } +#Estimated Bias in Temperature +'ebt' = { + table2Version = 151 ; + indicatorOfParameter = 185 ; + } +#Estimated Bias in Salinity +'ebs' = { + table2Version = 151 ; + indicatorOfParameter = 186 ; + } +#Zonal Velocity increment (from balance operator) +'uvi' = { + table2Version = 151 ; + indicatorOfParameter = 187 ; + } +#Meridional Velocity increment (from balance operator) +'vvi' = { + table2Version = 151 ; + indicatorOfParameter = 188 ; + } +#Salinity increment (from salinity data) +'subi' = { + table2Version = 151 ; + indicatorOfParameter = 190 ; + } +#Salinity analysis error +'sale' = { + table2Version = 151 ; + indicatorOfParameter = 191 ; + } +#Background Salinity +'bsal' = { + table2Version = 151 ; + indicatorOfParameter = 192 ; + } +#Salinity background error +'salbe' = { + table2Version = 151 ; + indicatorOfParameter = 194 ; + } +#Estimated temperature bias from assimilation +'ebta' = { + table2Version = 151 ; + indicatorOfParameter = 199 ; + } +#Estimated salinity bias from assimilation +'ebsa' = { + table2Version = 151 ; + indicatorOfParameter = 200 ; + } +#Temperature increment from relaxation term +'lti' = { + table2Version = 151 ; + indicatorOfParameter = 201 ; + } +#Salinity increment from relaxation term +'lsi' = { + table2Version = 151 ; + indicatorOfParameter = 202 ; + } +#Bias in the zonal pressure gradient (applied) +'bzpga' = { + table2Version = 151 ; + indicatorOfParameter = 203 ; + } +#Bias in the meridional pressure gradient (applied) +'bmpga' = { + table2Version = 151 ; + indicatorOfParameter = 204 ; + } +#Estimated temperature bias from relaxation +'ebtl' = { + table2Version = 151 ; + indicatorOfParameter = 205 ; + } +#Estimated salinity bias from relaxation +'ebsl' = { + table2Version = 151 ; + indicatorOfParameter = 206 ; + } +#First guess bias in temperature +'fgbt' = { + table2Version = 151 ; + indicatorOfParameter = 207 ; + } +#First guess bias in salinity +'fgbs' = { + table2Version = 151 ; + indicatorOfParameter = 208 ; + } +#Applied bias in pressure +'bpa' = { + table2Version = 151 ; + indicatorOfParameter = 209 ; + } +#FG bias in pressure +'fgbp' = { + table2Version = 151 ; + indicatorOfParameter = 210 ; + } +#Bias in temperature(applied) +'pta' = { + table2Version = 151 ; + indicatorOfParameter = 211 ; + } +#Bias in salinity (applied) +'psa' = { + table2Version = 151 ; + indicatorOfParameter = 212 ; + } +#Indicates a missing value +'~' = { + table2Version = 151 ; + indicatorOfParameter = 255 ; + } +#10 metre wind gust during averaging time +'10fgrea' = { + table2Version = 160 ; + indicatorOfParameter = 49 ; + } +#vertical velocity (pressure) +'wrea' = { + table2Version = 160 ; + indicatorOfParameter = 135 ; + } +#Precipitable water content +'pwcrea' = { + table2Version = 160 ; + indicatorOfParameter = 137 ; + } +#Soil wetness level 1 +'swl1rea' = { + table2Version = 160 ; + indicatorOfParameter = 140 ; + } +#Snow depth +'sdrea' = { + table2Version = 160 ; + indicatorOfParameter = 141 ; + } +#Large-scale precipitation +'lsprea' = { + table2Version = 160 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'cprea' = { + table2Version = 160 ; + indicatorOfParameter = 143 ; + } +#Snowfall +'sfrea' = { + table2Version = 160 ; + indicatorOfParameter = 144 ; + } +#Height +'ghrea' = { + table2Version = 160 ; + indicatorOfParameter = 156 ; + } +#Relative humidity +'rrea' = { + table2Version = 160 ; + indicatorOfParameter = 157 ; + } +#Soil wetness level 2 +'swl2rea' = { + table2Version = 160 ; + indicatorOfParameter = 171 ; + } +#East-West surface stress +'ewssrea' = { + table2Version = 160 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'nsssrea' = { + table2Version = 160 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'erea' = { + table2Version = 160 ; + indicatorOfParameter = 182 ; + } +#Soil wetness level 3 +'swl3rea' = { + table2Version = 160 ; + indicatorOfParameter = 184 ; + } +#Skin reservoir content +'srcrea' = { + table2Version = 160 ; + indicatorOfParameter = 198 ; + } +#Percentage of vegetation +'vegrea' = { + table2Version = 160 ; + indicatorOfParameter = 199 ; + } +#Maximum temperature at 2 metres during averaging time +'mx2trea' = { + table2Version = 160 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres during averaging time +'mn2trea' = { + table2Version = 160 ; + indicatorOfParameter = 202 ; + } +#Runoff +'rorea' = { + table2Version = 160 ; + indicatorOfParameter = 205 ; + } +#Standard deviation of geopotential +'zzrea' = { + table2Version = 160 ; + indicatorOfParameter = 206 ; + } +#Covariance of temperature and geopotential +'tzrea' = { + table2Version = 160 ; + indicatorOfParameter = 207 ; + } +#Standard deviation of temperature +'ttrea' = { + table2Version = 160 ; + indicatorOfParameter = 208 ; + } +#Covariance of specific humidity and geopotential +'qzrea' = { + table2Version = 160 ; + indicatorOfParameter = 209 ; + } +#Covariance of specific humidity and temperature +'qtrea' = { + table2Version = 160 ; + indicatorOfParameter = 210 ; + } +#Standard deviation of specific humidity +'qqrea' = { + table2Version = 160 ; + indicatorOfParameter = 211 ; + } +#Covariance of U component and geopotential +'uzrea' = { + table2Version = 160 ; + indicatorOfParameter = 212 ; + } +#Covariance of U component and temperature +'utrea' = { + table2Version = 160 ; + indicatorOfParameter = 213 ; + } +#Covariance of U component and specific humidity +'uqrea' = { + table2Version = 160 ; + indicatorOfParameter = 214 ; + } +#Standard deviation of U velocity +'uurea' = { + table2Version = 160 ; + indicatorOfParameter = 215 ; + } +#Covariance of V component and geopotential +'vzrea' = { + table2Version = 160 ; + indicatorOfParameter = 216 ; + } +#Covariance of V component and temperature +'vtrea' = { + table2Version = 160 ; + indicatorOfParameter = 217 ; + } +#Covariance of V component and specific humidity +'vqrea' = { + table2Version = 160 ; + indicatorOfParameter = 218 ; + } +#Covariance of V component and U component +'vurea' = { + table2Version = 160 ; + indicatorOfParameter = 219 ; + } +#Standard deviation of V component +'vvrea' = { + table2Version = 160 ; + indicatorOfParameter = 220 ; + } +#Covariance of W component and geopotential +'wzrea' = { + table2Version = 160 ; + indicatorOfParameter = 221 ; + } +#Covariance of W component and temperature +'wtrea' = { + table2Version = 160 ; + indicatorOfParameter = 222 ; + } +#Covariance of W component and specific humidity +'wqrea' = { + table2Version = 160 ; + indicatorOfParameter = 223 ; + } +#Covariance of W component and U component +'wurea' = { + table2Version = 160 ; + indicatorOfParameter = 224 ; + } +#Covariance of W component and V component +'wvrea' = { + table2Version = 160 ; + indicatorOfParameter = 225 ; + } +#Standard deviation of vertical velocity +'wwrea' = { + table2Version = 160 ; + indicatorOfParameter = 226 ; + } +#Instantaneous surface heat flux +'ishfrea' = { + table2Version = 160 ; + indicatorOfParameter = 231 ; + } +#Convective snowfall +'csfrea' = { + table2Version = 160 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall +'lsfrea' = { + table2Version = 160 ; + indicatorOfParameter = 240 ; + } +#Cloud liquid water content +'clwcerrea' = { + table2Version = 160 ; + indicatorOfParameter = 241 ; + } +#Cloud cover +'ccrea' = { + table2Version = 160 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo +'falrea' = { + table2Version = 160 ; + indicatorOfParameter = 243 ; + } +#10 metre wind speed +'10wsrea' = { + table2Version = 160 ; + indicatorOfParameter = 246 ; + } +#Momentum flux +'moflrea' = { + table2Version = 160 ; + indicatorOfParameter = 247 ; + } +#Gravity wave dissipation flux +'~' = { + table2Version = 160 ; + indicatorOfParameter = 249 ; + } +#Heaviside beta function +'hsdrea' = { + table2Version = 160 ; + indicatorOfParameter = 254 ; + } +#Surface geopotential +'~' = { + table2Version = 162 ; + indicatorOfParameter = 51 ; + } +#Vertical integral of mass of atmosphere +'~' = { + table2Version = 162 ; + indicatorOfParameter = 53 ; + } +#Vertical integral of temperature +'~' = { + table2Version = 162 ; + indicatorOfParameter = 54 ; + } +#Vertical integral of water vapour +'~' = { + table2Version = 162 ; + indicatorOfParameter = 55 ; + } +#Vertical integral of cloud liquid water +'~' = { + table2Version = 162 ; + indicatorOfParameter = 56 ; + } +#Vertical integral of cloud frozen water +'~' = { + table2Version = 162 ; + indicatorOfParameter = 57 ; + } +#Vertical integral of ozone +'~' = { + table2Version = 162 ; + indicatorOfParameter = 58 ; + } +#Vertical integral of kinetic energy +'~' = { + table2Version = 162 ; + indicatorOfParameter = 59 ; + } +#Vertical integral of thermal energy +'~' = { + table2Version = 162 ; + indicatorOfParameter = 60 ; + } +#Vertical integral of potential+internal energy +'~' = { + table2Version = 162 ; + indicatorOfParameter = 61 ; + } +#Vertical integral of potential+internal+latent energy +'~' = { + table2Version = 162 ; + indicatorOfParameter = 62 ; + } +#Vertical integral of total energy +'~' = { + table2Version = 162 ; + indicatorOfParameter = 63 ; + } +#Vertical integral of energy conversion +'~' = { + table2Version = 162 ; + indicatorOfParameter = 64 ; + } +#Vertical integral of eastward mass flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 65 ; + } +#Vertical integral of northward mass flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 66 ; + } +#Vertical integral of eastward kinetic energy flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 67 ; + } +#Vertical integral of northward kinetic energy flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 68 ; + } +#Vertical integral of eastward heat flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 69 ; + } +#Vertical integral of northward heat flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 70 ; + } +#Vertical integral of eastward water vapour flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 71 ; + } +#Vertical integral of northward water vapour flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 72 ; + } +#Vertical integral of eastward geopotential flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 73 ; + } +#Vertical integral of northward geopotential flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 74 ; + } +#Vertical integral of eastward total energy flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 75 ; + } +#Vertical integral of northward total energy flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 76 ; + } +#Vertical integral of eastward ozone flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 77 ; + } +#Vertical integral of northward ozone flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 78 ; + } +#Vertical integral of divergence of mass flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 81 ; + } +#Vertical integral of divergence of kinetic energy flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 82 ; + } +#Vertical integral of divergence of thermal energy flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 83 ; + } +#Vertical integral of divergence of moisture flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 84 ; + } +#Vertical integral of divergence of geopotential flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 85 ; + } +#Vertical integral of divergence of total energy flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 86 ; + } +#Vertical integral of divergence of ozone flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 87 ; + } +#Tendency of short wave radiation +'~' = { + table2Version = 162 ; + indicatorOfParameter = 100 ; + } +#Tendency of long wave radiation +'~' = { + table2Version = 162 ; + indicatorOfParameter = 101 ; + } +#Tendency of clear sky short wave radiation +'~' = { + table2Version = 162 ; + indicatorOfParameter = 102 ; + } +#Tendency of clear sky long wave radiation +'~' = { + table2Version = 162 ; + indicatorOfParameter = 103 ; + } +#Updraught mass flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 104 ; + } +#Downdraught mass flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 105 ; + } +#Updraught detrainment rate +'~' = { + table2Version = 162 ; + indicatorOfParameter = 106 ; + } +#Downdraught detrainment rate +'~' = { + table2Version = 162 ; + indicatorOfParameter = 107 ; + } +#Total precipitation flux +'~' = { + table2Version = 162 ; + indicatorOfParameter = 108 ; + } +#Turbulent diffusion coefficient for heat +'~' = { + table2Version = 162 ; + indicatorOfParameter = 109 ; + } +#Tendency of temperature due to physics +'~' = { + table2Version = 162 ; + indicatorOfParameter = 110 ; + } +#Tendency of specific humidity due to physics +'~' = { + table2Version = 162 ; + indicatorOfParameter = 111 ; + } +#Tendency of u component due to physics +'~' = { + table2Version = 162 ; + indicatorOfParameter = 112 ; + } +#Tendency of v component due to physics +'~' = { + table2Version = 162 ; + indicatorOfParameter = 113 ; + } +#Variance of geopotential +'~' = { + table2Version = 162 ; + indicatorOfParameter = 206 ; + } +#Covariance of geopotential/temperature +'~' = { + table2Version = 162 ; + indicatorOfParameter = 207 ; + } +#Variance of temperature +'~' = { + table2Version = 162 ; + indicatorOfParameter = 208 ; + } +#Covariance of geopotential/specific humidity +'~' = { + table2Version = 162 ; + indicatorOfParameter = 209 ; + } +#Covariance of temperature/specific humidity +'~' = { + table2Version = 162 ; + indicatorOfParameter = 210 ; + } +#Variance of specific humidity +'~' = { + table2Version = 162 ; + indicatorOfParameter = 211 ; + } +#Covariance of u component/geopotential +'~' = { + table2Version = 162 ; + indicatorOfParameter = 212 ; + } +#Covariance of u component/temperature +'~' = { + table2Version = 162 ; + indicatorOfParameter = 213 ; + } +#Covariance of u component/specific humidity +'~' = { + table2Version = 162 ; + indicatorOfParameter = 214 ; + } +#Variance of u component +'~' = { + table2Version = 162 ; + indicatorOfParameter = 215 ; + } +#Covariance of v component/geopotential +'~' = { + table2Version = 162 ; + indicatorOfParameter = 216 ; + } +#Covariance of v component/temperature +'~' = { + table2Version = 162 ; + indicatorOfParameter = 217 ; + } +#Covariance of v component/specific humidity +'~' = { + table2Version = 162 ; + indicatorOfParameter = 218 ; + } +#Covariance of v component/u component +'~' = { + table2Version = 162 ; + indicatorOfParameter = 219 ; + } +#Variance of v component +'~' = { + table2Version = 162 ; + indicatorOfParameter = 220 ; + } +#Covariance of omega/geopotential +'~' = { + table2Version = 162 ; + indicatorOfParameter = 221 ; + } +#Covariance of omega/temperature +'~' = { + table2Version = 162 ; + indicatorOfParameter = 222 ; + } +#Covariance of omega/specific humidity +'~' = { + table2Version = 162 ; + indicatorOfParameter = 223 ; + } +#Covariance of omega/u component +'~' = { + table2Version = 162 ; + indicatorOfParameter = 224 ; + } +#Covariance of omega/v component +'~' = { + table2Version = 162 ; + indicatorOfParameter = 225 ; + } +#Variance of omega +'~' = { + table2Version = 162 ; + indicatorOfParameter = 226 ; + } +#Variance of surface pressure +'~' = { + table2Version = 162 ; + indicatorOfParameter = 227 ; + } +#Variance of relative humidity +'~' = { + table2Version = 162 ; + indicatorOfParameter = 229 ; + } +#Covariance of u component/ozone +'~' = { + table2Version = 162 ; + indicatorOfParameter = 230 ; + } +#Covariance of v component/ozone +'~' = { + table2Version = 162 ; + indicatorOfParameter = 231 ; + } +#Covariance of omega/ozone +'~' = { + table2Version = 162 ; + indicatorOfParameter = 232 ; + } +#Variance of ozone +'~' = { + table2Version = 162 ; + indicatorOfParameter = 233 ; + } +#Indicates a missing value +'~' = { + table2Version = 162 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'tsw' = { + table2Version = 170 ; + indicatorOfParameter = 149 ; + } +#Soil wetness level 2 +'swl2' = { + table2Version = 170 ; + indicatorOfParameter = 171 ; + } +#Top net thermal radiation +'ttr' = { + table2Version = 170 ; + indicatorOfParameter = 179 ; + } +#Stream function anomaly +'strfa' = { + table2Version = 171 ; + indicatorOfParameter = 1 ; + } +#Velocity potential anomaly +'vpota' = { + table2Version = 171 ; + indicatorOfParameter = 2 ; + } +#Potential temperature anomaly +'pta' = { + table2Version = 171 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature anomaly +'epta' = { + table2Version = 171 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature anomaly +'septa' = { + table2Version = 171 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind anomaly +'udwa' = { + table2Version = 171 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind anomaly +'vdwa' = { + table2Version = 171 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind anomaly +'urwa' = { + table2Version = 171 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind anomaly +'vrwa' = { + table2Version = 171 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature anomaly +'uctpa' = { + table2Version = 171 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure anomaly +'uclna' = { + table2Version = 171 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence anomaly +'ucdva' = { + table2Version = 171 ; + indicatorOfParameter = 23 ; + } +#Lake cover anomaly +'cla' = { + table2Version = 171 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover anomaly +'cvla' = { + table2Version = 171 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover anomaly +'cvha' = { + table2Version = 171 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation anomaly +'tvla' = { + table2Version = 171 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation anomaly +'tvha' = { + table2Version = 171 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover anomaly +'sica' = { + table2Version = 171 ; + indicatorOfParameter = 31 ; + } +#Snow albedo anomaly +'asna' = { + table2Version = 171 ; + indicatorOfParameter = 32 ; + } +#Snow density anomaly +'rsna' = { + table2Version = 171 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature anomaly +'ssta' = { + table2Version = 171 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature anomaly layer 1 +'istal1' = { + table2Version = 171 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature anomaly layer 2 +'istal2' = { + table2Version = 171 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature anomaly layer 3 +'istal3' = { + table2Version = 171 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature anomaly layer 4 +'istal4' = { + table2Version = 171 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water anomaly layer 1 +'swval1' = { + table2Version = 171 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water anomaly layer 2 +'swval2' = { + table2Version = 171 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water anomaly layer 3 +'swval3' = { + table2Version = 171 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water anomaly layer 4 +'swval4' = { + table2Version = 171 ; + indicatorOfParameter = 42 ; + } +#Soil type anomaly +'slta' = { + table2Version = 171 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation anomaly +'esa' = { + table2Version = 171 ; + indicatorOfParameter = 44 ; + } +#Snowmelt anomaly +'smlta' = { + table2Version = 171 ; + indicatorOfParameter = 45 ; + } +#Solar duration anomaly +'sdura' = { + table2Version = 171 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation anomaly +'dsrpa' = { + table2Version = 171 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress anomaly +'magssa' = { + table2Version = 171 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust anomaly +'10fga' = { + table2Version = 171 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction anomaly +'lspfa' = { + table2Version = 171 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature in the last 24 hours anomaly +'mx2t24a' = { + table2Version = 171 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature in the last 24 hours anomaly +'mn2t24a' = { + table2Version = 171 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential anomaly +'monta' = { + table2Version = 171 ; + indicatorOfParameter = 53 ; + } +#Pressure anomaly +'pa' = { + table2Version = 171 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours anomaly +'mn2t24a' = { + table2Version = 171 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours anomaly +'mn2d24a' = { + table2Version = 171 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface anomaly +'uvba' = { + table2Version = 171 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface anomaly +'para' = { + table2Version = 171 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy anomaly +'capea' = { + table2Version = 171 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity anomaly +'pva' = { + table2Version = 171 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations anomaly +'tpoa' = { + table2Version = 171 ; + indicatorOfParameter = 61 ; + } +#Observation count anomaly +'obcta' = { + table2Version = 171 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference anomaly +'stsktda' = { + table2Version = 171 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference anomaly +'ftsktda' = { + table2Version = 171 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference anomaly +'sktda' = { + table2Version = 171 ; + indicatorOfParameter = 65 ; + } +#Total column liquid water anomaly +'tclwa' = { + table2Version = 171 ; + indicatorOfParameter = 78 ; + } +#Total column ice water anomaly +'tciwa' = { + table2Version = 171 ; + indicatorOfParameter = 79 ; + } +#Vertically integrated total energy anomaly +'vitea' = { + table2Version = 171 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'~' = { + table2Version = 171 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide anomaly +'ata' = { + table2Version = 171 ; + indicatorOfParameter = 127 ; + } +#Budget values anomaly +'bva' = { + table2Version = 171 ; + indicatorOfParameter = 128 ; + } +#Geopotential anomaly +'za' = { + table2Version = 171 ; + indicatorOfParameter = 129 ; + } +#Temperature anomaly +'ta' = { + table2Version = 171 ; + indicatorOfParameter = 130 ; + } +#U component of wind anomaly +'ua' = { + table2Version = 171 ; + indicatorOfParameter = 131 ; + } +#V component of wind anomaly +'va' = { + table2Version = 171 ; + indicatorOfParameter = 132 ; + } +#Specific humidity anomaly +'qa' = { + table2Version = 171 ; + indicatorOfParameter = 133 ; + } +#Surface pressure anomaly +'spa' = { + table2Version = 171 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity (pressure) anomaly +'wa' = { + table2Version = 171 ; + indicatorOfParameter = 135 ; + } +#Total column water anomaly +'tcwa' = { + table2Version = 171 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour anomaly +'tcwva' = { + table2Version = 171 ; + indicatorOfParameter = 137 ; + } +#Relative vorticity anomaly +'voa' = { + table2Version = 171 ; + indicatorOfParameter = 138 ; + } +#Soil temperature anomaly level 1 +'stal1' = { + table2Version = 171 ; + indicatorOfParameter = 139 ; + } +#Soil wetness anomaly level 1 +'swal1' = { + table2Version = 171 ; + indicatorOfParameter = 140 ; + } +#Snow depth anomaly +'sda' = { + table2Version = 171 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'lspa' = { + table2Version = 171 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation anomaly +'cpa' = { + table2Version = 171 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) anomaly +'sfa' = { + table2Version = 171 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation anomaly +'blda' = { + table2Version = 171 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux anomaly +'sshfa' = { + table2Version = 171 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux anomaly +'slhfa' = { + table2Version = 171 ; + indicatorOfParameter = 147 ; + } +#Charnock anomaly +'chnka' = { + table2Version = 171 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation anomaly +'snra' = { + table2Version = 171 ; + indicatorOfParameter = 149 ; + } +#Top net radiation anomaly +'tnra' = { + table2Version = 171 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure anomaly +'msla' = { + table2Version = 171 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure anomaly +'lspa' = { + table2Version = 171 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate anomaly +'swhra' = { + table2Version = 171 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate anomaly +'lwhra' = { + table2Version = 171 ; + indicatorOfParameter = 154 ; + } +#Relative divergence anomaly +'da' = { + table2Version = 171 ; + indicatorOfParameter = 155 ; + } +#Height anomaly +'gha' = { + table2Version = 171 ; + indicatorOfParameter = 156 ; + } +#Relative humidity anomaly +'ra' = { + table2Version = 171 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure anomaly +'tspa' = { + table2Version = 171 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height anomaly +'blha' = { + table2Version = 171 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography anomaly +'sdora' = { + table2Version = 171 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography anomaly +'isora' = { + table2Version = 171 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography anomaly +'anora' = { + table2Version = 171 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography anomaly +'slora' = { + table2Version = 171 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover anomaly +'tcca' = { + table2Version = 171 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component anomaly +'10ua' = { + table2Version = 171 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component anomaly +'10va' = { + table2Version = 171 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature anomaly +'2ta' = { + table2Version = 171 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature anomaly +'2da' = { + table2Version = 171 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards anomaly +'ssrda' = { + table2Version = 171 ; + indicatorOfParameter = 169 ; + } +#Soil temperature anomaly level 2 +'slal2' = { + table2Version = 171 ; + indicatorOfParameter = 170 ; + } +#Soil wetness anomaly level 2 +'swal2' = { + table2Version = 171 ; + indicatorOfParameter = 171 ; + } +#Surface roughness anomaly +'sra' = { + table2Version = 171 ; + indicatorOfParameter = 173 ; + } +#Albedo anomaly +'ala' = { + table2Version = 171 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards anomaly +'strda' = { + table2Version = 171 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation anomaly +'ssra' = { + table2Version = 171 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation anomaly +'stra' = { + table2Version = 171 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation anomaly +'tsra' = { + table2Version = 171 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation anomaly +'ttra' = { + table2Version = 171 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress anomaly +'eqssa' = { + table2Version = 171 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress anomaly +'nsssa' = { + table2Version = 171 ; + indicatorOfParameter = 181 ; + } +#Evaporation anomaly +'ea' = { + table2Version = 171 ; + indicatorOfParameter = 182 ; + } +#Soil temperature anomaly level 3 +'stal3' = { + table2Version = 171 ; + indicatorOfParameter = 183 ; + } +#Soil wetness anomaly level 3 +'swal3' = { + table2Version = 171 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover anomaly +'ccca' = { + table2Version = 171 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover anomaly +'lcca' = { + table2Version = 171 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover anomaly +'mcca' = { + table2Version = 171 ; + indicatorOfParameter = 187 ; + } +#High cloud cover anomaly +'hcca' = { + table2Version = 171 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration anomaly +'sunda' = { + table2Version = 171 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance anomaly +'ewova' = { + table2Version = 171 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance anomaly +'nsova' = { + table2Version = 171 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance anomaly +'nwova' = { + table2Version = 171 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance anomaly +'neova' = { + table2Version = 171 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature anomaly +'btmpa' = { + table2Version = 171 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress anomaly +'lgwsa' = { + table2Version = 171 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress anomaly +'mgwsa' = { + table2Version = 171 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation anomaly +'gwda' = { + table2Version = 171 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content anomaly +'srca' = { + table2Version = 171 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction anomaly +'vfa' = { + table2Version = 171 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography anomaly +'vsoa' = { + table2Version = 171 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres anomaly +'mx2ta' = { + table2Version = 171 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres anomaly +'mn2ta' = { + table2Version = 171 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio anomaly +'o3a' = { + table2Version = 171 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights anomaly +'pawa' = { + table2Version = 171 ; + indicatorOfParameter = 204 ; + } +#Runoff anomaly +'roa' = { + table2Version = 171 ; + indicatorOfParameter = 205 ; + } +#Total column ozone anomaly +'tco3a' = { + table2Version = 171 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed anomaly +'10ua' = { + table2Version = 171 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation clear sky anomaly +'tsrca' = { + table2Version = 171 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation clear sky anomaly +'ttrca' = { + table2Version = 171 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation clear sky anomaly +'ssrca' = { + table2Version = 171 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'strca' = { + table2Version = 171 ; + indicatorOfParameter = 211 ; + } +#Solar insolation anomaly +'sia' = { + table2Version = 171 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation anomaly +'dhra' = { + table2Version = 171 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion anomaly +'dhvda' = { + table2Version = 171 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection anomaly +'dhcca' = { + table2Version = 171 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating by large-scale condensation anomaly +'dhlca' = { + table2Version = 171 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind anomaly +'vdzwa' = { + table2Version = 171 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind anomaly +'vdmwa' = { + table2Version = 171 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency anomaly +'ewgda' = { + table2Version = 171 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency anomaly +'nsgda' = { + table2Version = 171 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind anomaly +'ctzwa' = { + table2Version = 171 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind anomaly +'ctmwa' = { + table2Version = 171 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity anomaly +'vdha' = { + table2Version = 171 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection anomaly +'htcca' = { + table2Version = 171 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation anomaly +'htlca' = { + table2Version = 171 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity anomaly +'crnha' = { + table2Version = 171 ; + indicatorOfParameter = 227 ; + } +#Total precipitation anomaly +'tpa' = { + table2Version = 171 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress anomaly +'iewsa' = { + table2Version = 171 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress anomaly +'inssa' = { + table2Version = 171 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux anomaly +'ishfa' = { + table2Version = 171 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux anomaly +'iea' = { + table2Version = 171 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity anomaly +'asqa' = { + table2Version = 171 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat anomaly +'lsrha' = { + table2Version = 171 ; + indicatorOfParameter = 234 ; + } +#Skin temperature anomaly +'skta' = { + table2Version = 171 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 anomaly +'stal4' = { + table2Version = 171 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 anomaly +'swal4' = { + table2Version = 171 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer anomaly +'tsna' = { + table2Version = 171 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall anomaly +'csfa' = { + table2Version = 171 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall anomaly +'lsfa' = { + table2Version = 171 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency anomaly +'acfa' = { + table2Version = 171 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency anomaly +'alwa' = { + table2Version = 171 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo anomaly +'fala' = { + table2Version = 171 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness anomaly +'fsra' = { + table2Version = 171 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat anomaly +'flsra' = { + table2Version = 171 ; + indicatorOfParameter = 245 ; + } +#Cloud liquid water content anomaly +'clwca' = { + table2Version = 171 ; + indicatorOfParameter = 246 ; + } +#Cloud ice water content anomaly +'ciwca' = { + table2Version = 171 ; + indicatorOfParameter = 247 ; + } +#Cloud cover anomaly +'cca' = { + table2Version = 171 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency anomaly +'aiwa' = { + table2Version = 171 ; + indicatorOfParameter = 249 ; + } +#Ice age anomaly +'iaa' = { + table2Version = 171 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature anomaly +'attea' = { + table2Version = 171 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity anomaly +'athea' = { + table2Version = 171 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind anomaly +'atzea' = { + table2Version = 171 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind anomaly +'atmwa' = { + table2Version = 171 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'~' = { + table2Version = 171 ; + indicatorOfParameter = 255 ; + } +#Snow evaporation +'esrate' = { + table2Version = 172 ; + indicatorOfParameter = 44 ; + } +#Snowmelt +'~' = { + table2Version = 172 ; + indicatorOfParameter = 45 ; + } +#Magnitude of surface stress +'~' = { + table2Version = 172 ; + indicatorOfParameter = 48 ; + } +#Large-scale precipitation fraction +'~' = { + table2Version = 172 ; + indicatorOfParameter = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) +'~' = { + table2Version = 172 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'cprate' = { + table2Version = 172 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) +'~' = { + table2Version = 172 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation +'bldrate' = { + table2Version = 172 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux +'~' = { + table2Version = 172 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux +'~' = { + table2Version = 172 ; + indicatorOfParameter = 147 ; + } +#Surface net radiation +'~' = { + table2Version = 172 ; + indicatorOfParameter = 149 ; + } +#Short-wave heating rate +'~' = { + table2Version = 172 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate +'~' = { + table2Version = 172 ; + indicatorOfParameter = 154 ; + } +#Surface solar radiation downwards +'~' = { + table2Version = 172 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards +'~' = { + table2Version = 172 ; + indicatorOfParameter = 175 ; + } +#Surface solar radiation +'~' = { + table2Version = 172 ; + indicatorOfParameter = 176 ; + } +#Surface thermal radiation +'~' = { + table2Version = 172 ; + indicatorOfParameter = 177 ; + } +#Top solar radiation +'~' = { + table2Version = 172 ; + indicatorOfParameter = 178 ; + } +#Top thermal radiation +'~' = { + table2Version = 172 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress +'~' = { + table2Version = 172 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'~' = { + table2Version = 172 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'erate' = { + table2Version = 172 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration +'~' = { + table2Version = 172 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress +'~' = { + table2Version = 172 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress +'~' = { + table2Version = 172 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation +'gwdrate' = { + table2Version = 172 ; + indicatorOfParameter = 197 ; + } +#Runoff +'~' = { + table2Version = 172 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky +'~' = { + table2Version = 172 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky +'~' = { + table2Version = 172 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky +'~' = { + table2Version = 172 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky +'~' = { + table2Version = 172 ; + indicatorOfParameter = 211 ; + } +#Solar insolation +'~' = { + table2Version = 172 ; + indicatorOfParameter = 212 ; + } +#Total precipitation +'tprate' = { + table2Version = 172 ; + indicatorOfParameter = 228 ; + } +#Convective snowfall +'~' = { + table2Version = 172 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall +'~' = { + table2Version = 172 ; + indicatorOfParameter = 240 ; + } +#Indicates a missing value +'~' = { + table2Version = 172 ; + indicatorOfParameter = 255 ; + } +#Snow evaporation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 44 ; + } +#Snowmelt anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 45 ; + } +#Magnitude of surface stress anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 48 ; + } +#Large-scale precipitation fraction anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) anomalous rate of accumulation +'sfara' = { + table2Version = 173 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 147 ; + } +#Surface net radiation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 149 ; + } +#Short-wave heating rate anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 154 ; + } +#Surface solar radiation downwards anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 175 ; + } +#Surface solar radiation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 176 ; + } +#Surface thermal radiation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 177 ; + } +#Top solar radiation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 178 ; + } +#Top thermal radiation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 181 ; + } +#Evaporation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration anomalous rate of accumulation +'sundara' = { + table2Version = 173 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 197 ; + } +#Runoff anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 211 ; + } +#Solar insolation anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 212 ; + } +#Total precipitation anomalous rate of accumulation +'tpara' = { + table2Version = 173 ; + indicatorOfParameter = 228 ; + } +#Convective snowfall anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 240 ; + } +#Indicates a missing value +'~' = { + table2Version = 173 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'~' = { + table2Version = 174 ; + indicatorOfParameter = 6 ; + } +#Surface runoff +'sro' = { + table2Version = 174 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff +'ssro' = { + table2Version = 174 ; + indicatorOfParameter = 9 ; + } +#Fraction of sea-ice in sea +'~' = { + table2Version = 174 ; + indicatorOfParameter = 31 ; + } +#Open-sea surface temperature +'~' = { + table2Version = 174 ; + indicatorOfParameter = 34 ; + } +#Volumetric soil water layer 1 +'~' = { + table2Version = 174 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'~' = { + table2Version = 174 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'~' = { + table2Version = 174 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'~' = { + table2Version = 174 ; + indicatorOfParameter = 42 ; + } +#10 metre wind gust in the last 24 hours +'~' = { + table2Version = 174 ; + indicatorOfParameter = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'~' = { + table2Version = 174 ; + indicatorOfParameter = 55 ; + } +#Net primary productivity +'~' = { + table2Version = 174 ; + indicatorOfParameter = 83 ; + } +#10m U wind over land +'~' = { + table2Version = 174 ; + indicatorOfParameter = 85 ; + } +#10m V wind over land +'~' = { + table2Version = 174 ; + indicatorOfParameter = 86 ; + } +#1.5m temperature over land +'~' = { + table2Version = 174 ; + indicatorOfParameter = 87 ; + } +#1.5m dewpoint temperature over land +'~' = { + table2Version = 174 ; + indicatorOfParameter = 88 ; + } +#Top incoming solar radiation +'~' = { + table2Version = 174 ; + indicatorOfParameter = 89 ; + } +#Top outgoing solar radiation +'~' = { + table2Version = 174 ; + indicatorOfParameter = 90 ; + } +#Mean sea surface temperature +'~' = { + table2Version = 174 ; + indicatorOfParameter = 94 ; + } +#1.5m specific humidity +'~' = { + table2Version = 174 ; + indicatorOfParameter = 95 ; + } +#Sea-ice thickness +'~' = { + table2Version = 174 ; + indicatorOfParameter = 98 ; + } +#Liquid water potential temperature +'~' = { + table2Version = 174 ; + indicatorOfParameter = 99 ; + } +#Ocean ice concentration +'~' = { + table2Version = 174 ; + indicatorOfParameter = 110 ; + } +#Ocean mean ice depth +'~' = { + table2Version = 174 ; + indicatorOfParameter = 111 ; + } +#Soil temperature layer 1 +'~' = { + table2Version = 174 ; + indicatorOfParameter = 139 ; + } +#Average potential temperature in upper 293.4m +'~' = { + table2Version = 174 ; + indicatorOfParameter = 164 ; + } +#1.5m temperature +'~' = { + table2Version = 174 ; + indicatorOfParameter = 167 ; + } +#1.5m dewpoint temperature +'~' = { + table2Version = 174 ; + indicatorOfParameter = 168 ; + } +#Soil temperature layer 2 +'~' = { + table2Version = 174 ; + indicatorOfParameter = 170 ; + } +#Average salinity in upper 293.4m +'~' = { + table2Version = 174 ; + indicatorOfParameter = 175 ; + } +#Soil temperature layer 3 +'~' = { + table2Version = 174 ; + indicatorOfParameter = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'~' = { + table2Version = 174 ; + indicatorOfParameter = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'~' = { + table2Version = 174 ; + indicatorOfParameter = 202 ; + } +#Soil temperature layer 4 +'~' = { + table2Version = 174 ; + indicatorOfParameter = 236 ; + } +#Indicates a missing value +'~' = { + table2Version = 174 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'~' = { + table2Version = 175 ; + indicatorOfParameter = 6 ; + } +#Fraction of sea-ice in sea +'~' = { + table2Version = 175 ; + indicatorOfParameter = 31 ; + } +#Open-sea surface temperature +'~' = { + table2Version = 175 ; + indicatorOfParameter = 34 ; + } +#Volumetric soil water layer 1 +'~' = { + table2Version = 175 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'~' = { + table2Version = 175 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'~' = { + table2Version = 175 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'~' = { + table2Version = 175 ; + indicatorOfParameter = 42 ; + } +#10m wind gust in the last 24 hours +'~' = { + table2Version = 175 ; + indicatorOfParameter = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'~' = { + table2Version = 175 ; + indicatorOfParameter = 55 ; + } +#Net primary productivity +'~' = { + table2Version = 175 ; + indicatorOfParameter = 83 ; + } +#10m U wind over land +'~' = { + table2Version = 175 ; + indicatorOfParameter = 85 ; + } +#10m V wind over land +'~' = { + table2Version = 175 ; + indicatorOfParameter = 86 ; + } +#1.5m temperature over land +'~' = { + table2Version = 175 ; + indicatorOfParameter = 87 ; + } +#1.5m dewpoint temperature over land +'~' = { + table2Version = 175 ; + indicatorOfParameter = 88 ; + } +#Top incoming solar radiation +'~' = { + table2Version = 175 ; + indicatorOfParameter = 89 ; + } +#Top outgoing solar radiation +'~' = { + table2Version = 175 ; + indicatorOfParameter = 90 ; + } +#Ocean ice concentration +'~' = { + table2Version = 175 ; + indicatorOfParameter = 110 ; + } +#Ocean mean ice depth +'~' = { + table2Version = 175 ; + indicatorOfParameter = 111 ; + } +#Soil temperature layer 1 +'~' = { + table2Version = 175 ; + indicatorOfParameter = 139 ; + } +#Average potential temperature in upper 293.4m +'~' = { + table2Version = 175 ; + indicatorOfParameter = 164 ; + } +#1.5m temperature +'~' = { + table2Version = 175 ; + indicatorOfParameter = 167 ; + } +#1.5m dewpoint temperature +'~' = { + table2Version = 175 ; + indicatorOfParameter = 168 ; + } +#Soil temperature layer 2 +'~' = { + table2Version = 175 ; + indicatorOfParameter = 170 ; + } +#Average salinity in upper 293.4m +'~' = { + table2Version = 175 ; + indicatorOfParameter = 175 ; + } +#Soil temperature layer 3 +'~' = { + table2Version = 175 ; + indicatorOfParameter = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'~' = { + table2Version = 175 ; + indicatorOfParameter = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'~' = { + table2Version = 175 ; + indicatorOfParameter = 202 ; + } +#Soil temperature layer 4 +'~' = { + table2Version = 175 ; + indicatorOfParameter = 236 ; + } +#Indicates a missing value +'~' = { + table2Version = 175 ; + indicatorOfParameter = 255 ; + } +#Total soil wetness +'tsw' = { + table2Version = 180 ; + indicatorOfParameter = 149 ; + } +#Surface net solar radiation +'ssr' = { + table2Version = 180 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation +'str' = { + table2Version = 180 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation +'tsr' = { + table2Version = 180 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation +'ttr' = { + table2Version = 180 ; + indicatorOfParameter = 179 ; + } +#Snow depth +'sdsien' = { + table2Version = 190 ; + indicatorOfParameter = 141 ; + } +#Field capacity +'cap' = { + table2Version = 190 ; + indicatorOfParameter = 170 ; + } +#Wilting point +'wiltsien' = { + table2Version = 190 ; + indicatorOfParameter = 171 ; + } +#Roughness length +'sr' = { + table2Version = 190 ; + indicatorOfParameter = 173 ; + } +#Total soil moisture +'tsm' = { + table2Version = 190 ; + indicatorOfParameter = 229 ; + } +#2 metre dewpoint temperature difference +'2ddiff' = { + table2Version = 200 ; + indicatorOfParameter = 168 ; + } +#downward shortwave radiant flux density +'~' = { + table2Version = 201 ; + indicatorOfParameter = 1 ; + } +#upward shortwave radiant flux density +'~' = { + table2Version = 201 ; + indicatorOfParameter = 2 ; + } +#downward longwave radiant flux density +'~' = { + table2Version = 201 ; + indicatorOfParameter = 3 ; + } +#upward longwave radiant flux density +'~' = { + table2Version = 201 ; + indicatorOfParameter = 4 ; + } +#downwd photosynthetic active radiant flux density +'apab_s' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + } +#net shortwave flux +'~' = { + table2Version = 201 ; + indicatorOfParameter = 6 ; + } +#net longwave flux +'~' = { + table2Version = 201 ; + indicatorOfParameter = 7 ; + } +#total net radiative flux density +'~' = { + table2Version = 201 ; + indicatorOfParameter = 8 ; + } +#downw shortw radiant flux density, cloudfree part +'~' = { + table2Version = 201 ; + indicatorOfParameter = 9 ; + } +#upw shortw radiant flux density, cloudy part +'~' = { + table2Version = 201 ; + indicatorOfParameter = 10 ; + } +#downw longw radiant flux density, cloudfree part +'~' = { + table2Version = 201 ; + indicatorOfParameter = 11 ; + } +#upw longw radiant flux density, cloudy part +'~' = { + table2Version = 201 ; + indicatorOfParameter = 12 ; + } +#shortwave radiative heating rate +'sohr_rad' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + } +#longwave radiative heating rate +'thhr_rad' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + } +#total radiative heating rate +'~' = { + table2Version = 201 ; + indicatorOfParameter = 15 ; + } +#soil heat flux, surface +'~' = { + table2Version = 201 ; + indicatorOfParameter = 16 ; + } +#soil heat flux, bottom of layer +'~' = { + table2Version = 201 ; + indicatorOfParameter = 17 ; + } +#fractional cloud cover +'clc' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + } +#cloud cover, grid scale +'~' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + } +#specific cloud water content +'qc' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + } +#cloud water content, grid scale, vert integrated +'~' = { + table2Version = 201 ; + indicatorOfParameter = 32 ; + } +#specific cloud ice content, grid scale +'qi' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + } +#cloud ice content, grid scale, vert integrated +'~' = { + table2Version = 201 ; + indicatorOfParameter = 34 ; + } +#specific rainwater content, grid scale +'~' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + } +#specific snow content, grid scale +'~' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + } +#specific rainwater content, gs, vert. integrated +'~' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + } +#specific snow content, gs, vert. integrated +'~' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + } +#total column water +'twater' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + } +#vert. integral of divergence of tot. water content +'~' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + } +#cloud covers CH_CM_CL (000...888) +'ch_cm_cl' = { + table2Version = 201 ; + indicatorOfParameter = 50 ; + } +#cloud cover CH (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#total cloud cover (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 54 ; + } +#fog (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 55 ; + } +#fog +'~' = { + table2Version = 201 ; + indicatorOfParameter = 56 ; + } +#cloud cover, convective cirrus +'~' = { + table2Version = 201 ; + indicatorOfParameter = 60 ; + } +#specific cloud water content, convective clouds +'~' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + } +#cloud water content, conv clouds, vert integrated +'~' = { + table2Version = 201 ; + indicatorOfParameter = 62 ; + } +#specific cloud ice content, convective clouds +'~' = { + table2Version = 201 ; + indicatorOfParameter = 63 ; + } +#cloud ice content, conv clouds, vert integrated +'~' = { + table2Version = 201 ; + indicatorOfParameter = 64 ; + } +#convective mass flux +'~' = { + table2Version = 201 ; + indicatorOfParameter = 65 ; + } +#Updraft velocity, convection +'~' = { + table2Version = 201 ; + indicatorOfParameter = 66 ; + } +#entrainment parameter, convection +'~' = { + table2Version = 201 ; + indicatorOfParameter = 67 ; + } +#cloud base, convective clouds (above msl) +'hbas_con' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + } +#cloud top, convective clouds (above msl) +'htop_con' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + } +#convective layers (00...77) (BKE) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 70 ; + } +#KO-index +'~' = { + table2Version = 201 ; + indicatorOfParameter = 71 ; + } +#convection base index +'bas_con' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + } +#convection top index +'top_con' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + } +#convective temperature tendency +'dt_con' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + } +#convective tendency of specific humidity +'dqv_con' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + } +#convective tendency of total heat +'~' = { + table2Version = 201 ; + indicatorOfParameter = 76 ; + } +#convective tendency of total water +'~' = { + table2Version = 201 ; + indicatorOfParameter = 77 ; + } +#convective momentum tendency (X-component) +'du_con' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + } +#convective momentum tendency (Y-component) +'dv_con' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + } +#convective vorticity tendency +'~' = { + table2Version = 201 ; + indicatorOfParameter = 80 ; + } +#convective divergence tendency +'~' = { + table2Version = 201 ; + indicatorOfParameter = 81 ; + } +#top of dry convection (above msl) +'htop_dc' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + } +#dry convection top index +'~' = { + table2Version = 201 ; + indicatorOfParameter = 83 ; + } +#height of 0 degree Celsius isotherm above msl +'hzerocl' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + } +#height of snow-fall limit +'snowlmt' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + } +#spec. content of precip. particles +'qrs_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + } +#surface precipitation rate, rain, grid scale +'prr_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + } +#surface precipitation rate, snow, grid scale +'prs_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + } +#surface precipitation amount, rain, grid scale +'rain_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + } +#surface precipitation rate, rain, convective +'prr_con' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + } +#surface precipitation rate, snow, convective +'prs_con' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + } +#surface precipitation amount, rain, convective +'rain_con' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + } +#deviation of pressure from reference value +'pp' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + } +#coefficient of horizontal diffusion +'~' = { + table2Version = 201 ; + indicatorOfParameter = 150 ; + } +#Maximum wind velocity +'vmax_10m' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + } +#water content of interception store +'w_i' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + } +#snow temperature +'t_snow' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + } +#ice surface temperature +'t_ice' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + } +#convective available potential energy +'cape_con' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + } +#Indicates a missing value +'~' = { + table2Version = 201 ; + indicatorOfParameter = 255 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'aermr01' = { + table2Version = 210 ; + indicatorOfParameter = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'aermr02' = { + table2Version = 210 ; + indicatorOfParameter = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'aermr03' = { + table2Version = 210 ; + indicatorOfParameter = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'aermr04' = { + table2Version = 210 ; + indicatorOfParameter = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'aermr05' = { + table2Version = 210 ; + indicatorOfParameter = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'aermr06' = { + table2Version = 210 ; + indicatorOfParameter = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'aermr07' = { + table2Version = 210 ; + indicatorOfParameter = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'aermr08' = { + table2Version = 210 ; + indicatorOfParameter = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'aermr09' = { + table2Version = 210 ; + indicatorOfParameter = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'aermr10' = { + table2Version = 210 ; + indicatorOfParameter = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'aermr11' = { + table2Version = 210 ; + indicatorOfParameter = 11 ; + } +#Aerosol type 12 mixing ratio +'aermr12' = { + table2Version = 210 ; + indicatorOfParameter = 12 ; + } +#Aerosol type 1 source/gain accumulated +'aergn01' = { + table2Version = 210 ; + indicatorOfParameter = 16 ; + } +#Aerosol type 2 source/gain accumulated +'aergn02' = { + table2Version = 210 ; + indicatorOfParameter = 17 ; + } +#Aerosol type 3 source/gain accumulated +'aergn03' = { + table2Version = 210 ; + indicatorOfParameter = 18 ; + } +#Aerosol type 4 source/gain accumulated +'aergn04' = { + table2Version = 210 ; + indicatorOfParameter = 19 ; + } +#Aerosol type 5 source/gain accumulated +'aergn05' = { + table2Version = 210 ; + indicatorOfParameter = 20 ; + } +#Aerosol type 6 source/gain accumulated +'aergn06' = { + table2Version = 210 ; + indicatorOfParameter = 21 ; + } +#Aerosol type 7 source/gain accumulated +'aergn07' = { + table2Version = 210 ; + indicatorOfParameter = 22 ; + } +#Aerosol type 8 source/gain accumulated +'aergn08' = { + table2Version = 210 ; + indicatorOfParameter = 23 ; + } +#Aerosol type 9 source/gain accumulated +'aergn09' = { + table2Version = 210 ; + indicatorOfParameter = 24 ; + } +#Aerosol type 10 source/gain accumulated +'aergn10' = { + table2Version = 210 ; + indicatorOfParameter = 25 ; + } +#Aerosol type 11 source/gain accumulated +'aergn11' = { + table2Version = 210 ; + indicatorOfParameter = 26 ; + } +#Aerosol type 12 source/gain accumulated +'aergn12' = { + table2Version = 210 ; + indicatorOfParameter = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'aerls01' = { + table2Version = 210 ; + indicatorOfParameter = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'aerls02' = { + table2Version = 210 ; + indicatorOfParameter = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'aerls03' = { + table2Version = 210 ; + indicatorOfParameter = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'aerls04' = { + table2Version = 210 ; + indicatorOfParameter = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'aerls05' = { + table2Version = 210 ; + indicatorOfParameter = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'aerls06' = { + table2Version = 210 ; + indicatorOfParameter = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'aerls07' = { + table2Version = 210 ; + indicatorOfParameter = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'aerls08' = { + table2Version = 210 ; + indicatorOfParameter = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'aerls09' = { + table2Version = 210 ; + indicatorOfParameter = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'aerls10' = { + table2Version = 210 ; + indicatorOfParameter = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'aerls11' = { + table2Version = 210 ; + indicatorOfParameter = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'aerls12' = { + table2Version = 210 ; + indicatorOfParameter = 42 ; + } +#Aerosol precursor mixing ratio +'aerpr' = { + table2Version = 210 ; + indicatorOfParameter = 46 ; + } +#Aerosol small mode mixing ratio +'aersm' = { + table2Version = 210 ; + indicatorOfParameter = 47 ; + } +#Aerosol large mode mixing ratio +'aerlg' = { + table2Version = 210 ; + indicatorOfParameter = 48 ; + } +#Aerosol precursor optical depth +'aodpr' = { + table2Version = 210 ; + indicatorOfParameter = 49 ; + } +#Aerosol small mode optical depth +'aodsm' = { + table2Version = 210 ; + indicatorOfParameter = 50 ; + } +#Aerosol large mode optical depth +'aodlg' = { + table2Version = 210 ; + indicatorOfParameter = 51 ; + } +#Dust emission potential +'aerdep' = { + table2Version = 210 ; + indicatorOfParameter = 52 ; + } +#Lifting threshold speed +'aerlts' = { + table2Version = 210 ; + indicatorOfParameter = 53 ; + } +#Soil clay content +'aerscc' = { + table2Version = 210 ; + indicatorOfParameter = 54 ; + } +#Carbon Dioxide +'co2' = { + table2Version = 210 ; + indicatorOfParameter = 61 ; + } +#Methane +'ch4' = { + table2Version = 210 ; + indicatorOfParameter = 62 ; + } +#Nitrous oxide +'n2o' = { + table2Version = 210 ; + indicatorOfParameter = 63 ; + } +#Total column Carbon Dioxide +'tcco2' = { + table2Version = 210 ; + indicatorOfParameter = 64 ; + } +#Total column Methane +'tcch4' = { + table2Version = 210 ; + indicatorOfParameter = 65 ; + } +#Total column Nitrous oxide +'tcn2o' = { + table2Version = 210 ; + indicatorOfParameter = 66 ; + } +#Ocean flux of Carbon Dioxide +'co2of' = { + table2Version = 210 ; + indicatorOfParameter = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'co2nbf' = { + table2Version = 210 ; + indicatorOfParameter = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'co2apf' = { + table2Version = 210 ; + indicatorOfParameter = 69 ; + } +#Methane Surface Fluxes +'ch4f' = { + table2Version = 210 ; + indicatorOfParameter = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'kch4' = { + table2Version = 210 ; + indicatorOfParameter = 71 ; + } +#Wildfire flux of Carbon Dioxide +'co2fire' = { + table2Version = 210 ; + indicatorOfParameter = 80 ; + } +#Wildfire flux of Carbon Monoxide +'cofire' = { + table2Version = 210 ; + indicatorOfParameter = 81 ; + } +#Wildfire flux of Methane +'ch4fire' = { + table2Version = 210 ; + indicatorOfParameter = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'nmhcfire' = { + table2Version = 210 ; + indicatorOfParameter = 83 ; + } +#Wildfire flux of Hydrogen +'h2fire' = { + table2Version = 210 ; + indicatorOfParameter = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'noxfire' = { + table2Version = 210 ; + indicatorOfParameter = 85 ; + } +#Wildfire flux of Nitrous Oxide +'n2ofire' = { + table2Version = 210 ; + indicatorOfParameter = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'pm2p5fire' = { + table2Version = 210 ; + indicatorOfParameter = 87 ; + } +#Wildfire flux of Total Particulate Matter +'tpmfire' = { + table2Version = 210 ; + indicatorOfParameter = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'tcfire' = { + table2Version = 210 ; + indicatorOfParameter = 89 ; + } +#Wildfire flux of Organic Carbon +'ocfire' = { + table2Version = 210 ; + indicatorOfParameter = 90 ; + } +#Wildfire flux of Black Carbon +'bcfire' = { + table2Version = 210 ; + indicatorOfParameter = 91 ; + } +#Wildfire overall flux of burnt Carbon +'cfire' = { + table2Version = 210 ; + indicatorOfParameter = 92 ; + } +#Wildfire fraction of C4 plants +'c4ffire' = { + table2Version = 210 ; + indicatorOfParameter = 93 ; + } +#Wildfire vegetation map index +'vegfire' = { + table2Version = 210 ; + indicatorOfParameter = 94 ; + } +#Wildfire Combustion Completeness +'ccfire' = { + table2Version = 210 ; + indicatorOfParameter = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'flfire' = { + table2Version = 210 ; + indicatorOfParameter = 96 ; + } +#Wildfire fraction of area observed +'offire' = { + table2Version = 210 ; + indicatorOfParameter = 97 ; + } +#Wildfire observed area +'oafire' = { + table2Version = 210 ; + indicatorOfParameter = 98 ; + } +#Wildfire radiative power +'frpfire' = { + table2Version = 210 ; + indicatorOfParameter = 99 ; + } +#Wildfire combustion rate +'crfire' = { + table2Version = 210 ; + indicatorOfParameter = 100 ; + } +#Nitrogen dioxide +'no2' = { + table2Version = 210 ; + indicatorOfParameter = 121 ; + } +#Sulphur dioxide +'so2' = { + table2Version = 210 ; + indicatorOfParameter = 122 ; + } +#Carbon monoxide +'co' = { + table2Version = 210 ; + indicatorOfParameter = 123 ; + } +#Formaldehyde +'hcho' = { + table2Version = 210 ; + indicatorOfParameter = 124 ; + } +#Total column Nitrogen dioxide +'tcno2' = { + table2Version = 210 ; + indicatorOfParameter = 125 ; + } +#Total column Sulphur dioxide +'tcso2' = { + table2Version = 210 ; + indicatorOfParameter = 126 ; + } +#Total column Carbon monoxide +'tcco' = { + table2Version = 210 ; + indicatorOfParameter = 127 ; + } +#Total column Formaldehyde +'tchcho' = { + table2Version = 210 ; + indicatorOfParameter = 128 ; + } +#Nitrogen Oxides +'nox' = { + table2Version = 210 ; + indicatorOfParameter = 129 ; + } +#Total Column Nitrogen Oxides +'tcnox' = { + table2Version = 210 ; + indicatorOfParameter = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'grg1' = { + table2Version = 210 ; + indicatorOfParameter = 131 ; + } +#Total column GRG tracer 1 +'tcgrg1' = { + table2Version = 210 ; + indicatorOfParameter = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'grg2' = { + table2Version = 210 ; + indicatorOfParameter = 133 ; + } +#Total column GRG tracer 2 +'tcgrg2' = { + table2Version = 210 ; + indicatorOfParameter = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'grg3' = { + table2Version = 210 ; + indicatorOfParameter = 135 ; + } +#Total column GRG tracer 3 +'tcgrg3' = { + table2Version = 210 ; + indicatorOfParameter = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'grg4' = { + table2Version = 210 ; + indicatorOfParameter = 137 ; + } +#Total column GRG tracer 4 +'tcgrg4' = { + table2Version = 210 ; + indicatorOfParameter = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'grg5' = { + table2Version = 210 ; + indicatorOfParameter = 139 ; + } +#Total column GRG tracer 5 +'tcgrg5' = { + table2Version = 210 ; + indicatorOfParameter = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'grg6' = { + table2Version = 210 ; + indicatorOfParameter = 141 ; + } +#Total column GRG tracer 6 +'tcgrg6' = { + table2Version = 210 ; + indicatorOfParameter = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'grg7' = { + table2Version = 210 ; + indicatorOfParameter = 143 ; + } +#Total column GRG tracer 7 +'tcgrg7' = { + table2Version = 210 ; + indicatorOfParameter = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'grg8' = { + table2Version = 210 ; + indicatorOfParameter = 145 ; + } +#Total column GRG tracer 8 +'tcgrg8' = { + table2Version = 210 ; + indicatorOfParameter = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'grg9' = { + table2Version = 210 ; + indicatorOfParameter = 147 ; + } +#Total column GRG tracer 9 +'tcgrg9' = { + table2Version = 210 ; + indicatorOfParameter = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'grg10' = { + table2Version = 210 ; + indicatorOfParameter = 149 ; + } +#Total column GRG tracer 10 +'tcgrg10' = { + table2Version = 210 ; + indicatorOfParameter = 150 ; + } +#Surface flux Nitrogen oxides +'sfnox' = { + table2Version = 210 ; + indicatorOfParameter = 151 ; + } +#Surface flux Nitrogen dioxide +'sfno2' = { + table2Version = 210 ; + indicatorOfParameter = 152 ; + } +#Surface flux Sulphur dioxide +'sfso2' = { + table2Version = 210 ; + indicatorOfParameter = 153 ; + } +#Surface flux Carbon monoxide +'sfco2' = { + table2Version = 210 ; + indicatorOfParameter = 154 ; + } +#Surface flux Formaldehyde +'sfhcho' = { + table2Version = 210 ; + indicatorOfParameter = 155 ; + } +#Surface flux GEMS Ozone +'sfgo3' = { + table2Version = 210 ; + indicatorOfParameter = 156 ; + } +#Surface flux reactive tracer 1 +'sfgr1' = { + table2Version = 210 ; + indicatorOfParameter = 157 ; + } +#Surface flux reactive tracer 2 +'sfgr2' = { + table2Version = 210 ; + indicatorOfParameter = 158 ; + } +#Surface flux reactive tracer 3 +'sfgr3' = { + table2Version = 210 ; + indicatorOfParameter = 159 ; + } +#Surface flux reactive tracer 4 +'sfgr4' = { + table2Version = 210 ; + indicatorOfParameter = 160 ; + } +#Surface flux reactive tracer 5 +'sfgr5' = { + table2Version = 210 ; + indicatorOfParameter = 161 ; + } +#Surface flux reactive tracer 6 +'sfgr6' = { + table2Version = 210 ; + indicatorOfParameter = 162 ; + } +#Surface flux reactive tracer 7 +'sfgr7' = { + table2Version = 210 ; + indicatorOfParameter = 163 ; + } +#Surface flux reactive tracer 8 +'sfgr8' = { + table2Version = 210 ; + indicatorOfParameter = 164 ; + } +#Surface flux reactive tracer 9 +'sfgr9' = { + table2Version = 210 ; + indicatorOfParameter = 165 ; + } +#Surface flux reactive tracer 10 +'sfgr10' = { + table2Version = 210 ; + indicatorOfParameter = 166 ; + } +#Radon +'ra' = { + table2Version = 210 ; + indicatorOfParameter = 181 ; + } +#Sulphur Hexafluoride +'sf6' = { + table2Version = 210 ; + indicatorOfParameter = 182 ; + } +#Total column Radon +'tcra' = { + table2Version = 210 ; + indicatorOfParameter = 183 ; + } +#Total column Sulphur Hexafluoride +'tcsf6' = { + table2Version = 210 ; + indicatorOfParameter = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'sf6apf' = { + table2Version = 210 ; + indicatorOfParameter = 185 ; + } +#GEMS Ozone +'go3' = { + table2Version = 210 ; + indicatorOfParameter = 203 ; + } +#GEMS Total column ozone +'gtco3' = { + table2Version = 210 ; + indicatorOfParameter = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'aod550' = { + table2Version = 210 ; + indicatorOfParameter = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'ssaod550' = { + table2Version = 210 ; + indicatorOfParameter = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'duaod550' = { + table2Version = 210 ; + indicatorOfParameter = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'omaod550' = { + table2Version = 210 ; + indicatorOfParameter = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'bcaod550' = { + table2Version = 210 ; + indicatorOfParameter = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'suaod550' = { + table2Version = 210 ; + indicatorOfParameter = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'aod469' = { + table2Version = 210 ; + indicatorOfParameter = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'aod670' = { + table2Version = 210 ; + indicatorOfParameter = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'aod865' = { + table2Version = 210 ; + indicatorOfParameter = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'aod1240' = { + table2Version = 210 ; + indicatorOfParameter = 216 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'aermr01diff' = { + table2Version = 211 ; + indicatorOfParameter = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'aermr02diff' = { + table2Version = 211 ; + indicatorOfParameter = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'aermr03diff' = { + table2Version = 211 ; + indicatorOfParameter = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'aermr04diff' = { + table2Version = 211 ; + indicatorOfParameter = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'aermr05diff' = { + table2Version = 211 ; + indicatorOfParameter = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'aermr06diff' = { + table2Version = 211 ; + indicatorOfParameter = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'aermr07diff' = { + table2Version = 211 ; + indicatorOfParameter = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'aermr08diff' = { + table2Version = 211 ; + indicatorOfParameter = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'aermr09diff' = { + table2Version = 211 ; + indicatorOfParameter = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'aermr10diff' = { + table2Version = 211 ; + indicatorOfParameter = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'aermr11diff' = { + table2Version = 211 ; + indicatorOfParameter = 11 ; + } +#Aerosol type 12 mixing ratio +'aermr12diff' = { + table2Version = 211 ; + indicatorOfParameter = 12 ; + } +#Aerosol type 1 source/gain accumulated +'aergn01diff' = { + table2Version = 211 ; + indicatorOfParameter = 16 ; + } +#Aerosol type 2 source/gain accumulated +'aergn02diff' = { + table2Version = 211 ; + indicatorOfParameter = 17 ; + } +#Aerosol type 3 source/gain accumulated +'aergn03diff' = { + table2Version = 211 ; + indicatorOfParameter = 18 ; + } +#Aerosol type 4 source/gain accumulated +'aergn04diff' = { + table2Version = 211 ; + indicatorOfParameter = 19 ; + } +#Aerosol type 5 source/gain accumulated +'aergn05diff' = { + table2Version = 211 ; + indicatorOfParameter = 20 ; + } +#Aerosol type 6 source/gain accumulated +'aergn06diff' = { + table2Version = 211 ; + indicatorOfParameter = 21 ; + } +#Aerosol type 7 source/gain accumulated +'aergn07diff' = { + table2Version = 211 ; + indicatorOfParameter = 22 ; + } +#Aerosol type 8 source/gain accumulated +'aergn08diff' = { + table2Version = 211 ; + indicatorOfParameter = 23 ; + } +#Aerosol type 9 source/gain accumulated +'aergn09diff' = { + table2Version = 211 ; + indicatorOfParameter = 24 ; + } +#Aerosol type 10 source/gain accumulated +'aergn10diff' = { + table2Version = 211 ; + indicatorOfParameter = 25 ; + } +#Aerosol type 11 source/gain accumulated +'aergn11diff' = { + table2Version = 211 ; + indicatorOfParameter = 26 ; + } +#Aerosol type 12 source/gain accumulated +'aergn12diff' = { + table2Version = 211 ; + indicatorOfParameter = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'aerls01diff' = { + table2Version = 211 ; + indicatorOfParameter = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'aerls02diff' = { + table2Version = 211 ; + indicatorOfParameter = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'aerls03diff' = { + table2Version = 211 ; + indicatorOfParameter = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'aerls04diff' = { + table2Version = 211 ; + indicatorOfParameter = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'aerls05diff' = { + table2Version = 211 ; + indicatorOfParameter = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'aerls06diff' = { + table2Version = 211 ; + indicatorOfParameter = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'aerls07diff' = { + table2Version = 211 ; + indicatorOfParameter = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'aerls08diff' = { + table2Version = 211 ; + indicatorOfParameter = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'aerls09diff' = { + table2Version = 211 ; + indicatorOfParameter = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'aerls10diff' = { + table2Version = 211 ; + indicatorOfParameter = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'aerls11diff' = { + table2Version = 211 ; + indicatorOfParameter = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'aerls12diff' = { + table2Version = 211 ; + indicatorOfParameter = 42 ; + } +#Aerosol precursor mixing ratio +'aerprdiff' = { + table2Version = 211 ; + indicatorOfParameter = 46 ; + } +#Aerosol small mode mixing ratio +'aersmdiff' = { + table2Version = 211 ; + indicatorOfParameter = 47 ; + } +#Aerosol large mode mixing ratio +'aerlgdiff' = { + table2Version = 211 ; + indicatorOfParameter = 48 ; + } +#Aerosol precursor optical depth +'aodprdiff' = { + table2Version = 211 ; + indicatorOfParameter = 49 ; + } +#Aerosol small mode optical depth +'aodsmdiff' = { + table2Version = 211 ; + indicatorOfParameter = 50 ; + } +#Aerosol large mode optical depth +'aodlgdiff' = { + table2Version = 211 ; + indicatorOfParameter = 51 ; + } +#Dust emission potential +'aerdepdiff' = { + table2Version = 211 ; + indicatorOfParameter = 52 ; + } +#Lifting threshold speed +'aerltsdiff' = { + table2Version = 211 ; + indicatorOfParameter = 53 ; + } +#Soil clay content +'aersccdiff' = { + table2Version = 211 ; + indicatorOfParameter = 54 ; + } +#Carbon Dioxide +'co2diff' = { + table2Version = 211 ; + indicatorOfParameter = 61 ; + } +#Methane +'ch4diff' = { + table2Version = 211 ; + indicatorOfParameter = 62 ; + } +#Nitrous oxide +'n2odiff' = { + table2Version = 211 ; + indicatorOfParameter = 63 ; + } +#Total column Carbon Dioxide +'tcco2diff' = { + table2Version = 211 ; + indicatorOfParameter = 64 ; + } +#Total column Methane +'tcch4diff' = { + table2Version = 211 ; + indicatorOfParameter = 65 ; + } +#Total column Nitrous oxide +'tcn2odiff' = { + table2Version = 211 ; + indicatorOfParameter = 66 ; + } +#Ocean flux of Carbon Dioxide +'co2ofdiff' = { + table2Version = 211 ; + indicatorOfParameter = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'co2nbfdiff' = { + table2Version = 211 ; + indicatorOfParameter = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'co2apfdiff' = { + table2Version = 211 ; + indicatorOfParameter = 69 ; + } +#Methane Surface Fluxes +'ch4fdiff' = { + table2Version = 211 ; + indicatorOfParameter = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'kch4diff' = { + table2Version = 211 ; + indicatorOfParameter = 71 ; + } +#Wildfire flux of Carbon Dioxide +'co2firediff' = { + table2Version = 211 ; + indicatorOfParameter = 80 ; + } +#Wildfire flux of Carbon Monoxide +'cofirediff' = { + table2Version = 211 ; + indicatorOfParameter = 81 ; + } +#Wildfire flux of Methane +'ch4firediff' = { + table2Version = 211 ; + indicatorOfParameter = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'nmhcfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 83 ; + } +#Wildfire flux of Hydrogen +'h2firediff' = { + table2Version = 211 ; + indicatorOfParameter = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'noxfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 85 ; + } +#Wildfire flux of Nitrous Oxide +'n2ofirediff' = { + table2Version = 211 ; + indicatorOfParameter = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'pm2p5firediff' = { + table2Version = 211 ; + indicatorOfParameter = 87 ; + } +#Wildfire flux of Total Particulate Matter +'tpmfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'tcfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 89 ; + } +#Wildfire flux of Organic Carbon +'ocfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 90 ; + } +#Wildfire flux of Black Carbon +'bcfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 91 ; + } +#Wildfire overall flux of burnt Carbon +'cfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 92 ; + } +#Wildfire fraction of C4 plants +'c4ffirediff' = { + table2Version = 211 ; + indicatorOfParameter = 93 ; + } +#Wildfire vegetation map index +'vegfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 94 ; + } +#Wildfire Combustion Completeness +'ccfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'flfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 96 ; + } +#Wildfire fraction of area observed +'offirediff' = { + table2Version = 211 ; + indicatorOfParameter = 97 ; + } +#Wildfire observed area +'oafirediff' = { + table2Version = 211 ; + indicatorOfParameter = 98 ; + } +#Wildfire radiative power +'frpfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 99 ; + } +#Wildfire combustion rate +'crfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 100 ; + } +#Nitrogen dioxide +'no2diff' = { + table2Version = 211 ; + indicatorOfParameter = 121 ; + } +#Sulphur dioxide +'so2diff' = { + table2Version = 211 ; + indicatorOfParameter = 122 ; + } +#Carbon monoxide +'codiff' = { + table2Version = 211 ; + indicatorOfParameter = 123 ; + } +#Formaldehyde +'hchodiff' = { + table2Version = 211 ; + indicatorOfParameter = 124 ; + } +#Total column Nitrogen dioxide +'tcno2diff' = { + table2Version = 211 ; + indicatorOfParameter = 125 ; + } +#Total column Sulphur dioxide +'tcso2diff' = { + table2Version = 211 ; + indicatorOfParameter = 126 ; + } +#Total column Carbon monoxide +'tccodiff' = { + table2Version = 211 ; + indicatorOfParameter = 127 ; + } +#Total column Formaldehyde +'tchchodiff' = { + table2Version = 211 ; + indicatorOfParameter = 128 ; + } +#Nitrogen Oxides +'noxdiff' = { + table2Version = 211 ; + indicatorOfParameter = 129 ; + } +#Total Column Nitrogen Oxides +'tcnoxdiff' = { + table2Version = 211 ; + indicatorOfParameter = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'grg1diff' = { + table2Version = 211 ; + indicatorOfParameter = 131 ; + } +#Total column GRG tracer 1 +'tcgrg1diff' = { + table2Version = 211 ; + indicatorOfParameter = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'grg2diff' = { + table2Version = 211 ; + indicatorOfParameter = 133 ; + } +#Total column GRG tracer 2 +'tcgrg2diff' = { + table2Version = 211 ; + indicatorOfParameter = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'grg3diff' = { + table2Version = 211 ; + indicatorOfParameter = 135 ; + } +#Total column GRG tracer 3 +'tcgrg3diff' = { + table2Version = 211 ; + indicatorOfParameter = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'grg4diff' = { + table2Version = 211 ; + indicatorOfParameter = 137 ; + } +#Total column GRG tracer 4 +'tcgrg4diff' = { + table2Version = 211 ; + indicatorOfParameter = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'grg5diff' = { + table2Version = 211 ; + indicatorOfParameter = 139 ; + } +#Total column GRG tracer 5 +'tcgrg5diff' = { + table2Version = 211 ; + indicatorOfParameter = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'grg6diff' = { + table2Version = 211 ; + indicatorOfParameter = 141 ; + } +#Total column GRG tracer 6 +'tcgrg6diff' = { + table2Version = 211 ; + indicatorOfParameter = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'grg7diff' = { + table2Version = 211 ; + indicatorOfParameter = 143 ; + } +#Total column GRG tracer 7 +'tcgrg7diff' = { + table2Version = 211 ; + indicatorOfParameter = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'grg8diff' = { + table2Version = 211 ; + indicatorOfParameter = 145 ; + } +#Total column GRG tracer 8 +'tcgrg8diff' = { + table2Version = 211 ; + indicatorOfParameter = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'grg9diff' = { + table2Version = 211 ; + indicatorOfParameter = 147 ; + } +#Total column GRG tracer 9 +'tcgrg9diff' = { + table2Version = 211 ; + indicatorOfParameter = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'grg10diff' = { + table2Version = 211 ; + indicatorOfParameter = 149 ; + } +#Total column GRG tracer 10 +'tcgrg10diff' = { + table2Version = 211 ; + indicatorOfParameter = 150 ; + } +#Surface flux Nitrogen oxides +'sfnoxdiff' = { + table2Version = 211 ; + indicatorOfParameter = 151 ; + } +#Surface flux Nitrogen dioxide +'sfno2diff' = { + table2Version = 211 ; + indicatorOfParameter = 152 ; + } +#Surface flux Sulphur dioxide +'sfso2diff' = { + table2Version = 211 ; + indicatorOfParameter = 153 ; + } +#Surface flux Carbon monoxide +'sfco2diff' = { + table2Version = 211 ; + indicatorOfParameter = 154 ; + } +#Surface flux Formaldehyde +'sfhchodiff' = { + table2Version = 211 ; + indicatorOfParameter = 155 ; + } +#Surface flux GEMS Ozone +'sfgo3diff' = { + table2Version = 211 ; + indicatorOfParameter = 156 ; + } +#Surface flux reactive tracer 1 +'sfgr1diff' = { + table2Version = 211 ; + indicatorOfParameter = 157 ; + } +#Surface flux reactive tracer 2 +'sfgr2diff' = { + table2Version = 211 ; + indicatorOfParameter = 158 ; + } +#Surface flux reactive tracer 3 +'sfgr3diff' = { + table2Version = 211 ; + indicatorOfParameter = 159 ; + } +#Surface flux reactive tracer 4 +'sfgr4diff' = { + table2Version = 211 ; + indicatorOfParameter = 160 ; + } +#Surface flux reactive tracer 5 +'sfgr5diff' = { + table2Version = 211 ; + indicatorOfParameter = 161 ; + } +#Surface flux reactive tracer 6 +'sfgr6diff' = { + table2Version = 211 ; + indicatorOfParameter = 162 ; + } +#Surface flux reactive tracer 7 +'sfgr7diff' = { + table2Version = 211 ; + indicatorOfParameter = 163 ; + } +#Surface flux reactive tracer 8 +'sfgr8diff' = { + table2Version = 211 ; + indicatorOfParameter = 164 ; + } +#Surface flux reactive tracer 9 +'sfgr9diff' = { + table2Version = 211 ; + indicatorOfParameter = 165 ; + } +#Surface flux reactive tracer 10 +'sfgr10diff' = { + table2Version = 211 ; + indicatorOfParameter = 166 ; + } +#Radon +'radiff' = { + table2Version = 211 ; + indicatorOfParameter = 181 ; + } +#Sulphur Hexafluoride +'sf6diff' = { + table2Version = 211 ; + indicatorOfParameter = 182 ; + } +#Total column Radon +'tcradiff' = { + table2Version = 211 ; + indicatorOfParameter = 183 ; + } +#Total column Sulphur Hexafluoride +'tcsf6diff' = { + table2Version = 211 ; + indicatorOfParameter = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'sf6apfdiff' = { + table2Version = 211 ; + indicatorOfParameter = 185 ; + } +#GEMS Ozone +'go3diff' = { + table2Version = 211 ; + indicatorOfParameter = 203 ; + } +#GEMS Total column ozone +'gtco3diff' = { + table2Version = 211 ; + indicatorOfParameter = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'aod550diff' = { + table2Version = 211 ; + indicatorOfParameter = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'ssaod550diff' = { + table2Version = 211 ; + indicatorOfParameter = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'duaod550diff' = { + table2Version = 211 ; + indicatorOfParameter = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'omaod550diff' = { + table2Version = 211 ; + indicatorOfParameter = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'bcaod550diff' = { + table2Version = 211 ; + indicatorOfParameter = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'suaod550diff' = { + table2Version = 211 ; + indicatorOfParameter = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'aod469diff' = { + table2Version = 211 ; + indicatorOfParameter = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'aod670diff' = { + table2Version = 211 ; + indicatorOfParameter = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'aod865diff' = { + table2Version = 211 ; + indicatorOfParameter = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'aod1240diff' = { + table2Version = 211 ; + indicatorOfParameter = 216 ; + } +#Total precipitation observation count +'tpoc' = { + table2Version = 220 ; + indicatorOfParameter = 228 ; + } +#Convective inhibition +'cin' = { + table2Version = 228 ; + indicatorOfParameter = 1 ; + } +#Orography +'orog' = { + table2Version = 228 ; + indicatorOfParameter = 2 ; + } +#Friction velocity +'zust' = { + table2Version = 228 ; + indicatorOfParameter = 3 ; + } +#Mean temperature at 2 metres +'mean2t' = { + table2Version = 228 ; + indicatorOfParameter = 4 ; + } +#Mean of 10 metre wind speed +'mean10ws' = { + table2Version = 228 ; + indicatorOfParameter = 5 ; + } +#Mean total cloud cover +'meantcc' = { + table2Version = 228 ; + indicatorOfParameter = 6 ; + } +#Lake depth +'dl' = { + table2Version = 228 ; + indicatorOfParameter = 7 ; + } +#Lake mix-layer temperature +'lmlt' = { + table2Version = 228 ; + indicatorOfParameter = 8 ; + } +#Lake mix-layer depth +'lmld' = { + table2Version = 228 ; + indicatorOfParameter = 9 ; + } +#Lake bottom temperature +'lblt' = { + table2Version = 228 ; + indicatorOfParameter = 10 ; + } +#Lake total layer temperature +'ltlt' = { + table2Version = 228 ; + indicatorOfParameter = 11 ; + } +#Lake shape factor +'lshf' = { + table2Version = 228 ; + indicatorOfParameter = 12 ; + } +#Lake ice temperature +'lict' = { + table2Version = 228 ; + indicatorOfParameter = 13 ; + } +#Lake ice depth +'licd' = { + table2Version = 228 ; + indicatorOfParameter = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'dndzn' = { + table2Version = 228 ; + indicatorOfParameter = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'dndza' = { + table2Version = 228 ; + indicatorOfParameter = 16 ; + } +#Duct base height +'dctb' = { + table2Version = 228 ; + indicatorOfParameter = 17 ; + } +#Trapping layer base height +'tplb' = { + table2Version = 228 ; + indicatorOfParameter = 18 ; + } +#Trapping layer top height +'tplt' = { + table2Version = 228 ; + indicatorOfParameter = 19 ; + } +#Soil Moisture +'sm' = { + table2Version = 228 ; + indicatorOfParameter = 39 ; + } +#Neutral wind at 10 m u-component +'u10n' = { + table2Version = 228 ; + indicatorOfParameter = 131 ; + } +#Neutral wind at 10 m v-component +'v10n' = { + table2Version = 228 ; + indicatorOfParameter = 132 ; + } +#Soil Temperature +'st' = { + table2Version = 228 ; + indicatorOfParameter = 139 ; + } +#Snow depth water equivalent +'sd' = { + table2Version = 228 ; + indicatorOfParameter = 141 ; + } +#Snow Fall water equivalent +'sf' = { + table2Version = 228 ; + indicatorOfParameter = 144 ; + } +#Total Cloud Cover +'tcc' = { + table2Version = 228 ; + indicatorOfParameter = 164 ; + } +#Field capacity +'cap' = { + table2Version = 228 ; + indicatorOfParameter = 170 ; + } +#Wilting point +'wilt' = { + table2Version = 228 ; + indicatorOfParameter = 171 ; + } +#Total Precipitation +'tp' = { + table2Version = 228 ; + indicatorOfParameter = 228 ; + } +#Snow evaporation (variable resolution) +'esvar' = { + table2Version = 230 ; + indicatorOfParameter = 44 ; + } +#Snowmelt (variable resolution) +'smltvar' = { + table2Version = 230 ; + indicatorOfParameter = 45 ; + } +#Solar duration (variable resolution) +'sdurvar' = { + table2Version = 230 ; + indicatorOfParameter = 46 ; + } +#Downward UV radiation at the surface (variable resolution) +'uvbvar' = { + table2Version = 230 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface (variable resolution) +'parvar' = { + table2Version = 230 ; + indicatorOfParameter = 58 ; + } +#Stratiform precipitation (Large-scale precipitation) (variable resolution) +'lspvar' = { + table2Version = 230 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation (variable resolution) +'cpvar' = { + table2Version = 230 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) (variable resolution) +'sfvar' = { + table2Version = 230 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation (variable resolution) +'bldvar' = { + table2Version = 230 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux (variable resolution) +'sshfvar' = { + table2Version = 230 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux (variable resolution) +'slhfvar' = { + table2Version = 230 ; + indicatorOfParameter = 147 ; + } +#Surface solar radiation downwards (variable resolution) +'ssrdvar' = { + table2Version = 230 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards (variable resolution) +'strdvar' = { + table2Version = 230 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation (variable resolution) +'ssrvar' = { + table2Version = 230 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation (variable resolution) +'strvar' = { + table2Version = 230 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation (variable resolution) +'tsrvar' = { + table2Version = 230 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation (variable resolution) +'ttrvar' = { + table2Version = 230 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress (variable resolution) +'ewssvar' = { + table2Version = 230 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress (variable resolution) +'nsssvar' = { + table2Version = 230 ; + indicatorOfParameter = 181 ; + } +#Evaporation (variable resolution) +'evar' = { + table2Version = 230 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration (variable resolution) +'sundvar' = { + table2Version = 230 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress (variable resolution) +'lgwsvar' = { + table2Version = 230 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress (variable resolution) +'mgwsvar' = { + table2Version = 230 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation (variable resolution) +'gwdvar' = { + table2Version = 230 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content (variable resolution) +'srcvar' = { + table2Version = 230 ; + indicatorOfParameter = 198 ; + } +#Runoff (variable resolution) +'rovar' = { + table2Version = 230 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky (variable resolution) +'tsrcvar' = { + table2Version = 230 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky (variable resolution) +'ttrcvar' = { + table2Version = 230 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky (variable resolution) +'ssrcvar' = { + table2Version = 230 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky (variable resolution) +'strcvar' = { + table2Version = 230 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation (variable resolution) +'tisrvar' = { + table2Version = 230 ; + indicatorOfParameter = 212 ; + } +#Surface temperature significance +'sts' = { + table2Version = 234 ; + indicatorOfParameter = 139 ; + } +#Mean sea level pressure significance +'msls' = { + table2Version = 234 ; + indicatorOfParameter = 151 ; + } +#2 metre temperature significance +'2ts' = { + table2Version = 234 ; + indicatorOfParameter = 167 ; + } +#Total precipitation significance +'tps' = { + table2Version = 234 ; + indicatorOfParameter = 228 ; + } +#U-component stokes drift +'ust' = { + table2Version = 140 ; + indicatorOfParameter = 215 ; + } +#V-component stokes drift +'vst' = { + table2Version = 140 ; + indicatorOfParameter = 216 ; + } +#Wildfire radiative power maximum +'maxfrpfire' = { + table2Version = 210 ; + indicatorOfParameter = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'so2fire' = { + table2Version = 210 ; + indicatorOfParameter = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'ch3ohfire' = { + table2Version = 210 ; + indicatorOfParameter = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'c2h5ohfire' = { + table2Version = 210 ; + indicatorOfParameter = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'c3h8fire' = { + table2Version = 210 ; + indicatorOfParameter = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'c2h4fire' = { + table2Version = 210 ; + indicatorOfParameter = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'c3h6fire' = { + table2Version = 210 ; + indicatorOfParameter = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'c5h8fire' = { + table2Version = 210 ; + indicatorOfParameter = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'terpenesfire' = { + table2Version = 210 ; + indicatorOfParameter = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'toluenefire' = { + table2Version = 210 ; + indicatorOfParameter = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'hialkenesfire' = { + table2Version = 210 ; + indicatorOfParameter = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'hialkanesfire' = { + table2Version = 210 ; + indicatorOfParameter = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'ch2ofire' = { + table2Version = 210 ; + indicatorOfParameter = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'c2h4ofire' = { + table2Version = 210 ; + indicatorOfParameter = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'c3h6ofire' = { + table2Version = 210 ; + indicatorOfParameter = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'nh3fire' = { + table2Version = 210 ; + indicatorOfParameter = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'c2h6sfire' = { + table2Version = 210 ; + indicatorOfParameter = 117 ; + } +#Wildfire radiative power maximum +'maxfrpfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'so2firediff' = { + table2Version = 211 ; + indicatorOfParameter = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'ch3ohfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'c2h5ohfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'c3h8firediff' = { + table2Version = 211 ; + indicatorOfParameter = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'c2h4firediff' = { + table2Version = 211 ; + indicatorOfParameter = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'c3h6firediff' = { + table2Version = 211 ; + indicatorOfParameter = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'c5h8firediff' = { + table2Version = 211 ; + indicatorOfParameter = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'terpenesfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'toluenefirediff' = { + table2Version = 211 ; + indicatorOfParameter = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'hialkenesfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'hialkanesfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'ch2ofirediff' = { + table2Version = 211 ; + indicatorOfParameter = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'c2h4ofirediff' = { + table2Version = 211 ; + indicatorOfParameter = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'c3h6ofirediff' = { + table2Version = 211 ; + indicatorOfParameter = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'nh3firediff' = { + table2Version = 211 ; + indicatorOfParameter = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'c2h6sfirediff' = { + table2Version = 211 ; + indicatorOfParameter = 117 ; + } +#V-tendency from non-orographic wave drag +'vtnowd' = { + table2Version = 228 ; + indicatorOfParameter = 134 ; + } +#U-tendency from non-orographic wave drag +'utnowd' = { + table2Version = 228 ; + indicatorOfParameter = 136 ; + } +#100 metre U wind component +'100u' = { + table2Version = 228 ; + indicatorOfParameter = 246 ; + } +#100 metre V wind component +'100v' = { + table2Version = 228 ; + indicatorOfParameter = 247 ; + } +#ASCAT first soil moisture CDF matching parameter +'ascat_sm_cdfa' = { + table2Version = 228 ; + indicatorOfParameter = 253 ; + } +#ASCAT second soil moisture CDF matching parameter +'ascat_sm_cdfb' = { + table2Version = 228 ; + indicatorOfParameter = 254 ; +} diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def new file mode 100644 index 000000000..fc2b7df56 --- /dev/null +++ b/definitions/grib1/localConcepts/ecmf/units.def @@ -0,0 +1,15316 @@ +# Automatically generated by create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total precipitation of at least 1 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 60 ; + } +#Total precipitation of at least 5 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 61 ; + } +#Total precipitation of at least 10 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 62 ; + } +#Total precipitation of at least 20 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 63 ; + } +#Total precipitation of at least 40 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 82 ; + } +#Total precipitation of at least 60 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 83 ; + } +#Total precipitation of at least 80 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 84 ; + } +#Total precipitation of at least 100 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 85 ; + } +#Total precipitation of at least 150 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 86 ; + } +#Total precipitation of at least 200 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 87 ; + } +#Total precipitation of at least 300 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 88 ; + } +#Stream function +'m**2 s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 1 ; + } +#Velocity potential +'m**2 s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 2 ; + } +#Potential temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 5 ; + } +#Soil sand fraction +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 6 ; + } +#Soil clay fraction +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 7 ; + } +#Surface runoff +'m' = { + table2Version = 128 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff +'m' = { + table2Version = 128 ; + indicatorOfParameter = 9 ; + } +#Wind speed +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 10 ; + } +#U component of divergent wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 14 ; + } +#UV visible albedo for direct radiation +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 15 ; + } +#UV visible albedo for diffuse radiation +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 16 ; + } +#Near IR albedo for direct radiation +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 17 ; + } +#Near IR albedo for diffuse radiation +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 18 ; + } +#Clear sky surface UV +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 19 ; + } +#Clear sky surface photosynthetically active radiation +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 20 ; + } +#Unbalanced component of temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'~' = { + table2Version = 128 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence +'s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 128 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 128 ; + indicatorOfParameter = 25 ; + } +#Lake cover +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation +'~' = { + table2Version = 128 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation +'~' = { + table2Version = 128 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 31 ; + } +#Snow albedo +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 32 ; + } +#Snow density +'kg m**-3' = { + table2Version = 128 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 34 ; + } +#Ice temperature layer 1 +'K' = { + table2Version = 128 ; + indicatorOfParameter = 35 ; + } +#Ice temperature layer 2 +'K' = { + table2Version = 128 ; + indicatorOfParameter = 36 ; + } +#Ice temperature layer 3 +'K' = { + table2Version = 128 ; + indicatorOfParameter = 37 ; + } +#Ice temperature layer 4 +'K' = { + table2Version = 128 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 +'m**3 m**-3' = { + table2Version = 128 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'m**3 m**-3' = { + table2Version = 128 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'m**3 m**-3' = { + table2Version = 128 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'m**3 m**-3' = { + table2Version = 128 ; + indicatorOfParameter = 42 ; + } +#Soil type +'~' = { + table2Version = 128 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 44 ; + } +#Snowmelt +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 45 ; + } +#Solar duration +'s' = { + table2Version = 128 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation +'W m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress +'N m**-2 s' = { + table2Version = 128 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction +'s' = { + table2Version = 128 ; + indicatorOfParameter = 50 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'K' = { + table2Version = 128 ; + indicatorOfParameter = 51 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'K' = { + table2Version = 128 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential +'m**2 s**-2' = { + table2Version = 128 ; + indicatorOfParameter = 53 ; + } +#Pressure +'Pa' = { + table2Version = 128 ; + indicatorOfParameter = 54 ; + } +#Mean temperature at 2 metres in the last 24 hours +'K' = { + table2Version = 128 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours +'K' = { + table2Version = 128 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy +'J kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity +'K m**2 kg**-1 s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 60 ; + } +#Observation count +'~' = { + table2Version = 128 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'s' = { + table2Version = 128 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'s' = { + table2Version = 128 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'K' = { + table2Version = 128 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'m**2 m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'m**2 m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'s m**-1' = { + table2Version = 128 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'s m**-1' = { + table2Version = 128 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 71 ; + } +#Instantaneous surface solar radiation downwards +'W m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 72 ; + } +#Instantaneous surface thermal radiation downwards +'W m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 73 ; + } +#Standard deviation of filtered subgrid orography +'m' = { + table2Version = 128 ; + indicatorOfParameter = 74 ; + } +#Specific rain water content +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 75 ; + } +#Specific snow water content +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 76 ; + } +#Eta-coordinate vertical velocity +'s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 77 ; + } +#Total column liquid water +'kg m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'kg m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'~' = { + table2Version = 128 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'K' = { + table2Version = 128 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'K' = { + table2Version = 128 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 123 ; + } +#Surface emissivity +'dimensionless' = { + table2Version = 128 ; + indicatorOfParameter = 124 ; + } +#Vertically integrated total energy +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'Various' = { + table2Version = 128 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide +'~' = { + table2Version = 128 ; + indicatorOfParameter = 127 ; + } +#Atmospheric tide +'~' = { + table2Version = 160 ; + indicatorOfParameter = 127 ; + } +#Budget values +'~' = { + table2Version = 128 ; + indicatorOfParameter = 128 ; + } +#Budget values +'~' = { + table2Version = 160 ; + indicatorOfParameter = 128 ; + } +#Geopotential +'m**2 s**-2' = { + table2Version = 128 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'m**2 s**-2' = { + table2Version = 160 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'m**2 s**-2' = { + table2Version = 170 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'m**2 s**-2' = { + table2Version = 180 ; + indicatorOfParameter = 129 ; + } +#Geopotential +'m**2 s**-2' = { + table2Version = 190 ; + indicatorOfParameter = 129 ; + } +#Temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 130 ; + } +#Temperature +'K' = { + table2Version = 160 ; + indicatorOfParameter = 130 ; + } +#Temperature +'K' = { + table2Version = 170 ; + indicatorOfParameter = 130 ; + } +#Temperature +'K' = { + table2Version = 180 ; + indicatorOfParameter = 130 ; + } +#Temperature +'K' = { + table2Version = 190 ; + indicatorOfParameter = 130 ; + } +#U component of wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'m s**-1' = { + table2Version = 170 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'m s**-1' = { + table2Version = 180 ; + indicatorOfParameter = 131 ; + } +#U component of wind +'m s**-1' = { + table2Version = 190 ; + indicatorOfParameter = 131 ; + } +#V component of wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'m s**-1' = { + table2Version = 170 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'m s**-1' = { + table2Version = 180 ; + indicatorOfParameter = 132 ; + } +#V component of wind +'m s**-1' = { + table2Version = 190 ; + indicatorOfParameter = 132 ; + } +#Specific humidity +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'kg kg**-1' = { + table2Version = 160 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'kg kg**-1' = { + table2Version = 170 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'kg kg**-1' = { + table2Version = 180 ; + indicatorOfParameter = 133 ; + } +#Specific humidity +'kg kg**-1' = { + table2Version = 190 ; + indicatorOfParameter = 133 ; + } +#Surface pressure +'Pa' = { + table2Version = 128 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'Pa' = { + table2Version = 160 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'Pa' = { + table2Version = 162 ; + indicatorOfParameter = 52 ; + } +#Surface pressure +'Pa' = { + table2Version = 180 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'Pa' = { + table2Version = 190 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity +'Pa s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 135 ; + } +#Vertical velocity +'Pa s**-1' = { + table2Version = 170 ; + indicatorOfParameter = 135 ; + } +#Total column water +'kg m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 136 ; + } +#Total column water +'kg m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour +'kg m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 137 ; + } +#Total column water vapour +'kg m**-2' = { + table2Version = 180 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) +'s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'s**-1' = { + table2Version = 170 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'s**-1' = { + table2Version = 180 ; + indicatorOfParameter = 138 ; + } +#Vorticity (relative) +'s**-1' = { + table2Version = 190 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 +'K' = { + table2Version = 128 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'K' = { + table2Version = 160 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'K' = { + table2Version = 170 ; + indicatorOfParameter = 139 ; + } +#Soil temperature level 1 +'K' = { + table2Version = 190 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 140 ; + } +#Soil wetness level 1 +'m of water equivalent' = { + table2Version = 170 ; + indicatorOfParameter = 140 ; + } +#Snow depth +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 141 ; + } +#Snow depth +'m of water equivalent' = { + table2Version = 170 ; + indicatorOfParameter = 141 ; + } +#Snow depth +'m of water equivalent' = { + table2Version = 180 ; + indicatorOfParameter = 141 ; + } +#Large-scale precipitation +'m' = { + table2Version = 128 ; + indicatorOfParameter = 142 ; + } +#Large-scale precipitation +'m' = { + table2Version = 170 ; + indicatorOfParameter = 142 ; + } +#Large-scale precipitation +'m' = { + table2Version = 180 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'m' = { + table2Version = 128 ; + indicatorOfParameter = 143 ; + } +#Convective precipitation +'m' = { + table2Version = 170 ; + indicatorOfParameter = 143 ; + } +#Convective precipitation +'m' = { + table2Version = 180 ; + indicatorOfParameter = 143 ; + } +#Snowfall +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 144 ; + } +#Snowfall +'m of water equivalent' = { + table2Version = 180 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 145 ; + } +#Boundary layer dissipation +'J m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'J m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'J m**-2' = { + table2Version = 170 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'J m**-2' = { + table2Version = 180 ; + indicatorOfParameter = 146 ; + } +#Surface sensible heat flux +'J m**-2' = { + table2Version = 190 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'J m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'J m**-2' = { + table2Version = 170 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'J m**-2' = { + table2Version = 180 ; + indicatorOfParameter = 147 ; + } +#Surface latent heat flux +'J m**-2' = { + table2Version = 190 ; + indicatorOfParameter = 147 ; + } +#Charnock +'~' = { + table2Version = 128 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 149 ; + } +#Top net radiation +'W m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure +'Pa' = { + table2Version = 128 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'Pa' = { + table2Version = 160 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'Pa' = { + table2Version = 170 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'Pa' = { + table2Version = 180 ; + indicatorOfParameter = 151 ; + } +#Mean sea level pressure +'Pa' = { + table2Version = 190 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure +'~' = { + table2Version = 128 ; + indicatorOfParameter = 152 ; + } +#Logarithm of surface pressure +'~' = { + table2Version = 160 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate +'K' = { + table2Version = 128 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate +'K' = { + table2Version = 128 ; + indicatorOfParameter = 154 ; + } +#Divergence +'s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 155 ; + } +#Divergence +'s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 155 ; + } +#Divergence +'s**-1' = { + table2Version = 170 ; + indicatorOfParameter = 155 ; + } +#Divergence +'s**-1' = { + table2Version = 180 ; + indicatorOfParameter = 155 ; + } +#Divergence +'s**-1' = { + table2Version = 190 ; + indicatorOfParameter = 155 ; + } +#Geopotential Height +'gpm' = { + table2Version = 128 ; + indicatorOfParameter = 156 ; + } +#Relative humidity +'%' = { + table2Version = 128 ; + indicatorOfParameter = 157 ; + } +#Relative humidity +'%' = { + table2Version = 170 ; + indicatorOfParameter = 157 ; + } +#Relative humidity +'%' = { + table2Version = 190 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure +'Pa s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 158 ; + } +#Tendency of surface pressure +'Pa s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height +'m' = { + table2Version = 128 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography +'~' = { + table2Version = 128 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography +'~' = { + table2Version = 128 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography +'radians' = { + table2Version = 128 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography +'~' = { + table2Version = 128 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'(0 - 1)' = { + table2Version = 170 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'(0 - 1)' = { + table2Version = 180 ; + indicatorOfParameter = 164 ; + } +#Total cloud cover +'(0 - 1)' = { + table2Version = 190 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'m s**-1' = { + table2Version = 180 ; + indicatorOfParameter = 165 ; + } +#10 metre U wind component +'m s**-1' = { + table2Version = 190 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'m s**-1' = { + table2Version = 180 ; + indicatorOfParameter = 166 ; + } +#10 metre V wind component +'m s**-1' = { + table2Version = 190 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'K' = { + table2Version = 160 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'K' = { + table2Version = 180 ; + indicatorOfParameter = 167 ; + } +#2 metre temperature +'K' = { + table2Version = 190 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'K' = { + table2Version = 160 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'K' = { + table2Version = 180 ; + indicatorOfParameter = 168 ; + } +#2 metre dewpoint temperature +'K' = { + table2Version = 190 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 169 ; + } +#Surface solar radiation downwards +'J m**-2' = { + table2Version = 190 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 +'K' = { + table2Version = 128 ; + indicatorOfParameter = 170 ; + } +#Soil temperature level 2 +'K' = { + table2Version = 160 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'(0 - 1)' = { + table2Version = 174 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'(0 - 1)' = { + table2Version = 175 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'(0 - 1)' = { + table2Version = 180 ; + indicatorOfParameter = 172 ; + } +#Land-sea mask +'(0 - 1)' = { + table2Version = 190 ; + indicatorOfParameter = 172 ; + } +#Surface roughness +'m' = { + table2Version = 128 ; + indicatorOfParameter = 173 ; + } +#Surface roughness +'m' = { + table2Version = 160 ; + indicatorOfParameter = 173 ; + } +#Albedo +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 174 ; + } +#Albedo +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 174 ; + } +#Albedo +'(0 - 1)' = { + table2Version = 190 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 175 ; + } +#Surface thermal radiation downwards +'J m**-2' = { + table2Version = 190 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'J m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'J m**-2' = { + table2Version = 170 ; + indicatorOfParameter = 176 ; + } +#Surface net solar radiation +'J m**-2' = { + table2Version = 190 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'J m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'J m**-2' = { + table2Version = 170 ; + indicatorOfParameter = 177 ; + } +#Surface net thermal radiation +'J m**-2' = { + table2Version = 190 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 178 ; + } +#Top net solar radiation +'J m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 178 ; + } +#Top net solar radiation +'J m**-2' = { + table2Version = 190 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 179 ; + } +#Top net thermal radiation +'J m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 179 ; + } +#Top net thermal radiation +'J m**-2' = { + table2Version = 190 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress +'N m**-2 s' = { + table2Version = 128 ; + indicatorOfParameter = 180 ; + } +#East-West surface stress +'N m**-2 s' = { + table2Version = 170 ; + indicatorOfParameter = 180 ; + } +#East-West surface stress +'N m**-2 s' = { + table2Version = 180 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'N m**-2 s' = { + table2Version = 128 ; + indicatorOfParameter = 181 ; + } +#North-South surface stress +'N m**-2 s' = { + table2Version = 170 ; + indicatorOfParameter = 181 ; + } +#North-South surface stress +'N m**-2 s' = { + table2Version = 180 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'m of water equivalent' = { + table2Version = 170 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'m of water equivalent' = { + table2Version = 180 ; + indicatorOfParameter = 182 ; + } +#Evaporation +'m of water equivalent' = { + table2Version = 190 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 +'K' = { + table2Version = 128 ; + indicatorOfParameter = 183 ; + } +#Soil temperature level 3 +'K' = { + table2Version = 160 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 184 ; + } +#Soil wetness level 3 +'m of water equivalent' = { + table2Version = 170 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 185 ; + } +#Convective cloud cover +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 185 ; + } +#Convective cloud cover +'(0 - 1)' = { + table2Version = 170 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 186 ; + } +#Low cloud cover +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 187 ; + } +#Medium cloud cover +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 187 ; + } +#High cloud cover +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 188 ; + } +#High cloud cover +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration +'s' = { + table2Version = 128 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance +'m**2' = { + table2Version = 128 ; + indicatorOfParameter = 190 ; + } +#East-West component of sub-gridscale orographic variance +'m**2' = { + table2Version = 160 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance +'m**2' = { + table2Version = 128 ; + indicatorOfParameter = 191 ; + } +#North-South component of sub-gridscale orographic variance +'m**2' = { + table2Version = 160 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'m**2' = { + table2Version = 128 ; + indicatorOfParameter = 192 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'m**2' = { + table2Version = 160 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'m**2' = { + table2Version = 128 ; + indicatorOfParameter = 193 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'m**2' = { + table2Version = 160 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress +'N m**-2 s' = { + table2Version = 128 ; + indicatorOfParameter = 195 ; + } +#Longitudinal component of gravity wave stress +'N m**-2 s' = { + table2Version = 160 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress +'N m**-2 s' = { + table2Version = 128 ; + indicatorOfParameter = 196 ; + } +#Meridional component of gravity wave stress +'N m**-2 s' = { + table2Version = 160 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 197 ; + } +#Gravity wave dissipation +'J m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography +'m**2' = { + table2Version = 128 ; + indicatorOfParameter = 200 ; + } +#Variance of sub-gridscale orography +'m**2' = { + table2Version = 160 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing +'K' = { + table2Version = 128 ; + indicatorOfParameter = 201 ; + } +#Maximum temperature at 2 metres since previous post-processing +'K' = { + table2Version = 170 ; + indicatorOfParameter = 201 ; + } +#Maximum temperature at 2 metres since previous post-processing +'K' = { + table2Version = 190 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing +'K' = { + table2Version = 128 ; + indicatorOfParameter = 202 ; + } +#Minimum temperature at 2 metres since previous post-processing +'K' = { + table2Version = 170 ; + indicatorOfParameter = 202 ; + } +#Minimum temperature at 2 metres since previous post-processing +'K' = { + table2Version = 190 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights +'~' = { + table2Version = 128 ; + indicatorOfParameter = 204 ; + } +#Precipitation analysis weights +'~' = { + table2Version = 160 ; + indicatorOfParameter = 204 ; + } +#Runoff +'m' = { + table2Version = 128 ; + indicatorOfParameter = 205 ; + } +#Runoff +'m' = { + table2Version = 180 ; + indicatorOfParameter = 205 ; + } +#Total column ozone +'kg m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation +'J m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 212 ; + } +#Vertically integrated moisture divergence +'kg m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 213 ; + } +#Diabatic heating by radiation +'K' = { + table2Version = 128 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion +'K' = { + table2Version = 128 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection +'K' = { + table2Version = 128 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation +'K' = { + table2Version = 128 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of zonal wind +'m s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 223 ; + } +#Convective tendency of meridional wind +'m s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 226 ; + } +#Tendency due to removal of negative humidity +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 227 ; + } +#Tendency due to removal of negative humidity +'kg kg**-1' = { + table2Version = 130 ; + indicatorOfParameter = 227 ; + } +#Total precipitation +'m' = { + table2Version = 128 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'m' = { + table2Version = 160 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'m' = { + table2Version = 170 ; + indicatorOfParameter = 228 ; + } +#Total precipitation +'m' = { + table2Version = 190 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress +'N m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 229 ; + } +#Instantaneous X surface stress +'N m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress +'N m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 230 ; + } +#Instantaneous Y surface stress +'N m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface sensible heat flux +'W m**-2' = { + table2Version = 128 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux +'kg m**-2 s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 232 ; + } +#Instantaneous moisture flux +'kg m**-2 s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 233 ; + } +#Apparent surface humidity +'kg kg**-1' = { + table2Version = 160 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat +'~' = { + table2Version = 128 ; + indicatorOfParameter = 234 ; + } +#Logarithm of surface roughness length for heat +'~' = { + table2Version = 160 ; + indicatorOfParameter = 234 ; + } +#Skin temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 235 ; + } +#Skin temperature +'K' = { + table2Version = 160 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 +'K' = { + table2Version = 128 ; + indicatorOfParameter = 236 ; + } +#Soil temperature level 4 +'K' = { + table2Version = 160 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 +'m' = { + table2Version = 128 ; + indicatorOfParameter = 237 ; + } +#Soil wetness level 4 +'m' = { + table2Version = 160 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer +'K' = { + table2Version = 128 ; + indicatorOfParameter = 238 ; + } +#Temperature of snow layer +'K' = { + table2Version = 160 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 239 ; + } +#Large-scale snowfall +'m of water equivalent' = { + table2Version = 128 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency +'(-1 to 1)' = { + table2Version = 128 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency +'(-1 to 1)' = { + table2Version = 128 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness +'m' = { + table2Version = 128 ; + indicatorOfParameter = 244 ; + } +#Forecast surface roughness +'m' = { + table2Version = 160 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat +'~' = { + table2Version = 128 ; + indicatorOfParameter = 245 ; + } +#Forecast logarithm of surface roughness for heat +'~' = { + table2Version = 160 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 247 ; + } +#Cloud cover +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency +'(-1 to 1)' = { + table2Version = 128 ; + indicatorOfParameter = 249 ; + } +#Ice age +'(0 - 1)' = { + table2Version = 128 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature +'K' = { + table2Version = 128 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity +'kg kg**-1' = { + table2Version = 128 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind +'m s**-1' = { + table2Version = 128 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'~' = { + table2Version = 128 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 130 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 132 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 160 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 170 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 180 ; + indicatorOfParameter = 255 ; + } +#Indicates a missing value +'~' = { + table2Version = 190 ; + indicatorOfParameter = 255 ; + } +#Stream function difference +'m**2 s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 1 ; + } +#Velocity potential difference +'m**2 s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 2 ; + } +#Potential temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence difference +'s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 200 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 200 ; + indicatorOfParameter = 25 ; + } +#Lake cover difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 31 ; + } +#Snow albedo difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 32 ; + } +#Snow density difference +'kg m**-3' = { + table2Version = 200 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature layer 1 difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature layer 2 difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature layer 3 difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature layer 4 difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 difference +'m**3 m**-3' = { + table2Version = 200 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 difference +'m**3 m**-3' = { + table2Version = 200 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 difference +'m**3 m**-3' = { + table2Version = 200 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 difference +'m**3 m**-3' = { + table2Version = 200 ; + indicatorOfParameter = 42 ; + } +#Soil type difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 44 ; + } +#Snowmelt difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 45 ; + } +#Solar duration difference +'s' = { + table2Version = 200 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress difference +'N m**-2 s' = { + table2Version = 200 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction difference +'s' = { + table2Version = 200 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential difference +'m**2 s**-2' = { + table2Version = 200 ; + indicatorOfParameter = 53 ; + } +#Pressure difference +'Pa' = { + table2Version = 200 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy difference +'J kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity difference +'K m**2 kg**-1 s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations difference +'Millimetres*100 + number of stations' = { + table2Version = 200 ; + indicatorOfParameter = 61 ; + } +#Observation count difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'s' = { + table2Version = 200 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'s' = { + table2Version = 200 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'m**2 m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'m**2 m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'s m**-1' = { + table2Version = 200 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'s m**-1' = { + table2Version = 200 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 71 ; + } +#Total column liquid water +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'~' = { + table2Version = 200 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 123 ; + } +#Vertically integrated total energy +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'Various' = { + table2Version = 200 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 127 ; + } +#Budget values difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 128 ; + } +#Geopotential difference +'m**2 s**-2' = { + table2Version = 200 ; + indicatorOfParameter = 129 ; + } +#Temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 130 ; + } +#U component of wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 131 ; + } +#V component of wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 132 ; + } +#Specific humidity difference +'kg kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 133 ; + } +#Surface pressure difference +'Pa' = { + table2Version = 200 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity (pressure) difference +'Pa s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 135 ; + } +#Total column water difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) difference +'s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 140 ; + } +#Snow depth difference +'m of water equivalent' = { + table2Version = 200 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) difference +'m' = { + table2Version = 200 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation difference +'m' = { + table2Version = 200 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) difference +'m of water equivalent' = { + table2Version = 200 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 147 ; + } +#Charnock difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 149 ; + } +#Top net radiation difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure difference +'Pa' = { + table2Version = 200 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 154 ; + } +#Divergence difference +'s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 155 ; + } +#Height difference +'m' = { + table2Version = 200 ; + indicatorOfParameter = 156 ; + } +#Relative humidity difference +'%' = { + table2Version = 200 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure difference +'Pa s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height difference +'m' = { + table2Version = 200 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography difference +'radians' = { + table2Version = 200 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 167 ; + } +#Surface solar radiation downwards difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 172 ; + } +#Surface roughness difference +'m' = { + table2Version = 200 ; + indicatorOfParameter = 173 ; + } +#Albedo difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress difference +'N m**-2 s' = { + table2Version = 200 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress difference +'N m**-2 s' = { + table2Version = 200 ; + indicatorOfParameter = 181 ; + } +#Evaporation difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 187 ; + } +#High cloud cover difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration difference +'s' = { + table2Version = 200 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance difference +'m**2' = { + table2Version = 200 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance difference +'m**2' = { + table2Version = 200 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance difference +'m**2' = { + table2Version = 200 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance difference +'m**2' = { + table2Version = 200 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress difference +'N m**-2 s' = { + table2Version = 200 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress difference +'N m**-2 s' = { + table2Version = 200 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography difference +'m**2' = { + table2Version = 200 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio difference +'kg kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 204 ; + } +#Runoff difference +'m' = { + table2Version = 200 ; + indicatorOfParameter = 205 ; + } +#Total column ozone difference +'kg m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity difference +'kg kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection difference +'kg kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation difference +'kg kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity difference +'kg kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 227 ; + } +#Total precipitation difference +'m' = { + table2Version = 200 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress difference +'N m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress difference +'N m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux difference +'J m**-2' = { + table2Version = 200 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux difference +'kg m**-2 s' = { + table2Version = 200 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity difference +'kg kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 234 ; + } +#Skin temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 difference +'m' = { + table2Version = 200 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall difference +'m of water equivalent' = { + table2Version = 200 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall difference +'m of water equivalent' = { + table2Version = 200 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency difference +'(-1 to 1)' = { + table2Version = 200 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency difference +'(-1 to 1)' = { + table2Version = 200 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness difference +'m' = { + table2Version = 200 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat difference +'~' = { + table2Version = 200 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content difference +'kg kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content difference +'kg kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 247 ; + } +#Cloud cover difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency difference +'(-1 to 1)' = { + table2Version = 200 ; + indicatorOfParameter = 249 ; + } +#Ice age difference +'(0 - 1)' = { + table2Version = 200 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity difference +'kg kg**-1' = { + table2Version = 200 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind difference +'m s**-1' = { + table2Version = 200 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'~' = { + table2Version = 200 ; + indicatorOfParameter = 255 ; + } +#Maximum of significant wave height index +'(-1 to 1)' = { + table2Version = 132 ; + indicatorOfParameter = 216 ; + } +#Normalized energy flux into waves +'~' = { + table2Version = 140 ; + indicatorOfParameter = 211 ; + } +#Normalized energy flux into ocean +'~' = { + table2Version = 140 ; + indicatorOfParameter = 212 ; + } +#Turbulent Langmuir number +'~' = { + table2Version = 140 ; + indicatorOfParameter = 213 ; + } +#Normalized stress into ocean +'~' = { + table2Version = 140 ; + indicatorOfParameter = 214 ; + } +#Reserved +'~' = { + table2Version = 151 ; + indicatorOfParameter = 193 ; + } +#Vertical integral of divergence of cloud liquid water flux +'kg m**-2 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 79 ; + } +#Vertical integral of divergence of cloud frozen water flux +'kg m**-2 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 80 ; + } +#Vertical integral of eastward cloud liquid water flux +'kg m**-1 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 88 ; + } +#Vertical integral of northward cloud liquid water flux +'kg m**-1 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 89 ; + } +#Vertical integral of eastward cloud frozen water flux +'kg m**-1 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 90 ; + } +#Vertical integral of northward cloud frozen water flux +'kg m**-1 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 91 ; + } +#Vertical integral of mass tendency +'kg m**-2 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 92 ; + } +#U-tendency from dynamics +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 114 ; + } +#V-tendency from dynamics +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 115 ; + } +#T-tendency from dynamics +'K' = { + table2Version = 162 ; + indicatorOfParameter = 116 ; + } +#q-tendency from dynamics +'kg kg**-1' = { + table2Version = 162 ; + indicatorOfParameter = 117 ; + } +#T-tendency from radiation +'K' = { + table2Version = 162 ; + indicatorOfParameter = 118 ; + } +#U-tendency from turbulent diffusion + subgrid orography +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 119 ; + } +#V-tendency from turbulent diffusion + subgrid orography +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 120 ; + } +#T-tendency from turbulent diffusion + subgrid orography +'K' = { + table2Version = 162 ; + indicatorOfParameter = 121 ; + } +#q-tendency from turbulent diffusion +'kg kg**-1' = { + table2Version = 162 ; + indicatorOfParameter = 122 ; + } +#U-tendency from subgrid orography +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 123 ; + } +#V-tendency from subgrid orography +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 124 ; + } +#T-tendency from subgrid orography +'K' = { + table2Version = 162 ; + indicatorOfParameter = 125 ; + } +#U-tendency from convection (deep+shallow) +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 126 ; + } +#V-tendency from convection (deep+shallow) +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 127 ; + } +#T-tendency from convection (deep+shallow) +'K' = { + table2Version = 162 ; + indicatorOfParameter = 128 ; + } +#q-tendency from convection (deep+shallow) +'kg kg**-1' = { + table2Version = 162 ; + indicatorOfParameter = 129 ; + } +#Liquid Precipitation flux from convection +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 130 ; + } +#Ice Precipitation flux from convection +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 131 ; + } +#T-tendency from cloud scheme +'K' = { + table2Version = 162 ; + indicatorOfParameter = 132 ; + } +#q-tendency from cloud scheme +'kg kg**-1' = { + table2Version = 162 ; + indicatorOfParameter = 133 ; + } +#ql-tendency from cloud scheme +'kg kg**-1' = { + table2Version = 162 ; + indicatorOfParameter = 134 ; + } +#qi-tendency from cloud scheme +'kg kg**-1' = { + table2Version = 162 ; + indicatorOfParameter = 135 ; + } +#Liquid Precip flux from cloud scheme (stratiform) +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 136 ; + } +#Ice Precip flux from cloud scheme (stratiform) +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 137 ; + } +#U-tendency from shallow convection +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 138 ; + } +#V-tendency from shallow convection +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 139 ; + } +#T-tendency from shallow convection +'K' = { + table2Version = 162 ; + indicatorOfParameter = 140 ; + } +#q-tendency from shallow convection +'kg kg**-1' = { + table2Version = 162 ; + indicatorOfParameter = 141 ; + } +#100 metre U wind component anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 6 ; + } +#100 metre V wind component anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 7 ; + } +#Maximum temperature at 2 metres in the last 6 hours anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 122 ; + } +#Clear-sky (II) down surface sw flux +'W m**-2' = { + table2Version = 174 ; + indicatorOfParameter = 10 ; + } +#Clear-sky (II) up surface sw flux +'W m**-2' = { + table2Version = 174 ; + indicatorOfParameter = 13 ; + } +#Visibility at 1.5m +'m' = { + table2Version = 174 ; + indicatorOfParameter = 25 ; + } +#Minimum temperature at 1.5m since previous post-processing +'K' = { + table2Version = 174 ; + indicatorOfParameter = 50 ; + } +#Maximum temperature at 1.5m since previous post-processing +'K' = { + table2Version = 174 ; + indicatorOfParameter = 51 ; + } +#Relative humidity at 1.5m +'kg kg**-1' = { + table2Version = 174 ; + indicatorOfParameter = 52 ; + } +#Short wave radiation flux at surface +'J m**-2' = { + table2Version = 174 ; + indicatorOfParameter = 116 ; + } +#Short wave radiation flux at top of atmosphere +'J m**-2' = { + table2Version = 174 ; + indicatorOfParameter = 117 ; + } +#Total column water vapour +'kg m**-2' = { + table2Version = 174 ; + indicatorOfParameter = 137 ; + } +#Large scale rainfall rate +'kg m**-2 s**-1' = { + table2Version = 174 ; + indicatorOfParameter = 142 ; + } +#Convective rainfall rate +'kg m**-2 s**-1' = { + table2Version = 174 ; + indicatorOfParameter = 143 ; + } +#Very low cloud amount +'(0 - 1)' = { + table2Version = 174 ; + indicatorOfParameter = 186 ; + } +#Convective snowfall rate +'kg m**-2 s**-1' = { + table2Version = 174 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall rate +'kg m**-2 s**-1' = { + table2Version = 174 ; + indicatorOfParameter = 240 ; + } +#Total cloud amount - random overlap +'(0 - 1)' = { + table2Version = 174 ; + indicatorOfParameter = 248 ; + } +#Total cloud amount in lw radiation +'(0 - 1)' = { + table2Version = 174 ; + indicatorOfParameter = 249 ; + } +#Aerosol type 13 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 13 ; + } +#Aerosol type 14 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 14 ; + } +#Aerosol type 15 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 15 ; + } +#SO4 aerosol precursor mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 30 ; + } +#DMS surface emission +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'~' = { + table2Version = 210 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'~' = { + table2Version = 210 ; + indicatorOfParameter = 56 ; + } +#Mixing ration of organic carbon aerosol, nucleation mode +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 57 ; + } +#Monoterpene precursor mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 58 ; + } +#Secondary organic precursor mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 59 ; + } +#Particulate matter d < 1 um +'kg m**-3' = { + table2Version = 210 ; + indicatorOfParameter = 72 ; + } +#Particulate matter d < 2.5 um +'kg m**-3' = { + table2Version = 210 ; + indicatorOfParameter = 73 ; + } +#Particulate matter d < 10 um +'kg m**-3' = { + table2Version = 210 ; + indicatorOfParameter = 74 ; + } +#Wildfire viewing angle of observation +'deg' = { + table2Version = 210 ; + indicatorOfParameter = 79 ; + } +#Wildfire Flux of Ethane (C2H6) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 118 ; + } +#Altitude of emitter +'m above sea level' = { + table2Version = 210 ; + indicatorOfParameter = 119 ; + } +#Altitude of plume top +'m above sea level' = { + table2Version = 210 ; + indicatorOfParameter = 120 ; + } +#UV visible albedo for direct radiation, isotropic component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 186 ; + } +#UV visible albedo for direct radiation, volumetric component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 187 ; + } +#UV visible albedo for direct radiation, geometric component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 188 ; + } +#Near IR albedo for direct radiation, isotropic component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 189 ; + } +#Near IR albedo for direct radiation, volumetric component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 190 ; + } +#Near IR albedo for direct radiation, geometric component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component +'(0 - 1)' = { + table2Version = 210 ; + indicatorOfParameter = 197 ; + } +#Total aerosol optical depth at 340 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 217 ; + } +#Total aerosol optical depth at 355 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 218 ; + } +#Total aerosol optical depth at 380 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 219 ; + } +#Total aerosol optical depth at 400 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 220 ; + } +#Total aerosol optical depth at 440 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 221 ; + } +#Total aerosol optical depth at 500 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 222 ; + } +#Total aerosol optical depth at 532 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 223 ; + } +#Total aerosol optical depth at 645 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 224 ; + } +#Total aerosol optical depth at 800 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 225 ; + } +#Total aerosol optical depth at 858 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 226 ; + } +#Total aerosol optical depth at 1020 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 227 ; + } +#Total aerosol optical depth at 1064 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 228 ; + } +#Total aerosol optical depth at 1640 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 229 ; + } +#Total aerosol optical depth at 2130 nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 230 ; + } +#Wildfire Flux of Toluene (C7H8) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 231 ; + } +#Wildfire Flux of Benzene (C6H6) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 232 ; + } +#Wildfire Flux of Xylene (C8H10) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 233 ; + } +#Wildfire Flux of Butenes (C4H8) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 234 ; + } +#Wildfire Flux of Pentenes (C5H10) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 235 ; + } +#Wildfire Flux of Hexene (C6H12) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 236 ; + } +#Wildfire Flux of Octene (C8H16) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 237 ; + } +#Wildfire Flux of Butanes (C4H10) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 238 ; + } +#Wildfire Flux of Pentanes (C5H12) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 239 ; + } +#Wildfire Flux of Hexanes (C6H14) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 240 ; + } +#Wildfire Flux of Heptane (C7H16) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 241 ; + } +#Aerosol type 13 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 13 ; + } +#Aerosol type 14 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 14 ; + } +#SO4 aerosol precursor mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 30 ; + } +#DMS surface emission +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'~' = { + table2Version = 211 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'~' = { + table2Version = 211 ; + indicatorOfParameter = 56 ; + } +#Wildfire Flux of Ethane (C2H6) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 118 ; + } +#Altitude of emitter +'m above sea level' = { + table2Version = 211 ; + indicatorOfParameter = 119 ; + } +#Altitude of plume top +'m above sea level' = { + table2Version = 211 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 1 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 2 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 3 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 4 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 5 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 6 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 7 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 8 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 9 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 10 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 11 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 12 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 13 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 14 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 15 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 16 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 17 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 18 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 19 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 20 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 21 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 22 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 23 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 24 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 25 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 26 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 27 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 28 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 29 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 30 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 31 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 32 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 33 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 34 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 35 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 36 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 37 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 38 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 39 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 40 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 41 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 42 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 43 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 44 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 46 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 47 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 48 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 49 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 50 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 51 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 52 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 53 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 54 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 56 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 57 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 58 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 59 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 60 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 61 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 62 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 63 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 64 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 65 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 66 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 67 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 68 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 69 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 70 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 71 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 72 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 73 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 74 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 75 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 76 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 77 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 78 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 121 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 122 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 123 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 124 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 125 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 126 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 127 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 128 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 129 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 130 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 131 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 132 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 133 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 134 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 135 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 136 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 137 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 138 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 139 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 140 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 141 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 142 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 143 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 144 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 145 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 146 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 147 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 148 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 149 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 150 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 151 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 152 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 153 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 154 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 155 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 156 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 157 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 158 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 159 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 160 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 161 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 162 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 163 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 164 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 165 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 166 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 167 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 168 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 169 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 170 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 171 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 172 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 173 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 174 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 175 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 176 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 177 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 178 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 180 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 181 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 182 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 183 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 184 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 185 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 186 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 187 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 188 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 189 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 190 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 191 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 192 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 193 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 194 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 195 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 196 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 197 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 198 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 199 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 200 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 201 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 202 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 203 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 204 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 205 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 206 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 207 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 208 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 209 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 210 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 211 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 212 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 213 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 214 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 215 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 216 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 217 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 218 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 219 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 220 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 221 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 222 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 223 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 224 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 225 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 226 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 227 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 228 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 229 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 230 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 231 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 232 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 233 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 234 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 235 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 236 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 237 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 238 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 239 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 240 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 241 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 242 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 243 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 244 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 245 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 246 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 247 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 248 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 249 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 250 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 251 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 252 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 253 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 254 ; + } +#Experimental product +'~' = { + table2Version = 212 ; + indicatorOfParameter = 255 ; + } +#Random pattern 1 for sppt +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 1 ; + } +#Random pattern 2 for sppt +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 2 ; + } +#Random pattern 3 for sppt +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 3 ; + } +#Random pattern 4 for sppt +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 4 ; + } +#Random pattern 5 for sppt +'dimensionless' = { + table2Version = 213 ; + indicatorOfParameter = 5 ; + } +# Cosine of solar zenith angle +'~' = { + table2Version = 214 ; + indicatorOfParameter = 1 ; + } +# UV biologically effective dose +'~' = { + table2Version = 214 ; + indicatorOfParameter = 2 ; + } +# UV biologically effective dose clear-sky +'~' = { + table2Version = 214 ; + indicatorOfParameter = 3 ; + } +# Total surface UV spectral flux (280-285 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 4 ; + } +# Total surface UV spectral flux (285-290 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 5 ; + } +# Total surface UV spectral flux (290-295 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 6 ; + } +# Total surface UV spectral flux (295-300 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 7 ; + } +# Total surface UV spectral flux (300-305 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 8 ; + } +# Total surface UV spectral flux (305-310 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 9 ; + } +# Total surface UV spectral flux (310-315 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 10 ; + } +# Total surface UV spectral flux (315-320 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 11 ; + } +# Total surface UV spectral flux (320-325 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 12 ; + } +# Total surface UV spectral flux (325-330 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 13 ; + } +# Total surface UV spectral flux (330-335 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 14 ; + } +# Total surface UV spectral flux (335-340 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 15 ; + } +# Total surface UV spectral flux (340-345 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 16 ; + } +# Total surface UV spectral flux (345-350 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 17 ; + } +# Total surface UV spectral flux (350-355 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 18 ; + } +# Total surface UV spectral flux (355-360 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 19 ; + } +# Total surface UV spectral flux (360-365 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 20 ; + } +# Total surface UV spectral flux (365-370 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 21 ; + } +# Total surface UV spectral flux (370-375 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 22 ; + } +# Total surface UV spectral flux (375-380 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 23 ; + } +# Total surface UV spectral flux (380-385 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 24 ; + } +# Total surface UV spectral flux (385-390 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 25 ; + } +# Total surface UV spectral flux (390-395 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 26 ; + } +# Total surface UV spectral flux (395-400 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 27 ; + } +# Clear-sky surface UV spectral flux (280-285 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 28 ; + } +# Clear-sky surface UV spectral flux (285-290 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 29 ; + } +# Clear-sky surface UV spectral flux (290-295 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 30 ; + } +# Clear-sky surface UV spectral flux (295-300 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 31 ; + } +# Clear-sky surface UV spectral flux (300-305 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 32 ; + } +# Clear-sky surface UV spectral flux (305-310 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 33 ; + } +# Clear-sky surface UV spectral flux (310-315 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 34 ; + } +# Clear-sky surface UV spectral flux (315-320 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 35 ; + } +# Clear-sky surface UV spectral flux (320-325 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 36 ; + } +# Clear-sky surface UV spectral flux (325-330 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 37 ; + } +# Clear-sky surface UV spectral flux (330-335 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 38 ; + } +# Clear-sky surface UV spectral flux (335-340 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 39 ; + } +# Clear-sky surface UV spectral flux (340-345 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 40 ; + } +# Clear-sky surface UV spectral flux (345-350 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 41 ; + } +# Clear-sky surface UV spectral flux (350-355 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 42 ; + } +# Clear-sky surface UV spectral flux (355-360 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 43 ; + } +# Clear-sky surface UV spectral flux (360-365 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 44 ; + } +# Clear-sky surface UV spectral flux (365-370 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 45 ; + } +# Clear-sky surface UV spectral flux (370-375 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 46 ; + } +# Clear-sky surface UV spectral flux (375-380 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 47 ; + } +# Clear-sky surface UV spectral flux (380-385 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 48 ; + } +# Clear-sky surface UV spectral flux (385-390 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 49 ; + } +# Clear-sky surface UV spectral flux (390-395 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 50 ; + } +# Clear-sky surface UV spectral flux (395-400 nm) +'W m**-2' = { + table2Version = 214 ; + indicatorOfParameter = 51 ; + } +# Profile of optical thickness at 340 nm +'~' = { + table2Version = 214 ; + indicatorOfParameter = 52 ; + } +# Source/gain of sea salt aerosol (0.03 - 0.5 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 1 ; + } +# Source/gain of sea salt aerosol (0.5 - 5 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 2 ; + } +# Source/gain of sea salt aerosol (5 - 20 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 3 ; + } +# Dry deposition of sea salt aerosol (0.03 - 0.5 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 4 ; + } +# Dry deposition of sea salt aerosol (0.5 - 5 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 5 ; + } +# Dry deposition of sea salt aerosol (5 - 20 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 6 ; + } +# Sedimentation of sea salt aerosol (0.03 - 0.5 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 7 ; + } +# Sedimentation of sea salt aerosol (0.5 - 5 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 8 ; + } +# Sedimentation of sea salt aerosol (5 - 20 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 9 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 10 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 11 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 12 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 13 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 14 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 15 ; + } +# Negative fixer of sea salt aerosol (0.03 - 0.5 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 16 ; + } +# Negative fixer of sea salt aerosol (0.5 - 5 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 17 ; + } +# Negative fixer of sea salt aerosol (5 - 20 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 18 ; + } +# Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um) +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 19 ; + } +# Vertically integrated mass of sea salt aerosol (0.5 - 5 um) +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 20 ; + } +# Vertically integrated mass of sea salt aerosol (5 - 20 um) +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 21 ; + } +# Sea salt aerosol (0.03 - 0.5 um) optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 22 ; + } +# Sea salt aerosol (0.5 - 5 um) optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 23 ; + } +# Sea salt aerosol (5 - 20 um) optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 24 ; + } +# Source/gain of dust aerosol (0.03 - 0.55 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 25 ; + } +# Source/gain of dust aerosol (0.55 - 9 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 26 ; + } +# Source/gain of dust aerosol (9 - 20 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 27 ; + } +# Dry deposition of dust aerosol (0.03 - 0.55 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 28 ; + } +# Dry deposition of dust aerosol (0.55 - 9 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 29 ; + } +# Dry deposition of dust aerosol (9 - 20 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 30 ; + } +# Sedimentation of dust aerosol (0.03 - 0.55 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 31 ; + } +# Sedimentation of dust aerosol (0.55 - 9 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 32 ; + } +# Sedimentation of dust aerosol (9 - 20 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 33 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 34 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 35 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 36 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 37 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 38 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 39 ; + } +# Negative fixer of dust aerosol (0.03 - 0.55 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 40 ; + } +# Negative fixer of dust aerosol (0.55 - 9 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 41 ; + } +# Negative fixer of dust aerosol (9 - 20 um) +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 42 ; + } +# Vertically integrated mass of dust aerosol (0.03 - 0.55 um) +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 43 ; + } +# Vertically integrated mass of dust aerosol (0.55 - 9 um) +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 44 ; + } +# Vertically integrated mass of dust aerosol (9 - 20 um) +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 45 ; + } +# Dust aerosol (0.03 - 0.55 um) optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 46 ; + } +# Dust aerosol (0.55 - 9 um) optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 47 ; + } +# Dust aerosol (9 - 20 um) optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 48 ; + } +# Source/gain of hydrophobic organic matter aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 49 ; + } +# Source/gain of hydrophilic organic matter aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 50 ; + } +# Dry deposition of hydrophobic organic matter aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 51 ; + } +# Dry deposition of hydrophilic organic matter aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 52 ; + } +# Sedimentation of hydrophobic organic matter aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 53 ; + } +# Sedimentation of hydrophilic organic matter aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 54 ; + } +# Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 55 ; + } +# Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 56 ; + } +# Wet deposition of hydrophobic organic matter aerosol by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 57 ; + } +# Wet deposition of hydrophilic organic matter aerosol by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 58 ; + } +# Negative fixer of hydrophobic organic matter aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 59 ; + } +# Negative fixer of hydrophilic organic matter aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 60 ; + } +# Vertically integrated mass of hydrophobic organic matter aerosol +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 61 ; + } +# Vertically integrated mass of hydrophilic organic matter aerosol +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 62 ; + } +# Hydrophobic organic matter aerosol optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 63 ; + } +# Hydrophilic organic matter aerosol optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 64 ; + } +# Source/gain of hydrophobic black carbon aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 65 ; + } +# Source/gain of hydrophilic black carbon aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 66 ; + } +# Dry deposition of hydrophobic black carbon aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 67 ; + } +# Dry deposition of hydrophilic black carbon aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 68 ; + } +# Sedimentation of hydrophobic black carbon aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 69 ; + } +# Sedimentation of hydrophilic black carbon aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 70 ; + } +# Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 71 ; + } +# Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 72 ; + } +# Wet deposition of hydrophobic black carbon aerosol by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 73 ; + } +# Wet deposition of hydrophilic black carbon aerosol by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 74 ; + } +# Negative fixer of hydrophobic black carbon aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 75 ; + } +# Negative fixer of hydrophilic black carbon aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 76 ; + } +# Vertically integrated mass of hydrophobic black carbon aerosol +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 77 ; + } +# Vertically integrated mass of hydrophilic black carbon aerosol +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 78 ; + } +# Hydrophobic black carbon aerosol optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 79 ; + } +# Hydrophilic black carbon aerosol optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 80 ; + } +# Source/gain of sulphate aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 81 ; + } +# Dry deposition of sulphate aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 82 ; + } +# Sedimentation of sulphate aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 83 ; + } +# Wet deposition of sulphate aerosol by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 84 ; + } +# Wet deposition of sulphate aerosol by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 85 ; + } +# Negative fixer of sulphate aerosol +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 86 ; + } +# Vertically integrated mass of sulphate aerosol +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 87 ; + } +# Sulphate aerosol optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 88 ; + } +#Accumulated total aerosol optical depth at 550 nm +'s' = { + table2Version = 215 ; + indicatorOfParameter = 89 ; + } +#Effective (snow effect included) UV visible albedo for direct radiation +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 90 ; + } +#10 metre wind speed dust emission potential +'kg s**2 m**-5' = { + table2Version = 215 ; + indicatorOfParameter = 91 ; + } +#10 metre wind gustiness dust emission potential +'kg s**2 m**-5' = { + table2Version = 215 ; + indicatorOfParameter = 92 ; + } +#Profile of total aerosol optical depth at 532 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 93 ; + } +#Profile of natural (sea-salt and dust) aerosol optical depth at 532 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 94 ; + } +#Profile of antropogenic (black carbon, organic matter, sulphate) aerosol optical depth at 532 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 95 ; + } +#Total absorption aerosol optical depth at 340 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 96 ; + } +#Total absorption aerosol optical depth at 355 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 97 ; + } +#Total absorption aerosol optical depth at 380 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 98 ; + } +#Total absorption aerosol optical depth at 400 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 99 ; + } +#Total absorption aerosol optical depth at 440 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 100 ; + } +#Total absorption aerosol optical depth at 469 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 101 ; + } +#Total absorption aerosol optical depth at 500 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 102 ; + } +#Total absorption aerosol optical depth at 532 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 103 ; + } +#Total absorption aerosol optical depth at 550 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 104 ; + } +#Total absorption aerosol optical depth at 645 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 105 ; + } +#Total absorption aerosol optical depth at 670 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 106 ; + } +#Total absorption aerosol optical depth at 800 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 107 ; + } +#Total absorption aerosol optical depth at 858 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 108 ; + } +#Total absorption aerosol optical depth at 865 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 109 ; + } +#Total absorption aerosol optical depth at 1020 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 110 ; + } +#Total absorption aerosol optical depth at 1064 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 111 ; + } +#Total absorption aerosol optical depth at 1240 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 112 ; + } +#Total absorption aerosol optical depth at 1640 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 113 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 114 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 115 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 116 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 117 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 118 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 119 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 120 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 121 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 122 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 123 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 124 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 125 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 126 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 127 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 128 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 129 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 130 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 131 ; + } +#Single scattering albedo at 340 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 132 ; + } +#Single scattering albedo at 355 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 133 ; + } +#Single scattering albedo at 380 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 134 ; + } +#Single scattering albedo at 400 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 135 ; + } +#Single scattering albedo at 440 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 136 ; + } +#Single scattering albedo at 469 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 137 ; + } +#Single scattering albedo at 500 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 138 ; + } +#Single scattering albedo at 532 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 139 ; + } +#Single scattering albedo at 550 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 140 ; + } +#Single scattering albedo at 645 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 141 ; + } +#Single scattering albedo at 670 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 142 ; + } +#Single scattering albedo at 800 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 143 ; + } +#Single scattering albedo at 858 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 144 ; + } +#Single scattering albedo at 865 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 145 ; + } +#Single scattering albedo at 1020 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 146 ; + } +#Single scattering albedo at 1064 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 147 ; + } +#Single scattering albedo at 1240 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 148 ; + } +#Single scattering albedo at 1640 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 149 ; + } +#Assimetry factor at 340 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 150 ; + } +#Assimetry factor at 355 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 151 ; + } +#Assimetry factor at 380 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 152 ; + } +#Assimetry factor at 400 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 153 ; + } +#Assimetry factor at 440 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 154 ; + } +#Assimetry factor at 469 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 155 ; + } +#Assimetry factor at 500 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 156 ; + } +#Assimetry factor at 532 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 157 ; + } +#Assimetry factor at 550 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 158 ; + } +#Assimetry factor at 645 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 159 ; + } +#Assimetry factor at 670 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 160 ; + } +#Assimetry factor at 800 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 161 ; + } +#Assimetry factor at 858 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 162 ; + } +#Assimetry factor at 865 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 163 ; + } +#Assimetry factor at 1020 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 164 ; + } +#Assimetry factor at 1064 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 165 ; + } +#Assimetry factor at 1240 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 166 ; + } +#Assimetry factor at 1640 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 167 ; + } +#Source/gain of sulphur dioxide +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 168 ; + } +#Dry deposition of sulphur dioxide +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 169 ; + } +#Sedimentation of sulphur dioxide +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 170 ; + } +#Wet deposition of sulphur dioxide by large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 171 ; + } +#Wet deposition of sulphur dioxide by convective precipitation +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 172 ; + } +#Negative fixer of sulphur dioxide +'kg m**-2 s**-1' = { + table2Version = 215 ; + indicatorOfParameter = 173 ; + } +#Vertically integrated mass of sulphur dioxide +'kg m**-2' = { + table2Version = 215 ; + indicatorOfParameter = 174 ; + } +#Sulphur dioxide optical depth +'~' = { + table2Version = 215 ; + indicatorOfParameter = 175 ; + } +#Total absorption aerosol optical depth at 2130 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 176 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 177 ; + } +#Single scattering albedo at 2130 nm +'(0 - 1)' = { + table2Version = 215 ; + indicatorOfParameter = 178 ; + } +#Assimetry factor at 2130 nm +'~' = { + table2Version = 215 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 1 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 2 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 3 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 4 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 5 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 6 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 7 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 8 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 9 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 10 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 11 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 12 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 13 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 14 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 15 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 16 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 17 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 18 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 19 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 20 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 21 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 22 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 23 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 24 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 25 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 26 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 27 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 28 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 29 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 30 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 31 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 32 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 33 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 34 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 35 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 36 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 37 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 38 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 39 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 40 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 41 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 42 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 43 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 44 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 45 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 46 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 47 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 48 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 49 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 50 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 51 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 52 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 53 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 54 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 55 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 56 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 57 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 58 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 59 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 60 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 61 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 62 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 63 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 64 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 65 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 66 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 67 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 68 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 69 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 70 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 71 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 72 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 73 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 74 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 75 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 76 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 77 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 78 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 120 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 121 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 122 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 123 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 124 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 125 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 126 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 127 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 128 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 129 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 130 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 131 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 132 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 133 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 134 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 135 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 136 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 137 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 138 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 139 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 140 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 141 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 142 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 143 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 144 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 145 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 146 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 147 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 148 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 149 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 150 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 151 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 152 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 153 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 154 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 155 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 156 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 157 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 158 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 159 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 160 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 161 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 162 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 163 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 164 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 165 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 166 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 167 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 168 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 169 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 170 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 171 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 172 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 173 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 174 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 175 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 176 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 177 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 178 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 179 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 180 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 181 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 182 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 183 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 184 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 185 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 186 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 187 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 188 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 189 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 190 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 191 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 192 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 193 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 194 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 195 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 196 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 197 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 198 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 199 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 200 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 201 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 202 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 203 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 204 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 205 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 206 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 207 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 208 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 209 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 210 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 211 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 212 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 213 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 214 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 215 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 216 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 217 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 218 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 219 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 220 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 221 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 222 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 223 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 224 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 225 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 226 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 227 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 228 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 229 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 230 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 231 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 232 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 233 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 234 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 235 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 236 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 237 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 238 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 239 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 240 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 241 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 242 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 243 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 244 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 245 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 246 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 247 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 248 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 249 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 250 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 251 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 252 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 253 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 254 ; + } +#Experimental product +'~' = { + table2Version = 216 ; + indicatorOfParameter = 255 ; + } +#Total sky direct solar radiation at surface +'J m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 21 ; + } +#Clear-sky direct solar radiation at surface +'J m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 22 ; + } +#Cloud base height +'m' = { + table2Version = 228 ; + indicatorOfParameter = 23 ; + } +#Zero degree level +'m' = { + table2Version = 228 ; + indicatorOfParameter = 24 ; + } +#Horizontal visibility +'m' = { + table2Version = 228 ; + indicatorOfParameter = 25 ; + } +#Maximum temperature at 2 metres in the last 3 hours +'K' = { + table2Version = 228 ; + indicatorOfParameter = 26 ; + } +#Minimum temperature at 2 metres in the last 3 hours +'K' = { + table2Version = 228 ; + indicatorOfParameter = 27 ; + } +#10 metre wind gust in the last 3 hours +'m s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 28 ; + } +#Soil wetness index in layer 1 +'dimensionless' = { + table2Version = 228 ; + indicatorOfParameter = 40 ; + } +#Soil wetness index in layer 2 +'dimensionless' = { + table2Version = 228 ; + indicatorOfParameter = 41 ; + } +#Soil wetness index in layer 3 +'dimensionless' = { + table2Version = 228 ; + indicatorOfParameter = 42 ; + } +#Soil wetness index in layer 4 +'dimensionless' = { + table2Version = 228 ; + indicatorOfParameter = 43 ; + } +#Accumulated Carbon Dioxide Net Ecosystem Exchange +'kg m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 80 ; + } +#Accumulated Carbon Dioxide Gross Primary Production +'kg m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 81 ; + } +#Accumulated Carbon Dioxide Ecosystem Respiration +'kg m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 82 ; + } +#Flux of Carbon Dioxide Net Ecosystem Exchange +'kg m**-2 s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 83 ; + } +#Flux of Carbon Dioxide Gross Primary Production +'kg m**-2 s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 84 ; + } +#Flux of Carbon Dioxide Ecosystem Respiration +'kg m**-2 s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 85 ; + } +#Total column rain water +'kg m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 89 ; + } +#Total column snow water +'kg m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 90 ; + } +#Canopy cover fraction +'(0 - 1)' = { + table2Version = 228 ; + indicatorOfParameter = 91 ; + } +#Soil texture fraction +'(0 - 1)' = { + table2Version = 228 ; + indicatorOfParameter = 92 ; + } +#Volumetric soil moisture +'m**3 m**-3' = { + table2Version = 228 ; + indicatorOfParameter = 93 ; + } +#Ice temperature +'K' = { + table2Version = 228 ; + indicatorOfParameter = 94 ; + } +#Surface solar radiation downward clear-sky +'J m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 129 ; + } +#Surface thermal radiation downward clear-sky +'J m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 130 ; + } +#SMOS first Brightness Temperature Bias Correction parameter +'K' = { + table2Version = 228 ; + indicatorOfParameter = 229 ; + } +#SMOS second Brightness Temperature Bias Correction parameter +'dimensionless' = { + table2Version = 228 ; + indicatorOfParameter = 230 ; + } +#Surface solar radiation diffuse total sky +'J m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 242 ; + } +#Surface solar radiation diffuse clear-sky +'J m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 243 ; + } +#Surface albedo of direct radiation +'(0 - 1)' = { + table2Version = 228 ; + indicatorOfParameter = 244 ; + } +#Surface albedo of diffuse radiation +'(0 - 1)' = { + table2Version = 228 ; + indicatorOfParameter = 245 ; + } +#100 metre wind speed +'m s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 249 ; + } +#Irrigation fraction +'Proportion' = { + table2Version = 228 ; + indicatorOfParameter = 250 ; + } +#Potential evaporation +'m' = { + table2Version = 228 ; + indicatorOfParameter = 251 ; + } +#Irrigation +'m' = { + table2Version = 228 ; + indicatorOfParameter = 252 ; + } +#Surface runoff (variable resolution) +'m' = { + table2Version = 230 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff (variable resolution) +'m' = { + table2Version = 230 ; + indicatorOfParameter = 9 ; + } +#Total sky direct solar radiation at surface (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 21 ; + } +#Clear-sky direct solar radiation at surface (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 22 ; + } +#Albedo (variable resolution) +'(0 - 1)' = { + table2Version = 230 ; + indicatorOfParameter = 174 ; + } +#Total precipitation (variable resolution) +'m' = { + table2Version = 230 ; + indicatorOfParameter = 228 ; + } +#K index +'K' = { + table2Version = 228 ; + indicatorOfParameter = 121 ; + } +#Total totals index +'K' = { + table2Version = 228 ; + indicatorOfParameter = 123 ; + } +#Stream function gradient +'m**2 s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 1 ; + } +#Velocity potential gradient +'m**2 s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 2 ; + } +#Potential temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence gradient +'s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 23 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 129 ; + indicatorOfParameter = 24 ; + } +#Reserved for future unbalanced components +'~' = { + table2Version = 129 ; + indicatorOfParameter = 25 ; + } +#Lake cover gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 31 ; + } +#Snow albedo gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 32 ; + } +#Snow density gradient +'kg m**-3' = { + table2Version = 129 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature layer 1 gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature layer 2 gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature layer 3 gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature layer 4 gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water layer 1 gradient +'m**3 m**-3' = { + table2Version = 129 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 gradient +'m**3 m**-3' = { + table2Version = 129 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 gradient +'m**3 m**-3' = { + table2Version = 129 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 gradient +'m**3 m**-3' = { + table2Version = 129 ; + indicatorOfParameter = 42 ; + } +#Soil type gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation gradient +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 44 ; + } +#Snowmelt gradient +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 45 ; + } +#Solar duration gradient +'s' = { + table2Version = 129 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress gradient +'N m**-2 s' = { + table2Version = 129 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction gradient +'s' = { + table2Version = 129 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential gradient +'m**2 s**-2' = { + table2Version = 129 ; + indicatorOfParameter = 53 ; + } +#Pressure gradient +'Pa' = { + table2Version = 129 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy gradient +'J kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity gradient +'K m**2 kg**-1 s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations gradient +'Millimetres*100 + number of stations' = { + table2Version = 129 ; + indicatorOfParameter = 61 ; + } +#Observation count gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference +'s' = { + table2Version = 129 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference +'s' = { + table2Version = 129 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference +'K' = { + table2Version = 129 ; + indicatorOfParameter = 65 ; + } +#Leaf area index, low vegetation +'m**2 m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 66 ; + } +#Leaf area index, high vegetation +'m**2 m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 67 ; + } +#Minimum stomatal resistance, low vegetation +'s m**-1' = { + table2Version = 129 ; + indicatorOfParameter = 68 ; + } +#Minimum stomatal resistance, high vegetation +'s m**-1' = { + table2Version = 129 ; + indicatorOfParameter = 69 ; + } +#Biome cover, low vegetation +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 70 ; + } +#Biome cover, high vegetation +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 71 ; + } +#Total column liquid water +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 78 ; + } +#Total column ice water +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 79 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 80 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 81 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 82 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 83 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 84 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 85 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 86 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 87 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 88 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 89 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 90 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 91 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 92 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 93 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 94 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 95 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 96 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 97 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 98 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 99 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 100 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 101 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 102 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 103 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 104 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 105 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 106 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 107 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 108 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 109 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 110 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 111 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 112 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 113 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 114 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 115 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 116 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 117 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 118 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 119 ; + } +#Experimental product +'~' = { + table2Version = 129 ; + indicatorOfParameter = 120 ; + } +#Maximum temperature at 2 metres gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 121 ; + } +#Minimum temperature at 2 metres gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 122 ; + } +#10 metre wind gust in the last 6 hours gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 123 ; + } +#Vertically integrated total energy +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'Various' = { + table2Version = 129 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 127 ; + } +#Budget values gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 128 ; + } +#Geopotential gradient +'m**2 s**-2' = { + table2Version = 129 ; + indicatorOfParameter = 129 ; + } +#Temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 130 ; + } +#U component of wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 131 ; + } +#V component of wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 132 ; + } +#Specific humidity gradient +'kg kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 133 ; + } +#Surface pressure gradient +'Pa' = { + table2Version = 129 ; + indicatorOfParameter = 134 ; + } +#vertical velocity (pressure) gradient +'Pa s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 135 ; + } +#Total column water gradient +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour gradient +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 137 ; + } +#Vorticity (relative) gradient +'s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 138 ; + } +#Soil temperature level 1 gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 139 ; + } +#Soil wetness level 1 gradient +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 140 ; + } +#Snow depth gradient +'m of water equivalent' = { + table2Version = 129 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) gradient +'m' = { + table2Version = 129 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation gradient +'m' = { + table2Version = 129 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) gradient +'m of water equivalent' = { + table2Version = 129 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 147 ; + } +#Charnock gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 149 ; + } +#Top net radiation gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure gradient +'Pa' = { + table2Version = 129 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 154 ; + } +#Divergence gradient +'s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 155 ; + } +#Height gradient +'m' = { + table2Version = 129 ; + indicatorOfParameter = 156 ; + } +#Relative humidity gradient +'%' = { + table2Version = 129 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure gradient +'Pa s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height gradient +'m' = { + table2Version = 129 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography gradient +'radians' = { + table2Version = 129 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 169 ; + } +#Soil temperature level 2 gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 170 ; + } +#Soil wetness level 2 gradient +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 171 ; + } +#Land-sea mask gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 172 ; + } +#Surface roughness gradient +'m' = { + table2Version = 129 ; + indicatorOfParameter = 173 ; + } +#Albedo gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress gradient +'N m**-2 s' = { + table2Version = 129 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress gradient +'N m**-2 s' = { + table2Version = 129 ; + indicatorOfParameter = 181 ; + } +#Evaporation gradient +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 182 ; + } +#Soil temperature level 3 gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 183 ; + } +#Soil wetness level 3 gradient +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 187 ; + } +#High cloud cover gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration gradient +'s' = { + table2Version = 129 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance gradient +'m**2' = { + table2Version = 129 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance gradient +'m**2' = { + table2Version = 129 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance gradient +'m**2' = { + table2Version = 129 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance gradient +'m**2' = { + table2Version = 129 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress gradient +'N m**-2 s' = { + table2Version = 129 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress gradient +'N m**-2 s' = { + table2Version = 129 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content gradient +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography gradient +'m**2' = { + table2Version = 129 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio gradient +'kg kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 204 ; + } +#Runoff gradient +'m' = { + table2Version = 129 ; + indicatorOfParameter = 205 ; + } +#Total column ozone gradient +'kg m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation, clear sky gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating large-scale condensation gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity gradient +'kg kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection gradient +'kg kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation gradient +'kg kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity gradient +'kg kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 227 ; + } +#Total precipitation gradient +'m' = { + table2Version = 129 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress gradient +'N m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress gradient +'N m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux gradient +'J m**-2' = { + table2Version = 129 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux gradient +'kg m**-2 s' = { + table2Version = 129 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity gradient +'kg kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 234 ; + } +#Skin temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 gradient +'m' = { + table2Version = 129 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall gradient +'m of water equivalent' = { + table2Version = 129 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall gradient +'m of water equivalent' = { + table2Version = 129 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency gradient +'(-1 to 1)' = { + table2Version = 129 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency gradient +'(-1 to 1)' = { + table2Version = 129 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness gradient +'m' = { + table2Version = 129 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat gradient +'~' = { + table2Version = 129 ; + indicatorOfParameter = 245 ; + } +#Specific cloud liquid water content gradient +'kg kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 246 ; + } +#Specific cloud ice water content gradient +'kg kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 247 ; + } +#Cloud cover gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency gradient +'(-1 to 1)' = { + table2Version = 129 ; + indicatorOfParameter = 249 ; + } +#Ice age gradient +'(0 - 1)' = { + table2Version = 129 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature gradient +'K' = { + table2Version = 129 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity gradient +'kg kg**-1' = { + table2Version = 129 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind gradient +'m s**-1' = { + table2Version = 129 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'~' = { + table2Version = 129 ; + indicatorOfParameter = 255 ; + } +#Top solar radiation upward +'J m**-2' = { + table2Version = 130 ; + indicatorOfParameter = 208 ; + } +#Top thermal radiation upward +'J m**-2' = { + table2Version = 130 ; + indicatorOfParameter = 209 ; + } +#Top solar radiation upward, clear sky +'J m**-2' = { + table2Version = 130 ; + indicatorOfParameter = 210 ; + } +#Top thermal radiation upward, clear sky +'J m**-2' = { + table2Version = 130 ; + indicatorOfParameter = 211 ; + } +#Cloud liquid water +'kg kg**-1' = { + table2Version = 130 ; + indicatorOfParameter = 212 ; + } +#Cloud fraction +'(0 - 1)' = { + table2Version = 130 ; + indicatorOfParameter = 213 ; + } +#Diabatic heating by radiation +'K s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion +'K s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection +'K s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating by large-scale condensation +'K s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind +'m**2 s**-3' = { + table2Version = 130 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind +'m**2 s**-3' = { + table2Version = 130 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag +'m**2 s**-3' = { + table2Version = 130 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag +'m**2 s**-3' = { + table2Version = 130 ; + indicatorOfParameter = 221 ; + } +#Vertical diffusion of humidity +'kg kg**-1 s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection +'kg kg**-1 s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation +'kg kg**-1 s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 226 ; + } +#Adiabatic tendency of temperature +'K s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 228 ; + } +#Adiabatic tendency of humidity +'kg kg**-1 s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 229 ; + } +#Adiabatic tendency of zonal wind +'m**2 s**-3' = { + table2Version = 130 ; + indicatorOfParameter = 230 ; + } +#Adiabatic tendency of meridional wind +'m**2 s**-3' = { + table2Version = 130 ; + indicatorOfParameter = 231 ; + } +#Mean vertical velocity +'Pa s**-1' = { + table2Version = 130 ; + indicatorOfParameter = 232 ; + } +#2m temperature anomaly of at least +2K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 1 ; + } +#2m temperature anomaly of at least +1K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 2 ; + } +#2m temperature anomaly of at least 0K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 3 ; + } +#2m temperature anomaly of at most -1K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 4 ; + } +#2m temperature anomaly of at most -2K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 5 ; + } +#Total precipitation anomaly of at least 20 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 6 ; + } +#Total precipitation anomaly of at least 10 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 7 ; + } +#Total precipitation anomaly of at least 0 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 8 ; + } +#Surface temperature anomaly of at least 0K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 9 ; + } +#Mean sea level pressure anomaly of at least 0 Pa +'%' = { + table2Version = 131 ; + indicatorOfParameter = 10 ; + } +#Height of 0 degree isotherm probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 15 ; + } +#Height of snowfall limit probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 16 ; + } +#Showalter index probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 17 ; + } +#Whiting index probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 18 ; + } +#Temperature anomaly less than -2 K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 20 ; + } +#Temperature anomaly of at least +2 K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 21 ; + } +#Temperature anomaly less than -8 K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 22 ; + } +#Temperature anomaly less than -4 K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 23 ; + } +#Temperature anomaly greater than +4 K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly greater than +8 K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 25 ; + } +#10 metre wind gust probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 49 ; + } +#Convective available potential energy probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 59 ; + } +#Total precipitation less than 0.1 mm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 64 ; + } +#Total precipitation rate less than 1 mm/day +'%' = { + table2Version = 131 ; + indicatorOfParameter = 65 ; + } +#Total precipitation rate of at least 3 mm/day +'%' = { + table2Version = 131 ; + indicatorOfParameter = 66 ; + } +#Total precipitation rate of at least 5 mm/day +'%' = { + table2Version = 131 ; + indicatorOfParameter = 67 ; + } +#10 metre Wind speed of at least 10 m/s +'%' = { + table2Version = 131 ; + indicatorOfParameter = 68 ; + } +#10 metre Wind speed of at least 15 m/s +'%' = { + table2Version = 131 ; + indicatorOfParameter = 69 ; + } +#10 metre Wind gust of at least 15 m/s +'%' = { + table2Version = 131 ; + indicatorOfParameter = 70 ; + } +#10 metre Wind gust of at least 20 m/s +'%' = { + table2Version = 131 ; + indicatorOfParameter = 71 ; + } +#10 metre Wind gust of at least 25 m/s +'%' = { + table2Version = 131 ; + indicatorOfParameter = 72 ; + } +#2 metre temperature less than 273.15 K +'%' = { + table2Version = 131 ; + indicatorOfParameter = 73 ; + } +#Significant wave height of at least 2 m +'%' = { + table2Version = 131 ; + indicatorOfParameter = 74 ; + } +#Significant wave height of at least 4 m +'%' = { + table2Version = 131 ; + indicatorOfParameter = 75 ; + } +#Significant wave height of at least 6 m +'%' = { + table2Version = 131 ; + indicatorOfParameter = 76 ; + } +#Significant wave height of at least 8 m +'%' = { + table2Version = 131 ; + indicatorOfParameter = 77 ; + } +#Mean wave period of at least 8 s +'%' = { + table2Version = 131 ; + indicatorOfParameter = 78 ; + } +#Mean wave period of at least 10 s +'%' = { + table2Version = 131 ; + indicatorOfParameter = 79 ; + } +#Mean wave period of at least 12 s +'%' = { + table2Version = 131 ; + indicatorOfParameter = 80 ; + } +#Mean wave period of at least 15 s +'%' = { + table2Version = 131 ; + indicatorOfParameter = 81 ; + } +#Geopotential probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 129 ; + } +#Temperature anomaly probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 130 ; + } +#2 metre temperature probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 139 ; + } +#Snowfall (convective + stratiform) probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 144 ; + } +#Total precipitation probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 151 ; + } +#Total cloud cover probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 164 ; + } +#10 metre speed probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 165 ; + } +#2 metre temperature probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 167 ; + } +#Maximum 2 metre temperature probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 201 ; + } +#Minimum 2 metre temperature probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 202 ; + } +#Total precipitation probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 228 ; + } +#Significant wave height probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 229 ; + } +#Mean wave period probability +'%' = { + table2Version = 131 ; + indicatorOfParameter = 232 ; + } +#Indicates a missing value +'~' = { + table2Version = 131 ; + indicatorOfParameter = 255 ; + } +#10 metre wind gust index +'(-1 to 1)' = { + table2Version = 132 ; + indicatorOfParameter = 49 ; + } +#Snowfall index +'(-1 to 1)' = { + table2Version = 132 ; + indicatorOfParameter = 144 ; + } +#10 metre speed index +'(-1 to 1)' = { + table2Version = 132 ; + indicatorOfParameter = 165 ; + } +#2 metre temperature index +'(-1 to 1)' = { + table2Version = 132 ; + indicatorOfParameter = 167 ; + } +#Maximum temperature at 2 metres index +'(-1 to 1)' = { + table2Version = 132 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres index +'(-1 to 1)' = { + table2Version = 132 ; + indicatorOfParameter = 202 ; + } +#Total precipitation index +'(-1 to 1)' = { + table2Version = 132 ; + indicatorOfParameter = 228 ; + } +#2m temperature probability less than -10 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 1 ; + } +#2m temperature probability less than -5 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 2 ; + } +#2m temperature probability less than 0 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 3 ; + } +#2m temperature probability less than 5 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 4 ; + } +#2m temperature probability less than 10 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 5 ; + } +#2m temperature probability greater than 25 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 6 ; + } +#2m temperature probability greater than 30 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 7 ; + } +#2m temperature probability greater than 35 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 8 ; + } +#2m temperature probability greater than 40 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 9 ; + } +#2m temperature probability greater than 45 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 10 ; + } +#Minimum 2 metre temperature probability less than -10 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 11 ; + } +#Minimum 2 metre temperature probability less than -5 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 12 ; + } +#Minimum 2 metre temperature probability less than 0 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 13 ; + } +#Minimum 2 metre temperature probability less than 5 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 14 ; + } +#Minimum 2 metre temperature probability less than 10 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 15 ; + } +#Maximum 2 metre temperature probability greater than 25 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 16 ; + } +#Maximum 2 metre temperature probability greater than 30 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 17 ; + } +#Maximum 2 metre temperature probability greater than 35 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 18 ; + } +#Maximum 2 metre temperature probability greater than 40 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 19 ; + } +#Maximum 2 metre temperature probability greater than 45 C +'%' = { + table2Version = 133 ; + indicatorOfParameter = 20 ; + } +#10 metre wind speed probability of at least 10 m/s +'%' = { + table2Version = 133 ; + indicatorOfParameter = 21 ; + } +#10 metre wind speed probability of at least 15 m/s +'%' = { + table2Version = 133 ; + indicatorOfParameter = 22 ; + } +#10 metre wind speed probability of at least 20 m/s +'%' = { + table2Version = 133 ; + indicatorOfParameter = 23 ; + } +#10 metre wind speed probability of at least 35 m/s +'%' = { + table2Version = 133 ; + indicatorOfParameter = 24 ; + } +#10 metre wind speed probability of at least 50 m/s +'%' = { + table2Version = 133 ; + indicatorOfParameter = 25 ; + } +#10 metre wind gust probability of at least 20 m/s +'%' = { + table2Version = 133 ; + indicatorOfParameter = 26 ; + } +#10 metre wind gust probability of at least 35 m/s +'%' = { + table2Version = 133 ; + indicatorOfParameter = 27 ; + } +#10 metre wind gust probability of at least 50 m/s +'%' = { + table2Version = 133 ; + indicatorOfParameter = 28 ; + } +#10 metre wind gust probability of at least 75 m/s +'%' = { + table2Version = 133 ; + indicatorOfParameter = 29 ; + } +#10 metre wind gust probability of at least 100 m/s +'%' = { + table2Version = 133 ; + indicatorOfParameter = 30 ; + } +#Total precipitation probability of at least 1 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 31 ; + } +#Total precipitation probability of at least 5 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 32 ; + } +#Total precipitation probability of at least 10 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 33 ; + } +#Total precipitation probability of at least 20 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 34 ; + } +#Total precipitation probability of at least 40 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 35 ; + } +#Total precipitation probability of at least 60 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 36 ; + } +#Total precipitation probability of at least 80 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 37 ; + } +#Total precipitation probability of at least 100 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 38 ; + } +#Total precipitation probability of at least 150 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 39 ; + } +#Total precipitation probability of at least 200 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 40 ; + } +#Total precipitation probability of at least 300 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 41 ; + } +#Snowfall probability of at least 1 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 42 ; + } +#Snowfall probability of at least 5 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 43 ; + } +#Snowfall probability of at least 10 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 44 ; + } +#Snowfall probability of at least 20 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 45 ; + } +#Snowfall probability of at least 40 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 46 ; + } +#Snowfall probability of at least 60 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 47 ; + } +#Snowfall probability of at least 80 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 48 ; + } +#Snowfall probability of at least 100 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 49 ; + } +#Snowfall probability of at least 150 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 50 ; + } +#Snowfall probability of at least 200 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 51 ; + } +#Snowfall probability of at least 300 mm +'%' = { + table2Version = 133 ; + indicatorOfParameter = 52 ; + } +#Total Cloud Cover probability greater than 10% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 53 ; + } +#Total Cloud Cover probability greater than 20% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 54 ; + } +#Total Cloud Cover probability greater than 30% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 55 ; + } +#Total Cloud Cover probability greater than 40% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 56 ; + } +#Total Cloud Cover probability greater than 50% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 57 ; + } +#Total Cloud Cover probability greater than 60% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 58 ; + } +#Total Cloud Cover probability greater than 70% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 59 ; + } +#Total Cloud Cover probability greater than 80% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 60 ; + } +#Total Cloud Cover probability greater than 90% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 61 ; + } +#Total Cloud Cover probability greater than 99% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 62 ; + } +#High Cloud Cover probability greater than 10% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 63 ; + } +#High Cloud Cover probability greater than 20% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 64 ; + } +#High Cloud Cover probability greater than 30% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 65 ; + } +#High Cloud Cover probability greater than 40% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 66 ; + } +#High Cloud Cover probability greater than 50% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 67 ; + } +#High Cloud Cover probability greater than 60% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 68 ; + } +#High Cloud Cover probability greater than 70% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 69 ; + } +#High Cloud Cover probability greater than 80% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 70 ; + } +#High Cloud Cover probability greater than 90% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 71 ; + } +#High Cloud Cover probability greater than 99% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 72 ; + } +#Medium Cloud Cover probability greater than 10% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 73 ; + } +#Medium Cloud Cover probability greater than 20% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 74 ; + } +#Medium Cloud Cover probability greater than 30% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 75 ; + } +#Medium Cloud Cover probability greater than 40% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 76 ; + } +#Medium Cloud Cover probability greater than 50% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 77 ; + } +#Medium Cloud Cover probability greater than 60% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 78 ; + } +#Medium Cloud Cover probability greater than 70% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 79 ; + } +#Medium Cloud Cover probability greater than 80% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 80 ; + } +#Medium Cloud Cover probability greater than 90% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 81 ; + } +#Medium Cloud Cover probability greater than 99% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 82 ; + } +#Low Cloud Cover probability greater than 10% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 83 ; + } +#Low Cloud Cover probability greater than 20% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 84 ; + } +#Low Cloud Cover probability greater than 30% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 85 ; + } +#Low Cloud Cover probability greater than 40% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 86 ; + } +#Low Cloud Cover probability greater than 50% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 87 ; + } +#Low Cloud Cover probability greater than 60% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 88 ; + } +#Low Cloud Cover probability greater than 70% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 89 ; + } +#Low Cloud Cover probability greater than 80% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 90 ; + } +#Low Cloud Cover probability greater than 90% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 91 ; + } +#Low Cloud Cover probability greater than 99% +'%' = { + table2Version = 133 ; + indicatorOfParameter = 92 ; + } +#Maximum of significant wave height +'m' = { + table2Version = 140 ; + indicatorOfParameter = 200 ; + } +#Period corresponding to maximum individual wave height +'s' = { + table2Version = 140 ; + indicatorOfParameter = 217 ; + } +#Maximum individual wave height +'m' = { + table2Version = 140 ; + indicatorOfParameter = 218 ; + } +#Model bathymetry +'m' = { + table2Version = 140 ; + indicatorOfParameter = 219 ; + } +#Mean wave period based on first moment +'s' = { + table2Version = 140 ; + indicatorOfParameter = 220 ; + } +#Mean wave period based on second moment +'s' = { + table2Version = 140 ; + indicatorOfParameter = 221 ; + } +#Wave spectral directional width +'~' = { + table2Version = 140 ; + indicatorOfParameter = 222 ; + } +#Mean wave period based on first moment for wind waves +'s' = { + table2Version = 140 ; + indicatorOfParameter = 223 ; + } +#Mean wave period based on second moment for wind waves +'s' = { + table2Version = 140 ; + indicatorOfParameter = 224 ; + } +#Wave spectral directional width for wind waves +'~' = { + table2Version = 140 ; + indicatorOfParameter = 225 ; + } +#Mean wave period based on first moment for swell +'s' = { + table2Version = 140 ; + indicatorOfParameter = 226 ; + } +#Mean wave period based on second moment for swell +'s' = { + table2Version = 140 ; + indicatorOfParameter = 227 ; + } +#Wave spectral directional width for swell +'~' = { + table2Version = 140 ; + indicatorOfParameter = 228 ; + } +#Significant height of combined wind waves and swell +'m' = { + table2Version = 140 ; + indicatorOfParameter = 229 ; + } +#Mean wave direction +'degrees' = { + table2Version = 140 ; + indicatorOfParameter = 230 ; + } +#Peak period of 1D spectra +'s' = { + table2Version = 140 ; + indicatorOfParameter = 231 ; + } +#Mean wave period +'s' = { + table2Version = 140 ; + indicatorOfParameter = 232 ; + } +#Coefficient of drag with waves +'~' = { + table2Version = 140 ; + indicatorOfParameter = 233 ; + } +#Significant height of wind waves +'m' = { + table2Version = 140 ; + indicatorOfParameter = 234 ; + } +#Mean direction of wind waves +'degrees' = { + table2Version = 140 ; + indicatorOfParameter = 235 ; + } +#Mean period of wind waves +'s' = { + table2Version = 140 ; + indicatorOfParameter = 236 ; + } +#Significant height of total swell +'m' = { + table2Version = 140 ; + indicatorOfParameter = 237 ; + } +#Mean direction of total swell +'degrees' = { + table2Version = 140 ; + indicatorOfParameter = 238 ; + } +#Mean period of total swell +'s' = { + table2Version = 140 ; + indicatorOfParameter = 239 ; + } +#Standard deviation wave height +'m' = { + table2Version = 140 ; + indicatorOfParameter = 240 ; + } +#Mean of 10 metre wind speed +'m s**-1' = { + table2Version = 140 ; + indicatorOfParameter = 241 ; + } +#Mean wind direction +'degrees' = { + table2Version = 140 ; + indicatorOfParameter = 242 ; + } +#Standard deviation of 10 metre wind speed +'m s**-1' = { + table2Version = 140 ; + indicatorOfParameter = 243 ; + } +#Mean square slope of waves +'dimensionless' = { + table2Version = 140 ; + indicatorOfParameter = 244 ; + } +#10 metre wind speed +'m s**-1' = { + table2Version = 140 ; + indicatorOfParameter = 245 ; + } +#Altimeter wave height +'m' = { + table2Version = 140 ; + indicatorOfParameter = 246 ; + } +#Altimeter corrected wave height +'m' = { + table2Version = 140 ; + indicatorOfParameter = 247 ; + } +#Altimeter range relative correction +'~' = { + table2Version = 140 ; + indicatorOfParameter = 248 ; + } +#10 metre wind direction +'degrees' = { + table2Version = 140 ; + indicatorOfParameter = 249 ; + } +#2D wave spectra (multiple) +'m**2 s radian**-1' = { + table2Version = 140 ; + indicatorOfParameter = 250 ; + } +#2D wave spectra (single) +'m**2 s radian**-1' = { + table2Version = 140 ; + indicatorOfParameter = 251 ; + } +#Wave spectral kurtosis +'~' = { + table2Version = 140 ; + indicatorOfParameter = 252 ; + } +#Benjamin-Feir index +'~' = { + table2Version = 140 ; + indicatorOfParameter = 253 ; + } +#Wave spectral peakedness +'s**-1' = { + table2Version = 140 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'~' = { + table2Version = 140 ; + indicatorOfParameter = 255 ; + } +#Ocean potential temperature +'deg C' = { + table2Version = 150 ; + indicatorOfParameter = 129 ; + } +#Ocean salinity +'psu' = { + table2Version = 150 ; + indicatorOfParameter = 130 ; + } +#Ocean potential density +'kg m**-3 -1000' = { + table2Version = 150 ; + indicatorOfParameter = 131 ; + } +#Ocean U wind component +'m s**-1' = { + table2Version = 150 ; + indicatorOfParameter = 133 ; + } +#Ocean V wind component +'m s**-1' = { + table2Version = 150 ; + indicatorOfParameter = 134 ; + } +#Ocean W wind component +'m s**-1' = { + table2Version = 150 ; + indicatorOfParameter = 135 ; + } +#Richardson number +'~' = { + table2Version = 150 ; + indicatorOfParameter = 137 ; + } +#U*V product +'m s**-2' = { + table2Version = 150 ; + indicatorOfParameter = 139 ; + } +#U*T product +'m s**-1 deg C' = { + table2Version = 150 ; + indicatorOfParameter = 140 ; + } +#V*T product +'m s**-1 deg C' = { + table2Version = 150 ; + indicatorOfParameter = 141 ; + } +#U*U product +'m s**-2' = { + table2Version = 150 ; + indicatorOfParameter = 142 ; + } +#V*V product +'m s**-2' = { + table2Version = 150 ; + indicatorOfParameter = 143 ; + } +#UV - U~V~ +'m s**-2' = { + table2Version = 150 ; + indicatorOfParameter = 144 ; + } +#UT - U~T~ +'m s**-1 deg C' = { + table2Version = 150 ; + indicatorOfParameter = 145 ; + } +#VT - V~T~ +'m s**-1 deg C' = { + table2Version = 150 ; + indicatorOfParameter = 146 ; + } +#UU - U~U~ +'m s**-2' = { + table2Version = 150 ; + indicatorOfParameter = 147 ; + } +#VV - V~V~ +'m s**-2' = { + table2Version = 150 ; + indicatorOfParameter = 148 ; + } +#Sea level +'m' = { + table2Version = 150 ; + indicatorOfParameter = 152 ; + } +#Barotropic stream function +'~' = { + table2Version = 150 ; + indicatorOfParameter = 153 ; + } +#Mixed layer depth +'m' = { + table2Version = 150 ; + indicatorOfParameter = 154 ; + } +#Depth +'m' = { + table2Version = 150 ; + indicatorOfParameter = 155 ; + } +#U stress +'Pa' = { + table2Version = 150 ; + indicatorOfParameter = 168 ; + } +#V stress +'Pa' = { + table2Version = 150 ; + indicatorOfParameter = 169 ; + } +#Turbulent kinetic energy input +'~' = { + table2Version = 150 ; + indicatorOfParameter = 170 ; + } +#Net surface heat flux +'~' = { + table2Version = 150 ; + indicatorOfParameter = 171 ; + } +#Surface solar radiation +'~' = { + table2Version = 150 ; + indicatorOfParameter = 172 ; + } +#P-E +'~' = { + table2Version = 150 ; + indicatorOfParameter = 173 ; + } +#Diagnosed sea surface temperature error +'deg C' = { + table2Version = 150 ; + indicatorOfParameter = 180 ; + } +#Heat flux correction +'J m**-2' = { + table2Version = 150 ; + indicatorOfParameter = 181 ; + } +#Observed sea surface temperature +'deg C' = { + table2Version = 150 ; + indicatorOfParameter = 182 ; + } +#Observed heat flux +'J m**-2' = { + table2Version = 150 ; + indicatorOfParameter = 183 ; + } +#Indicates a missing value +'~' = { + table2Version = 150 ; + indicatorOfParameter = 255 ; + } +#In situ Temperature +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 128 ; + } +#Ocean potential temperature +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 129 ; + } +#Salinity +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 130 ; + } +#Ocean current zonal component +'m s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 131 ; + } +#Ocean current meridional component +'m s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 132 ; + } +#Ocean current vertical component +'m s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 133 ; + } +#Modulus of strain rate tensor +'s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 134 ; + } +#Vertical viscosity +'m**2 s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 135 ; + } +#Vertical diffusivity +'m**2 s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 136 ; + } +#Bottom level Depth +'m' = { + table2Version = 151 ; + indicatorOfParameter = 137 ; + } +#Sigma-theta +'kg m**-3' = { + table2Version = 151 ; + indicatorOfParameter = 138 ; + } +#Richardson number +'~' = { + table2Version = 151 ; + indicatorOfParameter = 139 ; + } +#UV product +'m**2 s**-2' = { + table2Version = 151 ; + indicatorOfParameter = 140 ; + } +#UT product +'m s**-1 degC' = { + table2Version = 151 ; + indicatorOfParameter = 141 ; + } +#VT product +'m s**-1 deg C' = { + table2Version = 151 ; + indicatorOfParameter = 142 ; + } +#UU product +'m**2 s**-2' = { + table2Version = 151 ; + indicatorOfParameter = 143 ; + } +#VV product +'m**2 s**-2' = { + table2Version = 151 ; + indicatorOfParameter = 144 ; + } +#Sea level +'m' = { + table2Version = 151 ; + indicatorOfParameter = 145 ; + } +#Sea level previous timestep +'m' = { + table2Version = 151 ; + indicatorOfParameter = 146 ; + } +#Barotropic stream function +'m**3 s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 147 ; + } +#Mixed layer depth +'m' = { + table2Version = 151 ; + indicatorOfParameter = 148 ; + } +#Bottom Pressure (equivalent height) +'m' = { + table2Version = 151 ; + indicatorOfParameter = 149 ; + } +#Steric height +'m' = { + table2Version = 151 ; + indicatorOfParameter = 150 ; + } +#Curl of Wind Stress +'N m**-3' = { + table2Version = 151 ; + indicatorOfParameter = 151 ; + } +#Divergence of wind stress +'Nm**-3' = { + table2Version = 151 ; + indicatorOfParameter = 152 ; + } +#U stress +'N m**-2' = { + table2Version = 151 ; + indicatorOfParameter = 153 ; + } +#V stress +'N m**-2' = { + table2Version = 151 ; + indicatorOfParameter = 154 ; + } +#Turbulent kinetic energy input +'J m**-2' = { + table2Version = 151 ; + indicatorOfParameter = 155 ; + } +#Net surface heat flux +'J m**-2' = { + table2Version = 151 ; + indicatorOfParameter = 156 ; + } +#Absorbed solar radiation +'J m**-2' = { + table2Version = 151 ; + indicatorOfParameter = 157 ; + } +#Precipitation - evaporation +'m s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 158 ; + } +#Specified sea surface temperature +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 159 ; + } +#Specified surface heat flux +'J m**-2' = { + table2Version = 151 ; + indicatorOfParameter = 160 ; + } +#Diagnosed sea surface temperature error +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 161 ; + } +#Heat flux correction +'J m**-2' = { + table2Version = 151 ; + indicatorOfParameter = 162 ; + } +#20 degrees isotherm depth +'m' = { + table2Version = 151 ; + indicatorOfParameter = 163 ; + } +#Average potential temperature in the upper 300m +'degrees C' = { + table2Version = 151 ; + indicatorOfParameter = 164 ; + } +#Vertically integrated zonal velocity (previous time step) +'m**2 s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 165 ; + } +#Vertically Integrated meridional velocity (previous time step) +'m**2 s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 166 ; + } +#Vertically integrated zonal volume transport +'m**2 s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 167 ; + } +#Vertically integrated meridional volume transport +'m**2 s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 168 ; + } +#Vertically integrated zonal heat transport +'J m**-1 s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 169 ; + } +#Vertically integrated meridional heat transport +'J m**-1 s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 170 ; + } +#U velocity maximum +'m s**-1' = { + table2Version = 151 ; + indicatorOfParameter = 171 ; + } +#Depth of the velocity maximum +'m' = { + table2Version = 151 ; + indicatorOfParameter = 172 ; + } +#Salinity maximum +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 173 ; + } +#Depth of salinity maximum +'m' = { + table2Version = 151 ; + indicatorOfParameter = 174 ; + } +#Average salinity in the upper 300m +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 175 ; + } +#Layer Thickness at scalar points +'m' = { + table2Version = 151 ; + indicatorOfParameter = 176 ; + } +#Layer Thickness at vector points +'m' = { + table2Version = 151 ; + indicatorOfParameter = 177 ; + } +#Potential temperature increment +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 178 ; + } +#Potential temperature analysis error +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 179 ; + } +#Background potential temperature +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 180 ; + } +#Analysed potential temperature +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 181 ; + } +#Potential temperature background error +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 182 ; + } +#Analysed salinity +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 183 ; + } +#Salinity increment +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 184 ; + } +#Estimated Bias in Temperature +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 185 ; + } +#Estimated Bias in Salinity +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 186 ; + } +#Zonal Velocity increment (from balance operator) +'m s**-1 per time step' = { + table2Version = 151 ; + indicatorOfParameter = 187 ; + } +#Meridional Velocity increment (from balance operator) +'~' = { + table2Version = 151 ; + indicatorOfParameter = 188 ; + } +#Salinity increment (from salinity data) +'psu per time step' = { + table2Version = 151 ; + indicatorOfParameter = 190 ; + } +#Salinity analysis error +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 191 ; + } +#Background Salinity +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 192 ; + } +#Salinity background error +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 194 ; + } +#Estimated temperature bias from assimilation +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 199 ; + } +#Estimated salinity bias from assimilation +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 200 ; + } +#Temperature increment from relaxation term +'deg C per time step' = { + table2Version = 151 ; + indicatorOfParameter = 201 ; + } +#Salinity increment from relaxation term +'~' = { + table2Version = 151 ; + indicatorOfParameter = 202 ; + } +#Bias in the zonal pressure gradient (applied) +'Pa**m-1' = { + table2Version = 151 ; + indicatorOfParameter = 203 ; + } +#Bias in the meridional pressure gradient (applied) +'Pa**m-1' = { + table2Version = 151 ; + indicatorOfParameter = 204 ; + } +#Estimated temperature bias from relaxation +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 205 ; + } +#Estimated salinity bias from relaxation +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 206 ; + } +#First guess bias in temperature +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 207 ; + } +#First guess bias in salinity +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 208 ; + } +#Applied bias in pressure +'Pa' = { + table2Version = 151 ; + indicatorOfParameter = 209 ; + } +#FG bias in pressure +'Pa' = { + table2Version = 151 ; + indicatorOfParameter = 210 ; + } +#Bias in temperature(applied) +'deg C' = { + table2Version = 151 ; + indicatorOfParameter = 211 ; + } +#Bias in salinity (applied) +'psu' = { + table2Version = 151 ; + indicatorOfParameter = 212 ; + } +#Indicates a missing value +'~' = { + table2Version = 151 ; + indicatorOfParameter = 255 ; + } +#10 metre wind gust during averaging time +'m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 49 ; + } +#vertical velocity (pressure) +'Pa s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 135 ; + } +#Precipitable water content +'kg m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 137 ; + } +#Soil wetness level 1 +'m' = { + table2Version = 160 ; + indicatorOfParameter = 140 ; + } +#Snow depth +'kg m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 141 ; + } +#Large-scale precipitation +'kg m**-2 s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'kg m**-2 s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 143 ; + } +#Snowfall +'kg m**-2 s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 144 ; + } +#Height +'m' = { + table2Version = 160 ; + indicatorOfParameter = 156 ; + } +#Relative humidity +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 157 ; + } +#Soil wetness level 2 +'m' = { + table2Version = 160 ; + indicatorOfParameter = 171 ; + } +#East-West surface stress +'N m**-2 s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'N m**-2 s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'kg m**-2 s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 182 ; + } +#Soil wetness level 3 +'m' = { + table2Version = 160 ; + indicatorOfParameter = 184 ; + } +#Skin reservoir content +'kg m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 198 ; + } +#Percentage of vegetation +'%' = { + table2Version = 160 ; + indicatorOfParameter = 199 ; + } +#Maximum temperature at 2 metres during averaging time +'K' = { + table2Version = 160 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres during averaging time +'K' = { + table2Version = 160 ; + indicatorOfParameter = 202 ; + } +#Runoff +'kg m**-2 s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 205 ; + } +#Standard deviation of geopotential +'m**2 s**-2' = { + table2Version = 160 ; + indicatorOfParameter = 206 ; + } +#Covariance of temperature and geopotential +'K m**2 s**-2' = { + table2Version = 160 ; + indicatorOfParameter = 207 ; + } +#Standard deviation of temperature +'K' = { + table2Version = 160 ; + indicatorOfParameter = 208 ; + } +#Covariance of specific humidity and geopotential +'m**2 s**-2' = { + table2Version = 160 ; + indicatorOfParameter = 209 ; + } +#Covariance of specific humidity and temperature +'K' = { + table2Version = 160 ; + indicatorOfParameter = 210 ; + } +#Standard deviation of specific humidity +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 211 ; + } +#Covariance of U component and geopotential +'m**3 s**-3' = { + table2Version = 160 ; + indicatorOfParameter = 212 ; + } +#Covariance of U component and temperature +'K m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 213 ; + } +#Covariance of U component and specific humidity +'m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 214 ; + } +#Standard deviation of U velocity +'m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 215 ; + } +#Covariance of V component and geopotential +'m**3 s**-3' = { + table2Version = 160 ; + indicatorOfParameter = 216 ; + } +#Covariance of V component and temperature +'K m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 217 ; + } +#Covariance of V component and specific humidity +'m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 218 ; + } +#Covariance of V component and U component +'m**2 s**-2' = { + table2Version = 160 ; + indicatorOfParameter = 219 ; + } +#Standard deviation of V component +'m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 220 ; + } +#Covariance of W component and geopotential +'Pa m**2 s**-3' = { + table2Version = 160 ; + indicatorOfParameter = 221 ; + } +#Covariance of W component and temperature +'K Pa s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 222 ; + } +#Covariance of W component and specific humidity +'Pa s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 223 ; + } +#Covariance of W component and U component +'Pa m s**-2' = { + table2Version = 160 ; + indicatorOfParameter = 224 ; + } +#Covariance of W component and V component +'Pa m s**-2' = { + table2Version = 160 ; + indicatorOfParameter = 225 ; + } +#Standard deviation of vertical velocity +'Pa s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 226 ; + } +#Instantaneous surface heat flux +'J m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 231 ; + } +#Convective snowfall +'kg m**-2 s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall +'kg m**-2 s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 240 ; + } +#Cloud liquid water content +'kg kg**-1' = { + table2Version = 160 ; + indicatorOfParameter = 241 ; + } +#Cloud cover +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo +'~' = { + table2Version = 160 ; + indicatorOfParameter = 243 ; + } +#10 metre wind speed +'m s**-1' = { + table2Version = 160 ; + indicatorOfParameter = 246 ; + } +#Momentum flux +'N m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 247 ; + } +#Gravity wave dissipation flux +'J m**-2' = { + table2Version = 160 ; + indicatorOfParameter = 249 ; + } +#Heaviside beta function +'(0 - 1)' = { + table2Version = 160 ; + indicatorOfParameter = 254 ; + } +#Surface geopotential +'m**2 s**-2' = { + table2Version = 162 ; + indicatorOfParameter = 51 ; + } +#Vertical integral of mass of atmosphere +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 53 ; + } +#Vertical integral of temperature +'K kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 54 ; + } +#Vertical integral of water vapour +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 55 ; + } +#Vertical integral of cloud liquid water +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 56 ; + } +#Vertical integral of cloud frozen water +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 57 ; + } +#Vertical integral of ozone +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 58 ; + } +#Vertical integral of kinetic energy +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 59 ; + } +#Vertical integral of thermal energy +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 60 ; + } +#Vertical integral of potential+internal energy +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 61 ; + } +#Vertical integral of potential+internal+latent energy +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 62 ; + } +#Vertical integral of total energy +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 63 ; + } +#Vertical integral of energy conversion +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 64 ; + } +#Vertical integral of eastward mass flux +'kg m**-1 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 65 ; + } +#Vertical integral of northward mass flux +'kg m**-1 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 66 ; + } +#Vertical integral of eastward kinetic energy flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 67 ; + } +#Vertical integral of northward kinetic energy flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 68 ; + } +#Vertical integral of eastward heat flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 69 ; + } +#Vertical integral of northward heat flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 70 ; + } +#Vertical integral of eastward water vapour flux +'kg m**-1 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 71 ; + } +#Vertical integral of northward water vapour flux +'kg m**-1 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 72 ; + } +#Vertical integral of eastward geopotential flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 73 ; + } +#Vertical integral of northward geopotential flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 74 ; + } +#Vertical integral of eastward total energy flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 75 ; + } +#Vertical integral of northward total energy flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 76 ; + } +#Vertical integral of eastward ozone flux +'kg m**-1 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 77 ; + } +#Vertical integral of northward ozone flux +'kg m**-1 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 78 ; + } +#Vertical integral of divergence of mass flux +'kg m**-2 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 81 ; + } +#Vertical integral of divergence of kinetic energy flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 82 ; + } +#Vertical integral of divergence of thermal energy flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 83 ; + } +#Vertical integral of divergence of moisture flux +'kg m**-2 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 84 ; + } +#Vertical integral of divergence of geopotential flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 85 ; + } +#Vertical integral of divergence of total energy flux +'J m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 86 ; + } +#Vertical integral of divergence of ozone flux +'kg m**-2 s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 87 ; + } +#Tendency of short wave radiation +'K' = { + table2Version = 162 ; + indicatorOfParameter = 100 ; + } +#Tendency of long wave radiation +'K' = { + table2Version = 162 ; + indicatorOfParameter = 101 ; + } +#Tendency of clear sky short wave radiation +'K' = { + table2Version = 162 ; + indicatorOfParameter = 102 ; + } +#Tendency of clear sky long wave radiation +'K' = { + table2Version = 162 ; + indicatorOfParameter = 103 ; + } +#Updraught mass flux +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 104 ; + } +#Downdraught mass flux +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 105 ; + } +#Updraught detrainment rate +'kg m**-3' = { + table2Version = 162 ; + indicatorOfParameter = 106 ; + } +#Downdraught detrainment rate +'kg m**-3' = { + table2Version = 162 ; + indicatorOfParameter = 107 ; + } +#Total precipitation flux +'kg m**-2' = { + table2Version = 162 ; + indicatorOfParameter = 108 ; + } +#Turbulent diffusion coefficient for heat +'m**2' = { + table2Version = 162 ; + indicatorOfParameter = 109 ; + } +#Tendency of temperature due to physics +'K' = { + table2Version = 162 ; + indicatorOfParameter = 110 ; + } +#Tendency of specific humidity due to physics +'kg kg**-1' = { + table2Version = 162 ; + indicatorOfParameter = 111 ; + } +#Tendency of u component due to physics +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 112 ; + } +#Tendency of v component due to physics +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 113 ; + } +#Variance of geopotential +'m**4 s**-4' = { + table2Version = 162 ; + indicatorOfParameter = 206 ; + } +#Covariance of geopotential/temperature +'m**2 K s**-2' = { + table2Version = 162 ; + indicatorOfParameter = 207 ; + } +#Variance of temperature +'K**2' = { + table2Version = 162 ; + indicatorOfParameter = 208 ; + } +#Covariance of geopotential/specific humidity +'m**2 s**-2' = { + table2Version = 162 ; + indicatorOfParameter = 209 ; + } +#Covariance of temperature/specific humidity +'K' = { + table2Version = 162 ; + indicatorOfParameter = 210 ; + } +#Variance of specific humidity +'~' = { + table2Version = 162 ; + indicatorOfParameter = 211 ; + } +#Covariance of u component/geopotential +'m**3 s**-3' = { + table2Version = 162 ; + indicatorOfParameter = 212 ; + } +#Covariance of u component/temperature +'m s**-1 K' = { + table2Version = 162 ; + indicatorOfParameter = 213 ; + } +#Covariance of u component/specific humidity +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 214 ; + } +#Variance of u component +'m**2 s**-2' = { + table2Version = 162 ; + indicatorOfParameter = 215 ; + } +#Covariance of v component/geopotential +'m**3 s**-3' = { + table2Version = 162 ; + indicatorOfParameter = 216 ; + } +#Covariance of v component/temperature +'m s**-1 K' = { + table2Version = 162 ; + indicatorOfParameter = 217 ; + } +#Covariance of v component/specific humidity +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 218 ; + } +#Covariance of v component/u component +'m**2 s**-2' = { + table2Version = 162 ; + indicatorOfParameter = 219 ; + } +#Variance of v component +'m**2 s**-2' = { + table2Version = 162 ; + indicatorOfParameter = 220 ; + } +#Covariance of omega/geopotential +'m**2 Pa s**-3' = { + table2Version = 162 ; + indicatorOfParameter = 221 ; + } +#Covariance of omega/temperature +'Pa s**-1 K' = { + table2Version = 162 ; + indicatorOfParameter = 222 ; + } +#Covariance of omega/specific humidity +'Pa s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 223 ; + } +#Covariance of omega/u component +'m Pa s**-2' = { + table2Version = 162 ; + indicatorOfParameter = 224 ; + } +#Covariance of omega/v component +'m Pa s**-2' = { + table2Version = 162 ; + indicatorOfParameter = 225 ; + } +#Variance of omega +'Pa**2 s**-2' = { + table2Version = 162 ; + indicatorOfParameter = 226 ; + } +#Variance of surface pressure +'Pa**2' = { + table2Version = 162 ; + indicatorOfParameter = 227 ; + } +#Variance of relative humidity +'dimensionless' = { + table2Version = 162 ; + indicatorOfParameter = 229 ; + } +#Covariance of u component/ozone +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 230 ; + } +#Covariance of v component/ozone +'m s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 231 ; + } +#Covariance of omega/ozone +'Pa s**-1' = { + table2Version = 162 ; + indicatorOfParameter = 232 ; + } +#Variance of ozone +'dimensionless' = { + table2Version = 162 ; + indicatorOfParameter = 233 ; + } +#Indicates a missing value +'~' = { + table2Version = 162 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'m' = { + table2Version = 170 ; + indicatorOfParameter = 149 ; + } +#Soil wetness level 2 +'m' = { + table2Version = 170 ; + indicatorOfParameter = 171 ; + } +#Top net thermal radiation +'J m**-2' = { + table2Version = 170 ; + indicatorOfParameter = 179 ; + } +#Stream function anomaly +'m**2 s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 1 ; + } +#Velocity potential anomaly +'m**2 s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 2 ; + } +#Potential temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 3 ; + } +#Equivalent potential temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 4 ; + } +#Saturated equivalent potential temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 5 ; + } +#U component of divergent wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 11 ; + } +#V component of divergent wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 12 ; + } +#U component of rotational wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 13 ; + } +#V component of rotational wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 14 ; + } +#Unbalanced component of temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 21 ; + } +#Unbalanced component of logarithm of surface pressure anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 22 ; + } +#Unbalanced component of divergence anomaly +'s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 23 ; + } +#Lake cover anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 26 ; + } +#Low vegetation cover anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 27 ; + } +#High vegetation cover anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 28 ; + } +#Type of low vegetation anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 29 ; + } +#Type of high vegetation anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 30 ; + } +#Sea-ice cover anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 31 ; + } +#Snow albedo anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 32 ; + } +#Snow density anomaly +'kg m**-3' = { + table2Version = 171 ; + indicatorOfParameter = 33 ; + } +#Sea surface temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 34 ; + } +#Ice surface temperature anomaly layer 1 +'K' = { + table2Version = 171 ; + indicatorOfParameter = 35 ; + } +#Ice surface temperature anomaly layer 2 +'K' = { + table2Version = 171 ; + indicatorOfParameter = 36 ; + } +#Ice surface temperature anomaly layer 3 +'K' = { + table2Version = 171 ; + indicatorOfParameter = 37 ; + } +#Ice surface temperature anomaly layer 4 +'K' = { + table2Version = 171 ; + indicatorOfParameter = 38 ; + } +#Volumetric soil water anomaly layer 1 +'m**3 m**-3' = { + table2Version = 171 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water anomaly layer 2 +'m**3 m**-3' = { + table2Version = 171 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water anomaly layer 3 +'m**3 m**-3' = { + table2Version = 171 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water anomaly layer 4 +'m**3 m**-3' = { + table2Version = 171 ; + indicatorOfParameter = 42 ; + } +#Soil type anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 43 ; + } +#Snow evaporation anomaly +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 44 ; + } +#Snowmelt anomaly +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 45 ; + } +#Solar duration anomaly +'s' = { + table2Version = 171 ; + indicatorOfParameter = 46 ; + } +#Direct solar radiation anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 47 ; + } +#Magnitude of surface stress anomaly +'N m**-2 s' = { + table2Version = 171 ; + indicatorOfParameter = 48 ; + } +#10 metre wind gust anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 49 ; + } +#Large-scale precipitation fraction anomaly +'s' = { + table2Version = 171 ; + indicatorOfParameter = 50 ; + } +#Maximum 2 metre temperature in the last 24 hours anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 51 ; + } +#Minimum 2 metre temperature in the last 24 hours anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 52 ; + } +#Montgomery potential anomaly +'m**2 s**-2' = { + table2Version = 171 ; + indicatorOfParameter = 53 ; + } +#Pressure anomaly +'Pa' = { + table2Version = 171 ; + indicatorOfParameter = 54 ; + } +#Mean 2 metre temperature in the last 24 hours anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 56 ; + } +#Downward UV radiation at the surface anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 58 ; + } +#Convective available potential energy anomaly +'J kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 59 ; + } +#Potential vorticity anomaly +'K m**2 kg**-1 s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 60 ; + } +#Total precipitation from observations anomaly +'Millimetres*100 + number of stations' = { + table2Version = 171 ; + indicatorOfParameter = 61 ; + } +#Observation count anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 62 ; + } +#Start time for skin temperature difference anomaly +'s' = { + table2Version = 171 ; + indicatorOfParameter = 63 ; + } +#Finish time for skin temperature difference anomaly +'s' = { + table2Version = 171 ; + indicatorOfParameter = 64 ; + } +#Skin temperature difference anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 65 ; + } +#Total column liquid water anomaly +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 78 ; + } +#Total column ice water anomaly +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 79 ; + } +#Vertically integrated total energy anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 125 ; + } +#Generic parameter for sensitive area prediction +'Various' = { + table2Version = 171 ; + indicatorOfParameter = 126 ; + } +#Atmospheric tide anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 127 ; + } +#Budget values anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 128 ; + } +#Geopotential anomaly +'m**2 s**-2' = { + table2Version = 171 ; + indicatorOfParameter = 129 ; + } +#Temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 130 ; + } +#U component of wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 131 ; + } +#V component of wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 132 ; + } +#Specific humidity anomaly +'kg kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 133 ; + } +#Surface pressure anomaly +'Pa' = { + table2Version = 171 ; + indicatorOfParameter = 134 ; + } +#Vertical velocity (pressure) anomaly +'Pa s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 135 ; + } +#Total column water anomaly +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 136 ; + } +#Total column water vapour anomaly +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 137 ; + } +#Relative vorticity anomaly +'s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 138 ; + } +#Soil temperature anomaly level 1 +'K' = { + table2Version = 171 ; + indicatorOfParameter = 139 ; + } +#Soil wetness anomaly level 1 +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 140 ; + } +#Snow depth anomaly +'m of water equivalent' = { + table2Version = 171 ; + indicatorOfParameter = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'m' = { + table2Version = 171 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation anomaly +'m' = { + table2Version = 171 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) anomaly +'m of water equivalent' = { + table2Version = 171 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 147 ; + } +#Charnock anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 148 ; + } +#Surface net radiation anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 149 ; + } +#Top net radiation anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 150 ; + } +#Mean sea level pressure anomaly +'Pa' = { + table2Version = 171 ; + indicatorOfParameter = 151 ; + } +#Logarithm of surface pressure anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 152 ; + } +#Short-wave heating rate anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 154 ; + } +#Relative divergence anomaly +'s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 155 ; + } +#Height anomaly +'m' = { + table2Version = 171 ; + indicatorOfParameter = 156 ; + } +#Relative humidity anomaly +'%' = { + table2Version = 171 ; + indicatorOfParameter = 157 ; + } +#Tendency of surface pressure anomaly +'Pa s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 158 ; + } +#Boundary layer height anomaly +'m' = { + table2Version = 171 ; + indicatorOfParameter = 159 ; + } +#Standard deviation of orography anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 160 ; + } +#Anisotropy of sub-gridscale orography anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 161 ; + } +#Angle of sub-gridscale orography anomaly +'radians' = { + table2Version = 171 ; + indicatorOfParameter = 162 ; + } +#Slope of sub-gridscale orography anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 163 ; + } +#Total cloud cover anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 164 ; + } +#10 metre U wind component anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 165 ; + } +#10 metre V wind component anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 166 ; + } +#2 metre temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 167 ; + } +#2 metre dewpoint temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 168 ; + } +#Surface solar radiation downwards anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 169 ; + } +#Soil temperature anomaly level 2 +'K' = { + table2Version = 171 ; + indicatorOfParameter = 170 ; + } +#Soil wetness anomaly level 2 +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 171 ; + } +#Surface roughness anomaly +'m' = { + table2Version = 171 ; + indicatorOfParameter = 173 ; + } +#Albedo anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 174 ; + } +#Surface thermal radiation downwards anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress anomaly +'N m**-2 s' = { + table2Version = 171 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress anomaly +'N m**-2 s' = { + table2Version = 171 ; + indicatorOfParameter = 181 ; + } +#Evaporation anomaly +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 182 ; + } +#Soil temperature anomaly level 3 +'K' = { + table2Version = 171 ; + indicatorOfParameter = 183 ; + } +#Soil wetness anomaly level 3 +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 184 ; + } +#Convective cloud cover anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 185 ; + } +#Low cloud cover anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 186 ; + } +#Medium cloud cover anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 187 ; + } +#High cloud cover anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 188 ; + } +#Sunshine duration anomaly +'s' = { + table2Version = 171 ; + indicatorOfParameter = 189 ; + } +#East-West component of sub-gridscale orographic variance anomaly +'m**2' = { + table2Version = 171 ; + indicatorOfParameter = 190 ; + } +#North-South component of sub-gridscale orographic variance anomaly +'m**2' = { + table2Version = 171 ; + indicatorOfParameter = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance anomaly +'m**2' = { + table2Version = 171 ; + indicatorOfParameter = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance anomaly +'m**2' = { + table2Version = 171 ; + indicatorOfParameter = 193 ; + } +#Brightness temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 194 ; + } +#Longitudinal component of gravity wave stress anomaly +'N m**-2 s' = { + table2Version = 171 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress anomaly +'N m**-2 s' = { + table2Version = 171 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content anomaly +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 198 ; + } +#Vegetation fraction anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 199 ; + } +#Variance of sub-gridscale orography anomaly +'m**2' = { + table2Version = 171 ; + indicatorOfParameter = 200 ; + } +#Maximum temperature at 2 metres anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 201 ; + } +#Minimum temperature at 2 metres anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 202 ; + } +#Ozone mass mixing ratio anomaly +'kg kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 203 ; + } +#Precipitation analysis weights anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 204 ; + } +#Runoff anomaly +'m' = { + table2Version = 171 ; + indicatorOfParameter = 205 ; + } +#Total column ozone anomaly +'kg m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 206 ; + } +#10 metre wind speed anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 207 ; + } +#Top net solar radiation clear sky anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation clear sky anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation clear sky anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 211 ; + } +#Solar insolation anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 212 ; + } +#Diabatic heating by radiation anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 214 ; + } +#Diabatic heating by vertical diffusion anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 215 ; + } +#Diabatic heating by cumulus convection anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 216 ; + } +#Diabatic heating by large-scale condensation anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 217 ; + } +#Vertical diffusion of zonal wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 218 ; + } +#Vertical diffusion of meridional wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 219 ; + } +#East-West gravity wave drag tendency anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 220 ; + } +#North-South gravity wave drag tendency anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 221 ; + } +#Convective tendency of zonal wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 222 ; + } +#Convective tendency of meridional wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion of humidity anomaly +'kg kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 224 ; + } +#Humidity tendency by cumulus convection anomaly +'kg kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 225 ; + } +#Humidity tendency by large-scale condensation anomaly +'kg kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 226 ; + } +#Change from removal of negative humidity anomaly +'kg kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 227 ; + } +#Total precipitation anomaly +'m' = { + table2Version = 171 ; + indicatorOfParameter = 228 ; + } +#Instantaneous X surface stress anomaly +'N m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 229 ; + } +#Instantaneous Y surface stress anomaly +'N m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 230 ; + } +#Instantaneous surface heat flux anomaly +'J m**-2' = { + table2Version = 171 ; + indicatorOfParameter = 231 ; + } +#Instantaneous moisture flux anomaly +'kg m**-2 s' = { + table2Version = 171 ; + indicatorOfParameter = 232 ; + } +#Apparent surface humidity anomaly +'kg kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 233 ; + } +#Logarithm of surface roughness length for heat anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 234 ; + } +#Skin temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 235 ; + } +#Soil temperature level 4 anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 236 ; + } +#Soil wetness level 4 anomaly +'m' = { + table2Version = 171 ; + indicatorOfParameter = 237 ; + } +#Temperature of snow layer anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 238 ; + } +#Convective snowfall anomaly +'m of water equivalent' = { + table2Version = 171 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall anomaly +'m of water equivalent' = { + table2Version = 171 ; + indicatorOfParameter = 240 ; + } +#Accumulated cloud fraction tendency anomaly +'(-1 to 1)' = { + table2Version = 171 ; + indicatorOfParameter = 241 ; + } +#Accumulated liquid water tendency anomaly +'(-1 to 1)' = { + table2Version = 171 ; + indicatorOfParameter = 242 ; + } +#Forecast albedo anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 243 ; + } +#Forecast surface roughness anomaly +'m' = { + table2Version = 171 ; + indicatorOfParameter = 244 ; + } +#Forecast logarithm of surface roughness for heat anomaly +'~' = { + table2Version = 171 ; + indicatorOfParameter = 245 ; + } +#Cloud liquid water content anomaly +'kg kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 246 ; + } +#Cloud ice water content anomaly +'kg kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 247 ; + } +#Cloud cover anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 248 ; + } +#Accumulated ice water tendency anomaly +'(-1 to 1)' = { + table2Version = 171 ; + indicatorOfParameter = 249 ; + } +#Ice age anomaly +'(0 - 1)' = { + table2Version = 171 ; + indicatorOfParameter = 250 ; + } +#Adiabatic tendency of temperature anomaly +'K' = { + table2Version = 171 ; + indicatorOfParameter = 251 ; + } +#Adiabatic tendency of humidity anomaly +'kg kg**-1' = { + table2Version = 171 ; + indicatorOfParameter = 252 ; + } +#Adiabatic tendency of zonal wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 253 ; + } +#Adiabatic tendency of meridional wind anomaly +'m s**-1' = { + table2Version = 171 ; + indicatorOfParameter = 254 ; + } +#Indicates a missing value +'~' = { + table2Version = 171 ; + indicatorOfParameter = 255 ; + } +#Snow evaporation +'m of water s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 44 ; + } +#Snowmelt +'m of water s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 45 ; + } +#Magnitude of surface stress +'N m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 48 ; + } +#Large-scale precipitation fraction +'~' = { + table2Version = 172 ; + indicatorOfParameter = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) +'m s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation +'m s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) +'m of water equivalent s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 147 ; + } +#Surface net radiation +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 149 ; + } +#Short-wave heating rate +'K s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate +'K s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 154 ; + } +#Surface solar radiation downwards +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 175 ; + } +#Surface solar radiation +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 176 ; + } +#Surface thermal radiation +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 177 ; + } +#Top solar radiation +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 178 ; + } +#Top thermal radiation +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress +'N m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress +'N m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 181 ; + } +#Evaporation +'m of water s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration +'~' = { + table2Version = 172 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress +'N m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress +'N m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 197 ; + } +#Runoff +'m s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky +'J m**-2' = { + table2Version = 172 ; + indicatorOfParameter = 211 ; + } +#Solar insolation +'W m**-2 s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 212 ; + } +#Total precipitation +'m s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 228 ; + } +#Convective snowfall +'m of water equivalent s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall +'m of water equivalent s**-1' = { + table2Version = 172 ; + indicatorOfParameter = 240 ; + } +#Indicates a missing value +'~' = { + table2Version = 172 ; + indicatorOfParameter = 255 ; + } +#Snow evaporation anomaly +'m of water s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 44 ; + } +#Snowmelt anomaly +'m of water s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 45 ; + } +#Magnitude of surface stress anomaly +'N m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 48 ; + } +#Large-scale precipitation fraction anomaly +'~' = { + table2Version = 173 ; + indicatorOfParameter = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'m s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation anomaly +'m s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) anomalous rate of accumulation +'m of water equivalent s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 147 ; + } +#Surface net radiation anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 149 ; + } +#Short-wave heating rate anomaly +'K s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 153 ; + } +#Long-wave heating rate anomaly +'K s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 154 ; + } +#Surface solar radiation downwards anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 175 ; + } +#Surface solar radiation anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 176 ; + } +#Surface thermal radiation anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 177 ; + } +#Top solar radiation anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 178 ; + } +#Top thermal radiation anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress anomaly +'N m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress anomaly +'N m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 181 ; + } +#Evaporation anomaly +'m of water s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration anomalous rate of accumulation +'dimensionless' = { + table2Version = 173 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress anomaly +'N m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress anomaly +'N m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 197 ; + } +#Runoff anomaly +'m s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'J m**-2' = { + table2Version = 173 ; + indicatorOfParameter = 211 ; + } +#Solar insolation anomaly +'W m**-2 s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 212 ; + } +#Total precipitation anomalous rate of accumulation +'m s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 228 ; + } +#Convective snowfall anomaly +'m of water equivalent s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 239 ; + } +#Large scale snowfall anomaly +'m of water equivalent s**-1' = { + table2Version = 173 ; + indicatorOfParameter = 240 ; + } +#Indicates a missing value +'~' = { + table2Version = 173 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'m' = { + table2Version = 174 ; + indicatorOfParameter = 6 ; + } +#Surface runoff +'kg m**-2' = { + table2Version = 174 ; + indicatorOfParameter = 8 ; + } +#Sub-surface runoff +'kg m**-2' = { + table2Version = 174 ; + indicatorOfParameter = 9 ; + } +#Fraction of sea-ice in sea +'(0 - 1)' = { + table2Version = 174 ; + indicatorOfParameter = 31 ; + } +#Open-sea surface temperature +'K' = { + table2Version = 174 ; + indicatorOfParameter = 34 ; + } +#Volumetric soil water layer 1 +'m**3 m**-3' = { + table2Version = 174 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'m**3 m**-3' = { + table2Version = 174 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'m**3 m**-3' = { + table2Version = 174 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'m**3 m**-3' = { + table2Version = 174 ; + indicatorOfParameter = 42 ; + } +#10 metre wind gust in the last 24 hours +'m s**-1' = { + table2Version = 174 ; + indicatorOfParameter = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'K' = { + table2Version = 174 ; + indicatorOfParameter = 55 ; + } +#Net primary productivity +'kg C m**-2 s**-1' = { + table2Version = 174 ; + indicatorOfParameter = 83 ; + } +#10m U wind over land +'m s**-1' = { + table2Version = 174 ; + indicatorOfParameter = 85 ; + } +#10m V wind over land +'m s**-1' = { + table2Version = 174 ; + indicatorOfParameter = 86 ; + } +#1.5m temperature over land +'K' = { + table2Version = 174 ; + indicatorOfParameter = 87 ; + } +#1.5m dewpoint temperature over land +'K' = { + table2Version = 174 ; + indicatorOfParameter = 88 ; + } +#Top incoming solar radiation +'J m**-2' = { + table2Version = 174 ; + indicatorOfParameter = 89 ; + } +#Top outgoing solar radiation +'J m**-2' = { + table2Version = 174 ; + indicatorOfParameter = 90 ; + } +#Mean sea surface temperature +'K' = { + table2Version = 174 ; + indicatorOfParameter = 94 ; + } +#1.5m specific humidity +'kg kg**-1' = { + table2Version = 174 ; + indicatorOfParameter = 95 ; + } +#Sea-ice thickness +'m' = { + table2Version = 174 ; + indicatorOfParameter = 98 ; + } +#Liquid water potential temperature +'K' = { + table2Version = 174 ; + indicatorOfParameter = 99 ; + } +#Ocean ice concentration +'(0 - 1)' = { + table2Version = 174 ; + indicatorOfParameter = 110 ; + } +#Ocean mean ice depth +'m' = { + table2Version = 174 ; + indicatorOfParameter = 111 ; + } +#Soil temperature layer 1 +'K' = { + table2Version = 174 ; + indicatorOfParameter = 139 ; + } +#Average potential temperature in upper 293.4m +'degrees C' = { + table2Version = 174 ; + indicatorOfParameter = 164 ; + } +#1.5m temperature +'K' = { + table2Version = 174 ; + indicatorOfParameter = 167 ; + } +#1.5m dewpoint temperature +'K' = { + table2Version = 174 ; + indicatorOfParameter = 168 ; + } +#Soil temperature layer 2 +'K' = { + table2Version = 174 ; + indicatorOfParameter = 170 ; + } +#Average salinity in upper 293.4m +'psu' = { + table2Version = 174 ; + indicatorOfParameter = 175 ; + } +#Soil temperature layer 3 +'K' = { + table2Version = 174 ; + indicatorOfParameter = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'K' = { + table2Version = 174 ; + indicatorOfParameter = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'K' = { + table2Version = 174 ; + indicatorOfParameter = 202 ; + } +#Soil temperature layer 4 +'K' = { + table2Version = 174 ; + indicatorOfParameter = 236 ; + } +#Indicates a missing value +'~' = { + table2Version = 174 ; + indicatorOfParameter = 255 ; + } +#Total soil moisture +'m' = { + table2Version = 175 ; + indicatorOfParameter = 6 ; + } +#Fraction of sea-ice in sea +'(0 - 1)' = { + table2Version = 175 ; + indicatorOfParameter = 31 ; + } +#Open-sea surface temperature +'K' = { + table2Version = 175 ; + indicatorOfParameter = 34 ; + } +#Volumetric soil water layer 1 +'m**3 m**-3' = { + table2Version = 175 ; + indicatorOfParameter = 39 ; + } +#Volumetric soil water layer 2 +'m**3 m**-3' = { + table2Version = 175 ; + indicatorOfParameter = 40 ; + } +#Volumetric soil water layer 3 +'m**3 m**-3' = { + table2Version = 175 ; + indicatorOfParameter = 41 ; + } +#Volumetric soil water layer 4 +'m**3 m**-3' = { + table2Version = 175 ; + indicatorOfParameter = 42 ; + } +#10m wind gust in the last 24 hours +'m s**-1' = { + table2Version = 175 ; + indicatorOfParameter = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'K' = { + table2Version = 175 ; + indicatorOfParameter = 55 ; + } +#Net primary productivity +'kg C m**-2 s**-1' = { + table2Version = 175 ; + indicatorOfParameter = 83 ; + } +#10m U wind over land +'m s**-1' = { + table2Version = 175 ; + indicatorOfParameter = 85 ; + } +#10m V wind over land +'m s**-1' = { + table2Version = 175 ; + indicatorOfParameter = 86 ; + } +#1.5m temperature over land +'K' = { + table2Version = 175 ; + indicatorOfParameter = 87 ; + } +#1.5m dewpoint temperature over land +'K' = { + table2Version = 175 ; + indicatorOfParameter = 88 ; + } +#Top incoming solar radiation +'J m**-2' = { + table2Version = 175 ; + indicatorOfParameter = 89 ; + } +#Top outgoing solar radiation +'J m**-2' = { + table2Version = 175 ; + indicatorOfParameter = 90 ; + } +#Ocean ice concentration +'(0 - 1)' = { + table2Version = 175 ; + indicatorOfParameter = 110 ; + } +#Ocean mean ice depth +'m' = { + table2Version = 175 ; + indicatorOfParameter = 111 ; + } +#Soil temperature layer 1 +'K' = { + table2Version = 175 ; + indicatorOfParameter = 139 ; + } +#Average potential temperature in upper 293.4m +'degrees C' = { + table2Version = 175 ; + indicatorOfParameter = 164 ; + } +#1.5m temperature +'K' = { + table2Version = 175 ; + indicatorOfParameter = 167 ; + } +#1.5m dewpoint temperature +'K' = { + table2Version = 175 ; + indicatorOfParameter = 168 ; + } +#Soil temperature layer 2 +'K' = { + table2Version = 175 ; + indicatorOfParameter = 170 ; + } +#Average salinity in upper 293.4m +'psu' = { + table2Version = 175 ; + indicatorOfParameter = 175 ; + } +#Soil temperature layer 3 +'K' = { + table2Version = 175 ; + indicatorOfParameter = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'K' = { + table2Version = 175 ; + indicatorOfParameter = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'K' = { + table2Version = 175 ; + indicatorOfParameter = 202 ; + } +#Soil temperature layer 4 +'K' = { + table2Version = 175 ; + indicatorOfParameter = 236 ; + } +#Indicates a missing value +'~' = { + table2Version = 175 ; + indicatorOfParameter = 255 ; + } +#Total soil wetness +'m' = { + table2Version = 180 ; + indicatorOfParameter = 149 ; + } +#Surface net solar radiation +'J m**-2' = { + table2Version = 180 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation +'J m**-2' = { + table2Version = 180 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation +'J m**-2' = { + table2Version = 180 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation +'J m**-2' = { + table2Version = 180 ; + indicatorOfParameter = 179 ; + } +#Snow depth +'kg m**-2' = { + table2Version = 190 ; + indicatorOfParameter = 141 ; + } +#Field capacity +'(0 - 1)' = { + table2Version = 190 ; + indicatorOfParameter = 170 ; + } +#Wilting point +'(0 - 1)' = { + table2Version = 190 ; + indicatorOfParameter = 171 ; + } +#Roughness length +'(0 - 1)' = { + table2Version = 190 ; + indicatorOfParameter = 173 ; + } +#Total soil moisture +'m**3 m**-3' = { + table2Version = 190 ; + indicatorOfParameter = 229 ; + } +#2 metre dewpoint temperature difference +'K' = { + table2Version = 200 ; + indicatorOfParameter = 168 ; + } +#downward shortwave radiant flux density +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 1 ; + } +#upward shortwave radiant flux density +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 2 ; + } +#downward longwave radiant flux density +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 3 ; + } +#upward longwave radiant flux density +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 4 ; + } +#downwd photosynthetic active radiant flux density +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + } +#net shortwave flux +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 6 ; + } +#net longwave flux +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 7 ; + } +#total net radiative flux density +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 8 ; + } +#downw shortw radiant flux density, cloudfree part +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 9 ; + } +#upw shortw radiant flux density, cloudy part +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 10 ; + } +#downw longw radiant flux density, cloudfree part +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 11 ; + } +#upw longw radiant flux density, cloudy part +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 12 ; + } +#shortwave radiative heating rate +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + } +#longwave radiative heating rate +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + } +#total radiative heating rate +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 15 ; + } +#soil heat flux, surface +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 16 ; + } +#soil heat flux, bottom of layer +'J m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 17 ; + } +#fractional cloud cover +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + } +#cloud cover, grid scale +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + } +#specific cloud water content +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + } +#cloud water content, grid scale, vert integrated +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 32 ; + } +#specific cloud ice content, grid scale +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + } +#cloud ice content, grid scale, vert integrated +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 34 ; + } +#specific rainwater content, grid scale +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + } +#specific snow content, grid scale +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + } +#specific rainwater content, gs, vert. integrated +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + } +#specific snow content, gs, vert. integrated +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + } +#total column water +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + } +#vert. integral of divergence of tot. water content +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + } +#cloud covers CH_CM_CL (000...888) +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 50 ; + } +#cloud cover CH (0..8) +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#total cloud cover (0..8) +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 54 ; + } +#fog (0..8) +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 55 ; + } +#fog +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 56 ; + } +#cloud cover, convective cirrus +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 60 ; + } +#specific cloud water content, convective clouds +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + } +#cloud water content, conv clouds, vert integrated +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 62 ; + } +#specific cloud ice content, convective clouds +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 63 ; + } +#cloud ice content, conv clouds, vert integrated +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 64 ; + } +#convective mass flux +'kg s**-1 m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 65 ; + } +#Updraft velocity, convection +'m s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 66 ; + } +#entrainment parameter, convection +'m**-1' = { + table2Version = 201 ; + indicatorOfParameter = 67 ; + } +#cloud base, convective clouds (above msl) +'m' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + } +#cloud top, convective clouds (above msl) +'m' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + } +#convective layers (00...77) (BKE) +'(0 - 1)' = { + table2Version = 201 ; + indicatorOfParameter = 70 ; + } +#KO-index +'dimensionless' = { + table2Version = 201 ; + indicatorOfParameter = 71 ; + } +#convection base index +'dimensionless' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + } +#convection top index +'dimensionless' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + } +#convective temperature tendency +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + } +#convective tendency of specific humidity +'s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + } +#convective tendency of total heat +'J kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 76 ; + } +#convective tendency of total water +'s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 77 ; + } +#convective momentum tendency (X-component) +'m s**-2' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + } +#convective momentum tendency (Y-component) +'m s**-2' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + } +#convective vorticity tendency +'s**-2' = { + table2Version = 201 ; + indicatorOfParameter = 80 ; + } +#convective divergence tendency +'s**-2' = { + table2Version = 201 ; + indicatorOfParameter = 81 ; + } +#top of dry convection (above msl) +'m' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + } +#dry convection top index +'dimensionless' = { + table2Version = 201 ; + indicatorOfParameter = 83 ; + } +#height of 0 degree Celsius isotherm above msl +'m' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + } +#height of snow-fall limit +'m' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + } +#spec. content of precip. particles +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + } +#surface precipitation rate, rain, grid scale +'kg s**-1 m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + } +#surface precipitation rate, snow, grid scale +'kg s**-1 m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + } +#surface precipitation amount, rain, grid scale +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + } +#surface precipitation rate, rain, convective +'kg s**-1 m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + } +#surface precipitation rate, snow, convective +'kg s**-1 m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + } +#surface precipitation amount, rain, convective +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + } +#deviation of pressure from reference value +'Pa' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + } +#coefficient of horizontal diffusion +'m**2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 150 ; + } +#Maximum wind velocity +'m s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + } +#water content of interception store +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + } +#snow temperature +'K' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + } +#ice surface temperature +'K' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + } +#convective available potential energy +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + } +#Indicates a missing value +'~' = { + table2Version = 201 ; + indicatorOfParameter = 255 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 11 ; + } +#Aerosol type 12 mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 12 ; + } +#Aerosol type 1 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 16 ; + } +#Aerosol type 2 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 17 ; + } +#Aerosol type 3 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 18 ; + } +#Aerosol type 4 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 19 ; + } +#Aerosol type 5 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 20 ; + } +#Aerosol type 6 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 21 ; + } +#Aerosol type 7 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 22 ; + } +#Aerosol type 8 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 23 ; + } +#Aerosol type 9 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 24 ; + } +#Aerosol type 10 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 25 ; + } +#Aerosol type 11 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 26 ; + } +#Aerosol type 12 source/gain accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 42 ; + } +#Aerosol precursor mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 46 ; + } +#Aerosol small mode mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 47 ; + } +#Aerosol large mode mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 48 ; + } +#Aerosol precursor optical depth +'dimensionless' = { + table2Version = 210 ; + indicatorOfParameter = 49 ; + } +#Aerosol small mode optical depth +'dimensionless' = { + table2Version = 210 ; + indicatorOfParameter = 50 ; + } +#Aerosol large mode optical depth +'dimensionless' = { + table2Version = 210 ; + indicatorOfParameter = 51 ; + } +#Dust emission potential +'kg s**2 m**-5' = { + table2Version = 210 ; + indicatorOfParameter = 52 ; + } +#Lifting threshold speed +'m s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 53 ; + } +#Soil clay content +'%' = { + table2Version = 210 ; + indicatorOfParameter = 54 ; + } +#Carbon Dioxide +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 61 ; + } +#Methane +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 62 ; + } +#Nitrous oxide +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 63 ; + } +#Total column Carbon Dioxide +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 64 ; + } +#Total column Methane +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 65 ; + } +#Total column Nitrous oxide +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 66 ; + } +#Ocean flux of Carbon Dioxide +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 69 ; + } +#Methane Surface Fluxes +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 71 ; + } +#Wildfire flux of Carbon Dioxide +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 80 ; + } +#Wildfire flux of Carbon Monoxide +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 81 ; + } +#Wildfire flux of Methane +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 83 ; + } +#Wildfire flux of Hydrogen +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 85 ; + } +#Wildfire flux of Nitrous Oxide +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 87 ; + } +#Wildfire flux of Total Particulate Matter +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 89 ; + } +#Wildfire flux of Organic Carbon +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 90 ; + } +#Wildfire flux of Black Carbon +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 91 ; + } +#Wildfire overall flux of burnt Carbon +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 92 ; + } +#Wildfire fraction of C4 plants +'dimensionless' = { + table2Version = 210 ; + indicatorOfParameter = 93 ; + } +#Wildfire vegetation map index +'dimensionless' = { + table2Version = 210 ; + indicatorOfParameter = 94 ; + } +#Wildfire Combustion Completeness +'dimensionless' = { + table2Version = 210 ; + indicatorOfParameter = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 96 ; + } +#Wildfire fraction of area observed +'dimensionless' = { + table2Version = 210 ; + indicatorOfParameter = 97 ; + } +#Wildfire observed area +'m**2' = { + table2Version = 210 ; + indicatorOfParameter = 98 ; + } +#Wildfire radiative power +'W m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 99 ; + } +#Wildfire combustion rate +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 100 ; + } +#Nitrogen dioxide +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 121 ; + } +#Sulphur dioxide +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 122 ; + } +#Carbon monoxide +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 123 ; + } +#Formaldehyde +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 124 ; + } +#Total column Nitrogen dioxide +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 125 ; + } +#Total column Sulphur dioxide +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 126 ; + } +#Total column Carbon monoxide +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 127 ; + } +#Total column Formaldehyde +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 128 ; + } +#Nitrogen Oxides +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 129 ; + } +#Total Column Nitrogen Oxides +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 131 ; + } +#Total column GRG tracer 1 +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 133 ; + } +#Total column GRG tracer 2 +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 135 ; + } +#Total column GRG tracer 3 +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 137 ; + } +#Total column GRG tracer 4 +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 139 ; + } +#Total column GRG tracer 5 +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 141 ; + } +#Total column GRG tracer 6 +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 143 ; + } +#Total column GRG tracer 7 +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 145 ; + } +#Total column GRG tracer 8 +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 147 ; + } +#Total column GRG tracer 9 +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 149 ; + } +#Total column GRG tracer 10 +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 150 ; + } +#Surface flux Nitrogen oxides +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 151 ; + } +#Surface flux Nitrogen dioxide +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 152 ; + } +#Surface flux Sulphur dioxide +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 153 ; + } +#Surface flux Carbon monoxide +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 154 ; + } +#Surface flux Formaldehyde +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 155 ; + } +#Surface flux GEMS Ozone +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 156 ; + } +#Surface flux reactive tracer 1 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 157 ; + } +#Surface flux reactive tracer 2 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 158 ; + } +#Surface flux reactive tracer 3 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 159 ; + } +#Surface flux reactive tracer 4 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 160 ; + } +#Surface flux reactive tracer 5 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 161 ; + } +#Surface flux reactive tracer 6 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 162 ; + } +#Surface flux reactive tracer 7 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 163 ; + } +#Surface flux reactive tracer 8 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 164 ; + } +#Surface flux reactive tracer 9 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 165 ; + } +#Surface flux reactive tracer 10 +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 166 ; + } +#Radon +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 181 ; + } +#Sulphur Hexafluoride +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 182 ; + } +#Total column Radon +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 183 ; + } +#Total column Sulphur Hexafluoride +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 185 ; + } +#GEMS Ozone +'kg kg**-1' = { + table2Version = 210 ; + indicatorOfParameter = 203 ; + } +#GEMS Total column ozone +'kg m**-2' = { + table2Version = 210 ; + indicatorOfParameter = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'~' = { + table2Version = 210 ; + indicatorOfParameter = 216 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 11 ; + } +#Aerosol type 12 mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 12 ; + } +#Aerosol type 1 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 16 ; + } +#Aerosol type 2 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 17 ; + } +#Aerosol type 3 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 18 ; + } +#Aerosol type 4 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 19 ; + } +#Aerosol type 5 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 20 ; + } +#Aerosol type 6 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 21 ; + } +#Aerosol type 7 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 22 ; + } +#Aerosol type 8 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 23 ; + } +#Aerosol type 9 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 24 ; + } +#Aerosol type 10 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 25 ; + } +#Aerosol type 11 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 26 ; + } +#Aerosol type 12 source/gain accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 42 ; + } +#Aerosol precursor mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 46 ; + } +#Aerosol small mode mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 47 ; + } +#Aerosol large mode mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 48 ; + } +#Aerosol precursor optical depth +'dimensionless' = { + table2Version = 211 ; + indicatorOfParameter = 49 ; + } +#Aerosol small mode optical depth +'dimensionless' = { + table2Version = 211 ; + indicatorOfParameter = 50 ; + } +#Aerosol large mode optical depth +'dimensionless' = { + table2Version = 211 ; + indicatorOfParameter = 51 ; + } +#Dust emission potential +'kg s**2 m**-5' = { + table2Version = 211 ; + indicatorOfParameter = 52 ; + } +#Lifting threshold speed +'m s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 53 ; + } +#Soil clay content +'%' = { + table2Version = 211 ; + indicatorOfParameter = 54 ; + } +#Carbon Dioxide +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 61 ; + } +#Methane +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 62 ; + } +#Nitrous oxide +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 63 ; + } +#Total column Carbon Dioxide +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 64 ; + } +#Total column Methane +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 65 ; + } +#Total column Nitrous oxide +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 66 ; + } +#Ocean flux of Carbon Dioxide +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 69 ; + } +#Methane Surface Fluxes +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 71 ; + } +#Wildfire flux of Carbon Dioxide +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 80 ; + } +#Wildfire flux of Carbon Monoxide +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 81 ; + } +#Wildfire flux of Methane +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 83 ; + } +#Wildfire flux of Hydrogen +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 85 ; + } +#Wildfire flux of Nitrous Oxide +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 87 ; + } +#Wildfire flux of Total Particulate Matter +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 89 ; + } +#Wildfire flux of Organic Carbon +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 90 ; + } +#Wildfire flux of Black Carbon +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 91 ; + } +#Wildfire overall flux of burnt Carbon +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 92 ; + } +#Wildfire fraction of C4 plants +'dimensionless' = { + table2Version = 211 ; + indicatorOfParameter = 93 ; + } +#Wildfire vegetation map index +'dimensionless' = { + table2Version = 211 ; + indicatorOfParameter = 94 ; + } +#Wildfire Combustion Completeness +'dimensionless' = { + table2Version = 211 ; + indicatorOfParameter = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 96 ; + } +#Wildfire fraction of area observed +'dimensionless' = { + table2Version = 211 ; + indicatorOfParameter = 97 ; + } +#Wildfire observed area +'m**2' = { + table2Version = 211 ; + indicatorOfParameter = 98 ; + } +#Wildfire radiative power +'W m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 99 ; + } +#Wildfire combustion rate +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 100 ; + } +#Nitrogen dioxide +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 121 ; + } +#Sulphur dioxide +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 122 ; + } +#Carbon monoxide +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 123 ; + } +#Formaldehyde +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 124 ; + } +#Total column Nitrogen dioxide +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 125 ; + } +#Total column Sulphur dioxide +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 126 ; + } +#Total column Carbon monoxide +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 127 ; + } +#Total column Formaldehyde +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 128 ; + } +#Nitrogen Oxides +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 129 ; + } +#Total Column Nitrogen Oxides +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 131 ; + } +#Total column GRG tracer 1 +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 133 ; + } +#Total column GRG tracer 2 +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 135 ; + } +#Total column GRG tracer 3 +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 137 ; + } +#Total column GRG tracer 4 +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 139 ; + } +#Total column GRG tracer 5 +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 141 ; + } +#Total column GRG tracer 6 +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 143 ; + } +#Total column GRG tracer 7 +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 145 ; + } +#Total column GRG tracer 8 +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 147 ; + } +#Total column GRG tracer 9 +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 149 ; + } +#Total column GRG tracer 10 +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 150 ; + } +#Surface flux Nitrogen oxides +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 151 ; + } +#Surface flux Nitrogen dioxide +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 152 ; + } +#Surface flux Sulphur dioxide +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 153 ; + } +#Surface flux Carbon monoxide +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 154 ; + } +#Surface flux Formaldehyde +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 155 ; + } +#Surface flux GEMS Ozone +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 156 ; + } +#Surface flux reactive tracer 1 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 157 ; + } +#Surface flux reactive tracer 2 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 158 ; + } +#Surface flux reactive tracer 3 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 159 ; + } +#Surface flux reactive tracer 4 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 160 ; + } +#Surface flux reactive tracer 5 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 161 ; + } +#Surface flux reactive tracer 6 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 162 ; + } +#Surface flux reactive tracer 7 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 163 ; + } +#Surface flux reactive tracer 8 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 164 ; + } +#Surface flux reactive tracer 9 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 165 ; + } +#Surface flux reactive tracer 10 +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 166 ; + } +#Radon +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 181 ; + } +#Sulphur Hexafluoride +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 182 ; + } +#Total column Radon +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 183 ; + } +#Total column Sulphur Hexafluoride +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 185 ; + } +#GEMS Ozone +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 203 ; + } +#GEMS Total column ozone +'kg m**-2' = { + table2Version = 211 ; + indicatorOfParameter = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'~' = { + table2Version = 211 ; + indicatorOfParameter = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'~' = { + table2Version = 211 ; + indicatorOfParameter = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'~' = { + table2Version = 211 ; + indicatorOfParameter = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'~' = { + table2Version = 211 ; + indicatorOfParameter = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'~' = { + table2Version = 211 ; + indicatorOfParameter = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'~' = { + table2Version = 211 ; + indicatorOfParameter = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'~' = { + table2Version = 211 ; + indicatorOfParameter = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'~' = { + table2Version = 211 ; + indicatorOfParameter = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'~' = { + table2Version = 211 ; + indicatorOfParameter = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'~' = { + table2Version = 211 ; + indicatorOfParameter = 216 ; + } +#Total precipitation observation count +'dimensionless' = { + table2Version = 220 ; + indicatorOfParameter = 228 ; + } +#Convective inhibition +'J kg**-1' = { + table2Version = 228 ; + indicatorOfParameter = 1 ; + } +#Orography +'m' = { + table2Version = 228 ; + indicatorOfParameter = 2 ; + } +#Friction velocity +'m s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 3 ; + } +#Mean temperature at 2 metres +'K' = { + table2Version = 228 ; + indicatorOfParameter = 4 ; + } +#Mean of 10 metre wind speed +'m s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 5 ; + } +#Mean total cloud cover +'(0 - 1)' = { + table2Version = 228 ; + indicatorOfParameter = 6 ; + } +#Lake depth +'m' = { + table2Version = 228 ; + indicatorOfParameter = 7 ; + } +#Lake mix-layer temperature +'K' = { + table2Version = 228 ; + indicatorOfParameter = 8 ; + } +#Lake mix-layer depth +'m' = { + table2Version = 228 ; + indicatorOfParameter = 9 ; + } +#Lake bottom temperature +'K' = { + table2Version = 228 ; + indicatorOfParameter = 10 ; + } +#Lake total layer temperature +'K' = { + table2Version = 228 ; + indicatorOfParameter = 11 ; + } +#Lake shape factor +'dimensionless' = { + table2Version = 228 ; + indicatorOfParameter = 12 ; + } +#Lake ice temperature +'K' = { + table2Version = 228 ; + indicatorOfParameter = 13 ; + } +#Lake ice depth +'m' = { + table2Version = 228 ; + indicatorOfParameter = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'m**-1' = { + table2Version = 228 ; + indicatorOfParameter = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'m**-1' = { + table2Version = 228 ; + indicatorOfParameter = 16 ; + } +#Duct base height +'m' = { + table2Version = 228 ; + indicatorOfParameter = 17 ; + } +#Trapping layer base height +'m' = { + table2Version = 228 ; + indicatorOfParameter = 18 ; + } +#Trapping layer top height +'m' = { + table2Version = 228 ; + indicatorOfParameter = 19 ; + } +#Soil Moisture +'kg m**-3' = { + table2Version = 228 ; + indicatorOfParameter = 39 ; + } +#Neutral wind at 10 m u-component +'m s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 131 ; + } +#Neutral wind at 10 m v-component +'m s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 132 ; + } +#Soil Temperature +'K' = { + table2Version = 228 ; + indicatorOfParameter = 139 ; + } +#Snow depth water equivalent +'kg m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 141 ; + } +#Snow Fall water equivalent +'kg m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 144 ; + } +#Total Cloud Cover +'%' = { + table2Version = 228 ; + indicatorOfParameter = 164 ; + } +#Field capacity +'kg m**-3' = { + table2Version = 228 ; + indicatorOfParameter = 170 ; + } +#Wilting point +'kg m**-3' = { + table2Version = 228 ; + indicatorOfParameter = 171 ; + } +#Total Precipitation +'kg m**-2' = { + table2Version = 228 ; + indicatorOfParameter = 228 ; + } +#Snow evaporation (variable resolution) +'kg m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 44 ; + } +#Snowmelt (variable resolution) +'kg m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 45 ; + } +#Solar duration (variable resolution) +'s' = { + table2Version = 230 ; + indicatorOfParameter = 46 ; + } +#Downward UV radiation at the surface (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 57 ; + } +#Photosynthetically active radiation at the surface (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 58 ; + } +#Stratiform precipitation (Large-scale precipitation) (variable resolution) +'m' = { + table2Version = 230 ; + indicatorOfParameter = 142 ; + } +#Convective precipitation (variable resolution) +'m' = { + table2Version = 230 ; + indicatorOfParameter = 143 ; + } +#Snowfall (convective + stratiform) (variable resolution) +'m of water equivalent' = { + table2Version = 230 ; + indicatorOfParameter = 144 ; + } +#Boundary layer dissipation (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 145 ; + } +#Surface sensible heat flux (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 146 ; + } +#Surface latent heat flux (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 147 ; + } +#Surface solar radiation downwards (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 169 ; + } +#Surface thermal radiation downwards (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 175 ; + } +#Surface net solar radiation (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 176 ; + } +#Surface net thermal radiation (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 177 ; + } +#Top net solar radiation (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 178 ; + } +#Top net thermal radiation (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 179 ; + } +#East-West surface stress (variable resolution) +'N m**-2 s' = { + table2Version = 230 ; + indicatorOfParameter = 180 ; + } +#North-South surface stress (variable resolution) +'N m**-2 s' = { + table2Version = 230 ; + indicatorOfParameter = 181 ; + } +#Evaporation (variable resolution) +'kg m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 182 ; + } +#Sunshine duration (variable resolution) +'s' = { + table2Version = 230 ; + indicatorOfParameter = 189 ; + } +#Longitudinal component of gravity wave stress (variable resolution) +'N m**-2 s' = { + table2Version = 230 ; + indicatorOfParameter = 195 ; + } +#Meridional component of gravity wave stress (variable resolution) +'N m**-2 s' = { + table2Version = 230 ; + indicatorOfParameter = 196 ; + } +#Gravity wave dissipation (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 197 ; + } +#Skin reservoir content (variable resolution) +'kg m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 198 ; + } +#Runoff (variable resolution) +'m' = { + table2Version = 230 ; + indicatorOfParameter = 205 ; + } +#Top net solar radiation, clear sky (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 208 ; + } +#Top net thermal radiation, clear sky (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 209 ; + } +#Surface net solar radiation, clear sky (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 210 ; + } +#Surface net thermal radiation, clear sky (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 211 ; + } +#TOA incident solar radiation (variable resolution) +'J m**-2' = { + table2Version = 230 ; + indicatorOfParameter = 212 ; + } +#Surface temperature significance +'%' = { + table2Version = 234 ; + indicatorOfParameter = 139 ; + } +#Mean sea level pressure significance +'%' = { + table2Version = 234 ; + indicatorOfParameter = 151 ; + } +#2 metre temperature significance +'%' = { + table2Version = 234 ; + indicatorOfParameter = 167 ; + } +#Total precipitation significance +'%' = { + table2Version = 234 ; + indicatorOfParameter = 228 ; + } +#U-component stokes drift +'m s**-1' = { + table2Version = 140 ; + indicatorOfParameter = 215 ; + } +#V-component stokes drift +'m s**-1' = { + table2Version = 140 ; + indicatorOfParameter = 216 ; + } +#Wildfire radiative power maximum +'W' = { + table2Version = 210 ; + indicatorOfParameter = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'kg m**-2 s**-1' = { + table2Version = 210 ; + indicatorOfParameter = 117 ; + } +#Wildfire radiative power maximum +'W' = { + table2Version = 211 ; + indicatorOfParameter = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'kg m**-2 s**-1' = { + table2Version = 211 ; + indicatorOfParameter = 117 ; + } +#V-tendency from non-orographic wave drag +'m s**-2' = { + table2Version = 228 ; + indicatorOfParameter = 134 ; + } +#U-tendency from non-orographic wave drag +'m s**-2' = { + table2Version = 228 ; + indicatorOfParameter = 136 ; + } +#100 metre U wind component +'m s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 246 ; + } +#100 metre V wind component +'m s**-1' = { + table2Version = 228 ; + indicatorOfParameter = 247 ; + } +#ASCAT first soil moisture CDF matching parameter +'m**3 m**-3' = { + table2Version = 228 ; + indicatorOfParameter = 253 ; + } +#ASCAT second soil moisture CDF matching parameter +'dimensionless' = { + table2Version = 228 ; + indicatorOfParameter = 254 ; +} diff --git a/definitions/grib1/localConcepts/edzw/name.def b/definitions/grib1/localConcepts/edzw/name.def new file mode 100644 index 000000000..b44e1423f --- /dev/null +++ b/definitions/grib1/localConcepts/edzw/name.def @@ -0,0 +1,2442 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'Pressure (S) (not reduced)' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure +'Pressure' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Pressure Reduced to MSL +'Pressure Reduced to MSL' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 102 ; + } +#Pressure Tendency (S) +'Pressure Tendency (S)' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (S) +'Geopotential (S)' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (full lev) +'Geopotential (full lev)' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 110 ; + } +#Geopotential +'Geopotential' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Geometric Height of the earths surface above sea level +'Geometric Height of the earths surface above sea level' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'Geometric Height of the layer limits above sea level(NN)' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 109 ; + } +#Total Column Integrated Ozone +'Total Column Integrated Ozone' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature (G) +'Temperature (G)' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 1 ; + } +#2m Temperature +'2m Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Temperature (AV) +'2m Temperature (AV)' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Climat. temperature, 2m Temperature +'Climat. temperature, 2m Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Temperature +'Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#Max 2m Temperature (i) +'Max 2m Temperature (i)' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#Min 2m Temperature (i) +'Min 2m Temperature (i)' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#2m Dew Point Temperature +'2m Dew Point Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Dew Point Temperature (AV) +'2m Dew Point Temperature (AV)' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Radar spectra (1) +'Radar spectra (1)' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + } +#Wave spectra (1) +'Wave spectra (1)' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'Wave spectra (2)' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'Wave spectra (3)' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind Direction (DD_10M) +'Wind Direction (DD_10M)' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind Direction (DD) +'Wind Direction (DD)' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Wind speed (SP_10M) +'Wind speed (SP_10M)' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind speed (SP) +'Wind speed (SP)' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 110 ; + } +#U component of wind +'U component of wind' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#U component of wind +'U component of wind' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'V component of wind' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#V component of wind +'V component of wind' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'Vertical Velocity (Pressure) ( omega=dp/dt )' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vertical Velocity (Geometric) (w) +'Vertical Velocity (Geometric) (w)' = { + table2Version = 2 ; + indicatorOfParameter = 40 ; + } +#Specific Humidity (S) +'Specific Humidity (S)' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 1 ; + } +#Specific Humidity (2m) +'Specific Humidity (2m)' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Specific Humidity +'Specific Humidity' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#2m Relative Humidity +'2m Relative Humidity' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Relative Humidity +'Relative Humidity' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#Total column integrated water vapour +'Total column integrated water vapour' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + indicatorOfTypeOfLevel = 1 ; + } +#Evaporation (s) +'Evaporation (s)' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Total Column-Integrated Cloud Ice +'Total Column-Integrated Cloud Ice' = { + table2Version = 2 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Precipitation rate (S) +'Total Precipitation rate (S)' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale Precipitation rate +'Large-Scale Precipitation rate' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + timeRangeIndicator = 4 ; + } +#Convective Precipitation rate +'Convective Precipitation rate' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow depth water equivalent +'Snow depth water equivalent' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow Depth +'Snow Depth' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Cloud Cover +'Total Cloud Cover' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Cloud Cover +'Convective Cloud Cover' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Cover (800 hPa - Soil) +'Cloud Cover (800 hPa - Soil)' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (400 - 800 hPa) +'Cloud Cover (400 - 800 hPa)' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (0 - 400 hPa) +'Cloud Cover (0 - 400 hPa)' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Column-Integrated Cloud Water +'Total Column-Integrated Cloud Water' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'Convective Snowfall rate water equivalent (s)' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale snowfall rate water equivalent (s) +'Large-Scale snowfall rate water equivalent (s)' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Land Cover (1=land, 0=sea) +'Land Cover (1=land, 0=sea)' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + indicatorOfTypeOfLevel = 1 ; + } +#Surface Roughness length Surface Roughness +'Surface Roughness length Surface Roughness' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'Albedo (in short-wave)' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'Albedo (in short-wave)' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'Soil Temperature ( 36 cm depth, vv=0h)' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 36 ; + } +#Soil Temperature (41 cm depth) +'Soil Temperature (41 cm depth)' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 41 ; + } +#Soil Temperature +'Soil Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 9 ; + } +#Soil Temperature +'Soil Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#Column-integrated Soil Moisture +'Column-integrated Soil Moisture' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 190 ; + topLevel = 100 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'Column-integrated Soil Moisture (1) 0 -10 cm' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + bottomLevel = 10 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'Column-integrated Soil Moisture (2) 10-100cm' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#Plant cover +'Plant cover' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + indicatorOfTypeOfLevel = 1 ; + } +#Water Runoff (10-100) +'Water Runoff (10-100)' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + timeRangeIndicator = 4 ; + topLevel = 10 ; + bottomLevel = 100 ; + } +#Water Runoff (10-190) +'Water Runoff (10-190)' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + timeRangeIndicator = 4 ; + topLevel = 10 ; + bottomLevel = 190 ; + } +#Water Runoff (s) +'Water Runoff (s)' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + timeRangeIndicator = 4 ; + topLevel = 0 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'Sea Ice Cover ( 0= free, 1=cover)' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Thickness +'sea Ice Thickness' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + indicatorOfTypeOfLevel = 1 ; + } +#Significant height of combined wind waves and swell +'Significant height of combined wind waves and swell' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Direction of wind waves +'Direction of wind waves' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'Significant height of wind waves' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'Mean period of wind waves' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'Direction of swell waves' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'Significant height of swell waves' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'Mean period of swell waves' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Net short wave radiation flux (m) (at the surface) +'Net short wave radiation flux (m) (at the surface)' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'Net short wave radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (at the surface) +'Net long wave radiation flux (m) (at the surface)' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'Net long wave radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net short wave radiation flux (m) (on the model top) +'Net short wave radiation flux (m) (on the model top)' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'Net short wave radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'Net long wave radiation flux (m) (on the model top)' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'Net long wave radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Latent Heat Net Flux (m) +'Latent Heat Net Flux (m)' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Sensible Heat Net Flux (m) +'Sensible Heat Net Flux (m)' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, U-Component (m) +'Momentum Flux, U-Component (m)' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, V-Component (m) +'Momentum Flux, V-Component (m)' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation (m) (at the surface) +'Photosynthetically active radiation (m) (at the surface)' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation +'Photosynthetically active radiation' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Solar radiation heating rate +'Solar radiation heating rate' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + indicatorOfTypeOfLevel = 110 ; + } +#Thermal radiation heating rate +'Thermal radiation heating rate' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + indicatorOfTypeOfLevel = 110 ; + } +#Latent heat flux from bare soil +'Latent heat flux from bare soil' = { + table2Version = 201 ; + indicatorOfParameter = 18 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Latent heat flux from plants +'Latent heat flux from plants' = { + table2Version = 201 ; + indicatorOfParameter = 19 ; + indicatorOfTypeOfLevel = 111 ; + timeRangeIndicator = 3 ; + } +#Sunshine +'Sunshine' = { + table2Version = 201 ; + indicatorOfParameter = 20 ; + timeRangeIndicator = 4 ; + } +#Stomatal Resistance +'Stomatal Resistance' = { + table2Version = 201 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Cloud cover +'Cloud cover' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#Non-Convective Cloud Cover, grid scale +'Non-Convective Cloud Cover, grid scale' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Mixing Ratio +'Cloud Mixing Ratio' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Ice Mixing Ratio +'Cloud Ice Mixing Ratio' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 110 ; + } +#Rain mixing ratio +'Rain mixing ratio' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + indicatorOfTypeOfLevel = 110 ; + } +#Snow mixing ratio +'Snow mixing ratio' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated rain +'Total column integrated rain' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total column integrated snow +'Total column integrated snow' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + indicatorOfTypeOfLevel = 1 ; + } +#Grauple +'Grauple' = { + table2Version = 201 ; + indicatorOfParameter = 39 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated grauple +'Total column integrated grauple' = { + table2Version = 201 ; + indicatorOfParameter = 40 ; + } +#Total Column integrated water (all components incl. precipitation) +'Total Column integrated water (all components incl. precipitation)' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertical integral of divergence of total water content (s) +'vertical integral of divergence of total water content (s)' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + indicatorOfTypeOfLevel = 1 ; + } +#subgrid scale cloud water +'subgrid scale cloud water' = { + table2Version = 201 ; + indicatorOfParameter = 43 ; + indicatorOfTypeOfLevel = 110 ; + } +#subgridscale cloud ice +'subgridscale cloud ice' = { + table2Version = 201 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#cloud cover CH (0..8) +'cloud cover CH (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'cloud cover CM (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'cloud cover CL (0..8)' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#cloud base above msl, shallow convection +'cloud base above msl, shallow convection' = { + table2Version = 201 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 2 ; + } +#cloud top above msl, shallow convection +'cloud top above msl, shallow convection' = { + table2Version = 201 ; + indicatorOfParameter = 59 ; + indicatorOfTypeOfLevel = 3 ; + } +#specific cloud water content, convective cloud +'specific cloud water content, convective cloud' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 110 ; + } +#Height of Convective Cloud Base (i) +'Height of Convective Cloud Base (i)' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 2 ; + } +#Height of Convective Cloud Top (i) +'Height of Convective Cloud Top (i)' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'base index (vertical level) of main convective cloud (i)' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'top index (vertical level) of main convective cloud (i)' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to convection +'Temperature tendency due to convection' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to convection +'Specific humitiy tendency due to convection' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 110 ; + } +#zonal wind tendency due to convection +'zonal wind tendency due to convection' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to convection +'meridional wind tendency due to convection' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 110 ; + } +#height of top of dry convection +'height of top of dry convection' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'height of 0 degree celsius level code 0,3,6 ?' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 4 ; + } +#Height of snow fall limit +'Height of snow fall limit' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 4 ; + } +#Tendency of specific cloud liquid water content due to conversion +'Tendency of specific cloud liquid water content due to conversion' = { + table2Version = 201 ; + indicatorOfParameter = 88 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud ice content due to convection +'tendency of specific cloud ice content due to convection' = { + table2Version = 201 ; + indicatorOfParameter = 89 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'Specific content of precipitation particles (needed for water loadin)g' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 110 ; + } +#Large scale rain rate +'Large scale rain rate' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale snowfall rate water equivalent +'Large scale snowfall rate water equivalent' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale rain rate (s) +'Large scale rain rate (s)' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Convective rain rate +'Convective rain rate' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective snowfall rate water equivalent +'Convective snowfall rate water equivalent' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective rain rate (s) +'Convective rain rate (s)' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#rain amount, grid-scale plus convective +'rain amount, grid-scale plus convective' = { + table2Version = 201 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#snow amount, grid-scale plus convective +'snow amount, grid-scale plus convective' = { + table2Version = 201 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to grid scale precipation +'Temperature tendency due to grid scale precipation' = { + table2Version = 201 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to grid scale precipitation +'Specific humitiy tendency due to grid scale precipitation' = { + table2Version = 201 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'tendency of specific cloud liquid water content due to grid scale precipitation' = { + table2Version = 201 ; + indicatorOfParameter = 127 ; + indicatorOfTypeOfLevel = 110 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'Fresh snow factor (weighting function for albedo indicating freshness of snow)' = { + table2Version = 201 ; + indicatorOfParameter = 129 ; + indicatorOfTypeOfLevel = 1 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'tendency of specific cloud ice content due to grid scale precipitation' = { + table2Version = 201 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 110 ; + } +#Graupel (snow pellets) precipitation rate +'Graupel (snow pellets) precipitation rate' = { + table2Version = 201 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 1 ; + } +#Graupel (snow pellets) precipitation rate +'Graupel (snow pellets) precipitation rate' = { + table2Version = 201 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow density +'Snow density' = { + table2Version = 201 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure perturbation +'Pressure perturbation' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + indicatorOfTypeOfLevel = 110 ; + } +#supercell detection index 1 (rot. up+down drafts) +'supercell detection index 1 (rot. up+down drafts)' = { + table2Version = 201 ; + indicatorOfParameter = 141 ; + indicatorOfTypeOfLevel = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'supercell detection index 2 (only rot. up drafts)' = { + table2Version = 201 ; + indicatorOfParameter = 142 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, most unstable +'Convective Available Potential Energy, most unstable' = { + table2Version = 201 ; + indicatorOfParameter = 143 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, most unstable +'Convective Inhibition, most unstable' = { + table2Version = 201 ; + indicatorOfParameter = 144 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, mean layer +'Convective Available Potential Energy, mean layer' = { + table2Version = 201 ; + indicatorOfParameter = 145 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, mean layer +'Convective Inhibition, mean layer' = { + table2Version = 201 ; + indicatorOfParameter = 146 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective turbulent kinetic enery +'Convective turbulent kinetic enery' = { + table2Version = 201 ; + indicatorOfParameter = 147 ; + } +#Tendency of turbulent kinetic energy +'Tendency of turbulent kinetic energy' = { + table2Version = 201 ; + indicatorOfParameter = 148 ; + indicatorOfTypeOfLevel = 109 ; + } +#Kinetic Energy +'Kinetic Energy' = { + table2Version = 201 ; + indicatorOfParameter = 149 ; + indicatorOfTypeOfLevel = 110 ; + } +#Turbulent Kinetic Energy +'Turbulent Kinetic Energy' = { + table2Version = 201 ; + indicatorOfParameter = 152 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusioncoefficient for momentum +'Turbulent diffusioncoefficient for momentum' = { + table2Version = 201 ; + indicatorOfParameter = 153 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'Turbulent diffusion coefficient for heat (and moisture)' = { + table2Version = 201 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent transfer coefficient for impulse +'Turbulent transfer coefficient for impulse' = { + table2Version = 201 ; + indicatorOfParameter = 170 ; + indicatorOfTypeOfLevel = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'Turbulent transfer coefficient for heat (and Moisture)' = { + table2Version = 201 ; + indicatorOfParameter = 171 ; + indicatorOfTypeOfLevel = 1 ; + } +#mixed layer depth +'mixed layer depth' = { + table2Version = 201 ; + indicatorOfParameter = 173 ; + indicatorOfTypeOfLevel = 1 ; + } +#maximum Wind 10m +'maximum Wind 10m' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + timeRangeIndicator = 2 ; + } +#Air concentration of Ruthenium 103 +'Air concentration of Ruthenium 103' = { + table2Version = 201 ; + indicatorOfParameter = 194 ; + indicatorOfTypeOfLevel = 100 ; + } +#Soil Temperature (multilayers) +'Soil Temperature (multilayers)' = { + table2Version = 201 ; + indicatorOfParameter = 197 ; + indicatorOfTypeOfLevel = 111 ; + } +#Column-integrated Soil Moisture (multilayers) +'Column-integrated Soil Moisture (multilayers)' = { + table2Version = 201 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 111 ; + } +#soil ice content (multilayers) +'soil ice content (multilayers)' = { + table2Version = 201 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 111 ; + } +#Plant Canopy Surface Water +'Plant Canopy Surface Water' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow temperature (top of snow) +'Snow temperature (top of snow)' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#Minimal Stomatal Resistance +'Minimal Stomatal Resistance' = { + table2Version = 201 ; + indicatorOfParameter = 212 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Temperature +'sea Ice Temperature' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'Base reflectivity' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'Base reflectivity' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 110 ; + } +#Base reflectivity (cmax) +'Base reflectivity (cmax)' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 200 ; + } +#unknown +'unknown' = { + table2Version = 201 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 110 ; + } +#Effective transmissivity of solar radiation +'Effective transmissivity of solar radiation' = { + table2Version = 201 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 110 ; + } +#sum of contributions to evaporation +'sum of contributions to evaporation' = { + table2Version = 201 ; + indicatorOfParameter = 236 ; + } +#total transpiration from all soil layers +'total transpiration from all soil layers' = { + table2Version = 201 ; + indicatorOfParameter = 237 ; + } +#total forcing at soil surface +'total forcing at soil surface' = { + table2Version = 201 ; + indicatorOfParameter = 238 ; + } +#residuum of soil moisture +'residuum of soil moisture' = { + table2Version = 201 ; + indicatorOfParameter = 239 ; + } +#Massflux at convective cloud base +'Massflux at convective cloud base' = { + table2Version = 201 ; + indicatorOfParameter = 240 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy +'Convective Available Potential Energy' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + indicatorOfTypeOfLevel = 1 ; + } +#moisture convergence for Kuo-type closure +'moisture convergence for Kuo-type closure' = { + table2Version = 201 ; + indicatorOfParameter = 243 ; + indicatorOfTypeOfLevel = 1 ; + } +#total wave direction +'total wave direction' = { + table2Version = 202 ; + indicatorOfParameter = 4 ; + } +#wind sea mean period +'wind sea mean period' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 102 ; + } +#wind sea peak period +'wind sea peak period' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + } +#swell mean period +'swell mean period' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 102 ; + } +#swell peak period +'swell peak period' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + } +#total wave peak period +'total wave peak period' = { + table2Version = 202 ; + indicatorOfParameter = 9 ; + } +#total wave mean period +'total wave mean period' = { + table2Version = 202 ; + indicatorOfParameter = 10 ; + } +#total Tm1 period +'total Tm1 period' = { + table2Version = 202 ; + indicatorOfParameter = 17 ; + } +#total Tm2 period +'total Tm2 period' = { + table2Version = 202 ; + indicatorOfParameter = 18 ; + } +#total directional spread +'total directional spread' = { + table2Version = 202 ; + indicatorOfParameter = 19 ; + } +#analysis error(standard deviation), geopotential(gpm) +'analysis error(standard deviation), geopotential(gpm)' = { + table2Version = 202 ; + indicatorOfParameter = 40 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), u-comp. of wind +'analysis error(standard deviation), u-comp. of wind' = { + table2Version = 202 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), v-comp. of wind +'analysis error(standard deviation), v-comp. of wind' = { + table2Version = 202 ; + indicatorOfParameter = 42 ; + level = 100 ; + } +#zonal wind tendency due to subgrid scale oro. +'zonal wind tendency due to subgrid scale oro.' = { + table2Version = 202 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to subgrid scale oro. +'meridional wind tendency due to subgrid scale oro.' = { + table2Version = 202 ; + indicatorOfParameter = 45 ; + indicatorOfTypeOfLevel = 110 ; + } +#Standard deviation of sub-grid scale orography +'Standard deviation of sub-grid scale orography' = { + table2Version = 202 ; + indicatorOfParameter = 46 ; + indicatorOfTypeOfLevel = 1 ; + } +#Anisotropy of sub-gridscale orography +'Anisotropy of sub-gridscale orography' = { + table2Version = 202 ; + indicatorOfParameter = 47 ; + indicatorOfTypeOfLevel = 1 ; + } +#Angle of sub-gridscale orography +'Angle of sub-gridscale orography' = { + table2Version = 202 ; + indicatorOfParameter = 48 ; + indicatorOfTypeOfLevel = 1 ; + } +#Slope of sub-gridscale orography +'Slope of sub-gridscale orography' = { + table2Version = 202 ; + indicatorOfParameter = 49 ; + indicatorOfTypeOfLevel = 1 ; + } +#surface emissivity +'surface emissivity' = { + table2Version = 202 ; + indicatorOfParameter = 56 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + timeRangeIndicator = 0 ; + } +#Soil Type +'Soil Type' = { + table2Version = 202 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + } +#Leaf area index +'Leaf area index' = { + table2Version = 202 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#root depth of vegetation +'root depth of vegetation' = { + table2Version = 202 ; + indicatorOfParameter = 62 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of ozone maximum (climatological) +'height of ozone maximum (climatological)' = { + table2Version = 202 ; + indicatorOfParameter = 64 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertically integrated ozone content (climatological) +'vertically integrated ozone content (climatological)' = { + table2Version = 202 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the vegetation phase +'Plant covering degree in the vegetation phase' = { + table2Version = 202 ; + indicatorOfParameter = 67 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the quiescent phas +'Plant covering degree in the quiescent phas' = { + table2Version = 202 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 1 ; + } +#Max Leaf area index +'Max Leaf area index' = { + table2Version = 202 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 1 ; + } +#Min Leaf area index +'Min Leaf area index' = { + table2Version = 202 ; + indicatorOfParameter = 70 ; + indicatorOfTypeOfLevel = 1 ; + } +#Orographie + Land-Meer-Verteilung +'Orographie + Land-Meer-Verteilung' = { + table2Version = 202 ; + indicatorOfParameter = 71 ; + } +#variance of soil moisture content (0-10) +'variance of soil moisture content (0-10)' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + topLevel = 0 ; + } +#variance of soil moisture content (10-100) +'variance of soil moisture content (10-100)' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#evergreen forest +'evergreen forest' = { + table2Version = 202 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#deciduous forest +'deciduous forest' = { + table2Version = 202 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#normalized differential vegetation index +'normalized differential vegetation index' = { + table2Version = 202 ; + indicatorOfParameter = 77 ; + timeRangeIndicator = 3 ; + } +#normalized differential vegetation index (NDVI) +'normalized differential vegetation index (NDVI)' = { + table2Version = 202 ; + indicatorOfParameter = 78 ; + timeRangeIndicator = 3 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Total sulfate aerosol +'Total sulfate aerosol' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + } +#Total sulfate aerosol (12M) +'Total sulfate aerosol (12M)' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + timeRangeIndicator = 3 ; + } +#Total soil dust aerosol +'Total soil dust aerosol' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + } +#Total soil dust aerosol (12M) +'Total soil dust aerosol (12M)' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + timeRangeIndicator = 3 ; + } +#Organic aerosol +'Organic aerosol' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + } +#Organic aerosol (12M) +'Organic aerosol (12M)' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + timeRangeIndicator = 3 ; + } +#Black carbon aerosol +'Black carbon aerosol' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + } +#Black carbon aerosol (12M) +'Black carbon aerosol (12M)' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + timeRangeIndicator = 3 ; + } +#Sea salt aerosol +'Sea salt aerosol' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + } +#Sea salt aerosol (12M) +'Sea salt aerosol (12M)' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + timeRangeIndicator = 3 ; + } +#tendency of specific humidity +'tendency of specific humidity' = { + table2Version = 202 ; + indicatorOfParameter = 104 ; + indicatorOfTypeOfLevel = 110 ; + } +#water vapor flux +'water vapor flux' = { + table2Version = 202 ; + indicatorOfParameter = 105 ; + indicatorOfTypeOfLevel = 1 ; + } +#Coriolis parameter +'Coriolis parameter' = { + table2Version = 202 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical latitude +'geographical latitude' = { + table2Version = 202 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical longitude +'geographical longitude' = { + table2Version = 202 ; + indicatorOfParameter = 115 ; + indicatorOfTypeOfLevel = 1 ; + } +#Friction velocity +'Friction velocity' = { + table2Version = 202 ; + indicatorOfParameter = 120 ; + indicatorOfTypeOfLevel = 110 ; + } +#Delay of the GPS signal trough the (total) atm. +'Delay of the GPS signal trough the (total) atm.' = { + table2Version = 202 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'Delay of the GPS signal trough wet atmos.' = { + table2Version = 202 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'Delay of the GPS signal trough dry atmos.' = { + table2Version = 202 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ozone Mixing Ratio +'Ozone Mixing Ratio' = { + table2Version = 202 ; + indicatorOfParameter = 180 ; + indicatorOfTypeOfLevel = 110 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'Air concentration of Ruthenium 103 (Ru103- concentration)' = { + table2Version = 202 ; + indicatorOfParameter = 194 ; + } +#Ru103-dry deposition +'Ru103-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 195 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ru103-wet deposition +'Ru103-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Strontium 90 +'Air concentration of Strontium 90' = { + table2Version = 202 ; + indicatorOfParameter = 197 ; + } +#Sr90-dry deposition +'Sr90-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 1 ; + } +#Sr90-wet deposition +'Sr90-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-concentration +'I131-concentration' = { + table2Version = 202 ; + indicatorOfParameter = 200 ; + } +#I131-dry deposition +'I131-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 201 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-wet deposition +'I131-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 202 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-concentration +'Cs137-concentration' = { + table2Version = 202 ; + indicatorOfParameter = 203 ; + } +#Cs137-dry deposition +'Cs137-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-wet deposition +'Cs137-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 205 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'Air concentration of Tellurium 132 (Te132-concentration)' = { + table2Version = 202 ; + indicatorOfParameter = 206 ; + } +#Te132-dry deposition +'Te132-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 207 ; + indicatorOfTypeOfLevel = 1 ; + } +#Te132-wet deposition +'Te132-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 208 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'Air concentration of Zirconium 95 (Zr95-concentration)' = { + table2Version = 202 ; + indicatorOfParameter = 209 ; + } +#Zr95-dry deposition +'Zr95-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 210 ; + indicatorOfTypeOfLevel = 1 ; + } +#Zr95-wet deposition +'Zr95-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 211 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'Air concentration of Krypton 85 (Kr85-concentration)' = { + table2Version = 202 ; + indicatorOfParameter = 212 ; + } +#Kr85-dry deposition +'Kr85-dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 213 ; + indicatorOfTypeOfLevel = 1 ; + } +#Kr85-wet deposition +'Kr85-wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 214 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - concentration +'TRACER - concentration' = { + table2Version = 202 ; + indicatorOfParameter = 215 ; + } +#TRACER - dry deposition +'TRACER - dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 216 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - wet deposition +'TRACER - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 217 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'Air concentration of Xenon 133 (Xe133 - concentration)' = { + table2Version = 202 ; + indicatorOfParameter = 218 ; + } +#Xe133 - dry deposition +'Xe133 - dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 219 ; + indicatorOfTypeOfLevel = 1 ; + } +#Xe133 - wet deposition +'Xe133 - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 220 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - concentration +'I131g - concentration' = { + table2Version = 202 ; + indicatorOfParameter = 221 ; + } +#Xe133 - wet deposition +'Xe133 - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 222 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - wet deposition +'I131g - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 223 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - concentration +'I131o - concentration' = { + table2Version = 202 ; + indicatorOfParameter = 224 ; + } +#I131o - dry deposition +'I131o - dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 225 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - wet deposition +'I131o - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 226 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Barium 40 +'Air concentration of Barium 40' = { + table2Version = 202 ; + indicatorOfParameter = 227 ; + } +#Ba140 - dry deposition +'Ba140 - dry deposition' = { + table2Version = 202 ; + indicatorOfParameter = 228 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ba140 - wet deposition +'Ba140 - wet deposition' = { + table2Version = 202 ; + indicatorOfParameter = 229 ; + indicatorOfTypeOfLevel = 1 ; + } +#u-momentum flux due to SSO-effects +'u-momentum flux due to SSO-effects' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#u-momentum flux due to SSO-effects +'u-momentum flux due to SSO-effects' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#v-momentum flux due to SSO-effects +'v-momentum flux due to SSO-effects' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#v-momentum flux due to SSO-effects +'v-momentum flux due to SSO-effects' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Gravity wave dissipation (vertical integral) +'Gravity wave dissipation (vertical integral)' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Gravity wave dissipation (vertical integral) +'Gravity wave dissipation (vertical integral)' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'UV_Index_Maximum_W UV_Index clouded (W), daily maximum' = { + table2Version = 202 ; + indicatorOfParameter = 248 ; + indicatorOfTypeOfLevel = 1 ; + } +#wind shear +'wind shear' = { + table2Version = 203 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#storm relative helicity +'storm relative helicity' = { + table2Version = 203 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#absolute vorticity advection +'absolute vorticity advection' = { + table2Version = 203 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 100 ; + } +#NiederschlagBew.-ArtKombination Niederschl.-Bew.-Blautherm. (283..407) +'NiederschlagBew.-ArtKombination Niederschl.-Bew.-Blautherm. (283..407)' = { + table2Version = 203 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konvektions-U-GrenzeHoehe der Konvektionsuntergrenze ueber Grund +'Konvektions-U-GrenzeHoehe der Konvektionsuntergrenze ueber Grund' = { + table2Version = 203 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn' = { + table2Version = 203 ; + indicatorOfParameter = 94 ; + indicatorOfTypeOfLevel = 1 ; + } +#weather interpretation (WMO) +'weather interpretation (WMO)' = { + table2Version = 203 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 1 ; + } +#geostrophische Vorticityadvektion +'geostrophische Vorticityadvektion' = { + table2Version = 203 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 100 ; + } +#Geo Temperatur Adv geostrophische Schichtdickenadvektion +'Geo Temperatur Adv geostrophische Schichtdickenadvektion' = { + table2Version = 203 ; + indicatorOfParameter = 103 ; + indicatorOfTypeOfLevel = 101 ; + } +#Schichtdicken-Advektion +'Schichtdicken-Advektion' = { + table2Version = 203 ; + indicatorOfParameter = 107 ; + indicatorOfTypeOfLevel = 101 ; + } +#Winddivergenz +'Winddivergenz' = { + table2Version = 203 ; + indicatorOfParameter = 109 ; + indicatorOfTypeOfLevel = 100 ; + } +#Qn-Vektor Q isother-senkr-KompQn ,Komp. Q-Vektor senkrecht zu den Isothermen +'Qn-Vektor Q isother-senkr-KompQn ,Komp. Q-Vektor senkrecht zu den Isothermen' = { + table2Version = 203 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 100 ; + } +#Isentrope potentielle Vorticity +'Isentrope potentielle Vorticity' = { + table2Version = 203 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 100 ; + } +#XIPV Wind X-Komp Wind X-Komponente auf isentropen Flaechen +'XIPV Wind X-Komp Wind X-Komponente auf isentropen Flaechen' = { + table2Version = 203 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 100 ; + } +#YIPV Wind Y-Komp Wind Y-Komponente auf isentropen Flaechen +'YIPV Wind Y-Komp Wind Y-Komponente auf isentropen Flaechen' = { + table2Version = 203 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 100 ; + } +#Druck einer isentropen Flaeche +'Druck einer isentropen Flaeche' = { + table2Version = 203 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 100 ; + } +#KO index +'KO index' = { + table2Version = 203 ; + indicatorOfParameter = 140 ; + indicatorOfTypeOfLevel = 1 ; + } +#Aequivalentpotentielle Temperatur +'Aequivalentpotentielle Temperatur' = { + table2Version = 203 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 100 ; + } +#Ceiling +'Ceiling' = { + table2Version = 203 ; + indicatorOfParameter = 157 ; + indicatorOfTypeOfLevel = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'Icing Grade (1=LGT,2=MOD,3=SEV)' = { + table2Version = 203 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 100 ; + } +#modified cloud depth for media +'modified cloud depth for media' = { + table2Version = 203 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#modified cloud cover for media +'modified cloud cover for media' = { + table2Version = 203 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL' = { + table2Version = 204 ; + indicatorOfParameter = 1 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL' = { + table2Version = 204 ; + indicatorOfParameter = 2 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'Monthly Mean of RMS of difference FG-AN of u-component of wind' = { + table2Version = 204 ; + indicatorOfParameter = 3 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'Monthly Mean of RMS of difference IA-AN of u-component of wind' = { + table2Version = 204 ; + indicatorOfParameter = 4 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'Monthly Mean of RMS of difference FG-AN of v-component of wind' = { + table2Version = 204 ; + indicatorOfParameter = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'Monthly Mean of RMS of difference IA-AN of v-component of wind' = { + table2Version = 204 ; + indicatorOfParameter = 6 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'Monthly Mean of RMS of difference FG-AN of geopotential' = { + table2Version = 204 ; + indicatorOfParameter = 7 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'Monthly Mean of RMS of difference IA-AN of geopotential' = { + table2Version = 204 ; + indicatorOfParameter = 8 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'Monthly Mean of RMS of difference FG-AN of relative humidity' = { + table2Version = 204 ; + indicatorOfParameter = 9 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'Monthly Mean of RMS of difference IA-AN of relative humidity' = { + table2Version = 204 ; + indicatorOfParameter = 10 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'Monthly Mean of RMS of difference FG-AN of temperature' = { + table2Version = 204 ; + indicatorOfParameter = 11 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'Monthly Mean of RMS of difference IA-AN of temperature' = { + table2Version = 204 ; + indicatorOfParameter = 12 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure)' = { + table2Version = 204 ; + indicatorOfParameter = 13 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure)' = { + table2Version = 204 ; + indicatorOfParameter = 14 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'Monthly Mean of RMS of difference FG-AN of kinetic energy' = { + table2Version = 204 ; + indicatorOfParameter = 15 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'Monthly Mean of RMS of difference IA-AN of kinetic energy' = { + table2Version = 204 ; + indicatorOfParameter = 16 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 4 ; + } +#smoothed forecast, temperature +'smoothed forecast, temperature' = { + table2Version = 206 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, maximum temp. +'smoothed forecast, maximum temp.' = { + table2Version = 206 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, minimum temp. +'smoothed forecast, minimum temp.' = { + table2Version = 206 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, dew point temp. +'smoothed forecast, dew point temp.' = { + table2Version = 206 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, u comp. of wind +'smoothed forecast, u comp. of wind' = { + table2Version = 206 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, v comp. of wind +'smoothed forecast, v comp. of wind' = { + table2Version = 206 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, total precipitation rate +'smoothed forecast, total precipitation rate' = { + table2Version = 206 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, total cloud cover +'smoothed forecast, total cloud cover' = { + table2Version = 206 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover low +'smoothed forecast, cloud cover low' = { + table2Version = 206 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover medium +'smoothed forecast, cloud cover medium' = { + table2Version = 206 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover high +'smoothed forecast, cloud cover high' = { + table2Version = 206 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'smoothed forecast, large-scale snowfall rate w.e.' = { + table2Version = 206 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, soil temperature +'smoothed forecast, soil temperature' = { + table2Version = 206 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#smoothed forecast, wind speed (gust) +'smoothed forecast, wind speed (gust)' = { + table2Version = 206 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#calibrated forecast, total precipitation rate +'calibrated forecast, total precipitation rate' = { + table2Version = 207 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'calibrated forecast, large-scale snowfall rate w.e.' = { + table2Version = 207 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, wind speed (gust) +'calibrated forecast, wind speed (gust)' = { + table2Version = 207 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; +} diff --git a/definitions/grib1/localConcepts/edzw/paramId.def b/definitions/grib1/localConcepts/edzw/paramId.def new file mode 100644 index 000000000..87af4a8d0 --- /dev/null +++ b/definitions/grib1/localConcepts/edzw/paramId.def @@ -0,0 +1,2442 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'500000' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure +'500001' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Pressure Reduced to MSL +'500002' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 102 ; + } +#Pressure Tendency (S) +'500003' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (S) +'500004' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (full lev) +'500005' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 110 ; + } +#Geopotential +'500006' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Geometric Height of the earths surface above sea level +'500007' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'500008' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 109 ; + } +#Total Column Integrated Ozone +'500009' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature (G) +'500010' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 1 ; + } +#2m Temperature +'500011' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Temperature (AV) +'500012' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Climat. temperature, 2m Temperature +'500013' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Temperature +'500014' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#Max 2m Temperature (i) +'500015' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#Min 2m Temperature (i) +'500016' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#2m Dew Point Temperature +'500017' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Dew Point Temperature (AV) +'500018' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Radar spectra (1) +'500019' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + } +#Wave spectra (1) +'500020' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'500021' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'500022' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind Direction (DD_10M) +'500023' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind Direction (DD) +'500024' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Wind speed (SP_10M) +'500025' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind speed (SP) +'500026' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 110 ; + } +#U component of wind +'500027' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#U component of wind +'500028' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'500029' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#V component of wind +'500030' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'500031' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vertical Velocity (Geometric) (w) +'500032' = { + table2Version = 2 ; + indicatorOfParameter = 40 ; + } +#Specific Humidity (S) +'500033' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 1 ; + } +#Specific Humidity (2m) +'500034' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Specific Humidity +'500035' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#2m Relative Humidity +'500036' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Relative Humidity +'500037' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#Total column integrated water vapour +'500038' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + indicatorOfTypeOfLevel = 1 ; + } +#Evaporation (s) +'500039' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Total Column-Integrated Cloud Ice +'500040' = { + table2Version = 2 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Precipitation rate (S) +'500041' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale Precipitation rate +'500042' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + timeRangeIndicator = 4 ; + } +#Convective Precipitation rate +'500043' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow depth water equivalent +'500044' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow Depth +'500045' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Cloud Cover +'500046' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Cloud Cover +'500047' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Cover (800 hPa - Soil) +'500048' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (400 - 800 hPa) +'500049' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (0 - 400 hPa) +'500050' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Column-Integrated Cloud Water +'500051' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'500052' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale snowfall rate water equivalent (s) +'500053' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Land Cover (1=land, 0=sea) +'500054' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + indicatorOfTypeOfLevel = 1 ; + } +#Surface Roughness length Surface Roughness +'500055' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'500056' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'500057' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'500058' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 36 ; + } +#Soil Temperature (41 cm depth) +'500059' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 41 ; + } +#Soil Temperature +'500060' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 9 ; + } +#Soil Temperature +'500061' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#Column-integrated Soil Moisture +'500062' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 190 ; + topLevel = 100 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'500063' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + topLevel = 0 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'500064' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#Plant cover +'500065' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + indicatorOfTypeOfLevel = 1 ; + } +#Water Runoff (10-100) +'500066' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + timeRangeIndicator = 4 ; + } +#Water Runoff (10-190) +'500067' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 190 ; + topLevel = 10 ; + timeRangeIndicator = 4 ; + } +#Water Runoff (s) +'500068' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + timeRangeIndicator = 4 ; + bottomLevel = 10 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'500069' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Thickness +'500070' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + indicatorOfTypeOfLevel = 1 ; + } +#Significant height of combined wind waves and swell +'500071' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Direction of wind waves +'500072' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'500073' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'500074' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'500075' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'500076' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'500077' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Net short wave radiation flux (m) (at the surface) +'500078' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'500079' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (at the surface) +'500080' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'500081' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net short wave radiation flux (m) (on the model top) +'500082' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'500083' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'500084' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'500085' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Latent Heat Net Flux (m) +'500086' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Sensible Heat Net Flux (m) +'500087' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, U-Component (m) +'500088' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, V-Component (m) +'500089' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation (m) (at the surface) +'500090' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation +'500091' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Solar radiation heating rate +'500092' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + indicatorOfTypeOfLevel = 110 ; + } +#Thermal radiation heating rate +'500093' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + indicatorOfTypeOfLevel = 110 ; + } +#Latent heat flux from bare soil +'500094' = { + table2Version = 201 ; + indicatorOfParameter = 18 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Latent heat flux from plants +'500095' = { + table2Version = 201 ; + indicatorOfParameter = 19 ; + indicatorOfTypeOfLevel = 111 ; + timeRangeIndicator = 3 ; + } +#Sunshine +'500096' = { + table2Version = 201 ; + indicatorOfParameter = 20 ; + timeRangeIndicator = 4 ; + } +#Stomatal Resistance +'500097' = { + table2Version = 201 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Cloud cover +'500098' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#Non-Convective Cloud Cover, grid scale +'500099' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Mixing Ratio +'500100' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Ice Mixing Ratio +'500101' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 110 ; + } +#Rain mixing ratio +'500102' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + indicatorOfTypeOfLevel = 110 ; + } +#Snow mixing ratio +'500103' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated rain +'500104' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total column integrated snow +'500105' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + indicatorOfTypeOfLevel = 1 ; + } +#Grauple +'500106' = { + table2Version = 201 ; + indicatorOfParameter = 39 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated grauple +'500107' = { + table2Version = 201 ; + indicatorOfParameter = 40 ; + } +#Total Column integrated water (all components incl. precipitation) +'500108' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertical integral of divergence of total water content (s) +'500109' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + indicatorOfTypeOfLevel = 1 ; + } +#subgrid scale cloud water +'500110' = { + table2Version = 201 ; + indicatorOfParameter = 43 ; + indicatorOfTypeOfLevel = 110 ; + } +#subgridscale cloud ice +'500111' = { + table2Version = 201 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#cloud cover CH (0..8) +'500112' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'500113' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'500114' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#cloud base above msl, shallow convection +'500115' = { + table2Version = 201 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 2 ; + } +#cloud top above msl, shallow convection +'500116' = { + table2Version = 201 ; + indicatorOfParameter = 59 ; + indicatorOfTypeOfLevel = 3 ; + } +#specific cloud water content, convective cloud +'500117' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 110 ; + } +#Height of Convective Cloud Base (i) +'500118' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 2 ; + } +#Height of Convective Cloud Top (i) +'500119' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'500120' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'500121' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to convection +'500122' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to convection +'500123' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 110 ; + } +#zonal wind tendency due to convection +'500124' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to convection +'500125' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 110 ; + } +#height of top of dry convection +'500126' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'500127' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 4 ; + } +#Height of snow fall limit +'500128' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 4 ; + } +#Tendency of specific cloud liquid water content due to conversion +'500129' = { + table2Version = 201 ; + indicatorOfParameter = 88 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud ice content due to convection +'500130' = { + table2Version = 201 ; + indicatorOfParameter = 89 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'500131' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 110 ; + } +#Large scale rain rate +'500132' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale snowfall rate water equivalent +'500133' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale rain rate (s) +'500134' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Convective rain rate +'500135' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective snowfall rate water equivalent +'500136' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective rain rate (s) +'500137' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#rain amount, grid-scale plus convective +'500138' = { + table2Version = 201 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#snow amount, grid-scale plus convective +'500139' = { + table2Version = 201 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to grid scale precipation +'500140' = { + table2Version = 201 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to grid scale precipitation +'500141' = { + table2Version = 201 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'500142' = { + table2Version = 201 ; + indicatorOfParameter = 127 ; + indicatorOfTypeOfLevel = 110 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'500143' = { + table2Version = 201 ; + indicatorOfParameter = 129 ; + indicatorOfTypeOfLevel = 1 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'500144' = { + table2Version = 201 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 110 ; + } +#Graupel (snow pellets) precipitation rate +'500145' = { + table2Version = 201 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 1 ; + } +#Graupel (snow pellets) precipitation rate +'500146' = { + table2Version = 201 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow density +'500147' = { + table2Version = 201 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure perturbation +'500148' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + indicatorOfTypeOfLevel = 110 ; + } +#supercell detection index 1 (rot. up+down drafts) +'500149' = { + table2Version = 201 ; + indicatorOfParameter = 141 ; + indicatorOfTypeOfLevel = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'500150' = { + table2Version = 201 ; + indicatorOfParameter = 142 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, most unstable +'500151' = { + table2Version = 201 ; + indicatorOfParameter = 143 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, most unstable +'500152' = { + table2Version = 201 ; + indicatorOfParameter = 144 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, mean layer +'500153' = { + table2Version = 201 ; + indicatorOfParameter = 145 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, mean layer +'500154' = { + table2Version = 201 ; + indicatorOfParameter = 146 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective turbulent kinetic enery +'500155' = { + table2Version = 201 ; + indicatorOfParameter = 147 ; + } +#Tendency of turbulent kinetic energy +'500156' = { + table2Version = 201 ; + indicatorOfParameter = 148 ; + indicatorOfTypeOfLevel = 109 ; + } +#Kinetic Energy +'500157' = { + table2Version = 201 ; + indicatorOfParameter = 149 ; + indicatorOfTypeOfLevel = 110 ; + } +#Turbulent Kinetic Energy +'500158' = { + table2Version = 201 ; + indicatorOfParameter = 152 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusioncoefficient for momentum +'500159' = { + table2Version = 201 ; + indicatorOfParameter = 153 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'500160' = { + table2Version = 201 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent transfer coefficient for impulse +'500161' = { + table2Version = 201 ; + indicatorOfParameter = 170 ; + indicatorOfTypeOfLevel = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'500162' = { + table2Version = 201 ; + indicatorOfParameter = 171 ; + indicatorOfTypeOfLevel = 1 ; + } +#mixed layer depth +'500163' = { + table2Version = 201 ; + indicatorOfParameter = 173 ; + indicatorOfTypeOfLevel = 1 ; + } +#maximum Wind 10m +'500164' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + timeRangeIndicator = 2 ; + } +#Air concentration of Ruthenium 103 +'500165' = { + table2Version = 201 ; + indicatorOfParameter = 194 ; + indicatorOfTypeOfLevel = 100 ; + } +#Soil Temperature (multilayers) +'500166' = { + table2Version = 201 ; + indicatorOfParameter = 197 ; + indicatorOfTypeOfLevel = 111 ; + } +#Column-integrated Soil Moisture (multilayers) +'500167' = { + table2Version = 201 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 111 ; + } +#soil ice content (multilayers) +'500168' = { + table2Version = 201 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 111 ; + } +#Plant Canopy Surface Water +'500169' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow temperature (top of snow) +'500170' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#Minimal Stomatal Resistance +'500171' = { + table2Version = 201 ; + indicatorOfParameter = 212 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Temperature +'500172' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'500173' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'500174' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 110 ; + } +#Base reflectivity (cmax) +'500175' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 200 ; + } +#unknown +'500176' = { + table2Version = 201 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 110 ; + } +#Effective transmissivity of solar radiation +'500177' = { + table2Version = 201 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 110 ; + } +#sum of contributions to evaporation +'500178' = { + table2Version = 201 ; + indicatorOfParameter = 236 ; + } +#total transpiration from all soil layers +'500179' = { + table2Version = 201 ; + indicatorOfParameter = 237 ; + } +#total forcing at soil surface +'500180' = { + table2Version = 201 ; + indicatorOfParameter = 238 ; + } +#residuum of soil moisture +'500181' = { + table2Version = 201 ; + indicatorOfParameter = 239 ; + } +#Massflux at convective cloud base +'500182' = { + table2Version = 201 ; + indicatorOfParameter = 240 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy +'500183' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + indicatorOfTypeOfLevel = 1 ; + } +#moisture convergence for Kuo-type closure +'500184' = { + table2Version = 201 ; + indicatorOfParameter = 243 ; + indicatorOfTypeOfLevel = 1 ; + } +#total wave direction +'500185' = { + table2Version = 202 ; + indicatorOfParameter = 4 ; + } +#wind sea mean period +'500186' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 102 ; + } +#wind sea peak period +'500187' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + } +#swell mean period +'500188' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 102 ; + } +#swell peak period +'500189' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + } +#total wave peak period +'500190' = { + table2Version = 202 ; + indicatorOfParameter = 9 ; + } +#total wave mean period +'500191' = { + table2Version = 202 ; + indicatorOfParameter = 10 ; + } +#total Tm1 period +'500192' = { + table2Version = 202 ; + indicatorOfParameter = 17 ; + } +#total Tm2 period +'500193' = { + table2Version = 202 ; + indicatorOfParameter = 18 ; + } +#total directional spread +'500194' = { + table2Version = 202 ; + indicatorOfParameter = 19 ; + } +#analysis error(standard deviation), geopotential(gpm) +'500195' = { + table2Version = 202 ; + indicatorOfParameter = 40 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), u-comp. of wind +'500196' = { + table2Version = 202 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), v-comp. of wind +'500197' = { + table2Version = 202 ; + indicatorOfParameter = 42 ; + level = 100 ; + } +#zonal wind tendency due to subgrid scale oro. +'500198' = { + table2Version = 202 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to subgrid scale oro. +'500199' = { + table2Version = 202 ; + indicatorOfParameter = 45 ; + indicatorOfTypeOfLevel = 110 ; + } +#Standard deviation of sub-grid scale orography +'500200' = { + table2Version = 202 ; + indicatorOfParameter = 46 ; + indicatorOfTypeOfLevel = 1 ; + } +#Anisotropy of sub-gridscale orography +'500201' = { + table2Version = 202 ; + indicatorOfParameter = 47 ; + indicatorOfTypeOfLevel = 1 ; + } +#Angle of sub-gridscale orography +'500202' = { + table2Version = 202 ; + indicatorOfParameter = 48 ; + indicatorOfTypeOfLevel = 1 ; + } +#Slope of sub-gridscale orography +'500203' = { + table2Version = 202 ; + indicatorOfParameter = 49 ; + indicatorOfTypeOfLevel = 1 ; + } +#surface emissivity +'500204' = { + table2Version = 202 ; + indicatorOfParameter = 56 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + timeRangeIndicator = 0 ; + } +#Soil Type +'500205' = { + table2Version = 202 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + } +#Leaf area index +'500206' = { + table2Version = 202 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#root depth of vegetation +'500207' = { + table2Version = 202 ; + indicatorOfParameter = 62 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of ozone maximum (climatological) +'500208' = { + table2Version = 202 ; + indicatorOfParameter = 64 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertically integrated ozone content (climatological) +'500209' = { + table2Version = 202 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the vegetation phase +'500210' = { + table2Version = 202 ; + indicatorOfParameter = 67 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the quiescent phas +'500211' = { + table2Version = 202 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 1 ; + } +#Max Leaf area index +'500212' = { + table2Version = 202 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 1 ; + } +#Min Leaf area index +'500213' = { + table2Version = 202 ; + indicatorOfParameter = 70 ; + indicatorOfTypeOfLevel = 1 ; + } +#Orographie + Land-Meer-Verteilung +'500214' = { + table2Version = 202 ; + indicatorOfParameter = 71 ; + } +#variance of soil moisture content (0-10) +'500215' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + topLevel = 0 ; + } +#variance of soil moisture content (10-100) +'500216' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#evergreen forest +'500217' = { + table2Version = 202 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#deciduous forest +'500218' = { + table2Version = 202 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#normalized differential vegetation index +'500219' = { + table2Version = 202 ; + indicatorOfParameter = 77 ; + timeRangeIndicator = 3 ; + } +#normalized differential vegetation index (NDVI) +'500220' = { + table2Version = 202 ; + indicatorOfParameter = 78 ; + timeRangeIndicator = 3 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'500221' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'500222' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Total sulfate aerosol +'500223' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + } +#Total sulfate aerosol (12M) +'500224' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + timeRangeIndicator = 3 ; + } +#Total soil dust aerosol +'500225' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + } +#Total soil dust aerosol (12M) +'500226' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + timeRangeIndicator = 3 ; + } +#Organic aerosol +'500227' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + } +#Organic aerosol (12M) +'500228' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + timeRangeIndicator = 3 ; + } +#Black carbon aerosol +'500229' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + } +#Black carbon aerosol (12M) +'500230' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + timeRangeIndicator = 3 ; + } +#Sea salt aerosol +'500231' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + } +#Sea salt aerosol (12M) +'500232' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + timeRangeIndicator = 3 ; + } +#tendency of specific humidity +'500233' = { + table2Version = 202 ; + indicatorOfParameter = 104 ; + indicatorOfTypeOfLevel = 110 ; + } +#water vapor flux +'500234' = { + table2Version = 202 ; + indicatorOfParameter = 105 ; + indicatorOfTypeOfLevel = 1 ; + } +#Coriolis parameter +'500235' = { + table2Version = 202 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical latitude +'500236' = { + table2Version = 202 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical longitude +'500237' = { + table2Version = 202 ; + indicatorOfParameter = 115 ; + indicatorOfTypeOfLevel = 1 ; + } +#Friction velocity +'500238' = { + table2Version = 202 ; + indicatorOfParameter = 120 ; + indicatorOfTypeOfLevel = 110 ; + } +#Delay of the GPS signal trough the (total) atm. +'500239' = { + table2Version = 202 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'500240' = { + table2Version = 202 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'500241' = { + table2Version = 202 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ozone Mixing Ratio +'500242' = { + table2Version = 202 ; + indicatorOfParameter = 180 ; + indicatorOfTypeOfLevel = 110 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'500243' = { + table2Version = 202 ; + indicatorOfParameter = 194 ; + } +#Ru103-dry deposition +'500244' = { + table2Version = 202 ; + indicatorOfParameter = 195 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ru103-wet deposition +'500245' = { + table2Version = 202 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Strontium 90 +'500246' = { + table2Version = 202 ; + indicatorOfParameter = 197 ; + } +#Sr90-dry deposition +'500247' = { + table2Version = 202 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 1 ; + } +#Sr90-wet deposition +'500248' = { + table2Version = 202 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-concentration +'500249' = { + table2Version = 202 ; + indicatorOfParameter = 200 ; + } +#I131-dry deposition +'500250' = { + table2Version = 202 ; + indicatorOfParameter = 201 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-wet deposition +'500251' = { + table2Version = 202 ; + indicatorOfParameter = 202 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-concentration +'500252' = { + table2Version = 202 ; + indicatorOfParameter = 203 ; + } +#Cs137-dry deposition +'500253' = { + table2Version = 202 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-wet deposition +'500254' = { + table2Version = 202 ; + indicatorOfParameter = 205 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'500255' = { + table2Version = 202 ; + indicatorOfParameter = 206 ; + } +#Te132-dry deposition +'500256' = { + table2Version = 202 ; + indicatorOfParameter = 207 ; + indicatorOfTypeOfLevel = 1 ; + } +#Te132-wet deposition +'500257' = { + table2Version = 202 ; + indicatorOfParameter = 208 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'500258' = { + table2Version = 202 ; + indicatorOfParameter = 209 ; + } +#Zr95-dry deposition +'500259' = { + table2Version = 202 ; + indicatorOfParameter = 210 ; + indicatorOfTypeOfLevel = 1 ; + } +#Zr95-wet deposition +'500260' = { + table2Version = 202 ; + indicatorOfParameter = 211 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'500261' = { + table2Version = 202 ; + indicatorOfParameter = 212 ; + } +#Kr85-dry deposition +'500262' = { + table2Version = 202 ; + indicatorOfParameter = 213 ; + indicatorOfTypeOfLevel = 1 ; + } +#Kr85-wet deposition +'500263' = { + table2Version = 202 ; + indicatorOfParameter = 214 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - concentration +'500264' = { + table2Version = 202 ; + indicatorOfParameter = 215 ; + } +#TRACER - dry deposition +'500265' = { + table2Version = 202 ; + indicatorOfParameter = 216 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - wet deposition +'500266' = { + table2Version = 202 ; + indicatorOfParameter = 217 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'500267' = { + table2Version = 202 ; + indicatorOfParameter = 218 ; + } +#Xe133 - dry deposition +'500268' = { + table2Version = 202 ; + indicatorOfParameter = 219 ; + indicatorOfTypeOfLevel = 1 ; + } +#Xe133 - wet deposition +'500269' = { + table2Version = 202 ; + indicatorOfParameter = 220 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - concentration +'500270' = { + table2Version = 202 ; + indicatorOfParameter = 221 ; + } +#Xe133 - wet deposition +'500271' = { + table2Version = 202 ; + indicatorOfParameter = 222 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - wet deposition +'500272' = { + table2Version = 202 ; + indicatorOfParameter = 223 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - concentration +'500273' = { + table2Version = 202 ; + indicatorOfParameter = 224 ; + } +#I131o - dry deposition +'500274' = { + table2Version = 202 ; + indicatorOfParameter = 225 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - wet deposition +'500275' = { + table2Version = 202 ; + indicatorOfParameter = 226 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Barium 40 +'500276' = { + table2Version = 202 ; + indicatorOfParameter = 227 ; + } +#Ba140 - dry deposition +'500277' = { + table2Version = 202 ; + indicatorOfParameter = 228 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ba140 - wet deposition +'500278' = { + table2Version = 202 ; + indicatorOfParameter = 229 ; + indicatorOfTypeOfLevel = 1 ; + } +#u-momentum flux due to SSO-effects +'500279' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#u-momentum flux due to SSO-effects +'500280' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#v-momentum flux due to SSO-effects +'500281' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#v-momentum flux due to SSO-effects +'500282' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Gravity wave dissipation (vertical integral) +'500283' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Gravity wave dissipation (vertical integral) +'500284' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'500285' = { + table2Version = 202 ; + indicatorOfParameter = 248 ; + indicatorOfTypeOfLevel = 1 ; + } +#wind shear +'500286' = { + table2Version = 203 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#storm relative helicity +'500287' = { + table2Version = 203 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#absolute vorticity advection +'500288' = { + table2Version = 203 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 100 ; + } +#NiederschlagBew.-ArtKombination Niederschl.-Bew.-Blautherm. (283..407) +'500289' = { + table2Version = 203 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konvektions-U-GrenzeHoehe der Konvektionsuntergrenze ueber Grund +'500290' = { + table2Version = 203 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'500291' = { + table2Version = 203 ; + indicatorOfParameter = 94 ; + indicatorOfTypeOfLevel = 1 ; + } +#weather interpretation (WMO) +'500292' = { + table2Version = 203 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 1 ; + } +#geostrophische Vorticityadvektion +'500293' = { + table2Version = 203 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 100 ; + } +#Geo Temperatur Adv geostrophische Schichtdickenadvektion +'500294' = { + table2Version = 203 ; + indicatorOfParameter = 103 ; + indicatorOfTypeOfLevel = 101 ; + } +#Schichtdicken-Advektion +'500295' = { + table2Version = 203 ; + indicatorOfParameter = 107 ; + indicatorOfTypeOfLevel = 101 ; + } +#Winddivergenz +'500296' = { + table2Version = 203 ; + indicatorOfParameter = 109 ; + indicatorOfTypeOfLevel = 100 ; + } +#Qn-Vektor Q isother-senkr-KompQn ,Komp. Q-Vektor senkrecht zu den Isothermen +'500297' = { + table2Version = 203 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 100 ; + } +#Isentrope potentielle Vorticity +'500298' = { + table2Version = 203 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 100 ; + } +#XIPV Wind X-Komp Wind X-Komponente auf isentropen Flaechen +'500299' = { + table2Version = 203 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 100 ; + } +#YIPV Wind Y-Komp Wind Y-Komponente auf isentropen Flaechen +'500300' = { + table2Version = 203 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 100 ; + } +#Druck einer isentropen Flaeche +'500301' = { + table2Version = 203 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 100 ; + } +#KO index +'500302' = { + table2Version = 203 ; + indicatorOfParameter = 140 ; + indicatorOfTypeOfLevel = 1 ; + } +#Aequivalentpotentielle Temperatur +'500303' = { + table2Version = 203 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 100 ; + } +#Ceiling +'500304' = { + table2Version = 203 ; + indicatorOfParameter = 157 ; + indicatorOfTypeOfLevel = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'500305' = { + table2Version = 203 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 100 ; + } +#modified cloud depth for media +'500306' = { + table2Version = 203 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#modified cloud cover for media +'500307' = { + table2Version = 203 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'500308' = { + table2Version = 204 ; + indicatorOfParameter = 1 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'500309' = { + table2Version = 204 ; + indicatorOfParameter = 2 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'500310' = { + table2Version = 204 ; + indicatorOfParameter = 3 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'500311' = { + table2Version = 204 ; + indicatorOfParameter = 4 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'500312' = { + table2Version = 204 ; + indicatorOfParameter = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'500313' = { + table2Version = 204 ; + indicatorOfParameter = 6 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'500314' = { + table2Version = 204 ; + indicatorOfParameter = 7 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'500315' = { + table2Version = 204 ; + indicatorOfParameter = 8 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'500316' = { + table2Version = 204 ; + indicatorOfParameter = 9 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'500317' = { + table2Version = 204 ; + indicatorOfParameter = 10 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'500318' = { + table2Version = 204 ; + indicatorOfParameter = 11 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'500319' = { + table2Version = 204 ; + indicatorOfParameter = 12 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'500320' = { + table2Version = 204 ; + indicatorOfParameter = 13 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'500321' = { + table2Version = 204 ; + indicatorOfParameter = 14 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'500322' = { + table2Version = 204 ; + indicatorOfParameter = 15 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'500323' = { + table2Version = 204 ; + indicatorOfParameter = 16 ; + } +#Synth. Sat. brightness temperature cloudy +'500324' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'500325' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'500326' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500327' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'500328' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'500329' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'500330' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500331' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature clear sky +'500332' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500333' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'500334' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature cloudy +'500335' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance clear sky +'500336' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500337' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'500338' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance cloudy +'500339' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'500340' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500341' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500342' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500343' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500344' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500345' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500346' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'500347' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'500348' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500349' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500350' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500351' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500352' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500353' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500354' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'500355' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'500356' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500357' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500358' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500359' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500360' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500361' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500362' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'500363' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'500364' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500365' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500366' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500367' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500368' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500369' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500370' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'500371' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 4 ; + } +#smoothed forecast, temperature +'500372' = { + table2Version = 206 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, maximum temp. +'500373' = { + table2Version = 206 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, minimum temp. +'500374' = { + table2Version = 206 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, dew point temp. +'500375' = { + table2Version = 206 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, u comp. of wind +'500376' = { + table2Version = 206 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, v comp. of wind +'500377' = { + table2Version = 206 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, total precipitation rate +'500378' = { + table2Version = 206 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, total cloud cover +'500379' = { + table2Version = 206 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover low +'500380' = { + table2Version = 206 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover medium +'500381' = { + table2Version = 206 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover high +'500382' = { + table2Version = 206 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'500383' = { + table2Version = 206 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, soil temperature +'500384' = { + table2Version = 206 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#smoothed forecast, wind speed (gust) +'500385' = { + table2Version = 206 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#calibrated forecast, total precipitation rate +'500386' = { + table2Version = 207 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'500387' = { + table2Version = 207 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, wind speed (gust) +'500388' = { + table2Version = 207 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; +} diff --git a/definitions/grib1/localConcepts/edzw/shortName.def b/definitions/grib1/localConcepts/edzw/shortName.def new file mode 100644 index 000000000..1c4fd4c2d --- /dev/null +++ b/definitions/grib1/localConcepts/edzw/shortName.def @@ -0,0 +1,2442 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'ps' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure +'p' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Pressure Reduced to MSL +'pmsl' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 102 ; + } +#Pressure Tendency (S) +'dpsdt' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (S) +'fis' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (full lev) +'fif' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 110 ; + } +#Geopotential +'fi' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Geometric Height of the earths surface above sea level +'hsurf' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'hhl' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 109 ; + } +#Total Column Integrated Ozone +'to3' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature (G) +'t_g' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 1 ; + } +#2m Temperature +'t_2m' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Temperature (AV) +'t_2m_av' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Climat. temperature, 2m Temperature +'t_2m_cl' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Temperature +'t' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#Max 2m Temperature (i) +'tmax_2m' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#Min 2m Temperature (i) +'tmin_2m' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#2m Dew Point Temperature +'td_2m' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Dew Point Temperature (AV) +'td_2m_av' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Radar spectra (1) +'dbz_max' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + } +#Wave spectra (1) +'wvsp1' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'wvsp2' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'wvsp3' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind Direction (DD_10M) +'dd_10m' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind Direction (DD) +'dd' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Wind speed (SP_10M) +'sp_10m' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind speed (SP) +'sp' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 110 ; + } +#U component of wind +'u_10m' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#U component of wind +'u' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'v_10m' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#V component of wind +'v' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'omega' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vertical Velocity (Geometric) (w) +'w' = { + table2Version = 2 ; + indicatorOfParameter = 40 ; + } +#Specific Humidity (S) +'qv_s' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 1 ; + } +#Specific Humidity (2m) +'qv_2m' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Specific Humidity +'qv' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#2m Relative Humidity +'relhum_2m' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Relative Humidity +'relhum' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#Total column integrated water vapour +'tqv' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + indicatorOfTypeOfLevel = 1 ; + } +#Evaporation (s) +'aevap_s' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Total Column-Integrated Cloud Ice +'tqi' = { + table2Version = 2 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Precipitation rate (S) +'tot_prec' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale Precipitation rate +'prec_gsp' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + timeRangeIndicator = 4 ; + } +#Convective Precipitation rate +'prec_con' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow depth water equivalent +'w_snow' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow Depth +'h_snow' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Cloud Cover +'clct' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Cloud Cover +'clc_con' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Cover (800 hPa - Soil) +'clcl' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (400 - 800 hPa) +'clcm' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (0 - 400 hPa) +'clch' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Column-Integrated Cloud Water +'tqc' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'snow_con' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale snowfall rate water equivalent (s) +'snow_gsp' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Land Cover (1=land, 0=sea) +'fr_land' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + indicatorOfTypeOfLevel = 1 ; + } +#Surface Roughness length Surface Roughness +'z0' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'alb_rad' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'albedo_b' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'t_cl' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 36 ; + } +#Soil Temperature (41 cm depth) +'t_cl_lm' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 41 ; + } +#Soil Temperature +'t_m' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 9 ; + } +#Soil Temperature +'t_s' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#Column-integrated Soil Moisture +'w_cl' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 190 ; + topLevel = 100 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'w_g1' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + bottomLevel = 10 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'w_g2' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#Plant cover +'plcov' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + indicatorOfTypeOfLevel = 1 ; + } +#Water Runoff (10-100) +'runoff_g' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + timeRangeIndicator = 4 ; + } +#Water Runoff (10-190) +'runoff_g_lm' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 190 ; + topLevel = 10 ; + timeRangeIndicator = 4 ; + } +#Water Runoff (s) +'runoff_s' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + timeRangeIndicator = 4 ; + bottomLevel = 10 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'fr_ice' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Thickness +'h_ice' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + indicatorOfTypeOfLevel = 1 ; + } +#Significant height of combined wind waves and swell +'swh' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Direction of wind waves +'mdww' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'shww' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'mpww' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'mdps' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'shps' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'mpps' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Net short wave radiation flux (m) (at the surface) +'asob_s' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'sobs_rad' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (at the surface) +'athb_s' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'thbs_rad' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net short wave radiation flux (m) (on the model top) +'asob_t' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'sobt_rad' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'athb_t' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'thbt_rad' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Latent Heat Net Flux (m) +'alhfl_s' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Sensible Heat Net Flux (m) +'ashfl_s' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, U-Component (m) +'aumfl_s' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, V-Component (m) +'avmfl_s' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation (m) (at the surface) +'apab_s' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation +'pabs_rad' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Solar radiation heating rate +'sohr_rad' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + indicatorOfTypeOfLevel = 110 ; + } +#Thermal radiation heating rate +'thhr_rad' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + indicatorOfTypeOfLevel = 110 ; + } +#Latent heat flux from bare soil +'alhfl_bs' = { + table2Version = 201 ; + indicatorOfParameter = 18 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Latent heat flux from plants +'alhfl_pl' = { + table2Version = 201 ; + indicatorOfParameter = 19 ; + indicatorOfTypeOfLevel = 111 ; + timeRangeIndicator = 3 ; + } +#Sunshine +'dursun' = { + table2Version = 201 ; + indicatorOfParameter = 20 ; + timeRangeIndicator = 4 ; + } +#Stomatal Resistance +'rstom' = { + table2Version = 201 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Cloud cover +'clc' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#Non-Convective Cloud Cover, grid scale +'clc_sgs' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Mixing Ratio +'qc' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Ice Mixing Ratio +'qi' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 110 ; + } +#Rain mixing ratio +'qr' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + indicatorOfTypeOfLevel = 110 ; + } +#Snow mixing ratio +'qs' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated rain +'tqr' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total column integrated snow +'tqs' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + indicatorOfTypeOfLevel = 1 ; + } +#Grauple +'qg' = { + table2Version = 201 ; + indicatorOfParameter = 39 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated grauple +'tqg' = { + table2Version = 201 ; + indicatorOfParameter = 40 ; + } +#Total Column integrated water (all components incl. precipitation) +'twater' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertical integral of divergence of total water content (s) +'tdiv_hum' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + indicatorOfTypeOfLevel = 1 ; + } +#subgrid scale cloud water +'qc_rad' = { + table2Version = 201 ; + indicatorOfParameter = 43 ; + indicatorOfTypeOfLevel = 110 ; + } +#subgridscale cloud ice +'qi_rad' = { + table2Version = 201 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#cloud cover CH (0..8) +'clch_8' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'clcm_8' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'clcl_8' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#cloud base above msl, shallow convection +'hbas_sc' = { + table2Version = 201 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 2 ; + } +#cloud top above msl, shallow convection +'htop_sc' = { + table2Version = 201 ; + indicatorOfParameter = 59 ; + indicatorOfTypeOfLevel = 3 ; + } +#specific cloud water content, convective cloud +'clw_con' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 110 ; + } +#Height of Convective Cloud Base (i) +'hbas_con' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 2 ; + } +#Height of Convective Cloud Top (i) +'htop_con' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'bas_con' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'top_con' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to convection +'dt_con' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to convection +'dqv_con' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 110 ; + } +#zonal wind tendency due to convection +'du_con' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to convection +'dv_con' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 110 ; + } +#height of top of dry convection +'htop_dc' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'hzerocl' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 4 ; + } +#Height of snow fall limit +'snowlmt' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 4 ; + } +#Tendency of specific cloud liquid water content due to conversion +'dqc_con' = { + table2Version = 201 ; + indicatorOfParameter = 88 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud ice content due to convection +'dqi_con' = { + table2Version = 201 ; + indicatorOfParameter = 89 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'q_sedim' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 110 ; + } +#Large scale rain rate +'prr_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale snowfall rate water equivalent +'prs_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale rain rate (s) +'rain_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Convective rain rate +'prr_con' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective snowfall rate water equivalent +'prs_con' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective rain rate (s) +'rain_con' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#rain amount, grid-scale plus convective +'rr_f' = { + table2Version = 201 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#snow amount, grid-scale plus convective +'rr_c' = { + table2Version = 201 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to grid scale precipation +'dt_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to grid scale precipitation +'dqv_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'dqc_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 127 ; + indicatorOfTypeOfLevel = 110 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'freshsnw' = { + table2Version = 201 ; + indicatorOfParameter = 129 ; + indicatorOfTypeOfLevel = 1 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'dqi_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 110 ; + } +#Graupel (snow pellets) precipitation rate +'prg_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 1 ; + } +#Graupel (snow pellets) precipitation rate +'grau_gsp' = { + table2Version = 201 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow density +'rho_snow' = { + table2Version = 201 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure perturbation +'pp' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + indicatorOfTypeOfLevel = 110 ; + } +#supercell detection index 1 (rot. up+down drafts) +'sdi_1' = { + table2Version = 201 ; + indicatorOfParameter = 141 ; + indicatorOfTypeOfLevel = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'sdi_2' = { + table2Version = 201 ; + indicatorOfParameter = 142 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, most unstable +'cape_mu' = { + table2Version = 201 ; + indicatorOfParameter = 143 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, most unstable +'cin_mu' = { + table2Version = 201 ; + indicatorOfParameter = 144 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, mean layer +'cape_ml' = { + table2Version = 201 ; + indicatorOfParameter = 145 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, mean layer +'cin_ml' = { + table2Version = 201 ; + indicatorOfParameter = 146 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective turbulent kinetic enery +'tke_con' = { + table2Version = 201 ; + indicatorOfParameter = 147 ; + } +#Tendency of turbulent kinetic energy +'tketens' = { + table2Version = 201 ; + indicatorOfParameter = 148 ; + indicatorOfTypeOfLevel = 109 ; + } +#Kinetic Energy +'ke' = { + table2Version = 201 ; + indicatorOfParameter = 149 ; + indicatorOfTypeOfLevel = 110 ; + } +#Turbulent Kinetic Energy +'tke' = { + table2Version = 201 ; + indicatorOfParameter = 152 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusioncoefficient for momentum +'tkvm' = { + table2Version = 201 ; + indicatorOfParameter = 153 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'tkvh' = { + table2Version = 201 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent transfer coefficient for impulse +'tcm' = { + table2Version = 201 ; + indicatorOfParameter = 170 ; + indicatorOfTypeOfLevel = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'tch' = { + table2Version = 201 ; + indicatorOfParameter = 171 ; + indicatorOfTypeOfLevel = 1 ; + } +#mixed layer depth +'mh' = { + table2Version = 201 ; + indicatorOfParameter = 173 ; + indicatorOfTypeOfLevel = 1 ; + } +#maximum Wind 10m +'vmax_10m' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + timeRangeIndicator = 2 ; + } +#Air concentration of Ruthenium 103 +'ru-103' = { + table2Version = 201 ; + indicatorOfParameter = 194 ; + indicatorOfTypeOfLevel = 100 ; + } +#Soil Temperature (multilayers) +'t_so' = { + table2Version = 201 ; + indicatorOfParameter = 197 ; + indicatorOfTypeOfLevel = 111 ; + } +#Column-integrated Soil Moisture (multilayers) +'w_so' = { + table2Version = 201 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 111 ; + } +#soil ice content (multilayers) +'w_so_ice' = { + table2Version = 201 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 111 ; + } +#Plant Canopy Surface Water +'w_i' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow temperature (top of snow) +'t_snow' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#Minimal Stomatal Resistance +'prs_min' = { + table2Version = 201 ; + indicatorOfParameter = 212 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Temperature +'t_ice' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'dbz_850' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'dbz' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 110 ; + } +#Base reflectivity (cmax) +'dbz_cmax' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 200 ; + } +#unknown +'dttdiv' = { + table2Version = 201 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 110 ; + } +#Effective transmissivity of solar radiation +'sotr_rad' = { + table2Version = 201 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 110 ; + } +#sum of contributions to evaporation +'evatra_sum' = { + table2Version = 201 ; + indicatorOfParameter = 236 ; + } +#total transpiration from all soil layers +'tra_sum' = { + table2Version = 201 ; + indicatorOfParameter = 237 ; + } +#total forcing at soil surface +'totforce_s' = { + table2Version = 201 ; + indicatorOfParameter = 238 ; + } +#residuum of soil moisture +'resid_wso' = { + table2Version = 201 ; + indicatorOfParameter = 239 ; + } +#Massflux at convective cloud base +'mflx_con' = { + table2Version = 201 ; + indicatorOfParameter = 240 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy +'cape_con' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + indicatorOfTypeOfLevel = 1 ; + } +#moisture convergence for Kuo-type closure +'qcvg_con' = { + table2Version = 201 ; + indicatorOfParameter = 243 ; + indicatorOfTypeOfLevel = 1 ; + } +#total wave direction +'mwd' = { + table2Version = 202 ; + indicatorOfParameter = 4 ; + } +#wind sea mean period +'mwp_x' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 102 ; + } +#wind sea peak period +'ppww' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + } +#swell mean period +'mpp_s' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 102 ; + } +#swell peak period +'ppps' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + } +#total wave peak period +'pp1d' = { + table2Version = 202 ; + indicatorOfParameter = 9 ; + } +#total wave mean period +'tm10' = { + table2Version = 202 ; + indicatorOfParameter = 10 ; + } +#total Tm1 period +'tm01' = { + table2Version = 202 ; + indicatorOfParameter = 17 ; + } +#total Tm2 period +'tm02' = { + table2Version = 202 ; + indicatorOfParameter = 18 ; + } +#total directional spread +'sprd' = { + table2Version = 202 ; + indicatorOfParameter = 19 ; + } +#analysis error(standard deviation), geopotential(gpm) +'ana_err_fi' = { + table2Version = 202 ; + indicatorOfParameter = 40 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), u-comp. of wind +'ana_err_u' = { + table2Version = 202 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), v-comp. of wind +'ana_err_v' = { + table2Version = 202 ; + indicatorOfParameter = 42 ; + level = 100 ; + } +#zonal wind tendency due to subgrid scale oro. +'du_sso' = { + table2Version = 202 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to subgrid scale oro. +'dv_sso' = { + table2Version = 202 ; + indicatorOfParameter = 45 ; + indicatorOfTypeOfLevel = 110 ; + } +#Standard deviation of sub-grid scale orography +'sso_stdh' = { + table2Version = 202 ; + indicatorOfParameter = 46 ; + indicatorOfTypeOfLevel = 1 ; + } +#Anisotropy of sub-gridscale orography +'sso_gamma' = { + table2Version = 202 ; + indicatorOfParameter = 47 ; + indicatorOfTypeOfLevel = 1 ; + } +#Angle of sub-gridscale orography +'sso_theta' = { + table2Version = 202 ; + indicatorOfParameter = 48 ; + indicatorOfTypeOfLevel = 1 ; + } +#Slope of sub-gridscale orography +'sso_sigma' = { + table2Version = 202 ; + indicatorOfParameter = 49 ; + indicatorOfTypeOfLevel = 1 ; + } +#surface emissivity +'emis_rad' = { + table2Version = 202 ; + indicatorOfParameter = 56 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + timeRangeIndicator = 0 ; + } +#Soil Type +'soiltyp' = { + table2Version = 202 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + } +#Leaf area index +'lai' = { + table2Version = 202 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#root depth of vegetation +'rootdp' = { + table2Version = 202 ; + indicatorOfParameter = 62 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of ozone maximum (climatological) +'hmo3' = { + table2Version = 202 ; + indicatorOfParameter = 64 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertically integrated ozone content (climatological) +'vio3' = { + table2Version = 202 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the vegetation phase +'plcov_mx' = { + table2Version = 202 ; + indicatorOfParameter = 67 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the quiescent phas +'plcov_mn' = { + table2Version = 202 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 1 ; + } +#Max Leaf area index +'lai_mx' = { + table2Version = 202 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 1 ; + } +#Min Leaf area index +'lai_mn' = { + table2Version = 202 ; + indicatorOfParameter = 70 ; + indicatorOfTypeOfLevel = 1 ; + } +#Orographie + Land-Meer-Verteilung +'oro_mod' = { + table2Version = 202 ; + indicatorOfParameter = 71 ; + } +#variance of soil moisture content (0-10) +'wvar1' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + topLevel = 0 ; + } +#variance of soil moisture content (10-100) +'wvar2' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#evergreen forest +'for_e' = { + table2Version = 202 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#deciduous forest +'for_d' = { + table2Version = 202 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#normalized differential vegetation index +'ndvi' = { + table2Version = 202 ; + indicatorOfParameter = 77 ; + timeRangeIndicator = 3 ; + } +#normalized differential vegetation index (NDVI) +'ndvi_max' = { + table2Version = 202 ; + indicatorOfParameter = 78 ; + timeRangeIndicator = 3 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ndvi_mrat' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ndviratio' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Total sulfate aerosol +'aer_so4' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + } +#Total sulfate aerosol (12M) +'aer_so412' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + timeRangeIndicator = 3 ; + } +#Total soil dust aerosol +'aer_dust' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + } +#Total soil dust aerosol (12M) +'aer_dust12' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + timeRangeIndicator = 3 ; + } +#Organic aerosol +'aer_org' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + } +#Organic aerosol (12M) +'aer_org12' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + timeRangeIndicator = 3 ; + } +#Black carbon aerosol +'aer_bc' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + } +#Black carbon aerosol (12M) +'aer_bc12' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + timeRangeIndicator = 3 ; + } +#Sea salt aerosol +'aer_ss' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + } +#Sea salt aerosol (12M) +'aer_ss12' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + timeRangeIndicator = 3 ; + } +#tendency of specific humidity +'dqvdt' = { + table2Version = 202 ; + indicatorOfParameter = 104 ; + indicatorOfTypeOfLevel = 110 ; + } +#water vapor flux +'qvsflx' = { + table2Version = 202 ; + indicatorOfParameter = 105 ; + indicatorOfTypeOfLevel = 1 ; + } +#Coriolis parameter +'fc' = { + table2Version = 202 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical latitude +'rlat' = { + table2Version = 202 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical longitude +'rlon' = { + table2Version = 202 ; + indicatorOfParameter = 115 ; + indicatorOfTypeOfLevel = 1 ; + } +#Friction velocity +'ustr' = { + table2Version = 202 ; + indicatorOfParameter = 120 ; + indicatorOfTypeOfLevel = 110 ; + } +#Delay of the GPS signal trough the (total) atm. +'ztd' = { + table2Version = 202 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'zwd' = { + table2Version = 202 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'zhd' = { + table2Version = 202 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ozone Mixing Ratio +'o3' = { + table2Version = 202 ; + indicatorOfParameter = 180 ; + indicatorOfTypeOfLevel = 110 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'ru-103' = { + table2Version = 202 ; + indicatorOfParameter = 194 ; + } +#Ru103-dry deposition +'ru-103d' = { + table2Version = 202 ; + indicatorOfParameter = 195 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ru103-wet deposition +'ru-103w' = { + table2Version = 202 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Strontium 90 +'sr-90' = { + table2Version = 202 ; + indicatorOfParameter = 197 ; + } +#Sr90-dry deposition +'sr-90d' = { + table2Version = 202 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 1 ; + } +#Sr90-wet deposition +'sr-90w' = { + table2Version = 202 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-concentration +'i-131a' = { + table2Version = 202 ; + indicatorOfParameter = 200 ; + } +#I131-dry deposition +'i-131ad' = { + table2Version = 202 ; + indicatorOfParameter = 201 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-wet deposition +'i-131aw' = { + table2Version = 202 ; + indicatorOfParameter = 202 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-concentration +'cs-137' = { + table2Version = 202 ; + indicatorOfParameter = 203 ; + } +#Cs137-dry deposition +'cs-137d' = { + table2Version = 202 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-wet deposition +'cs-137w' = { + table2Version = 202 ; + indicatorOfParameter = 205 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'te-132' = { + table2Version = 202 ; + indicatorOfParameter = 206 ; + } +#Te132-dry deposition +'te-132d' = { + table2Version = 202 ; + indicatorOfParameter = 207 ; + indicatorOfTypeOfLevel = 1 ; + } +#Te132-wet deposition +'te-132w' = { + table2Version = 202 ; + indicatorOfParameter = 208 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'zr-95' = { + table2Version = 202 ; + indicatorOfParameter = 209 ; + } +#Zr95-dry deposition +'zr-95d' = { + table2Version = 202 ; + indicatorOfParameter = 210 ; + indicatorOfTypeOfLevel = 1 ; + } +#Zr95-wet deposition +'zr-95w' = { + table2Version = 202 ; + indicatorOfParameter = 211 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'kr-85' = { + table2Version = 202 ; + indicatorOfParameter = 212 ; + } +#Kr85-dry deposition +'kr-85d' = { + table2Version = 202 ; + indicatorOfParameter = 213 ; + indicatorOfTypeOfLevel = 1 ; + } +#Kr85-wet deposition +'kr-85w' = { + table2Version = 202 ; + indicatorOfParameter = 214 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - concentration +'tr-2' = { + table2Version = 202 ; + indicatorOfParameter = 215 ; + } +#TRACER - dry deposition +'tr-2d' = { + table2Version = 202 ; + indicatorOfParameter = 216 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - wet deposition +'tr-2w' = { + table2Version = 202 ; + indicatorOfParameter = 217 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'xe-133' = { + table2Version = 202 ; + indicatorOfParameter = 218 ; + } +#Xe133 - dry deposition +'xe-133d' = { + table2Version = 202 ; + indicatorOfParameter = 219 ; + indicatorOfTypeOfLevel = 1 ; + } +#Xe133 - wet deposition +'xe-133w' = { + table2Version = 202 ; + indicatorOfParameter = 220 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - concentration +'i-131g' = { + table2Version = 202 ; + indicatorOfParameter = 221 ; + } +#Xe133 - wet deposition +'i-131gd' = { + table2Version = 202 ; + indicatorOfParameter = 222 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - wet deposition +'i-131gw' = { + table2Version = 202 ; + indicatorOfParameter = 223 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - concentration +'i-131o' = { + table2Version = 202 ; + indicatorOfParameter = 224 ; + } +#I131o - dry deposition +'i-131od' = { + table2Version = 202 ; + indicatorOfParameter = 225 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - wet deposition +'i-131ow' = { + table2Version = 202 ; + indicatorOfParameter = 226 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Barium 40 +'ba-140' = { + table2Version = 202 ; + indicatorOfParameter = 227 ; + } +#Ba140 - dry deposition +'ba-140d' = { + table2Version = 202 ; + indicatorOfParameter = 228 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ba140 - wet deposition +'ba-140w' = { + table2Version = 202 ; + indicatorOfParameter = 229 ; + indicatorOfTypeOfLevel = 1 ; + } +#u-momentum flux due to SSO-effects +'austr_sso' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#u-momentum flux due to SSO-effects +'ustr_sso' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#v-momentum flux due to SSO-effects +'avstr_sso' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#v-momentum flux due to SSO-effects +'vstr_sso' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Gravity wave dissipation (vertical integral) +'avdis_sso' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Gravity wave dissipation (vertical integral) +'vdis_sso' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'uv_max' = { + table2Version = 202 ; + indicatorOfParameter = 248 ; + indicatorOfTypeOfLevel = 1 ; + } +#wind shear +'w_shaer' = { + table2Version = 203 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#storm relative helicity +'srh' = { + table2Version = 203 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#absolute vorticity advection +'vabs' = { + table2Version = 203 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 100 ; + } +#NiederschlagBew.-ArtKombination Niederschl.-Bew.-Blautherm. (283..407) +'cl_typ' = { + table2Version = 203 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konvektions-U-GrenzeHoehe der Konvektionsuntergrenze ueber Grund +'ccl_gnd' = { + table2Version = 203 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'ccl_nn' = { + table2Version = 203 ; + indicatorOfParameter = 94 ; + indicatorOfTypeOfLevel = 1 ; + } +#weather interpretation (WMO) +'ww' = { + table2Version = 203 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 1 ; + } +#geostrophische Vorticityadvektion +'advorg' = { + table2Version = 203 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 100 ; + } +#Geo Temperatur Adv geostrophische Schichtdickenadvektion +'advor' = { + table2Version = 203 ; + indicatorOfParameter = 103 ; + indicatorOfTypeOfLevel = 101 ; + } +#Schichtdicken-Advektion +'adrtg' = { + table2Version = 203 ; + indicatorOfParameter = 107 ; + indicatorOfTypeOfLevel = 101 ; + } +#Winddivergenz +'wdiv' = { + table2Version = 203 ; + indicatorOfParameter = 109 ; + indicatorOfTypeOfLevel = 100 ; + } +#Qn-Vektor Q isother-senkr-KompQn ,Komp. Q-Vektor senkrecht zu den Isothermen +'fqn' = { + table2Version = 203 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 100 ; + } +#Isentrope potentielle Vorticity +'ipv' = { + table2Version = 203 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 100 ; + } +#XIPV Wind X-Komp Wind X-Komponente auf isentropen Flaechen +'up' = { + table2Version = 203 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 100 ; + } +#YIPV Wind Y-Komp Wind Y-Komponente auf isentropen Flaechen +'vp' = { + table2Version = 203 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 100 ; + } +#Druck einer isentropen Flaeche +'ptheta' = { + table2Version = 203 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 100 ; + } +#KO index +'ko' = { + table2Version = 203 ; + indicatorOfParameter = 140 ; + indicatorOfTypeOfLevel = 1 ; + } +#Aequivalentpotentielle Temperatur +'thetae' = { + table2Version = 203 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 100 ; + } +#Ceiling +'ceiling' = { + table2Version = 203 ; + indicatorOfParameter = 157 ; + indicatorOfTypeOfLevel = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'ice_grd' = { + table2Version = 203 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 100 ; + } +#modified cloud depth for media +'cldepth' = { + table2Version = 203 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#modified cloud cover for media +'clct_mod' = { + table2Version = 203 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'efa-ps' = { + table2Version = 204 ; + indicatorOfParameter = 1 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'eia-ps' = { + table2Version = 204 ; + indicatorOfParameter = 2 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'efa-u' = { + table2Version = 204 ; + indicatorOfParameter = 3 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'eia-u' = { + table2Version = 204 ; + indicatorOfParameter = 4 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'efa-v' = { + table2Version = 204 ; + indicatorOfParameter = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'eia-v' = { + table2Version = 204 ; + indicatorOfParameter = 6 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'efa-fi' = { + table2Version = 204 ; + indicatorOfParameter = 7 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'eia-fi' = { + table2Version = 204 ; + indicatorOfParameter = 8 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'efa-rh' = { + table2Version = 204 ; + indicatorOfParameter = 9 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'eia-rh' = { + table2Version = 204 ; + indicatorOfParameter = 10 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'efa-t' = { + table2Version = 204 ; + indicatorOfParameter = 11 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'eia-t' = { + table2Version = 204 ; + indicatorOfParameter = 12 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'efa-om' = { + table2Version = 204 ; + indicatorOfParameter = 13 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'eia-om' = { + table2Version = 204 ; + indicatorOfParameter = 14 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'efa-ke' = { + table2Version = 204 ; + indicatorOfParameter = 15 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'eia-ke' = { + table2Version = 204 ; + indicatorOfParameter = 16 ; + } +#Synth. Sat. brightness temperature cloudy +'synme5_bt_cl' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'synme5_bt_cs' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'synme5_rad_cl' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synme5_rad_cs' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'synme6_bt_cl' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'synme6_bt_cs' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'synme6_rad_cl' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synme6_rad_cs' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature clear sky +'synme7_bt_cl_ir11.5' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synme7_bt_cl_wv6.4' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'synme7_bt_cs_ir11.5' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature cloudy +'synme7_bt_cs_wv6.4' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance clear sky +'synme7_rad_cl_ir11.5' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synme7_rad_cl_wv6.4' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'synme7_rad_cs_ir11.5' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance cloudy +'synme7_rad_cs_wv6.4' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir10.8' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir12.1' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir13.4' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir3.9' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir8.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir9.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_wv6.2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_wv7.3' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir8.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir10.8' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir12.1' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir13.4' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir3.9' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir9.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_wv6.2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_wv7.3' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir10.8' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir12.1' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir13.4' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir3.9' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir8.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir9.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_wv6.2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_wv7.3' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir10.8' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir12.1' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir13.4' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir3.9' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir8.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir9.7' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_wv6.2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_wv7.3' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 4 ; + } +#smoothed forecast, temperature +'t_2m_s' = { + table2Version = 206 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, maximum temp. +'tmax_2m_s' = { + table2Version = 206 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, minimum temp. +'tmin_2m_s' = { + table2Version = 206 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, dew point temp. +'td_2m_s' = { + table2Version = 206 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, u comp. of wind +'u_10m_s' = { + table2Version = 206 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, v comp. of wind +'v_10m_s' = { + table2Version = 206 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, total precipitation rate +'tot_prec_s' = { + table2Version = 206 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, total cloud cover +'clct_s' = { + table2Version = 206 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover low +'clcl_s' = { + table2Version = 206 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover medium +'clcm_s' = { + table2Version = 206 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover high +'clch_s' = { + table2Version = 206 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'snow_gsp_s' = { + table2Version = 206 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, soil temperature +'t_s_s' = { + table2Version = 206 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#smoothed forecast, wind speed (gust) +'vmax_10m_s' = { + table2Version = 206 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#calibrated forecast, total precipitation rate +'tot_prec_c' = { + table2Version = 207 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'snow_gsp_c' = { + table2Version = 207 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, wind speed (gust) +'vmax_10m_c' = { + table2Version = 207 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; +} diff --git a/definitions/grib1/localConcepts/edzw/units.def b/definitions/grib1/localConcepts/edzw/units.def new file mode 100644 index 000000000..331fa7073 --- /dev/null +++ b/definitions/grib1/localConcepts/edzw/units.def @@ -0,0 +1,2442 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Pressure Reduced to MSL +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 102 ; + } +#Pressure Tendency (S) +'Pa s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (S) +'m**2 s**-2' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geopotential (full lev) +'m**2 s**-2' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + indicatorOfTypeOfLevel = 110 ; + } +#Geopotential +'m**2 s**-2' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Geometric Height of the earths surface above sea level +'m' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'m' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 109 ; + } +#Total Column Integrated Ozone +'Dobson' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature (G) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 1 ; + } +#2m Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Temperature (AV) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Climat. temperature, 2m Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#Max 2m Temperature (i) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#Min 2m Temperature (i) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#2m Dew Point Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2m Dew Point Temperature (AV) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 3 ; + } +#Radar spectra (1) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + } +#Wave spectra (1) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind Direction (DD_10M) +'degrees' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind Direction (DD) +'degrees' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Wind speed (SP_10M) +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#Wind speed (SP) +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + indicatorOfTypeOfLevel = 110 ; + } +#U component of wind +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#U component of wind +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#V component of wind +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'Pa s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vertical Velocity (Geometric) (w) +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 40 ; + } +#Specific Humidity (S) +'kg kg**-1' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 1 ; + } +#Specific Humidity (2m) +'kg kg**-1' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Specific Humidity +'kg kg**-1' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#2m Relative Humidity +'%' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Relative Humidity +'%' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#Total column integrated water vapour +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + indicatorOfTypeOfLevel = 1 ; + } +#Evaporation (s) +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Total Column-Integrated Cloud Ice +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Precipitation rate (S) +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale Precipitation rate +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + timeRangeIndicator = 4 ; + } +#Convective Precipitation rate +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow depth water equivalent +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow Depth +'m' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Cloud Cover +'%' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Cloud Cover +'%' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Cover (800 hPa - Soil) +'%' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (400 - 800 hPa) +'%' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cloud Cover (0 - 400 hPa) +'%' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total Column-Integrated Cloud Water +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Large-Scale snowfall rate water equivalent (s) +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Land Cover (1=land, 0=sea) +'(0 - 1)' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + indicatorOfTypeOfLevel = 1 ; + } +#Surface Roughness length Surface Roughness +'m' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'%' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + } +#Albedo (in short-wave) +'%' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 36 ; + } +#Soil Temperature (41 cm depth) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 41 ; + } +#Soil Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 9 ; + } +#Soil Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#Column-integrated Soil Moisture +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 190 ; + topLevel = 100 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + topLevel = 0 ; + bottomLevel = 10 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#Plant cover +'%' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + indicatorOfTypeOfLevel = 1 ; + } +#Water Runoff (10-100) +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + timeRangeIndicator = 4 ; + topLevel = 10 ; + bottomLevel = 100 ; + } +#Water Runoff (10-190) +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + timeRangeIndicator = 4 ; + topLevel = 10 ; + bottomLevel = 190 ; + } +#Water Runoff (s) +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + timeRangeIndicator = 4 ; + topLevel = 0 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Thickness +'m' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + indicatorOfTypeOfLevel = 1 ; + } +#Significant height of combined wind waves and swell +'m' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Direction of wind waves +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'m' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'s' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'m' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'s' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Net short wave radiation flux (m) (at the surface) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (at the surface) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Net short wave radiation flux (m) (on the model top) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net short wave radiation flux +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 3 ; + } +#Net long wave radiation flux +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 8 ; + timeRangeIndicator = 0 ; + } +#Latent Heat Net Flux (m) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Sensible Heat Net Flux (m) +'W m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, U-Component (m) +'N m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Momentum Flux, V-Component (m) +'N m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation (m) (at the surface) +'W m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Photosynthetically active radiation +'W m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 5 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Solar radiation heating rate +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 13 ; + indicatorOfTypeOfLevel = 110 ; + } +#Thermal radiation heating rate +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 14 ; + indicatorOfTypeOfLevel = 110 ; + } +#Latent heat flux from bare soil +'W m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 18 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Latent heat flux from plants +'W m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 19 ; + indicatorOfTypeOfLevel = 111 ; + timeRangeIndicator = 3 ; + } +#Sunshine +'~' = { + table2Version = 201 ; + indicatorOfParameter = 20 ; + timeRangeIndicator = 4 ; + } +#Stomatal Resistance +'s m**-1' = { + table2Version = 201 ; + indicatorOfParameter = 21 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Cloud cover +'%' = { + table2Version = 201 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#Non-Convective Cloud Cover, grid scale +'%' = { + table2Version = 201 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Mixing Ratio +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 31 ; + indicatorOfTypeOfLevel = 110 ; + } +#Cloud Ice Mixing Ratio +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 110 ; + } +#Rain mixing ratio +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 35 ; + indicatorOfTypeOfLevel = 110 ; + } +#Snow mixing ratio +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 36 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated rain +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 37 ; + indicatorOfTypeOfLevel = 1 ; + } +#Total column integrated snow +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 38 ; + indicatorOfTypeOfLevel = 1 ; + } +#Grauple +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 39 ; + indicatorOfTypeOfLevel = 110 ; + } +#Total column integrated grauple +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 40 ; + } +#Total Column integrated water (all components incl. precipitation) +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertical integral of divergence of total water content (s) +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 42 ; + indicatorOfTypeOfLevel = 1 ; + } +#subgrid scale cloud water +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 43 ; + indicatorOfTypeOfLevel = 110 ; + } +#subgridscale cloud ice +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#cloud cover CH (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 51 ; + } +#cloud cover CM (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 52 ; + } +#cloud cover CL (0..8) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 53 ; + } +#cloud base above msl, shallow convection +'m' = { + table2Version = 201 ; + indicatorOfParameter = 58 ; + indicatorOfTypeOfLevel = 2 ; + } +#cloud top above msl, shallow convection +'m' = { + table2Version = 201 ; + indicatorOfParameter = 59 ; + indicatorOfTypeOfLevel = 3 ; + } +#specific cloud water content, convective cloud +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 110 ; + } +#Height of Convective Cloud Base (i) +'m' = { + table2Version = 201 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 2 ; + } +#Height of Convective Cloud Top (i) +'m' = { + table2Version = 201 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 72 ; + indicatorOfTypeOfLevel = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to convection +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to convection +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 110 ; + } +#zonal wind tendency due to convection +'m s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 78 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to convection +'m s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 110 ; + } +#height of top of dry convection +'m' = { + table2Version = 201 ; + indicatorOfParameter = 82 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'m' = { + table2Version = 201 ; + indicatorOfParameter = 84 ; + indicatorOfTypeOfLevel = 4 ; + } +#Height of snow fall limit +'m' = { + table2Version = 201 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 4 ; + } +#Tendency of specific cloud liquid water content due to conversion +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 88 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud ice content due to convection +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 89 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'kg kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 110 ; + } +#Large scale rain rate +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 100 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale snowfall rate water equivalent +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 1 ; + } +#Large scale rain rate (s) +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 102 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Convective rain rate +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 111 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective snowfall rate water equivalent +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 112 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective rain rate (s) +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#rain amount, grid-scale plus convective +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#snow amount, grid-scale plus convective +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Temperature tendency due to grid scale precipation +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 110 ; + } +#Specific humitiy tendency due to grid scale precipitation +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 125 ; + indicatorOfTypeOfLevel = 110 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 127 ; + indicatorOfTypeOfLevel = 110 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 129 ; + indicatorOfTypeOfLevel = 1 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'kg kg**-1 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 110 ; + } +#Graupel (snow pellets) precipitation rate +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 1 ; + } +#Graupel (snow pellets) precipitation rate +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 4 ; + } +#Snow density +'kg m**-3' = { + table2Version = 201 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 1 ; + } +#Pressure perturbation +'Pa' = { + table2Version = 201 ; + indicatorOfParameter = 139 ; + indicatorOfTypeOfLevel = 110 ; + } +#supercell detection index 1 (rot. up+down drafts) +'s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 141 ; + indicatorOfTypeOfLevel = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 142 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, most unstable +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 143 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, most unstable +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 144 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy, mean layer +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 145 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Inhibition, mean layer +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 146 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective turbulent kinetic enery +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 147 ; + } +#Tendency of turbulent kinetic energy +'m s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 148 ; + indicatorOfTypeOfLevel = 109 ; + } +#Kinetic Energy +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 149 ; + indicatorOfTypeOfLevel = 110 ; + } +#Turbulent Kinetic Energy +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 152 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusioncoefficient for momentum +'m**2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 153 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'m**2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 109 ; + } +#Turbulent transfer coefficient for impulse +'~' = { + table2Version = 201 ; + indicatorOfParameter = 170 ; + indicatorOfTypeOfLevel = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'~' = { + table2Version = 201 ; + indicatorOfParameter = 171 ; + indicatorOfTypeOfLevel = 1 ; + } +#mixed layer depth +'m' = { + table2Version = 201 ; + indicatorOfParameter = 173 ; + indicatorOfTypeOfLevel = 1 ; + } +#maximum Wind 10m +'m s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + timeRangeIndicator = 2 ; + } +#Air concentration of Ruthenium 103 +'Bq m**-3' = { + table2Version = 201 ; + indicatorOfParameter = 194 ; + indicatorOfTypeOfLevel = 100 ; + } +#Soil Temperature (multilayers) +'K' = { + table2Version = 201 ; + indicatorOfParameter = 197 ; + indicatorOfTypeOfLevel = 111 ; + } +#Column-integrated Soil Moisture (multilayers) +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 111 ; + } +#soil ice content (multilayers) +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 111 ; + } +#Plant Canopy Surface Water +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 200 ; + indicatorOfTypeOfLevel = 1 ; + } +#Snow temperature (top of snow) +'K' = { + table2Version = 201 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#Minimal Stomatal Resistance +'s m**-1' = { + table2Version = 201 ; + indicatorOfParameter = 212 ; + indicatorOfTypeOfLevel = 1 ; + } +#sea Ice Temperature +'K' = { + table2Version = 201 ; + indicatorOfParameter = 215 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'dB' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 1 ; + } +#Base reflectivity +'dB' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 110 ; + } +#Base reflectivity (cmax) +'dB' = { + table2Version = 201 ; + indicatorOfParameter = 230 ; + indicatorOfTypeOfLevel = 200 ; + } +#unknown +'m' = { + table2Version = 201 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 110 ; + } +#Effective transmissivity of solar radiation +'K s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 110 ; + } +#sum of contributions to evaporation +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 236 ; + } +#total transpiration from all soil layers +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 237 ; + } +#total forcing at soil surface +'W m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 238 ; + } +#residuum of soil moisture +'kg m**-2' = { + table2Version = 201 ; + indicatorOfParameter = 239 ; + } +#Massflux at convective cloud base +'kg m**-2 s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 240 ; + indicatorOfTypeOfLevel = 1 ; + } +#Convective Available Potential Energy +'J kg**-1' = { + table2Version = 201 ; + indicatorOfParameter = 241 ; + indicatorOfTypeOfLevel = 1 ; + } +#moisture convergence for Kuo-type closure +'s**-1' = { + table2Version = 201 ; + indicatorOfParameter = 243 ; + indicatorOfTypeOfLevel = 1 ; + } +#total wave direction +'Degree true' = { + table2Version = 202 ; + indicatorOfParameter = 4 ; + } +#wind sea mean period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 102 ; + } +#wind sea peak period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 7 ; + } +#swell mean period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + indicatorOfTypeOfLevel = 102 ; + } +#swell peak period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 8 ; + } +#total wave peak period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 9 ; + } +#total wave mean period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 10 ; + } +#total Tm1 period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 17 ; + } +#total Tm2 period +'s' = { + table2Version = 202 ; + indicatorOfParameter = 18 ; + } +#total directional spread +'Degree true' = { + table2Version = 202 ; + indicatorOfParameter = 19 ; + } +#analysis error(standard deviation), geopotential(gpm) +'gpm' = { + table2Version = 202 ; + indicatorOfParameter = 40 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), u-comp. of wind +'m**2 s**-2' = { + table2Version = 202 ; + indicatorOfParameter = 41 ; + indicatorOfTypeOfLevel = 100 ; + } +#analysis error(standard deviation), v-comp. of wind +'m**2 s**-2' = { + table2Version = 202 ; + indicatorOfParameter = 42 ; + level = 100 ; + } +#zonal wind tendency due to subgrid scale oro. +'m s**-1' = { + table2Version = 202 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 110 ; + } +#meridional wind tendency due to subgrid scale oro. +'m s**-1' = { + table2Version = 202 ; + indicatorOfParameter = 45 ; + indicatorOfTypeOfLevel = 110 ; + } +#Standard deviation of sub-grid scale orography +'m' = { + table2Version = 202 ; + indicatorOfParameter = 46 ; + indicatorOfTypeOfLevel = 1 ; + } +#Anisotropy of sub-gridscale orography +'~' = { + table2Version = 202 ; + indicatorOfParameter = 47 ; + indicatorOfTypeOfLevel = 1 ; + } +#Angle of sub-gridscale orography +'radians' = { + table2Version = 202 ; + indicatorOfParameter = 48 ; + indicatorOfTypeOfLevel = 1 ; + } +#Slope of sub-gridscale orography +'~' = { + table2Version = 202 ; + indicatorOfParameter = 49 ; + indicatorOfTypeOfLevel = 1 ; + } +#surface emissivity +'~' = { + table2Version = 202 ; + indicatorOfParameter = 56 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + timeRangeIndicator = 0 ; + } +#Soil Type +'~' = { + table2Version = 202 ; + indicatorOfParameter = 57 ; + indicatorOfTypeOfLevel = 1 ; + } +#Leaf area index +'~' = { + table2Version = 202 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#root depth of vegetation +'m' = { + table2Version = 202 ; + indicatorOfParameter = 62 ; + indicatorOfTypeOfLevel = 1 ; + } +#height of ozone maximum (climatological) +'Pa' = { + table2Version = 202 ; + indicatorOfParameter = 64 ; + indicatorOfTypeOfLevel = 1 ; + } +#vertically integrated ozone content (climatological) +'Pa' = { + table2Version = 202 ; + indicatorOfParameter = 65 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the vegetation phase +'~' = { + table2Version = 202 ; + indicatorOfParameter = 67 ; + indicatorOfTypeOfLevel = 1 ; + } +#Plant covering degree in the quiescent phas +'~' = { + table2Version = 202 ; + indicatorOfParameter = 68 ; + indicatorOfTypeOfLevel = 1 ; + } +#Max Leaf area index +'~' = { + table2Version = 202 ; + indicatorOfParameter = 69 ; + indicatorOfTypeOfLevel = 1 ; + } +#Min Leaf area index +'~' = { + table2Version = 202 ; + indicatorOfParameter = 70 ; + indicatorOfTypeOfLevel = 1 ; + } +#Orographie + Land-Meer-Verteilung +'m' = { + table2Version = 202 ; + indicatorOfParameter = 71 ; + } +#variance of soil moisture content (0-10) +'kg**2 m**-4' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 10 ; + topLevel = 0 ; + } +#variance of soil moisture content (10-100) +'kg**2 m**-4' = { + table2Version = 202 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 112 ; + bottomLevel = 100 ; + topLevel = 10 ; + } +#evergreen forest +'~' = { + table2Version = 202 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#deciduous forest +'~' = { + table2Version = 202 ; + indicatorOfParameter = 76 ; + indicatorOfTypeOfLevel = 1 ; + } +#normalized differential vegetation index +'~' = { + table2Version = 202 ; + indicatorOfParameter = 77 ; + timeRangeIndicator = 3 ; + } +#normalized differential vegetation index (NDVI) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 78 ; + timeRangeIndicator = 3 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'~' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'~' = { + table2Version = 202 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Total sulfate aerosol +'~' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + } +#Total sulfate aerosol (12M) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 84 ; + timeRangeIndicator = 3 ; + } +#Total soil dust aerosol +'~' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + } +#Total soil dust aerosol (12M) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 86 ; + timeRangeIndicator = 3 ; + } +#Organic aerosol +'~' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + } +#Organic aerosol (12M) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 91 ; + timeRangeIndicator = 3 ; + } +#Black carbon aerosol +'~' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + } +#Black carbon aerosol (12M) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 92 ; + timeRangeIndicator = 3 ; + } +#Sea salt aerosol +'~' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + } +#Sea salt aerosol (12M) +'~' = { + table2Version = 202 ; + indicatorOfParameter = 93 ; + timeRangeIndicator = 3 ; + } +#tendency of specific humidity +'s**-1' = { + table2Version = 202 ; + indicatorOfParameter = 104 ; + indicatorOfTypeOfLevel = 110 ; + } +#water vapor flux +'s**-1 m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 105 ; + indicatorOfTypeOfLevel = 1 ; + } +#Coriolis parameter +'s**-1' = { + table2Version = 202 ; + indicatorOfParameter = 113 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical latitude +'Degree N' = { + table2Version = 202 ; + indicatorOfParameter = 114 ; + indicatorOfTypeOfLevel = 1 ; + } +#geographical longitude +'Degree E' = { + table2Version = 202 ; + indicatorOfParameter = 115 ; + indicatorOfTypeOfLevel = 1 ; + } +#Friction velocity +'m s**-1' = { + table2Version = 202 ; + indicatorOfParameter = 120 ; + indicatorOfTypeOfLevel = 110 ; + } +#Delay of the GPS signal trough the (total) atm. +'m' = { + table2Version = 202 ; + indicatorOfParameter = 121 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'m' = { + table2Version = 202 ; + indicatorOfParameter = 122 ; + indicatorOfTypeOfLevel = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'m' = { + table2Version = 202 ; + indicatorOfParameter = 123 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ozone Mixing Ratio +'kg kg**-1' = { + table2Version = 202 ; + indicatorOfParameter = 180 ; + indicatorOfTypeOfLevel = 110 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 194 ; + } +#Ru103-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 195 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ru103-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Strontium 90 +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 197 ; + } +#Sr90-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 198 ; + indicatorOfTypeOfLevel = 1 ; + } +#Sr90-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 199 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-concentration +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 200 ; + } +#I131-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 201 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 202 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-concentration +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 203 ; + } +#Cs137-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Cs137-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 205 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 206 ; + } +#Te132-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 207 ; + indicatorOfTypeOfLevel = 1 ; + } +#Te132-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 208 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 209 ; + } +#Zr95-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 210 ; + indicatorOfTypeOfLevel = 1 ; + } +#Zr95-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 211 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 212 ; + } +#Kr85-dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 213 ; + indicatorOfTypeOfLevel = 1 ; + } +#Kr85-wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 214 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - concentration +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 215 ; + } +#TRACER - dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 216 ; + indicatorOfTypeOfLevel = 1 ; + } +#TRACER - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 217 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 218 ; + } +#Xe133 - dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 219 ; + indicatorOfTypeOfLevel = 1 ; + } +#Xe133 - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 220 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - concentration +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 221 ; + } +#Xe133 - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 222 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131g - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 223 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - concentration +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 224 ; + } +#I131o - dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 225 ; + indicatorOfTypeOfLevel = 1 ; + } +#I131o - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 226 ; + indicatorOfTypeOfLevel = 1 ; + } +#Air concentration of Barium 40 +'Bq m**-3' = { + table2Version = 202 ; + indicatorOfParameter = 227 ; + } +#Ba140 - dry deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 228 ; + indicatorOfTypeOfLevel = 1 ; + } +#Ba140 - wet deposition +'Bq m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 229 ; + indicatorOfTypeOfLevel = 1 ; + } +#u-momentum flux due to SSO-effects +'N m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#u-momentum flux due to SSO-effects +'N m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 231 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#v-momentum flux due to SSO-effects +'N m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#v-momentum flux due to SSO-effects +'N m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 232 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#Gravity wave dissipation (vertical integral) +'W m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 3 ; + } +#Gravity wave dissipation (vertical integral) +'W m**-2' = { + table2Version = 202 ; + indicatorOfParameter = 233 ; + indicatorOfTypeOfLevel = 1 ; + timeRangeIndicator = 0 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'~' = { + table2Version = 202 ; + indicatorOfParameter = 248 ; + indicatorOfTypeOfLevel = 1 ; + } +#wind shear +'m s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 29 ; + indicatorOfTypeOfLevel = 110 ; + } +#storm relative helicity +'J kg**-1' = { + table2Version = 203 ; + indicatorOfParameter = 30 ; + indicatorOfTypeOfLevel = 110 ; + } +#absolute vorticity advection +'s**-2' = { + table2Version = 203 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 100 ; + } +#NiederschlagBew.-ArtKombination Niederschl.-Bew.-Blautherm. (283..407) +'~' = { + table2Version = 203 ; + indicatorOfParameter = 90 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konvektions-U-GrenzeHoehe der Konvektionsuntergrenze ueber Grund +'m' = { + table2Version = 203 ; + indicatorOfParameter = 91 ; + indicatorOfTypeOfLevel = 1 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'m' = { + table2Version = 203 ; + indicatorOfParameter = 94 ; + indicatorOfTypeOfLevel = 1 ; + } +#weather interpretation (WMO) +'~' = { + table2Version = 203 ; + indicatorOfParameter = 99 ; + indicatorOfTypeOfLevel = 1 ; + } +#geostrophische Vorticityadvektion +'s**-2' = { + table2Version = 203 ; + indicatorOfParameter = 101 ; + indicatorOfTypeOfLevel = 100 ; + } +#Geo Temperatur Adv geostrophische Schichtdickenadvektion +'m**3 kg**-1 s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 103 ; + indicatorOfTypeOfLevel = 101 ; + } +#Schichtdicken-Advektion +'m**3 kg**-1 s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 107 ; + indicatorOfTypeOfLevel = 101 ; + } +#Winddivergenz +'s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 109 ; + indicatorOfTypeOfLevel = 100 ; + } +#Qn-Vektor Q isother-senkr-KompQn ,Komp. Q-Vektor senkrecht zu den Isothermen +'m**2 kg**-1 s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 124 ; + indicatorOfTypeOfLevel = 100 ; + } +#Isentrope potentielle Vorticity +'K m**2 kg**-1 s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 130 ; + indicatorOfTypeOfLevel = 100 ; + } +#XIPV Wind X-Komp Wind X-Komponente auf isentropen Flaechen +'m s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 131 ; + indicatorOfTypeOfLevel = 100 ; + } +#YIPV Wind Y-Komp Wind Y-Komponente auf isentropen Flaechen +'m s**-1' = { + table2Version = 203 ; + indicatorOfParameter = 132 ; + indicatorOfTypeOfLevel = 100 ; + } +#Druck einer isentropen Flaeche +'Pa' = { + table2Version = 203 ; + indicatorOfParameter = 133 ; + indicatorOfTypeOfLevel = 100 ; + } +#KO index +'K' = { + table2Version = 203 ; + indicatorOfParameter = 140 ; + indicatorOfTypeOfLevel = 1 ; + } +#Aequivalentpotentielle Temperatur +'K' = { + table2Version = 203 ; + indicatorOfParameter = 154 ; + indicatorOfTypeOfLevel = 100 ; + } +#Ceiling +'m' = { + table2Version = 203 ; + indicatorOfParameter = 157 ; + indicatorOfTypeOfLevel = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'~' = { + table2Version = 203 ; + indicatorOfParameter = 196 ; + indicatorOfTypeOfLevel = 100 ; + } +#modified cloud depth for media +'~' = { + table2Version = 203 ; + indicatorOfParameter = 203 ; + indicatorOfTypeOfLevel = 1 ; + } +#modified cloud cover for media +'~' = { + table2Version = 203 ; + indicatorOfParameter = 204 ; + indicatorOfTypeOfLevel = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'Pa' = { + table2Version = 204 ; + indicatorOfParameter = 1 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'Pa' = { + table2Version = 204 ; + indicatorOfParameter = 2 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'m s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 3 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'m s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 4 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'m s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'m s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 6 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'m**2 s**-2' = { + table2Version = 204 ; + indicatorOfParameter = 7 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'m**2 s**-2' = { + table2Version = 204 ; + indicatorOfParameter = 8 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'%' = { + table2Version = 204 ; + indicatorOfParameter = 9 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'%' = { + table2Version = 204 ; + indicatorOfParameter = 10 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'K' = { + table2Version = 204 ; + indicatorOfParameter = 11 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'K' = { + table2Version = 204 ; + indicatorOfParameter = 12 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'Pa s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 13 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'Pa s**-1' = { + table2Version = 204 ; + indicatorOfParameter = 14 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'J kg**-1' = { + table2Version = 204 ; + indicatorOfParameter = 15 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'J kg**-1' = { + table2Version = 204 ; + indicatorOfParameter = 16 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 2 ; + indicatorOfTypeOfLevel = 222 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 3 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 1 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 2 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 2 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 3 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 6 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 7 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 8 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 1 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 4 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 5 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 2 ; + localElementNumber = 4 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + table2Version = 205 ; + indicatorOfParameter = 4 ; + indicatorOfTypeOfLevel = 222 ; + level = 3 ; + localElementNumber = 4 ; + } +#smoothed forecast, temperature +'K' = { + table2Version = 206 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, maximum temp. +'K' = { + table2Version = 206 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, minimum temp. +'K' = { + table2Version = 206 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + timeRangeIndicator = 2 ; + } +#smoothed forecast, dew point temp. +'K' = { + table2Version = 206 ; + indicatorOfParameter = 17 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#smoothed forecast, u comp. of wind +'m s**-1' = { + table2Version = 206 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, v comp. of wind +'m s**-1' = { + table2Version = 206 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#smoothed forecast, total precipitation rate +'kg m**-2 s**-1' = { + table2Version = 206 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, total cloud cover +'%' = { + table2Version = 206 ; + indicatorOfParameter = 71 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover low +'%' = { + table2Version = 206 ; + indicatorOfParameter = 73 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover medium +'%' = { + table2Version = 206 ; + indicatorOfParameter = 74 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, cloud cover high +'%' = { + table2Version = 206 ; + indicatorOfParameter = 75 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'kg m**-2 s**-1' = { + table2Version = 206 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#smoothed forecast, soil temperature +'K' = { + table2Version = 206 ; + indicatorOfParameter = 85 ; + indicatorOfTypeOfLevel = 111 ; + level = 0 ; + } +#smoothed forecast, wind speed (gust) +'m s**-1' = { + table2Version = 206 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#calibrated forecast, total precipitation rate +'kg m**-2 s**-1' = { + table2Version = 207 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'kg m**-2 s**-1' = { + table2Version = 207 ; + indicatorOfParameter = 79 ; + indicatorOfTypeOfLevel = 1 ; + } +#calibrated forecast, wind speed (gust) +'m s**-1' = { + table2Version = 207 ; + indicatorOfParameter = 187 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; +} diff --git a/definitions/grib1/localConcepts/lfpw/name.def b/definitions/grib1/localConcepts/lfpw/name.def new file mode 100644 index 000000000..8bb8813b3 --- /dev/null +++ b/definitions/grib1/localConcepts/lfpw/name.def @@ -0,0 +1,18 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total convective Precipitation +'Total convective Precipitation' = { + table2Version = 1 ; + indicatorOfParameter = 156 ; + stepType = "accum" ; + } +#Total large scale precipitation +'Total large scale precipitation' = { + table2Version = 1 ; + indicatorOfParameter = 157 ; + stepType = "accum" ; + } +#Convective Available Potential Energy instantaneous +'Convective Available Potential Energy instantaneous' = { + table2Version = 1 ; + indicatorOfParameter = 160 ; +} diff --git a/definitions/grib1/localConcepts/lfpw/paramId.def b/definitions/grib1/localConcepts/lfpw/paramId.def new file mode 100644 index 000000000..1c77729ff --- /dev/null +++ b/definitions/grib1/localConcepts/lfpw/paramId.def @@ -0,0 +1,18 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total convective Precipitation +'85001156' = { + table2Version = 1 ; + indicatorOfParameter = 156 ; + stepType = "accum" ; + } +#Total large scale precipitation +'85001157' = { + table2Version = 1 ; + indicatorOfParameter = 157 ; + stepType = "accum" ; + } +#Convective Available Potential Energy instantaneous +'85001160' = { + table2Version = 1 ; + indicatorOfParameter = 160 ; +} diff --git a/definitions/grib1/localConcepts/lfpw/shortName.def b/definitions/grib1/localConcepts/lfpw/shortName.def new file mode 100644 index 000000000..9ddf9fe65 --- /dev/null +++ b/definitions/grib1/localConcepts/lfpw/shortName.def @@ -0,0 +1,18 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total convective Precipitation +'PREC_CONVEC' = { + table2Version = 1 ; + indicatorOfParameter = 156 ; + stepType = "accum" ; + } +#Total large scale precipitation +'PREC_GDE_ECH' = { + table2Version = 1 ; + indicatorOfParameter = 157 ; + stepType = "accum" ; + } +#Convective Available Potential Energy instantaneous +'CAPE_INS' = { + table2Version = 1 ; + indicatorOfParameter = 160 ; +} diff --git a/definitions/grib1/localConcepts/lfpw/units.def b/definitions/grib1/localConcepts/lfpw/units.def new file mode 100644 index 000000000..2281de6fb --- /dev/null +++ b/definitions/grib1/localConcepts/lfpw/units.def @@ -0,0 +1,18 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total convective Precipitation +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 156 ; + stepType = "accum" ; + } +#Total large scale precipitation +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 157 ; + stepType = "accum" ; + } +#Convective Available Potential Energy instantaneous +'m**2 s**-2' = { + table2Version = 1 ; + indicatorOfParameter = 160 ; +} diff --git a/definitions/grib1/localConcepts/sbsj/name.def b/definitions/grib1/localConcepts/sbsj/name.def new file mode 100644 index 000000000..d78536992 --- /dev/null +++ b/definitions/grib1/localConcepts/sbsj/name.def @@ -0,0 +1,1136 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure +'Pressure' = { + table2Version = 254 ; + indicatorOfParameter = 1 ; + } +#Pressure reduced to msl +'Pressure reduced to msl' = { + table2Version = 254 ; + indicatorOfParameter = 2 ; + } +#Pressure tendency +'Pressure tendency' = { + table2Version = 254 ; + indicatorOfParameter = 3 ; + } +#Geopotential +'Geopotential' = { + table2Version = 254 ; + indicatorOfParameter = 6 ; + } +#Geopotential height +'Geopotential height' = { + table2Version = 254 ; + indicatorOfParameter = 7 ; + } +#Geometric height +'Geometric height' = { + table2Version = 254 ; + indicatorOfParameter = 8 ; + } +#Absolute temperature +'Absolute temperature' = { + table2Version = 254 ; + indicatorOfParameter = 11 ; + } +#Virtual temperature +'Virtual temperature' = { + table2Version = 254 ; + indicatorOfParameter = 12 ; + } +#Potential temperature +'Potential temperature' = { + table2Version = 254 ; + indicatorOfParameter = 13 ; + } +#Pseudo-adiabatic potential temperature +'Pseudo-adiabatic potential temperature' = { + table2Version = 254 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'Maximum temperature' = { + table2Version = 254 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'Minimum temperature' = { + table2Version = 254 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'Dew point temperature' = { + table2Version = 254 ; + indicatorOfParameter = 17 ; + } +#Dew point depression +'Dew point depression' = { + table2Version = 254 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'Lapse rate' = { + table2Version = 254 ; + indicatorOfParameter = 19 ; + } +#Radar spectra(1) +'Radar spectra(1)' = { + table2Version = 254 ; + indicatorOfParameter = 21 ; + } +#Radar spectra(2) +'Radar spectra(2)' = { + table2Version = 254 ; + indicatorOfParameter = 22 ; + } +#Radar spectra(3) +'Radar spectra(3)' = { + table2Version = 254 ; + indicatorOfParameter = 23 ; + } +#Temperature anomaly +'Temperature anomaly' = { + table2Version = 254 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'Pressure anomaly' = { + table2Version = 254 ; + indicatorOfParameter = 26 ; + } +#Geopot height anomaly +'Geopot height anomaly' = { + table2Version = 254 ; + indicatorOfParameter = 27 ; + } +#Wave spectra(1) +'Wave spectra(1)' = { + table2Version = 254 ; + indicatorOfParameter = 28 ; + } +#Wave spectra(2) +'Wave spectra(2)' = { + table2Version = 254 ; + indicatorOfParameter = 29 ; + } +#Wave spectra(3) +'Wave spectra(3)' = { + table2Version = 254 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'Wind direction' = { + table2Version = 254 ; + indicatorOfParameter = 31 ; + } +#Wind speed +'Wind speed' = { + table2Version = 254 ; + indicatorOfParameter = 32 ; + } +#Zonal wind (u) +'Zonal wind (u)' = { + table2Version = 254 ; + indicatorOfParameter = 33 ; + } +#Meridional wind (v) +'Meridional wind (v)' = { + table2Version = 254 ; + indicatorOfParameter = 34 ; + } +#Stream function +'Stream function' = { + table2Version = 254 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'Velocity potential' = { + table2Version = 254 ; + indicatorOfParameter = 36 ; + } +#Sigma coord vert vel +'Sigma coord vert vel' = { + table2Version = 254 ; + indicatorOfParameter = 38 ; + } +#Omega +'Omega' = { + table2Version = 254 ; + indicatorOfParameter = 39 ; + } +#Vertical velocity +'Vertical velocity' = { + table2Version = 254 ; + indicatorOfParameter = 40 ; + } +#Absolute vorticity +'Absolute vorticity' = { + table2Version = 254 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'Absolute divergence' = { + table2Version = 254 ; + indicatorOfParameter = 42 ; + } +#Vorticity +'Vorticity' = { + table2Version = 254 ; + indicatorOfParameter = 43 ; + } +#Divergence +'Divergence' = { + table2Version = 254 ; + indicatorOfParameter = 44 ; + } +#Vertical u-comp shear +'Vertical u-comp shear' = { + table2Version = 254 ; + indicatorOfParameter = 45 ; + } +#Vert v-comp shear +'Vert v-comp shear' = { + table2Version = 254 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'Direction of current' = { + table2Version = 254 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'Speed of current' = { + table2Version = 254 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'U-component of current' = { + table2Version = 254 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'V-component of current' = { + table2Version = 254 ; + indicatorOfParameter = 50 ; + } +#Specific humidity +'Specific humidity' = { + table2Version = 254 ; + indicatorOfParameter = 51 ; + } +#Relative humidity +'Relative humidity' = { + table2Version = 254 ; + indicatorOfParameter = 52 ; + } +#Humidity mixing ratio +'Humidity mixing ratio' = { + table2Version = 254 ; + indicatorOfParameter = 53 ; + } +#Inst. precipitable water +'Inst. precipitable water' = { + table2Version = 254 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'Vapour pressure' = { + table2Version = 254 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'Saturation deficit' = { + table2Version = 254 ; + indicatorOfParameter = 56 ; + } +#Evaporation +'Evaporation' = { + table2Version = 254 ; + indicatorOfParameter = 57 ; + } +#Precipitation rate +'Precipitation rate' = { + table2Version = 254 ; + indicatorOfParameter = 59 ; + } +#Thunder probability +'Thunder probability' = { + table2Version = 254 ; + indicatorOfParameter = 60 ; + } +#Total precipitation +'Total precipitation' = { + table2Version = 254 ; + indicatorOfParameter = 61 ; + } +#Large scale precipitation +'Large scale precipitation' = { + table2Version = 254 ; + indicatorOfParameter = 62 ; + } +#Convective precipitation +'Convective precipitation' = { + table2Version = 254 ; + indicatorOfParameter = 63 ; + } +#Snowfall +'Snowfall' = { + table2Version = 254 ; + indicatorOfParameter = 64 ; + } +#Wat equiv acc snow depth +'Wat equiv acc snow depth' = { + table2Version = 254 ; + indicatorOfParameter = 65 ; + } +#Snow depth +'Snow depth' = { + table2Version = 254 ; + indicatorOfParameter = 66 ; + } +#Mixed layer depth +'Mixed layer depth' = { + table2Version = 254 ; + indicatorOfParameter = 67 ; + } +#Trans thermocline depth +'Trans thermocline depth' = { + table2Version = 254 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'Main thermocline depth' = { + table2Version = 254 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anom +'Main thermocline anom' = { + table2Version = 254 ; + indicatorOfParameter = 70 ; + } +#Cloud cover +'Cloud cover' = { + table2Version = 254 ; + indicatorOfParameter = 71 ; + } +#Convective cloud cover +'Convective cloud cover' = { + table2Version = 254 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'Low cloud cover' = { + table2Version = 254 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'Medium cloud cover' = { + table2Version = 254 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'High cloud cover' = { + table2Version = 254 ; + indicatorOfParameter = 75 ; + } +#Cloud water +'Cloud water' = { + table2Version = 254 ; + indicatorOfParameter = 76 ; + } +#Best lifted index (to 500 hpa) +'Best lifted index (to 500 hpa)' = { + table2Version = 254 ; + indicatorOfParameter = 77 ; + } +#Land sea mask +'Land sea mask' = { + table2Version = 254 ; + indicatorOfParameter = 81 ; + } +#Dev sea_lev from mean +'Dev sea_lev from mean' = { + table2Version = 254 ; + indicatorOfParameter = 82 ; + } +#Roughness length +'Roughness length' = { + table2Version = 254 ; + indicatorOfParameter = 83 ; + } +#Albedo +'Albedo' = { + table2Version = 254 ; + indicatorOfParameter = 84 ; + } +#Deep soil temperature +'Deep soil temperature' = { + table2Version = 254 ; + indicatorOfParameter = 85 ; + } +#Soil moisture content +'Soil moisture content' = { + table2Version = 254 ; + indicatorOfParameter = 86 ; + } +#Vegetation +'Vegetation' = { + table2Version = 254 ; + indicatorOfParameter = 87 ; + } +#Density +'Density' = { + table2Version = 254 ; + indicatorOfParameter = 89 ; + } +#Ice concentration +'Ice concentration' = { + table2Version = 254 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'Ice thickness' = { + table2Version = 254 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'Direction of ice drift' = { + table2Version = 254 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'Speed of ice drift' = { + table2Version = 254 ; + indicatorOfParameter = 94 ; + } +#U-comp of ice drift +'U-comp of ice drift' = { + table2Version = 254 ; + indicatorOfParameter = 95 ; + } +#V-comp of ice drift +'V-comp of ice drift' = { + table2Version = 254 ; + indicatorOfParameter = 96 ; + } +#Ice growth +'Ice growth' = { + table2Version = 254 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'Ice divergence' = { + table2Version = 254 ; + indicatorOfParameter = 98 ; + } +#Sig hgt com wave/swell +'Sig hgt com wave/swell' = { + table2Version = 254 ; + indicatorOfParameter = 100 ; + } +#Direction of wind wave +'Direction of wind wave' = { + table2Version = 254 ; + indicatorOfParameter = 101 ; + } +#Sig hght of wind waves +'Sig hght of wind waves' = { + table2Version = 254 ; + indicatorOfParameter = 102 ; + } +#Mean period wind waves +'Mean period wind waves' = { + table2Version = 254 ; + indicatorOfParameter = 103 ; + } +#Direction of swell wave +'Direction of swell wave' = { + table2Version = 254 ; + indicatorOfParameter = 104 ; + } +#Sig height swell waves +'Sig height swell waves' = { + table2Version = 254 ; + indicatorOfParameter = 105 ; + } +#Mean period swell waves +'Mean period swell waves' = { + table2Version = 254 ; + indicatorOfParameter = 106 ; + } +#Primary wave direction +'Primary wave direction' = { + table2Version = 254 ; + indicatorOfParameter = 107 ; + } +#Prim wave mean period +'Prim wave mean period' = { + table2Version = 254 ; + indicatorOfParameter = 108 ; + } +#Second wave direction +'Second wave direction' = { + table2Version = 254 ; + indicatorOfParameter = 109 ; + } +#Second wave mean period +'Second wave mean period' = { + table2Version = 254 ; + indicatorOfParameter = 110 ; + } +#Short wave absorbed at ground +'Short wave absorbed at ground' = { + table2Version = 254 ; + indicatorOfParameter = 111 ; + } +#Net long wave at bottom +'Net long wave at bottom' = { + table2Version = 254 ; + indicatorOfParameter = 112 ; + } +#Net short-wav rad(top) +'Net short-wav rad(top)' = { + table2Version = 254 ; + indicatorOfParameter = 113 ; + } +#Outgoing long wave at top +'Outgoing long wave at top' = { + table2Version = 254 ; + indicatorOfParameter = 114 ; + } +#Long-wav rad +'Long-wav rad' = { + table2Version = 254 ; + indicatorOfParameter = 115 ; + } +#Short wave absorbed by earth/atmosphere +'Short wave absorbed by earth/atmosphere' = { + table2Version = 254 ; + indicatorOfParameter = 116 ; + } +#Global radiation +'Global radiation' = { + table2Version = 254 ; + indicatorOfParameter = 117 ; + } +#Latent heat flux from surface +'Latent heat flux from surface' = { + table2Version = 254 ; + indicatorOfParameter = 121 ; + } +#Sensible heat flux from surface +'Sensible heat flux from surface' = { + table2Version = 254 ; + indicatorOfParameter = 122 ; + } +#Bound layer dissipation +'Bound layer dissipation' = { + table2Version = 254 ; + indicatorOfParameter = 123 ; + } +#Image +'Image' = { + table2Version = 254 ; + indicatorOfParameter = 127 ; + } +#2 metre temperature +'2 metre temperature' = { + table2Version = 254 ; + indicatorOfParameter = 128 ; + } +#2 metre dewpoint temperature +'2 metre dewpoint temperature' = { + table2Version = 254 ; + indicatorOfParameter = 129 ; + } +#10 metre u-wind component +'10 metre u-wind component' = { + table2Version = 254 ; + indicatorOfParameter = 130 ; + } +#10 metre v-wind component +'10 metre v-wind component' = { + table2Version = 254 ; + indicatorOfParameter = 131 ; + } +#Topography +'Topography' = { + table2Version = 254 ; + indicatorOfParameter = 132 ; + } +#Geometric mean surface pressure +'Geometric mean surface pressure' = { + table2Version = 254 ; + indicatorOfParameter = 133 ; + } +#Ln surface pressure +'Ln surface pressure' = { + table2Version = 254 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'Surface pressure' = { + table2Version = 254 ; + indicatorOfParameter = 135 ; + } +#M s l pressure (mesinger method) +'M s l pressure (mesinger method)' = { + table2Version = 254 ; + indicatorOfParameter = 136 ; + } +#Mask +'Mask' = { + table2Version = 254 ; + indicatorOfParameter = 137 ; + } +#Maximum u-wind +'Maximum u-wind' = { + table2Version = 254 ; + indicatorOfParameter = 138 ; + } +#Maximum v-wind +'Maximum v-wind' = { + table2Version = 254 ; + indicatorOfParameter = 139 ; + } +#Convective avail. pot.energy +'Convective avail. pot.energy' = { + table2Version = 254 ; + indicatorOfParameter = 140 ; + } +#Convective inhib. energy +'Convective inhib. energy' = { + table2Version = 254 ; + indicatorOfParameter = 141 ; + } +#Convective latent heating +'Convective latent heating' = { + table2Version = 254 ; + indicatorOfParameter = 142 ; + } +#Convective moisture source +'Convective moisture source' = { + table2Version = 254 ; + indicatorOfParameter = 143 ; + } +#Shallow conv. moisture source +'Shallow conv. moisture source' = { + table2Version = 254 ; + indicatorOfParameter = 144 ; + } +#Shallow convective heating +'Shallow convective heating' = { + table2Version = 254 ; + indicatorOfParameter = 145 ; + } +#Maximum wind press. lvl +'Maximum wind press. lvl' = { + table2Version = 254 ; + indicatorOfParameter = 146 ; + } +#Storm motion u-component +'Storm motion u-component' = { + table2Version = 254 ; + indicatorOfParameter = 147 ; + } +#Storm motion v-component +'Storm motion v-component' = { + table2Version = 254 ; + indicatorOfParameter = 148 ; + } +#Mean cloud cover +'Mean cloud cover' = { + table2Version = 254 ; + indicatorOfParameter = 149 ; + } +#Pressure at cloud base +'Pressure at cloud base' = { + table2Version = 254 ; + indicatorOfParameter = 150 ; + } +#Pressure at cloud top +'Pressure at cloud top' = { + table2Version = 254 ; + indicatorOfParameter = 151 ; + } +#Freezing level height +'Freezing level height' = { + table2Version = 254 ; + indicatorOfParameter = 152 ; + } +#Freezing level relative humidity +'Freezing level relative humidity' = { + table2Version = 254 ; + indicatorOfParameter = 153 ; + } +#Flight levels temperature +'Flight levels temperature' = { + table2Version = 254 ; + indicatorOfParameter = 154 ; + } +#Flight levels u-wind +'Flight levels u-wind' = { + table2Version = 254 ; + indicatorOfParameter = 155 ; + } +#Flight levels v-wind +'Flight levels v-wind' = { + table2Version = 254 ; + indicatorOfParameter = 156 ; + } +#Tropopause pressure +'Tropopause pressure' = { + table2Version = 254 ; + indicatorOfParameter = 157 ; + } +#Tropopause temperature +'Tropopause temperature' = { + table2Version = 254 ; + indicatorOfParameter = 158 ; + } +#Tropopause u-wind component +'Tropopause u-wind component' = { + table2Version = 254 ; + indicatorOfParameter = 159 ; + } +#Tropopause v-wind component +'Tropopause v-wind component' = { + table2Version = 254 ; + indicatorOfParameter = 160 ; + } +#Gravity wave drag du/dt +'Gravity wave drag du/dt' = { + table2Version = 254 ; + indicatorOfParameter = 162 ; + } +#Gravity wave drag dv/dt +'Gravity wave drag dv/dt' = { + table2Version = 254 ; + indicatorOfParameter = 163 ; + } +#Gravity wave drag sfc zonal stress +'Gravity wave drag sfc zonal stress' = { + table2Version = 254 ; + indicatorOfParameter = 164 ; + } +#Gravity wave drag sfc meridional stress +'Gravity wave drag sfc meridional stress' = { + table2Version = 254 ; + indicatorOfParameter = 165 ; + } +#Divergence of specific humidity +'Divergence of specific humidity' = { + table2Version = 254 ; + indicatorOfParameter = 167 ; + } +#Horiz. moisture flux conv. +'Horiz. moisture flux conv.' = { + table2Version = 254 ; + indicatorOfParameter = 168 ; + } +#Vert. integrated moisture flux conv. +'Vert. integrated moisture flux conv.' = { + table2Version = 254 ; + indicatorOfParameter = 169 ; + } +#Vertical moisture advection +'Vertical moisture advection' = { + table2Version = 254 ; + indicatorOfParameter = 170 ; + } +#Neg. hum. corr. moisture source +'Neg. hum. corr. moisture source' = { + table2Version = 254 ; + indicatorOfParameter = 171 ; + } +#Large scale latent heating +'Large scale latent heating' = { + table2Version = 254 ; + indicatorOfParameter = 172 ; + } +#Large scale moisture source +'Large scale moisture source' = { + table2Version = 254 ; + indicatorOfParameter = 173 ; + } +#Soil moisture availability +'Soil moisture availability' = { + table2Version = 254 ; + indicatorOfParameter = 174 ; + } +#Soil temperature of root zone +'Soil temperature of root zone' = { + table2Version = 254 ; + indicatorOfParameter = 175 ; + } +#Bare soil latent heat +'Bare soil latent heat' = { + table2Version = 254 ; + indicatorOfParameter = 176 ; + } +#Potential sfc evaporation +'Potential sfc evaporation' = { + table2Version = 254 ; + indicatorOfParameter = 177 ; + } +#Runoff +'Runoff' = { + table2Version = 254 ; + indicatorOfParameter = 178 ; + } +#Interception loss +'Interception loss' = { + table2Version = 254 ; + indicatorOfParameter = 179 ; + } +#Vapor pressure of canopy air space +'Vapor pressure of canopy air space' = { + table2Version = 254 ; + indicatorOfParameter = 180 ; + } +#Surface spec humidity +'Surface spec humidity' = { + table2Version = 254 ; + indicatorOfParameter = 181 ; + } +#Soil wetness of surface +'Soil wetness of surface' = { + table2Version = 254 ; + indicatorOfParameter = 182 ; + } +#Soil wetness of root zone +'Soil wetness of root zone' = { + table2Version = 254 ; + indicatorOfParameter = 183 ; + } +#Soil wetness of drainage zone +'Soil wetness of drainage zone' = { + table2Version = 254 ; + indicatorOfParameter = 184 ; + } +#Storage on canopy +'Storage on canopy' = { + table2Version = 254 ; + indicatorOfParameter = 185 ; + } +#Storage on ground +'Storage on ground' = { + table2Version = 254 ; + indicatorOfParameter = 186 ; + } +#Surface temperature +'Surface temperature' = { + table2Version = 254 ; + indicatorOfParameter = 187 ; + } +#Surface absolute temperature +'Surface absolute temperature' = { + table2Version = 254 ; + indicatorOfParameter = 188 ; + } +#Temperature of canopy air space +'Temperature of canopy air space' = { + table2Version = 254 ; + indicatorOfParameter = 189 ; + } +#Temperature at canopy +'Temperature at canopy' = { + table2Version = 254 ; + indicatorOfParameter = 190 ; + } +#Ground/surface cover temperature +'Ground/surface cover temperature' = { + table2Version = 254 ; + indicatorOfParameter = 191 ; + } +#Surface zonal wind (u) +'Surface zonal wind (u)' = { + table2Version = 254 ; + indicatorOfParameter = 192 ; + } +#Surface zonal wind stress +'Surface zonal wind stress' = { + table2Version = 254 ; + indicatorOfParameter = 193 ; + } +#Surface meridional wind (v) +'Surface meridional wind (v)' = { + table2Version = 254 ; + indicatorOfParameter = 194 ; + } +#Surface meridional wind stress +'Surface meridional wind stress' = { + table2Version = 254 ; + indicatorOfParameter = 195 ; + } +#Surface momentum flux +'Surface momentum flux' = { + table2Version = 254 ; + indicatorOfParameter = 196 ; + } +#Incident short wave flux +'Incident short wave flux' = { + table2Version = 254 ; + indicatorOfParameter = 197 ; + } +#Time ave ground ht flx +'Time ave ground ht flx' = { + table2Version = 254 ; + indicatorOfParameter = 198 ; + } +#Net long wave at bottom (clear) +'Net long wave at bottom (clear)' = { + table2Version = 254 ; + indicatorOfParameter = 200 ; + } +#Outgoing long wave at top (clear) +'Outgoing long wave at top (clear)' = { + table2Version = 254 ; + indicatorOfParameter = 201 ; + } +#Short wv absrbd by earth/atmos (clear) +'Short wv absrbd by earth/atmos (clear)' = { + table2Version = 254 ; + indicatorOfParameter = 202 ; + } +#Short wave absorbed at ground (clear) +'Short wave absorbed at ground (clear)' = { + table2Version = 254 ; + indicatorOfParameter = 203 ; + } +#Long wave radiative heating +'Long wave radiative heating' = { + table2Version = 254 ; + indicatorOfParameter = 205 ; + } +#Short wave radiative heating +'Short wave radiative heating' = { + table2Version = 254 ; + indicatorOfParameter = 206 ; + } +#Downward long wave at bottom +'Downward long wave at bottom' = { + table2Version = 254 ; + indicatorOfParameter = 207 ; + } +#Downward long wave at bottom (clear) +'Downward long wave at bottom (clear)' = { + table2Version = 254 ; + indicatorOfParameter = 208 ; + } +#Downward short wave at ground +'Downward short wave at ground' = { + table2Version = 254 ; + indicatorOfParameter = 209 ; + } +#Downward short wave at ground (clear) +'Downward short wave at ground (clear)' = { + table2Version = 254 ; + indicatorOfParameter = 210 ; + } +#Upward long wave at bottom +'Upward long wave at bottom' = { + table2Version = 254 ; + indicatorOfParameter = 211 ; + } +#Upward short wave at ground +'Upward short wave at ground' = { + table2Version = 254 ; + indicatorOfParameter = 212 ; + } +#Upward short wave at ground (clear) +'Upward short wave at ground (clear)' = { + table2Version = 254 ; + indicatorOfParameter = 213 ; + } +#Upward short wave at top +'Upward short wave at top' = { + table2Version = 254 ; + indicatorOfParameter = 214 ; + } +#Upward short wave at top (clear) +'Upward short wave at top (clear)' = { + table2Version = 254 ; + indicatorOfParameter = 215 ; + } +#Horizontal heating diffusion +'Horizontal heating diffusion' = { + table2Version = 254 ; + indicatorOfParameter = 218 ; + } +#Horizontal moisture diffusion +'Horizontal moisture diffusion' = { + table2Version = 254 ; + indicatorOfParameter = 219 ; + } +#Horizontal divergence diffusion +'Horizontal divergence diffusion' = { + table2Version = 254 ; + indicatorOfParameter = 220 ; + } +#Horizontal vorticity diffusion +'Horizontal vorticity diffusion' = { + table2Version = 254 ; + indicatorOfParameter = 221 ; + } +#Vertical diff. moisture source +'Vertical diff. moisture source' = { + table2Version = 254 ; + indicatorOfParameter = 222 ; + } +#Vertical diffusion du/dt +'Vertical diffusion du/dt' = { + table2Version = 254 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion dv/dt +'Vertical diffusion dv/dt' = { + table2Version = 254 ; + indicatorOfParameter = 224 ; + } +#Vertical diffusion heating +'Vertical diffusion heating' = { + table2Version = 254 ; + indicatorOfParameter = 225 ; + } +#Surface relative humidity +'Surface relative humidity' = { + table2Version = 254 ; + indicatorOfParameter = 226 ; + } +#Vertical dist total cloud cover +'Vertical dist total cloud cover' = { + table2Version = 254 ; + indicatorOfParameter = 227 ; + } +#Time mean surface zonal wind (u) +'Time mean surface zonal wind (u)' = { + table2Version = 254 ; + indicatorOfParameter = 230 ; + } +#Time mean surface meridional wind (v) +'Time mean surface meridional wind (v)' = { + table2Version = 254 ; + indicatorOfParameter = 231 ; + } +#Time mean surface absolute temperature +'Time mean surface absolute temperature' = { + table2Version = 254 ; + indicatorOfParameter = 232 ; + } +#Time mean surface relative humidity +'Time mean surface relative humidity' = { + table2Version = 254 ; + indicatorOfParameter = 233 ; + } +#Time mean absolute temperature +'Time mean absolute temperature' = { + table2Version = 254 ; + indicatorOfParameter = 234 ; + } +#Time mean deep soil temperature +'Time mean deep soil temperature' = { + table2Version = 254 ; + indicatorOfParameter = 235 ; + } +#Time mean derived omega +'Time mean derived omega' = { + table2Version = 254 ; + indicatorOfParameter = 236 ; + } +#Time mean divergence +'Time mean divergence' = { + table2Version = 254 ; + indicatorOfParameter = 237 ; + } +#Time mean geopotential height +'Time mean geopotential height' = { + table2Version = 254 ; + indicatorOfParameter = 238 ; + } +#Time mean log surface pressure +'Time mean log surface pressure' = { + table2Version = 254 ; + indicatorOfParameter = 239 ; + } +#Time mean mask +'Time mean mask' = { + table2Version = 254 ; + indicatorOfParameter = 240 ; + } +#Time mean meridional wind (v) +'Time mean meridional wind (v)' = { + table2Version = 254 ; + indicatorOfParameter = 241 ; + } +#Time mean omega +'Time mean omega' = { + table2Version = 254 ; + indicatorOfParameter = 242 ; + } +#Time mean potential temperature +'Time mean potential temperature' = { + table2Version = 254 ; + indicatorOfParameter = 243 ; + } +#Time mean precip. water +'Time mean precip. water' = { + table2Version = 254 ; + indicatorOfParameter = 244 ; + } +#Time mean relative humidity +'Time mean relative humidity' = { + table2Version = 254 ; + indicatorOfParameter = 245 ; + } +#Time mean sea level pressure +'Time mean sea level pressure' = { + table2Version = 254 ; + indicatorOfParameter = 246 ; + } +#Time mean sigmadot +'Time mean sigmadot' = { + table2Version = 254 ; + indicatorOfParameter = 247 ; + } +#Time mean specific humidity +'Time mean specific humidity' = { + table2Version = 254 ; + indicatorOfParameter = 248 ; + } +#Time mean stream function +'Time mean stream function' = { + table2Version = 254 ; + indicatorOfParameter = 249 ; + } +#Time mean surface pressure +'Time mean surface pressure' = { + table2Version = 254 ; + indicatorOfParameter = 250 ; + } +#Time mean surface temperature +'Time mean surface temperature' = { + table2Version = 254 ; + indicatorOfParameter = 251 ; + } +#Time mean velocity potential +'Time mean velocity potential' = { + table2Version = 254 ; + indicatorOfParameter = 252 ; + } +#Time mean virtual temperature +'Time mean virtual temperature' = { + table2Version = 254 ; + indicatorOfParameter = 253 ; + } +#Time mean vorticity +'Time mean vorticity' = { + table2Version = 254 ; + indicatorOfParameter = 254 ; + } +#Time mean zonal wind (u) +'Time mean zonal wind (u)' = { + table2Version = 254 ; + indicatorOfParameter = 255 ; +} diff --git a/definitions/grib1/localConcepts/sbsj/paramId.def b/definitions/grib1/localConcepts/sbsj/paramId.def new file mode 100644 index 000000000..9b6a5c3a1 --- /dev/null +++ b/definitions/grib1/localConcepts/sbsj/paramId.def @@ -0,0 +1,1136 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure +'300001' = { + table2Version = 254 ; + indicatorOfParameter = 1 ; + } +#Pressure reduced to msl +'300002' = { + table2Version = 254 ; + indicatorOfParameter = 2 ; + } +#Pressure tendency +'300003' = { + table2Version = 254 ; + indicatorOfParameter = 3 ; + } +#Geopotential +'300006' = { + table2Version = 254 ; + indicatorOfParameter = 6 ; + } +#Geopotential height +'300007' = { + table2Version = 254 ; + indicatorOfParameter = 7 ; + } +#Geometric height +'300008' = { + table2Version = 254 ; + indicatorOfParameter = 8 ; + } +#Absolute temperature +'300011' = { + table2Version = 254 ; + indicatorOfParameter = 11 ; + } +#Virtual temperature +'300012' = { + table2Version = 254 ; + indicatorOfParameter = 12 ; + } +#Potential temperature +'300013' = { + table2Version = 254 ; + indicatorOfParameter = 13 ; + } +#Pseudo-adiabatic potential temperature +'300014' = { + table2Version = 254 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'300015' = { + table2Version = 254 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'300016' = { + table2Version = 254 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'300017' = { + table2Version = 254 ; + indicatorOfParameter = 17 ; + } +#Dew point depression +'300018' = { + table2Version = 254 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'300019' = { + table2Version = 254 ; + indicatorOfParameter = 19 ; + } +#Radar spectra(1) +'300021' = { + table2Version = 254 ; + indicatorOfParameter = 21 ; + } +#Radar spectra(2) +'300022' = { + table2Version = 254 ; + indicatorOfParameter = 22 ; + } +#Radar spectra(3) +'300023' = { + table2Version = 254 ; + indicatorOfParameter = 23 ; + } +#Temperature anomaly +'300025' = { + table2Version = 254 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'300026' = { + table2Version = 254 ; + indicatorOfParameter = 26 ; + } +#Geopot height anomaly +'300027' = { + table2Version = 254 ; + indicatorOfParameter = 27 ; + } +#Wave spectra(1) +'300028' = { + table2Version = 254 ; + indicatorOfParameter = 28 ; + } +#Wave spectra(2) +'300029' = { + table2Version = 254 ; + indicatorOfParameter = 29 ; + } +#Wave spectra(3) +'300030' = { + table2Version = 254 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'300031' = { + table2Version = 254 ; + indicatorOfParameter = 31 ; + } +#Wind speed +'300032' = { + table2Version = 254 ; + indicatorOfParameter = 32 ; + } +#Zonal wind (u) +'300033' = { + table2Version = 254 ; + indicatorOfParameter = 33 ; + } +#Meridional wind (v) +'300034' = { + table2Version = 254 ; + indicatorOfParameter = 34 ; + } +#Stream function +'300035' = { + table2Version = 254 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'300036' = { + table2Version = 254 ; + indicatorOfParameter = 36 ; + } +#Sigma coord vert vel +'300038' = { + table2Version = 254 ; + indicatorOfParameter = 38 ; + } +#Omega +'300039' = { + table2Version = 254 ; + indicatorOfParameter = 39 ; + } +#Vertical velocity +'300040' = { + table2Version = 254 ; + indicatorOfParameter = 40 ; + } +#Absolute vorticity +'300041' = { + table2Version = 254 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'300042' = { + table2Version = 254 ; + indicatorOfParameter = 42 ; + } +#Vorticity +'300043' = { + table2Version = 254 ; + indicatorOfParameter = 43 ; + } +#Divergence +'300044' = { + table2Version = 254 ; + indicatorOfParameter = 44 ; + } +#Vertical u-comp shear +'300045' = { + table2Version = 254 ; + indicatorOfParameter = 45 ; + } +#Vert v-comp shear +'300046' = { + table2Version = 254 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'300047' = { + table2Version = 254 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'300048' = { + table2Version = 254 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'300049' = { + table2Version = 254 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'300050' = { + table2Version = 254 ; + indicatorOfParameter = 50 ; + } +#Specific humidity +'300051' = { + table2Version = 254 ; + indicatorOfParameter = 51 ; + } +#Relative humidity +'300052' = { + table2Version = 254 ; + indicatorOfParameter = 52 ; + } +#Humidity mixing ratio +'300053' = { + table2Version = 254 ; + indicatorOfParameter = 53 ; + } +#Inst. precipitable water +'300054' = { + table2Version = 254 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'300055' = { + table2Version = 254 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'300056' = { + table2Version = 254 ; + indicatorOfParameter = 56 ; + } +#Evaporation +'300057' = { + table2Version = 254 ; + indicatorOfParameter = 57 ; + } +#Precipitation rate +'300059' = { + table2Version = 254 ; + indicatorOfParameter = 59 ; + } +#Thunder probability +'300060' = { + table2Version = 254 ; + indicatorOfParameter = 60 ; + } +#Total precipitation +'300061' = { + table2Version = 254 ; + indicatorOfParameter = 61 ; + } +#Large scale precipitation +'300062' = { + table2Version = 254 ; + indicatorOfParameter = 62 ; + } +#Convective precipitation +'300063' = { + table2Version = 254 ; + indicatorOfParameter = 63 ; + } +#Snowfall +'300064' = { + table2Version = 254 ; + indicatorOfParameter = 64 ; + } +#Wat equiv acc snow depth +'300065' = { + table2Version = 254 ; + indicatorOfParameter = 65 ; + } +#Snow depth +'300066' = { + table2Version = 254 ; + indicatorOfParameter = 66 ; + } +#Mixed layer depth +'300067' = { + table2Version = 254 ; + indicatorOfParameter = 67 ; + } +#Trans thermocline depth +'300068' = { + table2Version = 254 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'300069' = { + table2Version = 254 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anom +'300070' = { + table2Version = 254 ; + indicatorOfParameter = 70 ; + } +#Cloud cover +'300071' = { + table2Version = 254 ; + indicatorOfParameter = 71 ; + } +#Convective cloud cover +'300072' = { + table2Version = 254 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'300073' = { + table2Version = 254 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'300074' = { + table2Version = 254 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'300075' = { + table2Version = 254 ; + indicatorOfParameter = 75 ; + } +#Cloud water +'300076' = { + table2Version = 254 ; + indicatorOfParameter = 76 ; + } +#Best lifted index (to 500 hpa) +'300077' = { + table2Version = 254 ; + indicatorOfParameter = 77 ; + } +#Land sea mask +'300081' = { + table2Version = 254 ; + indicatorOfParameter = 81 ; + } +#Dev sea_lev from mean +'300082' = { + table2Version = 254 ; + indicatorOfParameter = 82 ; + } +#Roughness length +'300083' = { + table2Version = 254 ; + indicatorOfParameter = 83 ; + } +#Albedo +'300084' = { + table2Version = 254 ; + indicatorOfParameter = 84 ; + } +#Deep soil temperature +'300085' = { + table2Version = 254 ; + indicatorOfParameter = 85 ; + } +#Soil moisture content +'300086' = { + table2Version = 254 ; + indicatorOfParameter = 86 ; + } +#Vegetation +'300087' = { + table2Version = 254 ; + indicatorOfParameter = 87 ; + } +#Density +'300089' = { + table2Version = 254 ; + indicatorOfParameter = 89 ; + } +#Ice concentration +'300091' = { + table2Version = 254 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'300092' = { + table2Version = 254 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'300093' = { + table2Version = 254 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'300094' = { + table2Version = 254 ; + indicatorOfParameter = 94 ; + } +#U-comp of ice drift +'300095' = { + table2Version = 254 ; + indicatorOfParameter = 95 ; + } +#V-comp of ice drift +'300096' = { + table2Version = 254 ; + indicatorOfParameter = 96 ; + } +#Ice growth +'300097' = { + table2Version = 254 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'300098' = { + table2Version = 254 ; + indicatorOfParameter = 98 ; + } +#Sig hgt com wave/swell +'300100' = { + table2Version = 254 ; + indicatorOfParameter = 100 ; + } +#Direction of wind wave +'300101' = { + table2Version = 254 ; + indicatorOfParameter = 101 ; + } +#Sig hght of wind waves +'300102' = { + table2Version = 254 ; + indicatorOfParameter = 102 ; + } +#Mean period wind waves +'300103' = { + table2Version = 254 ; + indicatorOfParameter = 103 ; + } +#Direction of swell wave +'300104' = { + table2Version = 254 ; + indicatorOfParameter = 104 ; + } +#Sig height swell waves +'300105' = { + table2Version = 254 ; + indicatorOfParameter = 105 ; + } +#Mean period swell waves +'300106' = { + table2Version = 254 ; + indicatorOfParameter = 106 ; + } +#Primary wave direction +'300107' = { + table2Version = 254 ; + indicatorOfParameter = 107 ; + } +#Prim wave mean period +'300108' = { + table2Version = 254 ; + indicatorOfParameter = 108 ; + } +#Second wave direction +'300109' = { + table2Version = 254 ; + indicatorOfParameter = 109 ; + } +#Second wave mean period +'300110' = { + table2Version = 254 ; + indicatorOfParameter = 110 ; + } +#Short wave absorbed at ground +'300111' = { + table2Version = 254 ; + indicatorOfParameter = 111 ; + } +#Net long wave at bottom +'300112' = { + table2Version = 254 ; + indicatorOfParameter = 112 ; + } +#Net short-wav rad(top) +'300113' = { + table2Version = 254 ; + indicatorOfParameter = 113 ; + } +#Outgoing long wave at top +'300114' = { + table2Version = 254 ; + indicatorOfParameter = 114 ; + } +#Long-wav rad +'300115' = { + table2Version = 254 ; + indicatorOfParameter = 115 ; + } +#Short wave absorbed by earth/atmosphere +'300116' = { + table2Version = 254 ; + indicatorOfParameter = 116 ; + } +#Global radiation +'300117' = { + table2Version = 254 ; + indicatorOfParameter = 117 ; + } +#Latent heat flux from surface +'300121' = { + table2Version = 254 ; + indicatorOfParameter = 121 ; + } +#Sensible heat flux from surface +'300122' = { + table2Version = 254 ; + indicatorOfParameter = 122 ; + } +#Bound layer dissipation +'300123' = { + table2Version = 254 ; + indicatorOfParameter = 123 ; + } +#Image +'300127' = { + table2Version = 254 ; + indicatorOfParameter = 127 ; + } +#2 metre temperature +'300128' = { + table2Version = 254 ; + indicatorOfParameter = 128 ; + } +#2 metre dewpoint temperature +'300129' = { + table2Version = 254 ; + indicatorOfParameter = 129 ; + } +#10 metre u-wind component +'300130' = { + table2Version = 254 ; + indicatorOfParameter = 130 ; + } +#10 metre v-wind component +'300131' = { + table2Version = 254 ; + indicatorOfParameter = 131 ; + } +#Topography +'300132' = { + table2Version = 254 ; + indicatorOfParameter = 132 ; + } +#Geometric mean surface pressure +'300133' = { + table2Version = 254 ; + indicatorOfParameter = 133 ; + } +#Ln surface pressure +'300134' = { + table2Version = 254 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'300135' = { + table2Version = 254 ; + indicatorOfParameter = 135 ; + } +#M s l pressure (mesinger method) +'300136' = { + table2Version = 254 ; + indicatorOfParameter = 136 ; + } +#Mask +'300137' = { + table2Version = 254 ; + indicatorOfParameter = 137 ; + } +#Maximum u-wind +'300138' = { + table2Version = 254 ; + indicatorOfParameter = 138 ; + } +#Maximum v-wind +'300139' = { + table2Version = 254 ; + indicatorOfParameter = 139 ; + } +#Convective avail. pot.energy +'300140' = { + table2Version = 254 ; + indicatorOfParameter = 140 ; + } +#Convective inhib. energy +'300141' = { + table2Version = 254 ; + indicatorOfParameter = 141 ; + } +#Convective latent heating +'300142' = { + table2Version = 254 ; + indicatorOfParameter = 142 ; + } +#Convective moisture source +'300143' = { + table2Version = 254 ; + indicatorOfParameter = 143 ; + } +#Shallow conv. moisture source +'300144' = { + table2Version = 254 ; + indicatorOfParameter = 144 ; + } +#Shallow convective heating +'300145' = { + table2Version = 254 ; + indicatorOfParameter = 145 ; + } +#Maximum wind press. lvl +'300146' = { + table2Version = 254 ; + indicatorOfParameter = 146 ; + } +#Storm motion u-component +'300147' = { + table2Version = 254 ; + indicatorOfParameter = 147 ; + } +#Storm motion v-component +'300148' = { + table2Version = 254 ; + indicatorOfParameter = 148 ; + } +#Mean cloud cover +'300149' = { + table2Version = 254 ; + indicatorOfParameter = 149 ; + } +#Pressure at cloud base +'300150' = { + table2Version = 254 ; + indicatorOfParameter = 150 ; + } +#Pressure at cloud top +'300151' = { + table2Version = 254 ; + indicatorOfParameter = 151 ; + } +#Freezing level height +'300152' = { + table2Version = 254 ; + indicatorOfParameter = 152 ; + } +#Freezing level relative humidity +'300153' = { + table2Version = 254 ; + indicatorOfParameter = 153 ; + } +#Flight levels temperature +'300154' = { + table2Version = 254 ; + indicatorOfParameter = 154 ; + } +#Flight levels u-wind +'300155' = { + table2Version = 254 ; + indicatorOfParameter = 155 ; + } +#Flight levels v-wind +'300156' = { + table2Version = 254 ; + indicatorOfParameter = 156 ; + } +#Tropopause pressure +'300157' = { + table2Version = 254 ; + indicatorOfParameter = 157 ; + } +#Tropopause temperature +'300158' = { + table2Version = 254 ; + indicatorOfParameter = 158 ; + } +#Tropopause u-wind component +'300159' = { + table2Version = 254 ; + indicatorOfParameter = 159 ; + } +#Tropopause v-wind component +'300160' = { + table2Version = 254 ; + indicatorOfParameter = 160 ; + } +#Gravity wave drag du/dt +'300162' = { + table2Version = 254 ; + indicatorOfParameter = 162 ; + } +#Gravity wave drag dv/dt +'300163' = { + table2Version = 254 ; + indicatorOfParameter = 163 ; + } +#Gravity wave drag sfc zonal stress +'300164' = { + table2Version = 254 ; + indicatorOfParameter = 164 ; + } +#Gravity wave drag sfc meridional stress +'300165' = { + table2Version = 254 ; + indicatorOfParameter = 165 ; + } +#Divergence of specific humidity +'300167' = { + table2Version = 254 ; + indicatorOfParameter = 167 ; + } +#Horiz. moisture flux conv. +'300168' = { + table2Version = 254 ; + indicatorOfParameter = 168 ; + } +#Vert. integrated moisture flux conv. +'300169' = { + table2Version = 254 ; + indicatorOfParameter = 169 ; + } +#Vertical moisture advection +'300170' = { + table2Version = 254 ; + indicatorOfParameter = 170 ; + } +#Neg. hum. corr. moisture source +'300171' = { + table2Version = 254 ; + indicatorOfParameter = 171 ; + } +#Large scale latent heating +'300172' = { + table2Version = 254 ; + indicatorOfParameter = 172 ; + } +#Large scale moisture source +'300173' = { + table2Version = 254 ; + indicatorOfParameter = 173 ; + } +#Soil moisture availability +'300174' = { + table2Version = 254 ; + indicatorOfParameter = 174 ; + } +#Soil temperature of root zone +'300175' = { + table2Version = 254 ; + indicatorOfParameter = 175 ; + } +#Bare soil latent heat +'300176' = { + table2Version = 254 ; + indicatorOfParameter = 176 ; + } +#Potential sfc evaporation +'300177' = { + table2Version = 254 ; + indicatorOfParameter = 177 ; + } +#Runoff +'300178' = { + table2Version = 254 ; + indicatorOfParameter = 178 ; + } +#Interception loss +'300179' = { + table2Version = 254 ; + indicatorOfParameter = 179 ; + } +#Vapor pressure of canopy air space +'300180' = { + table2Version = 254 ; + indicatorOfParameter = 180 ; + } +#Surface spec humidity +'300181' = { + table2Version = 254 ; + indicatorOfParameter = 181 ; + } +#Soil wetness of surface +'300182' = { + table2Version = 254 ; + indicatorOfParameter = 182 ; + } +#Soil wetness of root zone +'300183' = { + table2Version = 254 ; + indicatorOfParameter = 183 ; + } +#Soil wetness of drainage zone +'300184' = { + table2Version = 254 ; + indicatorOfParameter = 184 ; + } +#Storage on canopy +'300185' = { + table2Version = 254 ; + indicatorOfParameter = 185 ; + } +#Storage on ground +'300186' = { + table2Version = 254 ; + indicatorOfParameter = 186 ; + } +#Surface temperature +'300187' = { + table2Version = 254 ; + indicatorOfParameter = 187 ; + } +#Surface absolute temperature +'300188' = { + table2Version = 254 ; + indicatorOfParameter = 188 ; + } +#Temperature of canopy air space +'300189' = { + table2Version = 254 ; + indicatorOfParameter = 189 ; + } +#Temperature at canopy +'300190' = { + table2Version = 254 ; + indicatorOfParameter = 190 ; + } +#Ground/surface cover temperature +'300191' = { + table2Version = 254 ; + indicatorOfParameter = 191 ; + } +#Surface zonal wind (u) +'300192' = { + table2Version = 254 ; + indicatorOfParameter = 192 ; + } +#Surface zonal wind stress +'300193' = { + table2Version = 254 ; + indicatorOfParameter = 193 ; + } +#Surface meridional wind (v) +'300194' = { + table2Version = 254 ; + indicatorOfParameter = 194 ; + } +#Surface meridional wind stress +'300195' = { + table2Version = 254 ; + indicatorOfParameter = 195 ; + } +#Surface momentum flux +'300196' = { + table2Version = 254 ; + indicatorOfParameter = 196 ; + } +#Incident short wave flux +'300197' = { + table2Version = 254 ; + indicatorOfParameter = 197 ; + } +#Time ave ground ht flx +'300198' = { + table2Version = 254 ; + indicatorOfParameter = 198 ; + } +#Net long wave at bottom (clear) +'300200' = { + table2Version = 254 ; + indicatorOfParameter = 200 ; + } +#Outgoing long wave at top (clear) +'300201' = { + table2Version = 254 ; + indicatorOfParameter = 201 ; + } +#Short wv absrbd by earth/atmos (clear) +'300202' = { + table2Version = 254 ; + indicatorOfParameter = 202 ; + } +#Short wave absorbed at ground (clear) +'300203' = { + table2Version = 254 ; + indicatorOfParameter = 203 ; + } +#Long wave radiative heating +'300205' = { + table2Version = 254 ; + indicatorOfParameter = 205 ; + } +#Short wave radiative heating +'300206' = { + table2Version = 254 ; + indicatorOfParameter = 206 ; + } +#Downward long wave at bottom +'300207' = { + table2Version = 254 ; + indicatorOfParameter = 207 ; + } +#Downward long wave at bottom (clear) +'300208' = { + table2Version = 254 ; + indicatorOfParameter = 208 ; + } +#Downward short wave at ground +'300209' = { + table2Version = 254 ; + indicatorOfParameter = 209 ; + } +#Downward short wave at ground (clear) +'300210' = { + table2Version = 254 ; + indicatorOfParameter = 210 ; + } +#Upward long wave at bottom +'300211' = { + table2Version = 254 ; + indicatorOfParameter = 211 ; + } +#Upward short wave at ground +'300212' = { + table2Version = 254 ; + indicatorOfParameter = 212 ; + } +#Upward short wave at ground (clear) +'300213' = { + table2Version = 254 ; + indicatorOfParameter = 213 ; + } +#Upward short wave at top +'300214' = { + table2Version = 254 ; + indicatorOfParameter = 214 ; + } +#Upward short wave at top (clear) +'300215' = { + table2Version = 254 ; + indicatorOfParameter = 215 ; + } +#Horizontal heating diffusion +'300218' = { + table2Version = 254 ; + indicatorOfParameter = 218 ; + } +#Horizontal moisture diffusion +'300219' = { + table2Version = 254 ; + indicatorOfParameter = 219 ; + } +#Horizontal divergence diffusion +'300220' = { + table2Version = 254 ; + indicatorOfParameter = 220 ; + } +#Horizontal vorticity diffusion +'300221' = { + table2Version = 254 ; + indicatorOfParameter = 221 ; + } +#Vertical diff. moisture source +'300222' = { + table2Version = 254 ; + indicatorOfParameter = 222 ; + } +#Vertical diffusion du/dt +'300223' = { + table2Version = 254 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion dv/dt +'300224' = { + table2Version = 254 ; + indicatorOfParameter = 224 ; + } +#Vertical diffusion heating +'300225' = { + table2Version = 254 ; + indicatorOfParameter = 225 ; + } +#Surface relative humidity +'300226' = { + table2Version = 254 ; + indicatorOfParameter = 226 ; + } +#Vertical dist total cloud cover +'300227' = { + table2Version = 254 ; + indicatorOfParameter = 227 ; + } +#Time mean surface zonal wind (u) +'300230' = { + table2Version = 254 ; + indicatorOfParameter = 230 ; + } +#Time mean surface meridional wind (v) +'300231' = { + table2Version = 254 ; + indicatorOfParameter = 231 ; + } +#Time mean surface absolute temperature +'300232' = { + table2Version = 254 ; + indicatorOfParameter = 232 ; + } +#Time mean surface relative humidity +'300233' = { + table2Version = 254 ; + indicatorOfParameter = 233 ; + } +#Time mean absolute temperature +'300234' = { + table2Version = 254 ; + indicatorOfParameter = 234 ; + } +#Time mean deep soil temperature +'300235' = { + table2Version = 254 ; + indicatorOfParameter = 235 ; + } +#Time mean derived omega +'300236' = { + table2Version = 254 ; + indicatorOfParameter = 236 ; + } +#Time mean divergence +'300237' = { + table2Version = 254 ; + indicatorOfParameter = 237 ; + } +#Time mean geopotential height +'300238' = { + table2Version = 254 ; + indicatorOfParameter = 238 ; + } +#Time mean log surface pressure +'300239' = { + table2Version = 254 ; + indicatorOfParameter = 239 ; + } +#Time mean mask +'300240' = { + table2Version = 254 ; + indicatorOfParameter = 240 ; + } +#Time mean meridional wind (v) +'300241' = { + table2Version = 254 ; + indicatorOfParameter = 241 ; + } +#Time mean omega +'300242' = { + table2Version = 254 ; + indicatorOfParameter = 242 ; + } +#Time mean potential temperature +'300243' = { + table2Version = 254 ; + indicatorOfParameter = 243 ; + } +#Time mean precip. water +'300244' = { + table2Version = 254 ; + indicatorOfParameter = 244 ; + } +#Time mean relative humidity +'300245' = { + table2Version = 254 ; + indicatorOfParameter = 245 ; + } +#Time mean sea level pressure +'300246' = { + table2Version = 254 ; + indicatorOfParameter = 246 ; + } +#Time mean sigmadot +'300247' = { + table2Version = 254 ; + indicatorOfParameter = 247 ; + } +#Time mean specific humidity +'300248' = { + table2Version = 254 ; + indicatorOfParameter = 248 ; + } +#Time mean stream function +'300249' = { + table2Version = 254 ; + indicatorOfParameter = 249 ; + } +#Time mean surface pressure +'300250' = { + table2Version = 254 ; + indicatorOfParameter = 250 ; + } +#Time mean surface temperature +'300251' = { + table2Version = 254 ; + indicatorOfParameter = 251 ; + } +#Time mean velocity potential +'300252' = { + table2Version = 254 ; + indicatorOfParameter = 252 ; + } +#Time mean virtual temperature +'300253' = { + table2Version = 254 ; + indicatorOfParameter = 253 ; + } +#Time mean vorticity +'300254' = { + table2Version = 254 ; + indicatorOfParameter = 254 ; + } +#Time mean zonal wind (u) +'300255' = { + table2Version = 254 ; + indicatorOfParameter = 255 ; +} diff --git a/definitions/grib1/localConcepts/sbsj/shortName.def b/definitions/grib1/localConcepts/sbsj/shortName.def new file mode 100644 index 000000000..626a3f615 --- /dev/null +++ b/definitions/grib1/localConcepts/sbsj/shortName.def @@ -0,0 +1,1136 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure +'pres' = { + table2Version = 254 ; + indicatorOfParameter = 1 ; + } +#Pressure reduced to msl +'psnm' = { + table2Version = 254 ; + indicatorOfParameter = 2 ; + } +#Pressure tendency +'tsps' = { + table2Version = 254 ; + indicatorOfParameter = 3 ; + } +#Geopotential +'geop' = { + table2Version = 254 ; + indicatorOfParameter = 6 ; + } +#Geopotential height +'zgeo' = { + table2Version = 254 ; + indicatorOfParameter = 7 ; + } +#Geometric height +'gzge' = { + table2Version = 254 ; + indicatorOfParameter = 8 ; + } +#Absolute temperature +'temp' = { + table2Version = 254 ; + indicatorOfParameter = 11 ; + } +#Virtual temperature +'vtmp' = { + table2Version = 254 ; + indicatorOfParameter = 12 ; + } +#Potential temperature +'ptmp' = { + table2Version = 254 ; + indicatorOfParameter = 13 ; + } +#Pseudo-adiabatic potential temperature +'psat' = { + table2Version = 254 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'mxtp' = { + table2Version = 254 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'mntp' = { + table2Version = 254 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'tpor' = { + table2Version = 254 ; + indicatorOfParameter = 17 ; + } +#Dew point depression +'dptd' = { + table2Version = 254 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'lpsr' = { + table2Version = 254 ; + indicatorOfParameter = 19 ; + } +#Radar spectra(1) +'rds1' = { + table2Version = 254 ; + indicatorOfParameter = 21 ; + } +#Radar spectra(2) +'rds2' = { + table2Version = 254 ; + indicatorOfParameter = 22 ; + } +#Radar spectra(3) +'rds3' = { + table2Version = 254 ; + indicatorOfParameter = 23 ; + } +#Temperature anomaly +'tpan' = { + table2Version = 254 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'psan' = { + table2Version = 254 ; + indicatorOfParameter = 26 ; + } +#Geopot height anomaly +'zgan' = { + table2Version = 254 ; + indicatorOfParameter = 27 ; + } +#Wave spectra(1) +'wvs1' = { + table2Version = 254 ; + indicatorOfParameter = 28 ; + } +#Wave spectra(2) +'wvs2' = { + table2Version = 254 ; + indicatorOfParameter = 29 ; + } +#Wave spectra(3) +'wvs3' = { + table2Version = 254 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'wind' = { + table2Version = 254 ; + indicatorOfParameter = 31 ; + } +#Wind speed +'wins' = { + table2Version = 254 ; + indicatorOfParameter = 32 ; + } +#Zonal wind (u) +'uvel' = { + table2Version = 254 ; + indicatorOfParameter = 33 ; + } +#Meridional wind (v) +'vvel' = { + table2Version = 254 ; + indicatorOfParameter = 34 ; + } +#Stream function +'fcor' = { + table2Version = 254 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'potv' = { + table2Version = 254 ; + indicatorOfParameter = 36 ; + } +#Sigma coord vert vel +'sgvv' = { + table2Version = 254 ; + indicatorOfParameter = 38 ; + } +#Omega +'omeg' = { + table2Version = 254 ; + indicatorOfParameter = 39 ; + } +#Vertical velocity +'omg2' = { + table2Version = 254 ; + indicatorOfParameter = 40 ; + } +#Absolute vorticity +'abvo' = { + table2Version = 254 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'abdv' = { + table2Version = 254 ; + indicatorOfParameter = 42 ; + } +#Vorticity +'vort' = { + table2Version = 254 ; + indicatorOfParameter = 43 ; + } +#Divergence +'divg' = { + table2Version = 254 ; + indicatorOfParameter = 44 ; + } +#Vertical u-comp shear +'vucs' = { + table2Version = 254 ; + indicatorOfParameter = 45 ; + } +#Vert v-comp shear +'vvcs' = { + table2Version = 254 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'dirc' = { + table2Version = 254 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'spdc' = { + table2Version = 254 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'ucpc' = { + table2Version = 254 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'vcpc' = { + table2Version = 254 ; + indicatorOfParameter = 50 ; + } +#Specific humidity +'umes' = { + table2Version = 254 ; + indicatorOfParameter = 51 ; + } +#Relative humidity +'umrl' = { + table2Version = 254 ; + indicatorOfParameter = 52 ; + } +#Humidity mixing ratio +'hmxr' = { + table2Version = 254 ; + indicatorOfParameter = 53 ; + } +#Inst. precipitable water +'agpl' = { + table2Version = 254 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'vapp' = { + table2Version = 254 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'sadf' = { + table2Version = 254 ; + indicatorOfParameter = 56 ; + } +#Evaporation +'evap' = { + table2Version = 254 ; + indicatorOfParameter = 57 ; + } +#Precipitation rate +'prcr' = { + table2Version = 254 ; + indicatorOfParameter = 59 ; + } +#Thunder probability +'thpb' = { + table2Version = 254 ; + indicatorOfParameter = 60 ; + } +#Total precipitation +'prec' = { + table2Version = 254 ; + indicatorOfParameter = 61 ; + } +#Large scale precipitation +'prge' = { + table2Version = 254 ; + indicatorOfParameter = 62 ; + } +#Convective precipitation +'prcv' = { + table2Version = 254 ; + indicatorOfParameter = 63 ; + } +#Snowfall +'neve' = { + table2Version = 254 ; + indicatorOfParameter = 64 ; + } +#Wat equiv acc snow depth +'wenv' = { + table2Version = 254 ; + indicatorOfParameter = 65 ; + } +#Snow depth +'nvde' = { + table2Version = 254 ; + indicatorOfParameter = 66 ; + } +#Mixed layer depth +'mxld' = { + table2Version = 254 ; + indicatorOfParameter = 67 ; + } +#Trans thermocline depth +'tthd' = { + table2Version = 254 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'mthd' = { + table2Version = 254 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anom +'mtha' = { + table2Version = 254 ; + indicatorOfParameter = 70 ; + } +#Cloud cover +'cbnv' = { + table2Version = 254 ; + indicatorOfParameter = 71 ; + } +#Convective cloud cover +'cvnv' = { + table2Version = 254 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'lwnv' = { + table2Version = 254 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'mdnv' = { + table2Version = 254 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'hinv' = { + table2Version = 254 ; + indicatorOfParameter = 75 ; + } +#Cloud water +'wtnv' = { + table2Version = 254 ; + indicatorOfParameter = 76 ; + } +#Best lifted index (to 500 hpa) +'bli' = { + table2Version = 254 ; + indicatorOfParameter = 77 ; + } +#Land sea mask +'lsmk' = { + table2Version = 254 ; + indicatorOfParameter = 81 ; + } +#Dev sea_lev from mean +'dslm' = { + table2Version = 254 ; + indicatorOfParameter = 82 ; + } +#Roughness length +'zorl' = { + table2Version = 254 ; + indicatorOfParameter = 83 ; + } +#Albedo +'albe' = { + table2Version = 254 ; + indicatorOfParameter = 84 ; + } +#Deep soil temperature +'dstp' = { + table2Version = 254 ; + indicatorOfParameter = 85 ; + } +#Soil moisture content +'soic' = { + table2Version = 254 ; + indicatorOfParameter = 86 ; + } +#Vegetation +'vege' = { + table2Version = 254 ; + indicatorOfParameter = 87 ; + } +#Density +'dens' = { + table2Version = 254 ; + indicatorOfParameter = 89 ; + } +#Ice concentration +'icec' = { + table2Version = 254 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'icet' = { + table2Version = 254 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'iced' = { + table2Version = 254 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'ices' = { + table2Version = 254 ; + indicatorOfParameter = 94 ; + } +#U-comp of ice drift +'iceu' = { + table2Version = 254 ; + indicatorOfParameter = 95 ; + } +#V-comp of ice drift +'icev' = { + table2Version = 254 ; + indicatorOfParameter = 96 ; + } +#Ice growth +'iceg' = { + table2Version = 254 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'icdv' = { + table2Version = 254 ; + indicatorOfParameter = 98 ; + } +#Sig hgt com wave/swell +'shcw' = { + table2Version = 254 ; + indicatorOfParameter = 100 ; + } +#Direction of wind wave +'wwdi' = { + table2Version = 254 ; + indicatorOfParameter = 101 ; + } +#Sig hght of wind waves +'wwsh' = { + table2Version = 254 ; + indicatorOfParameter = 102 ; + } +#Mean period wind waves +'wwmp' = { + table2Version = 254 ; + indicatorOfParameter = 103 ; + } +#Direction of swell wave +'swdi' = { + table2Version = 254 ; + indicatorOfParameter = 104 ; + } +#Sig height swell waves +'swsh' = { + table2Version = 254 ; + indicatorOfParameter = 105 ; + } +#Mean period swell waves +'swmp' = { + table2Version = 254 ; + indicatorOfParameter = 106 ; + } +#Primary wave direction +'prwd' = { + table2Version = 254 ; + indicatorOfParameter = 107 ; + } +#Prim wave mean period +'prmp' = { + table2Version = 254 ; + indicatorOfParameter = 108 ; + } +#Second wave direction +'swdi' = { + table2Version = 254 ; + indicatorOfParameter = 109 ; + } +#Second wave mean period +'swmp' = { + table2Version = 254 ; + indicatorOfParameter = 110 ; + } +#Short wave absorbed at ground +'ocas' = { + table2Version = 254 ; + indicatorOfParameter = 111 ; + } +#Net long wave at bottom +'slds' = { + table2Version = 254 ; + indicatorOfParameter = 112 ; + } +#Net short-wav rad(top) +'nswr' = { + table2Version = 254 ; + indicatorOfParameter = 113 ; + } +#Outgoing long wave at top +'role' = { + table2Version = 254 ; + indicatorOfParameter = 114 ; + } +#Long-wav rad +'lwrd' = { + table2Version = 254 ; + indicatorOfParameter = 115 ; + } +#Short wave absorbed by earth/atmosphere +'swea' = { + table2Version = 254 ; + indicatorOfParameter = 116 ; + } +#Global radiation +'glbr' = { + table2Version = 254 ; + indicatorOfParameter = 117 ; + } +#Latent heat flux from surface +'clsf' = { + table2Version = 254 ; + indicatorOfParameter = 121 ; + } +#Sensible heat flux from surface +'cssf' = { + table2Version = 254 ; + indicatorOfParameter = 122 ; + } +#Bound layer dissipation +'blds' = { + table2Version = 254 ; + indicatorOfParameter = 123 ; + } +#Image +'imag' = { + table2Version = 254 ; + indicatorOfParameter = 127 ; + } +#2 metre temperature +'tp2m' = { + table2Version = 254 ; + indicatorOfParameter = 128 ; + } +#2 metre dewpoint temperature +'dp2m' = { + table2Version = 254 ; + indicatorOfParameter = 129 ; + } +#10 metre u-wind component +'u10m' = { + table2Version = 254 ; + indicatorOfParameter = 130 ; + } +#10 metre v-wind component +'v10m' = { + table2Version = 254 ; + indicatorOfParameter = 131 ; + } +#Topography +'topo' = { + table2Version = 254 ; + indicatorOfParameter = 132 ; + } +#Geometric mean surface pressure +'gsfp' = { + table2Version = 254 ; + indicatorOfParameter = 133 ; + } +#Ln surface pressure +'lnsp' = { + table2Version = 254 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'pslc' = { + table2Version = 254 ; + indicatorOfParameter = 135 ; + } +#M s l pressure (mesinger method) +'pslm' = { + table2Version = 254 ; + indicatorOfParameter = 136 ; + } +#Mask +'mask' = { + table2Version = 254 ; + indicatorOfParameter = 137 ; + } +#Maximum u-wind +'mxwu' = { + table2Version = 254 ; + indicatorOfParameter = 138 ; + } +#Maximum v-wind +'mxwv' = { + table2Version = 254 ; + indicatorOfParameter = 139 ; + } +#Convective avail. pot.energy +'cape' = { + table2Version = 254 ; + indicatorOfParameter = 140 ; + } +#Convective inhib. energy +'cine' = { + table2Version = 254 ; + indicatorOfParameter = 141 ; + } +#Convective latent heating +'lhcv' = { + table2Version = 254 ; + indicatorOfParameter = 142 ; + } +#Convective moisture source +'mscv' = { + table2Version = 254 ; + indicatorOfParameter = 143 ; + } +#Shallow conv. moisture source +'scvm' = { + table2Version = 254 ; + indicatorOfParameter = 144 ; + } +#Shallow convective heating +'scvh' = { + table2Version = 254 ; + indicatorOfParameter = 145 ; + } +#Maximum wind press. lvl +'mxwp' = { + table2Version = 254 ; + indicatorOfParameter = 146 ; + } +#Storm motion u-component +'ustr' = { + table2Version = 254 ; + indicatorOfParameter = 147 ; + } +#Storm motion v-component +'vstr' = { + table2Version = 254 ; + indicatorOfParameter = 148 ; + } +#Mean cloud cover +'cbnt' = { + table2Version = 254 ; + indicatorOfParameter = 149 ; + } +#Pressure at cloud base +'pcbs' = { + table2Version = 254 ; + indicatorOfParameter = 150 ; + } +#Pressure at cloud top +'pctp' = { + table2Version = 254 ; + indicatorOfParameter = 151 ; + } +#Freezing level height +'fzht' = { + table2Version = 254 ; + indicatorOfParameter = 152 ; + } +#Freezing level relative humidity +'fzrh' = { + table2Version = 254 ; + indicatorOfParameter = 153 ; + } +#Flight levels temperature +'fdlt' = { + table2Version = 254 ; + indicatorOfParameter = 154 ; + } +#Flight levels u-wind +'fdlu' = { + table2Version = 254 ; + indicatorOfParameter = 155 ; + } +#Flight levels v-wind +'fdlv' = { + table2Version = 254 ; + indicatorOfParameter = 156 ; + } +#Tropopause pressure +'tppp' = { + table2Version = 254 ; + indicatorOfParameter = 157 ; + } +#Tropopause temperature +'tppt' = { + table2Version = 254 ; + indicatorOfParameter = 158 ; + } +#Tropopause u-wind component +'tppu' = { + table2Version = 254 ; + indicatorOfParameter = 159 ; + } +#Tropopause v-wind component +'tppv' = { + table2Version = 254 ; + indicatorOfParameter = 160 ; + } +#Gravity wave drag du/dt +'gvdu' = { + table2Version = 254 ; + indicatorOfParameter = 162 ; + } +#Gravity wave drag dv/dt +'gvdv' = { + table2Version = 254 ; + indicatorOfParameter = 163 ; + } +#Gravity wave drag sfc zonal stress +'gvus' = { + table2Version = 254 ; + indicatorOfParameter = 164 ; + } +#Gravity wave drag sfc meridional stress +'gvvs' = { + table2Version = 254 ; + indicatorOfParameter = 165 ; + } +#Divergence of specific humidity +'dvsh' = { + table2Version = 254 ; + indicatorOfParameter = 167 ; + } +#Horiz. moisture flux conv. +'hmfc' = { + table2Version = 254 ; + indicatorOfParameter = 168 ; + } +#Vert. integrated moisture flux conv. +'vmfl' = { + table2Version = 254 ; + indicatorOfParameter = 169 ; + } +#Vertical moisture advection +'vadv' = { + table2Version = 254 ; + indicatorOfParameter = 170 ; + } +#Neg. hum. corr. moisture source +'nhcm' = { + table2Version = 254 ; + indicatorOfParameter = 171 ; + } +#Large scale latent heating +'lglh' = { + table2Version = 254 ; + indicatorOfParameter = 172 ; + } +#Large scale moisture source +'lgms' = { + table2Version = 254 ; + indicatorOfParameter = 173 ; + } +#Soil moisture availability +'smav' = { + table2Version = 254 ; + indicatorOfParameter = 174 ; + } +#Soil temperature of root zone +'tgrz' = { + table2Version = 254 ; + indicatorOfParameter = 175 ; + } +#Bare soil latent heat +'bslh' = { + table2Version = 254 ; + indicatorOfParameter = 176 ; + } +#Potential sfc evaporation +'evpp' = { + table2Version = 254 ; + indicatorOfParameter = 177 ; + } +#Runoff +'rnof' = { + table2Version = 254 ; + indicatorOfParameter = 178 ; + } +#Interception loss +'pitp' = { + table2Version = 254 ; + indicatorOfParameter = 179 ; + } +#Vapor pressure of canopy air space +'vpca' = { + table2Version = 254 ; + indicatorOfParameter = 180 ; + } +#Surface spec humidity +'qsfc' = { + table2Version = 254 ; + indicatorOfParameter = 181 ; + } +#Soil wetness of surface +'ussl' = { + table2Version = 254 ; + indicatorOfParameter = 182 ; + } +#Soil wetness of root zone +'uzrs' = { + table2Version = 254 ; + indicatorOfParameter = 183 ; + } +#Soil wetness of drainage zone +'uzds' = { + table2Version = 254 ; + indicatorOfParameter = 184 ; + } +#Storage on canopy +'amdl' = { + table2Version = 254 ; + indicatorOfParameter = 185 ; + } +#Storage on ground +'amsl' = { + table2Version = 254 ; + indicatorOfParameter = 186 ; + } +#Surface temperature +'tsfc' = { + table2Version = 254 ; + indicatorOfParameter = 187 ; + } +#Surface absolute temperature +'tems' = { + table2Version = 254 ; + indicatorOfParameter = 188 ; + } +#Temperature of canopy air space +'tcas' = { + table2Version = 254 ; + indicatorOfParameter = 189 ; + } +#Temperature at canopy +'ctmp' = { + table2Version = 254 ; + indicatorOfParameter = 190 ; + } +#Ground/surface cover temperature +'tgsc' = { + table2Version = 254 ; + indicatorOfParameter = 191 ; + } +#Surface zonal wind (u) +'uves' = { + table2Version = 254 ; + indicatorOfParameter = 192 ; + } +#Surface zonal wind stress +'usst' = { + table2Version = 254 ; + indicatorOfParameter = 193 ; + } +#Surface meridional wind (v) +'vves' = { + table2Version = 254 ; + indicatorOfParameter = 194 ; + } +#Surface meridional wind stress +'vsst' = { + table2Version = 254 ; + indicatorOfParameter = 195 ; + } +#Surface momentum flux +'suvf' = { + table2Version = 254 ; + indicatorOfParameter = 196 ; + } +#Incident short wave flux +'iswf' = { + table2Version = 254 ; + indicatorOfParameter = 197 ; + } +#Time ave ground ht flx +'ghfl' = { + table2Version = 254 ; + indicatorOfParameter = 198 ; + } +#Net long wave at bottom (clear) +'lwbc' = { + table2Version = 254 ; + indicatorOfParameter = 200 ; + } +#Outgoing long wave at top (clear) +'lwtc' = { + table2Version = 254 ; + indicatorOfParameter = 201 ; + } +#Short wv absrbd by earth/atmos (clear) +'swec' = { + table2Version = 254 ; + indicatorOfParameter = 202 ; + } +#Short wave absorbed at ground (clear) +'ocac' = { + table2Version = 254 ; + indicatorOfParameter = 203 ; + } +#Long wave radiative heating +'lwrh' = { + table2Version = 254 ; + indicatorOfParameter = 205 ; + } +#Short wave radiative heating +'swrh' = { + table2Version = 254 ; + indicatorOfParameter = 206 ; + } +#Downward long wave at bottom +'olis' = { + table2Version = 254 ; + indicatorOfParameter = 207 ; + } +#Downward long wave at bottom (clear) +'olic' = { + table2Version = 254 ; + indicatorOfParameter = 208 ; + } +#Downward short wave at ground +'ocis' = { + table2Version = 254 ; + indicatorOfParameter = 209 ; + } +#Downward short wave at ground (clear) +'ocic' = { + table2Version = 254 ; + indicatorOfParameter = 210 ; + } +#Upward long wave at bottom +'oles' = { + table2Version = 254 ; + indicatorOfParameter = 211 ; + } +#Upward short wave at ground +'oces' = { + table2Version = 254 ; + indicatorOfParameter = 212 ; + } +#Upward short wave at ground (clear) +'swgc' = { + table2Version = 254 ; + indicatorOfParameter = 213 ; + } +#Upward short wave at top +'roce' = { + table2Version = 254 ; + indicatorOfParameter = 214 ; + } +#Upward short wave at top (clear) +'swtc' = { + table2Version = 254 ; + indicatorOfParameter = 215 ; + } +#Horizontal heating diffusion +'hhdf' = { + table2Version = 254 ; + indicatorOfParameter = 218 ; + } +#Horizontal moisture diffusion +'hmdf' = { + table2Version = 254 ; + indicatorOfParameter = 219 ; + } +#Horizontal divergence diffusion +'hddf' = { + table2Version = 254 ; + indicatorOfParameter = 220 ; + } +#Horizontal vorticity diffusion +'hvdf' = { + table2Version = 254 ; + indicatorOfParameter = 221 ; + } +#Vertical diff. moisture source +'vdms' = { + table2Version = 254 ; + indicatorOfParameter = 222 ; + } +#Vertical diffusion du/dt +'vdfu' = { + table2Version = 254 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion dv/dt +'vdfv' = { + table2Version = 254 ; + indicatorOfParameter = 224 ; + } +#Vertical diffusion heating +'vdfh' = { + table2Version = 254 ; + indicatorOfParameter = 225 ; + } +#Surface relative humidity +'umrs' = { + table2Version = 254 ; + indicatorOfParameter = 226 ; + } +#Vertical dist total cloud cover +'vdcc' = { + table2Version = 254 ; + indicatorOfParameter = 227 ; + } +#Time mean surface zonal wind (u) +'usmt' = { + table2Version = 254 ; + indicatorOfParameter = 230 ; + } +#Time mean surface meridional wind (v) +'vsmt' = { + table2Version = 254 ; + indicatorOfParameter = 231 ; + } +#Time mean surface absolute temperature +'tsmt' = { + table2Version = 254 ; + indicatorOfParameter = 232 ; + } +#Time mean surface relative humidity +'rsmt' = { + table2Version = 254 ; + indicatorOfParameter = 233 ; + } +#Time mean absolute temperature +'atmt' = { + table2Version = 254 ; + indicatorOfParameter = 234 ; + } +#Time mean deep soil temperature +'stmt' = { + table2Version = 254 ; + indicatorOfParameter = 235 ; + } +#Time mean derived omega +'ommt' = { + table2Version = 254 ; + indicatorOfParameter = 236 ; + } +#Time mean divergence +'dvmt' = { + table2Version = 254 ; + indicatorOfParameter = 237 ; + } +#Time mean geopotential height +'zhmt' = { + table2Version = 254 ; + indicatorOfParameter = 238 ; + } +#Time mean log surface pressure +'lnmt' = { + table2Version = 254 ; + indicatorOfParameter = 239 ; + } +#Time mean mask +'mkmt' = { + table2Version = 254 ; + indicatorOfParameter = 240 ; + } +#Time mean meridional wind (v) +'vvmt' = { + table2Version = 254 ; + indicatorOfParameter = 241 ; + } +#Time mean omega +'omtm' = { + table2Version = 254 ; + indicatorOfParameter = 242 ; + } +#Time mean potential temperature +'ptmt' = { + table2Version = 254 ; + indicatorOfParameter = 243 ; + } +#Time mean precip. water +'pcmt' = { + table2Version = 254 ; + indicatorOfParameter = 244 ; + } +#Time mean relative humidity +'rhmt' = { + table2Version = 254 ; + indicatorOfParameter = 245 ; + } +#Time mean sea level pressure +'mpmt' = { + table2Version = 254 ; + indicatorOfParameter = 246 ; + } +#Time mean sigmadot +'simt' = { + table2Version = 254 ; + indicatorOfParameter = 247 ; + } +#Time mean specific humidity +'uemt' = { + table2Version = 254 ; + indicatorOfParameter = 248 ; + } +#Time mean stream function +'fcmt' = { + table2Version = 254 ; + indicatorOfParameter = 249 ; + } +#Time mean surface pressure +'psmt' = { + table2Version = 254 ; + indicatorOfParameter = 250 ; + } +#Time mean surface temperature +'tmmt' = { + table2Version = 254 ; + indicatorOfParameter = 251 ; + } +#Time mean velocity potential +'pvmt' = { + table2Version = 254 ; + indicatorOfParameter = 252 ; + } +#Time mean virtual temperature +'tvmt' = { + table2Version = 254 ; + indicatorOfParameter = 253 ; + } +#Time mean vorticity +'vtmt' = { + table2Version = 254 ; + indicatorOfParameter = 254 ; + } +#Time mean zonal wind (u) +'uvmt' = { + table2Version = 254 ; + indicatorOfParameter = 255 ; +} diff --git a/definitions/grib1/localConcepts/sbsj/units.def b/definitions/grib1/localConcepts/sbsj/units.def new file mode 100644 index 000000000..fb2ff2681 --- /dev/null +++ b/definitions/grib1/localConcepts/sbsj/units.def @@ -0,0 +1,1136 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 1 ; + } +#Pressure reduced to msl +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 2 ; + } +#Pressure tendency +'Pa s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 3 ; + } +#Geopotential +'dam' = { + table2Version = 254 ; + indicatorOfParameter = 6 ; + } +#Geopotential height +'gpm' = { + table2Version = 254 ; + indicatorOfParameter = 7 ; + } +#Geometric height +'m' = { + table2Version = 254 ; + indicatorOfParameter = 8 ; + } +#Absolute temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 11 ; + } +#Virtual temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 12 ; + } +#Potential temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 13 ; + } +#Pseudo-adiabatic potential temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 17 ; + } +#Dew point depression +'K' = { + table2Version = 254 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'K m**-1' = { + table2Version = 254 ; + indicatorOfParameter = 19 ; + } +#Radar spectra(1) +'non-dim' = { + table2Version = 254 ; + indicatorOfParameter = 21 ; + } +#Radar spectra(2) +'non-dim' = { + table2Version = 254 ; + indicatorOfParameter = 22 ; + } +#Radar spectra(3) +'non-dim' = { + table2Version = 254 ; + indicatorOfParameter = 23 ; + } +#Temperature anomaly +'K' = { + table2Version = 254 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'Pa hPa' = { + table2Version = 254 ; + indicatorOfParameter = 26 ; + } +#Geopot height anomaly +'m' = { + table2Version = 254 ; + indicatorOfParameter = 27 ; + } +#Wave spectra(1) +'non-dim' = { + table2Version = 254 ; + indicatorOfParameter = 28 ; + } +#Wave spectra(2) +'non-dim' = { + table2Version = 254 ; + indicatorOfParameter = 29 ; + } +#Wave spectra(3) +'non-dim' = { + table2Version = 254 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'deg' = { + table2Version = 254 ; + indicatorOfParameter = 31 ; + } +#Wind speed +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 32 ; + } +#Zonal wind (u) +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 33 ; + } +#Meridional wind (v) +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 34 ; + } +#Stream function +'m**2 s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'m**2 s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 36 ; + } +#Sigma coord vert vel +'s s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 38 ; + } +#Omega +'Pa s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 39 ; + } +#Vertical velocity +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 40 ; + } +#Absolute vorticity +'10**5 s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'10**5 s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 42 ; + } +#Vorticity +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 43 ; + } +#Divergence +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 44 ; + } +#Vertical u-comp shear +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 45 ; + } +#Vert v-comp shear +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'deg' = { + table2Version = 254 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 50 ; + } +#Specific humidity +'kg kg**-1' = { + table2Version = 254 ; + indicatorOfParameter = 51 ; + } +#Relative humidity +'~' = { + table2Version = 254 ; + indicatorOfParameter = 52 ; + } +#Humidity mixing ratio +'kg kg**-1' = { + table2Version = 254 ; + indicatorOfParameter = 53 ; + } +#Inst. precipitable water +'kg m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'Pa hPa' = { + table2Version = 254 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'Pa hPa' = { + table2Version = 254 ; + indicatorOfParameter = 56 ; + } +#Evaporation +'kg m**-2/day' = { + table2Version = 254 ; + indicatorOfParameter = 57 ; + } +#Precipitation rate +'kg m**-2/day' = { + table2Version = 254 ; + indicatorOfParameter = 59 ; + } +#Thunder probability +'%' = { + table2Version = 254 ; + indicatorOfParameter = 60 ; + } +#Total precipitation +'kg m**-2/day' = { + table2Version = 254 ; + indicatorOfParameter = 61 ; + } +#Large scale precipitation +'kg m**-2/day' = { + table2Version = 254 ; + indicatorOfParameter = 62 ; + } +#Convective precipitation +'kg m**-2/day' = { + table2Version = 254 ; + indicatorOfParameter = 63 ; + } +#Snowfall +'kg m**-2/day' = { + table2Version = 254 ; + indicatorOfParameter = 64 ; + } +#Wat equiv acc snow depth +'kg m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 65 ; + } +#Snow depth +'cm' = { + table2Version = 254 ; + indicatorOfParameter = 66 ; + } +#Mixed layer depth +'m cm' = { + table2Version = 254 ; + indicatorOfParameter = 67 ; + } +#Trans thermocline depth +'m cm' = { + table2Version = 254 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'m cm' = { + table2Version = 254 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anom +'m cm' = { + table2Version = 254 ; + indicatorOfParameter = 70 ; + } +#Cloud cover +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 71 ; + } +#Convective cloud cover +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 75 ; + } +#Cloud water +'kg m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 76 ; + } +#Best lifted index (to 500 hpa) +'K' = { + table2Version = 254 ; + indicatorOfParameter = 77 ; + } +#Land sea mask +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 81 ; + } +#Dev sea_lev from mean +'m' = { + table2Version = 254 ; + indicatorOfParameter = 82 ; + } +#Roughness length +'m' = { + table2Version = 254 ; + indicatorOfParameter = 83 ; + } +#Albedo +'%' = { + table2Version = 254 ; + indicatorOfParameter = 84 ; + } +#Deep soil temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 85 ; + } +#Soil moisture content +'kg m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 86 ; + } +#Vegetation +'%' = { + table2Version = 254 ; + indicatorOfParameter = 87 ; + } +#Density +'kg m**-3' = { + table2Version = 254 ; + indicatorOfParameter = 89 ; + } +#Ice concentration +'Fraction' = { + table2Version = 254 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'m' = { + table2Version = 254 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'deg' = { + table2Version = 254 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 94 ; + } +#U-comp of ice drift +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 95 ; + } +#V-comp of ice drift +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 96 ; + } +#Ice growth +'m' = { + table2Version = 254 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'s s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 98 ; + } +#Sig hgt com wave/swell +'m' = { + table2Version = 254 ; + indicatorOfParameter = 100 ; + } +#Direction of wind wave +'deg' = { + table2Version = 254 ; + indicatorOfParameter = 101 ; + } +#Sig hght of wind waves +'m' = { + table2Version = 254 ; + indicatorOfParameter = 102 ; + } +#Mean period wind waves +'s' = { + table2Version = 254 ; + indicatorOfParameter = 103 ; + } +#Direction of swell wave +'deg' = { + table2Version = 254 ; + indicatorOfParameter = 104 ; + } +#Sig height swell waves +'m' = { + table2Version = 254 ; + indicatorOfParameter = 105 ; + } +#Mean period swell waves +'s' = { + table2Version = 254 ; + indicatorOfParameter = 106 ; + } +#Primary wave direction +'deg' = { + table2Version = 254 ; + indicatorOfParameter = 107 ; + } +#Prim wave mean period +'s' = { + table2Version = 254 ; + indicatorOfParameter = 108 ; + } +#Second wave direction +'deg' = { + table2Version = 254 ; + indicatorOfParameter = 109 ; + } +#Second wave mean period +'s' = { + table2Version = 254 ; + indicatorOfParameter = 110 ; + } +#Short wave absorbed at ground +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 111 ; + } +#Net long wave at bottom +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 112 ; + } +#Net short-wav rad(top) +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 113 ; + } +#Outgoing long wave at top +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 114 ; + } +#Long-wav rad +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 115 ; + } +#Short wave absorbed by earth/atmosphere +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 116 ; + } +#Global radiation +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 117 ; + } +#Latent heat flux from surface +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 121 ; + } +#Sensible heat flux from surface +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 122 ; + } +#Bound layer dissipation +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 123 ; + } +#Image +'image^data' = { + table2Version = 254 ; + indicatorOfParameter = 127 ; + } +#2 metre temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 128 ; + } +#2 metre dewpoint temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 129 ; + } +#10 metre u-wind component +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 130 ; + } +#10 metre v-wind component +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 131 ; + } +#Topography +'m' = { + table2Version = 254 ; + indicatorOfParameter = 132 ; + } +#Geometric mean surface pressure +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 133 ; + } +#Ln surface pressure +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 134 ; + } +#Surface pressure +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 135 ; + } +#M s l pressure (mesinger method) +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 136 ; + } +#Mask +'-/+' = { + table2Version = 254 ; + indicatorOfParameter = 137 ; + } +#Maximum u-wind +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 138 ; + } +#Maximum v-wind +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 139 ; + } +#Convective avail. pot.energy +'m**2 s**-12' = { + table2Version = 254 ; + indicatorOfParameter = 140 ; + } +#Convective inhib. energy +'m**2 s**-12' = { + table2Version = 254 ; + indicatorOfParameter = 141 ; + } +#Convective latent heating +'K s**-2' = { + table2Version = 254 ; + indicatorOfParameter = 142 ; + } +#Convective moisture source +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 143 ; + } +#Shallow conv. moisture source +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 144 ; + } +#Shallow convective heating +'K s**-2' = { + table2Version = 254 ; + indicatorOfParameter = 145 ; + } +#Maximum wind press. lvl +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 146 ; + } +#Storm motion u-component +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 147 ; + } +#Storm motion v-component +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 148 ; + } +#Mean cloud cover +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 149 ; + } +#Pressure at cloud base +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 150 ; + } +#Pressure at cloud top +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 151 ; + } +#Freezing level height +'m' = { + table2Version = 254 ; + indicatorOfParameter = 152 ; + } +#Freezing level relative humidity +'%' = { + table2Version = 254 ; + indicatorOfParameter = 153 ; + } +#Flight levels temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 154 ; + } +#Flight levels u-wind +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 155 ; + } +#Flight levels v-wind +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 156 ; + } +#Tropopause pressure +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 157 ; + } +#Tropopause temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 158 ; + } +#Tropopause u-wind component +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 159 ; + } +#Tropopause v-wind component +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 160 ; + } +#Gravity wave drag du/dt +'m s**-12' = { + table2Version = 254 ; + indicatorOfParameter = 162 ; + } +#Gravity wave drag dv/dt +'m s**-12' = { + table2Version = 254 ; + indicatorOfParameter = 163 ; + } +#Gravity wave drag sfc zonal stress +'Pa' = { + table2Version = 254 ; + indicatorOfParameter = 164 ; + } +#Gravity wave drag sfc meridional stress +'Pa' = { + table2Version = 254 ; + indicatorOfParameter = 165 ; + } +#Divergence of specific humidity +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 167 ; + } +#Horiz. moisture flux conv. +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 168 ; + } +#Vert. integrated moisture flux conv. +'kg m**-2 s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 169 ; + } +#Vertical moisture advection +'kg kg**-1 s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 170 ; + } +#Neg. hum. corr. moisture source +'kg kg**-1 s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 171 ; + } +#Large scale latent heating +'K s**-2' = { + table2Version = 254 ; + indicatorOfParameter = 172 ; + } +#Large scale moisture source +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 173 ; + } +#Soil moisture availability +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 174 ; + } +#Soil temperature of root zone +'K' = { + table2Version = 254 ; + indicatorOfParameter = 175 ; + } +#Bare soil latent heat +'Ws m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 176 ; + } +#Potential sfc evaporation +'m' = { + table2Version = 254 ; + indicatorOfParameter = 177 ; + } +#Runoff +'kg m**-2 s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 178 ; + } +#Interception loss +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 179 ; + } +#Vapor pressure of canopy air space +'mb' = { + table2Version = 254 ; + indicatorOfParameter = 180 ; + } +#Surface spec humidity +'kg kg**-1' = { + table2Version = 254 ; + indicatorOfParameter = 181 ; + } +#Soil wetness of surface +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 182 ; + } +#Soil wetness of root zone +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 183 ; + } +#Soil wetness of drainage zone +'(0 - 1)' = { + table2Version = 254 ; + indicatorOfParameter = 184 ; + } +#Storage on canopy +'m' = { + table2Version = 254 ; + indicatorOfParameter = 185 ; + } +#Storage on ground +'m' = { + table2Version = 254 ; + indicatorOfParameter = 186 ; + } +#Surface temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 187 ; + } +#Surface absolute temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 188 ; + } +#Temperature of canopy air space +'K' = { + table2Version = 254 ; + indicatorOfParameter = 189 ; + } +#Temperature at canopy +'K' = { + table2Version = 254 ; + indicatorOfParameter = 190 ; + } +#Ground/surface cover temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 191 ; + } +#Surface zonal wind (u) +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 192 ; + } +#Surface zonal wind stress +'Pa' = { + table2Version = 254 ; + indicatorOfParameter = 193 ; + } +#Surface meridional wind (v) +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 194 ; + } +#Surface meridional wind stress +'Pa' = { + table2Version = 254 ; + indicatorOfParameter = 195 ; + } +#Surface momentum flux +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 196 ; + } +#Incident short wave flux +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 197 ; + } +#Time ave ground ht flx +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 198 ; + } +#Net long wave at bottom (clear) +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 200 ; + } +#Outgoing long wave at top (clear) +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 201 ; + } +#Short wv absrbd by earth/atmos (clear) +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 202 ; + } +#Short wave absorbed at ground (clear) +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 203 ; + } +#Long wave radiative heating +'K s**-2' = { + table2Version = 254 ; + indicatorOfParameter = 205 ; + } +#Short wave radiative heating +'K s**-2' = { + table2Version = 254 ; + indicatorOfParameter = 206 ; + } +#Downward long wave at bottom +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 207 ; + } +#Downward long wave at bottom (clear) +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 208 ; + } +#Downward short wave at ground +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 209 ; + } +#Downward short wave at ground (clear) +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 210 ; + } +#Upward long wave at bottom +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 211 ; + } +#Upward short wave at ground +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 212 ; + } +#Upward short wave at ground (clear) +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 213 ; + } +#Upward short wave at top +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 214 ; + } +#Upward short wave at top (clear) +'W m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 215 ; + } +#Horizontal heating diffusion +'K s**-2' = { + table2Version = 254 ; + indicatorOfParameter = 218 ; + } +#Horizontal moisture diffusion +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 219 ; + } +#Horizontal divergence diffusion +'s**-12' = { + table2Version = 254 ; + indicatorOfParameter = 220 ; + } +#Horizontal vorticity diffusion +'s**-12' = { + table2Version = 254 ; + indicatorOfParameter = 221 ; + } +#Vertical diff. moisture source +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 222 ; + } +#Vertical diffusion du/dt +'m s**-12' = { + table2Version = 254 ; + indicatorOfParameter = 223 ; + } +#Vertical diffusion dv/dt +'m s**-12' = { + table2Version = 254 ; + indicatorOfParameter = 224 ; + } +#Vertical diffusion heating +'K s**-2' = { + table2Version = 254 ; + indicatorOfParameter = 225 ; + } +#Surface relative humidity +'~' = { + table2Version = 254 ; + indicatorOfParameter = 226 ; + } +#Vertical dist total cloud cover +'~' = { + table2Version = 254 ; + indicatorOfParameter = 227 ; + } +#Time mean surface zonal wind (u) +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 230 ; + } +#Time mean surface meridional wind (v) +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 231 ; + } +#Time mean surface absolute temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 232 ; + } +#Time mean surface relative humidity +'~' = { + table2Version = 254 ; + indicatorOfParameter = 233 ; + } +#Time mean absolute temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 234 ; + } +#Time mean deep soil temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 235 ; + } +#Time mean derived omega +'Pa s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 236 ; + } +#Time mean divergence +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 237 ; + } +#Time mean geopotential height +'m' = { + table2Version = 254 ; + indicatorOfParameter = 238 ; + } +#Time mean log surface pressure +'ln(cbar)' = { + table2Version = 254 ; + indicatorOfParameter = 239 ; + } +#Time mean mask +'-/+' = { + table2Version = 254 ; + indicatorOfParameter = 240 ; + } +#Time mean meridional wind (v) +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 241 ; + } +#Time mean omega +'cbar s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 242 ; + } +#Time mean potential temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 243 ; + } +#Time mean precip. water +'kg m**-2' = { + table2Version = 254 ; + indicatorOfParameter = 244 ; + } +#Time mean relative humidity +'%' = { + table2Version = 254 ; + indicatorOfParameter = 245 ; + } +#Time mean sea level pressure +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 246 ; + } +#Time mean sigmadot +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 247 ; + } +#Time mean specific humidity +'kg kg**-1' = { + table2Version = 254 ; + indicatorOfParameter = 248 ; + } +#Time mean stream function +'m**2 s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 249 ; + } +#Time mean surface pressure +'hPa' = { + table2Version = 254 ; + indicatorOfParameter = 250 ; + } +#Time mean surface temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 251 ; + } +#Time mean velocity potential +'m**2 s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 252 ; + } +#Time mean virtual temperature +'K' = { + table2Version = 254 ; + indicatorOfParameter = 253 ; + } +#Time mean vorticity +'s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 254 ; + } +#Time mean zonal wind (u) +'m s**-1' = { + table2Version = 254 ; + indicatorOfParameter = 255 ; +} diff --git a/definitions/grib1/localDefinitionNumber.96.table b/definitions/grib1/localDefinitionNumber.96.table new file mode 100644 index 000000000..2c0e67e7b --- /dev/null +++ b/definitions/grib1/localDefinitionNumber.96.table @@ -0,0 +1 @@ +40 40 MARS labeling with domain and model (for LAM) diff --git a/definitions/grib1/localDefinitionNumber.98.table b/definitions/grib1/localDefinitionNumber.98.table new file mode 100644 index 000000000..c2c5c991c --- /dev/null +++ b/definitions/grib1/localDefinitionNumber.98.table @@ -0,0 +1,42 @@ +1 1 MARS labelling or ensemble forecast data +2 2 Cluster means and standard deviations +3 3 Satellite image data +4 4 Ocean model data +5 5 Forecast probability data +6 6 Surface temperature data +7 7 Sensitivity data +8 8 ECMWF reanalysis data +9 9 Singular vectors and ensemble perturbations +10 10 EPS tubes +11 11 Supplementary data used by the analysis +13 13 Wave 2D spectra direction and frequency +14 14 Brightness temperature +15 15 Seasonal forecast data +16 16 Seasonal forecast monthly mean data +17 17 Surface temperature or seaice data +18 18 Multianalysis ensemble data +19 19 Extreme forecast index data +20 20 4D variational increments +21 21 Sensitive area predictions +22 22 Coupled atmospheric, wave and ocean models (with hindcast support) +23 23 Coupled atmospheric, wave and ocean means (with hindcast support) +24 24 Satellite image simulation +25 25 4DVar model errors +26 26 MARS labelling or ensemble forecast data (with hindcast support) +27 27 Forecasting Systems with Variable Resolution (Obsolete) +28 28 COSMO local area EPS +29 29 COSMO clustering information +30 30 Forecasting Systems with Variable Resolution +31 31 EUROSIP products +32 32 Cluster Scenarios +35 35 Elaboration of ocean model products +36 36 MARS labelling for long window 4Dvar system +37 37 Brightness temperature for long window 4Dvar system +38 38 4D variational increments for long window 4Dvar system +39 39 4DVar model errors for long window 4Dvar system +40 40 MARS labeling with domain and model (for LAM) +50 50 Member State data +190 190 Multiple ECMWF local definitions +191 191 Free format data descriptor data +192 192 Multiple ECMWF local definitions + diff --git a/definitions/grib1/local_no_mars.98.1.def b/definitions/grib1/local_no_mars.98.1.def new file mode 100644 index 000000000..9d66df949 --- /dev/null +++ b/definitions/grib1/local_no_mars.98.1.def @@ -0,0 +1,78 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.1 ---------------------------------------------------------------------- +# LOCAL 98 1 +# +# localDefinitionTemplate_001 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#number 50 I1 42 - +#total 51 I1 43 - +#spareSetToZero 52 PAD n/a 1 +# +constant GRIBEXSection1Problem = 52 - section1Length ; + + +unsigned[1] perturbationNumber : dump; +alias number = perturbationNumber; + +unsigned[1] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; +pad padding_local1_1(1); + +#1->2 +alias grib2LocalSectionPresent=present; +constant grib2LocalSectionNumber=1; + +if (stepType is "instant" ) { + if (type is "em" || type is "es" ) { + alias productDefinitionTemplateNumber=epsStatisticsPoint; + } else { + if (numberOfForecastsInEnsemble!=0) { + if ((perturbationNumber/2)*2 == perturbationNumber) { + alias typeOfEnsembleForecast=two; + } else { + alias typeOfEnsembleForecast=three; + } + alias productDefinitionTemplateNumber=epsPoint; + } else { + alias productDefinitionTemplateNumber=zero; + } + } +} else { + if (type is "em" || type is "es" ) { + alias productDefinitionTemplateNumber=epsStatisticsContinous; + } else { + if (numberOfForecastsInEnsemble!=0) { + if ((perturbationNumber/2)*2 == perturbationNumber) { + alias typeOfEnsembleForecast=two; + } else { + alias typeOfEnsembleForecast=three; + } + alias productDefinitionTemplateNumber=epsContinous; + } else { + alias productDefinitionTemplateNumber=eight; + } + } +} + +# monthly mean +#if (timeRangeIndicator==113) { +#} + + +# END 1/local.98.1 ---------------------------------------------------------------------- diff --git a/definitions/grib1/local_no_mars.98.24.def b/definitions/grib1/local_no_mars.98.24.def new file mode 100644 index 000000000..dca45e187 --- /dev/null +++ b/definitions/grib1/local_no_mars.98.24.def @@ -0,0 +1,43 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 1/local.98.24 ---------------------------------------------------------------------- +# LOCAL 98 24 +# +# localDefinitionTemplate_024 +# --------------------------- +# +# Description Octet Code Ksec1 Count +# ----------- ----- ---- ----- ----- +#localDefinitionNumber 41 I1 37 - +#class 42 I1 38 - +#type 43 I1 39 - +#stream 44 I2 40 - +#experimentVersionNumber 46 A4 41 - +#satelliteIdentifier 50 I2 42 - +#instrumentIdentifier 52 I2 43 - +#channelNumber 54 I2 44 - +#functionCode 56 I1 45 - +# + +constant GRIBEXSection1Problem = 56 - section1Length ; + +unsigned[2] satelliteIdentifier : dump; +alias mars.ident = satelliteIdentifier; + +unsigned[2] instrumentIdentifier : dump; +alias mars.instrument = instrumentIdentifier; + +unsigned[2] channelNumber : dump ; +alias mars.channel = channelNumber; + +unsigned[1] functionCode : dump ; + + +# END 1/local.98.24 ---------------------------------------------------------------------- diff --git a/definitions/grib1/ls.def b/definitions/grib1/ls.def new file mode 100644 index 000000000..92209e99b --- /dev/null +++ b/definitions/grib1/ls.def @@ -0,0 +1,16 @@ +alias ls.centre=centre; +#alias ls.param=marsParam; +alias ls.shortName=shortName; + +alias ls.dataType = dataType; + +alias ls.date=date; +alias ls.stepRange = stepRange; + +alias ls.gridType=gridType; +alias ls.numberOfValues=numberOfValues; + +alias ls.levelType=indicatorOfTypeOfLevel; +alias ls.level=level; + +alias ls.packingType=packingType; diff --git a/definitions/grib1/mars_labeling.23.def b/definitions/grib1/mars_labeling.23.def new file mode 100644 index 000000000..9e691ff03 --- /dev/null +++ b/definitions/grib1/mars_labeling.23.def @@ -0,0 +1,9 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + diff --git a/definitions/grib1/mars_labeling.4.def b/definitions/grib1/mars_labeling.4.def new file mode 100644 index 000000000..84a84180d --- /dev/null +++ b/definitions/grib1/mars_labeling.4.def @@ -0,0 +1,209 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +constant P_INST = 0; +constant P_TAVG = 1; +constant P_TACC = 3; + +constant TYPE_AN = 2; +constant TYPE_FC = 9; +constant TYPE_CF = 10; +constant TYPE_PF = 11; +constant TYPE_FF = 25; +constant TYPE_OF = 26; +constant TYPE_OR = 70; +constant TYPE_FX = 71; + +constant coordAveraging0 = "inst"; +constant coordAveraging1 = "tavg"; +constant coordAveraging2 = 2; +constant coordAveraging3 = "tacc"; +constant coordAveragingTims = "tims"; + +constant isectionNumber2 = "h"; +constant isectionNumber3 = "m"; +constant isectionNumber4 = "z"; + + +constant tsectionNumber3 = "v"; +constant tsectionNumber4 = "z"; +constant tsectionNumber5 = "m"; + +constant GRIB_DEPTH = 2; +constant GRIB_LONGITUDE = 3; +constant GRIB_LATITUDE = 4; + +meta verificationDate g1verificationdate(dataDate, dataTime, endStep) : read_only; + + +if(horizontalCoordinateDefinition == 0) + { + + if(coordinate1Flag == 1 ) + { + +# range + + + if(averaging1Flag == P_TAVG ){ + if( + marsType == TYPE_OR + || marsType == TYPE_FC + || marsType == TYPE_FF + || marsType == TYPE_FX + ) + { + meta marsRange evaluate((coordinate1End - coordinate1Start)/3600); + alias mars.range = marsRange; + } + } +# section + + if(coordinate2Flag == 2) { alias mars.section = isectionNumber2;} + if(coordinate2Flag == 3) { alias mars.section = isectionNumber3;} + if(coordinate2Flag == 4) { alias mars.section = isectionNumber4;} + +# levelist latitude longitude + + if(coordinate2Flag == GRIB_DEPTH){ + meta marsLevelist divdouble( coordinate2Start,1000 ); + meta roundedMarsLevelist round( marsLevelist ,1000); + alias mars.levelist = roundedMarsLevelist ; + + } + if(coordinate2Flag == GRIB_LONGITUDE){ + meta marsLongitude divdouble( coordinate2Start,1000000 ); + meta roundedMarsLongitude round( marsLongitude ,1000); + alias mars.longitude = roundedMarsLongitude ; + } + + if(coordinate2Flag == GRIB_LATITUDE){ + meta marsLatitude divdouble( coordinate2Start,1000000 ); + + meta roundedMarsLatitude round( marsLatitude ,1000); + alias mars.latitude = roundedMarsLatitude ; + } + + +#product + if(averaging1Flag == 0) { alias mars.product = coordAveraging0;} + if(averaging1Flag == 1) { alias mars.product = coordAveraging1;} + if(averaging1Flag == 2) { alias mars.product = coordAveraging2;} + if(averaging1Flag == 3) { alias mars.product = coordAveraging3;} + +# date + if( + (marsType == TYPE_OR && averaging1Flag == P_TAVG) + || (marsType == TYPE_OR && averaging1Flag == P_TACC) + || (marsType == TYPE_FX && averaging1Flag == P_TAVG) + ) + { + #remove mars.date; + alias mars.date = verificationDate; + #remove mars.step; + constant stepZero = 0; + alias mars.step = stepZero; + } + + + } + else + { + + meta coordinateIndexNumber evaluate(coordinate4Flag+coordinate3Flag); + +# levelist latitude longitude + + if(coordinateIndexNumber== 3) + { + meta marsLatitude divdouble( coordinate1Start,1000000); + meta marsLongitude divdouble( coordinate2Start,1000000); + + meta roundedMarsLatitude round( marsLatitude ,1000); + meta roundedMarsLongitude round( marsLongitude ,1000); + + alias mars.latitude = roundedMarsLatitude ; + alias mars.longitude = roundedMarsLongitude ; + + } + + if(coordinateIndexNumber == 4) + { + meta marsLevelist divdouble( coordinate1Start,1000); + meta marsLatitude divdouble( coordinate2Start,1000000); + + meta roundedMarsLevelist round( marsLevelist ,1000); + meta roundedMarsLatitude round( marsLatitude ,1000); + + alias mars.levelist = roundedMarsLevelist ; + alias mars.latitude = roundedMarsLatitude ; + } + + if(coordinateIndexNumber == 5) + { + meta marsLevelist divdouble( coordinate1Start,1000); + meta marsLongitude divdouble( coordinate2Start,1000000); + + meta roundedMarsLevelist round( marsLevelist ,1000); + meta roundedMarsLongitude round( marsLongitude ,1000); + + alias mars.levelist = roundedMarsLevelist ; + alias mars.longitude = roundedMarsLongitude ; + + } + +# section + + if(coordinateIndexNumber == 3) { alias mars.section = tsectionNumber3;} + if(coordinateIndexNumber == 4) { alias mars.section = tsectionNumber4;} + if(coordinateIndexNumber == 5) { alias mars.section = tsectionNumber5;} + +# range + if(averaging1Flag == P_INST){ + if( + (marsType == TYPE_OR) + ||(marsType == TYPE_FC) + ||(marsType == TYPE_CF) + ||(marsType == TYPE_PF) + ||(marsType == TYPE_FF) + ||(marsType == TYPE_OF) + ) + { + if( coordinate4Flag == 1){ + meta marsRange evaluate((coordinate4OfLastGridPoint - coordinate4OfFirstGridPoint)/3600); + }else{ + + meta marsRange evaluate((coordinate3OfLastGridPoint - coordinate3OfFirstGridPoint)/3600); + } + + alias mars.range = marsRange; + } + } + +# product + alias mars.product = coordAveragingTims; +# date + + + if(marsType == TYPE_OR && averaging1Flag == P_INST){ + + #remove mars.date; + alias mars.date = verificationDate; + #remove mars.step; + constant stepZero = 0; + alias mars.step =stepZero; + + } + + + } + + +} diff --git a/definitions/grib1/mars_labeling.def b/definitions/grib1/mars_labeling.def new file mode 100644 index 000000000..44ac07f1a --- /dev/null +++ b/definitions/grib1/mars_labeling.def @@ -0,0 +1,24 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +codetable[1] marsClass "mars/class.table" = "od" : dump,lowercase; +codetable[1] marsType "mars/type.table" = "an" : dump,string_type,lowercase; +codetable[2] marsStream "mars/stream.table" = "oper" : dump,lowercase ; +ksec1expver[4] experimentVersionNumber = "0001" : dump; + +#alias typeOfProcessedData=marsType; +alias ls.dataType = marsType; + +alias mars.class = marsClass; +alias mars.type = marsType; +alias mars.stream = marsStream; +alias mars.expver = experimentVersionNumber; + +alias mars.domain = globalDomain; # For now... + diff --git a/definitions/grib1/name.def b/definitions/grib1/name.def new file mode 100644 index 000000000..8437d70c2 --- /dev/null +++ b/definitions/grib1/name.def @@ -0,0 +1,2109 @@ +# Automatically generated by create_def.pl from database param@wrep-db-misc-prod, do not edit +#Stream function +'Stream function' = { + table2Version = 3 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'Velocity potential' = { + table2Version = 3 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'Potential temperature' = { + table2Version = 3 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'Wind speed' = { + table2Version = 3 ; + indicatorOfParameter = 32 ; + } +#Pressure +'Pressure' = { + table2Version = 3 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'Potential vorticity' = { + table2Version = 3 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'Maximum temperature at 2 metres in the last 6 hours' = { + table2Version = 3 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'Minimum temperature at 2 metres in the last 6 hours' = { + table2Version = 3 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'Geopotential' = { + table2Version = 3 ; + indicatorOfParameter = 6 ; + } +#Temperature +'Temperature' = { + table2Version = 3 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'U component of wind' = { + table2Version = 3 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'V component of wind' = { + table2Version = 3 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'Specific humidity' = { + table2Version = 3 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'Surface pressure' = { + table2Version = 3 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'Vertical velocity' = { + table2Version = 3 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'Vorticity (relative)' = { + table2Version = 3 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'Boundary layer dissipation' = { + table2Version = 3 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'Surface sensible heat flux' = { + table2Version = 3 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'Surface latent heat flux' = { + table2Version = 3 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'Mean sea level pressure' = { + table2Version = 3 ; + indicatorOfParameter = 2 ; + } +#Divergence +'Divergence' = { + table2Version = 3 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'Geopotential Height' = { + table2Version = 3 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'Relative humidity' = { + table2Version = 3 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'10 metre U wind component' = { + table2Version = 3 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'10 metre V wind component' = { + table2Version = 3 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'2 metre temperature' = { + table2Version = 3 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'2 metre dewpoint temperature' = { + table2Version = 3 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'Land-sea mask' = { + table2Version = 3 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'Surface roughness' = { + table2Version = 3 ; + indicatorOfParameter = 83 ; + } +#Albedo +'Albedo' = { + table2Version = 3 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'Evaporation' = { + table2Version = 3 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'Convective cloud cover' = { + table2Version = 3 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'Low cloud cover' = { + table2Version = 3 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'Medium cloud cover' = { + table2Version = 3 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'High cloud cover' = { + table2Version = 3 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'Brightness temperature' = { + table2Version = 3 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'Vegetation fraction' = { + table2Version = 3 ; + indicatorOfParameter = 87 ; + } +#Runoff +'Runoff' = { + table2Version = 3 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'Total column ozone' = { + table2Version = 3 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'Convective snowfall' = { + table2Version = 3 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'Large-scale snowfall' = { + table2Version = 3 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'large scale precipitation' = { + table2Version = 3 ; + indicatorOfParameter = 62 ; + } +#Cloud water +'Cloud water' = { + table2Version = 3 ; + indicatorOfParameter = 76 ; + } +#Virtual temperature +'Virtual temperature' = { + table2Version = 1 ; + indicatorOfParameter = 12 ; + } +#Virtual temperature +'Virtual temperature' = { + table2Version = 2 ; + indicatorOfParameter = 12 ; + } +#Virtual temperature +'Virtual temperature' = { + table2Version = 3 ; + indicatorOfParameter = 12 ; + } +#Pressure tendency +'Pressure tendency' = { + table2Version = 3 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'ICAO Standard Atmosphere reference height' = { + table2Version = 3 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'Geometrical height' = { + table2Version = 3 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'Standard deviation of height' = { + table2Version = 3 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'Pseudo-adiabatic potential temperature' = { + table2Version = 3 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'Maximum temperature' = { + table2Version = 3 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'Minimum temperature' = { + table2Version = 3 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'Dew point temperature' = { + table2Version = 3 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'Dew point depression (or deficit)' = { + table2Version = 3 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'Lapse rate' = { + table2Version = 3 ; + indicatorOfParameter = 19 ; + } +#Visibility +'Visibility' = { + table2Version = 3 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'Radar spectra (1)' = { + table2Version = 3 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'Radar spectra (2)' = { + table2Version = 3 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'Radar spectra (3)' = { + table2Version = 3 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'Parcel lifted index (to 500 hPa)' = { + table2Version = 3 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'Temperature anomaly' = { + table2Version = 3 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'Pressure anomaly' = { + table2Version = 3 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'Geopotential height anomaly' = { + table2Version = 3 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'Wave spectra (1)' = { + table2Version = 3 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'Wave spectra (2)' = { + table2Version = 3 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'Wave spectra (3)' = { + table2Version = 3 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'Wind direction' = { + table2Version = 3 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'Montgomery stream Function' = { + table2Version = 3 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'Sigma coordinate vertical velocity' = { + table2Version = 3 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'Absolute vorticity' = { + table2Version = 3 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'Absolute divergence' = { + table2Version = 3 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'Vertical u-component shear' = { + table2Version = 3 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'Vertical v-component shear' = { + table2Version = 3 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'Direction of current' = { + table2Version = 3 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'Speed of current' = { + table2Version = 3 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'U-component of current ' = { + table2Version = 3 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'V-component of current ' = { + table2Version = 3 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'Humidity mixing ratio' = { + table2Version = 3 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'Precipitable water' = { + table2Version = 3 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'Vapour pressure' = { + table2Version = 3 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'Saturation deficit' = { + table2Version = 3 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'Precipitation rate' = { + table2Version = 3 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'Thunderstorm probability' = { + table2Version = 3 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'Convective precipitation (water)' = { + table2Version = 3 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'Snow fall rate water equivalent' = { + table2Version = 3 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'Mixed layer depth' = { + table2Version = 3 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'Transient thermocline depth' = { + table2Version = 3 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'Main thermocline depth' = { + table2Version = 3 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'Main thermocline anomaly' = { + table2Version = 3 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'Best lifted index (to 500 hPa)' = { + table2Version = 3 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'Water temperature' = { + table2Version = 3 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'Deviation of sea-level from mean' = { + table2Version = 3 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'Soil moisture content' = { + table2Version = 3 ; + indicatorOfParameter = 86 ; + } +#Salinity +'Salinity' = { + table2Version = 3 ; + indicatorOfParameter = 88 ; + } +#Density +'Density' = { + table2Version = 3 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'Ice cover (1=land, 0=sea)' = { + table2Version = 3 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'Ice thickness' = { + table2Version = 3 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'Direction of ice drift' = { + table2Version = 3 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'Speed of ice drift' = { + table2Version = 3 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'U-component of ice drift' = { + table2Version = 3 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'V-component of ice drift' = { + table2Version = 3 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'Ice growth rate' = { + table2Version = 3 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'Ice divergence' = { + table2Version = 3 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'Snow melt' = { + table2Version = 3 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'Signific.height,combined wind waves+swell' = { + table2Version = 3 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'Mean direction of wind waves' = { + table2Version = 3 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'Significant height of wind waves' = { + table2Version = 3 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'Mean period of wind waves' = { + table2Version = 3 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'Direction of swell waves' = { + table2Version = 3 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'Significant height of swell waves' = { + table2Version = 3 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'Mean period of swell waves' = { + table2Version = 3 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'Mean direction of primary swell' = { + table2Version = 3 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'Mean period of primary swell' = { + table2Version = 3 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'Secondary wave direction' = { + table2Version = 3 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'Secondary wave period' = { + table2Version = 3 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'Net short-wave radiation flux (surface)' = { + table2Version = 3 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'Net long-wave radiation flux (surface)' = { + table2Version = 3 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'Net short-wave radiationflux(atmosph.top)' = { + table2Version = 3 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'Net long-wave radiation flux(atmosph.top)' = { + table2Version = 3 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'Long wave radiation flux' = { + table2Version = 3 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'Short wave radiation flux' = { + table2Version = 3 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'Global radiation flux' = { + table2Version = 3 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'Radiance (with respect to wave number)' = { + table2Version = 3 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'Radiance (with respect to wave length)' = { + table2Version = 3 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'Momentum flux, u-component' = { + table2Version = 3 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'Momentum flux, v-component' = { + table2Version = 3 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'Wind mixing energy' = { + table2Version = 3 ; + indicatorOfParameter = 126 ; + } +#Image data +'Image data' = { + table2Version = 3 ; + indicatorOfParameter = 127 ; + } +#Orography +'Orography' = { + table2Version = 3 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'Soil Moisture' = { + table2Version = 3 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'Soil Temperature' = { + table2Version = 3 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'Snow depth water equivalent' = { + table2Version = 3 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'Snow Fall water equivalent' = { + table2Version = 3 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'Total Cloud Cover' = { + table2Version = 3 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'Total Precipitation' = { + table2Version = 3 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Stream function +'Stream function' = { + table2Version = 2 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'Velocity potential' = { + table2Version = 2 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'Potential temperature' = { + table2Version = 2 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'Wind speed' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + } +#Pressure +'Pressure' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'Potential vorticity' = { + table2Version = 2 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'Maximum temperature at 2 metres in the last 6 hours' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'Minimum temperature at 2 metres in the last 6 hours' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'Geopotential' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Temperature +'Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'U component of wind' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'V component of wind' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'Specific humidity' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'Surface pressure' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'Vertical velocity' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'Vorticity (relative)' = { + table2Version = 2 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'Boundary layer dissipation' = { + table2Version = 2 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'Surface sensible heat flux' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'Surface latent heat flux' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'Mean sea level pressure' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + } +#Divergence +'Divergence' = { + table2Version = 2 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'Geopotential Height' = { + table2Version = 2 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'Relative humidity' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'10 metre U wind component' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'10 metre V wind component' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'2 metre temperature' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'2 metre dewpoint temperature' = { + table2Version = 2 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'Land-sea mask' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'Surface roughness' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + } +#Albedo +'Albedo' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'Evaporation' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'Convective cloud cover' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'Low cloud cover' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'Medium cloud cover' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'High cloud cover' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'Brightness temperature' = { + table2Version = 2 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'Vegetation fraction' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + } +#Runoff +'Runoff' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'Total column ozone' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'Convective snowfall' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'Large-scale snowfall' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'large scale precipitation' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + } +#Cloud water +'Cloud water' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + } +#Pressure tendency +'Pressure tendency' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'ICAO Standard Atmosphere reference height' = { + table2Version = 2 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'Geometrical height' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'Standard deviation of height' = { + table2Version = 2 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'Pseudo-adiabatic potential temperature' = { + table2Version = 2 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'Maximum temperature' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'Minimum temperature' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'Dew point temperature' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'Dew point depression (or deficit)' = { + table2Version = 2 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'Lapse rate' = { + table2Version = 2 ; + indicatorOfParameter = 19 ; + } +#Visibility +'Visibility' = { + table2Version = 2 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'Radar spectra (1)' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'Radar spectra (2)' = { + table2Version = 2 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'Radar spectra (3)' = { + table2Version = 2 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'Parcel lifted index (to 500 hPa)' = { + table2Version = 2 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'Temperature anomaly' = { + table2Version = 2 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'Pressure anomaly' = { + table2Version = 2 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'Geopotential height anomaly' = { + table2Version = 2 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'Wave spectra (1)' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'Wave spectra (2)' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'Wave spectra (3)' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'Wind direction' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'Montgomery stream Function' = { + table2Version = 2 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'Sigma coordinate vertical velocity' = { + table2Version = 2 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'Absolute vorticity' = { + table2Version = 2 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'Absolute divergence' = { + table2Version = 2 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'Vertical u-component shear' = { + table2Version = 2 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'Vertical v-component shear' = { + table2Version = 2 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'Direction of current' = { + table2Version = 2 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'Speed of current' = { + table2Version = 2 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'U-component of current ' = { + table2Version = 2 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'V-component of current ' = { + table2Version = 2 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'Humidity mixing ratio' = { + table2Version = 2 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'Precipitable water' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'Vapour pressure' = { + table2Version = 2 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'Saturation deficit' = { + table2Version = 2 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'Precipitation rate' = { + table2Version = 2 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'Thunderstorm probability' = { + table2Version = 2 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'Convective precipitation (water)' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'Snow fall rate water equivalent' = { + table2Version = 2 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'Mixed layer depth' = { + table2Version = 2 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'Transient thermocline depth' = { + table2Version = 2 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'Main thermocline depth' = { + table2Version = 2 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'Main thermocline anomaly' = { + table2Version = 2 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'Best lifted index (to 500 hPa)' = { + table2Version = 2 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'Water temperature' = { + table2Version = 2 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'Deviation of sea-level from mean' = { + table2Version = 2 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'Soil moisture content' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + } +#Salinity +'Salinity' = { + table2Version = 2 ; + indicatorOfParameter = 88 ; + } +#Density +'Density' = { + table2Version = 2 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'Ice cover (1=land, 0=sea)' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'Ice thickness' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'Direction of ice drift' = { + table2Version = 2 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'Speed of ice drift' = { + table2Version = 2 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'U-component of ice drift' = { + table2Version = 2 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'V-component of ice drift' = { + table2Version = 2 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'Ice growth rate' = { + table2Version = 2 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'Ice divergence' = { + table2Version = 2 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'Snow melt' = { + table2Version = 2 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'Signific.height,combined wind waves+swell' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'Mean direction of wind waves' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'Significant height of wind waves' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'Mean period of wind waves' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'Direction of swell waves' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'Significant height of swell waves' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'Mean period of swell waves' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'Mean direction of primary swell' = { + table2Version = 2 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'Mean period of primary swell' = { + table2Version = 2 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'Secondary wave direction' = { + table2Version = 2 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'Secondary wave period' = { + table2Version = 2 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'Net short-wave radiation flux (surface)' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'Net long-wave radiation flux (surface)' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'Net short-wave radiationflux(atmosph.top)' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'Net long-wave radiation flux(atmosph.top)' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'Long wave radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'Short wave radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'Global radiation flux' = { + table2Version = 2 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'Radiance (with respect to wave number)' = { + table2Version = 2 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'Radiance (with respect to wave length)' = { + table2Version = 2 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'Momentum flux, u-component' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'Momentum flux, v-component' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'Wind mixing energy' = { + table2Version = 2 ; + indicatorOfParameter = 126 ; + } +#Image data +'Image data' = { + table2Version = 2 ; + indicatorOfParameter = 127 ; + } +#Orography +'Orography' = { + table2Version = 2 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'Soil Moisture' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'Soil Temperature' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'Snow depth water equivalent' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'Snow Fall water equivalent' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'Total Cloud Cover' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'Total Precipitation' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Stream function +'Stream function' = { + table2Version = 1 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'Velocity potential' = { + table2Version = 1 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'Potential temperature' = { + table2Version = 1 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'Wind speed' = { + table2Version = 1 ; + indicatorOfParameter = 32 ; + } +#Pressure +'Pressure' = { + table2Version = 1 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'Potential vorticity' = { + table2Version = 1 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'Maximum temperature at 2 metres in the last 6 hours' = { + table2Version = 1 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'Minimum temperature at 2 metres in the last 6 hours' = { + table2Version = 1 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'Geopotential' = { + table2Version = 1 ; + indicatorOfParameter = 6 ; + } +#Temperature +'Temperature' = { + table2Version = 1 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'U component of wind' = { + table2Version = 1 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'V component of wind' = { + table2Version = 1 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'Specific humidity' = { + table2Version = 1 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'Surface pressure' = { + table2Version = 1 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'Vertical velocity' = { + table2Version = 1 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'Vorticity (relative)' = { + table2Version = 1 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'Boundary layer dissipation' = { + table2Version = 1 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'Surface sensible heat flux' = { + table2Version = 1 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'Surface latent heat flux' = { + table2Version = 1 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'Mean sea level pressure' = { + table2Version = 1 ; + indicatorOfParameter = 2 ; + } +#Divergence +'Divergence' = { + table2Version = 1 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'Geopotential Height' = { + table2Version = 1 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'Relative humidity' = { + table2Version = 1 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'10 metre U wind component' = { + table2Version = 1 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'10 metre V wind component' = { + table2Version = 1 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'2 metre temperature' = { + table2Version = 1 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'2 metre dewpoint temperature' = { + table2Version = 1 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'Land-sea mask' = { + table2Version = 1 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'Surface roughness' = { + table2Version = 1 ; + indicatorOfParameter = 83 ; + } +#Albedo +'Albedo' = { + table2Version = 1 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'Evaporation' = { + table2Version = 1 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'Convective cloud cover' = { + table2Version = 1 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'Low cloud cover' = { + table2Version = 1 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'Medium cloud cover' = { + table2Version = 1 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'High cloud cover' = { + table2Version = 1 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'Brightness temperature' = { + table2Version = 1 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'Vegetation fraction' = { + table2Version = 1 ; + indicatorOfParameter = 87 ; + } +#Runoff +'Runoff' = { + table2Version = 1 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'Total column ozone' = { + table2Version = 1 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'Convective snowfall' = { + table2Version = 1 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'Large-scale snowfall' = { + table2Version = 1 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'large scale precipitation' = { + table2Version = 1 ; + indicatorOfParameter = 62 ; + } +#Probability of a tropical storm +'Probability of a tropical storm' = { + table2Version = 131 ; + indicatorOfParameter = 89 ; + } +#Probability of a hurricane +'Probability of a hurricane' = { + table2Version = 131 ; + indicatorOfParameter = 90 ; + } +#Probability of a tropical depression +'Probability of a tropical depression' = { + table2Version = 131 ; + indicatorOfParameter = 91 ; + } +#Climatological probability of a tropical storm +'Climatological probability of a tropical storm' = { + table2Version = 131 ; + indicatorOfParameter = 92 ; + } +#Climatological probability of a hurricane +'Climatological probability of a hurricane' = { + table2Version = 131 ; + indicatorOfParameter = 93 ; + } +#Climatological probability of a tropical depression +'Climatological probability of a tropical depression' = { + table2Version = 131 ; + indicatorOfParameter = 94 ; + } +#Probability anomaly of a tropical storm +'Probability anomaly of a tropical storm' = { + table2Version = 131 ; + indicatorOfParameter = 95 ; + } +#Probability anomaly of a hurricane +'Probability anomaly of a hurricane' = { + table2Version = 131 ; + indicatorOfParameter = 96 ; + } +#Probability anomaly of a tropical depression +'Probability anomaly of a tropical depression' = { + table2Version = 131 ; + indicatorOfParameter = 97 ; + } +#Aerosol type 15 mass mixing ratio +'Aerosol type 15 mass mixing ratio' = { + table2Version = 211 ; + indicatorOfParameter = 15 ; + } +#Cloud water +'Cloud water' = { + table2Version = 1 ; + indicatorOfParameter = 76 ; + } +#Pressure tendency +'Pressure tendency' = { + table2Version = 1 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'ICAO Standard Atmosphere reference height' = { + table2Version = 1 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'Geometrical height' = { + table2Version = 1 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'Standard deviation of height' = { + table2Version = 1 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'Pseudo-adiabatic potential temperature' = { + table2Version = 1 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'Maximum temperature' = { + table2Version = 1 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'Minimum temperature' = { + table2Version = 1 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'Dew point temperature' = { + table2Version = 1 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'Dew point depression (or deficit)' = { + table2Version = 1 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'Lapse rate' = { + table2Version = 1 ; + indicatorOfParameter = 19 ; + } +#Visibility +'Visibility' = { + table2Version = 1 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'Radar spectra (1)' = { + table2Version = 1 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'Radar spectra (2)' = { + table2Version = 1 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'Radar spectra (3)' = { + table2Version = 1 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'Parcel lifted index (to 500 hPa)' = { + table2Version = 1 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'Temperature anomaly' = { + table2Version = 1 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'Pressure anomaly' = { + table2Version = 1 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'Geopotential height anomaly' = { + table2Version = 1 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'Wave spectra (1)' = { + table2Version = 1 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'Wave spectra (2)' = { + table2Version = 1 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'Wave spectra (3)' = { + table2Version = 1 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'Wind direction' = { + table2Version = 1 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'Montgomery stream Function' = { + table2Version = 1 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'Sigma coordinate vertical velocity' = { + table2Version = 1 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'Absolute vorticity' = { + table2Version = 1 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'Absolute divergence' = { + table2Version = 1 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'Vertical u-component shear' = { + table2Version = 1 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'Vertical v-component shear' = { + table2Version = 1 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'Direction of current' = { + table2Version = 1 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'Speed of current' = { + table2Version = 1 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'U-component of current ' = { + table2Version = 1 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'V-component of current ' = { + table2Version = 1 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'Humidity mixing ratio' = { + table2Version = 1 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'Precipitable water' = { + table2Version = 1 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'Vapour pressure' = { + table2Version = 1 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'Saturation deficit' = { + table2Version = 1 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'Precipitation rate' = { + table2Version = 1 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'Thunderstorm probability' = { + table2Version = 1 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'Convective precipitation (water)' = { + table2Version = 1 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'Snow fall rate water equivalent' = { + table2Version = 1 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'Mixed layer depth' = { + table2Version = 1 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'Transient thermocline depth' = { + table2Version = 1 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'Main thermocline depth' = { + table2Version = 1 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'Main thermocline anomaly' = { + table2Version = 1 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'Best lifted index (to 500 hPa)' = { + table2Version = 1 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'Water temperature' = { + table2Version = 1 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'Deviation of sea-level from mean' = { + table2Version = 1 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'Soil moisture content' = { + table2Version = 1 ; + indicatorOfParameter = 86 ; + } +#Salinity +'Salinity' = { + table2Version = 1 ; + indicatorOfParameter = 88 ; + } +#Density +'Density' = { + table2Version = 1 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'Ice cover (1=land, 0=sea)' = { + table2Version = 1 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'Ice thickness' = { + table2Version = 1 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'Direction of ice drift' = { + table2Version = 1 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'Speed of ice drift' = { + table2Version = 1 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'U-component of ice drift' = { + table2Version = 1 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'V-component of ice drift' = { + table2Version = 1 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'Ice growth rate' = { + table2Version = 1 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'Ice divergence' = { + table2Version = 1 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'Snow melt' = { + table2Version = 1 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'Signific.height,combined wind waves+swell' = { + table2Version = 1 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'Mean direction of wind waves' = { + table2Version = 1 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'Significant height of wind waves' = { + table2Version = 1 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'Mean period of wind waves' = { + table2Version = 1 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'Direction of swell waves' = { + table2Version = 1 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'Significant height of swell waves' = { + table2Version = 1 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'Mean period of swell waves' = { + table2Version = 1 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'Mean direction of primary swell' = { + table2Version = 1 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'Mean period of primary swell' = { + table2Version = 1 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'Secondary wave direction' = { + table2Version = 1 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'Secondary wave period' = { + table2Version = 1 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'Net short-wave radiation flux (surface)' = { + table2Version = 1 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'Net long-wave radiation flux (surface)' = { + table2Version = 1 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'Net short-wave radiationflux(atmosph.top)' = { + table2Version = 1 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'Net long-wave radiation flux(atmosph.top)' = { + table2Version = 1 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'Long wave radiation flux' = { + table2Version = 1 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'Short wave radiation flux' = { + table2Version = 1 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'Global radiation flux' = { + table2Version = 1 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'Radiance (with respect to wave number)' = { + table2Version = 1 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'Radiance (with respect to wave length)' = { + table2Version = 1 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'Momentum flux, u-component' = { + table2Version = 1 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'Momentum flux, v-component' = { + table2Version = 1 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'Wind mixing energy' = { + table2Version = 1 ; + indicatorOfParameter = 126 ; + } +#Image data +'Image data' = { + table2Version = 1 ; + indicatorOfParameter = 127 ; + } +#Orography +'Orography' = { + table2Version = 1 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'Soil Moisture' = { + table2Version = 1 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'Soil Temperature' = { + table2Version = 1 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'Snow depth water equivalent' = { + table2Version = 1 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'Snow Fall water equivalent' = { + table2Version = 1 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'Total Cloud Cover' = { + table2Version = 1 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'Total Precipitation' = { + table2Version = 1 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; +} diff --git a/definitions/grib1/ocean.1.table b/definitions/grib1/ocean.1.table new file mode 100644 index 000000000..2ccc5c317 --- /dev/null +++ b/definitions/grib1/ocean.1.table @@ -0,0 +1,17 @@ +# CODE TABLE OCEAN 1 +0 0 bit0_off +0 1 bit0_on +1 0 bit1_off +1 1 bit1_on +2 0 bit2_off +2 1 bit2_on +3 0 bit3_off +3 1 bit3_on +4 0 bit4_off +4 1 bit4_on +5 0 bit5_off +5 1 bit5_on +6 0 bit6_off +6 1 bit6_on +7 0 absent +7 1 present diff --git a/definitions/grib1/param.pl b/definitions/grib1/param.pl new file mode 100755 index 000000000..c8e27d6a1 --- /dev/null +++ b/definitions/grib1/param.pl @@ -0,0 +1,61 @@ +#!/usr/local/bin/perl56 -I/usr/local/lib/metaps/perl +use Data::Dumper; +use metdb qw(prod); + +use metdb::grib_parameters; + + +my @x = metdb::grib_parameters->all_fields; +print Dumper(\@x); +my $last; + +foreach my $p ( metdb::grib_parameters->find( + { }, + [qw(grib_originating_centre grib_code_table grib_parameter)])) +{ + my ($centre,$table) = ($p->get_grib_originating_centre,$p->get_grib_code_table); + my ($param,$abbr,$name,$unit) = ($p->get_grib_parameter, $p->get_mars_abbreviation,$p->get_long_name,$p->get_unit); + + $abbr = "-" unless($abbr); + + my $file = "2.$centre.$table.table"; + if($file ne $last) + { + #system("p4 edit $file"); + open(OUT,">$file") or die "$file: $!"; + print OUT "# This file was automatically generated by $0\n"; + #system("p4 add $file"); + $last = $file; + } + + print OUT join(" ",$param,lc($abbr),$name,"($unit)"), "\n"; +} + + +__END__ +'grib_originating_centre', +'grib_code_table', +'grib_parameter', +'mars_abbreviation', +'long_name', +'description', +'web_title', +'unit', +'comment', +'parameter_type', +'wind_corresponding_parameter', +'netcdf_name', +'netcdf_cf_approved', +'magics_abbreviated_text', +'magics_title', +'magics_offset', +'magics_factor', +'magics_scaled_unit', +'magics_contour_interval', +'magics_specification_group', +'magics_comment', +'dissemination_accuracy', +'dissemination', +'insert_date', +'update_date' + diff --git a/definitions/grib1/paramId.def b/definitions/grib1/paramId.def new file mode 100644 index 000000000..20bbe40f1 --- /dev/null +++ b/definitions/grib1/paramId.def @@ -0,0 +1,2109 @@ +# Automatically generated by create_def.pl from database param@wrep-db-misc-prod, do not edit +#Stream function +'1' = { + table2Version = 3 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'2' = { + table2Version = 3 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'3' = { + table2Version = 3 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'10' = { + table2Version = 3 ; + indicatorOfParameter = 32 ; + } +#Pressure +'54' = { + table2Version = 3 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'60' = { + table2Version = 3 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'121' = { + table2Version = 3 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'122' = { + table2Version = 3 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'129' = { + table2Version = 3 ; + indicatorOfParameter = 6 ; + } +#Temperature +'130' = { + table2Version = 3 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'131' = { + table2Version = 3 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'132' = { + table2Version = 3 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'133' = { + table2Version = 3 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'134' = { + table2Version = 3 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'135' = { + table2Version = 3 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'138' = { + table2Version = 3 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'145' = { + table2Version = 3 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'146' = { + table2Version = 3 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'147' = { + table2Version = 3 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'151' = { + table2Version = 3 ; + indicatorOfParameter = 2 ; + } +#Divergence +'155' = { + table2Version = 3 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'156' = { + table2Version = 3 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'157' = { + table2Version = 3 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'165' = { + table2Version = 3 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'166' = { + table2Version = 3 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'167' = { + table2Version = 3 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'168' = { + table2Version = 3 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'172' = { + table2Version = 3 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'173' = { + table2Version = 3 ; + indicatorOfParameter = 83 ; + } +#Albedo +'174' = { + table2Version = 3 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'182' = { + table2Version = 3 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'185' = { + table2Version = 3 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'186' = { + table2Version = 3 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'187' = { + table2Version = 3 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'188' = { + table2Version = 3 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'194' = { + table2Version = 3 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'199' = { + table2Version = 3 ; + indicatorOfParameter = 87 ; + } +#Runoff +'205' = { + table2Version = 3 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'206' = { + table2Version = 3 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'239' = { + table2Version = 3 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'240' = { + table2Version = 3 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'3062' = { + table2Version = 3 ; + indicatorOfParameter = 62 ; + } +#Cloud water +'260102' = { + table2Version = 3 ; + indicatorOfParameter = 76 ; + } +#Virtual temperature +'300012' = { + table2Version = 1 ; + indicatorOfParameter = 12 ; + } +#Virtual temperature +'300012' = { + table2Version = 2 ; + indicatorOfParameter = 12 ; + } +#Virtual temperature +'300012' = { + table2Version = 3 ; + indicatorOfParameter = 12 ; + } +#Pressure tendency +'3003' = { + table2Version = 3 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'3005' = { + table2Version = 3 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'3008' = { + table2Version = 3 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'3009' = { + table2Version = 3 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'3014' = { + table2Version = 3 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'3015' = { + table2Version = 3 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'3016' = { + table2Version = 3 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'3017' = { + table2Version = 3 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'3018' = { + table2Version = 3 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'3019' = { + table2Version = 3 ; + indicatorOfParameter = 19 ; + } +#Visibility +'3020' = { + table2Version = 3 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'3021' = { + table2Version = 3 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'3022' = { + table2Version = 3 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'3023' = { + table2Version = 3 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'3024' = { + table2Version = 3 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'3025' = { + table2Version = 3 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'3026' = { + table2Version = 3 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'3027' = { + table2Version = 3 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'3028' = { + table2Version = 3 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'3029' = { + table2Version = 3 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'3030' = { + table2Version = 3 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'3031' = { + table2Version = 3 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'3037' = { + table2Version = 3 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'3038' = { + table2Version = 3 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'3041' = { + table2Version = 3 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'3042' = { + table2Version = 3 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'3045' = { + table2Version = 3 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'3046' = { + table2Version = 3 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'3047' = { + table2Version = 3 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'3048' = { + table2Version = 3 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'3049' = { + table2Version = 3 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'3050' = { + table2Version = 3 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'3053' = { + table2Version = 3 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'3054' = { + table2Version = 3 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'3055' = { + table2Version = 3 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'3056' = { + table2Version = 3 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'3059' = { + table2Version = 3 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'3060' = { + table2Version = 3 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'3063' = { + table2Version = 3 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'3064' = { + table2Version = 3 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'3067' = { + table2Version = 3 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'3068' = { + table2Version = 3 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'3069' = { + table2Version = 3 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'3070' = { + table2Version = 3 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'3077' = { + table2Version = 3 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'3080' = { + table2Version = 3 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'3082' = { + table2Version = 3 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'3086' = { + table2Version = 3 ; + indicatorOfParameter = 86 ; + } +#Salinity +'3088' = { + table2Version = 3 ; + indicatorOfParameter = 88 ; + } +#Density +'3089' = { + table2Version = 3 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'3091' = { + table2Version = 3 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'3092' = { + table2Version = 3 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'3093' = { + table2Version = 3 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'3094' = { + table2Version = 3 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'3095' = { + table2Version = 3 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'3096' = { + table2Version = 3 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'3097' = { + table2Version = 3 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'3098' = { + table2Version = 3 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'3099' = { + table2Version = 3 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'3100' = { + table2Version = 3 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'3101' = { + table2Version = 3 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'3102' = { + table2Version = 3 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'3103' = { + table2Version = 3 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'3104' = { + table2Version = 3 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'3105' = { + table2Version = 3 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'3106' = { + table2Version = 3 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'3107' = { + table2Version = 3 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'3108' = { + table2Version = 3 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'3109' = { + table2Version = 3 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'3110' = { + table2Version = 3 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'3111' = { + table2Version = 3 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'3112' = { + table2Version = 3 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'3113' = { + table2Version = 3 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'3114' = { + table2Version = 3 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'3115' = { + table2Version = 3 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'3116' = { + table2Version = 3 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'3117' = { + table2Version = 3 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'3119' = { + table2Version = 3 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'3120' = { + table2Version = 3 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'3124' = { + table2Version = 3 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'3125' = { + table2Version = 3 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'3126' = { + table2Version = 3 ; + indicatorOfParameter = 126 ; + } +#Image data +'3127' = { + table2Version = 3 ; + indicatorOfParameter = 127 ; + } +#Orography +'228002' = { + table2Version = 3 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'228039' = { + table2Version = 3 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'228139' = { + table2Version = 3 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'228141' = { + table2Version = 3 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'228144' = { + table2Version = 3 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'228164' = { + table2Version = 3 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'228228' = { + table2Version = 3 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Stream function +'1' = { + table2Version = 2 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'2' = { + table2Version = 2 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'3' = { + table2Version = 2 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'10' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + } +#Pressure +'54' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'60' = { + table2Version = 2 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'121' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'122' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'129' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Temperature +'130' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'131' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'132' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'133' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'134' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'135' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'138' = { + table2Version = 2 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'145' = { + table2Version = 2 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'146' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'147' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'151' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + } +#Divergence +'155' = { + table2Version = 2 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'156' = { + table2Version = 2 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'157' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'165' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'166' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'167' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'168' = { + table2Version = 2 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'172' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'173' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + } +#Albedo +'174' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'182' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'185' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'186' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'187' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'188' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'194' = { + table2Version = 2 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'199' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + } +#Runoff +'205' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'206' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'239' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'240' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'3062' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + } +#Cloud water +'260102' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + } +#Pressure tendency +'3003' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'3005' = { + table2Version = 2 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'3008' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'3009' = { + table2Version = 2 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'3014' = { + table2Version = 2 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'3015' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'3016' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'3017' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'3018' = { + table2Version = 2 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'3019' = { + table2Version = 2 ; + indicatorOfParameter = 19 ; + } +#Visibility +'3020' = { + table2Version = 2 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'3021' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'3022' = { + table2Version = 2 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'3023' = { + table2Version = 2 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'3024' = { + table2Version = 2 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'3025' = { + table2Version = 2 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'3026' = { + table2Version = 2 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'3027' = { + table2Version = 2 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'3028' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'3029' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'3030' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'3031' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'3037' = { + table2Version = 2 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'3038' = { + table2Version = 2 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'3041' = { + table2Version = 2 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'3042' = { + table2Version = 2 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'3045' = { + table2Version = 2 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'3046' = { + table2Version = 2 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'3047' = { + table2Version = 2 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'3048' = { + table2Version = 2 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'3049' = { + table2Version = 2 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'3050' = { + table2Version = 2 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'3053' = { + table2Version = 2 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'3054' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'3055' = { + table2Version = 2 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'3056' = { + table2Version = 2 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'3059' = { + table2Version = 2 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'3060' = { + table2Version = 2 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'3063' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'3064' = { + table2Version = 2 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'3067' = { + table2Version = 2 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'3068' = { + table2Version = 2 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'3069' = { + table2Version = 2 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'3070' = { + table2Version = 2 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'3077' = { + table2Version = 2 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'3080' = { + table2Version = 2 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'3082' = { + table2Version = 2 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'3086' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + } +#Salinity +'3088' = { + table2Version = 2 ; + indicatorOfParameter = 88 ; + } +#Density +'3089' = { + table2Version = 2 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'3091' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'3092' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'3093' = { + table2Version = 2 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'3094' = { + table2Version = 2 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'3095' = { + table2Version = 2 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'3096' = { + table2Version = 2 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'3097' = { + table2Version = 2 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'3098' = { + table2Version = 2 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'3099' = { + table2Version = 2 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'3100' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'3101' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'3102' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'3103' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'3104' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'3105' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'3106' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'3107' = { + table2Version = 2 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'3108' = { + table2Version = 2 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'3109' = { + table2Version = 2 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'3110' = { + table2Version = 2 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'3111' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'3112' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'3113' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'3114' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'3115' = { + table2Version = 2 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'3116' = { + table2Version = 2 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'3117' = { + table2Version = 2 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'3119' = { + table2Version = 2 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'3120' = { + table2Version = 2 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'3124' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'3125' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'3126' = { + table2Version = 2 ; + indicatorOfParameter = 126 ; + } +#Image data +'3127' = { + table2Version = 2 ; + indicatorOfParameter = 127 ; + } +#Orography +'228002' = { + table2Version = 2 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'228039' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'228139' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'228141' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'228144' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'228164' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'228228' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Stream function +'1' = { + table2Version = 1 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'2' = { + table2Version = 1 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'3' = { + table2Version = 1 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'10' = { + table2Version = 1 ; + indicatorOfParameter = 32 ; + } +#Pressure +'54' = { + table2Version = 1 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'60' = { + table2Version = 1 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'121' = { + table2Version = 1 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'122' = { + table2Version = 1 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'129' = { + table2Version = 1 ; + indicatorOfParameter = 6 ; + } +#Temperature +'130' = { + table2Version = 1 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'131' = { + table2Version = 1 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'132' = { + table2Version = 1 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'133' = { + table2Version = 1 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'134' = { + table2Version = 1 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'135' = { + table2Version = 1 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'138' = { + table2Version = 1 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'145' = { + table2Version = 1 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'146' = { + table2Version = 1 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'147' = { + table2Version = 1 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'151' = { + table2Version = 1 ; + indicatorOfParameter = 2 ; + } +#Divergence +'155' = { + table2Version = 1 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'156' = { + table2Version = 1 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'157' = { + table2Version = 1 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'165' = { + table2Version = 1 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'166' = { + table2Version = 1 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'167' = { + table2Version = 1 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'168' = { + table2Version = 1 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'172' = { + table2Version = 1 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'173' = { + table2Version = 1 ; + indicatorOfParameter = 83 ; + } +#Albedo +'174' = { + table2Version = 1 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'182' = { + table2Version = 1 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'185' = { + table2Version = 1 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'186' = { + table2Version = 1 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'187' = { + table2Version = 1 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'188' = { + table2Version = 1 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'194' = { + table2Version = 1 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'199' = { + table2Version = 1 ; + indicatorOfParameter = 87 ; + } +#Runoff +'205' = { + table2Version = 1 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'206' = { + table2Version = 1 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'239' = { + table2Version = 1 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'240' = { + table2Version = 1 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'3062' = { + table2Version = 1 ; + indicatorOfParameter = 62 ; + } +#Probability of a tropical storm +'131089' = { + table2Version = 131 ; + indicatorOfParameter = 89 ; + } +#Probability of a hurricane +'131090' = { + table2Version = 131 ; + indicatorOfParameter = 90 ; + } +#Probability of a tropical depression +'131091' = { + table2Version = 131 ; + indicatorOfParameter = 91 ; + } +#Climatological probability of a tropical storm +'131092' = { + table2Version = 131 ; + indicatorOfParameter = 92 ; + } +#Climatological probability of a hurricane +'131093' = { + table2Version = 131 ; + indicatorOfParameter = 93 ; + } +#Climatological probability of a tropical depression +'131094' = { + table2Version = 131 ; + indicatorOfParameter = 94 ; + } +#Probability anomaly of a tropical storm +'131095' = { + table2Version = 131 ; + indicatorOfParameter = 95 ; + } +#Probability anomaly of a hurricane +'131096' = { + table2Version = 131 ; + indicatorOfParameter = 96 ; + } +#Probability anomaly of a tropical depression +'131097' = { + table2Version = 131 ; + indicatorOfParameter = 97 ; + } +#Aerosol type 15 mass mixing ratio +'211015' = { + table2Version = 211 ; + indicatorOfParameter = 15 ; + } +#Cloud water +'260102' = { + table2Version = 1 ; + indicatorOfParameter = 76 ; + } +#Pressure tendency +'3003' = { + table2Version = 1 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'3005' = { + table2Version = 1 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'3008' = { + table2Version = 1 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'3009' = { + table2Version = 1 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'3014' = { + table2Version = 1 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'3015' = { + table2Version = 1 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'3016' = { + table2Version = 1 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'3017' = { + table2Version = 1 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'3018' = { + table2Version = 1 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'3019' = { + table2Version = 1 ; + indicatorOfParameter = 19 ; + } +#Visibility +'3020' = { + table2Version = 1 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'3021' = { + table2Version = 1 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'3022' = { + table2Version = 1 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'3023' = { + table2Version = 1 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'3024' = { + table2Version = 1 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'3025' = { + table2Version = 1 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'3026' = { + table2Version = 1 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'3027' = { + table2Version = 1 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'3028' = { + table2Version = 1 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'3029' = { + table2Version = 1 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'3030' = { + table2Version = 1 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'3031' = { + table2Version = 1 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'3037' = { + table2Version = 1 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'3038' = { + table2Version = 1 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'3041' = { + table2Version = 1 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'3042' = { + table2Version = 1 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'3045' = { + table2Version = 1 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'3046' = { + table2Version = 1 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'3047' = { + table2Version = 1 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'3048' = { + table2Version = 1 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'3049' = { + table2Version = 1 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'3050' = { + table2Version = 1 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'3053' = { + table2Version = 1 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'3054' = { + table2Version = 1 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'3055' = { + table2Version = 1 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'3056' = { + table2Version = 1 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'3059' = { + table2Version = 1 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'3060' = { + table2Version = 1 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'3063' = { + table2Version = 1 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'3064' = { + table2Version = 1 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'3067' = { + table2Version = 1 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'3068' = { + table2Version = 1 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'3069' = { + table2Version = 1 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'3070' = { + table2Version = 1 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'3077' = { + table2Version = 1 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'3080' = { + table2Version = 1 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'3082' = { + table2Version = 1 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'3086' = { + table2Version = 1 ; + indicatorOfParameter = 86 ; + } +#Salinity +'3088' = { + table2Version = 1 ; + indicatorOfParameter = 88 ; + } +#Density +'3089' = { + table2Version = 1 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'3091' = { + table2Version = 1 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'3092' = { + table2Version = 1 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'3093' = { + table2Version = 1 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'3094' = { + table2Version = 1 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'3095' = { + table2Version = 1 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'3096' = { + table2Version = 1 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'3097' = { + table2Version = 1 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'3098' = { + table2Version = 1 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'3099' = { + table2Version = 1 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'3100' = { + table2Version = 1 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'3101' = { + table2Version = 1 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'3102' = { + table2Version = 1 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'3103' = { + table2Version = 1 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'3104' = { + table2Version = 1 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'3105' = { + table2Version = 1 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'3106' = { + table2Version = 1 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'3107' = { + table2Version = 1 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'3108' = { + table2Version = 1 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'3109' = { + table2Version = 1 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'3110' = { + table2Version = 1 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'3111' = { + table2Version = 1 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'3112' = { + table2Version = 1 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'3113' = { + table2Version = 1 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'3114' = { + table2Version = 1 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'3115' = { + table2Version = 1 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'3116' = { + table2Version = 1 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'3117' = { + table2Version = 1 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'3119' = { + table2Version = 1 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'3120' = { + table2Version = 1 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'3124' = { + table2Version = 1 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'3125' = { + table2Version = 1 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'3126' = { + table2Version = 1 ; + indicatorOfParameter = 126 ; + } +#Image data +'3127' = { + table2Version = 1 ; + indicatorOfParameter = 127 ; + } +#Orography +'228002' = { + table2Version = 1 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'228039' = { + table2Version = 1 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'228139' = { + table2Version = 1 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'228141' = { + table2Version = 1 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'228144' = { + table2Version = 1 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'228164' = { + table2Version = 1 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'228228' = { + table2Version = 1 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; +} diff --git a/definitions/grib1/precision.table b/definitions/grib1/precision.table new file mode 100644 index 000000000..5526a4f73 --- /dev/null +++ b/definitions/grib1/precision.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.7, Precision of floating-point numbers + +1 32bits IEEE 32-bit +2 64bits IEEE 64-bit +3 128bits IEEE 128-bit +255 255 Missing diff --git a/definitions/grib1/predefined_grid.def b/definitions/grib1/predefined_grid.def new file mode 100644 index 000000000..04688c561 --- /dev/null +++ b/definitions/grib1/predefined_grid.def @@ -0,0 +1,139 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Predefined grid 21 + +#position offsetSection2; +#transient section2Length=0 ; + +template predefined_grid_values "grib1/grid_[gridDefinition].def"; + +# NV -- number of vertical coordinate parameters +constant numberOfVerticalCoordinateValues=0 ; + +constant neitherPresent = 255; + +alias NV = numberOfVerticalCoordinateValues; +alias numberOfCoordinatesValues= numberOfVerticalCoordinateValues; + +# PV -- location +# (octet number) +constant pvlLocation = 255; + +# Data representation type +constant dataRepresentationType = 0; + +# Grid definition +# (according to data representation type - octet 6 above) + +# grib 1 -> 2 +constant gridDefinitionTemplateNumber = 0; + +# START 1/grid_definition.latitude_longitude_grid ---------------------------------------------------------------------- +# GRID DEFINITION latitude/longitude grid (or equidistant cylindrical) + +alias numberOfPointsAlongAParallel=Ni; +alias numberOfPointsAlongAMeridian=Nj; + +# Latitudes and Longitudes of the first and the last points +# Resolution and component flags + +# La1 - latitude of first grid point +meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : read_only; +alias La1 = latitudeOfFirstGridPoint; + +# Lo1 - longitude of first grid point +meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib1divider,truncateDegrees) : read_only; +alias Lo1 = longitudeOfFirstGridPoint; + +# Resolution and component flags +constant resolutionAndComponentFlags = 128; + +# Not flagbit numbers 7 to 0, while wmo is 1 to 8 +constant ijDirectionIncrementGiven = 1 ; + +# For grib 1 to 2 +alias iDirectionIncrementGiven = ijDirectionIncrementGiven; +alias jDirectionIncrementGiven = ijDirectionIncrementGiven; +alias DiGiven = ijDirectionIncrementGiven; +alias DjGiven = ijDirectionIncrementGiven; + +constant earthIsOblate = 0; +constant resolutionAndComponentFlags3 = 0; +constant resolutionAndComponentFlags4 = 0; +constant uvRelativeToGrid = 0; +constant resolutionAndComponentFlags6 = 0; +constant resolutionAndComponentFlags7 = 0; +constant resolutionAndComponentFlags8 = 0; + +# La2 - latitude of last grid point +meta geography.latitudeOfLastGridPointInDegrees scale(latitudeOfLastGridPoint,oneConstant,grib1divider,truncateDegrees) : read_only; +alias La2 = latitudeOfLastGridPoint; + +# Lo2 - longitude of last grid point +meta geography.longitudeOfLastGridPointInDegrees scale(longitudeOfLastGridPoint,oneConstant,grib1divider,truncateDegrees) : read_only; +alias Lo2 = longitudeOfLastGridPoint; + +alias Dj = jDirectionIncrement; +alias Di = iDirectionIncrement; + +# Scanning mode +constant scanningMode = 64; + +# Not flagbit numbers 7 to 0, while wmo is 1 to 8 +constant iScansNegatively = 0 ; +constant jScansPositively = 1 ; +constant jPointsAreConsecutive = 0; +constant iScansPositively = 1; + +constant scanningMode4 = 0; +constant scanningMode5 = 0; +constant scanningMode6 = 0; +constant scanningMode7 = 0; +constant scanningMode8 = 0; + +meta geography.jDirectionIncrementInDegrees latlon_increment(ijDirectionIncrementGiven,jDirectionIncrement, + jScansPositively, + latitudeOfFirstGridPointInDegrees,latitudeOfLastGridPointInDegrees, + numberOfPointsAlongAMeridian,oneConstant,grib1divider,0) : read_only; + +meta geography.iDirectionIncrementInDegrees latlon_increment(ijDirectionIncrementGiven,iDirectionIncrement, + iScansPositively, + longitudeOfFirstGridPointInDegrees,longitudeOfLastGridPointInDegrees, + Ni,oneConstant,grib1divider,1) : read_only; + +alias latitudeFirstInDegrees = latitudeOfFirstGridPointInDegrees; +alias longitudeFirstInDegrees = longitudeOfFirstGridPointInDegrees; +alias latitudeLastInDegrees = latitudeOfLastGridPointInDegrees; +alias longitudeLastInDegrees = longitudeOfLastGridPointInDegrees; +alias DiInDegrees = iDirectionIncrementInDegrees; +alias DjInDegrees = jDirectionIncrementInDegrees; + +alias numberOfPoints=numberOfDataPoints; +#alias ls.valuesCount=numberOfValues; + +# END 1/grid_definition.latitude_longitude_grid ---------------------------------------------------------------------- +constant PVPresent = 0; +constant PLPresent = 0; +constant reducedGrid =0; + +# we always include the bitmap keys if a GDS is not present +# Number of unused bits at end of Section 3 +constant numberOfUnusedBitsAtEndOfSection3 = 0; + +# Table reference: +constant tableReference = 0; + +#position offsetBeforeBitmap; +meta bitmap gds_not_present_bitmap( missingValue,numberOfValues, + numberOfPoints, + latitudeOfFirstGridPoint, + Ni,numberOfUnusedBitsAtEndOfSection3) : read_only; + + diff --git a/definitions/grib1/regimes.table b/definitions/grib1/regimes.table new file mode 100644 index 000000000..d9fd1a665 --- /dev/null +++ b/definitions/grib1/regimes.table @@ -0,0 +1,5 @@ +# CODE TABLE Climatological regimes +1 1 Positive NAO +2 2 Scandinavian blocking +3 3 Negative NAO +4 4 Atlantic Ridge diff --git a/definitions/grib1/resolution_flags.def b/definitions/grib1/resolution_flags.def new file mode 100644 index 000000000..5e82bbafd --- /dev/null +++ b/definitions/grib1/resolution_flags.def @@ -0,0 +1,33 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Resolution and component flags +flags[1] resolutionAndComponentFlags 'grib1/7.table' : edition_specific,no_copy ; + +# Note our flagbit numbers run from 7 to 0, while WMO convention uses 1 to 8 +# (most significant to least significant) + +flagbit ijDirectionIncrementGiven(resolutionAndComponentFlags,7) = 1 ; + +# For grib 1 to 2 +alias iDirectionIncrementGiven = ijDirectionIncrementGiven; +alias jDirectionIncrementGiven = ijDirectionIncrementGiven; +alias DiGiven = ijDirectionIncrementGiven; +alias DjGiven = ijDirectionIncrementGiven; + +flagbit earthIsOblate(resolutionAndComponentFlags,6) : dump; + +flagbit resolutionAndComponentFlags3(resolutionAndComponentFlags,5) = 0: read_only; +flagbit resolutionAndComponentFlags4(resolutionAndComponentFlags,4) = 0: read_only; + +flagbit uvRelativeToGrid(resolutionAndComponentFlags,3) : dump; + +flagbit resolutionAndComponentFlags6(resolutionAndComponentFlags,2) = 0: read_only; +flagbit resolutionAndComponentFlags7(resolutionAndComponentFlags,1) = 0: read_only; +flagbit resolutionAndComponentFlags8(resolutionAndComponentFlags,0) = 0: read_only; diff --git a/definitions/grib1/scanning_mode.def b/definitions/grib1/scanning_mode.def new file mode 100644 index 000000000..57427cfc1 --- /dev/null +++ b/definitions/grib1/scanning_mode.def @@ -0,0 +1,46 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Scanning mode +flags[1] scanningMode 'grib1/8.table' : edition_specific,no_copy; + +# Not flagbit numbers 7 to 0, while wmo is 1 to 8 +flagbit iScansNegatively(scanningMode,7) : dump; +flagbit jScansPositively(scanningMode,6) : dump; +flagbit jPointsAreConsecutive(scanningMode,5) : dump; +constant alternativeRowScanning=0 : dump; +transient iScansPositively = !iScansNegatively : constraint; + +alias geography.iScansNegatively=iScansNegatively; +alias geography.jScansPositively=jScansPositively; +alias geography.jPointsAreConsecutive=jPointsAreConsecutive; + +flagbit scanningMode4(scanningMode,4) = 0: read_only; +flagbit scanningMode5(scanningMode,3) = 0: read_only; +flagbit scanningMode6(scanningMode,2) = 0: read_only; +flagbit scanningMode7(scanningMode,1) = 0: read_only; +flagbit scanningMode8(scanningMode,0) = 0: read_only; + +meta swapScanningX change_scanning_direction( values,Ni,Nj, + iScansNegatively,jScansPositively, + xFirst,xLast,x) : edition_specific,hidden,no_copy; +alias swapScanningLon = swapScanningX; + +meta swapScanningY change_scanning_direction( values,Ni,Nj, + iScansNegatively,jScansPositively, + yFirst,yLast,y) : edition_specific,hidden,no_copy; +alias swapScanningLat = swapScanningY; + +if (jPointsAreConsecutive) { + alias numberOfRows=Ni; + alias numberOfColumns=Nj; +} else { + alias numberOfRows=Nj; + alias numberOfColumns=Ni; +} diff --git a/definitions/grib1/section.0.def b/definitions/grib1/section.0.def new file mode 100644 index 000000000..5e007f62b --- /dev/null +++ b/definitions/grib1/section.0.def @@ -0,0 +1,10 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label empty; diff --git a/definitions/grib1/section.1.def b/definitions/grib1/section.1.def new file mode 100644 index 000000000..99491c70f --- /dev/null +++ b/definitions/grib1/section.1.def @@ -0,0 +1,358 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +constant ECMWF = 98 : hidden; +constant ECMWF_s = "ecmf" : hidden; +constant WMO= 0; +constant conceptsMasterDir="grib1" : hidden; +constant conceptsLocalDirECMF="grib1/localConcepts/ecmf" : hidden; +constant conceptsLocalDirAll="grib1/localConcepts/[centre:s]" : hidden; +transient productionStatusOfProcessedData=0; +position offsetSection1; +length[3] section1Length ; +meta section1Pointer section_pointer(offsetSection1,section1Length,1); +constant wrongPadding=0; + +# GRIB tables Version No. +# (currently 3 for international exchange) +unsigned[1] table2Version : edition_specific,dump; +alias gribTablesVersionNo=table2Version; + + +#assert(section1Length > 5); + +# Identification of originating/generating center +codetable[1] centre 'grib1/0.table' : dump,string_type; +alias identificationOfOriginatingGeneratingCentre=centre; +meta centreDescription codetable_title(centre); + +alias parameter.centre=centre; +alias originatingCentre=centre; +alias ls.centre = centre; + +# Generating process identification number +# (allocated by originating center) +unsigned[1] generatingProcessIdentifier : dump ; +alias generatingProcessIdentificationNumber=generatingProcessIdentifier; +alias process=generatingProcessIdentifier; + +unsigned[1] gridDefinition = 255 : edition_specific ; +flags[1] section1Flags 'grib1/1.table' = 128 : hidden ; # = section 2 present + +alias centreForTable2=centre; + +codetable[1] indicatorOfParameter 'grib1/2.[centreForTable2:l].[table2Version:l].table' : edition_specific,no_copy,dump; +meta parameterName codetable_title(indicatorOfParameter); +meta parameterUnits codetable_units(indicatorOfParameter); + +codetable[1] indicatorOfTypeOfLevel 'grib1/3.table' : edition_specific,no_copy,dump,string_type; +alias levelType=indicatorOfTypeOfLevel; + +transient pressureUnits="hPa"; + +concept_nofail vertical.typeOfLevel (unknown) { +#set uses the last one +#get returns the first match + 'surface' = {indicatorOfTypeOfLevel=1;} + 'cloudBase' = {indicatorOfTypeOfLevel=2;} + 'cloudTop' = {indicatorOfTypeOfLevel=3;} + 'isothermZero' = {indicatorOfTypeOfLevel=4;} + 'adiabaticCondensation' = {indicatorOfTypeOfLevel=5;} + 'maxWind' = {indicatorOfTypeOfLevel=6;} + 'tropopause' = {indicatorOfTypeOfLevel=7;} + 'nominalTop' = {indicatorOfTypeOfLevel=8;} + 'seaBottom' = {indicatorOfTypeOfLevel=9;} + 'isobaricInhPa' = {indicatorOfTypeOfLevel=100;} + 'isobaricInPa' = {indicatorOfTypeOfLevel=210;} + 'isobaricLayer' = {indicatorOfTypeOfLevel=101;} + 'meanSea' = {indicatorOfTypeOfLevel=102;} + 'isobaricLayerHighPrecision' = {indicatorOfTypeOfLevel=121;} + 'isobaricLayerMixedPrecision' = {indicatorOfTypeOfLevel=141;} + 'heightAboveSea' = {indicatorOfTypeOfLevel=103;} + 'heightAboveSeaLayer' = {indicatorOfTypeOfLevel=104;} + 'heightAboveGroundHighPrecision' = {indicatorOfTypeOfLevel=125;} + 'heightAboveGround' = {indicatorOfTypeOfLevel=105;} + 'heightAboveGroundLayer' = {indicatorOfTypeOfLevel=106;} + 'sigma' = {indicatorOfTypeOfLevel=107;} + 'sigmaLayer' = {indicatorOfTypeOfLevel=108;} + 'sigmaLayerHighPrecision' = {indicatorOfTypeOfLevel=128;} + 'hybrid' = {indicatorOfTypeOfLevel=109;} + 'hybridLayer' = {indicatorOfTypeOfLevel=110;} + 'depthBelowLand' = {indicatorOfTypeOfLevel=111;} + 'depthBelowLandLayer' = {indicatorOfTypeOfLevel=112;} + 'theta' = {indicatorOfTypeOfLevel=113;} + 'thetaLayer' = {indicatorOfTypeOfLevel=114;} + 'pressureFromGround' = {indicatorOfTypeOfLevel=115;} + 'pressureFromGroundLayer' = {indicatorOfTypeOfLevel=116;} + 'potentialVorticity' = {indicatorOfTypeOfLevel=117;} + 'depthBelowSea' = {indicatorOfTypeOfLevel=160;} + 'entireAtmosphere' = {indicatorOfTypeOfLevel=200;level=0;} + 'entireOcean' = {indicatorOfTypeOfLevel=201;level=0;} + 'oceanWave' = {indicatorOfTypeOfLevel=211;} + 'oceanMixedLayer' = {indicatorOfTypeOfLevel=212;} +} + +when ( typeOfLevel is "isobaricInPa" ) { set pressureUnits="Pa"; } +else { set pressureUnits="hPa";} + +alias ls.typeOfLevel=typeOfLevel; + +if ( indicatorOfTypeOfLevel == 101 or + indicatorOfTypeOfLevel == 104 or + indicatorOfTypeOfLevel == 106 or + indicatorOfTypeOfLevel == 108 or + indicatorOfTypeOfLevel == 110 or + indicatorOfTypeOfLevel == 112 or + indicatorOfTypeOfLevel == 114 or + indicatorOfTypeOfLevel == 116 or + indicatorOfTypeOfLevel == 120 or + indicatorOfTypeOfLevel == 121 or + indicatorOfTypeOfLevel == 128 or + indicatorOfTypeOfLevel == 141 ) +{ + unsigned[1] topLevel : can_be_missing,dump; + unsigned[1] bottomLevel : can_be_missing,dump; + meta levels sprintf("%d-%d",topLevel,bottomLevel) : dump; + alias ls.levels=levels; + alias vertical.level = topLevel; + alias vertical.topLevel = topLevel; + alias vertical.bottomLevel = bottomLevel; +} +else +{ + unsigned[2] level : can_be_missing,dump; + if (indicatorOfTypeOfLevel == 210) { + meta marsLevel scale(level,oneConstant,hundred) : read_only; + alias mars.levelist = marsLevel; + } + alias vertical.level=level; + alias vertical.topLevel = level; + alias vertical.bottomLevel = level; + alias ls.level=level; + alias lev=level; + +} + +if( indicatorOfTypeOfLevel == 109 || + indicatorOfTypeOfLevel == 100 || + indicatorOfTypeOfLevel == 110 || + indicatorOfTypeOfLevel == 113 || + indicatorOfTypeOfLevel == 117) +{ + alias mars.levelist = level; +} + +unsigned[1] yearOfCentury : edition_specific ; +unsigned[1] month ; +unsigned[1] day ; +unsigned[1] hour ; +unsigned[1] minute ; +transient second = 0; + +codetable[1] unitOfTimeRange 'grib1/4.table' = 1 : edition_specific; +alias unitOfTime=unitOfTimeRange; +alias indicatorOfUnitOfTimeRange=unitOfTimeRange; + +unsigned[1] P1 : edition_specific; + +unsigned[1] P2 : edition_specific; + +codetable[1] timeRangeIndicator 'grib1/5.table' = 1 : dump,edition_specific; + +unsigned[2] numberIncludedInAverage; + +meta mybits bits(numberIncludedInAverage,0,12); + +unsigned[1] numberMissingFromAveragesOrAccumulations; +unsigned[1] centuryOfReferenceTimeOfData ; + +codetable[1] subCentre 'grib1/0.[centre].table' : dump; + +if(table2Version >= 128) { + _if (centre != 98 && subCentre == 98) { + alias centreForTable2 = subCentre; +} else { + alias centreForTable2 = centre; +} +} else { + alias centreForTable2 = WMO; +} + +#if ( subCentre == 98 ) { +# alias conceptsLocalDir=conceptsLocalDirECMF; +#} else { +# alias conceptsLocalDir=conceptsLocalDirAll; +#} + +concept paramIdECMF (defaultParameter,"paramId.def",conceptsMasterDir,conceptsLocalDirECMF): no_copy; +concept paramId (paramIdECMF,"paramId.def",conceptsMasterDir,conceptsLocalDirAll): long_type,dump; + +concept cfNameECMF(defaultName,"cfName.def",conceptsMasterDir,conceptsLocalDirECMF) : dump,no_copy,read_only; +concept cfName(cfNameECMF,"cfName.def",conceptsMasterDir,conceptsLocalDirAll) : dump,no_copy,read_only; + +concept unitsECMF(defaultName,"units.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy,read_only; +concept units(unitsECMF,"units.def",conceptsMasterDir,conceptsLocalDirAll) : dump,no_copy,read_only; + +concept nameECMF(defaultName,"name.def",conceptsMasterDir,conceptsLocalDirECMF) : dump,no_copy,read_only; +concept name(nameECMF,"name.def",conceptsMasterDir,conceptsLocalDirAll) : dump,no_copy,read_only; + +signed[2] decimalScaleFactor :dump; +transient setLocalDefinition= 0 : no_copy; + +meta dataDate g1date(centuryOfReferenceTimeOfData,yearOfCentury,month,day) : dump; +meta year evaluate(dataDate / 10000) ; + +meta dataTime time(hour,minute,second) : dump; +meta julianDay julian_day(dataDate,hour,minute,second) : edition_specific; + +codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy; + +concept stepType (timeRangeIndicator) { +#set uses the last one +#get returns the first match + "instant" = {timeRangeIndicator=14;} # Fields from DWD in MARS + "instant" = {timeRangeIndicator=1;} + "instant" = {timeRangeIndicator=10;} + "instant" = {timeRangeIndicator=0;} + "avg" = {timeRangeIndicator=3;} + "avgfc" = {timeRangeIndicator=113;} + "avgd" = {timeRangeIndicator=113;} + "accum" = {timeRangeIndicator=2;} + "accum" = {timeRangeIndicator=4;} + # Since grib1 has not min/max, we had to use our own convention + # therefore we set the centre to ECMWF (98) + "max" = {timeRangeIndicator=118;} + "max" = {timeRangeIndicator=2;centre=98;} + "min" = {timeRangeIndicator=119;} + "min" = {timeRangeIndicator=2;centre=98;} + "diff" = {timeRangeIndicator=5;} + "rms" = {timeRangeIndicator=120;} + "sd" = {timeRangeIndicator=121;} + "cov" = {timeRangeIndicator=122;} + "avgua" = {timeRangeIndicator=123;} + "avgia" = {timeRangeIndicator=124;} +} + +#alias stepTypeInternal=stepType; +#alias lengthOfTimeRange=numberIncludedInAverage; +#alias indicatorOfUnitForTimeRange=unitOfTimeRange; +#alias indicatorOfUnitForTimeIncrement=zero; +#alias timeIncrement=zero; + +#if (timeRangeIndicator==113) { +# alias lengthOfTimeRange=numberIncludedInAverage; +# alias indicatorOfUnitForTimeRange=unitOfTimeRange; +# alias indicatorOfUnitForTimeIncrement=unitOfTimeRange; +# alias timeIncrement=P2; +# alias forecastTime=P1; +#} + +#if (stepType is "accum") { +# transient accumulationRange=P2-P1; +# alias lengthOfTimeRange=accumulationRange; +# alias forecastTime=P1; +# alias indicatorOfUnitForTimeRange=unitOfTimeRange; +#} + +#conversion 1->2 +_if (stepType is "instant" ) { + alias productDefinitionTemplateNumber=zero; +} else { + alias productDefinitionTemplateNumber=eight; +} + +meta stepRange g1step_range(P1,P2,timeRangeIndicator,unitOfTimeRange,stepUnits,stepType) : dump; +meta startStep long_vector(stepRange,0) : dump,no_copy; +meta endStep long_vector(stepRange,1) : dump,no_copy; + +alias stepInHours = endStep; +alias ls.stepRange = stepRange; +alias ls.dataDate = dataDate; + +alias mars.step = endStep; +alias mars.date = dataDate; +alias mars.levtype = indicatorOfTypeOfLevel; +alias mars.time = dataTime; +#alias mars.param = paramId; +meta marsParam mars_param(paramId,gribTablesVersionNo,indicatorOfParameter): read_only,dump; +alias mars.param = marsParam; + +meta time.validityDate validity_date(dataDate,dataTime,step,stepUnits); +meta time.validityTime validity_time(dataDate,dataTime,step,stepUnits); + +transient deleteLocalDefinition=0; + +if(((section1Length > 40) or new() or setLocalDefinition> 0) and deleteLocalDefinition==0) +{ + constant localUsePresent = 1 : edition_specific; + alias grib2LocalSectionPresent=present; + + if( (centre == ECMWF) or + (centre != ECMWF and + subCentre == ECMWF)) + { + pad reservedNeedNotBePresent(12); + codetable[1] localDefinitionNumber 'grib1/localDefinitionNumber.98.table' = 1 : dump; + template localDefinition "grib1/local.98.[localDefinitionNumber:l].def"; + if (changed(localDefinitionNumber)) { + if(!new() && localDefinitionNumber!=4 ) { + section_padding localExtensionPadding : read_only; + } + } + + template_nofail marsKeywords "mars/grib1.[stream:s].[type:s].def"; + #template marsKeywords "mars/grib1.[stream:s].[type:s].def"; + + } + else + { + if ( !new() || setLocalDefinition ) { + # Other centers + pad reservedNeedNotBePresent(12); + template_nofail localDefinition "grib1/local.[centre:l].def"; + + section_padding localExtensionPadding : read_only; + } + } + +} +else +{ + constant localUsePresent = 0 : edition_specific; + # template defaultMarsLabeling "mars/default_labeling.def"; +} + +section_padding section1Padding : read_only; + +#if (!wrongPadding) { +# padtoeven evenpadding_sec1(offsetSection1,section1Length); +#} + + +concept shortNameECMF (defaultShortName,"shortName.def",conceptsMasterDir,conceptsLocalDirECMF) : no_copy; +concept ls.shortName (shortNameECMF,"shortName.def",conceptsMasterDir,conceptsLocalDirAll) : no_copy,dump; +meta ifsParam ifs_param(paramId,type); + +alias parameter.paramId=paramId; +alias parameter.shortName=shortName; +alias parameter.units=units; +alias parameter.name=name; + +alias parameter=paramId; +alias short_name=shortName; + +alias time.stepRange=stepRange; +alias time.stepUnits=stepUnits; +alias time.dataDate=dataDate; +alias time.dataTime=dataTime; +alias time.startStep=startStep; +alias time.endStep=endStep; +alias time.stepType=stepType; + +meta md5Section1 md5(offsetSection1,section1Length); diff --git a/definitions/grib1/section.2.def b/definitions/grib1/section.2.def new file mode 100644 index 000000000..3344f46ba --- /dev/null +++ b/definitions/grib1/section.2.def @@ -0,0 +1,105 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# label Grib_section_2; +# START grib1::section +# SECTION 2, Grid description section +# Length of section +# (octets) + +position offsetSection2; +length[3] section2Length ; +meta section2Pointer section_pointer(offsetSection2,section2Length,2); +transient radius=6367470; +alias radiusOfTheEarth=radius; +alias radiusInMetres=radius; +transient shapeOfTheEarth=6 : hidden; + +# NV -- number of vertical coordinate parameters + +unsigned[1] numberOfVerticalCoordinateValues : dump ; + +constant neitherPresent = 255; + +alias NV = numberOfVerticalCoordinateValues; +alias numberOfCoordinatesValues= numberOfVerticalCoordinateValues; + +# PV -- location +# (octet number) + +unsigned[1] pvlLocation = 255; + +# Data representation type +codetable[1] dataRepresentationType 'grib1/6.table' = 0; + +# Grid definition +# (according to data representation type - octet 6 above) + +if (dataRepresentationType < 192) +{ + template dataRepresentation "grib1/grid_definition_[dataRepresentationType:l].def"; +} +else +{ + template dataRepresentation "grib1/grid_definition_[dataRepresentationType:l].[centre:l].def"; +} +position endGridDefinition; + +position offsetBeforePV; +transient PVPresent = ( NV > 0); + +if (pvlLocation != neitherPresent) +{ + padto padding_sec2_2(offsetSection2 + pvlLocation - 1); +} else { + padto padding_sec2_2(offsetSection2 + 32 ); +} + +if(PVPresent ) +{ + ibmfloat pv[NV] : dump; + alias vertical.pv=pv; +} + +position offsetBeforePL; + +transient PLPresent = (section2Length > (offsetBeforePL - offsetSection2)) + && (section2Length >= (Nj * 2 + offsetBeforePL - offsetSection2)) ; + +if(PLPresent) +{ + # For grib 1 -> 2 + constant numberOfOctectsForNumberOfPoints = 2; + constant interpretationOfNumberOfPoints = 1; + + unsigned[2] pl[Nj] : dump; + alias geography.pl=pl; +} + +if(PVPresent == 0 && PLPresent == 0) +{ + # pad to the end of the grid definiton as in documentation + # ( gribex compatibility ) + padto padding_sec2_1(offsetSection2 + 32); +} + +#when (PVPresent == 0) { set NV = 0;} +when ((PVPresent == 1) or (PLPresent==1)) { + set pvlLocation = offsetBeforePV - offsetSection2 + 1; +} +when ((PVPresent == 0) and (PLPresent==0)) { set pvlLocation = 255; } + +alias reducedGrid = PLPresent; + +padtoeven padding_sec2_3(offsetSection2,section2Length); + +meta md5Section2 md5(offsetSection2,section2Length); +alias md5GridSection = md5Section2; + + diff --git a/definitions/grib1/section.3.def b/definitions/grib1/section.3.def new file mode 100644 index 000000000..db79e75d0 --- /dev/null +++ b/definitions/grib1/section.3.def @@ -0,0 +1,39 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START grib1::section +# SECTION 3, Bit-map section +# Length of section +# (octets) +position offsetSection3; +length[3] section3Length ; +meta section3Pointer section_pointer(offsetSection3,section3Length,3); + +# Number of unused bits at end of Section 3 +unsigned[1] numberOfUnusedBitsAtEndOfSection3 = 0: read_only; +alias unusedBitsInBitmap=numberOfUnusedBitsAtEndOfSection3; + +# Table reference: +unsigned[2] tableReference = 0 : dump; + +position offsetBeforeBitmap; +meta geography.bitmap g1bitmap( tableReference, + missingValue, + offsetSection3, + section3Length, + numberOfUnusedBitsAtEndOfSection3) : read_only,dump; + +position offsetAfterBitmap; + +# END grib1::section + +padtoeven padding_sec3_1(offsetSection3,section3Length); +section_padding section3Padding; + +meta md5Section3 md5(offsetSection3,section3Length); diff --git a/definitions/grib1/section.4.def b/definitions/grib1/section.4.def new file mode 100644 index 000000000..4bed079fc --- /dev/null +++ b/definitions/grib1/section.4.def @@ -0,0 +1,237 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START grib1::section +# SECTION 4, Binary data section +# Length of section +# (octets) +position offsetSection4; + +# Due to a trick done by GRIBEX to support large GRIBs, we need a special treatment +# of the message length and of the section4 lenth, so instead of +# length[3] section4Length ; +# we get: +g1_section4_length[3] section4Length(totalLength); + +meta section4Pointer section_pointer(offsetSection4,section4Length,4); + +g1_half_byte_codeflag halfByte; +flags[1] dataFlag "grib1/11.table" = 0 : read_only; +signed[2] binaryScaleFactor = 0 : read_only,dump; +ibmfloat referenceValue : read_only,dump; + +meta referenceValueError reference_value_error(referenceValue,ibm); + +flagbit sphericalHarmonics(dataFlag,7) : dump; +flagbit complexPacking(dataFlag,6) : dump; +flagbit integerPointValues(dataFlag,5) : dump; +flagbit additionalFlagPresent(dataFlag,4) : edition_specific,dump; + +# second order packing +if (complexPacking && sphericalHarmonics==0) { + unsigned[1] widthOfFirstOrderValues : dump ; + unsigned [2] N1; + flags[1] extendedFlag "grib1/11-2.table"; + + # Undocumented use of octet 14 extededFlags + # Taken from d2ordr.F + # R------- only bit 1 is reserved. + # -0------ single datum at each grid point. + # -1------ matrix of values at each grid point. + # --0----- no secondary bit map. + # --1----- secondary bit map present. + # ---0---- second order values have constant width. + # ---1---- second order values have different widths. + # ----0--- no general extended second order packing. + # ----1--- general extended second order packing used. + # -----0-- standard field ordering in section 4. + # -----1-- boustrophedonic ordering in section 4. + # ------00 no spatial differencing used. + # ------01 1st-order spatial differencing used. + # ------10 2nd-order " " " . + # ------11 3rd-order " " " . + + #ksec4(8) + flagbit matrixOfValues (extendedFlag,6) = 0 : dump; + #ksec4(9) + flagbit secondaryBitmapPresent (extendedFlag,5) = 0 : dump; + #ksec4(10) + flagbit secondOrderOfDifferentWidth (extendedFlag,4) = 0 : dump; + #ksec4(12) + flagbit generalExtended2ordr (extendedFlag,3) = 0 : dump; + #ksec4(13) + flagbit boustrophedonicOrdering (extendedFlag,2) = 0 : dump; + #ksec4(14) + flagbit twoOrdersOfSPD (extendedFlag,1) = 0 : dump; + #ksec4(15) + flagbit plusOneinOrdersOfSPD (extendedFlag,0) = 0 : dump; + meta orderOfSPD evaluate(plusOneinOrdersOfSPD + 2 * twoOrdersOfSPD); + alias secondaryBitmap = secondaryBitmapPresent; + alias boustrophedonic=boustrophedonicOrdering; +} else { + transient orderOfSPD=2; + transient boustrophedonic=0; +} +transient hideThis=0; + +concept packingType { +#set uses the last one +#get returns the first match + "grid_simple" = { sphericalHarmonics = 0; complexPacking = 0; additionalFlagPresent = 0;} + "grid_ieee" = { sphericalHarmonics = 0; complexPacking = 0; + integerPointValues=1; additionalFlagPresent=1;} + "spectral_complex" = { sphericalHarmonics = 1; complexPacking = 1; + additionalFlagPresent = 0; } + "spectral_simple" = { sphericalHarmonics = 1; complexPacking = 0; additionalFlagPresent = 0; + representationMode=1;} + "spectral_ieee" = { sphericalHarmonics = 1; complexPacking = 1; + additionalFlagPresent = 0;hideThis=1; } + "grid_simple_matrix" = { sphericalHarmonics = 0; complexPacking = 0; additionalFlagPresent = 1;} + + "grid_second_order_row_by_row" = { sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=1; + matrixOfValues=0; secondaryBitmapPresent=0; generalExtended2ordr=0; } + "grid_second_order_constant_width" = { sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=0; + matrixOfValues=0; secondaryBitmapPresent=1; generalExtended2ordr=0; } + "grid_second_order_general_grib1" = {sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=1; + matrixOfValues=0; secondaryBitmapPresent=1; generalExtended2ordr=0; } + "grid_second_order_no_SPD" = { sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=1; + matrixOfValues=0; secondaryBitmapPresent=0; generalExtended2ordr=1; + plusOneinOrdersOfSPD=0; twoOrdersOfSPD=0;} + "grid_second_order" = { sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=1; + matrixOfValues=0; secondaryBitmapPresent=0; generalExtended2ordr=1; + plusOneinOrdersOfSPD=0; twoOrdersOfSPD=1; boustrophedonic=1;} + "grid_second_order" = { sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=1; + matrixOfValues=0; secondaryBitmapPresent=0; generalExtended2ordr=1; + plusOneinOrdersOfSPD=0; twoOrdersOfSPD=1; boustrophedonic=0;} + "grid_second_order_no_boustrophedonic" = { sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=1; + matrixOfValues=0; secondaryBitmapPresent=0; generalExtended2ordr=1; + plusOneinOrdersOfSPD=0; twoOrdersOfSPD=1; boustrophedonic=0;} + "grid_second_order_boustrophedonic" = { sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=1; + matrixOfValues=0; secondaryBitmapPresent=0; generalExtended2ordr=1; + plusOneinOrdersOfSPD=0; twoOrdersOfSPD=1; boustrophedonic=1;} + "grid_second_order_SPD1" = { sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=1; + matrixOfValues=0; secondaryBitmapPresent=0; generalExtended2ordr=1; + plusOneinOrdersOfSPD=1; twoOrdersOfSPD=0; } + "grid_second_order_SPD2" = { sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=1; + matrixOfValues=0; secondaryBitmapPresent=0; generalExtended2ordr=1; + plusOneinOrdersOfSPD=0; twoOrdersOfSPD=1; } + "grid_second_order_SPD3" = { sphericalHarmonics = 0; complexPacking = 1; secondOrderOfDifferentWidth=1; + matrixOfValues=0; secondaryBitmapPresent=0; generalExtended2ordr=1; + plusOneinOrdersOfSPD=1; twoOrdersOfSPD=1; } + "grid_jpeg" = { sphericalHarmonics = 0; complexPacking = 0; additionalFlagPresent = 0;} + "grid_png" = { sphericalHarmonics = 0; complexPacking = 0; additionalFlagPresent = 0;} + "grid_szip" = { sphericalHarmonics = 0; complexPacking = 0; additionalFlagPresent = 0;} + "grid_simple_log_preprocessing"= { sphericalHarmonics = 0; complexPacking = 0; additionalFlagPresent = 0;} +} : dump; + + +alias ls.packingType=packingType; +alias typeOfPacking=packingType; + +if( binaryScaleFactor == -32767) { + +unsigned[1] bitsPerValue : dump ; +alias numberOfBitsContainingEachPackedValue = bitsPerValue; + + constant dataRepresentationTemplateNumber = 0; + constant bitMapIndicator = 0; + # For grib 1 -> 2 + position offsetBeforeData; + transient numberOfCodedValues=numberOfPoints; + meta values data_dummy_field( + section4Length, + offsetBeforeData, + offsetSection4, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + halfByte, + packingType, + grid_ieee,precision, + missingValue, + numberOfPoints, + bitmap + ) : dump; +} else { + template dataValues "grib1/data.[packingType:s].def"; +} + +position offsetAfterData; + +transient dataLength=(offsetAfterData-offsetBeforeData)/8; + +if (bitmapPresent==1) { + alias numberOfEffectiveValues=numberOfDataPoints; +} else { + alias numberOfEffectiveValues=numberOfCodedValues; +} + +_if (sphericalHarmonics) { + alias numberOfEffectiveValues=numberOfValues; +} + +meta changeDecimalPrecision decimal_precision(bitsPerValue,decimalScaleFactor,changingPrecision,values) : edition_specific; +meta decimalPrecision decimal_precision(bitsPerValue,decimalScaleFactor,changingPrecision) : edition_specific; +alias setDecimalPrecision=changeDecimalPrecision; + +meta bitsPerValueAndRepack bits_per_value(values,bitsPerValue) : edition_specific; +alias setBitsPerValue=bitsPerValueAndRepack; + +meta scaleValuesBy scale_values(values,missingValue) : edition_specific; +meta offsetValuesBy offset_values(values,missingValue) : edition_specific; + +concept gridType { +#set uses the last one +#get returns the first match + "regular_ll" = {dataRepresentationType = 0; sphericalHarmonics = 0; PLPresent=0;} + "reduced_ll" = {dataRepresentationType = 0; sphericalHarmonics = 0; PLPresent=1; Ni=missing(); } + "mercator" = {dataRepresentationType = 1; sphericalHarmonics = 0; PLPresent=0; } + "lambert" = {dataRepresentationType = 3; sphericalHarmonics = 0; PLPresent=0; } + "polar_stereographic" = {dataRepresentationType = 5; sphericalHarmonics = 0; PLPresent=0; } + "UTM" = {dataRepresentationType = 6; sphericalHarmonics = 0; PLPresent=0; } + "simple_polyconic" = {dataRepresentationType = 7; sphericalHarmonics = 0; PLPresent=0; } + "albers" = {dataRepresentationType = 8; sphericalHarmonics = 0; PLPresent=0; } + "miller" = {dataRepresentationType = 8; sphericalHarmonics = 0; PLPresent=0; } + "rotated_ll" = {dataRepresentationType = 10; sphericalHarmonics = 0; PLPresent=0; } + "stretched_ll" = {dataRepresentationType = 20; sphericalHarmonics = 0; PLPresent=0; } + "stretched_rotated_ll" = {dataRepresentationType = 30; sphericalHarmonics = 0; PLPresent=0; } + "regular_gg" = {dataRepresentationType = 4; sphericalHarmonics = 0; PLPresent=0; } + "rotated_gg" = {dataRepresentationType = 14; sphericalHarmonics = 0; PLPresent=0; } + "stretched_gg" = {dataRepresentationType = 24; sphericalHarmonics = 0; PLPresent=0; } + "stretched_rotated_gg" = {dataRepresentationType = 34; sphericalHarmonics = 0; PLPresent=0; } + "reduced_gg" = {dataRepresentationType = 4; sphericalHarmonics = 0; + PLPresent=1; numberOfPointsAlongAParallel = missing(); + iDirectionIncrement = missing(); ijDirectionIncrementGiven=0;} + "sh" = {dataRepresentationType = 50; sphericalHarmonics = 1; PLPresent=0; } + "rotated_sh" = {dataRepresentationType = 60; sphericalHarmonics = 1; PLPresent=0; } + "stretched_sh" = {dataRepresentationType = 70; sphericalHarmonics = 1; PLPresent=0; } + "stretched_rotated_sh" = {dataRepresentationType = 80; sphericalHarmonics = 1; PLPresent=0; } + "space_view" = {dataRepresentationType = 90; sphericalHarmonics = 0; PLPresent=0; } + "unknown" = {PLPresent=0;} + "unknown_PLPresent" = {PLPresent=1;} +} : dump; + +alias ls.gridType=gridType; +alias geography.gridType=gridType; +alias typeOfGrid=gridType; + +meta getNumberOfValues size(values) : edition_specific,dump ; + +if (complexPacking==0 || sphericalHarmonics==1) { + padtoeven padding_sec4_1(offsetSection4,section4Length) ; +} + +meta md5Section4 md5(offsetSection4,section4Length); +alias md5DataSection = md5Section4; + diff --git a/definitions/grib1/section.5.def b/definitions/grib1/section.5.def new file mode 100644 index 000000000..6cbaf9f45 --- /dev/null +++ b/definitions/grib1/section.5.def @@ -0,0 +1,21 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +position offsetSection5; +constant section5Length=4; + +meta section5Pointer section_pointer(offsetSection5,section5Length,5); + +# START grib1::section +# SECTION 5, End section +# 7777 + +ascii[4] '7777' = "7777" : read_only; + +# END grib1::section diff --git a/definitions/grib1/sensitive_area_domain.def b/definitions/grib1/sensitive_area_domain.def new file mode 100644 index 000000000..ef1aa0b72 --- /dev/null +++ b/definitions/grib1/sensitive_area_domain.def @@ -0,0 +1,27 @@ +'h' = {northWestLatitudeOfVerficationArea=4630;northWestLongitudeOfVerficationArea=719;southEastLatitudeOfVerficationArea=2689;southEastLongitudeOfVerficationArea=3140;} +'h' = {northWestLatitudeOfVerficationArea=4760;northWestLongitudeOfVerficationArea=-2180;southEastLatitudeOfVerficationArea=2809;southEastLongitudeOfVerficationArea=250;} +'h' = {northWestLatitudeOfVerficationArea=4800;northWestLongitudeOfVerficationArea=-300;southEastLatitudeOfVerficationArea=2900;southEastLongitudeOfVerficationArea=2100;} +'h' = {northWestLatitudeOfVerficationArea=4940;northWestLongitudeOfVerficationArea=0;southEastLatitudeOfVerficationArea=2990;southEastLongitudeOfVerficationArea=2430;} +'h' = {northWestLatitudeOfVerficationArea=5020;northWestLongitudeOfVerficationArea=-720;southEastLatitudeOfVerficationArea=3070;southEastLongitudeOfVerficationArea=1700;} +'h' = {northWestLatitudeOfVerficationArea=5130;northWestLongitudeOfVerficationArea=-739;southEastLatitudeOfVerficationArea=3189;southEastLongitudeOfVerficationArea=1690;} +'h' = {northWestLatitudeOfVerficationArea=5130;northWestLongitudeOfVerficationArea=-739;southEastLatitudeOfVerficationArea=3189;southEastLongitudeOfVerficationArea=169;} +'h' = {northWestLatitudeOfVerficationArea=6200;northWestLongitudeOfVerficationArea=-2160;southEastLatitudeOfVerficationArea=4260;southEastLongitudeOfVerficationArea=260;} +'h' = {northWestLatitudeOfVerficationArea=6640;northWestLongitudeOfVerficationArea=-2340;southEastLatitudeOfVerficationArea=4690;southEastLongitudeOfVerficationArea=90;} +'i' = {northWestLatitudeOfVerficationArea=0;northWestLongitudeOfVerficationArea=0;southEastLatitudeOfVerficationArea=0;southEastLongitudeOfVerficationArea=0;} +'i' = {northWestLatitudeOfVerficationArea=4890;northWestLongitudeOfVerficationArea=730;southEastLatitudeOfVerficationArea=2940;southEastLongitudeOfVerficationArea=3160;} +'i' = {northWestLatitudeOfVerficationArea=4900;northWestLongitudeOfVerficationArea=-800;southEastLatitudeOfVerficationArea=2900;southEastLongitudeOfVerficationArea=1500;} +'i' = {northWestLatitudeOfVerficationArea=5020;northWestLongitudeOfVerficationArea=-2290;southEastLatitudeOfVerficationArea=3070;southEastLongitudeOfVerficationArea=130;} +'i' = {northWestLatitudeOfVerficationArea=5100;northWestLongitudeOfVerficationArea=-300;southEastLatitudeOfVerficationArea=3200;southEastLongitudeOfVerficationArea=2000;} +'i' = {northWestLatitudeOfVerficationArea=6140;northWestLongitudeOfVerficationArea=-950;southEastLatitudeOfVerficationArea=4190;southEastLongitudeOfVerficationArea=1479;} +'j' = {northWestLatitudeOfVerficationArea=4700;northWestLongitudeOfVerficationArea=-900;southEastLatitudeOfVerficationArea=2700;southEastLongitudeOfVerficationArea=1400;} +'j' = {northWestLatitudeOfVerficationArea=6660;northWestLongitudeOfVerficationArea=-1870;southEastLatitudeOfVerficationArea=4710;southEastLongitudeOfVerficationArea=550;} +'j' = {northWestLatitudeOfVerficationArea=6660;northWestLongitudeOfVerficationArea=-920;southEastLatitudeOfVerficationArea=4710;southEastLongitudeOfVerficationArea=1510;} +'k' = {northWestLatitudeOfVerficationArea=4910;northWestLongitudeOfVerficationArea=-1000;southEastLatitudeOfVerficationArea=2959;southEastLongitudeOfVerficationArea=1429;} +'k' = {northWestLatitudeOfVerficationArea=5030;northWestLongitudeOfVerficationArea=-59;southEastLatitudeOfVerficationArea=3089;southEastLongitudeOfVerficationArea=2370;} +'k' = {northWestLatitudeOfVerficationArea=5080;northWestLongitudeOfVerficationArea=-1050;southEastLatitudeOfVerficationArea=3139;southEastLongitudeOfVerficationArea=1379;} +'l' = {northWestLatitudeOfVerficationArea=4950;northWestLongitudeOfVerficationArea=0;southEastLatitudeOfVerficationArea=3009;southEastLongitudeOfVerficationArea=2430;} +'l' = {northWestLatitudeOfVerficationArea=5150;northWestLongitudeOfVerficationArea=-90;southEastLatitudeOfVerficationArea=3200;southEastLongitudeOfVerficationArea=2330;} +'l' = {northWestLatitudeOfVerficationArea=6300;northWestLongitudeOfVerficationArea=-1600;southEastLatitudeOfVerficationArea=4300;southEastLongitudeOfVerficationArea=800;} +'p' = {northWestLatitudeOfVerficationArea=6300;northWestLongitudeOfVerficationArea=-1900;southEastLatitudeOfVerficationArea=4400;southEastLongitudeOfVerficationArea=400;} +'i' = {northWestLatitudeOfVerficationArea=7100;northWestLongitudeOfVerficationArea=500;southEastLatitudeOfVerficationArea=5200;southEastLongitudeOfVerficationArea=2900;} + diff --git a/definitions/grib1/shortName.def b/definitions/grib1/shortName.def new file mode 100644 index 000000000..457028548 --- /dev/null +++ b/definitions/grib1/shortName.def @@ -0,0 +1,2109 @@ +# Automatically generated by create_def.pl from database param@wrep-db-misc-prod, do not edit +#Stream function +'strf' = { + table2Version = 3 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'vp' = { + table2Version = 3 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'pt' = { + table2Version = 3 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'ws' = { + table2Version = 3 ; + indicatorOfParameter = 32 ; + } +#Pressure +'pres' = { + table2Version = 3 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'pv' = { + table2Version = 3 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'mx2t6' = { + table2Version = 3 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'mn2t6' = { + table2Version = 3 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'z' = { + table2Version = 3 ; + indicatorOfParameter = 6 ; + } +#Temperature +'t' = { + table2Version = 3 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'u' = { + table2Version = 3 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'v' = { + table2Version = 3 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'q' = { + table2Version = 3 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'sp' = { + table2Version = 3 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'w' = { + table2Version = 3 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'vo' = { + table2Version = 3 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'bld' = { + table2Version = 3 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'sshf' = { + table2Version = 3 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'slhf' = { + table2Version = 3 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'msl' = { + table2Version = 3 ; + indicatorOfParameter = 2 ; + } +#Divergence +'d' = { + table2Version = 3 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'gh' = { + table2Version = 3 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'r' = { + table2Version = 3 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'10u' = { + table2Version = 3 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'10v' = { + table2Version = 3 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'2t' = { + table2Version = 3 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'2d' = { + table2Version = 3 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'lsm' = { + table2Version = 3 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'sr' = { + table2Version = 3 ; + indicatorOfParameter = 83 ; + } +#Albedo +'al' = { + table2Version = 3 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'e' = { + table2Version = 3 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'ccc' = { + table2Version = 3 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'lcc' = { + table2Version = 3 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'mcc' = { + table2Version = 3 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'hcc' = { + table2Version = 3 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'btmp' = { + table2Version = 3 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'veg' = { + table2Version = 3 ; + indicatorOfParameter = 87 ; + } +#Runoff +'ro' = { + table2Version = 3 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'tco3' = { + table2Version = 3 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'csf' = { + table2Version = 3 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'lsf' = { + table2Version = 3 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'lsp' = { + table2Version = 3 ; + indicatorOfParameter = 62 ; + } +#Cloud water +'cwat' = { + table2Version = 3 ; + indicatorOfParameter = 76 ; + } +#Virtual temperature +'vtmp' = { + table2Version = 1 ; + indicatorOfParameter = 12 ; + } +#Virtual temperature +'vtmp' = { + table2Version = 2 ; + indicatorOfParameter = 12 ; + } +#Virtual temperature +'vtmp' = { + table2Version = 3 ; + indicatorOfParameter = 12 ; + } +#Pressure tendency +'ptend' = { + table2Version = 3 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'icaht' = { + table2Version = 3 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'h' = { + table2Version = 3 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'hstdv' = { + table2Version = 3 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'papt' = { + table2Version = 3 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'tmax' = { + table2Version = 3 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'tmin' = { + table2Version = 3 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'dpt' = { + table2Version = 3 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'depr' = { + table2Version = 3 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'lapr' = { + table2Version = 3 ; + indicatorOfParameter = 19 ; + } +#Visibility +'vis' = { + table2Version = 3 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'rdsp1' = { + table2Version = 3 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'rdsp2' = { + table2Version = 3 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'rdsp3' = { + table2Version = 3 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'pli' = { + table2Version = 3 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'ta' = { + table2Version = 3 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'presa' = { + table2Version = 3 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'gpa' = { + table2Version = 3 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'wvsp1' = { + table2Version = 3 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'wvsp2' = { + table2Version = 3 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'wvsp3' = { + table2Version = 3 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'wdir' = { + table2Version = 3 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'mntsf' = { + table2Version = 3 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'sgcvv' = { + table2Version = 3 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'absv' = { + table2Version = 3 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'absd' = { + table2Version = 3 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'vucsh' = { + table2Version = 3 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'vvcsh' = { + table2Version = 3 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'dirc' = { + table2Version = 3 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'spc' = { + table2Version = 3 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'ucurr' = { + table2Version = 3 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'vcurr' = { + table2Version = 3 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'mixr' = { + table2Version = 3 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'pwat' = { + table2Version = 3 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'vp' = { + table2Version = 3 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'satd' = { + table2Version = 3 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'prate' = { + table2Version = 3 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'tstm' = { + table2Version = 3 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'acpcp' = { + table2Version = 3 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'srweq' = { + table2Version = 3 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'mld' = { + table2Version = 3 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'tthdp' = { + table2Version = 3 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'mthd' = { + table2Version = 3 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'mtha' = { + table2Version = 3 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'bli' = { + table2Version = 3 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'wtmp' = { + table2Version = 3 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'dslm' = { + table2Version = 3 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'ssw' = { + table2Version = 3 ; + indicatorOfParameter = 86 ; + } +#Salinity +'s' = { + table2Version = 3 ; + indicatorOfParameter = 88 ; + } +#Density +'den' = { + table2Version = 3 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'icec' = { + table2Version = 3 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'icetk' = { + table2Version = 3 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'diced' = { + table2Version = 3 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'siced' = { + table2Version = 3 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'uice' = { + table2Version = 3 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'vice' = { + table2Version = 3 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'iceg' = { + table2Version = 3 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'iced' = { + table2Version = 3 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'snom' = { + table2Version = 3 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'swh' = { + table2Version = 3 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'mdww' = { + table2Version = 3 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'shww' = { + table2Version = 3 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'mpww' = { + table2Version = 3 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'swdir' = { + table2Version = 3 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'swell' = { + table2Version = 3 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'swper' = { + table2Version = 3 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'mdps' = { + table2Version = 3 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'mpps' = { + table2Version = 3 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'dirsw' = { + table2Version = 3 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'swp' = { + table2Version = 3 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'nswrs' = { + table2Version = 3 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'nlwrs' = { + table2Version = 3 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'nlwrt' = { + table2Version = 3 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'nlwrt' = { + table2Version = 3 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'lwavr' = { + table2Version = 3 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'swavr' = { + table2Version = 3 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'grad' = { + table2Version = 3 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'lwrad' = { + table2Version = 3 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'swrad' = { + table2Version = 3 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'uflx' = { + table2Version = 3 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'vflx' = { + table2Version = 3 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'wmixe' = { + table2Version = 3 ; + indicatorOfParameter = 126 ; + } +#Image data +'imgd' = { + table2Version = 3 ; + indicatorOfParameter = 127 ; + } +#Orography +'orog' = { + table2Version = 3 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'sm' = { + table2Version = 3 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'st' = { + table2Version = 3 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'sd' = { + table2Version = 3 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'sf' = { + table2Version = 3 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'tcc' = { + table2Version = 3 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'tp' = { + table2Version = 3 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Stream function +'strf' = { + table2Version = 2 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'vp' = { + table2Version = 2 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'pt' = { + table2Version = 2 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'ws' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + } +#Pressure +'pres' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'pv' = { + table2Version = 2 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'mx2t6' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'mn2t6' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'z' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Temperature +'t' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'u' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'v' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'q' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'sp' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'w' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'vo' = { + table2Version = 2 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'bld' = { + table2Version = 2 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'sshf' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'slhf' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'msl' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + } +#Divergence +'d' = { + table2Version = 2 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'gh' = { + table2Version = 2 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'r' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'10u' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'10v' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'2t' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'2d' = { + table2Version = 2 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'lsm' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'sr' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + } +#Albedo +'al' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'e' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'ccc' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'lcc' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'mcc' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'hcc' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'btmp' = { + table2Version = 2 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'veg' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + } +#Runoff +'ro' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'tco3' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'csf' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'lsf' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'lsp' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + } +#Cloud water +'cwat' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + } +#Pressure tendency +'ptend' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'icaht' = { + table2Version = 2 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'h' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'hstdv' = { + table2Version = 2 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'papt' = { + table2Version = 2 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'tmax' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'tmin' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'dpt' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'depr' = { + table2Version = 2 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'lapr' = { + table2Version = 2 ; + indicatorOfParameter = 19 ; + } +#Visibility +'vis' = { + table2Version = 2 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'rdsp1' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'rdsp2' = { + table2Version = 2 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'rdsp3' = { + table2Version = 2 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'pli' = { + table2Version = 2 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'ta' = { + table2Version = 2 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'presa' = { + table2Version = 2 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'gpa' = { + table2Version = 2 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'wvsp1' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'wvsp2' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'wvsp3' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'wdir' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'mntsf' = { + table2Version = 2 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'sgcvv' = { + table2Version = 2 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'absv' = { + table2Version = 2 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'absd' = { + table2Version = 2 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'vucsh' = { + table2Version = 2 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'vvcsh' = { + table2Version = 2 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'dirc' = { + table2Version = 2 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'spc' = { + table2Version = 2 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'ucurr' = { + table2Version = 2 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'vcurr' = { + table2Version = 2 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'mixr' = { + table2Version = 2 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'pwat' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'vp' = { + table2Version = 2 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'satd' = { + table2Version = 2 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'prate' = { + table2Version = 2 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'tstm' = { + table2Version = 2 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'acpcp' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'srweq' = { + table2Version = 2 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'mld' = { + table2Version = 2 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'tthdp' = { + table2Version = 2 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'mthd' = { + table2Version = 2 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'mtha' = { + table2Version = 2 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'bli' = { + table2Version = 2 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'wtmp' = { + table2Version = 2 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'dslm' = { + table2Version = 2 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'ssw' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + } +#Salinity +'s' = { + table2Version = 2 ; + indicatorOfParameter = 88 ; + } +#Density +'den' = { + table2Version = 2 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'icec' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'icetk' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'diced' = { + table2Version = 2 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'siced' = { + table2Version = 2 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'uice' = { + table2Version = 2 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'vice' = { + table2Version = 2 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'iceg' = { + table2Version = 2 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'iced' = { + table2Version = 2 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'snom' = { + table2Version = 2 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'swh' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'mdww' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'shww' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'mpww' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'swdir' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'swell' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'swper' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'mdps' = { + table2Version = 2 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'mpps' = { + table2Version = 2 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'dirsw' = { + table2Version = 2 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'swp' = { + table2Version = 2 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'nswrs' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'nlwrs' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'nlwrt' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'nlwrt' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'lwavr' = { + table2Version = 2 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'swavr' = { + table2Version = 2 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'grad' = { + table2Version = 2 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'lwrad' = { + table2Version = 2 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'swrad' = { + table2Version = 2 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'uflx' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'vflx' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'wmixe' = { + table2Version = 2 ; + indicatorOfParameter = 126 ; + } +#Image data +'imgd' = { + table2Version = 2 ; + indicatorOfParameter = 127 ; + } +#Orography +'orog' = { + table2Version = 2 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'sm' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'st' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'sd' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'sf' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'tcc' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'tp' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Stream function +'strf' = { + table2Version = 1 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'vp' = { + table2Version = 1 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'pt' = { + table2Version = 1 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'ws' = { + table2Version = 1 ; + indicatorOfParameter = 32 ; + } +#Pressure +'pres' = { + table2Version = 1 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'pv' = { + table2Version = 1 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'mx2t6' = { + table2Version = 1 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'mn2t6' = { + table2Version = 1 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'z' = { + table2Version = 1 ; + indicatorOfParameter = 6 ; + } +#Temperature +'t' = { + table2Version = 1 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'u' = { + table2Version = 1 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'v' = { + table2Version = 1 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'q' = { + table2Version = 1 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'sp' = { + table2Version = 1 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'w' = { + table2Version = 1 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'vo' = { + table2Version = 1 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'bld' = { + table2Version = 1 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'sshf' = { + table2Version = 1 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'slhf' = { + table2Version = 1 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'msl' = { + table2Version = 1 ; + indicatorOfParameter = 2 ; + } +#Divergence +'d' = { + table2Version = 1 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'gh' = { + table2Version = 1 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'r' = { + table2Version = 1 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'10u' = { + table2Version = 1 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'10v' = { + table2Version = 1 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'2t' = { + table2Version = 1 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'2d' = { + table2Version = 1 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'lsm' = { + table2Version = 1 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'sr' = { + table2Version = 1 ; + indicatorOfParameter = 83 ; + } +#Albedo +'al' = { + table2Version = 1 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'e' = { + table2Version = 1 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'ccc' = { + table2Version = 1 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'lcc' = { + table2Version = 1 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'mcc' = { + table2Version = 1 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'hcc' = { + table2Version = 1 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'btmp' = { + table2Version = 1 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'veg' = { + table2Version = 1 ; + indicatorOfParameter = 87 ; + } +#Runoff +'ro' = { + table2Version = 1 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'tco3' = { + table2Version = 1 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'csf' = { + table2Version = 1 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'lsf' = { + table2Version = 1 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'lsp' = { + table2Version = 1 ; + indicatorOfParameter = 62 ; + } +#Probability of a tropical storm +'pts' = { + table2Version = 131 ; + indicatorOfParameter = 89 ; + } +#Probability of a hurricane +'ph' = { + table2Version = 131 ; + indicatorOfParameter = 90 ; + } +#Probability of a tropical depression +'ptd' = { + table2Version = 131 ; + indicatorOfParameter = 91 ; + } +#Climatological probability of a tropical storm +'cpts' = { + table2Version = 131 ; + indicatorOfParameter = 92 ; + } +#Climatological probability of a hurricane +'cph' = { + table2Version = 131 ; + indicatorOfParameter = 93 ; + } +#Climatological probability of a tropical depression +'cptd' = { + table2Version = 131 ; + indicatorOfParameter = 94 ; + } +#Probability anomaly of a tropical storm +'pats' = { + table2Version = 131 ; + indicatorOfParameter = 95 ; + } +#Probability anomaly of a hurricane +'pah' = { + table2Version = 131 ; + indicatorOfParameter = 96 ; + } +#Probability anomaly of a tropical depression +'patd' = { + table2Version = 131 ; + indicatorOfParameter = 97 ; + } +#Aerosol type 15 mass mixing ratio +'aermr15diff' = { + table2Version = 211 ; + indicatorOfParameter = 15 ; + } +#Cloud water +'cwat' = { + table2Version = 1 ; + indicatorOfParameter = 76 ; + } +#Pressure tendency +'ptend' = { + table2Version = 1 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'icaht' = { + table2Version = 1 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'h' = { + table2Version = 1 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'hstdv' = { + table2Version = 1 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'papt' = { + table2Version = 1 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'tmax' = { + table2Version = 1 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'tmin' = { + table2Version = 1 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'dpt' = { + table2Version = 1 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'depr' = { + table2Version = 1 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'lapr' = { + table2Version = 1 ; + indicatorOfParameter = 19 ; + } +#Visibility +'vis' = { + table2Version = 1 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'rdsp1' = { + table2Version = 1 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'rdsp2' = { + table2Version = 1 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'rdsp3' = { + table2Version = 1 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'pli' = { + table2Version = 1 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'ta' = { + table2Version = 1 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'presa' = { + table2Version = 1 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'gpa' = { + table2Version = 1 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'wvsp1' = { + table2Version = 1 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'wvsp2' = { + table2Version = 1 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'wvsp3' = { + table2Version = 1 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'wdir' = { + table2Version = 1 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'mntsf' = { + table2Version = 1 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'sgcvv' = { + table2Version = 1 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'absv' = { + table2Version = 1 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'absd' = { + table2Version = 1 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'vucsh' = { + table2Version = 1 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'vvcsh' = { + table2Version = 1 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'dirc' = { + table2Version = 1 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'spc' = { + table2Version = 1 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'ucurr' = { + table2Version = 1 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'vcurr' = { + table2Version = 1 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'mixr' = { + table2Version = 1 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'pwat' = { + table2Version = 1 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'vp' = { + table2Version = 1 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'satd' = { + table2Version = 1 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'prate' = { + table2Version = 1 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'tstm' = { + table2Version = 1 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'acpcp' = { + table2Version = 1 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'srweq' = { + table2Version = 1 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'mld' = { + table2Version = 1 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'tthdp' = { + table2Version = 1 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'mthd' = { + table2Version = 1 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'mtha' = { + table2Version = 1 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'bli' = { + table2Version = 1 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'wtmp' = { + table2Version = 1 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'dslm' = { + table2Version = 1 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'ssw' = { + table2Version = 1 ; + indicatorOfParameter = 86 ; + } +#Salinity +'s' = { + table2Version = 1 ; + indicatorOfParameter = 88 ; + } +#Density +'den' = { + table2Version = 1 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'icec' = { + table2Version = 1 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'icetk' = { + table2Version = 1 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'diced' = { + table2Version = 1 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'siced' = { + table2Version = 1 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'uice' = { + table2Version = 1 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'vice' = { + table2Version = 1 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'iceg' = { + table2Version = 1 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'iced' = { + table2Version = 1 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'snom' = { + table2Version = 1 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'swh' = { + table2Version = 1 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'mdww' = { + table2Version = 1 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'shww' = { + table2Version = 1 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'mpww' = { + table2Version = 1 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'swdir' = { + table2Version = 1 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'swell' = { + table2Version = 1 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'swper' = { + table2Version = 1 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'mdps' = { + table2Version = 1 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'mpps' = { + table2Version = 1 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'dirsw' = { + table2Version = 1 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'swp' = { + table2Version = 1 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'nswrs' = { + table2Version = 1 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'nlwrs' = { + table2Version = 1 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'nlwrt' = { + table2Version = 1 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'nlwrt' = { + table2Version = 1 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'lwavr' = { + table2Version = 1 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'swavr' = { + table2Version = 1 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'grad' = { + table2Version = 1 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'lwrad' = { + table2Version = 1 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'swrad' = { + table2Version = 1 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'uflx' = { + table2Version = 1 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'vflx' = { + table2Version = 1 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'wmixe' = { + table2Version = 1 ; + indicatorOfParameter = 126 ; + } +#Image data +'imgd' = { + table2Version = 1 ; + indicatorOfParameter = 127 ; + } +#Orography +'orog' = { + table2Version = 1 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'sm' = { + table2Version = 1 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'st' = { + table2Version = 1 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'sd' = { + table2Version = 1 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'sf' = { + table2Version = 1 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'tcc' = { + table2Version = 1 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'tp' = { + table2Version = 1 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; +} diff --git a/definitions/grib1/tube_domain.def b/definitions/grib1/tube_domain.def new file mode 100644 index 000000000..605a218b5 --- /dev/null +++ b/definitions/grib1/tube_domain.def @@ -0,0 +1,7 @@ +'a' = { northLatitudeOfDomainOfTubing=70000; westLongitudeOfDomainOfTubing=332500; southLatitudeOfDomainOfTubing=40000; eastLongitudeOfDomainOfTubing=10000; } +'b' = { northLatitudeOfDomainOfTubing=72500; westLongitudeOfDomainOfTubing=0; southLatitudeOfDomainOfTubing=50000; eastLongitudeOfDomainOfTubing=45000; } +'c' = { northLatitudeOfDomainOfTubing=57500; westLongitudeOfDomainOfTubing=345000; southLatitudeOfDomainOfTubing=32500; eastLongitudeOfDomainOfTubing=17500; } +'d' = { northLatitudeOfDomainOfTubing=57500; westLongitudeOfDomainOfTubing=2500; southLatitudeOfDomainOfTubing=32500; eastLongitudeOfDomainOfTubing=42500; } +'e' = { northLatitudeOfDomainOfTubing=75000; westLongitudeOfDomainOfTubing=340000; southLatitudeOfDomainOfTubing=30000; eastLongitudeOfDomainOfTubing=45000; } +'f' = { northLatitudeOfDomainOfTubing=60000; westLongitudeOfDomainOfTubing=310000; southLatitudeOfDomainOfTubing=40000; eastLongitudeOfDomainOfTubing=0; } + diff --git a/definitions/grib1/units.def b/definitions/grib1/units.def new file mode 100644 index 000000000..2d66d924d --- /dev/null +++ b/definitions/grib1/units.def @@ -0,0 +1,2109 @@ +# Automatically generated by create_def.pl from database param@wrep-db-misc-prod, do not edit +#Stream function +'m**2 s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'m**2 s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 32 ; + } +#Pressure +'Pa' = { + table2Version = 3 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'K m**2 kg**-1 s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'K' = { + table2Version = 3 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'K' = { + table2Version = 3 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'m**2 s**-2' = { + table2Version = 3 ; + indicatorOfParameter = 6 ; + } +#Temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'kg kg**-1' = { + table2Version = 3 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'Pa' = { + table2Version = 3 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'Pa s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'J m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'J m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'J m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'Pa' = { + table2Version = 3 ; + indicatorOfParameter = 2 ; + } +#Divergence +'s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'gpm' = { + table2Version = 3 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'%' = { + table2Version = 3 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'(0 - 1)' = { + table2Version = 3 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'m' = { + table2Version = 3 ; + indicatorOfParameter = 83 ; + } +#Albedo +'(0 - 1)' = { + table2Version = 3 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'m of water equivalent' = { + table2Version = 3 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'(0 - 1)' = { + table2Version = 3 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'(0 - 1)' = { + table2Version = 3 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'(0 - 1)' = { + table2Version = 3 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'(0 - 1)' = { + table2Version = 3 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'(0 - 1)' = { + table2Version = 3 ; + indicatorOfParameter = 87 ; + } +#Runoff +'m' = { + table2Version = 3 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'m of water equivalent' = { + table2Version = 3 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'m of water equivalent' = { + table2Version = 3 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 62 ; + } +#Cloud water +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 76 ; + } +#Virtual temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 12 ; + } +#Virtual temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 12 ; + } +#Virtual temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 12 ; + } +#Pressure tendency +'Pa s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'m' = { + table2Version = 3 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'m' = { + table2Version = 3 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'m' = { + table2Version = 3 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'K' = { + table2Version = 3 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'K s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 19 ; + } +#Visibility +'m' = { + table2Version = 3 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'~' = { + table2Version = 3 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'~' = { + table2Version = 3 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'~' = { + table2Version = 3 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'K' = { + table2Version = 3 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'K' = { + table2Version = 3 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'Pa' = { + table2Version = 3 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'gpm' = { + table2Version = 3 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'~' = { + table2Version = 3 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'~' = { + table2Version = 3 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'~' = { + table2Version = 3 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'Degree true' = { + table2Version = 3 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'m**2 s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'Degree true' = { + table2Version = 3 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'Pa' = { + table2Version = 3 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'Pa' = { + table2Version = 3 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'kg m**-2 s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'%' = { + table2Version = 3 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'kg m**-2 s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'m' = { + table2Version = 3 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'m' = { + table2Version = 3 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'m' = { + table2Version = 3 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'m' = { + table2Version = 3 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'K' = { + table2Version = 3 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'m' = { + table2Version = 3 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 86 ; + } +#Salinity +'kg kg**-1' = { + table2Version = 3 ; + indicatorOfParameter = 88 ; + } +#Density +'kg m**-3' = { + table2Version = 3 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'(0 - 1)' = { + table2Version = 3 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'m' = { + table2Version = 3 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'Degree true' = { + table2Version = 3 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'m s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'s**-1' = { + table2Version = 3 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'m' = { + table2Version = 3 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'Degree true' = { + table2Version = 3 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'m' = { + table2Version = 3 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'s' = { + table2Version = 3 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'Degree true' = { + table2Version = 3 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'m' = { + table2Version = 3 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'s' = { + table2Version = 3 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'Degree true' = { + table2Version = 3 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'s' = { + table2Version = 3 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'Degree true' = { + table2Version = 3 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'s' = { + table2Version = 3 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'J m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'J m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'J m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'J m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'J m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'J m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'J m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'W m**-1 sr**-1' = { + table2Version = 3 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'W m**-1 sr**-1' = { + table2Version = 3 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'N m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'N m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'J' = { + table2Version = 3 ; + indicatorOfParameter = 126 ; + } +#Image data +'~' = { + table2Version = 3 ; + indicatorOfParameter = 127 ; + } +#Orography +'m' = { + table2Version = 3 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'kg m**-3' = { + table2Version = 3 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'K' = { + table2Version = 3 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'%' = { + table2Version = 3 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'kg m**-2' = { + table2Version = 3 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Stream function +'m**2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'m**2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 32 ; + } +#Pressure +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'K m**2 kg**-1 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'K' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'K' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'m**2 s**-2' = { + table2Version = 2 ; + indicatorOfParameter = 6 ; + } +#Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'kg kg**-1' = { + table2Version = 2 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'Pa s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'J m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'J m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'J m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 2 ; + } +#Divergence +'s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'gpm' = { + table2Version = 2 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'%' = { + table2Version = 2 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'(0 - 1)' = { + table2Version = 2 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'m' = { + table2Version = 2 ; + indicatorOfParameter = 83 ; + } +#Albedo +'(0 - 1)' = { + table2Version = 2 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'m of water equivalent' = { + table2Version = 2 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'(0 - 1)' = { + table2Version = 2 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'(0 - 1)' = { + table2Version = 2 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'(0 - 1)' = { + table2Version = 2 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'(0 - 1)' = { + table2Version = 2 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'(0 - 1)' = { + table2Version = 2 ; + indicatorOfParameter = 87 ; + } +#Runoff +'m' = { + table2Version = 2 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'m of water equivalent' = { + table2Version = 2 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'m of water equivalent' = { + table2Version = 2 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 62 ; + } +#Cloud water +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 76 ; + } +#Pressure tendency +'Pa s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'m' = { + table2Version = 2 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'m' = { + table2Version = 2 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'m' = { + table2Version = 2 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'K s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 19 ; + } +#Visibility +'m' = { + table2Version = 2 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'K' = { + table2Version = 2 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'gpm' = { + table2Version = 2 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'~' = { + table2Version = 2 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'m**2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'Pa' = { + table2Version = 2 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'%' = { + table2Version = 2 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'kg m**-2 s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'m' = { + table2Version = 2 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'m' = { + table2Version = 2 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'m' = { + table2Version = 2 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'m' = { + table2Version = 2 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'K' = { + table2Version = 2 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'m' = { + table2Version = 2 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + } +#Salinity +'kg kg**-1' = { + table2Version = 2 ; + indicatorOfParameter = 88 ; + } +#Density +'kg m**-3' = { + table2Version = 2 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'(0 - 1)' = { + table2Version = 2 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'m' = { + table2Version = 2 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'m s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'s**-1' = { + table2Version = 2 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'m' = { + table2Version = 2 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'m' = { + table2Version = 2 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'s' = { + table2Version = 2 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'m' = { + table2Version = 2 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'s' = { + table2Version = 2 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'s' = { + table2Version = 2 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'Degree true' = { + table2Version = 2 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'s' = { + table2Version = 2 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'J m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'J m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'J m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'J m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'J m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'J m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'J m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'W m**-1 sr**-1' = { + table2Version = 2 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'W m**-1 sr**-1' = { + table2Version = 2 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'N m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'N m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'J' = { + table2Version = 2 ; + indicatorOfParameter = 126 ; + } +#Image data +'~' = { + table2Version = 2 ; + indicatorOfParameter = 127 ; + } +#Orography +'m' = { + table2Version = 2 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'kg m**-3' = { + table2Version = 2 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'K' = { + table2Version = 2 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'%' = { + table2Version = 2 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'kg m**-2' = { + table2Version = 2 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; + } +#Stream function +'m**2 s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 35 ; + } +#Velocity potential +'m**2 s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 36 ; + } +#Potential temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 13 ; + } +#Wind speed +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 32 ; + } +#Pressure +'Pa' = { + table2Version = 1 ; + indicatorOfParameter = 1 ; + } +#Potential vorticity +'K m**2 kg**-1 s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 4 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'K' = { + table2Version = 1 ; + indicatorOfParameter = 15 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'K' = { + table2Version = 1 ; + indicatorOfParameter = 16 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Geopotential +'m**2 s**-2' = { + table2Version = 1 ; + indicatorOfParameter = 6 ; + } +#Temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 11 ; + } +#U component of wind +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 33 ; + } +#V component of wind +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 34 ; + } +#Specific humidity +'kg kg**-1' = { + table2Version = 1 ; + indicatorOfParameter = 51 ; + } +#Surface pressure +'Pa' = { + table2Version = 1 ; + indicatorOfParameter = 1 ; + indicatorOfTypeOfLevel = 1 ; + } +#Vertical velocity +'Pa s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 39 ; + } +#Vorticity (relative) +'s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 43 ; + } +#Boundary layer dissipation +'J m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 123 ; + } +#Surface sensible heat flux +'J m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 122 ; + } +#Surface latent heat flux +'J m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 121 ; + } +#Mean sea level pressure +'Pa' = { + table2Version = 1 ; + indicatorOfParameter = 2 ; + } +#Divergence +'s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 44 ; + } +#Geopotential Height +'gpm' = { + table2Version = 1 ; + indicatorOfParameter = 7 ; + } +#Relative humidity +'%' = { + table2Version = 1 ; + indicatorOfParameter = 52 ; + } +#10 metre U wind component +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 33 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#10 metre V wind component +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 34 ; + indicatorOfTypeOfLevel = 105 ; + level = 10 ; + } +#2 metre temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 11 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#2 metre dewpoint temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 44 ; + indicatorOfTypeOfLevel = 105 ; + level = 2 ; + } +#Land-sea mask +'(0 - 1)' = { + table2Version = 1 ; + indicatorOfParameter = 81 ; + } +#Surface roughness +'m' = { + table2Version = 1 ; + indicatorOfParameter = 83 ; + } +#Albedo +'(0 - 1)' = { + table2Version = 1 ; + indicatorOfParameter = 84 ; + } +#Evaporation +'m of water equivalent' = { + table2Version = 1 ; + indicatorOfParameter = 57 ; + } +#Convective cloud cover +'(0 - 1)' = { + table2Version = 1 ; + indicatorOfParameter = 72 ; + } +#Low cloud cover +'(0 - 1)' = { + table2Version = 1 ; + indicatorOfParameter = 73 ; + } +#Medium cloud cover +'(0 - 1)' = { + table2Version = 1 ; + indicatorOfParameter = 74 ; + } +#High cloud cover +'(0 - 1)' = { + table2Version = 1 ; + indicatorOfParameter = 75 ; + } +#Brightness temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 118 ; + } +#Vegetation fraction +'(0 - 1)' = { + table2Version = 1 ; + indicatorOfParameter = 87 ; + } +#Runoff +'m' = { + table2Version = 1 ; + indicatorOfParameter = 90 ; + } +#Total column ozone +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 10 ; + } +#Convective snowfall +'m of water equivalent' = { + table2Version = 1 ; + indicatorOfParameter = 78 ; + } +#Large-scale snowfall +'m of water equivalent' = { + table2Version = 1 ; + indicatorOfParameter = 79 ; + } +#large scale precipitation +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 62 ; + } +#Probability of a tropical storm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 89 ; + } +#Probability of a hurricane +'%' = { + table2Version = 131 ; + indicatorOfParameter = 90 ; + } +#Probability of a tropical depression +'%' = { + table2Version = 131 ; + indicatorOfParameter = 91 ; + } +#Climatological probability of a tropical storm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 92 ; + } +#Climatological probability of a hurricane +'%' = { + table2Version = 131 ; + indicatorOfParameter = 93 ; + } +#Climatological probability of a tropical depression +'%' = { + table2Version = 131 ; + indicatorOfParameter = 94 ; + } +#Probability anomaly of a tropical storm +'%' = { + table2Version = 131 ; + indicatorOfParameter = 95 ; + } +#Probability anomaly of a hurricane +'%' = { + table2Version = 131 ; + indicatorOfParameter = 96 ; + } +#Probability anomaly of a tropical depression +'%' = { + table2Version = 131 ; + indicatorOfParameter = 97 ; + } +#Aerosol type 15 mass mixing ratio +'kg kg**-1' = { + table2Version = 211 ; + indicatorOfParameter = 15 ; + } +#Cloud water +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 76 ; + } +#Pressure tendency +'Pa s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 3 ; + } +#ICAO Standard Atmosphere reference height +'m' = { + table2Version = 1 ; + indicatorOfParameter = 5 ; + } +#Geometrical height +'m' = { + table2Version = 1 ; + indicatorOfParameter = 8 ; + } +#Standard deviation of height +'m' = { + table2Version = 1 ; + indicatorOfParameter = 9 ; + } +#Pseudo-adiabatic potential temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 14 ; + } +#Maximum temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 15 ; + } +#Minimum temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 16 ; + } +#Dew point temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 17 ; + } +#Dew point depression (or deficit) +'K' = { + table2Version = 1 ; + indicatorOfParameter = 18 ; + } +#Lapse rate +'K s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 19 ; + } +#Visibility +'m' = { + table2Version = 1 ; + indicatorOfParameter = 20 ; + } +#Radar spectra (1) +'~' = { + table2Version = 1 ; + indicatorOfParameter = 21 ; + } +#Radar spectra (2) +'~' = { + table2Version = 1 ; + indicatorOfParameter = 22 ; + } +#Radar spectra (3) +'~' = { + table2Version = 1 ; + indicatorOfParameter = 23 ; + } +#Parcel lifted index (to 500 hPa) +'K' = { + table2Version = 1 ; + indicatorOfParameter = 24 ; + } +#Temperature anomaly +'K' = { + table2Version = 1 ; + indicatorOfParameter = 25 ; + } +#Pressure anomaly +'Pa' = { + table2Version = 1 ; + indicatorOfParameter = 26 ; + } +#Geopotential height anomaly +'gpm' = { + table2Version = 1 ; + indicatorOfParameter = 27 ; + } +#Wave spectra (1) +'~' = { + table2Version = 1 ; + indicatorOfParameter = 28 ; + } +#Wave spectra (2) +'~' = { + table2Version = 1 ; + indicatorOfParameter = 29 ; + } +#Wave spectra (3) +'~' = { + table2Version = 1 ; + indicatorOfParameter = 30 ; + } +#Wind direction +'Degree true' = { + table2Version = 1 ; + indicatorOfParameter = 31 ; + } +#Montgomery stream Function +'m**2 s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 37 ; + } +#Sigma coordinate vertical velocity +'s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 38 ; + } +#Absolute vorticity +'s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 41 ; + } +#Absolute divergence +'s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 42 ; + } +#Vertical u-component shear +'s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 45 ; + } +#Vertical v-component shear +'s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 46 ; + } +#Direction of current +'Degree true' = { + table2Version = 1 ; + indicatorOfParameter = 47 ; + } +#Speed of current +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 48 ; + } +#U-component of current +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 49 ; + } +#V-component of current +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 50 ; + } +#Humidity mixing ratio +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 53 ; + } +#Precipitable water +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 54 ; + } +#Vapour pressure +'Pa' = { + table2Version = 1 ; + indicatorOfParameter = 55 ; + } +#Saturation deficit +'Pa' = { + table2Version = 1 ; + indicatorOfParameter = 56 ; + } +#Precipitation rate +'kg m**-2 s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 59 ; + } +#Thunderstorm probability +'%' = { + table2Version = 1 ; + indicatorOfParameter = 60 ; + } +#Convective precipitation (water) +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 63 ; + } +#Snow fall rate water equivalent +'kg m**-2 s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 64 ; + } +#Mixed layer depth +'m' = { + table2Version = 1 ; + indicatorOfParameter = 67 ; + } +#Transient thermocline depth +'m' = { + table2Version = 1 ; + indicatorOfParameter = 68 ; + } +#Main thermocline depth +'m' = { + table2Version = 1 ; + indicatorOfParameter = 69 ; + } +#Main thermocline anomaly +'m' = { + table2Version = 1 ; + indicatorOfParameter = 70 ; + } +#Best lifted index (to 500 hPa) +'K' = { + table2Version = 1 ; + indicatorOfParameter = 77 ; + } +#Water temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 80 ; + } +#Deviation of sea-level from mean +'m' = { + table2Version = 1 ; + indicatorOfParameter = 82 ; + } +#Soil moisture content +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 86 ; + } +#Salinity +'kg kg**-1' = { + table2Version = 1 ; + indicatorOfParameter = 88 ; + } +#Density +'kg m**-3' = { + table2Version = 1 ; + indicatorOfParameter = 89 ; + } +#Ice cover (1=land, 0=sea) +'(0 - 1)' = { + table2Version = 1 ; + indicatorOfParameter = 91 ; + } +#Ice thickness +'m' = { + table2Version = 1 ; + indicatorOfParameter = 92 ; + } +#Direction of ice drift +'Degree true' = { + table2Version = 1 ; + indicatorOfParameter = 93 ; + } +#Speed of ice drift +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 94 ; + } +#U-component of ice drift +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 95 ; + } +#V-component of ice drift +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 96 ; + } +#Ice growth rate +'m s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 97 ; + } +#Ice divergence +'s**-1' = { + table2Version = 1 ; + indicatorOfParameter = 98 ; + } +#Snow melt +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 99 ; + } +#Signific.height,combined wind waves+swell +'m' = { + table2Version = 1 ; + indicatorOfParameter = 100 ; + } +#Mean direction of wind waves +'Degree true' = { + table2Version = 1 ; + indicatorOfParameter = 101 ; + } +#Significant height of wind waves +'m' = { + table2Version = 1 ; + indicatorOfParameter = 102 ; + } +#Mean period of wind waves +'s' = { + table2Version = 1 ; + indicatorOfParameter = 103 ; + } +#Direction of swell waves +'Degree true' = { + table2Version = 1 ; + indicatorOfParameter = 104 ; + } +#Significant height of swell waves +'m' = { + table2Version = 1 ; + indicatorOfParameter = 105 ; + } +#Mean period of swell waves +'s' = { + table2Version = 1 ; + indicatorOfParameter = 106 ; + } +#Mean direction of primary swell +'Degree true' = { + table2Version = 1 ; + indicatorOfParameter = 107 ; + } +#Mean period of primary swell +'s' = { + table2Version = 1 ; + indicatorOfParameter = 108 ; + } +#Secondary wave direction +'Degree true' = { + table2Version = 1 ; + indicatorOfParameter = 109 ; + } +#Secondary wave period +'s' = { + table2Version = 1 ; + indicatorOfParameter = 110 ; + } +#Net short-wave radiation flux (surface) +'J m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 111 ; + } +#Net long-wave radiation flux (surface) +'J m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 112 ; + } +#Net short-wave radiationflux(atmosph.top) +'J m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 113 ; + } +#Net long-wave radiation flux(atmosph.top) +'J m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 114 ; + } +#Long wave radiation flux +'J m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 115 ; + } +#Short wave radiation flux +'J m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 116 ; + } +#Global radiation flux +'J m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 117 ; + } +#Radiance (with respect to wave number) +'W m**-1 sr**-1' = { + table2Version = 1 ; + indicatorOfParameter = 119 ; + } +#Radiance (with respect to wave length) +'W m**-1 sr**-1' = { + table2Version = 1 ; + indicatorOfParameter = 120 ; + } +#Momentum flux, u-component +'N m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 124 ; + } +#Momentum flux, v-component +'N m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 125 ; + } +#Wind mixing energy +'J' = { + table2Version = 1 ; + indicatorOfParameter = 126 ; + } +#Image data +'~' = { + table2Version = 1 ; + indicatorOfParameter = 127 ; + } +#Orography +'m' = { + table2Version = 1 ; + indicatorOfParameter = 7 ; + indicatorOfTypeOfLevel = 1 ; + } +#Soil Moisture +'kg m**-3' = { + table2Version = 1 ; + indicatorOfParameter = 86 ; + } +#Soil Temperature +'K' = { + table2Version = 1 ; + indicatorOfParameter = 85 ; + } +#Snow depth water equivalent +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 66 ; + } +#Snow Fall water equivalent +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 65 ; + } +#Total Cloud Cover +'%' = { + table2Version = 1 ; + indicatorOfParameter = 71 ; + } +#Total Precipitation +'kg m**-2' = { + table2Version = 1 ; + indicatorOfParameter = 61 ; + indicatorOfTypeOfLevel = 1 ; + level = 0 ; +} diff --git a/definitions/grib2/boot.def b/definitions/grib2/boot.def new file mode 100644 index 000000000..b4247e4bd --- /dev/null +++ b/definitions/grib2/boot.def @@ -0,0 +1,40 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +constant one = 1 : hidden ; +constant million = 1000000 : hidden; +constant grib2divider = 1000000; +alias extraDimensionPresent=zero; + +meta gts_header gts_header() : no_copy,hidden,read_only; +meta gts_TTAAii gts_header(20,6) : no_copy,hidden,read_only; +meta gts_CCCC gts_header(27,4) : no_copy,hidden,read_only; +meta gts_ddhh00 gts_header(32,6) : no_copy,hidden,read_only; + + +transient missingValue = 9999; +constant ieeeFloats = 1 : edition_specific; + +include "section.0.def"; + +template core "grib2/sections.def"; + + +#if(!new()) +#{ + #lookup[4] endOfProduct(0); + #while(endOfProduct != `7777`) + #{ + #template core "grib2/sections.def"; + #lookup[4] endOfProduct(0); + #} +#} + +template section_8 "grib2/section.8.def"; + diff --git a/definitions/grib2/boot_multifield.def b/definitions/grib2/boot_multifield.def new file mode 100644 index 000000000..9519af803 --- /dev/null +++ b/definitions/grib2/boot_multifield.def @@ -0,0 +1,31 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +constant grib2divider = 1000000; +transient missingValue = 9999; +constant ieeeFloats = 1 : edition_specific; + + +ascii[4] identifier; +ascii[2] reserved : hidden; +codetable[1] discipline 'grib2/0.0.table'; +unsigned[1] editionNumber : edition_specific; +length[8] totalLength; + + +template core "grib2/sections.def"; + +lookup[4] endOfProduct(0); + + if(endOfProduct != `7777`){ + template core "grib2/sections.def"; + } + + template section8 "grib2/section.8.def"; + diff --git a/definitions/grib2/cfName.def b/definitions/grib2/cfName.def new file mode 100644 index 000000000..acf6b0d97 --- /dev/null +++ b/definitions/grib2/cfName.def @@ -0,0 +1,134 @@ +# Automatically generated by ./create_param.pl from database param@balthasar, do not edit +#Geopotential +'geopotential' = { + discipline = 0 ; + parameterNumber = 4 ; + parameterCategory = 3 ; + } +#Temperature +'air_temperature' = { + discipline = 0 ; + parameterNumber = 0 ; + parameterCategory = 0 ; + } +#u-component of wind +'eastward_wind' = { + discipline = 0 ; + parameterNumber = 2 ; + parameterCategory = 2 ; + } +#v-component of wind +'northward_wind' = { + discipline = 0 ; + parameterNumber = 3 ; + parameterCategory = 2 ; + } +#Specific humidity +'specific_humidity' = { + discipline = 0 ; + parameterNumber = 0 ; + parameterCategory = 1 ; + } +#Surface pressure +'surface_air_pressure' = { + discipline = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + parameterCategory = 3 ; + } +#Vertical velocity (geometric) +'lagrangian_tendency_of_air_pressure' = { + discipline = 0 ; + parameterNumber = 8 ; + parameterCategory = 2 ; + } +#Relative vorticity +'atmosphere_relative_vorticity' = { + discipline = 0 ; + parameterNumber = 12 ; + parameterCategory = 2 ; + } +#Boundary layer dissipation +'dissipation_in_atmosphere_boundary_layer' = { + discipline = 0 ; + parameterNumber = 20 ; + parameterCategory = 2 ; + } +#Surface sensible heat flux +'surface_upward_sensible_heat_flux' = { + discipline = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + parameterCategory = 0 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface latent heat flux +'surface_upward_latent_heat_flux' = { + discipline = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + parameterCategory = 0 ; + typeOfStatisticalProcessing = 1 ; + } +#Mean sea level pressure +'air_pressure_at_sea_level' = { + discipline = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + parameterCategory = 3 ; + } +#Relative divergence +'divergence_of_wind' = { + discipline = 0 ; + parameterNumber = 13 ; + parameterCategory = 2 ; + } +#Geopotential height +'geopotential_height' = { + discipline = 0 ; + parameterNumber = 5 ; + parameterCategory = 3 ; + } +#Relative humidity +'relative_humidity' = { + discipline = 0 ; + parameterNumber = 1 ; + parameterCategory = 1 ; + } +#Land-sea mask +'land_binary_mask' = { + discipline = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + parameterCategory = 0 ; + } +#Surface roughness +'surface_roughness_length' = { + discipline = 2 ; + parameterNumber = 1 ; + parameterCategory = 0 ; + } +#Surface solar radiation +'surface_net_upward_longwave_flux' = { + discipline = 0 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + parameterCategory = 4 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface thermal radiation +'surface_net_upward_shortwave_flux' = { + discipline = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + parameterCategory = 5 ; + typeOfStatisticalProcessing = 1 ; + } +#Top thermal radiation +'toa_outgoing_longwave_flux' = { + discipline = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 8 ; + parameterCategory = 5 ; + typeOfStatisticalProcessing = 1 ; +} diff --git a/definitions/grib2/d b/definitions/grib2/d new file mode 100644 index 000000000..1747c3626 --- /dev/null +++ b/definitions/grib2/d @@ -0,0 +1,98 @@ +0.0.table +1.0.table +1.1.table +1.2.table +1.3.table +1.4.table +3.0.table +3.1.table +3.10.table +3.11.table +3.15.table +3.2.table +3.20.table +3.21.table +3.3.table +3.4.table +3.5.table +3.6.table +3.7.table +3.8.table +3.9.table +4.0.table +4.1.0.table +4.1.1.table +4.1.10.table +4.1.2.table +4.1.3.table +4.1.table +4.10.table +4.11.table +4.12.table +4.13.table +4.14.table +4.2.0.0.table +4.2.0.1.table +4.2.0.13.table +4.2.0.14.table +4.2.0.15.table +4.2.0.18.table +4.2.0.19.table +4.2.0.190.table +4.2.0.191.table +4.2.0.2.table +4.2.0.3.table +4.2.0.4.table +4.2.0.5.table +4.2.0.6.table +4.2.0.7.table +4.2.1.0.table +4.2.1.1.table +4.2.10.0.table +4.2.10.1.table +4.2.10.2.table +4.2.10.3.table +4.2.10.4.table +4.2.2.0.table +4.2.2.3.table +4.2.3.0.table +4.2.3.1.table +4.2.table +4.201.table +4.202.table +4.203.table +4.204.table +4.205.table +4.206.table +4.207.table +4.208.table +4.209.table +4.210.table +4.211.table +4.212.table +4.213.table +4.215.table +4.216.table +4.217.table +4.220.table +4.221.table +4.3.table +4.4.table +4.5.table +4.6.table +4.7.table +4.8.table +4.9.table +5.0.table +5.1.table +5.2.table +5.3.table +5.4.table +5.40.table +5.40000.table +5.5.table +5.6.table +5.7.table +5.8.table +5.9.table +6.0.table diff --git a/definitions/grib2/diff.out b/definitions/grib2/diff.out new file mode 100644 index 000000000..c997c3493 --- /dev/null +++ b/definitions/grib2/diff.out @@ -0,0 +1,793 @@ +boot.def +boot_multifield.def +meta.def +parameters.def +11,18c11,18 +< # od, "0" = { +< # productionStatusOfProcessedData = 0; +< # marsExpver = "0001"; +< # } +< # +< # rd, "2" = { +< # productionStatusOfProcessedData = 2; +< # } +--- +> # od, "0" = { +> # productionStatusOfProcessedData = 0; +> # marsExpver = "0001"; +> # } +> # +> # rd, "2" = { +> # productionStatusOfProcessedData = 2; +> # } +24,25c24,25 +< constant marsExpver = "prod"; +< template tigge "grib2/tigge.def"; +--- +> constant marsExpver = "prod"; +> template tigge "grib2/tigge.def"; +33,34c33,34 +< constant marsExpver = "test"; +< template tigge "grib2/tigge.def"; +--- +> constant marsExpver = "test"; +> template tigge "grib2/tigge.def"; +48,62c48,62 +< an, "2" = { +< typeOfProcessedData = 0; +< } +< +< fc, "9" = { +< typeOfProcessedData = 2; +< } +< +< cf, "10" = { +< typeOfProcessedData = 3; +< } +< +< pf, "11" = { +< typeOfProcessedData = 4; +< } +--- +> an, "2" = { +> typeOfProcessedData = 0; +> } +> +> fc, "9" = { +> typeOfProcessedData = 2; +> } +> +> cf, "10" = { +> typeOfProcessedData = 3; +> } +> +> pf, "11" = { +> typeOfProcessedData = 4; +> } +69,103c69,83 +< oper = { +< typeOfProcessedData = 0; +< } +< +< oper = { +< typeOfProcessedData = 2; +< } +< +< wave = { +< discipline=10; +< typeOfProcessedData = 0; +< } +< +< wave = { +< discipline=10; +< typeOfProcessedData = 2; +< } +< +< enfo = { +< typeOfProcessedData = 3; +< } +< +< enfo = { +< typeOfProcessedData = 4; +< } +< +< waef = { +< discipline=10; +< typeOfProcessedData = 3; +< } +< +< waefs = { +< discipline=10; +< typeOfProcessedData = 4; +< } +--- +> oper = { +> typeOfProcessedData = 0; +> } +> +> oper = { +> typeOfProcessedData = 2; +> } +> +> enfo = { +> typeOfProcessedData = 3; +> } +> +> enfo = { +> typeOfProcessedData = 4; +> } +point_in_time.def +rules.def +section.0.def +section.1.def +section.2.def +section.3.def +24c24 +< alias numberOfOctectsForListOfPoints=numberOfOctetsForOptionalListOfNumbersDefiningNumberOfPoints; +--- +> alias numberOfOctectsForNumberOfPoints=numberOfOctetsForOptionalListOfNumbersDefiningNumberOfPoints; +30,35d29 +< if( numberOfOctectsForListOfPoints == 0){ +< transient PLPresent = 0; +< }else { +< transient PLPresent = 1; +< } +< +40c34,35 +< # Octets 15-xx:Grid Def Template (see Template 3.N, where N is the Grid Def Template Number) +--- +> # Octets 15-xx : Grid Definition Template (see Template 3.N, where N is the Grid Definition Template Number +> # ???? grid_definition_template_see_template_3_n_where_n_is_the_grid_definition_template_number +44c39,43 +< +--- +> if(numberOfOctectsForNumberOfPoints == 0){ +> transient PLPresent = 0; +> }else{ +> transient PLPresent = 1; +> } +47c46 +< if(numberOfOctectsForListOfPoints == 1){ +--- +> if(numberOfOctectsForNumberOfPoints == 1){ +50c49 +< if(numberOfOctectsForListOfPoints == 2){ +--- +> if(numberOfOctectsForNumberOfPoints == 2){ +53c52 +< if(numberOfOctectsForListOfPoints == 3){ +--- +> if(numberOfOctectsForNumberOfPoints == 3){ +57,61c56,60 +< +< when (PLPresent == 0) { +< set numberOfOctectsForListOfPoints = 0; +< set sinterpretationOfNumberOfPoints = 0; +< } +--- +> when (PLPresent == 0) +> { +> set numberOfOctectsForNumberOfPoints = 0; +> set interpretationOfNumberOfPoints = 0; +> } +64a64,65 +> +> +section.4.def +section.5.def +section.6.def +section.7.def +section.8.def +sections.def +template.3.0.def +template.3.1.def +template.3.10.def +template.3.100.def +template.3.1000.def +template.3.110.def +template.3.1100.def +template.3.120.def +template.3.1200.def +template.3.2.def +template.3.20.def +template.3.3.def +template.3.30.def +template.3.31.def +template.3.40.def +template.3.41.def +template.3.42.def +template.3.43.def +template.3.50.def +template.3.51.def +template.3.52.def +template.3.53.def +template.3.90.def +template.3.gaussian.def +17,25c17,25 +< latitudeOfFirstGridPoint, +< longitudeOfFirstGridPoint, +< latitudeOfLastGridPoint, +< longitudeOfLastGridPoint, +< iDirectionIncrement, +< null, +< basicAngleOfTheInitialProductionDomain, +< subdivisionsOfBasicAngle +< ); +--- +> latitudeOfFirstGridPoint, +> longitudeOfFirstGridPoint, +> latitudeOfLastGridPoint, +> longitudeOfLastGridPoint, +> iDirectionIncrement, +> null, +> basicAngleOfTheInitialProductionDomain, +> subdivisionsOfBasicAngle +> ); +31,32c31,32 +< meta iDirectionIncrementInDegrees g2latlon(g2grid,4, +< iDirectionIncrementGiven) : can_be_missing; +--- +> meta iDirectionIncrementInDegrees g2latlon(g2grid,4, +> iDirectionIncrementGiven) : can_be_missing; +34,47d33 +< alias geography.laFirst = latitudeOfFirstGridPointInDegrees; +< alias geography.loFirst = longitudeOfFirstGridPointInDegrees; +< alias geography.laLast = latitudeOfLastGridPointInDegrees; +< alias geography.loLast = longitudeOfLastGridPointInDegrees; +< alias geography.iInc = iDirectionIncrementInDegrees; +< alias geography.Nj = numberOfPointsAlongAMeridian; +< alias geography.Ni = numberOfPointsAlongAParallel; +< +< if(missing(numberOfPointsAlongAParallel) && PLPresent == 1){ +< iterator gaussian_reduced(values,laFirst,loFirst,laLast,loLast, +< numberOfParallelsBetweenAPoleAndTheEquator,iInc,pl,Nj); +< } else { +< iterator gaussian(values,loFirst,iInc ,Ni ,Nj, laFirst, laLast, trunc); +< } +template.3.grid.def +template.3.latlon.def +16,24c16,24 +< latitudeOfFirstGridPoint, +< longitudeOfFirstGridPoint, +< latitudeOfLastGridPoint, +< longitudeOfLastGridPoint, +< iDirectionIncrement, +< jDirectionIncrement, +< basicAngleOfTheInitialProductionDomain, +< subdivisionsOfBasicAngle +< ); +--- +> latitudeOfFirstGridPoint, +> longitudeOfFirstGridPoint, +> latitudeOfLastGridPoint, +> longitudeOfLastGridPoint, +> iDirectionIncrement, +> jDirectionIncrement, +> basicAngleOfTheInitialProductionDomain, +> subdivisionsOfBasicAngle +> ); +31,32c31,32 +< meta iDirectionIncrementInDegrees g2latlon(g2grid,4, +< iDirectionIncrementGiven) : can_be_missing; +--- +> meta iDirectionIncrementInDegrees g2latlon(g2grid,4, +> iDirectionIncrementGiven) : can_be_missing; +35c35 +< jDirectionIncrementGiven) : can_be_missing; +--- +> jDirectionIncrementGiven) : can_be_missing; +37,51d36 +< alias geography.laFirst = latitudeOfFirstGridPointInDegrees; +< alias geography.loFirst = longitudeOfFirstGridPointInDegrees; +< alias geography.laLast = latitudeOfLastGridPointInDegrees; +< alias geography.loLast = longitudeOfLastGridPointInDegrees; +< alias geography.iInc = iDirectionIncrementInDegrees; +< alias geography.jInc = jDirectionIncrementInDegrees; +< alias geography.gridWestEast = iDirectionIncrementInDegrees; +< alias geography.gridNorthSouth = jDirectionIncrementInDegrees; +< +< if ( missing(numberOfPointsAlongAParallel) && PLPresent == 1 ) { +< iterator latlon_reduced(values,laFirst,loFirst,laLast,loLast, +< Nj,jInc,pl); +< } else { +< iterator latlon(values,loFirst,iInc ,Ni ,Nj, laFirst, jInc); +< } +template.3.resolution_flags.def +template.3.rotation.def +template.3.scanning_mode.def +template.3.shape_of_the_earth.def +template.3.spherical_harmonics.def +template.3.stretching.def +template.4.0.def +template.4.1.def +template.4.10.def +template.4.1000.def +template.4.1001.def +template.4.1002.def +template.4.11.def +template.4.1100.def +template.4.1101.def +template.4.12.def +template.4.13.def +template.4.14.def +template.4.2.def +template.4.20.def +template.4.254.def +template.4.3.def +template.4.30.def +template.4.4.def +template.4.5.def +template.4.6.def +template.4.7.def +template.4.8.def +template.4.9.def +template.4.circular_cluster.def +template.4.derived.def +template.4.eps.def +template.4.horizontal.def +template.4.parameter.def +template.4.percentile.def +template.4.point_in_time.def +template.4.probability.def +template.4.rectangular_cluster.def +template.4.statistical.def +template.5.0.def +template.5.1.def +template.5.2.def +template.5.3.def +template.5.4.def +template.5.40.def +template.5.40000.def +template.5.40010.def +template.5.41.def +template.5.42.def +template.5.50.def +template.5.51.def +template.5.6.def +template.5.61.def +template.5.original_values.def +template.5.packing.def +template.7.0.def +template.7.1.def +template.7.2.def +template.7.3.def +template.7.4.def +template.7.40.def +template.7.40000.def +template.7.40010.def +template.7.41.def +template.7.50.def +template.7.51.def +template.7.6.def +template.7.61.def +tigge.def +0a1 +> # Automatically generated by .//tigge_def.pl, do not edit +7c8 +< concept parameter "grib2/tigge_parameter.def"; +--- +> concept parameter { +9,10c10,200 +< concept tigge_short_name "grib2/tigge_short_name.def"; +< alias ls.short_name=tigge_short_name; +--- +> # 10_meter_u_velocity +> '165' = { +> discipline = 0; +> parameterCategory = 2; +> parameterNumber = 2; +> scaleFactorOfFirstFixedSurface = 0; +> scaledValueOfFirstFixedSurface = 10; +> typeOfFirstFixedSurface = 103; +> } +> +> # 10_meter_v_velocity +> '166' = { +> discipline = 0; +> parameterCategory = 2; +> parameterNumber = 3; +> scaleFactorOfFirstFixedSurface = 0; +> scaledValueOfFirstFixedSurface = 10; +> typeOfFirstFixedSurface = 103; +> } +> +> # convective_available_potential_energy +> '59' = { +> discipline = 0; +> parameterCategory = 7; +> parameterNumber = 6; +> typeOfFirstFixedSurface = 1; +> typeOfSecondFixedSurface = 8; +> } +> +> # convective_inhibition +> '228001' = { +> discipline = 0; +> parameterCategory = 7; +> parameterNumber = 7; +> typeOfFirstFixedSurface = 1; +> typeOfSecondFixedSurface = 8; +> } +> +> # field_capacity +> '228170' = { +> discipline = 2; +> parameterCategory = 3; +> parameterNumber = 7; +> scaleFactorOfFirstFixedSurface = 0; +> scaleFactorOfSecondFixedSurface = 1; +> scaledValueOfFirstFixedSurface = 0; +> scaledValueOfSecondFixedSurface = 2; +> typeOfFirstFixedSurface = 106; +> typeOfSecondFixedSurface = 106; +> } +> +> # geopotential_height +> '156' = { +> discipline = 0; +> parameterCategory = 3; +> parameterNumber = 5; +> typeOfFirstFixedSurface = 100; +> } +> +> # land_sea_mask +> '172' = { +> discipline = 2; +> parameterCategory = 0; +> parameterNumber = 0; +> typeOfFirstFixedSurface = 1; +> } +> +> # mean_sea_level_pressure +> '151' = { +> discipline = 0; +> parameterCategory = 3; +> parameterNumber = 0; +> typeOfFirstFixedSurface = 101; +> } +> +> # orography +> '228002' = { +> discipline = 0; +> parameterCategory = 3; +> parameterNumber = 5; +> typeOfFirstFixedSurface = 1; +> } +> +> # potential_temperature +> '3' = { +> discipline = 0; +> parameterCategory = 0; +> parameterNumber = 2; +> scaleFactorOfFirstFixedSurface = 6; +> scaledValueOfFirstFixedSurface = 2; +> typeOfFirstFixedSurface = 109; +> } +> +> # potential_vorticity +> '60' = { +> discipline = 0; +> parameterCategory = 2; +> parameterNumber = 14; +> scaleFactorOfFirstFixedSurface = 0; +> scaledValueOfFirstFixedSurface = 320; +> typeOfFirstFixedSurface = 107; +> } +> +> # saturation_of_soil_moisture +> '228172' = { +> discipline = 2; +> parameterCategory = 3; +> parameterNumber = 10; +> scaleFactorOfFirstFixedSurface = 0; +> scaleFactorOfSecondFixedSurface = 1; +> scaledValueOfFirstFixedSurface = 0; +> scaledValueOfSecondFixedSurface = 2; +> typeOfFirstFixedSurface = 106; +> typeOfSecondFixedSurface = 106; +> } +> +> # skin_temperature +> '235' = { +> discipline = 0; +> parameterCategory = 0; +> parameterNumber = 17; +> typeOfFirstFixedSurface = 1; +> } +> +> # snow_depth_water_equivalent +> '228141' = { +> discipline = 0; +> parameterCategory = 1; +> parameterNumber = 60; +> typeOfFirstFixedSurface = 1; +> } +> +> # snow_fall_water_equivalent +> '228144' = { +> discipline = 0; +> parameterCategory = 1; +> parameterNumber = 53; +> typeOfFirstFixedSurface = 1; +> typeOfStatisticalProcessing = 1; +> } +> +> # soil_moisture +> '228039' = { +> discipline = 2; +> parameterCategory = 0; +> parameterNumber = 22; +> scaleFactorOfFirstFixedSurface = 0; +> scaleFactorOfSecondFixedSurface = 1; +> scaledValueOfFirstFixedSurface = 0; +> scaledValueOfSecondFixedSurface = 2; +> typeOfFirstFixedSurface = 106; +> typeOfSecondFixedSurface = 106; +> } +> +> # soil_temperature +> '228139' = { +> discipline = 2; +> parameterCategory = 0; +> parameterNumber = 2; +> scaleFactorOfFirstFixedSurface = 0; +> scaleFactorOfSecondFixedSurface = 1; +> scaledValueOfFirstFixedSurface = 0; +> scaledValueOfSecondFixedSurface = 2; +> typeOfFirstFixedSurface = 106; +> typeOfSecondFixedSurface = 106; +> } +> +> # specific_humidity +> '133' = { +> discipline = 0; +> parameterCategory = 1; +> parameterNumber = 0; +> typeOfFirstFixedSurface = 100; +> } +> +> # sunshine_duration +> '189' = { +> discipline = 0; +> parameterCategory = 6; +> parameterNumber = 24; +> typeOfFirstFixedSurface = 1; +> typeOfStatisticalProcessing = 1; +> } +> +> # surface_air_dew_point_temperature +> '168' = { +> discipline = 0; +> parameterCategory = 0; +> parameterNumber = 6; +> typeOfFirstFixedSurface = 103; +> } +12,13c202,384 +< concept tigge_name "grib2/tigge_name.def"; +< alias name=tigge_name; +--- +> # surface_air_maximum_temperature +> '121' = { +> discipline = 0; +> parameterCategory = 0; +> parameterNumber = 0; +> typeOfFirstFixedSurface = 103; +> typeOfStatisticalProcessing = 2; +> } +> +> # surface_air_minimum_temperature +> '122' = { +> discipline = 0; +> parameterCategory = 0; +> parameterNumber = 0; +> typeOfFirstFixedSurface = 103; +> typeOfStatisticalProcessing = 3; +> } +> +> # surface_air_temperature +> '167' = { +> discipline = 0; +> parameterCategory = 0; +> parameterNumber = 0; +> typeOfFirstFixedSurface = 103; +> } +> +> # surface_pressure +> '134' = { +> discipline = 0; +> parameterCategory = 3; +> parameterNumber = 0; +> typeOfFirstFixedSurface = 1; +> } +> +> # temperature +> '130' = { +> discipline = 0; +> parameterCategory = 0; +> parameterNumber = 0; +> typeOfFirstFixedSurface = 100; +> } +> +> # time_integrated_outgoing_long_wave_radiation +> '179' = { +> discipline = 0; +> parameterCategory = 5; +> parameterNumber = 5; +> typeOfFirstFixedSurface = 8; +> typeOfStatisticalProcessing = 1; +> } +> +> # time_integrated_surface_latent_heat_flux +> '147' = { +> discipline = 0; +> parameterCategory = 0; +> parameterNumber = 10; +> typeOfFirstFixedSurface = 1; +> typeOfStatisticalProcessing = 1; +> } +> +> # time_integrated_surface_net_solar_radiation +> '176' = { +> discipline = 0; +> parameterCategory = 4; +> parameterNumber = 9; +> typeOfFirstFixedSurface = 1; +> typeOfStatisticalProcessing = 1; +> } +> +> # time_integrated_surface_net_thermal_radiation +> '177' = { +> discipline = 0; +> parameterCategory = 5; +> parameterNumber = 5; +> typeOfFirstFixedSurface = 1; +> typeOfStatisticalProcessing = 1; +> } +> +> # time_integrated_surface_sensible_heat_flux +> '146' = { +> discipline = 0; +> parameterCategory = 0; +> parameterNumber = 11; +> typeOfFirstFixedSurface = 1; +> typeOfStatisticalProcessing = 1; +> } +> +> # total_cloud_cover +> '228164' = { +> discipline = 0; +> parameterCategory = 6; +> parameterNumber = 1; +> typeOfFirstFixedSurface = 1; +> typeOfSecondFixedSurface = 8; +> } +> +> # total_column_water +> '136' = { +> discipline = 0; +> parameterCategory = 1; +> parameterNumber = 51; +> typeOfFirstFixedSurface = 1; +> typeOfSecondFixedSurface = 8; +> } +> +> # total_precipitation +> '228228' = { +> discipline = 0; +> parameterCategory = 1; +> parameterNumber = 52; +> typeOfFirstFixedSurface = 1; +> typeOfStatisticalProcessing = 1; +> } +> +> # u_velocity +> '131' = { +> discipline = 0; +> parameterCategory = 2; +> parameterNumber = 2; +> } +> +> # v_velocity +> '132' = { +> discipline = 0; +> parameterCategory = 2; +> parameterNumber = 3; +> } +> +> # wilting_point +> '228171' = { +> discipline = 2; +> parameterCategory = 0; +> parameterNumber = 17; +> scaleFactorOfFirstFixedSurface = 0; +> scaleFactorOfSecondFixedSurface = 1; +> scaledValueOfFirstFixedSurface = 0; +> scaledValueOfSecondFixedSurface = 2; +> typeOfFirstFixedSurface = 106; +> typeOfSecondFixedSurface = 106; +> } +> +> } +> +> concept tigge_short_name { +> '10v' = { parameter = 166; } +> '10u' = { parameter = 165; } +> 'pv' = { parameter = 60; } +> '2d' = { parameter = 168; } +> 'ci' = { parameter = 228001; } +> 'cape' = { parameter = 59; } +> 'cap' = { parameter = 228170; } +> 'gh' = { parameter = 156; } +> 'lsm' = { parameter = 172; } +> 'msl' = { parameter = 151; } +> 'pt' = { parameter = 3; } +> 'sat' = { parameter = 228172; } +> 'sf' = { parameter = 228144; } +> 'sd' = { parameter = 228141; } +> '2t' = { parameter = 167; } +> 'slhf' = { parameter = 147; } +> 'q' = { parameter = 133; } +> 'st' = { parameter = 228139; } +> 'mn2t6' = { parameter = 122; } +> 'orog' = { parameter = 228002; } +> 'skt' = { parameter = 235; } +> 'sm' = { parameter = 228039; } +> 'str' = { parameter = 177; } +> 'sp' = { parameter = 134; } +> 'sund' = { parameter = 189; } +> 'mx2t6' = { parameter = 121; } +> 'tcw' = { parameter = 136; } +> 'tcc' = { parameter = 228164; } +> 't' = { parameter = 130; } +> 'sshf' = { parameter = 146; } +> 'ssr' = { parameter = 176; } +> 'ttr' = { parameter = 179; } +> 'tp' = { parameter = 228228; } +> 'u' = { parameter = 131; } +> 'v' = { parameter = 132; } +> 'wilt' = { parameter = 228171; } +> } +> +> alias ls.short_name=tigge_short_name; +14a386,423 +> concept tigge_name { +> '10_meter_u_velocity' = { parameter = 165; } +> '10_meter_v_velocity' = { parameter = 166; } +> 'convective_available_potential_energy' = { parameter = 59; } +> 'convective_inhibition' = { parameter = 228001; } +> 'field_capacity' = { parameter = 228170; } +> 'geopotential_height' = { parameter = 156; } +> 'land_sea_mask' = { parameter = 172; } +> 'mean_sea_level_pressure' = { parameter = 151; } +> 'orography' = { parameter = 228002; } +> 'potential_temperature' = { parameter = 3; } +> 'potential_vorticity' = { parameter = 60; } +> 'saturation_of_soil_moisture' = { parameter = 228172; } +> 'skin_temperature' = { parameter = 235; } +> 'snow_depth_water_equivalent' = { parameter = 228141; } +> 'snow_fall_water_equivalent' = { parameter = 228144; } +> 'soil_moisture' = { parameter = 228039; } +> 'soil_temperature' = { parameter = 228139; } +> 'specific_humidity' = { parameter = 133; } +> 'sunshine_duration' = { parameter = 189; } +> 'surface_air_dew_point_temperature' = { parameter = 168; } +> 'surface_air_maximum_temperature' = { parameter = 121; } +> 'surface_air_minimum_temperature' = { parameter = 122; } +> 'surface_air_temperature' = { parameter = 167; } +> 'surface_pressure' = { parameter = 134; } +> 'temperature' = { parameter = 130; } +> 'time_integrated_outgoing_long_wave_radiation' = { parameter = 179; } +> 'time_integrated_surface_latent_heat_flux' = { parameter = 147; } +> 'time_integrated_surface_net_solar_radiation' = { parameter = 176; } +> 'time_integrated_surface_net_thermal_radiation' = { parameter = 177; } +> 'time_integrated_surface_sensible_heat_flux' = { parameter = 146; } +> 'total_cloud_cover' = { parameter = 228164; } +> 'total_column_water' = { parameter = 136; } +> 'total_precipitation' = { parameter = 228228; } +> 'u_velocity' = { parameter = 131; } +> 'v_velocity' = { parameter = 132; } +> 'wilting_point' = { parameter = 228171; } +> } +tigge_name.def +tigge_parameter.def +tigge_short_name.def diff --git a/definitions/grib2/dimension.0.table b/definitions/grib2/dimension.0.table new file mode 100644 index 000000000..a53ef5348 --- /dev/null +++ b/definitions/grib2/dimension.0.table @@ -0,0 +1 @@ +# Vegetation fraction diff --git a/definitions/grib2/dimensionTableNumber.table b/definitions/grib2/dimensionTableNumber.table new file mode 100644 index 000000000..fcb28eee2 --- /dev/null +++ b/definitions/grib2/dimensionTableNumber.table @@ -0,0 +1 @@ +0 vegetation vegetation diff --git a/definitions/grib2/dimensionType.table b/definitions/grib2/dimensionType.table new file mode 100644 index 000000000..a724b5799 --- /dev/null +++ b/definitions/grib2/dimensionType.table @@ -0,0 +1,2 @@ +0 layer layer +255 missing missing diff --git a/definitions/grib2/grib2LocalSectionNumber.98.table b/definitions/grib2/grib2LocalSectionNumber.98.table new file mode 100644 index 000000000..84690004f --- /dev/null +++ b/definitions/grib2/grib2LocalSectionNumber.98.table @@ -0,0 +1,19 @@ +0 0 Empty local section +1 1 MARS labelling +7 7 Sensitivity data +9 9 Singular vectors and ensemble perturbations +11 11 Supplementary data used by the analysis +15 15 Seasonal forecast data +16 16 Seasonal forecast monthly mean data +18 18 Multianalysis ensemble data +20 20 4D variational increments +21 21 Sensitive area predictions +24 24 Satellite Channel Data +25 25 4DVar model errors +26 26 MARS labelling or ensemble forecast data (with hindcast support) +28 28 COSMO local area EPS +30 30 Forecasting Systems with Variable Resolution +36 36 MARS labelling for long window 4DVar system +38 38 4D variational increments for long window 4DVar system +39 39 4DVar model errors for long window 4Dvar system +300 300 Multi-dimensional parameters diff --git a/definitions/grib2/local.98.0.def b/definitions/grib2/local.98.0.def new file mode 100644 index 000000000..e67dcb3f7 --- /dev/null +++ b/definitions/grib2/local.98.0.def @@ -0,0 +1,3 @@ +label "empty section"; + + diff --git a/definitions/grib2/local.98.1.def b/definitions/grib2/local.98.1.def new file mode 100644 index 000000000..4e4d2f9b9 --- /dev/null +++ b/definitions/grib2/local.98.1.def @@ -0,0 +1,3 @@ +label "local 98.1"; + + diff --git a/definitions/grib2/local.98.11.def b/definitions/grib2/local.98.11.def new file mode 100644 index 000000000..e2950b55a --- /dev/null +++ b/definitions/grib2/local.98.11.def @@ -0,0 +1,28 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Definition 11, Supplementary data used by the analysis + +unsigned[2] yearOfAnalysis = year : dump; +unsigned[1] monthOfAnalysis = month : dump; +unsigned[1] dayOfAnalysis = day : dump; +unsigned[1] hourOfAnalysis = hour : dump; +unsigned[1] minuteOfAnalysis = minute : dump; + +codetable[2] originatingCentreOfAnalysis 'grib1/0.table' = originatingCentre : dump,string_type; + +unsigned[2] subcentreOfAnalysis = subCentre : dump; + +constant secondsOfAnalysis = 0; + +meta dateOfAnalysis g2date(yearOfAnalysis,monthOfAnalysis,dayOfAnalysis) : dump; +meta timeOfAnalysis time(hourOfAnalysis,minuteOfAnalysis,secondsOfAnalysis) : dump; + +alias date = dateOfAnalysis; +alias time = timeOfAnalysis; diff --git a/definitions/grib2/local.98.15.def b/definitions/grib2/local.98.15.def new file mode 100644 index 000000000..b3410119d --- /dev/null +++ b/definitions/grib2/local.98.15.def @@ -0,0 +1,18 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +unsigned[2] systemNumber : dump ; +unsigned[2] methodNumber : dump ; +alias system=systemNumber; +alias method=methodNumber; + +alias local.systemNumber=systemNumber; +alias local.methodNumber=methodNumber; + diff --git a/definitions/grib2/local.98.16.def b/definitions/grib2/local.98.16.def new file mode 100644 index 000000000..33e46dc79 --- /dev/null +++ b/definitions/grib2/local.98.16.def @@ -0,0 +1,16 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +unsigned[2] systemNumber : dump ; +unsigned[2] methodNumber : dump ; + +alias local.systemNumber=systemNumber; +alias local.methodNumber=methodNumber; + diff --git a/definitions/grib2/local.98.18.def b/definitions/grib2/local.98.18.def new file mode 100644 index 000000000..bd52abc72 --- /dev/null +++ b/definitions/grib2/local.98.18.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +codetable[1] dataOrigin "grib1/0.table" : dump; +alias mars.origin=dataOrigin; + +ascii[4] modelIdentifier : dump ; + +unsigned[1] consensusCount : dump ; + +consensus list(consensusCount) +{ + ascii[4] ccccIdentifiers : dump; +} + +alias local.dataOrigin=dataOrigin; +alias local.modelIdentifier=modelIdentifier; +alias local.consensusCount=consensusCount; + + diff --git a/definitions/grib2/local.98.20.def b/definitions/grib2/local.98.20.def new file mode 100644 index 000000000..dff5f8e08 --- /dev/null +++ b/definitions/grib2/local.98.20.def @@ -0,0 +1,20 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[1] iterationNumber : dump; +alias number=iterationNumber; + +unsigned[1] totalNumberOfIterations : dump; +alias totalNumber=totalNumberOfIterations; + +alias iteration = iterationNumber; + +alias local.iterationNumber =iterationNumber; +alias local.totalNumberOfIterations=totalNumberOfIterations; + diff --git a/definitions/grib2/local.98.21.def b/definitions/grib2/local.98.21.def new file mode 100644 index 000000000..449533d4e --- /dev/null +++ b/definitions/grib2/local.98.21.def @@ -0,0 +1,42 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Definition 21 - Sensitive area predictions + +unsigned[2] forecastOrSingularVectorNumber : dump; + +unsigned[2] numberOfIterations : dump; +unsigned[2] numberOfSingularVectorsComputed : dump; +unsigned[1] normAtInitialTime : dump; +unsigned[1] normAtFinalTime : dump; +unsigned[4] multiplicationFactorForLatLong : dump; +signed[4] northWestLatitudeOfVerficationArea : dump; +signed[4] northWestLongitudeOfVerficationArea : dump; +signed[4] southEastLatitudeOfVerficationArea : dump; +signed[4] southEastLongitudeOfVerficationArea : dump; +unsigned[4] accuracyMultipliedByFactor : dump; +unsigned[2] numberOfSingularVectorsEvolved : dump; + +# Ritz numbers: +signed[4] NINT_LOG10_RITZ : dump; +signed[4] NINT_RITZ_EXP : dump; + +unsigned[1] optimisationTime : dump; +alias mars.opttime = optimisationTime; + +unsigned[1] forecastLeadTime : dump; +alias mars.leadtime = forecastLeadTime; + +ascii[1] marsDomain : dump; +unsigned[2] methodNumber : dump; +unsigned[1] shapeOfVerificationArea : dump; + +# concept sensitiveAreaDomain(unknown,"sensitive_area_domain.def",conceptsMasterDir,conceptsLocalDir); +alias mars.domain = marsDomain; + diff --git a/definitions/grib2/local.98.24.def b/definitions/grib2/local.98.24.def new file mode 100644 index 000000000..26e812766 --- /dev/null +++ b/definitions/grib2/local.98.24.def @@ -0,0 +1,12 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[2] channelNumber : dump ; +alias mars.channel = channelNumber; + diff --git a/definitions/grib2/local.98.25.def b/definitions/grib2/local.98.25.def new file mode 100644 index 000000000..5796015e0 --- /dev/null +++ b/definitions/grib2/local.98.25.def @@ -0,0 +1,19 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[1] componentIndex : dump; +alias mars.number=componentIndex; +unsigned[1] numberOfComponents : dump; +alias totalNumber=numberOfComponents; +unsigned[1] modelErrorType : dump; + +alias local.componentIndex=componentIndex; +alias local.numberOfComponents=numberOfComponents; +alias local.modelErrorType=modelErrorType; + diff --git a/definitions/grib2/local.98.26.def b/definitions/grib2/local.98.26.def new file mode 100644 index 000000000..4f251f0bf --- /dev/null +++ b/definitions/grib2/local.98.26.def @@ -0,0 +1,18 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[4] referenceDate : dump ; +unsigned[4] climateDateFrom : dump; +unsigned[4] climateDateTo : dump ; + +alias local.referenceDate= referenceDate ; +alias local.climateDateFrom= climateDateFrom ; +alias local.climateDateTo= climateDateTo ; + + diff --git a/definitions/grib2/local.98.28.def b/definitions/grib2/local.98.28.def new file mode 100644 index 000000000..18dd61f30 --- /dev/null +++ b/definitions/grib2/local.98.28.def @@ -0,0 +1,16 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# +# Definition 28 - COSMO local area EPS + +unsigned[4] baseDateEPS : dump; +unsigned[2] baseTimeEPS : dump; +unsigned[1] numberOfRepresentativeMember : dump; +unsigned[1] numberOfMembersInCluster : dump; +unsigned[1] totalInitialConditions : dump; + diff --git a/definitions/grib2/local.98.30.def b/definitions/grib2/local.98.30.def new file mode 100644 index 000000000..9f3b99233 --- /dev/null +++ b/definitions/grib2/local.98.30.def @@ -0,0 +1,28 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[1] oceanAtmosphereCoupling : dump; + +unsigned[4] legBaseDate : dump ; +unsigned[2] legBaseTime : dump ; +unsigned[1] legNumber : dump ; +unsigned[4] referenceDate : dump ; +unsigned[4] climateDateFrom : dump ; +unsigned[4] climateDateTo : dump; + +alias local.oceanAtmosphereCoupling=oceanAtmosphereCoupling; +alias local.legBaseDate=legBaseDate ; +alias local.legBaseTime=legBaseTime ; +alias local.legNumber=legNumber ; +alias local.referenceDate=referenceDate ; +alias local.climateDateFrom=climateDateFrom ; +alias local.climateDateTo=climateDateTo; + +alias mars._leg_number = legNumber; + diff --git a/definitions/grib2/local.98.300.def b/definitions/grib2/local.98.300.def new file mode 100644 index 000000000..b781805ab --- /dev/null +++ b/definitions/grib2/local.98.300.def @@ -0,0 +1,22 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Definition 300 - Multi-dimensional parameters + +codetable[1] dimensionType "grib2/dimensionType.table"=0; + +# The n-th dimension (out of total number of dimensions) +unsigned[2] dimensionNumber; +alias dimension=dimensionNumber; + +# Total number of dimensions +unsigned[2] totalNumberOfdimensions; + +alias extraDimensionPresent=one; + diff --git a/definitions/grib2/local.98.36.def b/definitions/grib2/local.98.36.def new file mode 100644 index 000000000..11880b8f6 --- /dev/null +++ b/definitions/grib2/local.98.36.def @@ -0,0 +1,17 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Definition 36 - MARS labelling for long window 4Dvar system (inspired by local def 1) + +# Hours +unsigned[2] offsetToEndOf4DvarWindow : dump; +unsigned[2] lengthOf4DvarWindow : dump; + +alias anoffset=offsetToEndOf4DvarWindow; + diff --git a/definitions/grib2/local.98.38.def b/definitions/grib2/local.98.38.def new file mode 100644 index 000000000..d143b9d4c --- /dev/null +++ b/definitions/grib2/local.98.38.def @@ -0,0 +1,28 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Definition 38 - 4D variational increments for long window 4Dvar system (inspired by local def 20) + +unsigned[1] iterationNumber : dump; +alias number=iterationNumber; + +unsigned[1] totalNumberOfIterations : dump; +alias totalNumber=totalNumberOfIterations; + +alias iteration = iterationNumber; + +alias local.iterationNumber =iterationNumber; +alias local.totalNumberOfIterations=totalNumberOfIterations; + +# Hours +unsigned[2] offsetToEndOf4DvarWindow : dump; +unsigned[2] lengthOf4DvarWindow : dump; + +alias anoffset=offsetToEndOf4DvarWindow; + diff --git a/definitions/grib2/local.98.39.def b/definitions/grib2/local.98.39.def new file mode 100644 index 000000000..977b5cf1a --- /dev/null +++ b/definitions/grib2/local.98.39.def @@ -0,0 +1,26 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Definition 39 - 4DVar model errors for long window 4Dvar system (inspired by local def 25) + +unsigned[1] componentIndex : dump; +alias mars.number=componentIndex; +unsigned[1] numberOfComponents : dump; +alias totalNumber=numberOfComponents; +unsigned[1] modelErrorType : dump; + +alias local.componentIndex=componentIndex; +alias local.numberOfComponents=numberOfComponents; +alias local.modelErrorType=modelErrorType; + +# Hours +unsigned[2] offsetToEndOf4DvarWindow : dump; +unsigned[2] lengthOf4DvarWindow : dump; +alias anoffset=offsetToEndOf4DvarWindow; + diff --git a/definitions/grib2/local.98.500.def b/definitions/grib2/local.98.500.def new file mode 100755 index 000000000..f7ee26f61 --- /dev/null +++ b/definitions/grib2/local.98.500.def @@ -0,0 +1,53 @@ +# mars labeling + +# Year +# (4 digits) +#unsigned[2] year ; + +# Month +#unsigned[1] month ; + +# Day +#unsigned[1] day ; + +# Hour +#unsigned[1] hour ; + +# Minute +#unsigned[1] minute ; + +# Second +#unsigned[1] second ; + +#meta dataDate g2date(year,month,day) : dump; +#alias mars.date=dataDate; + +#meta dataTime time(hour,minute,second) : dump; +#alias mars.time = dataTime; + +codetable[2] observationType "grib2/tables/local/ecmf/obstat.2.0.table"; + +codetable[2] codeType "grib2/tables/local/ecmf/obstat.3.0.table"; + +codetable[2] varno "grib2/tables/local/ecmf/obstat.varno"; + +codetable[2] reportType "grib2/tables/local/ecmf/obstat.reporttype"; + +unsigned[1] phase; + +codetable[2] platform "grib2/tables/local/ecmf/obstat.4.0.table"; + +codetable[2] instrument "grib2/tables/local/ecmf/obstat.5.0.table"; + +codetable[2] dataStream "grib2/tables/local/ecmf/obstat.6.0.table"; + +#include "template.4.horizontal.def"; + +codetable[2] observationDiagnostic "grib2/tables/local/ecmf/obstat.9.0.table"; + +codetable[2] dataSelection "grib2/tables/local/ecmf/obstat.10.0.table"; + +unsigned[2] scanPosition; + +codetable[1] mask "grib2/tables/local/ecmf/obstat.8.0.table"; + diff --git a/definitions/grib2/local.98.7.def b/definitions/grib2/local.98.7.def new file mode 100644 index 000000000..e05059a83 --- /dev/null +++ b/definitions/grib2/local.98.7.def @@ -0,0 +1,24 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[1] iterationNumber : dump; +alias number=iterationNumber; +unsigned[1] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; +unsigned[1] sensitiveAreaDomain : dump; +unsigned[1] diagnosticNumber : dump; + +alias local.iterationNumber=iterationNumber; +alias local.numberOfForecastsInEnsemble=numberOfForecastsInEnsemble; +alias local.sensitiveAreaDomain=sensitiveAreaDomain; +alias local.diagnosticNumber=diagnosticNumber; + +alias iteration = iterationNumber; +alias diagnostic = diagnosticNumber; + diff --git a/definitions/grib2/local.98.9.def b/definitions/grib2/local.98.9.def new file mode 100644 index 000000000..d6e49dc9e --- /dev/null +++ b/definitions/grib2/local.98.9.def @@ -0,0 +1,47 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +unsigned[2] forecastOrSingularVectorNumber : dump; + +constant perturbedType = 60; + +if(type != perturbedType) +{ + unsigned[2] numberOfIterations : dump; + unsigned[2] numberOfSingularVectorsComputed : dump; + unsigned[1] normAtInitialTime : dump ; + unsigned[1] normAtFinalTime : dump ; + unsigned[4] multiplicationFactorForLatLong : dump; + signed[4] northWestLatitudeOfLPOArea : dump ; + signed[4] northWestLongitudeOfLPOArea : dump; + signed[4] southEastLatitudeOfLPOArea : dump; + signed[4] southEastLongitudeOfLPOArea : dump; + unsigned[4] accuracyMultipliedByFactor : dump; + unsigned[2] numberOfSingularVectorsEvolved : dump; + # Ritz numbers: + signed[4] NINT_LOG10_RITZ : dump ; + signed[4] NINT_RITZ_EXP : dump ; + + alias local.numberOfIterations= numberOfIterations; + alias local.numberOfSingularVectorsComputed= numberOfSingularVectorsComputed ; + alias local.normAtInitialTime= normAtInitialTime ; + alias local.normAtFinalTime= normAtFinalTime ; + alias local.multiplicationFactorForLatLong= multiplicationFactorForLatLong ; + alias local.northWestLatitudeOfLPOArea= northWestLatitudeOfLPOArea ; + alias local.northWestLongitudeOfLPOArea= northWestLongitudeOfLPOArea ; + alias local.southEastLatitudeOfLPOArea= southEastLatitudeOfLPOArea ; + alias local.southEastLongitudeOfLPOArea= southEastLongitudeOfLPOArea ; + alias local.accuracyMultipliedByFactor= accuracyMultipliedByFactor ; + alias local.numberOfSingularVectorsEvolved= numberOfSingularVectorsEvolved ; +# Ritz numbers: + alias local.NINT_LOG10_RITZ= NINT_LOG10_RITZ ; + alias local.NINT_RITZ_EXP= NINT_RITZ_EXP ; +} + diff --git a/definitions/grib2/local.98.def b/definitions/grib2/local.98.def new file mode 100644 index 000000000..a082fe106 --- /dev/null +++ b/definitions/grib2/local.98.def @@ -0,0 +1,34 @@ +#local section ECMWF + +template mars_labeling "grib2/mars_labeling.def"; +transient productDefinitionTemplateNumberInternal=-1; + +meta localDefinitionNumber local_definition(grib2LocalSectionNumber, + productDefinitionTemplateNumber, + productDefinitionTemplateNumberInternal, + type, + stream, + class, + eps, + stepType, + derivedForecast); + +meta eps g2_eps(productDefinitionTemplateNumber, + type, + stream, + stepType, + derivedForecast); + +template localSection "grib2/local.98.[grib2LocalSectionNumber:l].def"; +position offsetAfterLocalSection; +transient addExtraLocalSection=0; +transient deleteExtraLocalSection=0; +#transient extraLocalSectionPresent=section2Length - offsetAfterLocalSection + offsetSection2 ; +meta extraLocalSectionPresent evaluate (section2Length - offsetAfterLocalSection + offsetSection2 > 0 ); +if ( ( extraLocalSectionPresent || addExtraLocalSection ) && ! deleteExtraLocalSection) { + # extra local section present + codetable[2] extraLocalSectionNumber 'grib2/grib2LocalSectionNumber.[centreForLocal:l].table' = 300 : dump; + template localSection "grib2/local.98.[extraLocalSectionNumber:l].def"; +} + + diff --git a/definitions/grib2/local.tigge.1.def b/definitions/grib2/local.tigge.1.def new file mode 100644 index 000000000..65b23701c --- /dev/null +++ b/definitions/grib2/local.tigge.1.def @@ -0,0 +1,5 @@ +# tigge LAM labeling + +codetable[2] suiteName "grib2/tigge_suiteName.table" : dump; +alias tiggeSuiteID = suiteName; + diff --git a/definitions/grib2/local/1098/2.1.table b/definitions/grib2/local/1098/2.1.table new file mode 100644 index 000000000..d8d1c0d0f --- /dev/null +++ b/definitions/grib2/local/1098/2.1.table @@ -0,0 +1 @@ +0 model Model info diff --git a/definitions/grib2/local/1098/centres.table b/definitions/grib2/local/1098/centres.table new file mode 100644 index 000000000..daa60f294 --- /dev/null +++ b/definitions/grib2/local/1098/centres.table @@ -0,0 +1,12 @@ +0 eggr UK Met Office - UK +1 aemet AEMET- Spain HIRLAM +2 arpasim ARPA-SIM - Italy COSMO +3 metno Met.NO +4 zamg ZAMG / Austria +5 dwd DWD - Germany SRNWP +6 dnmi DNMI/Univ Oslo –Norway HIRLAM ALADIN +7 meteofrance Meteo-France / France +8 dmi DMI +9 hungary Hungary +10 czech Czech Republic +11 croatia Croatia diff --git a/definitions/grib2/local/1098/models.table b/definitions/grib2/local/1098/models.table new file mode 100644 index 000000000..70e03f70d --- /dev/null +++ b/definitions/grib2/local/1098/models.table @@ -0,0 +1,13 @@ +0 0 MOGREPS +1 1 SREPS +2 2 SRNWP PEPS +3 3 COSMO-LEPS +4 4 NORLAMEPS +5 5 ALADIN LAEF +6 6 COSMO DE EPS +7 7 COSMO-SREPS +8 8 GLAMEPS +9 9 PEARCE +10 10 DMI - HIRLAM +11 11 OMSZ ALADIN EPS + diff --git a/definitions/grib2/local/1098/template.2.0.def b/definitions/grib2/local/1098/template.2.0.def new file mode 100644 index 000000000..68e64f33b --- /dev/null +++ b/definitions/grib2/local/1098/template.2.0.def @@ -0,0 +1,19 @@ +codetable[2] tiggeModel 'grib2/local/[localSubSectionCentre:l]/models.table'; +codetable[2] tiggeCentre 'grib2/local/[localSubSectionCentre:l]/centres.table'; +concept tiggeLAMName { + "MOGREPS-MO- EUA" = {tiggeCentre=0;tiggeModel=0;} + "AEMet-SREPS-MM-EUAT"= {tiggeCentre=1;tiggeModel=1;} + "SRNWP-PEPS"= {tiggeCentre=1;tiggeModel=2;} + "COSMOLEPS-ARPASIMC-EU"= {tiggeCentre=2;tiggeModel=3;} + "NORLAMEPS" = {tiggeCentre=3;tiggeModel=4;} + "ALADIN-LAEF" = {tiggeCentre=4;tiggeModel=5;} + "COSMO-DE EPS" = {tiggeCentre=5;tiggeModel=6;} + "COSMO-SREPS-BO-EU" = {tiggeCentre=2;tiggeModel=7;} + "GLAMEPS" = {tiggeCentre=6;tiggeModel=8;} + "PEARCE" = {tiggeCentre=7;tiggeModel=9;} + "DMI- HIRLAM" = {tiggeCentre=8;tiggeModel=10;} + "OMSZ- ALADIN-EPS" = {tiggeCentre=9;tiggeModel=11;} + "OMSZ- ALADIN-EPS" = {tiggeCentre=10;tiggeModel=11;} + "OMSZ- ALADIN-EPS" = {tiggeCentre=11;tiggeModel=11;} +} + diff --git a/definitions/grib2/local/1098/template.2.0.def~ b/definitions/grib2/local/1098/template.2.0.def~ new file mode 100644 index 000000000..b8781760a --- /dev/null +++ b/definitions/grib2/local/1098/template.2.0.def~ @@ -0,0 +1,19 @@ +codetable[2] tiggeModel 'grib2/local/[localSubSectionCentre:l]/models.table'; +codetable[2] tiggeCentre 'grib2/local/[localSubSectionCentre:l]/centres.table'; +concept tiggeLAMName { + "MOGREPS-MO- EUA" = {tiggeCentre=0;tiggeModel=0;} + "AEMet-SREPS-MM-EUAT"= {tiggeCentre=1;tiggeModel=1;} + "SRNWP-PEPS"= {tiggeCentre=1;tiggeModel=2;} + "COSMOLEPS-ARPASIMC-EU"= {tiggeCentre=2;tiggeModel=3;} + "NORLAMEPS" = {tiggeCentre=3;tiggeModel=4;} + "ALADIN-LAEF" = {tiggeCentre=4;tiggeModel=5;} + "COSMO-DE EPS" = {tiggeCentre=5;tiggeModel=6;} + "COSMO-SREPS-BO-EU" = {tiggeCentre=6;tiggeModel=7;} + "GLAMEPS" = {tiggeCentre=7;tiggeModel=8;} + "PEARCE" = {tiggeCentre=8;tiggeModel=9;} + "DMI- HIRLAM" = {tiggeCentre=9;tiggeModel=10;} + "OMSZ- ALADIN-EPS" = {tiggeCentre=10;tiggeModel=11;} + "OMSZ- ALADIN-EPS" = {tiggeCentre=11;tiggeModel=11;} + "OMSZ- ALADIN-EPS" = {tiggeCentre=12;tiggeModel=11;} +} + diff --git a/definitions/grib2/local/2.0.table b/definitions/grib2/local/2.0.table new file mode 100644 index 000000000..fcc38a319 --- /dev/null +++ b/definitions/grib2/local/2.0.table @@ -0,0 +1,91 @@ +# Code table 2.0: Identification of centers for local section 2 +0 0 Absent +1 ammc Melbourne (WMC) +2 2 Melbourne (WMC) +4 4 Moscow (WMC) +5 5 Moscow (WMC) +7 kwbc US National Weather Service - NCEP (WMC) +8 8 US National Weather Service - NWSTG (WMC) +9 9 US National Weather Service - Other (WMC) +10 10 Cairo (RSMC/RAFC) +12 12 Dakar (RSMC/RAFC) +14 14 Nairobi (RSMC/RAFC) +16 16 Atananarivo (RSMC) +18 18 Tunis-Casablanca (RSMC) +20 20 Las Palmas (RAFC) +21 21 Algiers (RSMC) +22 22 Lagos (RSMC) +26 26 Khabarovsk (RSMC) +28 28 New Delhi (RSMC/RAFC) +30 30 Novosibirsk (RSMC) +32 32 Tashkent (RSMC) +33 33 Jeddah (RSMC) +34 rjtd Japanese Meteorological Agency - Tokyo (RSMC) +36 36 Bankok +37 37 Ulan Bator +38 babj Beijing (RSMC) +40 rksl Seoul +41 41 Buenos Aires (RSMC/RAFC) +43 43 Brasilia (RSMC/RAFC) +45 45 Santiago +46 sbsj Brasilian Space Agency - INPE +51 51 Miami (RSMC/RAFC) +52 52 National Hurricane Center, Miami +53 53 Canadian Meteorological Service - Montreal (RSMC) +54 cwao Canadian Meteorological Service - Montreal (RSMC) +55 55 San Francisco +57 57 U.S. Air Force - Global Weather Center +58 fnmo US Navy - Fleet Numerical Oceanography Center +59 59 NOAA Forecast Systems Lab, Boulder CO +60 60 National Center for Atmospheric Research (NCAR), Boulder, CO +64 64 Honolulu +65 65 Darwin (RSMC) +67 67 Melbourne (RSMC) +69 69 Wellington (RSMC/RAFC) +74 egrr U.K. Met Office - Exeter +76 76 Moscow (RSMC/RAFC) +78 edzw Offenbach (RSMC) +80 cnmc Rome (RSMC) +82 eswi Norrkoping +84 lfpw French Weather Service - Toulouse +85 lfpw French Weather Service - Toulouse +86 86 Helsinki +87 87 Belgrade +88 88 Oslo +89 89 Prague +90 90 Episkopi +91 91 Ankara +92 92 Frankfurt/Main (RAFC) +93 93 London (WAFC) +94 94 Copenhagen +95 95 Rota +96 96 Athens +97 97 European Space Agency (ESA) +98 ecmf European Center for Medium-Range Weather Forecasts +99 99 DeBilt, Netherlands +#100 to 109 Reserved for centres in Region I which are not in the list above +110 110 Hong-Kong +#111 to 133 Reserved for centres in Region II which are not in the list above +#134 to 153 Reserved for centres in Region I which are not listed above +#154 to 159 Reserved for centres in Region III which are not in the list above +160 160 US NOAA/NESDIS +# 161 to 185 Reserved for centres in Region IV which are not in the list above +# 186 to 198 Reserved for centres in Region I which are not listed above +# 199 to 209 Reserved for centres in Region V which are not in the list above +210 210 Frascati (ESA/ESRIN) +211 211 Lanion +212 212 Lisboa +213 213 Reykjavik +214 lemm INM +215 215 Z�rich +216 216 Service ARGOS Toulouse +# 217 to 220 Reserved for centres in Region V which are not in the list above +# 221 to 253 Reserved for centres in Region VI which are not in the list above or below +235 ingv INGV +239 crfc CERFAX +246 ifmk IfM-Kiel +247 hadc Hadley Centre +250 cosmo COnsortium for Small scale MOdelling (COSMO) +254 eums EUMETSAT Operation Centre +1098 tigge TIGGE CENTRES + diff --git a/definitions/grib2/localConcepts/cnmc/name.def b/definitions/grib2/localConcepts/cnmc/name.def new file mode 100644 index 000000000..8e9a53c42 --- /dev/null +++ b/definitions/grib2/localConcepts/cnmc/name.def @@ -0,0 +1,3050 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'Pressure (S) (not reduced)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure +'Pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Pressure Reduced to MSL +'Pressure Reduced to MSL' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 101 ; + } +#Pressure Tendency (S) +'Pressure Tendency (S)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (S) +'Geopotential (S)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (full lev) +'Geopotential (full lev)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Geopotential +'Geopotential' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Geometric Height of the earths surface above sea level +'Geometric Height of the earths surface above sea level' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'Geometric Height of the layer limits above sea level(NN)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total Column Integrated Ozone +'Total Column Integrated Ozone' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature (G) +'Temperature (G)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#2m Temperature (AV) +'2m Temperature (AV)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Climat. temperature, 2m Temperature +'Climat. temperature, 2m Temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 9 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Temperature +'Temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Max 2m Temperature (i) +'Max 2m Temperature (i)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Min 2m Temperature (i) +'Min 2m Temperature (i)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Dew Point Temperature (AV) +'2m Dew Point Temperature (AV)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Radar spectra (1) +'Radar spectra (1)' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Wave spectra (1) +'Wave spectra (1)' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Wave spectra (2) +'Wave spectra (2)' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Wave spectra (3) +'Wave spectra (3)' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Wind Direction (DD_10M) +'Wind Direction (DD_10M)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Wind Direction (DD) +'Wind Direction (DD)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Wind speed (SP_10M) +'Wind speed (SP_10M)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Wind speed (SP) +'Wind speed (SP)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#U component of wind +'U component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#U component of wind +'U component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#V component of wind +'V component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#V component of wind +'V component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'Vertical Velocity (Pressure) ( omega=dp/dt )' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Vertical Velocity (Geometric) (w) +'Vertical Velocity (Geometric) (w)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 9 ; + } +#Specific Humidity (S) +'Specific Humidity (S)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Specific Humidity (2m) +'Specific Humidity (2m)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Specific Humidity +'Specific Humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Relative Humidity +'2m Relative Humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Relative Humidity +'Relative Humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Total column integrated water vapour +'Total column integrated water vapour' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + } +#Evaporation (s) +'Evaporation (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total Column-Integrated Cloud Ice +'Total Column-Integrated Cloud Ice' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Precipitation rate (S) +'Total Precipitation rate (S)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Large-Scale Precipitation rate +'Large-Scale Precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective Precipitation rate +'Convective Precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow depth water equivalent +'Snow depth water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow Depth +'Snow Depth' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Cloud Cover +'Total Cloud Cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Cloud Cover +'Convective Cloud Cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Cover (800 hPa - Soil) +'Cloud Cover (800 hPa - Soil)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 800 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 100 ; + } +#Cloud Cover (400 - 800 hPa) +'Cloud Cover (400 - 800 hPa)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 400 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 800 ; + } +#Cloud Cover (0 - 400 hPa) +'Cloud Cover (0 - 400 hPa)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 400 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Total Column-Integrated Cloud Water +'Total Column-Integrated Cloud Water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'Convective Snowfall rate water equivalent (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Large-Scale snowfall rate water equivalent (s) +'Large-Scale snowfall rate water equivalent (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Land Cover (1=land, 0=sea) +'Land Cover (1=land, 0=sea)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface Roughness length Surface Roughness +'Surface Roughness length Surface Roughness' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'Albedo (in short-wave)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'Albedo (in short-wave)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'Soil Temperature ( 36 cm depth, vv=0h)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 36 ; + } +#Soil Temperature (41 cm depth) +'Soil Temperature (41 cm depth)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 41 ; + } +#Soil Temperature +'Soil Temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 9 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Soil Temperature +'Soil Temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture +'Column-integrated Soil Moisture' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 190 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'Column-integrated Soil Moisture (1) 0 -10 cm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 10 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'Column-integrated Soil Moisture (2) 10-100cm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Plant cover +'Plant cover' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Water Runoff (10-100) +'Water Runoff (10-100)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Water Runoff (10-190) +'Water Runoff (10-190)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 190 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Water Runoff (s) +'Water Runoff (s)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 10 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'Sea Ice Cover ( 0= free, 1=cover)' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Thickness +'sea Ice Thickness' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Significant height of combined wind waves and swell +'Significant height of combined wind waves and swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Direction of wind waves +'Direction of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Significant height of wind waves +'Significant height of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'Mean period of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Direction of swell waves +'Direction of swell waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Significant height of swell waves +'Significant height of swell waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Mean period of swell waves +'Mean period of swell waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Net short wave radiation flux (m) (at the surface) +'Net short wave radiation flux (m) (at the surface)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'Net short wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + } +#Net long wave radiation flux (m) (at the surface) +'Net long wave radiation flux (m) (at the surface)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'Net long wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + } +#Net short wave radiation flux (m) (on the model top) +'Net short wave radiation flux (m) (on the model top)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'Net short wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'Net long wave radiation flux (m) (on the model top)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'Net long wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + } +#Latent Heat Net Flux (m) +'Latent Heat Net Flux (m)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Sensible Heat Net Flux (m) +'Sensible Heat Net Flux (m)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Momentum Flux, U-Component (m) +'Momentum Flux, U-Component (m)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Momentum Flux, V-Component (m) +'Momentum Flux, V-Component (m)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation (m) (at the surface) +'Photosynthetically active radiation (m) (at the surface)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation +'Photosynthetically active radiation' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + } +#Solar radiation heating rate +'Solar radiation heating rate' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Thermal radiation heating rate +'Thermal radiation heating rate' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Latent heat flux from bare soil +'Latent heat flux from bare soil' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Latent heat flux from plants +'Latent heat flux from plants' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Sunshine +'Sunshine' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Stomatal Resistance +'Stomatal Resistance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Cloud cover +'Cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Non-Convective Cloud Cover, grid scale +'Non-Convective Cloud Cover, grid scale' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Cloud Mixing Ratio +'Cloud Mixing Ratio' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Cloud Ice Mixing Ratio +'Cloud Ice Mixing Ratio' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 82 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Rain mixing ratio +'Rain mixing ratio' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 24 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Snow mixing ratio +'Snow mixing ratio' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Total column integrated rain +'Total column integrated rain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + } +#Total column integrated snow +'Total column integrated snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + } +#Grauple +'Grauple' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated grauple +'Total column integrated grauple' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 74 ; + } +#Total Column integrated water (all components incl. precipitation) +'Total Column integrated water (all components incl. precipitation)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + } +#vertical integral of divergence of total water content (s) +'vertical integral of divergence of total water content (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#subgrid scale cloud water +'subgrid scale cloud water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#subgridscale cloud ice +'subgridscale cloud ice' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#cloud base above msl, shallow convection +'cloud base above msl, shallow convection' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 2 ; + } +#cloud top above msl, shallow convection +'cloud top above msl, shallow convection' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 3 ; + } +#specific cloud water content, convective cloud +'specific cloud water content, convective cloud' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Height of Convective Cloud Base (i) +'Height of Convective Cloud Base (i)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 2 ; + } +#Height of Convective Cloud Top (i) +'Height of Convective Cloud Top (i)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'base index (vertical level) of main convective cloud (i)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'top index (vertical level) of main convective cloud (i)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to convection +'Temperature tendency due to convection' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific humitiy tendency due to convection +'Specific humitiy tendency due to convection' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#zonal wind tendency due to convection +'zonal wind tendency due to convection' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to convection +'meridional wind tendency due to convection' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#height of top of dry convection +'height of top of dry convection' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'height of 0 degree celsius level code 0,3,6 ?' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 4 ; + } +#Height of snow fall limit +'Height of snow fall limit' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 204 ; + } +#Tendency of specific cloud liquid water content due to conversion +'Tendency of specific cloud liquid water content due to conversion' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud ice content due to convection +'tendency of specific cloud ice content due to convection' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'Specific content of precipitation particles (needed for water loadin)g' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Large scale rain rate +'Large scale rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale snowfall rate water equivalent +'Large scale snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate (s) +'Large scale rain rate (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective rain rate +'Convective rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective snowfall rate water equivalent +'Convective snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate (s) +'Convective rain rate (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#rain amount, grid-scale plus convective +'rain amount, grid-scale plus convective' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 65 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#snow amount, grid-scale plus convective +'snow amount, grid-scale plus convective' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 66 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to grid scale precipation +'Temperature tendency due to grid scale precipation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific humitiy tendency due to grid scale precipitation +'Specific humitiy tendency due to grid scale precipitation' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'tendency of specific cloud liquid water content due to grid scale precipitation' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'Fresh snow factor (weighting function for albedo indicating freshness of snow)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 203 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'tendency of specific cloud ice content due to grid scale precipitation' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Graupel (snow pellets) precipitation rate +'Graupel (snow pellets) precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + } +#Graupel (snow pellets) precipitation rate +'Graupel (snow pellets) precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow density +'Snow density' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure perturbation +'Pressure perturbation' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#supercell detection index 1 (rot. up+down drafts) +'supercell detection index 1 (rot. up+down drafts)' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'supercell detection index 2 (only rot. up drafts)' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy, most unstable +'Convective Available Potential Energy, most unstable' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Inhibition, most unstable +'Convective Inhibition, most unstable' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Available Potential Energy, mean layer +'Convective Available Potential Energy, mean layer' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective Inhibition, mean layer +'Convective Inhibition, mean layer' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective turbulent kinetic enery +'Convective turbulent kinetic enery' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 24 ; + } +#Tendency of turbulent kinetic energy +'Tendency of turbulent kinetic energy' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Kinetic Energy +'Kinetic Energy' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Turbulent Kinetic Energy +'Turbulent Kinetic Energy' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 11 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusioncoefficient for momentum +'Turbulent diffusioncoefficient for momentum' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 31 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'Turbulent diffusion coefficient for heat (and moisture)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Turbulent transfer coefficient for impulse +'Turbulent transfer coefficient for impulse' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'Turbulent transfer coefficient for heat (and Moisture)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + } +#mixed layer depth +'mixed layer depth' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#maximum Wind 10m +'maximum Wind 10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Air concentration of Ruthenium 103 +'Air concentration of Ruthenium 103' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + } +#Soil Temperature (multilayers) +'Soil Temperature (multilayers)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Column-integrated Soil Moisture (multilayers) +'Column-integrated Soil Moisture (multilayers)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#soil ice content (multilayers) +'soil ice content (multilayers)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Plant Canopy Surface Water +'Plant Canopy Surface Water' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow temperature (top of snow) +'Snow temperature (top of snow)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimal Stomatal Resistance +'Minimal Stomatal Resistance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Temperature +'sea Ice Temperature' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'Base reflectivity' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'Base reflectivity' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Base reflectivity (cmax) +'Base reflectivity (cmax)' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 10 ; + } +#unknown +'unknown' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Effective transmissivity of solar radiation +'Effective transmissivity of solar radiation' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#sum of contributions to evaporation +'sum of contributions to evaporation' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#total transpiration from all soil layers +'total transpiration from all soil layers' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#total forcing at soil surface +'total forcing at soil surface' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#residuum of soil moisture +'residuum of soil moisture' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Massflux at convective cloud base +'Massflux at convective cloud base' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 205 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy +'Convective Available Potential Energy' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#moisture convergence for Kuo-type closure +'moisture convergence for Kuo-type closure' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 206 ; + typeOfFirstFixedSurface = 1 ; + } +#total wave direction +'total wave direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#wind sea mean period +'wind sea mean period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 101 ; + } +#wind sea peak period +'wind sea peak period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#swell mean period +'swell mean period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 101 ; + } +#swell peak period +'swell peak period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#total wave peak period +'total wave peak period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#total wave mean period +'total wave mean period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#total Tm1 period +'total Tm1 period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#total Tm2 period +'total Tm2 period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#total directional spread +'total directional spread' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#analysis error(standard deviation), geopotential(gpm) +'analysis error(standard deviation), geopotential(gpm)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#analysis error(standard deviation), u-comp. of wind +'analysis error(standard deviation), u-comp. of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#analysis error(standard deviation), v-comp. of wind +'analysis error(standard deviation), v-comp. of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#zonal wind tendency due to subgrid scale oro. +'zonal wind tendency due to subgrid scale oro.' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to subgrid scale oro. +'meridional wind tendency due to subgrid scale oro.' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 195 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Standard deviation of sub-grid scale orography +'Standard deviation of sub-grid scale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 1 ; + } +#Anisotropy of sub-gridscale orography +'Anisotropy of sub-gridscale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + } +#Angle of sub-gridscale orography +'Angle of sub-gridscale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + } +#Slope of sub-gridscale orography +'Slope of sub-gridscale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 1 ; + } +#surface emissivity +'surface emissivity' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Type +'Soil Type' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Leaf area index +'Leaf area index' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + } +#root depth of vegetation +'root depth of vegetation' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfFirstFixedSurface = 1 ; + } +#height of ozone maximum (climatological) +'height of ozone maximum (climatological)' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#vertically integrated ozone content (climatological) +'vertically integrated ozone content (climatological)' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the vegetation phase +'Plant covering degree in the vegetation phase' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the quiescent phas +'Plant covering degree in the quiescent phas' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Max Leaf area index +'Max Leaf area index' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Min Leaf area index +'Min Leaf area index' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Orographie + Land-Meer-Verteilung +'Orographie + Land-Meer-Verteilung' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#variance of soil moisture content (0-10) +'variance of soil moisture content (0-10)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + } +#variance of soil moisture content (10-100) +'variance of soil moisture content (10-100)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#evergreen forest +'evergreen forest' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#deciduous forest +'deciduous forest' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfFirstFixedSurface = 1 ; + } +#normalized differential vegetation index +'normalized differential vegetation index' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#normalized differential vegetation index (NDVI) +'normalized differential vegetation index (NDVI)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Total sulfate aerosol +'Total sulfate aerosol' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + } +#Total sulfate aerosol (12M) +'Total sulfate aerosol (12M)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + } +#Total soil dust aerosol +'Total soil dust aerosol' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + } +#Total soil dust aerosol (12M) +'Total soil dust aerosol (12M)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Organic aerosol +'Organic aerosol' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + } +#Organic aerosol (12M) +'Organic aerosol (12M)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Black carbon aerosol +'Black carbon aerosol' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + } +#Black carbon aerosol (12M) +'Black carbon aerosol (12M)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Sea salt aerosol +'Sea salt aerosol' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + } +#Sea salt aerosol (12M) +'Sea salt aerosol (12M)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 0 ; + } +#tendency of specific humidity +'tendency of specific humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 207 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#water vapor flux +'water vapor flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 208 ; + } +#Coriolis parameter +'Coriolis parameter' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical latitude +'geographical latitude' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical longitude +'geographical longitude' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Friction velocity +'Friction velocity' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Delay of the GPS signal trough the (total) atm. +'Delay of the GPS signal trough the (total) atm.' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'Delay of the GPS signal trough wet atmos.' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'Delay of the GPS signal trough dry atmos.' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Ozone Mixing Ratio +'Ozone Mixing Ratio' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'Air concentration of Ruthenium 103 (Ru103- concentration)' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 192 ; + } +#Ru103-dry deposition +'Ru103-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 193 ; + } +#Ru103-wet deposition +'Ru103-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 194 ; + } +#Air concentration of Strontium 90 +'Air concentration of Strontium 90' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 195 ; + } +#Sr90-dry deposition +'Sr90-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 196 ; + } +#Sr90-wet deposition +'Sr90-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 197 ; + } +#I131-concentration +'I131-concentration' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 198 ; + } +#I131-dry deposition +'I131-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 199 ; + } +#I131-wet deposition +'I131-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 200 ; + } +#Cs137-concentration +'Cs137-concentration' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 201 ; + } +#Cs137-dry deposition +'Cs137-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 202 ; + } +#Cs137-wet deposition +'Cs137-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 203 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'Air concentration of Tellurium 132 (Te132-concentration)' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 204 ; + } +#Te132-dry deposition +'Te132-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 205 ; + } +#Te132-wet deposition +'Te132-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 206 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'Air concentration of Zirconium 95 (Zr95-concentration)' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 207 ; + } +#Zr95-dry deposition +'Zr95-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 208 ; + } +#Zr95-wet deposition +'Zr95-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 209 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'Air concentration of Krypton 85 (Kr85-concentration)' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 210 ; + } +#Kr85-dry deposition +'Kr85-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 211 ; + } +#Kr85-wet deposition +'Kr85-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 212 ; + } +#TRACER - concentration +'TRACER - concentration' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 213 ; + } +#TRACER - dry deposition +'TRACER - dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 214 ; + } +#TRACER - wet deposition +'TRACER - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 215 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'Air concentration of Xenon 133 (Xe133 - concentration)' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 216 ; + } +#Xe133 - dry deposition +'Xe133 - dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 217 ; + } +#Xe133 - wet deposition +'Xe133 - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 218 ; + } +#I131g - concentration +'I131g - concentration' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 219 ; + } +#Xe133 - wet deposition +'Xe133 - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 220 ; + } +#I131g - wet deposition +'I131g - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 221 ; + } +#I131o - concentration +'I131o - concentration' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 222 ; + } +#I131o - dry deposition +'I131o - dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 223 ; + } +#I131o - wet deposition +'I131o - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 224 ; + } +#Air concentration of Barium 40 +'Air concentration of Barium 40' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 225 ; + } +#Ba140 - dry deposition +'Ba140 - dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 226 ; + } +#Ba140 - wet deposition +'Ba140 - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 227 ; + } +#u-momentum flux due to SSO-effects +'u-momentum flux due to SSO-effects' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#u-momentum flux due to SSO-effects +'u-momentum flux due to SSO-effects' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'v-momentum flux due to SSO-effects' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'v-momentum flux due to SSO-effects' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Gravity wave dissipation (vertical integral) +'Gravity wave dissipation (vertical integral)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Gravity wave dissipation (vertical integral) +'Gravity wave dissipation (vertical integral)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'UV_Index_Maximum_W UV_Index clouded (W), daily maximum' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 51 ; + } +#wind shear +'wind shear' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + } +#storm relative helicity +'storm relative helicity' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#absolute vorticity advection +'absolute vorticity advection' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 1 ; + } +#weather interpretation (WMO) +'weather interpretation (WMO)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 1 ; + } +#Isentrope potentielle Vorticity +'Isentrope potentielle Vorticity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 107 ; + } +#Druck einer isentropen Flaeche +'Druck einer isentropen Flaeche' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 107 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#KO index +'KO index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Aequivalentpotentielle Temperatur +'Aequivalentpotentielle Temperatur' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Ceiling +'Ceiling' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'Icing Grade (1=LGT,2=MOD,3=SEV)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 7 ; + } +#modified cloud depth for media +'modified cloud depth for media' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + } +#modified cloud cover for media +'modified cloud cover for media' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'Monthly Mean of RMS of difference FG-AN of u-component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'Monthly Mean of RMS of difference IA-AN of u-component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'Monthly Mean of RMS of difference FG-AN of v-component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'Monthly Mean of RMS of difference IA-AN of v-component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'Monthly Mean of RMS of difference FG-AN of geopotential' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'Monthly Mean of RMS of difference IA-AN of geopotential' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'Monthly Mean of RMS of difference FG-AN of relative humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'Monthly Mean of RMS of difference IA-AN of relative humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'Monthly Mean of RMS of difference FG-AN of temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'Monthly Mean of RMS of difference IA-AN of temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'Monthly Mean of RMS of difference FG-AN of kinetic energy' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'Monthly Mean of RMS of difference IA-AN of kinetic energy' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 52 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 52 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteNumber = 52 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 52 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + } +#smoothed forecast, temperature +'smoothed forecast, temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, maximum temp. +'smoothed forecast, maximum temp.' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, minimum temp. +'smoothed forecast, minimum temp.' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, dew point temp. +'smoothed forecast, dew point temp.' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, u comp. of wind +'smoothed forecast, u comp. of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#smoothed forecast, v comp. of wind +'smoothed forecast, v comp. of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, total precipitation rate +'smoothed forecast, total precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 1 ; + } +#smoothed forecast, total cloud cover +'smoothed forecast, total cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover low +'smoothed forecast, cloud cover low' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaledValueOfFirstFixedSurface = 800 ; + } +#smoothed forecast, cloud cover medium +'smoothed forecast, cloud cover medium' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 800 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + } +#smoothed forecast, cloud cover high +'smoothed forecast, cloud cover high' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 400 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'smoothed forecast, large-scale snowfall rate w.e.' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#smoothed forecast, soil temperature +'smoothed forecast, soil temperature' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 106 ; + } +#smoothed forecast, wind speed (gust) +'smoothed forecast, wind speed (gust)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#calibrated forecast, total precipitation rate +'calibrated forecast, total precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'calibrated forecast, large-scale snowfall rate w.e.' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 1 ; + } +#calibrated forecast, wind speed (gust) +'calibrated forecast, wind speed (gust)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Obser. Sat. Meteosat sec. generation Albedo (scaled)' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + scaledValueOfCentralWaveNumber = 2000000 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Obser. Sat. Meteosat sec. generation Albedo (scaled)' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 625000 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Obser. Sat. Meteosat sec. generation Albedo (scaled)' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 1666666 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Obser. Sat. Meteosat sec. generation Albedo (scaled)' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 1250000 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 83333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; +} diff --git a/definitions/grib2/localConcepts/cnmc/paramId.def b/definitions/grib2/localConcepts/cnmc/paramId.def new file mode 100644 index 000000000..c7ad07b2f --- /dev/null +++ b/definitions/grib2/localConcepts/cnmc/paramId.def @@ -0,0 +1,3050 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'500000' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure +'500001' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Pressure Reduced to MSL +'500002' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 101 ; + } +#Pressure Tendency (S) +'500003' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (S) +'500004' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (full lev) +'500005' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Geopotential +'500006' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Geometric Height of the earths surface above sea level +'500007' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'500008' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total Column Integrated Ozone +'500009' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature (G) +'500010' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#2m Temperature (AV) +'500012' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 0 ; + } +#Climat. temperature, 2m Temperature +'500013' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Temperature +'500014' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Max 2m Temperature (i) +'500015' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 2 ; + } +#Min 2m Temperature (i) +'500016' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 3 ; + } +#2m Dew Point Temperature (AV) +'500018' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 0 ; + } +#Radar spectra (1) +'500019' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Wave spectra (1) +'500020' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Wave spectra (2) +'500021' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Wave spectra (3) +'500022' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Wind Direction (DD_10M) +'500023' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Wind Direction (DD) +'500024' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Wind speed (SP_10M) +'500025' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Wind speed (SP) +'500026' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#U component of wind +'500027' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#U component of wind +'500028' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#V component of wind +'500029' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#V component of wind +'500030' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'500031' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Vertical Velocity (Geometric) (w) +'500032' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 9 ; + } +#Specific Humidity (S) +'500033' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Specific Humidity (2m) +'500034' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Specific Humidity +'500035' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Relative Humidity +'500036' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Relative Humidity +'500037' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Total column integrated water vapour +'500038' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + } +#Evaporation (s) +'500039' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total Column-Integrated Cloud Ice +'500040' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Precipitation rate (S) +'500041' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Large-Scale Precipitation rate +'500042' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective Precipitation rate +'500043' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow depth water equivalent +'500044' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow Depth +'500045' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Cloud Cover +'500046' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Cloud Cover +'500047' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Cover (800 hPa - Soil) +'500048' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfSecondFixedSurface = 1 ; + scaledValueOfFirstFixedSurface = 800 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 100 ; + } +#Cloud Cover (400 - 800 hPa) +'500049' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 800 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Cloud Cover (0 - 400 hPa) +'500050' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 400 ; + } +#Total Column-Integrated Cloud Water +'500051' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'500052' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Large-Scale snowfall rate water equivalent (s) +'500053' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Land Cover (1=land, 0=sea) +'500054' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface Roughness length Surface Roughness +'500055' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'500056' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'500057' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'500058' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 36 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Soil Temperature (41 cm depth) +'500059' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 41 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature +'500060' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 9 ; + } +#Soil Temperature +'500061' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Column-integrated Soil Moisture +'500062' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 190 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'500063' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'500064' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Plant cover +'500065' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Water Runoff (10-100) +'500066' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfSecondFixedSurface = 100 ; + } +#Water Runoff (10-190) +'500067' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfSecondFixedSurface = 190 ; + } +#Water Runoff (s) +'500068' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfSecondFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'500069' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Thickness +'500070' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Significant height of combined wind waves and swell +'500071' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Direction of wind waves +'500072' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Significant height of wind waves +'500073' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'500074' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Direction of swell waves +'500075' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Significant height of swell waves +'500076' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Mean period of swell waves +'500077' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Net short wave radiation flux (m) (at the surface) +'500078' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'500079' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + } +#Net long wave radiation flux (m) (at the surface) +'500080' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'500081' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + } +#Net short wave radiation flux (m) (on the model top) +'500082' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'500083' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'500084' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'500085' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + } +#Latent Heat Net Flux (m) +'500086' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Sensible Heat Net Flux (m) +'500087' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Momentum Flux, U-Component (m) +'500088' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Momentum Flux, V-Component (m) +'500089' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation (m) (at the surface) +'500090' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation +'500091' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + } +#Solar radiation heating rate +'500092' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Thermal radiation heating rate +'500093' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Latent heat flux from bare soil +'500094' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Latent heat flux from plants +'500095' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + typeOfStatisticalProcessing = 0 ; + } +#Sunshine +'500096' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Stomatal Resistance +'500097' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Cloud cover +'500098' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Non-Convective Cloud Cover, grid scale +'500099' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 14 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Mixing Ratio +'500100' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Ice Mixing Ratio +'500101' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 82 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Rain mixing ratio +'500102' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 24 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Snow mixing ratio +'500103' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 25 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated rain +'500104' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + } +#Total column integrated snow +'500105' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + } +#Grauple +'500106' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Total column integrated grauple +'500107' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 74 ; + } +#Total Column integrated water (all components incl. precipitation) +'500108' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + } +#vertical integral of divergence of total water content (s) +'500109' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#subgrid scale cloud water +'500110' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#subgridscale cloud ice +'500111' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#cloud base above msl, shallow convection +'500115' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 2 ; + } +#cloud top above msl, shallow convection +'500116' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 3 ; + } +#specific cloud water content, convective cloud +'500117' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Height of Convective Cloud Base (i) +'500118' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 2 ; + } +#Height of Convective Cloud Top (i) +'500119' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'500120' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'500121' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to convection +'500122' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific humitiy tendency due to convection +'500123' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#zonal wind tendency due to convection +'500124' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to convection +'500125' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#height of top of dry convection +'500126' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'500127' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 4 ; + } +#Height of snow fall limit +'500128' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 204 ; + } +#Tendency of specific cloud liquid water content due to conversion +'500129' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud ice content due to convection +'500130' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'500131' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Large scale rain rate +'500132' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale snowfall rate water equivalent +'500133' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate (s) +'500134' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective rain rate +'500135' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective snowfall rate water equivalent +'500136' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate (s) +'500137' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#rain amount, grid-scale plus convective +'500138' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#snow amount, grid-scale plus convective +'500139' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Temperature tendency due to grid scale precipation +'500140' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific humitiy tendency due to grid scale precipitation +'500141' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'500142' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'500143' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 203 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'500144' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Graupel (snow pellets) precipitation rate +'500145' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + } +#Graupel (snow pellets) precipitation rate +'500146' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow density +'500147' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure perturbation +'500148' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#supercell detection index 1 (rot. up+down drafts) +'500149' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'500150' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy, most unstable +'500151' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Inhibition, most unstable +'500152' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Available Potential Energy, mean layer +'500153' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective Inhibition, mean layer +'500154' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective turbulent kinetic enery +'500155' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 24 ; + } +#Tendency of turbulent kinetic energy +'500156' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Kinetic Energy +'500157' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent Kinetic Energy +'500158' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 11 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusioncoefficient for momentum +'500159' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 31 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'500160' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent transfer coefficient for impulse +'500161' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'500162' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + } +#mixed layer depth +'500163' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#maximum Wind 10m +'500164' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#Air concentration of Ruthenium 103 +'500165' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + } +#Soil Temperature (multilayers) +'500166' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (multilayers) +'500167' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#soil ice content (multilayers) +'500168' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Plant Canopy Surface Water +'500169' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow temperature (top of snow) +'500170' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimal Stomatal Resistance +'500171' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Temperature +'500172' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'500173' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'500174' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Base reflectivity (cmax) +'500175' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 10 ; + } +#unknown +'500176' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Effective transmissivity of solar radiation +'500177' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#sum of contributions to evaporation +'500178' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#total transpiration from all soil layers +'500179' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#total forcing at soil surface +'500180' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#residuum of soil moisture +'500181' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Massflux at convective cloud base +'500182' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 205 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy +'500183' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#moisture convergence for Kuo-type closure +'500184' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 206 ; + typeOfFirstFixedSurface = 1 ; + } +#total wave direction +'500185' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#wind sea mean period +'500186' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 101 ; + } +#wind sea peak period +'500187' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#swell mean period +'500188' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 101 ; + } +#swell peak period +'500189' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#total wave peak period +'500190' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#total wave mean period +'500191' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#total Tm1 period +'500192' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#total Tm2 period +'500193' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#total directional spread +'500194' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#analysis error(standard deviation), geopotential(gpm) +'500195' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#analysis error(standard deviation), u-comp. of wind +'500196' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#analysis error(standard deviation), v-comp. of wind +'500197' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#zonal wind tendency due to subgrid scale oro. +'500198' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to subgrid scale oro. +'500199' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Standard deviation of sub-grid scale orography +'500200' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 1 ; + } +#Anisotropy of sub-gridscale orography +'500201' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + } +#Angle of sub-gridscale orography +'500202' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + } +#Slope of sub-gridscale orography +'500203' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 1 ; + } +#surface emissivity +'500204' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Type +'500205' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Leaf area index +'500206' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + } +#root depth of vegetation +'500207' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfFirstFixedSurface = 1 ; + } +#height of ozone maximum (climatological) +'500208' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#vertically integrated ozone content (climatological) +'500209' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the vegetation phase +'500210' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the quiescent phas +'500211' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Max Leaf area index +'500212' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Min Leaf area index +'500213' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Orographie + Land-Meer-Verteilung +'500214' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#variance of soil moisture content (0-10) +'500215' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 10 ; + typeOfStatisticalProcessing = 7 ; + } +#variance of soil moisture content (10-100) +'500216' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 100 ; + } +#evergreen forest +'500217' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#deciduous forest +'500218' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfFirstFixedSurface = 1 ; + } +#normalized differential vegetation index +'500219' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#normalized differential vegetation index (NDVI) +'500220' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'500221' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'500222' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Total sulfate aerosol +'500223' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + } +#Total sulfate aerosol (12M) +'500224' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + } +#Total soil dust aerosol +'500225' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + } +#Total soil dust aerosol (12M) +'500226' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Organic aerosol +'500227' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + } +#Organic aerosol (12M) +'500228' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Black carbon aerosol +'500229' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + } +#Black carbon aerosol (12M) +'500230' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Sea salt aerosol +'500231' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + } +#Sea salt aerosol (12M) +'500232' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 0 ; + } +#tendency of specific humidity +'500233' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 207 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#water vapor flux +'500234' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 208 ; + } +#Coriolis parameter +'500235' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical latitude +'500236' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical longitude +'500237' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Friction velocity +'500238' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Delay of the GPS signal trough the (total) atm. +'500239' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'500240' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'500241' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Ozone Mixing Ratio +'500242' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'500243' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 192 ; + } +#Ru103-dry deposition +'500244' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 193 ; + } +#Ru103-wet deposition +'500245' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 194 ; + } +#Air concentration of Strontium 90 +'500246' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 195 ; + } +#Sr90-dry deposition +'500247' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 196 ; + } +#Sr90-wet deposition +'500248' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 197 ; + } +#I131-concentration +'500249' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 198 ; + } +#I131-dry deposition +'500250' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 199 ; + } +#I131-wet deposition +'500251' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 200 ; + } +#Cs137-concentration +'500252' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 201 ; + } +#Cs137-dry deposition +'500253' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 202 ; + } +#Cs137-wet deposition +'500254' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 203 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'500255' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 204 ; + } +#Te132-dry deposition +'500256' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 205 ; + } +#Te132-wet deposition +'500257' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 206 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'500258' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 207 ; + } +#Zr95-dry deposition +'500259' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 208 ; + } +#Zr95-wet deposition +'500260' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 209 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'500261' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 210 ; + } +#Kr85-dry deposition +'500262' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 211 ; + } +#Kr85-wet deposition +'500263' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 212 ; + } +#TRACER - concentration +'500264' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 213 ; + } +#TRACER - dry deposition +'500265' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 214 ; + } +#TRACER - wet deposition +'500266' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 215 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'500267' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 216 ; + } +#Xe133 - dry deposition +'500268' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 217 ; + } +#Xe133 - wet deposition +'500269' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 218 ; + } +#I131g - concentration +'500270' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 219 ; + } +#Xe133 - wet deposition +'500271' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 220 ; + } +#I131g - wet deposition +'500272' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 221 ; + } +#I131o - concentration +'500273' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 222 ; + } +#I131o - dry deposition +'500274' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 223 ; + } +#I131o - wet deposition +'500275' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 224 ; + } +#Air concentration of Barium 40 +'500276' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 225 ; + } +#Ba140 - dry deposition +'500277' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 226 ; + } +#Ba140 - wet deposition +'500278' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 227 ; + } +#u-momentum flux due to SSO-effects +'500279' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#u-momentum flux due to SSO-effects +'500280' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'500281' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'500282' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Gravity wave dissipation (vertical integral) +'500283' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Gravity wave dissipation (vertical integral) +'500284' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'500285' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 51 ; + } +#wind shear +'500286' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + } +#storm relative helicity +'500287' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#absolute vorticity advection +'500288' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'500291' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 1 ; + } +#weather interpretation (WMO) +'500292' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 1 ; + } +#Isentrope potentielle Vorticity +'500298' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 107 ; + } +#Druck einer isentropen Flaeche +'500301' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 107 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#KO index +'500302' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Aequivalentpotentielle Temperatur +'500303' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Ceiling +'500304' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'500305' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 7 ; + } +#modified cloud depth for media +'500306' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + } +#modified cloud cover for media +'500307' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'500308' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'500309' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'500310' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'500311' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'500312' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'500313' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'500314' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'500315' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'500316' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'500317' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'500318' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'500319' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'500320' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'500321' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'500322' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'500323' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Synth. Sat. brightness temperature cloudy +'500324' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 52 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'500325' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 52 ; + } +#Synth. Sat. radiance cloudy +'500326' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + satelliteNumber = 52 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'500327' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 52 ; + } +#Synth. Sat. brightness temperature cloudy +'500328' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'500329' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'500330' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'500331' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'500332' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'500333' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'500334' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'500335' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance clear sky +'500336' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'500337' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance clear sky +'500338' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'500339' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'500340' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. brightness temperature cloudy +'500341' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. brightness temperature cloudy +'500342' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature cloudy +'500343' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'500344' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'500345' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Synth. Sat. brightness temperature cloudy +'500346' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature cloudy +'500347' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#Synth. Sat. brightness temperature clear sky +'500348' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + } +#Synth. Sat. brightness temperature clear sky +'500349' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. brightness temperature clear sky +'500350' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'500351' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'500352' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Synth. Sat. brightness temperature clear sky +'500353' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Synth. Sat. brightness temperature clear sky +'500354' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'500355' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#Synth. Sat. radiance cloudy +'500356' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. radiance cloudy +'500357' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance cloudy +'500358' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Synth. Sat. radiance cloudy +'500359' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'500360' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'500361' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Synth. Sat. radiance cloudy +'500362' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + } +#Synth. Sat. radiance cloudy +'500363' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#Synth. Sat. radiance clear sky +'500364' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. radiance clear sky +'500365' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. radiance clear sky +'500366' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'500367' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'500368' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + } +#Synth. Sat. radiance clear sky +'500369' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Synth. Sat. radiance clear sky +'500370' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + } +#Synth. Sat. radiance clear sky +'500371' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#smoothed forecast, temperature +'500372' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, maximum temp. +'500373' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, minimum temp. +'500374' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, dew point temp. +'500375' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#smoothed forecast, u comp. of wind +'500376' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, v comp. of wind +'500377' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, total precipitation rate +'500378' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, total cloud cover +'500379' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover low +'500380' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 800 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover medium +'500381' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 800 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover high +'500382' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 400 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'500383' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#smoothed forecast, soil temperature +'500384' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, wind speed (gust) +'500385' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#calibrated forecast, total precipitation rate +'500386' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'500387' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + } +#calibrated forecast, wind speed (gust) +'500388' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 198 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'500389' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 2000000 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'500390' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 625000 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'500391' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 1666666 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'500392' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 1250000 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500393' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500394' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 83333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500395' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500396' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500397' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500398' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500399' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500400' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; +} diff --git a/definitions/grib2/localConcepts/cnmc/shortName.def b/definitions/grib2/localConcepts/cnmc/shortName.def new file mode 100644 index 000000000..e73ea7ccc --- /dev/null +++ b/definitions/grib2/localConcepts/cnmc/shortName.def @@ -0,0 +1,3050 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'ps' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure +'p' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Pressure Reduced to MSL +'pmsl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 101 ; + } +#Pressure Tendency (S) +'dpsdt' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (S) +'fis' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (full lev) +'fif' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Geopotential +'fi' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Geometric Height of the earths surface above sea level +'hsurf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'hhl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total Column Integrated Ozone +'to3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature (G) +'t_g' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#2m Temperature (AV) +'t_2m_av' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Climat. temperature, 2m Temperature +'t_2m_cl' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Temperature +'t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Max 2m Temperature (i) +'tmax_2m' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 2 ; + } +#Min 2m Temperature (i) +'tmin_2m' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 3 ; + } +#2m Dew Point Temperature (AV) +'td_2m_av' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Radar spectra (1) +'dbz_max' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Wave spectra (1) +'wvsp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Wave spectra (2) +'wvsp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Wave spectra (3) +'wvsp3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Wind Direction (DD_10M) +'dd_10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Wind Direction (DD) +'dd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Wind speed (SP_10M) +'sp_10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Wind speed (SP) +'sp' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#U component of wind +'u_10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#U component of wind +'u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#V component of wind +'v_10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#V component of wind +'v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'omega' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Vertical Velocity (Geometric) (w) +'w' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 9 ; + } +#Specific Humidity (S) +'qv_s' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Specific Humidity (2m) +'qv_2m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific Humidity +'qv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Relative Humidity +'relhum_2m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Relative Humidity +'relhum' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Total column integrated water vapour +'tqv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + } +#Evaporation (s) +'aevap_s' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Column-Integrated Cloud Ice +'tqi' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Precipitation rate (S) +'tot_prec' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Large-Scale Precipitation rate +'prec_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective Precipitation rate +'prec_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow depth water equivalent +'w_snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow Depth +'h_snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Cloud Cover +'clct' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Cloud Cover +'clc_con' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Cover (800 hPa - Soil) +'clcl' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfSecondFixedSurface = 1 ; + scaledValueOfFirstFixedSurface = 800 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 100 ; + } +#Cloud Cover (400 - 800 hPa) +'clcm' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 800 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Cloud Cover (0 - 400 hPa) +'clch' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 400 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Total Column-Integrated Cloud Water +'tqc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'snow_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Large-Scale snowfall rate water equivalent (s) +'snow_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Land Cover (1=land, 0=sea) +'fr_land' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface Roughness length Surface Roughness +'z0' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'alb_rad' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'albedo_b' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'t_cl' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 36 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature (41 cm depth) +'t_cl_lm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 41 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature +'t_m' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 9 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature +'t_s' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + } +#Column-integrated Soil Moisture +'w_cl' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 190 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'w_g1' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'w_g2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 100 ; + } +#Plant cover +'plcov' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Water Runoff (10-100) +'runoff_g' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Water Runoff (10-190) +'runoff_g_lm' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfSecondFixedSurface = 190 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Water Runoff (s) +'runoff_s' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfSecondFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'fr_ice' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Thickness +'h_ice' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Significant height of combined wind waves and swell +'swh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Direction of wind waves +'mdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Significant height of wind waves +'shww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'mpww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Direction of swell waves +'mdps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Significant height of swell waves +'shps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Mean period of swell waves +'mpps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Net short wave radiation flux (m) (at the surface) +'asob_s' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'sobs_rad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + } +#Net long wave radiation flux (m) (at the surface) +'athb_s' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'thbs_rad' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + } +#Net short wave radiation flux (m) (on the model top) +'asob_t' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 0 ; + } +#Net short wave radiation flux +'sobt_rad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'athb_t' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'thbt_rad' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + } +#Latent Heat Net Flux (m) +'alhfl_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Sensible Heat Net Flux (m) +'ashfl_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Momentum Flux, U-Component (m) +'aumfl_s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Momentum Flux, V-Component (m) +'avmfl_s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation (m) (at the surface) +'apab_s' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Photosynthetically active radiation +'pabs_rad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + } +#Solar radiation heating rate +'sohr_rad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Thermal radiation heating rate +'thhr_rad' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Latent heat flux from bare soil +'alhfl_bs' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Latent heat flux from plants +'alhfl_pl' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + typeOfStatisticalProcessing = 0 ; + } +#Sunshine +'dursun' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Stomatal Resistance +'rstom' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Cloud cover +'clc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Non-Convective Cloud Cover, grid scale +'clc_sgs' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 14 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Mixing Ratio +'qc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Ice Mixing Ratio +'qi' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 82 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Rain mixing ratio +'qr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 24 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Snow mixing ratio +'qs' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 25 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated rain +'tqr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + } +#Total column integrated snow +'tqs' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + } +#Grauple +'qg' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated grauple +'tqg' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 74 ; + } +#Total Column integrated water (all components incl. precipitation) +'twater' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + } +#vertical integral of divergence of total water content (s) +'tdiv_hum' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#subgrid scale cloud water +'qc_rad' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#subgridscale cloud ice +'qi_rad' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#cloud base above msl, shallow convection +'hbas_sc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 2 ; + } +#cloud top above msl, shallow convection +'htop_sc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 3 ; + } +#specific cloud water content, convective cloud +'clw_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Height of Convective Cloud Base (i) +'hbas_con' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 2 ; + } +#Height of Convective Cloud Top (i) +'htop_con' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'bas_con' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'top_con' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to convection +'dt_con' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific humitiy tendency due to convection +'dqv_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#zonal wind tendency due to convection +'du_con' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to convection +'dv_con' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#height of top of dry convection +'htop_dc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'hzerocl' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 4 ; + } +#Height of snow fall limit +'snowlmt' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 204 ; + } +#Tendency of specific cloud liquid water content due to conversion +'dqc_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud ice content due to convection +'dqi_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'q_sedim' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Large scale rain rate +'prr_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale snowfall rate water equivalent +'prs_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate (s) +'rain_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective rain rate +'prr_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective snowfall rate water equivalent +'prs_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate (s) +'rain_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#rain amount, grid-scale plus convective +'rr_f' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#snow amount, grid-scale plus convective +'rr_c' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 66 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Temperature tendency due to grid scale precipation +'dt_gsp' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific humitiy tendency due to grid scale precipitation +'dqv_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'dqc_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'freshsnw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 203 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'dqi_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Graupel (snow pellets) precipitation rate +'prg_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + } +#Graupel (snow pellets) precipitation rate +'grau_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow density +'rho_snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure perturbation +'pp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#supercell detection index 1 (rot. up+down drafts) +'sdi_1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'sdi_2' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy, most unstable +'cape_mu' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Inhibition, most unstable +'cin_mu' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Available Potential Energy, mean layer +'cape_ml' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective Inhibition, mean layer +'cin_ml' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective turbulent kinetic enery +'tke_con' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 24 ; + } +#Tendency of turbulent kinetic energy +'tketens' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Kinetic Energy +'ke' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent Kinetic Energy +'tke' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 11 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusioncoefficient for momentum +'tkvm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 31 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'tkvh' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent transfer coefficient for impulse +'tcm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'tch' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + } +#mixed layer depth +'mh' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#maximum Wind 10m +'vmax_10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Air concentration of Ruthenium 103 +'ru-103' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + } +#Soil Temperature (multilayers) +'t_so' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (multilayers) +'w_so' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#soil ice content (multilayers) +'w_so_ice' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Plant Canopy Surface Water +'w_i' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow temperature (top of snow) +'t_snow' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimal Stomatal Resistance +'prs_min' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Temperature +'t_ice' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'dbz_850' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'dbz' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Base reflectivity (cmax) +'dbz_cmax' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 10 ; + } +#unknown +'dttdiv' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Effective transmissivity of solar radiation +'sotr_rad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#sum of contributions to evaporation +'evatra_sum' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#total transpiration from all soil layers +'tra_sum' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#total forcing at soil surface +'totforce_s' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#residuum of soil moisture +'resid_wso' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Massflux at convective cloud base +'mflx_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 205 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy +'cape_con' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#moisture convergence for Kuo-type closure +'qcvg_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 206 ; + typeOfFirstFixedSurface = 1 ; + } +#total wave direction +'mwd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#wind sea mean period +'mwp_x' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 101 ; + } +#wind sea peak period +'ppww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#swell mean period +'mpp_s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 101 ; + } +#swell peak period +'ppps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#total wave peak period +'pp1d' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#total wave mean period +'tm10' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#total Tm1 period +'tm01' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#total Tm2 period +'tm02' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#total directional spread +'sprd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#analysis error(standard deviation), geopotential(gpm) +'ana_err_fi' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#analysis error(standard deviation), u-comp. of wind +'ana_err_u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#analysis error(standard deviation), v-comp. of wind +'ana_err_v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#zonal wind tendency due to subgrid scale oro. +'du_sso' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#meridional wind tendency due to subgrid scale oro. +'dv_sso' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Standard deviation of sub-grid scale orography +'sso_stdh' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 1 ; + } +#Anisotropy of sub-gridscale orography +'sso_gamma' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + } +#Angle of sub-gridscale orography +'sso_theta' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + } +#Slope of sub-gridscale orography +'sso_sigma' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 1 ; + } +#surface emissivity +'emis_rad' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Type +'soiltyp' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Leaf area index +'lai' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + } +#root depth of vegetation +'rootdp' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfFirstFixedSurface = 1 ; + } +#height of ozone maximum (climatological) +'hmo3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#vertically integrated ozone content (climatological) +'vio3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the vegetation phase +'plcov_mx' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the quiescent phas +'plcov_mn' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Max Leaf area index +'lai_mx' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Min Leaf area index +'lai_mn' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Orographie + Land-Meer-Verteilung +'oro_mod' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#variance of soil moisture content (0-10) +'wvar1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 10 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + } +#variance of soil moisture content (10-100) +'wvar2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 100 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#evergreen forest +'for_e' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#deciduous forest +'for_d' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfFirstFixedSurface = 1 ; + } +#normalized differential vegetation index +'ndvi' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#normalized differential vegetation index (NDVI) +'ndvi_max' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ndvi_mrat' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ndviratio' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Total sulfate aerosol +'aer_so4' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + } +#Total sulfate aerosol (12M) +'aer_so412' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + } +#Total soil dust aerosol +'aer_dust' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + } +#Total soil dust aerosol (12M) +'aer_dust12' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Organic aerosol +'aer_org' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + } +#Organic aerosol (12M) +'aer_org12' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Black carbon aerosol +'aer_bc' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + } +#Black carbon aerosol (12M) +'aer_bc12' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Sea salt aerosol +'aer_ss' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + } +#Sea salt aerosol (12M) +'aer_ss12' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 0 ; + } +#tendency of specific humidity +'dqvdt' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 207 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#water vapor flux +'qvsflx' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 208 ; + } +#Coriolis parameter +'fc' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical latitude +'rlat' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical longitude +'rlon' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Friction velocity +'ustr' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Delay of the GPS signal trough the (total) atm. +'ztd' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'zwd' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'zhd' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Ozone Mixing Ratio +'o3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'ru-103' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 192 ; + } +#Ru103-dry deposition +'ru-103d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 193 ; + } +#Ru103-wet deposition +'ru-103w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 194 ; + } +#Air concentration of Strontium 90 +'sr-90' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 195 ; + } +#Sr90-dry deposition +'sr-90d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 196 ; + } +#Sr90-wet deposition +'sr-90w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 197 ; + } +#I131-concentration +'i-131a' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 198 ; + } +#I131-dry deposition +'i-131ad' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 199 ; + } +#I131-wet deposition +'i-131aw' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 200 ; + } +#Cs137-concentration +'cs-137' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 201 ; + } +#Cs137-dry deposition +'cs-137d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 202 ; + } +#Cs137-wet deposition +'cs-137w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 203 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'te-132' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 204 ; + } +#Te132-dry deposition +'te-132d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 205 ; + } +#Te132-wet deposition +'te-132w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 206 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'zr-95' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 207 ; + } +#Zr95-dry deposition +'zr-95d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 208 ; + } +#Zr95-wet deposition +'zr-95w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 209 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'kr-85' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 210 ; + } +#Kr85-dry deposition +'kr-85d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 211 ; + } +#Kr85-wet deposition +'kr-85w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 212 ; + } +#TRACER - concentration +'tr-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 213 ; + } +#TRACER - dry deposition +'tr-2d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 214 ; + } +#TRACER - wet deposition +'tr-2w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 215 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'xe-133' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 216 ; + } +#Xe133 - dry deposition +'xe-133d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 217 ; + } +#Xe133 - wet deposition +'xe-133w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 218 ; + } +#I131g - concentration +'i-131g' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 219 ; + } +#Xe133 - wet deposition +'i-131gd' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 220 ; + } +#I131g - wet deposition +'i-131gw' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 221 ; + } +#I131o - concentration +'i-131o' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 222 ; + } +#I131o - dry deposition +'i-131od' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 223 ; + } +#I131o - wet deposition +'i-131ow' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 224 ; + } +#Air concentration of Barium 40 +'ba-140' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 225 ; + } +#Ba140 - dry deposition +'ba-140d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 226 ; + } +#Ba140 - wet deposition +'ba-140w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 227 ; + } +#u-momentum flux due to SSO-effects +'austr_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#u-momentum flux due to SSO-effects +'ustr_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'avstr_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#v-momentum flux due to SSO-effects +'vstr_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Gravity wave dissipation (vertical integral) +'avdis_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Gravity wave dissipation (vertical integral) +'vdis_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'uv_max' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 51 ; + } +#wind shear +'w_shaer' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + } +#storm relative helicity +'srh' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 8 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#absolute vorticity advection +'vabs' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'ccl_nn' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 1 ; + } +#weather interpretation (WMO) +'ww' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 1 ; + } +#Isentrope potentielle Vorticity +'ipv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 107 ; + } +#Druck einer isentropen Flaeche +'ptheta' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 107 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#KO index +'ko' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Aequivalentpotentielle Temperatur +'thetae' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Ceiling +'ceiling' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'ice_grd' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 7 ; + } +#modified cloud depth for media +'cldepth' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + } +#modified cloud cover for media +'clct_mod' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'efa-ps' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'eia-ps' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'efa-u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'eia-u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'efa-v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'eia-v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'efa-fi' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'eia-fi' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'efa-rh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'eia-rh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'efa-t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'eia-t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'efa-om' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'eia-om' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'efa-ke' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'eia-ke' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Synth. Sat. brightness temperature cloudy +'synme5_bt_cl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 52 ; + } +#Synth. Sat. brightness temperature clear sky +'synme5_bt_cs' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + satelliteNumber = 52 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'synme5_rad_cl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + satelliteNumber = 52 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'synme5_rad_cs' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 52 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'synme6_bt_cl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'synme6_bt_cs' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + } +#Synth. Sat. radiance cloudy +'synme6_rad_cl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'synme6_rad_cs' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'synme7_bt_cl_ir11.5' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'synme7_bt_cl_wv6.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + } +#Synth. Sat. brightness temperature clear sky +'synme7_bt_cs_ir11.5' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'synme7_bt_cs_wv6.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance clear sky +'synme7_rad_cl_ir11.5' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'synme7_rad_cl_wv6.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance clear sky +'synme7_rad_cs_ir11.5' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'synme7_rad_cs_wv6.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir10.8' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir12.1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir13.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir3.9' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir8.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir9.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_wv6.2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_wv7.3' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir8.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir10.8' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir12.1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir13.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir3.9' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir9.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_wv6.2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_wv7.3' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir10.8' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir12.1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir13.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir3.9' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir8.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir9.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_wv6.2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_wv7.3' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir10.8' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir12.1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir13.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir3.9' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir8.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir9.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_wv6.2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_wv7.3' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#smoothed forecast, temperature +'t_2m_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, maximum temp. +'tmax_2m_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, minimum temp. +'tmin_2m_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, dew point temp. +'td_2m_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, u comp. of wind +'u_10m_s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, v comp. of wind +'v_10m_s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#smoothed forecast, total precipitation rate +'tot_prec_s' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, total cloud cover +'clct_s' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover low +'clcl_s' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 1 ; + scaledValueOfFirstFixedSurface = 800 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#smoothed forecast, cloud cover medium +'clcm_s' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 800 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + } +#smoothed forecast, cloud cover high +'clch_s' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 400 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'snow_gsp_s' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, soil temperature +'t_s_s' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, wind speed (gust) +'vmax_10m_s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#calibrated forecast, total precipitation rate +'tot_prec_c' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'snow_gsp_c' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#calibrated forecast, wind speed (gust) +'vmax_10m_c' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'obsmsg_alb_hrv' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 2000000 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'obsmsg_alb_nir1.6' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 625000 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'obsmsg_alb_vis0.6' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 1666666 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'obsmsg_alb_vis0.8' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + scaledValueOfCentralWaveNumber = 1250000 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir10.8' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir12.0' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 83333 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir13.4' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir3.9' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 256410 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir8.7' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir9.7' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_wv6.2' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_wv7.3' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 136986 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; +} diff --git a/definitions/grib2/localConcepts/cnmc/units.def b/definitions/grib2/localConcepts/cnmc/units.def new file mode 100644 index 000000000..81f346a33 --- /dev/null +++ b/definitions/grib2/localConcepts/cnmc/units.def @@ -0,0 +1,3050 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Pressure Reduced to MSL +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 101 ; + } +#Pressure Tendency (S) +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (S) +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (full lev) +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Geometric Height of the earths surface above sea level +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total Column Integrated Ozone +'Dobson' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature (G) +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#2m Temperature (AV) +'~' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Climat. temperature, 2m Temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 9 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Max 2m Temperature (i) +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Min 2m Temperature (i) +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Dew Point Temperature (AV) +'~' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Radar spectra (1) +'~' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Wave spectra (1) +'~' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Wave spectra (2) +'~' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Wave spectra (3) +'~' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Wind Direction (DD_10M) +'degrees' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Wind Direction (DD) +'degrees' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Wind speed (SP_10M) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Wind speed (SP) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#U component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#U component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#V component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#V component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Vertical Velocity (Geometric) (w) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 9 ; + } +#Specific Humidity (S) +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Specific Humidity (2m) +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Specific Humidity +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Relative Humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Relative Humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Total column integrated water vapour +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + } +#Evaporation (s) +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total Column-Integrated Cloud Ice +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Precipitation rate (S) +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Large-Scale Precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective Precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow depth water equivalent +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow Depth +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Cloud Cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Cloud Cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Cover (800 hPa - Soil) +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 800 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 100 ; + } +#Cloud Cover (400 - 800 hPa) +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 400 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 800 ; + } +#Cloud Cover (0 - 400 hPa) +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 400 ; + typeOfFirstFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Total Column-Integrated Cloud Water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Large-Scale snowfall rate water equivalent (s) +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Land Cover (1=land, 0=sea) +'(0 - 1)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface Roughness length Surface Roughness +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 36 ; + } +#Soil Temperature (41 cm depth) +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 41 ; + } +#Soil Temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 9 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Soil Temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 190 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 10 ; + typeOfFirstFixedSurface = 106 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 100 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Plant cover +'%' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Water Runoff (10-100) +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 100 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Water Runoff (10-190) +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 190 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Water Runoff (s) +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 10 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'~' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Thickness +'m' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Significant height of combined wind waves and swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Direction of wind waves +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Significant height of wind waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Direction of swell waves +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Significant height of swell waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Mean period of swell waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Net short wave radiation flux (m) (at the surface) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + } +#Net long wave radiation flux (m) (at the surface) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + } +#Net short wave radiation flux (m) (on the model top) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + } +#Latent Heat Net Flux (m) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Sensible Heat Net Flux (m) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Momentum Flux, U-Component (m) +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Momentum Flux, V-Component (m) +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation (m) (at the surface) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + } +#Solar radiation heating rate +'K s**-1' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Thermal radiation heating rate +'K s**-1' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Latent heat flux from bare soil +'W m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Latent heat flux from plants +'W m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Sunshine +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Stomatal Resistance +'s m**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Non-Convective Cloud Cover, grid scale +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Cloud Mixing Ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Cloud Ice Mixing Ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 82 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Rain mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 24 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Snow mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Total column integrated rain +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + } +#Total column integrated snow +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + } +#Grauple +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated grauple +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 74 ; + } +#Total Column integrated water (all components incl. precipitation) +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + } +#vertical integral of divergence of total water content (s) +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#subgrid scale cloud water +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#subgridscale cloud ice +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#cloud base above msl, shallow convection +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 2 ; + } +#cloud top above msl, shallow convection +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 3 ; + } +#specific cloud water content, convective cloud +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Height of Convective Cloud Base (i) +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 2 ; + } +#Height of Convective Cloud Top (i) +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to convection +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific humitiy tendency due to convection +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#zonal wind tendency due to convection +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to convection +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#height of top of dry convection +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 4 ; + } +#Height of snow fall limit +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 204 ; + } +#Tendency of specific cloud liquid water content due to conversion +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud ice content due to convection +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Large scale rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate (s) +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate (s) +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#rain amount, grid-scale plus convective +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 65 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#snow amount, grid-scale plus convective +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 66 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to grid scale precipation +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific humitiy tendency due to grid scale precipitation +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'~' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 203 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Graupel (snow pellets) precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + } +#Graupel (snow pellets) precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow density +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure perturbation +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#supercell detection index 1 (rot. up+down drafts) +'s**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'s**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy, most unstable +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Inhibition, most unstable +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Available Potential Energy, mean layer +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective Inhibition, mean layer +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective turbulent kinetic enery +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 24 ; + } +#Tendency of turbulent kinetic energy +'m s**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Kinetic Energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Turbulent Kinetic Energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 11 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusioncoefficient for momentum +'m**2 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 31 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'m**2 s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Turbulent transfer coefficient for impulse +'~' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'~' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + } +#mixed layer depth +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#maximum Wind 10m +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Air concentration of Ruthenium 103 +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + } +#Soil Temperature (multilayers) +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Column-integrated Soil Moisture (multilayers) +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#soil ice content (multilayers) +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Plant Canopy Surface Water +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow temperature (top of snow) +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimal Stomatal Resistance +'s m**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Temperature +'K' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'dB' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'dB' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Base reflectivity (cmax) +'dB' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 10 ; + } +#unknown +'m' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Effective transmissivity of solar radiation +'K s**-1' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#sum of contributions to evaporation +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#total transpiration from all soil layers +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#total forcing at soil surface +'W m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#residuum of soil moisture +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Massflux at convective cloud base +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 205 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#moisture convergence for Kuo-type closure +'s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 206 ; + typeOfFirstFixedSurface = 1 ; + } +#total wave direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#wind sea mean period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 101 ; + } +#wind sea peak period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#swell mean period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 101 ; + } +#swell peak period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#total wave peak period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#total wave mean period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#total Tm1 period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#total Tm2 period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#total directional spread +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#analysis error(standard deviation), geopotential(gpm) +'gpm' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#analysis error(standard deviation), u-comp. of wind +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#analysis error(standard deviation), v-comp. of wind +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#zonal wind tendency due to subgrid scale oro. +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to subgrid scale oro. +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 195 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Standard deviation of sub-grid scale orography +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 1 ; + } +#Anisotropy of sub-gridscale orography +'~' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + } +#Angle of sub-gridscale orography +'radians' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + } +#Slope of sub-gridscale orography +'~' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 1 ; + } +#surface emissivity +'~' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Type +'~' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Leaf area index +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + } +#root depth of vegetation +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfFirstFixedSurface = 1 ; + } +#height of ozone maximum (climatological) +'Pa' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#vertically integrated ozone content (climatological) +'Pa' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the vegetation phase +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the quiescent phas +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Max Leaf area index +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Min Leaf area index +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Orographie + Land-Meer-Verteilung +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#variance of soil moisture content (0-10) +'kg**2 m**-4' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + scaledValueOfSecondFixedSurface = 10 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 106 ; + } +#variance of soil moisture content (10-100) +'kg**2 m**-4' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + scaledValueOfSecondFixedSurface = 100 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 106 ; + } +#evergreen forest +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#deciduous forest +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfFirstFixedSurface = 1 ; + } +#normalized differential vegetation index +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#normalized differential vegetation index (NDVI) +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Total sulfate aerosol +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + } +#Total sulfate aerosol (12M) +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + } +#Total soil dust aerosol +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + } +#Total soil dust aerosol (12M) +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Organic aerosol +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + } +#Organic aerosol (12M) +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Black carbon aerosol +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + } +#Black carbon aerosol (12M) +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Sea salt aerosol +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + } +#Sea salt aerosol (12M) +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 0 ; + } +#tendency of specific humidity +'s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 207 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#water vapor flux +'s**-1 m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 208 ; + } +#Coriolis parameter +'s**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical latitude +'Degree N' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical longitude +'Degree E' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Friction velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Delay of the GPS signal trough the (total) atm. +'m' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'m' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'m' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Ozone Mixing Ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 192 ; + } +#Ru103-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 193 ; + } +#Ru103-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 194 ; + } +#Air concentration of Strontium 90 +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 195 ; + } +#Sr90-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 196 ; + } +#Sr90-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 197 ; + } +#I131-concentration +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 198 ; + } +#I131-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 199 ; + } +#I131-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 200 ; + } +#Cs137-concentration +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 201 ; + } +#Cs137-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 202 ; + } +#Cs137-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 203 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 204 ; + } +#Te132-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 205 ; + } +#Te132-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 206 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 207 ; + } +#Zr95-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 208 ; + } +#Zr95-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 209 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 210 ; + } +#Kr85-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 211 ; + } +#Kr85-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 212 ; + } +#TRACER - concentration +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 213 ; + } +#TRACER - dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 214 ; + } +#TRACER - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 215 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 216 ; + } +#Xe133 - dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 217 ; + } +#Xe133 - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 218 ; + } +#I131g - concentration +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 219 ; + } +#Xe133 - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 220 ; + } +#I131g - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 221 ; + } +#I131o - concentration +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 222 ; + } +#I131o - dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 223 ; + } +#I131o - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 224 ; + } +#Air concentration of Barium 40 +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 225 ; + } +#Ba140 - dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 226 ; + } +#Ba140 - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 227 ; + } +#u-momentum flux due to SSO-effects +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#u-momentum flux due to SSO-effects +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Gravity wave dissipation (vertical integral) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Gravity wave dissipation (vertical integral) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'~' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 51 ; + } +#wind shear +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + } +#storm relative helicity +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#absolute vorticity advection +'s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 1 ; + } +#weather interpretation (WMO) +'~' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 1 ; + } +#Isentrope potentielle Vorticity +'K m**2 kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 107 ; + } +#Druck einer isentropen Flaeche +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 107 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#KO index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Aequivalentpotentielle Temperatur +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Ceiling +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'~' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 7 ; + } +#modified cloud depth for media +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + } +#modified cloud cover for media +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 52 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 52 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteNumber = 52 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 52 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + satelliteNumber = 53 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 54 ; + instrumentType = 205 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + } +#smoothed forecast, temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, maximum temp. +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, minimum temp. +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, dew point temp. +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, u comp. of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#smoothed forecast, v comp. of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, total precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 1 ; + } +#smoothed forecast, total cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover low +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfSecondFixedSurface = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaledValueOfFirstFixedSurface = 800 ; + typeOfFirstFixedSurface = 100 ; + } +#smoothed forecast, cloud cover medium +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaledValueOfSecondFixedSurface = 800 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + typeOfFirstFixedSurface = 100 ; + } +#smoothed forecast, cloud cover high +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 400 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#smoothed forecast, soil temperature +'K' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 106 ; + } +#smoothed forecast, wind speed (gust) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#calibrated forecast, total precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 1 ; + } +#calibrated forecast, wind speed (gust) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + scaledValueOfCentralWaveNumber = 2000000 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 625000 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 1666666 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 1250000 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 83333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/cfName.def b/definitions/grib2/localConcepts/ecmf/cfName.def new file mode 100644 index 000000000..6a595579d --- /dev/null +++ b/definitions/grib2/localConcepts/ecmf/cfName.def @@ -0,0 +1,51 @@ +# Automatically generated by ./create_param.pl from database param@balthasar, do not edit +#Geopotential +'geopotential' = { + discipline = 0 ; + parameterNumber = 4 ; + parameterCategory = 3 ; + } +#Relative vorticity +'atmosphere_relative_vorticity' = { + discipline = 0 ; + parameterNumber = 12 ; + parameterCategory = 2 ; + } +#Snow depth +'lwe_thickness_of_surface_snow_amount' = { + discipline = 0 ; + parameterNumber = 11 ; + parameterCategory = 1 ; + unitsFactor = 1000 ; + } +#Convective precipitation +'lwe_thickness_of_convective_precipitation_amount' = { + discipline = 0 ; + parameterNumber = 10 ; + parameterCategory = 1 ; + unitsFactor = 1000 ; + } +#Boundary layer dissipation +'dissipation_in_atmosphere_boundary_layer' = { + discipline = 0 ; + parameterNumber = 20 ; + parameterCategory = 2 ; + } +#Relative divergence +'divergence_of_wind' = { + discipline = 0 ; + parameterNumber = 13 ; + parameterCategory = 2 ; + } +#Relative humidity +'relative_humidity' = { + discipline = 0 ; + parameterNumber = 1 ; + parameterCategory = 1 ; + } +#Surface roughness +'surface_roughness_length' = { + discipline = 2 ; + parameterNumber = 1 ; + parameterCategory = 0 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def new file mode 100644 index 000000000..0caa799a4 --- /dev/null +++ b/definitions/grib2/localConcepts/ecmf/name.def @@ -0,0 +1,17149 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total precipitation of at least 1 mm +'Total precipitation of at least 1 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 60 ; + } +#Total precipitation of at least 5 mm +'Total precipitation of at least 5 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 61 ; + } +#Total precipitation of at least 40 mm +'Total precipitation of at least 40 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 82 ; + } +#Total precipitation of at least 60 mm +'Total precipitation of at least 60 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 83 ; + } +#Total precipitation of at least 80 mm +'Total precipitation of at least 80 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 84 ; + } +#Total precipitation of at least 100 mm +'Total precipitation of at least 100 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 85 ; + } +#Total precipitation of at least 150 mm +'Total precipitation of at least 150 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 86 ; + } +#Total precipitation of at least 200 mm +'Total precipitation of at least 200 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 87 ; + } +#Total precipitation of at least 300 mm +'Total precipitation of at least 300 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 88 ; + } +#Equivalent potential temperature +'Equivalent potential temperature' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature +'Saturated equivalent potential temperature' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 5 ; + } +#Soil sand fraction +'Soil sand fraction' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 6 ; + } +#Soil clay fraction +'Soil clay fraction' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 7 ; + } +#Surface runoff +'Surface runoff' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; + } +#Sub-surface runoff +'Sub-surface runoff' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 9 ; + } +#U component of divergent wind +'U component of divergent wind' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 11 ; + } +#V component of divergent wind +'V component of divergent wind' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 12 ; + } +#U component of rotational wind +'U component of rotational wind' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 13 ; + } +#V component of rotational wind +'V component of rotational wind' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 14 ; + } +#UV visible albedo for direct radiation +'UV visible albedo for direct radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 15 ; + } +#UV visible albedo for diffuse radiation +'UV visible albedo for diffuse radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 16 ; + } +#Near IR albedo for direct radiation +'Near IR albedo for direct radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 17 ; + } +#Near IR albedo for diffuse radiation +'Near IR albedo for diffuse radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 18 ; + } +#Clear sky surface UV +'Clear sky surface UV' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 19 ; + } +#Clear sky surface photosynthetically active radiation +'Clear sky surface photosynthetically active radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 20 ; + } +#Unbalanced component of temperature +'Unbalanced component of temperature' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'Unbalanced component of logarithm of surface pressure' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence +'Unbalanced component of divergence' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 25 ; + } +#Lake cover +'Lake cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } +#Low vegetation cover +'Low vegetation cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 27 ; + } +#High vegetation cover +'High vegetation cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 28 ; + } +#Type of low vegetation +'Type of low vegetation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 29 ; + } +#Type of high vegetation +'Type of high vegetation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 30 ; + } +#Sea-ice cover +'Sea-ice cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 31 ; + } +#Snow albedo +'Snow albedo' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; + } +#Snow density +'Snow density' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 33 ; + } +#Sea surface temperature +'Sea surface temperature' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 34 ; + } +#Ice temperature layer 1 +'Ice temperature layer 1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 35 ; + } +#Ice temperature layer 2 +'Ice temperature layer 2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 36 ; + } +#Ice temperature layer 3 +'Ice temperature layer 3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 37 ; + } +#Ice temperature layer 4 +'Ice temperature layer 4' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 +'Volumetric soil water layer 1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'Volumetric soil water layer 2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'Volumetric soil water layer 3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'Volumetric soil water layer 4' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 42 ; + } +#Soil type +'Soil type' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Snow evaporation +'Snow evaporation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; + } +#Snowmelt +'Snowmelt' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; + } +#Solar duration +'Solar duration' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 46 ; + } +#Direct solar radiation +'Direct solar radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress +'Magnitude of surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 48 ; + } +#10 metre wind gust +'10 metre wind gust' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction +'Large-scale precipitation fraction' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'Maximum temperature at 2 metres in the last 24 hours' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 24 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'Minimum temperature at 2 metres in the last 24 hours' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + lengthOfTimeRange = 24 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 3 ; + } +#Montgomery potential +'Montgomery potential' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; + } +#Mean temperature at 2 metres in the last 24 hours +'Mean temperature at 2 metres in the last 24 hours' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours +'Mean 2 metre dewpoint temperature in the last 24 hours' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface +'Downward UV radiation at the surface' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface +'Photosynthetically active radiation at the surface' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; + } +#Observation count +'Observation count' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'Start time for skin temperature difference' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'Finish time for skin temperature difference' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'Skin temperature difference' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'Leaf area index, low vegetation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'Leaf area index, high vegetation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'Minimum stomatal resistance, low vegetation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'Minimum stomatal resistance, high vegetation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'Biome cover, low vegetation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'Biome cover, high vegetation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 71 ; + } +#Instantaneous surface solar radiation downwards +'Instantaneous surface solar radiation downwards' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 72 ; + } +#Instantaneous surface thermal radiation downwards +'Instantaneous surface thermal radiation downwards' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 73 ; + } +#Standard deviation of filtered subgrid orography +'Standard deviation of filtered subgrid orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 74 ; + } +#Specific rain water content +'Specific rain water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + } +#Specific snow water content +'Specific snow water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + } +#Eta-coordinate vertical velocity +'Eta-coordinate vertical velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + } +#Total column liquid water +'Total column liquid water' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 78 ; + } +#Total column ice water +'Total column ice water' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 79 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 80 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 81 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 82 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 83 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 84 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 85 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 86 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 87 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 88 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 89 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 90 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 91 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 92 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 93 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 94 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 95 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 96 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 97 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 98 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 99 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 100 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 101 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 102 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 103 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 104 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 105 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 106 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 107 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 108 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 109 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 110 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 111 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 112 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 113 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 114 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 115 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 116 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 117 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 118 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 119 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'Maximum temperature at 2 metres in the last 6 hours' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + lengthOfTimeRange = 6 ; + typeOfStatisticalProcessing = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'Minimum temperature at 2 metres in the last 6 hours' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#10 metre wind gust in the last 6 hours +'10 metre wind gust in the last 6 hours' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 123 ; + } +#Surface emissivity +'Surface emissivity' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 124 ; + } +#Vertically integrated total energy +'Vertically integrated total energy' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'Generic parameter for sensitive area prediction' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 126 ; + } +#Atmospheric tide +'Atmospheric tide' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 127 ; + } +#Budget values +'Budget values' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 128 ; + } +#Geopotential +'Geopotential' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Total column water vapour +'Total column water vapour' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 137 ; + } +#Vorticity (relative) +'Vorticity (relative)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + } +#Soil temperature level 1 +'Soil temperature level 1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 +'Soil wetness level 1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 140 ; + } +#Snow depth +'Snow depth' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + unitsFactor = 1000 ; + } +#Large-scale precipitation +'Large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; + } +#Convective precipitation +'Convective precipitation' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 10 ; + unitsFactor = 1000 ; + } +#Snowfall +'Snowfall' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation +'Boundary layer dissipation' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + } +#Charnock +'Charnock' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 148 ; + } +#Surface net radiation +'Surface net radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 149 ; + } +#Top net radiation +'Top net radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 150 ; + } +#Logarithm of surface pressure +'Logarithm of surface pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + } +#Short-wave heating rate +'Short-wave heating rate' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 153 ; + } +#Long-wave heating rate +'Long-wave heating rate' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 154 ; + } +#Divergence +'Divergence' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + } +#Relative humidity +'Relative humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Tendency of surface pressure +'Tendency of surface pressure' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 158 ; + } +#Boundary layer height +'Boundary layer height' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; + } +#Standard deviation of orography +'Standard deviation of orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography +'Anisotropy of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography +'Angle of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography +'Slope of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; + } +#Total cloud cover +'Total cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; + } +#10 metre U wind component +'10 metre U wind component' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#10 metre V wind component +'10 metre V wind component' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2 metre temperature +'2 metre temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Surface solar radiation downwards +'Surface solar radiation downwards' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 +'Soil temperature level 2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 +'Soil wetness level 2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 171 ; + } +#Surface roughness +'Surface roughness' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Albedo +'Albedo' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards +'Surface thermal radiation downwards' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 175 ; + } +#Top net solar radiation +'Top net solar radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 178 ; + } +#East-West surface stress +'East-West surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 180 ; + } +#North-South surface stress +'North-South surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 181 ; + } +#Evaporation +'Evaporation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 +'Soil temperature level 3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 +'Soil wetness level 3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 184 ; + } +#Convective cloud cover +'Convective cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 185 ; + } +#Low cloud cover +'Low cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; + } +#Medium cloud cover +'Medium cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; + } +#High cloud cover +'High cloud cover' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; + } +#East-West component of sub-gridscale orographic variance +'East-West component of sub-gridscale orographic variance' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance +'North-South component of sub-gridscale orographic variance' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'North-West/South-East component of sub-gridscale orographic variance' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'North-East/South-West component of sub-gridscale orographic variance' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 193 ; + } +#Longitudinal component of gravity wave stress +'Longitudinal component of gravity wave stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress +'Meridional component of gravity wave stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'Gravity wave dissipation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; + } +#Skin reservoir content +'Skin reservoir content' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 198 ; + } +#Vegetation fraction +'Vegetation fraction' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography +'Variance of sub-gridscale orography' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing +'Maximum temperature at 2 metres since previous post-processing' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing +'Minimum temperature at 2 metres since previous post-processing' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio +'Ozone mass mixing ratio' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + } +#Precipitation analysis weights +'Precipitation analysis weights' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 204 ; + } +#Runoff +'Runoff' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 205 ; + } +#Total column ozone +'Total column ozone' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; + } +#Top net solar radiation, clear sky +'Top net solar radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'Top net thermal radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'Surface net solar radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'Surface net thermal radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation +'TOA incident solar radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; + } +#Vertically integrated moisture divergence +'Vertically integrated moisture divergence' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 213 ; + } +#Diabatic heating by radiation +'Diabatic heating by radiation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion +'Diabatic heating by vertical diffusion' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection +'Diabatic heating by cumulus convection' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation +'Diabatic heating large-scale condensation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind +'Vertical diffusion of zonal wind' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind +'Vertical diffusion of meridional wind' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency +'East-West gravity wave drag tendency' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency +'North-South gravity wave drag tendency' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind +'Convective tendency of zonal wind' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind +'Convective tendency of meridional wind' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity +'Vertical diffusion of humidity' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection +'Humidity tendency by cumulus convection' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation +'Humidity tendency by large-scale condensation' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 226 ; + } +#Tendency due to removal of negative humidity +'Tendency due to removal of negative humidity' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 227 ; + } +#Total precipitation +'Total precipitation' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + unitsFactor = 1000 ; + } +#Instantaneous X surface stress +'Instantaneous X surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress +'Instantaneous Y surface stress' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; + } +#Instantaneous surface sensible heat flux +'Instantaneous surface sensible heat flux' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux +'Instantaneous moisture flux' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; + } +#Apparent surface humidity +'Apparent surface humidity' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat +'Logarithm of surface roughness length for heat' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 234 ; + } +#Soil temperature level 4 +'Soil temperature level 4' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 +'Soil wetness level 4' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 237 ; + } +#Temperature of snow layer +'Temperature of snow layer' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 238 ; + } +#Convective snowfall +'Convective snowfall' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; + } +#Large-scale snowfall +'Large-scale snowfall' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency +'Accumulated cloud fraction tendency' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency +'Accumulated liquid water tendency' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 242 ; + } +#Forecast albedo +'Forecast albedo' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 243 ; + } +#Forecast surface roughness +'Forecast surface roughness' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat +'Forecast logarithm of surface roughness for heat' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content +'Specific cloud liquid water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + } +#Specific cloud ice water content +'Specific cloud ice water content' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + } +#Cloud cover +'Cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + } +#Accumulated ice water tendency +'Accumulated ice water tendency' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 249 ; + } +#Ice age +'Ice age' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature +'Adiabatic tendency of temperature' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity +'Adiabatic tendency of humidity' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind +'Adiabatic tendency of zonal wind' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind +'Adiabatic tendency of meridional wind' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 255 ; + } +#Stream function difference +'Stream function difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 1 ; + } +#Velocity potential difference +'Velocity potential difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 2 ; + } +#Potential temperature difference +'Potential temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature difference +'Equivalent potential temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature difference +'Saturated equivalent potential temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 5 ; + } +#U component of divergent wind difference +'U component of divergent wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 11 ; + } +#V component of divergent wind difference +'V component of divergent wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 12 ; + } +#U component of rotational wind difference +'U component of rotational wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 13 ; + } +#V component of rotational wind difference +'V component of rotational wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature difference +'Unbalanced component of temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure difference +'Unbalanced component of logarithm of surface pressure difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence difference +'Unbalanced component of divergence difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 25 ; + } +#Lake cover difference +'Lake cover difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 26 ; + } +#Low vegetation cover difference +'Low vegetation cover difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 27 ; + } +#High vegetation cover difference +'High vegetation cover difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 28 ; + } +#Type of low vegetation difference +'Type of low vegetation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 29 ; + } +#Type of high vegetation difference +'Type of high vegetation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 30 ; + } +#Sea-ice cover difference +'Sea-ice cover difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 31 ; + } +#Snow albedo difference +'Snow albedo difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 32 ; + } +#Snow density difference +'Snow density difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 33 ; + } +#Sea surface temperature difference +'Sea surface temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 34 ; + } +#Ice surface temperature layer 1 difference +'Ice surface temperature layer 1 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 35 ; + } +#Ice surface temperature layer 2 difference +'Ice surface temperature layer 2 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 36 ; + } +#Ice surface temperature layer 3 difference +'Ice surface temperature layer 3 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 37 ; + } +#Ice surface temperature layer 4 difference +'Ice surface temperature layer 4 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 difference +'Volumetric soil water layer 1 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 difference +'Volumetric soil water layer 2 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 difference +'Volumetric soil water layer 3 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 difference +'Volumetric soil water layer 4 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 42 ; + } +#Soil type difference +'Soil type difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 43 ; + } +#Snow evaporation difference +'Snow evaporation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 44 ; + } +#Snowmelt difference +'Snowmelt difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 45 ; + } +#Solar duration difference +'Solar duration difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 46 ; + } +#Direct solar radiation difference +'Direct solar radiation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress difference +'Magnitude of surface stress difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 48 ; + } +#10 metre wind gust difference +'10 metre wind gust difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction difference +'Large-scale precipitation fraction difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature difference +'Maximum 2 metre temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature difference +'Minimum 2 metre temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 52 ; + } +#Montgomery potential difference +'Montgomery potential difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 53 ; + } +#Pressure difference +'Pressure difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours difference +'Mean 2 metre temperature in the last 24 hours difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours difference +'Mean 2 metre dewpoint temperature in the last 24 hours difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface difference +'Downward UV radiation at the surface difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface difference +'Photosynthetically active radiation at the surface difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 58 ; + } +#Convective available potential energy difference +'Convective available potential energy difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 59 ; + } +#Potential vorticity difference +'Potential vorticity difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 60 ; + } +#Total precipitation from observations difference +'Total precipitation from observations difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 61 ; + } +#Observation count difference +'Observation count difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'Start time for skin temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'Finish time for skin temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'Skin temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'Leaf area index, low vegetation' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'Leaf area index, high vegetation' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'Minimum stomatal resistance, low vegetation' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'Minimum stomatal resistance, high vegetation' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'Biome cover, low vegetation' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'Biome cover, high vegetation' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 71 ; + } +#Total column liquid water +'Total column liquid water' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 78 ; + } +#Total column ice water +'Total column ice water' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 79 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 80 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 81 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 82 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 83 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 84 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 85 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 86 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 87 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 88 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 89 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 90 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 91 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 92 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 93 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 94 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 95 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 96 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 97 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 98 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 99 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 100 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 101 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 102 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 103 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 104 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 105 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 106 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 107 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 108 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 109 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 110 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 111 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 112 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 113 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 114 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 115 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 116 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 117 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 118 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 119 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres difference +'Maximum temperature at 2 metres difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres difference +'Minimum temperature at 2 metres difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 122 ; + } +#10 metre wind gust in the last 6 hours difference +'10 metre wind gust in the last 6 hours difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 123 ; + } +#Vertically integrated total energy +'Vertically integrated total energy' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'Generic parameter for sensitive area prediction' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 126 ; + } +#Atmospheric tide difference +'Atmospheric tide difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 127 ; + } +#Budget values difference +'Budget values difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 128 ; + } +#Geopotential difference +'Geopotential difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 129 ; + } +#Temperature difference +'Temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 130 ; + } +#U component of wind difference +'U component of wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 131 ; + } +#V component of wind difference +'V component of wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 132 ; + } +#Specific humidity difference +'Specific humidity difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 133 ; + } +#Surface pressure difference +'Surface pressure difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 134 ; + } +#Vertical velocity (pressure) difference +'Vertical velocity (pressure) difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 135 ; + } +#Total column water difference +'Total column water difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 136 ; + } +#Total column water vapour difference +'Total column water vapour difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 137 ; + } +#Vorticity (relative) difference +'Vorticity (relative) difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 138 ; + } +#Soil temperature level 1 difference +'Soil temperature level 1 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 difference +'Soil wetness level 1 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 140 ; + } +#Snow depth difference +'Snow depth difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) difference +'Stratiform precipitation (Large-scale precipitation) difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 142 ; + } +#Convective precipitation difference +'Convective precipitation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) difference +'Snowfall (convective + stratiform) difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation difference +'Boundary layer dissipation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux difference +'Surface sensible heat flux difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 146 ; + } +#Surface latent heat flux difference +'Surface latent heat flux difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 147 ; + } +#Charnock difference +'Charnock difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 148 ; + } +#Surface net radiation difference +'Surface net radiation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 149 ; + } +#Top net radiation difference +'Top net radiation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 150 ; + } +#Mean sea level pressure difference +'Mean sea level pressure difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure difference +'Logarithm of surface pressure difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 152 ; + } +#Short-wave heating rate difference +'Short-wave heating rate difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 153 ; + } +#Long-wave heating rate difference +'Long-wave heating rate difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 154 ; + } +#Divergence difference +'Divergence difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 155 ; + } +#Height difference +'Height difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 156 ; + } +#Relative humidity difference +'Relative humidity difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure difference +'Tendency of surface pressure difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 158 ; + } +#Boundary layer height difference +'Boundary layer height difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 159 ; + } +#Standard deviation of orography difference +'Standard deviation of orography difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography difference +'Anisotropy of sub-gridscale orography difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography difference +'Angle of sub-gridscale orography difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography difference +'Slope of sub-gridscale orography difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 163 ; + } +#Total cloud cover difference +'Total cloud cover difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 164 ; + } +#10 metre U wind component difference +'10 metre U wind component difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 165 ; + } +#10 metre V wind component difference +'10 metre V wind component difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 166 ; + } +#2 metre temperature difference +'2 metre temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 167 ; + } +#Surface solar radiation downwards difference +'Surface solar radiation downwards difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 difference +'Soil temperature level 2 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 difference +'Soil wetness level 2 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 171 ; + } +#Land-sea mask difference +'Land-sea mask difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 172 ; + } +#Surface roughness difference +'Surface roughness difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 173 ; + } +#Albedo difference +'Albedo difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards difference +'Surface thermal radiation downwards difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 175 ; + } +#Surface net solar radiation difference +'Surface net solar radiation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation difference +'Surface net thermal radiation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 177 ; + } +#Top net solar radiation difference +'Top net solar radiation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 178 ; + } +#Top net thermal radiation difference +'Top net thermal radiation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 179 ; + } +#East-West surface stress difference +'East-West surface stress difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 180 ; + } +#North-South surface stress difference +'North-South surface stress difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 181 ; + } +#Evaporation difference +'Evaporation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 difference +'Soil temperature level 3 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 difference +'Soil wetness level 3 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 184 ; + } +#Convective cloud cover difference +'Convective cloud cover difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 185 ; + } +#Low cloud cover difference +'Low cloud cover difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 186 ; + } +#Medium cloud cover difference +'Medium cloud cover difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 187 ; + } +#High cloud cover difference +'High cloud cover difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 188 ; + } +#Sunshine duration difference +'Sunshine duration difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance difference +'East-West component of sub-gridscale orographic variance difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance difference +'North-South component of sub-gridscale orographic variance difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance difference +'North-West/South-East component of sub-gridscale orographic variance difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance difference +'North-East/South-West component of sub-gridscale orographic variance difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 193 ; + } +#Brightness temperature difference +'Brightness temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress difference +'Longitudinal component of gravity wave stress difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress difference +'Meridional component of gravity wave stress difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation difference +'Gravity wave dissipation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 197 ; + } +#Skin reservoir content difference +'Skin reservoir content difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 198 ; + } +#Vegetation fraction difference +'Vegetation fraction difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography difference +'Variance of sub-gridscale orography difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing difference +'Maximum temperature at 2 metres since previous post-processing difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing difference +'Minimum temperature at 2 metres since previous post-processing difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio difference +'Ozone mass mixing ratio difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights difference +'Precipitation analysis weights difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 204 ; + } +#Runoff difference +'Runoff difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 205 ; + } +#Total column ozone difference +'Total column ozone difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 206 ; + } +#10 metre wind speed difference +'10 metre wind speed difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 207 ; + } +#Top net solar radiation, clear sky difference +'Top net solar radiation, clear sky difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky difference +'Top net thermal radiation, clear sky difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky difference +'Surface net solar radiation, clear sky difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky difference +'Surface net thermal radiation, clear sky difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation difference +'TOA incident solar radiation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation difference +'Diabatic heating by radiation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion difference +'Diabatic heating by vertical diffusion difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection difference +'Diabatic heating by cumulus convection difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation difference +'Diabatic heating large-scale condensation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind difference +'Vertical diffusion of zonal wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind difference +'Vertical diffusion of meridional wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency difference +'East-West gravity wave drag tendency difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency difference +'North-South gravity wave drag tendency difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind difference +'Convective tendency of zonal wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind difference +'Convective tendency of meridional wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity difference +'Vertical diffusion of humidity difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection difference +'Humidity tendency by cumulus convection difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation difference +'Humidity tendency by large-scale condensation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity difference +'Change from removal of negative humidity difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 227 ; + } +#Total precipitation difference +'Total precipitation difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress difference +'Instantaneous X surface stress difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress difference +'Instantaneous Y surface stress difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux difference +'Instantaneous surface heat flux difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux difference +'Instantaneous moisture flux difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 232 ; + } +#Apparent surface humidity difference +'Apparent surface humidity difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat difference +'Logarithm of surface roughness length for heat difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 234 ; + } +#Skin temperature difference +'Skin temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 difference +'Soil temperature level 4 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 difference +'Soil wetness level 4 difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 237 ; + } +#Temperature of snow layer difference +'Temperature of snow layer difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 238 ; + } +#Convective snowfall difference +'Convective snowfall difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 239 ; + } +#Large scale snowfall difference +'Large scale snowfall difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency difference +'Accumulated cloud fraction tendency difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency difference +'Accumulated liquid water tendency difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 242 ; + } +#Forecast albedo difference +'Forecast albedo difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 243 ; + } +#Forecast surface roughness difference +'Forecast surface roughness difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat difference +'Forecast logarithm of surface roughness for heat difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content difference +'Specific cloud liquid water content difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 246 ; + } +#Specific cloud ice water content difference +'Specific cloud ice water content difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 247 ; + } +#Cloud cover difference +'Cloud cover difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency difference +'Accumulated ice water tendency difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 249 ; + } +#Ice age difference +'Ice age difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature difference +'Adiabatic tendency of temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity difference +'Adiabatic tendency of humidity difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind difference +'Adiabatic tendency of zonal wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind difference +'Adiabatic tendency of meridional wind difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 255 ; + } +#Maximum of significant wave height index +'Maximum of significant wave height index' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 216 ; + } +#Reserved +'Reserved' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 193 ; + } +#U-tendency from dynamics +'U-tendency from dynamics' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 114 ; + } +#V-tendency from dynamics +'V-tendency from dynamics' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 115 ; + } +#T-tendency from dynamics +'T-tendency from dynamics' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 116 ; + } +#q-tendency from dynamics +'q-tendency from dynamics' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 117 ; + } +#T-tendency from radiation +'T-tendency from radiation' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 118 ; + } +#U-tendency from turbulent diffusion + subgrid orography +'U-tendency from turbulent diffusion + subgrid orography' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 119 ; + } +#V-tendency from turbulent diffusion + subgrid orography +'V-tendency from turbulent diffusion + subgrid orography' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 120 ; + } +#T-tendency from turbulent diffusion + subgrid orography +'T-tendency from turbulent diffusion + subgrid orography' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 121 ; + } +#q-tendency from turbulent diffusion +'q-tendency from turbulent diffusion' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 122 ; + } +#U-tendency from subgrid orography +'U-tendency from subgrid orography' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 123 ; + } +#V-tendency from subgrid orography +'V-tendency from subgrid orography' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 124 ; + } +#T-tendency from subgrid orography +'T-tendency from subgrid orography' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 125 ; + } +#U-tendency from convection (deep+shallow) +'U-tendency from convection (deep+shallow)' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 126 ; + } +#V-tendency from convection (deep+shallow) +'V-tendency from convection (deep+shallow)' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 127 ; + } +#T-tendency from convection (deep+shallow) +'T-tendency from convection (deep+shallow)' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 128 ; + } +#q-tendency from convection (deep+shallow) +'q-tendency from convection (deep+shallow)' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 129 ; + } +#Liquid Precipitation flux from convection +'Liquid Precipitation flux from convection' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 130 ; + } +#Ice Precipitation flux from convection +'Ice Precipitation flux from convection' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 131 ; + } +#T-tendency from cloud scheme +'T-tendency from cloud scheme' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 132 ; + } +#q-tendency from cloud scheme +'q-tendency from cloud scheme' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 133 ; + } +#ql-tendency from cloud scheme +'ql-tendency from cloud scheme' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 134 ; + } +#qi-tendency from cloud scheme +'qi-tendency from cloud scheme' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 135 ; + } +#Liquid Precip flux from cloud scheme (stratiform) +'Liquid Precip flux from cloud scheme (stratiform)' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 136 ; + } +#Ice Precip flux from cloud scheme (stratiform) +'Ice Precip flux from cloud scheme (stratiform)' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 137 ; + } +#U-tendency from shallow convection +'U-tendency from shallow convection' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 138 ; + } +#V-tendency from shallow convection +'V-tendency from shallow convection' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 139 ; + } +#T-tendency from shallow convection +'T-tendency from shallow convection' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 140 ; + } +#q-tendency from shallow convection +'q-tendency from shallow convection' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 141 ; + } +#100 metre U wind component anomaly +'100 metre U wind component anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 6 ; + } +#100 metre V wind component anomaly +'100 metre V wind component anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 7 ; + } +#Maximum temperature at 2 metres in the last 6 hours anomaly +'Maximum temperature at 2 metres in the last 6 hours anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours anomaly +'Minimum temperature at 2 metres in the last 6 hours anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 122 ; + } +#Aerosol type 13 mass mixing ratio +'Aerosol type 13 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 13 ; + } +#Aerosol type 14 mass mixing ratio +'Aerosol type 14 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 14 ; + } +#Aerosol type 15 mass mixing ratio +'Aerosol type 15 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 15 ; + } +#SO4 aerosol precursor mass mixing ratio +'SO4 aerosol precursor mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'Water vapour mixing ratio for hydrophilic aerosols in mode 1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'Water vapour mixing ratio for hydrophilic aerosols in mode 2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 30 ; + } +#DMS surface emission +'DMS surface emission' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'Water vapour mixing ratio for hydrophilic aerosols in mode 3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'Water vapour mixing ratio for hydrophilic aerosols in mode 4' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 45 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 55 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 56 ; + } +#Mixing ration of organic carbon aerosol, nucleation mode +'Mixing ration of organic carbon aerosol, nucleation mode' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 57 ; + } +#Monoterpene precursor mixing ratio +'Monoterpene precursor mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 58 ; + } +#Secondary organic precursor mixing ratio +'Secondary organic precursor mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 59 ; + } +#Particulate matter d < 1 um +'Particulate matter d < 1 um' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 72 ; + } +#Particulate matter d < 2.5 um +'Particulate matter d < 2.5 um' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 73 ; + } +#Particulate matter d < 10 um +'Particulate matter d < 10 um' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 74 ; + } +#Wildfire viewing angle of observation +'Wildfire viewing angle of observation' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 79 ; + } +#Wildfire Flux of Ethane (C2H6) +'Wildfire Flux of Ethane (C2H6)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 118 ; + } +#Altitude of emitter +'Altitude of emitter' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 119 ; + } +#Altitude of plume top +'Altitude of plume top' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 120 ; + } +#UV visible albedo for direct radiation, isotropic component +'UV visible albedo for direct radiation, isotropic component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 186 ; + } +#UV visible albedo for direct radiation, volumetric component +'UV visible albedo for direct radiation, volumetric component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 187 ; + } +#UV visible albedo for direct radiation, geometric component +'UV visible albedo for direct radiation, geometric component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 188 ; + } +#Near IR albedo for direct radiation, isotropic component +'Near IR albedo for direct radiation, isotropic component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 189 ; + } +#Near IR albedo for direct radiation, volumetric component +'Near IR albedo for direct radiation, volumetric component' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 190 ; + } +#Near IR albedo for direct radiation, geometric component +'Near IR albedo for direct radiation, geometric component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component +'UV visible albedo for diffuse radiation, isotropic component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component +'UV visible albedo for diffuse radiation, volumetric component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component +'UV visible albedo for diffuse radiation, geometric component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component +'Near IR albedo for diffuse radiation, isotropic component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component +'Near IR albedo for diffuse radiation, volumetric component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component +'Near IR albedo for diffuse radiation, geometric component ' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; + } +#Total aerosol optical depth at 340 nm +'Total aerosol optical depth at 340 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 217 ; + } +#Total aerosol optical depth at 355 nm +'Total aerosol optical depth at 355 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 218 ; + } +#Total aerosol optical depth at 380 nm +'Total aerosol optical depth at 380 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 219 ; + } +#Total aerosol optical depth at 400 nm +'Total aerosol optical depth at 400 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 220 ; + } +#Total aerosol optical depth at 440 nm +'Total aerosol optical depth at 440 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 221 ; + } +#Total aerosol optical depth at 500 nm +'Total aerosol optical depth at 500 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 222 ; + } +#Total aerosol optical depth at 532 nm +'Total aerosol optical depth at 532 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 223 ; + } +#Total aerosol optical depth at 645 nm +'Total aerosol optical depth at 645 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 224 ; + } +#Total aerosol optical depth at 800 nm +'Total aerosol optical depth at 800 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 225 ; + } +#Total aerosol optical depth at 858 nm +'Total aerosol optical depth at 858 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 226 ; + } +#Total aerosol optical depth at 1020 nm +'Total aerosol optical depth at 1020 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 227 ; + } +#Total aerosol optical depth at 1064 nm +'Total aerosol optical depth at 1064 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 228 ; + } +#Total aerosol optical depth at 1640 nm +'Total aerosol optical depth at 1640 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 229 ; + } +#Total aerosol optical depth at 2130 nm +'Total aerosol optical depth at 2130 nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 230 ; + } +#Wildfire Flux of Toluene (C7H8) +'Wildfire Flux of Toluene (C7H8)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 231 ; + } +#Wildfire Flux of Benzene (C6H6) +'Wildfire Flux of Benzene (C6H6)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 232 ; + } +#Wildfire Flux of Xylene (C8H10) +'Wildfire Flux of Xylene (C8H10)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 233 ; + } +#Wildfire Flux of Butenes (C4H8) +'Wildfire Flux of Butenes (C4H8)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 234 ; + } +#Wildfire Flux of Pentenes (C5H10) +'Wildfire Flux of Pentenes (C5H10)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 235 ; + } +#Wildfire Flux of Hexene (C6H12) +'Wildfire Flux of Hexene (C6H12)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 236 ; + } +#Wildfire Flux of Octene (C8H16) +'Wildfire Flux of Octene (C8H16)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 237 ; + } +#Wildfire Flux of Butanes (C4H10) +'Wildfire Flux of Butanes (C4H10)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 238 ; + } +#Wildfire Flux of Pentanes (C5H12) +'Wildfire Flux of Pentanes (C5H12)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 239 ; + } +#Wildfire Flux of Hexanes (C6H14) +'Wildfire Flux of Hexanes (C6H14)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 240 ; + } +#Wildfire Flux of Heptane (C7H16) +'Wildfire Flux of Heptane (C7H16)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 241 ; + } +#Aerosol type 13 mass mixing ratio +'Aerosol type 13 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 13 ; + } +#Aerosol type 14 mass mixing ratio +'Aerosol type 14 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 14 ; + } +#SO4 aerosol precursor mass mixing ratio +'SO4 aerosol precursor mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'Water vapour mixing ratio for hydrophilic aerosols in mode 1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'Water vapour mixing ratio for hydrophilic aerosols in mode 2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 30 ; + } +#DMS surface emission +'DMS surface emission' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'Water vapour mixing ratio for hydrophilic aerosols in mode 3' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'Water vapour mixing ratio for hydrophilic aerosols in mode 4' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 45 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 55 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 56 ; + } +#Wildfire Flux of Ethane (C2H6) +'Wildfire Flux of Ethane (C2H6)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 118 ; + } +#Altitude of emitter +'Altitude of emitter' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 119 ; + } +#Altitude of plume top +'Altitude of plume top' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 120 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 1 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 2 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 3 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 4 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 5 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 6 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 7 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 8 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 9 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 10 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 11 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 12 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 13 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 14 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 15 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 16 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 17 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 18 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 19 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 20 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 21 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 22 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 23 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 24 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 25 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 26 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 27 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 28 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 29 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 30 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 31 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 32 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 33 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 34 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 35 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 36 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 37 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 38 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 39 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 40 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 41 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 42 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 43 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 44 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 45 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 46 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 47 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 48 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 49 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 50 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 51 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 52 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 53 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 54 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 55 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 56 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 57 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 58 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 59 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 60 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 61 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 62 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 63 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 64 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 65 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 66 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 67 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 68 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 69 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 70 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 71 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 72 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 73 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 74 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 75 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 76 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 77 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 78 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 79 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 80 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 81 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 82 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 83 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 84 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 85 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 86 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 87 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 88 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 89 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 90 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 91 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 92 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 93 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 94 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 95 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 96 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 97 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 98 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 99 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 100 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 101 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 102 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 103 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 104 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 105 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 106 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 107 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 108 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 109 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 110 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 111 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 112 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 113 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 114 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 115 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 116 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 117 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 118 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 119 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 120 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 121 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 122 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 123 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 124 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 125 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 126 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 127 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 128 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 129 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 130 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 131 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 132 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 133 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 134 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 135 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 136 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 137 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 138 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 139 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 140 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 141 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 142 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 143 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 144 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 145 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 146 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 147 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 148 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 149 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 150 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 151 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 152 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 153 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 154 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 155 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 156 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 157 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 158 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 159 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 160 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 161 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 162 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 163 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 164 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 165 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 166 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 167 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 168 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 169 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 170 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 171 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 172 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 173 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 174 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 175 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 176 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 177 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 178 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 179 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 180 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 181 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 182 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 183 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 184 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 185 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 186 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 187 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 188 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 189 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 190 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 191 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 192 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 193 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 194 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 195 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 196 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 197 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 198 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 199 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 200 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 201 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 202 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 203 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 204 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 205 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 206 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 207 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 208 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 209 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 210 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 211 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 212 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 213 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 214 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 215 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 216 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 217 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 218 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 219 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 220 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 221 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 222 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 223 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 224 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 225 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 226 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 227 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 228 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 229 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 230 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 231 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 232 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 233 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 234 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 235 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 236 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 237 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 238 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 239 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 240 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 241 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 242 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 243 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 244 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 245 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 246 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 247 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 248 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 249 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 250 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 251 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 252 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 253 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 254 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 255 ; + } +#Random pattern 1 for sppt +'Random pattern 1 for sppt' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 1 ; + } +#Random pattern 2 for sppt +'Random pattern 2 for sppt' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 2 ; + } +#Random pattern 3 for sppt +'Random pattern 3 for sppt' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 3 ; + } +#Random pattern 4 for sppt +'Random pattern 4 for sppt' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 4 ; + } +#Random pattern 5 for sppt +'Random pattern 5 for sppt' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 5 ; + } +# Cosine of solar zenith angle +' Cosine of solar zenith angle' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 1 ; + } +# UV biologically effective dose +' UV biologically effective dose' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 2 ; + } +# UV biologically effective dose clear-sky +' UV biologically effective dose clear-sky' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 3 ; + } +# Total surface UV spectral flux (280-285 nm) +' Total surface UV spectral flux (280-285 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 4 ; + } +# Total surface UV spectral flux (285-290 nm) +' Total surface UV spectral flux (285-290 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 5 ; + } +# Total surface UV spectral flux (290-295 nm) +' Total surface UV spectral flux (290-295 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 6 ; + } +# Total surface UV spectral flux (295-300 nm) +' Total surface UV spectral flux (295-300 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 7 ; + } +# Total surface UV spectral flux (300-305 nm) +' Total surface UV spectral flux (300-305 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 8 ; + } +# Total surface UV spectral flux (305-310 nm) +' Total surface UV spectral flux (305-310 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 9 ; + } +# Total surface UV spectral flux (310-315 nm) +' Total surface UV spectral flux (310-315 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 10 ; + } +# Total surface UV spectral flux (315-320 nm) +' Total surface UV spectral flux (315-320 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 11 ; + } +# Total surface UV spectral flux (320-325 nm) +' Total surface UV spectral flux (320-325 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 12 ; + } +# Total surface UV spectral flux (325-330 nm) +' Total surface UV spectral flux (325-330 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 13 ; + } +# Total surface UV spectral flux (330-335 nm) +' Total surface UV spectral flux (330-335 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 14 ; + } +# Total surface UV spectral flux (335-340 nm) +' Total surface UV spectral flux (335-340 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 15 ; + } +# Total surface UV spectral flux (340-345 nm) +' Total surface UV spectral flux (340-345 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 16 ; + } +# Total surface UV spectral flux (345-350 nm) +' Total surface UV spectral flux (345-350 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 17 ; + } +# Total surface UV spectral flux (350-355 nm) +' Total surface UV spectral flux (350-355 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 18 ; + } +# Total surface UV spectral flux (355-360 nm) +' Total surface UV spectral flux (355-360 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 19 ; + } +# Total surface UV spectral flux (360-365 nm) +' Total surface UV spectral flux (360-365 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 20 ; + } +# Total surface UV spectral flux (365-370 nm) +' Total surface UV spectral flux (365-370 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 21 ; + } +# Total surface UV spectral flux (370-375 nm) +' Total surface UV spectral flux (370-375 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 22 ; + } +# Total surface UV spectral flux (375-380 nm) +' Total surface UV spectral flux (375-380 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 23 ; + } +# Total surface UV spectral flux (380-385 nm) +' Total surface UV spectral flux (380-385 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 24 ; + } +# Total surface UV spectral flux (385-390 nm) +' Total surface UV spectral flux (385-390 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 25 ; + } +# Total surface UV spectral flux (390-395 nm) +' Total surface UV spectral flux (390-395 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 26 ; + } +# Total surface UV spectral flux (395-400 nm) +' Total surface UV spectral flux (395-400 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 27 ; + } +# Clear-sky surface UV spectral flux (280-285 nm) +' Clear-sky surface UV spectral flux (280-285 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 28 ; + } +# Clear-sky surface UV spectral flux (285-290 nm) +' Clear-sky surface UV spectral flux (285-290 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 29 ; + } +# Clear-sky surface UV spectral flux (290-295 nm) +' Clear-sky surface UV spectral flux (290-295 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 30 ; + } +# Clear-sky surface UV spectral flux (295-300 nm) +' Clear-sky surface UV spectral flux (295-300 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 31 ; + } +# Clear-sky surface UV spectral flux (300-305 nm) +' Clear-sky surface UV spectral flux (300-305 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 32 ; + } +# Clear-sky surface UV spectral flux (305-310 nm) +' Clear-sky surface UV spectral flux (305-310 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 33 ; + } +# Clear-sky surface UV spectral flux (310-315 nm) +' Clear-sky surface UV spectral flux (310-315 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 34 ; + } +# Clear-sky surface UV spectral flux (315-320 nm) +' Clear-sky surface UV spectral flux (315-320 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 35 ; + } +# Clear-sky surface UV spectral flux (320-325 nm) +' Clear-sky surface UV spectral flux (320-325 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 36 ; + } +# Clear-sky surface UV spectral flux (325-330 nm) +' Clear-sky surface UV spectral flux (325-330 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 37 ; + } +# Clear-sky surface UV spectral flux (330-335 nm) +' Clear-sky surface UV spectral flux (330-335 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 38 ; + } +# Clear-sky surface UV spectral flux (335-340 nm) +' Clear-sky surface UV spectral flux (335-340 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 39 ; + } +# Clear-sky surface UV spectral flux (340-345 nm) +' Clear-sky surface UV spectral flux (340-345 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 40 ; + } +# Clear-sky surface UV spectral flux (345-350 nm) +' Clear-sky surface UV spectral flux (345-350 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 41 ; + } +# Clear-sky surface UV spectral flux (350-355 nm) +' Clear-sky surface UV spectral flux (350-355 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 42 ; + } +# Clear-sky surface UV spectral flux (355-360 nm) +' Clear-sky surface UV spectral flux (355-360 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 43 ; + } +# Clear-sky surface UV spectral flux (360-365 nm) +' Clear-sky surface UV spectral flux (360-365 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 44 ; + } +# Clear-sky surface UV spectral flux (365-370 nm) +' Clear-sky surface UV spectral flux (365-370 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 45 ; + } +# Clear-sky surface UV spectral flux (370-375 nm) +' Clear-sky surface UV spectral flux (370-375 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 46 ; + } +# Clear-sky surface UV spectral flux (375-380 nm) +' Clear-sky surface UV spectral flux (375-380 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 47 ; + } +# Clear-sky surface UV spectral flux (380-385 nm) +' Clear-sky surface UV spectral flux (380-385 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 48 ; + } +# Clear-sky surface UV spectral flux (385-390 nm) +' Clear-sky surface UV spectral flux (385-390 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 49 ; + } +# Clear-sky surface UV spectral flux (390-395 nm) +' Clear-sky surface UV spectral flux (390-395 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 50 ; + } +# Clear-sky surface UV spectral flux (395-400 nm) +' Clear-sky surface UV spectral flux (395-400 nm)' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 51 ; + } +# Profile of optical thickness at 340 nm +' Profile of optical thickness at 340 nm' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 52 ; + } +# Source/gain of sea salt aerosol (0.03 - 0.5 um) +' Source/gain of sea salt aerosol (0.03 - 0.5 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 1 ; + } +# Source/gain of sea salt aerosol (0.5 - 5 um) +' Source/gain of sea salt aerosol (0.5 - 5 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 2 ; + } +# Source/gain of sea salt aerosol (5 - 20 um) +' Source/gain of sea salt aerosol (5 - 20 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 3 ; + } +# Dry deposition of sea salt aerosol (0.03 - 0.5 um) +' Dry deposition of sea salt aerosol (0.03 - 0.5 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 4 ; + } +# Dry deposition of sea salt aerosol (0.5 - 5 um) +' Dry deposition of sea salt aerosol (0.5 - 5 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 5 ; + } +# Dry deposition of sea salt aerosol (5 - 20 um) +' Dry deposition of sea salt aerosol (5 - 20 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 6 ; + } +# Sedimentation of sea salt aerosol (0.03 - 0.5 um) +' Sedimentation of sea salt aerosol (0.03 - 0.5 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 7 ; + } +# Sedimentation of sea salt aerosol (0.5 - 5 um) +' Sedimentation of sea salt aerosol (0.5 - 5 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 8 ; + } +# Sedimentation of sea salt aerosol (5 - 20 um) +' Sedimentation of sea salt aerosol (5 - 20 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 9 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation +' Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 10 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation +' Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 11 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation +' Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 12 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation +' Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 13 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation +' Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 14 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation +' Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 15 ; + } +# Negative fixer of sea salt aerosol (0.03 - 0.5 um) +' Negative fixer of sea salt aerosol (0.03 - 0.5 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 16 ; + } +# Negative fixer of sea salt aerosol (0.5 - 5 um) +' Negative fixer of sea salt aerosol (0.5 - 5 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 17 ; + } +# Negative fixer of sea salt aerosol (5 - 20 um) +' Negative fixer of sea salt aerosol (5 - 20 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 18 ; + } +# Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um) +' Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 19 ; + } +# Vertically integrated mass of sea salt aerosol (0.5 - 5 um) +' Vertically integrated mass of sea salt aerosol (0.5 - 5 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 20 ; + } +# Vertically integrated mass of sea salt aerosol (5 - 20 um) +' Vertically integrated mass of sea salt aerosol (5 - 20 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 21 ; + } +# Sea salt aerosol (0.03 - 0.5 um) optical depth +' Sea salt aerosol (0.03 - 0.5 um) optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 22 ; + } +# Sea salt aerosol (0.5 - 5 um) optical depth +' Sea salt aerosol (0.5 - 5 um) optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 23 ; + } +# Sea salt aerosol (5 - 20 um) optical depth +' Sea salt aerosol (5 - 20 um) optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 24 ; + } +# Source/gain of dust aerosol (0.03 - 0.55 um) +' Source/gain of dust aerosol (0.03 - 0.55 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 25 ; + } +# Source/gain of dust aerosol (0.55 - 9 um) +' Source/gain of dust aerosol (0.55 - 9 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 26 ; + } +# Source/gain of dust aerosol (9 - 20 um) +' Source/gain of dust aerosol (9 - 20 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 27 ; + } +# Dry deposition of dust aerosol (0.03 - 0.55 um) +' Dry deposition of dust aerosol (0.03 - 0.55 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 28 ; + } +# Dry deposition of dust aerosol (0.55 - 9 um) +' Dry deposition of dust aerosol (0.55 - 9 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 29 ; + } +# Dry deposition of dust aerosol (9 - 20 um) +' Dry deposition of dust aerosol (9 - 20 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 30 ; + } +# Sedimentation of dust aerosol (0.03 - 0.55 um) +' Sedimentation of dust aerosol (0.03 - 0.55 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 31 ; + } +# Sedimentation of dust aerosol (0.55 - 9 um) +' Sedimentation of dust aerosol (0.55 - 9 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 32 ; + } +# Sedimentation of dust aerosol (9 - 20 um) +' Sedimentation of dust aerosol (9 - 20 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 33 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation +' Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 34 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation +' Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 35 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation +' Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 36 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation +' Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 37 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation +' Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 38 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by convective precipitation +' Wet deposition of dust aerosol (9 - 20 um) by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 39 ; + } +# Negative fixer of dust aerosol (0.03 - 0.55 um) +' Negative fixer of dust aerosol (0.03 - 0.55 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 40 ; + } +# Negative fixer of dust aerosol (0.55 - 9 um) +' Negative fixer of dust aerosol (0.55 - 9 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 41 ; + } +# Negative fixer of dust aerosol (9 - 20 um) +' Negative fixer of dust aerosol (9 - 20 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 42 ; + } +# Vertically integrated mass of dust aerosol (0.03 - 0.55 um) +' Vertically integrated mass of dust aerosol (0.03 - 0.55 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 43 ; + } +# Vertically integrated mass of dust aerosol (0.55 - 9 um) +' Vertically integrated mass of dust aerosol (0.55 - 9 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 44 ; + } +# Vertically integrated mass of dust aerosol (9 - 20 um) +' Vertically integrated mass of dust aerosol (9 - 20 um)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 45 ; + } +# Dust aerosol (0.03 - 0.55 um) optical depth +' Dust aerosol (0.03 - 0.55 um) optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 46 ; + } +# Dust aerosol (0.55 - 9 um) optical depth +' Dust aerosol (0.55 - 9 um) optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 47 ; + } +# Dust aerosol (9 - 20 um) optical depth +' Dust aerosol (9 - 20 um) optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 48 ; + } +# Source/gain of hydrophobic organic matter aerosol +' Source/gain of hydrophobic organic matter aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 49 ; + } +# Source/gain of hydrophilic organic matter aerosol +' Source/gain of hydrophilic organic matter aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 50 ; + } +# Dry deposition of hydrophobic organic matter aerosol +' Dry deposition of hydrophobic organic matter aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 51 ; + } +# Dry deposition of hydrophilic organic matter aerosol +' Dry deposition of hydrophilic organic matter aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 52 ; + } +# Sedimentation of hydrophobic organic matter aerosol +' Sedimentation of hydrophobic organic matter aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 53 ; + } +# Sedimentation of hydrophilic organic matter aerosol +' Sedimentation of hydrophilic organic matter aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 54 ; + } +# Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation +' Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 55 ; + } +# Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation +' Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 56 ; + } +# Wet deposition of hydrophobic organic matter aerosol by convective precipitation +' Wet deposition of hydrophobic organic matter aerosol by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 57 ; + } +# Wet deposition of hydrophilic organic matter aerosol by convective precipitation +' Wet deposition of hydrophilic organic matter aerosol by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 58 ; + } +# Negative fixer of hydrophobic organic matter aerosol +' Negative fixer of hydrophobic organic matter aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 59 ; + } +# Negative fixer of hydrophilic organic matter aerosol +' Negative fixer of hydrophilic organic matter aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 60 ; + } +# Vertically integrated mass of hydrophobic organic matter aerosol +' Vertically integrated mass of hydrophobic organic matter aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 61 ; + } +# Vertically integrated mass of hydrophilic organic matter aerosol +' Vertically integrated mass of hydrophilic organic matter aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 62 ; + } +# Hydrophobic organic matter aerosol optical depth +' Hydrophobic organic matter aerosol optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 63 ; + } +# Hydrophilic organic matter aerosol optical depth +' Hydrophilic organic matter aerosol optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 64 ; + } +# Source/gain of hydrophobic black carbon aerosol +' Source/gain of hydrophobic black carbon aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 65 ; + } +# Source/gain of hydrophilic black carbon aerosol +' Source/gain of hydrophilic black carbon aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 66 ; + } +# Dry deposition of hydrophobic black carbon aerosol +' Dry deposition of hydrophobic black carbon aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 67 ; + } +# Dry deposition of hydrophilic black carbon aerosol +' Dry deposition of hydrophilic black carbon aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 68 ; + } +# Sedimentation of hydrophobic black carbon aerosol +' Sedimentation of hydrophobic black carbon aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 69 ; + } +# Sedimentation of hydrophilic black carbon aerosol +' Sedimentation of hydrophilic black carbon aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 70 ; + } +# Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation +' Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 71 ; + } +# Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation +' Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 72 ; + } +# Wet deposition of hydrophobic black carbon aerosol by convective precipitation +' Wet deposition of hydrophobic black carbon aerosol by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 73 ; + } +# Wet deposition of hydrophilic black carbon aerosol by convective precipitation +' Wet deposition of hydrophilic black carbon aerosol by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 74 ; + } +# Negative fixer of hydrophobic black carbon aerosol +' Negative fixer of hydrophobic black carbon aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 75 ; + } +# Negative fixer of hydrophilic black carbon aerosol +' Negative fixer of hydrophilic black carbon aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 76 ; + } +# Vertically integrated mass of hydrophobic black carbon aerosol +' Vertically integrated mass of hydrophobic black carbon aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 77 ; + } +# Vertically integrated mass of hydrophilic black carbon aerosol +' Vertically integrated mass of hydrophilic black carbon aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 78 ; + } +# Hydrophobic black carbon aerosol optical depth +' Hydrophobic black carbon aerosol optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 79 ; + } +# Hydrophilic black carbon aerosol optical depth +' Hydrophilic black carbon aerosol optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 80 ; + } +# Source/gain of sulphate aerosol +' Source/gain of sulphate aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 81 ; + } +# Dry deposition of sulphate aerosol +' Dry deposition of sulphate aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 82 ; + } +# Sedimentation of sulphate aerosol +' Sedimentation of sulphate aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 83 ; + } +# Wet deposition of sulphate aerosol by large-scale precipitation +' Wet deposition of sulphate aerosol by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 84 ; + } +# Wet deposition of sulphate aerosol by convective precipitation +' Wet deposition of sulphate aerosol by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 85 ; + } +# Negative fixer of sulphate aerosol +' Negative fixer of sulphate aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 86 ; + } +# Vertically integrated mass of sulphate aerosol +' Vertically integrated mass of sulphate aerosol' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 87 ; + } +# Sulphate aerosol optical depth +' Sulphate aerosol optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 88 ; + } +#Accumulated total aerosol optical depth at 550 nm +'Accumulated total aerosol optical depth at 550 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 89 ; + } +#Effective (snow effect included) UV visible albedo for direct radiation +'Effective (snow effect included) UV visible albedo for direct radiation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 90 ; + } +#10 metre wind speed dust emission potential +'10 metre wind speed dust emission potential' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 91 ; + } +#10 metre wind gustiness dust emission potential +'10 metre wind gustiness dust emission potential' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 92 ; + } +#Profile of total aerosol optical depth at 532 nm +'Profile of total aerosol optical depth at 532 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 93 ; + } +#Profile of natural (sea-salt and dust) aerosol optical depth at 532 nm +'Profile of natural (sea-salt and dust) aerosol optical depth at 532 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 94 ; + } +#Profile of antropogenic (black carbon, organic matter, sulphate) aerosol optical depth at 532 nm +'Profile of antropogenic (black carbon, organic matter, sulphate) aerosol optical depth at 532 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 95 ; + } +#Total absorption aerosol optical depth at 340 nm +'Total absorption aerosol optical depth at 340 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 96 ; + } +#Total absorption aerosol optical depth at 355 nm +'Total absorption aerosol optical depth at 355 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 97 ; + } +#Total absorption aerosol optical depth at 380 nm +'Total absorption aerosol optical depth at 380 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 98 ; + } +#Total absorption aerosol optical depth at 400 nm +'Total absorption aerosol optical depth at 400 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 99 ; + } +#Total absorption aerosol optical depth at 440 nm +'Total absorption aerosol optical depth at 440 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 100 ; + } +#Total absorption aerosol optical depth at 469 nm +'Total absorption aerosol optical depth at 469 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 101 ; + } +#Total absorption aerosol optical depth at 500 nm +'Total absorption aerosol optical depth at 500 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 102 ; + } +#Total absorption aerosol optical depth at 532 nm +'Total absorption aerosol optical depth at 532 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 103 ; + } +#Total absorption aerosol optical depth at 550 nm +'Total absorption aerosol optical depth at 550 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 104 ; + } +#Total absorption aerosol optical depth at 645 nm +'Total absorption aerosol optical depth at 645 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 105 ; + } +#Total absorption aerosol optical depth at 670 nm +'Total absorption aerosol optical depth at 670 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 106 ; + } +#Total absorption aerosol optical depth at 800 nm +'Total absorption aerosol optical depth at 800 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 107 ; + } +#Total absorption aerosol optical depth at 858 nm +'Total absorption aerosol optical depth at 858 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 108 ; + } +#Total absorption aerosol optical depth at 865 nm +'Total absorption aerosol optical depth at 865 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 109 ; + } +#Total absorption aerosol optical depth at 1020 nm +'Total absorption aerosol optical depth at 1020 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 110 ; + } +#Total absorption aerosol optical depth at 1064 nm +'Total absorption aerosol optical depth at 1064 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 111 ; + } +#Total absorption aerosol optical depth at 1240 nm +'Total absorption aerosol optical depth at 1240 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 112 ; + } +#Total absorption aerosol optical depth at 1640 nm +'Total absorption aerosol optical depth at 1640 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 113 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 114 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 115 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 116 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 117 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 118 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 119 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 120 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 121 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 122 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 123 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 124 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 125 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 126 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 127 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 128 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 129 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 130 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 131 ; + } +#Single scattering albedo at 340 nm +'Single scattering albedo at 340 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 132 ; + } +#Single scattering albedo at 355 nm +'Single scattering albedo at 355 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 133 ; + } +#Single scattering albedo at 380 nm +'Single scattering albedo at 380 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 134 ; + } +#Single scattering albedo at 400 nm +'Single scattering albedo at 400 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 135 ; + } +#Single scattering albedo at 440 nm +'Single scattering albedo at 440 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 136 ; + } +#Single scattering albedo at 469 nm +'Single scattering albedo at 469 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 137 ; + } +#Single scattering albedo at 500 nm +'Single scattering albedo at 500 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 138 ; + } +#Single scattering albedo at 532 nm +'Single scattering albedo at 532 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 139 ; + } +#Single scattering albedo at 550 nm +'Single scattering albedo at 550 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 140 ; + } +#Single scattering albedo at 645 nm +'Single scattering albedo at 645 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 141 ; + } +#Single scattering albedo at 670 nm +'Single scattering albedo at 670 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 142 ; + } +#Single scattering albedo at 800 nm +'Single scattering albedo at 800 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 143 ; + } +#Single scattering albedo at 858 nm +'Single scattering albedo at 858 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 144 ; + } +#Single scattering albedo at 865 nm +'Single scattering albedo at 865 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 145 ; + } +#Single scattering albedo at 1020 nm +'Single scattering albedo at 1020 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 146 ; + } +#Single scattering albedo at 1064 nm +'Single scattering albedo at 1064 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 147 ; + } +#Single scattering albedo at 1240 nm +'Single scattering albedo at 1240 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 148 ; + } +#Single scattering albedo at 1640 nm +'Single scattering albedo at 1640 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 149 ; + } +#Assimetry factor at 340 nm +'Assimetry factor at 340 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 150 ; + } +#Assimetry factor at 355 nm +'Assimetry factor at 355 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 151 ; + } +#Assimetry factor at 380 nm +'Assimetry factor at 380 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 152 ; + } +#Assimetry factor at 400 nm +'Assimetry factor at 400 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 153 ; + } +#Assimetry factor at 440 nm +'Assimetry factor at 440 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 154 ; + } +#Assimetry factor at 469 nm +'Assimetry factor at 469 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 155 ; + } +#Assimetry factor at 500 nm +'Assimetry factor at 500 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 156 ; + } +#Assimetry factor at 532 nm +'Assimetry factor at 532 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 157 ; + } +#Assimetry factor at 550 nm +'Assimetry factor at 550 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 158 ; + } +#Assimetry factor at 645 nm +'Assimetry factor at 645 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 159 ; + } +#Assimetry factor at 670 nm +'Assimetry factor at 670 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 160 ; + } +#Assimetry factor at 800 nm +'Assimetry factor at 800 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 161 ; + } +#Assimetry factor at 858 nm +'Assimetry factor at 858 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 162 ; + } +#Assimetry factor at 865 nm +'Assimetry factor at 865 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 163 ; + } +#Assimetry factor at 1020 nm +'Assimetry factor at 1020 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 164 ; + } +#Assimetry factor at 1064 nm +'Assimetry factor at 1064 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 165 ; + } +#Assimetry factor at 1240 nm +'Assimetry factor at 1240 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 166 ; + } +#Assimetry factor at 1640 nm +'Assimetry factor at 1640 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 167 ; + } +#Source/gain of sulphur dioxide +'Source/gain of sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 168 ; + } +#Dry deposition of sulphur dioxide +'Dry deposition of sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 169 ; + } +#Sedimentation of sulphur dioxide +'Sedimentation of sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 170 ; + } +#Wet deposition of sulphur dioxide by large-scale precipitation +'Wet deposition of sulphur dioxide by large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 171 ; + } +#Wet deposition of sulphur dioxide by convective precipitation +'Wet deposition of sulphur dioxide by convective precipitation' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 172 ; + } +#Negative fixer of sulphur dioxide +'Negative fixer of sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 173 ; + } +#Vertically integrated mass of sulphur dioxide +'Vertically integrated mass of sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 174 ; + } +#Sulphur dioxide optical depth +'Sulphur dioxide optical depth' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 175 ; + } +#Total absorption aerosol optical depth at 2130 nm +'Total absorption aerosol optical depth at 2130 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 176 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm +'Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 177 ; + } +#Single scattering albedo at 2130 nm +'Single scattering albedo at 2130 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 178 ; + } +#Assimetry factor at 2130 nm +'Assimetry factor at 2130 nm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 179 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 1 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 2 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 3 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 4 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 5 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 6 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 7 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 8 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 9 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 10 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 11 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 12 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 13 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 14 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 15 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 16 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 17 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 18 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 19 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 20 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 21 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 22 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 23 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 24 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 25 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 26 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 27 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 28 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 29 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 30 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 31 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 32 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 33 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 34 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 35 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 36 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 37 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 38 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 39 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 40 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 41 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 42 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 43 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 44 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 45 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 46 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 47 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 48 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 49 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 50 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 51 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 52 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 53 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 54 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 55 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 56 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 57 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 58 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 59 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 60 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 61 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 62 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 63 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 64 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 65 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 66 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 67 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 68 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 69 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 70 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 71 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 72 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 73 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 74 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 75 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 76 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 77 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 78 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 79 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 80 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 81 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 82 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 83 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 84 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 85 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 86 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 87 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 88 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 89 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 90 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 91 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 92 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 93 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 94 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 95 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 96 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 97 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 98 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 99 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 100 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 101 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 102 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 103 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 104 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 105 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 106 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 107 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 108 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 109 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 110 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 111 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 112 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 113 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 114 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 115 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 116 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 117 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 118 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 119 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 120 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 121 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 122 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 123 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 124 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 125 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 126 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 127 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 128 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 129 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 130 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 131 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 132 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 133 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 134 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 135 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 136 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 137 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 138 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 139 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 140 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 141 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 142 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 143 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 144 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 145 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 146 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 147 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 148 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 149 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 150 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 151 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 152 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 153 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 154 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 155 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 156 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 157 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 158 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 159 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 160 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 161 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 162 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 163 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 164 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 165 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 166 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 167 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 168 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 169 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 170 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 171 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 172 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 173 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 174 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 175 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 176 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 177 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 178 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 179 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 180 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 181 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 182 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 183 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 184 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 185 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 186 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 187 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 188 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 189 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 190 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 191 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 192 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 193 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 194 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 195 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 196 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 197 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 198 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 199 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 200 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 201 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 202 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 203 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 204 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 205 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 206 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 207 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 208 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 209 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 210 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 211 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 212 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 213 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 214 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 215 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 216 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 217 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 218 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 219 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 220 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 221 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 222 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 223 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 224 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 225 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 226 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 227 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 228 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 229 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 230 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 231 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 232 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 233 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 234 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 235 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 236 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 237 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 238 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 239 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 240 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 241 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 242 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 243 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 244 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 245 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 246 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 247 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 248 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 249 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 250 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 251 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 252 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 253 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 254 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 255 ; + } +#Total sky direct solar radiation at surface +'Total sky direct solar radiation at surface' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; + } +#Clear-sky direct solar radiation at surface +'Clear-sky direct solar radiation at surface' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 22 ; + } +#Cloud base height +'Cloud base height' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; + } +#Zero degree level +'Zero degree level' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 24 ; + } +#Horizontal visibility +'Horizontal visibility' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 25 ; + } +#Maximum temperature at 2 metres in the last 3 hours +'Maximum temperature at 2 metres in the last 3 hours' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + lengthOfTimeRange = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#Minimum temperature at 2 metres in the last 3 hours +'Minimum temperature at 2 metres in the last 3 hours' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 103 ; + lengthOfTimeRange = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#10 metre wind gust in the last 3 hours +'10 metre wind gust in the last 3 hours' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; + } +#Soil wetness index in layer 1 +'Soil wetness index in layer 1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 40 ; + } +#Soil wetness index in layer 2 +'Soil wetness index in layer 2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 41 ; + } +#Soil wetness index in layer 3 +'Soil wetness index in layer 3' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 42 ; + } +#Soil wetness index in layer 4 +'Soil wetness index in layer 4' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 43 ; + } +#Total column rain water +'Total column rain water' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; + } +#Total column snow water +'Total column snow water' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; + } +#Canopy cover fraction +'Canopy cover fraction' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 91 ; + } +#Soil texture fraction +'Soil texture fraction' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 92 ; + } +#Volumetric soil moisture +'Volumetric soil moisture' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 93 ; + } +#Ice temperature +'Ice temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; + } +#Surface solar radiation downward clear-sky +'Surface solar radiation downward clear-sky' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; + } +#Surface thermal radiation downward clear-sky +'Surface thermal radiation downward clear-sky' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; + } +#Surface short wave-effective total cloudiness +'Surface short wave-effective total cloudiness' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 248 ; + } +#100 metre wind speed +'100 metre wind speed' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 249 ; + } +#Irrigation fraction +'Irrigation fraction' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 250 ; + } +#Potential evaporation +'Potential evaporation' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; + } +#Irrigation +'Irrigation' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 252 ; + } +#Surface long wave-effective total cloudiness +'Surface long wave-effective total cloudiness' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 255 ; + } +#Total sky direct solar radiation at surface (variable resolution) +'Total sky direct solar radiation at surface (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 21 ; + } +#Clear-sky direct solar radiation at surface (variable resolution) +'Clear-sky direct solar radiation at surface (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 22 ; + } +#Flood alert levels +'Flood alert levels' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 10 ; + } +#Cross sectional area of flow in channel +'Cross sectional area of flow in channel' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 11 ; + } +#Sideflow into river channel +'Sideflow into river channel' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 12 ; + } +#Discharge +'Discharge' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 13 ; + } +#River storage of water +'River storage of water' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 14 ; + } +#Floodplain storage of water +'Floodplain storage of water' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 15 ; + } +#Flooded area fraction +'Flooded area fraction' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 16 ; + } +#Days since last rain +'Days since last rain' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 17 ; + } +#Molnau-Bissell frost index +'Molnau-Bissell frost index' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 18 ; + } +#Maximum discharge in 15 day forecast +'Maximum discharge in 15 day forecast' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 19 ; + } +#Depth of water on soil surface +'Depth of water on soil surface' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 20 ; + } +#Upstreams accumulated precipitation +'Upstreams accumulated precipitation' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 21 ; + } +#Upstreams accumulated snow melt +'Upstreams accumulated snow melt' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 22 ; + } +#Maximum rain in 24 hours over the 15 day forecast +'Maximum rain in 24 hours over the 15 day forecast' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 23 ; + } +#Groundwater +'Groundwater' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 25 ; + } +#Snow depth at elevation bands +'Snow depth at elevation bands' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 26 ; + } +#Accumulated precipitation over the 15 day forecast +'Accumulated precipitation over the 15 day forecast' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 27 ; + } +#Stream function gradient +'Stream function gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 1 ; + } +#Velocity potential gradient +'Velocity potential gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 2 ; + } +#Potential temperature gradient +'Potential temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature gradient +'Equivalent potential temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature gradient +'Saturated equivalent potential temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 5 ; + } +#U component of divergent wind gradient +'U component of divergent wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 11 ; + } +#V component of divergent wind gradient +'V component of divergent wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 12 ; + } +#U component of rotational wind gradient +'U component of rotational wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 13 ; + } +#V component of rotational wind gradient +'V component of rotational wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature gradient +'Unbalanced component of temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure gradient +'Unbalanced component of logarithm of surface pressure gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence gradient +'Unbalanced component of divergence gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'Reserved for future unbalanced components' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 25 ; + } +#Lake cover gradient +'Lake cover gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 26 ; + } +#Low vegetation cover gradient +'Low vegetation cover gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 27 ; + } +#High vegetation cover gradient +'High vegetation cover gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 28 ; + } +#Type of low vegetation gradient +'Type of low vegetation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 29 ; + } +#Type of high vegetation gradient +'Type of high vegetation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 30 ; + } +#Sea-ice cover gradient +'Sea-ice cover gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 31 ; + } +#Snow albedo gradient +'Snow albedo gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 32 ; + } +#Snow density gradient +'Snow density gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 33 ; + } +#Sea surface temperature gradient +'Sea surface temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 34 ; + } +#Ice surface temperature layer 1 gradient +'Ice surface temperature layer 1 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 35 ; + } +#Ice surface temperature layer 2 gradient +'Ice surface temperature layer 2 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 36 ; + } +#Ice surface temperature layer 3 gradient +'Ice surface temperature layer 3 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 37 ; + } +#Ice surface temperature layer 4 gradient +'Ice surface temperature layer 4 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 gradient +'Volumetric soil water layer 1 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 gradient +'Volumetric soil water layer 2 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 gradient +'Volumetric soil water layer 3 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 gradient +'Volumetric soil water layer 4 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 42 ; + } +#Soil type gradient +'Soil type gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 43 ; + } +#Snow evaporation gradient +'Snow evaporation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 44 ; + } +#Snowmelt gradient +'Snowmelt gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 45 ; + } +#Solar duration gradient +'Solar duration gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 46 ; + } +#Direct solar radiation gradient +'Direct solar radiation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress gradient +'Magnitude of surface stress gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 48 ; + } +#10 metre wind gust gradient +'10 metre wind gust gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction gradient +'Large-scale precipitation fraction gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature gradient +'Maximum 2 metre temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature gradient +'Minimum 2 metre temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 52 ; + } +#Montgomery potential gradient +'Montgomery potential gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 53 ; + } +#Pressure gradient +'Pressure gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'Mean 2 metre temperature in the last 24 hours gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours gradient +'Mean 2 metre dewpoint temperature in the last 24 hours gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface gradient +'Downward UV radiation at the surface gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface gradient +'Photosynthetically active radiation at the surface gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 58 ; + } +#Convective available potential energy gradient +'Convective available potential energy gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 59 ; + } +#Potential vorticity gradient +'Potential vorticity gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 60 ; + } +#Total precipitation from observations gradient +'Total precipitation from observations gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 61 ; + } +#Observation count gradient +'Observation count gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'Start time for skin temperature difference' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'Finish time for skin temperature difference' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'Skin temperature difference' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'Leaf area index, low vegetation' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'Leaf area index, high vegetation' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'Minimum stomatal resistance, low vegetation' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'Minimum stomatal resistance, high vegetation' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'Biome cover, low vegetation' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'Biome cover, high vegetation' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 71 ; + } +#Total column liquid water +'Total column liquid water' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 78 ; + } +#Total column ice water +'Total column ice water' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 79 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 80 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 81 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 82 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 83 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 84 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 85 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 86 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 87 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 88 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 89 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 90 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 91 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 92 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 93 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 94 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 95 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 96 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 97 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 98 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 99 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 100 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 101 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 102 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 103 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 104 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 105 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 106 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 107 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 108 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 109 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 110 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 111 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 112 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 113 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 114 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 115 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 116 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 117 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 118 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 119 ; + } +#Experimental product +'Experimental product' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres gradient +'Maximum temperature at 2 metres gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres gradient +'Minimum temperature at 2 metres gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 122 ; + } +#10 metre wind gust in the last 6 hours gradient +'10 metre wind gust in the last 6 hours gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 123 ; + } +#Vertically integrated total energy +'Vertically integrated total energy' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'Generic parameter for sensitive area prediction' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 126 ; + } +#Atmospheric tide gradient +'Atmospheric tide gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 127 ; + } +#Budget values gradient +'Budget values gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 128 ; + } +#Geopotential gradient +'Geopotential gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 129 ; + } +#Temperature gradient +'Temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 130 ; + } +#U component of wind gradient +'U component of wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 131 ; + } +#V component of wind gradient +'V component of wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 132 ; + } +#Specific humidity gradient +'Specific humidity gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 133 ; + } +#Surface pressure gradient +'Surface pressure gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 134 ; + } +#vertical velocity (pressure) gradient +'vertical velocity (pressure) gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 135 ; + } +#Total column water gradient +'Total column water gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 136 ; + } +#Total column water vapour gradient +'Total column water vapour gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 137 ; + } +#Vorticity (relative) gradient +'Vorticity (relative) gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 138 ; + } +#Soil temperature level 1 gradient +'Soil temperature level 1 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 gradient +'Soil wetness level 1 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 140 ; + } +#Snow depth gradient +'Snow depth gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) gradient +'Stratiform precipitation (Large-scale precipitation) gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 142 ; + } +#Convective precipitation gradient +'Convective precipitation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) gradient +'Snowfall (convective + stratiform) gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation gradient +'Boundary layer dissipation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux gradient +'Surface sensible heat flux gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 146 ; + } +#Surface latent heat flux gradient +'Surface latent heat flux gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 147 ; + } +#Charnock gradient +'Charnock gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 148 ; + } +#Surface net radiation gradient +'Surface net radiation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 149 ; + } +#Top net radiation gradient +'Top net radiation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 150 ; + } +#Mean sea level pressure gradient +'Mean sea level pressure gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure gradient +'Logarithm of surface pressure gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 152 ; + } +#Short-wave heating rate gradient +'Short-wave heating rate gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 153 ; + } +#Long-wave heating rate gradient +'Long-wave heating rate gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 154 ; + } +#Divergence gradient +'Divergence gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 155 ; + } +#Height gradient +'Height gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 156 ; + } +#Relative humidity gradient +'Relative humidity gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure gradient +'Tendency of surface pressure gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 158 ; + } +#Boundary layer height gradient +'Boundary layer height gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 159 ; + } +#Standard deviation of orography gradient +'Standard deviation of orography gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography gradient +'Anisotropy of sub-gridscale orography gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography gradient +'Angle of sub-gridscale orography gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography gradient +'Slope of sub-gridscale orography gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 163 ; + } +#Total cloud cover gradient +'Total cloud cover gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 164 ; + } +#10 metre U wind component gradient +'10 metre U wind component gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 165 ; + } +#10 metre V wind component gradient +'10 metre V wind component gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 166 ; + } +#2 metre temperature gradient +'2 metre temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 167 ; + } +#2 metre dewpoint temperature gradient +'2 metre dewpoint temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 168 ; + } +#Surface solar radiation downwards gradient +'Surface solar radiation downwards gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 gradient +'Soil temperature level 2 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 gradient +'Soil wetness level 2 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 171 ; + } +#Land-sea mask gradient +'Land-sea mask gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 172 ; + } +#Surface roughness gradient +'Surface roughness gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 173 ; + } +#Albedo gradient +'Albedo gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards gradient +'Surface thermal radiation downwards gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 175 ; + } +#Surface net solar radiation gradient +'Surface net solar radiation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation gradient +'Surface net thermal radiation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 177 ; + } +#Top net solar radiation gradient +'Top net solar radiation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 178 ; + } +#Top net thermal radiation gradient +'Top net thermal radiation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 179 ; + } +#East-West surface stress gradient +'East-West surface stress gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 180 ; + } +#North-South surface stress gradient +'North-South surface stress gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 181 ; + } +#Evaporation gradient +'Evaporation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 gradient +'Soil temperature level 3 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 gradient +'Soil wetness level 3 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 184 ; + } +#Convective cloud cover gradient +'Convective cloud cover gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 185 ; + } +#Low cloud cover gradient +'Low cloud cover gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 186 ; + } +#Medium cloud cover gradient +'Medium cloud cover gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 187 ; + } +#High cloud cover gradient +'High cloud cover gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 188 ; + } +#Sunshine duration gradient +'Sunshine duration gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance gradient +'East-West component of sub-gridscale orographic variance gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance gradient +'North-South component of sub-gridscale orographic variance gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance gradient +'North-West/South-East component of sub-gridscale orographic variance gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance gradient +'North-East/South-West component of sub-gridscale orographic variance gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 193 ; + } +#Brightness temperature gradient +'Brightness temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress gradient +'Longitudinal component of gravity wave stress gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress gradient +'Meridional component of gravity wave stress gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation gradient +'Gravity wave dissipation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 197 ; + } +#Skin reservoir content gradient +'Skin reservoir content gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 198 ; + } +#Vegetation fraction gradient +'Vegetation fraction gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography gradient +'Variance of sub-gridscale orography gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing gradient +'Maximum temperature at 2 metres since previous post-processing gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing gradient +'Minimum temperature at 2 metres since previous post-processing gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio gradient +'Ozone mass mixing ratio gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights gradient +'Precipitation analysis weights gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 204 ; + } +#Runoff gradient +'Runoff gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 205 ; + } +#Total column ozone gradient +'Total column ozone gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 206 ; + } +#10 metre wind speed gradient +'10 metre wind speed gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 207 ; + } +#Top net solar radiation, clear sky gradient +'Top net solar radiation, clear sky gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky gradient +'Top net thermal radiation, clear sky gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky gradient +'Surface net solar radiation, clear sky gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky gradient +'Surface net thermal radiation, clear sky gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation gradient +'TOA incident solar radiation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation gradient +'Diabatic heating by radiation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion gradient +'Diabatic heating by vertical diffusion gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection gradient +'Diabatic heating by cumulus convection gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation gradient +'Diabatic heating large-scale condensation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind gradient +'Vertical diffusion of zonal wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind gradient +'Vertical diffusion of meridional wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency gradient +'East-West gravity wave drag tendency gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency gradient +'North-South gravity wave drag tendency gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind gradient +'Convective tendency of zonal wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind gradient +'Convective tendency of meridional wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity gradient +'Vertical diffusion of humidity gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection gradient +'Humidity tendency by cumulus convection gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation gradient +'Humidity tendency by large-scale condensation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity gradient +'Change from removal of negative humidity gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 227 ; + } +#Total precipitation gradient +'Total precipitation gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress gradient +'Instantaneous X surface stress gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress gradient +'Instantaneous Y surface stress gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux gradient +'Instantaneous surface heat flux gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux gradient +'Instantaneous moisture flux gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 232 ; + } +#Apparent surface humidity gradient +'Apparent surface humidity gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat gradient +'Logarithm of surface roughness length for heat gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 234 ; + } +#Skin temperature gradient +'Skin temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 gradient +'Soil temperature level 4 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 gradient +'Soil wetness level 4 gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 237 ; + } +#Temperature of snow layer gradient +'Temperature of snow layer gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 238 ; + } +#Convective snowfall gradient +'Convective snowfall gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 239 ; + } +#Large scale snowfall gradient +'Large scale snowfall gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency gradient +'Accumulated cloud fraction tendency gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency gradient +'Accumulated liquid water tendency gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 242 ; + } +#Forecast albedo gradient +'Forecast albedo gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 243 ; + } +#Forecast surface roughness gradient +'Forecast surface roughness gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat gradient +'Forecast logarithm of surface roughness for heat gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content gradient +'Specific cloud liquid water content gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 246 ; + } +#Specific cloud ice water content gradient +'Specific cloud ice water content gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 247 ; + } +#Cloud cover gradient +'Cloud cover gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency gradient +'Accumulated ice water tendency gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 249 ; + } +#Ice age gradient +'Ice age gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature gradient +'Adiabatic tendency of temperature gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity gradient +'Adiabatic tendency of humidity gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind gradient +'Adiabatic tendency of zonal wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind gradient +'Adiabatic tendency of meridional wind gradient' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 255 ; + } +#Top solar radiation upward +'Top solar radiation upward' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 208 ; + } +#Top thermal radiation upward +'Top thermal radiation upward' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 209 ; + } +#Top solar radiation upward, clear sky +'Top solar radiation upward, clear sky' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 210 ; + } +#Top thermal radiation upward, clear sky +'Top thermal radiation upward, clear sky' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 211 ; + } +#Cloud liquid water +'Cloud liquid water' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 212 ; + } +#Cloud fraction +'Cloud fraction' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 213 ; + } +#Diabatic heating by radiation +'Diabatic heating by radiation' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion +'Diabatic heating by vertical diffusion' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection +'Diabatic heating by cumulus convection' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 216 ; + } +#Diabatic heating by large-scale condensation +'Diabatic heating by large-scale condensation' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind +'Vertical diffusion of zonal wind' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind +'Vertical diffusion of meridional wind' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag +'East-West gravity wave drag' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag +'North-South gravity wave drag' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 221 ; + } +#Vertical diffusion of humidity +'Vertical diffusion of humidity' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection +'Humidity tendency by cumulus convection' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation +'Humidity tendency by large-scale condensation' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 226 ; + } +#Adiabatic tendency of temperature +'Adiabatic tendency of temperature' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 228 ; + } +#Adiabatic tendency of humidity +'Adiabatic tendency of humidity' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 229 ; + } +#Adiabatic tendency of zonal wind +'Adiabatic tendency of zonal wind' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 230 ; + } +#Adiabatic tendency of meridional wind +'Adiabatic tendency of meridional wind' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 231 ; + } +#Mean vertical velocity +'Mean vertical velocity' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 232 ; + } +#2m temperature anomaly of at least +2K +'2m temperature anomaly of at least +2K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 1 ; + } +#2m temperature anomaly of at least +1K +'2m temperature anomaly of at least +1K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 2 ; + } +#2m temperature anomaly of at least 0K +'2m temperature anomaly of at least 0K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 3 ; + } +#2m temperature anomaly of at most -1K +'2m temperature anomaly of at most -1K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 4 ; + } +#2m temperature anomaly of at most -2K +'2m temperature anomaly of at most -2K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 5 ; + } +#Total precipitation anomaly of at least 20 mm +'Total precipitation anomaly of at least 20 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 6 ; + } +#Total precipitation anomaly of at least 10 mm +'Total precipitation anomaly of at least 10 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 7 ; + } +#Total precipitation anomaly of at least 0 mm +'Total precipitation anomaly of at least 0 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 8 ; + } +#Surface temperature anomaly of at least 0K +'Surface temperature anomaly of at least 0K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 9 ; + } +#Mean sea level pressure anomaly of at least 0 Pa +'Mean sea level pressure anomaly of at least 0 Pa' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 10 ; + } +#Height of 0 degree isotherm probability +'Height of 0 degree isotherm probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 15 ; + } +#Height of snowfall limit probability +'Height of snowfall limit probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 16 ; + } +#Showalter index probability +'Showalter index probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 17 ; + } +#Whiting index probability +'Whiting index probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 18 ; + } +#Temperature anomaly less than -2 K +'Temperature anomaly less than -2 K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 20 ; + } +#Temperature anomaly of at least +2 K +'Temperature anomaly of at least +2 K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 21 ; + } +#Temperature anomaly less than -8 K +'Temperature anomaly less than -8 K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 22 ; + } +#Temperature anomaly less than -4 K +'Temperature anomaly less than -4 K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 23 ; + } +#Temperature anomaly greater than +4 K +'Temperature anomaly greater than +4 K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 24 ; + } +#Temperature anomaly greater than +8 K +'Temperature anomaly greater than +8 K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 25 ; + } +#10 metre wind gust probability +'10 metre wind gust probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 49 ; + } +#Convective available potential energy probability +'Convective available potential energy probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 59 ; + } +#Total precipitation less than 0.1 mm +'Total precipitation less than 0.1 mm' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 64 ; + } +#Total precipitation rate less than 1 mm/day +'Total precipitation rate less than 1 mm/day' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 65 ; + } +#Total precipitation rate of at least 3 mm/day +'Total precipitation rate of at least 3 mm/day' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 66 ; + } +#Total precipitation rate of at least 5 mm/day +'Total precipitation rate of at least 5 mm/day' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 67 ; + } +#10 metre Wind speed of at least 10 m/s +'10 metre Wind speed of at least 10 m/s' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 68 ; + } +#10 metre Wind speed of at least 15 m/s +'10 metre Wind speed of at least 15 m/s' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 69 ; + } +#10 metre Wind gust of at least 25 m/s +'10 metre Wind gust of at least 25 m/s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfLowerLimit = 25 ; + productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2 metre temperature less than 273.15 K +'2 metre temperature less than 273.15 K' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 73 ; + } +#Significant wave height of at least 2 m +'Significant wave height of at least 2 m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 101 ; + probabilityType = 3 ; + scaleFactorOfLowerLimit = 0 ; + productDefinitionTemplateNumber = 5 ; + scaledValueOfLowerLimit = 2 ; + } +#Significant wave height of at least 4 m +'Significant wave height of at least 4 m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 101 ; + productDefinitionTemplateNumber = 5 ; + scaleFactorOfLowerLimit = 0 ; + scaledValueOfLowerLimit = 4 ; + probabilityType = 3 ; + } +#Significant wave height of at least 6 m +'Significant wave height of at least 6 m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; + probabilityType = 3 ; + scaleFactorOfLowerLimit = 0 ; + scaledValueOfLowerLimit = 6 ; + } +#Significant wave height of at least 8 m +'Significant wave height of at least 8 m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 101 ; + productDefinitionTemplateNumber = 5 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; + scaledValueOfLowerLimit = 8 ; + } +#Mean wave period of at least 8 s +'Mean wave period of at least 8 s' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 78 ; + } +#Mean wave period of at least 10 s +'Mean wave period of at least 10 s' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 79 ; + } +#Mean wave period of at least 12 s +'Mean wave period of at least 12 s' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 80 ; + } +#Mean wave period of at least 15 s +'Mean wave period of at least 15 s' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 81 ; + } +#Geopotential probability +'Geopotential probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 129 ; + } +#Temperature anomaly probability +'Temperature anomaly probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 130 ; + } +#2 metre temperature probability +'2 metre temperature probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 139 ; + } +#Snowfall (convective + stratiform) probability +'Snowfall (convective + stratiform) probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 144 ; + } +#Total precipitation probability +'Total precipitation probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 151 ; + } +#Total cloud cover probability +'Total cloud cover probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 164 ; + } +#10 metre speed probability +'10 metre speed probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 165 ; + } +#2 metre temperature probability +'2 metre temperature probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 167 ; + } +#Maximum 2 metre temperature probability +'Maximum 2 metre temperature probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 201 ; + } +#Minimum 2 metre temperature probability +'Minimum 2 metre temperature probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 202 ; + } +#Total precipitation probability +'Total precipitation probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 228 ; + } +#Significant wave height probability +'Significant wave height probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 229 ; + } +#Mean wave period probability +'Mean wave period probability' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 232 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 255 ; + } +#10 metre wind gust index +'10 metre wind gust index' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 49 ; + } +#Snowfall index +'Snowfall index' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 144 ; + } +#10 metre speed index +'10 metre speed index' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 165 ; + } +#2 metre temperature index +'2 metre temperature index' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 167 ; + } +#Maximum temperature at 2 metres index +'Maximum temperature at 2 metres index' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres index +'Minimum temperature at 2 metres index' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 202 ; + } +#Total precipitation index +'Total precipitation index' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 228 ; + } +#2m temperature probability less than -10 C +'2m temperature probability less than -10 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 1 ; + } +#2m temperature probability less than -5 C +'2m temperature probability less than -5 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 2 ; + } +#2m temperature probability less than 0 C +'2m temperature probability less than 0 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 3 ; + } +#2m temperature probability less than 5 C +'2m temperature probability less than 5 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 4 ; + } +#2m temperature probability less than 10 C +'2m temperature probability less than 10 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 5 ; + } +#2m temperature probability greater than 25 C +'2m temperature probability greater than 25 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 6 ; + } +#2m temperature probability greater than 30 C +'2m temperature probability greater than 30 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 7 ; + } +#2m temperature probability greater than 35 C +'2m temperature probability greater than 35 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 8 ; + } +#2m temperature probability greater than 40 C +'2m temperature probability greater than 40 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 9 ; + } +#2m temperature probability greater than 45 C +'2m temperature probability greater than 45 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 10 ; + } +#Minimum 2 metre temperature probability less than -10 C +'Minimum 2 metre temperature probability less than -10 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 11 ; + } +#Minimum 2 metre temperature probability less than -5 C +'Minimum 2 metre temperature probability less than -5 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 12 ; + } +#Minimum 2 metre temperature probability less than 0 C +'Minimum 2 metre temperature probability less than 0 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 13 ; + } +#Minimum 2 metre temperature probability less than 5 C +'Minimum 2 metre temperature probability less than 5 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 14 ; + } +#Minimum 2 metre temperature probability less than 10 C +'Minimum 2 metre temperature probability less than 10 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 15 ; + } +#Maximum 2 metre temperature probability greater than 25 C +'Maximum 2 metre temperature probability greater than 25 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 16 ; + } +#Maximum 2 metre temperature probability greater than 30 C +'Maximum 2 metre temperature probability greater than 30 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 17 ; + } +#Maximum 2 metre temperature probability greater than 35 C +'Maximum 2 metre temperature probability greater than 35 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 18 ; + } +#Maximum 2 metre temperature probability greater than 40 C +'Maximum 2 metre temperature probability greater than 40 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 19 ; + } +#Maximum 2 metre temperature probability greater than 45 C +'Maximum 2 metre temperature probability greater than 45 C' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 20 ; + } +#10 metre wind speed probability of at least 10 m/s +'10 metre wind speed probability of at least 10 m/s' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 21 ; + } +#10 metre wind speed probability of at least 15 m/s +'10 metre wind speed probability of at least 15 m/s' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 22 ; + } +#10 metre wind speed probability of at least 20 m/s +'10 metre wind speed probability of at least 20 m/s' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 23 ; + } +#10 metre wind speed probability of at least 35 m/s +'10 metre wind speed probability of at least 35 m/s' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 24 ; + } +#10 metre wind speed probability of at least 50 m/s +'10 metre wind speed probability of at least 50 m/s' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 25 ; + } +#10 metre wind gust probability of at least 20 m/s +'10 metre wind gust probability of at least 20 m/s' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 26 ; + } +#10 metre wind gust probability of at least 35 m/s +'10 metre wind gust probability of at least 35 m/s' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 27 ; + } +#10 metre wind gust probability of at least 50 m/s +'10 metre wind gust probability of at least 50 m/s' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 28 ; + } +#10 metre wind gust probability of at least 75 m/s +'10 metre wind gust probability of at least 75 m/s' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 29 ; + } +#10 metre wind gust probability of at least 100 m/s +'10 metre wind gust probability of at least 100 m/s' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 30 ; + } +#Total precipitation probability of at least 1 mm +'Total precipitation probability of at least 1 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 31 ; + } +#Total precipitation probability of at least 5 mm +'Total precipitation probability of at least 5 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 32 ; + } +#Total precipitation probability of at least 10 mm +'Total precipitation probability of at least 10 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 33 ; + } +#Total precipitation probability of at least 20 mm +'Total precipitation probability of at least 20 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 34 ; + } +#Total precipitation probability of at least 40 mm +'Total precipitation probability of at least 40 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 35 ; + } +#Total precipitation probability of at least 60 mm +'Total precipitation probability of at least 60 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 36 ; + } +#Total precipitation probability of at least 80 mm +'Total precipitation probability of at least 80 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 37 ; + } +#Total precipitation probability of at least 100 mm +'Total precipitation probability of at least 100 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 38 ; + } +#Total precipitation probability of at least 150 mm +'Total precipitation probability of at least 150 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 39 ; + } +#Total precipitation probability of at least 200 mm +'Total precipitation probability of at least 200 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 40 ; + } +#Total precipitation probability of at least 300 mm +'Total precipitation probability of at least 300 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 41 ; + } +#Snowfall probability of at least 1 mm +'Snowfall probability of at least 1 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 42 ; + } +#Snowfall probability of at least 5 mm +'Snowfall probability of at least 5 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 43 ; + } +#Snowfall probability of at least 10 mm +'Snowfall probability of at least 10 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 44 ; + } +#Snowfall probability of at least 20 mm +'Snowfall probability of at least 20 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 45 ; + } +#Snowfall probability of at least 40 mm +'Snowfall probability of at least 40 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 46 ; + } +#Snowfall probability of at least 60 mm +'Snowfall probability of at least 60 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 47 ; + } +#Snowfall probability of at least 80 mm +'Snowfall probability of at least 80 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 48 ; + } +#Snowfall probability of at least 100 mm +'Snowfall probability of at least 100 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 49 ; + } +#Snowfall probability of at least 150 mm +'Snowfall probability of at least 150 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 50 ; + } +#Snowfall probability of at least 200 mm +'Snowfall probability of at least 200 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 51 ; + } +#Snowfall probability of at least 300 mm +'Snowfall probability of at least 300 mm' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 52 ; + } +#Total Cloud Cover probability greater than 10% +'Total Cloud Cover probability greater than 10%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 53 ; + } +#Total Cloud Cover probability greater than 20% +'Total Cloud Cover probability greater than 20%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 54 ; + } +#Total Cloud Cover probability greater than 30% +'Total Cloud Cover probability greater than 30%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 55 ; + } +#Total Cloud Cover probability greater than 40% +'Total Cloud Cover probability greater than 40%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 56 ; + } +#Total Cloud Cover probability greater than 50% +'Total Cloud Cover probability greater than 50%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 57 ; + } +#Total Cloud Cover probability greater than 60% +'Total Cloud Cover probability greater than 60%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 58 ; + } +#Total Cloud Cover probability greater than 70% +'Total Cloud Cover probability greater than 70%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 59 ; + } +#Total Cloud Cover probability greater than 80% +'Total Cloud Cover probability greater than 80%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 60 ; + } +#Total Cloud Cover probability greater than 90% +'Total Cloud Cover probability greater than 90%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 61 ; + } +#Total Cloud Cover probability greater than 99% +'Total Cloud Cover probability greater than 99%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 62 ; + } +#High Cloud Cover probability greater than 10% +'High Cloud Cover probability greater than 10%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 63 ; + } +#High Cloud Cover probability greater than 20% +'High Cloud Cover probability greater than 20%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 64 ; + } +#High Cloud Cover probability greater than 30% +'High Cloud Cover probability greater than 30%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 65 ; + } +#High Cloud Cover probability greater than 40% +'High Cloud Cover probability greater than 40%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 66 ; + } +#High Cloud Cover probability greater than 50% +'High Cloud Cover probability greater than 50%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 67 ; + } +#High Cloud Cover probability greater than 60% +'High Cloud Cover probability greater than 60%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 68 ; + } +#High Cloud Cover probability greater than 70% +'High Cloud Cover probability greater than 70%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 69 ; + } +#High Cloud Cover probability greater than 80% +'High Cloud Cover probability greater than 80%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 70 ; + } +#High Cloud Cover probability greater than 90% +'High Cloud Cover probability greater than 90%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 71 ; + } +#High Cloud Cover probability greater than 99% +'High Cloud Cover probability greater than 99%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 72 ; + } +#Medium Cloud Cover probability greater than 10% +'Medium Cloud Cover probability greater than 10%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 73 ; + } +#Medium Cloud Cover probability greater than 20% +'Medium Cloud Cover probability greater than 20%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 74 ; + } +#Medium Cloud Cover probability greater than 30% +'Medium Cloud Cover probability greater than 30%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 75 ; + } +#Medium Cloud Cover probability greater than 40% +'Medium Cloud Cover probability greater than 40%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 76 ; + } +#Medium Cloud Cover probability greater than 50% +'Medium Cloud Cover probability greater than 50%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 77 ; + } +#Medium Cloud Cover probability greater than 60% +'Medium Cloud Cover probability greater than 60%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 78 ; + } +#Medium Cloud Cover probability greater than 70% +'Medium Cloud Cover probability greater than 70%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 79 ; + } +#Medium Cloud Cover probability greater than 80% +'Medium Cloud Cover probability greater than 80%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 80 ; + } +#Medium Cloud Cover probability greater than 90% +'Medium Cloud Cover probability greater than 90%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 81 ; + } +#Medium Cloud Cover probability greater than 99% +'Medium Cloud Cover probability greater than 99%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 82 ; + } +#Low Cloud Cover probability greater than 10% +'Low Cloud Cover probability greater than 10%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 83 ; + } +#Low Cloud Cover probability greater than 20% +'Low Cloud Cover probability greater than 20%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 84 ; + } +#Low Cloud Cover probability greater than 30% +'Low Cloud Cover probability greater than 30%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 85 ; + } +#Low Cloud Cover probability greater than 40% +'Low Cloud Cover probability greater than 40%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 86 ; + } +#Low Cloud Cover probability greater than 50% +'Low Cloud Cover probability greater than 50%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 87 ; + } +#Low Cloud Cover probability greater than 60% +'Low Cloud Cover probability greater than 60%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 88 ; + } +#Low Cloud Cover probability greater than 70% +'Low Cloud Cover probability greater than 70%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 89 ; + } +#Low Cloud Cover probability greater than 80% +'Low Cloud Cover probability greater than 80%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 90 ; + } +#Low Cloud Cover probability greater than 90% +'Low Cloud Cover probability greater than 90%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 91 ; + } +#Low Cloud Cover probability greater than 99% +'Low Cloud Cover probability greater than 99%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 92 ; + } +#Maximum of significant wave height +'Maximum of significant wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 200 ; + } +#Period corresponding to maximum individual wave height +'Period corresponding to maximum individual wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; + } +#Maximum individual wave height +'Maximum individual wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; + } +#Model bathymetry +'Model bathymetry' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; + } +#Mean wave period based on first moment +'Mean wave period based on first moment' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; + } +#Mean wave period based on second moment +'Mean wave period based on second moment' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 221 ; + } +#Wave spectral directional width +'Wave spectral directional width' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; + } +#Mean wave period based on first moment for wind waves +'Mean wave period based on first moment for wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; + } +#Mean wave period based on second moment for wind waves +'Mean wave period based on second moment for wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; + } +#Wave spectral directional width for wind waves +'Wave spectral directional width for wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; + } +#Mean wave period based on first moment for swell +'Mean wave period based on first moment for swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; + } +#Mean wave period based on second moment for swell +'Mean wave period based on second moment for swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; + } +#Wave spectral directional width for swell +'Wave spectral directional width for swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; + } +#Significant height of combined wind waves and swell +'Significant height of combined wind waves and swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Mean wave direction +'Mean wave direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Peak period of 1D spectra +'Peak period of 1D spectra' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 231 ; + } +#Mean wave period +'Mean wave period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + } +#Coefficient of drag with waves +'Coefficient of drag with waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; + } +#Significant height of wind waves +'Significant height of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean direction of wind waves +'Mean direction of wind waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 235 ; + } +#Mean period of wind waves +'Mean period of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Significant height of total swell +'Significant height of total swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; + } +#Mean direction of total swell +'Mean direction of total swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 238 ; + } +#Mean period of total swell +'Mean period of total swell' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; + } +#Standard deviation wave height +'Standard deviation wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 240 ; + } +#Mean of 10 metre wind speed +'Mean of 10 metre wind speed' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 241 ; + } +#Mean wind direction +'Mean wind direction' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 242 ; + } +#Standard deviation of 10 metre wind speed +'Standard deviation of 10 metre wind speed' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 243 ; + } +#Mean square slope of waves +'Mean square slope of waves' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; + } +#10 metre wind speed +'10 metre wind speed' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; + } +#Altimeter wave height +'Altimeter wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; + } +#Altimeter corrected wave height +'Altimeter corrected wave height' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; + } +#Altimeter range relative correction +'Altimeter range relative correction' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; + } +#10 metre wind direction +'10 metre wind direction' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; + } +#2D wave spectra (multiple) +'2D wave spectra (multiple)' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 250 ; + } +#2D wave spectra (single) +'2D wave spectra (single)' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 251 ; + } +#Wave spectral kurtosis +'Wave spectral kurtosis' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; + } +#Benjamin-Feir index +'Benjamin-Feir index' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; + } +#Wave spectral peakedness +'Wave spectral peakedness' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 255 ; + } +#Ocean potential temperature +'Ocean potential temperature' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 129 ; + } +#Ocean salinity +'Ocean salinity' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 130 ; + } +#Ocean potential density +'Ocean potential density' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 131 ; + } +#Ocean U wind component +'Ocean U wind component' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 133 ; + } +#Ocean V wind component +'Ocean V wind component' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 134 ; + } +#Ocean W wind component +'Ocean W wind component' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 135 ; + } +#Richardson number +'Richardson number' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 137 ; + } +#U*V product +'U*V product' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 139 ; + } +#U*T product +'U*T product' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 140 ; + } +#V*T product +'V*T product' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 141 ; + } +#U*U product +'U*U product' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 142 ; + } +#V*V product +'V*V product' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 143 ; + } +#UV - U~V~ +'UV - U~V~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 144 ; + } +#UT - U~T~ +'UT - U~T~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 145 ; + } +#VT - V~T~ +'VT - V~T~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 146 ; + } +#UU - U~U~ +'UU - U~U~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 147 ; + } +#VV - V~V~ +'VV - V~V~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 148 ; + } +#Sea level +'Sea level' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 152 ; + } +#Barotropic stream function +'Barotropic stream function' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 153 ; + } +#Mixed layer depth +'Mixed layer depth' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 154 ; + } +#Depth +'Depth' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 155 ; + } +#U stress +'U stress' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 168 ; + } +#V stress +'V stress' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 169 ; + } +#Turbulent kinetic energy input +'Turbulent kinetic energy input' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 170 ; + } +#Net surface heat flux +'Net surface heat flux' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 171 ; + } +#Surface solar radiation +'Surface solar radiation' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 172 ; + } +#P-E +'P-E' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 173 ; + } +#Diagnosed sea surface temperature error +'Diagnosed sea surface temperature error' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 180 ; + } +#Heat flux correction +'Heat flux correction' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 181 ; + } +#Observed sea surface temperature +'Observed sea surface temperature' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 182 ; + } +#Observed heat flux +'Observed heat flux' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 183 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 255 ; + } +#In situ Temperature +'In situ Temperature' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 128 ; + } +#Ocean potential temperature +'Ocean potential temperature' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 129 ; + } +#Salinity +'Salinity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 130 ; + } +#Ocean current zonal component +'Ocean current zonal component' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 131 ; + } +#Ocean current meridional component +'Ocean current meridional component' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 132 ; + } +#Ocean current vertical component +'Ocean current vertical component' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 133 ; + } +#Modulus of strain rate tensor +'Modulus of strain rate tensor' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 134 ; + } +#Vertical viscosity +'Vertical viscosity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 135 ; + } +#Vertical diffusivity +'Vertical diffusivity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 136 ; + } +#Bottom level Depth +'Bottom level Depth' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 137 ; + } +#Sigma-theta +'Sigma-theta' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 138 ; + } +#Richardson number +'Richardson number' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 139 ; + } +#UV product +'UV product' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 140 ; + } +#UT product +'UT product' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 141 ; + } +#VT product +'VT product' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 142 ; + } +#UU product +'UU product' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 143 ; + } +#VV product +'VV product' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 144 ; + } +#Sea level +'Sea level' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 145 ; + } +#Sea level previous timestep +'Sea level previous timestep' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 146 ; + } +#Barotropic stream function +'Barotropic stream function' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 147 ; + } +#Mixed layer depth +'Mixed layer depth' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 148 ; + } +#Bottom Pressure (equivalent height) +'Bottom Pressure (equivalent height)' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 149 ; + } +#Steric height +'Steric height' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 150 ; + } +#Curl of Wind Stress +'Curl of Wind Stress' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 151 ; + } +#Divergence of wind stress +'Divergence of wind stress' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 152 ; + } +#U stress +'U stress' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 153 ; + } +#V stress +'V stress' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 154 ; + } +#Turbulent kinetic energy input +'Turbulent kinetic energy input' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 155 ; + } +#Net surface heat flux +'Net surface heat flux' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 156 ; + } +#Absorbed solar radiation +'Absorbed solar radiation' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 157 ; + } +#Precipitation - evaporation +'Precipitation - evaporation' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 158 ; + } +#Specified sea surface temperature +'Specified sea surface temperature' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 159 ; + } +#Specified surface heat flux +'Specified surface heat flux' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 160 ; + } +#Diagnosed sea surface temperature error +'Diagnosed sea surface temperature error' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 161 ; + } +#Heat flux correction +'Heat flux correction' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 162 ; + } +#20 degrees isotherm depth +'20 degrees isotherm depth' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 163 ; + } +#Average potential temperature in the upper 300m +'Average potential temperature in the upper 300m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 164 ; + } +#Vertically integrated zonal velocity (previous time step) +'Vertically integrated zonal velocity (previous time step)' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 165 ; + } +#Vertically Integrated meridional velocity (previous time step) +'Vertically Integrated meridional velocity (previous time step)' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 166 ; + } +#Vertically integrated zonal volume transport +'Vertically integrated zonal volume transport' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 167 ; + } +#Vertically integrated meridional volume transport +'Vertically integrated meridional volume transport' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 168 ; + } +#Vertically integrated zonal heat transport +'Vertically integrated zonal heat transport' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 169 ; + } +#Vertically integrated meridional heat transport +'Vertically integrated meridional heat transport' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 170 ; + } +#U velocity maximum +'U velocity maximum' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 171 ; + } +#Depth of the velocity maximum +'Depth of the velocity maximum' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 172 ; + } +#Salinity maximum +'Salinity maximum' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 173 ; + } +#Depth of salinity maximum +'Depth of salinity maximum' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 174 ; + } +#Average salinity in the upper 300m +'Average salinity in the upper 300m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 175 ; + } +#Layer Thickness at scalar points +'Layer Thickness at scalar points' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 176 ; + } +#Layer Thickness at vector points +'Layer Thickness at vector points' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 177 ; + } +#Potential temperature increment +'Potential temperature increment' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 178 ; + } +#Potential temperature analysis error +'Potential temperature analysis error' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 179 ; + } +#Background potential temperature +'Background potential temperature' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 180 ; + } +#Analysed potential temperature +'Analysed potential temperature' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 181 ; + } +#Potential temperature background error +'Potential temperature background error' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 182 ; + } +#Analysed salinity +'Analysed salinity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 183 ; + } +#Salinity increment +'Salinity increment' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 184 ; + } +#Estimated Bias in Temperature +'Estimated Bias in Temperature' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 185 ; + } +#Estimated Bias in Salinity +'Estimated Bias in Salinity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 186 ; + } +#Zonal Velocity increment (from balance operator) +'Zonal Velocity increment (from balance operator)' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 187 ; + } +#Meridional Velocity increment (from balance operator) +'Meridional Velocity increment (from balance operator)' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 188 ; + } +#Salinity increment (from salinity data) +'Salinity increment (from salinity data)' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 190 ; + } +#Salinity analysis error +'Salinity analysis error' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 191 ; + } +#Background Salinity +'Background Salinity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 192 ; + } +#Salinity background error +'Salinity background error' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 194 ; + } +#Estimated temperature bias from assimilation +'Estimated temperature bias from assimilation' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 199 ; + } +#Estimated salinity bias from assimilation +'Estimated salinity bias from assimilation' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 200 ; + } +#Temperature increment from relaxation term +'Temperature increment from relaxation term' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 201 ; + } +#Salinity increment from relaxation term +'Salinity increment from relaxation term' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 202 ; + } +#Bias in the zonal pressure gradient (applied) +'Bias in the zonal pressure gradient (applied)' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 203 ; + } +#Bias in the meridional pressure gradient (applied) +'Bias in the meridional pressure gradient (applied)' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 204 ; + } +#Estimated temperature bias from relaxation +'Estimated temperature bias from relaxation' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 205 ; + } +#Estimated salinity bias from relaxation +'Estimated salinity bias from relaxation' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 206 ; + } +#First guess bias in temperature +'First guess bias in temperature' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 207 ; + } +#First guess bias in salinity +'First guess bias in salinity' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 208 ; + } +#Applied bias in pressure +'Applied bias in pressure' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 209 ; + } +#FG bias in pressure +'FG bias in pressure' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 210 ; + } +#Bias in temperature(applied) +'Bias in temperature(applied)' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 211 ; + } +#Bias in salinity (applied) +'Bias in salinity (applied)' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 212 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 255 ; + } +#10 metre wind gust during averaging time +'10 metre wind gust during averaging time' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 49 ; + } +#vertical velocity (pressure) +'vertical velocity (pressure)' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 135 ; + } +#Precipitable water content +'Precipitable water content' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 137 ; + } +#Soil wetness level 1 +'Soil wetness level 1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 140 ; + } +#Snow depth +'Snow depth' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 141 ; + } +#Large-scale precipitation +'Large-scale precipitation' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 142 ; + } +#Convective precipitation +'Convective precipitation' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 143 ; + } +#Snowfall +'Snowfall' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 144 ; + } +#Height +'Height' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 156 ; + } +#Relative humidity +'Relative humidity' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 157 ; + } +#Soil wetness level 2 +'Soil wetness level 2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 171 ; + } +#East-West surface stress +'East-West surface stress' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 180 ; + } +#North-South surface stress +'North-South surface stress' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 181 ; + } +#Evaporation +'Evaporation' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 182 ; + } +#Soil wetness level 3 +'Soil wetness level 3' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 184 ; + } +#Skin reservoir content +'Skin reservoir content' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 198 ; + } +#Percentage of vegetation +'Percentage of vegetation' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 199 ; + } +#Maximum temperature at 2 metres during averaging time +'Maximum temperature at 2 metres during averaging time' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres during averaging time +'Minimum temperature at 2 metres during averaging time' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 202 ; + } +#Runoff +'Runoff' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 205 ; + } +#Standard deviation of geopotential +'Standard deviation of geopotential' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 206 ; + } +#Covariance of temperature and geopotential +'Covariance of temperature and geopotential' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 207 ; + } +#Standard deviation of temperature +'Standard deviation of temperature' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 208 ; + } +#Covariance of specific humidity and geopotential +'Covariance of specific humidity and geopotential' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 209 ; + } +#Covariance of specific humidity and temperature +'Covariance of specific humidity and temperature' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 210 ; + } +#Standard deviation of specific humidity +'Standard deviation of specific humidity' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 211 ; + } +#Covariance of U component and geopotential +'Covariance of U component and geopotential' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 212 ; + } +#Covariance of U component and temperature +'Covariance of U component and temperature' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 213 ; + } +#Covariance of U component and specific humidity +'Covariance of U component and specific humidity' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 214 ; + } +#Standard deviation of U velocity +'Standard deviation of U velocity' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 215 ; + } +#Covariance of V component and geopotential +'Covariance of V component and geopotential' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 216 ; + } +#Covariance of V component and temperature +'Covariance of V component and temperature' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 217 ; + } +#Covariance of V component and specific humidity +'Covariance of V component and specific humidity' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 218 ; + } +#Covariance of V component and U component +'Covariance of V component and U component' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 219 ; + } +#Standard deviation of V component +'Standard deviation of V component' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 220 ; + } +#Covariance of W component and geopotential +'Covariance of W component and geopotential' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 221 ; + } +#Covariance of W component and temperature +'Covariance of W component and temperature' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 222 ; + } +#Covariance of W component and specific humidity +'Covariance of W component and specific humidity' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 223 ; + } +#Covariance of W component and U component +'Covariance of W component and U component' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 224 ; + } +#Covariance of W component and V component +'Covariance of W component and V component' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 225 ; + } +#Standard deviation of vertical velocity +'Standard deviation of vertical velocity' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 226 ; + } +#Instantaneous surface heat flux +'Instantaneous surface heat flux' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 231 ; + } +#Convective snowfall +'Convective snowfall' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 239 ; + } +#Large scale snowfall +'Large scale snowfall' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 240 ; + } +#Cloud liquid water content +'Cloud liquid water content' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 241 ; + } +#Cloud cover +'Cloud cover' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 242 ; + } +#Forecast albedo +'Forecast albedo' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 243 ; + } +#10 metre wind speed +'10 metre wind speed' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 246 ; + } +#Momentum flux +'Momentum flux' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 247 ; + } +#Gravity wave dissipation flux +'Gravity wave dissipation flux' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 249 ; + } +#Heaviside beta function +'Heaviside beta function' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 254 ; + } +#Surface geopotential +'Surface geopotential' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 51 ; + } +#Vertical integral of mass of atmosphere +'Vertical integral of mass of atmosphere' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 53 ; + } +#Vertical integral of temperature +'Vertical integral of temperature' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 54 ; + } +#Vertical integral of water vapour +'Vertical integral of water vapour' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 55 ; + } +#Vertical integral of cloud liquid water +'Vertical integral of cloud liquid water' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 56 ; + } +#Vertical integral of cloud frozen water +'Vertical integral of cloud frozen water' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 57 ; + } +#Vertical integral of ozone +'Vertical integral of ozone' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 58 ; + } +#Vertical integral of kinetic energy +'Vertical integral of kinetic energy' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 59 ; + } +#Vertical integral of thermal energy +'Vertical integral of thermal energy' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 60 ; + } +#Vertical integral of potential+internal energy +'Vertical integral of potential+internal energy' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 61 ; + } +#Vertical integral of potential+internal+latent energy +'Vertical integral of potential+internal+latent energy' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 62 ; + } +#Vertical integral of total energy +'Vertical integral of total energy' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 63 ; + } +#Vertical integral of energy conversion +'Vertical integral of energy conversion' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 64 ; + } +#Vertical integral of eastward mass flux +'Vertical integral of eastward mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 65 ; + } +#Vertical integral of northward mass flux +'Vertical integral of northward mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 66 ; + } +#Vertical integral of eastward kinetic energy flux +'Vertical integral of eastward kinetic energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 67 ; + } +#Vertical integral of northward kinetic energy flux +'Vertical integral of northward kinetic energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 68 ; + } +#Vertical integral of eastward heat flux +'Vertical integral of eastward heat flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 69 ; + } +#Vertical integral of northward heat flux +'Vertical integral of northward heat flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 70 ; + } +#Vertical integral of eastward water vapour flux +'Vertical integral of eastward water vapour flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; + } +#Vertical integral of northward water vapour flux +'Vertical integral of northward water vapour flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; + } +#Vertical integral of eastward geopotential flux +'Vertical integral of eastward geopotential flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 73 ; + } +#Vertical integral of northward geopotential flux +'Vertical integral of northward geopotential flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 74 ; + } +#Vertical integral of eastward total energy flux +'Vertical integral of eastward total energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 75 ; + } +#Vertical integral of northward total energy flux +'Vertical integral of northward total energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 76 ; + } +#Vertical integral of eastward ozone flux +'Vertical integral of eastward ozone flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 77 ; + } +#Vertical integral of northward ozone flux +'Vertical integral of northward ozone flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 78 ; + } +#Vertical integral of divergence of mass flux +'Vertical integral of divergence of mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 81 ; + } +#Vertical integral of divergence of kinetic energy flux +'Vertical integral of divergence of kinetic energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 82 ; + } +#Vertical integral of divergence of thermal energy flux +'Vertical integral of divergence of thermal energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 83 ; + } +#Vertical integral of divergence of moisture flux +'Vertical integral of divergence of moisture flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 84 ; + } +#Vertical integral of divergence of geopotential flux +'Vertical integral of divergence of geopotential flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 85 ; + } +#Vertical integral of divergence of total energy flux +'Vertical integral of divergence of total energy flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 86 ; + } +#Vertical integral of divergence of ozone flux +'Vertical integral of divergence of ozone flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 87 ; + } +#Tendency of short wave radiation +'Tendency of short wave radiation' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; + } +#Tendency of long wave radiation +'Tendency of long wave radiation' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; + } +#Tendency of clear sky short wave radiation +'Tendency of clear sky short wave radiation' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; + } +#Tendency of clear sky long wave radiation +'Tendency of clear sky long wave radiation' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; + } +#Updraught mass flux +'Updraught mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; + } +#Downdraught mass flux +'Downdraught mass flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; + } +#Updraught detrainment rate +'Updraught detrainment rate' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; + } +#Downdraught detrainment rate +'Downdraught detrainment rate' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; + } +#Total precipitation flux +'Total precipitation flux' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; + } +#Turbulent diffusion coefficient for heat +'Turbulent diffusion coefficient for heat' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; + } +#Tendency of temperature due to physics +'Tendency of temperature due to physics' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; + } +#Tendency of specific humidity due to physics +'Tendency of specific humidity due to physics' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; + } +#Tendency of u component due to physics +'Tendency of u component due to physics' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; + } +#Tendency of v component due to physics +'Tendency of v component due to physics' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; + } +#Variance of geopotential +'Variance of geopotential' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 206 ; + } +#Covariance of geopotential/temperature +'Covariance of geopotential/temperature' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 207 ; + } +#Variance of temperature +'Variance of temperature' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 208 ; + } +#Covariance of geopotential/specific humidity +'Covariance of geopotential/specific humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 209 ; + } +#Covariance of temperature/specific humidity +'Covariance of temperature/specific humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 210 ; + } +#Variance of specific humidity +'Variance of specific humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 211 ; + } +#Covariance of u component/geopotential +'Covariance of u component/geopotential' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 212 ; + } +#Covariance of u component/temperature +'Covariance of u component/temperature' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 213 ; + } +#Covariance of u component/specific humidity +'Covariance of u component/specific humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 214 ; + } +#Variance of u component +'Variance of u component' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 215 ; + } +#Covariance of v component/geopotential +'Covariance of v component/geopotential' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 216 ; + } +#Covariance of v component/temperature +'Covariance of v component/temperature' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 217 ; + } +#Covariance of v component/specific humidity +'Covariance of v component/specific humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 218 ; + } +#Covariance of v component/u component +'Covariance of v component/u component' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 219 ; + } +#Variance of v component +'Variance of v component' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 220 ; + } +#Covariance of omega/geopotential +'Covariance of omega/geopotential' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 221 ; + } +#Covariance of omega/temperature +'Covariance of omega/temperature' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 222 ; + } +#Covariance of omega/specific humidity +'Covariance of omega/specific humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 223 ; + } +#Covariance of omega/u component +'Covariance of omega/u component' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 224 ; + } +#Covariance of omega/v component +'Covariance of omega/v component' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 225 ; + } +#Variance of omega +'Variance of omega' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 226 ; + } +#Variance of surface pressure +'Variance of surface pressure' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 227 ; + } +#Variance of relative humidity +'Variance of relative humidity' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 229 ; + } +#Covariance of u component/ozone +'Covariance of u component/ozone' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 230 ; + } +#Covariance of v component/ozone +'Covariance of v component/ozone' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 231 ; + } +#Covariance of omega/ozone +'Covariance of omega/ozone' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 232 ; + } +#Variance of ozone +'Variance of ozone' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 233 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 255 ; + } +#Total soil moisture +'Total soil moisture' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 149 ; + } +#Soil wetness level 2 +'Soil wetness level 2' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 171 ; + } +#Top net thermal radiation +'Top net thermal radiation' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 179 ; + } +#Stream function anomaly +'Stream function anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 1 ; + } +#Velocity potential anomaly +'Velocity potential anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 2 ; + } +#Potential temperature anomaly +'Potential temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature anomaly +'Equivalent potential temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature anomaly +'Saturated equivalent potential temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 5 ; + } +#U component of divergent wind anomaly +'U component of divergent wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 11 ; + } +#V component of divergent wind anomaly +'V component of divergent wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 12 ; + } +#U component of rotational wind anomaly +'U component of rotational wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 13 ; + } +#V component of rotational wind anomaly +'V component of rotational wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature anomaly +'Unbalanced component of temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure anomaly +'Unbalanced component of logarithm of surface pressure anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence anomaly +'Unbalanced component of divergence anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 23 ; + } +#Lake cover anomaly +'Lake cover anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 26 ; + } +#Low vegetation cover anomaly +'Low vegetation cover anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 27 ; + } +#High vegetation cover anomaly +'High vegetation cover anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 28 ; + } +#Type of low vegetation anomaly +'Type of low vegetation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 29 ; + } +#Type of high vegetation anomaly +'Type of high vegetation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 30 ; + } +#Sea-ice cover anomaly +'Sea-ice cover anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 31 ; + } +#Snow albedo anomaly +'Snow albedo anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 32 ; + } +#Snow density anomaly +'Snow density anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 33 ; + } +#Sea surface temperature anomaly +'Sea surface temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 34 ; + } +#Ice surface temperature anomaly layer 1 +'Ice surface temperature anomaly layer 1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 35 ; + } +#Ice surface temperature anomaly layer 2 +'Ice surface temperature anomaly layer 2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 36 ; + } +#Ice surface temperature anomaly layer 3 +'Ice surface temperature anomaly layer 3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 37 ; + } +#Ice surface temperature anomaly layer 4 +'Ice surface temperature anomaly layer 4' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 38 ; + } +#Volumetric soil water anomaly layer 1 +'Volumetric soil water anomaly layer 1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 39 ; + } +#Volumetric soil water anomaly layer 2 +'Volumetric soil water anomaly layer 2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 40 ; + } +#Volumetric soil water anomaly layer 3 +'Volumetric soil water anomaly layer 3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 41 ; + } +#Volumetric soil water anomaly layer 4 +'Volumetric soil water anomaly layer 4' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 42 ; + } +#Soil type anomaly +'Soil type anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 43 ; + } +#Snow evaporation anomaly +'Snow evaporation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 44 ; + } +#Snowmelt anomaly +'Snowmelt anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 45 ; + } +#Solar duration anomaly +'Solar duration anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 46 ; + } +#Direct solar radiation anomaly +'Direct solar radiation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress anomaly +'Magnitude of surface stress anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 48 ; + } +#10 metre wind gust anomaly +'10 metre wind gust anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction anomaly +'Large-scale precipitation fraction anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature in the last 24 hours anomaly +'Maximum 2 metre temperature in the last 24 hours anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature in the last 24 hours anomaly +'Minimum 2 metre temperature in the last 24 hours anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 52 ; + } +#Montgomery potential anomaly +'Montgomery potential anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 53 ; + } +#Pressure anomaly +'Pressure anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours anomaly +'Mean 2 metre temperature in the last 24 hours anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours anomaly +'Mean 2 metre dewpoint temperature in the last 24 hours anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface anomaly +'Downward UV radiation at the surface anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface anomaly +'Photosynthetically active radiation at the surface anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 58 ; + } +#Convective available potential energy anomaly +'Convective available potential energy anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 59 ; + } +#Potential vorticity anomaly +'Potential vorticity anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 60 ; + } +#Total precipitation from observations anomaly +'Total precipitation from observations anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 61 ; + } +#Observation count anomaly +'Observation count anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference anomaly +'Start time for skin temperature difference anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference anomaly +'Finish time for skin temperature difference anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 64 ; + } +#Skin temperature difference anomaly +'Skin temperature difference anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 65 ; + } +#Total column liquid water anomaly +'Total column liquid water anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 78 ; + } +#Total column ice water anomaly +'Total column ice water anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 79 ; + } +#Vertically integrated total energy anomaly +'Vertically integrated total energy anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'Generic parameter for sensitive area prediction' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 126 ; + } +#Atmospheric tide anomaly +'Atmospheric tide anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 127 ; + } +#Budget values anomaly +'Budget values anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 128 ; + } +#Geopotential anomaly +'Geopotential anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 129 ; + } +#Temperature anomaly +'Temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 130 ; + } +#U component of wind anomaly +'U component of wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 131 ; + } +#V component of wind anomaly +'V component of wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 132 ; + } +#Specific humidity anomaly +'Specific humidity anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 133 ; + } +#Surface pressure anomaly +'Surface pressure anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 134 ; + } +#Vertical velocity (pressure) anomaly +'Vertical velocity (pressure) anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 135 ; + } +#Total column water anomaly +'Total column water anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 136 ; + } +#Total column water vapour anomaly +'Total column water vapour anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 137 ; + } +#Relative vorticity anomaly +'Relative vorticity anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 138 ; + } +#Soil temperature anomaly level 1 +'Soil temperature anomaly level 1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 139 ; + } +#Soil wetness anomaly level 1 +'Soil wetness anomaly level 1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 140 ; + } +#Snow depth anomaly +'Snow depth anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'Stratiform precipitation (Large-scale precipitation) anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 142 ; + } +#Convective precipitation anomaly +'Convective precipitation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) anomaly +'Snowfall (convective + stratiform) anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation anomaly +'Boundary layer dissipation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux anomaly +'Surface sensible heat flux anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 146 ; + } +#Surface latent heat flux anomaly +'Surface latent heat flux anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 147 ; + } +#Charnock anomaly +'Charnock anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 148 ; + } +#Surface net radiation anomaly +'Surface net radiation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 149 ; + } +#Top net radiation anomaly +'Top net radiation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 150 ; + } +#Mean sea level pressure anomaly +'Mean sea level pressure anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure anomaly +'Logarithm of surface pressure anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 152 ; + } +#Short-wave heating rate anomaly +'Short-wave heating rate anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 153 ; + } +#Long-wave heating rate anomaly +'Long-wave heating rate anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 154 ; + } +#Relative divergence anomaly +'Relative divergence anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 155 ; + } +#Height anomaly +'Height anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 156 ; + } +#Relative humidity anomaly +'Relative humidity anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure anomaly +'Tendency of surface pressure anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 158 ; + } +#Boundary layer height anomaly +'Boundary layer height anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 159 ; + } +#Standard deviation of orography anomaly +'Standard deviation of orography anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography anomaly +'Anisotropy of sub-gridscale orography anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography anomaly +'Angle of sub-gridscale orography anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography anomaly +'Slope of sub-gridscale orography anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 163 ; + } +#Total cloud cover anomaly +'Total cloud cover anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 164 ; + } +#10 metre U wind component anomaly +'10 metre U wind component anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 165 ; + } +#10 metre V wind component anomaly +'10 metre V wind component anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 166 ; + } +#2 metre temperature anomaly +'2 metre temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 167 ; + } +#2 metre dewpoint temperature anomaly +'2 metre dewpoint temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 168 ; + } +#Surface solar radiation downwards anomaly +'Surface solar radiation downwards anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 169 ; + } +#Soil temperature anomaly level 2 +'Soil temperature anomaly level 2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 170 ; + } +#Soil wetness anomaly level 2 +'Soil wetness anomaly level 2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 171 ; + } +#Surface roughness anomaly +'Surface roughness anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 173 ; + } +#Albedo anomaly +'Albedo anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards anomaly +'Surface thermal radiation downwards anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 175 ; + } +#Surface net solar radiation anomaly +'Surface net solar radiation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation anomaly +'Surface net thermal radiation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 177 ; + } +#Top net solar radiation anomaly +'Top net solar radiation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 178 ; + } +#Top net thermal radiation anomaly +'Top net thermal radiation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 179 ; + } +#East-West surface stress anomaly +'East-West surface stress anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 180 ; + } +#North-South surface stress anomaly +'North-South surface stress anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 181 ; + } +#Evaporation anomaly +'Evaporation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 182 ; + } +#Soil temperature anomaly level 3 +'Soil temperature anomaly level 3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 183 ; + } +#Soil wetness anomaly level 3 +'Soil wetness anomaly level 3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 184 ; + } +#Convective cloud cover anomaly +'Convective cloud cover anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 185 ; + } +#Low cloud cover anomaly +'Low cloud cover anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 186 ; + } +#Medium cloud cover anomaly +'Medium cloud cover anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 187 ; + } +#High cloud cover anomaly +'High cloud cover anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 188 ; + } +#Sunshine duration anomaly +'Sunshine duration anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance anomaly +'East-West component of sub-gridscale orographic variance anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance anomaly +'North-South component of sub-gridscale orographic variance anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance anomaly +'North-West/South-East component of sub-gridscale orographic variance anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance anomaly +'North-East/South-West component of sub-gridscale orographic variance anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 193 ; + } +#Brightness temperature anomaly +'Brightness temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress anomaly +'Longitudinal component of gravity wave stress anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress anomaly +'Meridional component of gravity wave stress anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation anomaly +'Gravity wave dissipation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 197 ; + } +#Skin reservoir content anomaly +'Skin reservoir content anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 198 ; + } +#Vegetation fraction anomaly +'Vegetation fraction anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography anomaly +'Variance of sub-gridscale orography anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres anomaly +'Maximum temperature at 2 metres anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres anomaly +'Minimum temperature at 2 metres anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio anomaly +'Ozone mass mixing ratio anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights anomaly +'Precipitation analysis weights anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 204 ; + } +#Runoff anomaly +'Runoff anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 205 ; + } +#Total column ozone anomaly +'Total column ozone anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 206 ; + } +#10 metre wind speed anomaly +'10 metre wind speed anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 207 ; + } +#Top net solar radiation clear sky anomaly +'Top net solar radiation clear sky anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 208 ; + } +#Top net thermal radiation clear sky anomaly +'Top net thermal radiation clear sky anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 209 ; + } +#Surface net solar radiation clear sky anomaly +'Surface net solar radiation clear sky anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'Surface net thermal radiation, clear sky anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 211 ; + } +#Solar insolation anomaly +'Solar insolation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation anomaly +'Diabatic heating by radiation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion anomaly +'Diabatic heating by vertical diffusion anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection anomaly +'Diabatic heating by cumulus convection anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 216 ; + } +#Diabatic heating by large-scale condensation anomaly +'Diabatic heating by large-scale condensation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind anomaly +'Vertical diffusion of zonal wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind anomaly +'Vertical diffusion of meridional wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency anomaly +'East-West gravity wave drag tendency anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency anomaly +'North-South gravity wave drag tendency anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind anomaly +'Convective tendency of zonal wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind anomaly +'Convective tendency of meridional wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity anomaly +'Vertical diffusion of humidity anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection anomaly +'Humidity tendency by cumulus convection anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation anomaly +'Humidity tendency by large-scale condensation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity anomaly +'Change from removal of negative humidity anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 227 ; + } +#Total precipitation anomaly +'Total precipitation anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress anomaly +'Instantaneous X surface stress anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress anomaly +'Instantaneous Y surface stress anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux anomaly +'Instantaneous surface heat flux anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux anomaly +'Instantaneous moisture flux anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 232 ; + } +#Apparent surface humidity anomaly +'Apparent surface humidity anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat anomaly +'Logarithm of surface roughness length for heat anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 234 ; + } +#Skin temperature anomaly +'Skin temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 anomaly +'Soil temperature level 4 anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 anomaly +'Soil wetness level 4 anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 237 ; + } +#Temperature of snow layer anomaly +'Temperature of snow layer anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 238 ; + } +#Convective snowfall anomaly +'Convective snowfall anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 239 ; + } +#Large scale snowfall anomaly +'Large scale snowfall anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency anomaly +'Accumulated cloud fraction tendency anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency anomaly +'Accumulated liquid water tendency anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 242 ; + } +#Forecast albedo anomaly +'Forecast albedo anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 243 ; + } +#Forecast surface roughness anomaly +'Forecast surface roughness anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat anomaly +'Forecast logarithm of surface roughness for heat anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 245 ; + } +#Cloud liquid water content anomaly +'Cloud liquid water content anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 246 ; + } +#Cloud ice water content anomaly +'Cloud ice water content anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 247 ; + } +#Cloud cover anomaly +'Cloud cover anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency anomaly +'Accumulated ice water tendency anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 249 ; + } +#Ice age anomaly +'Ice age anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature anomaly +'Adiabatic tendency of temperature anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity anomaly +'Adiabatic tendency of humidity anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind anomaly +'Adiabatic tendency of zonal wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind anomaly +'Adiabatic tendency of meridional wind anomaly' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 255 ; + } +#Snow evaporation +'Snow evaporation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 44 ; + } +#Snowmelt +'Snowmelt' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 45 ; + } +#Magnitude of surface stress +'Magnitude of surface stress' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction +'Large-scale precipitation fraction' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) +'Stratiform precipitation (Large-scale precipitation)' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; + } +#Convective precipitation +'Convective precipitation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) +'Snowfall (convective + stratiform)' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation +'Boundary layer dissipation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux +'Surface sensible heat flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 146 ; + } +#Surface latent heat flux +'Surface latent heat flux' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 147 ; + } +#Surface net radiation +'Surface net radiation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 149 ; + } +#Short-wave heating rate +'Short-wave heating rate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 153 ; + } +#Long-wave heating rate +'Long-wave heating rate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 154 ; + } +#Surface solar radiation downwards +'Surface solar radiation downwards' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards +'Surface thermal radiation downwards' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 175 ; + } +#Surface solar radiation +'Surface solar radiation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 176 ; + } +#Surface thermal radiation +'Surface thermal radiation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 177 ; + } +#Top solar radiation +'Top solar radiation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 178 ; + } +#Top thermal radiation +'Top thermal radiation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 179 ; + } +#East-West surface stress +'East-West surface stress' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 180 ; + } +#North-South surface stress +'North-South surface stress' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 181 ; + } +#Evaporation +'Evaporation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 182 ; + } +#Sunshine duration +'Sunshine duration' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress +'Longitudinal component of gravity wave stress' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress +'Meridional component of gravity wave stress' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'Gravity wave dissipation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 197 ; + } +#Runoff +'Runoff' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky +'Top net solar radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'Top net thermal radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'Surface net solar radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'Surface net thermal radiation, clear sky' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 211 ; + } +#Solar insolation +'Solar insolation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 212 ; + } +#Total precipitation +'Total precipitation' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 228 ; + } +#Convective snowfall +'Convective snowfall' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 239 ; + } +#Large scale snowfall +'Large scale snowfall' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 240 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 255 ; + } +#Snow evaporation anomaly +'Snow evaporation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 44 ; + } +#Snowmelt anomaly +'Snowmelt anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 45 ; + } +#Magnitude of surface stress anomaly +'Magnitude of surface stress anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction anomaly +'Large-scale precipitation fraction anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'Stratiform precipitation (Large-scale precipitation) anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 142 ; + } +#Convective precipitation anomaly +'Convective precipitation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) anomalous rate of accumulation +'Snowfall (convective + stratiform) anomalous rate of accumulation' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation anomaly +'Boundary layer dissipation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux anomaly +'Surface sensible heat flux anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 146 ; + } +#Surface latent heat flux anomaly +'Surface latent heat flux anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 147 ; + } +#Surface net radiation anomaly +'Surface net radiation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 149 ; + } +#Short-wave heating rate anomaly +'Short-wave heating rate anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 153 ; + } +#Long-wave heating rate anomaly +'Long-wave heating rate anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 154 ; + } +#Surface solar radiation downwards anomaly +'Surface solar radiation downwards anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards anomaly +'Surface thermal radiation downwards anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 175 ; + } +#Surface solar radiation anomaly +'Surface solar radiation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 176 ; + } +#Surface thermal radiation anomaly +'Surface thermal radiation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 177 ; + } +#Top solar radiation anomaly +'Top solar radiation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 178 ; + } +#Top thermal radiation anomaly +'Top thermal radiation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 179 ; + } +#East-West surface stress anomaly +'East-West surface stress anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 180 ; + } +#North-South surface stress anomaly +'North-South surface stress anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 181 ; + } +#Evaporation anomaly +'Evaporation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 182 ; + } +#Sunshine duration anomalous rate of accumulation +'Sunshine duration anomalous rate of accumulation' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress anomaly +'Longitudinal component of gravity wave stress anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress anomaly +'Meridional component of gravity wave stress anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation anomaly +'Gravity wave dissipation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 197 ; + } +#Runoff anomaly +'Runoff anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky anomaly +'Top net solar radiation, clear sky anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky anomaly +'Top net thermal radiation, clear sky anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky anomaly +'Surface net solar radiation, clear sky anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'Surface net thermal radiation, clear sky anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 211 ; + } +#Solar insolation anomaly +'Solar insolation anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 212 ; + } +#Total precipitation anomalous rate of accumulation +'Total precipitation anomalous rate of accumulation' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 228 ; + } +#Convective snowfall anomaly +'Convective snowfall anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 239 ; + } +#Large scale snowfall anomaly +'Large scale snowfall anomaly' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 240 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 255 ; + } +#Total soil moisture +'Total soil moisture' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 6 ; + } +#Surface runoff +'Surface runoff' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 8 ; + } +#Sub-surface runoff +'Sub-surface runoff' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 9 ; + } +#Fraction of sea-ice in sea +'Fraction of sea-ice in sea' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 31 ; + } +#Open-sea surface temperature +'Open-sea surface temperature' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 34 ; + } +#Volumetric soil water layer 1 +'Volumetric soil water layer 1' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'Volumetric soil water layer 2' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'Volumetric soil water layer 3' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'Volumetric soil water layer 4' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 42 ; + } +#10 metre wind gust in the last 24 hours +'10 metre wind gust in the last 24 hours' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'1.5m temperature - mean in the last 24 hours' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 55 ; + } +#Net primary productivity +'Net primary productivity' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 83 ; + } +#10m U wind over land +'10m U wind over land' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 85 ; + } +#10m V wind over land +'10m V wind over land' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 86 ; + } +#1.5m temperature over land +'1.5m temperature over land' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 87 ; + } +#1.5m dewpoint temperature over land +'1.5m dewpoint temperature over land' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 88 ; + } +#Top incoming solar radiation +'Top incoming solar radiation' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 89 ; + } +#Top outgoing solar radiation +'Top outgoing solar radiation' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 90 ; + } +#Mean sea surface temperature +'Mean sea surface temperature' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 94 ; + } +#1.5m specific humidity +'1.5m specific humidity' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 95 ; + } +#Sea-ice thickness +'Sea-ice thickness' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 98 ; + } +#Liquid water potential temperature +'Liquid water potential temperature' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 99 ; + } +#Ocean ice concentration +'Ocean ice concentration' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 110 ; + } +#Ocean mean ice depth +'Ocean mean ice depth' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 111 ; + } +#Soil temperature layer 1 +'Soil temperature layer 1' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 139 ; + } +#Average potential temperature in upper 293.4m +'Average potential temperature in upper 293.4m' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 164 ; + } +#1.5m temperature +'1.5m temperature' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 167 ; + } +#1.5m dewpoint temperature +'1.5m dewpoint temperature' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 168 ; + } +#Soil temperature layer 2 +'Soil temperature layer 2' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 170 ; + } +#Average salinity in upper 293.4m +'Average salinity in upper 293.4m' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 175 ; + } +#Soil temperature layer 3 +'Soil temperature layer 3' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'1.5m temperature - maximum in the last 24 hours' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'1.5m temperature - minimum in the last 24 hours' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 202 ; + } +#Soil temperature layer 4 +'Soil temperature layer 4' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 236 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 255 ; + } +#Total soil moisture +'Total soil moisture' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 6 ; + } +#Fraction of sea-ice in sea +'Fraction of sea-ice in sea' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 31 ; + } +#Open-sea surface temperature +'Open-sea surface temperature' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 34 ; + } +#Volumetric soil water layer 1 +'Volumetric soil water layer 1' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'Volumetric soil water layer 2' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'Volumetric soil water layer 3' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'Volumetric soil water layer 4' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 42 ; + } +#10m wind gust in the last 24 hours +'10m wind gust in the last 24 hours' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'1.5m temperature - mean in the last 24 hours' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 55 ; + } +#Net primary productivity +'Net primary productivity' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 83 ; + } +#10m U wind over land +'10m U wind over land' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 85 ; + } +#10m V wind over land +'10m V wind over land' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 86 ; + } +#1.5m temperature over land +'1.5m temperature over land' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 87 ; + } +#1.5m dewpoint temperature over land +'1.5m dewpoint temperature over land' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 88 ; + } +#Top incoming solar radiation +'Top incoming solar radiation' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 89 ; + } +#Top outgoing solar radiation +'Top outgoing solar radiation' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 90 ; + } +#Ocean ice concentration +'Ocean ice concentration' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 110 ; + } +#Ocean mean ice depth +'Ocean mean ice depth' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 111 ; + } +#Soil temperature layer 1 +'Soil temperature layer 1' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 139 ; + } +#Average potential temperature in upper 293.4m +'Average potential temperature in upper 293.4m' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 164 ; + } +#1.5m temperature +'1.5m temperature' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 167 ; + } +#1.5m dewpoint temperature +'1.5m dewpoint temperature' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 168 ; + } +#Soil temperature layer 2 +'Soil temperature layer 2' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 170 ; + } +#Average salinity in upper 293.4m +'Average salinity in upper 293.4m' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 175 ; + } +#Soil temperature layer 3 +'Soil temperature layer 3' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'1.5m temperature - maximum in the last 24 hours' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'1.5m temperature - minimum in the last 24 hours' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 202 ; + } +#Soil temperature layer 4 +'Soil temperature layer 4' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 236 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 255 ; + } +#Total soil wetness +'Total soil wetness' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 149 ; + } +#Surface net solar radiation +'Surface net solar radiation' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation +'Surface net thermal radiation' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 177 ; + } +#Top net solar radiation +'Top net solar radiation' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 178 ; + } +#Top net thermal radiation +'Top net thermal radiation' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 179 ; + } +#Snow depth +'Snow depth' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 141 ; + } +#Field capacity +'Field capacity' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 170 ; + } +#Wilting point +'Wilting point' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 171 ; + } +#Roughness length +'Roughness length' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 173 ; + } +#Total soil moisture +'Total soil moisture' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 229 ; + } +#2 metre dewpoint temperature difference +'2 metre dewpoint temperature difference' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 168 ; + } +#downward shortwave radiant flux density +'downward shortwave radiant flux density' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 1 ; + } +#upward shortwave radiant flux density +'upward shortwave radiant flux density' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 2 ; + } +#downward longwave radiant flux density +'downward longwave radiant flux density' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 3 ; + } +#upward longwave radiant flux density +'upward longwave radiant flux density' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 4 ; + } +#downwd photosynthetic active radiant flux density +'downwd photosynthetic active radiant flux density' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 5 ; + } +#net shortwave flux +'net shortwave flux' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 6 ; + } +#net longwave flux +'net longwave flux' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 7 ; + } +#total net radiative flux density +'total net radiative flux density' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 8 ; + } +#downw shortw radiant flux density, cloudfree part +'downw shortw radiant flux density, cloudfree part' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 9 ; + } +#upw shortw radiant flux density, cloudy part +'upw shortw radiant flux density, cloudy part' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 10 ; + } +#downw longw radiant flux density, cloudfree part +'downw longw radiant flux density, cloudfree part' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 11 ; + } +#upw longw radiant flux density, cloudy part +'upw longw radiant flux density, cloudy part' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 12 ; + } +#shortwave radiative heating rate +'shortwave radiative heating rate' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 13 ; + } +#longwave radiative heating rate +'longwave radiative heating rate' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 14 ; + } +#total radiative heating rate +'total radiative heating rate' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 15 ; + } +#soil heat flux, surface +'soil heat flux, surface' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 16 ; + } +#soil heat flux, bottom of layer +'soil heat flux, bottom of layer' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 17 ; + } +#fractional cloud cover +'fractional cloud cover' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 29 ; + } +#cloud cover, grid scale +'cloud cover, grid scale' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 30 ; + } +#specific cloud water content +'specific cloud water content' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 31 ; + } +#cloud water content, grid scale, vert integrated +'cloud water content, grid scale, vert integrated' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 32 ; + } +#specific cloud ice content, grid scale +'specific cloud ice content, grid scale' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 33 ; + } +#cloud ice content, grid scale, vert integrated +'cloud ice content, grid scale, vert integrated' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 34 ; + } +#specific rainwater content, grid scale +'specific rainwater content, grid scale' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 35 ; + } +#specific snow content, grid scale +'specific snow content, grid scale' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 36 ; + } +#specific rainwater content, gs, vert. integrated +'specific rainwater content, gs, vert. integrated' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 37 ; + } +#specific snow content, gs, vert. integrated +'specific snow content, gs, vert. integrated' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 38 ; + } +#total column water +'total column water' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 41 ; + } +#vert. integral of divergence of tot. water content +'vert. integral of divergence of tot. water content' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 42 ; + } +#cloud covers CH_CM_CL (000...888) +'cloud covers CH_CM_CL (000...888)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 50 ; + } +#cloud cover CH (0..8) +'cloud cover CH (0..8)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 51 ; + } +#cloud cover CM (0..8) +'cloud cover CM (0..8)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 52 ; + } +#cloud cover CL (0..8) +'cloud cover CL (0..8)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 53 ; + } +#total cloud cover (0..8) +'total cloud cover (0..8)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 54 ; + } +#fog (0..8) +'fog (0..8)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 55 ; + } +#fog +'fog' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 56 ; + } +#cloud cover, convective cirrus +'cloud cover, convective cirrus' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 60 ; + } +#specific cloud water content, convective clouds +'specific cloud water content, convective clouds' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 61 ; + } +#cloud water content, conv clouds, vert integrated +'cloud water content, conv clouds, vert integrated' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 62 ; + } +#specific cloud ice content, convective clouds +'specific cloud ice content, convective clouds' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 63 ; + } +#cloud ice content, conv clouds, vert integrated +'cloud ice content, conv clouds, vert integrated' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 64 ; + } +#convective mass flux +'convective mass flux' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 65 ; + } +#Updraft velocity, convection +'Updraft velocity, convection' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 66 ; + } +#entrainment parameter, convection +'entrainment parameter, convection' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 67 ; + } +#cloud base, convective clouds (above msl) +'cloud base, convective clouds (above msl)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 68 ; + } +#cloud top, convective clouds (above msl) +'cloud top, convective clouds (above msl)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 69 ; + } +#convective layers (00...77) (BKE) +'convective layers (00...77) (BKE)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 70 ; + } +#KO-index +'KO-index' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 71 ; + } +#convection base index +'convection base index' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 72 ; + } +#convection top index +'convection top index' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 73 ; + } +#convective temperature tendency +'convective temperature tendency' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 74 ; + } +#convective tendency of specific humidity +'convective tendency of specific humidity' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 75 ; + } +#convective tendency of total heat +'convective tendency of total heat' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 76 ; + } +#convective tendency of total water +'convective tendency of total water' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 77 ; + } +#convective momentum tendency (X-component) +'convective momentum tendency (X-component)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 78 ; + } +#convective momentum tendency (Y-component) +'convective momentum tendency (Y-component)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 79 ; + } +#convective vorticity tendency +'convective vorticity tendency' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 80 ; + } +#convective divergence tendency +'convective divergence tendency' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 81 ; + } +#top of dry convection (above msl) +'top of dry convection (above msl)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 82 ; + } +#dry convection top index +'dry convection top index' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 83 ; + } +#height of 0 degree Celsius isotherm above msl +'height of 0 degree Celsius isotherm above msl' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 84 ; + } +#height of snow-fall limit +'height of snow-fall limit' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 85 ; + } +#spec. content of precip. particles +'spec. content of precip. particles' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 99 ; + } +#surface precipitation rate, rain, grid scale +'surface precipitation rate, rain, grid scale' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 100 ; + } +#surface precipitation rate, snow, grid scale +'surface precipitation rate, snow, grid scale' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 101 ; + } +#surface precipitation amount, rain, grid scale +'surface precipitation amount, rain, grid scale' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 102 ; + } +#surface precipitation rate, rain, convective +'surface precipitation rate, rain, convective' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 111 ; + } +#surface precipitation rate, snow, convective +'surface precipitation rate, snow, convective' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 112 ; + } +#surface precipitation amount, rain, convective +'surface precipitation amount, rain, convective' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 113 ; + } +#deviation of pressure from reference value +'deviation of pressure from reference value' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 139 ; + } +#coefficient of horizontal diffusion +'coefficient of horizontal diffusion' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 150 ; + } +#Maximum wind velocity +'Maximum wind velocity' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 187 ; + } +#water content of interception store +'water content of interception store' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 200 ; + } +#snow temperature +'snow temperature' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 203 ; + } +#ice surface temperature +'ice surface temperature' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 215 ; + } +#convective available potential energy +'convective available potential energy' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 241 ; + } +#Indicates a missing value +'Indicates a missing value' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 255 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'Sea Salt Aerosol (5 - 20 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'Dust Aerosol (0.03 - 0.55 um) Mixing Ratio' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + productDefinitionTemplateNumber = 44 ; + scaleFactorOfSecondSize = 8 ; + scaleFactorOfFirstSize = 8 ; + aerosolType = 62001 ; + scaledValueOfSecondSize = 55 ; + scaledValueOfFirstSize = 3 ; + typeOfSizeInterval = 2 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'Dust Aerosol (0.03 - 0.55 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'Dust Aerosol (0.55 - 0.9 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'Dust Aerosol (0.9 - 20 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'Hydrophobic Organic Matter Aerosol Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'Hydrophilic Organic Matter Aerosol Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'Hydrophobic Black Carbon Aerosol Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'Hydrophilic Black Carbon Aerosol Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'Sulphate Aerosol Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 11 ; + } +#Aerosol type 12 mixing ratio +'Aerosol type 12 mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 12 ; + } +#Aerosol type 1 source/gain accumulated +'Aerosol type 1 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 16 ; + } +#Aerosol type 2 source/gain accumulated +'Aerosol type 2 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 17 ; + } +#Aerosol type 3 source/gain accumulated +'Aerosol type 3 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 18 ; + } +#Aerosol type 4 source/gain accumulated +'Aerosol type 4 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 19 ; + } +#Aerosol type 5 source/gain accumulated +'Aerosol type 5 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 20 ; + } +#Aerosol type 6 source/gain accumulated +'Aerosol type 6 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 21 ; + } +#Aerosol type 7 source/gain accumulated +'Aerosol type 7 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 22 ; + } +#Aerosol type 8 source/gain accumulated +'Aerosol type 8 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 23 ; + } +#Aerosol type 9 source/gain accumulated +'Aerosol type 9 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 24 ; + } +#Aerosol type 10 source/gain accumulated +'Aerosol type 10 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 25 ; + } +#Aerosol type 11 source/gain accumulated +'Aerosol type 11 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 26 ; + } +#Aerosol type 12 source/gain accumulated +'Aerosol type 12 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'Aerosol type 1 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'Aerosol type 2 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'Aerosol type 3 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'Aerosol type 4 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'Aerosol type 5 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'Aerosol type 6 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'Aerosol type 7 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'Aerosol type 8 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'Aerosol type 9 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'Aerosol type 10 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'Aerosol type 11 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'Aerosol type 12 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 42 ; + } +#Aerosol precursor mixing ratio +'Aerosol precursor mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 46 ; + } +#Aerosol small mode mixing ratio +'Aerosol small mode mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 47 ; + } +#Aerosol large mode mixing ratio +'Aerosol large mode mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 48 ; + } +#Aerosol precursor optical depth +'Aerosol precursor optical depth' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 49 ; + } +#Aerosol small mode optical depth +'Aerosol small mode optical depth' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 50 ; + } +#Aerosol large mode optical depth +'Aerosol large mode optical depth' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 51 ; + } +#Dust emission potential +'Dust emission potential' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 52 ; + } +#Lifting threshold speed +'Lifting threshold speed' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 53 ; + } +#Soil clay content +'Soil clay content' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 54 ; + } +#Carbon Dioxide +'Carbon Dioxide' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + productDefinitionTemplateNumber = 40 ; + constituentType = 3 ; + } +#Carbon Dioxide +'Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 61 ; + } +#Methane +'Methane' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 62 ; + } +#Nitrous oxide +'Nitrous oxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 63 ; + } +#Total column Carbon Dioxide +'Total column Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 64 ; + } +#Total column Methane +'Total column Methane' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 65 ; + } +#Total column Nitrous oxide +'Total column Nitrous oxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 66 ; + } +#Ocean flux of Carbon Dioxide +'Ocean flux of Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'Natural biosphere flux of Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'Anthropogenic emissions of Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 69 ; + } +#Methane Surface Fluxes +'Methane Surface Fluxes' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'Methane loss rate due to radical hydroxyl (OH)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 71 ; + } +#Wildfire flux of Carbon Dioxide +'Wildfire flux of Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 80 ; + } +#Wildfire flux of Carbon Monoxide +'Wildfire flux of Carbon Monoxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 81 ; + } +#Wildfire flux of Methane +'Wildfire flux of Methane' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'Wildfire flux of Non-Methane Hydro-Carbons' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 83 ; + } +#Wildfire flux of Hydrogen +'Wildfire flux of Hydrogen' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'Wildfire flux of Nitrogen Oxides NOx' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 85 ; + } +#Wildfire flux of Nitrous Oxide +'Wildfire flux of Nitrous Oxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'Wildfire flux of Particulate Matter PM2.5' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 87 ; + } +#Wildfire flux of Total Particulate Matter +'Wildfire flux of Total Particulate Matter' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'Wildfire flux of Total Carbon in Aerosols' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 89 ; + } +#Wildfire flux of Organic Carbon +'Wildfire flux of Organic Carbon' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 90 ; + } +#Wildfire flux of Black Carbon +'Wildfire flux of Black Carbon' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 91 ; + } +#Wildfire overall flux of burnt Carbon +'Wildfire overall flux of burnt Carbon' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 92 ; + } +#Wildfire fraction of C4 plants +'Wildfire fraction of C4 plants' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 93 ; + } +#Wildfire vegetation map index +'Wildfire vegetation map index' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 94 ; + } +#Wildfire Combustion Completeness +'Wildfire Combustion Completeness' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'Wildfire Fuel Load: Carbon per unit area' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 96 ; + } +#Wildfire fraction of area observed +'Wildfire fraction of area observed' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 97 ; + } +#Wildfire observed area +'Wildfire observed area' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 98 ; + } +#Wildfire radiative power +'Wildfire radiative power' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 99 ; + } +#Wildfire combustion rate +'Wildfire combustion rate' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 100 ; + } +#Nitrogen dioxide +'Nitrogen dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 121 ; + } +#Sulphur dioxide +'Sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 122 ; + } +#Carbon monoxide +'Carbon monoxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 123 ; + } +#Formaldehyde +'Formaldehyde' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 124 ; + } +#Total column Nitrogen dioxide +'Total column Nitrogen dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 125 ; + } +#Total column Sulphur dioxide +'Total column Sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 126 ; + } +#Total column Carbon monoxide +'Total column Carbon monoxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 127 ; + } +#Total column Formaldehyde +'Total column Formaldehyde' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 128 ; + } +#Nitrogen Oxides +'Nitrogen Oxides' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 129 ; + } +#Total Column Nitrogen Oxides +'Total Column Nitrogen Oxides' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'Reactive tracer 1 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 131 ; + } +#Total column GRG tracer 1 +'Total column GRG tracer 1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'Reactive tracer 2 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 133 ; + } +#Total column GRG tracer 2 +'Total column GRG tracer 2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'Reactive tracer 3 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 135 ; + } +#Total column GRG tracer 3 +'Total column GRG tracer 3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'Reactive tracer 4 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 137 ; + } +#Total column GRG tracer 4 +'Total column GRG tracer 4' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'Reactive tracer 5 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 139 ; + } +#Total column GRG tracer 5 +'Total column GRG tracer 5' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'Reactive tracer 6 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 141 ; + } +#Total column GRG tracer 6 +'Total column GRG tracer 6' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'Reactive tracer 7 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 143 ; + } +#Total column GRG tracer 7 +'Total column GRG tracer 7' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'Reactive tracer 8 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 145 ; + } +#Total column GRG tracer 8 +'Total column GRG tracer 8' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'Reactive tracer 9 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 147 ; + } +#Total column GRG tracer 9 +'Total column GRG tracer 9' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'Reactive tracer 10 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 149 ; + } +#Total column GRG tracer 10 +'Total column GRG tracer 10' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 150 ; + } +#Surface flux Nitrogen oxides +'Surface flux Nitrogen oxides' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 151 ; + } +#Surface flux Nitrogen dioxide +'Surface flux Nitrogen dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 152 ; + } +#Surface flux Sulphur dioxide +'Surface flux Sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 153 ; + } +#Surface flux Carbon monoxide +'Surface flux Carbon monoxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 154 ; + } +#Surface flux Formaldehyde +'Surface flux Formaldehyde' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 155 ; + } +#Surface flux GEMS Ozone +'Surface flux GEMS Ozone' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 156 ; + } +#Surface flux reactive tracer 1 +'Surface flux reactive tracer 1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 157 ; + } +#Surface flux reactive tracer 2 +'Surface flux reactive tracer 2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 158 ; + } +#Surface flux reactive tracer 3 +'Surface flux reactive tracer 3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 159 ; + } +#Surface flux reactive tracer 4 +'Surface flux reactive tracer 4' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 160 ; + } +#Surface flux reactive tracer 5 +'Surface flux reactive tracer 5' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 161 ; + } +#Surface flux reactive tracer 6 +'Surface flux reactive tracer 6' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 162 ; + } +#Surface flux reactive tracer 7 +'Surface flux reactive tracer 7' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 163 ; + } +#Surface flux reactive tracer 8 +'Surface flux reactive tracer 8' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 164 ; + } +#Surface flux reactive tracer 9 +'Surface flux reactive tracer 9' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 165 ; + } +#Surface flux reactive tracer 10 +'Surface flux reactive tracer 10' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 166 ; + } +#Radon +'Radon' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 181 ; + } +#Sulphur Hexafluoride +'Sulphur Hexafluoride' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 182 ; + } +#Total column Radon +'Total column Radon' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 183 ; + } +#Total column Sulphur Hexafluoride +'Total column Sulphur Hexafluoride' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'Anthropogenic Emissions of Sulphur Hexafluoride' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 185 ; + } +#GEMS Ozone +'GEMS Ozone' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 203 ; + } +#GEMS Total column ozone +'GEMS Total column ozone' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'Total Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'Sea Salt Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'Dust Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'Organic Matter Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'Black Carbon Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'Sulphate Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'Total Aerosol Optical Depth at 469nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'Total Aerosol Optical Depth at 670nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'Total Aerosol Optical Depth at 865nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'Total Aerosol Optical Depth at 1240nm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 216 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'Sea Salt Aerosol (5 - 20 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'Dust Aerosol (0.03 - 0.55 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'Dust Aerosol (0.55 - 0.9 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'Dust Aerosol (0.9 - 20 um) Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'Hydrophobic Organic Matter Aerosol Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'Hydrophilic Organic Matter Aerosol Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'Hydrophobic Black Carbon Aerosol Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'Hydrophilic Black Carbon Aerosol Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'Sulphate Aerosol Mixing Ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 11 ; + } +#Aerosol type 12 mixing ratio +'Aerosol type 12 mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 12 ; + } +#Aerosol type 1 source/gain accumulated +'Aerosol type 1 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 16 ; + } +#Aerosol type 2 source/gain accumulated +'Aerosol type 2 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 17 ; + } +#Aerosol type 3 source/gain accumulated +'Aerosol type 3 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 18 ; + } +#Aerosol type 4 source/gain accumulated +'Aerosol type 4 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 19 ; + } +#Aerosol type 5 source/gain accumulated +'Aerosol type 5 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 20 ; + } +#Aerosol type 6 source/gain accumulated +'Aerosol type 6 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 21 ; + } +#Aerosol type 7 source/gain accumulated +'Aerosol type 7 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 22 ; + } +#Aerosol type 8 source/gain accumulated +'Aerosol type 8 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 23 ; + } +#Aerosol type 9 source/gain accumulated +'Aerosol type 9 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 24 ; + } +#Aerosol type 10 source/gain accumulated +'Aerosol type 10 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 25 ; + } +#Aerosol type 11 source/gain accumulated +'Aerosol type 11 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 26 ; + } +#Aerosol type 12 source/gain accumulated +'Aerosol type 12 source/gain accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'Aerosol type 1 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'Aerosol type 2 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'Aerosol type 3 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'Aerosol type 4 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'Aerosol type 5 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'Aerosol type 6 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'Aerosol type 7 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'Aerosol type 8 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'Aerosol type 9 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'Aerosol type 10 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'Aerosol type 11 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'Aerosol type 12 sink/loss accumulated' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 42 ; + } +#Aerosol precursor mixing ratio +'Aerosol precursor mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 46 ; + } +#Aerosol small mode mixing ratio +'Aerosol small mode mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 47 ; + } +#Aerosol large mode mixing ratio +'Aerosol large mode mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 48 ; + } +#Aerosol precursor optical depth +'Aerosol precursor optical depth' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 49 ; + } +#Aerosol small mode optical depth +'Aerosol small mode optical depth' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 50 ; + } +#Aerosol large mode optical depth +'Aerosol large mode optical depth' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 51 ; + } +#Dust emission potential +'Dust emission potential' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 52 ; + } +#Lifting threshold speed +'Lifting threshold speed' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 53 ; + } +#Soil clay content +'Soil clay content' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 54 ; + } +#Carbon Dioxide +'Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 61 ; + } +#Methane +'Methane' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 62 ; + } +#Nitrous oxide +'Nitrous oxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 63 ; + } +#Total column Carbon Dioxide +'Total column Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 64 ; + } +#Total column Methane +'Total column Methane' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 65 ; + } +#Total column Nitrous oxide +'Total column Nitrous oxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 66 ; + } +#Ocean flux of Carbon Dioxide +'Ocean flux of Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'Natural biosphere flux of Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'Anthropogenic emissions of Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 69 ; + } +#Methane Surface Fluxes +'Methane Surface Fluxes' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'Methane loss rate due to radical hydroxyl (OH)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 71 ; + } +#Wildfire flux of Carbon Dioxide +'Wildfire flux of Carbon Dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 80 ; + } +#Wildfire flux of Carbon Monoxide +'Wildfire flux of Carbon Monoxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 81 ; + } +#Wildfire flux of Methane +'Wildfire flux of Methane' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'Wildfire flux of Non-Methane Hydro-Carbons' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 83 ; + } +#Wildfire flux of Hydrogen +'Wildfire flux of Hydrogen' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'Wildfire flux of Nitrogen Oxides NOx' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 85 ; + } +#Wildfire flux of Nitrous Oxide +'Wildfire flux of Nitrous Oxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'Wildfire flux of Particulate Matter PM2.5' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 87 ; + } +#Wildfire flux of Total Particulate Matter +'Wildfire flux of Total Particulate Matter' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'Wildfire flux of Total Carbon in Aerosols' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 89 ; + } +#Wildfire flux of Organic Carbon +'Wildfire flux of Organic Carbon' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 90 ; + } +#Wildfire flux of Black Carbon +'Wildfire flux of Black Carbon' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 91 ; + } +#Wildfire overall flux of burnt Carbon +'Wildfire overall flux of burnt Carbon' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 92 ; + } +#Wildfire fraction of C4 plants +'Wildfire fraction of C4 plants' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 93 ; + } +#Wildfire vegetation map index +'Wildfire vegetation map index' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 94 ; + } +#Wildfire Combustion Completeness +'Wildfire Combustion Completeness' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'Wildfire Fuel Load: Carbon per unit area' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 96 ; + } +#Wildfire fraction of area observed +'Wildfire fraction of area observed' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 97 ; + } +#Wildfire observed area +'Wildfire observed area' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 98 ; + } +#Wildfire radiative power +'Wildfire radiative power' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 99 ; + } +#Wildfire combustion rate +'Wildfire combustion rate' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 100 ; + } +#Nitrogen dioxide +'Nitrogen dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 121 ; + } +#Sulphur dioxide +'Sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 122 ; + } +#Carbon monoxide +'Carbon monoxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 123 ; + } +#Formaldehyde +'Formaldehyde' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 124 ; + } +#Total column Nitrogen dioxide +'Total column Nitrogen dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 125 ; + } +#Total column Sulphur dioxide +'Total column Sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 126 ; + } +#Total column Carbon monoxide +'Total column Carbon monoxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 127 ; + } +#Total column Formaldehyde +'Total column Formaldehyde' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 128 ; + } +#Nitrogen Oxides +'Nitrogen Oxides' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 129 ; + } +#Total Column Nitrogen Oxides +'Total Column Nitrogen Oxides' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'Reactive tracer 1 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 131 ; + } +#Total column GRG tracer 1 +'Total column GRG tracer 1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'Reactive tracer 2 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 133 ; + } +#Total column GRG tracer 2 +'Total column GRG tracer 2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'Reactive tracer 3 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 135 ; + } +#Total column GRG tracer 3 +'Total column GRG tracer 3' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'Reactive tracer 4 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 137 ; + } +#Total column GRG tracer 4 +'Total column GRG tracer 4' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'Reactive tracer 5 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 139 ; + } +#Total column GRG tracer 5 +'Total column GRG tracer 5' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'Reactive tracer 6 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 141 ; + } +#Total column GRG tracer 6 +'Total column GRG tracer 6' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'Reactive tracer 7 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 143 ; + } +#Total column GRG tracer 7 +'Total column GRG tracer 7' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'Reactive tracer 8 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 145 ; + } +#Total column GRG tracer 8 +'Total column GRG tracer 8' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'Reactive tracer 9 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 147 ; + } +#Total column GRG tracer 9 +'Total column GRG tracer 9' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'Reactive tracer 10 mass mixing ratio' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 149 ; + } +#Total column GRG tracer 10 +'Total column GRG tracer 10' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 150 ; + } +#Surface flux Nitrogen oxides +'Surface flux Nitrogen oxides' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 151 ; + } +#Surface flux Nitrogen dioxide +'Surface flux Nitrogen dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 152 ; + } +#Surface flux Sulphur dioxide +'Surface flux Sulphur dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 153 ; + } +#Surface flux Carbon monoxide +'Surface flux Carbon monoxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 154 ; + } +#Surface flux Formaldehyde +'Surface flux Formaldehyde' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 155 ; + } +#Surface flux GEMS Ozone +'Surface flux GEMS Ozone' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 156 ; + } +#Surface flux reactive tracer 1 +'Surface flux reactive tracer 1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 157 ; + } +#Surface flux reactive tracer 2 +'Surface flux reactive tracer 2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 158 ; + } +#Surface flux reactive tracer 3 +'Surface flux reactive tracer 3' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 159 ; + } +#Surface flux reactive tracer 4 +'Surface flux reactive tracer 4' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 160 ; + } +#Surface flux reactive tracer 5 +'Surface flux reactive tracer 5' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 161 ; + } +#Surface flux reactive tracer 6 +'Surface flux reactive tracer 6' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 162 ; + } +#Surface flux reactive tracer 7 +'Surface flux reactive tracer 7' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 163 ; + } +#Surface flux reactive tracer 8 +'Surface flux reactive tracer 8' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 164 ; + } +#Surface flux reactive tracer 9 +'Surface flux reactive tracer 9' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 165 ; + } +#Surface flux reactive tracer 10 +'Surface flux reactive tracer 10' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 166 ; + } +#Radon +'Radon' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 181 ; + } +#Sulphur Hexafluoride +'Sulphur Hexafluoride' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 182 ; + } +#Total column Radon +'Total column Radon' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 183 ; + } +#Total column Sulphur Hexafluoride +'Total column Sulphur Hexafluoride' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'Anthropogenic Emissions of Sulphur Hexafluoride' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 185 ; + } +#GEMS Ozone +'GEMS Ozone' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 203 ; + } +#GEMS Total column ozone +'GEMS Total column ozone' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'Total Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'Sea Salt Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'Dust Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'Organic Matter Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'Black Carbon Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'Sulphate Aerosol Optical Depth at 550nm' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'Total Aerosol Optical Depth at 469nm' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'Total Aerosol Optical Depth at 670nm' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'Total Aerosol Optical Depth at 865nm' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'Total Aerosol Optical Depth at 1240nm' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 216 ; + } +#Total precipitation observation count +'Total precipitation observation count' = { + discipline = 192 ; + parameterCategory = 220 ; + parameterNumber = 228 ; + } +#Friction velocity +'Friction velocity' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; + } +#Mean temperature at 2 metres +'Mean temperature at 2 metres' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 4 ; + } +#Mean of 10 metre wind speed +'Mean of 10 metre wind speed' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; + } +#Mean total cloud cover +'Mean total cloud cover' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; + } +#Lake depth +'Lake depth' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 7 ; + } +#Lake mix-layer temperature +'Lake mix-layer temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 8 ; + } +#Lake mix-layer depth +'Lake mix-layer depth' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 9 ; + } +#Lake bottom temperature +'Lake bottom temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 10 ; + } +#Lake total layer temperature +'Lake total layer temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 11 ; + } +#Lake shape factor +'Lake shape factor' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 12 ; + } +#Lake ice temperature +'Lake ice temperature' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 13 ; + } +#Lake ice depth +'Lake ice depth' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'Minimum vertical gradient of refractivity inside trapping layer' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'Mean vertical gradient of refractivity inside trapping layer' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 16 ; + } +#Duct base height +'Duct base height' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 17 ; + } +#Trapping layer base height +'Trapping layer base height' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 18 ; + } +#Trapping layer top height +'Trapping layer top height' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 19 ; + } +#Neutral wind at 10 m u-component +'Neutral wind at 10 m u-component' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 131 ; + } +#Neutral wind at 10 m v-component +'Neutral wind at 10 m v-component' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 132 ; + } +#Snow evaporation (variable resolution) +'Snow evaporation (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 44 ; + } +#Snowmelt (variable resolution) +'Snowmelt (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 45 ; + } +#Solar duration (variable resolution) +'Solar duration (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 46 ; + } +#Downward UV radiation at the surface (variable resolution) +'Downward UV radiation at the surface (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface (variable resolution) +'Photosynthetically active radiation at the surface (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 58 ; + } +#Stratiform precipitation (Large-scale precipitation) (variable resolution) +'Stratiform precipitation (Large-scale precipitation) (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 142 ; + } +#Convective precipitation (variable resolution) +'Convective precipitation (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) (variable resolution) +'Snowfall (convective + stratiform) (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation (variable resolution) +'Boundary layer dissipation (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux (variable resolution) +'Surface sensible heat flux (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 146 ; + } +#Surface latent heat flux (variable resolution) +'Surface latent heat flux (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 147 ; + } +#Surface solar radiation downwards (variable resolution) +'Surface solar radiation downwards (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards (variable resolution) +'Surface thermal radiation downwards (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 175 ; + } +#Surface net solar radiation (variable resolution) +'Surface net solar radiation (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation (variable resolution) +'Surface net thermal radiation (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 177 ; + } +#Top net solar radiation (variable resolution) +'Top net solar radiation (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 178 ; + } +#Top net thermal radiation (variable resolution) +'Top net thermal radiation (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 179 ; + } +#East-West surface stress (variable resolution) +'East-West surface stress (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 180 ; + } +#North-South surface stress (variable resolution) +'North-South surface stress (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 181 ; + } +#Evaporation (variable resolution) +'Evaporation (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 182 ; + } +#Sunshine duration (variable resolution) +'Sunshine duration (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress (variable resolution) +'Longitudinal component of gravity wave stress (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress (variable resolution) +'Meridional component of gravity wave stress (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation (variable resolution) +'Gravity wave dissipation (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 197 ; + } +#Skin reservoir content (variable resolution) +'Skin reservoir content (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 198 ; + } +#Runoff (variable resolution) +'Runoff (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky (variable resolution) +'Top net solar radiation, clear sky (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky (variable resolution) +'Top net thermal radiation, clear sky (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky (variable resolution) +'Surface net solar radiation, clear sky (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky (variable resolution) +'Surface net thermal radiation, clear sky (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation (variable resolution) +'TOA incident solar radiation (variable resolution)' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 212 ; + } +#Surface temperature significance +'Surface temperature significance' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 139 ; + } +#Mean sea level pressure significance +'Mean sea level pressure significance' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 151 ; + } +#2 metre temperature significance +'2 metre temperature significance' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 167 ; + } +#Total precipitation significance +'Total precipitation significance' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 228 ; + } +#U-component stokes drift +'U-component stokes drift' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; + } +#V-component stokes drift +'V-component stokes drift' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; + } +#Wildfire radiative power maximum +'Wildfire radiative power maximum' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'Wildfire flux of Sulfur Dioxide' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'Wildfire Flux of Methanol (CH3OH)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'Wildfire Flux of Ethanol (C2H5OH)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'Wildfire Flux of Propane (C3H8)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'Wildfire Flux of Ethene (C2H4)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'Wildfire Flux of Propene (C3H6)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'Wildfire Flux of Isoprene (C5H8)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'Wildfire Flux of Terpenes (C5H8)n' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'Wildfire Flux of Higher Alkenes (CnH2n, C>=4)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'Wildfire Flux of Formaldehyde (CH2O)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'Wildfire Flux of Acetaldehyde (C2H4O)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'Wildfire Flux of Acetone (C3H6O)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'Wildfire Flux of Ammonia (NH3)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 117 ; + } +#Wildfire radiative power maximum +'Wildfire radiative power maximum' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'Wildfire flux of Sulfur Dioxide' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'Wildfire Flux of Methanol (CH3OH)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'Wildfire Flux of Ethanol (C2H5OH)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'Wildfire Flux of Propane (C3H8)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'Wildfire Flux of Ethene (C2H4)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'Wildfire Flux of Propene (C3H6)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'Wildfire Flux of Isoprene (C5H8)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'Wildfire Flux of Terpenes (C5H8)n' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'Wildfire Flux of Higher Alkenes (CnH2n, C>=4)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'Wildfire Flux of Formaldehyde (CH2O)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'Wildfire Flux of Acetaldehyde (C2H4O)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'Wildfire Flux of Acetone (C3H6O)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'Wildfire Flux of Ammonia (NH3)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S)' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 117 ; + } +#V-tendency from non-orographic wave drag +'V-tendency from non-orographic wave drag' = { + localTablesVersion = 228 ; + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 134 ; + } +#U-tendency from non-orographic wave drag +'U-tendency from non-orographic wave drag' = { + localTablesVersion = 228 ; + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 136 ; + } +#100 metre U wind component +'100 metre U wind component' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 246 ; + } +#100 metre V wind component +'100 metre V wind component' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 247 ; + } +#ASCAT first soil moisture CDF matching parameter +'ASCAT first soil moisture CDF matching parameter' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 253 ; + } +#ASCAT second soil moisture CDF matching parameter +'ASCAT second soil moisture CDF matching parameter' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 254 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def new file mode 100644 index 000000000..89a280304 --- /dev/null +++ b/definitions/grib2/localConcepts/ecmf/paramId.def @@ -0,0 +1,17149 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total precipitation of at least 1 mm +'131060' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 60 ; + } +#Total precipitation of at least 5 mm +'131061' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 61 ; + } +#Total precipitation of at least 40 mm +'131082' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 82 ; + } +#Total precipitation of at least 60 mm +'131083' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 83 ; + } +#Total precipitation of at least 80 mm +'131084' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 84 ; + } +#Total precipitation of at least 100 mm +'131085' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 85 ; + } +#Total precipitation of at least 150 mm +'131086' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 86 ; + } +#Total precipitation of at least 200 mm +'131087' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 87 ; + } +#Total precipitation of at least 300 mm +'131088' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 88 ; + } +#Equivalent potential temperature +'4' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature +'5' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 5 ; + } +#Soil sand fraction +'6' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 6 ; + } +#Soil clay fraction +'7' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 7 ; + } +#Surface runoff +'8' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; + } +#Sub-surface runoff +'9' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 9 ; + } +#U component of divergent wind +'11' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 11 ; + } +#V component of divergent wind +'12' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 12 ; + } +#U component of rotational wind +'13' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 13 ; + } +#V component of rotational wind +'14' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 14 ; + } +#UV visible albedo for direct radiation +'15' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 15 ; + } +#UV visible albedo for diffuse radiation +'16' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 16 ; + } +#Near IR albedo for direct radiation +'17' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 17 ; + } +#Near IR albedo for diffuse radiation +'18' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 18 ; + } +#Clear sky surface UV +'19' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 19 ; + } +#Clear sky surface photosynthetically active radiation +'20' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 20 ; + } +#Unbalanced component of temperature +'21' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'22' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence +'23' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'24' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'25' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 25 ; + } +#Lake cover +'26' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } +#Low vegetation cover +'27' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 27 ; + } +#High vegetation cover +'28' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 28 ; + } +#Type of low vegetation +'29' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 29 ; + } +#Type of high vegetation +'30' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 30 ; + } +#Sea-ice cover +'31' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 31 ; + } +#Snow albedo +'32' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; + } +#Snow density +'33' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 33 ; + } +#Sea surface temperature +'34' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 34 ; + } +#Ice temperature layer 1 +'35' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 35 ; + } +#Ice temperature layer 2 +'36' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 36 ; + } +#Ice temperature layer 3 +'37' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 37 ; + } +#Ice temperature layer 4 +'38' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 +'39' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'40' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'41' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'42' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 42 ; + } +#Soil type +'43' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Snow evaporation +'44' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; + } +#Snowmelt +'45' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; + } +#Solar duration +'46' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 46 ; + } +#Direct solar radiation +'47' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress +'48' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 48 ; + } +#10 metre wind gust +'49' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction +'50' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'51' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + lengthOfTimeRange = 24 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'52' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + lengthOfTimeRange = 24 ; + } +#Montgomery potential +'53' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; + } +#Mean temperature at 2 metres in the last 24 hours +'55' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours +'56' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface +'57' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface +'58' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; + } +#Observation count +'62' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'63' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'64' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'65' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'66' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'67' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'68' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'69' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'70' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'71' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 71 ; + } +#Instantaneous surface solar radiation downwards +'72' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 72 ; + } +#Instantaneous surface thermal radiation downwards +'73' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 73 ; + } +#Standard deviation of filtered subgrid orography +'74' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 74 ; + } +#Specific rain water content +'75' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + } +#Specific snow water content +'76' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + } +#Eta-coordinate vertical velocity +'77' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + } +#Total column liquid water +'78' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 78 ; + } +#Total column ice water +'79' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 79 ; + } +#Experimental product +'80' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 80 ; + } +#Experimental product +'81' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 81 ; + } +#Experimental product +'82' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 82 ; + } +#Experimental product +'83' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 83 ; + } +#Experimental product +'84' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 84 ; + } +#Experimental product +'85' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 85 ; + } +#Experimental product +'86' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 86 ; + } +#Experimental product +'87' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 87 ; + } +#Experimental product +'88' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 88 ; + } +#Experimental product +'89' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 89 ; + } +#Experimental product +'90' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 90 ; + } +#Experimental product +'91' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 91 ; + } +#Experimental product +'92' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 92 ; + } +#Experimental product +'93' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 93 ; + } +#Experimental product +'94' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 94 ; + } +#Experimental product +'95' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 95 ; + } +#Experimental product +'96' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 96 ; + } +#Experimental product +'97' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 97 ; + } +#Experimental product +'98' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 98 ; + } +#Experimental product +'99' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 99 ; + } +#Experimental product +'100' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 100 ; + } +#Experimental product +'101' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 101 ; + } +#Experimental product +'102' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 102 ; + } +#Experimental product +'103' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 103 ; + } +#Experimental product +'104' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 104 ; + } +#Experimental product +'105' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 105 ; + } +#Experimental product +'106' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 106 ; + } +#Experimental product +'107' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 107 ; + } +#Experimental product +'108' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 108 ; + } +#Experimental product +'109' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 109 ; + } +#Experimental product +'110' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 110 ; + } +#Experimental product +'111' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 111 ; + } +#Experimental product +'112' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 112 ; + } +#Experimental product +'113' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 113 ; + } +#Experimental product +'114' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 114 ; + } +#Experimental product +'115' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 115 ; + } +#Experimental product +'116' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 116 ; + } +#Experimental product +'117' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 117 ; + } +#Experimental product +'118' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 118 ; + } +#Experimental product +'119' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 119 ; + } +#Experimental product +'120' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'121' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + lengthOfTimeRange = 6 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'122' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + lengthOfTimeRange = 6 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#10 metre wind gust in the last 6 hours +'123' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 123 ; + } +#Surface emissivity +'124' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 124 ; + } +#Vertically integrated total energy +'125' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'126' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 126 ; + } +#Atmospheric tide +'127' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 127 ; + } +#Budget values +'128' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 128 ; + } +#Geopotential +'129' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Total column water vapour +'137' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 137 ; + } +#Vorticity (relative) +'138' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + } +#Soil temperature level 1 +'139' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 +'140' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 140 ; + } +#Snow depth +'141' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + unitsFactor = 1000 ; + } +#Large-scale precipitation +'142' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; + } +#Convective precipitation +'143' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 10 ; + unitsFactor = 1000 ; + } +#Snowfall +'144' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation +'145' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + } +#Charnock +'148' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 148 ; + } +#Surface net radiation +'149' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 149 ; + } +#Top net radiation +'150' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 150 ; + } +#Logarithm of surface pressure +'152' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + } +#Short-wave heating rate +'153' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 153 ; + } +#Long-wave heating rate +'154' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 154 ; + } +#Divergence +'155' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + } +#Relative humidity +'157' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Tendency of surface pressure +'158' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 158 ; + } +#Boundary layer height +'159' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; + } +#Standard deviation of orography +'160' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography +'161' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography +'162' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography +'163' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; + } +#Total cloud cover +'164' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; + } +#10 metre U wind component +'165' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#10 metre V wind component +'166' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2 metre temperature +'167' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Surface solar radiation downwards +'169' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 +'170' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 +'171' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 171 ; + } +#Surface roughness +'173' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Albedo +'174' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards +'175' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 175 ; + } +#Top net solar radiation +'178' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 178 ; + } +#East-West surface stress +'180' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 180 ; + } +#North-South surface stress +'181' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 181 ; + } +#Evaporation +'182' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 +'183' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 +'184' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 184 ; + } +#Convective cloud cover +'185' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 185 ; + } +#Low cloud cover +'186' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; + } +#Medium cloud cover +'187' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; + } +#High cloud cover +'188' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; + } +#East-West component of sub-gridscale orographic variance +'190' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance +'191' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'192' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'193' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 193 ; + } +#Longitudinal component of gravity wave stress +'195' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress +'196' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'197' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; + } +#Skin reservoir content +'198' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 198 ; + } +#Vegetation fraction +'199' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography +'200' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing +'201' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing +'202' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio +'203' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + } +#Precipitation analysis weights +'204' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 204 ; + } +#Runoff +'205' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 205 ; + } +#Total column ozone +'206' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; + } +#Top net solar radiation, clear sky +'208' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'209' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'210' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'211' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation +'212' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; + } +#Vertically integrated moisture divergence +'213' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 213 ; + } +#Diabatic heating by radiation +'214' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion +'215' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection +'216' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation +'217' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind +'218' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind +'219' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency +'220' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency +'221' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind +'222' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind +'223' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity +'224' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection +'225' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation +'226' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 226 ; + } +#Tendency due to removal of negative humidity +'227' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 227 ; + } +#Total precipitation +'228' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + unitsFactor = 1000 ; + } +#Instantaneous X surface stress +'229' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress +'230' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; + } +#Instantaneous surface sensible heat flux +'231' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux +'232' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; + } +#Apparent surface humidity +'233' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat +'234' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 234 ; + } +#Soil temperature level 4 +'236' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 +'237' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 237 ; + } +#Temperature of snow layer +'238' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 238 ; + } +#Convective snowfall +'239' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; + } +#Large-scale snowfall +'240' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency +'241' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency +'242' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 242 ; + } +#Forecast albedo +'243' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 243 ; + } +#Forecast surface roughness +'244' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat +'245' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content +'246' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + } +#Specific cloud ice water content +'247' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + } +#Cloud cover +'248' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + } +#Accumulated ice water tendency +'249' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 249 ; + } +#Ice age +'250' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature +'251' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity +'252' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind +'253' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind +'254' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'255' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 255 ; + } +#Stream function difference +'200001' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 1 ; + } +#Velocity potential difference +'200002' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 2 ; + } +#Potential temperature difference +'200003' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature difference +'200004' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature difference +'200005' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 5 ; + } +#U component of divergent wind difference +'200011' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 11 ; + } +#V component of divergent wind difference +'200012' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 12 ; + } +#U component of rotational wind difference +'200013' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 13 ; + } +#V component of rotational wind difference +'200014' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature difference +'200021' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure difference +'200022' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence difference +'200023' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'200024' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'200025' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 25 ; + } +#Lake cover difference +'200026' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 26 ; + } +#Low vegetation cover difference +'200027' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 27 ; + } +#High vegetation cover difference +'200028' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 28 ; + } +#Type of low vegetation difference +'200029' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 29 ; + } +#Type of high vegetation difference +'200030' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 30 ; + } +#Sea-ice cover difference +'200031' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 31 ; + } +#Snow albedo difference +'200032' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 32 ; + } +#Snow density difference +'200033' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 33 ; + } +#Sea surface temperature difference +'200034' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 34 ; + } +#Ice surface temperature layer 1 difference +'200035' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 35 ; + } +#Ice surface temperature layer 2 difference +'200036' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 36 ; + } +#Ice surface temperature layer 3 difference +'200037' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 37 ; + } +#Ice surface temperature layer 4 difference +'200038' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 difference +'200039' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 difference +'200040' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 difference +'200041' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 difference +'200042' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 42 ; + } +#Soil type difference +'200043' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 43 ; + } +#Snow evaporation difference +'200044' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 44 ; + } +#Snowmelt difference +'200045' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 45 ; + } +#Solar duration difference +'200046' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 46 ; + } +#Direct solar radiation difference +'200047' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress difference +'200048' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 48 ; + } +#10 metre wind gust difference +'200049' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction difference +'200050' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature difference +'200051' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature difference +'200052' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 52 ; + } +#Montgomery potential difference +'200053' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 53 ; + } +#Pressure difference +'200054' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours difference +'200055' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours difference +'200056' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface difference +'200057' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface difference +'200058' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 58 ; + } +#Convective available potential energy difference +'200059' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 59 ; + } +#Potential vorticity difference +'200060' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 60 ; + } +#Total precipitation from observations difference +'200061' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 61 ; + } +#Observation count difference +'200062' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'200063' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'200064' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'200065' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'200066' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'200067' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'200068' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'200069' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'200070' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'200071' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 71 ; + } +#Total column liquid water +'200078' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 78 ; + } +#Total column ice water +'200079' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 79 ; + } +#Experimental product +'200080' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 80 ; + } +#Experimental product +'200081' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 81 ; + } +#Experimental product +'200082' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 82 ; + } +#Experimental product +'200083' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 83 ; + } +#Experimental product +'200084' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 84 ; + } +#Experimental product +'200085' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 85 ; + } +#Experimental product +'200086' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 86 ; + } +#Experimental product +'200087' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 87 ; + } +#Experimental product +'200088' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 88 ; + } +#Experimental product +'200089' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 89 ; + } +#Experimental product +'200090' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 90 ; + } +#Experimental product +'200091' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 91 ; + } +#Experimental product +'200092' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 92 ; + } +#Experimental product +'200093' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 93 ; + } +#Experimental product +'200094' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 94 ; + } +#Experimental product +'200095' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 95 ; + } +#Experimental product +'200096' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 96 ; + } +#Experimental product +'200097' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 97 ; + } +#Experimental product +'200098' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 98 ; + } +#Experimental product +'200099' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 99 ; + } +#Experimental product +'200100' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 100 ; + } +#Experimental product +'200101' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 101 ; + } +#Experimental product +'200102' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 102 ; + } +#Experimental product +'200103' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 103 ; + } +#Experimental product +'200104' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 104 ; + } +#Experimental product +'200105' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 105 ; + } +#Experimental product +'200106' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 106 ; + } +#Experimental product +'200107' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 107 ; + } +#Experimental product +'200108' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 108 ; + } +#Experimental product +'200109' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 109 ; + } +#Experimental product +'200110' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 110 ; + } +#Experimental product +'200111' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 111 ; + } +#Experimental product +'200112' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 112 ; + } +#Experimental product +'200113' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 113 ; + } +#Experimental product +'200114' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 114 ; + } +#Experimental product +'200115' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 115 ; + } +#Experimental product +'200116' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 116 ; + } +#Experimental product +'200117' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 117 ; + } +#Experimental product +'200118' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 118 ; + } +#Experimental product +'200119' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 119 ; + } +#Experimental product +'200120' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres difference +'200121' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres difference +'200122' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 122 ; + } +#10 metre wind gust in the last 6 hours difference +'200123' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 123 ; + } +#Vertically integrated total energy +'200125' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'200126' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 126 ; + } +#Atmospheric tide difference +'200127' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 127 ; + } +#Budget values difference +'200128' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 128 ; + } +#Geopotential difference +'200129' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 129 ; + } +#Temperature difference +'200130' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 130 ; + } +#U component of wind difference +'200131' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 131 ; + } +#V component of wind difference +'200132' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 132 ; + } +#Specific humidity difference +'200133' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 133 ; + } +#Surface pressure difference +'200134' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 134 ; + } +#Vertical velocity (pressure) difference +'200135' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 135 ; + } +#Total column water difference +'200136' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 136 ; + } +#Total column water vapour difference +'200137' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 137 ; + } +#Vorticity (relative) difference +'200138' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 138 ; + } +#Soil temperature level 1 difference +'200139' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 difference +'200140' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 140 ; + } +#Snow depth difference +'200141' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) difference +'200142' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 142 ; + } +#Convective precipitation difference +'200143' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) difference +'200144' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation difference +'200145' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux difference +'200146' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 146 ; + } +#Surface latent heat flux difference +'200147' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 147 ; + } +#Charnock difference +'200148' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 148 ; + } +#Surface net radiation difference +'200149' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 149 ; + } +#Top net radiation difference +'200150' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 150 ; + } +#Mean sea level pressure difference +'200151' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure difference +'200152' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 152 ; + } +#Short-wave heating rate difference +'200153' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 153 ; + } +#Long-wave heating rate difference +'200154' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 154 ; + } +#Divergence difference +'200155' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 155 ; + } +#Height difference +'200156' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 156 ; + } +#Relative humidity difference +'200157' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure difference +'200158' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 158 ; + } +#Boundary layer height difference +'200159' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 159 ; + } +#Standard deviation of orography difference +'200160' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography difference +'200161' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography difference +'200162' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography difference +'200163' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 163 ; + } +#Total cloud cover difference +'200164' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 164 ; + } +#10 metre U wind component difference +'200165' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 165 ; + } +#10 metre V wind component difference +'200166' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 166 ; + } +#2 metre temperature difference +'200167' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 167 ; + } +#Surface solar radiation downwards difference +'200169' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 difference +'200170' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 difference +'200171' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 171 ; + } +#Land-sea mask difference +'200172' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 172 ; + } +#Surface roughness difference +'200173' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 173 ; + } +#Albedo difference +'200174' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards difference +'200175' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 175 ; + } +#Surface net solar radiation difference +'200176' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation difference +'200177' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 177 ; + } +#Top net solar radiation difference +'200178' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 178 ; + } +#Top net thermal radiation difference +'200179' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 179 ; + } +#East-West surface stress difference +'200180' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 180 ; + } +#North-South surface stress difference +'200181' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 181 ; + } +#Evaporation difference +'200182' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 difference +'200183' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 difference +'200184' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 184 ; + } +#Convective cloud cover difference +'200185' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 185 ; + } +#Low cloud cover difference +'200186' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 186 ; + } +#Medium cloud cover difference +'200187' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 187 ; + } +#High cloud cover difference +'200188' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 188 ; + } +#Sunshine duration difference +'200189' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance difference +'200190' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance difference +'200191' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance difference +'200192' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance difference +'200193' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 193 ; + } +#Brightness temperature difference +'200194' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress difference +'200195' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress difference +'200196' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation difference +'200197' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 197 ; + } +#Skin reservoir content difference +'200198' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 198 ; + } +#Vegetation fraction difference +'200199' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography difference +'200200' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing difference +'200201' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing difference +'200202' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio difference +'200203' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights difference +'200204' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 204 ; + } +#Runoff difference +'200205' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 205 ; + } +#Total column ozone difference +'200206' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 206 ; + } +#10 metre wind speed difference +'200207' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 207 ; + } +#Top net solar radiation, clear sky difference +'200208' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky difference +'200209' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky difference +'200210' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky difference +'200211' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation difference +'200212' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation difference +'200214' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion difference +'200215' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection difference +'200216' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation difference +'200217' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind difference +'200218' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind difference +'200219' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency difference +'200220' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency difference +'200221' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind difference +'200222' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind difference +'200223' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity difference +'200224' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection difference +'200225' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation difference +'200226' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity difference +'200227' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 227 ; + } +#Total precipitation difference +'200228' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress difference +'200229' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress difference +'200230' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux difference +'200231' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux difference +'200232' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 232 ; + } +#Apparent surface humidity difference +'200233' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat difference +'200234' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 234 ; + } +#Skin temperature difference +'200235' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 difference +'200236' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 difference +'200237' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 237 ; + } +#Temperature of snow layer difference +'200238' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 238 ; + } +#Convective snowfall difference +'200239' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 239 ; + } +#Large scale snowfall difference +'200240' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency difference +'200241' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency difference +'200242' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 242 ; + } +#Forecast albedo difference +'200243' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 243 ; + } +#Forecast surface roughness difference +'200244' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat difference +'200245' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content difference +'200246' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 246 ; + } +#Specific cloud ice water content difference +'200247' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 247 ; + } +#Cloud cover difference +'200248' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency difference +'200249' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 249 ; + } +#Ice age difference +'200250' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature difference +'200251' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity difference +'200252' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind difference +'200253' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind difference +'200254' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'200255' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 255 ; + } +#Maximum of significant wave height index +'132216' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 216 ; + } +#Reserved +'151193' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 193 ; + } +#U-tendency from dynamics +'162114' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 114 ; + } +#V-tendency from dynamics +'162115' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 115 ; + } +#T-tendency from dynamics +'162116' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 116 ; + } +#q-tendency from dynamics +'162117' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 117 ; + } +#T-tendency from radiation +'162118' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 118 ; + } +#U-tendency from turbulent diffusion + subgrid orography +'162119' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 119 ; + } +#V-tendency from turbulent diffusion + subgrid orography +'162120' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 120 ; + } +#T-tendency from turbulent diffusion + subgrid orography +'162121' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 121 ; + } +#q-tendency from turbulent diffusion +'162122' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 122 ; + } +#U-tendency from subgrid orography +'162123' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 123 ; + } +#V-tendency from subgrid orography +'162124' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 124 ; + } +#T-tendency from subgrid orography +'162125' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 125 ; + } +#U-tendency from convection (deep+shallow) +'162126' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 126 ; + } +#V-tendency from convection (deep+shallow) +'162127' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 127 ; + } +#T-tendency from convection (deep+shallow) +'162128' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 128 ; + } +#q-tendency from convection (deep+shallow) +'162129' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 129 ; + } +#Liquid Precipitation flux from convection +'162130' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 130 ; + } +#Ice Precipitation flux from convection +'162131' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 131 ; + } +#T-tendency from cloud scheme +'162132' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 132 ; + } +#q-tendency from cloud scheme +'162133' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 133 ; + } +#ql-tendency from cloud scheme +'162134' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 134 ; + } +#qi-tendency from cloud scheme +'162135' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 135 ; + } +#Liquid Precip flux from cloud scheme (stratiform) +'162136' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 136 ; + } +#Ice Precip flux from cloud scheme (stratiform) +'162137' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 137 ; + } +#U-tendency from shallow convection +'162138' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 138 ; + } +#V-tendency from shallow convection +'162139' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 139 ; + } +#T-tendency from shallow convection +'162140' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 140 ; + } +#q-tendency from shallow convection +'162141' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 141 ; + } +#100 metre U wind component anomaly +'171006' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 6 ; + } +#100 metre V wind component anomaly +'171007' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 7 ; + } +#Maximum temperature at 2 metres in the last 6 hours anomaly +'171121' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours anomaly +'171122' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 122 ; + } +#Aerosol type 13 mass mixing ratio +'210013' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 13 ; + } +#Aerosol type 14 mass mixing ratio +'210014' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 14 ; + } +#Aerosol type 15 mass mixing ratio +'210015' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 15 ; + } +#SO4 aerosol precursor mass mixing ratio +'210028' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'210029' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'210030' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 30 ; + } +#DMS surface emission +'210043' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'210044' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'210045' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 45 ; + } +#Experimental product +'210055' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 55 ; + } +#Experimental product +'210056' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 56 ; + } +#Mixing ration of organic carbon aerosol, nucleation mode +'210057' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 57 ; + } +#Monoterpene precursor mixing ratio +'210058' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 58 ; + } +#Secondary organic precursor mixing ratio +'210059' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 59 ; + } +#Particulate matter d < 1 um +'210072' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 72 ; + } +#Particulate matter d < 2.5 um +'210073' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 73 ; + } +#Particulate matter d < 10 um +'210074' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 74 ; + } +#Wildfire viewing angle of observation +'210079' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 79 ; + } +#Wildfire Flux of Ethane (C2H6) +'210118' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 118 ; + } +#Altitude of emitter +'210119' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 119 ; + } +#Altitude of plume top +'210120' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 120 ; + } +#UV visible albedo for direct radiation, isotropic component +'210186' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 186 ; + } +#UV visible albedo for direct radiation, volumetric component +'210187' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 187 ; + } +#UV visible albedo for direct radiation, geometric component +'210188' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 188 ; + } +#Near IR albedo for direct radiation, isotropic component +'210189' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 189 ; + } +#Near IR albedo for direct radiation, volumetric component +'210190' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 190 ; + } +#Near IR albedo for direct radiation, geometric component +'210191' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component +'210192' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component +'210193' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component +'210194' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component +'210195' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component +'210196' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component +'210197' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; + } +#Total aerosol optical depth at 340 nm +'210217' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 217 ; + } +#Total aerosol optical depth at 355 nm +'210218' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 218 ; + } +#Total aerosol optical depth at 380 nm +'210219' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 219 ; + } +#Total aerosol optical depth at 400 nm +'210220' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 220 ; + } +#Total aerosol optical depth at 440 nm +'210221' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 221 ; + } +#Total aerosol optical depth at 500 nm +'210222' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 222 ; + } +#Total aerosol optical depth at 532 nm +'210223' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 223 ; + } +#Total aerosol optical depth at 645 nm +'210224' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 224 ; + } +#Total aerosol optical depth at 800 nm +'210225' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 225 ; + } +#Total aerosol optical depth at 858 nm +'210226' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 226 ; + } +#Total aerosol optical depth at 1020 nm +'210227' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 227 ; + } +#Total aerosol optical depth at 1064 nm +'210228' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 228 ; + } +#Total aerosol optical depth at 1640 nm +'210229' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 229 ; + } +#Total aerosol optical depth at 2130 nm +'210230' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 230 ; + } +#Wildfire Flux of Toluene (C7H8) +'210231' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 231 ; + } +#Wildfire Flux of Benzene (C6H6) +'210232' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 232 ; + } +#Wildfire Flux of Xylene (C8H10) +'210233' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 233 ; + } +#Wildfire Flux of Butenes (C4H8) +'210234' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 234 ; + } +#Wildfire Flux of Pentenes (C5H10) +'210235' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 235 ; + } +#Wildfire Flux of Hexene (C6H12) +'210236' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 236 ; + } +#Wildfire Flux of Octene (C8H16) +'210237' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 237 ; + } +#Wildfire Flux of Butanes (C4H10) +'210238' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 238 ; + } +#Wildfire Flux of Pentanes (C5H12) +'210239' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 239 ; + } +#Wildfire Flux of Hexanes (C6H14) +'210240' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 240 ; + } +#Wildfire Flux of Heptane (C7H16) +'210241' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 241 ; + } +#Aerosol type 13 mass mixing ratio +'211013' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 13 ; + } +#Aerosol type 14 mass mixing ratio +'211014' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 14 ; + } +#SO4 aerosol precursor mass mixing ratio +'211028' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'211029' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'211030' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 30 ; + } +#DMS surface emission +'211043' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'211044' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'211045' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 45 ; + } +#Experimental product +'211055' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 55 ; + } +#Experimental product +'211056' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 56 ; + } +#Wildfire Flux of Ethane (C2H6) +'211118' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 118 ; + } +#Altitude of emitter +'211119' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 119 ; + } +#Altitude of plume top +'211120' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 120 ; + } +#Experimental product +'212001' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 1 ; + } +#Experimental product +'212002' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 2 ; + } +#Experimental product +'212003' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 3 ; + } +#Experimental product +'212004' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 4 ; + } +#Experimental product +'212005' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 5 ; + } +#Experimental product +'212006' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 6 ; + } +#Experimental product +'212007' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 7 ; + } +#Experimental product +'212008' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 8 ; + } +#Experimental product +'212009' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 9 ; + } +#Experimental product +'212010' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 10 ; + } +#Experimental product +'212011' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 11 ; + } +#Experimental product +'212012' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 12 ; + } +#Experimental product +'212013' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 13 ; + } +#Experimental product +'212014' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 14 ; + } +#Experimental product +'212015' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 15 ; + } +#Experimental product +'212016' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 16 ; + } +#Experimental product +'212017' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 17 ; + } +#Experimental product +'212018' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 18 ; + } +#Experimental product +'212019' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 19 ; + } +#Experimental product +'212020' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 20 ; + } +#Experimental product +'212021' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 21 ; + } +#Experimental product +'212022' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 22 ; + } +#Experimental product +'212023' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 23 ; + } +#Experimental product +'212024' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 24 ; + } +#Experimental product +'212025' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 25 ; + } +#Experimental product +'212026' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 26 ; + } +#Experimental product +'212027' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 27 ; + } +#Experimental product +'212028' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 28 ; + } +#Experimental product +'212029' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 29 ; + } +#Experimental product +'212030' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 30 ; + } +#Experimental product +'212031' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 31 ; + } +#Experimental product +'212032' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 32 ; + } +#Experimental product +'212033' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 33 ; + } +#Experimental product +'212034' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 34 ; + } +#Experimental product +'212035' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 35 ; + } +#Experimental product +'212036' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 36 ; + } +#Experimental product +'212037' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 37 ; + } +#Experimental product +'212038' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 38 ; + } +#Experimental product +'212039' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 39 ; + } +#Experimental product +'212040' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 40 ; + } +#Experimental product +'212041' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 41 ; + } +#Experimental product +'212042' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 42 ; + } +#Experimental product +'212043' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 43 ; + } +#Experimental product +'212044' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 44 ; + } +#Experimental product +'212045' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 45 ; + } +#Experimental product +'212046' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 46 ; + } +#Experimental product +'212047' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 47 ; + } +#Experimental product +'212048' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 48 ; + } +#Experimental product +'212049' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 49 ; + } +#Experimental product +'212050' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 50 ; + } +#Experimental product +'212051' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 51 ; + } +#Experimental product +'212052' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 52 ; + } +#Experimental product +'212053' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 53 ; + } +#Experimental product +'212054' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 54 ; + } +#Experimental product +'212055' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 55 ; + } +#Experimental product +'212056' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 56 ; + } +#Experimental product +'212057' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 57 ; + } +#Experimental product +'212058' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 58 ; + } +#Experimental product +'212059' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 59 ; + } +#Experimental product +'212060' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 60 ; + } +#Experimental product +'212061' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 61 ; + } +#Experimental product +'212062' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 62 ; + } +#Experimental product +'212063' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 63 ; + } +#Experimental product +'212064' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 64 ; + } +#Experimental product +'212065' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 65 ; + } +#Experimental product +'212066' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 66 ; + } +#Experimental product +'212067' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 67 ; + } +#Experimental product +'212068' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 68 ; + } +#Experimental product +'212069' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 69 ; + } +#Experimental product +'212070' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 70 ; + } +#Experimental product +'212071' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 71 ; + } +#Experimental product +'212072' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 72 ; + } +#Experimental product +'212073' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 73 ; + } +#Experimental product +'212074' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 74 ; + } +#Experimental product +'212075' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 75 ; + } +#Experimental product +'212076' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 76 ; + } +#Experimental product +'212077' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 77 ; + } +#Experimental product +'212078' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 78 ; + } +#Experimental product +'212079' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 79 ; + } +#Experimental product +'212080' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 80 ; + } +#Experimental product +'212081' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 81 ; + } +#Experimental product +'212082' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 82 ; + } +#Experimental product +'212083' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 83 ; + } +#Experimental product +'212084' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 84 ; + } +#Experimental product +'212085' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 85 ; + } +#Experimental product +'212086' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 86 ; + } +#Experimental product +'212087' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 87 ; + } +#Experimental product +'212088' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 88 ; + } +#Experimental product +'212089' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 89 ; + } +#Experimental product +'212090' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 90 ; + } +#Experimental product +'212091' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 91 ; + } +#Experimental product +'212092' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 92 ; + } +#Experimental product +'212093' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 93 ; + } +#Experimental product +'212094' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 94 ; + } +#Experimental product +'212095' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 95 ; + } +#Experimental product +'212096' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 96 ; + } +#Experimental product +'212097' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 97 ; + } +#Experimental product +'212098' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 98 ; + } +#Experimental product +'212099' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 99 ; + } +#Experimental product +'212100' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 100 ; + } +#Experimental product +'212101' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 101 ; + } +#Experimental product +'212102' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 102 ; + } +#Experimental product +'212103' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 103 ; + } +#Experimental product +'212104' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 104 ; + } +#Experimental product +'212105' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 105 ; + } +#Experimental product +'212106' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 106 ; + } +#Experimental product +'212107' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 107 ; + } +#Experimental product +'212108' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 108 ; + } +#Experimental product +'212109' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 109 ; + } +#Experimental product +'212110' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 110 ; + } +#Experimental product +'212111' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 111 ; + } +#Experimental product +'212112' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 112 ; + } +#Experimental product +'212113' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 113 ; + } +#Experimental product +'212114' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 114 ; + } +#Experimental product +'212115' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 115 ; + } +#Experimental product +'212116' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 116 ; + } +#Experimental product +'212117' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 117 ; + } +#Experimental product +'212118' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 118 ; + } +#Experimental product +'212119' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 119 ; + } +#Experimental product +'212120' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 120 ; + } +#Experimental product +'212121' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 121 ; + } +#Experimental product +'212122' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 122 ; + } +#Experimental product +'212123' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 123 ; + } +#Experimental product +'212124' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 124 ; + } +#Experimental product +'212125' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 125 ; + } +#Experimental product +'212126' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 126 ; + } +#Experimental product +'212127' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 127 ; + } +#Experimental product +'212128' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 128 ; + } +#Experimental product +'212129' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 129 ; + } +#Experimental product +'212130' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 130 ; + } +#Experimental product +'212131' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 131 ; + } +#Experimental product +'212132' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 132 ; + } +#Experimental product +'212133' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 133 ; + } +#Experimental product +'212134' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 134 ; + } +#Experimental product +'212135' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 135 ; + } +#Experimental product +'212136' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 136 ; + } +#Experimental product +'212137' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 137 ; + } +#Experimental product +'212138' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 138 ; + } +#Experimental product +'212139' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 139 ; + } +#Experimental product +'212140' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 140 ; + } +#Experimental product +'212141' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 141 ; + } +#Experimental product +'212142' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 142 ; + } +#Experimental product +'212143' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 143 ; + } +#Experimental product +'212144' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 144 ; + } +#Experimental product +'212145' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 145 ; + } +#Experimental product +'212146' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 146 ; + } +#Experimental product +'212147' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 147 ; + } +#Experimental product +'212148' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 148 ; + } +#Experimental product +'212149' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 149 ; + } +#Experimental product +'212150' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 150 ; + } +#Experimental product +'212151' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 151 ; + } +#Experimental product +'212152' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 152 ; + } +#Experimental product +'212153' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 153 ; + } +#Experimental product +'212154' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 154 ; + } +#Experimental product +'212155' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 155 ; + } +#Experimental product +'212156' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 156 ; + } +#Experimental product +'212157' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 157 ; + } +#Experimental product +'212158' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 158 ; + } +#Experimental product +'212159' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 159 ; + } +#Experimental product +'212160' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 160 ; + } +#Experimental product +'212161' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 161 ; + } +#Experimental product +'212162' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 162 ; + } +#Experimental product +'212163' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 163 ; + } +#Experimental product +'212164' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 164 ; + } +#Experimental product +'212165' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 165 ; + } +#Experimental product +'212166' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 166 ; + } +#Experimental product +'212167' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 167 ; + } +#Experimental product +'212168' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 168 ; + } +#Experimental product +'212169' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 169 ; + } +#Experimental product +'212170' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 170 ; + } +#Experimental product +'212171' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 171 ; + } +#Experimental product +'212172' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 172 ; + } +#Experimental product +'212173' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 173 ; + } +#Experimental product +'212174' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 174 ; + } +#Experimental product +'212175' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 175 ; + } +#Experimental product +'212176' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 176 ; + } +#Experimental product +'212177' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 177 ; + } +#Experimental product +'212178' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 178 ; + } +#Experimental product +'212179' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 179 ; + } +#Experimental product +'212180' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 180 ; + } +#Experimental product +'212181' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 181 ; + } +#Experimental product +'212182' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 182 ; + } +#Experimental product +'212183' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 183 ; + } +#Experimental product +'212184' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 184 ; + } +#Experimental product +'212185' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 185 ; + } +#Experimental product +'212186' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 186 ; + } +#Experimental product +'212187' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 187 ; + } +#Experimental product +'212188' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 188 ; + } +#Experimental product +'212189' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 189 ; + } +#Experimental product +'212190' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 190 ; + } +#Experimental product +'212191' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 191 ; + } +#Experimental product +'212192' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 192 ; + } +#Experimental product +'212193' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 193 ; + } +#Experimental product +'212194' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 194 ; + } +#Experimental product +'212195' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 195 ; + } +#Experimental product +'212196' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 196 ; + } +#Experimental product +'212197' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 197 ; + } +#Experimental product +'212198' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 198 ; + } +#Experimental product +'212199' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 199 ; + } +#Experimental product +'212200' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 200 ; + } +#Experimental product +'212201' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 201 ; + } +#Experimental product +'212202' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 202 ; + } +#Experimental product +'212203' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 203 ; + } +#Experimental product +'212204' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 204 ; + } +#Experimental product +'212205' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 205 ; + } +#Experimental product +'212206' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 206 ; + } +#Experimental product +'212207' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 207 ; + } +#Experimental product +'212208' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 208 ; + } +#Experimental product +'212209' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 209 ; + } +#Experimental product +'212210' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 210 ; + } +#Experimental product +'212211' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 211 ; + } +#Experimental product +'212212' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 212 ; + } +#Experimental product +'212213' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 213 ; + } +#Experimental product +'212214' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 214 ; + } +#Experimental product +'212215' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 215 ; + } +#Experimental product +'212216' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 216 ; + } +#Experimental product +'212217' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 217 ; + } +#Experimental product +'212218' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 218 ; + } +#Experimental product +'212219' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 219 ; + } +#Experimental product +'212220' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 220 ; + } +#Experimental product +'212221' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 221 ; + } +#Experimental product +'212222' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 222 ; + } +#Experimental product +'212223' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 223 ; + } +#Experimental product +'212224' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 224 ; + } +#Experimental product +'212225' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 225 ; + } +#Experimental product +'212226' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 226 ; + } +#Experimental product +'212227' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 227 ; + } +#Experimental product +'212228' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 228 ; + } +#Experimental product +'212229' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 229 ; + } +#Experimental product +'212230' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 230 ; + } +#Experimental product +'212231' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 231 ; + } +#Experimental product +'212232' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 232 ; + } +#Experimental product +'212233' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 233 ; + } +#Experimental product +'212234' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 234 ; + } +#Experimental product +'212235' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 235 ; + } +#Experimental product +'212236' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 236 ; + } +#Experimental product +'212237' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 237 ; + } +#Experimental product +'212238' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 238 ; + } +#Experimental product +'212239' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 239 ; + } +#Experimental product +'212240' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 240 ; + } +#Experimental product +'212241' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 241 ; + } +#Experimental product +'212242' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 242 ; + } +#Experimental product +'212243' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 243 ; + } +#Experimental product +'212244' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 244 ; + } +#Experimental product +'212245' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 245 ; + } +#Experimental product +'212246' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 246 ; + } +#Experimental product +'212247' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 247 ; + } +#Experimental product +'212248' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 248 ; + } +#Experimental product +'212249' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 249 ; + } +#Experimental product +'212250' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 250 ; + } +#Experimental product +'212251' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 251 ; + } +#Experimental product +'212252' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 252 ; + } +#Experimental product +'212253' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 253 ; + } +#Experimental product +'212254' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 254 ; + } +#Experimental product +'212255' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 255 ; + } +#Random pattern 1 for sppt +'213001' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 1 ; + } +#Random pattern 2 for sppt +'213002' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 2 ; + } +#Random pattern 3 for sppt +'213003' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 3 ; + } +#Random pattern 4 for sppt +'213004' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 4 ; + } +#Random pattern 5 for sppt +'213005' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 5 ; + } +# Cosine of solar zenith angle +'214001' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 1 ; + } +# UV biologically effective dose +'214002' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 2 ; + } +# UV biologically effective dose clear-sky +'214003' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 3 ; + } +# Total surface UV spectral flux (280-285 nm) +'214004' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 4 ; + } +# Total surface UV spectral flux (285-290 nm) +'214005' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 5 ; + } +# Total surface UV spectral flux (290-295 nm) +'214006' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 6 ; + } +# Total surface UV spectral flux (295-300 nm) +'214007' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 7 ; + } +# Total surface UV spectral flux (300-305 nm) +'214008' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 8 ; + } +# Total surface UV spectral flux (305-310 nm) +'214009' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 9 ; + } +# Total surface UV spectral flux (310-315 nm) +'214010' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 10 ; + } +# Total surface UV spectral flux (315-320 nm) +'214011' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 11 ; + } +# Total surface UV spectral flux (320-325 nm) +'214012' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 12 ; + } +# Total surface UV spectral flux (325-330 nm) +'214013' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 13 ; + } +# Total surface UV spectral flux (330-335 nm) +'214014' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 14 ; + } +# Total surface UV spectral flux (335-340 nm) +'214015' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 15 ; + } +# Total surface UV spectral flux (340-345 nm) +'214016' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 16 ; + } +# Total surface UV spectral flux (345-350 nm) +'214017' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 17 ; + } +# Total surface UV spectral flux (350-355 nm) +'214018' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 18 ; + } +# Total surface UV spectral flux (355-360 nm) +'214019' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 19 ; + } +# Total surface UV spectral flux (360-365 nm) +'214020' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 20 ; + } +# Total surface UV spectral flux (365-370 nm) +'214021' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 21 ; + } +# Total surface UV spectral flux (370-375 nm) +'214022' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 22 ; + } +# Total surface UV spectral flux (375-380 nm) +'214023' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 23 ; + } +# Total surface UV spectral flux (380-385 nm) +'214024' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 24 ; + } +# Total surface UV spectral flux (385-390 nm) +'214025' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 25 ; + } +# Total surface UV spectral flux (390-395 nm) +'214026' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 26 ; + } +# Total surface UV spectral flux (395-400 nm) +'214027' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 27 ; + } +# Clear-sky surface UV spectral flux (280-285 nm) +'214028' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 28 ; + } +# Clear-sky surface UV spectral flux (285-290 nm) +'214029' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 29 ; + } +# Clear-sky surface UV spectral flux (290-295 nm) +'214030' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 30 ; + } +# Clear-sky surface UV spectral flux (295-300 nm) +'214031' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 31 ; + } +# Clear-sky surface UV spectral flux (300-305 nm) +'214032' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 32 ; + } +# Clear-sky surface UV spectral flux (305-310 nm) +'214033' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 33 ; + } +# Clear-sky surface UV spectral flux (310-315 nm) +'214034' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 34 ; + } +# Clear-sky surface UV spectral flux (315-320 nm) +'214035' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 35 ; + } +# Clear-sky surface UV spectral flux (320-325 nm) +'214036' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 36 ; + } +# Clear-sky surface UV spectral flux (325-330 nm) +'214037' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 37 ; + } +# Clear-sky surface UV spectral flux (330-335 nm) +'214038' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 38 ; + } +# Clear-sky surface UV spectral flux (335-340 nm) +'214039' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 39 ; + } +# Clear-sky surface UV spectral flux (340-345 nm) +'214040' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 40 ; + } +# Clear-sky surface UV spectral flux (345-350 nm) +'214041' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 41 ; + } +# Clear-sky surface UV spectral flux (350-355 nm) +'214042' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 42 ; + } +# Clear-sky surface UV spectral flux (355-360 nm) +'214043' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 43 ; + } +# Clear-sky surface UV spectral flux (360-365 nm) +'214044' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 44 ; + } +# Clear-sky surface UV spectral flux (365-370 nm) +'214045' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 45 ; + } +# Clear-sky surface UV spectral flux (370-375 nm) +'214046' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 46 ; + } +# Clear-sky surface UV spectral flux (375-380 nm) +'214047' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 47 ; + } +# Clear-sky surface UV spectral flux (380-385 nm) +'214048' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 48 ; + } +# Clear-sky surface UV spectral flux (385-390 nm) +'214049' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 49 ; + } +# Clear-sky surface UV spectral flux (390-395 nm) +'214050' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 50 ; + } +# Clear-sky surface UV spectral flux (395-400 nm) +'214051' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 51 ; + } +# Profile of optical thickness at 340 nm +'214052' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 52 ; + } +# Source/gain of sea salt aerosol (0.03 - 0.5 um) +'215001' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 1 ; + } +# Source/gain of sea salt aerosol (0.5 - 5 um) +'215002' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 2 ; + } +# Source/gain of sea salt aerosol (5 - 20 um) +'215003' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 3 ; + } +# Dry deposition of sea salt aerosol (0.03 - 0.5 um) +'215004' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 4 ; + } +# Dry deposition of sea salt aerosol (0.5 - 5 um) +'215005' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 5 ; + } +# Dry deposition of sea salt aerosol (5 - 20 um) +'215006' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 6 ; + } +# Sedimentation of sea salt aerosol (0.03 - 0.5 um) +'215007' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 7 ; + } +# Sedimentation of sea salt aerosol (0.5 - 5 um) +'215008' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 8 ; + } +# Sedimentation of sea salt aerosol (5 - 20 um) +'215009' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 9 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation +'215010' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 10 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation +'215011' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 11 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation +'215012' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 12 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation +'215013' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 13 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation +'215014' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 14 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation +'215015' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 15 ; + } +# Negative fixer of sea salt aerosol (0.03 - 0.5 um) +'215016' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 16 ; + } +# Negative fixer of sea salt aerosol (0.5 - 5 um) +'215017' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 17 ; + } +# Negative fixer of sea salt aerosol (5 - 20 um) +'215018' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 18 ; + } +# Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um) +'215019' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 19 ; + } +# Vertically integrated mass of sea salt aerosol (0.5 - 5 um) +'215020' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 20 ; + } +# Vertically integrated mass of sea salt aerosol (5 - 20 um) +'215021' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 21 ; + } +# Sea salt aerosol (0.03 - 0.5 um) optical depth +'215022' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 22 ; + } +# Sea salt aerosol (0.5 - 5 um) optical depth +'215023' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 23 ; + } +# Sea salt aerosol (5 - 20 um) optical depth +'215024' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 24 ; + } +# Source/gain of dust aerosol (0.03 - 0.55 um) +'215025' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 25 ; + } +# Source/gain of dust aerosol (0.55 - 9 um) +'215026' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 26 ; + } +# Source/gain of dust aerosol (9 - 20 um) +'215027' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 27 ; + } +# Dry deposition of dust aerosol (0.03 - 0.55 um) +'215028' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 28 ; + } +# Dry deposition of dust aerosol (0.55 - 9 um) +'215029' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 29 ; + } +# Dry deposition of dust aerosol (9 - 20 um) +'215030' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 30 ; + } +# Sedimentation of dust aerosol (0.03 - 0.55 um) +'215031' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 31 ; + } +# Sedimentation of dust aerosol (0.55 - 9 um) +'215032' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 32 ; + } +# Sedimentation of dust aerosol (9 - 20 um) +'215033' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 33 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation +'215034' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 34 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation +'215035' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 35 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation +'215036' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 36 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation +'215037' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 37 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation +'215038' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 38 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by convective precipitation +'215039' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 39 ; + } +# Negative fixer of dust aerosol (0.03 - 0.55 um) +'215040' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 40 ; + } +# Negative fixer of dust aerosol (0.55 - 9 um) +'215041' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 41 ; + } +# Negative fixer of dust aerosol (9 - 20 um) +'215042' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 42 ; + } +# Vertically integrated mass of dust aerosol (0.03 - 0.55 um) +'215043' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 43 ; + } +# Vertically integrated mass of dust aerosol (0.55 - 9 um) +'215044' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 44 ; + } +# Vertically integrated mass of dust aerosol (9 - 20 um) +'215045' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 45 ; + } +# Dust aerosol (0.03 - 0.55 um) optical depth +'215046' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 46 ; + } +# Dust aerosol (0.55 - 9 um) optical depth +'215047' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 47 ; + } +# Dust aerosol (9 - 20 um) optical depth +'215048' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 48 ; + } +# Source/gain of hydrophobic organic matter aerosol +'215049' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 49 ; + } +# Source/gain of hydrophilic organic matter aerosol +'215050' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 50 ; + } +# Dry deposition of hydrophobic organic matter aerosol +'215051' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 51 ; + } +# Dry deposition of hydrophilic organic matter aerosol +'215052' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 52 ; + } +# Sedimentation of hydrophobic organic matter aerosol +'215053' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 53 ; + } +# Sedimentation of hydrophilic organic matter aerosol +'215054' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 54 ; + } +# Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation +'215055' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 55 ; + } +# Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation +'215056' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 56 ; + } +# Wet deposition of hydrophobic organic matter aerosol by convective precipitation +'215057' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 57 ; + } +# Wet deposition of hydrophilic organic matter aerosol by convective precipitation +'215058' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 58 ; + } +# Negative fixer of hydrophobic organic matter aerosol +'215059' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 59 ; + } +# Negative fixer of hydrophilic organic matter aerosol +'215060' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 60 ; + } +# Vertically integrated mass of hydrophobic organic matter aerosol +'215061' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 61 ; + } +# Vertically integrated mass of hydrophilic organic matter aerosol +'215062' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 62 ; + } +# Hydrophobic organic matter aerosol optical depth +'215063' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 63 ; + } +# Hydrophilic organic matter aerosol optical depth +'215064' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 64 ; + } +# Source/gain of hydrophobic black carbon aerosol +'215065' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 65 ; + } +# Source/gain of hydrophilic black carbon aerosol +'215066' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 66 ; + } +# Dry deposition of hydrophobic black carbon aerosol +'215067' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 67 ; + } +# Dry deposition of hydrophilic black carbon aerosol +'215068' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 68 ; + } +# Sedimentation of hydrophobic black carbon aerosol +'215069' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 69 ; + } +# Sedimentation of hydrophilic black carbon aerosol +'215070' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 70 ; + } +# Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation +'215071' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 71 ; + } +# Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation +'215072' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 72 ; + } +# Wet deposition of hydrophobic black carbon aerosol by convective precipitation +'215073' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 73 ; + } +# Wet deposition of hydrophilic black carbon aerosol by convective precipitation +'215074' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 74 ; + } +# Negative fixer of hydrophobic black carbon aerosol +'215075' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 75 ; + } +# Negative fixer of hydrophilic black carbon aerosol +'215076' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 76 ; + } +# Vertically integrated mass of hydrophobic black carbon aerosol +'215077' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 77 ; + } +# Vertically integrated mass of hydrophilic black carbon aerosol +'215078' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 78 ; + } +# Hydrophobic black carbon aerosol optical depth +'215079' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 79 ; + } +# Hydrophilic black carbon aerosol optical depth +'215080' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 80 ; + } +# Source/gain of sulphate aerosol +'215081' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 81 ; + } +# Dry deposition of sulphate aerosol +'215082' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 82 ; + } +# Sedimentation of sulphate aerosol +'215083' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 83 ; + } +# Wet deposition of sulphate aerosol by large-scale precipitation +'215084' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 84 ; + } +# Wet deposition of sulphate aerosol by convective precipitation +'215085' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 85 ; + } +# Negative fixer of sulphate aerosol +'215086' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 86 ; + } +# Vertically integrated mass of sulphate aerosol +'215087' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 87 ; + } +# Sulphate aerosol optical depth +'215088' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 88 ; + } +#Accumulated total aerosol optical depth at 550 nm +'215089' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 89 ; + } +#Effective (snow effect included) UV visible albedo for direct radiation +'215090' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 90 ; + } +#10 metre wind speed dust emission potential +'215091' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 91 ; + } +#10 metre wind gustiness dust emission potential +'215092' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 92 ; + } +#Profile of total aerosol optical depth at 532 nm +'215093' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 93 ; + } +#Profile of natural (sea-salt and dust) aerosol optical depth at 532 nm +'215094' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 94 ; + } +#Profile of antropogenic (black carbon, organic matter, sulphate) aerosol optical depth at 532 nm +'215095' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 95 ; + } +#Total absorption aerosol optical depth at 340 nm +'215096' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 96 ; + } +#Total absorption aerosol optical depth at 355 nm +'215097' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 97 ; + } +#Total absorption aerosol optical depth at 380 nm +'215098' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 98 ; + } +#Total absorption aerosol optical depth at 400 nm +'215099' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 99 ; + } +#Total absorption aerosol optical depth at 440 nm +'215100' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 100 ; + } +#Total absorption aerosol optical depth at 469 nm +'215101' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 101 ; + } +#Total absorption aerosol optical depth at 500 nm +'215102' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 102 ; + } +#Total absorption aerosol optical depth at 532 nm +'215103' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 103 ; + } +#Total absorption aerosol optical depth at 550 nm +'215104' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 104 ; + } +#Total absorption aerosol optical depth at 645 nm +'215105' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 105 ; + } +#Total absorption aerosol optical depth at 670 nm +'215106' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 106 ; + } +#Total absorption aerosol optical depth at 800 nm +'215107' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 107 ; + } +#Total absorption aerosol optical depth at 858 nm +'215108' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 108 ; + } +#Total absorption aerosol optical depth at 865 nm +'215109' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 109 ; + } +#Total absorption aerosol optical depth at 1020 nm +'215110' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 110 ; + } +#Total absorption aerosol optical depth at 1064 nm +'215111' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 111 ; + } +#Total absorption aerosol optical depth at 1240 nm +'215112' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 112 ; + } +#Total absorption aerosol optical depth at 1640 nm +'215113' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 113 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm +'215114' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 114 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm +'215115' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 115 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm +'215116' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 116 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm +'215117' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 117 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm +'215118' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 118 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm +'215119' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 119 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm +'215120' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 120 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm +'215121' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 121 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm +'215122' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 122 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm +'215123' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 123 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm +'215124' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 124 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm +'215125' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 125 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm +'215126' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 126 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm +'215127' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 127 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm +'215128' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 128 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm +'215129' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 129 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm +'215130' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 130 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm +'215131' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 131 ; + } +#Single scattering albedo at 340 nm +'215132' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 132 ; + } +#Single scattering albedo at 355 nm +'215133' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 133 ; + } +#Single scattering albedo at 380 nm +'215134' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 134 ; + } +#Single scattering albedo at 400 nm +'215135' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 135 ; + } +#Single scattering albedo at 440 nm +'215136' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 136 ; + } +#Single scattering albedo at 469 nm +'215137' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 137 ; + } +#Single scattering albedo at 500 nm +'215138' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 138 ; + } +#Single scattering albedo at 532 nm +'215139' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 139 ; + } +#Single scattering albedo at 550 nm +'215140' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 140 ; + } +#Single scattering albedo at 645 nm +'215141' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 141 ; + } +#Single scattering albedo at 670 nm +'215142' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 142 ; + } +#Single scattering albedo at 800 nm +'215143' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 143 ; + } +#Single scattering albedo at 858 nm +'215144' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 144 ; + } +#Single scattering albedo at 865 nm +'215145' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 145 ; + } +#Single scattering albedo at 1020 nm +'215146' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 146 ; + } +#Single scattering albedo at 1064 nm +'215147' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 147 ; + } +#Single scattering albedo at 1240 nm +'215148' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 148 ; + } +#Single scattering albedo at 1640 nm +'215149' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 149 ; + } +#Assimetry factor at 340 nm +'215150' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 150 ; + } +#Assimetry factor at 355 nm +'215151' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 151 ; + } +#Assimetry factor at 380 nm +'215152' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 152 ; + } +#Assimetry factor at 400 nm +'215153' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 153 ; + } +#Assimetry factor at 440 nm +'215154' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 154 ; + } +#Assimetry factor at 469 nm +'215155' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 155 ; + } +#Assimetry factor at 500 nm +'215156' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 156 ; + } +#Assimetry factor at 532 nm +'215157' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 157 ; + } +#Assimetry factor at 550 nm +'215158' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 158 ; + } +#Assimetry factor at 645 nm +'215159' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 159 ; + } +#Assimetry factor at 670 nm +'215160' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 160 ; + } +#Assimetry factor at 800 nm +'215161' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 161 ; + } +#Assimetry factor at 858 nm +'215162' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 162 ; + } +#Assimetry factor at 865 nm +'215163' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 163 ; + } +#Assimetry factor at 1020 nm +'215164' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 164 ; + } +#Assimetry factor at 1064 nm +'215165' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 165 ; + } +#Assimetry factor at 1240 nm +'215166' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 166 ; + } +#Assimetry factor at 1640 nm +'215167' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 167 ; + } +#Source/gain of sulphur dioxide +'215168' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 168 ; + } +#Dry deposition of sulphur dioxide +'215169' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 169 ; + } +#Sedimentation of sulphur dioxide +'215170' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 170 ; + } +#Wet deposition of sulphur dioxide by large-scale precipitation +'215171' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 171 ; + } +#Wet deposition of sulphur dioxide by convective precipitation +'215172' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 172 ; + } +#Negative fixer of sulphur dioxide +'215173' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 173 ; + } +#Vertically integrated mass of sulphur dioxide +'215174' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 174 ; + } +#Sulphur dioxide optical depth +'215175' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 175 ; + } +#Total absorption aerosol optical depth at 2130 nm +'215176' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 176 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm +'215177' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 177 ; + } +#Single scattering albedo at 2130 nm +'215178' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 178 ; + } +#Assimetry factor at 2130 nm +'215179' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 179 ; + } +#Experimental product +'216001' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 1 ; + } +#Experimental product +'216002' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 2 ; + } +#Experimental product +'216003' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 3 ; + } +#Experimental product +'216004' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 4 ; + } +#Experimental product +'216005' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 5 ; + } +#Experimental product +'216006' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 6 ; + } +#Experimental product +'216007' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 7 ; + } +#Experimental product +'216008' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 8 ; + } +#Experimental product +'216009' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 9 ; + } +#Experimental product +'216010' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 10 ; + } +#Experimental product +'216011' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 11 ; + } +#Experimental product +'216012' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 12 ; + } +#Experimental product +'216013' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 13 ; + } +#Experimental product +'216014' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 14 ; + } +#Experimental product +'216015' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 15 ; + } +#Experimental product +'216016' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 16 ; + } +#Experimental product +'216017' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 17 ; + } +#Experimental product +'216018' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 18 ; + } +#Experimental product +'216019' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 19 ; + } +#Experimental product +'216020' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 20 ; + } +#Experimental product +'216021' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 21 ; + } +#Experimental product +'216022' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 22 ; + } +#Experimental product +'216023' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 23 ; + } +#Experimental product +'216024' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 24 ; + } +#Experimental product +'216025' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 25 ; + } +#Experimental product +'216026' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 26 ; + } +#Experimental product +'216027' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 27 ; + } +#Experimental product +'216028' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 28 ; + } +#Experimental product +'216029' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 29 ; + } +#Experimental product +'216030' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 30 ; + } +#Experimental product +'216031' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 31 ; + } +#Experimental product +'216032' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 32 ; + } +#Experimental product +'216033' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 33 ; + } +#Experimental product +'216034' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 34 ; + } +#Experimental product +'216035' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 35 ; + } +#Experimental product +'216036' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 36 ; + } +#Experimental product +'216037' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 37 ; + } +#Experimental product +'216038' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 38 ; + } +#Experimental product +'216039' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 39 ; + } +#Experimental product +'216040' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 40 ; + } +#Experimental product +'216041' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 41 ; + } +#Experimental product +'216042' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 42 ; + } +#Experimental product +'216043' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 43 ; + } +#Experimental product +'216044' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 44 ; + } +#Experimental product +'216045' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 45 ; + } +#Experimental product +'216046' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 46 ; + } +#Experimental product +'216047' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 47 ; + } +#Experimental product +'216048' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 48 ; + } +#Experimental product +'216049' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 49 ; + } +#Experimental product +'216050' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 50 ; + } +#Experimental product +'216051' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 51 ; + } +#Experimental product +'216052' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 52 ; + } +#Experimental product +'216053' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 53 ; + } +#Experimental product +'216054' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 54 ; + } +#Experimental product +'216055' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 55 ; + } +#Experimental product +'216056' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 56 ; + } +#Experimental product +'216057' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 57 ; + } +#Experimental product +'216058' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 58 ; + } +#Experimental product +'216059' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 59 ; + } +#Experimental product +'216060' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 60 ; + } +#Experimental product +'216061' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 61 ; + } +#Experimental product +'216062' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 62 ; + } +#Experimental product +'216063' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 63 ; + } +#Experimental product +'216064' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 64 ; + } +#Experimental product +'216065' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 65 ; + } +#Experimental product +'216066' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 66 ; + } +#Experimental product +'216067' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 67 ; + } +#Experimental product +'216068' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 68 ; + } +#Experimental product +'216069' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 69 ; + } +#Experimental product +'216070' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 70 ; + } +#Experimental product +'216071' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 71 ; + } +#Experimental product +'216072' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 72 ; + } +#Experimental product +'216073' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 73 ; + } +#Experimental product +'216074' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 74 ; + } +#Experimental product +'216075' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 75 ; + } +#Experimental product +'216076' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 76 ; + } +#Experimental product +'216077' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 77 ; + } +#Experimental product +'216078' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 78 ; + } +#Experimental product +'216079' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 79 ; + } +#Experimental product +'216080' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 80 ; + } +#Experimental product +'216081' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 81 ; + } +#Experimental product +'216082' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 82 ; + } +#Experimental product +'216083' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 83 ; + } +#Experimental product +'216084' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 84 ; + } +#Experimental product +'216085' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 85 ; + } +#Experimental product +'216086' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 86 ; + } +#Experimental product +'216087' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 87 ; + } +#Experimental product +'216088' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 88 ; + } +#Experimental product +'216089' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 89 ; + } +#Experimental product +'216090' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 90 ; + } +#Experimental product +'216091' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 91 ; + } +#Experimental product +'216092' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 92 ; + } +#Experimental product +'216093' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 93 ; + } +#Experimental product +'216094' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 94 ; + } +#Experimental product +'216095' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 95 ; + } +#Experimental product +'216096' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 96 ; + } +#Experimental product +'216097' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 97 ; + } +#Experimental product +'216098' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 98 ; + } +#Experimental product +'216099' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 99 ; + } +#Experimental product +'216100' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 100 ; + } +#Experimental product +'216101' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 101 ; + } +#Experimental product +'216102' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 102 ; + } +#Experimental product +'216103' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 103 ; + } +#Experimental product +'216104' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 104 ; + } +#Experimental product +'216105' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 105 ; + } +#Experimental product +'216106' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 106 ; + } +#Experimental product +'216107' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 107 ; + } +#Experimental product +'216108' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 108 ; + } +#Experimental product +'216109' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 109 ; + } +#Experimental product +'216110' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 110 ; + } +#Experimental product +'216111' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 111 ; + } +#Experimental product +'216112' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 112 ; + } +#Experimental product +'216113' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 113 ; + } +#Experimental product +'216114' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 114 ; + } +#Experimental product +'216115' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 115 ; + } +#Experimental product +'216116' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 116 ; + } +#Experimental product +'216117' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 117 ; + } +#Experimental product +'216118' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 118 ; + } +#Experimental product +'216119' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 119 ; + } +#Experimental product +'216120' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 120 ; + } +#Experimental product +'216121' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 121 ; + } +#Experimental product +'216122' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 122 ; + } +#Experimental product +'216123' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 123 ; + } +#Experimental product +'216124' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 124 ; + } +#Experimental product +'216125' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 125 ; + } +#Experimental product +'216126' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 126 ; + } +#Experimental product +'216127' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 127 ; + } +#Experimental product +'216128' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 128 ; + } +#Experimental product +'216129' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 129 ; + } +#Experimental product +'216130' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 130 ; + } +#Experimental product +'216131' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 131 ; + } +#Experimental product +'216132' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 132 ; + } +#Experimental product +'216133' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 133 ; + } +#Experimental product +'216134' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 134 ; + } +#Experimental product +'216135' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 135 ; + } +#Experimental product +'216136' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 136 ; + } +#Experimental product +'216137' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 137 ; + } +#Experimental product +'216138' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 138 ; + } +#Experimental product +'216139' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 139 ; + } +#Experimental product +'216140' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 140 ; + } +#Experimental product +'216141' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 141 ; + } +#Experimental product +'216142' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 142 ; + } +#Experimental product +'216143' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 143 ; + } +#Experimental product +'216144' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 144 ; + } +#Experimental product +'216145' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 145 ; + } +#Experimental product +'216146' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 146 ; + } +#Experimental product +'216147' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 147 ; + } +#Experimental product +'216148' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 148 ; + } +#Experimental product +'216149' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 149 ; + } +#Experimental product +'216150' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 150 ; + } +#Experimental product +'216151' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 151 ; + } +#Experimental product +'216152' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 152 ; + } +#Experimental product +'216153' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 153 ; + } +#Experimental product +'216154' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 154 ; + } +#Experimental product +'216155' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 155 ; + } +#Experimental product +'216156' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 156 ; + } +#Experimental product +'216157' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 157 ; + } +#Experimental product +'216158' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 158 ; + } +#Experimental product +'216159' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 159 ; + } +#Experimental product +'216160' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 160 ; + } +#Experimental product +'216161' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 161 ; + } +#Experimental product +'216162' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 162 ; + } +#Experimental product +'216163' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 163 ; + } +#Experimental product +'216164' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 164 ; + } +#Experimental product +'216165' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 165 ; + } +#Experimental product +'216166' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 166 ; + } +#Experimental product +'216167' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 167 ; + } +#Experimental product +'216168' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 168 ; + } +#Experimental product +'216169' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 169 ; + } +#Experimental product +'216170' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 170 ; + } +#Experimental product +'216171' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 171 ; + } +#Experimental product +'216172' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 172 ; + } +#Experimental product +'216173' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 173 ; + } +#Experimental product +'216174' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 174 ; + } +#Experimental product +'216175' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 175 ; + } +#Experimental product +'216176' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 176 ; + } +#Experimental product +'216177' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 177 ; + } +#Experimental product +'216178' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 178 ; + } +#Experimental product +'216179' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 179 ; + } +#Experimental product +'216180' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 180 ; + } +#Experimental product +'216181' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 181 ; + } +#Experimental product +'216182' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 182 ; + } +#Experimental product +'216183' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 183 ; + } +#Experimental product +'216184' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 184 ; + } +#Experimental product +'216185' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 185 ; + } +#Experimental product +'216186' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 186 ; + } +#Experimental product +'216187' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 187 ; + } +#Experimental product +'216188' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 188 ; + } +#Experimental product +'216189' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 189 ; + } +#Experimental product +'216190' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 190 ; + } +#Experimental product +'216191' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 191 ; + } +#Experimental product +'216192' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 192 ; + } +#Experimental product +'216193' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 193 ; + } +#Experimental product +'216194' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 194 ; + } +#Experimental product +'216195' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 195 ; + } +#Experimental product +'216196' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 196 ; + } +#Experimental product +'216197' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 197 ; + } +#Experimental product +'216198' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 198 ; + } +#Experimental product +'216199' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 199 ; + } +#Experimental product +'216200' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 200 ; + } +#Experimental product +'216201' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 201 ; + } +#Experimental product +'216202' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 202 ; + } +#Experimental product +'216203' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 203 ; + } +#Experimental product +'216204' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 204 ; + } +#Experimental product +'216205' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 205 ; + } +#Experimental product +'216206' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 206 ; + } +#Experimental product +'216207' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 207 ; + } +#Experimental product +'216208' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 208 ; + } +#Experimental product +'216209' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 209 ; + } +#Experimental product +'216210' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 210 ; + } +#Experimental product +'216211' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 211 ; + } +#Experimental product +'216212' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 212 ; + } +#Experimental product +'216213' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 213 ; + } +#Experimental product +'216214' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 214 ; + } +#Experimental product +'216215' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 215 ; + } +#Experimental product +'216216' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 216 ; + } +#Experimental product +'216217' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 217 ; + } +#Experimental product +'216218' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 218 ; + } +#Experimental product +'216219' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 219 ; + } +#Experimental product +'216220' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 220 ; + } +#Experimental product +'216221' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 221 ; + } +#Experimental product +'216222' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 222 ; + } +#Experimental product +'216223' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 223 ; + } +#Experimental product +'216224' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 224 ; + } +#Experimental product +'216225' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 225 ; + } +#Experimental product +'216226' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 226 ; + } +#Experimental product +'216227' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 227 ; + } +#Experimental product +'216228' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 228 ; + } +#Experimental product +'216229' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 229 ; + } +#Experimental product +'216230' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 230 ; + } +#Experimental product +'216231' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 231 ; + } +#Experimental product +'216232' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 232 ; + } +#Experimental product +'216233' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 233 ; + } +#Experimental product +'216234' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 234 ; + } +#Experimental product +'216235' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 235 ; + } +#Experimental product +'216236' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 236 ; + } +#Experimental product +'216237' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 237 ; + } +#Experimental product +'216238' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 238 ; + } +#Experimental product +'216239' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 239 ; + } +#Experimental product +'216240' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 240 ; + } +#Experimental product +'216241' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 241 ; + } +#Experimental product +'216242' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 242 ; + } +#Experimental product +'216243' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 243 ; + } +#Experimental product +'216244' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 244 ; + } +#Experimental product +'216245' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 245 ; + } +#Experimental product +'216246' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 246 ; + } +#Experimental product +'216247' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 247 ; + } +#Experimental product +'216248' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 248 ; + } +#Experimental product +'216249' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 249 ; + } +#Experimental product +'216250' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 250 ; + } +#Experimental product +'216251' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 251 ; + } +#Experimental product +'216252' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 252 ; + } +#Experimental product +'216253' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 253 ; + } +#Experimental product +'216254' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 254 ; + } +#Experimental product +'216255' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 255 ; + } +#Total sky direct solar radiation at surface +'228021' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; + } +#Clear-sky direct solar radiation at surface +'228022' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 22 ; + } +#Cloud base height +'228023' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; + } +#Zero degree level +'228024' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 24 ; + } +#Horizontal visibility +'228025' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 25 ; + } +#Maximum temperature at 2 metres in the last 3 hours +'228026' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 3 ; + } +#Minimum temperature at 2 metres in the last 3 hours +'228027' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 3 ; + } +#10 metre wind gust in the last 3 hours +'228028' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; + } +#Soil wetness index in layer 1 +'228040' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 40 ; + } +#Soil wetness index in layer 2 +'228041' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 41 ; + } +#Soil wetness index in layer 3 +'228042' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 42 ; + } +#Soil wetness index in layer 4 +'228043' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 43 ; + } +#Total column rain water +'228089' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; + } +#Total column snow water +'228090' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; + } +#Canopy cover fraction +'228091' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 91 ; + } +#Soil texture fraction +'228092' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 92 ; + } +#Volumetric soil moisture +'228093' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 93 ; + } +#Ice temperature +'228094' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; + } +#Surface solar radiation downward clear-sky +'228129' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; + } +#Surface thermal radiation downward clear-sky +'228130' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; + } +#Surface short wave-effective total cloudiness +'228248' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 248 ; + } +#100 metre wind speed +'228249' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 249 ; + } +#Irrigation fraction +'228250' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 250 ; + } +#Potential evaporation +'228251' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; + } +#Irrigation +'228252' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 252 ; + } +#Surface long wave-effective total cloudiness +'228255' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 255 ; + } +#Total sky direct solar radiation at surface (variable resolution) +'230021' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 21 ; + } +#Clear-sky direct solar radiation at surface (variable resolution) +'230022' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 22 ; + } +#Flood alert levels +'240010' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 10 ; + } +#Cross sectional area of flow in channel +'240011' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 11 ; + } +#Sideflow into river channel +'240012' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 12 ; + } +#Discharge +'240013' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 13 ; + } +#River storage of water +'240014' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 14 ; + } +#Floodplain storage of water +'240015' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 15 ; + } +#Flooded area fraction +'240016' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 16 ; + } +#Days since last rain +'240017' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 17 ; + } +#Molnau-Bissell frost index +'240018' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 18 ; + } +#Maximum discharge in 15 day forecast +'240019' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 19 ; + } +#Depth of water on soil surface +'240020' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 20 ; + } +#Upstreams accumulated precipitation +'240021' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 21 ; + } +#Upstreams accumulated snow melt +'240022' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 22 ; + } +#Maximum rain in 24 hours over the 15 day forecast +'240023' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 23 ; + } +#Groundwater +'240025' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 25 ; + } +#Snow depth at elevation bands +'240026' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 26 ; + } +#Accumulated precipitation over the 15 day forecast +'240027' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 27 ; + } +#Stream function gradient +'129001' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 1 ; + } +#Velocity potential gradient +'129002' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 2 ; + } +#Potential temperature gradient +'129003' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature gradient +'129004' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature gradient +'129005' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 5 ; + } +#U component of divergent wind gradient +'129011' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 11 ; + } +#V component of divergent wind gradient +'129012' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 12 ; + } +#U component of rotational wind gradient +'129013' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 13 ; + } +#V component of rotational wind gradient +'129014' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature gradient +'129021' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure gradient +'129022' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence gradient +'129023' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'129024' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'129025' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 25 ; + } +#Lake cover gradient +'129026' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 26 ; + } +#Low vegetation cover gradient +'129027' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 27 ; + } +#High vegetation cover gradient +'129028' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 28 ; + } +#Type of low vegetation gradient +'129029' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 29 ; + } +#Type of high vegetation gradient +'129030' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 30 ; + } +#Sea-ice cover gradient +'129031' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 31 ; + } +#Snow albedo gradient +'129032' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 32 ; + } +#Snow density gradient +'129033' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 33 ; + } +#Sea surface temperature gradient +'129034' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 34 ; + } +#Ice surface temperature layer 1 gradient +'129035' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 35 ; + } +#Ice surface temperature layer 2 gradient +'129036' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 36 ; + } +#Ice surface temperature layer 3 gradient +'129037' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 37 ; + } +#Ice surface temperature layer 4 gradient +'129038' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 gradient +'129039' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 gradient +'129040' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 gradient +'129041' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 gradient +'129042' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 42 ; + } +#Soil type gradient +'129043' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 43 ; + } +#Snow evaporation gradient +'129044' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 44 ; + } +#Snowmelt gradient +'129045' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 45 ; + } +#Solar duration gradient +'129046' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 46 ; + } +#Direct solar radiation gradient +'129047' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress gradient +'129048' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 48 ; + } +#10 metre wind gust gradient +'129049' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction gradient +'129050' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature gradient +'129051' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature gradient +'129052' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 52 ; + } +#Montgomery potential gradient +'129053' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 53 ; + } +#Pressure gradient +'129054' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'129055' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours gradient +'129056' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface gradient +'129057' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface gradient +'129058' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 58 ; + } +#Convective available potential energy gradient +'129059' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 59 ; + } +#Potential vorticity gradient +'129060' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 60 ; + } +#Total precipitation from observations gradient +'129061' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 61 ; + } +#Observation count gradient +'129062' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'129063' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'129064' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'129065' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'129066' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'129067' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'129068' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'129069' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'129070' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'129071' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 71 ; + } +#Total column liquid water +'129078' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 78 ; + } +#Total column ice water +'129079' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 79 ; + } +#Experimental product +'129080' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 80 ; + } +#Experimental product +'129081' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 81 ; + } +#Experimental product +'129082' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 82 ; + } +#Experimental product +'129083' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 83 ; + } +#Experimental product +'129084' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 84 ; + } +#Experimental product +'129085' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 85 ; + } +#Experimental product +'129086' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 86 ; + } +#Experimental product +'129087' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 87 ; + } +#Experimental product +'129088' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 88 ; + } +#Experimental product +'129089' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 89 ; + } +#Experimental product +'129090' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 90 ; + } +#Experimental product +'129091' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 91 ; + } +#Experimental product +'129092' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 92 ; + } +#Experimental product +'129093' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 93 ; + } +#Experimental product +'129094' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 94 ; + } +#Experimental product +'129095' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 95 ; + } +#Experimental product +'129096' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 96 ; + } +#Experimental product +'129097' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 97 ; + } +#Experimental product +'129098' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 98 ; + } +#Experimental product +'129099' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 99 ; + } +#Experimental product +'129100' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 100 ; + } +#Experimental product +'129101' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 101 ; + } +#Experimental product +'129102' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 102 ; + } +#Experimental product +'129103' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 103 ; + } +#Experimental product +'129104' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 104 ; + } +#Experimental product +'129105' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 105 ; + } +#Experimental product +'129106' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 106 ; + } +#Experimental product +'129107' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 107 ; + } +#Experimental product +'129108' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 108 ; + } +#Experimental product +'129109' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 109 ; + } +#Experimental product +'129110' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 110 ; + } +#Experimental product +'129111' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 111 ; + } +#Experimental product +'129112' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 112 ; + } +#Experimental product +'129113' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 113 ; + } +#Experimental product +'129114' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 114 ; + } +#Experimental product +'129115' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 115 ; + } +#Experimental product +'129116' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 116 ; + } +#Experimental product +'129117' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 117 ; + } +#Experimental product +'129118' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 118 ; + } +#Experimental product +'129119' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 119 ; + } +#Experimental product +'129120' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres gradient +'129121' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres gradient +'129122' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 122 ; + } +#10 metre wind gust in the last 6 hours gradient +'129123' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 123 ; + } +#Vertically integrated total energy +'129125' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'129126' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 126 ; + } +#Atmospheric tide gradient +'129127' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 127 ; + } +#Budget values gradient +'129128' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 128 ; + } +#Geopotential gradient +'129129' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 129 ; + } +#Temperature gradient +'129130' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 130 ; + } +#U component of wind gradient +'129131' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 131 ; + } +#V component of wind gradient +'129132' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 132 ; + } +#Specific humidity gradient +'129133' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 133 ; + } +#Surface pressure gradient +'129134' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 134 ; + } +#vertical velocity (pressure) gradient +'129135' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 135 ; + } +#Total column water gradient +'129136' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 136 ; + } +#Total column water vapour gradient +'129137' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 137 ; + } +#Vorticity (relative) gradient +'129138' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 138 ; + } +#Soil temperature level 1 gradient +'129139' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 gradient +'129140' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 140 ; + } +#Snow depth gradient +'129141' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) gradient +'129142' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 142 ; + } +#Convective precipitation gradient +'129143' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) gradient +'129144' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation gradient +'129145' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux gradient +'129146' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 146 ; + } +#Surface latent heat flux gradient +'129147' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 147 ; + } +#Charnock gradient +'129148' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 148 ; + } +#Surface net radiation gradient +'129149' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 149 ; + } +#Top net radiation gradient +'129150' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 150 ; + } +#Mean sea level pressure gradient +'129151' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure gradient +'129152' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 152 ; + } +#Short-wave heating rate gradient +'129153' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 153 ; + } +#Long-wave heating rate gradient +'129154' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 154 ; + } +#Divergence gradient +'129155' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 155 ; + } +#Height gradient +'129156' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 156 ; + } +#Relative humidity gradient +'129157' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure gradient +'129158' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 158 ; + } +#Boundary layer height gradient +'129159' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 159 ; + } +#Standard deviation of orography gradient +'129160' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography gradient +'129161' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography gradient +'129162' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography gradient +'129163' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 163 ; + } +#Total cloud cover gradient +'129164' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 164 ; + } +#10 metre U wind component gradient +'129165' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 165 ; + } +#10 metre V wind component gradient +'129166' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 166 ; + } +#2 metre temperature gradient +'129167' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 167 ; + } +#2 metre dewpoint temperature gradient +'129168' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 168 ; + } +#Surface solar radiation downwards gradient +'129169' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 gradient +'129170' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 gradient +'129171' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 171 ; + } +#Land-sea mask gradient +'129172' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 172 ; + } +#Surface roughness gradient +'129173' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 173 ; + } +#Albedo gradient +'129174' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards gradient +'129175' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 175 ; + } +#Surface net solar radiation gradient +'129176' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation gradient +'129177' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 177 ; + } +#Top net solar radiation gradient +'129178' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 178 ; + } +#Top net thermal radiation gradient +'129179' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 179 ; + } +#East-West surface stress gradient +'129180' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 180 ; + } +#North-South surface stress gradient +'129181' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 181 ; + } +#Evaporation gradient +'129182' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 gradient +'129183' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 gradient +'129184' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 184 ; + } +#Convective cloud cover gradient +'129185' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 185 ; + } +#Low cloud cover gradient +'129186' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 186 ; + } +#Medium cloud cover gradient +'129187' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 187 ; + } +#High cloud cover gradient +'129188' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 188 ; + } +#Sunshine duration gradient +'129189' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance gradient +'129190' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance gradient +'129191' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance gradient +'129192' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance gradient +'129193' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 193 ; + } +#Brightness temperature gradient +'129194' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress gradient +'129195' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress gradient +'129196' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation gradient +'129197' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 197 ; + } +#Skin reservoir content gradient +'129198' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 198 ; + } +#Vegetation fraction gradient +'129199' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography gradient +'129200' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing gradient +'129201' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing gradient +'129202' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio gradient +'129203' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights gradient +'129204' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 204 ; + } +#Runoff gradient +'129205' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 205 ; + } +#Total column ozone gradient +'129206' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 206 ; + } +#10 metre wind speed gradient +'129207' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 207 ; + } +#Top net solar radiation, clear sky gradient +'129208' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky gradient +'129209' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky gradient +'129210' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky gradient +'129211' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation gradient +'129212' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation gradient +'129214' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion gradient +'129215' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection gradient +'129216' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation gradient +'129217' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind gradient +'129218' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind gradient +'129219' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency gradient +'129220' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency gradient +'129221' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind gradient +'129222' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind gradient +'129223' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity gradient +'129224' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection gradient +'129225' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation gradient +'129226' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity gradient +'129227' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 227 ; + } +#Total precipitation gradient +'129228' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress gradient +'129229' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress gradient +'129230' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux gradient +'129231' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux gradient +'129232' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 232 ; + } +#Apparent surface humidity gradient +'129233' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat gradient +'129234' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 234 ; + } +#Skin temperature gradient +'129235' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 gradient +'129236' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 gradient +'129237' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 237 ; + } +#Temperature of snow layer gradient +'129238' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 238 ; + } +#Convective snowfall gradient +'129239' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 239 ; + } +#Large scale snowfall gradient +'129240' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency gradient +'129241' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency gradient +'129242' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 242 ; + } +#Forecast albedo gradient +'129243' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 243 ; + } +#Forecast surface roughness gradient +'129244' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat gradient +'129245' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content gradient +'129246' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 246 ; + } +#Specific cloud ice water content gradient +'129247' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 247 ; + } +#Cloud cover gradient +'129248' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency gradient +'129249' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 249 ; + } +#Ice age gradient +'129250' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature gradient +'129251' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity gradient +'129252' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind gradient +'129253' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind gradient +'129254' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'129255' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 255 ; + } +#Top solar radiation upward +'130208' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 208 ; + } +#Top thermal radiation upward +'130209' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 209 ; + } +#Top solar radiation upward, clear sky +'130210' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 210 ; + } +#Top thermal radiation upward, clear sky +'130211' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 211 ; + } +#Cloud liquid water +'130212' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 212 ; + } +#Cloud fraction +'130213' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 213 ; + } +#Diabatic heating by radiation +'130214' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion +'130215' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection +'130216' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 216 ; + } +#Diabatic heating by large-scale condensation +'130217' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind +'130218' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind +'130219' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag +'130220' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag +'130221' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 221 ; + } +#Vertical diffusion of humidity +'130224' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection +'130225' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation +'130226' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 226 ; + } +#Adiabatic tendency of temperature +'130228' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 228 ; + } +#Adiabatic tendency of humidity +'130229' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 229 ; + } +#Adiabatic tendency of zonal wind +'130230' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 230 ; + } +#Adiabatic tendency of meridional wind +'130231' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 231 ; + } +#Mean vertical velocity +'130232' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 232 ; + } +#2m temperature anomaly of at least +2K +'131001' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 1 ; + } +#2m temperature anomaly of at least +1K +'131002' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 2 ; + } +#2m temperature anomaly of at least 0K +'131003' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 3 ; + } +#2m temperature anomaly of at most -1K +'131004' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 4 ; + } +#2m temperature anomaly of at most -2K +'131005' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 5 ; + } +#Total precipitation anomaly of at least 20 mm +'131006' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 6 ; + } +#Total precipitation anomaly of at least 10 mm +'131007' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 7 ; + } +#Total precipitation anomaly of at least 0 mm +'131008' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 8 ; + } +#Surface temperature anomaly of at least 0K +'131009' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 9 ; + } +#Mean sea level pressure anomaly of at least 0 Pa +'131010' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 10 ; + } +#Height of 0 degree isotherm probability +'131015' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 15 ; + } +#Height of snowfall limit probability +'131016' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 16 ; + } +#Showalter index probability +'131017' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 17 ; + } +#Whiting index probability +'131018' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 18 ; + } +#Temperature anomaly less than -2 K +'131020' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 20 ; + } +#Temperature anomaly of at least +2 K +'131021' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 21 ; + } +#Temperature anomaly less than -8 K +'131022' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 22 ; + } +#Temperature anomaly less than -4 K +'131023' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 23 ; + } +#Temperature anomaly greater than +4 K +'131024' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 24 ; + } +#Temperature anomaly greater than +8 K +'131025' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 25 ; + } +#10 metre wind gust probability +'131049' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 49 ; + } +#Convective available potential energy probability +'131059' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 59 ; + } +#Total precipitation less than 0.1 mm +'131064' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 64 ; + } +#Total precipitation rate less than 1 mm/day +'131065' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 65 ; + } +#Total precipitation rate of at least 3 mm/day +'131066' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 66 ; + } +#Total precipitation rate of at least 5 mm/day +'131067' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 67 ; + } +#10 metre Wind speed of at least 10 m/s +'131068' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 68 ; + } +#10 metre Wind speed of at least 15 m/s +'131069' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 69 ; + } +#10 metre Wind gust of at least 25 m/s +'131072' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + productDefinitionTemplateNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfLowerLimit = 25 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; + } +#2 metre temperature less than 273.15 K +'131073' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 73 ; + } +#Significant wave height of at least 2 m +'131074' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; + probabilityType = 3 ; + scaledValueOfLowerLimit = 2 ; + scaleFactorOfLowerLimit = 0 ; + } +#Significant wave height of at least 4 m +'131075' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + scaledValueOfLowerLimit = 4 ; + productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; + } +#Significant wave height of at least 6 m +'131076' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; + scaledValueOfLowerLimit = 6 ; + } +#Significant wave height of at least 8 m +'131077' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 101 ; + probabilityType = 3 ; + scaleFactorOfLowerLimit = 0 ; + scaledValueOfLowerLimit = 8 ; + productDefinitionTemplateNumber = 5 ; + } +#Mean wave period of at least 8 s +'131078' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 78 ; + } +#Mean wave period of at least 10 s +'131079' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 79 ; + } +#Mean wave period of at least 12 s +'131080' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 80 ; + } +#Mean wave period of at least 15 s +'131081' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 81 ; + } +#Geopotential probability +'131129' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 129 ; + } +#Temperature anomaly probability +'131130' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 130 ; + } +#2 metre temperature probability +'131139' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 139 ; + } +#Snowfall (convective + stratiform) probability +'131144' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 144 ; + } +#Total precipitation probability +'131151' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 151 ; + } +#Total cloud cover probability +'131164' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 164 ; + } +#10 metre speed probability +'131165' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 165 ; + } +#2 metre temperature probability +'131167' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 167 ; + } +#Maximum 2 metre temperature probability +'131201' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 201 ; + } +#Minimum 2 metre temperature probability +'131202' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 202 ; + } +#Total precipitation probability +'131228' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 228 ; + } +#Significant wave height probability +'131229' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 229 ; + } +#Mean wave period probability +'131232' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 232 ; + } +#Indicates a missing value +'131255' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 255 ; + } +#10 metre wind gust index +'132049' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 49 ; + } +#Snowfall index +'132144' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 144 ; + } +#10 metre speed index +'132165' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 165 ; + } +#2 metre temperature index +'132167' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 167 ; + } +#Maximum temperature at 2 metres index +'132201' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres index +'132202' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 202 ; + } +#Total precipitation index +'132228' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 228 ; + } +#2m temperature probability less than -10 C +'133001' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 1 ; + } +#2m temperature probability less than -5 C +'133002' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 2 ; + } +#2m temperature probability less than 0 C +'133003' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 3 ; + } +#2m temperature probability less than 5 C +'133004' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 4 ; + } +#2m temperature probability less than 10 C +'133005' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 5 ; + } +#2m temperature probability greater than 25 C +'133006' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 6 ; + } +#2m temperature probability greater than 30 C +'133007' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 7 ; + } +#2m temperature probability greater than 35 C +'133008' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 8 ; + } +#2m temperature probability greater than 40 C +'133009' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 9 ; + } +#2m temperature probability greater than 45 C +'133010' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 10 ; + } +#Minimum 2 metre temperature probability less than -10 C +'133011' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 11 ; + } +#Minimum 2 metre temperature probability less than -5 C +'133012' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 12 ; + } +#Minimum 2 metre temperature probability less than 0 C +'133013' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 13 ; + } +#Minimum 2 metre temperature probability less than 5 C +'133014' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 14 ; + } +#Minimum 2 metre temperature probability less than 10 C +'133015' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 15 ; + } +#Maximum 2 metre temperature probability greater than 25 C +'133016' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 16 ; + } +#Maximum 2 metre temperature probability greater than 30 C +'133017' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 17 ; + } +#Maximum 2 metre temperature probability greater than 35 C +'133018' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 18 ; + } +#Maximum 2 metre temperature probability greater than 40 C +'133019' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 19 ; + } +#Maximum 2 metre temperature probability greater than 45 C +'133020' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 20 ; + } +#10 metre wind speed probability of at least 10 m/s +'133021' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 21 ; + } +#10 metre wind speed probability of at least 15 m/s +'133022' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 22 ; + } +#10 metre wind speed probability of at least 20 m/s +'133023' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 23 ; + } +#10 metre wind speed probability of at least 35 m/s +'133024' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 24 ; + } +#10 metre wind speed probability of at least 50 m/s +'133025' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 25 ; + } +#10 metre wind gust probability of at least 20 m/s +'133026' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 26 ; + } +#10 metre wind gust probability of at least 35 m/s +'133027' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 27 ; + } +#10 metre wind gust probability of at least 50 m/s +'133028' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 28 ; + } +#10 metre wind gust probability of at least 75 m/s +'133029' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 29 ; + } +#10 metre wind gust probability of at least 100 m/s +'133030' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 30 ; + } +#Total precipitation probability of at least 1 mm +'133031' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 31 ; + } +#Total precipitation probability of at least 5 mm +'133032' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 32 ; + } +#Total precipitation probability of at least 10 mm +'133033' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 33 ; + } +#Total precipitation probability of at least 20 mm +'133034' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 34 ; + } +#Total precipitation probability of at least 40 mm +'133035' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 35 ; + } +#Total precipitation probability of at least 60 mm +'133036' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 36 ; + } +#Total precipitation probability of at least 80 mm +'133037' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 37 ; + } +#Total precipitation probability of at least 100 mm +'133038' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 38 ; + } +#Total precipitation probability of at least 150 mm +'133039' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 39 ; + } +#Total precipitation probability of at least 200 mm +'133040' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 40 ; + } +#Total precipitation probability of at least 300 mm +'133041' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 41 ; + } +#Snowfall probability of at least 1 mm +'133042' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 42 ; + } +#Snowfall probability of at least 5 mm +'133043' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 43 ; + } +#Snowfall probability of at least 10 mm +'133044' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 44 ; + } +#Snowfall probability of at least 20 mm +'133045' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 45 ; + } +#Snowfall probability of at least 40 mm +'133046' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 46 ; + } +#Snowfall probability of at least 60 mm +'133047' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 47 ; + } +#Snowfall probability of at least 80 mm +'133048' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 48 ; + } +#Snowfall probability of at least 100 mm +'133049' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 49 ; + } +#Snowfall probability of at least 150 mm +'133050' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 50 ; + } +#Snowfall probability of at least 200 mm +'133051' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 51 ; + } +#Snowfall probability of at least 300 mm +'133052' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 52 ; + } +#Total Cloud Cover probability greater than 10% +'133053' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 53 ; + } +#Total Cloud Cover probability greater than 20% +'133054' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 54 ; + } +#Total Cloud Cover probability greater than 30% +'133055' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 55 ; + } +#Total Cloud Cover probability greater than 40% +'133056' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 56 ; + } +#Total Cloud Cover probability greater than 50% +'133057' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 57 ; + } +#Total Cloud Cover probability greater than 60% +'133058' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 58 ; + } +#Total Cloud Cover probability greater than 70% +'133059' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 59 ; + } +#Total Cloud Cover probability greater than 80% +'133060' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 60 ; + } +#Total Cloud Cover probability greater than 90% +'133061' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 61 ; + } +#Total Cloud Cover probability greater than 99% +'133062' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 62 ; + } +#High Cloud Cover probability greater than 10% +'133063' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 63 ; + } +#High Cloud Cover probability greater than 20% +'133064' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 64 ; + } +#High Cloud Cover probability greater than 30% +'133065' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 65 ; + } +#High Cloud Cover probability greater than 40% +'133066' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 66 ; + } +#High Cloud Cover probability greater than 50% +'133067' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 67 ; + } +#High Cloud Cover probability greater than 60% +'133068' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 68 ; + } +#High Cloud Cover probability greater than 70% +'133069' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 69 ; + } +#High Cloud Cover probability greater than 80% +'133070' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 70 ; + } +#High Cloud Cover probability greater than 90% +'133071' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 71 ; + } +#High Cloud Cover probability greater than 99% +'133072' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 72 ; + } +#Medium Cloud Cover probability greater than 10% +'133073' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 73 ; + } +#Medium Cloud Cover probability greater than 20% +'133074' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 74 ; + } +#Medium Cloud Cover probability greater than 30% +'133075' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 75 ; + } +#Medium Cloud Cover probability greater than 40% +'133076' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 76 ; + } +#Medium Cloud Cover probability greater than 50% +'133077' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 77 ; + } +#Medium Cloud Cover probability greater than 60% +'133078' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 78 ; + } +#Medium Cloud Cover probability greater than 70% +'133079' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 79 ; + } +#Medium Cloud Cover probability greater than 80% +'133080' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 80 ; + } +#Medium Cloud Cover probability greater than 90% +'133081' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 81 ; + } +#Medium Cloud Cover probability greater than 99% +'133082' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 82 ; + } +#Low Cloud Cover probability greater than 10% +'133083' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 83 ; + } +#Low Cloud Cover probability greater than 20% +'133084' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 84 ; + } +#Low Cloud Cover probability greater than 30% +'133085' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 85 ; + } +#Low Cloud Cover probability greater than 40% +'133086' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 86 ; + } +#Low Cloud Cover probability greater than 50% +'133087' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 87 ; + } +#Low Cloud Cover probability greater than 60% +'133088' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 88 ; + } +#Low Cloud Cover probability greater than 70% +'133089' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 89 ; + } +#Low Cloud Cover probability greater than 80% +'133090' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 90 ; + } +#Low Cloud Cover probability greater than 90% +'133091' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 91 ; + } +#Low Cloud Cover probability greater than 99% +'133092' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 92 ; + } +#Maximum of significant wave height +'140200' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 200 ; + } +#Period corresponding to maximum individual wave height +'140217' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; + } +#Maximum individual wave height +'140218' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; + } +#Model bathymetry +'140219' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; + } +#Mean wave period based on first moment +'140220' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; + } +#Mean wave period based on second moment +'140221' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 221 ; + } +#Wave spectral directional width +'140222' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; + } +#Mean wave period based on first moment for wind waves +'140223' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; + } +#Mean wave period based on second moment for wind waves +'140224' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; + } +#Wave spectral directional width for wind waves +'140225' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; + } +#Mean wave period based on first moment for swell +'140226' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; + } +#Mean wave period based on second moment for swell +'140227' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; + } +#Wave spectral directional width for swell +'140228' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; + } +#Significant height of combined wind waves and swell +'140229' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Mean wave direction +'140230' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Peak period of 1D spectra +'140231' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 231 ; + } +#Mean wave period +'140232' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + } +#Coefficient of drag with waves +'140233' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; + } +#Significant height of wind waves +'140234' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean direction of wind waves +'140235' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 235 ; + } +#Mean period of wind waves +'140236' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Significant height of total swell +'140237' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; + } +#Mean direction of total swell +'140238' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 238 ; + } +#Mean period of total swell +'140239' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; + } +#Standard deviation wave height +'140240' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 240 ; + } +#Mean of 10 metre wind speed +'140241' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 241 ; + } +#Mean wind direction +'140242' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 242 ; + } +#Standard deviation of 10 metre wind speed +'140243' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 243 ; + } +#Mean square slope of waves +'140244' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; + } +#10 metre wind speed +'140245' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; + } +#Altimeter wave height +'140246' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; + } +#Altimeter corrected wave height +'140247' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; + } +#Altimeter range relative correction +'140248' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; + } +#10 metre wind direction +'140249' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; + } +#2D wave spectra (multiple) +'140250' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 250 ; + } +#2D wave spectra (single) +'140251' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 251 ; + } +#Wave spectral kurtosis +'140252' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; + } +#Benjamin-Feir index +'140253' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; + } +#Wave spectral peakedness +'140254' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'140255' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 255 ; + } +#Ocean potential temperature +'150129' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 129 ; + } +#Ocean salinity +'150130' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 130 ; + } +#Ocean potential density +'150131' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 131 ; + } +#Ocean U wind component +'150133' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 133 ; + } +#Ocean V wind component +'150134' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 134 ; + } +#Ocean W wind component +'150135' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 135 ; + } +#Richardson number +'150137' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 137 ; + } +#U*V product +'150139' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 139 ; + } +#U*T product +'150140' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 140 ; + } +#V*T product +'150141' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 141 ; + } +#U*U product +'150142' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 142 ; + } +#V*V product +'150143' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 143 ; + } +#UV - U~V~ +'150144' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 144 ; + } +#UT - U~T~ +'150145' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 145 ; + } +#VT - V~T~ +'150146' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 146 ; + } +#UU - U~U~ +'150147' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 147 ; + } +#VV - V~V~ +'150148' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 148 ; + } +#Sea level +'150152' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 152 ; + } +#Barotropic stream function +'150153' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 153 ; + } +#Mixed layer depth +'150154' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 154 ; + } +#Depth +'150155' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 155 ; + } +#U stress +'150168' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 168 ; + } +#V stress +'150169' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 169 ; + } +#Turbulent kinetic energy input +'150170' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 170 ; + } +#Net surface heat flux +'150171' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 171 ; + } +#Surface solar radiation +'150172' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 172 ; + } +#P-E +'150173' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 173 ; + } +#Diagnosed sea surface temperature error +'150180' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 180 ; + } +#Heat flux correction +'150181' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 181 ; + } +#Observed sea surface temperature +'150182' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 182 ; + } +#Observed heat flux +'150183' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 183 ; + } +#Indicates a missing value +'150255' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 255 ; + } +#In situ Temperature +'151128' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 128 ; + } +#Ocean potential temperature +'151129' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 129 ; + } +#Salinity +'151130' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 130 ; + } +#Ocean current zonal component +'151131' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 131 ; + } +#Ocean current meridional component +'151132' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 132 ; + } +#Ocean current vertical component +'151133' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 133 ; + } +#Modulus of strain rate tensor +'151134' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 134 ; + } +#Vertical viscosity +'151135' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 135 ; + } +#Vertical diffusivity +'151136' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 136 ; + } +#Bottom level Depth +'151137' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 137 ; + } +#Sigma-theta +'151138' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 138 ; + } +#Richardson number +'151139' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 139 ; + } +#UV product +'151140' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 140 ; + } +#UT product +'151141' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 141 ; + } +#VT product +'151142' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 142 ; + } +#UU product +'151143' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 143 ; + } +#VV product +'151144' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 144 ; + } +#Sea level +'151145' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 145 ; + } +#Sea level previous timestep +'151146' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 146 ; + } +#Barotropic stream function +'151147' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 147 ; + } +#Mixed layer depth +'151148' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 148 ; + } +#Bottom Pressure (equivalent height) +'151149' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 149 ; + } +#Steric height +'151150' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 150 ; + } +#Curl of Wind Stress +'151151' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 151 ; + } +#Divergence of wind stress +'151152' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 152 ; + } +#U stress +'151153' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 153 ; + } +#V stress +'151154' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 154 ; + } +#Turbulent kinetic energy input +'151155' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 155 ; + } +#Net surface heat flux +'151156' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 156 ; + } +#Absorbed solar radiation +'151157' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 157 ; + } +#Precipitation - evaporation +'151158' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 158 ; + } +#Specified sea surface temperature +'151159' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 159 ; + } +#Specified surface heat flux +'151160' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 160 ; + } +#Diagnosed sea surface temperature error +'151161' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 161 ; + } +#Heat flux correction +'151162' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 162 ; + } +#20 degrees isotherm depth +'151163' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 163 ; + } +#Average potential temperature in the upper 300m +'151164' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 164 ; + } +#Vertically integrated zonal velocity (previous time step) +'151165' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 165 ; + } +#Vertically Integrated meridional velocity (previous time step) +'151166' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 166 ; + } +#Vertically integrated zonal volume transport +'151167' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 167 ; + } +#Vertically integrated meridional volume transport +'151168' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 168 ; + } +#Vertically integrated zonal heat transport +'151169' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 169 ; + } +#Vertically integrated meridional heat transport +'151170' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 170 ; + } +#U velocity maximum +'151171' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 171 ; + } +#Depth of the velocity maximum +'151172' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 172 ; + } +#Salinity maximum +'151173' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 173 ; + } +#Depth of salinity maximum +'151174' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 174 ; + } +#Average salinity in the upper 300m +'151175' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 175 ; + } +#Layer Thickness at scalar points +'151176' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 176 ; + } +#Layer Thickness at vector points +'151177' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 177 ; + } +#Potential temperature increment +'151178' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 178 ; + } +#Potential temperature analysis error +'151179' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 179 ; + } +#Background potential temperature +'151180' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 180 ; + } +#Analysed potential temperature +'151181' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 181 ; + } +#Potential temperature background error +'151182' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 182 ; + } +#Analysed salinity +'151183' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 183 ; + } +#Salinity increment +'151184' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 184 ; + } +#Estimated Bias in Temperature +'151185' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 185 ; + } +#Estimated Bias in Salinity +'151186' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 186 ; + } +#Zonal Velocity increment (from balance operator) +'151187' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 187 ; + } +#Meridional Velocity increment (from balance operator) +'151188' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 188 ; + } +#Salinity increment (from salinity data) +'151190' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 190 ; + } +#Salinity analysis error +'151191' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 191 ; + } +#Background Salinity +'151192' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 192 ; + } +#Salinity background error +'151194' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 194 ; + } +#Estimated temperature bias from assimilation +'151199' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 199 ; + } +#Estimated salinity bias from assimilation +'151200' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 200 ; + } +#Temperature increment from relaxation term +'151201' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 201 ; + } +#Salinity increment from relaxation term +'151202' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 202 ; + } +#Bias in the zonal pressure gradient (applied) +'151203' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 203 ; + } +#Bias in the meridional pressure gradient (applied) +'151204' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 204 ; + } +#Estimated temperature bias from relaxation +'151205' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 205 ; + } +#Estimated salinity bias from relaxation +'151206' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 206 ; + } +#First guess bias in temperature +'151207' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 207 ; + } +#First guess bias in salinity +'151208' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 208 ; + } +#Applied bias in pressure +'151209' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 209 ; + } +#FG bias in pressure +'151210' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 210 ; + } +#Bias in temperature(applied) +'151211' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 211 ; + } +#Bias in salinity (applied) +'151212' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 212 ; + } +#Indicates a missing value +'151255' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 255 ; + } +#10 metre wind gust during averaging time +'160049' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 49 ; + } +#vertical velocity (pressure) +'160135' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 135 ; + } +#Precipitable water content +'160137' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 137 ; + } +#Soil wetness level 1 +'160140' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 140 ; + } +#Snow depth +'160141' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 141 ; + } +#Large-scale precipitation +'160142' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 142 ; + } +#Convective precipitation +'160143' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 143 ; + } +#Snowfall +'160144' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 144 ; + } +#Height +'160156' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 156 ; + } +#Relative humidity +'160157' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 157 ; + } +#Soil wetness level 2 +'160171' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 171 ; + } +#East-West surface stress +'160180' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 180 ; + } +#North-South surface stress +'160181' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 181 ; + } +#Evaporation +'160182' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 182 ; + } +#Soil wetness level 3 +'160184' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 184 ; + } +#Skin reservoir content +'160198' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 198 ; + } +#Percentage of vegetation +'160199' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 199 ; + } +#Maximum temperature at 2 metres during averaging time +'160201' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres during averaging time +'160202' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 202 ; + } +#Runoff +'160205' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 205 ; + } +#Standard deviation of geopotential +'160206' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 206 ; + } +#Covariance of temperature and geopotential +'160207' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 207 ; + } +#Standard deviation of temperature +'160208' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 208 ; + } +#Covariance of specific humidity and geopotential +'160209' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 209 ; + } +#Covariance of specific humidity and temperature +'160210' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 210 ; + } +#Standard deviation of specific humidity +'160211' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 211 ; + } +#Covariance of U component and geopotential +'160212' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 212 ; + } +#Covariance of U component and temperature +'160213' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 213 ; + } +#Covariance of U component and specific humidity +'160214' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 214 ; + } +#Standard deviation of U velocity +'160215' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 215 ; + } +#Covariance of V component and geopotential +'160216' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 216 ; + } +#Covariance of V component and temperature +'160217' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 217 ; + } +#Covariance of V component and specific humidity +'160218' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 218 ; + } +#Covariance of V component and U component +'160219' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 219 ; + } +#Standard deviation of V component +'160220' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 220 ; + } +#Covariance of W component and geopotential +'160221' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 221 ; + } +#Covariance of W component and temperature +'160222' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 222 ; + } +#Covariance of W component and specific humidity +'160223' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 223 ; + } +#Covariance of W component and U component +'160224' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 224 ; + } +#Covariance of W component and V component +'160225' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 225 ; + } +#Standard deviation of vertical velocity +'160226' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 226 ; + } +#Instantaneous surface heat flux +'160231' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 231 ; + } +#Convective snowfall +'160239' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 239 ; + } +#Large scale snowfall +'160240' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 240 ; + } +#Cloud liquid water content +'160241' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 241 ; + } +#Cloud cover +'160242' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 242 ; + } +#Forecast albedo +'160243' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 243 ; + } +#10 metre wind speed +'160246' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 246 ; + } +#Momentum flux +'160247' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 247 ; + } +#Gravity wave dissipation flux +'160249' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 249 ; + } +#Heaviside beta function +'160254' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 254 ; + } +#Surface geopotential +'162051' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 51 ; + } +#Vertical integral of mass of atmosphere +'162053' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 53 ; + } +#Vertical integral of temperature +'162054' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 54 ; + } +#Vertical integral of water vapour +'162055' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 55 ; + } +#Vertical integral of cloud liquid water +'162056' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 56 ; + } +#Vertical integral of cloud frozen water +'162057' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 57 ; + } +#Vertical integral of ozone +'162058' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 58 ; + } +#Vertical integral of kinetic energy +'162059' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 59 ; + } +#Vertical integral of thermal energy +'162060' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 60 ; + } +#Vertical integral of potential+internal energy +'162061' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 61 ; + } +#Vertical integral of potential+internal+latent energy +'162062' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 62 ; + } +#Vertical integral of total energy +'162063' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 63 ; + } +#Vertical integral of energy conversion +'162064' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 64 ; + } +#Vertical integral of eastward mass flux +'162065' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 65 ; + } +#Vertical integral of northward mass flux +'162066' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 66 ; + } +#Vertical integral of eastward kinetic energy flux +'162067' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 67 ; + } +#Vertical integral of northward kinetic energy flux +'162068' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 68 ; + } +#Vertical integral of eastward heat flux +'162069' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 69 ; + } +#Vertical integral of northward heat flux +'162070' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 70 ; + } +#Vertical integral of eastward water vapour flux +'162071' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; + } +#Vertical integral of northward water vapour flux +'162072' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; + } +#Vertical integral of eastward geopotential flux +'162073' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 73 ; + } +#Vertical integral of northward geopotential flux +'162074' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 74 ; + } +#Vertical integral of eastward total energy flux +'162075' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 75 ; + } +#Vertical integral of northward total energy flux +'162076' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 76 ; + } +#Vertical integral of eastward ozone flux +'162077' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 77 ; + } +#Vertical integral of northward ozone flux +'162078' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 78 ; + } +#Vertical integral of divergence of mass flux +'162081' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 81 ; + } +#Vertical integral of divergence of kinetic energy flux +'162082' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 82 ; + } +#Vertical integral of divergence of thermal energy flux +'162083' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 83 ; + } +#Vertical integral of divergence of moisture flux +'162084' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 84 ; + } +#Vertical integral of divergence of geopotential flux +'162085' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 85 ; + } +#Vertical integral of divergence of total energy flux +'162086' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 86 ; + } +#Vertical integral of divergence of ozone flux +'162087' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 87 ; + } +#Tendency of short wave radiation +'162100' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; + } +#Tendency of long wave radiation +'162101' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; + } +#Tendency of clear sky short wave radiation +'162102' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; + } +#Tendency of clear sky long wave radiation +'162103' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; + } +#Updraught mass flux +'162104' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; + } +#Downdraught mass flux +'162105' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; + } +#Updraught detrainment rate +'162106' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; + } +#Downdraught detrainment rate +'162107' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; + } +#Total precipitation flux +'162108' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; + } +#Turbulent diffusion coefficient for heat +'162109' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; + } +#Tendency of temperature due to physics +'162110' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; + } +#Tendency of specific humidity due to physics +'162111' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; + } +#Tendency of u component due to physics +'162112' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; + } +#Tendency of v component due to physics +'162113' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; + } +#Variance of geopotential +'162206' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 206 ; + } +#Covariance of geopotential/temperature +'162207' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 207 ; + } +#Variance of temperature +'162208' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 208 ; + } +#Covariance of geopotential/specific humidity +'162209' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 209 ; + } +#Covariance of temperature/specific humidity +'162210' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 210 ; + } +#Variance of specific humidity +'162211' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 211 ; + } +#Covariance of u component/geopotential +'162212' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 212 ; + } +#Covariance of u component/temperature +'162213' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 213 ; + } +#Covariance of u component/specific humidity +'162214' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 214 ; + } +#Variance of u component +'162215' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 215 ; + } +#Covariance of v component/geopotential +'162216' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 216 ; + } +#Covariance of v component/temperature +'162217' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 217 ; + } +#Covariance of v component/specific humidity +'162218' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 218 ; + } +#Covariance of v component/u component +'162219' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 219 ; + } +#Variance of v component +'162220' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 220 ; + } +#Covariance of omega/geopotential +'162221' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 221 ; + } +#Covariance of omega/temperature +'162222' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 222 ; + } +#Covariance of omega/specific humidity +'162223' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 223 ; + } +#Covariance of omega/u component +'162224' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 224 ; + } +#Covariance of omega/v component +'162225' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 225 ; + } +#Variance of omega +'162226' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 226 ; + } +#Variance of surface pressure +'162227' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 227 ; + } +#Variance of relative humidity +'162229' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 229 ; + } +#Covariance of u component/ozone +'162230' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 230 ; + } +#Covariance of v component/ozone +'162231' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 231 ; + } +#Covariance of omega/ozone +'162232' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 232 ; + } +#Variance of ozone +'162233' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 233 ; + } +#Indicates a missing value +'162255' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 255 ; + } +#Total soil moisture +'170149' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 149 ; + } +#Soil wetness level 2 +'170171' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 171 ; + } +#Top net thermal radiation +'170179' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 179 ; + } +#Stream function anomaly +'171001' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 1 ; + } +#Velocity potential anomaly +'171002' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 2 ; + } +#Potential temperature anomaly +'171003' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature anomaly +'171004' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature anomaly +'171005' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 5 ; + } +#U component of divergent wind anomaly +'171011' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 11 ; + } +#V component of divergent wind anomaly +'171012' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 12 ; + } +#U component of rotational wind anomaly +'171013' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 13 ; + } +#V component of rotational wind anomaly +'171014' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature anomaly +'171021' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure anomaly +'171022' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence anomaly +'171023' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 23 ; + } +#Lake cover anomaly +'171026' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 26 ; + } +#Low vegetation cover anomaly +'171027' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 27 ; + } +#High vegetation cover anomaly +'171028' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 28 ; + } +#Type of low vegetation anomaly +'171029' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 29 ; + } +#Type of high vegetation anomaly +'171030' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 30 ; + } +#Sea-ice cover anomaly +'171031' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 31 ; + } +#Snow albedo anomaly +'171032' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 32 ; + } +#Snow density anomaly +'171033' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 33 ; + } +#Sea surface temperature anomaly +'171034' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 34 ; + } +#Ice surface temperature anomaly layer 1 +'171035' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 35 ; + } +#Ice surface temperature anomaly layer 2 +'171036' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 36 ; + } +#Ice surface temperature anomaly layer 3 +'171037' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 37 ; + } +#Ice surface temperature anomaly layer 4 +'171038' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 38 ; + } +#Volumetric soil water anomaly layer 1 +'171039' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 39 ; + } +#Volumetric soil water anomaly layer 2 +'171040' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 40 ; + } +#Volumetric soil water anomaly layer 3 +'171041' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 41 ; + } +#Volumetric soil water anomaly layer 4 +'171042' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 42 ; + } +#Soil type anomaly +'171043' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 43 ; + } +#Snow evaporation anomaly +'171044' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 44 ; + } +#Snowmelt anomaly +'171045' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 45 ; + } +#Solar duration anomaly +'171046' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 46 ; + } +#Direct solar radiation anomaly +'171047' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress anomaly +'171048' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 48 ; + } +#10 metre wind gust anomaly +'171049' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction anomaly +'171050' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature in the last 24 hours anomaly +'171051' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature in the last 24 hours anomaly +'171052' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 52 ; + } +#Montgomery potential anomaly +'171053' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 53 ; + } +#Pressure anomaly +'171054' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours anomaly +'171055' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours anomaly +'171056' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface anomaly +'171057' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface anomaly +'171058' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 58 ; + } +#Convective available potential energy anomaly +'171059' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 59 ; + } +#Potential vorticity anomaly +'171060' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 60 ; + } +#Total precipitation from observations anomaly +'171061' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 61 ; + } +#Observation count anomaly +'171062' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference anomaly +'171063' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference anomaly +'171064' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 64 ; + } +#Skin temperature difference anomaly +'171065' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 65 ; + } +#Total column liquid water anomaly +'171078' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 78 ; + } +#Total column ice water anomaly +'171079' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 79 ; + } +#Vertically integrated total energy anomaly +'171125' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'171126' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 126 ; + } +#Atmospheric tide anomaly +'171127' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 127 ; + } +#Budget values anomaly +'171128' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 128 ; + } +#Geopotential anomaly +'171129' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 129 ; + } +#Temperature anomaly +'171130' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 130 ; + } +#U component of wind anomaly +'171131' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 131 ; + } +#V component of wind anomaly +'171132' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 132 ; + } +#Specific humidity anomaly +'171133' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 133 ; + } +#Surface pressure anomaly +'171134' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 134 ; + } +#Vertical velocity (pressure) anomaly +'171135' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 135 ; + } +#Total column water anomaly +'171136' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 136 ; + } +#Total column water vapour anomaly +'171137' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 137 ; + } +#Relative vorticity anomaly +'171138' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 138 ; + } +#Soil temperature anomaly level 1 +'171139' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 139 ; + } +#Soil wetness anomaly level 1 +'171140' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 140 ; + } +#Snow depth anomaly +'171141' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'171142' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 142 ; + } +#Convective precipitation anomaly +'171143' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) anomaly +'171144' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation anomaly +'171145' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux anomaly +'171146' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 146 ; + } +#Surface latent heat flux anomaly +'171147' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 147 ; + } +#Charnock anomaly +'171148' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 148 ; + } +#Surface net radiation anomaly +'171149' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 149 ; + } +#Top net radiation anomaly +'171150' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 150 ; + } +#Mean sea level pressure anomaly +'171151' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure anomaly +'171152' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 152 ; + } +#Short-wave heating rate anomaly +'171153' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 153 ; + } +#Long-wave heating rate anomaly +'171154' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 154 ; + } +#Relative divergence anomaly +'171155' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 155 ; + } +#Height anomaly +'171156' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 156 ; + } +#Relative humidity anomaly +'171157' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure anomaly +'171158' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 158 ; + } +#Boundary layer height anomaly +'171159' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 159 ; + } +#Standard deviation of orography anomaly +'171160' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography anomaly +'171161' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography anomaly +'171162' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography anomaly +'171163' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 163 ; + } +#Total cloud cover anomaly +'171164' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 164 ; + } +#10 metre U wind component anomaly +'171165' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 165 ; + } +#10 metre V wind component anomaly +'171166' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 166 ; + } +#2 metre temperature anomaly +'171167' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 167 ; + } +#2 metre dewpoint temperature anomaly +'171168' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 168 ; + } +#Surface solar radiation downwards anomaly +'171169' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 169 ; + } +#Soil temperature anomaly level 2 +'171170' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 170 ; + } +#Soil wetness anomaly level 2 +'171171' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 171 ; + } +#Surface roughness anomaly +'171173' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 173 ; + } +#Albedo anomaly +'171174' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards anomaly +'171175' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 175 ; + } +#Surface net solar radiation anomaly +'171176' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation anomaly +'171177' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 177 ; + } +#Top net solar radiation anomaly +'171178' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 178 ; + } +#Top net thermal radiation anomaly +'171179' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 179 ; + } +#East-West surface stress anomaly +'171180' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 180 ; + } +#North-South surface stress anomaly +'171181' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 181 ; + } +#Evaporation anomaly +'171182' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 182 ; + } +#Soil temperature anomaly level 3 +'171183' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 183 ; + } +#Soil wetness anomaly level 3 +'171184' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 184 ; + } +#Convective cloud cover anomaly +'171185' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 185 ; + } +#Low cloud cover anomaly +'171186' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 186 ; + } +#Medium cloud cover anomaly +'171187' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 187 ; + } +#High cloud cover anomaly +'171188' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 188 ; + } +#Sunshine duration anomaly +'171189' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance anomaly +'171190' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance anomaly +'171191' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance anomaly +'171192' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance anomaly +'171193' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 193 ; + } +#Brightness temperature anomaly +'171194' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress anomaly +'171195' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress anomaly +'171196' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation anomaly +'171197' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 197 ; + } +#Skin reservoir content anomaly +'171198' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 198 ; + } +#Vegetation fraction anomaly +'171199' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography anomaly +'171200' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres anomaly +'171201' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres anomaly +'171202' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio anomaly +'171203' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights anomaly +'171204' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 204 ; + } +#Runoff anomaly +'171205' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 205 ; + } +#Total column ozone anomaly +'171206' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 206 ; + } +#10 metre wind speed anomaly +'171207' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 207 ; + } +#Top net solar radiation clear sky anomaly +'171208' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 208 ; + } +#Top net thermal radiation clear sky anomaly +'171209' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 209 ; + } +#Surface net solar radiation clear sky anomaly +'171210' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'171211' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 211 ; + } +#Solar insolation anomaly +'171212' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation anomaly +'171214' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion anomaly +'171215' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection anomaly +'171216' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 216 ; + } +#Diabatic heating by large-scale condensation anomaly +'171217' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind anomaly +'171218' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind anomaly +'171219' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency anomaly +'171220' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency anomaly +'171221' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind anomaly +'171222' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind anomaly +'171223' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity anomaly +'171224' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection anomaly +'171225' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation anomaly +'171226' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity anomaly +'171227' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 227 ; + } +#Total precipitation anomaly +'171228' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress anomaly +'171229' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress anomaly +'171230' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux anomaly +'171231' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux anomaly +'171232' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 232 ; + } +#Apparent surface humidity anomaly +'171233' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat anomaly +'171234' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 234 ; + } +#Skin temperature anomaly +'171235' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 anomaly +'171236' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 anomaly +'171237' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 237 ; + } +#Temperature of snow layer anomaly +'171238' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 238 ; + } +#Convective snowfall anomaly +'171239' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 239 ; + } +#Large scale snowfall anomaly +'171240' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency anomaly +'171241' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency anomaly +'171242' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 242 ; + } +#Forecast albedo anomaly +'171243' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 243 ; + } +#Forecast surface roughness anomaly +'171244' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat anomaly +'171245' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 245 ; + } +#Cloud liquid water content anomaly +'171246' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 246 ; + } +#Cloud ice water content anomaly +'171247' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 247 ; + } +#Cloud cover anomaly +'171248' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency anomaly +'171249' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 249 ; + } +#Ice age anomaly +'171250' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature anomaly +'171251' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity anomaly +'171252' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind anomaly +'171253' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind anomaly +'171254' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'171255' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 255 ; + } +#Snow evaporation +'172044' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 44 ; + } +#Snowmelt +'172045' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 45 ; + } +#Magnitude of surface stress +'172048' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction +'172050' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) +'172142' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; + } +#Convective precipitation +'172143' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) +'172144' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation +'172145' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux +'172146' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 146 ; + } +#Surface latent heat flux +'172147' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 147 ; + } +#Surface net radiation +'172149' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 149 ; + } +#Short-wave heating rate +'172153' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 153 ; + } +#Long-wave heating rate +'172154' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 154 ; + } +#Surface solar radiation downwards +'172169' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards +'172175' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 175 ; + } +#Surface solar radiation +'172176' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 176 ; + } +#Surface thermal radiation +'172177' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 177 ; + } +#Top solar radiation +'172178' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 178 ; + } +#Top thermal radiation +'172179' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 179 ; + } +#East-West surface stress +'172180' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 180 ; + } +#North-South surface stress +'172181' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 181 ; + } +#Evaporation +'172182' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 182 ; + } +#Sunshine duration +'172189' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress +'172195' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress +'172196' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'172197' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 197 ; + } +#Runoff +'172205' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky +'172208' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'172209' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'172210' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'172211' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 211 ; + } +#Solar insolation +'172212' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 212 ; + } +#Total precipitation +'172228' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 228 ; + } +#Convective snowfall +'172239' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 239 ; + } +#Large scale snowfall +'172240' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 240 ; + } +#Indicates a missing value +'172255' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 255 ; + } +#Snow evaporation anomaly +'173044' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 44 ; + } +#Snowmelt anomaly +'173045' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 45 ; + } +#Magnitude of surface stress anomaly +'173048' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction anomaly +'173050' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'173142' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 142 ; + } +#Convective precipitation anomaly +'173143' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) anomalous rate of accumulation +'173144' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation anomaly +'173145' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux anomaly +'173146' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 146 ; + } +#Surface latent heat flux anomaly +'173147' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 147 ; + } +#Surface net radiation anomaly +'173149' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 149 ; + } +#Short-wave heating rate anomaly +'173153' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 153 ; + } +#Long-wave heating rate anomaly +'173154' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 154 ; + } +#Surface solar radiation downwards anomaly +'173169' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards anomaly +'173175' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 175 ; + } +#Surface solar radiation anomaly +'173176' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 176 ; + } +#Surface thermal radiation anomaly +'173177' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 177 ; + } +#Top solar radiation anomaly +'173178' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 178 ; + } +#Top thermal radiation anomaly +'173179' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 179 ; + } +#East-West surface stress anomaly +'173180' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 180 ; + } +#North-South surface stress anomaly +'173181' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 181 ; + } +#Evaporation anomaly +'173182' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 182 ; + } +#Sunshine duration anomalous rate of accumulation +'173189' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress anomaly +'173195' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress anomaly +'173196' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation anomaly +'173197' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 197 ; + } +#Runoff anomaly +'173205' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky anomaly +'173208' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky anomaly +'173209' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky anomaly +'173210' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'173211' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 211 ; + } +#Solar insolation anomaly +'173212' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 212 ; + } +#Total precipitation anomalous rate of accumulation +'173228' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 228 ; + } +#Convective snowfall anomaly +'173239' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 239 ; + } +#Large scale snowfall anomaly +'173240' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 240 ; + } +#Indicates a missing value +'173255' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 255 ; + } +#Total soil moisture +'174006' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 6 ; + } +#Surface runoff +'174008' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 8 ; + } +#Sub-surface runoff +'174009' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 9 ; + } +#Fraction of sea-ice in sea +'174031' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 31 ; + } +#Open-sea surface temperature +'174034' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 34 ; + } +#Volumetric soil water layer 1 +'174039' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'174040' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'174041' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'174042' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 42 ; + } +#10 metre wind gust in the last 24 hours +'174049' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'174055' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 55 ; + } +#Net primary productivity +'174083' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 83 ; + } +#10m U wind over land +'174085' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 85 ; + } +#10m V wind over land +'174086' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 86 ; + } +#1.5m temperature over land +'174087' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 87 ; + } +#1.5m dewpoint temperature over land +'174088' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 88 ; + } +#Top incoming solar radiation +'174089' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 89 ; + } +#Top outgoing solar radiation +'174090' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 90 ; + } +#Mean sea surface temperature +'174094' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 94 ; + } +#1.5m specific humidity +'174095' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 95 ; + } +#Sea-ice thickness +'174098' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 98 ; + } +#Liquid water potential temperature +'174099' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 99 ; + } +#Ocean ice concentration +'174110' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 110 ; + } +#Ocean mean ice depth +'174111' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 111 ; + } +#Soil temperature layer 1 +'174139' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 139 ; + } +#Average potential temperature in upper 293.4m +'174164' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 164 ; + } +#1.5m temperature +'174167' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 167 ; + } +#1.5m dewpoint temperature +'174168' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 168 ; + } +#Soil temperature layer 2 +'174170' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 170 ; + } +#Average salinity in upper 293.4m +'174175' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 175 ; + } +#Soil temperature layer 3 +'174183' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'174201' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'174202' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 202 ; + } +#Soil temperature layer 4 +'174236' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 236 ; + } +#Indicates a missing value +'174255' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 255 ; + } +#Total soil moisture +'175006' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 6 ; + } +#Fraction of sea-ice in sea +'175031' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 31 ; + } +#Open-sea surface temperature +'175034' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 34 ; + } +#Volumetric soil water layer 1 +'175039' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'175040' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'175041' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'175042' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 42 ; + } +#10m wind gust in the last 24 hours +'175049' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'175055' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 55 ; + } +#Net primary productivity +'175083' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 83 ; + } +#10m U wind over land +'175085' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 85 ; + } +#10m V wind over land +'175086' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 86 ; + } +#1.5m temperature over land +'175087' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 87 ; + } +#1.5m dewpoint temperature over land +'175088' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 88 ; + } +#Top incoming solar radiation +'175089' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 89 ; + } +#Top outgoing solar radiation +'175090' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 90 ; + } +#Ocean ice concentration +'175110' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 110 ; + } +#Ocean mean ice depth +'175111' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 111 ; + } +#Soil temperature layer 1 +'175139' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 139 ; + } +#Average potential temperature in upper 293.4m +'175164' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 164 ; + } +#1.5m temperature +'175167' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 167 ; + } +#1.5m dewpoint temperature +'175168' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 168 ; + } +#Soil temperature layer 2 +'175170' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 170 ; + } +#Average salinity in upper 293.4m +'175175' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 175 ; + } +#Soil temperature layer 3 +'175183' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'175201' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'175202' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 202 ; + } +#Soil temperature layer 4 +'175236' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 236 ; + } +#Indicates a missing value +'175255' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 255 ; + } +#Total soil wetness +'180149' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 149 ; + } +#Surface net solar radiation +'180176' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation +'180177' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 177 ; + } +#Top net solar radiation +'180178' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 178 ; + } +#Top net thermal radiation +'180179' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 179 ; + } +#Snow depth +'190141' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 141 ; + } +#Field capacity +'190170' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 170 ; + } +#Wilting point +'190171' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 171 ; + } +#Roughness length +'190173' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 173 ; + } +#Total soil moisture +'190229' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 229 ; + } +#2 metre dewpoint temperature difference +'200168' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 168 ; + } +#downward shortwave radiant flux density +'201001' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 1 ; + } +#upward shortwave radiant flux density +'201002' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 2 ; + } +#downward longwave radiant flux density +'201003' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 3 ; + } +#upward longwave radiant flux density +'201004' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 4 ; + } +#downwd photosynthetic active radiant flux density +'201005' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 5 ; + } +#net shortwave flux +'201006' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 6 ; + } +#net longwave flux +'201007' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 7 ; + } +#total net radiative flux density +'201008' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 8 ; + } +#downw shortw radiant flux density, cloudfree part +'201009' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 9 ; + } +#upw shortw radiant flux density, cloudy part +'201010' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 10 ; + } +#downw longw radiant flux density, cloudfree part +'201011' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 11 ; + } +#upw longw radiant flux density, cloudy part +'201012' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 12 ; + } +#shortwave radiative heating rate +'201013' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 13 ; + } +#longwave radiative heating rate +'201014' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 14 ; + } +#total radiative heating rate +'201015' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 15 ; + } +#soil heat flux, surface +'201016' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 16 ; + } +#soil heat flux, bottom of layer +'201017' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 17 ; + } +#fractional cloud cover +'201029' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 29 ; + } +#cloud cover, grid scale +'201030' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 30 ; + } +#specific cloud water content +'201031' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 31 ; + } +#cloud water content, grid scale, vert integrated +'201032' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 32 ; + } +#specific cloud ice content, grid scale +'201033' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 33 ; + } +#cloud ice content, grid scale, vert integrated +'201034' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 34 ; + } +#specific rainwater content, grid scale +'201035' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 35 ; + } +#specific snow content, grid scale +'201036' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 36 ; + } +#specific rainwater content, gs, vert. integrated +'201037' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 37 ; + } +#specific snow content, gs, vert. integrated +'201038' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 38 ; + } +#total column water +'201041' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 41 ; + } +#vert. integral of divergence of tot. water content +'201042' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 42 ; + } +#cloud covers CH_CM_CL (000...888) +'201050' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 50 ; + } +#cloud cover CH (0..8) +'201051' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 51 ; + } +#cloud cover CM (0..8) +'201052' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 52 ; + } +#cloud cover CL (0..8) +'201053' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 53 ; + } +#total cloud cover (0..8) +'201054' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 54 ; + } +#fog (0..8) +'201055' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 55 ; + } +#fog +'201056' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 56 ; + } +#cloud cover, convective cirrus +'201060' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 60 ; + } +#specific cloud water content, convective clouds +'201061' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 61 ; + } +#cloud water content, conv clouds, vert integrated +'201062' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 62 ; + } +#specific cloud ice content, convective clouds +'201063' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 63 ; + } +#cloud ice content, conv clouds, vert integrated +'201064' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 64 ; + } +#convective mass flux +'201065' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 65 ; + } +#Updraft velocity, convection +'201066' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 66 ; + } +#entrainment parameter, convection +'201067' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 67 ; + } +#cloud base, convective clouds (above msl) +'201068' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 68 ; + } +#cloud top, convective clouds (above msl) +'201069' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 69 ; + } +#convective layers (00...77) (BKE) +'201070' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 70 ; + } +#KO-index +'201071' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 71 ; + } +#convection base index +'201072' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 72 ; + } +#convection top index +'201073' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 73 ; + } +#convective temperature tendency +'201074' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 74 ; + } +#convective tendency of specific humidity +'201075' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 75 ; + } +#convective tendency of total heat +'201076' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 76 ; + } +#convective tendency of total water +'201077' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 77 ; + } +#convective momentum tendency (X-component) +'201078' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 78 ; + } +#convective momentum tendency (Y-component) +'201079' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 79 ; + } +#convective vorticity tendency +'201080' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 80 ; + } +#convective divergence tendency +'201081' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 81 ; + } +#top of dry convection (above msl) +'201082' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 82 ; + } +#dry convection top index +'201083' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 83 ; + } +#height of 0 degree Celsius isotherm above msl +'201084' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 84 ; + } +#height of snow-fall limit +'201085' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 85 ; + } +#spec. content of precip. particles +'201099' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 99 ; + } +#surface precipitation rate, rain, grid scale +'201100' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 100 ; + } +#surface precipitation rate, snow, grid scale +'201101' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 101 ; + } +#surface precipitation amount, rain, grid scale +'201102' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 102 ; + } +#surface precipitation rate, rain, convective +'201111' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 111 ; + } +#surface precipitation rate, snow, convective +'201112' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 112 ; + } +#surface precipitation amount, rain, convective +'201113' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 113 ; + } +#deviation of pressure from reference value +'201139' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 139 ; + } +#coefficient of horizontal diffusion +'201150' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 150 ; + } +#Maximum wind velocity +'201187' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 187 ; + } +#water content of interception store +'201200' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 200 ; + } +#snow temperature +'201203' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 203 ; + } +#ice surface temperature +'201215' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 215 ; + } +#convective available potential energy +'201241' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 241 ; + } +#Indicates a missing value +'201255' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 255 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'210001' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'210002' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'210003' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'210004' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + scaleFactorOfFirstSize = 8 ; + scaledValueOfFirstSize = 3 ; + scaleFactorOfSecondSize = 8 ; + scaledValueOfSecondSize = 55 ; + productDefinitionTemplateNumber = 44 ; + aerosolType = 62001 ; + typeOfSizeInterval = 2 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'210004' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'210005' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'210006' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'210007' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'210008' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'210009' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'210010' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'210011' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 11 ; + } +#Aerosol type 12 mixing ratio +'210012' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 12 ; + } +#Aerosol type 1 source/gain accumulated +'210016' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 16 ; + } +#Aerosol type 2 source/gain accumulated +'210017' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 17 ; + } +#Aerosol type 3 source/gain accumulated +'210018' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 18 ; + } +#Aerosol type 4 source/gain accumulated +'210019' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 19 ; + } +#Aerosol type 5 source/gain accumulated +'210020' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 20 ; + } +#Aerosol type 6 source/gain accumulated +'210021' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 21 ; + } +#Aerosol type 7 source/gain accumulated +'210022' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 22 ; + } +#Aerosol type 8 source/gain accumulated +'210023' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 23 ; + } +#Aerosol type 9 source/gain accumulated +'210024' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 24 ; + } +#Aerosol type 10 source/gain accumulated +'210025' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 25 ; + } +#Aerosol type 11 source/gain accumulated +'210026' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 26 ; + } +#Aerosol type 12 source/gain accumulated +'210027' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'210031' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'210032' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'210033' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'210034' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'210035' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'210036' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'210037' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'210038' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'210039' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'210040' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'210041' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'210042' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 42 ; + } +#Aerosol precursor mixing ratio +'210046' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 46 ; + } +#Aerosol small mode mixing ratio +'210047' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 47 ; + } +#Aerosol large mode mixing ratio +'210048' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 48 ; + } +#Aerosol precursor optical depth +'210049' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 49 ; + } +#Aerosol small mode optical depth +'210050' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 50 ; + } +#Aerosol large mode optical depth +'210051' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 51 ; + } +#Dust emission potential +'210052' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 52 ; + } +#Lifting threshold speed +'210053' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 53 ; + } +#Soil clay content +'210054' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 54 ; + } +#Carbon Dioxide +'210061' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + productDefinitionTemplateNumber = 40 ; + constituentType = 3 ; + } +#Carbon Dioxide +'210061' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 61 ; + } +#Methane +'210062' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 62 ; + } +#Nitrous oxide +'210063' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 63 ; + } +#Total column Carbon Dioxide +'210064' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 64 ; + } +#Total column Methane +'210065' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 65 ; + } +#Total column Nitrous oxide +'210066' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 66 ; + } +#Ocean flux of Carbon Dioxide +'210067' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'210068' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'210069' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 69 ; + } +#Methane Surface Fluxes +'210070' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'210071' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 71 ; + } +#Wildfire flux of Carbon Dioxide +'210080' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 80 ; + } +#Wildfire flux of Carbon Monoxide +'210081' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 81 ; + } +#Wildfire flux of Methane +'210082' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'210083' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 83 ; + } +#Wildfire flux of Hydrogen +'210084' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'210085' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 85 ; + } +#Wildfire flux of Nitrous Oxide +'210086' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'210087' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 87 ; + } +#Wildfire flux of Total Particulate Matter +'210088' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'210089' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 89 ; + } +#Wildfire flux of Organic Carbon +'210090' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 90 ; + } +#Wildfire flux of Black Carbon +'210091' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 91 ; + } +#Wildfire overall flux of burnt Carbon +'210092' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 92 ; + } +#Wildfire fraction of C4 plants +'210093' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 93 ; + } +#Wildfire vegetation map index +'210094' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 94 ; + } +#Wildfire Combustion Completeness +'210095' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'210096' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 96 ; + } +#Wildfire fraction of area observed +'210097' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 97 ; + } +#Wildfire observed area +'210098' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 98 ; + } +#Wildfire radiative power +'210099' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 99 ; + } +#Wildfire combustion rate +'210100' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 100 ; + } +#Nitrogen dioxide +'210121' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 121 ; + } +#Sulphur dioxide +'210122' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 122 ; + } +#Carbon monoxide +'210123' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 123 ; + } +#Formaldehyde +'210124' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 124 ; + } +#Total column Nitrogen dioxide +'210125' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 125 ; + } +#Total column Sulphur dioxide +'210126' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 126 ; + } +#Total column Carbon monoxide +'210127' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 127 ; + } +#Total column Formaldehyde +'210128' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 128 ; + } +#Nitrogen Oxides +'210129' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 129 ; + } +#Total Column Nitrogen Oxides +'210130' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'210131' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 131 ; + } +#Total column GRG tracer 1 +'210132' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'210133' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 133 ; + } +#Total column GRG tracer 2 +'210134' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'210135' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 135 ; + } +#Total column GRG tracer 3 +'210136' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'210137' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 137 ; + } +#Total column GRG tracer 4 +'210138' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'210139' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 139 ; + } +#Total column GRG tracer 5 +'210140' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'210141' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 141 ; + } +#Total column GRG tracer 6 +'210142' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'210143' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 143 ; + } +#Total column GRG tracer 7 +'210144' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'210145' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 145 ; + } +#Total column GRG tracer 8 +'210146' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'210147' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 147 ; + } +#Total column GRG tracer 9 +'210148' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'210149' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 149 ; + } +#Total column GRG tracer 10 +'210150' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 150 ; + } +#Surface flux Nitrogen oxides +'210151' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 151 ; + } +#Surface flux Nitrogen dioxide +'210152' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 152 ; + } +#Surface flux Sulphur dioxide +'210153' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 153 ; + } +#Surface flux Carbon monoxide +'210154' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 154 ; + } +#Surface flux Formaldehyde +'210155' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 155 ; + } +#Surface flux GEMS Ozone +'210156' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 156 ; + } +#Surface flux reactive tracer 1 +'210157' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 157 ; + } +#Surface flux reactive tracer 2 +'210158' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 158 ; + } +#Surface flux reactive tracer 3 +'210159' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 159 ; + } +#Surface flux reactive tracer 4 +'210160' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 160 ; + } +#Surface flux reactive tracer 5 +'210161' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 161 ; + } +#Surface flux reactive tracer 6 +'210162' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 162 ; + } +#Surface flux reactive tracer 7 +'210163' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 163 ; + } +#Surface flux reactive tracer 8 +'210164' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 164 ; + } +#Surface flux reactive tracer 9 +'210165' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 165 ; + } +#Surface flux reactive tracer 10 +'210166' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 166 ; + } +#Radon +'210181' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 181 ; + } +#Sulphur Hexafluoride +'210182' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 182 ; + } +#Total column Radon +'210183' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 183 ; + } +#Total column Sulphur Hexafluoride +'210184' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'210185' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 185 ; + } +#GEMS Ozone +'210203' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 203 ; + } +#GEMS Total column ozone +'210206' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'210207' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'210208' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'210209' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'210210' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'210211' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'210212' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'210213' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'210214' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'210215' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'210216' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 216 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'211001' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'211002' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'211003' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'211004' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'211005' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'211006' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'211007' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'211008' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'211009' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'211010' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'211011' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 11 ; + } +#Aerosol type 12 mixing ratio +'211012' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 12 ; + } +#Aerosol type 1 source/gain accumulated +'211016' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 16 ; + } +#Aerosol type 2 source/gain accumulated +'211017' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 17 ; + } +#Aerosol type 3 source/gain accumulated +'211018' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 18 ; + } +#Aerosol type 4 source/gain accumulated +'211019' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 19 ; + } +#Aerosol type 5 source/gain accumulated +'211020' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 20 ; + } +#Aerosol type 6 source/gain accumulated +'211021' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 21 ; + } +#Aerosol type 7 source/gain accumulated +'211022' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 22 ; + } +#Aerosol type 8 source/gain accumulated +'211023' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 23 ; + } +#Aerosol type 9 source/gain accumulated +'211024' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 24 ; + } +#Aerosol type 10 source/gain accumulated +'211025' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 25 ; + } +#Aerosol type 11 source/gain accumulated +'211026' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 26 ; + } +#Aerosol type 12 source/gain accumulated +'211027' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'211031' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'211032' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'211033' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'211034' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'211035' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'211036' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'211037' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'211038' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'211039' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'211040' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'211041' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'211042' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 42 ; + } +#Aerosol precursor mixing ratio +'211046' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 46 ; + } +#Aerosol small mode mixing ratio +'211047' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 47 ; + } +#Aerosol large mode mixing ratio +'211048' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 48 ; + } +#Aerosol precursor optical depth +'211049' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 49 ; + } +#Aerosol small mode optical depth +'211050' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 50 ; + } +#Aerosol large mode optical depth +'211051' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 51 ; + } +#Dust emission potential +'211052' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 52 ; + } +#Lifting threshold speed +'211053' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 53 ; + } +#Soil clay content +'211054' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 54 ; + } +#Carbon Dioxide +'211061' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 61 ; + } +#Methane +'211062' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 62 ; + } +#Nitrous oxide +'211063' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 63 ; + } +#Total column Carbon Dioxide +'211064' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 64 ; + } +#Total column Methane +'211065' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 65 ; + } +#Total column Nitrous oxide +'211066' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 66 ; + } +#Ocean flux of Carbon Dioxide +'211067' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'211068' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'211069' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 69 ; + } +#Methane Surface Fluxes +'211070' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'211071' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 71 ; + } +#Wildfire flux of Carbon Dioxide +'211080' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 80 ; + } +#Wildfire flux of Carbon Monoxide +'211081' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 81 ; + } +#Wildfire flux of Methane +'211082' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'211083' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 83 ; + } +#Wildfire flux of Hydrogen +'211084' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'211085' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 85 ; + } +#Wildfire flux of Nitrous Oxide +'211086' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'211087' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 87 ; + } +#Wildfire flux of Total Particulate Matter +'211088' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'211089' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 89 ; + } +#Wildfire flux of Organic Carbon +'211090' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 90 ; + } +#Wildfire flux of Black Carbon +'211091' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 91 ; + } +#Wildfire overall flux of burnt Carbon +'211092' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 92 ; + } +#Wildfire fraction of C4 plants +'211093' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 93 ; + } +#Wildfire vegetation map index +'211094' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 94 ; + } +#Wildfire Combustion Completeness +'211095' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'211096' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 96 ; + } +#Wildfire fraction of area observed +'211097' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 97 ; + } +#Wildfire observed area +'211098' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 98 ; + } +#Wildfire radiative power +'211099' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 99 ; + } +#Wildfire combustion rate +'211100' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 100 ; + } +#Nitrogen dioxide +'211121' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 121 ; + } +#Sulphur dioxide +'211122' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 122 ; + } +#Carbon monoxide +'211123' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 123 ; + } +#Formaldehyde +'211124' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 124 ; + } +#Total column Nitrogen dioxide +'211125' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 125 ; + } +#Total column Sulphur dioxide +'211126' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 126 ; + } +#Total column Carbon monoxide +'211127' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 127 ; + } +#Total column Formaldehyde +'211128' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 128 ; + } +#Nitrogen Oxides +'211129' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 129 ; + } +#Total Column Nitrogen Oxides +'211130' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'211131' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 131 ; + } +#Total column GRG tracer 1 +'211132' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'211133' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 133 ; + } +#Total column GRG tracer 2 +'211134' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'211135' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 135 ; + } +#Total column GRG tracer 3 +'211136' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'211137' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 137 ; + } +#Total column GRG tracer 4 +'211138' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'211139' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 139 ; + } +#Total column GRG tracer 5 +'211140' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'211141' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 141 ; + } +#Total column GRG tracer 6 +'211142' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'211143' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 143 ; + } +#Total column GRG tracer 7 +'211144' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'211145' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 145 ; + } +#Total column GRG tracer 8 +'211146' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'211147' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 147 ; + } +#Total column GRG tracer 9 +'211148' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'211149' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 149 ; + } +#Total column GRG tracer 10 +'211150' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 150 ; + } +#Surface flux Nitrogen oxides +'211151' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 151 ; + } +#Surface flux Nitrogen dioxide +'211152' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 152 ; + } +#Surface flux Sulphur dioxide +'211153' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 153 ; + } +#Surface flux Carbon monoxide +'211154' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 154 ; + } +#Surface flux Formaldehyde +'211155' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 155 ; + } +#Surface flux GEMS Ozone +'211156' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 156 ; + } +#Surface flux reactive tracer 1 +'211157' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 157 ; + } +#Surface flux reactive tracer 2 +'211158' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 158 ; + } +#Surface flux reactive tracer 3 +'211159' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 159 ; + } +#Surface flux reactive tracer 4 +'211160' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 160 ; + } +#Surface flux reactive tracer 5 +'211161' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 161 ; + } +#Surface flux reactive tracer 6 +'211162' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 162 ; + } +#Surface flux reactive tracer 7 +'211163' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 163 ; + } +#Surface flux reactive tracer 8 +'211164' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 164 ; + } +#Surface flux reactive tracer 9 +'211165' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 165 ; + } +#Surface flux reactive tracer 10 +'211166' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 166 ; + } +#Radon +'211181' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 181 ; + } +#Sulphur Hexafluoride +'211182' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 182 ; + } +#Total column Radon +'211183' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 183 ; + } +#Total column Sulphur Hexafluoride +'211184' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'211185' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 185 ; + } +#GEMS Ozone +'211203' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 203 ; + } +#GEMS Total column ozone +'211206' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'211207' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'211208' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'211209' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'211210' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'211211' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'211212' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'211213' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'211214' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'211215' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'211216' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 216 ; + } +#Total precipitation observation count +'220228' = { + discipline = 192 ; + parameterCategory = 220 ; + parameterNumber = 228 ; + } +#Friction velocity +'228003' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; + } +#Mean temperature at 2 metres +'228004' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 4 ; + } +#Mean of 10 metre wind speed +'228005' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; + } +#Mean total cloud cover +'228006' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; + } +#Lake depth +'228007' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 7 ; + } +#Lake mix-layer temperature +'228008' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 8 ; + } +#Lake mix-layer depth +'228009' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 9 ; + } +#Lake bottom temperature +'228010' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 10 ; + } +#Lake total layer temperature +'228011' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 11 ; + } +#Lake shape factor +'228012' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 12 ; + } +#Lake ice temperature +'228013' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 13 ; + } +#Lake ice depth +'228014' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'228015' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'228016' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 16 ; + } +#Duct base height +'228017' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 17 ; + } +#Trapping layer base height +'228018' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 18 ; + } +#Trapping layer top height +'228019' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 19 ; + } +#Neutral wind at 10 m u-component +'228131' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 131 ; + } +#Neutral wind at 10 m v-component +'228132' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 132 ; + } +#Snow evaporation (variable resolution) +'230044' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 44 ; + } +#Snowmelt (variable resolution) +'230045' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 45 ; + } +#Solar duration (variable resolution) +'230046' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 46 ; + } +#Downward UV radiation at the surface (variable resolution) +'230057' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface (variable resolution) +'230058' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 58 ; + } +#Stratiform precipitation (Large-scale precipitation) (variable resolution) +'230142' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 142 ; + } +#Convective precipitation (variable resolution) +'230143' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) (variable resolution) +'230144' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation (variable resolution) +'230145' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux (variable resolution) +'230146' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 146 ; + } +#Surface latent heat flux (variable resolution) +'230147' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 147 ; + } +#Surface solar radiation downwards (variable resolution) +'230169' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards (variable resolution) +'230175' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 175 ; + } +#Surface net solar radiation (variable resolution) +'230176' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation (variable resolution) +'230177' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 177 ; + } +#Top net solar radiation (variable resolution) +'230178' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 178 ; + } +#Top net thermal radiation (variable resolution) +'230179' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 179 ; + } +#East-West surface stress (variable resolution) +'230180' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 180 ; + } +#North-South surface stress (variable resolution) +'230181' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 181 ; + } +#Evaporation (variable resolution) +'230182' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 182 ; + } +#Sunshine duration (variable resolution) +'230189' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress (variable resolution) +'230195' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress (variable resolution) +'230196' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation (variable resolution) +'230197' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 197 ; + } +#Skin reservoir content (variable resolution) +'230198' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 198 ; + } +#Runoff (variable resolution) +'230205' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky (variable resolution) +'230208' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky (variable resolution) +'230209' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky (variable resolution) +'230210' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky (variable resolution) +'230211' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation (variable resolution) +'230212' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 212 ; + } +#Surface temperature significance +'234139' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 139 ; + } +#Mean sea level pressure significance +'234151' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 151 ; + } +#2 metre temperature significance +'234167' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 167 ; + } +#Total precipitation significance +'234228' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 228 ; + } +#U-component stokes drift +'140215' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; + } +#V-component stokes drift +'140216' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; + } +#Wildfire radiative power maximum +'210101' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'210102' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'210103' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'210104' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'210105' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'210106' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'210107' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'210108' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'210109' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'210110' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'210111' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'210112' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'210113' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'210114' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'210115' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'210116' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'210117' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 117 ; + } +#Wildfire radiative power maximum +'211101' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'211102' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'211103' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'211104' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'211105' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'211106' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'211107' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'211108' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'211109' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'211110' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'211111' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'211112' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'211113' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'211114' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'211115' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'211116' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'211117' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 117 ; + } +#V-tendency from non-orographic wave drag +'228134' = { + localTablesVersion = 228 ; + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 134 ; + } +#U-tendency from non-orographic wave drag +'228136' = { + localTablesVersion = 228 ; + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 136 ; + } +#100 metre U wind component +'228246' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 246 ; + } +#100 metre V wind component +'228247' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 247 ; + } +#ASCAT first soil moisture CDF matching parameter +'228253' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 253 ; + } +#ASCAT second soil moisture CDF matching parameter +'228254' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 254 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def new file mode 100644 index 000000000..7eb462883 --- /dev/null +++ b/definitions/grib2/localConcepts/ecmf/shortName.def @@ -0,0 +1,17149 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total precipitation of at least 1 mm +'tpg1' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 60 ; + } +#Total precipitation of at least 5 mm +'tpg5' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 61 ; + } +#Total precipitation of at least 40 mm +'tpg40' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 82 ; + } +#Total precipitation of at least 60 mm +'tpg60' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 83 ; + } +#Total precipitation of at least 80 mm +'tpg80' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 84 ; + } +#Total precipitation of at least 100 mm +'tpg100' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 85 ; + } +#Total precipitation of at least 150 mm +'tpg150' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 86 ; + } +#Total precipitation of at least 200 mm +'tpg200' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 87 ; + } +#Total precipitation of at least 300 mm +'tpg300' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 88 ; + } +#Equivalent potential temperature +'eqpt' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature +'sept' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 5 ; + } +#Soil sand fraction +'ssfr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 6 ; + } +#Soil clay fraction +'scfr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 7 ; + } +#Surface runoff +'sro' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; + } +#Sub-surface runoff +'ssro' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 9 ; + } +#U component of divergent wind +'udvw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 11 ; + } +#V component of divergent wind +'vdvw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 12 ; + } +#U component of rotational wind +'urtw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 13 ; + } +#V component of rotational wind +'vrtw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 14 ; + } +#UV visible albedo for direct radiation +'aluvp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 15 ; + } +#UV visible albedo for diffuse radiation +'aluvd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 16 ; + } +#Near IR albedo for direct radiation +'alnip' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 17 ; + } +#Near IR albedo for diffuse radiation +'alnid' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 18 ; + } +#Clear sky surface UV +'uvcs' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 19 ; + } +#Clear sky surface photosynthetically active radiation +'parcs' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 20 ; + } +#Unbalanced component of temperature +'uctp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'ucln' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence +'ucdv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 25 ; + } +#Lake cover +'cl' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } +#Low vegetation cover +'cvl' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 27 ; + } +#High vegetation cover +'cvh' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 28 ; + } +#Type of low vegetation +'tvl' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 29 ; + } +#Type of high vegetation +'tvh' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 30 ; + } +#Sea-ice cover +'ci' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 31 ; + } +#Snow albedo +'asn' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; + } +#Snow density +'rsn' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 33 ; + } +#Sea surface temperature +'sst' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 34 ; + } +#Ice temperature layer 1 +'istl1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 35 ; + } +#Ice temperature layer 2 +'istl2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 36 ; + } +#Ice temperature layer 3 +'istl3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 37 ; + } +#Ice temperature layer 4 +'istl4' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 +'swvl1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'swvl2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'swvl3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'swvl4' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 42 ; + } +#Soil type +'slt' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Snow evaporation +'es' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; + } +#Snowmelt +'smlt' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; + } +#Solar duration +'sdur' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 46 ; + } +#Direct solar radiation +'dsrp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress +'magss' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 48 ; + } +#10 metre wind gust +'10fg' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction +'lspf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'mx2t24' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + lengthOfTimeRange = 24 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'mn2t24' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + lengthOfTimeRange = 24 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#Montgomery potential +'mont' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; + } +#Mean temperature at 2 metres in the last 24 hours +'mean2t24' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours +'mn2d24' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface +'uvb' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface +'par' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; + } +#Observation count +'obct' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'stsktd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'ftsktd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'sktd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'lai_lv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'lai_hv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'msr_lv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'msr_hv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'bc_lv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'bc_hv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 71 ; + } +#Instantaneous surface solar radiation downwards +'issrd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 72 ; + } +#Instantaneous surface thermal radiation downwards +'istrd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 73 ; + } +#Standard deviation of filtered subgrid orography +'sdfor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 74 ; + } +#Specific rain water content +'crwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + } +#Specific snow water content +'cswc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + } +#Eta-coordinate vertical velocity +'etadot' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + } +#Total column liquid water +'tclw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 78 ; + } +#Total column ice water +'tciw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 79 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 80 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 81 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 82 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 83 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 84 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 85 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 86 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 87 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 88 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 89 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 90 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 91 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 92 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 93 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 94 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 95 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 96 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 97 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 98 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 99 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 100 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 101 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 102 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 103 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 104 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 105 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 106 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 107 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 108 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 109 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 110 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 111 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 112 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 113 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 114 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 115 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 116 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 117 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 118 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 119 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'mx2t6' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + lengthOfTimeRange = 6 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'mn2t6' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + lengthOfTimeRange = 6 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#10 metre wind gust in the last 6 hours +'10fg6' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 123 ; + } +#Surface emissivity +'emis' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 124 ; + } +#Vertically integrated total energy +'vite' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 126 ; + } +#Atmospheric tide +'at' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 127 ; + } +#Budget values +'bv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 128 ; + } +#Geopotential +'z' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Total column water vapour +'tcwv' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 137 ; + } +#Vorticity (relative) +'vo' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + } +#Soil temperature level 1 +'stl1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 +'swl1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 140 ; + } +#Snow depth +'sd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + unitsFactor = 1000 ; + } +#Large-scale precipitation +'lsp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; + } +#Convective precipitation +'cp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 10 ; + unitsFactor = 1000 ; + } +#Snowfall +'sf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation +'bld' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + } +#Charnock +'chnk' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 148 ; + } +#Surface net radiation +'snr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 149 ; + } +#Top net radiation +'tnr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 150 ; + } +#Logarithm of surface pressure +'lnsp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + } +#Short-wave heating rate +'swhr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 153 ; + } +#Long-wave heating rate +'lwhr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 154 ; + } +#Divergence +'d' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + } +#Relative humidity +'r' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Tendency of surface pressure +'tsp' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 158 ; + } +#Boundary layer height +'blh' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; + } +#Standard deviation of orography +'sdor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography +'isor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography +'anor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography +'slor' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; + } +#Total cloud cover +'tcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; + } +#10 metre U wind component +'10u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#10 metre V wind component +'10v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2 metre temperature +'2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Surface solar radiation downwards +'ssrd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 +'stl2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 +'swl2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 171 ; + } +#Surface roughness +'sr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Albedo +'al' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards +'strd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 175 ; + } +#Top net solar radiation +'tsr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 178 ; + } +#East-West surface stress +'ewss' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 180 ; + } +#North-South surface stress +'nsss' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 181 ; + } +#Evaporation +'e' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 +'stl3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 +'swl3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 184 ; + } +#Convective cloud cover +'ccc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 185 ; + } +#Low cloud cover +'lcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; + } +#Medium cloud cover +'mcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; + } +#High cloud cover +'hcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; + } +#East-West component of sub-gridscale orographic variance +'ewov' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance +'nsov' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'nwov' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'neov' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 193 ; + } +#Longitudinal component of gravity wave stress +'lgws' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress +'mgws' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'gwd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; + } +#Skin reservoir content +'src' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 198 ; + } +#Vegetation fraction +'veg' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography +'vso' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing +'mx2t' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing +'mn2t' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio +'o3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + } +#Precipitation analysis weights +'paw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 204 ; + } +#Runoff +'ro' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 205 ; + } +#Total column ozone +'tco3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; + } +#Top net solar radiation, clear sky +'tsrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'ttrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'ssrc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'strc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation +'tisr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; + } +#Vertically integrated moisture divergence +'vimd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 213 ; + } +#Diabatic heating by radiation +'dhr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion +'dhvd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection +'dhcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation +'dhlc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind +'vdzw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind +'vdmw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency +'ewgd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency +'nsgd' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind +'ctzw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind +'ctmw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity +'vdh' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection +'htcc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation +'htlc' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 226 ; + } +#Tendency due to removal of negative humidity +'crnh' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 227 ; + } +#Total precipitation +'tp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + unitsFactor = 1000 ; + } +#Instantaneous X surface stress +'iews' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress +'inss' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; + } +#Instantaneous surface sensible heat flux +'ishf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux +'ie' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; + } +#Apparent surface humidity +'asq' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat +'lsrh' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 234 ; + } +#Soil temperature level 4 +'stl4' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 +'swl4' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 237 ; + } +#Temperature of snow layer +'tsn' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 238 ; + } +#Convective snowfall +'csf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; + } +#Large-scale snowfall +'lsf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency +'acf' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency +'alw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 242 ; + } +#Forecast albedo +'fal' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 243 ; + } +#Forecast surface roughness +'fsr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat +'flsr' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content +'clwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + } +#Specific cloud ice water content +'ciwc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + } +#Cloud cover +'cc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + } +#Accumulated ice water tendency +'aiw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 249 ; + } +#Ice age +'ice' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature +'atte' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity +'athe' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind +'atze' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind +'atmw' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 255 ; + } +#Stream function difference +'strfdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 1 ; + } +#Velocity potential difference +'vpotdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 2 ; + } +#Potential temperature difference +'ptdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature difference +'eqptdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature difference +'septdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 5 ; + } +#U component of divergent wind difference +'udvwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 11 ; + } +#V component of divergent wind difference +'vdvwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 12 ; + } +#U component of rotational wind difference +'urtwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 13 ; + } +#V component of rotational wind difference +'vrtwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature difference +'uctpdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure difference +'uclndiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence difference +'ucdvdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 25 ; + } +#Lake cover difference +'cldiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 26 ; + } +#Low vegetation cover difference +'cvldiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 27 ; + } +#High vegetation cover difference +'cvhdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 28 ; + } +#Type of low vegetation difference +'tvldiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 29 ; + } +#Type of high vegetation difference +'tvhdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 30 ; + } +#Sea-ice cover difference +'sicdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 31 ; + } +#Snow albedo difference +'asndiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 32 ; + } +#Snow density difference +'rsndiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 33 ; + } +#Sea surface temperature difference +'sstdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 34 ; + } +#Ice surface temperature layer 1 difference +'istl1diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 35 ; + } +#Ice surface temperature layer 2 difference +'istl2diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 36 ; + } +#Ice surface temperature layer 3 difference +'istl3diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 37 ; + } +#Ice surface temperature layer 4 difference +'istl4diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 difference +'swvl1diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 difference +'swvl2diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 difference +'swvl3diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 difference +'swvl4diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 42 ; + } +#Soil type difference +'sltdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 43 ; + } +#Snow evaporation difference +'esdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 44 ; + } +#Snowmelt difference +'smltdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 45 ; + } +#Solar duration difference +'sdurdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 46 ; + } +#Direct solar radiation difference +'dsrpdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress difference +'magssdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 48 ; + } +#10 metre wind gust difference +'10fgdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction difference +'lspfdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature difference +'mx2t24diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature difference +'mn2t24diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 52 ; + } +#Montgomery potential difference +'montdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 53 ; + } +#Pressure difference +'presdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours difference +'mean2t24diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours difference +'mn2d24diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface difference +'uvbdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface difference +'pardiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 58 ; + } +#Convective available potential energy difference +'capediff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 59 ; + } +#Potential vorticity difference +'pvdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 60 ; + } +#Total precipitation from observations difference +'tpodiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 61 ; + } +#Observation count difference +'obctdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 71 ; + } +#Total column liquid water +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 78 ; + } +#Total column ice water +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 79 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 80 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 81 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 82 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 83 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 84 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 85 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 86 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 87 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 88 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 89 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 90 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 91 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 92 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 93 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 94 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 95 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 96 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 97 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 98 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 99 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 100 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 101 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 102 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 103 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 104 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 105 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 106 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 107 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 108 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 109 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 110 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 111 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 112 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 113 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 114 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 115 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 116 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 117 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 118 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 119 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres difference +'mx2t6diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres difference +'mn2t6diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 122 ; + } +#10 metre wind gust in the last 6 hours difference +'10fg6diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 123 ; + } +#Vertically integrated total energy +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 126 ; + } +#Atmospheric tide difference +'atdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 127 ; + } +#Budget values difference +'bvdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 128 ; + } +#Geopotential difference +'zdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 129 ; + } +#Temperature difference +'tdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 130 ; + } +#U component of wind difference +'udiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 131 ; + } +#V component of wind difference +'vdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 132 ; + } +#Specific humidity difference +'qdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 133 ; + } +#Surface pressure difference +'spdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 134 ; + } +#Vertical velocity (pressure) difference +'wdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 135 ; + } +#Total column water difference +'tcwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 136 ; + } +#Total column water vapour difference +'tcwvdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 137 ; + } +#Vorticity (relative) difference +'vodiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 138 ; + } +#Soil temperature level 1 difference +'stl1diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 difference +'swl1diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 140 ; + } +#Snow depth difference +'sddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) difference +'lspdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 142 ; + } +#Convective precipitation difference +'cpdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) difference +'sfdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation difference +'blddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux difference +'sshfdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 146 ; + } +#Surface latent heat flux difference +'slhfdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 147 ; + } +#Charnock difference +'chnkdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 148 ; + } +#Surface net radiation difference +'snrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 149 ; + } +#Top net radiation difference +'tnrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 150 ; + } +#Mean sea level pressure difference +'msldiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure difference +'lnspdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 152 ; + } +#Short-wave heating rate difference +'swhrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 153 ; + } +#Long-wave heating rate difference +'lwhrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 154 ; + } +#Divergence difference +'ddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 155 ; + } +#Height difference +'ghdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 156 ; + } +#Relative humidity difference +'rdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure difference +'tspdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 158 ; + } +#Boundary layer height difference +'blhdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 159 ; + } +#Standard deviation of orography difference +'sdordiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography difference +'isordiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography difference +'anordiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography difference +'slordiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 163 ; + } +#Total cloud cover difference +'tccdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 164 ; + } +#10 metre U wind component difference +'10udiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 165 ; + } +#10 metre V wind component difference +'10vdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 166 ; + } +#2 metre temperature difference +'2tdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 167 ; + } +#Surface solar radiation downwards difference +'ssrddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 difference +'stl2diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 difference +'swl2diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 171 ; + } +#Land-sea mask difference +'lsmdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 172 ; + } +#Surface roughness difference +'srdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 173 ; + } +#Albedo difference +'aldiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards difference +'strddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 175 ; + } +#Surface net solar radiation difference +'ssrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation difference +'strdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 177 ; + } +#Top net solar radiation difference +'tsrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 178 ; + } +#Top net thermal radiation difference +'ttrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 179 ; + } +#East-West surface stress difference +'ewssdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 180 ; + } +#North-South surface stress difference +'nsssdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 181 ; + } +#Evaporation difference +'ediff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 difference +'stl3diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 difference +'swl3diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 184 ; + } +#Convective cloud cover difference +'cccdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 185 ; + } +#Low cloud cover difference +'lccdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 186 ; + } +#Medium cloud cover difference +'mccdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 187 ; + } +#High cloud cover difference +'hccdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 188 ; + } +#Sunshine duration difference +'sunddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance difference +'ewovdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance difference +'nsovdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance difference +'nwovdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance difference +'neovdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 193 ; + } +#Brightness temperature difference +'btmpdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress difference +'lgwsdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress difference +'mgwsdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation difference +'gwddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 197 ; + } +#Skin reservoir content difference +'srcdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 198 ; + } +#Vegetation fraction difference +'vegdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography difference +'vsodiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing difference +'mx2tdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing difference +'mn2tdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio difference +'o3diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights difference +'pawdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 204 ; + } +#Runoff difference +'rodiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 205 ; + } +#Total column ozone difference +'tco3diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 206 ; + } +#10 metre wind speed difference +'10sidiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 207 ; + } +#Top net solar radiation, clear sky difference +'tsrcdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky difference +'ttrcdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky difference +'ssrcdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky difference +'strcdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation difference +'tisrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation difference +'dhrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion difference +'dhvddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection difference +'dhccdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation difference +'dhlcdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind difference +'vdzwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind difference +'vdmwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency difference +'ewgddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency difference +'nsgddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind difference +'ctzwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind difference +'ctmwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity difference +'vdhdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection difference +'htccdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation difference +'htlcdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity difference +'crnhdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 227 ; + } +#Total precipitation difference +'tpdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress difference +'iewsdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress difference +'inssdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux difference +'ishfdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux difference +'iediff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 232 ; + } +#Apparent surface humidity difference +'asqdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat difference +'lsrhdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 234 ; + } +#Skin temperature difference +'sktdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 difference +'stl4diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 difference +'swl4diff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 237 ; + } +#Temperature of snow layer difference +'tsndiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 238 ; + } +#Convective snowfall difference +'csfdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 239 ; + } +#Large scale snowfall difference +'lsfdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency difference +'acfdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency difference +'alwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 242 ; + } +#Forecast albedo difference +'faldiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 243 ; + } +#Forecast surface roughness difference +'fsrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat difference +'flsrdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content difference +'clwcdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 246 ; + } +#Specific cloud ice water content difference +'ciwcdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 247 ; + } +#Cloud cover difference +'ccdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency difference +'aiwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 249 ; + } +#Ice age difference +'icediff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature difference +'attediff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity difference +'athediff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind difference +'atzediff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind difference +'atmwdiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 255 ; + } +#Maximum of significant wave height index +'maxswhi' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 216 ; + } +#Reserved +'~' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 193 ; + } +#U-tendency from dynamics +'utendd' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 114 ; + } +#V-tendency from dynamics +'vtendd' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 115 ; + } +#T-tendency from dynamics +'ttendd' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 116 ; + } +#q-tendency from dynamics +'qtendd' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 117 ; + } +#T-tendency from radiation +'ttendr' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 118 ; + } +#U-tendency from turbulent diffusion + subgrid orography +'utendts' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 119 ; + } +#V-tendency from turbulent diffusion + subgrid orography +'vtendts' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 120 ; + } +#T-tendency from turbulent diffusion + subgrid orography +'ttendts' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 121 ; + } +#q-tendency from turbulent diffusion +'qtendt' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 122 ; + } +#U-tendency from subgrid orography +'utends' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 123 ; + } +#V-tendency from subgrid orography +'vtends' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 124 ; + } +#T-tendency from subgrid orography +'ttends' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 125 ; + } +#U-tendency from convection (deep+shallow) +'utendcds' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 126 ; + } +#V-tendency from convection (deep+shallow) +'vtendcds' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 127 ; + } +#T-tendency from convection (deep+shallow) +'ttendcds' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 128 ; + } +#q-tendency from convection (deep+shallow) +'qtendcds' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 129 ; + } +#Liquid Precipitation flux from convection +'lpc' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 130 ; + } +#Ice Precipitation flux from convection +'ipc' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 131 ; + } +#T-tendency from cloud scheme +'ttendcs' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 132 ; + } +#q-tendency from cloud scheme +'qtendcs' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 133 ; + } +#ql-tendency from cloud scheme +'qltendcs' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 134 ; + } +#qi-tendency from cloud scheme +'qitendcs' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 135 ; + } +#Liquid Precip flux from cloud scheme (stratiform) +'lpcs' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 136 ; + } +#Ice Precip flux from cloud scheme (stratiform) +'ipcs' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 137 ; + } +#U-tendency from shallow convection +'utendcs' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 138 ; + } +#V-tendency from shallow convection +'vtendcs' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 139 ; + } +#T-tendency from shallow convection +'ttendsc' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 140 ; + } +#q-tendency from shallow convection +'qtendsc' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 141 ; + } +#100 metre U wind component anomaly +'100ua' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 6 ; + } +#100 metre V wind component anomaly +'100va' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 7 ; + } +#Maximum temperature at 2 metres in the last 6 hours anomaly +'mx2t6a' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours anomaly +'mn2t6a' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 122 ; + } +#Aerosol type 13 mass mixing ratio +'aermr13' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 13 ; + } +#Aerosol type 14 mass mixing ratio +'aermr14' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 14 ; + } +#Aerosol type 15 mass mixing ratio +'aermr15' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 15 ; + } +#SO4 aerosol precursor mass mixing ratio +'aerpr03' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'aerwv01' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'aerwv02' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 30 ; + } +#DMS surface emission +'emdms' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'aerwv03' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'aerwv04' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 45 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 55 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 56 ; + } +#Mixing ration of organic carbon aerosol, nucleation mode +'ocnuc' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 57 ; + } +#Monoterpene precursor mixing ratio +'monot' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 58 ; + } +#Secondary organic precursor mixing ratio +'soapr' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 59 ; + } +#Particulate matter d < 1 um +'pm1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 72 ; + } +#Particulate matter d < 2.5 um +'pm2p5' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 73 ; + } +#Particulate matter d < 10 um +'pm10' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 74 ; + } +#Wildfire viewing angle of observation +'vafire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 79 ; + } +#Wildfire Flux of Ethane (C2H6) +'c2h6fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 118 ; + } +#Altitude of emitter +'ale' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 119 ; + } +#Altitude of plume top +'apt' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 120 ; + } +#UV visible albedo for direct radiation, isotropic component +'aluvpi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 186 ; + } +#UV visible albedo for direct radiation, volumetric component +'aluvpv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 187 ; + } +#UV visible albedo for direct radiation, geometric component +'aluvpg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 188 ; + } +#Near IR albedo for direct radiation, isotropic component +'alnipi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 189 ; + } +#Near IR albedo for direct radiation, volumetric component +'alnipv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 190 ; + } +#Near IR albedo for direct radiation, geometric component +'alnipg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component +'aluvdi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component +'aluvdv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component +'aluvdg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component +'alnidi' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component +'alnidv' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component +'alnidg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; + } +#Total aerosol optical depth at 340 nm +'aod340' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 217 ; + } +#Total aerosol optical depth at 355 nm +'aod355' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 218 ; + } +#Total aerosol optical depth at 380 nm +'aod380' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 219 ; + } +#Total aerosol optical depth at 400 nm +'aod400' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 220 ; + } +#Total aerosol optical depth at 440 nm +'aod440' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 221 ; + } +#Total aerosol optical depth at 500 nm +'aod500' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 222 ; + } +#Total aerosol optical depth at 532 nm +'aod532' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 223 ; + } +#Total aerosol optical depth at 645 nm +'aod645' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 224 ; + } +#Total aerosol optical depth at 800 nm +'aod800' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 225 ; + } +#Total aerosol optical depth at 858 nm +'aod858' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 226 ; + } +#Total aerosol optical depth at 1020 nm +'aod1020' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 227 ; + } +#Total aerosol optical depth at 1064 nm +'aod1064' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 228 ; + } +#Total aerosol optical depth at 1640 nm +'aod1640' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 229 ; + } +#Total aerosol optical depth at 2130 nm +'aod2130' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 230 ; + } +#Wildfire Flux of Toluene (C7H8) +'c7h8fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 231 ; + } +#Wildfire Flux of Benzene (C6H6) +'c6h6fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 232 ; + } +#Wildfire Flux of Xylene (C8H10) +'c8h10fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 233 ; + } +#Wildfire Flux of Butenes (C4H8) +'c4h8fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 234 ; + } +#Wildfire Flux of Pentenes (C5H10) +'c5h10fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 235 ; + } +#Wildfire Flux of Hexene (C6H12) +'c6h12fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 236 ; + } +#Wildfire Flux of Octene (C8H16) +'c8h16fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 237 ; + } +#Wildfire Flux of Butanes (C4H10) +'c4h10fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 238 ; + } +#Wildfire Flux of Pentanes (C5H12) +'c5h12fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 239 ; + } +#Wildfire Flux of Hexanes (C6H14) +'c6h14fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 240 ; + } +#Wildfire Flux of Heptane (C7H16) +'c7h16fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 241 ; + } +#Aerosol type 13 mass mixing ratio +'aermr13diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 13 ; + } +#Aerosol type 14 mass mixing ratio +'aermr14diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 14 ; + } +#SO4 aerosol precursor mass mixing ratio +'aerpr03diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'aerwv01diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'aerwv02diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 30 ; + } +#DMS surface emission +'emdmsdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'aerwv03diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'aerwv04diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 45 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 55 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 56 ; + } +#Wildfire Flux of Ethane (C2H6) +'c2h6firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 118 ; + } +#Altitude of emitter +'alediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 119 ; + } +#Altitude of plume top +'aptdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 120 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 1 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 2 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 3 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 4 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 5 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 6 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 7 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 8 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 9 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 10 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 11 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 12 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 13 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 14 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 15 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 16 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 17 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 18 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 19 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 20 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 21 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 22 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 23 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 24 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 25 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 26 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 27 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 28 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 29 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 30 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 31 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 32 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 33 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 34 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 35 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 36 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 37 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 38 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 39 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 40 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 41 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 42 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 43 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 44 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 45 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 46 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 47 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 48 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 49 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 50 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 51 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 52 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 53 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 54 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 55 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 56 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 57 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 58 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 59 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 60 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 61 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 62 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 63 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 64 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 65 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 66 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 67 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 68 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 69 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 70 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 71 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 72 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 73 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 74 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 75 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 76 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 77 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 78 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 79 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 80 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 81 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 82 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 83 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 84 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 85 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 86 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 87 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 88 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 89 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 90 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 91 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 92 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 93 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 94 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 95 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 96 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 97 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 98 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 99 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 100 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 101 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 102 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 103 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 104 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 105 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 106 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 107 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 108 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 109 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 110 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 111 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 112 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 113 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 114 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 115 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 116 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 117 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 118 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 119 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 120 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 121 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 122 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 123 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 124 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 125 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 126 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 127 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 128 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 129 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 130 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 131 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 132 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 133 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 134 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 135 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 136 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 137 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 138 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 139 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 140 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 141 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 142 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 143 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 144 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 145 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 146 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 147 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 148 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 149 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 150 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 151 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 152 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 153 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 154 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 155 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 156 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 157 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 158 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 159 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 160 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 161 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 162 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 163 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 164 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 165 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 166 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 167 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 168 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 169 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 170 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 171 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 172 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 173 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 174 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 175 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 176 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 177 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 178 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 179 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 180 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 181 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 182 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 183 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 184 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 185 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 186 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 187 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 188 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 189 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 190 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 191 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 192 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 193 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 194 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 195 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 196 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 197 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 198 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 199 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 200 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 201 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 202 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 203 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 204 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 205 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 206 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 207 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 208 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 209 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 210 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 211 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 212 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 213 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 214 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 215 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 216 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 217 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 218 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 219 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 220 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 221 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 222 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 223 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 224 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 225 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 226 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 227 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 228 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 229 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 230 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 231 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 232 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 233 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 234 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 235 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 236 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 237 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 238 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 239 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 240 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 241 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 242 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 243 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 244 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 245 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 246 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 247 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 248 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 249 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 250 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 251 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 252 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 253 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 254 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 255 ; + } +#Random pattern 1 for sppt +'sppt1' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 1 ; + } +#Random pattern 2 for sppt +'sppt2' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 2 ; + } +#Random pattern 3 for sppt +'sppt3' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 3 ; + } +#Random pattern 4 for sppt +'sppt4' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 4 ; + } +#Random pattern 5 for sppt +'sppt5' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 5 ; + } +# Cosine of solar zenith angle +'uvcossza' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 1 ; + } +# UV biologically effective dose +'uvbed' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 2 ; + } +# UV biologically effective dose clear-sky +'uvbedcs' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 3 ; + } +# Total surface UV spectral flux (280-285 nm) +'uvsflxt280285' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 4 ; + } +# Total surface UV spectral flux (285-290 nm) +'uvsflxt285290' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 5 ; + } +# Total surface UV spectral flux (290-295 nm) +'uvsflxt290295' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 6 ; + } +# Total surface UV spectral flux (295-300 nm) +'uvsflxt295300' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 7 ; + } +# Total surface UV spectral flux (300-305 nm) +'uvsflxt300305' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 8 ; + } +# Total surface UV spectral flux (305-310 nm) +'uvsflxt305310' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 9 ; + } +# Total surface UV spectral flux (310-315 nm) +'uvsflxt310315' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 10 ; + } +# Total surface UV spectral flux (315-320 nm) +'uvsflxt315320' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 11 ; + } +# Total surface UV spectral flux (320-325 nm) +'uvsflxt320325' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 12 ; + } +# Total surface UV spectral flux (325-330 nm) +'uvsflxt325330' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 13 ; + } +# Total surface UV spectral flux (330-335 nm) +'uvsflxt330335' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 14 ; + } +# Total surface UV spectral flux (335-340 nm) +'uvsflxt335340' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 15 ; + } +# Total surface UV spectral flux (340-345 nm) +'uvsflxt340345' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 16 ; + } +# Total surface UV spectral flux (345-350 nm) +'uvsflxt345350' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 17 ; + } +# Total surface UV spectral flux (350-355 nm) +'uvsflxt350355' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 18 ; + } +# Total surface UV spectral flux (355-360 nm) +'uvsflxt355360' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 19 ; + } +# Total surface UV spectral flux (360-365 nm) +'uvsflxt360365' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 20 ; + } +# Total surface UV spectral flux (365-370 nm) +'uvsflxt365370' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 21 ; + } +# Total surface UV spectral flux (370-375 nm) +'uvsflxt370375' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 22 ; + } +# Total surface UV spectral flux (375-380 nm) +'uvsflxt375380' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 23 ; + } +# Total surface UV spectral flux (380-385 nm) +'uvsflxt380385' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 24 ; + } +# Total surface UV spectral flux (385-390 nm) +'uvsflxt385390' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 25 ; + } +# Total surface UV spectral flux (390-395 nm) +'uvsflxt390395' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 26 ; + } +# Total surface UV spectral flux (395-400 nm) +'uvsflxt395400' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 27 ; + } +# Clear-sky surface UV spectral flux (280-285 nm) +'uvsflxcs280285' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 28 ; + } +# Clear-sky surface UV spectral flux (285-290 nm) +'uvsflxcs285290' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 29 ; + } +# Clear-sky surface UV spectral flux (290-295 nm) +'uvsflxcs290295' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 30 ; + } +# Clear-sky surface UV spectral flux (295-300 nm) +'uvsflxcs295300' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 31 ; + } +# Clear-sky surface UV spectral flux (300-305 nm) +'uvsflxcs300305' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 32 ; + } +# Clear-sky surface UV spectral flux (305-310 nm) +'uvsflxcs305310' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 33 ; + } +# Clear-sky surface UV spectral flux (310-315 nm) +'uvsflxcs310315' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 34 ; + } +# Clear-sky surface UV spectral flux (315-320 nm) +'uvsflxcs315320' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 35 ; + } +# Clear-sky surface UV spectral flux (320-325 nm) +'uvsflxcs320325' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 36 ; + } +# Clear-sky surface UV spectral flux (325-330 nm) +'uvsflxcs325330' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 37 ; + } +# Clear-sky surface UV spectral flux (330-335 nm) +'uvsflxcs330335' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 38 ; + } +# Clear-sky surface UV spectral flux (335-340 nm) +'uvsflxcs335340' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 39 ; + } +# Clear-sky surface UV spectral flux (340-345 nm) +'uvsflxcs340345' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 40 ; + } +# Clear-sky surface UV spectral flux (345-350 nm) +'uvsflxcs345350' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 41 ; + } +# Clear-sky surface UV spectral flux (350-355 nm) +'uvsflxcs350355' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 42 ; + } +# Clear-sky surface UV spectral flux (355-360 nm) +'uvsflxcs355360' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 43 ; + } +# Clear-sky surface UV spectral flux (360-365 nm) +'uvsflxcs360365' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 44 ; + } +# Clear-sky surface UV spectral flux (365-370 nm) +'uvsflxcs365370' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 45 ; + } +# Clear-sky surface UV spectral flux (370-375 nm) +'uvsflxcs370375' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 46 ; + } +# Clear-sky surface UV spectral flux (375-380 nm) +'uvsflxcs375380' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 47 ; + } +# Clear-sky surface UV spectral flux (380-385 nm) +'uvsflxcs380385' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 48 ; + } +# Clear-sky surface UV spectral flux (385-390 nm) +'uvsflxcs385390' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 49 ; + } +# Clear-sky surface UV spectral flux (390-395 nm) +'uvsflxcs390395' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 50 ; + } +# Clear-sky surface UV spectral flux (395-400 nm) +'uvsflxcs395400' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 51 ; + } +# Profile of optical thickness at 340 nm +'aot340' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 52 ; + } +# Source/gain of sea salt aerosol (0.03 - 0.5 um) +'aersrcsss' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 1 ; + } +# Source/gain of sea salt aerosol (0.5 - 5 um) +'aersrcssm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 2 ; + } +# Source/gain of sea salt aerosol (5 - 20 um) +'aersrcssl' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 3 ; + } +# Dry deposition of sea salt aerosol (0.03 - 0.5 um) +'aerddpsss' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 4 ; + } +# Dry deposition of sea salt aerosol (0.5 - 5 um) +'aerddpssm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 5 ; + } +# Dry deposition of sea salt aerosol (5 - 20 um) +'aerddpssl' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 6 ; + } +# Sedimentation of sea salt aerosol (0.03 - 0.5 um) +'aersdmsss' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 7 ; + } +# Sedimentation of sea salt aerosol (0.5 - 5 um) +'aersdmssm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 8 ; + } +# Sedimentation of sea salt aerosol (5 - 20 um) +'aersdmssl' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 9 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation +'aerwdlssss' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 10 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation +'aerwdlsssm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 11 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation +'aerwdlsssl' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 12 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation +'aerwdccsss' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 13 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation +'aerwdccssm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 14 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation +'aerwdccssl' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 15 ; + } +# Negative fixer of sea salt aerosol (0.03 - 0.5 um) +'aerngtsss' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 16 ; + } +# Negative fixer of sea salt aerosol (0.5 - 5 um) +'aerngtssm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 17 ; + } +# Negative fixer of sea salt aerosol (5 - 20 um) +'aerngtssl' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 18 ; + } +# Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um) +'aermsssss' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 19 ; + } +# Vertically integrated mass of sea salt aerosol (0.5 - 5 um) +'aermssssm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 20 ; + } +# Vertically integrated mass of sea salt aerosol (5 - 20 um) +'aermssssl' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 21 ; + } +# Sea salt aerosol (0.03 - 0.5 um) optical depth +'aerodsss' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 22 ; + } +# Sea salt aerosol (0.5 - 5 um) optical depth +'aerodssm' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 23 ; + } +# Sea salt aerosol (5 - 20 um) optical depth +'aerodssl' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 24 ; + } +# Source/gain of dust aerosol (0.03 - 0.55 um) +'aersrcdus' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 25 ; + } +# Source/gain of dust aerosol (0.55 - 9 um) +'aersrcdum' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 26 ; + } +# Source/gain of dust aerosol (9 - 20 um) +'aersrcdul' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 27 ; + } +# Dry deposition of dust aerosol (0.03 - 0.55 um) +'aerddpdus' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 28 ; + } +# Dry deposition of dust aerosol (0.55 - 9 um) +'aerddpdum' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 29 ; + } +# Dry deposition of dust aerosol (9 - 20 um) +'aerddpdul' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 30 ; + } +# Sedimentation of dust aerosol (0.03 - 0.55 um) +'aersdmdus' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 31 ; + } +# Sedimentation of dust aerosol (0.55 - 9 um) +'aersdmdum' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 32 ; + } +# Sedimentation of dust aerosol (9 - 20 um) +'aersdmdul' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 33 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation +'aerwdlsdus' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 34 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation +'aerwdlsdum' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 35 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation +'aerwdlsdul' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 36 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation +'aerwdccdus' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 37 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation +'aerwdccdum' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 38 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by convective precipitation +'aerwdccdul' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 39 ; + } +# Negative fixer of dust aerosol (0.03 - 0.55 um) +'aerngtdus' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 40 ; + } +# Negative fixer of dust aerosol (0.55 - 9 um) +'aerngtdum' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 41 ; + } +# Negative fixer of dust aerosol (9 - 20 um) +'aerngtdul' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 42 ; + } +# Vertically integrated mass of dust aerosol (0.03 - 0.55 um) +'aermssdus' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 43 ; + } +# Vertically integrated mass of dust aerosol (0.55 - 9 um) +'aermssdum' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 44 ; + } +# Vertically integrated mass of dust aerosol (9 - 20 um) +'aermssdul' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 45 ; + } +# Dust aerosol (0.03 - 0.55 um) optical depth +'aeroddus' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 46 ; + } +# Dust aerosol (0.55 - 9 um) optical depth +'aeroddum' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 47 ; + } +# Dust aerosol (9 - 20 um) optical depth +'aeroddul' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 48 ; + } +# Source/gain of hydrophobic organic matter aerosol +'aersrcomhphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 49 ; + } +# Source/gain of hydrophilic organic matter aerosol +'aersrcomhphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 50 ; + } +# Dry deposition of hydrophobic organic matter aerosol +'aerddpomhphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 51 ; + } +# Dry deposition of hydrophilic organic matter aerosol +'aerddpomhphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 52 ; + } +# Sedimentation of hydrophobic organic matter aerosol +'aersdmomhphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 53 ; + } +# Sedimentation of hydrophilic organic matter aerosol +'aersdmomhphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 54 ; + } +# Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation +'aerwdlsomhphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 55 ; + } +# Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation +'aerwdlsomhphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 56 ; + } +# Wet deposition of hydrophobic organic matter aerosol by convective precipitation +'aerwdccomhphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 57 ; + } +# Wet deposition of hydrophilic organic matter aerosol by convective precipitation +'aerwdccomhphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 58 ; + } +# Negative fixer of hydrophobic organic matter aerosol +'aerngtomhphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 59 ; + } +# Negative fixer of hydrophilic organic matter aerosol +'aerngtomhphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 60 ; + } +# Vertically integrated mass of hydrophobic organic matter aerosol +'aermssomhphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 61 ; + } +# Vertically integrated mass of hydrophilic organic matter aerosol +'aermssomhphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 62 ; + } +# Hydrophobic organic matter aerosol optical depth +'aerodomhphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 63 ; + } +# Hydrophilic organic matter aerosol optical depth +'aerodomhphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 64 ; + } +# Source/gain of hydrophobic black carbon aerosol +'aersrcbchphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 65 ; + } +# Source/gain of hydrophilic black carbon aerosol +'aersrcbchphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 66 ; + } +# Dry deposition of hydrophobic black carbon aerosol +'aerddpbchphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 67 ; + } +# Dry deposition of hydrophilic black carbon aerosol +'aerddpbchphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 68 ; + } +# Sedimentation of hydrophobic black carbon aerosol +'aersdmbchphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 69 ; + } +# Sedimentation of hydrophilic black carbon aerosol +'aersdmbchphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 70 ; + } +# Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation +'aerwdlsbchphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 71 ; + } +# Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation +'aerwdlsbchphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 72 ; + } +# Wet deposition of hydrophobic black carbon aerosol by convective precipitation +'aerwdccbchphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 73 ; + } +# Wet deposition of hydrophilic black carbon aerosol by convective precipitation +'aerwdccbchphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 74 ; + } +# Negative fixer of hydrophobic black carbon aerosol +'aerngtbchphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 75 ; + } +# Negative fixer of hydrophilic black carbon aerosol +'aerngtbchphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 76 ; + } +# Vertically integrated mass of hydrophobic black carbon aerosol +'aermssbchphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 77 ; + } +# Vertically integrated mass of hydrophilic black carbon aerosol +'aermssbchphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 78 ; + } +# Hydrophobic black carbon aerosol optical depth +'aerodbchphob' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 79 ; + } +# Hydrophilic black carbon aerosol optical depth +'aerodbchphil' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 80 ; + } +# Source/gain of sulphate aerosol +'aersrcsu' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 81 ; + } +# Dry deposition of sulphate aerosol +'aerddpsu' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 82 ; + } +# Sedimentation of sulphate aerosol +'aersdmsu' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 83 ; + } +# Wet deposition of sulphate aerosol by large-scale precipitation +'aerwdlssu' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 84 ; + } +# Wet deposition of sulphate aerosol by convective precipitation +'aerwdccsu' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 85 ; + } +# Negative fixer of sulphate aerosol +'aerngtsu' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 86 ; + } +# Vertically integrated mass of sulphate aerosol +'aermsssu' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 87 ; + } +# Sulphate aerosol optical depth +'aerodsu' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 88 ; + } +#Accumulated total aerosol optical depth at 550 nm +'accaod550' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 89 ; + } +#Effective (snow effect included) UV visible albedo for direct radiation +'aluvpsn' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 90 ; + } +#10 metre wind speed dust emission potential +'aerdep10si' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 91 ; + } +#10 metre wind gustiness dust emission potential +'aerdep10fg' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 92 ; + } +#Profile of total aerosol optical depth at 532 nm +'paod532' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 93 ; + } +#Profile of natural (sea-salt and dust) aerosol optical depth at 532 nm +'pnaod532' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 94 ; + } +#Profile of antropogenic (black carbon, organic matter, sulphate) aerosol optical depth at 532 nm +'paaod532' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 95 ; + } +#Total absorption aerosol optical depth at 340 nm +'aodabs340' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 96 ; + } +#Total absorption aerosol optical depth at 355 nm +'aodabs355' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 97 ; + } +#Total absorption aerosol optical depth at 380 nm +'aodabs380' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 98 ; + } +#Total absorption aerosol optical depth at 400 nm +'aodabs400' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 99 ; + } +#Total absorption aerosol optical depth at 440 nm +'aodabs440' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 100 ; + } +#Total absorption aerosol optical depth at 469 nm +'aodabs469' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 101 ; + } +#Total absorption aerosol optical depth at 500 nm +'aodabs500' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 102 ; + } +#Total absorption aerosol optical depth at 532 nm +'aodabs532' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 103 ; + } +#Total absorption aerosol optical depth at 550 nm +'aodabs550' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 104 ; + } +#Total absorption aerosol optical depth at 645 nm +'aodabs645' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 105 ; + } +#Total absorption aerosol optical depth at 670 nm +'aodabs670' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 106 ; + } +#Total absorption aerosol optical depth at 800 nm +'aodabs800' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 107 ; + } +#Total absorption aerosol optical depth at 858 nm +'aodabs858' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 108 ; + } +#Total absorption aerosol optical depth at 865 nm +'aodabs865' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 109 ; + } +#Total absorption aerosol optical depth at 1020 nm +'aodabs1020' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 110 ; + } +#Total absorption aerosol optical depth at 1064 nm +'aodabs1064' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 111 ; + } +#Total absorption aerosol optical depth at 1240 nm +'aodabs1240' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 112 ; + } +#Total absorption aerosol optical depth at 1640 nm +'aodabs1640' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 113 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm +'aodfm340' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 114 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm +'aodfm355' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 115 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm +'aodfm380' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 116 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm +'aodfm400' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 117 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm +'aodfm440' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 118 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm +'aodfm469' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 119 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm +'aodfm500' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 120 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm +'aodfm532' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 121 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm +'aodfm550' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 122 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm +'aodfm645' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 123 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm +'aodfm670' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 124 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm +'aodfm800' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 125 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm +'aodfm858' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 126 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm +'aodfm865' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 127 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm +'aodfm1020' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 128 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm +'aodfm1064' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 129 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm +'aodfm1240' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 130 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm +'aodfm1640' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 131 ; + } +#Single scattering albedo at 340 nm +'ssa340' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 132 ; + } +#Single scattering albedo at 355 nm +'ssa355' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 133 ; + } +#Single scattering albedo at 380 nm +'ssa380' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 134 ; + } +#Single scattering albedo at 400 nm +'ssa400' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 135 ; + } +#Single scattering albedo at 440 nm +'ssa440' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 136 ; + } +#Single scattering albedo at 469 nm +'ssa469' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 137 ; + } +#Single scattering albedo at 500 nm +'ssa500' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 138 ; + } +#Single scattering albedo at 532 nm +'ssa532' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 139 ; + } +#Single scattering albedo at 550 nm +'ssa550' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 140 ; + } +#Single scattering albedo at 645 nm +'ssa645' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 141 ; + } +#Single scattering albedo at 670 nm +'ssa670' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 142 ; + } +#Single scattering albedo at 800 nm +'ssa800' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 143 ; + } +#Single scattering albedo at 858 nm +'ssa858' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 144 ; + } +#Single scattering albedo at 865 nm +'ssa865' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 145 ; + } +#Single scattering albedo at 1020 nm +'ssa1020' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 146 ; + } +#Single scattering albedo at 1064 nm +'ssa1064' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 147 ; + } +#Single scattering albedo at 1240 nm +'ssa1240' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 148 ; + } +#Single scattering albedo at 1640 nm +'ssa1640' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 149 ; + } +#Assimetry factor at 340 nm +'assimetry340' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 150 ; + } +#Assimetry factor at 355 nm +'assimetry355' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 151 ; + } +#Assimetry factor at 380 nm +'assimetry380' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 152 ; + } +#Assimetry factor at 400 nm +'assimetry400' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 153 ; + } +#Assimetry factor at 440 nm +'assimetry440' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 154 ; + } +#Assimetry factor at 469 nm +'assimetry469' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 155 ; + } +#Assimetry factor at 500 nm +'assimetry500' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 156 ; + } +#Assimetry factor at 532 nm +'assimetry532' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 157 ; + } +#Assimetry factor at 550 nm +'assimetry550' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 158 ; + } +#Assimetry factor at 645 nm +'assimetry645' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 159 ; + } +#Assimetry factor at 670 nm +'assimetry670' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 160 ; + } +#Assimetry factor at 800 nm +'assimetry800' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 161 ; + } +#Assimetry factor at 858 nm +'assimetry858' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 162 ; + } +#Assimetry factor at 865 nm +'assimetry865' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 163 ; + } +#Assimetry factor at 1020 nm +'assimetry1020' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 164 ; + } +#Assimetry factor at 1064 nm +'assimetry1064' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 165 ; + } +#Assimetry factor at 1240 nm +'assimetry1240' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 166 ; + } +#Assimetry factor at 1640 nm +'assimetry1640' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 167 ; + } +#Source/gain of sulphur dioxide +'aersrcso2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 168 ; + } +#Dry deposition of sulphur dioxide +'aerddpso2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 169 ; + } +#Sedimentation of sulphur dioxide +'aersdmso2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 170 ; + } +#Wet deposition of sulphur dioxide by large-scale precipitation +'aerwdlsso2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 171 ; + } +#Wet deposition of sulphur dioxide by convective precipitation +'aerwdccso2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 172 ; + } +#Negative fixer of sulphur dioxide +'aerngtso2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 173 ; + } +#Vertically integrated mass of sulphur dioxide +'aermssso2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 174 ; + } +#Sulphur dioxide optical depth +'aerodso2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 175 ; + } +#Total absorption aerosol optical depth at 2130 nm +'aodabs2130' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 176 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm +'aodfm2130' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 177 ; + } +#Single scattering albedo at 2130 nm +'ssa2130' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 178 ; + } +#Assimetry factor at 2130 nm +'assimetry2130' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 179 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 1 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 2 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 3 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 4 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 5 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 6 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 7 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 8 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 9 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 10 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 11 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 12 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 13 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 14 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 15 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 16 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 17 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 18 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 19 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 20 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 21 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 22 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 23 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 24 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 25 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 26 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 27 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 28 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 29 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 30 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 31 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 32 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 33 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 34 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 35 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 36 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 37 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 38 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 39 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 40 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 41 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 42 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 43 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 44 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 45 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 46 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 47 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 48 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 49 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 50 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 51 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 52 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 53 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 54 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 55 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 56 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 57 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 58 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 59 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 60 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 61 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 62 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 63 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 64 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 65 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 66 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 67 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 68 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 69 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 70 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 71 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 72 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 73 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 74 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 75 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 76 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 77 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 78 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 79 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 80 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 81 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 82 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 83 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 84 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 85 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 86 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 87 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 88 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 89 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 90 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 91 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 92 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 93 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 94 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 95 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 96 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 97 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 98 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 99 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 100 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 101 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 102 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 103 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 104 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 105 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 106 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 107 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 108 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 109 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 110 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 111 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 112 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 113 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 114 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 115 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 116 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 117 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 118 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 119 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 120 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 121 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 122 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 123 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 124 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 125 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 126 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 127 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 128 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 129 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 130 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 131 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 132 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 133 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 134 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 135 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 136 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 137 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 138 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 139 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 140 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 141 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 142 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 143 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 144 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 145 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 146 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 147 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 148 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 149 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 150 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 151 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 152 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 153 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 154 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 155 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 156 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 157 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 158 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 159 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 160 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 161 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 162 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 163 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 164 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 165 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 166 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 167 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 168 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 169 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 170 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 171 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 172 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 173 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 174 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 175 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 176 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 177 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 178 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 179 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 180 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 181 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 182 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 183 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 184 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 185 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 186 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 187 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 188 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 189 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 190 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 191 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 192 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 193 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 194 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 195 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 196 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 197 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 198 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 199 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 200 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 201 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 202 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 203 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 204 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 205 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 206 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 207 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 208 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 209 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 210 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 211 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 212 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 213 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 214 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 215 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 216 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 217 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 218 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 219 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 220 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 221 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 222 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 223 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 224 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 225 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 226 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 227 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 228 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 229 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 230 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 231 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 232 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 233 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 234 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 235 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 236 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 237 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 238 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 239 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 240 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 241 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 242 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 243 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 244 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 245 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 246 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 247 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 248 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 249 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 250 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 251 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 252 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 253 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 254 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 255 ; + } +#Total sky direct solar radiation at surface +'fdir' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; + } +#Clear-sky direct solar radiation at surface +'cdir' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 22 ; + } +#Cloud base height +'cbh' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; + } +#Zero degree level +'deg0l' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 24 ; + } +#Horizontal visibility +'hvis' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 25 ; + } +#Maximum temperature at 2 metres in the last 3 hours +'mx2t3' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 3 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Minimum temperature at 2 metres in the last 3 hours +'mn2t3' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 3 ; + } +#10 metre wind gust in the last 3 hours +'10fg3' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; + } +#Soil wetness index in layer 1 +'swi1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 40 ; + } +#Soil wetness index in layer 2 +'swi2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 41 ; + } +#Soil wetness index in layer 3 +'swi3' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 42 ; + } +#Soil wetness index in layer 4 +'swi4' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 43 ; + } +#Total column rain water +'tcrw' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; + } +#Total column snow water +'tcsw' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; + } +#Canopy cover fraction +'ccf' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 91 ; + } +#Soil texture fraction +'stf' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 92 ; + } +#Volumetric soil moisture +'swv' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 93 ; + } +#Ice temperature +'ist' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; + } +#Surface solar radiation downward clear-sky +'ssrdc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; + } +#Surface thermal radiation downward clear-sky +'strdc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; + } +#Surface short wave-effective total cloudiness +'tccsw' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 248 ; + } +#100 metre wind speed +'100si' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 249 ; + } +#Irrigation fraction +'irrfr' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 250 ; + } +#Potential evaporation +'pev' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; + } +#Irrigation +'irr' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 252 ; + } +#Surface long wave-effective total cloudiness +'tcclw' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 255 ; + } +#Total sky direct solar radiation at surface (variable resolution) +'fdirvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 21 ; + } +#Clear-sky direct solar radiation at surface (variable resolution) +'cdirvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 22 ; + } +#Flood alert levels +'flal' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 10 ; + } +#Cross sectional area of flow in channel +'chcross' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 11 ; + } +#Sideflow into river channel +'chside' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 12 ; + } +#Discharge +'dis' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 13 ; + } +#River storage of water +'rivsto' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 14 ; + } +#Floodplain storage of water +'fldsto' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 15 ; + } +#Flooded area fraction +'fldfrc' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 16 ; + } +#Days since last rain +'dslr' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 17 ; + } +#Molnau-Bissell frost index +'frost' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 18 ; + } +#Maximum discharge in 15 day forecast +'mxcq15d' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 19 ; + } +#Depth of water on soil surface +'woss' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 20 ; + } +#Upstreams accumulated precipitation +'tpups' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 21 ; + } +#Upstreams accumulated snow melt +'smups' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 22 ; + } +#Maximum rain in 24 hours over the 15 day forecast +'mxtp24h15d' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 23 ; + } +#Groundwater +'gz' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 25 ; + } +#Snow depth at elevation bands +'sd_elev' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 26 ; + } +#Accumulated precipitation over the 15 day forecast +'acctp15d' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 27 ; + } +#Stream function gradient +'strfgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 1 ; + } +#Velocity potential gradient +'vpotgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 2 ; + } +#Potential temperature gradient +'ptgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature gradient +'eqptgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature gradient +'septgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 5 ; + } +#U component of divergent wind gradient +'udvwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 11 ; + } +#V component of divergent wind gradient +'vdvwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 12 ; + } +#U component of rotational wind gradient +'urtwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 13 ; + } +#V component of rotational wind gradient +'vrtwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature gradient +'uctpgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure gradient +'uclngrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence gradient +'ucdvgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 25 ; + } +#Lake cover gradient +'clgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 26 ; + } +#Low vegetation cover gradient +'cvlgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 27 ; + } +#High vegetation cover gradient +'cvhgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 28 ; + } +#Type of low vegetation gradient +'tvlgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 29 ; + } +#Type of high vegetation gradient +'tvhgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 30 ; + } +#Sea-ice cover gradient +'sicgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 31 ; + } +#Snow albedo gradient +'asngrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 32 ; + } +#Snow density gradient +'rsngrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 33 ; + } +#Sea surface temperature gradient +'sstkgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 34 ; + } +#Ice surface temperature layer 1 gradient +'istl1grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 35 ; + } +#Ice surface temperature layer 2 gradient +'istl2grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 36 ; + } +#Ice surface temperature layer 3 gradient +'istl3grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 37 ; + } +#Ice surface temperature layer 4 gradient +'istl4grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 gradient +'swvl1grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 gradient +'swvl2grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 gradient +'swvl3grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 gradient +'swvl4grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 42 ; + } +#Soil type gradient +'sltgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 43 ; + } +#Snow evaporation gradient +'esgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 44 ; + } +#Snowmelt gradient +'smltgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 45 ; + } +#Solar duration gradient +'sdurgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 46 ; + } +#Direct solar radiation gradient +'dsrpgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress gradient +'magssgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 48 ; + } +#10 metre wind gust gradient +'10fggrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction gradient +'lspfgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature gradient +'mx2t24grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature gradient +'mn2t24grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 52 ; + } +#Montgomery potential gradient +'montgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 53 ; + } +#Pressure gradient +'presgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'mean2t24grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours gradient +'mn2d24grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface gradient +'uvbgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface gradient +'pargrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 58 ; + } +#Convective available potential energy gradient +'capegrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 59 ; + } +#Potential vorticity gradient +'pvgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 60 ; + } +#Total precipitation from observations gradient +'tpogrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 61 ; + } +#Observation count gradient +'obctgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 71 ; + } +#Total column liquid water +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 78 ; + } +#Total column ice water +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 79 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 80 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 81 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 82 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 83 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 84 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 85 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 86 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 87 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 88 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 89 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 90 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 91 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 92 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 93 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 94 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 95 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 96 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 97 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 98 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 99 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 100 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 101 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 102 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 103 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 104 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 105 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 106 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 107 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 108 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 109 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 110 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 111 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 112 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 113 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 114 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 115 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 116 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 117 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 118 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 119 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres gradient +'mx2t6grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres gradient +'mn2t6grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 122 ; + } +#10 metre wind gust in the last 6 hours gradient +'10fg6grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 123 ; + } +#Vertically integrated total energy +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 126 ; + } +#Atmospheric tide gradient +'atgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 127 ; + } +#Budget values gradient +'bvgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 128 ; + } +#Geopotential gradient +'zgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 129 ; + } +#Temperature gradient +'tgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 130 ; + } +#U component of wind gradient +'ugrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 131 ; + } +#V component of wind gradient +'vgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 132 ; + } +#Specific humidity gradient +'qgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 133 ; + } +#Surface pressure gradient +'spgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 134 ; + } +#vertical velocity (pressure) gradient +'wgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 135 ; + } +#Total column water gradient +'tcwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 136 ; + } +#Total column water vapour gradient +'tcwvgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 137 ; + } +#Vorticity (relative) gradient +'vogrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 138 ; + } +#Soil temperature level 1 gradient +'stl1grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 gradient +'swl1grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 140 ; + } +#Snow depth gradient +'sdgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) gradient +'lspgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 142 ; + } +#Convective precipitation gradient +'cpgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) gradient +'sfgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation gradient +'bldgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux gradient +'sshfgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 146 ; + } +#Surface latent heat flux gradient +'slhfgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 147 ; + } +#Charnock gradient +'chnkgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 148 ; + } +#Surface net radiation gradient +'snrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 149 ; + } +#Top net radiation gradient +'tnrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 150 ; + } +#Mean sea level pressure gradient +'mslgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure gradient +'lnspgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 152 ; + } +#Short-wave heating rate gradient +'swhrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 153 ; + } +#Long-wave heating rate gradient +'lwhrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 154 ; + } +#Divergence gradient +'dgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 155 ; + } +#Height gradient +'ghgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 156 ; + } +#Relative humidity gradient +'rgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure gradient +'tspgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 158 ; + } +#Boundary layer height gradient +'blhgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 159 ; + } +#Standard deviation of orography gradient +'sdorgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography gradient +'isorgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography gradient +'anorgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography gradient +'slorgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 163 ; + } +#Total cloud cover gradient +'tccgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 164 ; + } +#10 metre U wind component gradient +'10ugrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 165 ; + } +#10 metre V wind component gradient +'10vgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 166 ; + } +#2 metre temperature gradient +'2tgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 167 ; + } +#2 metre dewpoint temperature gradient +'2dgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 168 ; + } +#Surface solar radiation downwards gradient +'ssrdgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 gradient +'stl2grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 gradient +'swl2grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 171 ; + } +#Land-sea mask gradient +'lsmgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 172 ; + } +#Surface roughness gradient +'srgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 173 ; + } +#Albedo gradient +'algrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards gradient +'strdgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 175 ; + } +#Surface net solar radiation gradient +'ssrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation gradient +'strgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 177 ; + } +#Top net solar radiation gradient +'tsrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 178 ; + } +#Top net thermal radiation gradient +'ttrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 179 ; + } +#East-West surface stress gradient +'ewssgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 180 ; + } +#North-South surface stress gradient +'nsssgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 181 ; + } +#Evaporation gradient +'egrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 gradient +'stl3grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 gradient +'swl3grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 184 ; + } +#Convective cloud cover gradient +'cccgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 185 ; + } +#Low cloud cover gradient +'lccgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 186 ; + } +#Medium cloud cover gradient +'mccgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 187 ; + } +#High cloud cover gradient +'hccgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 188 ; + } +#Sunshine duration gradient +'sundgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance gradient +'ewovgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance gradient +'nsovgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance gradient +'nwovgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance gradient +'neovgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 193 ; + } +#Brightness temperature gradient +'btmpgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress gradient +'lgwsgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress gradient +'mgwsgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation gradient +'gwdgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 197 ; + } +#Skin reservoir content gradient +'srcgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 198 ; + } +#Vegetation fraction gradient +'veggrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography gradient +'vsogrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing gradient +'mx2tgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing gradient +'mn2tgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio gradient +'o3grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights gradient +'pawgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 204 ; + } +#Runoff gradient +'rogrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 205 ; + } +#Total column ozone gradient +'tco3grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 206 ; + } +#10 metre wind speed gradient +'10sigrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 207 ; + } +#Top net solar radiation, clear sky gradient +'tsrcgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky gradient +'ttrcgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky gradient +'ssrcgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky gradient +'strcgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation gradient +'tisrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation gradient +'dhrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion gradient +'dhvdgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection gradient +'dhccgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation gradient +'dhlcgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind gradient +'vdzwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind gradient +'vdmwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency gradient +'ewgdgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency gradient +'nsgdgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind gradient +'ctzwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind gradient +'ctmwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity gradient +'vdhgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection gradient +'htccgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation gradient +'htlcgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity gradient +'crnhgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 227 ; + } +#Total precipitation gradient +'tpgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress gradient +'iewsgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress gradient +'inssgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux gradient +'ishfgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux gradient +'iegrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 232 ; + } +#Apparent surface humidity gradient +'asqgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat gradient +'lsrhgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 234 ; + } +#Skin temperature gradient +'sktgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 gradient +'stl4grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 gradient +'swl4grd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 237 ; + } +#Temperature of snow layer gradient +'tsngrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 238 ; + } +#Convective snowfall gradient +'csfgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 239 ; + } +#Large scale snowfall gradient +'lsfgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency gradient +'acfgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency gradient +'alwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 242 ; + } +#Forecast albedo gradient +'falgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 243 ; + } +#Forecast surface roughness gradient +'fsrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat gradient +'flsrgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content gradient +'clwcgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 246 ; + } +#Specific cloud ice water content gradient +'ciwcgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 247 ; + } +#Cloud cover gradient +'ccgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency gradient +'aiwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 249 ; + } +#Ice age gradient +'icegrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature gradient +'attegrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity gradient +'athegrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind gradient +'atzegrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind gradient +'atmwgrd' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 255 ; + } +#Top solar radiation upward +'tsru' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 208 ; + } +#Top thermal radiation upward +'ttru' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 209 ; + } +#Top solar radiation upward, clear sky +'tsuc' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 210 ; + } +#Top thermal radiation upward, clear sky +'ttuc' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 211 ; + } +#Cloud liquid water +'clw' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 212 ; + } +#Cloud fraction +'cf' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 213 ; + } +#Diabatic heating by radiation +'dhr' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion +'dhvd' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection +'dhcc' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 216 ; + } +#Diabatic heating by large-scale condensation +'dhlc' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind +'vdzw' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind +'vdmw' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag +'ewgd' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag +'nsgd' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 221 ; + } +#Vertical diffusion of humidity +'vdh' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection +'htcc' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation +'htlc' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 226 ; + } +#Adiabatic tendency of temperature +'att' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 228 ; + } +#Adiabatic tendency of humidity +'ath' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 229 ; + } +#Adiabatic tendency of zonal wind +'atzw' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 230 ; + } +#Adiabatic tendency of meridional wind +'atmwax' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 231 ; + } +#Mean vertical velocity +'mvv' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 232 ; + } +#2m temperature anomaly of at least +2K +'2tag2' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 1 ; + } +#2m temperature anomaly of at least +1K +'2tag1' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 2 ; + } +#2m temperature anomaly of at least 0K +'2tag0' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 3 ; + } +#2m temperature anomaly of at most -1K +'2talm1' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 4 ; + } +#2m temperature anomaly of at most -2K +'2talm2' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 5 ; + } +#Total precipitation anomaly of at least 20 mm +'tpag20' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 6 ; + } +#Total precipitation anomaly of at least 10 mm +'tpag10' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 7 ; + } +#Total precipitation anomaly of at least 0 mm +'tpag0' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 8 ; + } +#Surface temperature anomaly of at least 0K +'stag0' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 9 ; + } +#Mean sea level pressure anomaly of at least 0 Pa +'mslag0' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 10 ; + } +#Height of 0 degree isotherm probability +'h0dip' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 15 ; + } +#Height of snowfall limit probability +'hslp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 16 ; + } +#Showalter index probability +'saip' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 17 ; + } +#Whiting index probability +'whip' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 18 ; + } +#Temperature anomaly less than -2 K +'talm2' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 20 ; + } +#Temperature anomaly of at least +2 K +'tag2' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 21 ; + } +#Temperature anomaly less than -8 K +'talm8' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 22 ; + } +#Temperature anomaly less than -4 K +'talm4' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 23 ; + } +#Temperature anomaly greater than +4 K +'tag4' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 24 ; + } +#Temperature anomaly greater than +8 K +'tag8' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 25 ; + } +#10 metre wind gust probability +'10gp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 49 ; + } +#Convective available potential energy probability +'capep' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 59 ; + } +#Total precipitation less than 0.1 mm +'tpl01' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 64 ; + } +#Total precipitation rate less than 1 mm/day +'tprl1' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 65 ; + } +#Total precipitation rate of at least 3 mm/day +'tprg3' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 66 ; + } +#Total precipitation rate of at least 5 mm/day +'tprg5' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 67 ; + } +#10 metre Wind speed of at least 10 m/s +'10spg10' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 68 ; + } +#10 metre Wind speed of at least 15 m/s +'10spg15' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 69 ; + } +#10 metre Wind gust of at least 25 m/s +'10fgg25' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 10 ; + productDefinitionTemplateNumber = 9 ; + scaleFactorOfLowerLimit = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfLowerLimit = 25 ; + typeOfFirstFixedSurface = 103 ; + probabilityType = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2 metre temperature less than 273.15 K +'2tl273' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 73 ; + } +#Significant wave height of at least 2 m +'swhg2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + scaledValueOfLowerLimit = 2 ; + scaleFactorOfLowerLimit = 0 ; + typeOfFirstFixedSurface = 101 ; + productDefinitionTemplateNumber = 5 ; + probabilityType = 3 ; + } +#Significant wave height of at least 4 m +'swhg4' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 101 ; + productDefinitionTemplateNumber = 5 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; + scaledValueOfLowerLimit = 4 ; + } +#Significant wave height of at least 6 m +'swhg6' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + scaledValueOfLowerLimit = 6 ; + productDefinitionTemplateNumber = 5 ; + scaleFactorOfLowerLimit = 0 ; + typeOfFirstFixedSurface = 101 ; + probabilityType = 3 ; + } +#Significant wave height of at least 8 m +'swhg8' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + probabilityType = 3 ; + scaleFactorOfLowerLimit = 0 ; + scaledValueOfLowerLimit = 8 ; + typeOfFirstFixedSurface = 101 ; + productDefinitionTemplateNumber = 5 ; + } +#Mean wave period of at least 8 s +'mwpg8' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 78 ; + } +#Mean wave period of at least 10 s +'mwpg10' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 79 ; + } +#Mean wave period of at least 12 s +'mwpg12' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 80 ; + } +#Mean wave period of at least 15 s +'mwpg15' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 81 ; + } +#Geopotential probability +'zp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 129 ; + } +#Temperature anomaly probability +'tap' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 130 ; + } +#2 metre temperature probability +'2tp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 139 ; + } +#Snowfall (convective + stratiform) probability +'sfp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 144 ; + } +#Total precipitation probability +'tpp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 151 ; + } +#Total cloud cover probability +'tccp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 164 ; + } +#10 metre speed probability +'10sp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 165 ; + } +#2 metre temperature probability +'2tp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 167 ; + } +#Maximum 2 metre temperature probability +'mx2tp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 201 ; + } +#Minimum 2 metre temperature probability +'mn2tp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 202 ; + } +#Total precipitation probability +'tpp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 228 ; + } +#Significant wave height probability +'swhp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 229 ; + } +#Mean wave period probability +'mwpp' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 232 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 255 ; + } +#10 metre wind gust index +'10fgi' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 49 ; + } +#Snowfall index +'sfi' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 144 ; + } +#10 metre speed index +'10wsi' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 165 ; + } +#2 metre temperature index +'2ti' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 167 ; + } +#Maximum temperature at 2 metres index +'mx2ti' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres index +'mn2ti' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 202 ; + } +#Total precipitation index +'tpi' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 228 ; + } +#2m temperature probability less than -10 C +'2tplm10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 1 ; + } +#2m temperature probability less than -5 C +'2tplm5' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 2 ; + } +#2m temperature probability less than 0 C +'2tpl0' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 3 ; + } +#2m temperature probability less than 5 C +'2tpl5' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 4 ; + } +#2m temperature probability less than 10 C +'2tpl10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 5 ; + } +#2m temperature probability greater than 25 C +'2tpg25' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 6 ; + } +#2m temperature probability greater than 30 C +'2tpg30' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 7 ; + } +#2m temperature probability greater than 35 C +'2tpg35' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 8 ; + } +#2m temperature probability greater than 40 C +'2tpg40' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 9 ; + } +#2m temperature probability greater than 45 C +'2tpg45' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 10 ; + } +#Minimum 2 metre temperature probability less than -10 C +'mn2tplm10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 11 ; + } +#Minimum 2 metre temperature probability less than -5 C +'mn2tplm5' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 12 ; + } +#Minimum 2 metre temperature probability less than 0 C +'mn2tpl0' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 13 ; + } +#Minimum 2 metre temperature probability less than 5 C +'mn2tpl5' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 14 ; + } +#Minimum 2 metre temperature probability less than 10 C +'mn2tpl10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 15 ; + } +#Maximum 2 metre temperature probability greater than 25 C +'mx2tpg25' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 16 ; + } +#Maximum 2 metre temperature probability greater than 30 C +'mx2tpg30' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 17 ; + } +#Maximum 2 metre temperature probability greater than 35 C +'mx2tpg35' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 18 ; + } +#Maximum 2 metre temperature probability greater than 40 C +'mx2tpg40' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 19 ; + } +#Maximum 2 metre temperature probability greater than 45 C +'mx2tpg45' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 20 ; + } +#10 metre wind speed probability of at least 10 m/s +'10spg10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 21 ; + } +#10 metre wind speed probability of at least 15 m/s +'10spg15' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 22 ; + } +#10 metre wind speed probability of at least 20 m/s +'10spg20' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 23 ; + } +#10 metre wind speed probability of at least 35 m/s +'10spg35' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 24 ; + } +#10 metre wind speed probability of at least 50 m/s +'10spg50' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 25 ; + } +#10 metre wind gust probability of at least 20 m/s +'10gpg20' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 26 ; + } +#10 metre wind gust probability of at least 35 m/s +'10gpg35' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 27 ; + } +#10 metre wind gust probability of at least 50 m/s +'10gpg50' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 28 ; + } +#10 metre wind gust probability of at least 75 m/s +'10gpg75' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 29 ; + } +#10 metre wind gust probability of at least 100 m/s +'10gpg100' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 30 ; + } +#Total precipitation probability of at least 1 mm +'tppg1' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 31 ; + } +#Total precipitation probability of at least 5 mm +'tppg5' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 32 ; + } +#Total precipitation probability of at least 10 mm +'tppg10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 33 ; + } +#Total precipitation probability of at least 20 mm +'tppg20' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 34 ; + } +#Total precipitation probability of at least 40 mm +'tppg40' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 35 ; + } +#Total precipitation probability of at least 60 mm +'tppg60' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 36 ; + } +#Total precipitation probability of at least 80 mm +'tppg80' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 37 ; + } +#Total precipitation probability of at least 100 mm +'tppg100' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 38 ; + } +#Total precipitation probability of at least 150 mm +'tppg150' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 39 ; + } +#Total precipitation probability of at least 200 mm +'tppg200' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 40 ; + } +#Total precipitation probability of at least 300 mm +'tppg300' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 41 ; + } +#Snowfall probability of at least 1 mm +'sfpg1' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 42 ; + } +#Snowfall probability of at least 5 mm +'sfpg5' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 43 ; + } +#Snowfall probability of at least 10 mm +'sfpg10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 44 ; + } +#Snowfall probability of at least 20 mm +'sfpg20' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 45 ; + } +#Snowfall probability of at least 40 mm +'sfpg40' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 46 ; + } +#Snowfall probability of at least 60 mm +'sfpg60' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 47 ; + } +#Snowfall probability of at least 80 mm +'sfpg80' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 48 ; + } +#Snowfall probability of at least 100 mm +'sfpg100' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 49 ; + } +#Snowfall probability of at least 150 mm +'sfpg150' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 50 ; + } +#Snowfall probability of at least 200 mm +'sfpg200' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 51 ; + } +#Snowfall probability of at least 300 mm +'sfpg300' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 52 ; + } +#Total Cloud Cover probability greater than 10% +'tccpg10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 53 ; + } +#Total Cloud Cover probability greater than 20% +'tccpg20' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 54 ; + } +#Total Cloud Cover probability greater than 30% +'tccpg30' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 55 ; + } +#Total Cloud Cover probability greater than 40% +'tccpg40' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 56 ; + } +#Total Cloud Cover probability greater than 50% +'tccpg50' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 57 ; + } +#Total Cloud Cover probability greater than 60% +'tccpg60' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 58 ; + } +#Total Cloud Cover probability greater than 70% +'tccpg70' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 59 ; + } +#Total Cloud Cover probability greater than 80% +'tccpg80' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 60 ; + } +#Total Cloud Cover probability greater than 90% +'tccpg90' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 61 ; + } +#Total Cloud Cover probability greater than 99% +'tccpg99' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 62 ; + } +#High Cloud Cover probability greater than 10% +'hccpg10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 63 ; + } +#High Cloud Cover probability greater than 20% +'hccpg20' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 64 ; + } +#High Cloud Cover probability greater than 30% +'hccpg30' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 65 ; + } +#High Cloud Cover probability greater than 40% +'hccpg40' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 66 ; + } +#High Cloud Cover probability greater than 50% +'hccpg50' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 67 ; + } +#High Cloud Cover probability greater than 60% +'hccpg60' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 68 ; + } +#High Cloud Cover probability greater than 70% +'hccpg70' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 69 ; + } +#High Cloud Cover probability greater than 80% +'hccpg80' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 70 ; + } +#High Cloud Cover probability greater than 90% +'hccpg90' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 71 ; + } +#High Cloud Cover probability greater than 99% +'hccpg99' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 72 ; + } +#Medium Cloud Cover probability greater than 10% +'mccpg10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 73 ; + } +#Medium Cloud Cover probability greater than 20% +'mccpg20' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 74 ; + } +#Medium Cloud Cover probability greater than 30% +'mccpg30' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 75 ; + } +#Medium Cloud Cover probability greater than 40% +'mccpg40' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 76 ; + } +#Medium Cloud Cover probability greater than 50% +'mccpg50' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 77 ; + } +#Medium Cloud Cover probability greater than 60% +'mccpg60' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 78 ; + } +#Medium Cloud Cover probability greater than 70% +'mccpg70' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 79 ; + } +#Medium Cloud Cover probability greater than 80% +'mccpg80' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 80 ; + } +#Medium Cloud Cover probability greater than 90% +'mccpg90' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 81 ; + } +#Medium Cloud Cover probability greater than 99% +'mccpg99' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 82 ; + } +#Low Cloud Cover probability greater than 10% +'lccpg10' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 83 ; + } +#Low Cloud Cover probability greater than 20% +'lccpg20' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 84 ; + } +#Low Cloud Cover probability greater than 30% +'lccpg30' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 85 ; + } +#Low Cloud Cover probability greater than 40% +'lccpg40' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 86 ; + } +#Low Cloud Cover probability greater than 50% +'lccpg50' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 87 ; + } +#Low Cloud Cover probability greater than 60% +'lccpg60' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 88 ; + } +#Low Cloud Cover probability greater than 70% +'lccpg70' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 89 ; + } +#Low Cloud Cover probability greater than 80% +'lccpg80' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 90 ; + } +#Low Cloud Cover probability greater than 90% +'lccpg90' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 91 ; + } +#Low Cloud Cover probability greater than 99% +'lccpg99' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 92 ; + } +#Maximum of significant wave height +'maxswh' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 200 ; + } +#Period corresponding to maximum individual wave height +'tmax' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; + } +#Maximum individual wave height +'hmax' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; + } +#Model bathymetry +'wmb' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; + } +#Mean wave period based on first moment +'mp1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; + } +#Mean wave period based on second moment +'mp2' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 221 ; + } +#Wave spectral directional width +'wdw' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; + } +#Mean wave period based on first moment for wind waves +'p1ww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; + } +#Mean wave period based on second moment for wind waves +'p2ww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; + } +#Wave spectral directional width for wind waves +'dwww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; + } +#Mean wave period based on first moment for swell +'p1ps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; + } +#Mean wave period based on second moment for swell +'p2ps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; + } +#Wave spectral directional width for swell +'dwps' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; + } +#Significant height of combined wind waves and swell +'swh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Mean wave direction +'mwd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Peak period of 1D spectra +'pp1d' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 231 ; + } +#Mean wave period +'mwp' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + } +#Coefficient of drag with waves +'cdww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; + } +#Significant height of wind waves +'shww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean direction of wind waves +'mdww' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 235 ; + } +#Mean period of wind waves +'mpww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Significant height of total swell +'shts' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; + } +#Mean direction of total swell +'mdts' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 238 ; + } +#Mean period of total swell +'mpts' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; + } +#Standard deviation wave height +'sdhs' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 240 ; + } +#Mean of 10 metre wind speed +'mu10' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 241 ; + } +#Mean wind direction +'mdwi' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 242 ; + } +#Standard deviation of 10 metre wind speed +'sdu' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 243 ; + } +#Mean square slope of waves +'msqs' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; + } +#10 metre wind speed +'wind' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; + } +#Altimeter wave height +'awh' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; + } +#Altimeter corrected wave height +'acwh' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; + } +#Altimeter range relative correction +'arrc' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; + } +#10 metre wind direction +'dwi' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; + } +#2D wave spectra (multiple) +'2dsp' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 250 ; + } +#2D wave spectra (single) +'2dfd' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 251 ; + } +#Wave spectral kurtosis +'wsk' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; + } +#Benjamin-Feir index +'bfi' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; + } +#Wave spectral peakedness +'wsp' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 255 ; + } +#Ocean potential temperature +'ocpt' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 129 ; + } +#Ocean salinity +'ocs' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 130 ; + } +#Ocean potential density +'ocpd' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 131 ; + } +#Ocean U wind component +'ocu' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 133 ; + } +#Ocean V wind component +'ocv' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 134 ; + } +#Ocean W wind component +'ocw' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 135 ; + } +#Richardson number +'rn' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 137 ; + } +#U*V product +'uv' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 139 ; + } +#U*T product +'ut' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 140 ; + } +#V*T product +'vt' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 141 ; + } +#U*U product +'uu' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 142 ; + } +#V*V product +'vv' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 143 ; + } +#UV - U~V~ +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 144 ; + } +#UT - U~T~ +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 145 ; + } +#VT - V~T~ +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 146 ; + } +#UU - U~U~ +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 147 ; + } +#VV - V~V~ +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 148 ; + } +#Sea level +'sl' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 152 ; + } +#Barotropic stream function +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 153 ; + } +#Mixed layer depth +'mld' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 154 ; + } +#Depth +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 155 ; + } +#U stress +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 168 ; + } +#V stress +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 169 ; + } +#Turbulent kinetic energy input +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 170 ; + } +#Net surface heat flux +'nsf' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 171 ; + } +#Surface solar radiation +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 172 ; + } +#P-E +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 173 ; + } +#Diagnosed sea surface temperature error +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 180 ; + } +#Heat flux correction +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 181 ; + } +#Observed sea surface temperature +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 182 ; + } +#Observed heat flux +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 183 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 255 ; + } +#In situ Temperature +'~' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 128 ; + } +#Ocean potential temperature +'ocpt' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 129 ; + } +#Salinity +'s' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 130 ; + } +#Ocean current zonal component +'ocu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 131 ; + } +#Ocean current meridional component +'ocv' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 132 ; + } +#Ocean current vertical component +'ocw' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 133 ; + } +#Modulus of strain rate tensor +'mst' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 134 ; + } +#Vertical viscosity +'vvs' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 135 ; + } +#Vertical diffusivity +'vdf' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 136 ; + } +#Bottom level Depth +'dep' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 137 ; + } +#Sigma-theta +'sth' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 138 ; + } +#Richardson number +'rn' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 139 ; + } +#UV product +'uv' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 140 ; + } +#UT product +'ut' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 141 ; + } +#VT product +'vt' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 142 ; + } +#UU product +'uu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 143 ; + } +#VV product +'vv' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 144 ; + } +#Sea level +'sl' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 145 ; + } +#Sea level previous timestep +'sl_1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 146 ; + } +#Barotropic stream function +'bsf' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 147 ; + } +#Mixed layer depth +'mld' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 148 ; + } +#Bottom Pressure (equivalent height) +'btp' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 149 ; + } +#Steric height +'sh' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 150 ; + } +#Curl of Wind Stress +'crl' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 151 ; + } +#Divergence of wind stress +'~' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 152 ; + } +#U stress +'tax' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 153 ; + } +#V stress +'tay' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 154 ; + } +#Turbulent kinetic energy input +'tki' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 155 ; + } +#Net surface heat flux +'nsf' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 156 ; + } +#Absorbed solar radiation +'asr' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 157 ; + } +#Precipitation - evaporation +'pme' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 158 ; + } +#Specified sea surface temperature +'sst' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 159 ; + } +#Specified surface heat flux +'shf' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 160 ; + } +#Diagnosed sea surface temperature error +'dte' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 161 ; + } +#Heat flux correction +'hfc' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 162 ; + } +#20 degrees isotherm depth +'20d' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 163 ; + } +#Average potential temperature in the upper 300m +'tav300' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 164 ; + } +#Vertically integrated zonal velocity (previous time step) +'uba1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 165 ; + } +#Vertically Integrated meridional velocity (previous time step) +'vba1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 166 ; + } +#Vertically integrated zonal volume transport +'ztr' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 167 ; + } +#Vertically integrated meridional volume transport +'mtr' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 168 ; + } +#Vertically integrated zonal heat transport +'zht' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 169 ; + } +#Vertically integrated meridional heat transport +'mht' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 170 ; + } +#U velocity maximum +'umax' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 171 ; + } +#Depth of the velocity maximum +'dumax' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 172 ; + } +#Salinity maximum +'smax' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 173 ; + } +#Depth of salinity maximum +'dsmax' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 174 ; + } +#Average salinity in the upper 300m +'sav300' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 175 ; + } +#Layer Thickness at scalar points +'ldp' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 176 ; + } +#Layer Thickness at vector points +'ldu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 177 ; + } +#Potential temperature increment +'pti' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 178 ; + } +#Potential temperature analysis error +'ptae' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 179 ; + } +#Background potential temperature +'bpt' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 180 ; + } +#Analysed potential temperature +'apt' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 181 ; + } +#Potential temperature background error +'ptbe' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 182 ; + } +#Analysed salinity +'as' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 183 ; + } +#Salinity increment +'sali' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 184 ; + } +#Estimated Bias in Temperature +'ebt' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 185 ; + } +#Estimated Bias in Salinity +'ebs' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 186 ; + } +#Zonal Velocity increment (from balance operator) +'uvi' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 187 ; + } +#Meridional Velocity increment (from balance operator) +'vvi' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 188 ; + } +#Salinity increment (from salinity data) +'subi' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 190 ; + } +#Salinity analysis error +'sale' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 191 ; + } +#Background Salinity +'bsal' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 192 ; + } +#Salinity background error +'salbe' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 194 ; + } +#Estimated temperature bias from assimilation +'ebta' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 199 ; + } +#Estimated salinity bias from assimilation +'ebsa' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 200 ; + } +#Temperature increment from relaxation term +'lti' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 201 ; + } +#Salinity increment from relaxation term +'lsi' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 202 ; + } +#Bias in the zonal pressure gradient (applied) +'bzpga' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 203 ; + } +#Bias in the meridional pressure gradient (applied) +'bmpga' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 204 ; + } +#Estimated temperature bias from relaxation +'ebtl' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 205 ; + } +#Estimated salinity bias from relaxation +'ebsl' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 206 ; + } +#First guess bias in temperature +'fgbt' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 207 ; + } +#First guess bias in salinity +'fgbs' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 208 ; + } +#Applied bias in pressure +'bpa' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 209 ; + } +#FG bias in pressure +'fgbp' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 210 ; + } +#Bias in temperature(applied) +'pta' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 211 ; + } +#Bias in salinity (applied) +'psa' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 212 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 255 ; + } +#10 metre wind gust during averaging time +'10fgrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 49 ; + } +#vertical velocity (pressure) +'wrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 135 ; + } +#Precipitable water content +'pwcrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 137 ; + } +#Soil wetness level 1 +'swl1rea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 140 ; + } +#Snow depth +'sdrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 141 ; + } +#Large-scale precipitation +'lsprea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 142 ; + } +#Convective precipitation +'cprea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 143 ; + } +#Snowfall +'sfrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 144 ; + } +#Height +'ghrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 156 ; + } +#Relative humidity +'rrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 157 ; + } +#Soil wetness level 2 +'swl2rea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 171 ; + } +#East-West surface stress +'ewssrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 180 ; + } +#North-South surface stress +'nsssrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 181 ; + } +#Evaporation +'erea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 182 ; + } +#Soil wetness level 3 +'swl3rea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 184 ; + } +#Skin reservoir content +'srcrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 198 ; + } +#Percentage of vegetation +'vegrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 199 ; + } +#Maximum temperature at 2 metres during averaging time +'mx2trea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres during averaging time +'mn2trea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 202 ; + } +#Runoff +'rorea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 205 ; + } +#Standard deviation of geopotential +'zzrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 206 ; + } +#Covariance of temperature and geopotential +'tzrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 207 ; + } +#Standard deviation of temperature +'ttrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 208 ; + } +#Covariance of specific humidity and geopotential +'qzrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 209 ; + } +#Covariance of specific humidity and temperature +'qtrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 210 ; + } +#Standard deviation of specific humidity +'qqrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 211 ; + } +#Covariance of U component and geopotential +'uzrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 212 ; + } +#Covariance of U component and temperature +'utrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 213 ; + } +#Covariance of U component and specific humidity +'uqrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 214 ; + } +#Standard deviation of U velocity +'uurea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 215 ; + } +#Covariance of V component and geopotential +'vzrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 216 ; + } +#Covariance of V component and temperature +'vtrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 217 ; + } +#Covariance of V component and specific humidity +'vqrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 218 ; + } +#Covariance of V component and U component +'vurea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 219 ; + } +#Standard deviation of V component +'vvrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 220 ; + } +#Covariance of W component and geopotential +'wzrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 221 ; + } +#Covariance of W component and temperature +'wtrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 222 ; + } +#Covariance of W component and specific humidity +'wqrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 223 ; + } +#Covariance of W component and U component +'wurea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 224 ; + } +#Covariance of W component and V component +'wvrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 225 ; + } +#Standard deviation of vertical velocity +'wwrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 226 ; + } +#Instantaneous surface heat flux +'ishfrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 231 ; + } +#Convective snowfall +'csfrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 239 ; + } +#Large scale snowfall +'lsfrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 240 ; + } +#Cloud liquid water content +'clwcerrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 241 ; + } +#Cloud cover +'ccrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 242 ; + } +#Forecast albedo +'falrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 243 ; + } +#10 metre wind speed +'10wsrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 246 ; + } +#Momentum flux +'moflrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 247 ; + } +#Gravity wave dissipation flux +'~' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 249 ; + } +#Heaviside beta function +'hsdrea' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 254 ; + } +#Surface geopotential +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 51 ; + } +#Vertical integral of mass of atmosphere +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 53 ; + } +#Vertical integral of temperature +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 54 ; + } +#Vertical integral of water vapour +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 55 ; + } +#Vertical integral of cloud liquid water +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 56 ; + } +#Vertical integral of cloud frozen water +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 57 ; + } +#Vertical integral of ozone +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 58 ; + } +#Vertical integral of kinetic energy +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 59 ; + } +#Vertical integral of thermal energy +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 60 ; + } +#Vertical integral of potential+internal energy +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 61 ; + } +#Vertical integral of potential+internal+latent energy +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 62 ; + } +#Vertical integral of total energy +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 63 ; + } +#Vertical integral of energy conversion +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 64 ; + } +#Vertical integral of eastward mass flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 65 ; + } +#Vertical integral of northward mass flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 66 ; + } +#Vertical integral of eastward kinetic energy flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 67 ; + } +#Vertical integral of northward kinetic energy flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 68 ; + } +#Vertical integral of eastward heat flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 69 ; + } +#Vertical integral of northward heat flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 70 ; + } +#Vertical integral of eastward water vapour flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; + } +#Vertical integral of northward water vapour flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; + } +#Vertical integral of eastward geopotential flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 73 ; + } +#Vertical integral of northward geopotential flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 74 ; + } +#Vertical integral of eastward total energy flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 75 ; + } +#Vertical integral of northward total energy flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 76 ; + } +#Vertical integral of eastward ozone flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 77 ; + } +#Vertical integral of northward ozone flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 78 ; + } +#Vertical integral of divergence of mass flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 81 ; + } +#Vertical integral of divergence of kinetic energy flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 82 ; + } +#Vertical integral of divergence of thermal energy flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 83 ; + } +#Vertical integral of divergence of moisture flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 84 ; + } +#Vertical integral of divergence of geopotential flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 85 ; + } +#Vertical integral of divergence of total energy flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 86 ; + } +#Vertical integral of divergence of ozone flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 87 ; + } +#Tendency of short wave radiation +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; + } +#Tendency of long wave radiation +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; + } +#Tendency of clear sky short wave radiation +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; + } +#Tendency of clear sky long wave radiation +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; + } +#Updraught mass flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; + } +#Downdraught mass flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; + } +#Updraught detrainment rate +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; + } +#Downdraught detrainment rate +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; + } +#Total precipitation flux +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; + } +#Turbulent diffusion coefficient for heat +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; + } +#Tendency of temperature due to physics +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; + } +#Tendency of specific humidity due to physics +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; + } +#Tendency of u component due to physics +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; + } +#Tendency of v component due to physics +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; + } +#Variance of geopotential +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 206 ; + } +#Covariance of geopotential/temperature +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 207 ; + } +#Variance of temperature +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 208 ; + } +#Covariance of geopotential/specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 209 ; + } +#Covariance of temperature/specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 210 ; + } +#Variance of specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 211 ; + } +#Covariance of u component/geopotential +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 212 ; + } +#Covariance of u component/temperature +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 213 ; + } +#Covariance of u component/specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 214 ; + } +#Variance of u component +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 215 ; + } +#Covariance of v component/geopotential +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 216 ; + } +#Covariance of v component/temperature +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 217 ; + } +#Covariance of v component/specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 218 ; + } +#Covariance of v component/u component +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 219 ; + } +#Variance of v component +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 220 ; + } +#Covariance of omega/geopotential +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 221 ; + } +#Covariance of omega/temperature +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 222 ; + } +#Covariance of omega/specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 223 ; + } +#Covariance of omega/u component +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 224 ; + } +#Covariance of omega/v component +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 225 ; + } +#Variance of omega +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 226 ; + } +#Variance of surface pressure +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 227 ; + } +#Variance of relative humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 229 ; + } +#Covariance of u component/ozone +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 230 ; + } +#Covariance of v component/ozone +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 231 ; + } +#Covariance of omega/ozone +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 232 ; + } +#Variance of ozone +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 233 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 255 ; + } +#Total soil moisture +'tsw' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 149 ; + } +#Soil wetness level 2 +'swl2' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 171 ; + } +#Top net thermal radiation +'ttr' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 179 ; + } +#Stream function anomaly +'strfa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 1 ; + } +#Velocity potential anomaly +'vpota' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 2 ; + } +#Potential temperature anomaly +'pta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature anomaly +'epta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature anomaly +'septa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 5 ; + } +#U component of divergent wind anomaly +'udwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 11 ; + } +#V component of divergent wind anomaly +'vdwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 12 ; + } +#U component of rotational wind anomaly +'urwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 13 ; + } +#V component of rotational wind anomaly +'vrwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature anomaly +'uctpa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure anomaly +'uclna' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence anomaly +'ucdva' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 23 ; + } +#Lake cover anomaly +'cla' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 26 ; + } +#Low vegetation cover anomaly +'cvla' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 27 ; + } +#High vegetation cover anomaly +'cvha' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 28 ; + } +#Type of low vegetation anomaly +'tvla' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 29 ; + } +#Type of high vegetation anomaly +'tvha' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 30 ; + } +#Sea-ice cover anomaly +'sica' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 31 ; + } +#Snow albedo anomaly +'asna' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 32 ; + } +#Snow density anomaly +'rsna' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 33 ; + } +#Sea surface temperature anomaly +'ssta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 34 ; + } +#Ice surface temperature anomaly layer 1 +'istal1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 35 ; + } +#Ice surface temperature anomaly layer 2 +'istal2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 36 ; + } +#Ice surface temperature anomaly layer 3 +'istal3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 37 ; + } +#Ice surface temperature anomaly layer 4 +'istal4' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 38 ; + } +#Volumetric soil water anomaly layer 1 +'swval1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 39 ; + } +#Volumetric soil water anomaly layer 2 +'swval2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 40 ; + } +#Volumetric soil water anomaly layer 3 +'swval3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 41 ; + } +#Volumetric soil water anomaly layer 4 +'swval4' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 42 ; + } +#Soil type anomaly +'slta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 43 ; + } +#Snow evaporation anomaly +'esa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 44 ; + } +#Snowmelt anomaly +'smlta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 45 ; + } +#Solar duration anomaly +'sdura' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 46 ; + } +#Direct solar radiation anomaly +'dsrpa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress anomaly +'magssa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 48 ; + } +#10 metre wind gust anomaly +'10fga' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction anomaly +'lspfa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature in the last 24 hours anomaly +'mx2t24a' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature in the last 24 hours anomaly +'mn2t24a' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 52 ; + } +#Montgomery potential anomaly +'monta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 53 ; + } +#Pressure anomaly +'pa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours anomaly +'mn2t24a' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours anomaly +'mn2d24a' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface anomaly +'uvba' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface anomaly +'para' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 58 ; + } +#Convective available potential energy anomaly +'capea' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 59 ; + } +#Potential vorticity anomaly +'pva' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 60 ; + } +#Total precipitation from observations anomaly +'tpoa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 61 ; + } +#Observation count anomaly +'obcta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference anomaly +'stsktda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference anomaly +'ftsktda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 64 ; + } +#Skin temperature difference anomaly +'sktda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 65 ; + } +#Total column liquid water anomaly +'tclwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 78 ; + } +#Total column ice water anomaly +'tciwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 79 ; + } +#Vertically integrated total energy anomaly +'vitea' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 126 ; + } +#Atmospheric tide anomaly +'ata' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 127 ; + } +#Budget values anomaly +'bva' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 128 ; + } +#Geopotential anomaly +'za' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 129 ; + } +#Temperature anomaly +'ta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 130 ; + } +#U component of wind anomaly +'ua' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 131 ; + } +#V component of wind anomaly +'va' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 132 ; + } +#Specific humidity anomaly +'qa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 133 ; + } +#Surface pressure anomaly +'spa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 134 ; + } +#Vertical velocity (pressure) anomaly +'wa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 135 ; + } +#Total column water anomaly +'tcwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 136 ; + } +#Total column water vapour anomaly +'tcwva' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 137 ; + } +#Relative vorticity anomaly +'voa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 138 ; + } +#Soil temperature anomaly level 1 +'stal1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 139 ; + } +#Soil wetness anomaly level 1 +'swal1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 140 ; + } +#Snow depth anomaly +'sda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'lspa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 142 ; + } +#Convective precipitation anomaly +'cpa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) anomaly +'sfa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation anomaly +'blda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux anomaly +'sshfa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 146 ; + } +#Surface latent heat flux anomaly +'slhfa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 147 ; + } +#Charnock anomaly +'chnka' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 148 ; + } +#Surface net radiation anomaly +'snra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 149 ; + } +#Top net radiation anomaly +'tnra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 150 ; + } +#Mean sea level pressure anomaly +'msla' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure anomaly +'lspa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 152 ; + } +#Short-wave heating rate anomaly +'swhra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 153 ; + } +#Long-wave heating rate anomaly +'lwhra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 154 ; + } +#Relative divergence anomaly +'da' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 155 ; + } +#Height anomaly +'gha' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 156 ; + } +#Relative humidity anomaly +'ra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure anomaly +'tspa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 158 ; + } +#Boundary layer height anomaly +'blha' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 159 ; + } +#Standard deviation of orography anomaly +'sdora' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography anomaly +'isora' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography anomaly +'anora' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography anomaly +'slora' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 163 ; + } +#Total cloud cover anomaly +'tcca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 164 ; + } +#10 metre U wind component anomaly +'10ua' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 165 ; + } +#10 metre V wind component anomaly +'10va' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 166 ; + } +#2 metre temperature anomaly +'2ta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 167 ; + } +#2 metre dewpoint temperature anomaly +'2da' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 168 ; + } +#Surface solar radiation downwards anomaly +'ssrda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 169 ; + } +#Soil temperature anomaly level 2 +'slal2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 170 ; + } +#Soil wetness anomaly level 2 +'swal2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 171 ; + } +#Surface roughness anomaly +'sra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 173 ; + } +#Albedo anomaly +'ala' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards anomaly +'strda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 175 ; + } +#Surface net solar radiation anomaly +'ssra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation anomaly +'stra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 177 ; + } +#Top net solar radiation anomaly +'tsra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 178 ; + } +#Top net thermal radiation anomaly +'ttra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 179 ; + } +#East-West surface stress anomaly +'eqssa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 180 ; + } +#North-South surface stress anomaly +'nsssa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 181 ; + } +#Evaporation anomaly +'ea' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 182 ; + } +#Soil temperature anomaly level 3 +'stal3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 183 ; + } +#Soil wetness anomaly level 3 +'swal3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 184 ; + } +#Convective cloud cover anomaly +'ccca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 185 ; + } +#Low cloud cover anomaly +'lcca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 186 ; + } +#Medium cloud cover anomaly +'mcca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 187 ; + } +#High cloud cover anomaly +'hcca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 188 ; + } +#Sunshine duration anomaly +'sunda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance anomaly +'ewova' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance anomaly +'nsova' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance anomaly +'nwova' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance anomaly +'neova' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 193 ; + } +#Brightness temperature anomaly +'btmpa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress anomaly +'lgwsa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress anomaly +'mgwsa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation anomaly +'gwda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 197 ; + } +#Skin reservoir content anomaly +'srca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 198 ; + } +#Vegetation fraction anomaly +'vfa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography anomaly +'vsoa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres anomaly +'mx2ta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres anomaly +'mn2ta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio anomaly +'o3a' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights anomaly +'pawa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 204 ; + } +#Runoff anomaly +'roa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 205 ; + } +#Total column ozone anomaly +'tco3a' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 206 ; + } +#10 metre wind speed anomaly +'10ua' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 207 ; + } +#Top net solar radiation clear sky anomaly +'tsrca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 208 ; + } +#Top net thermal radiation clear sky anomaly +'ttrca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 209 ; + } +#Surface net solar radiation clear sky anomaly +'ssrca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'strca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 211 ; + } +#Solar insolation anomaly +'sia' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation anomaly +'dhra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion anomaly +'dhvda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection anomaly +'dhcca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 216 ; + } +#Diabatic heating by large-scale condensation anomaly +'dhlca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind anomaly +'vdzwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind anomaly +'vdmwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency anomaly +'ewgda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency anomaly +'nsgda' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind anomaly +'ctzwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind anomaly +'ctmwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity anomaly +'vdha' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection anomaly +'htcca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation anomaly +'htlca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity anomaly +'crnha' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 227 ; + } +#Total precipitation anomaly +'tpa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress anomaly +'iewsa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress anomaly +'inssa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux anomaly +'ishfa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux anomaly +'iea' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 232 ; + } +#Apparent surface humidity anomaly +'asqa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat anomaly +'lsrha' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 234 ; + } +#Skin temperature anomaly +'skta' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 anomaly +'stal4' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 anomaly +'swal4' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 237 ; + } +#Temperature of snow layer anomaly +'tsna' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 238 ; + } +#Convective snowfall anomaly +'csfa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 239 ; + } +#Large scale snowfall anomaly +'lsfa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency anomaly +'acfa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency anomaly +'alwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 242 ; + } +#Forecast albedo anomaly +'fala' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 243 ; + } +#Forecast surface roughness anomaly +'fsra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat anomaly +'flsra' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 245 ; + } +#Cloud liquid water content anomaly +'clwca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 246 ; + } +#Cloud ice water content anomaly +'ciwca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 247 ; + } +#Cloud cover anomaly +'cca' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency anomaly +'aiwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 249 ; + } +#Ice age anomaly +'iaa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature anomaly +'attea' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity anomaly +'athea' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind anomaly +'atzea' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind anomaly +'atmwa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 255 ; + } +#Snow evaporation +'esrate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 44 ; + } +#Snowmelt +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 45 ; + } +#Magnitude of surface stress +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; + } +#Convective precipitation +'cprate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation +'bldrate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 146 ; + } +#Surface latent heat flux +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 147 ; + } +#Surface net radiation +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 149 ; + } +#Short-wave heating rate +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 153 ; + } +#Long-wave heating rate +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 154 ; + } +#Surface solar radiation downwards +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 175 ; + } +#Surface solar radiation +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 176 ; + } +#Surface thermal radiation +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 177 ; + } +#Top solar radiation +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 178 ; + } +#Top thermal radiation +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 179 ; + } +#East-West surface stress +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 180 ; + } +#North-South surface stress +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 181 ; + } +#Evaporation +'erate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 182 ; + } +#Sunshine duration +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'gwdrate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 197 ; + } +#Runoff +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 211 ; + } +#Solar insolation +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 212 ; + } +#Total precipitation +'tprate' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 228 ; + } +#Convective snowfall +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 239 ; + } +#Large scale snowfall +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 240 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 255 ; + } +#Snow evaporation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 44 ; + } +#Snowmelt anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 45 ; + } +#Magnitude of surface stress anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 142 ; + } +#Convective precipitation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) anomalous rate of accumulation +'sfara' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 146 ; + } +#Surface latent heat flux anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 147 ; + } +#Surface net radiation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 149 ; + } +#Short-wave heating rate anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 153 ; + } +#Long-wave heating rate anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 154 ; + } +#Surface solar radiation downwards anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 175 ; + } +#Surface solar radiation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 176 ; + } +#Surface thermal radiation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 177 ; + } +#Top solar radiation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 178 ; + } +#Top thermal radiation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 179 ; + } +#East-West surface stress anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 180 ; + } +#North-South surface stress anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 181 ; + } +#Evaporation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 182 ; + } +#Sunshine duration anomalous rate of accumulation +'sundara' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 197 ; + } +#Runoff anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 211 ; + } +#Solar insolation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 212 ; + } +#Total precipitation anomalous rate of accumulation +'tpara' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 228 ; + } +#Convective snowfall anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 239 ; + } +#Large scale snowfall anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 240 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 255 ; + } +#Total soil moisture +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 6 ; + } +#Surface runoff +'sro' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 8 ; + } +#Sub-surface runoff +'ssro' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 9 ; + } +#Fraction of sea-ice in sea +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 31 ; + } +#Open-sea surface temperature +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 34 ; + } +#Volumetric soil water layer 1 +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 42 ; + } +#10 metre wind gust in the last 24 hours +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 55 ; + } +#Net primary productivity +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 83 ; + } +#10m U wind over land +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 85 ; + } +#10m V wind over land +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 86 ; + } +#1.5m temperature over land +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 87 ; + } +#1.5m dewpoint temperature over land +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 88 ; + } +#Top incoming solar radiation +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 89 ; + } +#Top outgoing solar radiation +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 90 ; + } +#Mean sea surface temperature +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 94 ; + } +#1.5m specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 95 ; + } +#Sea-ice thickness +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 98 ; + } +#Liquid water potential temperature +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 99 ; + } +#Ocean ice concentration +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 110 ; + } +#Ocean mean ice depth +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 111 ; + } +#Soil temperature layer 1 +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 139 ; + } +#Average potential temperature in upper 293.4m +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 164 ; + } +#1.5m temperature +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 167 ; + } +#1.5m dewpoint temperature +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 168 ; + } +#Soil temperature layer 2 +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 170 ; + } +#Average salinity in upper 293.4m +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 175 ; + } +#Soil temperature layer 3 +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 202 ; + } +#Soil temperature layer 4 +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 236 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 255 ; + } +#Total soil moisture +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 6 ; + } +#Fraction of sea-ice in sea +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 31 ; + } +#Open-sea surface temperature +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 34 ; + } +#Volumetric soil water layer 1 +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 42 ; + } +#10m wind gust in the last 24 hours +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 55 ; + } +#Net primary productivity +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 83 ; + } +#10m U wind over land +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 85 ; + } +#10m V wind over land +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 86 ; + } +#1.5m temperature over land +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 87 ; + } +#1.5m dewpoint temperature over land +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 88 ; + } +#Top incoming solar radiation +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 89 ; + } +#Top outgoing solar radiation +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 90 ; + } +#Ocean ice concentration +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 110 ; + } +#Ocean mean ice depth +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 111 ; + } +#Soil temperature layer 1 +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 139 ; + } +#Average potential temperature in upper 293.4m +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 164 ; + } +#1.5m temperature +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 167 ; + } +#1.5m dewpoint temperature +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 168 ; + } +#Soil temperature layer 2 +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 170 ; + } +#Average salinity in upper 293.4m +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 175 ; + } +#Soil temperature layer 3 +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 202 ; + } +#Soil temperature layer 4 +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 236 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 255 ; + } +#Total soil wetness +'tsw' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 149 ; + } +#Surface net solar radiation +'ssr' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation +'str' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 177 ; + } +#Top net solar radiation +'tsr' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 178 ; + } +#Top net thermal radiation +'ttr' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 179 ; + } +#Snow depth +'sdsien' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 141 ; + } +#Field capacity +'cap' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 170 ; + } +#Wilting point +'wiltsien' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 171 ; + } +#Roughness length +'sr' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 173 ; + } +#Total soil moisture +'tsm' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 229 ; + } +#2 metre dewpoint temperature difference +'2ddiff' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 168 ; + } +#downward shortwave radiant flux density +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 1 ; + } +#upward shortwave radiant flux density +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 2 ; + } +#downward longwave radiant flux density +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 3 ; + } +#upward longwave radiant flux density +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 4 ; + } +#downwd photosynthetic active radiant flux density +'apab_s' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 5 ; + } +#net shortwave flux +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 6 ; + } +#net longwave flux +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 7 ; + } +#total net radiative flux density +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 8 ; + } +#downw shortw radiant flux density, cloudfree part +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 9 ; + } +#upw shortw radiant flux density, cloudy part +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 10 ; + } +#downw longw radiant flux density, cloudfree part +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 11 ; + } +#upw longw radiant flux density, cloudy part +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 12 ; + } +#shortwave radiative heating rate +'sohr_rad' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 13 ; + } +#longwave radiative heating rate +'thhr_rad' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 14 ; + } +#total radiative heating rate +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 15 ; + } +#soil heat flux, surface +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 16 ; + } +#soil heat flux, bottom of layer +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 17 ; + } +#fractional cloud cover +'clc' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 29 ; + } +#cloud cover, grid scale +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 30 ; + } +#specific cloud water content +'qc' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 31 ; + } +#cloud water content, grid scale, vert integrated +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 32 ; + } +#specific cloud ice content, grid scale +'qi' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 33 ; + } +#cloud ice content, grid scale, vert integrated +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 34 ; + } +#specific rainwater content, grid scale +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 35 ; + } +#specific snow content, grid scale +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 36 ; + } +#specific rainwater content, gs, vert. integrated +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 37 ; + } +#specific snow content, gs, vert. integrated +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 38 ; + } +#total column water +'twater' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 41 ; + } +#vert. integral of divergence of tot. water content +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 42 ; + } +#cloud covers CH_CM_CL (000...888) +'ch_cm_cl' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 50 ; + } +#cloud cover CH (0..8) +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 51 ; + } +#cloud cover CM (0..8) +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 52 ; + } +#cloud cover CL (0..8) +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 53 ; + } +#total cloud cover (0..8) +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 54 ; + } +#fog (0..8) +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 55 ; + } +#fog +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 56 ; + } +#cloud cover, convective cirrus +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 60 ; + } +#specific cloud water content, convective clouds +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 61 ; + } +#cloud water content, conv clouds, vert integrated +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 62 ; + } +#specific cloud ice content, convective clouds +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 63 ; + } +#cloud ice content, conv clouds, vert integrated +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 64 ; + } +#convective mass flux +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 65 ; + } +#Updraft velocity, convection +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 66 ; + } +#entrainment parameter, convection +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 67 ; + } +#cloud base, convective clouds (above msl) +'hbas_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 68 ; + } +#cloud top, convective clouds (above msl) +'htop_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 69 ; + } +#convective layers (00...77) (BKE) +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 70 ; + } +#KO-index +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 71 ; + } +#convection base index +'bas_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 72 ; + } +#convection top index +'top_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 73 ; + } +#convective temperature tendency +'dt_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 74 ; + } +#convective tendency of specific humidity +'dqv_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 75 ; + } +#convective tendency of total heat +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 76 ; + } +#convective tendency of total water +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 77 ; + } +#convective momentum tendency (X-component) +'du_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 78 ; + } +#convective momentum tendency (Y-component) +'dv_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 79 ; + } +#convective vorticity tendency +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 80 ; + } +#convective divergence tendency +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 81 ; + } +#top of dry convection (above msl) +'htop_dc' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 82 ; + } +#dry convection top index +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 83 ; + } +#height of 0 degree Celsius isotherm above msl +'hzerocl' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 84 ; + } +#height of snow-fall limit +'snowlmt' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 85 ; + } +#spec. content of precip. particles +'qrs_gsp' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 99 ; + } +#surface precipitation rate, rain, grid scale +'prr_gsp' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 100 ; + } +#surface precipitation rate, snow, grid scale +'prs_gsp' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 101 ; + } +#surface precipitation amount, rain, grid scale +'rain_gsp' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 102 ; + } +#surface precipitation rate, rain, convective +'prr_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 111 ; + } +#surface precipitation rate, snow, convective +'prs_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 112 ; + } +#surface precipitation amount, rain, convective +'rain_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 113 ; + } +#deviation of pressure from reference value +'pp' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 139 ; + } +#coefficient of horizontal diffusion +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 150 ; + } +#Maximum wind velocity +'vmax_10m' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 187 ; + } +#water content of interception store +'w_i' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 200 ; + } +#snow temperature +'t_snow' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 203 ; + } +#ice surface temperature +'t_ice' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 215 ; + } +#convective available potential energy +'cape_con' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 241 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 255 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'aermr01' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'aermr02' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'aermr03' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'aermr04' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + scaledValueOfSecondSize = 55 ; + productDefinitionTemplateNumber = 44 ; + aerosolType = 62001 ; + typeOfSizeInterval = 2 ; + scaleFactorOfFirstSize = 8 ; + scaledValueOfFirstSize = 3 ; + scaleFactorOfSecondSize = 8 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'aermr04' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'aermr05' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'aermr06' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'aermr07' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'aermr08' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'aermr09' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'aermr10' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'aermr11' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 11 ; + } +#Aerosol type 12 mixing ratio +'aermr12' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 12 ; + } +#Aerosol type 1 source/gain accumulated +'aergn01' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 16 ; + } +#Aerosol type 2 source/gain accumulated +'aergn02' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 17 ; + } +#Aerosol type 3 source/gain accumulated +'aergn03' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 18 ; + } +#Aerosol type 4 source/gain accumulated +'aergn04' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 19 ; + } +#Aerosol type 5 source/gain accumulated +'aergn05' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 20 ; + } +#Aerosol type 6 source/gain accumulated +'aergn06' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 21 ; + } +#Aerosol type 7 source/gain accumulated +'aergn07' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 22 ; + } +#Aerosol type 8 source/gain accumulated +'aergn08' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 23 ; + } +#Aerosol type 9 source/gain accumulated +'aergn09' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 24 ; + } +#Aerosol type 10 source/gain accumulated +'aergn10' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 25 ; + } +#Aerosol type 11 source/gain accumulated +'aergn11' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 26 ; + } +#Aerosol type 12 source/gain accumulated +'aergn12' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'aerls01' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'aerls02' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'aerls03' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'aerls04' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'aerls05' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'aerls06' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'aerls07' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'aerls08' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'aerls09' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'aerls10' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'aerls11' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'aerls12' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 42 ; + } +#Aerosol precursor mixing ratio +'aerpr' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 46 ; + } +#Aerosol small mode mixing ratio +'aersm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 47 ; + } +#Aerosol large mode mixing ratio +'aerlg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 48 ; + } +#Aerosol precursor optical depth +'aodpr' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 49 ; + } +#Aerosol small mode optical depth +'aodsm' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 50 ; + } +#Aerosol large mode optical depth +'aodlg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 51 ; + } +#Dust emission potential +'aerdep' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 52 ; + } +#Lifting threshold speed +'aerlts' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 53 ; + } +#Soil clay content +'aerscc' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 54 ; + } +#Carbon Dioxide +'co2' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + constituentType = 3 ; + productDefinitionTemplateNumber = 40 ; + } +#Carbon Dioxide +'co2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 61 ; + } +#Methane +'ch4' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 62 ; + } +#Nitrous oxide +'n2o' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 63 ; + } +#Total column Carbon Dioxide +'tcco2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 64 ; + } +#Total column Methane +'tcch4' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 65 ; + } +#Total column Nitrous oxide +'tcn2o' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 66 ; + } +#Ocean flux of Carbon Dioxide +'co2of' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'co2nbf' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'co2apf' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 69 ; + } +#Methane Surface Fluxes +'ch4f' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'kch4' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 71 ; + } +#Wildfire flux of Carbon Dioxide +'co2fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 80 ; + } +#Wildfire flux of Carbon Monoxide +'cofire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 81 ; + } +#Wildfire flux of Methane +'ch4fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'nmhcfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 83 ; + } +#Wildfire flux of Hydrogen +'h2fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'noxfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 85 ; + } +#Wildfire flux of Nitrous Oxide +'n2ofire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'pm2p5fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 87 ; + } +#Wildfire flux of Total Particulate Matter +'tpmfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'tcfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 89 ; + } +#Wildfire flux of Organic Carbon +'ocfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 90 ; + } +#Wildfire flux of Black Carbon +'bcfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 91 ; + } +#Wildfire overall flux of burnt Carbon +'cfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 92 ; + } +#Wildfire fraction of C4 plants +'c4ffire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 93 ; + } +#Wildfire vegetation map index +'vegfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 94 ; + } +#Wildfire Combustion Completeness +'ccfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'flfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 96 ; + } +#Wildfire fraction of area observed +'offire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 97 ; + } +#Wildfire observed area +'oafire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 98 ; + } +#Wildfire radiative power +'frpfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 99 ; + } +#Wildfire combustion rate +'crfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 100 ; + } +#Nitrogen dioxide +'no2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 121 ; + } +#Sulphur dioxide +'so2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 122 ; + } +#Carbon monoxide +'co' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 123 ; + } +#Formaldehyde +'hcho' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 124 ; + } +#Total column Nitrogen dioxide +'tcno2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 125 ; + } +#Total column Sulphur dioxide +'tcso2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 126 ; + } +#Total column Carbon monoxide +'tcco' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 127 ; + } +#Total column Formaldehyde +'tchcho' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 128 ; + } +#Nitrogen Oxides +'nox' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 129 ; + } +#Total Column Nitrogen Oxides +'tcnox' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'grg1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 131 ; + } +#Total column GRG tracer 1 +'tcgrg1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'grg2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 133 ; + } +#Total column GRG tracer 2 +'tcgrg2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'grg3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 135 ; + } +#Total column GRG tracer 3 +'tcgrg3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'grg4' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 137 ; + } +#Total column GRG tracer 4 +'tcgrg4' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'grg5' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 139 ; + } +#Total column GRG tracer 5 +'tcgrg5' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'grg6' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 141 ; + } +#Total column GRG tracer 6 +'tcgrg6' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'grg7' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 143 ; + } +#Total column GRG tracer 7 +'tcgrg7' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'grg8' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 145 ; + } +#Total column GRG tracer 8 +'tcgrg8' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'grg9' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 147 ; + } +#Total column GRG tracer 9 +'tcgrg9' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'grg10' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 149 ; + } +#Total column GRG tracer 10 +'tcgrg10' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 150 ; + } +#Surface flux Nitrogen oxides +'sfnox' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 151 ; + } +#Surface flux Nitrogen dioxide +'sfno2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 152 ; + } +#Surface flux Sulphur dioxide +'sfso2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 153 ; + } +#Surface flux Carbon monoxide +'sfco2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 154 ; + } +#Surface flux Formaldehyde +'sfhcho' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 155 ; + } +#Surface flux GEMS Ozone +'sfgo3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 156 ; + } +#Surface flux reactive tracer 1 +'sfgr1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 157 ; + } +#Surface flux reactive tracer 2 +'sfgr2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 158 ; + } +#Surface flux reactive tracer 3 +'sfgr3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 159 ; + } +#Surface flux reactive tracer 4 +'sfgr4' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 160 ; + } +#Surface flux reactive tracer 5 +'sfgr5' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 161 ; + } +#Surface flux reactive tracer 6 +'sfgr6' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 162 ; + } +#Surface flux reactive tracer 7 +'sfgr7' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 163 ; + } +#Surface flux reactive tracer 8 +'sfgr8' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 164 ; + } +#Surface flux reactive tracer 9 +'sfgr9' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 165 ; + } +#Surface flux reactive tracer 10 +'sfgr10' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 166 ; + } +#Radon +'ra' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 181 ; + } +#Sulphur Hexafluoride +'sf6' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 182 ; + } +#Total column Radon +'tcra' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 183 ; + } +#Total column Sulphur Hexafluoride +'tcsf6' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'sf6apf' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 185 ; + } +#GEMS Ozone +'go3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 203 ; + } +#GEMS Total column ozone +'gtco3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'aod550' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'ssaod550' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'duaod550' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'omaod550' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'bcaod550' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'suaod550' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'aod469' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'aod670' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'aod865' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'aod1240' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 216 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'aermr01diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'aermr02diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'aermr03diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'aermr04diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'aermr05diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'aermr06diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'aermr07diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'aermr08diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'aermr09diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'aermr10diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'aermr11diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 11 ; + } +#Aerosol type 12 mixing ratio +'aermr12diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 12 ; + } +#Aerosol type 1 source/gain accumulated +'aergn01diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 16 ; + } +#Aerosol type 2 source/gain accumulated +'aergn02diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 17 ; + } +#Aerosol type 3 source/gain accumulated +'aergn03diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 18 ; + } +#Aerosol type 4 source/gain accumulated +'aergn04diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 19 ; + } +#Aerosol type 5 source/gain accumulated +'aergn05diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 20 ; + } +#Aerosol type 6 source/gain accumulated +'aergn06diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 21 ; + } +#Aerosol type 7 source/gain accumulated +'aergn07diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 22 ; + } +#Aerosol type 8 source/gain accumulated +'aergn08diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 23 ; + } +#Aerosol type 9 source/gain accumulated +'aergn09diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 24 ; + } +#Aerosol type 10 source/gain accumulated +'aergn10diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 25 ; + } +#Aerosol type 11 source/gain accumulated +'aergn11diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 26 ; + } +#Aerosol type 12 source/gain accumulated +'aergn12diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'aerls01diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'aerls02diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'aerls03diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'aerls04diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'aerls05diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'aerls06diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'aerls07diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'aerls08diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'aerls09diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'aerls10diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'aerls11diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'aerls12diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 42 ; + } +#Aerosol precursor mixing ratio +'aerprdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 46 ; + } +#Aerosol small mode mixing ratio +'aersmdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 47 ; + } +#Aerosol large mode mixing ratio +'aerlgdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 48 ; + } +#Aerosol precursor optical depth +'aodprdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 49 ; + } +#Aerosol small mode optical depth +'aodsmdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 50 ; + } +#Aerosol large mode optical depth +'aodlgdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 51 ; + } +#Dust emission potential +'aerdepdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 52 ; + } +#Lifting threshold speed +'aerltsdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 53 ; + } +#Soil clay content +'aersccdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 54 ; + } +#Carbon Dioxide +'co2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 61 ; + } +#Methane +'ch4diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 62 ; + } +#Nitrous oxide +'n2odiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 63 ; + } +#Total column Carbon Dioxide +'tcco2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 64 ; + } +#Total column Methane +'tcch4diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 65 ; + } +#Total column Nitrous oxide +'tcn2odiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 66 ; + } +#Ocean flux of Carbon Dioxide +'co2ofdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'co2nbfdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'co2apfdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 69 ; + } +#Methane Surface Fluxes +'ch4fdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'kch4diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 71 ; + } +#Wildfire flux of Carbon Dioxide +'co2firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 80 ; + } +#Wildfire flux of Carbon Monoxide +'cofirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 81 ; + } +#Wildfire flux of Methane +'ch4firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'nmhcfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 83 ; + } +#Wildfire flux of Hydrogen +'h2firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'noxfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 85 ; + } +#Wildfire flux of Nitrous Oxide +'n2ofirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'pm2p5firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 87 ; + } +#Wildfire flux of Total Particulate Matter +'tpmfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'tcfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 89 ; + } +#Wildfire flux of Organic Carbon +'ocfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 90 ; + } +#Wildfire flux of Black Carbon +'bcfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 91 ; + } +#Wildfire overall flux of burnt Carbon +'cfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 92 ; + } +#Wildfire fraction of C4 plants +'c4ffirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 93 ; + } +#Wildfire vegetation map index +'vegfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 94 ; + } +#Wildfire Combustion Completeness +'ccfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'flfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 96 ; + } +#Wildfire fraction of area observed +'offirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 97 ; + } +#Wildfire observed area +'oafirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 98 ; + } +#Wildfire radiative power +'frpfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 99 ; + } +#Wildfire combustion rate +'crfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 100 ; + } +#Nitrogen dioxide +'no2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 121 ; + } +#Sulphur dioxide +'so2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 122 ; + } +#Carbon monoxide +'codiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 123 ; + } +#Formaldehyde +'hchodiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 124 ; + } +#Total column Nitrogen dioxide +'tcno2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 125 ; + } +#Total column Sulphur dioxide +'tcso2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 126 ; + } +#Total column Carbon monoxide +'tccodiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 127 ; + } +#Total column Formaldehyde +'tchchodiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 128 ; + } +#Nitrogen Oxides +'noxdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 129 ; + } +#Total Column Nitrogen Oxides +'tcnoxdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'grg1diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 131 ; + } +#Total column GRG tracer 1 +'tcgrg1diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'grg2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 133 ; + } +#Total column GRG tracer 2 +'tcgrg2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'grg3diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 135 ; + } +#Total column GRG tracer 3 +'tcgrg3diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'grg4diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 137 ; + } +#Total column GRG tracer 4 +'tcgrg4diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'grg5diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 139 ; + } +#Total column GRG tracer 5 +'tcgrg5diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'grg6diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 141 ; + } +#Total column GRG tracer 6 +'tcgrg6diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'grg7diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 143 ; + } +#Total column GRG tracer 7 +'tcgrg7diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'grg8diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 145 ; + } +#Total column GRG tracer 8 +'tcgrg8diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'grg9diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 147 ; + } +#Total column GRG tracer 9 +'tcgrg9diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'grg10diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 149 ; + } +#Total column GRG tracer 10 +'tcgrg10diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 150 ; + } +#Surface flux Nitrogen oxides +'sfnoxdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 151 ; + } +#Surface flux Nitrogen dioxide +'sfno2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 152 ; + } +#Surface flux Sulphur dioxide +'sfso2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 153 ; + } +#Surface flux Carbon monoxide +'sfco2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 154 ; + } +#Surface flux Formaldehyde +'sfhchodiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 155 ; + } +#Surface flux GEMS Ozone +'sfgo3diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 156 ; + } +#Surface flux reactive tracer 1 +'sfgr1diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 157 ; + } +#Surface flux reactive tracer 2 +'sfgr2diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 158 ; + } +#Surface flux reactive tracer 3 +'sfgr3diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 159 ; + } +#Surface flux reactive tracer 4 +'sfgr4diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 160 ; + } +#Surface flux reactive tracer 5 +'sfgr5diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 161 ; + } +#Surface flux reactive tracer 6 +'sfgr6diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 162 ; + } +#Surface flux reactive tracer 7 +'sfgr7diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 163 ; + } +#Surface flux reactive tracer 8 +'sfgr8diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 164 ; + } +#Surface flux reactive tracer 9 +'sfgr9diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 165 ; + } +#Surface flux reactive tracer 10 +'sfgr10diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 166 ; + } +#Radon +'radiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 181 ; + } +#Sulphur Hexafluoride +'sf6diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 182 ; + } +#Total column Radon +'tcradiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 183 ; + } +#Total column Sulphur Hexafluoride +'tcsf6diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'sf6apfdiff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 185 ; + } +#GEMS Ozone +'go3diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 203 ; + } +#GEMS Total column ozone +'gtco3diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'aod550diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'ssaod550diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'duaod550diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'omaod550diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'bcaod550diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'suaod550diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'aod469diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'aod670diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'aod865diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'aod1240diff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 216 ; + } +#Total precipitation observation count +'tpoc' = { + discipline = 192 ; + parameterCategory = 220 ; + parameterNumber = 228 ; + } +#Friction velocity +'zust' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; + } +#Mean temperature at 2 metres +'mean2t' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 4 ; + } +#Mean of 10 metre wind speed +'mean10ws' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; + } +#Mean total cloud cover +'meantcc' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; + } +#Lake depth +'dl' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 7 ; + } +#Lake mix-layer temperature +'lmlt' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 8 ; + } +#Lake mix-layer depth +'lmld' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 9 ; + } +#Lake bottom temperature +'lblt' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 10 ; + } +#Lake total layer temperature +'ltlt' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 11 ; + } +#Lake shape factor +'lshf' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 12 ; + } +#Lake ice temperature +'lict' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 13 ; + } +#Lake ice depth +'licd' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'dndzn' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'dndza' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 16 ; + } +#Duct base height +'dctb' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 17 ; + } +#Trapping layer base height +'tplb' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 18 ; + } +#Trapping layer top height +'tplt' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 19 ; + } +#Neutral wind at 10 m u-component +'u10n' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 131 ; + } +#Neutral wind at 10 m v-component +'v10n' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 132 ; + } +#Snow evaporation (variable resolution) +'esvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 44 ; + } +#Snowmelt (variable resolution) +'smltvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 45 ; + } +#Solar duration (variable resolution) +'sdurvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 46 ; + } +#Downward UV radiation at the surface (variable resolution) +'uvbvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface (variable resolution) +'parvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 58 ; + } +#Stratiform precipitation (Large-scale precipitation) (variable resolution) +'lspvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 142 ; + } +#Convective precipitation (variable resolution) +'cpvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) (variable resolution) +'sfvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation (variable resolution) +'bldvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux (variable resolution) +'sshfvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 146 ; + } +#Surface latent heat flux (variable resolution) +'slhfvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 147 ; + } +#Surface solar radiation downwards (variable resolution) +'ssrdvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards (variable resolution) +'strdvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 175 ; + } +#Surface net solar radiation (variable resolution) +'ssrvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation (variable resolution) +'strvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 177 ; + } +#Top net solar radiation (variable resolution) +'tsrvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 178 ; + } +#Top net thermal radiation (variable resolution) +'ttrvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 179 ; + } +#East-West surface stress (variable resolution) +'ewssvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 180 ; + } +#North-South surface stress (variable resolution) +'nsssvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 181 ; + } +#Evaporation (variable resolution) +'evar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 182 ; + } +#Sunshine duration (variable resolution) +'sundvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress (variable resolution) +'lgwsvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress (variable resolution) +'mgwsvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation (variable resolution) +'gwdvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 197 ; + } +#Skin reservoir content (variable resolution) +'srcvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 198 ; + } +#Runoff (variable resolution) +'rovar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky (variable resolution) +'tsrcvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky (variable resolution) +'ttrcvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky (variable resolution) +'ssrcvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky (variable resolution) +'strcvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation (variable resolution) +'tisrvar' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 212 ; + } +#Surface temperature significance +'sts' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 139 ; + } +#Mean sea level pressure significance +'msls' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 151 ; + } +#2 metre temperature significance +'2ts' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 167 ; + } +#Total precipitation significance +'tps' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 228 ; + } +#U-component stokes drift +'ust' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; + } +#V-component stokes drift +'vst' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; + } +#Wildfire radiative power maximum +'maxfrpfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'so2fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'ch3ohfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'c2h5ohfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'c3h8fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'c2h4fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'c3h6fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'c5h8fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'terpenesfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'toluenefire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'hialkenesfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'hialkanesfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'ch2ofire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'c2h4ofire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'c3h6ofire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'nh3fire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'c2h6sfire' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 117 ; + } +#Wildfire radiative power maximum +'maxfrpfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'so2firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'ch3ohfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'c2h5ohfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'c3h8firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'c2h4firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'c3h6firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'c5h8firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'terpenesfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'toluenefirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'hialkenesfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'hialkanesfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'ch2ofirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'c2h4ofirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'c3h6ofirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'nh3firediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'c2h6sfirediff' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 117 ; + } +#V-tendency from non-orographic wave drag +'vtnowd' = { + localTablesVersion = 228 ; + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 134 ; + } +#U-tendency from non-orographic wave drag +'utnowd' = { + localTablesVersion = 228 ; + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 136 ; + } +#100 metre U wind component +'100u' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 246 ; + } +#100 metre V wind component +'100v' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 247 ; + } +#ASCAT first soil moisture CDF matching parameter +'ascat_sm_cdfa' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 253 ; + } +#ASCAT second soil moisture CDF matching parameter +'ascat_sm_cdfb' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 254 ; +} diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def new file mode 100644 index 000000000..17d2e6f86 --- /dev/null +++ b/definitions/grib2/localConcepts/ecmf/units.def @@ -0,0 +1,17149 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Total precipitation of at least 1 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 60 ; + } +#Total precipitation of at least 5 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 61 ; + } +#Total precipitation of at least 40 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 82 ; + } +#Total precipitation of at least 60 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 83 ; + } +#Total precipitation of at least 80 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 84 ; + } +#Total precipitation of at least 100 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 85 ; + } +#Total precipitation of at least 150 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 86 ; + } +#Total precipitation of at least 200 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 87 ; + } +#Total precipitation of at least 300 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 88 ; + } +#Equivalent potential temperature +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 5 ; + } +#Soil sand fraction +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 6 ; + } +#Soil clay fraction +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 7 ; + } +#Surface runoff +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 8 ; + } +#Sub-surface runoff +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 9 ; + } +#U component of divergent wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 11 ; + } +#V component of divergent wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 12 ; + } +#U component of rotational wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 13 ; + } +#V component of rotational wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 14 ; + } +#UV visible albedo for direct radiation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 15 ; + } +#UV visible albedo for diffuse radiation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 16 ; + } +#Near IR albedo for direct radiation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 17 ; + } +#Near IR albedo for diffuse radiation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 18 ; + } +#Clear sky surface UV +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 19 ; + } +#Clear sky surface photosynthetically active radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 20 ; + } +#Unbalanced component of temperature +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence +'s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 25 ; + } +#Lake cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 26 ; + } +#Low vegetation cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 27 ; + } +#High vegetation cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 28 ; + } +#Type of low vegetation +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 29 ; + } +#Type of high vegetation +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 30 ; + } +#Sea-ice cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 31 ; + } +#Snow albedo +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 32 ; + } +#Snow density +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 33 ; + } +#Sea surface temperature +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 34 ; + } +#Ice temperature layer 1 +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 35 ; + } +#Ice temperature layer 2 +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 36 ; + } +#Ice temperature layer 3 +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 37 ; + } +#Ice temperature layer 4 +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 42 ; + } +#Soil type +'~' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Snow evaporation +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 44 ; + } +#Snowmelt +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 45 ; + } +#Solar duration +'s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 46 ; + } +#Direct solar radiation +'W m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 48 ; + } +#10 metre wind gust +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction +'s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 50 ; + } +#Maximum temperature at 2 metres in the last 24 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 2 ; + lengthOfTimeRange = 24 ; + } +#Minimum temperature at 2 metres in the last 24 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + lengthOfTimeRange = 24 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 3 ; + } +#Montgomery potential +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 53 ; + } +#Mean temperature at 2 metres in the last 24 hours +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 58 ; + } +#Observation count +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'m**2 m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'m**2 m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'s m**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'s m**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 71 ; + } +#Instantaneous surface solar radiation downwards +'W m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 72 ; + } +#Instantaneous surface thermal radiation downwards +'W m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 73 ; + } +#Standard deviation of filtered subgrid orography +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 74 ; + } +#Specific rain water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 85 ; + } +#Specific snow water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 86 ; + } +#Eta-coordinate vertical velocity +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 32 ; + } +#Total column liquid water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 78 ; + } +#Total column ice water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 79 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 80 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 81 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 82 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 83 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 84 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 85 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 86 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 87 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 88 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 89 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 90 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 91 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 92 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 93 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 94 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 95 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 96 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 97 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 98 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 99 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 100 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 101 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 102 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 103 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 104 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 105 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 106 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 107 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 108 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 109 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 110 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 111 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 112 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 113 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 114 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 115 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 116 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 117 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 118 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 119 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + lengthOfTimeRange = 6 ; + typeOfStatisticalProcessing = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + lengthOfTimeRange = 6 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#10 metre wind gust in the last 6 hours +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 123 ; + } +#Surface emissivity +'dimensionless' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 124 ; + } +#Vertically integrated total energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'Various' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 126 ; + } +#Atmospheric tide +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 127 ; + } +#Budget values +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 128 ; + } +#Geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Total column water vapour +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 137 ; + } +#Vorticity (relative) +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + } +#Soil temperature level 1 +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 140 ; + } +#Snow depth +'m of water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + unitsFactor = 1000 ; + } +#Large-scale precipitation +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 142 ; + } +#Convective precipitation +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 10 ; + unitsFactor = 1000 ; + } +#Snowfall +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation +'J m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + } +#Charnock +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 148 ; + } +#Surface net radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 149 ; + } +#Top net radiation +'W m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 150 ; + } +#Logarithm of surface pressure +'~' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + } +#Short-wave heating rate +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 153 ; + } +#Long-wave heating rate +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 154 ; + } +#Divergence +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + } +#Relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Tendency of surface pressure +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 158 ; + } +#Boundary layer height +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 159 ; + } +#Standard deviation of orography +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography +'radians' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 163 ; + } +#Total cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 164 ; + } +#10 metre U wind component +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#10 metre V wind component +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2 metre temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Surface solar radiation downwards +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 171 ; + } +#Surface roughness +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Albedo +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 175 ; + } +#Top net solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 178 ; + } +#East-West surface stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 180 ; + } +#North-South surface stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 181 ; + } +#Evaporation +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 184 ; + } +#Convective cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 185 ; + } +#Low cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 186 ; + } +#Medium cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 187 ; + } +#High cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 188 ; + } +#East-West component of sub-gridscale orographic variance +'m**2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance +'m**2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance +'m**2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance +'m**2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 193 ; + } +#Longitudinal component of gravity wave stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 197 ; + } +#Skin reservoir content +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 198 ; + } +#Vegetation fraction +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography +'m**2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + } +#Precipitation analysis weights +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 204 ; + } +#Runoff +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 205 ; + } +#Total column ozone +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 206 ; + } +#Top net solar radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 212 ; + } +#Vertically integrated moisture divergence +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 213 ; + } +#Diabatic heating by radiation +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 226 ; + } +#Tendency due to removal of negative humidity +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 227 ; + } +#Total precipitation +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + unitsFactor = 1000 ; + } +#Instantaneous X surface stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 230 ; + } +#Instantaneous surface sensible heat flux +'W m**-2' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 232 ; + } +#Apparent surface humidity +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 234 ; + } +#Soil temperature level 4 +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 237 ; + } +#Temperature of snow layer +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 238 ; + } +#Convective snowfall +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 239 ; + } +#Large-scale snowfall +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 242 ; + } +#Forecast albedo +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 243 ; + } +#Forecast surface roughness +'m' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 83 ; + } +#Specific cloud ice water content +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 84 ; + } +#Cloud cover +'(0 - 1)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 32 ; + } +#Accumulated ice water tendency +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 249 ; + } +#Ice age +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature +'K' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind +'m s**-1' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 128 ; + parameterNumber = 255 ; + } +#Stream function difference +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 1 ; + } +#Velocity potential difference +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 2 ; + } +#Potential temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 5 ; + } +#U component of divergent wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 11 ; + } +#V component of divergent wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 12 ; + } +#U component of rotational wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 13 ; + } +#V component of rotational wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence difference +'s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 25 ; + } +#Lake cover difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 26 ; + } +#Low vegetation cover difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 27 ; + } +#High vegetation cover difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 28 ; + } +#Type of low vegetation difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 29 ; + } +#Type of high vegetation difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 30 ; + } +#Sea-ice cover difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 31 ; + } +#Snow albedo difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 32 ; + } +#Snow density difference +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 33 ; + } +#Sea surface temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 34 ; + } +#Ice surface temperature layer 1 difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 35 ; + } +#Ice surface temperature layer 2 difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 36 ; + } +#Ice surface temperature layer 3 difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 37 ; + } +#Ice surface temperature layer 4 difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 difference +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 difference +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 difference +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 difference +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 42 ; + } +#Soil type difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 43 ; + } +#Snow evaporation difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 44 ; + } +#Snowmelt difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 45 ; + } +#Solar duration difference +'s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 46 ; + } +#Direct solar radiation difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress difference +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 48 ; + } +#10 metre wind gust difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction difference +'s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 52 ; + } +#Montgomery potential difference +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 53 ; + } +#Pressure difference +'Pa' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 58 ; + } +#Convective available potential energy difference +'J kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 59 ; + } +#Potential vorticity difference +'K m**2 kg**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 60 ; + } +#Total precipitation from observations difference +'Millimetres*100 + number of stations' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 61 ; + } +#Observation count difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'m**2 m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'m**2 m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'s m**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'s m**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 71 ; + } +#Total column liquid water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 78 ; + } +#Total column ice water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 79 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 80 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 81 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 82 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 83 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 84 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 85 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 86 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 87 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 88 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 89 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 90 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 91 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 92 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 93 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 94 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 95 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 96 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 97 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 98 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 99 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 100 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 101 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 102 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 103 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 104 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 105 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 106 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 107 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 108 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 109 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 110 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 111 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 112 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 113 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 114 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 115 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 116 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 117 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 118 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 119 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 122 ; + } +#10 metre wind gust in the last 6 hours difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 123 ; + } +#Vertically integrated total energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'Various' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 126 ; + } +#Atmospheric tide difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 127 ; + } +#Budget values difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 128 ; + } +#Geopotential difference +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 129 ; + } +#Temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 130 ; + } +#U component of wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 131 ; + } +#V component of wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 132 ; + } +#Specific humidity difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 133 ; + } +#Surface pressure difference +'Pa' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 134 ; + } +#Vertical velocity (pressure) difference +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 135 ; + } +#Total column water difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 136 ; + } +#Total column water vapour difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 137 ; + } +#Vorticity (relative) difference +'s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 138 ; + } +#Soil temperature level 1 difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 140 ; + } +#Snow depth difference +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) difference +'m' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 142 ; + } +#Convective precipitation difference +'m' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) difference +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 146 ; + } +#Surface latent heat flux difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 147 ; + } +#Charnock difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 148 ; + } +#Surface net radiation difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 149 ; + } +#Top net radiation difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 150 ; + } +#Mean sea level pressure difference +'Pa' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 152 ; + } +#Short-wave heating rate difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 153 ; + } +#Long-wave heating rate difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 154 ; + } +#Divergence difference +'s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 155 ; + } +#Height difference +'m' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 156 ; + } +#Relative humidity difference +'%' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure difference +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 158 ; + } +#Boundary layer height difference +'m' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 159 ; + } +#Standard deviation of orography difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography difference +'radians' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 163 ; + } +#Total cloud cover difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 164 ; + } +#10 metre U wind component difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 165 ; + } +#10 metre V wind component difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 166 ; + } +#2 metre temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 167 ; + } +#Surface solar radiation downwards difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 171 ; + } +#Land-sea mask difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 172 ; + } +#Surface roughness difference +'m' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 173 ; + } +#Albedo difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 175 ; + } +#Surface net solar radiation difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 177 ; + } +#Top net solar radiation difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 178 ; + } +#Top net thermal radiation difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 179 ; + } +#East-West surface stress difference +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 180 ; + } +#North-South surface stress difference +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 181 ; + } +#Evaporation difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 184 ; + } +#Convective cloud cover difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 185 ; + } +#Low cloud cover difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 186 ; + } +#Medium cloud cover difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 187 ; + } +#High cloud cover difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 188 ; + } +#Sunshine duration difference +'s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance difference +'m**2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance difference +'m**2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance difference +'m**2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance difference +'m**2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 193 ; + } +#Brightness temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress difference +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress difference +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 197 ; + } +#Skin reservoir content difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 198 ; + } +#Vegetation fraction difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography difference +'m**2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 204 ; + } +#Runoff difference +'m' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 205 ; + } +#Total column ozone difference +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 206 ; + } +#10 metre wind speed difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 207 ; + } +#Top net solar radiation, clear sky difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 227 ; + } +#Total precipitation difference +'m' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress difference +'N m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress difference +'N m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux difference +'J m**-2' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux difference +'kg m**-2 s' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 232 ; + } +#Apparent surface humidity difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 234 ; + } +#Skin temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 difference +'m' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 237 ; + } +#Temperature of snow layer difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 238 ; + } +#Convective snowfall difference +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 239 ; + } +#Large scale snowfall difference +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency difference +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency difference +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 242 ; + } +#Forecast albedo difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 243 ; + } +#Forecast surface roughness difference +'m' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat difference +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 246 ; + } +#Specific cloud ice water content difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 247 ; + } +#Cloud cover difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency difference +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 249 ; + } +#Ice age difference +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity difference +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind difference +'m s**-1' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 255 ; + } +#Maximum of significant wave height index +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 216 ; + } +#Reserved +'~' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 193 ; + } +#U-tendency from dynamics +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 114 ; + } +#V-tendency from dynamics +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 115 ; + } +#T-tendency from dynamics +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 116 ; + } +#q-tendency from dynamics +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 117 ; + } +#T-tendency from radiation +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 118 ; + } +#U-tendency from turbulent diffusion + subgrid orography +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 119 ; + } +#V-tendency from turbulent diffusion + subgrid orography +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 120 ; + } +#T-tendency from turbulent diffusion + subgrid orography +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 121 ; + } +#q-tendency from turbulent diffusion +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 122 ; + } +#U-tendency from subgrid orography +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 123 ; + } +#V-tendency from subgrid orography +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 124 ; + } +#T-tendency from subgrid orography +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 125 ; + } +#U-tendency from convection (deep+shallow) +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 126 ; + } +#V-tendency from convection (deep+shallow) +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 127 ; + } +#T-tendency from convection (deep+shallow) +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 128 ; + } +#q-tendency from convection (deep+shallow) +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 129 ; + } +#Liquid Precipitation flux from convection +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 130 ; + } +#Ice Precipitation flux from convection +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 131 ; + } +#T-tendency from cloud scheme +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 132 ; + } +#q-tendency from cloud scheme +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 133 ; + } +#ql-tendency from cloud scheme +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 134 ; + } +#qi-tendency from cloud scheme +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 135 ; + } +#Liquid Precip flux from cloud scheme (stratiform) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 136 ; + } +#Ice Precip flux from cloud scheme (stratiform) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 137 ; + } +#U-tendency from shallow convection +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 138 ; + } +#V-tendency from shallow convection +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 139 ; + } +#T-tendency from shallow convection +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 140 ; + } +#q-tendency from shallow convection +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 141 ; + } +#100 metre U wind component anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 6 ; + } +#100 metre V wind component anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 7 ; + } +#Maximum temperature at 2 metres in the last 6 hours anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres in the last 6 hours anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 122 ; + } +#Aerosol type 13 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 13 ; + } +#Aerosol type 14 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 14 ; + } +#Aerosol type 15 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 15 ; + } +#SO4 aerosol precursor mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 30 ; + } +#DMS surface emission +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 45 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 55 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 56 ; + } +#Mixing ration of organic carbon aerosol, nucleation mode +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 57 ; + } +#Monoterpene precursor mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 58 ; + } +#Secondary organic precursor mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 59 ; + } +#Particulate matter d < 1 um +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 72 ; + } +#Particulate matter d < 2.5 um +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 73 ; + } +#Particulate matter d < 10 um +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 74 ; + } +#Wildfire viewing angle of observation +'deg' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 79 ; + } +#Wildfire Flux of Ethane (C2H6) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 118 ; + } +#Altitude of emitter +'m above sea level' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 119 ; + } +#Altitude of plume top +'m above sea level' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 120 ; + } +#UV visible albedo for direct radiation, isotropic component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 186 ; + } +#UV visible albedo for direct radiation, volumetric component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 187 ; + } +#UV visible albedo for direct radiation, geometric component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 188 ; + } +#Near IR albedo for direct radiation, isotropic component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 189 ; + } +#Near IR albedo for direct radiation, volumetric component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 190 ; + } +#Near IR albedo for direct radiation, geometric component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 191 ; + } +#UV visible albedo for diffuse radiation, isotropic component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 192 ; + } +#UV visible albedo for diffuse radiation, volumetric component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 193 ; + } +#UV visible albedo for diffuse radiation, geometric component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 194 ; + } +#Near IR albedo for diffuse radiation, isotropic component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 195 ; + } +#Near IR albedo for diffuse radiation, volumetric component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 196 ; + } +#Near IR albedo for diffuse radiation, geometric component +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 197 ; + } +#Total aerosol optical depth at 340 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 217 ; + } +#Total aerosol optical depth at 355 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 218 ; + } +#Total aerosol optical depth at 380 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 219 ; + } +#Total aerosol optical depth at 400 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 220 ; + } +#Total aerosol optical depth at 440 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 221 ; + } +#Total aerosol optical depth at 500 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 222 ; + } +#Total aerosol optical depth at 532 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 223 ; + } +#Total aerosol optical depth at 645 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 224 ; + } +#Total aerosol optical depth at 800 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 225 ; + } +#Total aerosol optical depth at 858 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 226 ; + } +#Total aerosol optical depth at 1020 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 227 ; + } +#Total aerosol optical depth at 1064 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 228 ; + } +#Total aerosol optical depth at 1640 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 229 ; + } +#Total aerosol optical depth at 2130 nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 230 ; + } +#Wildfire Flux of Toluene (C7H8) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 231 ; + } +#Wildfire Flux of Benzene (C6H6) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 232 ; + } +#Wildfire Flux of Xylene (C8H10) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 233 ; + } +#Wildfire Flux of Butenes (C4H8) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 234 ; + } +#Wildfire Flux of Pentenes (C5H10) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 235 ; + } +#Wildfire Flux of Hexene (C6H12) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 236 ; + } +#Wildfire Flux of Octene (C8H16) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 237 ; + } +#Wildfire Flux of Butanes (C4H10) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 238 ; + } +#Wildfire Flux of Pentanes (C5H12) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 239 ; + } +#Wildfire Flux of Hexanes (C6H14) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 240 ; + } +#Wildfire Flux of Heptane (C7H16) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 241 ; + } +#Aerosol type 13 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 13 ; + } +#Aerosol type 14 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 14 ; + } +#SO4 aerosol precursor mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 28 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 1 +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 29 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 2 +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 30 ; + } +#DMS surface emission +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 43 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 3 +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 44 ; + } +#Water vapour mixing ratio for hydrophilic aerosols in mode 4 +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 45 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 55 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 56 ; + } +#Wildfire Flux of Ethane (C2H6) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 118 ; + } +#Altitude of emitter +'m above sea level' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 119 ; + } +#Altitude of plume top +'m above sea level' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 120 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 1 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 2 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 3 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 4 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 5 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 6 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 7 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 8 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 9 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 10 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 11 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 12 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 13 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 14 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 15 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 16 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 17 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 18 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 19 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 20 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 21 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 22 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 23 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 24 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 25 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 26 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 27 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 28 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 29 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 30 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 31 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 32 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 33 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 34 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 35 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 36 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 37 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 38 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 39 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 40 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 41 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 42 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 43 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 44 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 45 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 46 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 47 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 48 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 49 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 50 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 51 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 52 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 53 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 54 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 55 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 56 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 57 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 58 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 59 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 60 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 61 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 62 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 63 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 64 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 65 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 66 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 67 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 68 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 69 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 70 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 71 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 72 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 73 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 74 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 75 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 76 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 77 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 78 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 79 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 80 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 81 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 82 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 83 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 84 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 85 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 86 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 87 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 88 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 89 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 90 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 91 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 92 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 93 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 94 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 95 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 96 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 97 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 98 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 99 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 100 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 101 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 102 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 103 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 104 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 105 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 106 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 107 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 108 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 109 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 110 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 111 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 112 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 113 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 114 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 115 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 116 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 117 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 118 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 119 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 120 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 121 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 122 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 123 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 124 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 125 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 126 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 127 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 128 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 129 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 130 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 131 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 132 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 133 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 134 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 135 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 136 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 137 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 138 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 139 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 140 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 141 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 142 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 143 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 144 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 145 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 146 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 147 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 148 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 149 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 150 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 151 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 152 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 153 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 154 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 155 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 156 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 157 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 158 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 159 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 160 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 161 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 162 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 163 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 164 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 165 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 166 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 167 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 168 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 169 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 170 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 171 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 172 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 173 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 174 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 175 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 176 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 177 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 178 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 179 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 180 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 181 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 182 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 183 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 184 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 185 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 186 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 187 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 188 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 189 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 190 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 191 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 192 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 193 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 194 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 195 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 196 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 197 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 198 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 199 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 200 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 201 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 202 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 203 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 204 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 205 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 206 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 207 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 208 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 209 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 210 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 211 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 212 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 213 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 214 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 215 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 216 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 217 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 218 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 219 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 220 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 221 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 222 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 223 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 224 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 225 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 226 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 227 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 228 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 229 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 230 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 231 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 232 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 233 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 234 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 235 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 236 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 237 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 238 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 239 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 240 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 241 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 242 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 243 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 244 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 245 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 246 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 247 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 248 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 249 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 250 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 251 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 252 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 253 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 254 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 212 ; + parameterNumber = 255 ; + } +#Random pattern 1 for sppt +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 1 ; + } +#Random pattern 2 for sppt +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 2 ; + } +#Random pattern 3 for sppt +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 3 ; + } +#Random pattern 4 for sppt +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 4 ; + } +#Random pattern 5 for sppt +'dimensionless' = { + discipline = 192 ; + parameterCategory = 213 ; + parameterNumber = 5 ; + } +# Cosine of solar zenith angle +'~' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 1 ; + } +# UV biologically effective dose +'~' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 2 ; + } +# UV biologically effective dose clear-sky +'~' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 3 ; + } +# Total surface UV spectral flux (280-285 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 4 ; + } +# Total surface UV spectral flux (285-290 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 5 ; + } +# Total surface UV spectral flux (290-295 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 6 ; + } +# Total surface UV spectral flux (295-300 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 7 ; + } +# Total surface UV spectral flux (300-305 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 8 ; + } +# Total surface UV spectral flux (305-310 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 9 ; + } +# Total surface UV spectral flux (310-315 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 10 ; + } +# Total surface UV spectral flux (315-320 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 11 ; + } +# Total surface UV spectral flux (320-325 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 12 ; + } +# Total surface UV spectral flux (325-330 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 13 ; + } +# Total surface UV spectral flux (330-335 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 14 ; + } +# Total surface UV spectral flux (335-340 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 15 ; + } +# Total surface UV spectral flux (340-345 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 16 ; + } +# Total surface UV spectral flux (345-350 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 17 ; + } +# Total surface UV spectral flux (350-355 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 18 ; + } +# Total surface UV spectral flux (355-360 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 19 ; + } +# Total surface UV spectral flux (360-365 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 20 ; + } +# Total surface UV spectral flux (365-370 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 21 ; + } +# Total surface UV spectral flux (370-375 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 22 ; + } +# Total surface UV spectral flux (375-380 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 23 ; + } +# Total surface UV spectral flux (380-385 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 24 ; + } +# Total surface UV spectral flux (385-390 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 25 ; + } +# Total surface UV spectral flux (390-395 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 26 ; + } +# Total surface UV spectral flux (395-400 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 27 ; + } +# Clear-sky surface UV spectral flux (280-285 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 28 ; + } +# Clear-sky surface UV spectral flux (285-290 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 29 ; + } +# Clear-sky surface UV spectral flux (290-295 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 30 ; + } +# Clear-sky surface UV spectral flux (295-300 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 31 ; + } +# Clear-sky surface UV spectral flux (300-305 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 32 ; + } +# Clear-sky surface UV spectral flux (305-310 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 33 ; + } +# Clear-sky surface UV spectral flux (310-315 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 34 ; + } +# Clear-sky surface UV spectral flux (315-320 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 35 ; + } +# Clear-sky surface UV spectral flux (320-325 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 36 ; + } +# Clear-sky surface UV spectral flux (325-330 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 37 ; + } +# Clear-sky surface UV spectral flux (330-335 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 38 ; + } +# Clear-sky surface UV spectral flux (335-340 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 39 ; + } +# Clear-sky surface UV spectral flux (340-345 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 40 ; + } +# Clear-sky surface UV spectral flux (345-350 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 41 ; + } +# Clear-sky surface UV spectral flux (350-355 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 42 ; + } +# Clear-sky surface UV spectral flux (355-360 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 43 ; + } +# Clear-sky surface UV spectral flux (360-365 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 44 ; + } +# Clear-sky surface UV spectral flux (365-370 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 45 ; + } +# Clear-sky surface UV spectral flux (370-375 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 46 ; + } +# Clear-sky surface UV spectral flux (375-380 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 47 ; + } +# Clear-sky surface UV spectral flux (380-385 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 48 ; + } +# Clear-sky surface UV spectral flux (385-390 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 49 ; + } +# Clear-sky surface UV spectral flux (390-395 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 50 ; + } +# Clear-sky surface UV spectral flux (395-400 nm) +'W m**-2' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 51 ; + } +# Profile of optical thickness at 340 nm +'~' = { + discipline = 192 ; + parameterCategory = 214 ; + parameterNumber = 52 ; + } +# Source/gain of sea salt aerosol (0.03 - 0.5 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 1 ; + } +# Source/gain of sea salt aerosol (0.5 - 5 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 2 ; + } +# Source/gain of sea salt aerosol (5 - 20 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 3 ; + } +# Dry deposition of sea salt aerosol (0.03 - 0.5 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 4 ; + } +# Dry deposition of sea salt aerosol (0.5 - 5 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 5 ; + } +# Dry deposition of sea salt aerosol (5 - 20 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 6 ; + } +# Sedimentation of sea salt aerosol (0.03 - 0.5 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 7 ; + } +# Sedimentation of sea salt aerosol (0.5 - 5 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 8 ; + } +# Sedimentation of sea salt aerosol (5 - 20 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 9 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 10 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 11 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 12 ; + } +# Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 13 ; + } +# Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 14 ; + } +# Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 15 ; + } +# Negative fixer of sea salt aerosol (0.03 - 0.5 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 16 ; + } +# Negative fixer of sea salt aerosol (0.5 - 5 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 17 ; + } +# Negative fixer of sea salt aerosol (5 - 20 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 18 ; + } +# Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 19 ; + } +# Vertically integrated mass of sea salt aerosol (0.5 - 5 um) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 20 ; + } +# Vertically integrated mass of sea salt aerosol (5 - 20 um) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 21 ; + } +# Sea salt aerosol (0.03 - 0.5 um) optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 22 ; + } +# Sea salt aerosol (0.5 - 5 um) optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 23 ; + } +# Sea salt aerosol (5 - 20 um) optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 24 ; + } +# Source/gain of dust aerosol (0.03 - 0.55 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 25 ; + } +# Source/gain of dust aerosol (0.55 - 9 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 26 ; + } +# Source/gain of dust aerosol (9 - 20 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 27 ; + } +# Dry deposition of dust aerosol (0.03 - 0.55 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 28 ; + } +# Dry deposition of dust aerosol (0.55 - 9 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 29 ; + } +# Dry deposition of dust aerosol (9 - 20 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 30 ; + } +# Sedimentation of dust aerosol (0.03 - 0.55 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 31 ; + } +# Sedimentation of dust aerosol (0.55 - 9 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 32 ; + } +# Sedimentation of dust aerosol (9 - 20 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 33 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 34 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 35 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 36 ; + } +# Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 37 ; + } +# Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 38 ; + } +# Wet deposition of dust aerosol (9 - 20 um) by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 39 ; + } +# Negative fixer of dust aerosol (0.03 - 0.55 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 40 ; + } +# Negative fixer of dust aerosol (0.55 - 9 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 41 ; + } +# Negative fixer of dust aerosol (9 - 20 um) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 42 ; + } +# Vertically integrated mass of dust aerosol (0.03 - 0.55 um) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 43 ; + } +# Vertically integrated mass of dust aerosol (0.55 - 9 um) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 44 ; + } +# Vertically integrated mass of dust aerosol (9 - 20 um) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 45 ; + } +# Dust aerosol (0.03 - 0.55 um) optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 46 ; + } +# Dust aerosol (0.55 - 9 um) optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 47 ; + } +# Dust aerosol (9 - 20 um) optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 48 ; + } +# Source/gain of hydrophobic organic matter aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 49 ; + } +# Source/gain of hydrophilic organic matter aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 50 ; + } +# Dry deposition of hydrophobic organic matter aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 51 ; + } +# Dry deposition of hydrophilic organic matter aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 52 ; + } +# Sedimentation of hydrophobic organic matter aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 53 ; + } +# Sedimentation of hydrophilic organic matter aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 54 ; + } +# Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 55 ; + } +# Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 56 ; + } +# Wet deposition of hydrophobic organic matter aerosol by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 57 ; + } +# Wet deposition of hydrophilic organic matter aerosol by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 58 ; + } +# Negative fixer of hydrophobic organic matter aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 59 ; + } +# Negative fixer of hydrophilic organic matter aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 60 ; + } +# Vertically integrated mass of hydrophobic organic matter aerosol +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 61 ; + } +# Vertically integrated mass of hydrophilic organic matter aerosol +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 62 ; + } +# Hydrophobic organic matter aerosol optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 63 ; + } +# Hydrophilic organic matter aerosol optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 64 ; + } +# Source/gain of hydrophobic black carbon aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 65 ; + } +# Source/gain of hydrophilic black carbon aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 66 ; + } +# Dry deposition of hydrophobic black carbon aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 67 ; + } +# Dry deposition of hydrophilic black carbon aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 68 ; + } +# Sedimentation of hydrophobic black carbon aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 69 ; + } +# Sedimentation of hydrophilic black carbon aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 70 ; + } +# Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 71 ; + } +# Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 72 ; + } +# Wet deposition of hydrophobic black carbon aerosol by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 73 ; + } +# Wet deposition of hydrophilic black carbon aerosol by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 74 ; + } +# Negative fixer of hydrophobic black carbon aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 75 ; + } +# Negative fixer of hydrophilic black carbon aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 76 ; + } +# Vertically integrated mass of hydrophobic black carbon aerosol +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 77 ; + } +# Vertically integrated mass of hydrophilic black carbon aerosol +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 78 ; + } +# Hydrophobic black carbon aerosol optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 79 ; + } +# Hydrophilic black carbon aerosol optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 80 ; + } +# Source/gain of sulphate aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 81 ; + } +# Dry deposition of sulphate aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 82 ; + } +# Sedimentation of sulphate aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 83 ; + } +# Wet deposition of sulphate aerosol by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 84 ; + } +# Wet deposition of sulphate aerosol by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 85 ; + } +# Negative fixer of sulphate aerosol +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 86 ; + } +# Vertically integrated mass of sulphate aerosol +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 87 ; + } +# Sulphate aerosol optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 88 ; + } +#Accumulated total aerosol optical depth at 550 nm +'s' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 89 ; + } +#Effective (snow effect included) UV visible albedo for direct radiation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 90 ; + } +#10 metre wind speed dust emission potential +'kg s**2 m**-5' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 91 ; + } +#10 metre wind gustiness dust emission potential +'kg s**2 m**-5' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 92 ; + } +#Profile of total aerosol optical depth at 532 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 93 ; + } +#Profile of natural (sea-salt and dust) aerosol optical depth at 532 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 94 ; + } +#Profile of antropogenic (black carbon, organic matter, sulphate) aerosol optical depth at 532 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 95 ; + } +#Total absorption aerosol optical depth at 340 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 96 ; + } +#Total absorption aerosol optical depth at 355 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 97 ; + } +#Total absorption aerosol optical depth at 380 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 98 ; + } +#Total absorption aerosol optical depth at 400 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 99 ; + } +#Total absorption aerosol optical depth at 440 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 100 ; + } +#Total absorption aerosol optical depth at 469 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 101 ; + } +#Total absorption aerosol optical depth at 500 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 102 ; + } +#Total absorption aerosol optical depth at 532 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 103 ; + } +#Total absorption aerosol optical depth at 550 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 104 ; + } +#Total absorption aerosol optical depth at 645 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 105 ; + } +#Total absorption aerosol optical depth at 670 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 106 ; + } +#Total absorption aerosol optical depth at 800 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 107 ; + } +#Total absorption aerosol optical depth at 858 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 108 ; + } +#Total absorption aerosol optical depth at 865 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 109 ; + } +#Total absorption aerosol optical depth at 1020 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 110 ; + } +#Total absorption aerosol optical depth at 1064 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 111 ; + } +#Total absorption aerosol optical depth at 1240 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 112 ; + } +#Total absorption aerosol optical depth at 1640 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 113 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 114 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 115 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 116 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 117 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 118 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 119 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 120 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 121 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 122 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 123 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 124 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 125 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 126 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 127 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 128 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 129 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 130 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 131 ; + } +#Single scattering albedo at 340 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 132 ; + } +#Single scattering albedo at 355 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 133 ; + } +#Single scattering albedo at 380 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 134 ; + } +#Single scattering albedo at 400 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 135 ; + } +#Single scattering albedo at 440 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 136 ; + } +#Single scattering albedo at 469 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 137 ; + } +#Single scattering albedo at 500 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 138 ; + } +#Single scattering albedo at 532 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 139 ; + } +#Single scattering albedo at 550 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 140 ; + } +#Single scattering albedo at 645 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 141 ; + } +#Single scattering albedo at 670 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 142 ; + } +#Single scattering albedo at 800 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 143 ; + } +#Single scattering albedo at 858 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 144 ; + } +#Single scattering albedo at 865 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 145 ; + } +#Single scattering albedo at 1020 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 146 ; + } +#Single scattering albedo at 1064 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 147 ; + } +#Single scattering albedo at 1240 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 148 ; + } +#Single scattering albedo at 1640 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 149 ; + } +#Assimetry factor at 340 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 150 ; + } +#Assimetry factor at 355 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 151 ; + } +#Assimetry factor at 380 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 152 ; + } +#Assimetry factor at 400 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 153 ; + } +#Assimetry factor at 440 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 154 ; + } +#Assimetry factor at 469 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 155 ; + } +#Assimetry factor at 500 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 156 ; + } +#Assimetry factor at 532 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 157 ; + } +#Assimetry factor at 550 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 158 ; + } +#Assimetry factor at 645 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 159 ; + } +#Assimetry factor at 670 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 160 ; + } +#Assimetry factor at 800 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 161 ; + } +#Assimetry factor at 858 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 162 ; + } +#Assimetry factor at 865 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 163 ; + } +#Assimetry factor at 1020 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 164 ; + } +#Assimetry factor at 1064 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 165 ; + } +#Assimetry factor at 1240 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 166 ; + } +#Assimetry factor at 1640 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 167 ; + } +#Source/gain of sulphur dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 168 ; + } +#Dry deposition of sulphur dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 169 ; + } +#Sedimentation of sulphur dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 170 ; + } +#Wet deposition of sulphur dioxide by large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 171 ; + } +#Wet deposition of sulphur dioxide by convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 172 ; + } +#Negative fixer of sulphur dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 173 ; + } +#Vertically integrated mass of sulphur dioxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 174 ; + } +#Sulphur dioxide optical depth +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 175 ; + } +#Total absorption aerosol optical depth at 2130 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 176 ; + } +#Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 177 ; + } +#Single scattering albedo at 2130 nm +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 178 ; + } +#Assimetry factor at 2130 nm +'~' = { + discipline = 192 ; + parameterCategory = 215 ; + parameterNumber = 179 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 1 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 2 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 3 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 4 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 5 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 6 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 7 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 8 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 9 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 10 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 11 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 12 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 13 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 14 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 15 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 16 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 17 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 18 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 19 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 20 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 21 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 22 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 23 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 24 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 25 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 26 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 27 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 28 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 29 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 30 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 31 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 32 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 33 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 34 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 35 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 36 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 37 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 38 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 39 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 40 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 41 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 42 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 43 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 44 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 45 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 46 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 47 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 48 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 49 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 50 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 51 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 52 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 53 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 54 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 55 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 56 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 57 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 58 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 59 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 60 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 61 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 62 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 63 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 64 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 65 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 66 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 67 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 68 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 69 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 70 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 71 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 72 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 73 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 74 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 75 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 76 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 77 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 78 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 79 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 80 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 81 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 82 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 83 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 84 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 85 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 86 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 87 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 88 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 89 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 90 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 91 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 92 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 93 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 94 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 95 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 96 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 97 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 98 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 99 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 100 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 101 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 102 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 103 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 104 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 105 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 106 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 107 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 108 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 109 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 110 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 111 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 112 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 113 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 114 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 115 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 116 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 117 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 118 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 119 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 120 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 121 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 122 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 123 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 124 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 125 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 126 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 127 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 128 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 129 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 130 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 131 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 132 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 133 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 134 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 135 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 136 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 137 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 138 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 139 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 140 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 141 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 142 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 143 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 144 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 145 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 146 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 147 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 148 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 149 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 150 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 151 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 152 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 153 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 154 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 155 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 156 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 157 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 158 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 159 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 160 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 161 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 162 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 163 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 164 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 165 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 166 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 167 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 168 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 169 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 170 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 171 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 172 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 173 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 174 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 175 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 176 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 177 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 178 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 179 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 180 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 181 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 182 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 183 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 184 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 185 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 186 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 187 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 188 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 189 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 190 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 191 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 192 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 193 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 194 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 195 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 196 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 197 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 198 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 199 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 200 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 201 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 202 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 203 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 204 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 205 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 206 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 207 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 208 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 209 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 210 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 211 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 212 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 213 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 214 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 215 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 216 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 217 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 218 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 219 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 220 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 221 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 222 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 223 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 224 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 225 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 226 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 227 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 228 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 229 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 230 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 231 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 232 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 233 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 234 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 235 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 236 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 237 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 238 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 239 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 240 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 241 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 242 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 243 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 244 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 245 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 246 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 247 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 248 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 249 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 250 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 251 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 252 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 253 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 254 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 216 ; + parameterNumber = 255 ; + } +#Total sky direct solar radiation at surface +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 21 ; + } +#Clear-sky direct solar radiation at surface +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 22 ; + } +#Cloud base height +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 23 ; + } +#Zero degree level +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 24 ; + } +#Horizontal visibility +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 25 ; + } +#Maximum temperature at 2 metres in the last 3 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + lengthOfTimeRange = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#Minimum temperature at 2 metres in the last 3 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 103 ; + lengthOfTimeRange = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#10 metre wind gust in the last 3 hours +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 28 ; + } +#Soil wetness index in layer 1 +'dimensionless' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 40 ; + } +#Soil wetness index in layer 2 +'dimensionless' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 41 ; + } +#Soil wetness index in layer 3 +'dimensionless' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 42 ; + } +#Soil wetness index in layer 4 +'dimensionless' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 43 ; + } +#Total column rain water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 89 ; + } +#Total column snow water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 90 ; + } +#Canopy cover fraction +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 91 ; + } +#Soil texture fraction +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 92 ; + } +#Volumetric soil moisture +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 93 ; + } +#Ice temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 94 ; + } +#Surface solar radiation downward clear-sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 129 ; + } +#Surface thermal radiation downward clear-sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 130 ; + } +#Surface short wave-effective total cloudiness +'dimensionless' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 248 ; + } +#100 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 249 ; + } +#Irrigation fraction +'Proportion' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 250 ; + } +#Potential evaporation +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 251 ; + } +#Irrigation +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 252 ; + } +#Surface long wave-effective total cloudiness +'dimensionless' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 255 ; + } +#Total sky direct solar radiation at surface (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 21 ; + } +#Clear-sky direct solar radiation at surface (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 22 ; + } +#Flood alert levels +'Integer' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 10 ; + } +#Cross sectional area of flow in channel +'m**2' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 11 ; + } +#Sideflow into river channel +'m**3 s**-1 m**-1' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 12 ; + } +#Discharge +'m**3 s**-1' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 13 ; + } +#River storage of water +'m**3' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 14 ; + } +#Floodplain storage of water +'m**3' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 15 ; + } +#Flooded area fraction +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 16 ; + } +#Days since last rain +'Integer' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 17 ; + } +#Molnau-Bissell frost index +'degreeperday' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 18 ; + } +#Maximum discharge in 15 day forecast +'m**3 s**-1' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 19 ; + } +#Depth of water on soil surface +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 20 ; + } +#Upstreams accumulated precipitation +'m' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 21 ; + } +#Upstreams accumulated snow melt +'m' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 22 ; + } +#Maximum rain in 24 hours over the 15 day forecast +'m' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 23 ; + } +#Groundwater +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 25 ; + } +#Snow depth at elevation bands +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 26 ; + } +#Accumulated precipitation over the 15 day forecast +'m' = { + discipline = 192 ; + parameterCategory = 240 ; + parameterNumber = 27 ; + } +#Stream function gradient +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 1 ; + } +#Velocity potential gradient +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 2 ; + } +#Potential temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 5 ; + } +#U component of divergent wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 11 ; + } +#V component of divergent wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 12 ; + } +#U component of rotational wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 13 ; + } +#V component of rotational wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence gradient +'s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 23 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 24 ; + } +#Reserved for future unbalanced components +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 25 ; + } +#Lake cover gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 26 ; + } +#Low vegetation cover gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 27 ; + } +#High vegetation cover gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 28 ; + } +#Type of low vegetation gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 29 ; + } +#Type of high vegetation gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 30 ; + } +#Sea-ice cover gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 31 ; + } +#Snow albedo gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 32 ; + } +#Snow density gradient +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 33 ; + } +#Sea surface temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 34 ; + } +#Ice surface temperature layer 1 gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 35 ; + } +#Ice surface temperature layer 2 gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 36 ; + } +#Ice surface temperature layer 3 gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 37 ; + } +#Ice surface temperature layer 4 gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 38 ; + } +#Volumetric soil water layer 1 gradient +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 gradient +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 gradient +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 gradient +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 42 ; + } +#Soil type gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 43 ; + } +#Snow evaporation gradient +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 44 ; + } +#Snowmelt gradient +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 45 ; + } +#Solar duration gradient +'s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 46 ; + } +#Direct solar radiation gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress gradient +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 48 ; + } +#10 metre wind gust gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction gradient +'s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 52 ; + } +#Montgomery potential gradient +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 53 ; + } +#Pressure gradient +'Pa' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 58 ; + } +#Convective available potential energy gradient +'J kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 59 ; + } +#Potential vorticity gradient +'K m**2 kg**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 60 ; + } +#Total precipitation from observations gradient +'Millimetres*100 + number of stations' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 61 ; + } +#Observation count gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference +'s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference +'s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 64 ; + } +#Skin temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 65 ; + } +#Leaf area index, low vegetation +'m**2 m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 66 ; + } +#Leaf area index, high vegetation +'m**2 m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 67 ; + } +#Minimum stomatal resistance, low vegetation +'s m**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 68 ; + } +#Minimum stomatal resistance, high vegetation +'s m**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 69 ; + } +#Biome cover, low vegetation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 70 ; + } +#Biome cover, high vegetation +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 71 ; + } +#Total column liquid water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 78 ; + } +#Total column ice water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 79 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 80 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 81 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 82 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 83 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 84 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 85 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 86 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 87 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 88 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 89 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 90 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 91 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 92 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 93 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 94 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 95 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 96 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 97 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 98 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 99 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 100 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 101 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 102 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 103 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 104 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 105 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 106 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 107 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 108 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 109 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 110 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 111 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 112 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 113 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 114 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 115 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 116 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 117 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 118 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 119 ; + } +#Experimental product +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 120 ; + } +#Maximum temperature at 2 metres gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 121 ; + } +#Minimum temperature at 2 metres gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 122 ; + } +#10 metre wind gust in the last 6 hours gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 123 ; + } +#Vertically integrated total energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'Various' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 126 ; + } +#Atmospheric tide gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 127 ; + } +#Budget values gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 128 ; + } +#Geopotential gradient +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 129 ; + } +#Temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 130 ; + } +#U component of wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 131 ; + } +#V component of wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 132 ; + } +#Specific humidity gradient +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 133 ; + } +#Surface pressure gradient +'Pa' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 134 ; + } +#vertical velocity (pressure) gradient +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 135 ; + } +#Total column water gradient +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 136 ; + } +#Total column water vapour gradient +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 137 ; + } +#Vorticity (relative) gradient +'s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 138 ; + } +#Soil temperature level 1 gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 139 ; + } +#Soil wetness level 1 gradient +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 140 ; + } +#Snow depth gradient +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) gradient +'m' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 142 ; + } +#Convective precipitation gradient +'m' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) gradient +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 146 ; + } +#Surface latent heat flux gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 147 ; + } +#Charnock gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 148 ; + } +#Surface net radiation gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 149 ; + } +#Top net radiation gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 150 ; + } +#Mean sea level pressure gradient +'Pa' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 152 ; + } +#Short-wave heating rate gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 153 ; + } +#Long-wave heating rate gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 154 ; + } +#Divergence gradient +'s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 155 ; + } +#Height gradient +'m' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 156 ; + } +#Relative humidity gradient +'%' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure gradient +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 158 ; + } +#Boundary layer height gradient +'m' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 159 ; + } +#Standard deviation of orography gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography gradient +'radians' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 163 ; + } +#Total cloud cover gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 164 ; + } +#10 metre U wind component gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 165 ; + } +#10 metre V wind component gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 166 ; + } +#2 metre temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 167 ; + } +#2 metre dewpoint temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 168 ; + } +#Surface solar radiation downwards gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 169 ; + } +#Soil temperature level 2 gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 170 ; + } +#Soil wetness level 2 gradient +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 171 ; + } +#Land-sea mask gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 172 ; + } +#Surface roughness gradient +'m' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 173 ; + } +#Albedo gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 175 ; + } +#Surface net solar radiation gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 177 ; + } +#Top net solar radiation gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 178 ; + } +#Top net thermal radiation gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 179 ; + } +#East-West surface stress gradient +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 180 ; + } +#North-South surface stress gradient +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 181 ; + } +#Evaporation gradient +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 182 ; + } +#Soil temperature level 3 gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 183 ; + } +#Soil wetness level 3 gradient +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 184 ; + } +#Convective cloud cover gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 185 ; + } +#Low cloud cover gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 186 ; + } +#Medium cloud cover gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 187 ; + } +#High cloud cover gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 188 ; + } +#Sunshine duration gradient +'s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance gradient +'m**2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance gradient +'m**2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance gradient +'m**2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance gradient +'m**2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 193 ; + } +#Brightness temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress gradient +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress gradient +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 197 ; + } +#Skin reservoir content gradient +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 198 ; + } +#Vegetation fraction gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography gradient +'m**2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres since previous post-processing gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres since previous post-processing gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio gradient +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 204 ; + } +#Runoff gradient +'m' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 205 ; + } +#Total column ozone gradient +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 206 ; + } +#10 metre wind speed gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 207 ; + } +#Top net solar radiation, clear sky gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 216 ; + } +#Diabatic heating large-scale condensation gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity gradient +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection gradient +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation gradient +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity gradient +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 227 ; + } +#Total precipitation gradient +'m' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress gradient +'N m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress gradient +'N m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux gradient +'J m**-2' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux gradient +'kg m**-2 s' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 232 ; + } +#Apparent surface humidity gradient +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 234 ; + } +#Skin temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 gradient +'m' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 237 ; + } +#Temperature of snow layer gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 238 ; + } +#Convective snowfall gradient +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 239 ; + } +#Large scale snowfall gradient +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency gradient +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency gradient +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 242 ; + } +#Forecast albedo gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 243 ; + } +#Forecast surface roughness gradient +'m' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat gradient +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 245 ; + } +#Specific cloud liquid water content gradient +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 246 ; + } +#Specific cloud ice water content gradient +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 247 ; + } +#Cloud cover gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency gradient +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 249 ; + } +#Ice age gradient +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature gradient +'K' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity gradient +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind gradient +'m s**-1' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 129 ; + parameterNumber = 255 ; + } +#Top solar radiation upward +'J m**-2' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 208 ; + } +#Top thermal radiation upward +'J m**-2' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 209 ; + } +#Top solar radiation upward, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 210 ; + } +#Top thermal radiation upward, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 211 ; + } +#Cloud liquid water +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 212 ; + } +#Cloud fraction +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 213 ; + } +#Diabatic heating by radiation +'K s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion +'K s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection +'K s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 216 ; + } +#Diabatic heating by large-scale condensation +'K s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind +'m**2 s**-3' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind +'m**2 s**-3' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag +'m**2 s**-3' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag +'m**2 s**-3' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 221 ; + } +#Vertical diffusion of humidity +'kg kg**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection +'kg kg**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation +'kg kg**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 226 ; + } +#Adiabatic tendency of temperature +'K s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 228 ; + } +#Adiabatic tendency of humidity +'kg kg**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 229 ; + } +#Adiabatic tendency of zonal wind +'m**2 s**-3' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 230 ; + } +#Adiabatic tendency of meridional wind +'m**2 s**-3' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 231 ; + } +#Mean vertical velocity +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 130 ; + parameterNumber = 232 ; + } +#2m temperature anomaly of at least +2K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 1 ; + } +#2m temperature anomaly of at least +1K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 2 ; + } +#2m temperature anomaly of at least 0K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 3 ; + } +#2m temperature anomaly of at most -1K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 4 ; + } +#2m temperature anomaly of at most -2K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 5 ; + } +#Total precipitation anomaly of at least 20 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 6 ; + } +#Total precipitation anomaly of at least 10 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 7 ; + } +#Total precipitation anomaly of at least 0 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 8 ; + } +#Surface temperature anomaly of at least 0K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 9 ; + } +#Mean sea level pressure anomaly of at least 0 Pa +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 10 ; + } +#Height of 0 degree isotherm probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 15 ; + } +#Height of snowfall limit probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 16 ; + } +#Showalter index probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 17 ; + } +#Whiting index probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 18 ; + } +#Temperature anomaly less than -2 K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 20 ; + } +#Temperature anomaly of at least +2 K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 21 ; + } +#Temperature anomaly less than -8 K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 22 ; + } +#Temperature anomaly less than -4 K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 23 ; + } +#Temperature anomaly greater than +4 K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 24 ; + } +#Temperature anomaly greater than +8 K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 25 ; + } +#10 metre wind gust probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 49 ; + } +#Convective available potential energy probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 59 ; + } +#Total precipitation less than 0.1 mm +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 64 ; + } +#Total precipitation rate less than 1 mm/day +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 65 ; + } +#Total precipitation rate of at least 3 mm/day +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 66 ; + } +#Total precipitation rate of at least 5 mm/day +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 67 ; + } +#10 metre Wind speed of at least 10 m/s +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 68 ; + } +#10 metre Wind speed of at least 15 m/s +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 69 ; + } +#10 metre Wind gust of at least 25 m/s +'%' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfLowerLimit = 25 ; + productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2 metre temperature less than 273.15 K +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 73 ; + } +#Significant wave height of at least 2 m +'%' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 101 ; + probabilityType = 3 ; + scaleFactorOfLowerLimit = 0 ; + productDefinitionTemplateNumber = 5 ; + scaledValueOfLowerLimit = 2 ; + } +#Significant wave height of at least 4 m +'%' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 101 ; + productDefinitionTemplateNumber = 5 ; + scaleFactorOfLowerLimit = 0 ; + scaledValueOfLowerLimit = 4 ; + probabilityType = 3 ; + } +#Significant wave height of at least 6 m +'%' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + productDefinitionTemplateNumber = 5 ; + typeOfFirstFixedSurface = 101 ; + probabilityType = 3 ; + scaleFactorOfLowerLimit = 0 ; + scaledValueOfLowerLimit = 6 ; + } +#Significant wave height of at least 8 m +'%' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 101 ; + productDefinitionTemplateNumber = 5 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; + scaledValueOfLowerLimit = 8 ; + } +#Mean wave period of at least 8 s +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 78 ; + } +#Mean wave period of at least 10 s +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 79 ; + } +#Mean wave period of at least 12 s +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 80 ; + } +#Mean wave period of at least 15 s +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 81 ; + } +#Geopotential probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 129 ; + } +#Temperature anomaly probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 130 ; + } +#2 metre temperature probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 139 ; + } +#Snowfall (convective + stratiform) probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 144 ; + } +#Total precipitation probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 151 ; + } +#Total cloud cover probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 164 ; + } +#10 metre speed probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 165 ; + } +#2 metre temperature probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 167 ; + } +#Maximum 2 metre temperature probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 201 ; + } +#Minimum 2 metre temperature probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 202 ; + } +#Total precipitation probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 228 ; + } +#Significant wave height probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 229 ; + } +#Mean wave period probability +'%' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 232 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 131 ; + parameterNumber = 255 ; + } +#10 metre wind gust index +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 49 ; + } +#Snowfall index +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 144 ; + } +#10 metre speed index +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 165 ; + } +#2 metre temperature index +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 167 ; + } +#Maximum temperature at 2 metres index +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres index +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 202 ; + } +#Total precipitation index +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 132 ; + parameterNumber = 228 ; + } +#2m temperature probability less than -10 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 1 ; + } +#2m temperature probability less than -5 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 2 ; + } +#2m temperature probability less than 0 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 3 ; + } +#2m temperature probability less than 5 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 4 ; + } +#2m temperature probability less than 10 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 5 ; + } +#2m temperature probability greater than 25 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 6 ; + } +#2m temperature probability greater than 30 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 7 ; + } +#2m temperature probability greater than 35 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 8 ; + } +#2m temperature probability greater than 40 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 9 ; + } +#2m temperature probability greater than 45 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 10 ; + } +#Minimum 2 metre temperature probability less than -10 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 11 ; + } +#Minimum 2 metre temperature probability less than -5 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 12 ; + } +#Minimum 2 metre temperature probability less than 0 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 13 ; + } +#Minimum 2 metre temperature probability less than 5 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 14 ; + } +#Minimum 2 metre temperature probability less than 10 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 15 ; + } +#Maximum 2 metre temperature probability greater than 25 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 16 ; + } +#Maximum 2 metre temperature probability greater than 30 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 17 ; + } +#Maximum 2 metre temperature probability greater than 35 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 18 ; + } +#Maximum 2 metre temperature probability greater than 40 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 19 ; + } +#Maximum 2 metre temperature probability greater than 45 C +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 20 ; + } +#10 metre wind speed probability of at least 10 m/s +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 21 ; + } +#10 metre wind speed probability of at least 15 m/s +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 22 ; + } +#10 metre wind speed probability of at least 20 m/s +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 23 ; + } +#10 metre wind speed probability of at least 35 m/s +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 24 ; + } +#10 metre wind speed probability of at least 50 m/s +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 25 ; + } +#10 metre wind gust probability of at least 20 m/s +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 26 ; + } +#10 metre wind gust probability of at least 35 m/s +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 27 ; + } +#10 metre wind gust probability of at least 50 m/s +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 28 ; + } +#10 metre wind gust probability of at least 75 m/s +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 29 ; + } +#10 metre wind gust probability of at least 100 m/s +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 30 ; + } +#Total precipitation probability of at least 1 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 31 ; + } +#Total precipitation probability of at least 5 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 32 ; + } +#Total precipitation probability of at least 10 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 33 ; + } +#Total precipitation probability of at least 20 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 34 ; + } +#Total precipitation probability of at least 40 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 35 ; + } +#Total precipitation probability of at least 60 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 36 ; + } +#Total precipitation probability of at least 80 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 37 ; + } +#Total precipitation probability of at least 100 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 38 ; + } +#Total precipitation probability of at least 150 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 39 ; + } +#Total precipitation probability of at least 200 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 40 ; + } +#Total precipitation probability of at least 300 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 41 ; + } +#Snowfall probability of at least 1 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 42 ; + } +#Snowfall probability of at least 5 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 43 ; + } +#Snowfall probability of at least 10 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 44 ; + } +#Snowfall probability of at least 20 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 45 ; + } +#Snowfall probability of at least 40 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 46 ; + } +#Snowfall probability of at least 60 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 47 ; + } +#Snowfall probability of at least 80 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 48 ; + } +#Snowfall probability of at least 100 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 49 ; + } +#Snowfall probability of at least 150 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 50 ; + } +#Snowfall probability of at least 200 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 51 ; + } +#Snowfall probability of at least 300 mm +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 52 ; + } +#Total Cloud Cover probability greater than 10% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 53 ; + } +#Total Cloud Cover probability greater than 20% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 54 ; + } +#Total Cloud Cover probability greater than 30% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 55 ; + } +#Total Cloud Cover probability greater than 40% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 56 ; + } +#Total Cloud Cover probability greater than 50% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 57 ; + } +#Total Cloud Cover probability greater than 60% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 58 ; + } +#Total Cloud Cover probability greater than 70% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 59 ; + } +#Total Cloud Cover probability greater than 80% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 60 ; + } +#Total Cloud Cover probability greater than 90% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 61 ; + } +#Total Cloud Cover probability greater than 99% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 62 ; + } +#High Cloud Cover probability greater than 10% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 63 ; + } +#High Cloud Cover probability greater than 20% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 64 ; + } +#High Cloud Cover probability greater than 30% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 65 ; + } +#High Cloud Cover probability greater than 40% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 66 ; + } +#High Cloud Cover probability greater than 50% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 67 ; + } +#High Cloud Cover probability greater than 60% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 68 ; + } +#High Cloud Cover probability greater than 70% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 69 ; + } +#High Cloud Cover probability greater than 80% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 70 ; + } +#High Cloud Cover probability greater than 90% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 71 ; + } +#High Cloud Cover probability greater than 99% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 72 ; + } +#Medium Cloud Cover probability greater than 10% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 73 ; + } +#Medium Cloud Cover probability greater than 20% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 74 ; + } +#Medium Cloud Cover probability greater than 30% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 75 ; + } +#Medium Cloud Cover probability greater than 40% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 76 ; + } +#Medium Cloud Cover probability greater than 50% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 77 ; + } +#Medium Cloud Cover probability greater than 60% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 78 ; + } +#Medium Cloud Cover probability greater than 70% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 79 ; + } +#Medium Cloud Cover probability greater than 80% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 80 ; + } +#Medium Cloud Cover probability greater than 90% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 81 ; + } +#Medium Cloud Cover probability greater than 99% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 82 ; + } +#Low Cloud Cover probability greater than 10% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 83 ; + } +#Low Cloud Cover probability greater than 20% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 84 ; + } +#Low Cloud Cover probability greater than 30% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 85 ; + } +#Low Cloud Cover probability greater than 40% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 86 ; + } +#Low Cloud Cover probability greater than 50% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 87 ; + } +#Low Cloud Cover probability greater than 60% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 88 ; + } +#Low Cloud Cover probability greater than 70% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 89 ; + } +#Low Cloud Cover probability greater than 80% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 90 ; + } +#Low Cloud Cover probability greater than 90% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 91 ; + } +#Low Cloud Cover probability greater than 99% +'%' = { + discipline = 192 ; + parameterCategory = 133 ; + parameterNumber = 92 ; + } +#Maximum of significant wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 200 ; + } +#Period corresponding to maximum individual wave height +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 217 ; + } +#Maximum individual wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 218 ; + } +#Model bathymetry +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 219 ; + } +#Mean wave period based on first moment +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 220 ; + } +#Mean wave period based on second moment +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 221 ; + } +#Wave spectral directional width +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 222 ; + } +#Mean wave period based on first moment for wind waves +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 223 ; + } +#Mean wave period based on second moment for wind waves +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 224 ; + } +#Wave spectral directional width for wind waves +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 225 ; + } +#Mean wave period based on first moment for swell +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 226 ; + } +#Mean wave period based on second moment for swell +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 227 ; + } +#Wave spectral directional width for swell +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 228 ; + } +#Significant height of combined wind waves and swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Mean wave direction +'degrees' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Peak period of 1D spectra +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 231 ; + } +#Mean wave period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + } +#Coefficient of drag with waves +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 233 ; + } +#Significant height of wind waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean direction of wind waves +'degrees' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 235 ; + } +#Mean period of wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Significant height of total swell +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 237 ; + } +#Mean direction of total swell +'degrees' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 238 ; + } +#Mean period of total swell +'s' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 239 ; + } +#Standard deviation wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 240 ; + } +#Mean of 10 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 241 ; + } +#Mean wind direction +'degrees' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 242 ; + } +#Standard deviation of 10 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 243 ; + } +#Mean square slope of waves +'dimensionless' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 244 ; + } +#10 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 245 ; + } +#Altimeter wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 246 ; + } +#Altimeter corrected wave height +'m' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 247 ; + } +#Altimeter range relative correction +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 248 ; + } +#10 metre wind direction +'degrees' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 249 ; + } +#2D wave spectra (multiple) +'m**2 s radian**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 250 ; + } +#2D wave spectra (single) +'m**2 s radian**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 251 ; + } +#Wave spectral kurtosis +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 252 ; + } +#Benjamin-Feir index +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 253 ; + } +#Wave spectral peakedness +'s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 255 ; + } +#Ocean potential temperature +'deg C' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 129 ; + } +#Ocean salinity +'psu' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 130 ; + } +#Ocean potential density +'kg m**-3 -1000' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 131 ; + } +#Ocean U wind component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 133 ; + } +#Ocean V wind component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 134 ; + } +#Ocean W wind component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 135 ; + } +#Richardson number +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 137 ; + } +#U*V product +'m s**-2' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 139 ; + } +#U*T product +'m s**-1 deg C' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 140 ; + } +#V*T product +'m s**-1 deg C' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 141 ; + } +#U*U product +'m s**-2' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 142 ; + } +#V*V product +'m s**-2' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 143 ; + } +#UV - U~V~ +'m s**-2' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 144 ; + } +#UT - U~T~ +'m s**-1 deg C' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 145 ; + } +#VT - V~T~ +'m s**-1 deg C' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 146 ; + } +#UU - U~U~ +'m s**-2' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 147 ; + } +#VV - V~V~ +'m s**-2' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 148 ; + } +#Sea level +'m' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 152 ; + } +#Barotropic stream function +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 153 ; + } +#Mixed layer depth +'m' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 154 ; + } +#Depth +'m' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 155 ; + } +#U stress +'Pa' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 168 ; + } +#V stress +'Pa' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 169 ; + } +#Turbulent kinetic energy input +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 170 ; + } +#Net surface heat flux +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 171 ; + } +#Surface solar radiation +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 172 ; + } +#P-E +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 173 ; + } +#Diagnosed sea surface temperature error +'deg C' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 180 ; + } +#Heat flux correction +'J m**-2' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 181 ; + } +#Observed sea surface temperature +'deg C' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 182 ; + } +#Observed heat flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 183 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 150 ; + parameterNumber = 255 ; + } +#In situ Temperature +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 128 ; + } +#Ocean potential temperature +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 129 ; + } +#Salinity +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 130 ; + } +#Ocean current zonal component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 131 ; + } +#Ocean current meridional component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 132 ; + } +#Ocean current vertical component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 133 ; + } +#Modulus of strain rate tensor +'s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 134 ; + } +#Vertical viscosity +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 135 ; + } +#Vertical diffusivity +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 136 ; + } +#Bottom level Depth +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 137 ; + } +#Sigma-theta +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 138 ; + } +#Richardson number +'~' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 139 ; + } +#UV product +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 140 ; + } +#UT product +'m s**-1 degC' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 141 ; + } +#VT product +'m s**-1 deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 142 ; + } +#UU product +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 143 ; + } +#VV product +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 144 ; + } +#Sea level +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 145 ; + } +#Sea level previous timestep +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 146 ; + } +#Barotropic stream function +'m**3 s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 147 ; + } +#Mixed layer depth +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 148 ; + } +#Bottom Pressure (equivalent height) +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 149 ; + } +#Steric height +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 150 ; + } +#Curl of Wind Stress +'N m**-3' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 151 ; + } +#Divergence of wind stress +'Nm**-3' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 152 ; + } +#U stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 153 ; + } +#V stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 154 ; + } +#Turbulent kinetic energy input +'J m**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 155 ; + } +#Net surface heat flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 156 ; + } +#Absorbed solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 157 ; + } +#Precipitation - evaporation +'m s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 158 ; + } +#Specified sea surface temperature +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 159 ; + } +#Specified surface heat flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 160 ; + } +#Diagnosed sea surface temperature error +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 161 ; + } +#Heat flux correction +'J m**-2' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 162 ; + } +#20 degrees isotherm depth +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 163 ; + } +#Average potential temperature in the upper 300m +'degrees C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 164 ; + } +#Vertically integrated zonal velocity (previous time step) +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 165 ; + } +#Vertically Integrated meridional velocity (previous time step) +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 166 ; + } +#Vertically integrated zonal volume transport +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 167 ; + } +#Vertically integrated meridional volume transport +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 168 ; + } +#Vertically integrated zonal heat transport +'J m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 169 ; + } +#Vertically integrated meridional heat transport +'J m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 170 ; + } +#U velocity maximum +'m s**-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 171 ; + } +#Depth of the velocity maximum +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 172 ; + } +#Salinity maximum +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 173 ; + } +#Depth of salinity maximum +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 174 ; + } +#Average salinity in the upper 300m +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 175 ; + } +#Layer Thickness at scalar points +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 176 ; + } +#Layer Thickness at vector points +'m' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 177 ; + } +#Potential temperature increment +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 178 ; + } +#Potential temperature analysis error +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 179 ; + } +#Background potential temperature +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 180 ; + } +#Analysed potential temperature +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 181 ; + } +#Potential temperature background error +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 182 ; + } +#Analysed salinity +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 183 ; + } +#Salinity increment +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 184 ; + } +#Estimated Bias in Temperature +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 185 ; + } +#Estimated Bias in Salinity +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 186 ; + } +#Zonal Velocity increment (from balance operator) +'m s**-1 per time step' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 187 ; + } +#Meridional Velocity increment (from balance operator) +'~' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 188 ; + } +#Salinity increment (from salinity data) +'psu per time step' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 190 ; + } +#Salinity analysis error +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 191 ; + } +#Background Salinity +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 192 ; + } +#Salinity background error +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 194 ; + } +#Estimated temperature bias from assimilation +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 199 ; + } +#Estimated salinity bias from assimilation +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 200 ; + } +#Temperature increment from relaxation term +'deg C per time step' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 201 ; + } +#Salinity increment from relaxation term +'~' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 202 ; + } +#Bias in the zonal pressure gradient (applied) +'Pa**m-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 203 ; + } +#Bias in the meridional pressure gradient (applied) +'Pa**m-1' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 204 ; + } +#Estimated temperature bias from relaxation +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 205 ; + } +#Estimated salinity bias from relaxation +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 206 ; + } +#First guess bias in temperature +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 207 ; + } +#First guess bias in salinity +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 208 ; + } +#Applied bias in pressure +'Pa' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 209 ; + } +#FG bias in pressure +'Pa' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 210 ; + } +#Bias in temperature(applied) +'deg C' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 211 ; + } +#Bias in salinity (applied) +'psu' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 212 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 151 ; + parameterNumber = 255 ; + } +#10 metre wind gust during averaging time +'m s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 49 ; + } +#vertical velocity (pressure) +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 135 ; + } +#Precipitable water content +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 137 ; + } +#Soil wetness level 1 +'m' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 140 ; + } +#Snow depth +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 141 ; + } +#Large-scale precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 142 ; + } +#Convective precipitation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 143 ; + } +#Snowfall +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 144 ; + } +#Height +'m' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 156 ; + } +#Relative humidity +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 157 ; + } +#Soil wetness level 2 +'m' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 171 ; + } +#East-West surface stress +'N m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 180 ; + } +#North-South surface stress +'N m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 181 ; + } +#Evaporation +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 182 ; + } +#Soil wetness level 3 +'m' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 184 ; + } +#Skin reservoir content +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 198 ; + } +#Percentage of vegetation +'%' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 199 ; + } +#Maximum temperature at 2 metres during averaging time +'K' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres during averaging time +'K' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 202 ; + } +#Runoff +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 205 ; + } +#Standard deviation of geopotential +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 206 ; + } +#Covariance of temperature and geopotential +'K m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 207 ; + } +#Standard deviation of temperature +'K' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 208 ; + } +#Covariance of specific humidity and geopotential +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 209 ; + } +#Covariance of specific humidity and temperature +'K' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 210 ; + } +#Standard deviation of specific humidity +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 211 ; + } +#Covariance of U component and geopotential +'m**3 s**-3' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 212 ; + } +#Covariance of U component and temperature +'K m s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 213 ; + } +#Covariance of U component and specific humidity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 214 ; + } +#Standard deviation of U velocity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 215 ; + } +#Covariance of V component and geopotential +'m**3 s**-3' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 216 ; + } +#Covariance of V component and temperature +'K m s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 217 ; + } +#Covariance of V component and specific humidity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 218 ; + } +#Covariance of V component and U component +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 219 ; + } +#Standard deviation of V component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 220 ; + } +#Covariance of W component and geopotential +'Pa m**2 s**-3' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 221 ; + } +#Covariance of W component and temperature +'K Pa s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 222 ; + } +#Covariance of W component and specific humidity +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 223 ; + } +#Covariance of W component and U component +'Pa m s**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 224 ; + } +#Covariance of W component and V component +'Pa m s**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 225 ; + } +#Standard deviation of vertical velocity +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 226 ; + } +#Instantaneous surface heat flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 231 ; + } +#Convective snowfall +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 239 ; + } +#Large scale snowfall +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 240 ; + } +#Cloud liquid water content +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 241 ; + } +#Cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 242 ; + } +#Forecast albedo +'~' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 243 ; + } +#10 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 246 ; + } +#Momentum flux +'N m**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 247 ; + } +#Gravity wave dissipation flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 249 ; + } +#Heaviside beta function +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 160 ; + parameterNumber = 254 ; + } +#Surface geopotential +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 51 ; + } +#Vertical integral of mass of atmosphere +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 53 ; + } +#Vertical integral of temperature +'K kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 54 ; + } +#Vertical integral of water vapour +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 55 ; + } +#Vertical integral of cloud liquid water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 56 ; + } +#Vertical integral of cloud frozen water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 57 ; + } +#Vertical integral of ozone +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 58 ; + } +#Vertical integral of kinetic energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 59 ; + } +#Vertical integral of thermal energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 60 ; + } +#Vertical integral of potential+internal energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 61 ; + } +#Vertical integral of potential+internal+latent energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 62 ; + } +#Vertical integral of total energy +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 63 ; + } +#Vertical integral of energy conversion +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 64 ; + } +#Vertical integral of eastward mass flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 65 ; + } +#Vertical integral of northward mass flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 66 ; + } +#Vertical integral of eastward kinetic energy flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 67 ; + } +#Vertical integral of northward kinetic energy flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 68 ; + } +#Vertical integral of eastward heat flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 69 ; + } +#Vertical integral of northward heat flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 70 ; + } +#Vertical integral of eastward water vapour flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 71 ; + } +#Vertical integral of northward water vapour flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 72 ; + } +#Vertical integral of eastward geopotential flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 73 ; + } +#Vertical integral of northward geopotential flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 74 ; + } +#Vertical integral of eastward total energy flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 75 ; + } +#Vertical integral of northward total energy flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 76 ; + } +#Vertical integral of eastward ozone flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 77 ; + } +#Vertical integral of northward ozone flux +'kg m**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 78 ; + } +#Vertical integral of divergence of mass flux +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 81 ; + } +#Vertical integral of divergence of kinetic energy flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 82 ; + } +#Vertical integral of divergence of thermal energy flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 83 ; + } +#Vertical integral of divergence of moisture flux +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 84 ; + } +#Vertical integral of divergence of geopotential flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 85 ; + } +#Vertical integral of divergence of total energy flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 86 ; + } +#Vertical integral of divergence of ozone flux +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 87 ; + } +#Tendency of short wave radiation +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 100 ; + } +#Tendency of long wave radiation +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 101 ; + } +#Tendency of clear sky short wave radiation +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 102 ; + } +#Tendency of clear sky long wave radiation +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 103 ; + } +#Updraught mass flux +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 104 ; + } +#Downdraught mass flux +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 105 ; + } +#Updraught detrainment rate +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 106 ; + } +#Downdraught detrainment rate +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 107 ; + } +#Total precipitation flux +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 108 ; + } +#Turbulent diffusion coefficient for heat +'m**2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 109 ; + } +#Tendency of temperature due to physics +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 110 ; + } +#Tendency of specific humidity due to physics +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 111 ; + } +#Tendency of u component due to physics +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 112 ; + } +#Tendency of v component due to physics +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 113 ; + } +#Variance of geopotential +'m**4 s**-4' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 206 ; + } +#Covariance of geopotential/temperature +'m**2 K s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 207 ; + } +#Variance of temperature +'K**2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 208 ; + } +#Covariance of geopotential/specific humidity +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 209 ; + } +#Covariance of temperature/specific humidity +'K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 210 ; + } +#Variance of specific humidity +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 211 ; + } +#Covariance of u component/geopotential +'m**3 s**-3' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 212 ; + } +#Covariance of u component/temperature +'m s**-1 K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 213 ; + } +#Covariance of u component/specific humidity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 214 ; + } +#Variance of u component +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 215 ; + } +#Covariance of v component/geopotential +'m**3 s**-3' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 216 ; + } +#Covariance of v component/temperature +'m s**-1 K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 217 ; + } +#Covariance of v component/specific humidity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 218 ; + } +#Covariance of v component/u component +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 219 ; + } +#Variance of v component +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 220 ; + } +#Covariance of omega/geopotential +'m**2 Pa s**-3' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 221 ; + } +#Covariance of omega/temperature +'Pa s**-1 K' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 222 ; + } +#Covariance of omega/specific humidity +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 223 ; + } +#Covariance of omega/u component +'m Pa s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 224 ; + } +#Covariance of omega/v component +'m Pa s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 225 ; + } +#Variance of omega +'Pa**2 s**-2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 226 ; + } +#Variance of surface pressure +'Pa**2' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 227 ; + } +#Variance of relative humidity +'dimensionless' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 229 ; + } +#Covariance of u component/ozone +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 230 ; + } +#Covariance of v component/ozone +'m s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 231 ; + } +#Covariance of omega/ozone +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 232 ; + } +#Variance of ozone +'dimensionless' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 233 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 162 ; + parameterNumber = 255 ; + } +#Total soil moisture +'m' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 149 ; + } +#Soil wetness level 2 +'m' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 171 ; + } +#Top net thermal radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 170 ; + parameterNumber = 179 ; + } +#Stream function anomaly +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 1 ; + } +#Velocity potential anomaly +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 2 ; + } +#Potential temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 3 ; + } +#Equivalent potential temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 4 ; + } +#Saturated equivalent potential temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 5 ; + } +#U component of divergent wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 11 ; + } +#V component of divergent wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 12 ; + } +#U component of rotational wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 13 ; + } +#V component of rotational wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 14 ; + } +#Unbalanced component of temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 21 ; + } +#Unbalanced component of logarithm of surface pressure anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 22 ; + } +#Unbalanced component of divergence anomaly +'s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 23 ; + } +#Lake cover anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 26 ; + } +#Low vegetation cover anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 27 ; + } +#High vegetation cover anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 28 ; + } +#Type of low vegetation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 29 ; + } +#Type of high vegetation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 30 ; + } +#Sea-ice cover anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 31 ; + } +#Snow albedo anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 32 ; + } +#Snow density anomaly +'kg m**-3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 33 ; + } +#Sea surface temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 34 ; + } +#Ice surface temperature anomaly layer 1 +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 35 ; + } +#Ice surface temperature anomaly layer 2 +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 36 ; + } +#Ice surface temperature anomaly layer 3 +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 37 ; + } +#Ice surface temperature anomaly layer 4 +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 38 ; + } +#Volumetric soil water anomaly layer 1 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 39 ; + } +#Volumetric soil water anomaly layer 2 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 40 ; + } +#Volumetric soil water anomaly layer 3 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 41 ; + } +#Volumetric soil water anomaly layer 4 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 42 ; + } +#Soil type anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 43 ; + } +#Snow evaporation anomaly +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 44 ; + } +#Snowmelt anomaly +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 45 ; + } +#Solar duration anomaly +'s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 46 ; + } +#Direct solar radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 47 ; + } +#Magnitude of surface stress anomaly +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 48 ; + } +#10 metre wind gust anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 49 ; + } +#Large-scale precipitation fraction anomaly +'s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 50 ; + } +#Maximum 2 metre temperature in the last 24 hours anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 51 ; + } +#Minimum 2 metre temperature in the last 24 hours anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 52 ; + } +#Montgomery potential anomaly +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 53 ; + } +#Pressure anomaly +'Pa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 54 ; + } +#Mean 2 metre temperature in the last 24 hours anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 55 ; + } +#Mean 2 metre dewpoint temperature in the last 24 hours anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 56 ; + } +#Downward UV radiation at the surface anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 58 ; + } +#Convective available potential energy anomaly +'J kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 59 ; + } +#Potential vorticity anomaly +'K m**2 kg**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 60 ; + } +#Total precipitation from observations anomaly +'Millimetres*100 + number of stations' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 61 ; + } +#Observation count anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 62 ; + } +#Start time for skin temperature difference anomaly +'s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 63 ; + } +#Finish time for skin temperature difference anomaly +'s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 64 ; + } +#Skin temperature difference anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 65 ; + } +#Total column liquid water anomaly +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 78 ; + } +#Total column ice water anomaly +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 79 ; + } +#Vertically integrated total energy anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 125 ; + } +#Generic parameter for sensitive area prediction +'Various' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 126 ; + } +#Atmospheric tide anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 127 ; + } +#Budget values anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 128 ; + } +#Geopotential anomaly +'m**2 s**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 129 ; + } +#Temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 130 ; + } +#U component of wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 131 ; + } +#V component of wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 132 ; + } +#Specific humidity anomaly +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 133 ; + } +#Surface pressure anomaly +'Pa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 134 ; + } +#Vertical velocity (pressure) anomaly +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 135 ; + } +#Total column water anomaly +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 136 ; + } +#Total column water vapour anomaly +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 137 ; + } +#Relative vorticity anomaly +'s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 138 ; + } +#Soil temperature anomaly level 1 +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 139 ; + } +#Soil wetness anomaly level 1 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 140 ; + } +#Snow depth anomaly +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 141 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'m' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 142 ; + } +#Convective precipitation anomaly +'m' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) anomaly +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 146 ; + } +#Surface latent heat flux anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 147 ; + } +#Charnock anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 148 ; + } +#Surface net radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 149 ; + } +#Top net radiation anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 150 ; + } +#Mean sea level pressure anomaly +'Pa' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 151 ; + } +#Logarithm of surface pressure anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 152 ; + } +#Short-wave heating rate anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 153 ; + } +#Long-wave heating rate anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 154 ; + } +#Relative divergence anomaly +'s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 155 ; + } +#Height anomaly +'m' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 156 ; + } +#Relative humidity anomaly +'%' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 157 ; + } +#Tendency of surface pressure anomaly +'Pa s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 158 ; + } +#Boundary layer height anomaly +'m' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 159 ; + } +#Standard deviation of orography anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 160 ; + } +#Anisotropy of sub-gridscale orography anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 161 ; + } +#Angle of sub-gridscale orography anomaly +'radians' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 162 ; + } +#Slope of sub-gridscale orography anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 163 ; + } +#Total cloud cover anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 164 ; + } +#10 metre U wind component anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 165 ; + } +#10 metre V wind component anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 166 ; + } +#2 metre temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 167 ; + } +#2 metre dewpoint temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 168 ; + } +#Surface solar radiation downwards anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 169 ; + } +#Soil temperature anomaly level 2 +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 170 ; + } +#Soil wetness anomaly level 2 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 171 ; + } +#Surface roughness anomaly +'m' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 173 ; + } +#Albedo anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 174 ; + } +#Surface thermal radiation downwards anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 175 ; + } +#Surface net solar radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 177 ; + } +#Top net solar radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 178 ; + } +#Top net thermal radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 179 ; + } +#East-West surface stress anomaly +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 180 ; + } +#North-South surface stress anomaly +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 181 ; + } +#Evaporation anomaly +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 182 ; + } +#Soil temperature anomaly level 3 +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 183 ; + } +#Soil wetness anomaly level 3 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 184 ; + } +#Convective cloud cover anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 185 ; + } +#Low cloud cover anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 186 ; + } +#Medium cloud cover anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 187 ; + } +#High cloud cover anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 188 ; + } +#Sunshine duration anomaly +'s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 189 ; + } +#East-West component of sub-gridscale orographic variance anomaly +'m**2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 190 ; + } +#North-South component of sub-gridscale orographic variance anomaly +'m**2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 191 ; + } +#North-West/South-East component of sub-gridscale orographic variance anomaly +'m**2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 192 ; + } +#North-East/South-West component of sub-gridscale orographic variance anomaly +'m**2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 193 ; + } +#Brightness temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 194 ; + } +#Longitudinal component of gravity wave stress anomaly +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress anomaly +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 197 ; + } +#Skin reservoir content anomaly +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 198 ; + } +#Vegetation fraction anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 199 ; + } +#Variance of sub-gridscale orography anomaly +'m**2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 200 ; + } +#Maximum temperature at 2 metres anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 201 ; + } +#Minimum temperature at 2 metres anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 202 ; + } +#Ozone mass mixing ratio anomaly +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 203 ; + } +#Precipitation analysis weights anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 204 ; + } +#Runoff anomaly +'m' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 205 ; + } +#Total column ozone anomaly +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 206 ; + } +#10 metre wind speed anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 207 ; + } +#Top net solar radiation clear sky anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 208 ; + } +#Top net thermal radiation clear sky anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 209 ; + } +#Surface net solar radiation clear sky anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 211 ; + } +#Solar insolation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 212 ; + } +#Diabatic heating by radiation anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 214 ; + } +#Diabatic heating by vertical diffusion anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 215 ; + } +#Diabatic heating by cumulus convection anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 216 ; + } +#Diabatic heating by large-scale condensation anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 217 ; + } +#Vertical diffusion of zonal wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 218 ; + } +#Vertical diffusion of meridional wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 219 ; + } +#East-West gravity wave drag tendency anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 220 ; + } +#North-South gravity wave drag tendency anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 221 ; + } +#Convective tendency of zonal wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 222 ; + } +#Convective tendency of meridional wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 223 ; + } +#Vertical diffusion of humidity anomaly +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 224 ; + } +#Humidity tendency by cumulus convection anomaly +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 225 ; + } +#Humidity tendency by large-scale condensation anomaly +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 226 ; + } +#Change from removal of negative humidity anomaly +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 227 ; + } +#Total precipitation anomaly +'m' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 228 ; + } +#Instantaneous X surface stress anomaly +'N m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 229 ; + } +#Instantaneous Y surface stress anomaly +'N m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 230 ; + } +#Instantaneous surface heat flux anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 231 ; + } +#Instantaneous moisture flux anomaly +'kg m**-2 s' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 232 ; + } +#Apparent surface humidity anomaly +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 233 ; + } +#Logarithm of surface roughness length for heat anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 234 ; + } +#Skin temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 235 ; + } +#Soil temperature level 4 anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 236 ; + } +#Soil wetness level 4 anomaly +'m' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 237 ; + } +#Temperature of snow layer anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 238 ; + } +#Convective snowfall anomaly +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 239 ; + } +#Large scale snowfall anomaly +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 240 ; + } +#Accumulated cloud fraction tendency anomaly +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 241 ; + } +#Accumulated liquid water tendency anomaly +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 242 ; + } +#Forecast albedo anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 243 ; + } +#Forecast surface roughness anomaly +'m' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 244 ; + } +#Forecast logarithm of surface roughness for heat anomaly +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 245 ; + } +#Cloud liquid water content anomaly +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 246 ; + } +#Cloud ice water content anomaly +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 247 ; + } +#Cloud cover anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 248 ; + } +#Accumulated ice water tendency anomaly +'(-1 to 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 249 ; + } +#Ice age anomaly +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 250 ; + } +#Adiabatic tendency of temperature anomaly +'K' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 251 ; + } +#Adiabatic tendency of humidity anomaly +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 252 ; + } +#Adiabatic tendency of zonal wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 253 ; + } +#Adiabatic tendency of meridional wind anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 254 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 171 ; + parameterNumber = 255 ; + } +#Snow evaporation +'m of water s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 44 ; + } +#Snowmelt +'m of water s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 45 ; + } +#Magnitude of surface stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 142 ; + } +#Convective precipitation +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) +'m of water equivalent s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 146 ; + } +#Surface latent heat flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 147 ; + } +#Surface net radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 149 ; + } +#Short-wave heating rate +'K s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 153 ; + } +#Long-wave heating rate +'K s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 154 ; + } +#Surface solar radiation downwards +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 175 ; + } +#Surface solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 176 ; + } +#Surface thermal radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 177 ; + } +#Top solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 178 ; + } +#Top thermal radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 179 ; + } +#East-West surface stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 180 ; + } +#North-South surface stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 181 ; + } +#Evaporation +'m of water s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 182 ; + } +#Sunshine duration +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress +'N m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 197 ; + } +#Runoff +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky +'J m**-2' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 211 ; + } +#Solar insolation +'W m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 212 ; + } +#Total precipitation +'m s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 228 ; + } +#Convective snowfall +'m of water equivalent s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 239 ; + } +#Large scale snowfall +'m of water equivalent s**-1' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 240 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 172 ; + parameterNumber = 255 ; + } +#Snow evaporation anomaly +'m of water s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 44 ; + } +#Snowmelt anomaly +'m of water s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 45 ; + } +#Magnitude of surface stress anomaly +'N m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 48 ; + } +#Large-scale precipitation fraction anomaly +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 50 ; + } +#Stratiform precipitation (Large-scale precipitation) anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 142 ; + } +#Convective precipitation anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) anomalous rate of accumulation +'m of water equivalent s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 146 ; + } +#Surface latent heat flux anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 147 ; + } +#Surface net radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 149 ; + } +#Short-wave heating rate anomaly +'K s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 153 ; + } +#Long-wave heating rate anomaly +'K s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 154 ; + } +#Surface solar radiation downwards anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 175 ; + } +#Surface solar radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 176 ; + } +#Surface thermal radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 177 ; + } +#Top solar radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 178 ; + } +#Top thermal radiation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 179 ; + } +#East-West surface stress anomaly +'N m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 180 ; + } +#North-South surface stress anomaly +'N m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 181 ; + } +#Evaporation anomaly +'m of water s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 182 ; + } +#Sunshine duration anomalous rate of accumulation +'dimensionless' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress anomaly +'N m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress anomaly +'N m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 197 ; + } +#Runoff anomaly +'m s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky anomaly +'J m**-2' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 211 ; + } +#Solar insolation anomaly +'W m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 212 ; + } +#Total precipitation anomalous rate of accumulation +'m s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 228 ; + } +#Convective snowfall anomaly +'m of water equivalent s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 239 ; + } +#Large scale snowfall anomaly +'m of water equivalent s**-1' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 240 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 173 ; + parameterNumber = 255 ; + } +#Total soil moisture +'m' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 6 ; + } +#Surface runoff +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 8 ; + } +#Sub-surface runoff +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 9 ; + } +#Fraction of sea-ice in sea +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 31 ; + } +#Open-sea surface temperature +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 34 ; + } +#Volumetric soil water layer 1 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 42 ; + } +#10 metre wind gust in the last 24 hours +'m s**-1' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 55 ; + } +#Net primary productivity +'kg C m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 83 ; + } +#10m U wind over land +'m s**-1' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 85 ; + } +#10m V wind over land +'m s**-1' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 86 ; + } +#1.5m temperature over land +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 87 ; + } +#1.5m dewpoint temperature over land +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 88 ; + } +#Top incoming solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 89 ; + } +#Top outgoing solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 90 ; + } +#Mean sea surface temperature +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 94 ; + } +#1.5m specific humidity +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 95 ; + } +#Sea-ice thickness +'m' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 98 ; + } +#Liquid water potential temperature +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 99 ; + } +#Ocean ice concentration +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 110 ; + } +#Ocean mean ice depth +'m' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 111 ; + } +#Soil temperature layer 1 +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 139 ; + } +#Average potential temperature in upper 293.4m +'degrees C' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 164 ; + } +#1.5m temperature +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 167 ; + } +#1.5m dewpoint temperature +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 168 ; + } +#Soil temperature layer 2 +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 170 ; + } +#Average salinity in upper 293.4m +'psu' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 175 ; + } +#Soil temperature layer 3 +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 202 ; + } +#Soil temperature layer 4 +'K' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 236 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 174 ; + parameterNumber = 255 ; + } +#Total soil moisture +'m' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 6 ; + } +#Fraction of sea-ice in sea +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 31 ; + } +#Open-sea surface temperature +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 34 ; + } +#Volumetric soil water layer 1 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 39 ; + } +#Volumetric soil water layer 2 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 40 ; + } +#Volumetric soil water layer 3 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 41 ; + } +#Volumetric soil water layer 4 +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 42 ; + } +#10m wind gust in the last 24 hours +'m s**-1' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 49 ; + } +#1.5m temperature - mean in the last 24 hours +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 55 ; + } +#Net primary productivity +'kg C m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 83 ; + } +#10m U wind over land +'m s**-1' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 85 ; + } +#10m V wind over land +'m s**-1' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 86 ; + } +#1.5m temperature over land +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 87 ; + } +#1.5m dewpoint temperature over land +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 88 ; + } +#Top incoming solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 89 ; + } +#Top outgoing solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 90 ; + } +#Ocean ice concentration +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 110 ; + } +#Ocean mean ice depth +'m' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 111 ; + } +#Soil temperature layer 1 +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 139 ; + } +#Average potential temperature in upper 293.4m +'degrees C' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 164 ; + } +#1.5m temperature +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 167 ; + } +#1.5m dewpoint temperature +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 168 ; + } +#Soil temperature layer 2 +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 170 ; + } +#Average salinity in upper 293.4m +'psu' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 175 ; + } +#Soil temperature layer 3 +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 183 ; + } +#1.5m temperature - maximum in the last 24 hours +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 201 ; + } +#1.5m temperature - minimum in the last 24 hours +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 202 ; + } +#Soil temperature layer 4 +'K' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 236 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 175 ; + parameterNumber = 255 ; + } +#Total soil wetness +'m' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 149 ; + } +#Surface net solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 177 ; + } +#Top net solar radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 178 ; + } +#Top net thermal radiation +'J m**-2' = { + discipline = 192 ; + parameterCategory = 180 ; + parameterNumber = 179 ; + } +#Snow depth +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 141 ; + } +#Field capacity +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 170 ; + } +#Wilting point +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 171 ; + } +#Roughness length +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 173 ; + } +#Total soil moisture +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 190 ; + parameterNumber = 229 ; + } +#2 metre dewpoint temperature difference +'K' = { + discipline = 192 ; + parameterCategory = 200 ; + parameterNumber = 168 ; + } +#downward shortwave radiant flux density +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 1 ; + } +#upward shortwave radiant flux density +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 2 ; + } +#downward longwave radiant flux density +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 3 ; + } +#upward longwave radiant flux density +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 4 ; + } +#downwd photosynthetic active radiant flux density +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 5 ; + } +#net shortwave flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 6 ; + } +#net longwave flux +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 7 ; + } +#total net radiative flux density +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 8 ; + } +#downw shortw radiant flux density, cloudfree part +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 9 ; + } +#upw shortw radiant flux density, cloudy part +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 10 ; + } +#downw longw radiant flux density, cloudfree part +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 11 ; + } +#upw longw radiant flux density, cloudy part +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 12 ; + } +#shortwave radiative heating rate +'K s**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 13 ; + } +#longwave radiative heating rate +'K s**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 14 ; + } +#total radiative heating rate +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 15 ; + } +#soil heat flux, surface +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 16 ; + } +#soil heat flux, bottom of layer +'J m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 17 ; + } +#fractional cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 29 ; + } +#cloud cover, grid scale +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 30 ; + } +#specific cloud water content +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 31 ; + } +#cloud water content, grid scale, vert integrated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 32 ; + } +#specific cloud ice content, grid scale +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 33 ; + } +#cloud ice content, grid scale, vert integrated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 34 ; + } +#specific rainwater content, grid scale +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 35 ; + } +#specific snow content, grid scale +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 36 ; + } +#specific rainwater content, gs, vert. integrated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 37 ; + } +#specific snow content, gs, vert. integrated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 38 ; + } +#total column water +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 41 ; + } +#vert. integral of divergence of tot. water content +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 42 ; + } +#cloud covers CH_CM_CL (000...888) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 50 ; + } +#cloud cover CH (0..8) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 51 ; + } +#cloud cover CM (0..8) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 52 ; + } +#cloud cover CL (0..8) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 53 ; + } +#total cloud cover (0..8) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 54 ; + } +#fog (0..8) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 55 ; + } +#fog +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 56 ; + } +#cloud cover, convective cirrus +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 60 ; + } +#specific cloud water content, convective clouds +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 61 ; + } +#cloud water content, conv clouds, vert integrated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 62 ; + } +#specific cloud ice content, convective clouds +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 63 ; + } +#cloud ice content, conv clouds, vert integrated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 64 ; + } +#convective mass flux +'kg s**-1 m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 65 ; + } +#Updraft velocity, convection +'m s**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 66 ; + } +#entrainment parameter, convection +'m**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 67 ; + } +#cloud base, convective clouds (above msl) +'m' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 68 ; + } +#cloud top, convective clouds (above msl) +'m' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 69 ; + } +#convective layers (00...77) (BKE) +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 70 ; + } +#KO-index +'dimensionless' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 71 ; + } +#convection base index +'dimensionless' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 72 ; + } +#convection top index +'dimensionless' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 73 ; + } +#convective temperature tendency +'K s**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 74 ; + } +#convective tendency of specific humidity +'s**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 75 ; + } +#convective tendency of total heat +'J kg**-1 s**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 76 ; + } +#convective tendency of total water +'s**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 77 ; + } +#convective momentum tendency (X-component) +'m s**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 78 ; + } +#convective momentum tendency (Y-component) +'m s**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 79 ; + } +#convective vorticity tendency +'s**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 80 ; + } +#convective divergence tendency +'s**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 81 ; + } +#top of dry convection (above msl) +'m' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 82 ; + } +#dry convection top index +'dimensionless' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 83 ; + } +#height of 0 degree Celsius isotherm above msl +'m' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 84 ; + } +#height of snow-fall limit +'m' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 85 ; + } +#spec. content of precip. particles +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 99 ; + } +#surface precipitation rate, rain, grid scale +'kg s**-1 m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 100 ; + } +#surface precipitation rate, snow, grid scale +'kg s**-1 m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 101 ; + } +#surface precipitation amount, rain, grid scale +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 102 ; + } +#surface precipitation rate, rain, convective +'kg s**-1 m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 111 ; + } +#surface precipitation rate, snow, convective +'kg s**-1 m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 112 ; + } +#surface precipitation amount, rain, convective +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 113 ; + } +#deviation of pressure from reference value +'Pa' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 139 ; + } +#coefficient of horizontal diffusion +'m**2 s**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 150 ; + } +#Maximum wind velocity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 187 ; + } +#water content of interception store +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 200 ; + } +#snow temperature +'K' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 203 ; + } +#ice surface temperature +'K' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 215 ; + } +#convective available potential energy +'J kg**-1' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 241 ; + } +#Indicates a missing value +'~' = { + discipline = 192 ; + parameterCategory = 201 ; + parameterNumber = 255 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + productDefinitionTemplateNumber = 44 ; + scaleFactorOfSecondSize = 8 ; + scaleFactorOfFirstSize = 8 ; + aerosolType = 62001 ; + scaledValueOfSecondSize = 55 ; + scaledValueOfFirstSize = 3 ; + typeOfSizeInterval = 2 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 11 ; + } +#Aerosol type 12 mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 12 ; + } +#Aerosol type 1 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 16 ; + } +#Aerosol type 2 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 17 ; + } +#Aerosol type 3 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 18 ; + } +#Aerosol type 4 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 19 ; + } +#Aerosol type 5 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 20 ; + } +#Aerosol type 6 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 21 ; + } +#Aerosol type 7 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 22 ; + } +#Aerosol type 8 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 23 ; + } +#Aerosol type 9 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 24 ; + } +#Aerosol type 10 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 25 ; + } +#Aerosol type 11 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 26 ; + } +#Aerosol type 12 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 42 ; + } +#Aerosol precursor mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 46 ; + } +#Aerosol small mode mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 47 ; + } +#Aerosol large mode mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 48 ; + } +#Aerosol precursor optical depth +'dimensionless' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 49 ; + } +#Aerosol small mode optical depth +'dimensionless' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 50 ; + } +#Aerosol large mode optical depth +'dimensionless' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 51 ; + } +#Dust emission potential +'kg s**2 m**-5' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 52 ; + } +#Lifting threshold speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 53 ; + } +#Soil clay content +'%' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 54 ; + } +#Carbon Dioxide +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 20 ; + parameterNumber = 2 ; + productDefinitionTemplateNumber = 40 ; + constituentType = 3 ; + } +#Carbon Dioxide +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 61 ; + } +#Methane +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 62 ; + } +#Nitrous oxide +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 63 ; + } +#Total column Carbon Dioxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 64 ; + } +#Total column Methane +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 65 ; + } +#Total column Nitrous oxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 66 ; + } +#Ocean flux of Carbon Dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 69 ; + } +#Methane Surface Fluxes +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 71 ; + } +#Wildfire flux of Carbon Dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 80 ; + } +#Wildfire flux of Carbon Monoxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 81 ; + } +#Wildfire flux of Methane +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 83 ; + } +#Wildfire flux of Hydrogen +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 85 ; + } +#Wildfire flux of Nitrous Oxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 87 ; + } +#Wildfire flux of Total Particulate Matter +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 89 ; + } +#Wildfire flux of Organic Carbon +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 90 ; + } +#Wildfire flux of Black Carbon +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 91 ; + } +#Wildfire overall flux of burnt Carbon +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 92 ; + } +#Wildfire fraction of C4 plants +'dimensionless' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 93 ; + } +#Wildfire vegetation map index +'dimensionless' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 94 ; + } +#Wildfire Combustion Completeness +'dimensionless' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 96 ; + } +#Wildfire fraction of area observed +'dimensionless' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 97 ; + } +#Wildfire observed area +'m**2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 98 ; + } +#Wildfire radiative power +'W m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 99 ; + } +#Wildfire combustion rate +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 100 ; + } +#Nitrogen dioxide +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 121 ; + } +#Sulphur dioxide +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 122 ; + } +#Carbon monoxide +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 123 ; + } +#Formaldehyde +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 124 ; + } +#Total column Nitrogen dioxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 125 ; + } +#Total column Sulphur dioxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 126 ; + } +#Total column Carbon monoxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 127 ; + } +#Total column Formaldehyde +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 128 ; + } +#Nitrogen Oxides +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 129 ; + } +#Total Column Nitrogen Oxides +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 131 ; + } +#Total column GRG tracer 1 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 133 ; + } +#Total column GRG tracer 2 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 135 ; + } +#Total column GRG tracer 3 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 137 ; + } +#Total column GRG tracer 4 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 139 ; + } +#Total column GRG tracer 5 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 141 ; + } +#Total column GRG tracer 6 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 143 ; + } +#Total column GRG tracer 7 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 145 ; + } +#Total column GRG tracer 8 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 147 ; + } +#Total column GRG tracer 9 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 149 ; + } +#Total column GRG tracer 10 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 150 ; + } +#Surface flux Nitrogen oxides +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 151 ; + } +#Surface flux Nitrogen dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 152 ; + } +#Surface flux Sulphur dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 153 ; + } +#Surface flux Carbon monoxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 154 ; + } +#Surface flux Formaldehyde +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 155 ; + } +#Surface flux GEMS Ozone +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 156 ; + } +#Surface flux reactive tracer 1 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 157 ; + } +#Surface flux reactive tracer 2 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 158 ; + } +#Surface flux reactive tracer 3 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 159 ; + } +#Surface flux reactive tracer 4 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 160 ; + } +#Surface flux reactive tracer 5 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 161 ; + } +#Surface flux reactive tracer 6 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 162 ; + } +#Surface flux reactive tracer 7 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 163 ; + } +#Surface flux reactive tracer 8 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 164 ; + } +#Surface flux reactive tracer 9 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 165 ; + } +#Surface flux reactive tracer 10 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 166 ; + } +#Radon +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 181 ; + } +#Sulphur Hexafluoride +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 182 ; + } +#Total column Radon +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 183 ; + } +#Total column Sulphur Hexafluoride +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 185 ; + } +#GEMS Ozone +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 203 ; + } +#GEMS Total column ozone +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'~' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 216 ; + } +#Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 1 ; + } +#Sea Salt Aerosol (0.5 - 5 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 2 ; + } +#Sea Salt Aerosol (5 - 20 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 3 ; + } +#Dust Aerosol (0.03 - 0.55 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 4 ; + } +#Dust Aerosol (0.55 - 0.9 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 5 ; + } +#Dust Aerosol (0.9 - 20 um) Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 6 ; + } +#Hydrophobic Organic Matter Aerosol Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 7 ; + } +#Hydrophilic Organic Matter Aerosol Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 8 ; + } +#Hydrophobic Black Carbon Aerosol Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 9 ; + } +#Hydrophilic Black Carbon Aerosol Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 10 ; + } +#Sulphate Aerosol Mixing Ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 11 ; + } +#Aerosol type 12 mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 12 ; + } +#Aerosol type 1 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 16 ; + } +#Aerosol type 2 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 17 ; + } +#Aerosol type 3 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 18 ; + } +#Aerosol type 4 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 19 ; + } +#Aerosol type 5 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 20 ; + } +#Aerosol type 6 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 21 ; + } +#Aerosol type 7 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 22 ; + } +#Aerosol type 8 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 23 ; + } +#Aerosol type 9 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 24 ; + } +#Aerosol type 10 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 25 ; + } +#Aerosol type 11 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 26 ; + } +#Aerosol type 12 source/gain accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 27 ; + } +#Aerosol type 1 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 31 ; + } +#Aerosol type 2 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 32 ; + } +#Aerosol type 3 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 33 ; + } +#Aerosol type 4 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 34 ; + } +#Aerosol type 5 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 35 ; + } +#Aerosol type 6 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 36 ; + } +#Aerosol type 7 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 37 ; + } +#Aerosol type 8 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 38 ; + } +#Aerosol type 9 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 39 ; + } +#Aerosol type 10 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 40 ; + } +#Aerosol type 11 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 41 ; + } +#Aerosol type 12 sink/loss accumulated +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 42 ; + } +#Aerosol precursor mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 46 ; + } +#Aerosol small mode mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 47 ; + } +#Aerosol large mode mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 48 ; + } +#Aerosol precursor optical depth +'dimensionless' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 49 ; + } +#Aerosol small mode optical depth +'dimensionless' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 50 ; + } +#Aerosol large mode optical depth +'dimensionless' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 51 ; + } +#Dust emission potential +'kg s**2 m**-5' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 52 ; + } +#Lifting threshold speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 53 ; + } +#Soil clay content +'%' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 54 ; + } +#Carbon Dioxide +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 61 ; + } +#Methane +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 62 ; + } +#Nitrous oxide +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 63 ; + } +#Total column Carbon Dioxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 64 ; + } +#Total column Methane +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 65 ; + } +#Total column Nitrous oxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 66 ; + } +#Ocean flux of Carbon Dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 67 ; + } +#Natural biosphere flux of Carbon Dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 68 ; + } +#Anthropogenic emissions of Carbon Dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 69 ; + } +#Methane Surface Fluxes +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 70 ; + } +#Methane loss rate due to radical hydroxyl (OH) +'s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 71 ; + } +#Wildfire flux of Carbon Dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 80 ; + } +#Wildfire flux of Carbon Monoxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 81 ; + } +#Wildfire flux of Methane +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 82 ; + } +#Wildfire flux of Non-Methane Hydro-Carbons +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 83 ; + } +#Wildfire flux of Hydrogen +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 84 ; + } +#Wildfire flux of Nitrogen Oxides NOx +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 85 ; + } +#Wildfire flux of Nitrous Oxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 86 ; + } +#Wildfire flux of Particulate Matter PM2.5 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 87 ; + } +#Wildfire flux of Total Particulate Matter +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 88 ; + } +#Wildfire flux of Total Carbon in Aerosols +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 89 ; + } +#Wildfire flux of Organic Carbon +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 90 ; + } +#Wildfire flux of Black Carbon +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 91 ; + } +#Wildfire overall flux of burnt Carbon +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 92 ; + } +#Wildfire fraction of C4 plants +'dimensionless' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 93 ; + } +#Wildfire vegetation map index +'dimensionless' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 94 ; + } +#Wildfire Combustion Completeness +'dimensionless' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 95 ; + } +#Wildfire Fuel Load: Carbon per unit area +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 96 ; + } +#Wildfire fraction of area observed +'dimensionless' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 97 ; + } +#Wildfire observed area +'m**2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 98 ; + } +#Wildfire radiative power +'W m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 99 ; + } +#Wildfire combustion rate +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 100 ; + } +#Nitrogen dioxide +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 121 ; + } +#Sulphur dioxide +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 122 ; + } +#Carbon monoxide +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 123 ; + } +#Formaldehyde +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 124 ; + } +#Total column Nitrogen dioxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 125 ; + } +#Total column Sulphur dioxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 126 ; + } +#Total column Carbon monoxide +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 127 ; + } +#Total column Formaldehyde +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 128 ; + } +#Nitrogen Oxides +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 129 ; + } +#Total Column Nitrogen Oxides +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 130 ; + } +#Reactive tracer 1 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 131 ; + } +#Total column GRG tracer 1 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 132 ; + } +#Reactive tracer 2 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 133 ; + } +#Total column GRG tracer 2 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 134 ; + } +#Reactive tracer 3 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 135 ; + } +#Total column GRG tracer 3 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 136 ; + } +#Reactive tracer 4 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 137 ; + } +#Total column GRG tracer 4 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 138 ; + } +#Reactive tracer 5 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 139 ; + } +#Total column GRG tracer 5 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 140 ; + } +#Reactive tracer 6 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 141 ; + } +#Total column GRG tracer 6 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 142 ; + } +#Reactive tracer 7 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 143 ; + } +#Total column GRG tracer 7 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 144 ; + } +#Reactive tracer 8 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 145 ; + } +#Total column GRG tracer 8 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 146 ; + } +#Reactive tracer 9 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 147 ; + } +#Total column GRG tracer 9 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 148 ; + } +#Reactive tracer 10 mass mixing ratio +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 149 ; + } +#Total column GRG tracer 10 +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 150 ; + } +#Surface flux Nitrogen oxides +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 151 ; + } +#Surface flux Nitrogen dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 152 ; + } +#Surface flux Sulphur dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 153 ; + } +#Surface flux Carbon monoxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 154 ; + } +#Surface flux Formaldehyde +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 155 ; + } +#Surface flux GEMS Ozone +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 156 ; + } +#Surface flux reactive tracer 1 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 157 ; + } +#Surface flux reactive tracer 2 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 158 ; + } +#Surface flux reactive tracer 3 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 159 ; + } +#Surface flux reactive tracer 4 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 160 ; + } +#Surface flux reactive tracer 5 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 161 ; + } +#Surface flux reactive tracer 6 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 162 ; + } +#Surface flux reactive tracer 7 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 163 ; + } +#Surface flux reactive tracer 8 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 164 ; + } +#Surface flux reactive tracer 9 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 165 ; + } +#Surface flux reactive tracer 10 +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 166 ; + } +#Radon +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 181 ; + } +#Sulphur Hexafluoride +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 182 ; + } +#Total column Radon +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 183 ; + } +#Total column Sulphur Hexafluoride +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 184 ; + } +#Anthropogenic Emissions of Sulphur Hexafluoride +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 185 ; + } +#GEMS Ozone +'kg kg**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 203 ; + } +#GEMS Total column ozone +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 206 ; + } +#Total Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 207 ; + } +#Sea Salt Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 208 ; + } +#Dust Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 209 ; + } +#Organic Matter Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 210 ; + } +#Black Carbon Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 211 ; + } +#Sulphate Aerosol Optical Depth at 550nm +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 212 ; + } +#Total Aerosol Optical Depth at 469nm +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 213 ; + } +#Total Aerosol Optical Depth at 670nm +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 214 ; + } +#Total Aerosol Optical Depth at 865nm +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 215 ; + } +#Total Aerosol Optical Depth at 1240nm +'~' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 216 ; + } +#Total precipitation observation count +'dimensionless' = { + discipline = 192 ; + parameterCategory = 220 ; + parameterNumber = 228 ; + } +#Friction velocity +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 3 ; + } +#Mean temperature at 2 metres +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 4 ; + } +#Mean of 10 metre wind speed +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 5 ; + } +#Mean total cloud cover +'(0 - 1)' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 6 ; + } +#Lake depth +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 7 ; + } +#Lake mix-layer temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 8 ; + } +#Lake mix-layer depth +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 9 ; + } +#Lake bottom temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 10 ; + } +#Lake total layer temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 11 ; + } +#Lake shape factor +'dimensionless' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 12 ; + } +#Lake ice temperature +'K' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 13 ; + } +#Lake ice depth +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 14 ; + } +#Minimum vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 15 ; + } +#Mean vertical gradient of refractivity inside trapping layer +'m**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 16 ; + } +#Duct base height +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 17 ; + } +#Trapping layer base height +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 18 ; + } +#Trapping layer top height +'m' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 19 ; + } +#Neutral wind at 10 m u-component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 131 ; + } +#Neutral wind at 10 m v-component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 132 ; + } +#Snow evaporation (variable resolution) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 44 ; + } +#Snowmelt (variable resolution) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 45 ; + } +#Solar duration (variable resolution) +'s' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 46 ; + } +#Downward UV radiation at the surface (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 57 ; + } +#Photosynthetically active radiation at the surface (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 58 ; + } +#Stratiform precipitation (Large-scale precipitation) (variable resolution) +'m' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 142 ; + } +#Convective precipitation (variable resolution) +'m' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 143 ; + } +#Snowfall (convective + stratiform) (variable resolution) +'m of water equivalent' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 144 ; + } +#Boundary layer dissipation (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 145 ; + } +#Surface sensible heat flux (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 146 ; + } +#Surface latent heat flux (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 147 ; + } +#Surface solar radiation downwards (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 169 ; + } +#Surface thermal radiation downwards (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 175 ; + } +#Surface net solar radiation (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 176 ; + } +#Surface net thermal radiation (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 177 ; + } +#Top net solar radiation (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 178 ; + } +#Top net thermal radiation (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 179 ; + } +#East-West surface stress (variable resolution) +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 180 ; + } +#North-South surface stress (variable resolution) +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 181 ; + } +#Evaporation (variable resolution) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 182 ; + } +#Sunshine duration (variable resolution) +'s' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 189 ; + } +#Longitudinal component of gravity wave stress (variable resolution) +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 195 ; + } +#Meridional component of gravity wave stress (variable resolution) +'N m**-2 s' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 196 ; + } +#Gravity wave dissipation (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 197 ; + } +#Skin reservoir content (variable resolution) +'kg m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 198 ; + } +#Runoff (variable resolution) +'m' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 205 ; + } +#Top net solar radiation, clear sky (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 208 ; + } +#Top net thermal radiation, clear sky (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 209 ; + } +#Surface net solar radiation, clear sky (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 210 ; + } +#Surface net thermal radiation, clear sky (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 211 ; + } +#TOA incident solar radiation (variable resolution) +'J m**-2' = { + discipline = 192 ; + parameterCategory = 230 ; + parameterNumber = 212 ; + } +#Surface temperature significance +'%' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 139 ; + } +#Mean sea level pressure significance +'%' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 151 ; + } +#2 metre temperature significance +'%' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 167 ; + } +#Total precipitation significance +'%' = { + discipline = 192 ; + parameterCategory = 234 ; + parameterNumber = 228 ; + } +#U-component stokes drift +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 215 ; + } +#V-component stokes drift +'m s**-1' = { + discipline = 192 ; + parameterCategory = 140 ; + parameterNumber = 216 ; + } +#Wildfire radiative power maximum +'W' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 210 ; + parameterNumber = 117 ; + } +#Wildfire radiative power maximum +'W' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 101 ; + } +#Wildfire flux of Sulfur Dioxide +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 102 ; + } +#Wildfire Flux of Methanol (CH3OH) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 103 ; + } +#Wildfire Flux of Ethanol (C2H5OH) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 104 ; + } +#Wildfire Flux of Propane (C3H8) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 105 ; + } +#Wildfire Flux of Ethene (C2H4) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 106 ; + } +#Wildfire Flux of Propene (C3H6) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 107 ; + } +#Wildfire Flux of Isoprene (C5H8) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 108 ; + } +#Wildfire Flux of Terpenes (C5H8)n +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 109 ; + } +#Wildfire Flux of Toluene_lump (C7H8+ C6H6 + C8H10) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 110 ; + } +#Wildfire Flux of Higher Alkenes (CnH2n, C>=4) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 111 ; + } +#Wildfire Flux of Higher Alkanes (CnH2n+2, C>=4) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 112 ; + } +#Wildfire Flux of Formaldehyde (CH2O) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 113 ; + } +#Wildfire Flux of Acetaldehyde (C2H4O) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 114 ; + } +#Wildfire Flux of Acetone (C3H6O) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 115 ; + } +#Wildfire Flux of Ammonia (NH3) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 116 ; + } +#Wildfire Flux of Dimethyl Sulfide (DMS) (C2H6S) +'kg m**-2 s**-1' = { + discipline = 192 ; + parameterCategory = 211 ; + parameterNumber = 117 ; + } +#V-tendency from non-orographic wave drag +'m s**-2' = { + localTablesVersion = 228 ; + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 134 ; + } +#U-tendency from non-orographic wave drag +'m s**-2' = { + localTablesVersion = 228 ; + discipline = 0 ; + parameterCategory = 254 ; + parameterNumber = 136 ; + } +#100 metre U wind component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 246 ; + } +#100 metre V wind component +'m s**-1' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 247 ; + } +#ASCAT first soil moisture CDF matching parameter +'m**3 m**-3' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 253 ; + } +#ASCAT second soil moisture CDF matching parameter +'dimensionless' = { + discipline = 192 ; + parameterCategory = 228 ; + parameterNumber = 254 ; +} diff --git a/definitions/grib2/localConcepts/edzw/name.def b/definitions/grib2/localConcepts/edzw/name.def new file mode 100644 index 000000000..453288048 --- /dev/null +++ b/definitions/grib2/localConcepts/edzw/name.def @@ -0,0 +1,3050 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'Pressure (S) (not reduced)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure +'Pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Pressure Reduced to MSL +'Pressure Reduced to MSL' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 101 ; + } +#Pressure Tendency (S) +'Pressure Tendency (S)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (S) +'Geopotential (S)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (full lev) +'Geopotential (full lev)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Geopotential +'Geopotential' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Geometric Height of the earths surface above sea level +'Geometric Height of the earths surface above sea level' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'Geometric Height of the layer limits above sea level(NN)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Total Column Integrated Ozone +'Total Column Integrated Ozone' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature (G) +'Temperature (G)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#2m Temperature (AV) +'2m Temperature (AV)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Climat. temperature, 2m Temperature +'Climat. temperature, 2m Temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Temperature +'Temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Max 2m Temperature (i) +'Max 2m Temperature (i)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Min 2m Temperature (i) +'Min 2m Temperature (i)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Dew Point Temperature (AV) +'2m Dew Point Temperature (AV)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Radar spectra (1) +'Radar spectra (1)' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Wave spectra (1) +'Wave spectra (1)' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Wave spectra (2) +'Wave spectra (2)' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Wave spectra (3) +'Wave spectra (3)' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Wind Direction (DD_10M) +'Wind Direction (DD_10M)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Wind Direction (DD) +'Wind Direction (DD)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Wind speed (SP_10M) +'Wind speed (SP_10M)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Wind speed (SP) +'Wind speed (SP)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#U component of wind +'U component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#U component of wind +'U component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#V component of wind +'V component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#V component of wind +'V component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'Vertical Velocity (Pressure) ( omega=dp/dt )' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Vertical Velocity (Geometric) (w) +'Vertical Velocity (Geometric) (w)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 9 ; + } +#Specific Humidity (S) +'Specific Humidity (S)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Specific Humidity (2m) +'Specific Humidity (2m)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Specific Humidity +'Specific Humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Relative Humidity +'2m Relative Humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Relative Humidity +'Relative Humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Total column integrated water vapour +'Total column integrated water vapour' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + } +#Evaporation (s) +'Evaporation (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total Column-Integrated Cloud Ice +'Total Column-Integrated Cloud Ice' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Precipitation rate (S) +'Total Precipitation rate (S)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Large-Scale Precipitation rate +'Large-Scale Precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective Precipitation rate +'Convective Precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow depth water equivalent +'Snow depth water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow Depth +'Snow Depth' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Cloud Cover +'Total Cloud Cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Cloud Cover +'Convective Cloud Cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Cover (800 hPa - Soil) +'Cloud Cover (800 hPa - Soil)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 800 ; + } +#Cloud Cover (400 - 800 hPa) +'Cloud Cover (400 - 800 hPa)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 400 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 800 ; + } +#Cloud Cover (0 - 400 hPa) +'Cloud Cover (0 - 400 hPa)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 400 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Total Column-Integrated Cloud Water +'Total Column-Integrated Cloud Water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'Convective Snowfall rate water equivalent (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Large-Scale snowfall rate water equivalent (s) +'Large-Scale snowfall rate water equivalent (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Land Cover (1=land, 0=sea) +'Land Cover (1=land, 0=sea)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface Roughness length Surface Roughness +'Surface Roughness length Surface Roughness' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'Albedo (in short-wave)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'Albedo (in short-wave)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'Soil Temperature ( 36 cm depth, vv=0h)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 36 ; + } +#Soil Temperature (41 cm depth) +'Soil Temperature (41 cm depth)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 41 ; + } +#Soil Temperature +'Soil Temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 9 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature +'Soil Temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture +'Column-integrated Soil Moisture' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 190 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'Column-integrated Soil Moisture (1) 0 -10 cm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 10 ; + scaledValueOfFirstFixedSurface = 0 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'Column-integrated Soil Moisture (2) 10-100cm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 100 ; + } +#Plant cover +'Plant cover' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Water Runoff (10-100) +'Water Runoff (10-100)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Water Runoff (10-190) +'Water Runoff (10-190)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 190 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Water Runoff (s) +'Water Runoff (s)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 10 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'Sea Ice Cover ( 0= free, 1=cover)' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Thickness +'sea Ice Thickness' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Significant height of combined wind waves and swell +'Significant height of combined wind waves and swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Direction of wind waves +'Direction of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Significant height of wind waves +'Significant height of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'Mean period of wind waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Direction of swell waves +'Direction of swell waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Significant height of swell waves +'Significant height of swell waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Mean period of swell waves +'Mean period of swell waves' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Net short wave radiation flux (m) (at the surface) +'Net short wave radiation flux (m) (at the surface)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Net short wave radiation flux +'Net short wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + } +#Net long wave radiation flux (m) (at the surface) +'Net long wave radiation flux (m) (at the surface)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Net long wave radiation flux +'Net long wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + } +#Net short wave radiation flux (m) (on the model top) +'Net short wave radiation flux (m) (on the model top)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'Net short wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'Net long wave radiation flux (m) (on the model top)' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'Net long wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + } +#Latent Heat Net Flux (m) +'Latent Heat Net Flux (m)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Sensible Heat Net Flux (m) +'Sensible Heat Net Flux (m)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Momentum Flux, U-Component (m) +'Momentum Flux, U-Component (m)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Momentum Flux, V-Component (m) +'Momentum Flux, V-Component (m)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation (m) (at the surface) +'Photosynthetically active radiation (m) (at the surface)' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation +'Photosynthetically active radiation' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + } +#Solar radiation heating rate +'Solar radiation heating rate' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Thermal radiation heating rate +'Thermal radiation heating rate' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Latent heat flux from bare soil +'Latent heat flux from bare soil' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Latent heat flux from plants +'Latent heat flux from plants' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + typeOfStatisticalProcessing = 0 ; + } +#Sunshine +'Sunshine' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Stomatal Resistance +'Stomatal Resistance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Cloud cover +'Cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Non-Convective Cloud Cover, grid scale +'Non-Convective Cloud Cover, grid scale' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 14 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Mixing Ratio +'Cloud Mixing Ratio' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Cloud Ice Mixing Ratio +'Cloud Ice Mixing Ratio' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 82 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Rain mixing ratio +'Rain mixing ratio' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 24 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Snow mixing ratio +'Snow mixing ratio' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 25 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated rain +'Total column integrated rain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + } +#Total column integrated snow +'Total column integrated snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + } +#Grauple +'Grauple' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated grauple +'Total column integrated grauple' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 74 ; + } +#Total Column integrated water (all components incl. precipitation) +'Total Column integrated water (all components incl. precipitation)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + } +#vertical integral of divergence of total water content (s) +'vertical integral of divergence of total water content (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#subgrid scale cloud water +'subgrid scale cloud water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#subgridscale cloud ice +'subgridscale cloud ice' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#cloud base above msl, shallow convection +'cloud base above msl, shallow convection' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 2 ; + } +#cloud top above msl, shallow convection +'cloud top above msl, shallow convection' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 3 ; + } +#specific cloud water content, convective cloud +'specific cloud water content, convective cloud' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Height of Convective Cloud Base (i) +'Height of Convective Cloud Base (i)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 2 ; + } +#Height of Convective Cloud Top (i) +'Height of Convective Cloud Top (i)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'base index (vertical level) of main convective cloud (i)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'top index (vertical level) of main convective cloud (i)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to convection +'Temperature tendency due to convection' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific humitiy tendency due to convection +'Specific humitiy tendency due to convection' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#zonal wind tendency due to convection +'zonal wind tendency due to convection' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to convection +'meridional wind tendency due to convection' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#height of top of dry convection +'height of top of dry convection' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'height of 0 degree celsius level code 0,3,6 ?' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 4 ; + } +#Height of snow fall limit +'Height of snow fall limit' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 204 ; + } +#Tendency of specific cloud liquid water content due to conversion +'Tendency of specific cloud liquid water content due to conversion' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud ice content due to convection +'tendency of specific cloud ice content due to convection' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'Specific content of precipitation particles (needed for water loadin)g' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Large scale rain rate +'Large scale rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale snowfall rate water equivalent +'Large scale snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate (s) +'Large scale rain rate (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective rain rate +'Convective rain rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective snowfall rate water equivalent +'Convective snowfall rate water equivalent' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate (s) +'Convective rain rate (s)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#rain amount, grid-scale plus convective +'rain amount, grid-scale plus convective' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#snow amount, grid-scale plus convective +'snow amount, grid-scale plus convective' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 66 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to grid scale precipation +'Temperature tendency due to grid scale precipation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific humitiy tendency due to grid scale precipitation +'Specific humitiy tendency due to grid scale precipitation' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'tendency of specific cloud liquid water content due to grid scale precipitation' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'Fresh snow factor (weighting function for albedo indicating freshness of snow)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 203 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'tendency of specific cloud ice content due to grid scale precipitation' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Graupel (snow pellets) precipitation rate +'Graupel (snow pellets) precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + } +#Graupel (snow pellets) precipitation rate +'Graupel (snow pellets) precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow density +'Snow density' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure perturbation +'Pressure perturbation' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#supercell detection index 1 (rot. up+down drafts) +'supercell detection index 1 (rot. up+down drafts)' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'supercell detection index 2 (only rot. up drafts)' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy, most unstable +'Convective Available Potential Energy, most unstable' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Inhibition, most unstable +'Convective Inhibition, most unstable' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Available Potential Energy, mean layer +'Convective Available Potential Energy, mean layer' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective Inhibition, mean layer +'Convective Inhibition, mean layer' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective turbulent kinetic enery +'Convective turbulent kinetic enery' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 24 ; + } +#Tendency of turbulent kinetic energy +'Tendency of turbulent kinetic energy' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Kinetic Energy +'Kinetic Energy' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Turbulent Kinetic Energy +'Turbulent Kinetic Energy' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 11 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusioncoefficient for momentum +'Turbulent diffusioncoefficient for momentum' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 31 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'Turbulent diffusion coefficient for heat (and moisture)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Turbulent transfer coefficient for impulse +'Turbulent transfer coefficient for impulse' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'Turbulent transfer coefficient for heat (and Moisture)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + } +#mixed layer depth +'mixed layer depth' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#maximum Wind 10m +'maximum Wind 10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfStatisticalProcessing = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Air concentration of Ruthenium 103 +'Air concentration of Ruthenium 103' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + } +#Soil Temperature (multilayers) +'Soil Temperature (multilayers)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Column-integrated Soil Moisture (multilayers) +'Column-integrated Soil Moisture (multilayers)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#soil ice content (multilayers) +'soil ice content (multilayers)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Plant Canopy Surface Water +'Plant Canopy Surface Water' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow temperature (top of snow) +'Snow temperature (top of snow)' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimal Stomatal Resistance +'Minimal Stomatal Resistance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Temperature +'sea Ice Temperature' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'Base reflectivity' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'Base reflectivity' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Base reflectivity (cmax) +'Base reflectivity (cmax)' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 10 ; + } +#unknown +'unknown' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Effective transmissivity of solar radiation +'Effective transmissivity of solar radiation' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#sum of contributions to evaporation +'sum of contributions to evaporation' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#total transpiration from all soil layers +'total transpiration from all soil layers' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#total forcing at soil surface +'total forcing at soil surface' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#residuum of soil moisture +'residuum of soil moisture' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Massflux at convective cloud base +'Massflux at convective cloud base' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 205 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy +'Convective Available Potential Energy' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#moisture convergence for Kuo-type closure +'moisture convergence for Kuo-type closure' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 206 ; + typeOfFirstFixedSurface = 1 ; + } +#total wave direction +'total wave direction' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#wind sea mean period +'wind sea mean period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 101 ; + } +#wind sea peak period +'wind sea peak period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#swell mean period +'swell mean period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 101 ; + } +#swell peak period +'swell peak period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#total wave peak period +'total wave peak period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#total wave mean period +'total wave mean period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#total Tm1 period +'total Tm1 period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#total Tm2 period +'total Tm2 period' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#total directional spread +'total directional spread' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#analysis error(standard deviation), geopotential(gpm) +'analysis error(standard deviation), geopotential(gpm)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#analysis error(standard deviation), u-comp. of wind +'analysis error(standard deviation), u-comp. of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#analysis error(standard deviation), v-comp. of wind +'analysis error(standard deviation), v-comp. of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#zonal wind tendency due to subgrid scale oro. +'zonal wind tendency due to subgrid scale oro.' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#meridional wind tendency due to subgrid scale oro. +'meridional wind tendency due to subgrid scale oro.' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Standard deviation of sub-grid scale orography +'Standard deviation of sub-grid scale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 1 ; + } +#Anisotropy of sub-gridscale orography +'Anisotropy of sub-gridscale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + } +#Angle of sub-gridscale orography +'Angle of sub-gridscale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + } +#Slope of sub-gridscale orography +'Slope of sub-gridscale orography' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 1 ; + } +#surface emissivity +'surface emissivity' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Type +'Soil Type' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Leaf area index +'Leaf area index' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + } +#root depth of vegetation +'root depth of vegetation' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfFirstFixedSurface = 1 ; + } +#height of ozone maximum (climatological) +'height of ozone maximum (climatological)' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#vertically integrated ozone content (climatological) +'vertically integrated ozone content (climatological)' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the vegetation phase +'Plant covering degree in the vegetation phase' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Plant covering degree in the quiescent phas +'Plant covering degree in the quiescent phas' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Max Leaf area index +'Max Leaf area index' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Min Leaf area index +'Min Leaf area index' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Orographie + Land-Meer-Verteilung +'Orographie + Land-Meer-Verteilung' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#variance of soil moisture content (0-10) +'variance of soil moisture content (0-10)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 10 ; + } +#variance of soil moisture content (10-100) +'variance of soil moisture content (10-100)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfSecondFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#evergreen forest +'evergreen forest' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#deciduous forest +'deciduous forest' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfFirstFixedSurface = 1 ; + } +#normalized differential vegetation index +'normalized differential vegetation index' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#normalized differential vegetation index (NDVI) +'normalized differential vegetation index (NDVI)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Total sulfate aerosol +'Total sulfate aerosol' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + } +#Total sulfate aerosol (12M) +'Total sulfate aerosol (12M)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + } +#Total soil dust aerosol +'Total soil dust aerosol' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + } +#Total soil dust aerosol (12M) +'Total soil dust aerosol (12M)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Organic aerosol +'Organic aerosol' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + } +#Organic aerosol (12M) +'Organic aerosol (12M)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Black carbon aerosol +'Black carbon aerosol' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + } +#Black carbon aerosol (12M) +'Black carbon aerosol (12M)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Sea salt aerosol +'Sea salt aerosol' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + } +#Sea salt aerosol (12M) +'Sea salt aerosol (12M)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 0 ; + } +#tendency of specific humidity +'tendency of specific humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 207 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#water vapor flux +'water vapor flux' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 208 ; + } +#Coriolis parameter +'Coriolis parameter' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical latitude +'geographical latitude' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical longitude +'geographical longitude' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Friction velocity +'Friction velocity' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Delay of the GPS signal trough the (total) atm. +'Delay of the GPS signal trough the (total) atm.' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'Delay of the GPS signal trough wet atmos.' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'Delay of the GPS signal trough dry atmos.' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Ozone Mixing Ratio +'Ozone Mixing Ratio' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'Air concentration of Ruthenium 103 (Ru103- concentration)' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 192 ; + } +#Ru103-dry deposition +'Ru103-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 193 ; + } +#Ru103-wet deposition +'Ru103-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 194 ; + } +#Air concentration of Strontium 90 +'Air concentration of Strontium 90' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 195 ; + } +#Sr90-dry deposition +'Sr90-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 196 ; + } +#Sr90-wet deposition +'Sr90-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 197 ; + } +#I131-concentration +'I131-concentration' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 198 ; + } +#I131-dry deposition +'I131-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 199 ; + } +#I131-wet deposition +'I131-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 200 ; + } +#Cs137-concentration +'Cs137-concentration' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 201 ; + } +#Cs137-dry deposition +'Cs137-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 202 ; + } +#Cs137-wet deposition +'Cs137-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 203 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'Air concentration of Tellurium 132 (Te132-concentration)' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 204 ; + } +#Te132-dry deposition +'Te132-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 205 ; + } +#Te132-wet deposition +'Te132-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 206 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'Air concentration of Zirconium 95 (Zr95-concentration)' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 207 ; + } +#Zr95-dry deposition +'Zr95-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 208 ; + } +#Zr95-wet deposition +'Zr95-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 209 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'Air concentration of Krypton 85 (Kr85-concentration)' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 210 ; + } +#Kr85-dry deposition +'Kr85-dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 211 ; + } +#Kr85-wet deposition +'Kr85-wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 212 ; + } +#TRACER - concentration +'TRACER - concentration' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 213 ; + } +#TRACER - dry deposition +'TRACER - dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 214 ; + } +#TRACER - wet deposition +'TRACER - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 215 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'Air concentration of Xenon 133 (Xe133 - concentration)' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 216 ; + } +#Xe133 - dry deposition +'Xe133 - dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 217 ; + } +#Xe133 - wet deposition +'Xe133 - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 218 ; + } +#I131g - concentration +'I131g - concentration' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 219 ; + } +#Xe133 - wet deposition +'Xe133 - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 220 ; + } +#I131g - wet deposition +'I131g - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 221 ; + } +#I131o - concentration +'I131o - concentration' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 222 ; + } +#I131o - dry deposition +'I131o - dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 223 ; + } +#I131o - wet deposition +'I131o - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 224 ; + } +#Air concentration of Barium 40 +'Air concentration of Barium 40' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 225 ; + } +#Ba140 - dry deposition +'Ba140 - dry deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 226 ; + } +#Ba140 - wet deposition +'Ba140 - wet deposition' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 227 ; + } +#u-momentum flux due to SSO-effects +'u-momentum flux due to SSO-effects' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#u-momentum flux due to SSO-effects +'u-momentum flux due to SSO-effects' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'v-momentum flux due to SSO-effects' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#v-momentum flux due to SSO-effects +'v-momentum flux due to SSO-effects' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Gravity wave dissipation (vertical integral) +'Gravity wave dissipation (vertical integral)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Gravity wave dissipation (vertical integral) +'Gravity wave dissipation (vertical integral)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'UV_Index_Maximum_W UV_Index clouded (W), daily maximum' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 51 ; + } +#wind shear +'wind shear' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + } +#storm relative helicity +'storm relative helicity' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#absolute vorticity advection +'absolute vorticity advection' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 1 ; + } +#weather interpretation (WMO) +'weather interpretation (WMO)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 1 ; + } +#Isentrope potentielle Vorticity +'Isentrope potentielle Vorticity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 107 ; + } +#Druck einer isentropen Flaeche +'Druck einer isentropen Flaeche' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 107 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#KO index +'KO index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Aequivalentpotentielle Temperatur +'Aequivalentpotentielle Temperatur' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Ceiling +'Ceiling' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'Icing Grade (1=LGT,2=MOD,3=SEV)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 7 ; + } +#modified cloud depth for media +'modified cloud depth for media' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + } +#modified cloud cover for media +'modified cloud cover for media' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'Monthly Mean of RMS of difference FG-AN of u-component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'Monthly Mean of RMS of difference IA-AN of u-component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'Monthly Mean of RMS of difference FG-AN of v-component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'Monthly Mean of RMS of difference IA-AN of v-component of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'Monthly Mean of RMS of difference FG-AN of geopotential' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'Monthly Mean of RMS of difference IA-AN of geopotential' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'Monthly Mean of RMS of difference FG-AN of relative humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'Monthly Mean of RMS of difference IA-AN of relative humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'Monthly Mean of RMS of difference FG-AN of temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'Monthly Mean of RMS of difference IA-AN of temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'Monthly Mean of RMS of difference FG-AN of kinetic energy' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'Monthly Mean of RMS of difference IA-AN of kinetic energy' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'Synth. Sat. brightness temperature cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature clear sky +'Synth. Sat. brightness temperature clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'Synth. Sat. radiance cloudy' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 114942 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance clear sky +'Synth. Sat. radiance clear sky' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#smoothed forecast, temperature +'smoothed forecast, temperature' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, maximum temp. +'smoothed forecast, maximum temp.' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, minimum temp. +'smoothed forecast, minimum temp.' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, dew point temp. +'smoothed forecast, dew point temp.' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, u comp. of wind +'smoothed forecast, u comp. of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, v comp. of wind +'smoothed forecast, v comp. of wind' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, total precipitation rate +'smoothed forecast, total precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 1 ; + } +#smoothed forecast, total cloud cover +'smoothed forecast, total cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 1 ; + } +#smoothed forecast, cloud cover low +'smoothed forecast, cloud cover low' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaledValueOfFirstFixedSurface = 800 ; + } +#smoothed forecast, cloud cover medium +'smoothed forecast, cloud cover medium' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 800 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + } +#smoothed forecast, cloud cover high +'smoothed forecast, cloud cover high' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 400 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'smoothed forecast, large-scale snowfall rate w.e.' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#smoothed forecast, soil temperature +'smoothed forecast, soil temperature' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 106 ; + } +#smoothed forecast, wind speed (gust) +'smoothed forecast, wind speed (gust)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + } +#calibrated forecast, total precipitation rate +'calibrated forecast, total precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'calibrated forecast, large-scale snowfall rate w.e.' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 1 ; + } +#calibrated forecast, wind speed (gust) +'calibrated forecast, wind speed (gust)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Obser. Sat. Meteosat sec. generation Albedo (scaled)' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + scaledValueOfCentralWaveNumber = 2000000 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Obser. Sat. Meteosat sec. generation Albedo (scaled)' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 625000 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Obser. Sat. Meteosat sec. generation Albedo (scaled)' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 1666666 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Obser. Sat. Meteosat sec. generation Albedo (scaled)' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 1250000 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 83333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Obser. Sat. Meteosat sec. generation brightness temperature' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; +} diff --git a/definitions/grib2/localConcepts/edzw/paramId.def b/definitions/grib2/localConcepts/edzw/paramId.def new file mode 100644 index 000000000..c001e9bad --- /dev/null +++ b/definitions/grib2/localConcepts/edzw/paramId.def @@ -0,0 +1,3050 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'500000' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure +'500001' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Pressure Reduced to MSL +'500002' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 101 ; + } +#Pressure Tendency (S) +'500003' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (S) +'500004' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (full lev) +'500005' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Geopotential +'500006' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Geometric Height of the earths surface above sea level +'500007' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'500008' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total Column Integrated Ozone +'500009' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature (G) +'500010' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#2m Temperature (AV) +'500012' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Climat. temperature, 2m Temperature +'500013' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 9 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 0 ; + } +#Temperature +'500014' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Max 2m Temperature (i) +'500015' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Min 2m Temperature (i) +'500016' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#2m Dew Point Temperature (AV) +'500018' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Radar spectra (1) +'500019' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 6 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Wave spectra (1) +'500020' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Wave spectra (2) +'500021' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Wave spectra (3) +'500022' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Wind Direction (DD_10M) +'500023' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Wind Direction (DD) +'500024' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Wind speed (SP_10M) +'500025' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Wind speed (SP) +'500026' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#U component of wind +'500027' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#U component of wind +'500028' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#V component of wind +'500029' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#V component of wind +'500030' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'500031' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Vertical Velocity (Geometric) (w) +'500032' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 9 ; + } +#Specific Humidity (S) +'500033' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Specific Humidity (2m) +'500034' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Specific Humidity +'500035' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Relative Humidity +'500036' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Relative Humidity +'500037' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Total column integrated water vapour +'500038' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + } +#Evaporation (s) +'500039' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total Column-Integrated Cloud Ice +'500040' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Precipitation rate (S) +'500041' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Large-Scale Precipitation rate +'500042' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective Precipitation rate +'500043' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow depth water equivalent +'500044' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow Depth +'500045' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Cloud Cover +'500046' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Cloud Cover +'500047' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Cover (800 hPa - Soil) +'500048' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 1 ; + scaledValueOfFirstFixedSurface = 800 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Cloud Cover (400 - 800 hPa) +'500049' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 800 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + } +#Cloud Cover (0 - 400 hPa) +'500050' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 400 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Total Column-Integrated Cloud Water +'500051' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'500052' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Large-Scale snowfall rate water equivalent (s) +'500053' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Land Cover (1=land, 0=sea) +'500054' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface Roughness length Surface Roughness +'500055' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'500056' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'500057' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'500058' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 36 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature (41 cm depth) +'500059' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 41 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature +'500060' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 9 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature +'500061' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Column-integrated Soil Moisture +'500062' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 190 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'500063' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 10 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'500064' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Plant cover +'500065' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Water Runoff (10-100) +'500066' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Water Runoff (10-190) +'500067' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfSecondFixedSurface = 190 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Water Runoff (s) +'500068' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 1 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'500069' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Thickness +'500070' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Significant height of combined wind waves and swell +'500071' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Direction of wind waves +'500072' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Significant height of wind waves +'500073' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'500074' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Direction of swell waves +'500075' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Significant height of swell waves +'500076' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Mean period of swell waves +'500077' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Net short wave radiation flux (m) (at the surface) +'500078' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'500079' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + } +#Net long wave radiation flux (m) (at the surface) +'500080' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'500081' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + } +#Net short wave radiation flux (m) (on the model top) +'500082' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'500083' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'500084' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'500085' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + } +#Latent Heat Net Flux (m) +'500086' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Sensible Heat Net Flux (m) +'500087' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Momentum Flux, U-Component (m) +'500088' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Momentum Flux, V-Component (m) +'500089' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation (m) (at the surface) +'500090' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation +'500091' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + } +#Solar radiation heating rate +'500092' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Thermal radiation heating rate +'500093' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Latent heat flux from bare soil +'500094' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Latent heat flux from plants +'500095' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + typeOfStatisticalProcessing = 0 ; + } +#Sunshine +'500096' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Stomatal Resistance +'500097' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Cloud cover +'500098' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Non-Convective Cloud Cover, grid scale +'500099' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 14 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Mixing Ratio +'500100' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Ice Mixing Ratio +'500101' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 82 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Rain mixing ratio +'500102' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 24 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Snow mixing ratio +'500103' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 25 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated rain +'500104' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + } +#Total column integrated snow +'500105' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + } +#Grauple +'500106' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated grauple +'500107' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 74 ; + } +#Total Column integrated water (all components incl. precipitation) +'500108' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + } +#vertical integral of divergence of total water content (s) +'500109' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#subgrid scale cloud water +'500110' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#subgridscale cloud ice +'500111' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#cloud base above msl, shallow convection +'500115' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 2 ; + } +#cloud top above msl, shallow convection +'500116' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 3 ; + } +#specific cloud water content, convective cloud +'500117' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Height of Convective Cloud Base (i) +'500118' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 2 ; + } +#Height of Convective Cloud Top (i) +'500119' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'500120' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'500121' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to convection +'500122' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific humitiy tendency due to convection +'500123' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#zonal wind tendency due to convection +'500124' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to convection +'500125' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#height of top of dry convection +'500126' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'500127' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 4 ; + } +#Height of snow fall limit +'500128' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 204 ; + } +#Tendency of specific cloud liquid water content due to conversion +'500129' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud ice content due to convection +'500130' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'500131' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Large scale rain rate +'500132' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale snowfall rate water equivalent +'500133' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate (s) +'500134' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective rain rate +'500135' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective snowfall rate water equivalent +'500136' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate (s) +'500137' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#rain amount, grid-scale plus convective +'500138' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#snow amount, grid-scale plus convective +'500139' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 66 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to grid scale precipation +'500140' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific humitiy tendency due to grid scale precipitation +'500141' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'500142' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'500143' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 203 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'500144' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Graupel (snow pellets) precipitation rate +'500145' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + } +#Graupel (snow pellets) precipitation rate +'500146' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow density +'500147' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure perturbation +'500148' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#supercell detection index 1 (rot. up+down drafts) +'500149' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'500150' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy, most unstable +'500151' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Inhibition, most unstable +'500152' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Available Potential Energy, mean layer +'500153' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective Inhibition, mean layer +'500154' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective turbulent kinetic enery +'500155' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 24 ; + } +#Tendency of turbulent kinetic energy +'500156' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Kinetic Energy +'500157' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent Kinetic Energy +'500158' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 11 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusioncoefficient for momentum +'500159' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 31 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'500160' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent transfer coefficient for impulse +'500161' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'500162' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + } +#mixed layer depth +'500163' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#maximum Wind 10m +'500164' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 2 ; + } +#Air concentration of Ruthenium 103 +'500165' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + } +#Soil Temperature (multilayers) +'500166' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Column-integrated Soil Moisture (multilayers) +'500167' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#soil ice content (multilayers) +'500168' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Plant Canopy Surface Water +'500169' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow temperature (top of snow) +'500170' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimal Stomatal Resistance +'500171' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Temperature +'500172' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'500173' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'500174' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Base reflectivity (cmax) +'500175' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 10 ; + } +#unknown +'500176' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Effective transmissivity of solar radiation +'500177' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#sum of contributions to evaporation +'500178' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#total transpiration from all soil layers +'500179' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#total forcing at soil surface +'500180' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#residuum of soil moisture +'500181' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Massflux at convective cloud base +'500182' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 205 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy +'500183' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#moisture convergence for Kuo-type closure +'500184' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 206 ; + typeOfFirstFixedSurface = 1 ; + } +#total wave direction +'500185' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#wind sea mean period +'500186' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 101 ; + } +#wind sea peak period +'500187' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#swell mean period +'500188' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 101 ; + } +#swell peak period +'500189' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#total wave peak period +'500190' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#total wave mean period +'500191' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#total Tm1 period +'500192' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#total Tm2 period +'500193' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#total directional spread +'500194' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#analysis error(standard deviation), geopotential(gpm) +'500195' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#analysis error(standard deviation), u-comp. of wind +'500196' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#analysis error(standard deviation), v-comp. of wind +'500197' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#zonal wind tendency due to subgrid scale oro. +'500198' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to subgrid scale oro. +'500199' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 195 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Standard deviation of sub-grid scale orography +'500200' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 1 ; + } +#Anisotropy of sub-gridscale orography +'500201' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + } +#Angle of sub-gridscale orography +'500202' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + } +#Slope of sub-gridscale orography +'500203' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 1 ; + } +#surface emissivity +'500204' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Type +'500205' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Leaf area index +'500206' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + } +#root depth of vegetation +'500207' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfFirstFixedSurface = 1 ; + } +#height of ozone maximum (climatological) +'500208' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#vertically integrated ozone content (climatological) +'500209' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the vegetation phase +'500210' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the quiescent phas +'500211' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Max Leaf area index +'500212' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Min Leaf area index +'500213' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Orographie + Land-Meer-Verteilung +'500214' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#variance of soil moisture content (0-10) +'500215' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaledValueOfSecondFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#variance of soil moisture content (10-100) +'500216' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 7 ; + scaledValueOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#evergreen forest +'500217' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#deciduous forest +'500218' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfFirstFixedSurface = 1 ; + } +#normalized differential vegetation index +'500219' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#normalized differential vegetation index (NDVI) +'500220' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'500221' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'500222' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Total sulfate aerosol +'500223' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + } +#Total sulfate aerosol (12M) +'500224' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + } +#Total soil dust aerosol +'500225' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + } +#Total soil dust aerosol (12M) +'500226' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Organic aerosol +'500227' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + } +#Organic aerosol (12M) +'500228' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Black carbon aerosol +'500229' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + } +#Black carbon aerosol (12M) +'500230' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Sea salt aerosol +'500231' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + } +#Sea salt aerosol (12M) +'500232' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 0 ; + } +#tendency of specific humidity +'500233' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 207 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#water vapor flux +'500234' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 208 ; + } +#Coriolis parameter +'500235' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical latitude +'500236' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical longitude +'500237' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Friction velocity +'500238' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Delay of the GPS signal trough the (total) atm. +'500239' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'500240' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'500241' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Ozone Mixing Ratio +'500242' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'500243' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 192 ; + } +#Ru103-dry deposition +'500244' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 193 ; + } +#Ru103-wet deposition +'500245' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 194 ; + } +#Air concentration of Strontium 90 +'500246' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 195 ; + } +#Sr90-dry deposition +'500247' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 196 ; + } +#Sr90-wet deposition +'500248' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 197 ; + } +#I131-concentration +'500249' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 198 ; + } +#I131-dry deposition +'500250' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 199 ; + } +#I131-wet deposition +'500251' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 200 ; + } +#Cs137-concentration +'500252' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 201 ; + } +#Cs137-dry deposition +'500253' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 202 ; + } +#Cs137-wet deposition +'500254' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 203 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'500255' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 204 ; + } +#Te132-dry deposition +'500256' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 205 ; + } +#Te132-wet deposition +'500257' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 206 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'500258' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 207 ; + } +#Zr95-dry deposition +'500259' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 208 ; + } +#Zr95-wet deposition +'500260' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 209 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'500261' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 210 ; + } +#Kr85-dry deposition +'500262' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 211 ; + } +#Kr85-wet deposition +'500263' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 212 ; + } +#TRACER - concentration +'500264' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 213 ; + } +#TRACER - dry deposition +'500265' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 214 ; + } +#TRACER - wet deposition +'500266' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 215 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'500267' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 216 ; + } +#Xe133 - dry deposition +'500268' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 217 ; + } +#Xe133 - wet deposition +'500269' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 218 ; + } +#I131g - concentration +'500270' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 219 ; + } +#Xe133 - wet deposition +'500271' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 220 ; + } +#I131g - wet deposition +'500272' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 221 ; + } +#I131o - concentration +'500273' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 222 ; + } +#I131o - dry deposition +'500274' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 223 ; + } +#I131o - wet deposition +'500275' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 224 ; + } +#Air concentration of Barium 40 +'500276' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 225 ; + } +#Ba140 - dry deposition +'500277' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 226 ; + } +#Ba140 - wet deposition +'500278' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 227 ; + } +#u-momentum flux due to SSO-effects +'500279' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#u-momentum flux due to SSO-effects +'500280' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'500281' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#v-momentum flux due to SSO-effects +'500282' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Gravity wave dissipation (vertical integral) +'500283' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Gravity wave dissipation (vertical integral) +'500284' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'500285' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 51 ; + } +#wind shear +'500286' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + } +#storm relative helicity +'500287' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 8 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#absolute vorticity advection +'500288' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'500291' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 1 ; + } +#weather interpretation (WMO) +'500292' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 1 ; + } +#Isentrope potentielle Vorticity +'500298' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 107 ; + } +#Druck einer isentropen Flaeche +'500301' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 107 ; + } +#KO index +'500302' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Aequivalentpotentielle Temperatur +'500303' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Ceiling +'500304' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'500305' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 7 ; + } +#modified cloud depth for media +'500306' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + } +#modified cloud cover for media +'500307' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'500308' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'500309' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'500310' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'500311' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'500312' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'500313' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'500314' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'500315' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'500316' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'500317' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'500318' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'500319' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'500320' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'500321' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'500322' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'500323' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Synth. Sat. brightness temperature cloudy +'500324' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'500325' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'500326' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'500327' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'500328' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'500329' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'500330' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'500331' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'500332' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'500333' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'500334' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'500335' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance clear sky +'500336' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'500337' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance clear sky +'500338' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'500339' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'500340' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 92592 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'500341' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. brightness temperature cloudy +'500342' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 74626 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'500343' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 256410 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'500344' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 114942 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature cloudy +'500345' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 103092 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'500346' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + } +#Synth. Sat. brightness temperature cloudy +'500347' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 136986 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'500348' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 114942 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'500349' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 92592 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'500350' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. brightness temperature clear sky +'500351' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Synth. Sat. brightness temperature clear sky +'500352' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature clear sky +'500353' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'500354' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + } +#Synth. Sat. brightness temperature clear sky +'500355' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#Synth. Sat. radiance cloudy +'500356' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. radiance cloudy +'500357' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. radiance cloudy +'500358' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Synth. Sat. radiance cloudy +'500359' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Synth. Sat. radiance cloudy +'500360' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + } +#Synth. Sat. radiance cloudy +'500361' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Synth. Sat. radiance cloudy +'500362' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance cloudy +'500363' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance clear sky +'500364' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'500365' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. radiance clear sky +'500366' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 74626 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'500367' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance clear sky +'500368' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 114942 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'500369' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 103092 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'500370' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 161290 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'500371' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 136986 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#smoothed forecast, temperature +'500372' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#smoothed forecast, maximum temp. +'500373' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 2 ; + } +#smoothed forecast, minimum temp. +'500374' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, dew point temp. +'500375' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, u comp. of wind +'500376' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, v comp. of wind +'500377' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, total precipitation rate +'500378' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, total cloud cover +'500379' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover low +'500380' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 800 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover medium +'500381' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 800 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover high +'500382' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 400 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'500383' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, soil temperature +'500384' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, wind speed (gust) +'500385' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + } +#calibrated forecast, total precipitation rate +'500386' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'500387' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + } +#calibrated forecast, wind speed (gust) +'500388' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 198 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'500389' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 2000000 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'500390' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 625000 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'500391' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 1666666 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'500392' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 1250000 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500393' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500394' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 83333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500395' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500396' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500397' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500398' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500399' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'500400' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; +} diff --git a/definitions/grib2/localConcepts/edzw/shortName.def b/definitions/grib2/localConcepts/edzw/shortName.def new file mode 100644 index 000000000..de9e29993 --- /dev/null +++ b/definitions/grib2/localConcepts/edzw/shortName.def @@ -0,0 +1,3050 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'ps' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure +'p' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Pressure Reduced to MSL +'pmsl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 101 ; + } +#Pressure Tendency (S) +'dpsdt' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (S) +'fis' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (full lev) +'fif' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Geopotential +'fi' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Geometric Height of the earths surface above sea level +'hsurf' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'hhl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total Column Integrated Ozone +'to3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature (G) +'t_g' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#2m Temperature (AV) +'t_2m_av' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 0 ; + } +#Climat. temperature, 2m Temperature +'t_2m_cl' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 0 ; + typeOfGeneratingProcess = 9 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Temperature +'t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Max 2m Temperature (i) +'tmax_2m' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Min 2m Temperature (i) +'tmin_2m' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#2m Dew Point Temperature (AV) +'td_2m_av' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 0 ; + } +#Radar spectra (1) +'dbz_max' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Wave spectra (1) +'wvsp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Wave spectra (2) +'wvsp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Wave spectra (3) +'wvsp3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Wind Direction (DD_10M) +'dd_10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Wind Direction (DD) +'dd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Wind speed (SP_10M) +'sp_10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Wind speed (SP) +'sp' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#U component of wind +'u_10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#U component of wind +'u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#V component of wind +'v_10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#V component of wind +'v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'omega' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Vertical Velocity (Geometric) (w) +'w' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 9 ; + } +#Specific Humidity (S) +'qv_s' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Specific Humidity (2m) +'qv_2m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Specific Humidity +'qv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Relative Humidity +'relhum_2m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Relative Humidity +'relhum' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Total column integrated water vapour +'tqv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + } +#Evaporation (s) +'aevap_s' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total Column-Integrated Cloud Ice +'tqi' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Precipitation rate (S) +'tot_prec' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Large-Scale Precipitation rate +'prec_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective Precipitation rate +'prec_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow depth water equivalent +'w_snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow Depth +'h_snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Cloud Cover +'clct' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Cloud Cover +'clc_con' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Cover (800 hPa - Soil) +'clcl' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 1 ; + scaledValueOfFirstFixedSurface = 800 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Cloud Cover (400 - 800 hPa) +'clcm' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 400 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 800 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Cloud Cover (0 - 400 hPa) +'clch' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 400 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Total Column-Integrated Cloud Water +'tqc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'snow_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Large-Scale snowfall rate water equivalent (s) +'snow_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Land Cover (1=land, 0=sea) +'fr_land' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface Roughness length Surface Roughness +'z0' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'alb_rad' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'albedo_b' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'t_cl' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 36 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature (41 cm depth) +'t_cl_lm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 41 ; + } +#Soil Temperature +'t_m' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 9 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature +'t_s' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Column-integrated Soil Moisture +'w_cl' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 190 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'w_g1' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'w_g2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Plant cover +'plcov' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Water Runoff (10-100) +'runoff_g' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Water Runoff (10-190) +'runoff_g_lm' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfSecondFixedSurface = 190 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Water Runoff (s) +'runoff_s' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfSecondFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'fr_ice' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Thickness +'h_ice' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Significant height of combined wind waves and swell +'swh' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Direction of wind waves +'mdww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Significant height of wind waves +'shww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'mpww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Direction of swell waves +'mdps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Significant height of swell waves +'shps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Mean period of swell waves +'mpps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Net short wave radiation flux (m) (at the surface) +'asob_s' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'sobs_rad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + } +#Net long wave radiation flux (m) (at the surface) +'athb_s' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'thbs_rad' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + } +#Net short wave radiation flux (m) (on the model top) +'asob_t' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'sobt_rad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'athb_t' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'thbt_rad' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + } +#Latent Heat Net Flux (m) +'alhfl_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Sensible Heat Net Flux (m) +'ashfl_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Momentum Flux, U-Component (m) +'aumfl_s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Momentum Flux, V-Component (m) +'avmfl_s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Photosynthetically active radiation (m) (at the surface) +'apab_s' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation +'pabs_rad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + } +#Solar radiation heating rate +'sohr_rad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Thermal radiation heating rate +'thhr_rad' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Latent heat flux from bare soil +'alhfl_bs' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Latent heat flux from plants +'alhfl_pl' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Sunshine +'dursun' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Stomatal Resistance +'rstom' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Cloud cover +'clc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Non-Convective Cloud Cover, grid scale +'clc_sgs' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Cloud Mixing Ratio +'qc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Ice Mixing Ratio +'qi' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 82 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Rain mixing ratio +'qr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 24 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Snow mixing ratio +'qs' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Total column integrated rain +'tqr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + } +#Total column integrated snow +'tqs' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + } +#Grauple +'qg' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated grauple +'tqg' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 74 ; + } +#Total Column integrated water (all components incl. precipitation) +'twater' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + } +#vertical integral of divergence of total water content (s) +'tdiv_hum' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#subgrid scale cloud water +'qc_rad' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#subgridscale cloud ice +'qi_rad' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#cloud base above msl, shallow convection +'hbas_sc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 2 ; + } +#cloud top above msl, shallow convection +'htop_sc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 3 ; + } +#specific cloud water content, convective cloud +'clw_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Height of Convective Cloud Base (i) +'hbas_con' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 2 ; + } +#Height of Convective Cloud Top (i) +'htop_con' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'bas_con' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'top_con' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to convection +'dt_con' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific humitiy tendency due to convection +'dqv_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#zonal wind tendency due to convection +'du_con' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to convection +'dv_con' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#height of top of dry convection +'htop_dc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'hzerocl' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 4 ; + } +#Height of snow fall limit +'snowlmt' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 204 ; + } +#Tendency of specific cloud liquid water content due to conversion +'dqc_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud ice content due to convection +'dqi_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'q_sedim' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Large scale rain rate +'prr_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale snowfall rate water equivalent +'prs_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate (s) +'rain_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective rain rate +'prr_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective snowfall rate water equivalent +'prs_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate (s) +'rain_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#rain amount, grid-scale plus convective +'rr_f' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#snow amount, grid-scale plus convective +'rr_c' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 66 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to grid scale precipation +'dt_gsp' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Specific humitiy tendency due to grid scale precipitation +'dqv_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'dqc_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'freshsnw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 203 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'dqi_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Graupel (snow pellets) precipitation rate +'prg_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + } +#Graupel (snow pellets) precipitation rate +'grau_gsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow density +'rho_snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure perturbation +'pp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#supercell detection index 1 (rot. up+down drafts) +'sdi_1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'sdi_2' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy, most unstable +'cape_mu' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Inhibition, most unstable +'cin_mu' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Available Potential Energy, mean layer +'cape_ml' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective Inhibition, mean layer +'cin_ml' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective turbulent kinetic enery +'tke_con' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 24 ; + } +#Tendency of turbulent kinetic energy +'tketens' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Kinetic Energy +'ke' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent Kinetic Energy +'tke' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 11 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusioncoefficient for momentum +'tkvm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 31 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'tkvh' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent transfer coefficient for impulse +'tcm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'tch' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + } +#mixed layer depth +'mh' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#maximum Wind 10m +'vmax_10m' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 2 ; + } +#Air concentration of Ruthenium 103 +'ru-103' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + } +#Soil Temperature (multilayers) +'t_so' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Column-integrated Soil Moisture (multilayers) +'w_so' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#soil ice content (multilayers) +'w_so_ice' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Plant Canopy Surface Water +'w_i' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow temperature (top of snow) +'t_snow' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimal Stomatal Resistance +'prs_min' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Temperature +'t_ice' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'dbz_850' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'dbz' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Base reflectivity (cmax) +'dbz_cmax' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 10 ; + } +#unknown +'dttdiv' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Effective transmissivity of solar radiation +'sotr_rad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#sum of contributions to evaporation +'evatra_sum' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#total transpiration from all soil layers +'tra_sum' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#total forcing at soil surface +'totforce_s' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#residuum of soil moisture +'resid_wso' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Massflux at convective cloud base +'mflx_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 205 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy +'cape_con' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#moisture convergence for Kuo-type closure +'qcvg_con' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 206 ; + typeOfFirstFixedSurface = 1 ; + } +#total wave direction +'mwd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#wind sea mean period +'mwp_x' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 101 ; + } +#wind sea peak period +'ppww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#swell mean period +'mpp_s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 101 ; + } +#swell peak period +'ppps' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#total wave peak period +'pp1d' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#total wave mean period +'tm10' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#total Tm1 period +'tm01' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#total Tm2 period +'tm02' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#total directional spread +'sprd' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#analysis error(standard deviation), geopotential(gpm) +'ana_err_fi' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#analysis error(standard deviation), u-comp. of wind +'ana_err_u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#analysis error(standard deviation), v-comp. of wind +'ana_err_v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#zonal wind tendency due to subgrid scale oro. +'du_sso' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to subgrid scale oro. +'dv_sso' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 195 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Standard deviation of sub-grid scale orography +'sso_stdh' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 1 ; + } +#Anisotropy of sub-gridscale orography +'sso_gamma' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + } +#Angle of sub-gridscale orography +'sso_theta' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + } +#Slope of sub-gridscale orography +'sso_sigma' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 1 ; + } +#surface emissivity +'emis_rad' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Type +'soiltyp' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Leaf area index +'lai' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + } +#root depth of vegetation +'rootdp' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfFirstFixedSurface = 1 ; + } +#height of ozone maximum (climatological) +'hmo3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#vertically integrated ozone content (climatological) +'vio3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the vegetation phase +'plcov_mx' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Plant covering degree in the quiescent phas +'plcov_mn' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Max Leaf area index +'lai_mx' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Min Leaf area index +'lai_mn' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Orographie + Land-Meer-Verteilung +'oro_mod' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#variance of soil moisture content (0-10) +'wvar1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaledValueOfSecondFixedSurface = 10 ; + } +#variance of soil moisture content (10-100) +'wvar2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaledValueOfSecondFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#evergreen forest +'for_e' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#deciduous forest +'for_d' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfFirstFixedSurface = 1 ; + } +#normalized differential vegetation index +'ndvi' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#normalized differential vegetation index (NDVI) +'ndvi_max' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ndvi_mrat' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'ndviratio' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Total sulfate aerosol +'aer_so4' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + } +#Total sulfate aerosol (12M) +'aer_so412' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + } +#Total soil dust aerosol +'aer_dust' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + } +#Total soil dust aerosol (12M) +'aer_dust12' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Organic aerosol +'aer_org' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + } +#Organic aerosol (12M) +'aer_org12' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Black carbon aerosol +'aer_bc' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + } +#Black carbon aerosol (12M) +'aer_bc12' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Sea salt aerosol +'aer_ss' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + } +#Sea salt aerosol (12M) +'aer_ss12' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 0 ; + } +#tendency of specific humidity +'dqvdt' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 207 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#water vapor flux +'qvsflx' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 208 ; + } +#Coriolis parameter +'fc' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical latitude +'rlat' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical longitude +'rlon' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Friction velocity +'ustr' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Delay of the GPS signal trough the (total) atm. +'ztd' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'zwd' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'zhd' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Ozone Mixing Ratio +'o3' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'ru-103' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 192 ; + } +#Ru103-dry deposition +'ru-103d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 193 ; + } +#Ru103-wet deposition +'ru-103w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 194 ; + } +#Air concentration of Strontium 90 +'sr-90' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 195 ; + } +#Sr90-dry deposition +'sr-90d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 196 ; + } +#Sr90-wet deposition +'sr-90w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 197 ; + } +#I131-concentration +'i-131a' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 198 ; + } +#I131-dry deposition +'i-131ad' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 199 ; + } +#I131-wet deposition +'i-131aw' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 200 ; + } +#Cs137-concentration +'cs-137' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 201 ; + } +#Cs137-dry deposition +'cs-137d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 202 ; + } +#Cs137-wet deposition +'cs-137w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 203 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'te-132' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 204 ; + } +#Te132-dry deposition +'te-132d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 205 ; + } +#Te132-wet deposition +'te-132w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 206 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'zr-95' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 207 ; + } +#Zr95-dry deposition +'zr-95d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 208 ; + } +#Zr95-wet deposition +'zr-95w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 209 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'kr-85' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 210 ; + } +#Kr85-dry deposition +'kr-85d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 211 ; + } +#Kr85-wet deposition +'kr-85w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 212 ; + } +#TRACER - concentration +'tr-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 213 ; + } +#TRACER - dry deposition +'tr-2d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 214 ; + } +#TRACER - wet deposition +'tr-2w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 215 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'xe-133' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 216 ; + } +#Xe133 - dry deposition +'xe-133d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 217 ; + } +#Xe133 - wet deposition +'xe-133w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 218 ; + } +#I131g - concentration +'i-131g' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 219 ; + } +#Xe133 - wet deposition +'i-131gd' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 220 ; + } +#I131g - wet deposition +'i-131gw' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 221 ; + } +#I131o - concentration +'i-131o' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 222 ; + } +#I131o - dry deposition +'i-131od' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 223 ; + } +#I131o - wet deposition +'i-131ow' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 224 ; + } +#Air concentration of Barium 40 +'ba-140' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 225 ; + } +#Ba140 - dry deposition +'ba-140d' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 226 ; + } +#Ba140 - wet deposition +'ba-140w' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 227 ; + } +#u-momentum flux due to SSO-effects +'austr_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#u-momentum flux due to SSO-effects +'ustr_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'avstr_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'vstr_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Gravity wave dissipation (vertical integral) +'avdis_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Gravity wave dissipation (vertical integral) +'vdis_sso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'uv_max' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 51 ; + } +#wind shear +'w_shaer' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + } +#storm relative helicity +'srh' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#absolute vorticity advection +'vabs' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'ccl_nn' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 1 ; + } +#weather interpretation (WMO) +'ww' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 1 ; + } +#Isentrope potentielle Vorticity +'ipv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 107 ; + } +#Druck einer isentropen Flaeche +'ptheta' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 107 ; + } +#KO index +'ko' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Aequivalentpotentielle Temperatur +'thetae' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Ceiling +'ceiling' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'ice_grd' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 7 ; + } +#modified cloud depth for media +'cldepth' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + } +#modified cloud cover for media +'clct_mod' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'efa-ps' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'eia-ps' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'efa-u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'eia-u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'efa-v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'eia-v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'efa-fi' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'eia-fi' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'efa-rh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'eia-rh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'efa-t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'eia-t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'efa-om' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'eia-om' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'efa-ke' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'eia-ke' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Synth. Sat. brightness temperature cloudy +'synme5_bt_cl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'synme5_bt_cs' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'synme5_rad_cl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'synme5_rad_cs' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + } +#Synth. Sat. brightness temperature cloudy +'synme6_bt_cl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'synme6_bt_cs' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'synme6_rad_cl' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'synme6_rad_cs' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature clear sky +'synme7_bt_cl_ir11.5' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'synme7_bt_cl_wv6.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'synme7_bt_cs_ir11.5' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'synme7_bt_cs_wv6.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance clear sky +'synme7_rad_cl_ir11.5' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'synme7_rad_cl_wv6.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance clear sky +'synme7_rad_cs_ir11.5' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. radiance cloudy +'synme7_rad_cs_wv6.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir10.8' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 92592 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir12.1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir13.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 74626 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir3.9' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 256410 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir8.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 114942 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_ir9.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 103092 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_wv6.2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature cloudy +'synmsg_bt_cl_wv7.3' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir8.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 114942 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir10.8' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir12.1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir13.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir3.9' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_ir9.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_wv6.2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + } +#Synth. Sat. brightness temperature clear sky +'synmsg_bt_cs_wv7.3' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir10.8' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir12.1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir13.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir3.9' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir8.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_ir9.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_wv6.2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + } +#Synth. Sat. radiance cloudy +'synmsg_rad_cl_wv7.3' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir10.8' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir12.1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir13.4' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 74626 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir3.9' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 256410 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir8.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 114942 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_ir9.7' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 103092 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_wv6.2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance clear sky +'synmsg_rad_cs_wv7.3' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#smoothed forecast, temperature +'t_2m_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, maximum temp. +'tmax_2m_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, minimum temp. +'tmin_2m_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, dew point temp. +'td_2m_s' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#smoothed forecast, u comp. of wind +'u_10m_s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, v comp. of wind +'v_10m_s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, total precipitation rate +'tot_prec_s' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, total cloud cover +'clct_s' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover low +'clcl_s' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 800 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover medium +'clcm_s' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 800 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, cloud cover high +'clch_s' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 100 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfSecondFixedSurface = 400 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'snow_gsp_s' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, soil temperature +'t_s_s' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + } +#smoothed forecast, wind speed (gust) +'vmax_10m_s' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 197 ; + } +#calibrated forecast, total precipitation rate +'tot_prec_c' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'snow_gsp_c' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + } +#calibrated forecast, wind speed (gust) +'vmax_10m_c' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 2 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'obsmsg_alb_hrv' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 2000000 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'obsmsg_alb_nir1.6' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + scaledValueOfCentralWaveNumber = 625000 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'obsmsg_alb_vis0.6' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 1666666 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'obsmsg_alb_vis0.8' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 1250000 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir10.8' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir12.0' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 83333 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir13.4' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 74626 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir3.9' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 256410 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir8.7' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 114942 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_ir9.7' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 103092 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_wv6.2' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 161290 ; + typeOfGeneratingProcess = 8 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'obsmsg_bt_wv7.3' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteSeries = 333 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + scaledValueOfCentralWaveNumber = 136986 ; + typeOfGeneratingProcess = 8 ; +} diff --git a/definitions/grib2/localConcepts/edzw/units.def b/definitions/grib2/localConcepts/edzw/units.def new file mode 100644 index 000000000..f72023705 --- /dev/null +++ b/definitions/grib2/localConcepts/edzw/units.def @@ -0,0 +1,3050 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Pressure (S) (not reduced) +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Pressure Reduced to MSL +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 101 ; + } +#Pressure Tendency (S) +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (S) +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Geopotential (full lev) +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Geometric Height of the earths surface above sea level +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#Geometric Height of the layer limits above sea level(NN) +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Total Column Integrated Ozone +'Dobson' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature (G) +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#2m Temperature (AV) +'~' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Climat. temperature, 2m Temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfGeneratingProcess = 9 ; + } +#Temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Max 2m Temperature (i) +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Min 2m Temperature (i) +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Dew Point Temperature (AV) +'~' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfStatisticalProcessing = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Radar spectra (1) +'~' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Wave spectra (1) +'~' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Wave spectra (2) +'~' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Wave spectra (3) +'~' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Wind Direction (DD_10M) +'degrees' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Wind Direction (DD) +'degrees' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Wind speed (SP_10M) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Wind speed (SP) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#U component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#U component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#V component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#V component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#Vertical Velocity (Pressure) ( omega=dp/dt ) +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Vertical Velocity (Geometric) (w) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 9 ; + } +#Specific Humidity (S) +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Specific Humidity (2m) +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + } +#Specific Humidity +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#2m Relative Humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Relative Humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Total column integrated water vapour +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + typeOfFirstFixedSurface = 1 ; + } +#Evaporation (s) +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 79 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total Column-Integrated Cloud Ice +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 70 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Precipitation rate (S) +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Large-Scale Precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective Precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow depth water equivalent +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow Depth +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + typeOfFirstFixedSurface = 1 ; + } +#Total Cloud Cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Cloud Cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Cover (800 hPa - Soil) +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 800 ; + } +#Cloud Cover (400 - 800 hPa) +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 400 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 800 ; + } +#Cloud Cover (0 - 400 hPa) +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 100 ; + scaledValueOfSecondFixedSurface = 400 ; + typeOfFirstFixedSurface = 100 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Total Column-Integrated Cloud Water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 69 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Snowfall rate water equivalent (s) +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Large-Scale snowfall rate water equivalent (s) +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Land Cover (1=land, 0=sea) +'(0 - 1)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface Roughness length Surface Roughness +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Albedo (in short-wave) +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Temperature ( 36 cm depth, vv=0h) +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 36 ; + } +#Soil Temperature (41 cm depth) +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 41 ; + } +#Soil Temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaledValueOfFirstFixedSurface = 9 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Soil Temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 190 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 100 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#Column-integrated Soil Moisture (1) 0 -10 cm +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 10 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + } +#Column-integrated Soil Moisture (2) 10-100cm +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 100 ; + } +#Plant cover +'%' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + } +#Water Runoff (10-100) +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 100 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Water Runoff (10-190) +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 190 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfSecondFixedSurface = -2 ; + } +#Water Runoff (s) +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + typeOfStatisticalProcessing = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 10 ; + } +#Sea Ice Cover ( 0= free, 1=cover) +'~' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Thickness +'m' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Significant height of combined wind waves and swell +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Direction of wind waves +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Significant height of wind waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Direction of swell waves +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Significant height of swell waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Mean period of swell waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Net short wave radiation flux (m) (at the surface) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Net short wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + } +#Net long wave radiation flux (m) (at the surface) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Net long wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + } +#Net short wave radiation flux (m) (on the model top) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net short wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 0 ; + } +#Net long wave radiation flux (m) (on the model top) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 0 ; + } +#Net long wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 0 ; + } +#Latent Heat Net Flux (m) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Sensible Heat Net Flux (m) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Momentum Flux, U-Component (m) +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Momentum Flux, V-Component (m) +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation (m) (at the surface) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Photosynthetically active radiation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + } +#Solar radiation heating rate +'K s**-1' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Thermal radiation heating rate +'K s**-1' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Latent heat flux from bare soil +'W m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Latent heat flux from plants +'W m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + typeOfStatisticalProcessing = 0 ; + } +#Sunshine +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + } +#Stomatal Resistance +'s m**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Non-Convective Cloud Cover, grid scale +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 14 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Cloud Mixing Ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Cloud Ice Mixing Ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 82 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Rain mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 24 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Snow mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 25 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated rain +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + } +#Total column integrated snow +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + } +#Grauple +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Total column integrated grauple +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 74 ; + } +#Total Column integrated water (all components incl. precipitation) +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 78 ; + typeOfFirstFixedSurface = 1 ; + } +#vertical integral of divergence of total water content (s) +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#subgrid scale cloud water +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#subgridscale cloud ice +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#cloud base above msl, shallow convection +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 2 ; + } +#cloud top above msl, shallow convection +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 3 ; + } +#specific cloud water content, convective cloud +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Height of Convective Cloud Base (i) +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 2 ; + } +#Height of Convective Cloud Top (i) +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 27 ; + typeOfFirstFixedSurface = 3 ; + } +#base index (vertical level) of main convective cloud (i) +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#top index (vertical level) of main convective cloud (i) +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to convection +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific humitiy tendency due to convection +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#zonal wind tendency due to convection +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#meridional wind tendency due to convection +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#height of top of dry convection +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#height of 0 degree celsius level code 0,3,6 ? +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 4 ; + } +#Height of snow fall limit +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 204 ; + } +#Tendency of specific cloud liquid water content due to conversion +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud ice content due to convection +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific content of precipitation particles (needed for water loadin)g +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Large scale rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + } +#Large scale rain rate (s) +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 77 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Convective rain rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective rain rate (s) +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 76 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#rain amount, grid-scale plus convective +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 65 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#snow amount, grid-scale plus convective +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 66 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Temperature tendency due to grid scale precipation +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Specific humitiy tendency due to grid scale precipitation +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#tendency of specific cloud liquid water content due to grid scale precipitation +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Fresh snow factor (weighting function for albedo indicating freshness of snow) +'~' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 203 ; + } +#tendency of specific cloud ice content due to grid scale precipitation +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Graupel (snow pellets) precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + } +#Graupel (snow pellets) precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 75 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Snow density +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 61 ; + typeOfFirstFixedSurface = 1 ; + } +#Pressure perturbation +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#supercell detection index 1 (rot. up+down drafts) +'s**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#supercell detection index 2 (only rot. up drafts) +'s**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy, most unstable +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Inhibition, most unstable +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 193 ; + } +#Convective Available Potential Energy, mean layer +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective Inhibition, mean layer +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfFirstFixedSurface = 192 ; + } +#Convective turbulent kinetic enery +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 24 ; + } +#Tendency of turbulent kinetic energy +'m s**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Kinetic Energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Turbulent Kinetic Energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 11 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusioncoefficient for momentum +'m**2 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 31 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Turbulent diffusion coefficient for heat (and moisture) +'m**2 s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Turbulent transfer coefficient for impulse +'~' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#Turbulent transfer coefficient for heat (and Moisture) +'~' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 19 ; + typeOfFirstFixedSurface = 1 ; + } +#mixed layer depth +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#maximum Wind 10m +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfStatisticalProcessing = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Air concentration of Ruthenium 103 +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + } +#Soil Temperature (multilayers) +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Column-integrated Soil Moisture (multilayers) +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#soil ice content (multilayers) +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfFirstFixedSurface = 106 ; + } +#Plant Canopy Surface Water +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow temperature (top of snow) +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 18 ; + typeOfFirstFixedSurface = 1 ; + } +#Minimal Stomatal Resistance +'s m**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + typeOfFirstFixedSurface = 1 ; + } +#sea Ice Temperature +'K' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'dB' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Base reflectivity +'dB' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Base reflectivity (cmax) +'dB' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 10 ; + } +#unknown +'m' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Effective transmissivity of solar radiation +'K s**-1' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 193 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#sum of contributions to evaporation +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#total transpiration from all soil layers +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#total forcing at soil surface +'W m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#residuum of soil moisture +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Massflux at convective cloud base +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 205 ; + typeOfFirstFixedSurface = 1 ; + } +#Convective Available Potential Energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + } +#moisture convergence for Kuo-type closure +'s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 206 ; + typeOfFirstFixedSurface = 1 ; + } +#total wave direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#wind sea mean period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 101 ; + } +#wind sea peak period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#swell mean period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 101 ; + } +#swell peak period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#total wave peak period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#total wave mean period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#total Tm1 period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#total Tm2 period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#total directional spread +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#analysis error(standard deviation), geopotential(gpm) +'gpm' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 6 ; + typeOfGeneratingProcess = 7 ; + } +#analysis error(standard deviation), u-comp. of wind +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#analysis error(standard deviation), v-comp. of wind +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 7 ; + typeOfStatisticalProcessing = 6 ; + } +#zonal wind tendency due to subgrid scale oro. +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#meridional wind tendency due to subgrid scale oro. +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 195 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Standard deviation of sub-grid scale orography +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + typeOfFirstFixedSurface = 1 ; + } +#Anisotropy of sub-gridscale orography +'~' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 24 ; + typeOfFirstFixedSurface = 1 ; + } +#Angle of sub-gridscale orography +'radians' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 21 ; + typeOfFirstFixedSurface = 1 ; + } +#Slope of sub-gridscale orography +'~' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 1 ; + } +#surface emissivity +'~' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Type +'~' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Leaf area index +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + } +#root depth of vegetation +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 32 ; + typeOfFirstFixedSurface = 1 ; + } +#height of ozone maximum (climatological) +'Pa' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#vertically integrated ozone content (climatological) +'Pa' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Plant covering degree in the vegetation phase +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 2 ; + } +#Plant covering degree in the quiescent phas +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Max Leaf area index +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfStatisticalProcessing = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Min Leaf area index +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 28 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 3 ; + } +#Orographie + Land-Meer-Verteilung +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#variance of soil moisture content (0-10) +'kg**2 m**-4' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 10 ; + typeOfFirstFixedSurface = 106 ; + } +#variance of soil moisture content (10-100) +'kg**2 m**-4' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + scaleFactorOfSecondFixedSurface = -2 ; + typeOfStatisticalProcessing = 7 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 100 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#evergreen forest +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 29 ; + typeOfFirstFixedSurface = 1 ; + } +#deciduous forest +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 30 ; + typeOfFirstFixedSurface = 1 ; + } +#normalized differential vegetation index +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + } +#normalized differential vegetation index (NDVI) +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 31 ; + typeOfStatisticalProcessing = 2 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#ratio of monthly mean NDVI (normalized differential vegetation index) to annual maximum +'~' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Total sulfate aerosol +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + } +#Total sulfate aerosol (12M) +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + typeOfStatisticalProcessing = 0 ; + } +#Total soil dust aerosol +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + } +#Total soil dust aerosol (12M) +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + typeOfStatisticalProcessing = 0 ; + } +#Organic aerosol +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + } +#Organic aerosol (12M) +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + typeOfStatisticalProcessing = 0 ; + } +#Black carbon aerosol +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + } +#Black carbon aerosol (12M) +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + typeOfStatisticalProcessing = 0 ; + } +#Sea salt aerosol +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + } +#Sea salt aerosol (12M) +'~' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 0 ; + } +#tendency of specific humidity +'s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 207 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#water vapor flux +'s**-1 m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 208 ; + } +#Coriolis parameter +'s**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical latitude +'Degree N' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#geographical longitude +'Degree E' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 2 ; + typeOfFirstFixedSurface = 1 ; + } +#Friction velocity +'m s**-1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Delay of the GPS signal trough the (total) atm. +'m' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 192 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough wet atmos. +'m' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#Delay of the GPS signal trough dry atmos. +'m' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Ozone Mixing Ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 1 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 105 ; + } +#Air concentration of Ruthenium 103 (Ru103- concentration) +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 192 ; + } +#Ru103-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 193 ; + } +#Ru103-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 194 ; + } +#Air concentration of Strontium 90 +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 195 ; + } +#Sr90-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 196 ; + } +#Sr90-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 197 ; + } +#I131-concentration +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 198 ; + } +#I131-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 199 ; + } +#I131-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 200 ; + } +#Cs137-concentration +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 201 ; + } +#Cs137-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 202 ; + } +#Cs137-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 203 ; + } +#Air concentration of Tellurium 132 (Te132-concentration) +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 204 ; + } +#Te132-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 205 ; + } +#Te132-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 206 ; + } +#Air concentration of Zirconium 95 (Zr95-concentration) +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 207 ; + } +#Zr95-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 208 ; + } +#Zr95-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 209 ; + } +#Air concentration of Krypton 85 (Kr85-concentration) +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 210 ; + } +#Kr85-dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 211 ; + } +#Kr85-wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 212 ; + } +#TRACER - concentration +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 213 ; + } +#TRACER - dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 214 ; + } +#TRACER - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 215 ; + } +#Air concentration of Xenon 133 (Xe133 - concentration) +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 216 ; + } +#Xe133 - dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 217 ; + } +#Xe133 - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 218 ; + } +#I131g - concentration +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 219 ; + } +#Xe133 - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 220 ; + } +#I131g - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 221 ; + } +#I131o - concentration +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 222 ; + } +#I131o - dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 223 ; + } +#I131o - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 224 ; + } +#Air concentration of Barium 40 +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 225 ; + } +#Ba140 - dry deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 226 ; + } +#Ba140 - wet deposition +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 227 ; + } +#u-momentum flux due to SSO-effects +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#u-momentum flux due to SSO-effects +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + typeOfFirstFixedSurface = 1 ; + } +#v-momentum flux due to SSO-effects +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#v-momentum flux due to SSO-effects +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + typeOfFirstFixedSurface = 1 ; + } +#Gravity wave dissipation (vertical integral) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 0 ; + } +#Gravity wave dissipation (vertical integral) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 23 ; + typeOfFirstFixedSurface = 1 ; + } +#UV_Index_Maximum_W UV_Index clouded (W), daily maximum +'~' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 51 ; + } +#wind shear +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + typeOfFirstFixedSurface = 105 ; + } +#storm relative helicity +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 8 ; + typeOfFirstFixedSurface = 105 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#absolute vorticity advection +'s**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + } +#Konv.-U-Grenze-nn Hoehe der Konvektionsuntergrenze ueber nn +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 26 ; + typeOfFirstFixedSurface = 1 ; + } +#weather interpretation (WMO) +'~' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 25 ; + typeOfFirstFixedSurface = 1 ; + } +#Isentrope potentielle Vorticity +'K m**2 kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + typeOfFirstFixedSurface = 107 ; + } +#Druck einer isentropen Flaeche +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 107 ; + scaleFactorOfFirstFixedSurface = -2 ; + } +#KO index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 3 ; + typeOfFirstFixedSurface = 1 ; + } +#Aequivalentpotentielle Temperatur +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Ceiling +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + typeOfFirstFixedSurface = 1 ; + } +#Icing Grade (1=LGT,2=MOD,3=SEV) +'~' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 7 ; + } +#modified cloud depth for media +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 198 ; + typeOfFirstFixedSurface = 1 ; + } +#modified cloud cover for media +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 199 ; + typeOfFirstFixedSurface = 1 ; + } +#Monthly Mean of RMS of difference FG-AN of pressure reduced to MSL +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of pressure reduced to MSL +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of u-component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of u-component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of v-component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of v-component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference FG-AN of vert.velocity (pressure) +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfGeneratingProcess = 199 ; + typeOfStatisticalProcessing = 5 ; + } +#Monthly Mean of RMS of difference IA-AN of vert.velocity (pressure) +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 200 ; + } +#Monthly Mean of RMS of difference FG-AN of kinetic energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfStatisticalProcessing = 5 ; + typeOfGeneratingProcess = 199 ; + } +#Monthly Mean of RMS of difference IA-AN of kinetic energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + typeOfGeneratingProcess = 200 ; + typeOfStatisticalProcessing = 5 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 52 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 52 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 53 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 53 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + satelliteNumber = 54 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 54 ; + satelliteSeries = 331 ; + instrumentType = 205 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 256410 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature cloudy +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 92592 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 82644 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. brightness temperature clear sky +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance cloudy +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 82644 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 74626 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 114942 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + scaledValueOfCentralWaveNumber = 103092 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + } +#Synth. Sat. radiance clear sky +'W m sr m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + satelliteSeries = 333 ; + instrumentType = 207 ; + satelliteNumber = 72 ; + scaledValueOfCentralWaveNumber = 136986 ; + } +#smoothed forecast, temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, maximum temp. +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, minimum temp. +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 3 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, dew point temp. +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 2 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, u comp. of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + } +#smoothed forecast, v comp. of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#smoothed forecast, total precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 1 ; + } +#smoothed forecast, total cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 1 ; + } +#smoothed forecast, cloud cover low +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + typeOfSecondFixedSurface = 1 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaledValueOfFirstFixedSurface = 800 ; + typeOfFirstFixedSurface = 100 ; + } +#smoothed forecast, cloud cover medium +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaledValueOfSecondFixedSurface = 800 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 400 ; + typeOfFirstFixedSurface = 100 ; + } +#smoothed forecast, cloud cover high +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 22 ; + scaledValueOfSecondFixedSurface = 400 ; + typeOfSecondFixedSurface = 100 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfSecondFixedSurface = -2 ; + scaledValueOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 100 ; + } +#smoothed forecast, large-scale snowfall rate w.e. +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfGeneratingProcess = 197 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#smoothed forecast, soil temperature +'K' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + scaleFactorOfFirstFixedSurface = -2 ; + typeOfGeneratingProcess = 197 ; + typeOfFirstFixedSurface = 106 ; + } +#smoothed forecast, wind speed (gust) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfGeneratingProcess = 197 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + } +#calibrated forecast, total precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 1 ; + } +#calibrated forecast, large-scale snowfall rate w.e. +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + typeOfFirstFixedSurface = 1 ; + typeOfGeneratingProcess = 198 ; + typeOfStatisticalProcessing = 1 ; + } +#calibrated forecast, wind speed (gust) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + typeOfGeneratingProcess = 198 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + scaledValueOfCentralWaveNumber = 2000000 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 625000 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 1666666 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation Albedo (scaled) +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 1250000 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 92592 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 83333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 74626 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 256410 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + scaledValueOfCentralWaveNumber = 114942 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 103092 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + instrumentType = 207 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 161290 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + } +#Obser. Sat. Meteosat sec. generation brightness temperature +'Numeric' = { + discipline = 3 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + satelliteSeries = 333 ; + scaledValueOfCentralWaveNumber = 136986 ; + satelliteNumber = 72 ; + typeOfGeneratingProcess = 8 ; + instrumentType = 207 ; +} diff --git a/definitions/grib2/localConcepts/kwbc/name.def b/definitions/grib2/localConcepts/kwbc/name.def new file mode 100644 index 000000000..6e2c3ee2d --- /dev/null +++ b/definitions/grib2/localConcepts/kwbc/name.def @@ -0,0 +1,1633 @@ +# Automatically generated by ./create_def.pl from database param@wrep-db-misc-prod, do not edit +#Convective available potential energy +'Convective available potential energy' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + } +#Snow phase change heat flux +'Snow phase change heat flux' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#Condensate +'Condensate' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 195 ; + } +#Horizontal moisture convergence +'Horizontal moisture convergence' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 197 ; + } +#Categorical rain +'Categorical rain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + } +#Categorical freezing rain +'Categorical freezing rain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + } +#Categorical ice pellets +'Categorical ice pellets' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + } +#Categorical snow +'Categorical snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + } +#Convective precipitation rate +'Convective precipitation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 196 ; + } +#Percent frozen precipitation +'Percent frozen precipitation' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + } +#Potential evaporation +'Potential evaporation' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 199 ; + } +#Potential evaporation rate +'Potential evaporation rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 200 ; + } +#Snow cover +'Snow cover' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 201 ; + } +#Rain fraction of total cloud water +'Rain fraction of total cloud water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 202 ; + } +#Rime factor +'Rime factor' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 203 ; + } +#Total column integrated rain +'Total column integrated rain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 204 ; + } +#Total column integrated snow +'Total column integrated snow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 205 ; + } +#Water equivalent of accumulated snow depth +'Water equivalent of accumulated snow depth' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + } +#Vertical speed shear +'Vertical speed shear' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 192 ; + } +#Horizontal momentum flux +'Horizontal momentum flux' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 193 ; + } +#U-component storm motion +'U-component storm motion' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 194 ; + } +#V-component storm motion +'V-component storm motion' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 195 ; + } +#Drag coefficient +'Drag coefficient' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 196 ; + } +#Frictional velocity +'Frictional velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 197 ; + } +#5-wave geopotential height +'5-wave geopotential height' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#Zonal flux of gravity wave stress +'Zonal flux of gravity wave stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#Meridional flux of gravity wave stress +'Meridional flux of gravity wave stress' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Planetary boundary layer height +'Planetary boundary layer height' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + } +#5-wave geopotential height anomaly +'5-wave geopotential height anomaly' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 197 ; + } +#Downward short-wave radiation flux +'Downward short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 192 ; + } +#Upward short-wave radiation flux +'Upward short-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 193 ; + } +#UV index +'UV index ' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 196 ; + } +#Downward long-wave radiation flux +'Downward long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 192 ; + } +#Upward long-wave radiation flux +'Upward long-wave radiation flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 193 ; + } +#Non-convective cloud cover +'Non-convective cloud cover' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 192 ; + } +#Cloud work function +'Cloud work function' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 193 ; + } +#Convective cloud efficiency +'Convective cloud efficiency' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 194 ; + } +#Total column-integrated cloud water +'Total column-integrated cloud water' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 196 ; + } +#Total column-integrated cloud ice +'Total column-integrated cloud ice' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 197 ; + } +#Total column-integrated condensate +'Total column-integrated condensate' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 198 ; + } +#Ice fraction of total condensate +'Ice fraction of total condensate' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 199 ; + } +#Surface lifted index +'Surface lifted index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 192 ; + } +#Best (4-layer) lifted index +'Best (4-layer) lifted index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 193 ; + } +#Ozone mixing ratio +'Ozone mixing ratio' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 192 ; + } +#Maximum snow albedo +'Maximum snow albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 192 ; + } +#Snow free albedo +'Snow free albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 193 ; + } +#Seconds prior to initial reference time (defined in Section 1) +'Seconds prior to initial reference time (defined in Section 1)' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 194 ; + } +#Baseflow-groundwater runoff +'Baseflow-groundwater runoff' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#Storm surface runoff +'Storm surface runoff' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#Volumetric soil moisture content +'Volumetric soil moisture content' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#Ground heat flux +'Ground heat flux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#Moisture availability +'Moisture availability' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#Exchange coefficient +'Exchange coefficient' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#Plant canopy surface water +'Plant canopy surface water' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#Blackadar mixing length scale +'Blackadar mixing length scale' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#Canopy conductance +'Canopy conductance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#Minimal stomatal resistance +'Minimal stomatal resistance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + } +#Solar parameter in canopy conductance +'Solar parameter in canopy conductance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + } +#Temperature parameter in canopy conductance +'Temperature parameter in canopy conductance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 203 ; + } +#Soil moisture parameter in canopy conductance +'Soil moisture parameter in canopy conductance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 205 ; + } +#Humidity parameter in canopy conductance +'Humidity parameter in canopy conductance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + } +#Liquid volumetric soil moisture (non-frozen) +'Liquid volumetric soil moisture (non-frozen)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#Number of soil layers in root zone +'Number of soil layers in root zone' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#Transpiration stress-onset (soil moisture) +'Transpiration stress-onset (soil moisture)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Direct evaporation cease (soil moisture) +'Direct evaporation cease (soil moisture)' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 196 ; + } +#Soil porosity +'Soil porosity' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 197 ; + } +#Temperature tendency by all radiation +'Temperature tendency by all radiation' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 193 ; + } +#Relative Error Variance +'Relative Error Variance' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 194 ; + } +#Large Scale Condensate Heating rate +'Large Scale Condensate Heating rate' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 195 ; + } +#Deep Convective Heating rate +'Deep Convective Heating rate' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 196 ; + } +#Total Downward Heat Flux at Surface +'Total Downward Heat Flux at Surface' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 197 ; + } +#Temperature Tendency By All Physics +'Temperature Tendency By All Physics' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#Temperature Tendency By Non-radiation Physics +'Temperature Tendency By Non-radiation Physics' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 199 ; + } +#Standard Dev. of IR Temp. over 1x1 deg. area +'Standard Dev. of IR Temp. over 1x1 deg. area' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 200 ; + } +#Shallow Convective Heating rate +'Shallow Convective Heating rate' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + } +#Vertical Diffusion Heating rate +'Vertical Diffusion Heating rate' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 202 ; + } +#Potential temperature at top of viscous sublayer +'Potential temperature at top of viscous sublayer' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 203 ; + } +#Tropical Cyclone Heat Potential +'Tropical Cyclone Heat Potential' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 204 ; + } +#Minimum Relative Humidity +'Minimum Relative Humidity' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 198 ; + } +#Total Icing Potential Diagnostic +'Total Icing Potential Diagnostic' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 206 ; + } +#Number concentration for ice particles +'Number concentration for ice particles' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 207 ; + } +#Snow temperature +'Snow temperature' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 208 ; + } +#Total column-integrated supercooled liquid water +'Total column-integrated supercooled liquid water' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 209 ; + } +#Total column-integrated melting ice +'Total column-integrated melting ice' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 210 ; + } +#Evaporation - Precipitation +'Evaporation - Precipitation' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 211 ; + } +#Sublimation (evaporation from snow) +'Sublimation (evaporation from snow)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 212 ; + } +#Deep Convective Moistening Rate +'Deep Convective Moistening Rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 213 ; + } +#Shallow Convective Moistening Rate +'Shallow Convective Moistening Rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 214 ; + } +#Vertical Diffusion Moistening Rate +'Vertical Diffusion Moistening Rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 215 ; + } +#Condensation Pressure of Parcali Lifted From Indicate Surface +'Condensation Pressure of Parcali Lifted From Indicate Surface' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 216 ; + } +#Large scale moistening rate +'Large scale moistening rate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 217 ; + } +#Specific humidity at top of viscous sublayer +'Specific humidity at top of viscous sublayer' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 218 ; + } +#Maximum specific humidity at 2m +'Maximum specific humidity at 2m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 219 ; + } +#Minimum specific humidity at 2m +'Minimum specific humidity at 2m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 220 ; + } +#Liquid precipitation (rainfall) +'Liquid precipitation (rainfall)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 221 ; + } +#Snow temperature, depth-avg +'Snow temperature, depth-avg' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 222 ; + } +#Total precipitation (nearest grid point) +'Total precipitation (nearest grid point)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 223 ; + } +#Convective precipitation (nearest grid point) +'Convective precipitation (nearest grid point)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 224 ; + } +#Freezing Rain +'Freezing Rain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 225 ; + } +#Latitude of U Wind Component of Velocity +'Latitude of U Wind Component of Velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 198 ; + } +#Longitude of U Wind Component of Velocity +'Longitude of U Wind Component of Velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 199 ; + } +#Latitude of V Wind Component of Velocity +'Latitude of V Wind Component of Velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 200 ; + } +#Longitude of V Wind Component of Velocity +'Longitude of V Wind Component of Velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 201 ; + } +#Latitude of Presure Point +'Latitude of Presure Point' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 202 ; + } +#Longitude of Presure Point +'Longitude of Presure Point' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 203 ; + } +#Vertical Eddy Diffusivity Heat exchange +'Vertical Eddy Diffusivity Heat exchange' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 204 ; + } +#Covariance between Meridional and Zonal Components of the wind. +'Covariance between Meridional and Zonal Components of the wind.' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 205 ; + } +#Covariance between Temperature and Zonal Components of the wind. +'Covariance between Temperature and Zonal Components of the wind.' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 206 ; + } +#Covariance between Temperature and Meridional Components of the wind. +'Covariance between Temperature and Meridional Components of the wind.' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 207 ; + } +#Vertical Diffusion Zonal Acceleration +'Vertical Diffusion Zonal Acceleration' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 208 ; + } +#Vertical Diffusion Meridional Acceleration +'Vertical Diffusion Meridional Acceleration' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 209 ; + } +#Gravity wave drag zonal acceleration +'Gravity wave drag zonal acceleration' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 210 ; + } +#Gravity wave drag meridional acceleration +'Gravity wave drag meridional acceleration' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 211 ; + } +#Convective zonal momentum mixing acceleration +'Convective zonal momentum mixing acceleration' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 212 ; + } +#Convective meridional momentum mixing acceleration +'Convective meridional momentum mixing acceleration' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 213 ; + } +#Tendency of vertical velocity +'Tendency of vertical velocity' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 214 ; + } +#Omega (Dp/Dt) divide by density +'Omega (Dp/Dt) divide by density' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 215 ; + } +#Convective Gravity wave drag zonal acceleration +'Convective Gravity wave drag zonal acceleration' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 216 ; + } +#Convective Gravity wave drag meridional acceleration +'Convective Gravity wave drag meridional acceleration' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 217 ; + } +#Velocity Point Model Surface +'Velocity Point Model Surface' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 218 ; + } +#Potential Vorticity (Mass-Weighted) +'Potential Vorticity (Mass-Weighted)' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 219 ; + } +#MSLP (Eta model reduction) +'MSLP (Eta model reduction)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#MSLP (MAPS System Reduction) +'MSLP (MAPS System Reduction)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 198 ; + } +#3-hr pressure tendency (Std. Atmos. Reduction) +'3-hr pressure tendency (Std. Atmos. Reduction)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 199 ; + } +#Pressure of level from which parcel was lifted +'Pressure of level from which parcel was lifted' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 200 ; + } +#X-gradient of Log Pressure +'X-gradient of Log Pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 201 ; + } +#Y-gradient of Log Pressure +'Y-gradient of Log Pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 202 ; + } +#X-gradient of Height +'X-gradient of Height' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 203 ; + } +#Y-gradient of Height +'Y-gradient of Height' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 204 ; + } +#Layer Thickness +'Layer Thickness' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 205 ; + } +#Natural Log of Surface Pressure +'Natural Log of Surface Pressure' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 206 ; + } +#Convective updraft mass flux +'Convective updraft mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 207 ; + } +#Convective downdraft mass flux +'Convective downdraft mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 208 ; + } +#Convective detrainment mass flux +'Convective detrainment mass flux' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 209 ; + } +#Mass Point Model Surface +'Mass Point Model Surface' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 210 ; + } +#Geopotential Height (nearest grid point) +'Geopotential Height (nearest grid point)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 211 ; + } +#Pressure (nearest grid point) +'Pressure (nearest grid point)' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 212 ; + } +#UV-B downward solar flux +'UV-B downward solar flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 194 ; + } +#Clear sky UV-B downward solar flux +'Clear sky UV-B downward solar flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 195 ; + } +#Clear Sky Downward Solar Flux +'Clear Sky Downward Solar Flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 196 ; + } +#Solar Radiative Heating Rate +'Solar Radiative Heating Rate' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 197 ; + } +#Clear Sky Upward Solar Flux +'Clear Sky Upward Solar Flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 198 ; + } +#Cloud Forcing Net Solar Flux +'Cloud Forcing Net Solar Flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 199 ; + } +#Visible Beam Downward Solar Flux +'Visible Beam Downward Solar Flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 200 ; + } +#Visible Diffuse Downward Solar Flux +'Visible Diffuse Downward Solar Flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 201 ; + } +#Near IR Beam Downward Solar Flux +'Near IR Beam Downward Solar Flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 202 ; + } +#Near IR Diffuse Downward Solar Flux +'Near IR Diffuse Downward Solar Flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 203 ; + } +#Downward Total radiation Flux +'Downward Total radiation Flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 204 ; + } +#Upward Total radiation Flux +'Upward Total radiation Flux' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 205 ; + } +#Long-Wave Radiative Heating Rate +'Long-Wave Radiative Heating Rate' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 194 ; + } +#Clear Sky Upward Long Wave Flux +'Clear Sky Upward Long Wave Flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 195 ; + } +#Clear Sky Downward Long Wave Flux +'Clear Sky Downward Long Wave Flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 196 ; + } +#Cloud Forcing Net Long Wave Flux +'Cloud Forcing Net Long Wave Flux' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 197 ; + } +#Convective Cloud Mass Flux +'Convective Cloud Mass Flux' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 200 ; + } +#Richardson Number +'Richardson Number' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 194 ; + } +#Convective Weather Detection Index +'Convective Weather Detection Index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 195 ; + } +#Updraft Helicity +'Updraft Helicity' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 197 ; + } +#Leaf Area Index +'Leaf Area Index' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 198 ; + } +#Particulate matter (coarse) +'Particulate matter (coarse)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 192 ; + } +#Particulate matter (fine) +'Particulate matter (fine)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 193 ; + } +#Particulate matter (fine) +'Particulate matter (fine)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 194 ; + } +#Integrated column particulate matter (fine) +'Integrated column particulate matter (fine)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 195 ; + } +#Ozone Concentration (PPB) +'Ozone Concentration (PPB)' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 193 ; + } +#Categorical Ozone Concentration +'Categorical Ozone Concentration' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 194 ; + } +#Ozone vertical diffusion +'Ozone vertical diffusion' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 195 ; + } +#Ozone production +'Ozone production' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 196 ; + } +#Ozone tendency +'Ozone tendency' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 197 ; + } +#Ozone production from temperature term +'Ozone production from temperature term' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 198 ; + } +#Ozone production from col ozone term +'Ozone production from col ozone term' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 199 ; + } +#Derived radar reflectivity backscatter from rain +'Derived radar reflectivity backscatter from rain' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 192 ; + } +#Derived radar reflectivity backscatter from ice +'Derived radar reflectivity backscatter from ice' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 193 ; + } +#Derived radar reflectivity backscatter from parameterized convection +'Derived radar reflectivity backscatter from parameterized convection' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 194 ; + } +#Derived radar reflectivity +'Derived radar reflectivity' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 195 ; + } +#Maximum/Composite radar reflectivity +'Maximum/Composite radar reflectivity' = { + discipline = 0 ; + parameterCategory = 16 ; + parameterNumber = 196 ; + } +#Lightning +'Lightning' = { + discipline = 0 ; + parameterCategory = 17 ; + parameterNumber = 192 ; + } +#Slight risk convective outlook +'Slight risk convective outlook' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 194 ; + } +#Moderate risk convective outlook +'Moderate risk convective outlook' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 195 ; + } +#High risk convective outlook +'High risk convective outlook' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 196 ; + } +#Tornado probability +'Tornado probability' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 197 ; + } +#Hail probability +'Hail probability' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 198 ; + } +#Wind probability +'Wind probability' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 199 ; + } +#Significant Tornado probability +'Significant Tornado probability' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 200 ; + } +#Significant Hail probability +'Significant Hail probability' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 201 ; + } +#Significant Wind probability +'Significant Wind probability' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 202 ; + } +#Categorical Thunderstorm (1-yes, 0-no) +'Categorical Thunderstorm (1-yes, 0-no)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 203 ; + } +#Number of mixed layers next to surface +'Number of mixed layers next to surface' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 204 ; + } +#Flight Category +'Flight Category' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 205 ; + } +#Confidence - Ceiling +'Confidence - Ceiling' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 206 ; + } +#Confidence - Visibility +'Confidence - Visibility' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 207 ; + } +#Confidence - Flight Category +'Confidence - Flight Category' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 208 ; + } +#Low-Level aviation interest +'Low-Level aviation interest' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 209 ; + } +#High-Level aviation interest +'High-Level aviation interest' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 210 ; + } +#Visible, Black Sky Albedo +'Visible, Black Sky Albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 211 ; + } +#Visible, White Sky Albedo +'Visible, White Sky Albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 212 ; + } +#Near IR, Black Sky Albedo +'Near IR, Black Sky Albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 213 ; + } +#Near IR, White Sky Albedo +'Near IR, White Sky Albedo' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 214 ; + } +#Total Probability of Severe Thunderstorms (Days 2,3) +'Total Probability of Severe Thunderstorms (Days 2,3)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 215 ; + } +#Total Probability of Extreme Severe Thunderstorms (Days 2,3) +'Total Probability of Extreme Severe Thunderstorms (Days 2,3)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 216 ; + } +#Supercooled Large Droplet (SLD) Potential +'Supercooled Large Droplet (SLD) Potential' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 217 ; + } +#Radiative emissivity +'Radiative emissivity' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 218 ; + } +#Turbulence Potential Forecast Index +'Turbulence Potential Forecast Index' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 219 ; + } +#Volcanic Ash Forecast Transport and Dispersion +'Volcanic Ash Forecast Transport and Dispersion' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 232 ; + } +#Latitude (-90 to +90) +'Latitude (-90 to +90)' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 192 ; + } +#East Longitude (0 - 360) +'East Longitude (0 - 360)' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 193 ; + } +#Model Layer number (From bottom up) +'Model Layer number (From bottom up)' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 195 ; + } +#Latitude (nearest neighbor) (-90 to +90) +'Latitude (nearest neighbor) (-90 to +90)' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 196 ; + } +#East Longitude (nearest neighbor) (0 - 360) +'East Longitude (nearest neighbor) (0 - 360)' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 197 ; + } +#Probability of Freezing Precipitation +'Probability of Freezing Precipitation' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + } +#Probability of precipitation exceeding flash flood guidance values +'Probability of precipitation exceeding flash flood guidance values' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + } +#Probability of Wetting Rain, exceeding in 0.10 in a given time period +'Probability of Wetting Rain, exceeding in 0.10 in a given time period' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + } +#Vegetation Type +'Vegetation Type' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 198 ; + } +#Wilting Point +'Wilting Point' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 201 ; + } +#Rate of water dropping from canopy to ground +'Rate of water dropping from canopy to ground' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 206 ; + } +#Ice-free water surface +'Ice-free water surface' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 207 ; + } +#Surface exchange coefficients for T and Q divided by delta z +'Surface exchange coefficients for T and Q divided by delta z' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 208 ; + } +#Surface exchange coefficients for U and V divided by delta z +'Surface exchange coefficients for U and V divided by delta z' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 209 ; + } +#Vegetation canopy temperature +'Vegetation canopy temperature' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 210 ; + } +#Surface water storage +'Surface water storage' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 211 ; + } +#Liquid soil moisture content (non-frozen) +'Liquid soil moisture content (non-frozen)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 212 ; + } +#Open water evaporation (standing water) +'Open water evaporation (standing water)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 213 ; + } +#Groundwater recharge +'Groundwater recharge' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 214 ; + } +#Flood plain recharge +'Flood plain recharge' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 215 ; + } +#Roughness length for heat +'Roughness length for heat' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 216 ; + } +#Normalized Difference Vegetation Index +'Normalized Difference Vegetation Index' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 217 ; + } +#Land-sea coverage (nearest neighbor) [land=1,sea=0] +'Land-sea coverage (nearest neighbor) [land=1,sea=0]' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 218 ; + } +#Asymptotic mixing length scale +'Asymptotic mixing length scale' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 219 ; + } +#Water vapor added by precip assimilation +'Water vapor added by precip assimilation' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 220 ; + } +#Water condensate added by precip assimilation +'Water condensate added by precip assimilation' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 221 ; + } +#Water Vapor Flux Convergance (Vertical Int) +'Water Vapor Flux Convergance (Vertical Int)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 222 ; + } +#Water Condensate Flux Convergance (Vertical Int) +'Water Condensate Flux Convergance (Vertical Int)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 223 ; + } +#Water Vapor Zonal Flux (Vertical Int) +'Water Vapor Zonal Flux (Vertical Int)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 224 ; + } +#Water Vapor Meridional Flux (Vertical Int) +'Water Vapor Meridional Flux (Vertical Int)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 225 ; + } +#Water Condensate Zonal Flux (Vertical Int) +'Water Condensate Zonal Flux (Vertical Int)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 226 ; + } +#Water Condensate Meridional Flux (Vertical Int) +'Water Condensate Meridional Flux (Vertical Int)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 227 ; + } +#Aerodynamic conductance +'Aerodynamic conductance' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 228 ; + } +#Canopy water evaporation +'Canopy water evaporation' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 229 ; + } +#Transpiration +'Transpiration' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 230 ; + } +#Surface Slope Type +'Surface Slope Type' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#Direct evaporation from bare soil +'Direct evaporation from bare soil' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 198 ; + } +#Land Surface Precipitation Accumulation +'Land Surface Precipitation Accumulation' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 199 ; + } +#Bare soil surface skin temperature +'Bare soil surface skin temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 200 ; + } +#Average surface skin temperature +'Average surface skin temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 201 ; + } +#Effective radiative skin temperature +'Effective radiative skin temperature' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 202 ; + } +#Field Capacity +'Field Capacity' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 203 ; + } +#Scatterometer Estimated U Wind Component +'Scatterometer Estimated U Wind Component' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + } +#Scatterometer Estimated V Wind Component +'Scatterometer Estimated V Wind Component' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + } +#Wave Steepness +'Wave Steepness' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 192 ; + } +#Ocean Mixed Layer U Velocity +'Ocean Mixed Layer U Velocity' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 192 ; + } +#Ocean Mixed Layer V Velocity +'Ocean Mixed Layer V Velocity' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 193 ; + } +#Barotropic U velocity +'Barotropic U velocity' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 194 ; + } +#Barotropic V velocity +'Barotropic V velocity' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 195 ; + } +#Storm Surge +'Storm Surge' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 192 ; + } +#Extra Tropical Storm Surge +'Extra Tropical Storm Surge' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 193 ; + } +#Ocean Surface Elevation Relative to Geoid +'Ocean Surface Elevation Relative to Geoid' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 194 ; + } +#Sea Surface Height Relative to Geoid +'Sea Surface Height Relative to Geoid' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 195 ; + } +#Ocean Mixed Layer Potential Density (Reference 2000m)
5 or new() ) ) { + alias section2Used=one; + + if(productionStatusOfProcessedData == 4 || productionStatusOfProcessedData == 5) { + # This is TIGGE-LAM because of the productionStatusOfProcessedData and the non-empty section 2 + codetable[2] tiggeLocalVersion 'grib2/tiggeLocalVersion.table' = 1 : dump; + template tiggeSection "grib2/local.tigge.[tiggeLocalVersion:l].def"; + } + + codetable[2] grib2LocalSectionNumber 'grib2/grib2LocalSectionNumber.[centreForLocal:l].table' = 1 : dump; + + if (grib2LocalSectionNumber!=0) { + template_nofail local "grib2/local.[centreForLocal:l].def"; + } else { + constant deleteLocalDefinition=1; + } + position offsetAfterCentreLocalSection; + } +} + +section_padding section2Padding : read_only; + + + diff --git a/definitions/grib2/section.3.def b/definitions/grib2/section.3.def new file mode 100644 index 000000000..e94801d4f --- /dev/null +++ b/definitions/grib2/section.3.def @@ -0,0 +1,109 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START grib2::section +# SECTION 3, GRID DEFINITION SECTION +# Length of section in octets + +# For grib2 -> 1 +constant gridDescriptionSectionPresent = 1; +position offsetSection3; + +length[4] section3Length ; +meta section3Pointer section_pointer(offsetSection3,section3Length,3); + +# Number of section +unsigned[1] numberOfSection = 3 :read_only; + +# Source of grid definition +# NOTE 1 NOT FOUND +codetable[1] sourceOfGridDefinition ('3.0.table',masterDir,localDir) ; + +# Number of data points +unsigned[4] numberOfDataPoints : dump; +alias numberOfPoints=numberOfDataPoints; + +# Number of octets for optional list of numbers defining number of points +# NOTE 2 NOT FOUND +unsigned[1] numberOfOctectsForNumberOfPoints; + +# Interpretation of list of numbers defining number of points +codetable[1] interpretationOfNumberOfPoints ('3.11.table',masterDir,localDir) : dump; + +if(numberOfOctectsForNumberOfPoints == 0){ + transient PLPresent = 0 ; +}else{ + transient PLPresent = 1 ; +} + +codetable[2] gridDefinitionTemplateNumber ('3.1.table',masterDir,localDir) =0 : dump,edition_specific; + +template gridDefinitionSection "grib2/template.3.[gridDefinitionTemplateNumber:l].def"; + +if(PLPresent){ + if(numberOfOctectsForNumberOfPoints == 1){ + unsigned[1] pl[Nj] : dump; + } + if(numberOfOctectsForNumberOfPoints == 2){ + unsigned[2] pl[Nj] : dump; + } + if(numberOfOctectsForNumberOfPoints == 3){ + unsigned[3] pl[Nj] : dump; + } + alias geography.pl=pl; +} + +when (PLPresent == 0) { + set numberOfOctectsForNumberOfPoints = 0; + set interpretationOfNumberOfPoints = 0; +} + +section_padding section3Padding : read_only; + +concept gridType { + "regular_ll" = { gridDefinitionTemplateNumber=0; PLPresent=0; } + "reduced_ll" = { gridDefinitionTemplateNumber=0; PLPresent=1; } + "rotated_ll" = { gridDefinitionTemplateNumber=1; PLPresent=0; } + "stretched_ll" = { gridDefinitionTemplateNumber=2; PLPresent=0; } + "stretched_rotated_ll" = { gridDefinitionTemplateNumber=3; PLPresent=0; } + "mercator" = { gridDefinitionTemplateNumber=10; PLPresent=0; } + "transverse_mercator" = { gridDefinitionTemplateNumber=12; PLPresent=0; } + "polar_stereographic" = { gridDefinitionTemplateNumber=20; PLPresent=0; } + "lambert" = { gridDefinitionTemplateNumber=30; PLPresent=0; } + "albers" = { gridDefinitionTemplateNumber=31; PLPresent=0; } + "regular_gg" = { gridDefinitionTemplateNumber=40; PLPresent=0; } + "reduced_gg" = { gridDefinitionTemplateNumber=40; PLPresent=1; numberOfOctectsForNumberOfPoints=2;iDirectionIncrementGiven=0;numberOfPointsAlongAParallel = missing(); } + "rotated_gg" = { gridDefinitionTemplateNumber=41; PLPresent=0; } + "stretched_gg" = { gridDefinitionTemplateNumber=42; PLPresent=0; } + "stretched_rotated_gg" = { gridDefinitionTemplateNumber=43; PLPresent=0; } + "sh" = { gridDefinitionTemplateNumber=50; PLPresent=0;} + "rotated_sh" = { gridDefinitionTemplateNumber=51; PLPresent=0;} + "stretched_sh" = { gridDefinitionTemplateNumber=52; PLPresent=0;} + "stretched_rotated_sh" = { gridDefinitionTemplateNumber=53; PLPresent=0;} + "space_view" = { gridDefinitionTemplateNumber=90; PLPresent=0;} + "triangular_grid" = { gridDefinitionTemplateNumber=100;PLPresent=0;} + "unstructured_grid" = { gridDefinitionTemplateNumber=101;PLPresent=0;} + "equatorial_azimuthal_equidistant" = { gridDefinitionTemplateNumber=110; PLPresent=0;} + "azimuth_range" = { gridDefinitionTemplateNumber=120;PLPresent=0; } + "irregular_latlon" = { gridDefinitionTemplateNumber=130;PLPresent=0; } + "lambert_azimuthal_equal_area"= { gridDefinitionTemplateNumber=140;PLPresent=0; } + "cross_section" = { gridDefinitionTemplateNumber=1000;PLPresent=0; } + "Hovmoller" = { gridDefinitionTemplateNumber=1100;PLPresent=0; } + "time_section" = { gridDefinitionTemplateNumber=1200;PLPresent=0; } + "unknown" = {PLPresent=0;} + "unknown_PLPresent" = {PLPresent=1;} +} : dump; + +alias ls.gridType=gridType; +alias geography.gridType=gridType; +alias typeOfGrid=gridType; + +meta md5Section3 md5(offsetSection3,section3Length); +alias md5GridSection = md5Section3; + diff --git a/definitions/grib2/section.4.def b/definitions/grib2/section.4.def new file mode 100644 index 000000000..26ef19626 --- /dev/null +++ b/definitions/grib2/section.4.def @@ -0,0 +1,75 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# +transient timeRangeIndicator=0 : no_copy,hidden; + +position offsetSection4; +length[4] section4Length ; +meta section4Pointer section_pointer(offsetSection4,section4Length,4); + +unsigned[1] numberOfSection = 4:read_only; + +unsigned[2] NV : dump ; +alias numberOfVerticalCoordinateValues=NV ; +alias numberOfCoordinatesValues=NV; +# For table 4.5, code 150 Generalized vertical height coordinate +alias numberOfVerticalGridDescriptors=NV ; + +# Product Definition Template Number + +transient neitherPresent = 0; + +if (centre==7 || centre==46) { + alias disableGrib1LocalSection=one; +} + +codetable[2] productDefinitionTemplateNumber('4.0.table',masterDir,localDir) : dump; + +if (section2Used == 1) { + when (new()) { + set_nofail productDefinitionTemplateNumber=productDefinitionTemplateNumberInternal; + } +} + +template productDefinition "grib2/template.4.[productDefinitionTemplateNumber:l].def" ; + +if (defined(marsStream) && defined(marsType)) { + template_nofail marsKeywords1 "mars/grib1.[marsStream:s].[marsType:s].def"; +} + +template parameters "grib2/parameters.def"; + +# Detect if this is for Generalized vertical height coordinates +transient genVertHeightCoords = 0; +if (defined(typeOfFirstFixedSurface)) { + if (typeOfFirstFixedSurface == 150) { + transient genVertHeightCoords = 1; + } +} + +if (genVertHeightCoords) { + # Generalized vertical height coordinate case + transient PVPresent = 0; + ieeefloat nlev : dump ; + alias numberOfVerticalCoordinateValues = nlev ; + ieeefloat numberOfVGridUsed : dump; + byte[16] uuidOfVGrid : dump; +} +else { + if (NV == 0){ + transient PVPresent = 0; + } else { + transient PVPresent = 1; + } + if (PVPresent){ + ieeefloat pv[numberOfCoordinatesValues] : dump; + alias vertical.pv=pv; + } +} + +meta md5Section4 md5(offsetSection4,section4Length); diff --git a/definitions/grib2/section.5.def b/definitions/grib2/section.5.def new file mode 100644 index 000000000..a96a1be3e --- /dev/null +++ b/definitions/grib2/section.5.def @@ -0,0 +1,72 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "grib 2 Section 5 DATA REPRESENTATION SECTION"; +position offsetBSection5; + +# START grib2::section +# SECTION 5, DATA REPRESENTATION SECTION +# Length of section in octets + +# (nn) +position offsetSection5; +length[4] section5Length ; + +meta section5 section_pointer(offsetSection5,section5Length,5); + +# Number of section +unsigned[1] numberOfSection =5 : read_only; + +# Number of data points where one or more values are specified in Section 7 when a bit map is present, +# total number of data pints when a bit map is absent. +unsigned[4] numberOfValues : dump; +alias numberOfCodedValues=numberOfValues; +alias numberOfEffectiveValues=numberOfValues; + +# Data Representation Template Number +codetable[2] dataRepresentationTemplateNumber ('5.0.table',masterDir,localDir) : edition_specific; + +concept packingType (unknown) { +#set uses the last one +#get returns the first match + "grid_simple" = { dataRepresentationTemplateNumber = 0; } + "spectral_complex" = { dataRepresentationTemplateNumber = 51; spectralType=1; spectralMode=1; } + "spectral_simple" = { dataRepresentationTemplateNumber = 50; spectralType=1; spectralMode=1; } + "grid_simple_matrix" = { dataRepresentationTemplateNumber = 1; } + "grid_complex" = { dataRepresentationTemplateNumber = 2; } + "grid_complex_spatial_differencing" = { dataRepresentationTemplateNumber = 3; } + "grid_jpeg" = { dataRepresentationTemplateNumber = 40000; } + "grid_jpeg" = { dataRepresentationTemplateNumber = 40; } + "grid_png" = { dataRepresentationTemplateNumber = 40010; } + "grid_png" = { dataRepresentationTemplateNumber = 41; } + "grid_szip" = { dataRepresentationTemplateNumber = 42; } + "grid_ieee" = { dataRepresentationTemplateNumber = 4; } + "grid_second_order" = { dataRepresentationTemplateNumber = 50001; } + "grid_second_order" = { dataRepresentationTemplateNumber = 50002; } + "grid_second_order_boustrophedonic" = { dataRepresentationTemplateNumber = 50002; } + "grid_second_order_no_boustrophedonic" = { dataRepresentationTemplateNumber = 50001; } + "grid_second_order_row_by_row" = { dataRepresentationTemplateNumber = 50001; } + "grid_second_order_constant_width" = { dataRepresentationTemplateNumber = 50001; } + "grid_second_order_general_grib1" = { dataRepresentationTemplateNumber = 50001; } + "grid_second_order_no_SPD" = { dataRepresentationTemplateNumber = 50001;orderOfSPD=0; } + "grid_second_order_SPD1" = { dataRepresentationTemplateNumber = 50001;orderOfSPD=1; } + "grid_second_order_SPD2" = { dataRepresentationTemplateNumber = 50001;orderOfSPD=2; } + "grid_second_order_SPD3" = { dataRepresentationTemplateNumber = 50001;orderOfSPD=3; } + "spectral_ieee" = { dataRepresentationTemplateNumber=50000; } + "grid_simple_log_preprocessing" = { dataRepresentationTemplateNumber = 61; } +} : dump; + +template dataRepresentation "grib2/template.5.[dataRepresentationTemplateNumber:l].def"; + +alias ls.packingType=packingType; +alias dataRepresentation=packingType; +alias typeOfPacking=packingType; +transient representationMode=0 :hidden,no_copy; + +meta md5Section5 md5(offsetSection5,section5Length); diff --git a/definitions/grib2/section.6.def b/definitions/grib2/section.6.def new file mode 100644 index 000000000..e526ef1fa --- /dev/null +++ b/definitions/grib2/section.6.def @@ -0,0 +1,64 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "grib 2 Section 6 BIT-MAP SECTION"; +# START grib2::section +# SECTION 6, BIT-MAP SECTION +# Length of section in octets +# (nn) +position offsetSection6; +position offsetBSection6; + +length[4] section6Length ; +meta section6 section_pointer(offsetSection6,section6Length,6); + +# Number of section +unsigned[1] numberOfSection = 6:read_only; + +# Bit-map indicator +# NOTE 1 NOT FOUND +codetable[1] bitMapIndicator ('6.0.table',masterDir,localDir) = 255 : dump; + +#transient bitmapPresent=1; +meta geography.bitmapPresent g2bitmap_present(bitMapIndicator): dump; + +# Bitmap... +if(bitMapIndicator == 0) +{ + + if(dataRepresentationTemplateNumber == 1) + { + if(matrixBitmapsPresent == 1) + { + meta primaryBitmap g2bitmap( tableReference, + missingValue, + offsetBSection6, + section6Length, + numberOfDataMatrices) : read_only; + } + else + { + meta geography.bitmap g2bitmap( tableReference, + missingValue, + offsetBSection6, + section6Length, + numberOfDataPoints) : read_only; + } + } + else + { + meta geography.bitmap g2bitmap( tableReference, + missingValue, + offsetBSection6, + section6Length, + numberOfDataPoints) : read_only; + } +} + +meta md5Section6 md5(offsetSection6,section6Length); diff --git a/definitions/grib2/section.7.def b/definitions/grib2/section.7.def new file mode 100644 index 000000000..6abe169a2 --- /dev/null +++ b/definitions/grib2/section.7.def @@ -0,0 +1,49 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "grib 2 Section 7 data"; +# START grib2::section +# SECTION 7, DATA SECTION +# Length of section in octets +# (nn) + +position offsetSection7; + +length[4] section7Length ; +meta section7 section_pointer(offsetSection7,section7Length,7); + +# Number of section +unsigned[1] numberOfSection = 7:read_only; + +# Octets 6-nn : Data in a format described by Data Template 7.x, where x is the Data Representation +# Template number given in octets 10-11 of Section 5 +position offsetBeforeData; +#if (changed(dataRepresentationTemplateNumber)) { + template dataValues "grib2/template.7.[dataRepresentationTemplateNumber:l].def"; +#} + +meta changeDecimalPrecision decimal_precision(bitsPerValue,decimalScaleFactor,changingPrecision,values) : edition_specific; +meta decimalPrecision decimal_precision(bitsPerValue,decimalScaleFactor,changingPrecision) : edition_specific; +alias setDecimalPrecision=changeDecimalPrecision; + +meta setBitsPerValue bits_per_value(values,bitsPerValue) : edition_specific; + +meta getNumberOfValues size(values) : edition_specific,dump ; + +meta scaleValuesBy scale_values(values,missingValue) : edition_specific; +meta offsetValuesBy offset_values(values,missingValue) : edition_specific; + +concept productType(unknown) { + "obstat" = {grib2LocalSectionPresent=1; centre=98; grib2LocalSectionNumber=500;productDefinitionTemplateNumber=2000;} +} + +position offsetAfterData; +meta md5Section7 md5(offsetSection7,section7Length); +alias md5DataSection = md5Section7; + diff --git a/definitions/grib2/section.8.def b/definitions/grib2/section.8.def new file mode 100644 index 000000000..ed862c043 --- /dev/null +++ b/definitions/grib2/section.8.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +constant section8Length=4; +position offsetSection8; +ascii[4] '7777' = "7777" : read_only; +meta section8Pointer section_pointer(offsetSection8,section8Length,8); + diff --git a/definitions/grib2/sections.def b/definitions/grib2/sections.def new file mode 100644 index 000000000..00c51d022 --- /dev/null +++ b/definitions/grib2/sections.def @@ -0,0 +1,71 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + lookup[1] sectionNumber(4) ; + + if(sectionNumber == 1 or new() ){ + position sectionPosition; + template section_1 "grib2/section.1.def"; + } + + lookup[1] sectionNumber(4) ; + + transient grib2LocalSectionPresent=0; + alias section2Used=zero; + alias setLocalDefinition=grib2LocalSectionPresent; + + if( sectionNumber == 2 or grib2LocalSectionPresent>0 ){ + position sectionPosition; + template section_2 "grib2/section.2.def"; + } + + lookup[1] sectionNumber(4) ; + + if(sectionNumber == 3 or new() ){ + position sectionPosition; + template section_3 "grib2/section.3.def"; + } + + + lookup[1] sectionNumber(4) ; + + if(sectionNumber == 4 or new() ){ + position sectionPosition; + template section_4 "grib2/section.4.def"; + } + + lookup[1] sectionNumber(4) ; + + if(sectionNumber == 5 or new() ){ + position sectionPosition; + template section_5 "grib2/section.5.def"; + } + + # Used to mark end of headers. Can be accessed with grib_get_offset() + position endOfHeadersMaker; + + meta lengthOfHeaders evaluate( endOfHeadersMaker-startOfHeaders); + meta md5Headers md5(startOfHeaders,lengthOfHeaders); + + lookup[1] sectionNumber(4) ; + + if(sectionNumber == 6 or new() ){ + position sectionPosition; + template section_6 "grib2/section.6.def"; + } + + lookup[1] sectionNumber(4) ; + + if(sectionNumber == 7 or new() ){ + position sectionPosition; + template section_7 "grib2/section.7.def"; + } + + + #template metas "grib2/meta.def"; diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def new file mode 100644 index 000000000..92750487b --- /dev/null +++ b/definitions/grib2/shortName.def @@ -0,0 +1,2246 @@ +# Automatically generated by create_def.pl from database param@wrep-db-misc-prod, do not edit +#10 metre wind gust in the last 3 hours +'10fg3' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfStatisticalProcessing = 2 ; + } +#Cloudy brightness temperature +'clbt' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + } +#Clear-sky brightness temperature +'csbt' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + } +#Virtual temperature +'vtmp' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Pseudo-adiabatic potential temperature +'papt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Total precipitation of at least 10 mm +'tpg10' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + productDefinitionTemplateNumber = 9 ; + scaleFactorOfLowerLimit = 0 ; + probabilityType = 3 ; + scaledValueOfLowerLimit = 10 ; + } +#Total precipitation of at least 20 mm +'tpg20' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + probabilityType = 3 ; + typeOfFirstFixedSurface = 1 ; + scaleFactorOfLowerLimit = 0 ; + productDefinitionTemplateNumber = 9 ; + scaledValueOfLowerLimit = 20 ; + typeOfStatisticalProcessing = 1 ; + } +#Stream function +'strf' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 4 ; + } +#Velocity potential +'vp' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + } +#Potential temperature +'pt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Wind speed +'ws' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + } +#Pressure +'pres' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Convective available potential energy +'cape' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Potential vorticity +'pv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'mx2t6' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'mn2t6' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 103 ; + } +#Geopotential +'z' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Temperature +'t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#U component of wind +'u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#V component of wind +'v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#Specific humidity +'q' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + } +#Surface pressure +'sp' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Vertical velocity +'w' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Total column water +'tcw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Vorticity (relative) +'vo' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + } +#Boundary layer dissipation +'bld' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + } +#Surface sensible heat flux +'sshf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface latent heat flux +'slhf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Mean sea level pressure +'msl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + } +#Divergence +'d' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + } +#Geopotential Height +'gh' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + } +#Relative humidity +'r' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#10 metre U wind component +'10u' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#10 metre V wind component +'10v' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#2 metre temperature +'2t' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#2 metre dewpoint temperature +'2d' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + } +#Land-sea mask +'lsm' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface roughness +'sr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Surface net solar radiation +'ssr' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface net thermal radiation +'str' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Top net thermal radiation +'ttr' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 8 ; + } +#Sunshine duration +'sund' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Brightness temperature +'btmp' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 4 ; + } +#10 metre wind speed +'10si' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + } +#Skin temperature +'skt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + } +#large scale precipitation +'lsp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Latent heat net flux +'lhtfl' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + } +#Sensible heat net flux +'shtfl' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + } +#Heat index +'heatx' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 12 ; + } +#Wind chill factor +'wcf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + } +#Minimum dew point depression +'mindpd' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Snow phase change heat flux +'snohf' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + } +#Vapor pressure +'vapp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 4 ; + } +#Large scale precipitation (non-convective) +'ncpcp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 9 ; + } +#Snowfall rate water equivalent +'srweq' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 12 ; + } +#Convective snow +'snoc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + } +#Large scale snow +'snol' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + } +#Snow age +'snoag' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + } +#Absolute humidity +'absh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 18 ; + } +#Precipitation type +'ptype' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 19 ; + } +#Integrated liquid water +'iliqw' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 20 ; + } +#Condensate +'tcond' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 21 ; + } +#Cloud mixing ratio +'clwmr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 22 ; + } +#Ice water mixing ratio +'icmr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 23 ; + } +#Rain mixing ratio +'rwmr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 24 ; + } +#Snow mixing ratio +'snmr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 25 ; + } +#Horizontal moisture convergence +'mconv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 26 ; + } +#Maximum relative humidity +'maxrh' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 27 ; + } +#Maximum absolute humidity +'maxah' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 28 ; + } +#Total snowfall +'asnow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 29 ; + } +#Precipitable water category +'pwcat' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 30 ; + } +#Hail +'hail' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 31 ; + } +#Graupel (snow pellets) +'grle' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + } +#Categorical rain +'crain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 33 ; + } +#Categorical freezing rain +'cfrzr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 34 ; + } +#Categorical ice pellets +'cicep' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 35 ; + } +#Categorical snow +'csnow' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 36 ; + } +#Convective precipitation rate +'cprat' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + } +#Horizontal moisture divergence +'mconv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 38 ; + } +#Percent frozen precipitation +'cpofp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 39 ; + } +#Potential evaporation +'pevap' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 40 ; + } +#Potential evaporation rate +'pevpr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 41 ; + } +#Snow cover +'snowc' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 42 ; + } +#Rain fraction of total cloud water +'frain' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 43 ; + } +#Rime factor +'rime' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 44 ; + } +#Total column integrated rain +'tcolr' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + } +#Total column integrated snow +'tcols' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + } +#Large scale water precipitation (non-convective) +'lswp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 47 ; + } +#Convective water precipitation +'cwp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 48 ; + } +#Total water precipitation +'twatp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 49 ; + } +#Total snow precipitation +'tsnowp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 50 ; + } +#Total column water (Vertically integrated total water (vapour + cloud water/ice)) +'tcwat' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + } +#Total precipitation rate +'tprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + } +#Total snowfall rate water equivalent +'tsrwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + } +#Large scale precipitation rate +'lsprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + } +#Convective snowfall rate water equivalent +'csrwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + } +#Large scale snowfall rate water equivalent +'lssrwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + } +#Total snowfall rate +'tsrate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 57 ; + } +#Convective snowfall rate +'csrate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 58 ; + } +#Large scale snowfall rate +'lssrate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 59 ; + } +#Water equivalent of accumulated snow depth +'sdwe' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 13 ; + } +#Total column integrated water vapour +'tciwv' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + } +#Rain precipitation rate +'rprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 65 ; + } +#Snow precipitation rate +'sprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 66 ; + } +#Freezing rain precipitation rate +'fprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + } +#Ice pellets precipitation rate +'iprate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 68 ; + } +#Momentum flux, u component +'uflx' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + } +#Momentum flux, v component +'vflx' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + } +#Maximum wind speed +'maxgust' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 21 ; + } +#Wind speed (gust) +'gust' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + } +#u-component of wind (gust) +'ugust' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 23 ; + } +#v-component of wind (gust) +'vgust' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + } +#Vertical speed shear +'vwsh' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + } +#Horizontal momentum flux +'mflx' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + } +#U-component storm motion +'ustm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 27 ; + } +#V-component storm motion +'vstm' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 28 ; + } +#Drag coefficient +'cd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 29 ; + } +#Frictional velocity +'fricv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 30 ; + } +#Pressure reduced to MSL +'prmsl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + } +#Geometric height +'dist' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + } +#Altimeter setting +'alts' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 11 ; + } +#Thickness +'thick' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 12 ; + } +#Pressure altitude +'presalt' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 13 ; + } +#Density altitude +'denalt' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 14 ; + } +#5-wave geopotential height +'5wavh' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 15 ; + } +#Zonal flux of gravity wave stress +'u-gwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + } +#Meridional flux of gravity wave stress +'v-gwd' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + } +#Planetary boundary layer height +'hpbl' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + } +#5-wave geopotential height anomaly +'5wava' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 19 ; + } +#Standard deviation of sub-grid scale orography +'sdsgso' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } +#Net short-wave radiation flux (top of atmosphere) +'nswrt' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 1 ; + } +#Downward short-wave radiation flux +'dswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + } +#Upward short-wave radiation flux +'uswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 8 ; + } +#Net short wave radiation flux +'nswrf' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + } +#Photosynthetically active radiation +'photar' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + } +#Net short-wave radiation flux, clear sky +'nswrfcs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + } +#Downward UV radiation +'dwuvr' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + } +#UV index (under clear sky) +'uviucs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 50 ; + } +#UV index +'uvi' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 51 ; + } +#Net long wave radiation flux (surface) +'nlwrs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 0 ; + } +#Net long wave radiation flux (top of atmosphere) +'nlwrt' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 1 ; + } +#Downward long-wave radiation flux +'dlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + } +#Upward long-wave radiation flux +'ulwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 4 ; + } +#Net long wave radiation flux +'nlwrf' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + } +#Net long-wave radiation flux, clear sky +'nlwrcs' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + } +#Cloud Ice +'cice' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 0 ; + } +#Cloud water +'cwat' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 6 ; + } +#Cloud amount +'cdca' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 7 ; + } +#Cloud type +'cdct' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 8 ; + } +#Thunderstorm maximum tops +'tmaxt' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 9 ; + } +#Thunderstorm coverage +'thunc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 10 ; + } +#Cloud base +'cdcb' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + } +#Cloud top +'cdct' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 12 ; + } +#Ceiling +'ceil' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + } +#Non-convective cloud cover +'cdlyr' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 14 ; + } +#Cloud work function +'cwork' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 15 ; + } +#Convective cloud efficiency +'cuefi' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 16 ; + } +#Total condensate +'tcond' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 17 ; + } +#Total column-integrated cloud water +'tcolw' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 18 ; + } +#Total column-integrated cloud ice +'tcoli' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 19 ; + } +#Total column-integrated condensate +'tcolc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 20 ; + } +#Ice fraction of total condensate +'fice' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 21 ; + } +#Cloud ice mixing ratio +'cdcimr' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 23 ; + } +#Sunshine +'suns' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + } +#Horizontal extent of cumulonimbus (CB) +'~' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 25 ; + } +#K index +'kx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + } +#KO index +'kox' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 3 ; + } +#Total totals index +'totalx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + } +#Sweat index +'sx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 5 ; + } +#Storm relative helicity +'hlcy' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 8 ; + } +#Energy helicity index +'ehlx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 9 ; + } +#Surface lifted index +'lftx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 10 ; + } +#Best (4-layer) lifted index +'4lftx' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 11 ; + } +#Aerosol type +'aerot' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 0 ; + } +#Total ozone +'tozne' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 0 ; + } +#Total column integrated ozone +'tcioz' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + } +#Base spectrum width +'bswid' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 0 ; + } +#Base reflectivity +'bref' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + } +#Base radial velocity +'brvel' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 2 ; + } +#Vertically-integrated liquid +'veril' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 3 ; + } +#Layer-maximum base reflectivity +'lmaxbr' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 4 ; + } +#Precipitation +'prec' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 5 ; + } +#Air concentration of Caesium 137 +'acces' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 0 ; + } +#Air concentration of Iodine 131 +'aciod' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 1 ; + } +#Air concentration of radioactive pollutant +'acradp' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 2 ; + } +#Ground deposition of Caesium 137 +'gdces' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 3 ; + } +#Ground deposition of Iodine 131 +'gdiod' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 4 ; + } +#Ground deposition of radioactive pollutant +'gdradp' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 5 ; + } +#Time-integrated air concentration of caesium pollutant +'tiaccp' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 6 ; + } +#Time-integrated air concentration of iodine pollutant +'tiacip' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 7 ; + } +#Time-integrated air concentration of radioactive pollutant +'tiacrp' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 8 ; + } +#Volcanic ash +'volash' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 4 ; + } +#Icing top +'icit' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 5 ; + } +#Icing base +'icib' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 6 ; + } +#Icing +'ici' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 7 ; + } +#Turbulence top +'turbt' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 8 ; + } +#Turbulence base +'turbb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 9 ; + } +#Turbulence +'turb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 10 ; + } +#Turbulent kinetic energy +'tke' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 11 ; + } +#Planetary boundary layer regime +'pblreg' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 12 ; + } +#Contrail intensity +'conti' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 13 ; + } +#Contrail engine type +'contet' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 14 ; + } +#Contrail top +'contt' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 15 ; + } +#Contrail base +'contb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 16 ; + } +#Maximum snow albedo +'mxsalb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 17 ; + } +#Snow free albedo +'snfalb' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 18 ; + } +#Icing +'~' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 20 ; + } +#In-cloud turbulence +'~' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 21 ; + } +#Clear air turbulence (CAT) +'cat' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 22 ; + } +#Supercooled large droplet probability (see Note 4) +'~' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 23 ; + } +#Arbitrary text string +'var190m0' = { + discipline = 0 ; + parameterCategory = 190 ; + parameterNumber = 0 ; + } +#Seconds prior to initial reference time (defined in Section 1) +'tsec' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 0 ; + } +#Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the ref +'ffldg' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) +'ffldro' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Remotely sensed snow cover +'rssc' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Elevation of snow covered terrain +'esct' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Snow water equivalent percent of normal +'swepon' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Baseflow-groundwater runoff +'bgrun' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Storm surface runoff +'ssrun' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation) +'cppop' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + } +#Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over th +'pposp' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Probability of 0.01 inch of precipitation (POP) +'pop' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 2 ; + } +#Land cover (1=land, 0=sea) +'land' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Vegetation +'veg' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Water runoff +'watr' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Evapotranspiration +'evapt' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Model terrain height +'mterh' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Land use +'landu' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Volumetric soil moisture content +'soilw' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Ground heat flux +'gflux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + } +#Moisture availability +'mstav' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + } +#Exchange coefficient +'sfexc' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 12 ; + } +#Plant canopy surface water +'cnwat' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + } +#Blackadar mixing length scale +'bmixl' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Canopy conductance +'ccond' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + } +#Minimal stomatal resistance +'rsmin' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + } +#Solar parameter in canopy conductance +'rcs' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 18 ; + } +#Temperature parameter in canopy conductance +'rct' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 19 ; + } +#Soil moisture parameter in canopy conductance +'rcsol' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + } +#Humidity parameter in canopy conductance +'rcq' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } +#Column-integrated soil water +'cisoilw' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + } +#Heat flux +'hflux' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Volumetric soil moisture +'vsw' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + } +#Volumetric wilting point +'vwiltm' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + } +#Upper layer soil temperature +'uplst' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + } +#Upper layer soil moisture +'uplsm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + } +#Lower layer soil moisture +'lowlsm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 3 ; + } +#Bottom layer soil temperature +'botlst' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Liquid volumetric soil moisture (non-frozen) +'soill' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + } +#Number of soil layers in root zone +'rlyrs' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + } +#Transpiration stress-onset (soil moisture) +'smref' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 7 ; + } +#Direct evaporation cease (soil moisture) +'smdry' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 8 ; + } +#Soil porosity +'poros' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 9 ; + } +#Liquid volumetric soil moisture (non-frozen) +'liqvsm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 10 ; + } +#Volumetric transpiration stress-onset (soil moisture) +'voltso' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 11 ; + } +#Transpiration stress-onset (soil moisture) +'transo' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 12 ; + } +#Volumetric direct evaporation cease (soil moisture) +'voldec' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 13 ; + } +#Direct evaporation cease (soil moisture) +'direc' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 14 ; + } +#Soil porosity +'soilp' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 15 ; + } +#Volumetric saturation of soil moisture +'vsosm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + } +#Saturation of soil moisture +'satosm' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + } +#Estimated precipitation +'estp' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + } +#Instantaneous rain rate +'irrate' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Cloud top height +'ctoph' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 2 ; + } +#Cloud top height quality indicator +'ctophqi' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 3 ; + } +#Estimated u component of wind +'estu' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 4 ; + } +#Estimated v component of wind +'estv' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 5 ; + } +#Number of pixels used +'npixu' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 6 ; + } +#Solar zenith angle +'solza' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 7 ; + } +#Relative azimuth angle +'raza' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 8 ; + } +#Reflectance in 0.6 micron channel +'rfl06' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 9 ; + } +#Reflectance in 0.8 micron channel +'rfl08' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 10 ; + } +#Reflectance in 1.6 micron channel +'rfl16' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + } +#Reflectance in 3.9 micron channel +'rfl39' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 12 ; + } +#Atmospheric divergence +'atmdiv' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 13 ; + } +#Direction of wind waves +'wvdir' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Primary wave direction +'dirpw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + } +#Primary wave mean period +'perpw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + } +#Secondary wave mean period +'persw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + } +#Current direction +'dirc' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + } +#Current speed +'spc' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Ice cover +'icec' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + } +#Ice temperature +'ist' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Deviation of sea level from mean +'dslm' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + } +#Seconds prior to initial reference time (defined in Section 1) +'tsec' = { + discipline = 10 ; + parameterCategory = 191 ; + parameterNumber = 0 ; + } +#Albedo +'al' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + } +#Pressure tendency +'ptend' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + } +#ICAO Standard Atmosphere reference height +'icaht' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 3 ; + } +#Geometrical height +'h' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + } +#Standard deviation of height +'hstdv' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 7 ; + } +#Virtual potential temperature +'vptmp' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + } +#Maximum temperature +'tmax' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Minimum temperature +'tmin' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Dew point temperature +'dpt' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Lapse rate +'lapr' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Visibility +'vis' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + } +#Radar spectra (1) +'rdsp1' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 6 ; + } +#Radar spectra (2) +'rdsp2' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 7 ; + } +#Radar spectra (3) +'rdsp3' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 8 ; + } +#Parcel lifted index (to 500 hPa) +'pli' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 0 ; + } +#Temperature anomaly +'ta' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Pressure anomaly +'presa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 8 ; + } +#Geopotential height anomaly +'gpa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 9 ; + } +#Wave spectra (1) +'wvsp1' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Wave spectra (2) +'wvsp2' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Wave spectra (3) +'wvsp3' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Montgomery stream Function +'mntsf' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } +#Sigma coordinate vertical velocity +'sgcvv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 7 ; + } +#Absolute vorticity +'absv' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + } +#Absolute divergence +'absd' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 11 ; + } +#Vertical u-component shear +'vucsh' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 15 ; + } +#Vertical v-component shear +'vvcsh' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 16 ; + } +#U-component of current +'ucurr' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 2 ; + } +#V-component of current +'vcurr' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 3 ; + } +#Precipitable water +'pwat' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 3 ; + } +#Saturation deficit +'satd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 5 ; + } +#Precipitation rate +'prate' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 7 ; + } +#Thunderstorm probability +'tstm' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 2 ; + } +#Convective precipitation (water) +'acpcp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 10 ; + } +#Mixed layer depth +'mld' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 3 ; + } +#Transient thermocline depth +'tthdp' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 2 ; + } +#Main thermocline depth +'mthd' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 0 ; + } +#Main thermocline anomaly +'mtha' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 1 ; + } +#Best lifted index (to 500 hPa) +'bli' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 1 ; + } +#Water temperature +'wtmp' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Soil moisture content +'ssw' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Salinity +'s' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 3 ; + } +#Density +'den' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 10 ; + } +#Ice thickness +'icetk' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + } +#Direction of ice drift +'diced' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#Speed of ice drift +'siced' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#U-component of ice drift +'uice' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 4 ; + } +#V-component of ice drift +'vice' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + } +#Ice growth rate +'iceg' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } +#Ice divergence +'iced' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 7 ; + } +#Snow melt +'snom' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + } +#Significant height of wind waves +'shww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'mpww' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Direction of swell waves +'swdir' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Significant height of swell waves +'swell' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Mean period of swell waves +'swper' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Secondary wave direction +'dirsw' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 12 ; + } +#Net short-wave radiation flux (surface) +'nswrs' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 0 ; + } +#Global radiation flux +'grad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 3 ; + } +#Radiance (with respect to wave number) +'lwrad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 5 ; + } +#Radiance (with respect to wave length) +'swrad' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 6 ; + } +#Wind mixing energy +'wmixe' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 19 ; + } +#10 metre Wind gust of at least 15 m/s +'10fgg15' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + productDefinitionTemplateNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + probabilityType = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaleFactorOfLowerLimit = 0 ; + scaledValueOfLowerLimit = 15 ; + } +#10 metre Wind gust of at least 20 m/s +'10fgg20' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + probabilityType = 3 ; + scaleFactorOfLowerLimit = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfLowerLimit = 25 ; + typeOfFirstFixedSurface = 103 ; + productDefinitionTemplateNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#Convective inhibition +'cin' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfSecondFixedSurface = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Orography +'orog' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Moisture +'sm' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } +#Soil Temperature +'st' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Snow depth water equivalent +'sd' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow Fall water equivalent +'sf' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total Cloud Cover +'tcc' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Field capacity +'cap' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 12 ; + typeOfFirstFixedSurface = 106 ; + typeOfSecondFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 2 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = 1 ; + } +#Wilting point +'wilt' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = 1 ; + scaledValueOfFirstFixedSurface = 0 ; + scaledValueOfSecondFixedSurface = 2 ; + } +#Total Precipitation +'tp' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; +} diff --git a/definitions/grib2/tables/0.0.table b/definitions/grib2/tables/0.0.table new file mode 100644 index 000000000..fd2056350 --- /dev/null +++ b/definitions/grib2/tables/0.0.table @@ -0,0 +1,10 @@ +#Code Table 0.0: Discipline of processed data in the GRIB message, number of GRIB Master Table +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/0.0.table b/definitions/grib2/tables/0/0.0.table new file mode 100644 index 000000000..fd2056350 --- /dev/null +++ b/definitions/grib2/tables/0/0.0.table @@ -0,0 +1,10 @@ +#Code Table 0.0: Discipline of processed data in the GRIB message, number of GRIB Master Table +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/1.0.table b/definitions/grib2/tables/0/1.0.table new file mode 100644 index 000000000..a34f44ee1 --- /dev/null +++ b/definitions/grib2/tables/0/1.0.table @@ -0,0 +1,7 @@ +# Code Table 1.0: GRIB Master Tables Version Number +0 0 Experimental +1 1 Initial operational version number +2 2 Previous operational version number +3 3 Current operational version number implemented on 2 November 2005 +# 4-254 Future operational version numbers +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/0/1.1.table b/definitions/grib2/tables/0/1.1.table new file mode 100644 index 000000000..6c5a60361 --- /dev/null +++ b/definitions/grib2/tables/0/1.1.table @@ -0,0 +1,5 @@ +# Code Table 1.1 GRIB Local Tables Version Number +0 0 Local tables not used +# . Only table entries and templates from the current Master table are valid. +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/0/1.2.table b/definitions/grib2/tables/0/1.2.table new file mode 100644 index 000000000..eb8755209 --- /dev/null +++ b/definitions/grib2/tables/0/1.2.table @@ -0,0 +1,8 @@ +# CODE TABLE 1.2, Significance of Reference Time +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +#4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/1.3.table b/definitions/grib2/tables/0/1.3.table new file mode 100644 index 000000000..d4ed48c63 --- /dev/null +++ b/definitions/grib2/tables/0/1.3.table @@ -0,0 +1,10 @@ +# CODE TABLE 1.3, Production status of data +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 TIGGE Operational products +5 5 TIGGE test products +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/1.4.table b/definitions/grib2/tables/0/1.4.table new file mode 100644 index 000000000..ac21f5c4c --- /dev/null +++ b/definitions/grib2/tables/0/1.4.table @@ -0,0 +1,13 @@ +# CODE TABLE 1.4, Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event Probability +# 8-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/3.0.table b/definitions/grib2/tables/0/3.0.table new file mode 100644 index 000000000..6030a5132 --- /dev/null +++ b/definitions/grib2/tables/0/3.0.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.0, Source of Grid Definition +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition Defined by originating centre +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/0/3.1.table b/definitions/grib2/tables/0/3.1.table new file mode 100644 index 000000000..6101b648c --- /dev/null +++ b/definitions/grib2/tables/0/3.1.table @@ -0,0 +1,43 @@ +# CODE TABLE 3.1, Grid Definition Template Number +0 0 Latitude/longitude. Also called equidistant cylindrical, or Plate Carree +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +# 4-9 Reserved +10 10 Mercator +# 11-19 Reserved +20 20 Polar stereographic can be south or north +# 21-29 Reserved +30 30 Lambert Conformal can be secant or tangent, conical or bipolar +31 31 Albers equal-area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +# 101-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid, with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovm�ller diagram grid, with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/0/3.10.table b/definitions/grib2/tables/0/3.10.table new file mode 100644 index 000000000..ae5baf9d5 --- /dev/null +++ b/definitions/grib2/tables/0/3.10.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.10, Scanning mode for one diamond +1 0 Points scan in +i direction, i.e. from pole to equator +1 1 Points scan in -i direction, i.e. from equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction is consecutive diff --git a/definitions/grib2/tables/0/3.11.table b/definitions/grib2/tables/0/3.11.table new file mode 100644 index 000000000..9a84d4a95 --- /dev/null +++ b/definitions/grib2/tables/0/3.11.table @@ -0,0 +1,5 @@ +# CODE TABLE 3.11, Interpretation of list of numbers defining number of points +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +255 255 Missing diff --git a/definitions/grib2/tables/0/3.15.table b/definitions/grib2/tables/0/3.15.table new file mode 100644 index 000000000..bb431e14f --- /dev/null +++ b/definitions/grib2/tables/0/3.15.table @@ -0,0 +1,25 @@ +# CODE TABLE 3.15, Physical meaning of vertical coordinate +# 0-19 Reserved +20 20 Temperature K +# 21-99 Reserved +100 100 Pressure Pa +101 101 Pressure deviation from mean sea level Pa +102 102 Altitude above mean sea level m +103 103 Height above ground (see Note 1) m +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface m +107 pt Potential temperature (theta) K +108 108 Pressure deviation from ground to level Pa +109 pv Potential vorticity K m-2 kg-1 s-1 +110 110 Geometrical height m +111 111 Eta coordinate (see Note 2) +112 112 Geopotential height gpm +# 113-159 Reserved +160 160 Depth below sea level m +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Negative values associated to this coordinate will indicate depth below ground surface. If values are all below surface, use of entry 106 is recommended, with positive coordinate values instead. +# (2) The Eta vertical coordinate system involves normalizing the pressure at some point on a specific level by the mean sea level pressure at that point. diff --git a/definitions/grib2/tables/0/3.2.table b/definitions/grib2/tables/0/3.2.table new file mode 100644 index 000000000..d037ee120 --- /dev/null +++ b/definitions/grib2/tables/0/3.2.table @@ -0,0 +1,11 @@ +# CODE TABLE 3.2, Shape of the Earth +0 0 Earth assumed spherical with radius = 6,367,470.0 m +1 1 Earth assumed spherical with radius specified by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6,378,160.0 m, minor axis = 6,356,775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6,378,137.0 m, minor axis = 6,356,752.314 m, f = 1/298.257222101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6,371,229.0 m +# 7-191 Reserved +# 192- 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/3.20.table b/definitions/grib2/tables/0/3.20.table new file mode 100644 index 000000000..cfa35ae38 --- /dev/null +++ b/definitions/grib2/tables/0/3.20.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.20, Type of horizontal line +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/3.21.table b/definitions/grib2/tables/0/3.21.table new file mode 100644 index 000000000..c2fd94586 --- /dev/null +++ b/definitions/grib2/tables/0/3.21.table @@ -0,0 +1,8 @@ +# CODE TABLE 3.21, Vertical dimension coordinate values definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +# 2-10 Reserved +11 11 Geometric coordinates +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/3.3.table b/definitions/grib2/tables/0/3.3.table new file mode 100644 index 000000000..84cbb8bcc --- /dev/null +++ b/definitions/grib2/tables/0/3.3.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.3, Resolution and Component Flags +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates respectively diff --git a/definitions/grib2/tables/0/3.4.table b/definitions/grib2/tables/0/3.4.table new file mode 100644 index 000000000..51d0664b2 --- /dev/null +++ b/definitions/grib2/tables/0/3.4.table @@ -0,0 +1,9 @@ +# FLAG TABLE 3.4, Scanning Mode +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction diff --git a/definitions/grib2/tables/0/3.5.table b/definitions/grib2/tables/0/3.5.table new file mode 100644 index 000000000..117b26be3 --- /dev/null +++ b/definitions/grib2/tables/0/3.5.table @@ -0,0 +1,5 @@ +# FLAG TABLE 3.5, Projection Centre +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bi-polar and symmetric diff --git a/definitions/grib2/tables/0/3.6.table b/definitions/grib2/tables/0/3.6.table new file mode 100644 index 000000000..41dd97e4a --- /dev/null +++ b/definitions/grib2/tables/0/3.6.table @@ -0,0 +1,2 @@ +# CODE TABLE 3.6, Spectral data representation type +1 1 The Associated Legendre Functions of the first kind are defined by: diff --git a/definitions/grib2/tables/0/3.7.table b/definitions/grib2/tables/0/3.7.table new file mode 100644 index 000000000..3aaf30bf9 --- /dev/null +++ b/definitions/grib2/tables/0/3.7.table @@ -0,0 +1,11 @@ +# Code Table 3.7: Spectral data representation mode +0 0 Reserved +1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) +# 2-254 Reserved +255 255 Missing +# Note: +# +#(1) Values of N(m) for common truncations cases: +# Triangular M = J = K, N(m) = J +# Rhomboidal K = J + M, N(m) = J+m +# Trapezoidal K = J, K > M, N(m) = J diff --git a/definitions/grib2/tables/0/3.8.table b/definitions/grib2/tables/0/3.8.table new file mode 100644 index 000000000..0d9b7d001 --- /dev/null +++ b/definitions/grib2/tables/0/3.8.table @@ -0,0 +1,8 @@ +# Code table 3.8: Grid point position +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/3.9.table b/definitions/grib2/tables/0/3.9.table new file mode 100644 index 000000000..800c08259 --- /dev/null +++ b/definitions/grib2/tables/0/3.9.table @@ -0,0 +1,3 @@ +# FLAG TABLE 3.9, Numbering order of diamonds as seen from the corresponding pole +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e., counter-clockwise) orientation diff --git a/definitions/grib2/tables/0/4.0.table b/definitions/grib2/tables/0/4.0.table new file mode 100644 index 000000000..c22d7d3d2 --- /dev/null +++ b/definitions/grib2/tables/0/4.0.table @@ -0,0 +1,38 @@ +# CODE TABLE 4.0, Product Definition Template Number +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecast based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based in all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +20 20 Radar product +30 30 Satellite product +31 31 Satellite product +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +46 46 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of atmospheric aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +254 254 CCITT IA5 character string +1000 1000 Cross section of analysis and forecast at a point in time +1001 1001 Cross section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed +1100 1100 Hovm�ller-type grid with no averaging or other statistical processing +1101 1101 Hovm�ller-type grid with averaging or other statistical processing +65335 65535 Missing diff --git a/definitions/grib2/tables/0/4.1.0.table b/definitions/grib2/tables/0/4.1.0.table new file mode 100644 index 000000000..33d1c3984 --- /dev/null +++ b/definitions/grib2/tables/0/4.1.0.table @@ -0,0 +1,30 @@ +#Discipline 0: Meteorological products +#Category Description +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave Radiation +5 5 Long-wave Radiation +6 6 Cloud +7 7 Thermodynamic Stability indices +8 8 Kinematic Stability indices +9 9 Temperature Probabilities +10 10 Moisture Probabilities +11 11 Momentum Probabilities +12 12 Mass Probabilities +13 13 Aerosols +14 14 Trace gases (e.g., ozone, CO2) +15 15 Radar +16 16 Forecast Radar Imagery +17 17 Electro-dynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical or physical constituents +# 20-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/0/4.1.1.table b/definitions/grib2/tables/0/4.1.1.table new file mode 100644 index 000000000..ebb7d9ea0 --- /dev/null +++ b/definitions/grib2/tables/0/4.1.1.table @@ -0,0 +1,9 @@ +#Discipline 1: Hydrological products +#Category Description +0 0 Hydrology basic products +1 1 Hydrology probabilities +#2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/0/4.1.10.table b/definitions/grib2/tables/0/4.1.10.table new file mode 100644 index 000000000..45b08caaa --- /dev/null +++ b/definitions/grib2/tables/0/4.1.10.table @@ -0,0 +1,12 @@ +#Discipline 10: Oceanographic Products +#Category Description +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface Properties +4 4 Sub-surface Properties +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/0/4.1.2.table b/definitions/grib2/tables/0/4.1.2.table new file mode 100644 index 000000000..f7f2ea2ba --- /dev/null +++ b/definitions/grib2/tables/0/4.1.2.table @@ -0,0 +1,11 @@ +#Discipline 2: Land Surface Products +#Category Description +0 0 Vegetation/Biomass +1 1 Agri-/aquacultural Special Products +2 2 Transportation-related Products +3 3 Soil Products +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/0/4.1.3.table b/definitions/grib2/tables/0/4.1.3.table new file mode 100644 index 000000000..f7578e163 --- /dev/null +++ b/definitions/grib2/tables/0/4.1.3.table @@ -0,0 +1,9 @@ +#Discipline 3: Space Products +#Category Description +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/0/4.1.table b/definitions/grib2/tables/0/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/0/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/0/4.10.table b/definitions/grib2/tables/0/4.10.table new file mode 100644 index 000000000..9cf447b69 --- /dev/null +++ b/definitions/grib2/tables/0/4.10.table @@ -0,0 +1,14 @@ +# CODE TABLE 4.10, Type of statistical processing + +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (Value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (Temporal variance) +8 8 Difference (Value at the start of time range minus value at the end) +9 ratio Ratio +# 192 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/0/4.11.table b/definitions/grib2/tables/0/4.11.table new file mode 100644 index 000000000..68901aac4 --- /dev/null +++ b/definitions/grib2/tables/0/4.11.table @@ -0,0 +1,9 @@ +# CODE TABLE 4.11, Type of time intervals + +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.12.table b/definitions/grib2/tables/0/4.12.table new file mode 100644 index 000000000..86b6177be --- /dev/null +++ b/definitions/grib2/tables/0/4.12.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.12, Operating Mode + +0 0 Maintenance Mode +1 1 Clear air +2 2 Precipitation +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.13.table b/definitions/grib2/tables/0/4.13.table new file mode 100644 index 000000000..ddd7537d0 --- /dev/null +++ b/definitions/grib2/tables/0/4.13.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.13, Quality Control Indicator + +0 0 No quality control applied +1 1 Quality control applied +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.14.table b/definitions/grib2/tables/0/4.14.table new file mode 100644 index 000000000..69984d720 --- /dev/null +++ b/definitions/grib2/tables/0/4.14.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.14, Clutter Filter Indicator + +0 0 No clutter filter used +1 1 Clutter filter used +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.15.table b/definitions/grib2/tables/0/4.15.table new file mode 100644 index 000000000..49b0b2d26 --- /dev/null +++ b/definitions/grib2/tables/0/4.15.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.15, Type of auxiliary information + +0 0 Confidence level ('grib2/4.151.table') +1 1 Delta time (seconds) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.151.table b/definitions/grib2/tables/0/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/0/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.2.0.0.table b/definitions/grib2/tables/0/4.2.0.0.table new file mode 100644 index 000000000..0386b8cd2 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.0.table @@ -0,0 +1,23 @@ +# Product Discipline 0: Meteorological products, Parameter Category 0: Temperature +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew point temperature (K) +7 7 Dew point depression (or deficit) (K) +8 8 Lapse rate (K m-1) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin Temperature (K) +#17-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.1.table b/definitions/grib2/tables/0/4.2.0.1.table new file mode 100644 index 000000000..6f7ce78fa --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.1.table @@ -0,0 +1,66 @@ +# Product Discipline 0: Meteorological products, Parameter Category 1: Moisture +0 0 Specific humidity (kg kg-1) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg kg-1) +3 3 Precipitable water (kg m-2) +4 4 Vapor pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age (day) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type (code table (4.201) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg kg-1) +22 22 Cloud mixing ratio (kg kg-1) +23 23 Ice water mixing ratio (kg kg-1) +24 24 Rain mixing ratio (kg kg-1) +25 25 Snow mixing ratio (kg kg-1) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category code table (4.202) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg kg-1) +33 33 Categorical rain (Code table 4.222) +34 34 Categorical freezing rain (Code table 4.222) +35 35 Categorical ice pellets (Code table 4.222) +36 36 Categorical snow (Code table 4.222) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +51 51 Total column water (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m s-1) +58 58 Convective snowfall rate (m s-1) +59 59 Large scale snowfall rate (m s-1) +60 60 Snow depth water equivalent (kg m-2) +69 69 Specific cloud liquid water content (kg kg-1) +70 70 Specific cloud ice water content (kg kg-1) +71 71 Specific rain water content (kg kg-1) +72 72 Specific snow water content (kg kg-1) +#47-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.13.table b/definitions/grib2/tables/0/4.2.0.13.table new file mode 100644 index 000000000..8fc3425af --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.13.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 13: Aerosols +0 0 Aerosol type (Code table 4.205) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.14.table b/definitions/grib2/tables/0/4.2.0.14.table new file mode 100644 index 000000000..309c40d47 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.14.table @@ -0,0 +1,7 @@ +# Product Discipline 0: Meteorological products, Parameter Category 14: Trace Gases +0 0 Total ozone (Dobson) +1 1 Ozone mixing ratio (kg kg-1) +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.15.table b/definitions/grib2/tables/0/4.2.0.15.table new file mode 100644 index 000000000..bb419178b --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.15.table @@ -0,0 +1,14 @@ +# Product Discipline 0 - Meteorological products, Parameter Category 15: Radar +0 0 Base spectrum width (m s-1) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m s-1) +3 3 Vertically-integrated liquid (kg m-1) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.18.table b/definitions/grib2/tables/0/4.2.0.18.table new file mode 100644 index 000000000..5c0fd6e5d --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.18.table @@ -0,0 +1,14 @@ +# Product Discipline 0: Meteorological products, Parameter Category 18: Nuclear/radiology +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of Iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of Iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.19.table b/definitions/grib2/tables/0/4.2.0.19.table new file mode 100644 index 000000000..369c3f657 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.19.table @@ -0,0 +1,24 @@ +# Product Discipline 0: Meteorological products, Parameter Category 19: Physical atmospheric properties +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 mixed layer depth (m) +4 4 Volcanic ash (Code table 4.206) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing (Code table 4.207) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence (Code table 4.208) +11 11 Turbulent kinetic energy (J kg-1) +12 12 Planetary boundary layer regime (Code table 4.209) +13 13 Contrail intensity (Code table 4.210) +14 14 Contrail engine type (Code table 4.211) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +# 19-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.190.table b/definitions/grib2/tables/0/4.2.0.190.table new file mode 100644 index 000000000..b1f47bc02 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.190.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 190: CCITT IA5 string +0 0 Arbitrary text string (CCITTIA5) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.191.table b/definitions/grib2/tables/0/4.2.0.191.table new file mode 100644 index 000000000..affb98f42 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.191.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 191: Miscellaneous +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.2.table b/definitions/grib2/tables/0/4.2.0.2.table new file mode 100644 index 000000000..f45206bff --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.2.table @@ -0,0 +1,35 @@ +# Product Discipline 0: Meteorological products, Parameter Category 2: Momentum +0 0 Wind direction [from which blowing] (deg true) +1 1 Wind speed (m s-1) +2 2 u-component of wind (m s-1) +3 3 v-component of wind (m s-1) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (s-1) +8 8 Vertical velocity [pressure] (Pa s-1) +9 9 Vertical velocity [geometric] (m s-1) +10 10 Absolute vorticity (s-1) +11 11 Absolute divergence (s-1) +12 12 Relative vorticity (s-1) +13 13 Relative divergence (s-1) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (s-1) +16 16 Vertical v-component shear (s-1) +17 17 Momentum flux, u component (N m-2) +18 18 Momentum flux, v component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m s-1) +22 22 Wind speed [gust] (m s-1) +23 23 u-component of wind (gust) (m s-1) +24 24 v-component of wind (gust) (m s-1) +25 25 Vertical speed shear (s-1) +26 26 Horizontal momentum flux (N m-2) +27 27 U-component storm motion (m s-1) +28 28 V-component storm motion (m s-1) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m s-1) +# 31-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.2.0.20.table b/definitions/grib2/tables/0/4.2.0.20.table new file mode 100644 index 000000000..4d762c38e --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.20.table @@ -0,0 +1,26 @@ +0 0 Mass density (concentration) kg m-3 +1 1 Column-integrated mass density (see Note1) kg m-2 +2 2 Mass mixing ratio (mass fraction in air) kg kg-1 +3 3 Atmosphere emission mass flux kg m-2 s-1 +4 4 Atmosphere net production mass flux kg m-2 s-1 +5 5 Atmosphere net production and emission mass flux kg m-2 s-1 +6 6 Surface dry deposition mass flux kg m-2 s-1 +7 7 Surface wet deposition mass flux kg m-2 s-1 +8 8 Atmosphere re-emission mass flux kg m-2 s-1 +#9-49 9-49 Reserved +50 50 Amount in atmosphere mol +51 51 Concentration in air mol m-3 +52 52 Volume mixing ratio (fraction in air) mol mol-1 +53 53 Chemical gross production rate of concentration mol m-3 s-1 +54 54 Chemical gross destruction rate of concentration mol m-3 s-1 +55 55 Surface flux mol m-2 s-1 +56 56 Changes of amount in atmosphere (see Note 1) mol s-1 +57 57 Total yearly average burden of the atmosphere mol +58 58 Total yearly averaged atmospheric loss (see Note 1) mol s-1 +#59-99 59-99 Reserved +100 100 Surface area density (aerosol) m-1 +101 101 Atmosphere optical thickness m +#102-191 102-191 Reserved +#192-254 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.3.table b/definitions/grib2/tables/0/4.2.0.3.table new file mode 100644 index 000000000..5c7e8151d --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.3.table @@ -0,0 +1,25 @@ +# Product Discipline 0: Meteorological products, Parameter Category 3: Mass + 0 0 Pressure (Pa) + 1 1 Pressure reduced to MSL (Pa) + 2 2 Pressure tendency (Pa s-1) + 3 3 ICAO Standard Atmosphere Reference Height (m) + 4 4 Geopotential (m2 s-2) + 5 5 Geopotential height (gpm) + 6 6 Geometric height (m) + 7 7 Standard deviation of height (m) + 8 8 Pressure anomaly (Pa) + 9 9 Geopotential height anomaly (gpm) + 10 10 Density (kg m-3) + 11 11 Altimeter setting (Pa) + 12 12 Thickness (m) + 13 13 Pressure altitude (m) + 14 14 Density altitude (m) + 15 15 5-wave geopotential height (gpm) + 16 16 Zonal flux of gravity wave stress (N m-2) + 17 17 Meridional flux of gravity wave stress (N m-2) + 18 18 Planetary boundary layer height (m) + 19 19 5-wave geopotential height anomaly (gpm) +# 20-191 Reserved +# 192-254 Reserved for local use + 255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.4.table b/definitions/grib2/tables/0/4.2.0.4.table new file mode 100644 index 000000000..815c184a2 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.4.table @@ -0,0 +1,14 @@ +# Product Discipline 0: Meteorological products, Parameter Category 4: Short-wave Radiation +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +9 8 Upward short-wave radiation flux (W m-2) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.5.table b/definitions/grib2/tables/0/4.2.0.5.table new file mode 100644 index 000000000..1b57fa301 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.5.table @@ -0,0 +1,11 @@ +# Product Discipline 0: Meteorological products, Parameter Category 5: Long-wave Radiation +0 0 Net long wave radiation flux (surface) (W m-2) +1 1 Net long wave radiation flux (top of atmosphere) (W m-2) +2 2 Long wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long wave radiation flux (W m-2) +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.6.table b/definitions/grib2/tables/0/4.2.0.6.table new file mode 100644 index 000000000..05cf72f57 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.6.table @@ -0,0 +1,30 @@ +# Product Discipline 0: Meteorological products, Parameter Category 6: Cloud +0 0 Cloud Ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type (Code table 4.203) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage (Code table 4.204) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J kg-1) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg kg-1) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg kg-1) +24 24 Sunshine (Numeric) +# 23-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.0.7.table b/definitions/grib2/tables/0/4.2.0.7.table new file mode 100644 index 000000000..78374fde5 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.0.7.table @@ -0,0 +1,18 @@ +# Product Discipline 0: Meteorological products, Parameter Category 7: Thermodynamic Stability Indices +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J kg-1) +7 7 Convective inhibition (J kg-1) +8 8 Storm relative helicity (J kg-1) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +#13-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.1.0.table b/definitions/grib2/tables/0/4.2.1.0.table new file mode 100644 index 000000000..97efaa8cc --- /dev/null +++ b/definitions/grib2/tables/0/4.2.1.0.table @@ -0,0 +1,16 @@ +# Product Discipline 1: Hydrologic products, Parameter Category 0: Hydrology basic products +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely sensed snow cover (Code table 4.215) +3 3 Elevation of snow covered terrain (Code table 4.216) +4 4 Snow water equivalent percent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Remotely sensed snow cover is expressed as a field of dimensionless, thematic values. The currently accepted values are for no-snow/no-cloud, 50, for clouds, 100, and for snow, 250. See code table 4.215. +# (2) A data field representing snow coverage by elevation portrays at which elevations there is a snow pack. The elevation values typically range from 0 to 90 in 100 m increments. A value of 253 is used to represent a no-snow/no-cloud data point. A value of 254 is used to represent a data point at which snow elevation could not be estimated because of clouds obscuring the remote sensor (when using aircraft or satellite measurements). +# (3) Snow water equivalent percent of normal is stored in percent of normal units. For example, a value of 110 indicates 110 percent of the normal snow water equivalent for a given depth of snow. + diff --git a/definitions/grib2/tables/0/4.2.1.1.table b/definitions/grib2/tables/0/4.2.1.1.table new file mode 100644 index 000000000..b7342ef2f --- /dev/null +++ b/definitions/grib2/tables/0/4.2.1.1.table @@ -0,0 +1,8 @@ +# Product Discipline 1: Hydrologic products, Parameter Category 1: Hydrology probabilities +0 0 Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) +1 1 Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.10.0.table b/definitions/grib2/tables/0/4.2.10.0.table new file mode 100644 index 000000000..479e26d51 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.10.0.table @@ -0,0 +1,20 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 0: Waves +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (Degree true) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (Degree true) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (Degree true) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (Degree true) +13 13 Secondary wave mean period (s) +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/0/4.2.10.1.table b/definitions/grib2/tables/0/4.2.10.1.table new file mode 100644 index 000000000..df18f31dd --- /dev/null +++ b/definitions/grib2/tables/0/4.2.10.1.table @@ -0,0 +1,8 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 1: Currents +0 0 Current direction (Degree true) +1 1 Current speed (m s-1) +2 2 u-component of current (m s-1) +3 3 v-component of current (m s-1) +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.2.10.2.table b/definitions/grib2/tables/0/4.2.10.2.table new file mode 100644 index 000000000..cb73da46c --- /dev/null +++ b/definitions/grib2/tables/0/4.2.10.2.table @@ -0,0 +1,12 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 2: Ice +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (Degree true) +3 3 Speed of ice drift (m s-1) +4 4 u-component of ice drift (m s-1) +5 5 v-component of ice drift (m s-1) +6 6 Ice growth rate (m s-1) +7 7 Ice divergence (s-1) +# 8-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.2.10.3.table b/definitions/grib2/tables/0/4.2.10.3.table new file mode 100644 index 000000000..a14ae22e3 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.10.3.table @@ -0,0 +1,6 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 3: Surface Properties +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.2.10.4.table b/definitions/grib2/tables/0/4.2.10.4.table new file mode 100644 index 000000000..a24c3c8c4 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.10.4.table @@ -0,0 +1,9 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 4: Sub-surface Properties +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg kg-1) +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.2.0.table b/definitions/grib2/tables/0/4.2.2.0.table new file mode 100644 index 000000000..fdc8ce0ef --- /dev/null +++ b/definitions/grib2/tables/0/4.2.2.0.table @@ -0,0 +1,29 @@ +# Product Discipline 2: Land surface products, Parameter Category 0: Vegetation/Biomass +0 0 Land cover (0=land, 1=sea) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg -2 s-1) +7 7 Model terrain height (m) +8 8 Land use (Code table 4.212) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadars mixing length scale (m) +15 15 Canopy conductance (m s-1) +16 16 Minimal stomatal resistance (s m-1) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy conductance (Proportion) +20 20 Soil moisture parameter in canopy conductance (Proportion) +21 21 Humidity parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +26 26 Wilting point (kg m-3) +# 23-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.2.3.table b/definitions/grib2/tables/0/4.2.2.3.table new file mode 100644 index 000000000..d6376fecb --- /dev/null +++ b/definitions/grib2/tables/0/4.2.2.3.table @@ -0,0 +1,16 @@ +# Product Discipline 2: Land surface products, Parameter Category 3: Soil Products +0 0 Soil type (Code table 4.213) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +# 11-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.3.0.table b/definitions/grib2/tables/0/4.2.3.0.table new file mode 100644 index 000000000..944566388 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.3.0.table @@ -0,0 +1,14 @@ +# Product discipline 3: Space products, Parameter Category 0: Image format products +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.3.1.table b/definitions/grib2/tables/0/4.2.3.1.table new file mode 100644 index 000000000..60d6e8420 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.3.1.table @@ -0,0 +1,11 @@ +# Product Discipline 3: Space products, Parameter Category 1: Quantitative products +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m s-1) +5 5 Estimated v component of wind (m s-1) +# 6-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/0/4.2.table b/definitions/grib2/tables/0/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/0/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/0/4.201.table b/definitions/grib2/tables/0/4.201.table new file mode 100644 index 000000000..7445c9c20 --- /dev/null +++ b/definitions/grib2/tables/0/4.201.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.201, Precipitation Type + +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.202.table b/definitions/grib2/tables/0/4.202.table new file mode 100644 index 000000000..69dbe3a5d --- /dev/null +++ b/definitions/grib2/tables/0/4.202.table @@ -0,0 +1,66 @@ +# CODE TABLE 4.202, Precipitable water category + +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.203.table b/definitions/grib2/tables/0/4.203.table new file mode 100644 index 000000000..d2ad10b07 --- /dev/null +++ b/definitions/grib2/tables/0/4.203.table @@ -0,0 +1,88 @@ +# CODE TABLE 4.203, Cloud type + +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground based fog beneath the lowest layer +12 12 Stratus - ground based fog beneath the lowest layer +13 13 Stratocumulus - ground based fog beneath the lowest layer +14 14 Cumulus - ground based fog beneath the lowest layer +15 15 Altostratus - ground based fog beneath the lowest layer +16 16 Nimbostratus - ground based fog beneath the lowest layer +17 17 Altocumulus - ground based fog beneath the lowest layer +18 18 Cirrostratus - ground based fog beneath the lowest layer +19 19 Cirrocumulus - ground based fog beneath the lowest layer +20 20 Cirrus - ground based fog beneath the lowest layer +191 191 Unknown +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.204.table b/definitions/grib2/tables/0/4.204.table new file mode 100644 index 000000000..23b60cf77 --- /dev/null +++ b/definitions/grib2/tables/0/4.204.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.204, Thunderstorm coverage + +0 0 None +1 1 Isolated (1% - 2%) +2 2 Few (3% - 15%) +3 3 Scattered (16% - 45%) +4 4 Numerous (> 45%) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.205.table b/definitions/grib2/tables/0/4.205.table new file mode 100644 index 000000000..98c7b48ec --- /dev/null +++ b/definitions/grib2/tables/0/4.205.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.205, Aerosol type + +0 0 Aerosol not present +1 1 Aerosol present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.206.table b/definitions/grib2/tables/0/4.206.table new file mode 100644 index 000000000..b1ef2e787 --- /dev/null +++ b/definitions/grib2/tables/0/4.206.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.206, Volcanic ash + +0 0 Not present +1 1 Present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.207.table b/definitions/grib2/tables/0/4.207.table new file mode 100644 index 000000000..13fc7b54b --- /dev/null +++ b/definitions/grib2/tables/0/4.207.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.207, Icing + +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.208.table b/definitions/grib2/tables/0/4.208.table new file mode 100644 index 000000000..15b514a07 --- /dev/null +++ b/definitions/grib2/tables/0/4.208.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.208, Turbulence + +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.209.table b/definitions/grib2/tables/0/4.209.table new file mode 100644 index 000000000..b4cca1d73 --- /dev/null +++ b/definitions/grib2/tables/0/4.209.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.209, Planetary boundary layer regime + +1 1 Stable +2 2 Mechanically driven turbulence +3 3 Forced convection +4 4 Free convection +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.210.table b/definitions/grib2/tables/0/4.210.table new file mode 100644 index 000000000..d05e07721 --- /dev/null +++ b/definitions/grib2/tables/0/4.210.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.210, Contrail intensity + +0 0 Contrail not present +1 1 Contrail present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.211.table b/definitions/grib2/tables/0/4.211.table new file mode 100644 index 000000000..604b2e643 --- /dev/null +++ b/definitions/grib2/tables/0/4.211.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.211, Contrail engine type + +0 0 Low bypass +1 1 High bypass +2 2 Non bypass +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.212.table b/definitions/grib2/tables/0/4.212.table new file mode 100644 index 000000000..7393238e7 --- /dev/null +++ b/definitions/grib2/tables/0/4.212.table @@ -0,0 +1,79 @@ +# CODE TABLE 4.212, Land Use + +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.213.table b/definitions/grib2/tables/0/4.213.table new file mode 100644 index 000000000..cc4bdfc1f --- /dev/null +++ b/definitions/grib2/tables/0/4.213.table @@ -0,0 +1,77 @@ +# CODE TABLE 4.213, Soil type + +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.215.table b/definitions/grib2/tables/0/4.215.table new file mode 100644 index 000000000..7e1442962 --- /dev/null +++ b/definitions/grib2/tables/0/4.215.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.215, Remotely Sensed Snow Coverage + +50 50 No-snow/no-cloud +100 100 Clouds +250 250 Snow +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.216.table b/definitions/grib2/tables/0/4.216.table new file mode 100644 index 000000000..dbe26b0e5 --- /dev/null +++ b/definitions/grib2/tables/0/4.216.table @@ -0,0 +1,95 @@ +# CODE TABLE 4.216, Elevation of Snow Covered Terrain + +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/0/4.217.table b/definitions/grib2/tables/0/4.217.table new file mode 100644 index 000000000..475ab686d --- /dev/null +++ b/definitions/grib2/tables/0/4.217.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.217, Cloud mask type + +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.220.table b/definitions/grib2/tables/0/4.220.table new file mode 100644 index 000000000..9fddcd49f --- /dev/null +++ b/definitions/grib2/tables/0/4.220.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.220, Horizontal dimension processed + +0 0 Latitude +1 1 Longitude +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.221.table b/definitions/grib2/tables/0/4.221.table new file mode 100644 index 000000000..2291eab60 --- /dev/null +++ b/definitions/grib2/tables/0/4.221.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.221, Treatment of missing data + +0 0 Not included +1 1 Extrapolated +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.230.table b/definitions/grib2/tables/0/4.230.table new file mode 100644 index 000000000..22563e883 --- /dev/null +++ b/definitions/grib2/tables/0/4.230.table @@ -0,0 +1,117 @@ +#Code figure Code figure Meaning +0 0 Ozone +1 1 Water vapour +2 2 Methane +3 3 Carbon dioxide +4 4 Carbon monoxide +5 5 Nitrogen dioxide +6 6 Nitrous oxide +7 7 Formaldehyde +8 8 Sulphur dioxide +9 9 Ammonia +10 10 Ammonium +11 11 Nitrogen monoxide +12 12 Atomic oxygen +13 13 Nitrate radical +14 14 Hydroperoxyl radical +15 15 Dinitrogen pentoxide +16 16 Nitrous acid +17 17 Nitric acid +18 18 Peroxynitric acid +19 19 Hydrogen peroxide +20 20 Molecular hydrogen +21 21 Atomic nitrogen +22 22 Sulphate +23 23 Radon +24 24 Elemental mercury +25 25 Divalent mercury +26 26 Atomic chlorine +27 27 Chlorine monoxide +28 28 Dichlorine peroxide +29 29 Hypochlorous acid +30 30 Chlorine nitrate +31 31 Chlorine dioxide +32 32 Atomic bromine +33 33 Bromine monoxide +34 34 Bromine chloride +35 35 Hydrogen bromide +36 36 Hypobromous acid +37 37 Bromine nitrate +10000 10000 Hydroxyl radical +10001 10001 Methyl peroxy radical +10002 10002 Methyl hydroperoxide +10004 10004 Methanol +10005 10005 Formic acid +10006 10006 Hydrogen Cyanide +10007 10007 Aceto nitrile +10008 10008 Ethane +10009 10009 Ethene (= Ethylene) +10010 10010 Ethyne (= Acetylene) +10011 10011 Ethanol +10012 10012 Acetic acid +10013 10013 Peroxyacetyl nitrate +10014 10014 Propane +10015 10015 Propene +10016 10016 Butanes +10017 10017 Isoprene +10018 10018 Alpha pinene +10019 10019 Beta pinene +10020 10020 Limonene +10021 10021 Benzene +10022 10022 Toluene +10023 10023 Xylene +#10024-10499 10024-10499 reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides,…) +10500 10500 Dimethyl sulphide +#10501-20000 10501-20000 Reserved +20001 20001 Hydrogen chloride +20002 20002 CFC-11 +20003 20003 CFC-12 +20004 20004 CFC-113 +20005 20005 CFC-113a +20006 20006 CFC-114 +20007 20007 CFC-115 +20008 20008 HCFC-22 +20009 20009 HCFC-141b +20010 20010 HCFC-142b +20011 20011 Halon-1202 +20012 20012 Halon-1211 +20013 20013 Halon-1301 +20014 20014 Halon-2402 +20015 20015 Methyl chloride (HCC-40) +20016 20016 Carbon tetrachloride (HCC-10) +20017 20017 HCC-140a +20018 20018 Methyl bromide (HBC-40B1) +20019 20019 Hexachlorocyclohexane (HCH) +20020 20020 Alpha hexachlorocyclohexane +20021 20021 Hexachlorobiphenyl (PCB-153) +60000 60000 HOx radical (OH+HO2) +60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2) +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen +60005 60005 Total inorganic chlorine +60006 60006 Total inorganic bromine +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped Alkanes +60010 60010 Lumped Alkenes +60011 60011 Lumped Aromatic Compounds +60012 60012 Lumped Terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon +60016 60016 Lumped oxygenated hydrocarbons +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +65535 65535 Missing diff --git a/definitions/grib2/tables/0/4.3.table b/definitions/grib2/tables/0/4.3.table new file mode 100644 index 000000000..84a72352b --- /dev/null +++ b/definitions/grib2/tables/0/4.3.table @@ -0,0 +1,13 @@ +# CODE TABLE 4.3, Type of generating process +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.4.table b/definitions/grib2/tables/0/4.4.table new file mode 100644 index 000000000..61aa20c5f --- /dev/null +++ b/definitions/grib2/tables/0/4.4.table @@ -0,0 +1,16 @@ +# CODE TABLE 4.4, Indicator of unit of time range +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.5.table b/definitions/grib2/tables/0/4.5.table new file mode 100644 index 000000000..5fe94d4d5 --- /dev/null +++ b/definitions/grib2/tables/0/4.5.table @@ -0,0 +1,33 @@ +#Code table 4.5: Fixed surface types and units +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0o C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +# 10-19 Reserved +20 20 Isothermal level (K) +#21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 105 Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 ml Eta level +# 112-116 Reserved +117 117 Mixed layer depth (m) +# 118-159 Reserved +160 160 Depth below sea level (m) +#161-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.6.table b/definitions/grib2/tables/0/4.6.table new file mode 100644 index 000000000..dc6d94c20 --- /dev/null +++ b/definitions/grib2/tables/0/4.6.table @@ -0,0 +1,8 @@ +# CODE TABLE 4.6, Type of ensemble forecast + +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.7.table b/definitions/grib2/tables/0/4.7.table new file mode 100644 index 000000000..dadf59b46 --- /dev/null +++ b/definitions/grib2/tables/0/4.7.table @@ -0,0 +1,73 @@ +# CODE TABLE 4.7, Derived forecast + +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members (see Note) +6 6 Unweighted mean of the cluster members +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.8.table b/definitions/grib2/tables/0/4.8.table new file mode 100644 index 000000000..9d3a0e8a7 --- /dev/null +++ b/definitions/grib2/tables/0/4.8.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.8, Clustering Method + +0 0 Anomaly correlation +1 1 Root mean square +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.9.table b/definitions/grib2/tables/0/4.9.table new file mode 100644 index 000000000..895f30171 --- /dev/null +++ b/definitions/grib2/tables/0/4.9.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.9, Probability Type + +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/4.91.table b/definitions/grib2/tables/0/4.91.table new file mode 100644 index 000000000..a960f56b0 --- /dev/null +++ b/definitions/grib2/tables/0/4.91.table @@ -0,0 +1,78 @@ +# CODE TABLE 4.91 Category Type + +0 0 Below lower limit +1 1 Above upper limit +2 2 Between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Above lower limit +4 4 Below upper limit +5 5 Lower or equal lower limit +6 6 Greater or equal upper limit +7 7 Between lower and upper limits. The range includes lower limit and upper limit +8 8 Greater or equal lower limit +9 9 Lower or equal upper limit +10 10 Between lower and upper limits. The range includes the upper limit but not the lower limit +11 11 Equal to first limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/0/5.0.table b/definitions/grib2/tables/0/5.0.table new file mode 100644 index 000000000..0cf3752cb --- /dev/null +++ b/definitions/grib2/tables/0/5.0.table @@ -0,0 +1,16 @@ +# CODE TABLE 5.0, Data Representation Template Number +0 0 Grid point data - simple packing +1 1 Matrix value - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - ieee packing +6 6 Grid point data - simple packing with pre-processing +40 40 JPEG2000 Packing +41 41 PNG pacling +50 50 Spectral data -simple packing +51 51 Spherical harmonics data - complex packing +61 61 Grid point data - simple packing with logarithm pre-processing +# 192-254 Reserved for local use +255 255 Missing +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling diff --git a/definitions/grib2/tables/0/5.1.table b/definitions/grib2/tables/0/5.1.table new file mode 100644 index 000000000..d7ca4bedc --- /dev/null +++ b/definitions/grib2/tables/0/5.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.1, Type of original field values +0 0 Floating point +1 1 Integer +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/5.2.table b/definitions/grib2/tables/0/5.2.table new file mode 100644 index 000000000..a048d712e --- /dev/null +++ b/definitions/grib2/tables/0/5.2.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.2, Matrix coordinate value function definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +11 11 Geometric coordinates +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/5.3.table b/definitions/grib2/tables/0/5.3.table new file mode 100644 index 000000000..4a673ef85 --- /dev/null +++ b/definitions/grib2/tables/0/5.3.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.3, Matrix coordinate parameter +1 1 Direction Degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/5.4.table b/definitions/grib2/tables/0/5.4.table new file mode 100644 index 000000000..1fd37966f --- /dev/null +++ b/definitions/grib2/tables/0/5.4.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.4, Group Splitting Method +0 0 Row by row splitting +1 1 General group splitting +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/5.40.table b/definitions/grib2/tables/0/5.40.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/0/5.40.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/0/5.40000.table b/definitions/grib2/tables/0/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/0/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/0/5.5.table b/definitions/grib2/tables/0/5.5.table new file mode 100644 index 000000000..d1caac9e8 --- /dev/null +++ b/definitions/grib2/tables/0/5.5.table @@ -0,0 +1,7 @@ +# CODE TABLE 5.5, Missing Value Management for Complex Packing + +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/5.6.table b/definitions/grib2/tables/0/5.6.table new file mode 100644 index 000000000..4aec3314e --- /dev/null +++ b/definitions/grib2/tables/0/5.6.table @@ -0,0 +1,68 @@ +# CODE TABLE 5.6, Order of Spatial Differencing + +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/0/5.7.table b/definitions/grib2/tables/0/5.7.table new file mode 100644 index 000000000..35b23b94d --- /dev/null +++ b/definitions/grib2/tables/0/5.7.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.7, Precision of floating-point numbers + +1 1 IEEE 32-bit (I=4 in Section 7) +2 2 IEEE 64-bit (I=8 in Section 7) +3 3 IEEE 128-bit (I=16 in Section 7) +255 255 Missing diff --git a/definitions/grib2/tables/0/5.8.table b/definitions/grib2/tables/0/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/0/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/0/5.9.table b/definitions/grib2/tables/0/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/0/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/0/6.0.table b/definitions/grib2/tables/0/6.0.table new file mode 100644 index 000000000..6a8c74b48 --- /dev/null +++ b/definitions/grib2/tables/0/6.0.table @@ -0,0 +1,7 @@ +# CODE TABLE 6.0, Bit Map Indicator + +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 2 253 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same "GRIB" message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/0/stepType.table b/definitions/grib2/tables/0/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/0/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/1.0.table b/definitions/grib2/tables/1.0.table new file mode 100644 index 000000000..96edbecaa --- /dev/null +++ b/definitions/grib2/tables/1.0.table @@ -0,0 +1,15 @@ +# Code table 1.0 -GRIB master tables version number +0 0 Experimental +1 1 Version implemented on 7 November 2001 +2 2 Version implemented on 4 November 2003 +3 3 Version implemented on 2 November 2005 +4 4 Version implemented on 7 November 2007 +5 5 Version implemented on 4 November 2009 +6 6 Version implemented on 15 September 2010 +7 7 Version implemented on 4 May 2011 +8 8 Version implemented on 2 November 2011 +9 9 Version implemented on 2 May 2012 +10 10 Version implemented on 7 November 2012 +11 11 Pre-operational to be implemented by next amendment +# 12-254 Future versions +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/1/0.0.table b/definitions/grib2/tables/1/0.0.table new file mode 100644 index 000000000..fd2056350 --- /dev/null +++ b/definitions/grib2/tables/1/0.0.table @@ -0,0 +1,10 @@ +#Code Table 0.0: Discipline of processed data in the GRIB message, number of GRIB Master Table +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/1.0.table b/definitions/grib2/tables/1/1.0.table new file mode 100644 index 000000000..a34f44ee1 --- /dev/null +++ b/definitions/grib2/tables/1/1.0.table @@ -0,0 +1,7 @@ +# Code Table 1.0: GRIB Master Tables Version Number +0 0 Experimental +1 1 Initial operational version number +2 2 Previous operational version number +3 3 Current operational version number implemented on 2 November 2005 +# 4-254 Future operational version numbers +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/1/1.1.table b/definitions/grib2/tables/1/1.1.table new file mode 100644 index 000000000..6c5a60361 --- /dev/null +++ b/definitions/grib2/tables/1/1.1.table @@ -0,0 +1,5 @@ +# Code Table 1.1 GRIB Local Tables Version Number +0 0 Local tables not used +# . Only table entries and templates from the current Master table are valid. +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/1/1.2.table b/definitions/grib2/tables/1/1.2.table new file mode 100644 index 000000000..eb8755209 --- /dev/null +++ b/definitions/grib2/tables/1/1.2.table @@ -0,0 +1,8 @@ +# CODE TABLE 1.2, Significance of Reference Time +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +#4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/1.3.table b/definitions/grib2/tables/1/1.3.table new file mode 100644 index 000000000..d4ed48c63 --- /dev/null +++ b/definitions/grib2/tables/1/1.3.table @@ -0,0 +1,10 @@ +# CODE TABLE 1.3, Production status of data +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 TIGGE Operational products +5 5 TIGGE test products +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/1.4.table b/definitions/grib2/tables/1/1.4.table new file mode 100644 index 000000000..ac21f5c4c --- /dev/null +++ b/definitions/grib2/tables/1/1.4.table @@ -0,0 +1,13 @@ +# CODE TABLE 1.4, Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event Probability +# 8-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/3.0.table b/definitions/grib2/tables/1/3.0.table new file mode 100644 index 000000000..6030a5132 --- /dev/null +++ b/definitions/grib2/tables/1/3.0.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.0, Source of Grid Definition +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition Defined by originating centre +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/1/3.1.table b/definitions/grib2/tables/1/3.1.table new file mode 100644 index 000000000..6101b648c --- /dev/null +++ b/definitions/grib2/tables/1/3.1.table @@ -0,0 +1,43 @@ +# CODE TABLE 3.1, Grid Definition Template Number +0 0 Latitude/longitude. Also called equidistant cylindrical, or Plate Carree +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +# 4-9 Reserved +10 10 Mercator +# 11-19 Reserved +20 20 Polar stereographic can be south or north +# 21-29 Reserved +30 30 Lambert Conformal can be secant or tangent, conical or bipolar +31 31 Albers equal-area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +# 101-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid, with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovm�ller diagram grid, with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/1/3.10.table b/definitions/grib2/tables/1/3.10.table new file mode 100644 index 000000000..ae5baf9d5 --- /dev/null +++ b/definitions/grib2/tables/1/3.10.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.10, Scanning mode for one diamond +1 0 Points scan in +i direction, i.e. from pole to equator +1 1 Points scan in -i direction, i.e. from equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction is consecutive diff --git a/definitions/grib2/tables/1/3.11.table b/definitions/grib2/tables/1/3.11.table new file mode 100644 index 000000000..9a84d4a95 --- /dev/null +++ b/definitions/grib2/tables/1/3.11.table @@ -0,0 +1,5 @@ +# CODE TABLE 3.11, Interpretation of list of numbers defining number of points +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +255 255 Missing diff --git a/definitions/grib2/tables/1/3.15.table b/definitions/grib2/tables/1/3.15.table new file mode 100644 index 000000000..bb431e14f --- /dev/null +++ b/definitions/grib2/tables/1/3.15.table @@ -0,0 +1,25 @@ +# CODE TABLE 3.15, Physical meaning of vertical coordinate +# 0-19 Reserved +20 20 Temperature K +# 21-99 Reserved +100 100 Pressure Pa +101 101 Pressure deviation from mean sea level Pa +102 102 Altitude above mean sea level m +103 103 Height above ground (see Note 1) m +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface m +107 pt Potential temperature (theta) K +108 108 Pressure deviation from ground to level Pa +109 pv Potential vorticity K m-2 kg-1 s-1 +110 110 Geometrical height m +111 111 Eta coordinate (see Note 2) +112 112 Geopotential height gpm +# 113-159 Reserved +160 160 Depth below sea level m +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Negative values associated to this coordinate will indicate depth below ground surface. If values are all below surface, use of entry 106 is recommended, with positive coordinate values instead. +# (2) The Eta vertical coordinate system involves normalizing the pressure at some point on a specific level by the mean sea level pressure at that point. diff --git a/definitions/grib2/tables/1/3.2.table b/definitions/grib2/tables/1/3.2.table new file mode 100644 index 000000000..d037ee120 --- /dev/null +++ b/definitions/grib2/tables/1/3.2.table @@ -0,0 +1,11 @@ +# CODE TABLE 3.2, Shape of the Earth +0 0 Earth assumed spherical with radius = 6,367,470.0 m +1 1 Earth assumed spherical with radius specified by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6,378,160.0 m, minor axis = 6,356,775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6,378,137.0 m, minor axis = 6,356,752.314 m, f = 1/298.257222101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6,371,229.0 m +# 7-191 Reserved +# 192- 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/3.20.table b/definitions/grib2/tables/1/3.20.table new file mode 100644 index 000000000..cfa35ae38 --- /dev/null +++ b/definitions/grib2/tables/1/3.20.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.20, Type of horizontal line +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/3.21.table b/definitions/grib2/tables/1/3.21.table new file mode 100644 index 000000000..c2fd94586 --- /dev/null +++ b/definitions/grib2/tables/1/3.21.table @@ -0,0 +1,8 @@ +# CODE TABLE 3.21, Vertical dimension coordinate values definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +# 2-10 Reserved +11 11 Geometric coordinates +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/3.3.table b/definitions/grib2/tables/1/3.3.table new file mode 100644 index 000000000..84cbb8bcc --- /dev/null +++ b/definitions/grib2/tables/1/3.3.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.3, Resolution and Component Flags +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates respectively diff --git a/definitions/grib2/tables/1/3.4.table b/definitions/grib2/tables/1/3.4.table new file mode 100644 index 000000000..51d0664b2 --- /dev/null +++ b/definitions/grib2/tables/1/3.4.table @@ -0,0 +1,9 @@ +# FLAG TABLE 3.4, Scanning Mode +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction diff --git a/definitions/grib2/tables/1/3.5.table b/definitions/grib2/tables/1/3.5.table new file mode 100644 index 000000000..117b26be3 --- /dev/null +++ b/definitions/grib2/tables/1/3.5.table @@ -0,0 +1,5 @@ +# FLAG TABLE 3.5, Projection Centre +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bi-polar and symmetric diff --git a/definitions/grib2/tables/1/3.6.table b/definitions/grib2/tables/1/3.6.table new file mode 100644 index 000000000..41dd97e4a --- /dev/null +++ b/definitions/grib2/tables/1/3.6.table @@ -0,0 +1,2 @@ +# CODE TABLE 3.6, Spectral data representation type +1 1 The Associated Legendre Functions of the first kind are defined by: diff --git a/definitions/grib2/tables/1/3.7.table b/definitions/grib2/tables/1/3.7.table new file mode 100644 index 000000000..3aaf30bf9 --- /dev/null +++ b/definitions/grib2/tables/1/3.7.table @@ -0,0 +1,11 @@ +# Code Table 3.7: Spectral data representation mode +0 0 Reserved +1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) +# 2-254 Reserved +255 255 Missing +# Note: +# +#(1) Values of N(m) for common truncations cases: +# Triangular M = J = K, N(m) = J +# Rhomboidal K = J + M, N(m) = J+m +# Trapezoidal K = J, K > M, N(m) = J diff --git a/definitions/grib2/tables/1/3.8.table b/definitions/grib2/tables/1/3.8.table new file mode 100644 index 000000000..0d9b7d001 --- /dev/null +++ b/definitions/grib2/tables/1/3.8.table @@ -0,0 +1,8 @@ +# Code table 3.8: Grid point position +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/3.9.table b/definitions/grib2/tables/1/3.9.table new file mode 100644 index 000000000..800c08259 --- /dev/null +++ b/definitions/grib2/tables/1/3.9.table @@ -0,0 +1,3 @@ +# FLAG TABLE 3.9, Numbering order of diamonds as seen from the corresponding pole +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e., counter-clockwise) orientation diff --git a/definitions/grib2/tables/1/4.0.table b/definitions/grib2/tables/1/4.0.table new file mode 100644 index 000000000..c22d7d3d2 --- /dev/null +++ b/definitions/grib2/tables/1/4.0.table @@ -0,0 +1,38 @@ +# CODE TABLE 4.0, Product Definition Template Number +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecast based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based in all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +20 20 Radar product +30 30 Satellite product +31 31 Satellite product +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +46 46 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of atmospheric aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +254 254 CCITT IA5 character string +1000 1000 Cross section of analysis and forecast at a point in time +1001 1001 Cross section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed +1100 1100 Hovm�ller-type grid with no averaging or other statistical processing +1101 1101 Hovm�ller-type grid with averaging or other statistical processing +65335 65535 Missing diff --git a/definitions/grib2/tables/1/4.1.0.table b/definitions/grib2/tables/1/4.1.0.table new file mode 100644 index 000000000..33d1c3984 --- /dev/null +++ b/definitions/grib2/tables/1/4.1.0.table @@ -0,0 +1,30 @@ +#Discipline 0: Meteorological products +#Category Description +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave Radiation +5 5 Long-wave Radiation +6 6 Cloud +7 7 Thermodynamic Stability indices +8 8 Kinematic Stability indices +9 9 Temperature Probabilities +10 10 Moisture Probabilities +11 11 Momentum Probabilities +12 12 Mass Probabilities +13 13 Aerosols +14 14 Trace gases (e.g., ozone, CO2) +15 15 Radar +16 16 Forecast Radar Imagery +17 17 Electro-dynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical or physical constituents +# 20-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/1/4.1.1.table b/definitions/grib2/tables/1/4.1.1.table new file mode 100644 index 000000000..ebb7d9ea0 --- /dev/null +++ b/definitions/grib2/tables/1/4.1.1.table @@ -0,0 +1,9 @@ +#Discipline 1: Hydrological products +#Category Description +0 0 Hydrology basic products +1 1 Hydrology probabilities +#2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/1/4.1.10.table b/definitions/grib2/tables/1/4.1.10.table new file mode 100644 index 000000000..45b08caaa --- /dev/null +++ b/definitions/grib2/tables/1/4.1.10.table @@ -0,0 +1,12 @@ +#Discipline 10: Oceanographic Products +#Category Description +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface Properties +4 4 Sub-surface Properties +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/1/4.1.2.table b/definitions/grib2/tables/1/4.1.2.table new file mode 100644 index 000000000..f7f2ea2ba --- /dev/null +++ b/definitions/grib2/tables/1/4.1.2.table @@ -0,0 +1,11 @@ +#Discipline 2: Land Surface Products +#Category Description +0 0 Vegetation/Biomass +1 1 Agri-/aquacultural Special Products +2 2 Transportation-related Products +3 3 Soil Products +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/1/4.1.3.table b/definitions/grib2/tables/1/4.1.3.table new file mode 100644 index 000000000..f7578e163 --- /dev/null +++ b/definitions/grib2/tables/1/4.1.3.table @@ -0,0 +1,9 @@ +#Discipline 3: Space Products +#Category Description +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/1/4.1.table b/definitions/grib2/tables/1/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/1/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/1/4.10.table b/definitions/grib2/tables/1/4.10.table new file mode 100644 index 000000000..9cf447b69 --- /dev/null +++ b/definitions/grib2/tables/1/4.10.table @@ -0,0 +1,14 @@ +# CODE TABLE 4.10, Type of statistical processing + +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (Value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (Temporal variance) +8 8 Difference (Value at the start of time range minus value at the end) +9 ratio Ratio +# 192 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/1/4.11.table b/definitions/grib2/tables/1/4.11.table new file mode 100644 index 000000000..68901aac4 --- /dev/null +++ b/definitions/grib2/tables/1/4.11.table @@ -0,0 +1,9 @@ +# CODE TABLE 4.11, Type of time intervals + +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.12.table b/definitions/grib2/tables/1/4.12.table new file mode 100644 index 000000000..86b6177be --- /dev/null +++ b/definitions/grib2/tables/1/4.12.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.12, Operating Mode + +0 0 Maintenance Mode +1 1 Clear air +2 2 Precipitation +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.13.table b/definitions/grib2/tables/1/4.13.table new file mode 100644 index 000000000..ddd7537d0 --- /dev/null +++ b/definitions/grib2/tables/1/4.13.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.13, Quality Control Indicator + +0 0 No quality control applied +1 1 Quality control applied +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.14.table b/definitions/grib2/tables/1/4.14.table new file mode 100644 index 000000000..69984d720 --- /dev/null +++ b/definitions/grib2/tables/1/4.14.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.14, Clutter Filter Indicator + +0 0 No clutter filter used +1 1 Clutter filter used +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.15.table b/definitions/grib2/tables/1/4.15.table new file mode 100644 index 000000000..49b0b2d26 --- /dev/null +++ b/definitions/grib2/tables/1/4.15.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.15, Type of auxiliary information + +0 0 Confidence level ('grib2/4.151.table') +1 1 Delta time (seconds) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.151.table b/definitions/grib2/tables/1/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/1/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.2.0.0.table b/definitions/grib2/tables/1/4.2.0.0.table new file mode 100644 index 000000000..0386b8cd2 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.0.table @@ -0,0 +1,23 @@ +# Product Discipline 0: Meteorological products, Parameter Category 0: Temperature +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew point temperature (K) +7 7 Dew point depression (or deficit) (K) +8 8 Lapse rate (K m-1) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin Temperature (K) +#17-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.1.table b/definitions/grib2/tables/1/4.2.0.1.table new file mode 100644 index 000000000..154f2d007 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.1.table @@ -0,0 +1,62 @@ +# Product Discipline 0: Meteorological products, Parameter Category 1: Moisture +0 0 Specific humidity (kg kg-1) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg kg-1) +3 3 Precipitable water (kg m-2) +4 4 Vapor pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age (day) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type (code table (4.201) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg kg-1) +22 22 Cloud mixing ratio (kg kg-1) +23 23 Ice water mixing ratio (kg kg-1) +24 24 Rain mixing ratio (kg kg-1) +25 25 Snow mixing ratio (kg kg-1) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category code table (4.202) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg kg-1) +33 33 Categorical rain (Code table 4.222) +34 34 Categorical freezing rain (Code table 4.222) +35 35 Categorical ice pellets (Code table 4.222) +36 36 Categorical snow (Code table 4.222) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +51 51 Total column water (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m s-1) +58 58 Convective snowfall rate (m s-1) +59 59 Large scale snowfall rate (m s-1) +60 60 Snow depth water equivalent (kg m-2) +#47-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.13.table b/definitions/grib2/tables/1/4.2.0.13.table new file mode 100644 index 000000000..8fc3425af --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.13.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 13: Aerosols +0 0 Aerosol type (Code table 4.205) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.14.table b/definitions/grib2/tables/1/4.2.0.14.table new file mode 100644 index 000000000..309c40d47 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.14.table @@ -0,0 +1,7 @@ +# Product Discipline 0: Meteorological products, Parameter Category 14: Trace Gases +0 0 Total ozone (Dobson) +1 1 Ozone mixing ratio (kg kg-1) +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.15.table b/definitions/grib2/tables/1/4.2.0.15.table new file mode 100644 index 000000000..bb419178b --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.15.table @@ -0,0 +1,14 @@ +# Product Discipline 0 - Meteorological products, Parameter Category 15: Radar +0 0 Base spectrum width (m s-1) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m s-1) +3 3 Vertically-integrated liquid (kg m-1) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.18.table b/definitions/grib2/tables/1/4.2.0.18.table new file mode 100644 index 000000000..5c0fd6e5d --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.18.table @@ -0,0 +1,14 @@ +# Product Discipline 0: Meteorological products, Parameter Category 18: Nuclear/radiology +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of Iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of Iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.19.table b/definitions/grib2/tables/1/4.2.0.19.table new file mode 100644 index 000000000..369c3f657 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.19.table @@ -0,0 +1,24 @@ +# Product Discipline 0: Meteorological products, Parameter Category 19: Physical atmospheric properties +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 mixed layer depth (m) +4 4 Volcanic ash (Code table 4.206) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing (Code table 4.207) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence (Code table 4.208) +11 11 Turbulent kinetic energy (J kg-1) +12 12 Planetary boundary layer regime (Code table 4.209) +13 13 Contrail intensity (Code table 4.210) +14 14 Contrail engine type (Code table 4.211) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +# 19-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.190.table b/definitions/grib2/tables/1/4.2.0.190.table new file mode 100644 index 000000000..b1f47bc02 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.190.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 190: CCITT IA5 string +0 0 Arbitrary text string (CCITTIA5) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.191.table b/definitions/grib2/tables/1/4.2.0.191.table new file mode 100644 index 000000000..affb98f42 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.191.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 191: Miscellaneous +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.2.table b/definitions/grib2/tables/1/4.2.0.2.table new file mode 100644 index 000000000..f45206bff --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.2.table @@ -0,0 +1,35 @@ +# Product Discipline 0: Meteorological products, Parameter Category 2: Momentum +0 0 Wind direction [from which blowing] (deg true) +1 1 Wind speed (m s-1) +2 2 u-component of wind (m s-1) +3 3 v-component of wind (m s-1) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (s-1) +8 8 Vertical velocity [pressure] (Pa s-1) +9 9 Vertical velocity [geometric] (m s-1) +10 10 Absolute vorticity (s-1) +11 11 Absolute divergence (s-1) +12 12 Relative vorticity (s-1) +13 13 Relative divergence (s-1) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (s-1) +16 16 Vertical v-component shear (s-1) +17 17 Momentum flux, u component (N m-2) +18 18 Momentum flux, v component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m s-1) +22 22 Wind speed [gust] (m s-1) +23 23 u-component of wind (gust) (m s-1) +24 24 v-component of wind (gust) (m s-1) +25 25 Vertical speed shear (s-1) +26 26 Horizontal momentum flux (N m-2) +27 27 U-component storm motion (m s-1) +28 28 V-component storm motion (m s-1) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m s-1) +# 31-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.2.0.20.table b/definitions/grib2/tables/1/4.2.0.20.table new file mode 100644 index 000000000..4e7f45db4 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.20.table @@ -0,0 +1,13 @@ +0 0 Mass density (concentration) kg.m-3 +1 1 Total column (integrated mass density) kg.m-2 +2 2 Volume mixing ratio (mole fraction in air) mole.mole-1 +3 3 Mass mixing ratio (mass fraction in air) kg.kg-1 +4 4 Surface dry deposition mass flux kg.m-2.s-1 +5 5 Surface wet deposition mass flux kg.m-2.s-1 +6 6 Atmosphere emission mass flux kg.m-2.s-1 +7 7 Chemical gross production rate of mole concentration mole.m-3.s-1 +8 8 Chemical gross destruction rate of mole concentration mole.m-3.s-1 +9 9 Surface dry deposition mass flux into stomata kg.m-2.s-1 +#10-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.2.0.3.table b/definitions/grib2/tables/1/4.2.0.3.table new file mode 100644 index 000000000..5c7e8151d --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.3.table @@ -0,0 +1,25 @@ +# Product Discipline 0: Meteorological products, Parameter Category 3: Mass + 0 0 Pressure (Pa) + 1 1 Pressure reduced to MSL (Pa) + 2 2 Pressure tendency (Pa s-1) + 3 3 ICAO Standard Atmosphere Reference Height (m) + 4 4 Geopotential (m2 s-2) + 5 5 Geopotential height (gpm) + 6 6 Geometric height (m) + 7 7 Standard deviation of height (m) + 8 8 Pressure anomaly (Pa) + 9 9 Geopotential height anomaly (gpm) + 10 10 Density (kg m-3) + 11 11 Altimeter setting (Pa) + 12 12 Thickness (m) + 13 13 Pressure altitude (m) + 14 14 Density altitude (m) + 15 15 5-wave geopotential height (gpm) + 16 16 Zonal flux of gravity wave stress (N m-2) + 17 17 Meridional flux of gravity wave stress (N m-2) + 18 18 Planetary boundary layer height (m) + 19 19 5-wave geopotential height anomaly (gpm) +# 20-191 Reserved +# 192-254 Reserved for local use + 255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.4.table b/definitions/grib2/tables/1/4.2.0.4.table new file mode 100644 index 000000000..815c184a2 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.4.table @@ -0,0 +1,14 @@ +# Product Discipline 0: Meteorological products, Parameter Category 4: Short-wave Radiation +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +9 8 Upward short-wave radiation flux (W m-2) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.5.table b/definitions/grib2/tables/1/4.2.0.5.table new file mode 100644 index 000000000..1b57fa301 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.5.table @@ -0,0 +1,11 @@ +# Product Discipline 0: Meteorological products, Parameter Category 5: Long-wave Radiation +0 0 Net long wave radiation flux (surface) (W m-2) +1 1 Net long wave radiation flux (top of atmosphere) (W m-2) +2 2 Long wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long wave radiation flux (W m-2) +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.6.table b/definitions/grib2/tables/1/4.2.0.6.table new file mode 100644 index 000000000..05cf72f57 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.6.table @@ -0,0 +1,30 @@ +# Product Discipline 0: Meteorological products, Parameter Category 6: Cloud +0 0 Cloud Ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type (Code table 4.203) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage (Code table 4.204) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J kg-1) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg kg-1) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg kg-1) +24 24 Sunshine (Numeric) +# 23-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.0.7.table b/definitions/grib2/tables/1/4.2.0.7.table new file mode 100644 index 000000000..78374fde5 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.0.7.table @@ -0,0 +1,18 @@ +# Product Discipline 0: Meteorological products, Parameter Category 7: Thermodynamic Stability Indices +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J kg-1) +7 7 Convective inhibition (J kg-1) +8 8 Storm relative helicity (J kg-1) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +#13-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.1.0.table b/definitions/grib2/tables/1/4.2.1.0.table new file mode 100644 index 000000000..97efaa8cc --- /dev/null +++ b/definitions/grib2/tables/1/4.2.1.0.table @@ -0,0 +1,16 @@ +# Product Discipline 1: Hydrologic products, Parameter Category 0: Hydrology basic products +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely sensed snow cover (Code table 4.215) +3 3 Elevation of snow covered terrain (Code table 4.216) +4 4 Snow water equivalent percent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Remotely sensed snow cover is expressed as a field of dimensionless, thematic values. The currently accepted values are for no-snow/no-cloud, 50, for clouds, 100, and for snow, 250. See code table 4.215. +# (2) A data field representing snow coverage by elevation portrays at which elevations there is a snow pack. The elevation values typically range from 0 to 90 in 100 m increments. A value of 253 is used to represent a no-snow/no-cloud data point. A value of 254 is used to represent a data point at which snow elevation could not be estimated because of clouds obscuring the remote sensor (when using aircraft or satellite measurements). +# (3) Snow water equivalent percent of normal is stored in percent of normal units. For example, a value of 110 indicates 110 percent of the normal snow water equivalent for a given depth of snow. + diff --git a/definitions/grib2/tables/1/4.2.1.1.table b/definitions/grib2/tables/1/4.2.1.1.table new file mode 100644 index 000000000..b7342ef2f --- /dev/null +++ b/definitions/grib2/tables/1/4.2.1.1.table @@ -0,0 +1,8 @@ +# Product Discipline 1: Hydrologic products, Parameter Category 1: Hydrology probabilities +0 0 Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) +1 1 Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.10.0.table b/definitions/grib2/tables/1/4.2.10.0.table new file mode 100644 index 000000000..479e26d51 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.10.0.table @@ -0,0 +1,20 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 0: Waves +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (Degree true) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (Degree true) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (Degree true) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (Degree true) +13 13 Secondary wave mean period (s) +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/1/4.2.10.1.table b/definitions/grib2/tables/1/4.2.10.1.table new file mode 100644 index 000000000..df18f31dd --- /dev/null +++ b/definitions/grib2/tables/1/4.2.10.1.table @@ -0,0 +1,8 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 1: Currents +0 0 Current direction (Degree true) +1 1 Current speed (m s-1) +2 2 u-component of current (m s-1) +3 3 v-component of current (m s-1) +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.2.10.2.table b/definitions/grib2/tables/1/4.2.10.2.table new file mode 100644 index 000000000..cb73da46c --- /dev/null +++ b/definitions/grib2/tables/1/4.2.10.2.table @@ -0,0 +1,12 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 2: Ice +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (Degree true) +3 3 Speed of ice drift (m s-1) +4 4 u-component of ice drift (m s-1) +5 5 v-component of ice drift (m s-1) +6 6 Ice growth rate (m s-1) +7 7 Ice divergence (s-1) +# 8-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.2.10.3.table b/definitions/grib2/tables/1/4.2.10.3.table new file mode 100644 index 000000000..a14ae22e3 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.10.3.table @@ -0,0 +1,6 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 3: Surface Properties +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.2.10.4.table b/definitions/grib2/tables/1/4.2.10.4.table new file mode 100644 index 000000000..a24c3c8c4 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.10.4.table @@ -0,0 +1,9 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 4: Sub-surface Properties +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg kg-1) +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.2.0.table b/definitions/grib2/tables/1/4.2.2.0.table new file mode 100644 index 000000000..fdc8ce0ef --- /dev/null +++ b/definitions/grib2/tables/1/4.2.2.0.table @@ -0,0 +1,29 @@ +# Product Discipline 2: Land surface products, Parameter Category 0: Vegetation/Biomass +0 0 Land cover (0=land, 1=sea) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg -2 s-1) +7 7 Model terrain height (m) +8 8 Land use (Code table 4.212) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadars mixing length scale (m) +15 15 Canopy conductance (m s-1) +16 16 Minimal stomatal resistance (s m-1) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy conductance (Proportion) +20 20 Soil moisture parameter in canopy conductance (Proportion) +21 21 Humidity parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +26 26 Wilting point (kg m-3) +# 23-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.2.3.table b/definitions/grib2/tables/1/4.2.2.3.table new file mode 100644 index 000000000..d6376fecb --- /dev/null +++ b/definitions/grib2/tables/1/4.2.2.3.table @@ -0,0 +1,16 @@ +# Product Discipline 2: Land surface products, Parameter Category 3: Soil Products +0 0 Soil type (Code table 4.213) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +# 11-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.3.0.table b/definitions/grib2/tables/1/4.2.3.0.table new file mode 100644 index 000000000..944566388 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.3.0.table @@ -0,0 +1,14 @@ +# Product discipline 3: Space products, Parameter Category 0: Image format products +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.3.1.table b/definitions/grib2/tables/1/4.2.3.1.table new file mode 100644 index 000000000..60d6e8420 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.3.1.table @@ -0,0 +1,11 @@ +# Product Discipline 3: Space products, Parameter Category 1: Quantitative products +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m s-1) +5 5 Estimated v component of wind (m s-1) +# 6-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/1/4.2.table b/definitions/grib2/tables/1/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/1/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/1/4.201.table b/definitions/grib2/tables/1/4.201.table new file mode 100644 index 000000000..7445c9c20 --- /dev/null +++ b/definitions/grib2/tables/1/4.201.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.201, Precipitation Type + +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.202.table b/definitions/grib2/tables/1/4.202.table new file mode 100644 index 000000000..69dbe3a5d --- /dev/null +++ b/definitions/grib2/tables/1/4.202.table @@ -0,0 +1,66 @@ +# CODE TABLE 4.202, Precipitable water category + +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.203.table b/definitions/grib2/tables/1/4.203.table new file mode 100644 index 000000000..d2ad10b07 --- /dev/null +++ b/definitions/grib2/tables/1/4.203.table @@ -0,0 +1,88 @@ +# CODE TABLE 4.203, Cloud type + +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground based fog beneath the lowest layer +12 12 Stratus - ground based fog beneath the lowest layer +13 13 Stratocumulus - ground based fog beneath the lowest layer +14 14 Cumulus - ground based fog beneath the lowest layer +15 15 Altostratus - ground based fog beneath the lowest layer +16 16 Nimbostratus - ground based fog beneath the lowest layer +17 17 Altocumulus - ground based fog beneath the lowest layer +18 18 Cirrostratus - ground based fog beneath the lowest layer +19 19 Cirrocumulus - ground based fog beneath the lowest layer +20 20 Cirrus - ground based fog beneath the lowest layer +191 191 Unknown +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.204.table b/definitions/grib2/tables/1/4.204.table new file mode 100644 index 000000000..23b60cf77 --- /dev/null +++ b/definitions/grib2/tables/1/4.204.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.204, Thunderstorm coverage + +0 0 None +1 1 Isolated (1% - 2%) +2 2 Few (3% - 15%) +3 3 Scattered (16% - 45%) +4 4 Numerous (> 45%) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.205.table b/definitions/grib2/tables/1/4.205.table new file mode 100644 index 000000000..98c7b48ec --- /dev/null +++ b/definitions/grib2/tables/1/4.205.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.205, Aerosol type + +0 0 Aerosol not present +1 1 Aerosol present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.206.table b/definitions/grib2/tables/1/4.206.table new file mode 100644 index 000000000..b1ef2e787 --- /dev/null +++ b/definitions/grib2/tables/1/4.206.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.206, Volcanic ash + +0 0 Not present +1 1 Present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.207.table b/definitions/grib2/tables/1/4.207.table new file mode 100644 index 000000000..13fc7b54b --- /dev/null +++ b/definitions/grib2/tables/1/4.207.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.207, Icing + +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.208.table b/definitions/grib2/tables/1/4.208.table new file mode 100644 index 000000000..15b514a07 --- /dev/null +++ b/definitions/grib2/tables/1/4.208.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.208, Turbulence + +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.209.table b/definitions/grib2/tables/1/4.209.table new file mode 100644 index 000000000..b4cca1d73 --- /dev/null +++ b/definitions/grib2/tables/1/4.209.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.209, Planetary boundary layer regime + +1 1 Stable +2 2 Mechanically driven turbulence +3 3 Forced convection +4 4 Free convection +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.210.table b/definitions/grib2/tables/1/4.210.table new file mode 100644 index 000000000..d05e07721 --- /dev/null +++ b/definitions/grib2/tables/1/4.210.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.210, Contrail intensity + +0 0 Contrail not present +1 1 Contrail present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.211.table b/definitions/grib2/tables/1/4.211.table new file mode 100644 index 000000000..604b2e643 --- /dev/null +++ b/definitions/grib2/tables/1/4.211.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.211, Contrail engine type + +0 0 Low bypass +1 1 High bypass +2 2 Non bypass +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.212.table b/definitions/grib2/tables/1/4.212.table new file mode 100644 index 000000000..7393238e7 --- /dev/null +++ b/definitions/grib2/tables/1/4.212.table @@ -0,0 +1,79 @@ +# CODE TABLE 4.212, Land Use + +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.213.table b/definitions/grib2/tables/1/4.213.table new file mode 100644 index 000000000..cc4bdfc1f --- /dev/null +++ b/definitions/grib2/tables/1/4.213.table @@ -0,0 +1,77 @@ +# CODE TABLE 4.213, Soil type + +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.215.table b/definitions/grib2/tables/1/4.215.table new file mode 100644 index 000000000..7e1442962 --- /dev/null +++ b/definitions/grib2/tables/1/4.215.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.215, Remotely Sensed Snow Coverage + +50 50 No-snow/no-cloud +100 100 Clouds +250 250 Snow +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.216.table b/definitions/grib2/tables/1/4.216.table new file mode 100644 index 000000000..dbe26b0e5 --- /dev/null +++ b/definitions/grib2/tables/1/4.216.table @@ -0,0 +1,95 @@ +# CODE TABLE 4.216, Elevation of Snow Covered Terrain + +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/1/4.217.table b/definitions/grib2/tables/1/4.217.table new file mode 100644 index 000000000..475ab686d --- /dev/null +++ b/definitions/grib2/tables/1/4.217.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.217, Cloud mask type + +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.220.table b/definitions/grib2/tables/1/4.220.table new file mode 100644 index 000000000..9fddcd49f --- /dev/null +++ b/definitions/grib2/tables/1/4.220.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.220, Horizontal dimension processed + +0 0 Latitude +1 1 Longitude +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.221.table b/definitions/grib2/tables/1/4.221.table new file mode 100644 index 000000000..2291eab60 --- /dev/null +++ b/definitions/grib2/tables/1/4.221.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.221, Treatment of missing data + +0 0 Not included +1 1 Extrapolated +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.230.table b/definitions/grib2/tables/1/4.230.table new file mode 100644 index 000000000..23e819b65 --- /dev/null +++ b/definitions/grib2/tables/1/4.230.table @@ -0,0 +1,47 @@ +#Code figure Code figure Meaning +0 0 Air +1 1 Ozone +2 2 Water vapour +3 3 Methane +4 4 Carbon dioxide +5 5 Carbon monoxide +6 6 Nitrogen dioxide +7 7 Nitrous oxide +8 8 Nitrogen monoxide +9 9 Formaldehyde +10 10 Sulphur dioxide +11 11 Nitric acid +12 12 All nitrogen oxides (NOy) expressed as nitrogen +13 13 Peroxyacetyl nitrate +14 14 Hydroxyl radical +15 15 Ammonia +16 16 Ammonium +17 17 Radon +18 18 Dimethyl sulphide +19 19 Hexachlorocyclohexane +20 20 Alpha hexachlorocyclohexane +21 21 Elemental mercury +22 22 Divalent mercury +23 23 Hexachlorobiphenyl +24 24 NOx expressed as nitrogen +25 25 Non-methane volatile organic compounds expressed as carbon +26 26 Anthropogenic non-methane volatile organic compounds expressed as carbon +27 27 Biogenic non-methane volatile organic compounds expressed as carbon +#28-39999 28-39999 Reserved +40000 40000 Sulphate dry aerosol +40001 40001 Black carbon dry aerosol +40002 40002 Particulate organic matter dry aerosol +40003 40003 Primary particulate organic matter dry aerosol +40004 40004 Secondary particulate organic matter dry aerosol +40005 40005 Sea salt dry aerosol +40006 40006 Dust dry aerosol +40007 40007 Mercury dry aerosol +40008 40008 PM10 aerosol +40009 40009 PM2P5 aerosol +40010 40010 PM1 aerosol +40011 40011 Nitrate dry aerosol +40012 40012 Ammonium dry aerosol +40013 40013 Water in ambient aerosol +#40014-63999 40014-63999 Reserved +#64000-65534 64000-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/1/4.3.table b/definitions/grib2/tables/1/4.3.table new file mode 100644 index 000000000..84a72352b --- /dev/null +++ b/definitions/grib2/tables/1/4.3.table @@ -0,0 +1,13 @@ +# CODE TABLE 4.3, Type of generating process +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.4.table b/definitions/grib2/tables/1/4.4.table new file mode 100644 index 000000000..61aa20c5f --- /dev/null +++ b/definitions/grib2/tables/1/4.4.table @@ -0,0 +1,16 @@ +# CODE TABLE 4.4, Indicator of unit of time range +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.5.table b/definitions/grib2/tables/1/4.5.table new file mode 100644 index 000000000..89c5fb175 --- /dev/null +++ b/definitions/grib2/tables/1/4.5.table @@ -0,0 +1,33 @@ +#Code table 4.5: Fixed surface types and units +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0o C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +# 10-19 Reserved +20 20 Isothermal level (K) +#21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level +# 112-116 Reserved +117 117 Mixed layer depth (m) +# 118-159 Reserved +160 160 Depth below sea level (m) +#161-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.6.table b/definitions/grib2/tables/1/4.6.table new file mode 100644 index 000000000..dc6d94c20 --- /dev/null +++ b/definitions/grib2/tables/1/4.6.table @@ -0,0 +1,8 @@ +# CODE TABLE 4.6, Type of ensemble forecast + +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.7.table b/definitions/grib2/tables/1/4.7.table new file mode 100644 index 000000000..dadf59b46 --- /dev/null +++ b/definitions/grib2/tables/1/4.7.table @@ -0,0 +1,73 @@ +# CODE TABLE 4.7, Derived forecast + +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members (see Note) +6 6 Unweighted mean of the cluster members +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.8.table b/definitions/grib2/tables/1/4.8.table new file mode 100644 index 000000000..9d3a0e8a7 --- /dev/null +++ b/definitions/grib2/tables/1/4.8.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.8, Clustering Method + +0 0 Anomaly correlation +1 1 Root mean square +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.9.table b/definitions/grib2/tables/1/4.9.table new file mode 100644 index 000000000..895f30171 --- /dev/null +++ b/definitions/grib2/tables/1/4.9.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.9, Probability Type + +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/4.91.table b/definitions/grib2/tables/1/4.91.table new file mode 100644 index 000000000..a960f56b0 --- /dev/null +++ b/definitions/grib2/tables/1/4.91.table @@ -0,0 +1,78 @@ +# CODE TABLE 4.91 Category Type + +0 0 Below lower limit +1 1 Above upper limit +2 2 Between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Above lower limit +4 4 Below upper limit +5 5 Lower or equal lower limit +6 6 Greater or equal upper limit +7 7 Between lower and upper limits. The range includes lower limit and upper limit +8 8 Greater or equal lower limit +9 9 Lower or equal upper limit +10 10 Between lower and upper limits. The range includes the upper limit but not the lower limit +11 11 Equal to first limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/1/5.0.table b/definitions/grib2/tables/1/5.0.table new file mode 100644 index 000000000..0cf3752cb --- /dev/null +++ b/definitions/grib2/tables/1/5.0.table @@ -0,0 +1,16 @@ +# CODE TABLE 5.0, Data Representation Template Number +0 0 Grid point data - simple packing +1 1 Matrix value - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - ieee packing +6 6 Grid point data - simple packing with pre-processing +40 40 JPEG2000 Packing +41 41 PNG pacling +50 50 Spectral data -simple packing +51 51 Spherical harmonics data - complex packing +61 61 Grid point data - simple packing with logarithm pre-processing +# 192-254 Reserved for local use +255 255 Missing +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling diff --git a/definitions/grib2/tables/1/5.1.table b/definitions/grib2/tables/1/5.1.table new file mode 100644 index 000000000..d7ca4bedc --- /dev/null +++ b/definitions/grib2/tables/1/5.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.1, Type of original field values +0 0 Floating point +1 1 Integer +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/5.2.table b/definitions/grib2/tables/1/5.2.table new file mode 100644 index 000000000..a048d712e --- /dev/null +++ b/definitions/grib2/tables/1/5.2.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.2, Matrix coordinate value function definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +11 11 Geometric coordinates +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/5.3.table b/definitions/grib2/tables/1/5.3.table new file mode 100644 index 000000000..4a673ef85 --- /dev/null +++ b/definitions/grib2/tables/1/5.3.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.3, Matrix coordinate parameter +1 1 Direction Degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/5.4.table b/definitions/grib2/tables/1/5.4.table new file mode 100644 index 000000000..1fd37966f --- /dev/null +++ b/definitions/grib2/tables/1/5.4.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.4, Group Splitting Method +0 0 Row by row splitting +1 1 General group splitting +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/5.40.table b/definitions/grib2/tables/1/5.40.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/1/5.40.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/1/5.40000.table b/definitions/grib2/tables/1/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/1/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/1/5.5.table b/definitions/grib2/tables/1/5.5.table new file mode 100644 index 000000000..d1caac9e8 --- /dev/null +++ b/definitions/grib2/tables/1/5.5.table @@ -0,0 +1,7 @@ +# CODE TABLE 5.5, Missing Value Management for Complex Packing + +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/5.6.table b/definitions/grib2/tables/1/5.6.table new file mode 100644 index 000000000..4aec3314e --- /dev/null +++ b/definitions/grib2/tables/1/5.6.table @@ -0,0 +1,68 @@ +# CODE TABLE 5.6, Order of Spatial Differencing + +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/1/5.7.table b/definitions/grib2/tables/1/5.7.table new file mode 100644 index 000000000..35b23b94d --- /dev/null +++ b/definitions/grib2/tables/1/5.7.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.7, Precision of floating-point numbers + +1 1 IEEE 32-bit (I=4 in Section 7) +2 2 IEEE 64-bit (I=8 in Section 7) +3 3 IEEE 128-bit (I=16 in Section 7) +255 255 Missing diff --git a/definitions/grib2/tables/1/5.8.table b/definitions/grib2/tables/1/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/1/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/1/5.9.table b/definitions/grib2/tables/1/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/1/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/1/6.0.table b/definitions/grib2/tables/1/6.0.table new file mode 100644 index 000000000..6a8c74b48 --- /dev/null +++ b/definitions/grib2/tables/1/6.0.table @@ -0,0 +1,7 @@ +# CODE TABLE 6.0, Bit Map Indicator + +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 2 253 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same "GRIB" message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/1/stepType.table b/definitions/grib2/tables/1/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/1/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/10/0.0.table b/definitions/grib2/tables/10/0.0.table new file mode 100644 index 000000000..95a1f5187 --- /dev/null +++ b/definitions/grib2/tables/10/0.0.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/1.0.table b/definitions/grib2/tables/10/1.0.table new file mode 100644 index 000000000..cbfefa4d3 --- /dev/null +++ b/definitions/grib2/tables/10/1.0.table @@ -0,0 +1,15 @@ +# Code table 1.0 - GRIB master tables version number +0 0 Experimental +1 1 Version implemented on 7 November 2001 +2 2 Version implemented on 4 November 2003 +3 3 Version implemented on 2 November 2005 +4 4 Version implemented on 7 November 2007 +5 5 Version implemented on 4 November 2009 +6 6 Version implemented on 15 September 2010 +7 7 Version implemented on 4 May 2011 +8 8 Version implemented on 2 November 2011 +9 9 Version implemented on 2 May 2012 +10 10 Version implemented on 7 November 2012 +11 11 Pre-operational to be implemented by next amendment +# 12-254 Future versions +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/10/1.1.table b/definitions/grib2/tables/10/1.1.table new file mode 100644 index 000000000..5ab801398 --- /dev/null +++ b/definitions/grib2/tables/10/1.1.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Local tables not used. Only table entries and templates from the current master table are valid +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/10/1.2.table b/definitions/grib2/tables/10/1.2.table new file mode 100644 index 000000000..1fc872e7f --- /dev/null +++ b/definitions/grib2/tables/10/1.2.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/1.3.table b/definitions/grib2/tables/10/1.3.table new file mode 100644 index 000000000..8ce2713e2 --- /dev/null +++ b/definitions/grib2/tables/10/1.3.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 THORPEX Interactive Grand Global Ensemble (TIGGE) +5 5 THORPEX Interactive Grand Global Ensemble (TIGGE) test +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/1.4.table b/definitions/grib2/tables/10/1.4.table new file mode 100644 index 000000000..03d1af08b --- /dev/null +++ b/definitions/grib2/tables/10/1.4.table @@ -0,0 +1,13 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event probability +# 9-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/10/3.0.table b/definitions/grib2/tables/10/3.0.table new file mode 100644 index 000000000..ded50cd1c --- /dev/null +++ b/definitions/grib2/tables/10/3.0.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition (Defined by originating centre) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/10/3.1.table b/definitions/grib2/tables/10/3.1.table new file mode 100644 index 000000000..a246b9790 --- /dev/null +++ b/definitions/grib2/tables/10/3.1.table @@ -0,0 +1,47 @@ +# Code table 3.1 - Grid definition template number +0 0 Latitude/longitude (Also called equidistant cylindrical, or Plate Carree) +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +4 4 Variable resolution latitude/longitude +5 5 Variable resolution rotated latitude/longitude +# 6-9 Reserved +10 10 Mercator +12 12 Transverse Mercator +# 13-19 Reserved +20 20 Polar stereographic projection (Can be south or north) +# 21-29 Reserved +30 30 Lambert conformal (Can be secant or tangent, conical or bipolar) +31 31 Albers equal area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective or orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +101 101 General unstructured grid +# 102-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovmoller diagram grid with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/10/3.10.table b/definitions/grib2/tables/10/3.10.table new file mode 100644 index 000000000..72004d23e --- /dev/null +++ b/definitions/grib2/tables/10/3.10.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 Points scan in +i direction, i.e. from pole to Equator +1 1 Points scan in -i direction, i.e. from Equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction are consecutive +# 4-8 Reserved diff --git a/definitions/grib2/tables/10/3.11.table b/definitions/grib2/tables/10/3.11.table new file mode 100644 index 000000000..44b3809f6 --- /dev/null +++ b/definitions/grib2/tables/10/3.11.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +3 3 Numbers define the actual latitudes for each row in the grid. The list of numbers are integer values of the valid latitudes in microdegrees (scaled by 10-6) or in unit equal to the ratio of the basic angle and the subdivisions number for each row, in the same order as specified in the scanning mode flag (bit no. 2) +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/10/3.15.table b/definitions/grib2/tables/10/3.15.table new file mode 100644 index 000000000..2394a293f --- /dev/null +++ b/definitions/grib2/tables/10/3.15.table @@ -0,0 +1,23 @@ +# Code table 3.15 - Physical meaning of vertical coordinate +# 0-19 Reserved +20 20 Temperature (K) +# 21-99 Reserved +100 100 Pressure (Pa) +101 101 Pressure deviation from mean sea level (Pa) +102 102 Altitude above mean sea level (m) +103 103 Height above ground (m) +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface (m) +107 pt Potential temperature (theta) (K) +108 108 Pressure deviation from ground to level (Pa) +109 pv Potential vorticity (K m-2 kg-1 s-1) +110 110 Geometrical height (m) +111 111 Eta coordinate +112 112 Geopotential height (gpm) +113 113 Logarithmic hybrid coordinate +# 114-159 Reserved +160 160 Depth below sea level (m) +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/3.2.table b/definitions/grib2/tables/10/3.2.table new file mode 100644 index 000000000..1a3d03bbc --- /dev/null +++ b/definitions/grib2/tables/10/3.2.table @@ -0,0 +1,14 @@ +# Code table 3.2 - Shape of the Earth +0 0 Earth assumed spherical with radius = 6 367 470.0 m +1 1 Earth assumed spherical with radius specified (in m) by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6 378 160.0 m, minor axis = 6 356 775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified (in km) by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6 378 137.0 m, minor axis = 6 356 752.314 m, f = 1/298.257 222 101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6 371 229.0 m +7 7 Earth assumed oblate spheroid with major or minor axes specified (in m) by data producer +8 8 Earth model assumed spherical with radius of 6 371 200 m, but the horizontal datum of the resulting latitude/longitude field is the WGS84 reference frame +9 9 Earth represented by the OSGB 1936 Datum, using the Airy_1830 Spheroid, the Greenwich meridian as 0 longitude, the Newlyn datum as mean sea level, 0 height +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/3.20.table b/definitions/grib2/tables/10/3.20.table new file mode 100644 index 000000000..e633569ac --- /dev/null +++ b/definitions/grib2/tables/10/3.20.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/3.21.table b/definitions/grib2/tables/10/3.21.table new file mode 100644 index 000000000..88dbb9019 --- /dev/null +++ b/definitions/grib2/tables/10/3.21.table @@ -0,0 +1,8 @@ +# Code table 3.21 - Vertical dimension coordinate values definition +0 0 Explicit coordinate values set +1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 +# 2-10 Reserved +11 11 Geometric coordinates f(1) = C1, f(n) = C2 * f(n-1) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/3.3.table b/definitions/grib2/tables/10/3.3.table new file mode 100644 index 000000000..794be4ad9 --- /dev/null +++ b/definitions/grib2/tables/10/3.3.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 1-2 Reserved +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates, respectively +# 6-8 Reserved - set to zero diff --git a/definitions/grib2/tables/10/3.4.table b/definitions/grib2/tables/10/3.4.table new file mode 100644 index 000000000..63c8adaaa --- /dev/null +++ b/definitions/grib2/tables/10/3.4.table @@ -0,0 +1,10 @@ +# Flag table 3.4 - Scanning mode +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction +# 5-8 Reserved diff --git a/definitions/grib2/tables/10/3.5.table b/definitions/grib2/tables/10/3.5.table new file mode 100644 index 000000000..c57d5499d --- /dev/null +++ b/definitions/grib2/tables/10/3.5.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bipolar and symmetric diff --git a/definitions/grib2/tables/10/3.6.table b/definitions/grib2/tables/10/3.6.table new file mode 100644 index 000000000..3099e6bbf --- /dev/null +++ b/definitions/grib2/tables/10/3.6.table @@ -0,0 +1,2 @@ +# Code table 3.6 - Spectral data representation type +1 1 See separate doc or pdf file diff --git a/definitions/grib2/tables/10/3.7.table b/definitions/grib2/tables/10/3.7.table new file mode 100644 index 000000000..e2dc660dd --- /dev/null +++ b/definitions/grib2/tables/10/3.7.table @@ -0,0 +1,5 @@ +# Code table 3.7 - Spectral data representation mode +0 0 Reserved +1 1 The complex numbers Fnm. See separate doc or pdf file +# 2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/10/3.8.table b/definitions/grib2/tables/10/3.8.table new file mode 100644 index 000000000..3c46a1f95 --- /dev/null +++ b/definitions/grib2/tables/10/3.8.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/3.9.table b/definitions/grib2/tables/10/3.9.table new file mode 100644 index 000000000..d0705ea3a --- /dev/null +++ b/definitions/grib2/tables/10/3.9.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e. counter-clockwise) orientation +# 2-8 Reserved diff --git a/definitions/grib2/tables/10/4.0.table b/definitions/grib2/tables/10/4.0.table new file mode 100644 index 000000000..13855904a --- /dev/null +++ b/definitions/grib2/tables/10/4.0.table @@ -0,0 +1,54 @@ +# Code table 4.0 - Product definition template number +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically-processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +15 15 Average, accumulation, extreme values, or other statistically-processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time +# 16-19 Reserved +20 20 Radar product +# 21-29 Reserved +30 30 Satellite product (deprecated) +31 31 Satellite product +32 32 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data +# 33-39 Reserved +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation and/or extreme values or other statistically-processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for aerosol +46 46 Average, accumulation, and/or extreme values or other statistically-processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non continuous time interval for aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +# 52-90 Reserved +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +# 92-253 Reserved +254 254 CCITT IA5 character string +# 255-999 Reserved +1000 1000 Cross-section of analysis and forecast at a point in time +1001 1001 Cross-section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed over latitude or longitude +# 1003-1099 Reserved +1100 1100 Hovmoller-type grid with no averaging or other statistical processing +1101 1101 Hovmoller-type grid with averaging or other statistical processing +50001 50001 Forecasting Systems with Variable Resolution in a point in time +50011 50011 Forecasting Systems with Variable Resolution in a continous or non countinous time interval +# 1102-32767 Reserved +# 32768-65534 Reserved for local use +40033 40033 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data +40034 40034 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data +40052 40052 Partitioned parameters at a horizontal level or horizontal layer at a point in time +65535 65535 Missing diff --git a/definitions/grib2/tables/10/4.1.0.table b/definitions/grib2/tables/10/4.1.0.table new file mode 100644 index 000000000..db062c9d9 --- /dev/null +++ b/definitions/grib2/tables/10/4.1.0.table @@ -0,0 +1,27 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave radiation +5 5 Long-wave radiation +6 6 Cloud +7 7 Thermodynamic stability indices +8 8 Kinematic stability indices +9 9 Temperature probabilities +10 10 Moisture probabilities +11 11 Momentum probabilities +12 12 Mass probabilities +13 13 Aerosols +14 14 Trace gases (e.g. ozone, CO2) +15 15 Radar +16 16 Forecast radar imagery +17 17 Electrodynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical constituents +# 21-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.1.1.table b/definitions/grib2/tables/10/4.1.1.table new file mode 100644 index 000000000..d5a35de75 --- /dev/null +++ b/definitions/grib2/tables/10/4.1.1.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Hydrology basic products +1 1 Hydrology probabilities +2 2 Inland water and sediment properties +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.1.10.table b/definitions/grib2/tables/10/4.1.10.table new file mode 100644 index 000000000..e7337775e --- /dev/null +++ b/definitions/grib2/tables/10/4.1.10.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface properties +4 4 Sub-surface properties +# 5-190 Reserved +191 191 Miscellaneous +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.1.192.table b/definitions/grib2/tables/10/4.1.192.table new file mode 100644 index 000000000..c428acab0 --- /dev/null +++ b/definitions/grib2/tables/10/4.1.192.table @@ -0,0 +1,4 @@ +#Discipline 192: ECMWF local parameters +255 255 Missing + + diff --git a/definitions/grib2/tables/10/4.1.2.table b/definitions/grib2/tables/10/4.1.2.table new file mode 100644 index 000000000..c216c5620 --- /dev/null +++ b/definitions/grib2/tables/10/4.1.2.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Vegetation/biomass +1 1 Agri-/aquacultural special products +2 2 Transportation-related products +3 3 Soil products +4 4 Fire weather products +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.1.3.table b/definitions/grib2/tables/10/4.1.3.table new file mode 100644 index 000000000..fe1d8ae5a --- /dev/null +++ b/definitions/grib2/tables/10/4.1.3.table @@ -0,0 +1,8 @@ +# Code table 4.1 - Parameter category by product discipline. Product discipline 3 - Space products +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/10/4.1.table b/definitions/grib2/tables/10/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/10/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/10/4.10.table b/definitions/grib2/tables/10/4.10.table new file mode 100644 index 000000000..1a92baaf6 --- /dev/null +++ b/definitions/grib2/tables/10/4.10.table @@ -0,0 +1,16 @@ +# Code table 4.10 - Type of statistical processing +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (temporal variance) +8 8 Difference (value at the start of time range minus value at the end) +9 ratio Ratio +10 10 Standardized anomaly +11 11 Summation +# 12-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/10/4.11.table b/definitions/grib2/tables/10/4.11.table new file mode 100644 index 000000000..63c46fbaf --- /dev/null +++ b/definitions/grib2/tables/10/4.11.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.12.table b/definitions/grib2/tables/10/4.12.table new file mode 100644 index 000000000..ad38e7b3b --- /dev/null +++ b/definitions/grib2/tables/10/4.12.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Maintenance mode +1 1 Clear air +2 2 Precipitation +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.13.table b/definitions/grib2/tables/10/4.13.table new file mode 100644 index 000000000..e3c0fa8ff --- /dev/null +++ b/definitions/grib2/tables/10/4.13.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No quality control applied +1 1 Quality control applied +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.14.table b/definitions/grib2/tables/10/4.14.table new file mode 100644 index 000000000..e1ad5194f --- /dev/null +++ b/definitions/grib2/tables/10/4.14.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No clutter filter used +1 1 Clutter filter used +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.15.table b/definitions/grib2/tables/10/4.15.table new file mode 100644 index 000000000..fb2eda6e8 --- /dev/null +++ b/definitions/grib2/tables/10/4.15.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Data is calculated directly from the source grid with no interpolation +1 1 Bilinear interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +2 2 Bicubic interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +3 3 Using the value from the source grid grid-point which is nearest to the nominal grid-point +4 4 Budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +5 5 Spectral interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +6 6 Neighbor-budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.151.table b/definitions/grib2/tables/10/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/10/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.192.table b/definitions/grib2/tables/10/4.192.table new file mode 100644 index 000000000..e1fd91594 --- /dev/null +++ b/definitions/grib2/tables/10/4.192.table @@ -0,0 +1,4 @@ +1 1 first +2 2 second +3 3 third +4 4 fourth diff --git a/definitions/grib2/tables/10/4.2.0.0.table b/definitions/grib2/tables/10/4.2.0.0.table new file mode 100644 index 000000000..b2e04861b --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.0.table @@ -0,0 +1,25 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew-point temperature (K) +7 7 Dew-point depression (or deficit) (K) +8 8 Lapse rate (K/m) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew-point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin temperature (K) +18 18 Snow temperature (top of snow) (K) +19 19 Turbulent transfer coefficient for heat (Numeric) +20 20 Turbulent diffusion coefficient for heat (m2/s) +# 21-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.1.table b/definitions/grib2/tables/10/4.2.0.1.table new file mode 100644 index 000000000..fbebb792d --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.1.table @@ -0,0 +1,95 @@ +# Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 0 - Meteorological products, parameter category 1: moisture +0 0 Specific humidity (kg/kg) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg/kg) +3 3 Precipitable water (kg m-2) +4 4 Vapour pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large-scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large-scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age (d) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type ((Code table 4.201)) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg/kg) +22 22 Cloud mixing ratio (kg/kg) +23 23 Ice water mixing ratio (kg/kg) +24 24 Rain mixing ratio (kg/kg) +25 25 Snow mixing ratio (kg/kg) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category ((Code table 4.202)) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg/kg) +33 33 Categorical rain ((Code table 4.222)) +34 34 Categorical freezing rain ((Code table 4.222)) +35 35 Categorical ice pellets ((Code table 4.222)) +36 36 Categorical snow ((Code table 4.222)) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +47 47 Large scale water precipitation (non-convective) (kg m-2) +48 48 Convective water precipitation (kg m-2) +49 49 Total water precipitation (kg m-2) +50 50 Total snow precipitation (kg m-2) +51 51 Total column water (Vertically integrated total water (vapour + cloud water/ice)) (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale snowfall rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m/s) +58 58 Convective snowfall rate (m/s) +59 59 Large scale snowfall rate (m/s) +60 60 Snow depth water equivalent (kg m-2) +61 61 Snow density (kg m-3) +62 62 Snow evaporation (kg m-2) +63 63 Reserved +64 64 Total column integrated water vapour (kg m-2) +65 65 Rain precipitation rate (kg m-2 s-1) +66 66 Snow precipitation rate (kg m-2 s-1) +67 67 Freezing rain precipitation rate (kg m-2 s-1) +68 68 Ice pellets precipitation rate (kg m-2 s-1) +69 69 Total column integrated cloud water (kg m-2) +70 70 Total column integrated cloud ice (kg m-2) +71 71 Hail mixing ratio (kg/kg) +72 72 Total column integrated hail (kg m-2) +73 73 Hail precipitation rate (kg m-2 s-1) +74 74 Total column integrated graupel (kg m-2) +75 75 Graupel (snow pellets) precipitation rate (kg m-2 s-1) +76 76 Convective rain rate (kg m-2 s-1) +77 77 Large scale rain rate (kg m-2 s-1) +78 78 Total column integrated water (all components including precipitation) (kg m-2) +79 79 Evaporation rate (kg m-2 s-1) +80 80 Total condensate (kg/kg) +81 81 Total column-integrated condensate (kg m-2) +82 82 Cloud ice mixing-ratio (kg/kg) +83 83 Specific cloud liquid water content (kg/kg) +84 84 Specific cloud ice water content (kg/kg) +85 85 Specific rainwater content (kg/kg) +86 86 Specific snow water content (kg/kg) +# 87-89 Reserved +90 90 Total kinematic moisture flux (kg kg-1 m s-1) +91 91 u-component (zonal) kinematic moisture flux (kg kg-1 m s-1) +92 92 v-component (meridional) kinematic moisture flux (kg kg-1 m s-1) +# 93-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.13.table b/definitions/grib2/tables/10/4.2.0.13.table new file mode 100644 index 000000000..5396d90a5 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.13.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Aerosol type ((Code table 4.205)) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.14.table b/definitions/grib2/tables/10/4.2.0.14.table new file mode 100644 index 000000000..8de7c5532 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.14.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Total ozone (DU) +1 1 Ozone mixing ratio (kg/kg) +2 2 Total column integrated ozone (DU) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.15.table b/definitions/grib2/tables/10/4.2.0.15.table new file mode 100644 index 000000000..4fad64114 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.15.table @@ -0,0 +1,19 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Base spectrum width (m/s) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m/s) +3 3 Vertically-integrated liquid water (VIL) (kg m-2) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +9 9 Reflectivity of cloud droplets (dB) +10 10 Reflectivity of cloud ice (dB) +11 11 Reflectivity of snow (dB) +12 12 Reflectivity of rain (dB) +13 13 Reflectivity of graupel (dB) +14 14 Reflectivity of hail (dB) +# 15-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.16.table b/definitions/grib2/tables/10/4.2.0.16.table new file mode 100644 index 000000000..cf426c5e2 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.16.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Equivalent radar reflectivity factor for rain (mm6 m-3) +1 1 Equivalent radar reflectivity factor for snow (mm6 m-3) +2 2 Equivalent radar reflectivity factor for parameterized convection (mm6 m-3) +3 3 Echo top (m) +4 4 Reflectivity (dB) +5 5 Composite reflectivity (dB) +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.18.table b/definitions/grib2/tables/10/4.2.0.18.table new file mode 100644 index 000000000..18d4cb5cf --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.18.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +9 9 Reserved +10 10 Air concentration (Bq m-3) +11 11 Wet deposition (Bq m-2) +12 12 Dry deposition (Bq m-2) +13 13 Total deposition (wet + dry) (Bq m-2) +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.19.table b/definitions/grib2/tables/10/4.2.0.19.table new file mode 100644 index 000000000..e6c97e5f9 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.19.table @@ -0,0 +1,32 @@ +# Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 0 - Meteorological products, parameter category 19: physical atmospheric properties +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 Mixed layer depth (m) +4 4 Volcanic ash ((Code table 4.206)) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing ((Code table 4.207)) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence ((Code table 4.208)) +11 11 Turbulent kinetic energy (J/kg) +12 12 Planetary boundary-layer regime ((Code table 4.209)) +13 13 Contrail intensity ((Code table 4.210)) +14 14 Contrail engine type ((Code table 4.211)) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +19 19 Snow albedo (%) +20 20 Icing (%) +21 21 In-cloud turbulence (%) +22 22 Clear air turbulence (CAT) (%) +23 23 Supercooled large droplet probability (%) +24 24 Convective turbulent kinetic energy (J/kg) +25 25 Weather (Code table 4.225) +26 26 Convective outlook (Code table 4.224) +27 27 Icing scenario (Code table 4.227) +# 28-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.190.table b/definitions/grib2/tables/10/4.2.0.190.table new file mode 100644 index 000000000..7bb15c2d8 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.190.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Arbitrary text string (CCITT IA5) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.191.table b/definitions/grib2/tables/10/4.2.0.191.table new file mode 100644 index 000000000..3f0d7df5f --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.191.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Geographical latitude (deg N) +2 2 Geographical longitude (deg E) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing value diff --git a/definitions/grib2/tables/10/4.2.0.2.table b/definitions/grib2/tables/10/4.2.0.2.table new file mode 100644 index 000000000..17ff85867 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.2.table @@ -0,0 +1,40 @@ +# Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 0 - Meteorological products, parameter category 2: momentum +0 0 Wind direction (from which blowing) (degree true) (deg) +1 1 Wind speed (m/s) +2 2 u-component of wind (m/s) +3 3 v-component of wind (m/s) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (/s) +8 8 Vertical velocity (pressure) (Pa/s) +9 9 Vertical velocity (geometric) (m/s) +10 10 Absolute vorticity (/s) +11 11 Absolute divergence (/s) +12 12 Relative vorticity (/s) +13 13 Relative divergence (/s) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (/s) +16 16 Vertical v-component shear (/s) +17 17 Momentum flux, u-component (N m-2) +18 18 Momentum flux, v-component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m/s) +22 22 Wind speed (gust) (m/s) +23 23 u-component of wind (gust) (m/s) +24 24 v-component of wind (gust) (m/s) +25 25 Vertical speed shear (/s) +26 26 Horizontal momentum flux (N m-2) +27 27 u-component storm motion (m/s) +28 28 v-component storm motion (m/s) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m/s) +31 31 Turbulent diffusion coefficient for momentum (m2/s) +32 32 Eta coordinate vertical velocity (/s) +33 33 Wind fetch (m) +34 34 Normal wind component (m/s) +35 35 Tangential wind component (m/s) +# 36-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.20.table b/definitions/grib2/tables/10/4.2.0.20.table new file mode 100644 index 000000000..1f0bdcf98 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.20.table @@ -0,0 +1,42 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Mass density (concentration) (kg m-3) +1 1 Column-integrated mass density (kg m-2) +2 2 Mass mixing ratio (mass fraction in air) (kg/kg) +3 3 Atmosphere emission mass flux (kg m-2 s-1) +4 4 Atmosphere net production mass flux (kg m-2 s-1) +5 5 Atmosphere net production and emission mass flux (kg m-2 s-1) +6 6 Surface dry deposition mass flux (kg m-2 s-1) +7 7 Surface wet deposition mass flux (kg m-2 s-1) +8 8 Atmosphere re-emission mass flux (kg m-2 s-1) +9 9 Wet deposition by large-scale precipitation mass flux (kg m-2 s-1) +10 10 Wet deposition by convective precipitation mass flux (kg m-2 s-1) +11 11 Sedimentation mass flux (kg m-2 s-1) +12 12 Dry deposition mass flux (kg m-2 s-1) +13 13 Transfer from hydrophobic to hydrophilic (kg kg-1 s-1) +14 14 Transfer from SO2 (Sulphur dioxide) to SO4 (sulphate) (kg kg-1 s-1) +# 15-49 Reserved +50 50 Amount in atmosphere (mol) +51 51 Concentration in air (mol m-3) +52 52 Volume mixing ratio (fraction in air) (mol/mol) +53 53 Chemical gross production rate of concentration (mol m-3 s-1) +54 54 Chemical gross destruction rate of concentration (mol m-3 s-1) +55 55 Surface flux (mol m-2 s-1) +56 56 Changes of amount in atmosphere (mol/s) +57 57 Total yearly average burden of the atmosphere (mol) +58 58 Total yearly averaged atmospheric loss (mol/s) +59 59 Aerosol number concentration (m-3) +# 60-99 Reserved +100 100 Surface area density (aerosol) (/m) +101 101 Vertical visual range (m) +102 102 Aerosol optical thickness (Numeric) +103 103 Single scattering albedo (Numeric) +104 104 Asymmetry factor (Numeric) +105 105 Aerosol extinction coefficient (m-1) +106 106 Aerosol absorption coefficient (m-1) +107 107 Aerosol lidar backscatter from satellite (m-1 sr-1) +108 108 Aerosol lidar backscatter from the ground (m-1 sr-1) +109 109 Aerosol lidar extinction from satellite (m-1) +110 110 Aerosol lidar extinction from the ground (m-1) +# 111-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.3.table b/definitions/grib2/tables/10/4.2.0.3.table new file mode 100644 index 000000000..b0c47b4a9 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.3.table @@ -0,0 +1,31 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Pressure (Pa) +1 1 Pressure reduced to MSL (Pa) +2 2 Pressure tendency (Pa/s) +3 3 ICAO Standard Atmosphere Reference Height (m) +4 4 Geopotential (m2 s-2) +5 5 Geopotential height (gpm) +6 6 Geometric height (m) +7 7 Standard deviation of height (m) +8 8 Pressure anomaly (Pa) +9 9 Geopotential height anomaly (gpm) +10 10 Density (kg m-3) +11 11 Altimeter setting (Pa) +12 12 Thickness (m) +13 13 Pressure altitude (m) +14 14 Density altitude (m) +15 15 5-wave geopotential height (gpm) +16 16 Zonal flux of gravity wave stress (N m-2) +17 17 Meridional flux of gravity wave stress (N m-2) +18 18 Planetary boundary layer height (m) +19 19 5-wave geopotential height anomaly (gpm) +20 20 Standard deviation of sub-grid scale orography (m) +21 21 Angle of sub-gridscale orography (rad) +22 22 Slope of sub-gridscale orography (Numeric) +23 23 Gravity wave dissipation (W m-2) +24 24 Anisotropy of sub-gridscale orography (Numeric) +25 25 Natural logarithm of pressure in Pa (Numeric) +26 26 Exner pressure (Numeric) +# 27-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.4.table b/definitions/grib2/tables/10/4.2.0.4.table new file mode 100644 index 000000000..66fd563ca --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.4.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short-wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +8 8 Upward short-wave radiation flux (W m-2) +9 9 Net short wave radiation flux (W m-2) +10 10 Photosynthetically active radiation (W m-2) +11 11 Net short-wave radiation flux, clear sky (W m-2) +12 12 Downward UV radiation (W m-2) +# 13-49 Reserved +50 50 UV index (under clear sky) (Numeric) +51 51 UV index (Numeric) +# 52-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.5.table b/definitions/grib2/tables/10/4.2.0.5.table new file mode 100644 index 000000000..b0c93dd3a --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.5.table @@ -0,0 +1,11 @@ +# Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 0 - Meteorological products, parameter category 5: long-wave radiation +0 0 Net long-wave radiation flux (surface) (W m-2) +1 1 Net long-wave radiation flux (top of atmosphere) (W m-2) +2 2 Long-wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long-wave radiation flux (W m-2) +6 6 Net long-wave radiation flux, clear sky (W m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.6.table b/definitions/grib2/tables/10/4.2.0.6.table new file mode 100644 index 000000000..8779b9925 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.6.table @@ -0,0 +1,40 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Cloud ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type ((Code table 4.203)) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage ((Code table 4.204)) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J/kg) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg/kg) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg/kg) +24 24 Sunshine (Numeric) +25 25 Horizontal extent of cumulonimbus (CB) (%) +26 26 Height of convective cloud base (m) +27 27 Height of convective cloud top (m) +28 28 Number of cloud droplets per unit mass of air (/kg) +29 29 Number of cloud ice particles per unit mass of air (/kg) +30 30 Number density of cloud droplets (m-3) +31 31 Number density of cloud ice particles (m-3) +32 32 Fraction of cloud cover (Numeric) +33 33 Sunshine duration (s) +34 34 Surface long wave effective total cloudiness (Numeric) +35 35 Surface short wave effective total cloudiness (Numeric) +# 36-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.0.7.table b/definitions/grib2/tables/10/4.2.0.7.table new file mode 100644 index 000000000..6015e75f0 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.0.7.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J/kg) +7 7 Convective inhibition (J/kg) +8 8 Storm relative helicity (J/kg) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +13 13 Showalter index (K) +14 14 Reserved +15 15 Updraft helicity (m2 s-2) +# 16-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.1.0.table b/definitions/grib2/tables/10/4.2.1.0.table new file mode 100644 index 000000000..bf88fd6a4 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.1.0.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely-sensed snow cover ((Code table 4.215)) +3 3 Elevation of snow-covered terrain ((Code table 4.216)) +4 4 Snow water equivalent per cent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.1.1.table b/definitions/grib2/tables/10/4.2.1.1.table new file mode 100644 index 000000000..0b8c86ba4 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.1.1.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Conditional per cent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) +1 1 Per cent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.1.2.table b/definitions/grib2/tables/10/4.2.1.2.table new file mode 100644 index 000000000..2c70c6bd0 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.1.2.table @@ -0,0 +1,14 @@ +# Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 1 - Hydrological products, parameter category 2: inland water and sediment properties +0 0 Water depth (m) +1 1 Water temperature (K) +2 2 Water fraction (Proportion) +3 3 Sediment thickness (m) +4 4 Sediment temperature (K) +5 5 Ice thickness (m) +6 6 Ice temperature (K) +7 7 Ice cover (Proportion) +8 8 Land cover (0 = water, 1 = land) (Proportion) +9 9 Shape factor with respect to salinity profile (-) +10 10 Shape factor with respect to temperature profile in thermocline (-) +11 11 Attenuation coefficient of water with respect to solar radiation (m-1) +12 12 Salinity (kg kg-1) diff --git a/definitions/grib2/tables/10/4.2.10.0.table b/definitions/grib2/tables/10/4.2.10.0.table new file mode 100644 index 000000000..f934217db --- /dev/null +++ b/definitions/grib2/tables/10/4.2.10.0.table @@ -0,0 +1,50 @@ +# Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 10 - Oceanographic products, parameter category 0: waves +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (degree true) (deg) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (degree true) (deg) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (degree true) (deg) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (degree true) (deg) +13 13 Secondary wave mean period (s) +14 14 Direction of combined wind waves and swell (degree true) (deg) +15 15 Mean period of combined wind waves and swell (s) +16 16 Coefficient of drag with waves (-) +17 17 Friction velocity (m s-1) +18 18 Wave stress (N m-2) +19 19 Normalized wave stress (-) +20 20 Mean square slope of waves (-) +21 21 u-component surface Stokes drift (m s-1) +22 22 v-component surface Stokes drift (m s-1) +23 23 Period of maximum individual wave height (s) +24 24 Maximum individual wave height (m) +25 25 Inverse mean wave frequency (s) +26 26 Inverse mean frequency of the wind waves (s) +27 27 Inverse mean frequency of the total swell (s) +28 28 Mean zero-crossing wave period (s) +29 29 Mean zero-crossing period of the wind waves (s) +30 30 Mean zero-crossing period of the total swell (s) +31 31 Wave directional width (-) +32 32 Directional width of the wind waves (-) +33 33 Directional width of the total swell (-) +34 34 Peak wave period (s) +35 35 Peak period of the wind waves (s) +36 36 Peak period of the total swell (s) +37 37 Altimeter wave height (m) +38 38 Altimeter corrected wave height (m) +39 39 Altimeter range relative correction (-) +40 40 10 metre neutral wind speed over waves (m s-1) +41 41 10 metre wind direction over waves (deg) +42 42 Wave energy spectrum (m2 s rad-1) +43 43 Kurtosis of the sea surface elevation due to waves (-) +44 44 Benjamin-Feir index (-) +45 45 Spectral peakedness factor (s-1) +# 46-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.10.1.table b/definitions/grib2/tables/10/4.2.10.1.table new file mode 100644 index 000000000..b619b4c41 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.10.1.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Current direction (degree true) (deg) +1 1 Current speed (m/s) +2 2 u-component of current (m/s) +3 3 v-component of current (m/s) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.10.191.table b/definitions/grib2/tables/10/4.2.10.191.table new file mode 100644 index 000000000..182149f08 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.10.191.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Meridional overturning stream function (m3/s) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.10.2.table b/definitions/grib2/tables/10/4.2.10.2.table new file mode 100644 index 000000000..5287c5edc --- /dev/null +++ b/definitions/grib2/tables/10/4.2.10.2.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (degree true) (deg) +3 3 Speed of ice drift (m/s) +4 4 u-component of ice drift (m/s) +5 5 v-component of ice drift (m/s) +6 6 Ice growth rate (m/s) +7 7 Ice divergence (/s) +8 8 Ice temperature (K) +9 9 Ice internal pressure (Pa m) +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.10.3.table b/definitions/grib2/tables/10/4.2.10.3.table new file mode 100644 index 000000000..c7d71e1d8 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.10.3.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.10.4.table b/definitions/grib2/tables/10/4.2.10.4.table new file mode 100644 index 000000000..898bfd87d --- /dev/null +++ b/definitions/grib2/tables/10/4.2.10.4.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg/kg) +4 4 Ocean vertical heat diffusivity (m2 s-1) +5 5 Ocean vertical salt diffusivity (m2 s-1) +6 6 Ocean vertical momentum diffusivity (m2 s-1) +7 7 Bathymetry (m) +# 8-10 Reserved +11 11 Shape factor with respect to salinity profile (-) +12 12 Shape factor with respect to temperature profile in thermocline (-) +13 13 Attenuation coefficient of water with respect to solar radiation (m-1) +14 14 Water depth (m) +15 15 Water temperature (K) +# 16-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.2.0.table b/definitions/grib2/tables/10/4.2.2.0.table new file mode 100644 index 000000000..d9498c4fc --- /dev/null +++ b/definitions/grib2/tables/10/4.2.2.0.table @@ -0,0 +1,37 @@ +# Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 2 - Land surface products, parameter category 0: vegetation/biomass +0 0 Land cover (0 = sea, 1 = land) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg-2 s-1) +7 7 Model terrain height (m) +8 8 Land use ((Code table 4.212)) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadar's mixing length scale (m) +15 15 Canopy conductance (m/s) +16 16 Minimal stomatal resistance (s/m) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy (Proportion) +20 20 Humidity parameter in canopy conductance (Proportion) +21 21 Soil moisture parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +23 23 Column-integrated soil water (kg m-2) +24 24 Heat flux (W m-2) +25 25 Volumetric soil moisture (m3 m-3) +26 26 Wilting point (kg m-3) +27 27 Volumetric wilting point (m3 m-3) +28 28 Leaf area index (Numeric) +29 29 Evergreen forest cover (Proportion) +30 30 Deciduous forest cover (Proportion) +31 31 Normalized differential vegetation index (NDVI) (Numeric) +32 32 Root depth of vegetation (m) +# 33-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.2.3.table b/definitions/grib2/tables/10/4.2.2.3.table new file mode 100644 index 000000000..4c5e2a4b4 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.2.3.table @@ -0,0 +1,27 @@ +# Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 2 - Land surface products, parameter category 3: soil products +0 0 Soil type ((Code table 4.213)) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +10 10 Liquid volumetric soil moisture (non-frozen) (m3 m-3) +11 11 Volumetric transpiration stress-onset (soil moisture) (m3 m-3) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +13 13 Volumetric direct evaporation cease (soil moisture) (m3 m-3) +14 14 Direct evaporation cease (soil moisture) (kg m-3) +15 15 Soil porosity (m3 m-3) +16 16 Volumetric saturation of soil moisture (m3 m-3) +17 17 Saturation of soil moisture (kg m-3) +18 18 Soil temperature (K) +19 19 Soil moisture (kg m-3) +20 20 Column-integrated soil moisture (kg m-2) +21 21 Soil ice (kg m-3) +22 22 Column-integrated soil ice (kg m-2) +# 23-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.2.4.table b/definitions/grib2/tables/10/4.2.2.4.table new file mode 100644 index 000000000..a5f0a3c5c --- /dev/null +++ b/definitions/grib2/tables/10/4.2.2.4.table @@ -0,0 +1,8 @@ +# Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 2 - Land surface products, parameter category 4: fire weather products +0 0 Fire outlook (Code table 4.224) +1 1 Fire outlook due to dry thunderstorm (Code table 4.224) +2 2 Haines Index (Numeric) +3 3 Fire burned area (%) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.3.0.table b/definitions/grib2/tables/10/4.2.3.0.table new file mode 100644 index 000000000..8309784af --- /dev/null +++ b/definitions/grib2/tables/10/4.2.3.0.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +9 9 Fire detection indicator (Code table 4.223) +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.3.1.table b/definitions/grib2/tables/10/4.2.3.1.table new file mode 100644 index 000000000..176ac35fb --- /dev/null +++ b/definitions/grib2/tables/10/4.2.3.1.table @@ -0,0 +1,28 @@ +# Code table 4.2 - Parameter number by product discipline and parameter category. Product discipline 3 - Space products, parameter category 1: quantitative products +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m/s) +5 5 Estimated v component of wind (m/s) +6 6 Number of pixel used (Numeric) +7 7 Solar zenith angle (deg) +8 8 Relative azimuth angle (deg) +9 9 Reflectance in 0.6 micron channel (%) +10 10 Reflectance in 0.8 micron channel (%) +11 11 Reflectance in 1.6 micron channel (%) +12 12 Reflectance in 3.9 micron channel (%) +13 13 Atmospheric divergence (/s) +14 14 Cloudy brightness temperature (K) +15 15 Clear-sky brightness temperature (K) +16 16 Cloudy radiance (with respect to wave number) (W m-1 sr-1) +17 17 Clear-sky radiance (with respect to wave number) (W m-1 sr-1) +18 18 Reserved +19 19 Wind speed (m/s) +20 20 Aerosol optical thickness at 0.635 um +21 21 Aerosol optical thickness at 0.810 um +22 22 Aerosol optical thickness at 1.640 um +23 23 Angstrom coefficient +# 24-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.2.table b/definitions/grib2/tables/10/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/10/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/10/4.201.table b/definitions/grib2/tables/10/4.201.table new file mode 100644 index 000000000..76a0abfb1 --- /dev/null +++ b/definitions/grib2/tables/10/4.201.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.202.table b/definitions/grib2/tables/10/4.202.table new file mode 100644 index 000000000..4dd307a8e --- /dev/null +++ b/definitions/grib2/tables/10/4.202.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 0-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.203.table b/definitions/grib2/tables/10/4.203.table new file mode 100644 index 000000000..716de0f65 --- /dev/null +++ b/definitions/grib2/tables/10/4.203.table @@ -0,0 +1,26 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground-based fog beneath the lowest layer +12 12 Stratus - ground-based fog beneath the lowest layer +13 13 Stratocumulus - ground-based fog beneath the lowest layer +14 14 Cumulus - ground-based fog beneath the lowest layer +15 15 Altostratus - ground-based fog beneath the lowest layer +16 16 Nimbostratus - ground-based fog beneath the lowest layer +17 17 Altocumulus - ground-based fog beneath the lowest layer +18 18 Cirrostratus - ground-based fog beneath the lowest layer +19 19 Cirrocumulus - ground-based fog beneath the lowest layer +20 20 Cirrus - ground-based fog beneath the lowest layer +# 21-190 Reserved +191 191 Unknown +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.204.table b/definitions/grib2/tables/10/4.204.table new file mode 100644 index 000000000..1696453f1 --- /dev/null +++ b/definitions/grib2/tables/10/4.204.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 None +1 1 Isolated (1-2%) +2 2 Few (3-5%) +3 3 Scattered (16-45%) +4 4 Numerous (> 45%) +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.205.table b/definitions/grib2/tables/10/4.205.table new file mode 100644 index 000000000..298942c66 --- /dev/null +++ b/definitions/grib2/tables/10/4.205.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Aerosol not present +1 1 Aerosol present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.206.table b/definitions/grib2/tables/10/4.206.table new file mode 100644 index 000000000..a5e318e5e --- /dev/null +++ b/definitions/grib2/tables/10/4.206.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Not present +1 1 Present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.207.table b/definitions/grib2/tables/10/4.207.table new file mode 100644 index 000000000..602d22b92 --- /dev/null +++ b/definitions/grib2/tables/10/4.207.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Trace +5 5 Heavy +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.208.table b/definitions/grib2/tables/10/4.208.table new file mode 100644 index 000000000..1739ad9e7 --- /dev/null +++ b/definitions/grib2/tables/10/4.208.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.209.table b/definitions/grib2/tables/10/4.209.table new file mode 100644 index 000000000..15c8d8739 --- /dev/null +++ b/definitions/grib2/tables/10/4.209.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Stable +2 2 Mechanically-driven turbulence +3 3 Forced convection +4 4 Free convection +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.210.table b/definitions/grib2/tables/10/4.210.table new file mode 100644 index 000000000..6ba112476 --- /dev/null +++ b/definitions/grib2/tables/10/4.210.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Contrail not present +1 1 Contrail present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.211.table b/definitions/grib2/tables/10/4.211.table new file mode 100644 index 000000000..b11ab50ef --- /dev/null +++ b/definitions/grib2/tables/10/4.211.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Low bypass +1 1 High bypass +2 2 Non-bypass +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.212.table b/definitions/grib2/tables/10/4.212.table new file mode 100644 index 000000000..f086845a8 --- /dev/null +++ b/definitions/grib2/tables/10/4.212.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.213.table b/definitions/grib2/tables/10/4.213.table new file mode 100644 index 000000000..c65784a00 --- /dev/null +++ b/definitions/grib2/tables/10/4.213.table @@ -0,0 +1,16 @@ +# Code table 4.213 - Soil type +0 0 Reserved +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.215.table b/definitions/grib2/tables/10/4.215.table new file mode 100644 index 000000000..7c97dc11f --- /dev/null +++ b/definitions/grib2/tables/10/4.215.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 0-49 Reserved +50 50 No-snow/no-cloud +# 51-99 Reserved +100 100 Clouds +# 101-249 Reserved +250 250 Snow +# 251-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.216.table b/definitions/grib2/tables/10/4.216.table new file mode 100644 index 000000000..b5b8c264a --- /dev/null +++ b/definitions/grib2/tables/10/4.216.table @@ -0,0 +1,96 @@ +# Code table 4.216 - Elevation of snow-covered terrain +# 0-90 Elevation in increments of 100 m +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +# 91-253 Reserved +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/10/4.217.table b/definitions/grib2/tables/10/4.217.table new file mode 100644 index 000000000..4341dff57 --- /dev/null +++ b/definitions/grib2/tables/10/4.217.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.218.table b/definitions/grib2/tables/10/4.218.table new file mode 100644 index 000000000..4408f43a4 --- /dev/null +++ b/definitions/grib2/tables/10/4.218.table @@ -0,0 +1,38 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No scene identified +1 1 Green needle-leafed forest +2 2 Green broad-leafed forest +3 3 Deciduous needle-leafed forest +4 4 Deciduous broad-leafed forest +5 5 Deciduous mixed forest +6 6 Closed shrub-land +7 7 Open shrub-land +8 8 Woody savannah +9 9 Savannah +10 10 Grassland +11 11 Permanent wetland +12 12 Cropland +13 13 Urban +14 14 Vegetation / crops +15 15 Permanent snow / ice +16 16 Barren desert +17 17 Water bodies +18 18 Tundra +# 19-96 Reserved +97 97 Snow / ice on land +98 98 Snow / ice on water +99 99 Sun-glint +100 100 General cloud +101 101 Low cloud / fog / Stratus +102 102 Low cloud / Stratocumulus +103 103 Low cloud / unknown type +104 104 Medium cloud / Nimbostratus +105 105 Medium cloud / Altostratus +106 106 Medium cloud / unknown type +107 107 High cloud / Cumulus +108 108 High cloud / Cirrus +109 109 High cloud / unknown +110 110 Unknown cloud type +# 111-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.219.table b/definitions/grib2/tables/10/4.219.table new file mode 100644 index 000000000..8a4b2cbbf --- /dev/null +++ b/definitions/grib2/tables/10/4.219.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Nominal cloud top height quality +1 1 Fog in segment +2 2 Poor quality height estimation +3 3 Fog in segment and poor quality height estimation +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.220.table b/definitions/grib2/tables/10/4.220.table new file mode 100644 index 000000000..bdb7a7482 --- /dev/null +++ b/definitions/grib2/tables/10/4.220.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Latitude +1 1 Longitude +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.221.table b/definitions/grib2/tables/10/4.221.table new file mode 100644 index 000000000..880fcda79 --- /dev/null +++ b/definitions/grib2/tables/10/4.221.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Not included +1 1 Extrapolated +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.222.table b/definitions/grib2/tables/10/4.222.table new file mode 100644 index 000000000..34e515d52 --- /dev/null +++ b/definitions/grib2/tables/10/4.222.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No +1 1 Yes +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.223.table b/definitions/grib2/tables/10/4.223.table new file mode 100644 index 000000000..4f72889f7 --- /dev/null +++ b/definitions/grib2/tables/10/4.223.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No fire detected +1 1 Possible fire detected +2 2 Probable fire detected +3 3 Missing value diff --git a/definitions/grib2/tables/10/4.224.table b/definitions/grib2/tables/10/4.224.table new file mode 100644 index 000000000..cdacb1081 --- /dev/null +++ b/definitions/grib2/tables/10/4.224.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No risk area +1 1 Reserved +2 2 General thunderstorm risk area +3 3 Reserved +4 4 Slight risk area +5 5 Reserved +6 6 Moderate risk area +7 7 Reserved +8 8 High risk area +# 9-10 Reserved +11 11 Dry thunderstorm (dry lightning) risk area +# 12-13 Reserved +14 14 Critical risk area +# 15-17 Reserved +18 18 Extremely critical risk area +# 19-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/10/4.225.table b/definitions/grib2/tables/10/4.225.table new file mode 100644 index 000000000..a37c8bbaf --- /dev/null +++ b/definitions/grib2/tables/10/4.225.table @@ -0,0 +1,266 @@ +# Code table 4.225 - Weather (see FM 94 BUFR/FM 95 CREX Code table 0 20 003 - Present weather) +00 00 Cloud development not observed or not observable +01 01 Clouds generally dissolving or becoming less developed +02 02 State of sky on the whole unchanged +03 03 Clouds generally forming or developing +04 04 Visibility reduced by smoke, e.g. veldt or forest fires, industrial smoke or volcanic ashes +05 05 Haze +06 06 Widespread dust in suspension in the air, not raised by wind at or near the station at the time of observation +07 07 Dust or sand raised by wind at or near the station at the time of observation, but no well developed dust whirl(s) or sand whirl(s), and no duststorm or sandstorm seen; or, in the case of sea stations and coastal stations, blowing spray at the station +08 08 Well-developed dust whirl(s) or sand whirl(s) seen at or near the station during the preceding hour or at the same time of observation, but no duststorm or sandstorm +09 09 Duststorm or sandstorm within sight at the time of observation, or at the station during the preceding hour +10 10 Mist +11 11 Patches +12 12 More or less continuous +13 13 Lightning visible, no thunder heard +14 14 Precipitation within sight, not reaching the ground or the surface of the sea +15 15 Precipitation within sight, reaching the ground or the surface of the sea, but distant, i.e. estimated to be more than 5 km from the station +16 16 Precipitation within sight, reaching the ground or the surface of the sea, near to, but not at the station +17 17 Thunderstorm, but no precipitation at the time of observation +18 18 Squalls +19 19 Funnel cloud(s) +20 20 Drizzle (not freezing) or snow grains +21 21 Rain (not freezing) +22 22 Snow +23 23 Rain and snow or ice pellets +24 24 Freezing drizzle or freezing rain +25 25 Shower(s) of rain +26 26 Shower(s) of snow, or of rain and snow +27 27 Shower(s) of hail, or of rain and hail +28 28 Fog or ice fog +29 29 Thunderstorm (with or without precipitation) +30 30 Slight or moderate duststorm or sandstorm has decreased during the preceding hour +31 31 Slight or moderate duststorm or sandstorm no appreciable change during the preceding hour +32 32 Slight or moderate duststorm or sandstorm has begun or has increased during the preceding hour +33 33 Severe duststorm or sandstorm has decreased during the preceding hour +34 34 Severe duststorm or sandstorm no appreciable change during the preceding hour +35 35 Severe duststorm or sandstorm has begun or has increased during the preceding hour +36 36 Slight or moderate drifting snow generally low (below eye level) +37 37 Heavy drifting snow generally low (below eye level) +38 38 Slight or moderate blowing snow generally high (above eye level) +39 39 Heavy blowing snow generally high (above eye level) +40 40 Fog or ice fog at a distance at the time of observation, but not at the station during the preceding hour, the fog or ice fog extending to a level above that of the observer +41 41 Fog or ice fog in patches +42 42 Fog or ice fog, sky visible has become thinner during the preceding hour +43 43 Fog or ice fog, sky invisible has become thinner during the preceding hour +44 44 Fog or ice fog, sky visible no appreciable change during the preceding hour +45 45 Fog or ice fog, sky invisible no appreciable change during the preceding hour +46 46 Fog or ice fog, sky visible has begun or has become thicker during the preceding hour +47 47 Fog or ice fog, sky invisible has begun or has become thicker during the preceding hour +48 48 Fog, depositing rime, sky visible +49 49 Fog, depositing rime, sky invisible +50 50 Drizzle, not freezing, intermittent slight at time of observation +51 51 Drizzle, not freezing, continuous slight at time of observation +52 52 Drizzle, not freezing, intermittent moderate at time of observation +53 53 Drizzle, not freezing, continuous moderate at time of observation +54 54 Drizzle, not freezing, intermittent heavy (dense) at time of observation +55 55 Drizzle, not freezing, continuous heavy (dense) at time of observation +56 56 Drizzle, freezing, slight +57 57 Drizzle, freezing, moderate or heavy (dense) +58 58 Drizzle and rain, slight +59 59 Drizzle and rain, moderate or heavy +60 60 Rain, not freezing, intermittent slight at time of observation +61 61 Rain, not freezing, continuous slight at time of observation +62 62 Rain, not freezing, intermittent moderate at time of observation +63 63 Rain, not freezing, continuous moderate at time of observation +64 64 Rain, not freezing, intermittent heavy at time of observation +65 65 Rain, not freezing, continuous heavy at time of observation +66 66 Rain, freezing, slight +67 67 Rain, freezing, moderate or heavy +68 68 Rain or drizzle and snow, slight +69 69 Rain or drizzle and snow, moderate or heavy +70 70 Intermittent fall of snowflakes slight at time of observation +71 71 Continuous fall of snowflakes slight at time of observation +72 72 Intermittent fall of snowflakes moderate at time of observation +73 73 Continuous fall of snowflakes moderate at time of observation +74 74 Intermittent fall of snowflakes heavy at time of observation +75 75 Continuous fall of snowflakes heavy at time of observation +76 76 Diamond dust (with or without fog) +77 77 Snow grains (with or without fog) +78 78 Isolated star-like snow crystals (with or without fog) +79 79 Ice pellets +80 80 Rain shower(s), slight +81 81 Rain shower(s), moderate or heavy +82 82 Rain shower(s), violent +83 83 Shower(s) of rain and snow mixed, slight +84 84 Shower(s) of rain and snow mixed, moderate or heavy +85 85 Snow shower(s), slight +86 86 Snow shower(s), moderate or heavy +87 87 Shower(s) of snow pellets or small hail, with or without rain or rain and snow mixed slight +88 88 Shower(s) of snow pellets or small hail, with or without rain or rain and snow mixed moderate or heavy +89 89 Shower(s) of hail, with or without rain or rain and snow mixed, not associated with thunder slight +90 90 Shower(s) of hail, with or without rain or rain and snow mixed, not associated with thunder moderate or heavy +91 91 Slight rain at time of observation +92 92 Moderate or heavy rain at time of observation +93 93 Slight snow, or rain and snow mixed or hail at time of observation +94 94 Moderate or heavy snow, or rain and snow mixed or hail at time of observation +95 95 Thunderstorm, slight or moderate, without hail, but with rain and/or snow at time of observation +96 96 Thunderstorm, slight or moderate, with hail at time of observation +97 97 Thunderstorm, heavy, without hail, but with rain and/or snow at time of observation +98 98 Thunderstorm combined with duststorm or sandstorm at time of observation +99 99 Thunderstorm, heavy, with hail at time of observation +100 100 No significant weather observed +101 101 Clouds generally dissolving or becoming less developed during the past hour +102 102 State of sky on the whole unchanged during the past hour +103 103 Clouds generally forming or developing during the past hour +104 104 Haze or smoke, or dust in suspension in the air, visibility equal to, or greater than, 1 km +105 105 Haze or smoke, or dust in suspension in the air, visibility less than 1 km +# 106-109 Reserved +110 110 Mist +111 111 Diamond dust +112 112 Distant lightning +#113-117 Reserved +118 118 Squalls +# 119 Reserved +120 120 Fog +121 121 PRECIPITATION +122 122 Drizzle (not freezing) or snow grains +123 123 Rain (not freezing) +124 124 Snow +125 125 Freezing drizzle or freezing rain +126 126 Thunderstorm (with or without precipitation) +127 127 BLOWING OR DRIFTING SNOW OR SAND +128 128 Blowing or drifting snow or sand, visibility equal to, or greater than, 1 km +129 129 Blowing or drifting snow or sand, visibility less than 1 km +130 130 FOG +131 131 Fog or ice fog in patches +132 132 Fog or ice fog, has become thinner during the past hour +133 133 Fog or ice fog, no appreciable change during the past hour +134 134 Fog or ice fog, has begun or become thicker during the past hour +135 135 Fog, depositing rime +#136-139 Reserved +140 140 PRECIPITATION +141 141 Precipitation, slight or moderate +142 142 Precipitation, heavy +143 143 Liquid precipitation, slight or moderate +144 144 Liquid precipitation, heavy +145 145 Solid precipitation, slight or moderate +146 146 Solid precipitation, heavy +147 147 Freezing precipitation, slight or moderate +148 148 Freezing precipitation, heavy +# 149 Reserved +150 150 DRIZZLE +151 151 Drizzle, not freezing, slight +152 152 Drizzle, not freezing, moderate +153 153 Drizzle, not freezing, heavy +154 154 Drizzle, freezing, slight +155 155 Drizzle, freezing, moderate +156 156 Drizzle, freezing, heavy +157 157 Drizzle and rain, slight +158 158 Drizzle and rain, moderate or heavy +# 159 Reserved +160 160 RAIN +161 161 Rain, not freezing, slight +162 162 Rain, not freezing, moderate +163 163 Rain, not freezing, heavy +164 164 Rain, freezing, slight +165 165 Rain, freezing, moderate +166 166 Rain, freezing, heavy +167 167 Rain (or drizzle) and snow, slight +168 168 Rain (or drizzle) and snow, moderate or heavy +#169 Reserved +170 170 SNOW +171 171 Snow, slight +172 172 Snow, moderate +173 173 Snow, heavy +174 174 Ice pellets, slight +175 175 Ice pellets, moderate +176 176 Ice pellets, heavy +177 177 Snow grains +178 178 Ice crystals +#179 Reserved +180 180 SHOWER(S) OR INTERMITTENT PRECIPITATION +181 181 Rain shower(s) or intermittent rain, slight +182 182 Rain shower(s) or intermittent rain, moderate +183 183 Rain shower(s) or intermittent rain, heavy +184 184 Rain shower(s) or intermittent rain, violent +185 185 Snow shower(s) or intermittent snow, slight +186 186 Snow shower(s) or intermittent snow, moderate +187 187 Snow shower(s) or intermittent snow, heavy +#188 Reserved +189 189 Hail +190 190 THUNDERSTORM +191 191 Thunderstorm, slight or moderate, with no precipitation +192 192 Thunderstorm, slight or moderate, with rain showers and/or snow showers +193 193 Thunderstorm, slight or moderate, with hail +194 194 Thunderstorm, heavy, with no precipitation +195 195 Thunderstorm, heavy, with rain showers and/or snow showers +196 196 Thunderstorm, heavy, with hail +#197-198 Reserved +199 199 Tornado +204 204 Volcanic ash suspended in the air aloft +206 206 Thick dust haze, visibility less than 1 km +207 207 Blowing spray at the station +208 208 Drifting dust (sand) +209 209 Wall of dust or sand in distance (like haboob) +210 210 Snow haze +211 211 Whiteout +213 213 Lightning, cloud to surface +217 217 Dry thunderstorm +219 219 Tornado cloud (destructive) at or within sight of the station during preceding hour or at the time of observation +220 220 Deposition of volcanic ash +221 221 Deposition of dust or sand +222 222 Deposition of dew +223 223 Deposition of wet snow +224 224 Deposition of soft rime +225 225 Deposition of hard rime +226 226 Deposition of hoar frost +227 227 Deposition of glaze +228 228 Deposition of ice crust (ice slick) +230 230 Duststorm or sandstorm with temperature below 0 degrees +239 239 Blowing snow, impossible to determine whether snow is falling or not +241 241 Fog on sea +242 242 Fog in valleys +243 243 Arctic or Antarctic sea smoke +244 244 Steam fog (sea, lake or river) +245 245 Steam log (land) +246 246 Fog over ice or snow cover +247 247 Dense fog, visibility 60-90 m +248 248 Dense fog, visibility 30-60 m +249 249 Dense fog, visibility less than 30 m +250 250 Drizzle, rate of fall - less than 0.10 mm h-1 +251 251 Drizzle, rate of fall - 0.10-0.19 mm h-1 +252 252 Drizzle, rate of fall - 0.20-0.39 mm h-1 +253 253 Drizzle, rate of fall - 0.40-0.79 mm h-1 +254 254 Drizzle, rate of fall - 0.80-1.59 mm h-1 +255 255 Drizzle, rate of fall - 1.60-3.19 mm h-1 +256 256 Drizzle, rate of fall - 3.20-6.39 mm h-1 +257 257 Drizzle, rate of fall - 6.4 mm h-1 or more +259 259 Drizzle and snow +260 260 Rain, rate of fall - less than 1.0 mm h-1 +261 261 Rain, rate of fall - 1.0-1.9 mm h-1 +262 262 Rain, rate of fall - 2.0-3.9 mm h-1 +263 263 Rain, rate of fall - 4.0-7.9 mm h-1 +264 264 Rain, rate of fall - 8.0-15.9 mm h-1 +265 265 Rain, rate of fall - 16.0-31.9 mm h-1 +266 266 Rain, rate of fall - 32.0-63.9 mm h-1 +267 267 Rain, rate of fall - 64.0 mm h-1 or more +270 270 Snow, rate of fall - less than 1.0 cm h-1 +271 271 Snow, rate of fall - 1.0-1.9 cm h-1 +272 272 Snow, rate of fall - 2.0-3.9 cm h-1 +273 273 Snow, rate of fall - 4.0-7.9 cm h-1 +274 274 Snow, rate of fall - 8.0-15.9 cm h-1 +275 275 Snow, rate of fall - 16.0-31.9 cm h-1 +276 276 Snow, rate of fall - 32.0-63.9 cm h-1 +277 277 Snow, rate of fall - 64.0 cm h-1 or more +278 278 Snow or ice crystal precipitation from a clear sky +279 279 Wet snow, freezing on contact +280 280 Precipitation of rain +281 281 Precipitation of rain, freezing +282 282 Precipitation of rain and snow mixed +283 283 Precipitation of snow +284 284 Precipitation of snow pellets or small hall +285 285 Precipitation of snow pellets or small hail, with rain +286 286 Precipitation of snow pellets or small hail, with rain and snow mixed +287 287 Precipitation of snow pellets or small hail, with snow +288 288 Precipitation of hail +289 289 Precipitation of hail, with rain +290 290 Precipitation of hall, with rain and snow mixed +291 291 Precipitation of hail, with snow +292 292 Shower(s) or thunderstorm over sea +293 293 Shower(s) or thunderstorm over mountains +# 300-507 Reserved +508 508 No significant phenomenon to report, present and past weather omitted +509 509 No observation, data not available, present and past weather omitted +510 510 Present and past weather missing, but expected +511 511 Missing value diff --git a/definitions/grib2/tables/10/4.227.table b/definitions/grib2/tables/10/4.227.table new file mode 100644 index 000000000..6a98d49d0 --- /dev/null +++ b/definitions/grib2/tables/10/4.227.table @@ -0,0 +1,9 @@ +# Code table 4.227 - Icing scenario (weather/cloud classification) +0 0 None +1 1 General +2 2 Convective +3 3 Stratiform +4 4 Freezing +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.230.table b/definitions/grib2/tables/10/4.230.table new file mode 100644 index 000000000..5fe00dc73 --- /dev/null +++ b/definitions/grib2/tables/10/4.230.table @@ -0,0 +1,415 @@ +# Code table 4.230 - Atmospheric chemical constituent type +0 0 Ozone +1 1 Water vapour +2 2 Methane +3 3 Carbon dioxide +4 4 Carbon monoxide +5 5 Nitrogen dioxide +6 6 Nitrous oxide +7 7 Formaldehyde +8 8 Sulphur dioxide +9 9 Ammonia +10 10 Ammonium +11 11 Nitrogen monoxide +12 12 Atomic oxygen +13 13 Nitrate radical +14 14 Hydroperoxyl radical +15 15 Dinitrogen pentoxide +16 16 Nitrous acid +17 17 Nitric acid +18 18 Peroxynitric acid +19 19 Hydrogen peroxide +20 20 Molecular hydrogen +21 21 Atomic nitrogen +22 22 Sulphate +23 23 Radon +24 24 Elemental mercury +25 25 Divalent mercury +26 26 Atomic chlorine +27 27 Chlorine monoxide +28 28 Dichlorine peroxide +29 29 Hypochlorous acid +30 30 Chlorine nitrate +31 31 Chlorine dioxide +32 32 Atomic bromine +33 33 Bromine monoxide +34 34 Bromine chloride +35 35 Hydrogen bromide +36 36 Hypobromous acid +37 37 Bromine nitrate +#38-9999 Reserved +10000 10000 Hydroxyl radical +10001 10001 Methyl peroxy radical +10002 10002 Methyl hydroperoxide +10004 10004 Methanol +10005 10005 Formic acid +10006 10006 Hydrogen cyanide +10007 10007 Aceto nitrile +10008 10008 Ethane +10009 10009 Ethene (= Ethylene) +10010 10010 Ethyne (= Acetylene) +10011 10011 Ethanol +10012 10012 Acetic acid +10013 10013 Peroxyacetyl nitrate +10014 10014 Propane +10015 10015 Propene +10016 10016 Butanes +10017 10017 Isoprene +10018 10018 Alpha pinene +10019 10019 Beta pinene +10020 10020 Limonene +10021 10021 Benzene +10022 10022 Toluene +10023 10023 Xylene +#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...) +10500 10500 Dimethyl sulphide +#10501-20000 Reserved +20001 20001 Hydrogen chloride +20002 20002 CFC-11 +20003 20003 CFC-12 +20004 20004 CFC-113 +20005 20005 CFC-113a +20006 20006 CFC-114 +20007 20007 CFC-115 +20008 20008 HCFC-22 +20009 20009 HCFC-141b +20010 20010 HCFC-142b +20011 20011 Halon-1202 +20012 20012 Halon-1211 +20013 20013 Halon-1301 +20014 20014 Halon-2402 +20015 20015 Methyl chloride (HCC-40) +20016 20016 Carbon tetrachloride (HCC-10) +20017 20017 HCC-140a +20018 20018 Methyl bromide (HBC-40B1) +20019 20019 Hexachlorocyclohexane (HCH) +20020 20020 Alpha hexachlorocyclohexane +20021 20021 Hexachlorobiphenyl (PCB-153) +#20022-29999 Reserved +30000 30000 Radioactive pollutant (tracer, defined by originating centre) +#30001-30009 Reserved +30010 30010 Hydrogen H-3 +30011 30011 Hydrogen organic bounded H-3o +30012 30012 Hydrogen inorganic H-3a +30013 30013 Beryllium 7 Be-7 +30014 30014 Beryllium 10 Be-10 +30015 30015 Carbon 14 C-14 +30016 30016 Carbon 14 CO2 C-14CO2 +30017 30017 Carbon 14 other gases C-14og +30018 30018 Nitrogen 13 N-13 +30019 30019 Nitrogen 16 N-16 +30020 30020 Fluorine 18 F-18 +30021 30021 Sodium 22 Na-22 +30022 30022 Phosphate 32 P-32 +30023 30023 Phosphate 33 P-33 +30024 30024 Sulfur 35 S-35 +30025 30025 Chlorine 36 Cl-36 +30026 30026 Potassium 40 K-40 +30027 30027 Argon 41 Ar-41 +30028 30028 Calcium 41 Ca-41 +30029 30029 Calcium 45 Ca-45 +30030 30030 Titanium 44 +30031 30031 Scandium 46 Sc-46 +30032 30032 Vanadium 48 V-48 +30033 30033 Vanadium 49 V-49 +30034 30034 Chrome 51 Cr-51 +30035 30035 Manganese 52 Mn-52 +30036 30036 Manganese 54 Mn-54 +30037 30037 Iron 55 Fe-55 +30038 30038 Iron 59 Fe-59 +30039 30039 Cobalt 56 Co-56 +30040 30040 Cobalt 57 Co-57 +30041 30041 Cobalt 58 Co-58 +30042 30042 Cobalt 60 Co-60 +30043 30043 Nickel 59 Ni-59 +30044 30044 Nickel 63 Ni-63 +30045 30045 Zinc 65 Zn-65 +30046 30046 Gallium 67 Ga-67 +30047 30047 Gallium 68 Ga-68 +30048 30048 Germanium 68 Ge-68 +30049 30049 Germanium 69 Ge-69 +30050 30050 Arsenic 73 As-73 +30051 30051 Selenium 75 Se-75 +30052 30052 Selenium 79 Se-79 +30053 30053 Rubidium 81 Rb-81 +30054 30054 Rubidium 83 Rb-83 +30055 30055 Rubidium 84 Rb-84 +30056 30056 Rubidium 86 Rb-86 +30057 30057 Rubidium 87 Rb-87 +30058 30058 Rubidium 88 Rb-88 +30059 30059 Krypton 85 Kr-85 +30060 30060 Krypton 85 metastable Kr-85m +30061 30061 Krypton 87 Kr-87 +30062 30062 Krypton 88 Kr-88 +30063 30063 Krypton 89 Kr-89 +30064 30064 Strontium 85 Sr-85 +30065 30065 Strontium 89 Sr-89 +30066 30066 Strontium 89/90 Sr-8990 +30067 30067 Strontium 90 Sr-90 +30068 30068 Strontium 91 Sr-91 +30069 30069 Strontium 92 Sr-92 +30070 30070 Yttrium 87 Y-87 +30071 30071 Yttrium 88 Y-88 +30072 30072 Yttrium 90 Y-90 +30073 30073 Yttrium 91 Y-91 +30074 30074 Yttrium 91 metastable Y-91m +30075 30075 Yttrium 92 Y-92 +30076 30076 Yttrium 93 Y-93 +30077 30077 Zirconium 89 Zr-89 +30078 30078 Zirconium 93 Zr-93 +30079 30079 Zirconium 95 Zr-95 +30080 30080 Zirconium 97 Zr-97 +30081 30081 Niobium 93 metastable Nb-93m +30082 30082 Niobium 94 Nb-94 +30083 30083 Niobium 95 Nb-95 +30084 30084 Niobium 95 metastable Nb-95m +30085 30085 Niobium 97 Nb-97 +30086 30086 Niobium 97 metastable Nb-97m +30087 30087 Molybdenum 93 Mo-93 +30088 30088 Molybdenum 99 Mo-99 +30089 30089 Technetium 95 metastable Tc-95m +30090 30090 Technetium 96 Tc-96 +30091 30091 Technetium 99 Tc-99 +30092 30092 Technetium 99 metastable Tc-99m +30093 30093 Rhodium 99 Rh-99 +30094 30094 Rhodium 101 Rh-101 +30095 30095 Rhodium 102 metastable Rh-102m +30096 30096 Rhodium 103 metastable Rh-103m +30097 30097 Rhodium 105 Rh-105 +30098 30098 Rhodium 106 Rh-106 +30099 30099 Palladium 100 Pd-100 +30100 30100 Palladium 103 Pd-103 +30101 30101 Palladium 107 Pd-107 +30102 30102 Ruthenium 103 Ru-103 +30103 30103 Ruthenium 105 Ru-105 +30104 30104 Ruthenium 106 Ru-106 +30105 30105 Silver 108 metastable Ag-108m +30106 30106 Silver 110 metastable Ag-110m +30107 30107 Cadmium 109 Cd-109 +30108 30108 Cadmium 113 metastable Cd-113m +30109 30109 Cadmium 115 metastable Cd-115m +30110 30110 Indium 114 metastable In-114m +30111 30111 Tin 113 Sn-113 +30112 30112 Tin 119 metastable Sn-119m +30113 30113 Tin 121 metastable Sn-121m +30114 30114 Tin 122 Sn-122 +30115 30115 Tin 123 Sn-123 +30116 30116 Tin 126 Sn-126 +30117 30117 Antimony 124 Sb-124 +30118 30118 Antimony 125 Sb-125 +30119 30119 Antimony 126 Sb-126 +30120 30120 Antimony 127 Sb-127 +30121 30121 Antimony 129 Sb-129 +30122 30122 Tellurium 123 metastable Te-123m +30123 30123 Tellurium 125 metastable Te-125m +30124 30124 Tellurium 127 Te-127 +30125 30125 Tellurium 127 metastable Te-127m +30126 30126 Tellurium 129 Te-129 +30127 30127 Tellurium 129 metastable Te-129m +30128 30128 Tellurium 131 metastable Te-131m +30129 30129 Tellurium 132 Te-132 +30130 30130 Iodine 123 I-123 +30131 30131 Iodine 124 I-124 +30132 30132 Iodine 125 I-125 +30133 30133 Iodine 126 I-126 +30134 30134 Iodine 129 I-129 +30135 30135 Iodine 129 elementary gaseous I-129g +30136 30136 Iodine 129 organic bounded I-129o +30137 30137 Iodine 131 I-131 +30138 30138 Iodine 131 elementary gaseous I-131g +30139 30139 Iodine 131 organic bounded I-131o +30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go +30141 30141 Iodine 131 aerosol I-131a +30142 30142 Iodine 132 I-132 +30143 30143 Iodine 132 elementary gaseous I-132g +30144 30144 Iodine 132 organic bounded I-132o +30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go +30146 30146 Iodine 132 aerosol I-132a +30147 30147 Iodine 133 I-133 +30148 30148 Iodine 133 elementary gaseous I-133g +30149 30149 Iodine 133 organic bounded I-133o +30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go +30151 30151 Iodine 133 aerosol I-133a +30152 30152 Iodine 134 I-134 +30153 30153 Iodine 134 elementary gaseous I-134g +30154 30154 Iodine 134 organic bounded I-134o +30155 30155 Iodine 135 I-135 +30156 30156 Iodine 135 elementary gaseous I-135g +30157 30157 Iodine 135 organic bounded I-135o +30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go +30159 30159 Iodine 135 aerosol I-135a +30160 30160 Xenon 131 metastable Xe-131m +30161 30161 Xenon 133 Xe-133 +30162 30162 Xenon 133 metastable Xe-133m +30163 30163 Xenon 135 Xe-135 +30164 30164 Xenon 135 metastable Xe-135m +30165 30165 Xenon 137 Xe-137 +30166 30166 Xenon 138 Xe-138 +30167 30167 Xenon sum of all Xenon isotopes Xe-sum +30168 30168 Caesium 131 Cs-131 +30169 30169 Caesium 134 Cs-134 +30170 30170 Caesium 135 Cs-135 +30171 30171 Caesium 136 Cs-136 +30172 30172 Caesium 137 Cs-137 +30173 30173 Barium 133 Ba-133 +30174 30174 Barium 137 metastable Ba-137m +30175 30175 Barium 140 Ba-140 +30176 30176 Cerium 139 Ce-139 +30177 30177 Cerium 141 Ce-141 +30178 30178 Cerium 143 Ce-143 +30179 30179 Cerium 144 Ce-144 +30180 30180 Lanthanum 140 La-140 +30181 30181 Lanthanum 141 La-141 +30182 30182 Praseodymium 143 Pr-143 +30183 30183 Praseodymium 144 Pr-144 +30184 30184 Praseodymium 144 metastable Pr-144m +30185 30185 Samarium 145 Sm-145 +30186 30186 Samarium 147 Sm-147 +30187 30187 Samarium 151 Sm-151 +30188 30188 Neodymium 147 Nd-147 +30189 30189 Promethium 146 Pm-146 +30190 30190 Promethium 147 Pm-147 +30191 30191 Promethium 151 Pm-151 +30192 30192 Europium 152 Eu-152 +30193 30193 Europium 154 Eu-154 +30194 30194 Europium 155 Eu-155 +30195 30195 Gadolinium 153 Gd-153 +30196 30196 Terbium 160 Tb-160 +30197 30197 Holmium 166 metastable Ho-166m +30198 30198 Thulium 170 Tm-170 +30199 30199 Ytterbium 169 Yb-169 +30200 30200 Hafnium 175 Hf-175 +30201 30201 Hafnium 181 Hf-181 +30202 30202 Tantalum 179 Ta-179 +30203 30203 Tantalum 182 Ta-182 +30204 30204 Rhenium 184 Re-184 +30205 30205 Iridium 192 Ir-192 +30206 30206 Mercury 203 Hg-203 +30207 30207 Thallium 204 Tl-204 +30208 30208 Thallium 207 Tl-207 +30209 30209 Thallium 208 Tl-208 +30210 30210 Thallium 209 Tl-209 +30211 30211 Bismuth 205 Bi-205 +30212 30212 Bismuth 207 Bi-207 +30213 30213 Bismuth 210 Bi-210 +30214 30214 Bismuth 211 Bi-211 +30215 30215 Bismuth 212 Bi-212 +30216 30216 Bismuth 213 Bi-213 +30217 30217 Bismuth 214 Bi-214 +30218 30218 Polonium 208 Po-208 +30219 30219 Polonium 210 Po-210 +30220 30220 Polonium 212 Po-212 +30221 30221 Polonium 213 Po-213 +30222 30222 Polonium 214 Po-214 +30223 30223 Polonium 215 Po-215 +30224 30224 Polonium 216 Po-216 +30225 30225 Polonium 218 Po-218 +30226 30226 Lead 209 Pb-209 +30227 30227 Lead 210 Pb-210 +30228 30228 Lead 211 Pb-211 +30229 30229 Lead 212 Pb-212 +30230 30230 Lead 214 Pb-214 +30231 30231 Astatine 217 At-217 +30232 30232 Radon 219 Rn-219 +30233 30233 Radon 220 Rn-220 +30234 30234 Radon 222 Rn-222 +30235 30235 Francium 221 Fr-221 +30236 30236 Francium 223 Fr-223 +30237 30237 Radium 223 Ra-223 +30238 30238 Radium 224 Ra-224 +30239 30239 Radium 225 Ra-225 +30240 30240 Radium 226 Ra-226 +30241 30241 Radium 228 Ra-228 +30242 30242 Actinium 225 Ac-225 +30243 30243 Actinium 227 Ac-227 +30244 30244 Actinium 228 Ac-228 +30245 30245 Thorium 227 Th-227 +30246 30246 Thorium 228 Th-228 +30247 30247 Thorium 229 Th-229 +30248 30248 Thorium 230 Th-230 +30249 30249 Thorium 231 Th-231 +30250 30250 Thorium 232 Th-232 +30251 30251 Thorium 234 Th-234 +30252 30252 Protactinium 231 Pa-231 +30253 30253 Protactinium 233 Pa-233 +30254 30254 Protactinium 234 metastable Pa-234m +30255 30255 Uranium 232 U-232 +30256 30256 Uranium 233 U-233 +30257 30257 Uranium 234 U-234 +30258 30258 Uranium 235 U-235 +30259 30259 Uranium 236 U-236 +30260 30260 Uranium 237 U-237 +30261 30261 Uranium 238 U-238 +30262 30262 Plutonium 236 Pu-236 +30263 30263 Plutonium 238 Pu-238 +30264 30264 Plutonium 239 Pu-239 +30265 30265 Plutonium 240 Pu-240 +30266 30266 Plutonium 241 Pu-241 +30267 30267 Plutonium 242 Pu-242 +30268 30268 Plutonium 244 Pu-244 +30269 30269 Neptunium 237 Np-237 +30270 30270 Neptunium 238 Np-238 +30271 30271 Neptunium 239 Np-239 +30272 30272 Americium 241 Am-241 +30273 30273 Americium 242 Am-242 +30274 30274 Americium 242 metastable Am-242m +30275 30275 Americium 243 Am-243 +30276 30276 Curium 242 Cm-242 +30277 30277 Curium 243 Cm-243 +30278 30278 Curium 244 Cm-244 +30279 30279 Curium 245 Cm-245 +30280 30280 Curium 246 Cm-246 +30281 30281 Curium 247 Cm-247 +30282 30282 Curium 248 Cm-248 +30283 30283 Curium 243/244 Cm-243244 +30284 30284 Plutonium 238/Americium 241 Pu-238Am-241 +30285 30285 Plutonium 239/240 Pu-239240 +30286 30286 Berkelium 249 Bk-249 +30287 30287 Californium 249 Cf-249 +30288 30288 Californium 250 Cf-250 +30289 30289 Californium 252 Cf-252 +30290 30290 Sum aerosol particulates SumAer +30291 30291 Sum Iodine SumIod +30292 30292 Sum noble gas SumNG +30293 30293 Activation gas ActGas +30294 30294 Cs-137 Equivalent EquCs137 +#30295-59999 Reserved +60000 60000 HOx radical (OH+HO2) +60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2) +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen NOx +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy +60005 60005 Total inorganic chlorine Clx +60006 60006 Total inorganic bromine Brx +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped alkanes +60010 60010 Lumped alkenes +60011 60011 Lumped aromatic compounds +60012 60012 Lumped terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon +60016 60016 Lumped oxygenated hydrocarbons +#60017-61999 Reserved +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +62013 62013 Black carbon hydrophilic dry +62014 62014 Black carbon hydrophobic dry +62015 62015 Particulate organic matter hydrophilic dry +62016 62016 Particulate organic matter hydrophobic dry +62017 62017 Nitrate hydrophilic dry +62018 62018 Nitrate hydrophobic dry +#62019-65534 Reserved +65535 65535 Missing diff --git a/definitions/grib2/tables/10/4.233.table b/definitions/grib2/tables/10/4.233.table new file mode 100644 index 000000000..761a8d1e5 --- /dev/null +++ b/definitions/grib2/tables/10/4.233.table @@ -0,0 +1,415 @@ +# Code table 4.233 - Aerosol type +0 0 Ozone +1 1 Water vapour +2 2 Methane +3 3 Carbon dioxide +4 4 Carbon monoxide +5 5 Nitrogen dioxide +6 6 Nitrous oxide +7 7 Formaldehyde +8 8 Sulphur dioxide +9 9 Ammonia +10 10 Ammonium +11 11 Nitrogen monoxide +12 12 Atomic oxygen +13 13 Nitrate radical +14 14 Hydroperoxyl radical +15 15 Dinitrogen pentoxide +16 16 Nitrous acid +17 17 Nitric acid +18 18 Peroxynitric acid +19 19 Hydrogen peroxide +20 20 Molecular hydrogen +21 21 Atomic nitrogen +22 22 Sulphate +23 23 Radon +24 24 Elemental mercury +25 25 Divalent mercury +26 26 Atomic chlorine +27 27 Chlorine monoxide +28 28 Dichlorine peroxide +29 29 Hypochlorous acid +30 30 Chlorine nitrate +31 31 Chlorine dioxide +32 32 Atomic bromine +33 33 Bromine monoxide +34 34 Bromine chloride +35 35 Hydrogen bromide +36 36 Hypobromous acid +37 37 Bromine nitrate +#38-9999 Reserved +10000 10000 Hydroxyl radical +10001 10001 Methyl peroxy radical +10002 10002 Methyl hydroperoxide +10004 10004 Methanol +10005 10005 Formic acid +10006 10006 Hydrogen cyanide +10007 10007 Aceto nitrile +10008 10008 Ethane +10009 10009 Ethene (= Ethylene) +10010 10010 Ethyne (= Acetylene) +10011 10011 Ethanol +10012 10012 Acetic acid +10013 10013 Peroxyacetyl nitrate +10014 10014 Propane +10015 10015 Propene +10016 10016 Butanes +10017 10017 Isoprene +10018 10018 Alpha pinene +10019 10019 Beta pinene +10020 10020 Limonene +10021 10021 Benzene +10022 10022 Toluene +10023 10023 Xylene +#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...) +10500 10500 Dimethyl sulphide +#10501-20000 Reserved +20001 20001 Hydrogen chloride +20002 20002 CFC-11 +20003 20003 CFC-12 +20004 20004 CFC-113 +20005 20005 CFC-113a +20006 20006 CFC-114 +20007 20007 CFC-115 +20008 20008 HCFC-22 +20009 20009 HCFC-141b +20010 20010 HCFC-142b +20011 20011 Halon-1202 +20012 20012 Halon-1211 +20013 20013 Halon-1301 +20014 20014 Halon-2402 +20015 20015 Methyl chloride (HCC-40) +20016 20016 Carbon tetrachloride (HCC-10) +20017 20017 HCC-140a +20018 20018 Methyl bromide (HBC-40B1) +20019 20019 Hexachlorocyclohexane (HCH) +20020 20020 Alpha hexachlorocyclohexane +20021 20021 Hexachlorobiphenyl (PCB-153) +#20022-29999 Reserved +30000 30000 Radioactive pollutant (tracer, defined by originating centre) +#30001-30009 Reserved +30010 30010 Hydrogen H-3 +30011 30011 Hydrogen organic bounded H-3o +30012 30012 Hydrogen inorganic H-3a +30013 30013 Beryllium 7 Be-7 +30014 30014 Beryllium 10 Be-10 +30015 30015 Carbon 14 C-14 +30016 30016 Carbon 14 CO2 C-14CO2 +30017 30017 Carbon 14 other gases C-14og +30018 30018 Nitrogen 13 N-13 +30019 30019 Nitrogen 16 N-16 +30020 30020 Fluorine 18 F-18 +30021 30021 Sodium 22 Na-22 +30022 30022 Phosphate 32 P-32 +30023 30023 Phosphate 33 P-33 +30024 30024 Sulfur 35 S-35 +30025 30025 Chlorine 36 Cl-36 +30026 30026 Potassium 40 K-40 +30027 30027 Argon 41 Ar-41 +30028 30028 Calcium 41 Ca-41 +30029 30029 Calcium 45 Ca-45 +30030 30030 Titanium 44 +30031 30031 Scandium 46 Sc-46 +30032 30032 Vanadium 48 V-48 +30033 30033 Vanadium 49 V-49 +30034 30034 Chrome 51 Cr-51 +30035 30035 Manganese 52 Mn-52 +30036 30036 Manganese 54 Mn-54 +30037 30037 Iron 55 Fe-55 +30038 30038 Iron 59 Fe-59 +30039 30039 Cobalt 56 Co-56 +30040 30040 Cobalt 57 Co-57 +30041 30041 Cobalt 58 Co-58 +30042 30042 Cobalt 60 Co-60 +30043 30043 Nickel 59 Ni-59 +30044 30044 Nickel 63 Ni-63 +30045 30045 Zinc 65 Zn-65 +30046 30046 Gallium 67 Ga-67 +30047 30047 Gallium 68 Ga-68 +30048 30048 Germanium 68 Ge-68 +30049 30049 Germanium 69 Ge-69 +30050 30050 Arsenic 73 As-73 +30051 30051 Selenium 75 Se-75 +30052 30052 Selenium 79 Se-79 +30053 30053 Rubidium 81 Rb-81 +30054 30054 Rubidium 83 Rb-83 +30055 30055 Rubidium 84 Rb-84 +30056 30056 Rubidium 86 Rb-86 +30057 30057 Rubidium 87 Rb-87 +30058 30058 Rubidium 88 Rb-88 +30059 30059 Krypton 85 Kr-85 +30060 30060 Krypton 85 metastable Kr-85m +30061 30061 Krypton 87 Kr-87 +30062 30062 Krypton 88 Kr-88 +30063 30063 Krypton 89 Kr-89 +30064 30064 Strontium 85 Sr-85 +30065 30065 Strontium 89 Sr-89 +30066 30066 Strontium 89/90 Sr-8990 +30067 30067 Strontium 90 Sr-90 +30068 30068 Strontium 91 Sr-91 +30069 30069 Strontium 92 Sr-92 +30070 30070 Yttrium 87 Y-87 +30071 30071 Yttrium 88 Y-88 +30072 30072 Yttrium 90 Y-90 +30073 30073 Yttrium 91 Y-91 +30074 30074 Yttrium 91 metastable Y-91m +30075 30075 Yttrium 92 Y-92 +30076 30076 Yttrium 93 Y-93 +30077 30077 Zirconium 89 Zr-89 +30078 30078 Zirconium 93 Zr-93 +30079 30079 Zirconium 95 Zr-95 +30080 30080 Zirconium 97 Zr-97 +30081 30081 Niobium 93 metastable Nb-93m +30082 30082 Niobium 94 Nb-94 +30083 30083 Niobium 95 Nb-95 +30084 30084 Niobium 95 metastable Nb-95m +30085 30085 Niobium 97 Nb-97 +30086 30086 Niobium 97 metastable Nb-97m +30087 30087 Molybdenum 93 Mo-93 +30088 30088 Molybdenum 99 Mo-99 +30089 30089 Technetium 95 metastable Tc-95m +30090 30090 Technetium 96 Tc-96 +30091 30091 Technetium 99 Tc-99 +30092 30092 Technetium 99 metastable Tc-99m +30093 30093 Rhodium 99 Rh-99 +30094 30094 Rhodium 101 Rh-101 +30095 30095 Rhodium 102 metastable Rh-102m +30096 30096 Rhodium 103 metastable Rh-103m +30097 30097 Rhodium 105 Rh-105 +30098 30098 Rhodium 106 Rh-106 +30099 30099 Palladium 100 Pd-100 +30100 30100 Palladium 103 Pd-103 +30101 30101 Palladium 107 Pd-107 +30102 30102 Ruthenium 103 Ru-103 +30103 30103 Ruthenium 105 Ru-105 +30104 30104 Ruthenium 106 Ru-106 +30105 30105 Silver 108 metastable Ag-108m +30106 30106 Silver 110 metastable Ag-110m +30107 30107 Cadmium 109 Cd-109 +30108 30108 Cadmium 113 metastable Cd-113m +30109 30109 Cadmium 115 metastable Cd-115m +30110 30110 Indium 114 metastable In-114m +30111 30111 Tin 113 Sn-113 +30112 30112 Tin 119 metastable Sn-119m +30113 30113 Tin 121 metastable Sn-121m +30114 30114 Tin 122 Sn-122 +30115 30115 Tin 123 Sn-123 +30116 30116 Tin 126 Sn-126 +30117 30117 Antimony 124 Sb-124 +30118 30118 Antimony 125 Sb-125 +30119 30119 Antimony 126 Sb-126 +30120 30120 Antimony 127 Sb-127 +30121 30121 Antimony 129 Sb-129 +30122 30122 Tellurium 123 metastable Te-123m +30123 30123 Tellurium 125 metastable Te-125m +30124 30124 Tellurium 127 Te-127 +30125 30125 Tellurium 127 metastable Te-127m +30126 30126 Tellurium 129 Te-129 +30127 30127 Tellurium 129 metastable Te-129m +30128 30128 Tellurium 131 metastable Te-131m +30129 30129 Tellurium 132 Te-132 +30130 30130 Iodine 123 I-123 +30131 30131 Iodine 124 I-124 +30132 30132 Iodine 125 I-125 +30133 30133 Iodine 126 I-126 +30134 30134 Iodine 129 I-129 +30135 30135 Iodine 129 elementary gaseous I-129g +30136 30136 Iodine 129 organic bounded I-129o +30137 30137 Iodine 131 I-131 +30138 30138 Iodine 131 elementary gaseous I-131g +30139 30139 Iodine 131 organic bounded I-131o +30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go +30141 30141 Iodine 131 aerosol I-131a +30142 30142 Iodine 132 I-132 +30143 30143 Iodine 132 elementary gaseous I-132g +30144 30144 Iodine 132 organic bounded I-132o +30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go +30146 30146 Iodine 132 aerosol I-132a +30147 30147 Iodine 133 I-133 +30148 30148 Iodine 133 elementary gaseous I-133g +30149 30149 Iodine 133 organic bounded I-133o +30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go +30151 30151 Iodine 133 aerosol I-133a +30152 30152 Iodine 134 I-134 +30153 30153 Iodine 134 elementary gaseous I-134g +30154 30154 Iodine 134 organic bounded I-134o +30155 30155 Iodine 135 I-135 +30156 30156 Iodine 135 elementary gaseous I-135g +30157 30157 Iodine 135 organic bounded I-135o +30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go +30159 30159 Iodine 135 aerosol I-135a +30160 30160 Xenon 131 metastable Xe-131m +30161 30161 Xenon 133 Xe-133 +30162 30162 Xenon 133 metastable Xe-133m +30163 30163 Xenon 135 Xe-135 +30164 30164 Xenon 135 metastable Xe-135m +30165 30165 Xenon 137 Xe-137 +30166 30166 Xenon 138 Xe-138 +30167 30167 Xenon sum of all Xenon isotopes Xe-sum +30168 30168 Caesium 131 Cs-131 +30169 30169 Caesium 134 Cs-134 +30170 30170 Caesium 135 Cs-135 +30171 30171 Caesium 136 Cs-136 +30172 30172 Caesium 137 Cs-137 +30173 30173 Barium 133 Ba-133 +30174 30174 Barium 137 metastable Ba-137m +30175 30175 Barium 140 Ba-140 +30176 30176 Cerium 139 Ce-139 +30177 30177 Cerium 141 Ce-141 +30178 30178 Cerium 143 Ce-143 +30179 30179 Cerium 144 Ce-144 +30180 30180 Lanthanum 140 La-140 +30181 30181 Lanthanum 141 La-141 +30182 30182 Praseodymium 143 Pr-143 +30183 30183 Praseodymium 144 Pr-144 +30184 30184 Praseodymium 144 metastable Pr-144m +30185 30185 Samarium 145 Sm-145 +30186 30186 Samarium 147 Sm-147 +30187 30187 Samarium 151 Sm-151 +30188 30188 Neodymium 147 Nd-147 +30189 30189 Promethium 146 Pm-146 +30190 30190 Promethium 147 Pm-147 +30191 30191 Promethium 151 Pm-151 +30192 30192 Europium 152 Eu-152 +30193 30193 Europium 154 Eu-154 +30194 30194 Europium 155 Eu-155 +30195 30195 Gadolinium 153 Gd-153 +30196 30196 Terbium 160 Tb-160 +30197 30197 Holmium 166 metastable Ho-166m +30198 30198 Thulium 170 Tm-170 +30199 30199 Ytterbium 169 Yb-169 +30200 30200 Hafnium 175 Hf-175 +30201 30201 Hafnium 181 Hf-181 +30202 30202 Tantalum 179 Ta-179 +30203 30203 Tantalum 182 Ta-182 +30204 30204 Rhenium 184 Re-184 +30205 30205 Iridium 192 Ir-192 +30206 30206 Mercury 203 Hg-203 +30207 30207 Thallium 204 Tl-204 +30208 30208 Thallium 207 Tl-207 +30209 30209 Thallium 208 Tl-208 +30210 30210 Thallium 209 Tl-209 +30211 30211 Bismuth 205 Bi-205 +30212 30212 Bismuth 207 Bi-207 +30213 30213 Bismuth 210 Bi-210 +30214 30214 Bismuth 211 Bi-211 +30215 30215 Bismuth 212 Bi-212 +30216 30216 Bismuth 213 Bi-213 +30217 30217 Bismuth 214 Bi-214 +30218 30218 Polonium 208 Po-208 +30219 30219 Polonium 210 Po-210 +30220 30220 Polonium 212 Po-212 +30221 30221 Polonium 213 Po-213 +30222 30222 Polonium 214 Po-214 +30223 30223 Polonium 215 Po-215 +30224 30224 Polonium 216 Po-216 +30225 30225 Polonium 218 Po-218 +30226 30226 Lead 209 Pb-209 +30227 30227 Lead 210 Pb-210 +30228 30228 Lead 211 Pb-211 +30229 30229 Lead 212 Pb-212 +30230 30230 Lead 214 Pb-214 +30231 30231 Astatine 217 At-217 +30232 30232 Radon 219 Rn-219 +30233 30233 Radon 220 Rn-220 +30234 30234 Radon 222 Rn-222 +30235 30235 Francium 221 Fr-221 +30236 30236 Francium 223 Fr-223 +30237 30237 Radium 223 Ra-223 +30238 30238 Radium 224 Ra-224 +30239 30239 Radium 225 Ra-225 +30240 30240 Radium 226 Ra-226 +30241 30241 Radium 228 Ra-228 +30242 30242 Actinium 225 Ac-225 +30243 30243 Actinium 227 Ac-227 +30244 30244 Actinium 228 Ac-228 +30245 30245 Thorium 227 Th-227 +30246 30246 Thorium 228 Th-228 +30247 30247 Thorium 229 Th-229 +30248 30248 Thorium 230 Th-230 +30249 30249 Thorium 231 Th-231 +30250 30250 Thorium 232 Th-232 +30251 30251 Thorium 234 Th-234 +30252 30252 Protactinium 231 Pa-231 +30253 30253 Protactinium 233 Pa-233 +30254 30254 Protactinium 234 metastable Pa-234m +30255 30255 Uranium 232 U-232 +30256 30256 Uranium 233 U-233 +30257 30257 Uranium 234 U-234 +30258 30258 Uranium 235 U-235 +30259 30259 Uranium 236 U-236 +30260 30260 Uranium 237 U-237 +30261 30261 Uranium 238 U-238 +30262 30262 Plutonium 236 Pu-236 +30263 30263 Plutonium 238 Pu-238 +30264 30264 Plutonium 239 Pu-239 +30265 30265 Plutonium 240 Pu-240 +30266 30266 Plutonium 241 Pu-241 +30267 30267 Plutonium 242 Pu-242 +30268 30268 Plutonium 244 Pu-244 +30269 30269 Neptunium 237 Np-237 +30270 30270 Neptunium 238 Np-238 +30271 30271 Neptunium 239 Np-239 +30272 30272 Americium 241 Am-241 +30273 30273 Americium 242 Am-242 +30274 30274 Americium 242 metastable Am-242m +30275 30275 Americium 243 Am-243 +30276 30276 Curium 242 Cm-242 +30277 30277 Curium 243 Cm-243 +30278 30278 Curium 244 Cm-244 +30279 30279 Curium 245 Cm-245 +30280 30280 Curium 246 Cm-246 +30281 30281 Curium 247 Cm-247 +30282 30282 Curium 248 Cm-248 +30283 30283 Curium 243/244 Cm-243244 +30284 30284 Plutonium 238/Americium 241 Pu-238Am-241 +30285 30285 Plutonium 239/240 Pu-239240 +30286 30286 Berkelium 249 Bk-249 +30287 30287 Californium 249 Cf-249 +30288 30288 Californium 250 Cf-250 +30289 30289 Californium 252 Cf-252 +30290 30290 Sum aerosol particulates SumAer +30291 30291 Sum Iodine SumIod +30292 30292 Sum noble gas SumNG +30293 30293 Activation gas ActGas +30294 30294 Cs-137 Equivalent EquCs137 +#30295-59999 Reserved +60000 60000 HOx radical (OH+HO2) +60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2) +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen NOx +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy +60005 60005 Total inorganic chlorine Clx +60006 60006 Total inorganic bromine Brx +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped alkanes +60010 60010 Lumped alkenes +60011 60011 Lumped aromatic compounds +60012 60012 Lumped terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon +60016 60016 Lumped oxygenated hydrocarbons +#60017-61999 Reserved +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +62013 62013 Black carbon hydrophilic dry +62014 62014 Black carbon hydrophobic dry +62015 62015 Particulate organic matter hydrophilic dry +62016 62016 Particulate organic matter hydrophobic dry +62017 62017 Nitrate hydrophilic dry +62018 62018 Nitrate hydrophobic dry +#62019-65534 Reserved +65535 65535 Missing diff --git a/definitions/grib2/tables/10/4.234.table b/definitions/grib2/tables/10/4.234.table new file mode 100644 index 000000000..bdf7cf0ec --- /dev/null +++ b/definitions/grib2/tables/10/4.234.table @@ -0,0 +1,21 @@ +# Canopy Cover Fraction (to be used as partitioned parameter) +1 1 Crops Mixed Farming +2 2 Short Grass +3 3 Evergreen Needleleaf Trees +4 4 Deciduous Needleleaf Trees +5 5 Deciduous Broadleaf Trees +6 6 Evergreen Broadleaf Trees +7 7 Tall Grass +8 8 Desert +9 9 Tundra +10 10 Irrigated Crops +11 11 Semidesert +12 12 Ice Caps and Glaciers +13 13 Bogs and Marshes +14 14 Inland Water +15 15 Ocean +16 16 Evergreen Shrubs +17 17 Deciduous Shrubs +18 18 Mixed Forest +19 19 Interrupted Forest +20 20 Water and Land Mixtures diff --git a/definitions/grib2/tables/10/4.235.table b/definitions/grib2/tables/10/4.235.table new file mode 100644 index 000000000..e18bbfbb8 --- /dev/null +++ b/definitions/grib2/tables/10/4.235.table @@ -0,0 +1,8 @@ +# Soil texture fraction +1 1 coarse +2 2 medium +3 3 medium-fine +4 4 fine +5 5 very-fine +6 6 organic +7 7 tropical-organic diff --git a/definitions/grib2/tables/10/4.3.table b/definitions/grib2/tables/10/4.3.table new file mode 100644 index 000000000..2eda6a044 --- /dev/null +++ b/definitions/grib2/tables/10/4.3.table @@ -0,0 +1,16 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +9 9 Climatological +10 10 Probability-weighted forecast +11 11 Bias-corrected ensemble forecast +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.4.table b/definitions/grib2/tables/10/4.4.table new file mode 100644 index 000000000..7087ebddb --- /dev/null +++ b/definitions/grib2/tables/10/4.4.table @@ -0,0 +1,17 @@ +# Code table 4.4 - Indicator of unit of time range +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +# 8-9 Reserved +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.5.table b/definitions/grib2/tables/10/4.5.table new file mode 100644 index 000000000..1f2d690d7 --- /dev/null +++ b/definitions/grib2/tables/10/4.5.table @@ -0,0 +1,49 @@ +# Code table 4.5 - Fixed surface types and units +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0 degree C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +10 10 Entire atmosphere +11 11 Cumulonimbus (CB) base (m) +12 12 Cumulonimbus (CB) top (m) +# 13-19 Reserved +20 20 Isothermal level (K) +# 21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level +112 112 Reserved +113 113 Logarithmic hybrid level +114 114 Snow level (Numeric) +# 115-116 Reserved +117 117 Mixed layer depth (m) +118 hhl Hybrid height level +119 hpl Hybrid pressure level +# 120-149 Reserved +150 150 Generalized vertical height coordinate +# 151-159 Reserved +160 160 Depth below sea level m +161 161 Depth below water surface (m) +162 162 Lake or river bottom +163 163 Bottom of sediment layer +164 164 Bottom of thermally active sediment layer +165 165 Bottom of sediment layer penetrated by thermal wave +166 166 Mixing layer +# 167-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.6.table b/definitions/grib2/tables/10/4.6.table new file mode 100644 index 000000000..ac428b0dd --- /dev/null +++ b/definitions/grib2/tables/10/4.6.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +4 4 Multi-model forecast +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.7.table b/definitions/grib2/tables/10/4.7.table new file mode 100644 index 000000000..bbeb36642 --- /dev/null +++ b/definitions/grib2/tables/10/4.7.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members +6 6 Unweighted mean of the cluster members +7 7 Interquartile range (range between the 25th and 75th quantile) +8 8 Minimum of all ensemble members +9 9 Maximum of all ensemble members +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.8.table b/definitions/grib2/tables/10/4.8.table new file mode 100644 index 000000000..addf015e2 --- /dev/null +++ b/definitions/grib2/tables/10/4.8.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Anomaly correlation +1 1 Root mean square +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.9.table b/definitions/grib2/tables/10/4.9.table new file mode 100644 index 000000000..06ab925d9 --- /dev/null +++ b/definitions/grib2/tables/10/4.9.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits (the range includes the lower limit but not the upper limit) +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/4.91.table b/definitions/grib2/tables/10/4.91.table new file mode 100644 index 000000000..df28eba8e --- /dev/null +++ b/definitions/grib2/tables/10/4.91.table @@ -0,0 +1,16 @@ +# Code table 4.91 - Type of Interval +0 0 Smaller than first limit +1 1 Greater than second limit +2 2 Between first and second limit. The range includes the first limit but not the second limit +3 3 Greater than first limit +4 4 Smaller than second limit +5 5 Smaller or equal first limit +6 6 Greater or equal second limit +7 7 Between first and second. The range includes the first limit and the second limit +8 8 Greater or equal first limit +9 9 Smaller or equal second limit +10 10 Between first and second limit. The range includes the second limit but not the first limit +11 11 Equal to first limit. +# 12-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/10/5.0.table b/definitions/grib2/tables/10/5.0.table new file mode 100644 index 000000000..44482726c --- /dev/null +++ b/definitions/grib2/tables/10/5.0.table @@ -0,0 +1,24 @@ +# Code table 5.0 - Data representation template number +0 0 Grid point data - simple packing +1 1 Matrix value at grid point - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - IEEE floating point data +6 6 Grid point data - simple packing with pre-processing +40 40 Grid point data - JPEG 2000 code stream format +41 41 Grid point data - Portable Network Graphics (PNG) +#42-49 Reserved +50 50 Spectral data - simple packing +51 51 Spherical harmonics data - complex packing +#52-60 Reserved +61 61 Grid point data - simple packing with logarithm pre-processing +# 62-199 Reserved +200 200 Run length packing with level values +# 201-49151 Reserved +# 49152-65534 Reserved for local use +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling +50000 50000 Sperical harmonics ieee packing +50001 50001 Second order packing +50002 50002 Second order packing +65535 65535 Missing diff --git a/definitions/grib2/tables/10/5.1.table b/definitions/grib2/tables/10/5.1.table new file mode 100644 index 000000000..e79e7c101 --- /dev/null +++ b/definitions/grib2/tables/10/5.1.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Floating point +1 1 Integer +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/5.2.table b/definitions/grib2/tables/10/5.2.table new file mode 100644 index 000000000..7a4500ecd --- /dev/null +++ b/definitions/grib2/tables/10/5.2.table @@ -0,0 +1,8 @@ +# Code table 5.2 - Matrix coordinate value function definition +0 0 Explicit coordinate values set +1 1 Linear coordinates f(1)=C1, f(n)=f(n-1)+C2 +# 2-10 Reserved +11 11 Geometric coordinates f(1)=C1, f(n)=C2*f(n-1) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/5.3.table b/definitions/grib2/tables/10/5.3.table new file mode 100644 index 000000000..455a53920 --- /dev/null +++ b/definitions/grib2/tables/10/5.3.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 1 Direction degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/5.4.table b/definitions/grib2/tables/10/5.4.table new file mode 100644 index 000000000..52a782cb7 --- /dev/null +++ b/definitions/grib2/tables/10/5.4.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Row by row splitting +1 1 General group splitting +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/5.40.table b/definitions/grib2/tables/10/5.40.table new file mode 100644 index 000000000..99e76ca33 --- /dev/null +++ b/definitions/grib2/tables/10/5.40.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Lossless +1 1 Lossy +# 2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/10/5.40000.table b/definitions/grib2/tables/10/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/10/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/10/5.5.table b/definitions/grib2/tables/10/5.5.table new file mode 100644 index 000000000..0be38fd21 --- /dev/null +++ b/definitions/grib2/tables/10/5.5.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/5.50002.table b/definitions/grib2/tables/10/5.50002.table new file mode 100644 index 000000000..10c243cb0 --- /dev/null +++ b/definitions/grib2/tables/10/5.50002.table @@ -0,0 +1,19 @@ +# second order packing modes table + +1 0 no boustrophedonic +1 1 boustrophedonic +2 0 Reserved +2 1 Reserved +3 0 Reserved +3 1 Reserved +4 0 Reserved +4 1 Reserved +5 0 Reserved +5 1 Reserved +6 0 Reserved +6 1 Reserved +7 0 Reserved +7 1 Reserved +8 0 Reserved +8 1 Reserved + diff --git a/definitions/grib2/tables/10/5.6.table b/definitions/grib2/tables/10/5.6.table new file mode 100644 index 000000000..49fdd3fea --- /dev/null +++ b/definitions/grib2/tables/10/5.6.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/10/5.7.table b/definitions/grib2/tables/10/5.7.table new file mode 100644 index 000000000..02755829a --- /dev/null +++ b/definitions/grib2/tables/10/5.7.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 IEEE 32-bit (I=4 in section 7) +2 2 IEEE 64-bit (I=8 in section 7) +3 3 IEEE 128-bit (I=16 in section 7) +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/10/5.8.table b/definitions/grib2/tables/10/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/10/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/10/5.9.table b/definitions/grib2/tables/10/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/10/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/10/6.0.table b/definitions/grib2/tables/10/6.0.table new file mode 100644 index 000000000..d80c6114b --- /dev/null +++ b/definitions/grib2/tables/10/6.0.table @@ -0,0 +1,6 @@ +# Code table 6.0 - Bit map indicator +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 1-253 A bit map predetermined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same GRIB message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/10/stepType.table b/definitions/grib2/tables/10/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/10/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/2/0.0.table b/definitions/grib2/tables/2/0.0.table new file mode 100644 index 000000000..fd2056350 --- /dev/null +++ b/definitions/grib2/tables/2/0.0.table @@ -0,0 +1,10 @@ +#Code Table 0.0: Discipline of processed data in the GRIB message, number of GRIB Master Table +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/1.0.table b/definitions/grib2/tables/2/1.0.table new file mode 100644 index 000000000..a34f44ee1 --- /dev/null +++ b/definitions/grib2/tables/2/1.0.table @@ -0,0 +1,7 @@ +# Code Table 1.0: GRIB Master Tables Version Number +0 0 Experimental +1 1 Initial operational version number +2 2 Previous operational version number +3 3 Current operational version number implemented on 2 November 2005 +# 4-254 Future operational version numbers +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/2/1.1.table b/definitions/grib2/tables/2/1.1.table new file mode 100644 index 000000000..6c5a60361 --- /dev/null +++ b/definitions/grib2/tables/2/1.1.table @@ -0,0 +1,5 @@ +# Code Table 1.1 GRIB Local Tables Version Number +0 0 Local tables not used +# . Only table entries and templates from the current Master table are valid. +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/2/1.2.table b/definitions/grib2/tables/2/1.2.table new file mode 100644 index 000000000..eb8755209 --- /dev/null +++ b/definitions/grib2/tables/2/1.2.table @@ -0,0 +1,8 @@ +# CODE TABLE 1.2, Significance of Reference Time +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +#4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/1.3.table b/definitions/grib2/tables/2/1.3.table new file mode 100644 index 000000000..d4ed48c63 --- /dev/null +++ b/definitions/grib2/tables/2/1.3.table @@ -0,0 +1,10 @@ +# CODE TABLE 1.3, Production status of data +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 TIGGE Operational products +5 5 TIGGE test products +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/1.4.table b/definitions/grib2/tables/2/1.4.table new file mode 100644 index 000000000..ac21f5c4c --- /dev/null +++ b/definitions/grib2/tables/2/1.4.table @@ -0,0 +1,13 @@ +# CODE TABLE 1.4, Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event Probability +# 8-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/3.0.table b/definitions/grib2/tables/2/3.0.table new file mode 100644 index 000000000..6030a5132 --- /dev/null +++ b/definitions/grib2/tables/2/3.0.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.0, Source of Grid Definition +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition Defined by originating centre +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/2/3.1.table b/definitions/grib2/tables/2/3.1.table new file mode 100644 index 000000000..6101b648c --- /dev/null +++ b/definitions/grib2/tables/2/3.1.table @@ -0,0 +1,43 @@ +# CODE TABLE 3.1, Grid Definition Template Number +0 0 Latitude/longitude. Also called equidistant cylindrical, or Plate Carree +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +# 4-9 Reserved +10 10 Mercator +# 11-19 Reserved +20 20 Polar stereographic can be south or north +# 21-29 Reserved +30 30 Lambert Conformal can be secant or tangent, conical or bipolar +31 31 Albers equal-area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +# 101-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid, with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovm�ller diagram grid, with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/2/3.10.table b/definitions/grib2/tables/2/3.10.table new file mode 100644 index 000000000..ae5baf9d5 --- /dev/null +++ b/definitions/grib2/tables/2/3.10.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.10, Scanning mode for one diamond +1 0 Points scan in +i direction, i.e. from pole to equator +1 1 Points scan in -i direction, i.e. from equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction is consecutive diff --git a/definitions/grib2/tables/2/3.11.table b/definitions/grib2/tables/2/3.11.table new file mode 100644 index 000000000..9a84d4a95 --- /dev/null +++ b/definitions/grib2/tables/2/3.11.table @@ -0,0 +1,5 @@ +# CODE TABLE 3.11, Interpretation of list of numbers defining number of points +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +255 255 Missing diff --git a/definitions/grib2/tables/2/3.15.table b/definitions/grib2/tables/2/3.15.table new file mode 100644 index 000000000..bb431e14f --- /dev/null +++ b/definitions/grib2/tables/2/3.15.table @@ -0,0 +1,25 @@ +# CODE TABLE 3.15, Physical meaning of vertical coordinate +# 0-19 Reserved +20 20 Temperature K +# 21-99 Reserved +100 100 Pressure Pa +101 101 Pressure deviation from mean sea level Pa +102 102 Altitude above mean sea level m +103 103 Height above ground (see Note 1) m +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface m +107 pt Potential temperature (theta) K +108 108 Pressure deviation from ground to level Pa +109 pv Potential vorticity K m-2 kg-1 s-1 +110 110 Geometrical height m +111 111 Eta coordinate (see Note 2) +112 112 Geopotential height gpm +# 113-159 Reserved +160 160 Depth below sea level m +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Negative values associated to this coordinate will indicate depth below ground surface. If values are all below surface, use of entry 106 is recommended, with positive coordinate values instead. +# (2) The Eta vertical coordinate system involves normalizing the pressure at some point on a specific level by the mean sea level pressure at that point. diff --git a/definitions/grib2/tables/2/3.2.table b/definitions/grib2/tables/2/3.2.table new file mode 100644 index 000000000..d037ee120 --- /dev/null +++ b/definitions/grib2/tables/2/3.2.table @@ -0,0 +1,11 @@ +# CODE TABLE 3.2, Shape of the Earth +0 0 Earth assumed spherical with radius = 6,367,470.0 m +1 1 Earth assumed spherical with radius specified by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6,378,160.0 m, minor axis = 6,356,775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6,378,137.0 m, minor axis = 6,356,752.314 m, f = 1/298.257222101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6,371,229.0 m +# 7-191 Reserved +# 192- 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/3.20.table b/definitions/grib2/tables/2/3.20.table new file mode 100644 index 000000000..cfa35ae38 --- /dev/null +++ b/definitions/grib2/tables/2/3.20.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.20, Type of horizontal line +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/3.21.table b/definitions/grib2/tables/2/3.21.table new file mode 100644 index 000000000..c2fd94586 --- /dev/null +++ b/definitions/grib2/tables/2/3.21.table @@ -0,0 +1,8 @@ +# CODE TABLE 3.21, Vertical dimension coordinate values definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +# 2-10 Reserved +11 11 Geometric coordinates +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/3.3.table b/definitions/grib2/tables/2/3.3.table new file mode 100644 index 000000000..84cbb8bcc --- /dev/null +++ b/definitions/grib2/tables/2/3.3.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.3, Resolution and Component Flags +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates respectively diff --git a/definitions/grib2/tables/2/3.4.table b/definitions/grib2/tables/2/3.4.table new file mode 100644 index 000000000..51d0664b2 --- /dev/null +++ b/definitions/grib2/tables/2/3.4.table @@ -0,0 +1,9 @@ +# FLAG TABLE 3.4, Scanning Mode +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction diff --git a/definitions/grib2/tables/2/3.5.table b/definitions/grib2/tables/2/3.5.table new file mode 100644 index 000000000..117b26be3 --- /dev/null +++ b/definitions/grib2/tables/2/3.5.table @@ -0,0 +1,5 @@ +# FLAG TABLE 3.5, Projection Centre +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bi-polar and symmetric diff --git a/definitions/grib2/tables/2/3.6.table b/definitions/grib2/tables/2/3.6.table new file mode 100644 index 000000000..41dd97e4a --- /dev/null +++ b/definitions/grib2/tables/2/3.6.table @@ -0,0 +1,2 @@ +# CODE TABLE 3.6, Spectral data representation type +1 1 The Associated Legendre Functions of the first kind are defined by: diff --git a/definitions/grib2/tables/2/3.7.table b/definitions/grib2/tables/2/3.7.table new file mode 100644 index 000000000..3aaf30bf9 --- /dev/null +++ b/definitions/grib2/tables/2/3.7.table @@ -0,0 +1,11 @@ +# Code Table 3.7: Spectral data representation mode +0 0 Reserved +1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) +# 2-254 Reserved +255 255 Missing +# Note: +# +#(1) Values of N(m) for common truncations cases: +# Triangular M = J = K, N(m) = J +# Rhomboidal K = J + M, N(m) = J+m +# Trapezoidal K = J, K > M, N(m) = J diff --git a/definitions/grib2/tables/2/3.8.table b/definitions/grib2/tables/2/3.8.table new file mode 100644 index 000000000..0d9b7d001 --- /dev/null +++ b/definitions/grib2/tables/2/3.8.table @@ -0,0 +1,8 @@ +# Code table 3.8: Grid point position +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/3.9.table b/definitions/grib2/tables/2/3.9.table new file mode 100644 index 000000000..800c08259 --- /dev/null +++ b/definitions/grib2/tables/2/3.9.table @@ -0,0 +1,3 @@ +# FLAG TABLE 3.9, Numbering order of diamonds as seen from the corresponding pole +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e., counter-clockwise) orientation diff --git a/definitions/grib2/tables/2/4.0.table b/definitions/grib2/tables/2/4.0.table new file mode 100644 index 000000000..c22d7d3d2 --- /dev/null +++ b/definitions/grib2/tables/2/4.0.table @@ -0,0 +1,38 @@ +# CODE TABLE 4.0, Product Definition Template Number +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecast based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based in all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +20 20 Radar product +30 30 Satellite product +31 31 Satellite product +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +46 46 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of atmospheric aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +254 254 CCITT IA5 character string +1000 1000 Cross section of analysis and forecast at a point in time +1001 1001 Cross section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed +1100 1100 Hovm�ller-type grid with no averaging or other statistical processing +1101 1101 Hovm�ller-type grid with averaging or other statistical processing +65335 65535 Missing diff --git a/definitions/grib2/tables/2/4.1.0.table b/definitions/grib2/tables/2/4.1.0.table new file mode 100644 index 000000000..33d1c3984 --- /dev/null +++ b/definitions/grib2/tables/2/4.1.0.table @@ -0,0 +1,30 @@ +#Discipline 0: Meteorological products +#Category Description +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave Radiation +5 5 Long-wave Radiation +6 6 Cloud +7 7 Thermodynamic Stability indices +8 8 Kinematic Stability indices +9 9 Temperature Probabilities +10 10 Moisture Probabilities +11 11 Momentum Probabilities +12 12 Mass Probabilities +13 13 Aerosols +14 14 Trace gases (e.g., ozone, CO2) +15 15 Radar +16 16 Forecast Radar Imagery +17 17 Electro-dynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical or physical constituents +# 20-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/2/4.1.1.table b/definitions/grib2/tables/2/4.1.1.table new file mode 100644 index 000000000..ebb7d9ea0 --- /dev/null +++ b/definitions/grib2/tables/2/4.1.1.table @@ -0,0 +1,9 @@ +#Discipline 1: Hydrological products +#Category Description +0 0 Hydrology basic products +1 1 Hydrology probabilities +#2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/2/4.1.10.table b/definitions/grib2/tables/2/4.1.10.table new file mode 100644 index 000000000..45b08caaa --- /dev/null +++ b/definitions/grib2/tables/2/4.1.10.table @@ -0,0 +1,12 @@ +#Discipline 10: Oceanographic Products +#Category Description +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface Properties +4 4 Sub-surface Properties +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/2/4.1.2.table b/definitions/grib2/tables/2/4.1.2.table new file mode 100644 index 000000000..f7f2ea2ba --- /dev/null +++ b/definitions/grib2/tables/2/4.1.2.table @@ -0,0 +1,11 @@ +#Discipline 2: Land Surface Products +#Category Description +0 0 Vegetation/Biomass +1 1 Agri-/aquacultural Special Products +2 2 Transportation-related Products +3 3 Soil Products +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/2/4.1.3.table b/definitions/grib2/tables/2/4.1.3.table new file mode 100644 index 000000000..f7578e163 --- /dev/null +++ b/definitions/grib2/tables/2/4.1.3.table @@ -0,0 +1,9 @@ +#Discipline 3: Space Products +#Category Description +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/2/4.1.table b/definitions/grib2/tables/2/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/2/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/2/4.10.table b/definitions/grib2/tables/2/4.10.table new file mode 100644 index 000000000..9cf447b69 --- /dev/null +++ b/definitions/grib2/tables/2/4.10.table @@ -0,0 +1,14 @@ +# CODE TABLE 4.10, Type of statistical processing + +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (Value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (Temporal variance) +8 8 Difference (Value at the start of time range minus value at the end) +9 ratio Ratio +# 192 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/2/4.11.table b/definitions/grib2/tables/2/4.11.table new file mode 100644 index 000000000..68901aac4 --- /dev/null +++ b/definitions/grib2/tables/2/4.11.table @@ -0,0 +1,9 @@ +# CODE TABLE 4.11, Type of time intervals + +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.12.table b/definitions/grib2/tables/2/4.12.table new file mode 100644 index 000000000..86b6177be --- /dev/null +++ b/definitions/grib2/tables/2/4.12.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.12, Operating Mode + +0 0 Maintenance Mode +1 1 Clear air +2 2 Precipitation +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.13.table b/definitions/grib2/tables/2/4.13.table new file mode 100644 index 000000000..ddd7537d0 --- /dev/null +++ b/definitions/grib2/tables/2/4.13.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.13, Quality Control Indicator + +0 0 No quality control applied +1 1 Quality control applied +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.14.table b/definitions/grib2/tables/2/4.14.table new file mode 100644 index 000000000..69984d720 --- /dev/null +++ b/definitions/grib2/tables/2/4.14.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.14, Clutter Filter Indicator + +0 0 No clutter filter used +1 1 Clutter filter used +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.15.table b/definitions/grib2/tables/2/4.15.table new file mode 100644 index 000000000..49b0b2d26 --- /dev/null +++ b/definitions/grib2/tables/2/4.15.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.15, Type of auxiliary information + +0 0 Confidence level ('grib2/4.151.table') +1 1 Delta time (seconds) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.151.table b/definitions/grib2/tables/2/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/2/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.2.0.0.table b/definitions/grib2/tables/2/4.2.0.0.table new file mode 100644 index 000000000..0386b8cd2 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.0.table @@ -0,0 +1,23 @@ +# Product Discipline 0: Meteorological products, Parameter Category 0: Temperature +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew point temperature (K) +7 7 Dew point depression (or deficit) (K) +8 8 Lapse rate (K m-1) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin Temperature (K) +#17-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.1.table b/definitions/grib2/tables/2/4.2.0.1.table new file mode 100644 index 000000000..154f2d007 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.1.table @@ -0,0 +1,62 @@ +# Product Discipline 0: Meteorological products, Parameter Category 1: Moisture +0 0 Specific humidity (kg kg-1) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg kg-1) +3 3 Precipitable water (kg m-2) +4 4 Vapor pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age (day) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type (code table (4.201) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg kg-1) +22 22 Cloud mixing ratio (kg kg-1) +23 23 Ice water mixing ratio (kg kg-1) +24 24 Rain mixing ratio (kg kg-1) +25 25 Snow mixing ratio (kg kg-1) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category code table (4.202) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg kg-1) +33 33 Categorical rain (Code table 4.222) +34 34 Categorical freezing rain (Code table 4.222) +35 35 Categorical ice pellets (Code table 4.222) +36 36 Categorical snow (Code table 4.222) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +51 51 Total column water (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m s-1) +58 58 Convective snowfall rate (m s-1) +59 59 Large scale snowfall rate (m s-1) +60 60 Snow depth water equivalent (kg m-2) +#47-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.13.table b/definitions/grib2/tables/2/4.2.0.13.table new file mode 100644 index 000000000..8fc3425af --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.13.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 13: Aerosols +0 0 Aerosol type (Code table 4.205) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.14.table b/definitions/grib2/tables/2/4.2.0.14.table new file mode 100644 index 000000000..309c40d47 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.14.table @@ -0,0 +1,7 @@ +# Product Discipline 0: Meteorological products, Parameter Category 14: Trace Gases +0 0 Total ozone (Dobson) +1 1 Ozone mixing ratio (kg kg-1) +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.15.table b/definitions/grib2/tables/2/4.2.0.15.table new file mode 100644 index 000000000..bb419178b --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.15.table @@ -0,0 +1,14 @@ +# Product Discipline 0 - Meteorological products, Parameter Category 15: Radar +0 0 Base spectrum width (m s-1) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m s-1) +3 3 Vertically-integrated liquid (kg m-1) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.18.table b/definitions/grib2/tables/2/4.2.0.18.table new file mode 100644 index 000000000..5c0fd6e5d --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.18.table @@ -0,0 +1,14 @@ +# Product Discipline 0: Meteorological products, Parameter Category 18: Nuclear/radiology +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of Iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of Iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.19.table b/definitions/grib2/tables/2/4.2.0.19.table new file mode 100644 index 000000000..369c3f657 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.19.table @@ -0,0 +1,24 @@ +# Product Discipline 0: Meteorological products, Parameter Category 19: Physical atmospheric properties +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 mixed layer depth (m) +4 4 Volcanic ash (Code table 4.206) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing (Code table 4.207) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence (Code table 4.208) +11 11 Turbulent kinetic energy (J kg-1) +12 12 Planetary boundary layer regime (Code table 4.209) +13 13 Contrail intensity (Code table 4.210) +14 14 Contrail engine type (Code table 4.211) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +# 19-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.190.table b/definitions/grib2/tables/2/4.2.0.190.table new file mode 100644 index 000000000..b1f47bc02 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.190.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 190: CCITT IA5 string +0 0 Arbitrary text string (CCITTIA5) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.191.table b/definitions/grib2/tables/2/4.2.0.191.table new file mode 100644 index 000000000..affb98f42 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.191.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 191: Miscellaneous +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.2.table b/definitions/grib2/tables/2/4.2.0.2.table new file mode 100644 index 000000000..f45206bff --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.2.table @@ -0,0 +1,35 @@ +# Product Discipline 0: Meteorological products, Parameter Category 2: Momentum +0 0 Wind direction [from which blowing] (deg true) +1 1 Wind speed (m s-1) +2 2 u-component of wind (m s-1) +3 3 v-component of wind (m s-1) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (s-1) +8 8 Vertical velocity [pressure] (Pa s-1) +9 9 Vertical velocity [geometric] (m s-1) +10 10 Absolute vorticity (s-1) +11 11 Absolute divergence (s-1) +12 12 Relative vorticity (s-1) +13 13 Relative divergence (s-1) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (s-1) +16 16 Vertical v-component shear (s-1) +17 17 Momentum flux, u component (N m-2) +18 18 Momentum flux, v component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m s-1) +22 22 Wind speed [gust] (m s-1) +23 23 u-component of wind (gust) (m s-1) +24 24 v-component of wind (gust) (m s-1) +25 25 Vertical speed shear (s-1) +26 26 Horizontal momentum flux (N m-2) +27 27 U-component storm motion (m s-1) +28 28 V-component storm motion (m s-1) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m s-1) +# 31-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.2.0.20.table b/definitions/grib2/tables/2/4.2.0.20.table new file mode 100644 index 000000000..4e7f45db4 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.20.table @@ -0,0 +1,13 @@ +0 0 Mass density (concentration) kg.m-3 +1 1 Total column (integrated mass density) kg.m-2 +2 2 Volume mixing ratio (mole fraction in air) mole.mole-1 +3 3 Mass mixing ratio (mass fraction in air) kg.kg-1 +4 4 Surface dry deposition mass flux kg.m-2.s-1 +5 5 Surface wet deposition mass flux kg.m-2.s-1 +6 6 Atmosphere emission mass flux kg.m-2.s-1 +7 7 Chemical gross production rate of mole concentration mole.m-3.s-1 +8 8 Chemical gross destruction rate of mole concentration mole.m-3.s-1 +9 9 Surface dry deposition mass flux into stomata kg.m-2.s-1 +#10-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.2.0.3.table b/definitions/grib2/tables/2/4.2.0.3.table new file mode 100644 index 000000000..5c7e8151d --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.3.table @@ -0,0 +1,25 @@ +# Product Discipline 0: Meteorological products, Parameter Category 3: Mass + 0 0 Pressure (Pa) + 1 1 Pressure reduced to MSL (Pa) + 2 2 Pressure tendency (Pa s-1) + 3 3 ICAO Standard Atmosphere Reference Height (m) + 4 4 Geopotential (m2 s-2) + 5 5 Geopotential height (gpm) + 6 6 Geometric height (m) + 7 7 Standard deviation of height (m) + 8 8 Pressure anomaly (Pa) + 9 9 Geopotential height anomaly (gpm) + 10 10 Density (kg m-3) + 11 11 Altimeter setting (Pa) + 12 12 Thickness (m) + 13 13 Pressure altitude (m) + 14 14 Density altitude (m) + 15 15 5-wave geopotential height (gpm) + 16 16 Zonal flux of gravity wave stress (N m-2) + 17 17 Meridional flux of gravity wave stress (N m-2) + 18 18 Planetary boundary layer height (m) + 19 19 5-wave geopotential height anomaly (gpm) +# 20-191 Reserved +# 192-254 Reserved for local use + 255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.4.table b/definitions/grib2/tables/2/4.2.0.4.table new file mode 100644 index 000000000..815c184a2 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.4.table @@ -0,0 +1,14 @@ +# Product Discipline 0: Meteorological products, Parameter Category 4: Short-wave Radiation +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +9 8 Upward short-wave radiation flux (W m-2) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.5.table b/definitions/grib2/tables/2/4.2.0.5.table new file mode 100644 index 000000000..1b57fa301 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.5.table @@ -0,0 +1,11 @@ +# Product Discipline 0: Meteorological products, Parameter Category 5: Long-wave Radiation +0 0 Net long wave radiation flux (surface) (W m-2) +1 1 Net long wave radiation flux (top of atmosphere) (W m-2) +2 2 Long wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long wave radiation flux (W m-2) +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.6.table b/definitions/grib2/tables/2/4.2.0.6.table new file mode 100644 index 000000000..05cf72f57 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.6.table @@ -0,0 +1,30 @@ +# Product Discipline 0: Meteorological products, Parameter Category 6: Cloud +0 0 Cloud Ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type (Code table 4.203) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage (Code table 4.204) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J kg-1) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg kg-1) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg kg-1) +24 24 Sunshine (Numeric) +# 23-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.0.7.table b/definitions/grib2/tables/2/4.2.0.7.table new file mode 100644 index 000000000..78374fde5 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.0.7.table @@ -0,0 +1,18 @@ +# Product Discipline 0: Meteorological products, Parameter Category 7: Thermodynamic Stability Indices +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J kg-1) +7 7 Convective inhibition (J kg-1) +8 8 Storm relative helicity (J kg-1) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +#13-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.1.0.table b/definitions/grib2/tables/2/4.2.1.0.table new file mode 100644 index 000000000..97efaa8cc --- /dev/null +++ b/definitions/grib2/tables/2/4.2.1.0.table @@ -0,0 +1,16 @@ +# Product Discipline 1: Hydrologic products, Parameter Category 0: Hydrology basic products +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely sensed snow cover (Code table 4.215) +3 3 Elevation of snow covered terrain (Code table 4.216) +4 4 Snow water equivalent percent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Remotely sensed snow cover is expressed as a field of dimensionless, thematic values. The currently accepted values are for no-snow/no-cloud, 50, for clouds, 100, and for snow, 250. See code table 4.215. +# (2) A data field representing snow coverage by elevation portrays at which elevations there is a snow pack. The elevation values typically range from 0 to 90 in 100 m increments. A value of 253 is used to represent a no-snow/no-cloud data point. A value of 254 is used to represent a data point at which snow elevation could not be estimated because of clouds obscuring the remote sensor (when using aircraft or satellite measurements). +# (3) Snow water equivalent percent of normal is stored in percent of normal units. For example, a value of 110 indicates 110 percent of the normal snow water equivalent for a given depth of snow. + diff --git a/definitions/grib2/tables/2/4.2.1.1.table b/definitions/grib2/tables/2/4.2.1.1.table new file mode 100644 index 000000000..b7342ef2f --- /dev/null +++ b/definitions/grib2/tables/2/4.2.1.1.table @@ -0,0 +1,8 @@ +# Product Discipline 1: Hydrologic products, Parameter Category 1: Hydrology probabilities +0 0 Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) +1 1 Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.10.0.table b/definitions/grib2/tables/2/4.2.10.0.table new file mode 100644 index 000000000..479e26d51 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.10.0.table @@ -0,0 +1,20 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 0: Waves +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (Degree true) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (Degree true) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (Degree true) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (Degree true) +13 13 Secondary wave mean period (s) +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/2/4.2.10.1.table b/definitions/grib2/tables/2/4.2.10.1.table new file mode 100644 index 000000000..df18f31dd --- /dev/null +++ b/definitions/grib2/tables/2/4.2.10.1.table @@ -0,0 +1,8 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 1: Currents +0 0 Current direction (Degree true) +1 1 Current speed (m s-1) +2 2 u-component of current (m s-1) +3 3 v-component of current (m s-1) +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.2.10.2.table b/definitions/grib2/tables/2/4.2.10.2.table new file mode 100644 index 000000000..cb73da46c --- /dev/null +++ b/definitions/grib2/tables/2/4.2.10.2.table @@ -0,0 +1,12 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 2: Ice +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (Degree true) +3 3 Speed of ice drift (m s-1) +4 4 u-component of ice drift (m s-1) +5 5 v-component of ice drift (m s-1) +6 6 Ice growth rate (m s-1) +7 7 Ice divergence (s-1) +# 8-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.2.10.3.table b/definitions/grib2/tables/2/4.2.10.3.table new file mode 100644 index 000000000..a14ae22e3 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.10.3.table @@ -0,0 +1,6 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 3: Surface Properties +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.2.10.4.table b/definitions/grib2/tables/2/4.2.10.4.table new file mode 100644 index 000000000..a24c3c8c4 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.10.4.table @@ -0,0 +1,9 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 4: Sub-surface Properties +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg kg-1) +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.2.0.table b/definitions/grib2/tables/2/4.2.2.0.table new file mode 100644 index 000000000..fdc8ce0ef --- /dev/null +++ b/definitions/grib2/tables/2/4.2.2.0.table @@ -0,0 +1,29 @@ +# Product Discipline 2: Land surface products, Parameter Category 0: Vegetation/Biomass +0 0 Land cover (0=land, 1=sea) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg -2 s-1) +7 7 Model terrain height (m) +8 8 Land use (Code table 4.212) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadars mixing length scale (m) +15 15 Canopy conductance (m s-1) +16 16 Minimal stomatal resistance (s m-1) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy conductance (Proportion) +20 20 Soil moisture parameter in canopy conductance (Proportion) +21 21 Humidity parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +26 26 Wilting point (kg m-3) +# 23-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.2.3.table b/definitions/grib2/tables/2/4.2.2.3.table new file mode 100644 index 000000000..d6376fecb --- /dev/null +++ b/definitions/grib2/tables/2/4.2.2.3.table @@ -0,0 +1,16 @@ +# Product Discipline 2: Land surface products, Parameter Category 3: Soil Products +0 0 Soil type (Code table 4.213) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +# 11-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.3.0.table b/definitions/grib2/tables/2/4.2.3.0.table new file mode 100644 index 000000000..944566388 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.3.0.table @@ -0,0 +1,14 @@ +# Product discipline 3: Space products, Parameter Category 0: Image format products +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.3.1.table b/definitions/grib2/tables/2/4.2.3.1.table new file mode 100644 index 000000000..60d6e8420 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.3.1.table @@ -0,0 +1,11 @@ +# Product Discipline 3: Space products, Parameter Category 1: Quantitative products +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m s-1) +5 5 Estimated v component of wind (m s-1) +# 6-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/2/4.2.table b/definitions/grib2/tables/2/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/2/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/2/4.201.table b/definitions/grib2/tables/2/4.201.table new file mode 100644 index 000000000..7445c9c20 --- /dev/null +++ b/definitions/grib2/tables/2/4.201.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.201, Precipitation Type + +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.202.table b/definitions/grib2/tables/2/4.202.table new file mode 100644 index 000000000..69dbe3a5d --- /dev/null +++ b/definitions/grib2/tables/2/4.202.table @@ -0,0 +1,66 @@ +# CODE TABLE 4.202, Precipitable water category + +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.203.table b/definitions/grib2/tables/2/4.203.table new file mode 100644 index 000000000..d2ad10b07 --- /dev/null +++ b/definitions/grib2/tables/2/4.203.table @@ -0,0 +1,88 @@ +# CODE TABLE 4.203, Cloud type + +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground based fog beneath the lowest layer +12 12 Stratus - ground based fog beneath the lowest layer +13 13 Stratocumulus - ground based fog beneath the lowest layer +14 14 Cumulus - ground based fog beneath the lowest layer +15 15 Altostratus - ground based fog beneath the lowest layer +16 16 Nimbostratus - ground based fog beneath the lowest layer +17 17 Altocumulus - ground based fog beneath the lowest layer +18 18 Cirrostratus - ground based fog beneath the lowest layer +19 19 Cirrocumulus - ground based fog beneath the lowest layer +20 20 Cirrus - ground based fog beneath the lowest layer +191 191 Unknown +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.204.table b/definitions/grib2/tables/2/4.204.table new file mode 100644 index 000000000..23b60cf77 --- /dev/null +++ b/definitions/grib2/tables/2/4.204.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.204, Thunderstorm coverage + +0 0 None +1 1 Isolated (1% - 2%) +2 2 Few (3% - 15%) +3 3 Scattered (16% - 45%) +4 4 Numerous (> 45%) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.205.table b/definitions/grib2/tables/2/4.205.table new file mode 100644 index 000000000..98c7b48ec --- /dev/null +++ b/definitions/grib2/tables/2/4.205.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.205, Aerosol type + +0 0 Aerosol not present +1 1 Aerosol present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.206.table b/definitions/grib2/tables/2/4.206.table new file mode 100644 index 000000000..b1ef2e787 --- /dev/null +++ b/definitions/grib2/tables/2/4.206.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.206, Volcanic ash + +0 0 Not present +1 1 Present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.207.table b/definitions/grib2/tables/2/4.207.table new file mode 100644 index 000000000..13fc7b54b --- /dev/null +++ b/definitions/grib2/tables/2/4.207.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.207, Icing + +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.208.table b/definitions/grib2/tables/2/4.208.table new file mode 100644 index 000000000..15b514a07 --- /dev/null +++ b/definitions/grib2/tables/2/4.208.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.208, Turbulence + +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.209.table b/definitions/grib2/tables/2/4.209.table new file mode 100644 index 000000000..b4cca1d73 --- /dev/null +++ b/definitions/grib2/tables/2/4.209.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.209, Planetary boundary layer regime + +1 1 Stable +2 2 Mechanically driven turbulence +3 3 Forced convection +4 4 Free convection +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.210.table b/definitions/grib2/tables/2/4.210.table new file mode 100644 index 000000000..d05e07721 --- /dev/null +++ b/definitions/grib2/tables/2/4.210.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.210, Contrail intensity + +0 0 Contrail not present +1 1 Contrail present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.211.table b/definitions/grib2/tables/2/4.211.table new file mode 100644 index 000000000..604b2e643 --- /dev/null +++ b/definitions/grib2/tables/2/4.211.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.211, Contrail engine type + +0 0 Low bypass +1 1 High bypass +2 2 Non bypass +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.212.table b/definitions/grib2/tables/2/4.212.table new file mode 100644 index 000000000..7393238e7 --- /dev/null +++ b/definitions/grib2/tables/2/4.212.table @@ -0,0 +1,79 @@ +# CODE TABLE 4.212, Land Use + +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.213.table b/definitions/grib2/tables/2/4.213.table new file mode 100644 index 000000000..cc4bdfc1f --- /dev/null +++ b/definitions/grib2/tables/2/4.213.table @@ -0,0 +1,77 @@ +# CODE TABLE 4.213, Soil type + +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.215.table b/definitions/grib2/tables/2/4.215.table new file mode 100644 index 000000000..7e1442962 --- /dev/null +++ b/definitions/grib2/tables/2/4.215.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.215, Remotely Sensed Snow Coverage + +50 50 No-snow/no-cloud +100 100 Clouds +250 250 Snow +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.216.table b/definitions/grib2/tables/2/4.216.table new file mode 100644 index 000000000..dbe26b0e5 --- /dev/null +++ b/definitions/grib2/tables/2/4.216.table @@ -0,0 +1,95 @@ +# CODE TABLE 4.216, Elevation of Snow Covered Terrain + +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/2/4.217.table b/definitions/grib2/tables/2/4.217.table new file mode 100644 index 000000000..475ab686d --- /dev/null +++ b/definitions/grib2/tables/2/4.217.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.217, Cloud mask type + +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.220.table b/definitions/grib2/tables/2/4.220.table new file mode 100644 index 000000000..9fddcd49f --- /dev/null +++ b/definitions/grib2/tables/2/4.220.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.220, Horizontal dimension processed + +0 0 Latitude +1 1 Longitude +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.221.table b/definitions/grib2/tables/2/4.221.table new file mode 100644 index 000000000..2291eab60 --- /dev/null +++ b/definitions/grib2/tables/2/4.221.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.221, Treatment of missing data + +0 0 Not included +1 1 Extrapolated +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.230.table b/definitions/grib2/tables/2/4.230.table new file mode 100644 index 000000000..23e819b65 --- /dev/null +++ b/definitions/grib2/tables/2/4.230.table @@ -0,0 +1,47 @@ +#Code figure Code figure Meaning +0 0 Air +1 1 Ozone +2 2 Water vapour +3 3 Methane +4 4 Carbon dioxide +5 5 Carbon monoxide +6 6 Nitrogen dioxide +7 7 Nitrous oxide +8 8 Nitrogen monoxide +9 9 Formaldehyde +10 10 Sulphur dioxide +11 11 Nitric acid +12 12 All nitrogen oxides (NOy) expressed as nitrogen +13 13 Peroxyacetyl nitrate +14 14 Hydroxyl radical +15 15 Ammonia +16 16 Ammonium +17 17 Radon +18 18 Dimethyl sulphide +19 19 Hexachlorocyclohexane +20 20 Alpha hexachlorocyclohexane +21 21 Elemental mercury +22 22 Divalent mercury +23 23 Hexachlorobiphenyl +24 24 NOx expressed as nitrogen +25 25 Non-methane volatile organic compounds expressed as carbon +26 26 Anthropogenic non-methane volatile organic compounds expressed as carbon +27 27 Biogenic non-methane volatile organic compounds expressed as carbon +#28-39999 28-39999 Reserved +40000 40000 Sulphate dry aerosol +40001 40001 Black carbon dry aerosol +40002 40002 Particulate organic matter dry aerosol +40003 40003 Primary particulate organic matter dry aerosol +40004 40004 Secondary particulate organic matter dry aerosol +40005 40005 Sea salt dry aerosol +40006 40006 Dust dry aerosol +40007 40007 Mercury dry aerosol +40008 40008 PM10 aerosol +40009 40009 PM2P5 aerosol +40010 40010 PM1 aerosol +40011 40011 Nitrate dry aerosol +40012 40012 Ammonium dry aerosol +40013 40013 Water in ambient aerosol +#40014-63999 40014-63999 Reserved +#64000-65534 64000-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/2/4.3.table b/definitions/grib2/tables/2/4.3.table new file mode 100644 index 000000000..84a72352b --- /dev/null +++ b/definitions/grib2/tables/2/4.3.table @@ -0,0 +1,13 @@ +# CODE TABLE 4.3, Type of generating process +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.4.table b/definitions/grib2/tables/2/4.4.table new file mode 100644 index 000000000..61aa20c5f --- /dev/null +++ b/definitions/grib2/tables/2/4.4.table @@ -0,0 +1,16 @@ +# CODE TABLE 4.4, Indicator of unit of time range +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.5.table b/definitions/grib2/tables/2/4.5.table new file mode 100644 index 000000000..89c5fb175 --- /dev/null +++ b/definitions/grib2/tables/2/4.5.table @@ -0,0 +1,33 @@ +#Code table 4.5: Fixed surface types and units +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0o C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +# 10-19 Reserved +20 20 Isothermal level (K) +#21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level +# 112-116 Reserved +117 117 Mixed layer depth (m) +# 118-159 Reserved +160 160 Depth below sea level (m) +#161-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.6.table b/definitions/grib2/tables/2/4.6.table new file mode 100644 index 000000000..dc6d94c20 --- /dev/null +++ b/definitions/grib2/tables/2/4.6.table @@ -0,0 +1,8 @@ +# CODE TABLE 4.6, Type of ensemble forecast + +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.7.table b/definitions/grib2/tables/2/4.7.table new file mode 100644 index 000000000..dadf59b46 --- /dev/null +++ b/definitions/grib2/tables/2/4.7.table @@ -0,0 +1,73 @@ +# CODE TABLE 4.7, Derived forecast + +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members (see Note) +6 6 Unweighted mean of the cluster members +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.8.table b/definitions/grib2/tables/2/4.8.table new file mode 100644 index 000000000..9d3a0e8a7 --- /dev/null +++ b/definitions/grib2/tables/2/4.8.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.8, Clustering Method + +0 0 Anomaly correlation +1 1 Root mean square +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.9.table b/definitions/grib2/tables/2/4.9.table new file mode 100644 index 000000000..895f30171 --- /dev/null +++ b/definitions/grib2/tables/2/4.9.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.9, Probability Type + +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/4.91.table b/definitions/grib2/tables/2/4.91.table new file mode 100644 index 000000000..122779d1e --- /dev/null +++ b/definitions/grib2/tables/2/4.91.table @@ -0,0 +1,78 @@ +# CODE TABLE 4.91 Category Type + +0 0 Below lower limit +1 1 Above upper limit +2 2 Between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Above lower limit +4 4 Below upper limit +5 5 Lower or equal lower limit +6 6 Greater or equal upper limit +7 7 Between lower and upper limits. The range includes lower limit and upper limit +8 8 Greater or equal lower limit +9 9 Lower or equal upper limit +10 10 Between lower and upper limits. The range includes the upper limit but not the lower limit +11 11 Equal to first limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/2/5.0.table b/definitions/grib2/tables/2/5.0.table new file mode 100644 index 000000000..0cf3752cb --- /dev/null +++ b/definitions/grib2/tables/2/5.0.table @@ -0,0 +1,16 @@ +# CODE TABLE 5.0, Data Representation Template Number +0 0 Grid point data - simple packing +1 1 Matrix value - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - ieee packing +6 6 Grid point data - simple packing with pre-processing +40 40 JPEG2000 Packing +41 41 PNG pacling +50 50 Spectral data -simple packing +51 51 Spherical harmonics data - complex packing +61 61 Grid point data - simple packing with logarithm pre-processing +# 192-254 Reserved for local use +255 255 Missing +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling diff --git a/definitions/grib2/tables/2/5.1.table b/definitions/grib2/tables/2/5.1.table new file mode 100644 index 000000000..d7ca4bedc --- /dev/null +++ b/definitions/grib2/tables/2/5.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.1, Type of original field values +0 0 Floating point +1 1 Integer +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/5.2.table b/definitions/grib2/tables/2/5.2.table new file mode 100644 index 000000000..a048d712e --- /dev/null +++ b/definitions/grib2/tables/2/5.2.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.2, Matrix coordinate value function definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +11 11 Geometric coordinates +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/5.3.table b/definitions/grib2/tables/2/5.3.table new file mode 100644 index 000000000..4a673ef85 --- /dev/null +++ b/definitions/grib2/tables/2/5.3.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.3, Matrix coordinate parameter +1 1 Direction Degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/5.4.table b/definitions/grib2/tables/2/5.4.table new file mode 100644 index 000000000..1fd37966f --- /dev/null +++ b/definitions/grib2/tables/2/5.4.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.4, Group Splitting Method +0 0 Row by row splitting +1 1 General group splitting +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/5.40.table b/definitions/grib2/tables/2/5.40.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/2/5.40.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/2/5.40000.table b/definitions/grib2/tables/2/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/2/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/2/5.5.table b/definitions/grib2/tables/2/5.5.table new file mode 100644 index 000000000..d1caac9e8 --- /dev/null +++ b/definitions/grib2/tables/2/5.5.table @@ -0,0 +1,7 @@ +# CODE TABLE 5.5, Missing Value Management for Complex Packing + +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/5.6.table b/definitions/grib2/tables/2/5.6.table new file mode 100644 index 000000000..4aec3314e --- /dev/null +++ b/definitions/grib2/tables/2/5.6.table @@ -0,0 +1,68 @@ +# CODE TABLE 5.6, Order of Spatial Differencing + +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/2/5.7.table b/definitions/grib2/tables/2/5.7.table new file mode 100644 index 000000000..35b23b94d --- /dev/null +++ b/definitions/grib2/tables/2/5.7.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.7, Precision of floating-point numbers + +1 1 IEEE 32-bit (I=4 in Section 7) +2 2 IEEE 64-bit (I=8 in Section 7) +3 3 IEEE 128-bit (I=16 in Section 7) +255 255 Missing diff --git a/definitions/grib2/tables/2/5.8.table b/definitions/grib2/tables/2/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/2/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/2/5.9.table b/definitions/grib2/tables/2/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/2/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/2/6.0.table b/definitions/grib2/tables/2/6.0.table new file mode 100644 index 000000000..6a8c74b48 --- /dev/null +++ b/definitions/grib2/tables/2/6.0.table @@ -0,0 +1,7 @@ +# CODE TABLE 6.0, Bit Map Indicator + +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 2 253 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same "GRIB" message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/2/stepType.table b/definitions/grib2/tables/2/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/2/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/3/0.0.table b/definitions/grib2/tables/3/0.0.table new file mode 100644 index 000000000..fd2056350 --- /dev/null +++ b/definitions/grib2/tables/3/0.0.table @@ -0,0 +1,10 @@ +#Code Table 0.0: Discipline of processed data in the GRIB message, number of GRIB Master Table +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/1.0.table b/definitions/grib2/tables/3/1.0.table new file mode 100644 index 000000000..a34f44ee1 --- /dev/null +++ b/definitions/grib2/tables/3/1.0.table @@ -0,0 +1,7 @@ +# Code Table 1.0: GRIB Master Tables Version Number +0 0 Experimental +1 1 Initial operational version number +2 2 Previous operational version number +3 3 Current operational version number implemented on 2 November 2005 +# 4-254 Future operational version numbers +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/3/1.1.table b/definitions/grib2/tables/3/1.1.table new file mode 100644 index 000000000..6c5a60361 --- /dev/null +++ b/definitions/grib2/tables/3/1.1.table @@ -0,0 +1,5 @@ +# Code Table 1.1 GRIB Local Tables Version Number +0 0 Local tables not used +# . Only table entries and templates from the current Master table are valid. +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/3/1.2.table b/definitions/grib2/tables/3/1.2.table new file mode 100644 index 000000000..eb8755209 --- /dev/null +++ b/definitions/grib2/tables/3/1.2.table @@ -0,0 +1,8 @@ +# CODE TABLE 1.2, Significance of Reference Time +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +#4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/1.3.table b/definitions/grib2/tables/3/1.3.table new file mode 100644 index 000000000..d4ed48c63 --- /dev/null +++ b/definitions/grib2/tables/3/1.3.table @@ -0,0 +1,10 @@ +# CODE TABLE 1.3, Production status of data +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 TIGGE Operational products +5 5 TIGGE test products +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/1.4.table b/definitions/grib2/tables/3/1.4.table new file mode 100644 index 000000000..ac21f5c4c --- /dev/null +++ b/definitions/grib2/tables/3/1.4.table @@ -0,0 +1,13 @@ +# CODE TABLE 1.4, Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event Probability +# 8-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/3.0.table b/definitions/grib2/tables/3/3.0.table new file mode 100644 index 000000000..6030a5132 --- /dev/null +++ b/definitions/grib2/tables/3/3.0.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.0, Source of Grid Definition +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition Defined by originating centre +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/3/3.1.table b/definitions/grib2/tables/3/3.1.table new file mode 100644 index 000000000..6101b648c --- /dev/null +++ b/definitions/grib2/tables/3/3.1.table @@ -0,0 +1,43 @@ +# CODE TABLE 3.1, Grid Definition Template Number +0 0 Latitude/longitude. Also called equidistant cylindrical, or Plate Carree +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +# 4-9 Reserved +10 10 Mercator +# 11-19 Reserved +20 20 Polar stereographic can be south or north +# 21-29 Reserved +30 30 Lambert Conformal can be secant or tangent, conical or bipolar +31 31 Albers equal-area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +# 101-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid, with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovm�ller diagram grid, with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/3/3.10.table b/definitions/grib2/tables/3/3.10.table new file mode 100644 index 000000000..ae5baf9d5 --- /dev/null +++ b/definitions/grib2/tables/3/3.10.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.10, Scanning mode for one diamond +1 0 Points scan in +i direction, i.e. from pole to equator +1 1 Points scan in -i direction, i.e. from equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction is consecutive diff --git a/definitions/grib2/tables/3/3.11.table b/definitions/grib2/tables/3/3.11.table new file mode 100644 index 000000000..9a84d4a95 --- /dev/null +++ b/definitions/grib2/tables/3/3.11.table @@ -0,0 +1,5 @@ +# CODE TABLE 3.11, Interpretation of list of numbers defining number of points +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +255 255 Missing diff --git a/definitions/grib2/tables/3/3.15.table b/definitions/grib2/tables/3/3.15.table new file mode 100644 index 000000000..bb431e14f --- /dev/null +++ b/definitions/grib2/tables/3/3.15.table @@ -0,0 +1,25 @@ +# CODE TABLE 3.15, Physical meaning of vertical coordinate +# 0-19 Reserved +20 20 Temperature K +# 21-99 Reserved +100 100 Pressure Pa +101 101 Pressure deviation from mean sea level Pa +102 102 Altitude above mean sea level m +103 103 Height above ground (see Note 1) m +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface m +107 pt Potential temperature (theta) K +108 108 Pressure deviation from ground to level Pa +109 pv Potential vorticity K m-2 kg-1 s-1 +110 110 Geometrical height m +111 111 Eta coordinate (see Note 2) +112 112 Geopotential height gpm +# 113-159 Reserved +160 160 Depth below sea level m +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Negative values associated to this coordinate will indicate depth below ground surface. If values are all below surface, use of entry 106 is recommended, with positive coordinate values instead. +# (2) The Eta vertical coordinate system involves normalizing the pressure at some point on a specific level by the mean sea level pressure at that point. diff --git a/definitions/grib2/tables/3/3.2.table b/definitions/grib2/tables/3/3.2.table new file mode 100644 index 000000000..d037ee120 --- /dev/null +++ b/definitions/grib2/tables/3/3.2.table @@ -0,0 +1,11 @@ +# CODE TABLE 3.2, Shape of the Earth +0 0 Earth assumed spherical with radius = 6,367,470.0 m +1 1 Earth assumed spherical with radius specified by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6,378,160.0 m, minor axis = 6,356,775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6,378,137.0 m, minor axis = 6,356,752.314 m, f = 1/298.257222101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6,371,229.0 m +# 7-191 Reserved +# 192- 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/3.20.table b/definitions/grib2/tables/3/3.20.table new file mode 100644 index 000000000..cfa35ae38 --- /dev/null +++ b/definitions/grib2/tables/3/3.20.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.20, Type of horizontal line +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/3.21.table b/definitions/grib2/tables/3/3.21.table new file mode 100644 index 000000000..c2fd94586 --- /dev/null +++ b/definitions/grib2/tables/3/3.21.table @@ -0,0 +1,8 @@ +# CODE TABLE 3.21, Vertical dimension coordinate values definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +# 2-10 Reserved +11 11 Geometric coordinates +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/3.3.table b/definitions/grib2/tables/3/3.3.table new file mode 100644 index 000000000..84cbb8bcc --- /dev/null +++ b/definitions/grib2/tables/3/3.3.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.3, Resolution and Component Flags +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates respectively diff --git a/definitions/grib2/tables/3/3.4.table b/definitions/grib2/tables/3/3.4.table new file mode 100644 index 000000000..51d0664b2 --- /dev/null +++ b/definitions/grib2/tables/3/3.4.table @@ -0,0 +1,9 @@ +# FLAG TABLE 3.4, Scanning Mode +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction diff --git a/definitions/grib2/tables/3/3.5.table b/definitions/grib2/tables/3/3.5.table new file mode 100644 index 000000000..117b26be3 --- /dev/null +++ b/definitions/grib2/tables/3/3.5.table @@ -0,0 +1,5 @@ +# FLAG TABLE 3.5, Projection Centre +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bi-polar and symmetric diff --git a/definitions/grib2/tables/3/3.6.table b/definitions/grib2/tables/3/3.6.table new file mode 100644 index 000000000..41dd97e4a --- /dev/null +++ b/definitions/grib2/tables/3/3.6.table @@ -0,0 +1,2 @@ +# CODE TABLE 3.6, Spectral data representation type +1 1 The Associated Legendre Functions of the first kind are defined by: diff --git a/definitions/grib2/tables/3/3.7.table b/definitions/grib2/tables/3/3.7.table new file mode 100644 index 000000000..3aaf30bf9 --- /dev/null +++ b/definitions/grib2/tables/3/3.7.table @@ -0,0 +1,11 @@ +# Code Table 3.7: Spectral data representation mode +0 0 Reserved +1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) +# 2-254 Reserved +255 255 Missing +# Note: +# +#(1) Values of N(m) for common truncations cases: +# Triangular M = J = K, N(m) = J +# Rhomboidal K = J + M, N(m) = J+m +# Trapezoidal K = J, K > M, N(m) = J diff --git a/definitions/grib2/tables/3/3.8.table b/definitions/grib2/tables/3/3.8.table new file mode 100644 index 000000000..0d9b7d001 --- /dev/null +++ b/definitions/grib2/tables/3/3.8.table @@ -0,0 +1,8 @@ +# Code table 3.8: Grid point position +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/3.9.table b/definitions/grib2/tables/3/3.9.table new file mode 100644 index 000000000..800c08259 --- /dev/null +++ b/definitions/grib2/tables/3/3.9.table @@ -0,0 +1,3 @@ +# FLAG TABLE 3.9, Numbering order of diamonds as seen from the corresponding pole +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e., counter-clockwise) orientation diff --git a/definitions/grib2/tables/3/4.0.table b/definitions/grib2/tables/3/4.0.table new file mode 100644 index 000000000..c22d7d3d2 --- /dev/null +++ b/definitions/grib2/tables/3/4.0.table @@ -0,0 +1,38 @@ +# CODE TABLE 4.0, Product Definition Template Number +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecast based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based in all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +20 20 Radar product +30 30 Satellite product +31 31 Satellite product +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +46 46 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of atmospheric aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +254 254 CCITT IA5 character string +1000 1000 Cross section of analysis and forecast at a point in time +1001 1001 Cross section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed +1100 1100 Hovm�ller-type grid with no averaging or other statistical processing +1101 1101 Hovm�ller-type grid with averaging or other statistical processing +65335 65535 Missing diff --git a/definitions/grib2/tables/3/4.1.0.table b/definitions/grib2/tables/3/4.1.0.table new file mode 100644 index 000000000..33d1c3984 --- /dev/null +++ b/definitions/grib2/tables/3/4.1.0.table @@ -0,0 +1,30 @@ +#Discipline 0: Meteorological products +#Category Description +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave Radiation +5 5 Long-wave Radiation +6 6 Cloud +7 7 Thermodynamic Stability indices +8 8 Kinematic Stability indices +9 9 Temperature Probabilities +10 10 Moisture Probabilities +11 11 Momentum Probabilities +12 12 Mass Probabilities +13 13 Aerosols +14 14 Trace gases (e.g., ozone, CO2) +15 15 Radar +16 16 Forecast Radar Imagery +17 17 Electro-dynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical or physical constituents +# 20-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/3/4.1.1.table b/definitions/grib2/tables/3/4.1.1.table new file mode 100644 index 000000000..ebb7d9ea0 --- /dev/null +++ b/definitions/grib2/tables/3/4.1.1.table @@ -0,0 +1,9 @@ +#Discipline 1: Hydrological products +#Category Description +0 0 Hydrology basic products +1 1 Hydrology probabilities +#2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/3/4.1.10.table b/definitions/grib2/tables/3/4.1.10.table new file mode 100644 index 000000000..45b08caaa --- /dev/null +++ b/definitions/grib2/tables/3/4.1.10.table @@ -0,0 +1,12 @@ +#Discipline 10: Oceanographic Products +#Category Description +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface Properties +4 4 Sub-surface Properties +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/3/4.1.2.table b/definitions/grib2/tables/3/4.1.2.table new file mode 100644 index 000000000..f7f2ea2ba --- /dev/null +++ b/definitions/grib2/tables/3/4.1.2.table @@ -0,0 +1,11 @@ +#Discipline 2: Land Surface Products +#Category Description +0 0 Vegetation/Biomass +1 1 Agri-/aquacultural Special Products +2 2 Transportation-related Products +3 3 Soil Products +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/3/4.1.3.table b/definitions/grib2/tables/3/4.1.3.table new file mode 100644 index 000000000..f7578e163 --- /dev/null +++ b/definitions/grib2/tables/3/4.1.3.table @@ -0,0 +1,9 @@ +#Discipline 3: Space Products +#Category Description +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/3/4.1.table b/definitions/grib2/tables/3/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/3/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/3/4.10.table b/definitions/grib2/tables/3/4.10.table new file mode 100644 index 000000000..9cf447b69 --- /dev/null +++ b/definitions/grib2/tables/3/4.10.table @@ -0,0 +1,14 @@ +# CODE TABLE 4.10, Type of statistical processing + +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (Value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (Temporal variance) +8 8 Difference (Value at the start of time range minus value at the end) +9 ratio Ratio +# 192 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/3/4.11.table b/definitions/grib2/tables/3/4.11.table new file mode 100644 index 000000000..68901aac4 --- /dev/null +++ b/definitions/grib2/tables/3/4.11.table @@ -0,0 +1,9 @@ +# CODE TABLE 4.11, Type of time intervals + +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.12.table b/definitions/grib2/tables/3/4.12.table new file mode 100644 index 000000000..86b6177be --- /dev/null +++ b/definitions/grib2/tables/3/4.12.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.12, Operating Mode + +0 0 Maintenance Mode +1 1 Clear air +2 2 Precipitation +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.13.table b/definitions/grib2/tables/3/4.13.table new file mode 100644 index 000000000..ddd7537d0 --- /dev/null +++ b/definitions/grib2/tables/3/4.13.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.13, Quality Control Indicator + +0 0 No quality control applied +1 1 Quality control applied +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.14.table b/definitions/grib2/tables/3/4.14.table new file mode 100644 index 000000000..69984d720 --- /dev/null +++ b/definitions/grib2/tables/3/4.14.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.14, Clutter Filter Indicator + +0 0 No clutter filter used +1 1 Clutter filter used +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.15.table b/definitions/grib2/tables/3/4.15.table new file mode 100644 index 000000000..49b0b2d26 --- /dev/null +++ b/definitions/grib2/tables/3/4.15.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.15, Type of auxiliary information + +0 0 Confidence level ('grib2/4.151.table') +1 1 Delta time (seconds) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.151.table b/definitions/grib2/tables/3/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/3/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.2.0.0.table b/definitions/grib2/tables/3/4.2.0.0.table new file mode 100644 index 000000000..0386b8cd2 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.0.table @@ -0,0 +1,23 @@ +# Product Discipline 0: Meteorological products, Parameter Category 0: Temperature +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew point temperature (K) +7 7 Dew point depression (or deficit) (K) +8 8 Lapse rate (K m-1) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin Temperature (K) +#17-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.1.table b/definitions/grib2/tables/3/4.2.0.1.table new file mode 100644 index 000000000..154f2d007 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.1.table @@ -0,0 +1,62 @@ +# Product Discipline 0: Meteorological products, Parameter Category 1: Moisture +0 0 Specific humidity (kg kg-1) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg kg-1) +3 3 Precipitable water (kg m-2) +4 4 Vapor pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age (day) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type (code table (4.201) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg kg-1) +22 22 Cloud mixing ratio (kg kg-1) +23 23 Ice water mixing ratio (kg kg-1) +24 24 Rain mixing ratio (kg kg-1) +25 25 Snow mixing ratio (kg kg-1) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category code table (4.202) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg kg-1) +33 33 Categorical rain (Code table 4.222) +34 34 Categorical freezing rain (Code table 4.222) +35 35 Categorical ice pellets (Code table 4.222) +36 36 Categorical snow (Code table 4.222) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +51 51 Total column water (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m s-1) +58 58 Convective snowfall rate (m s-1) +59 59 Large scale snowfall rate (m s-1) +60 60 Snow depth water equivalent (kg m-2) +#47-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.13.table b/definitions/grib2/tables/3/4.2.0.13.table new file mode 100644 index 000000000..8fc3425af --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.13.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 13: Aerosols +0 0 Aerosol type (Code table 4.205) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.14.table b/definitions/grib2/tables/3/4.2.0.14.table new file mode 100644 index 000000000..309c40d47 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.14.table @@ -0,0 +1,7 @@ +# Product Discipline 0: Meteorological products, Parameter Category 14: Trace Gases +0 0 Total ozone (Dobson) +1 1 Ozone mixing ratio (kg kg-1) +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.15.table b/definitions/grib2/tables/3/4.2.0.15.table new file mode 100644 index 000000000..bb419178b --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.15.table @@ -0,0 +1,14 @@ +# Product Discipline 0 - Meteorological products, Parameter Category 15: Radar +0 0 Base spectrum width (m s-1) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m s-1) +3 3 Vertically-integrated liquid (kg m-1) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.18.table b/definitions/grib2/tables/3/4.2.0.18.table new file mode 100644 index 000000000..5c0fd6e5d --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.18.table @@ -0,0 +1,14 @@ +# Product Discipline 0: Meteorological products, Parameter Category 18: Nuclear/radiology +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of Iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of Iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.19.table b/definitions/grib2/tables/3/4.2.0.19.table new file mode 100644 index 000000000..369c3f657 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.19.table @@ -0,0 +1,24 @@ +# Product Discipline 0: Meteorological products, Parameter Category 19: Physical atmospheric properties +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 mixed layer depth (m) +4 4 Volcanic ash (Code table 4.206) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing (Code table 4.207) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence (Code table 4.208) +11 11 Turbulent kinetic energy (J kg-1) +12 12 Planetary boundary layer regime (Code table 4.209) +13 13 Contrail intensity (Code table 4.210) +14 14 Contrail engine type (Code table 4.211) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +# 19-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.190.table b/definitions/grib2/tables/3/4.2.0.190.table new file mode 100644 index 000000000..b1f47bc02 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.190.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 190: CCITT IA5 string +0 0 Arbitrary text string (CCITTIA5) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.191.table b/definitions/grib2/tables/3/4.2.0.191.table new file mode 100644 index 000000000..affb98f42 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.191.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 191: Miscellaneous +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.2.table b/definitions/grib2/tables/3/4.2.0.2.table new file mode 100644 index 000000000..f45206bff --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.2.table @@ -0,0 +1,35 @@ +# Product Discipline 0: Meteorological products, Parameter Category 2: Momentum +0 0 Wind direction [from which blowing] (deg true) +1 1 Wind speed (m s-1) +2 2 u-component of wind (m s-1) +3 3 v-component of wind (m s-1) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (s-1) +8 8 Vertical velocity [pressure] (Pa s-1) +9 9 Vertical velocity [geometric] (m s-1) +10 10 Absolute vorticity (s-1) +11 11 Absolute divergence (s-1) +12 12 Relative vorticity (s-1) +13 13 Relative divergence (s-1) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (s-1) +16 16 Vertical v-component shear (s-1) +17 17 Momentum flux, u component (N m-2) +18 18 Momentum flux, v component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m s-1) +22 22 Wind speed [gust] (m s-1) +23 23 u-component of wind (gust) (m s-1) +24 24 v-component of wind (gust) (m s-1) +25 25 Vertical speed shear (s-1) +26 26 Horizontal momentum flux (N m-2) +27 27 U-component storm motion (m s-1) +28 28 V-component storm motion (m s-1) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m s-1) +# 31-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.2.0.20.table b/definitions/grib2/tables/3/4.2.0.20.table new file mode 100644 index 000000000..4e7f45db4 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.20.table @@ -0,0 +1,13 @@ +0 0 Mass density (concentration) kg.m-3 +1 1 Total column (integrated mass density) kg.m-2 +2 2 Volume mixing ratio (mole fraction in air) mole.mole-1 +3 3 Mass mixing ratio (mass fraction in air) kg.kg-1 +4 4 Surface dry deposition mass flux kg.m-2.s-1 +5 5 Surface wet deposition mass flux kg.m-2.s-1 +6 6 Atmosphere emission mass flux kg.m-2.s-1 +7 7 Chemical gross production rate of mole concentration mole.m-3.s-1 +8 8 Chemical gross destruction rate of mole concentration mole.m-3.s-1 +9 9 Surface dry deposition mass flux into stomata kg.m-2.s-1 +#10-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.2.0.3.table b/definitions/grib2/tables/3/4.2.0.3.table new file mode 100644 index 000000000..5c7e8151d --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.3.table @@ -0,0 +1,25 @@ +# Product Discipline 0: Meteorological products, Parameter Category 3: Mass + 0 0 Pressure (Pa) + 1 1 Pressure reduced to MSL (Pa) + 2 2 Pressure tendency (Pa s-1) + 3 3 ICAO Standard Atmosphere Reference Height (m) + 4 4 Geopotential (m2 s-2) + 5 5 Geopotential height (gpm) + 6 6 Geometric height (m) + 7 7 Standard deviation of height (m) + 8 8 Pressure anomaly (Pa) + 9 9 Geopotential height anomaly (gpm) + 10 10 Density (kg m-3) + 11 11 Altimeter setting (Pa) + 12 12 Thickness (m) + 13 13 Pressure altitude (m) + 14 14 Density altitude (m) + 15 15 5-wave geopotential height (gpm) + 16 16 Zonal flux of gravity wave stress (N m-2) + 17 17 Meridional flux of gravity wave stress (N m-2) + 18 18 Planetary boundary layer height (m) + 19 19 5-wave geopotential height anomaly (gpm) +# 20-191 Reserved +# 192-254 Reserved for local use + 255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.4.table b/definitions/grib2/tables/3/4.2.0.4.table new file mode 100644 index 000000000..815c184a2 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.4.table @@ -0,0 +1,14 @@ +# Product Discipline 0: Meteorological products, Parameter Category 4: Short-wave Radiation +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +9 8 Upward short-wave radiation flux (W m-2) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.5.table b/definitions/grib2/tables/3/4.2.0.5.table new file mode 100644 index 000000000..1b57fa301 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.5.table @@ -0,0 +1,11 @@ +# Product Discipline 0: Meteorological products, Parameter Category 5: Long-wave Radiation +0 0 Net long wave radiation flux (surface) (W m-2) +1 1 Net long wave radiation flux (top of atmosphere) (W m-2) +2 2 Long wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long wave radiation flux (W m-2) +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.6.table b/definitions/grib2/tables/3/4.2.0.6.table new file mode 100644 index 000000000..05cf72f57 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.6.table @@ -0,0 +1,30 @@ +# Product Discipline 0: Meteorological products, Parameter Category 6: Cloud +0 0 Cloud Ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type (Code table 4.203) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage (Code table 4.204) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J kg-1) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg kg-1) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg kg-1) +24 24 Sunshine (Numeric) +# 23-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.0.7.table b/definitions/grib2/tables/3/4.2.0.7.table new file mode 100644 index 000000000..78374fde5 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.0.7.table @@ -0,0 +1,18 @@ +# Product Discipline 0: Meteorological products, Parameter Category 7: Thermodynamic Stability Indices +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J kg-1) +7 7 Convective inhibition (J kg-1) +8 8 Storm relative helicity (J kg-1) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +#13-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.1.0.table b/definitions/grib2/tables/3/4.2.1.0.table new file mode 100644 index 000000000..97efaa8cc --- /dev/null +++ b/definitions/grib2/tables/3/4.2.1.0.table @@ -0,0 +1,16 @@ +# Product Discipline 1: Hydrologic products, Parameter Category 0: Hydrology basic products +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely sensed snow cover (Code table 4.215) +3 3 Elevation of snow covered terrain (Code table 4.216) +4 4 Snow water equivalent percent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Remotely sensed snow cover is expressed as a field of dimensionless, thematic values. The currently accepted values are for no-snow/no-cloud, 50, for clouds, 100, and for snow, 250. See code table 4.215. +# (2) A data field representing snow coverage by elevation portrays at which elevations there is a snow pack. The elevation values typically range from 0 to 90 in 100 m increments. A value of 253 is used to represent a no-snow/no-cloud data point. A value of 254 is used to represent a data point at which snow elevation could not be estimated because of clouds obscuring the remote sensor (when using aircraft or satellite measurements). +# (3) Snow water equivalent percent of normal is stored in percent of normal units. For example, a value of 110 indicates 110 percent of the normal snow water equivalent for a given depth of snow. + diff --git a/definitions/grib2/tables/3/4.2.1.1.table b/definitions/grib2/tables/3/4.2.1.1.table new file mode 100644 index 000000000..b7342ef2f --- /dev/null +++ b/definitions/grib2/tables/3/4.2.1.1.table @@ -0,0 +1,8 @@ +# Product Discipline 1: Hydrologic products, Parameter Category 1: Hydrology probabilities +0 0 Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) +1 1 Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.10.0.table b/definitions/grib2/tables/3/4.2.10.0.table new file mode 100644 index 000000000..479e26d51 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.10.0.table @@ -0,0 +1,20 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 0: Waves +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (Degree true) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (Degree true) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (Degree true) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (Degree true) +13 13 Secondary wave mean period (s) +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/3/4.2.10.1.table b/definitions/grib2/tables/3/4.2.10.1.table new file mode 100644 index 000000000..df18f31dd --- /dev/null +++ b/definitions/grib2/tables/3/4.2.10.1.table @@ -0,0 +1,8 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 1: Currents +0 0 Current direction (Degree true) +1 1 Current speed (m s-1) +2 2 u-component of current (m s-1) +3 3 v-component of current (m s-1) +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.2.10.2.table b/definitions/grib2/tables/3/4.2.10.2.table new file mode 100644 index 000000000..cb73da46c --- /dev/null +++ b/definitions/grib2/tables/3/4.2.10.2.table @@ -0,0 +1,12 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 2: Ice +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (Degree true) +3 3 Speed of ice drift (m s-1) +4 4 u-component of ice drift (m s-1) +5 5 v-component of ice drift (m s-1) +6 6 Ice growth rate (m s-1) +7 7 Ice divergence (s-1) +# 8-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.2.10.3.table b/definitions/grib2/tables/3/4.2.10.3.table new file mode 100644 index 000000000..a14ae22e3 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.10.3.table @@ -0,0 +1,6 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 3: Surface Properties +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.2.10.4.table b/definitions/grib2/tables/3/4.2.10.4.table new file mode 100644 index 000000000..a24c3c8c4 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.10.4.table @@ -0,0 +1,9 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 4: Sub-surface Properties +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg kg-1) +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.2.0.table b/definitions/grib2/tables/3/4.2.2.0.table new file mode 100644 index 000000000..fdc8ce0ef --- /dev/null +++ b/definitions/grib2/tables/3/4.2.2.0.table @@ -0,0 +1,29 @@ +# Product Discipline 2: Land surface products, Parameter Category 0: Vegetation/Biomass +0 0 Land cover (0=land, 1=sea) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg -2 s-1) +7 7 Model terrain height (m) +8 8 Land use (Code table 4.212) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadars mixing length scale (m) +15 15 Canopy conductance (m s-1) +16 16 Minimal stomatal resistance (s m-1) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy conductance (Proportion) +20 20 Soil moisture parameter in canopy conductance (Proportion) +21 21 Humidity parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +26 26 Wilting point (kg m-3) +# 23-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.2.3.table b/definitions/grib2/tables/3/4.2.2.3.table new file mode 100644 index 000000000..d6376fecb --- /dev/null +++ b/definitions/grib2/tables/3/4.2.2.3.table @@ -0,0 +1,16 @@ +# Product Discipline 2: Land surface products, Parameter Category 3: Soil Products +0 0 Soil type (Code table 4.213) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +# 11-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.3.0.table b/definitions/grib2/tables/3/4.2.3.0.table new file mode 100644 index 000000000..944566388 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.3.0.table @@ -0,0 +1,14 @@ +# Product discipline 3: Space products, Parameter Category 0: Image format products +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.3.1.table b/definitions/grib2/tables/3/4.2.3.1.table new file mode 100644 index 000000000..60d6e8420 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.3.1.table @@ -0,0 +1,11 @@ +# Product Discipline 3: Space products, Parameter Category 1: Quantitative products +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m s-1) +5 5 Estimated v component of wind (m s-1) +# 6-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/3/4.2.table b/definitions/grib2/tables/3/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/3/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/3/4.201.table b/definitions/grib2/tables/3/4.201.table new file mode 100644 index 000000000..7445c9c20 --- /dev/null +++ b/definitions/grib2/tables/3/4.201.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.201, Precipitation Type + +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.202.table b/definitions/grib2/tables/3/4.202.table new file mode 100644 index 000000000..69dbe3a5d --- /dev/null +++ b/definitions/grib2/tables/3/4.202.table @@ -0,0 +1,66 @@ +# CODE TABLE 4.202, Precipitable water category + +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.203.table b/definitions/grib2/tables/3/4.203.table new file mode 100644 index 000000000..d2ad10b07 --- /dev/null +++ b/definitions/grib2/tables/3/4.203.table @@ -0,0 +1,88 @@ +# CODE TABLE 4.203, Cloud type + +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground based fog beneath the lowest layer +12 12 Stratus - ground based fog beneath the lowest layer +13 13 Stratocumulus - ground based fog beneath the lowest layer +14 14 Cumulus - ground based fog beneath the lowest layer +15 15 Altostratus - ground based fog beneath the lowest layer +16 16 Nimbostratus - ground based fog beneath the lowest layer +17 17 Altocumulus - ground based fog beneath the lowest layer +18 18 Cirrostratus - ground based fog beneath the lowest layer +19 19 Cirrocumulus - ground based fog beneath the lowest layer +20 20 Cirrus - ground based fog beneath the lowest layer +191 191 Unknown +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.204.table b/definitions/grib2/tables/3/4.204.table new file mode 100644 index 000000000..23b60cf77 --- /dev/null +++ b/definitions/grib2/tables/3/4.204.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.204, Thunderstorm coverage + +0 0 None +1 1 Isolated (1% - 2%) +2 2 Few (3% - 15%) +3 3 Scattered (16% - 45%) +4 4 Numerous (> 45%) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.205.table b/definitions/grib2/tables/3/4.205.table new file mode 100644 index 000000000..98c7b48ec --- /dev/null +++ b/definitions/grib2/tables/3/4.205.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.205, Aerosol type + +0 0 Aerosol not present +1 1 Aerosol present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.206.table b/definitions/grib2/tables/3/4.206.table new file mode 100644 index 000000000..b1ef2e787 --- /dev/null +++ b/definitions/grib2/tables/3/4.206.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.206, Volcanic ash + +0 0 Not present +1 1 Present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.207.table b/definitions/grib2/tables/3/4.207.table new file mode 100644 index 000000000..13fc7b54b --- /dev/null +++ b/definitions/grib2/tables/3/4.207.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.207, Icing + +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.208.table b/definitions/grib2/tables/3/4.208.table new file mode 100644 index 000000000..15b514a07 --- /dev/null +++ b/definitions/grib2/tables/3/4.208.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.208, Turbulence + +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.209.table b/definitions/grib2/tables/3/4.209.table new file mode 100644 index 000000000..b4cca1d73 --- /dev/null +++ b/definitions/grib2/tables/3/4.209.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.209, Planetary boundary layer regime + +1 1 Stable +2 2 Mechanically driven turbulence +3 3 Forced convection +4 4 Free convection +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.210.table b/definitions/grib2/tables/3/4.210.table new file mode 100644 index 000000000..d05e07721 --- /dev/null +++ b/definitions/grib2/tables/3/4.210.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.210, Contrail intensity + +0 0 Contrail not present +1 1 Contrail present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.211.table b/definitions/grib2/tables/3/4.211.table new file mode 100644 index 000000000..604b2e643 --- /dev/null +++ b/definitions/grib2/tables/3/4.211.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.211, Contrail engine type + +0 0 Low bypass +1 1 High bypass +2 2 Non bypass +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.212.table b/definitions/grib2/tables/3/4.212.table new file mode 100644 index 000000000..7393238e7 --- /dev/null +++ b/definitions/grib2/tables/3/4.212.table @@ -0,0 +1,79 @@ +# CODE TABLE 4.212, Land Use + +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.213.table b/definitions/grib2/tables/3/4.213.table new file mode 100644 index 000000000..cc4bdfc1f --- /dev/null +++ b/definitions/grib2/tables/3/4.213.table @@ -0,0 +1,77 @@ +# CODE TABLE 4.213, Soil type + +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.215.table b/definitions/grib2/tables/3/4.215.table new file mode 100644 index 000000000..7e1442962 --- /dev/null +++ b/definitions/grib2/tables/3/4.215.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.215, Remotely Sensed Snow Coverage + +50 50 No-snow/no-cloud +100 100 Clouds +250 250 Snow +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.216.table b/definitions/grib2/tables/3/4.216.table new file mode 100644 index 000000000..dbe26b0e5 --- /dev/null +++ b/definitions/grib2/tables/3/4.216.table @@ -0,0 +1,95 @@ +# CODE TABLE 4.216, Elevation of Snow Covered Terrain + +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/3/4.217.table b/definitions/grib2/tables/3/4.217.table new file mode 100644 index 000000000..475ab686d --- /dev/null +++ b/definitions/grib2/tables/3/4.217.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.217, Cloud mask type + +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.220.table b/definitions/grib2/tables/3/4.220.table new file mode 100644 index 000000000..9fddcd49f --- /dev/null +++ b/definitions/grib2/tables/3/4.220.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.220, Horizontal dimension processed + +0 0 Latitude +1 1 Longitude +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.221.table b/definitions/grib2/tables/3/4.221.table new file mode 100644 index 000000000..2291eab60 --- /dev/null +++ b/definitions/grib2/tables/3/4.221.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.221, Treatment of missing data + +0 0 Not included +1 1 Extrapolated +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.230.table b/definitions/grib2/tables/3/4.230.table new file mode 100644 index 000000000..23e819b65 --- /dev/null +++ b/definitions/grib2/tables/3/4.230.table @@ -0,0 +1,47 @@ +#Code figure Code figure Meaning +0 0 Air +1 1 Ozone +2 2 Water vapour +3 3 Methane +4 4 Carbon dioxide +5 5 Carbon monoxide +6 6 Nitrogen dioxide +7 7 Nitrous oxide +8 8 Nitrogen monoxide +9 9 Formaldehyde +10 10 Sulphur dioxide +11 11 Nitric acid +12 12 All nitrogen oxides (NOy) expressed as nitrogen +13 13 Peroxyacetyl nitrate +14 14 Hydroxyl radical +15 15 Ammonia +16 16 Ammonium +17 17 Radon +18 18 Dimethyl sulphide +19 19 Hexachlorocyclohexane +20 20 Alpha hexachlorocyclohexane +21 21 Elemental mercury +22 22 Divalent mercury +23 23 Hexachlorobiphenyl +24 24 NOx expressed as nitrogen +25 25 Non-methane volatile organic compounds expressed as carbon +26 26 Anthropogenic non-methane volatile organic compounds expressed as carbon +27 27 Biogenic non-methane volatile organic compounds expressed as carbon +#28-39999 28-39999 Reserved +40000 40000 Sulphate dry aerosol +40001 40001 Black carbon dry aerosol +40002 40002 Particulate organic matter dry aerosol +40003 40003 Primary particulate organic matter dry aerosol +40004 40004 Secondary particulate organic matter dry aerosol +40005 40005 Sea salt dry aerosol +40006 40006 Dust dry aerosol +40007 40007 Mercury dry aerosol +40008 40008 PM10 aerosol +40009 40009 PM2P5 aerosol +40010 40010 PM1 aerosol +40011 40011 Nitrate dry aerosol +40012 40012 Ammonium dry aerosol +40013 40013 Water in ambient aerosol +#40014-63999 40014-63999 Reserved +#64000-65534 64000-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/3/4.3.table b/definitions/grib2/tables/3/4.3.table new file mode 100644 index 000000000..84a72352b --- /dev/null +++ b/definitions/grib2/tables/3/4.3.table @@ -0,0 +1,13 @@ +# CODE TABLE 4.3, Type of generating process +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.4.table b/definitions/grib2/tables/3/4.4.table new file mode 100644 index 000000000..61aa20c5f --- /dev/null +++ b/definitions/grib2/tables/3/4.4.table @@ -0,0 +1,16 @@ +# CODE TABLE 4.4, Indicator of unit of time range +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.5.table b/definitions/grib2/tables/3/4.5.table new file mode 100644 index 000000000..89c5fb175 --- /dev/null +++ b/definitions/grib2/tables/3/4.5.table @@ -0,0 +1,33 @@ +#Code table 4.5: Fixed surface types and units +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0o C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +# 10-19 Reserved +20 20 Isothermal level (K) +#21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level +# 112-116 Reserved +117 117 Mixed layer depth (m) +# 118-159 Reserved +160 160 Depth below sea level (m) +#161-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.6.table b/definitions/grib2/tables/3/4.6.table new file mode 100644 index 000000000..dc6d94c20 --- /dev/null +++ b/definitions/grib2/tables/3/4.6.table @@ -0,0 +1,8 @@ +# CODE TABLE 4.6, Type of ensemble forecast + +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.7.table b/definitions/grib2/tables/3/4.7.table new file mode 100644 index 000000000..dadf59b46 --- /dev/null +++ b/definitions/grib2/tables/3/4.7.table @@ -0,0 +1,73 @@ +# CODE TABLE 4.7, Derived forecast + +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members (see Note) +6 6 Unweighted mean of the cluster members +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.8.table b/definitions/grib2/tables/3/4.8.table new file mode 100644 index 000000000..9d3a0e8a7 --- /dev/null +++ b/definitions/grib2/tables/3/4.8.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.8, Clustering Method + +0 0 Anomaly correlation +1 1 Root mean square +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.9.table b/definitions/grib2/tables/3/4.9.table new file mode 100644 index 000000000..895f30171 --- /dev/null +++ b/definitions/grib2/tables/3/4.9.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.9, Probability Type + +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/4.91.table b/definitions/grib2/tables/3/4.91.table new file mode 100644 index 000000000..a960f56b0 --- /dev/null +++ b/definitions/grib2/tables/3/4.91.table @@ -0,0 +1,78 @@ +# CODE TABLE 4.91 Category Type + +0 0 Below lower limit +1 1 Above upper limit +2 2 Between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Above lower limit +4 4 Below upper limit +5 5 Lower or equal lower limit +6 6 Greater or equal upper limit +7 7 Between lower and upper limits. The range includes lower limit and upper limit +8 8 Greater or equal lower limit +9 9 Lower or equal upper limit +10 10 Between lower and upper limits. The range includes the upper limit but not the lower limit +11 11 Equal to first limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/3/5.0.table b/definitions/grib2/tables/3/5.0.table new file mode 100644 index 000000000..0cf3752cb --- /dev/null +++ b/definitions/grib2/tables/3/5.0.table @@ -0,0 +1,16 @@ +# CODE TABLE 5.0, Data Representation Template Number +0 0 Grid point data - simple packing +1 1 Matrix value - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - ieee packing +6 6 Grid point data - simple packing with pre-processing +40 40 JPEG2000 Packing +41 41 PNG pacling +50 50 Spectral data -simple packing +51 51 Spherical harmonics data - complex packing +61 61 Grid point data - simple packing with logarithm pre-processing +# 192-254 Reserved for local use +255 255 Missing +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling diff --git a/definitions/grib2/tables/3/5.1.table b/definitions/grib2/tables/3/5.1.table new file mode 100644 index 000000000..d7ca4bedc --- /dev/null +++ b/definitions/grib2/tables/3/5.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.1, Type of original field values +0 0 Floating point +1 1 Integer +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/5.2.table b/definitions/grib2/tables/3/5.2.table new file mode 100644 index 000000000..a048d712e --- /dev/null +++ b/definitions/grib2/tables/3/5.2.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.2, Matrix coordinate value function definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +11 11 Geometric coordinates +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/5.3.table b/definitions/grib2/tables/3/5.3.table new file mode 100644 index 000000000..4a673ef85 --- /dev/null +++ b/definitions/grib2/tables/3/5.3.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.3, Matrix coordinate parameter +1 1 Direction Degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/5.4.table b/definitions/grib2/tables/3/5.4.table new file mode 100644 index 000000000..1fd37966f --- /dev/null +++ b/definitions/grib2/tables/3/5.4.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.4, Group Splitting Method +0 0 Row by row splitting +1 1 General group splitting +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/5.40.table b/definitions/grib2/tables/3/5.40.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/3/5.40.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/3/5.40000.table b/definitions/grib2/tables/3/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/3/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/3/5.5.table b/definitions/grib2/tables/3/5.5.table new file mode 100644 index 000000000..d1caac9e8 --- /dev/null +++ b/definitions/grib2/tables/3/5.5.table @@ -0,0 +1,7 @@ +# CODE TABLE 5.5, Missing Value Management for Complex Packing + +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/5.50002.table b/definitions/grib2/tables/3/5.50002.table new file mode 100644 index 000000000..10c243cb0 --- /dev/null +++ b/definitions/grib2/tables/3/5.50002.table @@ -0,0 +1,19 @@ +# second order packing modes table + +1 0 no boustrophedonic +1 1 boustrophedonic +2 0 Reserved +2 1 Reserved +3 0 Reserved +3 1 Reserved +4 0 Reserved +4 1 Reserved +5 0 Reserved +5 1 Reserved +6 0 Reserved +6 1 Reserved +7 0 Reserved +7 1 Reserved +8 0 Reserved +8 1 Reserved + diff --git a/definitions/grib2/tables/3/5.6.table b/definitions/grib2/tables/3/5.6.table new file mode 100644 index 000000000..4aec3314e --- /dev/null +++ b/definitions/grib2/tables/3/5.6.table @@ -0,0 +1,68 @@ +# CODE TABLE 5.6, Order of Spatial Differencing + +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/3/5.7.table b/definitions/grib2/tables/3/5.7.table new file mode 100644 index 000000000..35b23b94d --- /dev/null +++ b/definitions/grib2/tables/3/5.7.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.7, Precision of floating-point numbers + +1 1 IEEE 32-bit (I=4 in Section 7) +2 2 IEEE 64-bit (I=8 in Section 7) +3 3 IEEE 128-bit (I=16 in Section 7) +255 255 Missing diff --git a/definitions/grib2/tables/3/5.8.table b/definitions/grib2/tables/3/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/3/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/3/5.9.table b/definitions/grib2/tables/3/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/3/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/3/6.0.table b/definitions/grib2/tables/3/6.0.table new file mode 100644 index 000000000..6a8c74b48 --- /dev/null +++ b/definitions/grib2/tables/3/6.0.table @@ -0,0 +1,7 @@ +# CODE TABLE 6.0, Bit Map Indicator + +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 2 253 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same "GRIB" message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/3/stepType.table b/definitions/grib2/tables/3/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/3/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/4/0.0.table b/definitions/grib2/tables/4/0.0.table new file mode 100644 index 000000000..fd2056350 --- /dev/null +++ b/definitions/grib2/tables/4/0.0.table @@ -0,0 +1,10 @@ +#Code Table 0.0: Discipline of processed data in the GRIB message, number of GRIB Master Table +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/1.0.table b/definitions/grib2/tables/4/1.0.table new file mode 100644 index 000000000..a34f44ee1 --- /dev/null +++ b/definitions/grib2/tables/4/1.0.table @@ -0,0 +1,7 @@ +# Code Table 1.0: GRIB Master Tables Version Number +0 0 Experimental +1 1 Initial operational version number +2 2 Previous operational version number +3 3 Current operational version number implemented on 2 November 2005 +# 4-254 Future operational version numbers +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/4/1.1.table b/definitions/grib2/tables/4/1.1.table new file mode 100644 index 000000000..6c5a60361 --- /dev/null +++ b/definitions/grib2/tables/4/1.1.table @@ -0,0 +1,5 @@ +# Code Table 1.1 GRIB Local Tables Version Number +0 0 Local tables not used +# . Only table entries and templates from the current Master table are valid. +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/4/1.2.table b/definitions/grib2/tables/4/1.2.table new file mode 100644 index 000000000..eb8755209 --- /dev/null +++ b/definitions/grib2/tables/4/1.2.table @@ -0,0 +1,8 @@ +# CODE TABLE 1.2, Significance of Reference Time +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +#4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/1.3.table b/definitions/grib2/tables/4/1.3.table new file mode 100644 index 000000000..d4ed48c63 --- /dev/null +++ b/definitions/grib2/tables/4/1.3.table @@ -0,0 +1,10 @@ +# CODE TABLE 1.3, Production status of data +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 TIGGE Operational products +5 5 TIGGE test products +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/1.4.table b/definitions/grib2/tables/4/1.4.table new file mode 100644 index 000000000..ac21f5c4c --- /dev/null +++ b/definitions/grib2/tables/4/1.4.table @@ -0,0 +1,13 @@ +# CODE TABLE 1.4, Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event Probability +# 8-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/3.0.table b/definitions/grib2/tables/4/3.0.table new file mode 100644 index 000000000..6030a5132 --- /dev/null +++ b/definitions/grib2/tables/4/3.0.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.0, Source of Grid Definition +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition Defined by originating centre +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/4/3.1.table b/definitions/grib2/tables/4/3.1.table new file mode 100644 index 000000000..6101b648c --- /dev/null +++ b/definitions/grib2/tables/4/3.1.table @@ -0,0 +1,43 @@ +# CODE TABLE 3.1, Grid Definition Template Number +0 0 Latitude/longitude. Also called equidistant cylindrical, or Plate Carree +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +# 4-9 Reserved +10 10 Mercator +# 11-19 Reserved +20 20 Polar stereographic can be south or north +# 21-29 Reserved +30 30 Lambert Conformal can be secant or tangent, conical or bipolar +31 31 Albers equal-area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +# 101-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid, with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovm�ller diagram grid, with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/4/3.10.table b/definitions/grib2/tables/4/3.10.table new file mode 100644 index 000000000..ae5baf9d5 --- /dev/null +++ b/definitions/grib2/tables/4/3.10.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.10, Scanning mode for one diamond +1 0 Points scan in +i direction, i.e. from pole to equator +1 1 Points scan in -i direction, i.e. from equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction is consecutive diff --git a/definitions/grib2/tables/4/3.11.table b/definitions/grib2/tables/4/3.11.table new file mode 100644 index 000000000..9a84d4a95 --- /dev/null +++ b/definitions/grib2/tables/4/3.11.table @@ -0,0 +1,5 @@ +# CODE TABLE 3.11, Interpretation of list of numbers defining number of points +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +255 255 Missing diff --git a/definitions/grib2/tables/4/3.15.table b/definitions/grib2/tables/4/3.15.table new file mode 100644 index 000000000..bb431e14f --- /dev/null +++ b/definitions/grib2/tables/4/3.15.table @@ -0,0 +1,25 @@ +# CODE TABLE 3.15, Physical meaning of vertical coordinate +# 0-19 Reserved +20 20 Temperature K +# 21-99 Reserved +100 100 Pressure Pa +101 101 Pressure deviation from mean sea level Pa +102 102 Altitude above mean sea level m +103 103 Height above ground (see Note 1) m +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface m +107 pt Potential temperature (theta) K +108 108 Pressure deviation from ground to level Pa +109 pv Potential vorticity K m-2 kg-1 s-1 +110 110 Geometrical height m +111 111 Eta coordinate (see Note 2) +112 112 Geopotential height gpm +# 113-159 Reserved +160 160 Depth below sea level m +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Negative values associated to this coordinate will indicate depth below ground surface. If values are all below surface, use of entry 106 is recommended, with positive coordinate values instead. +# (2) The Eta vertical coordinate system involves normalizing the pressure at some point on a specific level by the mean sea level pressure at that point. diff --git a/definitions/grib2/tables/4/3.2.table b/definitions/grib2/tables/4/3.2.table new file mode 100644 index 000000000..d037ee120 --- /dev/null +++ b/definitions/grib2/tables/4/3.2.table @@ -0,0 +1,11 @@ +# CODE TABLE 3.2, Shape of the Earth +0 0 Earth assumed spherical with radius = 6,367,470.0 m +1 1 Earth assumed spherical with radius specified by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6,378,160.0 m, minor axis = 6,356,775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6,378,137.0 m, minor axis = 6,356,752.314 m, f = 1/298.257222101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6,371,229.0 m +# 7-191 Reserved +# 192- 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/3.20.table b/definitions/grib2/tables/4/3.20.table new file mode 100644 index 000000000..cfa35ae38 --- /dev/null +++ b/definitions/grib2/tables/4/3.20.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.20, Type of horizontal line +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/3.21.table b/definitions/grib2/tables/4/3.21.table new file mode 100644 index 000000000..c2fd94586 --- /dev/null +++ b/definitions/grib2/tables/4/3.21.table @@ -0,0 +1,8 @@ +# CODE TABLE 3.21, Vertical dimension coordinate values definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +# 2-10 Reserved +11 11 Geometric coordinates +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/3.3.table b/definitions/grib2/tables/4/3.3.table new file mode 100644 index 000000000..84cbb8bcc --- /dev/null +++ b/definitions/grib2/tables/4/3.3.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.3, Resolution and Component Flags +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates respectively diff --git a/definitions/grib2/tables/4/3.4.table b/definitions/grib2/tables/4/3.4.table new file mode 100644 index 000000000..51d0664b2 --- /dev/null +++ b/definitions/grib2/tables/4/3.4.table @@ -0,0 +1,9 @@ +# FLAG TABLE 3.4, Scanning Mode +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction diff --git a/definitions/grib2/tables/4/3.5.table b/definitions/grib2/tables/4/3.5.table new file mode 100644 index 000000000..117b26be3 --- /dev/null +++ b/definitions/grib2/tables/4/3.5.table @@ -0,0 +1,5 @@ +# FLAG TABLE 3.5, Projection Centre +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bi-polar and symmetric diff --git a/definitions/grib2/tables/4/3.6.table b/definitions/grib2/tables/4/3.6.table new file mode 100644 index 000000000..41dd97e4a --- /dev/null +++ b/definitions/grib2/tables/4/3.6.table @@ -0,0 +1,2 @@ +# CODE TABLE 3.6, Spectral data representation type +1 1 The Associated Legendre Functions of the first kind are defined by: diff --git a/definitions/grib2/tables/4/3.7.table b/definitions/grib2/tables/4/3.7.table new file mode 100644 index 000000000..3aaf30bf9 --- /dev/null +++ b/definitions/grib2/tables/4/3.7.table @@ -0,0 +1,11 @@ +# Code Table 3.7: Spectral data representation mode +0 0 Reserved +1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) +# 2-254 Reserved +255 255 Missing +# Note: +# +#(1) Values of N(m) for common truncations cases: +# Triangular M = J = K, N(m) = J +# Rhomboidal K = J + M, N(m) = J+m +# Trapezoidal K = J, K > M, N(m) = J diff --git a/definitions/grib2/tables/4/3.8.table b/definitions/grib2/tables/4/3.8.table new file mode 100644 index 000000000..0d9b7d001 --- /dev/null +++ b/definitions/grib2/tables/4/3.8.table @@ -0,0 +1,8 @@ +# Code table 3.8: Grid point position +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/3.9.table b/definitions/grib2/tables/4/3.9.table new file mode 100644 index 000000000..800c08259 --- /dev/null +++ b/definitions/grib2/tables/4/3.9.table @@ -0,0 +1,3 @@ +# FLAG TABLE 3.9, Numbering order of diamonds as seen from the corresponding pole +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e., counter-clockwise) orientation diff --git a/definitions/grib2/tables/4/4.0.table b/definitions/grib2/tables/4/4.0.table new file mode 100644 index 000000000..78ba6fa05 --- /dev/null +++ b/definitions/grib2/tables/4/4.0.table @@ -0,0 +1,39 @@ +# CODE TABLE 4.0, Product Definition Template Number +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecast based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based in all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +20 20 Radar product +30 30 Satellite product +31 31 Satellite product +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +46 46 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of atmospheric aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +254 254 CCITT IA5 character string +1000 1000 Cross section of analysis and forecast at a point in time +1001 1001 Cross section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed +1100 1100 Hovm�ller-type grid with no averaging or other statistical processing +1101 1101 Hovm�ller-type grid with averaging or other statistical processing +50001 50001 Forecasting Systems with Variable Resolution in a point in time +50011 50011 Forecasting Systems with Variable Resolution in a continous or non countinous time interval diff --git a/definitions/grib2/tables/4/4.1.0.table b/definitions/grib2/tables/4/4.1.0.table new file mode 100644 index 000000000..33d1c3984 --- /dev/null +++ b/definitions/grib2/tables/4/4.1.0.table @@ -0,0 +1,30 @@ +#Discipline 0: Meteorological products +#Category Description +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave Radiation +5 5 Long-wave Radiation +6 6 Cloud +7 7 Thermodynamic Stability indices +8 8 Kinematic Stability indices +9 9 Temperature Probabilities +10 10 Moisture Probabilities +11 11 Momentum Probabilities +12 12 Mass Probabilities +13 13 Aerosols +14 14 Trace gases (e.g., ozone, CO2) +15 15 Radar +16 16 Forecast Radar Imagery +17 17 Electro-dynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical or physical constituents +# 20-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/4/4.1.1.table b/definitions/grib2/tables/4/4.1.1.table new file mode 100644 index 000000000..ebb7d9ea0 --- /dev/null +++ b/definitions/grib2/tables/4/4.1.1.table @@ -0,0 +1,9 @@ +#Discipline 1: Hydrological products +#Category Description +0 0 Hydrology basic products +1 1 Hydrology probabilities +#2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/4/4.1.10.table b/definitions/grib2/tables/4/4.1.10.table new file mode 100644 index 000000000..45b08caaa --- /dev/null +++ b/definitions/grib2/tables/4/4.1.10.table @@ -0,0 +1,12 @@ +#Discipline 10: Oceanographic Products +#Category Description +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface Properties +4 4 Sub-surface Properties +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/4/4.1.192.table b/definitions/grib2/tables/4/4.1.192.table new file mode 100644 index 000000000..c428acab0 --- /dev/null +++ b/definitions/grib2/tables/4/4.1.192.table @@ -0,0 +1,4 @@ +#Discipline 192: ECMWF local parameters +255 255 Missing + + diff --git a/definitions/grib2/tables/4/4.1.2.table b/definitions/grib2/tables/4/4.1.2.table new file mode 100644 index 000000000..f7f2ea2ba --- /dev/null +++ b/definitions/grib2/tables/4/4.1.2.table @@ -0,0 +1,11 @@ +#Discipline 2: Land Surface Products +#Category Description +0 0 Vegetation/Biomass +1 1 Agri-/aquacultural Special Products +2 2 Transportation-related Products +3 3 Soil Products +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/4/4.1.3.table b/definitions/grib2/tables/4/4.1.3.table new file mode 100644 index 000000000..f7578e163 --- /dev/null +++ b/definitions/grib2/tables/4/4.1.3.table @@ -0,0 +1,9 @@ +#Discipline 3: Space Products +#Category Description +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/4/4.1.table b/definitions/grib2/tables/4/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/4/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/4/4.10.table b/definitions/grib2/tables/4/4.10.table new file mode 100644 index 000000000..9cf447b69 --- /dev/null +++ b/definitions/grib2/tables/4/4.10.table @@ -0,0 +1,14 @@ +# CODE TABLE 4.10, Type of statistical processing + +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (Value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (Temporal variance) +8 8 Difference (Value at the start of time range minus value at the end) +9 ratio Ratio +# 192 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/4/4.11.table b/definitions/grib2/tables/4/4.11.table new file mode 100644 index 000000000..68901aac4 --- /dev/null +++ b/definitions/grib2/tables/4/4.11.table @@ -0,0 +1,9 @@ +# CODE TABLE 4.11, Type of time intervals + +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.12.table b/definitions/grib2/tables/4/4.12.table new file mode 100644 index 000000000..86b6177be --- /dev/null +++ b/definitions/grib2/tables/4/4.12.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.12, Operating Mode + +0 0 Maintenance Mode +1 1 Clear air +2 2 Precipitation +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.13.table b/definitions/grib2/tables/4/4.13.table new file mode 100644 index 000000000..ddd7537d0 --- /dev/null +++ b/definitions/grib2/tables/4/4.13.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.13, Quality Control Indicator + +0 0 No quality control applied +1 1 Quality control applied +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.14.table b/definitions/grib2/tables/4/4.14.table new file mode 100644 index 000000000..69984d720 --- /dev/null +++ b/definitions/grib2/tables/4/4.14.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.14, Clutter Filter Indicator + +0 0 No clutter filter used +1 1 Clutter filter used +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.15.table b/definitions/grib2/tables/4/4.15.table new file mode 100644 index 000000000..49b0b2d26 --- /dev/null +++ b/definitions/grib2/tables/4/4.15.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.15, Type of auxiliary information + +0 0 Confidence level ('grib2/4.151.table') +1 1 Delta time (seconds) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.151.table b/definitions/grib2/tables/4/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/4/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.2.0.0.table b/definitions/grib2/tables/4/4.2.0.0.table new file mode 100644 index 000000000..0386b8cd2 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.0.table @@ -0,0 +1,23 @@ +# Product Discipline 0: Meteorological products, Parameter Category 0: Temperature +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew point temperature (K) +7 7 Dew point depression (or deficit) (K) +8 8 Lapse rate (K m-1) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin Temperature (K) +#17-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.1.table b/definitions/grib2/tables/4/4.2.0.1.table new file mode 100644 index 000000000..154f2d007 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.1.table @@ -0,0 +1,62 @@ +# Product Discipline 0: Meteorological products, Parameter Category 1: Moisture +0 0 Specific humidity (kg kg-1) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg kg-1) +3 3 Precipitable water (kg m-2) +4 4 Vapor pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age (day) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type (code table (4.201) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg kg-1) +22 22 Cloud mixing ratio (kg kg-1) +23 23 Ice water mixing ratio (kg kg-1) +24 24 Rain mixing ratio (kg kg-1) +25 25 Snow mixing ratio (kg kg-1) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category code table (4.202) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg kg-1) +33 33 Categorical rain (Code table 4.222) +34 34 Categorical freezing rain (Code table 4.222) +35 35 Categorical ice pellets (Code table 4.222) +36 36 Categorical snow (Code table 4.222) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +51 51 Total column water (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m s-1) +58 58 Convective snowfall rate (m s-1) +59 59 Large scale snowfall rate (m s-1) +60 60 Snow depth water equivalent (kg m-2) +#47-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.13.table b/definitions/grib2/tables/4/4.2.0.13.table new file mode 100644 index 000000000..8fc3425af --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.13.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 13: Aerosols +0 0 Aerosol type (Code table 4.205) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.14.table b/definitions/grib2/tables/4/4.2.0.14.table new file mode 100644 index 000000000..309c40d47 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.14.table @@ -0,0 +1,7 @@ +# Product Discipline 0: Meteorological products, Parameter Category 14: Trace Gases +0 0 Total ozone (Dobson) +1 1 Ozone mixing ratio (kg kg-1) +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.15.table b/definitions/grib2/tables/4/4.2.0.15.table new file mode 100644 index 000000000..bb419178b --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.15.table @@ -0,0 +1,14 @@ +# Product Discipline 0 - Meteorological products, Parameter Category 15: Radar +0 0 Base spectrum width (m s-1) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m s-1) +3 3 Vertically-integrated liquid (kg m-1) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.18.table b/definitions/grib2/tables/4/4.2.0.18.table new file mode 100644 index 000000000..5c0fd6e5d --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.18.table @@ -0,0 +1,14 @@ +# Product Discipline 0: Meteorological products, Parameter Category 18: Nuclear/radiology +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of Iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of Iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.19.table b/definitions/grib2/tables/4/4.2.0.19.table new file mode 100644 index 000000000..369c3f657 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.19.table @@ -0,0 +1,24 @@ +# Product Discipline 0: Meteorological products, Parameter Category 19: Physical atmospheric properties +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 mixed layer depth (m) +4 4 Volcanic ash (Code table 4.206) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing (Code table 4.207) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence (Code table 4.208) +11 11 Turbulent kinetic energy (J kg-1) +12 12 Planetary boundary layer regime (Code table 4.209) +13 13 Contrail intensity (Code table 4.210) +14 14 Contrail engine type (Code table 4.211) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +# 19-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.190.table b/definitions/grib2/tables/4/4.2.0.190.table new file mode 100644 index 000000000..b1f47bc02 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.190.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 190: CCITT IA5 string +0 0 Arbitrary text string (CCITTIA5) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.191.table b/definitions/grib2/tables/4/4.2.0.191.table new file mode 100644 index 000000000..affb98f42 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.191.table @@ -0,0 +1,6 @@ +# Product Discipline 0: Meteorological products, Parameter Category 191: Miscellaneous +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.2.table b/definitions/grib2/tables/4/4.2.0.2.table new file mode 100644 index 000000000..f45206bff --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.2.table @@ -0,0 +1,35 @@ +# Product Discipline 0: Meteorological products, Parameter Category 2: Momentum +0 0 Wind direction [from which blowing] (deg true) +1 1 Wind speed (m s-1) +2 2 u-component of wind (m s-1) +3 3 v-component of wind (m s-1) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (s-1) +8 8 Vertical velocity [pressure] (Pa s-1) +9 9 Vertical velocity [geometric] (m s-1) +10 10 Absolute vorticity (s-1) +11 11 Absolute divergence (s-1) +12 12 Relative vorticity (s-1) +13 13 Relative divergence (s-1) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (s-1) +16 16 Vertical v-component shear (s-1) +17 17 Momentum flux, u component (N m-2) +18 18 Momentum flux, v component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m s-1) +22 22 Wind speed [gust] (m s-1) +23 23 u-component of wind (gust) (m s-1) +24 24 v-component of wind (gust) (m s-1) +25 25 Vertical speed shear (s-1) +26 26 Horizontal momentum flux (N m-2) +27 27 U-component storm motion (m s-1) +28 28 V-component storm motion (m s-1) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m s-1) +# 31-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.2.0.20.table b/definitions/grib2/tables/4/4.2.0.20.table new file mode 100644 index 000000000..4e7f45db4 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.20.table @@ -0,0 +1,13 @@ +0 0 Mass density (concentration) kg.m-3 +1 1 Total column (integrated mass density) kg.m-2 +2 2 Volume mixing ratio (mole fraction in air) mole.mole-1 +3 3 Mass mixing ratio (mass fraction in air) kg.kg-1 +4 4 Surface dry deposition mass flux kg.m-2.s-1 +5 5 Surface wet deposition mass flux kg.m-2.s-1 +6 6 Atmosphere emission mass flux kg.m-2.s-1 +7 7 Chemical gross production rate of mole concentration mole.m-3.s-1 +8 8 Chemical gross destruction rate of mole concentration mole.m-3.s-1 +9 9 Surface dry deposition mass flux into stomata kg.m-2.s-1 +#10-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.2.0.3.table b/definitions/grib2/tables/4/4.2.0.3.table new file mode 100644 index 000000000..5c7e8151d --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.3.table @@ -0,0 +1,25 @@ +# Product Discipline 0: Meteorological products, Parameter Category 3: Mass + 0 0 Pressure (Pa) + 1 1 Pressure reduced to MSL (Pa) + 2 2 Pressure tendency (Pa s-1) + 3 3 ICAO Standard Atmosphere Reference Height (m) + 4 4 Geopotential (m2 s-2) + 5 5 Geopotential height (gpm) + 6 6 Geometric height (m) + 7 7 Standard deviation of height (m) + 8 8 Pressure anomaly (Pa) + 9 9 Geopotential height anomaly (gpm) + 10 10 Density (kg m-3) + 11 11 Altimeter setting (Pa) + 12 12 Thickness (m) + 13 13 Pressure altitude (m) + 14 14 Density altitude (m) + 15 15 5-wave geopotential height (gpm) + 16 16 Zonal flux of gravity wave stress (N m-2) + 17 17 Meridional flux of gravity wave stress (N m-2) + 18 18 Planetary boundary layer height (m) + 19 19 5-wave geopotential height anomaly (gpm) +# 20-191 Reserved +# 192-254 Reserved for local use + 255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.4.table b/definitions/grib2/tables/4/4.2.0.4.table new file mode 100644 index 000000000..815c184a2 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.4.table @@ -0,0 +1,14 @@ +# Product Discipline 0: Meteorological products, Parameter Category 4: Short-wave Radiation +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +9 8 Upward short-wave radiation flux (W m-2) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.5.table b/definitions/grib2/tables/4/4.2.0.5.table new file mode 100644 index 000000000..1b57fa301 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.5.table @@ -0,0 +1,11 @@ +# Product Discipline 0: Meteorological products, Parameter Category 5: Long-wave Radiation +0 0 Net long wave radiation flux (surface) (W m-2) +1 1 Net long wave radiation flux (top of atmosphere) (W m-2) +2 2 Long wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long wave radiation flux (W m-2) +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.6.table b/definitions/grib2/tables/4/4.2.0.6.table new file mode 100644 index 000000000..05cf72f57 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.6.table @@ -0,0 +1,30 @@ +# Product Discipline 0: Meteorological products, Parameter Category 6: Cloud +0 0 Cloud Ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type (Code table 4.203) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage (Code table 4.204) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J kg-1) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg kg-1) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg kg-1) +24 24 Sunshine (Numeric) +# 23-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.0.7.table b/definitions/grib2/tables/4/4.2.0.7.table new file mode 100644 index 000000000..78374fde5 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.0.7.table @@ -0,0 +1,18 @@ +# Product Discipline 0: Meteorological products, Parameter Category 7: Thermodynamic Stability Indices +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J kg-1) +7 7 Convective inhibition (J kg-1) +8 8 Storm relative helicity (J kg-1) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +#13-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.1.0.table b/definitions/grib2/tables/4/4.2.1.0.table new file mode 100644 index 000000000..97efaa8cc --- /dev/null +++ b/definitions/grib2/tables/4/4.2.1.0.table @@ -0,0 +1,16 @@ +# Product Discipline 1: Hydrologic products, Parameter Category 0: Hydrology basic products +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely sensed snow cover (Code table 4.215) +3 3 Elevation of snow covered terrain (Code table 4.216) +4 4 Snow water equivalent percent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Remotely sensed snow cover is expressed as a field of dimensionless, thematic values. The currently accepted values are for no-snow/no-cloud, 50, for clouds, 100, and for snow, 250. See code table 4.215. +# (2) A data field representing snow coverage by elevation portrays at which elevations there is a snow pack. The elevation values typically range from 0 to 90 in 100 m increments. A value of 253 is used to represent a no-snow/no-cloud data point. A value of 254 is used to represent a data point at which snow elevation could not be estimated because of clouds obscuring the remote sensor (when using aircraft or satellite measurements). +# (3) Snow water equivalent percent of normal is stored in percent of normal units. For example, a value of 110 indicates 110 percent of the normal snow water equivalent for a given depth of snow. + diff --git a/definitions/grib2/tables/4/4.2.1.1.table b/definitions/grib2/tables/4/4.2.1.1.table new file mode 100644 index 000000000..b7342ef2f --- /dev/null +++ b/definitions/grib2/tables/4/4.2.1.1.table @@ -0,0 +1,8 @@ +# Product Discipline 1: Hydrologic products, Parameter Category 1: Hydrology probabilities +0 0 Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) +1 1 Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.10.0.table b/definitions/grib2/tables/4/4.2.10.0.table new file mode 100644 index 000000000..479e26d51 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.10.0.table @@ -0,0 +1,20 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 0: Waves +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (Degree true) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (Degree true) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (Degree true) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (Degree true) +13 13 Secondary wave mean period (s) +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/4/4.2.10.1.table b/definitions/grib2/tables/4/4.2.10.1.table new file mode 100644 index 000000000..df18f31dd --- /dev/null +++ b/definitions/grib2/tables/4/4.2.10.1.table @@ -0,0 +1,8 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 1: Currents +0 0 Current direction (Degree true) +1 1 Current speed (m s-1) +2 2 u-component of current (m s-1) +3 3 v-component of current (m s-1) +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.2.10.2.table b/definitions/grib2/tables/4/4.2.10.2.table new file mode 100644 index 000000000..cb73da46c --- /dev/null +++ b/definitions/grib2/tables/4/4.2.10.2.table @@ -0,0 +1,12 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 2: Ice +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (Degree true) +3 3 Speed of ice drift (m s-1) +4 4 u-component of ice drift (m s-1) +5 5 v-component of ice drift (m s-1) +6 6 Ice growth rate (m s-1) +7 7 Ice divergence (s-1) +# 8-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.2.10.3.table b/definitions/grib2/tables/4/4.2.10.3.table new file mode 100644 index 000000000..a14ae22e3 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.10.3.table @@ -0,0 +1,6 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 3: Surface Properties +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.2.10.4.table b/definitions/grib2/tables/4/4.2.10.4.table new file mode 100644 index 000000000..a24c3c8c4 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.10.4.table @@ -0,0 +1,9 @@ +# Product Discipline 10: Oceanographic products, Parameter Category 4: Sub-surface Properties +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg kg-1) +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.192.0.table b/definitions/grib2/tables/4/4.2.192.0.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.0.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.1.table b/definitions/grib2/tables/4/4.2.192.1.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.1.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.10.table b/definitions/grib2/tables/4/4.2.192.10.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.10.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.100.table b/definitions/grib2/tables/4/4.2.192.100.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.100.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.101.table b/definitions/grib2/tables/4/4.2.192.101.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.101.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.102.table b/definitions/grib2/tables/4/4.2.192.102.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.102.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.103.table b/definitions/grib2/tables/4/4.2.192.103.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.103.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.104.table b/definitions/grib2/tables/4/4.2.192.104.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.104.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.105.table b/definitions/grib2/tables/4/4.2.192.105.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.105.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.106.table b/definitions/grib2/tables/4/4.2.192.106.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.106.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.107.table b/definitions/grib2/tables/4/4.2.192.107.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.107.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.108.table b/definitions/grib2/tables/4/4.2.192.108.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.108.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.109.table b/definitions/grib2/tables/4/4.2.192.109.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.109.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.11.table b/definitions/grib2/tables/4/4.2.192.11.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.11.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.110.table b/definitions/grib2/tables/4/4.2.192.110.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.110.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.111.table b/definitions/grib2/tables/4/4.2.192.111.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.111.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.112.table b/definitions/grib2/tables/4/4.2.192.112.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.112.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.113.table b/definitions/grib2/tables/4/4.2.192.113.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.113.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.114.table b/definitions/grib2/tables/4/4.2.192.114.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.114.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.115.table b/definitions/grib2/tables/4/4.2.192.115.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.115.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.116.table b/definitions/grib2/tables/4/4.2.192.116.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.116.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.117.table b/definitions/grib2/tables/4/4.2.192.117.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.117.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.118.table b/definitions/grib2/tables/4/4.2.192.118.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.118.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.119.table b/definitions/grib2/tables/4/4.2.192.119.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.119.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.12.table b/definitions/grib2/tables/4/4.2.192.12.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.12.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.120.table b/definitions/grib2/tables/4/4.2.192.120.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.120.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.121.table b/definitions/grib2/tables/4/4.2.192.121.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.121.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.122.table b/definitions/grib2/tables/4/4.2.192.122.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.122.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.123.table b/definitions/grib2/tables/4/4.2.192.123.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.123.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.124.table b/definitions/grib2/tables/4/4.2.192.124.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.124.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.125.table b/definitions/grib2/tables/4/4.2.192.125.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.125.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.126.table b/definitions/grib2/tables/4/4.2.192.126.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.126.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.127.table b/definitions/grib2/tables/4/4.2.192.127.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.127.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.128.table b/definitions/grib2/tables/4/4.2.192.128.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.128.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.129.table b/definitions/grib2/tables/4/4.2.192.129.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.129.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.13.table b/definitions/grib2/tables/4/4.2.192.13.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.13.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.130.table b/definitions/grib2/tables/4/4.2.192.130.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.130.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.131.table b/definitions/grib2/tables/4/4.2.192.131.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.131.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.132.table b/definitions/grib2/tables/4/4.2.192.132.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.132.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.133.table b/definitions/grib2/tables/4/4.2.192.133.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.133.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.134.table b/definitions/grib2/tables/4/4.2.192.134.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.134.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.135.table b/definitions/grib2/tables/4/4.2.192.135.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.135.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.136.table b/definitions/grib2/tables/4/4.2.192.136.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.136.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.137.table b/definitions/grib2/tables/4/4.2.192.137.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.137.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.138.table b/definitions/grib2/tables/4/4.2.192.138.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.138.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.139.table b/definitions/grib2/tables/4/4.2.192.139.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.139.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.14.table b/definitions/grib2/tables/4/4.2.192.14.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.14.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.140.table b/definitions/grib2/tables/4/4.2.192.140.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.140.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.141.table b/definitions/grib2/tables/4/4.2.192.141.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.141.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.142.table b/definitions/grib2/tables/4/4.2.192.142.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.142.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.143.table b/definitions/grib2/tables/4/4.2.192.143.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.143.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.144.table b/definitions/grib2/tables/4/4.2.192.144.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.144.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.145.table b/definitions/grib2/tables/4/4.2.192.145.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.145.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.146.table b/definitions/grib2/tables/4/4.2.192.146.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.146.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.147.table b/definitions/grib2/tables/4/4.2.192.147.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.147.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.148.table b/definitions/grib2/tables/4/4.2.192.148.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.148.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.149.table b/definitions/grib2/tables/4/4.2.192.149.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.149.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.15.table b/definitions/grib2/tables/4/4.2.192.15.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.15.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.150.table b/definitions/grib2/tables/4/4.2.192.150.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.150.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.151.table b/definitions/grib2/tables/4/4.2.192.151.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.151.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.152.table b/definitions/grib2/tables/4/4.2.192.152.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.152.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.153.table b/definitions/grib2/tables/4/4.2.192.153.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.153.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.154.table b/definitions/grib2/tables/4/4.2.192.154.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.154.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.155.table b/definitions/grib2/tables/4/4.2.192.155.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.155.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.156.table b/definitions/grib2/tables/4/4.2.192.156.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.156.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.157.table b/definitions/grib2/tables/4/4.2.192.157.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.157.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.158.table b/definitions/grib2/tables/4/4.2.192.158.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.158.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.159.table b/definitions/grib2/tables/4/4.2.192.159.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.159.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.16.table b/definitions/grib2/tables/4/4.2.192.16.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.16.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.160.table b/definitions/grib2/tables/4/4.2.192.160.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.160.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.161.table b/definitions/grib2/tables/4/4.2.192.161.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.161.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.162.table b/definitions/grib2/tables/4/4.2.192.162.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.162.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.163.table b/definitions/grib2/tables/4/4.2.192.163.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.163.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.164.table b/definitions/grib2/tables/4/4.2.192.164.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.164.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.165.table b/definitions/grib2/tables/4/4.2.192.165.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.165.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.166.table b/definitions/grib2/tables/4/4.2.192.166.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.166.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.167.table b/definitions/grib2/tables/4/4.2.192.167.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.167.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.168.table b/definitions/grib2/tables/4/4.2.192.168.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.168.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.169.table b/definitions/grib2/tables/4/4.2.192.169.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.169.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.17.table b/definitions/grib2/tables/4/4.2.192.17.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.17.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.170.table b/definitions/grib2/tables/4/4.2.192.170.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.170.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.171.table b/definitions/grib2/tables/4/4.2.192.171.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.171.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.172.table b/definitions/grib2/tables/4/4.2.192.172.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.172.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.173.table b/definitions/grib2/tables/4/4.2.192.173.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.173.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.174.table b/definitions/grib2/tables/4/4.2.192.174.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.174.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.175.table b/definitions/grib2/tables/4/4.2.192.175.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.175.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.176.table b/definitions/grib2/tables/4/4.2.192.176.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.176.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.177.table b/definitions/grib2/tables/4/4.2.192.177.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.177.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.178.table b/definitions/grib2/tables/4/4.2.192.178.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.178.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.179.table b/definitions/grib2/tables/4/4.2.192.179.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.179.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.18.table b/definitions/grib2/tables/4/4.2.192.18.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.18.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.180.table b/definitions/grib2/tables/4/4.2.192.180.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.180.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.181.table b/definitions/grib2/tables/4/4.2.192.181.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.181.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.182.table b/definitions/grib2/tables/4/4.2.192.182.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.182.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.183.table b/definitions/grib2/tables/4/4.2.192.183.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.183.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.184.table b/definitions/grib2/tables/4/4.2.192.184.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.184.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.185.table b/definitions/grib2/tables/4/4.2.192.185.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.185.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.186.table b/definitions/grib2/tables/4/4.2.192.186.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.186.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.187.table b/definitions/grib2/tables/4/4.2.192.187.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.187.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.188.table b/definitions/grib2/tables/4/4.2.192.188.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.188.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.189.table b/definitions/grib2/tables/4/4.2.192.189.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.189.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.19.table b/definitions/grib2/tables/4/4.2.192.19.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.19.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.190.table b/definitions/grib2/tables/4/4.2.192.190.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.190.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.191.table b/definitions/grib2/tables/4/4.2.192.191.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.191.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.192.table b/definitions/grib2/tables/4/4.2.192.192.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.192.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.193.table b/definitions/grib2/tables/4/4.2.192.193.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.193.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.194.table b/definitions/grib2/tables/4/4.2.192.194.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.194.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.195.table b/definitions/grib2/tables/4/4.2.192.195.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.195.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.196.table b/definitions/grib2/tables/4/4.2.192.196.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.196.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.197.table b/definitions/grib2/tables/4/4.2.192.197.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.197.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.198.table b/definitions/grib2/tables/4/4.2.192.198.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.198.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.199.table b/definitions/grib2/tables/4/4.2.192.199.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.199.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.2.table b/definitions/grib2/tables/4/4.2.192.2.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.2.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.20.table b/definitions/grib2/tables/4/4.2.192.20.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.20.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.200.table b/definitions/grib2/tables/4/4.2.192.200.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.200.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.201.table b/definitions/grib2/tables/4/4.2.192.201.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.201.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.202.table b/definitions/grib2/tables/4/4.2.192.202.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.202.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.203.table b/definitions/grib2/tables/4/4.2.192.203.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.203.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.204.table b/definitions/grib2/tables/4/4.2.192.204.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.204.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.205.table b/definitions/grib2/tables/4/4.2.192.205.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.205.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.206.table b/definitions/grib2/tables/4/4.2.192.206.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.206.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.207.table b/definitions/grib2/tables/4/4.2.192.207.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.207.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.208.table b/definitions/grib2/tables/4/4.2.192.208.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.208.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.209.table b/definitions/grib2/tables/4/4.2.192.209.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.209.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.21.table b/definitions/grib2/tables/4/4.2.192.21.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.21.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.210.table b/definitions/grib2/tables/4/4.2.192.210.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.210.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.211.table b/definitions/grib2/tables/4/4.2.192.211.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.211.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.212.table b/definitions/grib2/tables/4/4.2.192.212.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.212.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.213.table b/definitions/grib2/tables/4/4.2.192.213.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.213.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.214.table b/definitions/grib2/tables/4/4.2.192.214.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.214.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.215.table b/definitions/grib2/tables/4/4.2.192.215.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.215.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.216.table b/definitions/grib2/tables/4/4.2.192.216.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.216.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.217.table b/definitions/grib2/tables/4/4.2.192.217.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.217.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.218.table b/definitions/grib2/tables/4/4.2.192.218.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.218.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.219.table b/definitions/grib2/tables/4/4.2.192.219.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.219.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.22.table b/definitions/grib2/tables/4/4.2.192.22.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.22.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.220.table b/definitions/grib2/tables/4/4.2.192.220.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.220.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.221.table b/definitions/grib2/tables/4/4.2.192.221.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.221.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.222.table b/definitions/grib2/tables/4/4.2.192.222.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.222.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.223.table b/definitions/grib2/tables/4/4.2.192.223.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.223.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.224.table b/definitions/grib2/tables/4/4.2.192.224.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.224.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.225.table b/definitions/grib2/tables/4/4.2.192.225.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.225.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.226.table b/definitions/grib2/tables/4/4.2.192.226.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.226.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.227.table b/definitions/grib2/tables/4/4.2.192.227.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.227.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.228.table b/definitions/grib2/tables/4/4.2.192.228.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.228.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.229.table b/definitions/grib2/tables/4/4.2.192.229.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.229.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.23.table b/definitions/grib2/tables/4/4.2.192.23.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.23.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.230.table b/definitions/grib2/tables/4/4.2.192.230.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.230.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.231.table b/definitions/grib2/tables/4/4.2.192.231.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.231.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.232.table b/definitions/grib2/tables/4/4.2.192.232.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.232.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.233.table b/definitions/grib2/tables/4/4.2.192.233.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.233.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.234.table b/definitions/grib2/tables/4/4.2.192.234.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.234.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.235.table b/definitions/grib2/tables/4/4.2.192.235.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.235.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.236.table b/definitions/grib2/tables/4/4.2.192.236.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.236.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.237.table b/definitions/grib2/tables/4/4.2.192.237.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.237.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.238.table b/definitions/grib2/tables/4/4.2.192.238.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.238.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.239.table b/definitions/grib2/tables/4/4.2.192.239.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.239.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.24.table b/definitions/grib2/tables/4/4.2.192.24.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.24.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.240.table b/definitions/grib2/tables/4/4.2.192.240.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.240.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.241.table b/definitions/grib2/tables/4/4.2.192.241.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.241.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.242.table b/definitions/grib2/tables/4/4.2.192.242.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.242.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.243.table b/definitions/grib2/tables/4/4.2.192.243.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.243.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.244.table b/definitions/grib2/tables/4/4.2.192.244.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.244.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.245.table b/definitions/grib2/tables/4/4.2.192.245.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.245.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.246.table b/definitions/grib2/tables/4/4.2.192.246.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.246.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.247.table b/definitions/grib2/tables/4/4.2.192.247.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.247.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.248.table b/definitions/grib2/tables/4/4.2.192.248.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.248.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.249.table b/definitions/grib2/tables/4/4.2.192.249.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.249.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.25.table b/definitions/grib2/tables/4/4.2.192.25.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.25.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.250.table b/definitions/grib2/tables/4/4.2.192.250.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.250.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.251.table b/definitions/grib2/tables/4/4.2.192.251.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.251.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.252.table b/definitions/grib2/tables/4/4.2.192.252.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.252.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.253.table b/definitions/grib2/tables/4/4.2.192.253.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.253.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.254.table b/definitions/grib2/tables/4/4.2.192.254.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.254.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.255.table b/definitions/grib2/tables/4/4.2.192.255.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.255.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.26.table b/definitions/grib2/tables/4/4.2.192.26.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.26.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.27.table b/definitions/grib2/tables/4/4.2.192.27.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.27.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.28.table b/definitions/grib2/tables/4/4.2.192.28.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.28.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.29.table b/definitions/grib2/tables/4/4.2.192.29.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.29.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.3.table b/definitions/grib2/tables/4/4.2.192.3.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.3.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.30.table b/definitions/grib2/tables/4/4.2.192.30.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.30.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.31.table b/definitions/grib2/tables/4/4.2.192.31.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.31.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.32.table b/definitions/grib2/tables/4/4.2.192.32.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.32.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.33.table b/definitions/grib2/tables/4/4.2.192.33.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.33.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.34.table b/definitions/grib2/tables/4/4.2.192.34.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.34.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.35.table b/definitions/grib2/tables/4/4.2.192.35.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.35.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.36.table b/definitions/grib2/tables/4/4.2.192.36.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.36.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.37.table b/definitions/grib2/tables/4/4.2.192.37.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.37.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.38.table b/definitions/grib2/tables/4/4.2.192.38.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.38.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.39.table b/definitions/grib2/tables/4/4.2.192.39.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.39.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.4.table b/definitions/grib2/tables/4/4.2.192.4.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.4.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.40.table b/definitions/grib2/tables/4/4.2.192.40.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.40.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.41.table b/definitions/grib2/tables/4/4.2.192.41.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.41.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.42.table b/definitions/grib2/tables/4/4.2.192.42.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.42.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.43.table b/definitions/grib2/tables/4/4.2.192.43.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.43.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.44.table b/definitions/grib2/tables/4/4.2.192.44.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.44.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.45.table b/definitions/grib2/tables/4/4.2.192.45.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.45.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.46.table b/definitions/grib2/tables/4/4.2.192.46.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.46.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.47.table b/definitions/grib2/tables/4/4.2.192.47.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.47.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.48.table b/definitions/grib2/tables/4/4.2.192.48.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.48.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.49.table b/definitions/grib2/tables/4/4.2.192.49.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.49.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.5.table b/definitions/grib2/tables/4/4.2.192.5.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.5.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.50.table b/definitions/grib2/tables/4/4.2.192.50.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.50.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.51.table b/definitions/grib2/tables/4/4.2.192.51.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.51.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.52.table b/definitions/grib2/tables/4/4.2.192.52.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.52.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.53.table b/definitions/grib2/tables/4/4.2.192.53.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.53.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.54.table b/definitions/grib2/tables/4/4.2.192.54.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.54.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.55.table b/definitions/grib2/tables/4/4.2.192.55.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.55.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.56.table b/definitions/grib2/tables/4/4.2.192.56.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.56.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.57.table b/definitions/grib2/tables/4/4.2.192.57.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.57.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.58.table b/definitions/grib2/tables/4/4.2.192.58.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.58.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.59.table b/definitions/grib2/tables/4/4.2.192.59.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.59.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.6.table b/definitions/grib2/tables/4/4.2.192.6.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.6.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.60.table b/definitions/grib2/tables/4/4.2.192.60.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.60.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.61.table b/definitions/grib2/tables/4/4.2.192.61.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.61.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.62.table b/definitions/grib2/tables/4/4.2.192.62.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.62.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.63.table b/definitions/grib2/tables/4/4.2.192.63.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.63.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.64.table b/definitions/grib2/tables/4/4.2.192.64.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.64.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.65.table b/definitions/grib2/tables/4/4.2.192.65.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.65.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.66.table b/definitions/grib2/tables/4/4.2.192.66.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.66.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.67.table b/definitions/grib2/tables/4/4.2.192.67.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.67.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.68.table b/definitions/grib2/tables/4/4.2.192.68.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.68.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.69.table b/definitions/grib2/tables/4/4.2.192.69.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.69.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.7.table b/definitions/grib2/tables/4/4.2.192.7.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.7.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.70.table b/definitions/grib2/tables/4/4.2.192.70.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.70.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.71.table b/definitions/grib2/tables/4/4.2.192.71.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.71.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.72.table b/definitions/grib2/tables/4/4.2.192.72.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.72.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.73.table b/definitions/grib2/tables/4/4.2.192.73.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.73.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.74.table b/definitions/grib2/tables/4/4.2.192.74.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.74.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.75.table b/definitions/grib2/tables/4/4.2.192.75.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.75.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.76.table b/definitions/grib2/tables/4/4.2.192.76.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.76.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.77.table b/definitions/grib2/tables/4/4.2.192.77.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.77.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.78.table b/definitions/grib2/tables/4/4.2.192.78.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.78.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.79.table b/definitions/grib2/tables/4/4.2.192.79.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.79.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.8.table b/definitions/grib2/tables/4/4.2.192.8.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.8.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.80.table b/definitions/grib2/tables/4/4.2.192.80.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.80.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.81.table b/definitions/grib2/tables/4/4.2.192.81.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.81.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.82.table b/definitions/grib2/tables/4/4.2.192.82.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.82.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.83.table b/definitions/grib2/tables/4/4.2.192.83.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.83.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.84.table b/definitions/grib2/tables/4/4.2.192.84.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.84.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.85.table b/definitions/grib2/tables/4/4.2.192.85.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.85.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.86.table b/definitions/grib2/tables/4/4.2.192.86.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.86.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.87.table b/definitions/grib2/tables/4/4.2.192.87.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.87.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.88.table b/definitions/grib2/tables/4/4.2.192.88.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.88.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.89.table b/definitions/grib2/tables/4/4.2.192.89.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.89.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.9.table b/definitions/grib2/tables/4/4.2.192.9.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.9.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.90.table b/definitions/grib2/tables/4/4.2.192.90.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.90.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.91.table b/definitions/grib2/tables/4/4.2.192.91.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.91.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.92.table b/definitions/grib2/tables/4/4.2.192.92.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.92.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.93.table b/definitions/grib2/tables/4/4.2.192.93.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.93.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.94.table b/definitions/grib2/tables/4/4.2.192.94.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.94.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.95.table b/definitions/grib2/tables/4/4.2.192.95.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.95.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.96.table b/definitions/grib2/tables/4/4.2.192.96.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.96.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.97.table b/definitions/grib2/tables/4/4.2.192.97.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.97.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.98.table b/definitions/grib2/tables/4/4.2.192.98.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.98.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.192.99.table b/definitions/grib2/tables/4/4.2.192.99.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.192.99.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/4/4.2.2.0.table b/definitions/grib2/tables/4/4.2.2.0.table new file mode 100644 index 000000000..fdc8ce0ef --- /dev/null +++ b/definitions/grib2/tables/4/4.2.2.0.table @@ -0,0 +1,29 @@ +# Product Discipline 2: Land surface products, Parameter Category 0: Vegetation/Biomass +0 0 Land cover (0=land, 1=sea) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg -2 s-1) +7 7 Model terrain height (m) +8 8 Land use (Code table 4.212) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadars mixing length scale (m) +15 15 Canopy conductance (m s-1) +16 16 Minimal stomatal resistance (s m-1) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy conductance (Proportion) +20 20 Soil moisture parameter in canopy conductance (Proportion) +21 21 Humidity parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +26 26 Wilting point (kg m-3) +# 23-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.2.3.table b/definitions/grib2/tables/4/4.2.2.3.table new file mode 100644 index 000000000..d6376fecb --- /dev/null +++ b/definitions/grib2/tables/4/4.2.2.3.table @@ -0,0 +1,16 @@ +# Product Discipline 2: Land surface products, Parameter Category 3: Soil Products +0 0 Soil type (Code table 4.213) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +# 11-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.3.0.table b/definitions/grib2/tables/4/4.2.3.0.table new file mode 100644 index 000000000..944566388 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.3.0.table @@ -0,0 +1,14 @@ +# Product discipline 3: Space products, Parameter Category 0: Image format products +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +# 9-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.3.1.table b/definitions/grib2/tables/4/4.2.3.1.table new file mode 100644 index 000000000..60d6e8420 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.3.1.table @@ -0,0 +1,11 @@ +# Product Discipline 3: Space products, Parameter Category 1: Quantitative products +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m s-1) +5 5 Estimated v component of wind (m s-1) +# 6-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/4/4.2.table b/definitions/grib2/tables/4/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/4/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/4/4.201.table b/definitions/grib2/tables/4/4.201.table new file mode 100644 index 000000000..7445c9c20 --- /dev/null +++ b/definitions/grib2/tables/4/4.201.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.201, Precipitation Type + +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.202.table b/definitions/grib2/tables/4/4.202.table new file mode 100644 index 000000000..69dbe3a5d --- /dev/null +++ b/definitions/grib2/tables/4/4.202.table @@ -0,0 +1,66 @@ +# CODE TABLE 4.202, Precipitable water category + +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.203.table b/definitions/grib2/tables/4/4.203.table new file mode 100644 index 000000000..d2ad10b07 --- /dev/null +++ b/definitions/grib2/tables/4/4.203.table @@ -0,0 +1,88 @@ +# CODE TABLE 4.203, Cloud type + +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground based fog beneath the lowest layer +12 12 Stratus - ground based fog beneath the lowest layer +13 13 Stratocumulus - ground based fog beneath the lowest layer +14 14 Cumulus - ground based fog beneath the lowest layer +15 15 Altostratus - ground based fog beneath the lowest layer +16 16 Nimbostratus - ground based fog beneath the lowest layer +17 17 Altocumulus - ground based fog beneath the lowest layer +18 18 Cirrostratus - ground based fog beneath the lowest layer +19 19 Cirrocumulus - ground based fog beneath the lowest layer +20 20 Cirrus - ground based fog beneath the lowest layer +191 191 Unknown +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.204.table b/definitions/grib2/tables/4/4.204.table new file mode 100644 index 000000000..23b60cf77 --- /dev/null +++ b/definitions/grib2/tables/4/4.204.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.204, Thunderstorm coverage + +0 0 None +1 1 Isolated (1% - 2%) +2 2 Few (3% - 15%) +3 3 Scattered (16% - 45%) +4 4 Numerous (> 45%) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.205.table b/definitions/grib2/tables/4/4.205.table new file mode 100644 index 000000000..98c7b48ec --- /dev/null +++ b/definitions/grib2/tables/4/4.205.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.205, Aerosol type + +0 0 Aerosol not present +1 1 Aerosol present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.206.table b/definitions/grib2/tables/4/4.206.table new file mode 100644 index 000000000..b1ef2e787 --- /dev/null +++ b/definitions/grib2/tables/4/4.206.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.206, Volcanic ash + +0 0 Not present +1 1 Present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.207.table b/definitions/grib2/tables/4/4.207.table new file mode 100644 index 000000000..13fc7b54b --- /dev/null +++ b/definitions/grib2/tables/4/4.207.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.207, Icing + +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.208.table b/definitions/grib2/tables/4/4.208.table new file mode 100644 index 000000000..15b514a07 --- /dev/null +++ b/definitions/grib2/tables/4/4.208.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.208, Turbulence + +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.209.table b/definitions/grib2/tables/4/4.209.table new file mode 100644 index 000000000..b4cca1d73 --- /dev/null +++ b/definitions/grib2/tables/4/4.209.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.209, Planetary boundary layer regime + +1 1 Stable +2 2 Mechanically driven turbulence +3 3 Forced convection +4 4 Free convection +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.210.table b/definitions/grib2/tables/4/4.210.table new file mode 100644 index 000000000..d05e07721 --- /dev/null +++ b/definitions/grib2/tables/4/4.210.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.210, Contrail intensity + +0 0 Contrail not present +1 1 Contrail present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.211.table b/definitions/grib2/tables/4/4.211.table new file mode 100644 index 000000000..604b2e643 --- /dev/null +++ b/definitions/grib2/tables/4/4.211.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.211, Contrail engine type + +0 0 Low bypass +1 1 High bypass +2 2 Non bypass +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.212.table b/definitions/grib2/tables/4/4.212.table new file mode 100644 index 000000000..7393238e7 --- /dev/null +++ b/definitions/grib2/tables/4/4.212.table @@ -0,0 +1,79 @@ +# CODE TABLE 4.212, Land Use + +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.213.table b/definitions/grib2/tables/4/4.213.table new file mode 100644 index 000000000..cc4bdfc1f --- /dev/null +++ b/definitions/grib2/tables/4/4.213.table @@ -0,0 +1,77 @@ +# CODE TABLE 4.213, Soil type + +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.215.table b/definitions/grib2/tables/4/4.215.table new file mode 100644 index 000000000..7e1442962 --- /dev/null +++ b/definitions/grib2/tables/4/4.215.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.215, Remotely Sensed Snow Coverage + +50 50 No-snow/no-cloud +100 100 Clouds +250 250 Snow +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.216.table b/definitions/grib2/tables/4/4.216.table new file mode 100644 index 000000000..dbe26b0e5 --- /dev/null +++ b/definitions/grib2/tables/4/4.216.table @@ -0,0 +1,95 @@ +# CODE TABLE 4.216, Elevation of Snow Covered Terrain + +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/4/4.217.table b/definitions/grib2/tables/4/4.217.table new file mode 100644 index 000000000..475ab686d --- /dev/null +++ b/definitions/grib2/tables/4/4.217.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.217, Cloud mask type + +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.220.table b/definitions/grib2/tables/4/4.220.table new file mode 100644 index 000000000..9fddcd49f --- /dev/null +++ b/definitions/grib2/tables/4/4.220.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.220, Horizontal dimension processed + +0 0 Latitude +1 1 Longitude +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.221.table b/definitions/grib2/tables/4/4.221.table new file mode 100644 index 000000000..2291eab60 --- /dev/null +++ b/definitions/grib2/tables/4/4.221.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.221, Treatment of missing data + +0 0 Not included +1 1 Extrapolated +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.230.table b/definitions/grib2/tables/4/4.230.table new file mode 100644 index 000000000..638358ead --- /dev/null +++ b/definitions/grib2/tables/4/4.230.table @@ -0,0 +1,47 @@ +#Code figure Code figure Meaning +0 air Air +1 ozone Ozone +2 water Water vapour +3 methane Methane +4 carbonDioxide Carbon dioxide +5 carbonMonoxide Carbon monoxide +6 nitrogenDioxide Nitrogen dioxide +7 nitrousOxide Nitrous oxide +8 8 Nitrogen monoxide +9 9 Formaldehyde +10 10 Sulphur dioxide +11 11 Nitric acid +12 noy All nitrogen oxides (NOy) expressed as nitrogen +13 13 Peroxyacetyl nitrate +14 14 Hydroxyl radical +15 15 Ammonia +16 16 Ammonium +17 17 Radon +18 18 Dimethyl sulphide +19 hexachlorocyclohexane Hexachlorocyclohexane +20 20 Alpha hexachlorocyclohexane +21 21 Elemental mercury +22 22 Divalent mercury +23 23 Hexachlorobiphenyl +24 nox NOx expressed as nitrogen +25 nmvoc Non-methane volatile organic compounds expressed as carbon +26 anmvoc Anthropogenic non-methane volatile organic compounds expressed as carbon +27 bnmvoc Biogenic non-methane volatile organic compounds expressed as carbon +#28-39999 28-39999 Reserved +40000 40000 Sulphate dry aerosol +40001 40001 Black carbon dry aerosol +40002 40002 Particulate organic matter dry aerosol +40003 40003 Primary particulate organic matter dry aerosol +40004 40004 Secondary particulate organic matter dry aerosol +40005 40005 Sea salt dry aerosol +40006 40006 Dust dry aerosol +40007 40007 Mercury dry aerosol +40008 40008 PM10 aerosol +40009 40009 PM2P5 aerosol +40010 40010 PM1 aerosol +40011 40011 Nitrate dry aerosol +40012 40012 Ammonium dry aerosol +40013 40013 Water in ambient aerosol +#40014-63999 40014-63999 Reserved +#64000-65534 64000-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/4/4.3.table b/definitions/grib2/tables/4/4.3.table new file mode 100644 index 000000000..84a72352b --- /dev/null +++ b/definitions/grib2/tables/4/4.3.table @@ -0,0 +1,13 @@ +# CODE TABLE 4.3, Type of generating process +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.4.table b/definitions/grib2/tables/4/4.4.table new file mode 100644 index 000000000..61aa20c5f --- /dev/null +++ b/definitions/grib2/tables/4/4.4.table @@ -0,0 +1,16 @@ +# CODE TABLE 4.4, Indicator of unit of time range +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.5.table b/definitions/grib2/tables/4/4.5.table new file mode 100644 index 000000000..89c5fb175 --- /dev/null +++ b/definitions/grib2/tables/4/4.5.table @@ -0,0 +1,33 @@ +#Code table 4.5: Fixed surface types and units +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0o C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +# 10-19 Reserved +20 20 Isothermal level (K) +#21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level +# 112-116 Reserved +117 117 Mixed layer depth (m) +# 118-159 Reserved +160 160 Depth below sea level (m) +#161-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.6.table b/definitions/grib2/tables/4/4.6.table new file mode 100644 index 000000000..dc6d94c20 --- /dev/null +++ b/definitions/grib2/tables/4/4.6.table @@ -0,0 +1,8 @@ +# CODE TABLE 4.6, Type of ensemble forecast + +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.7.table b/definitions/grib2/tables/4/4.7.table new file mode 100644 index 000000000..dadf59b46 --- /dev/null +++ b/definitions/grib2/tables/4/4.7.table @@ -0,0 +1,73 @@ +# CODE TABLE 4.7, Derived forecast + +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members (see Note) +6 6 Unweighted mean of the cluster members +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.8.table b/definitions/grib2/tables/4/4.8.table new file mode 100644 index 000000000..9d3a0e8a7 --- /dev/null +++ b/definitions/grib2/tables/4/4.8.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.8, Clustering Method + +0 0 Anomaly correlation +1 1 Root mean square +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.9.table b/definitions/grib2/tables/4/4.9.table new file mode 100644 index 000000000..895f30171 --- /dev/null +++ b/definitions/grib2/tables/4/4.9.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.9, Probability Type + +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/4.91.table b/definitions/grib2/tables/4/4.91.table new file mode 100644 index 000000000..a960f56b0 --- /dev/null +++ b/definitions/grib2/tables/4/4.91.table @@ -0,0 +1,78 @@ +# CODE TABLE 4.91 Category Type + +0 0 Below lower limit +1 1 Above upper limit +2 2 Between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Above lower limit +4 4 Below upper limit +5 5 Lower or equal lower limit +6 6 Greater or equal upper limit +7 7 Between lower and upper limits. The range includes lower limit and upper limit +8 8 Greater or equal lower limit +9 9 Lower or equal upper limit +10 10 Between lower and upper limits. The range includes the upper limit but not the lower limit +11 11 Equal to first limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/4/5.0.table b/definitions/grib2/tables/4/5.0.table new file mode 100644 index 000000000..0cf3752cb --- /dev/null +++ b/definitions/grib2/tables/4/5.0.table @@ -0,0 +1,16 @@ +# CODE TABLE 5.0, Data Representation Template Number +0 0 Grid point data - simple packing +1 1 Matrix value - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - ieee packing +6 6 Grid point data - simple packing with pre-processing +40 40 JPEG2000 Packing +41 41 PNG pacling +50 50 Spectral data -simple packing +51 51 Spherical harmonics data - complex packing +61 61 Grid point data - simple packing with logarithm pre-processing +# 192-254 Reserved for local use +255 255 Missing +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling diff --git a/definitions/grib2/tables/4/5.1.table b/definitions/grib2/tables/4/5.1.table new file mode 100644 index 000000000..d7ca4bedc --- /dev/null +++ b/definitions/grib2/tables/4/5.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.1, Type of original field values +0 0 Floating point +1 1 Integer +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/5.2.table b/definitions/grib2/tables/4/5.2.table new file mode 100644 index 000000000..a048d712e --- /dev/null +++ b/definitions/grib2/tables/4/5.2.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.2, Matrix coordinate value function definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +11 11 Geometric coordinates +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/5.3.table b/definitions/grib2/tables/4/5.3.table new file mode 100644 index 000000000..4a673ef85 --- /dev/null +++ b/definitions/grib2/tables/4/5.3.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.3, Matrix coordinate parameter +1 1 Direction Degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/5.4.table b/definitions/grib2/tables/4/5.4.table new file mode 100644 index 000000000..1fd37966f --- /dev/null +++ b/definitions/grib2/tables/4/5.4.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.4, Group Splitting Method +0 0 Row by row splitting +1 1 General group splitting +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/5.40.table b/definitions/grib2/tables/4/5.40.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/4/5.40.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/4/5.40000.table b/definitions/grib2/tables/4/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/4/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/4/5.5.table b/definitions/grib2/tables/4/5.5.table new file mode 100644 index 000000000..d1caac9e8 --- /dev/null +++ b/definitions/grib2/tables/4/5.5.table @@ -0,0 +1,7 @@ +# CODE TABLE 5.5, Missing Value Management for Complex Packing + +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/5.50002.table b/definitions/grib2/tables/4/5.50002.table new file mode 100644 index 000000000..10c243cb0 --- /dev/null +++ b/definitions/grib2/tables/4/5.50002.table @@ -0,0 +1,19 @@ +# second order packing modes table + +1 0 no boustrophedonic +1 1 boustrophedonic +2 0 Reserved +2 1 Reserved +3 0 Reserved +3 1 Reserved +4 0 Reserved +4 1 Reserved +5 0 Reserved +5 1 Reserved +6 0 Reserved +6 1 Reserved +7 0 Reserved +7 1 Reserved +8 0 Reserved +8 1 Reserved + diff --git a/definitions/grib2/tables/4/5.6.table b/definitions/grib2/tables/4/5.6.table new file mode 100644 index 000000000..4aec3314e --- /dev/null +++ b/definitions/grib2/tables/4/5.6.table @@ -0,0 +1,68 @@ +# CODE TABLE 5.6, Order of Spatial Differencing + +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/4/5.7.table b/definitions/grib2/tables/4/5.7.table new file mode 100644 index 000000000..35b23b94d --- /dev/null +++ b/definitions/grib2/tables/4/5.7.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.7, Precision of floating-point numbers + +1 1 IEEE 32-bit (I=4 in Section 7) +2 2 IEEE 64-bit (I=8 in Section 7) +3 3 IEEE 128-bit (I=16 in Section 7) +255 255 Missing diff --git a/definitions/grib2/tables/4/5.8.table b/definitions/grib2/tables/4/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/4/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/4/5.9.table b/definitions/grib2/tables/4/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/4/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/4/6.0.table b/definitions/grib2/tables/4/6.0.table new file mode 100644 index 000000000..6a8c74b48 --- /dev/null +++ b/definitions/grib2/tables/4/6.0.table @@ -0,0 +1,7 @@ +# CODE TABLE 6.0, Bit Map Indicator + +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 2 253 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same "GRIB" message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/4/stepType.table b/definitions/grib2/tables/4/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/4/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/5/0.0.table b/definitions/grib2/tables/5/0.0.table new file mode 100644 index 000000000..fd2056350 --- /dev/null +++ b/definitions/grib2/tables/5/0.0.table @@ -0,0 +1,10 @@ +#Code Table 0.0: Discipline of processed data in the GRIB message, number of GRIB Master Table +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/1.0.table b/definitions/grib2/tables/5/1.0.table new file mode 100644 index 000000000..e1a71a030 --- /dev/null +++ b/definitions/grib2/tables/5/1.0.table @@ -0,0 +1,10 @@ +# Code Table 1.0: GRIB Master Tables Version Number +0 0 Experimental +1 1 Version implemented on 7 November 2001 +2 2 Version implemented on 4 November 2003 +3 3 Version implemented on 2 November 2005 +4 4 Version implemented on 7 November 2007 +5 5 Version implemented on 4 November 2009 +6 6 Pre-operational to be implemented by next amendment +# 7-254 Future versions +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/5/1.1.table b/definitions/grib2/tables/5/1.1.table new file mode 100644 index 000000000..6c5a60361 --- /dev/null +++ b/definitions/grib2/tables/5/1.1.table @@ -0,0 +1,5 @@ +# Code Table 1.1 GRIB Local Tables Version Number +0 0 Local tables not used +# . Only table entries and templates from the current Master table are valid. +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/5/1.2.table b/definitions/grib2/tables/5/1.2.table new file mode 100644 index 000000000..eb8755209 --- /dev/null +++ b/definitions/grib2/tables/5/1.2.table @@ -0,0 +1,8 @@ +# CODE TABLE 1.2, Significance of Reference Time +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +#4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/1.3.table b/definitions/grib2/tables/5/1.3.table new file mode 100644 index 000000000..d4ed48c63 --- /dev/null +++ b/definitions/grib2/tables/5/1.3.table @@ -0,0 +1,10 @@ +# CODE TABLE 1.3, Production status of data +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 TIGGE Operational products +5 5 TIGGE test products +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/1.4.table b/definitions/grib2/tables/5/1.4.table new file mode 100644 index 000000000..8166b7761 --- /dev/null +++ b/definitions/grib2/tables/5/1.4.table @@ -0,0 +1,13 @@ +# CODE TABLE 1.4, Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event Probability +# 8-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/5/3.0.table b/definitions/grib2/tables/5/3.0.table new file mode 100644 index 000000000..6030a5132 --- /dev/null +++ b/definitions/grib2/tables/5/3.0.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.0, Source of Grid Definition +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition Defined by originating centre +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/5/3.1.table b/definitions/grib2/tables/5/3.1.table new file mode 100644 index 000000000..6101b648c --- /dev/null +++ b/definitions/grib2/tables/5/3.1.table @@ -0,0 +1,43 @@ +# CODE TABLE 3.1, Grid Definition Template Number +0 0 Latitude/longitude. Also called equidistant cylindrical, or Plate Carree +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +# 4-9 Reserved +10 10 Mercator +# 11-19 Reserved +20 20 Polar stereographic can be south or north +# 21-29 Reserved +30 30 Lambert Conformal can be secant or tangent, conical or bipolar +31 31 Albers equal-area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +# 101-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid, with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovm�ller diagram grid, with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/5/3.10.table b/definitions/grib2/tables/5/3.10.table new file mode 100644 index 000000000..ae5baf9d5 --- /dev/null +++ b/definitions/grib2/tables/5/3.10.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.10, Scanning mode for one diamond +1 0 Points scan in +i direction, i.e. from pole to equator +1 1 Points scan in -i direction, i.e. from equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction is consecutive diff --git a/definitions/grib2/tables/5/3.11.table b/definitions/grib2/tables/5/3.11.table new file mode 100644 index 000000000..9a84d4a95 --- /dev/null +++ b/definitions/grib2/tables/5/3.11.table @@ -0,0 +1,5 @@ +# CODE TABLE 3.11, Interpretation of list of numbers defining number of points +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +255 255 Missing diff --git a/definitions/grib2/tables/5/3.15.table b/definitions/grib2/tables/5/3.15.table new file mode 100644 index 000000000..bb431e14f --- /dev/null +++ b/definitions/grib2/tables/5/3.15.table @@ -0,0 +1,25 @@ +# CODE TABLE 3.15, Physical meaning of vertical coordinate +# 0-19 Reserved +20 20 Temperature K +# 21-99 Reserved +100 100 Pressure Pa +101 101 Pressure deviation from mean sea level Pa +102 102 Altitude above mean sea level m +103 103 Height above ground (see Note 1) m +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface m +107 pt Potential temperature (theta) K +108 108 Pressure deviation from ground to level Pa +109 pv Potential vorticity K m-2 kg-1 s-1 +110 110 Geometrical height m +111 111 Eta coordinate (see Note 2) +112 112 Geopotential height gpm +# 113-159 Reserved +160 160 Depth below sea level m +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Negative values associated to this coordinate will indicate depth below ground surface. If values are all below surface, use of entry 106 is recommended, with positive coordinate values instead. +# (2) The Eta vertical coordinate system involves normalizing the pressure at some point on a specific level by the mean sea level pressure at that point. diff --git a/definitions/grib2/tables/5/3.2.table b/definitions/grib2/tables/5/3.2.table new file mode 100644 index 000000000..d037ee120 --- /dev/null +++ b/definitions/grib2/tables/5/3.2.table @@ -0,0 +1,11 @@ +# CODE TABLE 3.2, Shape of the Earth +0 0 Earth assumed spherical with radius = 6,367,470.0 m +1 1 Earth assumed spherical with radius specified by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6,378,160.0 m, minor axis = 6,356,775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6,378,137.0 m, minor axis = 6,356,752.314 m, f = 1/298.257222101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6,371,229.0 m +# 7-191 Reserved +# 192- 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/3.20.table b/definitions/grib2/tables/5/3.20.table new file mode 100644 index 000000000..cfa35ae38 --- /dev/null +++ b/definitions/grib2/tables/5/3.20.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.20, Type of horizontal line +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/3.21.table b/definitions/grib2/tables/5/3.21.table new file mode 100644 index 000000000..c2fd94586 --- /dev/null +++ b/definitions/grib2/tables/5/3.21.table @@ -0,0 +1,8 @@ +# CODE TABLE 3.21, Vertical dimension coordinate values definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +# 2-10 Reserved +11 11 Geometric coordinates +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/3.3.table b/definitions/grib2/tables/5/3.3.table new file mode 100644 index 000000000..84cbb8bcc --- /dev/null +++ b/definitions/grib2/tables/5/3.3.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.3, Resolution and Component Flags +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates respectively diff --git a/definitions/grib2/tables/5/3.4.table b/definitions/grib2/tables/5/3.4.table new file mode 100644 index 000000000..51d0664b2 --- /dev/null +++ b/definitions/grib2/tables/5/3.4.table @@ -0,0 +1,9 @@ +# FLAG TABLE 3.4, Scanning Mode +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction diff --git a/definitions/grib2/tables/5/3.5.table b/definitions/grib2/tables/5/3.5.table new file mode 100644 index 000000000..117b26be3 --- /dev/null +++ b/definitions/grib2/tables/5/3.5.table @@ -0,0 +1,5 @@ +# FLAG TABLE 3.5, Projection Centre +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bi-polar and symmetric diff --git a/definitions/grib2/tables/5/3.6.table b/definitions/grib2/tables/5/3.6.table new file mode 100644 index 000000000..41dd97e4a --- /dev/null +++ b/definitions/grib2/tables/5/3.6.table @@ -0,0 +1,2 @@ +# CODE TABLE 3.6, Spectral data representation type +1 1 The Associated Legendre Functions of the first kind are defined by: diff --git a/definitions/grib2/tables/5/3.7.table b/definitions/grib2/tables/5/3.7.table new file mode 100644 index 000000000..3aaf30bf9 --- /dev/null +++ b/definitions/grib2/tables/5/3.7.table @@ -0,0 +1,11 @@ +# Code Table 3.7: Spectral data representation mode +0 0 Reserved +1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) +# 2-254 Reserved +255 255 Missing +# Note: +# +#(1) Values of N(m) for common truncations cases: +# Triangular M = J = K, N(m) = J +# Rhomboidal K = J + M, N(m) = J+m +# Trapezoidal K = J, K > M, N(m) = J diff --git a/definitions/grib2/tables/5/3.8.table b/definitions/grib2/tables/5/3.8.table new file mode 100644 index 000000000..0d9b7d001 --- /dev/null +++ b/definitions/grib2/tables/5/3.8.table @@ -0,0 +1,8 @@ +# Code table 3.8: Grid point position +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/5/3.9.table b/definitions/grib2/tables/5/3.9.table new file mode 100644 index 000000000..800c08259 --- /dev/null +++ b/definitions/grib2/tables/5/3.9.table @@ -0,0 +1,3 @@ +# FLAG TABLE 3.9, Numbering order of diamonds as seen from the corresponding pole +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e., counter-clockwise) orientation diff --git a/definitions/grib2/tables/5/4.0.table b/definitions/grib2/tables/5/4.0.table new file mode 100644 index 000000000..0def8e308 --- /dev/null +++ b/definitions/grib2/tables/5/4.0.table @@ -0,0 +1,41 @@ +# CODE TABLE 4.0, Product Definition Template Number +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecast based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based in all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +20 20 Radar product +30 30 Satellite product +31 31 Satellite product +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +46 46 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of atmospheric aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +254 254 CCITT IA5 character string +1000 1000 Cross section of analysis and forecast at a point in time +1001 1001 Cross section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed +1100 1100 Hovm�ller-type grid with no averaging or other statistical processing +1101 1101 Hovm�ller-type grid with averaging or other statistical processing +50001 50001 Forecasting Systems with Variable Resolution in a point in time +50011 50011 Forecasting Systems with Variable Resolution in a continous or non countinous time interval + +65335 65535 Missing diff --git a/definitions/grib2/tables/5/4.1.0.table b/definitions/grib2/tables/5/4.1.0.table new file mode 100644 index 000000000..33d1c3984 --- /dev/null +++ b/definitions/grib2/tables/5/4.1.0.table @@ -0,0 +1,30 @@ +#Discipline 0: Meteorological products +#Category Description +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave Radiation +5 5 Long-wave Radiation +6 6 Cloud +7 7 Thermodynamic Stability indices +8 8 Kinematic Stability indices +9 9 Temperature Probabilities +10 10 Moisture Probabilities +11 11 Momentum Probabilities +12 12 Mass Probabilities +13 13 Aerosols +14 14 Trace gases (e.g., ozone, CO2) +15 15 Radar +16 16 Forecast Radar Imagery +17 17 Electro-dynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical or physical constituents +# 20-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/5/4.1.1.table b/definitions/grib2/tables/5/4.1.1.table new file mode 100644 index 000000000..ebb7d9ea0 --- /dev/null +++ b/definitions/grib2/tables/5/4.1.1.table @@ -0,0 +1,9 @@ +#Discipline 1: Hydrological products +#Category Description +0 0 Hydrology basic products +1 1 Hydrology probabilities +#2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/5/4.1.10.table b/definitions/grib2/tables/5/4.1.10.table new file mode 100644 index 000000000..45b08caaa --- /dev/null +++ b/definitions/grib2/tables/5/4.1.10.table @@ -0,0 +1,12 @@ +#Discipline 10: Oceanographic Products +#Category Description +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface Properties +4 4 Sub-surface Properties +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/5/4.1.192.table b/definitions/grib2/tables/5/4.1.192.table new file mode 100644 index 000000000..c428acab0 --- /dev/null +++ b/definitions/grib2/tables/5/4.1.192.table @@ -0,0 +1,4 @@ +#Discipline 192: ECMWF local parameters +255 255 Missing + + diff --git a/definitions/grib2/tables/5/4.1.2.table b/definitions/grib2/tables/5/4.1.2.table new file mode 100644 index 000000000..f7f2ea2ba --- /dev/null +++ b/definitions/grib2/tables/5/4.1.2.table @@ -0,0 +1,11 @@ +#Discipline 2: Land Surface Products +#Category Description +0 0 Vegetation/Biomass +1 1 Agri-/aquacultural Special Products +2 2 Transportation-related Products +3 3 Soil Products +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/5/4.1.3.table b/definitions/grib2/tables/5/4.1.3.table new file mode 100644 index 000000000..f7578e163 --- /dev/null +++ b/definitions/grib2/tables/5/4.1.3.table @@ -0,0 +1,9 @@ +#Discipline 3: Space Products +#Category Description +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/5/4.1.table b/definitions/grib2/tables/5/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/5/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/5/4.10.table b/definitions/grib2/tables/5/4.10.table new file mode 100644 index 000000000..9cf447b69 --- /dev/null +++ b/definitions/grib2/tables/5/4.10.table @@ -0,0 +1,14 @@ +# CODE TABLE 4.10, Type of statistical processing + +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (Value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (Temporal variance) +8 8 Difference (Value at the start of time range minus value at the end) +9 ratio Ratio +# 192 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/5/4.11.table b/definitions/grib2/tables/5/4.11.table new file mode 100644 index 000000000..68901aac4 --- /dev/null +++ b/definitions/grib2/tables/5/4.11.table @@ -0,0 +1,9 @@ +# CODE TABLE 4.11, Type of time intervals + +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.12.table b/definitions/grib2/tables/5/4.12.table new file mode 100644 index 000000000..86b6177be --- /dev/null +++ b/definitions/grib2/tables/5/4.12.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.12, Operating Mode + +0 0 Maintenance Mode +1 1 Clear air +2 2 Precipitation +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.13.table b/definitions/grib2/tables/5/4.13.table new file mode 100644 index 000000000..ddd7537d0 --- /dev/null +++ b/definitions/grib2/tables/5/4.13.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.13, Quality Control Indicator + +0 0 No quality control applied +1 1 Quality control applied +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.14.table b/definitions/grib2/tables/5/4.14.table new file mode 100644 index 000000000..69984d720 --- /dev/null +++ b/definitions/grib2/tables/5/4.14.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.14, Clutter Filter Indicator + +0 0 No clutter filter used +1 1 Clutter filter used +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.15.table b/definitions/grib2/tables/5/4.15.table new file mode 100644 index 000000000..504128024 --- /dev/null +++ b/definitions/grib2/tables/5/4.15.table @@ -0,0 +1,10 @@ +0 0 Data is calculated directly from the source grid with no interpolation (see note 1) +1 1 Bilinear interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +2 2 Bicubic interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +3 3 Using the value from the source grid grid-point which is nearest to the nominal grid-point +4 4 Budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point (see note 2) +5 5 Spectral interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +6 6 Neighbor-budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point (see note 3) +#7-191 Reserved +#192-254 Reserved for Local Use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.151.table b/definitions/grib2/tables/5/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/5/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.192.table b/definitions/grib2/tables/5/4.192.table new file mode 100644 index 000000000..e1fd91594 --- /dev/null +++ b/definitions/grib2/tables/5/4.192.table @@ -0,0 +1,4 @@ +1 1 first +2 2 second +3 3 third +4 4 fourth diff --git a/definitions/grib2/tables/5/4.2.0.0.table b/definitions/grib2/tables/5/4.2.0.0.table new file mode 100644 index 000000000..0ffce8eb7 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.0.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew point temperature (K) +7 7 Dew point depression (or deficit) (K) +8 8 Lapse rate (K m-1) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin temperature (K) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.1.table b/definitions/grib2/tables/5/4.2.0.1.table new file mode 100644 index 000000000..c294cd5b0 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.1.table @@ -0,0 +1,71 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Specific humidity (kg kg-1) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg kg-1) +3 3 Precipitable water (kg m-2) +4 4 Vapor pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age (day) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type (code table (4.201)) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg kg-1) +22 22 Cloud mixing ratio (kg kg-1) +23 23 Ice water mixing ratio (kg kg-1) +24 24 Rain mixing ratio (kg kg-1) +25 25 Snow mixing ratio (kg kg-1) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category (code table (4.202)) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg kg-1) +33 33 Categorical rain ((Code table 4.222)) +34 34 Categorical freezing rain ((Code table 4.222)) +35 35 Categorical ice pellets ((Code table 4.222)) +36 36 Categorical snow ((Code table 4.222)) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +47 47 Large scale water precipitation (non-convective) (kg m-2) +48 48 Convective water precipitation (kg m-2) +49 49 Total water precipitation (kg m-2) +50 50 Total snow precipitation (kg m-2) +51 51 Total column water (Vertically integrated total water (vapour + cloud water/ice)) (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale snowfall rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m s-1) +58 58 Convective snowfall rate (m s-1) +59 59 Large scale snowfall rate (m s-1) +60 60 Snow depth water equivalent (kg m-2) +61 61 Snow density (kg m-3) +62 62 Snow evaporation (kg m-2) +63 63 Reserved (-) +64 64 Total column integrated water vapour (kg m-2) +65 65 Rain precipitation rate (kg m-2 s-1) +66 66 Snow precipitation rate (kg m-2 s-1) +67 67 Freezing rain precipitation rate (kg m-2 s-1) +68 68 Ice pellets precipitation rate (kg m-2 s-1) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.13.table b/definitions/grib2/tables/5/4.2.0.13.table new file mode 100644 index 000000000..6a581877e --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.13.table @@ -0,0 +1,3 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Aerosol type (code table (4.205)) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.14.table b/definitions/grib2/tables/5/4.2.0.14.table new file mode 100644 index 000000000..336ce514d --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.14.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Total ozone (Dobson) +1 1 Ozone mixing ratio (kg kg-1) +2 2 Total column integrated ozone (Dobson) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.15.table b/definitions/grib2/tables/5/4.2.0.15.table new file mode 100644 index 000000000..af4ca64c1 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.15.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Base spectrum width (m s-1) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m s-1) +3 3 Vertically-integrated liquid (kg m-1) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.18.table b/definitions/grib2/tables/5/4.2.0.18.table new file mode 100644 index 000000000..26cc1e41d --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.18.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of Iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of Iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.19.table b/definitions/grib2/tables/5/4.2.0.19.table new file mode 100644 index 000000000..cfcfb4c3b --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.19.table @@ -0,0 +1,26 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 mixed layer depth (m) +4 4 Volcanic ash (code table (4.206)) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing (code table (4.207)) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence (code table (4.208)) +11 11 Turbulent kinetic energy (J kg-1) +12 12 Planetary boundary layer regime (code table (4.209)) +13 13 Contrail intensity (code table (4.210)) +14 14 Contrail engine type (code table (4.211)) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +19 19 Snow albedo (%) +20 20 Icing (%) +21 21 In-cloud turbulence (%) +22 22 Clear air turbulence (CAT) (%) +23 23 Supercooled large droplet probability (see Note 4) (%) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.190.table b/definitions/grib2/tables/5/4.2.0.190.table new file mode 100644 index 000000000..591cf2e82 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.190.table @@ -0,0 +1,3 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Arbitrary text string (CCITTIA5) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.191.table b/definitions/grib2/tables/5/4.2.0.191.table new file mode 100644 index 000000000..6b01f2114 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.191.table @@ -0,0 +1,3 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.2.table b/definitions/grib2/tables/5/4.2.0.2.table new file mode 100644 index 000000000..0cd7e05de --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.2.table @@ -0,0 +1,33 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Wind direction (from which blowing) (deg true) +1 1 Wind speed (m s-1) +2 2 u-component of wind (m s-1) +3 3 v-component of wind (m s-1) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (s-1) +8 8 Vertical velocity (pressure) (Pa s-1) +9 9 Vertical velocity (geometric) (m s-1) +10 10 Absolute vorticity (s-1) +11 11 Absolute divergence (s-1) +12 12 Relative vorticity (s-1) +13 13 Relative divergence (s-1) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (s-1) +16 16 Vertical v-component shear (s-1) +17 17 Momentum flux, u component (N m-2) +18 18 Momentum flux, v component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m s-1) +22 22 Wind speed (gust) (m s-1) +23 23 u-component of wind (gust) (m s-1) +24 24 v-component of wind (gust) (m s-1) +25 25 Vertical speed shear (s-1) +26 26 Horizontal momentum flux (N m-2) +27 27 U-component storm motion (m s-1) +28 28 V-component storm motion (m s-1) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m s-1) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.20.table b/definitions/grib2/tables/5/4.2.0.20.table new file mode 100644 index 000000000..4d762c38e --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.20.table @@ -0,0 +1,26 @@ +0 0 Mass density (concentration) kg m-3 +1 1 Column-integrated mass density (see Note1) kg m-2 +2 2 Mass mixing ratio (mass fraction in air) kg kg-1 +3 3 Atmosphere emission mass flux kg m-2 s-1 +4 4 Atmosphere net production mass flux kg m-2 s-1 +5 5 Atmosphere net production and emission mass flux kg m-2 s-1 +6 6 Surface dry deposition mass flux kg m-2 s-1 +7 7 Surface wet deposition mass flux kg m-2 s-1 +8 8 Atmosphere re-emission mass flux kg m-2 s-1 +#9-49 9-49 Reserved +50 50 Amount in atmosphere mol +51 51 Concentration in air mol m-3 +52 52 Volume mixing ratio (fraction in air) mol mol-1 +53 53 Chemical gross production rate of concentration mol m-3 s-1 +54 54 Chemical gross destruction rate of concentration mol m-3 s-1 +55 55 Surface flux mol m-2 s-1 +56 56 Changes of amount in atmosphere (see Note 1) mol s-1 +57 57 Total yearly average burden of the atmosphere mol +58 58 Total yearly averaged atmospheric loss (see Note 1) mol s-1 +#59-99 59-99 Reserved +100 100 Surface area density (aerosol) m-1 +101 101 Atmosphere optical thickness m +#102-191 102-191 Reserved +#192-254 192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/5/4.2.0.20.table~ b/definitions/grib2/tables/5/4.2.0.20.table~ new file mode 100644 index 000000000..5a6ce1533 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.20.table~ @@ -0,0 +1,13 @@ +0 0 Mass density (concentration) (kg m-3) +1 1 Column-integrated (integrated mass density) (kg m-2) +2 2 Volume mixing ratio (mole fraction in air) mole.mole-1 +3 3 Mass mixing ratio (mass fraction in air) kg.kg-1 +4 4 Surface dry deposition mass flux kg.m-2.s-1 +5 5 Surface wet deposition mass flux kg.m-2.s-1 +6 6 Atmosphere emission mass flux kg.m-2.s-1 +7 7 Chemical gross production rate of mole concentration mole.m-3.s-1 +8 8 Chemical gross destruction rate of mole concentration mole.m-3.s-1 +9 9 Surface dry deposition mass flux into stomata kg.m-2.s-1 +#10-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.2.0.3.table b/definitions/grib2/tables/5/4.2.0.3.table new file mode 100644 index 000000000..9b52e7837 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.3.table @@ -0,0 +1,27 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Pressure (Pa) +1 1 Pressure reduced to MSL (Pa) +2 2 Pressure tendency (Pa s-1) +3 3 ICAO Standard Atmosphere Reference Height (m) +4 4 Geopotential (m2 s-2) +5 5 Geopotential height (gpm) +6 6 Geometric height (m) +7 7 Standard deviation of height (m) +8 8 Pressure anomaly (Pa) +9 9 Geopotential height anomaly (gpm) +10 10 Density (kg m-3) +11 11 Altimeter setting (Pa) +12 12 Thickness (m) +13 13 Pressure altitude (m) +14 14 Density altitude (m) +15 15 5-wave geopotential height (gpm) +16 16 Zonal flux of gravity wave stress (N m-2) +17 17 Meridional flux of gravity wave stress (N m-2) +18 18 Planetary boundary layer height (m) +19 19 5-wave geopotential height anomaly (gpm) +20 20 Standard deviation of sub-grid scale orography (m) +21 21 Angle of sub-gridscale orography (rad) +22 22 Slope of sub-gridscale orography (Numeric) +23 23 Gravity wave dissipation (Wm-2) +24 24 Anisotropy of sub-gridscale orography (Numeric) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.4.table b/definitions/grib2/tables/5/4.2.0.4.table new file mode 100644 index 000000000..031f3dffb --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.4.table @@ -0,0 +1,17 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +8 8 Upward short-wave radiation flux (W m-2) +9 9 Net short wave radiation flux (W m-2) +10 10 Photosynthetically active radiation (W m-2) +11 11 Net short-wave radiation flux, clear sky (W m-2) +12 12 Downward UV radiation (W m-2) +50 50 UV index (under clear sky) (Numeric) +51 51 UV index (Numeric) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.5.table b/definitions/grib2/tables/5/4.2.0.5.table new file mode 100644 index 000000000..926912fd3 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.5.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net long wave radiation flux (surface) (W m-2) +1 1 Net long wave radiation flux (top of atmosphere) (W m-2) +2 2 Long wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long wave radiation flux (W m-2) +6 6 Net long-wave radiation flux, clear sky (W m-2) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.6.table b/definitions/grib2/tables/5/4.2.0.6.table new file mode 100644 index 000000000..a796ec4b9 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.6.table @@ -0,0 +1,28 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Cloud Ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type (code table (4.203)) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage (code table (4.204)) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J kg-1) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg kg-1) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg kg-1) +24 24 Sunshine (Numeric) +25 25 Horizontal extent of cumulonimbus (CB) (%) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.0.7.table b/definitions/grib2/tables/5/4.2.0.7.table new file mode 100644 index 000000000..ba18fcf00 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.0.7.table @@ -0,0 +1,15 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J kg-1) +7 7 Convective inhibition (J kg-1) +8 8 Storm relative helicity (J kg-1) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.1.0.table b/definitions/grib2/tables/5/4.2.1.0.table new file mode 100644 index 000000000..cad7c98ba --- /dev/null +++ b/definitions/grib2/tables/5/4.2.1.0.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely sensed snow cover ((code table 4.215)) +3 3 Elevation of snow covered terrain ((code table 4.216)) +4 4 Snow water equivalent percent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.1.1.table b/definitions/grib2/tables/5/4.2.1.1.table new file mode 100644 index 000000000..7c118b291 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.1.1.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation). (kg m-2) +1 1 Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.10.0.table b/definitions/grib2/tables/5/4.2.10.0.table new file mode 100644 index 000000000..0466bcf0a --- /dev/null +++ b/definitions/grib2/tables/5/4.2.10.0.table @@ -0,0 +1,16 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (Degree true) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (Degree true) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (Degree true) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (Degree true) +13 13 Secondary wave mean period (s) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.10.1.table b/definitions/grib2/tables/5/4.2.10.1.table new file mode 100644 index 000000000..c8ae7229b --- /dev/null +++ b/definitions/grib2/tables/5/4.2.10.1.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Current direction (Degree true) +1 1 Current speed (m s-1) +2 2 u-component of current (m s-1) +3 3 v-component of current (m s-1) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.10.191.table b/definitions/grib2/tables/5/4.2.10.191.table new file mode 100644 index 000000000..e69de29bb diff --git a/definitions/grib2/tables/5/4.2.10.2.table b/definitions/grib2/tables/5/4.2.10.2.table new file mode 100644 index 000000000..8e6909464 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.10.2.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (Degree true) +3 3 Speed of ice drift (m s-1) +4 4 u-component of ice drift (m s-1) +5 5 v-component of ice drift (m s-1) +6 6 Ice growth rate (m s-1) +7 7 Ice divergence (s-1) +8 8 Ice temperature (K) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.10.3.table b/definitions/grib2/tables/5/4.2.10.3.table new file mode 100644 index 000000000..6a921bfe5 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.10.3.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.10.4.table b/definitions/grib2/tables/5/4.2.10.4.table new file mode 100644 index 000000000..10f0b6e7e --- /dev/null +++ b/definitions/grib2/tables/5/4.2.10.4.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg kg-1) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.0.table b/definitions/grib2/tables/5/4.2.192.0.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.0.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.1.table b/definitions/grib2/tables/5/4.2.192.1.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.1.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.10.table b/definitions/grib2/tables/5/4.2.192.10.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.10.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.100.table b/definitions/grib2/tables/5/4.2.192.100.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.100.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.101.table b/definitions/grib2/tables/5/4.2.192.101.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.101.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.102.table b/definitions/grib2/tables/5/4.2.192.102.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.102.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.103.table b/definitions/grib2/tables/5/4.2.192.103.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.103.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.104.table b/definitions/grib2/tables/5/4.2.192.104.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.104.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.105.table b/definitions/grib2/tables/5/4.2.192.105.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.105.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.106.table b/definitions/grib2/tables/5/4.2.192.106.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.106.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.107.table b/definitions/grib2/tables/5/4.2.192.107.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.107.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.108.table b/definitions/grib2/tables/5/4.2.192.108.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.108.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.109.table b/definitions/grib2/tables/5/4.2.192.109.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.109.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.11.table b/definitions/grib2/tables/5/4.2.192.11.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.11.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.110.table b/definitions/grib2/tables/5/4.2.192.110.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.110.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.111.table b/definitions/grib2/tables/5/4.2.192.111.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.111.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.112.table b/definitions/grib2/tables/5/4.2.192.112.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.112.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.113.table b/definitions/grib2/tables/5/4.2.192.113.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.113.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.114.table b/definitions/grib2/tables/5/4.2.192.114.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.114.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.115.table b/definitions/grib2/tables/5/4.2.192.115.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.115.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.116.table b/definitions/grib2/tables/5/4.2.192.116.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.116.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.117.table b/definitions/grib2/tables/5/4.2.192.117.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.117.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.118.table b/definitions/grib2/tables/5/4.2.192.118.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.118.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.119.table b/definitions/grib2/tables/5/4.2.192.119.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.119.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.12.table b/definitions/grib2/tables/5/4.2.192.12.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.12.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.120.table b/definitions/grib2/tables/5/4.2.192.120.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.120.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.121.table b/definitions/grib2/tables/5/4.2.192.121.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.121.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.122.table b/definitions/grib2/tables/5/4.2.192.122.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.122.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.123.table b/definitions/grib2/tables/5/4.2.192.123.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.123.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.124.table b/definitions/grib2/tables/5/4.2.192.124.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.124.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.125.table b/definitions/grib2/tables/5/4.2.192.125.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.125.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.126.table b/definitions/grib2/tables/5/4.2.192.126.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.126.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.127.table b/definitions/grib2/tables/5/4.2.192.127.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.127.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.128.table b/definitions/grib2/tables/5/4.2.192.128.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.128.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.129.table b/definitions/grib2/tables/5/4.2.192.129.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.129.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.13.table b/definitions/grib2/tables/5/4.2.192.13.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.13.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.130.table b/definitions/grib2/tables/5/4.2.192.130.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.130.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.131.table b/definitions/grib2/tables/5/4.2.192.131.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.131.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.132.table b/definitions/grib2/tables/5/4.2.192.132.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.132.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.133.table b/definitions/grib2/tables/5/4.2.192.133.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.133.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.134.table b/definitions/grib2/tables/5/4.2.192.134.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.134.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.135.table b/definitions/grib2/tables/5/4.2.192.135.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.135.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.136.table b/definitions/grib2/tables/5/4.2.192.136.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.136.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.137.table b/definitions/grib2/tables/5/4.2.192.137.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.137.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.138.table b/definitions/grib2/tables/5/4.2.192.138.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.138.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.139.table b/definitions/grib2/tables/5/4.2.192.139.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.139.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.14.table b/definitions/grib2/tables/5/4.2.192.14.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.14.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.140.table b/definitions/grib2/tables/5/4.2.192.140.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.140.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.141.table b/definitions/grib2/tables/5/4.2.192.141.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.141.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.142.table b/definitions/grib2/tables/5/4.2.192.142.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.142.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.143.table b/definitions/grib2/tables/5/4.2.192.143.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.143.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.144.table b/definitions/grib2/tables/5/4.2.192.144.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.144.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.145.table b/definitions/grib2/tables/5/4.2.192.145.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.145.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.146.table b/definitions/grib2/tables/5/4.2.192.146.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.146.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.147.table b/definitions/grib2/tables/5/4.2.192.147.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.147.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.148.table b/definitions/grib2/tables/5/4.2.192.148.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.148.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.149.table b/definitions/grib2/tables/5/4.2.192.149.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.149.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.15.table b/definitions/grib2/tables/5/4.2.192.15.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.15.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.150.table b/definitions/grib2/tables/5/4.2.192.150.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.150.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.151.table b/definitions/grib2/tables/5/4.2.192.151.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.151.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.152.table b/definitions/grib2/tables/5/4.2.192.152.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.152.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.153.table b/definitions/grib2/tables/5/4.2.192.153.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.153.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.154.table b/definitions/grib2/tables/5/4.2.192.154.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.154.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.155.table b/definitions/grib2/tables/5/4.2.192.155.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.155.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.156.table b/definitions/grib2/tables/5/4.2.192.156.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.156.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.157.table b/definitions/grib2/tables/5/4.2.192.157.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.157.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.158.table b/definitions/grib2/tables/5/4.2.192.158.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.158.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.159.table b/definitions/grib2/tables/5/4.2.192.159.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.159.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.16.table b/definitions/grib2/tables/5/4.2.192.16.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.16.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.160.table b/definitions/grib2/tables/5/4.2.192.160.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.160.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.161.table b/definitions/grib2/tables/5/4.2.192.161.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.161.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.162.table b/definitions/grib2/tables/5/4.2.192.162.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.162.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.163.table b/definitions/grib2/tables/5/4.2.192.163.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.163.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.164.table b/definitions/grib2/tables/5/4.2.192.164.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.164.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.165.table b/definitions/grib2/tables/5/4.2.192.165.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.165.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.166.table b/definitions/grib2/tables/5/4.2.192.166.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.166.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.167.table b/definitions/grib2/tables/5/4.2.192.167.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.167.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.168.table b/definitions/grib2/tables/5/4.2.192.168.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.168.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.169.table b/definitions/grib2/tables/5/4.2.192.169.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.169.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.17.table b/definitions/grib2/tables/5/4.2.192.17.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.17.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.170.table b/definitions/grib2/tables/5/4.2.192.170.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.170.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.171.table b/definitions/grib2/tables/5/4.2.192.171.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.171.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.172.table b/definitions/grib2/tables/5/4.2.192.172.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.172.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.173.table b/definitions/grib2/tables/5/4.2.192.173.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.173.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.174.table b/definitions/grib2/tables/5/4.2.192.174.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.174.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.175.table b/definitions/grib2/tables/5/4.2.192.175.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.175.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.176.table b/definitions/grib2/tables/5/4.2.192.176.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.176.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.177.table b/definitions/grib2/tables/5/4.2.192.177.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.177.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.178.table b/definitions/grib2/tables/5/4.2.192.178.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.178.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.179.table b/definitions/grib2/tables/5/4.2.192.179.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.179.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.18.table b/definitions/grib2/tables/5/4.2.192.18.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.18.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.180.table b/definitions/grib2/tables/5/4.2.192.180.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.180.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.181.table b/definitions/grib2/tables/5/4.2.192.181.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.181.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.182.table b/definitions/grib2/tables/5/4.2.192.182.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.182.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.183.table b/definitions/grib2/tables/5/4.2.192.183.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.183.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.184.table b/definitions/grib2/tables/5/4.2.192.184.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.184.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.185.table b/definitions/grib2/tables/5/4.2.192.185.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.185.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.186.table b/definitions/grib2/tables/5/4.2.192.186.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.186.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.187.table b/definitions/grib2/tables/5/4.2.192.187.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.187.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.188.table b/definitions/grib2/tables/5/4.2.192.188.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.188.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.189.table b/definitions/grib2/tables/5/4.2.192.189.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.189.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.19.table b/definitions/grib2/tables/5/4.2.192.19.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.19.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.190.table b/definitions/grib2/tables/5/4.2.192.190.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.190.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.191.table b/definitions/grib2/tables/5/4.2.192.191.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.191.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.192.table b/definitions/grib2/tables/5/4.2.192.192.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.192.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.193.table b/definitions/grib2/tables/5/4.2.192.193.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.193.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.194.table b/definitions/grib2/tables/5/4.2.192.194.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.194.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.195.table b/definitions/grib2/tables/5/4.2.192.195.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.195.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.196.table b/definitions/grib2/tables/5/4.2.192.196.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.196.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.197.table b/definitions/grib2/tables/5/4.2.192.197.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.197.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.198.table b/definitions/grib2/tables/5/4.2.192.198.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.198.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.199.table b/definitions/grib2/tables/5/4.2.192.199.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.199.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.2.table b/definitions/grib2/tables/5/4.2.192.2.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.2.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.20.table b/definitions/grib2/tables/5/4.2.192.20.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.20.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.200.table b/definitions/grib2/tables/5/4.2.192.200.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.200.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.201.table b/definitions/grib2/tables/5/4.2.192.201.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.201.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.202.table b/definitions/grib2/tables/5/4.2.192.202.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.202.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.203.table b/definitions/grib2/tables/5/4.2.192.203.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.203.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.204.table b/definitions/grib2/tables/5/4.2.192.204.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.204.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.205.table b/definitions/grib2/tables/5/4.2.192.205.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.205.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.206.table b/definitions/grib2/tables/5/4.2.192.206.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.206.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.207.table b/definitions/grib2/tables/5/4.2.192.207.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.207.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.208.table b/definitions/grib2/tables/5/4.2.192.208.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.208.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.209.table b/definitions/grib2/tables/5/4.2.192.209.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.209.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.21.table b/definitions/grib2/tables/5/4.2.192.21.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.21.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.210.table b/definitions/grib2/tables/5/4.2.192.210.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.210.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.211.table b/definitions/grib2/tables/5/4.2.192.211.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.211.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.212.table b/definitions/grib2/tables/5/4.2.192.212.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.212.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.213.table b/definitions/grib2/tables/5/4.2.192.213.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.213.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.214.table b/definitions/grib2/tables/5/4.2.192.214.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.214.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.215.table b/definitions/grib2/tables/5/4.2.192.215.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.215.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.216.table b/definitions/grib2/tables/5/4.2.192.216.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.216.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.217.table b/definitions/grib2/tables/5/4.2.192.217.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.217.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.218.table b/definitions/grib2/tables/5/4.2.192.218.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.218.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.219.table b/definitions/grib2/tables/5/4.2.192.219.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.219.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.22.table b/definitions/grib2/tables/5/4.2.192.22.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.22.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.220.table b/definitions/grib2/tables/5/4.2.192.220.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.220.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.221.table b/definitions/grib2/tables/5/4.2.192.221.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.221.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.222.table b/definitions/grib2/tables/5/4.2.192.222.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.222.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.223.table b/definitions/grib2/tables/5/4.2.192.223.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.223.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.224.table b/definitions/grib2/tables/5/4.2.192.224.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.224.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.225.table b/definitions/grib2/tables/5/4.2.192.225.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.225.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.226.table b/definitions/grib2/tables/5/4.2.192.226.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.226.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.227.table b/definitions/grib2/tables/5/4.2.192.227.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.227.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.228.table b/definitions/grib2/tables/5/4.2.192.228.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.228.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.229.table b/definitions/grib2/tables/5/4.2.192.229.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.229.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.23.table b/definitions/grib2/tables/5/4.2.192.23.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.23.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.230.table b/definitions/grib2/tables/5/4.2.192.230.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.230.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.231.table b/definitions/grib2/tables/5/4.2.192.231.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.231.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.232.table b/definitions/grib2/tables/5/4.2.192.232.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.232.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.233.table b/definitions/grib2/tables/5/4.2.192.233.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.233.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.234.table b/definitions/grib2/tables/5/4.2.192.234.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.234.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.235.table b/definitions/grib2/tables/5/4.2.192.235.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.235.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.236.table b/definitions/grib2/tables/5/4.2.192.236.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.236.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.237.table b/definitions/grib2/tables/5/4.2.192.237.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.237.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.238.table b/definitions/grib2/tables/5/4.2.192.238.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.238.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.239.table b/definitions/grib2/tables/5/4.2.192.239.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.239.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.24.table b/definitions/grib2/tables/5/4.2.192.24.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.24.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.240.table b/definitions/grib2/tables/5/4.2.192.240.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.240.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.241.table b/definitions/grib2/tables/5/4.2.192.241.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.241.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.242.table b/definitions/grib2/tables/5/4.2.192.242.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.242.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.243.table b/definitions/grib2/tables/5/4.2.192.243.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.243.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.244.table b/definitions/grib2/tables/5/4.2.192.244.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.244.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.245.table b/definitions/grib2/tables/5/4.2.192.245.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.245.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.246.table b/definitions/grib2/tables/5/4.2.192.246.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.246.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.247.table b/definitions/grib2/tables/5/4.2.192.247.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.247.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.248.table b/definitions/grib2/tables/5/4.2.192.248.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.248.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.249.table b/definitions/grib2/tables/5/4.2.192.249.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.249.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.25.table b/definitions/grib2/tables/5/4.2.192.25.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.25.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.250.table b/definitions/grib2/tables/5/4.2.192.250.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.250.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.251.table b/definitions/grib2/tables/5/4.2.192.251.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.251.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.252.table b/definitions/grib2/tables/5/4.2.192.252.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.252.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.253.table b/definitions/grib2/tables/5/4.2.192.253.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.253.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.254.table b/definitions/grib2/tables/5/4.2.192.254.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.254.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.255.table b/definitions/grib2/tables/5/4.2.192.255.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.255.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.26.table b/definitions/grib2/tables/5/4.2.192.26.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.26.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.27.table b/definitions/grib2/tables/5/4.2.192.27.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.27.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.28.table b/definitions/grib2/tables/5/4.2.192.28.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.28.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.29.table b/definitions/grib2/tables/5/4.2.192.29.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.29.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.3.table b/definitions/grib2/tables/5/4.2.192.3.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.3.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.30.table b/definitions/grib2/tables/5/4.2.192.30.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.30.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.31.table b/definitions/grib2/tables/5/4.2.192.31.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.31.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.32.table b/definitions/grib2/tables/5/4.2.192.32.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.32.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.33.table b/definitions/grib2/tables/5/4.2.192.33.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.33.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.34.table b/definitions/grib2/tables/5/4.2.192.34.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.34.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.35.table b/definitions/grib2/tables/5/4.2.192.35.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.35.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.36.table b/definitions/grib2/tables/5/4.2.192.36.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.36.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.37.table b/definitions/grib2/tables/5/4.2.192.37.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.37.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.38.table b/definitions/grib2/tables/5/4.2.192.38.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.38.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.39.table b/definitions/grib2/tables/5/4.2.192.39.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.39.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.4.table b/definitions/grib2/tables/5/4.2.192.4.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.4.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.40.table b/definitions/grib2/tables/5/4.2.192.40.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.40.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.41.table b/definitions/grib2/tables/5/4.2.192.41.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.41.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.42.table b/definitions/grib2/tables/5/4.2.192.42.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.42.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.43.table b/definitions/grib2/tables/5/4.2.192.43.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.43.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.44.table b/definitions/grib2/tables/5/4.2.192.44.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.44.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.45.table b/definitions/grib2/tables/5/4.2.192.45.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.45.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.46.table b/definitions/grib2/tables/5/4.2.192.46.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.46.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.47.table b/definitions/grib2/tables/5/4.2.192.47.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.47.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.48.table b/definitions/grib2/tables/5/4.2.192.48.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.48.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.49.table b/definitions/grib2/tables/5/4.2.192.49.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.49.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.5.table b/definitions/grib2/tables/5/4.2.192.5.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.5.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.50.table b/definitions/grib2/tables/5/4.2.192.50.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.50.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.51.table b/definitions/grib2/tables/5/4.2.192.51.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.51.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.52.table b/definitions/grib2/tables/5/4.2.192.52.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.52.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.53.table b/definitions/grib2/tables/5/4.2.192.53.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.53.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.54.table b/definitions/grib2/tables/5/4.2.192.54.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.54.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.55.table b/definitions/grib2/tables/5/4.2.192.55.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.55.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.56.table b/definitions/grib2/tables/5/4.2.192.56.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.56.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.57.table b/definitions/grib2/tables/5/4.2.192.57.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.57.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.58.table b/definitions/grib2/tables/5/4.2.192.58.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.58.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.59.table b/definitions/grib2/tables/5/4.2.192.59.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.59.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.6.table b/definitions/grib2/tables/5/4.2.192.6.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.6.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.60.table b/definitions/grib2/tables/5/4.2.192.60.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.60.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.61.table b/definitions/grib2/tables/5/4.2.192.61.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.61.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.62.table b/definitions/grib2/tables/5/4.2.192.62.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.62.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.63.table b/definitions/grib2/tables/5/4.2.192.63.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.63.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.64.table b/definitions/grib2/tables/5/4.2.192.64.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.64.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.65.table b/definitions/grib2/tables/5/4.2.192.65.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.65.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.66.table b/definitions/grib2/tables/5/4.2.192.66.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.66.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.67.table b/definitions/grib2/tables/5/4.2.192.67.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.67.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.68.table b/definitions/grib2/tables/5/4.2.192.68.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.68.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.69.table b/definitions/grib2/tables/5/4.2.192.69.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.69.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.7.table b/definitions/grib2/tables/5/4.2.192.7.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.7.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.70.table b/definitions/grib2/tables/5/4.2.192.70.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.70.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.71.table b/definitions/grib2/tables/5/4.2.192.71.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.71.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.72.table b/definitions/grib2/tables/5/4.2.192.72.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.72.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.73.table b/definitions/grib2/tables/5/4.2.192.73.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.73.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.74.table b/definitions/grib2/tables/5/4.2.192.74.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.74.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.75.table b/definitions/grib2/tables/5/4.2.192.75.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.75.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.76.table b/definitions/grib2/tables/5/4.2.192.76.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.76.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.77.table b/definitions/grib2/tables/5/4.2.192.77.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.77.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.78.table b/definitions/grib2/tables/5/4.2.192.78.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.78.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.79.table b/definitions/grib2/tables/5/4.2.192.79.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.79.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.8.table b/definitions/grib2/tables/5/4.2.192.8.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.8.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.80.table b/definitions/grib2/tables/5/4.2.192.80.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.80.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.81.table b/definitions/grib2/tables/5/4.2.192.81.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.81.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.82.table b/definitions/grib2/tables/5/4.2.192.82.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.82.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.83.table b/definitions/grib2/tables/5/4.2.192.83.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.83.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.84.table b/definitions/grib2/tables/5/4.2.192.84.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.84.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.85.table b/definitions/grib2/tables/5/4.2.192.85.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.85.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.86.table b/definitions/grib2/tables/5/4.2.192.86.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.86.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.87.table b/definitions/grib2/tables/5/4.2.192.87.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.87.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.88.table b/definitions/grib2/tables/5/4.2.192.88.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.88.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.89.table b/definitions/grib2/tables/5/4.2.192.89.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.89.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.9.table b/definitions/grib2/tables/5/4.2.192.9.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.9.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.90.table b/definitions/grib2/tables/5/4.2.192.90.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.90.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.91.table b/definitions/grib2/tables/5/4.2.192.91.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.91.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.92.table b/definitions/grib2/tables/5/4.2.192.92.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.92.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.93.table b/definitions/grib2/tables/5/4.2.192.93.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.93.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.94.table b/definitions/grib2/tables/5/4.2.192.94.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.94.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.95.table b/definitions/grib2/tables/5/4.2.192.95.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.95.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.96.table b/definitions/grib2/tables/5/4.2.192.96.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.96.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.97.table b/definitions/grib2/tables/5/4.2.192.97.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.97.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.98.table b/definitions/grib2/tables/5/4.2.192.98.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.98.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.192.99.table b/definitions/grib2/tables/5/4.2.192.99.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.192.99.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.2.0.table b/definitions/grib2/tables/5/4.2.2.0.table new file mode 100644 index 000000000..43dbf0090 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.2.0.table @@ -0,0 +1,30 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Land cover (1=land, 0=sea) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg -2 s-1) +7 7 Model terrain height (m) +8 8 Land use (code table (4.212)) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadar's mixing length scale (m) +15 15 Canopy conductance (m s-1) +16 16 Minimal stomatal resistance (s m-1) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy conductance (Proportion) +20 20 Soil moisture parameter in canopy conductance (Proportion) +21 21 Humidity parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +23 23 Column-integrated soil water (kg m-2) +24 24 Heat flux (W m-2) +25 25 Volumetric soil moisture (m3 m-3) +26 26 Wilting point (kg m-3) +27 27 Volumetric wilting point (m3 m-3) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.2.3.table b/definitions/grib2/tables/5/4.2.2.3.table new file mode 100644 index 000000000..68155608c --- /dev/null +++ b/definitions/grib2/tables/5/4.2.2.3.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Soil type (code table (4.213)) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +10 10 Liquid volumetric soil moisture (non-frozen) (m3 m-3) +11 11 Volumetric transpiration stress-onset (soil moisture) (m3 m-3) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +13 13 Volumetric direct evaporation cease (soil moisture) (m3 m-3) +14 14 Direct evaporation cease (soil moisture) (kg m-3) +15 15 Soil porosity (m3 m-3) +16 16 Volumetric saturation of soil moisture (m3 m-3) +17 17 Saturation of soil moisture (kg m-3) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.3.0.table b/definitions/grib2/tables/5/4.2.3.0.table new file mode 100644 index 000000000..7ac6cc8ce --- /dev/null +++ b/definitions/grib2/tables/5/4.2.3.0.table @@ -0,0 +1,12 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +9 9 Fire detection indicator (Code table 4.223) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.3.1.table b/definitions/grib2/tables/5/4.2.3.1.table new file mode 100644 index 000000000..28ae1832f --- /dev/null +++ b/definitions/grib2/tables/5/4.2.3.1.table @@ -0,0 +1,16 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m s-1) +5 5 Estimated v component of wind (m s-1) +6 6 Number of pixels used (Numeric) +7 7 Solar zenith angle (Degree) +8 8 Relative azimuth angle (Degree) +9 9 Reflectance in 0.6 micron channel (%) +10 10 Reflectance in 0.8 micron channel (%) +11 11 Reflectance in 1.6 micron channel (%) +12 12 Reflectance in 3.9 micron channel (%) +13 13 Atmospheric divergence (s-1) +255 255 Missing (-) diff --git a/definitions/grib2/tables/5/4.2.table b/definitions/grib2/tables/5/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/5/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/5/4.201.table b/definitions/grib2/tables/5/4.201.table new file mode 100644 index 000000000..7445c9c20 --- /dev/null +++ b/definitions/grib2/tables/5/4.201.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.201, Precipitation Type + +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.202.table b/definitions/grib2/tables/5/4.202.table new file mode 100644 index 000000000..69dbe3a5d --- /dev/null +++ b/definitions/grib2/tables/5/4.202.table @@ -0,0 +1,66 @@ +# CODE TABLE 4.202, Precipitable water category + +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.203.table b/definitions/grib2/tables/5/4.203.table new file mode 100644 index 000000000..d2ad10b07 --- /dev/null +++ b/definitions/grib2/tables/5/4.203.table @@ -0,0 +1,88 @@ +# CODE TABLE 4.203, Cloud type + +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground based fog beneath the lowest layer +12 12 Stratus - ground based fog beneath the lowest layer +13 13 Stratocumulus - ground based fog beneath the lowest layer +14 14 Cumulus - ground based fog beneath the lowest layer +15 15 Altostratus - ground based fog beneath the lowest layer +16 16 Nimbostratus - ground based fog beneath the lowest layer +17 17 Altocumulus - ground based fog beneath the lowest layer +18 18 Cirrostratus - ground based fog beneath the lowest layer +19 19 Cirrocumulus - ground based fog beneath the lowest layer +20 20 Cirrus - ground based fog beneath the lowest layer +191 191 Unknown +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.204.table b/definitions/grib2/tables/5/4.204.table new file mode 100644 index 000000000..23b60cf77 --- /dev/null +++ b/definitions/grib2/tables/5/4.204.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.204, Thunderstorm coverage + +0 0 None +1 1 Isolated (1% - 2%) +2 2 Few (3% - 15%) +3 3 Scattered (16% - 45%) +4 4 Numerous (> 45%) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.205.table b/definitions/grib2/tables/5/4.205.table new file mode 100644 index 000000000..98c7b48ec --- /dev/null +++ b/definitions/grib2/tables/5/4.205.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.205, Aerosol type + +0 0 Aerosol not present +1 1 Aerosol present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.206.table b/definitions/grib2/tables/5/4.206.table new file mode 100644 index 000000000..b1ef2e787 --- /dev/null +++ b/definitions/grib2/tables/5/4.206.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.206, Volcanic ash + +0 0 Not present +1 1 Present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.207.table b/definitions/grib2/tables/5/4.207.table new file mode 100644 index 000000000..13fc7b54b --- /dev/null +++ b/definitions/grib2/tables/5/4.207.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.207, Icing + +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.208.table b/definitions/grib2/tables/5/4.208.table new file mode 100644 index 000000000..15b514a07 --- /dev/null +++ b/definitions/grib2/tables/5/4.208.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.208, Turbulence + +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.209.table b/definitions/grib2/tables/5/4.209.table new file mode 100644 index 000000000..b4cca1d73 --- /dev/null +++ b/definitions/grib2/tables/5/4.209.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.209, Planetary boundary layer regime + +1 1 Stable +2 2 Mechanically driven turbulence +3 3 Forced convection +4 4 Free convection +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.210.table b/definitions/grib2/tables/5/4.210.table new file mode 100644 index 000000000..d05e07721 --- /dev/null +++ b/definitions/grib2/tables/5/4.210.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.210, Contrail intensity + +0 0 Contrail not present +1 1 Contrail present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.211.table b/definitions/grib2/tables/5/4.211.table new file mode 100644 index 000000000..604b2e643 --- /dev/null +++ b/definitions/grib2/tables/5/4.211.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.211, Contrail engine type + +0 0 Low bypass +1 1 High bypass +2 2 Non bypass +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.212.table b/definitions/grib2/tables/5/4.212.table new file mode 100644 index 000000000..7393238e7 --- /dev/null +++ b/definitions/grib2/tables/5/4.212.table @@ -0,0 +1,79 @@ +# CODE TABLE 4.212, Land Use + +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.213.table b/definitions/grib2/tables/5/4.213.table new file mode 100644 index 000000000..cc4bdfc1f --- /dev/null +++ b/definitions/grib2/tables/5/4.213.table @@ -0,0 +1,77 @@ +# CODE TABLE 4.213, Soil type + +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.215.table b/definitions/grib2/tables/5/4.215.table new file mode 100644 index 000000000..7e1442962 --- /dev/null +++ b/definitions/grib2/tables/5/4.215.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.215, Remotely Sensed Snow Coverage + +50 50 No-snow/no-cloud +100 100 Clouds +250 250 Snow +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.216.table b/definitions/grib2/tables/5/4.216.table new file mode 100644 index 000000000..dbe26b0e5 --- /dev/null +++ b/definitions/grib2/tables/5/4.216.table @@ -0,0 +1,95 @@ +# CODE TABLE 4.216, Elevation of Snow Covered Terrain + +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/5/4.217.table b/definitions/grib2/tables/5/4.217.table new file mode 100644 index 000000000..475ab686d --- /dev/null +++ b/definitions/grib2/tables/5/4.217.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.217, Cloud mask type + +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.218.table b/definitions/grib2/tables/5/4.218.table new file mode 100644 index 000000000..a0295261b --- /dev/null +++ b/definitions/grib2/tables/5/4.218.table @@ -0,0 +1,35 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No scene identified +1 1 Green needle leafed forest +2 2 Green broad-leafed forest +3 3 Deciduous needle leafed forest +4 4 Deciduous broad-leafed forest +5 5 Deciduous mixed forest +6 6 Closed shrub-land +7 7 Open shrub-land +8 8 Woody savannah +9 9 Savannah +10 10 Grassland +11 11 Permanent wetland +12 12 Cropland +13 13 Urban +14 14 Vegetation / crops +15 15 Permanent snow / ice +16 16 Barren desert +17 17 Water bodies +18 18 Tundra +97 97 Snow / ice on land +98 98 Snow / ice on water +99 99 Sun-glint +100 100 General cloud +101 101 Low cloud / fog / Stratus +102 102 Low cloud / Stratocumulus +103 103 Low cloud / unknown type +104 104 Medium cloud / Nimbostratus +105 105 Medium cloud / Altostratus +106 106 Medium cloud / unknown type +107 107 High cloud / Cumulus +108 108 High cloud / Cirrus +109 109 High cloud / unknown +110 110 Unknown cloud type +255 255 Missing diff --git a/definitions/grib2/tables/5/4.219.table b/definitions/grib2/tables/5/4.219.table new file mode 100644 index 000000000..161834ab7 --- /dev/null +++ b/definitions/grib2/tables/5/4.219.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Nominal cloud top height quality +1 1 Fog in segment +2 2 Poor quality height estimation +3 3 Fog in segment and poor quality height estimation +255 255 Missing diff --git a/definitions/grib2/tables/5/4.220.table b/definitions/grib2/tables/5/4.220.table new file mode 100644 index 000000000..9fddcd49f --- /dev/null +++ b/definitions/grib2/tables/5/4.220.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.220, Horizontal dimension processed + +0 0 Latitude +1 1 Longitude +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.221.table b/definitions/grib2/tables/5/4.221.table new file mode 100644 index 000000000..2291eab60 --- /dev/null +++ b/definitions/grib2/tables/5/4.221.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.221, Treatment of missing data + +0 0 Not included +1 1 Extrapolated +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.222.table b/definitions/grib2/tables/5/4.222.table new file mode 100644 index 000000000..c56e95732 --- /dev/null +++ b/definitions/grib2/tables/5/4.222.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No +1 1 Yes +255 255 Missing diff --git a/definitions/grib2/tables/5/4.223.table b/definitions/grib2/tables/5/4.223.table new file mode 100644 index 000000000..360725351 --- /dev/null +++ b/definitions/grib2/tables/5/4.223.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No fire detected +1 1 Possible fire detected +2 2 Probable fire detected +3 3 Missing diff --git a/definitions/grib2/tables/5/4.230.table b/definitions/grib2/tables/5/4.230.table new file mode 100644 index 000000000..22563e883 --- /dev/null +++ b/definitions/grib2/tables/5/4.230.table @@ -0,0 +1,117 @@ +#Code figure Code figure Meaning +0 0 Ozone +1 1 Water vapour +2 2 Methane +3 3 Carbon dioxide +4 4 Carbon monoxide +5 5 Nitrogen dioxide +6 6 Nitrous oxide +7 7 Formaldehyde +8 8 Sulphur dioxide +9 9 Ammonia +10 10 Ammonium +11 11 Nitrogen monoxide +12 12 Atomic oxygen +13 13 Nitrate radical +14 14 Hydroperoxyl radical +15 15 Dinitrogen pentoxide +16 16 Nitrous acid +17 17 Nitric acid +18 18 Peroxynitric acid +19 19 Hydrogen peroxide +20 20 Molecular hydrogen +21 21 Atomic nitrogen +22 22 Sulphate +23 23 Radon +24 24 Elemental mercury +25 25 Divalent mercury +26 26 Atomic chlorine +27 27 Chlorine monoxide +28 28 Dichlorine peroxide +29 29 Hypochlorous acid +30 30 Chlorine nitrate +31 31 Chlorine dioxide +32 32 Atomic bromine +33 33 Bromine monoxide +34 34 Bromine chloride +35 35 Hydrogen bromide +36 36 Hypobromous acid +37 37 Bromine nitrate +10000 10000 Hydroxyl radical +10001 10001 Methyl peroxy radical +10002 10002 Methyl hydroperoxide +10004 10004 Methanol +10005 10005 Formic acid +10006 10006 Hydrogen Cyanide +10007 10007 Aceto nitrile +10008 10008 Ethane +10009 10009 Ethene (= Ethylene) +10010 10010 Ethyne (= Acetylene) +10011 10011 Ethanol +10012 10012 Acetic acid +10013 10013 Peroxyacetyl nitrate +10014 10014 Propane +10015 10015 Propene +10016 10016 Butanes +10017 10017 Isoprene +10018 10018 Alpha pinene +10019 10019 Beta pinene +10020 10020 Limonene +10021 10021 Benzene +10022 10022 Toluene +10023 10023 Xylene +#10024-10499 10024-10499 reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides,…) +10500 10500 Dimethyl sulphide +#10501-20000 10501-20000 Reserved +20001 20001 Hydrogen chloride +20002 20002 CFC-11 +20003 20003 CFC-12 +20004 20004 CFC-113 +20005 20005 CFC-113a +20006 20006 CFC-114 +20007 20007 CFC-115 +20008 20008 HCFC-22 +20009 20009 HCFC-141b +20010 20010 HCFC-142b +20011 20011 Halon-1202 +20012 20012 Halon-1211 +20013 20013 Halon-1301 +20014 20014 Halon-2402 +20015 20015 Methyl chloride (HCC-40) +20016 20016 Carbon tetrachloride (HCC-10) +20017 20017 HCC-140a +20018 20018 Methyl bromide (HBC-40B1) +20019 20019 Hexachlorocyclohexane (HCH) +20020 20020 Alpha hexachlorocyclohexane +20021 20021 Hexachlorobiphenyl (PCB-153) +60000 60000 HOx radical (OH+HO2) +60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2) +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen +60005 60005 Total inorganic chlorine +60006 60006 Total inorganic bromine +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped Alkanes +60010 60010 Lumped Alkenes +60011 60011 Lumped Aromatic Compounds +60012 60012 Lumped Terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon +60016 60016 Lumped oxygenated hydrocarbons +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +65535 65535 Missing diff --git a/definitions/grib2/tables/5/4.3.table b/definitions/grib2/tables/5/4.3.table new file mode 100644 index 000000000..84a72352b --- /dev/null +++ b/definitions/grib2/tables/5/4.3.table @@ -0,0 +1,13 @@ +# CODE TABLE 4.3, Type of generating process +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.4.table b/definitions/grib2/tables/5/4.4.table new file mode 100644 index 000000000..61aa20c5f --- /dev/null +++ b/definitions/grib2/tables/5/4.4.table @@ -0,0 +1,16 @@ +# CODE TABLE 4.4, Indicator of unit of time range +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.5.table b/definitions/grib2/tables/5/4.5.table new file mode 100644 index 000000000..0df986b67 --- /dev/null +++ b/definitions/grib2/tables/5/4.5.table @@ -0,0 +1,38 @@ +#Code table 4.5: Fixed surface types and units +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0 degree C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +10 10 Entire atmosphere +11 11 Cumulonimbus (CB) base (m) +12 12 Cumulonimbus (CB) top (m) +# 13-19 Reserved +20 20 Isothermal level (K) +#21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level +# 112-116 Reserved +117 117 Mixed layer depth (m) +118 hhl Hybrid height level +119 hpl Hybrid pressure level +# 118-159 Reserved +160 160 Depth below sea level (m) +#161-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.6.table b/definitions/grib2/tables/5/4.6.table new file mode 100644 index 000000000..dc6d94c20 --- /dev/null +++ b/definitions/grib2/tables/5/4.6.table @@ -0,0 +1,8 @@ +# CODE TABLE 4.6, Type of ensemble forecast + +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.7.table b/definitions/grib2/tables/5/4.7.table new file mode 100644 index 000000000..dadf59b46 --- /dev/null +++ b/definitions/grib2/tables/5/4.7.table @@ -0,0 +1,73 @@ +# CODE TABLE 4.7, Derived forecast + +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members (see Note) +6 6 Unweighted mean of the cluster members +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.8.table b/definitions/grib2/tables/5/4.8.table new file mode 100644 index 000000000..9d3a0e8a7 --- /dev/null +++ b/definitions/grib2/tables/5/4.8.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.8, Clustering Method + +0 0 Anomaly correlation +1 1 Root mean square +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.9.table b/definitions/grib2/tables/5/4.9.table new file mode 100644 index 000000000..895f30171 --- /dev/null +++ b/definitions/grib2/tables/5/4.9.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.9, Probability Type + +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/4.91.table b/definitions/grib2/tables/5/4.91.table new file mode 100644 index 000000000..a960f56b0 --- /dev/null +++ b/definitions/grib2/tables/5/4.91.table @@ -0,0 +1,78 @@ +# CODE TABLE 4.91 Category Type + +0 0 Below lower limit +1 1 Above upper limit +2 2 Between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Above lower limit +4 4 Below upper limit +5 5 Lower or equal lower limit +6 6 Greater or equal upper limit +7 7 Between lower and upper limits. The range includes lower limit and upper limit +8 8 Greater or equal lower limit +9 9 Lower or equal upper limit +10 10 Between lower and upper limits. The range includes the upper limit but not the lower limit +11 11 Equal to first limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/5/5.0.table b/definitions/grib2/tables/5/5.0.table new file mode 100644 index 000000000..62cc4a472 --- /dev/null +++ b/definitions/grib2/tables/5/5.0.table @@ -0,0 +1,19 @@ +# CODE TABLE 5.0, Data Representation Template Number +0 0 Grid point data - simple packing +1 1 Matrix value - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - ieee packing +6 6 Grid point data - simple packing with pre-processing +40 40 JPEG2000 Packing +41 41 PNG pacling +50 50 Spectral data -simple packing +51 51 Spherical harmonics data - complex packing +61 61 Grid point data - simple packing with logarithm pre-processing +# 192-254 Reserved for local use +255 255 Missing +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling +50000 50000 Sperical harmonics ieee packing +50001 50001 Second order packing +50002 50002 Second order packing diff --git a/definitions/grib2/tables/5/5.1.table b/definitions/grib2/tables/5/5.1.table new file mode 100644 index 000000000..d7ca4bedc --- /dev/null +++ b/definitions/grib2/tables/5/5.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.1, Type of original field values +0 0 Floating point +1 1 Integer +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/5.2.table b/definitions/grib2/tables/5/5.2.table new file mode 100644 index 000000000..a048d712e --- /dev/null +++ b/definitions/grib2/tables/5/5.2.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.2, Matrix coordinate value function definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +11 11 Geometric coordinates +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/5.3.table b/definitions/grib2/tables/5/5.3.table new file mode 100644 index 000000000..4a673ef85 --- /dev/null +++ b/definitions/grib2/tables/5/5.3.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.3, Matrix coordinate parameter +1 1 Direction Degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/5.4.table b/definitions/grib2/tables/5/5.4.table new file mode 100644 index 000000000..1fd37966f --- /dev/null +++ b/definitions/grib2/tables/5/5.4.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.4, Group Splitting Method +0 0 Row by row splitting +1 1 General group splitting +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/5.40.table b/definitions/grib2/tables/5/5.40.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/5/5.40.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/5/5.40000.table b/definitions/grib2/tables/5/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/5/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/5/5.5.table b/definitions/grib2/tables/5/5.5.table new file mode 100644 index 000000000..d1caac9e8 --- /dev/null +++ b/definitions/grib2/tables/5/5.5.table @@ -0,0 +1,7 @@ +# CODE TABLE 5.5, Missing Value Management for Complex Packing + +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/5.50002.table b/definitions/grib2/tables/5/5.50002.table new file mode 100644 index 000000000..10c243cb0 --- /dev/null +++ b/definitions/grib2/tables/5/5.50002.table @@ -0,0 +1,19 @@ +# second order packing modes table + +1 0 no boustrophedonic +1 1 boustrophedonic +2 0 Reserved +2 1 Reserved +3 0 Reserved +3 1 Reserved +4 0 Reserved +4 1 Reserved +5 0 Reserved +5 1 Reserved +6 0 Reserved +6 1 Reserved +7 0 Reserved +7 1 Reserved +8 0 Reserved +8 1 Reserved + diff --git a/definitions/grib2/tables/5/5.6.table b/definitions/grib2/tables/5/5.6.table new file mode 100644 index 000000000..4aec3314e --- /dev/null +++ b/definitions/grib2/tables/5/5.6.table @@ -0,0 +1,68 @@ +# CODE TABLE 5.6, Order of Spatial Differencing + +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/5/5.7.table b/definitions/grib2/tables/5/5.7.table new file mode 100644 index 000000000..35b23b94d --- /dev/null +++ b/definitions/grib2/tables/5/5.7.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.7, Precision of floating-point numbers + +1 1 IEEE 32-bit (I=4 in Section 7) +2 2 IEEE 64-bit (I=8 in Section 7) +3 3 IEEE 128-bit (I=16 in Section 7) +255 255 Missing diff --git a/definitions/grib2/tables/5/5.8.table b/definitions/grib2/tables/5/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/5/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/5/5.9.table b/definitions/grib2/tables/5/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/5/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/5/6.0.table b/definitions/grib2/tables/5/6.0.table new file mode 100644 index 000000000..6a8c74b48 --- /dev/null +++ b/definitions/grib2/tables/5/6.0.table @@ -0,0 +1,7 @@ +# CODE TABLE 6.0, Bit Map Indicator + +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 2 253 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same "GRIB" message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/5/stepType.table b/definitions/grib2/tables/5/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/5/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/6/0.0.table b/definitions/grib2/tables/6/0.0.table new file mode 100644 index 000000000..fd2056350 --- /dev/null +++ b/definitions/grib2/tables/6/0.0.table @@ -0,0 +1,10 @@ +#Code Table 0.0: Discipline of processed data in the GRIB message, number of GRIB Master Table +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/1.0.table b/definitions/grib2/tables/6/1.0.table new file mode 100644 index 000000000..54a50efa2 --- /dev/null +++ b/definitions/grib2/tables/6/1.0.table @@ -0,0 +1,12 @@ +# Code Table 1.0: GRIB Master Tables Version Number +0 0 Experimental +1 1 Version implemented on 7 November 2001 +2 2 Version implemented on 4 November 2003 +3 3 Version implemented on 2 November 2005 +4 4 Version implemented on 7 November 2007 +5 5 Version implemented on 4 November 2009 +6 6 Version implemented on 15 September 2010 +7 7 Pre-operational to be implemented by next amendment +# 8-254 Future versions +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. + diff --git a/definitions/grib2/tables/6/1.1.table b/definitions/grib2/tables/6/1.1.table new file mode 100644 index 000000000..6c5a60361 --- /dev/null +++ b/definitions/grib2/tables/6/1.1.table @@ -0,0 +1,5 @@ +# Code Table 1.1 GRIB Local Tables Version Number +0 0 Local tables not used +# . Only table entries and templates from the current Master table are valid. +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/6/1.2.table b/definitions/grib2/tables/6/1.2.table new file mode 100644 index 000000000..eb8755209 --- /dev/null +++ b/definitions/grib2/tables/6/1.2.table @@ -0,0 +1,8 @@ +# CODE TABLE 1.2, Significance of Reference Time +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +#4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/1.3.table b/definitions/grib2/tables/6/1.3.table new file mode 100644 index 000000000..d4ed48c63 --- /dev/null +++ b/definitions/grib2/tables/6/1.3.table @@ -0,0 +1,10 @@ +# CODE TABLE 1.3, Production status of data +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 TIGGE Operational products +5 5 TIGGE test products +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/1.4.table b/definitions/grib2/tables/6/1.4.table new file mode 100644 index 000000000..8166b7761 --- /dev/null +++ b/definitions/grib2/tables/6/1.4.table @@ -0,0 +1,13 @@ +# CODE TABLE 1.4, Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event Probability +# 8-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/6/1.4.table~ b/definitions/grib2/tables/6/1.4.table~ new file mode 100644 index 000000000..ac21f5c4c --- /dev/null +++ b/definitions/grib2/tables/6/1.4.table~ @@ -0,0 +1,13 @@ +# CODE TABLE 1.4, Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event Probability +# 8-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/3.0.table b/definitions/grib2/tables/6/3.0.table new file mode 100644 index 000000000..6030a5132 --- /dev/null +++ b/definitions/grib2/tables/6/3.0.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.0, Source of Grid Definition +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition Defined by originating centre +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/6/3.1.table b/definitions/grib2/tables/6/3.1.table new file mode 100644 index 000000000..6101b648c --- /dev/null +++ b/definitions/grib2/tables/6/3.1.table @@ -0,0 +1,43 @@ +# CODE TABLE 3.1, Grid Definition Template Number +0 0 Latitude/longitude. Also called equidistant cylindrical, or Plate Carree +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +# 4-9 Reserved +10 10 Mercator +# 11-19 Reserved +20 20 Polar stereographic can be south or north +# 21-29 Reserved +30 30 Lambert Conformal can be secant or tangent, conical or bipolar +31 31 Albers equal-area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +# 101-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid, with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovm�ller diagram grid, with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/6/3.10.table b/definitions/grib2/tables/6/3.10.table new file mode 100644 index 000000000..ae5baf9d5 --- /dev/null +++ b/definitions/grib2/tables/6/3.10.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.10, Scanning mode for one diamond +1 0 Points scan in +i direction, i.e. from pole to equator +1 1 Points scan in -i direction, i.e. from equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction is consecutive diff --git a/definitions/grib2/tables/6/3.11.table b/definitions/grib2/tables/6/3.11.table new file mode 100644 index 000000000..9a84d4a95 --- /dev/null +++ b/definitions/grib2/tables/6/3.11.table @@ -0,0 +1,5 @@ +# CODE TABLE 3.11, Interpretation of list of numbers defining number of points +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +255 255 Missing diff --git a/definitions/grib2/tables/6/3.15.table b/definitions/grib2/tables/6/3.15.table new file mode 100644 index 000000000..bb431e14f --- /dev/null +++ b/definitions/grib2/tables/6/3.15.table @@ -0,0 +1,25 @@ +# CODE TABLE 3.15, Physical meaning of vertical coordinate +# 0-19 Reserved +20 20 Temperature K +# 21-99 Reserved +100 100 Pressure Pa +101 101 Pressure deviation from mean sea level Pa +102 102 Altitude above mean sea level m +103 103 Height above ground (see Note 1) m +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface m +107 pt Potential temperature (theta) K +108 108 Pressure deviation from ground to level Pa +109 pv Potential vorticity K m-2 kg-1 s-1 +110 110 Geometrical height m +111 111 Eta coordinate (see Note 2) +112 112 Geopotential height gpm +# 113-159 Reserved +160 160 Depth below sea level m +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Negative values associated to this coordinate will indicate depth below ground surface. If values are all below surface, use of entry 106 is recommended, with positive coordinate values instead. +# (2) The Eta vertical coordinate system involves normalizing the pressure at some point on a specific level by the mean sea level pressure at that point. diff --git a/definitions/grib2/tables/6/3.2.table b/definitions/grib2/tables/6/3.2.table new file mode 100644 index 000000000..d037ee120 --- /dev/null +++ b/definitions/grib2/tables/6/3.2.table @@ -0,0 +1,11 @@ +# CODE TABLE 3.2, Shape of the Earth +0 0 Earth assumed spherical with radius = 6,367,470.0 m +1 1 Earth assumed spherical with radius specified by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6,378,160.0 m, minor axis = 6,356,775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6,378,137.0 m, minor axis = 6,356,752.314 m, f = 1/298.257222101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6,371,229.0 m +# 7-191 Reserved +# 192- 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/3.20.table b/definitions/grib2/tables/6/3.20.table new file mode 100644 index 000000000..cfa35ae38 --- /dev/null +++ b/definitions/grib2/tables/6/3.20.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.20, Type of horizontal line +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/3.21.table b/definitions/grib2/tables/6/3.21.table new file mode 100644 index 000000000..c2fd94586 --- /dev/null +++ b/definitions/grib2/tables/6/3.21.table @@ -0,0 +1,8 @@ +# CODE TABLE 3.21, Vertical dimension coordinate values definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +# 2-10 Reserved +11 11 Geometric coordinates +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/3.3.table b/definitions/grib2/tables/6/3.3.table new file mode 100644 index 000000000..84cbb8bcc --- /dev/null +++ b/definitions/grib2/tables/6/3.3.table @@ -0,0 +1,7 @@ +# FLAG TABLE 3.3, Resolution and Component Flags +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates respectively diff --git a/definitions/grib2/tables/6/3.4.table b/definitions/grib2/tables/6/3.4.table new file mode 100644 index 000000000..51d0664b2 --- /dev/null +++ b/definitions/grib2/tables/6/3.4.table @@ -0,0 +1,9 @@ +# FLAG TABLE 3.4, Scanning Mode +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction diff --git a/definitions/grib2/tables/6/3.5.table b/definitions/grib2/tables/6/3.5.table new file mode 100644 index 000000000..117b26be3 --- /dev/null +++ b/definitions/grib2/tables/6/3.5.table @@ -0,0 +1,5 @@ +# FLAG TABLE 3.5, Projection Centre +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bi-polar and symmetric diff --git a/definitions/grib2/tables/6/3.6.table b/definitions/grib2/tables/6/3.6.table new file mode 100644 index 000000000..41dd97e4a --- /dev/null +++ b/definitions/grib2/tables/6/3.6.table @@ -0,0 +1,2 @@ +# CODE TABLE 3.6, Spectral data representation type +1 1 The Associated Legendre Functions of the first kind are defined by: diff --git a/definitions/grib2/tables/6/3.7.table b/definitions/grib2/tables/6/3.7.table new file mode 100644 index 000000000..3aaf30bf9 --- /dev/null +++ b/definitions/grib2/tables/6/3.7.table @@ -0,0 +1,11 @@ +# Code Table 3.7: Spectral data representation mode +0 0 Reserved +1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) +# 2-254 Reserved +255 255 Missing +# Note: +# +#(1) Values of N(m) for common truncations cases: +# Triangular M = J = K, N(m) = J +# Rhomboidal K = J + M, N(m) = J+m +# Trapezoidal K = J, K > M, N(m) = J diff --git a/definitions/grib2/tables/6/3.8.table b/definitions/grib2/tables/6/3.8.table new file mode 100644 index 000000000..0d9b7d001 --- /dev/null +++ b/definitions/grib2/tables/6/3.8.table @@ -0,0 +1,8 @@ +# Code table 3.8: Grid point position +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/6/3.9.table b/definitions/grib2/tables/6/3.9.table new file mode 100644 index 000000000..800c08259 --- /dev/null +++ b/definitions/grib2/tables/6/3.9.table @@ -0,0 +1,3 @@ +# FLAG TABLE 3.9, Numbering order of diamonds as seen from the corresponding pole +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e., counter-clockwise) orientation diff --git a/definitions/grib2/tables/6/4.0.table b/definitions/grib2/tables/6/4.0.table new file mode 100644 index 000000000..14b398290 --- /dev/null +++ b/definitions/grib2/tables/6/4.0.table @@ -0,0 +1,43 @@ +# CODE TABLE 4.0, Product Definition Template Number +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecast based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +15 15 Average, accumulation, extreme values, or other statistically-processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time +#16-19 Reserved +20 20 Radar product +30 30 Satellite product +31 31 Satellite product +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric aerosol +46 46 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for atmospheric aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of atmospheric aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +254 254 CCITT IA5 character string +1000 1000 Cross section of analysis and forecast at a point in time +1001 1001 Cross section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed +1100 1100 Hovm�ller-type grid with no averaging or other statistical processing +1101 1101 Hovm�ller-type grid with averaging or other statistical processing +50001 50001 Forecasting Systems with Variable Resolution in a point in time +50011 50011 Forecasting Systems with Variable Resolution in a continous or non countinous time interval + +65335 65535 Missing diff --git a/definitions/grib2/tables/6/4.1.0.table b/definitions/grib2/tables/6/4.1.0.table new file mode 100644 index 000000000..33d1c3984 --- /dev/null +++ b/definitions/grib2/tables/6/4.1.0.table @@ -0,0 +1,30 @@ +#Discipline 0: Meteorological products +#Category Description +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave Radiation +5 5 Long-wave Radiation +6 6 Cloud +7 7 Thermodynamic Stability indices +8 8 Kinematic Stability indices +9 9 Temperature Probabilities +10 10 Moisture Probabilities +11 11 Momentum Probabilities +12 12 Mass Probabilities +13 13 Aerosols +14 14 Trace gases (e.g., ozone, CO2) +15 15 Radar +16 16 Forecast Radar Imagery +17 17 Electro-dynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical or physical constituents +# 20-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/6/4.1.1.table b/definitions/grib2/tables/6/4.1.1.table new file mode 100644 index 000000000..ebb7d9ea0 --- /dev/null +++ b/definitions/grib2/tables/6/4.1.1.table @@ -0,0 +1,9 @@ +#Discipline 1: Hydrological products +#Category Description +0 0 Hydrology basic products +1 1 Hydrology probabilities +#2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/6/4.1.10.table b/definitions/grib2/tables/6/4.1.10.table new file mode 100644 index 000000000..45b08caaa --- /dev/null +++ b/definitions/grib2/tables/6/4.1.10.table @@ -0,0 +1,12 @@ +#Discipline 10: Oceanographic Products +#Category Description +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface Properties +4 4 Sub-surface Properties +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/6/4.1.192.table b/definitions/grib2/tables/6/4.1.192.table new file mode 100644 index 000000000..c428acab0 --- /dev/null +++ b/definitions/grib2/tables/6/4.1.192.table @@ -0,0 +1,4 @@ +#Discipline 192: ECMWF local parameters +255 255 Missing + + diff --git a/definitions/grib2/tables/6/4.1.2.table b/definitions/grib2/tables/6/4.1.2.table new file mode 100644 index 000000000..f7f2ea2ba --- /dev/null +++ b/definitions/grib2/tables/6/4.1.2.table @@ -0,0 +1,11 @@ +#Discipline 2: Land Surface Products +#Category Description +0 0 Vegetation/Biomass +1 1 Agri-/aquacultural Special Products +2 2 Transportation-related Products +3 3 Soil Products +# 4-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/6/4.1.3.table b/definitions/grib2/tables/6/4.1.3.table new file mode 100644 index 000000000..f7578e163 --- /dev/null +++ b/definitions/grib2/tables/6/4.1.3.table @@ -0,0 +1,9 @@ +#Discipline 3: Space Products +#Category Description +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/6/4.1.table b/definitions/grib2/tables/6/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/6/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/6/4.10.table b/definitions/grib2/tables/6/4.10.table new file mode 100644 index 000000000..9cf447b69 --- /dev/null +++ b/definitions/grib2/tables/6/4.10.table @@ -0,0 +1,14 @@ +# CODE TABLE 4.10, Type of statistical processing + +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (Value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (Temporal variance) +8 8 Difference (Value at the start of time range minus value at the end) +9 ratio Ratio +# 192 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/6/4.11.table b/definitions/grib2/tables/6/4.11.table new file mode 100644 index 000000000..68901aac4 --- /dev/null +++ b/definitions/grib2/tables/6/4.11.table @@ -0,0 +1,9 @@ +# CODE TABLE 4.11, Type of time intervals + +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.12.table b/definitions/grib2/tables/6/4.12.table new file mode 100644 index 000000000..86b6177be --- /dev/null +++ b/definitions/grib2/tables/6/4.12.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.12, Operating Mode + +0 0 Maintenance Mode +1 1 Clear air +2 2 Precipitation +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.13.table b/definitions/grib2/tables/6/4.13.table new file mode 100644 index 000000000..ddd7537d0 --- /dev/null +++ b/definitions/grib2/tables/6/4.13.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.13, Quality Control Indicator + +0 0 No quality control applied +1 1 Quality control applied +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.14.table b/definitions/grib2/tables/6/4.14.table new file mode 100644 index 000000000..69984d720 --- /dev/null +++ b/definitions/grib2/tables/6/4.14.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.14, Clutter Filter Indicator + +0 0 No clutter filter used +1 1 Clutter filter used +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.15.table b/definitions/grib2/tables/6/4.15.table new file mode 100644 index 000000000..504128024 --- /dev/null +++ b/definitions/grib2/tables/6/4.15.table @@ -0,0 +1,10 @@ +0 0 Data is calculated directly from the source grid with no interpolation (see note 1) +1 1 Bilinear interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +2 2 Bicubic interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +3 3 Using the value from the source grid grid-point which is nearest to the nominal grid-point +4 4 Budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point (see note 2) +5 5 Spectral interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +6 6 Neighbor-budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point (see note 3) +#7-191 Reserved +#192-254 Reserved for Local Use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.151.table b/definitions/grib2/tables/6/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/6/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.192.table b/definitions/grib2/tables/6/4.192.table new file mode 100644 index 000000000..e1fd91594 --- /dev/null +++ b/definitions/grib2/tables/6/4.192.table @@ -0,0 +1,4 @@ +1 1 first +2 2 second +3 3 third +4 4 fourth diff --git a/definitions/grib2/tables/6/4.2.0.0.table b/definitions/grib2/tables/6/4.2.0.0.table new file mode 100644 index 000000000..8346f0c7a --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.0.table @@ -0,0 +1,23 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew point temperature (K) +7 7 Dew point depression (or deficit) (K) +8 8 Lapse rate (K m-1) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin temperature (K) +18 18 Snow temperature (top of snow) - validation (K) +19 19 Turbulent transfer coefficient for heat - validation (Numeric) +20 20 Turbulent diffusion coefficient for heat - validation (m2 s-1) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.1.table b/definitions/grib2/tables/6/4.2.0.1.table new file mode 100644 index 000000000..c4daed33d --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.1.table @@ -0,0 +1,89 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Specific humidity (kg kg-1) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg kg-1) +3 3 Precipitable water (kg m-2) +4 4 Vapour pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age day (-) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type (code table (4.201)) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg kg-1) +22 22 Cloud mixing ratio (kg kg-1) +23 23 Ice water mixing ratio (kg kg-1) +24 24 Rain mixing ratio (kg kg-1) +25 25 Snow mixing ratio (kg kg-1) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category (code table (4.202)) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg kg-1) +33 33 Categorical rain (Code table 4.222) +34 34 Categorical freezing rain (Code table 4.222) +35 35 Categorical ice pellets (Code table 4.222) +36 36 Categorical snow (Code table 4.222) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +47 47 Large scale water precipitation (non-convective) (kg m-2) +48 48 Convective water precipitation (kg m-2) +49 49 Total water precipitation (kg m-2) +50 50 Total snow precipitation (kg m-2) +51 51 Total column water (Vertically integrated total water (vapour + cloud water/ice)) (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale snowfall rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m s-1) +58 58 Convective snowfall rate (m s-1) +59 59 Large scale snowfall rate (m s-1) +60 60 Snow depth water equivalent (kg m-2) +61 61 Snow density (kg m-3) +62 62 Snow evaporation (kg m-2) +63 63 Reserved (-) +64 64 Total column integrated water vapour (kg m-2) +65 65 Rain precipitation rate (kg m-2 s-1) +66 66 Snow precipitation rate (kg m-2 s-1) +67 67 Freezing rain precipitation rate (kg m-2 s-1) +68 68 Ice pellets precipitation rate (kg m-2 s-1) +69 69 Total column integrated cloud water - validation (kg m-2) +70 70 Total column integrated cloud ice - validation (kg m-2) +71 71 Hail mixing ratio - validation (kg kg-1) +72 72 Total column integrated hail - validation (kg m-2) +73 73 Hail precipitation rate - validation (kg m-2 s-1) +74 74 Total column integrated graupel - validation (kg m-2) +75 75 Graupel (snow pellets) precipitation rate - validation (kg m-2 s-1) +76 76 Convective rain rate - validation (kg m-2 s-1) +77 77 Large scale rain rate - validation (kg m-2 s-1) +78 78 Total column integrated water (all components incl. precipitation) - validation (kg m-2) +79 79 Evaporation rate - validation (kg m-2 s-1) +80 80 Total Condensate - validation (kg kg-1) +81 81 Total Column-Integrated Condensate - validation (kg m-2) +82 82 Cloud Ice Mixing-Ratio - validation (kg kg-1) +83 83 Specific cloud liquid water content (kg kg-1) +84 84 Specific cloud ice water content (kg kg-1) +85 85 Specific rain water content (kg kg-1) +86 86 Specific snow water content (kg kg-1) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.13.table b/definitions/grib2/tables/6/4.2.0.13.table new file mode 100644 index 000000000..6a581877e --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.13.table @@ -0,0 +1,3 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Aerosol type (code table (4.205)) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.14.table b/definitions/grib2/tables/6/4.2.0.14.table new file mode 100644 index 000000000..336ce514d --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.14.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Total ozone (Dobson) +1 1 Ozone mixing ratio (kg kg-1) +2 2 Total column integrated ozone (Dobson) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.15.table b/definitions/grib2/tables/6/4.2.0.15.table new file mode 100644 index 000000000..d530ff8e4 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.15.table @@ -0,0 +1,17 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Base spectrum width (m s-1) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m s-1) +3 3 Vertically-integrated liquid (kg m-1) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +9 9 Reflectivity of cloud droplets - validation (dB) +10 10 Reflectivity of cloud ice - validation (dB) +11 11 Reflectivity of snow - validation (dB) +12 12 Reflectivity of rain - validation (dB) +13 13 Reflectivity of graupel - validation (dB) +14 14 Reflectivity of hail - validation (dB) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.16.table b/definitions/grib2/tables/6/4.2.0.16.table new file mode 100644 index 000000000..aa6140dfa --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.16.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Equivalent radar reflectivity factor for rain (mm6 m-3) +1 1 Equivalent radar reflectivity factor for snow (mm6 m-3) +2 2 Equivalent radar reflectivity factor for parameterized convection (mm6 m-3) +3 3 Echo top (m) +4 4 Reflectivity (dB) +5 5 Composite reflectivity (dB) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.18.table b/definitions/grib2/tables/6/4.2.0.18.table new file mode 100644 index 000000000..94859579f --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.18.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.19.table b/definitions/grib2/tables/6/4.2.0.19.table new file mode 100644 index 000000000..53805db8c --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.19.table @@ -0,0 +1,28 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 mixed layer depth (m) +4 4 Volcanic ash (code table (4.206)) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing (code table (4.207)) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence (code table (4.208)) +11 11 Turbulent kinetic energy (J kg-1) +12 12 Planetary boundary layer regime (code table (4.209)) +13 13 Contrail intensity (code table (4.210)) +14 14 Contrail engine type (code table (4.211)) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +19 19 Snow albedo (%) +20 20 Icing (%) +21 21 In-cloud turbulence (%) +22 22 Clear air turbulence (CAT) (%) +23 23 Supercooled large droplet probability (see Note 4) (%) +24 24 Convective turbulent kinetic energy - validation (J kg-1) +25 25 Weather Interpretation ww (WMO) - validation (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.190.table b/definitions/grib2/tables/6/4.2.0.190.table new file mode 100644 index 000000000..591cf2e82 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.190.table @@ -0,0 +1,3 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Arbitrary text string (CCITTIA5) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.191.table b/definitions/grib2/tables/6/4.2.0.191.table new file mode 100644 index 000000000..9f1eb0a95 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.191.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Geographical latitude - validation (deg N) +2 2 Geographical longitude - validation (deg E) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.2.table b/definitions/grib2/tables/6/4.2.0.2.table new file mode 100644 index 000000000..eae541c73 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.2.table @@ -0,0 +1,35 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Wind direction (from which blowing) (deg true) +1 1 Wind speed (m s-1) +2 2 u-component of wind (m s-1) +3 3 v-component of wind (m s-1) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (s-1) +8 8 Vertical velocity (pressure) (Pa s-1) +9 9 Vertical velocity (geometric) (m s-1) +10 10 Absolute vorticity (s-1) +11 11 Absolute divergence (s-1) +12 12 Relative vorticity (s-1) +13 13 Relative divergence (s-1) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (s-1) +16 16 Vertical v-component shear (s-1) +17 17 Momentum flux, u component (N m-2) +18 18 Momentum flux, v component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m s-1) +22 22 Wind speed (gust) (m s-1) +23 23 u-component of wind (gust) (m s-1) +24 24 v-component of wind (gust) (m s-1) +25 25 Vertical speed shear (s-1) +26 26 Horizontal momentum flux (N m-2) +27 27 U-component storm motion (m s-1) +28 28 V-component storm motion (m s-1) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m s-1) +31 31 Turbulent diffusion coefficient for momentum (m2 s-1) +32 32 eta coordinate vertical velocity (s-1) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.20.table b/definitions/grib2/tables/6/4.2.0.20.table new file mode 100644 index 000000000..72f7c2999 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.20.table @@ -0,0 +1,22 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Mass density (concentration) (kg m-3) +1 1 Column-integrated mass density (see Note 1) (kg m-2) +2 2 Mass mixing ratio (mass fraction in air) (kg kg-1) +3 3 Atmosphere emission mass flux (kg m-2 s-1) +4 4 Atmosphere net production mass flux (kg m-2 s-1) +5 5 Atmosphere net production and emission mass flux (kg m-2 s-1) +6 6 Surface dry deposition mass flux (kg m-2 s-1) +7 7 Surface wet deposition mass flux (kg m-2 s-1) +8 8 Atmosphere re-emission mass flux (kg m-2 s-1) +50 50 Amount in atmosphere (mol) +51 51 Concentration in air (mol m-3) +52 52 Volume mixing ratio (fraction in air) (mol mol-1) +53 53 Chemical gross production rate of concentration (mol m-3 s-1) +54 54 Chemical gross destruction rate of concentration (mol m-3 s-1) +55 55 Surface flux (mol m-2 s-1) +56 56 Changes of amount in atmosphere (see Note 1) (mol s-1) +57 57 Total yearly average burden of the atmosphere (mol) +58 58 Total yearly averaged atmospheric loss (see Note 1) (mol s-1) +100 100 Surface area density (aerosol) (m-1) +101 101 Atmosphere optical thickness (m) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.20.table~ b/definitions/grib2/tables/6/4.2.0.20.table~ new file mode 100644 index 000000000..5a6ce1533 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.20.table~ @@ -0,0 +1,13 @@ +0 0 Mass density (concentration) (kg m-3) +1 1 Column-integrated (integrated mass density) (kg m-2) +2 2 Volume mixing ratio (mole fraction in air) mole.mole-1 +3 3 Mass mixing ratio (mass fraction in air) kg.kg-1 +4 4 Surface dry deposition mass flux kg.m-2.s-1 +5 5 Surface wet deposition mass flux kg.m-2.s-1 +6 6 Atmosphere emission mass flux kg.m-2.s-1 +7 7 Chemical gross production rate of mole concentration mole.m-3.s-1 +8 8 Chemical gross destruction rate of mole concentration mole.m-3.s-1 +9 9 Surface dry deposition mass flux into stomata kg.m-2.s-1 +#10-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.2.0.3.table b/definitions/grib2/tables/6/4.2.0.3.table new file mode 100644 index 000000000..7292398b3 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.3.table @@ -0,0 +1,28 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Pressure (Pa) +1 1 Pressure reduced to MSL (Pa) +2 2 Pressure tendency (Pa s-1) +3 3 ICAO Standard Atmosphere Reference Height (m) +4 4 Geopotential (m2 s-2) +5 5 Geopotential height (gpm) +6 6 Geometric height (m) +7 7 Standard deviation of height (m) +8 8 Pressure anomaly (Pa) +9 9 Geopotential height anomaly (gpm) +10 10 Density (kg m-3) +11 11 Altimeter setting (Pa) +12 12 Thickness (m) +13 13 Pressure altitude (m) +14 14 Density altitude (m) +15 15 5-wave geopotential height (gpm) +16 16 Zonal flux of gravity wave stress (N m-2) +17 17 Meridional flux of gravity wave stress (N m-2) +18 18 Planetary boundary layer height (m) +19 19 5-wave geopotential height anomaly (gpm) +20 20 Standard deviation of sub-grid scale orography (m) +21 21 Angle of sub-gridscale orography (rad) +22 22 Slope of sub-gridscale orography (Numeric) +23 23 Gravity wave dissipation (Wm-2) +24 24 Anisotropy of sub-gridscale orography (Numeric) +25 25 Natural logarithm of pressure in Pa (Numeric) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.4.table b/definitions/grib2/tables/6/4.2.0.4.table new file mode 100644 index 000000000..031f3dffb --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.4.table @@ -0,0 +1,17 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +8 8 Upward short-wave radiation flux (W m-2) +9 9 Net short wave radiation flux (W m-2) +10 10 Photosynthetically active radiation (W m-2) +11 11 Net short-wave radiation flux, clear sky (W m-2) +12 12 Downward UV radiation (W m-2) +50 50 UV index (under clear sky) (Numeric) +51 51 UV index (Numeric) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.5.table b/definitions/grib2/tables/6/4.2.0.5.table new file mode 100644 index 000000000..926912fd3 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.5.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net long wave radiation flux (surface) (W m-2) +1 1 Net long wave radiation flux (top of atmosphere) (W m-2) +2 2 Long wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long wave radiation flux (W m-2) +6 6 Net long-wave radiation flux, clear sky (W m-2) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.6.table b/definitions/grib2/tables/6/4.2.0.6.table new file mode 100644 index 000000000..cda8f059b --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.6.table @@ -0,0 +1,36 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Cloud Ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type (code table (4.203)) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage (code table (4.204)) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J kg-1) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg kg-1) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg kg-1) +24 24 Sunshine (Numeric) +25 25 Horizontal extent of cumulonimbus (CB) (%) +26 26 Height of convective cloud base - validation (m) +27 27 Height of convective cloud top - validation (m) +28 28 Number concentration of cloud droplets - validation (kg-1) +29 29 Number concentration of cloud ice - validation (kg-1) +30 30 Number density of cloud droplets - validation (m-3) +31 31 Number density of cloud ice - validation (m-3) +32 32 Fraction of cloud cover (Numeric) +33 33 Sunshine duration (s) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.0.7.table b/definitions/grib2/tables/6/4.2.0.7.table new file mode 100644 index 000000000..a2ffc24c0 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.0.7.table @@ -0,0 +1,16 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J kg-1) +7 7 Convective inhibition (J kg-1) +8 8 Storm relative helicity (J kg-1) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +13 13 Showalter index - validation (K) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.1.0.table b/definitions/grib2/tables/6/4.2.1.0.table new file mode 100644 index 000000000..cad7c98ba --- /dev/null +++ b/definitions/grib2/tables/6/4.2.1.0.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely sensed snow cover ((code table 4.215)) +3 3 Elevation of snow covered terrain ((code table 4.216)) +4 4 Snow water equivalent percent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.1.1.table b/definitions/grib2/tables/6/4.2.1.1.table new file mode 100644 index 000000000..7c118b291 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.1.1.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation). (kg m-2) +1 1 Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.10.0.table b/definitions/grib2/tables/6/4.2.10.0.table new file mode 100644 index 000000000..789cb96fc --- /dev/null +++ b/definitions/grib2/tables/6/4.2.10.0.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (Degree true) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (Degree true) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (Degree true) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (Degree true) +13 13 Secondary wave mean period (s) +14 14 Direction of combined wind waves and swell (Degree true) +15 15 Mean period of combined wind waves and swell (s) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.10.1.table b/definitions/grib2/tables/6/4.2.10.1.table new file mode 100644 index 000000000..c8ae7229b --- /dev/null +++ b/definitions/grib2/tables/6/4.2.10.1.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Current direction (Degree true) +1 1 Current speed (m s-1) +2 2 u-component of current (m s-1) +3 3 v-component of current (m s-1) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.10.191.table b/definitions/grib2/tables/6/4.2.10.191.table new file mode 100644 index 000000000..72cf1ce97 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.10.191.table @@ -0,0 +1,6 @@ +# Product discipline 10 - Oceanographic products, parameter category 191: miscellaneous +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Meridional overturning stream function (m3 s-1) +#2-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.2.10.2.table b/definitions/grib2/tables/6/4.2.10.2.table new file mode 100644 index 000000000..8e6909464 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.10.2.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (Degree true) +3 3 Speed of ice drift (m s-1) +4 4 u-component of ice drift (m s-1) +5 5 v-component of ice drift (m s-1) +6 6 Ice growth rate (m s-1) +7 7 Ice divergence (s-1) +8 8 Ice temperature (K) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.10.3.table b/definitions/grib2/tables/6/4.2.10.3.table new file mode 100644 index 000000000..6a921bfe5 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.10.3.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.10.4.table b/definitions/grib2/tables/6/4.2.10.4.table new file mode 100644 index 000000000..10f0b6e7e --- /dev/null +++ b/definitions/grib2/tables/6/4.2.10.4.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg kg-1) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.0.table b/definitions/grib2/tables/6/4.2.192.0.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.0.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.1.table b/definitions/grib2/tables/6/4.2.192.1.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.1.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.10.table b/definitions/grib2/tables/6/4.2.192.10.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.10.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.100.table b/definitions/grib2/tables/6/4.2.192.100.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.100.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.101.table b/definitions/grib2/tables/6/4.2.192.101.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.101.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.102.table b/definitions/grib2/tables/6/4.2.192.102.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.102.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.103.table b/definitions/grib2/tables/6/4.2.192.103.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.103.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.104.table b/definitions/grib2/tables/6/4.2.192.104.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.104.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.105.table b/definitions/grib2/tables/6/4.2.192.105.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.105.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.106.table b/definitions/grib2/tables/6/4.2.192.106.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.106.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.107.table b/definitions/grib2/tables/6/4.2.192.107.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.107.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.108.table b/definitions/grib2/tables/6/4.2.192.108.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.108.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.109.table b/definitions/grib2/tables/6/4.2.192.109.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.109.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.11.table b/definitions/grib2/tables/6/4.2.192.11.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.11.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.110.table b/definitions/grib2/tables/6/4.2.192.110.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.110.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.111.table b/definitions/grib2/tables/6/4.2.192.111.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.111.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.112.table b/definitions/grib2/tables/6/4.2.192.112.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.112.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.113.table b/definitions/grib2/tables/6/4.2.192.113.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.113.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.114.table b/definitions/grib2/tables/6/4.2.192.114.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.114.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.115.table b/definitions/grib2/tables/6/4.2.192.115.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.115.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.116.table b/definitions/grib2/tables/6/4.2.192.116.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.116.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.117.table b/definitions/grib2/tables/6/4.2.192.117.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.117.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.118.table b/definitions/grib2/tables/6/4.2.192.118.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.118.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.119.table b/definitions/grib2/tables/6/4.2.192.119.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.119.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.12.table b/definitions/grib2/tables/6/4.2.192.12.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.12.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.120.table b/definitions/grib2/tables/6/4.2.192.120.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.120.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.121.table b/definitions/grib2/tables/6/4.2.192.121.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.121.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.122.table b/definitions/grib2/tables/6/4.2.192.122.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.122.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.123.table b/definitions/grib2/tables/6/4.2.192.123.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.123.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.124.table b/definitions/grib2/tables/6/4.2.192.124.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.124.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.125.table b/definitions/grib2/tables/6/4.2.192.125.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.125.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.126.table b/definitions/grib2/tables/6/4.2.192.126.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.126.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.127.table b/definitions/grib2/tables/6/4.2.192.127.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.127.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.128.table b/definitions/grib2/tables/6/4.2.192.128.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.128.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.129.table b/definitions/grib2/tables/6/4.2.192.129.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.129.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.13.table b/definitions/grib2/tables/6/4.2.192.13.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.13.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.130.table b/definitions/grib2/tables/6/4.2.192.130.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.130.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.131.table b/definitions/grib2/tables/6/4.2.192.131.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.131.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.132.table b/definitions/grib2/tables/6/4.2.192.132.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.132.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.133.table b/definitions/grib2/tables/6/4.2.192.133.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.133.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.134.table b/definitions/grib2/tables/6/4.2.192.134.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.134.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.135.table b/definitions/grib2/tables/6/4.2.192.135.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.135.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.136.table b/definitions/grib2/tables/6/4.2.192.136.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.136.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.137.table b/definitions/grib2/tables/6/4.2.192.137.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.137.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.138.table b/definitions/grib2/tables/6/4.2.192.138.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.138.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.139.table b/definitions/grib2/tables/6/4.2.192.139.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.139.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.14.table b/definitions/grib2/tables/6/4.2.192.14.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.14.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.140.table b/definitions/grib2/tables/6/4.2.192.140.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.140.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.141.table b/definitions/grib2/tables/6/4.2.192.141.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.141.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.142.table b/definitions/grib2/tables/6/4.2.192.142.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.142.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.143.table b/definitions/grib2/tables/6/4.2.192.143.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.143.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.144.table b/definitions/grib2/tables/6/4.2.192.144.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.144.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.145.table b/definitions/grib2/tables/6/4.2.192.145.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.145.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.146.table b/definitions/grib2/tables/6/4.2.192.146.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.146.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.147.table b/definitions/grib2/tables/6/4.2.192.147.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.147.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.148.table b/definitions/grib2/tables/6/4.2.192.148.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.148.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.149.table b/definitions/grib2/tables/6/4.2.192.149.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.149.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.15.table b/definitions/grib2/tables/6/4.2.192.15.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.15.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.150.table b/definitions/grib2/tables/6/4.2.192.150.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.150.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.151.table b/definitions/grib2/tables/6/4.2.192.151.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.151.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.152.table b/definitions/grib2/tables/6/4.2.192.152.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.152.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.153.table b/definitions/grib2/tables/6/4.2.192.153.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.153.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.154.table b/definitions/grib2/tables/6/4.2.192.154.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.154.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.155.table b/definitions/grib2/tables/6/4.2.192.155.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.155.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.156.table b/definitions/grib2/tables/6/4.2.192.156.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.156.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.157.table b/definitions/grib2/tables/6/4.2.192.157.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.157.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.158.table b/definitions/grib2/tables/6/4.2.192.158.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.158.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.159.table b/definitions/grib2/tables/6/4.2.192.159.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.159.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.16.table b/definitions/grib2/tables/6/4.2.192.16.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.16.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.160.table b/definitions/grib2/tables/6/4.2.192.160.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.160.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.161.table b/definitions/grib2/tables/6/4.2.192.161.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.161.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.162.table b/definitions/grib2/tables/6/4.2.192.162.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.162.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.163.table b/definitions/grib2/tables/6/4.2.192.163.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.163.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.164.table b/definitions/grib2/tables/6/4.2.192.164.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.164.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.165.table b/definitions/grib2/tables/6/4.2.192.165.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.165.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.166.table b/definitions/grib2/tables/6/4.2.192.166.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.166.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.167.table b/definitions/grib2/tables/6/4.2.192.167.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.167.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.168.table b/definitions/grib2/tables/6/4.2.192.168.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.168.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.169.table b/definitions/grib2/tables/6/4.2.192.169.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.169.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.17.table b/definitions/grib2/tables/6/4.2.192.17.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.17.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.170.table b/definitions/grib2/tables/6/4.2.192.170.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.170.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.171.table b/definitions/grib2/tables/6/4.2.192.171.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.171.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.172.table b/definitions/grib2/tables/6/4.2.192.172.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.172.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.173.table b/definitions/grib2/tables/6/4.2.192.173.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.173.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.174.table b/definitions/grib2/tables/6/4.2.192.174.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.174.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.175.table b/definitions/grib2/tables/6/4.2.192.175.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.175.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.176.table b/definitions/grib2/tables/6/4.2.192.176.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.176.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.177.table b/definitions/grib2/tables/6/4.2.192.177.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.177.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.178.table b/definitions/grib2/tables/6/4.2.192.178.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.178.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.179.table b/definitions/grib2/tables/6/4.2.192.179.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.179.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.18.table b/definitions/grib2/tables/6/4.2.192.18.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.18.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.180.table b/definitions/grib2/tables/6/4.2.192.180.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.180.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.181.table b/definitions/grib2/tables/6/4.2.192.181.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.181.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.182.table b/definitions/grib2/tables/6/4.2.192.182.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.182.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.183.table b/definitions/grib2/tables/6/4.2.192.183.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.183.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.184.table b/definitions/grib2/tables/6/4.2.192.184.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.184.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.185.table b/definitions/grib2/tables/6/4.2.192.185.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.185.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.186.table b/definitions/grib2/tables/6/4.2.192.186.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.186.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.187.table b/definitions/grib2/tables/6/4.2.192.187.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.187.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.188.table b/definitions/grib2/tables/6/4.2.192.188.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.188.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.189.table b/definitions/grib2/tables/6/4.2.192.189.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.189.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.19.table b/definitions/grib2/tables/6/4.2.192.19.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.19.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.190.table b/definitions/grib2/tables/6/4.2.192.190.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.190.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.191.table b/definitions/grib2/tables/6/4.2.192.191.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.191.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.192.table b/definitions/grib2/tables/6/4.2.192.192.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.192.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.193.table b/definitions/grib2/tables/6/4.2.192.193.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.193.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.194.table b/definitions/grib2/tables/6/4.2.192.194.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.194.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.195.table b/definitions/grib2/tables/6/4.2.192.195.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.195.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.196.table b/definitions/grib2/tables/6/4.2.192.196.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.196.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.197.table b/definitions/grib2/tables/6/4.2.192.197.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.197.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.198.table b/definitions/grib2/tables/6/4.2.192.198.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.198.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.199.table b/definitions/grib2/tables/6/4.2.192.199.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.199.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.2.table b/definitions/grib2/tables/6/4.2.192.2.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.2.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.20.table b/definitions/grib2/tables/6/4.2.192.20.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.20.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.200.table b/definitions/grib2/tables/6/4.2.192.200.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.200.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.201.table b/definitions/grib2/tables/6/4.2.192.201.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.201.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.202.table b/definitions/grib2/tables/6/4.2.192.202.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.202.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.203.table b/definitions/grib2/tables/6/4.2.192.203.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.203.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.204.table b/definitions/grib2/tables/6/4.2.192.204.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.204.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.205.table b/definitions/grib2/tables/6/4.2.192.205.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.205.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.206.table b/definitions/grib2/tables/6/4.2.192.206.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.206.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.207.table b/definitions/grib2/tables/6/4.2.192.207.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.207.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.208.table b/definitions/grib2/tables/6/4.2.192.208.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.208.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.209.table b/definitions/grib2/tables/6/4.2.192.209.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.209.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.21.table b/definitions/grib2/tables/6/4.2.192.21.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.21.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.210.table b/definitions/grib2/tables/6/4.2.192.210.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.210.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.211.table b/definitions/grib2/tables/6/4.2.192.211.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.211.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.212.table b/definitions/grib2/tables/6/4.2.192.212.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.212.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.213.table b/definitions/grib2/tables/6/4.2.192.213.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.213.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.214.table b/definitions/grib2/tables/6/4.2.192.214.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.214.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.215.table b/definitions/grib2/tables/6/4.2.192.215.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.215.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.216.table b/definitions/grib2/tables/6/4.2.192.216.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.216.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.217.table b/definitions/grib2/tables/6/4.2.192.217.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.217.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.218.table b/definitions/grib2/tables/6/4.2.192.218.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.218.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.219.table b/definitions/grib2/tables/6/4.2.192.219.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.219.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.22.table b/definitions/grib2/tables/6/4.2.192.22.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.22.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.220.table b/definitions/grib2/tables/6/4.2.192.220.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.220.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.221.table b/definitions/grib2/tables/6/4.2.192.221.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.221.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.222.table b/definitions/grib2/tables/6/4.2.192.222.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.222.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.223.table b/definitions/grib2/tables/6/4.2.192.223.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.223.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.224.table b/definitions/grib2/tables/6/4.2.192.224.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.224.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.225.table b/definitions/grib2/tables/6/4.2.192.225.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.225.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.226.table b/definitions/grib2/tables/6/4.2.192.226.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.226.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.227.table b/definitions/grib2/tables/6/4.2.192.227.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.227.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.228.table b/definitions/grib2/tables/6/4.2.192.228.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.228.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.229.table b/definitions/grib2/tables/6/4.2.192.229.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.229.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.23.table b/definitions/grib2/tables/6/4.2.192.23.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.23.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.230.table b/definitions/grib2/tables/6/4.2.192.230.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.230.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.231.table b/definitions/grib2/tables/6/4.2.192.231.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.231.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.232.table b/definitions/grib2/tables/6/4.2.192.232.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.232.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.233.table b/definitions/grib2/tables/6/4.2.192.233.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.233.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.234.table b/definitions/grib2/tables/6/4.2.192.234.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.234.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.235.table b/definitions/grib2/tables/6/4.2.192.235.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.235.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.236.table b/definitions/grib2/tables/6/4.2.192.236.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.236.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.237.table b/definitions/grib2/tables/6/4.2.192.237.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.237.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.238.table b/definitions/grib2/tables/6/4.2.192.238.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.238.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.239.table b/definitions/grib2/tables/6/4.2.192.239.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.239.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.24.table b/definitions/grib2/tables/6/4.2.192.24.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.24.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.240.table b/definitions/grib2/tables/6/4.2.192.240.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.240.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.241.table b/definitions/grib2/tables/6/4.2.192.241.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.241.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.242.table b/definitions/grib2/tables/6/4.2.192.242.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.242.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.243.table b/definitions/grib2/tables/6/4.2.192.243.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.243.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.244.table b/definitions/grib2/tables/6/4.2.192.244.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.244.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.245.table b/definitions/grib2/tables/6/4.2.192.245.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.245.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.246.table b/definitions/grib2/tables/6/4.2.192.246.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.246.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.247.table b/definitions/grib2/tables/6/4.2.192.247.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.247.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.248.table b/definitions/grib2/tables/6/4.2.192.248.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.248.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.249.table b/definitions/grib2/tables/6/4.2.192.249.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.249.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.25.table b/definitions/grib2/tables/6/4.2.192.25.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.25.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.250.table b/definitions/grib2/tables/6/4.2.192.250.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.250.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.251.table b/definitions/grib2/tables/6/4.2.192.251.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.251.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.252.table b/definitions/grib2/tables/6/4.2.192.252.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.252.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.253.table b/definitions/grib2/tables/6/4.2.192.253.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.253.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.254.table b/definitions/grib2/tables/6/4.2.192.254.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.254.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.255.table b/definitions/grib2/tables/6/4.2.192.255.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.255.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.26.table b/definitions/grib2/tables/6/4.2.192.26.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.26.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.27.table b/definitions/grib2/tables/6/4.2.192.27.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.27.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.28.table b/definitions/grib2/tables/6/4.2.192.28.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.28.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.29.table b/definitions/grib2/tables/6/4.2.192.29.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.29.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.3.table b/definitions/grib2/tables/6/4.2.192.3.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.3.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.30.table b/definitions/grib2/tables/6/4.2.192.30.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.30.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.31.table b/definitions/grib2/tables/6/4.2.192.31.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.31.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.32.table b/definitions/grib2/tables/6/4.2.192.32.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.32.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.33.table b/definitions/grib2/tables/6/4.2.192.33.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.33.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.34.table b/definitions/grib2/tables/6/4.2.192.34.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.34.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.35.table b/definitions/grib2/tables/6/4.2.192.35.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.35.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.36.table b/definitions/grib2/tables/6/4.2.192.36.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.36.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.37.table b/definitions/grib2/tables/6/4.2.192.37.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.37.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.38.table b/definitions/grib2/tables/6/4.2.192.38.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.38.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.39.table b/definitions/grib2/tables/6/4.2.192.39.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.39.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.4.table b/definitions/grib2/tables/6/4.2.192.4.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.4.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.40.table b/definitions/grib2/tables/6/4.2.192.40.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.40.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.41.table b/definitions/grib2/tables/6/4.2.192.41.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.41.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.42.table b/definitions/grib2/tables/6/4.2.192.42.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.42.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.43.table b/definitions/grib2/tables/6/4.2.192.43.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.43.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.44.table b/definitions/grib2/tables/6/4.2.192.44.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.44.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.45.table b/definitions/grib2/tables/6/4.2.192.45.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.45.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.46.table b/definitions/grib2/tables/6/4.2.192.46.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.46.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.47.table b/definitions/grib2/tables/6/4.2.192.47.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.47.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.48.table b/definitions/grib2/tables/6/4.2.192.48.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.48.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.49.table b/definitions/grib2/tables/6/4.2.192.49.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.49.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.5.table b/definitions/grib2/tables/6/4.2.192.5.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.5.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.50.table b/definitions/grib2/tables/6/4.2.192.50.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.50.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.51.table b/definitions/grib2/tables/6/4.2.192.51.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.51.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.52.table b/definitions/grib2/tables/6/4.2.192.52.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.52.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.53.table b/definitions/grib2/tables/6/4.2.192.53.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.53.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.54.table b/definitions/grib2/tables/6/4.2.192.54.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.54.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.55.table b/definitions/grib2/tables/6/4.2.192.55.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.55.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.56.table b/definitions/grib2/tables/6/4.2.192.56.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.56.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.57.table b/definitions/grib2/tables/6/4.2.192.57.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.57.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.58.table b/definitions/grib2/tables/6/4.2.192.58.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.58.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.59.table b/definitions/grib2/tables/6/4.2.192.59.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.59.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.6.table b/definitions/grib2/tables/6/4.2.192.6.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.6.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.60.table b/definitions/grib2/tables/6/4.2.192.60.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.60.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.61.table b/definitions/grib2/tables/6/4.2.192.61.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.61.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.62.table b/definitions/grib2/tables/6/4.2.192.62.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.62.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.63.table b/definitions/grib2/tables/6/4.2.192.63.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.63.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.64.table b/definitions/grib2/tables/6/4.2.192.64.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.64.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.65.table b/definitions/grib2/tables/6/4.2.192.65.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.65.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.66.table b/definitions/grib2/tables/6/4.2.192.66.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.66.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.67.table b/definitions/grib2/tables/6/4.2.192.67.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.67.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.68.table b/definitions/grib2/tables/6/4.2.192.68.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.68.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.69.table b/definitions/grib2/tables/6/4.2.192.69.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.69.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.7.table b/definitions/grib2/tables/6/4.2.192.7.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.7.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.70.table b/definitions/grib2/tables/6/4.2.192.70.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.70.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.71.table b/definitions/grib2/tables/6/4.2.192.71.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.71.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.72.table b/definitions/grib2/tables/6/4.2.192.72.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.72.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.73.table b/definitions/grib2/tables/6/4.2.192.73.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.73.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.74.table b/definitions/grib2/tables/6/4.2.192.74.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.74.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.75.table b/definitions/grib2/tables/6/4.2.192.75.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.75.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.76.table b/definitions/grib2/tables/6/4.2.192.76.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.76.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.77.table b/definitions/grib2/tables/6/4.2.192.77.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.77.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.78.table b/definitions/grib2/tables/6/4.2.192.78.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.78.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.79.table b/definitions/grib2/tables/6/4.2.192.79.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.79.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.8.table b/definitions/grib2/tables/6/4.2.192.8.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.8.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.80.table b/definitions/grib2/tables/6/4.2.192.80.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.80.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.81.table b/definitions/grib2/tables/6/4.2.192.81.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.81.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.82.table b/definitions/grib2/tables/6/4.2.192.82.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.82.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.83.table b/definitions/grib2/tables/6/4.2.192.83.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.83.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.84.table b/definitions/grib2/tables/6/4.2.192.84.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.84.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.85.table b/definitions/grib2/tables/6/4.2.192.85.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.85.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.86.table b/definitions/grib2/tables/6/4.2.192.86.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.86.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.87.table b/definitions/grib2/tables/6/4.2.192.87.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.87.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.88.table b/definitions/grib2/tables/6/4.2.192.88.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.88.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.89.table b/definitions/grib2/tables/6/4.2.192.89.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.89.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.9.table b/definitions/grib2/tables/6/4.2.192.9.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.9.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.90.table b/definitions/grib2/tables/6/4.2.192.90.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.90.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.91.table b/definitions/grib2/tables/6/4.2.192.91.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.91.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.92.table b/definitions/grib2/tables/6/4.2.192.92.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.92.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.93.table b/definitions/grib2/tables/6/4.2.192.93.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.93.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.94.table b/definitions/grib2/tables/6/4.2.192.94.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.94.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.95.table b/definitions/grib2/tables/6/4.2.192.95.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.95.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.96.table b/definitions/grib2/tables/6/4.2.192.96.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.96.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.97.table b/definitions/grib2/tables/6/4.2.192.97.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.97.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.98.table b/definitions/grib2/tables/6/4.2.192.98.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.98.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.192.99.table b/definitions/grib2/tables/6/4.2.192.99.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.192.99.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.2.0.table b/definitions/grib2/tables/6/4.2.2.0.table new file mode 100644 index 000000000..399bd2a30 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.2.0.table @@ -0,0 +1,35 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Land cover (1=land, 0=sea) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg -2 s-1) +7 7 Model terrain height (m) +8 8 Land use (code table (4.212)) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadars mixing length scale (m) +15 15 Canopy conductance (m s-1) +16 16 Minimal stomatal resistance (s m-1) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy conductance (Proportion) +20 20 Soil moisture parameter in canopy conductance (Proportion) +21 21 Humidity parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +23 23 Column-integrated soil water (kg m-2) +24 24 Heat flux (W m-2) +25 25 Volumetric soil moisture (m3 m-3) +26 26 Wilting point (kg m-3) +27 27 Volumetric wilting point (m3 m-3) +28 28 Leaf area index - validation (Numeric) +29 29 Evergreen forest - validation (Numeric) +30 30 Deciduous forest - validation (Numeric) +31 31 Normalized differential vegetation index (NDVI) - validation (Numeric) +32 32 Root depth of vegetation - validation (M) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.2.3.table b/definitions/grib2/tables/6/4.2.2.3.table new file mode 100644 index 000000000..097abd6e7 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.2.3.table @@ -0,0 +1,25 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Soil type (code table (4.213)) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +10 10 Liquid volumetric soil moisture (non-frozen) (m3 m-3) +11 11 Volumetric transpiration stress-onset (soil moisture) (m3 m-3) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +13 13 Volumetric direct evaporation cease (soil moisture) (m3 m-3) +14 14 Direct evaporation cease (soil moisture) (kg m-3) +15 15 Soil porosity (m3 m-3) +16 16 Volumetric saturation of soil moisture (m3 m-3) +17 17 Saturation of soil moisture (kg m-3) +18 18 Soil Temperature - validation (K) +19 19 Soil moisture - validation (kg m-3) +20 20 Column-integrated soil moisture - validation (kg m-2) +21 21 Soil ice - validation (kg m-3) +22 22 Column-integrated soil ice - validation (kg m-2) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.2.4.table b/definitions/grib2/tables/6/4.2.2.4.table new file mode 100644 index 000000000..d06954431 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.2.4.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Fire Outlook Critical Risk Area (%) +1 1 Fire Outlook Extreme Critical Risk Area (%) +2 2 Fire Outlook Dry Lightning Area (%) diff --git a/definitions/grib2/tables/6/4.2.3.0.table b/definitions/grib2/tables/6/4.2.3.0.table new file mode 100644 index 000000000..7ac6cc8ce --- /dev/null +++ b/definitions/grib2/tables/6/4.2.3.0.table @@ -0,0 +1,12 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +9 9 Fire detection indicator (Code table 4.223) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.3.1.table b/definitions/grib2/tables/6/4.2.3.1.table new file mode 100644 index 000000000..049a779cc --- /dev/null +++ b/definitions/grib2/tables/6/4.2.3.1.table @@ -0,0 +1,21 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m s-1) +5 5 Estimated v component of wind (m s-1) +6 6 Number of pixels used (Numeric) +7 7 Solar zenith angle (Degree) +8 8 Relative azimuth angle (Degree) +9 9 Reflectance in 0.6 micron channel (%) +10 10 Reflectance in 0.8 micron channel (%) +11 11 Reflectance in 1.6 micron channel (%) +12 12 Reflectance in 3.9 micron channel (%) +13 13 Atmospheric divergence (s-1) +19 19 Wind speed (m s-1) +20 20 Aerosol optical thickness at 0.635 um (-) +21 21 Aerosol optical thickness at 0.810 um (-) +22 22 Aerosol optical thickness at 1.640 um (-) +23 23 Angstrom coefficient (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/6/4.2.table b/definitions/grib2/tables/6/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/6/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/6/4.201.table b/definitions/grib2/tables/6/4.201.table new file mode 100644 index 000000000..7445c9c20 --- /dev/null +++ b/definitions/grib2/tables/6/4.201.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.201, Precipitation Type + +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.202.table b/definitions/grib2/tables/6/4.202.table new file mode 100644 index 000000000..69dbe3a5d --- /dev/null +++ b/definitions/grib2/tables/6/4.202.table @@ -0,0 +1,66 @@ +# CODE TABLE 4.202, Precipitable water category + +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.203.table b/definitions/grib2/tables/6/4.203.table new file mode 100644 index 000000000..d2ad10b07 --- /dev/null +++ b/definitions/grib2/tables/6/4.203.table @@ -0,0 +1,88 @@ +# CODE TABLE 4.203, Cloud type + +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground based fog beneath the lowest layer +12 12 Stratus - ground based fog beneath the lowest layer +13 13 Stratocumulus - ground based fog beneath the lowest layer +14 14 Cumulus - ground based fog beneath the lowest layer +15 15 Altostratus - ground based fog beneath the lowest layer +16 16 Nimbostratus - ground based fog beneath the lowest layer +17 17 Altocumulus - ground based fog beneath the lowest layer +18 18 Cirrostratus - ground based fog beneath the lowest layer +19 19 Cirrocumulus - ground based fog beneath the lowest layer +20 20 Cirrus - ground based fog beneath the lowest layer +191 191 Unknown +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.204.table b/definitions/grib2/tables/6/4.204.table new file mode 100644 index 000000000..23b60cf77 --- /dev/null +++ b/definitions/grib2/tables/6/4.204.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.204, Thunderstorm coverage + +0 0 None +1 1 Isolated (1% - 2%) +2 2 Few (3% - 15%) +3 3 Scattered (16% - 45%) +4 4 Numerous (> 45%) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.205.table b/definitions/grib2/tables/6/4.205.table new file mode 100644 index 000000000..98c7b48ec --- /dev/null +++ b/definitions/grib2/tables/6/4.205.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.205, Aerosol type + +0 0 Aerosol not present +1 1 Aerosol present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.206.table b/definitions/grib2/tables/6/4.206.table new file mode 100644 index 000000000..b1ef2e787 --- /dev/null +++ b/definitions/grib2/tables/6/4.206.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.206, Volcanic ash + +0 0 Not present +1 1 Present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.207.table b/definitions/grib2/tables/6/4.207.table new file mode 100644 index 000000000..13fc7b54b --- /dev/null +++ b/definitions/grib2/tables/6/4.207.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.207, Icing + +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.208.table b/definitions/grib2/tables/6/4.208.table new file mode 100644 index 000000000..15b514a07 --- /dev/null +++ b/definitions/grib2/tables/6/4.208.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.208, Turbulence + +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.209.table b/definitions/grib2/tables/6/4.209.table new file mode 100644 index 000000000..b4cca1d73 --- /dev/null +++ b/definitions/grib2/tables/6/4.209.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.209, Planetary boundary layer regime + +1 1 Stable +2 2 Mechanically driven turbulence +3 3 Forced convection +4 4 Free convection +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.210.table b/definitions/grib2/tables/6/4.210.table new file mode 100644 index 000000000..d05e07721 --- /dev/null +++ b/definitions/grib2/tables/6/4.210.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.210, Contrail intensity + +0 0 Contrail not present +1 1 Contrail present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.211.table b/definitions/grib2/tables/6/4.211.table new file mode 100644 index 000000000..604b2e643 --- /dev/null +++ b/definitions/grib2/tables/6/4.211.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.211, Contrail engine type + +0 0 Low bypass +1 1 High bypass +2 2 Non bypass +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.212.table b/definitions/grib2/tables/6/4.212.table new file mode 100644 index 000000000..7393238e7 --- /dev/null +++ b/definitions/grib2/tables/6/4.212.table @@ -0,0 +1,79 @@ +# CODE TABLE 4.212, Land Use + +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.213.table b/definitions/grib2/tables/6/4.213.table new file mode 100644 index 000000000..cc4bdfc1f --- /dev/null +++ b/definitions/grib2/tables/6/4.213.table @@ -0,0 +1,77 @@ +# CODE TABLE 4.213, Soil type + +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.215.table b/definitions/grib2/tables/6/4.215.table new file mode 100644 index 000000000..7e1442962 --- /dev/null +++ b/definitions/grib2/tables/6/4.215.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.215, Remotely Sensed Snow Coverage + +50 50 No-snow/no-cloud +100 100 Clouds +250 250 Snow +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.216.table b/definitions/grib2/tables/6/4.216.table new file mode 100644 index 000000000..dbe26b0e5 --- /dev/null +++ b/definitions/grib2/tables/6/4.216.table @@ -0,0 +1,95 @@ +# CODE TABLE 4.216, Elevation of Snow Covered Terrain + +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/6/4.217.table b/definitions/grib2/tables/6/4.217.table new file mode 100644 index 000000000..475ab686d --- /dev/null +++ b/definitions/grib2/tables/6/4.217.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.217, Cloud mask type + +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.218.table b/definitions/grib2/tables/6/4.218.table new file mode 100644 index 000000000..a0295261b --- /dev/null +++ b/definitions/grib2/tables/6/4.218.table @@ -0,0 +1,35 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No scene identified +1 1 Green needle leafed forest +2 2 Green broad-leafed forest +3 3 Deciduous needle leafed forest +4 4 Deciduous broad-leafed forest +5 5 Deciduous mixed forest +6 6 Closed shrub-land +7 7 Open shrub-land +8 8 Woody savannah +9 9 Savannah +10 10 Grassland +11 11 Permanent wetland +12 12 Cropland +13 13 Urban +14 14 Vegetation / crops +15 15 Permanent snow / ice +16 16 Barren desert +17 17 Water bodies +18 18 Tundra +97 97 Snow / ice on land +98 98 Snow / ice on water +99 99 Sun-glint +100 100 General cloud +101 101 Low cloud / fog / Stratus +102 102 Low cloud / Stratocumulus +103 103 Low cloud / unknown type +104 104 Medium cloud / Nimbostratus +105 105 Medium cloud / Altostratus +106 106 Medium cloud / unknown type +107 107 High cloud / Cumulus +108 108 High cloud / Cirrus +109 109 High cloud / unknown +110 110 Unknown cloud type +255 255 Missing diff --git a/definitions/grib2/tables/6/4.219.table b/definitions/grib2/tables/6/4.219.table new file mode 100644 index 000000000..161834ab7 --- /dev/null +++ b/definitions/grib2/tables/6/4.219.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Nominal cloud top height quality +1 1 Fog in segment +2 2 Poor quality height estimation +3 3 Fog in segment and poor quality height estimation +255 255 Missing diff --git a/definitions/grib2/tables/6/4.220.table b/definitions/grib2/tables/6/4.220.table new file mode 100644 index 000000000..9fddcd49f --- /dev/null +++ b/definitions/grib2/tables/6/4.220.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.220, Horizontal dimension processed + +0 0 Latitude +1 1 Longitude +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.221.table b/definitions/grib2/tables/6/4.221.table new file mode 100644 index 000000000..2291eab60 --- /dev/null +++ b/definitions/grib2/tables/6/4.221.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.221, Treatment of missing data + +0 0 Not included +1 1 Extrapolated +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.222.table b/definitions/grib2/tables/6/4.222.table new file mode 100644 index 000000000..c56e95732 --- /dev/null +++ b/definitions/grib2/tables/6/4.222.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No +1 1 Yes +255 255 Missing diff --git a/definitions/grib2/tables/6/4.223.table b/definitions/grib2/tables/6/4.223.table new file mode 100644 index 000000000..360725351 --- /dev/null +++ b/definitions/grib2/tables/6/4.223.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No fire detected +1 1 Possible fire detected +2 2 Probable fire detected +3 3 Missing diff --git a/definitions/grib2/tables/6/4.230.table b/definitions/grib2/tables/6/4.230.table new file mode 100644 index 000000000..22563e883 --- /dev/null +++ b/definitions/grib2/tables/6/4.230.table @@ -0,0 +1,117 @@ +#Code figure Code figure Meaning +0 0 Ozone +1 1 Water vapour +2 2 Methane +3 3 Carbon dioxide +4 4 Carbon monoxide +5 5 Nitrogen dioxide +6 6 Nitrous oxide +7 7 Formaldehyde +8 8 Sulphur dioxide +9 9 Ammonia +10 10 Ammonium +11 11 Nitrogen monoxide +12 12 Atomic oxygen +13 13 Nitrate radical +14 14 Hydroperoxyl radical +15 15 Dinitrogen pentoxide +16 16 Nitrous acid +17 17 Nitric acid +18 18 Peroxynitric acid +19 19 Hydrogen peroxide +20 20 Molecular hydrogen +21 21 Atomic nitrogen +22 22 Sulphate +23 23 Radon +24 24 Elemental mercury +25 25 Divalent mercury +26 26 Atomic chlorine +27 27 Chlorine monoxide +28 28 Dichlorine peroxide +29 29 Hypochlorous acid +30 30 Chlorine nitrate +31 31 Chlorine dioxide +32 32 Atomic bromine +33 33 Bromine monoxide +34 34 Bromine chloride +35 35 Hydrogen bromide +36 36 Hypobromous acid +37 37 Bromine nitrate +10000 10000 Hydroxyl radical +10001 10001 Methyl peroxy radical +10002 10002 Methyl hydroperoxide +10004 10004 Methanol +10005 10005 Formic acid +10006 10006 Hydrogen Cyanide +10007 10007 Aceto nitrile +10008 10008 Ethane +10009 10009 Ethene (= Ethylene) +10010 10010 Ethyne (= Acetylene) +10011 10011 Ethanol +10012 10012 Acetic acid +10013 10013 Peroxyacetyl nitrate +10014 10014 Propane +10015 10015 Propene +10016 10016 Butanes +10017 10017 Isoprene +10018 10018 Alpha pinene +10019 10019 Beta pinene +10020 10020 Limonene +10021 10021 Benzene +10022 10022 Toluene +10023 10023 Xylene +#10024-10499 10024-10499 reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides,…) +10500 10500 Dimethyl sulphide +#10501-20000 10501-20000 Reserved +20001 20001 Hydrogen chloride +20002 20002 CFC-11 +20003 20003 CFC-12 +20004 20004 CFC-113 +20005 20005 CFC-113a +20006 20006 CFC-114 +20007 20007 CFC-115 +20008 20008 HCFC-22 +20009 20009 HCFC-141b +20010 20010 HCFC-142b +20011 20011 Halon-1202 +20012 20012 Halon-1211 +20013 20013 Halon-1301 +20014 20014 Halon-2402 +20015 20015 Methyl chloride (HCC-40) +20016 20016 Carbon tetrachloride (HCC-10) +20017 20017 HCC-140a +20018 20018 Methyl bromide (HBC-40B1) +20019 20019 Hexachlorocyclohexane (HCH) +20020 20020 Alpha hexachlorocyclohexane +20021 20021 Hexachlorobiphenyl (PCB-153) +60000 60000 HOx radical (OH+HO2) +60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2) +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen +60005 60005 Total inorganic chlorine +60006 60006 Total inorganic bromine +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped Alkanes +60010 60010 Lumped Alkenes +60011 60011 Lumped Aromatic Compounds +60012 60012 Lumped Terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon +60016 60016 Lumped oxygenated hydrocarbons +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +65535 65535 Missing diff --git a/definitions/grib2/tables/6/4.3.table b/definitions/grib2/tables/6/4.3.table new file mode 100644 index 000000000..47bccd26b --- /dev/null +++ b/definitions/grib2/tables/6/4.3.table @@ -0,0 +1,16 @@ +# CODE TABLE 4.3, Type of generating process +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +9 9 Climatological +10 10 Probability-weighted forecast +11 11 Bias-corrected ensemble forecast +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.4.table b/definitions/grib2/tables/6/4.4.table new file mode 100644 index 000000000..61aa20c5f --- /dev/null +++ b/definitions/grib2/tables/6/4.4.table @@ -0,0 +1,16 @@ +# CODE TABLE 4.4, Indicator of unit of time range +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.5.table b/definitions/grib2/tables/6/4.5.table new file mode 100644 index 000000000..a475587a5 --- /dev/null +++ b/definitions/grib2/tables/6/4.5.table @@ -0,0 +1,38 @@ +#Code table 4.5: Fixed surface types and units +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0 degree C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +10 10 Entire atmosphere +11 11 Cumulonimbus (CB) base (m) +12 12 Cumulonimbus (CB) top (m) +# 13-19 Reserved +20 20 Isothermal level (K) +#21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level +# 112-116 Reserved +117 117 Mixed layer depth (m) +118 hhl Hybrid height level +119 hpl Hybrid pressure level +# 120-159 Reserved +160 160 Depth below sea level (m) +#161-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.6.table b/definitions/grib2/tables/6/4.6.table new file mode 100644 index 000000000..300113b0f --- /dev/null +++ b/definitions/grib2/tables/6/4.6.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.6, Type of ensemble forecast + +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +4 4 Multi-model forecast +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.7.table b/definitions/grib2/tables/6/4.7.table new file mode 100644 index 000000000..dadf59b46 --- /dev/null +++ b/definitions/grib2/tables/6/4.7.table @@ -0,0 +1,73 @@ +# CODE TABLE 4.7, Derived forecast + +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members (see Note) +6 6 Unweighted mean of the cluster members +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.8.table b/definitions/grib2/tables/6/4.8.table new file mode 100644 index 000000000..9d3a0e8a7 --- /dev/null +++ b/definitions/grib2/tables/6/4.8.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.8, Clustering Method + +0 0 Anomaly correlation +1 1 Root mean square +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.9.table b/definitions/grib2/tables/6/4.9.table new file mode 100644 index 000000000..895f30171 --- /dev/null +++ b/definitions/grib2/tables/6/4.9.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.9, Probability Type + +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/4.91.table b/definitions/grib2/tables/6/4.91.table new file mode 100644 index 000000000..a960f56b0 --- /dev/null +++ b/definitions/grib2/tables/6/4.91.table @@ -0,0 +1,78 @@ +# CODE TABLE 4.91 Category Type + +0 0 Below lower limit +1 1 Above upper limit +2 2 Between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Above lower limit +4 4 Below upper limit +5 5 Lower or equal lower limit +6 6 Greater or equal upper limit +7 7 Between lower and upper limits. The range includes lower limit and upper limit +8 8 Greater or equal lower limit +9 9 Lower or equal upper limit +10 10 Between lower and upper limits. The range includes the upper limit but not the lower limit +11 11 Equal to first limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/6/5.0.table b/definitions/grib2/tables/6/5.0.table new file mode 100644 index 000000000..62cc4a472 --- /dev/null +++ b/definitions/grib2/tables/6/5.0.table @@ -0,0 +1,19 @@ +# CODE TABLE 5.0, Data Representation Template Number +0 0 Grid point data - simple packing +1 1 Matrix value - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - ieee packing +6 6 Grid point data - simple packing with pre-processing +40 40 JPEG2000 Packing +41 41 PNG pacling +50 50 Spectral data -simple packing +51 51 Spherical harmonics data - complex packing +61 61 Grid point data - simple packing with logarithm pre-processing +# 192-254 Reserved for local use +255 255 Missing +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling +50000 50000 Sperical harmonics ieee packing +50001 50001 Second order packing +50002 50002 Second order packing diff --git a/definitions/grib2/tables/6/5.1.table b/definitions/grib2/tables/6/5.1.table new file mode 100644 index 000000000..d7ca4bedc --- /dev/null +++ b/definitions/grib2/tables/6/5.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.1, Type of original field values +0 0 Floating point +1 1 Integer +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/5.2.table b/definitions/grib2/tables/6/5.2.table new file mode 100644 index 000000000..a048d712e --- /dev/null +++ b/definitions/grib2/tables/6/5.2.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.2, Matrix coordinate value function definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +11 11 Geometric coordinates +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/5.3.table b/definitions/grib2/tables/6/5.3.table new file mode 100644 index 000000000..4a673ef85 --- /dev/null +++ b/definitions/grib2/tables/6/5.3.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.3, Matrix coordinate parameter +1 1 Direction Degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/5.4.table b/definitions/grib2/tables/6/5.4.table new file mode 100644 index 000000000..1fd37966f --- /dev/null +++ b/definitions/grib2/tables/6/5.4.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.4, Group Splitting Method +0 0 Row by row splitting +1 1 General group splitting +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/5.40.table b/definitions/grib2/tables/6/5.40.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/6/5.40.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/6/5.40000.table b/definitions/grib2/tables/6/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/6/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/6/5.5.table b/definitions/grib2/tables/6/5.5.table new file mode 100644 index 000000000..d1caac9e8 --- /dev/null +++ b/definitions/grib2/tables/6/5.5.table @@ -0,0 +1,7 @@ +# CODE TABLE 5.5, Missing Value Management for Complex Packing + +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/5.50002.table b/definitions/grib2/tables/6/5.50002.table new file mode 100644 index 000000000..10c243cb0 --- /dev/null +++ b/definitions/grib2/tables/6/5.50002.table @@ -0,0 +1,19 @@ +# second order packing modes table + +1 0 no boustrophedonic +1 1 boustrophedonic +2 0 Reserved +2 1 Reserved +3 0 Reserved +3 1 Reserved +4 0 Reserved +4 1 Reserved +5 0 Reserved +5 1 Reserved +6 0 Reserved +6 1 Reserved +7 0 Reserved +7 1 Reserved +8 0 Reserved +8 1 Reserved + diff --git a/definitions/grib2/tables/6/5.6.table b/definitions/grib2/tables/6/5.6.table new file mode 100644 index 000000000..4aec3314e --- /dev/null +++ b/definitions/grib2/tables/6/5.6.table @@ -0,0 +1,68 @@ +# CODE TABLE 5.6, Order of Spatial Differencing + +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/6/5.7.table b/definitions/grib2/tables/6/5.7.table new file mode 100644 index 000000000..35b23b94d --- /dev/null +++ b/definitions/grib2/tables/6/5.7.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.7, Precision of floating-point numbers + +1 1 IEEE 32-bit (I=4 in Section 7) +2 2 IEEE 64-bit (I=8 in Section 7) +3 3 IEEE 128-bit (I=16 in Section 7) +255 255 Missing diff --git a/definitions/grib2/tables/6/5.8.table b/definitions/grib2/tables/6/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/6/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/6/5.9.table b/definitions/grib2/tables/6/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/6/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/6/6.0.table b/definitions/grib2/tables/6/6.0.table new file mode 100644 index 000000000..6a8c74b48 --- /dev/null +++ b/definitions/grib2/tables/6/6.0.table @@ -0,0 +1,7 @@ +# CODE TABLE 6.0, Bit Map Indicator + +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 2 253 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same "GRIB" message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/6/stepType.table b/definitions/grib2/tables/6/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/6/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/7/0.0.table b/definitions/grib2/tables/7/0.0.table new file mode 100644 index 000000000..fd2056350 --- /dev/null +++ b/definitions/grib2/tables/7/0.0.table @@ -0,0 +1,10 @@ +#Code Table 0.0: Discipline of processed data in the GRIB message, number of GRIB Master Table +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/1.0.table b/definitions/grib2/tables/7/1.0.table new file mode 100644 index 000000000..7ccb0e2a9 --- /dev/null +++ b/definitions/grib2/tables/7/1.0.table @@ -0,0 +1,12 @@ +# Code Table 1.0: GRIB Master Tables Version Number +0 0 Experimental +1 1 Version implemented on 7 November 2001 +2 2 Version implemented on 4 November 2003 +3 3 Version implemented on 2 November 2005 +4 4 Version implemented on 7 November 2007 +5 5 Version implemented on 4 November 2009 +6 6 Version implemented on 15 September 2010 +7 7 Version implemented on 4 May 2011 +8 8 Pre-operational to be implemented by next amendment +# 9-254 Future versions +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/7/1.1.table b/definitions/grib2/tables/7/1.1.table new file mode 100644 index 000000000..6c5a60361 --- /dev/null +++ b/definitions/grib2/tables/7/1.1.table @@ -0,0 +1,5 @@ +# Code Table 1.1 GRIB Local Tables Version Number +0 0 Local tables not used +# . Only table entries and templates from the current Master table are valid. +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/7/1.2.table b/definitions/grib2/tables/7/1.2.table new file mode 100644 index 000000000..eb8755209 --- /dev/null +++ b/definitions/grib2/tables/7/1.2.table @@ -0,0 +1,8 @@ +# CODE TABLE 1.2, Significance of Reference Time +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +#4-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/1.3.table b/definitions/grib2/tables/7/1.3.table new file mode 100644 index 000000000..14667f9b8 --- /dev/null +++ b/definitions/grib2/tables/7/1.3.table @@ -0,0 +1,10 @@ +# CODE TABLE 1.3, Production status of data +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 THORPEX Interactive Grand Global Ensemble (TIGGE) +5 5 THORPEX Interactive Grand Global Ensemble (TIGGE) test +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/1.4.table b/definitions/grib2/tables/7/1.4.table new file mode 100644 index 000000000..997bfda9d --- /dev/null +++ b/definitions/grib2/tables/7/1.4.table @@ -0,0 +1,13 @@ +# CODE TABLE 1.4, Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event probability +# 9-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/7/1.4.table~ b/definitions/grib2/tables/7/1.4.table~ new file mode 100644 index 000000000..ac21f5c4c --- /dev/null +++ b/definitions/grib2/tables/7/1.4.table~ @@ -0,0 +1,13 @@ +# CODE TABLE 1.4, Type of data +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event Probability +# 8-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/3.0.table b/definitions/grib2/tables/7/3.0.table new file mode 100644 index 000000000..b01b00c64 --- /dev/null +++ b/definitions/grib2/tables/7/3.0.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.0, Source of Grid Definition +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition (Defined by originating centre) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/7/3.1.table b/definitions/grib2/tables/7/3.1.table new file mode 100644 index 000000000..17633ce1e --- /dev/null +++ b/definitions/grib2/tables/7/3.1.table @@ -0,0 +1,43 @@ +# CODE TABLE 3.1, Grid Definition Template Number +0 0 Latitude/longitude. Also called equidistant cylindrical, or Plate Carree +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +# 4-9 Reserved +10 10 Mercator +# 11-19 Reserved +20 20 Polar stereographic projection (Can be south or north) +# 21-29 Reserved +30 30 Lambert conformal (Can be secant or tangent, conical or bipolar) +31 31 Albers equal area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective or orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +# 101-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid, with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovm�ller diagram grid, with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/7/3.10.table b/definitions/grib2/tables/7/3.10.table new file mode 100644 index 000000000..e4a446b9a --- /dev/null +++ b/definitions/grib2/tables/7/3.10.table @@ -0,0 +1,8 @@ +# FLAG TABLE 3.10, Scanning mode for one diamond +1 0 Points scan in +i direction, i.e. from pole to Equator +1 1 Points scan in -i direction, i.e. from Equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction are consecutive +# 4-8 Reserved diff --git a/definitions/grib2/tables/7/3.11.table b/definitions/grib2/tables/7/3.11.table new file mode 100644 index 000000000..b82a94f28 --- /dev/null +++ b/definitions/grib2/tables/7/3.11.table @@ -0,0 +1,7 @@ +# CODE TABLE 3.11, Interpretation of list of numbers defining number of points +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +3 3 Numbers define the actual latitudes for each row in the grid. The list of numbers are integer values of the valid latitudes in microdegrees (scaled by 10-6) or in unit equal to the ratio of the basic angle and the subdivisions number for each row, in the same order as specified in the scanning mode flag (bit no. 2) +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/7/3.15.table b/definitions/grib2/tables/7/3.15.table new file mode 100644 index 000000000..eb83c1b42 --- /dev/null +++ b/definitions/grib2/tables/7/3.15.table @@ -0,0 +1,25 @@ +# CODE TABLE 3.15, Physical meaning of vertical coordinate +# 0-19 Reserved +20 20 Temperature (K) +# 21-99 Reserved +100 100 Pressure (Pa) +101 101 Pressure deviation from mean sea level (Pa) +102 102 Altitude above mean sea level (m) +103 103 Height above ground (see Note 1) (m) +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface (m) +107 pt Potential temperature (theta) (K) +108 108 Pressure deviation from ground to level (Pa) +109 pv Potential vorticity (K m-2 kg-1 s-1) +110 110 Geometrical height (m) +111 111 Eta coordinate (see Note 2) +112 112 Geopotential height (gpm) +# 113-159 Reserved +160 160 Depth below sea level (m) +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing +# Notes: +# (1) Negative values associated to this coordinate will indicate depth below ground surface. If values are all below surface, use of entry 106 is recommended, with positive coordinate values instead. +# (2) The Eta vertical coordinate system involves normalizing the pressure at some point on a specific level by the mean sea level pressure at that point. diff --git a/definitions/grib2/tables/7/3.2.table b/definitions/grib2/tables/7/3.2.table new file mode 100644 index 000000000..522e8731c --- /dev/null +++ b/definitions/grib2/tables/7/3.2.table @@ -0,0 +1,13 @@ +# CODE TABLE 3.2, Shape of the Earth +0 0 Earth assumed spherical with radius = 6 367 470.0 m +1 1 Earth assumed spherical with radius specified (in m) by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6 378 160.0 m, minor axis = 6 356 775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified (in km) by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6 378 137.0 m, minor axis = 6 356 752.314 m, f = 1/298.257222101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6 371 229.0 m +7 7 Earth assumed oblate spheroid with major or minor axes specified (in m) by data producer +8 8 Earth model assumed spherical with radius of 6 371 200 m, but the horizontal datum of the resulting latitude/longitude field is the WGS84 reference frame +# 9-191 Reserved +# 192- 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/3.20.table b/definitions/grib2/tables/7/3.20.table new file mode 100644 index 000000000..cfa35ae38 --- /dev/null +++ b/definitions/grib2/tables/7/3.20.table @@ -0,0 +1,6 @@ +# CODE TABLE 3.20, Type of horizontal line +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/3.21.table b/definitions/grib2/tables/7/3.21.table new file mode 100644 index 000000000..460303537 --- /dev/null +++ b/definitions/grib2/tables/7/3.21.table @@ -0,0 +1,8 @@ +# CODE TABLE 3.21, Vertical dimension coordinate values definition +0 0 Explicit coordinate values set +1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 +# 2-10 Reserved +11 11 Geometric coordinates f(1) = C1, f(n) = C2 * f(n-1) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/3.3.table b/definitions/grib2/tables/7/3.3.table new file mode 100644 index 000000000..e662b20f2 --- /dev/null +++ b/definitions/grib2/tables/7/3.3.table @@ -0,0 +1,9 @@ +# FLAG TABLE 3.3, Resolution and Component Flags +# 1-2 Reserved +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates, respectively +# 6-8 Reserved - set to zero diff --git a/definitions/grib2/tables/7/3.4.table b/definitions/grib2/tables/7/3.4.table new file mode 100644 index 000000000..72e3343b7 --- /dev/null +++ b/definitions/grib2/tables/7/3.4.table @@ -0,0 +1,10 @@ +# FLAG TABLE 3.4, Scanning Mode +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction +# 5-8 Reserved diff --git a/definitions/grib2/tables/7/3.5.table b/definitions/grib2/tables/7/3.5.table new file mode 100644 index 000000000..72adfd747 --- /dev/null +++ b/definitions/grib2/tables/7/3.5.table @@ -0,0 +1,5 @@ +# FLAG TABLE 3.5, Projection Centre +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bipolar and symmetric diff --git a/definitions/grib2/tables/7/3.6.table b/definitions/grib2/tables/7/3.6.table new file mode 100644 index 000000000..41dd97e4a --- /dev/null +++ b/definitions/grib2/tables/7/3.6.table @@ -0,0 +1,2 @@ +# CODE TABLE 3.6, Spectral data representation type +1 1 The Associated Legendre Functions of the first kind are defined by: diff --git a/definitions/grib2/tables/7/3.7.table b/definitions/grib2/tables/7/3.7.table new file mode 100644 index 000000000..3aaf30bf9 --- /dev/null +++ b/definitions/grib2/tables/7/3.7.table @@ -0,0 +1,11 @@ +# Code Table 3.7: Spectral data representation mode +0 0 Reserved +1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) +# 2-254 Reserved +255 255 Missing +# Note: +# +#(1) Values of N(m) for common truncations cases: +# Triangular M = J = K, N(m) = J +# Rhomboidal K = J + M, N(m) = J+m +# Trapezoidal K = J, K > M, N(m) = J diff --git a/definitions/grib2/tables/7/3.8.table b/definitions/grib2/tables/7/3.8.table new file mode 100644 index 000000000..0d9b7d001 --- /dev/null +++ b/definitions/grib2/tables/7/3.8.table @@ -0,0 +1,8 @@ +# Code table 3.8: Grid point position +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +#3-191 Reserved +#192-254 Reserved for local use +255 255 Missing + diff --git a/definitions/grib2/tables/7/3.9.table b/definitions/grib2/tables/7/3.9.table new file mode 100644 index 000000000..5edac03a5 --- /dev/null +++ b/definitions/grib2/tables/7/3.9.table @@ -0,0 +1,4 @@ +# FLAG TABLE 3.9, Numbering order of diamonds as seen from the corresponding pole +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e. counter-clockwise) orientation +# 2-8 Reserved diff --git a/definitions/grib2/tables/7/4.0.table b/definitions/grib2/tables/7/4.0.table new file mode 100644 index 000000000..e5ca51336 --- /dev/null +++ b/definitions/grib2/tables/7/4.0.table @@ -0,0 +1,54 @@ +# CODE TABLE 4.0, Product Definition Template Number +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +15 15 Average, accumulation, extreme values, or other statistically-processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time +#16-19 Reserved +20 20 Radar product +# 21-29 Reserved +30 30 Satellite product (deprecated) +31 31 Satellite product +32 32 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data +#33-39 Reserved +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for aerosol +46 46 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non continuous time interval for aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of atmospheric aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +#52-90 Reserved +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +#92-253 Reserved +254 254 CCITT IA5 character string +# 255-999 Reserved +1000 1000 Cross-section of analysis and forecast at a point in time +1001 1001 Cross-section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed over latitude or longitude +#1003-1099 Reserved +1100 1100 Hovmoller-type grid with no averaging or other statistical processing +1101 1101 Hovmoller-type grid with averaging or other statistical processing +50001 50001 Forecasting Systems with Variable Resolution in a point in time +50011 50011 Forecasting Systems with Variable Resolution in a continous or non countinous time interval +#1102-32767 Reserved +#32768-65534 Reserved for local use +40033 40033 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data +40034 40034 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data +40052 40052 Partitioned parameters at a horizontal level or horizontal layer at a point in time +65535 65535 Missing diff --git a/definitions/grib2/tables/7/4.1.0.table b/definitions/grib2/tables/7/4.1.0.table new file mode 100644 index 000000000..65d694699 --- /dev/null +++ b/definitions/grib2/tables/7/4.1.0.table @@ -0,0 +1,28 @@ +#Discipline 0: Meteorological products +#Category Description +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave radiation +5 5 Long-wave radiation +6 6 Cloud +7 7 Thermodynamic stability indices +8 8 Kinematic stability indices +9 9 Temperature probabilities +10 10 Moisture probabilities +11 11 Momentum probabilities +12 12 Mass probabilities +13 13 Aerosols +14 14 Trace gases (e.g. ozone, CO2) +15 15 Radar +16 16 Forecast radar imagery +17 17 Electrodynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical constituents +# 21-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.1.1.table b/definitions/grib2/tables/7/4.1.1.table new file mode 100644 index 000000000..ebb7d9ea0 --- /dev/null +++ b/definitions/grib2/tables/7/4.1.1.table @@ -0,0 +1,9 @@ +#Discipline 1: Hydrological products +#Category Description +0 0 Hydrology basic products +1 1 Hydrology probabilities +#2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/7/4.1.10.table b/definitions/grib2/tables/7/4.1.10.table new file mode 100644 index 000000000..9c1bfc31b --- /dev/null +++ b/definitions/grib2/tables/7/4.1.10.table @@ -0,0 +1,11 @@ +#Discipline 10: Oceanographic Products +#Category Description +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface properties +4 4 Sub-surface properties +# 5-190 Reserved +191 191 Miscellaneous +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.1.192.table b/definitions/grib2/tables/7/4.1.192.table new file mode 100644 index 000000000..c428acab0 --- /dev/null +++ b/definitions/grib2/tables/7/4.1.192.table @@ -0,0 +1,4 @@ +#Discipline 192: ECMWF local parameters +255 255 Missing + + diff --git a/definitions/grib2/tables/7/4.1.2.table b/definitions/grib2/tables/7/4.1.2.table new file mode 100644 index 000000000..34e0423bf --- /dev/null +++ b/definitions/grib2/tables/7/4.1.2.table @@ -0,0 +1,9 @@ +#Discipline 2: Land Surface Products +0 0 Vegetation/biomass +1 1 Agri-/aquacultural special products +2 2 Transportation-related products +3 3 Soil products +4 4 Fire weather products +# 5-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.1.3.table b/definitions/grib2/tables/7/4.1.3.table new file mode 100644 index 000000000..f7578e163 --- /dev/null +++ b/definitions/grib2/tables/7/4.1.3.table @@ -0,0 +1,9 @@ +#Discipline 3: Space Products +#Category Description +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +#192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/7/4.1.table b/definitions/grib2/tables/7/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/7/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/7/4.10.table b/definitions/grib2/tables/7/4.10.table new file mode 100644 index 000000000..e25f8cafd --- /dev/null +++ b/definitions/grib2/tables/7/4.10.table @@ -0,0 +1,14 @@ +# CODE TABLE 4.10, Type of statistical processing +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (temporal variance) +8 8 Difference (value at the start of time range minus value at the end) +9 ratio Ratio +# 10-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/7/4.11.table b/definitions/grib2/tables/7/4.11.table new file mode 100644 index 000000000..30b90be0d --- /dev/null +++ b/definitions/grib2/tables/7/4.11.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.11, Type of time intervals +0 0 Reserved +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.12.table b/definitions/grib2/tables/7/4.12.table new file mode 100644 index 000000000..3c9d086ca --- /dev/null +++ b/definitions/grib2/tables/7/4.12.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.12, Operating Mode +0 0 Maintenance mode +1 1 Clear air +2 2 Precipitation +# 3-191 Reserved +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.13.table b/definitions/grib2/tables/7/4.13.table new file mode 100644 index 000000000..ddd7537d0 --- /dev/null +++ b/definitions/grib2/tables/7/4.13.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.13, Quality Control Indicator + +0 0 No quality control applied +1 1 Quality control applied +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.14.table b/definitions/grib2/tables/7/4.14.table new file mode 100644 index 000000000..69984d720 --- /dev/null +++ b/definitions/grib2/tables/7/4.14.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.14, Clutter Filter Indicator + +0 0 No clutter filter used +1 1 Clutter filter used +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.15.table b/definitions/grib2/tables/7/4.15.table new file mode 100644 index 000000000..504128024 --- /dev/null +++ b/definitions/grib2/tables/7/4.15.table @@ -0,0 +1,10 @@ +0 0 Data is calculated directly from the source grid with no interpolation (see note 1) +1 1 Bilinear interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +2 2 Bicubic interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +3 3 Using the value from the source grid grid-point which is nearest to the nominal grid-point +4 4 Budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point (see note 2) +5 5 Spectral interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +6 6 Neighbor-budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point (see note 3) +#7-191 Reserved +#192-254 Reserved for Local Use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.151.table b/definitions/grib2/tables/7/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/7/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.192.table b/definitions/grib2/tables/7/4.192.table new file mode 100644 index 000000000..e1fd91594 --- /dev/null +++ b/definitions/grib2/tables/7/4.192.table @@ -0,0 +1,4 @@ +1 1 first +2 2 second +3 3 third +4 4 fourth diff --git a/definitions/grib2/tables/7/4.2.0.0.table b/definitions/grib2/tables/7/4.2.0.0.table new file mode 100644 index 000000000..718a73865 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.0.table @@ -0,0 +1,25 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew point temperature (K) +7 7 Dew point depression (or deficit) (K) +8 8 Lapse rate (K m-1) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin temperature (K) +18 18 Snow temperature (top of snow) - validation (K) +19 19 Turbulent transfer coefficient for heat - validation (Numeric) +20 20 Turbulent diffusion coefficient for heat - validation (m2 s-1) +#21-191 21-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.1.table b/definitions/grib2/tables/7/4.2.0.1.table new file mode 100644 index 000000000..3dd373fc3 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.1.table @@ -0,0 +1,91 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Specific humidity (kg kg-1) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg kg-1) +3 3 Precipitable water (kg m-2) +4 4 Vapour pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age day (-) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type (code table (4.201)) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg kg-1) +22 22 Cloud mixing ratio (kg kg-1) +23 23 Ice water mixing ratio (kg kg-1) +24 24 Rain mixing ratio (kg kg-1) +25 25 Snow mixing ratio (kg kg-1) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category (code table (4.202)) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg kg-1) +33 33 Categorical rain (Code table 4.222) +34 34 Categorical freezing rain (Code table 4.222) +35 35 Categorical ice pellets (Code table 4.222) +36 36 Categorical snow (Code table 4.222) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +47 47 Large scale water precipitation (non-convective) (kg m-2) +48 48 Convective water precipitation (kg m-2) +49 49 Total water precipitation (kg m-2) +50 50 Total snow precipitation (kg m-2) +51 51 Total column water (Vertically integrated total water (vapour + cloud water/ice)) (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale snowfall rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m s-1) +58 58 Convective snowfall rate (m s-1) +59 59 Large scale snowfall rate (m s-1) +60 60 Snow depth water equivalent (kg m-2) +61 61 Snow density (kg m-3) +62 62 Snow evaporation (kg m-2) +63 63 Reserved (-) +64 64 Total column integrated water vapour (kg m-2) +65 65 Rain precipitation rate (kg m-2 s-1) +66 66 Snow precipitation rate (kg m-2 s-1) +67 67 Freezing rain precipitation rate (kg m-2 s-1) +68 68 Ice pellets precipitation rate (kg m-2 s-1) +69 69 Total column integrated cloud water (kg m-2) +70 70 Total column integrated cloud ice (kg m-2) +71 71 Hail mixing ratio - validation (kg kg-1) +72 72 Total column integrated hail (kg m-2) +73 73 Hail precipitation rate - validation (kg m-2 s-1) +74 74 Total column integrated graupel (kg m-2) +75 75 Graupel (snow pellets) precipitation rate - validation (kg m-2 s-1) +76 76 Convective rain rate - validation (kg m-2 s-1) +77 77 Large scale rain rate - validation (kg m-2 s-1) +78 78 Total column integrated water (all components including precipitation) (kg m-2) +79 79 Evaporation rate - validation (kg m-2 s-1) +80 80 Total Condensate - validation (kg kg-1) +81 81 Total Column-Integrated Condensate - validation (kg m-2) +82 82 Cloud Ice Mixing-Ratio - validation (kg kg-1) +83 83 Specific cloud liquid water content (kg kg-1) +84 84 Specific cloud ice water content (kg kg-1) +85 85 Specific rain water content (kg kg-1) +86 86 Specific snow water content (kg kg-1) +#87-191 87-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.13.table b/definitions/grib2/tables/7/4.2.0.13.table new file mode 100644 index 000000000..86ce62092 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.13.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Aerosol type (code table (4.205)) +#1-191 1-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.14.table b/definitions/grib2/tables/7/4.2.0.14.table new file mode 100644 index 000000000..97281cee4 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.14.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Total ozone (Dobson) +1 1 Ozone mixing ratio (kg kg-1) +2 2 Total column integrated ozone (Dobson) +#3-191 3-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.15.table b/definitions/grib2/tables/7/4.2.0.15.table new file mode 100644 index 000000000..2a0782d0b --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.15.table @@ -0,0 +1,19 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Base spectrum width (m s-1) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m s-1) +3 3 Vertically-integrated liquid (kg m-1) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +9 9 Reflectivity of cloud droplets - validation (dB) +10 10 Reflectivity of cloud ice - validation (dB) +11 11 Reflectivity of snow - validation (dB) +12 12 Reflectivity of rain - validation (dB) +13 13 Reflectivity of graupel - validation (dB) +14 14 Reflectivity of hail - validation (dB) +#15-191 15-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.16.table b/definitions/grib2/tables/7/4.2.0.16.table new file mode 100644 index 000000000..2a4f36904 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.16.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Equivalent radar reflectivity factor for rain (mm6 m-3) +1 1 Equivalent radar reflectivity factor for snow (mm6 m-3) +2 2 Equivalent radar reflectivity factor for parameterized convection (mm6 m-3) +3 3 Echo top (m) +4 4 Reflectivity (dB) +5 5 Composite reflectivity (dB) +#6-191 6-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.18.table b/definitions/grib2/tables/7/4.2.0.18.table new file mode 100644 index 000000000..a4794ec77 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.18.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +9 9 Reserved +10 10 Air concentration (Bq m-3) +11 11 Wet deposition (Bq m-2) +12 12 Dry deposition (Bq m-2) +13 13 Total deposition (wet + dry) (Bq m-2) +#14-191 9-191 Reserved +#192-254 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.2.0.19.table b/definitions/grib2/tables/7/4.2.0.19.table new file mode 100644 index 000000000..6cb935f70 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.19.table @@ -0,0 +1,31 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 mixed layer depth (m) +4 4 Volcanic ash (code table (4.206)) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing (code table (4.207)) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence (code table (4.208)) +11 11 Turbulent kinetic energy (J kg-1) +12 12 Planetary boundary layer regime (code table (4.209)) +13 13 Contrail intensity (code table (4.210)) +14 14 Contrail engine type (code table (4.211)) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +19 19 Snow albedo (%) +20 20 Icing (%) +21 21 In-cloud turbulence (%) +22 22 Clear air turbulence (CAT) (%) +23 23 Supercooled large droplet probability (see Note 4) (%) +24 24 Convective turbulent kinetic energy - validation (J kg-1) +25 25 Weather Interpretation ww (WMO) - validation +26 26 Convective outlook (code table (4.224)) +#27-191 26-191 Reserved +#192-254 192-254 Reserved for local use (-) +255 255 Missing diff --git a/definitions/grib2/tables/7/4.2.0.190.table b/definitions/grib2/tables/7/4.2.0.190.table new file mode 100644 index 000000000..7e68ae893 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.190.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Arbitrary text string (CCITTIA5) +#1-191 1-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.191.table b/definitions/grib2/tables/7/4.2.0.191.table new file mode 100644 index 000000000..b91276272 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.191.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Geographical latitude - validation (deg N) +2 2 Geographical longitude - validation (deg E) +#3-191 3-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.2.table b/definitions/grib2/tables/7/4.2.0.2.table new file mode 100644 index 000000000..fdcec699e --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.2.table @@ -0,0 +1,37 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Wind direction (from which blowing) (deg true) +1 1 Wind speed (m s-1) +2 2 u-component of wind (m s-1) +3 3 v-component of wind (m s-1) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (s-1) +8 8 Vertical velocity (pressure) (Pa s-1) +9 9 Vertical velocity (geometric) (m s-1) +10 10 Absolute vorticity (s-1) +11 11 Absolute divergence (s-1) +12 12 Relative vorticity (s-1) +13 13 Relative divergence (s-1) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (s-1) +16 16 Vertical v-component shear (s-1) +17 17 Momentum flux, u component (N m-2) +18 18 Momentum flux, v component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m s-1) +22 22 Wind speed (gust) (m s-1) +23 23 u-component of wind (gust) (m s-1) +24 24 v-component of wind (gust) (m s-1) +25 25 Vertical speed shear (s-1) +26 26 Horizontal momentum flux (N m-2) +27 27 U-component storm motion (m s-1) +28 28 V-component storm motion (m s-1) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m s-1) +31 31 Turbulent diffusion coefficient for momentum (m2 s-1) +32 32 eta coordinate vertical velocity (s-1) +#33-191 33-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.20.table b/definitions/grib2/tables/7/4.2.0.20.table new file mode 100644 index 000000000..00886abc8 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.20.table @@ -0,0 +1,26 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Mass density (concentration) (kg m-3) +1 1 Column-integrated mass density (see Note 1) (kg m-2) +2 2 Mass mixing ratio (mass fraction in air) (kg kg-1) +3 3 Atmosphere emission mass flux (kg m-2 s-1) +4 4 Atmosphere net production mass flux (kg m-2 s-1) +5 5 Atmosphere net production and emission mass flux (kg m-2 s-1) +6 6 Surface dry deposition mass flux (kg m-2 s-1) +7 7 Surface wet deposition mass flux (kg m-2 s-1) +8 8 Atmosphere re-emission mass flux (kg m-2 s-1) +#9-49 9-49 Reserved (-) +50 50 Amount in atmosphere (mol) +51 51 Concentration in air (mol m-3) +52 52 Volume mixing ratio (fraction in air) (mol mol-1) +53 53 Chemical gross production rate of concentration (mol m-3 s-1) +54 54 Chemical gross destruction rate of concentration (mol m-3 s-1) +55 55 Surface flux (mol m-2 s-1) +56 56 Changes of amount in atmosphere (see Note 1) (mol s-1) +57 57 Total yearly average burden of the atmosphere (mol) +58 58 Total yearly averaged atmospheric loss (see Note 1) (mol s-1) +#59-99 59-99 Reserved (-) +100 100 Surface area density (aerosol) (m-1) +101 101 Atmosphere optical thickness (m) +#102-191 102-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.20.table~ b/definitions/grib2/tables/7/4.2.0.20.table~ new file mode 100644 index 000000000..5a6ce1533 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.20.table~ @@ -0,0 +1,13 @@ +0 0 Mass density (concentration) (kg m-3) +1 1 Column-integrated (integrated mass density) (kg m-2) +2 2 Volume mixing ratio (mole fraction in air) mole.mole-1 +3 3 Mass mixing ratio (mass fraction in air) kg.kg-1 +4 4 Surface dry deposition mass flux kg.m-2.s-1 +5 5 Surface wet deposition mass flux kg.m-2.s-1 +6 6 Atmosphere emission mass flux kg.m-2.s-1 +7 7 Chemical gross production rate of mole concentration mole.m-3.s-1 +8 8 Chemical gross destruction rate of mole concentration mole.m-3.s-1 +9 9 Surface dry deposition mass flux into stomata kg.m-2.s-1 +#10-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.2.0.3.table b/definitions/grib2/tables/7/4.2.0.3.table new file mode 100644 index 000000000..250b508bf --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.3.table @@ -0,0 +1,30 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Pressure (Pa) +1 1 Pressure reduced to MSL (Pa) +2 2 Pressure tendency (Pa s-1) +3 3 ICAO Standard Atmosphere Reference Height (m) +4 4 Geopotential (m2 s-2) +5 5 Geopotential height (gpm) +6 6 Geometric height (m) +7 7 Standard deviation of height (m) +8 8 Pressure anomaly (Pa) +9 9 Geopotential height anomaly (gpm) +10 10 Density (kg m-3) +11 11 Altimeter setting (Pa) +12 12 Thickness (m) +13 13 Pressure altitude (m) +14 14 Density altitude (m) +15 15 5-wave geopotential height (gpm) +16 16 Zonal flux of gravity wave stress (N m-2) +17 17 Meridional flux of gravity wave stress (N m-2) +18 18 Planetary boundary layer height (m) +19 19 5-wave geopotential height anomaly (gpm) +20 20 Standard deviation of sub-grid scale orography (m) +21 21 Angle of sub-gridscale orography (rad) +22 22 Slope of sub-gridscale orography (Numeric) +23 23 Gravity wave dissipation (Wm-2) +24 24 Anisotropy of sub-gridscale orography (Numeric) +25 25 Natural logarithm of pressure in Pa (Numeric) +#26-191 26-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.4.table b/definitions/grib2/tables/7/4.2.0.4.table new file mode 100644 index 000000000..f8c17fc20 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.4.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +8 8 Upward short-wave radiation flux (W m-2) +9 9 Net short wave radiation flux (W m-2) +10 10 Photosynthetically active radiation (W m-2) +11 11 Net short-wave radiation flux, clear sky (W m-2) +12 12 Downward UV radiation (W m-2) +#13-49 13-49 Reserved (-) +50 50 UV index (under clear sky) (Numeric) +51 51 UV index (Numeric) +#52-191 52-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.5.table b/definitions/grib2/tables/7/4.2.0.5.table new file mode 100644 index 000000000..55249b815 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.5.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net long wave radiation flux (surface) (W m-2) +1 1 Net long wave radiation flux (top of atmosphere) (W m-2) +2 2 Long wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long wave radiation flux (W m-2) +6 6 Net long-wave radiation flux, clear sky (W m-2) +#7-191 7-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.6.table b/definitions/grib2/tables/7/4.2.0.6.table new file mode 100644 index 000000000..40562fd69 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.6.table @@ -0,0 +1,39 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Cloud Ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type (code table (4.203)) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage (code table (4.204)) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J kg-1) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg kg-1) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg kg-1) +24 24 Sunshine (Numeric) +25 25 Horizontal extent of cumulonimbus (CB) (%) +26 26 Height of convective cloud base - validation (m) +#26-31 26-31 Reserved (-) +27 27 Height of convective cloud top - validation (m) +28 28 Number concentration of cloud droplets - validation (kg-1) +29 29 Number concentration of cloud ice - validation (kg-1) +30 30 Number density of cloud droplets - validation (m-3) +31 31 Number density of cloud ice - validation (m-3) +32 32 Fraction of cloud cover (Numeric) +33 33 Sunshine duration (s) +#34-191 34-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.0.7.table b/definitions/grib2/tables/7/4.2.0.7.table new file mode 100644 index 000000000..2a00c4c29 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.0.7.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J kg-1) +7 7 Convective inhibition (J kg-1) +8 8 Storm relative helicity (J kg-1) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +13 13 Showalter index - validation (K) +14 14 Reserved +15 15 Updraft helicity (m2 s-2) +#16-191 14-191 Reserved +#192-254 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.2.1.0.table b/definitions/grib2/tables/7/4.2.1.0.table new file mode 100644 index 000000000..5a497ed3e --- /dev/null +++ b/definitions/grib2/tables/7/4.2.1.0.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely sensed snow cover ((code table 4.215)) +3 3 Elevation of snow covered terrain ((code table 4.216)) +4 4 Snow water equivalent percent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +#7-191 7-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.1.1.table b/definitions/grib2/tables/7/4.2.1.1.table new file mode 100644 index 000000000..e0d6c647a --- /dev/null +++ b/definitions/grib2/tables/7/4.2.1.1.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation). (kg m-2) +1 1 Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +#3-191 3-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.10.0.table b/definitions/grib2/tables/7/4.2.10.0.table new file mode 100644 index 000000000..bf91d9724 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.10.0.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (Degree true) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (Degree true) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (Degree true) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (Degree true) +13 13 Secondary wave mean period (s) +14 14 Direction of combined wind waves and swell (Degree true) +15 15 Mean period of combined wind waves and swell (s) +#16-191 16-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.10.1.table b/definitions/grib2/tables/7/4.2.10.1.table new file mode 100644 index 000000000..5f34c6241 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.10.1.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Current direction (Degree true) +1 1 Current speed (m s-1) +2 2 u-component of current (m s-1) +3 3 v-component of current (m s-1) +#4-191 4-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.10.191.table b/definitions/grib2/tables/7/4.2.10.191.table new file mode 100644 index 000000000..72cf1ce97 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.10.191.table @@ -0,0 +1,6 @@ +# Product discipline 10 - Oceanographic products, parameter category 191: miscellaneous +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Meridional overturning stream function (m3 s-1) +#2-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.2.10.2.table b/definitions/grib2/tables/7/4.2.10.2.table new file mode 100644 index 000000000..6b00b78b8 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.10.2.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (Degree true) +3 3 Speed of ice drift (m s-1) +4 4 u-component of ice drift (m s-1) +5 5 v-component of ice drift (m s-1) +6 6 Ice growth rate (m s-1) +7 7 Ice divergence (s-1) +8 8 Ice temperature (K) +9 9 Ice internal pressure (Pa m) +#10-191 9-191 Reserved +#192-254 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.2.10.3.table b/definitions/grib2/tables/7/4.2.10.3.table new file mode 100644 index 000000000..ccfc48467 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.10.3.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +#2-191 2-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.10.4.table b/definitions/grib2/tables/7/4.2.10.4.table new file mode 100644 index 000000000..fd2b8d565 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.10.4.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg kg-1) +4 4 Ocean vertical heat diffusivity (m2 s-1) +5 5 Ocean vertical salt diffusivity (m2 s-1) +6 6 Ocean vertical momentum diffusivity (m2 s-1) +#7-191 4-191 Reserved +#192-254 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.2.192.0.table b/definitions/grib2/tables/7/4.2.192.0.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.0.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.1.table b/definitions/grib2/tables/7/4.2.192.1.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.1.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.10.table b/definitions/grib2/tables/7/4.2.192.10.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.10.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.100.table b/definitions/grib2/tables/7/4.2.192.100.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.100.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.101.table b/definitions/grib2/tables/7/4.2.192.101.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.101.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.102.table b/definitions/grib2/tables/7/4.2.192.102.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.102.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.103.table b/definitions/grib2/tables/7/4.2.192.103.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.103.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.104.table b/definitions/grib2/tables/7/4.2.192.104.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.104.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.105.table b/definitions/grib2/tables/7/4.2.192.105.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.105.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.106.table b/definitions/grib2/tables/7/4.2.192.106.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.106.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.107.table b/definitions/grib2/tables/7/4.2.192.107.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.107.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.108.table b/definitions/grib2/tables/7/4.2.192.108.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.108.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.109.table b/definitions/grib2/tables/7/4.2.192.109.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.109.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.11.table b/definitions/grib2/tables/7/4.2.192.11.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.11.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.110.table b/definitions/grib2/tables/7/4.2.192.110.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.110.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.111.table b/definitions/grib2/tables/7/4.2.192.111.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.111.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.112.table b/definitions/grib2/tables/7/4.2.192.112.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.112.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.113.table b/definitions/grib2/tables/7/4.2.192.113.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.113.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.114.table b/definitions/grib2/tables/7/4.2.192.114.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.114.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.115.table b/definitions/grib2/tables/7/4.2.192.115.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.115.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.116.table b/definitions/grib2/tables/7/4.2.192.116.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.116.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.117.table b/definitions/grib2/tables/7/4.2.192.117.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.117.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.118.table b/definitions/grib2/tables/7/4.2.192.118.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.118.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.119.table b/definitions/grib2/tables/7/4.2.192.119.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.119.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.12.table b/definitions/grib2/tables/7/4.2.192.12.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.12.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.120.table b/definitions/grib2/tables/7/4.2.192.120.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.120.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.121.table b/definitions/grib2/tables/7/4.2.192.121.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.121.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.122.table b/definitions/grib2/tables/7/4.2.192.122.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.122.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.123.table b/definitions/grib2/tables/7/4.2.192.123.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.123.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.124.table b/definitions/grib2/tables/7/4.2.192.124.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.124.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.125.table b/definitions/grib2/tables/7/4.2.192.125.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.125.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.126.table b/definitions/grib2/tables/7/4.2.192.126.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.126.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.127.table b/definitions/grib2/tables/7/4.2.192.127.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.127.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.128.table b/definitions/grib2/tables/7/4.2.192.128.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.128.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.129.table b/definitions/grib2/tables/7/4.2.192.129.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.129.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.13.table b/definitions/grib2/tables/7/4.2.192.13.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.13.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.130.table b/definitions/grib2/tables/7/4.2.192.130.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.130.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.131.table b/definitions/grib2/tables/7/4.2.192.131.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.131.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.132.table b/definitions/grib2/tables/7/4.2.192.132.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.132.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.133.table b/definitions/grib2/tables/7/4.2.192.133.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.133.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.134.table b/definitions/grib2/tables/7/4.2.192.134.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.134.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.135.table b/definitions/grib2/tables/7/4.2.192.135.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.135.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.136.table b/definitions/grib2/tables/7/4.2.192.136.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.136.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.137.table b/definitions/grib2/tables/7/4.2.192.137.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.137.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.138.table b/definitions/grib2/tables/7/4.2.192.138.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.138.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.139.table b/definitions/grib2/tables/7/4.2.192.139.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.139.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.14.table b/definitions/grib2/tables/7/4.2.192.14.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.14.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.140.table b/definitions/grib2/tables/7/4.2.192.140.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.140.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.141.table b/definitions/grib2/tables/7/4.2.192.141.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.141.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.142.table b/definitions/grib2/tables/7/4.2.192.142.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.142.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.143.table b/definitions/grib2/tables/7/4.2.192.143.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.143.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.144.table b/definitions/grib2/tables/7/4.2.192.144.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.144.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.145.table b/definitions/grib2/tables/7/4.2.192.145.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.145.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.146.table b/definitions/grib2/tables/7/4.2.192.146.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.146.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.147.table b/definitions/grib2/tables/7/4.2.192.147.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.147.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.148.table b/definitions/grib2/tables/7/4.2.192.148.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.148.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.149.table b/definitions/grib2/tables/7/4.2.192.149.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.149.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.15.table b/definitions/grib2/tables/7/4.2.192.15.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.15.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.150.table b/definitions/grib2/tables/7/4.2.192.150.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.150.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.151.table b/definitions/grib2/tables/7/4.2.192.151.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.151.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.152.table b/definitions/grib2/tables/7/4.2.192.152.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.152.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.153.table b/definitions/grib2/tables/7/4.2.192.153.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.153.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.154.table b/definitions/grib2/tables/7/4.2.192.154.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.154.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.155.table b/definitions/grib2/tables/7/4.2.192.155.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.155.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.156.table b/definitions/grib2/tables/7/4.2.192.156.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.156.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.157.table b/definitions/grib2/tables/7/4.2.192.157.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.157.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.158.table b/definitions/grib2/tables/7/4.2.192.158.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.158.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.159.table b/definitions/grib2/tables/7/4.2.192.159.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.159.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.16.table b/definitions/grib2/tables/7/4.2.192.16.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.16.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.160.table b/definitions/grib2/tables/7/4.2.192.160.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.160.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.161.table b/definitions/grib2/tables/7/4.2.192.161.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.161.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.162.table b/definitions/grib2/tables/7/4.2.192.162.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.162.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.163.table b/definitions/grib2/tables/7/4.2.192.163.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.163.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.164.table b/definitions/grib2/tables/7/4.2.192.164.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.164.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.165.table b/definitions/grib2/tables/7/4.2.192.165.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.165.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.166.table b/definitions/grib2/tables/7/4.2.192.166.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.166.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.167.table b/definitions/grib2/tables/7/4.2.192.167.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.167.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.168.table b/definitions/grib2/tables/7/4.2.192.168.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.168.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.169.table b/definitions/grib2/tables/7/4.2.192.169.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.169.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.17.table b/definitions/grib2/tables/7/4.2.192.17.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.17.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.170.table b/definitions/grib2/tables/7/4.2.192.170.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.170.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.171.table b/definitions/grib2/tables/7/4.2.192.171.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.171.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.172.table b/definitions/grib2/tables/7/4.2.192.172.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.172.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.173.table b/definitions/grib2/tables/7/4.2.192.173.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.173.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.174.table b/definitions/grib2/tables/7/4.2.192.174.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.174.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.175.table b/definitions/grib2/tables/7/4.2.192.175.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.175.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.176.table b/definitions/grib2/tables/7/4.2.192.176.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.176.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.177.table b/definitions/grib2/tables/7/4.2.192.177.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.177.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.178.table b/definitions/grib2/tables/7/4.2.192.178.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.178.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.179.table b/definitions/grib2/tables/7/4.2.192.179.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.179.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.18.table b/definitions/grib2/tables/7/4.2.192.18.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.18.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.180.table b/definitions/grib2/tables/7/4.2.192.180.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.180.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.181.table b/definitions/grib2/tables/7/4.2.192.181.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.181.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.182.table b/definitions/grib2/tables/7/4.2.192.182.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.182.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.183.table b/definitions/grib2/tables/7/4.2.192.183.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.183.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.184.table b/definitions/grib2/tables/7/4.2.192.184.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.184.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.185.table b/definitions/grib2/tables/7/4.2.192.185.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.185.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.186.table b/definitions/grib2/tables/7/4.2.192.186.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.186.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.187.table b/definitions/grib2/tables/7/4.2.192.187.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.187.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.188.table b/definitions/grib2/tables/7/4.2.192.188.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.188.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.189.table b/definitions/grib2/tables/7/4.2.192.189.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.189.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.19.table b/definitions/grib2/tables/7/4.2.192.19.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.19.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.190.table b/definitions/grib2/tables/7/4.2.192.190.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.190.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.191.table b/definitions/grib2/tables/7/4.2.192.191.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.191.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.192.table b/definitions/grib2/tables/7/4.2.192.192.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.192.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.193.table b/definitions/grib2/tables/7/4.2.192.193.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.193.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.194.table b/definitions/grib2/tables/7/4.2.192.194.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.194.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.195.table b/definitions/grib2/tables/7/4.2.192.195.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.195.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.196.table b/definitions/grib2/tables/7/4.2.192.196.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.196.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.197.table b/definitions/grib2/tables/7/4.2.192.197.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.197.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.198.table b/definitions/grib2/tables/7/4.2.192.198.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.198.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.199.table b/definitions/grib2/tables/7/4.2.192.199.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.199.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.2.table b/definitions/grib2/tables/7/4.2.192.2.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.2.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.20.table b/definitions/grib2/tables/7/4.2.192.20.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.20.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.200.table b/definitions/grib2/tables/7/4.2.192.200.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.200.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.201.table b/definitions/grib2/tables/7/4.2.192.201.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.201.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.202.table b/definitions/grib2/tables/7/4.2.192.202.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.202.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.203.table b/definitions/grib2/tables/7/4.2.192.203.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.203.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.204.table b/definitions/grib2/tables/7/4.2.192.204.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.204.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.205.table b/definitions/grib2/tables/7/4.2.192.205.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.205.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.206.table b/definitions/grib2/tables/7/4.2.192.206.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.206.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.207.table b/definitions/grib2/tables/7/4.2.192.207.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.207.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.208.table b/definitions/grib2/tables/7/4.2.192.208.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.208.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.209.table b/definitions/grib2/tables/7/4.2.192.209.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.209.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.21.table b/definitions/grib2/tables/7/4.2.192.21.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.21.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.210.table b/definitions/grib2/tables/7/4.2.192.210.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.210.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.211.table b/definitions/grib2/tables/7/4.2.192.211.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.211.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.212.table b/definitions/grib2/tables/7/4.2.192.212.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.212.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.213.table b/definitions/grib2/tables/7/4.2.192.213.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.213.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.214.table b/definitions/grib2/tables/7/4.2.192.214.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.214.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.215.table b/definitions/grib2/tables/7/4.2.192.215.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.215.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.216.table b/definitions/grib2/tables/7/4.2.192.216.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.216.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.217.table b/definitions/grib2/tables/7/4.2.192.217.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.217.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.218.table b/definitions/grib2/tables/7/4.2.192.218.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.218.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.219.table b/definitions/grib2/tables/7/4.2.192.219.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.219.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.22.table b/definitions/grib2/tables/7/4.2.192.22.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.22.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.220.table b/definitions/grib2/tables/7/4.2.192.220.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.220.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.221.table b/definitions/grib2/tables/7/4.2.192.221.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.221.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.222.table b/definitions/grib2/tables/7/4.2.192.222.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.222.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.223.table b/definitions/grib2/tables/7/4.2.192.223.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.223.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.224.table b/definitions/grib2/tables/7/4.2.192.224.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.224.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.225.table b/definitions/grib2/tables/7/4.2.192.225.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.225.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.226.table b/definitions/grib2/tables/7/4.2.192.226.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.226.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.227.table b/definitions/grib2/tables/7/4.2.192.227.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.227.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.228.table b/definitions/grib2/tables/7/4.2.192.228.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.228.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.229.table b/definitions/grib2/tables/7/4.2.192.229.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.229.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.23.table b/definitions/grib2/tables/7/4.2.192.23.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.23.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.230.table b/definitions/grib2/tables/7/4.2.192.230.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.230.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.231.table b/definitions/grib2/tables/7/4.2.192.231.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.231.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.232.table b/definitions/grib2/tables/7/4.2.192.232.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.232.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.233.table b/definitions/grib2/tables/7/4.2.192.233.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.233.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.234.table b/definitions/grib2/tables/7/4.2.192.234.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.234.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.235.table b/definitions/grib2/tables/7/4.2.192.235.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.235.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.236.table b/definitions/grib2/tables/7/4.2.192.236.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.236.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.237.table b/definitions/grib2/tables/7/4.2.192.237.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.237.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.238.table b/definitions/grib2/tables/7/4.2.192.238.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.238.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.239.table b/definitions/grib2/tables/7/4.2.192.239.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.239.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.24.table b/definitions/grib2/tables/7/4.2.192.24.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.24.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.240.table b/definitions/grib2/tables/7/4.2.192.240.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.240.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.241.table b/definitions/grib2/tables/7/4.2.192.241.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.241.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.242.table b/definitions/grib2/tables/7/4.2.192.242.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.242.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.243.table b/definitions/grib2/tables/7/4.2.192.243.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.243.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.244.table b/definitions/grib2/tables/7/4.2.192.244.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.244.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.245.table b/definitions/grib2/tables/7/4.2.192.245.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.245.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.246.table b/definitions/grib2/tables/7/4.2.192.246.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.246.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.247.table b/definitions/grib2/tables/7/4.2.192.247.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.247.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.248.table b/definitions/grib2/tables/7/4.2.192.248.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.248.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.249.table b/definitions/grib2/tables/7/4.2.192.249.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.249.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.25.table b/definitions/grib2/tables/7/4.2.192.25.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.25.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.250.table b/definitions/grib2/tables/7/4.2.192.250.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.250.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.251.table b/definitions/grib2/tables/7/4.2.192.251.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.251.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.252.table b/definitions/grib2/tables/7/4.2.192.252.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.252.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.253.table b/definitions/grib2/tables/7/4.2.192.253.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.253.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.254.table b/definitions/grib2/tables/7/4.2.192.254.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.254.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.255.table b/definitions/grib2/tables/7/4.2.192.255.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.255.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.26.table b/definitions/grib2/tables/7/4.2.192.26.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.26.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.27.table b/definitions/grib2/tables/7/4.2.192.27.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.27.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.28.table b/definitions/grib2/tables/7/4.2.192.28.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.28.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.29.table b/definitions/grib2/tables/7/4.2.192.29.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.29.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.3.table b/definitions/grib2/tables/7/4.2.192.3.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.3.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.30.table b/definitions/grib2/tables/7/4.2.192.30.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.30.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.31.table b/definitions/grib2/tables/7/4.2.192.31.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.31.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.32.table b/definitions/grib2/tables/7/4.2.192.32.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.32.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.33.table b/definitions/grib2/tables/7/4.2.192.33.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.33.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.34.table b/definitions/grib2/tables/7/4.2.192.34.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.34.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.35.table b/definitions/grib2/tables/7/4.2.192.35.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.35.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.36.table b/definitions/grib2/tables/7/4.2.192.36.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.36.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.37.table b/definitions/grib2/tables/7/4.2.192.37.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.37.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.38.table b/definitions/grib2/tables/7/4.2.192.38.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.38.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.39.table b/definitions/grib2/tables/7/4.2.192.39.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.39.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.4.table b/definitions/grib2/tables/7/4.2.192.4.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.4.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.40.table b/definitions/grib2/tables/7/4.2.192.40.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.40.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.41.table b/definitions/grib2/tables/7/4.2.192.41.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.41.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.42.table b/definitions/grib2/tables/7/4.2.192.42.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.42.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.43.table b/definitions/grib2/tables/7/4.2.192.43.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.43.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.44.table b/definitions/grib2/tables/7/4.2.192.44.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.44.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.45.table b/definitions/grib2/tables/7/4.2.192.45.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.45.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.46.table b/definitions/grib2/tables/7/4.2.192.46.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.46.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.47.table b/definitions/grib2/tables/7/4.2.192.47.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.47.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.48.table b/definitions/grib2/tables/7/4.2.192.48.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.48.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.49.table b/definitions/grib2/tables/7/4.2.192.49.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.49.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.5.table b/definitions/grib2/tables/7/4.2.192.5.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.5.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.50.table b/definitions/grib2/tables/7/4.2.192.50.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.50.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.51.table b/definitions/grib2/tables/7/4.2.192.51.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.51.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.52.table b/definitions/grib2/tables/7/4.2.192.52.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.52.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.53.table b/definitions/grib2/tables/7/4.2.192.53.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.53.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.54.table b/definitions/grib2/tables/7/4.2.192.54.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.54.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.55.table b/definitions/grib2/tables/7/4.2.192.55.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.55.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.56.table b/definitions/grib2/tables/7/4.2.192.56.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.56.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.57.table b/definitions/grib2/tables/7/4.2.192.57.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.57.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.58.table b/definitions/grib2/tables/7/4.2.192.58.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.58.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.59.table b/definitions/grib2/tables/7/4.2.192.59.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.59.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.6.table b/definitions/grib2/tables/7/4.2.192.6.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.6.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.60.table b/definitions/grib2/tables/7/4.2.192.60.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.60.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.61.table b/definitions/grib2/tables/7/4.2.192.61.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.61.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.62.table b/definitions/grib2/tables/7/4.2.192.62.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.62.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.63.table b/definitions/grib2/tables/7/4.2.192.63.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.63.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.64.table b/definitions/grib2/tables/7/4.2.192.64.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.64.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.65.table b/definitions/grib2/tables/7/4.2.192.65.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.65.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.66.table b/definitions/grib2/tables/7/4.2.192.66.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.66.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.67.table b/definitions/grib2/tables/7/4.2.192.67.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.67.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.68.table b/definitions/grib2/tables/7/4.2.192.68.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.68.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.69.table b/definitions/grib2/tables/7/4.2.192.69.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.69.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.7.table b/definitions/grib2/tables/7/4.2.192.7.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.7.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.70.table b/definitions/grib2/tables/7/4.2.192.70.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.70.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.71.table b/definitions/grib2/tables/7/4.2.192.71.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.71.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.72.table b/definitions/grib2/tables/7/4.2.192.72.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.72.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.73.table b/definitions/grib2/tables/7/4.2.192.73.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.73.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.74.table b/definitions/grib2/tables/7/4.2.192.74.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.74.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.75.table b/definitions/grib2/tables/7/4.2.192.75.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.75.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.76.table b/definitions/grib2/tables/7/4.2.192.76.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.76.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.77.table b/definitions/grib2/tables/7/4.2.192.77.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.77.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.78.table b/definitions/grib2/tables/7/4.2.192.78.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.78.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.79.table b/definitions/grib2/tables/7/4.2.192.79.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.79.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.8.table b/definitions/grib2/tables/7/4.2.192.8.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.8.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.80.table b/definitions/grib2/tables/7/4.2.192.80.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.80.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.81.table b/definitions/grib2/tables/7/4.2.192.81.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.81.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.82.table b/definitions/grib2/tables/7/4.2.192.82.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.82.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.83.table b/definitions/grib2/tables/7/4.2.192.83.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.83.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.84.table b/definitions/grib2/tables/7/4.2.192.84.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.84.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.85.table b/definitions/grib2/tables/7/4.2.192.85.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.85.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.86.table b/definitions/grib2/tables/7/4.2.192.86.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.86.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.87.table b/definitions/grib2/tables/7/4.2.192.87.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.87.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.88.table b/definitions/grib2/tables/7/4.2.192.88.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.88.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.89.table b/definitions/grib2/tables/7/4.2.192.89.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.89.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.9.table b/definitions/grib2/tables/7/4.2.192.9.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.9.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.90.table b/definitions/grib2/tables/7/4.2.192.90.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.90.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.91.table b/definitions/grib2/tables/7/4.2.192.91.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.91.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.92.table b/definitions/grib2/tables/7/4.2.192.92.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.92.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.93.table b/definitions/grib2/tables/7/4.2.192.93.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.93.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.94.table b/definitions/grib2/tables/7/4.2.192.94.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.94.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.95.table b/definitions/grib2/tables/7/4.2.192.95.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.95.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.96.table b/definitions/grib2/tables/7/4.2.192.96.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.96.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.97.table b/definitions/grib2/tables/7/4.2.192.97.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.97.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.98.table b/definitions/grib2/tables/7/4.2.192.98.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.98.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.192.99.table b/definitions/grib2/tables/7/4.2.192.99.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.192.99.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.2.0.table b/definitions/grib2/tables/7/4.2.2.0.table new file mode 100644 index 000000000..688826617 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.2.0.table @@ -0,0 +1,37 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Land cover (1=land, 0=sea) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg -2 s-1) +7 7 Model terrain height (m) +8 8 Land use (code table (4.212)) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadar's mixing length scale (m) +15 15 Canopy conductance (m s-1) +16 16 Minimal stomatal resistance (s m-1) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy (Proportion) +20 20 Humidity parameter in canopy conductance (Proportion) +21 21 Soil moisture parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +23 23 Column-integrated soil water (kg m-2) +24 24 Heat flux (W m-2) +25 25 Volumetric soil moisture (m3 m-3) +26 26 Wilting point (kg m-3) +27 27 Volumetric wilting point (m3 m-3) +28 28 Leaf area index - validation (Numeric) +29 29 Evergreen forest - validation (Numeric) +30 30 Deciduous forest - validation (Numeric) +31 31 Normalized differential vegetation index (NDVI) - validation (Numeric) +32 32 Root depth of vegetation - validation (M) +#33-191 33-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.2.3.table b/definitions/grib2/tables/7/4.2.2.3.table new file mode 100644 index 000000000..cc6849b27 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.2.3.table @@ -0,0 +1,27 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Soil type (code table (4.213)) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +10 10 Liquid volumetric soil moisture (non-frozen) (m3 m-3) +11 11 Volumetric transpiration stress-onset (soil moisture) (m3 m-3) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +13 13 Volumetric direct evaporation cease (soil moisture) (m3 m-3) +14 14 Direct evaporation cease (soil moisture) (kg m-3) +15 15 Soil porosity (m3 m-3) +16 16 Volumetric saturation of soil moisture (m3 m-3) +17 17 Saturation of soil moisture (kg m-3) +18 18 Soil Temperature - validation (K) +19 19 Soil moisture - validation (kg m-3) +20 20 Column-integrated soil moisture - validation (kg m-2) +21 21 Soil ice - validation (kg m-3) +22 22 Column-integrated soil ice - validation (kg m-2) +#23-191 23-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.2.4.table b/definitions/grib2/tables/7/4.2.2.4.table new file mode 100644 index 000000000..4b3918369 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.2.4.table @@ -0,0 +1,3 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Fire outlook (code table (4.224)) +1 1 Fire outlook due to dry thunderstorm (code table (4.224)) diff --git a/definitions/grib2/tables/7/4.2.3.0.table b/definitions/grib2/tables/7/4.2.3.0.table new file mode 100644 index 000000000..bd1f84bff --- /dev/null +++ b/definitions/grib2/tables/7/4.2.3.0.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +9 9 Fire detection indicator (Code table 4.223) +#10-191 10-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.3.1.table b/definitions/grib2/tables/7/4.2.3.1.table new file mode 100644 index 000000000..63e5e7ef7 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.3.1.table @@ -0,0 +1,28 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m s-1) +5 5 Estimated v component of wind (m s-1) +6 6 Number of pixels used (Numeric) +7 7 Solar zenith angle (Degree) +8 8 Relative azimuth angle (Degree) +9 9 Reflectance in 0.6 micron channel (%) +10 10 Reflectance in 0.8 micron channel (%) +11 11 Reflectance in 1.6 micron channel (%) +12 12 Reflectance in 3.9 micron channel (%) +13 13 Atmospheric divergence (s-1) +14 14 Cloudy brightness temperature (K) +15 15 Clear-sky brightness temperature (K) +16 16 Cloudy radiance (with respect to wave number) (W m-1 sr-1) +17 17 Clear-sky radiance (with respect to wave number) (W m-1 sr-1) +18 18 Reserved (-) +19 19 Wind speed (m s-1) +20 20 Aerosol optical thickness at 0.635 um (-) +21 21 Aerosol optical thickness at 0.810 um (-) +22 22 Aerosol optical thickness at 1.640 um (-) +23 23 Angstrom coefficient (-) +#24-191 24-191 Reserved (-) +#192-254 192-254 Reserved for local use (-) +255 255 Missing (-) diff --git a/definitions/grib2/tables/7/4.2.table b/definitions/grib2/tables/7/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/7/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/7/4.201.table b/definitions/grib2/tables/7/4.201.table new file mode 100644 index 000000000..39e5033c5 --- /dev/null +++ b/definitions/grib2/tables/7/4.201.table @@ -0,0 +1,72 @@ +# CODE TABLE 4.201, Precipitation Type +0 0 Reserved +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +# 6-191 Reserved +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.202.table b/definitions/grib2/tables/7/4.202.table new file mode 100644 index 000000000..69dbe3a5d --- /dev/null +++ b/definitions/grib2/tables/7/4.202.table @@ -0,0 +1,66 @@ +# CODE TABLE 4.202, Precipitable water category + +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.203.table b/definitions/grib2/tables/7/4.203.table new file mode 100644 index 000000000..d2ad10b07 --- /dev/null +++ b/definitions/grib2/tables/7/4.203.table @@ -0,0 +1,88 @@ +# CODE TABLE 4.203, Cloud type + +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground based fog beneath the lowest layer +12 12 Stratus - ground based fog beneath the lowest layer +13 13 Stratocumulus - ground based fog beneath the lowest layer +14 14 Cumulus - ground based fog beneath the lowest layer +15 15 Altostratus - ground based fog beneath the lowest layer +16 16 Nimbostratus - ground based fog beneath the lowest layer +17 17 Altocumulus - ground based fog beneath the lowest layer +18 18 Cirrostratus - ground based fog beneath the lowest layer +19 19 Cirrocumulus - ground based fog beneath the lowest layer +20 20 Cirrus - ground based fog beneath the lowest layer +191 191 Unknown +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.204.table b/definitions/grib2/tables/7/4.204.table new file mode 100644 index 000000000..23b60cf77 --- /dev/null +++ b/definitions/grib2/tables/7/4.204.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.204, Thunderstorm coverage + +0 0 None +1 1 Isolated (1% - 2%) +2 2 Few (3% - 15%) +3 3 Scattered (16% - 45%) +4 4 Numerous (> 45%) +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.205.table b/definitions/grib2/tables/7/4.205.table new file mode 100644 index 000000000..e7a0208f5 --- /dev/null +++ b/definitions/grib2/tables/7/4.205.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.205, Presence of aerosol + +0 0 Aerosol not present +1 1 Aerosol present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.206.table b/definitions/grib2/tables/7/4.206.table new file mode 100644 index 000000000..b1ef2e787 --- /dev/null +++ b/definitions/grib2/tables/7/4.206.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.206, Volcanic ash + +0 0 Not present +1 1 Present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.207.table b/definitions/grib2/tables/7/4.207.table new file mode 100644 index 000000000..13fc7b54b --- /dev/null +++ b/definitions/grib2/tables/7/4.207.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.207, Icing + +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.208.table b/definitions/grib2/tables/7/4.208.table new file mode 100644 index 000000000..15b514a07 --- /dev/null +++ b/definitions/grib2/tables/7/4.208.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.208, Turbulence + +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.209.table b/definitions/grib2/tables/7/4.209.table new file mode 100644 index 000000000..b4cca1d73 --- /dev/null +++ b/definitions/grib2/tables/7/4.209.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.209, Planetary boundary layer regime + +1 1 Stable +2 2 Mechanically driven turbulence +3 3 Forced convection +4 4 Free convection +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.210.table b/definitions/grib2/tables/7/4.210.table new file mode 100644 index 000000000..d05e07721 --- /dev/null +++ b/definitions/grib2/tables/7/4.210.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.210, Contrail intensity + +0 0 Contrail not present +1 1 Contrail present +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.211.table b/definitions/grib2/tables/7/4.211.table new file mode 100644 index 000000000..604b2e643 --- /dev/null +++ b/definitions/grib2/tables/7/4.211.table @@ -0,0 +1,69 @@ +# CODE TABLE 4.211, Contrail engine type + +0 0 Low bypass +1 1 High bypass +2 2 Non bypass +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.212.table b/definitions/grib2/tables/7/4.212.table new file mode 100644 index 000000000..7393238e7 --- /dev/null +++ b/definitions/grib2/tables/7/4.212.table @@ -0,0 +1,79 @@ +# CODE TABLE 4.212, Land Use + +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.213.table b/definitions/grib2/tables/7/4.213.table new file mode 100644 index 000000000..cc4bdfc1f --- /dev/null +++ b/definitions/grib2/tables/7/4.213.table @@ -0,0 +1,77 @@ +# CODE TABLE 4.213, Soil type + +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.215.table b/definitions/grib2/tables/7/4.215.table new file mode 100644 index 000000000..7e1442962 --- /dev/null +++ b/definitions/grib2/tables/7/4.215.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.215, Remotely Sensed Snow Coverage + +50 50 No-snow/no-cloud +100 100 Clouds +250 250 Snow +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.216.table b/definitions/grib2/tables/7/4.216.table new file mode 100644 index 000000000..dbe26b0e5 --- /dev/null +++ b/definitions/grib2/tables/7/4.216.table @@ -0,0 +1,95 @@ +# CODE TABLE 4.216, Elevation of Snow Covered Terrain + +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/7/4.217.table b/definitions/grib2/tables/7/4.217.table new file mode 100644 index 000000000..475ab686d --- /dev/null +++ b/definitions/grib2/tables/7/4.217.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.217, Cloud mask type + +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.218.table b/definitions/grib2/tables/7/4.218.table new file mode 100644 index 000000000..a0295261b --- /dev/null +++ b/definitions/grib2/tables/7/4.218.table @@ -0,0 +1,35 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No scene identified +1 1 Green needle leafed forest +2 2 Green broad-leafed forest +3 3 Deciduous needle leafed forest +4 4 Deciduous broad-leafed forest +5 5 Deciduous mixed forest +6 6 Closed shrub-land +7 7 Open shrub-land +8 8 Woody savannah +9 9 Savannah +10 10 Grassland +11 11 Permanent wetland +12 12 Cropland +13 13 Urban +14 14 Vegetation / crops +15 15 Permanent snow / ice +16 16 Barren desert +17 17 Water bodies +18 18 Tundra +97 97 Snow / ice on land +98 98 Snow / ice on water +99 99 Sun-glint +100 100 General cloud +101 101 Low cloud / fog / Stratus +102 102 Low cloud / Stratocumulus +103 103 Low cloud / unknown type +104 104 Medium cloud / Nimbostratus +105 105 Medium cloud / Altostratus +106 106 Medium cloud / unknown type +107 107 High cloud / Cumulus +108 108 High cloud / Cirrus +109 109 High cloud / unknown +110 110 Unknown cloud type +255 255 Missing diff --git a/definitions/grib2/tables/7/4.219.table b/definitions/grib2/tables/7/4.219.table new file mode 100644 index 000000000..161834ab7 --- /dev/null +++ b/definitions/grib2/tables/7/4.219.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Nominal cloud top height quality +1 1 Fog in segment +2 2 Poor quality height estimation +3 3 Fog in segment and poor quality height estimation +255 255 Missing diff --git a/definitions/grib2/tables/7/4.220.table b/definitions/grib2/tables/7/4.220.table new file mode 100644 index 000000000..9fddcd49f --- /dev/null +++ b/definitions/grib2/tables/7/4.220.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.220, Horizontal dimension processed + +0 0 Latitude +1 1 Longitude +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.221.table b/definitions/grib2/tables/7/4.221.table new file mode 100644 index 000000000..2291eab60 --- /dev/null +++ b/definitions/grib2/tables/7/4.221.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.221, Treatment of missing data + +0 0 Not included +1 1 Extrapolated +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.222.table b/definitions/grib2/tables/7/4.222.table new file mode 100644 index 000000000..c56e95732 --- /dev/null +++ b/definitions/grib2/tables/7/4.222.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No +1 1 Yes +255 255 Missing diff --git a/definitions/grib2/tables/7/4.223.table b/definitions/grib2/tables/7/4.223.table new file mode 100644 index 000000000..360725351 --- /dev/null +++ b/definitions/grib2/tables/7/4.223.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No fire detected +1 1 Possible fire detected +2 2 Probable fire detected +3 3 Missing diff --git a/definitions/grib2/tables/7/4.224.table b/definitions/grib2/tables/7/4.224.table new file mode 100644 index 000000000..4128aea6a --- /dev/null +++ b/definitions/grib2/tables/7/4.224.table @@ -0,0 +1,18 @@ +# CODE TABLE 4.224, Categorical outlook +0 0 No risk area +1 1 Reserved +2 2 General thunderstorm risk area +3 3 Reserved +4 4 Slight risk area +5 5 Reserved +6 6 Moderate risk area +7 7 Reserved +8 8 High risk area +#9-10 Reserved +11 11 Dry thunderstorm (dry lightning) risk area +#12-13 Reserved +14 14 Critical risk area +#15-17 Reserved +18 18 Extremely critical risk area +#19-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/7/4.230.table b/definitions/grib2/tables/7/4.230.table new file mode 100644 index 000000000..22563e883 --- /dev/null +++ b/definitions/grib2/tables/7/4.230.table @@ -0,0 +1,117 @@ +#Code figure Code figure Meaning +0 0 Ozone +1 1 Water vapour +2 2 Methane +3 3 Carbon dioxide +4 4 Carbon monoxide +5 5 Nitrogen dioxide +6 6 Nitrous oxide +7 7 Formaldehyde +8 8 Sulphur dioxide +9 9 Ammonia +10 10 Ammonium +11 11 Nitrogen monoxide +12 12 Atomic oxygen +13 13 Nitrate radical +14 14 Hydroperoxyl radical +15 15 Dinitrogen pentoxide +16 16 Nitrous acid +17 17 Nitric acid +18 18 Peroxynitric acid +19 19 Hydrogen peroxide +20 20 Molecular hydrogen +21 21 Atomic nitrogen +22 22 Sulphate +23 23 Radon +24 24 Elemental mercury +25 25 Divalent mercury +26 26 Atomic chlorine +27 27 Chlorine monoxide +28 28 Dichlorine peroxide +29 29 Hypochlorous acid +30 30 Chlorine nitrate +31 31 Chlorine dioxide +32 32 Atomic bromine +33 33 Bromine monoxide +34 34 Bromine chloride +35 35 Hydrogen bromide +36 36 Hypobromous acid +37 37 Bromine nitrate +10000 10000 Hydroxyl radical +10001 10001 Methyl peroxy radical +10002 10002 Methyl hydroperoxide +10004 10004 Methanol +10005 10005 Formic acid +10006 10006 Hydrogen Cyanide +10007 10007 Aceto nitrile +10008 10008 Ethane +10009 10009 Ethene (= Ethylene) +10010 10010 Ethyne (= Acetylene) +10011 10011 Ethanol +10012 10012 Acetic acid +10013 10013 Peroxyacetyl nitrate +10014 10014 Propane +10015 10015 Propene +10016 10016 Butanes +10017 10017 Isoprene +10018 10018 Alpha pinene +10019 10019 Beta pinene +10020 10020 Limonene +10021 10021 Benzene +10022 10022 Toluene +10023 10023 Xylene +#10024-10499 10024-10499 reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides,…) +10500 10500 Dimethyl sulphide +#10501-20000 10501-20000 Reserved +20001 20001 Hydrogen chloride +20002 20002 CFC-11 +20003 20003 CFC-12 +20004 20004 CFC-113 +20005 20005 CFC-113a +20006 20006 CFC-114 +20007 20007 CFC-115 +20008 20008 HCFC-22 +20009 20009 HCFC-141b +20010 20010 HCFC-142b +20011 20011 Halon-1202 +20012 20012 Halon-1211 +20013 20013 Halon-1301 +20014 20014 Halon-2402 +20015 20015 Methyl chloride (HCC-40) +20016 20016 Carbon tetrachloride (HCC-10) +20017 20017 HCC-140a +20018 20018 Methyl bromide (HBC-40B1) +20019 20019 Hexachlorocyclohexane (HCH) +20020 20020 Alpha hexachlorocyclohexane +20021 20021 Hexachlorobiphenyl (PCB-153) +60000 60000 HOx radical (OH+HO2) +60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2) +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen +60005 60005 Total inorganic chlorine +60006 60006 Total inorganic bromine +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped Alkanes +60010 60010 Lumped Alkenes +60011 60011 Lumped Aromatic Compounds +60012 60012 Lumped Terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon +60016 60016 Lumped oxygenated hydrocarbons +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +65535 65535 Missing diff --git a/definitions/grib2/tables/7/4.3.table b/definitions/grib2/tables/7/4.3.table new file mode 100644 index 000000000..47bccd26b --- /dev/null +++ b/definitions/grib2/tables/7/4.3.table @@ -0,0 +1,16 @@ +# CODE TABLE 4.3, Type of generating process +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +9 9 Climatological +10 10 Probability-weighted forecast +11 11 Bias-corrected ensemble forecast +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.4.table b/definitions/grib2/tables/7/4.4.table new file mode 100644 index 000000000..61aa20c5f --- /dev/null +++ b/definitions/grib2/tables/7/4.4.table @@ -0,0 +1,16 @@ +# CODE TABLE 4.4, Indicator of unit of time range +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.5.table b/definitions/grib2/tables/7/4.5.table new file mode 100644 index 000000000..a475587a5 --- /dev/null +++ b/definitions/grib2/tables/7/4.5.table @@ -0,0 +1,38 @@ +#Code table 4.5: Fixed surface types and units +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0 degree C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +10 10 Entire atmosphere +11 11 Cumulonimbus (CB) base (m) +12 12 Cumulonimbus (CB) top (m) +# 13-19 Reserved +20 20 Isothermal level (K) +#21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level +# 112-116 Reserved +117 117 Mixed layer depth (m) +118 hhl Hybrid height level +119 hpl Hybrid pressure level +# 120-159 Reserved +160 160 Depth below sea level (m) +#161-191 Reserved +#192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.6.table b/definitions/grib2/tables/7/4.6.table new file mode 100644 index 000000000..1e89185fd --- /dev/null +++ b/definitions/grib2/tables/7/4.6.table @@ -0,0 +1,10 @@ +# CODE TABLE 4.6, Type of ensemble forecast + +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +4 4 Multi-model forecast +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.7.table b/definitions/grib2/tables/7/4.7.table new file mode 100644 index 000000000..d034c11ea --- /dev/null +++ b/definitions/grib2/tables/7/4.7.table @@ -0,0 +1,77 @@ +# CODE TABLE 4.7, Derived forecast + +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members (see Note) +6 6 Unweighted mean of the cluster members +7 7 Interquartile range (range between the 25th and 75th quantile) +8 8 Minimum of all ensemble members +9 9 Maximum of all ensemble members +# 10-191 Reserved +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.8.table b/definitions/grib2/tables/7/4.8.table new file mode 100644 index 000000000..9d3a0e8a7 --- /dev/null +++ b/definitions/grib2/tables/7/4.8.table @@ -0,0 +1,68 @@ +# CODE TABLE 4.8, Clustering Method + +0 0 Anomaly correlation +1 1 Root mean square +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.9.table b/definitions/grib2/tables/7/4.9.table new file mode 100644 index 000000000..895f30171 --- /dev/null +++ b/definitions/grib2/tables/7/4.9.table @@ -0,0 +1,71 @@ +# CODE TABLE 4.9, Probability Type + +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits. The range includes the lower limit but not the upper limit +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/4.91.table b/definitions/grib2/tables/7/4.91.table new file mode 100644 index 000000000..16152a1b5 --- /dev/null +++ b/definitions/grib2/tables/7/4.91.table @@ -0,0 +1,79 @@ +# CODE TABLE 4.91 Type of Interval + +0 0 Smaller than first limit +1 1 Greater than second limit +2 2 Between first and second limit. The range includes the first limit but not the second limit +3 3 Greater than first limit +4 4 Smaller than second limit +5 5 Smaller or equal first limit +6 6 Greater or equal second limit +7 7 Between first and second. The range includes the first limit and the second limit +8 8 Greater or equal first limit +9 9 Smaller or equal second limit +10 10 Between first and second limit. The range includes the second limit but not the first limit +11 11 Equal to first limit +# 12-191 Reserved +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/7/5.0.table b/definitions/grib2/tables/7/5.0.table new file mode 100644 index 000000000..62cc4a472 --- /dev/null +++ b/definitions/grib2/tables/7/5.0.table @@ -0,0 +1,19 @@ +# CODE TABLE 5.0, Data Representation Template Number +0 0 Grid point data - simple packing +1 1 Matrix value - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - ieee packing +6 6 Grid point data - simple packing with pre-processing +40 40 JPEG2000 Packing +41 41 PNG pacling +50 50 Spectral data -simple packing +51 51 Spherical harmonics data - complex packing +61 61 Grid point data - simple packing with logarithm pre-processing +# 192-254 Reserved for local use +255 255 Missing +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling +50000 50000 Sperical harmonics ieee packing +50001 50001 Second order packing +50002 50002 Second order packing diff --git a/definitions/grib2/tables/7/5.1.table b/definitions/grib2/tables/7/5.1.table new file mode 100644 index 000000000..d7ca4bedc --- /dev/null +++ b/definitions/grib2/tables/7/5.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.1, Type of original field values +0 0 Floating point +1 1 Integer +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/5.2.table b/definitions/grib2/tables/7/5.2.table new file mode 100644 index 000000000..a048d712e --- /dev/null +++ b/definitions/grib2/tables/7/5.2.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.2, Matrix coordinate value function definition +0 0 Explicit coordinate values set +1 1 Linear coordinates +11 11 Geometric coordinates +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/5.3.table b/definitions/grib2/tables/7/5.3.table new file mode 100644 index 000000000..4a673ef85 --- /dev/null +++ b/definitions/grib2/tables/7/5.3.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.3, Matrix coordinate parameter +1 1 Direction Degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/5.4.table b/definitions/grib2/tables/7/5.4.table new file mode 100644 index 000000000..1fd37966f --- /dev/null +++ b/definitions/grib2/tables/7/5.4.table @@ -0,0 +1,5 @@ +# CODE TABLE 5.4, Group Splitting Method +0 0 Row by row splitting +1 1 General group splitting +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/5.40.table b/definitions/grib2/tables/7/5.40.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/7/5.40.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/7/5.40000.table b/definitions/grib2/tables/7/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/7/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/7/5.5.table b/definitions/grib2/tables/7/5.5.table new file mode 100644 index 000000000..d1caac9e8 --- /dev/null +++ b/definitions/grib2/tables/7/5.5.table @@ -0,0 +1,7 @@ +# CODE TABLE 5.5, Missing Value Management for Complex Packing + +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 192 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/5.50002.table b/definitions/grib2/tables/7/5.50002.table new file mode 100644 index 000000000..10c243cb0 --- /dev/null +++ b/definitions/grib2/tables/7/5.50002.table @@ -0,0 +1,19 @@ +# second order packing modes table + +1 0 no boustrophedonic +1 1 boustrophedonic +2 0 Reserved +2 1 Reserved +3 0 Reserved +3 1 Reserved +4 0 Reserved +4 1 Reserved +5 0 Reserved +5 1 Reserved +6 0 Reserved +6 1 Reserved +7 0 Reserved +7 1 Reserved +8 0 Reserved +8 1 Reserved + diff --git a/definitions/grib2/tables/7/5.6.table b/definitions/grib2/tables/7/5.6.table new file mode 100644 index 000000000..4aec3314e --- /dev/null +++ b/definitions/grib2/tables/7/5.6.table @@ -0,0 +1,68 @@ +# CODE TABLE 5.6, Order of Spatial Differencing + +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/7/5.7.table b/definitions/grib2/tables/7/5.7.table new file mode 100644 index 000000000..35b23b94d --- /dev/null +++ b/definitions/grib2/tables/7/5.7.table @@ -0,0 +1,6 @@ +# CODE TABLE 5.7, Precision of floating-point numbers + +1 1 IEEE 32-bit (I=4 in Section 7) +2 2 IEEE 64-bit (I=8 in Section 7) +3 3 IEEE 128-bit (I=16 in Section 7) +255 255 Missing diff --git a/definitions/grib2/tables/7/5.8.table b/definitions/grib2/tables/7/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/7/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/7/5.9.table b/definitions/grib2/tables/7/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/7/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/7/6.0.table b/definitions/grib2/tables/7/6.0.table new file mode 100644 index 000000000..6a8c74b48 --- /dev/null +++ b/definitions/grib2/tables/7/6.0.table @@ -0,0 +1,7 @@ +# CODE TABLE 6.0, Bit Map Indicator + +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 2 253 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same "GRIB" message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/7/stepType.table b/definitions/grib2/tables/7/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/7/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/8/0.0.table b/definitions/grib2/tables/8/0.0.table new file mode 100644 index 000000000..95a1f5187 --- /dev/null +++ b/definitions/grib2/tables/8/0.0.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/1.0.table b/definitions/grib2/tables/8/1.0.table new file mode 100644 index 000000000..e4e0f5378 --- /dev/null +++ b/definitions/grib2/tables/8/1.0.table @@ -0,0 +1,13 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Experimental +1 1 Version implemented on 7 November 2001 +2 2 Version implemented on 4 November 2003 +3 3 Version implemented on 2 November 2005 +4 4 Version implemented on 7 November 2007 +5 5 Version implemented on 4 November 2009 +6 6 Version implemented on 15 September 2010 +7 7 Version implemented on 4 May 2011 +8 8 Version implemented on 2 November 2011 +9 9 Pre-operational to be implemented by next amendment +# 10-254 Future versions +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/8/1.1.table b/definitions/grib2/tables/8/1.1.table new file mode 100644 index 000000000..5ab801398 --- /dev/null +++ b/definitions/grib2/tables/8/1.1.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Local tables not used. Only table entries and templates from the current master table are valid +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/8/1.2.table b/definitions/grib2/tables/8/1.2.table new file mode 100644 index 000000000..1fc872e7f --- /dev/null +++ b/definitions/grib2/tables/8/1.2.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/1.3.table b/definitions/grib2/tables/8/1.3.table new file mode 100644 index 000000000..8ce2713e2 --- /dev/null +++ b/definitions/grib2/tables/8/1.3.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 THORPEX Interactive Grand Global Ensemble (TIGGE) +5 5 THORPEX Interactive Grand Global Ensemble (TIGGE) test +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/1.4.table b/definitions/grib2/tables/8/1.4.table new file mode 100644 index 000000000..03d1af08b --- /dev/null +++ b/definitions/grib2/tables/8/1.4.table @@ -0,0 +1,13 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event probability +# 9-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/8/3.0.table b/definitions/grib2/tables/8/3.0.table new file mode 100644 index 000000000..ded50cd1c --- /dev/null +++ b/definitions/grib2/tables/8/3.0.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition (Defined by originating centre) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/8/3.1.table b/definitions/grib2/tables/8/3.1.table new file mode 100644 index 000000000..17633ce1e --- /dev/null +++ b/definitions/grib2/tables/8/3.1.table @@ -0,0 +1,43 @@ +# CODE TABLE 3.1, Grid Definition Template Number +0 0 Latitude/longitude. Also called equidistant cylindrical, or Plate Carree +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +# 4-9 Reserved +10 10 Mercator +# 11-19 Reserved +20 20 Polar stereographic projection (Can be south or north) +# 21-29 Reserved +30 30 Lambert conformal (Can be secant or tangent, conical or bipolar) +31 31 Albers equal area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective or orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +# 101-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid, with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovm�ller diagram grid, with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/8/3.10.table b/definitions/grib2/tables/8/3.10.table new file mode 100644 index 000000000..72004d23e --- /dev/null +++ b/definitions/grib2/tables/8/3.10.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 Points scan in +i direction, i.e. from pole to Equator +1 1 Points scan in -i direction, i.e. from Equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction are consecutive +# 4-8 Reserved diff --git a/definitions/grib2/tables/8/3.11.table b/definitions/grib2/tables/8/3.11.table new file mode 100644 index 000000000..44b3809f6 --- /dev/null +++ b/definitions/grib2/tables/8/3.11.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +3 3 Numbers define the actual latitudes for each row in the grid. The list of numbers are integer values of the valid latitudes in microdegrees (scaled by 10-6) or in unit equal to the ratio of the basic angle and the subdivisions number for each row, in the same order as specified in the scanning mode flag (bit no. 2) +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/8/3.15.table b/definitions/grib2/tables/8/3.15.table new file mode 100644 index 000000000..88864101f --- /dev/null +++ b/definitions/grib2/tables/8/3.15.table @@ -0,0 +1,22 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 0-19 Reserved +20 20 Temperature (K) +# 21-99 Reserved +100 100 Pressure (Pa) +101 101 Pressure deviation from mean sea level (Pa) +102 102 Altitude above mean sea level (m) +103 103 Height above ground (m) +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface (m) +107 pt Potential temperature (theta) (K) +108 108 Pressure deviation from ground to level (Pa) +109 pv Potential vorticity (K m-2 kg-1 s-1) +110 110 Geometrical height (m) +111 111 Eta coordinate +112 112 Geopotential height (gpm) +# 113-159 Reserved +160 160 Depth below sea level (m) +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/3.2.table b/definitions/grib2/tables/8/3.2.table new file mode 100644 index 000000000..8897ddc02 --- /dev/null +++ b/definitions/grib2/tables/8/3.2.table @@ -0,0 +1,13 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Earth assumed spherical with radius = 6 367 470.0 m +1 1 Earth assumed spherical with radius specified (in m) by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6 378 160.0 m, minor axis = 6 356 775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified (in km) by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6 378 137.0 m, minor axis = 6 356 752.314 m, f = 1/298.257 222 101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6 371 229.0 m +7 7 Earth assumed oblate spheroid with major or minor axes specified (in m) by data producer +8 8 Earth model assumed spherical with radius of 6 371 200 m, but the horizontal datum of the resulting latitude/longitude field is the WGS84 reference frame +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/3.20.table b/definitions/grib2/tables/8/3.20.table new file mode 100644 index 000000000..e633569ac --- /dev/null +++ b/definitions/grib2/tables/8/3.20.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/3.21.table b/definitions/grib2/tables/8/3.21.table new file mode 100644 index 000000000..472c5b1f5 --- /dev/null +++ b/definitions/grib2/tables/8/3.21.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Explicit coordinate values set +1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 +# 2-10 Reserved +11 11 Geometric coordinates f(1) = C1, f(n) = C2 * f(n-1) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/3.3.table b/definitions/grib2/tables/8/3.3.table new file mode 100644 index 000000000..794be4ad9 --- /dev/null +++ b/definitions/grib2/tables/8/3.3.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 1-2 Reserved +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates, respectively +# 6-8 Reserved - set to zero diff --git a/definitions/grib2/tables/8/3.4.table b/definitions/grib2/tables/8/3.4.table new file mode 100644 index 000000000..7c0cf1059 --- /dev/null +++ b/definitions/grib2/tables/8/3.4.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction +# 5-8 Reserved diff --git a/definitions/grib2/tables/8/3.5.table b/definitions/grib2/tables/8/3.5.table new file mode 100644 index 000000000..c57d5499d --- /dev/null +++ b/definitions/grib2/tables/8/3.5.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bipolar and symmetric diff --git a/definitions/grib2/tables/8/3.6.table b/definitions/grib2/tables/8/3.6.table new file mode 100644 index 000000000..2c97129dc --- /dev/null +++ b/definitions/grib2/tables/8/3.6.table @@ -0,0 +1,2 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 1 The Associated Legendre Functions of the first kind are defined by: diff --git a/definitions/grib2/tables/8/3.7.table b/definitions/grib2/tables/8/3.7.table new file mode 100644 index 000000000..a23d19d77 --- /dev/null +++ b/definitions/grib2/tables/8/3.7.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) +# 2-254 Reserved +255 255 Missing +# Note: +# +#(1) Values of N(m) for common truncations cases: +# Triangular M = J = K, N(m) = J +# Rhomboidal K = J + M, N(m) = J+m +# Trapezoidal K = J, K > M, N(m) = J diff --git a/definitions/grib2/tables/8/3.8.table b/definitions/grib2/tables/8/3.8.table new file mode 100644 index 000000000..3c46a1f95 --- /dev/null +++ b/definitions/grib2/tables/8/3.8.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/3.9.table b/definitions/grib2/tables/8/3.9.table new file mode 100644 index 000000000..d0705ea3a --- /dev/null +++ b/definitions/grib2/tables/8/3.9.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e. counter-clockwise) orientation +# 2-8 Reserved diff --git a/definitions/grib2/tables/8/4.0.table b/definitions/grib2/tables/8/4.0.table new file mode 100644 index 000000000..762eae2e0 --- /dev/null +++ b/definitions/grib2/tables/8/4.0.table @@ -0,0 +1,54 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +15 15 Average, accumulation, extreme values, or other statistically-processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time +# 16-19 Reserved +20 20 Radar product +# 21-29 Reserved +30 30 Satellite product (deprecated) +31 31 Satellite product +32 32 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data +# 33-39 Reserved +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for aerosol +46 46 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non continuous time interval for aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of atmospheric aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +# 52-90 Reserved +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +# 92-253 Reserved +254 254 CCITT IA5 character string +# 255-999 Reserved +1000 1000 Cross-section of analysis and forecast at a point in time +1001 1001 Cross-section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed over latitude or longitude +# 1003-1099 Reserved +1100 1100 Hovmoller-type grid with no averaging or other statistical processing +1101 1101 Hovmoller-type grid with averaging or other statistical processing +50001 50001 Forecasting Systems with Variable Resolution in a point in time +50011 50011 Forecasting Systems with Variable Resolution in a continous or non countinous time interval +# 1102-32767 Reserved +# 32768-65534 Reserved for local use +40033 40033 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data +40034 40034 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data +40052 40052 Partitioned parameters at a horizontal level or horizontal layer at a point in time +65535 65535 Missing diff --git a/definitions/grib2/tables/8/4.1.0.table b/definitions/grib2/tables/8/4.1.0.table new file mode 100644 index 000000000..db062c9d9 --- /dev/null +++ b/definitions/grib2/tables/8/4.1.0.table @@ -0,0 +1,27 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave radiation +5 5 Long-wave radiation +6 6 Cloud +7 7 Thermodynamic stability indices +8 8 Kinematic stability indices +9 9 Temperature probabilities +10 10 Moisture probabilities +11 11 Momentum probabilities +12 12 Mass probabilities +13 13 Aerosols +14 14 Trace gases (e.g. ozone, CO2) +15 15 Radar +16 16 Forecast radar imagery +17 17 Electrodynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical constituents +# 21-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.1.1.table b/definitions/grib2/tables/8/4.1.1.table new file mode 100644 index 000000000..d5a35de75 --- /dev/null +++ b/definitions/grib2/tables/8/4.1.1.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Hydrology basic products +1 1 Hydrology probabilities +2 2 Inland water and sediment properties +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.1.10.table b/definitions/grib2/tables/8/4.1.10.table new file mode 100644 index 000000000..e7337775e --- /dev/null +++ b/definitions/grib2/tables/8/4.1.10.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface properties +4 4 Sub-surface properties +# 5-190 Reserved +191 191 Miscellaneous +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.1.192.table b/definitions/grib2/tables/8/4.1.192.table new file mode 100644 index 000000000..c428acab0 --- /dev/null +++ b/definitions/grib2/tables/8/4.1.192.table @@ -0,0 +1,4 @@ +#Discipline 192: ECMWF local parameters +255 255 Missing + + diff --git a/definitions/grib2/tables/8/4.1.2.table b/definitions/grib2/tables/8/4.1.2.table new file mode 100644 index 000000000..c216c5620 --- /dev/null +++ b/definitions/grib2/tables/8/4.1.2.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Vegetation/biomass +1 1 Agri-/aquacultural special products +2 2 Transportation-related products +3 3 Soil products +4 4 Fire weather products +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.1.3.table b/definitions/grib2/tables/8/4.1.3.table new file mode 100644 index 000000000..9a8158c82 --- /dev/null +++ b/definitions/grib2/tables/8/4.1.3.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/8/4.1.table b/definitions/grib2/tables/8/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/8/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/8/4.10.table b/definitions/grib2/tables/8/4.10.table new file mode 100644 index 000000000..8f0a2894d --- /dev/null +++ b/definitions/grib2/tables/8/4.10.table @@ -0,0 +1,15 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (temporal variance) +8 8 Difference (value at the start of time range minus value at the end) +9 ratio Ratio +10 10 Standardized anomaly +# 11-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/8/4.11.table b/definitions/grib2/tables/8/4.11.table new file mode 100644 index 000000000..63c46fbaf --- /dev/null +++ b/definitions/grib2/tables/8/4.11.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.12.table b/definitions/grib2/tables/8/4.12.table new file mode 100644 index 000000000..ad38e7b3b --- /dev/null +++ b/definitions/grib2/tables/8/4.12.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Maintenance mode +1 1 Clear air +2 2 Precipitation +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.13.table b/definitions/grib2/tables/8/4.13.table new file mode 100644 index 000000000..e3c0fa8ff --- /dev/null +++ b/definitions/grib2/tables/8/4.13.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No quality control applied +1 1 Quality control applied +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.14.table b/definitions/grib2/tables/8/4.14.table new file mode 100644 index 000000000..e1ad5194f --- /dev/null +++ b/definitions/grib2/tables/8/4.14.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No clutter filter used +1 1 Clutter filter used +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.15.table b/definitions/grib2/tables/8/4.15.table new file mode 100644 index 000000000..fb2eda6e8 --- /dev/null +++ b/definitions/grib2/tables/8/4.15.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Data is calculated directly from the source grid with no interpolation +1 1 Bilinear interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +2 2 Bicubic interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +3 3 Using the value from the source grid grid-point which is nearest to the nominal grid-point +4 4 Budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +5 5 Spectral interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +6 6 Neighbor-budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.151.table b/definitions/grib2/tables/8/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/8/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.192.table b/definitions/grib2/tables/8/4.192.table new file mode 100644 index 000000000..e1fd91594 --- /dev/null +++ b/definitions/grib2/tables/8/4.192.table @@ -0,0 +1,4 @@ +1 1 first +2 2 second +3 3 third +4 4 fourth diff --git a/definitions/grib2/tables/8/4.2.0.0.table b/definitions/grib2/tables/8/4.2.0.0.table new file mode 100644 index 000000000..b2e04861b --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.0.table @@ -0,0 +1,25 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew-point temperature (K) +7 7 Dew-point depression (or deficit) (K) +8 8 Lapse rate (K/m) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew-point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin temperature (K) +18 18 Snow temperature (top of snow) (K) +19 19 Turbulent transfer coefficient for heat (Numeric) +20 20 Turbulent diffusion coefficient for heat (m2/s) +# 21-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.1.table b/definitions/grib2/tables/8/4.2.0.1.table new file mode 100644 index 000000000..82c8cb3ed --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.1.table @@ -0,0 +1,95 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Specific humidity (kg/kg) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg/kg) +3 3 Precipitable water (kg m-2) +4 4 Vapour pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large-scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large-scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age (d) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type ((Code table 4.201)) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg/kg) +22 22 Cloud mixing ratio (kg/kg) +23 23 Ice water mixing ratio (kg/kg) +24 24 Rain mixing ratio (kg/kg) +25 25 Snow mixing ratio (kg/kg) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category ((Code table 4.202)) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg/kg) +33 33 Categorical rain ((Code table 4.222)) +34 34 Categorical freezing rain ((Code table 4.222)) +35 35 Categorical ice pellets ((Code table 4.222)) +36 36 Categorical snow ((Code table 4.222)) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +47 47 Large scale water precipitation (non-convective) (kg m-2) +48 48 Convective water precipitation (kg m-2) +49 49 Total water precipitation (kg m-2) +50 50 Total snow precipitation (kg m-2) +51 51 Total column water (Vertically integrated total water (vapour + cloud water/ice)) (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale snowfall rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m/s) +58 58 Convective snowfall rate (m/s) +59 59 Large scale snowfall rate (m/s) +60 60 Snow depth water equivalent (kg m-2) +61 61 Snow density (kg m-3) +62 62 Snow evaporation (kg m-2) +63 63 Reserved +64 64 Total column integrated water vapour (kg m-2) +65 65 Rain precipitation rate (kg m-2 s-1) +66 66 Snow precipitation rate (kg m-2 s-1) +67 67 Freezing rain precipitation rate (kg m-2 s-1) +68 68 Ice pellets precipitation rate (kg m-2 s-1) +69 69 Total column integrated cloud water (kg m-2) +70 70 Total column integrated cloud ice (kg m-2) +71 71 Hail mixing ratio (kg/kg) +72 72 Total column integrated hail (kg m-2) +73 73 Hail precipitation rate (kg m-2 s-1) +74 74 Total column integrated graupel (kg m-2) +75 75 Graupel (snow pellets) precipitation rate (kg m-2 s-1) +76 76 Convective rain rate (kg m-2 s-1) +77 77 Large scale rain rate (kg m-2 s-1) +78 78 Total column integrated water (all components including precipitation) (kg m-2) +79 79 Evaporation rate (kg m-2 s-1) +80 80 Total Condensate (kg/kg) +81 81 Total Column-Integrated Condensate (kg m-2) +82 82 Cloud Ice Mixing-Ratio (kg/kg) +83 83 Specific cloud liquid water content (kg/kg) +84 84 Specific cloud ice water content (kg/kg) +85 85 Specific rain water content (kg/kg) +86 86 Specific snow water content (kg/kg) +# 87-89 Reserved +90 90 Total kinematic moisture flux (kg kg-1 m s-1) +91 91 u-component (zonal) kinematic moisture flux (kg kg-1 m s-1) +92 92 v-component (meridional) kinematic moisture flux (kg kg-1 m s-1) +# 93-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.13.table b/definitions/grib2/tables/8/4.2.0.13.table new file mode 100644 index 000000000..5396d90a5 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.13.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Aerosol type ((Code table 4.205)) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.14.table b/definitions/grib2/tables/8/4.2.0.14.table new file mode 100644 index 000000000..8de7c5532 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.14.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Total ozone (DU) +1 1 Ozone mixing ratio (kg/kg) +2 2 Total column integrated ozone (DU) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.15.table b/definitions/grib2/tables/8/4.2.0.15.table new file mode 100644 index 000000000..0334fba8e --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.15.table @@ -0,0 +1,19 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Base spectrum width (m/s) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m/s) +3 3 Vertically-integrated liquid (kg/m) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +9 9 Reflectivity of cloud droplets (dB) +10 10 Reflectivity of cloud ice (dB) +11 11 Reflectivity of snow (dB) +12 12 Reflectivity of rain (dB) +13 13 Reflectivity of graupel (dB) +14 14 Reflectivity of hail (dB) +# 15-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.16.table b/definitions/grib2/tables/8/4.2.0.16.table new file mode 100644 index 000000000..cf426c5e2 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.16.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Equivalent radar reflectivity factor for rain (mm6 m-3) +1 1 Equivalent radar reflectivity factor for snow (mm6 m-3) +2 2 Equivalent radar reflectivity factor for parameterized convection (mm6 m-3) +3 3 Echo top (m) +4 4 Reflectivity (dB) +5 5 Composite reflectivity (dB) +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.18.table b/definitions/grib2/tables/8/4.2.0.18.table new file mode 100644 index 000000000..18d4cb5cf --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.18.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +9 9 Reserved +10 10 Air concentration (Bq m-3) +11 11 Wet deposition (Bq m-2) +12 12 Dry deposition (Bq m-2) +13 13 Total deposition (wet + dry) (Bq m-2) +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.19.table b/definitions/grib2/tables/8/4.2.0.19.table new file mode 100644 index 000000000..bfac8c258 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.19.table @@ -0,0 +1,31 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 Mixed layer depth (m) +4 4 Volcanic ash ((Code table 4.206)) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing ((Code table 4.207)) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence ((Code table 4.208)) +11 11 Turbulent kinetic energy (J/kg) +12 12 Planetary boundary-layer regime ((Code table 4.209)) +13 13 Contrail intensity ((Code table 4.210)) +14 14 Contrail engine type ((Code table 4.211)) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +19 19 Snow albedo (%) +20 20 Icing (%) +21 21 In-cloud turbulence (%) +22 22 Clear air turbulence (CAT) (%) +23 23 Supercooled large droplet probability (%) +24 24 Convective turbulent kinetic energy (J/kg) +25 25 Weather Interpretation ww (WMO) (-) +26 26 Convective outlook (Code table 4.224) +# 27-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.190.table b/definitions/grib2/tables/8/4.2.0.190.table new file mode 100644 index 000000000..7bb15c2d8 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.190.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Arbitrary text string (CCITT IA5) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.191.table b/definitions/grib2/tables/8/4.2.0.191.table new file mode 100644 index 000000000..3f0d7df5f --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.191.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Geographical latitude (deg N) +2 2 Geographical longitude (deg E) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing value diff --git a/definitions/grib2/tables/8/4.2.0.2.table b/definitions/grib2/tables/8/4.2.0.2.table new file mode 100644 index 000000000..0f266badd --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.2.table @@ -0,0 +1,38 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Wind direction (from which blowing) (degree true) (deg) +1 1 Wind speed (m/s) +2 2 u-component of wind (m/s) +3 3 v-component of wind (m/s) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (/s) +8 8 Vertical velocity (pressure) (Pa/s) +9 9 Vertical velocity (geometric) (m/s) +10 10 Absolute vorticity (/s) +11 11 Absolute divergence (/s) +12 12 Relative vorticity (/s) +13 13 Relative divergence (/s) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (/s) +16 16 Vertical v-component shear (/s) +17 17 Momentum flux, u-component (N m-2) +18 18 Momentum flux, v-component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m/s) +22 22 Wind speed (gust) (m/s) +23 23 u-component of wind (gust) (m/s) +24 24 v-component of wind (gust) (m/s) +25 25 Vertical speed shear (/s) +26 26 Horizontal momentum flux (N m-2) +27 27 u-component storm motion (m/s) +28 28 v-component storm motion (m/s) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m/s) +31 31 Turbulent diffusion coefficient for momentum (m2/s) +32 32 Eta coordinate vertical velocity (/s) +33 33 Wind fetch (m) +# 34-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.20.table b/definitions/grib2/tables/8/4.2.0.20.table new file mode 100644 index 000000000..93359c564 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.20.table @@ -0,0 +1,42 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Mass density (concentration) (kg m-3) +1 1 Column-integrated mass density (kg m-2) +2 2 Mass mixing ratio (mass fraction in air) (kg/kg) +3 3 Atmosphere emission mass flux (kg m-2 s-1) +4 4 Atmosphere net production mass flux (kg m-2 s-1) +5 5 Atmosphere net production and emission mass flux (kg m-2 s-1) +6 6 Surface dry deposition mass flux (kg m-2 s-1) +7 7 Surface wet deposition mass flux (kg m-2 s-1) +8 8 Atmosphere re-emission mass flux (kg m-2 s-1) +9 9 Wet deposition by large-scale precipitation mass flux (kg m-2 s-1) +10 10 Wet deposition by convective precipitation mass flux (kg m-2 s-1) +11 11 Sedimentation mass flux (kg m-2 s-1) +12 12 Dry deposition mass flux (kg m-2 s-1) +13 13 Transfer from hydrophobic to hydrophilic (kg kg-1 s-1) +14 14 Transfer from SO2 (Sulphur dioxide) to SO4 (sulphate) (kg kg-1 s-1) +# 15-49 Reserved +50 50 Amount in atmosphere (mol) +51 51 Concentration in air (mol m-3) +52 52 Volume mixing ratio (fraction in air) (mol/mol) +53 53 Chemical gross production rate of concentration (mol m-3 s-1) +54 54 Chemical gross destruction rate of concentration (mol m-3 s-1) +55 55 Surface flux (mol m-2 s-1) +56 56 Changes of amount in atmosphere (mol/s) +57 57 Total yearly average burden of the atmosphere (mol) +58 58 Total yearly averaged atmospheric loss (mol/s) +59 59 Aerosol number concentration (m-3) +# 60-99 Reserved +100 100 Surface area density (aerosol) (/m) +101 101 Atmosphere optical thickness (m) +102 102 Aerosol optical thickness (Numeric) +103 103 Single scattering albedo (Numeric) +104 104 Asymmetry factor (Numeric) +105 105 Aerosol extinction coefficient (m-1) +106 106 Aerosol absorption coefficient (m-1) +107 107 Aerosol lidar backscatter from satellite (m-1 sr-1) +108 108 Aerosol lidar backscatter from the ground (m-1 sr-1) +109 109 Aerosol lidar extinction from satellite (m-1) +110 110 Aerosol lidar extinction from the ground (m-1) +# 111-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.3.table b/definitions/grib2/tables/8/4.2.0.3.table new file mode 100644 index 000000000..32822fd06 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.3.table @@ -0,0 +1,30 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Pressure (Pa) +1 1 Pressure reduced to MSL (Pa) +2 2 Pressure tendency (Pa/s) +3 3 ICAO Standard Atmosphere Reference Height (m) +4 4 Geopotential (m2 s-2) +5 5 Geopotential height (gpm) +6 6 Geometric height (m) +7 7 Standard deviation of height (m) +8 8 Pressure anomaly (Pa) +9 9 Geopotential height anomaly (gpm) +10 10 Density (kg m-3) +11 11 Altimeter setting (Pa) +12 12 Thickness (m) +13 13 Pressure altitude (m) +14 14 Density altitude (m) +15 15 5-wave geopotential height (gpm) +16 16 Zonal flux of gravity wave stress (N m-2) +17 17 Meridional flux of gravity wave stress (N m-2) +18 18 Planetary boundary layer height (m) +19 19 5-wave geopotential height anomaly (gpm) +20 20 Standard deviation of sub-grid scale orography (m) +21 21 Angle of sub-gridscale orography (rad) +22 22 Slope of sub-gridscale orography (Numeric) +23 23 Gravity wave dissipation (W m-2) +24 24 Anisotropy of sub-gridscale orography (Numeric) +25 25 Natural logarithm of pressure in Pa (Numeric) +# 26-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.4.table b/definitions/grib2/tables/8/4.2.0.4.table new file mode 100644 index 000000000..66fd563ca --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.4.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short-wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +8 8 Upward short-wave radiation flux (W m-2) +9 9 Net short wave radiation flux (W m-2) +10 10 Photosynthetically active radiation (W m-2) +11 11 Net short-wave radiation flux, clear sky (W m-2) +12 12 Downward UV radiation (W m-2) +# 13-49 Reserved +50 50 UV index (under clear sky) (Numeric) +51 51 UV index (Numeric) +# 52-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.5.table b/definitions/grib2/tables/8/4.2.0.5.table new file mode 100644 index 000000000..20fa23cc5 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.5.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net long-wave radiation flux (surface) (W m-2) +1 1 Net long-wave radiation flux (top of atmosphere) (W m-2) +2 2 Long-wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long wave radiation flux (W m-2) +6 6 Net long-wave radiation flux, clear sky (W m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.6.table b/definitions/grib2/tables/8/4.2.0.6.table new file mode 100644 index 000000000..4c9ac2fbc --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.6.table @@ -0,0 +1,38 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Cloud ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type ((Code table 4.203)) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage ((Code table 4.204)) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J/kg) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg/kg) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg/kg) +24 24 Sunshine (Numeric) +25 25 Horizontal extent of cumulonimbus (CB) (%) +26 26 Height of convective cloud base (m) +27 27 Height of convective cloud top (m) +28 28 Number concentration of cloud droplets (/kg) +29 29 Number concentration of cloud ice (/kg) +30 30 Number density of cloud droplets (m-3) +31 31 Number density of cloud ice (m-3) +32 32 Fraction of cloud cover (Numeric) +33 33 Sunshine duration (s) +# 34-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.0.7.table b/definitions/grib2/tables/8/4.2.0.7.table new file mode 100644 index 000000000..6015e75f0 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.0.7.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J/kg) +7 7 Convective inhibition (J/kg) +8 8 Storm relative helicity (J/kg) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +13 13 Showalter index (K) +14 14 Reserved +15 15 Updraft helicity (m2 s-2) +# 16-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.1.0.table b/definitions/grib2/tables/8/4.2.1.0.table new file mode 100644 index 000000000..bf88fd6a4 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.1.0.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely-sensed snow cover ((Code table 4.215)) +3 3 Elevation of snow-covered terrain ((Code table 4.216)) +4 4 Snow water equivalent per cent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.1.1.table b/definitions/grib2/tables/8/4.2.1.1.table new file mode 100644 index 000000000..0b8c86ba4 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.1.1.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Conditional per cent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) +1 1 Per cent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.1.2.table b/definitions/grib2/tables/8/4.2.1.2.table new file mode 100644 index 000000000..a534db546 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.1.2.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Water depth (m) +1 1 Water temperature (K) +2 2 Water fraction (Proportion) +3 3 Sediment thickness (m) +4 4 Sediment temperature (K) +5 5 Ice thickness (m) +6 6 Ice temperature (K) +7 7 Ice cover (Proportion) +8 8 Land cover (0 = water, 1 = land) (Proportion) +9 9 Shape factor with respect to salinity profile (-) +10 10 Shape factor with respect to temperature profile in thermocline (-) +11 11 Attenuation coefficient of water with respect to solar attenuation coefficient of water with respect to solar radiation (m-1) +12 12 Salinity (kg kg-1) diff --git a/definitions/grib2/tables/8/4.2.10.0.table b/definitions/grib2/tables/8/4.2.10.0.table new file mode 100644 index 000000000..a570f33c8 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.10.0.table @@ -0,0 +1,53 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (degree true) (deg) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (degree true) (deg) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (degree true) (deg) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (degree true) (deg) +13 13 Secondary wave mean period (s) +14 14 Direction of combined wind waves and swell (degree true) (deg) +15 15 Mean period of combined wind waves and swell (s) +16 16 Coefficient of drag with waves (-) +17 17 Friction velocity (m s-1) +18 18 Wave stress (N m-2) +19 19 Normalised wave stress (-) +20 20 Mean square slope of waves (-) +21 21 u-component surface Stokes drift (m s-1) +22 22 v-component surface Stokes drift (m s-1) +23 23 Period of maximum individual wave height (s) +24 24 Maximum individual wave height (m) +25 25 Inverse mean wave frequency (s) +26 26 Inverse mean frequency of the wind waves (s) +27 27 Inverse mean frequency of the total swell (s) +28 28 Mean zero-crossing wave period (s) +29 29 Mean zero-crossing period of the wind waves (s) +30 30 Mean zero-crossing period of the total swell (s) +31 31 Wave directional width (-) +32 32 Directional width of the wind waves (-) +33 33 Directional width of the total swell (-) +34 34 Peak wave period (s) +35 35 Peak period of the wind waves (s) +36 36 Peak period of the total swell (s) +37 37 Altimeter wave height (m) +38 38 Altimeter corrected wave height (m) +39 39 Altimeter range relative correction (-) +40 40 10 metre neutral wind speed over waves (m s-1) +41 41 10 metre wind direction over waves (deg) +42 42 Wave energy spectrum (m2 s rad-1) +43 43 Kurtosis of the sea surface elevation due to waves (-) +44 44 Benjamin-Feir index (-) +45 45 Spectral peakedness factor (s-1) +46 46 2-dim spectral energy density E (f, θ) (m2 s) +47 47 Frequency spectral energy density E (f) = ∫ E (f,θ) dθ (m2 s) +48 48 Directional spectral energy density E (θ)= ∫ E (f,θ) df / m0 (-) +# 49-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.10.1.table b/definitions/grib2/tables/8/4.2.10.1.table new file mode 100644 index 000000000..b619b4c41 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.10.1.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Current direction (degree true) (deg) +1 1 Current speed (m/s) +2 2 u-component of current (m/s) +3 3 v-component of current (m/s) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.10.191.table b/definitions/grib2/tables/8/4.2.10.191.table new file mode 100644 index 000000000..182149f08 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.10.191.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Meridional overturning stream function (m3/s) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.10.2.table b/definitions/grib2/tables/8/4.2.10.2.table new file mode 100644 index 000000000..5287c5edc --- /dev/null +++ b/definitions/grib2/tables/8/4.2.10.2.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (degree true) (deg) +3 3 Speed of ice drift (m/s) +4 4 u-component of ice drift (m/s) +5 5 v-component of ice drift (m/s) +6 6 Ice growth rate (m/s) +7 7 Ice divergence (/s) +8 8 Ice temperature (K) +9 9 Ice internal pressure (Pa m) +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.10.3.table b/definitions/grib2/tables/8/4.2.10.3.table new file mode 100644 index 000000000..c7d71e1d8 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.10.3.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.10.4.table b/definitions/grib2/tables/8/4.2.10.4.table new file mode 100644 index 000000000..898bfd87d --- /dev/null +++ b/definitions/grib2/tables/8/4.2.10.4.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg/kg) +4 4 Ocean vertical heat diffusivity (m2 s-1) +5 5 Ocean vertical salt diffusivity (m2 s-1) +6 6 Ocean vertical momentum diffusivity (m2 s-1) +7 7 Bathymetry (m) +# 8-10 Reserved +11 11 Shape factor with respect to salinity profile (-) +12 12 Shape factor with respect to temperature profile in thermocline (-) +13 13 Attenuation coefficient of water with respect to solar radiation (m-1) +14 14 Water depth (m) +15 15 Water temperature (K) +# 16-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.192.0.table b/definitions/grib2/tables/8/4.2.192.0.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.0.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.1.table b/definitions/grib2/tables/8/4.2.192.1.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.1.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.10.table b/definitions/grib2/tables/8/4.2.192.10.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.10.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.100.table b/definitions/grib2/tables/8/4.2.192.100.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.100.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.101.table b/definitions/grib2/tables/8/4.2.192.101.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.101.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.102.table b/definitions/grib2/tables/8/4.2.192.102.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.102.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.103.table b/definitions/grib2/tables/8/4.2.192.103.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.103.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.104.table b/definitions/grib2/tables/8/4.2.192.104.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.104.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.105.table b/definitions/grib2/tables/8/4.2.192.105.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.105.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.106.table b/definitions/grib2/tables/8/4.2.192.106.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.106.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.107.table b/definitions/grib2/tables/8/4.2.192.107.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.107.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.108.table b/definitions/grib2/tables/8/4.2.192.108.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.108.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.109.table b/definitions/grib2/tables/8/4.2.192.109.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.109.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.11.table b/definitions/grib2/tables/8/4.2.192.11.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.11.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.110.table b/definitions/grib2/tables/8/4.2.192.110.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.110.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.111.table b/definitions/grib2/tables/8/4.2.192.111.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.111.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.112.table b/definitions/grib2/tables/8/4.2.192.112.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.112.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.113.table b/definitions/grib2/tables/8/4.2.192.113.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.113.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.114.table b/definitions/grib2/tables/8/4.2.192.114.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.114.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.115.table b/definitions/grib2/tables/8/4.2.192.115.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.115.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.116.table b/definitions/grib2/tables/8/4.2.192.116.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.116.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.117.table b/definitions/grib2/tables/8/4.2.192.117.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.117.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.118.table b/definitions/grib2/tables/8/4.2.192.118.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.118.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.119.table b/definitions/grib2/tables/8/4.2.192.119.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.119.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.12.table b/definitions/grib2/tables/8/4.2.192.12.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.12.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.120.table b/definitions/grib2/tables/8/4.2.192.120.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.120.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.121.table b/definitions/grib2/tables/8/4.2.192.121.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.121.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.122.table b/definitions/grib2/tables/8/4.2.192.122.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.122.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.123.table b/definitions/grib2/tables/8/4.2.192.123.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.123.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.124.table b/definitions/grib2/tables/8/4.2.192.124.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.124.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.125.table b/definitions/grib2/tables/8/4.2.192.125.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.125.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.126.table b/definitions/grib2/tables/8/4.2.192.126.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.126.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.127.table b/definitions/grib2/tables/8/4.2.192.127.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.127.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.128.table b/definitions/grib2/tables/8/4.2.192.128.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.128.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.129.table b/definitions/grib2/tables/8/4.2.192.129.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.129.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.13.table b/definitions/grib2/tables/8/4.2.192.13.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.13.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.130.table b/definitions/grib2/tables/8/4.2.192.130.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.130.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.131.table b/definitions/grib2/tables/8/4.2.192.131.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.131.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.132.table b/definitions/grib2/tables/8/4.2.192.132.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.132.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.133.table b/definitions/grib2/tables/8/4.2.192.133.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.133.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.134.table b/definitions/grib2/tables/8/4.2.192.134.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.134.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.135.table b/definitions/grib2/tables/8/4.2.192.135.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.135.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.136.table b/definitions/grib2/tables/8/4.2.192.136.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.136.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.137.table b/definitions/grib2/tables/8/4.2.192.137.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.137.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.138.table b/definitions/grib2/tables/8/4.2.192.138.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.138.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.139.table b/definitions/grib2/tables/8/4.2.192.139.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.139.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.14.table b/definitions/grib2/tables/8/4.2.192.14.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.14.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.140.table b/definitions/grib2/tables/8/4.2.192.140.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.140.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.141.table b/definitions/grib2/tables/8/4.2.192.141.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.141.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.142.table b/definitions/grib2/tables/8/4.2.192.142.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.142.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.143.table b/definitions/grib2/tables/8/4.2.192.143.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.143.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.144.table b/definitions/grib2/tables/8/4.2.192.144.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.144.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.145.table b/definitions/grib2/tables/8/4.2.192.145.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.145.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.146.table b/definitions/grib2/tables/8/4.2.192.146.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.146.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.147.table b/definitions/grib2/tables/8/4.2.192.147.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.147.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.148.table b/definitions/grib2/tables/8/4.2.192.148.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.148.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.149.table b/definitions/grib2/tables/8/4.2.192.149.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.149.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.15.table b/definitions/grib2/tables/8/4.2.192.15.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.15.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.150.table b/definitions/grib2/tables/8/4.2.192.150.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.150.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.151.table b/definitions/grib2/tables/8/4.2.192.151.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.151.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.152.table b/definitions/grib2/tables/8/4.2.192.152.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.152.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.153.table b/definitions/grib2/tables/8/4.2.192.153.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.153.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.154.table b/definitions/grib2/tables/8/4.2.192.154.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.154.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.155.table b/definitions/grib2/tables/8/4.2.192.155.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.155.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.156.table b/definitions/grib2/tables/8/4.2.192.156.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.156.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.157.table b/definitions/grib2/tables/8/4.2.192.157.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.157.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.158.table b/definitions/grib2/tables/8/4.2.192.158.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.158.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.159.table b/definitions/grib2/tables/8/4.2.192.159.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.159.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.16.table b/definitions/grib2/tables/8/4.2.192.16.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.16.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.160.table b/definitions/grib2/tables/8/4.2.192.160.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.160.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.161.table b/definitions/grib2/tables/8/4.2.192.161.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.161.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.162.table b/definitions/grib2/tables/8/4.2.192.162.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.162.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.163.table b/definitions/grib2/tables/8/4.2.192.163.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.163.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.164.table b/definitions/grib2/tables/8/4.2.192.164.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.164.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.165.table b/definitions/grib2/tables/8/4.2.192.165.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.165.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.166.table b/definitions/grib2/tables/8/4.2.192.166.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.166.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.167.table b/definitions/grib2/tables/8/4.2.192.167.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.167.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.168.table b/definitions/grib2/tables/8/4.2.192.168.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.168.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.169.table b/definitions/grib2/tables/8/4.2.192.169.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.169.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.17.table b/definitions/grib2/tables/8/4.2.192.17.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.17.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.170.table b/definitions/grib2/tables/8/4.2.192.170.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.170.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.171.table b/definitions/grib2/tables/8/4.2.192.171.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.171.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.172.table b/definitions/grib2/tables/8/4.2.192.172.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.172.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.173.table b/definitions/grib2/tables/8/4.2.192.173.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.173.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.174.table b/definitions/grib2/tables/8/4.2.192.174.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.174.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.175.table b/definitions/grib2/tables/8/4.2.192.175.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.175.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.176.table b/definitions/grib2/tables/8/4.2.192.176.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.176.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.177.table b/definitions/grib2/tables/8/4.2.192.177.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.177.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.178.table b/definitions/grib2/tables/8/4.2.192.178.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.178.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.179.table b/definitions/grib2/tables/8/4.2.192.179.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.179.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.18.table b/definitions/grib2/tables/8/4.2.192.18.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.18.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.180.table b/definitions/grib2/tables/8/4.2.192.180.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.180.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.181.table b/definitions/grib2/tables/8/4.2.192.181.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.181.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.182.table b/definitions/grib2/tables/8/4.2.192.182.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.182.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.183.table b/definitions/grib2/tables/8/4.2.192.183.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.183.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.184.table b/definitions/grib2/tables/8/4.2.192.184.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.184.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.185.table b/definitions/grib2/tables/8/4.2.192.185.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.185.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.186.table b/definitions/grib2/tables/8/4.2.192.186.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.186.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.187.table b/definitions/grib2/tables/8/4.2.192.187.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.187.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.188.table b/definitions/grib2/tables/8/4.2.192.188.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.188.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.189.table b/definitions/grib2/tables/8/4.2.192.189.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.189.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.19.table b/definitions/grib2/tables/8/4.2.192.19.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.19.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.190.table b/definitions/grib2/tables/8/4.2.192.190.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.190.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.191.table b/definitions/grib2/tables/8/4.2.192.191.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.191.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.192.table b/definitions/grib2/tables/8/4.2.192.192.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.192.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.193.table b/definitions/grib2/tables/8/4.2.192.193.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.193.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.194.table b/definitions/grib2/tables/8/4.2.192.194.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.194.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.195.table b/definitions/grib2/tables/8/4.2.192.195.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.195.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.196.table b/definitions/grib2/tables/8/4.2.192.196.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.196.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.197.table b/definitions/grib2/tables/8/4.2.192.197.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.197.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.198.table b/definitions/grib2/tables/8/4.2.192.198.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.198.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.199.table b/definitions/grib2/tables/8/4.2.192.199.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.199.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.2.table b/definitions/grib2/tables/8/4.2.192.2.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.2.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.20.table b/definitions/grib2/tables/8/4.2.192.20.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.20.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.200.table b/definitions/grib2/tables/8/4.2.192.200.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.200.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.201.table b/definitions/grib2/tables/8/4.2.192.201.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.201.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.202.table b/definitions/grib2/tables/8/4.2.192.202.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.202.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.203.table b/definitions/grib2/tables/8/4.2.192.203.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.203.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.204.table b/definitions/grib2/tables/8/4.2.192.204.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.204.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.205.table b/definitions/grib2/tables/8/4.2.192.205.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.205.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.206.table b/definitions/grib2/tables/8/4.2.192.206.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.206.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.207.table b/definitions/grib2/tables/8/4.2.192.207.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.207.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.208.table b/definitions/grib2/tables/8/4.2.192.208.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.208.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.209.table b/definitions/grib2/tables/8/4.2.192.209.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.209.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.21.table b/definitions/grib2/tables/8/4.2.192.21.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.21.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.210.table b/definitions/grib2/tables/8/4.2.192.210.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.210.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.211.table b/definitions/grib2/tables/8/4.2.192.211.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.211.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.212.table b/definitions/grib2/tables/8/4.2.192.212.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.212.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.213.table b/definitions/grib2/tables/8/4.2.192.213.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.213.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.214.table b/definitions/grib2/tables/8/4.2.192.214.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.214.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.215.table b/definitions/grib2/tables/8/4.2.192.215.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.215.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.216.table b/definitions/grib2/tables/8/4.2.192.216.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.216.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.217.table b/definitions/grib2/tables/8/4.2.192.217.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.217.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.218.table b/definitions/grib2/tables/8/4.2.192.218.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.218.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.219.table b/definitions/grib2/tables/8/4.2.192.219.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.219.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.22.table b/definitions/grib2/tables/8/4.2.192.22.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.22.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.220.table b/definitions/grib2/tables/8/4.2.192.220.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.220.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.221.table b/definitions/grib2/tables/8/4.2.192.221.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.221.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.222.table b/definitions/grib2/tables/8/4.2.192.222.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.222.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.223.table b/definitions/grib2/tables/8/4.2.192.223.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.223.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.224.table b/definitions/grib2/tables/8/4.2.192.224.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.224.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.225.table b/definitions/grib2/tables/8/4.2.192.225.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.225.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.226.table b/definitions/grib2/tables/8/4.2.192.226.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.226.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.227.table b/definitions/grib2/tables/8/4.2.192.227.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.227.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.228.table b/definitions/grib2/tables/8/4.2.192.228.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.228.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.229.table b/definitions/grib2/tables/8/4.2.192.229.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.229.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.23.table b/definitions/grib2/tables/8/4.2.192.23.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.23.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.230.table b/definitions/grib2/tables/8/4.2.192.230.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.230.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.231.table b/definitions/grib2/tables/8/4.2.192.231.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.231.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.232.table b/definitions/grib2/tables/8/4.2.192.232.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.232.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.233.table b/definitions/grib2/tables/8/4.2.192.233.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.233.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.234.table b/definitions/grib2/tables/8/4.2.192.234.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.234.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.235.table b/definitions/grib2/tables/8/4.2.192.235.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.235.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.236.table b/definitions/grib2/tables/8/4.2.192.236.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.236.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.237.table b/definitions/grib2/tables/8/4.2.192.237.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.237.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.238.table b/definitions/grib2/tables/8/4.2.192.238.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.238.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.239.table b/definitions/grib2/tables/8/4.2.192.239.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.239.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.24.table b/definitions/grib2/tables/8/4.2.192.24.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.24.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.240.table b/definitions/grib2/tables/8/4.2.192.240.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.240.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.241.table b/definitions/grib2/tables/8/4.2.192.241.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.241.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.242.table b/definitions/grib2/tables/8/4.2.192.242.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.242.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.243.table b/definitions/grib2/tables/8/4.2.192.243.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.243.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.244.table b/definitions/grib2/tables/8/4.2.192.244.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.244.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.245.table b/definitions/grib2/tables/8/4.2.192.245.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.245.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.246.table b/definitions/grib2/tables/8/4.2.192.246.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.246.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.247.table b/definitions/grib2/tables/8/4.2.192.247.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.247.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.248.table b/definitions/grib2/tables/8/4.2.192.248.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.248.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.249.table b/definitions/grib2/tables/8/4.2.192.249.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.249.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.25.table b/definitions/grib2/tables/8/4.2.192.25.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.25.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.250.table b/definitions/grib2/tables/8/4.2.192.250.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.250.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.251.table b/definitions/grib2/tables/8/4.2.192.251.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.251.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.252.table b/definitions/grib2/tables/8/4.2.192.252.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.252.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.253.table b/definitions/grib2/tables/8/4.2.192.253.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.253.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.254.table b/definitions/grib2/tables/8/4.2.192.254.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.254.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.255.table b/definitions/grib2/tables/8/4.2.192.255.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.255.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.26.table b/definitions/grib2/tables/8/4.2.192.26.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.26.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.27.table b/definitions/grib2/tables/8/4.2.192.27.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.27.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.28.table b/definitions/grib2/tables/8/4.2.192.28.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.28.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.29.table b/definitions/grib2/tables/8/4.2.192.29.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.29.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.3.table b/definitions/grib2/tables/8/4.2.192.3.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.3.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.30.table b/definitions/grib2/tables/8/4.2.192.30.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.30.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.31.table b/definitions/grib2/tables/8/4.2.192.31.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.31.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.32.table b/definitions/grib2/tables/8/4.2.192.32.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.32.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.33.table b/definitions/grib2/tables/8/4.2.192.33.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.33.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.34.table b/definitions/grib2/tables/8/4.2.192.34.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.34.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.35.table b/definitions/grib2/tables/8/4.2.192.35.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.35.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.36.table b/definitions/grib2/tables/8/4.2.192.36.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.36.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.37.table b/definitions/grib2/tables/8/4.2.192.37.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.37.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.38.table b/definitions/grib2/tables/8/4.2.192.38.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.38.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.39.table b/definitions/grib2/tables/8/4.2.192.39.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.39.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.4.table b/definitions/grib2/tables/8/4.2.192.4.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.4.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.40.table b/definitions/grib2/tables/8/4.2.192.40.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.40.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.41.table b/definitions/grib2/tables/8/4.2.192.41.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.41.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.42.table b/definitions/grib2/tables/8/4.2.192.42.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.42.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.43.table b/definitions/grib2/tables/8/4.2.192.43.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.43.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.44.table b/definitions/grib2/tables/8/4.2.192.44.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.44.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.45.table b/definitions/grib2/tables/8/4.2.192.45.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.45.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.46.table b/definitions/grib2/tables/8/4.2.192.46.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.46.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.47.table b/definitions/grib2/tables/8/4.2.192.47.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.47.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.48.table b/definitions/grib2/tables/8/4.2.192.48.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.48.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.49.table b/definitions/grib2/tables/8/4.2.192.49.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.49.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.5.table b/definitions/grib2/tables/8/4.2.192.5.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.5.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.50.table b/definitions/grib2/tables/8/4.2.192.50.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.50.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.51.table b/definitions/grib2/tables/8/4.2.192.51.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.51.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.52.table b/definitions/grib2/tables/8/4.2.192.52.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.52.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.53.table b/definitions/grib2/tables/8/4.2.192.53.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.53.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.54.table b/definitions/grib2/tables/8/4.2.192.54.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.54.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.55.table b/definitions/grib2/tables/8/4.2.192.55.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.55.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.56.table b/definitions/grib2/tables/8/4.2.192.56.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.56.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.57.table b/definitions/grib2/tables/8/4.2.192.57.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.57.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.58.table b/definitions/grib2/tables/8/4.2.192.58.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.58.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.59.table b/definitions/grib2/tables/8/4.2.192.59.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.59.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.6.table b/definitions/grib2/tables/8/4.2.192.6.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.6.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.60.table b/definitions/grib2/tables/8/4.2.192.60.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.60.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.61.table b/definitions/grib2/tables/8/4.2.192.61.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.61.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.62.table b/definitions/grib2/tables/8/4.2.192.62.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.62.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.63.table b/definitions/grib2/tables/8/4.2.192.63.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.63.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.64.table b/definitions/grib2/tables/8/4.2.192.64.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.64.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.65.table b/definitions/grib2/tables/8/4.2.192.65.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.65.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.66.table b/definitions/grib2/tables/8/4.2.192.66.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.66.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.67.table b/definitions/grib2/tables/8/4.2.192.67.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.67.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.68.table b/definitions/grib2/tables/8/4.2.192.68.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.68.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.69.table b/definitions/grib2/tables/8/4.2.192.69.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.69.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.7.table b/definitions/grib2/tables/8/4.2.192.7.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.7.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.70.table b/definitions/grib2/tables/8/4.2.192.70.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.70.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.71.table b/definitions/grib2/tables/8/4.2.192.71.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.71.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.72.table b/definitions/grib2/tables/8/4.2.192.72.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.72.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.73.table b/definitions/grib2/tables/8/4.2.192.73.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.73.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.74.table b/definitions/grib2/tables/8/4.2.192.74.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.74.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.75.table b/definitions/grib2/tables/8/4.2.192.75.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.75.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.76.table b/definitions/grib2/tables/8/4.2.192.76.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.76.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.77.table b/definitions/grib2/tables/8/4.2.192.77.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.77.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.78.table b/definitions/grib2/tables/8/4.2.192.78.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.78.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.79.table b/definitions/grib2/tables/8/4.2.192.79.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.79.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.8.table b/definitions/grib2/tables/8/4.2.192.8.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.8.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.80.table b/definitions/grib2/tables/8/4.2.192.80.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.80.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.81.table b/definitions/grib2/tables/8/4.2.192.81.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.81.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.82.table b/definitions/grib2/tables/8/4.2.192.82.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.82.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.83.table b/definitions/grib2/tables/8/4.2.192.83.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.83.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.84.table b/definitions/grib2/tables/8/4.2.192.84.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.84.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.85.table b/definitions/grib2/tables/8/4.2.192.85.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.85.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.86.table b/definitions/grib2/tables/8/4.2.192.86.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.86.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.87.table b/definitions/grib2/tables/8/4.2.192.87.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.87.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.88.table b/definitions/grib2/tables/8/4.2.192.88.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.88.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.89.table b/definitions/grib2/tables/8/4.2.192.89.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.89.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.9.table b/definitions/grib2/tables/8/4.2.192.9.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.9.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.90.table b/definitions/grib2/tables/8/4.2.192.90.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.90.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.91.table b/definitions/grib2/tables/8/4.2.192.91.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.91.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.92.table b/definitions/grib2/tables/8/4.2.192.92.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.92.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.93.table b/definitions/grib2/tables/8/4.2.192.93.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.93.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.94.table b/definitions/grib2/tables/8/4.2.192.94.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.94.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.95.table b/definitions/grib2/tables/8/4.2.192.95.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.95.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.96.table b/definitions/grib2/tables/8/4.2.192.96.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.96.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.97.table b/definitions/grib2/tables/8/4.2.192.97.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.97.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.98.table b/definitions/grib2/tables/8/4.2.192.98.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.98.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.192.99.table b/definitions/grib2/tables/8/4.2.192.99.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.192.99.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/8/4.2.2.0.table b/definitions/grib2/tables/8/4.2.2.0.table new file mode 100644 index 000000000..772efa607 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.2.0.table @@ -0,0 +1,37 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Land cover (0 = sea, 1 = land) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg-2 s-1) +7 7 Model terrain height (m) +8 8 Land use ((Code table 4.212)) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadar's mixing length scale (m) +15 15 Canopy conductance (m/s) +16 16 Minimal stomatal resistance (s/m) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy (Proportion) +20 20 Humidity parameter in canopy conductance (Proportion) +21 21 Soil moisture parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +23 23 Column-integrated soil water (kg m-2) +24 24 Heat flux (W m-2) +25 25 Volumetric soil moisture (m3 m-3) +26 26 Wilting point (kg m-3) +27 27 Volumetric wilting point (m3 m-3) +28 28 Leaf area index (Numeric) +29 29 Evergreen forest (Numeric) +30 30 Deciduous forest (Numeric) +31 31 Normalized differential vegetation index (NDVI) (Numeric) +32 32 Root depth of vegetation (m) +# 33-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.2.3.table b/definitions/grib2/tables/8/4.2.2.3.table new file mode 100644 index 000000000..27e48a37c --- /dev/null +++ b/definitions/grib2/tables/8/4.2.2.3.table @@ -0,0 +1,27 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Soil type ((Code table 4.213)) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +10 10 Liquid volumetric soil moisture (non-frozen) (m3 m-3) +11 11 Volumetric transpiration stress-onset (soil moisture) (m3 m-3) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +13 13 Volumetric direct evaporation cease (soil moisture) (m3 m-3) +14 14 Direct evaporation cease (soil moisture) (kg m-3) +15 15 Soil porosity (m3 m-3) +16 16 Volumetric saturation of soil moisture (m3 m-3) +17 17 Saturation of soil moisture (kg m-3) +18 18 Soil Temperature (K) +19 19 Soil moisture (kg m-3) +20 20 Column-integrated soil moisture (kg m-2) +21 21 Soil ice (kg m-3) +22 22 Column-integrated soil ice (kg m-2) +# 23-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.2.4.table b/definitions/grib2/tables/8/4.2.2.4.table new file mode 100644 index 000000000..a418a7022 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.2.4.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Fire outlook (Code table 4.224) +1 1 Fire outlook due to dry thunderstorm (Code table 4.224) +2 2 Haines Index (Numeric) diff --git a/definitions/grib2/tables/8/4.2.3.0.table b/definitions/grib2/tables/8/4.2.3.0.table new file mode 100644 index 000000000..8309784af --- /dev/null +++ b/definitions/grib2/tables/8/4.2.3.0.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +9 9 Fire detection indicator (Code table 4.223) +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.3.1.table b/definitions/grib2/tables/8/4.2.3.1.table new file mode 100644 index 000000000..0cb47d203 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.3.1.table @@ -0,0 +1,28 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m/s) +5 5 Estimated v component of wind (m/s) +6 6 Number of pixel used (Numeric) +7 7 Solar zenith angle (deg) +8 8 Relative azimuth angle (deg) +9 9 Reflectance in 0.6 micron channel (%) +10 10 Reflectance in 0.8 micron channel (%) +11 11 Reflectance in 1.6 micron channel (%) +12 12 Reflectance in 3.9 micron channel (%) +13 13 Atmospheric divergence (/s) +14 14 Cloudy brightness temperature (K) +15 15 Clear-sky brightness temperature (K) +16 16 Cloudy radiance (with respect to wave number) (W m-1 sr-1) +17 17 Clear-sky radiance (with respect to wave number) (W m-1 sr-1) +18 18 Reserved +19 19 Wind speed (m/s) +20 20 Aerosol optical thickness at 0.635 um +21 21 Aerosol optical thickness at 0.810 um +22 22 Aerosol optical thickness at 1.640 um +23 23 Angstrom coefficient +# 24-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.2.table b/definitions/grib2/tables/8/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/8/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/8/4.201.table b/definitions/grib2/tables/8/4.201.table new file mode 100644 index 000000000..76a0abfb1 --- /dev/null +++ b/definitions/grib2/tables/8/4.201.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.202.table b/definitions/grib2/tables/8/4.202.table new file mode 100644 index 000000000..4dd307a8e --- /dev/null +++ b/definitions/grib2/tables/8/4.202.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 0-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.203.table b/definitions/grib2/tables/8/4.203.table new file mode 100644 index 000000000..716de0f65 --- /dev/null +++ b/definitions/grib2/tables/8/4.203.table @@ -0,0 +1,26 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground-based fog beneath the lowest layer +12 12 Stratus - ground-based fog beneath the lowest layer +13 13 Stratocumulus - ground-based fog beneath the lowest layer +14 14 Cumulus - ground-based fog beneath the lowest layer +15 15 Altostratus - ground-based fog beneath the lowest layer +16 16 Nimbostratus - ground-based fog beneath the lowest layer +17 17 Altocumulus - ground-based fog beneath the lowest layer +18 18 Cirrostratus - ground-based fog beneath the lowest layer +19 19 Cirrocumulus - ground-based fog beneath the lowest layer +20 20 Cirrus - ground-based fog beneath the lowest layer +# 21-190 Reserved +191 191 Unknown +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.204.table b/definitions/grib2/tables/8/4.204.table new file mode 100644 index 000000000..1696453f1 --- /dev/null +++ b/definitions/grib2/tables/8/4.204.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 None +1 1 Isolated (1-2%) +2 2 Few (3-5%) +3 3 Scattered (16-45%) +4 4 Numerous (> 45%) +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.205.table b/definitions/grib2/tables/8/4.205.table new file mode 100644 index 000000000..298942c66 --- /dev/null +++ b/definitions/grib2/tables/8/4.205.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Aerosol not present +1 1 Aerosol present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.206.table b/definitions/grib2/tables/8/4.206.table new file mode 100644 index 000000000..a5e318e5e --- /dev/null +++ b/definitions/grib2/tables/8/4.206.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Not present +1 1 Present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.207.table b/definitions/grib2/tables/8/4.207.table new file mode 100644 index 000000000..602d22b92 --- /dev/null +++ b/definitions/grib2/tables/8/4.207.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Trace +5 5 Heavy +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.208.table b/definitions/grib2/tables/8/4.208.table new file mode 100644 index 000000000..1739ad9e7 --- /dev/null +++ b/definitions/grib2/tables/8/4.208.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.209.table b/definitions/grib2/tables/8/4.209.table new file mode 100644 index 000000000..15c8d8739 --- /dev/null +++ b/definitions/grib2/tables/8/4.209.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Stable +2 2 Mechanically-driven turbulence +3 3 Forced convection +4 4 Free convection +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.210.table b/definitions/grib2/tables/8/4.210.table new file mode 100644 index 000000000..6ba112476 --- /dev/null +++ b/definitions/grib2/tables/8/4.210.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Contrail not present +1 1 Contrail present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.211.table b/definitions/grib2/tables/8/4.211.table new file mode 100644 index 000000000..b11ab50ef --- /dev/null +++ b/definitions/grib2/tables/8/4.211.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Low bypass +1 1 High bypass +2 2 Non-bypass +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.212.table b/definitions/grib2/tables/8/4.212.table new file mode 100644 index 000000000..f086845a8 --- /dev/null +++ b/definitions/grib2/tables/8/4.212.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.213.table b/definitions/grib2/tables/8/4.213.table new file mode 100644 index 000000000..efe7aadb7 --- /dev/null +++ b/definitions/grib2/tables/8/4.213.table @@ -0,0 +1,21 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +12 12 Loam +13 13 Peat +14 14 Rock +15 15 Ice +16 16 Water +# 17-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.215.table b/definitions/grib2/tables/8/4.215.table new file mode 100644 index 000000000..7c97dc11f --- /dev/null +++ b/definitions/grib2/tables/8/4.215.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 0-49 Reserved +50 50 No-snow/no-cloud +# 51-99 Reserved +100 100 Clouds +# 101-249 Reserved +250 250 Snow +# 251-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.216.table b/definitions/grib2/tables/8/4.216.table new file mode 100644 index 000000000..77294f77b --- /dev/null +++ b/definitions/grib2/tables/8/4.216.table @@ -0,0 +1,96 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 0-90 Elevation in increments of 100 m +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +# 91-253 Reserved +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/8/4.217.table b/definitions/grib2/tables/8/4.217.table new file mode 100644 index 000000000..4341dff57 --- /dev/null +++ b/definitions/grib2/tables/8/4.217.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.218.table b/definitions/grib2/tables/8/4.218.table new file mode 100644 index 000000000..4408f43a4 --- /dev/null +++ b/definitions/grib2/tables/8/4.218.table @@ -0,0 +1,38 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No scene identified +1 1 Green needle-leafed forest +2 2 Green broad-leafed forest +3 3 Deciduous needle-leafed forest +4 4 Deciduous broad-leafed forest +5 5 Deciduous mixed forest +6 6 Closed shrub-land +7 7 Open shrub-land +8 8 Woody savannah +9 9 Savannah +10 10 Grassland +11 11 Permanent wetland +12 12 Cropland +13 13 Urban +14 14 Vegetation / crops +15 15 Permanent snow / ice +16 16 Barren desert +17 17 Water bodies +18 18 Tundra +# 19-96 Reserved +97 97 Snow / ice on land +98 98 Snow / ice on water +99 99 Sun-glint +100 100 General cloud +101 101 Low cloud / fog / Stratus +102 102 Low cloud / Stratocumulus +103 103 Low cloud / unknown type +104 104 Medium cloud / Nimbostratus +105 105 Medium cloud / Altostratus +106 106 Medium cloud / unknown type +107 107 High cloud / Cumulus +108 108 High cloud / Cirrus +109 109 High cloud / unknown +110 110 Unknown cloud type +# 111-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.219.table b/definitions/grib2/tables/8/4.219.table new file mode 100644 index 000000000..8a4b2cbbf --- /dev/null +++ b/definitions/grib2/tables/8/4.219.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Nominal cloud top height quality +1 1 Fog in segment +2 2 Poor quality height estimation +3 3 Fog in segment and poor quality height estimation +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.220.table b/definitions/grib2/tables/8/4.220.table new file mode 100644 index 000000000..bdb7a7482 --- /dev/null +++ b/definitions/grib2/tables/8/4.220.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Latitude +1 1 Longitude +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.221.table b/definitions/grib2/tables/8/4.221.table new file mode 100644 index 000000000..880fcda79 --- /dev/null +++ b/definitions/grib2/tables/8/4.221.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Not included +1 1 Extrapolated +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.222.table b/definitions/grib2/tables/8/4.222.table new file mode 100644 index 000000000..34e515d52 --- /dev/null +++ b/definitions/grib2/tables/8/4.222.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No +1 1 Yes +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.223.table b/definitions/grib2/tables/8/4.223.table new file mode 100644 index 000000000..4f72889f7 --- /dev/null +++ b/definitions/grib2/tables/8/4.223.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No fire detected +1 1 Possible fire detected +2 2 Probable fire detected +3 3 Missing value diff --git a/definitions/grib2/tables/8/4.224.table b/definitions/grib2/tables/8/4.224.table new file mode 100644 index 000000000..cdacb1081 --- /dev/null +++ b/definitions/grib2/tables/8/4.224.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No risk area +1 1 Reserved +2 2 General thunderstorm risk area +3 3 Reserved +4 4 Slight risk area +5 5 Reserved +6 6 Moderate risk area +7 7 Reserved +8 8 High risk area +# 9-10 Reserved +11 11 Dry thunderstorm (dry lightning) risk area +# 12-13 Reserved +14 14 Critical risk area +# 15-17 Reserved +18 18 Extremely critical risk area +# 19-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/8/4.230.table b/definitions/grib2/tables/8/4.230.table new file mode 100644 index 000000000..6e83fa085 --- /dev/null +++ b/definitions/grib2/tables/8/4.230.table @@ -0,0 +1,415 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Ozone +1 1 Water vapour +2 2 Methane +3 3 Carbon dioxide +4 4 Carbon monoxide +5 5 Nitrogen dioxide +6 6 Nitrous oxide +7 7 Formaldehyde +8 8 Sulphur dioxide +9 9 Ammonia +10 10 Ammonium +11 11 Nitrogen monoxide +12 12 Atomic oxygen +13 13 Nitrate radical +14 14 Hydroperoxyl radical +15 15 Dinitrogen pentoxide +16 16 Nitrous acid +17 17 Nitric acid +18 18 Peroxynitric acid +19 19 Hydrogen peroxide +20 20 Molecular hydrogen +21 21 Atomic nitrogen +22 22 Sulphate +23 23 Radon +24 24 Elemental mercury +25 25 Divalent mercury +26 26 Atomic chlorine +27 27 Chlorine monoxide +28 28 Dichlorine peroxide +29 29 Hypochlorous acid +30 30 Chlorine nitrate +31 31 Chlorine dioxide +32 32 Atomic bromine +33 33 Bromine monoxide +34 34 Bromine chloride +35 35 Hydrogen bromide +36 36 Hypobromous acid +37 37 Bromine nitrate +#38-9999 Reserved +10000 10000 Hydroxyl radical +10001 10001 Methyl peroxy radical +10002 10002 Methyl hydroperoxide +10004 10004 Methanol +10005 10005 Formic acid +10006 10006 Hydrogen Cyanide +10007 10007 Aceto nitrile +10008 10008 Ethane +10009 10009 Ethene (= Ethylene) +10010 10010 Ethyne (= Acetylene) +10011 10011 Ethanol +10012 10012 Acetic acid +10013 10013 Peroxyacetyl nitrate +10014 10014 Propane +10015 10015 Propene +10016 10016 Butanes +10017 10017 Isoprene +10018 10018 Alpha pinene +10019 10019 Beta pinene +10020 10020 Limonene +10021 10021 Benzene +10022 10022 Toluene +10023 10023 Xylene +#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...) +10500 10500 Dimethyl sulphide +#10501-20000 Reserved +20001 20001 Hydrogen chloride +20002 20002 CFC-11 +20003 20003 CFC-12 +20004 20004 CFC-113 +20005 20005 CFC-113a +20006 20006 CFC-114 +20007 20007 CFC-115 +20008 20008 HCFC-22 +20009 20009 HCFC-141b +20010 20010 HCFC-142b +20011 20011 Halon-1202 +20012 20012 Halon-1211 +20013 20013 Halon-1301 +20014 20014 Halon-2402 +20015 20015 Methyl chloride (HCC-40) +20016 20016 Carbon tetrachloride (HCC-10) +20017 20017 HCC-140a +20018 20018 Methyl bromide (HBC-40B1) +20019 20019 Hexachlorocyclohexane (HCH) +20020 20020 Alpha hexachlorocyclohexane +20021 20021 Hexachlorobiphenyl (PCB-153) +#20022-29999 Reserved +30000 30000 Radioactive pollutant (tracer, defined by originating centre) +#30001-30009 Reserved +30010 30010 Hydrogen H-3 +30011 30011 Hydrogen organic bounded H-3o +30012 30012 Hydrogen inorganic H-3a +30013 30013 Beryllium 7 Be-7 +30014 30014 Beryllium 10 Be-10 +30015 30015 Carbon 14 C-14 +30016 30016 Carbon 14 CO2 C-14CO2 +30017 30017 Carbon 14 other gases C-14og +30018 30018 Nitrogen 13 N-13 +30019 30019 Nitrogen 16 N-16 +30020 30020 Fluorine 18 F-18 +30021 30021 Sodium 22 Na-22 +30022 30022 Phosphate 32 P-32 +30023 30023 Phosphate 33 P-33 +30024 30024 Sulfur 35 S-35 +30025 30025 Chlorine 36 Cl-36 +30026 30026 Potassium 40 K-40 +30027 30027 Argon 41 Ar-41 +30028 30028 Calcium 41 Ca-41 +30029 30029 Calcium 45 Ca-45 +30030 30030 Titanium 44 +30031 30031 Scandium 46 Sc-46 +30032 30032 Vanadium 48 V-48 +30033 30033 Vanadium 49 V-49 +30034 30034 Chrome 51 Cr-51 +30035 30035 Manganese 52 Mn-52 +30036 30036 Manganese 54 Mn-54 +30037 30037 Iron 55 Fe-55 +30038 30038 Iron 59 Fe-59 +30039 30039 Cobalt 56 Co-56 +30040 30040 Cobalt 57 Co-57 +30041 30041 Cobalt 58 Co-58 +30042 30042 Cobalt 60 Co-60 +30043 30043 Nickel 59 Ni-59 +30044 30044 Nickel 63 Ni-63 +30045 30045 Zinc 65 Zn-65 +30046 30046 Gallium 67 Ga-67 +30047 30047 Gallium 68 Ga-68 +30048 30048 Germanium 68 Ge-68 +30049 30049 Germanium 69 Ge-69 +30050 30050 Arsenic 73 As-73 +30051 30051 Selenium 75 Se-75 +30052 30052 Selenium 79 Se-79 +30053 30053 Rubidium 81 Rb-81 +30054 30054 Rubidium 83 Rb-83 +30055 30055 Rubidium 84 Rb-84 +30056 30056 Rubidium 86 Rb-86 +30057 30057 Rubidium 87 Rb-87 +30058 30058 Rubidium 88 Rb-88 +30059 30059 Krypton 85 Kr-85 +30060 30060 Krypton 85 metastable Kr-85m +30061 30061 Krypton 87 Kr-87 +30062 30062 Krypton 88 Kr-88 +30063 30063 Krypton 89 Kr-89 +30064 30064 Strontium 85 Sr-85 +30065 30065 Strontium 89 Sr-89 +30066 30066 Strontium 89/90 Sr-8990 +30067 30067 Strontium 90 Sr-90 +30068 30068 Strontium 91 Sr-91 +30069 30069 Strontium 92 Sr-92 +30070 30070 Yttrium 87 Y-87 +30071 30071 Yttrium 88 Y-88 +30072 30072 Yttrium 90 Y-90 +30073 30073 Yttrium 91 Y-91 +30074 30074 Yttrium 91 metastable Y-91m +30075 30075 Yttrium 92 Y-92 +30076 30076 Yttrium 93 Y-93 +30077 30077 Zirconium 89 Zr-89 +30078 30078 Zirconium 93 Zr-93 +30079 30079 Zirconium 95 Zr-95 +30080 30080 Zirconium 97 Zr-97 +30081 30081 Niobium 93 metastable Nb-93m +30082 30082 Niobium 94 Nb-94 +30083 30083 Niobium 95 Nb-95 +30084 30084 Niobium 95 metastable Nb-95m +30085 30085 Niobium 97 Nb-97 +30086 30086 Niobium 97 metastable Nb-97m +30087 30087 Molybdenum 93 Mo-93 +30088 30088 Molybdenum 99 Mo-99 +30089 30089 Technetium 95 metastable Tc-95m +30090 30090 Technetium 96 Tc-96 +30091 30091 Technetium 99 Tc-99 +30092 30092 Technetium 99 metastable Tc-99m +30093 30093 Rhodium 99 Rh-99 +30094 30094 Rhodium 101 Rh-101 +30095 30095 Rhodium 102 metastable Rh-102m +30096 30096 Rhodium 103 metastable Rh-103m +30097 30097 Rhodium 105 Rh-105 +30098 30098 Rhodium 106 Rh-106 +30099 30099 Palladium 100 Pd-100 +30100 30100 Palladium 103 Pd-103 +30101 30101 Palladium 107 Pd-107 +30102 30102 Ruthenium 103 Ru-103 +30103 30103 Ruthenium 105 Ru-105 +30104 30104 Ruthenium 106 Ru-106 +30105 30105 Silver 108 metastable Ag-108m +30106 30106 Silver 110 metastable Ag-110m +30107 30107 Cadmium 109 Cd-109 +30108 30108 Cadmium 113 metastable Cd-113m +30109 30109 Cadmium 115 metastable Cd-115m +30110 30110 Indium 114 metastable In-114m +30111 30111 Tin 113 Sn-113 +30112 30112 Tin 119 metastable Sn-119m +30113 30113 Tin 121 metastable Sn-121m +30114 30114 Tin 122 Sn-122 +30115 30115 Tin 123 Sn-123 +30116 30116 Tin 126 Sn-126 +30117 30117 Antimony 124 Sb-124 +30118 30118 Antimony 125 Sb-125 +30119 30119 Antimony 126 Sb-126 +30120 30120 Antimony 127 Sb-127 +30121 30121 Antimony 129 Sb-129 +30122 30122 Tellurium 123 metastable Te-123m +30123 30123 Tellurium 125 metastable Te-125m +30124 30124 Tellurium 127 Te-127 +30125 30125 Tellurium 127 metastable Te-127m +30126 30126 Tellurium 129 Te-129 +30127 30127 Tellurium 129 metastable Te-129m +30128 30128 Tellurium 131 metastable Te-131m +30129 30129 Tellurium 132 Te-132 +30130 30130 Iodine 123 I-123 +30131 30131 Iodine 124 I-124 +30132 30132 Iodine 125 I-125 +30133 30133 Iodine 126 I-126 +30134 30134 Iodine 129 I-129 +30135 30135 Iodine 129 elementary gaseous I-129g +30136 30136 Iodine 129 organic bounded I-129o +30137 30137 Iodine 131 I-131 +30138 30138 Iodine 131 elementary gaseous I-131g +30139 30139 Iodine 131 organic bounded I-131o +30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go +30141 30141 Iodine 131 aerosol I-131a +30142 30142 Iodine 132 I-132 +30143 30143 Iodine 132 elementary gaseous I-132g +30144 30144 Iodine 132 organic bounded I-132o +30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go +30146 30146 Iodine 132 aerosol I-132a +30147 30147 Iodine 133 I-133 +30148 30148 Iodine 133 elementary gaseous I-133g +30149 30149 Iodine 133 organic bounded I-133o +30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go +30151 30151 Iodine 133 aerosol I-133a +30152 30152 Iodine 134 I-134 +30153 30153 Iodine 134 elementary gaseous I-134g +30154 30154 Iodine 134 organic bounded I-134o +30155 30155 Iodine 135 I-135 +30156 30156 Iodine 135 elementary gaseous I-135g +30157 30157 Iodine 135 organic bounded I-135o +30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go +30159 30159 Iodine 135 aerosol I-135a +30160 30160 Xenon 131 metastable Xe-131m +30161 30161 Xenon 133 Xe-133 +30162 30162 Xenon 133 metastable Xe-133m +30163 30163 Xenon 135 Xe-135 +30164 30164 Xenon 135 metastable Xe-135m +30165 30165 Xenon 137 Xe-137 +30166 30166 Xenon 138 Xe-138 +30167 30167 Xenon sum of all Xenon isotopes Xe-sum +30168 30168 Caesium 131 Cs-131 +30169 30169 Caesium 134 Cs-134 +30170 30170 Caesium 135 Cs-135 +30171 30171 Caesium 136 Cs-136 +30172 30172 Caesium 137 Cs-137 +30173 30173 Barium 133 Ba-133 +30174 30174 Barium 137 metastable Ba-137m +30175 30175 Barium 140 Ba-140 +30176 30176 Cerium 139 Ce-139 +30177 30177 Cerium 141 Ce-141 +30178 30178 Cerium 143 Ce-143 +30179 30179 Cerium 144 Ce-144 +30180 30180 Lanthanum 140 La-140 +30181 30181 Lanthanum 141 La-141 +30182 30182 Praseodymium 143 Pr-143 +30183 30183 Praseodymium 144 Pr-144 +30184 30184 Praseodymium 144 metastable Pr-144m +30185 30185 Samarium 145 Sm-145 +30186 30186 Samarium 147 Sm-147 +30187 30187 Samarium 151 Sm-151 +30188 30188 Neodymium 147 Nd-147 +30189 30189 Promethium 146 Pm-146 +30190 30190 Promethium 147 Pm-147 +30191 30191 Promethium 151 Pm-151 +30192 30192 Europium 152 Eu-152 +30193 30193 Europium 154 Eu-154 +30194 30194 Europium 155 Eu-155 +30195 30195 Gadolinium 153 Gd-153 +30196 30196 Terbium 160 Tb-160 +30197 30197 Holmium 166 metastable Ho-166m +30198 30198 Thulium 170 Tm-170 +30199 30199 Ytterbium 169 Yb-169 +30200 30200 Hafnium 175 Hf-175 +30201 30201 Hafnium 181 Hf-181 +30202 30202 Tantalum 179 Ta-179 +30203 30203 Tantalum 182 Ta-182 +30204 30204 Rhenium 184 Re-184 +30205 30205 Iridium 192 Ir-192 +30206 30206 Mercury 203 Hg-203 +30207 30207 Thallium 204 Tl-204 +30208 30208 Thallium 207 Tl-207 +30209 30209 Thallium 208 Tl-208 +30210 30210 Thallium 209 Tl-209 +30211 30211 Bismuth 205 Bi-205 +30212 30212 Bismuth 207 Bi-207 +30213 30213 Bismuth 210 Bi-210 +30214 30214 Bismuth 211 Bi-211 +30215 30215 Bismuth 212 Bi-212 +30216 30216 Bismuth 213 Bi-213 +30217 30217 Bismuth 214 Bi-214 +30218 30218 Polonium 208 Po-208 +30219 30219 Polonium 210 Po-210 +30220 30220 Polonium 212 Po-212 +30221 30221 Polonium 213 Po-213 +30222 30222 Polonium 214 Po-214 +30223 30223 Polonium 215 Po-215 +30224 30224 Polonium 216 Po-216 +30225 30225 Polonium 218 Po-218 +30226 30226 Lead 209 Pb-209 +30227 30227 Lead 210 Pb-210 +30228 30228 Lead 211 Pb-211 +30229 30229 Lead 212 Pb-212 +30230 30230 Lead 214 Pb-214 +30231 30231 Astatine 217 At-217 +30232 30232 Radon 219 Rn-219 +30233 30233 Radon 220 Rn-220 +30234 30234 Radon 222 Rn-222 +30235 30235 Francium 221 Fr-221 +30236 30236 Francium 223 Fr-223 +30237 30237 Radium 223 Ra-223 +30238 30238 Radium 224 Ra-224 +30239 30239 Radium 225 Ra-225 +30240 30240 Radium 226 Ra-226 +30241 30241 Radium 228 Ra-228 +30242 30242 Actinium 225 Ac-225 +30243 30243 Actinium 227 Ac-227 +30244 30244 Actinium 228 Ac-228 +30245 30245 Thorium 227 Th-227 +30246 30246 Thorium 228 Th-228 +30247 30247 Thorium 229 Th-229 +30248 30248 Thorium 230 Th-230 +30249 30249 Thorium 231 Th-231 +30250 30250 Thorium 232 Th-232 +30251 30251 Thorium 234 Th-234 +30252 30252 Protactinium 231 Pa-231 +30253 30253 Protactinium 233 Pa-233 +30254 30254 Protactinium 234 metastable Pa-234m +30255 30255 Uranium 232 U-232 +30256 30256 Uranium 233 U-233 +30257 30257 Uranium 234 U-234 +30258 30258 Uranium 235 U-235 +30259 30259 Uranium 236 U-236 +30260 30260 Uranium 237 U-237 +30261 30261 Uranium 238 U-238 +30262 30262 Plutonium 236 Pu-236 +30263 30263 Plutonium 238 Pu-238 +30264 30264 Plutonium 239 Pu-239 +30265 30265 Plutonium 240 Pu-240 +30266 30266 Plutonium 241 Pu-241 +30267 30267 Plutonium 242 Pu-242 +30268 30268 Plutonium 244 Pu-244 +30269 30269 Neptunium 237 Np-237 +30270 30270 Neptunium 238 Np-238 +30271 30271 Neptunium 239 Np-239 +30272 30272 Americium 241 Am-241 +30273 30273 Americium 242 Am-242 +30274 30274 Americium 242 metastable Am-242m +30275 30275 Americium 243 Am-243 +30276 30276 Curium 242 Cm-242 +30277 30277 Curium 243 Cm-243 +30278 30278 Curium 244 Cm-244 +30279 30279 Curium 245 Cm-245 +30280 30280 Curium 246 Cm-246 +30281 30281 Curium 247 Cm-247 +30282 30282 Curium 248 Cm-248 +30283 30283 Curium 243/244 Cm-243244 +30284 30284 Plutonium 238/Americium 241 Pu-238Am-241 +30285 30285 Plutonium 239/240 Pu-239240 +30286 30286 Berkelium 249 Bk-249 +30287 30287 Californium 249 Cf-249 +30288 30288 Californium 250 Cf-250 +30289 30289 Californium 252 Cf-252 +30290 30290 Sum aerosol particulates SumAer +30291 30291 Sum Iodine SumIod +30292 30292 Sum noble gas SumNG +30293 30293 Activation gas ActGas +30294 30294 Cs-137 Equivalent EquCs137 +#30295-59999 Reserved +60000 60000 HOx radical (OH+HO2) +60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2) +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen NOx +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy +60005 60005 Total inorganic chlorine Clx +60006 60006 Total inorganic bromine Brx +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped alkanes +60010 60010 Lumped alkenes +60011 60011 Lumped aromatic compounds +60012 60012 Lumped terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon +60016 60016 Lumped oxygenated hydrocarbons +#60017-61999 Reserved +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +62013 62013 Black carbon hydrophilic dry +62014 62014 Black carbon hydrophobic dry +62015 62015 Particulate organic matter hydrophilic dry +62016 62016 Particulate organic matter hydrophobic dry +62017 62017 Nitrate hydrophilic dry +62018 62018 Nitrate hydrophobic dry +#62019-65534 Reserved +65535 65535 Missing diff --git a/definitions/grib2/tables/8/4.233.table b/definitions/grib2/tables/8/4.233.table new file mode 100644 index 000000000..6decde8fd --- /dev/null +++ b/definitions/grib2/tables/8/4.233.table @@ -0,0 +1,415 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Ozone +1 1 Water vapour +2 2 Methane +3 3 Carbon dioxide +4 4 Carbon monoxide +5 5 Nitrogen dioxide +6 6 Nitrous oxide +7 7 Formaldehyde +8 8 Sulphur dioxide +9 9 Ammonia +10 10 Ammonium +11 11 Nitrogen monoxide +12 12 Atomic oxygen +13 13 Nitrate radical +14 14 Hydroperoxyl radical +15 15 Dinitrogen pentoxide +16 16 Nitrous acid +17 17 Nitric acid +18 18 Peroxynitric acid +19 19 Hydrogen peroxide +20 20 Molecular hydrogen +21 21 Atomic nitrogen +22 22 Sulphate +23 23 Radon +24 24 Elemental mercury +25 25 Divalent mercury +26 26 Atomic chlorine +27 27 Chlorine monoxide +28 28 Dichlorine peroxide +29 29 Hypochlorous acid +30 30 Chlorine nitrate +31 31 Chlorine dioxide +32 32 Atomic bromine +33 33 Bromine monoxide +34 34 Bromine chloride +35 35 Hydrogen bromide +36 36 Hypobromous acid +37 37 Bromine nitrate +#38-9999 Reserved +10000 10000 Hydroxyl radical +10001 10001 Methyl peroxy radical +10002 10002 Methyl hydroperoxide +10004 10004 Methanol +10005 10005 Formic acid +10006 10006 Hydrogen Cyanide +10007 10007 Aceto nitrile +10008 10008 Ethane +10009 10009 Ethene (= Ethylene) +10010 10010 Ethyne (= Acetylene) +10011 10011 Ethanol +10012 10012 Acetic acid +10013 10013 Peroxyacetyl nitrate +10014 10014 Propane +10015 10015 Propene +10016 10016 Butanes +10017 10017 Isoprene +10018 10018 Alpha pinene +10019 10019 Beta pinene +10020 10020 Limonene +10021 10021 Benzene +10022 10022 Toluene +10023 10023 Xylene +#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...) +10500 10500 Dimethyl sulphide +#10501-20000 Reserved +20001 20001 Hydrogen chloride +20002 20002 CFC-11 +20003 20003 CFC-12 +20004 20004 CFC-113 +20005 20005 CFC-113a +20006 20006 CFC-114 +20007 20007 CFC-115 +20008 20008 HCFC-22 +20009 20009 HCFC-141b +20010 20010 HCFC-142b +20011 20011 Halon-1202 +20012 20012 Halon-1211 +20013 20013 Halon-1301 +20014 20014 Halon-2402 +20015 20015 Methyl chloride (HCC-40) +20016 20016 Carbon tetrachloride (HCC-10) +20017 20017 HCC-140a +20018 20018 Methyl bromide (HBC-40B1) +20019 20019 Hexachlorocyclohexane (HCH) +20020 20020 Alpha hexachlorocyclohexane +20021 20021 Hexachlorobiphenyl (PCB-153) +#20022-29999 Reserved +30000 30000 Radioactive pollutant (tracer, defined by originating centre) +#30001-30009 Reserved +30010 30010 Hydrogen H-3 +30011 30011 Hydrogen organic bounded H-3o +30012 30012 Hydrogen inorganic H-3a +30013 30013 Beryllium 7 Be-7 +30014 30014 Beryllium 10 Be-10 +30015 30015 Carbon 14 C-14 +30016 30016 Carbon 14 CO2 C-14CO2 +30017 30017 Carbon 14 other gases C-14og +30018 30018 Nitrogen 13 N-13 +30019 30019 Nitrogen 16 N-16 +30020 30020 Fluorine 18 F-18 +30021 30021 Sodium 22 Na-22 +30022 30022 Phosphate 32 P-32 +30023 30023 Phosphate 33 P-33 +30024 30024 Sulfur 35 S-35 +30025 30025 Chlorine 36 Cl-36 +30026 30026 Potassium 40 K-40 +30027 30027 Argon 41 Ar-41 +30028 30028 Calcium 41 Ca-41 +30029 30029 Calcium 45 Ca-45 +30030 30030 Titanium 44 +30031 30031 Scandium 46 Sc-46 +30032 30032 Vanadium 48 V-48 +30033 30033 Vanadium 49 V-49 +30034 30034 Chrome 51 Cr-51 +30035 30035 Manganese 52 Mn-52 +30036 30036 Manganese 54 Mn-54 +30037 30037 Iron 55 Fe-55 +30038 30038 Iron 59 Fe-59 +30039 30039 Cobalt 56 Co-56 +30040 30040 Cobalt 57 Co-57 +30041 30041 Cobalt 58 Co-58 +30042 30042 Cobalt 60 Co-60 +30043 30043 Nickel 59 Ni-59 +30044 30044 Nickel 63 Ni-63 +30045 30045 Zinc 65 Zn-65 +30046 30046 Gallium 67 Ga-67 +30047 30047 Gallium 68 Ga-68 +30048 30048 Germanium 68 Ge-68 +30049 30049 Germanium 69 Ge-69 +30050 30050 Arsenic 73 As-73 +30051 30051 Selenium 75 Se-75 +30052 30052 Selenium 79 Se-79 +30053 30053 Rubidium 81 Rb-81 +30054 30054 Rubidium 83 Rb-83 +30055 30055 Rubidium 84 Rb-84 +30056 30056 Rubidium 86 Rb-86 +30057 30057 Rubidium 87 Rb-87 +30058 30058 Rubidium 88 Rb-88 +30059 30059 Krypton 85 Kr-85 +30060 30060 Krypton 85 metastable Kr-85m +30061 30061 Krypton 87 Kr-87 +30062 30062 Krypton 88 Kr-88 +30063 30063 Krypton 89 Kr-89 +30064 30064 Strontium 85 Sr-85 +30065 30065 Strontium 89 Sr-89 +30066 30066 Strontium 89/90 Sr-8990 +30067 30067 Strontium 90 Sr-90 +30068 30068 Strontium 91 Sr-91 +30069 30069 Strontium 92 Sr-92 +30070 30070 Yttrium 87 Y-87 +30071 30071 Yttrium 88 Y-88 +30072 30072 Yttrium 90 Y-90 +30073 30073 Yttrium 91 Y-91 +30074 30074 Yttrium 91 metastable Y-91m +30075 30075 Yttrium 92 Y-92 +30076 30076 Yttrium 93 Y-93 +30077 30077 Zirconium 89 Zr-89 +30078 30078 Zirconium 93 Zr-93 +30079 30079 Zirconium 95 Zr-95 +30080 30080 Zirconium 97 Zr-97 +30081 30081 Niobium 93 metastable Nb-93m +30082 30082 Niobium 94 Nb-94 +30083 30083 Niobium 95 Nb-95 +30084 30084 Niobium 95 metastable Nb-95m +30085 30085 Niobium 97 Nb-97 +30086 30086 Niobium 97 metastable Nb-97m +30087 30087 Molybdenum 93 Mo-93 +30088 30088 Molybdenum 99 Mo-99 +30089 30089 Technetium 95 metastable Tc-95m +30090 30090 Technetium 96 Tc-96 +30091 30091 Technetium 99 Tc-99 +30092 30092 Technetium 99 metastable Tc-99m +30093 30093 Rhodium 99 Rh-99 +30094 30094 Rhodium 101 Rh-101 +30095 30095 Rhodium 102 metastable Rh-102m +30096 30096 Rhodium 103 metastable Rh-103m +30097 30097 Rhodium 105 Rh-105 +30098 30098 Rhodium 106 Rh-106 +30099 30099 Palladium 100 Pd-100 +30100 30100 Palladium 103 Pd-103 +30101 30101 Palladium 107 Pd-107 +30102 30102 Ruthenium 103 Ru-103 +30103 30103 Ruthenium 105 Ru-105 +30104 30104 Ruthenium 106 Ru-106 +30105 30105 Silver 108 metastable Ag-108m +30106 30106 Silver 110 metastable Ag-110m +30107 30107 Cadmium 109 Cd-109 +30108 30108 Cadmium 113 metastable Cd-113m +30109 30109 Cadmium 115 metastable Cd-115m +30110 30110 Indium 114 metastable In-114m +30111 30111 Tin 113 Sn-113 +30112 30112 Tin 119 metastable Sn-119m +30113 30113 Tin 121 metastable Sn-121m +30114 30114 Tin 122 Sn-122 +30115 30115 Tin 123 Sn-123 +30116 30116 Tin 126 Sn-126 +30117 30117 Antimony 124 Sb-124 +30118 30118 Antimony 125 Sb-125 +30119 30119 Antimony 126 Sb-126 +30120 30120 Antimony 127 Sb-127 +30121 30121 Antimony 129 Sb-129 +30122 30122 Tellurium 123 metastable Te-123m +30123 30123 Tellurium 125 metastable Te-125m +30124 30124 Tellurium 127 Te-127 +30125 30125 Tellurium 127 metastable Te-127m +30126 30126 Tellurium 129 Te-129 +30127 30127 Tellurium 129 metastable Te-129m +30128 30128 Tellurium 131 metastable Te-131m +30129 30129 Tellurium 132 Te-132 +30130 30130 Iodine 123 I-123 +30131 30131 Iodine 124 I-124 +30132 30132 Iodine 125 I-125 +30133 30133 Iodine 126 I-126 +30134 30134 Iodine 129 I-129 +30135 30135 Iodine 129 elementary gaseous I-129g +30136 30136 Iodine 129 organic bounded I-129o +30137 30137 Iodine 131 I-131 +30138 30138 Iodine 131 elementary gaseous I-131g +30139 30139 Iodine 131 organic bounded I-131o +30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go +30141 30141 Iodine 131 aerosol I-131a +30142 30142 Iodine 132 I-132 +30143 30143 Iodine 132 elementary gaseous I-132g +30144 30144 Iodine 132 organic bounded I-132o +30145 30145 Iodine 32 gaseous elementary and organic bounded I-132go +30146 30146 Iodine 132 aerosol I-132a +30147 30147 Iodine 133 I-133 +30148 30148 Iodine 133 elementary gaseous I-133g +30149 30149 Iodine 133 organic bounded I-133o +30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go +30151 30151 Iodine 133 aerosol I-133a +30152 30152 Iodine 134 I-134 +30153 30153 Iodine 134 elementary gaseous I-134g +30154 30154 Iodine 134 organic bounded I-134o +30155 30155 Iodine 135 I-135 +30156 30156 Iodine 135 elementary gaseous I-135g +30157 30157 Iodine 135 organic bounded I-135o +30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go +30159 30159 Iodine 135 aerosol I-135a +30160 30160 Xenon 131 metastable Xe-131m +30161 30161 Xenon 133 Xe-133 +30162 30162 Xenon 133 metastable Xe-133m +30163 30163 Xenon 135 Xe-135 +30164 30164 Xenon 135 metastable Xe-135m +30165 30165 Xenon 137 Xe-137 +30166 30166 Xenon 138 Xe-138 +30167 30167 Xenon sum of all Xenon isotopes Xe-sum +30168 30168 Caesium 131 Cs-131 +30169 30169 Caesium 134 Cs-134 +30170 30170 Caesium 135 Cs-135 +30171 30171 Caesium 136 Cs-136 +30172 30172 Caesium 137 Cs-137 +30173 30173 Barium 133 Ba-133 +30174 30174 Barium 137 metastable Ba-137m +30175 30175 Barium 140 Ba-140 +30176 30176 Cerium 139 Ce-139 +30177 30177 Cerium 141 Ce-141 +30178 30178 Cerium 143 Ce-143 +30179 30179 Cerium 144 Ce-144 +30180 30180 Lanthanum 140 La-140 +30181 30181 Lanthanum 141 La-141 +30182 30182 Praseodymium 143 Pr-143 +30183 30183 Praseodymium 144 Pr-144 +30184 30184 Praseodymium 144 metastable Pr-144m +30185 30185 Samarium 145 Sm-145 +30186 30186 Samarium 147 Sm-147 +30187 30187 Samarium 151 Sm-151 +30188 30188 Neodymium 147 Nd-147 +30189 30189 Promethium 146 Pm-146 +30190 30190 Promethium 147 Pm-147 +30191 30191 Promethium 151 Pm-151 +30192 30192 Europium 152 Eu-152 +30193 30193 Europium 154 Eu-154 +30194 30194 Europium 155 Eu-155 +30195 30195 Gadolinium 153 Gd-153 +30196 30196 Terbium 160 Tb-160 +30197 30197 Holmium 166 metastable Ho-166m +30198 30198 Thulium 170 Tm-170 +30199 30199 Ytterbium 169 Yb-169 +30200 30200 Hafnium 175 Hf-175 +30201 30201 Hafnium 181 Hf-181 +30202 30202 Tantalum 179 Ta-179 +30203 30203 Tantalum 182 Ta-182 +30204 30204 Rhenium 184 Re-184 +30205 30205 Iridium 192 Ir-192 +30206 30206 Mercury 203 Hg-203 +30207 30207 Thallium 204 Tl-204 +30208 30208 Thallium 207 Tl-207 +30209 30209 Thallium 208 Tl-208 +30210 30210 Thallium 209 Tl-209 +30211 30211 Bismuth 205 Bi-205 +30212 30212 Bismuth 207 Bi-207 +30213 30213 Bismuth 210 Bi-210 +30214 30214 Bismuth 211 Bi-211 +30215 30215 Bismuth 212 Bi-212 +30216 30216 Bismuth 213 Bi-213 +30217 30217 Bismuth 214 Bi-214 +30218 30218 Polonium 208 Po-208 +30219 30219 Polonium 210 Po-210 +30220 30220 Polonium 212 Po-212 +30221 30221 Polonium 213 Po-213 +30222 30222 Polonium 214 Po-214 +30223 30223 Polonium 215 Po-215 +30224 30224 Polonium 216 Po-216 +30225 30225 Polonium 218 Po-218 +30226 30226 Lead 209 Pb-209 +30227 30227 Lead 210 Pb-210 +30228 30228 Lead 211 Pb-211 +30229 30229 Lead 212 Pb-212 +30230 30230 Lead 214 Pb-214 +30231 30231 Astatine 217 At-217 +30232 30232 Radon 219 Rn-219 +30233 30233 Radon 220 Rn-220 +30234 30234 Radon 222 Rn-222 +30235 30235 Francium 221 Fr-221 +30236 30236 Francium 223 Fr-223 +30237 30237 Radium 223 Ra-223 +30238 30238 Radium 224 Ra-224 +30239 30239 Radium 225 Ra-225 +30240 30240 Radium 226 Ra-226 +30241 30241 Radium 228 Ra-228 +30242 30242 Actinium 225 Ac-225 +30243 30243 Actinium 227 Ac-227 +30244 30244 Actinium 228 Ac-228 +30245 30245 Thorium 227 Th-227 +30246 30246 Thorium 228 Th-228 +30247 30247 Thorium 229 Th-229 +30248 30248 Thorium 230 Th-230 +30249 30249 Thorium 231 Th-231 +30250 30250 Thorium 232 Th-232 +30251 30251 Thorium 234 Th-234 +30252 30252 Protactinium 231 Pa-231 +30253 30253 Protactinium 233 Pa-233 +30254 30254 Protactinium 234 metastable Pa-234m +30255 30255 Uranium 232 U-232 +30256 30256 Uranium 233 U-233 +30257 30257 Uranium 234 U-234 +30258 30258 Uranium 235 U-235 +30259 30259 Uranium 236 U-236 +30260 30260 Uranium 237 U-237 +30261 30261 Uranium 238 U-238 +30262 30262 Plutonium 236 Pu-236 +30263 30263 Plutonium 238 Pu-238 +30264 30264 Plutonium 239 Pu-239 +30265 30265 Plutonium 240 Pu-240 +30266 30266 Plutonium 241 Pu-241 +30267 30267 Plutonium 242 Pu-242 +30268 30268 Plutonium 244 Pu-244 +30269 30269 Neptunium 237 Np-237 +30270 30270 Neptunium 238 Np-238 +30271 30271 Neptunium 239 Np-239 +30272 30272 Americium 241 Am-241 +30273 30273 Americium 242 Am-242 +30274 30274 Americium 242 metastable Am-242m +30275 30275 Americium 243 Am-243 +30276 30276 Curium 242 Cm-242 +30277 30277 Curium 243 Cm-243 +30278 30278 Curium 244 Cm-244 +30279 30279 Curium 245 Cm-245 +30280 30280 Curium 246 Cm-246 +30281 30281 Curium 247 Cm-247 +30282 30282 Curium 248 Cm-248 +30283 30283 Curium 243/244 Cm-243244 +30284 30284 Plutonium 238/Americium 241 Pu-238Am-241 +30285 30285 Plutonium 239/240 Pu-239240 +30286 30286 Berkelium 249 Bk-249 +30287 30287 Californium 249 Cf-249 +30288 30288 Californium 250 Cf-250 +30289 30289 Californium 252 Cf-252 +30290 30290 Sum aerosol particulates SumAer +30291 30291 Sum Iodine SumIod +30292 30292 Sum noble gas SumNG +30293 30293 Activation gas ActGas +30294 30294 Cs-137 Equivalent EquCs137 +#30295-59999 Reserved +60000 60000 HOx radical (OH+HO2) +60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2) +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen NOx +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy +60005 60005 Total inorganic chlorine Clx +60006 60006 Total inorganic bromine Brx +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped alkanes +60010 60010 Lumped alkenes +60011 60011 Lumped aromatic compounds +60012 60012 Lumped terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon +60016 60016 Lumped oxygenated hydrocarbons +#60017-61999 Reserved +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +62013 62013 Black carbon hydrophilic dry +62014 62014 Black carbon hydrophobic dry +62015 62015 Particulate organic matter hydrophilic dry +62016 62016 Particulate organic matter hydrophobic dry +62017 62017 Nitrate hydrophilic dry +62018 62018 Nitrate hydrophobic dry +#62019-65534 Reserved +65535 65535 Missing diff --git a/definitions/grib2/tables/8/4.3.table b/definitions/grib2/tables/8/4.3.table new file mode 100644 index 000000000..2eda6a044 --- /dev/null +++ b/definitions/grib2/tables/8/4.3.table @@ -0,0 +1,16 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +9 9 Climatological +10 10 Probability-weighted forecast +11 11 Bias-corrected ensemble forecast +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.4.table b/definitions/grib2/tables/8/4.4.table new file mode 100644 index 000000000..2ac2e66ab --- /dev/null +++ b/definitions/grib2/tables/8/4.4.table @@ -0,0 +1,17 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +# 8-9 Reserved +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.5.table b/definitions/grib2/tables/8/4.5.table new file mode 100644 index 000000000..208239f82 --- /dev/null +++ b/definitions/grib2/tables/8/4.5.table @@ -0,0 +1,48 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0 degree C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +10 10 Entire atmosphere +11 11 Cumulonimbus (CB) base (m) +12 12 Cumulonimbus (CB) top (m) +# 13-19 Reserved +20 20 Isothermal level (K) +# 21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level +112 112 Reserved +113 113 Logarithmic hybrid coordinate +# 114-116 Reserved +117 117 Mixed layer depth (m) +118 hhl Hybrid height level +119 hpl Hybrid pressure level +# 120-149 Reserved +150 150 Generalized vertical height coordinate +# 151-159 Reserved +160 160 Depth below sea level m +161 161 Depth below water surface (m) +162 162 Lake or river bottom +163 163 Bottom of sediment layer +164 164 Bottom of thermally active sediment layer +165 165 Bottom of sediment layer penetrated by thermal wave +166 166 Mixing layer +# 167-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.6.table b/definitions/grib2/tables/8/4.6.table new file mode 100644 index 000000000..ac428b0dd --- /dev/null +++ b/definitions/grib2/tables/8/4.6.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +4 4 Multi-model forecast +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.7.table b/definitions/grib2/tables/8/4.7.table new file mode 100644 index 000000000..bbeb36642 --- /dev/null +++ b/definitions/grib2/tables/8/4.7.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members +6 6 Unweighted mean of the cluster members +7 7 Interquartile range (range between the 25th and 75th quantile) +8 8 Minimum of all ensemble members +9 9 Maximum of all ensemble members +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.8.table b/definitions/grib2/tables/8/4.8.table new file mode 100644 index 000000000..addf015e2 --- /dev/null +++ b/definitions/grib2/tables/8/4.8.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Anomaly correlation +1 1 Root mean square +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.9.table b/definitions/grib2/tables/8/4.9.table new file mode 100644 index 000000000..06ab925d9 --- /dev/null +++ b/definitions/grib2/tables/8/4.9.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits (the range includes the lower limit but not the upper limit) +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/4.91.table b/definitions/grib2/tables/8/4.91.table new file mode 100644 index 000000000..4910debbf --- /dev/null +++ b/definitions/grib2/tables/8/4.91.table @@ -0,0 +1,16 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Smaller than first limit +1 1 Greater than second limit +2 2 Between first and second limit. The range includes the first limit but not the second limit +3 3 Greater than first limit +4 4 Smaller than second limit +5 5 Smaller or equal first limit +6 6 Greater or equal second limit +7 7 Between first and second. The range includes the first limit and the second limit +8 8 Greater or equal first limit +9 9 Smaller or equal second limit +10 10 Between first and second limit. The range includes the second limit but not the first limit +11 11 Equal to first limit. +# 12-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/8/5.0.table b/definitions/grib2/tables/8/5.0.table new file mode 100644 index 000000000..c7995a965 --- /dev/null +++ b/definitions/grib2/tables/8/5.0.table @@ -0,0 +1,24 @@ +# CODE TABLE 5.0, Data Representation Template Number +0 0 Grid point data - simple packing +1 1 Matrix value at grid point - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - IEEE floating point data +6 6 Grid point data - simple packing with pre-processing +40 40 Grid point data - JPEG 2000 code stream format +41 41 Grid point data - Portable Network Graphics (PNG) +#42-49 Reserved +50 50 Spectral data - simple packing +51 51 Spherical harmonics data - complex packing +#52-60 Reserved +61 61 Grid point data - simple packing with logarithm pre-processing +# 62-199 Reserved +200 200 Run length packing with level values +# 201-49151 Reserved +# 49152-65534 Reserved for local use +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling +50000 50000 Sperical harmonics ieee packing +50001 50001 Second order packing +50002 50002 Second order packing +65535 65535 Missing diff --git a/definitions/grib2/tables/8/5.1.table b/definitions/grib2/tables/8/5.1.table new file mode 100644 index 000000000..e79e7c101 --- /dev/null +++ b/definitions/grib2/tables/8/5.1.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Floating point +1 1 Integer +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/5.2.table b/definitions/grib2/tables/8/5.2.table new file mode 100644 index 000000000..83539ffa2 --- /dev/null +++ b/definitions/grib2/tables/8/5.2.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Explicit coordinate values set +1 1 Linear coordinates f(1)=C1, f(n)=f(n-1)+C2 +# 2-10 Reserved +11 11 Geometric coordinates f(1)=C1, f(n)=C2*f(n-1) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/5.3.table b/definitions/grib2/tables/8/5.3.table new file mode 100644 index 000000000..455a53920 --- /dev/null +++ b/definitions/grib2/tables/8/5.3.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 1 Direction degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/5.4.table b/definitions/grib2/tables/8/5.4.table new file mode 100644 index 000000000..52a782cb7 --- /dev/null +++ b/definitions/grib2/tables/8/5.4.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Row by row splitting +1 1 General group splitting +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/5.40.table b/definitions/grib2/tables/8/5.40.table new file mode 100644 index 000000000..99e76ca33 --- /dev/null +++ b/definitions/grib2/tables/8/5.40.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Lossless +1 1 Lossy +# 2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/8/5.40000.table b/definitions/grib2/tables/8/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/8/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/8/5.5.table b/definitions/grib2/tables/8/5.5.table new file mode 100644 index 000000000..0be38fd21 --- /dev/null +++ b/definitions/grib2/tables/8/5.5.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/5.50002.table b/definitions/grib2/tables/8/5.50002.table new file mode 100644 index 000000000..10c243cb0 --- /dev/null +++ b/definitions/grib2/tables/8/5.50002.table @@ -0,0 +1,19 @@ +# second order packing modes table + +1 0 no boustrophedonic +1 1 boustrophedonic +2 0 Reserved +2 1 Reserved +3 0 Reserved +3 1 Reserved +4 0 Reserved +4 1 Reserved +5 0 Reserved +5 1 Reserved +6 0 Reserved +6 1 Reserved +7 0 Reserved +7 1 Reserved +8 0 Reserved +8 1 Reserved + diff --git a/definitions/grib2/tables/8/5.6.table b/definitions/grib2/tables/8/5.6.table new file mode 100644 index 000000000..49fdd3fea --- /dev/null +++ b/definitions/grib2/tables/8/5.6.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/8/5.7.table b/definitions/grib2/tables/8/5.7.table new file mode 100644 index 000000000..02755829a --- /dev/null +++ b/definitions/grib2/tables/8/5.7.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 IEEE 32-bit (I=4 in section 7) +2 2 IEEE 64-bit (I=8 in section 7) +3 3 IEEE 128-bit (I=16 in section 7) +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/8/5.8.table b/definitions/grib2/tables/8/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/8/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/8/5.9.table b/definitions/grib2/tables/8/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/8/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/8/6.0.table b/definitions/grib2/tables/8/6.0.table new file mode 100644 index 000000000..0d1cb383c --- /dev/null +++ b/definitions/grib2/tables/8/6.0.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 1-253 A bit map predetermined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same GRIB message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/8/stepType.table b/definitions/grib2/tables/8/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/8/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/9/0.0.table b/definitions/grib2/tables/9/0.0.table new file mode 100644 index 000000000..95a1f5187 --- /dev/null +++ b/definitions/grib2/tables/9/0.0.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Meteorological products +1 1 Hydrological products +2 2 Land surface products +3 3 Space products +# 4-9 Reserved +10 10 Oceanographic products +# 11-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/1.0.table b/definitions/grib2/tables/9/1.0.table new file mode 100644 index 000000000..8f457bcbc --- /dev/null +++ b/definitions/grib2/tables/9/1.0.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Experimental +1 1 Version implemented on 7 November 2001 +2 2 Version implemented on 4 November 2003 +3 3 Version implemented on 2 November 2005 +4 4 Version implemented on 7 November 2007 +5 5 Version implemented on 4 November 2009 +6 6 Version implemented on 15 September 2010 +7 7 Version implemented on 4 May 2011 +8 8 Version implemented on 2 November 2011 +9 9 Version implemented on 2 May 2012 +10 10 Pre-operational to be implemented by next amendment +# 11-254 Future versions +255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used. diff --git a/definitions/grib2/tables/9/1.1.table b/definitions/grib2/tables/9/1.1.table new file mode 100644 index 000000000..5ab801398 --- /dev/null +++ b/definitions/grib2/tables/9/1.1.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Local tables not used. Only table entries and templates from the current master table are valid +# 1-254 Number of local tables version used +255 255 Missing diff --git a/definitions/grib2/tables/9/1.2.table b/definitions/grib2/tables/9/1.2.table new file mode 100644 index 000000000..1fc872e7f --- /dev/null +++ b/definitions/grib2/tables/9/1.2.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Analysis +1 1 Start of forecast +2 2 Verifying time of forecast +3 3 Observation time +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/1.3.table b/definitions/grib2/tables/9/1.3.table new file mode 100644 index 000000000..8ce2713e2 --- /dev/null +++ b/definitions/grib2/tables/9/1.3.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Operational products +1 1 Operational test products +2 2 Research products +3 3 Re-analysis products +4 4 THORPEX Interactive Grand Global Ensemble (TIGGE) +5 5 THORPEX Interactive Grand Global Ensemble (TIGGE) test +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/1.4.table b/definitions/grib2/tables/9/1.4.table new file mode 100644 index 000000000..03d1af08b --- /dev/null +++ b/definitions/grib2/tables/9/1.4.table @@ -0,0 +1,13 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 an Analysis products +1 fc Forecast products +2 af Analysis and forecast products +3 cf Control forecast products +4 pf Perturbed forecast products +5 cp Control and perturbed forecast products +6 sa Processed satellite observations +7 ra Processed radar observations +8 ep Event probability +# 9-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/9/3.0.table b/definitions/grib2/tables/9/3.0.table new file mode 100644 index 000000000..ded50cd1c --- /dev/null +++ b/definitions/grib2/tables/9/3.0.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Specified in Code table 3.1 +1 1 Predetermined grid definition (Defined by originating centre) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 A grid definition does not apply to this product diff --git a/definitions/grib2/tables/9/3.1.table b/definitions/grib2/tables/9/3.1.table new file mode 100644 index 000000000..17633ce1e --- /dev/null +++ b/definitions/grib2/tables/9/3.1.table @@ -0,0 +1,43 @@ +# CODE TABLE 3.1, Grid Definition Template Number +0 0 Latitude/longitude. Also called equidistant cylindrical, or Plate Carree +1 1 Rotated latitude/longitude +2 2 Stretched latitude/longitude +3 3 Stretched and rotated latitude/longitude +# 4-9 Reserved +10 10 Mercator +# 11-19 Reserved +20 20 Polar stereographic projection (Can be south or north) +# 21-29 Reserved +30 30 Lambert conformal (Can be secant or tangent, conical or bipolar) +31 31 Albers equal area +# 32-39 Reserved +40 40 Gaussian latitude/longitude +41 41 Rotated Gaussian latitude/longitude +42 42 Stretched Gaussian latitude/longitude +43 43 Stretched and rotated Gaussian latitude/longitude +# 44-49 Reserved +50 50 Spherical harmonic coefficients +51 51 Rotated spherical harmonic coefficients +52 52 Stretched spherical harmonic coefficients +53 53 Stretched and rotated spherical harmonic coefficients +# 54-89 Reserved +90 90 Space view perspective or orthographic +# 91-99 Reserved +100 100 Triangular grid based on an icosahedron +# 101-109 Reserved +110 110 Equatorial azimuthal equidistant projection +# 111-119 Reserved +120 120 Azimuth-range projection +# 121-129 Reserved +130 130 Irregular latitude/longitude grid +# 131-139 Reserved +140 140 Lambert azimuthal equal area projection +# 141-999 Reserved +1000 1000 Cross-section grid, with points equally spaced on the horizontal +# 1001-1099 Reserved +1100 1100 Hovm�ller diagram grid, with points equally spaced on the horizontal +# 1101-1199 Reserved +1200 1200 Time section grid +# 1201-32767 Reserved +# 32768-65534 Reserved for local use +65535 65535 Missing diff --git a/definitions/grib2/tables/9/3.10.table b/definitions/grib2/tables/9/3.10.table new file mode 100644 index 000000000..72004d23e --- /dev/null +++ b/definitions/grib2/tables/9/3.10.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 Points scan in +i direction, i.e. from pole to Equator +1 1 Points scan in -i direction, i.e. from Equator to pole +2 0 Points scan in +j direction, i.e. from west to east +2 1 Points scan in -j direction, i.e. from east to west +3 0 Adjacent points in i direction are consecutive +3 1 Adjacent points in j direction are consecutive +# 4-8 Reserved diff --git a/definitions/grib2/tables/9/3.11.table b/definitions/grib2/tables/9/3.11.table new file mode 100644 index 000000000..44b3809f6 --- /dev/null +++ b/definitions/grib2/tables/9/3.11.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 There is no appended list +1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows +2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row +3 3 Numbers define the actual latitudes for each row in the grid. The list of numbers are integer values of the valid latitudes in microdegrees (scaled by 10-6) or in unit equal to the ratio of the basic angle and the subdivisions number for each row, in the same order as specified in the scanning mode flag (bit no. 2) +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/9/3.15.table b/definitions/grib2/tables/9/3.15.table new file mode 100644 index 000000000..cc1e62927 --- /dev/null +++ b/definitions/grib2/tables/9/3.15.table @@ -0,0 +1,23 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 0-19 Reserved +20 20 Temperature (K) +# 21-99 Reserved +100 100 Pressure (Pa) +101 101 Pressure deviation from mean sea level (Pa) +102 102 Altitude above mean sea level (m) +103 103 Height above ground (m) +104 104 Sigma coordinate +105 105 Hybrid coordinate +106 106 Depth below land surface (m) +107 pt Potential temperature (theta) (K) +108 108 Pressure deviation from ground to level (Pa) +109 pv Potential vorticity (K m-2 kg-1 s-1) +110 110 Geometrical height (m) +111 111 Eta coordinate +112 112 Geopotential height (gpm) +113 113 Logarithmic hybrid coordinate +# 114-159 Reserved +160 160 Depth below sea level (m) +# 161-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/3.2.table b/definitions/grib2/tables/9/3.2.table new file mode 100644 index 000000000..8897ddc02 --- /dev/null +++ b/definitions/grib2/tables/9/3.2.table @@ -0,0 +1,13 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Earth assumed spherical with radius = 6 367 470.0 m +1 1 Earth assumed spherical with radius specified (in m) by data producer +2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6 378 160.0 m, minor axis = 6 356 775.0 m, f = 1/297.0) +3 3 Earth assumed oblate spheroid with major and minor axes specified (in km) by data producer +4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6 378 137.0 m, minor axis = 6 356 752.314 m, f = 1/298.257 222 101) +5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) +6 6 Earth assumed spherical with radius of 6 371 229.0 m +7 7 Earth assumed oblate spheroid with major or minor axes specified (in m) by data producer +8 8 Earth model assumed spherical with radius of 6 371 200 m, but the horizontal datum of the resulting latitude/longitude field is the WGS84 reference frame +# 9-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/3.20.table b/definitions/grib2/tables/9/3.20.table new file mode 100644 index 000000000..e633569ac --- /dev/null +++ b/definitions/grib2/tables/9/3.20.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Rhumb +1 1 Great circle +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/3.21.table b/definitions/grib2/tables/9/3.21.table new file mode 100644 index 000000000..472c5b1f5 --- /dev/null +++ b/definitions/grib2/tables/9/3.21.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Explicit coordinate values set +1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 +# 2-10 Reserved +11 11 Geometric coordinates f(1) = C1, f(n) = C2 * f(n-1) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/3.3.table b/definitions/grib2/tables/9/3.3.table new file mode 100644 index 000000000..794be4ad9 --- /dev/null +++ b/definitions/grib2/tables/9/3.3.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 1-2 Reserved +3 0 i direction increments not given +3 1 i direction increments given +4 0 j direction increments not given +4 1 j direction increments given +5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions +5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates, respectively +# 6-8 Reserved - set to zero diff --git a/definitions/grib2/tables/9/3.4.table b/definitions/grib2/tables/9/3.4.table new file mode 100644 index 000000000..7c0cf1059 --- /dev/null +++ b/definitions/grib2/tables/9/3.4.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 Points of first row or column scan in the +i (+x) direction +1 1 Points of first row or column scan in the -i (-x) direction +2 0 Points of first row or column scan in the -j (-y) direction +2 1 Points of first row or column scan in the +j (+y) direction +3 0 Adjacent points in i (x) direction are consecutive +3 1 Adjacent points in j (y) direction is consecutive +4 0 All rows scan in the same direction +4 1 Adjacent rows scans in the opposite direction +# 5-8 Reserved diff --git a/definitions/grib2/tables/9/3.5.table b/definitions/grib2/tables/9/3.5.table new file mode 100644 index 000000000..c57d5499d --- /dev/null +++ b/definitions/grib2/tables/9/3.5.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 North Pole is on the projection plane +1 1 South Pole is on the projection plane +2 0 Only one projection centre is used +2 1 Projection is bipolar and symmetric diff --git a/definitions/grib2/tables/9/3.6.table b/definitions/grib2/tables/9/3.6.table new file mode 100644 index 000000000..2c97129dc --- /dev/null +++ b/definitions/grib2/tables/9/3.6.table @@ -0,0 +1,2 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 1 The Associated Legendre Functions of the first kind are defined by: diff --git a/definitions/grib2/tables/9/3.7.table b/definitions/grib2/tables/9/3.7.table new file mode 100644 index 000000000..a23d19d77 --- /dev/null +++ b/definitions/grib2/tables/9/3.7.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 The complex numbers Fnm (see code figure 1 in Code Table 3.6 above) are stored for m³0 as pairs of real numbers Re(Fnm), Im(Fnm) ordered with n increasing from m to N(m), first for m=0 and then for m=1, 2, ... M. (see Note 1) +# 2-254 Reserved +255 255 Missing +# Note: +# +#(1) Values of N(m) for common truncations cases: +# Triangular M = J = K, N(m) = J +# Rhomboidal K = J + M, N(m) = J+m +# Trapezoidal K = J, K > M, N(m) = J diff --git a/definitions/grib2/tables/9/3.8.table b/definitions/grib2/tables/9/3.8.table new file mode 100644 index 000000000..3c46a1f95 --- /dev/null +++ b/definitions/grib2/tables/9/3.8.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Grid points at triangle vertices +1 1 Grid points at centres of triangles +2 2 Grid points at midpoints of triangle sides +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/3.9.table b/definitions/grib2/tables/9/3.9.table new file mode 100644 index 000000000..d0705ea3a --- /dev/null +++ b/definitions/grib2/tables/9/3.9.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 0 Clockwise orientation +1 1 Anti-clockwise (i.e. counter-clockwise) orientation +# 2-8 Reserved diff --git a/definitions/grib2/tables/9/4.0.table b/definitions/grib2/tables/9/4.0.table new file mode 100644 index 000000000..762eae2e0 --- /dev/null +++ b/definitions/grib2/tables/9/4.0.table @@ -0,0 +1,54 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time +1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time +2 2 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer at a point in time +3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time +4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time +5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time +6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time +7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +12 12 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval +15 15 Average, accumulation, extreme values, or other statistically-processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time +# 16-19 Reserved +20 20 Radar product +# 21-29 Reserved +30 30 Satellite product (deprecated) +31 31 Satellite product +32 32 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data +# 33-39 Reserved +311 311 Satellite product auxiliary information +40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents +42 42 Average, accumulation and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents +43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval for atmospheric chemical constituents +44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol +45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for aerosol +46 46 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol +47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non continuous time interval for aerosol +48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of atmospheric aerosol +51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time +# 52-90 Reserved +91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval +# 92-253 Reserved +254 254 CCITT IA5 character string +# 255-999 Reserved +1000 1000 Cross-section of analysis and forecast at a point in time +1001 1001 Cross-section of averaged or otherwise statistically processed analysis or forecast over a range of time +1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed over latitude or longitude +# 1003-1099 Reserved +1100 1100 Hovmoller-type grid with no averaging or other statistical processing +1101 1101 Hovmoller-type grid with averaging or other statistical processing +50001 50001 Forecasting Systems with Variable Resolution in a point in time +50011 50011 Forecasting Systems with Variable Resolution in a continous or non countinous time interval +# 1102-32767 Reserved +# 32768-65534 Reserved for local use +40033 40033 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data +40034 40034 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data +40052 40052 Partitioned parameters at a horizontal level or horizontal layer at a point in time +65535 65535 Missing diff --git a/definitions/grib2/tables/9/4.1.0.table b/definitions/grib2/tables/9/4.1.0.table new file mode 100644 index 000000000..db062c9d9 --- /dev/null +++ b/definitions/grib2/tables/9/4.1.0.table @@ -0,0 +1,27 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Temperature +1 1 Moisture +2 2 Momentum +3 3 Mass +4 4 Short-wave radiation +5 5 Long-wave radiation +6 6 Cloud +7 7 Thermodynamic stability indices +8 8 Kinematic stability indices +9 9 Temperature probabilities +10 10 Moisture probabilities +11 11 Momentum probabilities +12 12 Mass probabilities +13 13 Aerosols +14 14 Trace gases (e.g. ozone, CO2) +15 15 Radar +16 16 Forecast radar imagery +17 17 Electrodynamics +18 18 Nuclear/radiology +19 19 Physical atmospheric properties +20 20 Atmospheric chemical constituents +# 21-189 Reserved +190 190 CCITT IA5 string +191 191 Miscellaneous +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.1.1.table b/definitions/grib2/tables/9/4.1.1.table new file mode 100644 index 000000000..d5a35de75 --- /dev/null +++ b/definitions/grib2/tables/9/4.1.1.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Hydrology basic products +1 1 Hydrology probabilities +2 2 Inland water and sediment properties +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.1.10.table b/definitions/grib2/tables/9/4.1.10.table new file mode 100644 index 000000000..e7337775e --- /dev/null +++ b/definitions/grib2/tables/9/4.1.10.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Waves +1 1 Currents +2 2 Ice +3 3 Surface properties +4 4 Sub-surface properties +# 5-190 Reserved +191 191 Miscellaneous +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.1.192.table b/definitions/grib2/tables/9/4.1.192.table new file mode 100644 index 000000000..c428acab0 --- /dev/null +++ b/definitions/grib2/tables/9/4.1.192.table @@ -0,0 +1,4 @@ +#Discipline 192: ECMWF local parameters +255 255 Missing + + diff --git a/definitions/grib2/tables/9/4.1.2.table b/definitions/grib2/tables/9/4.1.2.table new file mode 100644 index 000000000..c216c5620 --- /dev/null +++ b/definitions/grib2/tables/9/4.1.2.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Vegetation/biomass +1 1 Agri-/aquacultural special products +2 2 Transportation-related products +3 3 Soil products +4 4 Fire weather products +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.1.3.table b/definitions/grib2/tables/9/4.1.3.table new file mode 100644 index 000000000..9a8158c82 --- /dev/null +++ b/definitions/grib2/tables/9/4.1.3.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Image format products +1 1 Quantitative products +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing + + diff --git a/definitions/grib2/tables/9/4.1.table b/definitions/grib2/tables/9/4.1.table new file mode 100644 index 000000000..cc5bb2ffd --- /dev/null +++ b/definitions/grib2/tables/9/4.1.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.1, Category of parameters by product discipline +0 0 Temperature +1 1 Moisture +3 3 Mass +255 255 Missing diff --git a/definitions/grib2/tables/9/4.10.table b/definitions/grib2/tables/9/4.10.table new file mode 100644 index 000000000..8f0a2894d --- /dev/null +++ b/definitions/grib2/tables/9/4.10.table @@ -0,0 +1,15 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 avg Average +1 accum Accumulation +2 max Maximum +3 min Minimum +4 diff Difference (value at the end of time range minus value at the beginning) +5 rms Root mean square +6 sd Standard deviation +7 cov Covariance (temporal variance) +8 8 Difference (value at the start of time range minus value at the end) +9 ratio Ratio +10 10 Standardized anomaly +# 11-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/9/4.11.table b/definitions/grib2/tables/9/4.11.table new file mode 100644 index 000000000..63c46fbaf --- /dev/null +++ b/definitions/grib2/tables/9/4.11.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Successive times processed have same forecast time, start time of forecast is incremented +2 2 Successive times processed have same start time of forecast, forecast time is incremented +3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant +4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant +5 5 Floating subinterval of time between forecast time and end of overall time interval +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.12.table b/definitions/grib2/tables/9/4.12.table new file mode 100644 index 000000000..ad38e7b3b --- /dev/null +++ b/definitions/grib2/tables/9/4.12.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Maintenance mode +1 1 Clear air +2 2 Precipitation +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.13.table b/definitions/grib2/tables/9/4.13.table new file mode 100644 index 000000000..e3c0fa8ff --- /dev/null +++ b/definitions/grib2/tables/9/4.13.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No quality control applied +1 1 Quality control applied +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.14.table b/definitions/grib2/tables/9/4.14.table new file mode 100644 index 000000000..e1ad5194f --- /dev/null +++ b/definitions/grib2/tables/9/4.14.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No clutter filter used +1 1 Clutter filter used +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.15.table b/definitions/grib2/tables/9/4.15.table new file mode 100644 index 000000000..fb2eda6e8 --- /dev/null +++ b/definitions/grib2/tables/9/4.15.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Data is calculated directly from the source grid with no interpolation +1 1 Bilinear interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +2 2 Bicubic interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +3 3 Using the value from the source grid grid-point which is nearest to the nominal grid-point +4 4 Budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +5 5 Spectral interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +6 6 Neighbor-budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.151.table b/definitions/grib2/tables/9/4.151.table new file mode 100644 index 000000000..bcfa0aea7 --- /dev/null +++ b/definitions/grib2/tables/9/4.151.table @@ -0,0 +1,70 @@ +# CODE TABLE 4.15, Confidence level units + +0 0 bad +1 1 suspect +2 2 acceptable +3 3 excellent +192 192 Reserved for local use +193 193 Reserved for local use +194 194 Reserved for local use +195 195 Reserved for local use +196 196 Reserved for local use +197 197 Reserved for local use +198 198 Reserved for local use +199 199 Reserved for local use +200 200 Reserved for local use +201 201 Reserved for local use +202 202 Reserved for local use +203 203 Reserved for local use +204 204 Reserved for local use +205 205 Reserved for local use +206 206 Reserved for local use +207 207 Reserved for local use +208 208 Reserved for local use +209 209 Reserved for local use +210 210 Reserved for local use +211 211 Reserved for local use +212 212 Reserved for local use +213 213 Reserved for local use +214 214 Reserved for local use +215 215 Reserved for local use +216 216 Reserved for local use +217 217 Reserved for local use +218 218 Reserved for local use +219 219 Reserved for local use +220 220 Reserved for local use +221 221 Reserved for local use +222 222 Reserved for local use +223 223 Reserved for local use +224 224 Reserved for local use +225 225 Reserved for local use +226 226 Reserved for local use +227 227 Reserved for local use +228 228 Reserved for local use +229 229 Reserved for local use +230 230 Reserved for local use +231 231 Reserved for local use +232 232 Reserved for local use +233 233 Reserved for local use +234 234 Reserved for local use +235 235 Reserved for local use +236 236 Reserved for local use +237 237 Reserved for local use +238 238 Reserved for local use +239 239 Reserved for local use +240 240 Reserved for local use +241 241 Reserved for local use +242 242 Reserved for local use +243 243 Reserved for local use +244 244 Reserved for local use +245 245 Reserved for local use +246 246 Reserved for local use +247 247 Reserved for local use +248 248 Reserved for local use +249 249 Reserved for local use +250 250 Reserved for local use +251 251 Reserved for local use +252 252 Reserved for local use +253 253 Reserved for local use +254 254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.192.table b/definitions/grib2/tables/9/4.192.table new file mode 100644 index 000000000..e1fd91594 --- /dev/null +++ b/definitions/grib2/tables/9/4.192.table @@ -0,0 +1,4 @@ +1 1 first +2 2 second +3 3 third +4 4 fourth diff --git a/definitions/grib2/tables/9/4.2.0.0.table b/definitions/grib2/tables/9/4.2.0.0.table new file mode 100644 index 000000000..b2e04861b --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.0.table @@ -0,0 +1,25 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Temperature (K) +1 1 Virtual temperature (K) +2 2 Potential temperature (K) +3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K) +4 4 Maximum temperature (K) +5 5 Minimum temperature (K) +6 6 Dew-point temperature (K) +7 7 Dew-point depression (or deficit) (K) +8 8 Lapse rate (K/m) +9 9 Temperature anomaly (K) +10 10 Latent heat net flux (W m-2) +11 11 Sensible heat net flux (W m-2) +12 12 Heat index (K) +13 13 Wind chill factor (K) +14 14 Minimum dew-point depression (K) +15 15 Virtual potential temperature (K) +16 16 Snow phase change heat flux (W m-2) +17 17 Skin temperature (K) +18 18 Snow temperature (top of snow) (K) +19 19 Turbulent transfer coefficient for heat (Numeric) +20 20 Turbulent diffusion coefficient for heat (m2/s) +# 21-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.1.table b/definitions/grib2/tables/9/4.2.0.1.table new file mode 100644 index 000000000..82c8cb3ed --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.1.table @@ -0,0 +1,95 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Specific humidity (kg/kg) +1 1 Relative humidity (%) +2 2 Humidity mixing ratio (kg/kg) +3 3 Precipitable water (kg m-2) +4 4 Vapour pressure (Pa) +5 5 Saturation deficit (Pa) +6 6 Evaporation (kg m-2) +7 7 Precipitation rate (kg m-2 s-1) +8 8 Total precipitation (kg m-2) +9 9 Large-scale precipitation (non-convective) (kg m-2) +10 10 Convective precipitation (kg m-2) +11 11 Snow depth (m) +12 12 Snowfall rate water equivalent (kg m-2 s-1) +13 13 Water equivalent of accumulated snow depth (kg m-2) +14 14 Convective snow (kg m-2) +15 15 Large-scale snow (kg m-2) +16 16 Snow melt (kg m-2) +17 17 Snow age (d) +18 18 Absolute humidity (kg m-3) +19 19 Precipitation type ((Code table 4.201)) +20 20 Integrated liquid water (kg m-2) +21 21 Condensate (kg/kg) +22 22 Cloud mixing ratio (kg/kg) +23 23 Ice water mixing ratio (kg/kg) +24 24 Rain mixing ratio (kg/kg) +25 25 Snow mixing ratio (kg/kg) +26 26 Horizontal moisture convergence (kg kg-1 s-1) +27 27 Maximum relative humidity (%) +28 28 Maximum absolute humidity (kg m-3) +29 29 Total snowfall (m) +30 30 Precipitable water category ((Code table 4.202)) +31 31 Hail (m) +32 32 Graupel (snow pellets) (kg/kg) +33 33 Categorical rain ((Code table 4.222)) +34 34 Categorical freezing rain ((Code table 4.222)) +35 35 Categorical ice pellets ((Code table 4.222)) +36 36 Categorical snow ((Code table 4.222)) +37 37 Convective precipitation rate (kg m-2 s-1) +38 38 Horizontal moisture divergence (kg kg-1 s-1) +39 39 Percent frozen precipitation (%) +40 40 Potential evaporation (kg m-2) +41 41 Potential evaporation rate (W m-2) +42 42 Snow cover (%) +43 43 Rain fraction of total cloud water (Proportion) +44 44 Rime factor (Numeric) +45 45 Total column integrated rain (kg m-2) +46 46 Total column integrated snow (kg m-2) +47 47 Large scale water precipitation (non-convective) (kg m-2) +48 48 Convective water precipitation (kg m-2) +49 49 Total water precipitation (kg m-2) +50 50 Total snow precipitation (kg m-2) +51 51 Total column water (Vertically integrated total water (vapour + cloud water/ice)) (kg m-2) +52 52 Total precipitation rate (kg m-2 s-1) +53 53 Total snowfall rate water equivalent (kg m-2 s-1) +54 54 Large scale precipitation rate (kg m-2 s-1) +55 55 Convective snowfall rate water equivalent (kg m-2 s-1) +56 56 Large scale snowfall rate water equivalent (kg m-2 s-1) +57 57 Total snowfall rate (m/s) +58 58 Convective snowfall rate (m/s) +59 59 Large scale snowfall rate (m/s) +60 60 Snow depth water equivalent (kg m-2) +61 61 Snow density (kg m-3) +62 62 Snow evaporation (kg m-2) +63 63 Reserved +64 64 Total column integrated water vapour (kg m-2) +65 65 Rain precipitation rate (kg m-2 s-1) +66 66 Snow precipitation rate (kg m-2 s-1) +67 67 Freezing rain precipitation rate (kg m-2 s-1) +68 68 Ice pellets precipitation rate (kg m-2 s-1) +69 69 Total column integrated cloud water (kg m-2) +70 70 Total column integrated cloud ice (kg m-2) +71 71 Hail mixing ratio (kg/kg) +72 72 Total column integrated hail (kg m-2) +73 73 Hail precipitation rate (kg m-2 s-1) +74 74 Total column integrated graupel (kg m-2) +75 75 Graupel (snow pellets) precipitation rate (kg m-2 s-1) +76 76 Convective rain rate (kg m-2 s-1) +77 77 Large scale rain rate (kg m-2 s-1) +78 78 Total column integrated water (all components including precipitation) (kg m-2) +79 79 Evaporation rate (kg m-2 s-1) +80 80 Total Condensate (kg/kg) +81 81 Total Column-Integrated Condensate (kg m-2) +82 82 Cloud Ice Mixing-Ratio (kg/kg) +83 83 Specific cloud liquid water content (kg/kg) +84 84 Specific cloud ice water content (kg/kg) +85 85 Specific rain water content (kg/kg) +86 86 Specific snow water content (kg/kg) +# 87-89 Reserved +90 90 Total kinematic moisture flux (kg kg-1 m s-1) +91 91 u-component (zonal) kinematic moisture flux (kg kg-1 m s-1) +92 92 v-component (meridional) kinematic moisture flux (kg kg-1 m s-1) +# 93-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.13.table b/definitions/grib2/tables/9/4.2.0.13.table new file mode 100644 index 000000000..5396d90a5 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.13.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Aerosol type ((Code table 4.205)) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.14.table b/definitions/grib2/tables/9/4.2.0.14.table new file mode 100644 index 000000000..8de7c5532 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.14.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Total ozone (DU) +1 1 Ozone mixing ratio (kg/kg) +2 2 Total column integrated ozone (DU) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.15.table b/definitions/grib2/tables/9/4.2.0.15.table new file mode 100644 index 000000000..4fad64114 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.15.table @@ -0,0 +1,19 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Base spectrum width (m/s) +1 1 Base reflectivity (dB) +2 2 Base radial velocity (m/s) +3 3 Vertically-integrated liquid water (VIL) (kg m-2) +4 4 Layer-maximum base reflectivity (dB) +5 5 Precipitation (kg m-2) +6 6 Radar spectra (1) (-) +7 7 Radar spectra (2) (-) +8 8 Radar spectra (3) (-) +9 9 Reflectivity of cloud droplets (dB) +10 10 Reflectivity of cloud ice (dB) +11 11 Reflectivity of snow (dB) +12 12 Reflectivity of rain (dB) +13 13 Reflectivity of graupel (dB) +14 14 Reflectivity of hail (dB) +# 15-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.16.table b/definitions/grib2/tables/9/4.2.0.16.table new file mode 100644 index 000000000..cf426c5e2 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.16.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Equivalent radar reflectivity factor for rain (mm6 m-3) +1 1 Equivalent radar reflectivity factor for snow (mm6 m-3) +2 2 Equivalent radar reflectivity factor for parameterized convection (mm6 m-3) +3 3 Echo top (m) +4 4 Reflectivity (dB) +5 5 Composite reflectivity (dB) +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.18.table b/definitions/grib2/tables/9/4.2.0.18.table new file mode 100644 index 000000000..18d4cb5cf --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.18.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Air concentration of Caesium 137 (Bq m-3) +1 1 Air concentration of iodine 131 (Bq m-3) +2 2 Air concentration of radioactive pollutant (Bq m-3) +3 3 Ground deposition of Caesium 137 (Bq m-2) +4 4 Ground deposition of iodine 131 (Bq m-2) +5 5 Ground deposition of radioactive pollutant (Bq m-2) +6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3) +7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3) +8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3) +9 9 Reserved +10 10 Air concentration (Bq m-3) +11 11 Wet deposition (Bq m-2) +12 12 Dry deposition (Bq m-2) +13 13 Total deposition (wet + dry) (Bq m-2) +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.19.table b/definitions/grib2/tables/9/4.2.0.19.table new file mode 100644 index 000000000..932fa3a8d --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.19.table @@ -0,0 +1,32 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Visibility (m) +1 1 Albedo (%) +2 2 Thunderstorm probability (%) +3 3 Mixed layer depth (m) +4 4 Volcanic ash ((Code table 4.206)) +5 5 Icing top (m) +6 6 Icing base (m) +7 7 Icing ((Code table 4.207)) +8 8 Turbulence top (m) +9 9 Turbulence base (m) +10 10 Turbulence ((Code table 4.208)) +11 11 Turbulent kinetic energy (J/kg) +12 12 Planetary boundary-layer regime ((Code table 4.209)) +13 13 Contrail intensity ((Code table 4.210)) +14 14 Contrail engine type ((Code table 4.211)) +15 15 Contrail top (m) +16 16 Contrail base (m) +17 17 Maximum snow albedo (%) +18 18 Snow free albedo (%) +19 19 Snow albedo (%) +20 20 Icing (%) +21 21 In-cloud turbulence (%) +22 22 Clear air turbulence (CAT) (%) +23 23 Supercooled large droplet probability (%) +24 24 Convective turbulent kinetic energy (J/kg) +25 25 Weather (Code table 4.225) +26 26 Convective outlook (Code table 4.224) +27 27 Icing scenario (Code table 4.227) +# 28-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.190.table b/definitions/grib2/tables/9/4.2.0.190.table new file mode 100644 index 000000000..7bb15c2d8 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.190.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Arbitrary text string (CCITT IA5) +# 1-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.191.table b/definitions/grib2/tables/9/4.2.0.191.table new file mode 100644 index 000000000..3f0d7df5f --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.191.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Geographical latitude (deg N) +2 2 Geographical longitude (deg E) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing value diff --git a/definitions/grib2/tables/9/4.2.0.2.table b/definitions/grib2/tables/9/4.2.0.2.table new file mode 100644 index 000000000..2818364d7 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.2.table @@ -0,0 +1,40 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Wind direction (from which blowing) (degree true) (deg) +1 1 Wind speed (m/s) +2 2 u-component of wind (m/s) +3 3 v-component of wind (m/s) +4 4 Stream function (m2 s-1) +5 5 Velocity potential (m2 s-1) +6 6 Montgomery stream function (m2 s-2) +7 7 Sigma coordinate vertical velocity (/s) +8 8 Vertical velocity (pressure) (Pa/s) +9 9 Vertical velocity (geometric) (m/s) +10 10 Absolute vorticity (/s) +11 11 Absolute divergence (/s) +12 12 Relative vorticity (/s) +13 13 Relative divergence (/s) +14 14 Potential vorticity (K m2 kg-1 s-1) +15 15 Vertical u-component shear (/s) +16 16 Vertical v-component shear (/s) +17 17 Momentum flux, u-component (N m-2) +18 18 Momentum flux, v-component (N m-2) +19 19 Wind mixing energy (J) +20 20 Boundary layer dissipation (W m-2) +21 21 Maximum wind speed (m/s) +22 22 Wind speed (gust) (m/s) +23 23 u-component of wind (gust) (m/s) +24 24 v-component of wind (gust) (m/s) +25 25 Vertical speed shear (/s) +26 26 Horizontal momentum flux (N m-2) +27 27 u-component storm motion (m/s) +28 28 v-component storm motion (m/s) +29 29 Drag coefficient (Numeric) +30 30 Frictional velocity (m/s) +31 31 Turbulent diffusion coefficient for momentum (m2/s) +32 32 Eta coordinate vertical velocity (/s) +33 33 Wind fetch (m) +34 34 Normal wind component (m/s) +35 35 Tangential wind component (m/s) +# 36-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.20.table b/definitions/grib2/tables/9/4.2.0.20.table new file mode 100644 index 000000000..1f0bdcf98 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.20.table @@ -0,0 +1,42 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Mass density (concentration) (kg m-3) +1 1 Column-integrated mass density (kg m-2) +2 2 Mass mixing ratio (mass fraction in air) (kg/kg) +3 3 Atmosphere emission mass flux (kg m-2 s-1) +4 4 Atmosphere net production mass flux (kg m-2 s-1) +5 5 Atmosphere net production and emission mass flux (kg m-2 s-1) +6 6 Surface dry deposition mass flux (kg m-2 s-1) +7 7 Surface wet deposition mass flux (kg m-2 s-1) +8 8 Atmosphere re-emission mass flux (kg m-2 s-1) +9 9 Wet deposition by large-scale precipitation mass flux (kg m-2 s-1) +10 10 Wet deposition by convective precipitation mass flux (kg m-2 s-1) +11 11 Sedimentation mass flux (kg m-2 s-1) +12 12 Dry deposition mass flux (kg m-2 s-1) +13 13 Transfer from hydrophobic to hydrophilic (kg kg-1 s-1) +14 14 Transfer from SO2 (Sulphur dioxide) to SO4 (sulphate) (kg kg-1 s-1) +# 15-49 Reserved +50 50 Amount in atmosphere (mol) +51 51 Concentration in air (mol m-3) +52 52 Volume mixing ratio (fraction in air) (mol/mol) +53 53 Chemical gross production rate of concentration (mol m-3 s-1) +54 54 Chemical gross destruction rate of concentration (mol m-3 s-1) +55 55 Surface flux (mol m-2 s-1) +56 56 Changes of amount in atmosphere (mol/s) +57 57 Total yearly average burden of the atmosphere (mol) +58 58 Total yearly averaged atmospheric loss (mol/s) +59 59 Aerosol number concentration (m-3) +# 60-99 Reserved +100 100 Surface area density (aerosol) (/m) +101 101 Vertical visual range (m) +102 102 Aerosol optical thickness (Numeric) +103 103 Single scattering albedo (Numeric) +104 104 Asymmetry factor (Numeric) +105 105 Aerosol extinction coefficient (m-1) +106 106 Aerosol absorption coefficient (m-1) +107 107 Aerosol lidar backscatter from satellite (m-1 sr-1) +108 108 Aerosol lidar backscatter from the ground (m-1 sr-1) +109 109 Aerosol lidar extinction from satellite (m-1) +110 110 Aerosol lidar extinction from the ground (m-1) +# 111-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.3.table b/definitions/grib2/tables/9/4.2.0.3.table new file mode 100644 index 000000000..b0c47b4a9 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.3.table @@ -0,0 +1,31 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Pressure (Pa) +1 1 Pressure reduced to MSL (Pa) +2 2 Pressure tendency (Pa/s) +3 3 ICAO Standard Atmosphere Reference Height (m) +4 4 Geopotential (m2 s-2) +5 5 Geopotential height (gpm) +6 6 Geometric height (m) +7 7 Standard deviation of height (m) +8 8 Pressure anomaly (Pa) +9 9 Geopotential height anomaly (gpm) +10 10 Density (kg m-3) +11 11 Altimeter setting (Pa) +12 12 Thickness (m) +13 13 Pressure altitude (m) +14 14 Density altitude (m) +15 15 5-wave geopotential height (gpm) +16 16 Zonal flux of gravity wave stress (N m-2) +17 17 Meridional flux of gravity wave stress (N m-2) +18 18 Planetary boundary layer height (m) +19 19 5-wave geopotential height anomaly (gpm) +20 20 Standard deviation of sub-grid scale orography (m) +21 21 Angle of sub-gridscale orography (rad) +22 22 Slope of sub-gridscale orography (Numeric) +23 23 Gravity wave dissipation (W m-2) +24 24 Anisotropy of sub-gridscale orography (Numeric) +25 25 Natural logarithm of pressure in Pa (Numeric) +26 26 Exner pressure (Numeric) +# 27-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.4.table b/definitions/grib2/tables/9/4.2.0.4.table new file mode 100644 index 000000000..66fd563ca --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.4.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net short-wave radiation flux (surface) (W m-2) +1 1 Net short-wave radiation flux (top of atmosphere) (W m-2) +2 2 Short-wave radiation flux (W m-2) +3 3 Global radiation flux (W m-2) +4 4 Brightness temperature (K) +5 5 Radiance (with respect to wave number) (W m-1 sr-1) +6 6 Radiance (with respect to wave length) (W m-3 sr-1) +7 7 Downward short-wave radiation flux (W m-2) +8 8 Upward short-wave radiation flux (W m-2) +9 9 Net short wave radiation flux (W m-2) +10 10 Photosynthetically active radiation (W m-2) +11 11 Net short-wave radiation flux, clear sky (W m-2) +12 12 Downward UV radiation (W m-2) +# 13-49 Reserved +50 50 UV index (under clear sky) (Numeric) +51 51 UV index (Numeric) +# 52-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.5.table b/definitions/grib2/tables/9/4.2.0.5.table new file mode 100644 index 000000000..20fa23cc5 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.5.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Net long-wave radiation flux (surface) (W m-2) +1 1 Net long-wave radiation flux (top of atmosphere) (W m-2) +2 2 Long-wave radiation flux (W m-2) +3 3 Downward long-wave radiation flux (W m-2) +4 4 Upward long-wave radiation flux (W m-2) +5 5 Net long wave radiation flux (W m-2) +6 6 Net long-wave radiation flux, clear sky (W m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.6.table b/definitions/grib2/tables/9/4.2.0.6.table new file mode 100644 index 000000000..8779b9925 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.6.table @@ -0,0 +1,40 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Cloud ice (kg m-2) +1 1 Total cloud cover (%) +2 2 Convective cloud cover (%) +3 3 Low cloud cover (%) +4 4 Medium cloud cover (%) +5 5 High cloud cover (%) +6 6 Cloud water (kg m-2) +7 7 Cloud amount (%) +8 8 Cloud type ((Code table 4.203)) +9 9 Thunderstorm maximum tops (m) +10 10 Thunderstorm coverage ((Code table 4.204)) +11 11 Cloud base (m) +12 12 Cloud top (m) +13 13 Ceiling (m) +14 14 Non-convective cloud cover (%) +15 15 Cloud work function (J/kg) +16 16 Convective cloud efficiency (Proportion) +17 17 Total condensate (kg/kg) +18 18 Total column-integrated cloud water (kg m-2) +19 19 Total column-integrated cloud ice (kg m-2) +20 20 Total column-integrated condensate (kg m-2) +21 21 Ice fraction of total condensate (Proportion) +22 22 Cloud cover (%) +23 23 Cloud ice mixing ratio (kg/kg) +24 24 Sunshine (Numeric) +25 25 Horizontal extent of cumulonimbus (CB) (%) +26 26 Height of convective cloud base (m) +27 27 Height of convective cloud top (m) +28 28 Number of cloud droplets per unit mass of air (/kg) +29 29 Number of cloud ice particles per unit mass of air (/kg) +30 30 Number density of cloud droplets (m-3) +31 31 Number density of cloud ice particles (m-3) +32 32 Fraction of cloud cover (Numeric) +33 33 Sunshine duration (s) +34 34 Surface long wave effective total cloudiness (Numeric) +35 35 Surface short wave effective total cloudiness (Numeric) +# 36-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.0.7.table b/definitions/grib2/tables/9/4.2.0.7.table new file mode 100644 index 000000000..6015e75f0 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.0.7.table @@ -0,0 +1,20 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Parcel lifted index (to 500 hPa) (K) +1 1 Best lifted index (to 500 hPa) (K) +2 2 K index (K) +3 3 KO index (K) +4 4 Total totals index (K) +5 5 Sweat index (Numeric) +6 6 Convective available potential energy (J/kg) +7 7 Convective inhibition (J/kg) +8 8 Storm relative helicity (J/kg) +9 9 Energy helicity index (Numeric) +10 10 Surface lifted index (K) +11 11 Best (4-layer) lifted index (K) +12 12 Richardson number (Numeric) +13 13 Showalter index (K) +14 14 Reserved +15 15 Updraft helicity (m2 s-2) +# 16-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.1.0.table b/definitions/grib2/tables/9/4.2.1.0.table new file mode 100644 index 000000000..bf88fd6a4 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.1.0.table @@ -0,0 +1,11 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2) +1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2) +2 2 Remotely-sensed snow cover ((Code table 4.215)) +3 3 Elevation of snow-covered terrain ((Code table 4.216)) +4 4 Snow water equivalent per cent of normal (%) +5 5 Baseflow-groundwater runoff (kg m-2) +6 6 Storm surface runoff (kg m-2) +# 7-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.1.1.table b/definitions/grib2/tables/9/4.2.1.1.table new file mode 100644 index 000000000..0b8c86ba4 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.1.1.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Conditional per cent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2) +1 1 Per cent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%) +2 2 Probability of 0.01 inch of precipitation (POP) (%) +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.1.2.table b/definitions/grib2/tables/9/4.2.1.2.table new file mode 100644 index 000000000..de8926688 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.1.2.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Water depth (m) +1 1 Water temperature (K) +2 2 Water fraction (Proportion) +3 3 Sediment thickness (m) +4 4 Sediment temperature (K) +5 5 Ice thickness (m) +6 6 Ice temperature (K) +7 7 Ice cover (Proportion) +8 8 Land cover (0 = water, 1 = land) (Proportion) +9 9 Shape factor with respect to salinity profile (-) +10 10 Shape factor with respect to temperature profile in thermocline (-) +11 11 Attenuation coefficient of water with respect to solar radiation (m-1) +12 12 Salinity (kg kg-1) diff --git a/definitions/grib2/tables/9/4.2.10.0.table b/definitions/grib2/tables/9/4.2.10.0.table new file mode 100644 index 000000000..0e1738568 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.10.0.table @@ -0,0 +1,50 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Wave spectra (1) (-) +1 1 Wave spectra (2) (-) +2 2 Wave spectra (3) (-) +3 3 Significant height of combined wind waves and swell (m) +4 4 Direction of wind waves (degree true) (deg) +5 5 Significant height of wind waves (m) +6 6 Mean period of wind waves (s) +7 7 Direction of swell waves (degree true) (deg) +8 8 Significant height of swell waves (m) +9 9 Mean period of swell waves (s) +10 10 Primary wave direction (degree true) (deg) +11 11 Primary wave mean period (s) +12 12 Secondary wave direction (degree true) (deg) +13 13 Secondary wave mean period (s) +14 14 Direction of combined wind waves and swell (degree true) (deg) +15 15 Mean period of combined wind waves and swell (s) +16 16 Coefficient of drag with waves (-) +17 17 Friction velocity (m s-1) +18 18 Wave stress (N m-2) +19 19 Normalised wave stress (-) +20 20 Mean square slope of waves (-) +21 21 u-component surface Stokes drift (m s-1) +22 22 v-component surface Stokes drift (m s-1) +23 23 Period of maximum individual wave height (s) +24 24 Maximum individual wave height (m) +25 25 Inverse mean wave frequency (s) +26 26 Inverse mean frequency of the wind waves (s) +27 27 Inverse mean frequency of the total swell (s) +28 28 Mean zero-crossing wave period (s) +29 29 Mean zero-crossing period of the wind waves (s) +30 30 Mean zero-crossing period of the total swell (s) +31 31 Wave directional width (-) +32 32 Directional width of the wind waves (-) +33 33 Directional width of the total swell (-) +34 34 Peak wave period (s) +35 35 Peak period of the wind waves (s) +36 36 Peak period of the total swell (s) +37 37 Altimeter wave height (m) +38 38 Altimeter corrected wave height (m) +39 39 Altimeter range relative correction (-) +40 40 10 metre neutral wind speed over waves (m s-1) +41 41 10 metre wind direction over waves (deg) +42 42 Wave energy spectrum (m2 s rad-1) +43 43 Kurtosis of the sea surface elevation due to waves (-) +44 44 Benjamin-Feir index (-) +45 45 Spectral peakedness factor (s-1) +# 46-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.10.1.table b/definitions/grib2/tables/9/4.2.10.1.table new file mode 100644 index 000000000..b619b4c41 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.10.1.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Current direction (degree true) (deg) +1 1 Current speed (m/s) +2 2 u-component of current (m/s) +3 3 v-component of current (m/s) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.10.191.table b/definitions/grib2/tables/9/4.2.10.191.table new file mode 100644 index 000000000..182149f08 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.10.191.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Seconds prior to initial reference time (defined in Section 1) (s) +1 1 Meridional overturning stream function (m3/s) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.10.2.table b/definitions/grib2/tables/9/4.2.10.2.table new file mode 100644 index 000000000..5287c5edc --- /dev/null +++ b/definitions/grib2/tables/9/4.2.10.2.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Ice cover (Proportion) +1 1 Ice thickness (m) +2 2 Direction of ice drift (degree true) (deg) +3 3 Speed of ice drift (m/s) +4 4 u-component of ice drift (m/s) +5 5 v-component of ice drift (m/s) +6 6 Ice growth rate (m/s) +7 7 Ice divergence (/s) +8 8 Ice temperature (K) +9 9 Ice internal pressure (Pa m) +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.10.3.table b/definitions/grib2/tables/9/4.2.10.3.table new file mode 100644 index 000000000..c7d71e1d8 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.10.3.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Water temperature (K) +1 1 Deviation of sea level from mean (m) +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.10.4.table b/definitions/grib2/tables/9/4.2.10.4.table new file mode 100644 index 000000000..898bfd87d --- /dev/null +++ b/definitions/grib2/tables/9/4.2.10.4.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Main thermocline depth (m) +1 1 Main thermocline anomaly (m) +2 2 Transient thermocline depth (m) +3 3 Salinity (kg/kg) +4 4 Ocean vertical heat diffusivity (m2 s-1) +5 5 Ocean vertical salt diffusivity (m2 s-1) +6 6 Ocean vertical momentum diffusivity (m2 s-1) +7 7 Bathymetry (m) +# 8-10 Reserved +11 11 Shape factor with respect to salinity profile (-) +12 12 Shape factor with respect to temperature profile in thermocline (-) +13 13 Attenuation coefficient of water with respect to solar radiation (m-1) +14 14 Water depth (m) +15 15 Water temperature (K) +# 16-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.192.0.table b/definitions/grib2/tables/9/4.2.192.0.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.0.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.1.table b/definitions/grib2/tables/9/4.2.192.1.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.1.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.10.table b/definitions/grib2/tables/9/4.2.192.10.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.10.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.100.table b/definitions/grib2/tables/9/4.2.192.100.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.100.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.101.table b/definitions/grib2/tables/9/4.2.192.101.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.101.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.102.table b/definitions/grib2/tables/9/4.2.192.102.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.102.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.103.table b/definitions/grib2/tables/9/4.2.192.103.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.103.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.104.table b/definitions/grib2/tables/9/4.2.192.104.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.104.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.105.table b/definitions/grib2/tables/9/4.2.192.105.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.105.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.106.table b/definitions/grib2/tables/9/4.2.192.106.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.106.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.107.table b/definitions/grib2/tables/9/4.2.192.107.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.107.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.108.table b/definitions/grib2/tables/9/4.2.192.108.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.108.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.109.table b/definitions/grib2/tables/9/4.2.192.109.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.109.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.11.table b/definitions/grib2/tables/9/4.2.192.11.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.11.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.110.table b/definitions/grib2/tables/9/4.2.192.110.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.110.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.111.table b/definitions/grib2/tables/9/4.2.192.111.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.111.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.112.table b/definitions/grib2/tables/9/4.2.192.112.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.112.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.113.table b/definitions/grib2/tables/9/4.2.192.113.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.113.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.114.table b/definitions/grib2/tables/9/4.2.192.114.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.114.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.115.table b/definitions/grib2/tables/9/4.2.192.115.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.115.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.116.table b/definitions/grib2/tables/9/4.2.192.116.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.116.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.117.table b/definitions/grib2/tables/9/4.2.192.117.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.117.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.118.table b/definitions/grib2/tables/9/4.2.192.118.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.118.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.119.table b/definitions/grib2/tables/9/4.2.192.119.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.119.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.12.table b/definitions/grib2/tables/9/4.2.192.12.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.12.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.120.table b/definitions/grib2/tables/9/4.2.192.120.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.120.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.121.table b/definitions/grib2/tables/9/4.2.192.121.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.121.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.122.table b/definitions/grib2/tables/9/4.2.192.122.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.122.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.123.table b/definitions/grib2/tables/9/4.2.192.123.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.123.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.124.table b/definitions/grib2/tables/9/4.2.192.124.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.124.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.125.table b/definitions/grib2/tables/9/4.2.192.125.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.125.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.126.table b/definitions/grib2/tables/9/4.2.192.126.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.126.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.127.table b/definitions/grib2/tables/9/4.2.192.127.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.127.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.128.table b/definitions/grib2/tables/9/4.2.192.128.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.128.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.129.table b/definitions/grib2/tables/9/4.2.192.129.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.129.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.13.table b/definitions/grib2/tables/9/4.2.192.13.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.13.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.130.table b/definitions/grib2/tables/9/4.2.192.130.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.130.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.131.table b/definitions/grib2/tables/9/4.2.192.131.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.131.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.132.table b/definitions/grib2/tables/9/4.2.192.132.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.132.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.133.table b/definitions/grib2/tables/9/4.2.192.133.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.133.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.134.table b/definitions/grib2/tables/9/4.2.192.134.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.134.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.135.table b/definitions/grib2/tables/9/4.2.192.135.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.135.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.136.table b/definitions/grib2/tables/9/4.2.192.136.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.136.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.137.table b/definitions/grib2/tables/9/4.2.192.137.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.137.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.138.table b/definitions/grib2/tables/9/4.2.192.138.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.138.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.139.table b/definitions/grib2/tables/9/4.2.192.139.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.139.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.14.table b/definitions/grib2/tables/9/4.2.192.14.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.14.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.140.table b/definitions/grib2/tables/9/4.2.192.140.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.140.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.141.table b/definitions/grib2/tables/9/4.2.192.141.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.141.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.142.table b/definitions/grib2/tables/9/4.2.192.142.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.142.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.143.table b/definitions/grib2/tables/9/4.2.192.143.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.143.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.144.table b/definitions/grib2/tables/9/4.2.192.144.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.144.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.145.table b/definitions/grib2/tables/9/4.2.192.145.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.145.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.146.table b/definitions/grib2/tables/9/4.2.192.146.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.146.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.147.table b/definitions/grib2/tables/9/4.2.192.147.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.147.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.148.table b/definitions/grib2/tables/9/4.2.192.148.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.148.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.149.table b/definitions/grib2/tables/9/4.2.192.149.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.149.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.15.table b/definitions/grib2/tables/9/4.2.192.15.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.15.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.150.table b/definitions/grib2/tables/9/4.2.192.150.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.150.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.151.table b/definitions/grib2/tables/9/4.2.192.151.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.151.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.152.table b/definitions/grib2/tables/9/4.2.192.152.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.152.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.153.table b/definitions/grib2/tables/9/4.2.192.153.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.153.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.154.table b/definitions/grib2/tables/9/4.2.192.154.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.154.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.155.table b/definitions/grib2/tables/9/4.2.192.155.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.155.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.156.table b/definitions/grib2/tables/9/4.2.192.156.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.156.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.157.table b/definitions/grib2/tables/9/4.2.192.157.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.157.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.158.table b/definitions/grib2/tables/9/4.2.192.158.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.158.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.159.table b/definitions/grib2/tables/9/4.2.192.159.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.159.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.16.table b/definitions/grib2/tables/9/4.2.192.16.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.16.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.160.table b/definitions/grib2/tables/9/4.2.192.160.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.160.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.161.table b/definitions/grib2/tables/9/4.2.192.161.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.161.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.162.table b/definitions/grib2/tables/9/4.2.192.162.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.162.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.163.table b/definitions/grib2/tables/9/4.2.192.163.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.163.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.164.table b/definitions/grib2/tables/9/4.2.192.164.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.164.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.165.table b/definitions/grib2/tables/9/4.2.192.165.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.165.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.166.table b/definitions/grib2/tables/9/4.2.192.166.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.166.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.167.table b/definitions/grib2/tables/9/4.2.192.167.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.167.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.168.table b/definitions/grib2/tables/9/4.2.192.168.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.168.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.169.table b/definitions/grib2/tables/9/4.2.192.169.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.169.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.17.table b/definitions/grib2/tables/9/4.2.192.17.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.17.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.170.table b/definitions/grib2/tables/9/4.2.192.170.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.170.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.171.table b/definitions/grib2/tables/9/4.2.192.171.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.171.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.172.table b/definitions/grib2/tables/9/4.2.192.172.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.172.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.173.table b/definitions/grib2/tables/9/4.2.192.173.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.173.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.174.table b/definitions/grib2/tables/9/4.2.192.174.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.174.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.175.table b/definitions/grib2/tables/9/4.2.192.175.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.175.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.176.table b/definitions/grib2/tables/9/4.2.192.176.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.176.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.177.table b/definitions/grib2/tables/9/4.2.192.177.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.177.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.178.table b/definitions/grib2/tables/9/4.2.192.178.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.178.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.179.table b/definitions/grib2/tables/9/4.2.192.179.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.179.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.18.table b/definitions/grib2/tables/9/4.2.192.18.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.18.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.180.table b/definitions/grib2/tables/9/4.2.192.180.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.180.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.181.table b/definitions/grib2/tables/9/4.2.192.181.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.181.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.182.table b/definitions/grib2/tables/9/4.2.192.182.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.182.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.183.table b/definitions/grib2/tables/9/4.2.192.183.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.183.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.184.table b/definitions/grib2/tables/9/4.2.192.184.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.184.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.185.table b/definitions/grib2/tables/9/4.2.192.185.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.185.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.186.table b/definitions/grib2/tables/9/4.2.192.186.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.186.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.187.table b/definitions/grib2/tables/9/4.2.192.187.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.187.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.188.table b/definitions/grib2/tables/9/4.2.192.188.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.188.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.189.table b/definitions/grib2/tables/9/4.2.192.189.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.189.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.19.table b/definitions/grib2/tables/9/4.2.192.19.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.19.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.190.table b/definitions/grib2/tables/9/4.2.192.190.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.190.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.191.table b/definitions/grib2/tables/9/4.2.192.191.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.191.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.192.table b/definitions/grib2/tables/9/4.2.192.192.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.192.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.193.table b/definitions/grib2/tables/9/4.2.192.193.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.193.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.194.table b/definitions/grib2/tables/9/4.2.192.194.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.194.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.195.table b/definitions/grib2/tables/9/4.2.192.195.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.195.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.196.table b/definitions/grib2/tables/9/4.2.192.196.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.196.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.197.table b/definitions/grib2/tables/9/4.2.192.197.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.197.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.198.table b/definitions/grib2/tables/9/4.2.192.198.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.198.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.199.table b/definitions/grib2/tables/9/4.2.192.199.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.199.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.2.table b/definitions/grib2/tables/9/4.2.192.2.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.2.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.20.table b/definitions/grib2/tables/9/4.2.192.20.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.20.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.200.table b/definitions/grib2/tables/9/4.2.192.200.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.200.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.201.table b/definitions/grib2/tables/9/4.2.192.201.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.201.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.202.table b/definitions/grib2/tables/9/4.2.192.202.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.202.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.203.table b/definitions/grib2/tables/9/4.2.192.203.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.203.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.204.table b/definitions/grib2/tables/9/4.2.192.204.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.204.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.205.table b/definitions/grib2/tables/9/4.2.192.205.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.205.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.206.table b/definitions/grib2/tables/9/4.2.192.206.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.206.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.207.table b/definitions/grib2/tables/9/4.2.192.207.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.207.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.208.table b/definitions/grib2/tables/9/4.2.192.208.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.208.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.209.table b/definitions/grib2/tables/9/4.2.192.209.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.209.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.21.table b/definitions/grib2/tables/9/4.2.192.21.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.21.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.210.table b/definitions/grib2/tables/9/4.2.192.210.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.210.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.211.table b/definitions/grib2/tables/9/4.2.192.211.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.211.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.212.table b/definitions/grib2/tables/9/4.2.192.212.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.212.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.213.table b/definitions/grib2/tables/9/4.2.192.213.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.213.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.214.table b/definitions/grib2/tables/9/4.2.192.214.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.214.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.215.table b/definitions/grib2/tables/9/4.2.192.215.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.215.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.216.table b/definitions/grib2/tables/9/4.2.192.216.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.216.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.217.table b/definitions/grib2/tables/9/4.2.192.217.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.217.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.218.table b/definitions/grib2/tables/9/4.2.192.218.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.218.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.219.table b/definitions/grib2/tables/9/4.2.192.219.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.219.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.22.table b/definitions/grib2/tables/9/4.2.192.22.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.22.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.220.table b/definitions/grib2/tables/9/4.2.192.220.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.220.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.221.table b/definitions/grib2/tables/9/4.2.192.221.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.221.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.222.table b/definitions/grib2/tables/9/4.2.192.222.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.222.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.223.table b/definitions/grib2/tables/9/4.2.192.223.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.223.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.224.table b/definitions/grib2/tables/9/4.2.192.224.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.224.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.225.table b/definitions/grib2/tables/9/4.2.192.225.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.225.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.226.table b/definitions/grib2/tables/9/4.2.192.226.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.226.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.227.table b/definitions/grib2/tables/9/4.2.192.227.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.227.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.228.table b/definitions/grib2/tables/9/4.2.192.228.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.228.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.229.table b/definitions/grib2/tables/9/4.2.192.229.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.229.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.23.table b/definitions/grib2/tables/9/4.2.192.23.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.23.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.230.table b/definitions/grib2/tables/9/4.2.192.230.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.230.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.231.table b/definitions/grib2/tables/9/4.2.192.231.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.231.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.232.table b/definitions/grib2/tables/9/4.2.192.232.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.232.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.233.table b/definitions/grib2/tables/9/4.2.192.233.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.233.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.234.table b/definitions/grib2/tables/9/4.2.192.234.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.234.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.235.table b/definitions/grib2/tables/9/4.2.192.235.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.235.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.236.table b/definitions/grib2/tables/9/4.2.192.236.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.236.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.237.table b/definitions/grib2/tables/9/4.2.192.237.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.237.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.238.table b/definitions/grib2/tables/9/4.2.192.238.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.238.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.239.table b/definitions/grib2/tables/9/4.2.192.239.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.239.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.24.table b/definitions/grib2/tables/9/4.2.192.24.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.24.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.240.table b/definitions/grib2/tables/9/4.2.192.240.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.240.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.241.table b/definitions/grib2/tables/9/4.2.192.241.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.241.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.242.table b/definitions/grib2/tables/9/4.2.192.242.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.242.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.243.table b/definitions/grib2/tables/9/4.2.192.243.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.243.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.244.table b/definitions/grib2/tables/9/4.2.192.244.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.244.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.245.table b/definitions/grib2/tables/9/4.2.192.245.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.245.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.246.table b/definitions/grib2/tables/9/4.2.192.246.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.246.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.247.table b/definitions/grib2/tables/9/4.2.192.247.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.247.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.248.table b/definitions/grib2/tables/9/4.2.192.248.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.248.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.249.table b/definitions/grib2/tables/9/4.2.192.249.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.249.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.25.table b/definitions/grib2/tables/9/4.2.192.25.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.25.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.250.table b/definitions/grib2/tables/9/4.2.192.250.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.250.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.251.table b/definitions/grib2/tables/9/4.2.192.251.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.251.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.252.table b/definitions/grib2/tables/9/4.2.192.252.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.252.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.253.table b/definitions/grib2/tables/9/4.2.192.253.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.253.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.254.table b/definitions/grib2/tables/9/4.2.192.254.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.254.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.255.table b/definitions/grib2/tables/9/4.2.192.255.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.255.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.26.table b/definitions/grib2/tables/9/4.2.192.26.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.26.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.27.table b/definitions/grib2/tables/9/4.2.192.27.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.27.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.28.table b/definitions/grib2/tables/9/4.2.192.28.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.28.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.29.table b/definitions/grib2/tables/9/4.2.192.29.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.29.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.3.table b/definitions/grib2/tables/9/4.2.192.3.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.3.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.30.table b/definitions/grib2/tables/9/4.2.192.30.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.30.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.31.table b/definitions/grib2/tables/9/4.2.192.31.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.31.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.32.table b/definitions/grib2/tables/9/4.2.192.32.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.32.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.33.table b/definitions/grib2/tables/9/4.2.192.33.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.33.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.34.table b/definitions/grib2/tables/9/4.2.192.34.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.34.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.35.table b/definitions/grib2/tables/9/4.2.192.35.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.35.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.36.table b/definitions/grib2/tables/9/4.2.192.36.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.36.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.37.table b/definitions/grib2/tables/9/4.2.192.37.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.37.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.38.table b/definitions/grib2/tables/9/4.2.192.38.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.38.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.39.table b/definitions/grib2/tables/9/4.2.192.39.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.39.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.4.table b/definitions/grib2/tables/9/4.2.192.4.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.4.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.40.table b/definitions/grib2/tables/9/4.2.192.40.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.40.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.41.table b/definitions/grib2/tables/9/4.2.192.41.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.41.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.42.table b/definitions/grib2/tables/9/4.2.192.42.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.42.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.43.table b/definitions/grib2/tables/9/4.2.192.43.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.43.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.44.table b/definitions/grib2/tables/9/4.2.192.44.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.44.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.45.table b/definitions/grib2/tables/9/4.2.192.45.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.45.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.46.table b/definitions/grib2/tables/9/4.2.192.46.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.46.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.47.table b/definitions/grib2/tables/9/4.2.192.47.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.47.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.48.table b/definitions/grib2/tables/9/4.2.192.48.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.48.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.49.table b/definitions/grib2/tables/9/4.2.192.49.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.49.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.5.table b/definitions/grib2/tables/9/4.2.192.5.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.5.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.50.table b/definitions/grib2/tables/9/4.2.192.50.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.50.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.51.table b/definitions/grib2/tables/9/4.2.192.51.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.51.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.52.table b/definitions/grib2/tables/9/4.2.192.52.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.52.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.53.table b/definitions/grib2/tables/9/4.2.192.53.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.53.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.54.table b/definitions/grib2/tables/9/4.2.192.54.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.54.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.55.table b/definitions/grib2/tables/9/4.2.192.55.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.55.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.56.table b/definitions/grib2/tables/9/4.2.192.56.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.56.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.57.table b/definitions/grib2/tables/9/4.2.192.57.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.57.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.58.table b/definitions/grib2/tables/9/4.2.192.58.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.58.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.59.table b/definitions/grib2/tables/9/4.2.192.59.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.59.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.6.table b/definitions/grib2/tables/9/4.2.192.6.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.6.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.60.table b/definitions/grib2/tables/9/4.2.192.60.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.60.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.61.table b/definitions/grib2/tables/9/4.2.192.61.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.61.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.62.table b/definitions/grib2/tables/9/4.2.192.62.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.62.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.63.table b/definitions/grib2/tables/9/4.2.192.63.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.63.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.64.table b/definitions/grib2/tables/9/4.2.192.64.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.64.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.65.table b/definitions/grib2/tables/9/4.2.192.65.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.65.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.66.table b/definitions/grib2/tables/9/4.2.192.66.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.66.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.67.table b/definitions/grib2/tables/9/4.2.192.67.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.67.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.68.table b/definitions/grib2/tables/9/4.2.192.68.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.68.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.69.table b/definitions/grib2/tables/9/4.2.192.69.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.69.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.7.table b/definitions/grib2/tables/9/4.2.192.7.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.7.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.70.table b/definitions/grib2/tables/9/4.2.192.70.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.70.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.71.table b/definitions/grib2/tables/9/4.2.192.71.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.71.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.72.table b/definitions/grib2/tables/9/4.2.192.72.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.72.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.73.table b/definitions/grib2/tables/9/4.2.192.73.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.73.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.74.table b/definitions/grib2/tables/9/4.2.192.74.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.74.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.75.table b/definitions/grib2/tables/9/4.2.192.75.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.75.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.76.table b/definitions/grib2/tables/9/4.2.192.76.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.76.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.77.table b/definitions/grib2/tables/9/4.2.192.77.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.77.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.78.table b/definitions/grib2/tables/9/4.2.192.78.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.78.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.79.table b/definitions/grib2/tables/9/4.2.192.79.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.79.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.8.table b/definitions/grib2/tables/9/4.2.192.8.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.8.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.80.table b/definitions/grib2/tables/9/4.2.192.80.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.80.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.81.table b/definitions/grib2/tables/9/4.2.192.81.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.81.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.82.table b/definitions/grib2/tables/9/4.2.192.82.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.82.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.83.table b/definitions/grib2/tables/9/4.2.192.83.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.83.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.84.table b/definitions/grib2/tables/9/4.2.192.84.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.84.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.85.table b/definitions/grib2/tables/9/4.2.192.85.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.85.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.86.table b/definitions/grib2/tables/9/4.2.192.86.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.86.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.87.table b/definitions/grib2/tables/9/4.2.192.87.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.87.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.88.table b/definitions/grib2/tables/9/4.2.192.88.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.88.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.89.table b/definitions/grib2/tables/9/4.2.192.89.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.89.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.9.table b/definitions/grib2/tables/9/4.2.192.9.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.9.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.90.table b/definitions/grib2/tables/9/4.2.192.90.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.90.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.91.table b/definitions/grib2/tables/9/4.2.192.91.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.91.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.92.table b/definitions/grib2/tables/9/4.2.192.92.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.92.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.93.table b/definitions/grib2/tables/9/4.2.192.93.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.93.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.94.table b/definitions/grib2/tables/9/4.2.192.94.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.94.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.95.table b/definitions/grib2/tables/9/4.2.192.95.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.95.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.96.table b/definitions/grib2/tables/9/4.2.192.96.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.96.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.97.table b/definitions/grib2/tables/9/4.2.192.97.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.97.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.98.table b/definitions/grib2/tables/9/4.2.192.98.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.98.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.192.99.table b/definitions/grib2/tables/9/4.2.192.99.table new file mode 100644 index 000000000..c37fd8f74 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.192.99.table @@ -0,0 +1,2 @@ +# ECMWF local parameters +255 255 Missing (-) diff --git a/definitions/grib2/tables/9/4.2.2.0.table b/definitions/grib2/tables/9/4.2.2.0.table new file mode 100644 index 000000000..3d5ac534c --- /dev/null +++ b/definitions/grib2/tables/9/4.2.2.0.table @@ -0,0 +1,37 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Land cover (0 = sea, 1 = land) (Proportion) +1 1 Surface roughness (m) +2 2 Soil temperature (K) +3 3 Soil moisture content (kg m-2) +4 4 Vegetation (%) +5 5 Water runoff (kg m-2) +6 6 Evapotranspiration (kg-2 s-1) +7 7 Model terrain height (m) +8 8 Land use ((Code table 4.212)) +9 9 Volumetric soil moisture content (Proportion) +10 10 Ground heat flux (W m-2) +11 11 Moisture availability (%) +12 12 Exchange coefficient (kg m-2 s-1) +13 13 Plant canopy surface water (kg m-2) +14 14 Blackadar's mixing length scale (m) +15 15 Canopy conductance (m/s) +16 16 Minimal stomatal resistance (s/m) +17 17 Wilting point (Proportion) +18 18 Solar parameter in canopy conductance (Proportion) +19 19 Temperature parameter in canopy (Proportion) +20 20 Humidity parameter in canopy conductance (Proportion) +21 21 Soil moisture parameter in canopy conductance (Proportion) +22 22 Soil moisture (kg m-3) +23 23 Column-integrated soil water (kg m-2) +24 24 Heat flux (W m-2) +25 25 Volumetric soil moisture (m3 m-3) +26 26 Wilting point (kg m-3) +27 27 Volumetric wilting point (m3 m-3) +28 28 Leaf area index (Numeric) +29 29 Evergreen forest cover (Proportion) +30 30 Deciduous forest cover (Proportion) +31 31 Normalized differential vegetation index (NDVI) (Numeric) +32 32 Root depth of vegetation (m) +# 33-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.2.3.table b/definitions/grib2/tables/9/4.2.2.3.table new file mode 100644 index 000000000..27e48a37c --- /dev/null +++ b/definitions/grib2/tables/9/4.2.2.3.table @@ -0,0 +1,27 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Soil type ((Code table 4.213)) +1 1 Upper layer soil temperature (K) +2 2 Upper layer soil moisture (kg m-3) +3 3 Lower layer soil moisture (kg m-3) +4 4 Bottom layer soil temperature (K) +5 5 Liquid volumetric soil moisture (non-frozen) (Proportion) +6 6 Number of soil layers in root zone (Numeric) +7 7 Transpiration stress-onset (soil moisture) (Proportion) +8 8 Direct evaporation cease (soil moisture) (Proportion) +9 9 Soil porosity (Proportion) +10 10 Liquid volumetric soil moisture (non-frozen) (m3 m-3) +11 11 Volumetric transpiration stress-onset (soil moisture) (m3 m-3) +12 12 Transpiration stress-onset (soil moisture) (kg m-3) +13 13 Volumetric direct evaporation cease (soil moisture) (m3 m-3) +14 14 Direct evaporation cease (soil moisture) (kg m-3) +15 15 Soil porosity (m3 m-3) +16 16 Volumetric saturation of soil moisture (m3 m-3) +17 17 Saturation of soil moisture (kg m-3) +18 18 Soil Temperature (K) +19 19 Soil moisture (kg m-3) +20 20 Column-integrated soil moisture (kg m-2) +21 21 Soil ice (kg m-3) +22 22 Column-integrated soil ice (kg m-2) +# 23-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.2.4.table b/definitions/grib2/tables/9/4.2.2.4.table new file mode 100644 index 000000000..df26d3881 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.2.4.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Fire outlook (Code table 4.224) +1 1 Fire outlook due to dry thunderstorm (Code table 4.224) +2 2 Haines Index (Numeric) +3 3 Fire burned area (%) +# 4-191 Reserved + diff --git a/definitions/grib2/tables/9/4.2.3.0.table b/definitions/grib2/tables/9/4.2.3.0.table new file mode 100644 index 000000000..8309784af --- /dev/null +++ b/definitions/grib2/tables/9/4.2.3.0.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Scaled radiance (Numeric) +1 1 Scaled albedo (Numeric) +2 2 Scaled brightness temperature (Numeric) +3 3 Scaled precipitable water (Numeric) +4 4 Scaled lifted index (Numeric) +5 5 Scaled cloud top pressure (Numeric) +6 6 Scaled skin temperature (Numeric) +7 7 Cloud mask (Code table 4.217) +8 8 Pixel scene type (Code table 4.218) +9 9 Fire detection indicator (Code table 4.223) +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.3.1.table b/definitions/grib2/tables/9/4.2.3.1.table new file mode 100644 index 000000000..0cb47d203 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.3.1.table @@ -0,0 +1,28 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Estimated precipitation (kg m-2) +1 1 Instantaneous rain rate (kg m-2 s-1) +2 2 Cloud top height (m) +3 3 Cloud top height quality indicator (Code table 4.219) +4 4 Estimated u component of wind (m/s) +5 5 Estimated v component of wind (m/s) +6 6 Number of pixel used (Numeric) +7 7 Solar zenith angle (deg) +8 8 Relative azimuth angle (deg) +9 9 Reflectance in 0.6 micron channel (%) +10 10 Reflectance in 0.8 micron channel (%) +11 11 Reflectance in 1.6 micron channel (%) +12 12 Reflectance in 3.9 micron channel (%) +13 13 Atmospheric divergence (/s) +14 14 Cloudy brightness temperature (K) +15 15 Clear-sky brightness temperature (K) +16 16 Cloudy radiance (with respect to wave number) (W m-1 sr-1) +17 17 Clear-sky radiance (with respect to wave number) (W m-1 sr-1) +18 18 Reserved +19 19 Wind speed (m/s) +20 20 Aerosol optical thickness at 0.635 um +21 21 Aerosol optical thickness at 0.810 um +22 22 Aerosol optical thickness at 1.640 um +23 23 Angstrom coefficient +# 24-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.2.table b/definitions/grib2/tables/9/4.2.table new file mode 100644 index 000000000..ff9553645 --- /dev/null +++ b/definitions/grib2/tables/9/4.2.table @@ -0,0 +1,5 @@ +# CODE TABLE 4.2, Parameter number by product discipline and parameter category +# 4 4 unknown +# 151 151 unknown +# 192 192 unknown +# 255 255 Missing diff --git a/definitions/grib2/tables/9/4.201.table b/definitions/grib2/tables/9/4.201.table new file mode 100644 index 000000000..76a0abfb1 --- /dev/null +++ b/definitions/grib2/tables/9/4.201.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Rain +2 2 Thunderstorm +3 3 Freezing rain +4 4 Mixed/ice +5 5 Snow +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.202.table b/definitions/grib2/tables/9/4.202.table new file mode 100644 index 000000000..4dd307a8e --- /dev/null +++ b/definitions/grib2/tables/9/4.202.table @@ -0,0 +1,4 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 0-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.203.table b/definitions/grib2/tables/9/4.203.table new file mode 100644 index 000000000..716de0f65 --- /dev/null +++ b/definitions/grib2/tables/9/4.203.table @@ -0,0 +1,26 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Clear +1 1 Cumulonimbus +2 2 Stratus +3 3 Stratocumulus +4 4 Cumulus +5 5 Altostratus +6 6 Nimbostratus +7 7 Altocumulus +8 8 Cirrostratus +9 9 Cirrocumulus +10 10 Cirrus +11 11 Cumulonimbus - ground-based fog beneath the lowest layer +12 12 Stratus - ground-based fog beneath the lowest layer +13 13 Stratocumulus - ground-based fog beneath the lowest layer +14 14 Cumulus - ground-based fog beneath the lowest layer +15 15 Altostratus - ground-based fog beneath the lowest layer +16 16 Nimbostratus - ground-based fog beneath the lowest layer +17 17 Altocumulus - ground-based fog beneath the lowest layer +18 18 Cirrostratus - ground-based fog beneath the lowest layer +19 19 Cirrocumulus - ground-based fog beneath the lowest layer +20 20 Cirrus - ground-based fog beneath the lowest layer +# 21-190 Reserved +191 191 Unknown +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.204.table b/definitions/grib2/tables/9/4.204.table new file mode 100644 index 000000000..1696453f1 --- /dev/null +++ b/definitions/grib2/tables/9/4.204.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 None +1 1 Isolated (1-2%) +2 2 Few (3-5%) +3 3 Scattered (16-45%) +4 4 Numerous (> 45%) +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.205.table b/definitions/grib2/tables/9/4.205.table new file mode 100644 index 000000000..298942c66 --- /dev/null +++ b/definitions/grib2/tables/9/4.205.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Aerosol not present +1 1 Aerosol present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.206.table b/definitions/grib2/tables/9/4.206.table new file mode 100644 index 000000000..a5e318e5e --- /dev/null +++ b/definitions/grib2/tables/9/4.206.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Not present +1 1 Present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.207.table b/definitions/grib2/tables/9/4.207.table new file mode 100644 index 000000000..602d22b92 --- /dev/null +++ b/definitions/grib2/tables/9/4.207.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 None +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Trace +5 5 Heavy +# 6-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.208.table b/definitions/grib2/tables/9/4.208.table new file mode 100644 index 000000000..1739ad9e7 --- /dev/null +++ b/definitions/grib2/tables/9/4.208.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 None (smooth) +1 1 Light +2 2 Moderate +3 3 Severe +4 4 Extreme +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.209.table b/definitions/grib2/tables/9/4.209.table new file mode 100644 index 000000000..15c8d8739 --- /dev/null +++ b/definitions/grib2/tables/9/4.209.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Stable +2 2 Mechanically-driven turbulence +3 3 Forced convection +4 4 Free convection +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.210.table b/definitions/grib2/tables/9/4.210.table new file mode 100644 index 000000000..6ba112476 --- /dev/null +++ b/definitions/grib2/tables/9/4.210.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Contrail not present +1 1 Contrail present +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.211.table b/definitions/grib2/tables/9/4.211.table new file mode 100644 index 000000000..b11ab50ef --- /dev/null +++ b/definitions/grib2/tables/9/4.211.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Low bypass +1 1 High bypass +2 2 Non-bypass +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.212.table b/definitions/grib2/tables/9/4.212.table new file mode 100644 index 000000000..f086845a8 --- /dev/null +++ b/definitions/grib2/tables/9/4.212.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Urban land +2 2 Agriculture +3 3 Range land +4 4 Deciduous forest +5 5 Coniferous forest +6 6 Forest/wetland +7 7 Water +8 8 Wetlands +9 9 Desert +10 10 Tundra +11 11 Ice +12 12 Tropical forest +13 13 Savannah +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.213.table b/definitions/grib2/tables/9/4.213.table new file mode 100644 index 000000000..efe7aadb7 --- /dev/null +++ b/definitions/grib2/tables/9/4.213.table @@ -0,0 +1,21 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 Sand +2 2 Loamy sand +3 3 Sandy loam +4 4 Silt loam +5 5 Organic (redefined) +6 6 Sandy clay loam +7 7 Silt clay loam +8 8 Clay loam +9 9 Sandy clay +10 10 Silty clay +11 11 Clay +12 12 Loam +13 13 Peat +14 14 Rock +15 15 Ice +16 16 Water +# 17-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.215.table b/definitions/grib2/tables/9/4.215.table new file mode 100644 index 000000000..7c97dc11f --- /dev/null +++ b/definitions/grib2/tables/9/4.215.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 0-49 Reserved +50 50 No-snow/no-cloud +# 51-99 Reserved +100 100 Clouds +# 101-249 Reserved +250 250 Snow +# 251-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.216.table b/definitions/grib2/tables/9/4.216.table new file mode 100644 index 000000000..77294f77b --- /dev/null +++ b/definitions/grib2/tables/9/4.216.table @@ -0,0 +1,96 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# 0-90 Elevation in increments of 100 m +0 0 Elevation in increments of 100 m +1 1 Elevation in increments of 100 m +2 2 Elevation in increments of 100 m +3 3 Elevation in increments of 100 m +4 4 Elevation in increments of 100 m +5 5 Elevation in increments of 100 m +6 6 Elevation in increments of 100 m +7 7 Elevation in increments of 100 m +8 8 Elevation in increments of 100 m +9 9 Elevation in increments of 100 m +10 10 Elevation in increments of 100 m +11 11 Elevation in increments of 100 m +12 12 Elevation in increments of 100 m +13 13 Elevation in increments of 100 m +14 14 Elevation in increments of 100 m +15 15 Elevation in increments of 100 m +16 16 Elevation in increments of 100 m +17 17 Elevation in increments of 100 m +18 18 Elevation in increments of 100 m +19 19 Elevation in increments of 100 m +20 20 Elevation in increments of 100 m +21 21 Elevation in increments of 100 m +22 22 Elevation in increments of 100 m +23 23 Elevation in increments of 100 m +24 24 Elevation in increments of 100 m +25 25 Elevation in increments of 100 m +26 26 Elevation in increments of 100 m +27 27 Elevation in increments of 100 m +28 28 Elevation in increments of 100 m +29 29 Elevation in increments of 100 m +30 30 Elevation in increments of 100 m +31 31 Elevation in increments of 100 m +32 32 Elevation in increments of 100 m +33 33 Elevation in increments of 100 m +34 34 Elevation in increments of 100 m +35 35 Elevation in increments of 100 m +36 36 Elevation in increments of 100 m +37 37 Elevation in increments of 100 m +38 38 Elevation in increments of 100 m +39 39 Elevation in increments of 100 m +40 40 Elevation in increments of 100 m +41 41 Elevation in increments of 100 m +42 42 Elevation in increments of 100 m +43 43 Elevation in increments of 100 m +44 44 Elevation in increments of 100 m +45 45 Elevation in increments of 100 m +46 46 Elevation in increments of 100 m +47 47 Elevation in increments of 100 m +48 48 Elevation in increments of 100 m +49 49 Elevation in increments of 100 m +50 50 Elevation in increments of 100 m +51 51 Elevation in increments of 100 m +52 52 Elevation in increments of 100 m +53 53 Elevation in increments of 100 m +54 54 Elevation in increments of 100 m +55 55 Elevation in increments of 100 m +56 56 Elevation in increments of 100 m +57 57 Elevation in increments of 100 m +58 58 Elevation in increments of 100 m +59 59 Elevation in increments of 100 m +60 60 Elevation in increments of 100 m +61 61 Elevation in increments of 100 m +62 62 Elevation in increments of 100 m +63 63 Elevation in increments of 100 m +64 64 Elevation in increments of 100 m +65 65 Elevation in increments of 100 m +66 66 Elevation in increments of 100 m +67 67 Elevation in increments of 100 m +68 68 Elevation in increments of 100 m +69 69 Elevation in increments of 100 m +70 70 Elevation in increments of 100 m +71 71 Elevation in increments of 100 m +72 72 Elevation in increments of 100 m +73 73 Elevation in increments of 100 m +74 74 Elevation in increments of 100 m +75 75 Elevation in increments of 100 m +76 76 Elevation in increments of 100 m +77 77 Elevation in increments of 100 m +78 78 Elevation in increments of 100 m +79 79 Elevation in increments of 100 m +80 80 Elevation in increments of 100 m +81 81 Elevation in increments of 100 m +82 82 Elevation in increments of 100 m +83 83 Elevation in increments of 100 m +84 84 Elevation in increments of 100 m +85 85 Elevation in increments of 100 m +86 86 Elevation in increments of 100 m +87 87 Elevation in increments of 100 m +88 88 Elevation in increments of 100 m +89 89 Elevation in increments of 100 m +90 90 Elevation in increments of 100 m +# 91-253 Reserved +254 254 Clouds +255 255 Missing diff --git a/definitions/grib2/tables/9/4.217.table b/definitions/grib2/tables/9/4.217.table new file mode 100644 index 000000000..4341dff57 --- /dev/null +++ b/definitions/grib2/tables/9/4.217.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Clear over water +1 1 Clear over land +2 2 Cloud +3 3 No data +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.218.table b/definitions/grib2/tables/9/4.218.table new file mode 100644 index 000000000..4408f43a4 --- /dev/null +++ b/definitions/grib2/tables/9/4.218.table @@ -0,0 +1,38 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No scene identified +1 1 Green needle-leafed forest +2 2 Green broad-leafed forest +3 3 Deciduous needle-leafed forest +4 4 Deciduous broad-leafed forest +5 5 Deciduous mixed forest +6 6 Closed shrub-land +7 7 Open shrub-land +8 8 Woody savannah +9 9 Savannah +10 10 Grassland +11 11 Permanent wetland +12 12 Cropland +13 13 Urban +14 14 Vegetation / crops +15 15 Permanent snow / ice +16 16 Barren desert +17 17 Water bodies +18 18 Tundra +# 19-96 Reserved +97 97 Snow / ice on land +98 98 Snow / ice on water +99 99 Sun-glint +100 100 General cloud +101 101 Low cloud / fog / Stratus +102 102 Low cloud / Stratocumulus +103 103 Low cloud / unknown type +104 104 Medium cloud / Nimbostratus +105 105 Medium cloud / Altostratus +106 106 Medium cloud / unknown type +107 107 High cloud / Cumulus +108 108 High cloud / Cirrus +109 109 High cloud / unknown +110 110 Unknown cloud type +# 111-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.219.table b/definitions/grib2/tables/9/4.219.table new file mode 100644 index 000000000..8a4b2cbbf --- /dev/null +++ b/definitions/grib2/tables/9/4.219.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Nominal cloud top height quality +1 1 Fog in segment +2 2 Poor quality height estimation +3 3 Fog in segment and poor quality height estimation +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.220.table b/definitions/grib2/tables/9/4.220.table new file mode 100644 index 000000000..bdb7a7482 --- /dev/null +++ b/definitions/grib2/tables/9/4.220.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Latitude +1 1 Longitude +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.221.table b/definitions/grib2/tables/9/4.221.table new file mode 100644 index 000000000..880fcda79 --- /dev/null +++ b/definitions/grib2/tables/9/4.221.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Not included +1 1 Extrapolated +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.222.table b/definitions/grib2/tables/9/4.222.table new file mode 100644 index 000000000..34e515d52 --- /dev/null +++ b/definitions/grib2/tables/9/4.222.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No +1 1 Yes +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.223.table b/definitions/grib2/tables/9/4.223.table new file mode 100644 index 000000000..4f72889f7 --- /dev/null +++ b/definitions/grib2/tables/9/4.223.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No fire detected +1 1 Possible fire detected +2 2 Probable fire detected +3 3 Missing value diff --git a/definitions/grib2/tables/9/4.224.table b/definitions/grib2/tables/9/4.224.table new file mode 100644 index 000000000..cdacb1081 --- /dev/null +++ b/definitions/grib2/tables/9/4.224.table @@ -0,0 +1,18 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No risk area +1 1 Reserved +2 2 General thunderstorm risk area +3 3 Reserved +4 4 Slight risk area +5 5 Reserved +6 6 Moderate risk area +7 7 Reserved +8 8 High risk area +# 9-10 Reserved +11 11 Dry thunderstorm (dry lightning) risk area +# 12-13 Reserved +14 14 Critical risk area +# 15-17 Reserved +18 18 Extremely critical risk area +# 19-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/9/4.227.table b/definitions/grib2/tables/9/4.227.table new file mode 100644 index 000000000..0a7d46c85 --- /dev/null +++ b/definitions/grib2/tables/9/4.227.table @@ -0,0 +1,10 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +# Code table 4.227 - Icing scenario (weather/cloud classification) +0 0 None +1 1 General +2 2 Convective +3 3 Stratiform +4 4 Freezing +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.230.table b/definitions/grib2/tables/9/4.230.table new file mode 100644 index 000000000..6e83fa085 --- /dev/null +++ b/definitions/grib2/tables/9/4.230.table @@ -0,0 +1,415 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Ozone +1 1 Water vapour +2 2 Methane +3 3 Carbon dioxide +4 4 Carbon monoxide +5 5 Nitrogen dioxide +6 6 Nitrous oxide +7 7 Formaldehyde +8 8 Sulphur dioxide +9 9 Ammonia +10 10 Ammonium +11 11 Nitrogen monoxide +12 12 Atomic oxygen +13 13 Nitrate radical +14 14 Hydroperoxyl radical +15 15 Dinitrogen pentoxide +16 16 Nitrous acid +17 17 Nitric acid +18 18 Peroxynitric acid +19 19 Hydrogen peroxide +20 20 Molecular hydrogen +21 21 Atomic nitrogen +22 22 Sulphate +23 23 Radon +24 24 Elemental mercury +25 25 Divalent mercury +26 26 Atomic chlorine +27 27 Chlorine monoxide +28 28 Dichlorine peroxide +29 29 Hypochlorous acid +30 30 Chlorine nitrate +31 31 Chlorine dioxide +32 32 Atomic bromine +33 33 Bromine monoxide +34 34 Bromine chloride +35 35 Hydrogen bromide +36 36 Hypobromous acid +37 37 Bromine nitrate +#38-9999 Reserved +10000 10000 Hydroxyl radical +10001 10001 Methyl peroxy radical +10002 10002 Methyl hydroperoxide +10004 10004 Methanol +10005 10005 Formic acid +10006 10006 Hydrogen Cyanide +10007 10007 Aceto nitrile +10008 10008 Ethane +10009 10009 Ethene (= Ethylene) +10010 10010 Ethyne (= Acetylene) +10011 10011 Ethanol +10012 10012 Acetic acid +10013 10013 Peroxyacetyl nitrate +10014 10014 Propane +10015 10015 Propene +10016 10016 Butanes +10017 10017 Isoprene +10018 10018 Alpha pinene +10019 10019 Beta pinene +10020 10020 Limonene +10021 10021 Benzene +10022 10022 Toluene +10023 10023 Xylene +#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...) +10500 10500 Dimethyl sulphide +#10501-20000 Reserved +20001 20001 Hydrogen chloride +20002 20002 CFC-11 +20003 20003 CFC-12 +20004 20004 CFC-113 +20005 20005 CFC-113a +20006 20006 CFC-114 +20007 20007 CFC-115 +20008 20008 HCFC-22 +20009 20009 HCFC-141b +20010 20010 HCFC-142b +20011 20011 Halon-1202 +20012 20012 Halon-1211 +20013 20013 Halon-1301 +20014 20014 Halon-2402 +20015 20015 Methyl chloride (HCC-40) +20016 20016 Carbon tetrachloride (HCC-10) +20017 20017 HCC-140a +20018 20018 Methyl bromide (HBC-40B1) +20019 20019 Hexachlorocyclohexane (HCH) +20020 20020 Alpha hexachlorocyclohexane +20021 20021 Hexachlorobiphenyl (PCB-153) +#20022-29999 Reserved +30000 30000 Radioactive pollutant (tracer, defined by originating centre) +#30001-30009 Reserved +30010 30010 Hydrogen H-3 +30011 30011 Hydrogen organic bounded H-3o +30012 30012 Hydrogen inorganic H-3a +30013 30013 Beryllium 7 Be-7 +30014 30014 Beryllium 10 Be-10 +30015 30015 Carbon 14 C-14 +30016 30016 Carbon 14 CO2 C-14CO2 +30017 30017 Carbon 14 other gases C-14og +30018 30018 Nitrogen 13 N-13 +30019 30019 Nitrogen 16 N-16 +30020 30020 Fluorine 18 F-18 +30021 30021 Sodium 22 Na-22 +30022 30022 Phosphate 32 P-32 +30023 30023 Phosphate 33 P-33 +30024 30024 Sulfur 35 S-35 +30025 30025 Chlorine 36 Cl-36 +30026 30026 Potassium 40 K-40 +30027 30027 Argon 41 Ar-41 +30028 30028 Calcium 41 Ca-41 +30029 30029 Calcium 45 Ca-45 +30030 30030 Titanium 44 +30031 30031 Scandium 46 Sc-46 +30032 30032 Vanadium 48 V-48 +30033 30033 Vanadium 49 V-49 +30034 30034 Chrome 51 Cr-51 +30035 30035 Manganese 52 Mn-52 +30036 30036 Manganese 54 Mn-54 +30037 30037 Iron 55 Fe-55 +30038 30038 Iron 59 Fe-59 +30039 30039 Cobalt 56 Co-56 +30040 30040 Cobalt 57 Co-57 +30041 30041 Cobalt 58 Co-58 +30042 30042 Cobalt 60 Co-60 +30043 30043 Nickel 59 Ni-59 +30044 30044 Nickel 63 Ni-63 +30045 30045 Zinc 65 Zn-65 +30046 30046 Gallium 67 Ga-67 +30047 30047 Gallium 68 Ga-68 +30048 30048 Germanium 68 Ge-68 +30049 30049 Germanium 69 Ge-69 +30050 30050 Arsenic 73 As-73 +30051 30051 Selenium 75 Se-75 +30052 30052 Selenium 79 Se-79 +30053 30053 Rubidium 81 Rb-81 +30054 30054 Rubidium 83 Rb-83 +30055 30055 Rubidium 84 Rb-84 +30056 30056 Rubidium 86 Rb-86 +30057 30057 Rubidium 87 Rb-87 +30058 30058 Rubidium 88 Rb-88 +30059 30059 Krypton 85 Kr-85 +30060 30060 Krypton 85 metastable Kr-85m +30061 30061 Krypton 87 Kr-87 +30062 30062 Krypton 88 Kr-88 +30063 30063 Krypton 89 Kr-89 +30064 30064 Strontium 85 Sr-85 +30065 30065 Strontium 89 Sr-89 +30066 30066 Strontium 89/90 Sr-8990 +30067 30067 Strontium 90 Sr-90 +30068 30068 Strontium 91 Sr-91 +30069 30069 Strontium 92 Sr-92 +30070 30070 Yttrium 87 Y-87 +30071 30071 Yttrium 88 Y-88 +30072 30072 Yttrium 90 Y-90 +30073 30073 Yttrium 91 Y-91 +30074 30074 Yttrium 91 metastable Y-91m +30075 30075 Yttrium 92 Y-92 +30076 30076 Yttrium 93 Y-93 +30077 30077 Zirconium 89 Zr-89 +30078 30078 Zirconium 93 Zr-93 +30079 30079 Zirconium 95 Zr-95 +30080 30080 Zirconium 97 Zr-97 +30081 30081 Niobium 93 metastable Nb-93m +30082 30082 Niobium 94 Nb-94 +30083 30083 Niobium 95 Nb-95 +30084 30084 Niobium 95 metastable Nb-95m +30085 30085 Niobium 97 Nb-97 +30086 30086 Niobium 97 metastable Nb-97m +30087 30087 Molybdenum 93 Mo-93 +30088 30088 Molybdenum 99 Mo-99 +30089 30089 Technetium 95 metastable Tc-95m +30090 30090 Technetium 96 Tc-96 +30091 30091 Technetium 99 Tc-99 +30092 30092 Technetium 99 metastable Tc-99m +30093 30093 Rhodium 99 Rh-99 +30094 30094 Rhodium 101 Rh-101 +30095 30095 Rhodium 102 metastable Rh-102m +30096 30096 Rhodium 103 metastable Rh-103m +30097 30097 Rhodium 105 Rh-105 +30098 30098 Rhodium 106 Rh-106 +30099 30099 Palladium 100 Pd-100 +30100 30100 Palladium 103 Pd-103 +30101 30101 Palladium 107 Pd-107 +30102 30102 Ruthenium 103 Ru-103 +30103 30103 Ruthenium 105 Ru-105 +30104 30104 Ruthenium 106 Ru-106 +30105 30105 Silver 108 metastable Ag-108m +30106 30106 Silver 110 metastable Ag-110m +30107 30107 Cadmium 109 Cd-109 +30108 30108 Cadmium 113 metastable Cd-113m +30109 30109 Cadmium 115 metastable Cd-115m +30110 30110 Indium 114 metastable In-114m +30111 30111 Tin 113 Sn-113 +30112 30112 Tin 119 metastable Sn-119m +30113 30113 Tin 121 metastable Sn-121m +30114 30114 Tin 122 Sn-122 +30115 30115 Tin 123 Sn-123 +30116 30116 Tin 126 Sn-126 +30117 30117 Antimony 124 Sb-124 +30118 30118 Antimony 125 Sb-125 +30119 30119 Antimony 126 Sb-126 +30120 30120 Antimony 127 Sb-127 +30121 30121 Antimony 129 Sb-129 +30122 30122 Tellurium 123 metastable Te-123m +30123 30123 Tellurium 125 metastable Te-125m +30124 30124 Tellurium 127 Te-127 +30125 30125 Tellurium 127 metastable Te-127m +30126 30126 Tellurium 129 Te-129 +30127 30127 Tellurium 129 metastable Te-129m +30128 30128 Tellurium 131 metastable Te-131m +30129 30129 Tellurium 132 Te-132 +30130 30130 Iodine 123 I-123 +30131 30131 Iodine 124 I-124 +30132 30132 Iodine 125 I-125 +30133 30133 Iodine 126 I-126 +30134 30134 Iodine 129 I-129 +30135 30135 Iodine 129 elementary gaseous I-129g +30136 30136 Iodine 129 organic bounded I-129o +30137 30137 Iodine 131 I-131 +30138 30138 Iodine 131 elementary gaseous I-131g +30139 30139 Iodine 131 organic bounded I-131o +30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go +30141 30141 Iodine 131 aerosol I-131a +30142 30142 Iodine 132 I-132 +30143 30143 Iodine 132 elementary gaseous I-132g +30144 30144 Iodine 132 organic bounded I-132o +30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go +30146 30146 Iodine 132 aerosol I-132a +30147 30147 Iodine 133 I-133 +30148 30148 Iodine 133 elementary gaseous I-133g +30149 30149 Iodine 133 organic bounded I-133o +30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go +30151 30151 Iodine 133 aerosol I-133a +30152 30152 Iodine 134 I-134 +30153 30153 Iodine 134 elementary gaseous I-134g +30154 30154 Iodine 134 organic bounded I-134o +30155 30155 Iodine 135 I-135 +30156 30156 Iodine 135 elementary gaseous I-135g +30157 30157 Iodine 135 organic bounded I-135o +30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go +30159 30159 Iodine 135 aerosol I-135a +30160 30160 Xenon 131 metastable Xe-131m +30161 30161 Xenon 133 Xe-133 +30162 30162 Xenon 133 metastable Xe-133m +30163 30163 Xenon 135 Xe-135 +30164 30164 Xenon 135 metastable Xe-135m +30165 30165 Xenon 137 Xe-137 +30166 30166 Xenon 138 Xe-138 +30167 30167 Xenon sum of all Xenon isotopes Xe-sum +30168 30168 Caesium 131 Cs-131 +30169 30169 Caesium 134 Cs-134 +30170 30170 Caesium 135 Cs-135 +30171 30171 Caesium 136 Cs-136 +30172 30172 Caesium 137 Cs-137 +30173 30173 Barium 133 Ba-133 +30174 30174 Barium 137 metastable Ba-137m +30175 30175 Barium 140 Ba-140 +30176 30176 Cerium 139 Ce-139 +30177 30177 Cerium 141 Ce-141 +30178 30178 Cerium 143 Ce-143 +30179 30179 Cerium 144 Ce-144 +30180 30180 Lanthanum 140 La-140 +30181 30181 Lanthanum 141 La-141 +30182 30182 Praseodymium 143 Pr-143 +30183 30183 Praseodymium 144 Pr-144 +30184 30184 Praseodymium 144 metastable Pr-144m +30185 30185 Samarium 145 Sm-145 +30186 30186 Samarium 147 Sm-147 +30187 30187 Samarium 151 Sm-151 +30188 30188 Neodymium 147 Nd-147 +30189 30189 Promethium 146 Pm-146 +30190 30190 Promethium 147 Pm-147 +30191 30191 Promethium 151 Pm-151 +30192 30192 Europium 152 Eu-152 +30193 30193 Europium 154 Eu-154 +30194 30194 Europium 155 Eu-155 +30195 30195 Gadolinium 153 Gd-153 +30196 30196 Terbium 160 Tb-160 +30197 30197 Holmium 166 metastable Ho-166m +30198 30198 Thulium 170 Tm-170 +30199 30199 Ytterbium 169 Yb-169 +30200 30200 Hafnium 175 Hf-175 +30201 30201 Hafnium 181 Hf-181 +30202 30202 Tantalum 179 Ta-179 +30203 30203 Tantalum 182 Ta-182 +30204 30204 Rhenium 184 Re-184 +30205 30205 Iridium 192 Ir-192 +30206 30206 Mercury 203 Hg-203 +30207 30207 Thallium 204 Tl-204 +30208 30208 Thallium 207 Tl-207 +30209 30209 Thallium 208 Tl-208 +30210 30210 Thallium 209 Tl-209 +30211 30211 Bismuth 205 Bi-205 +30212 30212 Bismuth 207 Bi-207 +30213 30213 Bismuth 210 Bi-210 +30214 30214 Bismuth 211 Bi-211 +30215 30215 Bismuth 212 Bi-212 +30216 30216 Bismuth 213 Bi-213 +30217 30217 Bismuth 214 Bi-214 +30218 30218 Polonium 208 Po-208 +30219 30219 Polonium 210 Po-210 +30220 30220 Polonium 212 Po-212 +30221 30221 Polonium 213 Po-213 +30222 30222 Polonium 214 Po-214 +30223 30223 Polonium 215 Po-215 +30224 30224 Polonium 216 Po-216 +30225 30225 Polonium 218 Po-218 +30226 30226 Lead 209 Pb-209 +30227 30227 Lead 210 Pb-210 +30228 30228 Lead 211 Pb-211 +30229 30229 Lead 212 Pb-212 +30230 30230 Lead 214 Pb-214 +30231 30231 Astatine 217 At-217 +30232 30232 Radon 219 Rn-219 +30233 30233 Radon 220 Rn-220 +30234 30234 Radon 222 Rn-222 +30235 30235 Francium 221 Fr-221 +30236 30236 Francium 223 Fr-223 +30237 30237 Radium 223 Ra-223 +30238 30238 Radium 224 Ra-224 +30239 30239 Radium 225 Ra-225 +30240 30240 Radium 226 Ra-226 +30241 30241 Radium 228 Ra-228 +30242 30242 Actinium 225 Ac-225 +30243 30243 Actinium 227 Ac-227 +30244 30244 Actinium 228 Ac-228 +30245 30245 Thorium 227 Th-227 +30246 30246 Thorium 228 Th-228 +30247 30247 Thorium 229 Th-229 +30248 30248 Thorium 230 Th-230 +30249 30249 Thorium 231 Th-231 +30250 30250 Thorium 232 Th-232 +30251 30251 Thorium 234 Th-234 +30252 30252 Protactinium 231 Pa-231 +30253 30253 Protactinium 233 Pa-233 +30254 30254 Protactinium 234 metastable Pa-234m +30255 30255 Uranium 232 U-232 +30256 30256 Uranium 233 U-233 +30257 30257 Uranium 234 U-234 +30258 30258 Uranium 235 U-235 +30259 30259 Uranium 236 U-236 +30260 30260 Uranium 237 U-237 +30261 30261 Uranium 238 U-238 +30262 30262 Plutonium 236 Pu-236 +30263 30263 Plutonium 238 Pu-238 +30264 30264 Plutonium 239 Pu-239 +30265 30265 Plutonium 240 Pu-240 +30266 30266 Plutonium 241 Pu-241 +30267 30267 Plutonium 242 Pu-242 +30268 30268 Plutonium 244 Pu-244 +30269 30269 Neptunium 237 Np-237 +30270 30270 Neptunium 238 Np-238 +30271 30271 Neptunium 239 Np-239 +30272 30272 Americium 241 Am-241 +30273 30273 Americium 242 Am-242 +30274 30274 Americium 242 metastable Am-242m +30275 30275 Americium 243 Am-243 +30276 30276 Curium 242 Cm-242 +30277 30277 Curium 243 Cm-243 +30278 30278 Curium 244 Cm-244 +30279 30279 Curium 245 Cm-245 +30280 30280 Curium 246 Cm-246 +30281 30281 Curium 247 Cm-247 +30282 30282 Curium 248 Cm-248 +30283 30283 Curium 243/244 Cm-243244 +30284 30284 Plutonium 238/Americium 241 Pu-238Am-241 +30285 30285 Plutonium 239/240 Pu-239240 +30286 30286 Berkelium 249 Bk-249 +30287 30287 Californium 249 Cf-249 +30288 30288 Californium 250 Cf-250 +30289 30289 Californium 252 Cf-252 +30290 30290 Sum aerosol particulates SumAer +30291 30291 Sum Iodine SumIod +30292 30292 Sum noble gas SumNG +30293 30293 Activation gas ActGas +30294 30294 Cs-137 Equivalent EquCs137 +#30295-59999 Reserved +60000 60000 HOx radical (OH+HO2) +60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2) +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen NOx +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy +60005 60005 Total inorganic chlorine Clx +60006 60006 Total inorganic bromine Brx +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped alkanes +60010 60010 Lumped alkenes +60011 60011 Lumped aromatic compounds +60012 60012 Lumped terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon +60016 60016 Lumped oxygenated hydrocarbons +#60017-61999 Reserved +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +62013 62013 Black carbon hydrophilic dry +62014 62014 Black carbon hydrophobic dry +62015 62015 Particulate organic matter hydrophilic dry +62016 62016 Particulate organic matter hydrophobic dry +62017 62017 Nitrate hydrophilic dry +62018 62018 Nitrate hydrophobic dry +#62019-65534 Reserved +65535 65535 Missing diff --git a/definitions/grib2/tables/9/4.233.table b/definitions/grib2/tables/9/4.233.table new file mode 100644 index 000000000..6e83fa085 --- /dev/null +++ b/definitions/grib2/tables/9/4.233.table @@ -0,0 +1,415 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Ozone +1 1 Water vapour +2 2 Methane +3 3 Carbon dioxide +4 4 Carbon monoxide +5 5 Nitrogen dioxide +6 6 Nitrous oxide +7 7 Formaldehyde +8 8 Sulphur dioxide +9 9 Ammonia +10 10 Ammonium +11 11 Nitrogen monoxide +12 12 Atomic oxygen +13 13 Nitrate radical +14 14 Hydroperoxyl radical +15 15 Dinitrogen pentoxide +16 16 Nitrous acid +17 17 Nitric acid +18 18 Peroxynitric acid +19 19 Hydrogen peroxide +20 20 Molecular hydrogen +21 21 Atomic nitrogen +22 22 Sulphate +23 23 Radon +24 24 Elemental mercury +25 25 Divalent mercury +26 26 Atomic chlorine +27 27 Chlorine monoxide +28 28 Dichlorine peroxide +29 29 Hypochlorous acid +30 30 Chlorine nitrate +31 31 Chlorine dioxide +32 32 Atomic bromine +33 33 Bromine monoxide +34 34 Bromine chloride +35 35 Hydrogen bromide +36 36 Hypobromous acid +37 37 Bromine nitrate +#38-9999 Reserved +10000 10000 Hydroxyl radical +10001 10001 Methyl peroxy radical +10002 10002 Methyl hydroperoxide +10004 10004 Methanol +10005 10005 Formic acid +10006 10006 Hydrogen Cyanide +10007 10007 Aceto nitrile +10008 10008 Ethane +10009 10009 Ethene (= Ethylene) +10010 10010 Ethyne (= Acetylene) +10011 10011 Ethanol +10012 10012 Acetic acid +10013 10013 Peroxyacetyl nitrate +10014 10014 Propane +10015 10015 Propene +10016 10016 Butanes +10017 10017 Isoprene +10018 10018 Alpha pinene +10019 10019 Beta pinene +10020 10020 Limonene +10021 10021 Benzene +10022 10022 Toluene +10023 10023 Xylene +#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...) +10500 10500 Dimethyl sulphide +#10501-20000 Reserved +20001 20001 Hydrogen chloride +20002 20002 CFC-11 +20003 20003 CFC-12 +20004 20004 CFC-113 +20005 20005 CFC-113a +20006 20006 CFC-114 +20007 20007 CFC-115 +20008 20008 HCFC-22 +20009 20009 HCFC-141b +20010 20010 HCFC-142b +20011 20011 Halon-1202 +20012 20012 Halon-1211 +20013 20013 Halon-1301 +20014 20014 Halon-2402 +20015 20015 Methyl chloride (HCC-40) +20016 20016 Carbon tetrachloride (HCC-10) +20017 20017 HCC-140a +20018 20018 Methyl bromide (HBC-40B1) +20019 20019 Hexachlorocyclohexane (HCH) +20020 20020 Alpha hexachlorocyclohexane +20021 20021 Hexachlorobiphenyl (PCB-153) +#20022-29999 Reserved +30000 30000 Radioactive pollutant (tracer, defined by originating centre) +#30001-30009 Reserved +30010 30010 Hydrogen H-3 +30011 30011 Hydrogen organic bounded H-3o +30012 30012 Hydrogen inorganic H-3a +30013 30013 Beryllium 7 Be-7 +30014 30014 Beryllium 10 Be-10 +30015 30015 Carbon 14 C-14 +30016 30016 Carbon 14 CO2 C-14CO2 +30017 30017 Carbon 14 other gases C-14og +30018 30018 Nitrogen 13 N-13 +30019 30019 Nitrogen 16 N-16 +30020 30020 Fluorine 18 F-18 +30021 30021 Sodium 22 Na-22 +30022 30022 Phosphate 32 P-32 +30023 30023 Phosphate 33 P-33 +30024 30024 Sulfur 35 S-35 +30025 30025 Chlorine 36 Cl-36 +30026 30026 Potassium 40 K-40 +30027 30027 Argon 41 Ar-41 +30028 30028 Calcium 41 Ca-41 +30029 30029 Calcium 45 Ca-45 +30030 30030 Titanium 44 +30031 30031 Scandium 46 Sc-46 +30032 30032 Vanadium 48 V-48 +30033 30033 Vanadium 49 V-49 +30034 30034 Chrome 51 Cr-51 +30035 30035 Manganese 52 Mn-52 +30036 30036 Manganese 54 Mn-54 +30037 30037 Iron 55 Fe-55 +30038 30038 Iron 59 Fe-59 +30039 30039 Cobalt 56 Co-56 +30040 30040 Cobalt 57 Co-57 +30041 30041 Cobalt 58 Co-58 +30042 30042 Cobalt 60 Co-60 +30043 30043 Nickel 59 Ni-59 +30044 30044 Nickel 63 Ni-63 +30045 30045 Zinc 65 Zn-65 +30046 30046 Gallium 67 Ga-67 +30047 30047 Gallium 68 Ga-68 +30048 30048 Germanium 68 Ge-68 +30049 30049 Germanium 69 Ge-69 +30050 30050 Arsenic 73 As-73 +30051 30051 Selenium 75 Se-75 +30052 30052 Selenium 79 Se-79 +30053 30053 Rubidium 81 Rb-81 +30054 30054 Rubidium 83 Rb-83 +30055 30055 Rubidium 84 Rb-84 +30056 30056 Rubidium 86 Rb-86 +30057 30057 Rubidium 87 Rb-87 +30058 30058 Rubidium 88 Rb-88 +30059 30059 Krypton 85 Kr-85 +30060 30060 Krypton 85 metastable Kr-85m +30061 30061 Krypton 87 Kr-87 +30062 30062 Krypton 88 Kr-88 +30063 30063 Krypton 89 Kr-89 +30064 30064 Strontium 85 Sr-85 +30065 30065 Strontium 89 Sr-89 +30066 30066 Strontium 89/90 Sr-8990 +30067 30067 Strontium 90 Sr-90 +30068 30068 Strontium 91 Sr-91 +30069 30069 Strontium 92 Sr-92 +30070 30070 Yttrium 87 Y-87 +30071 30071 Yttrium 88 Y-88 +30072 30072 Yttrium 90 Y-90 +30073 30073 Yttrium 91 Y-91 +30074 30074 Yttrium 91 metastable Y-91m +30075 30075 Yttrium 92 Y-92 +30076 30076 Yttrium 93 Y-93 +30077 30077 Zirconium 89 Zr-89 +30078 30078 Zirconium 93 Zr-93 +30079 30079 Zirconium 95 Zr-95 +30080 30080 Zirconium 97 Zr-97 +30081 30081 Niobium 93 metastable Nb-93m +30082 30082 Niobium 94 Nb-94 +30083 30083 Niobium 95 Nb-95 +30084 30084 Niobium 95 metastable Nb-95m +30085 30085 Niobium 97 Nb-97 +30086 30086 Niobium 97 metastable Nb-97m +30087 30087 Molybdenum 93 Mo-93 +30088 30088 Molybdenum 99 Mo-99 +30089 30089 Technetium 95 metastable Tc-95m +30090 30090 Technetium 96 Tc-96 +30091 30091 Technetium 99 Tc-99 +30092 30092 Technetium 99 metastable Tc-99m +30093 30093 Rhodium 99 Rh-99 +30094 30094 Rhodium 101 Rh-101 +30095 30095 Rhodium 102 metastable Rh-102m +30096 30096 Rhodium 103 metastable Rh-103m +30097 30097 Rhodium 105 Rh-105 +30098 30098 Rhodium 106 Rh-106 +30099 30099 Palladium 100 Pd-100 +30100 30100 Palladium 103 Pd-103 +30101 30101 Palladium 107 Pd-107 +30102 30102 Ruthenium 103 Ru-103 +30103 30103 Ruthenium 105 Ru-105 +30104 30104 Ruthenium 106 Ru-106 +30105 30105 Silver 108 metastable Ag-108m +30106 30106 Silver 110 metastable Ag-110m +30107 30107 Cadmium 109 Cd-109 +30108 30108 Cadmium 113 metastable Cd-113m +30109 30109 Cadmium 115 metastable Cd-115m +30110 30110 Indium 114 metastable In-114m +30111 30111 Tin 113 Sn-113 +30112 30112 Tin 119 metastable Sn-119m +30113 30113 Tin 121 metastable Sn-121m +30114 30114 Tin 122 Sn-122 +30115 30115 Tin 123 Sn-123 +30116 30116 Tin 126 Sn-126 +30117 30117 Antimony 124 Sb-124 +30118 30118 Antimony 125 Sb-125 +30119 30119 Antimony 126 Sb-126 +30120 30120 Antimony 127 Sb-127 +30121 30121 Antimony 129 Sb-129 +30122 30122 Tellurium 123 metastable Te-123m +30123 30123 Tellurium 125 metastable Te-125m +30124 30124 Tellurium 127 Te-127 +30125 30125 Tellurium 127 metastable Te-127m +30126 30126 Tellurium 129 Te-129 +30127 30127 Tellurium 129 metastable Te-129m +30128 30128 Tellurium 131 metastable Te-131m +30129 30129 Tellurium 132 Te-132 +30130 30130 Iodine 123 I-123 +30131 30131 Iodine 124 I-124 +30132 30132 Iodine 125 I-125 +30133 30133 Iodine 126 I-126 +30134 30134 Iodine 129 I-129 +30135 30135 Iodine 129 elementary gaseous I-129g +30136 30136 Iodine 129 organic bounded I-129o +30137 30137 Iodine 131 I-131 +30138 30138 Iodine 131 elementary gaseous I-131g +30139 30139 Iodine 131 organic bounded I-131o +30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go +30141 30141 Iodine 131 aerosol I-131a +30142 30142 Iodine 132 I-132 +30143 30143 Iodine 132 elementary gaseous I-132g +30144 30144 Iodine 132 organic bounded I-132o +30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go +30146 30146 Iodine 132 aerosol I-132a +30147 30147 Iodine 133 I-133 +30148 30148 Iodine 133 elementary gaseous I-133g +30149 30149 Iodine 133 organic bounded I-133o +30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go +30151 30151 Iodine 133 aerosol I-133a +30152 30152 Iodine 134 I-134 +30153 30153 Iodine 134 elementary gaseous I-134g +30154 30154 Iodine 134 organic bounded I-134o +30155 30155 Iodine 135 I-135 +30156 30156 Iodine 135 elementary gaseous I-135g +30157 30157 Iodine 135 organic bounded I-135o +30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go +30159 30159 Iodine 135 aerosol I-135a +30160 30160 Xenon 131 metastable Xe-131m +30161 30161 Xenon 133 Xe-133 +30162 30162 Xenon 133 metastable Xe-133m +30163 30163 Xenon 135 Xe-135 +30164 30164 Xenon 135 metastable Xe-135m +30165 30165 Xenon 137 Xe-137 +30166 30166 Xenon 138 Xe-138 +30167 30167 Xenon sum of all Xenon isotopes Xe-sum +30168 30168 Caesium 131 Cs-131 +30169 30169 Caesium 134 Cs-134 +30170 30170 Caesium 135 Cs-135 +30171 30171 Caesium 136 Cs-136 +30172 30172 Caesium 137 Cs-137 +30173 30173 Barium 133 Ba-133 +30174 30174 Barium 137 metastable Ba-137m +30175 30175 Barium 140 Ba-140 +30176 30176 Cerium 139 Ce-139 +30177 30177 Cerium 141 Ce-141 +30178 30178 Cerium 143 Ce-143 +30179 30179 Cerium 144 Ce-144 +30180 30180 Lanthanum 140 La-140 +30181 30181 Lanthanum 141 La-141 +30182 30182 Praseodymium 143 Pr-143 +30183 30183 Praseodymium 144 Pr-144 +30184 30184 Praseodymium 144 metastable Pr-144m +30185 30185 Samarium 145 Sm-145 +30186 30186 Samarium 147 Sm-147 +30187 30187 Samarium 151 Sm-151 +30188 30188 Neodymium 147 Nd-147 +30189 30189 Promethium 146 Pm-146 +30190 30190 Promethium 147 Pm-147 +30191 30191 Promethium 151 Pm-151 +30192 30192 Europium 152 Eu-152 +30193 30193 Europium 154 Eu-154 +30194 30194 Europium 155 Eu-155 +30195 30195 Gadolinium 153 Gd-153 +30196 30196 Terbium 160 Tb-160 +30197 30197 Holmium 166 metastable Ho-166m +30198 30198 Thulium 170 Tm-170 +30199 30199 Ytterbium 169 Yb-169 +30200 30200 Hafnium 175 Hf-175 +30201 30201 Hafnium 181 Hf-181 +30202 30202 Tantalum 179 Ta-179 +30203 30203 Tantalum 182 Ta-182 +30204 30204 Rhenium 184 Re-184 +30205 30205 Iridium 192 Ir-192 +30206 30206 Mercury 203 Hg-203 +30207 30207 Thallium 204 Tl-204 +30208 30208 Thallium 207 Tl-207 +30209 30209 Thallium 208 Tl-208 +30210 30210 Thallium 209 Tl-209 +30211 30211 Bismuth 205 Bi-205 +30212 30212 Bismuth 207 Bi-207 +30213 30213 Bismuth 210 Bi-210 +30214 30214 Bismuth 211 Bi-211 +30215 30215 Bismuth 212 Bi-212 +30216 30216 Bismuth 213 Bi-213 +30217 30217 Bismuth 214 Bi-214 +30218 30218 Polonium 208 Po-208 +30219 30219 Polonium 210 Po-210 +30220 30220 Polonium 212 Po-212 +30221 30221 Polonium 213 Po-213 +30222 30222 Polonium 214 Po-214 +30223 30223 Polonium 215 Po-215 +30224 30224 Polonium 216 Po-216 +30225 30225 Polonium 218 Po-218 +30226 30226 Lead 209 Pb-209 +30227 30227 Lead 210 Pb-210 +30228 30228 Lead 211 Pb-211 +30229 30229 Lead 212 Pb-212 +30230 30230 Lead 214 Pb-214 +30231 30231 Astatine 217 At-217 +30232 30232 Radon 219 Rn-219 +30233 30233 Radon 220 Rn-220 +30234 30234 Radon 222 Rn-222 +30235 30235 Francium 221 Fr-221 +30236 30236 Francium 223 Fr-223 +30237 30237 Radium 223 Ra-223 +30238 30238 Radium 224 Ra-224 +30239 30239 Radium 225 Ra-225 +30240 30240 Radium 226 Ra-226 +30241 30241 Radium 228 Ra-228 +30242 30242 Actinium 225 Ac-225 +30243 30243 Actinium 227 Ac-227 +30244 30244 Actinium 228 Ac-228 +30245 30245 Thorium 227 Th-227 +30246 30246 Thorium 228 Th-228 +30247 30247 Thorium 229 Th-229 +30248 30248 Thorium 230 Th-230 +30249 30249 Thorium 231 Th-231 +30250 30250 Thorium 232 Th-232 +30251 30251 Thorium 234 Th-234 +30252 30252 Protactinium 231 Pa-231 +30253 30253 Protactinium 233 Pa-233 +30254 30254 Protactinium 234 metastable Pa-234m +30255 30255 Uranium 232 U-232 +30256 30256 Uranium 233 U-233 +30257 30257 Uranium 234 U-234 +30258 30258 Uranium 235 U-235 +30259 30259 Uranium 236 U-236 +30260 30260 Uranium 237 U-237 +30261 30261 Uranium 238 U-238 +30262 30262 Plutonium 236 Pu-236 +30263 30263 Plutonium 238 Pu-238 +30264 30264 Plutonium 239 Pu-239 +30265 30265 Plutonium 240 Pu-240 +30266 30266 Plutonium 241 Pu-241 +30267 30267 Plutonium 242 Pu-242 +30268 30268 Plutonium 244 Pu-244 +30269 30269 Neptunium 237 Np-237 +30270 30270 Neptunium 238 Np-238 +30271 30271 Neptunium 239 Np-239 +30272 30272 Americium 241 Am-241 +30273 30273 Americium 242 Am-242 +30274 30274 Americium 242 metastable Am-242m +30275 30275 Americium 243 Am-243 +30276 30276 Curium 242 Cm-242 +30277 30277 Curium 243 Cm-243 +30278 30278 Curium 244 Cm-244 +30279 30279 Curium 245 Cm-245 +30280 30280 Curium 246 Cm-246 +30281 30281 Curium 247 Cm-247 +30282 30282 Curium 248 Cm-248 +30283 30283 Curium 243/244 Cm-243244 +30284 30284 Plutonium 238/Americium 241 Pu-238Am-241 +30285 30285 Plutonium 239/240 Pu-239240 +30286 30286 Berkelium 249 Bk-249 +30287 30287 Californium 249 Cf-249 +30288 30288 Californium 250 Cf-250 +30289 30289 Californium 252 Cf-252 +30290 30290 Sum aerosol particulates SumAer +30291 30291 Sum Iodine SumIod +30292 30292 Sum noble gas SumNG +30293 30293 Activation gas ActGas +30294 30294 Cs-137 Equivalent EquCs137 +#30295-59999 Reserved +60000 60000 HOx radical (OH+HO2) +60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2) +60002 60002 Passive Ozone +60003 60003 NOx expressed as nitrogen NOx +60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy +60005 60005 Total inorganic chlorine Clx +60006 60006 Total inorganic bromine Brx +60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx +60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx +60009 60009 Lumped alkanes +60010 60010 Lumped alkenes +60011 60011 Lumped aromatic compounds +60012 60012 Lumped terpenes +60013 60013 Non-methane volatile organic compounds expressed as carbon +60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon +60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon +60016 60016 Lumped oxygenated hydrocarbons +#60017-61999 Reserved +62000 62000 Total aerosol +62001 62001 Dust dry +62002 62002 Water in ambient +62003 62003 Ammonium dry +62004 62004 Nitrate dry +62005 62005 Nitric acid trihydrate +62006 62006 Sulphate dry +62007 62007 Mercury dry +62008 62008 Sea salt dry +62009 62009 Black carbon dry +62010 62010 Particulate organic matter dry +62011 62011 Primary particulate organic matter dry +62012 62012 Secondary particulate organic matter dry +62013 62013 Black carbon hydrophilic dry +62014 62014 Black carbon hydrophobic dry +62015 62015 Particulate organic matter hydrophilic dry +62016 62016 Particulate organic matter hydrophobic dry +62017 62017 Nitrate hydrophilic dry +62018 62018 Nitrate hydrophobic dry +#62019-65534 Reserved +65535 65535 Missing diff --git a/definitions/grib2/tables/9/4.234.table b/definitions/grib2/tables/9/4.234.table new file mode 100644 index 000000000..bdf7cf0ec --- /dev/null +++ b/definitions/grib2/tables/9/4.234.table @@ -0,0 +1,21 @@ +# Canopy Cover Fraction (to be used as partitioned parameter) +1 1 Crops Mixed Farming +2 2 Short Grass +3 3 Evergreen Needleleaf Trees +4 4 Deciduous Needleleaf Trees +5 5 Deciduous Broadleaf Trees +6 6 Evergreen Broadleaf Trees +7 7 Tall Grass +8 8 Desert +9 9 Tundra +10 10 Irrigated Crops +11 11 Semidesert +12 12 Ice Caps and Glaciers +13 13 Bogs and Marshes +14 14 Inland Water +15 15 Ocean +16 16 Evergreen Shrubs +17 17 Deciduous Shrubs +18 18 Mixed Forest +19 19 Interrupted Forest +20 20 Water and Land Mixtures diff --git a/definitions/grib2/tables/9/4.235.table b/definitions/grib2/tables/9/4.235.table new file mode 100644 index 000000000..e18bbfbb8 --- /dev/null +++ b/definitions/grib2/tables/9/4.235.table @@ -0,0 +1,8 @@ +# Soil texture fraction +1 1 coarse +2 2 medium +3 3 medium-fine +4 4 fine +5 5 very-fine +6 6 organic +7 7 tropical-organic diff --git a/definitions/grib2/tables/9/4.3.table b/definitions/grib2/tables/9/4.3.table new file mode 100644 index 000000000..2eda6a044 --- /dev/null +++ b/definitions/grib2/tables/9/4.3.table @@ -0,0 +1,16 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Analysis +1 1 Initialization +2 2 Forecast +3 3 Bias corrected forecast +4 4 Ensemble forecast +5 5 Probability forecast +6 6 Forecast error +7 7 Analysis error +8 8 Observation +9 9 Climatological +10 10 Probability-weighted forecast +11 11 Bias-corrected ensemble forecast +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.4.table b/definitions/grib2/tables/9/4.4.table new file mode 100644 index 000000000..2ac2e66ab --- /dev/null +++ b/definitions/grib2/tables/9/4.4.table @@ -0,0 +1,17 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +# 8-9 Reserved +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +# 14-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.5.table b/definitions/grib2/tables/9/4.5.table new file mode 100644 index 000000000..0faf60998 --- /dev/null +++ b/definitions/grib2/tables/9/4.5.table @@ -0,0 +1,48 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 sfc Ground or water surface +2 2 Cloud base level +3 3 Level of cloud tops +4 4 Level of 0 degree C isotherm +5 5 Level of adiabatic condensation lifted from the surface +6 6 Maximum wind level +7 7 Tropopause +8 sfc Nominal top of the atmosphere +9 9 Sea bottom +10 10 Entire atmosphere +11 11 Cumulonimbus (CB) base (m) +12 12 Cumulonimbus (CB) top (m) +# 13-19 Reserved +20 20 Isothermal level (K) +# 21-99 Reserved +100 pl Isobaric surface (Pa) +101 sfc Mean sea level +102 102 Specific altitude above mean sea level (m) +103 sfc Specified height level above ground (m) +104 104 Sigma level (sigma value) +105 ml Hybrid level +106 sfc Depth below land surface (m) +107 pt Isentropic (theta) level (K) +108 108 Level at specified pressure difference from ground to level (Pa) +109 pv Potential vorticity surface (K m2 kg-1 s-1) +110 110 Reserved +111 111 Eta level +112 112 Reserved +113 113 Logarithmic hybrid level +# 114-116 Reserved +117 117 Mixed layer depth (m) +118 hhl Hybrid height level +119 hpl Hybrid pressure level +# 120-149 Reserved +150 150 Generalized vertical height coordinate +# 151-159 Reserved +160 160 Depth below sea level m +161 161 Depth below water surface (m) +162 162 Lake or river bottom +163 163 Bottom of sediment layer +164 164 Bottom of thermally active sediment layer +165 165 Bottom of sediment layer penetrated by thermal wave +166 166 Mixing layer +# 167-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.6.table b/definitions/grib2/tables/9/4.6.table new file mode 100644 index 000000000..ac428b0dd --- /dev/null +++ b/definitions/grib2/tables/9/4.6.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Unperturbed high-resolution control forecast +1 1 Unperturbed low-resolution control forecast +2 2 Negatively perturbed forecast +3 3 Positively perturbed forecast +4 4 Multi-model forecast +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.7.table b/definitions/grib2/tables/9/4.7.table new file mode 100644 index 000000000..bbeb36642 --- /dev/null +++ b/definitions/grib2/tables/9/4.7.table @@ -0,0 +1,14 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Unweighted mean of all members +1 1 Weighted mean of all members +2 2 Standard deviation with respect to cluster mean +3 3 Standard deviation with respect to cluster mean, normalized +4 4 Spread of all members +5 5 Large anomaly index of all members +6 6 Unweighted mean of the cluster members +7 7 Interquartile range (range between the 25th and 75th quantile) +8 8 Minimum of all ensemble members +9 9 Maximum of all ensemble members +# 10-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.8.table b/definitions/grib2/tables/9/4.8.table new file mode 100644 index 000000000..addf015e2 --- /dev/null +++ b/definitions/grib2/tables/9/4.8.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Anomaly correlation +1 1 Root mean square +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.9.table b/definitions/grib2/tables/9/4.9.table new file mode 100644 index 000000000..06ab925d9 --- /dev/null +++ b/definitions/grib2/tables/9/4.9.table @@ -0,0 +1,9 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Probability of event below lower limit +1 1 Probability of event above upper limit +2 2 Probability of event between lower and upper limits (the range includes the lower limit but not the upper limit) +3 3 Probability of event above lower limit +4 4 Probability of event below upper limit +# 5-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/4.91.table b/definitions/grib2/tables/9/4.91.table new file mode 100644 index 000000000..4910debbf --- /dev/null +++ b/definitions/grib2/tables/9/4.91.table @@ -0,0 +1,16 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Smaller than first limit +1 1 Greater than second limit +2 2 Between first and second limit. The range includes the first limit but not the second limit +3 3 Greater than first limit +4 4 Smaller than second limit +5 5 Smaller or equal first limit +6 6 Greater or equal second limit +7 7 Between first and second. The range includes the first limit and the second limit +8 8 Greater or equal first limit +9 9 Smaller or equal second limit +10 10 Between first and second limit. The range includes the second limit but not the first limit +11 11 Equal to first limit. +# 12-191 Reserved +# 192-254 Reserved for local use +255 missing Missing diff --git a/definitions/grib2/tables/9/5.0.table b/definitions/grib2/tables/9/5.0.table new file mode 100644 index 000000000..c7995a965 --- /dev/null +++ b/definitions/grib2/tables/9/5.0.table @@ -0,0 +1,24 @@ +# CODE TABLE 5.0, Data Representation Template Number +0 0 Grid point data - simple packing +1 1 Matrix value at grid point - simple packing +2 2 Grid point data - complex packing +3 3 Grid point data - complex packing and spatial differencing +4 4 Grid point data - IEEE floating point data +6 6 Grid point data - simple packing with pre-processing +40 40 Grid point data - JPEG 2000 code stream format +41 41 Grid point data - Portable Network Graphics (PNG) +#42-49 Reserved +50 50 Spectral data - simple packing +51 51 Spherical harmonics data - complex packing +#52-60 Reserved +61 61 Grid point data - simple packing with logarithm pre-processing +# 62-199 Reserved +200 200 Run length packing with level values +# 201-49151 Reserved +# 49152-65534 Reserved for local use +40000 40000 JPEG2000 Packing +40010 40010 PNG pacling +50000 50000 Sperical harmonics ieee packing +50001 50001 Second order packing +50002 50002 Second order packing +65535 65535 Missing diff --git a/definitions/grib2/tables/9/5.1.table b/definitions/grib2/tables/9/5.1.table new file mode 100644 index 000000000..e79e7c101 --- /dev/null +++ b/definitions/grib2/tables/9/5.1.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Floating point +1 1 Integer +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/5.2.table b/definitions/grib2/tables/9/5.2.table new file mode 100644 index 000000000..83539ffa2 --- /dev/null +++ b/definitions/grib2/tables/9/5.2.table @@ -0,0 +1,8 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Explicit coordinate values set +1 1 Linear coordinates f(1)=C1, f(n)=f(n-1)+C2 +# 2-10 Reserved +11 11 Geometric coordinates f(1)=C1, f(n)=C2*f(n-1) +# 12-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/5.3.table b/definitions/grib2/tables/9/5.3.table new file mode 100644 index 000000000..455a53920 --- /dev/null +++ b/definitions/grib2/tables/9/5.3.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +1 1 Direction degrees true +2 2 Frequency (s-1) +3 3 Radial number (2pi/lambda) (m-1) +# 4-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/5.4.table b/definitions/grib2/tables/9/5.4.table new file mode 100644 index 000000000..52a782cb7 --- /dev/null +++ b/definitions/grib2/tables/9/5.4.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Row by row splitting +1 1 General group splitting +# 2-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/5.40.table b/definitions/grib2/tables/9/5.40.table new file mode 100644 index 000000000..99e76ca33 --- /dev/null +++ b/definitions/grib2/tables/9/5.40.table @@ -0,0 +1,5 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Lossless +1 1 Lossy +# 2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/9/5.40000.table b/definitions/grib2/tables/9/5.40000.table new file mode 100644 index 000000000..1eef7c763 --- /dev/null +++ b/definitions/grib2/tables/9/5.40000.table @@ -0,0 +1,5 @@ +# Code Table 5.40: Type of Compression +0 0 Lossless +1 1 Lossy +#2-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/9/5.5.table b/definitions/grib2/tables/9/5.5.table new file mode 100644 index 000000000..0be38fd21 --- /dev/null +++ b/definitions/grib2/tables/9/5.5.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 No explicit missing values included within data values +1 1 Primary missing values included within data values +2 2 Primary and secondary missing values included within data values +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/5.50002.table b/definitions/grib2/tables/9/5.50002.table new file mode 100644 index 000000000..10c243cb0 --- /dev/null +++ b/definitions/grib2/tables/9/5.50002.table @@ -0,0 +1,19 @@ +# second order packing modes table + +1 0 no boustrophedonic +1 1 boustrophedonic +2 0 Reserved +2 1 Reserved +3 0 Reserved +3 1 Reserved +4 0 Reserved +4 1 Reserved +5 0 Reserved +5 1 Reserved +6 0 Reserved +6 1 Reserved +7 0 Reserved +7 1 Reserved +8 0 Reserved +8 1 Reserved + diff --git a/definitions/grib2/tables/9/5.6.table b/definitions/grib2/tables/9/5.6.table new file mode 100644 index 000000000..49fdd3fea --- /dev/null +++ b/definitions/grib2/tables/9/5.6.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 First-order spatial differencing +2 2 Second-order spatial differencing +# 3-191 Reserved +# 192-254 Reserved for local use +255 255 Missing diff --git a/definitions/grib2/tables/9/5.7.table b/definitions/grib2/tables/9/5.7.table new file mode 100644 index 000000000..02755829a --- /dev/null +++ b/definitions/grib2/tables/9/5.7.table @@ -0,0 +1,7 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 Reserved +1 1 IEEE 32-bit (I=4 in section 7) +2 2 IEEE 64-bit (I=8 in section 7) +3 3 IEEE 128-bit (I=16 in section 7) +# 4-254 Reserved +255 255 Missing diff --git a/definitions/grib2/tables/9/5.8.table b/definitions/grib2/tables/9/5.8.table new file mode 100644 index 000000000..c654331ff --- /dev/null +++ b/definitions/grib2/tables/9/5.8.table @@ -0,0 +1,3 @@ +# CODE TABLE 5.8, lossless compression method +0 no no compression method +255 255 Missing diff --git a/definitions/grib2/tables/9/5.9.table b/definitions/grib2/tables/9/5.9.table new file mode 100644 index 000000000..6925d31a3 --- /dev/null +++ b/definitions/grib2/tables/9/5.9.table @@ -0,0 +1,4 @@ +# CODE TABLE 5.8, pre-processing +0 no no pre-processing +1 logarithm logarithm +255 255 Missing diff --git a/definitions/grib2/tables/9/6.0.table b/definitions/grib2/tables/9/6.0.table new file mode 100644 index 000000000..0d1cb383c --- /dev/null +++ b/definitions/grib2/tables/9/6.0.table @@ -0,0 +1,6 @@ +# Automatically generated by ./create_tables.pl from database fm92_grib2@wrep-db-misc-prod, do not edit +0 0 A bit map applies to this product and is specified in this Section +1 1 A bit map pre-determined by the originating/generating Centre applies to this product and is not specified in this Section +# 1-253 A bit map predetermined by the originating/generating Centre applies to this product and is not specified in this Section +254 254 A bit map defined previously in the same GRIB message applies to this product +255 255 A bit map does not apply to this product diff --git a/definitions/grib2/tables/9/stepType.table b/definitions/grib2/tables/9/stepType.table new file mode 100644 index 000000000..d88e44123 --- /dev/null +++ b/definitions/grib2/tables/9/stepType.table @@ -0,0 +1,4 @@ +# CODE TABLE Step Type + +0 instant Instant +1 interval Interval diff --git a/definitions/grib2/tables/local/ecmf/4/1.2.table b/definitions/grib2/tables/local/ecmf/4/1.2.table new file mode 100644 index 000000000..a0f9c9739 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/4/1.2.table @@ -0,0 +1,4 @@ +# CODE TABLE 1.2, Significance of Reference Time +191 191 funny reference time +#4-191 Reserved +#192-254 Reserved for local use diff --git a/definitions/grib2/tables/local/ecmf/obstat.1.0.table b/definitions/grib2/tables/local/ecmf/obstat.1.0.table new file mode 100644 index 000000000..92a1b7824 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.1.0.table @@ -0,0 +1,2 @@ +#Code Table obstat.1.0: Monitoring Statistics Outputs types +1 obstat Monitoring statistics diff --git a/definitions/grib2/tables/local/ecmf/obstat.10.0.table b/definitions/grib2/tables/local/ecmf/obstat.10.0.table new file mode 100644 index 000000000..347e17f6a --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.10.0.table @@ -0,0 +1,42 @@ +#Code Table obstat.10.0: Data selection criteria +1 Active Active data +2 All All data +3 Non_Active Not Active data +4 Best_Active Best active wind +5 Used Used data +6 VarQC_Rej VarQC rejected data +7 Blacklisted Blacklisted data +8 Failed Failed data +9 Passed_FgCheck Data that passed FG check +10 Non_Rejected All non rejected data +11 VarBC_Passive VarBC passive channels +12 Failed_FG_Non_Black Data failed FG check but not blacklisted +13 Failed_FG_VarQC_Rej Data failed FG check and VARQC rejected +#14-19 Reserved for additional standard IFS flags +20 QI_LE_20 AMVs with QI <= 20 +21 QI_LE_66 AMVs with 20 < QI <=65 +22 QI_GE_65 AMVs with QI > 65 +23 QI_GE_80 AMVs with QI > 80 +24 QI_GE_90 AMVs with QI > 90 +#25-29 Reserved for additional AMVs flags +30 Clear_LE_70%WV_80%IR CSR data with clear fraction < 70 % (WV) and < 80 % (IR) +31 Clear_GE_70%WV_80%IR CSR data with clear fraction >= 70 % (WV) and >= 80 % (IR) +32 Clear_100% CSR data completely clear (according to IR window channel) +33 Clear_GE_40%WV CSR data with clear fraction >= 40 % (WV) +34 Clear_GE_70%WV CSR data with clear fraction >= 70 % (WV) +35 Clear_100%WV CSR data completely clear (according to WV channel) +#36-39 Reserved for additional CSR flags +40 Clear Clear +41 Used_Clear Used clear data +42 Used_Cloudy_Rainy Used cloudy and rainy data +43 All_Cloudy_Rainy All cloudy and rainy data +44 Used_ObsCld_FGClr Used Obs cloudy and FG clear +45 Used_ObsClr_FGCld Used Obs clear and FG cloudy +#44-49 Reserved for additional radiances flags +50 Good_ozone Good ozone data +51 Daytime Day time data +52 Nighttime Night time data +#53-69 Reserved for additional ozone, trace gases and Aerosol flags +#70-79 Reserved for GPSRO flags +#80-89 Reserved for scatterometer flags +#33-255 Reserved diff --git a/definitions/grib2/tables/local/ecmf/obstat.11.0.table b/definitions/grib2/tables/local/ecmf/obstat.11.0.table new file mode 100644 index 000000000..2d82ce7e7 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.11.0.table @@ -0,0 +1,4 @@ +#Code Table obstat.11.0: Scan position definition +0 0 Explicit scan position (table 11.1) +1 1 Scan position interval (table 11.2) +255 255 Missing diff --git a/definitions/grib2/tables/local/ecmf/obstat.2.0.table b/definitions/grib2/tables/local/ecmf/obstat.2.0.table new file mode 100644 index 000000000..e3aea161d --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.2.0.table @@ -0,0 +1,13 @@ +#Code Table obstat.2.0: Observation types +1 Synop Synop +2 Airep Airep +3 Satob Satob +4 Dribu Dribu +5 Temp Temp +6 Pilot Pilot +7 Satem Satem +8 Paob Paob +9 Scatterometer Scatterometer +10 GPSRO Limb +13 Radar Radar +#14-255 Reserved diff --git a/definitions/grib2/tables/local/ecmf/obstat.3.0.table b/definitions/grib2/tables/local/ecmf/obstat.3.0.table new file mode 100644 index 000000000..60b907f57 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.3.0.table @@ -0,0 +1,52 @@ +#Code Table obstat.3.0: Observation code types +2 RADAR RADAR 1 +8 SCATTEROMETER1 SCATTEROMETER 1 +11 Manual_land Manual land station +14 Automatic_land Automatic land station +21 Ship Ship +22 Ship Ship abbreviated +23 Shred Shred +24 Automatic_ship Automatic Ship +32 Land LAND +33 Ship SHIP +34 Profilers WIND PROFILERS +35 Land LAND +36 Ship SHIP +37 Mobile MOBILE +39 Land_Racob LAND ROCOB +40 Ship_Racob SHIP ROCOB +41 Codar Codar +63 Bathy BATHY +64 Tesac TESAC +86 SATEM_GTS SATEM VIA GTS +88 Satob Satob +89 High-Res_VIS_wind High-resolution VIS wind +90 AMV AMV +122 SCATTEROMETER2 SCATTEROMETER 2 +139 SCATTEROMETER3 SCATTEROMETER 3 +141 Aircraft Aircraft +142 Simulated Simulated +144 Amdar Amdar +145 Acars Acars +160 ERS_AS_DRIBU ERS as DRIBU +165 DRIBU DRIBU +135 DROP DROP +137 SIMULATED SIMULATED +180 PAOB PAOB +184 High_Res_Sim_SATEM HIGH RESOLUTION SIMULATED SATEM +185 High_Res_Sim_DWLTOVS HIGH RESOLUTION SIMULATED DWL TOVS +186 High_Res_Sat HIGH RESOLUTION SATTELITE REPORT +188 SST SST +200 GTS_BUFR_SATEM GTS BUFR 250 KM SATEM +201 GTS_BUFR_CLR_Rad GTS BUFR SATEM CLEAR RADIANCE +202 GTS_BUFR_DATEM_RETR GTS BUFR SATEM RETRIEVED PROFILES AND CLEAR RADIANCES +206 OZONE RETRIEVED OZONE (TOTAL & PROFILES) +210 L1C_RADIANCES LEVEL 1C CALIBRATED RADIANCES +211 RTOVS_CLR_RAD RTOVS CLEAR RADIANCES AND RETRIEVED +212 TOVS_CLEAR_RAD TOVS CLEAR RADIANCES AND RETRIEVED +215 AllSky_MWRAD SSMI/AMSRE/SSMIS/TMI +241 COLBA Colba +250 GPSRO GPS RADIO OCCULTATION +251 LIMB LIMB RADIANCES +300 SCATTEROMETER4 SCATTEROMETER 4 +301 SCATTEROMETER5 SCATTEROMETER 5 diff --git a/definitions/grib2/tables/local/ecmf/obstat.4.0.table b/definitions/grib2/tables/local/ecmf/obstat.4.0.table new file mode 100644 index 000000000..389540a2f --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.4.0.table @@ -0,0 +1,58 @@ +#Code Table obstat.4.0: List of meteorological satellites +1 ERS-1 ERS 1 +2 ERS-2 ERS 2 +3 METOP-1 METOP-1 +4 METOP-A METOP-2 +41 CHAMP CHAMP +46 SMOS SMOS +54 METEOSAT-7 METEOSAT 7 +55 METEOSAT-8 METEOSAT 8 +56 METEOSAT-9 METEOSAT 9 +57 METEOSAT-10 METEOSAT 10 +58 METEOSAT-1 METEOSAT 1 +59 METEOSAT-2 METEOSAT 2 +60 ENVISAT ENVISAT +70 METEOSAT-11 METEOSAT 11 +140 GOSAT GOSAT +171 MTSAT-1R MTSAT-1R +172 MTSAT-2 MTSAT-2 +205 NOAA-14 NOAA 14 +206 NOAA-15 NOAA 15 +207 NOAA-16 NOAA 16 +208 NOAA-17 NOAA 17 +209 NOAA-18 NOAA 18 +222 AQUA AQUA +223 NOAA-19 NOAA 19 +224 NPP NPP +246 DMSP-13 DMSP 13 +247 DMSP-14 DMSP 14 +248 DMSP-15 DMSP 15 +249 DMSP-16 DMSP 16 +253 GOES-9 GOES 9 +254 GOES-10 GOES 10 +255 GEOS-11 GOES 11 +256 GEOS-12 GOES 12 +257 GEOS-13 GOES 13 +258 GEOS-14 GOES 14 +259 GEOS-15 GOES 15 +260 JASON-1 JASON-1 +261 JASON-2 JASON-2 +281 QUIKSCAT QUIKSCAT +282 TRMM TRMM +285 DMSP17 DMSP 17 +286 DMSP18 DMSP 18 +500 FY-1C FY-1C +501 FY-1D FY-1D +510 FY-2 FY-2 +512 FY-2B FY-2B +513 FY-2C FY-2C +514 FY-2D FY-2D +740 COSMIC-1 COSMIC-1 +741 COSMIC-2 COSMIC-2 +742 COSMIC-3 COSMIC-3 +743 COSMIC-4 COSMIC-4 +744 COSMIC-5 COSMIC-5 +745 COSMIC-6 COSMIC-6 +783 TERRA TERRA +784 AQUA AQUA +785 AURA AURA diff --git a/definitions/grib2/tables/local/ecmf/obstat.5.0.table b/definitions/grib2/tables/local/ecmf/obstat.5.0.table new file mode 100644 index 000000000..4360eb335 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.5.0.table @@ -0,0 +1,45 @@ +#Code Table obstat.5.0: List of satellite instruments +0 HIRS HIRS +3 AMSUA AMSUA +4 AMSUB AMSUB +6 SSM/I SSM/I +9 TMI TMI +10 SSMI/S SSMI/S +11 AIRS AIRS +15 MHS MHS +16 IASI IASI +17 AMSRE AMSR-E +20 MVIRI MVIRI +21 SEVIRI SEVIRI +22 GOES GOES Imager +24 MTSAT-1R MTSAT-1R imager +102 GPSRO GPSRO +172 GOMOS GOMOS +174 MERIS MERIS +175 SCIAMACHY SCIAMACHY +202 GRAS GRAS +207 SEVIRI_O3 SEVIRI O3 +220 GOME-2 GOME-2 +387 MLS MLS +394 OMI OMI +516 TANSO TANSO +624 SBUV-2 SBUV-2 +2000 AMV_WV_CLOUDY AMV WV cloudy +2001 AMV_IR AMV IR +2002 AMV_VIS AMV VIS +2003 AMV_WVMIX AMV WVMIX +2005 AMV_WV_Clear AMV Water Vapor clear +2100 AMV_WV_6.2_cloudy AMV WV 6.2 cloudy +2101 AMV_IR_ch1 AMV IR ch1 +2102 AMV_VIS_ch1 AMV VIS ch1 +2105 AMV_WV_6.2_clear AMV WV_6.2 clear +2200 AMV_WV_7.3_cloudy AMV WV 7.3 cloudy +2201 AMV_IR_ch2 AMV IR ch2 +2202 AMV_VIS-2 AMV VIS-2 +2205 AMV_WV_7.3_clear AMV WV 7.3 clear +2300 AMV_WV_cloudy_ch3 AMV WV cloudy ch 3 +2301 AMV_IR-10 AMV IR-10 +2305 AMV_WV_clear_Ch3 AMV WV clear Ch3 +2350 QUIKSCAT QUIKSCAT +2150 SCAT SCAT +2190 ASCAT ASCAT diff --git a/definitions/grib2/tables/local/ecmf/obstat.6.0.table b/definitions/grib2/tables/local/ecmf/obstat.6.0.table new file mode 100644 index 000000000..2bb1fa927 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.6.0.table @@ -0,0 +1,6 @@ +#Code Table obstat.6.0: List of data streams +0 Normal_delivery Normal delivery +1 EARS EARS +2 PAC-RARS PAC-RARS +3 DB_MODIS DB MODIS winds +#4-255 Reserved diff --git a/definitions/grib2/tables/local/ecmf/obstat.7.0.table b/definitions/grib2/tables/local/ecmf/obstat.7.0.table new file mode 100644 index 000000000..fcd1c2e02 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.7.0.table @@ -0,0 +1,6 @@ +#Code Table obstat.7.0: Vertical coordinate types +1 1 Channel +2 2 Pressure level +3 3 Pressure layer +4 4 Surface +#5-255 Reserved diff --git a/definitions/grib2/tables/local/ecmf/obstat.8.0.table b/definitions/grib2/tables/local/ecmf/obstat.8.0.table new file mode 100644 index 000000000..42bba1488 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.8.0.table @@ -0,0 +1,6 @@ +#Code Table obstat.8.0: List Mask types +1 Land Land +2 Sea Sea +3 Sea-ice Sea-ice +4 All_surfaces All surface types combined +#5-255 Reserved diff --git a/definitions/grib2/tables/local/ecmf/obstat.9.0.table b/definitions/grib2/tables/local/ecmf/obstat.9.0.table new file mode 100644 index 000000000..f3f4ac9cc --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.9.0.table @@ -0,0 +1,37 @@ +#Code Table obstat.9.0: Observation diagnostics +1 count data count +2 obs Average of observed values +3 obs_stdv Standard deviation of observed values +4 fgdep Average of first guess departure +5 fgdep_stdv Standard deviation of first guess departure +6 andep Average of analysis departure +7 andep_stdv Standard deviation of analysis departure +8 obs_error Average of observation standard error +9 obs_error_stdv Standard deviation of observation standard error +10 bkg_error Average of background standard error +11 bkg_error_stdv Standard deviation of background standard error +12 lr_andep1 Average of low resolution analysis departure update 1 +13 lr_andep1_stdv Standard deviation of low resolution analysis departure update 1 +14 hr_fgdep2 Average of high resolution background departure update 2 +15 hr_fgdep2_stdv Standard deviation of high resolution background departure update 2 +16 lr_andep2 Average of low resolution analysis departure update 2 +17 lr_andep2_stdv Standard deviation of low resolution analysis departure update 2 +18 bcor Average of Bias correction +19 bcor_stdv Standard deviation of bias correction +20 vbcor average of Variational bias correction +21 vbcor_stdv Standard deviation of variational bias correction +22 fgdep_nbcor Average of background departure without bias correction +23 fgdep_nbcor_stdv Standard deviation of background departure without bias correction +24 windspeed Average of wind speed +25 windspeed_stdv Standard deviation of wind speed +26 norm_andep Average of normalised analysis fit +27 norm_andep_stdv Standard deviation of normalised analysis fit +28 norm_fgdep Average of normalised background fit +29 norm_fgdep_stdv Standard deviation of normalised background fit +30 fso Average of forecast sensitivity to observations +31 fso_stdv stdv of forecast sensitivity to observations +32 norm_obs Average of normalised observation +33 norm_obs_stdv stdv of normalised observation +34 anso Average of analyse sensitivity to observations +35 anso_stdv stdv of analyse sensitivity to observations +#36-255 Reserved diff --git a/definitions/grib2/tables/local/ecmf/obstat.reporttype b/definitions/grib2/tables/local/ecmf/obstat.reporttype new file mode 100755 index 000000000..75ccf2900 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.reporttype @@ -0,0 +1,185 @@ +#Code Table obstat.reporttype: List of Report types +1 TIROS-N TIROS-N +2 NOAA-6/HIRS NOAA-6/HIRS +3 NOAA-7/HIRS NOAA-7/HIRS +4 NOAA-8/HIRS NOAA-8/HIRS +5 NOAA-9/HIRS NOAA-9/HIRS +6 NOAA-10/HIRS NOAA-10/HIRS +7 NOAA-11/HIRS NOAA-11/HIRS +8 NOAA-12/HIRS NOAA-12/HIRS +9 NOAA-14/HIRS NOAA-14/HIRS +10 NOAA-15/HIRS NOAA-15/HIRS +11 NOAA-16/HIRS NOAA-16/HIRS +12 NOAA-17/HIRS NOAA-17/HIRS +13 NOAA-18/HIRS NOAA-18/HIRS +14 NOAA-19/HIRS NOAA-19/HIRS +15 METOP-A/HIRS METOP-A/HIRS +1001 NOAA-15/AMSUA NOAA-15/AMSUA +1002 NOAA-16/AMSUA NOAA-16/AMSUA +1003 NOAA-17/AMSUA NOAA-17/AMSUA +1004 NOAA-18/AMSUA NOAA-18/AMSUA +1005 NOAA-19/AMSUA NOAA-19/AMSUA +1006 NOAA-19/AMSUA NOAA-19/AMSUA +1007 METOP-A/AMSUA METOP-A/AMSUA +1008 AQUA/AMSUA AQUA/AMSUA +2001 NOAA-15/AMSUB NOAA-15/AMSUB +2002 NOAA-16/AMSUB NOAA-16/AMSUB +2003 NOAA-17/AMSUB NOAA-17/AMSUB +2004 NOAA-18/AMSUB NOAA-18/AMSUB +2005 NOAA-18/AMSUB NOAA-18/AMSUB +3001 NOAA-19/MHS NOAA-19/MHS +3002 METOP-A/MHS METOP-A/MHS +4001 GOES-5/IMAGER GOES-5/IMAGER +4002 GOES-8/IMAGER GOES-8/IMAGER +4003 GOES-9/IMAGER GOES-9/IMAGER +4004 GOES-10/IMAGER GOES-10/IMAGER +4005 GOES-11/IMAGER GOES-11/IMAGER +4006 GOES-12/IMAGER GOES-12/IMAGER +4007 METEOSAT-7/MVIRI METEOSAT-7/MVIRI +4008 METEOSAT-8/SEVIRI METEOSAT-8/SEVIRI +4009 METEOSAT-9/SEVIRI METEOSAT-9/SEVIRI +4010 MTSAT-1R/IMAGER MTSAT-1R/IMAGER +5001 ERS-2/GOME ERS-2/GOME +5002 METEOSAT-8/SEVIRI METEOSAT-8/SEVIRI +5003 METEOSAT-9/SEVIRI METEOSAT-9/SEVIRI +5004 AURA/MLS AURA/MLS +5005 AURA/OMI AURA/OMI +5006 NOAA-9/SBUV NOAA-9/SBUV +5007 NOAA-11/SBUV NOAA-11/SBUV +5008 NOAA-14/SBUV NOAA-14/SBUV +5009 NOAA-16/SBUV NOAA-16/SBUV +5010 NOAA-17/SBUV NOAA-17/SBUV +5011 NOAA-18/SBUV NOAA-18/SBUV +5012 NOAA-19/SBUV NOAA-19/SBUV +5013 METOP-A/GOME-2 METOP-A/GOME-2 +5014 ENVISAT/SCIAMACHY ENVISAT/SCIAMACHY +5015 ENVISAT/GOMOS ENVISAT/GOMOS +5016 ENVISAT/MIPAS ENVISAT/MIPAS +5017 Metror-3/TOMS Metror-3/TOMS +5018 Nimbus-7/TOMS Nimbus-7/TOMS +6001 ENVISAT/GOMOS ENVISAT/GOMOS +6002 ENVISAT/MERIS ENVISAT/MERIS +7001 METOP-A/GRAS METOP-A/GRAS +7002 CHAMP CHAMP +7003 GRACE-A GRACE-A +7004 COSMIC-1 COSMIC-1 +7005 COSMIC-2 COSMIC-2 +7006 COSMIC-3 COSMIC-3 +7007 COSMIC-4 COSMIC-4 +7008 COSMIC-5 COSMIC-5 +7009 COSMIC-6 COSMIC-6 +8001 METEOSAT-2/AMV METEOSAT-2/AMV +8002 METEOSAT-3/AMV METEOSAT-3/AMV +8003 METEOSAT-4/AMV METEOSAT-4/AMV +8014 METEOSAT-5/AMV METEOSAT-5/AMV +8005 METEOSAT-6/AMV METEOSAT-6/AMV +8006 METEOSAT-7/AMV METEOSAT-7/AMV +8007 METEOSAT-8/AMV METEOSAT-8/AMV +8008 METEOSAT-9/AMV METEOSAT-9/AMV +8009 GMS-5/AMV GMS-5/AMV +8010 MTSAT-1R/AMV MTSAT-1R/AMV +8011 GOES-9/WV GOES-9/WV +8012 GOES-10/AMV GOES-10/AMV +8013 GOES-11/AMV GOES-11/AMV +8014 GOES-12/AMV GOES-12/AMV +8015 NOAA-15/AVHRR NOAA-15/AVHRR +8016 NOAA-16/AVHRR NOAA-16/AVHRR +8017 NOAA-17/AVHRR NOAA-17/AVHRR +8018 NOAA-18/AVHRR NOAA-18/AVHRR +8019 NOAA-19/AVHRR NOAA-19/AVHRR +8020 TERRA/MODIS TERRA/MODIS +8021 AQUA/MODIS AQUA/MODIS +8022 FY-2C/IR FY-2C/IR +9001 ERS/SCATT ERS/SCATT +9002 ERS/SCATT ERS/SCATT +9003 ERS-2/SCATT ERS-2/SCATT +9004 QuickSCAT/SeaWind QuickSCAT/SeaWind +9005 METOP-A/ASCAT METOP-A/ASCAT +10001 DSMP-7/SSMI DSMP-7/SSMI +10002 DSMP-8/SSMI DSMP-8/SSMI +10003 DSMP-9/SSMI DSMP-9/SSMI +10004 DSMP-10/SSMI DSMP-10/SSMI +10005 DSMP-11/SSMI DSMP-11/SSMI +10006 DSMP-13/SSMI DSMP-13/SSMI +10007 DSMP-14/SSMI DSMP-14/SSMI +10008 DSMP-15/SSMI DSMP-15/SSMI +10009 DSMP-8/SSMI DSMP-8/SSMI +10010 DSMP-9/SSMI DSMP-9/SSMI +10011 DSMP-10/SSMI DSMP-10/SSMI +10012 DSMP-11/SSMI DSMP-11/SSMI +10013 DSMP-13/SSMI DSMP-13/SSMI +10014 DSMP-14/SSMI DSMP-14/SSMI +10015 DSMP-15/SSMI DSMP-15/SSMI +11001 METOP-A/IASI METOP-A/IASI +12001 AQUA/AIRS AQUA/AIRS +13001 DMSP-16/SSMIS DMSP-16/SSMIS +14001 TRMM/TMI TRMM/TMI +15001 AQUA/AMSRE AQUA/AMSRE +16001 Automatic-Land Automatic-Land +16002 Manual-Land Manual-Land +16003 Abbreviated-SYNOP Abbreviated-SYNOP +16004 METAR METAR +16005 DRIBU DRIBU +16006 Automatic-SHIP Automatic-SHIP +16007 Reduced-SHIP Reduced-SHIP +16008 SHIP SHIP +16009 Abbreviated-SHIP Abbreviated-SHIP +16010 DRIBU-BATHY DRIBU-BATHY +16011 DRIBU-TESAC DRIBU-TESAC +16012 Ground-Based-GPS Ground-Based-GPS +16013 Land-PILOT Land-PILOT +16014 PILOT-SHIP PILOT-SHIP +16015 American-WindProfilers American-WindProfilers +16016 American-WindProfilers American-WindProfilers +16017 European-WindProfilers European-WindProfilers +16018 Japanese-WindProfilers Japanese-WindProfilers +16019 TEMP-SHIP TEMP-SHIP +16020 DROP-Sonde DROP-Sonde +16021 Mobile-TEMP Mobile-TEMP +16022 Land-TEMP Land-TEMP +16023 ROCOB-TEMP ROCOB-TEMP +16024 SHIP-ROCOB SHIP-ROCOB +16025 European-WindProfilers European-WindProfilers +16026 AIREP AIREP +16027 CODAR CODAR +16028 COLBA COLBA +16029 AMDAR AMDAR +16030 ACARS ACARS +16031 PAOB PAOB +16032 PAOB PAOB +16033 SATOB_Temperature SATOB_Temperature +16034 SATOB_Wind SATOB_Wind +16035 SATOB_Temperature SATOB_Temperature +16036 SATOB_Temperature SATOB_Temperature +16037 SATEM_500km SATEM_500km +16038 SATEM_500km SATEM_500km +16039 SATEM_500km SATEM_500km +16040 SATEM_500km SATEM_500km +16041 SATEM_250km SATEM_250km +16042 SATEM_250km SATEM_250km +16043 SATEM_250km SATEM_250km +16044 SATEM_250km SATEM_250km +17001 Automatic_Land Automatic_Land +17002 Manual_Land Manual_Land +17003 Abbreviated_SYNOP Abbreviated_SYNOP +17004 METAR METAR +17005 DRIBU DRIBU +17006 Automatic_SHIP Automatic_SHIP +17007 Reduced_SHIP Reduced_SHIP +17008 SHIP SHIP +17009 Abbreviated-SHIP Abbreviated-SHIP +17010 DRIBU-BATHY DRIBU-BATHY +17011 DRIBU-TESAC DRIBU-TESAC +17012 Ground-Based_GPS Ground-Based_GPS +17013 Land-PILOT Land-PILOT +17014 PILOT-SHIP PILOT-SHIP +17015 American-Wind American-Wind +17016 American-Wind American-Wind +17017 European-Wind European-Wind +17018 Japanese-Wind Japanese-Wind +17019 TEMP-SHIP TEMP-SHIP +17020 DROP-Sonde DROP-Sonde +17021 Mobile-TEMP Mobile-TEMP +17022 Land-TEMP Land-TEMP +17023 ROCOB-TEMP ROCOB-TEMP +17024 SHIP-ROCOB SHIP-ROCOB diff --git a/definitions/grib2/tables/local/ecmf/obstat.varno b/definitions/grib2/tables/local/ecmf/obstat.varno new file mode 100755 index 000000000..cb80dc4e1 --- /dev/null +++ b/definitions/grib2/tables/local/ecmf/obstat.varno @@ -0,0 +1,31 @@ +#Code Table obstat.4.0: List of variable number +110 P Pressure (Pa) + 1 Z Geopotential height (m) + 57 Z Geopotential height (m) + 3 U zonal component of wind (m/s) + 4 V meridional component of wind (m/s) + 41 10mU 10 m zonal component of wind (m/s) + 42 10mV 10 m meridional component of wind (m/s) +125 Amb_10mU 10 m zonal ambiguous component of wind (m/s) +124 Amb_10mV 10 m meridional ambiguous component of wind (m/s) +111 DD wind direction (DD) degree +112 FF wind speed (FF) m/s + 2 T Temperature (K) + 39 T2m 2m temperature (K) + 59 DewPT Dew point temperature (K) +119 BT Brightness temperature (K) + 7 SHU specific humidity (Kg/kg) + 9 PWC precipitable water content (Kg/m2) + 58 RH 2m relative humidity (%) +123 LWC liquid water content (Kg/m2) +206 Ozone integrated ozone density (O3) DU +128 Path_delay Atmospheric path delay +162 Bending_Angle Bending Angle (Alpha) Radians +174 Aerosol Aerosol +181 NO2 Nitrogen dioxide (NO2) +182 SO2 Sulphur dioxide (SO2) +183 CO Carbon monoxide (CO) +184 HCHO Formaldehyde (HCHO) +185 GO3 GEMS ozone (GO3) +186 CO2 Carbone dioxide (CO2) +188 CH4 Methane (CH4) diff --git a/definitions/grib2/template.3.0.def b/definitions/grib2/template.3.0.def new file mode 100644 index 000000000..8294fe143 --- /dev/null +++ b/definitions/grib2/template.3.0.def @@ -0,0 +1,13 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.0, Latitude/longitude (or equidistant cylindrical, or Plate Carree) + +include "template.3.shape_of_the_earth.def"; +include "template.3.latlon.def"; diff --git a/definitions/grib2/template.3.1.def b/definitions/grib2/template.3.1.def new file mode 100644 index 000000000..88be37375 --- /dev/null +++ b/definitions/grib2/template.3.1.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.1, Rotated Latitude/longitude (or equidistant cylindrical, or Plate Carree) + +include "template.3.shape_of_the_earth.def"; +include "template.3.latlon.def"; +include "template.3.rotation.def"; diff --git a/definitions/grib2/template.3.10.def b/definitions/grib2/template.3.10.def new file mode 100644 index 000000000..1af8b470e --- /dev/null +++ b/definitions/grib2/template.3.10.def @@ -0,0 +1,74 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.10, Mercator + +include "template.3.shape_of_the_earth.def"; + +unsigned[4] Ni : dump; +alias numberOfPointsAlongAParallel=Ni; +alias Nx = Ni; +alias geography.Ni=Ni; + +unsigned[4] Nj : dump; +alias numberOfPointsAlongAMeridian=Nj; +alias Nx = Nj ; +alias geography.Nj=Nj; + +# La1 - latitude of first grid point +signed[4] latitudeOfFirstGridPoint: edition_specific,no_copy ; +alias La1 = latitudeOfFirstGridPoint; +meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump; + +# Lo1 - longitude of first grid point +signed[4] longitudeOfFirstGridPoint : edition_specific,no_copy; +alias Lo1 = longitudeOfFirstGridPoint; +meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump; + +include "template.3.resolution_flags.def"; + +# LaD - Latitude(s) at which the Mercator projection intersects the Earth +# (Latitude(s) where Di and Dj are specified) +signed[4] LaD : edition_specific,no_copy; +meta geography.LaDInDegrees scale(LaD,oneConstant,grib2divider,truncateDegrees) : dump; + +# La2 - latitude of last grid point +signed[4] latitudeOfLastGridPoint : edition_specific,no_copy; +alias La2 = latitudeOfLastGridPoint; +meta geography.latitudeOfLastGridPointInDegrees scale(latitudeOfLastGridPoint,oneConstant,grib2divider,truncateDegrees) : dump; + +# Lo2 - longitude of last grid point +signed[4] longitudeOfLastGridPoint: edition_specific,no_copy ; +alias Lo2 = longitudeOfLastGridPoint; +meta geography.longitudeOfLastGridPointInDegrees scale(longitudeOfLastGridPoint,oneConstant,grib2divider,truncateDegrees) : dump; + +include "template.3.scanning_mode.def"; + +# Orientation of the grid, angle between i direction on the map and the equator +# NOTE 1 NOT FOUND +unsigned[4] orientationOfTheGrid : dump ; +meta geography.orientationOfTheGridInDegrees + scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump; + +# Di - longitudinal direction grid length +# NOTE 2 NOT FOUND +unsigned[4] Di : edition_specific,no_copy ; +alias longitudinalDirectionGridLength = Di ; +meta geography.DiInMetres + scale(Di,oneConstant,thousand,truncateDegrees) : dump; + +# Dj - latitudinal direction grid length +# NOTE 2 NOT FOUND +unsigned[4] Dj : edition_specific,no_copy ; +alias latitudinalDirectionGridLength = Dj; +meta geography.DjInMetres + scale(Dj,oneConstant,thousand,truncateDegrees) : dump; + + +# END 2/template.3.10 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.3.100.def b/definitions/grib2/template.3.100.def new file mode 100644 index 000000000..ef250f2e8 --- /dev/null +++ b/definitions/grib2/template.3.100.def @@ -0,0 +1,50 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# TEMPLATE 3.100, Triangular grid based on an icosahedron (see Attachment I.2-GRIB-Att.) + +# n2 - exponent of 2 for the number of intervals on main triangle sides +unsigned[1] n2 : dump ; + +# n3 - exponent of 3 for the number of intervals on main triangle sides +unsigned[1] n3 : dump ; + +# Ni - number of intervals on main triangle sides of the icosahedron +unsigned[2] Ni : dump ; + +# nd - Number of diamonds +unsigned[1] nd : dump ; +alias numberOfDiamonds=nd; + +# Latitude of the pole point of the icosahedron on the sphere +signed[4] latitudeOfThePolePoint : dump ; + +# Longitude of the pole point of the icosahedron on the sphere +unsigned[4] longitudeOfThePolePoint : dump ; +meta longitudeOfThePolePointInDegrees g2lon(longitudeOfThePolePoint); + +# Longitude of the center line of the first diamond of the icosahedron on the sphere +unsigned[4] longitudeOfFirstDiamondCenterLine : dump ; +meta longitudeOfFirstDiamondCenterLineInDegrees g2lon(longitudeOfFirstDiamondCenterLine); + +# Grid point position +codetable[1] gridPointPosition ('3.8.table',masterDir,localDir); + +# Numbering order of diamonds +flags[1] numberingOrderOfDiamonds 'grib2/tables/[tablesVersion]/3.9.table'; + +# Scanning mode for one diamond +flags[1] scanningModeForOneDiamond 'grib2/tables/[tablesVersion]/3.10.table'; + +# nt - total number of grid points +unsigned[4] totalNumberOfGridPoints : dump ; + +alias nt = totalNumberOfGridPoints; + diff --git a/definitions/grib2/template.3.1000.def b/definitions/grib2/template.3.1000.def new file mode 100644 index 000000000..c2ab7f1d8 --- /dev/null +++ b/definitions/grib2/template.3.1000.def @@ -0,0 +1,69 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# TEMPLATE 3.1000, Cross-section grid, with points equally spaced on the horizontal + +include "template.3.shape_of_the_earth.def"; + + +# Number of horizontal points +unsigned[4] numberOfHorizontalPoints : dump ; + +# Basic angle of the initial production domain +# NOTE 1 NOT FOUND +unsigned[4] basicAngleOfTheInitialProductionDomain = 0; + +# Subdivisions of basic angle used to define extreme longitudes and latitudes +# NOTE 1 NOT FOUND +unsigned[4] subdivisionsOfBasicAngle = missing() : can_be_missing;; + +# La1 - latitude of first grid point +# NOTE 1 NOT FOUND +signed[4] latitudeOfFirstGridPoint : edition_specific ; + +alias La1 = latitudeOfFirstGridPoint; +# Lo1 - longitude of first grid point +# NOTE 1 NOT FOUND +unsigned[4] longitudeOfFirstGridPoint : edition_specific; + +alias Lo1 = longitudeOfFirstGridPoint; + +include "template.3.scanning_mode.def"; + +# La2 - latitude of last grid point +# NOTE 1 NOT FOUND +signed[4] latitudeOfLastGridPoint : edition_specific; + +alias La2 = latitudeOfLastGridPoint; +# Lo2 - longitude of last grid point +# NOTE 1 NOT FOUND +unsigned[4] longitudeOfLastGridPoint: edition_specific ; + +alias Lo2 = longitudeOfLastGridPoint; +# Type of horizontal line +codetable[1] typeOfHorizontalLine ('3.20.table',masterDir,localDir) : dump ; + +# Number of vertical points +unsigned[2] numberOfVerticalPoints : dump ; + +# Physical meaning of vertical coordinate +codetable[1] meaningOfVerticalCoordinate ('3.15.table',masterDir,localDir) : dump ; + +# Vertical dimension coordinate values definition +codetable[1] verticalCoordinate ('3.21.table',masterDir,localDir) : dump ; + +# NC - Number of coefficients or values used to specify vertical coordinates +unsigned[2] NC : dump ; + +# Octets 67-(66+NC*4) : Coefficients to define vertical dimension coordinate values in functional form, or the explicit coordinate values +# (IEEE 32-bit floating-point values) +# ???? coefficients_to_define_vertical_dimension_coordinate_values_in_functional_form_or_the_explicit_coordinate_values + + diff --git a/definitions/grib2/template.3.101.def b/definitions/grib2/template.3.101.def new file mode 100644 index 000000000..31682a71f --- /dev/null +++ b/definitions/grib2/template.3.101.def @@ -0,0 +1,19 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.101, General Unstructured Grid + +codetable[1] shapeOfTheEarth ('3.2.table',masterDir,localDir) : dump; + +unsigned[3] numberOfGridUsed : dump; + +unsigned[1] numberOfGridInReference : dump; + +# UUID of horizontal grid +byte[16] uuidOfHGrid : dump; diff --git a/definitions/grib2/template.3.110.def b/definitions/grib2/template.3.110.def new file mode 100644 index 000000000..db8de68aa --- /dev/null +++ b/definitions/grib2/template.3.110.def @@ -0,0 +1,44 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# TEMPLATE 3.110, Equatorial azimuthal equidistant projection +include "template.3.shape_of_the_earth.def"; + +# Nx - number of points along X-axis +unsigned[4] numberOfPointsAlongXAxis : dump ; + +alias Nx = numberOfPointsAlongXAxis; +# Ny - number of points along Y-axis +unsigned[4] numberOfPointsAlongYAxis : dump ; + +alias Ny = numberOfPointsAlongYAxis; +# La1 - latitude of tangency point +# (center of grid) +signed[4] latitudeOfTangencyPoint : dump ; + +alias La1 = latitudeOfTangencyPoint; +# Lo1 - longitude of tangency point +unsigned[4] longitudeOfTangencyPoint : dump ; + +alias Lo1 = longitudeOfTangencyPoint; +# Resolution and component flag +flags[1] resolutionAndComponentFlag 'grib2/tables/[tablesVersion]/3.3.table' : dump ; + +# Dx - X-direction grid length in units of 10 -3 m as measured at the point of the axis +unsigned[4] Dx : dump ; + +# Dy - Y-direction grid length in units of 10 -3 m as measured at the point of the axis +unsigned[4] Dy : dump ; + +# Projection center flag +unsigned[1] projectionCenterFlag : dump ; + +include "template.3.scanning_mode.def"; + diff --git a/definitions/grib2/template.3.1100.def b/definitions/grib2/template.3.1100.def new file mode 100644 index 000000000..c6fe64b06 --- /dev/null +++ b/definitions/grib2/template.3.1100.def @@ -0,0 +1,89 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# TEMPLATE 3.1100, Hovm�ller diagram grid, with points equally spaced on the horizontal +include "template.3.shape_of_the_earth.def"; + +# Number of horizontal points +unsigned[5] numberOfHorizontalPoints : dump ; + +# Basic angle of the initial production domain +# NOTE 1 NOT FOUND +unsigned[4] basicAngleOfTheInitialProductionDomain = 0 : dump ; + +# Subdivisions of basic angle used to define extreme longitudes and latitudes +# NOTE 1 NOT FOUND +unsigned[4] subdivisionsOfBasicAngle = missing() : can_be_missing,dump; + +# La1 - latitude of first grid point +# NOTE 1 NOT FOUND +signed[4] latitudeOfFirstGridPoint : edition_specific,dump; + +alias La1 =latitudeOfFirstGridPoint; +# Lo1 - longitude of first grid point +# NOTE 1 NOT FOUND +unsigned[4] longitudeOfFirstGridPoint : edition_specific,dump; + +alias Lo1 =longitudeOfFirstGridPoint; + +include "template.3.scanning_mode.def"; + +# La2 - latitude of last grid point +# NOTE 1 NOT FOUND +signed[4] latitudeOfLastGridPoint : edition_specific,dump; + +alias La2 = latitudeOfLastGridPoint; +# Lo2 - longitude of last grid point +# NOTE 1 NOT FOUND +unsigned[4] longitudeOfLastGridPoint : edition_specific,dump ; + +alias Lo2 = longitudeOfLastGridPoint; +# Type of horizontal line +codetable[1] typeOfHorizontalLine ('3.20.table',masterDir,localDir) : dump; + +# NT - Number of time steps +unsigned[4] numberOfTimeSteps : dump; + +alias NT = numberOfTimeSteps; +# Unit of offset from reference time +codetable[1] unitOfOffsetFromReferenceTime ('4.4.table',masterDir,localDir) : dump; + +# Offset from reference of first time +# (negative value when first bit set) +unsigned[4] offsetFromReferenceOfFirstTime ; + +# Type of time increment +codetable[1] typeOfTimeIncrement ('4.11.table',masterDir,localDir) : dump; + +# Unit of time increment +codetable[1] unitOfTimeIncrement ('4.4.table',masterDir,localDir) : dump; + +# Time increment +# (negative value when first bit set) +unsigned[4] timeIncrement : dump ; + +# Year +unsigned[2] year : dump; + +# Month +unsigned[1] month : dump; + +# Day +unsigned[1] day : dump; + +# Hour +unsigned[1] hour : dump; + +# Minute +unsigned[1] minute : dump; + +# Second +unsigned[1] second : dump; + diff --git a/definitions/grib2/template.3.12.def b/definitions/grib2/template.3.12.def new file mode 100644 index 000000000..038778618 --- /dev/null +++ b/definitions/grib2/template.3.12.def @@ -0,0 +1,79 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.12, Transverse Mercator + +include "template.3.shape_of_the_earth.def"; + +unsigned[4] Ni : dump; +alias numberOfPointsAlongAParallel=Ni; +alias Nx = Ni; +alias geography.Ni=Ni; + +unsigned[4] Nj : dump; +alias numberOfPointsAlongAMeridian=Nj; +alias Nx = Nj ; +alias geography.Nj=Nj; + +# LaR - geographic latitude of reference point +signed[4] latitudeOfReferencePoint: edition_specific,no_copy ; +alias LaR = latitudeOfReferencePoint; +meta geography.latitudeOfReferencePointInDegrees scale(latitudeOfReferencePoint,oneConstant,grib2divider,truncateDegrees) : dump; + +# LoR - geographic longitude of reference point +signed[4] longitudeOfReferencePoint : edition_specific,no_copy; +alias LoR = longitudeOfReferencePoint; +meta geography.longitudeOfReferencePointInDegrees scale(longitudeOfReferencePoint,oneConstant,grib2divider,truncateDegrees) : dump; + +include "template.3.resolution_flags.def"; + +# m - scale factor at reference point ratio of distance on map to distance on spheroid +# (IEEE 32-bit floating-point values) +signed[4] scaleFactorAtReferencePoint : edition_specific,no_copy; +alias m = scaleFactorAtReferencePoint; +alias geography.m=m; + +# XR - false easting, i-direction coordinate of reference point in units of 10-2 m +signed[4] XR : edition_specific,no_copy; +alias falseEasting = XR; +meta geography.XRInMetres scale(XR,one,hundred) : dump; + +# YR - false northing, j-direction coordinate of reference point in units of 10-2 m +signed[4] YR : edition_specific,no_copy ; +alias falseNorthing = YR; +meta geography.YRInMetres scale(YR,one,hundred) : dump; + +include "template.3.scanning_mode.def"; + +# Di - i-direction increment length in units of 10-2 m +unsigned[4] Di : edition_specific,no_copy; +alias iDirectionIncrementGridLength = Di; +meta geography.DiInMetres scale(Di,oneConstant,hundred,truncateDegrees) : dump; + +# Dj - j-direction increment length in units of 10-2 m +unsigned[4] Dj : edition_specific,no_copy; +alias jDirectionIncrementGridLength = Dj; +meta geography.DjInMetres scale(Dj,oneConstant,hundred,truncateDegrees) : dump; + +# x1 - i-direction coordinate of the first grid point in units of 10-2 m +unsigned[4] X1 : no_copy; +meta geography.X1InGridLengths scale(X1,one,hundred) : dump; + +# y1 - j-direction coordinate of the first grid point in units of 10-2 m +unsigned[4] Y1 : no_copy; +meta geography.Y1InGridLengths scale(Y1,one,hundred) : dump; + +# x2 - i-direction coordinate of the last grid point in units of 10-2 m +unsigned[4] X2 : no_copy; +meta geography.X2InGridLengths scale(X2,one,hundred) : dump; + +# y2 - j-direction coordinate of the last grid point in units of 10-2 m +unsigned[4] Y2 : no_copy; +meta geography.Y2InGridLengths scale(Y2,one,hundred) : dump; + diff --git a/definitions/grib2/template.3.120.def b/definitions/grib2/template.3.120.def new file mode 100644 index 000000000..b2894e5ca --- /dev/null +++ b/definitions/grib2/template.3.120.def @@ -0,0 +1,51 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.120, Azimuth-range projection +# Nb - number of data bins along radials (A data bin is a data point representing the volume centred on it) +unsigned[4] numberOfDataBinsAlongRadials ; +alias Nb = numberOfDataBinsAlongRadials; + +# Nr - number of radials +unsigned[4] numberOfRadials ; +alias Nr = numberOfRadials; + +# La1 - latitude of center point +signed[4] latitudeOfCenterPoint ; +alias La1 = latitudeOfCenterPoint; +meta geography.latitudeOfCenterPointInDegrees + scale(latitudeOfCenterPoint,one,grib2divider,truncateDegrees) : dump; +alias La1InDegrees=latitudeOfCenterPointInDegrees; + +# Lo1 - longitude of center point +unsigned[4] longitudeOfCenterPoint ; +alias Lo1 = longitudeOfCenterPoint; +meta geography.longitudeOfCenterPointInDegrees + scale(longitudeOfCenterPoint,one,grib2divider,truncateDegrees) : dump; +alias Lo1InDegrees=longitudeOfCenterPointInDegrees; + +# Dx - spacing of bins along radials +unsigned[4] spacingOfBinsAlongRadials ; +alias Dx = spacingOfBinsAlongRadials; + +# Dstart - offset from origin to inner bound +unsigned[4] offsetFromOriginToInnerBound ; +alias Dstart = offsetFromOriginToInnerBound; + +include "template.3.scanning_mode.def"; + +# Octets 40-(39+4Nr) : For each of Nr radials: +radials list(numberOfRadials){ + # Azi - starting azimuth, degrees x 10 (degrees as north) + signed[2] startingAzimuth; + alias Azi = startingAzimuth; + # Adelta - azimuthal width, degrees x 100 (+ clockwise, - counterclockwise) + signed[2] azimuthalWidth; + alias Adelta = azimuthalWidth; +} diff --git a/definitions/grib2/template.3.1200.def b/definitions/grib2/template.3.1200.def new file mode 100644 index 000000000..bf19b7fa5 --- /dev/null +++ b/definitions/grib2/template.3.1200.def @@ -0,0 +1,66 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# TEMPLATE 3.1200, Time section grid +# NT - Number of time steps +unsigned[4] numberOfTimeSteps : dump; + +alias NT = numberOfTimeSteps; +# Unit of offset from reference time +codetable[1] unitOfOffsetFromReferenceTime ('4.4.table',masterDir,localDir) : dump; + +# Offset from reference of first time +# (negative value when first bit set) +unsigned[4] offsetFromReferenceOfFirstTime : dump; + +# Type of time increment +codetable[1] typeOfTimeIncrement ('4.11.table',masterDir,localDir) : dump; + +# Unit of time increment +codetable[1] unitOfTimeIncrement ('4.4.table',masterDir,localDir) : dump; + +# Time increment +# (negative value when first bit set) +unsigned[4] timeIncrement : dump; + +# Year +unsigned[2] year : dump; + +# Month +unsigned[1] month : dump; + +# Day +unsigned[1] day : dump; + +# Hour +unsigned[1] hour : dump; + +# Minute +unsigned[1] minute : dump; + +# Second +unsigned[1] second : dump; + +# Number of vertical points +unsigned[2] numberOfVerticalPoints : dump; + +# Physical meaning of vertical coordinate +codetable[1] physicalMeaningOfVerticalCoordinate ('3.15.table',masterDir,localDir) : dump; + +# Vertical dimension coordinate values definition +codetable[1] verticalCoordinate ('3.21.table',masterDir,localDir) : dump; + +# NC - Number of coefficients or values used to specify vertical coordinates +unsigned[2] NC : dump; + +# Octets 43-(42+NC*4) : Coefficients to define vertical dimension coordinate values in functional form, or the explicit coordinate values +# (IEEE 32-bit floating-point values) +# ???? coefficients_to_define_vertical_dimension; + diff --git a/definitions/grib2/template.3.130.def b/definitions/grib2/template.3.130.def new file mode 100644 index 000000000..d86fc2cad --- /dev/null +++ b/definitions/grib2/template.3.130.def @@ -0,0 +1,17 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.130, Irregular Latitude/longitude grid + +include "template.3.shape_of_the_earth.def"; + +points list(numberOfDataPoints) { + signed[4] latitude; + signed[4] longitude; +} diff --git a/definitions/grib2/template.3.140.def b/definitions/grib2/template.3.140.def new file mode 100644 index 000000000..62c588c24 --- /dev/null +++ b/definitions/grib2/template.3.140.def @@ -0,0 +1,71 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.3.140 ---------------------------------------------------------------------- +# TEMPLATE 3.140, Lambert azimuthal equal area projection +include "template.3.shape_of_the_earth.def"; + +# Nx - number of points along X-axis +unsigned[4] numberOfPointsAlongXAxis : dump ; +alias Nx = numberOfPointsAlongXAxis; + +# Ny - number of points along Y-axis +unsigned[4] numberOfPointsAlongYAxis : dump ; +alias Ny = numberOfPointsAlongYAxis; + +# La1 - latitude of first grid point +signed[4] latitudeOfFirstGridPoint: edition_specific ; +alias La1 = latitudeOfFirstGridPoint; +meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint + ,one,grib2divider,truncateDegrees) : dump; +#meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPoint,mAngleMultiplier,angleDivisor): no_copy; + +# Lo1 - longitude of first grid point +signed[4] longitudeOfFirstGridPoint: edition_specific ; +alias La1 = longitudeOfFirstGridPoint; +meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint + ,one,grib2divider,truncateDegrees) : dump; +#meta longitudeOfFirstGridPointInMicrodegrees times(longitudeOfFirstGridPoint,mAngleMultiplier,angleDivisor) : no_copy; + +signed[4] standardParallelInMicrodegrees : dump; +alias standardParallel=standardParallelInMicrodegrees; + +signed[4] centralLongitudeInMicrodegrees : dump; +alias centralLongitude=centralLongitudeInMicrodegrees; + +# Resolution and component flag +flags[1] resolutionAndComponentFlag 'grib2/tables/[tablesVersion]/3.3.table' : dump ; + +# Dx - X-direction grid length in millimetres +unsigned[4] xDirectionGridLengthInMillimetres : dump ; +alias Dx = xDirectionGridLengthInMillimetres ; + +# Dy - Y-direction grid length in millimetres +unsigned[4] yDirectionGridLengthInMillimetres : dump ; +alias Dy = yDirectionGridLengthInMillimetres ; + +include "template.3.scanning_mode.def"; + +iterator lambert_azimuthal_equal_area(numberOfPoints,missingValue,values, + radius,Nx,Ny, + latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees, + standardParallel,centralLongitude, + Dx,Dy, + iScansNegatively, + jScansPositively, + jPointsAreConsecutive, + alternativeRowScanning); + +meta latLonValues latlonvalues(values); +alias latitudeLongitudeValues=latLonValues; +meta latitudes latitudes(values,0); +meta longitudes longitudes(values,0); + +# END 2/template.3.140 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.3.2.def b/definitions/grib2/template.3.2.def new file mode 100644 index 000000000..36cf8179f --- /dev/null +++ b/definitions/grib2/template.3.2.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.2, Stretched Latitude/longitude (or equidistant cylindrical, or Plate Carree) + +include "template.3.shape_of_the_earth.def"; +include "template.3.latlon.def"; +include "template.3.stretching.def"; diff --git a/definitions/grib2/template.3.20.def b/definitions/grib2/template.3.20.def new file mode 100644 index 000000000..42f4bf52c --- /dev/null +++ b/definitions/grib2/template.3.20.def @@ -0,0 +1,72 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.3.20 ---------------------------------------------------------------------- +# TEMPLATE 3.20, Polar stereographic projection +include "template.3.shape_of_the_earth.def"; +transient oneThousand=1000; + +# Nx - number of points along X-axis +unsigned[4] Nx : dump; +alias Ni = Nx; +alias numberOfPointsAlongXAxis = Nx; +alias geography.Nx=Nx; + +# Ny - number of points along Y-axis +unsigned[4] Ny : dump; +alias Nj = Ny; +alias numberOfPointsAlongYAxis = Ny; +alias geography.Ny=Ny; + +# La1 - latitude of first grid point +signed[4] latitudeOfFirstGridPoint : edition_specific ; +meta geography.latitudeOfFirstGridPointInDegrees scale(latitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump; +alias La1 = latitudeOfFirstGridPoint; + +# Lo1 - longitude of first grid point +unsigned[4] longitudeOfFirstGridPoint : edition_specific; +meta geography.longitudeOfFirstGridPointInDegrees scale(longitudeOfFirstGridPoint,oneConstant,grib2divider,truncateDegrees) : dump; +alias Lo1 = longitudeOfFirstGridPoint; + +# Resolution and component flag +# NOTE 1 NOT FOUND +flags[1] resolutionAndComponentFlag 'grib2/tables/[tablesVersion]/3.3.table' : dump; + +# LaD - Latitude where Dx and Dy are specified +signed[4] LaD : edition_specific; +alias latitudeWhereDxAndDyAreSpecified=LaD; +meta geography.LaDInDegrees scale(LaD,oneConstant,grib2divider,truncateDegrees) : dump; +alias latitudeWhereDxAndDyAreSpecifiedInDegrees=LaDInDegrees; + +# LoV - orientation of the grid +# NOTE 2 NOT FOUND +signed[4] orientationOfTheGrid : edition_specific; +alias LoV = orientationOfTheGrid ; + +meta geography.orientationOfTheGridInDegrees scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump; +# Dx - X-direction grid length +# NOTE 3 NOT FOUND +unsigned[4] Dx : edition_specific; +meta geography.DxInMetres scale(Dx,oneConstant,grib1divider,truncateDegrees) : dump; +alias xDirectionGridLength=Dx; + +# Dy - Y-direction grid length +# NOTE 3 NOT FOUND +unsigned[4] Dy : edition_specific; +meta geography.DyInMetres scale(Dy,oneConstant,grib1divider,truncateDegrees) : dump; +alias yDirectionGridLength=Dy; + +# Projection centre flag +flags[1] projectionCentreFlag 'grib2/tables/[tablesVersion]/3.5.table' : dump; + +include "template.3.scanning_mode.def"; + + +# END 2/template.3.20 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.3.3.def b/definitions/grib2/template.3.3.def new file mode 100644 index 000000000..1cd144eba --- /dev/null +++ b/definitions/grib2/template.3.3.def @@ -0,0 +1,16 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.3, Stretched and Rotated Latitude/longitude (or equidistant cylindrical, or Plate Carree) + +include "template.3.shape_of_the_earth.def"; +include "template.3.latlon.def"; +include "template.3.rotation.def"; +include "template.3.stretching.def"; + diff --git a/definitions/grib2/template.3.30.def b/definitions/grib2/template.3.30.def new file mode 100644 index 000000000..89ed7ec42 --- /dev/null +++ b/definitions/grib2/template.3.30.def @@ -0,0 +1,104 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.30, Lambert conformal +include "template.3.shape_of_the_earth.def"; + +unsigned[4] Nx : dump; +alias Ni = Nx; +alias numberOfPointsAlongXAxis = Nx; +alias geography.Nx=Nx; + +unsigned[4] Ny : dump; +alias Nj = Ny; +alias numberOfPointsAlongYAxis = Ny; +alias geography.Ny=Ny; + +# La1 - latitude of first grid point +signed[4] latitudeOfFirstGridPoint : edition_specific; +alias La1 = latitudeOfFirstGridPoint; +meta geography.latitudeOfFirstGridPointInDegrees + scale(latitudeOfFirstGridPoint,one,grib2divider,truncateDegrees) : dump; +alias La1InDegrees=latitudeOfFirstGridPointInDegrees; +#meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPointInDegrees,oneConstant): no_copy; + +# Lo1 - longitude of first grid point +unsigned[4] longitudeOfFirstGridPoint : edition_specific; +alias Lo1 = longitudeOfFirstGridPoint; +meta geography.longitudeOfFirstGridPointInDegrees + scale(longitudeOfFirstGridPoint,one,grib2divider,truncateDegrees) : dump; +alias Lo1InDegrees = longitudeOfFirstGridPointInDegrees; +#meta longitudeOfFirstGridPointInMicrodegrees times(longitudeOfFirstGridPoint,oneConstant) : no_copy; + +include "template.3.resolution_flags.def"; + +# LaD - Latitude where Dx and Dy are specified +signed[4] LaD : edition_specific ; +alias latitudeWhereDxAndDyAreSpecified=LaD; +meta geography.LaDInDegrees scale(LaD,one,grib2divider,truncateDegrees) : dump; + +# LoV - Longitude of meridian parallel to Y-axis along which latitude increases as the Y-coordinate increases +unsigned[4] LoV : edition_specific; +meta geography.LoVInDegrees scale(LoV,one,grib2divider,truncateDegrees) : dump; + +# Dx - X-direction grid length +# NOTE 1 NOT FOUND +unsigned[4] Dx : edition_specific ; +alias xDirectionGridLength=Dx; +alias Di = Dx; +meta geography.DxInMetres scale(Dx,one,thousand) : dump; + +# Dy - Y-direction grid length +# NOTE 1 NOT FOUND +unsigned[4] Dy : edition_specific ; +alias yDirectionGridLength=Dy ; +alias Dj = Dy; +meta geography.DyInMetres scale(Dy,one,thousand) : dump; + +# Projection centre flag +flags[1] projectionCentreFlag 'grib2/tables/[tablesVersion]/3.5.table' : dump; + +include "template.3.scanning_mode.def"; + +# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere +signed[4] Latin1 : edition_specific; +alias FirstLatitude=Latin1; +meta geography.Latin1InDegrees scale(Latin1,one,grib2divider,truncateDegrees) : dump; + +# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere +signed[4] Latin2 : dump; +alias SecondLatitude=Latin2; +meta geography.Latin2InDegrees scale(Latin2,one,grib2divider,truncateDegrees) : dump; + +# Latitude of the southern pole of projection +signed[4] latitudeOfSouthernPole : edition_specific; +alias latitudeOfTheSouthernPoleOfProjection=latitudeOfSouthernPole; +meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfSouthernPole ,one,grib2divider,truncateDegrees) : dump; + +# Longitude of the southern pole of projection +unsigned[4] longitudeOfSouthernPole : edition_specific; +alias longitudeOfTheSouthernPoleOfProjection=longitudeOfSouthernPole; +meta geography.longitudeOfSouthernPoleInDegrees scale(longitudeOfSouthernPole,oneConstant,grib2divider,truncateDegrees) : dump; + +iterator lambert_conformal(numberOfPoints,missingValue,values, + radius,Nx,Ny, + LoVInDegrees,LaDInDegrees, + Latin1InDegrees,Latin2InDegrees, + latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees, + DxInMetres,DyInMetres, + iScansNegatively, + jScansPositively, + jPointsAreConsecutive, + alternativeRowScanning); + +meta latLonValues latlonvalues(values); +alias latitudeLongitudeValues=latLonValues; +meta latitudes latitudes(values,0); +meta longitudes longitudes(values,0); + diff --git a/definitions/grib2/template.3.31.def b/definitions/grib2/template.3.31.def new file mode 100644 index 000000000..e4abc8706 --- /dev/null +++ b/definitions/grib2/template.3.31.def @@ -0,0 +1,72 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.31, Albers equal area +include "template.3.shape_of_the_earth.def"; + +# Nx - number of points along the X-axis +unsigned[4] Nx : dump; +alias numberOfPointsAlongTheXAxis=Nx; +alias geography.Nx=Nx; + +# Ny - number of points along the Y-axis +unsigned[4] Ny : dump; +alias numberOfPointsAlongTheYAxis=Ny; +alias geography.Ny=Ny; + +# La1 - latitude of first grid point +signed[4] latitudeOfFirstGridPoint : edition_specific,dump; +alias La1 = latitudeOfFirstGridPoint; + +# Lo1 - longitude of first grid point +unsigned[4] longitudeOfFirstGridPoint : edition_specific,dump; +alias Lo1 = longitudeOfFirstGridPoint; + +include "template.3.resolution_flags.def"; + +# LaD - Latitude where Dx and Dy are specified +signed[4] LaD : dump; +alias latitudeWhereDxAndDyAreSpecified=LaD ; + +# LoV - Longitude of meridian parallel to Y-axis along which latitude increases as the Y-coordinate increases +unsigned[4] LoV : dump; + +# Dx - X-direction grid length +# NOTE 1 NOT FOUND +unsigned[4] xDirectionGridLength : dump; +alias Dx = xDirectionGridLength; + +# Dy - Y-direction grid length +# NOTE 1 NOT FOUND +unsigned[4] yDirectionGridLength : dump; +alias Dy = yDirectionGridLength; + +# Projection centre flag +flags[1] projectionCentreFlag 'grib2/tables/[tablesVersion]/3.5.table' : dump; +include "template.3.scanning_mode.def"; + +# Latin 1 - first latitude from the pole at which the secant cone cuts the sphere +signed[4] Latin1 :edition_specific; +meta geography.Latin1InDegrees scale(Latin1,one,grib2divider,truncateDegrees) : dump; + +# Latin 2 - second latitude from the pole at which the secant cone cuts the sphere +unsigned[4] Latin2 : edition_specific; +meta geography.Latin2InDegrees scale(Latin2,one,grib2divider,truncateDegrees) : dump; + +# Latitude of the southern pole of projection +signed[4] latitudeOfTheSouthernPoleOfProjection : edition_specific ; +alias latitudeOfSouthernPole=latitudeOfTheSouthernPoleOfProjection; +meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfTheSouthernPoleOfProjection ,one,grib2divider,truncateDegrees) : dump; + + +# Longitude of the southern pole of projection +unsigned[4] longitudeOfTheSouthernPoleOfProjection :edition_specific; +alias longitudeOfSouthernPole=longitudeOfTheSouthernPoleOfProjection; +meta geography.longitudeOfSouthernPoleInDegrees scale(longitudeOfTheSouthernPoleOfProjection,oneConstant,grib2divider,truncateDegrees) : dump; + diff --git a/definitions/grib2/template.3.4.def b/definitions/grib2/template.3.4.def new file mode 100644 index 000000000..77e06b289 --- /dev/null +++ b/definitions/grib2/template.3.4.def @@ -0,0 +1,13 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.1, Rotated Latitude/longitude (or equidistant cylindrical, or Plate Carree) + +include "template.3.shape_of_the_earth.def"; +include "template.3.latlon_vares.def"; diff --git a/definitions/grib2/template.3.40.def b/definitions/grib2/template.3.40.def new file mode 100644 index 000000000..cf40b44b7 --- /dev/null +++ b/definitions/grib2/template.3.40.def @@ -0,0 +1,11 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +include "template.3.shape_of_the_earth.def"; +include "template.3.gaussian.def"; diff --git a/definitions/grib2/template.3.41.def b/definitions/grib2/template.3.41.def new file mode 100644 index 000000000..66aa48a36 --- /dev/null +++ b/definitions/grib2/template.3.41.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.41, Rotated Gaussian latitude/longitude + +include "template.3.shape_of_the_earth.def"; +include "template.3.gaussian.def"; +include "template.3.rotation.def"; diff --git a/definitions/grib2/template.3.42.def b/definitions/grib2/template.3.42.def new file mode 100644 index 000000000..60c19b7be --- /dev/null +++ b/definitions/grib2/template.3.42.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.42, Stretched Gaussian latitude/longitude + +include "template.3.shape_of_the_earth.def"; +include "template.3.gaussian.def"; +include "template.3.stretching.def"; diff --git a/definitions/grib2/template.3.43.def b/definitions/grib2/template.3.43.def new file mode 100644 index 000000000..573c3c318 --- /dev/null +++ b/definitions/grib2/template.3.43.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.43, Stretched and rotated Gaussian latitude/longitude + +include "template.3.shape_of_the_earth.def"; +include "template.3.gaussian.def"; +include "template.3.rotation.def"; +include "template.3.stretching.def"; diff --git a/definitions/grib2/template.3.5.def b/definitions/grib2/template.3.5.def new file mode 100644 index 000000000..0f8349023 --- /dev/null +++ b/definitions/grib2/template.3.5.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.1, Rotated Latitude/longitude (or equidistant cylindrical, or Plate Carree) + +include "template.3.shape_of_the_earth.def"; +include "template.3.latlon_vares.def"; +include "template.3.rotation.def"; diff --git a/definitions/grib2/template.3.50.def b/definitions/grib2/template.3.50.def new file mode 100644 index 000000000..b826f1c81 --- /dev/null +++ b/definitions/grib2/template.3.50.def @@ -0,0 +1,12 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.50, Spherical harmonic coefficients + +include "template.3.spherical_harmonics.def"; diff --git a/definitions/grib2/template.3.51.def b/definitions/grib2/template.3.51.def new file mode 100644 index 000000000..58a230ca8 --- /dev/null +++ b/definitions/grib2/template.3.51.def @@ -0,0 +1,13 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.51, Rotated spherical harmonic coefficients + +include "template.3.spherical_harmonics.def"; +include "template.3.rotation.def"; diff --git a/definitions/grib2/template.3.52.def b/definitions/grib2/template.3.52.def new file mode 100644 index 000000000..efe2cd0a0 --- /dev/null +++ b/definitions/grib2/template.3.52.def @@ -0,0 +1,13 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.52, Stretched spherical harmonic coefficients + +include "template.3.spherical_harmonics.def"; +include "template.3.stretching.def"; diff --git a/definitions/grib2/template.3.53.def b/definitions/grib2/template.3.53.def new file mode 100644 index 000000000..fd2bfe3df --- /dev/null +++ b/definitions/grib2/template.3.53.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 3.53, Stretched and rotated spherical harmonic coefficients + +include "template.3.spherical_harmonics.def"; +include "template.3.rotation.def"; +include "template.3.stretching.def"; diff --git a/definitions/grib2/template.3.90.def b/definitions/grib2/template.3.90.def new file mode 100644 index 000000000..3689a6007 --- /dev/null +++ b/definitions/grib2/template.3.90.def @@ -0,0 +1,78 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.3.90 ---------------------------------------------------------------------- +# TEMPLATE 3.90, Space view perspective or orthographic +include "template.3.shape_of_the_earth.def"; + +unsigned[4] Nx : dump; +alias Ni = Nx; +alias numberOfPointsAlongXAxis = Nx; +alias geography.Nx=Nx; + +unsigned[4] Ny : dump; +alias Nj = Ny; +alias numberOfPointsAlongYAxis = Ny; +alias geography.Ny=Ny; + +# Lap - latitude of sub-satellite point +signed[4] latitudeOfSubSatellitePoint ; + +# Lop - longitude of sub-satellite point +signed[4] longitudeOfSubSatellitePoint ; + +meta geography.latitudeOfSubSatellitePointInDegrees scale(latitudeOfSubSatellitePoint,one,grib2divider,truncateDegrees) : dump; +meta geography.longitudeOfSubSatellitePointInDegrees scale(longitudeOfSubSatellitePoint,one,grib2divider,truncateDegrees) : dump; + +include "template.3.resolution_flags.def"; + +# dx - apparent diameter of Earth in grid lengths, in X-direction +unsigned[4] dx : dump; +alias geography.dx=dx; + +# dy - apparent diameter of Earth in grid lengths, in Y-direction +unsigned[4] dy : dump; +alias geography.dy=dy; + +# Xp - X-coordinate of sub-satellite point +# (in units of 10-3 grid length expressed as an integer) +unsigned[4] Xp : no_copy; +meta geography.XpInGridLengths scale(Xp,one,thousand) : dump; +alias xCoordinateOfSubSatellitePoint=XpInGridLengths; + +# Yp - Y-coordinate of sub-satellite point +# (in units of 10-3 grid length expressed as an integer) +unsigned[4] Yp : no_copy; +meta geography.YpInGridLengths scale(Yp,one,thousand) : dump; +alias yCoordinateOfSubSatellitePoint=YpInGridLengths; + +include "template.3.scanning_mode.def"; + +# Orientation of the grid; i.e., the angle between the increasing Y-axis and the meridian of the sub-satellite point in the direction of increasing latitude +signed[4] orientationOfTheGrid : edition_specific; +meta geography.orientationOfTheGridInDegrees + scale(orientationOfTheGrid,oneConstant,grib2divider,truncateDegrees) : dump; + +# Nr - altitude of the camera from the Earth's centre, measured in units of the Earth's +# (equatorial) +unsigned[4] Nr : edition_specific,no_copy; +alias altitudeOfTheCameraFromTheEarthSCenterMeasuredInUnitsOfTheEarth = Nr; +meta geography.NrInRadiusOfEarth scale(Nr,oneConstant,oneMillionConstant,truncateDegrees) : dump; + +# Xo - X-coordinate of origin of sector image +unsigned[4] Xo : dump; +alias xCoordinateOfOriginOfSectorImage=Xo; +alias geography.Xo=Xo; + +# Yo - Y-coordinate of origin of sector image +unsigned[4] Yo : dump; +alias yCoordinateOfOriginOfSectorImage=Yo; +alias geography.Yo=Yo; + diff --git a/definitions/grib2/template.3.gaussian.def b/definitions/grib2/template.3.gaussian.def new file mode 100755 index 000000000..b0aa66bb4 --- /dev/null +++ b/definitions/grib2/template.3.gaussian.def @@ -0,0 +1,80 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +include "template.3.grid.def"; + +# Di - i direction increment +unsigned[4] iDirectionIncrement : can_be_missing; +alias Di = iDirectionIncrement; + +# N - number of parallels between a pole and the equator +unsigned[4] N : dump; +alias numberOfParallelsBetweenAPoleAndTheEquator=N ; +alias geography.N=N; + +include "template.3.scanning_mode.def"; + +modify Ni : can_be_missing,dump; + +meta g2grid g2grid( + latitudeOfFirstGridPoint, + longitudeOfFirstGridPoint, + latitudeOfLastGridPoint, + longitudeOfLastGridPoint, + iDirectionIncrement, + null, + basicAngleOfTheInitialProductionDomain, + subdivisionsOfBasicAngle + ); + +meta geography.latitudeOfFirstGridPointInDegrees g2latlon(g2grid,0) : dump; +meta geography.longitudeOfFirstGridPointInDegrees g2latlon(g2grid,1) : dump; +meta geography.latitudeOfLastGridPointInDegrees g2latlon(g2grid,2) : dump; +meta geography.longitudeOfLastGridPointInDegrees g2latlon(g2grid,3) : dump; +meta geography.iDirectionIncrementInDegrees g2latlon(g2grid,4,iDirectionIncrementGiven) : can_be_missing,dump; + +meta global global_gaussian(N,Ni,iDirectionIncrement, + latitudeOfFirstGridPoint, + longitudeOfFirstGridPoint, + latitudeOfLastGridPoint, + longitudeOfLastGridPoint, + basicAngleOfTheInitialProductionDomain, + subdivisionsOfBasicAngle) = 0 : dump; + +alias xFirst=longitudeOfFirstGridPointInDegrees; +alias yFirst=latitudeOfFirstGridPointInDegrees; +alias xLast=longitudeOfLastGridPointInDegrees; +alias yLast=latitudeOfLastGridPointInDegrees; + +alias latitudeFirstInDegrees = latitudeOfFirstGridPointInDegrees; +alias longitudeFirstInDegrees = longitudeOfFirstGridPointInDegrees; +alias latitudeLastInDegrees = latitudeOfLastGridPointInDegrees; +alias longitudeLastInDegrees = longitudeOfLastGridPointInDegrees; +alias DiInDegrees = iDirectionIncrementInDegrees; + +if(missing(Ni) && PLPresent == 1){ + iterator gaussian_reduced(numberOfPoints,missingValue,values, + latitudeOfFirstGridPointInDegrees,longitudeOfFirstGridPointInDegrees, + latitudeOfLastGridPointInDegrees,longitudeOfLastGridPointInDegrees, + N,pl,Nj); + nearest reduced(values,radius,Nj,pl); +} else { + iterator gaussian(numberOfPoints,missingValue,values, + longitudeFirstInDegrees,DiInDegrees , + Ni,Nj,iScansNegatively, + latitudeFirstInDegrees, latitudeLastInDegrees, + N,jScansPositively); + nearest regular(values,radius,Ni ,Nj); +} +meta latLonValues latlonvalues(values); +alias latitudeLongitudeValues=latLonValues; +meta latitudes latitudes(values,0); +meta longitudes longitudes(values,0); +meta distinctLatitudes latitudes(values,1); +meta distinctLongitudes longitudes(values,1); diff --git a/definitions/grib2/template.3.grid.def b/definitions/grib2/template.3.grid.def new file mode 100644 index 000000000..a444da223 --- /dev/null +++ b/definitions/grib2/template.3.grid.def @@ -0,0 +1,66 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[4] Ni : can_be_missing,dump; +alias numberOfPointsAlongAParallel=Ni; +alias Nx = Ni; + +unsigned[4] Nj : dump; +alias numberOfPointsAlongAMeridian=Nj; +alias Ny = Nj; + +alias geography.Ni=Ni; +alias geography.Nj=Nj; + +# Basic angle of the initial production domain +unsigned[4] basicAngleOfTheInitialProductionDomain = 0; +transient mBasicAngle=basicAngleOfTheInitialProductionDomain*oneMillionConstant; +transient angleMultiplier = 1; +transient mAngleMultiplier = 1000000; +when (basicAngleOfTheInitialProductionDomain == 0) { + set angleMultiplier = 1; + set mAngleMultiplier = 1000000; +} else { + set angleMultiplier = basicAngleOfTheInitialProductionDomain; + set mAngleMultiplier = mBasicAngle; +} + +# Subdivisions of basic angle used to define extreme longitudes and latitudes, and direction increments +unsigned[4] subdivisionsOfBasicAngle = missing() : can_be_missing; + +transient angleDivisor = 1000000; +when (missing(subdivisionsOfBasicAngle) || subdivisionsOfBasicAngle == 0) { + set angleDivisor = 1000000; +} else { + set angleDivisor = subdivisionsOfBasicAngle; +} + +# La1 - latitude of first grid point +signed[4] latitudeOfFirstGridPoint : edition_specific ; +alias La1 = latitudeOfFirstGridPoint; +#meta latitudeOfFirstGridPointInMicrodegrees times(latitudeOfFirstGridPoint,mAngleMultiplier,angleDivisor) : no_copy; + +# Lo1 - longitude of first grid point + +signed[4] longitudeOfFirstGridPoint ; +alias Lo1 = longitudeOfFirstGridPoint; +#meta longitudeOfFirstGridPointInMicrodegrees times(longitudeOfFirstGridPoint,mAngleMultiplier,angleDivisor) : no_copy; + +include "template.3.resolution_flags.def" + +# La2 - latitude of last grid point +signed[4] latitudeOfLastGridPoint : edition_specific; +alias La2 = latitudeOfLastGridPoint; +#meta latitudeOfLastGridPointInMicrodegrees times(latitudeOfLastGridPoint,mAngleMultiplier,angleDivisor) : no_copy; + +# Lo2 - longitude of last grid point +signed[4] longitudeOfLastGridPoint : edition_specific ; +alias Lo2 = longitudeOfLastGridPoint; +#meta longitudeOfLastGridPointInMicrodegrees times(longitudeOfLastGridPoint,mAngleMultiplier,angleDivisor) : no_copy; + diff --git a/definitions/grib2/template.3.latlon.def b/definitions/grib2/template.3.latlon.def new file mode 100755 index 000000000..e1c80d753 --- /dev/null +++ b/definitions/grib2/template.3.latlon.def @@ -0,0 +1,81 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +include "template.3.grid.def"; + +# Di - i direction increment + +unsigned[4] iDirectionIncrement : can_be_missing,edition_specific; +alias Di = iDirectionIncrement; +alias Dx = iDirectionIncrement; + +# Dj - j direction increment + +unsigned[4] jDirectionIncrement : can_be_missing,edition_specific; +alias Dj = jDirectionIncrement; +alias Dy = jDirectionIncrement; + +include "template.3.scanning_mode.def"; + +meta g2grid g2grid( + latitudeOfFirstGridPoint, + longitudeOfFirstGridPoint, + latitudeOfLastGridPoint, + longitudeOfLastGridPoint, + iDirectionIncrement, + jDirectionIncrement, + basicAngleOfTheInitialProductionDomain, + subdivisionsOfBasicAngle + ); + +meta geography.latitudeOfFirstGridPointInDegrees g2latlon(g2grid,0) : dump; +meta geography.longitudeOfFirstGridPointInDegrees g2latlon(g2grid,1) : dump; +meta geography.latitudeOfLastGridPointInDegrees g2latlon(g2grid,2) : dump; +meta geography.longitudeOfLastGridPointInDegrees g2latlon(g2grid,3) : dump; + +alias xFirst=longitudeOfFirstGridPointInDegrees; +alias yFirst=latitudeOfFirstGridPointInDegrees; +alias xLast=longitudeOfLastGridPointInDegrees; +alias yLast=latitudeOfLastGridPointInDegrees; + +meta geography.iDirectionIncrementInDegrees g2latlon(g2grid,4, + iDirectionIncrementGiven) : can_be_missing,dump; + +meta geography.jDirectionIncrementInDegrees g2latlon(g2grid,5, + jDirectionIncrementGiven) : can_be_missing,dump; + +alias latitudeFirstInDegrees = latitudeOfFirstGridPointInDegrees; +alias longitudeFirstInDegrees = longitudeOfFirstGridPointInDegrees; +alias latitudeLastInDegrees = latitudeOfLastGridPointInDegrees; +alias longitudeLastInDegrees = longitudeOfLastGridPointInDegrees; +alias DiInDegrees = iDirectionIncrementInDegrees; +alias DxInDegrees = iDirectionIncrementInDegrees; +alias DjInDegrees = jDirectionIncrementInDegrees; +alias DyInDegrees = jDirectionIncrementInDegrees; + +_if ( missing(Ni) && PLPresent == 1 ) { + iterator latlon_reduced(numberOfPoints,missingValue,values, + latitudeFirstInDegrees,longitudeFirstInDegrees, + latitudeLastInDegrees,longitudeLastInDegrees, + Nj,DjInDegrees,pl); + nearest latlon_reduced(values,radius,Nj,pl,longitudeFirstInDegrees,longitudeLastInDegrees); +} else { + iterator latlon(numberOfPoints,missingValue,values, + longitudeFirstInDegrees,DiInDegrees , + Ni,Nj,iScansNegatively, + latitudeFirstInDegrees, DjInDegrees,jScansPositively); + nearest regular(values,radius,Ni,Nj); +} +meta latLonValues latlonvalues(values); +alias latitudeLongitudeValues=latLonValues; +meta latitudes latitudes(values,0); +meta longitudes longitudes(values,0); +meta distinctLatitudes latitudes(values,1); +meta distinctLongitudes longitudes(values,1); + diff --git a/definitions/grib2/template.3.latlon_vares.def b/definitions/grib2/template.3.latlon_vares.def new file mode 100755 index 000000000..abf555adc --- /dev/null +++ b/definitions/grib2/template.3.latlon_vares.def @@ -0,0 +1,55 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +unsigned[4] Ni : can_be_missing,dump; +alias numberOfPointsAlongAParallel=Ni; +alias Nx = Ni; + +unsigned[4] Nj : dump; +alias numberOfPointsAlongAMeridian=Nj; +alias Ny = Nj; + +alias geography.Ni=Ni; +alias geography.Nj=Nj; + +# Basic angle of the initial production domain +unsigned[4] basicAngleOfTheInitialProductionDomain = 0; +transient mBasicAngle=basicAngleOfTheInitialProductionDomain*oneMillionConstant; +transient angleMultiplier = 1; +transient mAngleMultiplier = 1000000; +when (basicAngleOfTheInitialProductionDomain == 0) { + set angleMultiplier = 1; + set mAngleMultiplier = 1000000; +} else { + set angleMultiplier = basicAngleOfTheInitialProductionDomain; + set mAngleMultiplier = mBasicAngle; +} + +# Subdivisions of basic angle used to define extreme longitudes and latitudes, and direction increments +unsigned[4] subdivisionsOfBasicAngle = missing() : can_be_missing; + +transient angleDivisor = 1000000; +when (missing(subdivisionsOfBasicAngle) || subdivisionsOfBasicAngle == 0) { + set angleDivisor = 1000000; +} else { + set angleDivisor = subdivisionsOfBasicAngle; +} + +include "template.3.resolution_flags.def" + +include "template.3.scanning_mode.def"; + +longitudesList list(Ni) { + unsigned[4] longitudes; +} + +latitudesList list(Ni) { + signed[4] latitudes; +} + diff --git a/definitions/grib2/template.3.resolution_flags.def b/definitions/grib2/template.3.resolution_flags.def new file mode 100644 index 000000000..2ded520d1 --- /dev/null +++ b/definitions/grib2/template.3.resolution_flags.def @@ -0,0 +1,46 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Resolution and component flags +flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : edition_specific,no_copy; + +# Note our flagbit numbers run from 7 to 0, while WMO convention uses 1 to 8 +# (most significant to least significant) + +flagbit resolutionAndComponentFlags1(resolutionAndComponentFlags,7) = 0: read_only; +flagbit resolutionAndComponentFlags2(resolutionAndComponentFlags,6) = 0: read_only; +flagbit iDirectionIncrementGiven(resolutionAndComponentFlags,5); +flagbit jDirectionIncrementGiven(resolutionAndComponentFlags,4); +flagbit uvRelativeToGrid(resolutionAndComponentFlags,3); +flagbit resolutionAndComponentFlags6(resolutionAndComponentFlags,7) = 0: read_only; +flagbit resolutionAndComponentFlags7(resolutionAndComponentFlags,6) = 0: read_only; +flagbit resolutionAndComponentFlags8(resolutionAndComponentFlags,6) = 0: read_only; + +concept ijDirectionIncrementGiven { + '1' = { + iDirectionIncrementGiven = 1; + jDirectionIncrementGiven = 1; + } + '0' = { + iDirectionIncrementGiven = 1; + jDirectionIncrementGiven = 0; + } + '0' = { + iDirectionIncrementGiven = 0; + jDirectionIncrementGiven = 1; + } + '0' = { + iDirectionIncrementGiven = 0; + jDirectionIncrementGiven = 0; + } +} + +alias DiGiven=iDirectionIncrementGiven; +alias DjGiven=jDirectionIncrementGiven; + diff --git a/definitions/grib2/template.3.rotation.def b/definitions/grib2/template.3.rotation.def new file mode 100755 index 000000000..21fd88e92 --- /dev/null +++ b/definitions/grib2/template.3.rotation.def @@ -0,0 +1,27 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Latitude of the southern pole of projection +signed[4] latitudeOfSouthernPole : no_copy; +alias latitudeOfTheSouthernPoleOfProjection=latitudeOfSouthernPole; + +# Longitude of the southern pole of projection +unsigned[4] longitudeOfSouthernPole : no_copy; +alias longitudeOfTheSouthernPoleOfProjection=longitudeOfSouthernPole; + +meta geography.latitudeOfSouthernPoleInDegrees scale(latitudeOfSouthernPole + ,one,grib2divider,truncateDegrees) : dump; +meta geography.longitudeOfSouthernPoleInDegrees g2lon(longitudeOfSouthernPole) : dump; + +# Angle of rotation of projection +ieeefloat angleOfRotation : dump,edition_specific ; +alias geography.angleOfRotationInDegrees=angleOfRotation; + +alias angleOfRotationOfProjection=angleOfRotation; + diff --git a/definitions/grib2/template.3.scanning_mode.def b/definitions/grib2/template.3.scanning_mode.def new file mode 100644 index 000000000..8303b8b7a --- /dev/null +++ b/definitions/grib2/template.3.scanning_mode.def @@ -0,0 +1,45 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +flags[1] scanningMode 'grib2/tables/[tablesVersion]/3.4.table' : edition_specific,no_copy ; + +# Not flagbit numbers 7 to 0, while wmo is 1 to 8 +flagbit iScansNegatively(scanningMode,7) : dump; +flagbit jScansPositively(scanningMode,6) : dump; +flagbit jPointsAreConsecutive(scanningMode,5) : dump; +flagbit alternativeRowScanning(scanningMode,4) = 0 : edition_specific,dump; + +if (jPointsAreConsecutive) { + alias numberOfRows=Ni; + alias numberOfColumns=Nj; +} else { + alias numberOfRows=Nj; + alias numberOfColumns=Ni; +} + +alias geography.iScansNegatively=iScansNegatively; +alias geography.jScansPositively=jScansPositively; +alias geography.jPointsAreConsecutive=jPointsAreConsecutive; + +transient iScansPositively = !iScansNegatively : constraint; + +flagbit scanningMode5(scanningMode,3) = 0: read_only; +flagbit scanningMode6(scanningMode,2) = 0: read_only; +flagbit scanningMode7(scanningMode,1) = 0: read_only; +flagbit scanningMode8(scanningMode,0) = 0: read_only; + +meta swapScanningX change_scanning_direction( values,Ni,Nj, + iScansNegatively,jScansPositively, + xFirst,xLast,x) : edition_specific,hidden,no_copy; +alias swapScanningLon = swapScanningX; + +meta swapScanningY change_scanning_direction( values,Ni,Nj, + iScansNegatively,jScansPositively, + yFirst,yLast,y) : edition_specific,hidden,no_copy; +alias swapScanningLat = swapScanningY; diff --git a/definitions/grib2/template.3.shape_of_the_earth.def b/definitions/grib2/template.3.shape_of_the_earth.def new file mode 100755 index 000000000..10f27c99d --- /dev/null +++ b/definitions/grib2/template.3.shape_of_the_earth.def @@ -0,0 +1,53 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +codetable[1] shapeOfTheEarth ('3.2.table',masterDir,localDir) : dump; + +# Scale factor of radius of spherical earth +unsigned[1] scaleFactorOfRadiusOfSphericalEarth = missing() : can_be_missing, edition_specific; + +# Scaled value of radius of spherical earth +unsigned[4] scaledValueOfRadiusOfSphericalEarth = missing(): can_be_missing, edition_specific; + +# Scale factor of major axis of oblate spheroid earth +unsigned[1] scaleFactorOfEarthMajorAxis = missing(): can_be_missing, edition_specific; +alias scaleFactorOfMajorAxisOfOblateSpheroidEarth=scaleFactorOfEarthMajorAxis; + +# Scaled value of major axis of oblate spheroid earth +unsigned[4] scaledValueOfEarthMajorAxis = missing(): can_be_missing, edition_specific; +alias scaledValueOfMajorAxisOfOblateSpheroidEarth=scaledValueOfEarthMajorAxis; + +# Scale factor of minor axis of oblate spheroid earth +unsigned[1] scaleFactorOfEarthMinorAxis = missing(): can_be_missing, edition_specific; +alias scaleFactorOfMinorAxisOfOblateSpheroidEarth=scaleFactorOfEarthMinorAxis ; + +# Scaled value of minor axis of oblate spheroid earth +unsigned[4] scaledValueOfEarthMinorAxis = missing(): can_be_missing, edition_specific; +alias scaledValueOfMinorAxisOfOblateSpheroidEarth=scaledValueOfEarthMinorAxis; + +_if (shapeOfTheEarth==0) { + transient radius=6367470; + alias radiusOfTheEarth=radius; + alias radiusInMetres=radius; +} +_if (shapeOfTheEarth==1){ + meta radius from_scale_factor_scaled_value( + scaleFactorOfRadiusOfSphericalEarth, + scaledValueOfRadiusOfSphericalEarth); + alias radiusOfTheEarth=radius; + alias radiusInMetres=radius; +} +_if (shapeOfTheEarth==6){ + transient radius=6371229; + alias radiusOfTheEarth=radius; + alias radiusInMetres=radius; +} + + diff --git a/definitions/grib2/template.3.spherical_harmonics.def b/definitions/grib2/template.3.spherical_harmonics.def new file mode 100755 index 000000000..9eb26ba42 --- /dev/null +++ b/definitions/grib2/template.3.spherical_harmonics.def @@ -0,0 +1,37 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Spherical harmonics"; +constant sphericalHarmonics=1; + +# constant dataRepresentationType = 50; + +# J - pentagonal resolution parameter +unsigned[4] J : dump; +alias pentagonalResolutionParameterJ=J ; +alias geography.J=J; + +# K - pentagonal resolution parameter +unsigned[4] K : dump; +alias pentagonalResolutionParameterK=K; +alias geography.K=K; + +# M - pentagonal resolution parameter +unsigned[4] M : dump; +alias pentagonalResolutionParameterM = M ; +alias geography.M=M; + +# Representation type indicating the method used to define the norm +codetable[1] spectralType ('3.6.table',masterDir,localDir) = 1 : no_copy; +alias spectralDataRepresentationType=spectralType; + +# Representation mode indicating the order of the coefficients +codetable[1] spectralMode ('3.7.table',masterDir,localDir) = 1 : no_copy; +alias spectralDataRepresentationMode=spectralMode; + diff --git a/definitions/grib2/template.3.stretching.def b/definitions/grib2/template.3.stretching.def new file mode 100755 index 000000000..790861766 --- /dev/null +++ b/definitions/grib2/template.3.stretching.def @@ -0,0 +1,27 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Stretching information"; + +# Latitude of the pole of stretching +signed[4] latitudeOfThePoleOfStretching : edition_specific,no_copy; + +# Longitude of the pole of stretching +signed[4] longitudeOfThePoleOfStretching : edition_specific,no_copy; + +meta geography.latitudeOfStretchingPoleInDegrees + scale(latitudeOfThePoleOfStretching,oneConstant,grib2divider,truncateDegrees) : dump; +meta geography.longitudeOfStretchingPoleInDegrees + scale(longitudeOfThePoleOfStretching,oneConstant,grib2divider,truncateDegrees) : dump; + +# Stretching factor +unsigned[4] stretchingFactorScaled : edition_specific,no_copy; + +meta geography.stretchingFactor + scale(stretchingFactorScaled,oneConstant,grib2divider) : dump; \ No newline at end of file diff --git a/definitions/grib2/template.4.0.def b/definitions/grib2/template.4.0.def new file mode 100644 index 000000000..b1adab03b --- /dev/null +++ b/definitions/grib2/template.4.0.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.0, Analysis or forecast at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter.def"; +include "template.4.point_in_time.def"; +include "template.4.horizontal.def"; + diff --git a/definitions/grib2/template.4.1.def b/definitions/grib2/template.4.1.def new file mode 100644 index 000000000..f1318b988 --- /dev/null +++ b/definitions/grib2/template.4.1.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.1, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter.def" +include "template.4.point_in_time.def"; +include "template.4.horizontal.def" +include "template.4.eps.def" diff --git a/definitions/grib2/template.4.10.def b/definitions/grib2/template.4.10.def new file mode 100644 index 000000000..5cacd2d12 --- /dev/null +++ b/definitions/grib2/template.4.10.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.10, Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter.def" +include "template.4.horizontal.def" +include "template.4.percentile.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.1000.def b/definitions/grib2/template.4.1000.def new file mode 100644 index 000000000..b6afa711b --- /dev/null +++ b/definitions/grib2/template.4.1000.def @@ -0,0 +1,13 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.1000, Cross section of analysis and forecast at a point in time + +include "template.4.parameter.def" +include "template.4.point_in_time.def"; diff --git a/definitions/grib2/template.4.1001.def b/definitions/grib2/template.4.1001.def new file mode 100644 index 000000000..675a386d4 --- /dev/null +++ b/definitions/grib2/template.4.1001.def @@ -0,0 +1,13 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.1001, Cross section of averaged or otherwise statistically processed analysis or forecast over a range of time + +include "template.4.parameter.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.1002.def b/definitions/grib2/template.4.1002.def new file mode 100644 index 000000000..9e140cb6d --- /dev/null +++ b/definitions/grib2/template.4.1002.def @@ -0,0 +1,36 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.1002, Cross-section of analysis and forecast, averaged or otherwise statistically processed over latitude or longitude + +include "template.4.parameter.def" + + +# Horizontal dimension processed +codetable[1] horizontalDimensionProcessed ('4.220.table',masterDir,localDir) : dump; + +# Treatment of missing data +# (e.g. below ground) +codetable[1] treatmentOfMissingData ('4.221.table',masterDir,localDir) : dump; + +# Type of statistical processing +codetable[1] typeOfStatisticalProcessing ('4.10.table',masterDir,localDir) : dump; +#alias typeOfStatisticalProcessing=stepType; + +# Start of range +unsigned[4] startOfRange : dump; + +# End of range +unsigned[4] endOfRange : dump; + +# Number of values +unsigned[2] numberOfDataValues : read_only,dump; + + +# END 2/template.4.1002 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.4.11.def b/definitions/grib2/template.4.11.def new file mode 100644 index 000000000..aa85041f5 --- /dev/null +++ b/definitions/grib2/template.4.11.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.11, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter.def" +include "template.4.horizontal.def" +include "template.4.eps.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.1100.def b/definitions/grib2/template.4.1100.def new file mode 100644 index 000000000..2216d6e8c --- /dev/null +++ b/definitions/grib2/template.4.1100.def @@ -0,0 +1,13 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.1100, Hovmöller-type grid with no averaging or other statistical processing + +include "template.4.parameter.def" +include "template.4.horizontal.def" diff --git a/definitions/grib2/template.4.1101.def b/definitions/grib2/template.4.1101.def new file mode 100644 index 000000000..325933230 --- /dev/null +++ b/definitions/grib2/template.4.1101.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.1101, Hovmöller-type grid with averaging or other statistical processing + +include "template.4.parameter.def" +include "template.4.horizontal.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.12.def b/definitions/grib2/template.4.12.def new file mode 100644 index 000000000..0d1ec57c9 --- /dev/null +++ b/definitions/grib2/template.4.12.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.12, Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter.def" +include "template.4.horizontal.def" +include "template.4.derived.def" +include "template.4.statistical.def" \ No newline at end of file diff --git a/definitions/grib2/template.4.13.def b/definitions/grib2/template.4.13.def new file mode 100644 index 000000000..929e69725 --- /dev/null +++ b/definitions/grib2/template.4.13.def @@ -0,0 +1,22 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.13, Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter.def" +include "template.4.horizontal.def" +include "template.4.derived.def" +include "template.4.rectangular_cluster.def" +include "template.4.statistical.def" + +ensembleForecastNumbersList list(numberOfForecastsInTheCluster) { + unsigned[1] ensembleForecastNumbers : dump; +} + + diff --git a/definitions/grib2/template.4.14.def b/definitions/grib2/template.4.14.def new file mode 100644 index 000000000..b10f2d079 --- /dev/null +++ b/definitions/grib2/template.4.14.def @@ -0,0 +1,20 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.14, Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter.def" +include "template.4.horizontal.def" +include "template.4.derived.def" +include "template.4.circular_cluster.def" +include "template.4.statistical.def" + +ensembleForecastNumbersList list(numberOfForecastsInTheCluster) { + unsigned[1] ensembleForecastNumbers : dump; +} diff --git a/definitions/grib2/template.4.15.def b/definitions/grib2/template.4.15.def new file mode 100644 index 000000000..63a17f459 --- /dev/null +++ b/definitions/grib2/template.4.15.def @@ -0,0 +1,18 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.15, Average, accumulation, extreme values, or other statistically-processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter.def"; +include "template.4.point_in_time.def"; +include "template.4.horizontal.def"; +codetable[1] statisticalProcess 'grib2/tables/[tablesVersion]/4.10.table'; +codetable[1] spatialProcessing 'grib2/tables/[tablesVersion]/4.15.table'; +unsigned[1] numberOfPointsUsed; + diff --git a/definitions/grib2/template.4.2.def b/definitions/grib2/template.4.2.def new file mode 100644 index 000000000..48a5f640e --- /dev/null +++ b/definitions/grib2/template.4.2.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.2, Derived forecast based on all ensemble members at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter.def"; +include "template.4.point_in_time.def"; +include "template.4.horizontal.def"; +include "template.4.derived.def"; diff --git a/definitions/grib2/template.4.20.def b/definitions/grib2/template.4.20.def new file mode 100644 index 000000000..1b468770b --- /dev/null +++ b/definitions/grib2/template.4.20.def @@ -0,0 +1,85 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.4.20 ---------------------------------------------------------------------- +# TEMPLATE 4.20, Radar product +# Parameter category +codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump; + +# Parameter number +codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; +meta parameterUnits codetable_units(parameterNumber) : dump; +meta parameterName codetable_title(parameterNumber) : dump; + +# Type of generating process +codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump; + +# Number of radar sites used +unsigned[1] numberOfRadarSitesUsed : dump; + +# Indicator of unit of time range +codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump; +codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy; + +# Site latitude +# (in 10-6 degree) +unsigned[4] siteLatitude : dump; + +# Site longitude +# (in 10-6 degree) +unsigned[4] siteLongitude : dump; + +# Site elevation +# (meters) +unsigned[2] siteElevation : dump; + +# Site ID +# (alphanumeric) +unsigned[4] siteId : dump; + +# Site ID +# (numeric) +unsigned[2] siteId : dump; + +# Operating mode +codetable[1] operatingMode ('4.12.table',masterDir,localDir) : dump; + +# Reflectivity calibration constant +# (tenths of dB) +unsigned[1] reflectivityCalibrationConstant : dump; + +# Quality control indicator +codetable[1] qualityControlIndicator ('4.13.table',masterDir,localDir) : dump; + +# Clutter filter indicator +codetable[1] clutterFilterIndicator ('4.14.table',masterDir,localDir) : dump; + +# Constant antenna elevation angle +# (tenths of degree true) +unsigned[1] constantAntennaElevationAngle : dump; + +# Accumulation interval +# (minutes) +unsigned[2] accumulationInterval : dump; + +# Reference reflectivity for echo top +# (dB) +unsigned[1] referenceReflectivityForEchoTop : dump; + +# Range bin spacing +# (meters) +unsigned[3] rangeBinSpacing : dump; + +# Radial angular spacing +# (tenths of degree true) +unsigned[2] radialAngularSpacing : dump; + + +# END 2/template.4.20 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.4.2000.def b/definitions/grib2/template.4.2000.def new file mode 100644 index 000000000..a957fcff4 --- /dev/null +++ b/definitions/grib2/template.4.2000.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# test template +label "test template"; + + + + diff --git a/definitions/grib2/template.4.254.def b/definitions/grib2/template.4.254.def new file mode 100644 index 000000000..67c537ece --- /dev/null +++ b/definitions/grib2/template.4.254.def @@ -0,0 +1,21 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.254, CCITT IA5 character string + +# Parameter category +codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir): dump; + +# Parameter number +codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; +meta parameterUnits codetable_units(parameterNumber) : dump; +meta parameterName codetable_title(parameterNumber) : dump; + +# Number of characters +unsigned[4] numberOfCharacters : dump; diff --git a/definitions/grib2/template.4.3.def b/definitions/grib2/template.4.3.def new file mode 100644 index 000000000..17343d6c8 --- /dev/null +++ b/definitions/grib2/template.4.3.def @@ -0,0 +1,20 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.3, Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter.def" +include "template.4.point_in_time.def"; +include "template.4.horizontal.def" +include "template.4.derived.def" +include "template.4.rectangular_cluster.def" + +ensembleForecastNumbersList list(numberOfForecastsInTheCluster) { + unsigned[1] ensembleForecastNumbers : dump; +} diff --git a/definitions/grib2/template.4.30.def b/definitions/grib2/template.4.30.def new file mode 100644 index 000000000..c2be4eaab --- /dev/null +++ b/definitions/grib2/template.4.30.def @@ -0,0 +1,46 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# For grib2 to grib1 convertion +constant dataRepresentationType = 90; + + +# START 2/template.4.30 ---------------------------------------------------------------------- +# TEMPLATE 4.30, Satellite Product +# Parameter category +codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump; + +# Parameter number +codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; +meta parameterUnits codetable_units(parameterNumber) : dump; +meta parameterName codetable_title(parameterNumber) : dump; + +# Type of generating process +codetable[1] typeOfGeneratingProcess 'grib2/tables/[tablesVersion]/4.3.table' : dump; + +# Observation generating process identifier (defined by originating centre) +unsigned[1] observationGeneratingProcessIdentifier : dump; + +# Number of contributing spectral bands +# (NB) +unsigned[1] NB : dump; +alias numberOfContributingSpectralBands=NB; + +if (new() || section4Length>14) { +listOfContributingSpectralBands list(numberOfContributingSpectralBands){ + unsigned[2] satelliteSeries; + unsigned[2] satelliteNumber; + unsigned[1] instrumentType; + unsigned[1] scaleFactorOfCentralWaveNumber = missing() : can_be_missing ; + unsigned[4] scaledValueOfCentralWaveNumber = missing() : can_be_missing ; +} +} + + +# END 2/template.4.30 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.4.31.def b/definitions/grib2/template.4.31.def new file mode 100644 index 000000000..a4d728a99 --- /dev/null +++ b/definitions/grib2/template.4.31.def @@ -0,0 +1,44 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# For grib2 to grib1 convertion +constant dataRepresentationType = 90; + + +# START 2/template.4.31 ---------------------------------------------------------------------- +# TEMPLATE 4.31, Satellite Product +# Parameter category +codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump; + +# Parameter number +codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; +meta parameterUnits codetable_units(parameterNumber) : dump; +meta parameterName codetable_title(parameterNumber) : dump; + +# Type of generating process +codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump; + +# Observation generating process identifier (defined by originating centre) +unsigned[1] observationGeneratingProcessIdentifier : dump; +alias generatingProcessIdentifier=observationGeneratingProcessIdentifier; + +# Number of contributing spectral bands +# (NB) +unsigned[1] NB : dump; +alias numberOfContributingSpectralBands=NB; + +listOfContributingSpectralBands list(numberOfContributingSpectralBands){ + unsigned[2] satelliteSeries : dump; + unsigned[2] satelliteNumber : dump; + unsigned[2] instrumentType : dump; + unsigned[1] scaleFactorOfCentralWaveNumber = missing() : dump,can_be_missing ; + unsigned[4] scaledValueOfCentralWaveNumber = missing() : dump,can_be_missing ; +} + +# END 2/template.4.31 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.4.311.def b/definitions/grib2/template.4.311.def new file mode 100644 index 000000000..55316e4d0 --- /dev/null +++ b/definitions/grib2/template.4.311.def @@ -0,0 +1,45 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# For grib2 to grib1 convertion +constant dataRepresentationType = 90; + + +# START 2/template.4.311 ---------------------------------------------------------------------- +# TEMPLATE 4.311, Satellite Product Auxiliary Information +# Parameter category +codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump; + +# Parameter number +codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; +meta parameterUnits codetable_units(parameterNumber) : dump; +meta parameterName codetable_title(parameterNumber) : dump; + +# Type of generating process +codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump; + +# Observation generating process identifier (defined by originating centre) +unsigned[1] observationGeneratingProcessIdentifier : dump; + +# Number of contributing spectral bands +# (NB) +unsigned[1] NB : dump; +alias numberOfContributingSpectralBands=NB; + +codetable[1] typeOfAuxiliaryInformation ('4.15.table',masterDir,localDir) : dump; + +listOfContributingSpectralBands list(numberOfContributingSpectralBands){ + unsigned[2] satelliteSeries : dump; + unsigned[2] satelliteNumber : dump; + unsigned[2] instrumentType : dump; + unsigned[1] scaleFactorOfCentralWaveNumber = missing() : dump,can_be_missing ; + unsigned[4] scaledValueOfCentralWaveNumber = missing() : dump,can_be_missing ; +} + +# END 2/template.4.311 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.4.32.def b/definitions/grib2/template.4.32.def new file mode 100644 index 000000000..83b69b2ce --- /dev/null +++ b/definitions/grib2/template.4.32.def @@ -0,0 +1,39 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# For grib2 to grib1 convertion +constant dataRepresentationType = 90; + + +# START template.4.32 ---------------------------------------------------------------------- +# TEMPLATE 4.32, analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data + +include "template.4.parameter.def" +include "template.4.point_in_time.def"; + +# Required for interpolation and MARS. The level type is used to decide whether to apply the Land Sea Mask +constant typeOfLevel="surface"; +constant levelType="surface"; +constant level=0; + + +# Number of contributing spectral bands (NB) +unsigned[1] NB : dump; +alias numberOfContributingSpectralBands=NB; + +listOfContributingSpectralBands list(numberOfContributingSpectralBands){ + unsigned[2] satelliteSeries : dump; + unsigned[2] satelliteNumber : dump; + unsigned[2] instrumentType : dump; + unsigned[1] scaleFactorOfCentralWaveNumber = missing() : dump,can_be_missing ; + unsigned[4] scaledValueOfCentralWaveNumber = missing() : dump,can_be_missing ; +} + +# END template.4.32 ---------------------------------------------------------------------- + diff --git a/definitions/grib2/template.4.4.def b/definitions/grib2/template.4.4.def new file mode 100644 index 000000000..f17a89754 --- /dev/null +++ b/definitions/grib2/template.4.4.def @@ -0,0 +1,20 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.4, Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter.def" +include "template.4.point_in_time.def"; +include "template.4.horizontal.def" +include "template.4.derived.def" +include "template.4.circular_cluster.def" + +ensembleForecastNumbersList list(numberOfForecastsInTheCluster) { + unsigned[1] ensembleForecastNumbers : dump; +} diff --git a/definitions/grib2/template.4.40.def b/definitions/grib2/template.4.40.def new file mode 100644 index 000000000..f2086992e --- /dev/null +++ b/definitions/grib2/template.4.40.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.40, Analysis or forecast at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter_chemical.def"; +include "template.4.point_in_time.def"; +include "template.4.horizontal.def"; diff --git a/definitions/grib2/template.4.40033.def b/definitions/grib2/template.4.40033.def new file mode 100644 index 000000000..dd0bb214d --- /dev/null +++ b/definitions/grib2/template.4.40033.def @@ -0,0 +1,17 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.40033, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data + +include "template.4.32.def" +include "template.4.eps.def" + +alias instrument = instrumentType; +alias ident = satelliteNumber; + diff --git a/definitions/grib2/template.4.40034.def b/definitions/grib2/template.4.40034.def new file mode 100644 index 000000000..08b887127 --- /dev/null +++ b/definitions/grib2/template.4.40034.def @@ -0,0 +1,18 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.40034, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data + +include "template.4.32.def" +include "template.4.eps.def" +include "template.4.statistical.def" + +alias instrument = instrumentType; +alias ident = satelliteNumber; + diff --git a/definitions/grib2/template.4.40052.def b/definitions/grib2/template.4.40052.def new file mode 100644 index 000000000..ff92404cf --- /dev/null +++ b/definitions/grib2/template.4.40052.def @@ -0,0 +1,16 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# +# TEMPLATE 4.40052, Partitioned parameters at a horizontal level or horizontal layer at a point in time + +include "template.4.parameter_partition.def" +include "template.4.point_in_time.def"; +include "template.4.horizontal.def"; +constant cat="cat"; +alias mars.levtype=cat; +alias mars.levelist=partitionNumber; diff --git a/definitions/grib2/template.4.41.def b/definitions/grib2/template.4.41.def new file mode 100644 index 000000000..ec2577089 --- /dev/null +++ b/definitions/grib2/template.4.41.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.41, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter_chemical.def" +include "template.4.point_in_time.def"; +include "template.4.horizontal.def" +include "template.4.eps.def" diff --git a/definitions/grib2/template.4.42.def b/definitions/grib2/template.4.42.def new file mode 100644 index 000000000..1169e317e --- /dev/null +++ b/definitions/grib2/template.4.42.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.42, Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter_chemical.def" +include "template.4.horizontal.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.43.def b/definitions/grib2/template.4.43.def new file mode 100644 index 000000000..397e0619e --- /dev/null +++ b/definitions/grib2/template.4.43.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.43, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter_chemical.def" +include "template.4.horizontal.def" +include "template.4.eps.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.44.def b/definitions/grib2/template.4.44.def new file mode 100644 index 000000000..e9e5d6019 --- /dev/null +++ b/definitions/grib2/template.4.44.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.44, Analysis or forecast at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter_aerosol.def"; +include "template.4.point_in_time.def"; +include "template.4.horizontal.def"; diff --git a/definitions/grib2/template.4.45.def b/definitions/grib2/template.4.45.def new file mode 100644 index 000000000..e2344198c --- /dev/null +++ b/definitions/grib2/template.4.45.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.45, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for aerosol + +include "template.4.parameter_aerosol.def" +include "template.4.point_in_time.def"; +include "template.4.horizontal.def" +include "template.4.eps.def" diff --git a/definitions/grib2/template.4.46.def b/definitions/grib2/template.4.46.def new file mode 100644 index 000000000..5444eb41f --- /dev/null +++ b/definitions/grib2/template.4.46.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.46, Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol + +include "template.4.parameter_aerosol.def" +include "template.4.horizontal.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.47.def b/definitions/grib2/template.4.47.def new file mode 100644 index 000000000..46b5d8ec9 --- /dev/null +++ b/definitions/grib2/template.4.47.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.47, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter_aerosol.def" +include "template.4.horizontal.def" +include "template.4.eps.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.48.def b/definitions/grib2/template.4.48.def new file mode 100644 index 000000000..7afe79ac3 --- /dev/null +++ b/definitions/grib2/template.4.48.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.48, Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol + +include "template.4.parameter_aerosol_optical.def"; +include "template.4.point_in_time.def"; +include "template.4.horizontal.def"; diff --git a/definitions/grib2/template.4.5.def b/definitions/grib2/template.4.5.def new file mode 100644 index 000000000..028ef1eb6 --- /dev/null +++ b/definitions/grib2/template.4.5.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.5, Probability forecasts at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter.def" +include "template.4.point_in_time.def"; +include "template.4.horizontal.def" +include "template.4.probability.def" diff --git a/definitions/grib2/template.4.51.def b/definitions/grib2/template.4.51.def new file mode 100644 index 000000000..c26e867d5 --- /dev/null +++ b/definitions/grib2/template.4.51.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.51, Categorical forecasts at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter.def" +include "template.4.point_in_time.def"; +include "template.4.horizontal.def" +include "template.4.categorical.def" diff --git a/definitions/grib2/template.4.6.def b/definitions/grib2/template.4.6.def new file mode 100644 index 000000000..373fbcc5e --- /dev/null +++ b/definitions/grib2/template.4.6.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.6, Percentile forecasts at a horizontal level or in a horizontal layer at a point in time + +include "template.4.parameter.def" +include "template.4.point_in_time.def"; +include "template.4.horizontal.def" +include "template.4.percentile.def" diff --git a/definitions/grib2/template.4.7.def b/definitions/grib2/template.4.7.def new file mode 100644 index 000000000..47ab8a652 --- /dev/null +++ b/definitions/grib2/template.4.7.def @@ -0,0 +1,13 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.7, Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time +# Same as 4.0 Should not be used + +include "template.4.0.def" \ No newline at end of file diff --git a/definitions/grib2/template.4.8.def b/definitions/grib2/template.4.8.def new file mode 100644 index 000000000..c30ba3c59 --- /dev/null +++ b/definitions/grib2/template.4.8.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.8, Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter.def" +include "template.4.horizontal.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.9.def b/definitions/grib2/template.4.9.def new file mode 100644 index 000000000..fed4d200f --- /dev/null +++ b/definitions/grib2/template.4.9.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.9, Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter.def" +include "template.4.horizontal.def" +include "template.4.probability.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.91.def b/definitions/grib2/template.4.91.def new file mode 100644 index 000000000..83b5b83a7 --- /dev/null +++ b/definitions/grib2/template.4.91.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 4.91, Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval + +include "template.4.parameter.def" +include "template.4.horizontal.def" +include "template.4.categorical.def" +include "template.4.statistical.def" diff --git a/definitions/grib2/template.4.categorical.def b/definitions/grib2/template.4.categorical.def new file mode 100755 index 000000000..e242a6ce9 --- /dev/null +++ b/definitions/grib2/template.4.categorical.def @@ -0,0 +1,30 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Categorical Forecast"; + +# Total number of forecast probabilities +unsigned[1] numberOfCategories : dump; + +# categories +categories list(numberOfCategories) { + codetable[1] categoryType ('4.91.table',masterDir,localDir): dump; + unsigned[1] codeFigure : dump; + # Scale factor of lower limit + unsigned[1] scaleFactorOfLowerLimit : can_be_missing,dump ; + + # Scaled value of lower limit + unsigned[4] scaledValueOfLowerLimit : can_be_missing,dump ; + + # Scale factor of upper limit + unsigned[1] scaleFactorOfUpperLimit : can_be_missing,dump; + + # Scaled value of upper limit + unsigned[4] scaledValueOfUpperLimit : can_be_missing,dump; +} diff --git a/definitions/grib2/template.4.circular_cluster.def b/definitions/grib2/template.4.circular_cluster.def new file mode 100755 index 000000000..29f0a4d66 --- /dev/null +++ b/definitions/grib2/template.4.circular_cluster.def @@ -0,0 +1,56 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Circular cluster"; + +# Cluster identifier +unsigned[1] clusterIdentifier : dump; +alias number=clusterIdentifier; + +# Number of cluster to which the high resolution control belongs +unsigned[1] numberOfClusterHighResolution : dump; + +# Number of cluster to which the low resolution control belongs +unsigned[1] numberOfClusterLowResolution : dump; + +# Total number of clusters +unsigned[1] totalNumberOfClusters : dump; +alias totalNumber=totalNumberOfClusters; + +# Clustering method +codetable[1] clusteringMethod ('4.8.table',masterDir,localDir) : dump; + +# Latitude of central point in cluster domain +unsigned[4] latitudeOfCentralPointInClusterDomain : dump; + +# Longitude of central point in cluster domain +unsigned[4] longitudeOfCentralPointInClusterDomain : dump; + +# Radius of cluster domain +unsigned[4] radiusOfClusterDomain : dump ; + +# NC - Number of forecasts in the cluster +unsigned[1] numberOfForecastsInTheCluster : dump; + +alias NC = numberOfForecastsInTheCluster; +# Scale factor of standard deviation in the cluster +unsigned[1] scaleFactorOfStandardDeviation : edition_specific ; +alias scaleFactorOfStandardDeviationInTheCluster=scaleFactorOfStandardDeviation; + + +# Scaled value of standard deviation in the cluster +unsigned[4] scaledValueOfStandardDeviation : dump ; +alias scaledValueOfStandardDeviationInTheCluster=scaledValueOfStandardDeviation; + + +# Scale factor of distance of the cluster from ensemble mean +unsigned[1] scaleFactorOfDistanceFromEnsembleMean : dump; + +# Scaled value of distance of the cluster from ensemble mean +unsigned[4] scaleFactorOfDistanceFromEnsembleMean : dump; diff --git a/definitions/grib2/template.4.derived.def b/definitions/grib2/template.4.derived.def new file mode 100755 index 000000000..af572e9b7 --- /dev/null +++ b/definitions/grib2/template.4.derived.def @@ -0,0 +1,17 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Derived forecast"; + +# Derived forecast +codetable[1] derivedForecast ('4.7.table',masterDir,localDir) : dump; + +# Number of forecasts in ensemble +unsigned[1] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; diff --git a/definitions/grib2/template.4.eps.def b/definitions/grib2/template.4.eps.def new file mode 100644 index 000000000..43e05ce96 --- /dev/null +++ b/definitions/grib2/template.4.eps.def @@ -0,0 +1,27 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "EPS information"; + +# Type of ensemble forecast +codetable[1] typeOfEnsembleForecast ('4.6.table',masterDir,localDir) = 255 : dump; + +# Perturbation number +unsigned[1] perturbationNumber : dump; +alias number=perturbationNumber; + +# Number of forecasts in ensemble +unsigned[1] numberOfForecastsInEnsemble : dump; +alias totalNumber=numberOfForecastsInEnsemble; + +if (productionStatusOfProcessedData==4 || productionStatusOfProcessedData==5) { + alias mars.number=perturbationNumber; +} + +# diff --git a/definitions/grib2/template.4.horizontal.def b/definitions/grib2/template.4.horizontal.def new file mode 100755 index 000000000..77e04108b --- /dev/null +++ b/definitions/grib2/template.4.horizontal.def @@ -0,0 +1,121 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Type of first fixed surface +codetable[1] typeOfFirstFixedSurface ('4.5.table',masterDir,localDir) : dump,no_copy,edition_specific,string_type; +meta unitsOfFirstFixedSurface codetable_units(typeOfFirstFixedSurface) : dump; +meta nameOfFirstFixedSurface codetable_title(typeOfFirstFixedSurface) : dump; + +# Scale factor of first fixed surface +signed[1] scaleFactorOfFirstFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; + +# Scaled value of first fixed surface +unsigned[4] scaledValueOfFirstFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; + +# Type of second fixed surface +codetable[1] typeOfSecondFixedSurface ('4.5.table',masterDir,localDir) = 255 : dump,no_copy,edition_specific; +meta unitsOfSecondFixedSurface codetable_units(typeOfFirstFixedSurface) : dump; +meta nameOfSecondFixedSurface codetable_title(typeOfFirstFixedSurface) : dump; + +# Scale factor of second fixed surface +signed[1] scaleFactorOfSecondFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; + +# Scaled value of second fixed surface +unsigned[4] scaledValueOfSecondFixedSurface = missing() : can_be_missing,dump,no_copy,edition_specific; + +transient pressureUnits="hPa"; + +concept_nofail vertical.typeOfLevel (unknown) { +#set uses the last one +#get returns the first match + 'surface' = { typeOfFirstFixedSurface=1; typeOfSecondFixedSurface=255; } + 'cloudBase' = { typeOfFirstFixedSurface=2; typeOfSecondFixedSurface=255; } + 'cloudTop' = { typeOfFirstFixedSurface=3; typeOfSecondFixedSurface=255; } + 'isothermZero' = { typeOfFirstFixedSurface=4; typeOfSecondFixedSurface=255; } + 'adiabaticCondensation' = {typeOfFirstFixedSurface=5; typeOfSecondFixedSurface=255; } + 'maxWind' = {typeOfFirstFixedSurface=6; typeOfSecondFixedSurface=255;} + 'tropopause' = {typeOfFirstFixedSurface=7; typeOfSecondFixedSurface=255;} + 'nominalTop' = {typeOfFirstFixedSurface=8; typeOfSecondFixedSurface=255; } + 'seaBottom' = {typeOfFirstFixedSurface=9; typeOfSecondFixedSurface=255;} + 'isothermal' = {typeOfFirstFixedSurface=20; typeOfSecondFixedSurface=255;} + 'isobaricInPa' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=255; pressureUnits='Pa'; } + 'isobaricInhPa' = {typeOfFirstFixedSurface=100; pressureUnits='hPa'; typeOfSecondFixedSurface=255;} + 'isobaricLayer' = {typeOfFirstFixedSurface=100; typeOfSecondFixedSurface=100;} + 'meanSea' = { typeOfFirstFixedSurface=101; typeOfSecondFixedSurface=255; } + 'heightAboveSea' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=255;} + 'heightAboveSeaLayer' = {typeOfFirstFixedSurface=102; typeOfSecondFixedSurface=102;} + 'heightAboveGround' = {typeOfFirstFixedSurface=103; typeOfSecondFixedSurface=255;} + 'heightAboveGroundLayer' = {typeOfFirstFixedSurface=103;typeOfSecondFixedSurface=103;} + 'sigma' = {typeOfFirstFixedSurface=104; typeOfSecondFixedSurface=255;} + 'sigmaLayer' = {typeOfFirstFixedSurface=104; typeOfSecondFixedSurface=104;} + 'hybrid' = {typeOfFirstFixedSurface=105; typeOfSecondFixedSurface=255;} + 'hybridHeight' = {typeOfFirstFixedSurface=118; typeOfSecondFixedSurface=255;} + 'hybridLayer' = {typeOfFirstFixedSurface=105; typeOfSecondFixedSurface=105; } + 'depthBelowLand' = {typeOfFirstFixedSurface=106; typeOfSecondFixedSurface=255;} + 'depthBelowLandLayer' = {typeOfFirstFixedSurface=106; typeOfSecondFixedSurface=106;} + 'theta' = {typeOfFirstFixedSurface=107; typeOfSecondFixedSurface=255;} + 'thetaLayer' = {typeOfFirstFixedSurface=107;typeOfSecondFixedSurface=107;} + 'pressureFromGround' = {typeOfFirstFixedSurface=108; typeOfSecondFixedSurface=255;} + 'pressureFromGroundLayer' = {typeOfFirstFixedSurface=108;typeOfSecondFixedSurface=108;} + 'potentialVorticity' = {typeOfFirstFixedSurface=109; typeOfSecondFixedSurface=255;} + 'eta' = {typeOfFirstFixedSurface=111; typeOfSecondFixedSurface=255;} + 'generalVertical' = {typeOfFirstFixedSurface=150;} + 'generalVerticalLayer' = {typeOfFirstFixedSurface=150; typeOfSecondFixedSurface=150;} + 'depthBelowSea' = {typeOfFirstFixedSurface=160; typeOfSecondFixedSurface=255;} + 'entireAtmosphere' = {typeOfFirstFixedSurface=1;typeOfSecondFixedSurface=8;} + 'entireOcean' = {typeOfFirstFixedSurface=1;typeOfSecondFixedSurface=9;} +} + +alias levelType=typeOfFirstFixedSurface; + +if (typeOfSecondFixedSurface==255) { + meta level g2level(typeOfFirstFixedSurface, + scaleFactorOfFirstFixedSurface, + scaledValueOfFirstFixedSurface, + pressureUnits) :dump; + transient bottomLevel=level; + transient topLevel=level; +} else { + meta topLevel g2level(typeOfFirstFixedSurface, + scaleFactorOfFirstFixedSurface, + scaledValueOfFirstFixedSurface, + pressureUnits) :dump; + meta bottomLevel g2level(typeOfSecondFixedSurface, + scaleFactorOfSecondFixedSurface, + scaledValueOfSecondFixedSurface, + pressureUnits) :dump; + transient level=topLevel; +} +alias ls.level=level; +alias vertical.level=level; +alias vertical.bottomLevel=bottomLevel; +alias vertical.topLevel=topLevel; + +alias extraDim=zero; +if (defined(extraDimensionPresent)) { + if (extraDimensionPresent) { + alias extraDim=one; + } +} +if (extraDim) { + alias mars.levelist = dimension; + alias mars.levtype = dimensionType; +} else { + if (!(typeOfLevel is "surface")) { + if (pressureUnits is "Pa") { + meta marsLevel scale(level,one,hundred) : read_only; + alias mars.levelist=marsLevel; + } else { + alias mars.levelist = level; + } + } + alias mars.levtype = typeOfFirstFixedSurface; +} +alias ls.typeOfLevel=typeOfLevel; + diff --git a/definitions/grib2/template.4.parameter.def b/definitions/grib2/template.4.parameter.def new file mode 100644 index 000000000..bbffd20b5 --- /dev/null +++ b/definitions/grib2/template.4.parameter.def @@ -0,0 +1,48 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Parameter information"; + +# Parameter category +codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump; + +# Parameter number +codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; +meta parameterUnits codetable_units(parameterNumber) : dump; +meta parameterName codetable_title(parameterNumber) : dump; + +# Type of generating process +codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump; + +# Background generating process identifier +# (defined by originating centre) +unsigned[1] backgroundProcess = 255 : edition_specific; +alias backgroundGeneratingProcessIdentifier=backgroundProcess; + + +# Analysis or forecast generating processes identifier +# (defined by originating centre) +unsigned[1] generatingProcessIdentifier : dump; + +# Hours of observational data cut-off after reference time +# NOTE 1 NOT FOUND +unsigned[2] hoursAfterDataCutoff =missing() : edition_specific,can_be_missing; +alias hoursAfterReferenceTimeOfDataCutoff=hoursAfterDataCutoff; + +# Minutes of observational data cut-off after reference time +unsigned[1] minutesAfterDataCutoff = missing() : edition_specific,can_be_missing; +alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff; + +# Indicator of unit of time range +codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump; +codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy; + +# Forecast time in units defined by octet 18 +unsigned[4] forecastTime : dump; + diff --git a/definitions/grib2/template.4.parameter_aerosol.def b/definitions/grib2/template.4.parameter_aerosol.def new file mode 100644 index 000000000..8fa8eb123 --- /dev/null +++ b/definitions/grib2/template.4.parameter_aerosol.def @@ -0,0 +1,59 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Parameter information"; + +# Parameter category +codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump; + +# Parameter number +codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; +meta parameterUnits codetable_units(parameterNumber) : dump; +meta parameterName codetable_title(parameterNumber) : dump; + +# Atmospheric chemical or physical constitutent type +codetable[2] aerosolType ('4.230.table',masterDir,localDir) : dump; + +codetable[1] typeOfSizeInterval ('4.91.table',masterDir,localDir) : dump; +alias typeOfIntervalForFirstAndSecondSize=typeOfSizeInterval; + +signed[1] scaleFactorOfFirstSize : dump; +signed[4] scaledValueOfFirstSize :dump; +signed[1] scaleFactorOfSecondSize = missing() : can_be_missing,dump; +signed[4] scaledValueOfSecondSize = missing() : can_be_missing,dump; + +# Type of generating process +codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump; + +# Background generating process identifier +# (defined by originating centre) +unsigned[1] backgroundProcess = 255 : edition_specific; +alias backgroundGeneratingProcessIdentifier=backgroundProcess; + + +# Analysis or forecast generating processes identifier +# (defined by originating centre) +unsigned[1] generatingProcessIdentifier : dump; + +# Hours of observational data cut-off after reference time +# NOTE 1 NOT FOUND +unsigned[2] hoursAfterDataCutoff = missing() : edition_specific,can_be_missing; +alias hoursAfterReferenceTimeOfDataCutoff=hoursAfterDataCutoff; + +# Minutes of observational data cut-off after reference time +unsigned[1] minutesAfterDataCutoff = missing() : edition_specific,can_be_missing; +alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff; + +# Indicator of unit of time range +codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump; +codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy; + +# Forecast time in units defined by octet 18 +unsigned[4] forecastTime : dump; + diff --git a/definitions/grib2/template.4.parameter_aerosol_optical.def b/definitions/grib2/template.4.parameter_aerosol_optical.def new file mode 100644 index 000000000..d26e5a015 --- /dev/null +++ b/definitions/grib2/template.4.parameter_aerosol_optical.def @@ -0,0 +1,68 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Parameter information"; + +# Parameter category +codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump; + +# Parameter number +codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; +meta parameterUnits codetable_units(parameterNumber) : dump; +meta parameterName codetable_title(parameterNumber) : dump; + +# Atmospheric chemical or physical constitutent type +codetable[2] aerosolType ('4.230.table',masterDir,localDir) : dump; + +codetable[1] typeOfSizeInterval ('4.91.table',masterDir,localDir) : dump; +alias typeOfIntervalForFirstAndSecondSize=typeOfSizeInterval; + +signed[1] scaleFactorOfFirstSize : dump; +signed[4] scaledValueOfFirstSize :dump; +signed[1] scaleFactorOfSecondSize = missing() : can_be_missing,dump; +signed[4] scaledValueOfSecondSize = missing() : can_be_missing,dump; + +codetable[1] typeOfWavelengthInterval ('4.91.table',masterDir,localDir) : dump; +alias typeOfIntervalForFirstAndSecondWavelength=typeOfSizeInterval; + +# wavelengths in metres +signed[1] scaleFactorOfFirstWavelength : dump; +signed[4] scaledValueOfFirstWavelength : dump; +signed[1] scaleFactorOfSecondWavelength = missing(): can_be_missing,dump; +signed[4] scaledValueOfSecondWavelength = missing(): can_be_missing,dump; + +# Type of generating process +codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump; + +# Background generating process identifier +# (defined by originating centre) +unsigned[1] backgroundProcess = 255 : edition_specific; +alias backgroundGeneratingProcessIdentifier=backgroundProcess; + + +# Analysis or forecast generating processes identifier +# (defined by originating centre) +unsigned[1] generatingProcessIdentifier : dump; + +# Hours of observational data cut-off after reference time +# NOTE 1 NOT FOUND +unsigned[2] hoursAfterDataCutoff = missing() : edition_specific,can_be_missing; +alias hoursAfterReferenceTimeOfDataCutoff=hoursAfterDataCutoff; + +# Minutes of observational data cut-off after reference time +unsigned[1] minutesAfterDataCutoff = missing() : edition_specific,can_be_missing; +alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff; + +# Indicator of unit of time range +codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump; +codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy; + +# Forecast time in units defined by octet 18 +unsigned[4] forecastTime : dump; + diff --git a/definitions/grib2/template.4.parameter_chemical.def b/definitions/grib2/template.4.parameter_chemical.def new file mode 100644 index 000000000..1c7ec9371 --- /dev/null +++ b/definitions/grib2/template.4.parameter_chemical.def @@ -0,0 +1,52 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Parameter information"; + +# Parameter category +codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir): dump; + +# Parameter number +codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; +meta parameterUnits codetable_units(parameterNumber) : dump; +meta parameterName codetable_title(parameterNumber) : dump; + +# Atmospheric chemical or physical constitutent type +codetable[2] constituentType ('4.230.table',masterDir,localDir) : dump; + +# Type of generating process +codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump; + +# Background generating process identifier +# (defined by originating centre) +unsigned[1] backgroundProcess = 255 : edition_specific; +alias backgroundGeneratingProcessIdentifier=backgroundProcess; + +# Analysis or forecast generating processes identifier +# (defined by originating centre) +unsigned[1] generatingProcessIdentifier : dump; + +# Hours of observational data cut-off after reference time +# NOTE 1 NOT FOUND +unsigned[2] hoursAfterDataCutoff = missing() : edition_specific,can_be_missing; +alias hoursAfterReferenceTimeOfDataCutoff=hoursAfterDataCutoff; + +# Minutes of observational data cut-off after reference time +unsigned[1] minutesAfterDataCutoff = missing() : edition_specific,can_be_missing; +alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff; + +# Indicator of unit of time range +codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump; +codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy; + +# Forecast time in units defined by indicatorOfUnitOfTimeRange +unsigned[4] startStep : dump; + +alias forecastTime=startStep; + diff --git a/definitions/grib2/template.4.parameter_partition.def b/definitions/grib2/template.4.parameter_partition.def new file mode 100644 index 000000000..fd64f6492 --- /dev/null +++ b/definitions/grib2/template.4.parameter_partition.def @@ -0,0 +1,55 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Parameter information"; + +# Parameter category +codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir) : dump; + +# Parameter number +codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump; +meta parameterUnits codetable_units(parameterNumber) : dump; +meta parameterName codetable_title(parameterNumber) : dump; +unsigned[1] partitionTable : dump; +unsigned[1] numberOfPartitions=1 :dump; +partitions list(numberOfPartitions) { + unsigned[2] partitionItems ; +} + +codetable[2] partitionNumber ('4.[partitionTable].table',masterDir,localDir) : dump; + +# Type of generating process +codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump; + +# Background generating process identifier +# (defined by originating centre) +unsigned[1] backgroundProcess = 255 : edition_specific; +alias backgroundGeneratingProcessIdentifier=backgroundProcess; + + +# Analysis or forecast generating processes identifier +# (defined by originating centre) +unsigned[1] generatingProcessIdentifier : dump; + +# Hours of observational data cut-off after reference time +# NOTE 1 NOT FOUND +unsigned[2] hoursAfterDataCutoff =missing() : edition_specific,can_be_missing; +alias hoursAfterReferenceTimeOfDataCutoff=hoursAfterDataCutoff; + +# Minutes of observational data cut-off after reference time +unsigned[1] minutesAfterDataCutoff = missing() : edition_specific,can_be_missing; +alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff; + +# Indicator of unit of time range +codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump; +codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy; + +# Forecast time in units defined by octet 18 +unsigned[4] forecastTime : dump; + diff --git a/definitions/grib2/template.4.percentile.def b/definitions/grib2/template.4.percentile.def new file mode 100755 index 000000000..491d84ec2 --- /dev/null +++ b/definitions/grib2/template.4.percentile.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Percentile forecast"; + +# Percentile value +# (from 100% to 0%) +unsigned[1] percentileValue : dump; \ No newline at end of file diff --git a/definitions/grib2/template.4.point_in_time.def b/definitions/grib2/template.4.point_in_time.def new file mode 100644 index 000000000..f3f1b08f7 --- /dev/null +++ b/definitions/grib2/template.4.point_in_time.def @@ -0,0 +1,37 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +meta startStep step_in_units(forecastTime,indicatorOfUnitOfTimeRange,stepUnits): no_copy; +meta endStep g2end_step(startStep,stepUnits) : no_copy; + +alias step=startStep; +alias marsStep=startStep; + +alias mars.step=startStep; + +alias marsStartStep = startStep; +alias marsEndStep = endStep; + +meta stepRange g2step_range(startStep): dump; +alias ls.stepRange=stepRange; +concept stepTypeInternal { + "instant" = {dummy=1;} +} + +alias time.stepType=stepType; +alias time.stepRange=stepRange; +alias time.stepUnits=stepUnits; +alias time.dataDate=dataDate; +alias time.dataTime=dataTime; +alias time.startStep=startStep; +alias time.endStep=endStep; + +meta time.validityDate validity_date(dataDate,dataTime,step,stepUnits) : no_copy; +meta time.validityTime validity_time(dataDate,dataTime,step,stepUnits) : no_copy; + diff --git a/definitions/grib2/template.4.probability.def b/definitions/grib2/template.4.probability.def new file mode 100755 index 000000000..460ce8289 --- /dev/null +++ b/definitions/grib2/template.4.probability.def @@ -0,0 +1,32 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Forecast probability"; + +# Forecast probability number +unsigned[1] forecastProbabilityNumber : dump; + +# Total number of forecast probabilities +unsigned[1] totalNumberOfForecastProbabilities : dump; + +# Probability type +codetable[1] probabilityType ('4.9.table',masterDir,localDir) : dump; +meta probabilityTypeName codetable_title(probabilityType): read_only; + +# Scale factor of lower limit +unsigned[1] scaleFactorOfLowerLimit : can_be_missing,dump ; + +# Scaled value of lower limit +unsigned[4] scaledValueOfLowerLimit : can_be_missing,dump ; + +# Scale factor of upper limit +unsigned[1] scaleFactorOfUpperLimit : can_be_missing,dump; + +# Scaled value of upper limit +unsigned[4] scaledValueOfUpperLimit : can_be_missing,dump; diff --git a/definitions/grib2/template.4.rectangular_cluster.def b/definitions/grib2/template.4.rectangular_cluster.def new file mode 100755 index 000000000..9ead2aabc --- /dev/null +++ b/definitions/grib2/template.4.rectangular_cluster.def @@ -0,0 +1,59 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "Rectangular cluster"; + +# Cluster identifier +unsigned[1] clusterIdentifier : dump ; +alias number=clusterIdentifier; + +# Number of cluster to which the high resolution control belongs +unsigned[1] NH : dump; + +# Number of cluster to which the low resolution control belongs +unsigned[1] NL : dump ; + +# Total number of clusters +unsigned[1] totalNumberOfClusters : dump ; +alias totalNumber=totalNumberOfClusters; + +# Clustering method +codetable[1] clusteringMethod ('4.8.table',masterDir,localDir) : dump; + +# Northern latitude of cluster domain +unsigned[4] northernLatitudeOfClusterDomain : dump ; + +# Southern latitude of cluster domain +unsigned[4] southernLatitudeOfClusterDomain : dump ; + +# Eastern longitude of cluster domain +unsigned[4] easternLongitudeOfClusterDomain : dump; + +# Western longitude of cluster domain +unsigned[4] westernLongitudeOfClusterDomain : dump ; + +# NC - Number of forecasts in the cluster +unsigned[1] numberOfForecastsInTheCluster : dump ; + +alias NC = numberOfForecastsInTheCluster; +# Scale factor of standard deviation in the cluster +unsigned[1] scaleFactorOfStandardDeviation : edition_specific ; +alias scaleFactorOfStandardDeviationInTheCluster=scaleFactorOfStandardDeviation; + +# Scaled value of standard deviation in the cluster +unsigned[4] scaledValueOfStandardDeviation : dump ; +alias scaledValueOfStandardDeviationInTheCluster=scaledValueOfStandardDeviation; + +# Scale factor of distance of the cluster from ensemble mean +unsigned[1] scaleFactorOfDistanceFromEnsembleMean : dump ; + +# Scaled value of distance of the cluster from ensemble mean +unsigned[4] scaledValueOfDistanceFromEnsembleMean : dump ; + + diff --git a/definitions/grib2/template.4.statistical.def b/definitions/grib2/template.4.statistical.def new file mode 100644 index 000000000..cd94460d3 --- /dev/null +++ b/definitions/grib2/template.4.statistical.def @@ -0,0 +1,127 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "statistical processing"; +# Year of end of overall time interval +unsigned[2] yearOfEndOfOverallTimeInterval =0 : edition_specific; + +# Month of end of overall time interval +unsigned[1] monthOfEndOfOverallTimeInterval =0 : edition_specific; + +# Day of end of overall time interval +unsigned[1] dayOfEndOfOverallTimeInterval =0 : edition_specific; + +# Hour of end of overall time interval +unsigned[1] hourOfEndOfOverallTimeInterval =0 : edition_specific; + +# Minute of end of overall time interval +unsigned[1] minuteOfEndOfOverallTimeInterval =0 : edition_specific; + +# Second of end of overall time interval +unsigned[1] secondOfEndOfOverallTimeInterval =0 : edition_specific; + +# n - number of time range specifications describing the time intervals used to calculate the statistically-processed field +unsigned[1] numberOfTimeRange = 1 : edition_specific; +alias n = numberOfTimeRange; + +# Total number of data values missing in statistical process +unsigned[4] numberOfMissingInStatisticalProcess = 0 : edition_specific; +alias totalNumberOfDataValuesMissingInStatisticalProcess=numberOfMissingInStatisticalProcess; + +statisticalProcessesList list(numberOfTimeRange) +{ + +# Statistical process used to calculate the processed field from the field at each time increment during the time range +codetable[1] typeOfStatisticalProcessing ('4.10.table',masterDir,localDir) : edition_specific; + +# Type of time increment between successive fields used in the statistical processing +codetable[1] typeOfTimeIncrement ('4.11.table',masterDir,localDir) = 2 : edition_specific; +alias typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing=typeOfTimeIncrement; + +# Indicator of unit of time for time range over which statistical processing is done +codetable[1] indicatorOfUnitForTimeRange ('4.4.table',masterDir,localDir) =1 ; + +# Length of the time range over which statistical processing is done, in units defined by the previous octet +unsigned[4] lengthOfTimeRange=0 ; + +# Indicator of unit of time for the increment between the successive fields used +codetable[1] indicatorOfUnitForTimeIncrement ('4.4.table',masterDir,localDir)=255 ; + +# Time increment between successive fields, in units defined by the previous octet +# NOTE 3 NOT FOUND +unsigned[4] timeIncrement=0 ; +alias timeIncrementBetweenSuccessiveFields=timeIncrement; + +} +if (numberOfTimeRange==1) { + concept stepTypeInternal { + "instant" = {typeOfStatisticalProcessing=255;} + "avg" = {typeOfStatisticalProcessing=0;typeOfTimeIncrement=2;} + "avg" = {typeOfStatisticalProcessing=0;typeOfTimeIncrement=3;} + "avgd" = {typeOfStatisticalProcessing=0;typeOfTimeIncrement=1;} + "accum" = {typeOfStatisticalProcessing=1;typeOfTimeIncrement=2;} + "max" = {typeOfStatisticalProcessing=2;} + "min" = {typeOfStatisticalProcessing=3;} + "diff" = {typeOfStatisticalProcessing=4;} + "rms" = {typeOfStatisticalProcessing=5;} + "sd" = {typeOfStatisticalProcessing=6;} + "cov" = {typeOfStatisticalProcessing=7;} + "ratio" = {typeOfStatisticalProcessing=9;} + } + meta startStep step_in_units(forecastTime,indicatorOfUnitOfTimeRange,stepUnits, + indicatorOfUnitForTimeRange,lengthOfTimeRange) : no_copy; + meta endStep g2end_step( + startStep, + stepUnits, + + year, + month, + day, + hour, + minute, + second, + + yearOfEndOfOverallTimeInterval, + monthOfEndOfOverallTimeInterval, + dayOfEndOfOverallTimeInterval, + hourOfEndOfOverallTimeInterval, + minuteOfEndOfOverallTimeInterval, + secondOfEndOfOverallTimeInterval, + + indicatorOfUnitForTimeRange, + lengthOfTimeRange + ) : dump,no_copy; + + meta stepRange g2step_range(startStep,endStep): dump; +} else { + constant stepType = "multiple steps"; + constant stepTypeInternal = "multiple steps"; + constant endStep = "unavailable"; + constant startStep = "unavailable"; + constant stepRange = "unavailable"; +} + +#meta marsStep mars_step(stepRange,stepType) : edition_specific; + +alias ls.stepRange=stepRange; +alias mars.step=endStep; + +alias time.stepType=stepType; +alias time.stepRange=stepRange; +alias time.stepUnits=stepUnits; +alias time.dataDate=dataDate; +alias time.dataTime=dataTime; +alias time.startStep=startStep; +alias time.endStep=endStep; + +meta time.validityDate validity_date(date,dataTime,step,stepUnits,yearOfEndOfOverallTimeInterval, + monthOfEndOfOverallTimeInterval,dayOfEndOfOverallTimeInterval) : no_copy; +meta time.validityTime validity_time(date,dataTime,step,stepUnits,hourOfEndOfOverallTimeInterval, + minuteOfEndOfOverallTimeInterval) : no_copy; + diff --git a/definitions/grib2/template.5.0.def b/definitions/grib2/template.5.0.def new file mode 100644 index 000000000..ff907ab58 --- /dev/null +++ b/definitions/grib2/template.5.0.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 5.0, Grid point data - simple packing + +include "template.5.packing.def"; +include "template.5.original_values.def"; + diff --git a/definitions/grib2/template.5.1.def b/definitions/grib2/template.5.1.def new file mode 100644 index 000000000..4420f009a --- /dev/null +++ b/definitions/grib2/template.5.1.def @@ -0,0 +1,87 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.5.1 ---------------------------------------------------------------------- +# TEMPLATE 5.1, Matrix values at grid point -simple packing + +include "template.5.packing.def"; + + +unsigned[1] matrixBitmapsPresent ; +# same as in edition 1 +alias secondaryBitmapPresent=matrixBitmapsPresent; + +# Number of data values encoded in Section 7 +unsigned[4] numberOfCodedValues ; + +# NR - first dimension +# (rows) +unsigned[2] firstDimension ; + +alias NR = firstDimension; +# NC - second dimension +# (columns) +unsigned[2] secondDimension ; + +alias NC = secondDimension; +# First dimension coordinate value definition +# (Code Table 5.2) +unsigned[1] firstDimensionCoordinateValueDefinition ; + +# NC1 - number of coefficients or values used to specify first dimension coordinate function +unsigned[1] NC1 : dump ; +alias numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction=NC1; + +# Second dimension coordinate value definition +# (Code Table 5.2) +unsigned[1] secondDimensionCoordinateValueDefinition ; + +# NC2 - number of coefficients or values used to specify second dimension coordinate function +unsigned[1] NC2 : dump ; +alias numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction = NC2; + +# First dimension physical significance +# (Code Table 5.3) +unsigned[1] firstDimensionPhysicalSignificance ; + +# Second dimension physical significance +# (Code Table 5.3) +unsigned[1] secondDimensionPhysicalSignificance ; + +ieeefloat coefsFirst[NC1]; # TODO: find proper names +ieeefloat coefsSecond[NC2];# TODO: find proper names + +alias data.coefsFirst = coefsFirst; +alias data.coefsSecond=coefsSecond; + +if(matrixBitmapsPresent == 1) +{ + + constant datumSize = NC*NR; + constant secondaryBitmapsCount = numberOfValues + 0; # + constant secondaryBitmapsSize = secondaryBitmapsCount/8; + + transient numberOfDataMatrices = numberOfDataPoints/datumSize; + + position offsetBBitmap; + meta secondaryBitmaps g2bitmap( + dummy, + missingValue, + offsetBSection5, + section5Length, + numberOfCodedValues , + dummy) : read_only + ; + + meta bitmap data_g2secondary_bitmap(primaryBitmap, + secondaryBitmaps, + missingValue,datumSize,numberOfDataPoints) : read_only; + +} diff --git a/definitions/grib2/template.5.2.def b/definitions/grib2/template.5.2.def new file mode 100644 index 000000000..d4883d38f --- /dev/null +++ b/definitions/grib2/template.5.2.def @@ -0,0 +1,59 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.5.2 ---------------------------------------------------------------------- +# TEMPLATE 5.2, Grid point data - complex packing + +include "template.5.packing.def"; +include "template.5.original_values.def"; + +# Group splitting method used +codetable[1] groupSplittingMethodUsed ('5.4.table',masterDir,localDir); + +# Missing value management used +codetable[1] missingValueManagementUsed ('5.5.table',masterDir,localDir); + +# Primary missing value substitute +unsigned[4] primaryMissingValueSubstitute ; + +# Secondary missing value substitute +unsigned[4] secondaryMissingValueSubstitute ; + +# NG - Number of groups of data values into which field is split +unsigned[4] numberOfGroupsOfDataValues ; + +alias NG = numberOfGroupsOfDataValues; +# Reference for group widths +# NOTE 12 NOT FOUND +unsigned[1] referenceForGroupWidths ; + +# Number of bits used for the group widths +# (after the reference value in octet 36 has been removed) +unsigned[1] numberOfBitsUsedForTheGroupWidths ; + +# Reference for group lengths +# NOTE 13 NOT FOUND +unsigned[4] referenceForGroupLengths ; + +# Length increment for the group lengths +# NOTE 14 NOT FOUND +unsigned[1] lengthIncrementForTheGroupLengths ; + +# True length of last group +unsigned[4] trueLengthOfLastGroup ; + +# Number of bits used for the scaled group lengths +# (after subtraction of the reference value given in octets 38-41 and division +# by the length increment given in octet 42) +unsigned[1] numberOfBitsForScaledGroupLengths ; +alias numberOfBitsUsedForTheScaledGroupLengths=numberOfBitsForScaledGroupLengths; + + +# END 2/template.5.2 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.5.3.def b/definitions/grib2/template.5.3.def new file mode 100644 index 000000000..8afbbd4bd --- /dev/null +++ b/definitions/grib2/template.5.3.def @@ -0,0 +1,67 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.5.3 ---------------------------------------------------------------------- +# TEMPLATE 5.3, Grid point data - complex packing and spatial differencing + +include "template.5.packing.def"; +include "template.5.original_values.def"; + + +# Group splitting method used +codetable[1] groupSplittingMethodUsed ('5.4.table',masterDir,localDir); + +# Missing value management used +codetable[1] missingValueManagementUsed ('5.5.table',masterDir,localDir); + +# Primary missing value substitute +unsigned[4] primaryMissingValueSubstitute ; + +# Secondary missing value substitute +unsigned[4] secondaryMissingValueSubstitute ; + +# NG - Number of groups of data values into which field is split +unsigned[4] numberOfGroupsOfDataValues ; + +alias NG = numberOfGroupsOfDataValues; +# Reference for group widths +# NOTE 12 NOT FOUND +unsigned[1] referenceForGroupWidths ; + +# Number of bits used for the group widths +# (after the reference value in octet 36 has been removed) +unsigned[1] numberOfBitsUsedForTheGroupWidths ; + +# Reference for group lengths +# NOTE 13 NOT FOUND +unsigned[4] referenceForGroupLengths ; + +# Length increment for the group lengths +# NOTE 14 NOT FOUND +unsigned[1] lengthIncrementForTheGroupLengths ; + +# True length of last group +unsigned[4] trueLengthOfLastGroup ; + +# Number of bits used for the scaled group lengths +# (after subtraction of the reference value given in octets 38-41 and division +# by the length increment given in octet 42) +unsigned[1] numberOfBitsForScaledGroupLengths ; +alias numberOfBitsUsedForTheScaledGroupLengths=numberOfBitsForScaledGroupLengths; + +# Order of spatial differencing +codetable[1] orderOfSpatialDifferencing ('5.6.table',masterDir,localDir); + +# Number of octets required in the Data Section to specify extra descriptors needed for spatial differencing +# (octets 6-ww in Data Template 7.3) +unsigned[1] numberOfOctetsExtraDescriptors ; + + +# END 2/template.5.3 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.5.4.def b/definitions/grib2/template.5.4.def new file mode 100644 index 000000000..7918f002a --- /dev/null +++ b/definitions/grib2/template.5.4.def @@ -0,0 +1,24 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "grib 2 Section 5 template 5.4"; +# START 2/template.5.4 ---------------------------------------------------------------------- +# TEMPLATE 5.4, Grid point data - IEEE packing +# added for conversion from other packing +transient bitsPerValue=0 : hidden; +transient referenceValue=0 : hidden; +transient binaryScaleFactor=0 : hidden; +transient decimalScaleFactor=0 : hidden; +alias numberOfBits = bitsPerValue; +alias numberOfBitsContainingEachPackedValue = bitsPerValue; + + +codetable[1] precision ('5.7.table',masterDir,localDir) = 1 : edition_specific; + +# END 2/template.5.4 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.5.40.def b/definitions/grib2/template.5.40.def new file mode 100644 index 000000000..8016c8446 --- /dev/null +++ b/definitions/grib2/template.5.40.def @@ -0,0 +1,25 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +#Data Representation Template 5.40: +#Grid point data - JPEG 2000 Code Stream Format + +include "template.5.packing.def"; +include "template.5.original_values.def"; + +# Octet 22 : Type of Compression used. (see Code Table 5.40) + +codetable[1] typeOfCompressionUsed ('5.40.table',masterDir,localDir) ; + +# Octets 23 Target compression ratio, M:1 (with respect to the bit-depth specified in octet 20), +# when octet 22 indicates Lossy Compression. Otherwise, set to missing. (see Note 3) + +unsigned[1] targetCompressionRatio = 255; + +# END 2/template.5.40------------------------------- diff --git a/definitions/grib2/template.5.40000.def b/definitions/grib2/template.5.40000.def new file mode 100644 index 000000000..c098505c9 --- /dev/null +++ b/definitions/grib2/template.5.40000.def @@ -0,0 +1,10 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +include "template.5.40.def" \ No newline at end of file diff --git a/definitions/grib2/template.5.40010.def b/definitions/grib2/template.5.40010.def new file mode 100644 index 000000000..c7114d53c --- /dev/null +++ b/definitions/grib2/template.5.40010.def @@ -0,0 +1,10 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +include "template.5.41.def" \ No newline at end of file diff --git a/definitions/grib2/template.5.41.def b/definitions/grib2/template.5.41.def new file mode 100644 index 000000000..d6e4ae62c --- /dev/null +++ b/definitions/grib2/template.5.41.def @@ -0,0 +1,14 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Grid point data - PNG Code Stream Format SAME AS 5.40010 !!!!!! + +include "template.5.packing.def"; +include "template.5.original_values.def"; + diff --git a/definitions/grib2/template.5.42.def b/definitions/grib2/template.5.42.def new file mode 100644 index 000000000..8aa3b631f --- /dev/null +++ b/definitions/grib2/template.5.42.def @@ -0,0 +1,28 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 5.42, Grid point and spectral data - CCSDS szip + +include "template.5.packing.def"; +include "template.5.original_values.def"; + +unsigned[1] szipOptionsMask : dump; + +flagbit SZ_ALLOW_K13_OPTION_MASK(szipOptionsMask,0) = 0; +flagbit SZ_CHIP_OPTION_MASK(szipOptionsMask,1) = 0; +flagbit SZ_EC_OPTION_MASK(szipOptionsMask,2) = 0; +flagbit SZ_LSB_OPTION_MASK(szipOptionsMask,3) = 0; +flagbit SZ_MSB_OPTION_MASK(szipOptionsMask,4) = 1; +flagbit SZ_NN_OPTION_MASK(szipOptionsMask,5) = 1; +flagbit SZ_RAW_OPTION_MASK(szipOptionsMask,7) = 1; + +unsigned[1] szipBitsPerPixel : dump; +unsigned[2] szipPixelPerBlock = 32 : dump; +unsigned[2] szipPixelPerScanLine = 128 * szipPixelPerBlock : dump; + diff --git a/definitions/grib2/template.5.50.def b/definitions/grib2/template.5.50.def new file mode 100644 index 000000000..890db0069 --- /dev/null +++ b/definitions/grib2/template.5.50.def @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 5.50, Spectral data - simple packing +include "template.5.packing.def"; + +# Real part of (0,0) +ieeefloat realPartOf00 ; + diff --git a/definitions/grib2/template.5.50000.def b/definitions/grib2/template.5.50000.def new file mode 100644 index 000000000..a1dd99de4 --- /dev/null +++ b/definitions/grib2/template.5.50000.def @@ -0,0 +1,44 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + + +# TEMPLATE 5.51, Spherical harmonics data - complex packing + +include "template.5.packing.def"; + +if (gribex_mode_on()) { + transient computeLaplacianOperator=0 : hidden; +} else { + transient computeLaplacianOperator=1 : hidden; +} + +meta _numberOfValues spectral_truncation(J,K,M,numberOfValues): read_only; + +constant laplacianScalingFactorUnset = -2147483647; +signed[4] laplacianScalingFactor : edition_specific ; + +meta data.laplacianOperator scale(laplacianScalingFactor,one,million,truncateLaplacian) ; +meta laplacianOperatorIsSet evaluate(laplacianScalingFactor != laplacianScalingFactorUnset && !computeLaplacianOperator); + +transient JS= 20 ; +transient KS=20 ; +transient MS=20 ; +transient subSetJ=0 ; +transient subSetK=0 ; +transient subSetM=0 ; + +unsigned[4] TS ; + +meta _TS spectral_truncation(J,K,M,TS) : read_only,hidden; + +# This is read_only until we support other values +codetable[1] unpackedSubsetPrecision ('5.7.table',masterDir,localDir) = 2 : dump; + +alias precisionOfTheUnpackedSubset=unpackedSubsetPrecision; diff --git a/definitions/grib2/template.5.50001.def b/definitions/grib2/template.5.50001.def new file mode 100755 index 000000000..df5988eb2 --- /dev/null +++ b/definitions/grib2/template.5.50001.def @@ -0,0 +1,33 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +ieeefloat referenceValue : no_copy; +meta referenceValueError reference_value_error(referenceValue,ieee); + +signed[2] binaryScaleFactor : no_copy; + +signed[2] decimalScaleFactor :no_copy; + +unsigned[1] bitsPerValue ; +if (bitsPerValue) { + unsigned[1] widthOfFirstOrderValues :no_copy ; + + unsigned [4] numberOfGroups : no_copy; + unsigned [4] numberOfSecondOrderPackedValues : no_copy; + unsigned [1] widthOfWidths : no_copy; + unsigned [1] widthOfLengths : no_copy; + unsigned [1] orderOfSPD = 2 : no_copy ; + + if (orderOfSPD) { + unsigned[1] widthOfSPD ; + meta SPD spd(widthOfSPD,orderOfSPD) : read_only; + } +} + diff --git a/definitions/grib2/template.5.50002.def b/definitions/grib2/template.5.50002.def new file mode 100755 index 000000000..ec9b6d4ea --- /dev/null +++ b/definitions/grib2/template.5.50002.def @@ -0,0 +1,34 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +ieeefloat referenceValue : no_copy; +meta referenceValueError reference_value_error(referenceValue,ieee); + +signed[2] binaryScaleFactor : no_copy; + +signed[2] decimalScaleFactor :no_copy; + +unsigned[1] bitsPerValue ; +unsigned[1] widthOfFirstOrderValues :no_copy ; + +unsigned [4] numberOfGroups : no_copy; +unsigned [4] numberOfSecondOrderPackedValues : no_copy; +unsigned [1] widthOfWidths : no_copy; +unsigned [1] widthOfLengths : no_copy; +flags [1] secondOrderFlags "grib2/tables/[tablesVersion]/5.50002.table" = 0; +unsigned [1] orderOfSPD = 2 : no_copy ; + +flagbit boustrophedonicOrdering(secondOrderFlags,7) = 0; +alias boustrophedonic=boustrophedonicOrdering; + +if (orderOfSPD) { + unsigned[1] widthOfSPD ; + meta SPD spd(widthOfSPD,orderOfSPD) : read_only; +} diff --git a/definitions/grib2/template.5.51.def b/definitions/grib2/template.5.51.def new file mode 100644 index 000000000..dc89e79ec --- /dev/null +++ b/definitions/grib2/template.5.51.def @@ -0,0 +1,46 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + + +# TEMPLATE 5.51, Spherical harmonics data - complex packing + +include "template.5.packing.def"; + +if (gribex_mode_on()) { + transient computeLaplacianOperator=0 : hidden; +} else { + transient computeLaplacianOperator=1 : hidden; +} + + +meta _numberOfValues spectral_truncation(J,K,M,numberOfValues): read_only; + +constant laplacianScalingFactorUnset = -2147483647; +signed[4] laplacianScalingFactor : edition_specific ; + +meta data.laplacianOperator scale(laplacianScalingFactor,one,million,truncateLaplacian) ; +meta laplacianOperatorIsSet evaluate(laplacianScalingFactor != laplacianScalingFactorUnset && !computeLaplacianOperator); + +unsigned[2] JS ; +unsigned[2] KS ; +unsigned[2] MS ; + +alias subSetJ=JS ; +alias subSetK=KS ; +alias subSetM=MS ; + +unsigned[4] TS ; + +meta _TS spectral_truncation(JS,KS,MS,TS) : read_only,hidden; + +# This is read_only until we support other values +codetable[1] unpackedSubsetPrecision ('5.7.table',masterDir,localDir) = 1 : dump; + +alias precisionOfTheUnpackedSubset=unpackedSubsetPrecision; diff --git a/definitions/grib2/template.5.6.def b/definitions/grib2/template.5.6.def new file mode 100644 index 000000000..d12b4197e --- /dev/null +++ b/definitions/grib2/template.5.6.def @@ -0,0 +1,19 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "grib 2 Section 5 template 5.6"; +# START 2/template.5.6 ---------------------------------------------------------------------- +# Grid point data - Simple packing with preprocessing + +include "template.5.packing.def"; + +codetable[1] typeOfPreProcessing ('5.9.table',masterDir,localDir) :edition_specific; +ieeefloat preProcessingParameter : read_only; + +# END 2/template.5.6 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.5.61.def b/definitions/grib2/template.5.61.def new file mode 100644 index 000000000..4e0cd00ee --- /dev/null +++ b/definitions/grib2/template.5.61.def @@ -0,0 +1,19 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +label "grib 2 Section 5 template 5.61"; +# START 2/template.5.61 ---------------------------------------------------------------------- +# Grid point data - Simple packing with logarithmic preprocessing +constant typeOfPreProcessing=1; + +include "template.5.packing.def"; + +ieeefloat preProcessingParameter : read_only; + +# END 2/template.5.61 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.5.original_values.def b/definitions/grib2/template.5.original_values.def new file mode 100644 index 000000000..16834d1ba --- /dev/null +++ b/definitions/grib2/template.5.original_values.def @@ -0,0 +1,11 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Type of original field values +codetable[1] typeOfOriginalFieldValues ('5.1.table',masterDir,localDir) = 0; # Default set to floating diff --git a/definitions/grib2/template.5.packing.def b/definitions/grib2/template.5.packing.def new file mode 100755 index 000000000..c8993e36e --- /dev/null +++ b/definitions/grib2/template.5.packing.def @@ -0,0 +1,29 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# Reference value (R) +# The copy_ok means that the value is copied when changing the representation +# e.g. from jpeg to simple packing. +ieeefloat referenceValue : read_only, copy_ok; +meta referenceValueError reference_value_error(referenceValue,ieee); + + +# Binary scale factor (E) +signed[2] binaryScaleFactor : read_only, copy_ok; + +# Decimal scale factor (D) +signed[2] decimalScaleFactor ; + + +# Number of bits used for each packed value for simple packing, or for each group reference value for complex packing or spatial differencing +unsigned[1] bitsPerValue; +alias numberOfBits = bitsPerValue; +alias numberOfBitsContainingEachPackedValue = bitsPerValue; + diff --git a/definitions/grib2/template.5.second_order.def b/definitions/grib2/template.5.second_order.def new file mode 100644 index 000000000..c5131da27 --- /dev/null +++ b/definitions/grib2/template.5.second_order.def @@ -0,0 +1,30 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +codetable[1] groupSplitting ('5.4.table',masterDir,localDir) = 1 ; #default general + +codetable[1] missingValueManagement ('5.5.table',masterDir,localDir) = 0; #default as grib1 + +unsigned[4] primaryMissingValue ; + +unsigned[4] secondaryMissingValue ; + +unsigned[4] numberOfGroups ; +alias NG = numberOfGroups; + +unsigned[1] referenceOfWidths ; +unsigned[1] widthOfWidths ; + +unsigned[4] referenceOfLengths ; +unsigned[1] incrementOfLengths ; + +unsigned[4] trueLengthOfLastGroup ; +unsigned[1] widthOfLengths ; + diff --git a/definitions/grib2/template.7.0.def b/definitions/grib2/template.7.0.def new file mode 100644 index 000000000..967dff619 --- /dev/null +++ b/definitions/grib2/template.7.0.def @@ -0,0 +1,41 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 2/template.7.0 ---------------------------------------------------------------------- +# TEMPLATE 7.0, Grid point data - simple packing +# Octets 6-nn : Binary data values - binary string, with each +# (scaled) + +meta codedValues data_g2simple_packing( + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor +): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; +meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; + +alias data.packedValues=codedValues; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib2/template.7.1.def b/definitions/grib2/template.7.1.def new file mode 100644 index 000000000..56bfc708d --- /dev/null +++ b/definitions/grib2/template.7.1.def @@ -0,0 +1,42 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 2/template.7.1 ---------------------------------------------------------------------- +# TEMPLATE 7.1, Matrix values at grid point -simple packing +# Octets 6-nn : Binary data values - binary string, with each +# (scaled) +# ???? data_values__binary_string_with_each + + meta codedValues data_g2simple_packing( + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor + ): read_only; + + meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; +meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; + +alias data.packedValues = codedValues; + +template statistics "common/statistics_grid.def"; \ No newline at end of file diff --git a/definitions/grib2/template.7.2.def b/definitions/grib2/template.7.2.def new file mode 100644 index 000000000..58d4ebb74 --- /dev/null +++ b/definitions/grib2/template.7.2.def @@ -0,0 +1,61 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.7.2 ---------------------------------------------------------------------- +# TEMPLATE 7.2, Grid point data - complex packing +# Octets 6-xx : NG group reference values +# (XI in the decoding formula) + +position offsetBeforeData; + +constant orderOfSpatialDifferencing = 0; +constant numberOfOctetsExtraDescriptors = 0; + +meta codedValues data_g22order_packing( + section7Length, + offsetBeforeData, + offsetSection7, + + + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + typeOfOriginalFieldValues , + groupSplittingMethodUsed, + missingValueManagementUsed , + primaryMissingValueSubstitute , + secondaryMissingValueSubstitute , + numberOfGroupsOfDataValues , + referenceForGroupWidths , + numberOfBitsUsedForTheGroupWidths , + referenceForGroupLengths , + lengthIncrementForTheGroupLengths, + trueLengthOfLastGroup , + numberOfBitsForScaledGroupLengths, + orderOfSpatialDifferencing, + numberOfOctetsExtraDescriptors + +): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +alias data.packedValues = codedValues; + +template statistics "common/statistics_grid.def"; + +# END 2/template.7.2 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.7.3.def b/definitions/grib2/template.7.3.def new file mode 100644 index 000000000..6d5f774ad --- /dev/null +++ b/definitions/grib2/template.7.3.def @@ -0,0 +1,59 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.7.3 ---------------------------------------------------------------------- +# TEMPLATE 7.3, Grid point data - complex packing and spatial differencing +# Octets 6-ww : First value(s) of original +# (undifferenced) +# NOTE 1 NOT FOUND +# ???? first_value_s_of_original + +position offsetBeforeData; + +meta codedValues data_g22order_packing( + section7Length, + offsetBeforeData, + offsetSection7, + + + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + typeOfOriginalFieldValues , + groupSplittingMethodUsed, + missingValueManagementUsed , + primaryMissingValueSubstitute , + secondaryMissingValueSubstitute , + numberOfGroupsOfDataValues , + referenceForGroupWidths , + numberOfBitsUsedForTheGroupWidths , + referenceForGroupLengths , + lengthIncrementForTheGroupLengths, + trueLengthOfLastGroup , + numberOfBitsForScaledGroupLengths, + orderOfSpatialDifferencing, + numberOfOctetsExtraDescriptors + +): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +alias data.packedValues=codedValues; + +template statistics "common/statistics_grid.def"; + diff --git a/definitions/grib2/template.7.4.def b/definitions/grib2/template.7.4.def new file mode 100644 index 000000000..8944fda9d --- /dev/null +++ b/definitions/grib2/template.7.4.def @@ -0,0 +1,33 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 2/template.7.4 ---------------------------------------------------------------------- +# TEMPLATE 7.4, Grid point data - simple packing +# Octets 6-nn : Binary data values - binary string, with each +# (scaled) +# ???? data_values__binary_string_with_each + +meta codedValues data_raw_packing( + section7Length, + offsetBeforeData, + offsetSection7, + numberOfValues, + precision + ): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +alias data.packedValues = codedValues; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib2/template.7.40.def b/definitions/grib2/template.7.40.def new file mode 100644 index 000000000..46e208131 --- /dev/null +++ b/definitions/grib2/template.7.40.def @@ -0,0 +1,60 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.7.40 ---------------------------------------------------------------------- +# TEMPLATE 7.40, Grid point data - jpeg2000 +# Octets 6-xx : NG group reference values +# (XI in the decoding formula) +# ???? ng_group_reference_values + + meta codedValues data_jpeg2000_packing( + + section7Length, + offsetBeforeData, + offsetSection7, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + #numberOfValues, + #referenceValue, + #binaryScaleFactor, + #decimalScaleFactor, + #bitsPerValue, + + # For encoding + + typeOfCompressionUsed, + targetCompressionRatio, + Nx, + Ny, + interpretationOfNumberOfPoints, + numberOfDataPoints, + scanningMode + + + ): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +alias data.packedValues = codedValues; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib2/template.7.40000.def b/definitions/grib2/template.7.40000.def new file mode 100644 index 000000000..b164706ae --- /dev/null +++ b/definitions/grib2/template.7.40000.def @@ -0,0 +1,10 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +include "template.7.40.def" \ No newline at end of file diff --git a/definitions/grib2/template.7.40010.def b/definitions/grib2/template.7.40010.def new file mode 100644 index 000000000..8b9c30f40 --- /dev/null +++ b/definitions/grib2/template.7.40010.def @@ -0,0 +1,10 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +include "template.7.41.def" \ No newline at end of file diff --git a/definitions/grib2/template.7.41.def b/definitions/grib2/template.7.41.def new file mode 100644 index 000000000..92f43ffeb --- /dev/null +++ b/definitions/grib2/template.7.41.def @@ -0,0 +1,43 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.7.41 ---------------------------------------------------------------------- +# TEMPLATE 7.41, Grid point data - png + + meta codedValues data_png_packing( + section7Length, + offsetBeforeData, + offsetSection7, + numberOfValues, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + bitsPerValue, + + # For encoding + + Nx, + Ny, + + interpretationOfNumberOfPoints, + numberOfDataPoints, + scanningMode + ): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +alias data.packedValues = codedValues; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib2/template.7.42.def b/definitions/grib2/template.7.42.def new file mode 100644 index 000000000..6e2467484 --- /dev/null +++ b/definitions/grib2/template.7.42.def @@ -0,0 +1,42 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.7.42 ---------------------------------------------------------------------- +# TEMPLATE 7.42, Grid point data - CCSDS szip + + meta codedValues data_szip_packing( + section7Length, + offsetBeforeData, + offsetSection7, + numberOfValues, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + bitsPerValue, + + numberOfDataPoints, + + szipOptionsMask, + szipBitsPerPixel, + szipPixelPerBlock, + szipPixelPerScanLine + + ): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +alias data.packedValues = codedValues; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib2/template.7.50.def b/definitions/grib2/template.7.50.def new file mode 100644 index 000000000..29d06bb48 --- /dev/null +++ b/definitions/grib2/template.7.50.def @@ -0,0 +1,50 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.7.50 ---------------------------------------------------------------------- +# TEMPLATE 7.50, Spectral data - simple packing +# Octets 6-nn : Binary data values - binary string, with each +# (scaled) + +transient numberOfValues = ( J + 1 ) * ( J + 2 ) : no_copy ; +transient numberOfPackedValues = numberOfValues - 1 : no_copy; + +transient numberOfValues = ( J + 1 ) * ( J + 2 ) : no_copy ; +transient numberOfPackedValues = numberOfValues - 1 : no_copy; + + meta codedValues data_g2simple_packing( + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfPackedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor + ) : read_only; + + + + meta values data_g2shsimple_packing( + codedValues, + realPartOf00, + numberOfValues + ) ; + + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; +meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; + +alias x.packedValues = values; + +template statistics "common/statistics_spectral.def"; diff --git a/definitions/grib2/template.7.50000.def b/definitions/grib2/template.7.50000.def new file mode 100644 index 000000000..0f8fceab1 --- /dev/null +++ b/definitions/grib2/template.7.50000.def @@ -0,0 +1,113 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +constant GRIBEXShBugPresent = 0; +constant sphericalHarmonics = 1; +constant complexPacking = 1; + +meta codedValues data_g2complex_packing( + section7Length, + offsetBeforeData, + offsetSection7, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + unpackedSubsetPrecision, + + laplacianOperatorIsSet, + laplacianOperator, + + J, + K, + M, + + J, + J, + J, + + numberOfValues + ): read_only; + + meta data.packedValues data_sh_packed( + section7Length, + offsetBeforeData, + offsetSection7, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + unpackedSubsetPrecision, + + laplacianOperatorIsSet, + laplacianOperator, + + J, + K, + M, + + J, + J, + J + ) : read_only; + + meta data.unpackedValues data_sh_unpacked( + section7Length, + offsetBeforeData, + offsetSection7, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + unpackedSubsetPrecision, + + laplacianOperatorIsSet, + laplacianOperator, + + J, + K, + M, + + J, + K, + M + ) : read_only; + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; +meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +template statistics "common/statistics_spectral.def"; diff --git a/definitions/grib2/template.7.50001.def b/definitions/grib2/template.7.50001.def new file mode 100644 index 000000000..7327170f2 --- /dev/null +++ b/definitions/grib2/template.7.50001.def @@ -0,0 +1,105 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +if (bitsPerValue) { +meta groupWidths unsigned_bits(widthOfWidths,numberOfGroups) : read_only; +meta groupLengths unsigned_bits(widthOfLengths,numberOfGroups) : read_only; +meta firstOrderValues unsigned_bits(widthOfFirstOrderValues,numberOfGroups) : read_only; +meta countOfGroupLengths sum(groupLengths); +} +transient halfByte=0; + +position offsetBeforeData; + +if(bitmapPresent) { + meta codedValues data_g1second_order_general_extended_packing( + #simple_packing args + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + firstOrderValues, + N1, + N2, + numberOfGroups, + numberOfGroups, + numberOfSecondOrderPackedValues, + keyNotPresent, + groupWidths, + widthOfWidths, + groupLengths, + widthOfLengths, + NL, + SPD, + widthOfSPD, + orderOfSPD, + numberOfPoints + + ): read_only; + alias data.packedValues = codedValues; + + meta values data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : dump; +} else { + meta values data_g1second_order_general_extended_packing( + #simple_packing args + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + firstOrderValues, + N1, + N2, + numberOfGroups, + numberOfGroups, + numberOfSecondOrderPackedValues, + keyNotPresent, + groupWidths, + widthOfWidths, + groupLengths, + widthOfLengths, + NL, + SPD, + widthOfSPD, + orderOfSPD, + numberOfPoints + + ) : dump; + alias codedValues=values; + alias data.packedValues = values; +} + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib2/template.7.50002.def b/definitions/grib2/template.7.50002.def new file mode 100644 index 000000000..01ef19df5 --- /dev/null +++ b/definitions/grib2/template.7.50002.def @@ -0,0 +1,152 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +meta groupWidths unsigned_bits(widthOfWidths,numberOfGroups) : read_only; +meta groupLengths unsigned_bits(widthOfLengths,numberOfGroups) : read_only; +meta firstOrderValues unsigned_bits(widthOfFirstOrderValues,numberOfGroups) : read_only; +meta countOfGroupLengths sum(groupLengths); +transient halfByte=0; + +position offsetBeforeData; + +if(bitmapPresent) { + meta codedValues data_g1second_order_general_extended_packing( + #simple_packing args + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + firstOrderValues, + N1, + N2, + numberOfGroups, + numberOfGroups, + numberOfSecondOrderPackedValues, + keyNotPresent, + groupWidths, + widthOfWidths, + groupLengths, + widthOfLengths, + NL, + SPD, + widthOfSPD, + orderOfSPD, + numberOfPoints + + ): read_only; + alias data.packedValues = codedValues; + + if (boustrophedonicOrdering) { + meta preBitmapValues data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : read_only; + meta values data_apply_boustrophedonic(preBitmapValues,numberOfRows,numberOfColumns,numberOfPoints,pl) : dump; + } else { + meta values data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : dump; + } + +} else { + if (boustrophedonicOrdering) { + meta codedValues data_g1second_order_general_extended_packing( + #simple_packing args + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + firstOrderValues, + N1, + N2, + numberOfGroups, + numberOfGroups, + numberOfSecondOrderPackedValues, + keyNotPresent, + groupWidths, + widthOfWidths, + groupLengths, + widthOfLengths, + NL, + SPD, + widthOfSPD, + orderOfSPD, + numberOfPoints + + ) : dump; + + meta values data_apply_boustrophedonic(codedValues,numberOfRows,numberOfColumns,numberOfPoints,pl) : dump; + + } else { + meta values data_g1second_order_general_extended_packing( + #simple_packing args + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g1second_order_row_by_row args + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + firstOrderValues, + N1, + N2, + numberOfGroups, + numberOfGroups, + numberOfSecondOrderPackedValues, + keyNotPresent, + groupWidths, + widthOfWidths, + groupLengths, + widthOfLengths, + NL, + SPD, + widthOfSPD, + orderOfSPD, + numberOfPoints + + ) : dump; + alias codedValues=values; + } + alias data.packedValues = values; +} + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib2/template.7.51.def b/definitions/grib2/template.7.51.def new file mode 100644 index 000000000..2521ef50f --- /dev/null +++ b/definitions/grib2/template.7.51.def @@ -0,0 +1,118 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# TEMPLATE 7.51, Spherical harmonics - complex packing +# Octets 6-(5+I*TS) : Data values from the unpacked subset +# (IEEE floating-point values on I octets) +# ???? data_values_from_the_unpacked_subset + +constant GRIBEXShBugPresent = 0; +constant sphericalHarmonics = 1; +constant complexPacking = 1; + +meta codedValues data_g2complex_packing( + section7Length, + offsetBeforeData, + offsetSection7, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + unpackedSubsetPrecision, + + laplacianOperatorIsSet, + laplacianOperator, + + subSetJ, + subSetK, + subSetM, + + pentagonalResolutionParameterJ, + pentagonalResolutionParameterK, + pentagonalResolutionParameterM, + + numberOfValues + ): read_only; + + meta data.packedValues data_sh_packed( + section7Length, + offsetBeforeData, + offsetSection7, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + unpackedSubsetPrecision, + + laplacianOperatorIsSet, + laplacianOperator, + + subSetJ, + subSetK, + subSetM, + + pentagonalResolutionParameterJ, + pentagonalResolutionParameterK, + pentagonalResolutionParameterM + ) : read_only; + + meta data.unpackedValues data_sh_unpacked( + section7Length, + offsetBeforeData, + offsetSection7, + + unitsFactor, + unitsBias, + changingPrecision, + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + + GRIBEXShBugPresent, + unpackedSubsetPrecision, + + laplacianOperatorIsSet, + laplacianOperator, + + subSetJ, + subSetK, + subSetM, + + pentagonalResolutionParameterJ, + pentagonalResolutionParameterK, + pentagonalResolutionParameterM + ) : read_only; + +meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; +meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFactor,referenceValue,ieee) : no_copy; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +template statistics "common/statistics_spectral.def"; diff --git a/definitions/grib2/template.7.6.def b/definitions/grib2/template.7.6.def new file mode 100644 index 000000000..1b4405332 --- /dev/null +++ b/definitions/grib2/template.7.6.def @@ -0,0 +1,41 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 2/template.7.6 ---------------------------------------------------------------------- +# TEMPLATE 7.6, Grid point data - simple packing with preprocessing +# Octets 6-nn : Binary data values - binary string, with each +# (scaled) +# ???? data_values__binary_string_with_each + + meta codedValues data_g2simple_packing_with_preprocessing( + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + typeOfPreProcessing, + preProcessingParameter + ): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +alias data.packedValues = codedValues; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib2/template.7.61.def b/definitions/grib2/template.7.61.def new file mode 100644 index 000000000..1b4405332 --- /dev/null +++ b/definitions/grib2/template.7.61.def @@ -0,0 +1,41 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# START 2/template.7.6 ---------------------------------------------------------------------- +# TEMPLATE 7.6, Grid point data - simple packing with preprocessing +# Octets 6-nn : Binary data values - binary string, with each +# (scaled) +# ???? data_values__binary_string_with_each + + meta codedValues data_g2simple_packing_with_preprocessing( + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + typeOfPreProcessing, + preProcessingParameter + ): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +alias data.packedValues = codedValues; + +template statistics "common/statistics_grid.def"; diff --git a/definitions/grib2/template.7.second_order.def b/definitions/grib2/template.7.second_order.def new file mode 100644 index 000000000..4f414d9aa --- /dev/null +++ b/definitions/grib2/template.7.second_order.def @@ -0,0 +1,67 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +# START 2/template.7.2 ---------------------------------------------------------------------- +# TEMPLATE 7.2, Grid point data - complex packing + +position offsetBeforeData; + +constant orderOfSpatialDifferencing = 0; +constant numberOfOctetsExtraDescriptors = 0; + +meta codedValues data_g2second_order_packing( + section7Length, + offsetBeforeData, + offsetSection7, + unitsFactor, + unitsBias, + changingPrecision, + numberOfCodedValues, + bitsPerValue, + referenceValue, + binaryScaleFactor, + decimalScaleFactor, + #g2second_order_packing + halfByte, + packingType, + grid_ieee, + precision, + widthOfFirstOrderValues, + firstOrderValues, + N1, + N2, + numberOfGroups, + codedNumberOfGroups, + numberOfSecondOrderPackedValues, + extraValues, + groupWidths, + widthOfWidths, + groupLengths, + widthOfLengths, + NL, + SPD, + widthOfSPD, + orderOfSPD, + numberOfPoints + +): read_only; + +meta values data_apply_bitmap(codedValues, + bitmap, + missingValue, + binaryScaleFactor, + numberOfDataPoints, + numberOfValues) : dump; + +alias data.packedValues = codedValues; + +template statistics "common/statistics_grid.def"; + +# END 2/template.7.2 ---------------------------------------------------------------------- diff --git a/definitions/grib2/template.second_order.def b/definitions/grib2/template.second_order.def new file mode 100644 index 000000000..f9bf1abc1 --- /dev/null +++ b/definitions/grib2/template.second_order.def @@ -0,0 +1 @@ +#TODO diff --git a/definitions/grib2/tiggeLocalVersion.table b/definitions/grib2/tiggeLocalVersion.table new file mode 100644 index 000000000..c5bbcd233 --- /dev/null +++ b/definitions/grib2/tiggeLocalVersion.table @@ -0,0 +1 @@ +1 TIGGE-LAM TIGGE LAM diff --git a/definitions/grib2/tigge_name.def b/definitions/grib2/tigge_name.def new file mode 100644 index 000000000..76fbb84b5 --- /dev/null +++ b/definitions/grib2/tigge_name.def @@ -0,0 +1,45 @@ +# Automatically generated by ./tigge_def.pl, do not edit + + '10_meter_u_velocity' = { parameter = 165; } + '10_meter_v_velocity' = { parameter = 166; } + '10_metre_wind_gust_of_at_least_15_m/s' = { parameter = 131070; } + '10_metre_wind_gust_of_at_least_25_m/s' = { parameter = 131071; } + 'convective_available_potential_energy' = { parameter = 59; } + 'convective_inhibition' = { parameter = 228001; } + 'field_capacity' = { parameter = 228170; } + 'geopotential_height' = { parameter = 156; } + 'land_sea_mask' = { parameter = 172; } + 'maximum_wind_gust' = { parameter = 49; } + 'mean_sea_level_pressure' = { parameter = 151; } + 'orography' = { parameter = 228002; } + 'potential_temperature' = { parameter = 3; } + 'potential_vorticity' = { parameter = 60; } + 'sea_surface_temperature_anomaly' = { parameter = 171034; } + 'skin_temperature' = { parameter = 235; } + 'snow_depth_water_equivalent' = { parameter = 228141; } + 'snow_fall_water_equivalent' = { parameter = 228144; } + 'soil_moisture' = { parameter = 228039; } + 'soil_temperature' = { parameter = 228139; } + 'specific_humidity' = { parameter = 133; } + 'sunshine_duration' = { parameter = 189; } + 'surface_air_dew_point_temperature' = { parameter = 168; } + 'surface_air_maximum_temperature' = { parameter = 121; } + 'surface_air_minimum_temperature' = { parameter = 122; } + 'surface_air_temperature' = { parameter = 167; } + 'surface_pressure' = { parameter = 134; } + 'temperature' = { parameter = 130; } + 'time_integrated_outgoing_long_wave_radiation' = { parameter = 179; } + 'time_integrated_surface_latent_heat_flux' = { parameter = 147; } + 'time_integrated_surface_net_solar_radiation' = { parameter = 176; } + 'time_integrated_surface_net_thermal_radiation' = { parameter = 177; } + 'time_integrated_surface_sensible_heat_flux' = { parameter = 146; } + 'total_cloud_cover' = { parameter = 228164; } + 'total_column_water' = { parameter = 136; } + 'total_precipitation' = { parameter = 228228; } + 'total_precipitation_of_at_least_10_mm' = { parameter = 131062; } + 'total_precipitation_of_at_least_20_mm' = { parameter = 131063; } + 'u_velocity' = { parameter = 131; } + 'v_velocity' = { parameter = 132; } + 'wilting_point' = { parameter = 228171; } + 'default' = { parameter = 99999; } + diff --git a/definitions/grib2/tigge_parameter.def b/definitions/grib2/tigge_parameter.def new file mode 100644 index 000000000..c7ae282a7 --- /dev/null +++ b/definitions/grib2/tigge_parameter.def @@ -0,0 +1,396 @@ +# Automatically generated by ./tigge_def.pl, do not edit + +# 10_meter_u_velocity + '165' = { + discipline = 0; + parameterCategory = 2; + parameterNumber = 2; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 10; + typeOfFirstFixedSurface = 103; + } + +# 10_meter_v_velocity + '166' = { + discipline = 0; + parameterCategory = 2; + parameterNumber = 3; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 10; + typeOfFirstFixedSurface = 103; + } + +# 10_metre_wind_gust_of_at_least_15_m/s + '131070' = { + discipline = 0; + parameterCategory = 2; + parameterNumber = 22; + productDefinitionTemplateNumber = 9; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 10; + scaledValueOfLowerLimit = 15; + typeOfFirstFixedSurface = 103; + typeOfStatisticalProcessing = 2; + } + +# 10_metre_wind_gust_of_at_least_25_m/s + '131071' = { + discipline = 0; + parameterCategory = 2; + parameterNumber = 22; + productDefinitionTemplateNumber = 9; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 10; + scaledValueOfLowerLimit = 25; + typeOfFirstFixedSurface = 103; + typeOfStatisticalProcessing = 2; + } + +# convective_available_potential_energy + '59' = { + discipline = 0; + parameterCategory = 7; + parameterNumber = 6; + typeOfFirstFixedSurface = 1; + typeOfSecondFixedSurface = 8; + } + +# convective_inhibition + '228001' = { + discipline = 0; + parameterCategory = 7; + parameterNumber = 7; + typeOfFirstFixedSurface = 1; + typeOfSecondFixedSurface = 8; + } + +# field_capacity + '228170' = { + discipline = 2; + parameterCategory = 3; + parameterNumber = 12; + scaleFactorOfFirstFixedSurface = 0; + scaleFactorOfSecondFixedSurface = 1; + scaledValueOfFirstFixedSurface = 0; + scaledValueOfSecondFixedSurface = 2; + typeOfFirstFixedSurface = 106; + typeOfSecondFixedSurface = 106; + } + +# geopotential_height + '156' = { + discipline = 0; + parameterCategory = 3; + parameterNumber = 5; + typeOfFirstFixedSurface = 100; + } + +# land_sea_mask + '172' = { + discipline = 2; + parameterCategory = 0; + parameterNumber = 0; + typeOfFirstFixedSurface = 1; + } + +# maximum_wind_gust + '49' = { + discipline = 0; + parameterCategory = 2; + parameterNumber = 22; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 10; + typeOfFirstFixedSurface = 103; + typeOfStatisticalProcessing = 2; + } + +# mean_sea_level_pressure + '151' = { + discipline = 0; + parameterCategory = 3; + parameterNumber = 0; + typeOfFirstFixedSurface = 101; + } + +# orography + '228002' = { + discipline = 0; + parameterCategory = 3; + parameterNumber = 5; + typeOfFirstFixedSurface = 1; + } + +# potential_temperature + '3' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 2; + scaleFactorOfFirstFixedSurface = 6; + scaledValueOfFirstFixedSurface = 2; + typeOfFirstFixedSurface = 109; + } + +# potential_vorticity + '60' = { + discipline = 0; + parameterCategory = 2; + parameterNumber = 14; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 320; + typeOfFirstFixedSurface = 107; + } + +# sea_surface_temperature_anomaly + '171034' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 9; + typeOfFirstFixedSurface = 1; + } + +# skin_temperature + '235' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 17; + typeOfFirstFixedSurface = 1; + } + +# snow_depth_water_equivalent + '228141' = { + discipline = 0; + parameterCategory = 1; + parameterNumber = 60; + typeOfFirstFixedSurface = 1; + } + +# snow_fall_water_equivalent + '228144' = { + discipline = 0; + parameterCategory = 1; + parameterNumber = 53; + typeOfFirstFixedSurface = 1; + typeOfStatisticalProcessing = 1; + } + +# soil_moisture + '228039' = { + discipline = 2; + parameterCategory = 0; + parameterNumber = 22; + scaleFactorOfFirstFixedSurface = 0; + scaleFactorOfSecondFixedSurface = 1; + scaledValueOfFirstFixedSurface = 0; + scaledValueOfSecondFixedSurface = 2; + typeOfFirstFixedSurface = 106; + typeOfSecondFixedSurface = 106; + } + +# soil_temperature + '228139' = { + discipline = 2; + parameterCategory = 0; + parameterNumber = 2; + scaleFactorOfFirstFixedSurface = 0; + scaleFactorOfSecondFixedSurface = 1; + scaledValueOfFirstFixedSurface = 0; + scaledValueOfSecondFixedSurface = 2; + typeOfFirstFixedSurface = 106; + typeOfSecondFixedSurface = 106; + } + +# specific_humidity + '133' = { + discipline = 0; + parameterCategory = 1; + parameterNumber = 0; + typeOfFirstFixedSurface = 100; + } + +# sunshine_duration + '189' = { + discipline = 0; + parameterCategory = 6; + parameterNumber = 24; + typeOfFirstFixedSurface = 1; + typeOfStatisticalProcessing = 1; + } + +# surface_air_dew_point_temperature + '168' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 6; + typeOfFirstFixedSurface = 103; + } + +# surface_air_maximum_temperature + '121' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 0; + typeOfFirstFixedSurface = 103; + typeOfStatisticalProcessing = 2; + } + +# surface_air_minimum_temperature + '122' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 0; + typeOfFirstFixedSurface = 103; + typeOfStatisticalProcessing = 3; + } + +# surface_air_temperature + '167' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 0; + typeOfFirstFixedSurface = 103; + } + +# surface_pressure + '134' = { + discipline = 0; + parameterCategory = 3; + parameterNumber = 0; + typeOfFirstFixedSurface = 1; + } + +# temperature + '130' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 0; + typeOfFirstFixedSurface = 100; + } + +# time_integrated_outgoing_long_wave_radiation + '179' = { + discipline = 0; + parameterCategory = 5; + parameterNumber = 5; + typeOfFirstFixedSurface = 8; + typeOfStatisticalProcessing = 1; + } + +# time_integrated_surface_latent_heat_flux + '147' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 10; + typeOfFirstFixedSurface = 1; + typeOfStatisticalProcessing = 1; + } + +# time_integrated_surface_net_solar_radiation + '176' = { + discipline = 0; + parameterCategory = 4; + parameterNumber = 9; + typeOfFirstFixedSurface = 1; + typeOfStatisticalProcessing = 1; + } + +# time_integrated_surface_net_thermal_radiation + '177' = { + discipline = 0; + parameterCategory = 5; + parameterNumber = 5; + typeOfFirstFixedSurface = 1; + typeOfStatisticalProcessing = 1; + } + +# time_integrated_surface_sensible_heat_flux + '146' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 11; + typeOfFirstFixedSurface = 1; + typeOfStatisticalProcessing = 1; + } + +# total_cloud_cover + '228164' = { + discipline = 0; + parameterCategory = 6; + parameterNumber = 1; + typeOfFirstFixedSurface = 1; + typeOfSecondFixedSurface = 8; + } + +# total_column_water + '136' = { + discipline = 0; + parameterCategory = 1; + parameterNumber = 51; + typeOfFirstFixedSurface = 1; + typeOfSecondFixedSurface = 8; + } + +# total_precipitation + '228228' = { + discipline = 0; + parameterCategory = 1; + parameterNumber = 52; + typeOfFirstFixedSurface = 1; + typeOfStatisticalProcessing = 1; + } + +# total_precipitation_of_at_least_10_mm + '131062' = { + discipline = 0; + parameterCategory = 1; + parameterNumber = 52; + productDefinitionTemplateNumber = 9; + scaledValueOfLowerLimit = 10; + typeOfFirstFixedSurface = 1; + typeOfStatisticalProcessing = 1; + } + +# total_precipitation_of_at_least_20_mm + '131063' = { + discipline = 0; + parameterCategory = 1; + parameterNumber = 52; + productDefinitionTemplateNumber = 9; + scaledValueOfLowerLimit = 20; + typeOfFirstFixedSurface = 1; + typeOfStatisticalProcessing = 1; + } + +# u_velocity + '131' = { + discipline = 0; + parameterCategory = 2; + parameterNumber = 2; + } + +# unknown + 'default' = { + discipline = 0; + parameterCategory = 0; + parameterNumber = 0; + } + +# v_velocity + '132' = { + discipline = 0; + parameterCategory = 2; + parameterNumber = 3; + } + +# wilting_point + '228171' = { + discipline = 2; + parameterCategory = 0; + parameterNumber = 26; + scaleFactorOfFirstFixedSurface = 0; + scaleFactorOfSecondFixedSurface = 1; + scaledValueOfFirstFixedSurface = 0; + scaledValueOfSecondFixedSurface = 2; + typeOfFirstFixedSurface = 106; + typeOfSecondFixedSurface = 106; + } + diff --git a/definitions/grib2/tigge_short_name.def b/definitions/grib2/tigge_short_name.def new file mode 100644 index 000000000..42ef5c6ea --- /dev/null +++ b/definitions/grib2/tigge_short_name.def @@ -0,0 +1,44 @@ +# Automatically generated by ./tigge_def.pl, do not edit + + '10fgg25' = { parameter = 131071; } + '10fgg15' = { parameter = 131070; } + '10v' = { parameter = 166; } + '10u' = { parameter = 165; } + '10u' = { parameter = 49; } + 'ci' = { parameter = 228001; } + 'cap' = { parameter = 228170; } + 'cape' = { parameter = 59; } + 'gh' = { parameter = 156; } + 'lsm' = { parameter = 172; } + 'msl' = { parameter = 151; } + 'orog' = { parameter = 228002; } + 'sd' = { parameter = 228141; } + 'mx2t6' = { parameter = 121; } + '2d' = { parameter = 168; } + 'pv' = { parameter = 60; } + 'pt' = { parameter = 3; } + 'sf' = { parameter = 228144; } + 'skt' = { parameter = 235; } + 'sm' = { parameter = 228039; } + 'str' = { parameter = 177; } + 'sund' = { parameter = 189; } + 'mn2t6' = { parameter = 122; } + 'q' = { parameter = 133; } + 'ssta' = { parameter = 171034; } + '2t' = { parameter = 167; } + 'tcw' = { parameter = 136; } + 'slhf' = { parameter = 147; } + 'st' = { parameter = 228139; } + 'sshf' = { parameter = 146; } + 'sp' = { parameter = 134; } + 't' = { parameter = 130; } + 'tcc' = { parameter = 228164; } + 'ssr' = { parameter = 176; } + 'tpg10' = { parameter = 131062; } + 'tpg20' = { parameter = 131063; } + 'ttr' = { parameter = 179; } + 'tp' = { parameter = 228228; } + 'u' = { parameter = 131; } + 'v' = { parameter = 132; } + 'wilt' = { parameter = 228171; } + 'default' = { parameter = 99999; } diff --git a/definitions/grib2/tigge_suiteName.table b/definitions/grib2/tigge_suiteName.table new file mode 100644 index 000000000..845fbc89e --- /dev/null +++ b/definitions/grib2/tigge_suiteName.table @@ -0,0 +1,13 @@ +0 unknown unknown +1 MOGREPS-MO-EUA MOGREPS-MO-EUA +2 AEMet-SREPS-MM-EUAT AEMet-SREPS-MM-EUAT +3 SRNWP-PEPS SRNWP-PEPS +4 COSMOLEPS-ARPASIMC-EU COSMOLEPS-ARPASIMC-EU +5 NORLAMEPS NORLAMEPS +6 ALADIN-LAEF ALADIN-LAEF +7 COSMO-DE-EPS COSMO-DE-EPS +8 COSMO-SREPS-BO-EU COSMO-SREPS-BO-EU +9 GLAMEPS GLAMEPS +10 PEARCE PEARCE +11 DMI-HIRLAM DMI-HIRLAM +12 OMSZ-ALADIN-EPS OMSZ-ALADIN-EPS diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def new file mode 100644 index 000000000..91f6982bb --- /dev/null +++ b/definitions/grib2/units.def @@ -0,0 +1,2246 @@ +# Automatically generated by create_def.pl from database param@wrep-db-misc-prod, do not edit +#10 metre wind gust in the last 3 hours +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfStatisticalProcessing = 2 ; + } +#Cloudy brightness temperature +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + } +#Clear-sky brightness temperature +'K' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + } +#Virtual temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Pseudo-adiabatic potential temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Total precipitation of at least 10 mm +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + probabilityType = 3 ; + typeOfStatisticalProcessing = 1 ; + scaledValueOfLowerLimit = 10 ; + productDefinitionTemplateNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + scaleFactorOfLowerLimit = 0 ; + } +#Total precipitation of at least 20 mm +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + scaledValueOfLowerLimit = 20 ; + scaleFactorOfLowerLimit = 0 ; + typeOfFirstFixedSurface = 1 ; + probabilityType = 3 ; + typeOfStatisticalProcessing = 1 ; + productDefinitionTemplateNumber = 9 ; + } +#Stream function +'m**2 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 4 ; + } +#Velocity potential +'m**2 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + } +#Potential temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Wind speed +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + } +#Pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Convective available potential energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 6 ; + typeOfSecondFixedSurface = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Potential vorticity +'K m**2 kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 14 ; + } +#Maximum temperature at 2 metres in the last 6 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + typeOfStatisticalProcessing = 2 ; + } +#Minimum temperature at 2 metres in the last 6 hours +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfStatisticalProcessing = 3 ; + typeOfFirstFixedSurface = 103 ; + } +#Geopotential +'m**2 s**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#U component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#V component of wind +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#Specific humidity +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + } +#Surface pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Vertical velocity +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Total column water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + typeOfFirstFixedSurface = 1 ; + typeOfSecondFixedSurface = 8 ; + } +#Vorticity (relative) +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 12 ; + } +#Boundary layer dissipation +'J m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 20 ; + } +#Surface sensible heat flux +'J m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface latent heat flux +'J m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Mean sea level pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 101 ; + } +#Divergence +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 13 ; + } +#Geopotential Height +'gpm' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + } +#Relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#10 metre U wind component +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + } +#10 metre V wind component +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + } +#2 metre temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#2 metre dewpoint temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + typeOfFirstFixedSurface = 103 ; + } +#Land-sea mask +'(0 - 1)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + typeOfFirstFixedSurface = 1 ; + } +#Surface roughness +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Surface net solar radiation +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Surface net thermal radiation +'J m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Top net thermal radiation +'J m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 8 ; + } +#Sunshine duration +'s' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + typeOfStatisticalProcessing = 1 ; + typeOfFirstFixedSurface = 1 ; + } +#Brightness temperature +'K' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 4 ; + } +#10 metre wind speed +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + scaledValueOfFirstFixedSurface = 10 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfFirstFixedSurface = 103 ; + } +#Skin temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 17 ; + typeOfFirstFixedSurface = 1 ; + } +#large scale precipitation +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Latent heat net flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + } +#Sensible heat net flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + } +#Heat index +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 12 ; + } +#Wind chill factor +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + } +#Minimum dew point depression +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Snow phase change heat flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + } +#Vapor pressure +'Pa' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 4 ; + } +#Large scale precipitation (non-convective) +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 9 ; + } +#Snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 12 ; + } +#Convective snow +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 14 ; + } +#Large scale snow +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 15 ; + } +#Snow age +'day' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 17 ; + } +#Absolute humidity +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 18 ; + } +#Precipitation type +'code table (4.201)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 19 ; + } +#Integrated liquid water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 20 ; + } +#Condensate +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 21 ; + } +#Cloud mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 22 ; + } +#Ice water mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 23 ; + } +#Rain mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 24 ; + } +#Snow mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 25 ; + } +#Horizontal moisture convergence +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 26 ; + } +#Maximum relative humidity +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 27 ; + } +#Maximum absolute humidity +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 28 ; + } +#Total snowfall +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 29 ; + } +#Precipitable water category +'code table (4.202)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 30 ; + } +#Hail +'m' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 31 ; + } +#Graupel (snow pellets) +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 32 ; + } +#Categorical rain +'(Code table 4.222)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 33 ; + } +#Categorical freezing rain +'(Code table 4.222)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 34 ; + } +#Categorical ice pellets +'(Code table 4.222)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 35 ; + } +#Categorical snow +'(Code table 4.222)' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 36 ; + } +#Convective precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 37 ; + } +#Horizontal moisture divergence +'kg kg**-1 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 38 ; + } +#Percent frozen precipitation +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 39 ; + } +#Potential evaporation +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 40 ; + } +#Potential evaporation rate +'W m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 41 ; + } +#Snow cover +'%' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 42 ; + } +#Rain fraction of total cloud water +'Proportion' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 43 ; + } +#Rime factor +'Numeric' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 44 ; + } +#Total column integrated rain +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 45 ; + } +#Total column integrated snow +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 46 ; + } +#Large scale water precipitation (non-convective) +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 47 ; + } +#Convective water precipitation +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 48 ; + } +#Total water precipitation +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 49 ; + } +#Total snow precipitation +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 50 ; + } +#Total column water (Vertically integrated total water (vapour + cloud water/ice)) +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 51 ; + } +#Total precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + } +#Total snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + } +#Large scale precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 54 ; + } +#Convective snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 55 ; + } +#Large scale snowfall rate water equivalent +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 56 ; + } +#Total snowfall rate +'m s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 57 ; + } +#Convective snowfall rate +'m s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 58 ; + } +#Large scale snowfall rate +'m s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 59 ; + } +#Water equivalent of accumulated snow depth +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 13 ; + } +#Total column integrated water vapour +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 64 ; + } +#Rain precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 65 ; + } +#Snow precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 66 ; + } +#Freezing rain precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 67 ; + } +#Ice pellets precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 68 ; + } +#Momentum flux, u component +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 17 ; + } +#Momentum flux, v component +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 18 ; + } +#Maximum wind speed +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 21 ; + } +#Wind speed (gust) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + } +#u-component of wind (gust) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 23 ; + } +#v-component of wind (gust) +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 24 ; + } +#Vertical speed shear +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 25 ; + } +#Horizontal momentum flux +'N m**-2' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 26 ; + } +#U-component storm motion +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 27 ; + } +#V-component storm motion +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 28 ; + } +#Drag coefficient +'Numeric' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 29 ; + } +#Frictional velocity +'m s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 30 ; + } +#Pressure reduced to MSL +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + } +#Geometric height +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + } +#Altimeter setting +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 11 ; + } +#Thickness +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 12 ; + } +#Pressure altitude +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 13 ; + } +#Density altitude +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 14 ; + } +#5-wave geopotential height +'gpm' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 15 ; + } +#Zonal flux of gravity wave stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + } +#Meridional flux of gravity wave stress +'N m**-2' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + } +#Planetary boundary layer height +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 18 ; + } +#5-wave geopotential height anomaly +'gpm' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 19 ; + } +#Standard deviation of sub-grid scale orography +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 20 ; + } +#Net short-wave radiation flux (top of atmosphere) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 1 ; + } +#Downward short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 7 ; + } +#Upward short-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 8 ; + } +#Net short wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 9 ; + } +#Photosynthetically active radiation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 10 ; + } +#Net short-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 11 ; + } +#Downward UV radiation +'W m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 12 ; + } +#UV index (under clear sky) +'Numeric' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 50 ; + } +#UV index +'Numeric' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 51 ; + } +#Net long wave radiation flux (surface) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 0 ; + } +#Net long wave radiation flux (top of atmosphere) +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 1 ; + } +#Downward long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 3 ; + } +#Upward long-wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 4 ; + } +#Net long wave radiation flux +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 5 ; + } +#Net long-wave radiation flux, clear sky +'W m**-2' = { + discipline = 0 ; + parameterCategory = 5 ; + parameterNumber = 6 ; + } +#Cloud Ice +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 0 ; + } +#Cloud water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 6 ; + } +#Cloud amount +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 7 ; + } +#Cloud type +'code table (4.203)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 8 ; + } +#Thunderstorm maximum tops +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 9 ; + } +#Thunderstorm coverage +'code table (4.204)' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 10 ; + } +#Cloud base +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 11 ; + } +#Cloud top +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 12 ; + } +#Ceiling +'m' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 13 ; + } +#Non-convective cloud cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 14 ; + } +#Cloud work function +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 15 ; + } +#Convective cloud efficiency +'Proportion' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 16 ; + } +#Total condensate +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 17 ; + } +#Total column-integrated cloud water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 18 ; + } +#Total column-integrated cloud ice +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 19 ; + } +#Total column-integrated condensate +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 20 ; + } +#Ice fraction of total condensate +'Proportion' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 21 ; + } +#Cloud ice mixing ratio +'kg kg**-1' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 23 ; + } +#Sunshine +'Numeric' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 24 ; + } +#Horizontal extent of cumulonimbus (CB) +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 25 ; + } +#K index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 2 ; + } +#KO index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 3 ; + } +#Total totals index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 4 ; + } +#Sweat index +'Numeric' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 5 ; + } +#Storm relative helicity +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 8 ; + } +#Energy helicity index +'Numeric' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 9 ; + } +#Surface lifted index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 10 ; + } +#Best (4-layer) lifted index +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 11 ; + } +#Aerosol type +'code table (4.205)' = { + discipline = 0 ; + parameterCategory = 13 ; + parameterNumber = 0 ; + } +#Total ozone +'Dobson' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 0 ; + } +#Total column integrated ozone +'Dobson' = { + discipline = 0 ; + parameterCategory = 14 ; + parameterNumber = 2 ; + } +#Base spectrum width +'m s**-1' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 0 ; + } +#Base reflectivity +'dB' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 1 ; + } +#Base radial velocity +'m s**-1' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 2 ; + } +#Vertically-integrated liquid +'kg m**-1' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 3 ; + } +#Layer-maximum base reflectivity +'dB' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 4 ; + } +#Precipitation +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 5 ; + } +#Air concentration of Caesium 137 +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 0 ; + } +#Air concentration of Iodine 131 +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 1 ; + } +#Air concentration of radioactive pollutant +'Bq m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 2 ; + } +#Ground deposition of Caesium 137 +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 3 ; + } +#Ground deposition of Iodine 131 +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 4 ; + } +#Ground deposition of radioactive pollutant +'Bq m**-2' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 5 ; + } +#Time-integrated air concentration of caesium pollutant +'Bq s m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 6 ; + } +#Time-integrated air concentration of iodine pollutant +'Bq s m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 7 ; + } +#Time-integrated air concentration of radioactive pollutant +'Bq s m**-3' = { + discipline = 0 ; + parameterCategory = 18 ; + parameterNumber = 8 ; + } +#Volcanic ash +'code table (4.206)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 4 ; + } +#Icing top +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 5 ; + } +#Icing base +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 6 ; + } +#Icing +'code table (4.207)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 7 ; + } +#Turbulence top +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 8 ; + } +#Turbulence base +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 9 ; + } +#Turbulence +'code table (4.208)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 10 ; + } +#Turbulent kinetic energy +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 11 ; + } +#Planetary boundary layer regime +'code table (4.209)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 12 ; + } +#Contrail intensity +'code table (4.210)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 13 ; + } +#Contrail engine type +'code table (4.211)' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 14 ; + } +#Contrail top +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 15 ; + } +#Contrail base +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 16 ; + } +#Maximum snow albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 17 ; + } +#Snow free albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 18 ; + } +#Icing +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 20 ; + } +#In-cloud turbulence +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 21 ; + } +#Clear air turbulence (CAT) +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 22 ; + } +#Supercooled large droplet probability (see Note 4) +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 23 ; + } +#Arbitrary text string +'CCITTIA5' = { + discipline = 0 ; + parameterCategory = 190 ; + parameterNumber = 0 ; + } +#Seconds prior to initial reference time (defined in Section 1) +'s' = { + discipline = 0 ; + parameterCategory = 191 ; + parameterNumber = 0 ; + } +#Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the ref +'kg m**-2' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) +'kg m**-2' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Remotely sensed snow cover +'(code table 4.215)' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Elevation of snow covered terrain +'(code table 4.216)' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Snow water equivalent percent of normal +'%' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Baseflow-groundwater runoff +'kg m**-2' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Storm surface runoff +'kg m**-2' = { + discipline = 1 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation) +'kg m**-2' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + } +#Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over th +'%' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Probability of 0.01 inch of precipitation (POP) +'%' = { + discipline = 1 ; + parameterCategory = 1 ; + parameterNumber = 2 ; + } +#Land cover (1=land, 0=sea) +'Proportion' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Vegetation +'%' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Water runoff +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Evapotranspiration +'kg**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Model terrain height +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Land use +'code table (4.212)' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Volumetric soil moisture content +'Proportion' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Ground heat flux +'W m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + } +#Moisture availability +'%' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + } +#Exchange coefficient +'kg m**-2 s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 12 ; + } +#Plant canopy surface water +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + } +#Blackadar mixing length scale +'m' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 14 ; + } +#Canopy conductance +'m s**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + } +#Minimal stomatal resistance +'s m**-1' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 16 ; + } +#Solar parameter in canopy conductance +'Proportion' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 18 ; + } +#Temperature parameter in canopy conductance +'Proportion' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 19 ; + } +#Soil moisture parameter in canopy conductance +'Proportion' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 20 ; + } +#Humidity parameter in canopy conductance +'Proportion' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 21 ; + } +#Column-integrated soil water +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 23 ; + } +#Heat flux +'W m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 24 ; + } +#Volumetric soil moisture +'m**3 m**-3' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 25 ; + } +#Volumetric wilting point +'m**3 m**-3' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 27 ; + } +#Upper layer soil temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + } +#Upper layer soil moisture +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + } +#Lower layer soil moisture +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 3 ; + } +#Bottom layer soil temperature +'K' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 4 ; + } +#Liquid volumetric soil moisture (non-frozen) +'Proportion' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + } +#Number of soil layers in root zone +'Numeric' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + } +#Transpiration stress-onset (soil moisture) +'Proportion' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 7 ; + } +#Direct evaporation cease (soil moisture) +'Proportion' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 8 ; + } +#Soil porosity +'Proportion' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 9 ; + } +#Liquid volumetric soil moisture (non-frozen) +'m**3 m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 10 ; + } +#Volumetric transpiration stress-onset (soil moisture) +'m**3 m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 11 ; + } +#Transpiration stress-onset (soil moisture) +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 12 ; + } +#Volumetric direct evaporation cease (soil moisture) +'m**3 m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 13 ; + } +#Direct evaporation cease (soil moisture) +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 14 ; + } +#Soil porosity +'m**3 m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 15 ; + } +#Volumetric saturation of soil moisture +'m**3 m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 16 ; + } +#Saturation of soil moisture +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 17 ; + } +#Estimated precipitation +'kg m**-2' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + } +#Instantaneous rain rate +'kg m**-2 s**-1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Cloud top height +'m' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 2 ; + } +#Cloud top height quality indicator +'Code table 4.219' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 3 ; + } +#Estimated u component of wind +'m s**-1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 4 ; + } +#Estimated v component of wind +'m s**-1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 5 ; + } +#Number of pixels used +'Numeric' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 6 ; + } +#Solar zenith angle +'Degree' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 7 ; + } +#Relative azimuth angle +'Degree' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 8 ; + } +#Reflectance in 0.6 micron channel +'%' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 9 ; + } +#Reflectance in 0.8 micron channel +'%' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 10 ; + } +#Reflectance in 1.6 micron channel +'%' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 11 ; + } +#Reflectance in 3.9 micron channel +'%' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 12 ; + } +#Atmospheric divergence +'s**-1' = { + discipline = 3 ; + parameterCategory = 1 ; + parameterNumber = 13 ; + } +#Direction of wind waves +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Primary wave direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 10 ; + } +#Primary wave mean period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 11 ; + } +#Secondary wave mean period +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 13 ; + } +#Current direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 0 ; + } +#Current speed +'m s**-1' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 1 ; + } +#Ice cover +'Proportion' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 0 ; + } +#Ice temperature +'K' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 8 ; + } +#Deviation of sea level from mean +'m' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 1 ; + } +#Seconds prior to initial reference time (defined in Section 1) +'s' = { + discipline = 10 ; + parameterCategory = 191 ; + parameterNumber = 0 ; + } +#Albedo +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 1 ; + } +#Pressure tendency +'Pa s**-1' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 2 ; + } +#ICAO Standard Atmosphere reference height +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 3 ; + } +#Geometrical height +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 6 ; + } +#Standard deviation of height +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 7 ; + } +#Virtual potential temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 15 ; + } +#Maximum temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 4 ; + } +#Minimum temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Dew point temperature +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Lapse rate +'K s**-1' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Visibility +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 0 ; + } +#Radar spectra (1) +'~' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 6 ; + } +#Radar spectra (2) +'~' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 7 ; + } +#Radar spectra (3) +'~' = { + discipline = 0 ; + parameterCategory = 15 ; + parameterNumber = 8 ; + } +#Parcel lifted index (to 500 hPa) +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 0 ; + } +#Temperature anomaly +'K' = { + discipline = 0 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Pressure anomaly +'Pa' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 8 ; + } +#Geopotential height anomaly +'gpm' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 9 ; + } +#Wave spectra (1) +'~' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 0 ; + } +#Wave spectra (2) +'~' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 1 ; + } +#Wave spectra (3) +'~' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Montgomery stream Function +'m**2 s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } +#Sigma coordinate vertical velocity +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 7 ; + } +#Absolute vorticity +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 10 ; + } +#Absolute divergence +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 11 ; + } +#Vertical u-component shear +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 15 ; + } +#Vertical v-component shear +'s**-1' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 16 ; + } +#U-component of current +'m s**-1' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 2 ; + } +#V-component of current +'m s**-1' = { + discipline = 10 ; + parameterCategory = 1 ; + parameterNumber = 3 ; + } +#Precipitable water +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 3 ; + } +#Saturation deficit +'Pa' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 5 ; + } +#Precipitation rate +'kg m**-2 s**-1' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 7 ; + } +#Thunderstorm probability +'%' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 2 ; + } +#Convective precipitation (water) +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 10 ; + } +#Mixed layer depth +'m' = { + discipline = 0 ; + parameterCategory = 19 ; + parameterNumber = 3 ; + } +#Transient thermocline depth +'m' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 2 ; + } +#Main thermocline depth +'m' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 0 ; + } +#Main thermocline anomaly +'m' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 1 ; + } +#Best lifted index (to 500 hPa) +'K' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 1 ; + } +#Water temperature +'K' = { + discipline = 10 ; + parameterCategory = 3 ; + parameterNumber = 0 ; + } +#Soil moisture content +'kg m**-2' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 3 ; + } +#Salinity +'kg kg**-1' = { + discipline = 10 ; + parameterCategory = 4 ; + parameterNumber = 3 ; + } +#Density +'kg m**-3' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 10 ; + } +#Ice thickness +'m' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 1 ; + } +#Direction of ice drift +'Degree true' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 2 ; + } +#Speed of ice drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 3 ; + } +#U-component of ice drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 4 ; + } +#V-component of ice drift +'m s**-1' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 5 ; + } +#Ice growth rate +'m s**-1' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 6 ; + } +#Ice divergence +'s**-1' = { + discipline = 10 ; + parameterCategory = 2 ; + parameterNumber = 7 ; + } +#Snow melt +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 16 ; + } +#Significant height of wind waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 5 ; + } +#Mean period of wind waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 6 ; + } +#Direction of swell waves +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 7 ; + } +#Significant height of swell waves +'m' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 8 ; + } +#Mean period of swell waves +'s' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 9 ; + } +#Secondary wave direction +'Degree true' = { + discipline = 10 ; + parameterCategory = 0 ; + parameterNumber = 12 ; + } +#Net short-wave radiation flux (surface) +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 0 ; + } +#Global radiation flux +'J m**-2' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 3 ; + } +#Radiance (with respect to wave number) +'W m**-1 sr**-1' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 5 ; + } +#Radiance (with respect to wave length) +'W m**-1 sr**-1' = { + discipline = 0 ; + parameterCategory = 4 ; + parameterNumber = 6 ; + } +#Wind mixing energy +'J' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 19 ; + } +#10 metre Wind gust of at least 15 m/s +'%' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfFirstFixedSurface = 0 ; + probabilityType = 3 ; + productDefinitionTemplateNumber = 9 ; + scaleFactorOfLowerLimit = 0 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfLowerLimit = 15 ; + scaledValueOfFirstFixedSurface = 10 ; + } +#10 metre Wind gust of at least 20 m/s +'%' = { + discipline = 0 ; + parameterCategory = 2 ; + parameterNumber = 22 ; + productDefinitionTemplateNumber = 9 ; + typeOfStatisticalProcessing = 2 ; + scaledValueOfLowerLimit = 25 ; + scaledValueOfFirstFixedSurface = 10 ; + typeOfFirstFixedSurface = 103 ; + scaleFactorOfLowerLimit = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + probabilityType = 3 ; + } +#Convective inhibition +'J kg**-1' = { + discipline = 0 ; + parameterCategory = 7 ; + parameterNumber = 7 ; + typeOfSecondFixedSurface = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Orography +'m' = { + discipline = 0 ; + parameterCategory = 3 ; + parameterNumber = 5 ; + typeOfFirstFixedSurface = 1 ; + } +#Soil Moisture +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 22 ; + } +#Soil Temperature +'K' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 2 ; + } +#Snow depth water equivalent +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 60 ; + typeOfFirstFixedSurface = 1 ; + } +#Snow Fall water equivalent +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 53 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; + } +#Total Cloud Cover +'%' = { + discipline = 0 ; + parameterCategory = 6 ; + parameterNumber = 1 ; + typeOfSecondFixedSurface = 8 ; + typeOfFirstFixedSurface = 1 ; + } +#Field capacity +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 3 ; + parameterNumber = 12 ; + typeOfSecondFixedSurface = 106 ; + typeOfFirstFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 2 ; + scaleFactorOfFirstFixedSurface = 0 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfSecondFixedSurface = 1 ; + } +#Wilting point +'kg m**-3' = { + discipline = 2 ; + parameterCategory = 0 ; + parameterNumber = 26 ; + scaledValueOfFirstFixedSurface = 0 ; + scaleFactorOfFirstFixedSurface = 0 ; + typeOfSecondFixedSurface = 106 ; + scaledValueOfSecondFixedSurface = 2 ; + scaleFactorOfSecondFixedSurface = 1 ; + typeOfFirstFixedSurface = 106 ; + } +#Total Precipitation +'kg m**-2' = { + discipline = 0 ; + parameterCategory = 1 ; + parameterNumber = 52 ; + typeOfFirstFixedSurface = 1 ; + typeOfStatisticalProcessing = 1 ; +} diff --git a/definitions/gts/boot.def b/definitions/gts/boot.def new file mode 100644 index 000000000..6658ed7b7 --- /dev/null +++ b/definitions/gts/boot.def @@ -0,0 +1,53 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +position startOfHeaders; + +ascii[4] SOH : hidden ; +ascii[3] nnn : dump; +ascii[3] crcrlf : hidden; +ascii[2] TT : dump; +ascii[2] AA : dump; +ascii[2] II : dump; +ascii[1] sp1 : hidden; +ascii[4] CCCC : dump; +ascii[1] sp2 : hidden; +ascii[2] YY : dump; +ascii[2] GG : dump; +ascii[2] gg : dump; + +lookup[2] lBB (29,BB) ; +if (lBB is 'RR' || lBB is 'CC' || lBB is 'AA' ) { + ascii[1] sp3 : hidden; + ascii[3] BBB : dump; +} else { + constant BBB="NNN"; +} +alias ls.BBB=BBB; + +alias ls.count=count; +alias ls.TT=TT; +alias ls.AA=AA; +alias ls.II=II; +alias ls.CCCC=CCCC; +alias ls.YY=YY; +alias ls.GG=GG; +alias ls.gg=gg; +position endOfHeadersMaker; + +message[4] theMessage; + +meta lengthOfHeaders evaluate( endOfHeadersMaker-startOfHeaders); +meta md5Headers md5(startOfHeaders,lengthOfHeaders); + +ascii[4] endMark ; +position totalLength; +alias ls.totalLength=totalLength; + + diff --git a/definitions/inject_download_page.pl b/definitions/inject_download_page.pl new file mode 100755 index 000000000..9122cd6df --- /dev/null +++ b/definitions/inject_download_page.pl @@ -0,0 +1,57 @@ +#!/usr/bin/env perl + +use strict;use warnings; +use Data::Dumper; + +$#ARGV + 1 > 0 or die "Requires input file as argument\n"; +my $filename = $ARGV[0]; + +open FIN,$filename; +my @content = ; +close FIN; + +my $section = 0; # flag indicating we are in the download section of the parameters +my $inject = 0; # flag indicating we are at the right spot to start injecting the html code + +for my $line (@content) { + if ($line =~ /GRIB API Parameters/) { + $section = 1; + print $line; + } elsif ($line =~ /Download/ && $section == 1) { + $inject = 1; + print $line; + } elsif ($section == 1 && $inject == 1) { + inject(); + $inject = 2; # done injecting + } elsif ($inject == 2) { + if ($line =~ /\/TABLE/) { + $section = 0; + $inject = 0; + print $line; + } + } else { + print $line; + } +} + +sub inject { + + my @colors = ('#FFFFCC','#E0E0E0'); + my $c = 0; + + while () { + my ($version,$size,$date) = split; + print << "END"; + + $version + $size KB + grib_api_parameters-v$version.tar.gz $date + +END + + $c = $c == 0 ? 1 : 0; + } +} + +__DATA__ +1 284 09.09.2010 diff --git a/definitions/installDefinitions.sh b/definitions/installDefinitions.sh new file mode 100755 index 000000000..0102765f9 --- /dev/null +++ b/definitions/installDefinitions.sh @@ -0,0 +1,116 @@ +#!/bin/sh +# +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +if [ $# != 2 ] +then +echo " +usage: $0 grib_api_installation_dir definition_files_installation_dir +" +exit 1 +fi + +requiredLibVersion=%LIBRARY_VERSION% + +grib_api_dir=$1 +grib_api_bin=$1/bin + +definitions=$2 + +if [ ! -f $grib_api_bin/grib_info ] +then +echo " +Unable to find grib_api tools in $grib_api_bin +" +exit 1 +fi + +set -e +version=`$grib_api_bin/grib_info -v` +defaultDefinitions=`$grib_api_bin/grib_info -d` +set +e + +if [ $version != $requiredLibVersion ] +then +echo " +################################################################# +# grib_api version $version found in +# $grib_api_dir +# Version $requiredLibVersion is required. +# Installation aborted. +################################################################# +" +exit 1 +fi + +echo checking definition files compatibility... +for file in `find . -name '*.def' -print` +do + ${grib_api_bin}/parser $file +done +if [ $? != 0 ] +then + echo definition files are not compatible with library version $version + echo installation aborted + exit 1 +fi + +set -e +echo compatibility check ok + +echo copying definition files to $definitions.tmp~ +[ ! -d $definitions.tmp~ ] || rm -rf $definitions.tmp~ +mkdir -p $definitions.tmp~ +cp -r * $definitions.tmp~ + +if [ -d $definitions ] +then + if [ -d ${definitions}.backup~ ] + then + echo " +################################################################# +# A backup definition files directory is present: +# ${definitions}.backup~ +# Please rename or remove it before installing a +# new version of definition files. +# INSTALLATION ABORTED +################################################################# +" + exit 1 + fi + echo " +################################################################# +# Definition file directory found in +# ${definitions} +# Moving $definitions to +# ${definitions}.backup~ +################################################################# + " + mv $definitions ${definitions}.backup~ +fi + +echo moving $definitions.tmp~ to ${definitions} +mv $definitions.tmp~ ${definitions} + +echo " + +Definition files successfully installed in: +${definitions} +" + +if [ ${definitions} != $defaultDefinitions ] +then +echo " +## Please remember to set +## GRIB_DEFINITION_PATH=${definitions} +## to activate the new definition files. +" + +fi diff --git a/definitions/make_makefile_am.pl b/definitions/make_makefile_am.pl new file mode 100755 index 000000000..5b9e7abcb --- /dev/null +++ b/definitions/make_makefile_am.pl @@ -0,0 +1,80 @@ +#!/usr/bin/perl +use strict; + +my @sub; +push @sub , "."; +navigate("."); +foreach my $d ( sort @sub ) +{ + process($d) unless $d =~ /bufr/; +} +print "include \$(DEVEL_RULES)\n"; + +sub navigate { + my ($dir) = @_; + + opendir(DIR,$dir); + foreach my $d ( readdir(DIR) ) + { + next if($d =~ /^\./); + + if(-d "$dir/$d") + { + push @sub , "$dir/$d"; + navigate("$dir/$d"); + } + } + closedir(DIR); +} + +sub process { + my ($dir) = @_; + my @files; + + opendir(DIR,$dir); + foreach my $d ( readdir(DIR) ) + { + next if($d =~ /^\./); + + unless (-d $d) { + push @files, $d if($d =~ /\.(table|def|grib|sh)$/); + } + + } + closedir(DIR); + + if(@files) + { + my $name; + + + if($dir eq ".") + { + $name = ""; + print "#This file is generated by make_makefile_am.pl\n"; + print "# DON'T EDIT!!!\n"; + print "definitionsdir = \@GRIB_DEFINITION_PATH\@\n"; + } + else + { + $dir =~ s/^\.\///; + $name = "$dir"; + $name =~ s/\W/_/g; + print "definitions${name}dir = \@GRIB_DEFINITION_PATH\@/$dir\n"; + } + + + print "dist_definitions${name}_DATA = "; + + foreach my $f ( sort @files ) + { + print "\\\n\t$dir/$f"; + } + + print "\n"; + print "\n"; + + } + + +} diff --git a/definitions/mars/analyse.pl b/definitions/mars/analyse.pl new file mode 100755 index 000000000..b26a2eeae --- /dev/null +++ b/definitions/mars/analyse.pl @@ -0,0 +1,23 @@ +#!/usr/bin/perl +use Data::Dumper; +opendir(DIR,"."); +while($d = readdir(DIR)) +{ + next unless($d =~ /^grib1.*\.def$/); + open(IN,"<$d"); + my @x; + while() + { + chomp; + s/#.*//; + s/\s+/ /g; + push @x,$_ if($_); + } + + $q = join(";",sort @x); + $q =~ s/;+/;/g; + + push @{$def{$q}},$d; +} + +print Dumper(\%def); diff --git a/definitions/mars/base.def b/definitions/mars/base.def new file mode 100644 index 000000000..cc16a58ce --- /dev/null +++ b/definitions/mars/base.def @@ -0,0 +1,2 @@ +label "x"; + diff --git a/definitions/mars/class.table b/definitions/mars/class.table new file mode 100644 index 000000000..b6c49097e --- /dev/null +++ b/definitions/mars/class.table @@ -0,0 +1,51 @@ +0 0 Unknown +1 od Operational archive +2 rd Research department +3 er REANALYSE +4 cs ECSN +5 e4 REANALYSE40 +6 dm DEMETER +7 pv PROVOST +8 el ELDAS +9 to TOST +10 co Cosmo Leps +11 en ENSEMBLES +12 ti TIGGE +13 me MERSEA +14 ei ERA Interim +15 sr Short-Range Ensemble Prediction System +16 dt Data Targeting System +17 la LACE ALADIN +18 yt YOTC +19 mc MACC +20 pe Permanent experiments +21 em ERA-CLIM model integration for the 20th-century +22 e2 ERA-CLIM pilot reanalysis of the 20th-century using surface observations only +23 ea ERA-CLIM pilot reanalysis of the satellite era +24 ep ERA-CLIM pilot reanalysis of the pre-satellite era +25 rm EURO4M +26 nr NOAA/CIRES 20th Century Reanalysis version II +99 te Test +100 at Austria +101 be Belgium +102 hr Croatia +103 dk Denmark +104 fi Finland +105 fr France +106 de Germany +107 gr Greece +108 hu Hungary +109 is Iceland +110 ie Ireland +111 it Italy +112 nl Netherlands +113 no Norway +114 pt Portugal +115 si Slovenia +116 es Spain +117 se Sweden +118 ch Switzerland +119 tr Turkey +120 uk United Kingdom +121 ms Member States projects +199 ma Metaps diff --git a/definitions/mars/default_labeling.def b/definitions/mars/default_labeling.def new file mode 100644 index 000000000..e4d051ea9 --- /dev/null +++ b/definitions/mars/default_labeling.def @@ -0,0 +1,13 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +constant marsStream = "oper"; +alias mars.stream = marsStream; +constant marsDomain = "g"; +alias mars.domain = marsDomain; diff --git a/definitions/mars/domain.96.table b/definitions/mars/domain.96.table new file mode 100644 index 000000000..1706ecda9 --- /dev/null +++ b/definitions/mars/domain.96.table @@ -0,0 +1,4 @@ +1 m mediterranean +2 b balkans +3 h greece +4 s saronikos diff --git a/definitions/mars/domain.table b/definitions/mars/domain.table new file mode 100644 index 000000000..cd803cea0 --- /dev/null +++ b/definitions/mars/domain.table @@ -0,0 +1,39 @@ +1 a 70 332.5 40 10 +2 b 72.5 0 50 45 +3 c 57.5 345 32.5 17.5 +4 d 57.5 2.5 32.5 42.5 +5 e 75 340 30 45 +6 f 60 310 40 0 +7 m 66 354 30 42 +8 m 66 -6 30 42 +9 m 46 354 30 36 +10 m 46 -6 30 36 +11 m 46 -6 30 36.5 +12 m 46 -6 35 17 +13 m 46 12 40 20 +14 m 81 262 9 42 +15 m 81 -98 9 42 +16 g 90 0 -90 359.5 +17 g 81 0 -81 358.5 +18 g 81 0 -81 359.5 +19 g 90 0 -90 358.5 +20 g 90 0 -90 357 +21 g 90 0 -90 357.9 +22 g 90 0 -90 359 +23 g 81 0 -78 357 +24 g 90 0 -90 357.5 +25 g 90 0 -90 359.64 +26 s -0.5 0 -81 359.5 +27 n 81 0 0 359.5 +28 b 66 9 40 42 +29 m 44.5 -6 35 16 +30 m 45 -6 35 14 +31 m 45.976 12 40 19.956 +32 g 89.731 0 -89.731 359.648 +33 g 90 0 -90 358.5 +34 n 90 0 30 359.9 +35 s -30 0 -90 359.9 +36 e 75 320 25 34.999 +37 t 30 260 0 359.9 +38 u 30 100 0 220 +39 g 0 0 0 0 diff --git a/definitions/mars/genfiles.ksh b/definitions/mars/genfiles.ksh new file mode 100755 index 000000000..cb43ea04f --- /dev/null +++ b/definitions/mars/genfiles.ksh @@ -0,0 +1,18 @@ +#!/usr/bin/ksh + +streams=`cat stream.table | awk '{print $2;}'` +#streams="enda ewda" +types=`cat type.table | awk '{print $2;}'` +types="me" + +for stream in $streams +do + for type in $types + do + file="grib1.$stream.$type.def" + if [ ! -f $file ] + then + ln -s grib1.$type.def $file + fi + done +done diff --git a/definitions/mars/grib1.amap.an.def b/definitions/mars/grib1.amap.an.def new file mode 100644 index 000000000..c84d075f6 --- /dev/null +++ b/definitions/mars/grib1.amap.an.def @@ -0,0 +1,3 @@ +# Local 18 +alias mars.origin = dataOrigin; + diff --git a/definitions/mars/grib1.dacl.pb.def b/definitions/mars/grib1.dacl.pb.def new file mode 100644 index 000000000..5ecc47b04 --- /dev/null +++ b/definitions/mars/grib1.dacl.pb.def @@ -0,0 +1,4 @@ +alias mars.step = stepRange; +meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); +alias mars.quantile = marsQuantile; + diff --git a/definitions/mars/grib1.dacw.pb.def b/definitions/mars/grib1.dacw.pb.def new file mode 100644 index 000000000..5ecc47b04 --- /dev/null +++ b/definitions/mars/grib1.dacw.pb.def @@ -0,0 +1,4 @@ +alias mars.step = stepRange; +meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); +alias mars.quantile = marsQuantile; + diff --git a/definitions/mars/grib1.dcda.4i.def b/definitions/mars/grib1.dcda.4i.def new file mode 100644 index 000000000..01d7dbe1d --- /dev/null +++ b/definitions/mars/grib1.dcda.4i.def @@ -0,0 +1 @@ +alias mars.iteration = iterationNumber; diff --git a/definitions/mars/grib1.dcda.me.def b/definitions/mars/grib1.dcda.me.def new file mode 120000 index 000000000..353243e89 --- /dev/null +++ b/definitions/mars/grib1.dcda.me.def @@ -0,0 +1 @@ +grib1.me.def \ No newline at end of file diff --git a/definitions/mars/grib1.dcda.sim.def b/definitions/mars/grib1.dcda.sim.def new file mode 100644 index 000000000..2cb128fde --- /dev/null +++ b/definitions/mars/grib1.dcda.sim.def @@ -0,0 +1,3 @@ +unalias mars.param; +unalias mars.levtype; +alias mars.domain=globalDomain; diff --git a/definitions/mars/grib1.edmm.an.def b/definitions/mars/grib1.edmm.an.def new file mode 100644 index 000000000..601cee6df --- /dev/null +++ b/definitions/mars/grib1.edmm.an.def @@ -0,0 +1,4 @@ +# class e4 +alias mars.step = endStep; +alias mars.number=perturbationNumber; + diff --git a/definitions/mars/grib1.edmm.cl.def b/definitions/mars/grib1.edmm.cl.def new file mode 100644 index 000000000..010d4c287 --- /dev/null +++ b/definitions/mars/grib1.edmm.cl.def @@ -0,0 +1,2 @@ +alias mars.number=perturbationNumber; + diff --git a/definitions/mars/grib1.edmm.fc.def b/definitions/mars/grib1.edmm.fc.def new file mode 100644 index 000000000..ff6c70699 --- /dev/null +++ b/definitions/mars/grib1.edmm.fc.def @@ -0,0 +1,10 @@ +# assert(local=1) +meta verificationDate g1verificationdate(dataDate, dataTime, endStep) : read_only; +meta monthlyVerificationDate g1monthlydate(verificationDate) : dump,no_copy; +alias mars.date = monthlyVerificationDate; + +# class e4 +# constant six = 6; +alias mars.step = endStep; +alias mars.number=perturbationNumber; + diff --git a/definitions/mars/grib1.edmm.fg.def b/definitions/mars/grib1.edmm.fg.def new file mode 100644 index 000000000..93c7e8979 --- /dev/null +++ b/definitions/mars/grib1.edmm.fg.def @@ -0,0 +1,12 @@ +#if(centre == ECMWF ) { +#meta fgDate validity_date(dataDate,dataTime,endStep) : no_copy; +#meta fgTime validity_time(dataDate,dataTime,endStep) : no_copy; + +#alias mars.date = fgDate; +#alias mars.time = fgTime; +#alias mars.step = startStep; +#} + +label "x"; +alias mars.number=perturbationNumber; + diff --git a/definitions/mars/grib1.edmm.ia.def b/definitions/mars/grib1.edmm.ia.def new file mode 100644 index 000000000..601cee6df --- /dev/null +++ b/definitions/mars/grib1.edmm.ia.def @@ -0,0 +1,4 @@ +# class e4 +alias mars.step = endStep; +alias mars.number=perturbationNumber; + diff --git a/definitions/mars/grib1.edmm.ssd.def b/definitions/mars/grib1.edmm.ssd.def new file mode 100644 index 000000000..aa32e3be0 --- /dev/null +++ b/definitions/mars/grib1.edmm.ssd.def @@ -0,0 +1,5 @@ +alias mars.instrument = instrumentType; +alias mars.ident = satelliteNumber; + +alias mars.number = perturbationNumber; + diff --git a/definitions/mars/grib1.edmo.an.def b/definitions/mars/grib1.edmo.an.def new file mode 100644 index 000000000..f2bcb9ad4 --- /dev/null +++ b/definitions/mars/grib1.edmo.an.def @@ -0,0 +1,10 @@ +# NOTE: step is startStep + +alias mars.step = endStep; + +# Only ERA15 has time and step +if(class != 3) { + unalias mars.time; + unalias mars.step; +} +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.edmo.cl.def b/definitions/mars/grib1.edmo.cl.def new file mode 100644 index 000000000..457571070 --- /dev/null +++ b/definitions/mars/grib1.edmo.cl.def @@ -0,0 +1,2 @@ +unalias mars.time; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.edmo.fc.def b/definitions/mars/grib1.edmo.fc.def new file mode 100644 index 000000000..947d1dc41 --- /dev/null +++ b/definitions/mars/grib1.edmo.fc.def @@ -0,0 +1,13 @@ +# assert(local=1) +# NOTE: verificationDate based on startStep + +meta verificationDate g1verificationdate(dataDate, dataTime, startStep) : read_only; +alias mars.date = verificationDate; +alias mars.step = endStep; + +# Only ERA15 has time and step +if(class != 3) { + unalias mars.time; + unalias mars.step; +} +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.edmo.ssd.def b/definitions/mars/grib1.edmo.ssd.def new file mode 100644 index 000000000..e82cd8bb7 --- /dev/null +++ b/definitions/mars/grib1.edmo.ssd.def @@ -0,0 +1,16 @@ +# NOTE: verificationDate based on startStep + +meta verificationDate g1verificationdate(dataDate, dataTime, startStep) : read_only; +alias mars.date = verificationDate; +alias mars.step = endStep; + +# Only ERA15 has time and step +if(class != 3) { + unalias mars.time; + unalias mars.step; +} +alias mars.instrument = instrumentType; +alias mars.ident = satelliteNumber; + +alias mars.number = perturbationNumber; + diff --git a/definitions/mars/grib1.efhc.cf.def b/definitions/mars/grib1.efhc.cf.def new file mode 100644 index 000000000..05e3d7aae --- /dev/null +++ b/definitions/mars/grib1.efhc.cf.def @@ -0,0 +1 @@ +alias mars.refdate = referenceDate; diff --git a/definitions/mars/grib1.efhc.icp.def b/definitions/mars/grib1.efhc.icp.def new file mode 100644 index 000000000..b79945f03 --- /dev/null +++ b/definitions/mars/grib1.efhc.icp.def @@ -0,0 +1,2 @@ +alias mars.refdate = referenceDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.efhc.pf.def b/definitions/mars/grib1.efhc.pf.def new file mode 100644 index 000000000..b79945f03 --- /dev/null +++ b/definitions/mars/grib1.efhc.pf.def @@ -0,0 +1,2 @@ +alias mars.refdate = referenceDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.efho.cf.def b/definitions/mars/grib1.efho.cf.def new file mode 100644 index 000000000..98a1a81dc --- /dev/null +++ b/definitions/mars/grib1.efho.cf.def @@ -0,0 +1,2 @@ +alias mars.date = referenceDate; +alias mars.hdate = dataDate; diff --git a/definitions/mars/grib1.efho.pf.def b/definitions/mars/grib1.efho.pf.def new file mode 100644 index 000000000..3614de03b --- /dev/null +++ b/definitions/mars/grib1.efho.pf.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; diff --git a/definitions/mars/grib1.efhs.cd.def b/definitions/mars/grib1.efhs.cd.def new file mode 100644 index 000000000..05e94a6f1 --- /dev/null +++ b/definitions/mars/grib1.efhs.cd.def @@ -0,0 +1,3 @@ +alias mars.step = stepRange; +alias mars.quantile = quantile; + diff --git a/definitions/mars/grib1.efhs.ed.def b/definitions/mars/grib1.efhs.ed.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.efhs.ed.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.efhs.em.def b/definitions/mars/grib1.efhs.em.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib1.efhs.em.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.efhs.es.def b/definitions/mars/grib1.efhs.es.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib1.efhs.es.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.efhs.taem.def b/definitions/mars/grib1.efhs.taem.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib1.efhs.taem.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.efhs.taes.def b/definitions/mars/grib1.efhs.taes.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib1.efhs.taes.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.efov.pf.def b/definitions/mars/grib1.efov.pf.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.efov.pf.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.ehmm.em.def b/definitions/mars/grib1.ehmm.em.def new file mode 100644 index 000000000..f0be0bf3c --- /dev/null +++ b/definitions/mars/grib1.ehmm.em.def @@ -0,0 +1,8 @@ +#assert(local=31) + +alias mars.fcmonth = forecastMonth; +unalias mars.step; +#unalias mars.total; #TODO: Check who sets it + +alias mars.hdate = dataDate; +alias mars.date = referenceDate; diff --git a/definitions/mars/grib1.elda.4i.def b/definitions/mars/grib1.elda.4i.def new file mode 100644 index 000000000..ce5e03eaf --- /dev/null +++ b/definitions/mars/grib1.elda.4i.def @@ -0,0 +1,2 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.elda.4v.def b/definitions/mars/grib1.elda.4v.def new file mode 100644 index 000000000..ce5e03eaf --- /dev/null +++ b/definitions/mars/grib1.elda.4v.def @@ -0,0 +1,2 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.elda.an.def b/definitions/mars/grib1.elda.an.def new file mode 100644 index 000000000..ce5e03eaf --- /dev/null +++ b/definitions/mars/grib1.elda.an.def @@ -0,0 +1,2 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.elda.ea.def b/definitions/mars/grib1.elda.ea.def new file mode 100644 index 000000000..ce5e03eaf --- /dev/null +++ b/definitions/mars/grib1.elda.ea.def @@ -0,0 +1,2 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.elda.ef.def b/definitions/mars/grib1.elda.ef.def new file mode 100644 index 000000000..ce5e03eaf --- /dev/null +++ b/definitions/mars/grib1.elda.ef.def @@ -0,0 +1,2 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.elda.em.def b/definitions/mars/grib1.elda.em.def new file mode 100644 index 000000000..f877d1fa5 --- /dev/null +++ b/definitions/mars/grib1.elda.em.def @@ -0,0 +1 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; diff --git a/definitions/mars/grib1.elda.es.def b/definitions/mars/grib1.elda.es.def new file mode 100644 index 000000000..f877d1fa5 --- /dev/null +++ b/definitions/mars/grib1.elda.es.def @@ -0,0 +1 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; diff --git a/definitions/mars/grib1.elda.fc.def b/definitions/mars/grib1.elda.fc.def new file mode 100644 index 000000000..ce5e03eaf --- /dev/null +++ b/definitions/mars/grib1.elda.fc.def @@ -0,0 +1,2 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.elda.me.def b/definitions/mars/grib1.elda.me.def new file mode 100644 index 000000000..ce5e03eaf --- /dev/null +++ b/definitions/mars/grib1.elda.me.def @@ -0,0 +1,2 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.elda.ses.def b/definitions/mars/grib1.elda.ses.def new file mode 100644 index 000000000..f877d1fa5 --- /dev/null +++ b/definitions/mars/grib1.elda.ses.def @@ -0,0 +1 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; diff --git a/definitions/mars/grib1.enda.4v.def b/definitions/mars/grib1.enda.4v.def new file mode 120000 index 000000000..977ae5c33 --- /dev/null +++ b/definitions/mars/grib1.enda.4v.def @@ -0,0 +1 @@ +grib1.enda.def \ No newline at end of file diff --git a/definitions/mars/grib1.enda.an.def b/definitions/mars/grib1.enda.an.def new file mode 120000 index 000000000..977ae5c33 --- /dev/null +++ b/definitions/mars/grib1.enda.an.def @@ -0,0 +1 @@ +grib1.enda.def \ No newline at end of file diff --git a/definitions/mars/grib1.enda.def b/definitions/mars/grib1.enda.def new file mode 100644 index 000000000..4af93e55d --- /dev/null +++ b/definitions/mars/grib1.enda.def @@ -0,0 +1 @@ +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.enda.ea.def b/definitions/mars/grib1.enda.ea.def new file mode 120000 index 000000000..977ae5c33 --- /dev/null +++ b/definitions/mars/grib1.enda.ea.def @@ -0,0 +1 @@ +grib1.enda.def \ No newline at end of file diff --git a/definitions/mars/grib1.enda.ef.def b/definitions/mars/grib1.enda.ef.def new file mode 120000 index 000000000..977ae5c33 --- /dev/null +++ b/definitions/mars/grib1.enda.ef.def @@ -0,0 +1 @@ +grib1.enda.def \ No newline at end of file diff --git a/definitions/mars/grib1.enda.em.def b/definitions/mars/grib1.enda.em.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.enda.em.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.enda.es.def b/definitions/mars/grib1.enda.es.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.enda.es.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.enda.fc.def b/definitions/mars/grib1.enda.fc.def new file mode 100644 index 000000000..4af93e55d --- /dev/null +++ b/definitions/mars/grib1.enda.fc.def @@ -0,0 +1 @@ +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.enda.ssd.def b/definitions/mars/grib1.enda.ssd.def new file mode 100644 index 000000000..aa32e3be0 --- /dev/null +++ b/definitions/mars/grib1.enda.ssd.def @@ -0,0 +1,5 @@ +alias mars.instrument = instrumentType; +alias mars.ident = satelliteNumber; + +alias mars.number = perturbationNumber; + diff --git a/definitions/mars/grib1.enda.sv.def b/definitions/mars/grib1.enda.sv.def new file mode 120000 index 000000000..977ae5c33 --- /dev/null +++ b/definitions/mars/grib1.enda.sv.def @@ -0,0 +1 @@ +grib1.enda.def \ No newline at end of file diff --git a/definitions/mars/grib1.enda.svar.def b/definitions/mars/grib1.enda.svar.def new file mode 120000 index 000000000..977ae5c33 --- /dev/null +++ b/definitions/mars/grib1.enda.svar.def @@ -0,0 +1 @@ +grib1.enda.def \ No newline at end of file diff --git a/definitions/mars/grib1.enfh.cf.def b/definitions/mars/grib1.enfh.cf.def new file mode 100644 index 000000000..6e01d7531 --- /dev/null +++ b/definitions/mars/grib1.enfh.cf.def @@ -0,0 +1,3 @@ +#assert(local=4) +alias mars.hdate = dataDate; +alias mars.date = referenceDate; diff --git a/definitions/mars/grib1.enfh.fcmax.def b/definitions/mars/grib1.enfh.fcmax.def new file mode 100644 index 000000000..34f58fae9 --- /dev/null +++ b/definitions/mars/grib1.enfh.fcmax.def @@ -0,0 +1,5 @@ +#assert(local=30) +alias mars.step = stepRange; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfh.fcmean.def b/definitions/mars/grib1.enfh.fcmean.def new file mode 100644 index 000000000..34f58fae9 --- /dev/null +++ b/definitions/mars/grib1.enfh.fcmean.def @@ -0,0 +1,5 @@ +#assert(local=30) +alias mars.step = stepRange; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfh.fcmin.def b/definitions/mars/grib1.enfh.fcmin.def new file mode 100644 index 000000000..34f58fae9 --- /dev/null +++ b/definitions/mars/grib1.enfh.fcmin.def @@ -0,0 +1,5 @@ +#assert(local=30) +alias mars.step = stepRange; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfh.fcstdev.def b/definitions/mars/grib1.enfh.fcstdev.def new file mode 100644 index 000000000..34f58fae9 --- /dev/null +++ b/definitions/mars/grib1.enfh.fcstdev.def @@ -0,0 +1,5 @@ +#assert(local=30) +alias mars.step = stepRange; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfh.ff.def b/definitions/mars/grib1.enfh.ff.def new file mode 100644 index 000000000..3614de03b --- /dev/null +++ b/definitions/mars/grib1.enfh.ff.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; diff --git a/definitions/mars/grib1.enfh.icp.def b/definitions/mars/grib1.enfh.icp.def new file mode 100644 index 000000000..abf4978bc --- /dev/null +++ b/definitions/mars/grib1.enfh.icp.def @@ -0,0 +1,4 @@ +# assert(=4) +alias mars.hdate = dataDate; +alias mars.date = referenceDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfh.pf.def b/definitions/mars/grib1.enfh.pf.def new file mode 100644 index 000000000..abf4978bc --- /dev/null +++ b/definitions/mars/grib1.enfh.pf.def @@ -0,0 +1,4 @@ +# assert(=4) +alias mars.hdate = dataDate; +alias mars.date = referenceDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfh.tims.def b/definitions/mars/grib1.enfh.tims.def new file mode 100644 index 000000000..6e01d7531 --- /dev/null +++ b/definitions/mars/grib1.enfh.tims.def @@ -0,0 +1,3 @@ +#assert(local=4) +alias mars.hdate = dataDate; +alias mars.date = referenceDate; diff --git a/definitions/mars/grib1.enfo.cf.def b/definitions/mars/grib1.enfo.cf.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.enfo.cf.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.enfo.ci.def b/definitions/mars/grib1.enfo.ci.def new file mode 100644 index 000000000..9e4e203cc --- /dev/null +++ b/definitions/mars/grib1.enfo.ci.def @@ -0,0 +1 @@ +alias mars.number = clusterNumber; diff --git a/definitions/mars/grib1.enfo.cm.def b/definitions/mars/grib1.enfo.cm.def new file mode 100644 index 000000000..9b8810adb --- /dev/null +++ b/definitions/mars/grib1.enfo.cm.def @@ -0,0 +1,2 @@ +alias mars.number = clusterNumber; +alias mars.domain = clusteringDomain; diff --git a/definitions/mars/grib1.enfo.cr.def b/definitions/mars/grib1.enfo.cr.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.enfo.cr.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.enfo.cs.def b/definitions/mars/grib1.enfo.cs.def new file mode 100644 index 000000000..3afea11e6 --- /dev/null +++ b/definitions/mars/grib1.enfo.cs.def @@ -0,0 +1,4 @@ + +alias mars.number = clusterNumber; +alias mars.domain = clusteringDomain; + diff --git a/definitions/mars/grib1.enfo.cv.def b/definitions/mars/grib1.enfo.cv.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.enfo.cv.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfo.ed.def b/definitions/mars/grib1.enfo.ed.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.enfo.ed.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfo.ef.def b/definitions/mars/grib1.enfo.ef.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.enfo.ef.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.enfo.efi.def b/definitions/mars/grib1.enfo.efi.def new file mode 100644 index 000000000..630aea2ea --- /dev/null +++ b/definitions/mars/grib1.enfo.efi.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.efic.def b/definitions/mars/grib1.enfo.efic.def new file mode 100644 index 000000000..1fd1c4af1 --- /dev/null +++ b/definitions/mars/grib1.enfo.efic.def @@ -0,0 +1,2 @@ + +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.em.def b/definitions/mars/grib1.enfo.em.def new file mode 100644 index 000000000..d23a251e9 --- /dev/null +++ b/definitions/mars/grib1.enfo.em.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.ep.def b/definitions/mars/grib1.enfo.ep.def new file mode 100644 index 000000000..d23a251e9 --- /dev/null +++ b/definitions/mars/grib1.enfo.ep.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.es.def b/definitions/mars/grib1.enfo.es.def new file mode 100644 index 000000000..d23a251e9 --- /dev/null +++ b/definitions/mars/grib1.enfo.es.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.fc.def b/definitions/mars/grib1.enfo.fc.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.enfo.fc.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.enfo.fcmax.def b/definitions/mars/grib1.enfo.fcmax.def new file mode 100644 index 000000000..0277986e0 --- /dev/null +++ b/definitions/mars/grib1.enfo.fcmax.def @@ -0,0 +1,2 @@ +alias mars.number = perturbationNumber; +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.fcmean.def b/definitions/mars/grib1.enfo.fcmean.def new file mode 100644 index 000000000..0277986e0 --- /dev/null +++ b/definitions/mars/grib1.enfo.fcmean.def @@ -0,0 +1,2 @@ +alias mars.number = perturbationNumber; +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.fcmin.def b/definitions/mars/grib1.enfo.fcmin.def new file mode 100644 index 000000000..0277986e0 --- /dev/null +++ b/definitions/mars/grib1.enfo.fcmin.def @@ -0,0 +1,2 @@ +alias mars.number = perturbationNumber; +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.fcstdev.def b/definitions/mars/grib1.enfo.fcstdev.def new file mode 100644 index 000000000..0277986e0 --- /dev/null +++ b/definitions/mars/grib1.enfo.fcstdev.def @@ -0,0 +1,2 @@ +alias mars.number = perturbationNumber; +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.ff.def b/definitions/mars/grib1.enfo.ff.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.enfo.ff.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfo.fp.def b/definitions/mars/grib1.enfo.fp.def new file mode 100644 index 000000000..8697a1110 --- /dev/null +++ b/definitions/mars/grib1.enfo.fp.def @@ -0,0 +1,31 @@ +#TODO assert(localDefinitionNumber == 5); +# This is obsolete. Here for backward compatibility + + +if(startStep == endStep) +{ + alias mars.step = endStep; +} +else +{ + if((paramId == 131228) && (class == 1)) + { + if(startStep == endStep - 24) + { + alias mars.step = endStep; + } + else + { + transient patch_precip_fp = 24; + meta stepRange g1step_range(P1,P2,timeRangeIndicator,unitOfTimeRange,stepUnits,stepType,patch_precip_fp) : dump,read_only; + alias mars.step = stepRange; + } + } + else + { + alias mars.step = stepRange; + } +} + + +alias mars.number = forecastProbabilityNumber; diff --git a/definitions/mars/grib1.enfo.icp.def b/definitions/mars/grib1.enfo.icp.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.enfo.icp.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfo.pb.def b/definitions/mars/grib1.enfo.pb.def new file mode 100644 index 000000000..5ecc47b04 --- /dev/null +++ b/definitions/mars/grib1.enfo.pb.def @@ -0,0 +1,4 @@ +alias mars.step = stepRange; +meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); +alias mars.quantile = marsQuantile; + diff --git a/definitions/mars/grib1.enfo.pd.def b/definitions/mars/grib1.enfo.pd.def new file mode 100644 index 000000000..a53d82ca0 --- /dev/null +++ b/definitions/mars/grib1.enfo.pd.def @@ -0,0 +1,3 @@ +alias mars.step = stepRange; +meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); +alias mars.quantile = marsQuantile; diff --git a/definitions/mars/grib1.enfo.pf.def b/definitions/mars/grib1.enfo.pf.def new file mode 100644 index 000000000..df5f41102 --- /dev/null +++ b/definitions/mars/grib1.enfo.pf.def @@ -0,0 +1,2 @@ +alias mars.step = endStep; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enfo.sot.def b/definitions/mars/grib1.enfo.sot.def new file mode 100644 index 000000000..8a7bd70c9 --- /dev/null +++ b/definitions/mars/grib1.enfo.sot.def @@ -0,0 +1,2 @@ +alias mars.step = stepRange; +alias mars.number = number; diff --git a/definitions/mars/grib1.enfo.sv.def b/definitions/mars/grib1.enfo.sv.def new file mode 100644 index 000000000..4f93ff8ac --- /dev/null +++ b/definitions/mars/grib1.enfo.sv.def @@ -0,0 +1 @@ +alias mars.number = forecastOrSingularVectorNumber; diff --git a/definitions/mars/grib1.enfo.svar.def b/definitions/mars/grib1.enfo.svar.def new file mode 100644 index 000000000..4f93ff8ac --- /dev/null +++ b/definitions/mars/grib1.enfo.svar.def @@ -0,0 +1 @@ +alias mars.number = forecastOrSingularVectorNumber; diff --git a/definitions/mars/grib1.enfo.taem.def b/definitions/mars/grib1.enfo.taem.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib1.enfo.taem.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.taes.def b/definitions/mars/grib1.enfo.taes.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib1.enfo.taes.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.enfo.tu.def b/definitions/mars/grib1.enfo.tu.def new file mode 100644 index 000000000..a0f9853c5 --- /dev/null +++ b/definitions/mars/grib1.enfo.tu.def @@ -0,0 +1,3 @@ +alias mars.number = tubeNumber; +alias mars.domain = tubeDomain; +alias mars.reference = referenceStep; diff --git a/definitions/mars/grib1.enwh.cf.def b/definitions/mars/grib1.enwh.cf.def new file mode 100644 index 000000000..98a1a81dc --- /dev/null +++ b/definitions/mars/grib1.enwh.cf.def @@ -0,0 +1,2 @@ +alias mars.date = referenceDate; +alias mars.hdate = dataDate; diff --git a/definitions/mars/grib1.enwh.fcmax.def b/definitions/mars/grib1.enwh.fcmax.def new file mode 100644 index 000000000..34f58fae9 --- /dev/null +++ b/definitions/mars/grib1.enwh.fcmax.def @@ -0,0 +1,5 @@ +#assert(local=30) +alias mars.step = stepRange; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enwh.fcmean.def b/definitions/mars/grib1.enwh.fcmean.def new file mode 100644 index 000000000..34f58fae9 --- /dev/null +++ b/definitions/mars/grib1.enwh.fcmean.def @@ -0,0 +1,5 @@ +#assert(local=30) +alias mars.step = stepRange; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enwh.fcmin.def b/definitions/mars/grib1.enwh.fcmin.def new file mode 100644 index 000000000..34f58fae9 --- /dev/null +++ b/definitions/mars/grib1.enwh.fcmin.def @@ -0,0 +1,5 @@ +#assert(local=30) +alias mars.step = stepRange; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enwh.fcstdev.def b/definitions/mars/grib1.enwh.fcstdev.def new file mode 100644 index 000000000..34f58fae9 --- /dev/null +++ b/definitions/mars/grib1.enwh.fcstdev.def @@ -0,0 +1,5 @@ +#assert(local=30) +alias mars.step = stepRange; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.enwh.pf.def b/definitions/mars/grib1.enwh.pf.def new file mode 100644 index 000000000..3614de03b --- /dev/null +++ b/definitions/mars/grib1.enwh.pf.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; diff --git a/definitions/mars/grib1.esmm.em.def b/definitions/mars/grib1.esmm.em.def new file mode 100644 index 000000000..8771c1885 --- /dev/null +++ b/definitions/mars/grib1.esmm.em.def @@ -0,0 +1,6 @@ +#assert(local=31) + +alias mars.fcmonth = forecastMonth; +unalias mars.step; + +alias mars.date = referenceDate; diff --git a/definitions/mars/grib1.espd.an.def b/definitions/mars/grib1.espd.an.def new file mode 100644 index 000000000..4d5306770 --- /dev/null +++ b/definitions/mars/grib1.espd.an.def @@ -0,0 +1,13 @@ +# assert(localDefinitionNumber == 1); +alias mars.date = dataDate; +alias mars.time = dataTime; + +if (class is "od") { alias mars.origin = centre; } +if (class is "e2") { alias mars.origin = centre; } +if (class is "em") { alias mars.origin = centre; } + +# We need this because 'jDirectionIncrementInDegrees,iDirectionIncrementInDegrees,' is defined later +meta marsGrid sprintf("%g/%g",iDirectionIncrementInDegrees,jDirectionIncrementInDegrees) : dump; +alias mars.grid = marsGrid; +alias mars.number=perturbationNumber; + diff --git a/definitions/mars/grib1.ewda.4v.def b/definitions/mars/grib1.ewda.4v.def new file mode 120000 index 000000000..6dec1a74d --- /dev/null +++ b/definitions/mars/grib1.ewda.4v.def @@ -0,0 +1 @@ +grib1.ewda.def \ No newline at end of file diff --git a/definitions/mars/grib1.ewda.an.def b/definitions/mars/grib1.ewda.an.def new file mode 120000 index 000000000..6dec1a74d --- /dev/null +++ b/definitions/mars/grib1.ewda.an.def @@ -0,0 +1 @@ +grib1.ewda.def \ No newline at end of file diff --git a/definitions/mars/grib1.ewda.def b/definitions/mars/grib1.ewda.def new file mode 100644 index 000000000..4af93e55d --- /dev/null +++ b/definitions/mars/grib1.ewda.def @@ -0,0 +1 @@ +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.ewda.fc.def b/definitions/mars/grib1.ewda.fc.def new file mode 120000 index 000000000..6dec1a74d --- /dev/null +++ b/definitions/mars/grib1.ewda.fc.def @@ -0,0 +1 @@ +grib1.ewda.def \ No newline at end of file diff --git a/definitions/mars/grib1.ewhc.cf.def b/definitions/mars/grib1.ewhc.cf.def new file mode 100644 index 000000000..05e3d7aae --- /dev/null +++ b/definitions/mars/grib1.ewhc.cf.def @@ -0,0 +1 @@ +alias mars.refdate = referenceDate; diff --git a/definitions/mars/grib1.ewhc.pf.def b/definitions/mars/grib1.ewhc.pf.def new file mode 100644 index 000000000..b79945f03 --- /dev/null +++ b/definitions/mars/grib1.ewhc.pf.def @@ -0,0 +1,2 @@ +alias mars.refdate = referenceDate; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.ewho.cf.def b/definitions/mars/grib1.ewho.cf.def new file mode 100644 index 000000000..98a1a81dc --- /dev/null +++ b/definitions/mars/grib1.ewho.cf.def @@ -0,0 +1,2 @@ +alias mars.date = referenceDate; +alias mars.hdate = dataDate; diff --git a/definitions/mars/grib1.ewho.pf.def b/definitions/mars/grib1.ewho.pf.def new file mode 100644 index 000000000..3614de03b --- /dev/null +++ b/definitions/mars/grib1.ewho.pf.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.date = referenceDate; +alias mars.hdate = dataDate; diff --git a/definitions/mars/grib1.ewla.4v.def b/definitions/mars/grib1.ewla.4v.def new file mode 100644 index 000000000..ce5e03eaf --- /dev/null +++ b/definitions/mars/grib1.ewla.4v.def @@ -0,0 +1,2 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.ewla.an.def b/definitions/mars/grib1.ewla.an.def new file mode 100644 index 000000000..ce5e03eaf --- /dev/null +++ b/definitions/mars/grib1.ewla.an.def @@ -0,0 +1,2 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.ewla.fc.def b/definitions/mars/grib1.ewla.fc.def new file mode 100644 index 000000000..ce5e03eaf --- /dev/null +++ b/definitions/mars/grib1.ewla.fc.def @@ -0,0 +1,2 @@ +alias mars.anoffset=offsetToEndOf4DvarWindow; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.ewmm.an.def b/definitions/mars/grib1.ewmm.an.def new file mode 100644 index 000000000..942668e19 --- /dev/null +++ b/definitions/mars/grib1.ewmm.an.def @@ -0,0 +1,2 @@ +alias mars.step = startStep; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.ewmm.cl.def b/definitions/mars/grib1.ewmm.cl.def new file mode 100644 index 000000000..1c86b9fc4 --- /dev/null +++ b/definitions/mars/grib1.ewmm.cl.def @@ -0,0 +1,2 @@ +unalias mars.step; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.ewmm.fc.def b/definitions/mars/grib1.ewmm.fc.def new file mode 100644 index 000000000..3fcf7aa6d --- /dev/null +++ b/definitions/mars/grib1.ewmm.fc.def @@ -0,0 +1,10 @@ +# assert(local=1) +meta verificationDate g1verificationdate(dataDate, dataTime, endStep) : read_only; +meta monthlyVerificationDate g1monthlydate(verificationDate) : dump,no_copy; +alias mars.date = monthlyVerificationDate; + +# class e4 +# constant six = 6; +alias mars.step = startStep; +alias mars.number=perturbationNumber; + diff --git a/definitions/mars/grib1.ewmo.an.def b/definitions/mars/grib1.ewmo.an.def new file mode 100644 index 000000000..927c59a00 --- /dev/null +++ b/definitions/mars/grib1.ewmo.an.def @@ -0,0 +1,10 @@ +# NOTE: step is startStep + +alias mars.step = startStep; + +# Only ERA15 has time and step +if(class != 3) { + unalias mars.time; + unalias mars.step; +} +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.ewmo.cl.def b/definitions/mars/grib1.ewmo.cl.def new file mode 100644 index 000000000..a4c422487 --- /dev/null +++ b/definitions/mars/grib1.ewmo.cl.def @@ -0,0 +1,3 @@ +unalias mars.time; +unalias mars.step; +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.ewmo.def b/definitions/mars/grib1.ewmo.def new file mode 100644 index 000000000..4af93e55d --- /dev/null +++ b/definitions/mars/grib1.ewmo.def @@ -0,0 +1 @@ +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.ewmo.fc.def b/definitions/mars/grib1.ewmo.fc.def new file mode 100644 index 000000000..0ff84753f --- /dev/null +++ b/definitions/mars/grib1.ewmo.fc.def @@ -0,0 +1,13 @@ +# assert(local=1) +# NOTE: verificationDate based on startStep + +meta verificationDate g1verificationdate(dataDate, dataTime, startStep) : read_only; +alias mars.date = verificationDate; +alias mars.step = startStep; + +# Only ERA15 has time and step +if(class != 3) { + unalias mars.time; + unalias mars.step; +} +alias mars.number=perturbationNumber; diff --git a/definitions/mars/grib1.kwbc.pf.def b/definitions/mars/grib1.kwbc.pf.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.kwbc.pf.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.lwda.4i.def b/definitions/mars/grib1.lwda.4i.def new file mode 100644 index 000000000..3a9b65eea --- /dev/null +++ b/definitions/mars/grib1.lwda.4i.def @@ -0,0 +1,3 @@ +alias mars.iteration = iterationNumber; +alias mars.anoffset=offsetToEndOf4DvarWindow; + diff --git a/definitions/mars/grib1.lwda.4v.def b/definitions/mars/grib1.lwda.4v.def new file mode 100644 index 000000000..8890843c7 --- /dev/null +++ b/definitions/mars/grib1.lwda.4v.def @@ -0,0 +1,3 @@ +label "x"; +alias mars.anoffset=offsetToEndOf4DvarWindow; + diff --git a/definitions/mars/grib1.lwda.an.def b/definitions/mars/grib1.lwda.an.def new file mode 100644 index 000000000..8890843c7 --- /dev/null +++ b/definitions/mars/grib1.lwda.an.def @@ -0,0 +1,3 @@ +label "x"; +alias mars.anoffset=offsetToEndOf4DvarWindow; + diff --git a/definitions/mars/grib1.lwda.ea.def b/definitions/mars/grib1.lwda.ea.def new file mode 100644 index 000000000..8890843c7 --- /dev/null +++ b/definitions/mars/grib1.lwda.ea.def @@ -0,0 +1,3 @@ +label "x"; +alias mars.anoffset=offsetToEndOf4DvarWindow; + diff --git a/definitions/mars/grib1.lwda.ef.def b/definitions/mars/grib1.lwda.ef.def new file mode 100644 index 000000000..8890843c7 --- /dev/null +++ b/definitions/mars/grib1.lwda.ef.def @@ -0,0 +1,3 @@ +label "x"; +alias mars.anoffset=offsetToEndOf4DvarWindow; + diff --git a/definitions/mars/grib1.lwda.fc.def b/definitions/mars/grib1.lwda.fc.def new file mode 100644 index 000000000..47d0c50fe --- /dev/null +++ b/definitions/mars/grib1.lwda.fc.def @@ -0,0 +1,3 @@ +alias mars.step = endStep; +alias mars.anoffset=offsetToEndOf4DvarWindow; + diff --git a/definitions/mars/grib1.lwda.me.def b/definitions/mars/grib1.lwda.me.def new file mode 100644 index 000000000..6a00ee4c4 --- /dev/null +++ b/definitions/mars/grib1.lwda.me.def @@ -0,0 +1,4 @@ +label "model errors"; +#alias mars.number=perturbationNumber; +alias mars.anoffset=offsetToEndOf4DvarWindow; + diff --git a/definitions/mars/grib1.lwwv.4v.def b/definitions/mars/grib1.lwwv.4v.def new file mode 100644 index 000000000..8e31201bc --- /dev/null +++ b/definitions/mars/grib1.lwwv.4v.def @@ -0,0 +1,4 @@ +transient conceptDir = "mars"; +concept waveDomain(unknown,"wave_domain.def",conceptDir,conceptDir) : no_copy,read_only; +alias mars.domain = waveDomain; +alias mars.anoffset=offsetToEndOf4DvarWindow; diff --git a/definitions/mars/grib1.lwwv.an.def b/definitions/mars/grib1.lwwv.an.def new file mode 100644 index 000000000..8e31201bc --- /dev/null +++ b/definitions/mars/grib1.lwwv.an.def @@ -0,0 +1,4 @@ +transient conceptDir = "mars"; +concept waveDomain(unknown,"wave_domain.def",conceptDir,conceptDir) : no_copy,read_only; +alias mars.domain = waveDomain; +alias mars.anoffset=offsetToEndOf4DvarWindow; diff --git a/definitions/mars/grib1.lwwv.fc.def b/definitions/mars/grib1.lwwv.fc.def new file mode 100644 index 000000000..8e31201bc --- /dev/null +++ b/definitions/mars/grib1.lwwv.fc.def @@ -0,0 +1,4 @@ +transient conceptDir = "mars"; +concept waveDomain(unknown,"wave_domain.def",conceptDir,conceptDir) : no_copy,read_only; +alias mars.domain = waveDomain; +alias mars.anoffset=offsetToEndOf4DvarWindow; diff --git a/definitions/mars/grib1.maed.an.def b/definitions/mars/grib1.maed.an.def new file mode 100644 index 000000000..92b353cea --- /dev/null +++ b/definitions/mars/grib1.maed.an.def @@ -0,0 +1 @@ +alias mars.origin = dataOrigin; diff --git a/definitions/mars/grib1.maed.fc.def b/definitions/mars/grib1.maed.fc.def new file mode 100644 index 000000000..92b353cea --- /dev/null +++ b/definitions/mars/grib1.maed.fc.def @@ -0,0 +1 @@ +alias mars.origin = dataOrigin; diff --git a/definitions/mars/grib1.mawv.fc.def b/definitions/mars/grib1.mawv.fc.def new file mode 100644 index 000000000..92b353cea --- /dev/null +++ b/definitions/mars/grib1.mawv.fc.def @@ -0,0 +1 @@ +alias mars.origin = dataOrigin; diff --git a/definitions/mars/grib1.mdfa.fc.def b/definitions/mars/grib1.mdfa.fc.def new file mode 100644 index 000000000..63d270822 --- /dev/null +++ b/definitions/mars/grib1.mdfa.fc.def @@ -0,0 +1,3 @@ +# assert(localDefinitionNumber == 1); +alias mars.step = stepRange; +unalias mars.time; diff --git a/definitions/mars/grib1.me.def b/definitions/mars/grib1.me.def new file mode 100644 index 000000000..54a486085 --- /dev/null +++ b/definitions/mars/grib1.me.def @@ -0,0 +1,3 @@ +label "model errors"; +#alias mars.number=perturbationNumber; + diff --git a/definitions/mars/grib1.mfam.em.def b/definitions/mars/grib1.mfam.em.def new file mode 100644 index 000000000..054adbcc9 --- /dev/null +++ b/definitions/mars/grib1.mfam.em.def @@ -0,0 +1,8 @@ +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfam.fcmean.def b/definitions/mars/grib1.mfam.fcmean.def new file mode 100644 index 000000000..6085a05a5 --- /dev/null +++ b/definitions/mars/grib1.mfam.fcmean.def @@ -0,0 +1,9 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; + +unalias mars.step; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfam.fp.def b/definitions/mars/grib1.mfam.fp.def new file mode 100644 index 000000000..054adbcc9 --- /dev/null +++ b/definitions/mars/grib1.mfam.fp.def @@ -0,0 +1,8 @@ +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfam.pb.def b/definitions/mars/grib1.mfam.pb.def new file mode 100644 index 000000000..27df3cc1b --- /dev/null +++ b/definitions/mars/grib1.mfam.pb.def @@ -0,0 +1,14 @@ +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; + +meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); +alias mars.quantile = marsQuantile; + +# TODO: Check why they are set in the first place +unalias mars.step; +unalias mars.number; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfam.pd.def b/definitions/mars/grib1.mfam.pd.def new file mode 100644 index 000000000..96f272f62 --- /dev/null +++ b/definitions/mars/grib1.mfam.pd.def @@ -0,0 +1,13 @@ +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; + +meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble); +alias mars.quantile = marsQuantile; + +# TODO: Check why they are set in the first place +unalias mars.step; +unalias mars.number; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfhm.em.def b/definitions/mars/grib1.mfhm.em.def new file mode 100644 index 000000000..381662b97 --- /dev/null +++ b/definitions/mars/grib1.mfhm.em.def @@ -0,0 +1,10 @@ +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.refdate = referenceDate; +unalias mars.date; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfhm.es.def b/definitions/mars/grib1.mfhm.es.def new file mode 100644 index 000000000..381662b97 --- /dev/null +++ b/definitions/mars/grib1.mfhm.es.def @@ -0,0 +1,10 @@ +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.refdate = referenceDate; +unalias mars.date; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfhm.fcmax.def b/definitions/mars/grib1.mfhm.fcmax.def new file mode 100644 index 000000000..0c5d0646b --- /dev/null +++ b/definitions/mars/grib1.mfhm.fcmax.def @@ -0,0 +1,10 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.refdate = referenceDate; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfhm.fcmean.def b/definitions/mars/grib1.mfhm.fcmean.def new file mode 100644 index 000000000..0c5d0646b --- /dev/null +++ b/definitions/mars/grib1.mfhm.fcmean.def @@ -0,0 +1,10 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.refdate = referenceDate; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfhm.fcmin.def b/definitions/mars/grib1.mfhm.fcmin.def new file mode 100644 index 000000000..0c5d0646b --- /dev/null +++ b/definitions/mars/grib1.mfhm.fcmin.def @@ -0,0 +1,10 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.refdate = referenceDate; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfhm.fcstdev.def b/definitions/mars/grib1.mfhm.fcstdev.def new file mode 100644 index 000000000..0c5d0646b --- /dev/null +++ b/definitions/mars/grib1.mfhm.fcstdev.def @@ -0,0 +1,10 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.refdate = referenceDate; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfhw.cf.def b/definitions/mars/grib1.mfhw.cf.def new file mode 100644 index 000000000..da6794885 --- /dev/null +++ b/definitions/mars/grib1.mfhw.cf.def @@ -0,0 +1,6 @@ +#assert(local=23) +alias mars.method = methodNumber; +alias mars.origin = centre; + +alias mars.refdate = referenceDate; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfhw.fc.def b/definitions/mars/grib1.mfhw.fc.def new file mode 100644 index 000000000..62af84a0c --- /dev/null +++ b/definitions/mars/grib1.mfhw.fc.def @@ -0,0 +1,6 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +alias mars.origin = centre; + +alias mars.refdate = referenceDate; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfwm.fcmax.def b/definitions/mars/grib1.mfwm.fcmax.def new file mode 100644 index 000000000..fff22f47e --- /dev/null +++ b/definitions/mars/grib1.mfwm.fcmax.def @@ -0,0 +1,9 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfwm.fcmean.def b/definitions/mars/grib1.mfwm.fcmean.def new file mode 100644 index 000000000..fff22f47e --- /dev/null +++ b/definitions/mars/grib1.mfwm.fcmean.def @@ -0,0 +1,9 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfwm.fcmin.def b/definitions/mars/grib1.mfwm.fcmin.def new file mode 100644 index 000000000..fff22f47e --- /dev/null +++ b/definitions/mars/grib1.mfwm.fcmin.def @@ -0,0 +1,9 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mfwm.fcstdev.def b/definitions/mars/grib1.mfwm.fcstdev.def new file mode 100644 index 000000000..fff22f47e --- /dev/null +++ b/definitions/mars/grib1.mfwm.fcstdev.def @@ -0,0 +1,9 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mhwm.fcmax.def b/definitions/mars/grib1.mhwm.fcmax.def new file mode 100644 index 000000000..0c5d0646b --- /dev/null +++ b/definitions/mars/grib1.mhwm.fcmax.def @@ -0,0 +1,10 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.refdate = referenceDate; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mhwm.fcmean.def b/definitions/mars/grib1.mhwm.fcmean.def new file mode 100644 index 000000000..0c5d0646b --- /dev/null +++ b/definitions/mars/grib1.mhwm.fcmean.def @@ -0,0 +1,10 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.refdate = referenceDate; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mhwm.fcmin.def b/definitions/mars/grib1.mhwm.fcmin.def new file mode 100644 index 000000000..0c5d0646b --- /dev/null +++ b/definitions/mars/grib1.mhwm.fcmin.def @@ -0,0 +1,10 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.refdate = referenceDate; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mhwm.fcstdev.def b/definitions/mars/grib1.mhwm.fcstdev.def new file mode 100644 index 000000000..0c5d0646b --- /dev/null +++ b/definitions/mars/grib1.mhwm.fcstdev.def @@ -0,0 +1,10 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.refdate = referenceDate; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mmaf.fc.def b/definitions/mars/grib1.mmaf.fc.def new file mode 100644 index 000000000..f7766bcd5 --- /dev/null +++ b/definitions/mars/grib1.mmaf.fc.def @@ -0,0 +1,5 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mmaf.fcmean.def b/definitions/mars/grib1.mmaf.fcmean.def new file mode 100644 index 000000000..48ddc47de --- /dev/null +++ b/definitions/mars/grib1.mmaf.fcmean.def @@ -0,0 +1,2 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.mmam.fcmean.def b/definitions/mars/grib1.mmam.fcmean.def new file mode 100644 index 000000000..a2ece7923 --- /dev/null +++ b/definitions/mars/grib1.mmam.fcmean.def @@ -0,0 +1,8 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; +alias mars.fcmonth = marsForecastMonth; +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mmsa.em.def b/definitions/mars/grib1.mmsa.em.def new file mode 100644 index 000000000..1f0a95a1c --- /dev/null +++ b/definitions/mars/grib1.mmsa.em.def @@ -0,0 +1,6 @@ +alias mars.origin = centre; +alias mars.fcmonth = marsForecastMonth; +unalias mars.step; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } + diff --git a/definitions/mars/grib1.mmsa.fcmean.def b/definitions/mars/grib1.mmsa.fcmean.def new file mode 100644 index 000000000..3c83a984a --- /dev/null +++ b/definitions/mars/grib1.mmsa.fcmean.def @@ -0,0 +1,7 @@ +alias mars.origin = centre; +alias mars.fcmonth = marsForecastMonth; +unalias mars.step; +alias mars.number = perturbationNumber; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mmsf.fc.def b/definitions/mars/grib1.mmsf.fc.def new file mode 100644 index 000000000..c94d9d878 --- /dev/null +++ b/definitions/mars/grib1.mmsf.fc.def @@ -0,0 +1,7 @@ +alias mars.step = endStep; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +alias mars.origin = centre; diff --git a/definitions/mars/grib1.mmsf.icp.def b/definitions/mars/grib1.mmsf.icp.def new file mode 100644 index 000000000..b294d1c95 --- /dev/null +++ b/definitions/mars/grib1.mmsf.icp.def @@ -0,0 +1,5 @@ +alias mars.number = perturbationNumber; +alias mars.origin = centre; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } + diff --git a/definitions/mars/grib1.mnfc.cf.def b/definitions/mars/grib1.mnfc.cf.def new file mode 100644 index 000000000..86a73ba34 --- /dev/null +++ b/definitions/mars/grib1.mnfc.cf.def @@ -0,0 +1,3 @@ +alias mars.method = methodNumber; +alias mars.origin = centre; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfc.ed.def b/definitions/mars/grib1.mnfc.ed.def new file mode 100644 index 000000000..761bba8de --- /dev/null +++ b/definitions/mars/grib1.mnfc.ed.def @@ -0,0 +1,6 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; + + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfc.em.def b/definitions/mars/grib1.mnfc.em.def new file mode 100644 index 000000000..47b6479b9 --- /dev/null +++ b/definitions/mars/grib1.mnfc.em.def @@ -0,0 +1,4 @@ +alias mars.origin = centre; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfc.es.def b/definitions/mars/grib1.mnfc.es.def new file mode 100644 index 000000000..07a9e3c6f --- /dev/null +++ b/definitions/mars/grib1.mnfc.es.def @@ -0,0 +1,3 @@ +alias mars.origin = centre; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfc.fc.def b/definitions/mars/grib1.mnfc.fc.def new file mode 100644 index 000000000..72dd8bc7d --- /dev/null +++ b/definitions/mars/grib1.mnfc.fc.def @@ -0,0 +1,4 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +alias mars.origin = centre; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfc.ff.def b/definitions/mars/grib1.mnfc.ff.def new file mode 100644 index 000000000..5a5389a77 --- /dev/null +++ b/definitions/mars/grib1.mnfc.ff.def @@ -0,0 +1,4 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfc.icp.def b/definitions/mars/grib1.mnfc.icp.def new file mode 100644 index 000000000..72dd8bc7d --- /dev/null +++ b/definitions/mars/grib1.mnfc.icp.def @@ -0,0 +1,4 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +alias mars.origin = centre; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfc.of.def b/definitions/mars/grib1.mnfc.of.def new file mode 100644 index 000000000..5a5389a77 --- /dev/null +++ b/definitions/mars/grib1.mnfc.of.def @@ -0,0 +1,4 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfh.cf.def b/definitions/mars/grib1.mnfh.cf.def new file mode 100644 index 000000000..da6794885 --- /dev/null +++ b/definitions/mars/grib1.mnfh.cf.def @@ -0,0 +1,6 @@ +#assert(local=23) +alias mars.method = methodNumber; +alias mars.origin = centre; + +alias mars.refdate = referenceDate; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfh.ed.def b/definitions/mars/grib1.mnfh.ed.def new file mode 100644 index 000000000..256f7c5c9 --- /dev/null +++ b/definitions/mars/grib1.mnfh.ed.def @@ -0,0 +1,7 @@ +alias mars.number = perturbationNumber; +alias mars.refdate = referenceDate; +alias mars.origin = centre; +unalias mars.date; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfh.em.def b/definitions/mars/grib1.mnfh.em.def new file mode 100644 index 000000000..be185d701 --- /dev/null +++ b/definitions/mars/grib1.mnfh.em.def @@ -0,0 +1,5 @@ +alias mars.refdate = referenceDate; +alias mars.origin = centre; +unalias mars.date; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfh.es.def b/definitions/mars/grib1.mnfh.es.def new file mode 100644 index 000000000..be185d701 --- /dev/null +++ b/definitions/mars/grib1.mnfh.es.def @@ -0,0 +1,5 @@ +alias mars.refdate = referenceDate; +alias mars.origin = centre; +unalias mars.date; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfh.fc.def b/definitions/mars/grib1.mnfh.fc.def new file mode 100644 index 000000000..62af84a0c --- /dev/null +++ b/definitions/mars/grib1.mnfh.fc.def @@ -0,0 +1,6 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +alias mars.origin = centre; + +alias mars.refdate = referenceDate; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfh.icp.def b/definitions/mars/grib1.mnfh.icp.def new file mode 100644 index 000000000..a1c213b21 --- /dev/null +++ b/definitions/mars/grib1.mnfh.icp.def @@ -0,0 +1,5 @@ +alias mars.number = perturbationNumber; +alias mars.refdate = referenceDate; +alias mars.origin = centre; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfm.em.def b/definitions/mars/grib1.mnfm.em.def new file mode 100644 index 000000000..054adbcc9 --- /dev/null +++ b/definitions/mars/grib1.mnfm.em.def @@ -0,0 +1,8 @@ +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfm.es.def b/definitions/mars/grib1.mnfm.es.def new file mode 100644 index 000000000..054adbcc9 --- /dev/null +++ b/definitions/mars/grib1.mnfm.es.def @@ -0,0 +1,8 @@ +alias mars.origin = centre; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfm.fcmax.def b/definitions/mars/grib1.mnfm.fcmax.def new file mode 100644 index 000000000..4fdd23bf1 --- /dev/null +++ b/definitions/mars/grib1.mnfm.fcmax.def @@ -0,0 +1,8 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfm.fcmean.def b/definitions/mars/grib1.mnfm.fcmean.def new file mode 100644 index 000000000..4fdd23bf1 --- /dev/null +++ b/definitions/mars/grib1.mnfm.fcmean.def @@ -0,0 +1,8 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfm.fcmin.def b/definitions/mars/grib1.mnfm.fcmin.def new file mode 100644 index 000000000..4fdd23bf1 --- /dev/null +++ b/definitions/mars/grib1.mnfm.fcmin.def @@ -0,0 +1,8 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfm.fcstdev.def b/definitions/mars/grib1.mnfm.fcstdev.def new file mode 100644 index 000000000..4fdd23bf1 --- /dev/null +++ b/definitions/mars/grib1.mnfm.fcstdev.def @@ -0,0 +1,8 @@ +alias mars.origin = centre; +alias mars.number = perturbationNumber; + +meta forecastperiod g1fcperiod(P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange) : no_copy; +alias mars.fcperiod = forecastperiod; +unalias mars.step; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfw.cf.def b/definitions/mars/grib1.mnfw.cf.def new file mode 100644 index 000000000..86a73ba34 --- /dev/null +++ b/definitions/mars/grib1.mnfw.cf.def @@ -0,0 +1,3 @@ +alias mars.method = methodNumber; +alias mars.origin = centre; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnfw.fc.def b/definitions/mars/grib1.mnfw.fc.def new file mode 100644 index 000000000..72dd8bc7d --- /dev/null +++ b/definitions/mars/grib1.mnfw.fc.def @@ -0,0 +1,4 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +alias mars.origin = centre; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mnth.an.def b/definitions/mars/grib1.mnth.an.def new file mode 100644 index 000000000..e06aac5ae --- /dev/null +++ b/definitions/mars/grib1.mnth.an.def @@ -0,0 +1,2 @@ +# class e4 +alias mars.step = startStep; diff --git a/definitions/mars/grib1.mnth.cl.def b/definitions/mars/grib1.mnth.cl.def new file mode 100644 index 000000000..3de9bbb32 --- /dev/null +++ b/definitions/mars/grib1.mnth.cl.def @@ -0,0 +1 @@ +unalias mars.step; diff --git a/definitions/mars/grib1.mnth.fc.def b/definitions/mars/grib1.mnth.fc.def new file mode 100644 index 000000000..86d97ba0c --- /dev/null +++ b/definitions/mars/grib1.mnth.fc.def @@ -0,0 +1,8 @@ +# assert(local=1) +meta verificationDate g1verificationdate(dataDate, dataTime, endStep) : read_only; +meta monthlyVerificationDate g1monthlydate(verificationDate) : dump,no_copy; +alias mars.date = monthlyVerificationDate; + +# class e4 +# constant six = 6; +alias mars.step = startStep; diff --git a/definitions/mars/grib1.mnth.fg.def b/definitions/mars/grib1.mnth.fg.def new file mode 100644 index 000000000..086dc11d4 --- /dev/null +++ b/definitions/mars/grib1.mnth.fg.def @@ -0,0 +1,10 @@ +#if(centre == ECMWF ) { +#meta fgDate validity_date(dataDate,dataTime,endStep) : no_copy; +#meta fgTime validity_time(dataDate,dataTime,endStep) : no_copy; + +#alias mars.date = fgDate; +#alias mars.time = fgTime; +#alias mars.step = startStep; +#} + +label "x"; diff --git a/definitions/mars/grib1.mnth.ia.def b/definitions/mars/grib1.mnth.ia.def new file mode 100644 index 000000000..e06aac5ae --- /dev/null +++ b/definitions/mars/grib1.mnth.ia.def @@ -0,0 +1,2 @@ +# class e4 +alias mars.step = startStep; diff --git a/definitions/mars/grib1.mnth.ssd.def b/definitions/mars/grib1.mnth.ssd.def new file mode 100644 index 000000000..4d4ca9a40 --- /dev/null +++ b/definitions/mars/grib1.mnth.ssd.def @@ -0,0 +1,12 @@ +# assert(local=1) +meta verificationDate g1verificationdate(dataDate, dataTime, endStep) : read_only; +meta monthlyVerificationDate g1monthlydate(verificationDate) : dump,no_copy; +alias mars.date = monthlyVerificationDate; + +# class e4 +# constant six = 6; +alias mars.step = startStep; + +alias mars.instrument = instrumentType; +alias mars.ident = satelliteNumber; + diff --git a/definitions/mars/grib1.moda.an.def b/definitions/mars/grib1.moda.an.def new file mode 100644 index 000000000..2adc555c2 --- /dev/null +++ b/definitions/mars/grib1.moda.an.def @@ -0,0 +1,9 @@ +# NOTE: step is startStep + +alias mars.step = startStep; + +# Only ERA15 has time and step +if(class != 3) { + unalias mars.time; + unalias mars.step; +} diff --git a/definitions/mars/grib1.moda.cl.def b/definitions/mars/grib1.moda.cl.def new file mode 100644 index 000000000..74b5936e8 --- /dev/null +++ b/definitions/mars/grib1.moda.cl.def @@ -0,0 +1,2 @@ +unalias mars.time; +unalias mars.step; diff --git a/definitions/mars/grib1.moda.fc.def b/definitions/mars/grib1.moda.fc.def new file mode 100644 index 000000000..cdd96c567 --- /dev/null +++ b/definitions/mars/grib1.moda.fc.def @@ -0,0 +1,12 @@ +# assert(local=1) +# NOTE: verificationDate based on startStep + +meta verificationDate g1verificationdate(dataDate, dataTime, startStep) : read_only; +alias mars.date = verificationDate; +alias mars.step = startStep; + +# Only ERA15 has time and step +if(class != 3) { + unalias mars.time; + unalias mars.step; +} diff --git a/definitions/mars/grib1.moda.ssd.def b/definitions/mars/grib1.moda.ssd.def new file mode 100644 index 000000000..da4a8c69a --- /dev/null +++ b/definitions/mars/grib1.moda.ssd.def @@ -0,0 +1,16 @@ +# assert(local=1) +# NOTE: verificationDate based on startStep + +meta verificationDate g1verificationdate(dataDate, dataTime, startStep) : read_only; +alias mars.date = verificationDate; +alias mars.step = startStep; + +# Only ERA15 has time and step +if(class != 3) { + unalias mars.time; + unalias mars.step; +} + +alias mars.instrument = instrumentType; +alias mars.ident = satelliteNumber; + diff --git a/definitions/mars/grib1.mofc.cf.def b/definitions/mars/grib1.mofc.cf.def new file mode 100644 index 000000000..5d777edb3 --- /dev/null +++ b/definitions/mars/grib1.mofc.cf.def @@ -0,0 +1,2 @@ +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mofc.ed.def b/definitions/mars/grib1.mofc.ed.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.mofc.ed.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mofc.em.def b/definitions/mars/grib1.mofc.em.def new file mode 100644 index 000000000..5d777edb3 --- /dev/null +++ b/definitions/mars/grib1.mofc.em.def @@ -0,0 +1,2 @@ +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mofc.es.def b/definitions/mars/grib1.mofc.es.def new file mode 100644 index 000000000..5d777edb3 --- /dev/null +++ b/definitions/mars/grib1.mofc.es.def @@ -0,0 +1,2 @@ +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mofc.fc.def b/definitions/mars/grib1.mofc.fc.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.mofc.fc.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mofc.ff.def b/definitions/mars/grib1.mofc.ff.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.mofc.ff.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mofc.of.def b/definitions/mars/grib1.mofc.of.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.mofc.of.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mofm.fcmax.def b/definitions/mars/grib1.mofm.fcmax.def new file mode 100644 index 000000000..43d6b856a --- /dev/null +++ b/definitions/mars/grib1.mofm.fcmax.def @@ -0,0 +1,12 @@ +alias mars.number = perturbationNumber; +unalias mars.step; + +# Old GRIBS do not have forecast forecastMonth set. It is computed from verifyingMonth + +meta forecastPeriodFrom evaluate(verifyingMonth/1000) : no_copy; +meta forecastPeriodTo evaluate(verifyingMonth%1000) : no_copy; +meta forecastPeriod sprintf("%d-%d",forecastPeriodFrom,forecastPeriodTo) : dump; +alias mars.fcperiod = forecastPeriod; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mofm.fcmean.def b/definitions/mars/grib1.mofm.fcmean.def new file mode 100644 index 000000000..ba7077cbc --- /dev/null +++ b/definitions/mars/grib1.mofm.fcmean.def @@ -0,0 +1,12 @@ +alias mars.number = perturbationNumber; +unalias mars.step; + +# Old GRIBS do not have forecast forecastMonth set. It is computed from verifyingMonth + +meta forecastPeriodFrom evaluate(verifyingMonth/1000) : no_copy; +meta forecastPeriodTo evaluate(verifyingMonth%1000) : no_copy; +meta forecastPeriod sprintf("%d-%d",forecastPeriodFrom,forecastPeriodTo) : dump; +alias mars.fcperiod = forecastPeriod; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mofm.fcmin.def b/definitions/mars/grib1.mofm.fcmin.def new file mode 100644 index 000000000..ba7077cbc --- /dev/null +++ b/definitions/mars/grib1.mofm.fcmin.def @@ -0,0 +1,12 @@ +alias mars.number = perturbationNumber; +unalias mars.step; + +# Old GRIBS do not have forecast forecastMonth set. It is computed from verifyingMonth + +meta forecastPeriodFrom evaluate(verifyingMonth/1000) : no_copy; +meta forecastPeriodTo evaluate(verifyingMonth%1000) : no_copy; +meta forecastPeriod sprintf("%d-%d",forecastPeriodFrom,forecastPeriodTo) : dump; +alias mars.fcperiod = forecastPeriod; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mofm.fcstdev.def b/definitions/mars/grib1.mofm.fcstdev.def new file mode 100644 index 000000000..ba7077cbc --- /dev/null +++ b/definitions/mars/grib1.mofm.fcstdev.def @@ -0,0 +1,12 @@ +alias mars.number = perturbationNumber; +unalias mars.step; + +# Old GRIBS do not have forecast forecastMonth set. It is computed from verifyingMonth + +meta forecastPeriodFrom evaluate(verifyingMonth/1000) : no_copy; +meta forecastPeriodTo evaluate(verifyingMonth%1000) : no_copy; +meta forecastPeriod sprintf("%d-%d",forecastPeriodFrom,forecastPeriodTo) : dump; +alias mars.fcperiod = forecastPeriod; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.mpic.s3.def b/definitions/mars/grib1.mpic.s3.def new file mode 100644 index 000000000..0c3b2106e --- /dev/null +++ b/definitions/mars/grib1.mpic.s3.def @@ -0,0 +1,3 @@ +# 360 year dates +meta dayOfTheYearDate g1day_of_the_year_date(centuryOfReferenceTimeOfData,yearOfCentury,month,day) : dump,no_copy; +alias mars.date = dayOfTheYearDate; diff --git a/definitions/mars/grib1.msda.an.def b/definitions/mars/grib1.msda.an.def new file mode 100644 index 000000000..74b5936e8 --- /dev/null +++ b/definitions/mars/grib1.msda.an.def @@ -0,0 +1,2 @@ +unalias mars.time; +unalias mars.step; diff --git a/definitions/mars/grib1.msdc.an.def b/definitions/mars/grib1.msdc.an.def new file mode 100644 index 000000000..e06aac5ae --- /dev/null +++ b/definitions/mars/grib1.msdc.an.def @@ -0,0 +1,2 @@ +# class e4 +alias mars.step = startStep; diff --git a/definitions/mars/grib1.msdc.fc.def b/definitions/mars/grib1.msdc.fc.def new file mode 100644 index 000000000..bc1011951 --- /dev/null +++ b/definitions/mars/grib1.msdc.fc.def @@ -0,0 +1,6 @@ +# assert(local=1) +# NOTE: verificationDate is based on startStep +meta verificationDate g1verificationdate(dataDate, dataTime, startStep) : read_only; +alias mars.date = verificationDate; +alias mars.step = startStep; + diff --git a/definitions/mars/grib1.msmm.em.def b/definitions/mars/grib1.msmm.em.def new file mode 100644 index 000000000..7466b76b9 --- /dev/null +++ b/definitions/mars/grib1.msmm.em.def @@ -0,0 +1,10 @@ +# assert(16); +alias mars.fcmonth = marsForecastMonth; +unalias mars.step; + +alias mars.origin = centre; +alias mars.method = methodNumber; + +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.msmm.fcmax.def b/definitions/mars/grib1.msmm.fcmax.def new file mode 100644 index 000000000..3dc8d4f92 --- /dev/null +++ b/definitions/mars/grib1.msmm.fcmax.def @@ -0,0 +1,11 @@ +# assert(16); +alias mars.fcmonth = marsForecastMonth; +unalias mars.step; + +alias mars.number = perturbationNumber; +alias mars.origin = centre; +alias mars.method = methodNumber; + +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.msmm.fcmean.def b/definitions/mars/grib1.msmm.fcmean.def new file mode 100644 index 000000000..d6a55b355 --- /dev/null +++ b/definitions/mars/grib1.msmm.fcmean.def @@ -0,0 +1,11 @@ +# assert(16); +alias mars.fcmonth = marsForecastMonth; +alias mars.number = perturbationNumber; +alias mars.origin = centre; +alias mars.method = methodNumber; + +unalias mars.step; + +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.msmm.fcmin.def b/definitions/mars/grib1.msmm.fcmin.def new file mode 100644 index 000000000..dd555297c --- /dev/null +++ b/definitions/mars/grib1.msmm.fcmin.def @@ -0,0 +1,11 @@ +# assert(16); +alias mars.fcmonth = marsForecastMonth; +unalias mars.step; +alias mars.number = perturbationNumber; +alias mars.origin = centre; +alias mars.method = methodNumber; + + +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.msmm.fcstdev.def b/definitions/mars/grib1.msmm.fcstdev.def new file mode 100644 index 000000000..dc77d5a0e --- /dev/null +++ b/definitions/mars/grib1.msmm.fcstdev.def @@ -0,0 +1,12 @@ +# assert(16); +alias mars.fcmonth = marsForecastMonth; +alias mars.number = perturbationNumber; +alias mars.origin = centre; + +unalias mars.step; + +alias mars.method = methodNumber; + +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.msmm.hcmean.def b/definitions/mars/grib1.msmm.hcmean.def new file mode 120000 index 000000000..d2737669b --- /dev/null +++ b/definitions/mars/grib1.msmm.hcmean.def @@ -0,0 +1 @@ +grib1.msmm.em.def \ No newline at end of file diff --git a/definitions/mars/grib1.ocea.an.def b/definitions/mars/grib1.ocea.an.def new file mode 100644 index 000000000..d682c50bd --- /dev/null +++ b/definitions/mars/grib1.ocea.an.def @@ -0,0 +1,5 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.ocea.ff.def b/definitions/mars/grib1.ocea.ff.def new file mode 100644 index 000000000..d682c50bd --- /dev/null +++ b/definitions/mars/grib1.ocea.ff.def @@ -0,0 +1,5 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.ocea.fx.def b/definitions/mars/grib1.ocea.fx.def new file mode 100644 index 000000000..d682c50bd --- /dev/null +++ b/definitions/mars/grib1.ocea.fx.def @@ -0,0 +1,5 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.ocea.of.def b/definitions/mars/grib1.ocea.of.def new file mode 100644 index 000000000..d682c50bd --- /dev/null +++ b/definitions/mars/grib1.ocea.of.def @@ -0,0 +1,5 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.ocea.or.def b/definitions/mars/grib1.ocea.or.def new file mode 100644 index 000000000..d682c50bd --- /dev/null +++ b/definitions/mars/grib1.ocea.or.def @@ -0,0 +1,5 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.oper.3v.def b/definitions/mars/grib1.oper.3v.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.oper.3v.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.oper.4i.def b/definitions/mars/grib1.oper.4i.def new file mode 100644 index 000000000..01d7dbe1d --- /dev/null +++ b/definitions/mars/grib1.oper.4i.def @@ -0,0 +1 @@ +alias mars.iteration = iterationNumber; diff --git a/definitions/mars/grib1.oper.4v.def b/definitions/mars/grib1.oper.4v.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.oper.4v.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.oper.an.def b/definitions/mars/grib1.oper.an.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.oper.an.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.oper.ea.def b/definitions/mars/grib1.oper.ea.def new file mode 100644 index 000000000..010a5c1df --- /dev/null +++ b/definitions/mars/grib1.oper.ea.def @@ -0,0 +1,4 @@ +if(class == 8) # ELDAS +{ + alias mars.origin = centre; +} diff --git a/definitions/mars/grib1.oper.ef.def b/definitions/mars/grib1.oper.ef.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.oper.ef.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.oper.fa.def b/definitions/mars/grib1.oper.fa.def new file mode 100644 index 000000000..2c52aed36 --- /dev/null +++ b/definitions/mars/grib1.oper.fa.def @@ -0,0 +1,3 @@ +#TODO assert(localDefinitionNumber == 8); + +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.oper.fc.def b/definitions/mars/grib1.oper.fc.def new file mode 100644 index 000000000..a7a404bc3 --- /dev/null +++ b/definitions/mars/grib1.oper.fc.def @@ -0,0 +1 @@ +alias mars.step = endStep; diff --git a/definitions/mars/grib1.oper.fg.def b/definitions/mars/grib1.oper.fg.def new file mode 100644 index 000000000..f67274873 --- /dev/null +++ b/definitions/mars/grib1.oper.fg.def @@ -0,0 +1,7 @@ +if (centre == 98 ) { + meta fgDate validity_date(dataDate,dataTime,endStep) : no_copy; + meta fgTime validity_time(dataDate,dataTime,endStep) : no_copy; + + alias mars.date = fgDate; + alias mars.time = fgTime; +} diff --git a/definitions/mars/grib1.oper.go.def b/definitions/mars/grib1.oper.go.def new file mode 100644 index 000000000..b11baac2d --- /dev/null +++ b/definitions/mars/grib1.oper.go.def @@ -0,0 +1,12 @@ +if(class != 8) # ELDAS +{ + # We need this because 'N' is defined later + meta marsGrid sprintf("%d",N) : dump; + alias mars.grid = marsGrid; +} +else +{ + alias mars.origin = centre; +} + + diff --git a/definitions/mars/grib1.oper.ia.def b/definitions/mars/grib1.oper.ia.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.oper.ia.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.oper.im.def b/definitions/mars/grib1.oper.im.def new file mode 100644 index 000000000..143b6af28 --- /dev/null +++ b/definitions/mars/grib1.oper.im.def @@ -0,0 +1,20 @@ +unalias mars.levtype; + +if(localDefinitionNumber == 3) { + constant marsType = "oldim"; + alias mars.type = marsType; + alias mars.ident = indicatorOfTypeOfLevel; + + # Just a guess + if(marsStream < 1024) { + alias mars.ident = marsStream; + } + + #unalias mars.param; + unalias mars.step; +} + +if(localDefinitionNumber == 24) { + unalias mars.param; + unalias mars.step; +} diff --git a/definitions/mars/grib1.oper.me.def b/definitions/mars/grib1.oper.me.def new file mode 120000 index 000000000..353243e89 --- /dev/null +++ b/definitions/mars/grib1.oper.me.def @@ -0,0 +1 @@ +grib1.me.def \ No newline at end of file diff --git a/definitions/mars/grib1.oper.oi.def b/definitions/mars/grib1.oper.oi.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.oper.oi.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.oper.si.def b/definitions/mars/grib1.oper.si.def new file mode 120000 index 000000000..a720ff713 --- /dev/null +++ b/definitions/mars/grib1.oper.si.def @@ -0,0 +1 @@ +base.def \ No newline at end of file diff --git a/definitions/mars/grib1.oper.sim.def b/definitions/mars/grib1.oper.sim.def new file mode 100644 index 000000000..2cb128fde --- /dev/null +++ b/definitions/mars/grib1.oper.sim.def @@ -0,0 +1,3 @@ +unalias mars.param; +unalias mars.levtype; +alias mars.domain=globalDomain; diff --git a/definitions/mars/grib1.oper.ssd.def b/definitions/mars/grib1.oper.ssd.def new file mode 100644 index 000000000..7fe307b8e --- /dev/null +++ b/definitions/mars/grib1.oper.ssd.def @@ -0,0 +1,4 @@ +alias mars.instrument = instrumentType; +alias mars.ident = satelliteNumber; + + diff --git a/definitions/mars/grib1.scda.4i.def b/definitions/mars/grib1.scda.4i.def new file mode 100644 index 000000000..01d7dbe1d --- /dev/null +++ b/definitions/mars/grib1.scda.4i.def @@ -0,0 +1 @@ +alias mars.iteration = iterationNumber; diff --git a/definitions/mars/grib1.scda.me.def b/definitions/mars/grib1.scda.me.def new file mode 120000 index 000000000..353243e89 --- /dev/null +++ b/definitions/mars/grib1.scda.me.def @@ -0,0 +1 @@ +grib1.me.def \ No newline at end of file diff --git a/definitions/mars/grib1.seap.an.def b/definitions/mars/grib1.seap.an.def new file mode 100644 index 000000000..5bde390da --- /dev/null +++ b/definitions/mars/grib1.seap.an.def @@ -0,0 +1,2 @@ +# TOST +if(class == 9) { alias mars.origin = centre; } diff --git a/definitions/mars/grib1.seap.ef.def b/definitions/mars/grib1.seap.ef.def new file mode 100644 index 000000000..ce3e6c4e5 --- /dev/null +++ b/definitions/mars/grib1.seap.ef.def @@ -0,0 +1 @@ +alias mars.origin = centre; diff --git a/definitions/mars/grib1.seap.es.def b/definitions/mars/grib1.seap.es.def new file mode 100644 index 000000000..dc8882fef --- /dev/null +++ b/definitions/mars/grib1.seap.es.def @@ -0,0 +1,2 @@ +# TOST +alias mars.origin = centre; diff --git a/definitions/mars/grib1.seap.fc.def b/definitions/mars/grib1.seap.fc.def new file mode 100644 index 000000000..854369060 --- /dev/null +++ b/definitions/mars/grib1.seap.fc.def @@ -0,0 +1,2 @@ +# For TOAST +alias mars.origin = centre; diff --git a/definitions/mars/grib1.seap.sv.def b/definitions/mars/grib1.seap.sv.def new file mode 100644 index 000000000..487d213d8 --- /dev/null +++ b/definitions/mars/grib1.seap.sv.def @@ -0,0 +1,5 @@ +alias mars.number = forecastOrSingularVectorNumber; +alias mars.origin = centre; + +# For TOST +if(class == 9) { alias mars.number = forecastOrSingularVectorNumber; alias mars.method = methodNumber; } diff --git a/definitions/mars/grib1.seap.svar.def b/definitions/mars/grib1.seap.svar.def new file mode 100644 index 000000000..e44df36da --- /dev/null +++ b/definitions/mars/grib1.seap.svar.def @@ -0,0 +1,5 @@ +alias mars.number = forecastOrSingularVectorNumber; +alias mars.origin = centre; + +# For TOST +if(class == 9) { alias mars.method = methodNumber; } diff --git a/definitions/mars/grib1.seas.an.def b/definitions/mars/grib1.seas.an.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.seas.an.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.seas.fc.def b/definitions/mars/grib1.seas.fc.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.seas.fc.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.seas.ff.def b/definitions/mars/grib1.seas.ff.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.seas.ff.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.seas.fx.def b/definitions/mars/grib1.seas.fx.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.seas.fx.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.seas.of.def b/definitions/mars/grib1.seas.of.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.seas.of.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.seas.or.def b/definitions/mars/grib1.seas.or.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.seas.or.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.sens.me.def b/definitions/mars/grib1.sens.me.def new file mode 100644 index 000000000..3bfc0dcc6 --- /dev/null +++ b/definitions/mars/grib1.sens.me.def @@ -0,0 +1,4 @@ +alias mars.iteration = iterationNumber; +alias mars.diagnostic = diagnosticNumber; +alias mars.domain=globalDomain; + diff --git a/definitions/mars/grib1.sens.sf.def b/definitions/mars/grib1.sens.sf.def new file mode 100644 index 000000000..f687cb8a6 --- /dev/null +++ b/definitions/mars/grib1.sens.sf.def @@ -0,0 +1,6 @@ +alias mars.iteration = iterationNumber; +alias mars.diagnostic = diagnosticNumber; +alias mars.domain=globalDomain; +#alias mars.domain=sensitiveAreaDomain; + + diff --git a/definitions/mars/grib1.sens.sg.def b/definitions/mars/grib1.sens.sg.def new file mode 100644 index 000000000..8c9b55d56 --- /dev/null +++ b/definitions/mars/grib1.sens.sg.def @@ -0,0 +1,5 @@ +alias mars.iteration = iterationNumber; +alias mars.diagnostic = diagnosticNumber; +alias mars.domain = globalDomain; + + diff --git a/definitions/mars/grib1.sfmm.em.def b/definitions/mars/grib1.sfmm.em.def new file mode 100644 index 000000000..ffd651c5c --- /dev/null +++ b/definitions/mars/grib1.sfmm.em.def @@ -0,0 +1,6 @@ +alias mars.fcmonth = marsForecastMonth; +unalias mars.step; + +alias mars.method = methodNumber; + +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.sfmm.fcmax.def b/definitions/mars/grib1.sfmm.fcmax.def new file mode 100644 index 000000000..48ff8f05e --- /dev/null +++ b/definitions/mars/grib1.sfmm.fcmax.def @@ -0,0 +1,8 @@ +alias mars.fcmonth = marsForecastMonth; +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; + +if (class is "od") { alias mars.system = systemNumber; } + +unalias mars.step; + diff --git a/definitions/mars/grib1.sfmm.fcmean.def b/definitions/mars/grib1.sfmm.fcmean.def new file mode 100644 index 000000000..7b689cef9 --- /dev/null +++ b/definitions/mars/grib1.sfmm.fcmean.def @@ -0,0 +1,9 @@ +alias mars.fcmonth = marsForecastMonth; +unalias mars.step; + + +alias mars.method = methodNumber; +alias mars.number = perturbationNumber; +if (class is "od") { alias mars.system = systemNumber; } + + diff --git a/definitions/mars/grib1.sfmm.fcmin.def b/definitions/mars/grib1.sfmm.fcmin.def new file mode 100644 index 000000000..48ff8f05e --- /dev/null +++ b/definitions/mars/grib1.sfmm.fcmin.def @@ -0,0 +1,8 @@ +alias mars.fcmonth = marsForecastMonth; +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; + +if (class is "od") { alias mars.system = systemNumber; } + +unalias mars.step; + diff --git a/definitions/mars/grib1.sfmm.fcstdev.def b/definitions/mars/grib1.sfmm.fcstdev.def new file mode 100644 index 000000000..48ff8f05e --- /dev/null +++ b/definitions/mars/grib1.sfmm.fcstdev.def @@ -0,0 +1,8 @@ +alias mars.fcmonth = marsForecastMonth; +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; + +if (class is "od") { alias mars.system = systemNumber; } + +unalias mars.step; + diff --git a/definitions/mars/grib1.smma.em.def b/definitions/mars/grib1.smma.em.def new file mode 100644 index 000000000..843a7d8e1 --- /dev/null +++ b/definitions/mars/grib1.smma.em.def @@ -0,0 +1,7 @@ +alias mars.fcmonth = marsForecastMonth; + +unalias mars.step; + +alias mars.method = methodNumber; + +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.smma.fcmean.def b/definitions/mars/grib1.smma.fcmean.def new file mode 100644 index 000000000..4a0883b4f --- /dev/null +++ b/definitions/mars/grib1.smma.fcmean.def @@ -0,0 +1,8 @@ +alias mars.number = perturbationNumber; +alias mars.fcmonth = marsForecastMonth; + +unalias mars.step; + +alias mars.method = methodNumber; + +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.supd.an.def b/definitions/mars/grib1.supd.an.def new file mode 100644 index 000000000..f3c404405 --- /dev/null +++ b/definitions/mars/grib1.supd.an.def @@ -0,0 +1,21 @@ +if (localDefinitionNumber ==35) { + alias mars.date = dataDate; + alias mars.time = dataTime; +} else { + # era 40 + alias mars.date = dateOfAnalysis; + alias mars.time = timeOfAnalysis; +} + +if (class is "od") { alias mars.origin = centre; } + +# Special rule for Grib 2 local definition 11: +# Key "centre" should be set to ECMWF and key "originatingCentreOfAnalysis" +# should be the original centre +if (editionNumber == 2 && localDefinitionNumber == 11) { + alias mars.origin = originatingCentreOfAnalysis; +} + +# We need this because 'jDirectionIncrementInDegrees,iDirectionIncrementInDegrees,' is defined later +meta marsGrid sprintf("%g/%g",iDirectionIncrementInDegrees,jDirectionIncrementInDegrees) : dump; +alias mars.grid = marsGrid; diff --git a/definitions/mars/grib1.swmm.fcmax.def b/definitions/mars/grib1.swmm.fcmax.def new file mode 100644 index 000000000..a628fb1a2 --- /dev/null +++ b/definitions/mars/grib1.swmm.fcmax.def @@ -0,0 +1,9 @@ +alias mars.fcmonth = marsForecastMonth; +alias mars.number = perturbationNumber; + +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.swmm.fcmean.def b/definitions/mars/grib1.swmm.fcmean.def new file mode 100644 index 000000000..a628fb1a2 --- /dev/null +++ b/definitions/mars/grib1.swmm.fcmean.def @@ -0,0 +1,9 @@ +alias mars.fcmonth = marsForecastMonth; +alias mars.number = perturbationNumber; + +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.swmm.fcmin.def b/definitions/mars/grib1.swmm.fcmin.def new file mode 100644 index 000000000..a628fb1a2 --- /dev/null +++ b/definitions/mars/grib1.swmm.fcmin.def @@ -0,0 +1,9 @@ +alias mars.fcmonth = marsForecastMonth; +alias mars.number = perturbationNumber; + +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.swmm.fcstdev.def b/definitions/mars/grib1.swmm.fcstdev.def new file mode 100644 index 000000000..a628fb1a2 --- /dev/null +++ b/definitions/mars/grib1.swmm.fcstdev.def @@ -0,0 +1,9 @@ +alias mars.fcmonth = marsForecastMonth; +alias mars.number = perturbationNumber; + +unalias mars.step; + +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.ukmo.s3.def b/definitions/mars/grib1.ukmo.s3.def new file mode 100644 index 000000000..7b85847e6 --- /dev/null +++ b/definitions/mars/grib1.ukmo.s3.def @@ -0,0 +1,3 @@ +# 360 year dates +meta dayOfTheYearDate g1day_of_the_year_date(centuryOfReferenceTimeOfData,yearOfCentury,month,day) : dump; +alias mars.date = dayOfTheYearDate; diff --git a/definitions/mars/grib1.waef.cv.def b/definitions/mars/grib1.waef.cv.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.waef.cv.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.waef.efi.def b/definitions/mars/grib1.waef.efi.def new file mode 100644 index 000000000..630aea2ea --- /dev/null +++ b/definitions/mars/grib1.waef.efi.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.waef.efic.def b/definitions/mars/grib1.waef.efic.def new file mode 100644 index 000000000..1fd1c4af1 --- /dev/null +++ b/definitions/mars/grib1.waef.efic.def @@ -0,0 +1,2 @@ + +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.waef.ep.def b/definitions/mars/grib1.waef.ep.def new file mode 100644 index 000000000..1fd1c4af1 --- /dev/null +++ b/definitions/mars/grib1.waef.ep.def @@ -0,0 +1,2 @@ + +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.waef.fcmax.def b/definitions/mars/grib1.waef.fcmax.def new file mode 100644 index 000000000..0277986e0 --- /dev/null +++ b/definitions/mars/grib1.waef.fcmax.def @@ -0,0 +1,2 @@ +alias mars.number = perturbationNumber; +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.waef.fcmean.def b/definitions/mars/grib1.waef.fcmean.def new file mode 100644 index 000000000..0277986e0 --- /dev/null +++ b/definitions/mars/grib1.waef.fcmean.def @@ -0,0 +1,2 @@ +alias mars.number = perturbationNumber; +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.waef.fcmin.def b/definitions/mars/grib1.waef.fcmin.def new file mode 100644 index 000000000..0277986e0 --- /dev/null +++ b/definitions/mars/grib1.waef.fcmin.def @@ -0,0 +1,2 @@ +alias mars.number = perturbationNumber; +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.waef.fcstdev.def b/definitions/mars/grib1.waef.fcstdev.def new file mode 100644 index 000000000..c33c88b9b --- /dev/null +++ b/definitions/mars/grib1.waef.fcstdev.def @@ -0,0 +1,3 @@ +# TODO: Check me +alias mars.number = perturbationNumber; +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.waef.fp.def b/definitions/mars/grib1.waef.fp.def new file mode 100644 index 000000000..4c85256b0 --- /dev/null +++ b/definitions/mars/grib1.waef.fp.def @@ -0,0 +1,3 @@ +alias mars.number = forecastProbabilityNumber; +alias mars.step = stepRange; + diff --git a/definitions/mars/grib1.waef.pf.def b/definitions/mars/grib1.waef.pf.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.waef.pf.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.waef.sot.def b/definitions/mars/grib1.waef.sot.def new file mode 100644 index 000000000..8a7bd70c9 --- /dev/null +++ b/definitions/mars/grib1.waef.sot.def @@ -0,0 +1,2 @@ +alias mars.step = stepRange; +alias mars.number = number; diff --git a/definitions/mars/grib1.wamf.cf.def b/definitions/mars/grib1.wamf.cf.def new file mode 100644 index 000000000..5d777edb3 --- /dev/null +++ b/definitions/mars/grib1.wamf.cf.def @@ -0,0 +1,2 @@ +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.wamf.fc.def b/definitions/mars/grib1.wamf.fc.def new file mode 100644 index 000000000..ba23555f9 --- /dev/null +++ b/definitions/mars/grib1.wamf.fc.def @@ -0,0 +1,3 @@ +alias mars.number = perturbationNumber; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.wamo.an.def b/definitions/mars/grib1.wamo.an.def new file mode 100644 index 000000000..0807371d8 --- /dev/null +++ b/definitions/mars/grib1.wamo.an.def @@ -0,0 +1 @@ +alias mars.step = startStep; diff --git a/definitions/mars/grib1.wamo.cl.def b/definitions/mars/grib1.wamo.cl.def new file mode 100644 index 000000000..3de9bbb32 --- /dev/null +++ b/definitions/mars/grib1.wamo.cl.def @@ -0,0 +1 @@ +unalias mars.step; diff --git a/definitions/mars/grib1.wasf.fc.def b/definitions/mars/grib1.wasf.fc.def new file mode 100644 index 000000000..fb894cbd0 --- /dev/null +++ b/definitions/mars/grib1.wasf.fc.def @@ -0,0 +1,5 @@ +alias mars.number = perturbationNumber; +if (class is "od") { alias mars.system = systemNumber; } +if (class is "me") { alias mars.system = systemNumber; } +if (class is "en") { alias mars.system = systemNumber; } +alias mars.method = methodNumber; diff --git a/definitions/mars/grib1.wave.4v.def b/definitions/mars/grib1.wave.4v.def new file mode 120000 index 000000000..ff3ce5247 --- /dev/null +++ b/definitions/mars/grib1.wave.4v.def @@ -0,0 +1 @@ +grib1.wave.def \ No newline at end of file diff --git a/definitions/mars/grib1.wave.an.def b/definitions/mars/grib1.wave.an.def new file mode 100644 index 000000000..46a39ac0c --- /dev/null +++ b/definitions/mars/grib1.wave.an.def @@ -0,0 +1,3 @@ +transient conceptDir = "mars"; +concept waveDomain(unknown,"wave_domain.def",conceptDir,conceptDir) : no_copy,read_only; +alias mars.domain = waveDomain; diff --git a/definitions/mars/grib1.wave.def b/definitions/mars/grib1.wave.def new file mode 100644 index 000000000..46a39ac0c --- /dev/null +++ b/definitions/mars/grib1.wave.def @@ -0,0 +1,3 @@ +transient conceptDir = "mars"; +concept waveDomain(unknown,"wave_domain.def",conceptDir,conceptDir) : no_copy,read_only; +alias mars.domain = waveDomain; diff --git a/definitions/mars/grib1.wave.fc.def b/definitions/mars/grib1.wave.fc.def new file mode 100644 index 000000000..46a39ac0c --- /dev/null +++ b/definitions/mars/grib1.wave.fc.def @@ -0,0 +1,3 @@ +transient conceptDir = "mars"; +concept waveDomain(unknown,"wave_domain.def",conceptDir,conceptDir) : no_copy,read_only; +alias mars.domain = waveDomain; diff --git a/definitions/mars/grib1.wave.fg.def b/definitions/mars/grib1.wave.fg.def new file mode 100644 index 000000000..46a39ac0c --- /dev/null +++ b/definitions/mars/grib1.wave.fg.def @@ -0,0 +1,3 @@ +transient conceptDir = "mars"; +concept waveDomain(unknown,"wave_domain.def",conceptDir,conceptDir) : no_copy,read_only; +alias mars.domain = waveDomain; diff --git a/definitions/mars/grib1.wehs.cd.def b/definitions/mars/grib1.wehs.cd.def new file mode 100644 index 000000000..05e94a6f1 --- /dev/null +++ b/definitions/mars/grib1.wehs.cd.def @@ -0,0 +1,3 @@ +alias mars.step = stepRange; +alias mars.quantile = quantile; + diff --git a/definitions/mars/grib1.wehs.ed.def b/definitions/mars/grib1.wehs.ed.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.wehs.ed.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.wehs.em.def b/definitions/mars/grib1.wehs.em.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib1.wehs.em.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.wehs.es.def b/definitions/mars/grib1.wehs.es.def new file mode 100644 index 000000000..a4cef5d68 --- /dev/null +++ b/definitions/mars/grib1.wehs.es.def @@ -0,0 +1 @@ +alias mars.step = stepRange; diff --git a/definitions/mars/grib1.weov.pf.def b/definitions/mars/grib1.weov.pf.def new file mode 100644 index 000000000..939f8df8a --- /dev/null +++ b/definitions/mars/grib1.weov.pf.def @@ -0,0 +1 @@ +alias mars.number = perturbationNumber; diff --git a/definitions/mars/grib1.wmfm.fcmax.def b/definitions/mars/grib1.wmfm.fcmax.def new file mode 100644 index 000000000..2cca02b9b --- /dev/null +++ b/definitions/mars/grib1.wmfm.fcmax.def @@ -0,0 +1,11 @@ +alias mars.number = perturbationNumber; +unalias mars.step; + +# Old GRIBS do not have forecast forecastMonth set. It is computed from verifyingMonth + +meta forecastPeriodFrom evaluate(verifyingMonth/1000) : no_copy; +meta forecastPeriodTo evaluate(verifyingMonth%1000) : no_copy; +meta forecastPeriod sprintf("%d-%d",forecastPeriodFrom,forecastPeriodTo) : dump; +alias mars.fcperiod = forecastPeriod; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.wmfm.fcmean.def b/definitions/mars/grib1.wmfm.fcmean.def new file mode 100644 index 000000000..2cca02b9b --- /dev/null +++ b/definitions/mars/grib1.wmfm.fcmean.def @@ -0,0 +1,11 @@ +alias mars.number = perturbationNumber; +unalias mars.step; + +# Old GRIBS do not have forecast forecastMonth set. It is computed from verifyingMonth + +meta forecastPeriodFrom evaluate(verifyingMonth/1000) : no_copy; +meta forecastPeriodTo evaluate(verifyingMonth%1000) : no_copy; +meta forecastPeriod sprintf("%d-%d",forecastPeriodFrom,forecastPeriodTo) : dump; +alias mars.fcperiod = forecastPeriod; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.wmfm.fcmin.def b/definitions/mars/grib1.wmfm.fcmin.def new file mode 100644 index 000000000..2cca02b9b --- /dev/null +++ b/definitions/mars/grib1.wmfm.fcmin.def @@ -0,0 +1,11 @@ +alias mars.number = perturbationNumber; +unalias mars.step; + +# Old GRIBS do not have forecast forecastMonth set. It is computed from verifyingMonth + +meta forecastPeriodFrom evaluate(verifyingMonth/1000) : no_copy; +meta forecastPeriodTo evaluate(verifyingMonth%1000) : no_copy; +meta forecastPeriod sprintf("%d-%d",forecastPeriodFrom,forecastPeriodTo) : dump; +alias mars.fcperiod = forecastPeriod; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/grib1.wmfm.fcstdev.def b/definitions/mars/grib1.wmfm.fcstdev.def new file mode 100644 index 000000000..2cca02b9b --- /dev/null +++ b/definitions/mars/grib1.wmfm.fcstdev.def @@ -0,0 +1,11 @@ +alias mars.number = perturbationNumber; +unalias mars.step; + +# Old GRIBS do not have forecast forecastMonth set. It is computed from verifyingMonth + +meta forecastPeriodFrom evaluate(verifyingMonth/1000) : no_copy; +meta forecastPeriodTo evaluate(verifyingMonth%1000) : no_copy; +meta forecastPeriod sprintf("%d-%d",forecastPeriodFrom,forecastPeriodTo) : dump; +alias mars.fcperiod = forecastPeriod; +alias mars.method = methodNumber; +if (class is "od") { alias mars.system = systemNumber; } diff --git a/definitions/mars/make_type_switch_case.sh b/definitions/mars/make_type_switch_case.sh new file mode 100755 index 000000000..732beb478 --- /dev/null +++ b/definitions/mars/make_type_switch_case.sh @@ -0,0 +1,15 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# +echo " switch (val) {" +cat type.table | awk '{print "\t\t\t\tcase "$1":\n\t\t\t\t\t/* "$3" "$4" "$5" "$6" "$7" "$8" "$9" ("$2") */\n\t\t\t\t\tbreak;"}' + +echo " default :" +echo " grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"unknown type %d",(int)val);" +echo " return GRIB_ENCODING_ERROR;" +echo " }" diff --git a/definitions/mars/marsTypeConcept.def b/definitions/mars/marsTypeConcept.def new file mode 100644 index 000000000..88e931465 --- /dev/null +++ b/definitions/mars/marsTypeConcept.def @@ -0,0 +1,9 @@ +#set uses the last one +#get returns the first match + "an" = { marsType="ia"; } + "an" = { marsType="an"; } + "fc" = { marsType="fc"; } + "cf" = { marsType="cf"; } + "pf" = { marsType="pf"; } + "cp" = { marsType="pf"; } + "ep" = { marsType="pf"; } diff --git a/definitions/mars/metdb.pl b/definitions/mars/metdb.pl new file mode 100755 index 000000000..21c670b92 --- /dev/null +++ b/definitions/mars/metdb.pl @@ -0,0 +1,22 @@ +#!/usr/local/bin/perl56 -I/usr/local/lib/metaps/perl +use Data::Dumper; +use metdb qw(prod); + +foreach my $x ( qw(class type stream) ) +{ + my $table = "metdb::grib_$x"; + eval "use $table"; + + my @params = $table->find({},[qw(grib_code)]); + + open(STDOUT,">$x.table"); + + foreach my $p ( @params ) + { + if($x ne "type" || $p->get_grib_code < 256) + { + print $p->get_grib_code, " ", $p->get_mars_abbreviation, " ", $p->get_long_name, "\n"; + } + } + +} diff --git a/definitions/mars/model.96.table b/definitions/mars/model.96.table new file mode 100644 index 000000000..53b7994c1 --- /dev/null +++ b/definitions/mars/model.96.table @@ -0,0 +1,3 @@ +1 cosmo cosmo +2 eta eta +3 wam wave diff --git a/definitions/mars/stream.table b/definitions/mars/stream.table new file mode 100644 index 000000000..90963ef57 --- /dev/null +++ b/definitions/mars/stream.table @@ -0,0 +1,98 @@ +0 0 Unknown +1022 fsob Forecast sensitivity to observations +1023 fsow Forecast sensitivity to observations wave +1024 dahc Daily archive hindcast +1025 oper Atmospheric model +1026 scda Atmospheric model (short cutoff) +1027 scwv Wave model (short cutoff) +1028 dcda Atmospheric model (delayed cutoff) +1029 dcwv Wave model (delayed cutoff) +1030 enda Ensemble data assimilation +1032 efho Ensemble forecast hindcast overlap +1033 enfh Ensemble forecast hindcasts +1034 efov Ensemble forecast overlap +1035 enfo Ensemble prediction system +1036 sens Sensitivity forecast +1037 maed Multianalysis ensemble data +1038 amap Analysis for multianalysis project +1039 efhc Ensemble forecast hindcasts (obsolete) +1040 efhs Ensemble forecast hindcast statistics +1041 toga TOGA +1042 cher Chernobyl +1043 mnth Monthly means +1044 supd Deterministic supplementary data +1045 wave Wave model +1046 ocea Ocean +1047 fgge FGGE +1050 egrr Bracknell +1051 kwbc Washington +1052 edzw Offenbach +1053 lfpw Toulouse +1054 rjtd Tokyo +1055 cwao Montreal +1056 ammc Melbourne +1070 msdc Monthly standard deviation and covariance +1071 moda Monthly means of daily means +1072 monr Monthly means using G. Boer's step function +1073 mnvr Monthly variance and covariance data using G. Boer's step function +1074 msda Monthly standard deviation and covariance of daily means +1075 mdfa Monthly means of daily forecast accumulations +1076 dacl Daily climatology +1077 wehs Wave ensemble forecast hindcast statistics +1078 ewho Ensemble forecast wave hindcast overlap +1079 enwh Ensemble forecast wave hindcasts +1080 wamo Wave monthly means +1081 waef Wave ensemble forecast +1082 wasf Wave seasonal forecast +1083 mawv Multianalysis wave data +1084 ewhc Wave ensemble forecast hindcast (obsolete) +1085 wvhc Wave hindcast +1086 weov Wave ensemble forecast overlap +1087 wavm Wave model (standalone) +1088 ewda Ensemble wave data assimilation +1089 dacw Daily climatology wave +1090 seas Seasonal forecast +1091 sfmm Seasonal forecast atmospheric monthly means +1092 swmm Seasonal forecast wave monthly means +1093 mofc Monthly forecast +1094 mofm Monthly forecast means +1095 wamf Wave monthly forecast +1096 wmfm Wave monthly forecast means +1097 smma Seasonal monthly means anomalies +1110 seap Sensitive area prediction +1200 mnfc Real-time +1201 mnfh Hindcasts +1202 mnfa Anomalies +1203 mnfw Wave real-time +1204 mfhw Monthly forecast hindcasts wave +1205 mfaw Wave anomalies +1206 mnfm Real-time means +1207 mfhm Hindcast means +1208 mfam Anomaly means +1209 mfwm Wave real-time means +1210 mhwm Wave hindcast means +1211 mawm Wave anomaly means +1220 mmsf Multi-model seasonal forecast +1221 msmm Multi-model seasonal forecast atmospheric monthly means +1222 wams Multi-model seasonal forecast wave +1223 mswm Multi-model seasonal forecast wave monthly means +1224 mmsa Multi-model seasonal forecast monthly anomalies +1230 mmaf Multi-model multi-annual forecast +1231 mmam Multi-model multi-annual forecast means +1232 mmaw Multi-model multi-annual forecast wave +1233 mmwm Multi-model multi-annual forecast wave means +1240 esmm EUROSIP monthly means +1241 ehmm EUROSIP hindcast monthly means +1242 edmm Ensemble data assimilation monthly means +1243 edmo Ensemble data assimilation monthly means of daily means +1244 ewmo Ensemble wave data assimilation monthly means of daily means +1245 ewmm Ensemble wave data assimilation monthly means +1246 espd Ensemble supplementary data +1247 lwda Long window daily archive +1248 lwwv Long window wave +1249 elda Ensemble Long window Data Assimilation +1250 ewla Ensemble Wave Long window data Assimilation +2231 cnrm Meteo France climate centre +2232 mpic Max Plank Institute +2233 ukmo UKMO climate centre + diff --git a/definitions/mars/type.table b/definitions/mars/type.table new file mode 100644 index 000000000..7eccac5e2 --- /dev/null +++ b/definitions/mars/type.table @@ -0,0 +1,66 @@ +0 0 Unknown +1 fg First guess +2 an Analysis +3 ia Initialised analysis +4 oi Oi analysis +5 3v 3d variational analysis +6 4v 4d variational analysis +7 3g 3d variational gradients +8 4g 4d variational gradients +9 fc Forecast +10 cf Control forecast +11 pf Perturbed forecast +12 ef Errors in first guess +13 ea Errors in analysis +14 cm Cluster means +15 cs Cluster std deviations +16 fp Forecast probability +17 em Ensemble mean +18 es Ensemble standard deviation +19 fa Forecast accumulation +20 cl Climatology +21 si Climate simulation +22 s3 Climate 30 days simulation +23 ed Empirical distribution +24 tu Tubes +25 ff Flux forcing realtime +26 of Ocean forward +27 efi Extreme forecast index +28 efic Extreme forecast index control +29 pb Probability boundaries +30 ep Event probability +31 bf Bias-corrected Forecast +32 cd Climate distribution +33 4i 4D analysis increments +34 go Gridded observations +35 me Model errors +36 pd Probability distribution +37 ci Cluster information +38 sot Shift of Tail +40 im Images +42 sim Simulated images +43 wem Weighted ensemble mean +44 wes Weighted ensemble standard deviation +45 cr Cluster representative +46 ses Scaled ensemble standard deviation +47 taem Time average ensemble mean +48 taes Time average ensemble standard deviation +50 sg Sensitivity gradient +52 sf Sensitivity forecast +60 pa Perturbed analysis +61 icp Initial condition perturbation +62 sv Singular vector +63 as Adjoint singular vector +64 svar Signal variance +65 cv Calibration/Validation forecast +70 or Ocean reanalysis +71 fx Flux forcing +80 fcmean Forecast mean +81 fcmax Forecast maximum +82 fcmin Forecast minimum +83 fcstdev Forecast standard deviation +84 emtm Ensemble mean of temporal mean +85 estdtm Ensemble standard deviation of temporal mean +86 hcmean Hindcast climate mean +87 ssd Simulated satellite data + diff --git a/definitions/mars/wave_domain.def b/definitions/mars/wave_domain.def new file mode 100644 index 000000000..267fd0cf6 --- /dev/null +++ b/definitions/mars/wave_domain.def @@ -0,0 +1,61 @@ +'g'={latitudeOfFirstGridPoint=81000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-81000;longitudeOfLastGridPoint=358500;} +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-81000;longitudeOfLastGridPoint=358500;} +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-90000;longitudeOfLastGridPoint=358500;} +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-90000;longitudeOfLastGridPoint=359000;} +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-90000;longitudeOfLastGridPoint=359500;} +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-90000;longitudeOfLastGridPoint=359640;} +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-90000;longitudeOfLastGridPoint=357000;} +'g'={latitudeOfFirstGridPoint=81000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-78000;longitudeOfLastGridPoint=357000;} +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-78000;longitudeOfLastGridPoint=359750;} +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-78120;longitudeOfLastGridPoint=359640;} +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-78000;longitudeOfLastGridPoint=359500;} +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-78000;longitudeOfLastGridPoint=359000;} +'g'={latitudeOfFirstGridPoint=81000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-78000;longitudeOfLastGridPoint=357000;} +'g'={latitudeOfFirstGridPoint=89731;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-89731;longitudeOfLastGridPoint=359648;} + +'m'={latitudeOfFirstGridPoint=66000;longitudeOfFirstGridPoint=-6000;latitudeOfLastGridPoint=30000;longitudeOfLastGridPoint=42000;} +'m'={latitudeOfFirstGridPoint=66000;longitudeOfFirstGridPoint=354000;latitudeOfLastGridPoint=30000;longitudeOfLastGridPoint=42000;} +'m'={latitudeOfFirstGridPoint=81000;longitudeOfFirstGridPoint=-98000;latitudeOfLastGridPoint=5000;longitudeOfLastGridPoint=54000;} +'m'={latitudeOfFirstGridPoint=81000;longitudeOfFirstGridPoint=-98000;latitudeOfLastGridPoint=9000;longitudeOfLastGridPoint=42000;} +'m'={latitudeOfFirstGridPoint=81000;longitudeOfFirstGridPoint=262000;latitudeOfLastGridPoint=9000;longitudeOfLastGridPoint=42000;} + +'n'={latitudeOfFirstGridPoint=81000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=0;longitudeOfLastGridPoint=359500;} +'s'={latitudeOfFirstGridPoint=-500;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-81000;longitudeOfLastGridPoint=359500;} + +'g'={latitudeOfFirstGridPoint=90000;longitudeOfFirstGridPoint=0;latitudeOfLastGridPoint=-90000;longitudeOfLastGridPoint=359750;} +'g' = { generatingProcessIdentifier=104 ;} +'g' = { generatingProcessIdentifier=105 ;} +'g' = { generatingProcessIdentifier=106 ;} +'g' = { generatingProcessIdentifier=107 ;} +'g' = { generatingProcessIdentifier=108 ;} +'g' = { generatingProcessIdentifier=109 ;} +'g' = { generatingProcessIdentifier=110 ;} +'g' = { generatingProcessIdentifier=111 ;} +'g' = { generatingProcessIdentifier=112 ;} +'g' = { generatingProcessIdentifier=113 ;} +'g' = { generatingProcessIdentifier=114 ;} +'g' = { generatingProcessIdentifier=115 ;} +'g' = { generatingProcessIdentifier=116 ;} +'g' = { generatingProcessIdentifier=117 ;} +'g' = { generatingProcessIdentifier=118 ;} +'g' = { generatingProcessIdentifier=119 ;} +'g' = { generatingProcessIdentifier=120 ;} +'m' = { generatingProcessIdentifier=204 ;} +'m' = { generatingProcessIdentifier=205 ;} +'m' = { generatingProcessIdentifier=206 ;} +'m' = { generatingProcessIdentifier=207 ;} +'m' = { generatingProcessIdentifier=208 ;} +'m' = { generatingProcessIdentifier=209 ;} +'m' = { generatingProcessIdentifier=210 ;} +'m' = { generatingProcessIdentifier=211 ;} +'m' = { generatingProcessIdentifier=212 ;} +'m' = { generatingProcessIdentifier=213 ;} +'m' = { generatingProcessIdentifier=214 ;} +'m' = { generatingProcessIdentifier=215 ;} +'m' = { generatingProcessIdentifier=216 ;} +'m' = { generatingProcessIdentifier=217 ;} +'m' = { generatingProcessIdentifier=218 ;} +'m' = { generatingProcessIdentifier=219 ;} +'m' = { generatingProcessIdentifier=220 ;} + + diff --git a/definitions/mars_param.table b/definitions/mars_param.table new file mode 100644 index 000000000..51e34755a --- /dev/null +++ b/definitions/mars_param.table @@ -0,0 +1,6809 @@ +1.1 54 134 | +1.128 1 | +1.129 129001 | +1.131 131001 | +1.133 133001 | +1.171 171001 | +1.2 54 134 500000 500000 500001 500001 | +1.200 200001 | +1.201 201001 | +1.204 500308 500308 | +1.205 500324 500324 500325 500325 500326 500326 500327 500327 | +1.210 210001 | +1.211 211001 | +1.212 212001 | +1.213 213001 | +1.214 214001 | +1.215 215001 | +1.216 216001 | +1.228 228001 | +1.254 300001 | +1.3 54 134 | +10.1 206 | +10.128 10 | +10.131 131010 | +10.133 133010 | +10.2 206 500009 500009 | +10.201 201010 | +10.202 500191 500191 | +10.204 500317 500317 | +10.210 210010 | +10.211 211010 | +10.212 212010 | +10.214 214010 | +10.215 215010 | +10.216 216010 | +10.228 228010 | +10.3 206 | +100.1 3100 | +100.128 100 | +100.129 129100 | +100.162 162100 | +100.2 3100 500071 500071 | +100.200 200100 | +100.201 201100 500132 500132 | +100.210 210100 | +100.211 211100 | +100.212 212100 | +100.215 215100 | +100.216 216100 | +100.254 300100 | +100.3 3100 | +100si 228249 | +100u 228246 | +100ua 171006 | +100v 228247 | +100va 171007 | +101.1 3101 | +101.128 101 | +101.129 129101 | +101.162 162101 | +101.2 3101 500072 500072 | +101.200 200101 | +101.201 201101 500133 500133 | +101.203 500293 500293 | +101.210 210101 | +101.211 211101 | +101.212 212101 | +101.215 215101 | +101.216 216101 | +101.254 300101 | +101.3 3101 | +102.1 3102 | +102.128 102 | +102.129 129102 | +102.162 162102 | +102.2 3102 500073 500073 | +102.200 200102 | +102.201 201102 500134 500134 | +102.210 210102 | +102.211 211102 | +102.212 212102 | +102.215 215102 | +102.216 216102 | +102.254 300102 | +102.3 3102 | +103.1 3103 | +103.128 103 | +103.129 129103 | +103.162 162103 | +103.2 3103 500074 500074 | +103.200 200103 | +103.203 500294 500294 | +103.210 210103 | +103.211 211103 | +103.212 212103 | +103.215 215103 | +103.216 216103 | +103.254 300103 | +103.3 3103 | +104.1 3104 | +104.128 104 | +104.129 129104 | +104.162 162104 | +104.2 3104 500075 500075 | +104.200 200104 | +104.202 500233 500233 | +104.210 210104 | +104.211 211104 | +104.212 212104 | +104.215 215104 | +104.216 216104 | +104.254 300104 | +104.3 3104 | +105.1 3105 | +105.128 105 | +105.129 129105 | +105.162 162105 | +105.2 3105 500076 500076 | +105.200 200105 | +105.202 500234 500234 | +105.210 210105 | +105.211 211105 | +105.212 212105 | +105.215 215105 | +105.216 216105 | +105.254 300105 | +105.3 3105 | +106.1 3106 | +106.128 106 | +106.129 129106 | +106.162 162106 | +106.2 3106 500077 500077 | +106.200 200106 | +106.210 210106 | +106.211 211106 | +106.212 212106 | +106.215 215106 | +106.216 216106 | +106.254 300106 | +106.3 3106 | +107.1 3107 | +107.128 107 | +107.129 129107 | +107.162 162107 | +107.2 3107 | +107.200 200107 | +107.203 500295 500295 | +107.210 210107 | +107.211 211107 | +107.212 212107 | +107.215 215107 | +107.216 216107 | +107.254 300107 | +107.3 3107 | +108.1 3108 | +108.128 108 | +108.129 129108 | +108.162 162108 | +108.2 3108 | +108.200 200108 | +108.210 210108 | +108.211 211108 | +108.212 212108 | +108.215 215108 | +108.216 216108 | +108.254 300108 | +108.3 3108 | +109.1 3109 | +109.128 109 | +109.129 129109 | +109.162 162109 | +109.2 3109 | +109.200 200109 | +109.203 500296 500296 | +109.210 210109 | +109.211 211109 | +109.212 212109 | +109.215 215109 | +109.216 216109 | +109.254 300109 | +109.3 3109 | +10fg 49 | +10fg3 228028 | +10fg6 123 | +10fg6diff 200123 | +10fg6grd 129123 | +10fga 171049 | +10fgdiff 200049 | +10fgg15 131070 | +10fgg20 131071 | +10fgg25 131072 | +10fggrd 129049 | +10fgi 132049 | +10fgrea 160049 | +10gp 131049 | +10gpg100 133030 | +10gpg20 133026 | +10gpg35 133027 | +10gpg50 133028 | +10gpg75 133029 | +10si 207 | +10sidiff 200207 | +10sigrd 129207 | +10sp 131165 | +10spg10 131068 133021 | +10spg15 131069 133022 | +10spg20 133023 | +10spg35 133024 | +10spg50 133025 | +10u 165 | +10ua 171165 171207 | +10udiff 200165 | +10ugrd 129165 | +10v 166 | +10va 171166 | +10vdiff 200166 | +10vgrd 129166 | +10wsi 132165 | +10wsrea 160246 | +11.1 130 167 | +11.128 11 | +11.129 129011 | +11.133 133011 | +11.171 171011 | +11.2 130 167 500010 500010 500011 500011 500012 500012 500013 500013 500014 500014 | +11.200 200011 | +11.201 201011 | +11.204 500318 500318 | +11.206 500372 500372 | +11.210 210011 | +11.211 211011 | +11.212 212011 | +11.214 214011 | +11.215 215011 | +11.216 216011 | +11.228 228011 | +11.254 300011 | +11.3 130 167 | +110.1 3110 | +110.128 110 | +110.129 129110 | +110.162 162110 | +110.174 174110 | +110.175 175110 | +110.2 3110 | +110.200 200110 | +110.210 210110 | +110.211 211110 | +110.212 212110 | +110.215 215110 | +110.216 216110 | +110.254 300110 | +110.3 3110 | +111.1 3111 | +111.128 111 | +111.129 129111 | +111.162 162111 | +111.174 174111 | +111.175 175111 | +111.2 3111 500078 500078 500079 500079 | +111.200 200111 | +111.201 201111 500135 500135 | +111.210 210111 | +111.211 211111 | +111.212 212111 | +111.215 215111 | +111.216 216111 | +111.254 300111 | +111.3 3111 | +112.1 3112 | +112.128 112 | +112.129 129112 | +112.162 162112 | +112.2 3112 500080 500080 500081 500081 | +112.200 200112 | +112.201 201112 500136 500136 | +112.210 210112 | +112.211 211112 | +112.212 212112 | +112.215 215112 | +112.216 216112 | +112.254 300112 | +112.3 3112 | +113.1 3113 | +113.128 113 | +113.129 129113 | +113.162 162113 | +113.2 3113 500082 500082 500083 500083 | +113.200 200113 | +113.201 201113 500137 500137 | +113.202 500235 500235 | +113.210 210113 | +113.211 211113 | +113.212 212113 | +113.215 215113 | +113.216 216113 | +113.254 300113 | +113.3 3113 | +114.1 3114 | +114.128 114 | +114.129 129114 | +114.162 162114 | +114.2 3114 500084 500084 500085 500085 | +114.200 200114 | +114.202 500236 500236 | +114.210 210114 | +114.211 211114 | +114.212 212114 | +114.215 215114 | +114.216 216114 | +114.254 300114 | +114.3 3114 | +115.1 3115 | +115.128 115 | +115.129 129115 | +115.162 162115 | +115.2 3115 | +115.200 200115 | +115.202 500237 500237 | +115.210 210115 | +115.211 211115 | +115.212 212115 | +115.215 215115 | +115.216 216115 | +115.254 300115 | +115.3 3115 | +116.1 3116 | +116.128 116 | +116.129 129116 | +116.162 162116 | +116.2 3116 | +116.200 200116 | +116.210 210116 | +116.211 211116 | +116.212 212116 | +116.215 215116 | +116.216 216116 | +116.254 300116 | +116.3 3116 | +117.1 3117 | +117.128 117 | +117.129 129117 | +117.162 162117 | +117.2 3117 | +117.200 200117 | +117.210 210117 | +117.211 211117 | +117.212 212117 | +117.215 215117 | +117.216 216117 | +117.254 300117 | +117.3 3117 | +118.1 194 | +118.128 118 | +118.129 129118 | +118.162 162118 | +118.2 194 | +118.200 200118 | +118.210 210118 | +118.211 211118 | +118.212 212118 | +118.215 215118 | +118.216 216118 | +118.3 194 | +119.1 3119 | +119.128 119 | +119.129 129119 | +119.162 162119 | +119.2 3119 | +119.200 200119 | +119.210 210119 | +119.211 211119 | +119.212 212119 | +119.215 215119 | +119.216 216119 | +119.3 3119 | +12.1 3012 | +12.128 12 | +12.129 129012 | +12.133 133012 | +12.171 171012 | +12.2 3012 | +12.200 200012 | +12.201 201012 | +12.204 500319 500319 | +12.210 210012 | +12.211 211012 | +12.212 212012 | +12.214 214012 | +12.215 215012 | +12.216 216012 | +12.228 228012 | +12.254 300012 | +12.3 3012 | +120.1 3120 | +120.128 120 | +120.129 129120 | +120.162 162120 | +120.2 3120 | +120.200 200120 | +120.202 500238 500238 | +120.210 210120 | +120.211 211120 | +120.212 212120 | +120.215 215120 | +120.216 216120 | +120.3 3120 | +121.1 147 | +121.128 121 | +121.129 129121 | +121.162 162121 | +121.171 171121 | +121.2 147 500086 500086 | +121.200 200121 | +121.202 500239 500239 | +121.210 210121 | +121.211 211121 | +121.212 212121 | +121.215 215121 | +121.216 216121 | +121.228 260121 | +121.254 300121 | +121.3 147 | +122.1 146 | +122.128 122 | +122.129 129122 | +122.162 162122 | +122.171 171122 | +122.2 146 500087 500087 | +122.200 200122 | +122.201 500138 500138 | +122.202 500240 500240 | +122.210 210122 | +122.211 211122 | +122.212 212122 | +122.215 215122 | +122.216 216122 | +122.254 300122 | +122.3 146 | +123.1 145 | +123.128 123 | +123.129 129123 | +123.162 162123 | +123.2 145 | +123.200 200123 | +123.201 500139 500139 | +123.202 500241 500241 | +123.210 210123 | +123.211 211123 | +123.212 212123 | +123.215 215123 | +123.216 216123 | +123.228 260123 | +123.254 300123 | +123.3 145 | +124.1 3124 | +124.128 124 | +124.162 162124 | +124.2 3124 500088 500088 | +124.201 500140 500140 | +124.203 500297 500297 | +124.210 210124 | +124.211 211124 | +124.212 212124 | +124.215 215124 | +124.216 216124 | +124.3 3124 | +125.1 3125 | +125.128 125 | +125.129 129125 | +125.162 162125 | +125.171 171125 | +125.2 3125 500089 500089 | +125.200 200125 | +125.201 500141 500141 | +125.210 210125 | +125.211 211125 | +125.212 212125 | +125.215 215125 | +125.216 216125 | +125.3 3125 | +126.1 3126 | +126.128 126 | +126.129 129126 | +126.162 162126 | +126.171 171126 | +126.2 3126 | +126.200 200126 | +126.210 210126 | +126.211 211126 | +126.212 212126 | +126.215 215126 | +126.216 216126 | +126.3 3126 | +127.1 3127 | +127.128 127 | +127.129 129127 | +127.160 127 | +127.162 162127 | +127.171 171127 | +127.2 3127 | +127.200 200127 | +127.201 500142 500142 | +127.210 210127 | +127.211 211127 | +127.212 212127 | +127.215 215127 | +127.216 216127 | +127.254 300127 | +127.3 3127 | +128.128 128 | +128.129 129128 | +128.151 151128 | +128.160 128 | +128.162 162128 | +128.171 171128 | +128.200 200128 | +128.210 210128 | +128.211 211128 | +128.212 212128 | +128.215 215128 | +128.216 216128 | +128.254 300128 | +129.128 129 | +129.129 129129 | +129.131 131129 | +129.150 150129 | +129.151 151129 | +129.160 129 | +129.162 162129 | +129.170 129 | +129.171 171129 | +129.180 129 | +129.190 129 | +129.200 200129 | +129.201 500143 500143 | +129.210 210129 | +129.211 211129 | +129.212 212129 | +129.215 215129 | +129.216 216129 | +129.228 228129 | +129.254 300129 | +13.1 3 | +13.128 13 | +13.129 129013 | +13.133 133013 | +13.171 171013 | +13.2 3 | +13.200 200013 | +13.201 201013 500092 500092 | +13.204 500320 500320 | +13.210 210013 | +13.211 211013 | +13.212 212013 | +13.214 214013 | +13.215 215013 | +13.216 216013 | +13.228 228013 | +13.254 300013 | +13.3 3 | +130.128 130 | +130.129 129130 | +130.131 131130 | +130.150 150130 | +130.151 151130 | +130.160 130 | +130.162 162130 | +130.170 130 | +130.171 171130 | +130.180 130 | +130.190 130 | +130.200 200130 | +130.201 500144 500144 | +130.203 500298 500298 | +130.210 210130 | +130.211 211130 | +130.212 212130 | +130.215 215130 | +130.216 216130 | +130.228 228130 | +130.254 300130 | +131.128 131 | +131.129 129131 | +131.150 150131 | +131.151 151131 | +131.160 131 | +131.162 162131 | +131.170 131 | +131.171 171131 | +131.180 131 | +131.190 131 | +131.200 200131 | +131.201 500145 500145 | +131.203 500299 500299 | +131.210 210131 | +131.211 211131 | +131.212 212131 | +131.215 215131 | +131.216 216131 | +131.228 228131 | +131.254 300131 | +132.128 132 | +132.129 129132 | +132.151 151132 | +132.160 132 | +132.162 162132 | +132.170 132 | +132.171 171132 | +132.180 132 | +132.190 132 | +132.200 200132 | +132.201 500146 500146 | +132.203 500300 500300 | +132.210 210132 | +132.211 211132 | +132.212 212132 | +132.215 215132 | +132.216 216132 | +132.228 228132 | +132.254 300132 | +133.128 133 | +133.129 129133 | +133.150 150133 | +133.151 151133 | +133.160 133 | +133.162 162133 | +133.170 133 | +133.171 171133 | +133.180 133 | +133.190 133 | +133.200 200133 | +133.201 500147 500147 | +133.203 500301 500301 | +133.210 210133 | +133.211 211133 | +133.212 212133 | +133.215 215133 | +133.216 216133 | +133.254 300133 | +134.128 134 | +134.129 129134 | +134.150 150134 | +134.151 151134 | +134.160 134 | +134.162 162134 | +134.171 171134 | +134.180 134 | +134.190 134 | +134.200 200134 | +134.210 210134 | +134.211 211134 | +134.212 212134 | +134.215 215134 | +134.216 216134 | +134.228 228134 | +134.254 300134 | +135.128 135 | +135.129 129135 | +135.150 150135 | +135.151 151135 | +135.160 160135 | +135.162 162135 | +135.170 135 | +135.171 171135 | +135.200 200135 | +135.210 210135 | +135.211 211135 | +135.212 212135 | +135.215 215135 | +135.216 216135 | +135.254 300135 | +136.128 136 | +136.129 129136 | +136.151 151136 | +136.160 136 | +136.162 162136 | +136.171 171136 | +136.200 200136 | +136.210 210136 | +136.211 211136 | +136.212 212136 | +136.215 215136 | +136.216 216136 | +136.228 228136 | +136.254 300136 | +137.128 137 | +137.129 129137 | +137.150 150137 | +137.151 151137 | +137.160 160137 | +137.162 162137 | +137.171 171137 | +137.180 137 | +137.200 200137 | +137.210 210137 | +137.211 211137 | +137.212 212137 | +137.215 215137 | +137.216 216137 | +137.254 300137 | +138.128 138 | +138.129 129138 | +138.151 151138 | +138.160 138 | +138.162 162138 | +138.170 138 | +138.171 171138 | +138.180 138 | +138.190 138 | +138.200 200138 | +138.210 210138 | +138.211 211138 | +138.212 212138 | +138.215 215138 | +138.216 216138 | +138.254 300138 | +139.128 139 | +139.129 129139 | +139.131 131139 | +139.150 150139 | +139.151 151139 | +139.160 139 | +139.162 162139 | +139.170 139 | +139.171 171139 | +139.174 174139 | +139.175 175139 | +139.190 139 | +139.200 200139 | +139.201 201139 500148 500148 | +139.210 210139 | +139.211 211139 | +139.212 212139 | +139.215 215139 | +139.216 216139 | +139.228 228139 | +139.234 234139 | +139.254 300139 | +14.1 3014 | +14.128 14 | +14.129 129014 | +14.133 133014 | +14.171 171014 | +14.2 3014 | +14.200 200014 | +14.201 201014 500093 500093 | +14.204 500321 500321 | +14.210 210014 | +14.211 211014 | +14.212 212014 | +14.214 214014 | +14.215 215014 | +14.216 216014 | +14.228 228014 | +14.254 300014 | +14.3 3014 | +140.128 140 | +140.129 129140 | +140.150 150140 | +140.151 151140 | +140.160 160140 | +140.162 162140 | +140.170 140 | +140.171 171140 | +140.200 200140 | +140.203 500302 500302 | +140.210 210140 | +140.211 211140 | +140.212 212140 | +140.215 215140 | +140.216 216140 | +140.254 300140 | +141.128 141 | +141.129 129141 | +141.150 150141 | +141.151 151141 | +141.160 160141 | +141.162 162141 | +141.170 141 | +141.171 171141 | +141.180 141 | +141.190 190141 | +141.200 200141 | +141.201 500149 500149 | +141.210 210141 | +141.211 211141 | +141.212 212141 | +141.215 215141 | +141.216 216141 | +141.228 228141 | +141.254 300141 | +142.128 142 | +142.129 129142 | +142.150 150142 | +142.151 151142 | +142.160 160142 | +142.170 142 | +142.171 171142 | +142.172 172142 | +142.173 173142 | +142.180 142 | +142.200 200142 | +142.201 500150 500150 | +142.210 210142 | +142.211 211142 | +142.212 212142 | +142.215 215142 | +142.216 216142 | +142.230 230142 | +142.254 300142 | +143.128 143 | +143.129 129143 | +143.150 150143 | +143.151 151143 | +143.160 160143 | +143.170 143 | +143.171 171143 | +143.172 172143 | +143.173 173143 | +143.180 143 | +143.200 200143 | +143.201 500151 500151 | +143.210 210143 | +143.211 211143 | +143.212 212143 | +143.215 215143 | +143.216 216143 | +143.230 230143 | +143.254 300143 | +144.128 144 | +144.129 129144 | +144.131 131144 | +144.132 132144 | +144.150 150144 | +144.151 151144 | +144.160 160144 | +144.171 171144 | +144.172 172144 | +144.173 173144 | +144.180 144 | +144.200 200144 | +144.201 500152 500152 | +144.210 210144 | +144.211 211144 | +144.212 212144 | +144.215 215144 | +144.216 216144 | +144.228 228144 | +144.230 230144 | +144.254 300144 | +145.128 145 | +145.129 129145 | +145.150 150145 | +145.151 151145 | +145.160 145 | +145.171 171145 | +145.172 172145 | +145.173 173145 | +145.200 200145 | +145.201 500153 500153 | +145.210 210145 | +145.211 211145 | +145.212 212145 | +145.215 215145 | +145.216 216145 | +145.230 230145 | +145.254 300145 | +146.128 146 | +146.129 129146 | +146.150 150146 | +146.151 151146 | +146.160 146 | +146.170 146 | +146.171 171146 | +146.172 172146 | +146.173 173146 | +146.180 146 | +146.190 146 | +146.200 200146 | +146.201 500154 500154 | +146.210 210146 | +146.211 211146 | +146.212 212146 | +146.215 215146 | +146.216 216146 | +146.230 230146 | +146.254 300146 | +147.128 147 | +147.129 129147 | +147.150 150147 | +147.151 151147 | +147.160 147 | +147.170 147 | +147.171 171147 | +147.172 172147 | +147.173 173147 | +147.180 147 | +147.190 147 | +147.200 200147 | +147.201 500155 500155 | +147.210 210147 | +147.211 211147 | +147.212 212147 | +147.215 215147 | +147.216 216147 | +147.230 230147 | +147.254 300147 | +148.128 148 | +148.129 129148 | +148.150 150148 | +148.151 151148 | +148.171 171148 | +148.200 200148 | +148.201 500156 500156 | +148.210 210148 | +148.211 211148 | +148.212 212148 | +148.215 215148 | +148.216 216148 | +148.254 300148 | +149.128 149 | +149.129 129149 | +149.151 151149 | +149.170 170149 | +149.171 171149 | +149.172 172149 | +149.173 173149 | +149.180 180149 | +149.200 200149 | +149.201 500157 500157 | +149.210 210149 | +149.211 211149 | +149.212 212149 | +149.215 215149 | +149.216 216149 | +149.254 300149 | +15.1 121 3015 | +15.128 15 | +15.131 131015 | +15.133 133015 | +15.2 121 3015 500015 500015 | +15.201 201015 | +15.204 500322 500322 | +15.206 500373 500373 | +15.210 210015 | +15.211 211015 | +15.212 212015 | +15.214 214015 | +15.215 215015 | +15.216 216015 | +15.228 228015 | +15.254 300015 | +15.3 121 3015 | +150.128 150 | +150.129 129150 | +150.151 151150 | +150.171 171150 | +150.200 200150 | +150.201 201150 | +150.210 210150 | +150.211 211150 | +150.212 212150 | +150.215 215150 | +150.216 216150 | +150.254 300150 | +151.128 151 | +151.129 129151 | +151.131 131151 | +151.151 151151 | +151.160 151 | +151.170 151 | +151.171 171151 | +151.180 151 | +151.190 151 | +151.200 200151 | +151.210 210151 | +151.211 211151 | +151.212 212151 | +151.215 215151 | +151.216 216151 | +151.234 234151 | +151.254 300151 | +152.128 152 | +152.129 129152 | +152.150 150152 | +152.151 151152 | +152.160 152 | +152.171 171152 | +152.200 200152 | +152.201 500158 500158 | +152.210 210152 | +152.211 211152 | +152.212 212152 | +152.215 215152 | +152.216 216152 | +152.254 300152 | +153.128 153 | +153.129 129153 | +153.150 150153 | +153.151 151153 | +153.171 171153 | +153.172 172153 | +153.173 173153 | +153.200 200153 | +153.201 500159 500159 | +153.210 210153 | +153.211 211153 | +153.212 212153 | +153.215 215153 | +153.216 216153 | +153.254 300153 | +154.128 154 | +154.129 129154 | +154.150 150154 | +154.151 151154 | +154.171 171154 | +154.172 172154 | +154.173 173154 | +154.200 200154 | +154.201 500160 500160 | +154.203 500303 500303 | +154.210 210154 | +154.211 211154 | +154.212 212154 | +154.215 215154 | +154.216 216154 | +154.254 300154 | +155.128 155 | +155.129 129155 | +155.150 150155 | +155.151 151155 | +155.160 155 | +155.170 155 | +155.171 171155 | +155.180 155 | +155.190 155 | +155.200 200155 | +155.210 210155 | +155.211 211155 | +155.212 212155 | +155.215 215155 | +155.216 216155 | +155.254 300155 | +156.1 85001156 | +156.128 156 | +156.129 129156 | +156.151 151156 | +156.160 160156 | +156.171 171156 | +156.200 200156 | +156.210 210156 | +156.211 211156 | +156.212 212156 | +156.215 215156 | +156.216 216156 | +156.254 300156 | +157.1 85001157 | +157.128 157 | +157.129 129157 | +157.151 151157 | +157.160 160157 | +157.170 157 | +157.171 171157 | +157.190 157 | +157.200 200157 | +157.203 500304 500304 | +157.210 210157 | +157.211 211157 | +157.212 212157 | +157.215 215157 | +157.216 216157 | +157.254 300157 | +158.128 158 | +158.129 129158 | +158.151 151158 | +158.160 158 | +158.171 171158 | +158.200 200158 | +158.210 210158 | +158.211 211158 | +158.212 212158 | +158.215 215158 | +158.216 216158 | +158.254 300158 | +159.128 159 | +159.129 129159 | +159.151 151159 | +159.171 171159 | +159.200 200159 | +159.210 210159 | +159.211 211159 | +159.212 212159 | +159.215 215159 | +159.216 216159 | +159.254 300159 | +16.1 122 3016 | +16.128 16 | +16.131 131016 | +16.133 133016 | +16.2 122 3016 500016 500016 | +16.201 201016 | +16.204 500323 500323 | +16.206 500374 500374 | +16.210 210016 | +16.211 211016 | +16.212 212016 | +16.214 214016 | +16.215 215016 | +16.216 216016 | +16.228 228016 | +16.254 300016 | +16.3 122 3016 | +160.1 85001160 | +160.128 160 | +160.129 129160 | +160.151 151160 | +160.171 171160 | +160.200 200160 | +160.210 210160 | +160.211 211160 | +160.212 212160 | +160.215 215160 | +160.216 216160 | +160.254 300160 | +161.128 161 | +161.129 129161 | +161.151 151161 | +161.171 171161 | +161.200 200161 | +161.210 210161 | +161.211 211161 | +161.212 212161 | +161.215 215161 | +161.216 216161 | +162.128 162 | +162.129 129162 | +162.151 151162 | +162.171 171162 | +162.200 200162 | +162.210 210162 | +162.211 211162 | +162.212 212162 | +162.215 215162 | +162.216 216162 | +162.254 300162 | +163.128 163 | +163.129 129163 | +163.151 151163 | +163.171 171163 | +163.200 200163 | +163.210 210163 | +163.211 211163 | +163.212 212163 | +163.215 215163 | +163.216 216163 | +163.254 300163 | +164.128 164 | +164.129 129164 | +164.131 131164 | +164.151 151164 | +164.160 164 | +164.170 164 | +164.171 171164 | +164.174 174164 | +164.175 175164 | +164.180 164 | +164.190 164 | +164.200 200164 | +164.210 210164 | +164.211 211164 | +164.212 212164 | +164.215 215164 | +164.216 216164 | +164.228 228164 | +164.254 300164 | +165.128 165 | +165.129 129165 | +165.131 131165 | +165.132 132165 | +165.151 151165 | +165.160 165 | +165.171 171165 | +165.180 165 | +165.190 165 | +165.200 200165 | +165.210 210165 | +165.211 211165 | +165.212 212165 | +165.215 215165 | +165.216 216165 | +165.254 300165 | +166.128 166 | +166.129 129166 | +166.151 151166 | +166.160 166 | +166.171 171166 | +166.180 166 | +166.190 166 | +166.200 200166 | +166.210 210166 | +166.211 211166 | +166.212 212166 | +166.215 215166 | +166.216 216166 | +167.128 167 | +167.129 129167 | +167.131 131167 | +167.132 132167 | +167.151 151167 | +167.160 167 | +167.171 171167 | +167.174 174167 | +167.175 175167 | +167.180 167 | +167.190 167 | +167.200 200167 | +167.212 212167 | +167.215 215167 | +167.216 216167 | +167.234 234167 | +167.254 300167 | +168.128 168 | +168.129 129168 | +168.150 150168 | +168.151 151168 | +168.160 168 | +168.171 171168 | +168.174 174168 | +168.175 175168 | +168.180 168 | +168.190 168 | +168.200 200168 | +168.212 212168 | +168.215 215168 | +168.216 216168 | +168.254 300168 | +169.128 169 | +169.129 129169 | +169.150 150169 | +169.151 151169 | +169.171 171169 | +169.172 172169 | +169.173 173169 | +169.190 169 | +169.200 200169 | +169.212 212169 | +169.215 215169 | +169.216 216169 | +169.230 230169 | +169.254 300169 | +17.1 3017 | +17.128 17 | +17.131 131017 | +17.133 133017 | +17.2 3017 500017 500017 500018 500018 | +17.201 201017 | +17.202 500192 500192 | +17.206 500375 500375 | +17.210 210017 | +17.211 211017 | +17.212 212017 | +17.214 214017 | +17.215 215017 | +17.216 216017 | +17.228 228017 | +17.254 300017 | +17.3 3017 | +170.128 170 | +170.129 129170 | +170.150 150170 | +170.151 151170 | +170.160 170 | +170.171 171170 | +170.174 174170 | +170.175 175170 | +170.190 190170 | +170.200 200170 | +170.201 500161 500161 | +170.212 212170 | +170.215 215170 | +170.216 216170 | +170.228 228170 | +170.254 300170 | +171.128 171 | +171.129 129171 | +171.150 150171 | +171.151 151171 | +171.160 160171 | +171.170 170171 | +171.171 171171 | +171.190 190171 | +171.200 200171 | +171.201 500162 500162 | +171.212 212171 | +171.215 215171 | +171.216 216171 | +171.228 228171 | +171.254 300171 | +172.128 172 | +172.129 129172 | +172.150 150172 | +172.151 151172 | +172.160 172 | +172.171 172 | +172.174 172 | +172.175 172 | +172.180 172 | +172.190 172 | +172.200 200172 | +172.212 212172 | +172.215 215172 | +172.216 216172 | +172.254 300172 | +173.128 173 | +173.129 129173 | +173.150 150173 | +173.151 151173 | +173.160 173 | +173.171 171173 | +173.190 190173 | +173.200 200173 | +173.201 500163 500163 | +173.212 212173 | +173.215 215173 | +173.216 216173 | +173.254 300173 | +174.128 174 | +174.129 129174 | +174.151 151174 | +174.160 174 | +174.171 171174 | +174.190 174 | +174.200 200174 | +174.212 212174 | +174.215 215174 | +174.216 216174 | +174.230 230174 | +174.254 300174 | +175.128 175 | +175.129 129175 | +175.151 151175 | +175.171 171175 | +175.172 172175 | +175.173 173175 | +175.174 174175 | +175.175 175175 | +175.190 175 | +175.200 200175 | +175.212 212175 | +175.215 215175 | +175.216 216175 | +175.230 230175 | +175.254 300175 | +176.128 176 | +176.129 129176 | +176.151 151176 | +176.160 176 | +176.170 176 | +176.171 171176 | +176.172 172176 | +176.173 173176 | +176.180 180176 | +176.190 176 | +176.200 200176 | +176.212 212176 | +176.215 215176 | +176.216 216176 | +176.230 230176 | +176.254 300176 | +177.128 177 | +177.129 129177 | +177.151 151177 | +177.160 177 | +177.170 177 | +177.171 171177 | +177.172 172177 | +177.173 173177 | +177.180 180177 | +177.190 177 | +177.200 200177 | +177.212 212177 | +177.215 215177 | +177.216 216177 | +177.230 230177 | +177.254 300177 | +178.128 178 | +178.129 129178 | +178.151 151178 | +178.160 178 | +178.171 171178 | +178.172 172178 | +178.173 173178 | +178.180 180178 | +178.190 178 | +178.200 200178 | +178.212 212178 | +178.215 215178 | +178.216 216178 | +178.230 230178 | +178.254 300178 | +179.128 179 | +179.129 129179 | +179.151 151179 | +179.160 179 | +179.170 170179 | +179.171 171179 | +179.172 172179 | +179.173 173179 | +179.180 180179 | +179.190 179 | +179.200 200179 | +179.212 212179 | +179.215 215179 | +179.216 216179 | +179.230 230179 | +179.254 300179 | +18.1 3018 | +18.128 18 | +18.131 131018 | +18.133 133018 | +18.2 3018 | +18.201 500094 500094 | +18.202 500193 500193 | +18.210 210018 | +18.211 211018 | +18.212 212018 | +18.214 214018 | +18.215 215018 | +18.216 216018 | +18.228 228018 | +18.254 300018 | +18.3 3018 | +180.128 180 | +180.129 129180 | +180.150 150180 | +180.151 151180 | +180.160 160180 | +180.170 180 | +180.171 171180 | +180.172 172180 | +180.173 173180 | +180.180 180 | +180.200 200180 | +180.202 500242 500242 | +180.212 212180 | +180.216 216180 | +180.230 230180 | +180.254 300180 | +181.128 181 | +181.129 129181 | +181.150 150181 | +181.151 151181 | +181.160 160181 | +181.170 181 | +181.171 171181 | +181.172 172181 | +181.173 173181 | +181.180 181 | +181.200 200181 | +181.210 210181 | +181.211 211181 | +181.212 212181 | +181.216 216181 | +181.230 230181 | +181.254 300181 | +182.128 182 | +182.129 129182 | +182.150 150182 | +182.151 151182 | +182.160 160182 | +182.170 182 | +182.171 171182 | +182.172 172182 | +182.173 173182 | +182.180 182 | +182.190 182 | +182.200 200182 | +182.210 210182 | +182.211 211182 | +182.212 212182 | +182.216 216182 | +182.230 230182 | +182.254 300182 | +183.128 183 | +183.129 129183 | +183.150 150183 | +183.151 151183 | +183.160 183 | +183.171 171183 | +183.174 174183 | +183.175 175183 | +183.200 200183 | +183.210 210183 | +183.211 211183 | +183.212 212183 | +183.216 216183 | +183.254 300183 | +184.128 184 | +184.129 129184 | +184.151 151184 | +184.160 160184 | +184.170 184 | +184.171 171184 | +184.200 200184 | +184.210 210184 | +184.211 211184 | +184.212 212184 | +184.216 216184 | +184.254 300184 | +185.128 185 | +185.129 129185 | +185.151 151185 | +185.160 185 | +185.170 185 | +185.171 171185 | +185.200 200185 | +185.210 210185 | +185.211 211185 | +185.212 212185 | +185.216 216185 | +185.254 300185 | +186.128 186 | +186.129 129186 | +186.151 151186 | +186.160 186 | +186.171 171186 | +186.200 200186 | +186.210 210186 | +186.212 212186 | +186.216 216186 | +186.254 300186 | +187.128 187 | +187.129 129187 | +187.151 151187 | +187.160 187 | +187.171 171187 | +187.200 200187 | +187.201 201187 500164 500164 | +187.206 500385 500385 | +187.207 500388 500388 | +187.210 210187 | +187.212 212187 | +187.216 216187 | +187.254 300187 | +188.128 188 | +188.129 129188 | +188.151 151188 | +188.160 188 | +188.171 171188 | +188.200 200188 | +188.210 210188 | +188.212 212188 | +188.216 216188 | +188.254 300188 | +189.128 189 | +189.129 129189 | +189.171 171189 | +189.172 172189 | +189.173 173189 | +189.200 200189 | +189.210 210189 | +189.212 212189 | +189.216 216189 | +189.230 230189 | +189.254 300189 | +19.1 3019 | +19.128 19 | +19.133 133019 | +19.2 3019 | +19.201 500095 500095 | +19.202 500194 500194 | +19.210 210019 | +19.211 211019 | +19.212 212019 | +19.214 214019 | +19.215 215019 | +19.216 216019 | +19.228 228019 | +19.254 300019 | +19.3 3019 | +190.128 190 | +190.129 129190 | +190.151 151190 | +190.160 190 | +190.171 171190 | +190.200 200190 | +190.210 210190 | +190.212 212190 | +190.216 216190 | +190.254 300190 | +191.128 191 | +191.129 129191 | +191.151 151191 | +191.160 191 | +191.171 171191 | +191.200 200191 | +191.210 210191 | +191.212 212191 | +191.216 216191 | +191.254 300191 | +192.128 192 | +192.129 129192 | +192.151 151192 | +192.160 192 | +192.171 171192 | +192.200 200192 | +192.210 210192 | +192.212 212192 | +192.216 216192 | +192.254 300192 | +193.128 193 | +193.129 129193 | +193.151 151193 | +193.160 193 | +193.171 171193 | +193.200 200193 | +193.210 210193 | +193.212 212193 | +193.216 216193 | +193.254 300193 | +194.128 194 | +194.129 129194 | +194.151 151194 | +194.171 171194 | +194.200 200194 | +194.201 500165 500165 | +194.202 500243 500243 | +194.210 210194 | +194.212 212194 | +194.216 216194 | +194.254 300194 | +195.128 195 | +195.129 129195 | +195.160 195 | +195.171 171195 | +195.172 172195 | +195.173 173195 | +195.200 200195 | +195.202 500244 500244 | +195.210 210195 | +195.212 212195 | +195.216 216195 | +195.230 230195 | +195.254 300195 | +196.128 196 | +196.129 129196 | +196.160 196 | +196.171 171196 | +196.172 172196 | +196.173 173196 | +196.200 200196 | +196.202 500245 500245 | +196.203 500305 500305 | +196.210 210196 | +196.212 212196 | +196.216 216196 | +196.230 230196 | +196.254 300196 | +197.128 197 | +197.129 129197 | +197.160 197 | +197.171 171197 | +197.172 172197 | +197.173 173197 | +197.200 200197 | +197.201 500166 500166 | +197.202 500246 500246 | +197.210 210197 | +197.212 212197 | +197.216 216197 | +197.230 230197 | +197.254 300197 | +198.128 198 | +198.129 129198 | +198.160 160198 | +198.171 171198 | +198.200 200198 | +198.201 500167 500167 | +198.202 500247 500247 | +198.212 212198 | +198.216 216198 | +198.230 230198 | +198.254 300198 | +199.128 199 | +199.129 129199 | +199.151 151199 | +199.160 160199 | +199.171 171199 | +199.200 200199 | +199.201 500168 500168 | +199.202 500248 500248 | +199.212 212199 | +199.216 216199 | +2.1 151 | +2.128 2 | +2.129 129002 | +2.131 131002 | +2.133 133002 | +2.171 171002 | +2.2 151 500002 500002 | +2.200 200002 | +2.201 201002 | +2.204 500309 500309 | +2.205 500328 500328 500329 500329 500330 500330 500331 500331 | +2.210 210002 | +2.211 211002 | +2.212 212002 | +2.213 213002 | +2.214 214002 | +2.215 215002 | +2.216 216002 | +2.228 228002 | +2.254 300002 | +2.3 151 | +20.1 3020 | +20.128 20 | +20.131 131020 | +20.133 133020 | +20.2 3020 | +20.201 500096 500096 | +20.210 210020 | +20.211 211020 | +20.212 212020 | +20.214 214020 | +20.215 215020 | +20.216 216020 | +20.3 3020 | +200.128 200 | +200.129 129200 | +200.140 140200 | +200.151 151200 | +200.160 200 | +200.171 171200 | +200.200 200200 | +200.201 201200 500169 500169 | +200.202 500249 500249 | +200.212 212200 | +200.216 216200 | +200.254 300200 | +201.128 201 | +201.129 129201 | +201.131 131201 | +201.132 132201 | +201.151 151201 | +201.160 160201 | +201.170 201 | +201.171 171201 | +201.174 174201 | +201.175 175201 | +201.190 201 | +201.200 200201 | +201.202 500250 500250 | +201.212 212201 | +201.216 216201 | +201.254 300201 | +202.128 202 | +202.129 129202 | +202.131 131202 | +202.132 132202 | +202.151 151202 | +202.160 160202 | +202.170 202 | +202.171 171202 | +202.174 174202 | +202.175 175202 | +202.190 202 | +202.200 200202 | +202.202 500251 500251 | +202.212 212202 | +202.216 216202 | +202.254 300202 | +203.128 203 | +203.129 129203 | +203.151 151203 | +203.171 171203 | +203.200 200203 | +203.201 201203 500170 500170 | +203.202 500252 500252 | +203.203 500306 500306 | +203.210 210203 | +203.211 211203 | +203.212 212203 | +203.216 216203 | +203.254 300203 | +204.128 204 | +204.129 129204 | +204.151 151204 | +204.160 204 | +204.171 171204 | +204.200 200204 | +204.202 500253 500253 | +204.203 500307 500307 | +204.212 212204 | +204.216 216204 | +205.128 205 | +205.129 129205 | +205.151 151205 | +205.160 160205 | +205.171 171205 | +205.172 172205 | +205.173 173205 | +205.180 205 | +205.200 200205 | +205.202 500254 500254 | +205.212 212205 | +205.216 216205 | +205.230 230205 | +205.254 300205 | +206.128 206 | +206.129 129206 | +206.151 151206 | +206.160 160206 | +206.162 162206 | +206.171 171206 | +206.200 200206 | +206.202 500255 500255 | +206.210 210206 | +206.211 211206 | +206.212 212206 | +206.216 216206 | +206.254 300206 | +207.128 207 | +207.129 129207 | +207.151 151207 | +207.160 160207 | +207.162 162207 | +207.171 171207 | +207.200 200207 | +207.202 500256 500256 | +207.210 210207 | +207.211 211207 | +207.212 212207 | +207.216 216207 | +207.254 300207 | +208.128 208 | +208.129 129208 | +208.130 130208 | +208.151 151208 | +208.160 160208 | +208.162 162208 | +208.171 171208 | +208.172 172208 | +208.173 173208 | +208.200 200208 | +208.202 500257 500257 | +208.210 210208 | +208.211 211208 | +208.212 212208 | +208.216 216208 | +208.230 230208 | +208.254 300208 | +209.128 209 | +209.129 129209 | +209.130 130209 | +209.151 151209 | +209.160 160209 | +209.162 162209 | +209.171 171209 | +209.172 172209 | +209.173 173209 | +209.200 200209 | +209.202 500258 500258 | +209.210 210209 | +209.211 211209 | +209.212 212209 | +209.216 216209 | +209.230 230209 | +209.254 300209 | +20d 151163 | +21.1 3021 | +21.128 21 | +21.129 129021 | +21.131 131021 | +21.133 133021 | +21.171 171021 | +21.2 3021 500019 500019 | +21.200 200021 | +21.201 500097 500097 | +21.210 210021 | +21.211 211021 | +21.212 212021 | +21.214 214021 | +21.215 215021 | +21.216 216021 | +21.228 228021 | +21.254 300021 | +21.3 3021 | +210.128 210 | +210.129 129210 | +210.130 130210 | +210.151 151210 | +210.160 160210 | +210.162 162210 | +210.171 171210 | +210.172 172210 | +210.173 173210 | +210.200 200210 | +210.202 500259 500259 | +210.210 210210 | +210.211 211210 | +210.212 212210 | +210.216 216210 | +210.230 230210 | +210.254 300210 | +211.128 211 | +211.129 129211 | +211.130 130211 | +211.140 140211 | +211.151 151211 | +211.160 160211 | +211.162 162211 | +211.171 171211 | +211.172 172211 | +211.173 173211 | +211.200 200211 | +211.202 500260 500260 | +211.210 210211 | +211.211 211211 | +211.212 212211 | +211.216 216211 | +211.230 230211 | +211.254 300211 | +212.128 212 | +212.129 129212 | +212.130 130212 | +212.140 140212 | +212.151 151212 | +212.160 160212 | +212.162 162212 | +212.171 171212 | +212.172 172212 | +212.173 173212 | +212.200 200212 | +212.201 500171 500171 | +212.202 500261 500261 | +212.210 210212 | +212.211 211212 | +212.212 212212 | +212.216 216212 | +212.230 230212 | +212.254 300212 | +213.128 213 | +213.130 130213 | +213.140 140213 | +213.160 160213 | +213.162 162213 | +213.202 500262 500262 | +213.210 210213 | +213.211 211213 | +213.212 212213 | +213.216 216213 | +213.254 300213 | +214.128 214 | +214.129 129214 | +214.130 130214 | +214.140 140214 | +214.160 160214 | +214.162 162214 | +214.171 171214 | +214.200 200214 | +214.202 500263 500263 | +214.210 210214 | +214.211 211214 | +214.212 212214 | +214.216 216214 | +214.254 300214 | +215.128 215 | +215.129 129215 | +215.130 130215 | +215.140 140215 | +215.160 160215 | +215.162 162215 | +215.171 171215 | +215.200 200215 | +215.201 201215 500172 500172 | +215.202 500264 500264 | +215.210 210215 | +215.211 211215 | +215.212 212215 | +215.216 216215 | +215.254 300215 | +216.128 216 | +216.129 129216 | +216.130 130216 | +216.132 132216 | +216.140 140216 | +216.160 160216 | +216.162 162216 | +216.171 171216 | +216.200 200216 | +216.202 500265 500265 | +216.210 210216 | +216.211 211216 | +216.212 212216 | +216.216 216216 | +217.128 217 | +217.129 129217 | +217.130 130217 | +217.140 140217 | +217.160 160217 | +217.162 162217 | +217.171 171217 | +217.200 200217 | +217.202 500266 500266 | +217.210 210217 | +217.212 212217 | +217.216 216217 | +218.128 218 | +218.129 129218 | +218.130 130218 | +218.140 140218 | +218.160 160218 | +218.162 162218 | +218.171 171218 | +218.200 200218 | +218.202 500267 500267 | +218.210 210218 | +218.212 212218 | +218.216 216218 | +218.254 300218 | +219.128 219 | +219.129 129219 | +219.130 130219 | +219.140 140219 | +219.160 160219 | +219.162 162219 | +219.171 171219 | +219.200 200219 | +219.202 500268 500268 | +219.210 210219 | +219.212 212219 | +219.216 216219 | +219.254 300219 | +22.1 3022 | +22.128 22 | +22.129 129022 | +22.131 131022 | +22.133 133022 | +22.171 171022 | +22.2 3022 | +22.200 200022 | +22.210 210022 | +22.211 211022 | +22.212 212022 | +22.214 214022 | +22.215 215022 | +22.216 216022 | +22.228 228022 | +22.254 300022 | +22.3 3022 | +220.128 220 | +220.129 129220 | +220.130 130220 | +220.140 140220 | +220.160 160220 | +220.162 162220 | +220.171 171220 | +220.200 200220 | +220.202 500269 500269 | +220.210 210220 | +220.212 212220 | +220.216 216220 | +220.254 300220 | +221.128 221 | +221.129 129221 | +221.130 130221 | +221.140 140221 | +221.160 160221 | +221.162 162221 | +221.171 171221 | +221.200 200221 | +221.202 500270 500270 | +221.210 210221 | +221.212 212221 | +221.216 216221 | +221.254 300221 | +222.128 222 | +222.129 129222 | +222.130 222 | +222.140 140222 | +222.160 160222 | +222.162 162222 | +222.171 171222 | +222.200 200222 | +222.202 500271 500271 | +222.210 210222 | +222.212 212222 | +222.216 216222 | +222.254 300222 | +223.128 223 | +223.129 129223 | +223.130 223 | +223.140 140223 | +223.160 160223 | +223.162 162223 | +223.171 171223 | +223.200 200223 | +223.202 500272 500272 | +223.210 210223 | +223.212 212223 | +223.216 216223 | +223.254 300223 | +224.128 224 | +224.129 129224 | +224.130 130224 | +224.140 140224 | +224.160 160224 | +224.162 162224 | +224.171 171224 | +224.200 200224 | +224.202 500273 500273 | +224.210 210224 | +224.212 212224 | +224.216 216224 | +224.254 300224 | +225.128 225 | +225.129 129225 | +225.130 130225 | +225.140 140225 | +225.160 160225 | +225.162 162225 | +225.171 171225 | +225.200 200225 | +225.202 500274 500274 | +225.210 210225 | +225.212 212225 | +225.216 216225 | +225.254 300225 | +226.128 226 | +226.129 129226 | +226.130 130226 | +226.140 140226 | +226.160 160226 | +226.162 162226 | +226.171 171226 | +226.200 200226 | +226.202 500275 500275 | +226.210 210226 | +226.212 212226 | +226.216 216226 | +226.254 300226 | +227.128 227 | +227.129 129227 | +227.130 227 | +227.140 140227 | +227.162 162227 | +227.171 171227 | +227.200 200227 | +227.202 500276 500276 | +227.210 210227 | +227.212 212227 | +227.216 216227 | +227.254 300227 | +228.128 228 | +228.129 129228 | +228.130 130228 | +228.131 131228 | +228.132 132228 | +228.140 140228 | +228.160 228 | +228.170 228 | +228.171 171228 | +228.172 172228 | +228.173 173228 | +228.190 228 | +228.200 200228 | +228.202 500277 500277 | +228.210 210228 | +228.212 212228 | +228.216 216228 | +228.220 220228 | +228.228 228228 | +228.230 230228 | +228.234 234228 | +229.128 229 | +229.129 129229 | +229.130 130229 | +229.131 131229 | +229.140 140229 | +229.160 229 | +229.162 162229 | +229.171 171229 | +229.190 190229 | +229.200 200229 | +229.202 500278 500278 | +229.210 210229 | +229.212 212229 | +229.216 216229 | +23.1 3023 | +23.128 23 | +23.129 129023 | +23.131 131023 | +23.133 133023 | +23.171 171023 | +23.2 3023 | +23.200 200023 | +23.210 210023 | +23.211 211023 | +23.212 212023 | +23.214 214023 | +23.215 215023 | +23.216 216023 | +23.228 228023 | +23.254 300023 | +23.3 3023 | +230.128 230 | +230.129 129230 | +230.130 130230 | +230.140 140230 | +230.160 230 | +230.162 162230 | +230.171 171230 | +230.200 200230 | +230.201 500173 500173 500174 500174 500175 500175 | +230.210 210230 | +230.212 212230 | +230.216 216230 | +230.254 300230 | +231.128 231 | +231.129 129231 | +231.130 130231 | +231.140 140231 | +231.160 160231 | +231.162 162231 | +231.171 171231 | +231.200 200231 | +231.202 500279 500279 500280 500280 | +231.210 210231 | +231.212 212231 | +231.216 216231 | +231.254 300231 | +232.128 232 | +232.129 129232 | +232.130 130232 | +232.131 131232 | +232.140 140232 | +232.160 232 | +232.162 162232 | +232.171 171232 | +232.200 200232 | +232.201 500176 500176 | +232.202 500281 500281 500282 500282 | +232.210 210232 | +232.212 212232 | +232.216 216232 | +232.254 300232 | +233.128 233 | +233.129 129233 | +233.140 140233 | +233.160 233 | +233.162 162233 | +233.171 171233 | +233.200 200233 | +233.201 500177 500177 | +233.202 500283 500283 500284 500284 | +233.210 210233 | +233.212 212233 | +233.216 216233 | +233.254 300233 | +234.128 234 | +234.129 129234 | +234.140 140234 | +234.160 234 | +234.171 171234 | +234.200 200234 | +234.210 210234 | +234.212 212234 | +234.216 216234 | +234.254 300234 | +235.128 235 | +235.129 129235 | +235.140 140235 | +235.160 235 | +235.171 171235 | +235.200 200235 | +235.210 210235 | +235.212 212235 | +235.216 216235 | +235.254 300235 | +236.128 236 | +236.129 129236 | +236.140 140236 | +236.160 236 | +236.171 171236 | +236.174 174236 | +236.175 175236 | +236.200 200236 | +236.201 500178 500178 | +236.210 210236 | +236.212 212236 | +236.216 216236 | +236.254 300236 | +237.128 237 | +237.129 129237 | +237.140 140237 | +237.160 237 | +237.171 171237 | +237.200 200237 | +237.201 500179 500179 | +237.210 210237 | +237.212 212237 | +237.216 216237 | +237.254 300237 | +238.128 238 | +238.129 129238 | +238.140 140238 | +238.160 238 | +238.171 171238 | +238.200 200238 | +238.201 500180 500180 | +238.210 210238 | +238.212 212238 | +238.216 216238 | +238.254 300238 | +239.128 239 | +239.129 129239 | +239.140 140239 | +239.160 160239 | +239.171 171239 | +239.172 172239 | +239.173 173239 | +239.200 200239 | +239.201 500181 500181 | +239.210 210239 | +239.212 212239 | +239.216 216239 | +239.254 300239 | +24.1 3024 | +24.128 24 | +24.129 129024 | +24.131 131024 | +24.133 133024 | +24.2 3024 | +24.200 200024 | +24.210 210024 | +24.211 211024 | +24.212 212024 | +24.214 214024 | +24.215 215024 | +24.216 216024 | +24.228 228024 | +24.3 3024 | +240.128 240 | +240.129 129240 | +240.140 140240 | +240.160 160240 | +240.171 171240 | +240.172 172240 | +240.173 173240 | +240.200 200240 | +240.201 500182 500182 | +240.210 210240 | +240.212 212240 | +240.216 216240 | +240.254 300240 | +241.128 241 | +241.129 129241 | +241.140 140241 | +241.160 160241 | +241.171 171241 | +241.200 200241 | +241.201 201241 500183 500183 | +241.210 210241 | +241.212 212241 | +241.216 216241 | +241.254 300241 | +242.128 242 | +242.129 129242 | +242.140 140242 | +242.160 160242 | +242.171 171242 | +242.200 200242 | +242.212 212242 | +242.216 216242 | +242.228 228242 | +242.254 300242 | +243.128 243 | +243.129 129243 | +243.140 140243 | +243.160 160243 | +243.171 171243 | +243.200 200243 | +243.201 500184 500184 | +243.212 212243 | +243.216 216243 | +243.228 228243 | +243.254 300243 | +244.128 244 | +244.129 129244 | +244.140 140244 | +244.160 244 | +244.171 171244 | +244.200 200244 | +244.212 212244 | +244.216 216244 | +244.228 228244 | +244.254 300244 | +245.128 245 | +245.129 129245 | +245.140 140245 | +245.160 245 | +245.171 171245 | +245.200 200245 | +245.212 212245 | +245.216 216245 | +245.228 228245 | +245.254 300245 | +246.128 246 | +246.129 129246 | +246.140 140246 | +246.160 160246 | +246.171 171246 | +246.200 200246 | +246.212 212246 | +246.216 216246 | +246.228 228246 | +246.254 300246 | +247.128 247 | +247.129 129247 | +247.140 140247 | +247.160 160247 | +247.171 171247 | +247.200 200247 | +247.212 212247 | +247.216 216247 | +247.228 228247 | +247.254 300247 | +248.128 248 | +248.129 129248 | +248.140 140248 | +248.171 171248 | +248.200 200248 | +248.202 500285 500285 | +248.212 212248 | +248.216 216248 | +248.254 300248 | +249.128 249 | +249.129 129249 | +249.140 140249 | +249.160 160249 | +249.171 171249 | +249.200 200249 | +249.212 212249 | +249.216 216249 | +249.228 228249 | +249.254 300249 | +25.1 3025 | +25.128 25 | +25.129 129025 | +25.131 131025 | +25.133 133025 | +25.2 3025 | +25.200 200025 | +25.210 210025 | +25.211 211025 | +25.212 212025 | +25.214 214025 | +25.215 215025 | +25.216 216025 | +25.228 228025 | +25.254 300025 | +25.3 3025 | +250.128 250 | +250.129 129250 | +250.140 140250 | +250.171 171250 | +250.200 200250 | +250.212 212250 | +250.216 216250 | +250.228 228250 | +250.254 300250 | +251.128 251 | +251.129 129251 | +251.140 140251 | +251.171 171251 | +251.200 200251 | +251.212 212251 | +251.216 216251 | +251.228 228251 | +251.254 300251 | +252.128 252 | +252.129 129252 | +252.140 140252 | +252.171 171252 | +252.200 200252 | +252.212 212252 | +252.216 216252 | +252.228 228252 | +252.254 300252 | +253.128 253 | +253.129 129253 | +253.140 140253 | +253.171 171253 | +253.200 200253 | +253.212 212253 | +253.216 216253 | +253.228 228253 | +253.254 300253 | +254.128 254 | +254.129 129254 | +254.140 140254 | +254.160 160254 | +254.171 171254 | +254.200 200254 | +254.212 212254 | +254.216 216254 | +254.228 228254 | +254.254 300254 | +255.128 255 | +255.129 129255 | +255.130 255 | +255.131 131255 | +255.132 255 | +255.140 140255 | +255.150 150255 | +255.151 151255 | +255.160 255 | +255.162 162255 | +255.170 255 | +255.171 171255 | +255.172 172255 | +255.173 173255 | +255.174 174255 | +255.175 175255 | +255.180 255 | +255.190 255 | +255.200 200255 | +255.201 201255 | +255.212 212255 | +255.216 216255 | +255.254 300255 | +26.1 3026 | +26.128 26 | +26.129 129026 | +26.133 133026 | +26.171 171026 | +26.2 3026 | +26.200 200026 | +26.210 210026 | +26.211 211026 | +26.212 212026 | +26.214 214026 | +26.215 215026 | +26.216 216026 | +26.228 228026 | +26.254 300026 | +26.3 3026 | +27.1 3027 | +27.128 27 | +27.129 129027 | +27.133 133027 | +27.171 171027 | +27.2 3027 | +27.200 200027 | +27.210 210027 | +27.211 211027 | +27.212 212027 | +27.214 214027 | +27.215 215027 | +27.216 216027 | +27.228 228027 | +27.254 300027 | +27.3 3027 | +28.1 3028 | +28.128 28 | +28.129 129028 | +28.133 133028 | +28.171 171028 | +28.2 3028 500020 500020 | +28.200 200028 | +28.210 210028 | +28.211 211028 | +28.212 212028 | +28.214 214028 | +28.215 215028 | +28.216 216028 | +28.228 228028 | +28.254 300028 | +28.3 3028 | +29.1 3029 | +29.128 29 | +29.129 129029 | +29.133 133029 | +29.171 171029 | +29.2 3029 500021 500021 | +29.200 200029 | +29.201 201029 500098 500098 | +29.203 500286 500286 | +29.210 210029 | +29.211 211029 | +29.212 212029 | +29.214 214029 | +29.215 215029 | +29.216 216029 | +29.254 300029 | +29.3 3029 | +2d 168 | +2da 171168 | +2ddiff 200168 | +2dfd 140251 | +2dgrd 129168 | +2dsp 140250 | +2t 167 | +2ta 171167 | +2tag0 131003 | +2tag1 131002 | +2tag2 131001 | +2talm1 131004 | +2talm2 131005 | +2tdiff 200167 | +2tgrd 129167 | +2ti 132167 | +2tl273 131073 | +2tp 131139 131167 | +2tpg25 133006 | +2tpg30 133007 | +2tpg35 133008 | +2tpg40 133009 | +2tpg45 133010 | +2tpl0 133003 | +2tpl10 133005 | +2tpl5 133004 | +2tplm10 133001 | +2tplm5 133002 | +2ts 234167 | +3.1 3003 | +3.128 3 | +3.129 129003 | +3.131 131003 | +3.133 133003 | +3.171 171003 | +3.2 3003 500003 500003 | +3.200 200003 | +3.201 201003 | +3.204 500310 500310 | +3.205 500332 500332 500333 500333 500334 500334 500335 500335 500336 500336 500337 500337 500338 500338 500339 500339 | +3.210 210003 | +3.211 211003 | +3.212 212003 | +3.213 213003 | +3.214 214003 | +3.215 215003 | +3.216 216003 | +3.228 228003 | +3.254 300003 | +3.3 3003 | +30.1 3030 | +30.128 30 | +30.129 129030 | +30.133 133030 | +30.171 171030 | +30.2 3030 500022 500022 | +30.200 200030 | +30.201 201030 500099 500099 | +30.203 500287 500287 | +30.210 210030 | +30.211 211030 | +30.212 212030 | +30.214 214030 | +30.215 215030 | +30.216 216030 | +30.254 300030 | +30.3 3030 | +31.1 3031 | +31.128 31 | +31.129 129031 | +31.133 133031 | +31.171 171031 | +31.174 174031 | +31.175 175031 | +31.2 3031 500023 500023 500024 500024 | +31.200 200031 | +31.201 201031 500100 500100 | +31.210 210031 | +31.211 211031 | +31.212 212031 | +31.214 214031 | +31.215 215031 | +31.216 216031 | +31.254 300031 | +31.3 3031 | +32.1 10 | +32.128 32 | +32.129 129032 | +32.133 133032 | +32.171 171032 | +32.2 10 500025 500025 500026 500026 | +32.200 200032 | +32.201 201032 | +32.210 210032 | +32.211 211032 | +32.212 212032 | +32.214 214032 | +32.215 215032 | +32.216 216032 | +32.254 300032 | +32.3 10 | +33.1 131 165 | +33.128 33 | +33.129 129033 | +33.133 133033 | +33.171 171033 | +33.2 131 165 500027 500027 500028 500028 | +33.200 200033 | +33.201 201033 500101 500101 | +33.203 500288 500288 | +33.206 500376 500376 | +33.210 210033 | +33.211 211033 | +33.212 212033 | +33.214 214033 | +33.215 215033 | +33.216 216033 | +33.254 300033 | +33.3 131 165 | +34.1 132 166 | +34.128 34 | +34.129 129034 | +34.133 133034 | +34.171 171034 | +34.174 174034 | +34.175 175034 | +34.2 132 166 500029 500029 500030 500030 | +34.200 200034 | +34.201 201034 | +34.206 500377 500377 | +34.210 210034 | +34.211 211034 | +34.212 212034 | +34.214 214034 | +34.215 215034 | +34.216 216034 | +34.254 300034 | +34.3 132 166 | +35.1 1 | +35.128 35 | +35.129 129035 | +35.133 133035 | +35.171 171035 | +35.2 1 | +35.200 200035 | +35.201 201035 500102 500102 | +35.210 210035 | +35.211 211035 | +35.212 212035 | +35.214 214035 | +35.215 215035 | +35.216 216035 | +35.254 300035 | +35.3 1 | +36.1 2 | +36.128 36 | +36.129 129036 | +36.133 133036 | +36.171 171036 | +36.2 2 | +36.200 200036 | +36.201 201036 500103 500103 | +36.210 210036 | +36.211 211036 | +36.212 212036 | +36.214 214036 | +36.215 215036 | +36.216 216036 | +36.254 300036 | +36.3 2 | +37.1 3037 | +37.128 37 | +37.129 129037 | +37.133 133037 | +37.171 171037 | +37.2 3037 | +37.200 200037 | +37.201 201037 500104 500104 | +37.210 210037 | +37.211 211037 | +37.212 212037 | +37.214 214037 | +37.215 215037 | +37.216 216037 | +37.3 3037 | +38.1 3038 | +38.128 38 | +38.129 129038 | +38.133 133038 | +38.171 171038 | +38.2 3038 | +38.200 200038 | +38.201 201038 500105 500105 | +38.210 210038 | +38.211 211038 | +38.212 212038 | +38.214 214038 | +38.215 215038 | +38.216 216038 | +38.254 300038 | +38.3 3038 | +39.1 135 | +39.128 39 | +39.129 129039 | +39.133 133039 | +39.171 171039 | +39.174 174039 | +39.175 175039 | +39.2 135 500031 500031 | +39.200 200039 | +39.201 500106 500106 | +39.210 210039 | +39.211 211039 | +39.212 212039 | +39.214 214039 | +39.215 215039 | +39.216 216039 | +39.228 228039 | +39.254 300039 | +39.3 135 | +4.1 60 | +4.128 4 | +4.129 129004 | +4.131 131004 | +4.133 133004 | +4.171 171004 | +4.2 60 | +4.200 200004 | +4.201 201004 | +4.202 500185 500185 | +4.204 500311 500311 | +4.205 500340 500340 500341 500341 500342 500342 500343 500343 500344 500344 500345 500345 500346 500346 500347 500347 500348 500348 500349 500349 500350 500350 500351 500351 500352 500352 500353 500353 500354 500354 500355 500355 500356 500356 500357 500357 500358 500358 500359 500359 500360 500360 500361 500361 500362 500362 500363 500363 500364 500364 500365 500365 500366 500366 500367 500367 500368 500368 500369 500369 500370 500370 500371 500371 | +4.210 210004 | +4.211 211004 | +4.212 212004 | +4.213 213004 | +4.214 214004 | +4.215 215004 | +4.216 216004 | +4.228 228004 | +4.3 60 | +40.128 40 | +40.129 129040 | +40.133 133040 | +40.171 171040 | +40.174 174040 | +40.175 175040 | +40.2 500032 500032 | +40.200 200040 | +40.201 500107 500107 | +40.202 500195 500195 | +40.210 210040 | +40.211 211040 | +40.212 212040 | +40.214 214040 | +40.215 215040 | +40.216 216040 | +40.228 228040 | +40.254 300040 | +41.1 3041 | +41.128 41 | +41.129 129041 | +41.133 133041 | +41.171 171041 | +41.174 174041 | +41.175 175041 | +41.2 3041 | +41.200 200041 | +41.201 201041 500108 500108 | +41.202 500196 500196 | +41.210 210041 | +41.211 211041 | +41.212 212041 | +41.214 214041 | +41.215 215041 | +41.216 216041 | +41.228 228041 | +41.254 300041 | +41.3 3041 | +42.1 3042 | +42.128 42 | +42.129 129042 | +42.133 133042 | +42.171 171042 | +42.174 174042 | +42.175 175042 | +42.2 3042 | +42.200 200042 | +42.201 201042 500109 500109 | +42.202 500197 500197 | +42.210 210042 | +42.211 211042 | +42.212 212042 | +42.214 214042 | +42.215 215042 | +42.216 216042 | +42.228 228042 | +42.254 300042 | +42.3 3042 | +43.1 138 | +43.128 43 | +43.129 129043 | +43.133 133043 | +43.171 171043 | +43.2 138 | +43.200 200043 | +43.201 500110 500110 | +43.210 210043 | +43.211 211043 | +43.212 212043 | +43.214 214043 | +43.215 215043 | +43.216 216043 | +43.228 228043 | +43.254 300043 | +43.3 138 | +44.1 155 168 | +44.128 44 | +44.129 129044 | +44.133 133044 | +44.171 171044 | +44.172 172044 | +44.173 173044 | +44.2 155 168 | +44.200 200044 | +44.201 500111 500111 | +44.202 500198 500198 | +44.210 210044 | +44.211 211044 | +44.212 212044 | +44.214 214044 | +44.215 215044 | +44.216 216044 | +44.230 230044 | +44.254 300044 | +44.3 155 168 | +45.1 3045 | +45.128 45 | +45.129 129045 | +45.133 133045 | +45.171 171045 | +45.172 172045 | +45.173 173045 | +45.2 3045 | +45.200 200045 | +45.202 500199 500199 | +45.210 210045 | +45.211 211045 | +45.212 212045 | +45.214 214045 | +45.215 215045 | +45.216 216045 | +45.230 230045 | +45.254 300045 | +45.3 3045 | +46.1 3046 | +46.128 46 | +46.129 129046 | +46.133 133046 | +46.171 171046 | +46.2 3046 | +46.200 200046 | +46.202 500200 500200 | +46.210 210046 | +46.211 211046 | +46.212 212046 | +46.214 214046 | +46.215 215046 | +46.216 216046 | +46.230 230046 | +46.254 300046 | +46.3 3046 | +47.1 3047 | +47.128 47 | +47.129 129047 | +47.133 133047 | +47.171 171047 | +47.2 3047 | +47.200 200047 | +47.202 500201 500201 | +47.210 210047 | +47.211 211047 | +47.212 212047 | +47.214 214047 | +47.215 215047 | +47.216 216047 | +47.254 300047 | +47.3 3047 | +48.1 3048 | +48.128 48 | +48.129 129048 | +48.133 133048 | +48.171 171048 | +48.172 172048 | +48.173 173048 | +48.2 3048 | +48.200 200048 | +48.202 500202 500202 | +48.210 210048 | +48.211 211048 | +48.212 212048 | +48.214 214048 | +48.215 215048 | +48.216 216048 | +48.254 300048 | +48.3 3048 | +49.1 3049 | +49.128 49 | +49.129 129049 | +49.131 131049 | +49.132 132049 | +49.133 133049 | +49.160 160049 | +49.171 171049 | +49.174 174049 | +49.175 175049 | +49.2 3049 | +49.200 200049 | +49.202 500203 500203 | +49.210 210049 | +49.211 211049 | +49.212 212049 | +49.214 214049 | +49.215 215049 | +49.216 216049 | +49.254 300049 | +49.3 3049 | +4lftx 260128 | +5.1 3005 | +5.128 5 | +5.129 129005 | +5.131 131005 | +5.133 133005 | +5.171 171005 | +5.2 3005 | +5.200 200005 | +5.201 201005 500090 500090 500091 500091 | +5.204 500312 500312 | +5.210 210005 | +5.211 211005 | +5.212 212005 | +5.213 213005 | +5.214 214005 | +5.215 215005 | +5.216 216005 | +5.228 228005 | +5.3 3005 | +50.1 3050 | +50.128 50 | +50.129 129050 | +50.133 133050 | +50.171 171050 | +50.172 172050 | +50.173 173050 | +50.2 3050 | +50.200 200050 | +50.201 201050 | +50.210 210050 | +50.211 211050 | +50.212 212050 | +50.214 214050 | +50.215 215050 | +50.216 216050 | +50.254 300050 | +50.3 3050 | +51.1 133 | +51.128 51 | +51.129 129051 | +51.133 133051 | +51.162 162051 | +51.171 171051 | +51.2 133 500033 500033 500034 500034 500035 500035 | +51.200 200051 | +51.201 201051 500112 500112 | +51.210 210051 | +51.211 211051 | +51.212 212051 | +51.214 214051 | +51.215 215051 | +51.216 216051 | +51.254 300051 | +51.3 133 | +52.1 157 | +52.128 52 | +52.129 129052 | +52.133 133052 | +52.162 134 | +52.171 171052 | +52.2 157 500036 500036 500037 500037 | +52.200 200052 | +52.201 201052 500113 500113 | +52.210 210052 | +52.211 211052 | +52.212 212052 | +52.214 214052 | +52.215 215052 | +52.216 216052 | +52.254 300052 | +52.3 157 | +53.1 3053 | +53.128 53 | +53.129 129053 | +53.133 133053 | +53.162 162053 | +53.171 171053 | +53.2 3053 | +53.200 200053 | +53.201 201053 500114 500114 | +53.210 210053 | +53.211 211053 | +53.212 212053 | +53.215 215053 | +53.216 216053 | +53.254 300053 | +53.3 3053 | +54.1 3054 | +54.128 54 | +54.129 129054 | +54.133 133054 | +54.162 162054 | +54.171 171054 | +54.2 3054 500038 500038 | +54.200 200054 | +54.201 201054 | +54.210 210054 | +54.211 211054 | +54.212 212054 | +54.215 215054 | +54.216 216054 | +54.254 300054 | +54.3 3054 | +55.1 3055 | +55.128 55 | +55.129 129055 | +55.133 133055 | +55.162 162055 | +55.171 171055 | +55.174 174055 | +55.175 175055 | +55.2 3055 | +55.200 200055 | +55.201 201055 | +55.210 210055 | +55.211 211055 | +55.212 212055 | +55.215 215055 | +55.216 216055 | +55.254 300055 | +55.3 3055 | +56.1 3056 | +56.128 56 | +56.129 129056 | +56.133 133056 | +56.162 162056 | +56.171 171056 | +56.2 3056 | +56.200 200056 | +56.201 201056 | +56.202 500204 500204 | +56.210 210056 | +56.211 211056 | +56.212 212056 | +56.215 215056 | +56.216 216056 | +56.254 300056 | +56.3 3056 | +57.1 182 | +57.128 57 | +57.129 129057 | +57.133 133057 | +57.162 162057 | +57.171 171057 | +57.2 182 500039 500039 | +57.200 200057 | +57.202 500205 500205 | +57.210 210057 | +57.212 212057 | +57.215 215057 | +57.216 216057 | +57.230 230057 | +57.254 300057 | +57.3 182 | +58.128 58 | +58.129 129058 | +58.133 133058 | +58.162 162058 | +58.171 171058 | +58.2 500040 500040 | +58.200 200058 | +58.201 500115 500115 | +58.210 210058 | +58.212 212058 | +58.215 215058 | +58.216 216058 | +58.230 230058 | +59.1 3059 | +59.128 59 | +59.129 129059 | +59.131 131059 | +59.133 133059 | +59.162 162059 | +59.171 171059 | +59.2 3059 | +59.200 200059 | +59.201 500116 500116 | +59.210 210059 | +59.212 212059 | +59.215 215059 | +59.216 216059 | +59.254 300059 | +59.3 3059 | +5wava 260084 | +5wavh 260080 | +6.1 129 | +6.128 6 | +6.131 131006 | +6.133 133006 | +6.171 171006 | +6.174 174006 | +6.175 175006 | +6.2 129 500004 500004 500005 500005 500006 500006 | +6.201 201006 | +6.204 500313 500313 | +6.210 210006 | +6.211 211006 | +6.212 212006 | +6.214 214006 | +6.215 215006 | +6.216 216006 | +6.228 228006 | +6.254 300006 | +6.3 129 | +60.1 3060 | +60.128 60 | +60.129 129060 | +60.131 131060 | +60.133 133060 | +60.162 162060 | +60.171 171060 | +60.2 3060 | +60.200 200060 | +60.201 201060 | +60.212 212060 | +60.215 215060 | +60.216 216060 | +60.254 300060 | +60.3 3060 | +61.1 228228 | +61.129 129061 | +61.131 131061 | +61.133 133061 | +61.162 162061 | +61.171 171061 | +61.2 228228 500041 500041 | +61.200 200061 | +61.201 201061 500117 500117 | +61.202 500206 500206 | +61.206 500378 500378 | +61.207 500386 500386 | +61.210 210061 | +61.211 211061 | +61.212 212061 | +61.215 215061 | +61.216 216061 | +61.254 300061 | +61.3 228228 | +62.1 3062 | +62.128 62 | +62.129 129062 | +62.131 131062 | +62.133 133062 | +62.162 162062 | +62.171 171062 | +62.2 3062 500042 500042 | +62.200 200062 | +62.201 201062 | +62.202 500207 500207 | +62.210 210062 | +62.211 211062 | +62.212 212062 | +62.215 215062 | +62.216 216062 | +62.254 300062 | +62.3 3062 | +63.1 3063 | +63.128 63 | +63.129 129063 | +63.131 131063 | +63.133 133063 | +63.162 162063 | +63.171 171063 | +63.2 3063 500043 500043 | +63.200 200063 | +63.201 201063 | +63.210 210063 | +63.211 211063 | +63.212 212063 | +63.215 215063 | +63.216 216063 | +63.254 300063 | +63.3 3063 | +64.1 3064 | +64.128 64 | +64.129 129064 | +64.131 131064 | +64.133 133064 | +64.162 162064 | +64.171 171064 | +64.2 3064 | +64.200 200064 | +64.201 201064 | +64.202 500208 500208 | +64.210 210064 | +64.211 211064 | +64.212 212064 | +64.215 215064 | +64.216 216064 | +64.254 300064 | +64.3 3064 | +65.1 228144 | +65.128 65 | +65.129 129065 | +65.131 131065 | +65.133 133065 | +65.162 162065 | +65.171 171065 | +65.2 228144 500044 500044 | +65.200 200065 | +65.201 201065 | +65.202 500209 500209 | +65.210 210065 | +65.211 211065 | +65.212 212065 | +65.215 215065 | +65.216 216065 | +65.254 300065 | +65.3 228144 | +66.1 228141 | +66.128 66 | +66.129 129066 | +66.131 131066 | +66.133 133066 | +66.162 162066 | +66.2 228141 500045 500045 | +66.200 200066 | +66.201 201066 | +66.210 210066 | +66.211 211066 | +66.212 212066 | +66.215 215066 | +66.216 216066 | +66.254 300066 | +66.3 228141 | +67.1 3067 | +67.128 67 | +67.129 129067 | +67.131 131067 | +67.133 133067 | +67.162 162067 | +67.2 3067 | +67.200 200067 | +67.201 201067 | +67.202 500210 500210 | +67.210 210067 | +67.211 211067 | +67.212 212067 | +67.215 215067 | +67.216 216067 | +67.254 300067 | +67.3 3067 | +68.1 3068 | +68.128 68 | +68.129 129068 | +68.131 131068 | +68.133 133068 | +68.162 162068 | +68.2 3068 | +68.200 200068 | +68.201 201068 500118 500118 | +68.202 500211 500211 | +68.210 210068 | +68.211 211068 | +68.212 212068 | +68.215 215068 | +68.216 216068 | +68.254 300068 | +68.3 3068 | +69.1 3069 | +69.128 69 | +69.129 129069 | +69.131 131069 | +69.133 133069 | +69.162 162069 | +69.2 3069 | +69.200 200069 | +69.201 201069 500119 500119 | +69.202 500212 500212 | +69.210 210069 | +69.211 211069 | +69.212 212069 | +69.215 215069 | +69.216 216069 | +69.254 300069 | +69.3 3069 | +7.1 156 228002 | +7.128 7 | +7.131 131007 | +7.133 133007 | +7.171 171007 | +7.2 156 228002 | +7.201 201007 | +7.202 500186 500186 500187 500187 | +7.204 500314 500314 | +7.210 210007 | +7.211 211007 | +7.212 212007 | +7.214 214007 | +7.215 215007 | +7.216 216007 | +7.228 228007 | +7.254 300007 | +7.3 156 228002 | +70.1 3070 | +70.128 70 | +70.129 129070 | +70.131 131070 | +70.133 133070 | +70.162 162070 | +70.2 3070 | +70.200 200070 | +70.201 201070 | +70.202 500213 500213 | +70.210 210070 | +70.211 211070 | +70.212 212070 | +70.215 215070 | +70.216 216070 | +70.254 300070 | +70.3 3070 | +71.1 228164 | +71.128 71 | +71.129 129071 | +71.131 131071 | +71.133 133071 | +71.162 162071 | +71.2 228164 500046 500046 | +71.200 200071 | +71.201 201071 | +71.202 500214 500214 | +71.206 500379 500379 | +71.210 210071 | +71.211 211071 | +71.212 212071 | +71.215 215071 | +71.216 216071 | +71.254 300071 | +71.3 228164 | +72.1 185 | +72.128 72 | +72.131 131072 | +72.133 133072 | +72.162 162072 | +72.2 185 500047 500047 | +72.201 201072 500120 500120 | +72.210 210072 | +72.212 212072 | +72.215 215072 | +72.216 216072 | +72.254 300072 | +72.3 185 | +73.1 186 | +73.128 73 | +73.131 131073 | +73.133 133073 | +73.162 162073 | +73.2 186 500048 500048 | +73.201 201073 500121 500121 | +73.206 500380 500380 | +73.210 210073 | +73.212 212073 | +73.215 215073 | +73.216 216073 | +73.254 300073 | +73.3 186 | +74.1 187 | +74.128 74 | +74.131 131074 | +74.133 133074 | +74.162 162074 | +74.2 187 500049 500049 | +74.201 201074 500122 500122 | +74.202 500215 500215 500216 500216 | +74.206 500381 500381 | +74.210 210074 | +74.212 212074 | +74.215 215074 | +74.216 216074 | +74.254 300074 | +74.3 187 | +75.1 188 | +75.128 75 | +75.131 131075 | +75.133 133075 | +75.162 162075 | +75.2 188 500050 500050 | +75.201 201075 500123 500123 | +75.202 500217 500217 | +75.206 500382 500382 | +75.212 212075 | +75.215 215075 | +75.216 216075 | +75.254 300075 | +75.3 188 | +76.1 260102 | +76.128 76 | +76.131 131076 | +76.133 133076 | +76.162 162076 | +76.2 260102 500051 500051 | +76.201 201076 | +76.202 500218 500218 | +76.212 212076 | +76.215 215076 | +76.216 216076 | +76.254 300076 | +76.3 260102 | +77.1 3077 | +77.128 77 | +77.131 131077 | +77.133 133077 | +77.162 162077 | +77.2 3077 | +77.201 201077 | +77.202 500219 500219 | +77.212 212077 | +77.215 215077 | +77.216 216077 | +77.254 300077 | +77.3 3077 | +78.1 239 | +78.128 78 | +78.129 129078 | +78.131 131078 | +78.133 133078 | +78.162 162078 | +78.171 171078 | +78.2 239 500052 500052 | +78.200 200078 | +78.201 201078 500124 500124 | +78.202 500220 500220 | +78.212 212078 | +78.215 215078 | +78.216 216078 | +78.3 239 | +79.1 240 | +79.128 79 | +79.129 129079 | +79.131 131079 | +79.133 133079 | +79.162 162079 | +79.171 171079 | +79.2 240 500053 500053 | +79.200 200079 | +79.201 201079 500125 500125 | +79.202 500221 500221 500222 500222 | +79.206 500383 500383 | +79.207 500387 500387 | +79.212 212079 | +79.215 215079 | +79.216 216079 | +79.3 240 | +8.1 3008 | +8.128 8 | +8.131 131008 | +8.133 133008 | +8.174 174008 | +8.2 3008 500007 500007 500008 500008 | +8.201 201008 | +8.202 500188 500188 500189 500189 | +8.204 500315 500315 | +8.210 210008 | +8.211 211008 | +8.212 212008 | +8.214 214008 | +8.215 215008 | +8.216 216008 | +8.228 228008 | +8.230 230008 | +8.254 300008 | +8.3 3008 | +80.1 3080 | +80.128 80 | +80.129 129080 | +80.131 131080 | +80.133 133080 | +80.162 162080 | +80.2 3080 | +80.200 200080 | +80.201 201080 | +80.210 210080 | +80.211 211080 | +80.212 212080 | +80.215 215080 | +80.216 216080 | +80.228 228080 | +80.3 3080 | +81.1 172 | +81.128 81 | +81.129 129081 | +81.131 131081 | +81.133 133081 | +81.162 162081 | +81.2 172 500054 500054 | +81.200 200081 | +81.201 201081 | +81.210 210081 | +81.211 211081 | +81.212 212081 | +81.215 215081 | +81.216 216081 | +81.228 228081 | +81.254 300081 | +81.3 172 | +82.1 3082 | +82.128 82 | +82.129 129082 | +82.131 131082 | +82.133 133082 | +82.162 162082 | +82.2 3082 | +82.200 200082 | +82.201 201082 500126 500126 | +82.210 210082 | +82.211 211082 | +82.212 212082 | +82.215 215082 | +82.216 216082 | +82.228 228082 | +82.254 300082 | +82.3 3082 | +83.1 173 | +83.128 83 | +83.129 129083 | +83.131 131083 | +83.133 133083 | +83.162 162083 | +83.174 174083 | +83.175 175083 | +83.2 173 500055 500055 | +83.200 200083 | +83.201 201083 | +83.210 210083 | +83.211 211083 | +83.212 212083 | +83.215 215083 | +83.216 216083 | +83.228 228083 | +83.254 300083 | +83.3 173 | +84.1 174 | +84.128 84 | +84.129 129084 | +84.131 131084 | +84.133 133084 | +84.162 162084 | +84.2 174 500056 500056 500057 500057 | +84.200 200084 | +84.201 201084 500127 500127 | +84.202 500223 500223 500224 500224 | +84.210 210084 | +84.211 211084 | +84.212 212084 | +84.215 215084 | +84.216 216084 | +84.228 228084 | +84.254 300084 | +84.3 174 | +85.1 228139 | +85.128 85 | +85.129 129085 | +85.131 131085 | +85.133 133085 | +85.162 162085 | +85.174 174085 | +85.175 175085 | +85.2 228139 500058 500058 500059 500059 500060 500060 500061 500061 | +85.200 200085 | +85.201 201085 500128 500128 | +85.206 500384 500384 | +85.210 210085 | +85.211 211085 | +85.212 212085 | +85.215 215085 | +85.216 216085 | +85.228 228085 | +85.254 300085 | +85.3 228139 | +86.1 3086 228039 | +86.128 86 | +86.129 129086 | +86.131 131086 | +86.133 133086 | +86.162 162086 | +86.174 174086 | +86.175 175086 | +86.2 3086 228039 500062 500062 500063 500063 500064 500064 | +86.200 200086 | +86.202 500225 500225 500226 500226 | +86.210 210086 | +86.211 211086 | +86.212 212086 | +86.215 215086 | +86.216 216086 | +86.254 300086 | +86.3 3086 228039 | +87.1 199 | +87.128 87 | +87.129 129087 | +87.131 131087 | +87.133 133087 | +87.162 162087 | +87.174 174087 | +87.175 175087 | +87.2 199 500065 500065 | +87.200 200087 | +87.210 210087 | +87.211 211087 | +87.212 212087 | +87.215 215087 | +87.216 216087 | +87.254 300087 | +87.3 199 | +88.1 3088 | +88.128 88 | +88.129 129088 | +88.131 131088 | +88.133 133088 | +88.162 162088 | +88.174 174088 | +88.175 175088 | +88.2 3088 | +88.200 200088 | +88.201 500129 500129 | +88.210 210088 | +88.211 211088 | +88.212 212088 | +88.215 215088 | +88.216 216088 | +88.3 3088 | +89.1 3089 | +89.128 89 | +89.129 129089 | +89.131 131089 | +89.133 133089 | +89.162 162089 | +89.174 174089 | +89.175 175089 | +89.2 3089 | +89.200 200089 | +89.201 500130 500130 | +89.210 210089 | +89.211 211089 | +89.212 212089 | +89.215 215089 | +89.216 216089 | +89.228 228089 | +89.254 300089 | +89.3 3089 | +9.1 3009 | +9.128 9 | +9.131 131009 | +9.133 133009 | +9.174 174009 | +9.2 3009 | +9.201 201009 | +9.202 500190 500190 | +9.204 500316 500316 | +9.210 210009 | +9.211 211009 | +9.212 212009 | +9.214 214009 | +9.215 215009 | +9.216 216009 | +9.228 228009 | +9.230 230009 | +9.3 3009 | +90.1 205 | +90.128 90 | +90.129 129090 | +90.131 131090 | +90.133 133090 | +90.162 162090 | +90.174 174090 | +90.175 175090 | +90.2 205 500066 500066 500067 500067 500068 500068 | +90.200 200090 | +90.203 500289 500289 | +90.210 210090 | +90.211 211090 | +90.212 212090 | +90.215 215090 | +90.216 216090 | +90.228 228090 | +90.3 205 | +91.1 3091 | +91.128 91 | +91.129 129091 | +91.131 131091 | +91.133 133091 | +91.162 162091 | +91.2 3091 500069 500069 | +91.200 200091 | +91.202 500227 500227 500228 500228 | +91.203 500290 500290 | +91.210 210091 | +91.211 211091 | +91.212 212091 | +91.215 215091 | +91.216 216091 | +91.228 228091 | +91.254 300091 | +91.3 3091 | +92.1 3092 | +92.128 92 | +92.129 129092 | +92.131 131092 | +92.133 133092 | +92.162 162092 | +92.2 3092 500070 500070 | +92.200 200092 | +92.202 500229 500229 500230 500230 | +92.210 210092 | +92.211 211092 | +92.212 212092 | +92.215 215092 | +92.216 216092 | +92.228 228092 | +92.254 300092 | +92.3 3092 | +93.1 3093 | +93.128 93 | +93.129 129093 | +93.131 131093 | +93.2 3093 | +93.200 200093 | +93.202 500231 500231 500232 500232 | +93.210 210093 | +93.211 211093 | +93.212 212093 | +93.215 215093 | +93.216 216093 | +93.228 228093 | +93.254 300093 | +93.3 3093 | +94.1 3094 | +94.128 94 | +94.129 129094 | +94.131 131094 | +94.174 174094 | +94.2 3094 | +94.200 200094 | +94.203 500291 500291 | +94.210 210094 | +94.211 211094 | +94.212 212094 | +94.215 215094 | +94.216 216094 | +94.228 228094 | +94.254 300094 | +94.3 3094 | +95.1 3095 | +95.128 95 | +95.129 129095 | +95.131 131095 | +95.174 174095 | +95.2 3095 | +95.200 200095 | +95.210 210095 | +95.211 211095 | +95.212 212095 | +95.215 215095 | +95.216 216095 | +95.254 300095 | +95.3 3095 | +96.1 3096 | +96.128 96 | +96.129 129096 | +96.131 131096 | +96.2 3096 | +96.200 200096 | +96.210 210096 | +96.211 211096 | +96.212 212096 | +96.215 215096 | +96.216 216096 | +96.254 300096 | +96.3 3096 | +97.1 3097 | +97.128 97 | +97.129 129097 | +97.131 131097 | +97.2 3097 | +97.200 200097 | +97.210 210097 | +97.211 211097 | +97.212 212097 | +97.215 215097 | +97.216 216097 | +97.254 300097 | +97.3 3097 | +98.1 3098 | +98.128 98 | +98.129 129098 | +98.174 174098 | +98.2 3098 | +98.200 200098 | +98.210 210098 | +98.211 211098 | +98.212 212098 | +98.215 215098 | +98.216 216098 | +98.254 300098 | +98.3 3098 | +99.1 3099 | +99.128 99 | +99.129 129099 | +99.174 174099 | +99.2 3099 | +99.200 200099 | +99.201 201099 500131 500131 | +99.203 500292 500292 | +99.210 210099 | +99.211 211099 | +99.212 212099 | +99.215 215099 | +99.216 216099 | +99.3 3099 | +CAPE_INS 85001160 | +PREC_CONVEC 85001156 | +PREC_GDE_ECH 85001157 | +abdv 300042 | +absd 3042 | +absh 260014 | +absv 3041 | +abvo 300041 | +accaod550 215089 | +acces 260139 | +acf 241 | +acfa 171241 | +acfdiff 200241 | +acfgrd 129241 | +aciod 260140 | +aco2gpp 228081 | +aco2nee 228080 | +aco2rec 228082 | +acond 260469 | +acpcp 3063 | +acpcpn 260287 | +acradp 260141 | +acwh 140247 | +adrtg 500295 | +advor 500294 | +advorg 500293 | +aer_bc 500229 | +aer_bc12 500230 | +aer_dust 500225 | +aer_dust12 500226 | +aer_org 500227 | +aer_org12 500228 | +aer_so4 500223 | +aer_so412 500224 | +aer_ss 500231 | +aer_ss12 500232 | +aerddpbchphil 215068 | +aerddpbchphob 215067 | +aerddpdul 215030 | +aerddpdum 215029 | +aerddpdus 215028 | +aerddpomhphil 215052 | +aerddpomhphob 215051 | +aerddpso2 215169 | +aerddpssl 215006 | +aerddpssm 215005 | +aerddpsss 215004 | +aerddpsu 215082 | +aerdep 210052 | +aerdep10fg 215092 | +aerdep10si 215091 | +aerdepdiff 211052 | +aergn01 210016 | +aergn01diff 211016 | +aergn02 210017 | +aergn02diff 211017 | +aergn03 210018 | +aergn03diff 211018 | +aergn04 210019 | +aergn04diff 211019 | +aergn05 210020 | +aergn05diff 211020 | +aergn06 210021 | +aergn06diff 211021 | +aergn07 210022 | +aergn07diff 211022 | +aergn08 210023 | +aergn08diff 211023 | +aergn09 210024 | +aergn09diff 211024 | +aergn10 210025 | +aergn10diff 211025 | +aergn11 210026 | +aergn11diff 211026 | +aergn12 210027 | +aergn12diff 211027 | +aerlg 210048 | +aerlgdiff 211048 | +aerls01 210031 | +aerls01diff 211031 | +aerls02 210032 | +aerls02diff 211032 | +aerls03 210033 | +aerls03diff 211033 | +aerls04 210034 | +aerls04diff 211034 | +aerls05 210035 | +aerls05diff 211035 | +aerls06 210036 | +aerls06diff 211036 | +aerls07 210037 | +aerls07diff 211037 | +aerls08 210038 | +aerls08diff 211038 | +aerls09 210039 | +aerls09diff 211039 | +aerls10 210040 | +aerls10diff 211040 | +aerls11 210041 | +aerls11diff 211041 | +aerls12 210042 | +aerls12diff 211042 | +aerlts 210053 | +aerltsdiff 211053 | +aermr01 210001 | +aermr01diff 211001 | +aermr02 210002 | +aermr02diff 211002 | +aermr03 210003 | +aermr03diff 211003 | +aermr04 210004 | +aermr04diff 211004 | +aermr05 210005 | +aermr05diff 211005 | +aermr06 210006 | +aermr06diff 211006 | +aermr07 210007 | +aermr07diff 211007 | +aermr08 210008 | +aermr08diff 211008 | +aermr09 210009 | +aermr09diff 211009 | +aermr10 210010 | +aermr10diff 211010 | +aermr11 210011 | +aermr11diff 211011 | +aermr12 210012 | +aermr12diff 211012 | +aermr13 210013 | +aermr13diff 211013 | +aermr14 210014 | +aermr14diff 211014 | +aermr15 210015 | +aermr15diff 211015 | +aermssbchphil 215078 | +aermssbchphob 215077 | +aermssdul 215045 | +aermssdum 215044 | +aermssdus 215043 | +aermssomhphil 215062 | +aermssomhphob 215061 | +aermssso2 215174 | +aermssssl 215021 | +aermssssm 215020 | +aermsssss 215019 | +aermsssu 215087 | +aerngtbchphil 215076 | +aerngtbchphob 215075 | +aerngtdul 215042 | +aerngtdum 215041 | +aerngtdus 215040 | +aerngtomhphil 215060 | +aerngtomhphob 215059 | +aerngtso2 215173 | +aerngtssl 215018 | +aerngtssm 215017 | +aerngtsss 215016 | +aerngtsu 215086 | +aerodbchphil 215080 | +aerodbchphob 215079 | +aeroddul 215048 | +aeroddum 215047 | +aeroddus 215046 | +aerodomhphil 215064 | +aerodomhphob 215063 | +aerodso2 215175 | +aerodssl 215024 | +aerodssm 215023 | +aerodsss 215022 | +aerodsu 215088 | +aerot 260129 | +aerpr 210046 | +aerpr03 210028 | +aerpr03diff 211028 | +aerprdiff 211046 | +aerscc 210054 | +aersccdiff 211054 | +aersdmbchphil 215070 | +aersdmbchphob 215069 | +aersdmdul 215033 | +aersdmdum 215032 | +aersdmdus 215031 | +aersdmomhphil 215054 | +aersdmomhphob 215053 | +aersdmso2 215170 | +aersdmssl 215009 | +aersdmssm 215008 | +aersdmsss 215007 | +aersdmsu 215083 | +aersm 210047 | +aersmdiff 211047 | +aersrcbchphil 215066 | +aersrcbchphob 215065 | +aersrcdul 215027 | +aersrcdum 215026 | +aersrcdus 215025 | +aersrcomhphil 215050 | +aersrcomhphob 215049 | +aersrcso2 215168 | +aersrcssl 215003 | +aersrcssm 215002 | +aersrcsss 215001 | +aersrcsu 215081 | +aerwdccbchphil 215074 | +aerwdccbchphob 215073 | +aerwdccdul 215039 | +aerwdccdum 215038 | +aerwdccdus 215037 | +aerwdccomhphil 215058 | +aerwdccomhphob 215057 | +aerwdccso2 215172 | +aerwdccssl 215015 | +aerwdccssm 215014 | +aerwdccsss 215013 | +aerwdccsu 215085 | +aerwdlsbchphil 215072 | +aerwdlsbchphob 215071 | +aerwdlsdul 215036 | +aerwdlsdum 215035 | +aerwdlsdus 215034 | +aerwdlsomhphil 215056 | +aerwdlsomhphob 215055 | +aerwdlsso2 215171 | +aerwdlsssl 215012 | +aerwdlsssm 215011 | +aerwdlssss 215010 | +aerwdlssu 215084 | +aerwv01 210029 | +aerwv01diff 211029 | +aerwv02 210030 | +aerwv02diff 211030 | +aerwv03 210044 | +aerwv03diff 211044 | +aerwv04 210045 | +aerwv04diff 211045 | +aevap_s 500039 | +agpl 300054 | +aiw 249 | +aiwa 171249 | +aiwdiff 200249 | +aiwgrd 129249 | +akhs 260449 | +akms 260450 | +al 174 260509 | +ala 171174 | +alb_rad 500056 | +albe 300084 | +albedo_b 500057 | +aldf 228245 | +aldiff 200174 | +aldr 228244 | +ale 210119 | +alediff 211119 | +algrd 129174 | +alhfl_bs 500094 | +alhfl_pl 500095 | +alhfl_s 500086 | +alnid 18 | +alnidg 210197 | +alnidi 210195 | +alnidv 210196 | +alnip 17 | +alnipg 210191 | +alnipi 210189 | +alnipv 210190 | +alts 260076 | +aluvd 16 | +aluvdg 210194 | +aluvdi 210192 | +aluvdv 210193 | +aluvp 15 | +aluvpg 210188 | +aluvpi 210186 | +aluvpsn 215090 | +aluvpv 210187 | +alvar 230174 | +alw 242 | +alwa 171242 | +alwdiff 200242 | +alwgrd 129242 | +amdl 300185 | +amixl 260460 | +amsl 300186 | +ana_err_fi 500195 | +ana_err_u 500196 | +ana_err_v 500197 | +anor 162 | +anora 171162 | +anordiff 200162 | +anorgrd 129162 | +aod1020 210227 | +aod1064 210228 | +aod1240 210216 | +aod1240diff 211216 | +aod1640 210229 | +aod2130 210230 | +aod340 210217 | +aod355 210218 | +aod380 210219 | +aod400 210220 | +aod440 210221 | +aod469 210213 | +aod469diff 211213 | +aod500 210222 | +aod532 210223 | +aod550 210207 | +aod550diff 211207 | +aod645 210224 | +aod670 210214 | +aod670diff 211214 | +aod800 210225 | +aod858 210226 | +aod865 210215 | +aod865diff 211215 | +aodabs1020 215110 | +aodabs1064 215111 | +aodabs1240 215112 | +aodabs1640 215113 | +aodabs2130 215176 | +aodabs340 215096 | +aodabs355 215097 | +aodabs380 215098 | +aodabs400 215099 | +aodabs440 215100 | +aodabs469 215101 | +aodabs500 215102 | +aodabs532 215103 | +aodabs550 215104 | +aodabs645 215105 | +aodabs670 215106 | +aodabs800 215107 | +aodabs858 215108 | +aodabs865 215109 | +aodfm1020 215128 | +aodfm1064 215129 | +aodfm1240 215130 | +aodfm1640 215131 | +aodfm2130 215177 | +aodfm340 215114 | +aodfm355 215115 | +aodfm380 215116 | +aodfm400 215117 | +aodfm440 215118 | +aodfm469 215119 | +aodfm500 215120 | +aodfm532 215121 | +aodfm550 215122 | +aodfm645 215123 | +aodfm670 215124 | +aodfm800 215125 | +aodfm858 215126 | +aodfm865 215127 | +aodlg 210051 | +aodlgdiff 211051 | +aodpr 210049 | +aodprdiff 211049 | +aodsm 210050 | +aodsmdiff 211050 | +aohflx 260496 | +aot340 214052 | +apab_s 201005 500090 | +apcpn 260286 | +apt 151181 210120 | +aptdiff 211120 | +arain 260284 | +arrc 140248 | +as 151183 | +ascat_sm_cdfa 228253 | +ascat_sm_cdfb 228254 | +ashfl 260497 | +ashfl_s 500087 | +asn 32 | +asna 171032 | +asndiff 200032 | +asngrd 129032 | +asnow 260025 | +asob_s 500078 | +asob_t 500082 | +asq 233 | +asqa 171233 | +asqdiff 200233 | +asqgrd 129233 | +asr 151157 | +assimetry1020 215164 | +assimetry1064 215165 | +assimetry1240 215166 | +assimetry1640 215167 | +assimetry2130 215179 | +assimetry340 215150 | +assimetry355 215151 | +assimetry380 215152 | +assimetry400 215153 | +assimetry440 215154 | +assimetry469 215155 | +assimetry500 215156 | +assimetry532 215157 | +assimetry550 215158 | +assimetry645 215159 | +assimetry670 215160 | +assimetry800 215161 | +assimetry858 215162 | +assimetry865 215163 | +at 127 | +ata 171127 | +atdiff 200127 | +atgrd 129127 | +ath 130229 | +athb_s 500080 | +athb_t 500084 | +athe 252 | +athea 171252 | +athediff 200252 | +athegrd 129252 | +atmdiv 260231 | +atmt 300234 | +atmw 254 | +atmwa 171254 | +atmwax 130231 | +atmwdiff 200254 | +atmwgrd 129254 | +att 130228 | +atte 251 | +attea 171251 | +attediff 200251 | +attegrd 129251 | +atze 253 | +atzea 171253 | +atzediff 200253 | +atzegrd 129253 | +atzw 130230 | +aumfl_s 500088 | +austr_sso 500279 | +avdis_sso 500283 | +avmfl_s 500089 | +avsft 260481 | +avstr_sso 500281 | +awh 140246 | +ba-140 500276 | +ba-140d 500277 | +ba-140w 500278 | +baret 260480 | +bas_con 201072 500120 | +bc_hv 71 | +bc_lv 70 | +bcaod550 210211 | +bcaod550diff 211211 | +bcfire 210091 | +bcfirediff 211091 | +bffire 210097 | +bffirediff 211097 | +bfi 140253 | +bgrun 260174 | +bkeng 260504 | +bld 145 | +blda 171145 | +blddiff 200145 | +bldgrd 129145 | +bldrate 172145 | +blds 300123 | +bldvar 230145 | +blh 159 | +blha 171159 | +blhdiff 200159 | +blhgrd 129159 | +bli 3077 300077 | +bmixl 260190 | +bmpga 151204 | +botlst 260204 | +bpa 151209 | +bpt 151180 | +bref 260134 | +brvel 260135 | +bsal 151192 | +bsf 151147 | +bslh 300176 | +bswid 260133 | +btmp 194 | +btmpa 171194 | +btmpdiff 200194 | +btmpgrd 129194 | +btp 151149 | +bv 128 | +bva 171128 | +bvdiff 200128 | +bvgrd 129128 | +bzpga 151203 | +c2h4fire 210106 | +c2h4firediff 211106 | +c2h4ofire 210114 | +c2h4ofirediff 211114 | +c2h5ohfire 210104 | +c2h5ohfirediff 211104 | +c2h6fire 210118 | +c2h6firediff 211118 | +c2h6sfire 210117 | +c2h6sfirediff 211117 | +c3h6fire 210107 | +c3h6firediff 211107 | +c3h6ofire 210115 | +c3h6ofirediff 211115 | +c3h8fire 210105 | +c3h8firediff 211105 | +c4ffire 210093 | +c4ffirediff 211093 | +c4h10fire 210238 | +c4h8fire 210234 | +c5h10fire 210235 | +c5h12fire 210239 | +c5h8fire 210108 | +c5h8firediff 211108 | +c6h12fire 210236 | +c6h14fire 210240 | +c6h6fire 210232 | +c7h16fire 210241 | +c7h8fire 210231 | +c8h10fire 210233 | +c8h16fire 210237 | +cap 190170 228170 | +cape 59 300140 | +cape_con 201241 500183 | +cape_ml 500153 | +cape_mu 500151 | +capea 171059 | +capediff 200059 | +capegrd 129059 | +capep 131059 | +cat 260165 | +cbh 228023 | +cbnt 300149 | +cbnv 300071 | +cc 248 | +cca 171248 | +ccc 185 | +ccca 171185 | +cccdiff 200185 | +cccgrd 129185 | +ccdiff 200248 | +ccf 228091 | +ccfire 210095 | +ccfirediff 211095 | +ccgrd 129248 | +ccl_gnd 500290 | +ccl_nn 500291 | +ccond 260191 | +ccrea 160242 | +cd 260072 | +cdca 260103 | +cdcb 260107 | +cdcimr 260118 | +cdct 260104 260108 | +cdif 228243 | +cdir 228022 | +cdlyr 260110 | +cduvb 260341 | +cdww 140233 | +ceil 260109 | +ceiling 500304 | +cf 130213 | +cfire 210092 | +cfirediff 211092 | +cfnlf 260357 | +cfnsf 260345 | +cfrzr 260030 | +ch2ofire 210113 | +ch2ofirediff 211113 | +ch3ohfire 210103 | +ch3ohfirediff 211103 | +ch4 210062 | +ch4diff 211062 | +ch4f 210070 | +ch4fdiff 211070 | +ch4fire 210082 | +ch4firediff 211082 | +ch_cm_cl 201050 | +chnk 148 | +chnka 171148 | +chnkdiff 200148 | +chnkgrd 129148 | +ci 31 | +cice 260101 | +cicel 260406 | +cicep 260031 | +ciflt 260408 | +cin 228001 | +cin_ml 500154 | +cin_mu 500152 | +cine 300141 | +cisoilw 260197 | +civis 260407 | +ciwc 247 | +ciwca 171247 | +ciwcdiff 200247 | +ciwcgrd 129247 | +cl 26 | +cl_typ 500289 | +cla 171026 | +clbt 260510 | +clc 201029 500098 | +clc_con 500047 | +clc_sgs 500099 | +clch 500050 | +clch_8 500112 | +clch_s 500382 | +clcl 500048 | +clcl_8 500114 | +clcl_s 500380 | +clcm 500049 | +clcm_8 500113 | +clcm_s 500381 | +clct 500046 | +clct_mod 500307 | +clct_s 500379 | +cldepth 500306 | +cldiff 200026 | +clgrd 129026 | +clsf 300121 | +clw 130212 | +clw_con 500117 | +clwc 246 | +clwca 171246 | +clwcdiff 200246 | +clwcerrea 160241 | +clwcgrd 129246 | +clwmr 260018 | +cngwdu 260313 | +cngwdv 260314 | +cnvdemf 260334 | +cnvdmf 260333 | +cnvhr 260246 | +cnvmr 260276 | +cnvu 260309 | +cnvumf 260332 | +cnvv 260310 | +cnwat 260189 | +co 210123 | +co2 210061 | +co2apf 210069 | +co2apfdiff 211069 | +co2diff 211061 | +co2fire 210080 | +co2firediff 211080 | +co2nbf 210068 | +co2nbfdiff 211068 | +co2of 210067 | +co2ofdiff 211067 | +codiff 211123 | +cofire 210081 | +cofirediff 211081 | +condp 260279 | +contb 260160 | +contet 260158 | +conti 260157 | +contt 260159 | +covmz 260302 | +covtm 260304 | +covtz 260303 | +cp 143 | +cpa 171143 | +cpdiff 200143 | +cpgrd 129143 | +cph 131093 | +cpofp 260035 | +cpozp 260429 | +cppop 260176 | +cprat 260033 | +cprate 172143 | +cprea 160143 | +cptd 131094 | +cpts 131092 | +cpvar 230143 | +crain 260029 | +crfire 210100 | +crfirediff 211100 | +crl 151151 | +crnh 227 | +crnha 171227 | +crnhdiff 200227 | +crnhgrd 129227 | +crwc 75 | +cs-137 500252 | +cs-137d 500253 | +cs-137w 500254 | +csbt 260511 | +csdlf 260356 | +csdsf 260342 | +csf 239 | +csfa 171239 | +csfdiff 200239 | +csfgrd 129239 | +csfrea 160239 | +csnow 260032 | +csrate 260054 | +csrwe 260051 | +cssf 300122 | +csulf 260355 | +csusf 260344 | +cswc 76 | +ctmp 300190 | +ctmw 223 | +ctmwa 171223 | +ctmwdiff 200223 | +ctmwgrd 129223 | +ctoph 260220 | +ctophqi 260221 | +ctzw 222 | +ctzwa 171222 | +ctzwdiff 200222 | +ctzwgrd 129222 | +cuefi 260112 | +cvh 28 | +cvha 171028 | +cvhdiff 200028 | +cvhgrd 129028 | +cvl 27 | +cvla 171027 | +cvldiff 200027 | +cvlgrd 129027 | +cvnv 300072 | +cwat 260102 | +cwdi 260370 | +cwork 260111 | +cwp 260044 | +cwr 260432 | +d 155 | +da 171155 | +dbss 260505 | +dbz 500174 | +dbz_850 500173 | +dbz_cmax 500175 | +dbz_max 500019 | +dctb 228017 | +dd 500024 | +dd_10m 500023 | +ddiff 200155 | +deg0l 228024 | +den 3089 | +denalt 260079 | +dens 300089 | +dep 151137 | +depr 3018 | +dgrd 129155 | +dhcc 216 130216 | +dhcca 171216 | +dhccdiff 200216 | +dhccgrd 129216 | +dhlc 217 130217 | +dhlca 171217 | +dhlcdiff 200217 | +dhlcgrd 129217 | +dhr 214 130214 | +dhra 171214 | +dhrdiff 200214 | +dhrgrd 129214 | +dhvd 215 130215 | +dhvda 171215 | +dhvddiff 200215 | +dhvdgrd 129215 | +diced 3093 | +dirc 3047 260236 300047 | +direc 260214 | +dirpw 260233 | +dirsw 3109 | +dist 260075 | +divg 300044 | +dl 228007 | +dlwrf 260097 | +dndza 228016 | +dndzn 228015 | +dp2m 300129 | +dpsdt 500003 | +dpt 3017 | +dptd 300018 | +dqc_con 500129 | +dqc_gsp 500142 | +dqi_con 500130 | +dqi_gsp 500144 | +dqv_con 201075 500123 | +dqv_gsp 500141 | +dqvdt 500233 | +dslm 3082 260240 300082 | +dsmax 151174 | +dsrp 47 | +dsrpa 171047 | +dsrpdiff 200047 | +dsrpgrd 129047 | +dstp 300085 | +dswrf 260087 | +dt_con 201074 500122 | +dt_gsp 500140 | +dte 151161 | +dtrf 260350 | +dttdiv 500176 | +du_con 201078 500124 | +du_sso 500198 | +duaod550 210209 | +duaod550diff 211209 | +dumax 151172 | +dursun 500096 | +duvb 260340 | +dv_con 201079 500125 | +dv_sso 500199 | +dvmt 300237 | +dvsh 300167 | +dwi 140249 | +dwps 140228 | +dwuvr 260092 | +dwww 140225 | +e 182 | +ea 171182 | +ebs 151186 | +ebsa 151200 | +ebsl 151206 | +ebt 151185 | +ebta 151199 | +ebtl 151205 | +ediff 200182 | +efa-fi 500314 | +efa-ke 500322 | +efa-om 500320 | +efa-ps 500308 | +efa-rh 500316 | +efa-t 500318 | +efa-u 500310 | +efa-v 500312 | +egrd 129182 | +ehlx 260126 | +eia-fi 500315 | +eia-ke 500323 | +eia-om 500321 | +eia-ps 500309 | +eia-rh 500317 | +eia-t 500319 | +eia-u 500311 | +eia-v 500313 | +elevhtml 260493 | +elon 260422 | +elonn 260426 | +emdms 210043 | +emdmsdiff 211043 | +emis 124 | +emis_rad 500204 | +emnp 260274 | +epsr 260418 | +epta 171004 | +eqpt 4 | +eqptdiff 200004 | +eqptgrd 129004 | +eqssa 171180 | +erate 172182 | +erea 160182 | +es 44 | +esa 171044 | +esct 260172 | +esdiff 200044 | +esgrd 129044 | +esrate 172044 | +estp 260218 | +estu 260222 | +estv 260223 | +esvar 230044 | +etadot 77 | +etsrg 260492 | +evap 300057 | +evapt 260182 | +evar 230182 | +evatra_sum 500178 | +evbs 260478 | +evcw 260470 | +evpp 300177 | +ewatr 260454 | +ewgd 220 130220 | +ewgda 171220 | +ewgddiff 200220 | +ewgdgrd 129220 | +ewov 190 | +ewova 171190 | +ewovdiff 200190 | +ewovgrd 129190 | +ewss 180 | +ewssdiff 200180 | +ewssgrd 129180 | +ewssrea 160180 | +ewssvar 230180 | +fal 243 | +fala 171243 | +faldiff 200243 | +falgrd 129243 | +falrea 160243 | +fc 500235 | +fcmt 300249 | +fco2gpp 228084 | +fco2nee 228083 | +fco2rec 228085 | +fcor 300035 | +fdif 228242 | +fdir 228021 | +fdlt 300154 | +fdlu 300155 | +fdlv 300156 | +ffldg 260169 | +ffldro 260170 | +fgbp 151210 | +fgbs 151208 | +fgbt 151207 | +fi 500006 | +fice 260117 | +fif 500005 | +fis 500004 | +fldcp 260483 | +flfire 210096 | +flfirediff 211096 | +flght 260405 | +flsr 245 | +flsra 171245 | +flsrdiff 200245 | +flsrgrd 129245 | +for_d 500218 | +for_e 500217 | +fprate 260060 | +fqn 500297 | +fr_ice 500069 | +fr_land 500054 | +frain 260039 | +freshsnw 500143 | +fricv 260073 | +frpfire 210099 | +frpfirediff 211099 | +frzr 260288 | +fsr 244 | +fsra 171244 | +fsrdiff 200244 | +fsrgrd 129244 | +ftsktd 64 | +ftsktda 171064 | +fzht 300152 | +fzrh 300153 | +gdces 260142 | +gdiod 260143 | +gdradp 260144 | +geop 300006 | +gflux 260186 | +gh 156 | +gha 171156 | +ghdiff 200156 | +ghfl 300198 | +ghgrd 129156 | +ghrea 160156 | +glbr 300117 | +go3 210203 | +go3diff 211203 | +gpa 3027 | +grad 3117 | +grau_gsp 500146 | +grg1 210131 | +grg10 210149 | +grg10diff 211149 | +grg1diff 211131 | +grg2 210133 | +grg2diff 211133 | +grg3 210135 | +grg3diff 211135 | +grg4 210137 | +grg4diff 211137 | +grg5 210139 | +grg5diff 211139 | +grg6 210141 | +grg6diff 211141 | +grg7 210143 | +grg7diff 211143 | +grg8 210145 | +grg8diff 211145 | +grg9 210147 | +grg9diff 211147 | +grle 260028 | +gsfp 300133 | +gtco3 210206 | +gtco3diff 211206 | +gust 260065 | +gvdu 300162 | +gvdv 300163 | +gvus 300164 | +gvvs 300165 | +gwd 197 | +gwda 171197 | +gwddiff 200197 | +gwdgrd 129197 | +gwdrate 172197 | +gwdu 260307 | +gwdv 260308 | +gwdvar 230197 | +gwrec 260455 | +gzge 300008 | +h 3008 | +h0dip 131015 | +h2fire 210084 | +h2firediff 211084 | +h_ice 500070 | +h_snow 500045 | +hail 260027 | +hailprob 260398 | +havni 260410 | +hbas_con 201068 500118 | +hbas_sc 500115 | +hcc 188 | +hcca 171188 | +hccdiff 200188 | +hccgrd 129188 | +hccpg10 133063 | +hccpg20 133064 | +hccpg30 133065 | +hccpg40 133066 | +hccpg50 133067 | +hccpg60 133068 | +hccpg70 133069 | +hccpg80 133070 | +hccpg90 133071 | +hccpg99 133072 | +hcho 210124 | +hchodiff 211124 | +hddf 300220 | +heatx 260004 | +hfc 151162 | +hflux 260198 | +hgtn 260336 | +hgtx 260328 | +hgty 260329 | +hhdf 300218 | +hhl 500008 | +hialkanesfire 210112 | +hialkanesfirediff 211112 | +hialkenesfire 210111 | +hialkenesfirediff 211111 | +hinv 300075 | +hlcy 260125 | +hmax 140218 | +hmdf 300219 | +hmfc 300168 | +hmo3 500208 | +hmxr 300053 | +hpbl 260083 | +hrcono 260396 | +hsdrea 160254 | +hslp 131016 | +hstdv 3009 | +hsurf 500007 | +htcc 225 130225 | +htcca 171225 | +htccdiff 200225 | +htccgrd 129225 | +htlc 226 130226 | +htlca 171226 | +htlcdiff 200226 | +htlcgrd 129226 | +htop_con 201069 500119 | +htop_dc 201082 500126 | +htop_sc 500116 | +hvdf 300221 | +hvis 228025 | +hzerocl 201084 500127 | +i-131a 500249 | +i-131ad 500250 | +i-131aw 500251 | +i-131g 500270 | +i-131gd 500271 | +i-131gw 500272 | +i-131o 500273 | +i-131od 500274 | +i-131ow 500275 | +iaa 171250 | +icaht 3005 | +icdv 300098 | +ice 250 | +ice_grd 500305 | +icec 3091 260238 300091 | +iced 3098 300093 | +icediff 200250 | +iceg 3097 300097 | +icegrd 129250 | +ices 300094 | +icet 300092 | +icetk 3092 | +iceu 300095 | +icev 300096 | +ici 260151 | +icib 260150 | +icit 260149 | +icmr 260019 | +icwat 260448 | +ie 232 | +iea 171232 | +iediff 200232 | +iegrd 129232 | +iews 229 | +iewsa 171229 | +iewsdiff 200229 | +iewsgrd 129229 | +iliqw 260016 | +imag 300127 | +imgd 3127 260508 | +inss 230 | +inssa 171230 | +inssdiff 200230 | +inssgrd 129230 | +intfd 260506 | +ipc 162131 | +ipcs 162137 | +iprate 260061 | +ipv 500298 | +irr 228252 | +irrate 260219 | +irrfr 228250 | +ishf 231 | +ishfa 171231 | +ishfdiff 200231 | +ishfgrd 129231 | +ishfrea 160231 | +isor 161 | +isora 171161 | +isordiff 200161 | +isorgrd 129161 | +issrd 72 | +ist 228094 260239 | +istal1 171035 | +istal2 171036 | +istal3 171037 | +istal4 171038 | +istl1 35 | +istl1diff 200035 | +istl1grd 129035 | +istl2 36 | +istl2diff 200036 | +istl2grd 129036 | +istl3 37 | +istl3diff 200037 | +istl3grd 129037 | +istl4 38 | +istl4diff 200038 | +istl4grd 129038 | +istrd 73 | +iswf 300197 | +kch4 210071 | +kch4diff 211071 | +ke 500157 | +keng 260500 | +ko 500302 | +kox 260122 | +kr-85 500261 | +kr-85d 500262 | +kr-85w 500263 | +kx 260121 | +lai 260373 500206 | +lai_hv 67 | +lai_lv 66 | +lai_mn 500213 | +lai_mx 500212 | +land 260179 | +landn 260459 | +landu 260184 | +lapp 260299 | +lapr 3019 | +lauv 260295 | +lavni 260409 | +lavv 260297 | +layth 260330 | +lblt 228010 | +lcc 186 | +lcca 171186 | +lccdiff 200186 | +lccgrd 129186 | +lccpg10 133083 | +lccpg20 133084 | +lccpg30 133085 | +lccpg40 133086 | +lccpg50 133087 | +lccpg60 133088 | +lccpg70 133089 | +lccpg80 133090 | +lccpg90 133091 | +lccpg99 133092 | +ldp 151176 | +ldu 151177 | +lftx 260127 | +lglh 300172 | +lgms 300173 | +lgws 195 | +lgwsa 171195 | +lgwsdiff 200195 | +lgwsgrd 129195 | +lgwsvar 230195 | +lhcv 300142 | +lhtfl 260002 | +licd 228014 | +lict 228013 | +lipmf 260377 | +liqvsm 260210 | +lmaxbr 260137 | +lmh 260335 | +lmld 228009 | +lmlt 228008 | +lmv 260315 | +lnmt 300239 | +lnsp 152 300134 | +lnspdiff 200152 | +lnspgrd 129152 | +lopp 260300 | +louv 260296 | +lovv 260298 | +lowlsm 260203 | +lpc 162130 | +lpcs 162136 | +lpmtf 260376 | +lpsr 300019 | +lpsx 260326 | +lpsy 260327 | +lrghr 260245 | +lrgmr 260280 | +lsf 240 | +lsfa 171240 | +lsfdiff 200240 | +lsfgrd 129240 | +lsfrea 160240 | +lshf 228012 | +lsi 151202 | +lsm 172 | +lsmdiff 200172 | +lsmgrd 129172 | +lsmk 300081 | +lsoil 260453 | +lsp 142 3062 | +lspa 171142 171152 260479 | +lspdiff 200142 | +lspf 50 | +lspfa 171050 | +lspfdiff 200050 | +lspfgrd 129050 | +lspgrd 129142 | +lsprate 260050 | +lsprea 160142 | +lspvar 230142 | +lsrh 234 | +lsrha 171234 | +lsrhdiff 200234 | +lsrhgrd 129234 | +lssrate 260055 | +lssrwe 260052 | +lswp 260043 | +lti 151201 | +ltlt 228011 | +ltng 260391 | +lwavr 3115 | +lwbc 300200 | +lwhr 154 260354 | +lwhra 171154 | +lwhrdiff 200154 | +lwhrgrd 129154 | +lwnv 300073 | +lwrad 3119 | +lwrd 300115 | +lwrh 300205 | +lwtc 300201 | +magss 48 | +magssa 171048 | +magssdiff 200048 | +magssgrd 129048 | +mask 300137 | +maxah 260024 | +maxfrpfire 210101 | +maxfrpfirediff 211101 | +maxgust 260064 | +maxrh 260023 | +maxswh 140200 | +maxswhi 132216 | +mcc 187 | +mcca 171187 | +mccdiff 200187 | +mccgrd 129187 | +mccpg10 133073 | +mccpg20 133074 | +mccpg30 133075 | +mccpg40 133076 | +mccpg50 133077 | +mccpg60 133078 | +mccpg70 133079 | +mccpg80 133080 | +mccpg90 133081 | +mccpg99 133082 | +mconv 260022 260034 | +mdnv 300074 | +mdps 3107 500075 | +mdts 140238 | +mdwi 140242 | +mdww 3101 140235 500072 | +mean10ws 228005 | +mean2t 228004 | +mean2t24 55 | +mean2t24diff 200055 | +mean2t24grd 129055 | +meantcc 228006 | +mflux 260366 | +mflx 260069 | +mflx_con 500182 | +mgws 196 | +mgwsa 171196 | +mgwsdiff 200196 | +mgwsgrd 129196 | +mgwsvar 230196 | +mh 500163 | +mht 151170 | +mindpd 260006 | +minrh 260261 | +mixly 260404 | +mixr 3053 | +mkmt 300240 | +mld 3067 150154 151148 | +mlyno 260424 | +mn2d24 56 | +mn2d24a 171056 | +mn2d24diff 200056 | +mn2d24grd 129056 | +mn2t 202 | +mn2t24 52 | +mn2t24a 171052 171055 | +mn2t24diff 200052 | +mn2t24grd 129052 | +mn2t3 228027 | +mn2t6 122 | +mn2t6a 171122 | +mn2t6diff 200122 | +mn2t6grd 129122 | +mn2ta 171202 | +mn2tdiff 200202 | +mn2tgrd 129202 | +mn2ti 132202 | +mn2tp 131202 | +mn2tpl0 133013 | +mn2tpl10 133015 | +mn2tpl5 133014 | +mn2tplm10 133011 | +mn2tplm5 133012 | +mn2trea 160202 | +mntp 300016 | +mntsf 3037 | +moflrea 160247 | +monot 210058 | +mont 53 | +monta 171053 | +montdiff 200053 | +montgrd 129053 | +mp1 140220 | +mp2 140221 | +mpmt 300246 | +mpp_s 500188 | +mpps 3108 500077 | +mpts 140239 | +mpww 3103 140236 500074 | +mrcono 260395 | +mscv 300143 | +msl 151 | +msla 171151 | +mslag0 131010 | +msldiff 200151 | +mslet 260317 | +mslgrd 129151 | +mslma 260323 | +msls 234151 | +msqs 140244 | +msr_hv 69 | +msr_lv 68 | +mst 151134 | +mstav 260187 | +mterh 260183 | +mtha 3070 300070 | +mthd 3069 300069 | +mtr 151168 | +mu10 140241 | +mvv 130232 | +mwd 140230 500185 | +mwp 140232 | +mwp_x 500186 | +mwpg10 131079 | +mwpg12 131080 | +mwpg15 131081 | +mwpg8 131078 | +mwpp 131232 | +mx2t 201 | +mx2t24 51 | +mx2t24a 171051 | +mx2t24diff 200051 | +mx2t24grd 129051 | +mx2t3 228026 | +mx2t6 121 | +mx2t6a 171121 | +mx2t6diff 200121 | +mx2t6grd 129121 | +mx2ta 171201 | +mx2tdiff 200201 | +mx2tgrd 129201 | +mx2ti 132201 | +mx2tp 131201 | +mx2tpg25 133016 | +mx2tpg30 133017 | +mx2tpg35 133018 | +mx2tpg40 133019 | +mx2tpg45 133020 | +mx2trea 160201 | +mxld 300067 | +mxsalb 260161 | +mxtp 300015 | +mxwp 300146 | +mxwu 300138 | +mxwv 300139 | +n2o 210063 | +n2odiff 211063 | +n2ofire 210086 | +n2ofirediff 211086 | +nbdsf 260348 | +nbsalb 260413 | +ncip 260270 | +ncpcp 260009 | +nddsf 260349 | +ndvi 260458 500219 | +ndvi_max 500220 | +ndvi_mrat 500221 | +ndviratio 500222 | +neov 193 | +neova 171193 | +neovdiff 200193 | +neovgrd 129193 | +neve 300064 | +nh3fire 210116 | +nh3firediff 211116 | +nhcm 300171 | +nlat 260421 | +nlatn 260425 | +nlgsp 260331 | +nlwrcs 260100 | +nlwrf 260099 | +nlwrs 3112 260095 | +nlwrt 3113 3114 260096 | +nmhcfire 210083 | +nmhcfirediff 211083 | +no2 210121 | +no2diff 211121 | +nox 210129 | +noxdiff 211129 | +noxfire 210085 | +noxfirediff 211085 | +npixu 260224 | +nsf 150171 151156 | +nsgd 221 130221 | +nsgda 171221 | +nsgddiff 200221 | +nsgdgrd 129221 | +nsov 191 | +nsova 171191 | +nsovdiff 200191 | +nsovgrd 129191 | +nsss 181 | +nsssa 171181 | +nsssdiff 200181 | +nsssgrd 129181 | +nsssrea 160181 | +nsssvar 230181 | +nswr 300113 | +nswrf 260089 | +nswrfcs 260091 | +nswrs 3111 | +nswrt 260086 | +nvde 300066 | +nwov 192 | +nwova 171192 | +nwovdiff 200192 | +nwovgrd 129192 | +nwsalb 260414 | +o3 203 500242 | +o3a 171203 | +o3diff 200203 | +o3grd 129203 | +o3mr 260131 | +oafire 210098 | +oafirediff 211098 | +obct 62 | +obcta 171062 | +obctdiff 200062 | +obctgrd 129062 | +obsmsg_alb_hrv 500389 | +obsmsg_alb_nir1.6 500390 | +obsmsg_alb_vis0.6 500391 | +obsmsg_alb_vis0.8 500392 | +obsmsg_bt_ir10.8 500393 | +obsmsg_bt_ir12.0 500394 | +obsmsg_bt_ir13.4 500395 | +obsmsg_bt_ir3.9 500396 | +obsmsg_bt_ir8.7 500397 | +obsmsg_bt_ir9.7 500398 | +obsmsg_bt_wv6.2 500399 | +obsmsg_bt_wv7.3 500400 | +ocac 300203 | +ocas 300111 | +oces 300212 | +ocfire 210090 | +ocfirediff 211090 | +ocic 300210 | +ocis 300209 | +ocnuc 210057 | +ocpd 150131 | +ocpt 150129 151129 | +ocs 150130 | +ocu 150133 151131 | +ocv 150134 151132 | +ocw 150135 151133 | +ohc 260507 | +oles 300211 | +olic 300208 | +olis 300207 | +omaod550 210210 | +omaod550diff 211210 | +omeg 300039 | +omega 500031 | +omg2 300040 | +omgalf 260312 | +omlu 260487 | +omlv 260488 | +ommt 300236 | +omtm 300242 | +oro_mod 500214 | +orog 228002 | +ozcat 260380 | +ozcon 260379 | +p 500001 | +p1ps 140226 | +p1ww 140223 | +p2omlt 260495 | +p2ps 140227 | +p2ww 140224 | +pa 171054 | +paaod532 215095 | +pabs_rad 500091 | +pah 131096 | +paod532 215093 | +papt 3014 | +par 58 | +para 171058 | +parcs 20 | +pardiff 200058 | +pargrd 129058 | +parvar 230058 | +patd 131097 | +pats 131095 | +paw 204 | +pawa 171204 | +pawdiff 200204 | +pawgrd 129204 | +pblreg 260156 | +pcbs 300150 | +pcmt 300244 | +pctp 300151 | +perpw 260234 | +persw 260235 | +pev 228251 | +pevap 260036 | +pevpr 260037 | +ph 131090 | +phiaw 140211 | +phioc 140212 | +photar 260090 | +pitp 300179 | +plcov 500065 | +plcov_mn 500211 | +plcov_mx 500210 | +pli 3024 | +plpl 260325 | +pm1 210072 | +pm10 210074 | +pm2p5 210073 | +pm2p5fire 210087 | +pm2p5firediff 211087 | +pme 151158 | +pmsl 500002 | +pmtc 260374 | +pmtf 260375 | +pnaod532 215094 | +pop 260178 | +poros 260209 | +potv 300036 | +poz 260382 | +pozo 260385 | +pozt 260384 | +pp 201139 500148 | +pp1d 140231 500190 | +ppffg 260431 | +pposp 260177 | +ppps 500189 | +ppww 500187 | +prate 3059 | +prcr 300059 | +prcv 300063 | +prec 260138 300061 | +prec_con 500043 | +prec_gsp 500042 | +pres 54 300001 | +presa 3026 | +presalt 260078 | +presdiff 200054 | +presgrd 129054 | +presn 260337 | +prg_gsp 500145 | +prge 300062 | +prmp 300108 | +prmsl 260074 | +prr_con 201111 500135 | +prr_gsp 201100 500132 | +prs_con 201112 500136 | +prs_gsp 201101 500133 | +prs_min 500171 | +prsigsvr 260416 | +prsvr 260415 | +prwd 300107 | +ps 500000 | +psa 151212 | +psan 300026 | +psat 300014 | +pslc 300135 | +pslm 300136 | +psmt 300250 | +psnm 300002 | +pt 3 | +pta 151211 171003 | +ptae 151179 | +ptbe 151182 | +ptd 131091 | +ptdiff 200003 | +ptend 3003 | +ptgrd 129003 | +ptheta 500301 | +pti 151178 | +ptmp 300013 | +ptmt 300243 | +pts 131089 | +ptype 260015 | +pv 60 | +pva 171060 | +pvdiff 200060 | +pvgrd 129060 | +pvmt 300252 | +pvmww 260316 | +pwat 3054 | +pwcat 260026 | +pwcrea 160137 | +q 133 | +q_sedim 500131 | +qa 171133 | +qc 201031 500100 | +qc_rad 500110 | +qcvg_con 500184 | +qdiff 200133 | +qg 500106 | +qgrd 129133 | +qi 201033 500101 | +qi_rad 500111 | +qitendcs 162135 | +qltendcs 162134 | +qmax 260282 | +qmin 260283 | +qqrea 160211 | +qr 500102 | +qrec 260456 | +qrs_gsp 201099 | +qs 500103 | +qsfc 300181 | +qtendcds 162129 | +qtendcs 162133 | +qtendd 162117 | +qtendsc 162141 | +qtendt 162122 | +qtrea 160210 | +qv 500035 | +qv_2m 500034 | +qv_s 500033 | +qvsflx 500234 | +qz0 260281 | +qzrea 160209 | +r 157 | +ra 171157 210181 | +radiff 211181 | +radt 260482 | +rain_con 201113 500137 | +rain_gsp 201102 500134 | +raza 260226 | +rcq 260196 | +rcs 260193 | +rcsol 260195 | +rct 260194 | +rdiff 200157 | +rdrip 260447 | +rds1 300021 | +rds2 300022 | +rds3 300023 | +rdsp1 3021 | +rdsp2 3022 | +rdsp3 3023 | +refc 260390 | +refd 260389 | +refzc 260388 | +refzi 260387 | +refzr 260386 | +relhum 500037 | +relhum_2m 500036 | +resid_wso 500181 | +rev 260244 | +rfl06 260227 | +rfl08 260228 | +rfl16 260229 | +rfl39 260230 | +rgrd 129157 | +rhmt 300245 | +rho_snow 500147 | +ri 260369 | +rime 260040 | +rlat 500236 | +rlon 500237 | +rlyrs 260206 | +rn 150137 151139 | +rnof 300178 | +ro 205 | +roa 171205 | +roce 300214 | +rodiff 200205 | +rogrd 129205 | +role 300114 | +rootdp 500207 | +rorea 160205 | +rovar 230205 | +rprate 260058 | +rr_c 500139 | +rr_f 500138 | +rrea 160157 | +rsmin 260192 | +rsmt 300233 | +rsn 33 | +rsna 171033 | +rsndiff 200033 | +rsngrd 129033 | +rssc 260171 | +rstom 500097 | +ru-103 500165 500243 | +ru-103d 500244 | +ru-103w 500245 | +runoff_g 500066 | +runoff_g_lm 500067 | +runoff_s 500068 | +rwmr 260020 | +s 3088 151130 | +sadf 300056 | +saip 131017 | +salbe 151194 | +sale 151191 | +sali 151184 | +salin 260503 | +satd 3056 | +satosm 260217 | +sav300 151175 | +sbsalb 260411 | +sbsno 260275 | +scfr 7 | +scvh 300145 | +scvm 300144 | +sd 141 228141 | +sda 171141 | +sddiff 200141 | +sdfor 74 | +sdgrd 129141 | +sdhs 140240 | +sdi_1 500149 | +sdi_2 500150 | +sdor 160 | +sdora 171160 | +sdordiff 200160 | +sdorgrd 129160 | +sdrea 160141 | +sdsgso 260085 | +sdsien 190141 | +sdu 140243 | +sdur 46 | +sdura 171046 | +sdurdiff 200046 | +sdurgrd 129046 | +sdurvar 230046 | +sdwe 260056 | +sept 5 | +septa 171005 | +septdiff 200005 | +septgrd 129005 | +sf 144 228144 | +sf6 210182 | +sf6apf 210185 | +sf6apfdiff 211185 | +sf6diff 211182 | +sfa 171144 | +sfara 173144 | +sfco2 210154 | +sfco2diff 211154 | +sfcrh 260457 | +sfdiff 200144 | +sfexc 260188 | +sfgo3 210156 | +sfgo3diff 211156 | +sfgr1 210157 | +sfgr10 210166 | +sfgr10diff 211166 | +sfgr1diff 211157 | +sfgr2 210158 | +sfgr2diff 211158 | +sfgr3 210159 | +sfgr3diff 211159 | +sfgr4 210160 | +sfgr4diff 211160 | +sfgr5 210161 | +sfgr5diff 211161 | +sfgr6 210162 | +sfgr6diff 211162 | +sfgr7 210163 | +sfgr7diff 211163 | +sfgr8 210164 | +sfgr8diff 211164 | +sfgr9 210165 | +sfgr9diff 211165 | +sfgrd 129144 | +sfhcho 210155 | +sfhchodiff 211155 | +sfi 132144 | +sfno2 210152 | +sfno2diff 211152 | +sfnox 210151 | +sfnoxdiff 211151 | +sfp 131144 | +sfpg1 133042 | +sfpg10 133044 | +sfpg100 133049 | +sfpg150 133050 | +sfpg20 133045 | +sfpg200 133051 | +sfpg300 133052 | +sfpg40 133046 | +sfpg5 133043 | +sfpg60 133047 | +sfpg80 133048 | +sfrea 160144 | +sfso2 210153 | +sfso2diff 211153 | +sfvar 230144 | +sgcvv 3038 | +sgvv 300038 | +sh 151150 | +shahr 260251 | +shailpro 260401 | +shamr 260277 | +shcw 300100 | +shf 151160 | +shps 500076 | +shtfl 260003 | +shts 140237 | +shww 3102 140234 500073 | +sia 171212 | +sica 171031 | +sicdiff 200031 | +siced 3094 | +sicgrd 129031 | +simt 300247 | +sipd 260417 | +skt 235 | +skta 171235 | +sktd 65 | +sktda 171065 | +sktdiff 200235 | +sktgrd 129235 | +sl 150152 151145 | +sl_1 151146 | +slal2 171170 | +slds 300112 | +slhf 147 | +slhfa 171147 | +slhfdiff 200147 | +slhfgrd 129147 | +slhfvar 230147 | +slor 163 | +slora 171163 | +slordiff 200163 | +slorgrd 129163 | +slt 43 | +slta 171043 | +sltdiff 200043 | +sltfl 260501 | +sltgrd 129043 | +sltyp 260474 | +sm 228039 | +smav 300174 | +smax 151173 | +smdry 260208 | +smlt 45 | +smlta 171045 | +smltdiff 200045 | +smltgrd 129045 | +smltvar 230045 | +smref 260207 | +snfalb 260162 | +snmr 260021 | +snoag 260013 | +snoc 260011 | +snohf 260007 | +snol 260012 | +snom 3099 | +snot 260271 | +snow_con 500052 | +snow_gsp 500053 | +snow_gsp_c 500387 | +snow_gsp_s 500383 | +snowc 260038 | +snowlmt 201085 500128 | +snowt 260285 | +snr 149 | +snra 171149 | +snrdiff 200149 | +snrgrd 129149 | +so2 210122 | +so2diff 211122 | +so2fire 210102 | +so2firediff 211102 | +soapr 210059 | +sobs_rad 500079 | +sobt_rad 500083 | +sohr_rad 201013 500092 | +soic 300086 | +soill 260205 | +soilp 260215 | +soiltyp 500205 | +soilw 260185 | +solza 260225 | +sotr_rad 500177 | +sp 134 500026 | +sp_10m 500025 | +spa 171134 | +spc 3048 260237 | +spdc 300048 | +spdiff 200134 | +spgrd 129134 | +sppt1 213001 | +sppt2 213002 | +sppt3 213003 | +sppt4 213004 | +sppt5 213005 | +sprate 260059 | +sprd 500194 | +sr 173 190173 | +sr-90 500246 | +sr-90d 500247 | +sr-90w 500248 | +sra 171173 | +src 198 | +srca 171198 | +srcdiff 200198 | +srcgrd 129198 | +srcono 260394 | +srcrea 160198 | +srcvar 230198 | +srdiff 200173 | +srgrd 129173 | +srh 500287 | +sro 8 174008 | +srovar 230008 | +srweq 3064 260010 | +ssa1020 215146 | +ssa1064 215147 | +ssa1240 215148 | +ssa1640 215149 | +ssa2130 215178 | +ssa340 215132 | +ssa355 215133 | +ssa380 215134 | +ssa400 215135 | +ssa440 215136 | +ssa469 215137 | +ssa500 215138 | +ssa532 215139 | +ssa550 215140 | +ssa645 215141 | +ssa670 215142 | +ssa800 215143 | +ssa858 215144 | +ssa865 215145 | +ssaod550 210208 | +ssaod550diff 211208 | +ssfr 6 | +sshf 146 | +sshfa 171146 | +sshfdiff 200146 | +sshfgrd 129146 | +sshfvar 230146 | +sshg 260494 | +sso_gamma 500201 | +sso_sigma 500203 | +sso_stdh 500200 | +sso_theta 500202 | +ssr 176 180176 | +ssra 171176 | +ssrc 210 | +ssrca 171210 | +ssrcdiff 200210 | +ssrcgrd 129210 | +ssrcvar 230210 | +ssrd 169 | +ssrda 171169 | +ssrdc 228129 | +ssrddiff 200169 | +ssrdgrd 129169 | +ssrdiff 200176 | +ssrdvar 230169 | +ssrgrd 129176 | +ssro 9 174009 | +ssrovar 230009 | +ssrun 260175 | +ssrvar 230176 | +ssst 260499 | +sst 34 151159 | +ssta 171034 | +sstdiff 200034 | +sstkgrd 129034 | +sstor 260452 | +sstt 260498 | +ssw 3086 | +st 228139 | +stag0 131009 | +stal1 171139 | +stal3 171183 | +stal4 171236 | +stf 228092 | +sth 151138 | +stl1 139 | +stl1diff 200139 | +stl1grd 129139 | +stl2 170 | +stl2diff 200170 | +stl2grd 129170 | +stl3 183 | +stl3diff 200183 | +stl3grd 129183 | +stl4 236 | +stl4diff 200236 | +stl4grd 129236 | +stmt 300235 | +storprob 260400 | +str 177 180177 | +stra 171177 | +strc 211 | +strca 171211 | +strcdiff 200211 | +strcgrd 129211 | +strcvar 230211 | +strd 175 | +strda 171175 | +strdc 228130 | +strddiff 200175 | +strdgrd 129175 | +strdiff 200177 | +strdvar 230175 | +strf 1 | +strfa 171001 | +strfdiff 200001 | +strfgrd 129001 | +strgrd 129177 | +strvar 230177 | +sts 234139 | +stsktd 63 | +stsktda 171063 | +suaod550 210212 | +suaod550diff 211212 | +subi 151190 | +sund 189 | +sunda 171189 | +sundara 173189 | +sunddiff 200189 | +sundgrd 129189 | +sundvar 230189 | +suns 260119 | +surge 260491 | +suvf 300196 | +swal1 171140 | +swal2 171171 | +swal3 171184 | +swal4 171237 | +swavr 3116 | +swdi 300104 300109 | +swdir 3104 | +swea 300116 | +swec 300202 | +swell 3105 | +swepon 260173 | +swgc 300213 | +swh 3100 140229 500071 | +swhg2 131074 | +swhg4 131075 | +swhg6 131076 | +swhg8 131077 | +swhp 131229 | +swhr 153 260343 | +swhra 171153 | +swhrdiff 200153 | +swhrgrd 129153 | +swi1 228040 | +swi2 228041 | +swi3 228042 | +swi4 228043 | +swindpro 260402 | +swl1 140 | +swl1diff 200140 | +swl1grd 129140 | +swl1rea 160140 | +swl2 171 170171 | +swl2diff 200171 | +swl2grd 129171 | +swl2rea 160171 | +swl3 184 | +swl3diff 200184 | +swl3grd 129184 | +swl3rea 160184 | +swl4 237 | +swl4diff 200237 | +swl4grd 129237 | +swmp 300106 300110 | +swp 3110 | +swper 3106 | +swrad 3120 | +swrh 300206 | +swsalb 260412 | +swsh 300105 | +swtc 300215 | +swv 228093 | +swval1 171039 | +swval2 171040 | +swval3 171041 | +swval4 171042 | +swvl1 39 | +swvl1diff 200039 | +swvl1grd 129039 | +swvl2 40 | +swvl2diff 200040 | +swvl2grd 129040 | +swvl3 41 | +swvl3diff 200041 | +swvl3grd 129041 | +swvl4 42 | +swvl4diff 200042 | +swvl4grd 129042 | +sx 260124 | +synme5_bt_cl 500324 | +synme5_bt_cs 500325 | +synme5_rad_cl 500326 | +synme5_rad_cs 500327 | +synme6_bt_cl 500328 | +synme6_bt_cs 500329 | +synme6_rad_cl 500330 | +synme6_rad_cs 500331 | +synme7_bt_cl_ir11.5 500332 | +synme7_bt_cl_wv6.4 500333 | +synme7_bt_cs_ir11.5 500334 | +synme7_bt_cs_wv6.4 500335 | +synme7_rad_cl_ir11.5 500336 | +synme7_rad_cl_wv6.4 500337 | +synme7_rad_cs_ir11.5 500338 | +synme7_rad_cs_wv6.4 500339 | +synmsg_bt_cl_ir10.8 500340 | +synmsg_bt_cl_ir12.1 500341 | +synmsg_bt_cl_ir13.4 500342 | +synmsg_bt_cl_ir3.9 500343 | +synmsg_bt_cl_ir8.7 500344 | +synmsg_bt_cl_ir9.7 500345 | +synmsg_bt_cl_wv6.2 500346 | +synmsg_bt_cl_wv7.3 500347 | +synmsg_bt_cs_ir10.8 500349 | +synmsg_bt_cs_ir12.1 500350 | +synmsg_bt_cs_ir13.4 500351 | +synmsg_bt_cs_ir3.9 500352 | +synmsg_bt_cs_ir8.7 500348 | +synmsg_bt_cs_ir9.7 500353 | +synmsg_bt_cs_wv6.2 500354 | +synmsg_bt_cs_wv7.3 500355 | +synmsg_rad_cl_ir10.8 500356 | +synmsg_rad_cl_ir12.1 500357 | +synmsg_rad_cl_ir13.4 500358 | +synmsg_rad_cl_ir3.9 500359 | +synmsg_rad_cl_ir8.7 500360 | +synmsg_rad_cl_ir9.7 500361 | +synmsg_rad_cl_wv6.2 500362 | +synmsg_rad_cl_wv7.3 500363 | +synmsg_rad_cs_ir10.8 500364 | +synmsg_rad_cs_ir12.1 500365 | +synmsg_rad_cs_ir13.4 500366 | +synmsg_rad_cs_ir3.9 500367 | +synmsg_rad_cs_ir8.7 500368 | +synmsg_rad_cs_ir9.7 500369 | +synmsg_rad_cs_wv6.2 500370 | +synmsg_rad_cs_wv7.3 500371 | +t 130 500014 | +t_2m 500011 | +t_2m_av 500012 | +t_2m_cl 500013 | +t_2m_s 500372 | +t_cl 500058 | +t_cl_lm 500059 | +t_g 500010 | +t_ice 201215 500172 | +t_m 500060 | +t_s 500061 | +t_s_s 500384 | +t_snow 201203 500170 | +t_so 500166 | +ta 3025 171130 | +tag2 131021 | +tag4 131024 | +tag8 131025 | +talm2 131020 | +talm4 131023 | +talm8 131022 | +tap 131130 | +tauoc 140214 | +tav300 151164 | +tax 151153 | +tay 151154 | +tcas 300189 | +tcc 164 228164 | +tcca 171164 | +tccdiff 200164 | +tccgrd 129164 | +tcch4 210065 | +tcch4diff 211065 | +tcclw 228255 | +tcco 210127 | +tcco2 210064 | +tcco2diff 211064 | +tccodiff 211127 | +tccp 131164 | +tccpg10 133053 | +tccpg20 133054 | +tccpg30 133055 | +tccpg40 133056 | +tccpg50 133057 | +tccpg60 133058 | +tccpg70 133059 | +tccpg80 133060 | +tccpg90 133061 | +tccpg99 133062 | +tccsw 228256 | +tcfire 210089 | +tcfirediff 211089 | +tcgrg1 210132 | +tcgrg10 210150 | +tcgrg10diff 211150 | +tcgrg1diff 211132 | +tcgrg2 210134 | +tcgrg2diff 211134 | +tcgrg3 210136 | +tcgrg3diff 211136 | +tcgrg4 210138 | +tcgrg4diff 211138 | +tcgrg5 210140 | +tcgrg5diff 211140 | +tcgrg6 210142 | +tcgrg6diff 211142 | +tcgrg7 210144 | +tcgrg7diff 211144 | +tcgrg8 210146 | +tcgrg8diff 211146 | +tcgrg9 210148 | +tcgrg9diff 211148 | +tch 500162 | +tchcho 210128 | +tchchodiff 211128 | +tchp 260254 | +tcioz 260132 | +tciw 79 | +tciwa 171079 | +tciwv 260057 | +tclsw 260272 | +tclw 78 | +tclwa 171078 | +tcm 500161 | +tcn2o 210066 | +tcn2odiff 211066 | +tcno2 210125 | +tcno2diff 211125 | +tcnox 210130 | +tcnoxdiff 211130 | +tco3 206 | +tco3a 171206 | +tco3diff 200206 | +tco3grd 129206 | +tcolc 260116 | +tcoli 260115 | +tcolm 260273 | +tcolr 260041 | +tcols 260042 | +tcolw 260114 | +tcond 260017 260113 | +tcra 210183 | +tcradiff 211183 | +tcrw 228089 | +tcsf6 210184 | +tcsf6diff 211184 | +tcso2 210126 | +tcso2diff 211126 | +tcsw 228090 | +tcw 136 | +tcwa 171136 | +tcwat 260047 | +tcwdiff 200136 | +tcwgrd 129136 | +tcwv 137 | +tcwva 171137 | +tcwvdiff 200137 | +tcwvgrd 129137 | +td_2m 500017 | +td_2m_av 500018 | +td_2m_s 500375 | +tdiff 200130 | +tdiv_hum 500109 | +te-132 500255 | +te-132d 500256 | +te-132w 500257 | +temp 300011 | +tems 300188 | +terpenesfire 210109 | +terpenesfirediff 211109 | +tgrd 129130 | +tgrz 300175 | +tgsc 300191 | +thbs_rad 500081 | +thbt_rad 500085 | +thetae 500303 | +thflx 260247 | +thhr_rad 201014 500093 | +thick 260077 | +thpb 300060 | +thunc 260106 | +thz0 260253 | +tiaccp 260145 | +tiacip 260146 | +tiacrp 260147 | +tipd 260269 | +tisr 212 | +tisrdiff 200212 | +tisrgrd 129212 | +tisrvar 230212 | +tke 260155 500158 | +tke_con 500155 | +tketens 500156 | +tki 151155 | +tkvh 500160 | +tkvm 500159 | +tla 140213 | +tm01 500192 | +tm02 500193 | +tm10 500191 | +tmax 3015 140217 | +tmax_2m 500015 | +tmax_2m_s 500373 | +tmaxt 260105 | +tmin 3016 | +tmin_2m 500016 | +tmin_2m_s 500374 | +tmmt 300251 | +tnr 150 | +tnra 171150 | +tnrdiff 200150 | +tnrgrd 129150 | +to3 500009 | +toluenefire 210110 | +toluenefirediff 211110 | +top_con 201073 500121 | +topo 300132 | +torprob 260397 | +tot_prec 500041 | +tot_prec_c 500386 | +tot_prec_s 500378 | +totalx 260123 | +totforce_s 500180 | +toz 260383 | +tozne 260130 | +tp 228 228228 | +tp2m 300128 | +tpa 171228 | +tpag0 131008 | +tpag10 131007 | +tpag20 131006 | +tpan 300025 | +tpara 173228 | +tpdiff 200228 | +tpfi 260419 | +tpg1 131060 | +tpg10 131062 | +tpg100 131085 | +tpg150 131086 | +tpg20 131063 | +tpg200 131087 | +tpg300 131088 | +tpg40 131082 | +tpg5 131061 | +tpg60 131083 | +tpg80 131084 | +tpgrd 129228 | +tpi 132228 | +tpl01 131064 | +tplb 228018 | +tplt 228019 | +tpmfire 210088 | +tpmfirediff 211088 | +tpoa 171061 | +tpoc 220228 | +tpodiff 200061 | +tpogrd 129061 | +tpor 300017 | +tpp 131151 131228 | +tppg1 133031 | +tppg10 133033 | +tppg100 133038 | +tppg150 133039 | +tppg20 133034 | +tppg200 133040 | +tppg300 133041 | +tppg40 133035 | +tppg5 133032 | +tppg60 133036 | +tppg80 133037 | +tppp 300157 | +tppt 300158 | +tppu 300159 | +tppv 300160 | +tprate 172228 260048 | +tprg3 131066 | +tprg5 131067 | +tprl1 131065 | +tps 234228 | +tpvar 230228 | +tqc 500051 | +tqg 500107 | +tqi 500040 | +tqr 500104 | +tqs 500105 | +tqv 500038 | +tr-2 500264 | +tr-2d 500265 | +tr-2w 500266 | +tra_sum 500179 | +trans 260471 | +transo 260212 | +tsd1d 260250 | +tsec 260168 260241 | +tsfc 300187 | +tslsa 260324 | +tsm 190229 | +tsmt 300232 | +tsn 238 | +tsna 171238 | +tsndiff 200238 | +tsngrd 129238 | +tsnowp 260046 | +tsp 158 | +tspa 171158 | +tspdiff 200158 | +tspgrd 129158 | +tsps 300003 | +tsr 178 180178 | +tsra 171178 | +tsrate 260053 | +tsrc 208 | +tsrca 171208 | +tsrcdiff 200208 | +tsrcgrd 129208 | +tsrcvar 230208 | +tsrdiff 200178 | +tsrgrd 129178 | +tsru 130208 | +tsrvar 230178 | +tsrwe 260049 | +tstm 3060 | +tstmc 260403 | +tsuc 130210 | +tsw 170149 180149 | +ttdia 260248 | +ttendcds 162128 | +ttendcs 162132 | +ttendd 162116 | +ttendr 162118 | +ttends 162125 | +ttendsc 162140 | +ttendts 162121 | +tthd 300068 | +tthdp 3068 | +ttphy 260249 | +ttr 179 170179 180179 | +ttra 171179 | +ttrad 260243 | +ttrc 209 | +ttrca 171209 | +ttrcdiff 200209 | +ttrcgrd 129209 | +ttrcvar 230209 | +ttrdiff 200179 | +ttrea 160208 | +ttrgrd 129179 | +ttru 130209 | +ttrvar 230179 | +ttuc 130211 | +turb 260154 | +turbb 260153 | +turbt 260152 | +tvh 30 | +tvha 171030 | +tvhdiff 200030 | +tvhgrd 129030 | +tvl 29 | +tvla 171029 | +tvldiff 200029 | +tvlgrd 129029 | +tvmt 300253 | +twater 201041 500108 | +twatp 260045 | +tzrea 160207 | +u 131 500028 | +u-gwd 260081 | +u10m 300130 | +u10n 228131 | +u_10m 500027 | +u_10m_s 500376 | +ua 171131 | +uba1 151165 | +ubaro 260489 | +ucdv 23 | +ucdva 171023 | +ucdvdiff 200023 | +ucdvgrd 129023 | +ucln 22 | +uclna 171022 | +uclndiff 200022 | +uclngrd 129022 | +ucpc 300049 | +uctp 21 | +uctpa 171021 | +uctpdiff 200021 | +uctpgrd 129021 | +ucurr 3049 | +udiff 200131 | +udvw 11 | +udvwdiff 200011 | +udvwgrd 129011 | +udwa 171011 | +uemt 300248 | +uflx 3124 260062 | +ugrd 129131 | +ugust 260066 | +uice 3095 | +ulwrf 260098 | +umax 151171 | +umes 300051 | +umrl 300052 | +umrs 300226 | +up 500299 | +uphl 260372 | +uplsm 260202 | +uplst 260201 | +uqrea 160214 | +urtw 13 | +urtwdiff 200013 | +urtwgrd 129013 | +urwa 171013 | +usct 260484 | +usmt 300230 | +ussl 300182 | +usst 300193 | +ust 140215 | +ustm 260070 | +ustr 300147 500238 | +ustr_sso 500280 | +uswrf 260088 | +ut 150140 151141 | +utendcds 162126 | +utendcs 162138 | +utendd 162114 | +utends 162123 | +utendts 162119 | +utnowd 228136 | +utrea 160213 | +utrf 260351 | +uu 150142 151143 | +uurea 160215 | +uv 150139 151140 | +uv_max 500285 | +uvb 57 | +uvba 171057 | +uvbdiff 200057 | +uvbed 214002 | +uvbedcs 214003 | +uvbgrd 129057 | +uvbvar 230057 | +uvcossza 214001 | +uvcs 19 | +uvel 300033 | +uves 300192 | +uvi 151187 260094 | +uviucs 260093 | +uvmt 300255 | +uvsflxcs280285 214028 | +uvsflxcs285290 214029 | +uvsflxcs290295 214030 | +uvsflxcs295300 214031 | +uvsflxcs300305 214032 | +uvsflxcs305310 214033 | +uvsflxcs310315 214034 | +uvsflxcs315320 214035 | +uvsflxcs320325 214036 | +uvsflxcs325330 214037 | +uvsflxcs330335 214038 | +uvsflxcs335340 214039 | +uvsflxcs340345 214040 | +uvsflxcs345350 214041 | +uvsflxcs350355 214042 | +uvsflxcs355360 214043 | +uvsflxcs360365 214044 | +uvsflxcs365370 214045 | +uvsflxcs370375 214046 | +uvsflxcs375380 214047 | +uvsflxcs380385 214048 | +uvsflxcs385390 214049 | +uvsflxcs390395 214050 | +uvsflxcs395400 214051 | +uvsflxt280285 214004 | +uvsflxt285290 214005 | +uvsflxt290295 214006 | +uvsflxt295300 214007 | +uvsflxt300305 214008 | +uvsflxt305310 214009 | +uvsflxt310315 214010 | +uvsflxt315320 214011 | +uvsflxt320325 214012 | +uvsflxt325330 214013 | +uvsflxt330335 214014 | +uvsflxt335340 214015 | +uvsflxt340345 214016 | +uvsflxt345350 214017 | +uvsflxt350355 214018 | +uvsflxt355360 214019 | +uvsflxt360365 214020 | +uvsflxt365370 214021 | +uvsflxt370375 214022 | +uvsflxt375380 214023 | +uvsflxt380385 214024 | +uvsflxt385390 214025 | +uvsflxt390395 214026 | +uvsflxt395400 214027 | +uzds 300184 | +uzrea 160212 | +uzrs 300183 | +v 132 500030 | +v-gwd 260082 | +v10m 300131 | +v10n 228132 | +v_10m 500029 | +v_10m_s 500377 | +va 171132 | +vabs 500288 | +vadv 300170 | +vaftd 260420 | +vapp 260008 300055 | +var190m0 260167 | +vba1 151166 | +vbaro 260490 | +vbdsf 260346 | +vcpc 300050 | +vcurr 3050 | +vdcc 300227 | +vddsf 260347 | +vdf 151136 | +vdfh 300225 | +vdfhr 260252 | +vdfmr 260278 | +vdfoz 260381 | +vdfu 300223 | +vdfua 260305 | +vdfv 300224 | +vdfva 260306 | +vdh 224 130224 | +vdha 171224 | +vdhdiff 200224 | +vdhgrd 129224 | +vdiff 200132 | +vdis_sso 500284 | +vdms 300222 | +vdmw 219 130219 | +vdmwa 171219 | +vdmwdiff 200219 | +vdmwgrd 129219 | +vdvw 12 | +vdvwdiff 200012 | +vdvwgrd 129012 | +vdwa 171012 | +vdzw 218 130218 | +vdzwa 171218 | +vdzwdiff 200218 | +vdzwgrd 129218 | +vedh 260301 | +veg 199 260180 | +vegdiff 200199 | +vege 300087 | +vegfire 210094 | +vegfirediff 211094 | +veggrd 129199 | +vegrea 160199 | +vegt 260451 | +veril 260136 | +vfa 171199 | +vflx 3125 260063 | +vgrd 129132 | +vgtyp 260439 | +vgust 260067 | +vice 3096 | +vimd 213 | +vio3 500209 | +vis 3020 | +vite 125 | +vitea 171125 | +vmax_10m 201187 500164 | +vmax_10m_c 500388 | +vmax_10m_s 500385 | +vmfl 300169 | +vo 138 | +voa 171138 | +vodiff 200138 | +vogrd 129138 | +volash 260148 | +voldec 260213 | +voltso 260211 | +vort 300043 | +vp 2 3055 500300 | +vpca 300180 | +vpota 171002 | +vpotdiff 200002 | +vpotgrd 129002 | +vptmp 3012 | +vqrea 160218 | +vrtw 14 | +vrtwdiff 200014 | +vrtwgrd 129014 | +vrwa 171014 | +vsct 260485 | +vsmt 300231 | +vso 200 | +vsoa 171200 | +vsodiff 200200 | +vsogrd 129200 | +vsosm 260216 | +vsst 300195 | +vst 140216 | +vstm 260071 | +vstr 300148 | +vstr_sso 500282 | +vsw 260199 | +vt 150141 151142 | +vtendcds 162127 | +vtendcs 162139 | +vtendd 162115 | +vtends 162124 | +vtendts 162120 | +vtmp 300012 | +vtmt 300254 | +vtnowd 228134 | +vtrea 160217 | +vucs 300045 | +vucsh 3045 | +vurea 160219 | +vv 150143 151144 | +vvcs 300046 | +vvcsh 3046 | +vvel 300034 | +vves 300194 | +vvi 151188 | +vvmt 300241 | +vvrea 160220 | +vvs 151135 | +vwiltm 260200 | +vwsh 260068 | +vzrea 160216 | +w 135 500032 | +w_cl 500062 | +w_g1 500063 | +w_g2 500064 | +w_i 201200 500169 | +w_shaer 500286 | +w_snow 500044 | +w_so 500167 | +w_so_ice 500168 | +wa 171135 | +watr 260181 | +wcconv 260464 | +wcf 260005 | +wcinc 260462 | +wcuflx 260467 | +wcvflx 260468 | +wdiff 200135 | +wdir 3031 | +wdiv 500296 | +wdw 140222 | +wenv 300065 | +wgrd 129135 | +whip 131018 | +wilt 228171 260442 | +wiltsien 190171 | +wind 140245 300031 | +windprob 260399 | +wins 300032 | +wmb 140219 | +wmixe 3126 | +wqrea 160223 | +wrea 160135 | +ws 10 | +wsk 140252 | +wsp 140254 | +wstp 260486 | +wtend 260311 | +wtmp 3080 | +wtmpc 260502 | +wtnv 300076 | +wtrea 160222 | +wurea 160224 | +wvar1 500215 | +wvar2 500216 | +wvconv 260463 | +wvdir 260232 | +wvinc 260461 | +wvrea 160225 | +wvs1 300028 | +wvs2 300029 | +wvs3 300030 | +wvsp1 3028 500020 | +wvsp2 3029 500021 | +wvsp3 3030 500022 | +wvuflx 260465 | +wvvflx 260466 | +ww 500292 | +wwdi 300101 | +wwmp 300103 | +wwrea 160226 | +wwsh 300102 | +wzrea 160221 | +xe-133 500267 | +xe-133d 500268 | +xe-133w 500269 | +z 129 | +z0 500055 | +za 171129 | +zdiff 200129 | +zgan 300027 | +zgeo 300007 | +zgrd 129129 | +zhd 500241 | +zhmt 300238 | +zht 151169 | +zorl 300083 | +zp 131129 | +zr-95 500258 | +zr-95d 500259 | +zr-95w 500260 | +ztd 500239 | +ztr 151167 | +zust 228003 | +zwd 500240 | +zzrea 160206 | diff --git a/definitions/param_id.table b/definitions/param_id.table new file mode 100644 index 000000000..ae8aaec3b --- /dev/null +++ b/definitions/param_id.table @@ -0,0 +1,4056 @@ +1 strf 1.128 35.1 35.2 35.3 | +10 ws 10.128 32.1 32.2 32.3 | +100 100.128 | +101 101.128 | +102 102.128 | +103 103.128 | +104 104.128 | +105 105.128 | +106 106.128 | +107 107.128 | +108 108.128 | +109 109.128 | +11 udvw 11.128 | +110 110.128 | +111 111.128 | +112 112.128 | +113 113.128 | +114 114.128 | +115 115.128 | +116 116.128 | +117 117.128 | +118 118.128 | +119 119.128 | +12 vdvw 12.128 | +120 120.128 | +121 mx2t6 15.1 15.2 15.3 121.128 | +122 mn2t6 16.1 16.2 16.3 122.128 | +123 10fg6 123.128 | +124 emis 124.128 | +125 vite 125.128 | +126 126.128 | +127 at 127.128 127.160 | +128 bv 128.128 128.160 | +129 z 6.1 6.2 6.3 129.128 129.160 129.170 129.180 129.190 | +129001 strfgrd 1.129 | +129002 vpotgrd 2.129 | +129003 ptgrd 3.129 | +129004 eqptgrd 4.129 | +129005 septgrd 5.129 | +129011 udvwgrd 11.129 | +129012 vdvwgrd 12.129 | +129013 urtwgrd 13.129 | +129014 vrtwgrd 14.129 | +129021 uctpgrd 21.129 | +129022 uclngrd 22.129 | +129023 ucdvgrd 23.129 | +129024 24.129 | +129025 25.129 | +129026 clgrd 26.129 | +129027 cvlgrd 27.129 | +129028 cvhgrd 28.129 | +129029 tvlgrd 29.129 | +129030 tvhgrd 30.129 | +129031 sicgrd 31.129 | +129032 asngrd 32.129 | +129033 rsngrd 33.129 | +129034 sstkgrd 34.129 | +129035 istl1grd 35.129 | +129036 istl2grd 36.129 | +129037 istl3grd 37.129 | +129038 istl4grd 38.129 | +129039 swvl1grd 39.129 | +129040 swvl2grd 40.129 | +129041 swvl3grd 41.129 | +129042 swvl4grd 42.129 | +129043 sltgrd 43.129 | +129044 esgrd 44.129 | +129045 smltgrd 45.129 | +129046 sdurgrd 46.129 | +129047 dsrpgrd 47.129 | +129048 magssgrd 48.129 | +129049 10fggrd 49.129 | +129050 lspfgrd 50.129 | +129051 mx2t24grd 51.129 | +129052 mn2t24grd 52.129 | +129053 montgrd 53.129 | +129054 presgrd 54.129 | +129055 mean2t24grd 55.129 | +129056 mn2d24grd 56.129 | +129057 uvbgrd 57.129 | +129058 pargrd 58.129 | +129059 capegrd 59.129 | +129060 pvgrd 60.129 | +129061 tpogrd 61.129 | +129062 obctgrd 62.129 | +129063 63.129 | +129064 64.129 | +129065 65.129 | +129066 66.129 | +129067 67.129 | +129068 68.129 | +129069 69.129 | +129070 70.129 | +129071 71.129 | +129078 78.129 | +129079 79.129 | +129080 80.129 | +129081 81.129 | +129082 82.129 | +129083 83.129 | +129084 84.129 | +129085 85.129 | +129086 86.129 | +129087 87.129 | +129088 88.129 | +129089 89.129 | +129090 90.129 | +129091 91.129 | +129092 92.129 | +129093 93.129 | +129094 94.129 | +129095 95.129 | +129096 96.129 | +129097 97.129 | +129098 98.129 | +129099 99.129 | +129100 100.129 | +129101 101.129 | +129102 102.129 | +129103 103.129 | +129104 104.129 | +129105 105.129 | +129106 106.129 | +129107 107.129 | +129108 108.129 | +129109 109.129 | +129110 110.129 | +129111 111.129 | +129112 112.129 | +129113 113.129 | +129114 114.129 | +129115 115.129 | +129116 116.129 | +129117 117.129 | +129118 118.129 | +129119 119.129 | +129120 120.129 | +129121 mx2t6grd 121.129 | +129122 mn2t6grd 122.129 | +129123 10fg6grd 123.129 | +129125 125.129 | +129126 126.129 | +129127 atgrd 127.129 | +129128 bvgrd 128.129 | +129129 zgrd 129.129 | +129130 tgrd 130.129 | +129131 ugrd 131.129 | +129132 vgrd 132.129 | +129133 qgrd 133.129 | +129134 spgrd 134.129 | +129135 wgrd 135.129 | +129136 tcwgrd 136.129 | +129137 tcwvgrd 137.129 | +129138 vogrd 138.129 | +129139 stl1grd 139.129 | +129140 swl1grd 140.129 | +129141 sdgrd 141.129 | +129142 lspgrd 142.129 | +129143 cpgrd 143.129 | +129144 sfgrd 144.129 | +129145 bldgrd 145.129 | +129146 sshfgrd 146.129 | +129147 slhfgrd 147.129 | +129148 chnkgrd 148.129 | +129149 snrgrd 149.129 | +129150 tnrgrd 150.129 | +129151 mslgrd 151.129 | +129152 lnspgrd 152.129 | +129153 swhrgrd 153.129 | +129154 lwhrgrd 154.129 | +129155 dgrd 155.129 | +129156 ghgrd 156.129 | +129157 rgrd 157.129 | +129158 tspgrd 158.129 | +129159 blhgrd 159.129 | +129160 sdorgrd 160.129 | +129161 isorgrd 161.129 | +129162 anorgrd 162.129 | +129163 slorgrd 163.129 | +129164 tccgrd 164.129 | +129165 10ugrd 165.129 | +129166 10vgrd 166.129 | +129167 2tgrd 167.129 | +129168 2dgrd 168.129 | +129169 ssrdgrd 169.129 | +129170 stl2grd 170.129 | +129171 swl2grd 171.129 | +129172 lsmgrd 172.129 | +129173 srgrd 173.129 | +129174 algrd 174.129 | +129175 strdgrd 175.129 | +129176 ssrgrd 176.129 | +129177 strgrd 177.129 | +129178 tsrgrd 178.129 | +129179 ttrgrd 179.129 | +129180 ewssgrd 180.129 | +129181 nsssgrd 181.129 | +129182 egrd 182.129 | +129183 stl3grd 183.129 | +129184 swl3grd 184.129 | +129185 cccgrd 185.129 | +129186 lccgrd 186.129 | +129187 mccgrd 187.129 | +129188 hccgrd 188.129 | +129189 sundgrd 189.129 | +129190 ewovgrd 190.129 | +129191 nsovgrd 191.129 | +129192 nwovgrd 192.129 | +129193 neovgrd 193.129 | +129194 btmpgrd 194.129 | +129195 lgwsgrd 195.129 | +129196 mgwsgrd 196.129 | +129197 gwdgrd 197.129 | +129198 srcgrd 198.129 | +129199 veggrd 199.129 | +129200 vsogrd 200.129 | +129201 mx2tgrd 201.129 | +129202 mn2tgrd 202.129 | +129203 o3grd 203.129 | +129204 pawgrd 204.129 | +129205 rogrd 205.129 | +129206 tco3grd 206.129 | +129207 10sigrd 207.129 | +129208 tsrcgrd 208.129 | +129209 ttrcgrd 209.129 | +129210 ssrcgrd 210.129 | +129211 strcgrd 211.129 | +129212 tisrgrd 212.129 | +129214 dhrgrd 214.129 | +129215 dhvdgrd 215.129 | +129216 dhccgrd 216.129 | +129217 dhlcgrd 217.129 | +129218 vdzwgrd 218.129 | +129219 vdmwgrd 219.129 | +129220 ewgdgrd 220.129 | +129221 nsgdgrd 221.129 | +129222 ctzwgrd 222.129 | +129223 ctmwgrd 223.129 | +129224 vdhgrd 224.129 | +129225 htccgrd 225.129 | +129226 htlcgrd 226.129 | +129227 crnhgrd 227.129 | +129228 tpgrd 228.129 | +129229 iewsgrd 229.129 | +129230 inssgrd 230.129 | +129231 ishfgrd 231.129 | +129232 iegrd 232.129 | +129233 asqgrd 233.129 | +129234 lsrhgrd 234.129 | +129235 sktgrd 235.129 | +129236 stl4grd 236.129 | +129237 swl4grd 237.129 | +129238 tsngrd 238.129 | +129239 csfgrd 239.129 | +129240 lsfgrd 240.129 | +129241 acfgrd 241.129 | +129242 alwgrd 242.129 | +129243 falgrd 243.129 | +129244 fsrgrd 244.129 | +129245 flsrgrd 245.129 | +129246 clwcgrd 246.129 | +129247 ciwcgrd 247.129 | +129248 ccgrd 248.129 | +129249 aiwgrd 249.129 | +129250 icegrd 250.129 | +129251 attegrd 251.129 | +129252 athegrd 252.129 | +129253 atzegrd 253.129 | +129254 atmwgrd 254.129 | +129255 255.129 | +13 urtw 13.128 | +130 t 11.1 11.2 11.3 130.128 130.160 130.170 130.180 130.190 | +130208 tsru 208.130 | +130209 ttru 209.130 | +130210 tsuc 210.130 | +130211 ttuc 211.130 | +130212 clw 212.130 | +130213 cf 213.130 | +130214 dhr 214.130 | +130215 dhvd 215.130 | +130216 dhcc 216.130 | +130217 dhlc 217.130 | +130218 vdzw 218.130 | +130219 vdmw 219.130 | +130220 ewgd 220.130 | +130221 nsgd 221.130 | +130224 vdh 224.130 | +130225 htcc 225.130 | +130226 htlc 226.130 | +130228 att 228.130 | +130229 ath 229.130 | +130230 atzw 230.130 | +130231 atmwax 231.130 | +130232 mvv 232.130 | +131 u 33.1 33.2 33.3 131.128 131.160 131.170 131.180 131.190 | +131001 1.131 2tag2 | +131002 2tag1 2.131 | +131003 2tag0 3.131 | +131004 2talm1 4.131 | +131005 2talm2 5.131 | +131006 tpag20 6.131 | +131007 tpag10 7.131 | +131008 tpag0 8.131 | +131009 stag0 9.131 | +131010 mslag0 10.131 | +131015 h0dip 15.131 | +131016 hslp 16.131 | +131017 saip 17.131 | +131018 whip 18.131 | +131020 talm2 20.131 | +131021 tag2 21.131 | +131022 talm8 22.131 | +131023 talm4 23.131 | +131024 tag4 24.131 | +131025 tag8 25.131 | +131049 10gp 49.131 | +131059 capep 59.131 | +131060 tpg1 60.131 | +131061 tpg5 61.131 | +131062 tpg10 62.131 | +131063 tpg20 63.131 | +131064 tpl01 64.131 | +131065 tprl1 65.131 | +131066 tprg3 66.131 | +131067 tprg5 67.131 | +131068 10spg10 68.131 | +131069 10spg15 69.131 | +131070 10fgg15 70.131 | +131071 10fgg20 71.131 | +131072 10fgg25 72.131 | +131073 2tl273 73.131 | +131074 swhg2 74.131 | +131075 swhg4 75.131 | +131076 swhg6 76.131 | +131077 swhg8 77.131 | +131078 mwpg8 78.131 | +131079 mwpg10 79.131 | +131080 mwpg12 80.131 | +131081 mwpg15 81.131 | +131082 tpg40 82.131 | +131083 tpg60 83.131 | +131084 tpg80 84.131 | +131085 tpg100 85.131 | +131086 tpg150 86.131 | +131087 tpg200 87.131 | +131088 tpg300 88.131 | +131089 pts 89.131 | +131090 ph 90.131 | +131091 ptd 91.131 | +131092 cpts 92.131 | +131093 cph 93.131 | +131094 cptd 94.131 | +131095 pats 95.131 | +131096 pah 96.131 | +131097 patd 97.131 | +131129 zp 129.131 | +131130 tap 130.131 | +131139 2tp 139.131 | +131144 sfp 144.131 | +131151 tpp 151.131 | +131164 tccp 164.131 | +131165 10sp 165.131 | +131167 2tp 167.131 | +131201 mx2tp 201.131 | +131202 mn2tp 202.131 | +131228 tpp 228.131 | +131229 swhp 229.131 | +131232 mwpp 232.131 | +131255 255.131 | +132 v 34.1 34.2 34.3 132.128 132.160 132.170 132.180 132.190 | +132049 10fgi 49.132 | +132144 sfi 144.132 | +132165 10wsi 165.132 | +132167 2ti 167.132 | +132201 mx2ti 201.132 | +132202 mn2ti 202.132 | +132216 maxswhi 216.132 | +132228 tpi 228.132 | +133 q 51.1 51.2 51.3 133.128 133.160 133.170 133.180 133.190 | +133001 1.133 2tplm10 | +133002 2tplm5 2.133 | +133003 2tpl0 3.133 | +133004 2tpl5 4.133 | +133005 2tpl10 5.133 | +133006 2tpg25 6.133 | +133007 2tpg30 7.133 | +133008 2tpg35 8.133 | +133009 2tpg40 9.133 | +133010 2tpg45 10.133 | +133011 mn2tplm10 11.133 | +133012 mn2tplm5 12.133 | +133013 mn2tpl0 13.133 | +133014 mn2tpl5 14.133 | +133015 mn2tpl10 15.133 | +133016 mx2tpg25 16.133 | +133017 mx2tpg30 17.133 | +133018 mx2tpg35 18.133 | +133019 mx2tpg40 19.133 | +133020 mx2tpg45 20.133 | +133021 10spg10 21.133 | +133022 10spg15 22.133 | +133023 10spg20 23.133 | +133024 10spg35 24.133 | +133025 10spg50 25.133 | +133026 10gpg20 26.133 | +133027 10gpg35 27.133 | +133028 10gpg50 28.133 | +133029 10gpg75 29.133 | +133030 10gpg100 30.133 | +133031 tppg1 31.133 | +133032 tppg5 32.133 | +133033 tppg10 33.133 | +133034 tppg20 34.133 | +133035 tppg40 35.133 | +133036 tppg60 36.133 | +133037 tppg80 37.133 | +133038 tppg100 38.133 | +133039 tppg150 39.133 | +133040 tppg200 40.133 | +133041 tppg300 41.133 | +133042 sfpg1 42.133 | +133043 sfpg5 43.133 | +133044 sfpg10 44.133 | +133045 sfpg20 45.133 | +133046 sfpg40 46.133 | +133047 sfpg60 47.133 | +133048 sfpg80 48.133 | +133049 sfpg100 49.133 | +133050 sfpg150 50.133 | +133051 sfpg200 51.133 | +133052 sfpg300 52.133 | +133053 tccpg10 53.133 | +133054 tccpg20 54.133 | +133055 tccpg30 55.133 | +133056 tccpg40 56.133 | +133057 tccpg50 57.133 | +133058 tccpg60 58.133 | +133059 tccpg70 59.133 | +133060 tccpg80 60.133 | +133061 tccpg90 61.133 | +133062 tccpg99 62.133 | +133063 hccpg10 63.133 | +133064 hccpg20 64.133 | +133065 hccpg30 65.133 | +133066 hccpg40 66.133 | +133067 hccpg50 67.133 | +133068 hccpg60 68.133 | +133069 hccpg70 69.133 | +133070 hccpg80 70.133 | +133071 hccpg90 71.133 | +133072 hccpg99 72.133 | +133073 mccpg10 73.133 | +133074 mccpg20 74.133 | +133075 mccpg30 75.133 | +133076 mccpg40 76.133 | +133077 mccpg50 77.133 | +133078 mccpg60 78.133 | +133079 mccpg70 79.133 | +133080 mccpg80 80.133 | +133081 mccpg90 81.133 | +133082 mccpg99 82.133 | +133083 lccpg10 83.133 | +133084 lccpg20 84.133 | +133085 lccpg30 85.133 | +133086 lccpg40 86.133 | +133087 lccpg50 87.133 | +133088 lccpg60 88.133 | +133089 lccpg70 89.133 | +133090 lccpg80 90.133 | +133091 lccpg90 91.133 | +133092 lccpg99 92.133 | +134 sp 1.1 1.2 1.3 52.162 134.128 134.160 134.180 134.190 | +135 w 39.1 39.2 39.3 135.128 135.170 | +136 tcw 136.128 136.160 | +137 tcwv 137.128 137.180 | +138 vo 43.1 43.2 43.3 138.128 138.160 138.170 138.180 138.190 | +139 stl1 139.128 139.160 139.170 139.190 | +14 vrtw 14.128 | +140 swl1 140.128 140.170 | +140200 maxswh 200.140 | +140211 phiaw 211.140 | +140212 phioc 212.140 | +140213 tla 213.140 | +140214 tauoc 214.140 | +140215 ust 215.140 | +140216 vst 216.140 | +140217 tmax 217.140 | +140218 hmax 218.140 | +140219 wmb 219.140 | +140220 mp1 220.140 | +140221 mp2 221.140 | +140222 wdw 222.140 | +140223 p1ww 223.140 | +140224 p2ww 224.140 | +140225 dwww 225.140 | +140226 p1ps 226.140 | +140227 p2ps 227.140 | +140228 dwps 228.140 | +140229 swh 229.140 | +140230 mwd 230.140 | +140231 pp1d 231.140 | +140232 mwp 232.140 | +140233 cdww 233.140 | +140234 shww 234.140 | +140235 mdww 235.140 | +140236 mpww 236.140 | +140237 shts 237.140 | +140238 mdts 238.140 | +140239 mpts 239.140 | +140240 sdhs 240.140 | +140241 mu10 241.140 | +140242 mdwi 242.140 | +140243 sdu 243.140 | +140244 msqs 244.140 | +140245 wind 245.140 | +140246 awh 246.140 | +140247 acwh 247.140 | +140248 arrc 248.140 | +140249 dwi 249.140 | +140250 2dsp 250.140 | +140251 2dfd 251.140 | +140252 wsk 252.140 | +140253 bfi 253.140 | +140254 wsp 254.140 | +140255 255.140 | +141 sd 141.128 141.170 141.180 | +142 lsp 142.128 142.170 142.180 | +143 cp 143.128 143.170 143.180 | +144 sf 144.128 144.180 | +145 bld 123.1 123.2 123.3 145.128 145.160 | +146 sshf 122.1 122.2 122.3 146.128 146.160 146.170 146.180 146.190 | +147 slhf 121.1 121.2 121.3 147.128 147.160 147.170 147.180 147.190 | +148 chnk 148.128 | +149 snr 149.128 | +15 aluvp 15.128 | +150 tnr 150.128 | +150129 ocpt 129.150 | +150130 ocs 130.150 | +150131 ocpd 131.150 | +150133 ocu 133.150 | +150134 ocv 134.150 | +150135 ocw 135.150 | +150137 rn 137.150 | +150139 uv 139.150 | +150140 ut 140.150 | +150141 vt 141.150 | +150142 uu 142.150 | +150143 vv 143.150 | +150144 144.150 | +150145 145.150 | +150146 146.150 | +150147 147.150 | +150148 148.150 | +150152 sl 152.150 | +150153 153.150 | +150154 mld 154.150 | +150155 155.150 | +150168 168.150 | +150169 169.150 | +150170 170.150 | +150171 nsf 171.150 | +150172 172.150 | +150173 173.150 | +150180 180.150 | +150181 181.150 | +150182 182.150 | +150183 183.150 | +150255 255.150 | +151 msl 2.1 2.2 2.3 151.128 151.160 151.170 151.180 151.190 | +151128 128.151 | +151129 ocpt 129.151 | +151130 s 130.151 | +151131 ocu 131.151 | +151132 ocv 132.151 | +151133 ocw 133.151 | +151134 mst 134.151 | +151135 vvs 135.151 | +151136 vdf 136.151 | +151137 dep 137.151 | +151138 sth 138.151 | +151139 rn 139.151 | +151140 uv 140.151 | +151141 ut 141.151 | +151142 vt 142.151 | +151143 uu 143.151 | +151144 vv 144.151 | +151145 sl 145.151 | +151146 sl_1 146.151 | +151147 bsf 147.151 | +151148 mld 148.151 | +151149 btp 149.151 | +151150 sh 150.151 | +151151 crl 151.151 | +151152 152.151 | +151153 tax 153.151 | +151154 tay 154.151 | +151155 tki 155.151 | +151156 nsf 156.151 | +151157 asr 157.151 | +151158 pme 158.151 | +151159 sst 159.151 | +151160 shf 160.151 | +151161 dte 161.151 | +151162 hfc 162.151 | +151163 20d 163.151 | +151164 tav300 164.151 | +151165 uba1 165.151 | +151166 vba1 166.151 | +151167 ztr 167.151 | +151168 mtr 168.151 | +151169 zht 169.151 | +151170 mht 170.151 | +151171 umax 171.151 | +151172 dumax 172.151 | +151173 smax 173.151 | +151174 dsmax 174.151 | +151175 sav300 175.151 | +151176 ldp 176.151 | +151177 ldu 177.151 | +151178 pti 178.151 | +151179 ptae 179.151 | +151180 bpt 180.151 | +151181 apt 181.151 | +151182 ptbe 182.151 | +151183 as 183.151 | +151184 sali 184.151 | +151185 ebt 185.151 | +151186 ebs 186.151 | +151187 uvi 187.151 | +151188 vvi 188.151 | +151190 subi 190.151 | +151191 sale 191.151 | +151192 bsal 192.151 | +151193 193.151 | +151194 salbe 194.151 | +151199 ebta 199.151 | +151200 ebsa 200.151 | +151201 lti 201.151 | +151202 lsi 202.151 | +151203 bzpga 203.151 | +151204 bmpga 204.151 | +151205 ebtl 205.151 | +151206 ebsl 206.151 | +151207 fgbt 207.151 | +151208 fgbs 208.151 | +151209 bpa 209.151 | +151210 fgbp 210.151 | +151211 pta 211.151 | +151212 psa 212.151 | +151255 255.151 | +152 lnsp 152.128 152.160 | +153 swhr 153.128 | +154 lwhr 154.128 | +155 d 44.1 44.2 44.3 155.128 155.160 155.170 155.180 155.190 | +156 gh 7.1 7.2 7.3 156.128 | +157 r 52.1 52.2 52.3 157.128 157.170 157.190 | +158 tsp 158.128 158.160 | +159 blh 159.128 | +16 aluvd 16.128 | +160 sdor 160.128 | +160049 10fgrea 49.160 | +160135 wrea 135.160 | +160137 pwcrea 137.160 | +160140 swl1rea 140.160 | +160141 sdrea 141.160 | +160142 lsprea 142.160 | +160143 cprea 143.160 | +160144 sfrea 144.160 | +160156 ghrea 156.160 | +160157 rrea 157.160 | +160171 swl2rea 171.160 | +160180 ewssrea 180.160 | +160181 nsssrea 181.160 | +160182 erea 182.160 | +160184 swl3rea 184.160 | +160198 srcrea 198.160 | +160199 vegrea 199.160 | +160201 mx2trea 201.160 | +160202 mn2trea 202.160 | +160205 rorea 205.160 | +160206 zzrea 206.160 | +160207 tzrea 207.160 | +160208 ttrea 208.160 | +160209 qzrea 209.160 | +160210 qtrea 210.160 | +160211 qqrea 211.160 | +160212 uzrea 212.160 | +160213 utrea 213.160 | +160214 uqrea 214.160 | +160215 uurea 215.160 | +160216 vzrea 216.160 | +160217 vtrea 217.160 | +160218 vqrea 218.160 | +160219 vurea 219.160 | +160220 vvrea 220.160 | +160221 wzrea 221.160 | +160222 wtrea 222.160 | +160223 wqrea 223.160 | +160224 wurea 224.160 | +160225 wvrea 225.160 | +160226 wwrea 226.160 | +160231 ishfrea 231.160 | +160239 csfrea 239.160 | +160240 lsfrea 240.160 | +160241 clwcerrea 241.160 | +160242 ccrea 242.160 | +160243 falrea 243.160 | +160246 10wsrea 246.160 | +160247 moflrea 247.160 | +160249 249.160 | +160254 hsdrea 254.160 | +161 isor 161.128 | +162 anor 162.128 | +162051 51.162 | +162053 53.162 | +162054 54.162 | +162055 55.162 | +162056 56.162 | +162057 57.162 | +162058 58.162 | +162059 59.162 | +162060 60.162 | +162061 61.162 | +162062 62.162 | +162063 63.162 | +162064 64.162 | +162065 65.162 | +162066 66.162 | +162067 67.162 | +162068 68.162 | +162069 69.162 | +162070 70.162 | +162071 71.162 | +162072 72.162 | +162073 73.162 | +162074 74.162 | +162075 75.162 | +162076 76.162 | +162077 77.162 | +162078 78.162 | +162079 79.162 | +162080 80.162 | +162081 81.162 | +162082 82.162 | +162083 83.162 | +162084 84.162 | +162085 85.162 | +162086 86.162 | +162087 87.162 | +162088 88.162 | +162089 89.162 | +162090 90.162 | +162091 91.162 | +162092 92.162 | +162100 100.162 | +162101 101.162 | +162102 102.162 | +162103 103.162 | +162104 104.162 | +162105 105.162 | +162106 106.162 | +162107 107.162 | +162108 108.162 | +162109 109.162 | +162110 110.162 | +162111 111.162 | +162112 112.162 | +162113 113.162 | +162114 utendd 114.162 | +162115 vtendd 115.162 | +162116 ttendd 116.162 | +162117 qtendd 117.162 | +162118 ttendr 118.162 | +162119 utendts 119.162 | +162120 vtendts 120.162 | +162121 ttendts 121.162 | +162122 qtendt 122.162 | +162123 utends 123.162 | +162124 vtends 124.162 | +162125 ttends 125.162 | +162126 utendcds 126.162 | +162127 vtendcds 127.162 | +162128 ttendcds 128.162 | +162129 qtendcds 129.162 | +162130 lpc 130.162 | +162131 ipc 131.162 | +162132 ttendcs 132.162 | +162133 qtendcs 133.162 | +162134 qltendcs 134.162 | +162135 qitendcs 135.162 | +162136 lpcs 136.162 | +162137 ipcs 137.162 | +162138 utendcs 138.162 | +162139 vtendcs 139.162 | +162140 ttendsc 140.162 | +162141 qtendsc 141.162 | +162206 206.162 | +162207 207.162 | +162208 208.162 | +162209 209.162 | +162210 210.162 | +162211 211.162 | +162212 212.162 | +162213 213.162 | +162214 214.162 | +162215 215.162 | +162216 216.162 | +162217 217.162 | +162218 218.162 | +162219 219.162 | +162220 220.162 | +162221 221.162 | +162222 222.162 | +162223 223.162 | +162224 224.162 | +162225 225.162 | +162226 226.162 | +162227 227.162 | +162229 229.162 | +162230 230.162 | +162231 231.162 | +162232 232.162 | +162233 233.162 | +162255 255.162 | +163 slor 163.128 | +164 tcc 164.128 164.160 164.170 164.180 164.190 | +165 10u 33.1 33.2 33.3 165.128 165.160 165.180 165.190 | +166 10v 34.1 34.2 34.3 166.128 166.160 166.180 166.190 | +167 2t 11.1 11.2 11.3 167.128 167.160 167.180 167.190 | +168 2d 44.1 44.2 44.3 168.128 168.160 168.180 168.190 | +169 ssrd 169.128 169.190 | +17 alnip 17.128 | +170 stl2 170.128 170.160 | +170149 tsw 149.170 | +170171 swl2 171.170 | +170179 ttr 179.170 | +171 swl2 171.128 | +171001 strfa 1.171 | +171002 vpota 2.171 | +171003 pta 3.171 | +171004 epta 4.171 | +171005 septa 5.171 | +171006 6.171 100ua | +171007 7.171 100va | +171011 udwa 11.171 | +171012 vdwa 12.171 | +171013 urwa 13.171 | +171014 vrwa 14.171 | +171021 uctpa 21.171 | +171022 uclna 22.171 | +171023 ucdva 23.171 | +171026 cla 26.171 | +171027 cvla 27.171 | +171028 cvha 28.171 | +171029 tvla 29.171 | +171030 tvha 30.171 | +171031 sica 31.171 | +171032 asna 32.171 | +171033 rsna 33.171 | +171034 ssta 34.171 | +171035 istal1 35.171 | +171036 istal2 36.171 | +171037 istal3 37.171 | +171038 istal4 38.171 | +171039 swval1 39.171 | +171040 swval2 40.171 | +171041 swval3 41.171 | +171042 swval4 42.171 | +171043 slta 43.171 | +171044 esa 44.171 | +171045 smlta 45.171 | +171046 sdura 46.171 | +171047 dsrpa 47.171 | +171048 magssa 48.171 | +171049 10fga 49.171 | +171050 lspfa 50.171 | +171051 mx2t24a 51.171 | +171052 mn2t24a 52.171 | +171053 monta 53.171 | +171054 pa 54.171 | +171055 mn2t24a 55.171 | +171056 mn2d24a 56.171 | +171057 uvba 57.171 | +171058 para 58.171 | +171059 capea 59.171 | +171060 pva 60.171 | +171061 tpoa 61.171 | +171062 obcta 62.171 | +171063 stsktda 63.171 | +171064 ftsktda 64.171 | +171065 sktda 65.171 | +171078 tclwa 78.171 | +171079 tciwa 79.171 | +171121 mx2t6a 121.171 | +171122 mn2t6a 122.171 | +171125 vitea 125.171 | +171126 126.171 | +171127 ata 127.171 | +171128 bva 128.171 | +171129 za 129.171 | +171130 ta 130.171 | +171131 ua 131.171 | +171132 va 132.171 | +171133 qa 133.171 | +171134 spa 134.171 | +171135 wa 135.171 | +171136 tcwa 136.171 | +171137 tcwva 137.171 | +171138 voa 138.171 | +171139 stal1 139.171 | +171140 swal1 140.171 | +171141 sda 141.171 | +171142 lspa 142.171 | +171143 cpa 143.171 | +171144 sfa 144.171 | +171145 blda 145.171 | +171146 sshfa 146.171 | +171147 slhfa 147.171 | +171148 chnka 148.171 | +171149 snra 149.171 | +171150 tnra 150.171 | +171151 msla 151.171 | +171152 lspa 152.171 | +171153 swhra 153.171 | +171154 lwhra 154.171 | +171155 da 155.171 | +171156 gha 156.171 | +171157 ra 157.171 | +171158 tspa 158.171 | +171159 blha 159.171 | +171160 sdora 160.171 | +171161 isora 161.171 | +171162 anora 162.171 | +171163 slora 163.171 | +171164 tcca 164.171 | +171165 10ua 165.171 | +171166 10va 166.171 | +171167 2ta 167.171 | +171168 2da 168.171 | +171169 ssrda 169.171 | +171170 slal2 170.171 | +171171 swal2 171.171 | +171173 sra 173.171 | +171174 ala 174.171 | +171175 strda 175.171 | +171176 ssra 176.171 | +171177 stra 177.171 | +171178 tsra 178.171 | +171179 ttra 179.171 | +171180 eqssa 180.171 | +171181 nsssa 181.171 | +171182 ea 182.171 | +171183 stal3 183.171 | +171184 swal3 184.171 | +171185 ccca 185.171 | +171186 lcca 186.171 | +171187 mcca 187.171 | +171188 hcca 188.171 | +171189 sunda 189.171 | +171190 ewova 190.171 | +171191 nsova 191.171 | +171192 nwova 192.171 | +171193 neova 193.171 | +171194 btmpa 194.171 | +171195 lgwsa 195.171 | +171196 mgwsa 196.171 | +171197 gwda 197.171 | +171198 srca 198.171 | +171199 vfa 199.171 | +171200 vsoa 200.171 | +171201 mx2ta 201.171 | +171202 mn2ta 202.171 | +171203 o3a 203.171 | +171204 pawa 204.171 | +171205 roa 205.171 | +171206 tco3a 206.171 | +171207 10ua 207.171 | +171208 tsrca 208.171 | +171209 ttrca 209.171 | +171210 ssrca 210.171 | +171211 strca 211.171 | +171212 sia 212.171 | +171214 dhra 214.171 | +171215 dhvda 215.171 | +171216 dhcca 216.171 | +171217 dhlca 217.171 | +171218 vdzwa 218.171 | +171219 vdmwa 219.171 | +171220 ewgda 220.171 | +171221 nsgda 221.171 | +171222 ctzwa 222.171 | +171223 ctmwa 223.171 | +171224 vdha 224.171 | +171225 htcca 225.171 | +171226 htlca 226.171 | +171227 crnha 227.171 | +171228 tpa 228.171 | +171229 iewsa 229.171 | +171230 inssa 230.171 | +171231 ishfa 231.171 | +171232 iea 232.171 | +171233 asqa 233.171 | +171234 lsrha 234.171 | +171235 skta 235.171 | +171236 stal4 236.171 | +171237 swal4 237.171 | +171238 tsna 238.171 | +171239 csfa 239.171 | +171240 lsfa 240.171 | +171241 acfa 241.171 | +171242 alwa 242.171 | +171243 fala 243.171 | +171244 fsra 244.171 | +171245 flsra 245.171 | +171246 clwca 246.171 | +171247 ciwca 247.171 | +171248 cca 248.171 | +171249 aiwa 249.171 | +171250 iaa 250.171 | +171251 attea 251.171 | +171252 athea 252.171 | +171253 atzea 253.171 | +171254 atmwa 254.171 | +171255 255.171 | +172 lsm 81.1 81.2 81.3 172.128 172.160 172.171 172.174 172.175 172.180 172.190 | +172044 esrate 44.172 | +172045 45.172 | +172048 48.172 | +172050 50.172 | +172142 142.172 | +172143 cprate 143.172 | +172144 144.172 | +172145 bldrate 145.172 | +172146 146.172 | +172147 147.172 | +172149 149.172 | +172153 153.172 | +172154 154.172 | +172169 169.172 | +172175 175.172 | +172176 176.172 | +172177 177.172 | +172178 178.172 | +172179 179.172 | +172180 180.172 | +172181 181.172 | +172182 erate 182.172 | +172189 189.172 | +172195 195.172 | +172196 196.172 | +172197 gwdrate 197.172 | +172205 205.172 | +172208 208.172 | +172209 209.172 | +172210 210.172 | +172211 211.172 | +172212 212.172 | +172228 tprate 228.172 | +172239 239.172 | +172240 240.172 | +172255 255.172 | +173 sr 83.1 83.2 83.3 173.128 173.160 | +173044 44.173 | +173045 45.173 | +173048 48.173 | +173050 50.173 | +173142 142.173 | +173143 143.173 | +173144 sfara 144.173 | +173145 145.173 | +173146 146.173 | +173147 147.173 | +173149 149.173 | +173153 153.173 | +173154 154.173 | +173169 169.173 | +173175 175.173 | +173176 176.173 | +173177 177.173 | +173178 178.173 | +173179 179.173 | +173180 180.173 | +173181 181.173 | +173182 182.173 | +173189 sundara 189.173 | +173195 195.173 | +173196 196.173 | +173197 197.173 | +173205 205.173 | +173208 208.173 | +173209 209.173 | +173210 210.173 | +173211 211.173 | +173212 212.173 | +173228 tpara 228.173 | +173239 239.173 | +173240 240.173 | +173255 255.173 | +174 al 84.1 84.2 84.3 174.128 174.160 174.190 | +174006 6.174 | +174008 sro 8.174 | +174009 ssro 9.174 | +174031 31.174 | +174034 34.174 | +174039 39.174 | +174040 40.174 | +174041 41.174 | +174042 42.174 | +174049 49.174 | +174055 55.174 | +174083 83.174 | +174085 85.174 | +174086 86.174 | +174087 87.174 | +174088 88.174 | +174089 89.174 | +174090 90.174 | +174094 94.174 | +174095 95.174 | +174098 98.174 | +174099 99.174 | +174110 110.174 | +174111 111.174 | +174139 139.174 | +174164 164.174 | +174167 167.174 | +174168 168.174 | +174170 170.174 | +174175 175.174 | +174183 183.174 | +174201 201.174 | +174202 202.174 | +174236 236.174 | +174255 255.174 | +175 strd 175.128 175.190 | +175006 6.175 | +175031 31.175 | +175034 34.175 | +175039 39.175 | +175040 40.175 | +175041 41.175 | +175042 42.175 | +175049 49.175 | +175055 55.175 | +175083 83.175 | +175085 85.175 | +175086 86.175 | +175087 87.175 | +175088 88.175 | +175089 89.175 | +175090 90.175 | +175110 110.175 | +175111 111.175 | +175139 139.175 | +175164 164.175 | +175167 167.175 | +175168 168.175 | +175170 170.175 | +175175 175.175 | +175183 183.175 | +175201 201.175 | +175202 202.175 | +175236 236.175 | +175255 255.175 | +176 ssr 176.128 176.160 176.170 176.190 | +177 str 177.128 177.160 177.170 177.190 | +178 tsr 178.128 178.160 178.190 | +179 ttr 179.128 179.160 179.190 | +18 alnid 18.128 | +180 ewss 180.128 180.170 180.180 | +180149 tsw 149.180 | +180176 ssr 176.180 | +180177 str 177.180 | +180178 tsr 178.180 | +180179 ttr 179.180 | +181 nsss 181.128 181.170 181.180 | +182 e 57.1 57.2 57.3 182.128 182.170 182.180 182.190 | +183 stl3 183.128 183.160 | +184 swl3 184.128 184.170 | +185 ccc 72.1 72.2 72.3 185.128 185.160 185.170 | +186 lcc 73.1 73.2 73.3 186.128 186.160 | +187 mcc 74.1 74.2 74.3 187.128 187.160 | +188 hcc 75.1 75.2 75.3 188.128 188.160 | +189 sund 189.128 | +19 uvcs 19.128 | +190 ewov 190.128 190.160 | +190141 sdsien 141.190 | +190170 cap 170.190 | +190171 wiltsien 171.190 | +190173 sr 173.190 | +190229 tsm 229.190 | +191 nsov 191.128 191.160 | +192 nwov 192.128 192.160 | +193 neov 193.128 193.160 | +194 btmp 118.1 118.2 118.3 194.128 | +195 lgws 195.128 195.160 | +196 mgws 196.128 196.160 | +197 gwd 197.128 197.160 | +198 src 198.128 | +199 veg 87.1 87.2 87.3 199.128 | +2 vp 2.128 36.1 36.2 36.3 | +20 parcs 20.128 | +200 vso 200.128 200.160 | +200001 strfdiff 1.200 | +200002 vpotdiff 2.200 | +200003 ptdiff 3.200 | +200004 eqptdiff 4.200 | +200005 septdiff 5.200 | +200011 udvwdiff 11.200 | +200012 vdvwdiff 12.200 | +200013 urtwdiff 13.200 | +200014 vrtwdiff 14.200 | +200021 uctpdiff 21.200 | +200022 uclndiff 22.200 | +200023 ucdvdiff 23.200 | +200024 24.200 | +200025 25.200 | +200026 cldiff 26.200 | +200027 cvldiff 27.200 | +200028 cvhdiff 28.200 | +200029 tvldiff 29.200 | +200030 tvhdiff 30.200 | +200031 sicdiff 31.200 | +200032 asndiff 32.200 | +200033 rsndiff 33.200 | +200034 sstdiff 34.200 | +200035 istl1diff 35.200 | +200036 istl2diff 36.200 | +200037 istl3diff 37.200 | +200038 istl4diff 38.200 | +200039 swvl1diff 39.200 | +200040 swvl2diff 40.200 | +200041 swvl3diff 41.200 | +200042 swvl4diff 42.200 | +200043 sltdiff 43.200 | +200044 esdiff 44.200 | +200045 smltdiff 45.200 | +200046 sdurdiff 46.200 | +200047 dsrpdiff 47.200 | +200048 magssdiff 48.200 | +200049 10fgdiff 49.200 | +200050 lspfdiff 50.200 | +200051 mx2t24diff 51.200 | +200052 mn2t24diff 52.200 | +200053 montdiff 53.200 | +200054 presdiff 54.200 | +200055 mean2t24diff 55.200 | +200056 mn2d24diff 56.200 | +200057 uvbdiff 57.200 | +200058 pardiff 58.200 | +200059 capediff 59.200 | +200060 pvdiff 60.200 | +200061 tpodiff 61.200 | +200062 obctdiff 62.200 | +200063 63.200 | +200064 64.200 | +200065 65.200 | +200066 66.200 | +200067 67.200 | +200068 68.200 | +200069 69.200 | +200070 70.200 | +200071 71.200 | +200078 78.200 | +200079 79.200 | +200080 80.200 | +200081 81.200 | +200082 82.200 | +200083 83.200 | +200084 84.200 | +200085 85.200 | +200086 86.200 | +200087 87.200 | +200088 88.200 | +200089 89.200 | +200090 90.200 | +200091 91.200 | +200092 92.200 | +200093 93.200 | +200094 94.200 | +200095 95.200 | +200096 96.200 | +200097 97.200 | +200098 98.200 | +200099 99.200 | +200100 100.200 | +200101 101.200 | +200102 102.200 | +200103 103.200 | +200104 104.200 | +200105 105.200 | +200106 106.200 | +200107 107.200 | +200108 108.200 | +200109 109.200 | +200110 110.200 | +200111 111.200 | +200112 112.200 | +200113 113.200 | +200114 114.200 | +200115 115.200 | +200116 116.200 | +200117 117.200 | +200118 118.200 | +200119 119.200 | +200120 120.200 | +200121 mx2t6diff 121.200 | +200122 mn2t6diff 122.200 | +200123 10fg6diff 123.200 | +200125 125.200 | +200126 126.200 | +200127 atdiff 127.200 | +200128 bvdiff 128.200 | +200129 zdiff 129.200 | +200130 tdiff 130.200 | +200131 udiff 131.200 | +200132 vdiff 132.200 | +200133 qdiff 133.200 | +200134 spdiff 134.200 | +200135 wdiff 135.200 | +200136 tcwdiff 136.200 | +200137 tcwvdiff 137.200 | +200138 vodiff 138.200 | +200139 stl1diff 139.200 | +200140 swl1diff 140.200 | +200141 sddiff 141.200 | +200142 lspdiff 142.200 | +200143 cpdiff 143.200 | +200144 sfdiff 144.200 | +200145 blddiff 145.200 | +200146 sshfdiff 146.200 | +200147 slhfdiff 147.200 | +200148 chnkdiff 148.200 | +200149 snrdiff 149.200 | +200150 tnrdiff 150.200 | +200151 msldiff 151.200 | +200152 lnspdiff 152.200 | +200153 swhrdiff 153.200 | +200154 lwhrdiff 154.200 | +200155 ddiff 155.200 | +200156 ghdiff 156.200 | +200157 rdiff 157.200 | +200158 tspdiff 158.200 | +200159 blhdiff 159.200 | +200160 sdordiff 160.200 | +200161 isordiff 161.200 | +200162 anordiff 162.200 | +200163 slordiff 163.200 | +200164 tccdiff 164.200 | +200165 10udiff 165.200 | +200166 10vdiff 166.200 | +200167 2tdiff 167.200 | +200168 2ddiff 168.200 | +200169 ssrddiff 169.200 | +200170 stl2diff 170.200 | +200171 swl2diff 171.200 | +200172 lsmdiff 172.200 | +200173 srdiff 173.200 | +200174 aldiff 174.200 | +200175 strddiff 175.200 | +200176 ssrdiff 176.200 | +200177 strdiff 177.200 | +200178 tsrdiff 178.200 | +200179 ttrdiff 179.200 | +200180 ewssdiff 180.200 | +200181 nsssdiff 181.200 | +200182 ediff 182.200 | +200183 stl3diff 183.200 | +200184 swl3diff 184.200 | +200185 cccdiff 185.200 | +200186 lccdiff 186.200 | +200187 mccdiff 187.200 | +200188 hccdiff 188.200 | +200189 sunddiff 189.200 | +200190 ewovdiff 190.200 | +200191 nsovdiff 191.200 | +200192 nwovdiff 192.200 | +200193 neovdiff 193.200 | +200194 btmpdiff 194.200 | +200195 lgwsdiff 195.200 | +200196 mgwsdiff 196.200 | +200197 gwddiff 197.200 | +200198 srcdiff 198.200 | +200199 vegdiff 199.200 | +200200 vsodiff 200.200 | +200201 mx2tdiff 201.200 | +200202 mn2tdiff 202.200 | +200203 o3diff 203.200 | +200204 pawdiff 204.200 | +200205 rodiff 205.200 | +200206 tco3diff 206.200 | +200207 10sidiff 207.200 | +200208 tsrcdiff 208.200 | +200209 ttrcdiff 209.200 | +200210 ssrcdiff 210.200 | +200211 strcdiff 211.200 | +200212 tisrdiff 212.200 | +200214 dhrdiff 214.200 | +200215 dhvddiff 215.200 | +200216 dhccdiff 216.200 | +200217 dhlcdiff 217.200 | +200218 vdzwdiff 218.200 | +200219 vdmwdiff 219.200 | +200220 ewgddiff 220.200 | +200221 nsgddiff 221.200 | +200222 ctzwdiff 222.200 | +200223 ctmwdiff 223.200 | +200224 vdhdiff 224.200 | +200225 htccdiff 225.200 | +200226 htlcdiff 226.200 | +200227 crnhdiff 227.200 | +200228 tpdiff 228.200 | +200229 iewsdiff 229.200 | +200230 inssdiff 230.200 | +200231 ishfdiff 231.200 | +200232 iediff 232.200 | +200233 asqdiff 233.200 | +200234 lsrhdiff 234.200 | +200235 sktdiff 235.200 | +200236 stl4diff 236.200 | +200237 swl4diff 237.200 | +200238 tsndiff 238.200 | +200239 csfdiff 239.200 | +200240 lsfdiff 240.200 | +200241 acfdiff 241.200 | +200242 alwdiff 242.200 | +200243 faldiff 243.200 | +200244 fsrdiff 244.200 | +200245 flsrdiff 245.200 | +200246 clwcdiff 246.200 | +200247 ciwcdiff 247.200 | +200248 ccdiff 248.200 | +200249 aiwdiff 249.200 | +200250 icediff 250.200 | +200251 attediff 251.200 | +200252 athediff 252.200 | +200253 atzediff 253.200 | +200254 atmwdiff 254.200 | +200255 255.200 | +201 mx2t 201.128 201.170 201.190 | +201001 1.201 | +201002 2.201 | +201003 3.201 | +201004 4.201 | +201005 apab_s 5.201 | +201006 6.201 | +201007 7.201 | +201008 8.201 | +201009 9.201 | +201010 10.201 | +201011 11.201 | +201012 12.201 | +201013 sohr_rad 13.201 | +201014 thhr_rad 14.201 | +201015 15.201 | +201016 16.201 | +201017 17.201 | +201029 clc 29.201 | +201030 30.201 | +201031 qc 31.201 | +201032 32.201 | +201033 qi 33.201 | +201034 34.201 | +201035 35.201 | +201036 36.201 | +201037 37.201 | +201038 38.201 | +201041 twater 41.201 | +201042 42.201 | +201050 ch_cm_cl 50.201 | +201051 51.201 | +201052 52.201 | +201053 53.201 | +201054 54.201 | +201055 55.201 | +201056 56.201 | +201060 60.201 | +201061 61.201 | +201062 62.201 | +201063 63.201 | +201064 64.201 | +201065 65.201 | +201066 66.201 | +201067 67.201 | +201068 hbas_con 68.201 | +201069 htop_con 69.201 | +201070 70.201 | +201071 71.201 | +201072 bas_con 72.201 | +201073 top_con 73.201 | +201074 dt_con 74.201 | +201075 dqv_con 75.201 | +201076 76.201 | +201077 77.201 | +201078 du_con 78.201 | +201079 dv_con 79.201 | +201080 80.201 | +201081 81.201 | +201082 htop_dc 82.201 | +201083 83.201 | +201084 hzerocl 84.201 | +201085 snowlmt 85.201 | +201099 qrs_gsp 99.201 | +201100 prr_gsp 100.201 | +201101 prs_gsp 101.201 | +201102 rain_gsp 102.201 | +201111 prr_con 111.201 | +201112 prs_con 112.201 | +201113 rain_con 113.201 | +201139 pp 139.201 | +201150 150.201 | +201187 vmax_10m 187.201 | +201200 w_i 200.201 | +201203 t_snow 203.201 | +201215 t_ice 215.201 | +201241 cape_con 241.201 | +201255 255.201 | +202 mn2t 202.128 202.170 202.190 | +203 o3 203.128 | +204 paw 204.128 204.160 | +205 ro 90.1 90.2 90.3 205.128 205.180 | +206 tco3 10.1 10.2 10.3 206.128 | +207 10si 207.128 | +208 tsrc 208.128 | +209 ttrc 209.128 | +21 uctp 21.128 | +210 ssrc 210.128 | +210001 aermr01 1.210 | +210002 aermr02 2.210 | +210003 aermr03 3.210 | +210004 aermr04 4.210 | +210005 aermr05 5.210 | +210006 aermr06 6.210 | +210007 aermr07 7.210 | +210008 aermr08 8.210 | +210009 aermr09 9.210 | +210010 aermr10 10.210 | +210011 aermr11 11.210 | +210012 aermr12 12.210 | +210013 aermr13 13.210 | +210014 aermr14 14.210 | +210015 aermr15 15.210 | +210016 aergn01 16.210 | +210017 aergn02 17.210 | +210018 aergn03 18.210 | +210019 aergn04 19.210 | +210020 aergn05 20.210 | +210021 aergn06 21.210 | +210022 aergn07 22.210 | +210023 aergn08 23.210 | +210024 aergn09 24.210 | +210025 aergn10 25.210 | +210026 aergn11 26.210 | +210027 aergn12 27.210 | +210028 aerpr03 28.210 | +210029 aerwv01 29.210 | +210030 aerwv02 30.210 | +210031 aerls01 31.210 | +210032 aerls02 32.210 | +210033 aerls03 33.210 | +210034 aerls04 34.210 | +210035 aerls05 35.210 | +210036 aerls06 36.210 | +210037 aerls07 37.210 | +210038 aerls08 38.210 | +210039 aerls09 39.210 | +210040 aerls10 40.210 | +210041 aerls11 41.210 | +210042 aerls12 42.210 | +210043 emdms 43.210 | +210044 aerwv03 44.210 | +210045 aerwv04 45.210 | +210046 aerpr 46.210 | +210047 aersm 47.210 | +210048 aerlg 48.210 | +210049 aodpr 49.210 | +210050 aodsm 50.210 | +210051 aodlg 51.210 | +210052 aerdep 52.210 | +210053 aerlts 53.210 | +210054 aerscc 54.210 | +210055 55.210 | +210056 56.210 | +210057 ocnuc 57.210 | +210058 monot 58.210 | +210059 soapr 59.210 | +210061 co2 61.210 | +210062 ch4 62.210 | +210063 n2o 63.210 | +210064 tcco2 64.210 | +210065 tcch4 65.210 | +210066 tcn2o 66.210 | +210067 co2of 67.210 | +210068 co2nbf 68.210 | +210069 co2apf 69.210 | +210070 ch4f 70.210 | +210071 kch4 71.210 | +210072 pm1 72.210 | +210073 pm2p5 73.210 | +210074 pm10 74.210 | +210080 co2fire 80.210 | +210081 cofire 81.210 | +210082 ch4fire 82.210 | +210083 nmhcfire 83.210 | +210084 h2fire 84.210 | +210085 noxfire 85.210 | +210086 n2ofire 86.210 | +210087 pm2p5fire 87.210 | +210088 tpmfire 88.210 | +210089 tcfire 89.210 | +210090 ocfire 90.210 | +210091 bcfire 91.210 | +210092 cfire 92.210 | +210093 c4ffire 93.210 | +210094 vegfire 94.210 | +210095 ccfire 95.210 | +210096 flfire 96.210 | +210097 bffire 97.210 | +210098 oafire 98.210 | +210099 frpfire 99.210 | +210100 crfire 100.210 | +210101 maxfrpfire 101.210 | +210102 so2fire 102.210 | +210103 ch3ohfire 103.210 | +210104 c2h5ohfire 104.210 | +210105 c3h8fire 105.210 | +210106 c2h4fire 106.210 | +210107 c3h6fire 107.210 | +210108 c5h8fire 108.210 | +210109 terpenesfire 109.210 | +210110 toluenefire 110.210 | +210111 hialkenesfire 111.210 | +210112 hialkanesfire 112.210 | +210113 ch2ofire 113.210 | +210114 c2h4ofire 114.210 | +210115 c3h6ofire 115.210 | +210116 nh3fire 116.210 | +210117 c2h6sfire 117.210 | +210118 c2h6fire 118.210 | +210119 ale 119.210 | +210120 apt 120.210 | +210121 no2 121.210 | +210122 so2 122.210 | +210123 co 123.210 | +210124 hcho 124.210 | +210125 tcno2 125.210 | +210126 tcso2 126.210 | +210127 tcco 127.210 | +210128 tchcho 128.210 | +210129 nox 129.210 | +210130 tcnox 130.210 | +210131 grg1 131.210 | +210132 tcgrg1 132.210 | +210133 grg2 133.210 | +210134 tcgrg2 134.210 | +210135 grg3 135.210 | +210136 tcgrg3 136.210 | +210137 grg4 137.210 | +210138 tcgrg4 138.210 | +210139 grg5 139.210 | +210140 tcgrg5 140.210 | +210141 grg6 141.210 | +210142 tcgrg6 142.210 | +210143 grg7 143.210 | +210144 tcgrg7 144.210 | +210145 grg8 145.210 | +210146 tcgrg8 146.210 | +210147 grg9 147.210 | +210148 tcgrg9 148.210 | +210149 grg10 149.210 | +210150 tcgrg10 150.210 | +210151 sfnox 151.210 | +210152 sfno2 152.210 | +210153 sfso2 153.210 | +210154 sfco2 154.210 | +210155 sfhcho 155.210 | +210156 sfgo3 156.210 | +210157 sfgr1 157.210 | +210158 sfgr2 158.210 | +210159 sfgr3 159.210 | +210160 sfgr4 160.210 | +210161 sfgr5 161.210 | +210162 sfgr6 162.210 | +210163 sfgr7 163.210 | +210164 sfgr8 164.210 | +210165 sfgr9 165.210 | +210166 sfgr10 166.210 | +210181 ra 181.210 | +210182 sf6 182.210 | +210183 tcra 183.210 | +210184 tcsf6 184.210 | +210185 sf6apf 185.210 | +210186 aluvpi 186.210 | +210187 aluvpv 187.210 | +210188 aluvpg 188.210 | +210189 alnipi 189.210 | +210190 alnipv 190.210 | +210191 alnipg 191.210 | +210192 aluvdi 192.210 | +210193 aluvdv 193.210 | +210194 aluvdg 194.210 | +210195 alnidi 195.210 | +210196 alnidv 196.210 | +210197 alnidg 197.210 | +210203 go3 203.210 | +210206 gtco3 206.210 | +210207 aod550 207.210 | +210208 ssaod550 208.210 | +210209 duaod550 209.210 | +210210 omaod550 210.210 | +210211 bcaod550 211.210 | +210212 suaod550 212.210 | +210213 aod469 213.210 | +210214 aod670 214.210 | +210215 aod865 215.210 | +210216 aod1240 216.210 | +210217 aod340 217.210 | +210218 aod355 218.210 | +210219 aod380 219.210 | +210220 aod400 220.210 | +210221 aod440 221.210 | +210222 aod500 222.210 | +210223 aod532 223.210 | +210224 aod645 224.210 | +210225 aod800 225.210 | +210226 aod858 226.210 | +210227 aod1020 227.210 | +210228 aod1064 228.210 | +210229 aod1640 229.210 | +210230 aod2130 230.210 | +210231 c7h8fire 231.210 | +210232 c6h6fire 232.210 | +210233 c8h10fire 233.210 | +210234 c4h8fire 234.210 | +210235 c5h10fire 235.210 | +210236 c6h12fire 236.210 | +210237 c8h16fire 237.210 | +210238 c4h10fire 238.210 | +210239 c5h12fire 239.210 | +210240 c6h14fire 240.210 | +210241 c7h16fire 241.210 | +211 strc 211.128 | +211001 aermr01diff 1.211 | +211002 aermr02diff 2.211 | +211003 aermr03diff 3.211 | +211004 aermr04diff 4.211 | +211005 aermr05diff 5.211 | +211006 aermr06diff 6.211 | +211007 aermr07diff 7.211 | +211008 aermr08diff 8.211 | +211009 aermr09diff 9.211 | +211010 aermr10diff 10.211 | +211011 aermr11diff 11.211 | +211012 aermr12diff 12.211 | +211013 aermr13diff 13.211 | +211014 aermr14diff 14.211 | +211015 aermr15diff 15.211 | +211016 aergn01diff 16.211 | +211017 aergn02diff 17.211 | +211018 aergn03diff 18.211 | +211019 aergn04diff 19.211 | +211020 aergn05diff 20.211 | +211021 aergn06diff 21.211 | +211022 aergn07diff 22.211 | +211023 aergn08diff 23.211 | +211024 aergn09diff 24.211 | +211025 aergn10diff 25.211 | +211026 aergn11diff 26.211 | +211027 aergn12diff 27.211 | +211028 aerpr03diff 28.211 | +211029 aerwv01diff 29.211 | +211030 aerwv02diff 30.211 | +211031 aerls01diff 31.211 | +211032 aerls02diff 32.211 | +211033 aerls03diff 33.211 | +211034 aerls04diff 34.211 | +211035 aerls05diff 35.211 | +211036 aerls06diff 36.211 | +211037 aerls07diff 37.211 | +211038 aerls08diff 38.211 | +211039 aerls09diff 39.211 | +211040 aerls10diff 40.211 | +211041 aerls11diff 41.211 | +211042 aerls12diff 42.211 | +211043 emdmsdiff 43.211 | +211044 aerwv03diff 44.211 | +211045 aerwv04diff 45.211 | +211046 aerprdiff 46.211 | +211047 aersmdiff 47.211 | +211048 aerlgdiff 48.211 | +211049 aodprdiff 49.211 | +211050 aodsmdiff 50.211 | +211051 aodlgdiff 51.211 | +211052 aerdepdiff 52.211 | +211053 aerltsdiff 53.211 | +211054 aersccdiff 54.211 | +211055 55.211 | +211056 56.211 | +211061 co2diff 61.211 | +211062 ch4diff 62.211 | +211063 n2odiff 63.211 | +211064 tcco2diff 64.211 | +211065 tcch4diff 65.211 | +211066 tcn2odiff 66.211 | +211067 co2ofdiff 67.211 | +211068 co2nbfdiff 68.211 | +211069 co2apfdiff 69.211 | +211070 ch4fdiff 70.211 | +211071 kch4diff 71.211 | +211080 co2firediff 80.211 | +211081 cofirediff 81.211 | +211082 ch4firediff 82.211 | +211083 nmhcfirediff 83.211 | +211084 h2firediff 84.211 | +211085 noxfirediff 85.211 | +211086 n2ofirediff 86.211 | +211087 pm2p5firediff 87.211 | +211088 tpmfirediff 88.211 | +211089 tcfirediff 89.211 | +211090 ocfirediff 90.211 | +211091 bcfirediff 91.211 | +211092 cfirediff 92.211 | +211093 c4ffirediff 93.211 | +211094 vegfirediff 94.211 | +211095 ccfirediff 95.211 | +211096 flfirediff 96.211 | +211097 bffirediff 97.211 | +211098 oafirediff 98.211 | +211099 frpfirediff 99.211 | +211100 crfirediff 100.211 | +211101 maxfrpfirediff 101.211 | +211102 so2firediff 102.211 | +211103 ch3ohfirediff 103.211 | +211104 c2h5ohfirediff 104.211 | +211105 c3h8firediff 105.211 | +211106 c2h4firediff 106.211 | +211107 c3h6firediff 107.211 | +211108 c5h8firediff 108.211 | +211109 terpenesfirediff 109.211 | +211110 toluenefirediff 110.211 | +211111 hialkenesfirediff 111.211 | +211112 hialkanesfirediff 112.211 | +211113 ch2ofirediff 113.211 | +211114 c2h4ofirediff 114.211 | +211115 c3h6ofirediff 115.211 | +211116 nh3firediff 116.211 | +211117 c2h6sfirediff 117.211 | +211118 c2h6firediff 118.211 | +211119 alediff 119.211 | +211120 aptdiff 120.211 | +211121 no2diff 121.211 | +211122 so2diff 122.211 | +211123 codiff 123.211 | +211124 hchodiff 124.211 | +211125 tcno2diff 125.211 | +211126 tcso2diff 126.211 | +211127 tccodiff 127.211 | +211128 tchchodiff 128.211 | +211129 noxdiff 129.211 | +211130 tcnoxdiff 130.211 | +211131 grg1diff 131.211 | +211132 tcgrg1diff 132.211 | +211133 grg2diff 133.211 | +211134 tcgrg2diff 134.211 | +211135 grg3diff 135.211 | +211136 tcgrg3diff 136.211 | +211137 grg4diff 137.211 | +211138 tcgrg4diff 138.211 | +211139 grg5diff 139.211 | +211140 tcgrg5diff 140.211 | +211141 grg6diff 141.211 | +211142 tcgrg6diff 142.211 | +211143 grg7diff 143.211 | +211144 tcgrg7diff 144.211 | +211145 grg8diff 145.211 | +211146 tcgrg8diff 146.211 | +211147 grg9diff 147.211 | +211148 tcgrg9diff 148.211 | +211149 grg10diff 149.211 | +211150 tcgrg10diff 150.211 | +211151 sfnoxdiff 151.211 | +211152 sfno2diff 152.211 | +211153 sfso2diff 153.211 | +211154 sfco2diff 154.211 | +211155 sfhchodiff 155.211 | +211156 sfgo3diff 156.211 | +211157 sfgr1diff 157.211 | +211158 sfgr2diff 158.211 | +211159 sfgr3diff 159.211 | +211160 sfgr4diff 160.211 | +211161 sfgr5diff 161.211 | +211162 sfgr6diff 162.211 | +211163 sfgr7diff 163.211 | +211164 sfgr8diff 164.211 | +211165 sfgr9diff 165.211 | +211166 sfgr10diff 166.211 | +211181 radiff 181.211 | +211182 sf6diff 182.211 | +211183 tcradiff 183.211 | +211184 tcsf6diff 184.211 | +211185 sf6apfdiff 185.211 | +211203 go3diff 203.211 | +211206 gtco3diff 206.211 | +211207 aod550diff 207.211 | +211208 ssaod550diff 208.211 | +211209 duaod550diff 209.211 | +211210 omaod550diff 210.211 | +211211 bcaod550diff 211.211 | +211212 suaod550diff 212.211 | +211213 aod469diff 213.211 | +211214 aod670diff 214.211 | +211215 aod865diff 215.211 | +211216 aod1240diff 216.211 | +212 tisr 212.128 | +212001 1.212 | +212002 2.212 | +212003 3.212 | +212004 4.212 | +212005 5.212 | +212006 6.212 | +212007 7.212 | +212008 8.212 | +212009 9.212 | +212010 10.212 | +212011 11.212 | +212012 12.212 | +212013 13.212 | +212014 14.212 | +212015 15.212 | +212016 16.212 | +212017 17.212 | +212018 18.212 | +212019 19.212 | +212020 20.212 | +212021 21.212 | +212022 22.212 | +212023 23.212 | +212024 24.212 | +212025 25.212 | +212026 26.212 | +212027 27.212 | +212028 28.212 | +212029 29.212 | +212030 30.212 | +212031 31.212 | +212032 32.212 | +212033 33.212 | +212034 34.212 | +212035 35.212 | +212036 36.212 | +212037 37.212 | +212038 38.212 | +212039 39.212 | +212040 40.212 | +212041 41.212 | +212042 42.212 | +212043 43.212 | +212044 44.212 | +212045 45.212 | +212046 46.212 | +212047 47.212 | +212048 48.212 | +212049 49.212 | +212050 50.212 | +212051 51.212 | +212052 52.212 | +212053 53.212 | +212054 54.212 | +212055 55.212 | +212056 56.212 | +212057 57.212 | +212058 58.212 | +212059 59.212 | +212060 60.212 | +212061 61.212 | +212062 62.212 | +212063 63.212 | +212064 64.212 | +212065 65.212 | +212066 66.212 | +212067 67.212 | +212068 68.212 | +212069 69.212 | +212070 70.212 | +212071 71.212 | +212072 72.212 | +212073 73.212 | +212074 74.212 | +212075 75.212 | +212076 76.212 | +212077 77.212 | +212078 78.212 | +212079 79.212 | +212080 80.212 | +212081 81.212 | +212082 82.212 | +212083 83.212 | +212084 84.212 | +212085 85.212 | +212086 86.212 | +212087 87.212 | +212088 88.212 | +212089 89.212 | +212090 90.212 | +212091 91.212 | +212092 92.212 | +212093 93.212 | +212094 94.212 | +212095 95.212 | +212096 96.212 | +212097 97.212 | +212098 98.212 | +212099 99.212 | +212100 100.212 | +212101 101.212 | +212102 102.212 | +212103 103.212 | +212104 104.212 | +212105 105.212 | +212106 106.212 | +212107 107.212 | +212108 108.212 | +212109 109.212 | +212110 110.212 | +212111 111.212 | +212112 112.212 | +212113 113.212 | +212114 114.212 | +212115 115.212 | +212116 116.212 | +212117 117.212 | +212118 118.212 | +212119 119.212 | +212120 120.212 | +212121 121.212 | +212122 122.212 | +212123 123.212 | +212124 124.212 | +212125 125.212 | +212126 126.212 | +212127 127.212 | +212128 128.212 | +212129 129.212 | +212130 130.212 | +212131 131.212 | +212132 132.212 | +212133 133.212 | +212134 134.212 | +212135 135.212 | +212136 136.212 | +212137 137.212 | +212138 138.212 | +212139 139.212 | +212140 140.212 | +212141 141.212 | +212142 142.212 | +212143 143.212 | +212144 144.212 | +212145 145.212 | +212146 146.212 | +212147 147.212 | +212148 148.212 | +212149 149.212 | +212150 150.212 | +212151 151.212 | +212152 152.212 | +212153 153.212 | +212154 154.212 | +212155 155.212 | +212156 156.212 | +212157 157.212 | +212158 158.212 | +212159 159.212 | +212160 160.212 | +212161 161.212 | +212162 162.212 | +212163 163.212 | +212164 164.212 | +212165 165.212 | +212166 166.212 | +212167 167.212 | +212168 168.212 | +212169 169.212 | +212170 170.212 | +212171 171.212 | +212172 172.212 | +212173 173.212 | +212174 174.212 | +212175 175.212 | +212176 176.212 | +212177 177.212 | +212178 178.212 | +212179 179.212 | +212180 180.212 | +212181 181.212 | +212182 182.212 | +212183 183.212 | +212184 184.212 | +212185 185.212 | +212186 186.212 | +212187 187.212 | +212188 188.212 | +212189 189.212 | +212190 190.212 | +212191 191.212 | +212192 192.212 | +212193 193.212 | +212194 194.212 | +212195 195.212 | +212196 196.212 | +212197 197.212 | +212198 198.212 | +212199 199.212 | +212200 200.212 | +212201 201.212 | +212202 202.212 | +212203 203.212 | +212204 204.212 | +212205 205.212 | +212206 206.212 | +212207 207.212 | +212208 208.212 | +212209 209.212 | +212210 210.212 | +212211 211.212 | +212212 212.212 | +212213 213.212 | +212214 214.212 | +212215 215.212 | +212216 216.212 | +212217 217.212 | +212218 218.212 | +212219 219.212 | +212220 220.212 | +212221 221.212 | +212222 222.212 | +212223 223.212 | +212224 224.212 | +212225 225.212 | +212226 226.212 | +212227 227.212 | +212228 228.212 | +212229 229.212 | +212230 230.212 | +212231 231.212 | +212232 232.212 | +212233 233.212 | +212234 234.212 | +212235 235.212 | +212236 236.212 | +212237 237.212 | +212238 238.212 | +212239 239.212 | +212240 240.212 | +212241 241.212 | +212242 242.212 | +212243 243.212 | +212244 244.212 | +212245 245.212 | +212246 246.212 | +212247 247.212 | +212248 248.212 | +212249 249.212 | +212250 250.212 | +212251 251.212 | +212252 252.212 | +212253 253.212 | +212254 254.212 | +212255 255.212 | +213 vimd 213.128 | +213001 sppt1 1.213 | +213002 sppt2 2.213 | +213003 sppt3 3.213 | +213004 sppt4 4.213 | +213005 sppt5 5.213 | +214 dhr 214.128 | +214001 uvcossza 1.214 | +214002 uvbed 2.214 | +214003 uvbedcs 3.214 | +214004 uvsflxt280285 4.214 | +214005 uvsflxt285290 5.214 | +214006 uvsflxt290295 6.214 | +214007 uvsflxt295300 7.214 | +214008 uvsflxt300305 8.214 | +214009 uvsflxt305310 9.214 | +214010 uvsflxt310315 10.214 | +214011 uvsflxt315320 11.214 | +214012 uvsflxt320325 12.214 | +214013 uvsflxt325330 13.214 | +214014 uvsflxt330335 14.214 | +214015 uvsflxt335340 15.214 | +214016 uvsflxt340345 16.214 | +214017 uvsflxt345350 17.214 | +214018 uvsflxt350355 18.214 | +214019 uvsflxt355360 19.214 | +214020 uvsflxt360365 20.214 | +214021 uvsflxt365370 21.214 | +214022 uvsflxt370375 22.214 | +214023 uvsflxt375380 23.214 | +214024 uvsflxt380385 24.214 | +214025 uvsflxt385390 25.214 | +214026 uvsflxt390395 26.214 | +214027 uvsflxt395400 27.214 | +214028 uvsflxcs280285 28.214 | +214029 uvsflxcs285290 29.214 | +214030 uvsflxcs290295 30.214 | +214031 uvsflxcs295300 31.214 | +214032 uvsflxcs300305 32.214 | +214033 uvsflxcs305310 33.214 | +214034 uvsflxcs310315 34.214 | +214035 uvsflxcs315320 35.214 | +214036 uvsflxcs320325 36.214 | +214037 uvsflxcs325330 37.214 | +214038 uvsflxcs330335 38.214 | +214039 uvsflxcs335340 39.214 | +214040 uvsflxcs340345 40.214 | +214041 uvsflxcs345350 41.214 | +214042 uvsflxcs350355 42.214 | +214043 uvsflxcs355360 43.214 | +214044 uvsflxcs360365 44.214 | +214045 uvsflxcs365370 45.214 | +214046 uvsflxcs370375 46.214 | +214047 uvsflxcs375380 47.214 | +214048 uvsflxcs380385 48.214 | +214049 uvsflxcs385390 49.214 | +214050 uvsflxcs390395 50.214 | +214051 uvsflxcs395400 51.214 | +214052 aot340 52.214 | +215 dhvd 215.128 | +215001 aersrcsss 1.215 | +215002 aersrcssm 2.215 | +215003 aersrcssl 3.215 | +215004 aerddpsss 4.215 | +215005 aerddpssm 5.215 | +215006 aerddpssl 6.215 | +215007 aersdmsss 7.215 | +215008 aersdmssm 8.215 | +215009 aersdmssl 9.215 | +215010 aerwdlssss 10.215 | +215011 aerwdlsssm 11.215 | +215012 aerwdlsssl 12.215 | +215013 aerwdccsss 13.215 | +215014 aerwdccssm 14.215 | +215015 aerwdccssl 15.215 | +215016 aerngtsss 16.215 | +215017 aerngtssm 17.215 | +215018 aerngtssl 18.215 | +215019 aermsssss 19.215 | +215020 aermssssm 20.215 | +215021 aermssssl 21.215 | +215022 aerodsss 22.215 | +215023 aerodssm 23.215 | +215024 aerodssl 24.215 | +215025 aersrcdus 25.215 | +215026 aersrcdum 26.215 | +215027 aersrcdul 27.215 | +215028 aerddpdus 28.215 | +215029 aerddpdum 29.215 | +215030 aerddpdul 30.215 | +215031 aersdmdus 31.215 | +215032 aersdmdum 32.215 | +215033 aersdmdul 33.215 | +215034 aerwdlsdus 34.215 | +215035 aerwdlsdum 35.215 | +215036 aerwdlsdul 36.215 | +215037 aerwdccdus 37.215 | +215038 aerwdccdum 38.215 | +215039 aerwdccdul 39.215 | +215040 aerngtdus 40.215 | +215041 aerngtdum 41.215 | +215042 aerngtdul 42.215 | +215043 aermssdus 43.215 | +215044 aermssdum 44.215 | +215045 aermssdul 45.215 | +215046 aeroddus 46.215 | +215047 aeroddum 47.215 | +215048 aeroddul 48.215 | +215049 aersrcomhphob 49.215 | +215050 aersrcomhphil 50.215 | +215051 aerddpomhphob 51.215 | +215052 aerddpomhphil 52.215 | +215053 aersdmomhphob 53.215 | +215054 aersdmomhphil 54.215 | +215055 aerwdlsomhphob 55.215 | +215056 aerwdlsomhphil 56.215 | +215057 aerwdccomhphob 57.215 | +215058 aerwdccomhphil 58.215 | +215059 aerngtomhphob 59.215 | +215060 aerngtomhphil 60.215 | +215061 aermssomhphob 61.215 | +215062 aermssomhphil 62.215 | +215063 aerodomhphob 63.215 | +215064 aerodomhphil 64.215 | +215065 aersrcbchphob 65.215 | +215066 aersrcbchphil 66.215 | +215067 aerddpbchphob 67.215 | +215068 aerddpbchphil 68.215 | +215069 aersdmbchphob 69.215 | +215070 aersdmbchphil 70.215 | +215071 aerwdlsbchphob 71.215 | +215072 aerwdlsbchphil 72.215 | +215073 aerwdccbchphob 73.215 | +215074 aerwdccbchphil 74.215 | +215075 aerngtbchphob 75.215 | +215076 aerngtbchphil 76.215 | +215077 aermssbchphob 77.215 | +215078 aermssbchphil 78.215 | +215079 aerodbchphob 79.215 | +215080 aerodbchphil 80.215 | +215081 aersrcsu 81.215 | +215082 aerddpsu 82.215 | +215083 aersdmsu 83.215 | +215084 aerwdlssu 84.215 | +215085 aerwdccsu 85.215 | +215086 aerngtsu 86.215 | +215087 aermsssu 87.215 | +215088 aerodsu 88.215 | +215089 accaod550 89.215 | +215090 aluvpsn 90.215 | +215091 aerdep10si 91.215 | +215092 aerdep10fg 92.215 | +215093 paod532 93.215 | +215094 pnaod532 94.215 | +215095 paaod532 95.215 | +215096 aodabs340 96.215 | +215097 aodabs355 97.215 | +215098 aodabs380 98.215 | +215099 aodabs400 99.215 | +215100 aodabs440 100.215 | +215101 aodabs469 101.215 | +215102 aodabs500 102.215 | +215103 aodabs532 103.215 | +215104 aodabs550 104.215 | +215105 aodabs645 105.215 | +215106 aodabs670 106.215 | +215107 aodabs800 107.215 | +215108 aodabs858 108.215 | +215109 aodabs865 109.215 | +215110 aodabs1020 110.215 | +215111 aodabs1064 111.215 | +215112 aodabs1240 112.215 | +215113 aodabs1640 113.215 | +215114 aodfm340 114.215 | +215115 aodfm355 115.215 | +215116 aodfm380 116.215 | +215117 aodfm400 117.215 | +215118 aodfm440 118.215 | +215119 aodfm469 119.215 | +215120 aodfm500 120.215 | +215121 aodfm532 121.215 | +215122 aodfm550 122.215 | +215123 aodfm645 123.215 | +215124 aodfm670 124.215 | +215125 aodfm800 125.215 | +215126 aodfm858 126.215 | +215127 aodfm865 127.215 | +215128 aodfm1020 128.215 | +215129 aodfm1064 129.215 | +215130 aodfm1240 130.215 | +215131 aodfm1640 131.215 | +215132 ssa340 132.215 | +215133 ssa355 133.215 | +215134 ssa380 134.215 | +215135 ssa400 135.215 | +215136 ssa440 136.215 | +215137 ssa469 137.215 | +215138 ssa500 138.215 | +215139 ssa532 139.215 | +215140 ssa550 140.215 | +215141 ssa645 141.215 | +215142 ssa670 142.215 | +215143 ssa800 143.215 | +215144 ssa858 144.215 | +215145 ssa865 145.215 | +215146 ssa1020 146.215 | +215147 ssa1064 147.215 | +215148 ssa1240 148.215 | +215149 ssa1640 149.215 | +215150 assimetry340 150.215 | +215151 assimetry355 151.215 | +215152 assimetry380 152.215 | +215153 assimetry400 153.215 | +215154 assimetry440 154.215 | +215155 assimetry469 155.215 | +215156 assimetry500 156.215 | +215157 assimetry532 157.215 | +215158 assimetry550 158.215 | +215159 assimetry645 159.215 | +215160 assimetry670 160.215 | +215161 assimetry800 161.215 | +215162 assimetry858 162.215 | +215163 assimetry865 163.215 | +215164 assimetry1020 164.215 | +215165 assimetry1064 165.215 | +215166 assimetry1240 166.215 | +215167 assimetry1640 167.215 | +215168 aersrcso2 168.215 | +215169 aerddpso2 169.215 | +215170 aersdmso2 170.215 | +215171 aerwdlsso2 171.215 | +215172 aerwdccso2 172.215 | +215173 aerngtso2 173.215 | +215174 aermssso2 174.215 | +215175 aerodso2 175.215 | +215176 aodabs2130 176.215 | +215177 aodfm2130 177.215 | +215178 ssa2130 178.215 | +215179 assimetry2130 179.215 | +216 dhcc 216.128 | +216001 1.216 | +216002 2.216 | +216003 3.216 | +216004 4.216 | +216005 5.216 | +216006 6.216 | +216007 7.216 | +216008 8.216 | +216009 9.216 | +216010 10.216 | +216011 11.216 | +216012 12.216 | +216013 13.216 | +216014 14.216 | +216015 15.216 | +216016 16.216 | +216017 17.216 | +216018 18.216 | +216019 19.216 | +216020 20.216 | +216021 21.216 | +216022 22.216 | +216023 23.216 | +216024 24.216 | +216025 25.216 | +216026 26.216 | +216027 27.216 | +216028 28.216 | +216029 29.216 | +216030 30.216 | +216031 31.216 | +216032 32.216 | +216033 33.216 | +216034 34.216 | +216035 35.216 | +216036 36.216 | +216037 37.216 | +216038 38.216 | +216039 39.216 | +216040 40.216 | +216041 41.216 | +216042 42.216 | +216043 43.216 | +216044 44.216 | +216045 45.216 | +216046 46.216 | +216047 47.216 | +216048 48.216 | +216049 49.216 | +216050 50.216 | +216051 51.216 | +216052 52.216 | +216053 53.216 | +216054 54.216 | +216055 55.216 | +216056 56.216 | +216057 57.216 | +216058 58.216 | +216059 59.216 | +216060 60.216 | +216061 61.216 | +216062 62.216 | +216063 63.216 | +216064 64.216 | +216065 65.216 | +216066 66.216 | +216067 67.216 | +216068 68.216 | +216069 69.216 | +216070 70.216 | +216071 71.216 | +216072 72.216 | +216073 73.216 | +216074 74.216 | +216075 75.216 | +216076 76.216 | +216077 77.216 | +216078 78.216 | +216079 79.216 | +216080 80.216 | +216081 81.216 | +216082 82.216 | +216083 83.216 | +216084 84.216 | +216085 85.216 | +216086 86.216 | +216087 87.216 | +216088 88.216 | +216089 89.216 | +216090 90.216 | +216091 91.216 | +216092 92.216 | +216093 93.216 | +216094 94.216 | +216095 95.216 | +216096 96.216 | +216097 97.216 | +216098 98.216 | +216099 99.216 | +216100 100.216 | +216101 101.216 | +216102 102.216 | +216103 103.216 | +216104 104.216 | +216105 105.216 | +216106 106.216 | +216107 107.216 | +216108 108.216 | +216109 109.216 | +216110 110.216 | +216111 111.216 | +216112 112.216 | +216113 113.216 | +216114 114.216 | +216115 115.216 | +216116 116.216 | +216117 117.216 | +216118 118.216 | +216119 119.216 | +216120 120.216 | +216121 121.216 | +216122 122.216 | +216123 123.216 | +216124 124.216 | +216125 125.216 | +216126 126.216 | +216127 127.216 | +216128 128.216 | +216129 129.216 | +216130 130.216 | +216131 131.216 | +216132 132.216 | +216133 133.216 | +216134 134.216 | +216135 135.216 | +216136 136.216 | +216137 137.216 | +216138 138.216 | +216139 139.216 | +216140 140.216 | +216141 141.216 | +216142 142.216 | +216143 143.216 | +216144 144.216 | +216145 145.216 | +216146 146.216 | +216147 147.216 | +216148 148.216 | +216149 149.216 | +216150 150.216 | +216151 151.216 | +216152 152.216 | +216153 153.216 | +216154 154.216 | +216155 155.216 | +216156 156.216 | +216157 157.216 | +216158 158.216 | +216159 159.216 | +216160 160.216 | +216161 161.216 | +216162 162.216 | +216163 163.216 | +216164 164.216 | +216165 165.216 | +216166 166.216 | +216167 167.216 | +216168 168.216 | +216169 169.216 | +216170 170.216 | +216171 171.216 | +216172 172.216 | +216173 173.216 | +216174 174.216 | +216175 175.216 | +216176 176.216 | +216177 177.216 | +216178 178.216 | +216179 179.216 | +216180 180.216 | +216181 181.216 | +216182 182.216 | +216183 183.216 | +216184 184.216 | +216185 185.216 | +216186 186.216 | +216187 187.216 | +216188 188.216 | +216189 189.216 | +216190 190.216 | +216191 191.216 | +216192 192.216 | +216193 193.216 | +216194 194.216 | +216195 195.216 | +216196 196.216 | +216197 197.216 | +216198 198.216 | +216199 199.216 | +216200 200.216 | +216201 201.216 | +216202 202.216 | +216203 203.216 | +216204 204.216 | +216205 205.216 | +216206 206.216 | +216207 207.216 | +216208 208.216 | +216209 209.216 | +216210 210.216 | +216211 211.216 | +216212 212.216 | +216213 213.216 | +216214 214.216 | +216215 215.216 | +216216 216.216 | +216217 217.216 | +216218 218.216 | +216219 219.216 | +216220 220.216 | +216221 221.216 | +216222 222.216 | +216223 223.216 | +216224 224.216 | +216225 225.216 | +216226 226.216 | +216227 227.216 | +216228 228.216 | +216229 229.216 | +216230 230.216 | +216231 231.216 | +216232 232.216 | +216233 233.216 | +216234 234.216 | +216235 235.216 | +216236 236.216 | +216237 237.216 | +216238 238.216 | +216239 239.216 | +216240 240.216 | +216241 241.216 | +216242 242.216 | +216243 243.216 | +216244 244.216 | +216245 245.216 | +216246 246.216 | +216247 247.216 | +216248 248.216 | +216249 249.216 | +216250 250.216 | +216251 251.216 | +216252 252.216 | +216253 253.216 | +216254 254.216 | +216255 255.216 | +217 dhlc 217.128 | +218 vdzw 218.128 | +219 vdmw 219.128 | +22 ucln 22.128 | +220 ewgd 220.128 | +220228 tpoc 228.220 | +221 nsgd 221.128 | +222 ctzw 222.128 222.130 | +223 ctmw 223.128 223.130 | +224 vdh 224.128 | +225 htcc 225.128 | +226 htlc 226.128 | +227 crnh 227.128 227.130 | +228 tp 228.128 228.160 228.170 228.190 | +228001 cin 1.228 | +228002 orog 2.228 7.1 7.2 7.3 | +228003 zust 3.228 | +228004 mean2t 4.228 | +228005 mean10ws 5.228 | +228006 meantcc 6.228 | +228007 dl 7.228 | +228008 lmlt 8.228 | +228009 lmld 9.228 | +228010 lblt 10.228 | +228011 ltlt 11.228 | +228012 lshf 12.228 | +228013 lict 13.228 | +228014 licd 14.228 | +228015 dndzn 15.228 | +228016 dndza 16.228 | +228017 dctb 17.228 | +228018 tplb 18.228 | +228019 tplt 19.228 | +228021 fdir 21.228 | +228022 cdir 22.228 | +228023 cbh 23.228 | +228024 deg0l 24.228 | +228025 hvis 25.228 | +228026 mx2t3 26.228 | +228027 mn2t3 27.228 | +228028 10fg3 28.228 | +228039 sm 39.228 86.1 86.2 86.3 | +228040 swi1 40.228 | +228041 swi2 41.228 | +228042 swi3 42.228 | +228043 swi4 43.228 | +228080 aco2nee 80.228 | +228081 aco2gpp 81.228 | +228082 aco2rec 82.228 | +228083 fco2nee 83.228 | +228084 fco2gpp 84.228 | +228085 fco2rec 85.228 | +228089 tcrw 89.228 | +228090 tcsw 90.228 | +228091 ccf 91.228 | +228092 stf 92.228 | +228093 swv 93.228 | +228094 ist 94.228 | +228129 ssrdc 129.228 | +228130 strdc 130.228 | +228131 u10n 131.228 | +228132 v10n 132.228 | +228134 vtnowd 134.228 | +228136 utnowd 136.228 | +228139 st 85.1 85.2 85.3 139.228 | +228141 sd 66.1 66.2 66.3 141.228 | +228144 sf 65.1 65.2 65.3 144.228 | +228164 tcc 71.1 71.2 71.3 164.228 | +228170 cap 170.228 | +228171 wilt 171.228 | +228228 tp 61.1 61.2 61.3 228.228 | +228242 fdif 242.228 | +228243 cdif 243.228 | +228244 aldr 244.228 | +228245 aldf 245.228 | +228246 100u 246.228 | +228247 100v 247.228 | +228249 100si 249.228 | +228250 irrfr 250.228 | +228251 pev 251.228 | +228252 irr 252.228 | +228253 ascat_sm_cdfa 253.228 | +228254 ascat_sm_cdfb 254.228 | +228255 tcclw | +228256 tccsw | +229 iews 229.128 229.160 | +23 ucdv 23.128 | +230 inss 230.128 230.160 | +230008 srovar 8.230 | +230009 ssrovar 9.230 | +230044 esvar 44.230 | +230045 smltvar 45.230 | +230046 sdurvar 46.230 | +230057 uvbvar 57.230 | +230058 parvar 58.230 | +230142 lspvar 142.230 | +230143 cpvar 143.230 | +230144 sfvar 144.230 | +230145 bldvar 145.230 | +230146 sshfvar 146.230 | +230147 slhfvar 147.230 | +230169 ssrdvar 169.230 | +230174 alvar 174.230 | +230175 strdvar 175.230 | +230176 ssrvar 176.230 | +230177 strvar 177.230 | +230178 tsrvar 178.230 | +230179 ttrvar 179.230 | +230180 ewssvar 180.230 | +230181 nsssvar 181.230 | +230182 evar 182.230 | +230189 sundvar 189.230 | +230195 lgwsvar 195.230 | +230196 mgwsvar 196.230 | +230197 gwdvar 197.230 | +230198 srcvar 198.230 | +230205 rovar 205.230 | +230208 tsrcvar 208.230 | +230209 ttrcvar 209.230 | +230210 ssrcvar 210.230 | +230211 strcvar 211.230 | +230212 tisrvar 212.230 | +230228 tpvar 228.230 | +231 ishf 231.128 | +232 ie 232.128 232.160 | +233 asq 233.128 233.160 | +234 lsrh 234.128 234.160 | +234139 sts 139.234 | +234151 msls 151.234 | +234167 2ts 167.234 | +234228 tps 228.234 | +235 skt 235.128 235.160 | +236 stl4 236.128 236.160 | +237 swl4 237.128 237.160 | +238 tsn 238.128 238.160 | +239 csf 78.1 78.2 78.3 239.128 | +24 24.128 | +240 lsf 79.1 79.2 79.3 240.128 | +241 acf 241.128 | +242 alw 242.128 | +243 fal 243.128 | +244 fsr 244.128 244.160 | +245 flsr 245.128 245.160 | +246 clwc 246.128 | +247 ciwc 247.128 | +248 cc 248.128 | +249 aiw 249.128 | +25 25.128 | +250 ice 250.128 | +251 atte 251.128 | +252 athe 252.128 | +253 atze 253.128 | +254 atmw 254.128 | +255 255.128 255.130 255.132 255.160 255.170 255.180 255.190 | +26 cl 26.128 | +260002 lhtfl | +260003 shtfl | +260004 heatx | +260005 wcf | +260006 mindpd | +260007 snohf | +260008 vapp | +260009 ncpcp | +260010 srweq | +260011 snoc | +260012 snol | +260013 snoag | +260014 absh | +260015 ptype | +260016 iliqw | +260017 tcond | +260018 clwmr | +260019 icmr | +260020 rwmr | +260021 snmr | +260022 mconv | +260023 maxrh | +260024 maxah | +260025 asnow | +260026 pwcat | +260027 hail | +260028 grle | +260029 crain | +260030 cfrzr | +260031 cicep | +260032 csnow | +260033 cprat | +260034 mconv | +260035 cpofp | +260036 pevap | +260037 pevpr | +260038 snowc | +260039 frain | +260040 rime | +260041 tcolr | +260042 tcols | +260043 lswp | +260044 cwp | +260045 twatp | +260046 tsnowp | +260047 tcwat | +260048 tprate | +260049 tsrwe | +260050 lsprate | +260051 csrwe | +260052 lssrwe | +260053 tsrate | +260054 csrate | +260055 lssrate | +260056 sdwe | +260057 tciwv | +260058 rprate | +260059 sprate | +260060 fprate | +260061 iprate | +260062 uflx | +260063 vflx | +260064 maxgust | +260065 gust | +260066 ugust | +260067 vgust | +260068 vwsh | +260069 mflx | +260070 ustm | +260071 vstm | +260072 cd | +260073 fricv | +260074 prmsl | +260075 dist | +260076 alts | +260077 thick | +260078 presalt | +260079 denalt | +260080 5wavh | +260081 u-gwd | +260082 v-gwd | +260083 hpbl | +260084 5wava | +260085 sdsgso | +260086 nswrt | +260087 dswrf | +260088 uswrf | +260089 nswrf | +260090 photar | +260091 nswrfcs | +260092 dwuvr | +260093 uviucs | +260094 uvi | +260095 nlwrs | +260096 nlwrt | +260097 dlwrf | +260098 ulwrf | +260099 nlwrf | +260100 nlwrcs | +260101 cice | +260102 cwat 76.1 76.2 76.3 | +260103 cdca | +260104 cdct | +260105 tmaxt | +260106 thunc | +260107 cdcb | +260108 cdct | +260109 ceil | +260110 cdlyr | +260111 cwork | +260112 cuefi | +260113 tcond | +260114 tcolw | +260115 tcoli | +260116 tcolc | +260117 fice | +260118 cdcimr | +260119 suns | +260121 kx 121.228 | +260122 kox | +260123 totalx 123.228 | +260124 sx | +260125 hlcy | +260126 ehlx | +260127 lftx | +260128 4lftx | +260129 aerot | +260130 tozne | +260131 o3mr | +260132 tcioz | +260133 bswid | +260134 bref | +260135 brvel | +260136 veril | +260137 lmaxbr | +260138 prec | +260139 acces | +260140 aciod | +260141 acradp | +260142 gdces | +260143 gdiod | +260144 gdradp | +260145 tiaccp | +260146 tiacip | +260147 tiacrp | +260148 volash | +260149 icit | +260150 icib | +260151 ici | +260152 turbt | +260153 turbb | +260154 turb | +260155 tke | +260156 pblreg | +260157 conti | +260158 contet | +260159 contt | +260160 contb | +260161 mxsalb | +260162 snfalb | +260165 cat | +260167 var190m0 | +260168 tsec | +260169 ffldg | +260170 ffldro | +260171 rssc | +260172 esct | +260173 swepon | +260174 bgrun | +260175 ssrun | +260176 cppop | +260177 pposp | +260178 pop | +260179 land | +260180 veg | +260181 watr | +260182 evapt | +260183 mterh | +260184 landu | +260185 soilw | +260186 gflux | +260187 mstav | +260188 sfexc | +260189 cnwat | +260190 bmixl | +260191 ccond | +260192 rsmin | +260193 rcs | +260194 rct | +260195 rcsol | +260196 rcq | +260197 cisoilw | +260198 hflux | +260199 vsw | +260200 vwiltm | +260201 uplst | +260202 uplsm | +260203 lowlsm | +260204 botlst | +260205 soill | +260206 rlyrs | +260207 smref | +260208 smdry | +260209 poros | +260210 liqvsm | +260211 voltso | +260212 transo | +260213 voldec | +260214 direc | +260215 soilp | +260216 vsosm | +260217 satosm | +260218 estp | +260219 irrate | +260220 ctoph | +260221 ctophqi | +260222 estu | +260223 estv | +260224 npixu | +260225 solza | +260226 raza | +260227 rfl06 | +260228 rfl08 | +260229 rfl16 | +260230 rfl39 | +260231 atmdiv | +260232 wvdir | +260233 dirpw | +260234 perpw | +260235 persw | +260236 dirc | +260237 spc | +260238 icec | +260239 ist | +260240 dslm | +260241 tsec | +260243 ttrad | +260244 rev | +260245 lrghr | +260246 cnvhr | +260247 thflx | +260248 ttdia | +260249 ttphy | +260250 tsd1d | +260251 shahr | +260252 vdfhr | +260253 thz0 | +260254 tchp | +260261 minrh | +260269 tipd | +260270 ncip | +260271 snot | +260272 tclsw | +260273 tcolm | +260274 emnp | +260275 sbsno | +260276 cnvmr | +260277 shamr | +260278 vdfmr | +260279 condp | +260280 lrgmr | +260281 qz0 | +260282 qmax | +260283 qmin | +260284 arain | +260285 snowt | +260286 apcpn | +260287 acpcpn | +260288 frzr | +260295 lauv | +260296 louv | +260297 lavv | +260298 lovv | +260299 lapp | +260300 lopp | +260301 vedh | +260302 covmz | +260303 covtz | +260304 covtm | +260305 vdfua | +260306 vdfva | +260307 gwdu | +260308 gwdv | +260309 cnvu | +260310 cnvv | +260311 wtend | +260312 omgalf | +260313 cngwdu | +260314 cngwdv | +260315 lmv | +260316 pvmww | +260317 mslet | +260323 mslma | +260324 tslsa | +260325 plpl | +260326 lpsx | +260327 lpsy | +260328 hgtx | +260329 hgty | +260330 layth | +260331 nlgsp | +260332 cnvumf | +260333 cnvdmf | +260334 cnvdemf | +260335 lmh | +260336 hgtn | +260337 presn | +260340 duvb | +260341 cduvb | +260342 csdsf | +260343 swhr | +260344 csusf | +260345 cfnsf | +260346 vbdsf | +260347 vddsf | +260348 nbdsf | +260349 nddsf | +260350 dtrf | +260351 utrf | +260354 lwhr | +260355 csulf | +260356 csdlf | +260357 cfnlf | +260366 mflux | +260369 ri | +260370 cwdi | +260372 uphl | +260373 lai | +260374 pmtc | +260375 pmtf | +260376 lpmtf | +260377 lipmf | +260379 ozcon | +260380 ozcat | +260381 vdfoz | +260382 poz | +260383 toz | +260384 pozt | +260385 pozo | +260386 refzr | +260387 refzi | +260388 refzc | +260389 refd | +260390 refc | +260391 ltng | +260394 srcono | +260395 mrcono | +260396 hrcono | +260397 torprob | +260398 hailprob | +260399 windprob | +260400 storprob | +260401 shailpro | +260402 swindpro | +260403 tstmc | +260404 mixly | +260405 flght | +260406 cicel | +260407 civis | +260408 ciflt | +260409 lavni | +260410 havni | +260411 sbsalb | +260412 swsalb | +260413 nbsalb | +260414 nwsalb | +260415 prsvr | +260416 prsigsvr | +260417 sipd | +260418 epsr | +260419 tpfi | +260420 vaftd | +260421 nlat | +260422 elon | +260424 mlyno | +260425 nlatn | +260426 elonn | +260429 cpozp | +260431 ppffg | +260432 cwr | +260439 vgtyp | +260442 wilt | +260447 rdrip | +260448 icwat | +260449 akhs | +260450 akms | +260451 vegt | +260452 sstor | +260453 lsoil | +260454 ewatr | +260455 gwrec | +260456 qrec | +260457 sfcrh | +260458 ndvi | +260459 landn | +260460 amixl | +260461 wvinc | +260462 wcinc | +260463 wvconv | +260464 wcconv | +260465 wvuflx | +260466 wvvflx | +260467 wcuflx | +260468 wcvflx | +260469 acond | +260470 evcw | +260471 trans | +260474 sltyp | +260478 evbs | +260479 lspa | +260480 baret | +260481 avsft | +260482 radt | +260483 fldcp | +260484 usct | +260485 vsct | +260486 wstp | +260487 omlu | +260488 omlv | +260489 ubaro | +260490 vbaro | +260491 surge | +260492 etsrg | +260493 elevhtml | +260494 sshg | +260495 p2omlt | +260496 aohflx | +260497 ashfl | +260498 sstt | +260499 ssst | +260500 keng | +260501 sltfl | +260502 wtmpc | +260503 salin | +260504 bkeng | +260505 dbss | +260506 intfd | +260507 ohc | +260508 imgd | +260509 al | +260510 clbt | +260511 csbt | +27 cvl 27.128 | +28 cvh 28.128 | +29 tvl 29.128 | +3 pt 3.128 13.1 13.2 13.3 | +30 tvh 30.128 | +300001 pres 1.254 | +300002 psnm 2.254 | +300003 tsps 3.254 | +300006 geop 6.254 | +300007 zgeo 7.254 | +300008 gzge 8.254 | +300011 temp 11.254 | +300012 vtmp 12.254 | +300013 ptmp 13.254 | +300014 psat 14.254 | +300015 mxtp 15.254 | +300016 mntp 16.254 | +300017 tpor 17.254 | +300018 dptd 18.254 | +300019 lpsr 19.254 | +300021 rds1 21.254 | +300022 rds2 22.254 | +300023 rds3 23.254 | +300025 tpan 25.254 | +300026 psan 26.254 | +300027 zgan 27.254 | +300028 wvs1 28.254 | +300029 wvs2 29.254 | +300030 wvs3 30.254 | +300031 wind 31.254 | +300032 wins 32.254 | +300033 uvel 33.254 | +300034 vvel 34.254 | +300035 fcor 35.254 | +300036 potv 36.254 | +300038 sgvv 38.254 | +300039 omeg 39.254 | +300040 omg2 40.254 | +300041 abvo 41.254 | +300042 abdv 42.254 | +300043 vort 43.254 | +300044 divg 44.254 | +300045 vucs 45.254 | +300046 vvcs 46.254 | +300047 dirc 47.254 | +300048 spdc 48.254 | +300049 ucpc 49.254 | +300050 vcpc 50.254 | +300051 umes 51.254 | +300052 umrl 52.254 | +300053 hmxr 53.254 | +300054 agpl 54.254 | +300055 vapp 55.254 | +300056 sadf 56.254 | +300057 evap 57.254 | +300059 prcr 59.254 | +300060 thpb 60.254 | +300061 prec 61.254 | +300062 prge 62.254 | +300063 prcv 63.254 | +300064 neve 64.254 | +300065 wenv 65.254 | +300066 nvde 66.254 | +300067 mxld 67.254 | +300068 tthd 68.254 | +300069 mthd 69.254 | +300070 mtha 70.254 | +300071 cbnv 71.254 | +300072 cvnv 72.254 | +300073 lwnv 73.254 | +300074 mdnv 74.254 | +300075 hinv 75.254 | +300076 wtnv 76.254 | +300077 bli 77.254 | +300081 lsmk 81.254 | +300082 dslm 82.254 | +300083 zorl 83.254 | +300084 albe 84.254 | +300085 dstp 85.254 | +300086 soic 86.254 | +300087 vege 87.254 | +300089 dens 89.254 | +300091 icec 91.254 | +300092 icet 92.254 | +300093 iced 93.254 | +300094 ices 94.254 | +300095 iceu 95.254 | +300096 icev 96.254 | +300097 iceg 97.254 | +300098 icdv 98.254 | +300100 shcw 100.254 | +300101 wwdi 101.254 | +300102 wwsh 102.254 | +300103 wwmp 103.254 | +300104 swdi 104.254 | +300105 swsh 105.254 | +300106 swmp 106.254 | +300107 prwd 107.254 | +300108 prmp 108.254 | +300109 swdi 109.254 | +300110 swmp 110.254 | +300111 ocas 111.254 | +300112 slds 112.254 | +300113 nswr 113.254 | +300114 role 114.254 | +300115 lwrd 115.254 | +300116 swea 116.254 | +300117 glbr 117.254 | +300121 clsf 121.254 | +300122 cssf 122.254 | +300123 blds 123.254 | +300127 imag 127.254 | +300128 tp2m 128.254 | +300129 dp2m 129.254 | +300130 u10m 130.254 | +300131 v10m 131.254 | +300132 topo 132.254 | +300133 gsfp 133.254 | +300134 lnsp 134.254 | +300135 pslc 135.254 | +300136 pslm 136.254 | +300137 mask 137.254 | +300138 mxwu 138.254 | +300139 mxwv 139.254 | +300140 cape 140.254 | +300141 cine 141.254 | +300142 lhcv 142.254 | +300143 mscv 143.254 | +300144 scvm 144.254 | +300145 scvh 145.254 | +300146 mxwp 146.254 | +300147 ustr 147.254 | +300148 vstr 148.254 | +300149 cbnt 149.254 | +300150 pcbs 150.254 | +300151 pctp 151.254 | +300152 fzht 152.254 | +300153 fzrh 153.254 | +300154 fdlt 154.254 | +300155 fdlu 155.254 | +300156 fdlv 156.254 | +300157 tppp 157.254 | +300158 tppt 158.254 | +300159 tppu 159.254 | +300160 tppv 160.254 | +300162 gvdu 162.254 | +300163 gvdv 163.254 | +300164 gvus 164.254 | +300165 gvvs 165.254 | +300167 dvsh 167.254 | +300168 hmfc 168.254 | +300169 vmfl 169.254 | +300170 vadv 170.254 | +300171 nhcm 171.254 | +300172 lglh 172.254 | +300173 lgms 173.254 | +300174 smav 174.254 | +300175 tgrz 175.254 | +300176 bslh 176.254 | +300177 evpp 177.254 | +300178 rnof 178.254 | +300179 pitp 179.254 | +300180 vpca 180.254 | +300181 qsfc 181.254 | +300182 ussl 182.254 | +300183 uzrs 183.254 | +300184 uzds 184.254 | +300185 amdl 185.254 | +300186 amsl 186.254 | +300187 tsfc 187.254 | +300188 tems 188.254 | +300189 tcas 189.254 | +300190 ctmp 190.254 | +300191 tgsc 191.254 | +300192 uves 192.254 | +300193 usst 193.254 | +300194 vves 194.254 | +300195 vsst 195.254 | +300196 suvf 196.254 | +300197 iswf 197.254 | +300198 ghfl 198.254 | +300200 lwbc 200.254 | +300201 lwtc 201.254 | +300202 swec 202.254 | +300203 ocac 203.254 | +300205 lwrh 205.254 | +300206 swrh 206.254 | +300207 olis 207.254 | +300208 olic 208.254 | +300209 ocis 209.254 | +300210 ocic 210.254 | +300211 oles 211.254 | +300212 oces 212.254 | +300213 swgc 213.254 | +300214 roce 214.254 | +300215 swtc 215.254 | +300218 hhdf 218.254 | +300219 hmdf 219.254 | +300220 hddf 220.254 | +300221 hvdf 221.254 | +300222 vdms 222.254 | +300223 vdfu 223.254 | +300224 vdfv 224.254 | +300225 vdfh 225.254 | +300226 umrs 226.254 | +300227 vdcc 227.254 | +300230 usmt 230.254 | +300231 vsmt 231.254 | +300232 tsmt 232.254 | +300233 rsmt 233.254 | +300234 atmt 234.254 | +300235 stmt 235.254 | +300236 ommt 236.254 | +300237 dvmt 237.254 | +300238 zhmt 238.254 | +300239 lnmt 239.254 | +300240 mkmt 240.254 | +300241 vvmt 241.254 | +300242 omtm 242.254 | +300243 ptmt 243.254 | +300244 pcmt 244.254 | +300245 rhmt 245.254 | +300246 mpmt 246.254 | +300247 simt 247.254 | +300248 uemt 248.254 | +300249 fcmt 249.254 | +300250 psmt 250.254 | +300251 tmmt 251.254 | +300252 pvmt 252.254 | +300253 tvmt 253.254 | +300254 vtmt 254.254 | +300255 uvmt 255.254 | +3003 ptend 3.1 3.2 3.3 | +3005 icaht 5.1 5.2 5.3 | +3008 h 8.1 8.2 8.3 | +3009 hstdv 9.1 9.2 9.3 | +3012 vptmp 12.1 12.2 12.3 | +3014 papt 14.1 14.2 14.3 | +3015 tmax 15.1 15.2 15.3 | +3016 tmin 16.1 16.2 16.3 | +3017 dpt 17.1 17.2 17.3 | +3018 depr 18.1 18.2 18.3 | +3019 lapr 19.1 19.2 19.3 | +3020 vis 20.1 20.2 20.3 | +3021 rdsp1 21.1 21.2 21.3 | +3022 rdsp2 22.1 22.2 22.3 | +3023 rdsp3 23.1 23.2 23.3 | +3024 pli 24.1 24.2 24.3 | +3025 ta 25.1 25.2 25.3 | +3026 presa 26.1 26.2 26.3 | +3027 gpa 27.1 27.2 27.3 | +3028 wvsp1 28.1 28.2 28.3 | +3029 wvsp2 29.1 29.2 29.3 | +3030 wvsp3 30.1 30.2 30.3 | +3031 wdir 31.1 31.2 31.3 | +3037 mntsf 37.1 37.2 37.3 | +3038 sgcvv 38.1 38.2 38.3 | +3041 absv 41.1 41.2 41.3 | +3042 absd 42.1 42.2 42.3 | +3045 vucsh 45.1 45.2 45.3 | +3046 vvcsh 46.1 46.2 46.3 | +3047 dirc 47.1 47.2 47.3 | +3048 spc 48.1 48.2 48.3 | +3049 ucurr 49.1 49.2 49.3 | +3050 vcurr 50.1 50.2 50.3 | +3053 mixr 53.1 53.2 53.3 | +3054 pwat 54.1 54.2 54.3 | +3055 vp 55.1 55.2 55.3 | +3056 satd 56.1 56.2 56.3 | +3059 prate 59.1 59.2 59.3 | +3060 tstm 60.1 60.2 60.3 | +3062 lsp 62.1 62.2 62.3 | +3063 acpcp 63.1 63.2 63.3 | +3064 srweq 64.1 64.2 64.3 | +3067 mld 67.1 67.2 67.3 | +3068 tthdp 68.1 68.2 68.3 | +3069 mthd 69.1 69.2 69.3 | +3070 mtha 70.1 70.2 70.3 | +3077 bli 77.1 77.2 77.3 | +3080 wtmp 80.1 80.2 80.3 | +3082 dslm 82.1 82.2 82.3 | +3086 ssw 86.1 86.2 86.3 | +3088 s 88.1 88.2 88.3 | +3089 den 89.1 89.2 89.3 | +3091 icec 91.1 91.2 91.3 | +3092 icetk 92.1 92.2 92.3 | +3093 diced 93.1 93.2 93.3 | +3094 siced 94.1 94.2 94.3 | +3095 uice 95.1 95.2 95.3 | +3096 vice 96.1 96.2 96.3 | +3097 iceg 97.1 97.2 97.3 | +3098 iced 98.1 98.2 98.3 | +3099 snom 99.1 99.2 99.3 | +31 ci 31.128 | +3100 swh 100.1 100.2 100.3 | +3101 mdww 101.1 101.2 101.3 | +3102 shww 102.1 102.2 102.3 | +3103 mpww 103.1 103.2 103.3 | +3104 swdir 104.1 104.2 104.3 | +3105 swell 105.1 105.2 105.3 | +3106 swper 106.1 106.2 106.3 | +3107 mdps 107.1 107.2 107.3 | +3108 mpps 108.1 108.2 108.3 | +3109 dirsw 109.1 109.2 109.3 | +3110 swp 110.1 110.2 110.3 | +3111 nswrs 111.1 111.2 111.3 | +3112 nlwrs 112.1 112.2 112.3 | +3113 nlwrt 113.1 113.2 113.3 | +3114 nlwrt 114.1 114.2 114.3 | +3115 lwavr 115.1 115.2 115.3 | +3116 swavr 116.1 116.2 116.3 | +3117 grad 117.1 117.2 117.3 | +3119 lwrad 119.1 119.2 119.3 | +3120 swrad 120.1 120.2 120.3 | +3124 uflx 124.1 124.2 124.3 | +3125 vflx 125.1 125.2 125.3 | +3126 wmixe 126.1 126.2 126.3 | +3127 imgd 127.1 127.2 127.3 | +32 asn 32.128 | +33 rsn 33.128 | +34 sst 34.128 | +35 istl1 35.128 | +36 istl2 36.128 | +37 istl3 37.128 | +38 istl4 38.128 | +39 swvl1 39.128 | +4 eqpt 4.128 | +40 swvl2 40.128 | +41 swvl3 41.128 | +42 swvl4 42.128 | +43 slt 43.128 | +44 es 44.128 | +45 smlt 45.128 | +46 sdur 46.128 | +47 dsrp 47.128 | +48 magss 48.128 | +49 10fg 49.128 | +5 sept 5.128 | +50 lspf 50.128 | +500000 ps 1.2 1.2 | +500001 p 1.2 1.2 | +500002 pmsl 2.2 2.2 | +500003 dpsdt 3.2 3.2 | +500004 fis 6.2 6.2 | +500005 fif 6.2 6.2 | +500006 fi 6.2 6.2 | +500007 hsurf 8.2 8.2 | +500008 hhl 8.2 8.2 | +500009 to3 10.2 10.2 | +500010 t_g 11.2 11.2 | +500011 t_2m 11.2 11.2 | +500012 t_2m_av 11.2 11.2 | +500013 t_2m_cl 11.2 11.2 | +500014 t 11.2 11.2 | +500015 tmax_2m 15.2 15.2 | +500016 tmin_2m 16.2 16.2 | +500017 td_2m 17.2 17.2 | +500018 td_2m_av 17.2 17.2 | +500019 dbz_max 21.2 21.2 | +500020 wvsp1 28.2 28.2 | +500021 wvsp2 29.2 29.2 | +500022 wvsp3 30.2 30.2 | +500023 dd_10m 31.2 31.2 | +500024 dd 31.2 31.2 | +500025 sp_10m 32.2 32.2 | +500026 sp 32.2 32.2 | +500027 u_10m 33.2 33.2 | +500028 u 33.2 33.2 | +500029 v_10m 34.2 34.2 | +500030 v 34.2 34.2 | +500031 omega 39.2 39.2 | +500032 w 40.2 40.2 | +500033 qv_s 51.2 51.2 | +500034 qv_2m 51.2 51.2 | +500035 qv 51.2 51.2 | +500036 relhum_2m 52.2 52.2 | +500037 relhum 52.2 52.2 | +500038 tqv 54.2 54.2 | +500039 aevap_s 57.2 57.2 | +500040 tqi 58.2 58.2 | +500041 tot_prec 61.2 61.2 | +500042 prec_gsp 62.2 62.2 | +500043 prec_con 63.2 63.2 | +500044 w_snow 65.2 65.2 | +500045 h_snow 66.2 66.2 | +500046 clct 71.2 71.2 | +500047 clc_con 72.2 72.2 | +500048 clcl 73.2 73.2 | +500049 clcm 74.2 74.2 | +500050 clch 75.2 75.2 | +500051 tqc 76.2 76.2 | +500052 snow_con 78.2 78.2 | +500053 snow_gsp 79.2 79.2 | +500054 fr_land 81.2 81.2 | +500055 z0 83.2 83.2 | +500056 alb_rad 84.2 84.2 | +500057 albedo_b 84.2 84.2 | +500058 t_cl 85.2 85.2 | +500059 t_cl_lm 85.2 85.2 | +500060 t_m 85.2 85.2 | +500061 t_s 85.2 85.2 | +500062 w_cl 86.2 86.2 | +500063 w_g1 86.2 86.2 | +500064 w_g2 86.2 86.2 | +500065 plcov 87.2 87.2 | +500066 runoff_g 90.2 90.2 | +500067 runoff_g_lm 90.2 90.2 | +500068 runoff_s 90.2 90.2 | +500069 fr_ice 91.2 91.2 | +500070 h_ice 92.2 92.2 | +500071 swh 100.2 100.2 | +500072 mdww 101.2 101.2 | +500073 shww 102.2 102.2 | +500074 mpww 103.2 103.2 | +500075 mdps 104.2 104.2 | +500076 shps 105.2 105.2 | +500077 mpps 106.2 106.2 | +500078 asob_s 111.2 111.2 | +500079 sobs_rad 111.2 111.2 | +500080 athb_s 112.2 112.2 | +500081 thbs_rad 112.2 112.2 | +500082 asob_t 113.2 113.2 | +500083 sobt_rad 113.2 113.2 | +500084 athb_t 114.2 114.2 | +500085 thbt_rad 114.2 114.2 | +500086 alhfl_s 121.2 121.2 | +500087 ashfl_s 122.2 122.2 | +500088 aumfl_s 124.2 124.2 | +500089 avmfl_s 125.2 125.2 | +500090 apab_s 5.201 5.201 | +500091 pabs_rad 5.201 5.201 | +500092 sohr_rad 13.201 13.201 | +500093 thhr_rad 14.201 14.201 | +500094 alhfl_bs 18.201 18.201 | +500095 alhfl_pl 19.201 19.201 | +500096 dursun 20.201 20.201 | +500097 rstom 21.201 21.201 | +500098 clc 29.201 29.201 | +500099 clc_sgs 30.201 30.201 | +500100 qc 31.201 31.201 | +500101 qi 33.201 33.201 | +500102 qr 35.201 35.201 | +500103 qs 36.201 36.201 | +500104 tqr 37.201 37.201 | +500105 tqs 38.201 38.201 | +500106 qg 39.201 39.201 | +500107 tqg 40.201 40.201 | +500108 twater 41.201 41.201 | +500109 tdiv_hum 42.201 42.201 | +500110 qc_rad 43.201 43.201 | +500111 qi_rad 44.201 44.201 | +500112 clch_8 51.201 51.201 | +500113 clcm_8 52.201 52.201 | +500114 clcl_8 53.201 53.201 | +500115 hbas_sc 58.201 58.201 | +500116 htop_sc 59.201 59.201 | +500117 clw_con 61.201 61.201 | +500118 hbas_con 68.201 68.201 | +500119 htop_con 69.201 69.201 | +500120 bas_con 72.201 72.201 | +500121 top_con 73.201 73.201 | +500122 dt_con 74.201 74.201 | +500123 dqv_con 75.201 75.201 | +500124 du_con 78.201 78.201 | +500125 dv_con 79.201 79.201 | +500126 htop_dc 82.201 82.201 | +500127 hzerocl 84.201 84.201 | +500128 snowlmt 85.201 85.201 | +500129 dqc_con 88.201 88.201 | +500130 dqi_con 89.201 89.201 | +500131 q_sedim 99.201 99.201 | +500132 prr_gsp 100.201 100.201 | +500133 prs_gsp 101.201 101.201 | +500134 rain_gsp 102.201 102.201 | +500135 prr_con 111.201 111.201 | +500136 prs_con 112.201 112.201 | +500137 rain_con 113.201 113.201 | +500138 rr_f 122.201 122.201 | +500139 rr_c 123.201 123.201 | +500140 dt_gsp 124.201 124.201 | +500141 dqv_gsp 125.201 125.201 | +500142 dqc_gsp 127.201 127.201 | +500143 freshsnw 129.201 129.201 | +500144 dqi_gsp 130.201 130.201 | +500145 prg_gsp 131.201 131.201 | +500146 grau_gsp 132.201 132.201 | +500147 rho_snow 133.201 133.201 | +500148 pp 139.201 139.201 | +500149 sdi_1 141.201 141.201 | +500150 sdi_2 142.201 142.201 | +500151 cape_mu 143.201 143.201 | +500152 cin_mu 144.201 144.201 | +500153 cape_ml 145.201 145.201 | +500154 cin_ml 146.201 146.201 | +500155 tke_con 147.201 147.201 | +500156 tketens 148.201 148.201 | +500157 ke 149.201 149.201 | +500158 tke 152.201 152.201 | +500159 tkvm 153.201 153.201 | +500160 tkvh 154.201 154.201 | +500161 tcm 170.201 170.201 | +500162 tch 171.201 171.201 | +500163 mh 173.201 173.201 | +500164 vmax_10m 187.201 187.201 | +500165 ru-103 194.201 194.201 | +500166 t_so 197.201 197.201 | +500167 w_so 198.201 198.201 | +500168 w_so_ice 199.201 199.201 | +500169 w_i 200.201 200.201 | +500170 t_snow 203.201 203.201 | +500171 prs_min 212.201 212.201 | +500172 t_ice 215.201 215.201 | +500173 dbz_850 230.201 230.201 | +500174 dbz 230.201 230.201 | +500175 dbz_cmax 230.201 230.201 | +500176 dttdiv 232.201 232.201 | +500177 sotr_rad 233.201 233.201 | +500178 evatra_sum 236.201 236.201 | +500179 tra_sum 237.201 237.201 | +500180 totforce_s 238.201 238.201 | +500181 resid_wso 239.201 239.201 | +500182 mflx_con 240.201 240.201 | +500183 cape_con 241.201 241.201 | +500184 qcvg_con 243.201 243.201 | +500185 mwd 4.202 4.202 | +500186 mwp_x 7.202 7.202 | +500187 ppww 7.202 7.202 | +500188 mpp_s 8.202 8.202 | +500189 ppps 8.202 8.202 | +500190 pp1d 9.202 9.202 | +500191 tm10 10.202 10.202 | +500192 tm01 17.202 17.202 | +500193 tm02 18.202 18.202 | +500194 sprd 19.202 19.202 | +500195 ana_err_fi 40.202 40.202 | +500196 ana_err_u 41.202 41.202 | +500197 ana_err_v 42.202 42.202 | +500198 du_sso 44.202 44.202 | +500199 dv_sso 45.202 45.202 | +500200 sso_stdh 46.202 46.202 | +500201 sso_gamma 47.202 47.202 | +500202 sso_theta 48.202 48.202 | +500203 sso_sigma 49.202 49.202 | +500204 emis_rad 56.202 56.202 | +500205 soiltyp 57.202 57.202 | +500206 lai 61.202 61.202 | +500207 rootdp 62.202 62.202 | +500208 hmo3 64.202 64.202 | +500209 vio3 65.202 65.202 | +500210 plcov_mx 67.202 67.202 | +500211 plcov_mn 68.202 68.202 | +500212 lai_mx 69.202 69.202 | +500213 lai_mn 70.202 70.202 | +500214 oro_mod 71.202 71.202 | +500215 wvar1 74.202 74.202 | +500216 wvar2 74.202 74.202 | +500217 for_e 75.202 75.202 | +500218 for_d 76.202 76.202 | +500219 ndvi 77.202 77.202 | +500220 ndvi_max 78.202 78.202 | +500221 ndvi_mrat 79.202 79.202 | +500222 ndviratio 79.202 79.202 | +500223 aer_so4 84.202 84.202 | +500224 aer_so412 84.202 84.202 | +500225 aer_dust 86.202 86.202 | +500226 aer_dust12 86.202 86.202 | +500227 aer_org 91.202 91.202 | +500228 aer_org12 91.202 91.202 | +500229 aer_bc 92.202 92.202 | +500230 aer_bc12 92.202 92.202 | +500231 aer_ss 93.202 93.202 | +500232 aer_ss12 93.202 93.202 | +500233 dqvdt 104.202 104.202 | +500234 qvsflx 105.202 105.202 | +500235 fc 113.202 113.202 | +500236 rlat 114.202 114.202 | +500237 rlon 115.202 115.202 | +500238 ustr 120.202 120.202 | +500239 ztd 121.202 121.202 | +500240 zwd 122.202 122.202 | +500241 zhd 123.202 123.202 | +500242 o3 180.202 180.202 | +500243 ru-103 194.202 194.202 | +500244 ru-103d 195.202 195.202 | +500245 ru-103w 196.202 196.202 | +500246 sr-90 197.202 197.202 | +500247 sr-90d 198.202 198.202 | +500248 sr-90w 199.202 199.202 | +500249 i-131a 200.202 200.202 | +500250 i-131ad 201.202 201.202 | +500251 i-131aw 202.202 202.202 | +500252 cs-137 203.202 203.202 | +500253 cs-137d 204.202 204.202 | +500254 cs-137w 205.202 205.202 | +500255 te-132 206.202 206.202 | +500256 te-132d 207.202 207.202 | +500257 te-132w 208.202 208.202 | +500258 zr-95 209.202 209.202 | +500259 zr-95d 210.202 210.202 | +500260 zr-95w 211.202 211.202 | +500261 kr-85 212.202 212.202 | +500262 kr-85d 213.202 213.202 | +500263 kr-85w 214.202 214.202 | +500264 tr-2 215.202 215.202 | +500265 tr-2d 216.202 216.202 | +500266 tr-2w 217.202 217.202 | +500267 xe-133 218.202 218.202 | +500268 xe-133d 219.202 219.202 | +500269 xe-133w 220.202 220.202 | +500270 i-131g 221.202 221.202 | +500271 i-131gd 222.202 222.202 | +500272 i-131gw 223.202 223.202 | +500273 i-131o 224.202 224.202 | +500274 i-131od 225.202 225.202 | +500275 i-131ow 226.202 226.202 | +500276 ba-140 227.202 227.202 | +500277 ba-140d 228.202 228.202 | +500278 ba-140w 229.202 229.202 | +500279 austr_sso 231.202 231.202 | +500280 ustr_sso 231.202 231.202 | +500281 avstr_sso 232.202 232.202 | +500282 vstr_sso 232.202 232.202 | +500283 avdis_sso 233.202 233.202 | +500284 vdis_sso 233.202 233.202 | +500285 uv_max 248.202 248.202 | +500286 w_shaer 29.203 29.203 | +500287 srh 30.203 30.203 | +500288 vabs 33.203 33.203 | +500289 cl_typ 90.203 90.203 | +500290 ccl_gnd 91.203 91.203 | +500291 ccl_nn 94.203 94.203 | +500292 ww 99.203 99.203 | +500293 advorg 101.203 101.203 | +500294 advor 103.203 103.203 | +500295 adrtg 107.203 107.203 | +500296 wdiv 109.203 109.203 | +500297 fqn 124.203 124.203 | +500298 ipv 130.203 130.203 | +500299 up 131.203 131.203 | +500300 vp 132.203 132.203 | +500301 ptheta 133.203 133.203 | +500302 ko 140.203 140.203 | +500303 thetae 154.203 154.203 | +500304 ceiling 157.203 157.203 | +500305 ice_grd 196.203 196.203 | +500306 cldepth 203.203 203.203 | +500307 clct_mod 204.203 204.203 | +500308 efa-ps 1.204 1.204 | +500309 eia-ps 2.204 2.204 | +500310 efa-u 3.204 3.204 | +500311 eia-u 4.204 4.204 | +500312 efa-v 5.204 5.204 | +500313 eia-v 6.204 6.204 | +500314 efa-fi 7.204 7.204 | +500315 eia-fi 8.204 8.204 | +500316 efa-rh 9.204 9.204 | +500317 eia-rh 10.204 10.204 | +500318 efa-t 11.204 11.204 | +500319 eia-t 12.204 12.204 | +500320 efa-om 13.204 13.204 | +500321 eia-om 14.204 14.204 | +500322 efa-ke 15.204 15.204 | +500323 eia-ke 16.204 16.204 | +500324 synme5_bt_cl 1.205 1.205 | +500325 synme5_bt_cs 1.205 1.205 | +500326 synme5_rad_cl 1.205 1.205 | +500327 synme5_rad_cs 1.205 1.205 | +500328 synme6_bt_cl 2.205 2.205 | +500329 synme6_bt_cs 2.205 2.205 | +500330 synme6_rad_cl 2.205 2.205 | +500331 synme6_rad_cs 2.205 2.205 | +500332 synme7_bt_cl_ir11.5 3.205 3.205 | +500333 synme7_bt_cl_wv6.4 3.205 3.205 | +500334 synme7_bt_cs_ir11.5 3.205 3.205 | +500335 synme7_bt_cs_wv6.4 3.205 3.205 | +500336 synme7_rad_cl_ir11.5 3.205 3.205 | +500337 synme7_rad_cl_wv6.4 3.205 3.205 | +500338 synme7_rad_cs_ir11.5 3.205 3.205 | +500339 synme7_rad_cs_wv6.4 3.205 3.205 | +500340 synmsg_bt_cl_ir10.8 4.205 4.205 | +500341 synmsg_bt_cl_ir12.1 4.205 4.205 | +500342 synmsg_bt_cl_ir13.4 4.205 4.205 | +500343 synmsg_bt_cl_ir3.9 4.205 4.205 | +500344 synmsg_bt_cl_ir8.7 4.205 4.205 | +500345 synmsg_bt_cl_ir9.7 4.205 4.205 | +500346 synmsg_bt_cl_wv6.2 4.205 4.205 | +500347 synmsg_bt_cl_wv7.3 4.205 4.205 | +500348 synmsg_bt_cs_ir8.7 4.205 4.205 | +500349 synmsg_bt_cs_ir10.8 4.205 4.205 | +500350 synmsg_bt_cs_ir12.1 4.205 4.205 | +500351 synmsg_bt_cs_ir13.4 4.205 4.205 | +500352 synmsg_bt_cs_ir3.9 4.205 4.205 | +500353 synmsg_bt_cs_ir9.7 4.205 4.205 | +500354 synmsg_bt_cs_wv6.2 4.205 4.205 | +500355 synmsg_bt_cs_wv7.3 4.205 4.205 | +500356 synmsg_rad_cl_ir10.8 4.205 4.205 | +500357 synmsg_rad_cl_ir12.1 4.205 4.205 | +500358 synmsg_rad_cl_ir13.4 4.205 4.205 | +500359 synmsg_rad_cl_ir3.9 4.205 4.205 | +500360 synmsg_rad_cl_ir8.7 4.205 4.205 | +500361 synmsg_rad_cl_ir9.7 4.205 4.205 | +500362 synmsg_rad_cl_wv6.2 4.205 4.205 | +500363 synmsg_rad_cl_wv7.3 4.205 4.205 | +500364 synmsg_rad_cs_ir10.8 4.205 4.205 | +500365 synmsg_rad_cs_ir12.1 4.205 4.205 | +500366 synmsg_rad_cs_ir13.4 4.205 4.205 | +500367 synmsg_rad_cs_ir3.9 4.205 4.205 | +500368 synmsg_rad_cs_ir8.7 4.205 4.205 | +500369 synmsg_rad_cs_ir9.7 4.205 4.205 | +500370 synmsg_rad_cs_wv6.2 4.205 4.205 | +500371 synmsg_rad_cs_wv7.3 4.205 4.205 | +500372 t_2m_s 11.206 11.206 | +500373 tmax_2m_s 15.206 15.206 | +500374 tmin_2m_s 16.206 16.206 | +500375 td_2m_s 17.206 17.206 | +500376 u_10m_s 33.206 33.206 | +500377 v_10m_s 34.206 34.206 | +500378 tot_prec_s 61.206 61.206 | +500379 clct_s 71.206 71.206 | +500380 clcl_s 73.206 73.206 | +500381 clcm_s 74.206 74.206 | +500382 clch_s 75.206 75.206 | +500383 snow_gsp_s 79.206 79.206 | +500384 t_s_s 85.206 85.206 | +500385 vmax_10m_s 187.206 187.206 | +500386 tot_prec_c 61.207 61.207 | +500387 snow_gsp_c 79.207 79.207 | +500388 vmax_10m_c 187.207 187.207 | +500389 obsmsg_alb_hrv | +500390 obsmsg_alb_nir1.6 | +500391 obsmsg_alb_vis0.6 | +500392 obsmsg_alb_vis0.8 | +500393 obsmsg_bt_ir10.8 | +500394 obsmsg_bt_ir12.0 | +500395 obsmsg_bt_ir13.4 | +500396 obsmsg_bt_ir3.9 | +500397 obsmsg_bt_ir8.7 | +500398 obsmsg_bt_ir9.7 | +500399 obsmsg_bt_wv6.2 | +500400 obsmsg_bt_wv7.3 | +51 mx2t24 51.128 | +52 mn2t24 52.128 | +53 mont 53.128 | +54 pres 1.1 1.2 1.3 54.128 | +55 mean2t24 55.128 | +56 mn2d24 56.128 | +57 uvb 57.128 | +58 par 58.128 | +59 cape 59.128 | +6 ssfr 6.128 | +60 pv 4.1 4.2 4.3 60.128 | +62 obct 62.128 | +63 stsktd 63.128 | +64 ftsktd 64.128 | +65 sktd 65.128 | +66 lai_lv 66.128 | +67 lai_hv 67.128 | +68 msr_lv 68.128 | +69 msr_hv 69.128 | +7 scfr 7.128 | +70 bc_lv 70.128 | +71 bc_hv 71.128 | +72 issrd 72.128 | +73 istrd 73.128 | +74 sdfor 74.128 | +75 crwc 75.128 | +76 cswc 76.128 | +77 etadot 77.128 | +78 tclw 78.128 | +79 tciw 79.128 | +8 sro 8.128 | +80 80.128 | +81 81.128 | +82 82.128 | +83 83.128 | +84 84.128 | +85 85.128 | +85001156 PREC_CONVEC 156.1 | +85001157 PREC_GDE_ECH 157.1 | +85001160 CAPE_INS 160.1 | +86 86.128 | +87 87.128 | +88 88.128 | +89 89.128 | +9 ssro 9.128 | +90 90.128 | +91 91.128 | +92 92.128 | +93 93.128 | +94 94.128 | +95 95.128 | +96 96.128 | +97 97.128 | +98 98.128 | +99 99.128 | diff --git a/definitions/parameters_version.def b/definitions/parameters_version.def new file mode 100644 index 000000000..a301ba834 --- /dev/null +++ b/definitions/parameters_version.def @@ -0,0 +1 @@ +transient parametersVersion=1; diff --git a/definitions/publish_new_parameters.sh b/definitions/publish_new_parameters.sh new file mode 100755 index 000000000..ce4ec6bfc --- /dev/null +++ b/definitions/publish_new_parameters.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +set -e + +# create tarfiles.txt with the list of parameter files +./create_def.pl > /dev/null + +# create the tarball with these parameter files +version=`grep parametersVersion parameters_version.def | awk 'BEGIN {FS="=";}{ sub(/ *;$/,"");print $2; }'` +cat tarfiles.txt | xargs tar zcf grib_api_parameters-v$version.tar.gz + +# get the current html download page for GRIB API +dlpage=grib_api.html +rm -f $dlpage || true +cadaver http://wedit.ecmwf.int:81/products/data/software/download << EOF +get $dlpage +EOF + +./inject_download_page.pl $dlpage > temp.html +mv temp.html $dlpage + +# upload the updated download page +cadaver http://wedit.ecmwf.int:81/products/data/software/download << EOF +put $dlpage +cd software_files +put grib_api_parameters-v$version.tar.gz +EOF diff --git a/definitions/stepUnits.table b/definitions/stepUnits.table new file mode 100644 index 000000000..6174b275a --- /dev/null +++ b/definitions/stepUnits.table @@ -0,0 +1,16 @@ +# stepUnits table used for both grib 1 and 2 +0 m Minute +1 h Hour +2 D Day +3 M Month +4 Y Year +5 10Y Decade (10 years) +6 30Y Normal (30 years) +7 C Century (100 years) +10 3h 3 hours +11 6h 6 hours +12 12h 12 hours +13 s Second +14 15m 15 minutes +15 30m 30 minutes +255 255 Missing diff --git a/definitions/tide/boot.def b/definitions/tide/boot.def new file mode 100644 index 000000000..0faade3e3 --- /dev/null +++ b/definitions/tide/boot.def @@ -0,0 +1,28 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +position startOfHeaders; +ascii[4] identifier ; + +alias ls.identifier=identifier; +transient missingValue = 9999; +constant ieeeFloats = 0; +template section1 "tide/section.1.def" ; +template mars "tide/mars_labeling.def" ; + +# Used to mark end of headers. Can be accessed with grib_get_offset() +position endOfHeadersMaker; +meta lengthOfHeaders evaluate( endOfHeadersMaker-startOfHeaders); +meta md5Headers md5(startOfHeaders,lengthOfHeaders); + + +template section4 "tide/section.4.def" ; +ascii[4] endMark ; + +position totalLength; diff --git a/definitions/tide/mars_labeling.def b/definitions/tide/mars_labeling.def new file mode 100644 index 000000000..5f3e9695b --- /dev/null +++ b/definitions/tide/mars_labeling.def @@ -0,0 +1,27 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +constant domain = "g"; +constant param = "127.128"; +constant second = 0; +constant step = 0; +constant levtype = "ml"; +constant levelist = 1; +meta date budgdate(yearOfCentury,month,day); +alias ls.step=step; +alias ls.date=date; +meta time time(hour,minute,second); + + +alias mars.step = step; +alias mars.date = date; +alias mars.time = time; +alias mars.levtype = levtype; +alias mars.param = param; +alias mars.levelist = levelist; diff --git a/definitions/tide/section.1.def b/definitions/tide/section.1.def new file mode 100644 index 000000000..754dcdc06 --- /dev/null +++ b/definitions/tide/section.1.def @@ -0,0 +1,56 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +length[3] section1Length ; +unsigned[1] gribTablesVersionNo ; +codetable[1] centre 'grib1/0.table'; +alias ls.centre=centre; + +unsigned[1] generatingProcessIdentifier ; + +unsigned[1] gridDefinition ; + +flags[1] flag 'grib1/1.table'; + +codetable[1] indicatorOfParameter 'grib1/2.[centre:l].[gribTablesVersionNo:l].table'; + +codetable[1] indicatorOfTypeOfLevel 'grib1/3.table' : string_type,edition_specific; +alias ls.levelType = indicatorOfTypeOfLevel; +codetable[2] heightPressureEtcOfLevels 'grib1/3.table'; + +# Year of century +# NOTE 6 NOT FOUND +unsigned[1] yearOfCentury ; + +# Month +unsigned[1] month ; + +# Day +unsigned[1] day; + +# Hour +unsigned[1] hour ; + +# Minute +unsigned[1] minute ; + +# Indicator of unit of time range +codetable[1] indicatorOfUnitOfTimeRange 'grib1/4.table'; + +# P1 - Period of time +# (number of time units) +unsigned[1] periodOfTime ; + +alias P1 = periodOfTime ; + +# P2 - Period of time +# (number of time units) +unsigned[1] periodOfTimeIntervals ; + + diff --git a/definitions/tide/section.4.def b/definitions/tide/section.4.def new file mode 100644 index 000000000..920259bef --- /dev/null +++ b/definitions/tide/section.4.def @@ -0,0 +1,101 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +length[3] section4Length ; + +unsigned[1] reserved=0 : hidden; + +flags[1] missingDataFlag 'grib1/1.table'; + +unsigned[1] numberOfBytesPerInteger ; + +unsigned[2] reserved=0 : hidden; + +unsigned[3] numberOfChars ; + +unsigned[3] numberOfFloats ; + +unsigned[3] numberOfInts ; + +unsigned[3] numberOfLogicals ; + +unsigned[3] numberOfReservedBytes ; + +unsigned[4] reserved=0 : hidden; +unsigned[4] reserved=0 : hidden; +unsigned[1] reserved=0 : hidden; + +ibmfloat floatVal[numberOfFloats]; + +if(numberOfBytesPerInteger == 1) { signed[1] integerValues[numberOfInts]; } +if(numberOfBytesPerInteger == 2) { signed[2] integerValues[numberOfInts]; } +if(numberOfBytesPerInteger == 3) { signed[3] integerValues[numberOfInts]; } +if(numberOfBytesPerInteger == 4) { signed[4] integerValues[numberOfInts]; } + +if(numberOfChars >= 12) +{ + ascii[2] marsClass; + ascii[2] dummy1; + ascii[2] marsType; + ascii[2] dummy2; + ascii[4] marsExpver; + + constant numberOfRemaininChars = numberOfChars - 12; + + charValues list(numberOfRemaininChars) { + ascii[1] char; + } + + + constant zero = 0; + concept isEps(zero) { 1 = { marsType = "pf"; } } + concept isSens(zero) { 1 = { marsType = "sf"; } } + + constant oper = "oper"; + + concept marsStream(oper) { + "enfo" = { marsType = "pf"; } + "enfo" = { marsType = "cf"; } + "sens" = { marsType = "sf"; } + } + + if(isEps) + { + constant perturbationNumber = 0; + alias mars.number = perturbationNumber; + } + + if(isSens) + { + constant iterationNumber = 0; + constant diagnosticNumber = 0; + alias mars.iteration = iterationNumber; + alias mars.diagnostic = diagnosticNumber; + } + + # This is commented out because some of the BUDG have the wrong info there + alias mars.stream = marsStream; + alias mars.class = marsClass; + alias mars.type = marsType; + alias mars.expver = marsExpver; + +} +else +{ + + charValues list(numberOfChars) { + ascii[1] char; + } + +} + +#reservedBytes list (numberOfReservedBytes){ +# unsigned[1] byte; +# } + diff --git a/definitions/x.grib b/definitions/x.grib new file mode 100644 index 0000000000000000000000000000000000000000..75653415567db612a93081cf365b7a0ff219ea54 GIT binary patch literal 108 zcmZ<{@^oTg$YEq)Flk6?`roh|$l_pP<6!{OARx-Xzyx7INJd5`7DfXD14A%Zf#E+3 lLj!{YW4Hy7-_RIt!CLIX^_M{bqL_h)gMq $dest/$f +done + +p4 add $dest/*.html + diff --git a/doxygen/conversion.dox b/doxygen/conversion.dox new file mode 100644 index 000000000..d1be37a6b --- /dev/null +++ b/doxygen/conversion.dox @@ -0,0 +1,144 @@ +/*! \page conversion GRIB edition 1 to 2 conversion + +GRIB messages are at the moment exchanged in edition 1 or 2. +Although the information content of two messages in different editions +is almost the same, their binary format is very different and +organised in a different way. + +The conversion from grib edition 1 (grib1) to edition 2 (grib2) is +a format translation without any loss of information. Conversely the conversion +from grib2 to grib1 is not always lossless because the edition 2 format has +been extended to allow a wider set of scientific fields to be coded. + +Since the new grib2 format is going to replace grib1 we will focus more on the +grib1 to grib2 conversion rather than the opposite, which sometimes is not possible. + +The conversion algorithm should be easy to implement, but there are some +factors making it challenging. +First of all the new designed grib2 is in some points semantically +different from grib1. +Therefore it doesn't allow an easy mapping of the meaning across +the two versions. +Moreover some of the numeric code tables semantically identical +are numerically different, which doesn't allow again an easy mapping +between them, because the numeric codes for the same information element +are different. +We refer in particular to the type of level which is numerically different +in the two editions. + +Another element to be considered in a conversion algorithm is that +many meteorological operational centres have been developing local patches +to the GRIB specification to overcome the limitations of grib1. +This local extensions or local tables are not coherent and sometimes are +not properly organised. +It is widespread, for example, the use of local parameter tables. + +The aim of the conversion facilities provided in GRIB API is to be flexible +enough to define conversion rules also for local tables and local +extensions and to allow the user to configure locally the library to interpret +fields coded in a local flavour of the grib specifications. + +\section conv_tech Conversion technique +To convert a grib message from edition 1 to 2 with GRIB API it is enough to +set the key edition=2 (see grib_set). +The conversion is performed automatically provided that the library is configured +properly to translate the parameter information. Indeed the information regarding time +and space is always translated automatically, while the parameter information, +which is sometime dependent on local tables has to be configured by the user if it is +not included in the main set of parameter conversion rules contained in GRIB API +distribution. + +\section paramconv Parameters conversion +A list of all the parameters +recognised by the +latest version of GRIB API +is reported for consultation. The list contains their representation +in edition 1 and 2 and for some of them the netcdf CF compliant name. + +Each parameter is identified by a paramId, which is a valid GRIB API key, +and is described through the keys shortName, name, units. + +For each parameter we can have one or more grib1 and/or grib2 representations. +A grib representation is a set of keys describing the parameter in the coding +format (grib1 or grib2). If for a parameter the grib1 and grib2 +representations are both present in the list then the conversion from +grib1 to grib2 is defined and can be automatically performed by +GRIB API just setting edition=2. + +A parameter can have more than one representation for a single format, +because local representations are allowed depending on the centre +defined in the grib message. + +A local description can be added just editing the following definition +files: paramId.def, shortName.def, name.def, units.def. +The syntax of these files is + +value = { key1=value1; key2=value2; key3=value3; ... }. + +A definition file containing the rules for a given centre and edition +has to be placed in the directory grib[edition]/localConcepts/[centre:s]. +Where [edition] is 1 or 2 and [centre:s] is the string describing the +centre in the official table 0 of grib1. + +The files describing the local parameters for ECMWF grib1 are located in +grib1/localConcepts/ecmf. +If for example we need to define "2 metre temperature" for ECMWF we have +to add the following lines to the corresponding files + + - paramId.def \n + '167' = {table2Version=128; indicatorOfParameter=167;} + - shortName.def \n + '2t' = {table2Version=128; indicatorOfParameter=167;} + - name.def \n + '2 metre temperature' = {table2Version=128; indicatorOfParameter=167;} + - units.def \n + 'K' = {table2Version=128; indicatorOfParameter=167;} + +The same syntax can be used to describe the same parameter in grib2 to +be able to convert the information from grib1 to grib2 and to be able +to have the same paramId, name, shortName, units for both editions. + +\section localconf Local configuration +A site or user configuration is possible to allow interpretation and conversion of +grib 1 messages encoded in non standard local ways. +To separete the definition files contained in the installation directory from the +definition files described in the previous section, in which the user can put +some extra and local parameter definitions, +the environment variable GRIB_DEFINITION_PATH can be used. + +To set properly this environment variable we have first to find the definitions +files directory used by GRIB API. +At this aim we can use the tool grib_info which is providing some configuration +information about the library. + + +\verbatim +> grib_info + +grib_api Version 1.8.0 + +Default definition files path is used: /usr/local/lib/grib_api/definitions +Definition files path can be changed setting GRIB_DEFINITION_PATH environment variable + +Default SAMPLES path is used: /usr/local/lib/metaps/lib/grib_api/samples +SAMPLES path can be changed setting GRIB_SAMPLES_PATH environment variable +\endverbatim + +To enable the parameter defintions described in the files contained in our directory +\code +/home/u/grib_api/definitions +\endcode + +we have to set the environment variable GRIB_DEFINITION_PATH as + +\verbatim +export GRIB_DEFINITION_PATH=/home/u/definitions:/usr/local/lib/grib_api/definitions +\endverbatim + +so that our definition of the parameters will be read by GRIB API during run time. +The content of the definition files in the directory /home/u/definitions has to be +properly written following the instructions of the previous section. + + + +*/ diff --git a/doxygen/doxygen.css b/doxygen/doxygen.css new file mode 100644 index 000000000..8402fd217 --- /dev/null +++ b/doxygen/doxygen.css @@ -0,0 +1,322 @@ + +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.nav { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} +A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} +A.codeRef:link { font-weight: normal; color: #0000FF} +A.codeRef:visited { font-weight: normal; color: #0000FF} +DL.el { margin-left: -1cm } +.fragment { + font-family: monospace, fixed; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } + +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } + +TD.indexkey { + background-color: #e8eef2; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #e8eef2; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +TD.tiny { font-size: 75%; +} + +.dirtab { padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} +TH.dirtab { background: #e8eef2; + font-weight: bold; +} +HR { height: 1px; + border: none; + border-top: 1px solid black; +} + +/* Style for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #606060; + font-weight: normal; +} +.memnav { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +.memitem { + padding: 4px; + background-color: #eef3f5; + border-width: 1px; + border-style: solid; + border-color: #dedeee; + -moz-border-radius: 8px 8px 8px 8px; +} +.memname { + white-space: nowrap; + font-weight: bold; +} +.memdoc{ + padding-left: 10px; +} +.memproto { + background-color: #d5e1e8; + width: 100%; + border-width: 1px; + border-style: solid; + border-color: #84b0c7; + font-weight: bold; + -moz-border-radius: 8px 8px 8px 8px; +} +.paramkey { + text-align: right; +} +.paramtype { + white-space: nowrap; +} +.paramname { + color: #602020; + font-style: italic; + white-space: nowrap; +} +/* End Styling for detailed member documentation */ + +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin:0.5em; +} +.directory { font-size: 9pt; font-weight: bold; } +.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } +.directory > h3 { margin-top: 0; } +.directory p { margin: 0px; white-space: nowrap; } +.directory div { display: none; margin: 0px; } +.directory img { vertical-align: -30%; } diff --git a/doxygen/doxypy.py b/doxygen/doxypy.py new file mode 100755 index 000000000..649281b24 --- /dev/null +++ b/doxygen/doxypy.py @@ -0,0 +1,414 @@ +#!/usr/bin/env python + +__applicationName__ = "doxypy" +__blurb__ = """ +doxypy is an input filter for Doxygen. It preprocesses python +files so that docstrings of classes and functions are reformatted +into Doxygen-conform documentation blocks. +""" + +__doc__ = __blurb__ + \ +""" +In order to make Doxygen preprocess files through doxypy, simply +add the following lines to your Doxyfile: + FILTER_SOURCE_FILES = YES + INPUT_FILTER = "python /path/to/doxypy.py" +""" + +__version__ = "0.4.2" +__date__ = "14th October 2009" +__website__ = "http://code.foosel.org/doxypy" + +__author__ = ( + "Philippe 'demod' Neumann (doxypy at demod dot org)", + "Gina 'foosel' Haeussge (gina at foosel dot net)" +) + +__licenseName__ = "GPL v2" +__license__ = """This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import sys +import re + +from optparse import OptionParser, OptionGroup + +class FSM(object): + """Implements a finite state machine. + + Transitions are given as 4-tuples, consisting of an origin state, a target + state, a condition for the transition (given as a reference to a function + which gets called with a given piece of input) and a pointer to a function + to be called upon the execution of the given transition. + """ + + """ + @var transitions holds the transitions + @var current_state holds the current state + @var current_input holds the current input + @var current_transition hold the currently active transition + """ + + def __init__(self, start_state=None, transitions=[]): + self.transitions = transitions + self.current_state = start_state + self.current_input = None + self.current_transition = None + + def setStartState(self, state): + self.current_state = state + + def addTransition(self, from_state, to_state, condition, callback): + self.transitions.append([from_state, to_state, condition, callback]) + + def makeTransition(self, input): + """Makes a transition based on the given input. + + @param input input to parse by the FSM + """ + for transition in self.transitions: + [from_state, to_state, condition, callback] = transition + if from_state == self.current_state: + match = condition(input) + if match: + self.current_state = to_state + self.current_input = input + self.current_transition = transition + if options.debug: + print >>sys.stderr, "# FSM: executing (%s -> %s) for line '%s'" % (from_state, to_state, input) + callback(match) + return + +class Doxypy(object): + def __init__(self): + string_prefixes = "[uU]?[rR]?" + + self.start_single_comment_re = re.compile("^\s*%s(''')" % string_prefixes) + self.end_single_comment_re = re.compile("(''')\s*$") + + self.start_double_comment_re = re.compile("^\s*%s(\"\"\")" % string_prefixes) + self.end_double_comment_re = re.compile("(\"\"\")\s*$") + + self.single_comment_re = re.compile("^\s*%s(''').*(''')\s*$" % string_prefixes) + self.double_comment_re = re.compile("^\s*%s(\"\"\").*(\"\"\")\s*$" % string_prefixes) + + self.defclass_re = re.compile("^(\s*)(def .+:|class .+:)") + self.empty_re = re.compile("^\s*$") + self.hashline_re = re.compile("^\s*#.*$") + self.importline_re = re.compile("^\s*(import |from .+ import)") + + self.multiline_defclass_start_re = re.compile("^(\s*)(def|class)(\s.*)?$") + self.multiline_defclass_end_re = re.compile(":\s*$") + + ## Transition list format + # ["FROM", "TO", condition, action] + transitions = [ + ### FILEHEAD + + # single line comments + ["FILEHEAD", "FILEHEAD", self.single_comment_re.search, self.appendCommentLine], + ["FILEHEAD", "FILEHEAD", self.double_comment_re.search, self.appendCommentLine], + + # multiline comments + ["FILEHEAD", "FILEHEAD_COMMENT_SINGLE", self.start_single_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_SINGLE", "FILEHEAD", self.end_single_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_SINGLE", "FILEHEAD_COMMENT_SINGLE", self.catchall, self.appendCommentLine], + ["FILEHEAD", "FILEHEAD_COMMENT_DOUBLE", self.start_double_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_DOUBLE", "FILEHEAD", self.end_double_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_DOUBLE", "FILEHEAD_COMMENT_DOUBLE", self.catchall, self.appendCommentLine], + + # other lines + ["FILEHEAD", "FILEHEAD", self.empty_re.search, self.appendFileheadLine], + ["FILEHEAD", "FILEHEAD", self.hashline_re.search, self.appendFileheadLine], + ["FILEHEAD", "FILEHEAD", self.importline_re.search, self.appendFileheadLine], + ["FILEHEAD", "DEFCLASS", self.defclass_re.search, self.resetCommentSearch], + ["FILEHEAD", "DEFCLASS_MULTI", self.multiline_defclass_start_re.search, self.resetCommentSearch], + ["FILEHEAD", "DEFCLASS_BODY", self.catchall, self.appendFileheadLine], + + ### DEFCLASS + + # single line comments + ["DEFCLASS", "DEFCLASS_BODY", self.single_comment_re.search, self.appendCommentLine], + ["DEFCLASS", "DEFCLASS_BODY", self.double_comment_re.search, self.appendCommentLine], + + # multiline comments + ["DEFCLASS", "COMMENT_SINGLE", self.start_single_comment_re.search, self.appendCommentLine], + ["COMMENT_SINGLE", "DEFCLASS_BODY", self.end_single_comment_re.search, self.appendCommentLine], + ["COMMENT_SINGLE", "COMMENT_SINGLE", self.catchall, self.appendCommentLine], + ["DEFCLASS", "COMMENT_DOUBLE", self.start_double_comment_re.search, self.appendCommentLine], + ["COMMENT_DOUBLE", "DEFCLASS_BODY", self.end_double_comment_re.search, self.appendCommentLine], + ["COMMENT_DOUBLE", "COMMENT_DOUBLE", self.catchall, self.appendCommentLine], + + # other lines + ["DEFCLASS", "DEFCLASS", self.empty_re.search, self.appendDefclassLine], + ["DEFCLASS", "DEFCLASS", self.defclass_re.search, self.resetCommentSearch], + ["DEFCLASS", "DEFCLASS_MULTI", self.multiline_defclass_start_re.search, self.resetCommentSearch], + ["DEFCLASS", "DEFCLASS_BODY", self.catchall, self.stopCommentSearch], + + ### DEFCLASS_BODY + + ["DEFCLASS_BODY", "DEFCLASS", self.defclass_re.search, self.startCommentSearch], + ["DEFCLASS_BODY", "DEFCLASS_MULTI", self.multiline_defclass_start_re.search, self.startCommentSearch], + ["DEFCLASS_BODY", "DEFCLASS_BODY", self.catchall, self.appendNormalLine], + + ### DEFCLASS_MULTI + ["DEFCLASS_MULTI", "DEFCLASS", self.multiline_defclass_end_re.search, self.appendDefclassLine], + ["DEFCLASS_MULTI", "DEFCLASS_MULTI", self.catchall, self.appendDefclassLine], + ] + + self.fsm = FSM("FILEHEAD", transitions) + self.outstream = sys.stdout + + self.output = [] + self.comment = [] + self.filehead = [] + self.defclass = [] + self.indent = "" + + def __closeComment(self): + """Appends any open comment block and triggering block to the output.""" + + if options.autobrief: + if len(self.comment) == 1 \ + or (len(self.comment) > 2 and self.comment[1].strip() == ''): + self.comment[0] = self.__docstringSummaryToBrief(self.comment[0]) + + if self.comment: + block = self.makeCommentBlock() + self.output.extend(block) + + if self.defclass: + self.output.extend(self.defclass) + + def __docstringSummaryToBrief(self, line): + """Adds \\brief to the docstrings summary line. + + A \\brief is prepended, provided no other doxygen command is at the + start of the line. + """ + stripped = line.strip() + if stripped and not stripped[0] in ('@', '\\'): + return "\\brief " + line + else: + return line + + def __flushBuffer(self): + """Flushes the current outputbuffer to the outstream.""" + if self.output: + try: + if options.debug: + print >>sys.stderr, "# OUTPUT: ", self.output + print >>self.outstream, "\n".join(self.output) + self.outstream.flush() + except IOError: + # Fix for FS#33. Catches "broken pipe" when doxygen closes + # stdout prematurely upon usage of INPUT_FILTER, INLINE_SOURCES + # and FILTER_SOURCE_FILES. + pass + self.output = [] + + def catchall(self, input): + """The catchall-condition, always returns true.""" + return True + + def resetCommentSearch(self, match): + """Restarts a new comment search for a different triggering line. + + Closes the current commentblock and starts a new comment search. + """ + if options.debug: + print >>sys.stderr, "# CALLBACK: resetCommentSearch" + self.__closeComment() + self.startCommentSearch(match) + + def startCommentSearch(self, match): + """Starts a new comment search. + + Saves the triggering line, resets the current comment and saves + the current indentation. + """ + if options.debug: + print >>sys.stderr, "# CALLBACK: startCommentSearch" + self.defclass = [self.fsm.current_input] + self.comment = [] + self.indent = match.group(1) + + def stopCommentSearch(self, match): + """Stops a comment search. + + Closes the current commentblock, resets the triggering line and + appends the current line to the output. + """ + if options.debug: + print >>sys.stderr, "# CALLBACK: stopCommentSearch" + self.__closeComment() + + self.defclass = [] + self.output.append(self.fsm.current_input) + + def appendFileheadLine(self, match): + """Appends a line in the FILEHEAD state. + + Closes the open comment block, resets it and appends the current line. + """ + if options.debug: + print >>sys.stderr, "# CALLBACK: appendFileheadLine" + self.__closeComment() + self.comment = [] + self.output.append(self.fsm.current_input) + + def appendCommentLine(self, match): + """Appends a comment line. + + The comment delimiter is removed from multiline start and ends as + well as singleline comments. + """ + if options.debug: + print >>sys.stderr, "# CALLBACK: appendCommentLine" + (from_state, to_state, condition, callback) = self.fsm.current_transition + + # single line comment + if (from_state == "DEFCLASS" and to_state == "DEFCLASS_BODY") \ + or (from_state == "FILEHEAD" and to_state == "FILEHEAD"): + # remove comment delimiter from begin and end of the line + activeCommentDelim = match.group(1) + line = self.fsm.current_input + self.comment.append(line[line.find(activeCommentDelim)+len(activeCommentDelim):line.rfind(activeCommentDelim)]) + + if (to_state == "DEFCLASS_BODY"): + self.__closeComment() + self.defclass = [] + # multiline start + elif from_state == "DEFCLASS" or from_state == "FILEHEAD": + # remove comment delimiter from begin of the line + activeCommentDelim = match.group(1) + line = self.fsm.current_input + self.comment.append(line[line.find(activeCommentDelim)+len(activeCommentDelim):]) + # multiline end + elif to_state == "DEFCLASS_BODY" or to_state == "FILEHEAD": + # remove comment delimiter from end of the line + activeCommentDelim = match.group(1) + line = self.fsm.current_input + self.comment.append(line[0:line.rfind(activeCommentDelim)]) + if (to_state == "DEFCLASS_BODY"): + self.__closeComment() + self.defclass = [] + # in multiline comment + else: + # just append the comment line + self.comment.append(self.fsm.current_input) + + def appendNormalLine(self, match): + """Appends a line to the output.""" + if options.debug: + print >>sys.stderr, "# CALLBACK: appendNormalLine" + self.output.append(self.fsm.current_input) + + def appendDefclassLine(self, match): + """Appends a line to the triggering block.""" + if options.debug: + print >>sys.stderr, "# CALLBACK: appendDefclassLine" + self.defclass.append(self.fsm.current_input) + + def makeCommentBlock(self): + """Indents the current comment block with respect to the current + indentation level. + + @returns a list of indented comment lines + """ + doxyStart = "##" + commentLines = self.comment + + commentLines = map(lambda x: "%s# %s" % (self.indent, x), commentLines) + l = [self.indent + doxyStart] + l.extend(commentLines) + + return l + + def parse(self, input): + """Parses a python file given as input string and returns the doxygen- + compatible representation. + + @param input the python code to parse + @returns the modified python code + """ + lines = input.split("\n") + + for line in lines: + self.fsm.makeTransition(line) + + if self.fsm.current_state == "DEFCLASS": + self.__closeComment() + + return "\n".join(self.output) + + def parseFile(self, filename): + """Parses a python file given as input string and returns the doxygen- + compatible representation. + + @param input the python code to parse + @returns the modified python code + """ + f = open(filename, 'r') + + for line in f: + self.parseLine(line.rstrip('\r\n')) + if self.fsm.current_state == "DEFCLASS": + self.__closeComment() + self.__flushBuffer() + f.close() + + def parseLine(self, line): + """Parse one line of python and flush the resulting output to the + outstream. + + @param line the python code line to parse + """ + self.fsm.makeTransition(line) + self.__flushBuffer() + +def optParse(): + """Parses commandline options.""" + parser = OptionParser(prog=__applicationName__, version="%prog " + __version__) + + parser.set_usage("%prog [options] filename") + parser.add_option("--autobrief", + action="store_true", dest="autobrief", + help="use the docstring summary line as \\brief description" + ) + parser.add_option("--debug", + action="store_true", dest="debug", + help="enable debug output on stderr" + ) + + ## parse options + global options + (options, filename) = parser.parse_args() + + if not filename: + print >>sys.stderr, "No filename given." + sys.exit(-1) + + return filename[0] + +def main(): + """Starts the parser on the file given by the filename as the first + argument on the commandline. + """ + filename = optParse() + fsm = Doxypy() + fsm.parseFile(filename) + +if __name__ == "__main__": + main() diff --git a/doxygen/environment.dox b/doxygen/environment.dox new file mode 100644 index 000000000..e7cf1ccca --- /dev/null +++ b/doxygen/environment.dox @@ -0,0 +1,23 @@ +/*! \defgroup environment Environment variables +Environment variables applicable to grib_api: + +\b GRIB_API_DEBUG - If set to 1, it will enable debug level logging messages to be displayed by the library. + +\b GRIB_API_FAIL_IF_LOG_MESSAGE - If set to 1, it will cause the library to exit when an error or warning is encountered. + +\b GRIB_API_IO_BUFFER_SIZE - Defines the size in bytes of the buffer used in the IO calls from Fortran and in the tools. + +\b GRIB_API_NO_ABORT - When set to 1 it causes grib_api not to abort execution on failing asserts. + +\b GRIB_API_WRITE_ON_FAIL - When set to 1 it will write the last processed grib message in a file named $PID_$FILEID_error.grib on failure in a fortran function used without the return code argument. + +\b GRIB_DEFINITION_PATH - Set to the folder containing the set of definition files you want grib_api to use instead of the default one. + +\b GRIB_GRIBEX_MODE_ON - When set to 1 it will enable the GRIBEX compatibility mode and grib_api will produce GRIB messages readable by GRIBEX. + +\b GRIB_IEEE_PACKING - Accepted values 32 or 64 for 32 or 64 bits IEEE floating point respectively. The GRIB message produced will contain data written in IEEE floating point without packing. + +\b GRIB_SAMPLES_PATH - Set to the folder containing the set of samples you want grib_api to use instead of the default one. + +\b GRIB_TEMPLATES_PATH - Now obsolete. See GRIB_SAMPLES_PATH. +*/ diff --git a/doxygen/examples.dox b/doxygen/examples.dox new file mode 100644 index 000000000..27b9abb66 --- /dev/null +++ b/doxygen/examples.dox @@ -0,0 +1,58 @@ +/*! \page examples Grib API examples + +\example get.c get.c How to get values through the key names. +\example set.c set.c How to set values through the key names. +\example keys_iterator.c keys_iterator.c How to get the names of all the keys +defined in a message and how to iterate through them. +\example iterator.c iterator.c How to use an iterator on latitude, longitude, values. +\example precision.c precision.c How to control precision when coding a grib field. +\example multi.c multi.c How to decode a grib message containing many fields. +\example multi_write.c multi_write.c How to encode a grib message containing many fields. +\example print_data.c print_data.c How to print all the data from a grib message. +\example nearest.c nearest.c How to find the nearest grid points. + +\example index.f90 How access a grib file through and index. +\example get.f90 How to get values through the key names. +\example count_messages.f90 count the messages in a file and loop through them. +\example get_pl.f90 How to get the list of number of points for each parallel in reduced grids. +\example get_pv.f90 How to get the list of levels. +\example get_data.f90 How to get latitude/longitude/values. +\example set.f90 How to set values through the key names. +\example set_bitmap.f90 How to set and use a bitmap. +\example set_missing.f90 How to set a missing value in the header. +\example set_pv.f90 How to set the list of levels. +\example samples.f90 How to create a new message from a samples. +\example clone.f90 How to clone a message. +\example copy_message.f90 How to copy a message in memory and create a new message. +\example keys_iterator.f90 How to get the names of all the keys +defined in a message and how to iterate through them. +\example precision.f90 How to control precision when coding a grib field. +\example multi_write.f90 How to encode a grib message containing many fields. +\example multi.f90 How to decode a grib message containing many fields. +\example print_data.f90 How to print all the data contained in a grib file. +\example nearest.f90 How to find the nearest grid points. + +\example get_fortran.F get_fortran.F How to get values through the key names. +\example set_fortran.F set_fortran.F How to set values through the key names. +\example keys_iterator_fortran.F keys_iterator_fortran.F How to get the names of all the keys +defined in a message and how to iterate through them. +\example iterator_fortran.F iterator_fortran.F How to use an iterator on latitude, longitude, values. +\example precision_fortran.F precision_fortran.F How to control precision when coding a grib field. +\example multi_fortran.F multi_fortran.F How to decode a grib message containing many fields. +\example print_data_fortran.F print_data_fortran.F How to print all the data from a grib message. + +\example index.py How access a grib file through and index. +\example get.py How to get values through the key names. +\example print_data.py How to print all the data contained in a grib file. +\example set.py How to set values through the key names. +\example nearest.py How to find the nearest grid points. +\example set_missing.py How to set a missing value in the header. +\example count_messages.py How to count the messages in a file and loop through them. +\example samples.py How to create a new message from a sample. +\example clone.py How to clone a message. +\example iterator.py How to use an iterator on latitude, longitude, values. +\example keys_iterator.py How to get the names of all the keys. +\example multi_write.py How to encode a multi grib message. +\example set_pv.py How to encode the pv coefficients. + +*/ diff --git a/doxygen/grib_api.dox b/doxygen/grib_api.dox new file mode 100644 index 000000000..b769b2ed7 --- /dev/null +++ b/doxygen/grib_api.dox @@ -0,0 +1,79 @@ +/*! \mainpage GRIB API + +\section new New + +- GRIB edition 1 to 2 conversion +- Parameters in GRIB API +- GRIB API keys + - GRIB edition 1 + - GRIB edition 2 + - Edition independent + + +\section overview Overview + +The grib_api is the application program interface developed at ECMWF +to provide an easy and realiable way for encoding and +decoding WMO FM-92 GRIB +edition 1 and +edition 2 messages. + +With the grib_api library, that is written entirely in C, some command line \ref tools "tools" are +provided to give a quick way to manipulate grib data. Moreover a \ref grib_api "Fortran interface 90" is available +giving access to the main features of the C library. + +The library is designed to access and modify messages in both editions with the same +\ref get_set "function calls" using a set of \ref keys to access the coded information +( examples: \ref get.f90 "get.f90" \ref set.f90 "set.f90", \ref get.c "get.c", \ref set.c "set.c", \ref grib_get_examples "grib_get", \ref grib_set_examples "grib_set" ). + +The \ref keys "keys" available for a message are different depending not only on the edition +but also and mainly on the type of each message and the information it contains. +A list of all the available keys in a message can be obtained dynamically using the +library as shown in \ref keys_iterator.c "keys_iterator.c" or using the \ref tools +as shown in \ref grib_dump_examples "grib_dump" or \ref grib_keys_examples "grib_keys". + +GRIB API will replace the GRIBEX function and a +table of conversion between the +numeric encoding of GRIBEX and the alphanumeric keys of GRIB API is provided to help +the migration. + +To learn how to use the grib_api we recommend the user works through the \ref grib_examples. + +Reference manuals are also provided for the C library (organized in \ref modules) and for the +\ref grib_api "Fortran 90 interface". + +\ref installation "Installation" instructions are also provided. + +\section ecwf_users Compiling and linking on ECMWF platforms + +The grib API is installed on all systems at ECMWF with both its components: the library +and the tools.\n +The latest version of the tools is always available in the system PATH so that +users can begin using the tools immediately by typing directly the tool name (\ref tools "see tools reference").\n +The latest version of the library is also installed on any platform and it is available for linking through the +following two environment variables: $GRIB_API_INCLUDE $GRIB_API_LIB.\n\n +Here is a short summary on how to compile and link on ECMWF systems:\n + +- ecgate, hpce, hpcf +\verbatim +> xlc -o foo foo.c $GRIB_API_INCLUDE $GRIB_API_LIB -lm +\endverbatim \n +\verbatim +> xlf90 -o foo foo.f90 $GRIB_API_INCLUDE $GRIB_API_LIB +\endverbatim\n +- linux cluster (C programs) +\verbatim +> gcc -m32 -o foo foo.c $GRIB_API_INCLUDE $GRIB_API_LIB +\endverbatim \n +- workstation (C programs) +\verbatim +> gcc -o foo foo.c $GRIB_API_INCLUDE $GRIB_API_LIB +\endverbatim \n +- linux cluster,workstation (Fortran programs) +\verbatim +> use pgf90 +> pgf90 -o foo foo.f90 $GRIB_API_INCLUDE $GRIB_API_LIB +\endverbatim\n + + +*/ diff --git a/doxygen/grib_api_site.cfg b/doxygen/grib_api_site.cfg new file mode 100644 index 000000000..4edf8eeee --- /dev/null +++ b/doxygen/grib_api_site.cfg @@ -0,0 +1,300 @@ +# Doxyfile 1.5.1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = grib_api +PROJECT_NUMBER = +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = /var/tmp/mac/p4/grib_api/main/doxygen/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = YES +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = YES +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = YES +SHOW_INCLUDE_FILES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = keys.dox \ + examples.dox \ + grib_examples.dox \ + modules.dox \ + installation.dox \ + conversion.dox \ + ../src/grib_api.h \ + ../examples/C \ + ../examples/F90 \ + ../examples/F77 \ + ../examples/python \ + ../fortran/grib_f90.f90 \ + ../tools/tools.dox \ + ../tools/grib_ls.dox \ + ../tools/grib_get.dox \ + ../tools/grib_get_data.dox \ + ../tools/grib_set.dox \ + ../tools/grib_dump.dox \ + ../tools/grib_filter.dox \ + ../tools/grib_compare.dox \ + ../tools/grib_keys.dox \ + ../tools/grib_copy.dox \ + ../tools/grib_index_build.dox \ + gribapi.py \ + grib_api.dox \ + environment.dox +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.PY +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = ../examples/C ../examples/F90 ../examples/F77 ../examples/python +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = *.py="./doxypy.py" +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = ../html_web +HTML_FILE_EXTENSION = .html +HTML_HEADER = head.html +HTML_FOOTER = tail.html +HTML_STYLESHEET = doxygen.css +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = YES +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = YES +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/doxygen/grib_api_wiz.cfg b/doxygen/grib_api_wiz.cfg new file mode 100644 index 000000000..981e49ec7 --- /dev/null +++ b/doxygen/grib_api_wiz.cfg @@ -0,0 +1,298 @@ +# Doxyfile 1.5.1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = grib_api +PROJECT_NUMBER = +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = /var/tmp/mac/p4/grib_api/main/doxygen/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = YES +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = YES +SHOW_INCLUDE_FILES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = grib_api.dox \ + keys.dox \ + examples.dox \ + grib_examples.dox \ + modules.dox \ + installation.dox \ + ../src/grib_api.h \ + ../fortran/grib_f90.f90 \ + ../examples/C \ + ../examples/F90 \ + ../examples/F77 \ + ../examples/python \ + ../tools/tools.dox \ + ../tools/grib_ls.dox \ + ../tools/grib_get.dox \ + ../tools/grib_get_data.dox \ + ../tools/grib_set.dox \ + ../tools/grib_dump.dox \ + ../tools/grib_filter.dox \ + ../tools/grib_compare.dox \ + ../tools/grib_keys.dox \ + ../tools/grib_copy.dox \ + ../tools/grib_index_build.dox \ + ../python/gribapi.py +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.PY +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = ../examples/C ../examples/F90 ../examples/F77 ../examples/python +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = *.py="./doxypy.py" +FILTER_SOURCE_FILES = +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = ../html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = YES +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/doxygen/grib_examples.dox b/doxygen/grib_examples.dox new file mode 100644 index 000000000..4bd770bed --- /dev/null +++ b/doxygen/grib_examples.dox @@ -0,0 +1,69 @@ +/*! \page grib_examples Grib API examples + +The main features of the grib_api are explained here through some simple examples +that can be taken as a starting point to write more complex programs.\n + +\section python Python +- \ref index.py "index.py" How access a grib file through and index. +- \ref get.py "get.py" How to get values through the key names. +- \ref print_data.py "print_data.py" How to print all the data contained in a grib file. +- \ref set.py "set.py" How to set values through the key names. +- \ref nearest.py "nearest.py" How to find the nearest grid points. +- \ref set_missing.py "set_missing.py" How to set a missing value in the header. +- \ref count_messages.py "count_messages.py" How to count the messages in a file and loop through them. +- \ref samples.py "samples.py" How to create a new message from a sample. +- \ref clone.py "clone.py" How to clone a message. +- \ref iterator.py "iterator.py" How to use an iterator on latitude, longitude, values. +- \ref keys_iterator.py "keys_iterator.py" How to get the names of all the keys. +- \ref multi_write.py "multi_write.py" How to encode a multi grib message. +- \ref set_pv.py "set_pv.py" How to encode the pv coefficients. + +\section fortran90 Fortran 90 +- \ref index.f90 "index.f90" how to access a grib file through an index. +- \ref get.f90 "get.f90" how to get values through the key names. +- \ref count_messages.f90 "count_messages.f90" count the messages in a file and loop through them. +- \ref get_pl.f90 "get_pl.f90" how to get the list of number of points for each parallel in reduced grids. +- \ref get_pv.f90 "get_pv.f90" how to get the list of levels. +- \ref get_data.f90 "get_data.f90" how to get latitude/longitude/values. +- \ref set.f90 "set.f90" how to set values through the key names. +- \ref set_bitmap.f90 "set_bitmap.f90" how to set and use a bitmap. +- \ref set_missing.f90 "set_missing.f90" how to set a missing value in the header. +- \ref set_pv.f90 "set_pv.f90" how to set the list of levels. +- \ref samples.f90 "samples.f90" how to create a new message from a template. +- \ref clone.f90 "clone.f90" how to clone a message. +- \ref copy_message.f90 "copy_message.f90" how to copy a message in memory and create a new message. +- \ref keys_iterator.f90 "keys_iterator.f90" how to get the names of all the keys +defined in a message and how to iterate through them. +- \ref precision.f90 "precision.f90" how to control precision when coding a grib field. +- \ref multi_write.f90 "multi_write.f90" how to encode a grib message containing many fields. +- \ref multi.f90 "multi.f90" how to decode a grib message containing many fields. +- \ref print_data.f90 "print_data.f90" how to print all the data contained in a grib file. +- \ref nearest.f90 "nearest.f90" how to find the nearest grid points. + +\section C +- \ref get.c "get.c" is an example showing how to get values through the key names. +- \ref set.c "set.c" is an example illustrating how to set values through the key names. +- \ref keys_iterator.c "keys_iterator.c" explains how to get the names of all the keys +defined in a message and how to iterate through them. +- \ref iterator.c "iterator.c" shows how to use an iterator on latitude, longitude, values. +- \ref precision.c "precision.c" illustrates how to control precision when coding a grib field. +- \ref multi.c "multi.c" is an example describing how to decode a grib message containing many fields. +- \ref print_data.c "print_data.c" is an example on how to print all the data contained in a grib file. +- \ref nearest.c "nearest.c" is an example on how to find the nearest grid points. +- \ref multi_write.c "multi_write.c" how to encode a grib message containing many fields. + +\section fortran77 Fortran 77 +- \ref get_fortran.F "get_fortran.F" is an example showing how to get values through the key names. +- \ref set_fortran.F "set_fortran.F" is an example illustrating how to set values through the key names. +- \ref keys_iterator_fortran.F "keys_iterator_fortran.F" explains how to get the names of all the keys +defined in a message and how to iterate through them. +- \ref iterator_fortran.F "iterator_fortran.F" shows how to use an iterator on latitude, longitude, values. +- \ref precision_fortran.F "precision_fortran.F" illustrates how to control precision when coding a grib field. +- \ref multi_fortran.F "multi_fortran.F" is an example describing how to decode a grib message containing many fields. +- \ref print_data_fortran.F "print_data_fortran.F" is an example on how to print all the data contained in a grib file. + + +*/ +/*! \page examples Grib API examples + + diff --git a/doxygen/gribex/callGribex.html b/doxygen/gribex/callGribex.html new file mode 100644 index 000000000..32acabc93 --- /dev/null +++ b/doxygen/gribex/callGribex.html @@ -0,0 +1,453 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home page  +
+ + + + + + + + + + + + + + + + + + + +
Home Your Room Login Contact Feedback Site Map Search: +  
+
+
Discover this product  + + + + + + + + + +
About Us
+ Overview
+ Getting here
+ Committees
Products
+ Forecasts
+ Order Data
+ Order +Software
+
Services
+ Computing
+ Archive
+ PrepIFS
+
Research
+ Modelling
+ Reanalysis
+ Seasonal
+
Publications
+ Newsletters
+ Manuals
+ Libraries
+
News&Events
+ Calendar
+ Employment
+ Open Tenders
+
+
+   + + + + + +
+ +Home >  +Publications >  +Manuals > +Grib API>  +  +
+
  +   +

+

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +  
+
  + + + +

+      

The following GRIBEX Fortan interface is not present any +longer in the GRIB API. You will have seen from the GRIB API Fortran +90 interface that the information contained in the grib message +can be accessed through alphanumeric keys.

+

In your Fortran code, you will have to name explicitly the keys that you +are using. The tables below will help you to find the key names +corresponding to the "old" GRIB header section elements. +

+

These tables include the GRIB API Coded key names and also + Recommended GRIB API key names. You should use the latter.
+

+

  INTEGER
INTEGER KSEC0(2)
INTEGER KSEC1(1024)
INTEGER KSEC2(1024)
INTEGER KSEC3(2)
INTEGER KSEC4(512)
INTEGER KLENP, KLENG, KWORD, KRET
INTEGER KGRIB(*)
C
REAL PSEC2(512)
REAL PSEC3(2)
REAL PSEC4(*)
C
CHARACTER*1 HOPER
:
:
CALL GRIBEX(KSEC0,KSEC1,KSEC2,PSEC2,KSEC3,PSEC3,KSEC4,
X PSEC4,KLENP,KGRIB,KLENG,KWORD,HOPER,KRET)
+ + + +
+   +
+
+
+ + + + + +
+"Top +17.04.2007 +
+
  + + + + + + + +
+   +Page Details +        © ECMWF
+
shimshimshim
+ + + + + diff --git a/doxygen/gribex/gaussianGrid.html b/doxygen/gribex/gaussianGrid.html new file mode 100644 index 000000000..009d7f893 --- /dev/null +++ b/doxygen/gribex/gaussianGrid.html @@ -0,0 +1,595 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home page  +
+ + + + + + + + + + + + + + + + + + + +
Home Your Room Login Contact Feedback Site Map Search: +  
+
+
Discover this product  + + + + + + + + + +
About Us
+ Overview
+ Getting here
+ Committees
Products
+ Forecasts
+ Order Data
+ Order +Software
+
Services
+ Computing
+ Archive
+ PrepIFS
+
Research
+ Modelling
+ Reanalysis
+ Seasonal
+
Publications
+ Newsletters
+ Manuals
+ Libraries
+
News&Events
+ Calendar
+ Employment
+ Open Tenders
+
+
+   + + + + + +
+ +Home >  +Publications >  +Manuals > +Grib API>  +  +
+
  +   +

+

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +  
+
  + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Gaussian grids
Element Contents + GRIB API keys
1 Data representation type (see WMO +code table 6) gridType +
2 Number of points along a parallel. +Cannot be used for quasi-regular (reduced) grids. Ni
Nx
+
3 Number of points along a meridian (Nj). + Nj
Ny
+
4 Latitude of the first grid point. latitudeOfFirstGridPointInDegrees*1000 +
5 Longitude of the first grid point. longitudeOfFirstGridPointInDegrees*1000 +
6 +
Resolution flag:
0 Direction increments not given.
128 Direction increments given.
+
ijDirectionIncrementGiven*128 +
7 Latitude of the last grid point. latitudeOfLastGridPointInDegrees*1000 +
8 Longitude of the last grid point. longitudeOfLastGridPointInDegrees*1000 +
9 i direction increment. Cannot be used +for quasi-regular (reduced) grids. iDirectionIncrementInDegrees*1000 +
10 Number of parallels between a pole and +the Equator,ie the gaussian grid number. numberOfParallelsBetweenAPoleAndTheEquator
+
11 Scanning mode flags (see WMO +code table 8) +

iScansNegatively

+

jScansNegatively

+

jPointsAreConsecutive

+
12 Number of vertical coordinate +parameters. NV
+
13 Latitude of the southern pole of +rotation. latitudeOfSouthernPoleInDegrees*1000 +
14 Longitude of the southern pole of +rotation. longitudeOfSouthernPoleInDegrees*1000 +
15 Latitude of the pole of stretching. latitudeOfPoleOfStretchingInDegrees + *1000
16 Longitude of the pole of stretching. longitudeOfPoleOfStretchingInDegrees + *1000
17 +
0       Regular grid.
1 Quasi-regular (reduced) grid.
+
gridType +
18 +
Earth flag:
0 Earth assumed spherical with radius 6367.47 km.
64 Earth assumed oblate spheroidal with size as determined by IAU in 1965:
6378.160km, 6356.775km, f=1/297.0
+
earthIsOblate +
19 +
Components flag.
0 Resolved u and v components of vector quantities relative to easterly
and northerly directions; or not used.
8 Resolved u and v components of vector quantities relative to the
defined grid in the direction of increasing x and y (or i and j)
coordinates respectively.
+
uvRelativeToGrid +
20-22 Reserved. Set to 0.
+
23-nn For a quasi-regular (reduced) grid, NN +the number of points along a full parallel (360 degrees) is defined for +each latitude row in the area. The number of parallels is given by Nj +above. pl
+ + + +
+   +
+
+
+ + + + + +
+"Top22.10.2010-->--> +
+
  + + + + + + + +
+   +Page Details +        © ECMWF
+
shimshimshim
+ + + + + diff --git a/doxygen/gribex/ksec0.html b/doxygen/gribex/ksec0.html new file mode 100644 index 000000000..a23ece8f0 --- /dev/null +++ b/doxygen/gribex/ksec0.html @@ -0,0 +1,461 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home page  +
+ + + + + + + + + + + + + + + + + + + +
Home Your Room Login Contact Feedback Site Map Search: +  
+
+
Discover this product  + + + + + + + + + +
About Us
+ Overview
+ Getting here
+ Committees
Products
+ Forecasts
+ Order Data
+ Order +Software
+
Services
+ Computing
+ Archive
+ PrepIFS
+
Research
+ Modelling
+ Reanalysis
+ Seasonal
+
Publications
+ Newsletters
+ Manuals
+ Libraries
+
News&Events
+ Calendar
+ Employment
+ Open Tenders
+
+
+   + + + + + +
+ +Home >  +Publications >  +Manuals > +Grib API>  +  +
+
  +   +

+

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +  
+
  + + + +

GRIB section 0, the indicator section

+ +

An INTEGER array of 2 elements. + + + + + + + + + + + + + + + + + + +
Contents of KSEC0
Element Contents GRIB API keys
+
1 Number of octets in the GRIB message +(not including any padding to a word boundary or rounding to a multiple +of 120 octets). totalLength
+
2 GRIB edition number. edition
+
+ + + +
+   +
+
+

+ + + + + +
+"Top22.10.2010--> +
+
  + + + + + + + +
+   +Page Details +        © ECMWF
+
shimshimshim
+ + + + + diff --git a/doxygen/gribex/ksec1.html b/doxygen/gribex/ksec1.html new file mode 100644 index 000000000..cd04a7787 --- /dev/null +++ b/doxygen/gribex/ksec1.html @@ -0,0 +1,694 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home page  +
+ + + + + + + + + + + + + + + + + + + +
Home Your Room Login Contact Feedback Site Map Search: +  
+
+
Discover this product  + + + + + + + + + +
About Us
+ Overview
+ Getting here
+ Committees
Products
+ Forecasts
+ Order Data
+ Order +Software
+
Services
+ Computing
+ Archive
+ PrepIFS
+
Research
+ Modelling
+ Reanalysis
+ Seasonal
+
Publications
+ Newsletters
+ Manuals
+ Libraries
+
News&Events
+ Calendar
+ Employment
+ Open Tenders
+
+
+   + + + + + +
+ +Home >  +Publications >  +Manuals > +Grib API>  +  +
+
  +   +

+

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +  
+
  + + + + +

GRIB section 1, the product definition section

+KSEC1 must be initialised when encoding; it is filled in by GRIBEX when +decoding. +

An INTEGER array.

+

When section 1 contains data for ECMWF local use, KSEC1 must +be dimensioned +accordingly, see ECMWF +local GRIB usage +definitions.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Contents of KSEC1
Element Contents GRIB API + keys
+
1 Version number of code table 2 (see ECMWF +local +code table 2). +

paramId

+


+

+
2 Identification of centre (see WMO +code table 0), 98 for ECMWF.
centre
+
3 Generating process identification number, allocated by +the originating centre. (255 is used at ECMWF as an indicator for dummy +surface pressure fields). +See ECMWF +model identifiers.
generatingProcessIdentifier
+
4 Grid definition. NNN catalogue number of grid used by +the originating centre (See Volume B of WMO publication No.9). 255 for +a non-catalogued grid, in which case the grid description follows in +KSEC2.
5 Flag showing whether sections 2 and 3 are present (see + WMO +code table 1):
+
  0, Sections 2 and 3 are omitted.
 64, Section 2 is omitted, Section 3 is included.
128, Section 2 is included, Section 3 is omitted.
192, Sections 2 and 3 are included.
+
+

gridType

+

bitmapPresent
+

+
6 Parameter indicator (see WMO +code table 2). +

shortName

+

paramId
+

+
7 Type of level indicator (see WMO +code table 3), or satellite +identifier. Satellite usage is as defined by INPE/CPTEC and used by +ECMWF pending final definition by WMO.
typeOfLevel
+
8 Height, pressure, etc of level (see WMO +code table 3). Single level or top +of layer, or satellite spectral band. Satellite usage is as defined by +INPE/CPTEC and used by ECMWF pending final definition by WMO.
level
+
9 Height, pressure, etc of level (see WMO +code table 3). Bottom of layer if +element 7 indicates a layer. +

typeOfLevel
+

+
10-14 Reference time of data. Date and time of start of +averaging or accumulation.
dataDate
+
10 Year of century (YY).

+
+ dataDate
+
11 Month (MM).
12 Day (DD).
13 Hour (HH).
dataTime
+
+
14 Minute (MM).
15 Time unit indicator (see WMO +code table 4).
stepType = instant | + avg | + accum | + max | + min | diff | + rms |
+ sd | + cov | + ratio

+
+
+

stepUnits = s (seconds) | m (minutes) | h (hours) | 3h | 6h | 12h | D (day) | M (month) | Y (year) | 10Y | 30Y | C (century)

+

default value for stepUnits is "h"

+

startStep, endStep

+

stepRange (= "endStep" | "startStep-endStep" )

+

step

+
16 P1 - Time period (number of time units) 0 for analyses + or initialised analyses.
17 P2 - Time period (number of time units). Or time + interval between successive analyses, initialised analyses or forecasts + undergoing averaging or accumulation. Otherwise set to zero.
18 Time range indicator (see WMO + code table 5).
19 Number of products included in an average, when the + time range indicates an average or accumulation. Otherwise set to zero. +
20 Number of products missing from an average, when the + time range indicates an average or accumulation. Otherwise set to zero. +
21 Century of reference time of data (eg 20 for 1997).
date/1000-1
+
22 Sub-centre identifier.
subCentre
+
23 Decimal scale factor.
+

decimalScaleFactor

+

decimalPrecision
+

+
24 Flag field to indicate local use in Section 1:
+
0       No local use in section 1.
1 Local use in section 1.
+
setLocalDefinition
+
25-36 Reserved for WMO reserved fields. Set to 0.

+
37 ECMWF local GRIB use definition identifier. This +number determines the contents of elements 38-nn. See ECMWF +local GRIB usage definitions. +Local definition numbers 192 to 255 inclusive will not be used for +ECMWF local extensions. They are free for use by Member States. +

class

+

type

+

stream

+

expver

+

...
+

+
+
Note:
For year 2000, KSEC1(21) = 20 and KSEC1(10) = 100
For year 2001, KSEC1(21) = 21 and KSEC1(10) = 1
+ + + +
+   +
+
+
+ + + + + +
+"Top22.10.2010-->--> +
+
  + + + + + + + +
+   +Page Details +        © ECMWF
+
shimshimshim
+ + + + + diff --git a/doxygen/gribex/ksec2.html b/doxygen/gribex/ksec2.html new file mode 100644 index 000000000..499d38d33 --- /dev/null +++ b/doxygen/gribex/ksec2.html @@ -0,0 +1,466 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home page  +
+ + + + + + + + + + + + + + + + + + + +
Home Your Room Login Contact Feedback Site Map Search: +  
+
+
Discover this product  + + + + + + + + + +
About Us
+ Overview
+ Getting here
+ Committees
Products
+ Forecasts
+ Order Data
+ Order +Software
+
Services
+ Computing
+ Archive
+ PrepIFS
+
Research
+ Modelling
+ Reanalysis
+ Seasonal
+
Publications
+ Newsletters
+ Manuals
+ Libraries
+
News&Events
+ Calendar
+ Employment
+ Open Tenders
+
+
+   + + + + + +
+ +Home >  +Publications >  +Manuals > +Grib API>  +  +
+
  +   +

+

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +  
+
  + + + + +

GRIB section 2, the grid description section

+ + + + + + +
+   +
+
+
+ + + + + +
+"Top22.10.2010--> +
+
  + + + + + + + +
+   +Page Details +        © ECMWF
+
shimshimshim
+ + + + + diff --git a/doxygen/gribex/ksec3.html b/doxygen/gribex/ksec3.html new file mode 100644 index 000000000..14c7be683 --- /dev/null +++ b/doxygen/gribex/ksec3.html @@ -0,0 +1,464 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home page  +
+ + + + + + + + + + + + + + + + + + + +
Home Your Room Login Contact Feedback Site Map Search: +  
+
+
Discover this product  + + + + + + + + + +
About Us
+ Overview
+ Getting here
+ Committees
Products
+ Forecasts
+ Order Data
+ Order +Software
+
Services
+ Computing
+ Archive
+ PrepIFS
+
Research
+ Modelling
+ Reanalysis
+ Seasonal
+
Publications
+ Newsletters
+ Manuals
+ Libraries
+
News&Events
+ Calendar
+ Employment
+ Open Tenders
+
+
+   + + + + + +
+ +Home >  +Publications >  +Manuals > +Grib API>  +  +
+
  +   +

+

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +  
+
  + + + +

GRIB section 3, the bitmap section

+

An INTEGER array of at least 2 elements.

+

+ + + + + + + + + + + + + + + + + + +
Contents of KSEC3
Element Contents + GRIB API keys
+
1 +
0          A bitmap is included in the GRIB message.
The data array PSEC4 contains a value which serves as a
missing data indicator for use at missing data points.

Non-zero The number of a predefined bitmap.
The bitmap is not included in the message. The binary
data array contains only valid data values; missing
points are suppressed.
bitmapPresent
+
2 +

+
The value used at missing data points in an INTEGER +data field. This value must be supplied for both encoding and decoding. +
missingValue
+
+ + + +
+   +
+
+
+ + + + + +
+"Top22.10.2010--> +
+
  + + + + + + + +
+   +Page Details +        © ECMWF
+
shimshimshim
+ + + + + diff --git a/doxygen/gribex/ksec4.html b/doxygen/gribex/ksec4.html new file mode 100644 index 000000000..d6933b7d0 --- /dev/null +++ b/doxygen/gribex/ksec4.html @@ -0,0 +1,754 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home page  +
+ + + + + + + + + + + + + + + + + + + +
Home Your Room Login Contact Feedback Site Map Search: +  
+
+
Discover this product  + + + + + + + + + +
About Us
+ Overview
+ Getting here
+ Committees
Products
+ Forecasts
+ Order Data
+ Order +Software
+
Services
+ Computing
+ Archive
+ PrepIFS
+
Research
+ Modelling
+ Reanalysis
+ Seasonal
+
Publications
+ Newsletters
+ Manuals
+ Libraries
+
News&Events
+ Calendar
+ Employment
+ Open Tenders
+
+
+   + + + + + +
+ +Home >  +Publications >  +Manuals > +Grib API>  +  +
+
  +   +

+

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +  
+
  + + + + +

GRIB section 4, the binary data section

+An INTEGER array of at least 42 elements. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Contents of KSEC4 +
Element Contents GRIB API keys
+
1 Number of data values in array PSEC4 to be encoded or +which have been decoded. When the 'A' coding option is used, the count +is the number of image bytes stored four to an integer. When the 'B' +coding option is used, the count is the number of integers used to +return image bytes, stored four to an integer. +

When a bitmap is used, this number includes the total +of both missing and present data values.

+

If this number is negative:

+
  • the number of field points is -KSEC4(1),
  • +
  • the entire field is missing,
  • +
  • all values in PSEC4 are 0,
  • +
  • the coded data has all the bits of its scale factor +are set to 1
  • +
  • all the bits of the exponent and mantissa of its +reference value are set to 1 (This is an ECMWF convention).
  • +
    +

    numberOfPoints

    +

    numberOfValues

    +

    numberOfCodedValues

    +

    numberOfMissing
    +

    +
    2 Number of bits used for each encoded value.
    +

    decimalPrecision

    +

    bitsPerValue

    +
    3 +
    Type of data:
    0 Grid point data.
    128 Spherical harmonic coefficients
    (Used only if Section 2 is not included when
    coding data.)
    4 +
    Type of packing:
    0 Simple packing.
    64 Complex or second-order packing.
    +
    packingType = + grid_simple | grid_ieee | spectral_complex | spectral_simple |
    + spectral_ieee | grid_simple_matrix | grid_second_order |
    + grid_second_order_different_width | grid_complex |
    + grid_complex_spatial_differencing | grid_jpeg | grid_png |
    + grid_simple_log_preprocessing
    +

    +
    5 +
    Data representation:
    0 Floating point data.
    32 Integer data.
    +

    +
    6 +
    Additional flags indicator:
    0 No additional flags.
    16 Additional flags.
    +

    +
    7 Reserved. Set to 0.

    +
    8 +
    Number of values indicator:
    0 Single datum at each grid point.
    64 Matrix of values at each grid point.
    +

    +
    9 +
    Secondary bitmaps indicator:
    0 No secondary bitmaps.
    32 Secondary bitmaps present.
    +

    +
    10 +
    Values width indicator:
    0 Second order values have constant width.
    16 Second order values have different widths.
    +

    +
    11 Number of bits for second order values when these have +constant width.

    +
    12-15 Reserved for WMO reserved flag fields. Set to 0.

    +
    16 For complex packing, a pointer to the start of packed +data values (ie the octet number). Otherwise set to 0.

    +
    17 For complex packing, the scaling factor P, stored as +the INTEGER value P*1000 (in the range -10000 to +10000). Otherwise set +to 0.

    +
    18 For complex packing, the pentagonal resolution +parameter J specifying the truncation of the subset of the data +represented as 32-bit floating point numbers (ie not packed). Otherwise +set to 0.

    +
    19 For complex packing, the pentagonal resolution +parameter K specifying the truncation of the subset of the data +represented as 32-bit floating point numbers (ie not packed). Otherwise +set to 0.

    +
    20 For complex packing, the pentagonal resolution +parameter M specifying the truncation of the subset of the data +represented as 32-bit floating point numbers (ie not packed). Otherwise +set to 0.

    +
    21 The number of non-missing values in a field which uses +a bitmap. +

    When the 'B' coding option is used, this count is the +number of image bytes +(versions of GRIBEX after 13.040).

    +

    +
    22-33 Reserved. Set to 0.

    +
    34 An offset bit pointer to coded values in the GRIB +record. (This is returned by the 'G', 'I' or 'J' decoding options).

    +
    +

    +

    X decoding option.

    +Elements 34 to 42 are used only for the 'X' option, which decodes up to +4 values. (See HOPER above). The scanning mode must be from West to +East and from North to South. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC4 - X decoding option
    Element Contents
    34 Number of points to be decoded (maximum 4).
    35 Number of the latitude row of the first value.
    36 Number of the longitude point of the first value.
    37 Number of the latitude row of the second value.
    38 Number of the longitude point of the second value.
    39 Number of the latitude row of the third value.
    40 Number of the longitude point of the third value.
    41 Number of the latitude row of the fourth value.
    42 Number of the longitude point of the fourth value.
    +

    Grid point matrix packing.

    +For grid point packing, with a matrix of values at each grid point, +elements 50 to (50+NC1+NC2) are used as follows: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC4 - grid matrix packing
    Element Contents
    50 First dimension of each matrix (the number of rows).
    51 Second dimension of each matrix (the number of +columns).
    52 First dimension coordinate values definition.
    53 Number of coefficients or values used to specify the +first dimension coordinate function, NC1.
    54 Second dimension coordinate values definition.
    55 Number of coefficients or values used to specify the +second dimension coordinate function, NC2.
    56 First dimension physical significance.
    57 Second dimension physical significanc.
    58 - 59 Reserved. Set to 0.
    +

    ECMWF use of REALs.

    +In the WMO specification, the following fields are INTEGER values. +ECMWF uses floating-point values for its wave models, so these fields +contain REAL values in both input and output. + + + + + + + + + + + + + + + +
    KSEC4 - ECMWF use of REALs
    Elements Contents
    60 - (59+NC1) Coefficients to define the first dimension coordinate +values in functional form, or the explicit coordinate values.
    (60+NC1)-(59+NC1+NC2) Coefficients to define the second dimension coordinate +values in functional form, or the explicit coordinate values
    + + + +
    +   +
    +
    +
    + + + + + +
    +"Top22.10.2010-->--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/lambertEtcGrid.html b/doxygen/gribex/lambertEtcGrid.html new file mode 100644 index 000000000..2c27e8b07 --- /dev/null +++ b/doxygen/gribex/lambertEtcGrid.html @@ -0,0 +1,601 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Lambert conformal, secant or tangent, conical +or bi-polar (normal or +oblique) or Albers equal-area, secant or tangent, conical or bi-polar +(normal or oblique)
    Element Contents + GRIB API keys
    1 +
    Data representation type (see WMO code table 6); eg
    3 Lambert conformal
    8 Albers equal area
    13 Oblique Lambert conformal
    +
    gridType +
    2 Number of points along X-axis. Nx
    Ni
    +
    3 Number of points along Y-axis. Ny
    Nj +
    4 Latitude of the first grid point. latitudeOfFirstGridPointInDegrees*1000
    +
    5 Longitude of the first grid point. longitudeOfFirstGridPointInDegrees*1000
    +
    6 +
    Resolution flag:
    0 Direction increments not given.
    128 Direction increments given.
    +
    ijDirectionIncrementGiven*128 +
    7 Orientation of the grid. The East longitude of the +meridian which is parallel to the Y-axis along which latitude increases +as the Y-coordinate increases. orientationOfTheGridInDegrees*1000
    +
    8 Reserved. Set to 0.
    +
    9 X-direction grid length. xDirectionGridLength
    +
    10 Y-direction grid length. yDirectionGridLength
    +
    11 Scanning mode flag (see WMO +code table 8) +

    iScansNegatively

    +

    jScansNegatively

    +

    jPointsAreConsecutive

    +
    12 Number of vertical coordinate parameters. NV
    +
    13 +
    Projection centre flag:
    0 North pole is on the projection plane.
    Only one projection centre is used.
    128 South pole is on the projection plane.
    Only one projection centre is used.
    64 North pole is on the projection plane.
    Projection is bi-polar and symmetric.
    192 South pole is on the projection plane.
    Projection is bi-polar and symmetric.
    +
    projectionCenterFlag
    +
    14 First latitude from the pole at which the secant cone +cuts the sphere. firstLatitudeFromThePoleAtWhichTheSecantConeCutsTheSphereInDegrees*1000 +
    15 Second latitude at which the secant cone cuts the +sphere. secondLatitudeFromThePoleAtWhichTheSecantConeCutsTheSphereInDegrees*1000 +
    16 Reserved. Set to 0.
    +
    17 0 Regular grid gridType +
    18 +
    Earth flag:
    0 Earth assumed spherical with radius 6367.47 km.
    64 Earth assumed oblate spheroidal with size as determined by IAU in 1965:
    6378.160km, 6356.775km, f=1/297.0
    +
    earthIsOblate +
    19 +
    Components flag:
    0 Resolved u and v components of vector quantities relative to easterly
    and northerly directions.
    8 Resolved u and v components of vector quantities relative to the
    defined grid in the direction of increasing x and y (or i and j)
    coordinates respectively.
    +
    uvRelativeToGrid +
    20 Latitude of the southern pole. latitudeOfSouthernPoleInDegrees*1000
    +
    21 Longitude of the southern pole. longitudeOfSouthernPoleInDegrees*1000
    +
    22 Reserved. Set to 0.
    +
    +

    Notes: Grid lengths are in metres, at the 60-degree parallel +nearest to +the pole on the projection plane. + + + +
    +   +
    +
    +

    + + + + + +
    +"Top22.10.2010-->--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/latLongGrid.html b/doxygen/gribex/latLongGrid.html new file mode 100644 index 000000000..cbf1ef154 --- /dev/null +++ b/doxygen/gribex/latLongGrid.html @@ -0,0 +1,589 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Latitude/longitude or equidistant cylindrical +or plate carree grids
    Element Contents + GRIB API keys
    +
    1 Data representation type (see WMO code table 6)
    2 Number of points along a parallel (Ni).
    +

    Ni
    + Nx
    +

    +
    3 Number of points along a meridian (Nj).
    +

    Nj
    + Ny
    +

    +
    4 Latitude of the first grid point.
    latitudeOfFirstGridPointInDegrees*1000
    5 Longitude of the first grid point.
    longitudeOfFirstGridPointInDegrees*1000
    6 +
    Resolution flag:
    0 Direction increments not given.
    128 Direction increments given.
    +
    ijDirectionIncrementGiven*128
    +
    7 Latitude of the last grid point.
    latitudeOfLastGridPointInDegrees*1000
    8 Longitude of the last grid point.
    longitudeOfLastGridPointInDegrees*1000
    9 i direction increment.
    iDirectionIncrementInDegrees*1000
    +
    10 j direction increment.
    jDirectionIncrementInDegrees*1000
    +
    11 Scanning mode flags (see WMO +code table 8) +

    iScansNegatively

    +

    jScansNegatively

    +

    jPointsAreConsecutive

    +


    +

    +
    12 Number of vertical coordinate parameters.
    NV
    +
    13 Latitude of the southern pole of rotation.
    latitudeOfSouthernPoleInDegrees*1000
    +
    14 Longitude of the southern pole of rotation.
    longitudeOfSouthernPoleInDegrees*1000
    +
    15 Latitude of the pole of stretching.
    latitudeOfPoleOfStretchingInDegrees + *1000
    16 Longitude of the pole of stretching.
    longitudeOfPoleOfStretchingInDegrees + *1000
    17
    0  Regular grid.
    1 Quasi-regular (reduced) grid.
    At the moment, quasi-regular (reduced) latitude/longitude grids are
    not unambiguously defined. The resolution flag field indicates whether
    or not both direction increments are given; at least one must be given,
    as grids are only allowed to be irregular in one direction.
    +
    18
    Earth flag:
    0 Earth assumed spherical with radius 6367.47 km.
    64 Earth assumed oblate spheroidal with size as determined by IAU in 1965:
    6378.160km, 6356.775km, f=1/297.0
    +
    earthIsOblate
    +
    19 +
    Components flag:
    0 Resolved u and v components of vector quantities relative to easterly
    and northerly directions.
    8 Resolved u and v components of vector quantities relative to the
    defined grid in the direction of increasing x and y (or i and j)
    coordinates respectively.
    +
    uvRelativeToGrid
    +
    20-22 Reserved. Set to 0.

    +
    23-nn +
    For a quasi-regular (reduced) grid, the number of points along each parallel
    must be defined. The number of parallels is given by Nj above.
    Alternatively, this may be the number of pointqs along each meridian, where
    the number of meridians is given by Ni above.q
    +
    pl
    +
    + + + +
    +   +
    +
    +
    + + + + + +
    +"Top22.10.2010--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/localDefinition1.html b/doxygen/gribex/localDefinition1.html new file mode 100644 index 000000000..954871e08 --- /dev/null +++ b/doxygen/gribex/localDefinition1.html @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keys
    +
    Coded +GRIB_API keys
    +
    Comments
    37 +
    ECMWF local GRIB use definition identifier.
    1 = MARS labeling or ensemble forecast data.
    +
    41localDefinitionNumber
    +
    localDefinitionNumber
    +

    +
    38Class42class
    +
    marsClass
    +

    +
    39Type43type
    +
    marsType
    +

    +
    40Stream44-45stream
    +
    marsStream
    +

    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expver
    +
    experimentVersionNumber
    +
    42 +
    Set to 0 for MARS labeling (simple labeling).
    When element 40 = 1035, this is the ensemble forecast number.
    When element 39 = 10, this is the control forecast number and is set to 0.
    When element 39 = 11, this is the perturbed forecast number in some range 1-nn.
    Positive perturbations have odd numbers and negative have even numbers. They
    go in pairs (1,2), (3,4) etc.
    When element 39 = 17, this is an ensemble mean and the number is set to 0.
    When element 39 = 18, this is an ensemble standard deviation and the number
    is set to 0.
    +
    50number
    +
    perturbationNumber
    +

    +
    43 Set to 0, if not an ensemble forecast. Otherwise, the +total number of forecasts in an ensemble; the number includes the +control forecast. 51numberOfForecastsInEnsemble
    +
    numberOfForecastsInEnsemble
    +

    +
    - Spare (set to zero). 52
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition10.html b/doxygen/gribex/localDefinition10.html new file mode 100644 index 000000000..2a913704e --- /dev/null +++ b/doxygen/gribex/localDefinition10.html @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    10 = EPS tubes.
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 Tube number (0=central cluster) 50number
    +
    tubeNumber
    +

    +
    43 Total number of tubes (excluding central cluster) 51totalNumberOfTubes
    +
    totalNumberOfTubes
    +

    +
    44 +
    Central cluster definition
    1: radius = % of total variance
    2: radius = predefined value
    +
    52centralClusterDefinition
    +
    centralClusterDefinition
    +

    +
    45 Indicator of parameter considered (see code table 2 in +section 1) 53parameterIndicator
    +
    parameterIndicator
    +

    +
    46 Indicator of type of level considered (see WMO code table 3) 54levelIndicator
    +
    levelIndicator
    +

    +
    47 Northern latitude of the domain of tubing 55-57northLatitudeOfDomainOfTubing
    +
    northLatitudeOfDomainOfTubing
    +
    "domain" can be used, +which will contain the 4 coordinates.
    +
    48 Western longitude of the domain of tubing 58-60westLongitudeOfDomainOfTubing
    +
    westLongitudeOfDomainOfTubing
    +

    +
    49 Southern latitude of the domain of tubing 61-63southLatitudeOfDomainOfTubing
    +
    southLatitudeOfDomainOfTubing
    +

    +
    50 Eastern longitude of the domain of tubing 64-66eastLongitudeOfDomainOfTubing
    +
    eastLongitudeOfDomainOfTubing
    +

    +
    51 +
    Number of tube to which the operational forecast belongs(*)
    0 = central cluster,
    254 = does not belong to any tube
    +
    67numberOfOperationalForecastTube
    +
    numberOfOperationalForecastTube
    +

    +
    52 +
    Number of tube to which the control forecast belongs(*)
    0 = central cluster,
    254 = does not belong to any tube
    +
    68numberOfControlForecastTube
    +
    numberOfControlForecastTube
    +

    +
    53 Height/pressure of level considered (see WMO code table 3)69-70heightOrPressureOfLevel
    +
    heightOrPressureOfLevel
    +
    54 Reference step considered (same units of time as +forecast timesteps) 71-72reference
    +
    referenceStep
    +

    +
    55 Radius of central cluster (in units of parameter +defined in element 45) 73-74radiusOfCentralCluster
    +
    radiusOfCentralCluster
    +
    56 Ensemble standard deviation (in units of parameter +defined in element 45) 75-76ensembleStandardDeviation
    +
    ensembleStandardDeviation
    +
    57 +
    Distance of the tube extreme to the ensemble mean (in units of parameter
    defined in element 45).
    Not applicable if this is the central cluster, in which case the value is
    set = 65535, ie a missing value.
    +
    77-78distanceFromTubeToEnsembleMean
    +
    distanceFromTubeToEnsembleMean
    +
    58 Number of forecasts belonging to the tube or central +cluster, including the control forecast (N) 79numberOfForecastsInTube
    +
    numberOfForecastsInTube
    +
    59->(58+N) +
    List of N ensemble forecast numbers (**)
    Order is important, first on the list is the tube extreme
    +
    80->(79+N)ensembleForecastNumbers
    +
    ensembleForecastNumbers"numberOfForecastsInTube" +numbers.
    +
    -Set to zero (present to keep the length of section 1 +constant) (80+N)->334
    +

    +

    +
    +Notes: +

    * a forecast may belong to several tubes. In this case, the +forecast is associated with the tube whose extreme is closest.

    +

    ** by order of decreasing distance to the ensemble mean. diff --git a/doxygen/gribex/localDefinition11.html b/doxygen/gribex/localDefinition11.html new file mode 100644 index 000000000..758b1bce8 --- /dev/null +++ b/doxygen/gribex/localDefinition11.html @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    11 = Supplementary data used by the analysis.
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    - Details of the analysis which used the supplementary +data -
    +

    +

    +
    42 Class of analysis 50classOfAnalysis
    +
    classOfAnalysis
    +
    43 Type of analysis 51typeOfAnalysis
    +
    typeOfAnalysis
    +
    44 Stream of analysis 52-53streamOfAnalysis
    +
    streamOfAnalysis
    +
    45 Version number or experiment identifier of analysis. +(4 ASCII characters, right justified) 54-57experimentVersionNumberOfAnalysis
    +
    experimentVersionNumberOfAnalysis +
    +
    46 Year of analysis (YY) 58yearOfAnalysis
    +
    yearOfAnalysis
    +
    47 Month of analysis (MM) 59monthOfAnalysis
    +
    monthOfAnalysis
    +
    48 Day of analysis (DD) 60dayOfAnalysis
    +
    dayOfAnalysis
    +
    49 Hour of analysis (HH) 61hourOfAnalysis
    +
    hourOfAnalysis
    +
    50 Minute of analysis (MM) 62minuteOfAnalysis
    +
    minuteOfAnalysis
    +
    51 Century of analysis 63centuryOfAnalysis
    +
    centuryOfAnalysis
    +
    52 Originating centre of analysis 64originatingCentreOfAnalysis
    +
    originatingCentreOfAnalysis +
    +
    53 Sub-centre of analysis 65subcentreOfAnalysis
    +
    subcentreOfAnalysis
    +
    - Spare (set to zero) 66-72
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition13.html b/doxygen/gribex/localDefinition13.html new file mode 100644 index 000000000..493e68625 --- /dev/null +++ b/doxygen/gribex/localDefinition13.html @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keys
    +
    Coded +GRIB_API keys
    +
    Comments
    37 +
    ECMWF local GRIB use definition identifier.
    13 = Wave 2D spectra direction and frequency.
    +
    41localDefinitionNumber
    +
    localDefinitionNumber
    +
     
    38Class42class
    +
    marsClass
    +
     
    39Type43type
    +
    marsType
    +
     
    40Stream44-45stream
    +
    marsStream
    +
     
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expver
    +
    experimentVersionNumber 
    42 As for MARS labelling (eg set to zero, or ensemble +forecast number if appropriate) 50numbernumber
    +

    +
    43 As for MARS labelling (eg set to zero, or total number +in ensembles if appropriate) 51totaltotal
    +
     
    44 Direction number 52directionNumberdirectionNumber
    +
     
    45 Frequency number 53frequencyNumberfrequencyNumber
    +

    +
    46 Total number of directions (Nd) 54numberOfDirectionsnumberOfDirections
    +
     
    47 Total number of frequencies (Nf) 55numberOfFrequencies numberOfFrequencies
    +
    48 Integer scaling factor applied to directions in +following list of direction definitions (4-byte integer) 56-59directionScalingFactor directionScalingFactor
    +
    49 Integer scaling factor applied to frequencies in +following list of frequency definitions (4-byte integer) 60-63frequencyScalingFactorfrequencyScalingFactor
    +
    - +
    Flag to show inclusions in the header:
    0 = system and method are not included
    1 = system and method are included
    2 = system, method, reference date, climate date (from)
    and climate date (to) are included
    3 = all information in 2 leg information for variable
    resolution systems are included
    +
    64flagflag
    +
    50+Nd+NfSystem number (65535 = missing)65-66systemNumbersystemNumber
    +
    51+Nd+NfMethod number (65535 = missing)67-68methodNumbermethodNumber
    +
    52+Nd+NfReference date (YYYYMMDD)69-72referenceDatereferenceDate
    +
    53+Nd+NfClimate date - from (YYYYMMDD)73-76climateDateFromclimateDateFrom
    +
    54+Nd+NfClimate date - to (YYYYMMDD)77-80climateDateToclimateDateTo
    +
    55+Nd+Nf Base time of this leg (YYYYMMDD) 81-84legBaseDatelegBaseDateo
    +
    56+Nd+Nf Base time of this leg (HHMM) 85-86legBaseTimelegBaseTime
    +
    57+Nd+Nf Leg number 87legNumberlegNumber
    +
    58+Nd+Nf +
    	Ocean - Atmosphere coupling: 
    0 = unspecified
    1 = uncoupled
    2 = coupled
    +
    88oceanAtmosphereCouplingoceanAtmosphereCoupling
    +
    - Spare (set to zero) 89-100spareSetToZero3spareSetToZero3
    +
    50->(49+Nd) List of Nd scaled directions (4-byte integers) 101->(100+Nd*4)scaledDirectionsscaledDirections
    +
    (50+Nd)->(49+Nd+Nf) List of Nf scaled frequencies (4-byte integers) (101+Nd*4)->(100+Nd*4+Nf*4)scaledFrequenciesscaledFrequencies
    +
    diff --git a/doxygen/gribex/localDefinition14.html b/doxygen/gribex/localDefinition14.html new file mode 100644 index 000000000..dc19581b3 --- /dev/null +++ b/doxygen/gribex/localDefinition14.html @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    14 = Brightness temperature.
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 As for MARS labelling (eg set to zero, or ensemble +forecast number if appropriate) 50number
    +
    perturbationNumber
    +

    +
    43 As for MARS labelling (eg set to zero, or total number +in ensembles if appropriate) 51numberOfForecastsInEnsemble
    +
    numberOfForecastsInEnsemble
    +

    +
    44 Channel number 52channel
    +
    channelNumber
    +

    +
    45 Integer scaling factor applied to frequencies in +following list of frequency definitions (4-byte integer) 53-56scalingFactorForFrequencies
    +
    scalingFactorForFrequencies
    +

    +
    46 Total number of frequencies (Nf) 57numberOfFrequencies
    +
    numberOfFrequencies
    +

    +
    -Spare (set to zero) 58-60
    +

    +

    +
    47->(46+Nf) List of Nf scaled frequencies (4-byte integers) 61->(60+Nf*4)listOfScaledFrequencies
    +
    listOfScaledFrequencies
    +
    numberOfFrequencies values.
    +
    - Spare (set to zero) (61+Nf*4)->1080
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition15.html b/doxygen/gribex/localDefinition15.html new file mode 100644 index 000000000..065de9f91 --- /dev/null +++ b/doxygen/gribex/localDefinition15.html @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    +
    37 +
    ECMWF local GRIB use definition identifier.
    15 = Seasonal forecast data
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42Ensemble member number 50-51number
    +
    perturbationNumber
    +

    +
    43 +
    Total number of ensembles.
    Was set to zero in earlier versions of definition 15
    +
    56-57 (note change in sequence of octet order)
    +

    +

    +
    44 +
    System number
    The "scientific version" number.
    0 = RD experiment
    1 - 65534 = operational version number
    65535 = missing
    +
    52-53system
    +
    systemNumber
    +

    +
    45 +
    Method number
    Distinguishes scientifically different forecast ensembles
    (eg different calibration/bias correction)
    0 = control integration (ie without data assimilation)
    1 - 65534 = operational version number
    +
    54-55method
    +
    methodNumber
    +

    +
    -Spare (set to zero) 58-60
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition16.html b/doxygen/gribex/localDefinition16.html new file mode 100644 index 000000000..6d0301d50 --- /dev/null +++ b/doxygen/gribex/localDefinition16.html @@ -0,0 +1,167 @@ +

    For instantaneous fields, a monthly mean is the mean of the +fields sampled at +the specified averaging period.

    +

    For accumulated fields, a monthly mean is the mean rate of +accumulation of the +fields.

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    16 = ECMWF seasonal forecast monthly mean data
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Number
    Ensemble member number.
    Control forecast is number 0,
    perturbed forecasts 1-nn.
    +
    50-51number
    +
    perturbationNumber
    +

    +
    43 Zero -
    +

    +

    +
    44 +
    System number
    The "scientific version" number.
    0 = RD experiment
    1 - 65534 = operational version number
    65535 = missing
    +
    52-53system
    +
    systemNumber
    +

    +
    45 +
    Method number
    Distinguishes scientifically different forecast ensembles
    (eg different calibration/bias correction)
    0 = control integration (ie without data assimilation)
    1 - 65534 = operational version number
    +
    54-55method
    +
    methodNumber
    +

    +
    46 Verifying month (in format YYYYMM) 56-59verifyingMonth
    +
    verifyingMonth
    +

    +
    47 Averaging period (eg 6-hour, 24-hour) 60averagingPeriod
    +
    averagingPeriod
    +

    +
    48Forecast month61-62forecastMonth
    +
    forecastMonth
    +

    +
    - Spare (set to zero) 63-80
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition17.html b/doxygen/gribex/localDefinition17.html new file mode 100644 index 000000000..431d04452 --- /dev/null +++ b/doxygen/gribex/localDefinition17.html @@ -0,0 +1,249 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    17 = Surface temperature fields made from SST and SSMI data
    with first-guess values inserted on land points.
    +
    41 localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 Zero. 50
    +

    +

    +
    43 Zero. 51
    +

    +

    +
    44 +
    Date of SST field used; YYMMDD
    (Stored in 3 bytes as YYYYMMDD-19000000.
    Zero = date not given.)
    +
    52-54 dateOfSSTFieldUsed
    +
    dateOfSSTFieldUsed
    +

    +
    45 +
    Type of SST field used:
    0 = climatology
    1 = 1/1 degree SST data
    2 = 2/2 degree sat data
    +
    55 typeOfSSTFieldUsed
    +
    typeOfSSTFieldUsed
    +

    +
    46 +
    Count of ICE fields used (N, say)
    (NB. N maybe 0)
    +
    56 countOfICEFieldsUsed
    +
    countOfICEFieldsUsed
    +

    +
    47 +
    Date of first ICE field used; YYYYMMDD.
    (Stored in 3 bytes as YYYYMMDD-19000000.
    Zero = date not given.)
    +
    57-59 dateOfIceFieldUsed
    +
    dateOfIceFieldUsed
    +

    +
    48 First day satellite number (ICE data) 60 satelliteNumber
    +
    satelliteNumber
    +

    +
    49 +
    Date of second ICE field used; YYYYMMDD.
    (Stored in 3 bytes as YYYYMMDD-19000000.
    Zero = date not given.)
    +
    61-63
    +

    +

    +
    50 Second day satellite number (ICE data) 64
    +

    +

    +
    51 +
    Date of third ICE field used; YYYYMMDD.
    (Stored in 3 bytes as YYYYMMDD-19000000.
    Zero = date not given.)
    +
    65-67
    +

    +

    +
    52 Third day satellite number (ICE data). 68
    +

    +

    +
    ... ... -
    +

    +

    +
    45 + (N*2) +
    Date of Nth ICE field used; YYYYMMDD.
    (Stored in 3 bytes as YYYYMMDD-19000000.
    Zero = date not given.)
    +
    56 + N*4
    +

    +

    +
    46 + (N*2) Nth day satellite number (ICE data). 57 + N*4
    +

    +

    +
    -Slots for dates are allocated 10 at a time, so some +slots may be empty (set to zero). Empty slots are not included in the +count N. 57 + M*40
    +

    +

    +
    +

    diff --git a/doxygen/gribex/localDefinition18.html b/doxygen/gribex/localDefinition18.html new file mode 100644 index 000000000..6f4f1e4a2 --- /dev/null +++ b/doxygen/gribex/localDefinition18.html @@ -0,0 +1,157 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    18 = Multi-analysis ensemble data
    +
    41 localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Ensemble forecast number:
    = 0 for a control forecast.
    Not used for analysis (set to zero)
    +
    50perturbationNumber
    +
    perturbationNumber
    +

    +
    43 +
    Total number of forecasts in ensemble.
    (Set to 1 for analysis)
    +
    51numberOfForecastsInEnsemble
    +
    numberOfForecastsInEnsemble
    +

    +
    44 +
    Data origin
    = WMO identifier of centre providing the analysis
    = 255 for a consensus product
    +
    52origin
    +
    dataOrigin
    +

    +
    45 +
    Model
    Four character identifier of forecast used
    = "ECMF" for ECMWF IFS
    = WMO centre CCCC identifier otherwise
    (4 Ascii characters, right justified)
    +
    53 - 56modelIdentifier
    +
    modelIdentifier
    +

    +
    46 +
    Consensus count
    Indicates the composition of the starting analysis for a
    product (analysis, forecast, ..)
    = 0 for a product from one centre (ie not a consensus product)
    = n for a consensus product, where n is the number of
    analyses used in the consensus analysis.
    (nb. This allows the case n = 1.)
    +
    57consensusCount
    +
    consensusCount
    +

    +
    -Spare (set to zero)58 - 60
    +

    +

    +
    47 - 61 +
    WMO centre CCCC identifiers for the analyses used, eg "KWBC".
    (4 Ascii characters, right justified)
    Unused list entries are set to four blanks.
    +
    61 - 120ccccIdentifiers
    +
    ccccIdentifiers
    +
    consensusCount
    +values
    +
    diff --git a/doxygen/gribex/localDefinition19.html b/doxygen/gribex/localDefinition19.html new file mode 100644 index 000000000..51bfd6620 --- /dev/null +++ b/doxygen/gribex/localDefinition19.html @@ -0,0 +1,412 @@ +

    +

    The computation of EFI changed +with the implementation of VarEPS-Monthly in March 2008. This change +had to be reflected in the information stored in the GRIB Header. Therefore, we have 2 versions +regarding the content of local definition 19. The layout is the same, +and applications do not need to be recompiled, unless they make use of +the extra information.

    +

    The two definitions follow:

    + +Please, refer to the documentation about Implementation +of VarEPS-Monthly for further information. +

    Definition prior to March 2008

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    19 = Extreme forecast index data
    +
    41 localDefinitionNumberlocalDefinitionNumber
    +
    38Class: +1 = operations42classmarsClass
    +
    39 +
    Type:
    27 = extreme forecast index
    28 = extreme forecast index control
    +
    43typemarsType
    +
    40Stream: +1035 = ensemble forecast44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Zero, for compatibility with Mars labelling
    +
    50
    +

    +

    +
    43 Ensemble size. 51ensembleSize
    +
    ensembleSize
    +

    +
    44 Power of 10 used to scale climate weight = F, say 52powerOfTenUsedToScaleClimateWeight
    +
    powerOfTenUsedToScaleClimateWeight
    +

    +
    45 Weight*10**F applied to climate month 1, stored as an +integer 53 - 56weightAppliedToClimateMonth1
    +
    weightAppliedToClimateMonth1
    +

    +
    46 First month used to build climate month 1, YYYYMM 57-59firstMonthUsedToBuildClimateMonth1
    +
    firstMonthUsedToBuildClimateMonth1
    +

    +
    47 Last month used to build climate month 1, YYYYMM 60-62lastMonthUsedToBuildClimateMonth1
    +
    lastMonthUsedToBuildClimateMonth1
    +

    +
    48 First month used to build climate month 2, YYYYMM 63-65firstMonthUsedToBuildClimateMonth2
    +
    firstMonthUsedToBuildClimateMonth2
    +

    +
    49 Last month used to build climate month 2, YYYYMM 66-68lastMonthUsedToBuildClimateMonth2
    +
    lastMonthUsedToBuildClimateMonth2
    +

    +
    50EFI order69efiOrder
    +
    efiOrder
    +

    +
    51Set to 0 for this version of EFI(prior to March 2008)70
    +

    +

    +
    -Set to zero71 - 80
    +

    +

    +
    +

    Definition after March 2008

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    19 = Extreme forecast index data
    +
    41 localDefinitionNumberlocalDefinitionNumber
    +
    38Class: +1 = operations 42classmarsClass
    +
    39 +
    Type:
    27 = extreme forecast index
    28 = extreme forecast index control
    +
    43typemarsType
    +
    40Stream: +1035 = ensemble forecast44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Zero, for compatibility with Mars labelling
    +
    50
    +

    +

    +
    43 Ensemble size. 51ensembleSizeensembleSize
    +
    44 Version number of the latest experimental Suite(1-255)52
    +

    +

    +
    45 Implementation date of the latest model cycle +(YYYYMMDDHH)53 - 56
    +

    +

    +
    46 Number of re-forecast years in the model climate +(Currently set to 18) 57-59
    +

    +

    +
    47 Length (in number of days) of the climate sampling +window centred over the day of the climate run (Currently set to 31) 60-62
    +

    +

    +
    48 Sample size of the model climate (Currently set to 0 = +No climate files prepared for days between two forecast runs) 63-65
    +

    +

    +
    49 Version of model climate (Currently set to 0 = No +climate files prepared for days between two re-forecast runs) 66-68
    +

    +

    +
    50 Set to 0 for the EFI 69
    +

    +

    +
    51Set to 1 for this version of EFI(prior to March 2008) 70
    +

    +

    +
    -Set to zero 71-80
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition190.html b/doxygen/gribex/localDefinition190.html new file mode 100644 index 000000000..daa54e369 --- /dev/null +++ b/doxygen/gribex/localDefinition190.html @@ -0,0 +1,167 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keyCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    190 = Multiple ECMWF local definitions
    +
    41 localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 Zero, for compatibility with Mars labelling 50
    +

    +

    +
    43Zero, for compatibility with Mars labelling 51
    +

    +

    +
    44 Number of ECMWF local definitions (N, say)52numberOfLocalDefinitions
    +
    numberOfLocalDefinitions
    +

    +
    45First ECMWF local definition number53localDefNumberOne
    +
    localDefNumberOne
    +

    +
    46 Number of bytes in first ECMWF local definition number54-55numberOfBytesInLocalDefinition
    +
    numberOfBytesInLocalDefinition
    +

    +
    47 Second ECMWF local definition number56
    +

    +

    +
    48Number of bytes in second ECMWF local definition number + 57-58
    +

    +

    +
    ... +
    ...
    +
     
    +

    +

    +
    43+N*2Stream of ECMWF local definition bytes previously +encode/decoded via function calls53+N*3
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition191.html b/doxygen/gribex/localDefinition191.html new file mode 100644 index 000000000..5d49132f6 --- /dev/null +++ b/doxygen/gribex/localDefinition191.html @@ -0,0 +1,163 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keyCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    191 = Free format data descriptor
    +
    41 localDefinitionNumberlocalDefinitionNumber
    +
    38Class: 121 += general member state data42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 Zero, for compatibility with Mars labelling 50
    +

    +

    +
    43Zero, for compatibility with Mars labelling 51
    +

    +

    +
    44 Format version major number52formatVersionMajorNumber
    +
    formatVersionMajorNumber
    +
    45Format version minor number 53formatVersionMinorNumber
    +
    formatVersionMinorNumber
    +
    46 Original sub-centre identifier54originalSubCentreIdentifier
    +
    originalSubCentreIdentifier
    +
    47-50 Set to zero55-58
    +

    +

    +
    51 Number of bytes of free format data descriptor (N, say)59-60numberOfBytesOfFreeFormatData
    +
    numberOfBytesOfFreeFormatData
    +
    52-(51+N/J) +
    Data descriptor bytes packed in integer array elements
    (J= the number of bytes in an integer = 4 or 8)
    +
    61-(60+N)freeFormData
    +
    freeFormDatanumberOfBytesOfFreeFormatData +values.
    +
    -The section is padded with zeroes to make the overall +length of the section = 60 + 80*M for some M > 0(61+N)-(60+80*M)
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition192.html b/doxygen/gribex/localDefinition192.html new file mode 100644 index 000000000..bbdcce91a --- /dev/null +++ b/doxygen/gribex/localDefinition192.html @@ -0,0 +1,184 @@ +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keyCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    192 = Multiple ECMWF local definitions
    +
    41 localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 Zero, for compatibility with Mars labelling 50
    +

    +

    +
    43Zero, for compatibility with Mars labelling 51
    +

    +

    +
    44Number of ECMWF local definitions52numberOfLocalDefinitions
    +
    numberOfLocalDefinitions
    +

    +
    45 +
    First ECMWF local definition length (N1).
    This is the number of KSEC1 elements (not the number of octets).
    +
     subLocalDefinitionLength
    +
    subLocalDefinitionLength
    +

    +
    46 +
    List of first ECMWF local definition values.
    The first value is the local definition number.
    +
     subLocalDefinitionNumber
    +
    subLocalDefinitionNumber
    +

    +
    45+N1Second ECMWF local definition length (N2). 
    +

    +

    +
    46+N1List of second ECMWF local definition values. 
    +

    +

    +
    45+N1+N2Third ECMWF local definition length (N3). 
    +

    +

    +
    46+N1+N2List of third ECMWF local definition values. 
    +

    +

    +
    ... +
    ...
    +
     
    +

    +

    +
    +

    +

    Each list of ECMWF local definition values starts:

    +
      ECMWF local GRIB use definition identifier
    Class
    Type
    Stream
    Version number or experiment identifier
    etc.
    diff --git a/doxygen/gribex/localDefinition2.html b/doxygen/gribex/localDefinition2.html new file mode 100644 index 000000000..06317a181 --- /dev/null +++ b/doxygen/gribex/localDefinition2.html @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keys
    +
    Coded +GRIB_API keys
    +
    Comments
    +
    37 +
    ECMWF local GRIB use definition identifier
    2 = Cluster means and standard deviations.
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 Cluster number. 50number
    +
    clusterNumber
    +

    +
    43 Total number of clusters. 51totalNumberOfClusters
    +
    totalNumberOfClusters
    +

    +
    - Spare (set to zero) 52
    +

    +

    +
    44 +
    Clustering method:
    1 = Maximum linkage method
    2 = Mixed method
    3 = Small linkage method
    +
    53clusteringMethod
    +
    clusteringMethod
    +
    45 Start time step considered when clustering. (Same +units of time as forecast timesteps.) 54-55startTimeStep
    +
    startTimeStep
    +
    46 End time step considered when clustering. (Same units +of time as forecast timesteps.) 56-57endTimeStep
    +
    endTimeStep
    +
    47 Northern latitude of the domain of clustering. 58-60northernLatitudeOfDomain
    +
    northernLatitudeOfDomainKey "domain" can be used. +It contains the 4 coordinates.
    +
    48 Western longitude of the domain of clustering. 61-63westernLongitudeOfDomain
    +
    westernLongitudeOfDomain
    +
    49 Southern latitude of the domain of clustering. 64-66southernLatitudeOfDomain
    +
    southernLatitudeOfDomain
    +
    50 Eastern longitude of the domain of clustering. 67-69easternLongitudeOfDomain
    +
    easternLongitudeOfDomain
    +
    51 Number of cluster to which the operational forecast +belongs. 70operationalForecastCluster
    +
    operationalForecastCluster
    +
    52 Number of cluster to which the control forecast +belongs. 71controlForecastCluster
    +
    controlForecastCluster
    +
    53 Number of forecasts belonging to the cluster, +including the control forecast (N). 72numberOfForecastsInCluster
    +
    numberOfForecastsInCluster
    +
    54-53+N List of N ensemble forecast numbers. 73 -72+NensembleForecastNumbers
    +
    ensembleForecastNumberslist of +numberOfForecastsInCluster numbers
    +
    -Spare to ensure fixed length for section.73+N-328
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition20.html b/doxygen/gribex/localDefinition20.html new file mode 100644 index 000000000..9712e6e55 --- /dev/null +++ b/doxygen/gribex/localDefinition20.html @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    20 = 4D variational increments
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type +=33(4D variational increments)43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42Iteration 50iteration
    +
    marsIteration
    +

    +
    43 Total number of iterations 51totalNumberOfIterations
    +
    totalNumberOfIterations
    +

    +
    - Spare (set to zero). 52
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition21.html b/doxygen/gribex/localDefinition21.html new file mode 100644 index 000000000..95a4ffc8e --- /dev/null +++ b/doxygen/gribex/localDefinition21.html @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    21 = Sensitive area predictions.
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42Forecast number or singular vector number or flight +number. Zero for analysis. 50-51forecastOrSingularVectorNumber
    +
    forecastOrSingularVectorNumber
    +

    +
    43-57 These elements are set to zero for type = 60 +(perturbed analysis). Otherwise: 52-93
    +

    +

    +
    43 Number of iterations. 52-53numberOfIterations
    +
    numberOfIterations
    +

    +
    44 Number of singular vectors computed. 54-55numberOfSingularVectorsComputed
    +
    numberOfSingularVectorsComputed
    +

    +
    45 Norm used at initial time. 56normAtInitialTime
    +
    normAtInitialTime
    +

    +
    46 Norm used at final time. 57normAtFinalTime
    +
    normAtFinalTime
    +

    +
    47 Multiplication factor to convert latitude/longitude +and accuracy from real to integer. 58-61multiplicationFactorForLatLong
    +
    multiplicationFactorForLatLong
    +

    +
    48 Latitude in degrees of north-west corner of forecast +verification area multiplied by KSEC1(47). 62-65northWestLatitudeOfVerficationArea
    +
    northWestLatitudeOfVerficationArea
    +

    +
    49 Longitude in degrees of north-west corner offorecast +verification area multiplied by KSEC1(47). 66-69northWestLongitudeOfVerficationArea
    +
    northWestLongitudeOfVerficationArea
    +

    +
    50 Latitude in degrees of south-east corner of forecast +verification area multiplied by KSEC1(47). 70-73southEastLatitudeOfVerficationArea
    +
    southEastLatitudeOfVerficationArea
    +

    +
    51 Longitude in degrees of south-east corner of forecast +verification area multiplied by KSEC1(47). 74-77southEastLongitudeOfVerficationArea
    +
    southEastLongitudeOfVerficationArea
    +

    +
    52 Accuracy multiplied by KSEC1(47). 78-81accuracyMultipliedByFactor
    +
    accuracyMultipliedByFactor
    +

    +
    53 Number of singular vectors evolved. 82-83numberOfSingularVectorsEvolved
    +
    numberOfSingularVectorsEvolved
    +

    +
    54-55 +
    Ritz numbers.
    RITZ = KSEC1(55)*EXP( LOG(10.0)*KSEC1(54) )
    Thus:
    +
    -
    +

    +

    +
    54 NINT( LOG10(RITZ)-5 ) 84-87NINT_LOG10_RITZ
    +
    NINT_LOG10_RITZ
    +

    +
    55 NINT( RITZ / EXP(LOG(10.0)*KSEC1(54) ) ) 88-91NINT_RITZ_EXP
    +
    NINT_RITZ_EXP
    +

    +
    56 For all types, this is the period in hours between the +time when the targeted observations are taken (the reference time in +KSEC1(10:14)) and the forecast verification time.
    +For singular vectors, this is the optimisation time.
    92opttime
    +
    optimisationTime
    +

    +
    57 Forecast lead time (hours)
    +For all types, this is the lead time of forecast(s) on which sensitive +area prediction is based. The lead time is the time from the +initialization of the
    +forecast to the reference time in KSEC1(10:14).
    93leadtime
    +
    forecastLeadTime
    +

    +
    58Domain. 1 ASCII character (uppercase). 94 marsDomain
    +
    marsDomain
    +

    +
    59Method number. 95-96methodNumber
    +
    methodNumber
    +

    +
    60Total number of forecasts in ensemble (or zero if not +appropriate). 97-98numberOfForecastsInEnsemble
    +
    numberOfForecastsInEnsemble
    +

    +
    61 +

    Shape of verification region:
    +0: lat-lon box as given by KSEC1(48-51)
    +1: circular region with centre at

    +
      latitude  = 0.5*(KSEC1(48)+KSEC1(50))/KSEC1(47) (deg)
    longitude = 0.5*(KSEC1(49)+KSEC1(51))/KSEC1(47) (deg)
    and with
    radius = 0.5*(KSEC1(48)-KSEC1(50))/(KSEC1(47)*111.199)
    = great-circle distance in km
    +This is the largest circle fitting in a lat-lon box defined by +KSEC1(48-51).
    99shapeOfVerificationArea
    +
    shapeOfVerificationArea
    +

    +
    - Spare (set to zero) 100
    +

    +

    +
    +

    A negative Ritz number or a negative latitude/longitude value +is stored as a positive number with its most significant bit set to 1. diff --git a/doxygen/gribex/localDefinition22.html b/doxygen/gribex/localDefinition22.html new file mode 100644 index 000000000..7125ecdf7 --- /dev/null +++ b/doxygen/gribex/localDefinition22.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 elementContentsGRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier. 
    22= coupled Atmospheric, Wave and Ocean models (with hindcast support))
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42Ensemble member number50-51
    +

    +

    +
    43Total number of ensembles. 52-53
    +

    +

    +
    44 +
    System number (the "scientific version" number):
    0 = RD experiment
    1-65534 = operational version number
    65535 = missing
    +
    54-55
    +

    +

    +
    45 +
    Method number: distinguishes scientifically different forecast ensembles
    (eg different calibration/bias correction)
    0 = control integration (ie without data assimilation)
    1 - 65534 = operational version number
    +
    56-57
    +

    +

    +
    46Reference date (YYYYMMDD)58-61
    +

    +

    +
    47Climate date - from (YYYYMMDD)62-65
    +

    +

    +
    48Climate date - to (YYYYMMDD)66-69
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition23.html b/doxygen/gribex/localDefinition23.html new file mode 100644 index 000000000..f91f5e292 --- /dev/null +++ b/doxygen/gribex/localDefinition23.html @@ -0,0 +1,255 @@ +

    .

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keyCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    23 = Coupled atmospheric, wave and ocean models (with hindcast support)
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45stream
    +
    marsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expver
    +
    experimentVersionNumber
    +
    42 +
    Ensemble member number.
    Control forecast is number 0, perturbed forecasts are 1-nn.
    +
    50-51number
    +
    perturbationNumber
    +

    +
    43 Number of forecasts in ensemble 81-82
    +

    +

    +
    44 +
    System number: the "scientific version" number.
    0 = RD experiment
    1 - 65534 = operational version number
    65535 = missing
    +
    52-53system
    +
    systemNumber
    +

    +
    45 +
    Method number
    Distinguishes scientifically different forecast ensembles
    (eg different calibration/bias correction)
    0 = control integration (ie without data assimilation)
    1 - 65534 = operational version number
    +
    54-55method
    +
    methodNumber
    +

    +
    46 Verifying month (in format YYYYMM), or period used for +mean (dddDDD for period from time ddd to time DDD) 56-59verifyingMonth
    +
    verifyingMonth
    +

    +
    47 Averaging period (eg 6-hour, 24-hour) 60averagingPeriod
    +
    averagingPeriod
    +

    +
    48Forecast month61-62forecastMonth
    +
    forecastMonth
    +

    +
    49Reference date (YYYYMMDD)63-66refdate
    +
    referenceDate
    +

    +
    50Climate date - from (YYYYMMDD)67-70climateDateFrom
    +
    climateDateFrom
    +

    +
    51Climate date - to (YYYYMMDD)71-74climateDateTo
    +
    climateDateTo
    +

    +
    52-59Probability information75-84
    +

    +

    +
    52Threshold units decimal scale factor.
    ++ or - power of 10 (or zero).
    +Most significant bit = 1 for negative values.
    75unitsDecimalScaleFactor
    +
    unitsDecimalScaleFactor
    +

    +
    53Threshold indicator:
    +1 = Only lower threshold is present.
    +2 = Only upper threshold is present.
    +3 = Both upper and lower thresholds are present.
    76thresholdIndicator
    +
    thresholdIndicator
    +

    +
    54 Lower threshold value.77-78lowerThresholdValue
    +
    lowerThresholdValue
    +

    +
    55 Upper threshold value.79-80upperThresholdValue
    +
    upperThresholdValue
    +

    +
    56-59Spare (set to zero)83-84
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition24.html b/doxygen/gribex/localDefinition24.html new file mode 100644 index 000000000..6998dda6c --- /dev/null +++ b/doxygen/gribex/localDefinition24.html @@ -0,0 +1,129 @@ +

    . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 elementContentsGRIB octetRecommended +GRIB_API keyCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    24 = Satellite image
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38 +
    Class
    +  = 1, Operations
    +            
    +
    42classmarsClass
    +
    39 +
    Type
    +  
    +
    43typemarsType
    +
    40 +
    Stream
    +  
    +
    44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42Satellite identifier as defined in WMO +Common code table C-5 50-51ident
    +
    satelliteIdentifier
    +

    +
    43Instrument identifier as defined in WMO +Common code table C-8 52-53instrument
    +
    instrumentIdentifier
    +

    +
    44Channel number channel +id tables 54-55channel
    +
    channelNumber
    +

    +
    45 +
    Function code. Initially defined as:
    0 = greyscale value,
    1 = temperature in K and is 145 + pixel value,
    2 = temperature and is pixel value.
    +
    56functionCode
    +
    functionCode
    +

    +
    diff --git a/doxygen/gribex/localDefinition25.html b/doxygen/gribex/localDefinition25.html new file mode 100644 index 000000000..6d77a0a70 --- /dev/null +++ b/doxygen/gribex/localDefinition25.html @@ -0,0 +1,103 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keyCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    25 = 4DVar model errors
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type=35(model +errors)43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Component index
    +
    50number
    +
    componentIndex
    +

    +
    43 +
    Number of components
    +
    51numberOfComponents
    +
    numberOfComponents
    +

    +
    44 +
    Model error type:
    1 - Full state
    2 - Forcing
    3 - Model Bias
    +
    52modelErrorType
    +
    modelErrorType
    +
    diff --git a/doxygen/gribex/localDefinition26.html b/doxygen/gribex/localDefinition26.html new file mode 100644 index 000000000..59936bd97 --- /dev/null +++ b/doxygen/gribex/localDefinition26.html @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keyCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    26 = MARS labeling or ensemble forecast data (with hindcast support).
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Ensemble member number.
    Control forecast is number 0, perturbed forecasts ar-nne 1.
    +
    50number
    +
    number
    +
    43 Set to 0, if not an ensemble forecast. Otherwise, the +total number of forecasts in an ensemble; the number includes the +control forecast. 51numberOfForecastsInEnsemble
    +
    numberOfForecastsInEnsemble
    +

    +
    44
    +
    Reference date (YYYYMMDD)52-55
    +
    referenceDate
    +
    referenceDate
    +

    +
    - Spare (set to zero). 56
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition27.html b/doxygen/gribex/localDefinition27.html new file mode 100644 index 000000000..d8a38bf9e --- /dev/null +++ b/doxygen/gribex/localDefinition27.html @@ -0,0 +1,198 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keyCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    27 = Forecasting Systems with Variable Resolution
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Ensemble member number.
    Control forecast is number 0, perturbed forecasts are 1-nn.
    +
    50number
    +
    perturbationNumber
    +

    +
    43 Number of forecasts in ensemble 51numberOfForecastsInEnsemble
    +
    numberOfForecastsInEnsemble
    +

    +
    44Ocean Atmosphere Coupling52oceanAtmosphereCoupling
    +
    oceanAtmosphereCoupling
    +

    +
    45Spare53
    +

    +

    +
    - Padding54-55
    +

    +

    +
    46 Leg base Date (in format YYYYMMDD) 56-59legBaseDate
    +
    legBaseDate
    +

    +
    47 Leg base Time (in format hhmm) 60-61legBaseTime
    +
    legBaseTime
    +

    +
    48 Leg Number 62legNumber
    +
    legNumber
    +

    +
    49Reference date (YYYYMMDD)63-66referenceDate
    +
    referenceDate
    +

    +
    50Climate date - from (YYYYMMDD)67-70climateDateFrom
    +
    climateDateFrom
    +

    +
    51Climate date - to (YYYYMMDD)71-74climateDateTo
    +
    climateDateTo
    +

    +
    -Spare (set to zero)75-107
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition3.html b/doxygen/gribex/localDefinition3.html new file mode 100644 index 000000000..ff3f5986e --- /dev/null +++ b/doxygen/gribex/localDefinition3.html @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    3 = Satellite image data.
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43type
    +
    marsType
    +

    +
    40Stream44-45stream
    +
    marsStream
    +

    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Band:
    0 = first infrared band
    1 = second infrared band
    10 = first visible band
    20 = water vapour
    +
    50band
    +
    band
    +

    +
    43 +
    Function code (interpretation of pixel value):
    0 = value is pixel value
    1 = value is temperature in degrees K, and is 145 + pixel value
    2 = value is temperature in degrees K, and is the pixel value
    255 = translation table follows
    +
    51functionCode
    +
    functionCode
    +
    -Spare (set to zero) 52
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition30.html b/doxygen/gribex/localDefinition30.html new file mode 100644 index 000000000..a0ca2f372 --- /dev/null +++ b/doxygen/gribex/localDefinition30.html @@ -0,0 +1,198 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    30 = Forecasting Systems with Variable Resolution
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Ensemble member number.
    Control forecast is number 0, perturbed forecasts are 1-nn.
    +
    50number
    +
    perturbationNumber
    +

    +
    43 Number of forecasts in ensemble 51
    +

    +

    +
    44Ocean Atmosphere Coupling52oceanAtmosphereCoupling
    +
    oceanAtmosphereCoupling
    +

    +
    45Spare53
    +

    +

    +
    - Padding54-55
    +

    +

    +
    46 Leg base Date (in format YYYYMMDD) 56-59legBaseDate
    +
    legBaseDate
    +

    +
    47 Leg base Time (in format hhmm) 60-61legBaseTime
    +
    legBaseTime
    +

    +
    48 Leg Number 62legNumber
    +
    legNumber
    +

    +
    49Date of forecast run (YYYYMMDD)63-66referenceDate
    +
    referenceDate
    +

    +
    50Climate date - from (YYYYMMDD)67-70climateDateFrom
    +
    climateDateFrom
    +

    +
    51Climate date - to (YYYYMMDD)71-74climateDateTo
    +
    climateDateTo
    +

    +
    -Spare (set to zero)75-106
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition31.html b/doxygen/gribex/localDefinition31.html new file mode 100644 index 000000000..a31aa1b7c --- /dev/null +++ b/doxygen/gribex/localDefinition31.html @@ -0,0 +1,163 @@ +

    For instantaneous fields, a monthly mean is the mean of the +fields sampled at +the specified averaging period.

    +

    For accumulated fields, a monthly mean is the mean rate of +accumulation of the +fields.

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    31 = EUROSIP products
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Number
    Ensemble member number.
    Control forecast is number 0,
    perturbed forecasts 1-nn.
    +
    50number
    +
    perturbationNumber
    +

    +
    43 Number of forecasts in ensemble 51numberOfForecastsInEnsemble
    +
    numberOfForecastsInEnsemble
    +

    +
    44 Forecast month 52-53forecastMonth
    +
    forecastMonth
    +

    +
    45 Date of forecast run 54-57dateOfForecastRun
    +
    dateOfForecastRun
    +

    +
    46 Number of models 58numberOfModels
    +
    numberOfModels
    +

    +
    - set to zero 59-100
    +

    +

    +
    47 - 27 + numberOfModelsModel identifier101 - 101 + numberOfModels*2modelIdentifier
    +
    modelIdentifier
    +

    +
    - Spare (set to zero) 101 + numberOfModels*2+1 - 240
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition4.html b/doxygen/gribex/localDefinition4.html new file mode 100644 index 000000000..0b5a3c8ac --- /dev/null +++ b/doxygen/gribex/localDefinition4.html @@ -0,0 +1,889 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    4 = Ocean model data.
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43type
    +
    marsType
    +
    40Stream44-45stream
    +
    marsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expver
    +
    experimentVersionNumber
    +
    42 Ensemble member number +
    50-51, if stream = 1090
    50, otherwise
    +
    number
    +
    perturbationNumber
    +

    +
    43 Zero 51, unless stream = 1090
    +

    +

    +
    - 1 (a flag showing a post-auxiliary array is in use) 52flagShowingPostAuxiliaryArrayInUse
    +
    flagShowingPostAuxiliaryArrayInUse
    +

    +
    44System number 53systemNumber
    +
    systemNumber
    +
    45Method number 54methodNumber
    +
    methodNumber
    +
    +

    +

    Used for storing ocean model data in GRIB code. A separate +version of code table 2 is used for ocean data: ECMWF local Code Table +2, Version Number 150 or 151 for FM92-VIII.

    +

    All coordinates in this local use GRIB definition are given +as 4-byte INTEGERs in the following units:

    +
      +
    • Latitudes and longitudes: microdegrees
    • +
    • Distance (general): metres (default: can be changed)
    • +
    • Time: seconds (default: can be changed)
    • +
    • Depth below sea level: millimetres (positive downwards)
    • +
    • Isopycnic level: potential density - 1000*106. +
        +
      • Permitted range of values is approximately:
      • +
      • -2.147*10 9 < i < 2.147*109
      • +
      +
    • +
    +

    At several points in the definition, there may be a need for +a variable amount of supplementary data. This is indicated with '(+info)', +and in such cases a supplementary data block is specified at the end of +the local use section.

    +

    +

    Coordinate structure definition.

    +

    The physical meaning of the (x,y,z,t) coordinate system is +defined below.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB API keysCoded +GRIB API keysComments
    46 +
    Space unit flag (applies only if lengths not otherwise labelled):
    0 = metres
    i<128 = 10**i metres
    i>128 = 10**(i-256) metres
    +
    55spaceUnitFlag
    +
    spaceUnitFlag
    +

    +
    47 +
    Vertical coordinate definition (z):
    0 = z above origin
    1 = R from origin
    2 = h above mean sea level geopotential
    3 = h above ground surface
    160 = Geopotential depth below mean sea level (mm)
    161 = Ocean isopycnic surface (potential density)
    +
    56verticalCoordinateDefinition
    +
    verticalCoordinateDefinition
    +

    +
    48 +
    Horizontal coordinate definition (x,y):
    0 = Latitude/longitude (microdegrees)
    1 = Cartesian (fundamental origin)
    2 = Cartesian (shifted, rotated origin) (+info)
    3 = Regular gaussian grid (microdegrees) (+info)
    4 = Polar stereographic (+info)
    5 = Spherical harmonic coefficients (INTEGERs) (+info)
    +
    57horizontalCoordinateDefinition
    +
    horizontalCoordinateDefinition
    +

    +
    49 +
    Time unit flag:
    0 = Seconds
    1 = Minutes
    2 = Hours
    3 = Days
    4 = Years
    5<i<128 = 10**(i-4) years

    i>128 = 10**(i-256) seconds

    +
    58timeUnitFlag
    +
    timeUnitFlag
    +

    +
    50 +
    Time coordinate definition (t):
    0 = Real Earth time (UTC)
    1 = Ideal Earth time (360 * 86400s days per year)
    +
    59timeCoordinateDefinition
    +
    timeCoordinateDefinition
    +

    +
    +

    +

    Position definition.

    +

    A 2-dimensional field located in 4-dimensional space-time +needs 2 coordinates to define where the field is located, and 2 +coordinates internal to the field. The locating coordinates are +specified first. Each coordinate is identified according to the +following table, in this order where possible:

    +
  • 1 = t
  • +
  • 2 = z
  • +
  • 3 = x
  • +
  • 4 = y +

    Mixed coordinates

    +It is possible to specify mixed coordinates, to allow sections at +angles to the coordinate system. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB API keysCoded +GRIB API keysComments
    51 +
    Mixed coordinate field flag:
    0 = No mixed coordinates
    1 = x,y coordinates mixed (+info)
    2 = x,z coordinates mixed (+info)
    3 = y,z coordinates mixed (+info)
    4 = x,t coordinates mixed (+info)
    5 = y,t coordinates mixed (+info)
    6 = z,t coordinates mixed (+info)
    +
    60mixedCoordinateFieldFlag
    +
    mixedCoordinateFieldFlag
    +

    +
    52 Coordinate 1 flag (usually time). 61coordinate1Flag
    +
    coordinate1Flag
    +

    +
    53 +
    Averaging flag:
    0 = no averaging (data on/at level 1)
    1 = inclusive average between level 1 and 2
    2 = exclusive average between level 1 and 2
    +
    62averaging1Flag
    +
    averaging1Flag
    +

    +
    54 Position of level 1 63-66coordinate1Start
    +
    coordinate1Start
    +

    +
    55 Position of level 2 (or zero if not used) 67-70coordinate1End
    +
    coordinate1End
    +

    +
    56 Coordinate 2 flag (usually z-coordinate). 71coordinate2Flag
    +
    coordinate2Flag
    +

    +
    57 +
    Averaging flag:
    0 = no averaging (data on/at level 1)
    1 = inclusive average between level 1 and 2
    2 = exclusive average between level 1 and 2
    +
    72averaging2Flag
    +
    averaging2Flag
    +

    +
    58 Position of level 1 73-76coordinate2Start
    +
    coordinate2Start
    +

    +
    59 Position of level 2 (or zero if not used) 77-80coordinate2End
    +
    coordinate2End
    +

    +
    +An inclusive average discards land points when calculating the average, +and will produce a value where there is at least one valid ocean point. +An exclusive average will only produce a value if all of the points +being averaged are valid.

    +

    Data grid definitions

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB API keysCoded +GRIB API keysComments
    60 Coordinate 3 flag (x-axis, usually longitude). 81coordinate3Flag
    +
    coordinate3Flag
    +

    +
    61 Coordinate 4 flag (y-axis, usually latitude). 82coordinate4Flag
    +
    coordinate4Flag
    +

    +
    62 Coordinate 4 of first grid point 83-86coordinate4OfFirstGridPoint
    +
    coordinate4OfFirstGridPoint
    +

    +
    63 Coordinate 3 of first grid point 87-90coordinate3OfFirstGridPoint
    +
    coordinate3OfFirstGridPoint
    +

    +
    64 Coordinate 4 of last grid point 91-94coordinate4OfLastGridPoint
    +
    coordinate4OfLastGridPoint
    +

    +
    65 Coordinate 3 of last grid point 95-98coordinate3OfLastGridPoint
    +
    coordinate3OfLastGridPoint
    +

    +
    66 i-increment 99-102iIncrement
    +
    iIncrement
    +

    +
    67 j-increment 103-106jIncrement
    +
    jIncrement
    +

    +
    68 +
    Flag for irregular grid coordinate list:
    0 = none
    1 = x-axis values (typically longitude)
    2 = y-axis values (typically latitude)
    3 = first x-axis, then y-axis values given
    +
    107flagForIrregularGridCoordinateList
    +
    flagForIrregularGridCoordinateList
    +

    +
    69 +
    Flag for normal or staggered grid:
    0 = normal grid (all rows have same x-coordinate system)
    1 = staggered grid (odd and even rows have different x-coordinate systems,
    eg Arakawa grid).
    +
    108flagForNormalOrStaggeredGrid
    +
    flagForNormalOrStaggeredGrid
    +

    +
    +

    +

    +

    Auxiliary information

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB API keysCoded +GRIB API keysComments
    70 +
    Flag for any further information:
    0 = none
    1 = auxiliary array contains x-axis topographic depths/heights.
    +
    109flagForAnyFurtherInformation
    +
    flagForAnyFurtherInformation
    +

    +
    71 Number of entries in the horizontal coordinate +definition 110numberInHorizontalCoordinates
    +
    numberInHorizontalCoordinates
    +

    +
    72 Number of entries in mixed coordinate definition 111-112numberInMixedCoordinateDefinition
    +
    numberInMixedCoordinateDefinition
    +

    +
    73 Number of entries in the grid coordinate list 113-114numberInTheGridCoordinateList
    +
    numberInTheGridCoordinateList
    +

    +
    74 Number of entries in the auxiliary array 115-116numberInTheAuxiliaryArray
    +
    numberInTheAuxiliaryArray
    +

    +
    +

    +

    The horizontal coordinate definition, the mixed coordinate +definition, the grid coordinate list, the auxiliary array and the +post-auxiliary-array values are stored in GRIB as 4-byte INTEGERs.

    +

    + + + + + + + + + + + + + + + + + +
    Horizontal coordinate definition
    KSEC1 element ContentsRecommended +GRIB API keysCoded +GRIB API keysComments
    A1-nn Horizontal coordinate supplement. Not yet defined.horizontalCoordinateSupplement
    +
    horizontalCoordinateSupplement
    +
    "numberInHorizontalCoordinates" +elements
    +
    +

    +

    +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Mixed coordinate definition
    KSEC1 element ContentsRecommended +GRIB API keysCoded +GRIB API keysComments
    B1 +
    Flag for regularity of x-y coordinate mixing:
    0 = Mixing is regular and linear
    1 = Mixing is irregular, code given
    +
    mixedCoordinateDefinition
    +
    mixedCoordinateDefinition
    +
    "numberInMixedCoordinateDefinition" +elements
    +
    - For regular, linear mixing.
    +

    +

    +
    B2 Alpha *109
    +

    +

    +
    B3 X0
    +

    +

    +
    B4 Y0
    +

    +

    +
    - Irregular mixing with code given.
    +

    +

    +
    B2 Locally defined codes to define section.
    +

    +

    +
    B3 Locally defined codes to define section.
    +

    +

    +
    B4 Locally defined codes to define section.
    +

    +

    +
    +

    +

    +

    + + + + + + + + + + + + + + + + + +
    Grid coordinate list
    KSEC1 element ContentsRecommended +GRIB API keysCoded +GRIB API keysComments
    C1-nn +
    Coordinates of irregular x and y-axes.
    The x-axis is given first, then the second x-axis (if staggered grid), and
    then the y-axis.
    If the x-axis is regular but staggered, the longitude of the first point of
    the second row should be specified as the first entry of this list.
    +
    gridCoordinate
    +
    gridCoordinate
    +
    "numberInTheGridCoordinateList"
    +values
    +
    +

    +

    +

    + + + + + + + + + + + + + + + + + +
    Auxiliary array
    KSEC1 element ContentsRecommended +GRIB API keysCoded +GRIB API keysComments
    D1-nn Auxiliary array values.auxiliary
    +
    auxiliary
    +
    "numberInTheAuxiliaryArray" +values
    +
    +

    +

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Post-auxiliary array
    KSEC1 element ContentsRecommended +GRIB API keysCoded +GRIB API keysComments
    E1 Size of post-auxiliary array (number of entries, +including E1)sizeOfPostAuxiliaryArrayPlusOne
    +
    sizeOfPostAuxiliaryArrayPlusOne
    +

    +
    E2-E4 Array valuespostAuxiliary
    +
    postAuxiliary
    +
    "sizeOfPostAuxiliaryArrayPlusOne- +1" valies
    +
    E5-E7Used for hindcast support if E1 > 4
    +

    +

    +
    E8Used if E1=8
    +

    +

    +
    E5Reference date (YYYYMMDD)
    +

    +

    +
    E6Climate date - from (YYYYMMDD), or zero
    +

    +

    +
    E7Climate date - to (YYYYMMDD), or zero
    +

    +

    +
    E8 +
    Ocean Atmosphere coupling:
    0 = unspecified
    1 = uncoupled
    2 = coupled
    +

    +

    +

    +
    +

    +

    If the post-auxiliary array is not being used, E1 (the +value in KSEC1 after the end of the previously defined part of KSEC1) +must be explicitly set to zero when coding or else errors may result.

    +

    +

    Comments on setting other GRIB parameters.

    +The time and time-range data should be set in the main section, if +possible. +

    The indicator of type of level should be set to 160 (depth +below sea level) for all oceanographic data. The depth in metres should +be set to the appropriate value if the field is a horizontal section, +and to zero in all other cases.

    +

    It is assumed that the grid description section of the GRIB +code corresponds to a latitude/longitude grid, with correct values for +the number of points along parallels/meridians, and the coordinates of +the first and last data points are in millidegrees (or the appropriate +units from this section, divided by 1000).

    +

    The coordinate increments should be given to the extent +that the field is regular. diff --git a/doxygen/gribex/localDefinition5.html b/doxygen/gribex/localDefinition5.html new file mode 100644 index 000000000..dc84e4e9d --- /dev/null +++ b/doxygen/gribex/localDefinition5.html @@ -0,0 +1,156 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    +
    37 +
    ECMWF local GRIB use definition identifier.
    5 = Forecast probability data.
    +
    41localDefinitionNumber
    +
    localDefinitionNumber
    +

    +
    38Class42class
    +
    marsClass
    +
    39Type43type
    +
    marsType
    +

    +
    40Stream44-45stream
    +
    marsStream
    +

    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 Forecast probability number. 50number
    +
    forecastProbabilityNumber
    +

    +
    43 Total number of forecast probabilities. 51totalNumberOfForecastProbabilities
    +
    totalNumberOfForecastProbabilities
    +

    +
    44 +
    Threshold units decimal scale factor.
    + or - power of 10 (or zero).
    Most significant bit = 1 for negative values.
    +
    52localDecimalScaleFactor
    +
    localDecimalScaleFactor
    +

    +
    45 +
    Threshold indicator:
    1 = Only lower threshold is present.
    2 = Only upper threshold is present.
    3 = Both upper and lower thresholds are present.
    +
    53thresholdIndicator
    +
    thresholdIndicator
    +

    +
    46 Lower threshold value. 54-55lowerThreshold
    +
    lowerThreshold
    +

    +
    47 Upper threshold value. 56-57upperThreshold
    +
    upperThreshold
    +

    +
    -Spare (set to zero). 58
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition50.html b/doxygen/gribex/localDefinition50.html new file mode 100644 index 000000000..2207f74e0 --- /dev/null +++ b/doxygen/gribex/localDefinition50.html @@ -0,0 +1,199 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keyCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    50 = Member state data
    +
    41 localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Number:
    Ensemble forecast number.
    Control forecast is number 0,
    perturbed foecasts 1 - nn.
    Set to 0 if not ensemble forecast.
    +
    50number
    +
    perturbationNumber
    +

    +
    43 +
    Total:
    Total number of forecasts in ensemble.
    This number includes the control forecast.
    Set to 0 if not ensemble forecast.
    +
    51numberOfForecastsInEnsemble
    +
    numberOfForecastsInEnsemble
    +

    +
    44 Model identifier (in range 1 - 255)52modelIdentifier
    +
    modelIdentifier
    +

    +
    45 Latitude of North-west corner of area (degrees*10^6)53 - 56latitudeOfNorthWestCornerOfArea
    +
    latitudeOfNorthWestCornerOfArea
    +

    +
    46Longitude of North-west corner of area (degrees*10^6)57 - 60longitudeOfNorthWestCornerOfArea
    +
    longitudeOfNorthWestCornerOfArea
    +

    +
    47Latitude of South-east corner of area (degrees*10^6) 61 - 64latitudeOfSouthEastCornerOfArea
    +
    latitudeOfSouthEastCornerOfArea
    +

    +
    48Longitude of South-east corner of area (degrees*10^6) 65 - 68longitudeOfSouthEastCornerOfArea
    +
    longitudeOfSouthEastCornerOfArea
    +

    +
    49 - 60 Reserved for ECMWF additions69 - 116
    +

    +

    +
    49Original parameter number69originalParameterNumber
    +
    originalParameterNumber
    +

    +
    50Original parameter table number70originalParameterTableNumber
    +
    originalParameterTableNumber
    +
    51 - 60Set to zero71 - 116
    +

    +

    +
    61 - 106Optional data117 - 300optionalData
    +
    optionalData
    +

    +
    diff --git a/doxygen/gribex/localDefinition6.html b/doxygen/gribex/localDefinition6.html new file mode 100644 index 000000000..d53dade12 --- /dev/null +++ b/doxygen/gribex/localDefinition6.html @@ -0,0 +1,220 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    6 = Surface temperature fields made from SST and SSMI data with first-guess
    values inserted on land points.
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43type
    +
    marsType
    +

    +
    40Stream44-45stream
    +
    marsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 Zero. 50
    +

    +

    +
    43 Zero. 51
    +

    +

    +
    44 Date of SST field used; YYMMDD 52-54dateSSTFieldUsed
    +
    dateSSTFieldUsed
    +

    +
    45 +
    Type of SST field used:
    0 = climatology
    1 = 1/1 degree SST data
    2 = 2/2 degree sat data
    +
    55typeOfSSTFieldUsed
    +
    typeOfSSTFieldUsed
    +

    +
    46 Count of ICE fields used (N, say) 56countOfICEFieldsUsed
    +
    countOfICEFieldsUsed
    +

    +
    47 +
    Date of first ICE field used; 
    YYMMDD = zero if missing.
    +
    57-59dateOfIceFieldUsed[1]
    +
    dateOfIceFieldUsed[1]
    +
    48 First day satellite number (ICE data) 60satelliteNumber[1]
    +
    satelliteNumber[1]
    +
    49 +
    Date of second ICE field used;
    YYMMDD = zero if missing.
    +
    61-63dateOfIceFieldUsed[2]dateOfIceFieldUsed[2]
    +
    50 Second day satellite number (ICE data) 64satelliteNumber[2]satelliteNumber[2]
    +
    51 +
    Date of third ICE field used;
    YYMMDD = zero if missing.
    +
    65-67dateOfIceFieldUsed[3]dateOfIceFieldUsed[3]
    +
    52 Third day satellite number (ICE data). 68satelliteNumber[3]satelliteNumber[3]
    +
    ... ... -
    +

    +

    +
    45 + (N*2) +
    Date of Nth field used;
    YYMMDD = zero if missing.
    +
    56 + N*4dateOfIceFieldUsed[countOfICEFieldsUsed]dateOfIceFieldUsed[countOfICEFieldsUsed]
    +
    46 + (N*2) Nth day satellite number (ICE data). 57 + N*4satelliteNumber[countOfICEFieldsUsed]satelliteNumber[countOfICEFieldsUsed]
    +
    diff --git a/doxygen/gribex/localDefinition7.html b/doxygen/gribex/localDefinition7.html new file mode 100644 index 000000000..79b44a78e --- /dev/null +++ b/doxygen/gribex/localDefinition7.html @@ -0,0 +1,128 @@ +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    7 = sensitivity data
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    Forecast number (if type = 51)
    Iteration number (if type not 51)
    +
    50iteration
    +
    iterationNumber
    +

    +
    43 +
    Total number of diagnostics (if type = 50).
    0 for trajectory forecast (if type=51).
    Number of iterations in diagnostic minimisation (if type=52).
    +
    51numberOfForecastsInEnsemble
    +
    numberOfForecastsInEnsemble
    +

    +
    44 +
    Domain:
    0 = Global
    1 = Europe
    2 = Northern hemisphere
    3 = Southern hemisphere
    +
    52domain
    +
    domain
    +

    +
    45 Diagnostic number 53diagnostic
    +
    diagnosticNumber
    +

    +
    -Spare (set to zero) 54
    +

    +

    +
    diff --git a/doxygen/gribex/localDefinition8.html b/doxygen/gribex/localDefinition8.html new file mode 100644 index 000000000..d412bf81d --- /dev/null +++ b/doxygen/gribex/localDefinition8.html @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    8 = ECMWF re-analysis data
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42class
    +
    marsClass
    +
    39Type43type
    +
    marsType
    +
    40Stream44-45stream
    +
    marsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expver
    +
    experimentVersionNumber
    +
    42 Interval between reference times (in time units) 50intervalBetweenTimes
    +
    intervalBetweenTimes
    +

    +
    43-54 Unsigned integers in range (0-255) 51-62unsignedIntegers
    +
    unsignedIntegers
    +

    +
    diff --git a/doxygen/gribex/localDefinition9.html b/doxygen/gribex/localDefinition9.html new file mode 100644 index 000000000..381ab7bd7 --- /dev/null +++ b/doxygen/gribex/localDefinition9.html @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KSEC1 element Contents GRIB octetRecommended +GRIB_API keysCoded +GRIB_API keysComments
    37 +
    ECMWF local GRIB use definition identifier.
    9 = Singular vectors and ensemble perturbations.
    +
    41localDefinitionNumberlocalDefinitionNumber
    +
    38Class42classmarsClass
    +
    39Type43typemarsType
    +
    40Stream44-45streammarsStream
    +
    41 +
    Version number or experiment identifier.
    (4 ASCII characters, right justified)
    +
    46-49expverexperimentVersionNumber
    +
    42 +
    If type 60, the perturbed forecast number.
    If type 62 or 63, the singular vector number.
    +
    50-51forecastOrSingularVectorNumber
    +
    forecastOrSingularVectorNumber
    +

    +
    43-55 These elements are set to zero for type = 60. +Otherwise: 52-92
    +

    +

    +
    43 Number of iterations. 52-53numberOfIterations
    +
    numberOfIterations
    +

    +
    44 Number of singular vectors computed. 54-55numberOfSingularVectorsComputed
    +
    numberOfSingularVectorsComputed
    +

    +
    45 Norm used at initial time. 56normAtInitialTime
    +
    normAtInitialTime
    +

    +
    46 Norm used at final time. 57normAtFinalTime
    +
    normAtFinalTime
    +

    +
    47 Multiplication factor to convert latitude/longitude +and accuracy from real to integer. 58-61multiplicationFactorForLatLong
    +
    multiplicationFactorForLatLong
    +

    +
    48 Latitude in degrees of north-west corner of LPO area +multiplied by KSEC1(47). 62-65northWestLatitudeOfLPOArea
    +
    northWestLatitudeOfLPOArea
    +

    +
    49 Longitude in degrees of north-west corner of LPO* area +multiplied by KSEC1(47). 66-69northWestLongitudeOfLPOArea
    +
    northWestLongitudeOfLPOArea
    +

    +
    50 Latitude in degrees of south-east corner of LPO* area +multiplied by KSEC1(47). 70-73southEastLatitudeOfLPOArea
    +
    southEastLatitudeOfLPOArea
    +

    +
    51 Longitude in degrees of south-east corner of LPO* area +multiplied by KSEC1(47). 74-77southEastLongitudeOfLPOArea
    +
    southEastLongitudeOfLPOArea
    +

    +
    52 Accuracy multiplied by KSEC1(47). 78-81accuracyMultipliedByFactor
    +
    accuracyMultipliedByFactor
    +

    +
    53 Number of singular vectors evolved. 82-83numberOfSingularVectorsEvolved
    +
    numberOfSingularVectorsEvolved
    +

    +
    54-55 +
    Ritz numbers.
    RITZ = KSEC1(55)*EXP( LOG(10.0*KSEC1(54) )
    Thus:
    +
    -
    +

    +

    +
    54 NINT( LOG10(RITZ)-5 ) 84-87NINT_LOG10_RITZ + NINT_LOG10_RITZ
    +
    55 NINT( RITZ/( EXP(LOG(10.0*KSEC1(54) ) 88-91NINT_RITZ_EXP + NINT_RITZ_EXP
    +
    -Spare (set to zero)92
    +

    +

    +
    +

    *LPO = Local Projection Operator, an operator applied during +the +singular vector computation to confine the area where the final time +norm is computed (eg Northern Hemisphere extra-tropics).

    +

    A negative Ritz number or a negative latitude/longitudes +value is stored as positive number and its the most significant bit is +set to 1. diff --git a/doxygen/gribex/localGRIBUsage.html b/doxygen/gribex/localGRIBUsage.html new file mode 100644 index 000000000..38dd803ce --- /dev/null +++ b/doxygen/gribex/localGRIBUsage.html @@ -0,0 +1,266 @@ +

    Overview.

    +The definitions described in this section are used at ECMWF for special +purposes. +

    Element KSEC1(24) is set to 1 if an ECMWF local use +definition is required or has been found in a GRIB message; element +KSEC1(37) indicates which definition it is.

    +

    If KSEC1(24) is set to 0, no local use definition is present +in the message.

    +

    Currently, the following definitions exist:

    + +

    Octets in section 1

    +The relation between the octets (bytes) in section 1 of a GRIB product +and the elements in the array KSEC1 is illustrated below. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Octets in section 1

    +
    +
    Octet KSEC1 element Comments
    1-3 - Length of section 1
    4 1 +Version +number of code table 2
    5 2 Identification +of centre (ECMWF = 98)
    6 3 Generating process identification number
    7 4 Grid definition
    8 5 Section 2/3 +indication flag
    9 6 Parameter +indicator
    10 7 Level +indicator/satellite identifier
    11 8 Height/pressure of level
    12 9 Height/pressure of level
    13 10 Year
    14 11 Month
    15 12 Day
    16 13 Hour
    17 14 Minute
    18 15 Time unit +indicator
    19 16 Time period
    20 17 Time period
    21 18 Time range +indicator
    22-23 19 Number of products in an average
    24 20 Number of products missing from an average
    25 21 Century
    26 22 Sub-centre +identifier
    27-28 23 Decimal scale factor
    - 24 Flag to indicate local usage in section 1
    29-40 25-36 Zero
    41 37 ECMWF local +GRIB usage definition identifier*
    42 38 Class
    43 39 Type
    44-45 40 +Stream
    46-49 41 Version number or experiment identifier
    +

    +

    * Local definition numbers 192 to 255 inclusive will never be +used to define ECMWF local extensions to section 1, GRIB code. They are +free to be defined and used by Member States. diff --git a/doxygen/gribex/mercatorGrid.html b/doxygen/gribex/mercatorGrid.html new file mode 100644 index 000000000..960e32f46 --- /dev/null +++ b/doxygen/gribex/mercatorGrid.html @@ -0,0 +1,574 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Mercator
    Element Contents + GRIB API keys
    +
    1 Data representation type (see WMO +code table 6); 1 for Mercator gridType +
    2 Number of points along a parallel. Ni
    Nx +
    3 Number of points along a meridian. Nj
    Ny +
    4 Latitude of the first grid point. latitudeOfFirstGridPointInDegrees*1000 +
    5 Longitude of the first grid point. longitudeOfFirstGridPointInDegrees*1000 +
    6 +
    Resolution flag:
    0 Direction increments are not given.
    128 Direction increments are given.
    +
    ijDirectionIncrementGiven*128 +
    7 Latitude of the last grid point. latitudeOfLastGridPointInDegrees*1000 +
    8 Longitude of the last grid point. longitudeOfLastGridPointInDegrees*1000 +
    9 Latitude at which the Mercator projection cylinder +intersects the Earth(Latin). latitudeAtWhichTheMercatorProjectionCylinderIntersectsTheEarthInDegrees*1000 +
    10 Reserved. Set to 0.
    +
    11 Scanning mode flags (see WMO +code table 8) +

    iScansNegatively

    +

    jScansNegatively

    +

    jPointsAreConsecutive

    +
    12 Number of vertical coordinate parameters. NV
    +
    13 i direction grid length. longitudinalDirectionGridLength
    +
    14 j direction grid length. latitudinalDirectionGridLength
    +
    15-16 Reserved. Set to 0.
    +
    17 0 Regular grid. gridType +
    18 +
    Earth flag:
    0 Earth assumed spherical with radius 6367.47 km.
    64 Earth assumed oblate spheroidal with size as determined by IAU in 1965:
    6378.160km, 6356.775km, f=1/297.0
    +
    earthIsOblate +
    19 +
    Components flag:
    0 Resolved u and v components of vector quantities relative to easterly
    and northerly directions.
    8 Resolved u and v components of vector quantities relative to the defined
    grid in the direction of increasing x and y (or i and j) coordinates
    respectively.
    +
    uvRelativeToGrid +
    20-22 Reserved. Set to 0.
    +
    +

    Grid lengths are in units of metres, at the parallel +specified by Latin. + + + +
    +   +
    +
    +

    + + + + + +
    +"Top22.10.2010-->--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/oceanData.html b/doxygen/gribex/oceanData.html new file mode 100644 index 000000000..b1e39b773 --- /dev/null +++ b/doxygen/gribex/oceanData.html @@ -0,0 +1,488 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ECMWF ocean data
    Element Contents + GRIB API keys
    1 Data representation type = 192. gridType +
    2 Number of points along first axis (32767 = not used). Nx
    Ni +
    3 Number of points along second axis (32767 = not used). Ny
    Nj +
    4-10 Reserved. Set to 0.
    +
    11 Scanning mode flags (see WMO +code table 8). +

    iScansNegatively

    +

    jScansNegatively

    +

    jPointsAreConsecutive

    +
    12-22 Reserved. Set to 0.
    +
    +

    This data representation type should always be used in +conjunction +with the ECMWF local definition 4 extension to GRIB section 1: ocean +model data. + + + +
    +   +
    +
    +

    + + + + + +
    +"Top22.10.2010-->--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/polarStereoGrid.html b/doxygen/gribex/polarStereoGrid.html new file mode 100644 index 000000000..553e8951d --- /dev/null +++ b/doxygen/gribex/polarStereoGrid.html @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Polar stereographic
    Element Contents + GRIB API keys
    1 Data representation type (see WMO +code table 6). 5 for polar stereographic gridType +
    2 Number of points along X-axis. Nx
    Ni +
    3 Number of points along Y-axis. Ny
    Nj +
    4 Latitude of the first grid point. latitudeOfFirstGridPointInDegrees*1000
    +
    5 Longitude of the first grid point. longitudeOfFirstGridPointInDegrees*1000
    +
    6 Reserved. Set to 0. (Resolution flag is not applicable +to polar stereographic.)
    +
    7 Orientation of the grid, ie the longitude of the +meridian which is parallel to the Y-axis along which latitude increases +as the Y-coordinate increases. orientationOfTheGrid
    +
    8 Reserved. Set to 0.
    +
    9 X-direction grid length. xDirectionGridLengthInMetres
    +
    10 Y-direction grid length. yDirectionGridLengthInMetres
    +
    11 Scanning mode flag (see WMO +code table 8)
    +
    12 Zero
    +
    13 +
    Projection centre flag:
    0 North pole is on projection plane.
    128 South pole is on projection plane.
    +
    projectionCenterFlag
    +
    14-16 Reserved. Set to 0.
    +
    17 0 Regular grid. gridType +
    18 +
    Earth flag:
    0 Earth assumed spherical with radius 6367.47 km.
    64 Earth assumed oblate spheroidal with size as determined by IAU in 1965:
    6378.160km, 6356.775km, f=1/297.0
    +
    earthIsOblate +
    19 +
    Components flag. Valid values are:
    0 Resolved u and v components of vector quantities relative to easterly
    and northerly directions.
    8 Resolved u and v components of vector quantities relative to the
    defined grid in the direction of increasing x and y (or i and j)
    coordinates respectively.
    +
    uvRelativeToGrid +
    20-22 Reserved. Set to 0.
    +
    +

    Grid lengths are in metres, at the 60-degree parallel nearest +to the pole on the projection plane. + + + +
    +   +
    +
    +

    + + + + + +
    +"Top22.10.2010-->--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/psec2.html b/doxygen/gribex/psec2.html new file mode 100644 index 000000000..96b8deb65 --- /dev/null +++ b/doxygen/gribex/psec2.html @@ -0,0 +1,474 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + +

    REAL values for GRIB section 2, the grid description section.

    +

    A REAL array of at least (10 + nn) elements, where nn is the +number of +vertical +coordinate parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Contents of PSEC2
    Element Contents GRIBAPI + keys
    +
    1 Angle of rotation. angleOfRotationInDegrees
    +
    2 Stretching factor.
    +
    3-10 Reserved. Set to 0.
    +
    11-(10+nn) Vertical coordinate parameters. nn is given in +KSEC2(12).
    +
    + + + +
    +   +
    +
    +
    + + + + + +
    +"Top22.10.2010--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/psec3.html b/doxygen/gribex/psec3.html new file mode 100644 index 000000000..3672f90c6 --- /dev/null +++ b/doxygen/gribex/psec3.html @@ -0,0 +1,458 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + +

    REAL parameters for GRIB code section 3, the +bitmap section.

    +A REAL array of at least 2 elements. + + + + + + + + + + + + + + + + + + +
    Contents of PSEC3
    Element Contents GRIB API keys
    +
    1 Ignored.
    +
    2 The value used at missing data points in a REAL data +field. This value must be supplied for both coding and decoding. missingValue
    + + + +
    +   +
    +
    +
    + + + + + +
    +"Top22.10.2010--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/psec4.html b/doxygen/gribex/psec4.html new file mode 100644 index 000000000..368fc6166 --- /dev/null +++ b/doxygen/gribex/psec4.html @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + +

    Field data values.

    +An array of field values to be encoded in GRIB code or which have been +decoded. If there is a bitmap in the GRIB message, this array contains +missing data indicators at appropriate places. This array is accessible +through the GRIB_API Key "values".
    +

    The value used to indicate a missing value must be supplied +as a REAL value in PSEC3(2) (GRIB API key missingValue) or as an +INTEGER +value in KSEC3(2) (GRIB API Key missingValue).

    +

    Although declared as REAL in GRIBEX, PSEC4 can contain +INTEGER data. KSEC4(5) indicates whether +values are integer or real. + + + +
    +   +
    +
    +

    + + + + + +
    +"Top22.10.2010--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/reducedGaussianGridSubArea.html b/doxygen/gribex/reducedGaussianGridSubArea.html new file mode 100644 index 000000000..9fbee3c17 --- /dev/null +++ b/doxygen/gribex/reducedGaussianGridSubArea.html @@ -0,0 +1,594 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Sub-area of a quasi-regular +gaussian grid (ECMWF convention)
    Element Contents + GRIB API keys
    1 Data representation type, = 4gridType +
    2 Not specified for quasi-regular +(reduced) grids.
    +
    3 Number of points along a meridian (Nj). + Nj
    Ny +
    4 Latitude of the first grid point, La1. latitudeOfFirstGridPointInDegrees*1000 +
    5 Longitude of the first grid point, Lo1. + longitudeOfFirstGridPointInDegrees*1000 +
    6 Resolution flag, = 0 (direction +increments not given) ijDirectionIncrementGiven*128 +
    7 Latitude of the last grid point, La2. latitudeOfLastGridPointInDegrees*1000 +
    8 Longitude of the last grid point, Lo2. longitudeOfLastGridPointInDegrees*1000 +
    9 i direction increment. Cannot be used +for quasi-regular (reduced) grids. iDirectionIncrementInDegrees*1000 +
    10 Number of parallels between a pole and +the Equator,ie the gaussian grid number. numberOfParallelsBetweenAPoleAndTheEquator +
    11 Scanning mode flags (see WMO +code table 8) +

    iScansNegatively

    +

    jScansNegatively

    +

    jPointsAreConsecutive

    +
    12 Number of vertical coordinate +parameters. NV
    13 Latitude of the southern pole of +rotation. latitudeOfSouthernPoleInDegrees*1000 +
    14 Longitude of the southern pole of +rotation. longitudeOfSouthernPoleInDegrees*1000 +
    15 Latitude of the pole of stretching. latitudeOfPoleOfStretchingInDegrees + *1000
    16 Longitude of the pole of stretching. longitudeOfPoleOfStretchingInDegrees + *1000
    17 1 = quasi-regular (reduced) grid. gridType +
    18 +
    Earth flag:
    0 Earth assumed spherical with radius 6367.47 km.
    64 Earth assumed oblate spheroidal with size as determined by IAU in 1965:
    6378.160km, 6356.775km, f=1/297.0
    +
    earthIsOblate +
    19 +
    Components flag.
    0 Resolved u and v components of vector quantities relative to easterly
    and northerly directions; or not used.
    8 Resolved u and v components of vector quantities relative to the
    defined grid in the direction of increasing x and y (or i and j)
    coordinates respectively.
    +
    uvRelativeToGrid +
    20-22 Reserved. Set to 0.
    +
    23-nn NN, the number of points along a full +parallel (360 degrees) is defined for each latitude row in the +sub-area. The number of parallels is given by Nj above. See the +algorithm below for calculating the actual number of points along each +sub-area latitude row (ECMWF convention).pl
    +

    The number of points Np within a subarea along a parallel of +a reduced grid can be obtained as:

    +
       Np = [(Loe-Low)/Res] + 1

    where:

    Loe = Lo2
    Res = 360000/NN
    If Mod(Lo1/Res,1.0) = 0,
    Incr = 0
    otherwise
    Incr = 1
    Ninter = [Lo1/Res] + Incr
    Low = Ninter*Res ; Low -> (Low - 360000) if Lo2 is less then Lo1.

    + + + +
    +   +
    +
    +
    + + + + + +
    +"Top22.10.2010-->--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/spaceView.html b/doxygen/gribex/spaceView.html new file mode 100644 index 000000000..e6cf28409 --- /dev/null +++ b/doxygen/gribex/spaceView.html @@ -0,0 +1,583 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Space view perspective or orthographic
    Element Contents + GRIB API keys
    +
    1 Data representation type (see WMO +code table 6); = 90. gridType +
    2 Number of points along the x-axis. Nx
    Ni +
    3 Number of points along the y-axis. Ny
    Nj +
    4 Latitude of the sub-satellite point. latitudeOfSubSatellitePointInDegrees*1000
    +
    5 Longitude of the sub-satellite point. longitudeOfSubSatellitePointInDegrees*1000
    +
    6 +
    Resolution flag:
    0 Direction increments are not given.
    128 Direction increments are given.
    +
    ijDirectionIncrementGiven*128 +
    7 Apparent diameter of the Earth in grid lengths in x +direction. apparentDiameterOfEarthInGridLengthsInXDirection
    +
    8 Apparent diameter of the Earth in grid lengths in y +direction. apparentDiameterOfEarthInGridLengthsInYDirection
    +
    9 X-coordinate of the sub-satellite point. xCoordinateOfSubSatellitePoint
    +
    10 Y-coordinate of the sub-satellite point. yCoordinateOfSubSatellitePoint
    +
    11 Scanning mode flag (see WMO +code table 8). +

    iScansNegatively

    +

    jScansNegatively

    +

    jPointsAreConsecutive

    +
    12 Number of vertical coordinate parameters. NV
    +
    13 The orientation of the grid. orientationOfTheGridInDegrees*1000
    +
    14 Altitude of the camera from the Earth's centre divided +by the Earth's radius and scaled by 10**6 to give an integer value. +Currently = 6610839 for Meteosat. For orthographic view from infinite +distance, the value is 16777215. altitudeOfTheCameraFromTheEarthSCenterMeasuredInUnitsOfTheEarth
    +
    15 X coordinate of the origin of the sector image. xCoordinateOfOriginOfSectorImage
    +
    16 Y coordinate of the origin of the sector image. yCoordinateOfOriginOfSectorImage
    +
    17 0 Regular grid. gridType +
    18 +
    Earth flag:
    0 Earth assumed spherical with radius 6367.47 km.
    64 Earth assumed oblate spheroidal with size as determined by IAU in 1965:
    6378.160km, 6356.775km, f=1/297.0
    +
    earthIsOblate +
    19 +
    Components flag:
    0 Resolved u and v components of vector quantities relative to easterly
    and northerly directions.
    8 Resolved u and v components of vector quantities relative to the
    defined grid in the direction of increasing x and y (or i and j)
    coordinates.
    +
    uvRelativeToGrid +
    20-22 Reserved. Set to 0.
    +
    + + + +
    +   +
    +
    +
    + + + + + +
    +"Top22.10.2010-->--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/sphericalHarmonics.html b/doxygen/gribex/sphericalHarmonics.html new file mode 100644 index 000000000..6dd91b142 --- /dev/null +++ b/doxygen/gribex/sphericalHarmonics.html @@ -0,0 +1,530 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Spherical harmonic coefficients
    Element Contents Recommended  + GRIB_API keys
    +
    1 Data representation type (see WMO +code table 6) gridType +
    2 J pentagonal resolution parameter. pentagonalResolutionParameterJ
    +
    3 K pentagonal resolution parameter. pentagonalResolutionParameterK
    +
    4 M pentagonal resolution parameter. pentagonalResolutionParameterM
    +
    5 Representation type (see WMO +code table 9) representationType
    +
    6 +
    Representation mode (see WMO code table 10):
    1 Real part of (0,0) coefficient stored as a 32-bit floating
    point number; other coefficients are packed.
    2 Complex packing.
    +
    representationMode
    +
    7-11 Reserved. Set to 0.
    +
    12 Number of vertical coordinate parameters. NV
    +
    13 Latitude of the southern pole of rotation. latitudeOfSouthernPoleInDegrees*1000 +
    14 Longitude of the southern pole of rotation. longitudeOfSouthernPoleInDegrees*1000 +
    15 Latitude of the pole of stretching. latitudeOfPoleOfStretchingInDegrees*1000 +
    16 Longitude of the pole of stretching. longitudeOfPoleOfStretchingInDegrees*1000 +
    17-22 Reserved. Set to 0.
    +
    + + + +
    +   +
    +
    +
    + + + + + +
    +"Top22.10.2010-->--> +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/doxygen/gribex/wmoCodeTable6.html b/doxygen/gribex/wmoCodeTable6.html new file mode 100644 index 000000000..3f845424a --- /dev/null +++ b/doxygen/gribex/wmoCodeTable6.html @@ -0,0 +1,294 @@ +

    The following table is based on that given in WMO publication +no. 306 - Manual on Codes. The information is believed to be correct. +However, the definitions in the WMO manual may be liable to change over +time. If there is a difference between the information here and in the +WMO manual, the WMO manual is the definitive source.

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    WMO Code Table 6 - data representation type

    +
    +
    Value MeaninggridType
    +
    Comment
    +
    0 Latitude/longitude grid - equidistant cylindrical or +Plate Carree projection projectionregular_ll
    +reduced_ll
    - regular_gg for +ksec2(17)=0
    +- reduced_gg for ksec2(17)=1
    1 Mercator projectionmercator
    +
    2 Gnomonic projection
    +

    +
    3 Lambert conformal, secant or tangent, conical +orbipolar, projectionlambert
    +
    4 Gaussian latitude/longitude gridregular_gg
    +reduced_gg
    +
    - regular_gg for +ksec2(17)=0
    +- reduced_gg for ksec2(17)=1
    +
    5 Polar stereographic projectionpolar_stereographic
    +
    6 Universal Transverse Mercator (UTM) projectionUTM
    +
    7 Simple polyconic projectionsimple_polyconic
    +
    8 Albers equal-area, secant or tangent, conic or +bi-polar, projection
    +

    +
    9 Miller's cylindrical projection
    +

    +
    10 Rotated latitude/longitude gridrotated_ll
    +
    11- 12 Reserved
    +

    +
    13 Oblique Lambert conformal, secant or tangent, conical +or bipolar, projection
    +

    +
    14 Rotated gaussian latitude/longitude gridrotated_gg
    +
    15 - 19 Reserved
    +

    +
    20 Stretched latitude/longitude gridstretched_ll
    +
    21 - 23 Reserved
    +

    +
    24 Stretched gaussian latitude/longitude gridstretched_gg
    +
    25 - 29 Reserved
    +

    +
    30 Stretched and rotated latitude/longitude gridstretched_rotated_ll
    +
    31 - 33 Reserved
    +

    +
    34 Stretched and rotated gaussian latitude/longitude gridstretched_rotated_gg
    +
    35 - 49 Reserved
    +

    +
    50 Spherical harmonic coefficientssh
    +
    51 - 59 Reserved
    +

    +
    60 Rotated spherical harmonic coefficientsrotated_sh
    +
    61 - 69 Reserved
    +

    +
    70 Stretched spherical harmonic coefficientsstretched_sh
    +
    71 - 79 Reserved
    +

    +
    80 Stretched and rotated spherical harmonic coefficientsstretched_rotated_sh
    +
    81 - 89 Reserved
    +

    +
    90 Space view, perspective or orthographicspace_view
    +
    91 - 191 Reserved
    +

    +
    192 ECMWF ocean data
    +

    +
    193 - 254 Reserved for local use
    +

    +
    diff --git a/doxygen/head.html b/doxygen/head.html new file mode 100644 index 000000000..6c3b5b6ce --- /dev/null +++ b/doxygen/head.html @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + +GRIB API Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Home page  +
    + + + + + + + + + + + + + + + + + + + +
    Home Your Room Login Contact Feedback Site Map Search: +  
    +
    +
    Discover this product  + + + + + + + + + +
    About Us
    + Overview
    + Getting here
    + Committees
    Products
    + Forecasts
    + Order Data
    + Order +Software
    +
    Services
    + Computing
    + Archive
    + PrepIFS
    +
    Research
    + Modelling
    + Reanalysis
    + Seasonal
    +
    Publications
    + Newsletters
    + Manuals
    + Libraries
    +
    News&Events
    + Calendar
    + Employment
    + Open Tenders
    +
    +
    +   + + + + + +
    + +Home >  +Publications >  +Manuals > +Grib API>  +  +
    +
      +   +

    +

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + +  
    +
      + + + diff --git a/doxygen/installation.dox b/doxygen/installation.dox new file mode 100644 index 000000000..a00b3a019 --- /dev/null +++ b/doxygen/installation.dox @@ -0,0 +1,80 @@ +/*! \page installation GRIB API installation +GRIB API installation is based on the standard configure utility. It is tested on several platforms +and with several compilers. However for some platforms modifications to the installation +engine may be required. If you encounter any problem during the installation procedure please +send an e-mail with your problem to Software.Support@ecmwf.int. + +The only required package for a standard installation is +jasper which enables the jpeg2000 +packing/unpacking algorithm. It is possible to build GRIB API without jasper, by using the +--disable-jpeg configure option, but to install a fully functional library, its download is recommended. + + +\section standard_installation Standard installation +-# Download GRIB API from ECMWF web site. +-# Unpack distribution: + \code + > gunzip grib_api-X.X.X.tar.gz + > tar xf grib_api-X.X.X.tar + \endcode +-# Create the directory where to install GRIB API say \e grib_api_dir + \code + > mkdir grib_api_dir + \endcode +-# Run the configure in the grib_api-X.X.X + \code + > cd grib_api-X.X.X + > ./configure --prefix=grib_api_dir + \endcode + Please give the full path of grib_api_dir to the prefix option. +-# make, check and install + \code + > make + ... + > make check + ... + > make install + ... + \endcode + +\section parameters_installation Parameter files installation +The following instructions are valid only if you have already +installed GRIB API and you need to update the current parameter files. +The parameter files should work with any version of GRIB API. + +To install the parameter files, then please unpack the downloaded archive +in the definition files folder of your GRIB API installation, i.e.: + + \code + > cd definitions + > gunzip grib_api_parameters-vX.tar.gz + > tar xf grib_api_parameters-vX.tar + \endcode + +This process will overwrite any changes you might have done to the parameter files, +so please do make a backup of the definition files folder before installing the +downloaded GRIB API parameter files. + +\section definitions_installation Definition files installation +The following instructions are valid only if you have already +installed GRIB API and you need to update the definition files compatible +with the same library version you have already installed. +Please note that using the definition files with a version +of the library different from the one indicated as compatible +will cause some problems in decoding/encoding. + +-# Download GRIB API definition files from ECMWF web site. +-# Unpack distribution: + \code + > gunzip grib_def-X.X.X.X.tar.gz + > tar xf grib_def-X.X.X.X.tar + \endcode +-# Run the installation script from the grib_def-X.X.X.X directory: + \code + ./installDefinitions.sh grib_api_dir def_files_dir + \endcode + where grib_api_dir is the path to a working installation of + GRIB API and def_files_dir is the directory where you + want to install the new version of the defintion files. + +*/ diff --git a/doxygen/keys.dox b/doxygen/keys.dox new file mode 100644 index 000000000..19d337fb8 --- /dev/null +++ b/doxygen/keys.dox @@ -0,0 +1,145 @@ +/*! \page keys Grib API keys +The GRIBEX routine used at ECMWF to encode and decode GRIB messages works +on a number based table to retrive all the information from the message. +This approach forces the user either to learn a code table +or to use the documentation intensively. +With grib_api a key name based access is provided so that +all the information contained in the GRIB message is retrieved through +alphanumeric names. \n +All the key names are built from the official WMO documentation on +the GRIB edition 1 and 2 coding standard removing the spaces in the key +description and capitalizing the initials so that the caption:\n +\verbatim +identification of originating generating centre +\endverbatim +is transformed into the key name\n +\verbatim +identificationOfOriginatingGeneratingCentre +\endverbatim\n +Some short names (aliases) are also provided, e.g. "centre" is an alias +for identificationOfOriginatingGeneratingCentre. +The names are always easily releated to the meaning of their value.\n +A different set of keys is available for each message because the content +is different. It is easy to find the keys available in a message by using +the GRIB tools (\ref grib_dump "grib_dump) +or the library (\ref keys_iterator.c "keys_iterator.c").\n + +\section coded_computed Coded and Computed keys + +There are two different types of keys: coded and computed. \n +The coded keys are directly linked to octets of the GRIB message and +their value is obtained by only decoding the octets. +A list of all the coded keys in a message can be obtained +using \ref grib_dump "grib_dump" without any option (use the -a option to obtain also their aliases).\n +The computed keys are obtained by combining other keys (coded or computed) and +when their value is set all the related keys are set in a cascade process.\n +These keys provide a synthesis of the information contained in the GRIB message +and are a safe way to set complex attributes such as the type of grid or the type of +packing. They are also helpful in the interpretation of some octets such as +the scanning mode whose bits are related to the way of scanning the grid. +In this case the computed keys:\n +\verbatim +iScansNegatively +jScansPositively +jPointsAreConsecutive +alternativeRowScanning (available only for edition 2) +\endverbatim\n +will provide access to single bits of the scanning mode octect hiding +its structure from the user.\n +The keys can also have some attributes as \e read \e only, which means that +the key cannot be set (e.g. 7777 at the end of the message), or \e edition \e specific +that is the attribute of all the keys having different values in the +two editions (e.g. longitudeOfFirstGridPoint) or being present in one edition +only (e.g. alternativeRowScanning).\n +Moreover there are some computed keys that cannot be "get" +and can be considered as functions acting on the grib in some way. These keys +are always characterised by a predicate in their name (e.g. setDecimalPrecision).\n +For the computed keys we provide the following preliminary documentation that will be extended soon. +- MARS keywords.\n +All MARS keywords are available. Some examples are: + - date + - param + - levtype + - levelist + - step + - stream +- angles in degrees. \n +All the angle variables are provided in two versions, a native one with the units +coded into the GRIB file and an edition independent one in degrees. It is always better +to work with the "in degrees" version that is always provided through the key which has the +same name of the native version with the suffix InDegrees +\verbatim +longitudeOfFirstGridPoint -> longitudeOfFirstGridPointInDegrees +latitudeOfFirstGridPoint -> latitudeOfFirstGridPointInDegrees +longitudeOfLastGridPoint -> longitudeOfLastGridPointInDegrees +latitudeOfFirstGridPoint -> latitudeOfLastGridPointInDegrees +latitudeOfFirstGridPoint -> latitudeOfFirstGridPointInDegrees +iDirectionIncrement -> iDirectionIncrementInDegrees +jDirectionIncrement -> jDirectionIncrementInDegrees +\endverbatim +- gridType\n + The type of grid computed from the grid description section. + - For both editions: + - regular_ll + - reduced_ll + - mercator + - lambert + - polar_stereographic + - UTM + - simple_polyconic + - albers + - miller + - rotated_ll + - stretched_ll + - stretched_rotated_ll + - regular_gg + - rotated_gg + - stretched_gg + - stretched_rotated_gg + - reduced_gg + - sh + - rotated_sh + - stretched_sh + - stretched_rotated_sh + - space_view\n + - For edition 2 only: + - triangular_grid + - equatorial_azimuthal_equidistant + - azimuth_range + - cross_section + - Hovmoller + - time_section + +- packingType\n + The alghorithm used to pack data into the GRIB message.\n + - For GRIB edition 1: + - grid_simple + - grid_simple_matrix + - grid_simple_matrix_bitmap + - grid_second_order + - spectral_complex + - spectral_simple + - grid_unknown + - spectral_unknown\n + - For GRIB edition 2: + - grid_simple + - grid_simple_matrix + - grid_simple_matrix_bitmap + - grid_complex + - grid_complex_spatial_differencing + - grid_jpeg + - grid_second_order + - grid_png + - grid_ieee + - spectral_simple + - spectral_complex + - spectral_complex + - grid_simple_log_preprocessing + +- setDecimalPrecision\n +is a function key used to set the decimal precision see the \ref grib_set "grib_set" page for usage. + +- getNumberOfValues\n +The number of values coded into the data section of the GRIB message + +*/ diff --git a/doxygen/latex/grib_api.tex b/doxygen/latex/grib_api.tex new file mode 100644 index 000000000..7d6d582ba --- /dev/null +++ b/doxygen/latex/grib_api.tex @@ -0,0 +1,88 @@ +\documentclass[a4paper]{book} +\usepackage{a4wide} +\usepackage{makeidx} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{multicol} +\usepackage{float} +\usepackage{textcomp} +\usepackage{alltt} +\usepackage{times} +\ifx\pdfoutput\undefined +\usepackage[ps2pdf, + pagebackref=true, + colorlinks=true, + linkcolor=blue + ]{hyperref} +\usepackage{pspicture} +\else +\usepackage[pdftex, + pagebackref=true, + colorlinks=true, + linkcolor=blue + ]{hyperref} +\fi +\usepackage{doxygen} +\makeindex +\setcounter{tocdepth}{1} +\renewcommand{\footrulewidth}{0.4pt} +\begin{document} +\begin{titlepage} +\vspace*{7cm} +\begin{center} +{\Large grib\_\-api Reference Manual}\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.5.1}\\ +\vspace*{0.5cm} +{\small Wed Apr 18 14:09:16 2007}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\chapter{GRIB API} +\label{index}\hypertarget{index}{}\input{index} +\input{keys} +\include{fortran} +\include{grib_examples} +\input{group__grib__handle} +\include{group__handling__coded__messages} +\include{group__iterators} +\include{group__get__set} +\include{group__context} +\include{group__keys__iterator} +\chapter{Examples} +\include{get_8c-example} +\include{get__fortran_8_f-example} +\include{iterator_8c-example} +\include{iterator__fortran_8_f-example} +\include{keys__iterator_8c-example} +\include{keys__iterator__fortran_8_f-example} +\include{multi_8c-example} +\include{multi__fortran_8_f-example} +\include{precision_8c-example} +\include{precision__fortran_8_f-example} +\include{set_8c-example} +\include{set__fortran_8_f-example} +\chapter{GRIB Tools} +\input{tools} +\include{grib_ls} +\include{grib_get} +\include{grib_get_data} +\include{grib_set} +\include{grib_dump} +\include{grib_dump_examples} +\include{grib_debug} +\include{grib_convert} +\include{grib_filter} +\include{grib_compare} +\include{grib_copy} +\chapter{Installation} +\input{installation} +\include{ecmwf_installation} +\chapter{grib\_\-api.h} +\input{grib__api_8h} +\printindex +\end{document} diff --git a/doxygen/make_dox.sh b/doxygen/make_dox.sh new file mode 100755 index 000000000..afeb38be2 --- /dev/null +++ b/doxygen/make_dox.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +cd ../tools +./make_dox.ksh +cd ../doxygen +p4 edit ../html/* +rm -f ../html/* +touch ../html/Makefile.am +doxygen grib_api_wiz.cfg +cp doxygen.css ../html/ diff --git a/doxygen/make_dox_web.sh b/doxygen/make_dox_web.sh new file mode 100755 index 000000000..dd7504b3b --- /dev/null +++ b/doxygen/make_dox_web.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +./prepare_pydocs.pl < ../python/gribapi.py > gribapi.py + +cd ../tools +./make_dox.ksh +cd ../doxygen +p4 edit ../html_web/* +rm -f ../html_web/* +doxygen grib_api_site.cfg +cp doxygen.css ../html_web/ +./build_gribex.ksh gribex ../html_web/gribexkeys +./make_site.ksh diff --git a/doxygen/make_site.ksh b/doxygen/make_site.ksh new file mode 100755 index 000000000..9d9f492bf --- /dev/null +++ b/doxygen/make_site.ksh @@ -0,0 +1,20 @@ +#!/bin/ksh + +cd ../html_web + +for i in *.html +do + +#p4 edit $i +#sed 's/index.html/grib_api.html/g' $i > $i.tmp +#mv $i.tmp $i + +sed 's/href=\"grib\_/href=\"\/publications\/manuals\/grib\_api\/grib\_/g' $i > $i.tmp +mv $i.tmp $i +sed 's///g' $i > $i.tmp +mv $i.tmp $i + + +done + +#mv index.html grib_api.html diff --git a/doxygen/modules.dox b/doxygen/modules.dox new file mode 100644 index 000000000..af6be68da --- /dev/null +++ b/doxygen/modules.dox @@ -0,0 +1,3 @@ +/*! \page modules C interface + +*/ diff --git a/doxygen/prepare_pydocs.pl b/doxygen/prepare_pydocs.pl new file mode 100755 index 000000000..e55ae8ceb --- /dev/null +++ b/doxygen/prepare_pydocs.pl @@ -0,0 +1,56 @@ +#!/usr/bin/env perl + +# Author: mow +# Date: 06/07/2010 +# Updated: 08/07/2010 +# +# Description: +# Since I could not find a way to tell doxygen not to include +# some functions into the documentation, I have written this script +# to remove all the function I do not want documented from the source file +# before feeding it as input to doxygen. Such a pain. +# +# Update: Doxygen can be told to ignore some sections in the documentation +# by using the @cond,@endcond block, however that does not work with the +# current version of doxygen used at the moment to create the documentation. + +use strict; use warnings; + +my @exclude = qw( + with_numpy + require + grib_get_string + grib_set_string + grib_get_long + grib_get_double + grib_set_long + grib_set_double + grib_set_double_array + grib_get_double_array + grib_set_long_array + grib_get_long_array + grib_index_get_long + grib_index_get_string + grib_index_get_double + grib_index_select_long + grib_index_select_double + grib_index_select_string + GRIB_CHECK + grib_get_double_element + grib_get_double_elements + Bunch + ); + +my %ignore = (); +for (@exclude) { $ignore{$_} = 1; } + +my @lines = <>; + +my $dirty = 0; +foreach (@lines) { + if ( /^(?:def|class) +(.*)\(/) { + $dirty = exists $ignore{$1} ? 1 : 0; + } + + print if !$dirty; +} diff --git a/doxygen/tail.html b/doxygen/tail.html new file mode 100644 index 000000000..8ec52f90b --- /dev/null +++ b/doxygen/tail.html @@ -0,0 +1,57 @@ + + + +
    +   +
    +
    +
    + + + + + +
    +"Top +25.02.2011 +
    +
      + + + + + + + +
    +   +Page Details +        © ECMWF
    +
    shimshimshim
    + + + + + diff --git a/examples.dev/create_grib.c b/examples.dev/create_grib.c new file mode 100644 index 000000000..224e1c7d4 --- /dev/null +++ b/examples.dev/create_grib.c @@ -0,0 +1,122 @@ +/* + * C Implementation: create_grib + * + * Description: + * + * + * Author: Enrico Fucile , (C) 2006 + * + * Copyright: See COPYING file that comes with this distribution + * + */ +#include + +#include "grib_api_internal.h" + +int main(int argc, char *argv[]) +{ + + FILE* of=NULL; + const void* buffer=NULL; + int ret=0; + size_t size; + double* values=NULL; + long numberOfPointsAlongAParallel=0; + long numberOfPointsAlongAMeridian=0; + long numberOfPoints = 0,i = 0,j = 0,k = 0; + grib_context* c=NULL; + grib_handle* h=NULL; + + char* outfilename="out.grib"; + long missing=9999; +#if 0 + FILE *f=NULL; + char* infilename="../data/sample_grib.txt"; + f = fopen(infilename,"r"); + if(!f) { + perror(argv[i]); + exit(1); + } + + h=grib_handle_new_from_text_file(c,f); + + fclose(f); +#endif + +#if 0 + FILE *f=NULL; + char* infilename="../data/sample_grib.txt"; + f = fopen(infilename,"r"); + if(!f) { + perror(argv[i]); + exit(1); + } + + h=grib_handle_new(c); + GRIB_CHECK(grib_load_from_text_file(h,f),0); + + fclose(f); +#endif + +#if 1 + h=grib_handle_new(c); + GRIB_CHECK(grib_set_type(h,"grib1"),0); + GRIB_CHECK(grib_set_type(h,"ecmwf"),0); + GRIB_CHECK(grib_set_type(h,"geopotential"),0); +#endif + + GRIB_CHECK(grib_set_long(h,"generatingProcessIdentifier",127),0); + + GRIB_CHECK(grib_set_double(h,"latitudeOfFirstGridPointInDegrees",10),0); + GRIB_CHECK(grib_set_double(h,"longitudeOfFirstGridPointInDegrees",-10),0); + + GRIB_CHECK(grib_set_double(h,"latitudeOfLastGridPointInDegrees",-10),0); + GRIB_CHECK(grib_set_double(h,"longitudeOfLastGridPointInDegrees",10),0); + + GRIB_CHECK(grib_set_double(h,"jDirectionIncrementInDegrees",0.5),0); + GRIB_CHECK(grib_set_double(h,"iDirectionIncrementInDegrees",0.5),0); + + GRIB_CHECK(grib_set_long(h,"section3Present",1),0); + GRIB_CHECK(grib_set_long(h,"missingValue",missing),0); + + GRIB_CHECK(grib_get_long( h,"numberOfPointsAlongAParallel",&numberOfPointsAlongAParallel),0); + GRIB_CHECK(grib_get_long( h,"numberOfPointsAlongAMeridian",&numberOfPointsAlongAMeridian),0); + + numberOfPoints=numberOfPointsAlongAMeridian*numberOfPointsAlongAParallel; + values=(double*)malloc(numberOfPoints*sizeof(double)); + + + for (j=0;j, (C) 2006 + * + * Copyright: See COPYING file that comes with this distribution + * + */ +#include +#include +#include +#include +#include "grib_api.h" + +void usage(char* prog) { + printf("\nUsage: %s direction_grib_file intensity_grib_file",prog); + exit(1); +} + +int get_wind_rose_index(double v); +int get_sea_state_index(double v); + +int main(int argc, char** argv) { + FILE* fdir = NULL; + FILE* fint = NULL; + int i,j,k; + grib_context* c=NULL; + char* fintname = NULL; + char* fdirname = NULL; + grib_handle *hdir = NULL; + grib_handle *hint = NULL; + grib_handle *hold = NULL; + const void *buffer=0; size_t size=0; + double* values_dir=0; + double* values_int=0; + size_t size=0; + char* ofile[100]={0,}; + size_t values_count=0; + char* wind_rose[8]={"nord","nord_east", + "east","south_east", + "south","south_west", + "west","nord_west"}; + size_t wind_rose_count=sizeof(wind_rose); + char* sea_state[9]={"calm","smooth","slight", + "moderate","rough","very_rough", + "high","very_high","phenomenal"}; + double* values[72]={0,}; + size_t sea_state_count=sizeof(sea_state); + int eps_members=0,steps=0; + long member=0,step=0,ltmp=0; + int new_step=0; + int handle_count=0; + char short_name_dir[10]={0,}; + char short_name_int[10]={0,}; + char tmp[10]={0,}; + size_t len=0; + int err1=0,err2=0; + + if (argc != 3) usage(argv[0]); + + /* direction file */ + fdirname=argv[1]; + fdir = fopen(fdirname,"r"); + if (!fdir) { + printf("ERROR: unable to open file %s\n",fdirname); + return 1; + } + + /* intensity file */ + fintname=argv[2]; + fint = fopen(fintname,"r"); + if(!fint) { + printf("ERROR: unable to open file %s\n",fintname); + return 1; + } + + k=0; + for (i=0;i, (C) 2006 + * + * Copyright: See COPYING file that comes with this distribution + * + */ +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + double *values = NULL; + size_t values_len= 0; + + size_t i = 0; + + double latitudeOfFirstGridPointInDegrees; + double longitudeOfFirstGridPointInDegrees; + double latitudeOfLastGridPointInDegrees; + double longitudeOfLastGridPointInDegrees; + + double jDirectionIncrementInDegrees; + double iDirectionIncrementInDegrees; + + long numberOfPointsAlongAParallel; + long numberOfPointsAlongAMeridian; + + double average = 0; + + FILE* in = NULL; + char* filename = "../data/sample1.grib"; + grib_handle *h = NULL; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",filename); + } + + GRIB_CHECK(grib_get_long(h,"numberOfPointsAlongAParallel",&numberOfPointsAlongAParallel),0); + printf("numberOfPointsAlongAParallel=%ld\n",numberOfPointsAlongAParallel); + + GRIB_CHECK(grib_get_long(h,"numberOfPointsAlongAMeridian",&numberOfPointsAlongAMeridian),0); + printf("numberOfPointsAlongAMeridian=%ld\n",numberOfPointsAlongAMeridian); + + GRIB_CHECK(grib_get_double(h,"latitudeOfFirstGridPointInDegrees",&latitudeOfFirstGridPointInDegrees),0); + printf("latitudeOfFirstGridPointInDegrees=%g\n",latitudeOfFirstGridPointInDegrees); + + GRIB_CHECK(grib_get_double(h,"longitudeOfFirstGridPointInDegrees",&longitudeOfFirstGridPointInDegrees),0); + printf("longitudeOfFirstGridPointInDegrees=%g\n",longitudeOfFirstGridPointInDegrees); + + GRIB_CHECK(grib_get_double(h,"latitudeOfLastGridPointInDegrees",&latitudeOfLastGridPointInDegrees),0); + printf("latitudeOfLastGridPointInDegrees=%g\n",latitudeOfLastGridPointInDegrees); + + GRIB_CHECK(grib_get_double(h,"longitudeOfLastGridPointInDegrees",&longitudeOfLastGridPointInDegrees),0); + printf("longitudeOfLastGridPointInDegrees=%g\n",longitudeOfLastGridPointInDegrees); + + GRIB_CHECK(grib_get_double(h,"jDirectionIncrementInDegrees",&jDirectionIncrementInDegrees),0); + printf("jDirectionIncrementInDegrees=%g\n",jDirectionIncrementInDegrees); + + GRIB_CHECK(grib_get_double(h,"iDirectionIncrementInDegrees",&iDirectionIncrementInDegrees),0); + printf("iDirectionIncrementInDegrees=%g\n",iDirectionIncrementInDegrees); + + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + average = 0; + for(i = 0; i < values_len; i++) + average += values[i]; + + average /=(double)values_len; + + free(values); + + printf("There are %d values, average is %g\n",(int)values_len,average); + + grib_handle_delete(h); + + fclose(in); + return 0; +} diff --git a/examples.dev/get_set.c b/examples.dev/get_set.c new file mode 100644 index 000000000..1223d6442 --- /dev/null +++ b/examples.dev/get_set.c @@ -0,0 +1,112 @@ +/* + * C Implementation: get_set + * + * Description: + * Example on how to get and set values through key names + * from a grib_handle created by an message in a file. + * All angles are espressed in Degrees though in the + * message can be in millidegrees or microdegrees depending + * on the grib edition number. + * Only angle values in Degrees should be setted and getted + * by the user. Expert users can access the hard coded values + * in the grib message omitting the "InDegrees" suffix, but + * it's worth to notice that units are those appropriate for + * the message edition. + * WARNING: Some variables are dependent. + * For example numberOfPointsAlongAMeridian depends on: + * - jDirectionIncrementInDegrees + * - latitudeOfFirstGridPointInDegrees + * - latitudeOfLastGridPointInDegrees. + * Thus only these last three must be set and the first will + * be available. Inversely if numberOfPointsAlongAMeridian + * is set then jDirectionIncrementInDegrees will be + * automatically calculated and modified in the grib + * message. + * jDirectionIncrementInDegrees, latitudeOfFirstGridPointInDegrees, + * latitudeOfLastGridPointInDegrees are required variables and + * numberOfPointsAlongAMeridian is optional. All the required + * variables must be set when creating a new handle, optional + * ones can be set or not. If an optional variable is set other + * variables are automatically set. Only required variables + * should be set by a user. Only expert users should access + * optional variables and only in particulare cases. + * A list of all the available required keys for a message + * can be obtained using the command line tool grib_dump + * on the message file, or with the keys_iterator function + * (see example keys_iterator.c). + * + * Author: Enrico Fucile , (C) 2006 + * + * Copyright: See COPYING file that comes with this distribution + * + */ +#include +#include +#include "grib_api.h" + + + +int main(int argc, char *argv[]) +{ + int ret=0; + + grib_handle* h; + double* values; + long numberOfPointsAlongAParallel,numberOfPointsAlongAMeridian,numberOfPoints,i,j,k; + + /* Option flags used by grib_dump. + * Turn on: + * GRIB_DUMP_FLAG_VALUES to dump values + * GRIB_DUMP_FLAG_OPTIONAL to dump optional keys + * GRIB_DUMP_FLAG_READ_ONLY to dump read_only keys + */ + int option_flags = GRIB_DUMP_FLAG_VALUES + | GRIB_DUMP_FLAG_OPTIONAL + | GRIB_DUMP_FLAG_READ_ONLY; + + h = grib_handle_new_from_template(0,"GRIB1"); + if(!h) { + printf("ERROR: Unable to create grib handle\n"); + exit(1); + } + + /* GRIB_CHECK is a macro that translates the error code in a message + * printed on the standard error and exits returning the error code + */ + GRIB_CHECK(grib_set_double(h,"latitudeOfFirstGridPointInDegrees",10),0); + GRIB_CHECK(grib_set_double(h,"longitudeOfFirstGridPointInDegrees",-10),0); + + GRIB_CHECK(grib_set_double(h,"latitudeOfLastGridPointInDegrees",-10),0); + GRIB_CHECK(grib_set_double(h,"longitudeOfLastGridPointInDegrees",10),0); + + GRIB_CHECK(grib_set_double(h,"jDirectionIncrementInDegrees",0.5),0); + GRIB_CHECK(grib_set_double(h,"iDirectionIncrementInDegrees",0.5),0); + + GRIB_CHECK(grib_get_long( h,"numberOfPointsAlongAParallel",&numberOfPointsAlongAParallel),0); + GRIB_CHECK(grib_get_long( h,"numberOfPointsAlongAMeridian",&numberOfPointsAlongAMeridian),0); + + numberOfPoints=numberOfPointsAlongAMeridian*numberOfPointsAlongAParallel; + values=(double*)malloc(numberOfPoints*sizeof(double)); + + for (j=0;j, (C) 2006 + * + * Copyright: See COPYING file that comes with this distribution + * + */ + +#include +#include +#include +#include + +#include "grib_api.h" + +#define MAX_KEY_LEN 255 +#define MAX_VAL_LEN 1024 + +static void usage(char* progname); + +int main(int argc, char *argv[]) +{ + /* filter out keys from the key_iterator with + * key_iterator_filter_flags -> GRIB_NO_READ_ONLY_KEYS, GRIB_NO_OPTIONAL_KEYS + * set it to 0 if you want all keys + */ + /* unsigned long key_iterator_filter_flags=GRIB_KEYS_ITERATOR_SKIP_READ_ONLY || GRIB_KEYS_ITERATOR_SKIP_OPTIONAL; */ + unsigned long key_iterator_filter_flags=GRIB_KEYS_ITERATOR_ALL_KEYS; + + /* char* namespace=0; */ + char* namespace="mars"; + + FILE* f; + grib_handle* h=NULL; + grib_keys_iterator* kiter=NULL; + int err=0; + int grib_count=0; + + char value[MAX_VAL_LEN]; + size_t vlen=MAX_VAL_LEN; + + if (argc != 2) usage(argv[0]); + + f = fopen(argv[1],"r"); + if(!f) { + perror(argv[1]); + exit(1); + } + + while((h = grib_handle_new_from_file(0,f,&err)) != NULL) { + + grib_count++; + printf("-- GRIB N. %d --\n",grib_count); + if(!h) { + printf("ERROR: Unable to create grib handle\n"); + exit(1); + } + + kiter=grib_keys_iterator_new(h,key_iterator_filter_flags,namespace); + if (!kiter) { + printf("ERROR: Unable to create keys iterator\n"); + exit(1); + } + + while(grib_keys_iterator_next(kiter)) + { + const char* name = grib_keys_iterator_get_name(kiter); + vlen=MAX_VAL_LEN; + GRIB_CHECK(grib_keys_iterator_get_string(kiter,value,&vlen),name); + printf("%s = %s\n",name,value); + } + + grib_keys_iterator_delete(kiter); + + } + + return 0; + +} + +static void usage(char* progname) { + printf("\nUsage: %s grib_file\n",progname); + exit(1); +} + diff --git a/examples.dev/sample1.c b/examples.dev/sample1.c new file mode 100644 index 000000000..50b851788 --- /dev/null +++ b/examples.dev/sample1.c @@ -0,0 +1,84 @@ +#include +#include +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + double *values = NULL; + size_t values_len= 0; + + size_t i = 0; + + double latitudeOfFirstGridPointInDegrees; + double longitudeOfFirstGridPointInDegrees; + double latitudeOfLastGridPointInDegrees; + double longitudeOfLastGridPointInDegrees; + + double jDirectionIncrementInDegrees; + double iDirectionIncrementInDegrees; + + long numberOfPointsAlongAParallel; + long numberOfPointsAlongAMeridian; + + double average = 0; + + FILE* in = NULL; + char* filename = "../data/sample1.grib"; + grib_handle *h = NULL; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + GRIB_CHECK(h = grib_handle_new_from_file(0,in,&err),0); + + GRIB_CHECK(grib_get_long(h,"numberOfPointsAlongAParallel",&numberOfPointsAlongAParallel),0); + printf("numberOfPointsAlongAParallel=%ld\n",numberOfPointsAlongAParallel); + + GRIB_CHECK(grib_get_long(h,"numberOfPointsAlongAMeridian",&numberOfPointsAlongAMeridian),0); + printf("numberOfPointsAlongAMeridian=%ld\n",numberOfPointsAlongAMeridian); + + GRIB_CHECK(grib_get_double(h,"latitudeOfFirstGridPointInDegrees",&latitudeOfFirstGridPointInDegrees),0); + printf("latitudeOfFirstGridPointInDegrees=%g\n",latitudeOfFirstGridPointInDegrees); + + GRIB_CHECK(grib_get_double(h,"longitudeOfFirstGridPointInDegrees",&longitudeOfFirstGridPointInDegrees),0); + printf("longitudeOfFirstGridPointInDegrees=%g\n",longitudeOfFirstGridPointInDegrees); + + GRIB_CHECK(grib_get_double(h,"latitudeOfLastGridPointInDegrees",&latitudeOfLastGridPointInDegrees),0); + printf("latitudeOfLastGridPointInDegrees=%g\n",latitudeOfLastGridPointInDegrees); + + GRIB_CHECK(grib_get_double(h,"longitudeOfLastGridPointInDegrees",&longitudeOfLastGridPointInDegrees),0); + printf("longitudeOfLastGridPointInDegrees=%g\n",longitudeOfLastGridPointInDegrees); + + GRIB_CHECK(grib_get_double(h,"jDirectionIncrementInDegrees",&jDirectionIncrementInDegrees),0); + printf("jDirectionIncrementInDegrees=%g\n",jDirectionIncrementInDegrees); + + GRIB_CHECK(grib_get_double(h,"iDirectionIncrementInDegrees",&iDirectionIncrementInDegrees),0); + printf("iDirectionIncrementInDegrees=%g\n",iDirectionIncrementInDegrees); + + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + average = 0; + for(i = 0; i < values_len; i++) + average += values[i]; + + average /=(double)values_len; + + free(values); + + printf("There are %d values, average is %g\n",(int)values_len,average); + + grib_handle_delete(h); + + fclose(in); + return 0; +} diff --git a/examples.dev/sample3.c b/examples.dev/sample3.c new file mode 100644 index 000000000..4cfe2713f --- /dev/null +++ b/examples.dev/sample3.c @@ -0,0 +1,35 @@ +#include +#include +#include +#include + +#include "grib_api_internal.h" + +int main(int argc, char *argv[]) +{ + grib_handle* h=NULL; + grib_keyset* keyset=NULL; + + char name[200]; + size_t klen=sizeof(name); + + h = grib_handle_new_from_template(0,"GRIB1"); + + if(!h) { + printf("ERROR: Unable to create grib handle\n"); + exit(1); + } + keyset = grib_new_keyset(h,"*"); + klen = sizeof(name); + while(grib_keyset_next(keyset,name,&klen)) { + printf("MARS -> %s ...\n",name); + klen = sizeof(name); + } + + /* print_one_request(r); */ + + grib_keyset_delete(keyset); + + return 0; + +} diff --git a/examples.dev/sample4.c b/examples.dev/sample4.c new file mode 100644 index 000000000..05e4d12c4 --- /dev/null +++ b/examples.dev/sample4.c @@ -0,0 +1,92 @@ +#include +#include +#include +#include + +#include "grib_api.h" + + + +int main(int argc, char *argv[]) +{ + int ret=0; + FILE* f; + size_t size; + grib_handle* h=NULL; + double* values=NULL; + long numberOfPointsAlongAParallel,numberOfPointsAlongAMeridian,numberOfPoints,i,j,k; + char* filename="out.grib"; + const void* buffer=NULL; + + /* Create a grib handle from template*/ + h = grib_handle_new_from_template(0,"GRIB1"); + if(!h) { + printf("ERROR: Unable to create grib handle\n"); + exit(1); + } + + /* set values as appropriate in the grib handle header */ + CHECK(grib_set_long(h,"gribTablesVersionNo", 210)); + CHECK(grib_set_long(h,"indicatorOfParameter",80 )); + + CHECK(grib_set_long(h,"indicatorOfTypeOfLevel",1 )); + CHECK(grib_set_long(h,"topLevel",0)); + CHECK(grib_set_long(h,"bottomLevel",0)); + + CHECK(grib_set_long(h,"dataDate",20021201 )); + CHECK(grib_set_long(h,"dataTime",1200 )); + + CHECK(grib_set_double(h,"latitudeOfFirstGridPointInDegrees",10)); + CHECK(grib_set_double(h,"longitudeOfFirstGridPointInDegrees",-10)); + + CHECK(grib_set_double(h,"latitudeOfLastGridPointInDegrees",-10)); + CHECK(grib_set_double(h,"longitudeOfLastGridPointInDegrees",10)); + + CHECK(grib_set_double(h,"jDirectionIncrementInDegrees",0.5)); + CHECK(grib_set_double(h,"iDirectionIncrementInDegrees",0.5)); + + + /* get number of points calculated automatically by the grib_api */ + CHECK(grib_get_long( h,"numberOfPointsAlongAParallel",&numberOfPointsAlongAParallel)); + CHECK(grib_get_long( h,"numberOfPointsAlongAMeridian",&numberOfPointsAlongAMeridian)); + + numberOfPoints=numberOfPointsAlongAMeridian*numberOfPointsAlongAMeridian; + + /* allocate the values array */ + values=(double*)malloc(numberOfPoints*sizeof(double)); + + /* load the values array */ + for (j=0;jn); + grib_points_get_values(h,points,val); + + for (i=0;in;i++) { + printf("%d -- %.3f %.3f %ld %g\n",i, + points->latitudes[i], points->longitudes[i], (long)(points->indexes[i]), val[i]); + } + + free(val); + + fclose(f); + return 0; + +} diff --git a/examples/C/ecmwf_link.sh b/examples/C/ecmwf_link.sh new file mode 100755 index 000000000..c4f8eb5a7 --- /dev/null +++ b/examples/C/ecmwf_link.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +set -ex + +CC=xlc +FC=xlf + +jasper_lib="-I/usr/local/lib/metaps/lib/grib_api/jasper/include -L/usr/local/lib/metaps/lib/grib_api/jasper/lib -ljasper" +grib_api_lib="-I/usr/local/lib/metaps/lib/grib_api/new/include -L/usr/local/lib/metaps/lib/grib_api/new/lib -lgrib_api" + +$CC -o multi multi.c $jasper_lib $grib_api_lib -lm + +./multi > /dev/null + +$FC -o multi_fortran multi_fortran.F $jasper_lib $grib_api_lib + +./multi_fortran > /dev/null + + diff --git a/examples/C/fieldset.c b/examples/C/fieldset.c new file mode 100644 index 000000000..6f5a70365 --- /dev/null +++ b/examples/C/fieldset.c @@ -0,0 +1,84 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: fieldset + * + * Description: how to use a fieldset. + * + * + * + * + */ + +#include +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("Usage: %s order_by grib_file grib_file ...\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0; + long step,levelType; + char** filenames; + size_t nkeys,nfiles; + int i=0; + char* keys[]={"step","date","param","levelType"}; + grib_fieldset* set; + grib_handle* h; + char param[20]={0,}; + char date[10]={0,}; + size_t datelen=10; + size_t len=20; + char* order_by=0; + + if (argc != 3) usage(argv[0]); + + nkeys=sizeof(keys)/sizeof(*keys); + order_by=strdup(argv[1]); + + nfiles=argc-2; + filenames=(char**)malloc(sizeof(char*)*nfiles); + for (i=0;i +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + double *values = NULL; + size_t values_len= 0; + + size_t i = 0; + + double latitudeOfFirstGridPointInDegrees; + double longitudeOfFirstGridPointInDegrees; + double latitudeOfLastGridPointInDegrees; + double longitudeOfLastGridPointInDegrees; + + double jDirectionIncrementInDegrees; + double iDirectionIncrementInDegrees; + + long numberOfPointsAlongAParallel; + long numberOfPointsAlongAMeridian; + + double average = 0; + + FILE* in = NULL; + char* filename = "../../data/regular_latlon_surface.grib1"; + grib_handle *h = NULL; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* create new handle from a message in a file*/ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",filename); + } + + /* get as a long*/ + GRIB_CHECK(grib_get_long(h,"Ni",&numberOfPointsAlongAParallel),0); + printf("numberOfPointsAlongAParallel=%ld\n",numberOfPointsAlongAParallel); + + /* get as a long*/ + GRIB_CHECK(grib_get_long(h,"Nj",&numberOfPointsAlongAMeridian),0); + printf("numberOfPointsAlongAMeridian=%ld\n",numberOfPointsAlongAMeridian); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"latitudeOfFirstGridPointInDegrees",&latitudeOfFirstGridPointInDegrees),0); + printf("latitudeOfFirstGridPointInDegrees=%g\n",latitudeOfFirstGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"longitudeOfFirstGridPointInDegrees",&longitudeOfFirstGridPointInDegrees),0); + printf("longitudeOfFirstGridPointInDegrees=%g\n",longitudeOfFirstGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"latitudeOfLastGridPointInDegrees",&latitudeOfLastGridPointInDegrees),0); + printf("latitudeOfLastGridPointInDegrees=%g\n",latitudeOfLastGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"longitudeOfLastGridPointInDegrees",&longitudeOfLastGridPointInDegrees),0); + printf("longitudeOfLastGridPointInDegrees=%g\n",longitudeOfLastGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"jDirectionIncrementInDegrees",&jDirectionIncrementInDegrees),0); + printf("jDirectionIncrementInDegrees=%g\n",jDirectionIncrementInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"iDirectionIncrementInDegrees",&iDirectionIncrementInDegrees),0); + printf("iDirectionIncrementInDegrees=%g\n",iDirectionIncrementInDegrees); + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + /* get data values*/ + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + average = 0; + for(i = 0; i < values_len; i++) + average += values[i]; + + average /=(double)values_len; + + free(values); + + printf("There are %d values, average is %g\n",(int)values_len,average); + + grib_handle_delete(h); + + fclose(in); + return 0; +} diff --git a/examples/C/get.sh b/examples/C/get.sh new file mode 100755 index 000000000..264ff005b --- /dev/null +++ b/examples/C/get.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}get > /dev/null + + diff --git a/examples/C/grib_precipitation.c b/examples/C/grib_precipitation.c new file mode 100644 index 000000000..7689245fe --- /dev/null +++ b/examples/C/grib_precipitation.c @@ -0,0 +1,73 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_precipitation + * + * Description: convert fields accumulated from 0 step in + * fields accumulated in the interval between + * a field and another. In the input file the fields + * must be in ascending order in the step. + * step must be the most external loop (slower varying index) + * + * + * + */ +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s filename\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0,i; + double *values = NULL; + double max,min,average; + size_t values_len= 0; + + FILE* in = NULL; + char* filename ; + grib_handle *h = NULL; + + if (argc<2) usage(argv[0]); + filename=argv[1]; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* create new handle from a message in a file*/ + while((h = grib_handle_new_from_file(0,f,&err)) != NULL) { + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + /* get data values*/ + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + for(i = 0; i < values_len; i++) + printf("%d %.10e\n",i+1,values[i]); + + free(values); + + grib_handle_delete(h); + } + + fclose(in); + return 0; +} diff --git a/examples/C/include.sh b/examples/C/include.sh new file mode 100644 index 000000000..370830a64 --- /dev/null +++ b/examples/C/include.sh @@ -0,0 +1,44 @@ +set -ea +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +echo +echo "TEST: $0" + +if [ -z "${data_dir}" ] +then + cd ../../ + cpath=`pwd` + GRIB_DEFINITION_PATH=$cpath/definitions + export GRIB_DEFINITION_PATH + GRIB_TEMPLATES_PATH=$cpath/templates + export GRIB_TEMPLATES_PATH + tools_dir=$cpath/tools/ + examples_dir=$cpath/examples/C/ + data_dir=$cpath/data +else + echo "Skipping test $0" + exit +fi + +cd ${examples_dir} + +if [ -z "${GRIB_API_INCLUDE}" ] +then + GRIB_API_INCLUDE=`pwd`/src +fi + +if [ -z "${GRIB_API_LIB}" ] +then + GRIB_API_LIB=`pwd`/src +fi + +#${tools_dir}grib_info + +set -u + diff --git a/examples/C/iterator.c b/examples/C/iterator.c new file mode 100644 index 000000000..20d644a9b --- /dev/null +++ b/examples/C/iterator.c @@ -0,0 +1,89 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: iterator + * + * Description: how to use an iterator on lat/lon/values. + * + * + * + * + */ + +#include +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("Usage: %s grib_file\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + FILE* in = NULL; + int err = 0; + double lat,lon,value,missingValue=0; + int n=0; + char* filename = NULL; + + /* Message handle. Required in all the grib_api calls acting on a message.*/ + grib_handle *h = NULL; + /* Iterator on lat/lon/values.*/ + grib_iterator* iter=NULL; + + if (argc != 2) usage(argv[0]); + + filename=strdup(argv[1]); + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* Loop on all the messages in a file.*/ + while ((h = grib_handle_new_from_file(0,in,&err)) != NULL ) { + /* Check of errors after reading a message. */ + if (err != GRIB_SUCCESS) GRIB_CHECK(err,0); + + /* Get the double representing the missing value in the field. */ + GRIB_CHECK(grib_get_double(h,"missingValue",&missingValue),0); + + /* A new iterator on lat/lon/values is created from the message handle h. */ + iter=grib_iterator_new(h,0,&err); + if (err != GRIB_SUCCESS) GRIB_CHECK(err,0); + + n = 0; + /* Loop on all the lat/lon/values. */ + while(grib_iterator_next(iter,&lat,&lon,&value)) { + /* You can now print lat and lon, */ + printf("- %d - lat=%f lon=%f value=",n,lat,lon); + /* decide what to print if a missing value is found. */ + if (value == missingValue ) printf("missing\n"); + /* and print the value if is not missing. */ + else printf("%f\n",value); + n++; + } + + /* At the end the iterator is deleted to free memory. */ + grib_iterator_delete(iter); + + /* At the end the grib_handle is deleted to free memory. */ + grib_handle_delete(h); + } + + + fclose(in); + + return 0; +} diff --git a/examples/C/iterator.sh b/examples/C/iterator.sh new file mode 100755 index 000000000..c5cd9e3c5 --- /dev/null +++ b/examples/C/iterator.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}iterator ${data_dir}/reduced_gaussian_model_level.grib1 > /dev/null + +${examples_dir}iterator ${data_dir}/regular_gaussian_model_level.grib1 > /dev/null + diff --git a/examples/C/keys_iterator.c b/examples/C/keys_iterator.c new file mode 100644 index 000000000..a6fd1ce21 --- /dev/null +++ b/examples/C/keys_iterator.c @@ -0,0 +1,103 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: keys_iterator + * + * Description: + * Example on how to use keys_iterator functions and the + * grib_keys_iterator structure to get all the available + * keys in a message. + * + * + * + */ + +#include +#include +#include +#include +#include + +#include "grib_api.h" + +#define MAX_KEY_LEN 255 +#define MAX_VAL_LEN 1024 + +static void usage(char* progname); + +int main(int argc, char *argv[]) +{ + /* To skip read only and not coded keys + unsigned long key_iterator_filter_flags=GRIB_KEYS_ITERATOR_SKIP_READ_ONLY || + GRIB_KEYS_ITERATOR_SKIP_COMPUTED; + */ + unsigned long key_iterator_filter_flags=GRIB_KEYS_ITERATOR_ALL_KEYS; + + /* valid name_spaces are ls and mars */ + char* name_space="ls"; + + /* name_space=NULL to get all the keys */ + /* char* name_space=0; */ + + FILE* f; + grib_handle* h=NULL; + grib_keys_iterator* kiter=NULL; + int err=0; + int grib_count=0; + + char value[MAX_VAL_LEN]; + size_t vlen=MAX_VAL_LEN; + + if (argc != 2) usage(argv[0]); + + f = fopen(argv[1],"r"); + if(!f) { + perror(argv[1]); + exit(1); + } + + while((h = grib_handle_new_from_file(0,f,&err)) != NULL) { + + grib_count++; + printf("-- GRIB N. %d --\n",grib_count); + if(!h) { + printf("ERROR: Unable to create grib handle\n"); + exit(1); + } + + kiter=grib_keys_iterator_new(h,key_iterator_filter_flags,name_space); + if (!kiter) { + printf("ERROR: Unable to create keys iterator\n"); + exit(1); + } + + while(grib_keys_iterator_next(kiter)) + { + const char* name = grib_keys_iterator_get_name(kiter); + vlen=MAX_VAL_LEN; + bzero(value,vlen); + GRIB_CHECK(grib_get_string(h,name,value,&vlen),name); + printf("%s = %s\n",name,value); + } + + grib_keys_iterator_delete(kiter); + + } + + return 0; + +} + +static void usage(char* progname) { + printf("\nUsage: %s grib_file\n",progname); + exit(1); +} + diff --git a/examples/C/keys_iterator.sh b/examples/C/keys_iterator.sh new file mode 100755 index 000000000..fbea33c51 --- /dev/null +++ b/examples/C/keys_iterator.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}keys_iterator ${data_dir}/reduced_latlon_surface.grib1 > /dev/null + +${examples_dir}keys_iterator ${data_dir}/regular_gaussian_model_level.grib1 > /dev/null + diff --git a/examples/C/list.c b/examples/C/list.c new file mode 100644 index 000000000..01729805a --- /dev/null +++ b/examples/C/list.c @@ -0,0 +1,86 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: get + * + * Description: how to get values using keys. + * + * + * + */ +#include +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + + size_t i = 0; + size_t count; + size_t size; + + long numberOfContributingSpectralBands; + long values[1024]; + + FILE* in = NULL; + char* filename = "../../data/satellite.grib"; + grib_handle *h = NULL; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* create new handle from a message in a file*/ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",filename); + } + + numberOfContributingSpectralBands = 2; + GRIB_CHECK(grib_set_long(h,"numberOfContributingSpectralBands",numberOfContributingSpectralBands),0); + + numberOfContributingSpectralBands = 9; + GRIB_CHECK(grib_set_long(h,"numberOfContributingSpectralBands",numberOfContributingSpectralBands),0); + + /* get as a long*/ + GRIB_CHECK(grib_get_long(h,"numberOfContributingSpectralBands",&numberOfContributingSpectralBands),0); + printf("numberOfContributingSpectralBands=%ld\n",numberOfContributingSpectralBands); + + /* get as a long*/ + GRIB_CHECK(grib_get_size(h,"scaledValueOfCentralWaveNumber",&count),0); + printf("count=%ld\n",(long)count); + + assert(count < sizeof(values)/sizeof(values[0])); + + size = count; + GRIB_CHECK(grib_get_long_array(h,"scaledValueOfCentralWaveNumber",values,&size),0); + assert(size == count); + + for(i=0;i /dev/null + + diff --git a/examples/C/mars_param.c b/examples/C/mars_param.c new file mode 100644 index 000000000..55b029a67 --- /dev/null +++ b/examples/C/mars_param.c @@ -0,0 +1,53 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: set + * + * Description: how to set key values. + * + * + * + * + */ +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + grib_string_list* list; + grib_string_list* list2; + + list=grib_util_get_param_id("11.2"); + printf("mars.param=11.2 -> paramId= "); + while (list) { + printf("%s ",list->value); + list2=grib_util_get_param_id("130.128"); + printf("mars.param=11.2 -> paramId= "); + while (list2) { + printf("%s ",list2->value); + list2=list2->next; + } + list=list->next; + } + printf("\n"); + printf("\n"); + + printf("paramId=130 -> mars.param= "); + list=grib_util_get_mars_param("130"); + while (list) { + printf("%s ",list->value); + list=list->next; + } + printf("\n"); + + return 0; +} diff --git a/examples/C/multi.c b/examples/C/multi.c new file mode 100644 index 000000000..a15e36b84 --- /dev/null +++ b/examples/C/multi.c @@ -0,0 +1,68 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: multi + * + * Description: How to decode grib messages containing multiple + * fields. Try to turn on and off multi support to + * see the difference. Default is OFF. + * For all the tools defalut is multi support ON. + * + * + */ +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + long parameterCategory=0,parameterNumber=0,discipline=0; + FILE* in = NULL; + char* filename = "../../data/multi.grib2"; + grib_handle *h = NULL; + + /* turn on support for multi fields messages */ + grib_multi_support_on(0); + + /* turn off support for multi fields messages */ + /* grib_multi_support_off(0); */ + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + while ((h = grib_handle_new_from_file(0,in,&err)) != NULL ) { + + GRIB_CHECK(err,0); + + GRIB_CHECK(grib_get_long(h,"discipline",&discipline),0); + printf("discipline=%ld\n",discipline); + + GRIB_CHECK(grib_get_long(h,"parameterCategory",¶meterCategory),0); + printf("parameterCategory=%ld\n",parameterCategory); + + GRIB_CHECK(grib_get_long(h,"parameterNumber",¶meterNumber),0); + printf("parameterNumber=%ld\n",parameterNumber); + + if ( discipline == 0 && parameterCategory==2) { + if (parameterNumber == 2) printf("-------- u -------\n"); + if (parameterNumber == 3) printf("-------- v -------\n"); + } + grib_handle_delete(h); + } + + fclose(in); + return 0; +} + diff --git a/examples/C/multi.sh b/examples/C/multi.sh new file mode 100755 index 000000000..d2d643250 --- /dev/null +++ b/examples/C/multi.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +if [ ! -f "${data_dir}/multi.grib2" ] +then + echo SKIP: $0 + exit +fi +${examples_dir}multi > /dev/null + + diff --git a/examples/C/multi_write.c b/examples/C/multi_write.c new file mode 100644 index 000000000..66cde41eb --- /dev/null +++ b/examples/C/multi_write.c @@ -0,0 +1,85 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: multi + * + * Description: How to encode grib messages containing multiple + * fields. + * + * + * + */ +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s in.grib out.grib\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0; + FILE* in = NULL; + FILE* of = NULL; + long step; + char* filename=NULL; + char* ofilename=NULL; + grib_handle *h = NULL; + grib_multi_handle *mh=NULL; + + if (argc < 3) usage(argv[0]); + filename=argv[1]; + ofilename=argv[2]; + + /* open input file */ + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* new grib handle from input file */ + h = grib_handle_new_from_file(0,in,&err); + GRIB_CHECK(err,0); + /* create a new empty multi field handle */ + mh=grib_multi_handle_new(0); + if (!mh) { + printf("unable to create multi field handle\n"); + exit(1); + } + + for (step=12;step<=120;step+=12) { + /* set step */ + grib_set_long(h,"step",step); + /* append h to mh repeating the sections preceding section 4 */ + grib_multi_handle_append(h,4,mh); + } + + /* open output file */ + of=fopen(ofilename,"w"); + if(!of) { + printf("ERROR: unable to open file %s\n",ofilename); + exit(1); + } + + /* write multi fields handle to output file */ + grib_multi_handle_write(mh,of); + fclose(of); + + /* clean memory */ + grib_handle_delete(h); + grib_multi_handle_delete(mh); + + fclose(in); + return 0; +} diff --git a/examples/C/multi_write.sh b/examples/C/multi_write.sh new file mode 100755 index 000000000..fa106ba4c --- /dev/null +++ b/examples/C/multi_write.sh @@ -0,0 +1,29 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +if [ ! -f "${data_dir}/sample.grib2" ] +then + echo SKIP: $0 + exit +fi +${examples_dir}multi_write ${data_dir}/sample.grib2 ${data_dir}/multi_sample.grib2 > /dev/null + +${tools_dir}grib_get -p step ${data_dir}/multi_sample.grib2 > ${data_dir}/multi_step.test + +diff ${data_dir}/multi_step.test ${data_dir}/multi_step.txt + +step=`${tools_dir}grib_get -M -p step ${data_dir}/multi_sample.grib2` + +[ $step -eq 12 ] + +rm -f ${data_dir}/multi_sample.grib2 ${data_dir}/multi_step.test | true + + diff --git a/examples/C/nc.c b/examples/C/nc.c new file mode 100644 index 000000000..aab0a6635 --- /dev/null +++ b/examples/C/nc.c @@ -0,0 +1,36 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s in.nc\n",prog); + exit(1); +} + +int main(int argc,char* argv[]) { + + char* file; + int err=0; + grib_handle* h; + char identifier[7]={0,}; + size_t len=7; + grib_context* c=grib_context_get_default(); + + if (argc>2) usage(argv[0]); + + file=argv[1]; + + h=grib_handle_new_from_nc_file(c,file,&err); + grib_get_string(h,"identifier",identifier,&len); + printf("%s\n",identifier); + GRIB_CHECK(err,0); + + return err; +} diff --git a/examples/C/nearest.c b/examples/C/nearest.c new file mode 100644 index 000000000..ef2147169 --- /dev/null +++ b/examples/C/nearest.c @@ -0,0 +1,93 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: fieldset + * + * Description: how to use a fieldset. + * + * + * + * + */ + +#include +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("Usage: %s grib_file grib_file ...\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0; + long step=0; + size_t nfiles; + int i=0; + grib_fieldset* set=NULL; + grib_handle* h=NULL; + char param[20]={0,}; + size_t len=20; + double lats[4]={0,}; + double lons[4]={0,}; + double values[4]={0,}; + double distances[4]={0,}; + int indexes[4]={0,}; + char* order_by="param,step"; + + size_t size=4; + double lat=-40,lon=15; + int mode=0; + int count; + char** filenames; + grib_nearest* nearest=NULL; + + if (argc < 2) usage(argv[0]); + + nfiles=argc-1; + filenames=(char**)malloc(sizeof(char*)*nfiles); + for (i=0;i +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("Usage: %s latlon_file grib_orography grib_file grib_file ...\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + FILE* fin=0; + int ret=0; + char* fname=0; + float lat,lon; + double *vlat,*vlon; + int npoints=0,i=0,n=0; + grib_handle* h; + double *outlats,*outlons,*values,*lsm_values,*distances; + int* indexes; + long step=0; + char time[10]={0,}; + char date[10]={0,}; + long parameter=0; + size_t len=0; + long iid=0; + long *id=NULL; + + if (argc < 2) usage(argv[0]); + + fname=argv[1]; + fin=fopen(fname,"r"); + if(!fin) { perror(fname); exit(1); } + npoints=0; + while (fscanf(fin,"%ld %g %g",&iid,&lat,&lon) != EOF) npoints++; + fclose(fin); + + id=(long*)malloc(npoints*sizeof(long)); + if (!id) {printf("unable to allocate %ld bytes\n",(long)(npoints*sizeof(long)));exit(1);} + vlat=(double*)malloc(npoints*sizeof(double)); + if (!vlat) {printf("unable to allocate %ld bytes\n",(long)(npoints*sizeof(double)));exit(1);} + vlon=(double*)malloc(npoints*sizeof(double)); + if (!vlon) {printf("unable to allocate %ld bytes\n",(long)(npoints*sizeof(double)));exit(1);} + outlats=(double*)malloc(npoints*sizeof(double)); + if (!outlats) {printf("unable to allocate %ld bytes\n",(long)(npoints*sizeof(double)));exit(1);} + outlons=(double*)malloc(npoints*sizeof(double)); + if (!outlons) {printf("unable to allocate %ld bytes\n",(long)(npoints*sizeof(double)));exit(1);} + values=(double*)malloc(npoints*sizeof(double)); + if (!values) {printf("unable to allocate %ld bytes\n",(long)(npoints*sizeof(double)));exit(1);} + lsm_values=(double*)malloc(npoints*sizeof(double)); + if (!lsm_values) {printf("unable to allocate %ld bytes\n",(long)(npoints*sizeof(double)));exit(1);} + distances=(double*)malloc(npoints*sizeof(double)); + if (!distances) {printf("unable to allocate %ld bytes\n",(long)(npoints*sizeof(double)));exit(1);} + indexes=(int*)malloc(npoints*sizeof(int)); + if (!indexes) {printf("unable to allocate %ld bytes\n",(long)(npoints*sizeof(double)));exit(1);} + + fname=argv[1]; + fin=fopen(fname,"r"); + if(!fin) { perror(fname); exit(1); } + i=0; + while (fscanf(fin,"%ld %g %g",&iid,&lat,&lon) != EOF) { + id[i]=iid;vlat[i]=lat; + while(lon < 0) lon+=360; + vlon[i]=lon; + i++; + } + fclose(fin); + + fname=argv[2]; + fin=fopen(fname,"r"); + if(!fin) { perror(fname); exit(1); } + h=grib_handle_new_from_file(0,fin,&ret); + if (!h || ret!=GRIB_SUCCESS) {printf(" unable to create handle\n");exit(1);} + + grib_nearest_find_multiple(h,1,vlat,vlon,npoints, + outlats,outlons,lsm_values,distances,indexes); + + grib_handle_delete(h); + + fclose(fin); + + for (n=3;n<=argc-1;n++) { + fname=argv[n]; + fin=fopen(fname,"r"); + if(!fin) { perror(fname); exit(1); } + while ((h=grib_handle_new_from_file(0,fin,&ret))!=NULL) { + grib_get_double_elements(h,"values",indexes,npoints,values); + + len=10; + grib_get_string(h,"date",date,&len); + len=10; + grib_get_string(h,"time",time,&len); + grib_get_long(h,"step",&step); + grib_get_long(h,"parameter",¶meter); + + printf("# %s %s %ld %ld\n",date,time,step,parameter); + grib_handle_delete(h); + for (i=0;i +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + size_t size=0; + + FILE* in = NULL; + char* infile = "../../data/regular_latlon_surface.grib1"; + FILE* out = NULL; + char* outfile = "out.grib1"; + grib_handle *h = NULL; + const void* buffer = NULL; + double* values1=NULL; + double* values2=NULL; + double maxa=0,a=0; + double maxv=0,minv=0; + double maxr=0,r=0; + long decimalPrecision; + long bitsPerValue1=0, bitsPerValue2=0; + int i=0; + + in = fopen(infile,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",infile); + return 1; + } + + out = fopen(outfile,"w"); + if(!in) { + printf("ERROR: unable to open file %s\n",outfile); + return 1; + } + + /* create a new handle from a message in a file */ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",infile); + } + + /* bitsPerValue before changing the packing parameters */ + GRIB_CHECK(grib_get_long(h,"bitsPerValue",&bitsPerValue1),0); + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&size),0); + + values1 = malloc(size*sizeof(double)); + /* get data values before changing the packing parameters*/ + GRIB_CHECK(grib_get_double_array(h,"values",values1,&size),0); + + /* changing decimal precition to 2 means that 2 decimal digits + are preserved when packing. */ + decimalPrecision=2; + GRIB_CHECK(grib_set_long(h,"changeDecimalPrecision",decimalPrecision),0); + + /* bitsPerValue after changing the packing parameters */ + GRIB_CHECK(grib_get_long(h,"bitsPerValue",&bitsPerValue2),0); + + values2 = malloc(size*sizeof(double)); + /* get data values after changing the packing parameters*/ + GRIB_CHECK(grib_get_double_array(h,"values",values2,&size),0); + + /* computing error */ + maxa=0; + maxr=0; + maxv=values2[0]; + minv=maxv; + for (i=0;i maxv ) maxv=values2[i]; + if ( values2[i] < maxv ) minv=values2[i]; + if ( values2[i] !=0 ) r=fabs((values2[i]-values1[i])/values2[i]); + if ( a > maxa ) maxa=a; + if ( r > maxr ) maxr=r; + } + printf("max absolute error = %g\n",maxa); + printf("max relative error = %g\n",maxr); + printf("min value = %g\n",minv); + printf("max value = %g\n",maxv); + + printf("old number of bits per value=%ld\n",(long)bitsPerValue1); + printf("new number of bits per value=%ld\n",(long)bitsPerValue2); + + /* get the coded message in a buffer */ + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + /* write the buffer in a file*/ + if(fwrite(buffer,1,size,out) != size) + { + perror(argv[1]); + exit(1); + } + + /* delete handle */ + grib_handle_delete(h); + + fclose(in); + fclose(out); + + return 0; +} + diff --git a/examples/C/precision.sh b/examples/C/precision.sh new file mode 100755 index 000000000..3bd3b46cf --- /dev/null +++ b/examples/C/precision.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}precision > /dev/null + + diff --git a/examples/C/print_data.c b/examples/C/print_data.c new file mode 100644 index 000000000..2d9188fa5 --- /dev/null +++ b/examples/C/print_data.c @@ -0,0 +1,80 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: print_data + * + * Description: prints all the data contained in a grib file + * + * + * + */ +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s filename\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0,i; + double *values = NULL; + double max,min,average; + size_t values_len= 0; + + FILE* in = NULL; + char* filename ; + grib_handle *h = NULL; + + if (argc<2) usage(argv[0]); + filename=argv[1]; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* create new handle from a message in a file*/ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",filename); + } + + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + /* get data values*/ + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + for(i = 0; i < values_len; i++) + printf("%d %.10e\n",i+1,values[i]); + + free(values); + + + GRIB_CHECK(grib_get_double(h,"max",&max),0); + GRIB_CHECK(grib_get_double(h,"min",&min),0); + GRIB_CHECK(grib_get_double(h,"average",&average),0); + + printf("%d values found in %s\n",(int)values_len,filename); + printf("max=%.10e min=%.10e average=%.10e\n",max,min,average); + + grib_handle_delete(h); + + fclose(in); + return 0; +} diff --git a/examples/C/print_data.sh b/examples/C/print_data.sh new file mode 100755 index 000000000..4ff0dd68b --- /dev/null +++ b/examples/C/print_data.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +numberOfValues=`${examples_dir}print_data ../../data/constant_field.grib1 | grep values | awk '{print $1}'` + +if [ $numberOfValues -ne 99200 ] +then + echo ERROR: wrong number of values + exit 1; +fi + + diff --git a/examples/C/rename.sh b/examples/C/rename.sh new file mode 100755 index 000000000..c9c6402b6 --- /dev/null +++ b/examples/C/rename.sh @@ -0,0 +1,14 @@ +#!/bin/ksh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +for i in *.f +do +base=`basename $i ".f"` +cp ${base}.f ${base}.F +done diff --git a/examples/C/run_examples.sh b/examples/C/run_examples.sh new file mode 100644 index 000000000..737ca81b5 --- /dev/null +++ b/examples/C/run_examples.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +set -e + +./get +./set +./iterator +./keys_iterator +./precision + + diff --git a/examples/C/sections_copy.c b/examples/C/sections_copy.c new file mode 100644 index 000000000..a478a95b4 --- /dev/null +++ b/examples/C/sections_copy.c @@ -0,0 +1,57 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s in1.grib in2.grib out.grib\n",prog); + exit(1); +} + +int main ( int argc, char* argv[]) { + grib_handle *hfrom,*hto,*h; + FILE *in; + char *in_name,*in_name1,*out_name; + int err=0; + int what=0; + + if (argc<4) usage(argv[0]); + + in_name=argv[1]; + in_name1=argv[2]; + out_name=argv[3]; + + in=fopen(in_name,"r"); + if (!in) { + perror(in_name); + exit(1); + } + + hfrom=grib_handle_new_from_file(0,in,&err); + GRIB_CHECK(err,0); + fclose(in); + + in=fopen(in_name1,"r"); + if (!in) { + perror(in_name1); + exit(1); + } + + hto=grib_handle_new_from_file(0,in,&err); + GRIB_CHECK(err,0); + fclose(in); + + what=GRIB_SECTION_PRODUCT | GRIB_SECTION_LOCAL; + h=grib_util_sections_copy(hfrom,hto,what,&err); + GRIB_CHECK(err,0); + + err=grib_write_message(h,out_name,"w"); + + return err; +} diff --git a/examples/C/sections_copy.sh b/examples/C/sections_copy.sh new file mode 100755 index 000000000..64a62a4a9 --- /dev/null +++ b/examples/C/sections_copy.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}sections_copy ../../data/in_copy.grib ../../data/out_copy.grib + + diff --git a/examples/C/set.c b/examples/C/set.c new file mode 100644 index 000000000..2d204d9e3 --- /dev/null +++ b/examples/C/set.c @@ -0,0 +1,86 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: set + * + * Description: how to set key values. + * + * + * + * + */ +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + long centre=80; + long long_value=0; + char string_value[100]; + size_t len = sizeof(string_value)/sizeof(char); + size_t size=0; + + FILE* in = NULL; + char* infile = "../../data/regular_latlon_surface.grib1"; + FILE* out = NULL; + char* outfile = "out.grib1"; + grib_handle *h = NULL; + const void* buffer = NULL; + + in = fopen(infile,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",infile); + return 1; + } + + out = fopen(outfile,"w"); + if(!out) { + printf("ERROR: unable to open file %s\n",outfile); + return 1; + } + + /* create a new handle from a message in a file */ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",infile); + } + + /* set centre as a long */ + GRIB_CHECK(grib_set_long(h,"centre",centre),0); + + /* get centre as a long */ + GRIB_CHECK(grib_get_long(h,"centre",&long_value),0); + printf("centre long value=%ld\n",long_value); + + /* get centre as a string */ + GRIB_CHECK(grib_get_string(h,"centre",string_value,&len),0); + printf("centre string value=%s\n",string_value); + + /* get the coded message in a buffer */ + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + /* write the buffer in a file*/ + if(fwrite(buffer,1,size,out) != size) + { + perror(argv[1]); + exit(1); + } + + /* delete handle */ + grib_handle_delete(h); + + fclose(in); + fclose(out); + + return 0; +} diff --git a/examples/C/set.sh b/examples/C/set.sh new file mode 100755 index 000000000..7b28b0c39 --- /dev/null +++ b/examples/C/set.sh @@ -0,0 +1,16 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}set > /dev/null + +${examples_dir}set_missing > /dev/null + + diff --git a/examples/C/set_bitmap.c b/examples/C/set_bitmap.c new file mode 100644 index 000000000..6ad39078f --- /dev/null +++ b/examples/C/set_bitmap.c @@ -0,0 +1,92 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: set_bitmap + * + * Description: how to set a bitmap in a grib message + * + * + * + * + */ + +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + size_t size=0; + + FILE* in = NULL; + char* infile = "../data/regular_latlon_surface.grib1"; + FILE* out = NULL; + char* outfile = "out.grib1"; + grib_handle *h = NULL; + const void* buffer = NULL; + size_t values_len; + double* values; + double missing=9999; + int i=0; + + in = fopen(infile,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",infile); + return 1; + } + + out = fopen(outfile,"w"); + if(!in) { + printf("ERROR: unable to open file %s\n",outfile); + return 1; + } + + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",infile); + } + + GRIB_CHECK(grib_set_double(h,"missingValue",missing),0); + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + /* get data values*/ + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + GRIB_CHECK(grib_set_long(h,"bitmapPresent",1),0); + + for(i = 0; i < 10; i++) + values[i]=missing; + + GRIB_CHECK(grib_set_double_array(h,"values",values,values_len),0); + + /* get the coded message in a buffer */ + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + /* write the buffer in a file*/ + if(fwrite(buffer,1,size,out) != size) + { + perror(outfile); + exit(1); + } + + /* delete handle */ + grib_handle_delete(h); + + fclose(in); + fclose(out); + + return 0; +} diff --git a/examples/C/set_data.c b/examples/C/set_data.c new file mode 100644 index 000000000..19fbdf5f1 --- /dev/null +++ b/examples/C/set_data.c @@ -0,0 +1,69 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: set_data + * + * Description: set the data contained in a grib file + * + */ +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s out.grib\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int i; + double *values = NULL; + size_t values_len= 0; + + const char* filename = "regular_ll_pl_grib1"; + grib_handle *h = NULL; + double d,e; + long count; + + if (argc!=2) usage(argv[0]); + /* create new handle from a message in a file*/ + h = grib_handle_new_from_template(0,"regular_ll_pl_grib1"); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",filename); + exit(1); + } + + values_len=10000; + values = malloc(values_len*sizeof(double)); + d=10e-8; + e=d; + count=1; + for (i=0;i1000) {e*=10; count=1;} + values[i]=d; + printf("%g \n",values[i]); + d+=e; + count++; + } + + GRIB_CHECK(grib_set_long(h,"bitsPerValue",16),0); + + /* set data values*/ + GRIB_CHECK(grib_set_double_array(h,"values",values,values_len),0); + + grib_write_message(h,argv[1],"w"); + + free(values); + grib_handle_delete(h); + + return 0; +} diff --git a/examples/C/set_missing.c b/examples/C/set_missing.c new file mode 100644 index 000000000..f39ad0da3 --- /dev/null +++ b/examples/C/set_missing.c @@ -0,0 +1,77 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: set_missing + * + * Description: how to set a key as missing. + * + * + * + * + */ +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + + FILE* in = NULL; + char* infile = "../../data/reduced_gaussian_pressure_level.grib2"; + FILE* out = NULL; + char* outfile = "out_surface_level.grib2"; + grib_handle *h = NULL; + const void* buffer = NULL; + size_t size=0; + char str[]="sfc"; + size_t str_len=3; + + in = fopen(infile,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",infile); + return 1; + } + + out = fopen(outfile,"w"); + if(!in) { + printf("ERROR: unable to open file %s\n",outfile); + return 1; + } + + /* create a new handle from a message in a file */ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",infile); + } + + GRIB_CHECK(grib_set_string(h,"typeOfFirstFixedSurface",str,&str_len),0); + GRIB_CHECK(grib_set_missing(h,"scaleFactorOfFirstFixedSurface"),0); + GRIB_CHECK(grib_set_missing(h,"scaledValueOfFirstFixedSurface"),0); + + /* get the coded message in a buffer */ + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + /* write the buffer in a file*/ + if(fwrite(buffer,1,size,out) != size) + { + perror(argv[1]); + exit(1); + } + + /* delete handle */ + grib_handle_delete(h); + + fclose(in); + fclose(out); + + return 0; +} diff --git a/examples/C/set_pv.c b/examples/C/set_pv.c new file mode 100644 index 000000000..ce4ad5bbb --- /dev/null +++ b/examples/C/set_pv.c @@ -0,0 +1,79 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: set + * + * Description: how to set pv . + * + * + * + * + */ +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + long PVPresent=1; + size_t size=0; + double pv[4]={1,2,3,4}; + size_t pvsize=4; + + FILE* in = NULL; + char* infile = "../data/regular_latlon_surface.grib1"; + FILE* out = NULL; + char* outfile = "out.grib1"; + grib_handle *h = NULL; + const void* buffer = NULL; + + in = fopen(infile,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",infile); + return 1; + } + + out = fopen(outfile,"w"); + if(!in) { + printf("ERROR: unable to open file %s\n",outfile); + return 1; + } + + /* create a new handle from a message in a file */ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",infile); + } + + GRIB_CHECK(grib_set_long(h,"PVPresent",PVPresent),0); + + + GRIB_CHECK(grib_set_double_array(h,"pv",pv,pvsize),0); + + /* get the coded message in a buffer */ + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + /* write the buffer in a file*/ + if(fwrite(buffer,1,size,out) != size) + { + perror(argv[1]); + exit(1); + } + + /* delete handle */ + grib_handle_delete(h); + + fclose(in); + fclose(out); + + return 0; +} diff --git a/examples/C/values_check.c b/examples/C/values_check.c new file mode 100644 index 000000000..7866d37da --- /dev/null +++ b/examples/C/values_check.c @@ -0,0 +1,64 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +#include "grib_api.h" + +int main(int argc, char* argv[]) { + FILE* f; + int err=0; + char infile[]="../../data/reduced_gaussian_model_level.grib1"; + grib_handle *h=NULL; + grib_context* c=grib_context_get_default(); + grib_values values[2]; + int nvalues=2; + int i; + char* name; + + f=fopen(infile,"r"); + if (!f) { + perror(infile); + exit(1); + } + + h=grib_handle_new_from_file(c,f,&err); + if (!h) { + printf("unable to create handle from file %s\n",infile); + exit(err); + } + fclose(f); + + values[0].type=GRIB_TYPE_LONG; + values[0].name="centre"; + values[0].long_value=98; + + values[1].type=GRIB_TYPE_LONG; + values[1].name="level"; + values[1].long_value=2; + + /*GRIB_VALUE_DIFFERENT -> value is different*/ + err=grib_values_check(h,values,nvalues); + if (err) { + for (i=0;i test.txt < test_fortran.txt + +diff test_fortran.txt test.txt + +#rm -f test_fortran.txt test.txt + + diff --git a/examples/F77/missing_value.F b/examples/F77/missing_value.F new file mode 100644 index 000000000..9471b352f --- /dev/null +++ b/examples/F77/missing_value.F @@ -0,0 +1,80 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C +C Fortran 77 Implementation: print_data_fortran +C +C Description: prints all the data contained in a grib file +C +C +C +C + program print_data_fortran + implicit none + integer maxNumberOfValues + parameter( maxNumberOfValues = 100000 ) + include 'grib_api_f77.h' + integer ifile + integer iret + integer igrib + integer i + real*8 values(maxNumberOfValues) + integer*4 numberOfValues + real*8 average + real*8 max + real*8 min + character*256 error + integer*4 size + + size=maxNumberOfValues + ifile=5 + + iret=grib_open_file(ifile + X,'../../data/constant_field.grib1','r') + call grib_check(iret) + +C a new grib message is loaded from file +C igrib is the grib id to be used in subsequent calls + call grib_check( grib_new_from_file(ifile,igrib) ) + + +C get the size of the values array + call grib_check(grib_get_size(igrib,'values',numberOfValues)) + if ( numberOfValues .gt. maxNumberOfValues ) then + write(*,*)'ERROR: maxNumberOfValues too small numberOfValues=', + XnumberOfValues + stop + endif + +C get data values + call grib_check(grib_get_real8_array(igrib,'values',values,size)) + if ( size .ne. numberOfValues ) then + write(*,*) 'ERROR: wrong numberOfValues' + stop + endif + + do i=1,numberOfValues + write(*,*)' ',i,values(i) + enddo + + average =average / numberOfValues + + write(*,*)numberOfValues,' values found ' + + call grib_check(grib_get_real8(igrib,'max',max)) + write(*,*) 'max=',max + call grib_check(grib_get_real8(igrib,'min',min)) + write(*,*) 'min=',min + call grib_check(grib_get_real8(igrib,'average',average)) + write(*,*) 'average=',average + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(ifile)) + + end diff --git a/examples/F77/msg_fortran.F b/examples/F77/msg_fortran.F new file mode 100644 index 000000000..09f6aef23 --- /dev/null +++ b/examples/F77/msg_fortran.F @@ -0,0 +1,78 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C + + C +C Fortran 77 Implementation: set_fortran +C +C Description: how to set key values. +C +C +C +C +C + program set + implicit none + integer MAX_MSG_LEN + parameter (MAX_MSG_LEN=100000) + include 'grib_api_f77.h' + integer err + integer*4 centre + integer*4 int_value + character*10 string_value + character*20 string_centre + integer len + integer size + integer infile,outfile + integer igrib,iret + character*256 error + integer buffer(MAX_MSG_LEN) + integer buflen + + infile=5 + outfile=6 + + call grib_check(grib_open_file(infile + X,'../../data/regular_latlon_surface.grib1','r')) + +c call grib_check(grib_open_file(outfile +c X,'../../data/out.grib1','w')) + +C a new grib message is loaded from file +C igrib is the grib id to be used in subsequent calls + call grib_check(grib_new_from_file(infile,igrib)) + +C set centre as a long */ + centre=80 + call grib_check(grib_set_int(igrib,'centre',centre)) + +C get centre as a integer*4 + call grib_check(grib_get_int(igrib,'centre',int_value)) + write(*,*) 'centre=',int_value + +C get centre as a string + call grib_check(grib_get_string(igrib,'centre',string_value)) + string_centre='centre='//string_value + write(*,*) string_centre + + call grib_copy_message(igrib,buffer,bufflen) +c +c .... do something with buffer +c + +C write modified message to a file +c call grib_check(grib_write(igrib,outfile)) + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(infile)) + +c call grib_check(grib_close_file(outfile)) + + end diff --git a/examples/F77/multi_fortran.F b/examples/F77/multi_fortran.F new file mode 100644 index 000000000..d5b32370f --- /dev/null +++ b/examples/F77/multi_fortran.F @@ -0,0 +1,78 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C +C +C Fortran 77 Implementation: multi_fortran +C +C Description: How to decode grib messages containing multiple +C fields. Try to turn on and off multi support to +C see the difference. Default is OFF. +C For all the tools defalut is multi support ON. +C +C +C +C +C + program multi + implicit none + include 'grib_api_f77.h' + integer iret + character*256 error + integer*4 parameterCategory,parameterNumber,discipline + integer ifile,igrib + + call grib_check( grib_open_file(ifile + X,'../../data/multi.grib2','r')) + +C turn on support for multi fields messages */ + call grib_check(grib_multi_support_on()) + +C turn off support for multi fields messages */ +C call grib_check(grib_multi_support_off()) + +C Loop on all the messages in a file. + 10 iret=grib_new_from_file(ifile,igrib) + if (igrib .eq. -1 ) then + if (iret .ne.0) then + call grib_check(iret) + endif + stop + endif + +C get as a integer*4 + call grib_check(grib_get_int(igrib,'discipline',discipline)) + write(*,*) 'discipline=',discipline + +C get as a integer*4 + call grib_check(grib_get_int(igrib,'parameterCategory' + X,parameterCategory)) + write(*,*) 'parameterCategory=',parameterCategory + +C get as a integer*4 + call grib_check(grib_get_int(igrib,'parameterNumber' + X,parameterNumber)) + write(*,*) 'parameterNumber=',parameterNumber + + if ( discipline .eq. 0 .and. parameterCategory .eq. 2) then + if (parameterNumber .eq. 2) then + write(*,*) "-------- u -------" + endif + if (parameterNumber .eq. 3) then + write(*,*) "-------- v -------" + endif + endif + + goto 10 + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(ifile)) + + end + diff --git a/examples/F77/multi_fortran.sh b/examples/F77/multi_fortran.sh new file mode 100755 index 000000000..38d3c9d37 --- /dev/null +++ b/examples/F77/multi_fortran.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +. ./include.sh + +if [ ! -f "${data_dir}/multi.grib2" ] +then + echo SKIP: $0 + exit +fi + +${examples_dir}multi_fortran > /dev/null + + diff --git a/examples/F77/nearest_fortran.F b/examples/F77/nearest_fortran.F new file mode 100755 index 000000000..53e1af30b --- /dev/null +++ b/examples/F77/nearest_fortran.F @@ -0,0 +1,79 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C + +C +C Fortran Implementation: fieldset +C +C Description: how to use a fieldset. +C +C +C +C +C + program nearest + implicit none + include 'grib_api_f77.h' + integer err + integer step + integer nfiles + integer i + integer iset + integer ig + character*20 param + integer len + real*8 lats + real*8 lons + real*8 values + real*8 distances + integer indexes + integer size + real*8 lat,lon + integer mode=0 + integer count + character*200 filenames + dimension filenames(5) + integer in + + nfiles=argc-1; + filenames=(char**)malloc(sizeof(char*)*nfiles); + for (i=0;i /dev/null diff --git a/examples/F90/copy_message.f90 b/examples/F90/copy_message.f90 new file mode 100644 index 000000000..a24105034 --- /dev/null +++ b/examples/F90/copy_message.f90 @@ -0,0 +1,54 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: how to copy a message in memory +! +! +! +program copy + use grib_api + implicit none + integer :: err, centre + integer(kind=kindOfSize) :: byte_size + integer :: infile,outfile + integer :: igrib_in,iret + integer :: igrib_out + character(len=1), dimension(:), allocatable :: message + + + call grib_open_file(infile,'../../data/constant_field.grib1','r') + call grib_open_file(outfile,'out.grib1','w') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib_in) + + call grib_get_message_size(igrib_in, byte_size) + allocate(message(byte_size), stat=err) + + call grib_copy_message(igrib_in,message) + + call grib_new_from_message(igrib_out, message) + + centre=80 + call grib_set(igrib_out,"centre",centre) + +! write messages to a file + call grib_write(igrib_out,outfile) + + call grib_release(igrib_out) + + call grib_release(igrib_in) + + call grib_close_file(infile) + call grib_close_file(outfile) + deallocate(message) + +end program copy diff --git a/examples/F90/copy_message.sh b/examples/F90/copy_message.sh new file mode 100755 index 000000000..1ba6b6aaa --- /dev/null +++ b/examples/F90/copy_message.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}copy_message > /dev/null diff --git a/examples/F90/copy_namespace.f90 b/examples/F90/copy_namespace.f90 new file mode 100644 index 000000000..066cc8666 --- /dev/null +++ b/examples/F90/copy_namespace.f90 @@ -0,0 +1,37 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: how to copy a namespace from a message to another. +! +! +program copy_namespace + use grib_api + implicit none + integer :: file1, file2, file3 + integer :: igrib1,igrib2,igrib3 + + call grib_open_file(file1,'../../data/reduced_latlon_surface.grib2','r') + call grib_open_file(file2,'../../data/regular_latlon_surface.grib1','r') + call grib_open_file(file3,'out.grib','w') + + call grib_new_from_file(file1,igrib1) + call grib_new_from_file(file2,igrib2) + + call grib_clone(igrib2,igrib3) + + call grib_copy_namespace(igrib1,'geography',igrib3) + + call grib_write(igrib3,file3) + + call grib_close_file(file1) + call grib_close_file(file2) + call grib_close_file(file3) + +end program copy_namespace diff --git a/examples/F90/count_messages.f90 b/examples/F90/count_messages.f90 new file mode 100644 index 000000000..5a89316cb --- /dev/null +++ b/examples/F90/count_messages.f90 @@ -0,0 +1,110 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! Description: count messages before processing +! +! +program get + use grib_api + implicit none + + integer :: ifile + integer :: iret + integer :: n + integer :: i + integer,dimension(:),allocatable :: igrib + real :: latitudeOfFirstPointInDegrees + real :: longitudeOfFirstPointInDegrees + real :: latitudeOfLastPointInDegrees + real :: longitudeOfLastPointInDegrees + integer :: numberOfPointsAlongAParallel + integer :: numberOfPointsAlongAMeridian + real, dimension(:), allocatable :: values + integer :: numberOfValues + real :: average,min_val, max_val + + call grib_open_file(ifile, & + '../../data/tigge_pf_ecmwf.grib2','r') + + ! count the messages in the file + call grib_count_in_file(ifile,n) + allocate(igrib(n)) + igrib=-1 + + ! Load the messages from the file. + DO i=1,n + call grib_new_from_file(ifile,igrib(i), iret) + END DO + + ! we can close the file + call grib_close_file(ifile) + + ! Loop on all the messages in memory + DO i=1,n + write(*,*) 'processing message number ',i + ! get as a integer + call grib_get(igrib(i),'Ni',numberOfPointsAlongAParallel) + write(*,*) 'numberOfPointsAlongAParallel=', & + numberOfPointsAlongAParallel + + ! get as a integer + call grib_get(igrib(i),'Nj',numberOfPointsAlongAMeridian) + write(*,*) 'numberOfPointsAlongAMeridian=', & + numberOfPointsAlongAMeridian + + ! get as a real + call grib_get(igrib(i), 'latitudeOfFirstGridPointInDegrees', & + latitudeOfFirstPointInDegrees) + write(*,*) 'latitudeOfFirstGridPointInDegrees=', & + latitudeOfFirstPointInDegrees + + ! get as a real + call grib_get(igrib(i), 'longitudeOfFirstGridPointInDegrees', & + longitudeOfFirstPointInDegrees) + write(*,*) 'longitudeOfFirstGridPointInDegrees=', & + longitudeOfFirstPointInDegrees + + ! get as a real + call grib_get(igrib(i), 'latitudeOfLastGridPointInDegrees', & + latitudeOfLastPointInDegrees) + write(*,*) 'latitudeOfLastGridPointInDegrees=', & + latitudeOfLastPointInDegrees + + ! get as a real + call grib_get(igrib(i), 'longitudeOfLastGridPointInDegrees', & + longitudeOfLastPointInDegrees) + write(*,*) 'longitudeOfLastGridPointInDegrees=', & + longitudeOfLastPointInDegrees + + + ! get the size of the values array + call grib_get_size(igrib(i),'values',numberOfValues) + write(*,*) 'numberOfValues=',numberOfValues + + allocate(values(numberOfValues), stat=iret) + ! get data values + call grib_get(igrib(i),'values',values) + call grib_get(igrib(i),'min',min_val) ! can also be obtained through minval(values) + call grib_get(igrib(i),'max',max_val) ! can also be obtained through maxval(values) + call grib_get(igrib(i),'average',average) ! can also be obtained through maxval(values) + + write(*,*)'There are ',numberOfValues, & + ' average is ',average, & + ' min is ', min_val, & + ' max is ', max_val + write(*,*) '---------------------' + END DO + + DO i=1,n + call grib_release(igrib(i)) + END DO + + deallocate(values) + deallocate(igrib) + +end program get diff --git a/examples/F90/count_messages.sh b/examples/F90/count_messages.sh new file mode 100755 index 000000000..4cef9fce0 --- /dev/null +++ b/examples/F90/count_messages.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}count_messages > /dev/null diff --git a/examples/F90/get.f90 b/examples/F90/get.f90 new file mode 100644 index 000000000..fa7906306 --- /dev/null +++ b/examples/F90/get.f90 @@ -0,0 +1,123 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: how to get values using keys. +! +! +program get + use grib_api + implicit none + + integer :: ifile + integer :: iret + integer :: igrib + real :: latitudeOfFirstPointInDegrees + real :: longitudeOfFirstPointInDegrees + real :: latitudeOfLastPointInDegrees + real :: longitudeOfLastPointInDegrees + integer :: numberOfPointsAlongAParallel + integer :: numberOfPointsAlongAMeridian + real, dimension(:), allocatable :: values + integer :: numberOfValues + real :: average,min_val, max_val + integer :: is_missing, is_defined + + call grib_open_file(ifile, & + '../../data/reduced_latlon_surface.grib1','r') + + ! Loop on all the messages in a file. + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(ifile,igrib, iret) + + LOOP: DO WHILE (iret /= GRIB_END_OF_FILE) + + !check if the value of the key is MISSING + is_missing=0; + call grib_is_missing(igrib,'Ni',is_missing); + if ( is_missing /= 1 ) then + ! get as a integer + call grib_get(igrib,'Ni',numberOfPointsAlongAParallel) + write(*,*) 'numberOfPointsAlongAParallel=', & + numberOfPointsAlongAParallel + else + write(*,*) 'numberOfPointsAlongAParallel is missing' + endif + + !check for existence of keys + is_defined=0; + call grib_is_defined(igrib,'edition',is_defined); + if ( is_defined == 0 ) then + write(0,*) 'ERROR: An expected key was not defined!!' + call exit(1) + endif + call grib_is_defined(igrib,'ThisIsNoLoveSong',is_defined); + if ( is_defined == 1 ) then + write(0,*) 'ERROR: An unexpected key was defined!!' + call exit(1) + endif + + ! get as a integer + call grib_get(igrib,'Nj',numberOfPointsAlongAMeridian) + write(*,*) 'numberOfPointsAlongAMeridian=', & + numberOfPointsAlongAMeridian + + ! get as a real + call grib_get(igrib, 'latitudeOfFirstGridPointInDegrees', & + latitudeOfFirstPointInDegrees) + write(*,*) 'latitudeOfFirstGridPointInDegrees=', & + latitudeOfFirstPointInDegrees + + ! get as a real + call grib_get(igrib, 'longitudeOfFirstGridPointInDegrees', & + longitudeOfFirstPointInDegrees) + write(*,*) 'longitudeOfFirstGridPointInDegrees=', & + longitudeOfFirstPointInDegrees + + ! get as a real + call grib_get(igrib, 'latitudeOfLastGridPointInDegrees', & + latitudeOfLastPointInDegrees) + write(*,*) 'latitudeOfLastGridPointInDegrees=', & + latitudeOfLastPointInDegrees + + ! get as a real + call grib_get(igrib, 'longitudeOfLastGridPointInDegrees', & + longitudeOfLastPointInDegrees) + write(*,*) 'longitudeOfLastGridPointInDegrees=', & + longitudeOfLastPointInDegrees + + + ! get the size of the values array + call grib_get_size(igrib,'values',numberOfValues) + write(*,*) 'numberOfValues=',numberOfValues + + allocate(values(numberOfValues), stat=iret) + ! get data values + call grib_get(igrib,'values',values) + call grib_get(igrib,'min',min_val) ! can also be obtained through minval(values) + call grib_get(igrib,'max',max_val) ! can also be obtained through maxval(values) + call grib_get(igrib,'average',average) ! can also be obtained through maxval(values) + + deallocate(values) + + write(*,*)'There are ',numberOfValues, & + ' average is ',average, & + ' min is ', min_val, & + ' max is ', max_val + + call grib_release(igrib) + + call grib_new_from_file(ifile,igrib, iret) + + end do LOOP + + call grib_close_file(ifile) + +end program get diff --git a/examples/F90/get.sh b/examples/F90/get.sh new file mode 100755 index 000000000..12f2dd6e8 --- /dev/null +++ b/examples/F90/get.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}get > /dev/null diff --git a/examples/F90/get_data.f90 b/examples/F90/get_data.f90 new file mode 100644 index 000000000..83bbbb656 --- /dev/null +++ b/examples/F90/get_data.f90 @@ -0,0 +1,67 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: how to get lat/lon/values. +! +! +! +program get_data +use grib_api +implicit none + integer :: ifile + integer :: iret,i + real(kind=8),dimension(:),allocatable :: lats,lons,values + integer(4) :: numberOfPoints + real(8) :: missingValue=9999 + integer :: count1=0 + character(len=256) :: filename + +! Message identifier. + integer :: igrib + + ifile=5 + + call grib_open_file(ifile, & + '../../data/reduced_latlon_surface.grib1','R') + +! Loop on all the messages in a file. + + call grib_new_from_file(ifile,igrib,iret) + + do while (iret/=GRIB_END_OF_FILE) + count1=count1+1 + print *, "===== Message #",count1 + call grib_get(igrib,'numberOfPoints',numberOfPoints) + call grib_set(igrib,'missingValue',missingValue) + + allocate(lats(numberOfPoints)) + allocate(lons(numberOfPoints)) + allocate(values(numberOfPoints)) + + call grib_get_data(igrib,lats,lons,values) + + do i=1,numberOfPoints + if (values(i) /= missingValue) then + print *, lats(i),lons(i),values(i) + end if + enddo + + deallocate(lats) + deallocate(lons) + deallocate(values) + + call grib_release(igrib) + call grib_new_from_file(ifile,igrib, iret) + + end do + + + call grib_close_file(ifile) + +end program diff --git a/examples/F90/get_data.sh b/examples/F90/get_data.sh new file mode 100755 index 000000000..dbf74b01b --- /dev/null +++ b/examples/F90/get_data.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}get_data > /dev/null diff --git a/examples/F90/get_fortran.f90 b/examples/F90/get_fortran.f90 new file mode 100644 index 000000000..47bf123a5 --- /dev/null +++ b/examples/F90/get_fortran.f90 @@ -0,0 +1,115 @@ +! +! Description: how to get values using keys. +! +! +! Copyright: See COPYING file that comes with this distribution +! +! +program get +use grib_api +implicit none + + integer :: ifile + integer :: iret + integer :: igrib + integer :: i + real(kind=8) :: latitudeOfFirstPointInDegrees + real(kind=8) :: longitudeOfFirstPointInDegrees + real(kind=8) :: latitudeOfLastPointInDegrees + real(kind=8) :: longitudeOfLastPointInDegrees + real(kind=8) :: jDirectionIncrementInDegrees + real(kind=8) :: iDirectionIncrementInDegrees + integer(kind = 4) :: numberOfPointsAlongAParallel + integer(kind = 4) :: numberOfPointsAlongAMeridian + real(kind=8), dimension(:), allocatable :: values + integer(kind = 4) :: numberOfValues + real(kind=8) :: average + character(len = 256) :: error + + call grib_open_file(ifile, & + '../../data/reduced_latlon_surface.grib1','r') + +! a new grib message is loaded from file +! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(ifile,igrib) + +! get as a integer + call grib_get(igrib,'numberOfPointsAlongAParallel', & + numberOfPointsAlongAParallel) + write(*,*) 'numberOfPointsAlongAParallel=', & + numberOfPointsAlongAParallel + +! get as a integer + call grib_get(igrib,'numberOfPointsAlongAMeridian', & + numberOfPointsAlongAMeridian) + write(*,*) 'numberOfPointsAlongAMeridian=', & + numberOfPointsAlongAMeridian + +! get as a real8 +call grib_get(igrib, & + 'latitudeOfFirstGridPointInDegrees', & + latitudeOfFirstPointInDegrees) +write(*,*) 'latitudeOfFirstGridPointInDegrees=', & + latitudeOfFirstPointInDegrees + +! get as a real8 + call grib_get(igrib, & + 'longitudeOfFirstGridPointInDegrees', & + longitudeOfFirstPointInDegrees) + write(*,*) 'longitudeOfFirstGridPointInDegrees=', & + longitudeOfFirstPointInDegrees + +! get as a real8 + call grib_get(igrib, & + 'latitudeOfLastGridPointInDegrees', & + latitudeOfLastPointInDegrees) + write(*,*) 'latitudeOfLastGridPointInDegrees=', & + latitudeOfLastPointInDegrees + +! get as a real8 + call grib_get(igrib, & + 'longitudeOfLastGridPointInDegrees', & + longitudeOfLastPointInDegrees) + write(*,*) 'longitudeOfLastGridPointInDegrees=', & + longitudeOfLastPointInDegrees + +! get as a real8 + call grib_get(igrib, & + 'jDirectionIncrementInDegrees', & + jDirectionIncrementInDegrees) + write(*,*) 'jDirectionIncrementInDegrees=', & + jDirectionIncrementInDegrees + +! get as a real8 + call grib_get(igrib, & + 'iDirectionIncrementInDegrees', & + iDirectionIncrementInDegrees) + write(*,*) 'iDirectionIncrementInDegrees=', & + iDirectionIncrementInDegrees + +! get the size of the values array + call grib_get_size(igrib,'values',numberOfValues) + write(*,*) 'numberOfValues=',numberOfValues + + allocate(values(2*numberOfValues), stat=iret) +! get data values + print*, size(values) + call grib_get(igrib,'values',values) + + + average = 0 + do i=1,numberOfValues + average = average + values(i); + enddo + + average =average / numberOfValues + + write(*,*)'There are ',numberOfValues, & + ' average is ',average + + call grib_release(igrib) + + call grib_close_file(ifile) + + deallocate(values) +end program get diff --git a/examples/F90/get_pl.f90 b/examples/F90/get_pl.f90 new file mode 100644 index 000000000..3d35e8684 --- /dev/null +++ b/examples/F90/get_pl.f90 @@ -0,0 +1,47 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: how to get PL values. +! +! +! +program get_pl + use grib_api + implicit none + integer :: infile + integer :: igrib + integer :: PLPresent, nb_pl + real, dimension(:), allocatable :: pl + + + call grib_open_file(infile, & + '../../data/reduced_gaussian_surface.grib1','r') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib) + + ! set PVPresent as an integer + call grib_get(igrib,'PLPresent',PLPresent) + print*, "PLPresent= ", PLPresent + if (PLPresent == 1) then + call grib_get_size(igrib,'pl',nb_pl) + print*, "there are ", nb_pl, " PL values" + allocate(pl(nb_pl)) + call grib_get(igrib,'pl',pl) + print*, "pl = ", pl + deallocate(pl) + else + print*, "There is no PL values in your GRIB message!" + end if + call grib_release(igrib) + + call grib_close_file(infile) + +end program get_pl diff --git a/examples/F90/get_pl.sh b/examples/F90/get_pl.sh new file mode 100755 index 000000000..a250aebbf --- /dev/null +++ b/examples/F90/get_pl.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}get_pl > /dev/null diff --git a/examples/F90/get_pv.f90 b/examples/F90/get_pv.f90 new file mode 100644 index 000000000..e451f8c04 --- /dev/null +++ b/examples/F90/get_pv.f90 @@ -0,0 +1,48 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: how to get PV values. +! +! +! +program get_pv + use grib_api + implicit none + integer :: infile + integer :: igrib + integer :: PVPresent, nb_pv + real, dimension(:), allocatable :: pv + + + call grib_open_file(infile, & + '../../data/reduced_gaussian_model_level.grib1','r') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib) + + ! set PVPresent as an integer + call grib_get(igrib,'PVPresent',PVPresent) + print*, "PVPresent = ", PVPresent + if (PVPresent == 1) then + call grib_get_size(igrib,'pv',nb_pv) + print*, "There are ", nb_pv, " PV values" + allocate(pv(nb_pv)) + call grib_get(igrib,'pv',pv) + print*, "pv = ", pv + deallocate(pv) + else + print*, "There is no PV values in your GRIB message!" + end if + call grib_release(igrib) + + call grib_close_file(infile) + +end program get_pv diff --git a/examples/F90/get_pv.sh b/examples/F90/get_pv.sh new file mode 100755 index 000000000..cd469be38 --- /dev/null +++ b/examples/F90/get_pv.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}get_pv > /dev/null diff --git a/examples/F90/include.sh b/examples/F90/include.sh new file mode 100755 index 000000000..e30b6878b --- /dev/null +++ b/examples/F90/include.sh @@ -0,0 +1,45 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +set -ea + +echo +echo "TEST: $0" + +if [ -z "${data_dir}" ] +then + cd ../../ + cpath=`pwd` + GRIB_DEFINITION_PATH=$cpath/definitions + export GRIB_DEFINITION_PATH + GRIB_SAMPLES_PATH=$cpath/samples + export GRIB_SAMPLES_PATH + tools_dir=$cpath/tools/ + examples_dir=$cpath/examples/F90/ + data_dir=$cpath/data + samples_dir=$cpath/samples +else + echo "Skipping test $0" + exit +fi + +cd ${examples_dir} + +if [ -z "${GRIB_API_INCLUDE}" ] +then + GRIB_API_INCLUDE=`pwd`/src +fi + +if [ -z "${GRIB_API_LIB}" ] +then + GRIB_API_LIB=`pwd`/src +fi + +#${tools_dir}grib_info + +set -u + diff --git a/examples/F90/index.f90 b/examples/F90/index.f90 new file mode 100644 index 000000000..8b6208532 --- /dev/null +++ b/examples/F90/index.f90 @@ -0,0 +1,114 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: How to create and use and index to access messages from a file. +! Demo also loading and writing an index from a file. +! +! +! +program index + use grib_api + implicit none + + integer :: iret + character(len = 256) :: error + integer,dimension(:),allocatable :: step,level,number + character(len=20),dimension(:),allocatable :: shortName + integer :: ostep,olevel,onumber + character(len=20) :: oshortName + integer :: shortNameSize,numberSize,levelSize,stepSize + integer :: i,j,k,l + integer :: idx,igrib,count1 + logical :: index_exists + character(len=10) :: index_file='index.idx' + + ! uncomment following line to load index from file + !call grib_index_read(idx,index_file) + + ! create an index from a grib file using some keys + call grib_index_create(idx,'../../data/index.grib','shortName,number,level,step') + + ! get the number of distinct values of shortName in the index + call grib_index_get_size(idx,'shortName',shortNameSize) + ! allocate the array to contain the list of distinct shortName + allocate(shortName(shortNameSize)) + ! get the list of distinct shortName from the index + call grib_index_get(idx,'shortName',shortName) + write(*,'(a,i3)') 'shortNameSize=',shortNameSize + + ! get the number of distinct values of number in the index + call grib_index_get_size(idx,'number',numberSize) + ! allocate the array to contain the list of distinct numbers + allocate(number(numberSize)) + ! get the list of distinct numbers from the index + call grib_index_get(idx,'number',number) + write(*,'(a,i3)') 'numberSize=',numberSize + + ! get the number of distinct values of level in the index + call grib_index_get_size(idx,'level',levelSize) + ! allocate the array to contain the list of distinct levels + allocate(level(levelSize)) + ! get the list of distinct levels from the index + call grib_index_get(idx,'level',level) + write(*,'(a,i3)') 'levelSize=',levelSize + + ! get the number of distinct values of step in the index + call grib_index_get_size(idx,'step',stepSize) + ! allocate the array to contain the list of distinct steps + allocate(step(stepSize)) + ! get the list of distinct steps from the index + call grib_index_get(idx,'step',step) + write(*,'(a,i3)') 'stepSize=',stepSize + + count1=0 + do l=1,stepSize ! loop on step + ! select step=step(l) + call grib_index_select(idx,'step',step(l)) + + do j=1,numberSize ! loop on number + ! select number=number(j) + call grib_index_select(idx,'number',number(j)) + + do k=1,levelSize ! loop on level + ! select level=level(k) + call grib_index_select(idx,'level',level(k)) + + do i=1,shortNameSize ! loop on shortName + ! select shortName=shortName(i) + call grib_index_select(idx,'shortName',shortName(i)) + + call grib_new_from_index(idx,igrib, iret) + do while (iret /= GRIB_END_OF_INDEX) + count1=count1+1 + call grib_get(igrib,'shortName',oshortName) + call grib_get(igrib,'number',onumber) + call grib_get(igrib,'level',olevel) + call grib_get(igrib,'step',ostep) + write(*,'(A,A,A,i3,A,i4,A,i3)') 'shortName=',trim(oshortName),& + ' number=',onumber,& + ' level=' ,olevel, & + ' step=' ,ostep + + call grib_release(igrib) + call grib_new_from_index(idx,igrib, iret) + end do + call grib_release(igrib) + + end do ! loop on step + end do ! loop on level + end do ! loop on number + end do ! loop on shortName + write(*,'(i4,a)') count1,' messages selected' + + ! save the index to a file for later reuse + call grib_index_write(idx,index_file) + + call grib_index_release(idx) + +end program index diff --git a/examples/F90/index.sh b/examples/F90/index.sh new file mode 100755 index 000000000..eac7ee71b --- /dev/null +++ b/examples/F90/index.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +# if an index file does not exist then +# create index and save to disk +${examples_dir}index > index_f90.out +diff index_f90.out ${data_dir}/index_f90.ok + +# if an index file exists then load the index from it +${examples_dir}index > index_f90.out +diff index_f90.out ${data_dir}/index_f90.ok diff --git a/examples/F90/iterator_fortran.f90 b/examples/F90/iterator_fortran.f90 new file mode 100644 index 000000000..496ff2460 --- /dev/null +++ b/examples/F90/iterator_fortran.f90 @@ -0,0 +1,71 @@ +! +! +! Description: how to use an iterator on lat/lon/values. +! +! +! +! Copyright: See COPYING file that comes with this distribution +! +! +program iterator +use grib_api +implicit none + integer :: ifile + integer :: iret,iter + real(kind=8) :: lat,lon,value,missingValue + integer :: n,flags + character(len=256) :: filename + character(len=256) :: error + +! Message identifier. + integer :: igrib + + ifile=5 + + call grib_open_file(ifile, & + '../../data/regular_latlon_surface_constant.grib1','R') + +! Loop on all the messages in a file. + + call grib_new_from_file(ifile,igrib,iret) + + LOOP: DO WHILE (iret/=GRIB_END_OF_FILE) +! get as a real8 + call grib_get(igrib, & + 'missingValue',missingValue) + write(*,*) 'missingValue=',missingValue + +! A new iterator on lat/lon/values is created from the message igrib + flags = 0 + call grib_iterator_new(igrib,iter,flags) + + n = 0 +! Loop on all the lat/lon/values. + call grib_iterator_next(iter,lat,lon,value, iret) + do while (iret .ne. 0) +! You can now print lat and lon, + if ( value .eq. missingValue ) then +! decide what to print if a missing value is found. + write(*,*) "- ",n," - lat=",lat," lon=",lon," value=missing" + else +! or print the value if is not missing. + write(*,*) " ",n," lat=",lat," lon=",lon," value=",value + endif + + n=n+1 + + call grib_iterator_next(iter,lat,lon,value, iret) + end do + +! At the end the iterator is deleted to free memory. + call grib_iterator_delete(iter) + call grib_release(igrib) + + call grib_new_from_file(ifile,igrib, iret) + + end do LOOP + + + call grib_close_file(ifile) + + end program iterator diff --git a/examples/F90/keys_iterator.f90 b/examples/F90/keys_iterator.f90 new file mode 100644 index 000000000..98731f036 --- /dev/null +++ b/examples/F90/keys_iterator.f90 @@ -0,0 +1,64 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: +! How to use keys_iterator to get all the available +! keys in a message. +! +! +! +program keys_iterator + use grib_api + implicit none + character(len=20) :: name_space + integer :: kiter,ifile,igrib,iret + character(len=256) :: key + character(len=256) :: value + character(len=512) :: all1 + integer :: grib_count + + call grib_open_file(ifile, & + '../../data/regular_latlon_surface.grib1','r') + + ! Loop on all the messages in a file. + + call grib_new_from_file(ifile,igrib, iret) + + do while (iret /= GRIB_END_OF_FILE) + + grib_count=grib_count+1 + write(*,*) '-- GRIB N. ',grib_count,' --' + + ! valid name_spaces are ls and mars + name_space='ls' + + call grib_keys_iterator_new(igrib,kiter,name_space) + + do + call grib_keys_iterator_next(kiter, iret) + + if (iret .ne. 1) exit + + call grib_keys_iterator_get_name(kiter,key) + call grib_get(igrib,trim(key),value) + all1=trim(key)// ' = ' // trim(value) + write(*,*) trim(all1) + + end do + + call grib_keys_iterator_delete(kiter) + call grib_release(igrib) + call grib_new_from_file(ifile,igrib, iret) + end do + + + call grib_close_file(ifile) + +end program keys_iterator + diff --git a/examples/F90/keys_iterator.sh b/examples/F90/keys_iterator.sh new file mode 100755 index 000000000..7c217e572 --- /dev/null +++ b/examples/F90/keys_iterator.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}keys_iterator > /dev/null diff --git a/examples/F90/keys_iterator_fortran.f90 b/examples/F90/keys_iterator_fortran.f90 new file mode 100644 index 000000000..340954ef8 --- /dev/null +++ b/examples/F90/keys_iterator_fortran.f90 @@ -0,0 +1,68 @@ +! +! +! Description: +! Example on how to use keys_iterator functions and the +! grib_keys_iterator structure to get all the available +! keys in a message. +! +! +! Copyright: See COPYING file that comes with this distribution +! +! +program keys_iterator + use grib_api + implicit none + integer :: kiter,ifile,igrib,iret + character(len=256) :: key + character(len=256) :: value + character(len=2048) :: all + integer :: len,strlen + integer :: grib_count + len=256 + + ifile=5 + + call grib_open_file(ifile, & + '../../data/regular_latlon_surface.grib1','r') + + grib_count=0 + ! Loop on all the messages in a file. + + call grib_new_from_file(ifile,igrib) + + do while (igrib .ne. -1) + + grib_count=grib_count+1 + write(*,'("-- GRIB N.",I4," --")') grib_count + + ! valid name_spaces are ls and mars + call grib_keys_iterator_new(igrib,kiter,'ls') + + if (kiter .eq. -1) then + print *, 'invalid key iterator' + endif + + do + + call grib_keys_iterator_next(kiter, iret) + + if (iret .eq. 0) exit + + call grib_keys_iterator_get_name(kiter,key) + + call grib_get(igrib,key,value) + all='|'//trim(key)//'|'//' = '//'|'//trim(value)//'|' + write(*,*) trim(all) + + end do + + call grib_keys_iterator_delete(kiter) + call grib_release(igrib) + call grib_new_from_file(ifile,igrib, iret) + end do + + + call grib_close_file(ifile) + +end program keys_iterator + diff --git a/examples/F90/multi.f90 b/examples/F90/multi.f90 new file mode 100644 index 000000000..e70cddbaa --- /dev/null +++ b/examples/F90/multi.f90 @@ -0,0 +1,50 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: How to decode grib messages containing multiple +! fields. Try to turn on and off multi support to +! see the difference. Default is OFF. +! For all the tools default is multi support ON. +! +! +! +! +program multi + use grib_api + implicit none + + integer :: iret + character(len = 256) :: error + integer(kind = 4) :: step + integer :: ifile,igrib + + call grib_open_file(ifile, '../../data/multi_created.grib2','r') + + ! turn on support for multi fields messages */ + call grib_multi_support_on() + + ! turn off support for multi fields messages */ + !call grib_multi_support_off() + + call grib_new_from_file(ifile,igrib, iret) + ! Loop on all the messages in a file. + + write(*,*) 'step' + do while (iret /= GRIB_END_OF_FILE) + + call grib_get(igrib,'step', step) + write(*,'(i3)') step + + call grib_new_from_file(ifile,igrib, iret) + + end do + call grib_close_file(ifile) + +end program multi + diff --git a/examples/F90/multi.sh b/examples/F90/multi.sh new file mode 100755 index 000000000..0499bf74d --- /dev/null +++ b/examples/F90/multi.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}multi > multi.out +diff multi.out ${data_dir}/multi.ok diff --git a/examples/F90/multi_fortran.f90 b/examples/F90/multi_fortran.f90 new file mode 100644 index 000000000..6b4aae1ae --- /dev/null +++ b/examples/F90/multi_fortran.f90 @@ -0,0 +1,69 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: How to decode grib messages containing multiple +! fields. Try to turn on and off multi support to +! see the difference. Default is OFF. +! For all the tools default is multi support ON. +! +! +program multi + use grib_api + implicit none + + integer :: iret + character(len = 256) :: error + integer(kind = 4) :: parameterCategory,parameterNumber,discipline + integer :: ifile,igrib + + call grib_open_file(ifile, & + '../../data/multi.grib2','r') + + ! turn on support for multi fields messages */ + call grib_multi_support_on() + + ! turn off support for multi fields messages */ + ! call grib_multi_support_off() + + call grib_new_from_file(ifile,igrib) + ! Loop on all the messages in a file. + + do while (igrib .ne. -1) + + ! get as a integer*4 + call grib_get(igrib,'discipline',discipline) + write(*,*) 'discipline=',discipline + + ! get as a integer*4 + call grib_get(igrib,'parameterCategory', & + parameterCategory) + write(*,*) 'parameterCategory=',parameterCategory + + ! get as a integer*4 + call grib_get(igrib,'parameterNumber', & + parameterNumber) + write(*,*) 'parameterNumber=',parameterNumber + + if ( discipline .eq. 0 .and. parameterCategory .eq. 2) then + if (parameterNumber .eq. 2) then + write(*,*) "-------- u -------" + endif + if (parameterNumber .eq. 3) then + write(*,*) "-------- v -------" + endif + endif + + call grib_release(igrib) + call grib_new_from_file(ifile,igrib, iret) + + end do + call grib_close_file(ifile) + +end program multi + diff --git a/examples/F90/multi_write.f90 b/examples/F90/multi_write.f90 new file mode 100644 index 000000000..22172b9c6 --- /dev/null +++ b/examples/F90/multi_write.f90 @@ -0,0 +1,51 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: how to create a multi field message in memory and write +! it in a file. The multi field messages can be created +! only in grib edition 2. +! +! +! +program multi_write + use grib_api + implicit none + integer :: infile,outfile + integer :: in_gribid,iret + integer :: multi_gribid + integer :: step,startsection + + ! multi field messages can be created only in edition 2 + call grib_open_file(infile,'../../data/sample.grib2','r') + + call grib_open_file(outfile,'multi_created.grib2','w') + + ! a grib message is loaded from file + ! in_gribid is the grib id to be used in subsequent calls + call grib_new_from_file(infile,in_gribid) + + startsection=4 + do step=0,240,12 + + call grib_set(in_gribid,"step",step) + call grib_multi_append(in_gribid,startsection,multi_gribid) + + enddo + +! write messages to a file + call grib_multi_write(multi_gribid,outfile) + + call grib_release(in_gribid) + call grib_release(multi_gribid) + + call grib_close_file(infile) + call grib_close_file(outfile) + +end program multi_write diff --git a/examples/F90/multi_write.sh b/examples/F90/multi_write.sh new file mode 100755 index 000000000..42f85fac8 --- /dev/null +++ b/examples/F90/multi_write.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}multi_write > /dev/null + +${tools_dir}/grib_cmp ${data_dir}/multi_created.grib2 multi_created.grib2 + +# rm -f multi_created.grib2 + diff --git a/examples/F90/nearest.f90 b/examples/F90/nearest.f90 new file mode 100644 index 000000000..57f8ca15f --- /dev/null +++ b/examples/F90/nearest.f90 @@ -0,0 +1,81 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: how to use grib_find_nearest and grib_get_element +! +! +! +! +program find + use grib_api + implicit none + integer :: npoints + integer :: infile + integer :: igrib, ios, i + real(8), dimension(:), allocatable :: lats, lons + real(8), dimension(:), allocatable :: nearest_lats, nearest_lons + real(8), dimension(:), allocatable :: distances, values, lsm_values + integer(kind=kindOfInt), dimension(:), allocatable :: indexes + real(kind=8) :: value + +! initialization + open( unit=1, file="../../data/list_points",form="formatted",action="read") + read(unit=1,fmt=*) npoints + allocate(lats(npoints)) + allocate(lons(npoints)) + allocate(nearest_lats(npoints)) + allocate(nearest_lons(npoints)) + allocate(distances(npoints)) + allocate(lsm_values(npoints)) + allocate(values(npoints)) + allocate(indexes(npoints)) + do i=1,npoints + read(unit=1,fmt=*, iostat=ios) lats(i), lons(i) + if (ios /= 0) then + npoints = i - 1 + exit + end if + end do + close(unit=1) + call grib_open_file(infile, & + '../../data/reduced_gaussian_lsm.grib1','r') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib) + + + call grib_find_nearest(igrib, .true., lats, lons, nearest_lats, nearest_lons,lsm_values, distances, indexes) + call grib_release(igrib) + + call grib_close_file(infile) + +! will apply it to another GRIB + call grib_open_file(infile, & + '../../data/reduced_gaussian_pressure_level.grib1','r') + call grib_new_from_file(infile,igrib) + + call grib_get_element(igrib,"values", indexes, values) + call grib_release(igrib) + call grib_close_file(infile) + + do i=1, npoints + print*,lats(i), lons(i), nearest_lats(i), nearest_lons(i), distances(i), lsm_values(i), values(i) + end do + + deallocate(lats) + deallocate(lons) + deallocate(nearest_lats) + deallocate(nearest_lons) + deallocate(distances) + deallocate(lsm_values) + deallocate(values) + deallocate(indexes) + +end program find diff --git a/examples/F90/nearest.sh b/examples/F90/nearest.sh new file mode 100755 index 000000000..c5a442e48 --- /dev/null +++ b/examples/F90/nearest.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}nearest > /dev/null diff --git a/examples/F90/new_from_file.f90 b/examples/F90/new_from_file.f90 new file mode 100644 index 000000000..ed70f1305 --- /dev/null +++ b/examples/F90/new_from_file.f90 @@ -0,0 +1,45 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! +! +program new_from_file +use grib_api + implicit none + integer :: ifile + integer :: iret + integer :: count1=0 + character(len=256) :: filename + +! Message identifier. + integer :: igrib + + ifile=5 + + call grib_open_file(ifile,'../../data/collection.grib1','r') + +! Loop on all the messages in a file. + + call grib_new_from_file(ifile,igrib, iret) + + do while (iret==GRIB_SUCCESS) + count1=count1+1 + print *, "===== Message #",count1 + call grib_new_from_file(ifile,igrib, iret) + + end do + if (iret /= GRIB_END_OF_FILE) then + call grib_check(iret,'new_from_file','') + endif + + + call grib_close_file(ifile) + +end program diff --git a/examples/F90/precision.f90 b/examples/F90/precision.f90 new file mode 100644 index 000000000..2ff85c0a2 --- /dev/null +++ b/examples/F90/precision.f90 @@ -0,0 +1,98 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! +! Description: how to control decimal precision when packing fields. +! +! +! +! +! +program precision + use grib_api + implicit none + integer(kind = 4) :: size1 + integer :: infile,outfile + integer :: igrib + real(kind = 8), dimension(:), allocatable :: values1 + real(kind = 8), dimension(:), allocatable :: values2 + real(kind = 8) :: maxa,a,maxv,minv,maxr,r + integer( kind = 4) :: decimalPrecision,bitsPerValue1,bitsPerValue2 + integer :: i, iret + + call grib_open_file(infile, & + '../../data/regular_latlon_surface_constant.grib1','r') + + call grib_open_file(outfile, & + '../../data/regular_latlon_surface_prec.grib1','w') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib) + + ! bitsPerValue before changing the packing parameters + call grib_get(igrib,'bitsPerValue',bitsPerValue1) + + ! get the size of the values array + call grib_get_size(igrib,"values",size1) + + allocate(values1(size1), stat=iret) + allocate(values2(size1), stat=iret) + ! get data values before changing the packing parameters*/ + call grib_get(igrib,"values",values1) + + ! setting decimal precision=2 means that 2 decimal digits + ! are preserved when packing. + decimalPrecision=2 + call grib_set(igrib,"changeDecimalPrecision", & + decimalPrecision) + + ! bitsPerValue after changing the packing parameters + call grib_get(igrib,"bitsPerValue",bitsPerValue2) + + ! get data values after changing the packing parameters + call grib_get(igrib,"values",values2) + + ! computing error + maxa=0 + maxr=0 + maxv=values2(1) + minv=maxv + do i=1,size1 + a=abs(values2(i)-values1(i)) + if ( values2(i) .gt. maxv ) maxv=values2(i) + if ( values2(i) .lt. maxv ) minv=values2(i) + if ( values2(i) .ne. 0 ) then + r=abs((values2(i)-values1(i))/values2(i)) + endif + if ( a .gt. maxa ) maxa=a + if ( r .gt. maxr ) maxr=r + enddo + write(*,*) "max absolute error = ",maxa + write(*,*) "max relative error = ",maxr + write(*,*) "min value = ",minv + write(*,*) "max value = ",maxv + + write(*,*) "old number of bits per value=",bitsPerValue1 + write(*,*) "new number of bits per value=",bitsPerValue2 + + ! write modified message to a file + call grib_write(igrib,outfile) + + call grib_release(igrib) + + call grib_close_file(infile) + + call grib_close_file(outfile) + + deallocate(values1) + deallocate(values2) +end program precision + diff --git a/examples/F90/precision.sh b/examples/F90/precision.sh new file mode 100755 index 000000000..7ef1aa800 --- /dev/null +++ b/examples/F90/precision.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}precision > /dev/null diff --git a/examples/F90/precision_fortran.f90 b/examples/F90/precision_fortran.f90 new file mode 100644 index 000000000..93d0741f9 --- /dev/null +++ b/examples/F90/precision_fortran.f90 @@ -0,0 +1,93 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: how to control decimal precision when packing fields. +! +! +program precision + use grib_api + implicit none + integer(kind = 4) :: size + integer :: infile,outfile + integer :: igrib + real(kind = 8), dimension(:), allocatable :: values1 + real(kind = 8), dimension(:), allocatable :: values2 + real(kind = 8) :: maxa,a,maxv,minv,maxr,r + integer( kind = 4) :: decimalPrecision,bitsPerValue1,bitsPerValue2 + integer :: i, iret + + call grib_open_file(infile, & + '../../data/regular_latlon_surface_constant.grib1','r') + + call grib_open_file(outfile, & + '../../data/regular_latlon_surface_prec.grib1','w') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib) + + ! bitsPerValue before changing the packing parameters + call grib_get(igrib,'bitsPerValue',bitsPerValue1) + + ! get the size of the values array + call grib_get_size(igrib,"values",size) + + allocate(values1(size), stat=iret) + allocate(values2(size), stat=iret) + ! get data values before changing the packing parameters*/ + call grib_get(igrib,"values",values1) + + ! setting decimal precision=2 means that 2 decimal digits + ! are preserved when packing. + decimalPrecision=2 + call grib_set(igrib,"setDecimalPrecision", & + decimalPrecision) + + ! bitsPerValue after changing the packing parameters + call grib_get(igrib,"bitsPerValue",bitsPerValue2) + + ! get data values after changing the packing parameters + call grib_get(igrib,"values",values2) + + ! computing error + maxa=0 + maxr=0 + maxv=values2(1) + minv=maxv + do i=1,size + a=abs(values2(i)-values1(i)) + if ( values2(i) .gt. maxv ) maxv=values2(i) + if ( values2(i) .lt. maxv ) minv=values2(i) + if ( values2(i) .ne. 0 ) then + r=abs((values2(i)-values1(i))/values2(i)) + endif + if ( a .gt. maxa ) maxa=a + if ( r .gt. maxr ) maxr=r + enddo + write(*,*) "max absolute error = ",maxa + write(*,*) "max relative error = ",maxr + write(*,*) "min value = ",minv + write(*,*) "max value = ",maxv + + write(*,*) "old number of bits per value=",bitsPerValue1 + write(*,*) "new number of bits per value=",bitsPerValue2 + + ! write modified message to a file + call grib_write(igrib,outfile) + + call grib_release(igrib) + + call grib_close_file(infile) + + call grib_close_file(outfile) + + deallocate(values1) + deallocate(values2) +end program precision + diff --git a/examples/F90/print_data.f90 b/examples/F90/print_data.f90 new file mode 100644 index 000000000..b4cc6d3b5 --- /dev/null +++ b/examples/F90/print_data.f90 @@ -0,0 +1,61 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: prints all the data contained in a grib file +! +! +! +program print_data +use grib_api +implicit none +integer :: ifile +integer :: iret +integer :: igrib +integer :: i +real(kind=8), dimension(:), allocatable :: values +integer(kind=4) :: numPoints +real(kind=8) :: average +real(kind=8) :: the_max +real(kind=8) :: the_min +character(len=256) :: error + +call grib_open_file(ifile, & + '../../data/constant_field.grib1','r') + +! a new grib message is loaded from file +! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(ifile,igrib) + +! get the size of the values array + call grib_get_size(igrib,'values',numPoints) + +! get data values + print*, 'number of points ', numPoints + allocate(values(numPoints), stat=iret) + + call grib_get(igrib,'values',values) + + do i=1,numPoints + write(*,*)' ',i,values(i) + enddo + + write(*,*)numPoints,' values found ' + + call grib_get(igrib,'max',the_max) + write(*,*) 'max=',the_max + call grib_get(igrib,'min',the_min) + write(*,*) 'min=',the_min + call grib_get(igrib,'average',average) + write(*,*) 'average=',average + + call grib_release(igrib) + call grib_close_file(ifile) + deallocate(values) + +end program print_data diff --git a/examples/F90/print_data.sh b/examples/F90/print_data.sh new file mode 100755 index 000000000..3ef6e397b --- /dev/null +++ b/examples/F90/print_data.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}print_data > /dev/null diff --git a/examples/F90/print_data_fortran.f90 b/examples/F90/print_data_fortran.f90 new file mode 100644 index 000000000..1c0dfe5c0 --- /dev/null +++ b/examples/F90/print_data_fortran.f90 @@ -0,0 +1,65 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! Fortran 90 Implementation: print_data_fortran +! +! Description: prints all the data contained in a grib file +! +! +! +program print_data_fortran +use grib_api +implicit none +integer :: ifile +integer :: iret +integer :: igrib +integer :: i +real(kind=8), dimension(:), allocatable :: values +integer(kind=4) :: numberOfValues +real(kind=8) :: average +real(kind=8) :: max +real(kind=8) :: min +character(len=256) :: error + +call grib_open_file(ifile, & + '../../data/constant_field.grib1','r') + +! a new grib message is loaded from file +! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(ifile,igrib) + + +! get the size of the values array + call grib_get(igrib,'numberOfValues',numberOfValues) + +! get data values + print*, 'number of values ', numberOfValues + allocate(values(numberOfValues), stat=iret) + + call grib_get(igrib,'values',values) + + do i=1,numberOfValues + write(*,*)' ',i,values(i) + enddo + + + write(*,*)numberOfValues,' values found ' + + call grib_get(igrib,'max',max) + write(*,*) 'max=',max + call grib_get(igrib,'min',min) + write(*,*) 'min=',min + call grib_get(igrib,'average',average) + write(*,*) 'average=',average + + call grib_release(igrib) + + call grib_close_file(ifile) + + deallocate(values) +end program print_data_fortran diff --git a/examples/F90/read_from_file.f90 b/examples/F90/read_from_file.f90 new file mode 100644 index 000000000..dc19ea0ea --- /dev/null +++ b/examples/F90/read_from_file.f90 @@ -0,0 +1,52 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +program read_from_file +use grib_api + implicit none + integer :: size,intsize + parameter (intsize=5000000,size=intsize*4) + integer :: ifile + integer :: iret + integer :: count1=0 + character(len=256) :: filename + integer(kind=4),dimension(intsize) :: buffer + !character,dimension(size) :: buffer + integer :: len1 + +! Message identifier. + integer :: igrib + + ifile=5 + + call grib_open_file(ifile,'../../data/collection.grib1','r') + +! Loop on all the messages in a file. + + len1=size + call grib_read_from_file(ifile,buffer,len1,iret) + ! call grib_new_from_file(ifile,igrib, iret) + + do while (iret==GRIB_SUCCESS) + count1=count1+1 + print *, '===== Message #',count1,' len=',len1 + len1=size + call grib_read_from_file(ifile,buffer,len1,iret) + ! call grib_new_from_file(ifile,igrib, iret) + + end do + + if (iret/=GRIB_END_OF_FILE) then + call grib_check(iret,'read_from_file','') + endif + + call grib_close_file(ifile) + +end program diff --git a/examples/F90/read_message.f90 b/examples/F90/read_message.f90 new file mode 100644 index 000000000..be77217cf --- /dev/null +++ b/examples/F90/read_message.f90 @@ -0,0 +1,53 @@ +! +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! Description: how to get values using keys. +! +program read_message +use grib_api +implicit none + integer :: ifile,ofile + integer :: iret,igrib + integer , dimension(50000) :: buffer + integer :: len1,step,level + + call grib_open_file(ifile,'../../data/index.grib','r') + call grib_open_file(ofile,'out.grib','w') + +! a grib message is read from file into buffer + len1=size(buffer)*4 + call grib_read_from_file(ifile,buffer,len1,iret) + + do while (iret/=GRIB_END_OF_FILE) + +! a new grib message is created from buffer + call grib_new_from_message(igrib,buffer) + +! get as a integer + call grib_get(igrib,'step', step) + write(*,*) 'step=',step + + call grib_get(igrib,'level',level) + write(*,*) 'level=',level + + call grib_release(igrib) + + call grib_write_bytes(ofile,buffer,len1) + +! a grib message is read from file into buffer + len1=size(buffer)*4 + call grib_read_from_file(ifile,buffer,len1,iret) + + enddo + + call grib_close_file(ifile) + call grib_close_file(ofile) + +end program read_message + diff --git a/examples/F90/read_message.sh b/examples/F90/read_message.sh new file mode 100755 index 000000000..e84c78c91 --- /dev/null +++ b/examples/F90/read_message.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +in=../../data/index.grib +out=out.grib + +rm -f $out | true + +${examples_dir}read_message > /dev/null + +${tools_dir}grib_compare $in $out + +rm -f $out + diff --git a/examples/F90/samples.f90 b/examples/F90/samples.f90 new file mode 100644 index 000000000..829df5396 --- /dev/null +++ b/examples/F90/samples.f90 @@ -0,0 +1,96 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! Description: how to create a new GRIB message from a sample. +! +! +program sample + use grib_api + implicit none + integer :: err + integer :: outfile, infile, datafile + integer :: igribsample,igribclone,igribdata, size1 + integer :: date1, startStep, endStep, table2Version, indicatorOfParameter + integer :: decimalPrecision + real :: missingValue + character(len=10) stepType + double precision, dimension(:), allocatable :: v1,v2,v + + date1 = 20080104 + startStep = 0 + endStep = 12 + stepType = 'accum' + table2Version = 2 + indicatorOfParameter = 61 + decimalPrecision = 2 + + ! a new grib message is loaded from an existing sample + ! samples are searched in a default sample path (use grib_info + ! to see where it is. The default sample path can be changed by + ! setting the environment variable GRIB_SAMPLES_PATH + call grib_new_from_samples(igribsample, "regular_latlon_surface.grib1") + + call grib_open_file(outfile, 'out.grib1','w') + call grib_open_file(datafile,'../../data/tp_ecmwf.grib','r') + + call grib_new_from_file(datafile,igribdata,err) + + call grib_get_size(igribdata,'values',size1) + allocate(v(size1)) + allocate(v1(size1)) + allocate(v2(size1)) + + call grib_get(igribdata,'values',v) + + v=v*1000.0 ! different units for the output grib + v1=v + + do while (err/=GRIB_END_OF_FILE) + + call grib_clone(igribsample,igribclone) ! clone sample before modifying it + + call grib_set(igribclone,'dataDate',date1) + call grib_set(igribclone,'table2Version',table2Version) + call grib_set(igribclone,'indicatorOfParameter',indicatorOfParameter) + + call grib_set(igribclone,'stepType',stepType) + call grib_set(igribclone,'startStep',startStep) + call grib_set(igribclone,'endStep',endStep) + + call grib_set(igribclone,'decimalPrecision',decimalPrecision) + + call grib_set(igribclone,'values',v) + + call grib_write(igribclone,outfile) + + call grib_new_from_file(datafile,igribdata,err) + + if (err==0) then + call grib_get(igribdata,'values',v2) + + v2=v2*1000.0 ! different units for the output grib + + v=v2-v1 ! accumulation from startStep to endStep + + v1=v2 ! save previous step field + + startStep=startStep+12 + endStep=endStep+12 + + endif + + enddo + + deallocate(v) + deallocate(v1) + deallocate(v2) + + call grib_close_file(outfile) + +end program sample diff --git a/examples/F90/samples.sh b/examples/F90/samples.sh new file mode 100755 index 000000000..803e7ee23 --- /dev/null +++ b/examples/F90/samples.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +# Take a GRIB file in the data folder and make it a sample file (extension .tmpl) +rm -f ${data_dir}/regular_latlon_surface.grib1.tmpl | true +cp ${data_dir}/regular_latlon_surface.grib1 ${data_dir}/regular_latlon_surface.grib1.tmpl + +# Change the GRIB_SAMPLES_PATH: put the data dir first +GRIB_SAMPLES_PATH=${data_dir}:${samples_dir} +export GRIB_SAMPLES_PATH +${examples_dir}samples > /dev/null + +# Extend the GRIB_SAMPLES_PATH: put the data dir second +GRIB_SAMPLES_PATH=${samples_dir}:${data_dir} +export GRIB_SAMPLES_PATH +${examples_dir}samples > /dev/null + diff --git a/examples/F90/set.f90 b/examples/F90/set.f90 new file mode 100644 index 000000000..be7868432 --- /dev/null +++ b/examples/F90/set.f90 @@ -0,0 +1,85 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: how to set key values. +! +! +! +! +program set + use grib_api + implicit none + integer(kind = 4) :: centre, date1 + integer :: infile,outfile + integer :: igrib + + + centre = 80 + call current_date(date1) + call grib_open_file(infile, & + '../../data/regular_latlon_surface_constant.grib1','r') + + call grib_open_file(outfile, & + 'out.grib1','w') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib) + + call grib_set(igrib,'dataDate',date1) + ! set centre as a integer */ + call grib_set(igrib,'centre',centre) + +! check if it is correct in the actual GRIB message + + call check_settings(igrib) + + ! write modified message to a file + call grib_write(igrib,outfile) + + call grib_release(igrib) + + call grib_close_file(infile) + + call grib_close_file(outfile) + +contains + +!====================================== +subroutine current_date(date1) +integer, intent(out) :: date1 + +integer :: val_date(8) +call date_and_time ( values = val_date) + +date1 = val_date(1)* 10000 + val_date(2)*100 + val_date(3) +end subroutine current_date +!====================================== +subroutine check_settings(gribid) + implicit none + integer, intent(in) :: gribid + + integer(kind = 4) :: int_value + character(len = 10) :: string_value + + ! get centre as a integer + call grib_get(gribid,'centre',int_value) + write(*,*) "get centre as a integer - centre = ",int_value + + ! get centre as a string + call grib_get(gribid,'centre',string_value) + write(*,*) "get centre as a string - centre = ",string_value + + ! get date as a string + call grib_get(gribid,'dataDate',string_value) + write(*,*) "get date as a string - date = ",string_value + +end subroutine check_settings +end program set diff --git a/examples/F90/set.sh b/examples/F90/set.sh new file mode 100755 index 000000000..da7c8ef5b --- /dev/null +++ b/examples/F90/set.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}set > /dev/null diff --git a/examples/F90/set_bitmap.f90 b/examples/F90/set_bitmap.f90 new file mode 100644 index 000000000..a31a974c3 --- /dev/null +++ b/examples/F90/set_bitmap.f90 @@ -0,0 +1,80 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: how to set a bitmap in a grib message +! +! +! +program set_bitmap + use grib_api + implicit none + integer :: infile,outfile + integer :: igrib, iret + integer :: numberOfValues + real, dimension(:), allocatable :: values + real :: missingValue + logical :: grib1Example + + grib1Example=.true. + + if (grib1Example) then + ! GRIB 1 example + call grib_open_file(infile,'../../data/regular_latlon_surface.grib1','r') + else + ! GRIB 2 example + call grib_open_file(infile,'../../data/regular_latlon_surface.grib2','r') + end if + + call grib_open_file(outfile,'out.grib','w') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib) + + ! The missingValue is not coded in the message. + ! It is a value we define as a placeholder for a missing value + ! in a point of the grid. + ! It should be choosen in a way that it cannot be confused + ! with a valid field value + missingValue=9999 + call grib_set(igrib, 'missingValue',missingValue) + write(*,*) 'missingValue=',missingValue + + ! get the size of the values array + call grib_get_size(igrib,'values',numberOfValues) + write(*,*) 'numberOfValues=',numberOfValues + + allocate(values(numberOfValues), stat=iret) + + ! get data values + call grib_get(igrib,'values',values) + + ! enable bitmap + call grib_set(igrib,"bitmapPresent",1) + + ! some values are missing + values(1:10) = missingValue + + ! set the values (the bitmap will be automatically built) + call grib_set(igrib,'values', values) + + ! write modified message to a file + call grib_write(igrib,outfile) + + ! FREE MEMORY + call grib_release(igrib) + + call grib_close_file(infile) + + call grib_close_file(outfile) + + deallocate(values) + +end program set_bitmap diff --git a/examples/F90/set_bitmap.sh b/examples/F90/set_bitmap.sh new file mode 100755 index 000000000..afee64cf2 --- /dev/null +++ b/examples/F90/set_bitmap.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh +${examples_dir}set_bitmap > /dev/null diff --git a/examples/F90/set_fortran.f90 b/examples/F90/set_fortran.f90 new file mode 100644 index 000000000..8486d6fa4 --- /dev/null +++ b/examples/F90/set_fortran.f90 @@ -0,0 +1,61 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! Description: how to set key values. +! +! +program set + use grib_api + implicit none + integer :: err + integer(kind = 4) :: centre + integer(kind = 4) :: int_value + character(len = 10) :: string_value + character(len = 20) :: string_centre + integer :: len + integer :: size + integer :: infile,outfile + integer :: igrib,iret + character(len = 256) :: error + + infile=5 + outfile=6 + + call grib_open_file(infile, & + '../../data/regular_latlon_surface_constant.grib1','r') + + call grib_open_file(outfile, & + '../../data/out.grib1','w') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib) + + ! set centre as a long */ + centre=80 + call grib_set(igrib,'centre',centre) + + ! get centre as a integer*4 + call grib_get(igrib,'centre',int_value) + write(*,*) 'centre=',int_value + + ! get centre as a string + call grib_get(igrib,'centre',string_value) + string_centre='centre='//string_value + write(*,*) string_centre + + ! write modified message to a file + call grib_write(igrib,outfile) + + call grib_release(igrib) + + call grib_close_file(infile) + + call grib_close_file(outfile) + +end program set diff --git a/examples/F90/set_missing.f90 b/examples/F90/set_missing.f90 new file mode 100644 index 000000000..aa7db2b17 --- /dev/null +++ b/examples/F90/set_missing.f90 @@ -0,0 +1,48 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: how to set missing a key value. +! +! +! +! +! +program set + use grib_api + implicit none + integer :: infile,outfile + integer :: igrib + + infile=5 + outfile=6 + + call grib_open_file(infile, & + '../../data/reduced_gaussian_pressure_level.grib2','r') + + call grib_open_file(outfile, & + 'out_surface_level.grib2','w') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib) + + call grib_set(igrib,'typeOfFirstFixedSurface','sfc') + call grib_set_missing(igrib,'scaleFactorOfFirstFixedSurface') + call grib_set_missing(igrib,'scaledValueOfFirstFixedSurface') + + call grib_write(igrib,outfile) + + call grib_release(igrib) + + call grib_close_file(infile) + + call grib_close_file(outfile) + +end program set diff --git a/examples/F90/set_missing.sh b/examples/F90/set_missing.sh new file mode 100755 index 000000000..fb79f41e8 --- /dev/null +++ b/examples/F90/set_missing.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}set_missing > /dev/null diff --git a/examples/F90/set_missing_fortran.f90 b/examples/F90/set_missing_fortran.f90 new file mode 100644 index 000000000..536591ce2 --- /dev/null +++ b/examples/F90/set_missing_fortran.f90 @@ -0,0 +1,47 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! Description: how to set key values. +! +! +program set + use grib_api + implicit none + integer :: err + integer :: len + integer :: size + integer :: infile,outfile + integer :: igrib,iret + character(len = 256) :: error + + infile=5 + outfile=6 + + call grib_open_file(infile, & + '../../data/reduced_gaussian_pressure_level.grib2','r') + + call grib_open_file(outfile, & + 'out_surface_level.grib2','w') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_file(infile,igrib) + + call grib_set(igrib,'typeOfFirstFixedSurface','sfc') + call grib_set_missing(igrib,'scaleFactorOfFirstFixedSurface') + call grib_set_missing(igrib,'scaledValueOfFirstFixedSurface') + + call grib_write(igrib,outfile) + + call grib_release(igrib) + + call grib_close_file(infile) + + call grib_close_file(outfile) + +end program set diff --git a/examples/F90/set_pv.f90 b/examples/F90/set_pv.f90 new file mode 100644 index 000000000..c49afc906 --- /dev/null +++ b/examples/F90/set_pv.f90 @@ -0,0 +1,74 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: how to set pv values. +! +! +! +program set_pv + use grib_api + implicit none + integer :: numberOfLevels + integer :: numberOfCoefficients + integer :: outfile, igrib + integer :: i, ios + real, dimension(:),allocatable :: pv + + numberOfLevels=60 + numberOfCoefficients=2*(numberOfLevels+1) + + allocate(pv(numberOfCoefficients)) + + ! read the model level coefficients from file + open( unit=1, file="../../data/60_model_levels", & + form="formatted",action="read") + + do i=1,numberOfCoefficients,2 + read(unit=1,fmt=*, iostat=ios) pv(i), pv(i+1) + if (ios /= 0) then + print *, "I/O error: ",ios + exit + end if + end do + + ! print coefficients + !do i=1,numberOfCoefficients,2 + ! print *," a=",pv(i)," b=",pv(i+1) + !end do + + close(unit=1) + + call grib_open_file(outfile, 'out.grib1','w') + + ! a new grib message is loaded from file + ! igrib is the grib id to be used in subsequent calls + call grib_new_from_samples(igrib, "reduced_gg_sfc_grib1") + + ! set levtype to ml (model level) + call grib_set(igrib,'typeOfLevel','hybrid') + + ! set level + call grib_set(igrib,'level',2) + + ! set PVPresent as an integer + call grib_set(igrib,'PVPresent',1) + + call grib_set(igrib,'pv',pv) + + ! write modified message to a file + call grib_write(igrib,outfile) + + ! FREE MEMORY + call grib_release(igrib) + deallocate(pv) + + call grib_close_file(outfile) + +end program set_pv diff --git a/examples/F90/set_pv.sh b/examples/F90/set_pv.sh new file mode 100755 index 000000000..a784d6884 --- /dev/null +++ b/examples/F90/set_pv.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh + +${examples_dir}set_pv > /dev/null diff --git a/examples/Makefile.am b/examples/Makefile.am new file mode 100644 index 000000000..4149957bd --- /dev/null +++ b/examples/Makefile.am @@ -0,0 +1,37 @@ + +AM_CFLAGS = @WARN_PEDANTIC@ @WERROR@ @FORCE_32_CFLAGS@ + +TESTS = iterator.sh get.sh print_data.sh set.sh keys_iterator.sh multi.sh precision.sh \ + iterator_fortran.sh get_fortran.sh print_data_fortran.sh set_fortran.sh keys_iterator_fortran.sh \ + multi_fortran.sh precision_fortran.sh + +noinst_PROGRAMS = nearest set_bitmap iterator get print_data set keys_iterator multi precision set_pv\ + iterator_fortran get_fortran print_data_fortran set_fortran keys_iterator_fortran \ + multi_fortran precision_fortran set_pv_fortran + +nearest_SOURCES = nearest.c +get_SOURCES = get.c +print_data_SOURCES = print_data.c +set_SOURCES = set.c +set_bitmap_SOURCES = set_bitmap.c +multi_SOURCES = multi.c +keys_iterator_SOURCES = keys_iterator.c +iterator_SOURCES = iterator.c +set_pv_SOURCES = set_pv.c + +get_fortran_SOURCES = get_fortran.F +print_data_fortran_SOURCES = print_data_fortran.F +set_fortran_SOURCES = set_fortran.F +iterator_fortran_SOURCES = iterator_fortran.F +keys_iterator_fortran_SOURCES = keys_iterator_fortran.F +multi_fortran_SOURCES = multi_fortran.F +precision_fortran_SOURCES = precision_fortran.F +set_pv_fortran_SOURCES = set_pv_fortran.F + +INCLUDES = -I$(top_builddir)/src + +LDADD = $(top_builddir)/src/libgrib_api.la +DEPENDENCIES = $(LDADD) + +EXTRA_DIST =$(TESTS) include.sh + diff --git a/examples/ecmwf_link.sh b/examples/ecmwf_link.sh new file mode 100755 index 000000000..ab901a97d --- /dev/null +++ b/examples/ecmwf_link.sh @@ -0,0 +1,18 @@ +#!/bin/sh +set -ex + +CC=xlc +FC=xlf + +jasper_lib="-I/usr/local/lib/metaps/lib/grib_api/jasper/include -L/usr/local/lib/metaps/lib/grib_api/jasper/lib -ljasper" +grib_api_lib="-I/usr/local/lib/metaps/lib/grib_api/new/include -L/usr/local/lib/metaps/lib/grib_api/new/lib -lgrib_api" + +$CC -o multi multi.c $jasper_lib $grib_api_lib -lm + +./multi > /dev/null + +$FC -o multi_fortran multi_fortran.F $jasper_lib $grib_api_lib + +./multi_fortran > /dev/null + + diff --git a/examples/extra/Makefile.am b/examples/extra/Makefile.am new file mode 100644 index 000000000..8b640f561 --- /dev/null +++ b/examples/extra/Makefile.am @@ -0,0 +1,22 @@ + +AM_CFLAGS = @WARN_PEDANTIC@ @WERROR@ @FORCE_32_CFLAGS@ + +TESTS = multi_support.sh message_count.sh f_clone.sh c_clone.sh ens_mean.sh std_dev.sh + +noinst_PROGRAMS = message_count_multi c_clone f_clone ens_mean std_dev + +c_clone_SOURCES = c_clone.c +f_clone_SOURCES = f_clone.f90 +message_count_multi_SOURCES = message_count_multi.f90 +ens_mean_SOURCES = ens_mean.f90 +std_dev_SOURCES = std_dev.f90 + +INCLUDES = -I$(top_builddir)/src + +AM_FCFLAGS = $(F90_MODULE_FLAG)$(top_builddir)/fortran + +LDADD = $(top_builddir)/fortran/libgrib_api_f90.a $(top_builddir)/src/libgrib_api.a +DEPENDENCIES = $(LDADD) + +EXTRA_DIST =$(TESTS) include.sh + diff --git a/examples/extra/c_clone.c b/examples/extra/c_clone.c new file mode 100644 index 000000000..49edf6f3a --- /dev/null +++ b/examples/extra/c_clone.c @@ -0,0 +1,59 @@ +#include + +#include "grib_api.h" + +void usage(char *app) { + fprintf(stderr,"Usage is: %s input_file ouput_file \n",app); +} + +int main(int argc, char *argv[]) { + FILE *in = NULL; + FILE *out = NULL; + + grib_handle *source_handle = NULL; + grib_handle *clone_handle = NULL; + const void *buffer = NULL; + size_t size = 0; + int err = 0; + + /* check number of arguments */ + if (argc != 3) { + usage(argv[0]); + return 1; + } + + in = fopen(argv[1],"r"); + out = fopen(argv[2],"w"); + + if (!in || !out) { + perror("ERROR: unable to open input files"); + return 1; + } + + /* loop over the messages in the source grib and clone them */ + while ((source_handle = grib_handle_new_from_file(0,in,&err))!=NULL) { + clone_handle = grib_handle_clone(source_handle); + + if (clone_handle == NULL) { + perror("ERROR: coult not clone field"); + return 1; + } + + /* get the coded message in a buffer */ + GRIB_CHECK(grib_get_message(clone_handle,&buffer,&size),0); + /* write the buffer to a file */ + if(fwrite(buffer,1,size,out) != size) + { + perror(argv[1]); + return 1; + } + } + + grib_handle_delete(source_handle); + grib_handle_delete(clone_handle); + + fclose(out); + fclose(in); + + return 0; +} diff --git a/examples/extra/c_clone.sh b/examples/extra/c_clone.sh new file mode 100755 index 000000000..0219ba3a4 --- /dev/null +++ b/examples/extra/c_clone.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +# test cloning is done properly + +#set -xv + +. ./include.sh + +temp="${data_dir}/temp_clone.grib" + +for file in `ls ${data_dir}/*.grib?`; do + ${examples_dir}/c_clone $file $temp + + set +e + ${tools_dir}/grib_compare -f $file ${temp} &> /dev/null + + if [ ! $? -eq 0 ]; then + false + exit + fi + set -e +done + +rm -f $temp || true diff --git a/examples/extra/ens_mean.f90 b/examples/extra/ens_mean.f90 new file mode 100644 index 000000000..1d994a290 --- /dev/null +++ b/examples/extra/ens_mean.f90 @@ -0,0 +1,73 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: Practical example of an ensemble mean using grib_api +! +! +! Author: Cristian D Codorean +! +! +program ensemble_mean + + use grib_api + + implicit none + + character(len=100) :: file_name,out_file + integer :: ifile,ofile + integer :: igrib,ogrib + integer :: numberOfValues, nMessages + integer :: iret + real(8), dimension(:), allocatable :: values,sums + + ! --- get input arguments + call getarg(1,file_name) + call getarg(2,out_file) + + call grib_open_file(ifile,file_name,'r') + call grib_open_file(ofile,out_file,'w') + + ! --- count number of messages in grib + call grib_count_in_file(ifile,nMessages) + + call grib_new_from_file(ifile,igrib,iret) + + ! --- create ouput grib from this one + call grib_clone(igrib,ogrib) + + ! --- get the number of values, we suppose all messages have + ! - the same size for the sake of this example + call grib_get(igrib,'numberOfValues',numberOfValues) + + ! --- one should check if allocation was successfull + allocate(values(numberOfValues)) + allocate(sums(numberOfValues)) + + ! --- compute the ensemble mean + sums = 0 + do while (iret/=GRIB_END_OF_FILE) + call grib_get(igrib,'values',values) + sums = sums + values + call grib_new_from_file(ifile,igrib,iret) + end do + sums = sums/nMessages + + ! --- write to the out file + call grib_set(ogrib,'values',sums) + call grib_write(ogrib,ofile) + + ! --- release mem + deallocate(values) + deallocate(sums) + call grib_release(igrib) + call grib_close_file(ifile) + call grib_close_file(ofile) + +end program ensemble_mean diff --git a/examples/extra/ens_mean.sh b/examples/extra/ens_mean.sh new file mode 100755 index 000000000..68b237dc4 --- /dev/null +++ b/examples/extra/ens_mean.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# --- compute the ensemble mean and compare the resulted values +# - against reference values computed with mars + +. ./include.sh + +input=${data_dir}/small_ensemble.grib1 +reference=${data_dir}/reference_ensemble_mean.grib1 +temp=temp.grib1_ + +${examples_dir}/ens_mean $input $temp +${tools_dir}/grib_compare -e 0.05 -c values $reference $temp > /dev/null + +rm -f $temp || true diff --git a/examples/extra/f_clone.f90 b/examples/extra/f_clone.f90 new file mode 100755 index 000000000..e536e8aa8 --- /dev/null +++ b/examples/extra/f_clone.f90 @@ -0,0 +1,53 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: how to create a new GRIB message by cloning +! an existing message. +! +! +! Author: Cristian D. Codorean +! +! +program clone + use grib_api + implicit none + integer :: err,i,iret + integer :: infile,outfile + integer :: n,stat + integer :: source_id,clone_id + integer :: bla + + character(len=100) :: grib_file + character(len=100) :: out; + + call getarg(1,grib_file) + call getarg(2,out) + + call grib_multi_support_on() + + call grib_open_file(infile,grib_file,'r') + call grib_open_file(outfile,out,'w') + + ! count the messages in the file + call grib_count_in_file(infile,n,stat) + + do i=1,n + call grib_new_from_file(infile,source_id) + call grib_clone(source_id,clone_id) + call grib_write(clone_id,outfile) + call grib_release(clone_id) + end do + + call grib_release(source_id) + + call grib_close_file(infile) + call grib_close_file(outfile) + +end program clone diff --git a/examples/extra/f_clone.sh b/examples/extra/f_clone.sh new file mode 100755 index 000000000..4325aa6ee --- /dev/null +++ b/examples/extra/f_clone.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +# test cloning is done properly + +#set -xv + +. ./include.sh + +temp="${data_dir}/temp_clone.grib" + +for file in `ls ${data_dir}/*.grib?`; do + ${examples_dir}/f_clone $file $temp + + set +e + ${tools_dir}/grib_compare -f $file ${temp} &> /dev/null + + if [ ! $? -eq 0 ]; then + false + exit + fi + set -e +done + +rm -f $temp || true diff --git a/examples/extra/include.sh b/examples/extra/include.sh new file mode 100755 index 000000000..72d2fe7ea --- /dev/null +++ b/examples/extra/include.sh @@ -0,0 +1,37 @@ +set -ea + +echo +echo "TEST: $0" + +if [ -z "${data_dir}" ] +then + cd ../../ + cpath=`pwd` + GRIB_DEFINITION_PATH=$cpath/definitions + export GRIB_DEFINITION_PATH + GRIB_SAMPLES_PATH=$cpath/samples + export GRIB_SAMPLES_PATH + tools_dir=$cpath/tools/ + examples_dir=$cpath/examples/extra/ + data_dir=$cpath/data +else + echo "Skipping test $0" + exit +fi + +cd ${examples_dir} + +if [ -z "${GRIB_API_INCLUDE}" ] +then + GRIB_API_INCLUDE=`pwd`/src +fi + +if [ -z "${GRIB_API_LIB}" ] +then + GRIB_API_LIB=`pwd`/src +fi + +#${tools_dir}grib_info + +set -u + diff --git a/examples/extra/message_count.sh b/examples/extra/message_count.sh new file mode 100755 index 000000000..f1213cf97 --- /dev/null +++ b/examples/extra/message_count.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +# check the fortran against the tools for the support for +# multi gribs to be consistent + +#set -x + +. ./include.sh + +files="regular_latlon_surface_constant.grib1 \ + regular_latlon_surface_constant.grib2" + +# check against tool with support for multi off +function test_multi() { + for grib_file in `echo $files`; do + grib_file=${data_dir}/$grib_file + + if [ ! -f $grib_file ]; then + echo "Data file missing: $grib_file" + exit 1 + fi + + fn=`${examples_dir}/$1 $grib_file` + n=`${tools_dir}/$2 -p count $grib_file | wc -l` + if [ ! $fn = $n ]; then + false + exit + fi + done +} + +test_multi "message_count_multi 0" "grib_get -M" +test_multi "message_count_multi 1" "grib_get" diff --git a/examples/extra/message_count_multi.f90 b/examples/extra/message_count_multi.f90 new file mode 100644 index 000000000..8340b22c6 --- /dev/null +++ b/examples/extra/message_count_multi.f90 @@ -0,0 +1,38 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +! +! +! Description: count messages in the input +! +! Author: Cristian D. Codorean +! +! +program get + use grib_api + implicit none + + integer :: ifile + character(len=100) :: grib_file + integer :: n,stat + character(len=1) :: multi_flag + + call getarg(1,multi_flag) + call getarg(2,grib_file) + + if (multi_flag/="0") call grib_multi_support_on() + + call grib_open_file(ifile,grib_file,'r') + + ! count the messages in the file + call grib_count_in_file(ifile,n,stat) + + print *,n + + call grib_close_file(ifile) +end program get diff --git a/examples/extra/multi_support.sh b/examples/extra/multi_support.sh new file mode 100755 index 000000000..ee027ca68 --- /dev/null +++ b/examples/extra/multi_support.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# test multi grib support, check if return value is good from grib_get + +#set -xv + +. ./include.sh + +multi_file=${data_dir}/multi_created.grib2 +multi_on=21 +multi_off=1 + +if [ ! -f ${multi_file} ]; then + echo "Data file missing: ${multi_file}" + exit 1 +fi + +n=`${tools_dir}/grib_get -p count ${multi_file} | wc -l` +[ $n = ${multi_on} ] + +n=`${tools_dir}/grib_get -M -p count ${multi_file} | wc -l` +[ $n = ${multi_off} ] diff --git a/examples/extra/nearest.c b/examples/extra/nearest.c new file mode 100644 index 000000000..f4f2fd87a --- /dev/null +++ b/examples/extra/nearest.c @@ -0,0 +1,92 @@ +/* +* +* Name: nearest +* +* Description: +* Get the nearest for all the messages in the input grib file. +* No land-sea mask applied yet. Print the nearest values to +* stdout with high precision. +* +* Author: Cristian D Codorean +*/ + +#include +#include + +#include "grib_api.h" + +void usage(char* name) { + printf("Usage is: %s lat lon input1 [input2 ...]\n",name); +} + +int main(int argc, char** argv) { + + grib_handle* h = NULL; + FILE* file_handle = NULL; + int err = 0; + int i = 0; + int nfiles = 0; + int shift = 3; + + /* results */ + double outlat=0; + double outlon=0; + double value=0; + double distance=0; + int index=0; + size_t size=1; + + /* program inputs */ + double lat =0,lon = 0; + char** file_names = NULL; + + /* just some input validation */ + if (argc < 4) { + usage(argv[0]); + exit(EXIT_FAILURE); + } + + lat = atof(argv[1]); + lon = atof(argv[2]); + nfiles = argc - shift; + + file_names = (char**)malloc(nfiles*sizeof(char*)); + for (i = 0; i < nfiles; i++) { + file_names[i] = strdup(argv[i+shift]); + } + + + + for (i = 0; i < nfiles; i++) { + + /* open the input file */ + file_handle = fopen(file_names[i],"r"); + if (!file_handle) { + printf("Could not open file %s\n",file_names[i]); + exit(EXIT_FAILURE); + } + + /* loop over all messages */ + while (h = grib_handle_new_from_file(0,file_handle,&err)) { + + if (err != GRIB_SUCCESS) GRIB_CHECK(err,0); + + GRIB_CHECK(grib_nearest_find_multiple(h,0,&lat,&lon,1,&outlat,&outlon,&value,&distance,&index),0); + + /*printf("outlat: %lf outlon: %lf value: %.10lf distance: %lf index: %d\n", + outlat, outlon, value, distance, index);*/ + + printf("%.10lf\n",value); + + GRIB_CHECK(grib_handle_delete(h),0); + + } + + fclose(file_handle); + } + + for (i = 0; i < nfiles; i++) + free(file_names[i]); + + return 0; +} diff --git a/examples/extra/std_dev.f90 b/examples/extra/std_dev.f90 new file mode 100644 index 000000000..03a15433f --- /dev/null +++ b/examples/extra/std_dev.f90 @@ -0,0 +1,69 @@ +program standard_deviation + + use grib_api + + implicit none + + character(len=100) :: file_name,out_file + integer :: ifile,ofile + integer :: igrib,ogrib + integer :: numberOfValues, nMessages + integer :: iret,i + real(8), dimension(:), allocatable :: values,sums,square_sums + + ! --- get input arguments + call getarg(1,file_name) + call getarg(2,out_file) + + call grib_open_file(ifile,file_name,'r') + call grib_open_file(ofile,out_file,'w') + + ! --- count number of messages in grib + call grib_count_in_file(ifile,nMessages) + + call grib_new_from_file(ifile,igrib,iret) + + ! --- create ouput grib from this one + call grib_clone(igrib,ogrib) + + ! --- get the number of values, we suppose all messages have + ! - the same size for the sake of this example + call grib_get(igrib,'numberOfValues',numberOfValues) + + ! --- one should check if allocation was successfull + allocate(values(numberOfValues)) + allocate(sums(numberOfValues)) + allocate(square_sums(numberOfValues)) + + ! --- compute the standard deviation + sums = 0 + square_sums = 0 + do while (iret/=GRIB_END_OF_FILE) + call grib_get(igrib,'values',values) + sums = sums + values + square_sums = square_sums + values * values + call grib_new_from_file(ifile,igrib,iret) + end do + sums = sums/nMessages + square_sums = square_sums/nMessages - sums*sums + + do i=1,numberOfValues + if (square_sums(i) > 0.0) then + square_sums(i) = sqrt(square_sums(i)) + else + square_sums(i) = 0.0 + end if + end do + + ! --- write to the out file + call grib_set(ogrib,'values',square_sums) + call grib_write(ogrib,ofile) + + ! --- release mem + deallocate(values) + deallocate(sums) + call grib_release(igrib) + call grib_close_file(ifile) + call grib_close_file(ofile) + +end program standard_deviation diff --git a/examples/extra/std_dev.sh b/examples/extra/std_dev.sh new file mode 100755 index 000000000..687098e77 --- /dev/null +++ b/examples/extra/std_dev.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# --- compute the standard deviation and compare the resulted values +# - against reference values computed with mars + +. ./include.sh + +input=${data_dir}/small_ensemble.grib1 +reference=${data_dir}/reference_stdev.grib1 +temp=temp.grib1_ + +${examples_dir}/std_dev $input $temp +${tools_dir}/grib_compare -e 0.05 -c values $reference $temp > /dev/null + +rm -f $temp || true diff --git a/examples/fieldset.c b/examples/fieldset.c new file mode 100644 index 000000000..6f5a70365 --- /dev/null +++ b/examples/fieldset.c @@ -0,0 +1,84 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: fieldset + * + * Description: how to use a fieldset. + * + * + * + * + */ + +#include +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("Usage: %s order_by grib_file grib_file ...\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0; + long step,levelType; + char** filenames; + size_t nkeys,nfiles; + int i=0; + char* keys[]={"step","date","param","levelType"}; + grib_fieldset* set; + grib_handle* h; + char param[20]={0,}; + char date[10]={0,}; + size_t datelen=10; + size_t len=20; + char* order_by=0; + + if (argc != 3) usage(argv[0]); + + nkeys=sizeof(keys)/sizeof(*keys); + order_by=strdup(argv[1]); + + nfiles=argc-2; + filenames=(char**)malloc(sizeof(char*)*nfiles); + for (i=0;i +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + double *values = NULL; + size_t values_len= 0; + + size_t i = 0; + + double latitudeOfFirstGridPointInDegrees; + double longitudeOfFirstGridPointInDegrees; + double latitudeOfLastGridPointInDegrees; + double longitudeOfLastGridPointInDegrees; + + double jDirectionIncrementInDegrees; + double iDirectionIncrementInDegrees; + + long numberOfPointsAlongAParallel; + long numberOfPointsAlongAMeridian; + + double average = 0; + + FILE* in = NULL; + char* filename = "../data/regular_latlon_surface.grib1"; + grib_handle *h = NULL; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* create new handle from a message in a file*/ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",filename); + } + + /* get as a long*/ + GRIB_CHECK(grib_get_long(h,"numberOfPointsAlongAParallel",&numberOfPointsAlongAParallel),0); + printf("numberOfPointsAlongAParallel=%ld\n",numberOfPointsAlongAParallel); + + /* get as a long*/ + GRIB_CHECK(grib_get_long(h,"numberOfPointsAlongAMeridian",&numberOfPointsAlongAMeridian),0); + printf("numberOfPointsAlongAMeridian=%ld\n",numberOfPointsAlongAMeridian); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"latitudeOfFirstGridPointInDegrees",&latitudeOfFirstGridPointInDegrees),0); + printf("latitudeOfFirstGridPointInDegrees=%g\n",latitudeOfFirstGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"longitudeOfFirstGridPointInDegrees",&longitudeOfFirstGridPointInDegrees),0); + printf("longitudeOfFirstGridPointInDegrees=%g\n",longitudeOfFirstGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"latitudeOfLastGridPointInDegrees",&latitudeOfLastGridPointInDegrees),0); + printf("latitudeOfLastGridPointInDegrees=%g\n",latitudeOfLastGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"longitudeOfLastGridPointInDegrees",&longitudeOfLastGridPointInDegrees),0); + printf("longitudeOfLastGridPointInDegrees=%g\n",longitudeOfLastGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"jDirectionIncrementInDegrees",&jDirectionIncrementInDegrees),0); + printf("jDirectionIncrementInDegrees=%g\n",jDirectionIncrementInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"iDirectionIncrementInDegrees",&iDirectionIncrementInDegrees),0); + printf("iDirectionIncrementInDegrees=%g\n",iDirectionIncrementInDegrees); + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + /* get data values*/ + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + average = 0; + for(i = 0; i < values_len; i++) + average += values[i]; + + average /=(double)values_len; + + free(values); + + printf("There are %d values, average is %g\n",(int)values_len,average); + + grib_handle_delete(h); + + fclose(in); + return 0; +} diff --git a/examples/get.sh b/examples/get.sh new file mode 100755 index 000000000..264ff005b --- /dev/null +++ b/examples/get.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}get > /dev/null + + diff --git a/examples/get_fortran.F b/examples/get_fortran.F new file mode 100644 index 000000000..3903ecf55 --- /dev/null +++ b/examples/get_fortran.F @@ -0,0 +1,130 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C +C Fortran 77 Implementation: get_fortran +C +C Description: how to get values using keys. +C +C +C +C + program get + implicit none + integer maxNumberOfValues + parameter( maxNumberOfValues = 10000 ) + include 'grib_api_fortran.h' + integer ifile + integer iret + integer igrib + integer i + real*8 latitudeOfFirstPointInDegrees + real*8 longitudeOfFirstPointInDegrees + real*8 latitudeOfLastPointInDegrees + real*8 longitudeOfLastPointInDegrees + real*8 jDirectionIncrementInDegrees + real*8 iDirectionIncrementInDegrees + integer*4 numberOfPointsAlongAParallel + integer*4 numberOfPointsAlongAMeridian + real*8 values(maxNumberOfValues) + integer*4 numberOfValues + real*8 average + character*256 error + integer*4 size + + size=maxNumberOfValues + ifile=5 + + iret=grib_open_file(ifile + X,'../data/reduced_latlon_surface.grib1','r') + call grib_check(iret) + +C a new grib message is loaded from file +C igrib is the grib id to be used in subsequent calls + call grib_check( grib_new_from_file(ifile,igrib) ) + +C get as a integer + call grib_check(grib_get_int(igrib,'numberOfPointsAlongAParallel' + X,numberOfPointsAlongAParallel) ) + write(*,*) 'numberOfPointsAlongAParallel=' + X,numberOfPointsAlongAParallel + +C get as a integer + call grib_check( grib_get_int(igrib,'numberOfPointsAlongAMeridian' + X,numberOfPointsAlongAMeridian) ) + write(*,*) 'numberOfPointsAlongAMeridian=' + X,numberOfPointsAlongAMeridian + +C get as a real8 + call grib_check( grib_get_real8(igrib + X,'latitudeOfFirstGridPointInDegrees' + X,latitudeOfFirstPointInDegrees) ) + write(*,*) 'latitudeOfFirstGridPointInDegrees=' + X,latitudeOfFirstPointInDegrees + +C get as a real8 + call grib_check( grib_get_real8(igrib + X,'longitudeOfFirstGridPointInDegrees' + X,longitudeOfFirstPointInDegrees) ) + write(*,*) 'longitudeOfFirstGridPointInDegrees=' + X,longitudeOfFirstPointInDegrees + +C get as a real8 + call grib_check( grib_get_real8(igrib + X,'latitudeOfLastGridPointInDegrees' + X,latitudeOfLastPointInDegrees) ) + write(*,*) 'latitudeOfLastGridPointInDegrees=' + X,latitudeOfLastPointInDegrees + +C get as a real8 + call grib_check( grib_get_real8(igrib + X,'longitudeOfLastGridPointInDegrees' + X,longitudeOfLastPointInDegrees) ) + write(*,*) 'longitudeOfLastGridPointInDegrees=' + X,longitudeOfLastPointInDegrees + +C get as a real8 + call grib_check( grib_get_real8(igrib + X,'jDirectionIncrementInDegrees' + X,jDirectionIncrementInDegrees) ) + write(*,*) 'jDirectionIncrementInDegrees=' + X,jDirectionIncrementInDegrees + +C get as a real8 + call grib_check( grib_get_real8(igrib + X,'iDirectionIncrementInDegrees' + X,iDirectionIncrementInDegrees) ) + write(*,*) 'iDirectionIncrementInDegrees=' + X,iDirectionIncrementInDegrees + +C get the size of the values array + call grib_check(grib_get_size(igrib,'values',numberOfValues)) + write(*,*) 'numberOfValues=',numberOfValues + +C get data values + call grib_check(grib_get_real8_array(igrib,'values',values,size)) + if ( size .ne. numberOfValues ) then + write(*,*) 'ERROR: wrong numberOfValues' + stop + endif + + average = 0 + do i=1,numberOfValues + average = average + values(i); + enddo + + average =average / numberOfValues + + write(*,*)'There are ',numberOfValues + X,' average is ',average + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(ifile)) + + end diff --git a/examples/get_fortran.sh b/examples/get_fortran.sh new file mode 100755 index 000000000..cc9817b51 --- /dev/null +++ b/examples/get_fortran.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}get_fortran > /dev/null + + diff --git a/examples/grib_precipitation.c b/examples/grib_precipitation.c new file mode 100644 index 000000000..7689245fe --- /dev/null +++ b/examples/grib_precipitation.c @@ -0,0 +1,73 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_precipitation + * + * Description: convert fields accumulated from 0 step in + * fields accumulated in the interval between + * a field and another. In the input file the fields + * must be in ascending order in the step. + * step must be the most external loop (slower varying index) + * + * + * + */ +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s filename\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0,i; + double *values = NULL; + double max,min,average; + size_t values_len= 0; + + FILE* in = NULL; + char* filename ; + grib_handle *h = NULL; + + if (argc<2) usage(argv[0]); + filename=argv[1]; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* create new handle from a message in a file*/ + while((h = grib_handle_new_from_file(0,f,&err)) != NULL) { + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + /* get data values*/ + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + for(i = 0; i < values_len; i++) + printf("%d %.10e\n",i+1,values[i]); + + free(values); + + grib_handle_delete(h); + } + + fclose(in); + return 0; +} diff --git a/examples/include.sh b/examples/include.sh new file mode 100644 index 000000000..c00b931d8 --- /dev/null +++ b/examples/include.sh @@ -0,0 +1,37 @@ +set -ea + +echo +echo "TEST: $0" + +if [ -z "${data_dir}" ] +then + cd ../ + cpath=`pwd` + GRIB_DEFINITION_PATH=$cpath/definitions + export GRIB_DEFINITION_PATH + GRIB_TEMPLATES_PATH=$cpath/templates + export GRIB_TEMPLATES_PATH + tools_dir=$cpath/tools/ + examples_dir=$cpath/examples/ + data_dir=$cpath/data +else + echo "Skipping test $0" + exit +fi + +cd ${examples_dir} + +if [ -z "${GRIB_API_INCLUDE}" ] +then + GRIB_API_INCLUDE=`pwd`/src +fi + +if [ -z "${GRIB_API_LIB}" ] +then + GRIB_API_LIB=`pwd`/src +fi + +#${tools_dir}grib_info + +set -u + diff --git a/examples/iterator.c b/examples/iterator.c new file mode 100644 index 000000000..20d644a9b --- /dev/null +++ b/examples/iterator.c @@ -0,0 +1,89 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: iterator + * + * Description: how to use an iterator on lat/lon/values. + * + * + * + * + */ + +#include +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("Usage: %s grib_file\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + FILE* in = NULL; + int err = 0; + double lat,lon,value,missingValue=0; + int n=0; + char* filename = NULL; + + /* Message handle. Required in all the grib_api calls acting on a message.*/ + grib_handle *h = NULL; + /* Iterator on lat/lon/values.*/ + grib_iterator* iter=NULL; + + if (argc != 2) usage(argv[0]); + + filename=strdup(argv[1]); + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* Loop on all the messages in a file.*/ + while ((h = grib_handle_new_from_file(0,in,&err)) != NULL ) { + /* Check of errors after reading a message. */ + if (err != GRIB_SUCCESS) GRIB_CHECK(err,0); + + /* Get the double representing the missing value in the field. */ + GRIB_CHECK(grib_get_double(h,"missingValue",&missingValue),0); + + /* A new iterator on lat/lon/values is created from the message handle h. */ + iter=grib_iterator_new(h,0,&err); + if (err != GRIB_SUCCESS) GRIB_CHECK(err,0); + + n = 0; + /* Loop on all the lat/lon/values. */ + while(grib_iterator_next(iter,&lat,&lon,&value)) { + /* You can now print lat and lon, */ + printf("- %d - lat=%f lon=%f value=",n,lat,lon); + /* decide what to print if a missing value is found. */ + if (value == missingValue ) printf("missing\n"); + /* and print the value if is not missing. */ + else printf("%f\n",value); + n++; + } + + /* At the end the iterator is deleted to free memory. */ + grib_iterator_delete(iter); + + /* At the end the grib_handle is deleted to free memory. */ + grib_handle_delete(h); + } + + + fclose(in); + + return 0; +} diff --git a/examples/iterator.sh b/examples/iterator.sh new file mode 100755 index 000000000..a314f93e3 --- /dev/null +++ b/examples/iterator.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}iterator ${data_dir}/reduced_gaussian_model_level.grib1 > /dev/null + +${examples_dir}iterator ${data_dir}/regular_gaussian_model_level.grib1 > /dev/null + diff --git a/examples/iterator_fortran.F b/examples/iterator_fortran.F new file mode 100644 index 000000000..0c9b5fcbf --- /dev/null +++ b/examples/iterator_fortran.F @@ -0,0 +1,82 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C +C +C Fortran 77 Implementation: iterator_fortran +C +C Description: how to use an iterator on lat/lon/values. +C +C +C +C +C + program iterator + implicit none + include 'grib_api_fortran.h' + integer ifile + integer iret,iter + real*8 lat,lon,value,missingValue + integer n,flags + character*256 filename + character*256 error + +C Message identifier. + integer igrib + + ifile=5 + + call grib_check(grib_open_file(ifile, + X'../data/regular_latlon_surface.grib1','r')) + +C Loop on all the messages in a file. + 10 iret=grib_new_from_file(ifile,igrib) + if (igrib .eq. -1 ) then + if (iret .ne.0) then + call grib_check(iret) + endif + stop + endif + +C get as a real8 + call grib_check(grib_get_real8(igrib + X,'missingValue',missingValue)) + write(*,*) 'missingValue=',missingValue + +C A new iterator on lat/lon/values is created from the message igrib + flags = 0 + call grib_check(grib_iterator_new(igrib,iter,flags)) + + n = 0 +C Loop on all the lat/lon/values. + 20 iret = grib_iterator_next(iter,lat,lon,value) + if ( iret .eq. 0 ) goto 30 +C You can now print lat and lon, + if ( value .eq. missingValue ) then +C decide what to print if a missing value is found. + write(*,*) "- ",n," - lat=",lat," lon=",lon," value=missing" + else +C or print the value if is not missing. + write(*,*) " ",n," lat=",lat," lon=",lon," value=",value + endif + + n=n+1 + + goto 20 + 30 continue + +C At the end the iterator is deleted to free memory. + call grib_check(grib_iterator_delete(iter)) + + goto 10 + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(ifile)) + + end diff --git a/examples/iterator_fortran.sh b/examples/iterator_fortran.sh new file mode 100755 index 000000000..ec38d52d9 --- /dev/null +++ b/examples/iterator_fortran.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}iterator_fortran > /dev/null + + diff --git a/examples/keys_iterator.c b/examples/keys_iterator.c new file mode 100644 index 000000000..a6fd1ce21 --- /dev/null +++ b/examples/keys_iterator.c @@ -0,0 +1,103 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: keys_iterator + * + * Description: + * Example on how to use keys_iterator functions and the + * grib_keys_iterator structure to get all the available + * keys in a message. + * + * + * + */ + +#include +#include +#include +#include +#include + +#include "grib_api.h" + +#define MAX_KEY_LEN 255 +#define MAX_VAL_LEN 1024 + +static void usage(char* progname); + +int main(int argc, char *argv[]) +{ + /* To skip read only and not coded keys + unsigned long key_iterator_filter_flags=GRIB_KEYS_ITERATOR_SKIP_READ_ONLY || + GRIB_KEYS_ITERATOR_SKIP_COMPUTED; + */ + unsigned long key_iterator_filter_flags=GRIB_KEYS_ITERATOR_ALL_KEYS; + + /* valid name_spaces are ls and mars */ + char* name_space="ls"; + + /* name_space=NULL to get all the keys */ + /* char* name_space=0; */ + + FILE* f; + grib_handle* h=NULL; + grib_keys_iterator* kiter=NULL; + int err=0; + int grib_count=0; + + char value[MAX_VAL_LEN]; + size_t vlen=MAX_VAL_LEN; + + if (argc != 2) usage(argv[0]); + + f = fopen(argv[1],"r"); + if(!f) { + perror(argv[1]); + exit(1); + } + + while((h = grib_handle_new_from_file(0,f,&err)) != NULL) { + + grib_count++; + printf("-- GRIB N. %d --\n",grib_count); + if(!h) { + printf("ERROR: Unable to create grib handle\n"); + exit(1); + } + + kiter=grib_keys_iterator_new(h,key_iterator_filter_flags,name_space); + if (!kiter) { + printf("ERROR: Unable to create keys iterator\n"); + exit(1); + } + + while(grib_keys_iterator_next(kiter)) + { + const char* name = grib_keys_iterator_get_name(kiter); + vlen=MAX_VAL_LEN; + bzero(value,vlen); + GRIB_CHECK(grib_get_string(h,name,value,&vlen),name); + printf("%s = %s\n",name,value); + } + + grib_keys_iterator_delete(kiter); + + } + + return 0; + +} + +static void usage(char* progname) { + printf("\nUsage: %s grib_file\n",progname); + exit(1); +} + diff --git a/examples/keys_iterator.sh b/examples/keys_iterator.sh new file mode 100755 index 000000000..cf83dc1d8 --- /dev/null +++ b/examples/keys_iterator.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}keys_iterator ${data_dir}/reduced_latlon_surface.grib1 > /dev/null + +${examples_dir}keys_iterator ${data_dir}/regular_gaussian_model_level.grib1 > /dev/null + diff --git a/examples/keys_iterator_fortran.F b/examples/keys_iterator_fortran.F new file mode 100644 index 000000000..254f64b05 --- /dev/null +++ b/examples/keys_iterator_fortran.F @@ -0,0 +1,78 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C +C +C Fortran 77 Implementation: keys_iterator +C +C Description: +C Example on how to use keys_iterator functions and the +C grib_keys_iterator structure to get all the available +C keys in a message. +C +C +C +C + program keys_iterator + implicit none + include 'grib_api_fortran.h' + character*20 name_space + integer kiter,ifile,igrib,iret + character*256 key + character*256 value + character*512 all + integer len,strlen + integer grib_count + len=256 + + ifile=5 + + call grib_check(grib_open_file(ifile, + X'../data/regular_latlon_surface.grib1','r')) + +C Loop on all the messages in a file. + 10 iret=grib_new_from_file(ifile,igrib) + if (igrib .eq. -1 ) then + if (iret .ne.0) then + call grib_check(iret) + endif + stop + endif + + grib_count=grib_count+1 + write(*,*) '-- GRIB N. ',grib_count,' --' + +C valid name_spaces are ls and mars + name_space='ls' +C name_space=' ' to get all the keys */ +C name_space=' ' + + strlen = index(name_space,' ') - 1 + call grib_check( + Xgrib_keys_iterator_new(igrib,kiter,name_space(1:strlen))) +C call grib_check(grib_keys_iterator_skip_read_only(kiter)) +C call grib_check(grib_keys_iterator_skip_function(kiter)) +C call grib_check(grib_keys_iterator_skip_not_coded(kiter)) + + 20 if (grib_keys_iterator_next(kiter) .ne. 1) goto 10 + + call grib_check(grib_keys_iterator_get_name(kiter,key,strlen)) + call grib_check(grib_get_string(igrib,key(1:strlen),value)) + all=key// ' = ' // value + write(*,*) all + + goto 20 + + call grib_check(grib_keys_iterator_delete(kiter)) + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(ifile)) + + end + diff --git a/examples/keys_iterator_fortran.sh b/examples/keys_iterator_fortran.sh new file mode 100755 index 000000000..57ac528cd --- /dev/null +++ b/examples/keys_iterator_fortran.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}keys_iterator_fortran > /dev/null + + diff --git a/examples/multi.c b/examples/multi.c new file mode 100644 index 000000000..6fdd45ab6 --- /dev/null +++ b/examples/multi.c @@ -0,0 +1,71 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: multi + * + * Description: How to decode grib messages containing multiple + * fields. Try to turn on and off multi support to + * see the difference. Default is OFF. + * For all the tools defalut is multi support ON. + * + * + * + * + */ +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + long parameterCategory=0,parameterNumber=0,discipline=0; + FILE* in = NULL; + char* filename = "../data/multi.grib2"; + grib_handle *h = NULL; + + /* turn on support for multi fields messages */ + grib_multi_support_on(0); + + /* turn off support for multi fields messages */ + /* grib_multi_support_off(0); */ + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + + while ((h = grib_handle_new_from_file(0,in,&err)) != NULL ) { + + GRIB_CHECK(err,0); + + GRIB_CHECK(grib_get_long(h,"discipline",&discipline),0); + printf("discipline=%ld\n",discipline); + + GRIB_CHECK(grib_get_long(h,"parameterCategory",¶meterCategory),0); + printf("parameterCategory=%ld\n",parameterCategory); + + GRIB_CHECK(grib_get_long(h,"parameterNumber",¶meterNumber),0); + printf("parameterNumber=%ld\n",parameterNumber); + + if ( discipline == 0 && parameterCategory==2) { + if (parameterNumber == 2) printf("-------- u -------\n"); + if (parameterNumber == 3) printf("-------- v -------\n"); + } + } + + grib_handle_delete(h); + + fclose(in); + return 0; +} diff --git a/examples/multi.sh b/examples/multi.sh new file mode 100755 index 000000000..e4f691de3 --- /dev/null +++ b/examples/multi.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +. ./include.sh + +if [ ! -f "${data_dir}/multi.grib2" ] +then + echo SKIP: $0 + exit +fi +${examples_dir}multi > /dev/null + + diff --git a/examples/multi_fortran.F b/examples/multi_fortran.F new file mode 100644 index 000000000..bf439e8db --- /dev/null +++ b/examples/multi_fortran.F @@ -0,0 +1,78 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C +C +C Fortran 77 Implementation: multi_fortran +C +C Description: How to decode grib messages containing multiple +C fields. Try to turn on and off multi support to +C see the difference. Default is OFF. +C For all the tools defalut is multi support ON. +C +C +C +C +C + program multi + implicit none + include 'grib_api_fortran.h' + integer iret + character*256 error + integer*4 parameterCategory,parameterNumber,discipline + integer ifile,igrib + + call grib_check( grib_open_file(ifile + X,'../data/multi.grib2','r')) + +C turn on support for multi fields messages */ + call grib_check(grib_multi_support_on()) + +C turn off support for multi fields messages */ +C call grib_check(grib_multi_support_off()) + +C Loop on all the messages in a file. + 10 iret=grib_new_from_file(ifile,igrib) + if (igrib .eq. -1 ) then + if (iret .ne.0) then + call grib_check(iret) + endif + stop + endif + +C get as a integer*4 + call grib_check(grib_get_int(igrib,'discipline',discipline)) + write(*,*) 'discipline=',discipline + +C get as a integer*4 + call grib_check(grib_get_int(igrib,'parameterCategory' + X,parameterCategory)) + write(*,*) 'parameterCategory=',parameterCategory + +C get as a integer*4 + call grib_check(grib_get_int(igrib,'parameterNumber' + X,parameterNumber)) + write(*,*) 'parameterNumber=',parameterNumber + + if ( discipline .eq. 0 .and. parameterCategory .eq. 2) then + if (parameterNumber .eq. 2) then + write(*,*) "-------- u -------" + endif + if (parameterNumber .eq. 3) then + write(*,*) "-------- v -------" + endif + endif + + goto 10 + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(ifile)) + + end + diff --git a/examples/multi_fortran.sh b/examples/multi_fortran.sh new file mode 100755 index 000000000..38d3c9d37 --- /dev/null +++ b/examples/multi_fortran.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +. ./include.sh + +if [ ! -f "${data_dir}/multi.grib2" ] +then + echo SKIP: $0 + exit +fi + +${examples_dir}multi_fortran > /dev/null + + diff --git a/examples/nearest.c b/examples/nearest.c new file mode 100644 index 000000000..c01f6b549 --- /dev/null +++ b/examples/nearest.c @@ -0,0 +1,92 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: fieldset + * + * Description: how to use a fieldset. + * + * + * + * + */ + +#include +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("Usage: %s grib_file grib_file ...\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0; + long step=0; + size_t nfiles; + int i=0; + grib_fieldset* set=NULL; + grib_handle* h=NULL; + char param[20]={0,}; + size_t len=20; + double lats[4]={0,}; + double lons[4]={0,}; + double values[4]={0,}; + double distances[4]={0,}; + size_t indexes[4]={0,}; + char* order_by="param,step"; + + size_t size=4; + double lat=-40,lon=15; + int mode=0; + int count; + char** filenames; + grib_nearest* nearest=NULL; + + if (argc < 2) usage(argv[0]); + + nfiles=argc-1; + filenames=(char**)malloc(sizeof(char*)*nfiles); + for (i=0;i +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + size_t size=0; + + FILE* in = NULL; + char* infile = "../data/regular_latlon_surface.grib1"; + FILE* out = NULL; + char* outfile = "out.grib1"; + grib_handle *h = NULL; + const void* buffer = NULL; + double* values1=NULL; + double* values2=NULL; + double maxa=0,a=0; + double maxv=0,minv=0; + double maxr=0,r=0; + long decimalPrecision; + long bitsPerValue1=0, bitsPerValue2=0; + int i=0; + + in = fopen(infile,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",infile); + return 1; + } + + out = fopen(outfile,"w"); + if(!in) { + printf("ERROR: unable to open file %s\n",outfile); + return 1; + } + + /* create a new handle from a message in a file */ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",infile); + } + + /* bitsPerValue before changing the packing parameters */ + GRIB_CHECK(grib_get_long(h,"bitsPerValue",&bitsPerValue1),0); + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&size),0); + + values1 = malloc(size*sizeof(double)); + /* get data values before changing the packing parameters*/ + GRIB_CHECK(grib_get_double_array(h,"values",values1,&size),0); + + /* setting decimal precision=2 means that 2 decimal digits + are preserved when packing. */ + decimalPrecision=2; + GRIB_CHECK(grib_set_long(h,"setDecimalPrecision",decimalPrecision),0); + + /* bitsPerValue after changing the packing parameters */ + GRIB_CHECK(grib_get_long(h,"bitsPerValue",&bitsPerValue2),0); + + values2 = malloc(size*sizeof(double)); + /* get data values after changing the packing parameters*/ + GRIB_CHECK(grib_get_double_array(h,"values",values2,&size),0); + + /* computing error */ + maxa=0; + maxr=0; + maxv=values2[0]; + minv=maxv; + for (i=0;i maxv ) maxv=values2[i]; + if ( values2[i] < maxv ) minv=values2[i]; + if ( values2[i] !=0 ) r=fabs((values2[i]-values1[i])/values2[i]); + if ( a > maxa ) maxa=a; + if ( r > maxr ) maxr=r; + } + printf("max absolute error = %g\n",maxa); + printf("max relative error = %g\n",maxr); + printf("min value = %g\n",minv); + printf("max value = %g\n",maxv); + + printf("old number of bits per value=%ld\n",(long)bitsPerValue1); + printf("new number of bits per value=%ld\n",(long)bitsPerValue2); + + /* get the coded message in a buffer */ + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + /* write the buffer in a file*/ + if(fwrite(buffer,1,size,out) != size) + { + perror(argv[1]); + exit(1); + } + + /* delete handle */ + grib_handle_delete(h); + + fclose(in); + fclose(out); + + return 0; +} + diff --git a/examples/precision.sh b/examples/precision.sh new file mode 100755 index 000000000..7dcb0c5a7 --- /dev/null +++ b/examples/precision.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}precision > /dev/null + + diff --git a/examples/precision_fortran.F b/examples/precision_fortran.F new file mode 100644 index 000000000..8931f4d58 --- /dev/null +++ b/examples/precision_fortran.F @@ -0,0 +1,97 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C +C +C Fortran 77 Implementation: precision +C +C Description: how to control decimal precision when packing fields. +C +C +C +C +C + program precision + implicit none + integer maxNumberOfValues + parameter (maxNumberOfValues=10000) + include 'grib_api_fortran.h' + integer*4 size + integer infile,outfile + integer igrib + real*8 values1(maxNumberOfValues) + real*8 values2(maxNumberOfValues) + real*8 maxa,a,maxv,minv,maxr,r + integer*4 decimalPrecision,bitsPerValue1,bitsPerValue2 + integer i + + call grib_check(grib_open_file(infile + X,'../data/regular_latlon_surface.grib1','r')) + + call grib_check(grib_open_file(outfile + X,'../data/regular_latlon_surface_prec.grib1','w')) + +C a new grib message is loaded from file +C igrib is the grib id to be used in subsequent calls + call grib_check(grib_new_from_file(infile,igrib)) + +C bitsPerValue before changing the packing parameters + call grib_check(grib_get_int(igrib,'bitsPerValue',bitsPerValue1)) + +C get the size of the values array + call grib_check(grib_get_size(igrib,"values",size)) + +C get data values before changing the packing parameters*/ + call grib_check(grib_get_real8_array(igrib,"values",values1,size)) + +C setting decimal precision=2 means that 2 decimal digits +C are preserved when packing. + decimalPrecision=2 + call grib_check(grib_set_int(igrib,"setDecimalPrecision" + X,decimalPrecision)) + +C bitsPerValue after changing the packing parameters + call grib_check(grib_get_int(igrib,"bitsPerValue",bitsPerValue2)) + +C get data values after changing the packing parameters + call grib_check(grib_get_real8_array(igrib,"values",values2,size)) + +C computing error + maxa=0 + maxr=0 + maxv=values2(1) + minv=maxv + do i=1,size + a=abs(values2(i)-values1(i)) + if ( values2(i) .gt. maxv ) maxv=values2(i) + if ( values2(i) .lt. maxv ) minv=values2(i) + if ( values2(i) .ne. 0 ) then + r=abs((values2(i)-values1(i))/values2(i)) + endif + if ( a .gt. maxa ) maxa=a + if ( r .gt. maxr ) maxr=r + enddo + write(*,*) "max absolute error = ",maxa + write(*,*) "max relative error = ",maxr + write(*,*) "min value = ",minv + write(*,*) "max value = ",maxv + + write(*,*) "old number of bits per value=",bitsPerValue1 + write(*,*) "new number of bits per value=",bitsPerValue2 + +C write modified message to a file + call grib_check(grib_write(igrib,outfile)) + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(infile)) + + call grib_check(grib_close_file(outfile)) + + end + diff --git a/examples/precision_fortran.sh b/examples/precision_fortran.sh new file mode 100755 index 000000000..6b17b45ff --- /dev/null +++ b/examples/precision_fortran.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}precision_fortran > /dev/null + + diff --git a/examples/print_data.c b/examples/print_data.c new file mode 100644 index 000000000..2d9188fa5 --- /dev/null +++ b/examples/print_data.c @@ -0,0 +1,80 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: print_data + * + * Description: prints all the data contained in a grib file + * + * + * + */ +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s filename\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0,i; + double *values = NULL; + double max,min,average; + size_t values_len= 0; + + FILE* in = NULL; + char* filename ; + grib_handle *h = NULL; + + if (argc<2) usage(argv[0]); + filename=argv[1]; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* create new handle from a message in a file*/ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",filename); + } + + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + /* get data values*/ + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + for(i = 0; i < values_len; i++) + printf("%d %.10e\n",i+1,values[i]); + + free(values); + + + GRIB_CHECK(grib_get_double(h,"max",&max),0); + GRIB_CHECK(grib_get_double(h,"min",&min),0); + GRIB_CHECK(grib_get_double(h,"average",&average),0); + + printf("%d values found in %s\n",(int)values_len,filename); + printf("max=%.10e min=%.10e average=%.10e\n",max,min,average); + + grib_handle_delete(h); + + fclose(in); + return 0; +} diff --git a/examples/print_data.sh b/examples/print_data.sh new file mode 100755 index 000000000..b2db6e47f --- /dev/null +++ b/examples/print_data.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +. ./include.sh + +numberOfValues=`${examples_dir}print_data ../data/constant_field.grib1 | grep values | awk '{print $1}'` + +if [ $numberOfValues -ne 99200 ] +then + echo ERROR: wrong number of values + exit 1; +fi + + diff --git a/examples/print_data_fortran.F b/examples/print_data_fortran.F new file mode 100644 index 000000000..dc404cb2b --- /dev/null +++ b/examples/print_data_fortran.F @@ -0,0 +1,80 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C +C Fortran 77 Implementation: print_data_fortran +C +C Description: prints all the data contained in a grib file +C +C +C +C + program print_data_fortran + implicit none + integer maxNumberOfValues + parameter( maxNumberOfValues = 100000 ) + include 'grib_api_fortran.h' + integer ifile + integer iret + integer igrib + integer i + real*8 values(maxNumberOfValues) + integer*4 numberOfValues + real*8 average + real*8 max + real*8 min + character*256 error + integer*4 size + + size=maxNumberOfValues + ifile=5 + + iret=grib_open_file(ifile + X,'../data/constant_field.grib1','r') + call grib_check(iret) + +C a new grib message is loaded from file +C igrib is the grib id to be used in subsequent calls + call grib_check( grib_new_from_file(ifile,igrib) ) + + +C get the size of the values array + call grib_check(grib_get_size(igrib,'values',numberOfValues)) + if ( numberOfValues .gt. maxNumberOfValues ) then + write(*,*)'ERROR: maxNumberOfValues too small numberOfValues=', + XnumberOfValues + stop + endif + +C get data values + call grib_check(grib_get_real8_array(igrib,'values',values,size)) + if ( size .ne. numberOfValues ) then + write(*,*) 'ERROR: wrong numberOfValues' + stop + endif + + do i=1,numberOfValues + write(*,*)' ',i,values(i) + enddo + + average =average / numberOfValues + + write(*,*)numberOfValues,' values found ' + + call grib_check(grib_get_real8(igrib,'max',max)) + write(*,*) 'max=',max + call grib_check(grib_get_real8(igrib,'min',min)) + write(*,*) 'min=',min + call grib_check(grib_get_real8(igrib,'average',average)) + write(*,*) 'average=',average + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(ifile)) + + end diff --git a/examples/print_data_fortran.sh b/examples/print_data_fortran.sh new file mode 100755 index 000000000..96335f6b1 --- /dev/null +++ b/examples/print_data_fortran.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +. ./include.sh + +numberOfValues=`${examples_dir}print_data_fortran | grep values | awk '{print $1}'` + +if [ $numberOfValues -ne 99200 ] +then + echo ERROR: wrong number of values + exit 1; +fi + + diff --git a/examples/python/Makefile.am b/examples/python/Makefile.am new file mode 100644 index 000000000..9740da77d --- /dev/null +++ b/examples/python/Makefile.am @@ -0,0 +1,17 @@ +if WITH_PYTHON +AM_CFLAGS = @WARN_PEDANTIC@ @WERROR@ + +TESTS = clone.sh count_messages.sh get.sh index.sh iterator.sh keys_iterator.sh multi_write.sh nearest.sh print_data.sh samples.sh set.sh set_missing.sh binary_message.sh +TESTS_ENVIRONMENT = TOPBUILDDIR=$(top_builddir) PYTHON=$(PYTHON) + +noinst_PROGRAMS = keys_iterator print_data iterator count_messages +keys_iterator_SOURCES = keys_iterator.c +print_data_SOURCES = print_data.c +iterator_SOURCES = iterator.c +count_messages_SOURCES = count_messages.c +INCLUDES = -I$(top_builddir)/src +LDADD = $(top_builddir)/src/libgrib_api.la +DEPENDENCIES = $(LDADD) + +EXTRA_DIST = $(TESTS) include.sh clone.py count_messages.py get.py index.py iterator.py keys_iterator.py multi_write.py nearest.py print_data.py samples.py set.py set_missing.py binary_message.py set_pv.py +endif diff --git a/examples/python/binary_message.py b/examples/python/binary_message.py new file mode 100644 index 000000000..038b9ebfc --- /dev/null +++ b/examples/python/binary_message.py @@ -0,0 +1,39 @@ +import traceback +import sys + +from gribapi import * + +VERBOSE=1 # verbose error reporting + +def example(): + f = open(sys.argv[1]) + out = open(sys.argv[2],'w') + + while 1: + gid = grib_new_from_file(f) + if gid is None: break + + message = grib_get_message(gid) + + newgid = grib_new_from_message(message) + grib_write(newgid,out) + grib_release(newgid) + + grib_release(gid) + + out.close() + f.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/binary_message.sh b/examples/python/binary_message.sh new file mode 100755 index 000000000..2272f3217 --- /dev/null +++ b/examples/python/binary_message.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +. ./include.sh + +REDIRECT=/dev/null + +INPUT=${data_dir}/tigge_pf_ecmwf.grib2 +OUTPUT=out.grib + +$PYTHON binary_message.py $INPUT $OUTPUT 2> $REDIRECT > $REDIRECT +${tools_dir}/grib_compare $INPUT $OUTPUT +rm $OUTPUT || true diff --git a/examples/python/clone.py b/examples/python/clone.py new file mode 100644 index 000000000..b41720e1c --- /dev/null +++ b/examples/python/clone.py @@ -0,0 +1,48 @@ +import traceback +import sys +import random + +from gribapi import * + +INPUT='../../data/constant_field.grib1' +OUTPUT='out.grib' +VERBOSE=1 # verbose error reporting + +def example(): + fin = open(INPUT) + fout = open(OUTPUT,'w') + + gid = grib_new_from_file(fin) + + nx = grib_get(gid,'Ni') + ny = grib_get(gid,'Nj') + + for step in range(0,24,6): + clone_id = grib_clone(gid) + grib_set(clone_id,'step',step) + + values = [random.random() for i in range(nx*ny)] + + grib_set_values(clone_id,values) + + grib_write(clone_id,fout) + grib_release(clone_id) + + grib_release(gid) + + fin.close() + fout.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/clone.sh b/examples/python/clone.sh new file mode 100755 index 000000000..a55855371 --- /dev/null +++ b/examples/python/clone.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +REDIRECT=/dev/null +$PYTHON clone.py 2> $REDIRECT > $REDIRECT +rm out.grib || true diff --git a/examples/python/count_messages.c b/examples/python/count_messages.c new file mode 100644 index 000000000..46ce239a4 --- /dev/null +++ b/examples/python/count_messages.c @@ -0,0 +1,122 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: get + * + * Description: how to get values using keys. + * + * + * + */ +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s filename\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0; + + size_t i = 0; + int nmsg = 0; + + double latitudeOfFirstGridPointInDegrees; + double longitudeOfFirstGridPointInDegrees; + double latitudeOfLastGridPointInDegrees; + double longitudeOfLastGridPointInDegrees; + + double jDirectionIncrementInDegrees; + double iDirectionIncrementInDegrees; + + long numberOfPointsAlongAParallel; + long numberOfPointsAlongAMeridian; + + size_t values_len= 0; + double average; + double min; + double max; + + FILE* in = NULL; + char* filename; + grib_handle *h = NULL; + + if (argc<2) usage(argv[0]); + filename=argv[1]; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + while((h = grib_handle_new_from_file(0,in,&err)) != NULL) { + + GRIB_CHECK(err,0); + + nmsg++; + printf("processing message number %d\n",nmsg); + + /* get as a long*/ + GRIB_CHECK(grib_get_long(h,"Ni",&numberOfPointsAlongAParallel),0); + printf("Ni=%ld\n",numberOfPointsAlongAParallel); + + /* get as a long*/ + GRIB_CHECK(grib_get_long(h,"Nj",&numberOfPointsAlongAMeridian),0); + printf("Nj=%ld\n",numberOfPointsAlongAMeridian); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"latitudeOfFirstGridPointInDegrees",&latitudeOfFirstGridPointInDegrees),0); + printf("latitudeOfFirstGridPointInDegrees=%g\n",latitudeOfFirstGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"longitudeOfFirstGridPointInDegrees",&longitudeOfFirstGridPointInDegrees),0); + printf("longitudeOfFirstGridPointInDegrees=%g\n",longitudeOfFirstGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"latitudeOfLastGridPointInDegrees",&latitudeOfLastGridPointInDegrees),0); + printf("latitudeOfLastGridPointInDegrees=%g\n",latitudeOfLastGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"longitudeOfLastGridPointInDegrees",&longitudeOfLastGridPointInDegrees),0); + printf("longitudeOfLastGridPointInDegrees=%g\n",longitudeOfLastGridPointInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"jDirectionIncrementInDegrees",&jDirectionIncrementInDegrees),0); + printf("jDirectionIncrementInDegrees=%g\n",jDirectionIncrementInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"iDirectionIncrementInDegrees",&iDirectionIncrementInDegrees),0); + printf("iDirectionIncrementInDegrees=%g\n",iDirectionIncrementInDegrees); + + /* get as a double*/ + GRIB_CHECK(grib_get_double(h,"average",&average),0); + GRIB_CHECK(grib_get_double(h,"min",&min),0); + GRIB_CHECK(grib_get_double(h,"max",&max),0); + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + printf("There are %d, average is %g, min is %g, max is %g\n",(int)values_len,average,min,max); + + for (i=0;i<100;i++) printf("-"); + printf("\n"); + + grib_handle_delete(h); + + } + + fclose(in); + return 0; +} diff --git a/examples/python/count_messages.py b/examples/python/count_messages.py new file mode 100644 index 000000000..fbb34684b --- /dev/null +++ b/examples/python/count_messages.py @@ -0,0 +1,60 @@ +import traceback +import sys + +from gribapi import * + +INPUT='../../data/tigge_pf_ecmwf.grib2' +VERBOSE=1 # verbose error reporting + +def example(): + f = open(INPUT) + + mcount = grib_count_in_file(f) + gid_list = [grib_new_from_file(f) for i in range(mcount)] + + f.close() + + keys = [ + 'Ni', + 'Nj', + 'latitudeOfFirstGridPointInDegrees', + 'longitudeOfFirstGridPointInDegrees', + 'latitudeOfLastGridPointInDegrees', + 'longitudeOfLastGridPointInDegrees', + 'jDirectionIncrementInDegrees', + 'iDirectionIncrementInDegrees', + ] + + for i in range(mcount): + gid = gid_list[i] + + print "processing message number",i+1 + + for key in keys: + print '%s=%g' % (key,grib_get(gid,key)) + + print 'There are %d, average is %g, min is %g, max is %g' % ( + grib_get_size(gid,'values'), + grib_get(gid,'average'), + grib_get(gid,'min'), + grib_get(gid,'max') + ) + + print '-'*100 + + grib_release(gid) + + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/count_messages.sh b/examples/python/count_messages.sh new file mode 100755 index 000000000..c11fdea8c --- /dev/null +++ b/examples/python/count_messages.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +. ./include.sh + +TEMP1=temp1 +TEMP2=temp2 + +$PYTHON count_messages.py 2> $TEMP1 > $TEMP1 +./count_messages ../../data/tigge_pf_ecmwf.grib2 2> $TEMP2 > $TEMP2 + +diff $TEMP1 $TEMP2 +rm $TEMP1 $TEMP2 || true diff --git a/examples/python/get.py b/examples/python/get.py new file mode 100644 index 000000000..837b9de0a --- /dev/null +++ b/examples/python/get.py @@ -0,0 +1,54 @@ +import traceback +import sys + +from gribapi import * + +INPUT='../../data/reduced_latlon_surface.grib1' +VERBOSE=1 # verbose error reporting + +def example(): + f = open(INPUT) + + keys = [ + 'Ni', + 'Nj', + 'latitudeOfFirstGridPointInDegrees', + 'longitudeOfFirstGridPointInDegrees', + 'latitudeOfLastGridPointInDegrees', + 'longitudeOfLastGridPointInDegrees', + ] + + while 1: + gid = grib_new_from_file(f) + if gid is None: break + + for key in keys: + if not grib_is_defined(gid,key): raise Exception("Key was not defined") + print '%s=%s' % (key,grib_get(gid,key)) + + if grib_is_defined(gid,"A_very_silly_girl"): raise Exception("Key was defined") + + print 'There are %d values, average is %f, min is %f, max is %f' % ( + grib_get_size(gid,'values'), + grib_get(gid,'average'), + grib_get(gid,'min'), + grib_get(gid,'max') + ) + + grib_release(gid) + + f.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/get.sh b/examples/python/get.sh new file mode 100755 index 000000000..ed35602b3 --- /dev/null +++ b/examples/python/get.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +. ./include.sh + +REDIRECT=/dev/null +$PYTHON get.py 2> $REDIRECT > $REDIRECT + +# Rerun test with no type check decorator (See GRIB-51) +export GRIB_API_PYTHON_NO_TYPE_CHECKS=1 +$PYTHON get.py 2> $REDIRECT > $REDIRECT diff --git a/examples/python/include.sh b/examples/python/include.sh new file mode 100644 index 000000000..574147e56 --- /dev/null +++ b/examples/python/include.sh @@ -0,0 +1,19 @@ +set -ea + +echo +echo "TEST: $0" + +cpath=$TOPBUILDDIR +GRIB_DEFINITION_PATH=$cpath/definitions +export GRIB_DEFINITION_PATH +GRIB_SAMPLES_PATH=$cpath/samples +export GRIB_SAMPLES_PATH +tools_dir=$cpath/tools/ +examples_dir=$cpath/examples/python +data_dir=$cpath/data + +PYTHONPATH=$cpath/python:$cpath/python/.libs:$PYTHONPATH +export PYTHONPATH + +set -u + diff --git a/examples/python/index.py b/examples/python/index.py new file mode 100644 index 000000000..2b8e9b10d --- /dev/null +++ b/examples/python/index.py @@ -0,0 +1,73 @@ +import traceback +import sys,os + +from gribapi import * + +INPUT='../../data/index.grib' +VERBOSE=1 # verbose error reporting + +def product(*args, **kwds): + # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy + # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 + pools = map(tuple, args) * kwds.get('repeat', 1) + result = [[]] + for pool in pools: + result = [x+[y] for x in result for y in pool] + for prod in result: + yield tuple(prod) + +def example(): + index_keys = ["shortName","level","number","step"] + index_file = "my.idx" + + iid = None + + if (os.path.exists(index_file)): + iid = grib_index_read(index_file) + else: + iid = grib_index_new_from_file(INPUT,index_keys) + + # multiple files can be added to an index: + # grib_index_add_file(iid,"grib file to add") + + grib_index_write(iid,index_file) + + index_vals = [] + + for key in index_keys: + print "%sSize=%d" % ( + key, + grib_index_get_size(iid,key) + ) + + key_vals = grib_index_get(iid,key) + print " ".join(key_vals) + + index_vals.append(key_vals) + + for prod in product(*index_vals): + for i in range(len(index_keys)): + grib_index_select(iid,index_keys[i],prod[i]) + + while 1: + gid = grib_new_from_index(iid) + if gid is None: break + print " ".join(["%s=%s" % (key,grib_get(gid,key)) for key in index_keys]) + grib_release(gid) + + grib_index_release(iid) + + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/index.sh b/examples/python/index.sh new file mode 100755 index 000000000..148554633 --- /dev/null +++ b/examples/python/index.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +REDIRECT=/dev/null +$PYTHON index.py 2> $REDIRECT > $REDIRECT +rm my.idx || true diff --git a/examples/python/iterator.c b/examples/python/iterator.c new file mode 100644 index 000000000..faf03ad61 --- /dev/null +++ b/examples/python/iterator.c @@ -0,0 +1,89 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: iterator + * + * Description: how to use an iterator on lat/lon/values. + * + * + * + * + */ + +#include +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("Usage: %s grib_file\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + FILE* in = NULL; + int err = 0; + double lat,lon,value,missingValue=0; + int n=0; + char* filename = NULL; + + /* Message handle. Required in all the grib_api calls acting on a message.*/ + grib_handle *h = NULL; + /* Iterator on lat/lon/values.*/ + grib_iterator* iter=NULL; + + if (argc != 2) usage(argv[0]); + + filename=strdup(argv[1]); + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* Loop on all the messages in a file.*/ + while ((h = grib_handle_new_from_file(0,in,&err)) != NULL ) { + /* Check of errors after reading a message. */ + if (err != GRIB_SUCCESS) GRIB_CHECK(err,0); + + /* Get the double representing the missing value in the field. */ + GRIB_CHECK(grib_get_double(h,"missingValue",&missingValue),0); + + /* A new iterator on lat/lon/values is created from the message handle h. */ + iter=grib_iterator_new(h,0,&err); + if (err != GRIB_SUCCESS) GRIB_CHECK(err,0); + + n = 0; + /* Loop on all the lat/lon/values. */ + while(grib_iterator_next(iter,&lat,&lon,&value)) { + /* You can now print lat and lon, */ + printf("- %d - lat=%.6e lon=%.6e value=",n,lat,lon); + /* decide what to print if a missing value is found. */ + if (value == missingValue ) printf("missing\n"); + /* and print the value if is not missing. */ + else printf("%f\n",value); + n++; + } + + /* At the end the iterator is deleted to free memory. */ + grib_iterator_delete(iter); + + /* At the end the grib_handle is deleted to free memory. */ + grib_handle_delete(h); + } + + + fclose(in); + + return 0; +} diff --git a/examples/python/iterator.py b/examples/python/iterator.py new file mode 100644 index 000000000..9b4892aa1 --- /dev/null +++ b/examples/python/iterator.py @@ -0,0 +1,53 @@ +import traceback +import sys + +from gribapi import * + +INPUT='../../data/reduced_latlon_surface.grib1' +VERBOSE=1 # verbose error reporting + +def example(): + f = open(INPUT) + + while 1: + gid = grib_new_from_file(f) + if gid is None: break + + iterid = grib_iterator_new(gid,0) + + missingValue = grib_get_double(gid,"missingValue") + + i=0 + while 1: + result = grib_iterator_next(iterid) + if not result: break + + [lat,lon,value] = result + + sys.stdout.write("- %d - lat=%.6e lon=%.6e value=" % (i,lat,lon)) + + if value == missingValue: + print "missing" + else: + print "%.6f" % value + + i += 1 + + grib_iterator_delete(iterid) + grib_release(gid) + + f.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/iterator.sh b/examples/python/iterator.sh new file mode 100755 index 000000000..cf3d0d1f5 --- /dev/null +++ b/examples/python/iterator.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +. ./include.sh + +TEMP1=temp1 +TEMP2=temp2 + +$PYTHON iterator.py 2> $TEMP1 > $TEMP1 +./iterator ../../data/reduced_latlon_surface.grib1 2> $TEMP2 > $TEMP2 + +diff $TEMP1 $TEMP2 +rm $TEMP1 $TEMP2 || true diff --git a/examples/python/keys_iterator.c b/examples/python/keys_iterator.c new file mode 100644 index 000000000..d11e18ea2 --- /dev/null +++ b/examples/python/keys_iterator.c @@ -0,0 +1,103 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: keys_iterator + * + * Description: + * Example on how to use keys_iterator functions and the + * grib_keys_iterator structure to get all the available + * keys in a message. + * + * + * + */ + +#include +#include +#include +#include +#include + +#include "grib_api.h" + +#define MAX_KEY_LEN 255 +#define MAX_VAL_LEN 1024 + +static void usage(char* progname); + +int main(int argc, char *argv[]) +{ + /* To skip read only and not coded keys + unsigned long key_iterator_filter_flags=GRIB_KEYS_ITERATOR_SKIP_READ_ONLY || + GRIB_KEYS_ITERATOR_SKIP_COMPUTED; + */ + unsigned long key_iterator_filter_flags=GRIB_KEYS_ITERATOR_ALL_KEYS; + + /* valid name_spaces are ls and mars */ + char* name_space="ls"; + + /* name_space=NULL to get all the keys */ + /* char* name_space=0; */ + + FILE* f; + grib_handle* h=NULL; + grib_keys_iterator* kiter=NULL; + int err=0; + int grib_count=0; + + char value[MAX_VAL_LEN]; + size_t vlen=MAX_VAL_LEN; + + if (argc != 2) usage(argv[0]); + + f = fopen(argv[1],"r"); + if(!f) { + perror(argv[1]); + exit(1); + } + + while((h = grib_handle_new_from_file(0,f,&err)) != NULL) { + + grib_count++; + /*printf("-- GRIB N. %d --\n",grib_count);*/ + if(!h) { + printf("ERROR: Unable to create grib handle\n"); + exit(1); + } + + kiter=grib_keys_iterator_new(h,key_iterator_filter_flags,name_space); + if (!kiter) { + printf("ERROR: Unable to create keys iterator\n"); + exit(1); + } + + while(grib_keys_iterator_next(kiter)) + { + const char* name = grib_keys_iterator_get_name(kiter); + vlen=MAX_VAL_LEN; + bzero(value,vlen); + GRIB_CHECK(grib_get_string(h,name,value,&vlen),name); + printf("%s = %s\n",name,value); + } + + grib_keys_iterator_delete(kiter); + + } + + return 0; + +} + +static void usage(char* progname) { + printf("\nUsage: %s grib_file\n",progname); + exit(1); +} + diff --git a/examples/python/keys_iterator.py b/examples/python/keys_iterator.py new file mode 100644 index 000000000..195058bdf --- /dev/null +++ b/examples/python/keys_iterator.py @@ -0,0 +1,48 @@ +import traceback +import sys + +from gribapi import * + +INPUT='../../data/reduced_latlon_surface.grib1' +VERBOSE=1 # verbose error reporting + +def example(): + f = open(INPUT) + + while 1: + gid = grib_new_from_file(f) + if gid is None: break + + iterid = grib_keys_iterator_new(gid,'ls') + + # Different types of keys can be skipped + # grib_skip_computed(iterid) + # grib_skip_coded(iterid) + # grib_skip_edition_specific(iterid) + # grib_skip_duplicates(iterid) + # grib_skip_read_only(iterid) + # grib_skip_function(iterid) + + while grib_keys_iterator_next(iterid): + keyname = grib_keys_iterator_get_name(iterid) + keyval = grib_get_string(iterid,keyname) + print "%s = %s" % (keyname,keyval) + + grib_keys_iterator_delete(iterid) + grib_release(gid) + + f.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/keys_iterator.sh b/examples/python/keys_iterator.sh new file mode 100755 index 000000000..451671b9e --- /dev/null +++ b/examples/python/keys_iterator.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +. ./include.sh + +TEMP1=temp1 +TEMP2=temp2 + +$PYTHON keys_iterator.py 2> $TEMP1 > $TEMP1 +./keys_iterator ../../data/reduced_latlon_surface.grib1 2> $TEMP2 > $TEMP2 + +diff $TEMP1 $TEMP2 +rm $TEMP1 $TEMP2 || true diff --git a/examples/python/launcher.sh b/examples/python/launcher.sh new file mode 100755 index 000000000..9de2bc6c5 --- /dev/null +++ b/examples/python/launcher.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +PYTHONPATH=../../python +python $1 diff --git a/examples/python/multi_write.py b/examples/python/multi_write.py new file mode 100644 index 000000000..0553692d3 --- /dev/null +++ b/examples/python/multi_write.py @@ -0,0 +1,41 @@ +import traceback +import sys + +from gribapi import * + +INPUT='../../data/sample.grib2' +OUTPUT='out.grib' +VERBOSE=1 # verbose error reporting + +def example(): + fin = open(INPUT) + fout = open(OUTPUT,'w') + + gid = grib_new_from_file(fin) + + mgid = grib_multi_new() + + for step in range(12,132,12): + grib_set(gid,"step",step) + grib_multi_append(gid,4,mgid) + + grib_multi_write(mgid,fout) + + grib_multi_release(mgid) + grib_release(gid) + fin.close() + fout.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/multi_write.sh b/examples/python/multi_write.sh new file mode 100755 index 000000000..f715b2d89 --- /dev/null +++ b/examples/python/multi_write.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +REDIRECT=/dev/null +$PYTHON multi_write.py 2> $REDIRECT > $REDIRECT +rm out.grib || true diff --git a/examples/python/nearest.py b/examples/python/nearest.py new file mode 100644 index 000000000..2fceb5d7a --- /dev/null +++ b/examples/python/nearest.py @@ -0,0 +1,42 @@ +import traceback +import sys + +from gribapi import * + +INPUT='../../data/reduced_gaussian_lsm.grib1' +VERBOSE=1 # verbose error reporting + +def example(): + points = ((30,-20),(13,234)) + + f = open(INPUT) + gid = grib_new_from_file(f) + + for lat,lon in points: + nearest = grib_find_nearest(gid,lat,lon)[0] + print lat,lon + print nearest.lat,nearest.lon,nearest.value,nearest.distance,nearest.index + + four = grib_find_nearest(gid,lat,lon,is_lsm = False,npoints = 4) + for i in range(len(four)): + print "- %d -" % i + print four[i] + + print "-"*100 + + grib_release(gid) + f.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/nearest.sh b/examples/python/nearest.sh new file mode 100755 index 000000000..fcb26e4b5 --- /dev/null +++ b/examples/python/nearest.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +. ./include.sh + +REDIRECT=/dev/null +$PYTHON nearest.py 2> $REDIRECT > $REDIRECT diff --git a/examples/python/print_data.c b/examples/python/print_data.c new file mode 100644 index 000000000..0696fa5ad --- /dev/null +++ b/examples/python/print_data.c @@ -0,0 +1,80 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: print_data + * + * Description: prints all the data contained in a grib file + * + * + * + */ +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s filename\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0,i; + double *values = NULL; + double max,min,average; + size_t values_len= 0; + + FILE* in = NULL; + char* filename ; + grib_handle *h = NULL; + + if (argc<2) usage(argv[0]); + filename=argv[1]; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* create new handle from a message in a file*/ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",filename); + } + + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + /* get data values*/ + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + for(i = 0; i < values_len; i++) + printf("%d %.10e\n",i+1,values[i]); + + free(values); + + + GRIB_CHECK(grib_get_double(h,"max",&max),0); + GRIB_CHECK(grib_get_double(h,"min",&min),0); + GRIB_CHECK(grib_get_double(h,"average",&average),0); + + printf("%d values found in %s\n",(int)values_len,filename); + printf("max=%.10e\nmin=%.10e\naverage=%.10e\n",max,min,average); + + grib_handle_delete(h); + + fclose(in); + return 0; +} diff --git a/examples/python/print_data.py b/examples/python/print_data.py new file mode 100644 index 000000000..9db2276b5 --- /dev/null +++ b/examples/python/print_data.py @@ -0,0 +1,37 @@ +import traceback +import sys + +from gribapi import * + +INPUT='../../data/regular_latlon_surface.grib1' +VERBOSE=1 # verbose error reporting + +def example(): + f = open(INPUT) + gid = grib_new_from_file(f) + + values = grib_get_values(gid) + for i in xrange(len(values)): + print "%d %.10e" % (i+1,values[i]) + + print '%d values found in %s' % (len(values),INPUT) + + for key in ('max','min','average'): + print '%s=%.10e' % (key,grib_get(gid,key)) + + grib_release(gid) + f.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/print_data.sh b/examples/python/print_data.sh new file mode 100755 index 000000000..ecc1ce15a --- /dev/null +++ b/examples/python/print_data.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +. ./include.sh + +TEMP1=temp1 +TEMP2=temp2 + +$PYTHON print_data.py 2> $TEMP1 > $TEMP1 +./print_data ../../data/regular_latlon_surface.grib1 2> $TEMP2 > $TEMP2 + +diff $TEMP1 $TEMP2 +rm $TEMP1 $TEMP2 || true diff --git a/examples/python/samples.py b/examples/python/samples.py new file mode 100644 index 000000000..09503cb3d --- /dev/null +++ b/examples/python/samples.py @@ -0,0 +1,73 @@ +import traceback +import sys + +from gribapi import * + +INPUT='../../data/tp_ecmwf.grib' +OUTPUT='out.grib' +VERBOSE=1 # verbose error reporting + +def example(): + sample_id = grib_new_from_samples("regular_ll_sfc_grib1") + fin = open(INPUT) + fout = open(OUTPUT,'w') + + keys = { + 'dataDate':20080104, + 'startStep':0, + 'endStep':12, + 'stepType':'accum', + 'table2Version':2, + 'indicatorOfParameter':61, + 'decimalPrecision':2, + } + + prev_vals = None + while 1: + gid = grib_new_from_file(fin) + if gid is None: break + + curr_vals = grib_get_values(gid) + + if prev_vals is None: + result = prev_vals = curr_vals + else: + try: + # works with NumPy + result = curr_vals - prev_vals + except TypeError: # but not with array + result = curr_vals + for i in range(len(result)): + result[i] -= prev_vals[i] + + prev_vals = curr_vals + keys['startStep'] += 12 + keys['endStep'] += 12 + + clone_id = grib_clone(sample_id) + + for key in keys: + grib_set(clone_id,key,keys[key]) + + grib_set_values(clone_id,result * 1000) + + grib_write(clone_id,fout) + + grib_release(gid) + + fin.close() + fout.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/samples.sh b/examples/python/samples.sh new file mode 100755 index 000000000..f93ba6499 --- /dev/null +++ b/examples/python/samples.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +REDIRECT=/dev/null +$PYTHON samples.py 2> $REDIRECT > $REDIRECT +rm out.grib || true diff --git a/examples/python/set.py b/examples/python/set.py new file mode 100644 index 000000000..d203ccc94 --- /dev/null +++ b/examples/python/set.py @@ -0,0 +1,72 @@ +import traceback +import sys + +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +from gribapi import * +from datetime import date + +INPUT='../../data/regular_latlon_surface_constant.grib1' +OUTPUT='out.grib' +VERBOSE=1 # verbose error reporting + +def example(): + fin = open(INPUT) + fout = open(OUTPUT,'w') + gid = grib_new_from_file(fin) + + dt = date.today() + today = "%d%02d%02d" % (dt.year,dt.month,dt.day) + grib_set(gid,'dataDate',int(today)) + grib_set(gid,'centre',80) + + centreIntVal = grib_get(gid,'centre',int) + centreStrVal = grib_get(gid,'centre',str) + dateStrVal = grib_get(gid,'dataDate',str) + assert(centreIntVal == 80) + assert(centreStrVal == 'cnmc') + assert(dateStrVal == today) + print 'get centre as a integer - centre = %d' % centreIntVal + print 'get centre as a string - centre = %s' % centreStrVal + print 'get date as a string - date = %s' % dateStrVal + + # Now do the same but using set_key_vals, setting keys all at once + grib_set_key_vals(gid, 'level=1,centre=98') # with a String + assert(grib_get(gid,'centre',str) == 'ecmf') + assert(grib_get(gid,'level',int) == 1) + + grib_set_key_vals(gid, ['level=2', 'centre=kwbc']) # with a Tuple + assert(grib_get(gid,'centre',int) == 7) + assert(grib_get(gid,'level',int) == 2) + + grib_set_key_vals(gid, {'level': 3, 'centre': 84}) # with a Dictionary + assert(grib_get(gid,'centre',str) == 'lfpw') + assert(grib_get(gid,'level',int) == 3) + + grib_gts_header(True) + grib_gts_header(False) + + grib_write(gid,fout) + grib_release(gid) + fin.close() + fout.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/set.sh b/examples/python/set.sh new file mode 100755 index 000000000..4dc5b5d2f --- /dev/null +++ b/examples/python/set.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +REDIRECT=/dev/null +$PYTHON set.py 2> $REDIRECT > $REDIRECT +rm out.grib || true diff --git a/examples/python/set_missing.py b/examples/python/set_missing.py new file mode 100644 index 000000000..fd7dd9a61 --- /dev/null +++ b/examples/python/set_missing.py @@ -0,0 +1,39 @@ +import traceback +import sys + +from gribapi import * + +INPUT='../../data/tigge/tigge_ecmf_pl_t.grib' +OUTPUT='out.grib' +VERBOSE=1 # verbose error reporting + +def example(): + fin = open(INPUT) + fout = open(OUTPUT,'w') + + gid = grib_new_from_file(fin) + + # set type of level to surface + grib_set(gid,'typeOfFirstFixedSurface','sfc') + grib_set_missing(gid,'scaleFactorOfFirstFixedSurface') + grib_set_missing(gid,'scaledValueOfFirstFixedSurface') + + grib_write(gid,fout) + + grib_release(gid) + fin.close() + fout.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/examples/python/set_missing.sh b/examples/python/set_missing.sh new file mode 100755 index 000000000..a63ff8e73 --- /dev/null +++ b/examples/python/set_missing.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +REDIRECT=/dev/null +$PYTHON set_missing.py 2> $REDIRECT > $REDIRECT +rm out.grib || true diff --git a/examples/python/set_pv.py b/examples/python/set_pv.py new file mode 100644 index 000000000..dcd552c55 --- /dev/null +++ b/examples/python/set_pv.py @@ -0,0 +1,46 @@ +import traceback +import sys + +from gribapi import * + +VERBOSE=1 # verbose error reporting + +def example(): + """ + Encoding of the pv coefficients. + """ + # read the coefficients from file + pv = [] + for line in open('../../data/60_model_levels'): + pv.extend([float(x) for x in line.strip().split('\t')]) + + numberOfLevels = 60 + numberOfCoefficients = 2 * (numberOfLevels + 1) + assert(len(pv) == numberOfCoefficients) + + fout = open('out.grib1','w') + gid = grib_new_from_samples('reduced_gg_sfc_grib1') + + grib_set(gid,'typeOfLevel','hybrid') + grib_set(gid,'level',2) + grib_set(gid,'PVPresent',1) + grib_set_array(gid,'pv',pv) + + grib_write(gid,fout) + + grib_release(gid) + fout.close() + +def main(): + try: + example() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/examples/run_examples.sh b/examples/run_examples.sh new file mode 100644 index 000000000..1b03d917d --- /dev/null +++ b/examples/run_examples.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -e + +./get +./set +./iterator +./keys_iterator +./precision + + diff --git a/examples/set.c b/examples/set.c new file mode 100644 index 000000000..4b43d0c25 --- /dev/null +++ b/examples/set.c @@ -0,0 +1,86 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: set + * + * Description: how to set key values. + * + * + * + * + */ +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + long centre=80; + long long_value=0; + char string_value[100]; + size_t len = sizeof(string_value)/sizeof(char); + size_t size=0; + + FILE* in = NULL; + char* infile = "../data/regular_latlon_surface.grib1"; + FILE* out = NULL; + char* outfile = "out.grib1"; + grib_handle *h = NULL; + const void* buffer = NULL; + + in = fopen(infile,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",infile); + return 1; + } + + out = fopen(outfile,"w"); + if(!out) { + printf("ERROR: unable to open file %s\n",outfile); + return 1; + } + + /* create a new handle from a message in a file */ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",infile); + } + + /* set centre as a long */ + GRIB_CHECK(grib_set_long(h,"centre",centre),0); + + /* get centre as a long */ + GRIB_CHECK(grib_get_long(h,"centre",&long_value),0); + printf("centre long value=%ld\n",long_value); + + /* get centre as a string */ + GRIB_CHECK(grib_get_string(h,"centre",string_value,&len),0); + printf("centre string value=%s\n",string_value); + + /* get the coded message in a buffer */ + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + /* write the buffer in a file*/ + if(fwrite(buffer,1,size,out) != size) + { + perror(argv[1]); + exit(1); + } + + /* delete handle */ + grib_handle_delete(h); + + fclose(in); + fclose(out); + + return 0; +} diff --git a/examples/set.sh b/examples/set.sh new file mode 100755 index 000000000..433107507 --- /dev/null +++ b/examples/set.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}set > /dev/null + + diff --git a/examples/set_bitmap.c b/examples/set_bitmap.c new file mode 100644 index 000000000..d0a4cb584 --- /dev/null +++ b/examples/set_bitmap.c @@ -0,0 +1,92 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: set_bitmap + * + * Description: how to set a bitmap in a grib message + * + * + * + * + */ + +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + size_t size=0; + + FILE* in = NULL; + char* infile = "../data/regular_latlon_surface.grib1"; + FILE* out = NULL; + char* outfile = "out.grib1"; + grib_handle *h = NULL; + const void* buffer = NULL; + size_t values_len; + double* values; + double missing=0; + int i=0; + + in = fopen(infile,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",infile); + return 1; + } + + out = fopen(outfile,"w"); + if(!in) { + printf("ERROR: unable to open file %s\n",outfile); + return 1; + } + + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",infile); + } + + GRIB_CHECK(grib_get_double(h,"missingValue",&missing),0); + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + /* get data values*/ + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + GRIB_CHECK(grib_set_long(h,"bitmapPresent",1),0); + + for(i = 0; i < 10; i++) + values[i]=missing; + + GRIB_CHECK(grib_set_double_array(h,"values",values,values_len),0); + + /* get the coded message in a buffer */ + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + /* write the buffer in a file*/ + if(fwrite(buffer,1,size,out) != size) + { + perror(outfile); + exit(1); + } + + /* delete handle */ + grib_handle_delete(h); + + fclose(in); + fclose(out); + + return 0; +} diff --git a/examples/set_fortran.F b/examples/set_fortran.F new file mode 100644 index 000000000..c865ef0ce --- /dev/null +++ b/examples/set_fortran.F @@ -0,0 +1,68 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C +C +C Fortran 77 Implementation: set_fortran +C +C Description: how to set key values. +C +C +C +C +C + program set + implicit none + include 'grib_api_fortran.h' + integer err + integer*4 centre + integer*4 int_value + character*10 string_value + character*20 string_centre + integer len + integer size + integer infile,outfile + integer igrib,iret + character*256 error + + infile=5 + outfile=6 + + call grib_check(grib_open_file(infile + X,'../data/regular_latlon_surface.grib1','r')) + + call grib_check(grib_open_file(outfile + X,'../data/out.grib1','w')) + +C a new grib message is loaded from file +C igrib is the grib id to be used in subsequent calls + call grib_check(grib_new_from_file(infile,igrib)) + +C set centre as a long */ + centre=80 + call grib_check(grib_set_int(igrib,'centre',centre)) + +C get centre as a integer*4 + call grib_check(grib_get_int(igrib,'centre',int_value)) + write(*,*) 'centre=',int_value + +C get centre as a string + call grib_check(grib_get_string(igrib,'centre',string_value)) + string_centre='centre='//string_value + write(*,*) string_centre + +C write modified message to a file + call grib_check(grib_write(igrib,outfile)) + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(infile)) + + call grib_check(grib_close_file(outfile)) + + end diff --git a/examples/set_fortran.sh b/examples/set_fortran.sh new file mode 100755 index 000000000..fc761ef13 --- /dev/null +++ b/examples/set_fortran.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. ./include.sh + +${examples_dir}set_fortran > /dev/null + + diff --git a/examples/set_pv.c b/examples/set_pv.c new file mode 100644 index 000000000..ce4ad5bbb --- /dev/null +++ b/examples/set_pv.c @@ -0,0 +1,79 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: set + * + * Description: how to set pv . + * + * + * + * + */ +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + long PVPresent=1; + size_t size=0; + double pv[4]={1,2,3,4}; + size_t pvsize=4; + + FILE* in = NULL; + char* infile = "../data/regular_latlon_surface.grib1"; + FILE* out = NULL; + char* outfile = "out.grib1"; + grib_handle *h = NULL; + const void* buffer = NULL; + + in = fopen(infile,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",infile); + return 1; + } + + out = fopen(outfile,"w"); + if(!in) { + printf("ERROR: unable to open file %s\n",outfile); + return 1; + } + + /* create a new handle from a message in a file */ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",infile); + } + + GRIB_CHECK(grib_set_long(h,"PVPresent",PVPresent),0); + + + GRIB_CHECK(grib_set_double_array(h,"pv",pv,pvsize),0); + + /* get the coded message in a buffer */ + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + /* write the buffer in a file*/ + if(fwrite(buffer,1,size,out) != size) + { + perror(argv[1]); + exit(1); + } + + /* delete handle */ + grib_handle_delete(h); + + fclose(in); + fclose(out); + + return 0; +} diff --git a/examples/set_pv_fortran.F b/examples/set_pv_fortran.F new file mode 100644 index 000000000..c5a2c02d2 --- /dev/null +++ b/examples/set_pv_fortran.F @@ -0,0 +1,55 @@ +C Copyright 2005-2012 ECMWF. +C +C This software is licensed under the terms of the Apache Licence Version 2.0 +C which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +C +C In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +C virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +C +C +C +C Fortran 77 Implementation: set_fortran +C +C Description: how to set pv values. +C +C +C +C +C + program set + implicit none + include 'grib_api_fortran.h' + integer err + integer infile,outfile + integer igrib,iret + character*256 error + real*8 pv + integer pvsize + dimension pv(4) + + pvsize=4 + infile=5 + outfile=6 + + call grib_check(grib_open_file(infile + X,'../data/regular_latlon_surface.grib1','r')) + + call grib_check(grib_open_file(outfile,'out.grib1','w')) + +C a new grib message is loaded from file +C igrib is the grib id to be used in subsequent calls + call grib_check(grib_new_from_file(infile,igrib)) + + call grib_check(grib_set_int(igrib,'PVPresent',1)) + call grib_check(grib_set_real8_array(igrib,'pv',pv,pvsize)) + +C write modified message to a file + call grib_check(grib_write(igrib,outfile)) + + call grib_check(grib_release(igrib)) + + call grib_check(grib_close_file(infile)) + + call grib_check(grib_close_file(outfile)) + + end diff --git a/fortran/CMakeLists.txt b/fortran/CMakeLists.txt new file mode 100644 index 000000000..133188e6b --- /dev/null +++ b/fortran/CMakeLists.txt @@ -0,0 +1,8 @@ +if( GRB_API_FORTRAN ) + + ecbuild_enable_fortran( REQUIRED ) + + # add here the building of fortran bindings + + +endif() diff --git a/fortran/Makefile.am b/fortran/Makefile.am new file mode 100644 index 000000000..1800146fc --- /dev/null +++ b/fortran/Makefile.am @@ -0,0 +1,54 @@ +# See http://www.delorie.com/gnu/docs/automake/automake_48.html + +AM_CFLAGS = @WARN_PEDANTIC@ + +lib_LTLIBRARIES = libgrib_api_f77.la libgrib_api_f90.la +include_HEADERS = grib_api_f77.h + +libgrib_api_f77_la_SOURCES= grib_fortran.c grib_f77.c +libgrib_api_f77_la_DEPENDENCIES = $(top_builddir)/src/libgrib_api.la +libgrib_api_f77_la_LDFLAGS = -release $(GRIB_API_MAIN_VERSION) + +libgrib_api_f90_la_SOURCES= grib_fortran.c grib_f90.f90 +libgrib_api_f90_la_DEPENDENCIES = $(top_builddir)/src/libgrib_api.la grib_api_externals.h grib_api_visibility.h grib_api_constants.h grib_kinds.h +libgrib_api_f90_la_LDFLAGS = -release $(GRIB_API_MAIN_VERSION) + +libgrib_api_fortran_prototypes= grib_fortran.c + +if UPPER_CASE_MOD_FALSE +nodist_include_HEADERS = grib_api.mod +grib_api.mod: grib_f90.o +else +nodist_include_HEADERS = GRIB_API.mod +GRIB_API.mod: grib_f90.o +endif + +# set the include path +INCLUDES= -I$(top_builddir)/src + +## Make sure these will be cleaned even when they're not built by +## default. +CLEANFILES = libgrib_api_f77.la libgrib_api_f90.la grib_f90.f90 *.mod grib_types grib_kinds.h + +#noinst_HEADERS = + +EXTRA_DIST= grib_fortran_prototypes.h grib_api_constants.h grib_api_externals.h \ + grib_api_visibility.h grib_types.f90 create_grib_f90.sh \ + grib_f90.f90.head grib_f90.f90.tail grib_f90_int.f90 grib_f90_long_int.f90 \ + same_int_long.f90 grib_fortran_kinds.c + +grib_f90.f90: grib_f90.f90.head grib_f90.f90.tail same_int_long grib_kinds.h + ./create_grib_f90.sh + +grib_f90.o : grib_kinds.h + +grib_kinds.h: grib_types + ./grib_types > grib_kinds.h + +grib_types: grib_types.o grib_fortran_kinds.o + $(FC) $(FCFLAGS) -o grib_types grib_types.o grib_fortran_kinds.o + +same_int_long: same_int_long.o grib_fortran_kinds.o + $(FC) $(FCFLAGS) -o same_int_long same_int_long.o grib_fortran_kinds.o + +include extrules.am diff --git a/fortran/create_grib_f90.sh b/fortran/create_grib_f90.sh new file mode 100755 index 000000000..cb8c619d1 --- /dev/null +++ b/fortran/create_grib_f90.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +same=`./same_int_long` + +if [ $same -eq 1 ] +then + interface=grib_f90_int.f90 +else + interface=grib_f90_long_int.f90 +fi +cat grib_f90.f90.head $interface grib_f90.f90.tail > grib_f90.f90 + diff --git a/fortran/extrules.am b/fortran/extrules.am new file mode 100644 index 000000000..bfeb597fa --- /dev/null +++ b/fortran/extrules.am @@ -0,0 +1 @@ +proto:;-p4 edit grib_fortran_prototypes.h;mkptypes -A $(libgrib_api_fortran_prototypes) > grib_fortran_prototypes.h diff --git a/fortran/fortranCtypes/sizes.c b/fortran/fortranCtypes/sizes.c new file mode 100644 index 000000000..913437fb6 --- /dev/null +++ b/fortran/fortranCtypes/sizes.c @@ -0,0 +1,45 @@ +#include + +void grib_check_fortran_char(char* a) { + if (*a != 't') exit(1); + *a='f'; +} +void grib_check_fortran_char_(char* a) {grib_check_fortran_char(a);} +void grib_check_fortran_char__(char* a) {grib_check_fortran_char(a);} + +void check_double(double *x,double *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_double_(double *x,double *y,char* ret) {check_double(x,y,ret);} +void check_double__(double *x,double *y,char* ret) {check_double(x,y,ret);} + +void check_float(float *x,float *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_float_(float *x,float *y,char* ret) { check_float(x,y,ret); } +void check_float__(float *x,float *y,char* ret) { check_float(x,y,ret); } + +void check_int(int *x,int *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_int_(int *x,int *y,char* ret) { check_int(x,y,ret); } +void check_int__(int *x,int *y,char* ret) { check_int(x,y,ret); } + +void check_long(long *x,long *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_long_(long *x,long *y,char* ret) {check_long(x,y,ret);} +void check_long__(long *x,long *y,char* ret) {check_long(x,y,ret);} + +void check_size_t(size_t *x,size_t *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_size_t_(size_t *x,size_t *y,char* ret) {check_size_t(x,y,ret);} +void check_size_t__(size_t *x,size_t *y,char* ret) {check_size_t(x,y,ret);} + +void check_long_long(long long *x,long long *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_long_long_(long long *x,long long *y,char* ret) {check_long_long(x,y,ret);} +void check_long_long__(long long *x,long long *y,char* ret) {check_long_long(x,y,ret);} + diff --git a/fortran/fortranCtypes/test.f90 b/fortran/fortranCtypes/test.f90 new file mode 100644 index 000000000..2a059fab0 --- /dev/null +++ b/fortran/fortranCtypes/test.f90 @@ -0,0 +1,165 @@ +integer function kind_of_long_long + integer(2), dimension(2) :: x2 = (/1, 2/) + integer(4), dimension(2) :: x4 = (/1, 2/) + integer(8), dimension(2) :: x8 = (/1, 2/) + character(len=1) :: ret + + kind_of_long_long=-1 + + call check_long_long(x2(0),x2(1),ret) + if (ret == 't') then + kind_of_long_long=2 + return + endif + + call check_long_long(x4(0),x4(1),ret) + if (ret == 't') then + kind_of_long_long=4 + return + endif + + call check_long_long(x8(0),x8(1),ret) + if (ret == 't') then + kind_of_long_long=8 + return + endif + +end function kind_of_long_long + +integer function kind_of_size_t + integer(2), dimension(2) :: x2 = (/1, 2/) + integer(4), dimension(2) :: x4 = (/1, 2/) + integer(8), dimension(2) :: x8 = (/1, 2/) + character(len=1) :: ret + + kind_of_size_t=-1 + + call check_size_t(x2(0),x2(1),ret) + if (ret == 't') then + kind_of_size_t=2 + return + endif + + call check_size_t(x4(0),x4(1),ret) + if (ret == 't') then + kind_of_size_t=4 + return + endif + + call check_size_t(x8(0),x8(1),ret) + if (ret == 't') then + kind_of_size_t=8 + return + endif + +end function kind_of_size_t + +integer function kind_of_long + integer(2), dimension(2) :: x2 = (/1, 2/) + integer(4), dimension(2) :: x4 = (/1, 2/) + integer(8), dimension(2) :: x8 = (/1, 2/) + character(len=1) :: ret + + kind_of_long=-1 + + call check_long(x2(0),x2(1),ret) + if (ret == 't') then + kind_of_long=2 + return + endif + + call check_long(x4(0),x4(1),ret) + if (ret == 't') then + kind_of_long=4 + return + endif + + call check_long(x8(0),x8(1),ret) + if (ret == 't') then + kind_of_long=8 + return + endif + +end function kind_of_long + +integer function kind_of_int + integer(2), dimension(2) :: x2 = (/1, 2/) + integer(4), dimension(2) :: x4 = (/1, 2/) + integer(8), dimension(2) :: x8 = (/1, 2/) + character(len=1) :: ret + + kind_of_int=-1 + + call check_int(x2(0),x2(1),ret) + if (ret == 't') then + kind_of_int=2 + return + endif + + call check_int(x4(0),x4(1),ret) + if (ret == 't') then + kind_of_int=4 + return + endif + + call check_int(x8(0),x8(1),ret) + if (ret == 't') then + kind_of_int=8 + return + endif + +end function kind_of_int + +integer function kind_of_float + real(4), dimension(2) :: x4 = (/1., 2./) + real(8), dimension(2) :: x8 = (/1., 2./) + character(len=1) :: ret + + kind_of_float=-1 + + call check_float(x4(0),x4(1),ret) + if (ret == 't') then + kind_of_float=4 + return + endif + + call check_float(x8(0),x8(1),ret) + if (ret == 't') then + kind_of_float=8 + return + endif + +end function kind_of_float + +integer function kind_of_double + real(4), dimension(2) :: real4 = (/1., 2./) + real(8), dimension(2) :: real8 = (/1., 2./) + character(len=1) :: ret + + kind_of_double=-1 + + call check_double(real4(0),real4(1),ret) + if (ret == 't') then + kind_of_double=4 + return + endif + + call check_double(real8(0),real8(1),ret) + if (ret == 't') then + kind_of_double=8 + return + endif + +end function kind_of_double + +program test + + print *,'kind_of_double=',kind_of_double() + print *,'kind_of_float=',kind_of_float() + print *,'kind_of_int=',kind_of_int() + print *,'kind_of_long=',kind_of_long() + print *,'kind_of_size_t=',kind_of_size_t() + print *,'kind_of_long_long=',kind_of_long_long() + +end program test + diff --git a/fortran/grib_api_constants.h b/fortran/grib_api_constants.h new file mode 100644 index 000000000..9b6830b26 --- /dev/null +++ b/fortran/grib_api_constants.h @@ -0,0 +1,57 @@ + integer, parameter,public :: GRIB_INVALID_KEY_VALUE = -55 + integer, parameter,public :: GRIB_VALUE_DIFFERENT = -54 + integer, parameter,public :: GRIB_DIFFERENT_EDITION = -53 + integer, parameter,public :: GRIB_INVALID_BPV = -52 + integer, parameter,public :: GRIB_CORRUPTED_INDEX = -51 + integer, parameter,public :: GRIB_MESSAGE_MALFORMED = -50 + integer, parameter,public :: GRIB_UNDERFLOW = -49 + integer, parameter,public :: GRIB_SWITCH_NO_MATCH = -48 + integer, parameter,public :: GRIB_CONSTANT_FIELD = -47 + integer, parameter,public :: GRIB_MESSAGE_TOO_LARGE = -46 + integer, parameter,public :: GRIB_INTERNAL_ARRAY_TOO_SMALL = -45 + integer, parameter,public :: GRIB_PREMATURE_END_OF_FILE = -44 + integer, parameter,public :: GRIB_NULL_INDEX = -43 + integer, parameter,public :: GRIB_END_OF_INDEX = -42 + integer, parameter,public :: GRIB_WRONG_GRID = -41 + integer, parameter,public :: GRIB_NO_VALUES = -40 + integer, parameter,public :: GRIB_END = -39 + integer, parameter,public :: GRIB_WRONG_TYPE = -38 + integer, parameter,public :: GRIB_NO_DEFINITIONS = -37 + integer, parameter,public :: GRIB_CONCEPT_NO_MATCH = -36 + integer, parameter,public :: GRIB_OUT_OF_AREA = -35 + integer, parameter,public :: GRIB_MISSING_KEY = -34 + integer, parameter,public :: GRIB_INVALID_ORDERBY = -33 + integer, parameter,public :: GRIB_INVALID_NEAREST = -32 + integer, parameter,public :: GRIB_INVALID_KEYS_ITERATOR = -31 + integer, parameter,public :: GRIB_INVALID_ITERATOR = -30 + integer, parameter,public :: GRIB_INVALID_INDEX = -29 + integer, parameter,public :: GRIB_INVALID_GRIB = -28 + integer, parameter,public :: GRIB_INVALID_FILE = -27 + integer, parameter,public :: GRIB_WRONG_STEP_UNIT = -26 + integer, parameter,public :: GRIB_WRONG_STEP = -25 + integer, parameter,public :: GRIB_INVALID_TYPE = -24 + integer, parameter,public :: GRIB_WRONG_LENGTH = -23 + integer, parameter,public :: GRIB_VALUE_CANNOT_BE_MISSING = -22 + integer, parameter,public :: GRIB_INVALID_SECTION_NUMBER = -21 + integer, parameter,public :: GRIB_NULL_HANDLE = -20 + integer, parameter,public :: GRIB_INVALID_ARGUMENT = -19 + integer, parameter,public :: GRIB_READ_ONLY = -18 + integer, parameter,public :: GRIB_OUT_OF_MEMORY = -17 + integer, parameter,public :: GRIB_GEOCALCULUS_PROBLEM = -16 + integer, parameter,public :: GRIB_NO_MORE_IN_SET = -15 + integer, parameter,public :: GRIB_ENCODING_ERROR = -14 + integer, parameter,public :: GRIB_DECODING_ERROR = -13 + integer, parameter,public :: GRIB_INVALID_MESSAGE = -12 + integer, parameter,public :: GRIB_IO_PROBLEM = -11 + integer, parameter,public :: GRIB_NOT_FOUND = -10 + integer, parameter,public :: GRIB_WRONG_ARRAY_SIZE = -9 + integer, parameter,public :: GRIB_CODE_NOT_FOUND_IN_TABLE = -8 + integer, parameter,public :: GRIB_FILE_NOT_FOUND = -7 + integer, parameter,public :: GRIB_ARRAY_TOO_SMALL = -6 + integer, parameter,public :: GRIB_7777_NOT_FOUND = -5 + integer, parameter,public :: GRIB_NOT_IMPLEMENTED = -4 + integer, parameter,public :: GRIB_BUFFER_TOO_SMALL = -3 + integer, parameter,public :: GRIB_INTERNAL_ERROR = -2 + integer, parameter,public :: GRIB_END_OF_FILE = -1 + integer, parameter,public :: GRIB_SUCCESS = 0 + integer, parameter,public :: GRIB_NULL = -1 diff --git a/fortran/grib_api_externals.h b/fortran/grib_api_externals.h new file mode 100644 index 000000000..c7bc75be7 --- /dev/null +++ b/fortran/grib_api_externals.h @@ -0,0 +1,62 @@ +integer, external :: grib_f_open_file, grib_f_close_file, & + grib_f_read_file,grib_f_write_file +integer, external :: grib_f_multi_support_on, grib_f_multi_support_off +integer, external :: grib_f_keys_iterator_new, & + grib_f_keys_iterator_next, & + grib_f_keys_iterator_delete +integer, external :: grib_f_skip_computed, & + grib_f_skip_coded, & + grib_f_skip_edition_specific, & + grib_f_skip_duplicates, & + grib_f_skip_read_only, & + grib_f_skip_function +integer, external :: grib_f_keys_iterator_get_name, & + grib_f_keys_iterator_rewind +integer, external :: grib_f_new_from_message, & + grib_f_new_from_message_copy, & + grib_f_new_from_template, & + grib_f_new_from_samples, & + grib_f_read_any_from_file, & + grib_f_new_from_file, & + grib_f_headers_only_new_from_file +integer, external :: grib_f_release +integer, external :: grib_f_dump, grib_f_print +integer, external :: grib_f_get_error_string +integer, external :: grib_f_get_size_int,grib_f_get_size_long +integer, external :: grib_f_get_data_real4,grib_f_get_data_real8 +integer, external :: grib_f_get_int, grib_f_get_long,grib_f_get_int_array, & + grib_f_get_long_array,grib_f_get_real4,& + grib_f_get_real4_array, & + grib_f_get_real8, grib_f_get_real8_array, & + grib_f_get_real4_element, grib_f_get_real8_element, & + grib_f_get_real4_elements, grib_f_get_real8_elements, & + grib_f_get_string,grib_f_is_missing,grib_f_is_defined +integer, external :: grib_f_new_from_index, & + grib_f_index_new_from_file, & + grib_f_index_add_file, & + grib_f_index_read, & + grib_f_index_write, & + grib_f_index_release, & + grib_f_index_get_size_long, & + grib_f_index_get_size_int, & + grib_f_index_get_int, & + grib_f_index_get_long, & + grib_f_index_get_string, & + grib_f_index_get_real8, & + grib_f_index_select_real8, & + grib_f_index_select_string, & + grib_f_index_select_int, & + grib_f_index_select_long + +integer, external :: grib_f_set_int, grib_f_set_int_array, & + grib_f_set_long, grib_f_set_long_array, & + grib_f_set_real4, grib_f_set_real4_array, & + grib_f_set_real8, grib_f_set_real8_array, & + grib_f_set_string, grib_f_set_missing, & + grib_f_gribex_mode_on,grib_f_gribex_mode_off, & + grib_f_find_nearest_single,grib_f_find_nearest_four_single,grib_f_find_nearest_multiple +integer, external :: grib_f_get_message_size, grib_f_copy_message, grib_f_count_in_file +integer, external :: grib_f_write, grib_f_multi_write, grib_f_multi_append +integer, external :: grib_f_clone, grib_f_copy_namespace +external :: grib_f_check +integer, external :: grib_f_util_sections_copy diff --git a/fortran/grib_api_f77.h b/fortran/grib_api_f77.h new file mode 100644 index 000000000..6b7b54614 --- /dev/null +++ b/fortran/grib_api_f77.h @@ -0,0 +1,107 @@ + integer grib_open_file + external grib_open_file + integer grib_close_file + external grib_close_file + integer grib_read_file + external grib_read_file + integer grib_new_from_message + external grib_new_from_message + integer grib_new_from_template + external grib_new_from_template + integer grib_clone + external grib_clone + integer grib_new_from_file + external grib_new_from_file + integer grib_multi_support_on + external grib_multi_support_on + integer grib_multi_support_off + external grib_multi_support_off + integer grib_gribex_mode_on + external grib_gribex_mode_on + integer grib_gribex_mode_off + external grib_gribex_mode_off + integer grib_release + external grib_release + integer grib_get_data + external grib_get_data + integer grib_iterator_new + external grib_iterator_new + integer grib_iterator_next + external grib_iterator_next + integer grib_iterator_delete + external grib_iterator_delete + integer grib_dump + external grib_dump + integer grib_get_error_string + external grib_get_error_string + integer grib_get_size + external grib_get_size + integer grib_get_int + external grib_get_int + integer grib_get_int_array + external grib_get_int_array + integer grib_set_int_array + external grib_set_int_array + integer grib_set_int + external grib_set_int + integer grib_set_missing + integer grib_set_real4 + external grib_set_real4 + integer grib_get_real4 + external grib_get_real4 + integer grib_get_real4_element + external grib_get_real4_element + integer grib_get_real4_array + external grib_get_real4_array + integer grib_set_real4_array + external grib_set_real4_array + integer grib_set_real8 + external grib_set_real8 + integer grib_get_real8 + external grib_get_real8 + integer grib_get_real8_element + external grib_get_real8_element + integer grib_get_real8_array + external grib_get_real8_array + integer grib_set_real8_array + external grib_set_real8_array + integer grib_get_string + external grib_get_string + integer grib_is_missing + external grib_is_missing + integer grib_is_defined + external grib_is_defined + integer grib_set_string + external grib_copy_namespace + integer grib_copy_namespace + external grib_set_string + integer grib_get_message_size + external grib_get_message_size + integer grib_write + external grib_write + integer grib_multi_write + external grib_multi_write + integer grib_multi_append + external grib_multi_append + integer grib_keys_iterator_new + external grib_keys_iterator_new + integer grib_keys_iterator_next + external grib_keys_iterator_next + integer grib_keys_iterator_delete + external grib_keys_iterator_delete + integer grib_skip_computed + external grib_skip_computed + integer grib_skip_coded + external grib_skip_coded + integer grib_skip_edition_specific + external grib_skip_edition_specific + integer grib_skip_duplicates + external grib_skip_duplicates + integer grib_skip_read_only + external grib_skip_read_only + integer grib_skip_function + external grib_skip_function + integer grib_keys_iterator_get_name + external grib_keys_iterator_get_name + integer grib_keys_iterator_rewind + external grib_keys_iterator_rewind diff --git a/fortran/grib_api_visibility.h b/fortran/grib_api_visibility.h new file mode 100644 index 000000000..fead19c45 --- /dev/null +++ b/fortran/grib_api_visibility.h @@ -0,0 +1,26 @@ +public :: grib_get, grib_set, grib_get_data, grib_is_missing, grib_is_defined +public :: grib_open_file, grib_close_file,grib_read_bytes,grib_write_bytes +public :: grib_multi_support_on, grib_multi_support_off +public :: grib_keys_iterator_new, & + grib_keys_iterator_next, & + grib_keys_iterator_delete +public :: grib_skip_computed, & + grib_skip_coded, & + grib_skip_duplicates, & + grib_skip_read_only +public :: grib_keys_iterator_get_name, & + grib_keys_iterator_rewind +public :: grib_new_from_message, grib_new_from_template, & + grib_new_from_samples, grib_new_from_file, & + grib_read_from_file,grib_headers_only_new_from_file +public :: grib_release +public :: grib_dump +public :: grib_get_error_string +public :: grib_get_size +public :: grib_get_message_size, grib_copy_message +public :: grib_write, grib_multi_append +public :: grib_check +public :: grib_clone, grib_copy_namespace +public :: grib_index_get,grib_index_select,& + grib_index_create,grib_index_get_size,grib_index_release,& + grib_util_sections_copy diff --git a/fortran/grib_f77.c b/fortran/grib_f77.c new file mode 100644 index 000000000..2162d763e --- /dev/null +++ b/fortran/grib_f77.c @@ -0,0 +1,518 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include "grib_fortran_prototypes.h" + +int grib_read_file_(int* fid, char* buffer, int* nbytes) { + return grib_f_read_file_(fid,buffer,nbytes); +} + +int grib_read_file__(int* fid, char* buffer, int* nbytes) { + return grib_f_read_file_(fid,buffer,nbytes); +} + +int grib_open_file_(int* fid, char* name , char* op, int lname, int lop){ + return grib_f_open_file_( fid, name , op, lname, lop); +} + +int grib_open_file__(int* fid, char* name , char* op, int lname, int lop){ + return grib_f_open_file_( fid, name , op, lname, lop); +} + +int grib_close_file_(int* fid){ + return grib_f_close_file_(fid); +} + +int grib_close_file__(int* fid){ + return grib_f_close_file_(fid); +} + +int grib_multi_support_on_(){ + return grib_f_multi_support_on_(); +} + +int grib_multi_support_on__(){ + return grib_f_multi_support_on_(); +} + +int grib_multi_support_off_(){ + return grib_f_multi_support_off_(); +} + +int grib_multi_support_off__(){ + return grib_f_multi_support_off_(); +} + +int grib_iterator_new_(int* gid,int* iterid,int* mode) { + return grib_f_iterator_new_(gid,iterid,mode); +} + +int grib_iterator_new__(int* gid,int* iterid,int* mode) { + return grib_f_iterator_new_(gid,iterid,mode); +} + +int grib_iterator_next_(int* iterid,double* lat,double* lon,double* value) { + return grib_f_iterator_next_(iterid,lat,lon,value); +} + +int grib_iterator_next__(int* iterid,double* lat,double* lon,double* value) { + return grib_f_iterator_next_(iterid,lat,lon,value); +} + +int grib_iterator_delete_(int* iterid) { + return grib_f_iterator_delete_(iterid); +} + +int grib_iterator_delete__(int* iterid) { + return grib_f_iterator_delete_(iterid); +} + +int grib_keys_iterator_new__(int* gid,int* iterid,char* name_space,int len) { + return grib_f_keys_iterator_new_(gid,iterid,name_space,len); +} + +int grib_keys_iterator_new_(int* gid,int* iterid,char* name_space,int len) { + return grib_f_keys_iterator_new_(gid,iterid,name_space,len); +} + +int grib_keys_iterator_next_(int* iterid) { + return grib_f_keys_iterator_next_(iterid); +} + +int grib_keys_iterator_next__(int* iterid) { + return grib_f_keys_iterator_next_(iterid); +} + +int grib_keys_iterator_delete_(int* iterid) { + return grib_f_keys_iterator_delete_(iterid); +} + +int grib_keys_iterator_delete__(int* iterid) { + return grib_f_keys_iterator_delete_(iterid); +} + +int grib_gribex_mode_on_() { + grib_gribex_mode_on(0); + return GRIB_SUCCESS; +} + +int grib_gribex_mode_on__() { + grib_gribex_mode_on(0); + return GRIB_SUCCESS; +} + +int grib_gribex_mode_off_() { + grib_gribex_mode_off(0); + return GRIB_SUCCESS; +} + +int grib_gribex_mode_off__() { + grib_gribex_mode_off(0); + return GRIB_SUCCESS; +} + +int grib_skip_computed_(int* iterid) { + return grib_skip_computed_(iterid); +} + +int grib_skip_computed__(int* iterid) { + return grib_skip_computed_(iterid); +} + +int grib_skip_coded_(int* iterid) { + return grib_f_skip_coded_(iterid); +} + +int grib_skip_coded__(int* iterid) { + return grib_f_skip_coded_(iterid); +} + +int grib_skip_edition_specific_(int* iterid) { + return grib_f_skip_edition_specific_(iterid); +} + +int grib_skip_edition_specific__(int* iterid) { + return grib_f_skip_edition_specific_(iterid); +} + +int grib_skip_duplicates_(int* iterid) { + return grib_f_skip_duplicates_(iterid); +} + +int grib_skip_duplicates__(int* iterid) { + return grib_f_skip_duplicates_(iterid); +} + +int grib_skip_read_only_(int* iterid) { + return grib_f_skip_read_only_(iterid); +} + +int grib_skip_read_only__(int* iterid) { + return grib_f_skip_read_only_(iterid); +} + +int grib_skip_function_(int* iterid) { + return grib_f_skip_function_(iterid); +} + +int grib_skip_function__(int* iterid) { + return grib_f_skip_function_(iterid); +} + +int grib_keys_iterator_get_name_(int* kiter,char* name,int len) { + return grib_f_keys_iterator_get_name_(kiter,name,len); +} + +int grib_keys_iterator_get_name__(int* kiter,char* name,int len) { + return grib_f_keys_iterator_get_name_(kiter,name,len); +} + +int grib_keys_iterator_rewind_(int* kiter) { + return grib_f_keys_iterator_rewind_(kiter); +} + +int grib_keys_iterator_rewind__(int* kiter) { + return grib_f_keys_iterator_rewind_(kiter); +} + +int grib_new_from_message_(int* gid, void* buffer , size_t* bufsize){ + return grib_f_new_from_message_(gid, buffer , bufsize); +} + +int grib_new_from_message__(int* gid, void* buffer , size_t* bufsize){ + return grib_f_new_from_message_(gid, buffer , bufsize); +} + +int grib_new_from_message_copy_(int* gid, void* buffer , size_t* bufsize){ + return grib_f_new_from_message_copy_(gid, buffer , bufsize); +} + +int grib_new_from_message_copy__(int* gid, void* buffer , size_t* bufsize){ + return grib_f_new_from_message_copy_(gid, buffer , bufsize); +} + +int grib_new_from_samples_(int* gid, char* name , int lname){ + return grib_f_new_from_samples_( gid, name , lname); +} + +int grib_new_from_samples__(int* gid, char* name , int lname){ + return grib_f_new_from_samples_( gid, name , lname); +} + +int grib_new_from_template_(int* gid, char* name , int lname){ + return grib_f_new_from_template_( gid, name , lname); +} + +int grib_new_from_template__(int* gid, char* name , int lname){ + return grib_f_new_from_template_( gid, name , lname); +} + +int grib_clone_(int* gidsrc,int* giddest){ + return grib_f_clone_(gidsrc, giddest); +} + +int grib_clone__(int* gidsrc,int* giddest){ + return grib_f_clone_(gidsrc, giddest); +} + +int grib_new_from_file_(int* fid, int* gid){ + return grib_f_new_from_file_( fid, gid); +} + +int grib_new_from_file__(int* fid, int* gid){ + return grib_f_new_from_file_( fid, gid); +} + +int grib_release_(int* hid){ + return grib_f_release_( hid); +} + +int grib_release__(int* hid){ + return grib_f_release_( hid); +} + +int grib_dump_(int* gid){ + return grib_f_dump_( gid); +} + +int grib_dump__(int* gid){ + return grib_f_dump_( gid); +} + +int grib_get_error_string_(int* err, char* buf, int len){ + return grib_f_get_error_string_(err,buf,len); +} + +int grib_get_error_string__(int* err, char* buf, int len){ + return grib_f_get_error_string_(err,buf,len); +} + +int grib_get_size_(int* gid, char* key, int* val, int len){ + return grib_f_get_size_int_( gid, key, val, len); +} + +int grib_get_size__(int* gid, char* key, int* val, int len){ + return grib_f_get_size_int_( gid, key, val, len); +} + +int grib_get_int_(int* gid, char* key, int* val, int len){ + return grib_f_get_int_( gid, key, val, len); +} + +int grib_get_int__(int* gid, char* key, int* val, int len){ + return grib_f_get_int_( gid, key, val, len); +} + +int grib_get_int_array_(int* gid, char* key, int*val, int* size, int len){ + return grib_f_get_int_array_( gid, key, val, size, len); +} + +int grib_get_int_array__(int* gid, char* key, int*val, int* size, int len){ + return grib_f_get_int_array_( gid, key, val, size, len); +} + +int grib_set_int_array_(int* gid, char* key, int* val, int* size, int len){ + return grib_f_set_int_array_( gid, key, val, size, len); +} + +int grib_set_int_array__(int* gid, char* key, int* val, int* size, int len){ + return grib_f_set_int_array_( gid, key, val, size, len); +} + +int grib_set_int_(int* gid, char* key, int* val, int len){ + return grib_f_set_int_( gid, key, val, len); +} + +int grib_set_int__(int* gid, char* key, int* val, int len){ + return grib_f_set_int_( gid, key, val, len); +} + +int grib_set_missing_(int* gid, char* key, int len){ + return grib_f_set_missing_( gid, key, len); +} + +int grib_set_missing__(int* gid, char* key, int len){ + return grib_f_set_missing_( gid, key, len); +} + +int grib_set_real4_(int* gid, char* key, float* val, int len){ + return grib_f_set_real4_( gid, key, val, len); +} + +int grib_set_real4__(int* gid, char* key, float* val, int len){ + return grib_f_set_real4_( gid, key, val, len); +} + +int grib_get_real4_(int* gid, char* key, float* val, int len){ + return grib_f_get_real4_( gid, key, val, len); +} + +int grib_get_real4__(int* gid, char* key, float* val, int len){ + return grib_f_get_real4_( gid, key, val, len); +} + +int grib_get_real4_array_(int* gid, char* key, float* val, int* size, int len){ + return grib_f_get_real4_array_( gid, key, val, size, len); +} + +int grib_get_real4_element_(int* gid, char* key, int* index,float* val, int len){ + return grib_f_get_real4_element_( gid, key, index,val, len); +} + +int grib_get_real4_element__(int* gid, char* key,int* index, float* val, int len){ + return grib_f_get_real4_element_( gid, key, index, val, len); +} + +int grib_get_real4_elements__(int* gid, char* key,int* index, float* val,int* len,int size){ + return grib_f_get_real4_elements_( gid, key, index, val, len,size); +} + +int grib_get_real4_elements_(int* gid, char* key,int* index, float* val,int* len,int size){ + return grib_f_get_real4_elements_( gid, key, index, val, len,size); +} + +int grib_get_real4_array__(int* gid, char* key, float* val, int* size, int len){ + return grib_f_get_real4_array_( gid, key, val, size, len); +} + +int grib_set_real4_array_(int* gid, char* key, float*val, int* size, int len){ + return grib_f_set_real4_array_( gid, key, val, size, len); +} + +int grib_set_real4_array__(int* gid, char* key, float*val, int* size, int len){ + return grib_f_set_real4_array_( gid, key, val, size, len); +} + +int grib_set_real8_(int* gid, char* key, double* val, int len){ + Assert(sizeof(double) == 8); + return grib_f_set_real8_( gid, key, val, len); +} + +int grib_set_real8__(int* gid, char* key, double* val, int len){ + Assert(sizeof(double) == 8); + return grib_f_set_real8_( gid, key, val, len); +} + +int grib_get_real8_(int* gid, char* key, double* val, int len){ + Assert(sizeof(double) == 8); + return grib_f_get_real8_( gid, key, val, len); +} + +int grib_get_real8__(int* gid, char* key, double* val, int len){ + Assert(sizeof(double) == 8); + return grib_f_get_real8_( gid, key, val, len); +} + +int grib_get_real8_element_(int* gid, char* key,int* index, double* val, int len){ + Assert(sizeof(double) == 8); + return grib_f_get_real8_element_( gid, key, index,val, len); +} + +int grib_get_real8_element__(int* gid, char* key,int* index, double* val, int len){ + Assert(sizeof(double) == 8); + return grib_f_get_real8_element_( gid, key, index,val, len); +} + +int grib_get_real8_elements_(int* gid, char* key, int* index,double* val, int* len,int size){ + return grib_f_get_real8_elements_( gid, key, index, val,len,size); +} + +int grib_get_real8_elements__(int* gid, char* key, int* index,double* val, int* len,int size){ + return grib_f_get_real8_elements_( gid, key, index, val,len,size); +} + + +int grib_get_real8_array_(int* gid, char* key, double*val, int* size, int len){ + Assert(sizeof(double) == 8); + return grib_f_get_real8_array_( gid, key, val, size, len); +} + +int grib_get_real8_array__(int* gid, char* key, double*val, int* size, int len){ + Assert(sizeof(double) == 8); + return grib_f_get_real8_array_( gid, key, val, size, len); +} + +int grib_set_real8_array_(int* gid, char* key, double *val, int* size, int len){ + Assert(sizeof(double) == 8); + return grib_f_set_real8_array_( gid, key, val, size, len); +} + +int grib_set_real8_array__(int* gid, char* key, double *val, int* size, int len){ + Assert(sizeof(double) == 8); + return grib_f_set_real8_array_( gid, key, val, size, len); +} + +int grib_get_string_(int* gid, char* key, char* val, int len, int len2){ + return grib_f_get_string_( gid, key, val, len, len2); +} + +int grib_get_string__(int* gid, char* key, char* val, int len, int len2){ + return grib_f_get_string_( gid, key, val, len, len2); +} + +int grib_set_string_(int* gid, char* key, char* val, int len, int len2){ + return grib_f_set_string_( gid, key, val, len, len2); +} + +int grib_set_string__(int* gid, char* key, char* val, int len, int len2){ + return grib_f_set_string_( gid, key, val, len, len2); +} + +int grib_get_message_size_(int* gid, size_t *len){ + return grib_f_get_message_size_( gid, len); +} + +int grib_get_message_size__(int* gid, size_t *len){ + return grib_f_get_message_size_( gid, len); +} + +void grib_check_(int* err){ + grib_f_check_(err,"","",0,0); +} + +void grib_check__(int* err){ + grib_f_check_(err,"","",0,0); +} + +int grib_write_(int* gid, int* fid) { + return grib_f_write_(gid,fid); +} + +int grib_write__(int* gid, int* fid) { + return grib_f_write_(gid,fid); +} + +int grib_multi_write_(int* gid, int* fid) { + return grib_f_multi_write_(gid,fid); +} + +int grib_multi_write__(int* gid, int* fid) { + return grib_f_multi_write_(gid,fid); +} + +int grib_multi_append_(int* ingid, int* sec,int* mgid) { + return grib_f_multi_append_(ingid,sec,mgid); +} + +int grib_multi_append__(int* ingid, int* sec,int* mgid) { + return grib_f_multi_append_(ingid,sec,mgid); +} + +int grib_find_nearest_multiple_(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes, int* npoints) { + + return grib_f_find_nearest_multiple_(gid,is_lsm, + inlats,inlons,outlats,outlons,values, + distances,indexes,npoints); +} +int grib_find_nearest_multiple__(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes, int* npoints) { + + return grib_f_find_nearest_multiple_(gid,is_lsm, + inlats,inlons,outlats,outlons,values, + distances,indexes,npoints); +} + +int grib_find_nearest_single_(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) { + + return grib_f_find_nearest_single_(gid,is_lsm, + inlats,inlons,outlats,outlons,values, + distances,indexes); +} +int grib_find_nearest_single__(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) { + + return grib_f_find_nearest_single_(gid,is_lsm, + inlats,inlons,outlats,outlons,values, + distances,indexes); +} + +int grib_copy_message_(int* gid, void* mess,size_t* len){ + return grib_f_copy_message_(gid, mess,len); +} +int grib_copy_message__(int* gid, void* mess,size_t* len){ + return grib_f_copy_message_(gid, mess,len); +} + + diff --git a/fortran/grib_f90.f90.head b/fortran/grib_f90.f90.head new file mode 100644 index 000000000..736c86010 --- /dev/null +++ b/fortran/grib_f90.f90.head @@ -0,0 +1,19 @@ +! Copyright 2005-2012 ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +! +!> Module grib_api +!> +!> The grib_api module provides the Fortran 90 interface of the GRIB API. +module grib_api + + implicit none + include "grib_kinds.h" + include "grib_api_constants.h" + include "grib_api_externals.h" + include "grib_api_visibility.h" + diff --git a/fortran/grib_f90.f90.tail b/fortran/grib_f90.f90.tail new file mode 100644 index 000000000..503543056 --- /dev/null +++ b/fortran/grib_f90.f90.tail @@ -0,0 +1,2635 @@ + + contains + + !> Set as missing the value for a key in a grib message. + !> + !> It can be used to set a missing value in the grib header but not in \n + !> the data values. To set missing data values see the bitmap examples.\n + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref set_missing.f90 "set_missing.f90" + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_set_missing ( gribid, key, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_set_missing ( gribid, key ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_set_missing','('//key//')') + endif + + end subroutine grib_set_missing + + !> Create a new index form a file. The file is indexed with the keys in argument. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of the newly created index + !> @param filename name of the file of messages to be indexed + !> @param keys : comma separated list of keys for the index. The type of the key can be explicitly declared appending :l for long, :d for double, :s for string to the key name. If the type is not declared explicitly, the native type is assumed. + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_create ( indexid, filename, keys, status ) + integer(kind=kindOfInt), intent(inout) :: indexid + character(len=*), intent(in) :: filename + character(len=*), intent(in) :: keys + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_new_from_file(filename,keys,indexid) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_create_index','('//filename//')') + endif + + end subroutine grib_index_create + + !> Add a file to an index. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of the index I want to add a file to + !> @param filename name of the file I want to add to the index + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_add_file ( indexid, filename, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: filename + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_add_file(indexid,filename) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_add_file','('//filename//')') + endif + + end subroutine grib_index_add_file + + !> Get the number of distinct values of the key in argument contained in the index. The key must belong to the index. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key for which the number of values is computed + !> @param size number of distinct values of the key in the index + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_get_size_long( indexid, key, size, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: key + integer(kind=kindOfLong), intent(out) :: size + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_get_size_long(indexid,key,size) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_get_size','('//key//')') + endif + + end subroutine grib_index_get_size_long + + !> Get the number of distinct values of the key in argument contained in the index. The key must belong to the index. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key for which the number of values is computed + !> @param size number of distinct values of the key in the index + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_get_size_int( indexid, key, size, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: key + integer(kind=kindOfInt), intent(out) :: size + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_get_size_int(indexid,key,size) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_get_size','('//key//')') + endif + + end subroutine grib_index_get_size_int + + !> Get the distinct values of the key in argument contained in the index. The key must belong to the index. This function is used when the type of the key was explicitly defined as long or when the native type of the key is long. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key for wich the values are returned + !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_get_int( indexid, key, values, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: key + integer(kind=kindOfInt), dimension(:), intent(out) :: values + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + nb_values = size(values) + iret=grib_f_index_get_int ( indexid, key, values , nb_values ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_get','('//key//')') + endif + end subroutine grib_index_get_int + + !> Get the distinct values of the key in argument contained in the index. The key must belong to the index. This function is used when the type of the key was explicitly defined as long or when the native type of the key is long. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key for wich the values are returned + !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_get_long( indexid, key, values, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: key + integer(kind=kindOfLong), dimension(:), intent(out) :: values + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + nb_values = size(values) + iret=grib_f_index_get_long ( indexid, key, values , nb_values ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_get','('//key//')') + endif + end subroutine grib_index_get_long + + !> Get the distinct values of the key in argument contained in the index. The key must belong to the index. This function is used when the type of the key was explicitly defined as long or when the native type of the key is long. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key for wich the values are returned + !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_get_real8( indexid, key, values, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: key + real(kind=kindOfDouble), dimension(:), intent(out) :: values + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + nb_values = size(values) + iret=grib_f_index_get_real8 ( indexid, key, values , nb_values ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_get','('//key//')') + endif + end subroutine grib_index_get_real8 + + !> Get the distinct values of the key in argument contained in the index. + !> The key must belong to the index. + !> This function is used when the type of the key was explicitly defined as string or when the native type of the key is string. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key for wich the values are returned + !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_get_string( indexid, key, values, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: key + character(len=*), dimension(:), intent(out) :: values + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + integer(kind=kindOfInt) :: size_value + size_value = len(values(1)) + nb_values = size(values) + iret=grib_f_index_get_string ( indexid, key, values , size_value,nb_values ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_get','('//key//')') + endif + end subroutine grib_index_get_string + + !> Select the message subset with key==value. The value is a integer. + !> The key must have been created with string type or have string as native type if the type was not explicitly defined in the index creation. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key to be selected + !> @param value value of the key to select + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_select_string( indexid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: key + character(len=*), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_select_string ( indexid, key, value ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_select','('//key//')') + endif + end subroutine grib_index_select_string + + !> Select the message subset with key==value. The value is a integer. The key must have been created with integer type or have integer as native type if the type was not explicitly defined in the index creation. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key to be selected + !> @param value value of the key to select + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_select_int( indexid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: key + integer(kind=kindOfInt), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_select_int ( indexid, key, value ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_select','('//key//')') + endif + end subroutine grib_index_select_int + + !> Select the message subset with key==value. The value is a integer. The key must have been created with integer type or have integer as native type if the type was not explicitly defined in the index creation. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key to be selected + !> @param value value of the key to select + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_select_long( indexid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: key + integer(kind=kindOfLong), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_select_long ( indexid, key, value ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_select','('//key//')') + endif + end subroutine grib_index_select_long + + !> Select the message subset with key==value. The value is a real. The key must have been created with real type or have real as native type if the type was not explicitly defined in the index creation. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key to be selected + !> @param value value of the key to select + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_select_real8( indexid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: indexid + character(len=*), intent(in) :: key + real(kind=kindOfDouble), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_select_real8 ( indexid, key, value ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_select','('//key//')') + endif + end subroutine grib_index_select_real8 + + !> Create a new handle from an index after having selected the key values. + !> All the keys belonging to the index must be selected before calling this function. Successive calls to this function will return all the handles compatible with the constraints defined selecting the values of the index keys. + !> When no more handles are available from the index a NULL pointer is returned and the err variable is set to GRIB_END_OF_INDEX. + !> + !> The message can be accessed through its gribid and it will be available\n + !> until @ref grib_release is called.\n + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. + !> @param gribid id of the grib loaded in memory + !> @param status GRIB_SUCCESS if OK, GRIB_END_OF_FILE at the end of file, or error code + subroutine grib_new_from_index ( indexid, gribid , status) + integer(kind=kindOfInt),intent(in) :: indexid + integer(kind=kindOfInt),intent(out) :: gribid + integer(kind=kindOfInt),optional,intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_new_from_index( indexid, gribid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_new_from_index','') + endif + end subroutine grib_new_from_index + + !> Load an index file previously created with @ref grib_index_write. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of loaded index + !> @param filename name of the index file to load + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_read ( indexid, filename, status ) + integer(kind=kindOfInt), intent(inout) :: indexid + character(len=*), intent(in) :: filename + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_read(filename,indexid) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_read','('//filename//')') + endif + + end subroutine grib_index_read + + !> Saves an index to a file for later reuse. Index files can be read with + !> @ref grib_index_read. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of the index to save to file + !> @param filename name of file to save the index to + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_write ( indexid, filename, status ) + integer(kind=kindOfInt), intent(inout) :: indexid + character(len=*), intent(in) :: filename + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_write(indexid,filename) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_write','('//filename//')') + endif + + end subroutine grib_index_write + + !> Delete the index. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param indexid id of an index created from a file. + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_index_release ( indexid, status ) + integer(kind=kindOfInt), intent(in) :: indexid + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_index_release ( indexid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_index_release','') + endif + end subroutine grib_index_release + + !> Open a file according to a mode. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref get.f90 "get.f90" + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param filename name of the file to be open + !> @param mode open mode can be 'r' (read only) or 'w' (write only) + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_open_file ( ifile, filename, mode, status ) + integer(kind=kindOfInt),intent(out) :: ifile + character(len=*), intent(in) :: filename + character(LEN=*), intent(in) :: mode + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_open_file(ifile, filename, mode ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_open_file','('//filename//')') + endif + end subroutine grib_open_file + + !> Reads nbytes bytes into the buffer from a file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer binary buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_read_bytes_char ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + character(len=1),dimension(:), intent(out) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_read_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_read_bytes','') + endif + end subroutine grib_read_bytes_char + + !> Reads nbytes bytes into the buffer from a file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_read_bytes_int4 ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + integer(kind=4),dimension(:), intent(out) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_read_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_read_bytes','') + endif + end subroutine grib_read_bytes_int4 + + !> Reads nbytes bytes into the buffer from a file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_read_bytes_real4 ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + real(kind=4),dimension(:), intent(out) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_read_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_read_bytes','') + endif + end subroutine grib_read_bytes_real4 + + !> Reads nbytes bytes into the buffer from a file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_read_bytes_real8 ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + real(kind=8),dimension(:), intent(out) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_read_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_read_bytes','') + endif + end subroutine grib_read_bytes_real8 + + !> Reads a message in the buffer array from the file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer binary buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_read_from_file_int4 ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + integer(kind=4),dimension(:), intent(out) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_read_any_from_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_read_from_file','') + endif + end subroutine grib_read_from_file_int4 + + !> Reads a message in the buffer array from the file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer binary buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_read_from_file_real4 ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + real(kind=4),dimension(:), intent(out) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_read_any_from_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_read_from_file','') + endif + end subroutine grib_read_from_file_real4 + + !> Reads a message in the buffer array from the file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer binary buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_read_from_file_real8 ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + real(kind=8),dimension(:), intent(out) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_read_any_from_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_read_from_file','') + endif + end subroutine grib_read_from_file_real8 + + !> Reads a message in the buffer array from the file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_read_from_file_char ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + character(len=1),dimension(:), intent(out) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_read_any_from_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_read_from_file','') + endif + end subroutine grib_read_from_file_char + + !> Write nbytes bytes from the buffer in a file opened with grib_open_file. + !> + !> Write nbytes bytes from the buffer in a file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be written + !> @param nbytes number of bytes to be written + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_write_bytes_char ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + character(len=1), dimension(:),intent(in) :: buffer + integer(kind=kindOfInt), intent(in) :: nbytes + integer(kind=kindOfInt),optional,intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_write_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_write_bytes','') + endif + end subroutine grib_write_bytes_char + + !> Write nbytes bytes from the buffer in a file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be written + !> @param nbytes number of bytes to be written + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_write_bytes_int4 ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + integer(kind=4), dimension(:),intent(in) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional,intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_write_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_write_bytes','') + endif + end subroutine grib_write_bytes_int4 + + !> Write nbytes bytes from the buffer in a file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be written + !> @param nbytes number of bytes to be written + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_write_bytes_real4 ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + real(kind=4), dimension(:),intent(in) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional,intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_write_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_write_bytes','') + endif + end subroutine grib_write_bytes_real4 + + !> Write nbytes bytes from the buffer in a file opened with grib_open_file. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be written + !> @param nbytes number of bytes to be written + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_write_bytes_real8 ( ifile, buffer, nbytes, status ) + integer(kind=kindOfInt),intent(in) :: ifile + real(kind=8), dimension(:),intent(in) :: buffer + integer(kind=kindOfInt), intent(inout) :: nbytes + integer(kind=kindOfInt),optional,intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_write_file(ifile,buffer,nbytes) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_write_bytes','') + endif + end subroutine grib_write_bytes_real8 + + !> Close a file. + !> + !> If the \em fileid does not refer to an opened file an error code + !> is returned in status.\n + !> + !> \b Examples: \ref get.f90 "get.f90" + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param ifile is the id of the file to be closed. + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_close_file ( ifile , status ) + integer(kind=kindOfInt),intent(in) :: ifile + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_close_file(ifile) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_close_file','') + endif + end subroutine grib_close_file + + !> Counts the messages in a file + !> + !> \b Examples: \ref count_messages.f90 "count_messages.f90" + !> + !> @param ifile id of the file opened with @ref grib_open_file + !> @param n number of messages in the file + !> @param status GRIB_SUCCESS if OK or error code + subroutine grib_count_in_file ( ifile, n , status) + integer(kind=kindOfInt),intent(in) :: ifile + integer(kind=kindOfInt),intent(out) :: n + integer(kind=kindOfInt),optional,intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_count_in_file( ifile, n ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_count_in_file','') + endif + end subroutine grib_count_in_file + + !> Load in memory only the headers of a grib message from a file. + !> + !> The message can be accessed through its gribid and it will be available\n + !> until @ref grib_release is called.\n + !> + !> \b Examples: \ref get.f90 "get.f90" + !> + !> @param ifile id of the file opened with @ref grib_open_file + !> @param gribid id of the grib loaded in memory + !> @param status GRIB_SUCCESS if OK, GRIB_END_OF_FILE at the end of file, or error code + subroutine grib_headers_only_new_from_file ( ifile, gribid , status) + integer(kind=kindOfInt),intent(in) :: ifile + integer(kind=kindOfInt),intent(out) :: gribid + integer(kind=kindOfInt),optional,intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_headers_only_new_from_file( ifile, gribid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_new_from_file','') + endif + end subroutine grib_headers_only_new_from_file + + !> Load in memory a grib message from a file. + !> + !> The message can be accessed through its gribid and it will be available\n + !> until @ref grib_release is called.\n + !> + !> \b Examples: \ref get.f90 "get.f90" + !> + !> @param ifile id of the file opened with @ref grib_open_file + !> @param gribid id of the grib loaded in memory + !> @param status GRIB_SUCCESS if OK, GRIB_END_OF_FILE at the end of file, or error code + subroutine grib_new_from_file ( ifile, gribid , status) + integer(kind=kindOfInt),intent(in) :: ifile + integer(kind=kindOfInt),intent(out) :: gribid + integer(kind=kindOfInt),optional,intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_new_from_file( ifile, gribid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_new_from_file','') + endif + end subroutine grib_new_from_file + + !> Create a new message in memory from a character array containting the coded message. + !> + !> The message can be accessed through its gribid and it will be available\n + !> until @ref grib_release is called. A reference to the original coded\n + !> message is kept in the new message structure. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> \b Examples: \ref copy_message.f90 "copy_message.f90" + !> + !> @param gribid id of the grib loaded in memory + !> @param message character array containing the coded message + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_new_from_message_char( gribid, message, status ) + integer(kind=kindOfInt),intent(out) :: gribid + character(len=1), dimension(:),intent(in) :: message + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfSize_t) :: size_bytes + integer(kind=kindOfInt) :: iret + + size_bytes=size(message,dim=1) + iret = grib_f_new_from_message ( gribid, message, size_bytes ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_new_from_message','') + endif + + end subroutine grib_new_from_message_char + + !> Create a new message in memory from an integer array containting the coded message. + !> + !> The message can be accessed through its gribid and it will be available\n + !> until @ref grib_release is called. A reference to the original coded\n + !> message is kept in the new message structure. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> \b Examples: \ref copy_message.f90 "copy_message.f90" + !> + !> @param gribid id of the grib loaded in memory + !> @param message integer array containing the coded message + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_new_from_message_int4 ( gribid, message, status ) + integer(kind=kindOfInt),intent(out) :: gribid + integer(kind=4), dimension(:),intent(in) :: message + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfSize_t) :: size_bytes + integer(kind=kindOfInt) :: iret + + size_bytes=size(message,dim=1)*sizeOfInteger4 + iret = grib_f_new_from_message ( gribid, message, size_bytes ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_new_from_message','') + endif + + end subroutine grib_new_from_message_int4 + + !> Create a new valid gribid from a sample contained in a samples directory pointed + !> by the environment variable GRIB_SAMPLES_PATH. + !> To know where the samples directory is run the grib_info tool.\n + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> \b Examples: \ref samples.f90 "samples.f90" + !> + !> @param gribid id of the grib loaded in memory + !> @param samplename name of the sample to be used + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_new_from_samples ( gribid, samplename, status ) + integer(kind=kindOfInt), intent(out) :: gribid + character(len=*), intent(in) :: samplename + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_new_from_samples ( gribid, samplename ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_new_from_samples','('//samplename//')') + endif + end subroutine grib_new_from_samples + + !> THIS FUNCTION IS DEPRECATED AND IT WILL DISAPPEAR FROM THE VERSION 2.0 + !> Create a new valid gribid from a template. + !> + !> Valid templates are stored in the directory pointed by the\n + !> environment variable GRIB_TEMPLATES_PATH or in a templates\n + !> default directory if this variable is not defined.\n + !> To know where the templates directory is run the grib_info tool.\n + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> \b Examples: \ref template.f90 "template.f90" + !> + !> @param gribid id of the grib loaded in memory + !> @param templatename name of the template to be used + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_new_from_template ( gribid, templatename, status ) + integer(kind=kindOfInt), intent(out) :: gribid + character(len=*), intent(in) :: templatename + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_new_from_template ( gribid, templatename ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_new_from_template','('//templatename//')') + endif + end subroutine grib_new_from_template + + !> Free the memory for the message referred as gribid. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref get.f90 "get.f90" + !> + !> @param gribid id of the grib loaded in memory + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_release ( gribid, status ) + integer(kind=kindOfInt), intent(in) :: gribid + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_release ( gribid ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_release','') + endif + end subroutine grib_release + + !> Create a copy of a message. + !> + !> Create a copy of a given message (\em gribid_src) giving a new\n + !> message in memory (\em gribid_dest) exactly identical to the original one.\n + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> \b Examples: \ref clone.f90 "clone.f90" + !> + !> @param gribid_src grib to be cloned + !> @param gribid_dest new grib returned + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_clone ( gribid_src, gribid_dest, status ) + integer(kind=kindOfInt), intent(in) :: gribid_src + integer(kind=kindOfInt), intent(out) :: gribid_dest + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_clone(gribid_src,gribid_dest) + if (iret /= 0) then + call grib_f_write_on_fail(gribid_src) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_clone','') + endif + end subroutine grib_clone + + subroutine grib_util_sections_copy ( gribid_from, gribid_to, what, gribid_out,status ) + integer(kind=kindOfInt), intent(in) :: gribid_from + integer(kind=kindOfInt), intent(in) :: gribid_to + integer(kind=kindOfInt), intent(out) :: gribid_out + integer(kind=kindOfInt), intent(in) :: what + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_util_sections_copy(gribid_from,gribid_to,what,gribid_out) + if (iret /= 0) then + call grib_f_write_on_fail(gribid_from) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_util_sections_copy','') + endif + end subroutine grib_util_sections_copy + + !> Copy the value of all the keys belonging to a namespace from the source message + !> to the destination message + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> + !> @param gribid_src source message + !> @param gribid_dest destination message + !> @param namespace namespace to be copied + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_copy_namespace ( gribid_src, namespace, gribid_dest, status ) + integer(kind=kindOfInt), intent(in) :: gribid_src + integer(kind=kindOfInt), intent(in) :: gribid_dest + character(LEN=*), intent(in) :: namespace + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_copy_namespace(gribid_src,namespace,gribid_dest) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_copy_namespace','('//namespace//')') + endif + end subroutine grib_copy_namespace + + !> Check the status returned by a subroutine. + !> + !> In case of error it stops the program, returns the error code to the shell + !> and prints the error message.\n + !> + !> @param status the status to be checked + !> @param caller name of the caller soubroutine + !> @param string a string variable from the caller routine (e.g. key,filename) + subroutine grib_check ( status,caller,string ) + integer(kind=kindOfInt), intent(in) :: status + character(len=*), intent(in) :: caller + character(len=*), intent(in) :: string + + call grib_f_check( status,caller,string ) + end subroutine grib_check + + + !> Get latitudes/longitudes/data values (real(4)). + !> + !> Latitudes, longitudes, data values arrays are returned. + !> They must be properly allocated by the caller and their required + !> dimension can be obtained with \ref grib_get_size or by getting (with \ref grib_get) + !> the value of the integer key "numberOfPoints". + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param lats latitudes array with dimension "size" + !> @param lons longitudes array with dimension "size" + !> @param values data values array with dimension "size" + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_data_real4 ( gribid, lats, lons, values, status ) + integer(kind=kindOfInt), intent(in) :: gribid + real ( kind = kindOfFloat ), dimension(:),intent(out) :: lats, lons + real ( kind = kindOfFloat ), dimension(:),intent(out) :: values + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfSize_t) :: npoints + + npoints=size(lats) + iret = grib_f_get_data_real4 ( gribid, lats, lons, values,npoints ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get_data','') + endif + + end subroutine grib_get_data_real4 + + !> Get latitudes/longitudes/data values (real(8)). + !> + !> Latitudes, longitudes, data values arrays are returned. + !> They must be properly allocated by the calling program/function. + !> Their required dimension can be obtained by getting (with \ref grib_get) + !> the value of the integer key "numberOfPoints". + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param lats latitudes array + !> @param lons longitudes array + !> @param values data values array + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_data_real8 ( gribid, lats, lons, values, status ) + integer(kind=kindOfInt), intent(in) :: gribid + real ( kind = kindOfDouble ), dimension(:),intent(out) :: lats, lons + real ( kind = kindOfDouble ), dimension(:),intent(out) :: values + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfSize_t) :: npoints + + npoints=size(lats) + iret = grib_f_get_data_real8 ( gribid, lats, lons, values,npoints ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get_data','') + endif + + end subroutine grib_get_data_real8 + + !> Create a new iterator on the keys. + !> + !> The keys iterator can be navigated to give all the key names which + !> can then be used to get or set the key values with \ref grib_get or + !> \ref grib_set. + !> The set of keys returned can be controlled with the input variable + !> namespace or using the functions + !> \ref grib_skip_read_only, \ref grib_skip_duplicates, + !> \ref grib_skip_coded,\ref grib_skip_computed. + !> If namespace is a non empty string only the keys belonging to + !> that namespace are returned. Available namespaces are "ls" (to get the same + !> default keys as the grib_ls and "mars" to get the keys used by mars. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param iterid keys iterator id to be used in the keys iterator functions + !> @param namespace the namespace of the keys to search for (all the keys if empty) + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_keys_iterator_new ( gribid, iterid, namespace, status ) + integer(kind=kindOfInt), intent(in) :: gribid + integer(kind=kindOfInt), intent(inout) :: iterid + character(LEN=*), intent(in) :: namespace + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret = grib_f_keys_iterator_new ( gribid, iterid, namespace ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_keys_iterator_new',namespace) + endif + end subroutine grib_keys_iterator_new + + !> Advance to the next keys iterator value. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param iterid keys iterator id created with @ref grib_keys_iterator_new + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_keys_iterator_next ( iterid , status) + integer(kind=kindOfInt), intent(in) :: iterid + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_keys_iterator_next ( iterid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_keys_iterator_next','') + endif + end subroutine grib_keys_iterator_next + + !> Delete a keys iterator and free memory. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param iterid keys iterator id created with @ref grib_keys_iterator_new + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_keys_iterator_delete ( iterid , status) + integer(kind=kindOfInt), intent(in) :: iterid + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_keys_iterator_delete ( iterid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_keys_iterator_delete','') + endif + end subroutine grib_keys_iterator_delete + + !> Get the name of a key from a keys iterator. + !> + !> If the status parameter (optional) is not given the program will exit with an error message\n + !> otherwise the error message can be gathered with @ref grib_get_error_string.\n + !> + !> @param iterid keys iterator id created with @ref grib_keys_iterator_new + !> @param name key name to be retrieved + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_keys_iterator_get_name ( iterid, name, status ) + integer(kind=kindOfInt), intent(in) :: iterid + character(LEN=*), intent(out) :: name + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_keys_iterator_get_name ( iterid, name ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_keys_iterator_get_name',name) + endif + end subroutine grib_keys_iterator_get_name + + !> Rewind a keys iterator. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param iterid keys iterator id created with @ref grib_keys_iterator_new + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_keys_iterator_rewind ( iterid, status ) + integer(kind=kindOfInt), intent(in) :: iterid + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_keys_iterator_rewind ( iterid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_keys_iterator_rewind','') + endif + end subroutine grib_keys_iterator_rewind + + !> Dump the content of a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_dump ( gribid , status) + integer(kind=kindOfInt), intent(in) :: gribid + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + + iret=grib_f_dump ( gribid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_dump','') + endif + end subroutine grib_dump + + !> Get the error message given an error code + !> + !> @param error error code + !> @param error_message error message + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_error_string ( error, error_message, status ) + integer(kind=kindOfInt), intent(in) :: error + character(len=*), intent(out) :: error_message + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_error_string ( error, error_message ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get_error_string','') + endif + end subroutine grib_get_error_string + + !> Get the size of an array key. + !> + !> To get the size of a key representing an array. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key name of the key + !> @param size size of the array key + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_size_int ( gribid, key, size , status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfInt), intent(out) :: size + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_size_int ( gribid, key, size ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get_size',key) + endif + end subroutine grib_get_size_int + + !> Get the size of an array key. + !> + !> To get the size of a key representing an array. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key name of the key + !> @param size size of the array key + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_size_long ( gribid, key, size , status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfLong), intent(out) :: size + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_size_long ( gribid, key, size ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get_size',key) + endif + end subroutine grib_get_size_long + + !> Get the integer value of a key from a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value the integer(4) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_int(gribid,key,value,status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind = kindOfInt), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_int ( gribid, key, value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_int + + !> Get the integer value of a key from a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value the integer(4) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_long(gribid,key,value,status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind = kindOfLong), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_long ( gribid, key, value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_long + + !> Check if the value of a key is MISSING. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param is_missing 0->not missing, 1->missing + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_is_missing(gribid,key,is_missing,status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind = kindOfInt), intent(out) :: is_missing + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_is_missing ( gribid, key, is_missing ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_is_missing',key) + endif + end subroutine grib_is_missing + + !> Check if a key is DEFINED. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param is_defined 0->not defined, 1->defined + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_is_defined(gribid,key,is_defined,status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind = kindOfInt), intent(out) :: is_defined + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_is_defined( gribid, key, is_defined ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_is_defined',key) + endif + end subroutine grib_is_defined + + !> Get the real(4) value of a key from a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value the real(4) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_real4 ( gribid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + real(kind = kindOfFloat), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_real4 ( gribid, key, value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_real4 + + !> Get the real(8) value of a key from a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value the real(8) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_real8 ( gribid, key, value , status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + real(kind = kindOfDouble), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_real8 ( gribid, key, value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_real8 + + !> Get the character value of a key from a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value the real(8) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_string ( gribid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + character(len=*), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_string ( gribid, key, value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_string + + + !> Get the integer array of values for a key from a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value integer(4) array value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_int_array ( gribid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfInt), dimension(:), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + + nb_values = size(value) + iret=grib_f_get_int_array ( gribid, key, value , nb_values ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_int_array + + !> Get the integer array of values for a key from a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value integer(4) array value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_long_array ( gribid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfLong), dimension(:), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + + nb_values = size(value) + iret=grib_f_get_long_array ( gribid, key, value , nb_values ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_long_array + + !> Get the real(4) array of values for a key from a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value real(4) array value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_real4_array ( gribid, key, value, status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + real(kind = kindOfFloat), dimension(:), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + + nb_values = size(value) + iret=grib_f_get_real4_array ( gribid, key, value , nb_values ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_real4_array + + !> Get the real(8) array of values for a key from a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value real(8) array value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_real8_array ( gribid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + real(kind = kindOfDouble), dimension(:), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + + nb_values = size(value) + iret=grib_f_get_real8_array ( gribid, key, value, nb_values ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_real8_array + + !> Get a real(4) value of specified index from an array key. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param index integer(4) index + !> @param value real(4) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_real4_element ( gribid, key, index,value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfInt), intent(in) :: index + real(kind = kindOfFloat), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_real4_element ( gribid, key, index,value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_real4_element + + !> Get a real(8) value of specified index from an array key. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param index integer(4) index + !> @param value real(8) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_real8_element ( gribid, key, index,value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfInt), intent(in) :: index + real(kind = kindOfDouble), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_real8_element ( gribid, key, index,value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_real8_element + + !> Get the real(4) values whose indexes are stored in the array "index" from an array key. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param index integer(4) array indexes + !> @param value real(4) array value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_real4_elements ( gribid, key, index,value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfInt),dimension(:), intent(in) :: index + real(kind = kindOfFloat), dimension(:), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) ::npoints + + npoints=size(value) + iret=grib_f_get_real4_elements ( gribid, key, index,value,npoints ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_real4_elements + + !> Get the real(8) values whose indexes are stored in the array "index" from an array key. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param index integer(4) array index + !> @param value real(8) array value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_real8_elements ( gribid, key, index,value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfInt),dimension(:), intent(in) :: index + real(kind = kindOfDouble), dimension(:), intent(out) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: npoints + + npoints=size(value) + iret=grib_f_get_real8_elements ( gribid, key, index,value,npoints ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get',key) + endif + end subroutine grib_get_real8_elements + + !> Set the integer value for a key in a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value integer(4) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_set_int ( gribid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfInt), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_set_int ( gribid, key, value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_set',key) + endif + end subroutine grib_set_int + + !> Set the integer value for a key in a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value integer(4) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_set_long ( gribid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfLong), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_set_long ( gribid, key, value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_set',key) + endif + end subroutine grib_set_long + + !> Set the real(4) value for a key in a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value real(4) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_set_real4 ( gribid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + real(kind = kindOfFloat), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_set_real4 ( gribid, key, value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_set',key) + endif + end subroutine grib_set_real4 + + !> Set the real(8) value for a key in a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value real(8) value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_set_real8 ( gribid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + real(kind = kindOfDouble), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_set_real8 ( gribid, key, value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_set',key) + endif + end subroutine grib_set_real8 + + !> Set the integers values for an array key in a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value integer(4) array value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_set_int_array ( gribid, key, value, status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfInt), dimension(:), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + + nb_values = size(value) + iret=grib_f_set_int_array ( gribid, key, value, nb_values ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_set',key) + endif + end subroutine grib_set_int_array + + !> Set the integers values for an array key in a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value integer(4) array value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_set_long_array ( gribid, key, value, status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + integer(kind=kindOfLong), dimension(:), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + + nb_values = size(value) + iret=grib_f_set_long_array ( gribid, key, value, nb_values ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_set',key) + endif + + end subroutine grib_set_long_array + + + !> Set the real(4) values for an array key in a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value real(4) array value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_set_real4_array ( gribid, key, value, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + real(kind = kindOfFloat), dimension(:), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + + nb_values = size(value) + iret=grib_f_set_real4_array ( gribid, key, value, nb_values ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_set',key) + endif + end subroutine grib_set_real4_array + + !> Set the real(8) values for an array key in a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value real(8) array value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_set_real8_array ( gribid, key, value, status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + real(kind = kindOfDouble), dimension(:), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: nb_values + + nb_values = size(value) + iret=grib_f_set_real8_array ( gribid, key, value, nb_values ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_set',key) + endif + end subroutine grib_set_real8_array + + !> Set the character value for a string key in a grib message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key key name + !> @param value character value + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_set_string ( gribid, key, value , status) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=*), intent(in) :: key + character(len=*), intent(in) :: value + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_set_string ( gribid, key, value ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_set',key) + endif + end subroutine grib_set_string + + !> Get the size of a coded message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param byte_size size in bytes of the message + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_get_message_size ( gribid, byte_size , status) + integer(kind=kindOfInt), intent(in) :: gribid + integer(kind=kindOfSize_t), intent(out) :: byte_size + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_get_message_size ( gribid, byte_size ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_get_message_size','') + endif + end subroutine grib_get_message_size + + !> Copy the coded message into an array. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param message array containing the coded message to be copied + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_copy_message ( gribid, message, status ) + integer(kind=kindOfInt), intent(in) :: gribid + character(len=1), dimension(:), intent(out) :: message + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + integer(kind=kindOfSize_t) :: size_bytes + + size_bytes = size(message,dim=1) + iret=grib_f_copy_message ( gribid, message, size_bytes ) + if (iret /= 0) then + call grib_f_write_on_fail(gribid) + endif + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_copy_message','') + endif + end subroutine grib_copy_message + + !> Write the coded message to a file. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param ifile file id of a file opened with \ref grib_open_file + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_write ( gribid, ifile , status) + integer(kind=kindOfInt), intent(in) :: gribid + integer(kind=kindOfInt), intent(in) :: ifile + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_write( gribid, ifile ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_write','') + endif + end subroutine grib_write + + !> Write a multi field message to a file. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param multigribid id of the multi field grib loaded in memory + !> @param ifile file id of a file opened with \ref grib_open_file + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_multi_write ( multigribid, ifile , status) + integer(kind=kindOfInt), intent(in) :: multigribid + integer(kind=kindOfInt), intent(in) :: ifile + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_multi_write( multigribid, ifile ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_multi_write','') + endif + end subroutine grib_multi_write + + !> Append a single field grib message to a multi field grib message. + !> Only the sections with section number greather or equal "startsection" are copied from the input single message to the multi field output grib. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param ingribid id of the input single grib + !> @param startsection starting from startsection (included) all the sections are copied from the input single grib to the output multi grib + !> @param multigribid id of the output multi filed grib + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_multi_append ( ingribid, startsection, multigribid , status) + integer(kind=kindOfInt), intent(in) :: ingribid + integer(kind=kindOfInt), intent(in) :: startsection + integer(kind=kindOfInt), intent(out) :: multigribid + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_multi_append( ingribid, startsection, multigribid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_multi_append','') + endif + end subroutine grib_multi_append + + !> Find the nearest point of a given latitude/longitude point. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param is_lsm .true. if the nearest land point is required otherwise .false. + !> @param inlats input real(8) array of the latitudes of the points + !> @param inlons input real(8) array of the longitudes of the points + !> @param outlats output real(8) array of the latitudes of the nearest points + !> @param outlons output real(8) array of the longitudes of the nearest points + !> @param distances output real(8) array of the distances + !> @param indexes output integer(4) array of the zero based indexes + !> @param values output real(8) array of the values + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_find_nearest_multiple(gribid,is_lsm, & + inlats,inlons,outlats,outlons, & + values,distances, indexes,status) + integer(kind=kindOfInt), intent(in) :: gribid + logical, intent(in) :: is_lsm + real(kind = kindOfDouble), dimension(:), intent(in) :: inlats + real(kind = kindOfDouble), dimension(:), intent(in) :: inlons + real(kind = kindOfDouble), dimension(:), intent(out) :: outlats + real(kind = kindOfDouble), dimension(:), intent(out) :: outlons + real(kind = kindOfDouble), dimension(:), intent(out) :: distances + real(kind = kindOfDouble), dimension(:), intent(out) :: values + integer(kind = kindOfInt), dimension(:), intent(out) :: indexes + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: npoints + integer(kind=kindOfInt) :: intis_lsm + + intis_lsm = 0 + + if (is_lsm) intis_lsm=1 + npoints=size(inlats) + iret=grib_f_find_nearest_multiple(gribid,intis_lsm,inlats,inlons,outlats,outlons, & + values,distances,indexes,npoints) + + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_find_nearest','') + endif + end subroutine grib_find_nearest_multiple + + !> Find the nearest point of a given latitude/longitude point. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param is_lsm .true. if the nearest land point is required otherwise .false. + !> @param inlat latitude of the point + !> @param inlon longitudes of the point + !> @param outlat latitude of the nearest point + !> @param outlon longitude of the nearest point + !> @param distance distance between the given point and its nearest + !> @param index zero based index + !> @param value value of the field in the nearest point + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_find_nearest_single(gribid,is_lsm, & + inlat,inlon,outlat,outlon, & + value,distance, index,status) + integer(kind=kindOfInt), intent(in) :: gribid + logical, intent(in) :: is_lsm + real(kind = kindOfDouble), intent(in) :: inlat + real(kind = kindOfDouble), intent(in) :: inlon + real(kind = kindOfDouble), intent(out) :: outlat + real(kind = kindOfDouble), intent(out) :: outlon + real(kind = kindOfDouble), intent(out) :: distance + real(kind = kindOfDouble), intent(out) :: value + integer(kind = kindOfInt), intent(out) :: index + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: intis_lsm =0 + + if (is_lsm) intis_lsm=1 + + iret=grib_f_find_nearest_single(gribid,intis_lsm,inlat,inlon,outlat,outlon, & + value,distance,index) + + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_find_nearest','') + endif + end subroutine grib_find_nearest_single + + !> Find the nearest point of a given latitude/longitude point. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param is_lsm .true. if the nearest land point is required otherwise .false. + !> @param inlat latitude of the point + !> @param inlon longitudes of the point + !> @param outlat latitude of the nearest point + !> @param outlon longitude of the nearest point + !> @param distance distance between the given point and its nearest + !> @param index zero based index + !> @param value value of the field in the nearest point + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_find_nearest_four_single(gribid,is_lsm, & + inlat,inlon,outlat,outlon, & + value,distance, index,status) + integer(kind=kindOfInt), intent(in) :: gribid + logical, intent(in) :: is_lsm + real(kind = kindOfDouble), intent(in) :: inlat + real(kind = kindOfDouble), intent(in) :: inlon + real(kind = kindOfDouble), dimension(4), intent(out) :: outlat + real(kind = kindOfDouble), dimension(4), intent(out) :: outlon + real(kind = kindOfDouble), dimension(4), intent(out) :: distance + real(kind = kindOfDouble), dimension(4), intent(out) :: value + integer(kind = kindOfInt), dimension(4), intent(out) :: index + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + integer(kind=kindOfInt) :: intis_lsm =0 + + if (is_lsm) intis_lsm=1 + + iret=grib_f_find_nearest_four_single(gribid,intis_lsm,inlat,inlon,outlat,outlon, & + value,distance,index) + + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_find_nearest','') + endif + end subroutine grib_find_nearest_four_single + + !> Turn on the support for multiple fields in a single message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_multi_support_on (status ) + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret = grib_f_multi_support_on ( ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_multi_support_on','') + endif + end subroutine grib_multi_support_on + + !> Turn off the support for multiple fields in a single message. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_multi_support_off ( status ) + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret = grib_f_multi_support_off ( ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_multi_support_off','') + endif + end subroutine grib_multi_support_off + + !> Turn on the compatibility mode with gribex. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_gribex_mode_on (status ) + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_gribex_mode_on() + + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_gribex_mode_on','') + endif + + end subroutine grib_gribex_mode_on + + !> Turn off the compatibility mode with gribex. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_gribex_mode_off (status ) + integer(kind=kindOfInt),optional, intent(out) :: status + integer(kind=kindOfInt) :: iret + + iret=grib_f_gribex_mode_off() + + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_gribex_mode_off','') + endif + + end subroutine grib_gribex_mode_off + + !> Skip the computed keys in a keys iterator. + !> + !> The computed keys are not coded in the message they are computed + !> from other keys. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_release + !> + !> @param iterid keys iterator id + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_skip_computed ( iterid , status) + integer(kind=kindOfInt), intent(in) :: iterid + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_skip_computed ( iterid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_skip_computed','') + endif + end subroutine grib_skip_computed + + !> Skip the coded keys in a keys iterator. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> The coded keys are actually coded in the message. + !> + !> @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_release + !> + !> @param iterid keys iterator id + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_skip_coded ( iterid, status ) + integer(kind=kindOfInt), intent(in) :: iterid + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_skip_coded ( iterid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_skip_coded','') + endif + end subroutine grib_skip_coded + + + !> Skip the duplicated keys in a keys iterator. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_release + !> + !> @param iterid keys iterator id + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_skip_duplicates ( iterid, status ) + integer(kind=kindOfInt), intent(in) :: iterid + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_skip_duplicates ( iterid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_skip_duplicates','') + endif + end subroutine grib_skip_duplicates + + + !> Skip the read_only keys in a keys iterator. + !> + !> Read only keys cannot be set. + !> + !> @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_release + !> + !> @param iterid keys iterator id + !> @param status GRIB_SUCCESS if OK, integer value on error + subroutine grib_skip_read_only ( iterid, status ) + integer(kind=kindOfInt), intent(in) :: iterid + integer(kind=kindOfInt),optional, intent(out) :: status + + integer(kind=kindOfInt) :: iret + + iret = grib_f_skip_read_only ( iterid ) + if (present(status)) then + status = iret + else + call grib_check(iret,'grib_skip_read_only','') + endif + end subroutine grib_skip_read_only + +end module grib_api + + diff --git a/fortran/grib_f90_int.f90 b/fortran/grib_f90_int.f90 new file mode 100644 index 000000000..1916ec3f8 --- /dev/null +++ b/fortran/grib_f90_int.f90 @@ -0,0 +1,310 @@ + !> Get the distinct values of the key in argument contained in the index. The key must belong to the index. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key for wich the values are returned + !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_index_get + module procedure grib_index_get_int, & + grib_index_get_string, & + grib_index_get_real8 + end interface grib_index_get + + !> Get the number of distinct values of the key in argument contained in the index. The key must belong to the index. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key for which the number of values is computed + !> @param size number of distinct values of the key in the index + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_index_get_size + module procedure grib_index_get_size_int + end interface grib_index_get_size + + !> Select the message subset with key==value. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key to be selected + !> @param value value of the key to select + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_index_select + module procedure grib_index_select_int, & + grib_index_select_string, & + grib_index_select_real8 + end interface grib_index_select + + !> Get the value for a key from a grib message. + !> + !> Given a \em gribid and \em key as input a \em value for the \em key is returned. + !> In some cases the \em value can be an array rather than a scalar. + !> As examples of array keys we have "values","pl", "pv" respectively the data values, + !> the list of number of points for each latitude in a reduced grid and the list of + !> vertical levels. In these cases the \em value array must be allocated by the caller + !> and their required dimension can be obtained with \ref grib_get_size. \n + !> The \em value can be integer(4), real(4), real(8), character. + !> Although each key has its own native type, a key of type integer + !> can be retrieved (with \ref grib_get) as real(4), real(8) or character. + !> Analogous conversions are always provided when possible. + !> Illegal conversions are real to integer and character to any other type. + !> + !> The \em gribid references to a grib message loaded in memory. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref get.f90 "get.f90", \ref print_data.f90 "print_data.f90" + !> + !> @see grib_new_from_file, grib_release, grib_set + !> + !> + !> @param[in] gribid id of the grib loaded in memory + !> @param[in] key key name + !> @param[out] value value can be a scalar or array of integer(4),real(4),real(8),character + !> @param[out] status GRIB_SUCCESS if OK, integer value on error + interface grib_get + module procedure grib_get_int, & + grib_get_real4, & + grib_get_real8, & + grib_get_string, & + grib_get_int_array, & + grib_get_real4_array, & + grib_get_real8_array + end interface grib_get + + !> Get the size of an array key. + !> + !> To get the size of a key representing an array. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key name of the key + !> @param size size of the array key + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_get_size + module procedure grib_get_size_int + end interface grib_get_size + + !> Create a new message in memory from an integer or character array containting the coded message. + !> + !> The message can be accessed through its gribid and it will be available\n + !> until @ref grib_release is called. A reference to the original coded\n + !> message is kept in the new message structure. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> \b Examples: \ref copy_message.f90 "copy_message.f90" + !> + !> @param gribid id of the grib loaded in memory + !> @param message array containing the coded message + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_new_from_message + module procedure grib_new_from_message_int4 + module procedure grib_new_from_message_char + end interface grib_new_from_message + + !> Reads a message in the buffer array from the file opened with grib_open_file. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_read_from_file + module procedure grib_read_from_file_int4 + module procedure grib_read_from_file_char + end interface grib_read_from_file + + !> Reads nbytes bytes into the buffer from a file opened with grib_open_file. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_read_bytes + module procedure grib_read_bytes_int4 + module procedure grib_read_bytes_char + module procedure grib_read_bytes_real8 + module procedure grib_read_bytes_real4 + end interface grib_read_bytes + + !> Write nbytes bytes from the buffer in a file opened with grib_open_file. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be written + !> @param nbytes number of bytes to be written + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_write_bytes + module procedure grib_write_bytes_int4 + module procedure grib_write_bytes_char + module procedure grib_write_bytes_real8 + module procedure grib_write_bytes_real4 + end interface grib_write_bytes + + !> Set the value for a key in a grib message. + !> + !> The given \em value is set for the \em key in the \em gribid message. + !> In some cases the \em value can be an array rather than a scalar. + !> As examples of array keys we have "values","pl", "pv" respectively the data values, + !> the list of number of points for each latitude in a reduced grid and the list of + !> vertical levels. In these cases the \em value array must be allocated by the caller + !> and their required dimension can be obtained with \ref grib_get_size. \n + !> The gribid references to a grib message loaded in memory. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref set.f90 "set.f90" + !> + !> @see grib_new_from_file, grib_release, grib_get + !> + !> @param[in] gribid id of the grib loaded in memory + !> @param[in] key key name + !> @param[out] value value can be a scalar or array of integer(4),real(4),real(8) + !> @param[out] status GRIB_SUCCESS if OK, integer value on error + interface grib_set + module procedure grib_set_int, & + grib_set_real4, & + grib_set_real8, & + grib_set_string, & + grib_set_int_array, & + grib_set_real4_array, & + grib_set_real8_array + end interface grib_set + + !> Get a value of specified index from an array key. + !> + !> Given a gribid and key name as input a value corresponding to the given index + !> is returned. The index is zero based i.e. the first element has + !> zero index, the second element index one and so on. + !> If the parameter index is an array all the values correspondig to the indexes + !> list is returned. + !> The gribid references to a grib message loaded in memory. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref nearest.f90 "nearest.f90" + !> + !> @see grib_new_from_file, grib_release, grib_get + !> + !> @param[in] gribid id of the grib loaded in memory + !> @param[in] key key name + !> @param[in] index index can be a scalar or array of integer(4) + !> @param[out] value value can be a scalar or array of integer(4),real(4),real(8) + !> @param[out] status GRIB_SUCCESS if OK, integer value on error + interface grib_get_element + module procedure grib_get_real4_element, & + grib_get_real8_element, & + grib_get_real4_elements, & + grib_get_real8_elements + + end interface grib_get_element + + !> Find the nearest point/points of a given latitude/longitude point. + !> + !> The value in the nearest point (or the four nearest points) is returned as well as the + !> zero based index (which can be used in @ref grib_get_element) + !> and its distance from the given point using the following + !> formula (acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))). + !> + !> If the is_lsm flag is .true. the input field gribid is considered as + !> a land sea mask and the nearest land point is returned.\n + !> The nearest land point among the four neighbours is: + !> - the nearest point with land sea mask value >= 0.5 + !> - the nearest without any other condition if all the four have land sea mask value <0.5. + !> + !> Arrays (real(8)) of latitude/longitude can be provided to find with one call + !> the values,indexes and distances for all the lat/lon points listed in the arrays. + !> + !> If a single latitude/longitude point is provided and outlat,outlon,value,distance,index + !> are defined as arrays with four elements the lat/lon coordinates and values, distances + !> and indexes of the four nearest points are returned. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref nearest.f90 "nearest.f90" + !> + !> @param[in] gribid id of the grib loaded in memory + !> @param[in] is_lsm .true. if the nearest land point is required otherwise .false. + !> @param[in] inlat latitude of the point in degrees + !> @param[in] inlon longitudes of the point in degrees + !> @param[out] outlat latitude of the nearest point in degrees + !> @param[out] outlon longitude of the nearest point in degrees + !> @param[out] distance distance between the given point and its nearest + !> @param[out] index zero based index + !> @param[out] value value of the field in the nearest point + !> @param[out] status GRIB_SUCCESS if OK, integer value on error + interface grib_find_nearest + module procedure grib_find_nearest_single, & + grib_find_nearest_four_single, & + grib_find_nearest_multiple + end interface grib_find_nearest + + !> Get latitude/longitude and data values. + !> + !> Latitudes, longitudes, data values arrays are returned. + !> They must be properly allocated by the caller and their required + !> dimension can be obtained with \ref grib_get_size or by getting (with \ref grib_get) + !> the value of the integer key "numberOfPoints". + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref get_data.f90 "get_data.f90" + !> + !> @param[in] gribid id of the grib loaded in memory + !> @param[out] lats latitudes array with dimension "size" + !> @param[out] lons longitudes array with dimension "size" + !> @param[out] values data values array with dimension "size" + !> @param[out] status GRIB_SUCCESS if OK, integer value on error + interface grib_get_data + module procedure grib_get_data_real4, & + grib_get_data_real8 + end interface grib_get_data + diff --git a/fortran/grib_f90_long_int.f90 b/fortran/grib_f90_long_int.f90 new file mode 100644 index 000000000..6955f6b19 --- /dev/null +++ b/fortran/grib_f90_long_int.f90 @@ -0,0 +1,318 @@ + !> Get the distinct values of the key in argument contained in the index. The key must belong to the index. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key for wich the values are returned + !> @param values array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_index_get + module procedure grib_index_get_int, & + grib_index_get_long, & + grib_index_get_string, & + grib_index_get_real8 + end interface grib_index_get + + !> Get the number of distinct values of the key in argument contained in the index. The key must belong to the index. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key for which the number of values is computed + !> @param size number of distinct values of the key in the index + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_index_get_size + module procedure grib_index_get_size_int, & + grib_index_get_size_long + end interface grib_index_get_size + + !> Select the message subset with key==value. + !> + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref index.f90 "index.f90" + !> + !> @param indexid id of an index created from a file. The index must have been created with the key in argument. + !> @param key key to be selected + !> @param value value of the key to select + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_index_select + module procedure grib_index_select_int, & + grib_index_select_long, & + grib_index_select_string, & + grib_index_select_real8 + end interface grib_index_select + + !> Create a new message in memory from an integer or character array containting the coded message. + !> + !> The message can be accessed through its gribid and it will be available\n + !> until @ref grib_release is called. A reference to the original coded\n + !> message is kept in the new message structure. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> \b Examples: \ref copy_message.f90 "copy_message.f90" + !> + !> @param gribid id of the grib loaded in memory + !> @param message array containing the coded message + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_new_from_message + module procedure grib_new_from_message_int4 + module procedure grib_new_from_message_char + end interface grib_new_from_message + + !> Reads a message in the buffer array from the file opened with grib_open_file. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_read_from_file + module procedure grib_read_from_file_int4 + module procedure grib_read_from_file_char + end interface grib_read_from_file + + !> Reads nbytes bytes into the buffer from a file opened with grib_open_file. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be read + !> @param nbytes number of bytes to be read + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_read_bytes + module procedure grib_read_bytes_int4 + module procedure grib_read_bytes_char + module procedure grib_read_bytes_real8 + module procedure grib_read_bytes_real4 + end interface grib_read_bytes + + !> Write nbytes bytes from the buffer in a file opened with grib_open_file. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> + !> @param ifile id of the opened file to be used in all the file functions. + !> @param buffer buffer to be written + !> @param nbytes number of bytes to be written + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_write_bytes + module procedure grib_write_bytes_int4 + module procedure grib_write_bytes_char + module procedure grib_write_bytes_real8 + module procedure grib_write_bytes_real4 + end interface grib_write_bytes + + + !> Get the value for a key from a grib message. + !> + !> Given a \em gribid and \em key as input a \em value for the \em key is returned. + !> In some cases the \em value can be an array rather than a scalar. + !> As examples of array keys we have "values","pl", "pv" respectively the data values, + !> the list of number of points for each latitude in a reduced grid and the list of + !> vertical levels. In these cases the \em value array must be allocated by the caller + !> and their required dimension can be obtained with \ref grib_get_size. \n + !> The \em value can be integer(4), real(4), real(8), character. + !> Although each key has its own native type, a key of type integer + !> can be retrieved (with \ref grib_get) as real(4), real(8) or character. + !> Analogous conversions are always provided when possible. + !> Illegal conversions are real to integer and character to any other type. + !> + !> The \em gribid references to a grib message loaded in memory. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref get.f90 "get.f90", \ref print_data.f90 "print_data.f90" + !> + !> @see grib_new_from_file, grib_release, grib_set + !> + !> + !> @param[in] gribid id of the grib loaded in memory + !> @param[in] key key name + !> @param[out] value value can be a scalar or array of integer(4),real(4),real(8),character + !> @param[out] status GRIB_SUCCESS if OK, integer value on error + interface grib_get + module procedure grib_get_int, & + grib_get_long, & + grib_get_real4, & + grib_get_real8, & + grib_get_string, & + grib_get_int_array, & + grib_get_real4_array, & + grib_get_real8_array + end interface grib_get + + !> Get the size of an array key. + !> + !> To get the size of a key representing an array. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> @param gribid id of the grib loaded in memory + !> @param key name of the key + !> @param size size of the array key + !> @param status GRIB_SUCCESS if OK, integer value on error + interface grib_get_size + module procedure grib_get_size_int, & + grib_get_size_long + end interface grib_get_size + + !> Set the value for a key in a grib message. + !> + !> The given \em value is set for the \em key in the \em gribid message. + !> In some cases the \em value can be an array rather than a scalar. + !> As examples of array keys we have "values","pl", "pv" respectively the data values, + !> the list of number of points for each latitude in a reduced grid and the list of + !> vertical levels. In these cases the \em value array must be allocated by the caller + !> and their required dimension can be obtained with \ref grib_get_size. \n + !> The gribid references to a grib message loaded in memory. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref set.f90 "set.f90" + !> + !> @see grib_new_from_file, grib_release, grib_get + !> + !> @param[in] gribid id of the grib loaded in memory + !> @param[in] key key name + !> @param[out] value value can be a scalar or array of integer(4),real(4),real(8) + !> @param[out] status GRIB_SUCCESS if OK, integer value on error + interface grib_set + module procedure grib_set_int, & + grib_set_long, & + grib_set_real4, & + grib_set_real8, & + grib_set_string, & + grib_set_int_array, & + grib_set_long_array, & + grib_set_real4_array, & + grib_set_real8_array + end interface grib_set + + !> Get a value of specified index from an array key. + !> + !> Given a gribid and key name as input a value corresponding to the given index + !> is returned. The index is zero based i.e. the first element has + !> zero index, the second element index one and so on. + !> If the parameter index is an array all the values correspondig to the indexes + !> list is returned. + !> The gribid references to a grib message loaded in memory. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref nearest.f90 "nearest.f90" + !> + !> @see grib_new_from_file, grib_release, grib_get + !> + !> @param[in] gribid id of the grib loaded in memory + !> @param[in] key key name + !> @param[in] index index can be a scalar or array of integer(4) + !> @param[out] value value can be a scalar or array of integer(4),real(4),real(8) + !> @param[out] status GRIB_SUCCESS if OK, integer value on error + interface grib_get_element + module procedure grib_get_real4_element, & + grib_get_real8_element, & + grib_get_real4_elements, & + grib_get_real8_elements + + end interface grib_get_element + + !> Find the nearest point/points of a given latitude/longitude point. + !> + !> The value in the nearest point (or the four nearest points) is returned as well as the + !> zero based index (which can be used in @ref grib_get_element) + !> and its distance from the given point using the following + !> formula (acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))). + !> + !> If the is_lsm flag is .true. the input field gribid is considered as + !> a land sea mask and the nearest land point is returned.\n + !> The nearest land point among the four neighbours is: + !> - the nearest point with land sea mask value >= 0.5 + !> - the nearest without any other condition if all the four have land sea mask value <0.5. + !> + !> Arrays (real(8)) of latitude/longitude can be provided to find with one call + !> the values,indexes and distances for all the lat/lon points listed in the arrays. + !> + !> If a single latitude/longitude point is provided and outlat,outlon,value,distance,index + !> are defined as arrays with four elements the lat/lon coordinates and values, distances + !> and indexes of the four nearest points are returned. + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref nearest.f90 "nearest.f90" + !> + !> @param[in] gribid id of the grib loaded in memory + !> @param[in] is_lsm .true. if the nearest land point is required otherwise .false. + !> @param[in] inlat latitude of the point in degrees + !> @param[in] inlon longitudes of the point in degrees + !> @param[out] outlat latitude of the nearest point in degrees + !> @param[out] outlon longitude of the nearest point in degrees + !> @param[out] distance distance between the given point and its nearest + !> @param[out] index zero based index + !> @param[out] value value of the field in the nearest point + !> @param[out] status GRIB_SUCCESS if OK, integer value on error + interface grib_find_nearest + module procedure grib_find_nearest_single, & + grib_find_nearest_four_single, & + grib_find_nearest_multiple + end interface grib_find_nearest + + !> Get latitude/longitude and data values. + !> + !> Latitudes, longitudes, data values arrays are returned. + !> They must be properly allocated by the caller and their required + !> dimension can be obtained with \ref grib_get_size or by getting (with \ref grib_get) + !> the value of the integer key "numberOfPoints". + !> + !> In case of error, if the status parameter (optional) is not given, the program will + !> exit with an error message.\n Otherwise the error message can be + !> gathered with @ref grib_get_error_string. + !> + !> \b Examples: \ref get_data.f90 "get_data.f90" + !> + !> @param[in] gribid id of the grib loaded in memory + !> @param[out] lats latitudes array with dimension "size" + !> @param[out] lons longitudes array with dimension "size" + !> @param[out] values data values array with dimension "size" + !> @param[out] status GRIB_SUCCESS if OK, integer value on error + interface grib_get_data + module procedure grib_get_data_real4, & + grib_get_data_real8 + end interface grib_get_data + diff --git a/fortran/grib_fortran.c b/fortran/grib_fortran.c new file mode 100644 index 000000000..db23120ca --- /dev/null +++ b/fortran/grib_fortran.c @@ -0,0 +1,2674 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include "grib_fortran_prototypes.h" + +#if HAVE_SYS_TYPES_H +# include +#endif + +#if HAVE_SYS_STAT_H +# include +#endif + +#ifdef HAVE_FCNTL_H +# include +#endif + +#include + +/* Have file ids distinct from grib ids, in order to be +* protected against user errors where a file id is given +* instead of a grib id or viceversa +*/ +#define MIN_FILE_ID 50000 + +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t handle_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t index_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t multi_handle_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t iterator_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t keys_iterator_mutex = PTHREAD_MUTEX_INITIALIZER; + + +static void init() { + pthread_mutexattr_t attr; + + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&handle_mutex,&attr); + pthread_mutex_init(&index_mutex,&attr); + pthread_mutex_init(&multi_handle_mutex,&attr); + pthread_mutex_init(&iterator_mutex,&attr); + pthread_mutex_init(&keys_iterator_mutex,&attr); + pthread_mutexattr_destroy(&attr); + +} + +#endif + +int GRIB_NULL=-1; +int GRIB_NULL_NEAREST=-1; +extern int errno; + +typedef struct l_grib_file l_grib_file; + +struct l_grib_file { + FILE* f; + char* buffer; + int id; + l_grib_file* next; +}; + +typedef struct l_grib_handle l_grib_handle; + +struct l_grib_handle { + int id; + grib_handle* h; + l_grib_handle* next; +}; + +typedef struct l_grib_index l_grib_index; + +struct l_grib_index { + int id; + grib_index* h; + l_grib_index* next; +}; + +typedef struct l_grib_multi_handle l_grib_multi_handle; + +struct l_grib_multi_handle { + int id; + grib_multi_handle* h; + l_grib_multi_handle* next; +}; + +typedef struct l_grib_iterator l_grib_iterator; + +struct l_grib_iterator { + int id; + grib_iterator* i; + l_grib_iterator* next; +}; + +typedef struct l_grib_keys_iterator l_grib_keys_iterator; + +struct l_grib_keys_iterator { + int id; + grib_keys_iterator* i; + l_grib_keys_iterator* next; +}; + +static l_grib_handle* handle_set = NULL; +static l_grib_index* index_set = NULL; +static l_grib_multi_handle* multi_handle_set = NULL; +static l_grib_file* file_set = NULL; +static l_grib_iterator* iterator_set = NULL; +static l_grib_keys_iterator* keys_iterator_set = NULL; + +static char* cast_char(char* buf, char* fortstr,int len){ + char *p,*end; + if (len == 0 || fortstr == NULL) return NULL; + memcpy(buf,fortstr,len); + p=buf; + end=buf+len-1; + while (isgraph(*p) && p != end) { + p++; + } + if (*p==' ') *p='\0'; + if (p==end) *(p+1)='\0'; + else *p='\0'; + + return buf; +} + +static void czstr_to_fortran(char* str,int len) { + char *p,*end; + p=str; end=str+len-1; + while (*p != '\0' && p != end) p++; + while (p !=end) *(p++)=' '; + *p=' '; +} + +static void fort_char_clean(char* str,int len) { + char *p,*end; + p=str; end=str+len-1; + while (p != end) *(p++)=' '; + *p=' '; +} + + +static int push_file(FILE* f,char* buffer){ + l_grib_file* current = file_set; + l_grib_file* previous = file_set; + l_grib_file* new = NULL; + int myindex = MIN_FILE_ID; + + if(!file_set){ + file_set = malloc(sizeof(l_grib_file)); + file_set->id = myindex; + file_set->f = f; + file_set->buffer =buffer; + file_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->f = f; + current->buffer = buffer; + return current->id ; + } else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_file)); + new->id = myindex; + new->f = f; + new->buffer = buffer; + new->next = current; + previous->next = new; + return myindex; +} + +static void _push_handle(grib_handle *h,int *gid){ + l_grib_handle* current= handle_set; + l_grib_handle* previous= handle_set; + l_grib_handle* new= NULL; + int myindex= 1; + + /* + if (*gid > 0 ) { + while(current) { + if(current->id == *gid) break; + current = current->next; + } + if (current) { + grib_handle_delete(current->h); + current->h=h; + return; + } + } + */ + + if(!handle_set){ + handle_set = malloc(sizeof(l_grib_handle)); + handle_set->id = myindex; + handle_set->h = h; + handle_set->next = NULL; + *gid=myindex; + return; + } + + current= handle_set; + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->h = h; + *gid=current->id; + return; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_handle)); + new->id = myindex; + new->h = h; + new->next = current; + previous->next = new; + + *gid=myindex; + return; +} + +static void _push_index(grib_index *h,int *gid){ + l_grib_index* current= index_set; + l_grib_index* previous= index_set; + l_grib_index* new= NULL; + int myindex= 1; + +/* + if (*gid > 0 ) { + while(current) { + if(current->id == *gid) break; + current = current->next; + } + if (current) { + grib_index_delete(current->h); + current->h=h; + return; + } + } + */ + + if(!index_set){ + index_set = malloc(sizeof(l_grib_index)); + index_set->id = myindex; + index_set->h = h; + index_set->next = NULL; + *gid=myindex; + return; + } + + current= index_set; + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->h = h; + *gid=current->id; + return; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_index)); + new->id = myindex; + new->h = h; + new->next = current; + previous->next = new; + + *gid=myindex; + return; +} + +static void _push_multi_handle(grib_multi_handle *h,int *gid){ + l_grib_multi_handle* current= multi_handle_set; + l_grib_multi_handle* previous= multi_handle_set; + l_grib_multi_handle* new= NULL; + int myindex= 1; + +/* + if (*gid > 0 ) { + while(current) { + if(current->id == *gid) break; + current = current->next; + } + if (current) { + grib_multi_handle_delete(current->h); + current->h=h; + return; + } + } + */ + + if(!multi_handle_set){ + multi_handle_set = malloc(sizeof(l_grib_multi_handle)); + multi_handle_set->id = myindex; + multi_handle_set->h = h; + multi_handle_set->next = NULL; + *gid=myindex; + return; + } + + current= multi_handle_set; + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->h = h; + *gid=current->id; + return; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_multi_handle)); + new->id = myindex; + new->h = h; + new->next = current; + previous->next = new; + + *gid=myindex; + return; +} + +static void push_handle(grib_handle *h,int *gid){ + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&handle_mutex) + _push_handle(h,gid); + GRIB_MUTEX_UNLOCK(&handle_mutex) + return; +} + +static void push_index(grib_index *h,int *gid){ + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&index_mutex) + _push_index(h,gid); + GRIB_MUTEX_UNLOCK(&index_mutex) + return; +} + +static void push_multi_handle(grib_multi_handle *h,int *gid){ + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&multi_handle_mutex) + _push_multi_handle(h,gid); + GRIB_MUTEX_UNLOCK(&multi_handle_mutex) + return; +} + + +static int _push_iterator(grib_iterator *i){ + l_grib_iterator* current = iterator_set; + l_grib_iterator* previous = iterator_set; + l_grib_iterator* new = NULL; + int myindex = 1; + + if(!iterator_set){ + iterator_set = malloc(sizeof(l_grib_iterator)); + iterator_set->id = myindex; + iterator_set->i = i; + iterator_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->i = i; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_iterator)); + new->id = myindex; + new->i = i; + new->next = current; + previous->next = new; + + return myindex; +} + +static int push_iterator(grib_iterator *i){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + ret=_push_iterator(i); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return ret; +} + +static int _push_keys_iterator(grib_keys_iterator *i){ + l_grib_keys_iterator* current = keys_iterator_set; + l_grib_keys_iterator* previous = keys_iterator_set; + l_grib_keys_iterator* new = NULL; + int myindex = 1; + + if(!keys_iterator_set){ + keys_iterator_set = malloc(sizeof(l_grib_keys_iterator)); + keys_iterator_set->id = myindex; + keys_iterator_set->i = i; + keys_iterator_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->i = i; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + if(!previous) return -1; + + new = malloc(sizeof(l_grib_keys_iterator)); + new->id = myindex; + new->i = i; + new->next = current; + previous->next = new; + + return myindex; +} + +static int push_keys_iterator(grib_keys_iterator *i){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + ret=_push_keys_iterator(i); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return ret; +} + +static grib_handle* _get_handle(int handle_id){ + l_grib_handle* current= handle_set; + + while(current){ + if(current->id == handle_id) return current->h; + current = current->next; + } + + return NULL; +} + +static grib_index* _get_index(int index_id){ + l_grib_index* current= index_set; + + while(current){ + if(current->id == index_id) return current->h; + current = current->next; + } + + return NULL; +} + +static grib_multi_handle* _get_multi_handle(int multi_handle_id){ + l_grib_multi_handle* current= multi_handle_set; + + while(current){ + if(current->id == multi_handle_id) return current->h; + current = current->next; + } + + return NULL; +} + +static grib_handle* get_handle(int handle_id){ + grib_handle* h=NULL; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&handle_mutex) + h=_get_handle(handle_id); + GRIB_MUTEX_UNLOCK(&handle_mutex) + return h; +} + +static grib_index* get_index(int index_id){ + grib_index* h=NULL; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&index_mutex) + h=_get_index(index_id); + GRIB_MUTEX_UNLOCK(&index_mutex) + return h; +} + +static grib_multi_handle* get_multi_handle(int multi_handle_id){ + grib_multi_handle* h=NULL; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&multi_handle_mutex) + h=_get_multi_handle(multi_handle_id); + GRIB_MUTEX_UNLOCK(&multi_handle_mutex) + return h; +} + +static FILE* get_file(int file_id){ + l_grib_file* current = file_set; + + if ( file_id < MIN_FILE_ID ) return NULL; + + while(current){ + if(current->id == file_id) return current->f; + current = current->next; + } + return NULL; +} + +static grib_iterator* _get_iterator(int iterator_id){ + l_grib_iterator* current = iterator_set; + + while(current){ + if(current->id == iterator_id) return current->i; + current = current->next; + } + return NULL; +} +static grib_iterator* get_iterator(int iterator_id){ + grib_iterator* i=NULL; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + i=_get_iterator(iterator_id); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return i; +} + +static grib_keys_iterator* _get_keys_iterator(int keys_iterator_id){ + l_grib_keys_iterator* current = keys_iterator_set; + + while(current){ + if(current->id == keys_iterator_id) return current->i; + current = current->next; + } + return NULL; +} + +static grib_keys_iterator* get_keys_iterator(int keys_iterator_id){ + grib_keys_iterator* i=NULL; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + i=_get_keys_iterator(keys_iterator_id); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return i; +} + +static int clear_file(int file_id){ + l_grib_file* current = file_set; + while(current){ + if(current->id == file_id){ + current->id = -(current->id); + if (current->f) fclose(current->f); + if (current->buffer) free(current->buffer); + return GRIB_SUCCESS; + } + current = current->next; + } + return GRIB_INVALID_FILE; +} + +static int _clear_handle(int handle_id){ + + l_grib_handle* current = handle_set; + if (handle_id<0) return 0; + while(current){ + if(current->id == handle_id){ + current->id = -(current->id); + if(current->h) return grib_handle_delete(current->h); + } + current = current->next; + } + return GRIB_SUCCESS; +} + +static int _clear_index(int index_id){ + + l_grib_index* current = index_set; + + while(current){ + if(current->id == index_id){ + current->id = -(current->id); + if (current->h) { + grib_index_delete(current->h); + return GRIB_SUCCESS; + } + } + current = current->next; + } + return GRIB_SUCCESS; +} + +static int _clear_multi_handle(int multi_handle_id){ + + l_grib_multi_handle* current = multi_handle_set; + + while(current){ + if(current->id == multi_handle_id){ + current->id = -(current->id); + if(current->h) return grib_multi_handle_delete(current->h); + } + current = current->next; + } + return GRIB_SUCCESS; +} + +static int clear_handle(int handle_id){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&handle_mutex) + ret=_clear_handle(handle_id); + GRIB_MUTEX_UNLOCK(&handle_mutex) + return ret; +} + +static int clear_index(int index_id){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&index_mutex) + ret=_clear_index(index_id); + GRIB_MUTEX_UNLOCK(&index_mutex) + return ret; +} + +static int clear_multi_handle(int multi_handle_id){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&multi_handle_mutex) + ret=_clear_multi_handle(multi_handle_id); + GRIB_MUTEX_UNLOCK(&multi_handle_mutex) + return ret; +} + +static int _clear_iterator(int iterator_id){ + + l_grib_iterator* current = iterator_set; + + while(current){ + if(current->id == iterator_id){ + current->id = -(current->id); + return grib_iterator_delete(current->i); + } + current = current->next; + } + return GRIB_INVALID_ITERATOR; +} + +static int clear_iterator(int iterator_id){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + ret=_clear_iterator(iterator_id); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return ret; +} + +static int _clear_keys_iterator(int keys_iterator_id){ + + l_grib_keys_iterator* current = keys_iterator_set; + + while(current){ + if(current->id == keys_iterator_id){ + current->id = -(current->id); + return grib_keys_iterator_delete(current->i); + } + current = current->next; + } + return GRIB_INVALID_KEYS_ITERATOR; +} + +static int clear_keys_iterator(int keys_iterator_id){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + ret=_clear_keys_iterator(keys_iterator_id); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return ret; +} + +int grib_f_read_any_headers_only_from_file_(int* fid, char* buffer, int* nbytes) { + grib_context* c; + int err=0; + size_t size=(size_t)*nbytes; + FILE* f=get_file(*fid); + + if (f) { + c=grib_context_get_default( ); + err=grib_read_any_headers_only_from_file(c,f,buffer,&size); + *nbytes=size; + return err; + } else { + return GRIB_INVALID_FILE; + } +} +int grib_f_read_any_headers_only_from_file__(int* fid, char* buffer, int* nbytes) { + return grib_f_read_any_headers_only_from_file_(fid,buffer,nbytes); +} +int grib_f_read_any_headers_only_from_file(int* fid, char* buffer, int* nbytes) { + return grib_f_read_any_headers_only_from_file_(fid,buffer,nbytes); +} + +int grib_f_read_any_from_file_(int* fid, char* buffer, int* nbytes) { + grib_context* c; + int err=0; + size_t size=(size_t)*nbytes; + FILE* f=get_file(*fid); + + if (f) { + c=grib_context_get_default( ); + err=grib_read_any_from_file(c,f,buffer,&size); + *nbytes=size; + return err; + } else { + return GRIB_INVALID_FILE; + } +} +int grib_f_read_any_from_file__(int* fid, char* buffer, int* nbytes) { + return grib_f_read_any_from_file_(fid,buffer,nbytes); +} +int grib_f_read_any_from_file(int* fid, char* buffer, int* nbytes) { + return grib_f_read_any_from_file_(fid,buffer,nbytes); +} + +int grib_f_write_file_(int* fid, char* buffer, int* nbytes) { + grib_context* c; + FILE* f=get_file(*fid); + + if (f) { + int ioerr; + c=grib_context_get_default( ); + if( fwrite(buffer, 1, *nbytes, f) != *nbytes) { + ioerr=errno; + grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s",strerror(ioerr)); + return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; + } else { + return GRIB_INVALID_FILE; + } +} +int grib_f_write_file__(int* fid, char* buffer, int* nbytes) { + return grib_f_write_file_(fid,buffer,nbytes); +} +int grib_f_write_file(int* fid, char* buffer, int* nbytes) { + return grib_f_write_file_(fid,buffer,nbytes); +} + +int grib_f_read_file_(int* fid, char* buffer, int* nbytes) { + grib_context* c; + FILE* f=get_file(*fid); + + if (f) { + int ioerr; + c=grib_context_get_default( ); + if( fread(buffer, 1, *nbytes, f) != *nbytes) { + ioerr=errno; + grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s",strerror(ioerr)); + return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; + } else { + return GRIB_INVALID_FILE; + } +} + +int grib_f_read_file__(int* fid, char* buffer, int* nbytes) { + return grib_f_read_file_(fid,buffer,nbytes); +} +int grib_f_read_file(int* fid, char* buffer, int* nbytes) { + return grib_f_read_file_(fid,buffer,nbytes); +} + +int grib_f_open_file_(int* fid, char* name , char* op, int lname, int lop){ + FILE* f = NULL; + int ioerr=0; + char oper[8]; + char *p; + char fname[1024]; + int ret=GRIB_SUCCESS; + char* iobuf=NULL; + /*TODO Proper context passed as external parameter */ + grib_context* context=grib_context_get_default(); + + cast_char(oper,op,lop); + + p=oper; + + while (*p != '\0') { *p=tolower(*p);p++;} + + f = fopen(cast_char(fname,name,lname),oper); + if(!f) { + ioerr=errno; + grib_context_log(context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s: %s",strerror(ioerr),cast_char(fname,name,lname)); + *fid = -1; + ret=GRIB_IO_PROBLEM; + } else { + if (context->io_buffer_size) { + /* printf("setting vbuf = %d\n",context->io_buffer_size); */ +#ifdef POSIX_MEMALIGN + if (posix_memalign((void **)&iobuf,sysconf(_SC_PAGESIZE),context->io_buffer_size) ) { + grib_context_log(context,GRIB_LOG_FATAL,"grib_f_open_file_: posix_memalign unable to allocate io_buffer\n"); + } +#else + iobuf = (void*)malloc(context->io_buffer_size); + if (!iobuf) { + grib_context_log(context,GRIB_LOG_FATAL,"grib_f_open_file_: Unable to allocate io_buffer\n"); + } +#endif + setvbuf(f,iobuf,_IOFBF,context->io_buffer_size); + } + *fid = push_file(f,iobuf); + ret=GRIB_SUCCESS; + } + return ret; +} + +int grib_f_open_file__(int* fid, char* name , char* op, int lname, int lop){ + return grib_f_open_file_( fid, name , op, lname, lop); +} +int grib_f_open_file(int* fid, char* name , char* op, int lname, int lop){ + return grib_f_open_file_( fid, name , op, lname, lop); +} + +int grib_f_close_file_(int* fid){ + return clear_file(*fid); +} +int grib_f_close_file__(int* fid){ + return grib_f_close_file_(fid); +} +int grib_f_close_file(int* fid){ + return grib_f_close_file_(fid); +} +static int file_count=0; + +void grib_f_write_on_fail(int* gid) { + grib_context* c=grib_context_get_default(); + if (c->write_on_fail) { + char filename[100]={0,}; + grib_handle* h=NULL; + pid_t pid=getpid(); + + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&handle_mutex) + file_count++; + GRIB_MUTEX_UNLOCK(&handle_mutex) + + sprintf(filename,"%ld_%d_error.grib",(long)pid,file_count); + + h=get_handle(*gid); + if (h) grib_write_message(h,filename,"w"); + } +} +void grib_f_write_on_fail_(int* gid) { + grib_f_write_on_fail(gid); +} +void grib_f_write_on_fail__(int* gid) { + grib_f_write_on_fail(gid); +} +int grib_f_multi_support_on_(){ + grib_multi_support_on(0); + return GRIB_SUCCESS; +} +int grib_f_multi_support_on__(){ + return grib_f_multi_support_on_(); +} +int grib_f_multi_support_on(){ + return grib_f_multi_support_on_(); +} + +int grib_f_multi_support_off_(){ + grib_multi_support_off(0); + return GRIB_SUCCESS; +} +int grib_f_multi_support_off__(){ + return grib_f_multi_support_off_(); +} +int grib_f_multi_support_off(){ + return grib_f_multi_support_off_(); +} + + +static int _grib_f_iterator_new_(int* gid,int* iterid,int* mode) { + int err=0; + grib_handle* h; + grib_iterator* iter; + + h=get_handle(*gid); + if (!h) { + *iterid=-1; + return GRIB_NULL_HANDLE; + } + iter=grib_iterator_new(h,*mode,&err); + if (iter) + *iterid=push_iterator(iter); + else + *iterid=-1; + return err; +} + +int grib_f_iterator_new_(int* gid,int* iterid,int* mode) { + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + ret=_grib_f_iterator_new_(gid,iterid,mode); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return ret; +} + +int grib_f_iterator_new__(int* gid,int* iterid,int* mode) { + return grib_f_iterator_new_(gid,iterid,mode); +} +int grib_f_iterator_new(int* gid,int* iterid,int* mode) { + return grib_f_iterator_new_(gid,iterid,mode); +} + +int grib_f_iterator_next_(int* iterid,double* lat,double* lon,double* value) { + grib_iterator* iter=get_iterator(*iterid); + if (!iter) return GRIB_INVALID_ITERATOR; + return grib_iterator_next(iter,lat,lon,value); +} + +int grib_f_iterator_next__(int* iterid,double* lat,double* lon,double* value) { + return grib_f_iterator_next_(iterid,lat,lon,value); +} +int grib_f_iterator_next(int* iterid,double* lat,double* lon,double* value) { + return grib_f_iterator_next_(iterid,lat,lon,value); +} + +int grib_f_iterator_delete_(int* iterid) { + return clear_iterator(*iterid); +} + +int grib_f_iterator_delete__(int* iterid) { + return grib_f_iterator_delete_(iterid); +} +int grib_f_iterator_delete(int* iterid) { + return grib_f_iterator_delete_(iterid); +} + +static int _grib_f_keys_iterator_new_(int* gid,int* iterid,char* name_space,int len) { + int err=0; + char buf[1024]; + grib_handle* h; + grib_keys_iterator* iter; + + h=get_handle(*gid); + if (!h) { + *iterid=-1; + return GRIB_NULL_HANDLE; + } + iter=grib_keys_iterator_new(h,0,cast_char(buf,name_space,len)); + if (iter) + *iterid=push_keys_iterator(iter); + else + *iterid=-1; + return err; +} + +int grib_f_keys_iterator_new_(int* gid,int* iterid,char* name_space,int len) { + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + ret=_grib_f_keys_iterator_new_(gid,iterid,name_space,len); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return ret; +} + +int grib_f_keys_iterator_new__(int* gid,int* iterid,char* name_space,int len) { + return grib_f_keys_iterator_new_(gid,iterid,name_space,len); +} +int grib_f_keys_iterator_new(int* gid,int* iterid,char* name_space,int len) { + return grib_f_keys_iterator_new_(gid,iterid,name_space,len); +} + +int grib_f_keys_iterator_next_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + + return grib_keys_iterator_next(iter); +} + +int grib_f_keys_iterator_next__(int* iterid) { + return grib_f_keys_iterator_next_(iterid); +} +int grib_f_keys_iterator_next(int* iterid) { + return grib_f_keys_iterator_next_(iterid); +} + +int grib_f_keys_iterator_delete_(int* iterid) { + return clear_keys_iterator(*iterid); +} +int grib_f_keys_iterator_delete__(int* iterid) { + return grib_f_keys_iterator_delete_(iterid); +} +int grib_f_keys_iterator_delete(int* iterid) { + return grib_f_keys_iterator_delete_(iterid); +} + +int grib_f_gribex_mode_on_() { + grib_gribex_mode_on(0); + return GRIB_SUCCESS; +} +int grib_f_gribex_mode_on__() { + grib_gribex_mode_on(0); + return GRIB_SUCCESS; +} +int grib_f_gribex_mode_on() { + grib_gribex_mode_on(0); + return GRIB_SUCCESS; +} + +int grib_f_gribex_mode_off_() { + grib_gribex_mode_off(0); + return GRIB_SUCCESS; +} +int grib_f_gribex_mode_off__() { + grib_gribex_mode_off(0); + return GRIB_SUCCESS; +} +int grib_f_gribex_mode_off() { + grib_gribex_mode_off(0); + return GRIB_SUCCESS; +} + +int grib_f_skip_computed_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_COMPUTED); +} +int grib_f_skip_computed__(int* iterid) { + return grib_f_skip_computed_(iterid); +} +int grib_f_skip_computed(int* iterid) { + return grib_f_skip_computed_(iterid); +} + +int grib_f_skip_coded_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_CODED); +} +int grib_f_skip_coded__(int* iterid) { + return grib_f_skip_coded_(iterid); +} +int grib_f_skip_coded(int* iterid) { + return grib_f_skip_coded_(iterid); +} + +int grib_f_skip_edition_specific_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_EDITION_SPECIFIC); +} +int grib_f_skip_edition_specific__(int* iterid) { + return grib_f_skip_edition_specific_(iterid); +} +int grib_f_skip_edition_specific(int* iterid) { + return grib_f_skip_edition_specific_(iterid); +} + +int grib_f_skip_duplicates_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_DUPLICATES); +} +int grib_f_skip_duplicates__(int* iterid) { + return grib_f_skip_duplicates_(iterid); +} +int grib_f_skip_duplicates(int* iterid) { + return grib_f_skip_duplicates_(iterid); +} + +int grib_f_skip_read_only_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_READ_ONLY); +} +int grib_f_skip_read_only__(int* iterid) { + return grib_f_skip_read_only_(iterid); +} +int grib_f_skip_read_only(int* iterid) { + return grib_f_skip_read_only_(iterid); +} + +int grib_f_skip_function_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_FUNCTION); +} +int grib_f_skip_function__(int* iterid) { + return grib_f_skip_function_(iterid); +} +int grib_f_skip_function(int* iterid) { + return grib_f_skip_function_(iterid); +} + +int grib_f_keys_iterator_get_name_(int* iterid,char* name,int len) { + size_t lsize=len; + char buf[1024]={0,}; + + grib_keys_iterator* kiter=get_keys_iterator(*iterid); + + if (!kiter) return GRIB_INVALID_KEYS_ITERATOR; + + fort_char_clean(name,len); + + sprintf(buf, "%s", grib_keys_iterator_get_name(kiter)); + lsize=strlen(buf); + if (len < lsize) return GRIB_ARRAY_TOO_SMALL; + + memcpy(name,buf,lsize); + + czstr_to_fortran(name,len); + + return 0; +} +int grib_f_keys_iterator_get_name__(int* kiter,char* name,int len) { + return grib_f_keys_iterator_get_name_(kiter,name,len); +} +int grib_f_keys_iterator_get_name(int* kiter,char* name,int len) { + return grib_f_keys_iterator_get_name_(kiter,name,len); +} + +int grib_f_keys_iterator_rewind_(int* kiter) { + grib_keys_iterator* i=get_keys_iterator(*kiter); + + if (!i) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_rewind(i); +} +int grib_f_keys_iterator_rewind__(int* kiter) { + return grib_f_keys_iterator_rewind_(kiter); +} +int grib_f_keys_iterator_rewind(int* kiter) { + return grib_f_keys_iterator_rewind_(kiter); +} + +int grib_f_new_from_message_(int* gid, void* buffer , size_t* bufsize){ + grib_handle *h = NULL; + h = grib_handle_new_from_message_copy(0, buffer, *bufsize); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} +int grib_f_new_from_message__(int* gid, void* buffer , size_t* bufsize){ + return grib_f_new_from_message_(gid, buffer , bufsize); +} +int grib_f_new_from_message(int* gid, void* buffer , size_t* bufsize){ + return grib_f_new_from_message_(gid, buffer , bufsize); +} + +int grib_f_new_from_message_copy_(int* gid, void* buffer , size_t* bufsize){ + grib_handle *h = NULL; + h = grib_handle_new_from_message_copy(0, buffer, *bufsize); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} + +int grib_f_new_from_message_copy__(int* gid, void* buffer , size_t* bufsize){ + return grib_f_new_from_message_copy_(gid, buffer , bufsize); +} +int grib_f_new_from_message_copy(int* gid, void* buffer , size_t* bufsize){ + return grib_f_new_from_message_copy_(gid, buffer , bufsize); +} + +int grib_f_new_from_samples_(int* gid, char* name , int lname){ + char fname[1024]; + grib_handle *h = NULL; + + h = grib_handle_new_from_samples(NULL,cast_char(fname,name,lname)); + /* grib_context_set_debug(h->context,1);*/ + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_FILE_NOT_FOUND; +} + +int grib_f_new_from_samples__(int* gid, char* name , int lname){ + return grib_f_new_from_samples_( gid, name , lname); +} +int grib_f_new_from_samples(int* gid, char* name , int lname){ + return grib_f_new_from_samples_( gid, name , lname); +} + +int grib_f_new_from_template_(int* gid, char* name , int lname){ + char fname[1024]; + grib_handle *h = NULL; + + h = grib_handle_new_from_template(NULL,cast_char(fname,name,lname)); + /* grib_context_set_debug(h->context,1);*/ + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} + +int grib_f_new_from_template__(int* gid, char* name , int lname){ + return grib_f_new_from_template_( gid, name , lname); +} +int grib_f_new_from_template(int* gid, char* name , int lname){ + return grib_f_new_from_template_( gid, name , lname); +} + +int grib_f_clone_(int* gidsrc,int* giddest){ + grib_handle *src = get_handle(*gidsrc); + grib_handle *dest = NULL; + + if(src){ + dest = grib_handle_clone(src); + if(dest){ + push_handle(dest,giddest); + return GRIB_SUCCESS; + } + } + + *giddest = -1; + return GRIB_INVALID_GRIB; +} + +int grib_f_clone__(int* gidsrc,int* giddest){ + return grib_f_clone_(gidsrc, giddest); +} +int grib_f_clone(int* gidsrc,int* giddest){ + return grib_f_clone_(gidsrc, giddest); +} + +int grib_f_util_sections_copy_(int* gidfrom,int* gidto,int* what,int *gidout){ + int err=0; + grib_handle *hfrom = get_handle(*gidfrom); + grib_handle *hto = get_handle(*gidto); + grib_handle *out =0; + + if(hfrom && hto) out=grib_util_sections_copy(hfrom,hto,*what,&err); + if(out){ + push_handle(out,gidout); + return GRIB_SUCCESS; + } + + return err; +} +int grib_f_util_sections_copy__(int* gidfrom,int* gidto,int* what,int *gidout){ + return grib_f_util_sections_copy_(gidfrom,gidto,what,gidout); +} +int grib_f_util_sections_copy(int* gidfrom,int* gidto,int* what,int *gidout){ + return grib_f_util_sections_copy_(gidfrom,gidto,what,gidout); +} + +int grib_f_copy_namespace_(int* gidsrc,char* name,int* giddest,int len){ + char buf[1024]={0,}; + grib_handle *src = get_handle(*gidsrc); + grib_handle *dest = get_handle(*giddest); + + if(src && dest) + return grib_copy_namespace(dest,cast_char(buf,name,len),src); + + return GRIB_INVALID_GRIB; +} +int grib_f_copy_namespace__(int* gidsrc,char* name,int* giddest,int len){ + return grib_f_copy_namespace_(gidsrc,name,giddest,len); +} +int grib_f_copy_namespace(int* gidsrc,char* name,int* giddest,int len){ + return grib_f_copy_namespace_(gidsrc,name,giddest,len); +} + +int grib_f_count_in_file(int* fid,int* n) { + int err = 0; + FILE* f = get_file(*fid); + if (f) err=grib_count_in_file(0, f,n); + return err; +} +int grib_f_count_in_file_(int* fid,int* n) { + return grib_f_count_in_file(fid,n); +} +int grib_f_count_in_file__(int* fid,int* n) { + return grib_f_count_in_file(fid,n); +} + +int grib_f_new_from_file_(int* fid, int* gid){ + int err = 0; + FILE* f = get_file(*fid); + + grib_handle *h = NULL; + + if(f){ + h = grib_handle_new_from_file(0,f,&err); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_f_new_from_file__(int* fid, int* gid){ + return grib_f_new_from_file_( fid, gid); +} +int grib_f_new_from_file(int* fid, int* gid){ + return grib_f_new_from_file_( fid, gid); +} + +int grib_f_headers_only_new_from_file_(int* fid, int* gid){ + int err = 0; + FILE* f = get_file(*fid); + + grib_handle *h = NULL; + + if(f){ + h = grib_handle_headers_only_new_from_file(0,f,&err); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_f_headers_only_new_from_file__(int* fid, int* gid){ + return grib_f_headers_only_new_from_file_( fid, gid); +} +int grib_f_headers_only_new_from_file(int* fid, int* gid){ + return grib_f_headers_only_new_from_file_( fid, gid); +} + +int grib_f_new_from_index_(int* iid, int* gid){ + int err = 0; + grib_index* i = get_index(*iid); + + grib_handle *h = NULL; + + if(i){ + h = grib_handle_new_from_index(i,&err); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_INDEX; + } + } + + *gid=-1; + return GRIB_INVALID_INDEX; +} + +int grib_f_new_from_index__(int* iid, int* gid){ + return grib_f_new_from_index_(iid,gid); +} +int grib_f_new_from_index(int* iid, int* gid){ + return grib_f_new_from_index_(iid,gid); +} + +int grib_f_index_new_from_file_(char* file ,char* keys ,int* gid, int lfile, int lkeys){ + int err = 0; + char fname[1024]={0,}; + char knames[1024]={0,}; + + grib_index *i = NULL; + + if(*file){ + i = grib_index_new_from_file(0,cast_char(fname,file,lfile), + cast_char(knames,keys,lkeys),&err); + if(i){ + push_index(i,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_f_index_new_from_file__(char* file, char* keys, int* gid, int lfile, int lkeys){ + return grib_f_index_new_from_file_(file ,keys ,gid, lfile, lkeys); +} + +int grib_f_index_new_from_file(char* file, char* keys, int* gid, int lfile, int lkeys){ + return grib_f_index_new_from_file_(file ,keys ,gid, lfile, lkeys); +} + +int grib_f_index_add_file_(int* iid, char* file, int lfile) { + grib_index *i = get_index(*iid); + int err = GRIB_SUCCESS; + char buf[1024]; + + if (!i) { + return GRIB_INVALID_INDEX; + } else { + err = grib_index_add_file(i,cast_char(buf,file,lfile)); + return err; + } +} + +int grib_f_index_add_file__(int* iid, char* file, int lfile) { + return grib_f_index_add_file_(iid,file,lfile); +} + +int grib_f_index_add_file(int* iid, char* file, int lfile) { + return grib_f_index_add_file_(iid,file,lfile); +} + +int grib_f_index_read_(char* file, int* gid, int lfile) { + int err = 0; + char fname[1024]={0,}; + + grib_index *i = NULL; + + if (*file) { + i = grib_index_read(0,cast_char(fname,file,lfile),&err); + if (i) { + push_index(i,gid); + return GRIB_SUCCESS; + } else { + *gid = -1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} +int grib_f_index_read__(char* file, int* gid, int lfile) { + return grib_f_index_read_(file,gid,lfile); +} +int grib_f_index_read(char* file, int* gid, int lfile) { + return grib_f_index_read_(file,gid,lfile); +} + +int grib_f_index_write_(int* gid, char* file, int lfile) { + grib_index *i = get_index(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + + if (!i) { + return GRIB_INVALID_GRIB; + } else { + err = grib_index_write(i,cast_char(buf,file,lfile)); + return err; + } +} +int grib_f_index_write__(int* gid, char* file, int lfile) { + return grib_f_index_write_(gid,file,lfile); +} +int grib_f_index_write(int* gid, char* file, int lfile) { + return grib_f_index_write_(gid,file,lfile); +} + +int grib_f_index_release_(int* hid){ + return clear_index(*hid); +} + +int grib_f_index_release__(int* hid){ + return grib_f_index_release_(hid); +} + +int grib_f_index_release(int* hid){ + return grib_f_index_release_(hid); +} + +int grib_f_multi_handle_release_(int* hid){ + return clear_multi_handle(*hid); +} + +int grib_f_multi_handle_release__(int* hid){ + return grib_f_multi_handle_release_(hid); +} + +int grib_f_multi_handle_release(int* hid){ + return grib_f_multi_handle_release_(hid); +} + + +int grib_f_release_(int* hid){ + return clear_handle(*hid); +} +int grib_f_release__(int* hid){ + return grib_f_release_( hid); +} +int grib_f_release(int* hid){ + return grib_f_release_( hid); +} + +int grib_f_dump_(int* gid){ + grib_handle *h = get_handle(*gid); + + if(!h) + return GRIB_INVALID_GRIB; + else + grib_dump_content(h,stdout,NULL,0,NULL); + + return GRIB_SUCCESS; +} +int grib_f_dump__(int* gid){ + return grib_f_dump_( gid); +} +int grib_f_dump(int* gid){ + return grib_f_dump_( gid); +} + + +int grib_f_print_(int* gid, char* key, int len){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + grib_dumper* d = NULL; + char buf[1024]; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + d = grib_dumper_factory("file",h,stdout,0,0); + err = grib_print(h, cast_char(buf,key,len), d); + grib_dumper_delete(d); + return err; + } +} +int grib_f_print__(int* gid, char* key, int len){ + return grib_f_print_( gid, key, len); +} +int grib_f_print(int* gid, char* key, int len){ + return grib_f_print_( gid, key, len); +} + +int grib_f_get_error_string_(int* err, char* buf, int len){ + const char* err_msg = grib_get_error_message(*err); + size_t erlen = strlen(err_msg); + if( len < erlen) return GRIB_ARRAY_TOO_SMALL; + strncpy(buf, err_msg,(size_t)erlen); + return GRIB_SUCCESS; +} +int grib_f_get_error_string__(int* err, char* buf, int len){ + return grib_f_get_error_string_(err,buf,len); +} +int grib_f_get_error_string(int* err, char* buf, int len){ + return grib_f_get_error_string_(err,buf,len); +} + +int grib_f_get_size_int_(int* gid, char* key, int* val, int len){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_size(h, cast_char(buf,key,len), &tsize); + *val = tsize; + return err; + } +} +int grib_f_get_size_int__(int* gid, char* key, int* val, int len){ + return grib_f_get_size_int_( gid, key, val, len); +} +int grib_f_get_size_int(int* gid, char* key, int* val, int len){ + return grib_f_get_size_int_( gid, key, val, len); +} + +int grib_f_get_size_long_(int* gid, char* key, long* val, int len){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_size(h, cast_char(buf,key,len), &tsize); + *val = tsize; + return err; + } +} +int grib_f_get_size_long__(int* gid, char* key, long* val, int len){ + return grib_f_get_size_long_( gid, key, val, len); +} +int grib_f_get_size_long(int* gid, char* key, long* val, int len){ + return grib_f_get_size_long_( gid, key, val, len); +} + +int grib_f_index_get_size_int_(int* gid, char* key, int* val, int len){ + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_index_get_size(h, cast_char(buf,key,len), &tsize); + *val = tsize; + return err; + } +} +int grib_f_index_get_size_int__(int* gid, char* key, int* val, int len){ + return grib_f_index_get_size_int_( gid, key, val, len); +} +int grib_f_index_get_size_int(int* gid, char* key, int* val, int len){ + return grib_f_index_get_size_int_( gid, key, val, len); +} + +int grib_f_index_get_size_long_(int* gid, char* key, long* val, int len){ + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_index_get_size(h, cast_char(buf,key,len), &tsize); + *val = tsize; + return err; + } +} +int grib_f_index_get_size_long__(int* gid, char* key, long* val, int len){ + return grib_f_index_get_size_long_( gid, key, val, len); +} +int grib_f_index_get_size_long(int* gid, char* key, long* val, int len){ + return grib_f_index_get_size_long_( gid, key, val, len); +} + +int grib_f_get_int_(int* gid, char* key, int* val, int len){ + grib_handle *h = get_handle(*gid); + long long_val; + int err = GRIB_SUCCESS; + char buf[1024]; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_get_long(h, cast_char(buf,key,len),&long_val); + *val = long_val; + return err; +} +int grib_f_get_int__(int* gid, char* key, int* val, int len){ + return grib_f_get_int_( gid, key, val, len); +} +int grib_f_get_int(int* gid, char* key, int* val, int len){ + return grib_f_get_int_( gid, key, val, len); +} +int grib_f_get_long_(int* gid, char* key, long* val, int len){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_get_long(h, cast_char(buf,key,len),val); + return err; +} +int grib_f_get_long__(int* gid, char* key, long* val, int len){ + return grib_f_get_long_( gid, key, val, len); +} +int grib_f_get_long(int* gid, char* key, long* val, int len){ + return grib_f_get_long_( gid, key, val, len); +} +int grib_f_get_int_array_(int* gid, char* key, int *val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + long* long_val = NULL; + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + + + if(!h) return GRIB_INVALID_GRIB; + + if(sizeof(long) == sizeof(int)){ + long_val = (long*)val; + err = grib_get_long_array(h, cast_char(buf,key,len), long_val, &lsize); + *size = lsize; + return err; + } + if(*size) + long_val = grib_context_malloc(h->context,(*size)*(sizeof(long))); + else + long_val = grib_context_malloc(h->context,(sizeof(long))); + + if(!long_val) return GRIB_OUT_OF_MEMORY; + err = grib_get_long_array(h, cast_char(buf,key,len), long_val, &lsize); + + for(*size=0;*sizecontext,long_val); + return err; +} +int grib_f_get_int_array__(int* gid, char* key, int*val, int* size, int len){ + return grib_f_get_int_array_( gid, key, val, size, len); +} +int grib_f_get_int_array(int* gid, char* key, int*val, int* size, int len){ + return grib_f_get_int_array_( gid, key, val, size, len); +} +int grib_f_get_long_array_(int* gid, char* key, long *val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_long_array(h, cast_char(buf,key,len), val, &lsize); + *size=lsize; + + return err; +} +int grib_f_get_long_array__(int* gid, char* key, long *val, int* size, int len){ + return grib_f_get_long_array_( gid, key, val, size, len); +} +int grib_f_get_long_array(int* gid, char* key, long *val, int* size, int len){ + return grib_f_get_long_array_( gid, key, val, size, len); +} + +int grib_f_index_get_string_(int* gid, char* key, char* val, int *eachsize,int* size, int len){ + + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + int i; + char buf[1024]; + size_t lsize = *size; + char** bufval; + char* p=val; + + if(!h) return GRIB_INVALID_GRIB; + + bufval=(char**)grib_context_malloc_clear(h->context,sizeof(char*)* *size); + + err = grib_index_get_string(h, cast_char(buf,key,len), bufval, &lsize); + *size = lsize; + + if (err) return err; + + for (i=0;icontext,bufval); + return GRIB_ARRAY_TOO_SMALL; + } + memcpy(p,bufval[i],l); + p+=l; + for (j=0;j<*eachsize-l;j++) *(p++)=' '; + } + grib_context_free(h->context,bufval); + + return err; +} +int grib_f_index_get_string__(int* gid, char* key, char *val, int* eachsize, int* size, int len){ + return grib_f_index_get_string_(gid,key,val,eachsize,size,len); +} +int grib_f_index_get_string(int* gid, char* key, char* val, int* eachsize, int* size, int len){ + return grib_f_index_get_string_(gid,key,val,eachsize,size,len); +} + +int grib_f_index_get_long_(int* gid, char* key, long *val, int* size, int len){ + + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_index_get_long(h, cast_char(buf,key,len), val, &lsize); + *size = lsize; + return err; +} +int grib_f_index_get_long__(int* gid, char* key, long *val, int* size, int len){ + return grib_f_index_get_long_(gid,key,val,size,len); +} +int grib_f_index_get_long(int* gid, char* key, long *val, int* size, int len){ + return grib_f_index_get_long_(gid,key,val,size,len); +} + +int grib_f_index_get_int_(int* gid, char* key, int *val, int* size, int len){ + + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + long* lval=0; + int i; + + if(!h) return GRIB_INVALID_GRIB; + + lval=grib_context_malloc(h->context,sizeof(long)* *size); + if (!lval) return GRIB_OUT_OF_MEMORY; + + err = grib_index_get_long(h, cast_char(buf,key,len), lval, &lsize); + for (i=0;icontext,(lsize)*(sizeof(long))); + else + long_val = grib_context_malloc(h->context,(sizeof(long))); + + if(!long_val) return GRIB_OUT_OF_MEMORY; + + for(lsize=0;lsize<(*size);lsize++) + long_val[lsize] = val[lsize]; + + err = grib_set_long_array(h, cast_char(buf,key,len), long_val, lsize); + + grib_context_free(h->context,long_val); + return err; +} +int grib_f_set_int_array__(int* gid, char* key, int* val, int* size, int len){ + return grib_f_set_int_array_( gid, key, val, size, len); +} +int grib_f_set_int_array(int* gid, char* key, int* val, int* size, int len){ + return grib_f_set_int_array_( gid, key, val, size, len); +} +int grib_f_set_long_array_(int* gid, char* key, long* val, int* size, int len){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_long_array(h, cast_char(buf,key,len), val, lsize); + + return err; +} +int grib_f_set_long_array__(int* gid, char* key, long* val, int* size, int len){ + return grib_f_set_long_array_( gid, key, val, size, len); +} +int grib_f_set_long_array(int* gid, char* key, long* val, int* size, int len){ + return grib_f_set_long_array_( gid, key, val, size, len); +} + + +int grib_f_set_int_(int* gid, char* key, int* val, int len){ + grib_handle *h = get_handle(*gid); + char buf[1024]; + long long_val = *val; + if(!h) return GRIB_INVALID_GRIB; + return grib_set_long(h, cast_char(buf,key,len), long_val); +} +int grib_f_set_int__(int* gid, char* key, int* val, int len){ + return grib_f_set_int_( gid, key, val, len); +} +int grib_f_set_int(int* gid, char* key, int* val, int len){ + return grib_f_set_int_( gid, key, val, len); +} + +int grib_f_set_long_(int* gid, char* key, long* val, int len){ + grib_handle *h = get_handle(*gid); + char buf[1024]; + if(!h) return GRIB_INVALID_GRIB; + return grib_set_long(h, cast_char(buf,key,len), *val); +} +int grib_f_set_long__(int* gid, char* key, long* val, int len){ + return grib_f_set_long_( gid, key, val, len); +} +int grib_f_set_long(int* gid, char* key, long* val, int len){ + return grib_f_set_long_( gid, key, val, len); +} + +int grib_f_set_missing_(int* gid, char* key,int len){ + + grib_handle *h = get_handle(*gid); + char buf[1024]; + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_missing(h, cast_char(buf,key,len)); +} +int grib_f_set_missing__(int* gid, char* key, int len){ + return grib_f_set_missing_( gid, key, len); +} +int grib_f_set_missing(int* gid, char* key, int len){ + return grib_f_set_missing_( gid, key, len); +} + +int grib_f_is_missing_(int* gid, char* key,int* isMissing,int len){ + int err=0; + grib_handle *h = get_handle(*gid); + char buf[1024]; + if(!h) return GRIB_INVALID_GRIB; + + *isMissing=grib_is_missing(h, cast_char(buf,key,len),&err); + return err; +} +int grib_f_is_missing__(int* gid, char* key,int* isMissing,int len){ + return grib_f_is_missing_(gid,key,isMissing,len); +} +int grib_f_is_missing(int* gid, char* key,int* isMissing,int len){ + return grib_f_is_missing_(gid,key,isMissing,len); +} + +int grib_f_is_defined_(int* gid, char* key,int* isDefined,int len){ + grib_handle *h = get_handle(*gid); + char buf[1024]; + if(!h) return GRIB_INVALID_GRIB; + + *isDefined=grib_is_defined(h, cast_char(buf,key,len)); + return GRIB_SUCCESS; +} +int grib_f_is_defined__(int* gid, char* key,int* isDefined,int len){ + return grib_f_is_defined_(gid,key,isDefined,len); +} +int grib_f_is_defined(int* gid, char* key,int* isDefined,int len){ + return grib_f_is_defined_(gid,key,isDefined,len); +} + +int grib_f_set_real4_(int* gid, char* key, float* val, int len){ + + grib_handle *h = get_handle(*gid); + char buf[1024]; + double val8 = *val; + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double(h, cast_char(buf,key,len), val8); +} +int grib_f_set_real4__(int* gid, char* key, float* val, int len){ + return grib_f_set_real4_( gid, key, val, len); +} +int grib_f_set_real4(int* gid, char* key, float* val, int len){ + return grib_f_set_real4_( gid, key, val, len); +} + +int grib_f_get_real4_element_(int* gid, char* key, int* index,float* val, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + double val8 = 0; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_double_element(h, cast_char(buf,key,len), *index,&val8); + *val = val8; + return err; +} +int grib_f_get_real4_element__(int* gid, char* key,int* index, float* val,int len){ + return grib_f_get_real4_element_( gid, key, index, val, len); +} +int grib_f_get_real4_element(int* gid, char* key,int* index, float* val,int len){ + return grib_f_get_real4_element_( gid, key, index, val, len); +} + +int grib_f_get_real4_elements_(int* gid, char* key,int* index, float *val,int* size, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + long i=0; + double* val8 = NULL; + + if(!h) return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + + err = grib_get_double_elements(h, cast_char(buf,key,len), index,(long)lsize,val8); + + for(i=0;icontext,val8); + + return err; +} +int grib_f_get_real4_elements__(int* gid, char* key,int* index, float* val,int* len,int size){ + return grib_f_get_real4_elements_( gid, key, index, val, len,size); +} +int grib_f_get_real4_elements(int* gid, char* key,int* index, float* val,int* len,int size){ + return grib_f_get_real4_elements_( gid, key, index, val, len,size); +} + +int grib_f_get_real4_(int* gid, char* key, float* val, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + double val8 = 0; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_double(h, cast_char(buf,key,len), &val8); + *val = val8; + return err; +} +int grib_f_get_real4__(int* gid, char* key, float* val, int len){ + return grib_f_get_real4_( gid, key, val, len); +} +int grib_f_get_real4(int* gid, char* key, float* val, int len){ + return grib_f_get_real4_( gid, key, val, len); +} + +int grib_f_get_real4_array_(int* gid, char* key, float *val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + double* val8 = NULL; + size_t i; + + if(!h) return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + + err = grib_get_double_array(h, cast_char(buf,key,len), val8, &lsize); + + for(i=0;icontext,val8); + + return err; +} +int grib_f_get_real4_array__(int* gid, char* key, float* val, int* size, int len){ + return grib_f_get_real4_array_( gid, key, val, size, len); +} +int grib_f_get_real4_array(int* gid, char* key, float* val, int* size, int len){ + return grib_f_get_real4_array_( gid, key, val, size, len); +} + +int grib_f_set_real4_array_(int* gid, char* key, float*val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + double* val8 = NULL; + + if(!h) return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,lsize*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + for(lsize=0;lsize<*size;lsize++) + val8[lsize] = val[lsize]; + + err = grib_set_double_array(h, cast_char(buf,key,len), val8, lsize); + grib_context_free(h->context,val8); + return err; + +} + +int grib_f_set_real4_array__(int* gid, char* key, float*val, int* size, int len){ + return grib_f_set_real4_array_( gid, key, val, size, len); +} +int grib_f_set_real4_array(int* gid, char* key, float*val, int* size, int len){ + return grib_f_set_real4_array_( gid, key, val, size, len); +} + +int grib_f_index_select_real8_(int* gid, char* key, double* val, int len){ + + grib_index *h = get_index(*gid); + + char buf[1024]; + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_double(h, cast_char(buf,key,len), *val); +} +int grib_f_index_select_real8__(int* gid, char* key, double* val, int len){ + return grib_f_index_select_real8_(gid,key,val,len); +} +int grib_f_index_select_real8(int* gid, char* key, double* val, int len){ + return grib_f_index_select_real8_(gid,key,val,len); +} + +int grib_f_index_select_string_(int* gid, char* key, char* val, int len, int vallen){ + + grib_index *h = get_index(*gid); + + char buf[1024]; + char bufval[1024]; + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_string(h, cast_char(buf,key,len), cast_char(bufval,val,vallen)); +} +int grib_f_index_select_string__(int* gid, char* key, char* val, int len, int vallen){ + return grib_f_index_select_string_(gid,key,val,len,vallen); +} +int grib_f_index_select_string(int* gid, char* key, char* val, int len, int vallen){ + return grib_f_index_select_string_(gid,key,val,len,vallen); +} + +int grib_f_index_select_int_(int* gid, char* key, int* val, int len){ + + grib_index *h = get_index(*gid); + long lval=*val; + char buf[1024]; + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_long(h, cast_char(buf,key,len), lval); +} +int grib_f_index_select_int__(int* gid, char* key, int* val, int len){ + return grib_f_index_select_int_(gid,key,val,len); +} +int grib_f_index_select_int(int* gid, char* key, int* val, int len){ + return grib_f_index_select_int_(gid,key,val,len); +} + +int grib_f_index_select_long_(int* gid, char* key, long* val, int len){ + + grib_index *h = get_index(*gid); + + char buf[1024]; + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_long(h, cast_char(buf,key,len), *val); +} +int grib_f_index_select_long__(int* gid, char* key, long* val, int len){ + return grib_f_index_select_long_(gid,key,val,len); +} +int grib_f_index_select_long(int* gid, char* key, long* val, int len){ + return grib_f_index_select_long_(gid,key,val,len); +} + +int grib_f_set_real8_(int* gid, char* key, double* val, int len){ + + grib_handle *h = get_handle(*gid); + + char buf[1024]; + + if(!h) return GRIB_INVALID_GRIB; + return grib_set_double(h, cast_char(buf,key,len), *val); +} + + +int grib_f_set_real8__(int* gid, char* key, double* val, int len){ + return grib_f_set_real8_( gid, key, val, len); +} +int grib_f_set_real8(int* gid, char* key, double* val, int len){ + return grib_f_set_real8_( gid, key, val, len); +} + +int grib_f_get_real8_(int* gid, char* key, double* val, int len){ + + grib_handle *h = get_handle(*gid); + char buf[1024]; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_get_double(h, cast_char(buf,key,len), val); + +} +int grib_f_get_real8__(int* gid, char* key, double* val, int len){ + return grib_f_get_real8_( gid, key, val, len); +} +int grib_f_get_real8(int* gid, char* key, double* val, int len){ + return grib_f_get_real8_( gid, key, val, len); +} + +int grib_f_get_real8_element_(int* gid, char* key,int* index, double* val, int len){ + + grib_handle *h = get_handle(*gid); + char buf[1024]; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_get_double_element(h, cast_char(buf,key,len), *index,val); + +} +int grib_f_get_real8_element__(int* gid, char* key, int* index,double* val, int len){ + return grib_f_get_real8_element_( gid, key, index, val,len); +} +int grib_f_get_real8_element(int* gid, char* key, int* index,double* val, int len){ + return grib_f_get_real8_element_( gid, key, index, val,len); +} + +int grib_f_get_real8_elements_(int* gid, char* key,int* index, double* val, int *size, int len){ + + grib_handle *h = get_handle(*gid); + char buf[1024]; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_get_double_elements(h, cast_char(buf,key,len), index,*size,val); + +} +int grib_f_get_real8_elements__(int* gid, char* key, int* index,double* val, int* len,int size){ + return grib_f_get_real8_elements_( gid, key, index, val,len,size); +} +int grib_f_get_real8_elements(int* gid, char* key, int* index,double* val, int* len,int size){ + return grib_f_get_real8_elements_( gid, key, index, val,len,size); +} + +int grib_f_find_nearest_four_single_(int* gid,int* is_lsm, + double* inlat,double* inlon, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) { + grib_nearest* nearest=NULL; + int err=0; + unsigned long flags=0; + size_t len=4; + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + nearest=grib_nearest_new(h,&err); + if (err!=GRIB_SUCCESS) return err; + + return grib_nearest_find(nearest,h,*inlat,*inlon, + flags,outlats,outlons,values,distances,indexes,&len); +} +int grib_f_find_nearest_four_single__(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) { + + return grib_f_find_nearest_single_(gid,is_lsm, + inlats,inlons,outlats,outlons,values, + distances,indexes); +} +int grib_f_find_nearest_four_single(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) { + + return grib_f_find_nearest_single_(gid,is_lsm, + inlats,inlons,outlats,outlons,values, + distances,indexes); +} + +int grib_f_find_nearest_single_(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) { + + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_nearest_find_multiple(h,*is_lsm, + inlats,inlons,1,outlats,outlons, + values,distances,indexes); +} +int grib_f_find_nearest_single__(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) { + + return grib_f_find_nearest_single_(gid,is_lsm, + inlats,inlons,outlats,outlons,values, + distances,indexes); +} +int grib_f_find_nearest_single(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) { + + return grib_f_find_nearest_single_(gid,is_lsm, + inlats,inlons,outlats,outlons,values, + distances,indexes); +} + +int grib_f_find_nearest_multiple_(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes, int* npoints) { + + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_nearest_find_multiple(h,*is_lsm, + inlats,inlons,*npoints,outlats,outlons, + values,distances,indexes); +} +int grib_f_find_nearest_multiple__(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes, int* npoints) { + + return grib_f_find_nearest_multiple_(gid,is_lsm, + inlats,inlons,outlats,outlons,values, + distances,indexes,npoints); +} +int grib_f_find_nearest_multiple(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes, int* npoints) { + + return grib_f_find_nearest_multiple_(gid,is_lsm, + inlats,inlons,outlats,outlons,values, + distances,indexes,npoints); +} + + + + +int grib_f_get_real8_array_(int* gid, char* key, double*val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_double_array(h, cast_char(buf,key,len), val, &lsize); + *size = lsize; + return err; + } +} +int grib_f_get_real8_array__(int* gid, char* key, double*val, int* size, int len){ + return grib_f_get_real8_array_( gid, key, val, size, len); +} +int grib_f_get_real8_array(int* gid, char* key, double*val, int* size, int len){ + return grib_f_get_real8_array_( gid, key, val, size, len); +} + +int grib_f_set_real8_array_(int* gid, char* key, double*val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + + char buf[1024]; + + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double_array(h, cast_char(buf,key,len), val, lsize); + +} + +int grib_f_set_real8_array__(int* gid, char* key, double *val, int* size, int len){ + return grib_f_set_real8_array_( gid, key, val, size, len); +} +int grib_f_set_real8_array(int* gid, char* key, double *val, int* size, int len){ + return grib_f_set_real8_array_( gid, key, val, size, len); +} + +int grib_f_get_string_(int* gid, char* key, char* val,int len, int len2){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = len2; + + if(!h) return GRIB_INVALID_GRIB; + + fort_char_clean(val,len2); + + err = grib_get_string(h, cast_char(buf,key,len), val, &lsize); + + czstr_to_fortran(val,len2); + + return err; +} + +int grib_f_get_string__(int* gid, char* key, char* val, int len, int len2){ + return grib_f_get_string_( gid, key, val, len, len2); +} +int grib_f_get_string(int* gid, char* key, char* val, int len, int len2){ + return grib_f_get_string_( gid, key, val, len, len2); +} + +int grib_f_set_string_(int* gid, char* key, char* val, int len, int len2){ + + grib_handle *h = get_handle(*gid); + + char buf[1024]; + char buf2[1024]; + size_t lsize = len2; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_string(h, cast_char(buf,key,len), cast_char(buf2,val,len2), &lsize); + +} + +int grib_f_set_string__(int* gid, char* key, char* val, int len, int len2){ + return grib_f_set_string_( gid, key, val, len, len2); +} +int grib_f_set_string(int* gid, char* key, char* val, int len, int len2){ + return grib_f_set_string_( gid, key, val, len, len2); +} + +int grib_f_get_data_real4_(int* gid,float* lats, float* lons,float* values,size_t* size) { + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + double *lat8=NULL,*lon8=NULL,*val8 = NULL; + size_t i=0; + + if(!h) return GRIB_INVALID_GRIB; + + val8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + if(!val8) return GRIB_OUT_OF_MEMORY; + lon8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + if(!lon8) return GRIB_OUT_OF_MEMORY; + lat8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + if(!lat8) return GRIB_OUT_OF_MEMORY; + + err=grib_get_data(h,lat8,lon8,val8,size); + + for(i=0;i<*size;i++) { + values[i] = val8[i]; + lats[i] = lat8[i]; + lons[i] = lon8[i]; + } + + grib_context_free(h->context,val8); + grib_context_free(h->context,lat8); + grib_context_free(h->context,lon8); + + return err; + +} +int grib_f_get_data_real4__(int* gid,float* lats, float* lons,float* values,size_t* size) { + return grib_f_get_data_real4_(gid,lats,lons,values,size); +} +int grib_f_get_data_real4(int* gid,float* lats, float* lons,float* values,size_t* size) { + return grib_f_get_data_real4_(gid,lats,lons,values,size); +} + +int grib_f_get_data_real8_(int* gid,double* lats, double* lons,double* values,size_t* size) { + + grib_handle *h = get_handle(*gid); + return grib_get_data(h,lats,lons,values,size); + +} +int grib_f_get_data_real8__(int* gid,double* lats, double* lons,double* values,size_t* size) { + return grib_f_get_data_real8_(gid,lats,lons,values,size); +} +int grib_f_get_data_real8(int* gid,double* lats, double* lons,double* values,size_t* size) { + return grib_f_get_data_real8_(gid,lats,lons,values,size); +} + +int grib_f_get_message_size_(int* gid, size_t *len){ + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + + *len = h->buffer->ulength; + return GRIB_SUCCESS; + +} +int grib_f_get_message_size__(int* gid, size_t *len){ + return grib_f_get_message_size_( gid, len); +} +int grib_f_get_message_size(int* gid, size_t *len){ + return grib_f_get_message_size_( gid, len); +} + +int grib_f_copy_message_(int* gid, void* mess,size_t* len){ + grib_handle *h = get_handle(*gid); + if(!h) + return GRIB_INVALID_GRIB; + + if(*len < h->buffer->ulength) { + grib_context_log(h->context,GRIB_LOG_ERROR,"grib_copy_message: buffer=%ld message size=%ld",*len,h->buffer->ulength); + return GRIB_BUFFER_TOO_SMALL; + } + + + memcpy(mess,h->buffer->data,h->buffer->ulength); + *len=h->buffer->ulength; + return GRIB_SUCCESS; + +} + +int grib_f_copy_message__(int* gid, void* mess,size_t* len){ + return grib_f_copy_message_( gid, mess, len); +} +int grib_f_copy_message(int* gid, void* mess,size_t* len){ + return grib_f_copy_message_( gid, mess, len); +} + +void grib_f_check_(int* err,char* call,char* str,int lencall,int lenstr){ + char bufstr[1024]={0,}; + char bufcall[1024]={0,}; + grib_context* c=grib_context_get_default(); + if ( *err == GRIB_SUCCESS || *err == GRIB_END_OF_FILE ) return; + cast_char(bufcall,call,lencall); + cast_char(bufstr,str,lenstr); + grib_context_log(c,GRIB_LOG_ERROR,"%s: %s %s", + bufcall,bufstr,grib_get_error_message(*err)); + exit(*err); +} + +void grib_f_check__(int* err,char* call, char* key, int lencall, int lenkey){ + grib_f_check_(err,call,key,lencall,lenkey); +} +void grib_f_check(int* err,char* call, char* key, int lencall, int lenkey){ + grib_f_check_(err,call,key,lencall,lenkey); +} + +int grib_f_write_(int* gid, int* fid) { + grib_handle *h = get_handle(*gid); + FILE* f = get_file(*fid); + const void* mess = NULL; + size_t mess_len = 0; + + if(!f) return GRIB_INVALID_FILE; + if (!h) return GRIB_INVALID_GRIB; + + grib_get_message(h,&mess,&mess_len); + if(fwrite(mess,1, mess_len,f) != mess_len) { + perror("grib_write"); + return GRIB_IO_PROBLEM; + } + + return GRIB_SUCCESS; +} + + +int grib_f_write__(int* gid, int* fid) { + return grib_f_write_(gid,fid); +} + +int grib_f_write(int* gid, int* fid) { + return grib_f_write_(gid,fid); +} + +int grib_f_multi_write_(int* gid, int* fid) { + grib_multi_handle *h = get_multi_handle(*gid); + FILE* f = get_file(*fid); + + if(!f) return GRIB_INVALID_FILE; + if (!h) return GRIB_INVALID_GRIB; + + return grib_multi_handle_write(h,f); +} + + +int grib_f_multi_write__(int* gid, int* fid) { + return grib_f_multi_write_(gid,fid); +} + +int grib_f_multi_write(int* gid, int* fid) { + return grib_f_multi_write_(gid,fid); +} + +int grib_f_multi_append_(int* ingid, int* sec,int* mgid) { + grib_handle *h = get_handle(*ingid); + grib_multi_handle *mh = get_multi_handle(*mgid); + + if (!h) return GRIB_INVALID_GRIB; + + if (!mh) { + mh=grib_multi_handle_new(h->context); + push_multi_handle(mh,mgid); + } + + return grib_multi_handle_append(h,*sec,mh); +} + +int grib_f_multi_append(int* ingid, int* sec,int* mgid) { + return grib_f_multi_append_(ingid, sec, mgid); +} + +int grib_f_multi_append__(int* ingid, int* sec,int* mgid) { + return grib_f_multi_append_(ingid, sec, mgid); +} diff --git a/fortran/grib_fortran_kinds.c b/fortran/grib_fortran_kinds.c new file mode 100644 index 000000000..637f612bc --- /dev/null +++ b/fortran/grib_fortran_kinds.c @@ -0,0 +1,52 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include + +void f_sizeof(void *x,void *y, int *size) { + *size=((char*)y)-((char*)x); +} +void f_sizeof_(void *x,void *y, int *size) { + *size=((char*)y)-((char*)x); +} +void f_sizeof__(void *x,void *y, int *size) { + *size=((char*)y)-((char*)x); +} + +void check_double(double *x,double *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_double_(double *x,double *y,char* ret) {check_double(x,y,ret);} +void check_double__(double *x,double *y,char* ret) {check_double(x,y,ret);} + +void check_float(float *x,float *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_float_(float *x,float *y,char* ret) { check_float(x,y,ret); } +void check_float__(float *x,float *y,char* ret) { check_float(x,y,ret); } + +void check_int(int *x,int *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_int_(int *x,int *y,char* ret) { check_int(x,y,ret); } +void check_int__(int *x,int *y,char* ret) { check_int(x,y,ret); } + +void check_long(long *x,long *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_long_(long *x,long *y,char* ret) {check_long(x,y,ret);} +void check_long__(long *x,long *y,char* ret) {check_long(x,y,ret);} + +void check_size_t(size_t *x,size_t *y,char* ret) { + *ret = ((char*)y)-((char*)x) == sizeof(*x) ? 't' : 'f'; +} +void check_size_t_(size_t *x,size_t *y,char* ret) {check_size_t(x,y,ret);} +void check_size_t__(size_t *x,size_t *y,char* ret) {check_size_t(x,y,ret);} + diff --git a/fortran/grib_fortran_prototypes.h b/fortran/grib_fortran_prototypes.h new file mode 100644 index 000000000..2ad3fb454 --- /dev/null +++ b/fortran/grib_fortran_prototypes.h @@ -0,0 +1,280 @@ + +/* grib_fortran.c */ +int grib_f_read_any_headers_only_from_file_(int *fid, char *buffer, int *nbytes); +int grib_f_read_any_headers_only_from_file__(int *fid, char *buffer, int *nbytes); +int grib_f_read_any_headers_only_from_file(int *fid, char *buffer, int *nbytes); +int grib_f_read_any_from_file_(int *fid, char *buffer, int *nbytes); +int grib_f_read_any_from_file__(int *fid, char *buffer, int *nbytes); +int grib_f_read_any_from_file(int *fid, char *buffer, int *nbytes); +int grib_f_write_file_(int *fid, char *buffer, int *nbytes); +int grib_f_write_file__(int *fid, char *buffer, int *nbytes); +int grib_f_write_file(int *fid, char *buffer, int *nbytes); +int grib_f_read_file_(int *fid, char *buffer, int *nbytes); +int grib_f_read_file__(int *fid, char *buffer, int *nbytes); +int grib_f_read_file(int *fid, char *buffer, int *nbytes); +int grib_f_open_file_(int *fid, char *name, char *op, int lname, int lop); +int grib_f_open_file__(int *fid, char *name, char *op, int lname, int lop); +int grib_f_open_file(int *fid, char *name, char *op, int lname, int lop); +int grib_f_close_file_(int *fid); +int grib_f_close_file__(int *fid); +int grib_f_close_file(int *fid); +void grib_f_write_on_fail(int *gid); +int grib_f_multi_support_on_(void); +int grib_f_multi_support_on__(void); +int grib_f_multi_support_on(void); +int grib_f_multi_support_off_(void); +int grib_f_multi_support_off__(void); +int grib_f_multi_support_off(void); +int grib_f_iterator_new_(int *gid, int *iterid, int *mode); +int grib_f_iterator_new__(int *gid, int *iterid, int *mode); +int grib_f_iterator_new(int *gid, int *iterid, int *mode); +int grib_f_iterator_next_(int *iterid, double *lat, double *lon, double *value); +int grib_f_iterator_next__(int *iterid, double *lat, double *lon, double *value); +int grib_f_iterator_next(int *iterid, double *lat, double *lon, double *value); +int grib_f_iterator_delete_(int *iterid); +int grib_f_iterator_delete__(int *iterid); +int grib_f_iterator_delete(int *iterid); +int grib_f_keys_iterator_new_(int *gid, int *iterid, char *name_space, int len); +int grib_f_keys_iterator_new__(int *gid, int *iterid, char *name_space, int len); +int grib_f_keys_iterator_new(int *gid, int *iterid, char *name_space, int len); +int grib_f_keys_iterator_next_(int *iterid); +int grib_f_keys_iterator_next__(int *iterid); +int grib_f_keys_iterator_next(int *iterid); +int grib_f_keys_iterator_delete_(int *iterid); +int grib_f_keys_iterator_delete__(int *iterid); +int grib_f_keys_iterator_delete(int *iterid); +int grib_f_gribex_mode_on_(void); +int grib_f_gribex_mode_on__(void); +int grib_f_gribex_mode_on(void); +int grib_f_gribex_mode_off_(void); +int grib_f_gribex_mode_off__(void); +int grib_f_gribex_mode_off(void); +int grib_f_skip_computed_(int *iterid); +int grib_f_skip_computed__(int *iterid); +int grib_f_skip_computed(int *iterid); +int grib_f_skip_coded_(int *iterid); +int grib_f_skip_coded__(int *iterid); +int grib_f_skip_coded(int *iterid); +int grib_f_skip_edition_specific_(int *iterid); +int grib_f_skip_edition_specific__(int *iterid); +int grib_f_skip_edition_specific(int *iterid); +int grib_f_skip_duplicates_(int *iterid); +int grib_f_skip_duplicates__(int *iterid); +int grib_f_skip_duplicates(int *iterid); +int grib_f_skip_read_only_(int *iterid); +int grib_f_skip_read_only__(int *iterid); +int grib_f_skip_read_only(int *iterid); +int grib_f_skip_function_(int *iterid); +int grib_f_skip_function__(int *iterid); +int grib_f_skip_function(int *iterid); +int grib_f_keys_iterator_get_name_(int *iterid, char *name, int len); +int grib_f_keys_iterator_get_name__(int *kiter, char *name, int len); +int grib_f_keys_iterator_get_name(int *kiter, char *name, int len); +int grib_f_keys_iterator_rewind_(int *kiter); +int grib_f_keys_iterator_rewind__(int *kiter); +int grib_f_keys_iterator_rewind(int *kiter); +int grib_f_new_from_message_(int *gid, void *buffer, size_t *bufsize); +int grib_f_new_from_message__(int *gid, void *buffer, size_t *bufsize); +int grib_f_new_from_message(int *gid, void *buffer, size_t *bufsize); +int grib_f_new_from_message_copy_(int *gid, void *buffer, size_t *bufsize); +int grib_f_new_from_message_copy__(int *gid, void *buffer, size_t *bufsize); +int grib_f_new_from_message_copy(int *gid, void *buffer, size_t *bufsize); +int grib_f_new_from_samples_(int *gid, char *name, int lname); +int grib_f_new_from_samples__(int *gid, char *name, int lname); +int grib_f_new_from_samples(int *gid, char *name, int lname); +int grib_f_new_from_template_(int *gid, char *name, int lname); +int grib_f_new_from_template__(int *gid, char *name, int lname); +int grib_f_new_from_template(int *gid, char *name, int lname); +int grib_f_clone_(int *gidsrc, int *giddest); +int grib_f_clone__(int *gidsrc, int *giddest); +int grib_f_clone(int *gidsrc, int *giddest); +int grib_f_util_sections_copy_(int *gidfrom, int *gidto, int *what, int *gidout); +int grib_f_util_sections_copy__(int *gidfrom, int *gidto, int *what, int *gidout); +int grib_f_util_sections_copy(int *gidfrom, int *gidto, int *what, int *gidout); +int grib_f_copy_namespace_(int *gidsrc, char *name, int *giddest, int len); +int grib_f_copy_namespace__(int *gidsrc, char *name, int *giddest, int len); +int grib_f_copy_namespace(int *gidsrc, char *name, int *giddest, int len); +int grib_f_count_in_file(int *fid, int *n); +int grib_f_count_in_file_(int *fid, int *n); +int grib_f_count_in_file__(int *fid, int *n); +int grib_f_new_from_file_(int *fid, int *gid); +int grib_f_new_from_file__(int *fid, int *gid); +int grib_f_new_from_file(int *fid, int *gid); +int grib_f_headers_only_new_from_file_(int *fid, int *gid); +int grib_f_headers_only_new_from_file__(int *fid, int *gid); +int grib_f_headers_only_new_from_file(int *fid, int *gid); +int grib_f_new_from_index_(int *iid, int *gid); +int grib_f_new_from_index__(int *iid, int *gid); +int grib_f_new_from_index(int *iid, int *gid); +int grib_f_index_new_from_file_(char *file, char *keys, int *gid, int lfile, int lkeys); +int grib_f_index_new_from_file__(char *file, char *keys, int *gid, int lfile, int lkeys); +int grib_f_index_new_from_file(char *file, char *keys, int *gid, int lfile, int lkeys); +int grib_f_index_add_file_(int* iid, char* file, int lfile); +int grib_f_index_add_file__(int* iid, char* file, int lfile); +int grib_f_index_add_file(int* iid, char* file, int lfile); +int grib_f_index_read_(char *file, int *gid, int lfile); +int grib_f_index_read__(char *file, int *gid, int lfile); +int grib_f_index_read(char *file, int *gid, int lfile); +int grib_f_index_write_(int *gid, char *file, int lfile); +int grib_f_index_write__(int *gid, char *file, int lfile); +int grib_f_index_write(int *gid, char *file, int lfile); +int grib_f_index_release_(int *hid); +int grib_f_index_release__(int *hid); +int grib_f_index_release(int *hid); +int grib_f_multi_handle_release_(int *hid); +int grib_f_multi_handle_release__(int *hid); +int grib_f_multi_handle_release(int *hid); +int grib_f_release_(int *hid); +int grib_f_release__(int *hid); +int grib_f_release(int *hid); +int grib_f_dump_(int *gid); +int grib_f_dump__(int *gid); +int grib_f_dump(int *gid); +int grib_f_print_(int *gid, char *key, int len); +int grib_f_print__(int *gid, char *key, int len); +int grib_f_print(int *gid, char *key, int len); +int grib_f_get_error_string_(int *err, char *buf, int len); +int grib_f_get_error_string__(int *err, char *buf, int len); +int grib_f_get_error_string(int *err, char *buf, int len); +int grib_f_get_size_int_(int *gid, char *key, int *val, int len); +int grib_f_get_size_int__(int *gid, char *key, int *val, int len); +int grib_f_get_size_int(int *gid, char *key, int *val, int len); +int grib_f_get_size_long_(int *gid, char *key, long *val, int len); +int grib_f_get_size_long__(int *gid, char *key, long *val, int len); +int grib_f_get_size_long(int *gid, char *key, long *val, int len); +int grib_f_index_get_size_int_(int *gid, char *key, int *val, int len); +int grib_f_index_get_size_int__(int *gid, char *key, int *val, int len); +int grib_f_index_get_size_int(int *gid, char *key, int *val, int len); +int grib_f_index_get_size_long_(int *gid, char *key, long *val, int len); +int grib_f_index_get_size_long__(int *gid, char *key, long *val, int len); +int grib_f_index_get_size_long(int *gid, char *key, long *val, int len); +int grib_f_get_int_(int *gid, char *key, int *val, int len); +int grib_f_get_int__(int *gid, char *key, int *val, int len); +int grib_f_get_int(int *gid, char *key, int *val, int len); +int grib_f_get_long_(int *gid, char *key, long *val, int len); +int grib_f_get_long__(int *gid, char *key, long *val, int len); +int grib_f_get_long(int *gid, char *key, long *val, int len); +int grib_f_get_int_array_(int *gid, char *key, int *val, int *size, int len); +int grib_f_get_int_array__(int *gid, char *key, int *val, int *size, int len); +int grib_f_get_int_array(int *gid, char *key, int *val, int *size, int len); +int grib_f_get_long_array_(int *gid, char *key, long *val, int *size, int len); +int grib_f_get_long_array__(int *gid, char *key, long *val, int *size, int len); +int grib_f_get_long_array(int *gid, char *key, long *val, int *size, int len); +int grib_f_index_get_string_(int *gid, char *key, char *val, int *eachsize, int *size, int len); +int grib_f_index_get_string__(int *gid, char *key, char *val, int *eachsize, int *size, int len); +int grib_f_index_get_string(int *gid, char *key, char *val, int *eachsize, int *size, int len); +int grib_f_index_get_long_(int *gid, char *key, long *val, int *size, int len); +int grib_f_index_get_long__(int *gid, char *key, long *val, int *size, int len); +int grib_f_index_get_long(int *gid, char *key, long *val, int *size, int len); +int grib_f_index_get_int_(int *gid, char *key, int *val, int *size, int len); +int grib_f_index_get_int__(int *gid, char *key, int *val, int *size, int len); +int grib_f_index_get_int(int *gid, char *key, int *val, int *size, int len); +int grib_f_index_get_real8_(int *gid, char *key, double *val, int *size, int len); +int grib_f_index_get_real8__(int *gid, char *key, double *val, int *size, int len); +int grib_f_index_get_real8(int *gid, char *key, double *val, int *size, int len); +int grib_f_set_int_array_(int *gid, char *key, int *val, int *size, int len); +int grib_f_set_int_array__(int *gid, char *key, int *val, int *size, int len); +int grib_f_set_int_array(int *gid, char *key, int *val, int *size, int len); +int grib_f_set_long_array_(int *gid, char *key, long *val, int *size, int len); +int grib_f_set_long_array__(int *gid, char *key, long *val, int *size, int len); +int grib_f_set_long_array(int *gid, char *key, long *val, int *size, int len); +int grib_f_set_int_(int *gid, char *key, int *val, int len); +int grib_f_set_int__(int *gid, char *key, int *val, int len); +int grib_f_set_int(int *gid, char *key, int *val, int len); +int grib_f_set_long_(int *gid, char *key, long *val, int len); +int grib_f_set_long__(int *gid, char *key, long *val, int len); +int grib_f_set_long(int *gid, char *key, long *val, int len); +int grib_f_set_missing_(int *gid, char *key, int len); +int grib_f_set_missing__(int *gid, char *key, int len); +int grib_f_set_missing(int *gid, char *key, int len); +int grib_f_is_missing_(int *gid, char *key, int *isMissing, int len); +int grib_f_is_defined_(int *gid, char *key, int *isDefined, int len); +int grib_f_is_missing__(int *gid, char *key, int *isMissing, int len); +int grib_f_is_missing(int *gid, char *key, int *isMissing, int len); +int grib_f_set_real4_(int *gid, char *key, float *val, int len); +int grib_f_set_real4__(int *gid, char *key, float *val, int len); +int grib_f_set_real4(int *gid, char *key, float *val, int len); +int grib_f_get_real4_element_(int *gid, char *key, int *index, float *val, int len); +int grib_f_get_real4_element__(int *gid, char *key, int *index, float *val, int len); +int grib_f_get_real4_element(int *gid, char *key, int *index, float *val, int len); +int grib_f_get_real4_elements_(int *gid, char *key, int *index, float *val, int *size, int len); +int grib_f_get_real4_elements__(int *gid, char *key, int *index, float *val, int *len, int size); +int grib_f_get_real4_elements(int *gid, char *key, int *index, float *val, int *len, int size); +int grib_f_get_real4_(int *gid, char *key, float *val, int len); +int grib_f_get_real4__(int *gid, char *key, float *val, int len); +int grib_f_get_real4(int *gid, char *key, float *val, int len); +int grib_f_get_real4_array_(int *gid, char *key, float *val, int *size, int len); +int grib_f_get_real4_array__(int *gid, char *key, float *val, int *size, int len); +int grib_f_get_real4_array(int *gid, char *key, float *val, int *size, int len); +int grib_f_set_real4_array_(int *gid, char *key, float *val, int *size, int len); +int grib_f_set_real4_array__(int *gid, char *key, float *val, int *size, int len); +int grib_f_set_real4_array(int *gid, char *key, float *val, int *size, int len); +int grib_f_index_select_real8_(int *gid, char *key, double *val, int len); +int grib_f_index_select_real8__(int *gid, char *key, double *val, int len); +int grib_f_index_select_real8(int *gid, char *key, double *val, int len); +int grib_f_index_select_string_(int *gid, char *key, char *val, int len, int vallen); +int grib_f_index_select_string__(int *gid, char *key, char *val, int len, int vallen); +int grib_f_index_select_string(int *gid, char *key, char *val, int len, int vallen); +int grib_f_index_select_int_(int *gid, char *key, int *val, int len); +int grib_f_index_select_int__(int *gid, char *key, int *val, int len); +int grib_f_index_select_int(int *gid, char *key, int *val, int len); +int grib_f_index_select_long_(int *gid, char *key, long *val, int len); +int grib_f_index_select_long__(int *gid, char *key, long *val, int len); +int grib_f_index_select_long(int *gid, char *key, long *val, int len); +int grib_f_set_real8_(int *gid, char *key, double *val, int len); +int grib_f_set_real8__(int *gid, char *key, double *val, int len); +int grib_f_set_real8(int *gid, char *key, double *val, int len); +int grib_f_get_real8_(int *gid, char *key, double *val, int len); +int grib_f_get_real8__(int *gid, char *key, double *val, int len); +int grib_f_get_real8(int *gid, char *key, double *val, int len); +int grib_f_get_real8_element_(int *gid, char *key, int *index, double *val, int len); +int grib_f_get_real8_element__(int *gid, char *key, int *index, double *val, int len); +int grib_f_get_real8_element(int *gid, char *key, int *index, double *val, int len); +int grib_f_get_real8_elements_(int *gid, char *key, int *index, double *val, int *size, int len); +int grib_f_get_real8_elements__(int *gid, char *key, int *index, double *val, int *len, int size); +int grib_f_get_real8_elements(int *gid, char *key, int *index, double *val, int *len, int size); +int grib_f_find_nearest_four_single_(int *gid, int *is_lsm, double *inlat, double *inlon, double *outlats, double *outlons, double *values, double *distances, int *indexes); +int grib_f_find_nearest_four_single__(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes); +int grib_f_find_nearest_four_single(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes); +int grib_f_find_nearest_single_(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes); +int grib_f_find_nearest_single__(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes); +int grib_f_find_nearest_single(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes); +int grib_f_find_nearest_multiple_(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes, int *npoints); +int grib_f_find_nearest_multiple__(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes, int *npoints); +int grib_f_find_nearest_multiple(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes, int *npoints); +int grib_f_get_real8_array_(int *gid, char *key, double *val, int *size, int len); +int grib_f_get_real8_array__(int *gid, char *key, double *val, int *size, int len); +int grib_f_get_real8_array(int *gid, char *key, double *val, int *size, int len); +int grib_f_set_real8_array_(int *gid, char *key, double *val, int *size, int len); +int grib_f_set_real8_array__(int *gid, char *key, double *val, int *size, int len); +int grib_f_set_real8_array(int *gid, char *key, double *val, int *size, int len); +int grib_f_get_string_(int *gid, char *key, char *val, int len, int len2); +int grib_f_get_string__(int *gid, char *key, char *val, int len, int len2); +int grib_f_get_string(int *gid, char *key, char *val, int len, int len2); +int grib_f_set_string_(int *gid, char *key, char *val, int len, int len2); +int grib_f_set_string__(int *gid, char *key, char *val, int len, int len2); +int grib_f_set_string(int *gid, char *key, char *val, int len, int len2); +int grib_f_get_data_real4_(int *gid, float *lats, float *lons, float *values, size_t *size); +int grib_f_get_data_real4__(int *gid, float *lats, float *lons, float *values, size_t *size); +int grib_f_get_data_real4(int *gid, float *lats, float *lons, float *values, size_t *size); +int grib_f_get_data_real8_(int *gid, double *lats, double *lons, double *values, size_t *size); +int grib_f_get_data_real8__(int *gid, double *lats, double *lons, double *values, size_t *size); +int grib_f_get_data_real8(int *gid, double *lats, double *lons, double *values, size_t *size); +int grib_f_get_message_size_(int *gid, size_t *len); +int grib_f_get_message_size__(int *gid, size_t *len); +int grib_f_get_message_size(int *gid, size_t *len); +int grib_f_copy_message_(int *gid, void *mess, size_t *len); +int grib_f_copy_message__(int *gid, void *mess, size_t *len); +int grib_f_copy_message(int *gid, void *mess, size_t *len); +void grib_f_check_(int *err, char *call, char *str, int lencall, int lenstr); +void grib_f_check__(int *err, char *call, char *key, int lencall, int lenkey); +void grib_f_check(int *err, char *call, char *key, int lencall, int lenkey); +int grib_f_write_(int *gid, int *fid); +int grib_f_write__(int *gid, int *fid); +int grib_f_write(int *gid, int *fid); +int grib_f_multi_write_(int *gid, int *fid); +int grib_f_multi_write__(int *gid, int *fid); +int grib_f_multi_write(int *gid, int *fid); +int grib_f_multi_append_(int *ingid, int *sec, int *mgid); +int grib_f_multi_append(int *ingid, int *sec, int *mgid); +int grib_f_multi_append__(int *ingid, int *sec, int *mgid); diff --git a/fortran/grib_typeSizes.f90 b/fortran/grib_typeSizes.f90 new file mode 100644 index 000000000..0a55f2e47 --- /dev/null +++ b/fortran/grib_typeSizes.f90 @@ -0,0 +1,58 @@ +! Description: +! Provide named kind parameters for use in declarations of real and integer +! variables with specific byte sizes (i.e. one, two, four, and eight byte +! integers; four and eight byte reals). The parameters can then be used +! in (KIND = XX) modifiers in declarations. +! A single function (byteSizesOK()) is provided to ensure that the selected +! kind parameters are correct. +! +! Input Parameters: +! None. +! +! Output Parameters: +! Public parameters, fixed at compile time: +! OneByteInt, TwoByteInt, FourByteInt, EightByteInt +! FourByteReal, EightByteRadl +! +! References and Credits: +! Written by +! Robert Pincus +! Cooperative Institue for Meteorological Satellite Studies +! University of Wisconsin - Madison +! 1225 W. Dayton St. +! Madison, Wisconsin 53706 +! Robert.Pincus@ssec.wisc.edu +! +! Design Notes: +! Fortran 90 doesn't allow one to check the number of bytes in a real variable; +! we check only that four byte and eight byte reals have different kind parameters. +! +module grib_typeSizes + implicit none + public + integer, parameter :: FourByteInt = selected_int_kind(9), & + EightByteInt = selected_int_kind(18) + + integer, parameter :: FourByteReal = selected_real_kind(P = 6, R = 37), & + EightByteReal = selected_real_kind(P = 13, R = 307) +contains + logical function byteSizesOK() + ! Users may call this function once to ensure that the kind parameters + ! the module defines are available with the current compiler. + ! We can't ensure that the two REAL kinds are actually four and + ! eight bytes long, but we can ensure that they are distinct. + ! Early Fortran 90 compilers would sometimes report incorrect results for + ! the bit_size intrinsic, but I haven't seen this in a long time. + + ! Local variables + integer (kind = FourByteInt) :: Four + + if (bit_size(Four) == 32 .and. & + FourByteReal > 0 .and. EightByteReal > 0 .and. & + FourByteReal /= EightByteReal) then + byteSizesOK = .true. + else + byteSizesOK = .false. + end if + end function byteSizesOK +end module grib_typeSizes diff --git a/fortran/grib_types.f90 b/fortran/grib_types.f90 new file mode 100644 index 000000000..d635c7011 --- /dev/null +++ b/fortran/grib_types.f90 @@ -0,0 +1,153 @@ +integer function kind_of_size_t() + integer(2), dimension(2) :: x2 = (/1, 2/) + integer(4), dimension(2) :: x4 = (/1, 2/) + integer(8), dimension(2) :: x8 = (/1, 2/) + character(len=1) :: ret + + kind_of_size_t=-1 + + call check_size_t(x2(1),x2(2),ret) + if (ret == 't') then + kind_of_size_t=2 + return + endif + + call check_size_t(x4(1),x4(2),ret) + if (ret == 't') then + kind_of_size_t=4 + return + endif + + call check_size_t(x8(1),x8(2),ret) + if (ret == 't') then + kind_of_size_t=8 + return + endif + +end function kind_of_size_t + +integer function kind_of_long() + integer(2), dimension(2) :: x2 = (/1, 2/) + integer(4), dimension(2) :: x4 = (/1, 2/) + integer(8), dimension(2) :: x8 = (/1, 2/) + character(len=1) :: ret + + kind_of_long=-1 + + call check_long(x2(1),x2(2),ret) + if (ret == 't') then + kind_of_long=2 + return + endif + + call check_long(x4(1),x4(2),ret) + if (ret == 't') then + kind_of_long=4 + return + endif + + call check_long(x8(1),x8(2),ret) + if (ret == 't') then + kind_of_long=8 + return + endif + +end function kind_of_long + +integer function kind_of_int() + integer(2), dimension(2) :: x2 = (/1, 2/) + integer(4), dimension(2) :: x4 = (/1, 2/) + integer(8), dimension(2) :: x8 = (/1, 2/) + character(len=1) :: ret + + kind_of_int=-1 + + call check_int(x2(1),x2(2),ret) + if (ret == 't') then + kind_of_int=2 + return + endif + + call check_int(x4(1),x4(2),ret) + if (ret == 't') then + kind_of_int=4 + return + endif + + call check_int(x8(1),x8(2),ret) + if (ret == 't') then + kind_of_int=8 + return + endif + +end function kind_of_int + +integer function kind_of_float() + real(4), dimension(2) :: x4 = (/1., 2./) + real(8), dimension(2) :: x8 = (/1., 2./) + character(len=1) :: ret + + kind_of_float=-1 + + call check_float(x4(1),x4(2),ret) + if (ret == 't') then + kind_of_float=4 + return + endif + + call check_float(x8(1),x8(2),ret) + if (ret == 't') then + kind_of_float=8 + return + endif + +end function kind_of_float + +integer function kind_of_double() + real(4), dimension(2) :: real4 = (/1., 2./) + real(8), dimension(2) :: real8 = (/1., 2./) + character(len=1) :: ret + + kind_of_double=-1 + + call check_double(real4(1),real4(2),ret) + if (ret == 't') then + kind_of_double=4 + return + endif + + call check_double(real8(1),real8(2),ret) + if (ret == 't') then + kind_of_double=8 + return + endif + +end function kind_of_double + +program kind_h + integer :: size + integer, dimension(2) :: i + integer(kind=2), dimension(2) :: i2 + integer(kind=4), dimension(2) :: i4 + real(kind=4), dimension(2) :: r4 + real(kind=8), dimension(2) :: r8 + + print *,"integer,public,parameter :: kindOfInt=",kind_of_int() + print *,"integer,public,parameter :: kindOfLong=",kind_of_long() + print *,"integer,public,parameter :: kindOfSize_t=",kind_of_size_t() + print *,"integer,public,parameter :: kindOfSize=",kind_of_size_t() + print *,"integer,public,parameter :: kindOfDouble=",kind_of_double() + print *,"integer,public,parameter :: kindOfFloat=",kind_of_float() + call f_sizeof(i(1),i(2),size) + print *,"integer,public,parameter :: sizeOfInteger=",size + call f_sizeof(i2(1),i2(2),size) + print *,"integer,public,parameter :: sizeOfInteger2=",size + call f_sizeof(i4(1),i4(2),size) + print *,"integer,public,parameter :: sizeOfInteger4=",size + call f_sizeof(r4(1),r4(2),size) + print *,"integer,public,parameter :: sizeOfReal4=",size + call f_sizeof(r8(1),r8(2),size) + print *,"integer,public,parameter :: sizeOfReal8=",size + +end program kind_h + diff --git a/fortran/same_int_long.f90 b/fortran/same_int_long.f90 new file mode 100644 index 000000000..57cb5e9c6 --- /dev/null +++ b/fortran/same_int_long.f90 @@ -0,0 +1,138 @@ +integer function kind_of_size_t() + integer(2), dimension(2) :: x2 = (/1, 2/) + integer(4), dimension(2) :: x4 = (/1, 2/) + integer(8), dimension(2) :: x8 = (/1, 2/) + character(len=1) :: ret + + kind_of_size_t=-1 + + call check_size_t(x2(1),x2(2),ret) + if (ret == 't') then + kind_of_size_t=2 + return + endif + + call check_size_t(x4(1),x4(2),ret) + if (ret == 't') then + kind_of_size_t=4 + return + endif + + call check_size_t(x8(1),x8(2),ret) + if (ret == 't') then + kind_of_size_t=8 + return + endif + +end function kind_of_size_t + +integer function kind_of_long() + integer(2), dimension(2) :: x2 = (/1, 2/) + integer(4), dimension(2) :: x4 = (/1, 2/) + integer(8), dimension(2) :: x8 = (/1, 2/) + character(len=1) :: ret + + kind_of_long=-1 + + call check_long(x2(1),x2(2),ret) + if (ret == 't') then + kind_of_long=2 + return + endif + + call check_long(x4(1),x4(2),ret) + if (ret == 't') then + kind_of_long=4 + return + endif + + call check_long(x8(1),x8(2),ret) + if (ret == 't') then + kind_of_long=8 + return + endif + +end function kind_of_long + +integer function kind_of_int() + integer(2), dimension(2) :: x2 = (/1, 2/) + integer(4), dimension(2) :: x4 = (/1, 2/) + integer(8), dimension(2) :: x8 = (/1, 2/) + character(len=1) :: ret + + kind_of_int=-1 + + call check_int(x2(1),x2(2),ret) + if (ret == 't') then + kind_of_int=2 + return + endif + + call check_int(x4(1),x4(2),ret) + if (ret == 't') then + kind_of_int=4 + return + endif + + call check_int(x8(1),x8(2),ret) + if (ret == 't') then + kind_of_int=8 + return + endif + +end function kind_of_int + +integer function kind_of_float() + real(4), dimension(2) :: x4 = (/1., 2./) + real(8), dimension(2) :: x8 = (/1., 2./) + character(len=1) :: ret + + kind_of_float=-1 + + call check_float(x4(1),x4(2),ret) + if (ret == 't') then + kind_of_float=4 + return + endif + + call check_float(x8(1),x8(2),ret) + if (ret == 't') then + kind_of_float=8 + return + endif + +end function kind_of_float + +integer function kind_of_double() + real(4), dimension(2) :: real4 = (/1., 2./) + real(8), dimension(2) :: real8 = (/1., 2./) + character(len=1) :: ret + + kind_of_double=-1 + + call check_double(real4(1),real4(2),ret) + if (ret == 't') then + kind_of_double=4 + return + endif + + call check_double(real8(1),real8(2),ret) + if (ret == 't') then + kind_of_double=8 + return + endif + +end function kind_of_double + +program same_int_long + integer ki,kl + + ki=kind_of_int() + kl=kind_of_long() + if (ki /= kl) then + write (*,'(i1)') 0 + else + write (*,'(i1)') 1 + endif +end program same_int_long + diff --git a/gaussian_experimental/Makefile b/gaussian_experimental/Makefile new file mode 100644 index 000000000..3bc94b526 --- /dev/null +++ b/gaussian_experimental/Makefile @@ -0,0 +1,40 @@ +DIR=. +MARS=../../../mars/client/main/src +MARS=. +PGI=/usr/local/apps/pgi/current +FORTRAN=-L$(PGI)/linux86/lib -lpgf90 -lpgf90_rpm1 -lpgf902 -lpgf90rtl -lpgftnrtl -lpghpf -lpgc -lpgf90 -lstd -Wl,-rpath $(PGI)/linux86/lib + + +CFLAGS=-I../src -I$(MARS) -g -Wall -Werror -m32 +#JASPER=/usr/lib/libjasper.a +# JASPER=/tmp/mab/degrib/src/jpeg2000/src/libjasper/.libs/libjasper.a +JASPER=-ljasper -lpng +EMOSLIB=-lemos.new.R64.D64.I32 +EMOSLIB=/home/ma/maf/public/libemosR64.a +#FORTRAN=-lxlf90 -lxlf -lc -lm +EMOSLIB=/home/ma/emos/lib/$(ARCH)/000300/libemos.R64.D64.I32.a + +PROGS= gaussian + +LIBS=../src/libgrib_api.a $(EMOSLIB) $(FORTRAN) -lm $(JASPER) + +# Netcdf +NCINCDIR=/home/ma/mac/netcdf/netcdf-3.6.1/include +NCLIBDIR=/home/ma/mac/netcdf/netcdf-3.6.1/lib + +start : all + +all:: + cd ../src; make + +all:: $(PROGS) + + +gaussian: $(OBJ) gaussian.c gaussian.h ../src/libgrib_api.a + $(CC) -o gaussian $(OBJ) gaussian.c $(CFLAGS) $(LIBS) + +.PRECIOUS: fail + + +clean: + rm -f *.o core $(PROGS) diff --git a/gaussian_experimental/gaussian.c b/gaussian_experimental/gaussian.c new file mode 100644 index 000000000..36fa19bca --- /dev/null +++ b/gaussian_experimental/gaussian.c @@ -0,0 +1,193 @@ +/* + * C Implementation: gaussian + * + * Description: example to get the gaussian latitudes given the + * order of the grid + * + * + * Author: Enrico Fucile , (C) 2006 + * + * Copyright: See COPYING file that comes with this distribution + * + */ + +#include +#include +#include +#include "grib_api.h" +#include "gaussian.h" + +void usage(char* progname) { + printf("\nUsage: %s [-r] [-f lat/lon] order\n",progname); + exit(1); +} + +int grib_gaussian_grid(int reduced,int order,int** npoints,double* latitude) { + int i=0; + int rg_idx=-1; + while (i < GRIB_MAX_RG_GRIDS) { + if (grib_rg_idx[i] == order) { + rg_idx=i; + break; + } + i++; + } + + if ( rg_idx == -1 ) return 1; + *npoints=grib_rg[rg_idx]; + + GRIB_CHECK(grib_get_gaussian_latitudes(order, latitude),0); + + return 0; +} + +static int find_nearest_in_array(double val,double* vals,int ilast,int* i1,int* i2) { + int nstep=0; + int count=1; + + if (vals[0] < val || vals[ilast] > val ) { + return GRIB_GEOCALCULUS_PROBLEM; + } + + if (*i1 < 0 || *i1 > ilast || vals[*i1] > val) *i1=0; + if (*i2 < 0 || *i2 > ilast || vals[*i2] < val) *i2=ilast; + + nstep=(*i2-*i1)/2; + while (nstep >= 1) { + if ( vals[*i1+nstep] > val ) { + *i1+=nstep; + } else { + *i2-=nstep; + } + nstep=(*i2-*i1)/2; + printf("----- iteration %d -- val=%g -- val[%d]=%g val[%d]=%g\n",count,val,*i1,vals[*i1],*i2,vals[*i2]); + count++; + } + + return 0; +} + +int grib_gaussian_find_nearest(int reduced,int order,int* npoints,double* lats,double lat,double lon,int* n,int* nearest_idx) { + int ilat1=-1; + int ilat2=-1; + int ilatlast; + double lonstep1,lonstep2; + int ilon1,ilon2; + int ret; + int npoints1,npoints2; + + ilatlast=2*order-1; + + if ((ret=find_nearest_in_array(lat,lats,ilatlast,&ilat1,&ilat2)) != GRIB_SUCCESS ) + return ret; + + printf("------------ nearest of lat=%g -- lat[%d]=%g lat[%d]=%g \n",lat,ilat1,lats[ilat1],ilat2,lats[ilat2]); + + if (ilat1 <= order) npoints1=npoints[ilat1]; + else npoints1=npoints[2*order-ilat1-1]; + + lonstep1=360.0/npoints1; + ilon1=floor(lon/lonstep1); + + if (ilat2 <= order) npoints2=npoints[ilat2]; + else npoints2=npoints[2*order-ilat2-1]; + + lonstep2=360.0/npoints2; + ilon2=floor(lon/lonstep2); + + printf("------------ nearest of lon=%g -- (%d,%d) lon=%g (step=%g npoints=%d) - (%d,%d) lon=%g (step=%g npoints=%d)\n", + lon, + ilat1,ilon1,ilon1*lonstep1,lonstep1,npoints1, + ilat2,ilon2,ilon2*lonstep2,lonstep2,npoints2); + + return 0; +} + + +int main(int argc, char *argv[]) +{ + double* lats; + long order=0; + int i; + int c; + int reduced=0; + int findnearest=0; + int* npoints=0; + char* pc=0; + double lat=0,lon=0; + int debug=0; + int n=0; + int* nearest_idx; + int tot_npoints=0; + + + while ((c = getopt (argc, argv, "drf:")) != -1) { + switch (c) { + case 'r': + reduced = 1; + break; + case 'd': + debug=1; + break; + case 'f': + findnearest = 1; + pc=optarg; + while (*pc != '\0' && *pc != '/') pc++; + if (*pc == '\0' || *(pc+1) == '\0' ) usage(argv[0]); + *pc='\0'; + pc++; + lat=atof(optarg); + lon=atof(pc); + break; + default: + usage (argv[0]); + } + } + + if (argc-optind != 1 ) usage(argv[0]); + + order=atoi(argv[optind]); + + lats = (double*)malloc(order*2*sizeof(double)); + + if (grib_gaussian_grid(reduced,order,&npoints,lats) != 0) { + if (reduced) printf("Error: unable to build the reduced gaussian grid %d\n",(int)order); + else printf("Error: unable to build the gaussian grid %d\n",(int)order); + } + + n=4; + nearest_idx=(int*)malloc(n*sizeof(int)); + if ( grib_gaussian_find_nearest(reduced,order,npoints,lats,lat,lon,&n,nearest_idx) != GRIB_SUCCESS ) { + printf("Error: unable to find the %d nearest points of lat=%g lon=%g\n",n,lat,lon); + } + + if (reduced) printf("--- Reduced Gaussian grid %d ---\n",(int)order); + else printf("--- Gaussian grid %d ---\n",(int)order); + + if (reduced) { + printf("Latitude Number Latitude\n"); + printf("number of points\n"); + tot_npoints=0; + for (i=0; i< order; i++) { + printf("%-*d %-*d %2.5f\n",9,i,10,npoints[i],lats[i]); + tot_npoints+=npoints[i]; + } + for (i=order; i< 2*order; i++) { + printf("%-*d %-*d %2.5f\n",9,i,10,npoints[2*order-i-1],lats[i]); + tot_npoints+=npoints[2*order-i-1]; + } + printf("Total Number Of Points = %d\n",tot_npoints); + } else { + printf("Latitude Latitude\n"); + printf("number \n"); + for ( i=0; i < 2*order; i++) + printf("%-*d %2.5f\n",9,i,lats[i]); + } + + printf("\n"); + + return 0; + +} + + diff --git a/gaussian_experimental/gaussian.h b/gaussian_experimental/gaussian.h new file mode 100644 index 000000000..7ee292928 --- /dev/null +++ b/gaussian_experimental/gaussian.h @@ -0,0 +1,12 @@ +#include "grib_rgauss.h" +typedef struct gaussian_grid gaussian_grid; + +struct gaussian_grid { + int reduced; + int order; + int *points; + int *latitudes; +}; + +void usage(char*); + diff --git a/gaussian_experimental/grib_rgauss.h b/gaussian_experimental/grib_rgauss.h new file mode 100644 index 000000000..9e88b8c5d --- /dev/null +++ b/gaussian_experimental/grib_rgauss.h @@ -0,0 +1,613 @@ + int grib_rg_032[] = { + 20, 27, 36, 40, 45, 50, 60, 64, 72, 75, 80, 90, + 90, 96, 100, 108, 108, 120, 120, 120, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128 }; + int grib_rg_048[] = { + 20, 25, 36, 40, + 45, 50, 60, 60, + 72, 75, 80, 90, + 96, 100, 108, 120, + 120, 120, 128, 135, + 144, 144, 160, 160, + 160, 160, 160, 180, + 180, 180, 180, 180, + 192, 192, 192, 192, + 192, 192, 192, 192, + 192, 192, 192, 192, + 192, 192, 192, 192 }; + int grib_rg_080[] = { + 18 , 25 , 36 , 40, + 45 , 54 , 60 , 64, + 72 , 72 , 80 , 90, + 96 , 100 , 108 , 120, + 120 , 128 , 135 , 144, + 144 , 150 , 160 , 160, + 180 , 180 , 180 , 192, + 192 , 200 , 200 , 216, + 216 , 216 , 225 , 225, + 240 , 240 , 240 , 256, + 256 , 256 , 256 , 288, + 288 , 288 , 288 , 288, + 288 , 288 , 288 , 288, + 300 , 300 , 300 , 300, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320 }; + int grib_rg_1024[] = { + 18, 25, 32, 40, 45, 50, 54, 60, 72, 72, 75, 80, 90, + 90, 96, 100, 108, 120, 120, 120, 125, 135, 144, 150, 160, 160, + 180, 180, 180, 192, 192, 200, 216, 216, 225, 225, 240, 240, 243, + 250, 256, 270, 270, 288, 288, 288, 300, 300, 320, 320, 320, 360, + 360, 360, 360, 360, 360, 375, 375, 384, 384, 400, 400, 405, 432, + 432, 432, 432, 450, 450, 450, 480, 480, 480, 480, 480, 486, 500, + 500, 512, 512, 540, 540, 540, 540, 576, 576, 576, 576, 576, 576, + 600, 600, 600, 600, 640, 640, 640, 640, 640, 640, 648, 675, 675, + 675, 675, 675, 720, 720, 720, 720, 720, 720, 720, 729, 750, 750, + 750, 750, 768, 768, 800, 800, 800, 800, 800, 800, 810, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 900, 900, 900, 900, 900, 900, + 960, 960, 960, 960, 960, 960, 960, 960, 960, 972, 972,1000,1000, + 1000,1000,1000,1024,1024,1024,1024,1080,1080,1080,1080,1080,1080, + 1080,1080,1080,1125,1125,1125,1125,1125,1125,1125,1152,1152,1152, + 1152,1152,1200,1200,1200,1200,1200,1200,1200,1215,1215,1215,1280, + 1280,1280,1280,1280,1280,1280,1280,1280,1280,1280,1296,1296,1350, + 1350,1350,1350,1350,1350,1350,1350,1350,1440,1440,1440,1440,1440, + 1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,1458,1458,1458, + 1500,1500,1500,1500,1500,1500,1500,1500,1536,1536,1536,1536,1536, + 1536,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,1620, + 1620, 1620, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, + 1728, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1875, 1875, 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, 1875, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1944, 1944, 1944, 1944, 1944, 2000, + 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2025, + 2025, 2025, 2025, 2048, 2048, 2048, 2048, 2048, 2160, 2160, + 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, + 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2187, 2187, + 2187, 2187, 2187, 2250, 2250, 2250, 2250, 2250, 2250, 2250, + 2250, 2250, 2250, 2250, 2250, 2304, 2304, 2304, 2304, 2304, + 2304, 2304, 2304, 2304, 2304, 2400, 2400, 2400, 2400, 2400, + 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, + 2400, 2400, 2400, 2400, 2430, 2430, 2430, 2430, 2430, 2500, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2500, 2560, 2560, 2560, 2560, 2560, 2560, + 2560, 2560, 2560, 2560, 2560, 2560, 2592, 2592, 2592, 2592, + 2592, 2592, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, + 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, + 2700, 2700, 2700, 2700, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, + 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, + 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, + 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3125, 3125, 3125, + 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, + 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, + 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3240, 3240, + 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3375, 3375, + 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + 3375, 3375, 3375, 3375, 3456, 3456, 3456, 3456, 3456, 3456, + 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, + 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, + 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, + 3888, 3888, 3888, 3888, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096 }; + int grib_rg_128[] = { + 18, 25, 36, 40, + 45, 50, 60, 64, + 72, 72, 80, 90, + 90, 100, 108, 120, + 120, 125, 128, 144, + 144, 150, 160, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 216, 225, 240, 240, + 240, 250, 250, 256, + 270, 270, 288, 288, + 288, 300, 300, 320, + 320, 320, 320, 324, + 360, 360, 360, 360, + 360, 360, 360, 375, + 375, 375, 375, 384, + 384, 400, 400, 400, + 400, 405, 432, 432, + 432, 432, 432, 432, + 432, 450, 450, 450, + 450, 450, 480, 480, + 480, 480, 480, 480, + 480, 480, 480, 480, + 486, 486, 486, 500, + 500, 500, 500, 500, + 500, 500, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512 }; + int grib_rg_160[] = { + 18 , 25 , 36 , 40, + 45 , 50 , 60 , 64, + 72 , 72 , 80 , 90, + 90 , 96 , 108 , 120, + 120 , 125 , 128 , 135, + 144 , 150 , 160 , 160, + 180 , 180 , 180 , 192, + 192 , 200 , 216 , 216, + 225 , 225 , 240 , 240, + 243 , 250 , 256 , 270, + 270 , 288 , 288 , 288, + 300 , 300 , 320 , 320, + 320 , 320 , 324 , 360, + 360 , 360 , 360 , 360, + 360 , 375 , 375 , 375, + 384 , 384 , 400 , 400, + 400 , 405 , 432 , 432, + 432 , 432 , 432 , 450, + 450 , 450 , 450 , 480, + 480 , 480 , 480 , 480, + 480 , 480 , 500 , 500, + 500 , 500 , 500 , 512, + 512 , 540 , 540 , 540, + 540 , 540 , 540 , 540, + 540 , 576 , 576 , 576, + 576 , 576 , 576 , 576, + 576 , 576 , 576 , 600, + 600 , 600 , 600 , 600, + 600 , 600 , 600 , 600, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640 }; + int grib_rg_200[] = { + 18, 25, 36, 40, + 45, 50, 60, 64, + 72, 72, 75, 81, + 90, 96, 100, 108, + 120, 125, 128, 135, + 144, 150, 160, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 225, 225, 240, 240, + 243, 250, 256, 270, + 270, 288, 288, 288, + 300, 300, 320, 320, + 320, 320, 360, 360, + 360, 360, 360, 360, + 375, 375, 375, 384, + 400, 400, 400, 400, + 432, 432, 432, 432, + 432, 450, 450, 450, + 480, 480, 480, 480, + 480, 480, 486, 500, + 500, 500, 512, 512, + 512, 540, 540, 540, + 540, 540, 576, 576, + 576, 576, 576, 576, + 576, 576, 600, 600, + 600, 600, 600, 640, + 640, 640, 640, 640, + 640, 640, 640, 640, + 640, 648, 648, 675, + 675, 675, 675, 675, + 675, 675, 720, 720, + 720, 720, 720, 720, + 720, 720, 720, 720, + 720, 720, 720, 720, + 729, 729, 729, 750, + 750, 750, 750, 750, + 750, 750, 750, 768, + 768, 768, 768, 768, + 768, 768, 768, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800 }; + int grib_rg_256[] = { + 18, 25, 32, 40, + 45, 50, 60, 64, + 72, 72, 75, 81, + 90, 96, 100, 108, + 120, 120, 125, 135, + 144, 150, 160, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 216, 225, 240, 240, + 243, 250, 256, 270, + 270, 288, 288, 288, + 300, 300, 320, 320, + 320, 324, 360, 360, + 360, 360, 360, 360, + 375, 375, 384, 384, + 400, 400, 400, 432, + 432, 432, 432, 432, + 450, 450, 450, 480, + 480, 480, 480, 480, + 486, 500, 500, 500, + 512, 512, 540, 540, + 540, 540, 540, 576, + 576, 576, 576, 576, + 576, 600, 600, 600, + 600, 600, 640, 640, + 640, 640, 640, 640, + 640, 640, 648, 675, + 675, 675, 675, 675, + 675, 720, 720, 720, + 720, 720, 720, 720, + 720, 720, 729, 729, + 750, 750, 750, 750, + 750, 768, 768, 768, + 768, 800, 800, 800, + 800, 800, 800, 800, + 800, 810, 810, 864, + 864, 864, 864, 864, + 864, 864, 864, 864, + 864, 864, 864, 864, + 864, 900, 900, 900, + 900, 900, 900, 900, + 900, 900, 900, 900, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 972, 972, + 972, 972, 972, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024 }; + int grib_rg_320[] = { + 18, 25, 32, 40, + 45, 50, 60, 64, + 72, 72, 75, 81, + 90, 96, 100, 108, + 120, 120, 125, 135, + 144, 144, 150, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 216, 225, 240, 240, + 240, 250, 256, 270, + 270, 288, 288, 288, + 300, 300, 320, 320, + 320, 324, 360, 360, + 360, 360, 360, 360, + 375, 375, 384, 384, + 400, 400, 405, 432, + 432, 432, 432, 450, + 450, 450, 480, 480, + 480, 480, 480, 486, + 500, 500, 500, 512, + 512, 540, 540, 540, + 540, 540, 576, 576, + 576, 576, 576, 576, + 600, 600, 600, 600, + 625, 625, 625, 625, + 625, 640, 640, 648, + 648, 675, 675, 675, + 675, 720, 720, 720, + 720, 720, 720, 720, + 720, 720, 729, 750, + 750, 750, 750, 768, + 768, 768, 768, 800, + 800, 800, 800, 800, + 800, 810, 810, 864, + 864, 864, 864, 864, + 864, 864, 864, 864, + 864, 864, 900, 900, + 900, 900, 900, 900, + 900, 900, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 972, 972, 1000, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1024, 1024, + 1024, 1024, 1024, 1024, + 1080, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, + 1080, 1080, 1125, 1125, + 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, + 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 1152, + 1152, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1215, + 1215, 1215, 1215, 1215, + 1215, 1215, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280}; + int grib_rg_400[] = { + 18, 25, 32, 40, 45, + 50, 60, 60, 72, 72, + 75, 81, 90, 96, 100, + 108, 120, 120, 125, 128, + 144, 144, 150, 160, 160, + 180, 180, 192, 192, 200, + 200, 216, 216, 225, 240, + 240, 240, 250, 250, 256, + 270, 288, 288, 288, 300, + 300, 320, 320, 320, 324, + 360, 360, 360, 360, 360, + 360, 375, 375, 384, 400, + 400, 400, 405, 432, 432, + 432, 432, 450, 450, 450, + 480, 480, 480, 480, 480, + 486, 500, 500, 512, 512, + 540, 540, 540, 540, 540, + 576, 576, 576, 576, 576, + 576, 600, 600, 600, 600, + 640, 640, 640, 640, 640, + 640, 640, 648, 675, 675, + 675, 675, 675, 720, 720, + 720, 720, 720, 720, 720, + 729, 729, 750, 750, 750, + 750, 768, 768, 768, 800, + 800, 800, 800, 800, 800, + 810, 864, 864, 864, 864, + 864, 864, 864, 864, 864, + 864, 900, 900, 900, 900, + 900, 900, 900, 960, 960, + 960, 960, 960, 960, 960, + 960, 960, 960, 960, 960, + 972, 972, 1000, 1000, 1000, + 1000, 1000, 1000, 1024, 1024, + 1024, 1024, 1024, 1080, 1080, + 1080, 1080, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, 1125, + 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1152, 1152, + 1152, 1152, 1152, 1152, 1200, + 1200, 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, 1200, + 1215, 1215, 1215, 1215, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1296, 1296, 1296, 1296, 1350, + 1350, 1350, 1350, 1350, 1350, + 1350, 1350, 1350, 1350, 1350, + 1350, 1350, 1350, 1350, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1458, 1458, 1458, + 1458, 1458, 1458, 1458, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600 }; + int grib_rg_512[] = { + 18, 25, 32, 40, 45, + 50, 60, 60, 72, 72, + 75, 81, 90, 96, 96, + 100, 108, 120, 125, 128, + 135, 144, 150, 160, 160, + 180, 180, 180, 192, 192, + 200, 216, 216, 225, 225, + 240, 240, 243, 250, 256, + 270, 270, 288, 288, 288, + 300, 320, 320, 320, 320, + 360, 360, 360, 360, 360, + 360, 375, 375, 384, 384, + 400, 400, 400, 432, 432, + 432, 432, 450, 450, 450, + 480, 480, 480, 480, 480, + 486, 500, 500, 512, 512, + 540, 540, 540, 540, 540, + 576, 576, 576, 576, 576, + 576, 600, 600, 600, 640, + 640, 640, 640, 640, 640, + 640, 648, 675, 675, 675, + 675, 675, 720, 720, 720, + 720, 720, 720, 720, 729, + 729, 750, 750, 750, 768, + 768, 768, 800, 800, 800, + 800, 800, 800, 810, 864, + 864, 864, 864, 864, 864, + 864, 864, 864, 864, 900, + 900, 900, 900, 900, 900, + 960, 960, 960, 960, 960, + 960, 960, 960, 960, 960, + 960, 972, 972, 1000, 1000, + 1000, 1000, 1000, 1024, 1024, + 1024, 1024, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, 1080, + 1080, 1080, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, + 1125, 1152, 1152, 1152, 1152, + 1152, 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, 1200, + 1215, 1215, 1215, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1296, 1296, 1296, 1350, + 1350, 1350, 1350, 1350, 1350, + 1350, 1350, 1350, 1350, 1350, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1458, + 1458, 1458, 1458, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1500, 1500, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, + 1536, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1620, 1620, 1620, + 1620, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1920, + 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1944, 1944, 1944, + 1944, 1944, 1944, 1944, 1944, + 1944, 1944, 1944, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2025, 2025, 2025, 2025, 2025, + 2025, 2025, 2025, 2025, 2025, + 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048 }; +int* grib_rg[] = { +grib_rg_048, +grib_rg_080, +grib_rg_1024, +grib_rg_128, +grib_rg_160, +grib_rg_200, +grib_rg_256, +grib_rg_320, +grib_rg_400, +grib_rg_512 +}; + +int grib_rg_idx[] = { +48, +80, +1024, +128, +160, +200, +256, +320, +400, +512 +}; + +#define GRIB_MAX_RG_GRIDS 10 + diff --git a/gaussian_experimental/rg/grib_rgauss.h b/gaussian_experimental/rg/grib_rgauss.h new file mode 100644 index 000000000..715830b9c --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss.h @@ -0,0 +1,613 @@ + int grib_rg_032[] = { + 20, 27, 36, 40, 45, 50, 60, 64, 72, 75, 80, 90, + 90, 96, 100, 108, 108, 120, 120, 120, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128 }; + int grib_rg_048[] = { + 20, 25, 36, 40, + 45, 50, 60, 60, + 72, 75, 80, 90, + 96, 100, 108, 120, + 120, 120, 128, 135, + 144, 144, 160, 160, + 160, 160, 160, 180, + 180, 180, 180, 180, + 192, 192, 192, 192, + 192, 192, 192, 192, + 192, 192, 192, 192, + 192, 192, 192, 192 }; + int grib_rg_080[] = { + 18 , 25 , 36 , 40, + 45 , 54 , 60 , 64, + 72 , 72 , 80 , 90, + 96 , 100 , 108 , 120, + 120 , 128 , 135 , 144, + 144 , 150 , 160 , 160, + 180 , 180 , 180 , 192, + 192 , 200 , 200 , 216, + 216 , 216 , 225 , 225, + 240 , 240 , 240 , 256, + 256 , 256 , 256 , 288, + 288 , 288 , 288 , 288, + 288 , 288 , 288 , 288, + 300 , 300 , 300 , 300, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320 }; + int grib_rg_1024[] = { + 18, 25, 32, 40, 45, 50, 54, 60, 72, 72, 75, 80, 90, + 90, 96, 100, 108, 120, 120, 120, 125, 135, 144, 150, 160, 160, + 180, 180, 180, 192, 192, 200, 216, 216, 225, 225, 240, 240, 243, + 250, 256, 270, 270, 288, 288, 288, 300, 300, 320, 320, 320, 360, + 360, 360, 360, 360, 360, 375, 375, 384, 384, 400, 400, 405, 432, + 432, 432, 432, 450, 450, 450, 480, 480, 480, 480, 480, 486, 500, + 500, 512, 512, 540, 540, 540, 540, 576, 576, 576, 576, 576, 576, + 600, 600, 600, 600, 640, 640, 640, 640, 640, 640, 648, 675, 675, + 675, 675, 675, 720, 720, 720, 720, 720, 720, 720, 729, 750, 750, + 750, 750, 768, 768, 800, 800, 800, 800, 800, 800, 810, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 900, 900, 900, 900, 900, 900, + 960, 960, 960, 960, 960, 960, 960, 960, 960, 972, 972,1000,1000, + 1000,1000,1000,1024,1024,1024,1024,1080,1080,1080,1080,1080,1080, + 1080,1080,1080,1125,1125,1125,1125,1125,1125,1125,1152,1152,1152, + 1152,1152,1200,1200,1200,1200,1200,1200,1200,1215,1215,1215,1280, + 1280,1280,1280,1280,1280,1280,1280,1280,1280,1280,1296,1296,1350, + 1350,1350,1350,1350,1350,1350,1350,1350,1440,1440,1440,1440,1440, + 1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,1458,1458,1458, + 1500,1500,1500,1500,1500,1500,1500,1500,1536,1536,1536,1536,1536, + 1536,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,1620, + 1620, 1620, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, + 1728, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1875, 1875, 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, 1875, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1944, 1944, 1944, 1944, 1944, 2000, + 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2025, + 2025, 2025, 2025, 2048, 2048, 2048, 2048, 2048, 2160, 2160, + 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, + 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2187, 2187, + 2187, 2187, 2187, 2250, 2250, 2250, 2250, 2250, 2250, 2250, + 2250, 2250, 2250, 2250, 2250, 2304, 2304, 2304, 2304, 2304, + 2304, 2304, 2304, 2304, 2304, 2400, 2400, 2400, 2400, 2400, + 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, + 2400, 2400, 2400, 2400, 2430, 2430, 2430, 2430, 2430, 2500, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2500, 2560, 2560, 2560, 2560, 2560, 2560, + 2560, 2560, 2560, 2560, 2560, 2560, 2592, 2592, 2592, 2592, + 2592, 2592, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, + 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, + 2700, 2700, 2700, 2700, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, + 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, + 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, + 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3125, 3125, 3125, + 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, + 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, + 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3240, 3240, + 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3375, 3375, + 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + 3375, 3375, 3375, 3375, 3456, 3456, 3456, 3456, 3456, 3456, + 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, + 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, + 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, + 3888, 3888, 3888, 3888, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096 }; + int grib_rg_128[] = { + 18, 25, 36, 40, + 45, 50, 60, 64, + 72, 72, 80, 90, + 90, 100, 108, 120, + 120, 125, 128, 144, + 144, 150, 160, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 216, 225, 240, 240, + 240, 250, 250, 256, + 270, 270, 288, 288, + 288, 300, 300, 320, + 320, 320, 320, 324, + 360, 360, 360, 360, + 360, 360, 360, 375, + 375, 375, 375, 384, + 384, 400, 400, 400, + 400, 405, 432, 432, + 432, 432, 432, 432, + 432, 450, 450, 450, + 450, 450, 480, 480, + 480, 480, 480, 480, + 480, 480, 480, 480, + 486, 486, 486, 500, + 500, 500, 500, 500, + 500, 500, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512 }; + int grib_rg_160[] = { + 18 , 25 , 36 , 40, + 45 , 50 , 60 , 64, + 72 , 72 , 80 , 90, + 90 , 96 , 108 , 120, + 120 , 125 , 128 , 135, + 144 , 150 , 160 , 160, + 180 , 180 , 180 , 192, + 192 , 200 , 216 , 216, + 225 , 225 , 240 , 240, + 243 , 250 , 256 , 270, + 270 , 288 , 288 , 288, + 300 , 300 , 320 , 320, + 320 , 320 , 324 , 360, + 360 , 360 , 360 , 360, + 360 , 375 , 375 , 375, + 384 , 384 , 400 , 400, + 400 , 405 , 432 , 432, + 432 , 432 , 432 , 450, + 450 , 450 , 450 , 480, + 480 , 480 , 480 , 480, + 480 , 480 , 500 , 500, + 500 , 500 , 500 , 512, + 512 , 540 , 540 , 540, + 540 , 540 , 540 , 540, + 540 , 576 , 576 , 576, + 576 , 576 , 576 , 576, + 576 , 576 , 576 , 600, + 600 , 600 , 600 , 600, + 600 , 600 , 600 , 600, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640 }; + int grib_rg_200[] = { + 18, 25, 36, 40, + 45, 50, 60, 64, + 72, 72, 75, 81, + 90, 96, 100, 108, + 120, 125, 128, 135, + 144, 150, 160, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 225, 225, 240, 240, + 243, 250, 256, 270, + 270, 288, 288, 288, + 300, 300, 320, 320, + 320, 320, 360, 360, + 360, 360, 360, 360, + 375, 375, 375, 384, + 400, 400, 400, 400, + 432, 432, 432, 432, + 432, 450, 450, 450, + 480, 480, 480, 480, + 480, 480, 486, 500, + 500, 500, 512, 512, + 512, 540, 540, 540, + 540, 540, 576, 576, + 576, 576, 576, 576, + 576, 576, 600, 600, + 600, 600, 600, 640, + 640, 640, 640, 640, + 640, 640, 640, 640, + 640, 648, 648, 675, + 675, 675, 675, 675, + 675, 675, 720, 720, + 720, 720, 720, 720, + 720, 720, 720, 720, + 720, 720, 720, 720, + 729, 729, 729, 750, + 750, 750, 750, 750, + 750, 750, 750, 768, + 768, 768, 768, 768, + 768, 768, 768, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800 }; + int grib_rg_256[] = { + 18, 25, 32, 40, + 45, 50, 60, 64, + 72, 72, 75, 81, + 90, 96, 100, 108, + 120, 120, 125, 135, + 144, 150, 160, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 216, 225, 240, 240, + 243, 250, 256, 270, + 270, 288, 288, 288, + 300, 300, 320, 320, + 320, 324, 360, 360, + 360, 360, 360, 360, + 375, 375, 384, 384, + 400, 400, 400, 432, + 432, 432, 432, 432, + 450, 450, 450, 480, + 480, 480, 480, 480, + 486, 500, 500, 500, + 512, 512, 540, 540, + 540, 540, 540, 576, + 576, 576, 576, 576, + 576, 600, 600, 600, + 600, 600, 640, 640, + 640, 640, 640, 640, + 640, 640, 648, 675, + 675, 675, 675, 675, + 675, 720, 720, 720, + 720, 720, 720, 720, + 720, 720, 729, 729, + 750, 750, 750, 750, + 750, 768, 768, 768, + 768, 800, 800, 800, + 800, 800, 800, 800, + 800, 810, 810, 864, + 864, 864, 864, 864, + 864, 864, 864, 864, + 864, 864, 864, 864, + 864, 900, 900, 900, + 900, 900, 900, 900, + 900, 900, 900, 900, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 972, 972, + 972, 972, 972, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024 }; + int grib_rg_320[] = { + 18, 25, 32, 40, + 45, 50, 60, 64, + 72, 72, 75, 81, + 90, 96, 100, 108, + 120, 120, 125, 135, + 144, 144, 150, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 216, 225, 240, 240, + 240, 250, 256, 270, + 270, 288, 288, 288, + 300, 300, 320, 320, + 320, 324, 360, 360, + 360, 360, 360, 360, + 375, 375, 384, 384, + 400, 400, 405, 432, + 432, 432, 432, 450, + 450, 450, 480, 480, + 480, 480, 480, 486, + 500, 500, 500, 512, + 512, 540, 540, 540, + 540, 540, 576, 576, + 576, 576, 576, 576, + 600, 600, 600, 600, + 625, 625, 625, 625, + 625, 640, 640, 648, + 648, 675, 675, 675, + 675, 720, 720, 720, + 720, 720, 720, 720, + 720, 720, 729, 750, + 750, 750, 750, 768, + 768, 768, 768, 800, + 800, 800, 800, 800, + 800, 810, 810, 864, + 864, 864, 864, 864, + 864, 864, 864, 864, + 864, 864, 900, 900, + 900, 900, 900, 900, + 900, 900, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 972, 972, 1000, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1024, 1024, + 1024, 1024, 1024, 1024, + 1080, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, + 1080, 1080, 1125, 1125, + 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, + 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 1152, + 1152, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1215, + 1215, 1215, 1215, 1215, + 1215, 1215, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280[] = { + int grib_rg_400[] = { + 18, 25, 32, 40, 45, + 50, 60, 60, 72, 72, + 75, 81, 90, 96, 100, + 108, 120, 120, 125, 128, + 144, 144, 150, 160, 160, + 180, 180, 192, 192, 200, + 200, 216, 216, 225, 240, + 240, 240, 250, 250, 256, + 270, 288, 288, 288, 300, + 300, 320, 320, 320, 324, + 360, 360, 360, 360, 360, + 360, 375, 375, 384, 400, + 400, 400, 405, 432, 432, + 432, 432, 450, 450, 450, + 480, 480, 480, 480, 480, + 486, 500, 500, 512, 512, + 540, 540, 540, 540, 540, + 576, 576, 576, 576, 576, + 576, 600, 600, 600, 600, + 640, 640, 640, 640, 640, + 640, 640, 648, 675, 675, + 675, 675, 675, 720, 720, + 720, 720, 720, 720, 720, + 729, 729, 750, 750, 750, + 750, 768, 768, 768, 800, + 800, 800, 800, 800, 800, + 810, 864, 864, 864, 864, + 864, 864, 864, 864, 864, + 864, 900, 900, 900, 900, + 900, 900, 900, 960, 960, + 960, 960, 960, 960, 960, + 960, 960, 960, 960, 960, + 972, 972, 1000, 1000, 1000, + 1000, 1000, 1000, 1024, 1024, + 1024, 1024, 1024, 1080, 1080, + 1080, 1080, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, 1125, + 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1152, 1152, + 1152, 1152, 1152, 1152, 1200, + 1200, 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, 1200, + 1215, 1215, 1215, 1215, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1296, 1296, 1296, 1296, 1350, + 1350, 1350, 1350, 1350, 1350, + 1350, 1350, 1350, 1350, 1350, + 1350, 1350, 1350, 1350, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1458, 1458, 1458, + 1458, 1458, 1458, 1458, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600 }; + int grib_rg_512[] = { + 18, 25, 32, 40, 45, + 50, 60, 60, 72, 72, + 75, 81, 90, 96, 96, + 100, 108, 120, 125, 128, + 135, 144, 150, 160, 160, + 180, 180, 180, 192, 192, + 200, 216, 216, 225, 225, + 240, 240, 243, 250, 256, + 270, 270, 288, 288, 288, + 300, 320, 320, 320, 320, + 360, 360, 360, 360, 360, + 360, 375, 375, 384, 384, + 400, 400, 400, 432, 432, + 432, 432, 450, 450, 450, + 480, 480, 480, 480, 480, + 486, 500, 500, 512, 512, + 540, 540, 540, 540, 540, + 576, 576, 576, 576, 576, + 576, 600, 600, 600, 640, + 640, 640, 640, 640, 640, + 640, 648, 675, 675, 675, + 675, 675, 720, 720, 720, + 720, 720, 720, 720, 729, + 729, 750, 750, 750, 768, + 768, 768, 800, 800, 800, + 800, 800, 800, 810, 864, + 864, 864, 864, 864, 864, + 864, 864, 864, 864, 900, + 900, 900, 900, 900, 900, + 960, 960, 960, 960, 960, + 960, 960, 960, 960, 960, + 960, 972, 972, 1000, 1000, + 1000, 1000, 1000, 1024, 1024, + 1024, 1024, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, 1080, + 1080, 1080, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, + 1125, 1152, 1152, 1152, 1152, + 1152, 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, 1200, + 1215, 1215, 1215, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1296, 1296, 1296, 1350, + 1350, 1350, 1350, 1350, 1350, + 1350, 1350, 1350, 1350, 1350, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1458, + 1458, 1458, 1458, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1500, 1500, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, + 1536, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1620, 1620, 1620, + 1620, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1920, + 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1944, 1944, 1944, + 1944, 1944, 1944, 1944, 1944, + 1944, 1944, 1944, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2025, 2025, 2025, 2025, 2025, + 2025, 2025, 2025, 2025, 2025, + 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048 }; +int* grib_rg[] = { +grib_rg_048, +grib_rg_080, +grib_rg_1024, +grib_rg_128, +grib_rg_160, +grib_rg_200, +grib_rg_256, +grib_rg_320, +grib_rg_400, +grib_rg_512 +}; + +int grib_rg_idx[] = { +48, +80, +1024, +128, +160, +200, +256, +320, +400, +512 +}; + +#define GRIB_MAX_RG_GRIDS 10 + diff --git a/gaussian_experimental/rg/grib_rgauss_032.h b/gaussian_experimental/rg/grib_rgauss_032.h new file mode 100644 index 000000000..81a61638d --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_032.h @@ -0,0 +1,4 @@ + int grib_rg_032[] = { + 20, 27, 36, 40, 45, 50, 60, 64, 72, 75, 80, 90, + 90, 96, 100, 108, 108, 120, 120, 120, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128 }; diff --git a/gaussian_experimental/rg/grib_rgauss_048.h b/gaussian_experimental/rg/grib_rgauss_048.h new file mode 100644 index 000000000..79b4203a9 --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_048.h @@ -0,0 +1,13 @@ + int grib_rg_048[] = { + 20, 25, 36, 40, + 45, 50, 60, 60, + 72, 75, 80, 90, + 96, 100, 108, 120, + 120, 120, 128, 135, + 144, 144, 160, 160, + 160, 160, 160, 180, + 180, 180, 180, 180, + 192, 192, 192, 192, + 192, 192, 192, 192, + 192, 192, 192, 192, + 192, 192, 192, 192 }; diff --git a/gaussian_experimental/rg/grib_rgauss_080.h b/gaussian_experimental/rg/grib_rgauss_080.h new file mode 100644 index 000000000..22ec18049 --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_080.h @@ -0,0 +1,21 @@ + int grib_rg_080[] = { + 18 , 25 , 36 , 40, + 45 , 54 , 60 , 64, + 72 , 72 , 80 , 90, + 96 , 100 , 108 , 120, + 120 , 128 , 135 , 144, + 144 , 150 , 160 , 160, + 180 , 180 , 180 , 192, + 192 , 200 , 200 , 216, + 216 , 216 , 225 , 225, + 240 , 240 , 240 , 256, + 256 , 256 , 256 , 288, + 288 , 288 , 288 , 288, + 288 , 288 , 288 , 288, + 300 , 300 , 300 , 300, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320, + 320 , 320 , 320 , 320 }; diff --git a/gaussian_experimental/rg/grib_rgauss_1024.h b/gaussian_experimental/rg/grib_rgauss_1024.h new file mode 100644 index 000000000..3834cdef3 --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_1024.h @@ -0,0 +1,98 @@ + int grib_rg_1024[] = { + 18, 25, 32, 40, 45, 50, 54, 60, 72, 72, 75, 80, 90, + 90, 96, 100, 108, 120, 120, 120, 125, 135, 144, 150, 160, 160, + 180, 180, 180, 192, 192, 200, 216, 216, 225, 225, 240, 240, 243, + 250, 256, 270, 270, 288, 288, 288, 300, 300, 320, 320, 320, 360, + 360, 360, 360, 360, 360, 375, 375, 384, 384, 400, 400, 405, 432, + 432, 432, 432, 450, 450, 450, 480, 480, 480, 480, 480, 486, 500, + 500, 512, 512, 540, 540, 540, 540, 576, 576, 576, 576, 576, 576, + 600, 600, 600, 600, 640, 640, 640, 640, 640, 640, 648, 675, 675, + 675, 675, 675, 720, 720, 720, 720, 720, 720, 720, 729, 750, 750, + 750, 750, 768, 768, 800, 800, 800, 800, 800, 800, 810, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 900, 900, 900, 900, 900, 900, + 960, 960, 960, 960, 960, 960, 960, 960, 960, 972, 972,1000,1000, + 1000,1000,1000,1024,1024,1024,1024,1080,1080,1080,1080,1080,1080, + 1080,1080,1080,1125,1125,1125,1125,1125,1125,1125,1152,1152,1152, + 1152,1152,1200,1200,1200,1200,1200,1200,1200,1215,1215,1215,1280, + 1280,1280,1280,1280,1280,1280,1280,1280,1280,1280,1296,1296,1350, + 1350,1350,1350,1350,1350,1350,1350,1350,1440,1440,1440,1440,1440, + 1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,1458,1458,1458, + 1500,1500,1500,1500,1500,1500,1500,1500,1536,1536,1536,1536,1536, + 1536,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,1620, + 1620, 1620, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, + 1728, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1875, 1875, 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, 1875, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1944, 1944, 1944, 1944, 1944, 2000, + 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2025, + 2025, 2025, 2025, 2048, 2048, 2048, 2048, 2048, 2160, 2160, + 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, + 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2187, 2187, + 2187, 2187, 2187, 2250, 2250, 2250, 2250, 2250, 2250, 2250, + 2250, 2250, 2250, 2250, 2250, 2304, 2304, 2304, 2304, 2304, + 2304, 2304, 2304, 2304, 2304, 2400, 2400, 2400, 2400, 2400, + 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, + 2400, 2400, 2400, 2400, 2430, 2430, 2430, 2430, 2430, 2500, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2500, 2560, 2560, 2560, 2560, 2560, 2560, + 2560, 2560, 2560, 2560, 2560, 2560, 2592, 2592, 2592, 2592, + 2592, 2592, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, + 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, + 2700, 2700, 2700, 2700, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + 2880, 2880, 2880, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, + 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, + 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, + 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3125, 3125, 3125, + 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, + 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, + 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3240, 3240, + 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3375, 3375, + 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + 3375, 3375, 3375, 3375, 3456, 3456, 3456, 3456, 3456, 3456, + 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, + 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + 3600, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + 3750, 3750, 3750, 3750, 3750, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + 3840, 3840, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, + 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, + 3888, 3888, 3888, 3888, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + 4096, 4096, 4096, 4096 }; diff --git a/gaussian_experimental/rg/grib_rgauss_128.h b/gaussian_experimental/rg/grib_rgauss_128.h new file mode 100644 index 000000000..2af9e31c8 --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_128.h @@ -0,0 +1,33 @@ + int grib_rg_128[] = { + 18, 25, 36, 40, + 45, 50, 60, 64, + 72, 72, 80, 90, + 90, 100, 108, 120, + 120, 125, 128, 144, + 144, 150, 160, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 216, 225, 240, 240, + 240, 250, 250, 256, + 270, 270, 288, 288, + 288, 300, 300, 320, + 320, 320, 320, 324, + 360, 360, 360, 360, + 360, 360, 360, 375, + 375, 375, 375, 384, + 384, 400, 400, 400, + 400, 405, 432, 432, + 432, 432, 432, 432, + 432, 450, 450, 450, + 450, 450, 480, 480, + 480, 480, 480, 480, + 480, 480, 480, 480, + 486, 486, 486, 500, + 500, 500, 500, 500, + 500, 500, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512, + 512, 512, 512, 512 }; diff --git a/gaussian_experimental/rg/grib_rgauss_160.h b/gaussian_experimental/rg/grib_rgauss_160.h new file mode 100644 index 000000000..f11dfd781 --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_160.h @@ -0,0 +1,41 @@ + int grib_rg_160[] = { + 18 , 25 , 36 , 40, + 45 , 50 , 60 , 64, + 72 , 72 , 80 , 90, + 90 , 96 , 108 , 120, + 120 , 125 , 128 , 135, + 144 , 150 , 160 , 160, + 180 , 180 , 180 , 192, + 192 , 200 , 216 , 216, + 225 , 225 , 240 , 240, + 243 , 250 , 256 , 270, + 270 , 288 , 288 , 288, + 300 , 300 , 320 , 320, + 320 , 320 , 324 , 360, + 360 , 360 , 360 , 360, + 360 , 375 , 375 , 375, + 384 , 384 , 400 , 400, + 400 , 405 , 432 , 432, + 432 , 432 , 432 , 450, + 450 , 450 , 450 , 480, + 480 , 480 , 480 , 480, + 480 , 480 , 500 , 500, + 500 , 500 , 500 , 512, + 512 , 540 , 540 , 540, + 540 , 540 , 540 , 540, + 540 , 576 , 576 , 576, + 576 , 576 , 576 , 576, + 576 , 576 , 576 , 600, + 600 , 600 , 600 , 600, + 600 , 600 , 600 , 600, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640, + 640 , 640 , 640 , 640 }; diff --git a/gaussian_experimental/rg/grib_rgauss_200.h b/gaussian_experimental/rg/grib_rgauss_200.h new file mode 100644 index 000000000..660196392 --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_200.h @@ -0,0 +1,51 @@ + int grib_rg_200[] = { + 18, 25, 36, 40, + 45, 50, 60, 64, + 72, 72, 75, 81, + 90, 96, 100, 108, + 120, 125, 128, 135, + 144, 150, 160, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 225, 225, 240, 240, + 243, 250, 256, 270, + 270, 288, 288, 288, + 300, 300, 320, 320, + 320, 320, 360, 360, + 360, 360, 360, 360, + 375, 375, 375, 384, + 400, 400, 400, 400, + 432, 432, 432, 432, + 432, 450, 450, 450, + 480, 480, 480, 480, + 480, 480, 486, 500, + 500, 500, 512, 512, + 512, 540, 540, 540, + 540, 540, 576, 576, + 576, 576, 576, 576, + 576, 576, 600, 600, + 600, 600, 600, 640, + 640, 640, 640, 640, + 640, 640, 640, 640, + 640, 648, 648, 675, + 675, 675, 675, 675, + 675, 675, 720, 720, + 720, 720, 720, 720, + 720, 720, 720, 720, + 720, 720, 720, 720, + 729, 729, 729, 750, + 750, 750, 750, 750, + 750, 750, 750, 768, + 768, 768, 768, 768, + 768, 768, 768, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800, + 800, 800, 800, 800 }; diff --git a/gaussian_experimental/rg/grib_rgauss_256.h b/gaussian_experimental/rg/grib_rgauss_256.h new file mode 100644 index 000000000..82b1a5ddd --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_256.h @@ -0,0 +1,65 @@ + int grib_rg_256[] = { + 18, 25, 32, 40, + 45, 50, 60, 64, + 72, 72, 75, 81, + 90, 96, 100, 108, + 120, 120, 125, 135, + 144, 150, 160, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 216, 225, 240, 240, + 243, 250, 256, 270, + 270, 288, 288, 288, + 300, 300, 320, 320, + 320, 324, 360, 360, + 360, 360, 360, 360, + 375, 375, 384, 384, + 400, 400, 400, 432, + 432, 432, 432, 432, + 450, 450, 450, 480, + 480, 480, 480, 480, + 486, 500, 500, 500, + 512, 512, 540, 540, + 540, 540, 540, 576, + 576, 576, 576, 576, + 576, 600, 600, 600, + 600, 600, 640, 640, + 640, 640, 640, 640, + 640, 640, 648, 675, + 675, 675, 675, 675, + 675, 720, 720, 720, + 720, 720, 720, 720, + 720, 720, 729, 729, + 750, 750, 750, 750, + 750, 768, 768, 768, + 768, 800, 800, 800, + 800, 800, 800, 800, + 800, 810, 810, 864, + 864, 864, 864, 864, + 864, 864, 864, 864, + 864, 864, 864, 864, + 864, 900, 900, 900, + 900, 900, 900, 900, + 900, 900, 900, 900, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 972, 972, + 972, 972, 972, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024 }; diff --git a/gaussian_experimental/rg/grib_rgauss_320.h b/gaussian_experimental/rg/grib_rgauss_320.h new file mode 100644 index 000000000..17b5c7175 --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_320.h @@ -0,0 +1,81 @@ + int grib_rg_320[] = { + 18, 25, 32, 40, + 45, 50, 60, 64, + 72, 72, 75, 81, + 90, 96, 100, 108, + 120, 120, 125, 135, + 144, 144, 150, 160, + 180, 180, 180, 192, + 192, 200, 216, 216, + 216, 225, 240, 240, + 240, 250, 256, 270, + 270, 288, 288, 288, + 300, 300, 320, 320, + 320, 324, 360, 360, + 360, 360, 360, 360, + 375, 375, 384, 384, + 400, 400, 405, 432, + 432, 432, 432, 450, + 450, 450, 480, 480, + 480, 480, 480, 486, + 500, 500, 500, 512, + 512, 540, 540, 540, + 540, 540, 576, 576, + 576, 576, 576, 576, + 600, 600, 600, 600, + 625, 625, 625, 625, + 625, 640, 640, 648, + 648, 675, 675, 675, + 675, 720, 720, 720, + 720, 720, 720, 720, + 720, 720, 729, 750, + 750, 750, 750, 768, + 768, 768, 768, 800, + 800, 800, 800, 800, + 800, 810, 810, 864, + 864, 864, 864, 864, + 864, 864, 864, 864, + 864, 864, 900, 900, + 900, 900, 900, 900, + 900, 900, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 960, 960, 960, 960, + 972, 972, 1000, 1000, + 1000, 1000, 1000, 1000, + 1000, 1000, 1024, 1024, + 1024, 1024, 1024, 1024, + 1080, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, + 1080, 1080, 1125, 1125, + 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, + 1152, 1152, 1152, 1152, + 1152, 1152, 1152, 1152, + 1152, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1215, + 1215, 1215, 1215, 1215, + 1215, 1215, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1250, 1250, + 1250, 1250, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280[] = { diff --git a/gaussian_experimental/rg/grib_rgauss_400.h b/gaussian_experimental/rg/grib_rgauss_400.h new file mode 100644 index 000000000..a977b6546 --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_400.h @@ -0,0 +1,81 @@ + int grib_rg_400[] = { + 18, 25, 32, 40, 45, + 50, 60, 60, 72, 72, + 75, 81, 90, 96, 100, + 108, 120, 120, 125, 128, + 144, 144, 150, 160, 160, + 180, 180, 192, 192, 200, + 200, 216, 216, 225, 240, + 240, 240, 250, 250, 256, + 270, 288, 288, 288, 300, + 300, 320, 320, 320, 324, + 360, 360, 360, 360, 360, + 360, 375, 375, 384, 400, + 400, 400, 405, 432, 432, + 432, 432, 450, 450, 450, + 480, 480, 480, 480, 480, + 486, 500, 500, 512, 512, + 540, 540, 540, 540, 540, + 576, 576, 576, 576, 576, + 576, 600, 600, 600, 600, + 640, 640, 640, 640, 640, + 640, 640, 648, 675, 675, + 675, 675, 675, 720, 720, + 720, 720, 720, 720, 720, + 729, 729, 750, 750, 750, + 750, 768, 768, 768, 800, + 800, 800, 800, 800, 800, + 810, 864, 864, 864, 864, + 864, 864, 864, 864, 864, + 864, 900, 900, 900, 900, + 900, 900, 900, 960, 960, + 960, 960, 960, 960, 960, + 960, 960, 960, 960, 960, + 972, 972, 1000, 1000, 1000, + 1000, 1000, 1000, 1024, 1024, + 1024, 1024, 1024, 1080, 1080, + 1080, 1080, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, 1125, + 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1152, 1152, + 1152, 1152, 1152, 1152, 1200, + 1200, 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, 1200, + 1215, 1215, 1215, 1215, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1296, 1296, 1296, 1296, 1350, + 1350, 1350, 1350, 1350, 1350, + 1350, 1350, 1350, 1350, 1350, + 1350, 1350, 1350, 1350, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1458, 1458, 1458, + 1458, 1458, 1458, 1458, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600 }; diff --git a/gaussian_experimental/rg/grib_rgauss_512.h b/gaussian_experimental/rg/grib_rgauss_512.h new file mode 100644 index 000000000..8035afc25 --- /dev/null +++ b/gaussian_experimental/rg/grib_rgauss_512.h @@ -0,0 +1,97 @@ + int grib_rg_512[] = { + 18, 25, 32, 40, 45, + 50, 60, 60, 72, 72, + 75, 81, 90, 96, 96, + 100, 108, 120, 125, 128, + 135, 144, 150, 160, 160, + 180, 180, 180, 192, 192, + 200, 216, 216, 225, 225, + 240, 240, 243, 250, 256, + 270, 270, 288, 288, 288, + 300, 320, 320, 320, 320, + 360, 360, 360, 360, 360, + 360, 375, 375, 384, 384, + 400, 400, 400, 432, 432, + 432, 432, 450, 450, 450, + 480, 480, 480, 480, 480, + 486, 500, 500, 512, 512, + 540, 540, 540, 540, 540, + 576, 576, 576, 576, 576, + 576, 600, 600, 600, 640, + 640, 640, 640, 640, 640, + 640, 648, 675, 675, 675, + 675, 675, 720, 720, 720, + 720, 720, 720, 720, 729, + 729, 750, 750, 750, 768, + 768, 768, 800, 800, 800, + 800, 800, 800, 810, 864, + 864, 864, 864, 864, 864, + 864, 864, 864, 864, 900, + 900, 900, 900, 900, 900, + 960, 960, 960, 960, 960, + 960, 960, 960, 960, 960, + 960, 972, 972, 1000, 1000, + 1000, 1000, 1000, 1024, 1024, + 1024, 1024, 1080, 1080, 1080, + 1080, 1080, 1080, 1080, 1080, + 1080, 1080, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, + 1125, 1152, 1152, 1152, 1152, + 1152, 1200, 1200, 1200, 1200, + 1200, 1200, 1200, 1200, 1200, + 1215, 1215, 1215, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1280, 1280, 1280, 1280, + 1280, 1296, 1296, 1296, 1350, + 1350, 1350, 1350, 1350, 1350, + 1350, 1350, 1350, 1350, 1350, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1440, + 1440, 1440, 1440, 1440, 1458, + 1458, 1458, 1458, 1500, 1500, + 1500, 1500, 1500, 1500, 1500, + 1500, 1500, 1500, 1536, 1536, + 1536, 1536, 1536, 1536, 1536, + 1536, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1600, 1600, 1600, + 1600, 1600, 1620, 1620, 1620, + 1620, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1728, 1728, 1728, 1728, + 1728, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1800, 1800, + 1800, 1800, 1800, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1875, + 1875, 1875, 1875, 1875, 1920, + 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1944, 1944, 1944, + 1944, 1944, 1944, 1944, 1944, + 1944, 1944, 1944, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2000, 2000, 2000, 2000, 2000, + 2025, 2025, 2025, 2025, 2025, + 2025, 2025, 2025, 2025, 2025, + 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + 2048, 2048 }; diff --git a/gaussian_experimental/rg/no_rgauss_080_19940113.h b/gaussian_experimental/rg/no_rgauss_080_19940113.h new file mode 100644 index 000000000..828db288e --- /dev/null +++ b/gaussian_experimental/rg/no_rgauss_080_19940113.h @@ -0,0 +1,22 @@ + REAL QG08012(80) + DATA QG08012/ + X 12 , 16 , 20 , 24, + X 30 , 36 , 45 , 50, + X 60 , 64 , 72 , 75, + X 80 , 90 , 96 , 100, + X 108 , 120 , 120 , 128, + X 128 , 135 , 144 , 144, + X 150 , 160 , 162 , 180, + X 180 , 180 , 192 , 192, + X 192 , 200 , 216 , 216, + X 216 , 216 , 225 , 225, + X 240 , 240 , 240 , 256, + X 256 , 256 , 256 , 288, + X 288 , 288 , 288 , 288, + X 288 , 288 , 288 , 288, + X 288 , 300 , 300 , 300, + X 300 , 300 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320 / diff --git a/gaussian_experimental/rg/no_rgauss_080_19980130.h b/gaussian_experimental/rg/no_rgauss_080_19980130.h new file mode 100644 index 000000000..23707c0a8 --- /dev/null +++ b/gaussian_experimental/rg/no_rgauss_080_19980130.h @@ -0,0 +1,22 @@ + REAL QG08018(80) + DATA QG08018/ + X 18 , 25 , 36 , 40, + X 45 , 54 , 60 , 64, + X 72 , 72 , 80 , 90, + X 96 , 100 , 108 , 120, + X 120 , 128 , 135 , 144, + X 144 , 150 , 160 , 160, + X 180 , 180 , 180 , 192, + X 192 , 200 , 200 , 216, + X 216 , 216 , 225 , 225, + X 240 , 240 , 240 , 256, + X 256 , 256 , 256 , 288, + X 288 , 288 , 288 , 288, + X 288 , 288 , 288 , 288, + X 300 , 300 , 300 , 300, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320 / diff --git a/gaussian_experimental/rg/no_rgauss_160_19931222.h b/gaussian_experimental/rg/no_rgauss_160_19931222.h new file mode 100644 index 000000000..4c55a6de4 --- /dev/null +++ b/gaussian_experimental/rg/no_rgauss_160_19931222.h @@ -0,0 +1,42 @@ + REAL QG16012(160) + DATA QG16012/ + X 12 , 16 , 20 , 24, + X 30 , 40 , 45 , 50, + X 60 , 64 , 72 , 75, + X 80 , 90 , 96 , 100, + X 108 , 120 , 120 , 128, + X 135 , 144 , 144 , 150, + X 160 , 160 , 180 , 180, + X 180 , 192 , 192 , 200, + X 216 , 216 , 216 , 225, + X 240 , 240 , 240 , 256, + X 256 , 256 , 288 , 288, + X 288 , 288 , 288 , 300, + X 300 , 300 , 320 , 320, + X 320 , 324 , 360 , 360, + X 360 , 360 , 360 , 360, + X 360 , 375 , 375 , 375, + X 384 , 400 , 400 , 400, + X 400 , 405 , 432 , 432, + X 432 , 432 , 432 , 450, + X 450 , 450 , 450 , 480, + X 480 , 480 , 480 , 480, + X 480 , 480 , 500 , 500, + X 500 , 500 , 500 , 512, + X 512 , 512 , 540 , 540, + X 540 , 540 , 540 , 540, + X 540 , 540 , 576 , 576, + X 576 , 576 , 576 , 576, + X 576 , 576 , 576 , 576, + X 576 , 576 , 600 , 600, + X 600 , 600 , 600 , 600, + X 600 , 600 , 600 , 600, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640 / diff --git a/gaussian_experimental/rg/rgauss2c.ksh b/gaussian_experimental/rg/rgauss2c.ksh new file mode 100755 index 000000000..0c38473df --- /dev/null +++ b/gaussian_experimental/rg/rgauss2c.ksh @@ -0,0 +1,46 @@ +#!/usr/bin/ksh + +rm -f grib_rgauss_* +for fname in rgauss_*.h + do + nfname=grib_$fname + cat $fname | sed -n '/REAL/!p' | sed 's/DATA QG/int grib_rg_/g' | sed 's/ \// };/g' | sed 's/\//[] = {/g' | sed 's/X//g' > $nfname +done + +all=grib_rgauss.h +rm -f $all + +count=-1 +integer order +for fname in grib_rgauss_*.h + do + count=$(( ${count} + 1 )) + subarr[count]=`cat $fname | head -1 | sed 's/^[ \t]*//' | sed 's/int//g' | sed 's/\[\] = {//g'` + order[count]=`echo ${subarr[count]} | sed 's/grib_rg_//g` + cat $fname >> $all +done + +echo 'int* grib_rg[] = {' >> $all + +for (( i=1 ; ${i} < ${count}; i=$(( ${i} + 1 )) )) + do + echo ${subarr[i]}',' >> $all +done + +echo ${subarr[count]} >> $all +echo '};' >> $all + +echo '' >> $all +echo 'int grib_rg_idx[] = {' >> $all +for (( i=1 ; ${i} < ${count}; i=$(( ${i} + 1 )) )) + do + echo ${order[i]}',' >> $all +done + +echo ${order[count]} >> $all +echo '};' >> $all + +echo '' >> $all +echo '#define GRIB_MAX_RG_GRIDS '$count >> $all +echo '' >> $all + diff --git a/gaussian_experimental/rg/rgauss_032.h b/gaussian_experimental/rg/rgauss_032.h new file mode 100644 index 000000000..4f16971d2 --- /dev/null +++ b/gaussian_experimental/rg/rgauss_032.h @@ -0,0 +1,5 @@ + REAL QG032(32) + DATA QG032/ + X 20, 27, 36, 40, 45, 50, 60, 64, 72, 75, 80, 90, + X 90, 96, 100, 108, 108, 120, 120, 120, 128, 128, 128, 128, + X 128, 128, 128, 128, 128, 128, 128, 128 / diff --git a/gaussian_experimental/rg/rgauss_048.h b/gaussian_experimental/rg/rgauss_048.h new file mode 100644 index 000000000..685223c14 --- /dev/null +++ b/gaussian_experimental/rg/rgauss_048.h @@ -0,0 +1,14 @@ + REAL QG048(48) + DATA QG048/ + X 20, 25, 36, 40, + X 45, 50, 60, 60, + X 72, 75, 80, 90, + X 96, 100, 108, 120, + X 120, 120, 128, 135, + X 144, 144, 160, 160, + X 160, 160, 160, 180, + X 180, 180, 180, 180, + X 192, 192, 192, 192, + X 192, 192, 192, 192, + X 192, 192, 192, 192, + X 192, 192, 192, 192 / diff --git a/gaussian_experimental/rg/rgauss_080.h b/gaussian_experimental/rg/rgauss_080.h new file mode 100644 index 000000000..c3ae6bec4 --- /dev/null +++ b/gaussian_experimental/rg/rgauss_080.h @@ -0,0 +1,22 @@ + REAL QG08018(80) + DATA QG080/ + X 18 , 25 , 36 , 40, + X 45 , 54 , 60 , 64, + X 72 , 72 , 80 , 90, + X 96 , 100 , 108 , 120, + X 120 , 128 , 135 , 144, + X 144 , 150 , 160 , 160, + X 180 , 180 , 180 , 192, + X 192 , 200 , 200 , 216, + X 216 , 216 , 225 , 225, + X 240 , 240 , 240 , 256, + X 256 , 256 , 256 , 288, + X 288 , 288 , 288 , 288, + X 288 , 288 , 288 , 288, + X 300 , 300 , 300 , 300, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320, + X 320 , 320 , 320 , 320 / diff --git a/gaussian_experimental/rg/rgauss_1024.h b/gaussian_experimental/rg/rgauss_1024.h new file mode 100644 index 000000000..eafcc00f3 --- /dev/null +++ b/gaussian_experimental/rg/rgauss_1024.h @@ -0,0 +1,99 @@ + REAL QG1024(1024) + DATA QG1024/ + X 18, 25, 32, 40, 45, 50, 54, 60, 72, 72, 75, 80, 90, + X 90, 96, 100, 108, 120, 120, 120, 125, 135, 144, 150, 160, 160, + X 180, 180, 180, 192, 192, 200, 216, 216, 225, 225, 240, 240, 243, + X 250, 256, 270, 270, 288, 288, 288, 300, 300, 320, 320, 320, 360, + X 360, 360, 360, 360, 360, 375, 375, 384, 384, 400, 400, 405, 432, + X 432, 432, 432, 450, 450, 450, 480, 480, 480, 480, 480, 486, 500, + X 500, 512, 512, 540, 540, 540, 540, 576, 576, 576, 576, 576, 576, + X 600, 600, 600, 600, 640, 640, 640, 640, 640, 640, 648, 675, 675, + X 675, 675, 675, 720, 720, 720, 720, 720, 720, 720, 729, 750, 750, + X 750, 750, 768, 768, 800, 800, 800, 800, 800, 800, 810, 864, 864, + X 864, 864, 864, 864, 864, 864, 864, 900, 900, 900, 900, 900, 900, + X 960, 960, 960, 960, 960, 960, 960, 960, 960, 972, 972,1000,1000, + X 1000,1000,1000,1024,1024,1024,1024,1080,1080,1080,1080,1080,1080, + X 1080,1080,1080,1125,1125,1125,1125,1125,1125,1125,1152,1152,1152, + X 1152,1152,1200,1200,1200,1200,1200,1200,1200,1215,1215,1215,1280, + X 1280,1280,1280,1280,1280,1280,1280,1280,1280,1280,1296,1296,1350, + X 1350,1350,1350,1350,1350,1350,1350,1350,1440,1440,1440,1440,1440, + X 1440,1440,1440,1440,1440,1440,1440,1440,1440,1440,1458,1458,1458, + X 1500,1500,1500,1500,1500,1500,1500,1500,1536,1536,1536,1536,1536, + X 1536,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,1600,1620, + X 1620, 1620, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, + X 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, + X 1728, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, + X 1800, 1800, 1800, 1875, 1875, 1875, 1875, 1875, 1875, 1875, + X 1875, 1875, 1875, 1875, 1875, 1875, 1920, 1920, 1920, 1920, + X 1920, 1920, 1920, 1920, 1944, 1944, 1944, 1944, 1944, 2000, + X 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2025, + X 2025, 2025, 2025, 2048, 2048, 2048, 2048, 2048, 2160, 2160, + X 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, + X 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2187, 2187, + X 2187, 2187, 2187, 2250, 2250, 2250, 2250, 2250, 2250, 2250, + X 2250, 2250, 2250, 2250, 2250, 2304, 2304, 2304, 2304, 2304, + X 2304, 2304, 2304, 2304, 2304, 2400, 2400, 2400, 2400, 2400, + X 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, + X 2400, 2400, 2400, 2400, 2430, 2430, 2430, 2430, 2430, 2500, + X 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, + X 2500, 2500, 2500, 2500, 2560, 2560, 2560, 2560, 2560, 2560, + X 2560, 2560, 2560, 2560, 2560, 2560, 2592, 2592, 2592, 2592, + X 2592, 2592, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, + X 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, + X 2700, 2700, 2700, 2700, 2880, 2880, 2880, 2880, 2880, 2880, + X 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + X 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + X 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, + X 2880, 2880, 2880, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + X 2916, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, + X 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, + X 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, + X 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3125, 3125, 3125, + X 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125, + X 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, + X 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3200, 3240, 3240, + X 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3375, 3375, + X 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + X 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + X 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, + X 3375, 3375, 3375, 3375, 3456, 3456, 3456, 3456, 3456, 3456, + X 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, + X 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3600, 3600, 3600, + X 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + X 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + X 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + X 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, + X 3600, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + X 3645, 3645, 3645, 3645, 3645, 3645, 3750, 3750, 3750, 3750, + X 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + X 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + X 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, 3750, + X 3750, 3750, 3750, 3750, 3750, 3840, 3840, 3840, 3840, 3840, + X 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + X 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + X 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840, + X 3840, 3840, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, + X 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, + X 3888, 3888, 3888, 3888, 4000, 4000, 4000, 4000, 4000, 4000, + X 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + X 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + X 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + X 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + X 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + X 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4050, + X 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + X 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + X 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, + X 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, + X 4096, 4096, 4096, 4096 / diff --git a/gaussian_experimental/rg/rgauss_128.h b/gaussian_experimental/rg/rgauss_128.h new file mode 100644 index 000000000..e825236b2 --- /dev/null +++ b/gaussian_experimental/rg/rgauss_128.h @@ -0,0 +1,34 @@ + REAL QG128(128) + DATA QG128/ + X 18, 25, 36, 40, + X 45, 50, 60, 64, + X 72, 72, 80, 90, + X 90, 100, 108, 120, + X 120, 125, 128, 144, + X 144, 150, 160, 160, + X 180, 180, 180, 192, + X 192, 200, 216, 216, + X 216, 225, 240, 240, + X 240, 250, 250, 256, + X 270, 270, 288, 288, + X 288, 300, 300, 320, + X 320, 320, 320, 324, + X 360, 360, 360, 360, + X 360, 360, 360, 375, + X 375, 375, 375, 384, + X 384, 400, 400, 400, + X 400, 405, 432, 432, + X 432, 432, 432, 432, + X 432, 450, 450, 450, + X 450, 450, 480, 480, + X 480, 480, 480, 480, + X 480, 480, 480, 480, + X 486, 486, 486, 500, + X 500, 500, 500, 500, + X 500, 500, 512, 512, + X 512, 512, 512, 512, + X 512, 512, 512, 512, + X 512, 512, 512, 512, + X 512, 512, 512, 512, + X 512, 512, 512, 512, + X 512, 512, 512, 512 / diff --git a/gaussian_experimental/rg/rgauss_160.h b/gaussian_experimental/rg/rgauss_160.h new file mode 100644 index 000000000..b368a3c90 --- /dev/null +++ b/gaussian_experimental/rg/rgauss_160.h @@ -0,0 +1,42 @@ + REAL QG16018(160) + DATA QG160/ + X 18 , 25 , 36 , 40, + X 45 , 50 , 60 , 64, + X 72 , 72 , 80 , 90, + X 90 , 96 , 108 , 120, + X 120 , 125 , 128 , 135, + X 144 , 150 , 160 , 160, + X 180 , 180 , 180 , 192, + X 192 , 200 , 216 , 216, + X 225 , 225 , 240 , 240, + X 243 , 250 , 256 , 270, + X 270 , 288 , 288 , 288, + X 300 , 300 , 320 , 320, + X 320 , 320 , 324 , 360, + X 360 , 360 , 360 , 360, + X 360 , 375 , 375 , 375, + X 384 , 384 , 400 , 400, + X 400 , 405 , 432 , 432, + X 432 , 432 , 432 , 450, + X 450 , 450 , 450 , 480, + X 480 , 480 , 480 , 480, + X 480 , 480 , 500 , 500, + X 500 , 500 , 500 , 512, + X 512 , 540 , 540 , 540, + X 540 , 540 , 540 , 540, + X 540 , 576 , 576 , 576, + X 576 , 576 , 576 , 576, + X 576 , 576 , 576 , 600, + X 600 , 600 , 600 , 600, + X 600 , 600 , 600 , 600, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640, + X 640 , 640 , 640 , 640 / diff --git a/gaussian_experimental/rg/rgauss_200.h b/gaussian_experimental/rg/rgauss_200.h new file mode 100644 index 000000000..0292cf229 --- /dev/null +++ b/gaussian_experimental/rg/rgauss_200.h @@ -0,0 +1,52 @@ + REAL QG200(200) + DATA QG200/ + X 18, 25, 36, 40, + X 45, 50, 60, 64, + X 72, 72, 75, 81, + X 90, 96, 100, 108, + X 120, 125, 128, 135, + X 144, 150, 160, 160, + X 180, 180, 180, 192, + X 192, 200, 216, 216, + X 225, 225, 240, 240, + X 243, 250, 256, 270, + X 270, 288, 288, 288, + X 300, 300, 320, 320, + X 320, 320, 360, 360, + X 360, 360, 360, 360, + X 375, 375, 375, 384, + X 400, 400, 400, 400, + X 432, 432, 432, 432, + X 432, 450, 450, 450, + X 480, 480, 480, 480, + X 480, 480, 486, 500, + X 500, 500, 512, 512, + X 512, 540, 540, 540, + X 540, 540, 576, 576, + X 576, 576, 576, 576, + X 576, 576, 600, 600, + X 600, 600, 600, 640, + X 640, 640, 640, 640, + X 640, 640, 640, 640, + X 640, 648, 648, 675, + X 675, 675, 675, 675, + X 675, 675, 720, 720, + X 720, 720, 720, 720, + X 720, 720, 720, 720, + X 720, 720, 720, 720, + X 729, 729, 729, 750, + X 750, 750, 750, 750, + X 750, 750, 750, 768, + X 768, 768, 768, 768, + X 768, 768, 768, 800, + X 800, 800, 800, 800, + X 800, 800, 800, 800, + X 800, 800, 800, 800, + X 800, 800, 800, 800, + X 800, 800, 800, 800, + X 800, 800, 800, 800, + X 800, 800, 800, 800, + X 800, 800, 800, 800, + X 800, 800, 800, 800, + X 800, 800, 800, 800, + X 800, 800, 800, 800 / diff --git a/gaussian_experimental/rg/rgauss_256.h b/gaussian_experimental/rg/rgauss_256.h new file mode 100644 index 000000000..eb9a97bf4 --- /dev/null +++ b/gaussian_experimental/rg/rgauss_256.h @@ -0,0 +1,66 @@ + REAL QG256(256) + DATA QG256/ + X 18, 25, 32, 40, + X 45, 50, 60, 64, + X 72, 72, 75, 81, + X 90, 96, 100, 108, + X 120, 120, 125, 135, + X 144, 150, 160, 160, + X 180, 180, 180, 192, + X 192, 200, 216, 216, + X 216, 225, 240, 240, + X 243, 250, 256, 270, + X 270, 288, 288, 288, + X 300, 300, 320, 320, + X 320, 324, 360, 360, + X 360, 360, 360, 360, + X 375, 375, 384, 384, + X 400, 400, 400, 432, + X 432, 432, 432, 432, + X 450, 450, 450, 480, + X 480, 480, 480, 480, + X 486, 500, 500, 500, + X 512, 512, 540, 540, + X 540, 540, 540, 576, + X 576, 576, 576, 576, + X 576, 600, 600, 600, + X 600, 600, 640, 640, + X 640, 640, 640, 640, + X 640, 640, 648, 675, + X 675, 675, 675, 675, + X 675, 720, 720, 720, + X 720, 720, 720, 720, + X 720, 720, 729, 729, + X 750, 750, 750, 750, + X 750, 768, 768, 768, + X 768, 800, 800, 800, + X 800, 800, 800, 800, + X 800, 810, 810, 864, + X 864, 864, 864, 864, + X 864, 864, 864, 864, + X 864, 864, 864, 864, + X 864, 900, 900, 900, + X 900, 900, 900, 900, + X 900, 900, 900, 900, + X 960, 960, 960, 960, + X 960, 960, 960, 960, + X 960, 960, 960, 960, + X 960, 960, 960, 960, + X 960, 960, 960, 960, + X 960, 960, 972, 972, + X 972, 972, 972, 1000, + X 1000, 1000, 1000, 1000, + X 1000, 1000, 1000, 1000, + X 1000, 1000, 1000, 1000, + X 1000, 1000, 1000, 1024, + X 1024, 1024, 1024, 1024, + X 1024, 1024, 1024, 1024, + X 1024, 1024, 1024, 1024, + X 1024, 1024, 1024, 1024, + X 1024, 1024, 1024, 1024, + X 1024, 1024, 1024, 1024, + X 1024, 1024, 1024, 1024, + X 1024, 1024, 1024, 1024, + X 1024, 1024, 1024, 1024, + X 1024, 1024, 1024, 1024, + X 1024, 1024, 1024, 1024 / diff --git a/gaussian_experimental/rg/rgauss_320.h b/gaussian_experimental/rg/rgauss_320.h new file mode 100644 index 000000000..44f957ad5 --- /dev/null +++ b/gaussian_experimental/rg/rgauss_320.h @@ -0,0 +1,82 @@ + REAL QG320(320) + DATA QG320/ + X 18, 25, 32, 40, + X 45, 50, 60, 64, + X 72, 72, 75, 81, + X 90, 96, 100, 108, + X 120, 120, 125, 135, + X 144, 144, 150, 160, + X 180, 180, 180, 192, + X 192, 200, 216, 216, + X 216, 225, 240, 240, + X 240, 250, 256, 270, + X 270, 288, 288, 288, + X 300, 300, 320, 320, + X 320, 324, 360, 360, + X 360, 360, 360, 360, + X 375, 375, 384, 384, + X 400, 400, 405, 432, + X 432, 432, 432, 450, + X 450, 450, 480, 480, + X 480, 480, 480, 486, + X 500, 500, 500, 512, + X 512, 540, 540, 540, + X 540, 540, 576, 576, + X 576, 576, 576, 576, + X 600, 600, 600, 600, + X 625, 625, 625, 625, + X 625, 640, 640, 648, + X 648, 675, 675, 675, + X 675, 720, 720, 720, + X 720, 720, 720, 720, + X 720, 720, 729, 750, + X 750, 750, 750, 768, + X 768, 768, 768, 800, + X 800, 800, 800, 800, + X 800, 810, 810, 864, + X 864, 864, 864, 864, + X 864, 864, 864, 864, + X 864, 864, 900, 900, + X 900, 900, 900, 900, + X 900, 900, 960, 960, + X 960, 960, 960, 960, + X 960, 960, 960, 960, + X 960, 960, 960, 960, + X 972, 972, 1000, 1000, + X 1000, 1000, 1000, 1000, + X 1000, 1000, 1024, 1024, + X 1024, 1024, 1024, 1024, + X 1080, 1080, 1080, 1080, + X 1080, 1080, 1080, 1080, + X 1080, 1080, 1080, 1080, + X 1080, 1080, 1125, 1125, + X 1125, 1125, 1125, 1125, + X 1125, 1125, 1125, 1125, + X 1125, 1125, 1125, 1125, + X 1152, 1152, 1152, 1152, + X 1152, 1152, 1152, 1152, + X 1152, 1200, 1200, 1200, + X 1200, 1200, 1200, 1200, + X 1200, 1200, 1200, 1200, + X 1200, 1200, 1200, 1200, + X 1200, 1200, 1200, 1215, + X 1215, 1215, 1215, 1215, + X 1215, 1215, 1250, 1250, + X 1250, 1250, 1250, 1250, + X 1250, 1250, 1250, 1250, + X 1250, 1250, 1250, 1250, + X 1250, 1250, 1250, 1250, + X 1250, 1250, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280/ diff --git a/gaussian_experimental/rg/rgauss_400.h b/gaussian_experimental/rg/rgauss_400.h new file mode 100644 index 000000000..d670c59e0 --- /dev/null +++ b/gaussian_experimental/rg/rgauss_400.h @@ -0,0 +1,82 @@ + REAL QG400(400) + DATA QG400/ + X 18, 25, 32, 40, 45, + X 50, 60, 60, 72, 72, + X 75, 81, 90, 96, 100, + X 108, 120, 120, 125, 128, + X 144, 144, 150, 160, 160, + X 180, 180, 192, 192, 200, + X 200, 216, 216, 225, 240, + X 240, 240, 250, 250, 256, + X 270, 288, 288, 288, 300, + X 300, 320, 320, 320, 324, + X 360, 360, 360, 360, 360, + X 360, 375, 375, 384, 400, + X 400, 400, 405, 432, 432, + X 432, 432, 450, 450, 450, + X 480, 480, 480, 480, 480, + X 486, 500, 500, 512, 512, + X 540, 540, 540, 540, 540, + X 576, 576, 576, 576, 576, + X 576, 600, 600, 600, 600, + X 640, 640, 640, 640, 640, + X 640, 640, 648, 675, 675, + X 675, 675, 675, 720, 720, + X 720, 720, 720, 720, 720, + X 729, 729, 750, 750, 750, + X 750, 768, 768, 768, 800, + X 800, 800, 800, 800, 800, + X 810, 864, 864, 864, 864, + X 864, 864, 864, 864, 864, + X 864, 900, 900, 900, 900, + X 900, 900, 900, 960, 960, + X 960, 960, 960, 960, 960, + X 960, 960, 960, 960, 960, + X 972, 972, 1000, 1000, 1000, + X 1000, 1000, 1000, 1024, 1024, + X 1024, 1024, 1024, 1080, 1080, + X 1080, 1080, 1080, 1080, 1080, + X 1080, 1080, 1080, 1080, 1125, + X 1125, 1125, 1125, 1125, 1125, + X 1125, 1125, 1125, 1152, 1152, + X 1152, 1152, 1152, 1152, 1200, + X 1200, 1200, 1200, 1200, 1200, + X 1200, 1200, 1200, 1200, 1200, + X 1215, 1215, 1215, 1215, 1280, + X 1280, 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, 1280, + X 1296, 1296, 1296, 1296, 1350, + X 1350, 1350, 1350, 1350, 1350, + X 1350, 1350, 1350, 1350, 1350, + X 1350, 1350, 1350, 1350, 1440, + X 1440, 1440, 1440, 1440, 1440, + X 1440, 1440, 1440, 1440, 1440, + X 1440, 1440, 1440, 1440, 1440, + X 1440, 1440, 1440, 1440, 1440, + X 1440, 1440, 1440, 1440, 1440, + X 1440, 1440, 1458, 1458, 1458, + X 1458, 1458, 1458, 1458, 1500, + X 1500, 1500, 1500, 1500, 1500, + X 1500, 1500, 1500, 1500, 1500, + X 1500, 1500, 1500, 1500, 1500, + X 1500, 1536, 1536, 1536, 1536, + X 1536, 1536, 1536, 1536, 1536, + X 1536, 1536, 1536, 1536, 1536, + X 1536, 1536, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600 / diff --git a/gaussian_experimental/rg/rgauss_512.h b/gaussian_experimental/rg/rgauss_512.h new file mode 100644 index 000000000..7bde6602d --- /dev/null +++ b/gaussian_experimental/rg/rgauss_512.h @@ -0,0 +1,98 @@ + REAL QG512(512) + DATA QG512/ + X 18, 25, 32, 40, 45, + X 50, 60, 60, 72, 72, + X 75, 81, 90, 96, 96, + X 100, 108, 120, 125, 128, + X 135, 144, 150, 160, 160, + X 180, 180, 180, 192, 192, + X 200, 216, 216, 225, 225, + X 240, 240, 243, 250, 256, + X 270, 270, 288, 288, 288, + X 300, 320, 320, 320, 320, + X 360, 360, 360, 360, 360, + X 360, 375, 375, 384, 384, + X 400, 400, 400, 432, 432, + X 432, 432, 450, 450, 450, + X 480, 480, 480, 480, 480, + X 486, 500, 500, 512, 512, + X 540, 540, 540, 540, 540, + X 576, 576, 576, 576, 576, + X 576, 600, 600, 600, 640, + X 640, 640, 640, 640, 640, + X 640, 648, 675, 675, 675, + X 675, 675, 720, 720, 720, + X 720, 720, 720, 720, 729, + X 729, 750, 750, 750, 768, + X 768, 768, 800, 800, 800, + X 800, 800, 800, 810, 864, + X 864, 864, 864, 864, 864, + X 864, 864, 864, 864, 900, + X 900, 900, 900, 900, 900, + X 960, 960, 960, 960, 960, + X 960, 960, 960, 960, 960, + X 960, 972, 972, 1000, 1000, + X 1000, 1000, 1000, 1024, 1024, + X 1024, 1024, 1080, 1080, 1080, + X 1080, 1080, 1080, 1080, 1080, + X 1080, 1080, 1125, 1125, 1125, + X 1125, 1125, 1125, 1125, 1125, + X 1125, 1152, 1152, 1152, 1152, + X 1152, 1200, 1200, 1200, 1200, + X 1200, 1200, 1200, 1200, 1200, + X 1215, 1215, 1215, 1280, 1280, + X 1280, 1280, 1280, 1280, 1280, + X 1280, 1280, 1280, 1280, 1280, + X 1280, 1296, 1296, 1296, 1350, + X 1350, 1350, 1350, 1350, 1350, + X 1350, 1350, 1350, 1350, 1350, + X 1440, 1440, 1440, 1440, 1440, + X 1440, 1440, 1440, 1440, 1440, + X 1440, 1440, 1440, 1440, 1440, + X 1440, 1440, 1440, 1440, 1458, + X 1458, 1458, 1458, 1500, 1500, + X 1500, 1500, 1500, 1500, 1500, + X 1500, 1500, 1500, 1536, 1536, + X 1536, 1536, 1536, 1536, 1536, + X 1536, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1600, 1600, 1600, + X 1600, 1600, 1620, 1620, 1620, + X 1620, 1728, 1728, 1728, 1728, + X 1728, 1728, 1728, 1728, 1728, + X 1728, 1728, 1728, 1728, 1728, + X 1728, 1728, 1728, 1728, 1728, + X 1728, 1728, 1728, 1728, 1728, + X 1728, 1728, 1728, 1728, 1728, + X 1728, 1800, 1800, 1800, 1800, + X 1800, 1800, 1800, 1800, 1800, + X 1800, 1800, 1800, 1800, 1800, + X 1800, 1800, 1800, 1800, 1800, + X 1800, 1800, 1800, 1875, 1875, + X 1875, 1875, 1875, 1875, 1875, + X 1875, 1875, 1875, 1875, 1875, + X 1875, 1875, 1875, 1875, 1875, + X 1875, 1875, 1875, 1875, 1875, + X 1875, 1875, 1875, 1875, 1920, + X 1920, 1920, 1920, 1920, 1920, + X 1920, 1920, 1920, 1920, 1920, + X 1920, 1920, 1920, 1920, 1920, + X 1920, 1920, 1944, 1944, 1944, + X 1944, 1944, 1944, 1944, 1944, + X 1944, 1944, 1944, 2000, 2000, + X 2000, 2000, 2000, 2000, 2000, + X 2000, 2000, 2000, 2000, 2000, + X 2000, 2000, 2000, 2000, 2000, + X 2000, 2000, 2000, 2000, 2000, + X 2000, 2000, 2000, 2000, 2000, + X 2000, 2000, 2000, 2000, 2000, + X 2025, 2025, 2025, 2025, 2025, + X 2025, 2025, 2025, 2025, 2025, + X 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2048, 2048, + X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + X 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, + X 2048, 2048 / diff --git a/grib_api.pc.in b/grib_api.pc.in new file mode 100644 index 000000000..de784dfd8 --- /dev/null +++ b/grib_api.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@ +includedir=@includedir@ +libdir=@libdir@ + +Name: grib_api +Description: The grib_api library +Version: @VERSION@ +Cflags: @CFLAGS@ +Libs: @LDFLAGS@ @LIBS@ diff --git a/grib_api.spec.in b/grib_api.spec.in new file mode 100644 index 000000000..4f6a25c08 --- /dev/null +++ b/grib_api.spec.in @@ -0,0 +1,134 @@ +# -*- Mode:rpm-spec -*- +Summary: The ECMWF GRIB API is an application program interface accessible from C and FORTRAN programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages. +%define rel @RPM_RELEASE@ + +%define version @VERSION@ +%define pkgname @PACKAGE@ +%define prefix @prefix@ +%define _prefix @prefix@ +%define _target_platform @RPM_HOST_CPU@-@RPM_HOST_VENDOR@-@RPM_HOST_OS@ +%define _target_cpu @RPM_HOST_CPU@ +%define _enable_python %(test -z "@WITH_PYTHON_TRUE@" && echo 1 || echo 0) +%define _enable_fortran %(test -z "@WITH_FORTRAN_TRUE@" && echo 1 || echo 0) +%define _requires_openjpeg %(test -n "@LIB_OPENJPEG@" && echo 1 || echo 0) +%define _requires_jasper %(test -n "@LIB_JASPER@" && echo 1 || echo 0) + +%define lt_release @LT_RELEASE@ +%define lt_version @LT_CURRENT@.@LT_REVISION@.@LT_AGE@ + +%define __aclocal aclocal || aclocal -I ./macros +%define configure_args @RPM_CONFIGURE_ARGS@ + +Name: %{pkgname} +Version: %{version} +Release: %{rel} +Distribution: @LINUX_DISTRIBUTION_NAME@ @LINUX_DISTRIBUTION_VERSION@ + +Vendor: ECMWF +License: LGPL +Group: Scientific/Libraries +Source: %{pkgname}-%{version}.tar.gz +# %if %{_requires_jasper} +# Requires: libjasper +# %endif +# %if %{_requires_openjpeg} +# Requires: openjpeg +# %endif +Buildroot: /tmp/%{pkgname}-root +URL: http://www.ecmwf.int +Prefix: %{prefix} +BuildArchitectures: %{_target_cpu} +Packager: Software Services + +%description +The ECMWF GRIB API is an application program interface accessible from C and FORTRAN programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages. + +%changelog +* Mon May 26 2005 - Get the changelog from JIRA +- Added kmymoney-ofx package + +%prep +%setup +#%patch + +%build +%GNUconfigure %{?configure_args} +# This is why we copy the CFLAGS to the CXXFLAGS in configure.in +# CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{prefix} +make + +%install +# To make things work with BUILDROOT +echo Cleaning RPM_BUILD_ROOT: "$RPM_BUILD_ROOT" +rm -rf "$RPM_BUILD_ROOT" +make DESTDIR="$RPM_BUILD_ROOT" install + +%clean + + +%files +%defattr(-, root, root) +#%doc COPYRIGHT ChangeLog README AUTHORS NEWS +#%doc doc/* +%prefix/bin/* +%prefix/lib*/libgrib_api.so +%prefix/lib*/libgrib_api-%{version}.so +%prefix/share/grib_api/definitions/* + +# If you install a library +%post +/sbin/ldconfig || exit 1 +exit 0 + +# If you install a library +%postun +/sbin/ldconfig +exit 0 + +%package devel +Summary: Development files for %{pkgname} +Group: Scientific/Libraries +Requires: grib_api +%description devel +Development files for %{pkgname}. +The ECMWF GRIB API is an application program interface accessible from C and FORTRAN programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages. +%files devel +%defattr(-, root, root) +#%doc doc +%prefix/include/* +%prefix/lib*/*.a +%prefix/lib*/*.la +%prefix/lib*/pkgconfig/* +%prefix/share/grib_api/samples/* +%prefix/share/grib_api/ifs_samples/* + +# Only generate package if python is enabled +%if %{_enable_python} +%package python +Summary: Python interface for %{pkgname} +Group: Scientific/Libraries +Requires: grib_api +%description python +Python interface for %{pkgname}. +The ECMWF GRIB API is an application program interface accessible from C and FORTRAN programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages. +%files python +%defattr(-, root, root) +%prefix/lib*/python*/* +%endif + +# Only generate package if fortran is enabled +%if %{_enable_fortran} +%package fortran +Summary: Fortran 90 interface for %{pkgname} +Group: Scientific/Libraries +Requires: grib_api +%description fortran +Fortran 77 and 90 interface for %{pkgname}. +The ECMWF GRIB API is an application program interface accessible from C and FORTRAN programs developed for encoding and decoding WMO FM-92 GRIB edition 1 +and edition 2 messages. +%files fortran +%defattr(-, root,root) +%prefix/lib*/*f90* +%prefix/lib*/*f77* +%endif + diff --git a/grib_api_config.h.in b/grib_api_config.h.in new file mode 100644 index 000000000..1cee5c154 --- /dev/null +++ b/grib_api_config.h.in @@ -0,0 +1,17 @@ +#ifndef grib_api_config_h +#define grib_api_config_h + +#include "ecbuild_config.h" + +#define GRIB_API_VERSION_STR "@GRIB_API_VERSION@" + +#define GRIB_API_MAJOR_VERSION @GRIB_API_MAJOR_VERSION@ +#define GRIB_API_MINOR_VERSION @GRIB_API_MINOR_VERSION@ +#define GRIB_API_REVISION_VERSION @GRIB_API_PATCH_VERSION@ + +#define GRIB_DEFINITION_PATH "@GRIB_API_DEFINITION_PATH@" +#define GRIB_SAMPLES_PATH "@GRIB_API_SAMPLES_PATH@" + +#cmakedefine HAVE_LIBSZIP + +#endif //grib_api_config_h diff --git a/grib_api_f90.pc.in b/grib_api_f90.pc.in new file mode 100644 index 000000000..80181eb6a --- /dev/null +++ b/grib_api_f90.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@ +includedir=@includedir@ +libdir=@libdir@ +FC=@FC@ + +Name: grib_api +Description: The grib_api library for Fortran 90 +Version: @VERSION@ +Cflags: @CFLAGS@ "@F90_MODULE_FLAG@@includedir@" +Libs: -L@libdir@ @LDFLAGS@ @LIBS@ -lgrib_api_f90 -lgrib_api diff --git a/gribex/Makefile b/gribex/Makefile new file mode 100644 index 000000000..f01163c5f --- /dev/null +++ b/gribex/Makefile @@ -0,0 +1,29 @@ +LIB = /usr/local/lib/metaps/lib/000381/libemos.R64.D64.I32.a +INSTALL_DIR=/usr/local/lib/metaps/bin +VERSION=1.9.9 +GRIB_API=-L/usr/local/lib/metaps/lib/grib_api/${VERSION}/lib -lgrib_api_f90 -lgrib_api -L/usr/local/apps/jasper/1.900.0/LP64/lib -ljasper -lm -I/usr/local/lib/metaps/lib/grib_api/${VERSION}/include -I/usr/local/apps/jasper/1.900.0/LP64/include + +FFLAGS=-O +EXECS = gribex_count grib_api_count +all: $(EXECS) + +grib_api_count: grib_api_count.c + xlc_r -o $@ grib_api_count.c $(GRIB_API) + +gribex_count: gribex_count.o gribex_count.F + $(FC) $(FFLAGS) -o $@ gribex_count.o $(LIB) + +install: grib_api_count gribex_count gribex_check.ksh gribex_check_no_fail.ksh + cp $(INSTALL_DIR)/grib_api_count $(INSTALL_DIR)/grib_api_count.old + cp grib_api_count $(INSTALL_DIR)/grib_api_count + cp $(INSTALL_DIR)/gribex_count $(INSTALL_DIR)/gribex_count.old + cp gribex_count $(INSTALL_DIR)/gribex_count + cp $(INSTALL_DIR)/gribex_check.ksh $(INSTALL_DIR)/gribex_check.ksh.old + cp gribex_check.ksh $(INSTALL_DIR)/gribex_check.ksh + cp $(INSTALL_DIR)/gribex_check_no_fail.ksh $(INSTALL_DIR)/gribex_check_no_fail.ksh.old + cp gribex_check_no_fail.ksh $(INSTALL_DIR)/gribex_check_no_fail.ksh + +clean: + @for name in $(EXECS) ; do\ + (rm -f $$name $$name.o ); \ + done diff --git a/gribex/grib_api_count.c b/gribex/grib_api_count.c new file mode 100644 index 000000000..65c32df53 --- /dev/null +++ b/gribex/grib_api_count.c @@ -0,0 +1,45 @@ +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s [edition] in.grib\n",prog); + exit(1); +} +int main(int argc, char* argv[]) { + FILE* fh; + grib_handle* h; + int count; + int err; + long edition,editionToSearch; + char* file; + char identifier[10]={0,}; + size_t slen=10; + + if (argc < 2 || argc > 3 ) usage(argv[0]); + + if (argc==3) { + editionToSearch=atoi(argv[1]); + file=argv[2]; + } else { + editionToSearch=0; + file=argv[1]; + } + + fh=fopen(file,"r"); + if (!fh) { + perror(file); + exit(1); + } + + count=0; + while( h=grib_handle_new_from_file(0,fh,&err)) { + grib_get_long(h,"edition",&edition); + slen=10; + grib_get_string(h,"identifier",identifier,&slen); + if (!strcmp(identifier,"GRIB") && (editionToSearch==0 || edition==editionToSearch)) count++; + grib_handle_delete(h); + } + printf("%d\n",count); + + fclose(fh); + +} diff --git a/gribex/gribex_check.ksh b/gribex/gribex_check.ksh new file mode 100755 index 000000000..8d888283e --- /dev/null +++ b/gribex/gribex_check.ksh @@ -0,0 +1,43 @@ +#!/usr/bin/ksh +set -e + +bin=/usr/local/lib/metaps/bin + +gribex_count=$bin/gribex_count +grib_api_count=$bin/grib_api_count + +typeset -i ngribex +typeset -i ngrib_api +typeset -i diff + +for file in $1 +do + + # to skip the errors due to edition 2 + ngribex=`$gribex_count -i $file | sed '/D2ORDR: 21st octet of section 4 not zero:/d' | sed '/interpreted as extra bits for group number/d' | sed '/GRIBEX: Grib Edition not catered for./d' | sed '/GRIBEX: Return code = 413/d'` + + #grib_api tool is counint only grib edition 1 + ngrib_api=`$grib_api_count 1 $file` + + ngrib_api_all=`$grib_api_count $file` + + if [ $ngribex != $ngrib_api ] + then + echo gribex count != grib_api count: $ngribex != $ngrib_api + echo $file - ERR - +# exit 1 + fi + + (( diff=ngrib_api_all - ngrib_api )) + if [ $diff != 0 ] + then + echo $file == $diff GRIB 2 messages == + else + echo $file - OK - + fi + +done + + + + diff --git a/gribex/gribex_check_nofail.ksh b/gribex/gribex_check_nofail.ksh new file mode 100755 index 000000000..d056db1b1 --- /dev/null +++ b/gribex/gribex_check_nofail.ksh @@ -0,0 +1,42 @@ +#!/usr/bin/ksh +set -e + +bin=/usr/local/lib/metaps/bin + +gribex_count=$bin/gribex_count +grib_api_count=$bin/grib_api_count + +typeset -i ngribex +typeset -i ngrib_api +typeset -i diff + +for file in $1 +do + + print "${file}\c" + # to skip the errors due to edition 2 + ngribex=`$gribex_count -i $file | sed '/D2ORDR: 21st octet of section 4 not zero:/d' | sed '/interpreted as extra bits for group number/d' | sed '/GRIBEX: Grib Edition not catered for./d' | sed '/GRIBEX: Return code = 413/d'` + + #grib_api tool is counint only grib edition 1 + ngrib_api=`$grib_api_count 1 $file` + + ngrib_api_all=`$grib_api_count $file` + + if [ $ngribex != $ngrib_api ] + then + print " == gribex != grib_api ( ${ngribex} != ${ngrib_api} ) ==" + fi + + (( diff=ngrib_api_all - ngrib_api )) + if [ $diff != 0 ] + then + print " == ${diff} GRIB 2 messages == " + else + print " - OK -" + fi + +done + + + + diff --git a/gribex/gribex_count.F b/gribex/gribex_count.F new file mode 100644 index 000000000..c3cced55e --- /dev/null +++ b/gribex/gribex_count.F @@ -0,0 +1,102 @@ + PROGRAM GRDEMO +C + IMPLICIT NONE + INTEGER JPACK, JPBYTE +C + PARAMETER (JPACK = 52000000) + PARAMETER (JPBYTE = 4) + INTEGER ISEC0 (2) + INTEGER ISEC1 (1024) + INTEGER ISEC2 (1024) + INTEGER ISEC3 (2) + INTEGER ISEC4 (512) + REAL ZSEC2 (512) + REAL ZSEC3 (2) + REAL ZSEC4 (JPACK * 4) + INTEGER INBUFF (JPACK) + CHARACTER*256 YDATAFILE + CHARACTER*2 INPUT + CHARACTER*1 YOPER + INTEGER IFILE, NUMERR, IPBLEN, IWORD, IFILEN, IRET, IARGC, NARGS + INTEGER JCOUNT, LENOUT + INTEGER JLAT, JLONG, JSTART, JEND + REAL ZFIRST, ZLAST, ZSTEP, ZLAT + REAL ZMAX,ZMIN + + NARGS = IARGC() + IF( NARGS.LT.2 ) THEN + print*,'Usage: gribex_check -i inputfile' + STOP + END IF + + CALL GETARG(1,INPUT) + + IF(INPUT.EQ.'-i') THEN + CALL GETARG(2,YDATAFILE) + ELSE + print*,'Usage: gribex_check -i inputfile' + STOP + END IF + + IPBLEN = JPACK * JPBYTE + IFILEN = INDEX(YDATAFILE,' ') - 1 + CALL PBOPEN (IFILE, YDATAFILE (1: IFILEN), 'R', IRET) + IF ( IRET .NE. 0 ) THEN + WRITE (*, *) ' Return code from PBOPEN = ', IRET + CALL PBCLOSE(IFILE, IRET) + STOP 'Fault in PBOPEN' + ENDIF +C +C Loop through GRIB products in file. + JCOUNT = 0 +C + 50 CONTINUE + JCOUNT = JCOUNT + 1 +C +C Read packed field into INBUFF. + CALL PBGRIB (IFILE, INBUFF, IPBLEN, LENOUT, IRET ) +C + IF ( IRET .LT. 0 ) THEN +c WRITE (*, *) ' Return code from pbgrib = ', IRET + IF ( IRET .EQ. -1) THEN + WRITE(*,'(I6)') (JCOUNT-1) + CALL PBCLOSE (IFILE, IRET) + GO TO 100 + ELSE + WRITE (*, *) ' kret = ',IRET,' after ', JCOUNT,' products.' + CALL PBCLOSE (IFILE, IRET) + STOP 'Fault in PBGRIB' + ENDIF + ENDIF +C +C 'D' function to unpack entire GRIB message. +C + YOPER = 'D' +C WRITE (*,*) ' GRDEMO : Function code = ', YOPER +C + IRET = 1 + LENOUT = LENOUT / JPBYTE +C +C Set missing data values +C + ISEC3 (2) = -99999 + ZSEC3 (2) = -99999.0 +C + CALL GRIBEX (ISEC0, ISEC1, ISEC2, ZSEC2, ISEC3, ZSEC3, ISEC4, + X ZSEC4, IPBLEN, INBUFF, LENOUT, IWORD, YOPER, IRET) +C +C Check return code. +C +C WRITE (*,*) ' GRDEMO : GRIBEX return code = ', IRET + IF (IRET .EQ. - 6) WRITE (*,*) ' GRDEMO : Pseudo-grib data found.' + IF (IRET .GT. 0) THEN + IF ( IRET .EQ. 413 ) THEN + JCOUNT=JCOUNT-1 + ELSE + WRITE (*, *) ' kret = ',IRET,' after ', JCOUNT,' products.' + STOP 'Fault in GRIBEX' + ENDIF + ENDIF + GO TO 50 +C +100 END diff --git a/gribex/gribex_count.ksh b/gribex/gribex_count.ksh new file mode 100755 index 000000000..601ee40f7 --- /dev/null +++ b/gribex/gribex_count.ksh @@ -0,0 +1,8 @@ +#!/usr/bin/ksh + +gribex_count=./gribex_count +typeset -i n +n=`$gribex_count -i $1 | sed '/GRIBEX: Grib Edition not catered for./d' | sed '/GRIBEX: Return code = 413/d'` + +echo $n + diff --git a/ifs_samples/grib1/Makefile.am b/ifs_samples/grib1/Makefile.am new file mode 100644 index 000000000..2e78c8012 --- /dev/null +++ b/ifs_samples/grib1/Makefile.am @@ -0,0 +1,272 @@ +#This file is generated by make_makefile_am.pl +# DON'T EDIT!!! + +grib1dir = @IFS_SAMPLES_DIR@/grib1 + +dist_grib1_DATA = \ + gg_ml.tmpl \ + gg_sfc.tmpl \ + sh_ml.tmpl \ + sh_sfc.tmpl + +nodist_grib1_DATA = \ + GRIB1.tmpl \ + GRIB2.tmpl \ + budg.tmpl \ + gg_sfc_grib1.tmpl \ + gg_sfc_grib2.tmpl \ + polar_stereographic_pl_grib1.tmpl \ + polar_stereographic_pl_grib2.tmpl \ + polar_stereographic_sfc_grib1.tmpl \ + polar_stereographic_sfc_grib2.tmpl \ + reduced_gg_ml_grib1.tmpl \ + reduced_gg_ml_grib2.tmpl \ + reduced_gg_pl_1024_grib1.tmpl \ + reduced_gg_pl_1024_grib2.tmpl \ + reduced_gg_pl_128_grib1.tmpl \ + reduced_gg_pl_128_grib2.tmpl \ + reduced_gg_pl_160_grib1.tmpl \ + reduced_gg_pl_160_grib2.tmpl \ + reduced_gg_pl_2000_grib1.tmpl \ + reduced_gg_pl_2000_grib2.tmpl \ + reduced_gg_pl_200_grib1.tmpl \ + reduced_gg_pl_200_grib2.tmpl \ + reduced_gg_pl_256_grib1.tmpl \ + reduced_gg_pl_256_grib2.tmpl \ + reduced_gg_pl_320_grib1.tmpl \ + reduced_gg_pl_320_grib2.tmpl \ + reduced_gg_pl_32_grib1.tmpl \ + reduced_gg_pl_32_grib2.tmpl \ + reduced_gg_pl_400_grib1.tmpl \ + reduced_gg_pl_400_grib2.tmpl \ + reduced_gg_pl_48_grib1.tmpl \ + reduced_gg_pl_48_grib2.tmpl \ + reduced_gg_pl_512_grib1.tmpl \ + reduced_gg_pl_512_grib2.tmpl \ + reduced_gg_pl_640_grib1.tmpl \ + reduced_gg_pl_640_grib2.tmpl \ + reduced_gg_pl_80_grib1.tmpl \ + reduced_gg_pl_80_grib2.tmpl \ + reduced_gg_pl_grib1.tmpl \ + reduced_gg_pl_grib2.tmpl \ + reduced_gg_sfc_grib1.tmpl \ + reduced_gg_sfc_grib2.tmpl \ + reduced_gg_sfc_jpeg_grib2.tmpl \ + reduced_ll_sfc_grib1.tmpl \ + reduced_ll_sfc_grib2.tmpl \ + regular_gg_ml_grib1.tmpl \ + regular_gg_ml_grib2.tmpl \ + regular_gg_pl_grib1.tmpl \ + regular_gg_pl_grib2.tmpl \ + regular_gg_sfc_grib1.tmpl \ + regular_gg_sfc_grib2.tmpl \ + regular_ll_pl_grib1.tmpl \ + regular_ll_pl_grib2.tmpl \ + regular_ll_sfc_grib1.tmpl \ + regular_ll_sfc_grib2.tmpl \ + rotated_ll_pl_grib1.tmpl \ + rotated_ll_pl_grib2.tmpl \ + rotated_ll_sfc_grib1.tmpl \ + rotated_ll_sfc_grib2.tmpl \ + sh_ml_grib1.tmpl \ + sh_ml_grib2.tmpl \ + sh_pl_grib1.tmpl \ + sh_pl_grib2.tmpl \ + sh_sfc_grib1.tmpl \ + sh_sfc_grib2.tmpl + +GRIB1.tmpl: ../../samples/GRIB1.tmpl + cp -f ../../samples/GRIB1.tmpl . + +GRIB2.tmpl: ../../samples/GRIB2.tmpl + cp -f ../../samples/GRIB2.tmpl . + +gg_sfc_grib1.tmpl: ../../samples/gg_sfc_grib1.tmpl + cp -f ../../samples/gg_sfc_grib1.tmpl . + +budg.tmpl: ../../samples/budg.tmpl + cp -f ../../samples/budg.tmpl . + +gg_sfc_grib2.tmpl: ../../samples/gg_sfc_grib2.tmpl + cp -f ../../samples/gg_sfc_grib2.tmpl . + +polar_stereographic_pl_grib1.tmpl: ../../samples/polar_stereographic_pl_grib1.tmpl + cp -f ../../samples/polar_stereographic_pl_grib1.tmpl . + +polar_stereographic_pl_grib2.tmpl: ../../samples/polar_stereographic_pl_grib2.tmpl + cp -f ../../samples/polar_stereographic_pl_grib2.tmpl . + +polar_stereographic_sfc_grib1.tmpl: ../../samples/polar_stereographic_sfc_grib1.tmpl + cp -f ../../samples/polar_stereographic_sfc_grib1.tmpl . + +polar_stereographic_sfc_grib2.tmpl: ../../samples/polar_stereographic_sfc_grib2.tmpl + cp -f ../../samples/polar_stereographic_sfc_grib2.tmpl . + +reduced_gg_ml_grib1.tmpl: ../../samples/reduced_gg_ml_grib1.tmpl + cp -f ../../samples/reduced_gg_ml_grib1.tmpl . + +reduced_gg_ml_grib2.tmpl: ../../samples/reduced_gg_ml_grib2.tmpl + cp -f ../../samples/reduced_gg_ml_grib2.tmpl . + +reduced_gg_pl_1024_grib1.tmpl: ../../samples/reduced_gg_pl_1024_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_1024_grib1.tmpl . + +reduced_gg_pl_1024_grib2.tmpl: ../../samples/reduced_gg_pl_1024_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_1024_grib2.tmpl . + +reduced_gg_pl_128_grib1.tmpl: ../../samples/reduced_gg_pl_128_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_128_grib1.tmpl . + +reduced_gg_pl_128_grib2.tmpl: ../../samples/reduced_gg_pl_128_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_128_grib2.tmpl . + +reduced_gg_pl_160_grib1.tmpl: ../../samples/reduced_gg_pl_160_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_160_grib1.tmpl . + +reduced_gg_pl_160_grib2.tmpl: ../../samples/reduced_gg_pl_160_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_160_grib2.tmpl . + +reduced_gg_pl_2000_grib1.tmpl: ../../samples/reduced_gg_pl_2000_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_2000_grib1.tmpl . + +reduced_gg_pl_2000_grib2.tmpl: ../../samples/reduced_gg_pl_2000_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_2000_grib2.tmpl . + +reduced_gg_pl_200_grib1.tmpl: ../../samples/reduced_gg_pl_200_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_200_grib1.tmpl . + +reduced_gg_pl_200_grib2.tmpl: ../../samples/reduced_gg_pl_200_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_200_grib2.tmpl . + +reduced_gg_pl_256_grib1.tmpl: ../../samples/reduced_gg_pl_256_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_256_grib1.tmpl . + +reduced_gg_pl_256_grib2.tmpl: ../../samples/reduced_gg_pl_256_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_256_grib2.tmpl . + +reduced_gg_pl_320_grib1.tmpl: ../../samples/reduced_gg_pl_320_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_320_grib1.tmpl . + +reduced_gg_pl_320_grib2.tmpl: ../../samples/reduced_gg_pl_320_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_320_grib2.tmpl . + +reduced_gg_pl_32_grib1.tmpl: ../../samples/reduced_gg_pl_32_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_32_grib1.tmpl . + +reduced_gg_pl_32_grib2.tmpl: ../../samples/reduced_gg_pl_32_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_32_grib2.tmpl . + +reduced_gg_pl_400_grib1.tmpl: ../../samples/reduced_gg_pl_400_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_400_grib1.tmpl . + +reduced_gg_pl_400_grib2.tmpl: ../../samples/reduced_gg_pl_400_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_400_grib2.tmpl . + +reduced_gg_pl_48_grib1.tmpl: ../../samples/reduced_gg_pl_48_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_48_grib1.tmpl . + +reduced_gg_pl_48_grib2.tmpl: ../../samples/reduced_gg_pl_48_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_48_grib2.tmpl . + +reduced_gg_pl_512_grib1.tmpl: ../../samples/reduced_gg_pl_512_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_512_grib1.tmpl . + +reduced_gg_pl_512_grib2.tmpl: ../../samples/reduced_gg_pl_512_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_512_grib2.tmpl . + +reduced_gg_pl_640_grib1.tmpl: ../../samples/reduced_gg_pl_640_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_640_grib1.tmpl . + +reduced_gg_pl_640_grib2.tmpl: ../../samples/reduced_gg_pl_640_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_640_grib2.tmpl . + +reduced_gg_pl_80_grib1.tmpl: ../../samples/reduced_gg_pl_80_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_80_grib1.tmpl . + +reduced_gg_pl_80_grib2.tmpl: ../../samples/reduced_gg_pl_80_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_80_grib2.tmpl . + +reduced_gg_pl_grib1.tmpl: ../../samples/reduced_gg_pl_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_grib1.tmpl . + +reduced_gg_pl_grib2.tmpl: ../../samples/reduced_gg_pl_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_grib2.tmpl . + +reduced_gg_sfc_grib1.tmpl: ../../samples/reduced_gg_sfc_grib1.tmpl + cp -f ../../samples/reduced_gg_sfc_grib1.tmpl . + +reduced_gg_sfc_grib2.tmpl: ../../samples/reduced_gg_sfc_grib2.tmpl + cp -f ../../samples/reduced_gg_sfc_grib2.tmpl . + +reduced_gg_sfc_jpeg_grib2.tmpl: ../../samples/reduced_gg_sfc_jpeg_grib2.tmpl + cp -f ../../samples/reduced_gg_sfc_jpeg_grib2.tmpl . + +reduced_ll_sfc_grib1.tmpl: ../../samples/reduced_ll_sfc_grib1.tmpl + cp -f ../../samples/reduced_ll_sfc_grib1.tmpl . + +reduced_ll_sfc_grib2.tmpl: ../../samples/reduced_ll_sfc_grib2.tmpl + cp -f ../../samples/reduced_ll_sfc_grib2.tmpl . + +regular_gg_ml_grib1.tmpl: ../../samples/regular_gg_ml_grib1.tmpl + cp -f ../../samples/regular_gg_ml_grib1.tmpl . + +regular_gg_ml_grib2.tmpl: ../../samples/regular_gg_ml_grib2.tmpl + cp -f ../../samples/regular_gg_ml_grib2.tmpl . + +regular_gg_pl_grib1.tmpl: ../../samples/regular_gg_pl_grib1.tmpl + cp -f ../../samples/regular_gg_pl_grib1.tmpl . + +regular_gg_pl_grib2.tmpl: ../../samples/regular_gg_pl_grib2.tmpl + cp -f ../../samples/regular_gg_pl_grib2.tmpl . + +regular_gg_sfc_grib1.tmpl: ../../samples/regular_gg_sfc_grib1.tmpl + cp -f ../../samples/regular_gg_sfc_grib1.tmpl . + +regular_gg_sfc_grib2.tmpl: ../../samples/regular_gg_sfc_grib2.tmpl + cp -f ../../samples/regular_gg_sfc_grib2.tmpl . + +regular_ll_pl_grib1.tmpl: ../../samples/regular_ll_pl_grib1.tmpl + cp -f ../../samples/regular_ll_pl_grib1.tmpl . + +regular_ll_pl_grib2.tmpl: ../../samples/regular_ll_pl_grib2.tmpl + cp -f ../../samples/regular_ll_pl_grib2.tmpl . + +regular_ll_sfc_grib1.tmpl: ../../samples/regular_ll_sfc_grib1.tmpl + cp -f ../../samples/regular_ll_sfc_grib1.tmpl . + +regular_ll_sfc_grib2.tmpl: ../../samples/regular_ll_sfc_grib2.tmpl + cp -f ../../samples/regular_ll_sfc_grib2.tmpl . + +rotated_ll_pl_grib1.tmpl: ../../samples/rotated_ll_pl_grib1.tmpl + cp -f ../../samples/rotated_ll_pl_grib1.tmpl . + +rotated_ll_pl_grib2.tmpl: ../../samples/rotated_ll_pl_grib2.tmpl + cp -f ../../samples/rotated_ll_pl_grib2.tmpl . + +rotated_ll_sfc_grib1.tmpl: ../../samples/rotated_ll_sfc_grib1.tmpl + cp -f ../../samples/rotated_ll_sfc_grib1.tmpl . + +rotated_ll_sfc_grib2.tmpl: ../../samples/rotated_ll_sfc_grib2.tmpl + cp -f ../../samples/rotated_ll_sfc_grib2.tmpl . + +sh_ml_grib1.tmpl: ../../samples/sh_ml_grib1.tmpl + cp -f ../../samples/sh_ml_grib1.tmpl . + +sh_ml_grib2.tmpl: ../../samples/sh_ml_grib2.tmpl + cp -f ../../samples/sh_ml_grib2.tmpl . + +sh_pl_grib1.tmpl: ../../samples/sh_pl_grib1.tmpl + cp -f ../../samples/sh_pl_grib1.tmpl . + +sh_pl_grib2.tmpl: ../../samples/sh_pl_grib2.tmpl + cp -f ../../samples/sh_pl_grib2.tmpl . + +sh_sfc_grib1.tmpl: ../../samples/sh_sfc_grib1.tmpl + cp -f ../../samples/sh_sfc_grib1.tmpl . + +sh_sfc_grib2.tmpl: ../../samples/sh_sfc_grib2.tmpl + cp -f ../../samples/sh_sfc_grib2.tmpl . + + + + diff --git a/ifs_samples/grib1/gg_ml.tmpl b/ifs_samples/grib1/gg_ml.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..312ae869e94612f2789465cd2c496be543b7531f GIT binary patch literal 27596 zcmc$_WqTV*)GcbZuv^W{Evdz_%oxXZ7$?lk%*@GznI_E4JYi;r33D=Gh6%&1_uO;N zAGjZ``>`zWqwcP%z4lsb?5!|INBBk-ua&&;{W~g ze;=cxW8$L2;c(Lbyc4^ByAt>NcT}V3+CTp1_2Ak+;(NRTZ-oEn)&Ke_E=PHb7u(ps zc#ov##m|oHQ$VzSP@sHxQ;@t*DJbuKSu5Mw!`o9V%6!b4#e6~^H&bTXu7apH4e9=`a zam3=$5sQl1j zMHSASE~R&n%qXhVFt(`T7*kP&GWCkeO+8jrro*M8lDEqj6+W9$ zl)qqlQ7$s6D6`DcqSWdcMM?QhiUO3c$aqq@NZ*rLBrhpm#4q<2(HCA85y3M>$kFt| zXP-M1?pEs*PASYQ>^N>s;UDav!t@VJp&p-DNZ9HXEV7CPX{j}ew@y8pcaHwwv-Q6R z{r~4b*=3|q&a>usax<&U%^kJ(cph5vS)TT`US9Drz4JQut(3PlT&@_>r)n|gQORP? z=zGPIvu_tG0gWqG=Rx0M-NSORsZCZF+y25`>|w_Hd?b5OKEC#1K0S%e=U*n}D@Xh0 zyIsrk19-*!@j8KdPa=%6|O)Vvz`7k^&Jzkc;${ypVu{-b}e{O2$H z`EOcu%l}Zqng40TqWrI^X#V%E|K?5_ zQRSj4N7adH6xA%MT~x3CbqtCc5j7DU3;yr1CF=hi`=kE99slQhw*24kUhu!pH6m)z z|2}&=a3zhv6;%dTR{DQkV+35S0j`<>SKsoqX^^F0?PJOjC>@v>I2L#ucoTRMI2D*2 z$noFs5Auh6cYTw6&3x^BoBV=*g8xHsPVjxGPH0|eRp?|`5BCZW4?9EoL7V@lzp?MT zue!INXRoKeXSH{=?|C3Pa5h*Wyehl{{H_eI3y%sn3m-^Y7HJUa67eLRO{x*z9gYru z4lMBx@xAiR^#1S$JnKE(JgBkE*yw5L?ci(SZyi`3d>XnMZXQ{hEJQ9wLP>X$-bI+m zAIbKVs1#>%l}L%Cs^NB_t)a@nCxNH_LB5XOXWmhsQ^oKkv} zZ`{Y+p9>N+`C+cbC&CryT9vSXLW6bdRbklW$K)M(`EBK49pI`4Yv%h z3+)ce5qsoZ#GAA=5=@cOQqvoy{+GHVt$Et>^kErB#`jDyV^(JWY-{%79Cyz8>{nU2 z8T&FiWlT(8n7So-aO6&M!{p55uE|Xz10(5?!X#(#LSU8uj4$3h-dodC$=%l3##PyU z%g8ox*T4D}b*r*K$yOU`^R-R-bXNo8m#?4yMJOEZ6*>~i550+4ljkQ7Om;**MP4VL zNPUsMIXx%MmRdQ@nKnDUN=E(6NapLz_L)M~rrfx^wt0Wu8awE3P$QUcML>*DC#lHc(Ae z;^kqAS1X~fbzXA!@l^CR_smJ zGc`ZWoccMfc1Co@)y&;lwX@``$2nbdSL98~>y-OG=U6tM`84xFW{32eDa(@WNyow$ zk_IKY!c{|qgRcXveMkJ?0!so@0)Br+%ipuL#Z$4GATNe4+I4>&ShuPHUvxOI@GlNX<Q zc1EUkNIRU?Gks2GcIKaJ>h_T+oRzL9>>KQR~%%?Paok-j#(K50SH>ZHX<`;xJg zlc}fEa#MGumQU-E-Y{)q>X_8VX-Cq3XH3dCoOw38Sa$C$cjl(7(>d|E6Y|#N-Oihs zHz4;{PVMYUIbzPV?3B#dv`F&Cq}<^3Ko|cz|FM88Fv(AWS-$V->v`b4;``%C*-s-Iw5f z?wjt9`1b}n1ug{#2A2o_3rpb_;gX>n;n87h=vI;xxt7u|H6dksYTI-!JwMHsl9${u zwQ+j!jGLM3v!>-FW}nPzmq})h$j-}cn764|O0oLIs^%TZ^<`hmK9Lifbw1wxlr{KuIj=;LWfWYq%9^M==BA1e@rkc{Oraey?9XXcdiL_63r(H;YmoYx8 zUUr-8l&mV56*5m{SIb?U_aX0h-sZfEc{6fr<-UUUzLn zcK>Z8dWL(OdOLaEd5?qhtO!_qAYmg&AXhd@8EKxiGWl-bEdOU;cTdFiO)sl7 zk_*(@+I2mwe{%li%5`VE#yB^*+Zh#&N4|J}X10o*v1L3{7EE-lX(SNlY=P z^i3^D8=BrDBR2C(_QRYh*_*SHGnZuLX0^|%k!{I(p4Bn)c4lhElk~#K$`Bp+%fH&c zGvMt$!wAR zPtIE~(}w|nNXY1vJ}0eH8lK!Q*xZ}yS>SErZQ!lq`Qd5rnc($#=X>{hV?A3vd%Xj_ zbv+l2twwLxAs6i~@9OR>>+-mkxa%4Lx638EvfT?^{au2482EgUd#Ul>lj|4!~NZ8;4bO>so&PVsfU&E>STSBbDitHr?Ibu&*AOr^?HNe0#A3NuhHGuYoxmV zamBbsIS=ZXdPI%Zit7d1IQ6Cq%coV+ScmikS~Hdu6W9dYwHdJ0pw97@J-q zolI+x;)v`@Iv+~&PBW4W&4@M1xDUBrxkdnf;BfD7-vrDy;C^nT7_U7`jFLv7t5Bb% z7wAqsUB{f!&br_zt#8v+eTa*29(N9KHFpUBrG~q=yRRC$@!ienD_wC$c@OWYVyti- z(|2gS)#b`vaBrJko!mD)uwMuofnmPco(4u21X2Q3{nY}gq2zF}@X(|( zNqv)cM|wtfBtK7$qz+5Qv?_Z`C6@>nd>Pxr@0rI4irRyRw|5tI&B! z*VMJ@Us_4^mKM;h+9Iun+Ep2(98|aI0e!CCKwqdoawa)fyB4}jxD(xV+zs`Y+Edp| zPb<$i4+Y}M@BB+|sZY?K>3``d&WO9Zr=-7B@MCZb$m^?p&A^&!YRm_*u)_Vfd%b&( zr=@4BdyvcG9HEVoTZuQMmeK=pu~3{J$u|&&NRyQl$^oUPHp)5IUBzhRiT7Og7WkU^ z`}ob?CcYtoQb8{8D%dGBHS|8bDSR#IS!7qFO~ezSlb(ae0V(Fx6Y2i+Zy6Iaeq~fh z>zZm$xsp6QX-`sa(#FV)2p7umwerLQK6_5zqc&0mS&_VAE4~9afx9neDfP64`d9t8 z_C@=t4OBL(RlzF8 z*+)O=eDA90tmvBQKH!Si1+9lxr10W)iIs*39%F|4RsEl4e6n8;Ta*pZ}FtKqnuu?y;4y;!Y}8u_&@mp z{6IE|Zb@CI`?JUR^HO!?Pc@`=Q}Y#GdLvbrHpx@ufznjDw(_sCSE;L3P|v7crZq>?Yl8%5_XzZNq{GiQOXX~nSymO^4eXyvt_lW}+Rczyo{&xYrOrv}IQ2YB;5v~j~VPVb`~P=6@Dm1t$UdPl9Nlu?RQ zMLnu?mc~h|<#bVIUo(f<`rLTFl3*3K@~egEYMyhkYXQhZWj#smE1r(t{@z4)N&TGD z;~we0;{I(sG%k3`0xlnGobqh)mGN5wQ9*MsE0`S)B&|zo7l}zJo?bh%SjO74v#Ev2 zbogHIM8MnMsioUK7uq(0G~=#TUz8m7{SMPwYklYJ-H zr1|nJ>8cD%9fbw_Zy{djAm)nEQU}E@-%yg(lFGmGQ)!a8OQ^+l;?D7P`Tjzt*j%bE zBg$#@t2#hKv?b~*trvK7Dj&5)PR=>ZWpZ~l%DPTDU%58Bs_1Rh0V=F^)OWbwd+Pc; zfmVTwf#UvrU!n2J6>yf<9;v0kn9Y?q;hb1k!o_96PO+hMKnW{drDhA!`a6xr&IthX`?#7qr|ADUkGl}pK4)|AY@Q2u z*Ebk%*Faq02T=dj!i&R0!Vi+?r43E%m2xO~cjRDrY_P!l!y|eHui|Oy8SKS9W|v8+ zC)JmJiXnCtIf$5wPawV%Ly0CtNp!1Y1GCwHC9*mZF7k$`kw?ek{LF7$u&P8!6+|ZR#*}pVnQQpwHGb)Fo;I z?U=K(^O*0BgVhcK`(u^iih zJVhGVAK4DW)seASH>?Eq4Yy#+$q19htfp_%lPEt`m2DvOmdZ(#@J(DUZWk@WVz4GF z2#tkGqA1#gt-@boWoeQ8NbRT2)LQ7eCizGT(7>6Y(gjg81EAfNT~wJu4WMGF7=y!%Vr8y z#5~SN52OF4pHT(mKANPSlBcMqOn1JFm?4)^ZaB*tJ6#SnADpeMJVM5W7yMM2SI$WR z5ffKQU*r{vtoG2&F2(iCbqTPKazKMG^p*)lC)G}x6!|0kZ}50vjlZ66i?_(5c^-JW zxktE?TvOd`oF$cCLRqc`vxJE-ar7zT1~CiUMWmpeVFv1DeQ4=qonoH^eTACA_u%*N zKgclRZ|XUi-)-bm@;K9#?7329S{CQ!6*jaogHWNwlj*_N! zR7YwL0TY?!Vw{ciOHPZ^rWaRVtGQ~5+D9F$JXJ=?bLBi~xfCyENik|g?X7c?>x!$E zb3bqwzJdIN36r=(Tm!ZiQ^+bT%yghvQwTYQYR}lXUEF>8Ke9fBQ7lo9*hC(ubn+1S zp8m>q;VwvJlwNvoS4*|8G#scGMZ|?9ZarIqe<}OLe|UsTSF8 z`D|;t3H6eEOVq;G;K%S}ychNhZ;76R2f-B7&^p_E-8|o-Ta&D~O|Uh!ZLn{E+oPB9 zDTJLkO@1cs5z}Z3+mOp)C$ew3U3@;T^QtgV_$4HBPq~GBHKDEekCZPZNrLoPd80m7 z7pr%G5Ac_MS|_w>+7-Q-UPjxZM&z4vjJ!yR$S>sI@=j^K#7pm_b&@ES6aSHaDN~dO z>LN9$6oOCdNKd7O(h@PuePquu@0kdlP0wQ{GBv0lWRTcEE~d)R^_Z7TPig>B8z55# zz8YJHHzVEDFlsjyPZgt%P>?KZR_p)t7PMRXrMrMc z-L2KvnrJPxy6QmrjBtZFOT5ANV)M{ys0|&A?Zdib=~yR(h6lh0;rjMNwoLPTQzetz zlx=QoE;9GGK-T-vRb(IrV;AsUSQ2_1Ur072Us2;3ft}8^;p+0eMP3Z?ec0Y?4bIC? z6=^VL2W3e9poZ1qYEumdPGCs6C%;q>Eus(AqqNC@Q#F((i|3_W@n3)<+oT>6EzOfV zD;MRX(%FnM3{&o9uc#N z$K)5XJ;CBSwgF2=vk*VpfjC9Ypng+@AS0ZhKC^lB7v`IAR?HLINKxW($s~+o3b-}k zTc_|*d^VTQTxSt(hJXs`LRXMwOG&+yRJDuNQERNe)B>8OHE_-Zif{~2Z*5%%oo?-< z{@vMAm$XA5e=m|Z$`_TAN`~^Mv_iCS?dj2EaWLZ!6m@(+)?zO(2EiQ=oCS|{Bsl(X zBto&4`KEAUnZ)NNXW|;uQ1d-oJXGKqhxWi95mscI;}iM}YlRx<2O^#7M&~ibxQ6^B zKAWw;3}7YB&UY1}g^HqCGURQ_Q?-`*NP7>IN1WV5+9;#SOKqHXRI97}r{L0gQ5D*Y z)#RXDLoO!`6JN+FYO1nPsROXXr!)j^?H=(p*NNUt6;iY4?<~ULtC7 z-biH<0jw0d9;=D7cpZE)UVwE$*CKNqHyr~J8GB0hrRtKSh^@pwWG6C2RHmYsDICN7 zfR!%N{~c9*$xVp788#7&7eOeIVoEU@(}G|C|%`|#TYi7rF?VzQ&N zeHIi%qOixrOll1Mo7qYKM^|QAvhVqJd@sQH>+(ItrXXvuszocOQyMH!7mtZ2q%^rT z;Pp?`M)GrMhFD){!5}L;aw2aswE*M6xmY7g>s!ga3)`#US)A^g6Z*n}t0)FbvL@MzM2QmEb#yP<7Ns1QU^|=%mw~PTjP7f1VNp&0m{*%ym_C{7n!j3~*{8u> z93QbAWSHzuG{VaxL+!k^uI(879eIegAu!?=v7hKdB{P5XvHWyy1J{C&7S>C+^hEBY z%u+w8KjizOBzmNE@@T-+qvThTB5dc6^F`cUt}EA(Z@@3*KZwPob;?)0jI+45QF$gc z72|~m0>v-oiZcRznXXM8qr20U=^XkXU6Yzh_8>YChse?7L-Gh2hrLCwVaeEG>?zg) zDGS$x`oPVQVd!VPJ9&VX$qz&to(1Bzy2I-@j2yZb`z&~3MBr%RUOMhkRvHST0;@`qi?mBmkzbw9!6Qu8QFEvBEqknPE0sd`! zXM%QB*)7eLB2q^wPx49UrJ2G3KFp4y-jer07A_(Qq7I&bwnJv25%dpa0McqBVXC8|GMM-)fr%#X6=SeXQ8_Q$-24R?ZM*6B;)rRXEwSScw;&=W!cZS=}o#11+=iCT(Boj>| z^xsT1rZh8)X;06kRca}f1V(8Z7`HrP1YR18MYmuNh%_P|>xsNV@(>PLgzg9LjG>y+ z5>=nLjWej^NQHaBJsdvd3FgP^Qt3=5`WN+(@{oU$xnwEIPoH3-sXasktR-3#8HJX? z4YC~hlWxo=v463}>1T8W#?Gb)Ua1d=RRQ3lLvQ4~?<}Sjs$-Ot+5dL0QuK(*HIlljZBkSzL)a_~7F$Xim3XzPnytK+>k7NLP3%(k2Iu0^xt)Ax{u94Y z$PqsS=K4%cSJ$X_l_}Ce;TB)O?d6{FWIW?oT(MW2vE3 zcWM?@g&a+E#Y^#WZk)vX;YabS_%-|@F@n59l_6ogH@e)h8F~b%P!2o= zd5g|fw@8aE_`B?KI*Y=of9P}6R|*vd*Mj@NPZSyor}=;RF=C7~Rz_sE%u0u)TH?RL zUcL=inmxqT;+F|$#6N{E{4(wfdy@%+m4ATh1o&QO`WSPPsY&f42a^o(H_?^&Kn@`f zl1quN#3OPgMUh$fExaU{fi1)xd=Zw3EtW&JyoB4Nz}vQ94p}zxV+;e`WCxSPGCARpXrul2{M(kGN5BeYOXBTb^xC>2sqBLw)$TuCrTgFp_ME?fibuDpox zSNS9sr|Zx|={!L#d|E%OVh;GF95;e)&^dHP} zwj%R}8Ou27Tl9NoI$&Zyg`2`+-p9;iZm|f<0FRKnsPy)iK;U3%m5~XS;DgHIJPWc zA+rFNugm?#o#zH{6}XO^jeW|^W%twF$*W{6Nl**u_tbS#A+oVOSaGZ|b`5Weuf!gJ zHPi$=ehIDikgA^zPFG0?dEYpg8N_Qd-5G9F|lt{PY z%FE@nc-2t;Qz6Z&394IuC0~&y3UftD>LuliBZR&@z)ofc)r~wuL39Ob8qpGah{4Ek z2M(=+QUGs12`#nlw5@>$A}mtLaljFW>UaeG$MFz}0o$1z>2Tsfl65JCdG+Igq?gmOVY9AQgRJdm#Ri@ zHs$xCDoS&8gVJ||lfXNaXBOANzdybtN1jsjk_iirWZ#!(xoOVli~ zH$DN?(Ycs}mBbrjcZrtN1o|*JfrueXQySBT%jHK%ZImDC-^zEjmsUrO*JRbH7E=dF zEyWz^m$Xyt$vB_I~IWK)(PKC^d#F*KR{NfLER<>;J@*2cquZ5xyC00 zHVM<4nPc27ahP;h+A91IyuxSU9rv5rNSz=H2o?WK><5~-DZsJ^LS4bf9b!K-IMs-J z1Mp@lbB|-WjocporI;?!atk?6Tq4>R&3G7(^K4F1ii%i16bIz8}9v{6{t;HNbCw)0xyi zK*^M0{-%%7Tba+?9l4m+RJ)*MYYA#=rL0yJJm040D|e+Ma(AG^bGfV3UScyrV@t6a z=xJm=!1u-QQTtUpW$$O7W@l`zY_M&O^_+FG<+16l>7!+zeWX3c($4(ReAc|qYPa`* zJ3E#+CPE8spX}42FZLgni)PVs)4m=4ejHne!bm-28Nq@(9#5ZP66n@+S7tUhm#@bi;b`s) zKY?$^{$#W0R)E#l!kZGysj76C>C4sUXYm-bjJ^VRr$EuvW_kfQ-*6_M-p?H2o{QDx zs?sNErcB9gQ@8 z-Kkg93F0IEgcRv^Y+vdlz7@X!Vl@k7`3J-dd?hh}rG!&#JuqjRf$mCXc5|oXO8PD5 zEd9RTM4hTt&_$=Aj{(}SfhMUb@;K4pTy$mXI&}~?q1};cU?hh^m290YoTakWZS8Np zX0ux70T1lA`KM`_shU|b*S5Sd7nu&3hnkw0D_CQ#Q*CAJEJQ&X=A@?||B9t8|q|OU1;$rJZsgxw>3Q z{zqx9ERseGd3-6pA;6{c0LA7ACUK73T=mJ1#aPbAw4!H`wMm0~0(|{%oIw9Ut|oVr z8vtj#!IY-%16F#K%aa1!S0+fkr`j=j>^**-?9v`NV?d4ask4jTQ_FGEx~wi&j*Hr>)Aak;6y=?~Lf@R(_u zmbfo5oH#16UZQ3?Y3XaZV)<@~wYY74p%(Thwh~ssCfFxHCYXa8*)~`f+GaR5V+--i zL=*BVb(kEC2M~{gf;!mO+Be%zKmn)#HbG~gNpKsuJZy#f*!Mw_{UONe*TD?LBcmJ- z9aoWASW8l&Nx(n+)Og?_?gcD;AxY9r=yWol{0+vu3ss5QLPe++G(}Y-=K?3-ILK)k z_%bXLErvIyU-J8aPyaV?jhX@1eX-O;%oBb}bELgeEqS|gS^cejQdh{Uf#%+*(#i~J z6JUs%{90Y9_LL#es8`E)= z1H|4{W*YxkMCH2bN4>6o)L92~G1X9Os@0WF&V|M_*L%G{EhViGShh33H3B~f*kpaj zOyHVl+xI{r+jkpct7E%k`)LnY9++mC&ssKHW}E&qH#C`_{L7gy@It`rTRACrfmo7~QnJhM&9m2c;xo8O4j(N%~!+#Prh`V$r4&|!~ujC-8 z6}{4U{iOB*Fri+uMb6W2xNEzn>xJrk*()~YuF~m5b#$R)C;SP{vG0Z&Lu+7%{i1!S z{ZGga6Yy|*uJwTRm+gw}gyomjZiUQ`Og9ooB#ca0ny@xuqv^2akhO)ahrJ)rY5k#6 z){&Mu)~5DB_D%qu8raU-_d*S!f8ps!zGDSa3YiF>hZRV)m9$NOMu534W!q_eVr^}0 zVjBwWcSJcb=pZz}{?;CAyJ1~vjj}ATbg=xk=Q(C#Rfz9Yf1)?e<8N>l{lk%jltcf) zb`$rgJ4|h6E!~=mCn8jL`futcwG*ILAN&`#0;_;s#8;BVsfWyRt_kods&V&(?t+6q zz<1+La+^W5NK?k^``iV_Dc1y$8xOkf7>C^VoJ-Vc@<&BdO3F8-SbjaosIQr9`V?6} zzGh2uAGkVn1M)6oaBX;)-3r|4S;PZ!74sO3WiDO@??C~s!F3P@$S1UAng_(!8|ADz zSm`Bsp^zQQ%m^_T8ZTgzjF=FAX6KsGxtcmZ@7ngYLoHrm_Ti|iMm`p`AUZ{&xg zH0**;I&Q<~A?=5?l!pQ-XOgXdozND`Q=2EwVJSM%ymg=YlzV zV!mYoMI-RpT)S*P233N7fVjGEL#^Gc8?Cr?j`fA*GsxmUZ1HxpZGg>dXQ62j3K?(# zTnL@FYnBdXzd6x#-u%|~0ceb|SSR8;nGYO*=Qt0d^$wyrzBu}0b%;)MG~Jb2Mez6v z+QgIqii)H*0!Pye{I&L=ir52djrSq0QY-1Y)M2KMfD4QG5$p=K2&m=)9u~K%D_!@E zZ^j5vU2W>2z2%K(&JF5+>T|7xT2(glioWIQk$OUu#wn@~dzoXH zeRLD@D82_5KqL}mWvm}sh}WSebCtw}%1xb9J1N7}vg%lMl$0%gkYVMse$tiZTIHJK zysB|h3VW0|ip0U~9JHgoBOa~>kAXipdO0@2wV^eRCulWf36g~+;@z>;NL?u2+R@ZD z;YZ>Rb2am@#1-*B67D88HVrrRHC;7VvwXKLxBs%=v=6j5w;ixvwInB+6Hc3P>kiuq zTSe=AtJ!?iGSgDh%$hlKKeKA?XGym{wj=gGZG^RxZHqn4ULR@;S90XSx9n*aOX94A zzv2&>Le`6b_ijZF0q6P%ahtT@{gAEjPiPlh4_=FGz$mOQdLPr!LUb8k7sP{)dP8+1 zH0&`p8o7&5z^!kKyu(uPv1DDUCB2I)&aGw(=yOa(wk)WYy%#&l+q5sv6V8A1O)kib z`E$L$+^zL!t*35P%~ECl6;NCRbDFQfEoSR+@oZ1J7QnVIL_gr{FQ<75q85`=v4vTud%keKf8kzz{tT(N*p)!D%6gvJzXJEJSw{-`(zmrXaQ&9$6jwwhMTm&t3XvjFUFM1xGg7442W|u^QXi3_=x&@Nb`ZPKnQ&96ggwf-#8S;-PrQ+k952P! zi2o43#T2xhv|n*t!{V?{nA0%|a#;48`p2(}ITAY{{$)a~_(O5`;{tKIkkBOYgyjPy zJ4{Fh@~5K@#Mp34k*Ss0WR11Af?h(CY#*!_tYd6D?1SM_a1D4M+#Grc^@qlT%H~z; zZ(B1MMSb`nayC_;YCv8fYT)a!4>(3x>CRjy(6O>x59#Z*bFQui>t1J+aNlv|xk@>Q ztLs38y`LlsgM@jajsMC$;F39o>%uOe9s<8vCRzZm`ZeAi4Z`dn9JYO^-PmcO~Ia+>f}@absg|$2^YN8+$uppSg-9#eBtd z)4a;s&vqH=0cC=2h0=~@STr8N`k*zS(&lUNhp_G0QCulz4^@MFhhN0Xp@%@F^axoFt%=TKrgB4=@ziCyIGx1I z<8R1gwM&}mo<{x7x^ z*$MA~B2YiLA+j3(K&-;Q5`T~th~Ibv;PFg%^l{7vJpHuorUfGA?|2wmDoRHug0E;8=IJ6US%Q7T}%f+m3^J9 zv3;uTzP&b-32Lgh@eC~9@!WpJVor3$Pl+8Hy(}s(YHdu26_7cTL9|I=EvNLof=;~VPB$b8gAKVd1yImwF7NZ+q5fwWBgImS@S*X z3}}I)qvHl(z+>%G;gXJ_NCL>33O$RPBY8mm@2+!@XQ&Z0B#*^C*;PW{t@c*OX_vK9 z(suEqG*77@7UOqwo!G@(9*;6VXpRiy3}D9T%nkY_F_k#OL^Hpbk<50^!D(E&utly4 z@@|nlL^+~9b53+mbZs*R`|5b_``QI3Cn4cX?`x+?J|IlwJoG=HQdgcDNN)uS#!mc) zokQQF3(%XyS#lmx74snP&`ivXyaLg27oH0Rfx7)|%eA7mjkXwzVA*f&Wq;)ukF6lG zL4~LkS%kN7WZ3g9%gx6vEzD_&{`jbvPqA9u??gReQDVe=#PX+kg+;N{wL;b>Hk);s zZ45jB?T7Cp=MvAbf8e3k8|Ku+rU@tFZbg5NMxsZ@_DX09xKMXfkHiIu{mkWUW$okb zgRB)2zrSH! za5MlK`+&U(G#fq*&2hBC?vOUdDhyI$)!XjIzEtCo>!Z=%ljH8`oBG>Psvk%dE$K-*rk!{>lR1}{tWjI<$CKl_W)J!Q6l*6!UpMzu!bAS{mHH1^EfND zhbm8AAno{8;QZG?l99{k7_2wC5;=h8IPN*7BGmvxGQ({hI+SboLUHgGz%p(TQ$dwA zlPXK%Xmj{D)Cb}q!*aqjFL83h=J-1CBS0^Y*AlYiTf&yQmLEVZ%huD@@)pUO3IC1z z$krgAHO54T9WG;gZ|P(@khnU5jV&M3Bj!R}Y+TDYS9~xLF}1VwwO0i-whs0jTbj8} zqAzY682OZ#nQ;YiJ!2g)yW-l%LkU$A4qiCv&G zz>1Vc`d~Bg%0vUui*pOViBHA8kOAQ6 zEkkxW>`*C-VESx{wKld6wzRP2*q7N4TYp;r1g`1@OFgS<#TtZ3oP+O>+_f4~ol*^Tid9EgpS4hL3x0+Gd?>uM91MiyT%*8#vl-w=_)L zn#d-!OH57Z7iW(d6>~B6c6?sKiNve%XX0zd_lxfwKf`p=wgIjSe}{WIHX&<~k!VT$ z9!`LMqywP#F_FC|aY{2M>{}Ly^RD#n@qsQfqow<>>zOgea|-OVsihADeHckfZTY(r z3%vU-VhPEjWGjuuXF@%(hqy&3#{K3)!YkptbX=_r{Qi;7B=>aViO(50>TmD)(`|BA zFeZ41d&hc<`F8ow`wx5Xx@xE$q)ozHp}trk1?1=QM3H4rvvzhMt20}vQUr;cu=Su* z;3QTbb7SrCxA;rEi0Djg#&w(`nq!v{KU@q{cb6ei$Q&%4$fHWI1d~YHC@YqSOhTfd zeYRef73No#Bb{f_Y$g^0%qFO(Y(cUE%9n%6H5mu3&D{7j?vh5N}wU)8)+e*6GsW1Y(#(N zo64!`b!Rp2y$}(|@a^}fcn^ZT5t$yR=Z&v|ube?>iqb{-srA$Ds~eOd@=(x6G)Ot2 z=E<#O8SDorCwqh%{2F16&{1xnj#vNDUmDpy*%#v*5adEpfzIB&t}ZUC5#_b`dV|q# z<6U7SIs0qz@*b(0SWEgtvI6&fI!n_dK^-oNoB`@M*NIY~GPfV=f>$R>;7_rYSP|9= z+k4Qua&|kw79Gc>&V?SW+VvR9hFb}Xz zf-b@H9gQ8s9V1`}QsDwn7uZd-K;z*?P#yRp=;3S%9J8KCJA2qV!7kaJT7O$wng2B- zi6;`%5|R_Lnh&p1<$2RjCyYyYY9)F{28 zHc@^6cxozeHyR12<#F0bSCmo4H`HI?-Ra*RY8OoM4R^2Cf9W+`!@axx|M;^!&0X{L z*;+^CiTt13O%BP6#lP9R)ETll(HuXCbJ%>mH|Y5qi@iqAV*z3p`5fPip1`89AD~0C z1HhpoGzG1QZUNQOb&mPSeY7~b0^NakrCF8(JxDF7{@8QJ9cY@}102->X2V_yUV-Fb zlhEdle7KY28L|nT1yJl0J{B#7j7K-%XUJvbUL1E^fSTEgSt)CtrLB3txxoC;vc2Ra>hoN;j40P|eJSWHiP4%%r-YiI z6Jsskl|LdUYP(!EqrA785AwzOlY@6Ab*R1;<@JvX??U9trF7f5>0(uPr^+x<}vJ1)K9g($; z9>^Qe5%vaqi>*N+ghNjfGGKFWm{!zACYD@Ftf<>NQY_ z!Nyp3cQat41_MTo7_m{KyJ0ja4blim2#R>Uc6VPz#l#M*t6r~NSFi2w{Mg^{VrToF z^PK1Tyx-;~%L5QKSn+63VXn1$1k(_1^%dAjJBjTD*lwG5kiC!=%UkAG z7R4{5f&HWb)b|x;$IT@3Uo5aNLoYgL=>$oE%|+CqYcOZ<6C^zuPWpmZqU5$utlwE4 zu^P0I+Vok|t^1*o&@T{@`KZM;$WO?1NREvf%+lw;KOxn~Ns!nz!&32ZY(J_EOxGR} zNTh1AiTaW8nYo@*!1v<#F-z#501?zkKS#d^SSd8Qlo&k&io1L{TPlvSH(rL$&7qDnbFC9 z$z9F9L5Bk}fNo}gZ{oM@q z9y(}K1oMRNgFm#r3U!A>Tl>N_h*w}1TWIsbYBj_FbwF&z+G0lafOzBK!2R8BVr$-w_!4g zYMLE$gzdv#49?mLjwO2;LmCFp zKs()z)=R4)*AP4LUvOmfJ=8ADY+OG{K$TIwC=s-NMlWDU5zJzaiTj!x!Me`0Va9OC zJOfY2GNb+g3dd4 z5l0aSyHvYa_$2(R?G*G1EZA-e^$PUIVXz<8mm$lnXAo;Ze%c%Fg+6VofIjuW-de_5$*l$~Zh=1OpI}nVub_Z9vV z>4)tHNoEy(GuDLU+FZ2wWT6J17z(}xBrcw#pJ5TW*F+&8c;bi&loeDyWe(vjK}EKu zN3v_VFSrzzj-JjiXS=W-F<&xTXgVsCq9mOoHj{!$aFT?GA%xx&wNKehW0u^#1!+K6mL?nh-Jf47rDcR_i!-iRTL0S_hQ;pW?c$sahy_rn(0 zz^!X6uUYMeX+Xw#!UAO;Wffw%1qxqJ_M)OsWC(uBUQ-eY8L-*V6K{If_2={2c+q*zOc@RWvJVk>N5Vsj9Uv*Tk=<#7Od@j`?IuM--cNhN zsSzOf{pW94uSIoJC8gVyS5q7|2sYNrl7)LN%@kgFzus&rzwUZK!Wp5nx?j z5K3^H@k+u2z?gLt9^ih0-1QrLJbsGE1lih$q)9T1T1+dT`!kx@liZ8EMch$N5r@mk z=ZM)ZObs2JI<&ov+pL~weUgs4x|yOu!Goo zLNY8}Y$~89Y&O_fg6Wsk>L06dh~B0hIs$t0Y`ed}z5P6zk4{HygQeND+kAu7!Chgm zpls`4Yc2F6JQCqxy8+M{yI|iCZYU;Z5`T@!6Ap+UiQn-bvQE=|Xm4mAsE#xZ<1H{q zu*k9ah1e@-a|8+zi6}xJCrSz9gdYSc?k?eX@)@d0^Y z3%ERIRw$sM$5?t+6~l#QK?$O!P~AvfU>;ThX7w;|w!z`M>=xNg!vC=yv6G?@*fsds znAK=kY$ND%!tj+KiR6U42-3i-aG#02r1z9XoKWK~Xu-!}ac97;VFk^))B{&I1Fvyc~nz%E7%B*003b7PBs~x$G2nCi@rbHRBOIoZil8 zWn5+42Sx-VeJ|rCa3W|p?Yz@GfP%9lm_O+TGL3MP^auG7DTz2q#1Z?+lT;xsmD)ni zBdjCTk(w#_epxKav*4x0mXVQ8BWSLC~+!j@deh2c= z9;gzKp!7r^#%{oOg4LQ2<_ZqHkn`F(c??@&U3d z`50g}E(1dh2Ap^QkQ&KC;-C0-d@S|}+5;0y*aN7O24W21Fs>CvNB+d@zZ&5vUBrX)rU@+U>;oQAVf;;xRN4{vT{N)C$=RI94p78$U^C#0{dU zm~zx1^jRzpeGWH_!C?ofX6$f4FOLa+3I7p)1ooa({xRNd{**M{9?vacu<3ogy&N#& zr*2`cWt^iIu&23t?os9z+8-c;Gfe$P7jTAn_c;S>YgRM+Eb|#{4f!Uegs~O4d%_sE zDF2d@Nt;OzK~~})LOzK`yhpSp-Xr{m+zE97-IfyT50E6wtyXn5A+|OMFN8IG1L6V( zj=hePfZAV7lhSo`A!9u&lHJPw%8BQ^F4)`?E`A>dG|XF9Xs?6vFx zmI|!@7j7@VgujuG<)$$%Q6JG>Gcjy2>kz1bI{;}cWQ8*pfID9(`5Eylt&g#T;!jSa zX=$HnQnH@7fY1&S%2VX^ayhwxa1x!4;$fRXS3^N+A}NT)#7cA_(gTe{Z9$Ul zVh~CU9-l-SCdC7eydV1lIfUE{`m{SqiwUKq5Mnv59pt2XXkV$b0c~i+qbc|4(JT|6 zDxDVF3Xx)adA@YE*hU6*h;rJ`JHcq+zZILbyjL#^(~Ei6z8uATjuibOpD_4htQI zxzX?Co4Sx0^G>-oP>AhH=Zm>ARVqBA66im-vV_^WSq*I1+XvdkVODu-r+m zhINtgC*uoahBivuPgzH9X1D><$248Te84VaexaTx%Sl%VJManQ3`#hKN#6{purT6r z3>Po4{W8D_wi@sRw3 z@{=s1v8W4a9DXRbhuOuZG1KTpwBvMt0a5-@CKbv>znl$9ol}%+hbz_Tg)mygayTNc zm-1b;atie!Ez|zBf*|E{+E{^tOaYvi%)2WH7Cz^$*PcE4}cA51M56vIsG$mLG9!`;qMUa1?;wnf1c0f{}eWf zUP@rn1G4{QDshakP81^S5f%s^iumG%qF(|6SHyb4a%8qM4fF@}L!2$VaIP~4!=1~! z&Arb&N&N{@TWbN~Xr#@ho(H?rBX$S_MQSIQ5ynZmR0`uZ=;vin4v|*@!-AHu3cru| z8|6H$lr~9QKs^m?CKD`c_A2TeK%u{*my&l=2LzA#1i=AumguyoLikY>!ox6%Sy7@( z(r%erJX^lleYM9s)n%Vt%}=Ls$z#{wywe@J6<7TC$eo#?@+zfFjuQI|%mkwnp}bUb zN9Zg%E8+5#yd{Do!jrs%!0+*da+EZetfb#&<2WW}0hvTNNtgs?jXdI4${uPGDIK%f zuG;qh+}f1&J82kw$4mA%QiMfM!09g?y+ErFLH<|xZxLQONo)9h(ObL7h z_W=PP%zn)d2A+Z0ygB^uq67(5vQBIg&yvU`I>~$4ae1l3euo)*qV%KemUNA5h1^2! zYyVodS)vzld7FXbW)6Fb^@ej=lqJa*ofMLUn?yd~uNqj5j5)MDv}=HIE(UwdRbZs5 zWWQ%^W3*6n$OGgVx{&i5XAQVx(|X#22NPr6TcKk-1PTcp_8?#`tc0EB+C|L7_mnPdrNsm8DDX z%e>`w^8F5YhjWgD3O@zc0qGFzxZ5Gek*;7UqZQAc{%}YICO97y#OLw-<#UmKxy0IJcP2w2QP*MlI)e&Nt>Y z#{c*Fo9sdEO=ZB*MoO29JXk0ANa9hkzIv_ll;mq)Q1aQ$}{z>*TMlk(6 zV}@l-yH2sf{btt#=ONZ2zQYfK$-0AG1(Jhu#-Oo1cneY=-HdsZQz&qhxZ1CDK-fQ) zdW%~ZLjCw4iFr+Gj9{MSyTYW;> zryB7L@cW?2R?l{;_2#*scGWm(9U;mr#V3c&ZedE5(2^tI-QXYMZxMIPyQJs%VVr5M zBQKOyNmr8};y(idG7D>qd4{S%b|7{jYLTnZ|KM#1FUV^cMVzAomLyqj27Ghw4qxTV zWq-)#11F)abfe^nG)zX5rO1A_UoYS3s8Fb#m%46nuW>)@{;zwwhn4#Ww^i;A?tgov zdvv;Uop&gMx?v!H^_=4 z!;KrK@t#$td%Z{4K9`T<`eH z@v$RYzS91H9BKbn`dIvr^oG-nTc?Lc_1Yck3Z6^V22URi)7RviH?THpyV1?i9c2|ao^>$GB`z=~JZxh; zEXX5_8j_-8=w|}wdgXg*Lfo{gLM=6g-ur!wE|acn1Cjz4s=m1Fbsn=9OB@{=T?L9J zxlW1~?~~hrU3Q)LtgwZ5hqaH{$$-<{Y2PUq2uj>y!V^jh{Sr43xJnV?QTtLSH>ZnE z@xUj?QM>}r=L^?nmmSU9RGr-O%D^`E=B%V*_`(?`Wx*U#$NUX@;WHN^w1VtM?gg1ZDNa+H;>zHSR# z#V&m1MMb<~O!=?#3Fk;>sM`bxxI_<^){Te>b`%jb?1ldY#vth>8W8+QdI| zaf$Qwv0;8ue;SfQZw43w-J@R{9vb%Q9*1UXC7wB6pLOHm6~0;C(;l}JflgOlPI;8M zNTz?*sAq?0eJS!(SU16|_3YJNU595N4|j)cqDt2zwCrQg^(j*yRR8dH@;apn(oTmfqnD<=Ew8P1&&r5+ZoFD> zxum4zOqL+(PWVimdyFail>T`%HQgd9+t?cSBBnX4FkqjyDSSMlG2m;U%5O&X+|yQV zQ1A1EsE)a9Q66<0cC}PCDAqVu%RkHUl2Oq^$z9nlsg-E6ut0D{{84^b-XrgDDpa~S zdpM6e2e>S9{ZEBg|Esy-SEwmhyQ$x5j`_awtMohVcQ9~W5J^kdZqQx~Iu(=`_$4qf zFgM^_0L_1mpT-a1%$jn|Cf^*NA7I7)4tN#N;lI@PtftEMl5rV z@}FfbN&Av=F6m>mYd9~Q7}*+0)o%~4@!R3s?!))`sR2q#@SU|)=Xkn#`nv5@?pH1Y z-pXyt<*t^_@8!*sQ!aE0W1#c=Jn6@OlXE4iZ3(w?_w^4zklM9@cYSyIBzU=aN<4&~mg-$zcRijcnU0r~POb#EB`%)Ib*>N( zwYtg+=T+^)^egl)@}JV02mT0n8Ys|?hcH4Br zOxT;y9q$lV6l09bj;9$*!4xH7gNJbh*I z(G*Df(bU1XifDFJYUI;!W8`r7&7fOhE};q9k6J;%fZs*`Y3*XIRCC({r^2f)t9N@B zd0bRkdT#U{)Ifb9KEZwsT7%zSe@<|!Zb9gd&`-K2VfP{qMe_8|4R7_3NV*;#`7PpT z#L0--a8{UeXlwAV5O-Z?xF&osqCMhl_@3~d$Oio>{Vn}t!~Q6=!N#D97RUXa7?vE6 zYD{lV`<^_JC^v44*Cf7AY)bS`Oisv1Af?2oFHhT%azC*w4r4G2PYOK{IwwRQa!)s* zFN=O*)FyD!F6AGnxLKFGWKFBE^g!19y478C>ZsL%rK#on>d!1aTeqezz*JY1m2Z}J zImbQaRm#gm*SKLL+Bh6@FJh;@B=SXAYDjsAoh~o@Q5Zt&=KIv&DWE8@*nfd$#IM!& zr{5DZN%+x zvTj0W3Y(5h(KmwkI?J#jnis>2$tvnw}gtM z;*^QhjMVVdsI;n#$gJR;fAby`colGRO*xpH;HUC z^ls|lHjOse)*vce%I}nw6)N-A=kv36rfZVm364gTk!AFZ6GnZHm<+23-=TkPIHg~p zdlZ7vEe!hLyTR{`&dJalQ4{(tqEmk|;zeYdgO6pG8mv$-RM3yV4vSeAK*#~oa^C}Cp zg)fS?6)!BbESSijlXD>NRiU8ZY5^@5o$)eNl(Z+2V%!(|J+3oBniQK7l15K`lS)sY z%(+|iM}@3*ans6{+09nV3VQ7Z%KB$@ylubJy|vGN$alrwUR2kE_Mt|Hy7~22mOig6 zF1u5LEU?V1NHNP=mO7BMA>op-B&OYPGU`O^tmt)-kHhAMvvf=Rb_FIH9vBTV$mqye zykWp_Ki)p|LykTxBVC&@EA#hEQ|fdIE*YJuNT^OIiYLTH#S}yzikXZpi_3`*NTQ@n zr|rx5l5Lh#ncI~cm%BIbMZQgePf?UDbuMWm)DxFfRXLh+^JZngDbQtjrkzSPCPo_F;yjJmIC+$rJ|${-_^04!`oefs zVtD)+V^Um0-0sw#9Psq>F^66x1^3CKM$v;yfQ*+ZZvpRB~n<&e?XFlpZ-6s&XXW-W!RW13dnQ)>9zEfZRnSloLtg@h6f;Q%)wiq<#nM{6}VR4m-~#=TPqF{PM!VqW31p@}HH& zvfE|!lKlm|?8O4YhypfNWfdnU&|=Uh%<*7=N=nb7R6{JBNrrT&#K>bADFc3JjL4)hIMt;CJ~7<<0@ z$y&SL1J;aE*{s``SuYnJ8Jt*yIOxvY4!z$&*e+cSMU!!36pYi@=^jwvTF zKcQrCNq*tF{GP&i(~Yv}C1DK~OMX^6x*xh1rM_c^=s z@dYEL3o6Cs>q-WSRV8KRt~Ixt-ZY)9v#j1&y1Ll4IHic1KbYT8L@~ij97`}oOA1#O z&nm7eE-<|w|bK>6#(>Q;`r*EQrZ^!-C(&m^(Zr#1w*)`LZ4@(LQmlo|d@yjk( zqpO>$p%tGhVk)PX{M}sMTG9B&lAdz6Qoqs%WdWr)lYPmmvYlm1OYMrk7rU4uNiH`nE6()(>e$+$YD-(jXu4CktNMHSr}Elz|H}F$*XuItikBqSJg7gr z>_p4?+7mVWs<+i0HODIsmXBA}RCJVim1dUomYgj;Sf(p8EAcCyDmqd4)D%=MtJ+#~ zXsM}z(tNA!Mt5sp-5_k_{@A0{&f})>ujB5k97aA5y&T@g0+_q`34_`DnGiPS7~rQqvaKdAv8L|NhYYm7!zbR$H!aSS=WvHiz1i8#`KFw8wVjw_a>DcK+G`+Oxsib6nnOUVx^};2BdQEd%+f+Ay`JsXThQ6*mHTGeZZfxVIaD+Lm8HyO# z-S@b6QCC8{-!gXV{bkMV-Cez1n>y?|Nj>wsvfFA}9<_Qd+tD(wzNap=PP{at=6rQR z#ryKhRo+Vr>r0!kts6VG^=#=68Z->2tyGWMjnP(4kLZR)L!~RO_RsF!+TGVB>TK$C z=sebSs;j@NxF@N%s@t)H)n46!Z&S1^Y`WPvSofw@SF5VCX>e_}Y>jI>(>c_W+LyCp z+0f<@$jaE2cSe2<2M!LcnBAYW{7i3lPe^xpH?G^IdujLIJ(WGHdggbFyKo&oZTZU@ zT3wr}>u=SQ8dOcXmIrNDI`8+a?(-P9I(Tt-!SKo9AHz|DZ&$GTb}o(kdT(7ocXLB@*80m1T(y^nj*;5SZn`*;25 jy4-cP>vgxHdwY*h&)42V%bWY$`gZmm=nJ1^4}Sg!XuYMS literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1/gg_sfc.tmpl b/ifs_samples/grib1/gg_sfc.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..4f8371064cbadc574de319a6c9e6418c55e59124 GIT binary patch literal 26860 zcmbrkg;yJ0)Hh1q^{KnNySux$&{EvB#T}9mf_pp=h}*bDplE?oye`z;-P?QK_q+G| z2X1E(%B-%L({uLz*=FaF-COLuUw5&yTbAgW_%Bfd{?@DesQz}~`~UnI{(rvx-_I^x zx_0lfXwjm@|9j`Y-Q@27{@FQqvH$%)KPTD$?h*b5+*tH~{{1k!(RS19X4%cRTVl5k zT)XV{+8wfUuyeL^xAV7){NF3lF2ybfT=M^W5qAIIRblu4@B06qL;T-o%m4RXDRznf z@7w*sN}R!p4uO^J`rkD!0jr$_Rz2Eon4Q<<-idv-w59eP?0(q&na2qCTKB=O-(221 z|8d^!+~0Ym^H%3@=Z`LPoNqd7T^wEaxJ7vp-cNl5zV^Pf?`*G5cdl!o^H-<0P9L2o zI?s0g&v~?SH|J~@vCBV~QO-|X|8pPYIm7FVPqyEG-rs%d{nGri0xbSr{O))Kxx;SD zT}3W^osBMsU3kuQ&YPTfIv;g*b>8B1-F1oE2G{9MKb^ZfJ#(4h^3bKteT!$CSE$bf zuM-|4J*W8F1wIV)3{3Z5;%D<+=JCzF-eb9Yl3SU_I*&{4>s<#p4{+*zHqvQ<)7Z27 z9ltm|aDMM}%F*W7$8qtQ?4vcOpE^OVGIy=l65kU(X}FU|vbFRlr53}cF*Xu4%T>_kZ99zyjJR?2x!O`>V7iZWxZ~v7u1!o?d z$v7Ezy6w=Gvv|Ej$bk^;x|5@VfV<(BrY?oLUd&lukxo2kjef8*m zBJDuR_N2X;r!e;%pIUFpxrd?Q;bYIIo_ilU^Zf7d<>7R=TTFIzXt+KwDPUs2lE7g; zM$Zg)iMyBQLoeJb(zC_A&|`|H(fya3$dz{8?z+VFn;YbI%RS5ele@oLo7*-wlj|#& z365QlZ#Wg_d%#EM)p7jBq5Qpvcerf(yMM0Re%~T@lW%@F5<|wlixtK6h`t`PFJ^VL zd(83xB4lF3*z+|JYeQ(?RIhlKXm<}cm1~5X;p_+JT940O&fZ%+4!KYEPy;Oeb0$bbVzueh(%{beGZR^tc;o-^)vQvLTLP`1Vw14k3P`R`$glTVONEO)cpI@d`)JG>YAm1@p4HmF+Us{B)1!~iB=2>BU4zVLM%mvxImp4)haVoq60x6hpQPN%7@sN3 z>X&sn_b1OSEjr~l_gnH+Rz!SR96x?(bY1-VgfR(q>;c?3-hkwJ9J{1Xk#?ac*qKrH z0?Bj6^YMZ6&c616y-uZ|7aF2U#8~h#p{|ht(rv%u7IzyiY zMusJa{SHqFUJ|rFV4d$&SC0r`_$AlwPB+eG*>`mubre5~ozlA2pYiaS8aO}r<+;_a zg=gKIpE>&{mL|nUHM5aqJI+zgr_{q4cXI~j_RagtJD52$lTPoG-Zgb?@?2I{+9ocY zay*fp^pzvvbxB!}YM1sotsprh=@*Q1P@tE` z#(+?tJnt)>oo+i_ulkP+I^$3IuJt7YD*_%w<|ZtRv#@It(&Ki~Pol7Ip-{X$=QtaJT(_OuU_6dJ=%NJy&Y zj86Up_S-#meA@A>XL+ackII5_vhyg`vNSZcCiPOXAbVie)bvPh1MfgeWws*ABg;Pf zc>3Jz#LT2*CzcQEUQ!tQMB<@%BHAaaf5ey2BcWQaFWy(q`S{Na(0hgkHwGPcz3;ft z>8l6NofXt0WOhhncuvTg1S07k*OBAE*_yoTfBGT(PP|{3F@eXv7b%a>2erC?e<~Yyv(Vo8*QW<_Oa!w2{9!++R4NeM3Fhq}!dKtf+JuLB75)w_NY)t>+noWWNU5)iW^Miu=jwx9c)h|0v^jL}&KvNvXL z$QqipCTD1_LtcLF{ahtKt#De_!8Db0z5Ktdo5|A(c4cE}mFYWkwb^9m_UwS%&b$eE z$8%frxP|XTKE=yR9hIX?3ySv0Iwf)WooVM%%Qz)0nsqx#6>p6{9eXb_HmozGXJ}%? zfS7K9w)20^yMzV$9}avMH7&|F^njwZO0$gFOVXWFaQ=nTAoUV)t*TBD zP&&D|R}oA6ub@8nbyjiuWbSG1j|9gEeq>wpmvh;HQ^M~@&y1WJelT)vM9=uWF~=kS z#Ae4-1!hO5M*WPj#@vl5k1@x*h^>iji9eMf=k(*0aQCEKO>Ii8Pd%45J;gbBU|eEM zc>L|uSt&@yOWtc%VBBc`7l9_1QkSn@GrbP_dHTKe+vNQ%Fg;*vu1|SJ(p%PHj+E<`@`-mVeR)Po=D@5WIsAfQg01`u;_ZT=g{6gEW#a{dWK5oY_Qza7 z{_iYqMz6d*InVOlax`fnsW(zDrq&35s8(w?XkKXYwbM28HG9;Tl`rI%<@=;f{K(v@ z^mpmq+ZReG97sQ?q`{SJu z`1;)NfUbTC{?-6>z;eHz0Z?Gq^Vh=mM!+$r*%FR{^NsU{!mr}L6TFkm5DgO43BrZnCBFr`3((wY#rGtea+wTOmMw2a-iy4>jAfbJ?E3uY zS=Bjm)oRTY%_|LG4{K#6kuliNMVX_xU7{&!5&V{A=Dgsxu@A+O;R{2}QC=aVqtm0l zpSv2qJbGGGX!P9pv$0jN-(snNg7aYs0i}UNrAl>h9DBY1cC+WVx_oIWfFzta#Rbo{D`mksUoK(iq+AoOg6w zbg$67@S4!nkfd{+=Sza;hIS9OgbLzbB>&-bCLWKy#Ij2s&YJ{k$tBg4wlc#hV|Yed zW>wb0oNI+A3hxM6vVMF^X-uiV;);QH2bQg4)jT&LC0sDDEW~Sh%>zyZC8#YJ6pKY?h{= zC_9ap%WY0z5`KjWqdz1BC(sFa(jIPDA}fIvr%d>ev_I)3Yi8mC)@fEaYY^L>Go4kD zbd5ccb)ADGA48>u$Ze&F(=j~ z`X|J*TT;8Hd1VaE49{@Q49MJ=Ez7FNhI5>AY6@QQy+l)lPen3elk7?`GuCUmwH^~E&|4Yu|ba31`dpPzSZ_d@^0m-A1#oYc}FRngi7Oy*x zpL#ttENx4AbH-5co*7xO+41S|sX4r1DTk99Qbu#+$swtEX-m`kag9l~SW9eN?8)do z@k3*7ME8q47PBnIE7`=`l?JEu=j$?*NgvoHye+BIGW+Gs$?cN!IL9Y9EGH(%ns+0A zMgA_q4zZVbw1^b%mvGQxOohxqc9|B7{c@5-EJF;GZSoR+*4nEw6tjvW#5U1#QISw1 z)=OT9FBV);7!0#?R}Ae2n|_)0ho(~TR{K=-Mfps)t7NXS-mrjkS~N}eDYGQ(PtKcy z&$&K1{c_P9HB+c<*1?!%H!%5fuvYictuhs z_7gjaH%N~cTrZSqwj0W%P2zd5ACwL)hHKILn!Ct7<1zl;{640y`knGFGMrn^`!0oY z9~3MpED~-PUF4riugQFqdM$SsKT8mme=D2J(eQ4jjLUqN>z~z^H-PQWZe@K)vQPTL z8p_ruA51Re7`P)+j&RYG3|>-70(Wm}w^T_Qn%ZY(+8!Z=}S|Wr1NuM@h=G%@|P5L6fWVr6{ZNY z1=j_L;7H+j!7WLnL?Rh4t1gl%w~(W84zWSyS?UXIFiPMr>fd^WTLOsQadH*g%DMMwC zi*AUYWW43Smd6VB2{#u0&YqIrE^n3ekzm=eS%0&Q89lP5=l;!lkW-yf$aUwWvL12D zI0HD(laHq?1HO};vWw@E!bzQ&mXy(uyD;}QP*2?4mfXX+b8>@nJ90PXe9L*7Q57!&++kU>vM=R&=Qw8H%gIV_ zOr4yLq~FMxkXp?_v*JXXvX|$#WQ@+N&m{{s<|pN{Gph50g~{SX$z91dVY6_cKpChQx%jB)xFYosBGGiiV-DS3l;n+ zf@XfPz)SEnQJ(lSyeSvU|83lA$z^VkGZ+PFK-HR@Jd0#x%9w-?tQ*Bu()04}if$#_ zgdUl^g4&|R;v>a$H1WEZ5#q-2fl4eP#BuuhU z+$M3C?gV}%O*~z^Ldq?Qk!2S

      ZR<2P-N@n7kkl3Hbw{=PCz=coDvZ`GeveJYJ8 z<;or_{3Mfe52SvN*^xLuwoA^p{G5Ui(_!=bGPxzxa+oSNG(s~dr+6d8rX@;2t0`B4Qw^9}jM znZ6k{nZGh$XZ}u)$PlEx&sd+4lu?~|IkP7BSK(g46#-v(LDUs=&rrTSe*u3e;H&b& z&HO?9<$`5`tNd#I+(I_LAHP%3i$6~!5{=E+!+xD{D!H7Ml3J0>us%gl8RCM8l0->A zDb4ShKcR4zV84hjbQ3*L*sC-1JMugWdzLIwG^>wjT$FcNv30nkYL6dNLexACQW=zRL@oxUgg6Sen zzDlyaP|ZgRLj~PI9mNTt!W{m>{FAu{^8B+~fg)Iwvo-5>4m&Thz?r{N*j4N!St)jx ztd#5#{}HE&MhbldErM@?I^j;iTj3gEiO60QC-M_b5|#?L3)_YL1kZ*0h4$hK@fP8O z0!!|+*vFhZDfaA+q^eX1xUmJs%T=3Y!v)i% zmleUK!&Dzs0`)w_pOR9!wy3j+kzJDwFZP!9lrEE{7LAm}$@a)D6gd>VEl!u$maHi4 zQ*yi{tK@IV0fhm&122R-wcg4&&3=tW3CWGhyJ~0EP1SzYN%au*Hq|s$CNx($Qms=B zD47P{F-_BeJ(Ay$-&f1|AtjZhKW-*=lm}q%i8g~Uqj&UfZs7Sx=gwr9IE8)(g54wg zL@$Y(o4-VGzM#0EE$zMFbIu=robb1(Yw38oQ(?XEePMm!@BGuE>Eh+0fua)8Grp&w zk0h+fStbb86gm_h6i}k6vd|)4(ZS+zMSo=vWb0&dX}Ba^{9Ce6 zvQyFzFky*!f#js*tpt+nl5`iJ7i|#_7GIJK6Auvml32yR#O}gRg>CtAejfLB?(YIV z`v_-S(u_p61cJZ@^eXm0@5s3)t8(t=`K;rZ!4b2f0k&~vr2f1NX2JmO6iRf z$KuPf&Z4CSpPU< zlGW^=83w@&^*L#%YJZ7H(ObTv=!~$Bps+wG9U+;SZx;U*o|io-9V~Z|?kYY}JV)j$ z`6N;ZCBh*hJIPCFYSG@JXYv$9s)AqQC!bin4b;>z*%aAyDK7Juev*!r2&J%8Bt0yh zE1fR6B=HoFkqD%%QjKJ+q^oSCY#ca|a`77e5B^eqxBP5*pvadyk+(eV0!NW)Vo2$~QcCVx%oJTN_K{yI{i)D^ z)zHcmWq=~LG^cdBqPudaimmKWPFADp6xBh6NcmR9XdAVEF>eJTyJ-kQ!r?!#n_<23 zvawxrSXHB*q`IcED!o*z)J@tt?Pu*8!#+*1-i(d0uBj9fM(zX5THU+aP_qLcUBwvV zQ4zKo>R0xrVT>sw+Lyb97n@$fE=x#bhsB0QY)y%a9US+C3ndatx#+Xa##(ypaz<@bt1WFMuC@_nUmO0Oy&E3*}y zN^j+6(BajkJ|%u7tBWd&mleG(PAfVhwaFr+agr61mD2uFM7CMBRAwj|T(q^wy=Yg_ zZJD!lxpbxUvDhZODcm9ICpsjqm2<`R+;yqJIpxCJ^6#3j`ss$#hHTv_O_PUZtFpb*06M>7_SIU#h&oE}7LO>g_7MDqU5qUa$P8 zC{^Fmz197vj!clZI~@$m#|40)Yl?64rZEkCrhDoFC zBNUNRUIELVbu~6VJUD)MA}{`HYA@YiO^PZ)=3lx*(MP&iX(vAkH19WYYROHxv(l!f z0Zw&l`hvCQDlV2@D=krUQ>qn&>X2%qYPss7TB*LIg)}2oBSBBzR(2|nD_HUzd84AY za+0E~BvvjfnOL%}WSqQFE|IU6$CezFn@e0vn9?nBUU7`0i z1LZ%^cIqzH7kySk)i%^CtLI-yZe4Q4vjc7a(K_k!hB86H->~gT2aHA3+pO=d@zfsCL~3WLC#sgIo~w6iLN$8zOU*pZ zJoQDjMSVg2MfFfstQw${sa~rPrBrdcbh-Sae0y`H%cB9W|gEB z?#z6Y(JBux4A;Fk6`5?t2;)3sPs2mwAY;1LuUKm+)(2{5XxxC_n5FKe)@t0ey|i_@ zvAU@`FI|S}73hUd9ZP>*zf&jBzScGBSh{z*-MYit}}nAA-nRdjkc92`xZYl=aet86;j=qEtU=D8cIMsF`LbP=G6=znNO%L7%LW3 zhgOOk4>z}2eak?wUQtk!-9%P@sPB4lcn5N|q3v<&@TMEhb6TG^iR-E>zM-Rv*iuF` zTNABZrS8cu5JgF7=_=rie@L2(kfJ8p9C@9zRpwt}P`xpZG(0fPFxi{frZ=WCQ@v@5 zX_aY;Zk%DWVVb_sm}JBZcMXa9Qo|6#0@FD(zgoO()iQY9DLFn!BnG%0|T%1>nMx9&$zTt>PU;mx|WQ8jF&Py2{o` zPULsdm>5tJty-s)6_}Jj3A8eSUyRA*sn6*Cv z;!M*I*Ei`N=%%W&)lJ56#ydv2$==xCILhd#pRHf4o2#S1`!8#pG=DVq!2d7ROArD* zMp-Srz}~*HeXRIV>1VAl$_#xBHP&8MR+)R5XPLeAo2|$i#rRo{md&ybzHktFYALV2 zP$jE5d{KUJNAv3%Kg)1ya!r*j$QD|;!$3`TLGDi z=y8T>)fe;+y;ieFe@b0kx>DOsx<=Yh;tUYrlS-yIr4BSw@JDnG>WHKxU*Qf&0tJtP&YUc_JB=r0lWxugFGP_K zObMnnM#8w+5T!5CDRmchDVj2EiN-_aqGT%>rL!WUbbje%#l+Gd^2Xw6MKg*{7eyES zEY@gLnmEa4=`usNl6Lq7c=A!m89D=Ph8MwkrY(jW$6umrV`5E;Tk<8@4petTxu> z)+RAeh>->lYcl-VFcrx%O4X&tk=jf8QhkP|M0Z#hhH}ZxSU>Cpb`0x+I$-P3e&{yr zAo?C1h2~?!(G6%6=7B9iKVs*x?pQRo7FD6~*a$QjbwQKS=jl?kcQxPCJ5_U3E0u4QSxQPZMKurbMT|nEa4xAS zO;oH^gc*ZP?&1*1XxV%vA8A2uBU|BHuq*rk79*>m?$9yhIASsVH3dQ^p(Lo&^wiV@ zO);sBtKt3VHxxmB!C&Bd*cYyZCqWBL7Sk@{X5)B+zu|#?ug+h;PQOt1KywOu3A2f7 zX7vSQRdV&o$}UwQH9cx4H{>?>*8FPmZJO5nqqdgRR4lBhtoUSODqN}zwTl``>Is_L zAgGD1ryKQ+r7cX`(zf6>-zy~@jMdG;SSFi?(w_9KrqsGkjpG{MUyi$c`|{2DH+8Y* zV#_?sM}1J;G9r@9Dw{wA5ob{y>Ir=_X-(1aFZ2R_of=DYC-&kfxtAy*HWF51DLxK& z!&!J3?u2QHp2QxU!lUu$cm**Y*WqjNS=eVR8GC{4L~mnm*fCUziqJdQar7qKfNX>J zBg0`HwAd&yAiVvj^OIk|!C71$I z@6#+bo`jDnMi&Xi-?hWgFSr(ei;suqsUi_0@&R56`5RBeSCL+@6SM=0fV&~SXd2W9 z=0lgz%cvZcqF2x!NCXm&X(qJl;IC&DLZx&nR2e zw6$V=)6UCFo6fczZnn0hv@EcNSVvhX%S7frBQfWg7gSxobn5blW_`oYi}|%hW|pOo zwTEqpwZ36*?Z!%H+gxfqrNrY27FA9T$Nv$-iFec>dI2?sJVho@Bo#v5BQ*p@)DyX6 z1Q|;nBR3Ixav<@CTu+7)Im8#@EI6w?`~lvC7vtOUG1zu&E0&M6qf^ly&_m=cngt6{ z7%4*bLMt*Cm^PU9=^2nMYIWCjd$fU?P_7MB? zn~oss3@eqL(nOF=tsw4Fj`$UT_Z9dLRETC^$FVV(142PFP4nT`hz@Q<2V!fmW_&Eh z#r9$()`{&wFk~un26_wqhERjrP;FSJe_@F zRSmx(t*J+|LyNwnyb0;}uXSnL*H&B0y{798p|#kh>6f0hEbN$fWkg40M{wEO@@35U z25aNOOFu83s=HJB(EP!IT1Q(cYaeqN{ha#Dd@fsi`B`IdgWKh@iemF~OM~UP6}Dcm z=^KvKZL3162G^}%JgFJf4EhM&i&{q((%sD>ax*=cilsVeXBwirPry}BpmT|*n3Qm&Bc~sS`K*mleVk2P?xFyWBddC59=I; zCm}rJX^m7g3u%YBu$y)xz8>pCM3GK}jXX=-Ax7azSPz&&w_;jyE7hHvK#sz*u_jE4 zyJI_$cgQMO1q!fA{Xl^#HDfNkuX3u=RbQ?aSIMg-^&?wq z+orcYZob-*(B7>hxZ_#J&-QoiVB~(uyDq!lp^4YVzvkF+tK&o4?V5t}8_fsnUF+}G z+%C&DSDB}q*PB}`7Hg`dgLyzdq5m?=EgR|{H^tU(wH>l3ELmXxUs&hc>}&<)=dDq7 z&nxvc8*6qDW)h;k>2mrJV=^b0n;9QEfF4XQqqVdK+@DRG=}0PsnoV7xWYm7}wU;_d zWm22SXOu5>5S)X8=pYh^)p#d<4PT31!nUA4(N?T0mX2j%@37a{0(3nRh71QgaTJn3 z)evTiGDaGdhJAo_x&j<-*L&)#baV8pbSm8^!ye-TlN8zjKSbA~A!s?;iZ3AKqzLp} zK0a7oZs-D$#y)rk0TUF{jgF&NlG})C{4o(m>ga*=PwF8xgJ>g`;ctnd_#t#G`~;Z~ z^uY|s#pG-prT=SOVd`c4W#Air7^?K`h6j~Sb!4Tss(byQ`s{_Nz==)?`~%@ z=D*Y>dLQ$MQJGV%nbtQzBQ?`qsS7lVuBOYFX-pRVk}9XJ(k^rl>IXfQN~HRdXF%61 zqvla6s+ycfvdK_#Bk_z_0~lckei2=aJi~Tj)9_Jv47Lh=hdx0)kQ)deDS)-mYrvl) zfNr^D@-qdRa!qcgZ^psKxyEazAXA1Z5$KyBq!ZnPzQ-5hJ24vHPO!(`RJ&6ni{|9?>FJ?B~kGM)k5juPnhGV|SHJF0m!kb}F zh+~>#>Ia2GyP-eOKvSNn0`89gt1{Jgsoh)ms$pwm)TNKDpDxa7?%LeFv9PYC$-8A? z+r)PC%Gmb(Z5=HkP2p|RJ2thyygIV2xkW)x8ttWbW%;&d>r;z;S*;DTd}LlRKba?H zwmHDE%sSJ$&icak*7m_#e&L6u0%+OYR;@L|*576=qstx2#@V*nItZ2Zg=GtL(tN}+ z(6Yrg!TQl!VDT`2qYLSS%yecX^@f&Hf9XJa2sIy^l9}1e45eG>BUB^dLqb$2C84|0 z$_ON-BdvfVAy;S^ z+yj0Lt~W>r`U%Yhm~O@g;&p@v{szBJx|21;L#i7sXI9ZW=t8E`%%iW66PWQ(0wg3~ zfDRu`{QwovpPWS9qR)d`*<^NRNO}M{m+X$WU|)Ox$lzhywn ztojkHMXd{(dpE|{{jQ6t+h?tyUex`xZK&RGA*RAmebTzql5IZ6=q#HUy;)+uY?WI5 ztctR+wz;^nYH!(S>v*%=vd(hc5@WTqd07)|cgxysgU$JtpG=zB*|OI%lrdX3S)Faq z%68KfGnUDrhca^dEqN7SP%SftK0)PEx9I?88>40pGQF5Zw2F>pBI)C_BfXE#rW^n+ z?We|*VPq>Yh%gc#0i!$Og}6O-7jwdLFh~3*z7%T*>`;i!2WJ5xZ;)2>D5^y{Xeizn ze}vcKu{e)#BT|VOq?Br;JE;A{ZBYB$=!H~Q`h$5C^O(6oO{ad6{gi$21S*#Hrs{Ex zek>Ubbt0n(q2ViilKw&MAa9b61RFnqj|c3-0&02y7KFuM)3GCH2>cnMOzTaVrn9Em zNHlrPl4zS++10YvcCN}?yRxdd!smix)%Ne$Wne{9 zZN}w+HQTJKt=G(N@h|47X8)>-7XvH^z?YZiEevJmS?Vk|Ecw>2=A&ghY=~{OZKqXR zAvP~#Ld?&Zzw~GttlZkw>c|9Ixt1o2t9i7!pE=uHZbq$JEx)X1Eqvl8=|(hA?o=}! zMkP__C@-4Lz;qLBWoFXH=*e^<<3hcpSDODZ8sHSs z*}B*Jm32_tn3d*MP`{&rzKpjnu!hjzm{HdA)?JokmJOD2Qp^azoebs;{gM1k=P*C4 zJAhW6WZDnRz*7qtB2IWGnTMzE6#1+?b`HO9s;S=~Fah zK5psB;Pg}`iT+Km1Sd3~Or$F4zNC!ur*`2&GJ=>)iK*4ZbK)uSmx#nZ<5oP32qaG8 zMywi3#4PA`I|gITnE}9 zkJw6h5K%-reifHvD0&5Buxl8E$CAS-$V^xtSPwA@^Odqp3t26xSY{R5BCXHNHp@0k zk+m1~nh7t9w^h>7MlURhkXzDitlGlLcH7GG{?=dAHD+9yv?i0fL^YW8bccDH1+{3c zU95YlFj@iFbhbrgiL^v8DAh@|(Az10`W3yAIY3E>VfZ)lf$;(Qk$P#)pa+C5z6`YAPs*+&M6XsT=kXjlr%F3=s?1VJJQfxP(l6684yw3$VqFoI%V& z8CAj)w^z$)3~Q9=av^f7S_%zSQxYQKS>Cfmt}_#ONTc?{3OGz3ibAZMU| z;2^a?FF{vg^L2lfW0doCufQ8eqWS0;w2|14hvWAE>K(-UBYwyjs2I^9_lTXuE+T|n zMqZ$%(*ma5Oj%9=-DtBcwtlv8t(VL)pa6fHy8x^mY0`j};)*#Z>IGcyGg=nivlbG4ZU^^$3RWmQ`@TAo;^Se{r;GS6r| zI0H~O0IB!m3St)4NWRDm>Y6~*p9tGwb&ADG?s+Mh~EIrYogfXAtIWDfT!yX z-cSP^_H_)#5WFjK5U(MY60^}qXf7UuIAE=qv;1JmO4A+_4`e+;__1axI-S@AZ%39R zld(F2OAR2xz;kfifGtB_qhUlh;tb(~#XvvtX+%6&?>gFrIYx<+v4bP=2jd9q1vI*@=ZX^%V7bu(>Lw=_YQa6|v48jD_>2wdG8ofyha8EGt z-AWfzBbc|$TgpcDp?=f-seGb4ehPSLE73sQCph3FZUa5?giIrz;(duO_&uxyn+j5j zO~evHjt?O!aTNc7$Kb~>0;C&X$S3$wOpkNG-9mg2`UZ)CE${}AJ4GPRK%O%a@;3w< zmKdAR$;1JZP0pBB8x5ui=r9y$Tmgq8Ft!IIM105}*@}&!CQx?7dwe6&AMe2Xp@~Eg zIg1`g38*zdSrrl%A|7Z3J^_YdNX${lPoB^0)V%iuLbrau9x6?D}rQ{zv9PIof>N9nWdP>it9EfIs z+DcMR1d!8+bh4OCB4hAZz$ZK;U5Q*`5va*`1WkSi_1%R4m53t%_xZq}Rvo;ZO;ux_H^ni}2!>0IEEto=|^@0vx4RQtQd# z^l!jI3B*Y>2A@Inz{gU@)E&?w!UX(m05OV6NAfAXX(YS_{z`tO7t#0VtCRzMiLo>H zr|!{C0QG~JH58k^OZ@}f@POG&kEcqhG9rY~VFKb6aG_g>dsHLUlh_J$los%@2+t>e zk}{&5SU~wu8_3x}rKrix z!*d8{@;yBOBwfjL4ZRQVgMP&O5sQhJz)Q9{0;Vl z=OQJrH*gry_*!B!W{+gRtKk>ec61)LlnBIIk)MznsGy$YZ{`H>G$VjtSxnuhUV+|^ zA|0rmba$qjabWg>`Z`CsFpJD;`ajYG>xK13-y3Vt8-Ra5;3{+&Zn7W*o0&-Vv_()U z^iq1Dc`MV*K)?k#F?K-ZyrosddEm>hnzxy!T9#QX=0)Z*<_-O4SAAi z!U=o};FWdQd5~qCLi(7dYX%6mY4eeCxXu(0DdF*O0t%sr;O8LKC^qeZ)*$&=2A5&v8_OcN!OW-}z-fM=QTiogW1N@~0M#M-1Kov|QY`Wxl}gz& z6Pfpvqh$~CgQ;TNfPT)Q7E*_)c#@!`AXVs2$w*JKg!n^6Q6H&`^eOB+e#evp&B6BJ zd8CA%P7eb9_9%F29V4Q?6Q%eVQiriHHdRQyq9f^z_;GwQDFUmXOil#ZLtl!bQ0fZx zoq0`ZfX>P!@0$lxo4}oIK-&(aT`4`i0%S-bbUm%3+W_xhq-K#Lh;TBHw2%z|qx<1+ z0B3W7R(AlY>S{tjq=GJ3js@Wpa3ww!Psbl%c~~Z>>VC*{)k2=y@=$)U=joE zgU_KovGvGa_z<*8uP_>*BTyo88huG@vlP&0O)%zeNF?up*@lfC0eEUAd6k?={v)G+ zmSd66iB-g5z)D{L?!^=Lfl^#S&7__I4t_`H)1k}|Jcznveua0X`Vhm(Y9j^J!Yiq8 z>LH`00?bE%t8J$9sRztNz#$5HKHvbp`KXx#l1z%u07!8VxFZ(10bfb&1O3Y()|0Qv zQDg(*L_8&T1La==@|BlV0qsh!rDjn^^f>6mQ{;7^KqrB`GlDt*RH1@|$%BNwaVgN} zy(l#`j$)`#@-{Vqo42PaV>xgf}HnJah%V2Ub@tK$cn0X1<0~yfkXYfK|I=&xUf)B!0pnuT_tQ=#3 zd5RBGgY<@nL-mjY!YzReM(Wi(N>xL{u2SBc-rKTF_BtWBaL?+n) z!Nvm94w9nzR66j-WuyV$gB1XO&_*mG{0RfO1TV&X5EZ%z>3}j31u=x!PFw|gqKZOM z15$x%$rDTjuEh$-o3sb^RMP`qhD4DG^eXck%Nz3ps}Hk-nhR>}9;jOdeFB_WE3=Z> zL9d}E(p|_ZYB`yVw_`VP37G}X`3_*BgJcfqh<5T0!6G#z7pNN}?Lj}F0_pdlt9Da< zU^mmq<48ZOoOn+*QGJnH7z_6T%oqbu9l>{knG8hMQj0+so&=dhxOoI{Q#*kQeM4Tw zJkIU%>w{Kx+>K>FHt6i#>rF72vz@ z9heX#L>$1nQCJL`gcKnA5fn@kAY>PO461?TkizuB^vu|3oT>g)s!u(xn6J-+t{@`Z z9S=r%&;ghR6JiR=K;7~Gh`IPs{I_NTa-4ifJt6MmDk2qSgIw?nb^&A(AwUN&0Q1xw ztO`C2PlM;d$DwFA5Pc64t2``?JYC~OMUxxx&%``{2luEB{4ufyOgdb#+4MVG1RZI9 zWSwSZ6N8zx)OIqLbS95e>zToTYfpn(K25jM7pVaJ7O|V8u(!x!tS_bp{k4W5f#UE2 z&cA`ciLY1*IR;?)J98hVh)HBdfdorM-6xJSbFfFS3ThzBh&b8<9gN<=&*D??`($t8 zJ~LJ6r{`Z9Hh zd`vo$S!gqUmdK#4kON3FxsV)2bQ10$GhL0H!B(PDtSfpPorXLCiFE;d9-aebKyId& z#xI8Nh8Cm3c*{r|1p0h^mCC|RO8Ly1FLg$J@lU|j4MLAY&e%;j0r`zD1!(+jOaXi8r_MWLj94`a8G19+J=A$HQWbML-nTDCIu7&KZNf=bCH#o zSrtcYxcMf{21xEhUBv^*HI~KXH6#mujd?Iz&3CMQtMnkJKTPZ;CsY4`Q>;TU+kphrG{{;Ie z!WZLR@kY`fB%&+8v-VLoh6|=_d+?j&W}=ROs9N#|ag}&Qdg4>Ca!`fu$%VvKd;pju zw}JgXi@rt^k;{k+@(>vUPlHs@I#a1>f@z0wxPjCsfVt#o{VM%2{SsZX&Oz&=*-_#f zH7+Y($p+cdK-RP7gnvQ*kO}dyIU&EU$J&dkL{w| zX%10OJ}}$N9@a3X)}W$iQ&;FsppM6q0R)8ez&zZBHGo-cPpl_$7%1m0NFBNt?}qQi zUGPLy0A}O~Sa0kv_7N+_jv`IuQEE6NH|xx$v?GO(Yp5K=0dF89usl+V?lWwLf6)q^ zJ(z31Mlq0uYz1!Q6V8D16oAth2D&^K;Mfu}$gmXTEuFYO;tR6pYGMgF3rs@Bkx5hr zK$}kB80G>+be7B|e8IGE2vcP|-?XH5y{19CTk}LC(oWO$S8x-2Q|ZDd+Q;Z)Fi$U`#l$yk zIPgeAkx10bI0^cHD!K}&sJ1q0zGn*}q5_JF7$}Mgf(nSDqJV^y2#O+Nfr#XEcX#*9 zz0*M|Vm%e(+1=Rr#+KmV-7S~CnY_uO;7I^WrQL*L&4POP(9Ubbd?i#$=j2i}w3 zaPL>o9dHtJ&V9o*%{|W9>G{6mOag{nj^f&f&IMlrg@{>BY;Px zJN)c-?cwhA-cddu*s=7u+^$KkdiQ+K0{0ttgDcXtrukjVuGUrU>p>^>Npqi;!~-9F zS3J*r>svy+phMj1*Ph(2fEbz$x+XdvIuMRjdyZ|Al?6`iHE<}zwlrAATB;!l#Iw{x zddno~I|`qngrnT{mR3*!r2DQmcQ>E+cH8n?U5+H*k9#=MAKRleG(tp z<#F|KL!M06L04Z#uan`(w12Q3fXZ!N>m@kQ@&TG zYuVhE*fkw|-$_uxC|eaRo1nujA6nbmHn$mCJ~uOboxVBV`5vuD>Y;f)c%obZjzs%O z8w~%nuC)>zey%KMqT{mD&+*V1>0Ip^;M@XyZi#D-`+^S%P!Fp;|FoQFo8$Z8Sml}H zscUw*G``(!kk8vJ^^S4mz$5>^7xspE!#uw{xgL#oh-;-gzKX#w; zjPxMA>)g5SCT~Y`gYN^#qc1`4kP345-sU6C+du_>1FU0_x6&8mdFXlKsqv2X4FD%K z4WNI3@~#EZc&Gc7Tj#p$>;#ry=LoTVwcP>8xkiWsRY1cnM=X%}x=CUxG7C%}0j3e5 z4#wp&xt3_piWXGsX6_pVvZXm!fqo9a$u=)lE8)xYxSWQfmn_$&3-|QQZsM&4t(CaiFX}ymBGuQ4*NF`+0$&l1LmmR z{njS{yXDEvD)%EtrK<$?0yN+k_d0ixdxU!i@Mf($0>tT??hp_!Cc3yDp{Lrt+m#0p zSpFW0cb_lAJ=VqYto2Oy@ZDRzd7v|J3Dl5F+$&vs-MhgYymWQD!d(A>F~_;Sg7;o~ zQ^5K0Y*(5a=^XED1J)t6f3uyi5v-}O64F6?Er|dFybdZgNeo;=r~Vkg;a^hRZG46| z*|;ti*il?)UhgUJesWE5*EsXs8$nm~d0PPJK)h|~52A9r_o&w&%>E$HM7JEE^VT~a zILv^*+F`p5D{SMe|Jb(J7QrddBy)%{T9>x}&x29NMj!1wys7gn*v;*>Hn!+}b3u>w zlIN(`)m#ox80pRHy<2^kd;)i?Z=h!hKs!xzdtGB3832=c(H>=8V;^AqZl7i=xBj%2 z!fI%l%zR%UZsAHWN&HP)lh7Rz;0o$-}!M8}3s^>KEWv^CL-a${}u=3@Xez;Um4zi@YZ zUN@Us_WH6ttGq~8xvRv@cWK?(V26_87-0X`vBmb=KEbN7y|QxPn-C8YnOn^t%>7LY z^9)lGz~yfrZbPt-iXSLxQ<-oa;~ zGw=;-fN{Mu31q4gSD^C`fTwJIF8wJ90bQO`v?1B+XQF5 zW4+yH_u3q`#a6U+H1rz|vs!G+ZNF`=?M8crW3mlvH`q@));ieEd-nUbI@>|Vc-vd& zA{Wbc!@eBMOeg#idTaS@p;>Y)v6d+FYx8PTnemCSzu|>GMn~7`@Xgd(`CyIE5bZec z&i63vBWzZ%OPbm`wKWdZ!gqZ8y|;WN9*sK(bQ9}c(N4YN8L-YShsZI{vD6-9y<|V+ z{0X?Y4fYn;0=eL?fa|^tGMi|IcBkgZp|GFr? ztpH(1cb^53#@{u?73X+pvjOz3&F+K0!Ph|4WI?^qG4ov$!PH^S0f^&NeUG7!Ua9>K z(D;@5UxpOpb+g1W&q{>TO)~Qr(-iY%>klX%vY6dqU0!)UxT_sBo7@y?qFQN?zvc{d z2w;qlfXbuCPPKlu4uRLf2O+!lx;5OI0BazWB^DlPdjU7v=GlU5KIjO6H+%}^#to6S8nQ@zElk2hbFK4rzX@?yw=Md*`SB~?xSjLy;%22mj=wmN&7eZ6nlT5P4L}( z$=u&O)pWsBXfC$oTB@K@_^VX~tos)H3F-t`^h)TnIo_OR>fcU1Hsnz7{->>0&wS?( z*AB;eU_Tu;k&R<#+oJ3;dywszJ zu|aH*8@dgp2FN(eIM(>hG}Uz1yb9DNc!*)iFbhG2SO`n4!%XkZea){e>!3?8%bH?Y zXL(>bU>;^#V9YVl4Z93h{S(~_om)3YGfNfwICeQN zyB4{ZIL=4-3LAxLpM1+1=-oqJih;@uD#P+8(*IEt#g36(M zh-&=L_}nl;o31*lX;ptv{j15)akK)>NX;q@SM#@KygEj`NKFN-$!&l^Wzf(RSLDY` zI4IPdV$zu#&6~}1bE?6m7Hf7JO7!J`SCk@tYuayqW+^qj0o)-X9AsjevRMPGb*Xx)f@k0k&qC`lqHw-LAf<_Ncw;FjXCG z$*ur4#HWh3O6SS18K&v)81`9qSgzU50XD}7`yPN({A80^4c6aKi2j;3U*oU7u4z~Q zQh!msQeDyv)+B3aU>q3j7+r|5M29sUGZ#QgD9hxrRKQWr{?31$BSA!VLlE2#dJ2y; zKQ%|1_d}5umFcJD4`@4d9wJz-0_^)_kP)xw59|0Ex$?Dgf)b^!)?}$O6&DqOidy+E z#Y1_y@_=fXJXf(z=94!ng{G~2XThx&1k$ScIy0Tdw%UOavM|X3p1@(d)u}5~%_=m30_}o+hTdkL% zYIvu0q_xe8fM=LD87^w-l?#;bl#3K(#ZJXC`BZtHJV3rlu2W_zMT)-a2<1ifIyFJt z$CPAwY+h!j+GLJs+jiLBG8D#|Z$mleMq{?=sd=Qa*yv|GW^@|z4V9*urX8ktra>9Tbr)!QsERwWNqrx>M%_`;1V7LtltzZYzU-F+ev`w^1LV|7`dSxSFeVtsvv|0Suu%@;UNS`C8c*S+mToh?gIc=gK`& z60L}~k2{R}Rj`D+UWAgq)(tk?F=ZK}O|J}(jMGiKp=_wX1vZIwlT>r$3YkSZPy$Qt zNzRJ@5jTrIii#vVWVObSBoisuIRGqHN)A?zSgBXrfSE?h_v%vb=RQ(m13YH>Sb5!$2F9UpE ziIJuASEb6l+(M;HU84D_j!;cdl`7ig%jE*8O*Ti~BrlQARg@__3Zr7P;;tf9u9j!Y zuc*Q_AGApAN5x=mtmY4OmbOb*r0vxBYyMW>P<)XOlsF_yrN4nDN2BzLC`-f>4-mEB zV+m_%pO_5x2}P=Eswz#h$?#U!Ylzoo>HgH7xAZfv*36VYlw1PCaDJvA4rC6m}Gf6vKeO`T2dsdSrchFwQ z-YW+xM<{EQB*iWHRi#})0X+E}X} zBaV}9QXf}e)HbNg)m5t3sv(-e+C|b;B7{)NZ{}^{)$rWhV%86K31G*G{zh_4gcUv%925A&z0z&6J@Q_~CzV8=$4QkYNQ%WPCC8)$*-qI= zX_Jg1PmoQO50e#2tHtjmPsKMRUnQr+ZK7Aabip*CRd`tRRPtTgF0T?>6+h)lxmCVd zUMI_zkCr(lL85#iPFO6wAS?sAG*1Mh1X-dyu}B<+fe2G*&lwf`X2BPppU6+0r<$cP zDRX6aB;O8O%i?M-rg7%B?l{ty|l)a9V0~GWSoF2|Z&M|%` zXD7Ena9(^t`doNdxI$-=K=WoeEyN%};(Ub;f^ zOd1d7$052Wcqc*#uJJ>7yLn3l2tmFuMv@?X$nyzz3Vgz6!q5DR{AfWi{~J&;+ARr? zc%^E|E2&ESU6d&f7e|U-iNXa0?htMwuU-%*3>GaG(N6(yZ7=4&~5?C-o1u}6+mX2_LNtfWLZ zjkkj1$BE`1WDRFTQsb#q`UdJDpmnvGl0czSzcSOAYnW$P80G}VH`Yp)oB4^E%ihhq z$!p_6yjwgczlhV$e#zR*c)_Tm-=p*CBt`<`4*ff$lkuFRskr~}Lb#WB{=5|aY~DHUS^jcbwP6+RTb z6!r)mqCbTBf(5)NRv~K}_au+aKLO_Xn(&7(QM5^f6$Oe$ihQD7LW*!Szna_3Z2>++ z<~H$Ccy0V{K^MQ9UrgJF+k=slliBlGiR|?(0xLooB%Lddk$n-1xM+ilvDJyVCq47AG(u%hVg}EV0>mBVjpF! zr>&q4qnx00QTJ2dQ14Uav<(8fpeNAZAqCT}P=fqR&{h&PDa0qlAnZTh~m+he zcL?rt&Tu`PnVic&Z7Gb>MRE|{6Z+#H6V4En`0x1TI3v(jdx5)5$R}JRTmZUju_U05 zMJc9ypa#=QX+z0AvOjqsX*1~pSw-qgo=M6f*~r&{HqTHho$?YWHJzfkDXkO>?I2Kp zf|*Iwhtw3xzm!b!MDk98jMPJW#YAypcpG_#criR0KaUG@^?y4E0^9* zpT-zMIY{HuZZRLRF0*1-Ijnn(LdGxJCyI~MNhA}>@#VNIYzIz>{R905`!@#0=3;(h zg3u0Zf6Q^rVVs#5MQkH(A{@Y5Z~{UnF@VS;4JFcuY66D1g_KA7PM%CMl24OcDci}9 z$sA%5v735`-k-XF97&l)`a)C@ariyNBea)Hf0l|~zjz4ugZ_90or?p^_8FZe=4tb`r1;GqJ4EtQzpUN8DX(DJzMlq^zX; z!}!TDadq5nTn!h+!}C7!>bYKS40jGkz@c-Na01xZ!2EyX%x6p4xs=(2aGH(Qhtf#R zqm7`SXGSxM=*#IB=qqW_)By4-QePsDun_OTO~RZ-UqZ7nOHc)cSwuZemoi~iU&eFh2KG<( zHr9N`4~CSvlc``7(pS*jwEyTt#%x+P4Nt#9zrj4t3Z*AeMv%6W4Rk%Q`Q4m!_8E>6 zSk7qfC~)@<4u^A-gJM5nCj)KTeaxeb4>T;vgKMI?$^VhFX(g1q^cea=Y7Y%T^`o)L zFG(W_JwSzaAx?y|V^QcEsB7p<)D=`R($Gk2x{5r7`iSnv)L}KLJy)*sn;nn)J$qTt%SA|Sk5K-16nirKKU|5O4&~wKu9A#B+Dt|DaE8(ay%KP zHc-s8D9QlhInqpu3F!O@S=*V9*o)an_766Tjb|@lpJlIRJz+&KlNmc0%PHX`Iq@sd zh$WI26TgvS$=y^o$x8Z3Y9J9w^@OYV!FU*VAGZ%n!Cu5}M(;yWkZvRz8G|TpT!jcj z-bXLQSg|Eo2lhEO7PAOD4lBn#z$RgF*p-+=7y+gY{R90JZN$`Lr(l`5Y}^d&3#<~W zz%~K@IYOdQc+{QL_q2RkUs^i#9JP$fq*^H7$eW2wqJcDww2SzPq$E!OUgAeg#jEi= zR5xlE`fpqZkwnZQG!rTa9fTb~?{FM3mQaenM?6GbPCrL`ML$f}(AkVI=1j&#W-vnx z^kMJQYiT_+h<2Zlj{l9HjAh~bV=&kr{4@Ml;$-4M0*jD~@5bZseZd$dxXZW&SQmB_ zb_|A&I)h*|}FfWYDl^j&Np3=Ojs{T<82S#c|H4BQFaFW?nQd>2qL_27Qua&TfC z3)t00>^B@0{}rP^C!j(aXEhiaTbk}6m>3^E3Y&^U;YE0u7!Q1F7k(@@5xtkSYU%3Tn#oIHxWCp$%WXCpN%D9H{$zYkKod< z@3G<7vDgCaQ(Ox61Lglm26G7g7`+Bvg!+UEL!7N2Qop2bQQh!;^nI=MrZY z#ZoX0glznCVi)-kbrdC)^prf2LLtYJ29TKe#h6^=7<4Qq2b+PY*f+3pVoeV6Jh_Lq~^+nEZxZH52@oM9Xrd>!SDjC&?bRkwC=Oa6i zPnxFg-B9^g<@(A8yZKeOs<&6$st#1$t1PG*yXS0uHDWx_BEE#ZhntVY-_xMCSm6xUsjym*t=uLt|7Zi>w=L=qy`la zX6yiJ8?qM#A^$?HYUthlt}?$)R?FYpTT7_lfeb+WZrWKdt&OhQRlau9v)!3{da75| zWbI3=qu0e&Z>>^QbyeNkT~-ygo=E5YRdNxueiOfd!slnuFzUMV#9$A(&F1C zS4;P8RBcY*erLzRiiQg6w%yw@tG3rqLk&cK#`I!`V%(U2vD<-1RHMx3=Ro8APuwE{ z9bbb3%I~O?i2jW!h}oD0=-!gAWkKctY#+L#Xlr_T@vemG2B4mO2$|W`)^MtR-M*XE zwFNiImX&w!`dF>0$!qAS5867t47Z(M%E_-?!(Rs%ek;u@o43!tZ+um1Nom3CtYK@O zuRfn}Gx_bZ^C`rotT=8=Z_Kl(^|7MW0cjU<@f(5*w-h~H|9!)uqQ8rKH;^`rDMoC5 zyaz(M(ShiN=qKp4$fM|Llm;~d<%je`oyQEo{)K&sorHeelvsyv?28CTJg@D)C9h=q z#-NRtO9z+U+Ono1VHdgjpXy25vr6t4NY~|Omu)p{Kd_y>EobZDaz)Xg5>?^u+~5R5 z{EPXY7KW`jQ=YI>zvX$x*A#i;!?-&!LuSN9@FOc`Bt%S|GCLeOg&2M;>Q_QRLhq{V zk|706dHV~G=bb5-SoFHYxmDIEL0m-%k#~?cQ2mhUO;?+0kdu(LsMqN2$dbxCn}%*K zuO3q$xAS93pWLwp**VC}nv5UmoHd(Pe_f+pvnfrTot(dCgS(WPb#l$2OkuXWC?yNI z2C*bO=GL6|)7djQ$&}J1o0nxoFO84Op0glAIqAoQJ|RINqs9jYdB;Bvy%|CSlvr;ZP2j%*Cc8N1SNrT;4b#bZLpj|%opD2VXR zu2{ICU~fTL!Jw?{HN&$S*BvYRuX1#?s)|~fy>n;f+O5MY^0(dJiY&L3S&A6>bBjU? zqc-l{@-20K20i0hHZAK{+Vkc5q@$@*7C*?CwmNKa&xB8*{E+?=E=}A!{_WWDe%#S* zlj!l268A10m6RK$4?R7)c69ML+^9&uKSs?PJ7L`QaSJD|SZK`InfEMvV(N;O)ob^q zomuy^6thdPk&*voU3>1%lEBUX6)#LPth%$ZE#-Y0dM!RGJ=vCAoN_-YJ~=W5kvczq z{)|2meq*KM1_oD8kOwCOl#Na8(`VGhNw1^c%-uh$W$Lc62_yLdp8~rBmIWRQk_Gn( z*&N&z>X=7Q?@n!A^(?Jlx^zuw+Vs`zyiX;2^U5-8>7&yE)72TnQobY%Uvz2J_!U%c)(suyFCBBo zf1TgP(N}_#CcKY$IcIj<%ACsF&{c(NqO$(X9Gdw!e{9L@0yt~*%B}IX*v19>6O{{x z&hw945%neh*}`9Qtm) z=P|7-<`x@^Rrx!!F6VaTm#^!}othcF!W^}4?v}V)OFt}O&bzrFa@w|t0kft@W(5Bn zQ#p`Oh7*H*C|?+9+QPH}Q2!XeoK~?b5r&%>33>@zIXS z|3p5Fj)`H+Ulp}+*5v7@r|k|;ADb409X~j5>xg?p?+sc$VCv8(K^%Fe`FZiBwo%1>O z=ef^)u5&;4^E~%+7f3jCzh~`_`1z$*X{-KKRbAxw$TtEagZ)mKua0y77yjq|$Rqv% zkEEuiUj2%B)NkxUnji4h`H27jsQj;oyjZ`aJm9DI^4wRq^XBTx=;ti!^b3Fc3;h~( zfet0@&~5+zJiYbUMxXtDDkJpoBaDd0uQH;OzF=H53mI4b@F?T@+i?tVvY)}nR1Agl zZARhK3Py$Ugz;_qJ;wLvNXB@;663?odB$fY7nz~fLS|Uz2h8x86=uXUiOk5%-!Y?1 ziKCdd8}ll2FP$@sL533jzIZ=QXfd4ux<=5<*X^D3xiKKJAmX5uFz zX8bR2Fk^f2n9)B>Vn%+r!#tPr8|K;ROvb1Gurns&aK;-98l(8N0fsoLijn!Zrx@}7 z_6^3lV1nNL%@}&dbtKPneVX>$$p6<{|I79N--H~_GtcLKYFNE_L-M_wuXtu?VXRMS z7xxHS-m7ULB$k(I5=$)(Jh3Rte*@Pd0&xH%XYpoxF*&`Z|?z{|gz2`t_y%Z#V zAq0(S9I*KJk>K6-AA>I$`QU5GTCnvG_rNY=68P?D066TK0pBb6H}F3u9|M2giGT}V zehB{lcOQdm7rp@hy!ZsT{aG^j7o!XOTmB{R;N@=ci|b+FKTG}&etF{pcv6!D{!2fU z7kcX6_!Mu|ng57zQ=vh%0e=n;52uf5FMQ?p_w(NV&R3YHNFDfEj;_1%6@tG^YWWJi zF+;~+Bl5oXE2LfsSo&H{k52tsMiV_>A$SA(+1LEp^-Ev#>t{2*#;ADv*BEy8KfXq> zFzPD=o?*THH6~yFdVm6kn}7bg{rV#vU*TkoI{qsJzt>y}_>6kspDWv5Q|uk@)u;Xr z7O6YHm_MT4AAavFcqi`A`}9xhyg6;H;Q1FJ@R^!isu2ExH=>(K{X$#@ye<5l_w4un z1fG5Ko8Z%|AYg9n??Cj;cf8@>U8Z*4OQ7Dq{%7ia{64_FeF%8bTp;BW7sY?%V=Db* zjVcYA_Ea=J3beWhfoI;>1uj4S2^AS$iFrxOd7x~~z@JgBiWZ2rgStAT!=;Czk9l+cTn}c2PEko{zBlUpgg4dxL*V;W z5n$X$q2APlRqusN4wzP*1~k2md#}F6I_>8d!SL@?g5f`VjH3Pa3u^B3UxShVyiTcB zeoARxcT+FZDd0)rEsFo+B_Qh2OTdq=cLA)A4ym~MA5ev+VBqXDN#(_+-u$m`v;%Dm z%e0*EB#Lv=Fd5nWJNlEeuK?#&A`rINsTAQ`RKophK*zD#`^2XUOO4144g8uoIAH&psDRobSeZqm*J+JAgT)zbDn(u95>ham&>!8d?`AG|;b zzq~=a-;fAI1Y8Hm`@7WH@E0khb_aN7|4R=^gi>+A-L!i3U*2zD{nzBv@1=raKVJmX zc`-m(`R~0?Oay~xzc~h!f2sk(n~wmX@@X*6b(MO0E{7Ui`#n$|8Ug6P_$jr~W&{r8 zj{}p>@u`d7ou|%TtER4DWkA}+RO;2_bXxh|hX4w1Qr65JprYzYKw$Z!XJh<|=Z%-n z17U;LX@7dBgC0qJbMkqlgVOG#QX;{J;8VZ4PCXD-Qfc3c1H-5`Z}{(i<$da45fG*S z8+akBl%l=*IrXcPW9t0-Kc((2_5kl#J_VBMEYwHs;}r2@9~H&?fFduyMT`DRIZzYW z4P?)31JCDAQ2Dtz0Q>|S$ap+}LQWo;yu|*H{*2E9hW;_c8*%M@sz%fd)C}zdzvaE_ z3413I*joEJ5FtFF5?;JWMVI`7_STOa6gvc=w7+zDw$*_%4g*t(m_8_cJRg`9p`NSNR&i(7Z!2FDu^vpkJSNzwZ0q$eVWHH+T1GAKYJ} ze0K`LsIf@Os6I>0(&S)d{SlS%`LC(>DieY7cg};M`w76CkEc_w4*>whejK><>n)0P z@kuH&^Viht@2`9QtKbmGiBSRPTP@TRYwrQrOS;Lk@gLD+k1kOL?F<$6(Z2&tZ$dym z{U#OP(M01aCaE`CCDhgbTnEEAd%*SHVQ(1pIZ#EvLp^8r1Fl59N~N3s)5Fjz0LT4C z+T!^8wBP^u|4?t=KA|KXn}AS>zW+o0t;r|GynbuMC(<`yK_>ehw%Geg$y;iUZ*OH{S13 z|8nx#P0-_h`bWUb!?!%HhVRm<-~AK_wPKV=`d8q>@>L4W$Om}PRhq2kODgxZKq@Kj zV_K7^lDd@FJsExNmw9~JFz|u#9B`G3QvCs+0~zZ!Ad4_lF;fA+rF)-vF5OpA%!OzG zgld7CIt_IbyEOS!<2ic7l}@1R(H!7z=IOtAj;RwW8F=!OKLO91KB4GO{)6_n?c0E@ zERL$$!6u){|A1cb_NP?*%y%fB%}$;B_On1(OEVSw&!;K-qmKX=h);k!KaHI{f5S+R ze(wVHlb}bbj(>=#qNYtxB>|ebJ)MAdwv)}j`{o>@aw0=`N09(&dSyvXQ?0e&R z?cZIUd^*?RS@?1WASz_tQ5vNFDB2ks9BE-Ie zDzsD*32&=mX{fY?w~85!NBD?7MxjF2v39vj)o5)o4_WAi^*K}@- zB-uKZ%B#%aH5k0g4XH=_K%Hc6S4VNnSh((tnyx2MTwY34DK^Ek2!w?zSt2kq8je8( z^g7t*@VnC_ZxxJNoj4A!VP(iMu`P?|p_-<`==@D|TXl>y;V!HN8&y?lHt~1`6PZ@w zr>Rqic1smVZm6bU9FDh)vnwqNsUnmk(3s*P1`!MTNv+I97W zc+;3v?38SZ))eik1M!9`*FvcL#B;=)2@%%H+K^sj9KR1)Hqq5%MmCJX+JY+iE;A0U zH7znKZS~q+)(ApZ@8~k{17sgni325JCKhhQI~4P>7^$8w(%Up)DpC`rT*oG~S){*Y z2r+BdNuSCm^HXVI5wV61Nh_?|ia|0?aEz|F9S zv}mB*rHgd>Ji3XRrkYBnT5!l0&L)<*0U4IMCxeUqD?An#SoX#BBM<3of54~aI_88wbsZS}=8p$kja9poRlI}K}Mhp|r@ z1I391Xo_k}xhzT(bx8e*Rj5rig5szi8AJz)gNRZ*TpXliW7RB2p%0zNWZ$ZRHw+81 zW28-!D`Ig@;9+D%KCcgvC!x`rW7)d8ReBnwr!o@@kT=8Wn7?WY&*C+(do+lNEeVn~ zO2bWM=4SpeZr5@P*EK_m8N`RLDWkK7phM-1^#KROag0v%ieqwVcM*QFFj3ph2H|B} zB>IpuL&COnU4|kQ3f63)e(dPNUSS_Jfs@h-7?O19M(qnCuW1GgG>z&A!Llg`X%f1u zY05FH_WC* zQ?Drn0%c9wD(RRKQ7z*$*cv|!Yc-GSLlr?XkJxAEhYw`odb>7FBgm=Kglo=7_xR(M z>|!GTb5mvUqIkrt_P0c78&r05Pqt!&)m%m`)@OIB12kG>GY2YJG4umz@@D8*=rDPW z``lp*sZJ3rpw*gAWeet~EK?W-^@@0ffY*he$Y)gBWT&81QCgx^4l^>Kd6`|&D-0@P zyI@ujFTKd9JCX)zI+wkGl#}6cD~iU(&}|CK!li zShXX5AWbDmIHB054$bT)REi97SDuLIbtEYp^9QACjyUC}dG?l%BQgeH9V!snhoXrC zb+U0!0J4LTJ!J<%z_s!-woTPEoPg~r1ah)q3~N?d(KEVcblx^y+;C&m=;Zq;lXIq( zGdO(Hk6UdTGjx(Q*diXuc_?d^McL^@g~2K9Ql3caZ7E8^JiuRO?V~ZKc65e2u1i*+ zx_;I?zh4?lj1dk4T;gZ;W2Y63TPKl74x&pe3U;_esi(6WKxs}5p!JDt1? zIHIuCGM_ocZaKC9!F=A|09_bzE zsN7$(M()62h8F&)^32@;a+Q0-+^zBt_lb?E6374{*Nq||p zXNcCb3MRNmgx*L)Hn0P|9<9?SnCFa9XfE8Z9Yr(LG;&6Jpl`RgOQ*<2bpU-^JPRjT zXK;jHFIv{uAsf0tGFJ-Y73w2|hU;~U z9hv9YhzI%uv`Ri~&4nLAeVX`ux28IbG3$jgS{bz&^l~miCg&^6bXpP?u)Vu!~j_kTncXL+a#R+A1<0izWzp z8WGJWRb}?LTM>dYqA{`(374k`9l|n>Pnu1X@frY|x!W}+jKfL`E1i(}OmerfTYhv4 z!2@q@7?|P_*&b1UIxFbqgT;|}H#x1D#2fGdo{s~S2b%GMMl4l(V6IVbWFc_3jmQF_ zRb`l^Lf3IUPMa%D&y zy17<5%1!3kjN_G^@KjzhgN;6{IFkDKUQKg(up*9kLWa^IG75qLt-3~$Ywd<|1&Lz1 zyhiLKb47!aP&f|tbGXf;g{jz*(k8bHx72$gDX=TlFE>7(c||BL<}Ha0_chxm8?& zX36~Yk#~lzTa5Hfx8D9DUEW%N%9f=YI$S)Cie#iXOxIYXm2TqGw|ec{{CQ$ewooub zrkRJ-qx@LGfN6)fjUN^#^7~AQ_C7-*5w2SYZL)f6pP;(1S?wtliMIKv;#g)R7K`+2 z>9W+D0w*D}feDI9gsa}s99tlA!?VTdZi#C&JqxKZ zNPtRv!@I-#yEkS ztde<{jY6kBLYARBxiuj5$-u%5=_1X;98=F0M+iy_9!O6N^~Mc!Ul_n1lkYn#iX$`! zN*mt83syZ~vAOZZN4LAJe)ORHM)cU6qFhtgi9y9+ajkWLYTR*TROPQGJ$%9HK%__Xw^1jg<_80Ewmd_aGRt8)=GATJ^19k33v)vE{eIe zQcx@M6vj*Za|d+-_J+|YO~;3AE+pwjkD|A{8f)ex70e@Rw}Uj5P^8pRM4h+1!0l(Bf(t|>~#!ndR4yg(wY1t!kNqJdmE#8&cM^;p> zn1V%HnjNk4ej9Sc7*y12tZ=s~Nm~u4fh==u1xpbJY4uIyQ27LRA52lqmk~v2c$4NR zD*~@HkL0JaBGrDnUM*3;AHA)Mn8EwcgVJ_kCgas z+O32%UfHjV63;7Vt!tW->_l0+ZB$L76AZ0@RErAJ^F?r@rai3zUAk9Kv|P#7hBY)9 z!x$T;A;l;u(!1yZKz7wkZM^P)IVhU5#9Ed#!>plHmuB_FZG>Rx@j%sTsa}x`tlv3Q zxzx_ANC69;F%I7CMi&cwstxVDaU3SF5ig|f-O_^wyy$J7EBkc2eq|lE9k>0xT{OXiJ zYxOG!G}?2ZaN<>uI*H3-J9sU2i6ej=c&${$awOaB!ajJ6XuE|}(Q;a^##J2Hhs6`3 z&}^47yDdT$QGlAuEaTFh+(@n@zv_NyAwsqy0oaOqR2qi1OP$(aMU*;GylXBsKwvu7 zsISA?(E#QWZ_PEp3Ccbx>L}t~td^@@8itILKKq^}OBfEN%JwuqWHE=pR}6EOI@vz2 zlo4p?zi-W5`If|f@=_)H2z*d9sdVY)YqAsAKyBTkg2-v+N^WH-H&kodh|`QQxppeQ z;mVP#%(Ci&@nf+AX(ULik2Nmc5ZQIFrN)|gK2kUG@4DM-QMN}J$~j2+X#T~O32-4aa}HQb8k zB=Q1`fv28}l608DjSIpCB3!as&;Z3MM%4Sfc680*PqYXgXhkq1NhnT&M{|x*f7!mUL$FVd5_W~kosMp&4aj*{OQ3xq;Qp$trH< zWu#~5&KS4zd$>{3PFJWB2O3fHJ-4zmcY)V_4%CE24|V(p`ia-vURv-IwK%`7hYGiU|!CO ze8rSR(8(cLt=gYVkxWS&4Waf(6yhxF(sfIUBYTZCfg3H^s`kMf&-V*!Zq2!uFgUBs zymgO_IdUh>hefAZG1Of!RD_rBGly8=n&g+_j7}gZb3;9MFRal0%>K=`H)0B+a*W1E zdlGL9PgEz#AL!~?9!_I+lq!r36m~6 zBhA7p@2T>VMX@T0AwnLmb=%mo4TaUZB&3L?Uj^x2q#?&r7@LeELrQxGPdV z&hbFW3XdU1v#9iw)~V)-q9ps$WpSOkj@-Kz;_kZ((xQ;~7t_fsZnkz83DLvYA%3Vm z);!=Zxf7J5P-%X)%PLyPq)Uv-n35XpLGCa)SGvjDdIGoB^|DyLhGZUyL9C&)?9Ng;H+!|Fvh*Z(B;6*E6uAuObE{zG zxBDt8GNLj=-7)2H>~t{v)}(6==wi9#K}Egg!@{X&JOuJu5Hy<|N<-AH8?BO^vO2UXrN6l9l~idhwgPXlprY~H?ricx zRo&7X6^Sv*31rvYjy*I57KI5L2RXtEV+(jHa1nX8>s?(?&d zbj>a_ZbK^~xvPft8n-N-&AhLbhYF($M$DDYX~PgWaC72TTqD9-jB7jHiHL-HU=lw{ z4ijWovP|PwLsh%{V7`?@v+UfQDo7RdE5=kd&55j;)rtBe;pn7x--6ce zy)>72*)mmjMn1(!#uD*(;Yzt#5+$xwwFyFy5J^yBqa~SdXS5*;FZg69oUlSGvZm=W z)T5K4V{5CHB^wY}?*^&R^ED;x=400ORew2ITc_*1)RjN0Gny-k>Dso8c*(MP777y& z=gegf7Pk^f;9*IfF%k_>gmZR9Oj(w;UehH5v1Vn0^1)qL+QO+U@>kV!1KCl99%z`S z7q7B+SheJXS3GGg*~4Xh_eWCwu5Bnbi=6x!VX&5zd%4s3iK3>ABi4})6gZJ^!6NtQ z{*pKuMR?h8D!eb*R|e{8Ag7vC80D~Gg&z$0EETu>vdUOXih438zeVpotyx!|R#W3N z%jy^?U0-K*T(07}U-5G1AM=%uR_$F`rnSEbD@g@SnT>;@imLvE7IYmC#vhQOVjpu> zYUAk(#!Vf2WXIH6OYe;Ens0PL(~cQUVugdBW^0q}3Hzifcbn9K*jX-Zpw1;-yfJwv zxERUtPYtrt3u~FRHy&z-UkXt_gy{JWU67lsti2J-2VGqiprn=IK=v9Ju!mWDuZ)>e zo{z0OcH^kS&~jQajY0k3(-CJ4myh7MHdq}lU*xZ2d$;|rH|2<`xizgc-}4o=_7_L& z?kGPIa(h7!UOL8mWCVLp(JbvOoK`QZ4rGG-fr?PrhX#w|u~{Wk7s+1G%oW1eF3X9g zJ42OGsUGvJaYLD!wV!wV$~@MS5}rkrJBvnGtK2X?h&BXs9NZ6rl^)n4G1Fm2PLm>)RAQV8*zQqKX~NSuo99 zdMQHYf8NL&cy&{n9v%JEmV>bG6$q{^S@#Nhuyq4u-xOA`64X(OaFaJLK`^5;%glmo z$fwURC3Bm_s?rl}9Ahsp)Y*2so4ucuR@i$d;STpQEp5~7sdl7>XGQQ?g|YYokzhJe z>={GleF}m*C@>bzlaUJYw9?Qj+JjSdBZeI`;`uTKT0LkOxSSXdRW7v-#8#a1)y7qo zX7q|f(KvOVK1!B|Gzj(lHQR_Gj+JVjEN0``a6g|!<1HZ?r(l?wfiYiv;7mThoe#Y< zt_@5kuWvIw!fJaBpodztNlK7IqDjg+*NHQNpCoL%n{8R6)iB{#w#o+Ri#eS|=3H9jUNUd8zFN5Z(llX?d3$>48szNX4nbILFIjQ z!!heZP^-nAxSL$XMY1!3#?u_cgFLWAvr9!zc*|ffK9=vLrRv%$Kr)D)&Tdi*hzxib zN+y|DG`uF*GJ&_ZuqJ5S)N4yI_i*USq0&QTeeRTO%h7jdQ!^(Wk(p^7LMC=7Nr8{- zxEirclE<8O(;4%G>F;#g^oVg~Alvj|w;gU@ObB&|@F zsjVaninjRU)$C+@nz=_p7$>z0H;?t3`YBNj>(I_rBm6kMTV5&m)1)g8;SO!7`h=OT z*+g4}c&R}4Kq)7jzW3F29akOKsH#!NQB|X=s;WjEwYSt5V~iSOOvYp)A|fIpA|i>1{7*y@ z5fKp)5kV${F(zY-G1;3=Rh?ATaa0{u$LqT4I`cY?*LCK&?rZu!&wbZ^p8Z+h_51$T zTF|t0=&Flas405|F48a!`xS=d}@w;e%0r?>F4M7neQ3p%Wz77@5e7W3FRKX zB$%@ezvSeb65@z>3c}ZZs;twx5dFDmXOM-8;C;UQ0%}*~0zj;mbi+(rw z?k^e<_V5>dwLbVI9S<0Ozv!@6YkuL|uD|#ofsfZO`s_b{`I1wmqe+FN>|0V4E11Z^f?P3aXco1wazyW?|I$`uVYw~vs z9bjO=HJ~fOCCzZV3$z zT>B1ur*axT6E+7-b$EjB-Q+;$qDFw0_aDLj!tbHHbN>otFUsJv)vv>Tc{kxRwPyJ2 zheT-j!apG8pf7wzmIb`~bbC^q6P8l2TMm6R{df3-`{Cf1-ACZt(NjS7Rt@<6Tr$8Z z@c={0Q^A10{R`-S=6m?{PBwgIG8lUMKjYyyUaf@MtQhdOjCbIWA6&uw)P6Xk_(Q1U zVLy1*hYd%#96;EJWBA_0o z=W-*QTyPdhT8M&U(w=~R-{ycms&|3G)C?f%<8ENSI2QWylVzwg`Y|9pItRY>oi8+6 z`vCgeh81}9l@olkXBR$Ou9_SOd_Cn&0t$-yO#qy_`p-aD-80btFZG;<$qz>UJo(1TCUoPY zd;q-g1Pt>YgGvK`2m4)~g^oT}z+u8aLW)fXaG~tn>9hI-es?h*d~NJE0OwEf5F+Jf z^3vP6(8YpXp!u}VK}HM|mAntJJ0ajd%6cFyQjvz_&7rfuO8cfX$Y_LsipBpzpN-;HOJ!NPI^H z=~90Oy~TeY=$Z6~22FQT0NuruP!A(OVC(`s$`R1s(g(lx`*(nlhC0w!CkJYtEWq8$eT3KS1BCI9((DnsN#C7BqnM1J1Ou;mE=(P|Oowh!}PWLW$}j?!`5r z*5&6ETGE;U`{6sVuYWM07+wK*Xa5Co6rd;1zg3ygx^7-wQ@K0z^a`~@-TN5 zoO-Y52++ zvr~}APrqkDI?E0B7upbah#hj7v&pAJgUvXfS3IUpU|}j|qc@E15BzWK=@+z&?gO!0 zvD^gH+^Oc@Z=jBPK&s0R1}>*RS7g<&o@R?tMzc8KNs`1+gQ6dFgxJ`cj8BHUjCb^s zBPmi9Craa4?mCsyT4A%dJx1>?i~Qtd0M)vL8zv7oyR}6%2G{zv=5gmA(6kFRl)=T@ zJ58}{YM->-nDSifcoHYXqd_vIBT{mF;~9ZP#W+yNz5K1q^IuP^P=csjAGO)Msh$h7 zH{|A~X>;E?KzVbVrioElzD;J!XLWqsF6gdI?Y35Ie=-_5^}iUBnDiV(+JML76UJ6M zmzyYNvD1s^`js?{EUn7}w|+gBdGznQAc$3IqW*$3S|W8d*5TDouZ(d zpL1AYeHvRH3wYfm*fv<=izjV9W%@p?nB|y}&i2!#{`cd!wz8A2Y#38QTGEaH*+4$8 zWv%_3`_PUV8_O8kP;qX=)L|9WPsGZZ3a`OnHXF4wrIAM8auhlWl-jt$7z(m|ef^HscbrNv5CLw zkj-RgP#5pc(DFWZVPUGsxI^pJ>o9+et&*8$|2Gq4UQB)~|zS_9e>y!7cUta@M(`otuv0FN3#B3R&goSV1US;rUu@&YI=H%=4G=2oeDfD_sZgQzk z#6KsUG3Q?H> zDq#&rH(bg1)C}!&$GR5N=jpf!qHHTO5;OZfVRQtE%yqMP{lOh+FW5HQfAG_p%eQA( zcjDXCs97PpcjL+?n@yM}tP5f*_qsAJSjwZyo@d&G3+VkipVqC8^_Cc_4_%kB%}LHN zB&U5!W8#@h;s|V#Qr~I3;S^*jm&Sc=d-uB7vWgOGqj1>P(KbYJ62sC%9g}`+WUMuy z#R)eL(%6rcqF~fX?eySCJL?v?XtxCgZ+@O$ByCKsG373SPBJYkyxn^GMcnK2={lyT zDLjV`^t(-Y4ziW}C@@#ncSO_6gRV!F#>&lC(6?+7AuTxHP|W2laQa9l(KL0USIN-S z`(D|Qq}@C&Ke(~SHkFU)vMNyD%yE-yg$z>_x{Rit70DWOE!ln2TN$Dw6rB=K5mw{d z9L;bWUA?uV4wQ%G1Qc`H)gmPkQx0pDzKNWbHGx;veNTrR#SSxELxN8 z;J|oyY7{Y|g}bS~i(?wU9bI}Zbv-++i6f`S5YKA4;ng07L@TLst39X9qeUpm9^9#C z6eBx43jG;Qt*wU8luh#%THDu!EIo~$&}ZQ!$c)$1r?+X|`Fx)K=|SfTcDCQ`o=oqa zj^mQ5Jx64zGWPgrNSkL}T&a93x`iXp_d=62B*RrpOFTGMQQl>S4AH9(ryJ|>b88CiQwoM@YIAPuaT zWiCn*C`WCK8=Ubq3|_zxU<91f0LEB5tt*P^)$J{v~vK8H&!KWO7$PeU(P z&-4g6W@fS~-3ZS`k~7KUB;_~pvW-%bc;hR_GJAg${+>%b406mhrX6tOUg?uL^r#Z`SfHViC>ZGJli9?{HYT( zKaRa~=rbSuW`phAF>*f@r(L{;lZ=ur41SlG659^rWQOBhlHx`AHgAbHBnW*N-MZSP zviRw9wK565FhTBZ4`vN>kWVRceS?#mc5fy(w$@6YHAS}s6eO!o;Ak_we>H93yIHcE znNzr>NKkGt!={c$v($bXqn;q2|BS0}QtVZE=5$Jamr6L?d{itip_BA<8f~l6K9*VK z`cqz$Tlb+LymwZiVu)LFDx;|(^qoeBWQpX#GLVi)E4&&5O zyBW2(;Vnb5jKEzMc$Wo`MY_8&v^4WjqenHSJ-jZknZ?TE)3hsBrbKGSikW_WzR*YYEX{`X$F9!h zF%k_V3BK1)8z+pqkw0KG9w05W6@FC7YURi^x4IXdsj96Eb8jxQ@6t(4NT!z{>55xD zqC+Jck!58VR*02gULs8fBQ1F>Q?L8lv!)%(#&B#ESwpt1G#_H72Yrc~W3il2^(ZrN zaDg_{&LVQ_?Btb39Vw>PTenOfpvz2w;&CIgK2C{z@SI||x)*3VY`4%fGB(g0Zpf02 z$+zukN_TimnxpsCV#Gt`=#u;=aTG3pu08tcc9YhUMj;G@RnK;;qa%m1M_}2sbe%ME zUzr?6oRA4EyN(6cx-rHQuU+q>Q4tl!TTV1qibxBgouKFIqgy<=s1n-P#OSy&iIO{K zQ_i()nYPQa#lp%yroCFmp(!IN&jvG_adp;45{2BlTq7-uCj`olnQlUxa)!5@HKK6H zx4TBKklU2Vr5j0U@mDN82ok?0pqx~5R6BiL$%-c1E7Pxr*75UPMf#6?gzWQpMc~!F z#;tlIC#oqD&8-`5iphE*T)(;3r>coiB{U*?{l9!hIxLHB^O79W@V6O_^zsBu94f16 zg@r|qmTE;=oawRzMtJdDqqk*+c*2~rVwKXqbRJ2(hMueUrg&b<=g6)Osq;QPQ6aN+ zTAK*dmdTv1$2L6YzVSRfmCE*X)?8g@#p6{FmvFXQhr3iqAaLkY@J z@eCW?f@s3g_et?K2bWm2Mv`lzZw-^|xeTmf!-q2t{&~CRL=;(=P{$q|}Lyd2_OPgr8$D^;p$Gb>`x24Y$oCamXB! zBLdr!M|W@Vss*(aQBa+Uhb+w#Gx!I0Gf}~Jcbft^v6?*PagF_vS(@8wPnkAQ(bCK7 zlv&K2mS1X?gfqwWT+AkSz&7+OvP*w2(L%t@w(d|Dg=liJD(%+(;QqHp>*`&^9ba+M z9cR%q$|em-7c%w9Y*9iLs$+cl(# zjeVOVuvf(=rP`cOdktblg%s#22fr11I=C8I2YpA7&lN zlle$)zF@H$rPJw+7lv!;`3vgBhBO6AAKN%$IJg>7H-0OqjMflPND-IEb?qvGdS}QQTd+8`lEz8B;oa!@iMbSGqV_&-x69Ded>us;YEbvmO-WUuO_oYo z?PgbGD_uQrdtSm3WtP*ML-I$A93Gvj)F(c`nO$pSZ5zfpnrH23)A8vp6R#Q5swGpy zWA|bt;*JpF;pr}5INuY?VWf7f-FK}Uv%X-Wt$t;CDuTN+>?RwbkB%R;9Eygdsnr?f z=wh9iUp+M8RC}4d``{dKWYf?z_nFX3wwWaF)4maqwNeJXm7 zGh3ppHQ(N)Y*xCPrP;gvNyd4#UzOoUbN8%rU$tjJUybctR&Mtrg<1BQj)Z>ejAvs~ zy@xcKx?P!wLCC2{`RPBpvSo!fqtGF><%tp$-PxPX!;dU>ihtzvfW6jEucqf+QjIG! zv}4XnC3qGLT+`Rh60sWnFwRbQ(iDtd4`z5Br7jV>S?8g&7CAeE&B^LTDoUM+dO=22 ztgFyM_w;AgDw%6}-c>*D(De~km|T3zOqFt?I43fyg(IYVK0e0aB(a7#yDe+HlL~U> zlrc~jsh6=S9k^OcI$rAX*+Hk1%hiWgCR^4ULrls6)c8yby=hFb`7rKbd{2(bpbDXc z&^fF)-ij)qk?#mL?ZKcztX{Q@;`4cd9Ig@394sTt;;H;XDKE~zYST~+9107MUMM7# zY+l(Ly}&~9nj`y%^Uw@Z8dgttKUslnGI zh=qNt*9i(WSE<1bsv2;5X{UzDVZV_1b$NDWx5}AtyRk0wmUkP9Ka{gmIVz58j>{hE zw~NuAMKk49p|{m_>)j4oEc(c15}}85cktXi3G$9ckFBRktZE~hHnvX+Z6wl1s;0?w zJ(_5jjoMvC23kWFbi#zk*#!IjMWU}h@cY&zxSD%>+s9>NLXZ_0v^$i66?cZahexjpccKvo8B zI)C0EuBRBy!U&Up|4?7PX+ahyFt;6+p_z8n`qhXsQo}&Q92Z@U|ME~X`|U(V=pW{b z8&$0`$AU%M=vkR;9D9o z{7g!O0GXF4+A*2+Aw<8SKtaZIykes}h68F@EeQiimY>?!vP10S?N-@&n+1e!Jw2J> ztT-k|)od$O#>G->?+hlPXZIn3YlQ+S8Le*N2s1X_zjVHMg^Mg^=w>wo?CI7(E=N40 z3dbcW+<8Kct#!l@Aexo0Se%*+j>fQ4f|ZAnXB$I`cOF{U$m*jBt!zVy9ADIM>vK#d z3%i3P2)ZX!Z}1X}=NgcmrWztMnl>a=vy6I=#vlz|Hr;Bq9*6?uI72$c^$QG{!61}p zbjDGMb?$;`YIF;Ws}$uKa3v_gToY1>=lk_6tCpL2s3?HSPi~0QkbZrvHIF`1ja#v%&wd71L;m4xs+TJMcu&qvG}E~ zy!F-~{04ieUR-7=MWm;SRV)vFYEwLIK$@#x>qvXFZ7?=^Yi89drfbt?^+cmP$8N<_ zVwlplk)pKE$W*hDjAB=FJBDkW^%jNr@f5<+>=fly_=~j`*TQGDdllLqHPZ5cULJ2z z_9(UKR79y)>oy^h6If7W=n~ zR*C9LRp|&RtcW6P--n zT211SDwKRObEg1BPetW5M{r+MFV(E%r%lgF;yO$wac`<7Nth%UDB*WHi*xl3w1MMS zP1nTsCrZ-Ck+hIjF*~a=qa&m~!w`2ZtbGojsTw9drzO%jWRhZubV%8(TeW$yrpwt+ zRp;mUgqloip3tO>Yr_k;{i&*iVt2#LZ5LriZCgZET91ASo_6CsBe*dLIy zpnlP9OMl*XfH`c*pt~sDn}T`agD#SpI_@J*K0+Fl7u3H=iR#K|%aUbu__q#g5PVm) zS?R`=cgxxxI)C+)4og)Rj8(_W!IrpMf|#%J6J*n!>e;p-L2l)&&W-O=9wDA@48&p$ zFT@~yul=~`WMF{Asljl95Mv@DHJk6nb}_oPCh)UIhXfvKYu^r@WXrEPsPSWka?EO0 zOD-wI=3BLOU)87-o0{Y5bIZM$nno<&wcLk$VAENf^q(}7Ezz{y_Wef#dLNx!mzL>LdqU?(hjiPuhtheOZ~sO^ zI%!2at|YQN*@!ESyK7}unz1a3jV?Zs+N(WoE;Qyg=$P)GYR3A?Fx4^Fgb$99`o`$y zIrI#7f<&%QKZu)%T(+H8Ll+C{hxIb){P|t}G5-UCk1B z+~x?##4MwuB}|LK3oxVovT1;vXxXJfX|oim1Yl?Mv*?v7SljPrbHUX+UTa8FFj z4w#k~88B`#GM016n!8!3EGYWKEJ!O(y5gRL_(~3jE|t#Mo=&^j-D3 z#@HNRtL@tt#PibWf!z^;+1B8cDBFxGTbB z5^p@?&TtSTZg}zoUtJbEsxz{eb33zH-Qpt1sSRK!$lUr;%kfq5RPDpn%814g!BD^O za^{G9c#Ik}8Z?NpjCZ9yS&}D}t9S{wb`^%pxh7Y9h?&q7D$8o0BB{EtlAv0Drf>Oy zd?}yGBia0$26*1&1o{cdfC$C%`DzX@m? z&JGEZb6Cp{(kSh0!q!nA|(Grz(jgtz8UOV|xW7RyR7xnSy zY-6`}RM}W!Zfbqp=h>`9t_#D)JZbi1CiAje40p^p7lEP42Y0|vt4G-OSVNsKWrdv7 zl6hmke5}j|X}4FSn`r)lO^4ubH6WFm<~`JLHQ13nh9l+= z1vA`;F6x6O97~_U9+RQ-M}zv}WGJ1jc2t)piWP2-Z+5Gjr<)kn*}d6Ums_a1>|r*| zMj+O2lOi42HacdZs&B^YwzUZ%byQPW2GbBTUq=-Y`&}wMy1Yh`E5LSnt7pHAJi*bj zqZDpj;z-cvedYP`eO9(~UXj(2Rtt)qxA9g(`H>bca@A-JNP~_>(Ps4^$?*eXrN-gK z7K(jk8G63N)Zic_akE>vOnwEfjZvbeZ&_q0n5{JHJ7CRFwV7>UMQG<}a{eM+IbcDD zn(bwy)?~h?7TbX#xqnXKZ_#5VPU#EH4r{5}QGvX>#z^N{diI`ZRe0f;#iPlM@mxa{ zdn>hEkD3LpyJfg4igqw!sEQ>z`Ek5)tt3-;-|D8f&+z!g=QE0I3Vfj~U8|IDcCH EFW=h0;{X5v literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1_mlgrib2/Makefile.am b/ifs_samples/grib1_mlgrib2/Makefile.am new file mode 100644 index 000000000..3d12cc788 --- /dev/null +++ b/ifs_samples/grib1_mlgrib2/Makefile.am @@ -0,0 +1,272 @@ +#This file is generated by make_makefile_am.pl +# DON'T EDIT!!! + +grib1_mlgrib2dir = @IFS_SAMPLES_DIR@/grib1_mlgrib2 + +dist_grib1_mlgrib2_DATA = \ + gg_ml.tmpl \ + gg_sfc.tmpl \ + sh_ml.tmpl \ + sh_sfc.tmpl + +nodist_grib1_mlgrib2_DATA = \ + GRIB1.tmpl \ + GRIB2.tmpl \ + budg.tmpl \ + gg_sfc_grib1.tmpl \ + gg_sfc_grib2.tmpl \ + polar_stereographic_pl_grib1.tmpl \ + polar_stereographic_pl_grib2.tmpl \ + polar_stereographic_sfc_grib1.tmpl \ + polar_stereographic_sfc_grib2.tmpl \ + reduced_gg_ml_grib1.tmpl \ + reduced_gg_ml_grib2.tmpl \ + reduced_gg_pl_1024_grib1.tmpl \ + reduced_gg_pl_1024_grib2.tmpl \ + reduced_gg_pl_128_grib1.tmpl \ + reduced_gg_pl_128_grib2.tmpl \ + reduced_gg_pl_160_grib1.tmpl \ + reduced_gg_pl_160_grib2.tmpl \ + reduced_gg_pl_2000_grib1.tmpl \ + reduced_gg_pl_2000_grib2.tmpl \ + reduced_gg_pl_200_grib1.tmpl \ + reduced_gg_pl_200_grib2.tmpl \ + reduced_gg_pl_256_grib1.tmpl \ + reduced_gg_pl_256_grib2.tmpl \ + reduced_gg_pl_320_grib1.tmpl \ + reduced_gg_pl_320_grib2.tmpl \ + reduced_gg_pl_32_grib1.tmpl \ + reduced_gg_pl_32_grib2.tmpl \ + reduced_gg_pl_400_grib1.tmpl \ + reduced_gg_pl_400_grib2.tmpl \ + reduced_gg_pl_48_grib1.tmpl \ + reduced_gg_pl_48_grib2.tmpl \ + reduced_gg_pl_512_grib1.tmpl \ + reduced_gg_pl_512_grib2.tmpl \ + reduced_gg_pl_640_grib1.tmpl \ + reduced_gg_pl_640_grib2.tmpl \ + reduced_gg_pl_80_grib1.tmpl \ + reduced_gg_pl_80_grib2.tmpl \ + reduced_gg_pl_grib1.tmpl \ + reduced_gg_pl_grib2.tmpl \ + reduced_gg_sfc_grib1.tmpl \ + reduced_gg_sfc_grib2.tmpl \ + reduced_gg_sfc_jpeg_grib2.tmpl \ + reduced_ll_sfc_grib1.tmpl \ + reduced_ll_sfc_grib2.tmpl \ + regular_gg_ml_grib1.tmpl \ + regular_gg_ml_grib2.tmpl \ + regular_gg_pl_grib1.tmpl \ + regular_gg_pl_grib2.tmpl \ + regular_gg_sfc_grib1.tmpl \ + regular_gg_sfc_grib2.tmpl \ + regular_ll_pl_grib1.tmpl \ + regular_ll_pl_grib2.tmpl \ + regular_ll_sfc_grib1.tmpl \ + regular_ll_sfc_grib2.tmpl \ + rotated_ll_pl_grib1.tmpl \ + rotated_ll_pl_grib2.tmpl \ + rotated_ll_sfc_grib1.tmpl \ + rotated_ll_sfc_grib2.tmpl \ + sh_ml_grib1.tmpl \ + sh_ml_grib2.tmpl \ + sh_pl_grib1.tmpl \ + sh_pl_grib2.tmpl \ + sh_sfc_grib1.tmpl \ + sh_sfc_grib2.tmpl + +GRIB1.tmpl: ../../samples/GRIB1.tmpl + cp -f ../../samples/GRIB1.tmpl . + +GRIB2.tmpl: ../../samples/GRIB2.tmpl + cp -f ../../samples/GRIB2.tmpl . + +gg_sfc_grib1.tmpl: ../../samples/gg_sfc_grib1.tmpl + cp -f ../../samples/gg_sfc_grib1.tmpl . + +budg.tmpl: ../../samples/budg.tmpl + cp -f ../../samples/budg.tmpl . + +gg_sfc_grib2.tmpl: ../../samples/gg_sfc_grib2.tmpl + cp -f ../../samples/gg_sfc_grib2.tmpl . + +polar_stereographic_pl_grib1.tmpl: ../../samples/polar_stereographic_pl_grib1.tmpl + cp -f ../../samples/polar_stereographic_pl_grib1.tmpl . + +polar_stereographic_pl_grib2.tmpl: ../../samples/polar_stereographic_pl_grib2.tmpl + cp -f ../../samples/polar_stereographic_pl_grib2.tmpl . + +polar_stereographic_sfc_grib1.tmpl: ../../samples/polar_stereographic_sfc_grib1.tmpl + cp -f ../../samples/polar_stereographic_sfc_grib1.tmpl . + +polar_stereographic_sfc_grib2.tmpl: ../../samples/polar_stereographic_sfc_grib2.tmpl + cp -f ../../samples/polar_stereographic_sfc_grib2.tmpl . + +reduced_gg_ml_grib1.tmpl: ../../samples/reduced_gg_ml_grib1.tmpl + cp -f ../../samples/reduced_gg_ml_grib1.tmpl . + +reduced_gg_ml_grib2.tmpl: ../../samples/reduced_gg_ml_grib2.tmpl + cp -f ../../samples/reduced_gg_ml_grib2.tmpl . + +reduced_gg_pl_1024_grib1.tmpl: ../../samples/reduced_gg_pl_1024_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_1024_grib1.tmpl . + +reduced_gg_pl_1024_grib2.tmpl: ../../samples/reduced_gg_pl_1024_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_1024_grib2.tmpl . + +reduced_gg_pl_128_grib1.tmpl: ../../samples/reduced_gg_pl_128_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_128_grib1.tmpl . + +reduced_gg_pl_128_grib2.tmpl: ../../samples/reduced_gg_pl_128_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_128_grib2.tmpl . + +reduced_gg_pl_160_grib1.tmpl: ../../samples/reduced_gg_pl_160_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_160_grib1.tmpl . + +reduced_gg_pl_160_grib2.tmpl: ../../samples/reduced_gg_pl_160_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_160_grib2.tmpl . + +reduced_gg_pl_2000_grib1.tmpl: ../../samples/reduced_gg_pl_2000_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_2000_grib1.tmpl . + +reduced_gg_pl_2000_grib2.tmpl: ../../samples/reduced_gg_pl_2000_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_2000_grib2.tmpl . + +reduced_gg_pl_200_grib1.tmpl: ../../samples/reduced_gg_pl_200_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_200_grib1.tmpl . + +reduced_gg_pl_200_grib2.tmpl: ../../samples/reduced_gg_pl_200_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_200_grib2.tmpl . + +reduced_gg_pl_256_grib1.tmpl: ../../samples/reduced_gg_pl_256_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_256_grib1.tmpl . + +reduced_gg_pl_256_grib2.tmpl: ../../samples/reduced_gg_pl_256_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_256_grib2.tmpl . + +reduced_gg_pl_320_grib1.tmpl: ../../samples/reduced_gg_pl_320_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_320_grib1.tmpl . + +reduced_gg_pl_320_grib2.tmpl: ../../samples/reduced_gg_pl_320_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_320_grib2.tmpl . + +reduced_gg_pl_32_grib1.tmpl: ../../samples/reduced_gg_pl_32_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_32_grib1.tmpl . + +reduced_gg_pl_32_grib2.tmpl: ../../samples/reduced_gg_pl_32_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_32_grib2.tmpl . + +reduced_gg_pl_400_grib1.tmpl: ../../samples/reduced_gg_pl_400_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_400_grib1.tmpl . + +reduced_gg_pl_400_grib2.tmpl: ../../samples/reduced_gg_pl_400_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_400_grib2.tmpl . + +reduced_gg_pl_48_grib1.tmpl: ../../samples/reduced_gg_pl_48_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_48_grib1.tmpl . + +reduced_gg_pl_48_grib2.tmpl: ../../samples/reduced_gg_pl_48_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_48_grib2.tmpl . + +reduced_gg_pl_512_grib1.tmpl: ../../samples/reduced_gg_pl_512_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_512_grib1.tmpl . + +reduced_gg_pl_512_grib2.tmpl: ../../samples/reduced_gg_pl_512_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_512_grib2.tmpl . + +reduced_gg_pl_640_grib1.tmpl: ../../samples/reduced_gg_pl_640_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_640_grib1.tmpl . + +reduced_gg_pl_640_grib2.tmpl: ../../samples/reduced_gg_pl_640_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_640_grib2.tmpl . + +reduced_gg_pl_80_grib1.tmpl: ../../samples/reduced_gg_pl_80_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_80_grib1.tmpl . + +reduced_gg_pl_80_grib2.tmpl: ../../samples/reduced_gg_pl_80_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_80_grib2.tmpl . + +reduced_gg_pl_grib1.tmpl: ../../samples/reduced_gg_pl_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_grib1.tmpl . + +reduced_gg_pl_grib2.tmpl: ../../samples/reduced_gg_pl_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_grib2.tmpl . + +reduced_gg_sfc_grib1.tmpl: ../../samples/reduced_gg_sfc_grib1.tmpl + cp -f ../../samples/reduced_gg_sfc_grib1.tmpl . + +reduced_gg_sfc_grib2.tmpl: ../../samples/reduced_gg_sfc_grib2.tmpl + cp -f ../../samples/reduced_gg_sfc_grib2.tmpl . + +reduced_gg_sfc_jpeg_grib2.tmpl: ../../samples/reduced_gg_sfc_jpeg_grib2.tmpl + cp -f ../../samples/reduced_gg_sfc_jpeg_grib2.tmpl . + +reduced_ll_sfc_grib1.tmpl: ../../samples/reduced_ll_sfc_grib1.tmpl + cp -f ../../samples/reduced_ll_sfc_grib1.tmpl . + +reduced_ll_sfc_grib2.tmpl: ../../samples/reduced_ll_sfc_grib2.tmpl + cp -f ../../samples/reduced_ll_sfc_grib2.tmpl . + +regular_gg_ml_grib1.tmpl: ../../samples/regular_gg_ml_grib1.tmpl + cp -f ../../samples/regular_gg_ml_grib1.tmpl . + +regular_gg_ml_grib2.tmpl: ../../samples/regular_gg_ml_grib2.tmpl + cp -f ../../samples/regular_gg_ml_grib2.tmpl . + +regular_gg_pl_grib1.tmpl: ../../samples/regular_gg_pl_grib1.tmpl + cp -f ../../samples/regular_gg_pl_grib1.tmpl . + +regular_gg_pl_grib2.tmpl: ../../samples/regular_gg_pl_grib2.tmpl + cp -f ../../samples/regular_gg_pl_grib2.tmpl . + +regular_gg_sfc_grib1.tmpl: ../../samples/regular_gg_sfc_grib1.tmpl + cp -f ../../samples/regular_gg_sfc_grib1.tmpl . + +regular_gg_sfc_grib2.tmpl: ../../samples/regular_gg_sfc_grib2.tmpl + cp -f ../../samples/regular_gg_sfc_grib2.tmpl . + +regular_ll_pl_grib1.tmpl: ../../samples/regular_ll_pl_grib1.tmpl + cp -f ../../samples/regular_ll_pl_grib1.tmpl . + +regular_ll_pl_grib2.tmpl: ../../samples/regular_ll_pl_grib2.tmpl + cp -f ../../samples/regular_ll_pl_grib2.tmpl . + +regular_ll_sfc_grib1.tmpl: ../../samples/regular_ll_sfc_grib1.tmpl + cp -f ../../samples/regular_ll_sfc_grib1.tmpl . + +regular_ll_sfc_grib2.tmpl: ../../samples/regular_ll_sfc_grib2.tmpl + cp -f ../../samples/regular_ll_sfc_grib2.tmpl . + +rotated_ll_pl_grib1.tmpl: ../../samples/rotated_ll_pl_grib1.tmpl + cp -f ../../samples/rotated_ll_pl_grib1.tmpl . + +rotated_ll_pl_grib2.tmpl: ../../samples/rotated_ll_pl_grib2.tmpl + cp -f ../../samples/rotated_ll_pl_grib2.tmpl . + +rotated_ll_sfc_grib1.tmpl: ../../samples/rotated_ll_sfc_grib1.tmpl + cp -f ../../samples/rotated_ll_sfc_grib1.tmpl . + +rotated_ll_sfc_grib2.tmpl: ../../samples/rotated_ll_sfc_grib2.tmpl + cp -f ../../samples/rotated_ll_sfc_grib2.tmpl . + +sh_ml_grib1.tmpl: ../../samples/sh_ml_grib1.tmpl + cp -f ../../samples/sh_ml_grib1.tmpl . + +sh_ml_grib2.tmpl: ../../samples/sh_ml_grib2.tmpl + cp -f ../../samples/sh_ml_grib2.tmpl . + +sh_pl_grib1.tmpl: ../../samples/sh_pl_grib1.tmpl + cp -f ../../samples/sh_pl_grib1.tmpl . + +sh_pl_grib2.tmpl: ../../samples/sh_pl_grib2.tmpl + cp -f ../../samples/sh_pl_grib2.tmpl . + +sh_sfc_grib1.tmpl: ../../samples/sh_sfc_grib1.tmpl + cp -f ../../samples/sh_sfc_grib1.tmpl . + +sh_sfc_grib2.tmpl: ../../samples/sh_sfc_grib2.tmpl + cp -f ../../samples/sh_sfc_grib2.tmpl . + + + + diff --git a/ifs_samples/grib1_mlgrib2/gg_ml.tmpl b/ifs_samples/grib1_mlgrib2/gg_ml.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..653381493e21774af845aa2311e1fb7b2ea45e0a GIT binary patch literal 27684 zcmd42Re0N27X=zNOR~j`wq729IUTf{GQdP?2|Nb2n6ZOAWI}QAUM@Kb@ii(elHe8LPtpDeMD0@s) zG}vO|qQl{EVpLSLF%}$2x)&22r6>IUf4{)NM*scke@Eg=75#5NY8cqTYmGbp--qB> zI4TN@qNB7ZJt`0tiOL3B>8Ns1m80r_zik%PE~?l6wxXyJQ4_(o@c-GiME&2}{;2yahy*F0X*wkW$~sGGH9jea9b4jNXi^6T`BnE$@zk|UDbjiRcjSY+M8am@bkTb4d03t9N4?P z;8M={g2!$57ko`?RTzJp^1^XDXBLjQ6fPW8++WzOuw-F#*VMx5)$SD* zM2{>?uD7;OomZ^T@##@v%%r%2#~GCij!tM)u&PI^g7Jyl3tE5aP>`+EDL_l)mb}Z> zD!Di%s$|2{%}OE|S7K$8dnFW$kYDR^tzsA3j?Jn>{cr658~Xo0ypkv9Hb`sT{7!oF zvfVOFdyi*KPAi=WALx`hg!qto=kxrmlyJGMF&AfMo%4pXF+)*y`M2G&NApbf*2AB( zUouJJUX`C0@@ijwnAb@Dme>4mG_TD|e_qEH-SWB?IP-dpSe(~8 z#gW&y>pyw@GvvGhL%n$en{CJ|`rk<7@&5rqR8)z;6SBx06@~owX+i>s@RmmmfzpAA zfn$LufwzIDfm4CWfo%T`e~~}ryX%|mYvyb3+vMl{6Z{{8bAum3bwcw)t3xNlTDVtu zc-R>#7PR_*`WySc`>K2UdG>nhd)9c@_+A8}180L3!mGnOz|X4i`tYc5v+#k$<&g%F zE)h@S*~A**-Qnoqm%vj0VBc%sEbk9*!1Jf4o5!Iq*Ef1vdOP@9_*(~71fPYjhMPy0 zCGnAqkx=5D#P<<8@<);_IV#ziR3%c7ST)=(v^7*Y_%!g$U*zlPeeNCQIi(-aOY2qi zSocvq-$Qs_c-Q)jzT*D$!0XWFL~G*Hq%Fy3QlR8MN&O?Qk~$|hOJP%Pr3O+uC+m@G ziQU59(1K8AutXr$pXlB1>FNSLXwC!o*Qir9KNt&8CK6EqGH!O$t1Xl)j z`S1Fg>BroO?#6n&UQOTSiPM|8gW4xGqWRTRMmk1?3h@?l{iGL-YiOfve zmb@hOeCmvp^C@dmqf;)Yv`#*f{4RA-x|lv8eQA2{v}LJlQ+gy#Pdp#)6LyBLgzto_ zh8KrB1@{M%eD(Er?ziq^?s4vtt_$vT_i=Yw*8pb&b*Q2!?KIMP(w*kn=RXoMgm)%3 zNo<#RH_|b(B+@5RI|)zTnHo&pklHlmbjrZgdT9gF@zn3BtJ9ljw8*q%_Q`mgemUKe zW=*M?bSTm{LPeB_Iq_m75b=RC?+bMDzVjUL@a|nM-8tKJ%H7}f$XQ)osa#eTsTmrp z-E>(!4+C?8@4_v^>qEQ4Qp6TH7x5-;jRcd$)ReSFDgUJGNNt|_B5i28p8h>UNS~e2 zKg*J}B-@?+XV&Y?ob-L^ozf?!ElSyvG$?W>sbNw^QrDy=k%5u4NQp#e@Iqj<|BNr* zJKkH#_T|1uN~_X-^e6$`zM zSdtbb4NO8JpCfOQPNcj{+nko2YE7w}>P(%JRwccDMkM1+M*9ptb5l-SZrj|(IW4np zWyYtMPA`_eJ8gYRnLLI0W{Sc2bt(_j7el=rvX6;NV^GSBsoRztgay#XG$Uc_EWjxEc zkkKKnX7chRTjH_sg~XynSGa0uQ1DHlweN`k-@wwqlz`t~2u7=zSM%)mtaP8%b^Q;$ zrry)}LSs~$Qc8}NF3YgIN2}o4=w6`j_qu$8{VRhDLW4twkS~-LeiOM5)@hC8dntdW zA}Kk^V^f-@Hch<**3QV(4ylJzd#26J$jW$~8Ix(v?3|U7{UGOCu9)+0&huO~ht0a2 z?aA()`91AniaoM75eoed-VQDejtRB}5wp(s$UDVr@@@8i2y6(h3(|pcAVz6V34I=j zo@(yi`enVG{#zgFs_4?SjoLJ=u`*S@u4E`zw65-|`WH_zZ`e1|FZd@0!=ag>RUp#W zh5t-kn7Af!N#edFH2Gx8>C~K*T`A>Ld!#i?otQEvrE%(!wBPBI(hp~x&C1K_o$1cl zlzBQkK4(Ji+T7c@6LSaT{K~GKRViD@o|cuI5t|xG+L)LVydLP{fA2pQa0Mp$NifUz zJ$*e7yjOg`0@Z`HgC9doaI}B0m)94#Yq$$MN%~VgMc<=0(%ZRCxMSR!v&h-sNobwa zBoHHOv{SCVp6R{>?+f2_f5g8x&?#^!I54;(_)l02zYG_KZiGjNEumY9V&qzKzm$aJ z=_zf~*tBA)*5urzjwy}Pil^Vq_%m}_wjt|eX1fd`V?(up_WOFd*8swu|QtEn%NM@Nn& zdLr#p+^HAR-lvbxte4d$D><`DMum)1S=DmZiXW{6 z-&@Pu*W1uL-Mig8(sNWFq#NCWyPT(z=ZR;U2lck{H}H-24)vUImr|!ldn8%TRu(Ad zlmS|fYp}bn+v~2aOYXmPgJ-z6skf8oz4tgc&&q(=7xMh;9pk&F=%S zJMORUYwar;V1g9_%L7|Orf|i?Z%I)RZzw;+gl8pwh#XHom9i&gF36RQQb(jdPD@YQ zlm0FHGNW5$Mz3z=zI?###OgHp6em+<7^!eH-UCtqdHSFDxN_WCt})I{?sj@b{jo3JU)opNbKM)`gZu^l z-QF?omF{_-PCmug%hSTW#r;ILc{DGk?{JUv?DVbo4)NCU*9&T)A>r82z~Bpj)zc$c zks--U^4sLz$%bT8a^IBv)FEj-(ql8eWJd7nvP1ZfB&V zKTRtUSrwuJGyH4(I|DvH?S10;>1_?xaC_e~Un9Q-aIS^kY|kZcWsg%Y?k;p)ac_1{ z)aQ5%?(Xg^cW02>`{^-yh7RdB^@pC7zU%(Vo}uo5bFBJFo#*W6Jn!u0`olHRNo&)b ze(jjEq3fca=WXDh=P%`b>YeL3?CIy7?>Xm2TxQo2cP;lrSDsegInTA!)y;WRtEm=q zZqlpj9l;nM_pbnGbRn1#Gz4!2ABMk0PA0ufZk=>BvMACqiA>s;yft-yTJ5w(8EWRZ ztUohvWwg#n&S;VKclJ9l(}w|nNJ#ILHaE3XDwfnQ*xZ}qS?F!zZQ!lq`Qd5rnc($# z7kKx2V?A3vd%Xj_bv+mLt$J_QAs6K?@9OR>>+-mky6frzx638CvfPVY{aw6!C^%l^ zUZ#KWqwcF~y%3*oDGFjW?T<^N?Y3wWTA>OWDuQ%w; z_jK3$>fQCddW!3BSBz_v^Pq+*N0ex_xR$SuQ*J7-bXp;tdCp%hqs#AJ?!D>16qpw< z`*#Qa4V({74)=>>My^G^Md~L0j(kcQpPZc1E_Fs~VQK_$x7%r@((^MaW<1R3m9ZxC zP1fA3^h`Q^Y+6AYk=h^`iR?-|A4>I3(-U=7kJZb#54m2uMgV?*xOcd30%jXp#Jx`M zsyB2ex*obP^}M`IIxSa{zetBfQdl6Y5-E9wHdCvo{^Ja}*LfTIKKQ5kKKdF2k^@!! z)dDG@q;Ot%NMf19zKOddJtI4kUZg})hNk$FS0ra7Q^~O@?b1f2^MEmJNS~jPlhHQa zoTjFhO(~UpD*0iGA!&d3bg-L$kY~I5jH`}wh;yuVSgolz<@xeE<%q_(^4+=aJl6(i zW!H39rju}$a30cBWt}oZEmUr)0nMT=R%<9-pgq@SXvxlqySk^)Un=-1xCP|(HNIwGO*PdQ zfLK`R{>%NRd#{izO=H!D@aDn_L@@*hfpyj4D+nw53(BB{6-B@*I$>4XxeWXd~~ z&gv%hxAxSP-c4un?mCsJnJwQ*=5xtk5?>4(Et|C_tC!~JTirj){pzm66PdEbd zQGTF=@25}D*E{=YC!HT$6`d7bv)l(<@fxr8P)o|3uw7)t!Mum9#tvtXaUF!(k|tWD zRPC5+i@OY9LM`+p&uU*~UzBI9d#d}4*9Y+SpzpNrpud{m=pP+O3Oo(o4zZ!E5FT6^ zN=vL0X&-HdaGBgNZU8rsNu*km*Qx%@G48xrT^^={lx|8fnG@fN)x}NH6ltJ1RjMsNlK0AW zl?uukrHk}fxXCASwRj_+$*&V3@q<)JCY7yf8CBHmAQl=sCp$l?3zRvU;vDZ>E7+y>q>PS-F;mhw1sMUHRz<>-8^33qu|-_-0;-kIR5}|u7}cZxW;LH)C0;7`L`S` zPgm|J_2e>gNkvwU%ALh=;u^z1v7(L;Xva0#CDOG1y2M#{#@TN-&-*5?|d`$fzDEDccqRj3&WWjR7LVL^_luaU7}zz z6<cNzcSd!Y;lR+lf8L z)#dv08A5Zhx@4D6E8mm>s$E^GyjFXGcc=VGUF>9?LtRF9SG}z3l=HP~v#W~MMj4>M zN=I#n`-7*h&l6}BxELtzFXk(uzjg(j<<-YZDKKX9M3z4%)DaJ5SKQD2Vs|o6nc>V27DAn$UP(?_}YxoFpO_jV1}&M6nA;mShIsg#f>Df84sb%W|s%W4!rgkNYir^pjPY27GU^oJjKj z3M+)|f|*|e)?@{~F<(g#1S`LlpCMEh7fX+oe#$Jhg|^*^JFhxRXepXWJK)^ztPSvU znbYL7sy~&t@*L^0SRfXYMkzt3#kECG^G18V>%E-MoFklnDlbJV--$cM`S=533QsU= zXghhA{7t=MGWaS&F6*O)Qh!m;$$VlTMUc;kQ)E-RJ6A?XmrBVuoMrW$E<`B?&Q?|$ zAz}PWZmPt|=fr@33aiDh(n?uUdT1t>?0W9H1lUJ8purb;%Y>p6YbQ>M{1JW>JRVr< zujkw1E$LA`4?Nx6BV38DsqQw;Lirb8maRcAr6Y74bqc?M&qjCQ$&Su24fV1-GEm)HkLJdqFHC_tJX1S}J|T;Xu8}0>&q@e=-H!E6FeX&DmK4hYIyX zMNF1e<&uU24Y$(W$N5-mr7_w**J97IfIqk>aKpdJx4~E5`x*EOP4svAX}!IBysNYG zvCHQ?>HNp}PPr{CU|Lg6$XCQWycV_=JBB4;z0hA+OUF652qvM1mN};DrUhorl4!xK zytS!ygKY!c-fdgzxX8f8M}z9#CX-zra(CCVM(1I*A)Yq(lXy`nYK%BWkEh;&nmkrvAl>812r+9@s&Iq|)? zUKE6K!r#&_d5Zi%S*!%*65wbZ@tL?tTq=awPs};`10A8VsQL6nx(4}!2;v)vC1e?@ z9{q~$Ne;kk17u3a)}ZULW`vs@O714($vpB1`GlFn#|xF^5&&J(#bx4QX`wiYxx^~W zUZ#z}ic|QyY)57@yMpg3_(er3FO88$Ym|#~C24cjR%#JoBBE=kr@Ob2r?-9wVC+!0 z-)(lkc1wV-?sERAxz+k=6SbvUR~aas;cw7q@weDsbiSjS!|E7>?nAqyX=o=q1rLA^ z!u4&3tQn>c#!5!FG0W80RMOPn3|a0&SM38)7`=e)LK7Xwu|-5f;x##*=9%ei8@4Xj zTi}Ec*N5rN)L^~bRDl9xc2I((k4jh>t~6CK-~@)`d(tb}u12&WT9i5&aH@vlWZ}G+ zBRm2qvQ6wEQsR86vwTrHD*h!cklq92btqo(GvAZl&NQLlFyGlZ%wjs7d`vE;GU>U@ zEczzd0}ta-_+xwy{)G5Sw8t4tLpPvlj!e7X(E&e2&Ln@6B|t_vL4IL!sju|E{8=Ga zXd^}m$3-JQiq2=(f^VI|MR8edG5R`VXJ_&bK8^1RvTP}_mz<(>Q9G)Ql~-y&Rn-R0 zSwInv0qU)->!8!Ep47fOdupP32;}d@(njf`Tqvi@!^D+>nQc#vCW?a@M;s31qkSFv z5~b}J0>PQ^SR?`Y12I6c<^{&Ep^V{$(P>y~9Adg>jfe7)agH9?W87ljhJ1EBM_V~` z$45Mk>_+9%d2B;&5|_nPpa(D_Yva1|(R@Y0B@e z|0X&SA-pmfMNeUA_9t799n7_5uF)JF1kt^fno4Wb4ssOWg?6qb*OeuhE$mQk5w}<9 zC3jGAvACm$3=_Frlv zu^xYhv)E0vz&^z>0bSy_Vjl@Fhu%W-q4DrC_?XRQ>TF0%xNO*DxM3_Xel)|DZ_p@2 zwC}@is!A1r2oGO!qo!lvS-36W?*)Fy*;AC_dMQ(edu;w1@_ugG`g4zdMV zNWNvNGhV7O6#_ZxH}jG^C3coO$X4--)KEUC?pNo@gOmnZDeb5h3*4y>%5z1OHUXyD zNX!;1NG0VY@e+TXZA;}5eTbSwE5d;npw}IH9c>*XatXG<8E_fs3c%>Twiaf^__t|| zsfF>gsjlgp<+*Jd+y(iB?jXWMcf1i+-af>}S?XGk!Qbr<(Ka}W-@^CfUC1Q*FD{mw z&Te2^aMApqA|^hSI?1z@&&m(!z90%7alJGeF!dy)Dzz-G9h~MO^>TqqN`be%JeCMvS zXV~rR2`-j>!H!@?($SQi`irhcm!@aa?WuW`LM|f{!6;1w201a*hj*;}I_#{>H# zoI>Y zgPCpgS?VxVm+DV7pkm1(WOs5lS%nylcf|_O8CV%S1II8Qx*H>~e%Mj$Ds~OKh>sxd zkYxxM>+M*9Y=#~~3X}~`v421p;&yxo!IC^N1OEpvjn5>8kPKy`>XRZS+Y1o_zK+~+ z{KjOw4^@u7Lu+J3GL?Kmtzz2?`=tKzWTlOAMn$!@nn@WTkC21X6`*i-D7e^&?=4V5 z3+^tng32T@@^9)Kxs~WhSn)|1Yi|ZmglEIkpdD~Y`x4acxML3>6_Ck}C@`+u?0w;; zwzif(%nz)2P!2o^ndV5wLU=yf1i_)U&=z|w^eec-4UWb3uJCT?2>isp3WJDQfT^{l z1^N|pfxX1H7M6+CL|B+83=|?lWub}KQyeAUl0xE0VI=ntTa8)5+-6&_AGwKqL;f`P zh#Mosh+`$Y> z9qEp{fT{h3<=~UaQ{*wS2AM{@CO(k$iC1_%G!9t>C&T5Dla6=jePROLk^VxpBnpTW z(n6Qy)``vK73vP)vjzcY+^KAl$4G~zM&cl0wn&O2_|fb^t{-=lolR}R&*Cr08o-4J z5(~jTh7L!LL0h1Q@LK3QbO5>Jc<%USUynRNZaPL|f8uj64Xo@O+Z|ge+XyHMN{6dE zvaxLR8nV##$~GVN+Uq(>gM6{tanSxA@xzyq`zVe*B6?FiwSi8hpDw2!0yTmD0h`hWH71@HH6wjb)+Uym+3e36)H#`r;@2z)HOOl_oc^D zvxuWW_uQa5P;MdzqtGdML$WeZLq%AOBN3Sh_kk-QCG3M8BhX3cL#zl-Cz?`&sbsPg zaSdRZ5ub)_M2+?Uya|GBm*HFJZK48&(pTxJB!(X)K*W%PS%bJiEuqCI3DQ2bf!b5y z<+^|+jt5);l;eeid@4Jg+t00L%90gujr1@)VN!+IXpjR*z>9_P)+DYA_KG4$v6Z^^ESMO2iU4xsdum zUMFNc3*CbjM;oKpu%_55^Z{5yP0*8sOrE2sf~>NLUPa9%mg2*(yJ$0eM( zewJY9R?IW16Mg_M#7~j})ru`Il~dytUH(UbREx?hZt1mjMV!db6G*X_SWFnf_vHX~ z(lg0!#2FHzDv;Cgmgqwiwhu=zXg!n+c>76cnRTaiEj-Z9*ef9ikT{2iMI3)45A9Ll zw@OHVM=NwQ`W}t9E3n6Q+vc_WV}sza_IwBHVC*N5L&$ggMMrV;5WbT_=+pFTdNB2l zx=Ix%i{o3d8-$Z8L4RgFY-7NR)9C}`D&iygp7K!>=)Ft<^NMN41lTD&BfOCY%3-OS z7$+RzcXIIzLB$fwh_z&0vKqCGi{h7Y*SXd_!>imuW)RhwoJEzOfNR6FX5VtT+(3}I z3PcxKrrKJ)>8VZNYkPf^7!+Ki07uj-`hsPsdmiq8QtNy1{nV^+kB{^ zZL#&d?K*S_q3oIVDo7BXhm5el!P*iERi3fYFM$%tA-@u{FthzUvJhmqPS|F=C((xd z0kT33@-{vI`;GmJl_Fy3Yg`gwlQ6ZJKE~b>hKhH^t^5z(%YWhDv%l$$k&TGA0B@$!_gIGA$nN1@327oFwUBa!rGiax^JDm%Vl7!y zSlKP*@ORnuEX!P{htf1%i@wWjV*)fu?W2q6-Lyy@qNY$X6{MPzkH{>%2-k^SR2%X! z?#E{5OTzzqzYrXban+h zi@gH$MGBh>a4~}`3H+COJkG>Y-O1PF3H%fGln|(POkeU7wiUYoVl@+F`3Lw+Y!yC$ zA^B5GJuqjRf$mD8ceAIYO4=>wZ0)|*M475q&;+NhjRD%QfhsD=(l|k9T~uZAI(ZN? zI=b7dfsq^nRkC(Av*yYcx23=3n$=>N4?M8nrk}>;#%dJ1G(saU;+|xBg>0R6Lle#en^jRC}^9DN$`H4><#00Q71jsz1jI3&f}5 zd!RPj%3Y<=VxI7qxKrvQRhKGBf6L9~#o}l_mn+3J1h{k_px9jAD9n|bD?aIo5X<`L zR@7{wHlY(wfv^8B%Ts?4Ylz*%2EZ9_(51=yfR$clbHxDrjSi9@$aZutbB~)Zxzxwb z7*L~p=Io;NRI{CwX4cNSNM~2=n$lD3$n9Vfs0mamUc!DC8DKZU-2kV&X?kl~YR7fw>>h-KI@s3PHrq}>0Vp3fLT8{!a2vQh zY=QdN_CccUA;{|2!3@OPM@>~6^td!OO&Am~fl(>>-n9cy#aO@ypll75Vz%|dZ?SVqp?^e6Dj`fc9r!8Q9V4Q6_Yu;?0WBkX| z&{SajYM7J|h<}|h*Z9Wt&g3-Znul1UY(wDDuntYPRkeJzOo7V7f7uM?T|gbrh1c3) zM;nw!OJSF>^$r*O9eQLt2cghF$Z7is^@BQt*vYbWfV|KP=p__q`(Zl_vd#}^Fx1aB z&K75bVcotJWQ23%ANWWt4aaa5tLS*`c!?$B{qYUtJZcoEOgtx#5dq>TIf%?BSCBi1 z%J^a|+3^!iMEBzxsCDdT{%^o(UkSwk^Q*|0w{?WxZlOVg6;YSs>G6;|;@zgpmo$ z64oVbG#)k|vb3=Fu=N8vtv^)CGSWQP($rRD>jcoLf%U9yFVqlv1W&gYLsr^L*(bv1 zVHpyvh1Lns2r$>BtUE1FEv+q0tV5vvNECuX2cZGBceYsT4a+J^lzE}KgZZ~D7ny}t z!M~IJ@!lARy~P;EA4sCToa1kFH-3-2L)WI)QLV{%JVJJ-{vvOZI{|9-!G57D(F*8A zY!y+Qd`Pcgn*g7p8helL&Li9bt{Z!j-3+QlsytrX=g!wpxh8A^T}-;AK}Lg+Fy z1%3%_w6(RBv|WJeL)Vbs_8&-T*ae?NZo}sx)s}0mZt7%MmGB{L)?u7rp&!88ao z5ae0QSk_renj2Z7t(R=`z??lb-7*O!0NRz&@{*a>2N+=0y=L~%^ggBlfii2^v?PbXpFIFC;U563^)KUFb+iP z9lMHrMf#(4@J>`T)s;Q zkq@c5^nFGkpW>x4lI+7=W@&mK)r2^T?ZJ2ui8xUi?dK?g)gdRdm4rp|O^sDL$-|Yh z%2;KTm?eCaVEK!7(v|93?V9Vns+lEG6iV{l zVwLs@fkTMOta+ylN34}(_Ns#vC( z4kxH_CE}wEZ%x~cM+|mDzl4JZKH+ivkoe`sICF-%k7a;muf<}?x9qnT*)XUnydRve zHvAsyX=!iFiXRmFFt$g04dYr%(Ao?7;fO<3Y$NbkX{5ciJIMW=tSX%1pwShmY|n&C zLdy`nz-KaSVFq7ni(_OOiN6^t@W+fY?-#=wh3@8`$+Tznq|+kkw!Ky zGkRgv$EX?66XPZ%G%=hoe}p8&Xiv8fL;66p6*HGKwlWzlv9?ywD`=ASqve8SjCF@? z5L^nb0S|I93fLIRc^hK#uBF-POBBpizS5m!2H zZ0zlrCoy|tZzt?CRWT=B zQ3X+Av^{2JT#jL=1+luVCac-<%ly(DG?g&=jnhp%P4`TL4Ey7E#!pB{F;)iuXOC?y z+yVN>Hs5Bk{MO1_Q{ST=pyuA$7|##l4CDx-{q)_FQ8U3#ds2QjJTBr zZjaaNL3D?^3g{J?qz#pSNS&nq;toE@cNG2*{^a_ycBVZuiY-O&A!`utv5ROq$01ND zJwlXo)O5_Jr?P|T@#JNyIF(4x=Wa-2)eK1zP6NzGou9OcO2}Etv&D14dm~UIR5Iw* zyUVKu3%i}JPE5vzI;Np9*duhAeJ8vJia`C~hW0hsM|?H*4gZ6vfd9rC0FP%n(g&FX zc=~DUO|!$)!`vHS%Y38Pc)@%W8i{@)`jHn&h=_JvhbYrqfKQbYUK-Ve32{ebtHchA zy&8KWZmc2QwAzfDx)=|DD*JkCW7|~geOqlP1JqP+W9eu-^1^n-Y%;jwr^JqpULKVj zwJxS-+!Vu3bC$(m?rc0@N-~?w-OY^guJM>*W`ZXnA#PP{v6wrtQ{$^A>@!Hl;pTnj zhvuUe8_*`Tjl1GE#ve7FHQlq!gcc$lksE*kkF`yO3y~rA1duglYBoDp^nm)`U1yPJ zh#u5MkJ&xhRiN!wdMo49%W5fcyYNYzFIN!qxZP|gW(k|iIp`l0ON22RFyl1(2K5S` zil3pQ>0k6ndOM4-Dx1b{k*b2cTT&Vb-ed|?ShjN?cogX8>dk^ zz)xg7)Zd^|SDqY5Z3PO(hW~?}b9`_tblk+x67%t@sK@@^k%5}*uR(O&h37#*pl*L# zb1V+)Mr(|jH}ALfvb{#eqbu<&P$4Qsl*HN~>9%6#6{h3n7N%5#KRznvbF3Qo+n^;Z zHbhKE%)?A8&9b?!1+qM~S}n`1W8eXfe%L-@9{wEt8y;f0VM;MHO*j#EEBZ^cJ$iI( zuY{(63w1a4Ff26mGnKcNwT-tGSt=O5##fIMW6ne`i2CnI;Wsgll$YNDlrC_YdWG>p1rSRq#o~ zx$gW1@e03|9mx)3S8})4a*mmOo!-i}rF1CDIu9x~Nl4KO4V z+!oQG9Ge%4gSP;daSNXcs;n7gSpsu3hmS*jAQsZiCyetAlM^<_*NGnidU?F&khz#S zY_4nm0o1Z&Ic+I#7A+a@Uzm?*4f0uIR6uNS8S4jgC*uLbngk}cd`yp+3vsb=E#qAA zL4)1c&fM2l71Y=|*s`suraA^++%_=s$uYCy^5c5OA~Cz-+Q&l)RSgFWN8<;^g<=oH zzK!2w7-2C%1l$Qe4PS+S17GT{eFA(AKH}hUfxN{z#5wW|S0{grFI_+2v3V=$r`%JV z9kiXUBYGu08 zvw+j|MH}ZHroVJ=ckb2Nt3zGy{FVKzccX7y;8+L`)$%`gU(~A0EyWSQi|a0qQC*58 zoZ(h;EBUK@7So@?i0Sw)&>3K{m$vsoXJVD{2A~(`7IqVxihjp7VLA3g@HNDTT!l{{ z)sX{^W>|A#FEyIHNd<@iaP*ejcOf>Yl$kevF~?dOTLzh1ShH=*ZHFyCEyIATdcj=J zqF9evdsxa_)1YWHj@U;u#A@1?!s)h#wrAD@rZ>j92Ec>jGUI%4#bb*{-;UwpUKqDo zCfh1Qi{X-p1!)6E+id2BhOGuBp`9Tmpn0@*xT{B2`3C!;H0 z7|$v2q)jbtAn3zLlxs`h7JsO~PeN7?71 zX?QMKz~HojvXT}w*FMP}1?{u;GOskfHYZx{*d9aGpx;PMB-#4WS|2KoAn;<4M=Drn z0a;xiS?L&p&n41O8+;GSfh@MG)=8EaW2b~F2}FG3xHYi{W3R;eVr$0VF!i!-vi-E% z0W%=%mq4Y#ZU@tB?r6MkdS$8#9(n8rBIRB}HDka;89SP`7_S+w8k(3pK$&*b-X9r_ zZYOyP!v7`A#0&f=t`Uu>FI-b8MY-;*=Diof1L?l~{$%e#@N7he$LV?NtKciANl_Y`Z0m?}pz6Q6JU(0ut8YttHzqMC-mQV7<_yz>o zP*k9^cdx69%c4hl&A#4X^xJq>>WR+&YP_^ZtR~bF{}3&}J)h1{)JRZ=iy~%%I?i>x z6sXMYN4sFv@dE4_x(Y3cwnFz{U9m;z7KZ_3{Mn9@NIz&I{1WtU6oI2wY%+C_t^)dN zIGlAPBXw*CEL|)yrVFM4)=AJMcmdKF8IFvAAxMGqL0w=s-ogxGW)}9-KDmR<5OYb^T4 zaUKoeyNDOqUdIVE8vOw}G&=wsD(OgeRCH_s)zbCI0{eYOamPx>4y-H1Ff8anYDxA- zUm$m&X*LgVR0o)JTP1jmy3_~tJ z&8&GA(voX#YuazhH$60OF|9PzkDnbs+aMZ?%u{R!9G}UdR2!xoyN~U}HRJX$yYUt9 zb?aDb!1@hpV#_pt0FV>$FY!qx2Nb?=n7dU^r zdV7leEdsLVo-3sGQDf9fpjZFC(oM~lcXQdqZ_vl{m6(YwarAN2L&st#ut8{){WUrr z^nXooT(g6EBlg$-QNdZqHNCxYT)hS=F}5+*-Q5h>sKJ0yBSvi0=x!JdN=Qf}AfTX# z*K2q8RlH(i2i8@u*RE^V@BG-`@M35Cp7WgN`MlqV0t5!0Yr6?jV*45-!d}DPz&1jy zZ86YEJ0hs&UZc|Nx1oMRtcN~!UYfH2B0f+{ycnqj8*V?><*wch@vVnpie<7&Q3cJU)Z>^8m3_@klK3j%uKP(FN1wytQvAPQR3AqNzg=)Yo zeHP*)N`smJiCqgEjex-QquaoA?IDp&uA!J|ADEw6>$!yjZ>~S9l<^S|K}#5C85aO6 zg`t#@qKSJ5zX%ri3)n;0MEqqkn)Zk}!o<)Fv~hYn1xawn?!$60VCsb>6KZLN3^%|! z@R`?GKS8}8%MIYEc_$yN+-fvBT$!*==h zV1AC(#$fl8S4=~%XStJeJp0$GG%UKA{+Dfi9X9^^?TL3*hL<^$rr2GUX zg>ce1DUJ*y+Tlf*GZ+o_IDtzZ2G2k{!=Bztucg$IItgF!6wF=pF6>NvKUqkV)4ZvX z^nPY9U`Uay60Vu|iWkYg#)7h9xfH&UFJfEJegK97Pnx34p`j?3K(8X3WF}XU#P~PZ zYIG1X6LANz$NmB`3rsxX?cD9S_7%vZNThw5eH>x}@zrh;b{QUGKZ$+``r~l;58F$S zrMA<^H6TCjL-5A@Wv7PShebgy*i3*dS&@yn&jBG6WfiYzMct z=XRSBXoMPZ7(s-$K%d*HpgFLUPy=Mz>VxH$g(k~YkjJnfkW+)h?!ork?ZGhdzle9~ zy}W+Wi0CDs$v8+>5|0xoxHiHH$`thxrl#%(`CKEq}sIoNVM1Y{o~2~NZZ zRC_>DY@>M42U#T6Qu+<5ma?Dzm|H7E3i>&XfE1;%0=PJimNkQ(LBr9~sc?{|hLMX% zjl>#!F&2wPqMxDD(A&`8aALr^JSUdoHxpFE`+za)Cf>*Y1i9*A$dx83f?#65&2nb5t5A=4_8Vt$a3^Ll!kQ>my zqaWapkk%3QqU#WYh#e>sN@)+V^MYhryFx2rC!iak)?oT2v-#I%3}S$`!&ZRaJjecT zaBn|{5nwWq+u-TYcIY>FJ;DwC62`F&vDLvoAfk|tb{hblu?zkU>5gV$CkR(re9?g9 zq2#UL0sAk8Fa0(BJ!c**Sf(ka-772+5-|<-Z7(M+2WmvPicDk7=0Xc z89KQ#-be0N&~qrEP172gmwEey>HJx&dtl}NVZ<=3X|0q)FMuZa0PY!nt97qVmzdVQ+%T&TYVzt--hBhj1+15kNEdFlbB#D~ol3 zy^wv8!{elKvN*rkub2-R5sY?bEAtBT9xx)97<-vFfD=K>ZRh{R2PilvlJ%2eq|k{s z$bV2Cl9NdjBs{5~GC>p3(`YS}eBwG{J-L}Wmv)A72_Ho8CG_G-F=ZGDb`)cWB4Qc{ z{}5*oj}zmup(qk^J!T0`hGrt=sQKtR^lzvHJ2;dASJ>@FUITrr3Q*G?v}fVnD7PpL z1UB+2;sN{>?6ds@7LK>Vg<-c~j-$&_X(&&`w4EnHfW)BJV!z>_q#Ya*|GEe&rb}i? zP@?&wPrMtT$`A{_3myPh#ccX@+FD>v5s>Ww?aHNEu_TO_)GeeuiZyjB?Gj)J-?NLk zEBOm~8jdY%H{%gqK-~M~lV+kBnp3G|IO6D4-o>|RuU}M=f%t;o8J<9!$pU=C(yULr-vH&YTMk6ya z=s#(`lmhBQ#ztm1E0RH>9H6*Sjsa%l5-`MI!Fl&Dc?m^C`jgO3h{HX`cw*y-djNIP zNQxyM#2)RT2d)xtz zExVa>hV_)bhH`^i%G?UvJ>kro)c?pS}Nv4Bh`-6h$P?h=1P?S#34ZcC}{ zdq}eNR-1Zgs2vpPjkHB$%I?>5F1RP2YEEhI{vz9Z!R)h8b!s`{33N{LGymaP8+C%y)7M3Gn9|9F{2Oy0_ z>6U;`z8{u-EQJ5@p zWeaIq(L)7CuI2{OaljpBX1Q{Yi7JHNocHWOu8tE-r&8@eE=0vhXJ@cFXgkO&h3<6y%uHyF-#4oHQdYykUUmt&ucSd6@eosFL&(uob!2!F~!ib?sLjnUufqj z3i4&*4niU&lNv!~F*XA#ESz*4%fwZa6ch+8g?@lqPGgY^0nFJoPZS14YT zK+<*cG0;I2P-X*Ph6S)?JfQrb{-nt1Y}$M}R}jYQVRdontaL^({Wv2)NK$-|%R~zC zFBhXq?;P#c;YM?QE{YMe9gj#FWCAyxf=YWp&vJOBB+3NbHg=FOONij7@b3siM9+9D zx&Ay2-+`4(+e}?Wenn|vAlMfHmux|qLr5m16ZeCfyO}Jb9HiQk95Bv^Hoy~wz$|QX zKytDLQU|L<41)yKF6==<5K%)6qBJtDaVq#+L7N~>AmaD%I|VSoeP9FHz&^)Z#`p|e zP&>Jg1v`X$0lO_0oD=W_KSfRA7gD(Ffc%qOEr}J?i$g^{qC(LFu|P6k{7XpWiP?|Y zPONs8k#V1Kh`WU!!E@nad9(Sqc=uQ*X+J?~Yb_ugP4wBcb6|IR$O&bl$?Zf7;utxP zMrGat{k%--A<8OXSkMty5%!UOqn@Le(I@EhXnz5l$vE4Vvx+tgQ0Q+NWt82t0pTM7 zQFuU-E&fYfDf%D|}c^tS+`sxnWoPphJUt{-wZf(-`uJvsjtSt<74DlElkDh~x!rmr0f~<%$ z{R+E+mm+u}S}mrDPKXu>CxyPkdw_rs;k@F60MEco{w%?FaiWwaT_-V1W=IuMz4V>@ zxT4H)zvHw6N%ld0Q?^FFTw$f~b9g1+EH#LE{LR2|GmA6He$D+$oGmR7pA?Zro5a50 zuNv7)n6v16=vM*bTmtr(E5Jxq#d*ix#%!VGQU)l~3=#J??iz5%rc-xQo&al2KD{2; zwRW;BSWiK3;|Fh8R3ZxJ5_x*T67C&p9^vTc>Rp}!?BkPrK7oho*;!yFB ze2zk(61%?jNe#-;FAv_O+9$cDg&UC`n81Z$6N(6x$>XwO9dP3r6iLcb$7R6hGe?#t zPnP`+Odh9Y3mwi&`}oU+cC2-j?bK8{i4y}HYf!e5!K6h};Z!8$BJknOrI>JRdx70= zU|iv5lR$Foj@N`EEK5#<=-wA(S)iJ@ewVwBIE z|8PtLCOBUaU$jP)EZ__Nmfm)lDO(}kE_>wQEVU4xVE8H#md58~iMuBM&0T5)VoDIj|Hs`6*y1jFK%A zd$LamP_nJkukL{!W6oXf&8}wWdgWb3ilkZcLzW?%RJFK&aNp#!BxEoSYMAFMmOukr zQtkc2l5vrv9>m}$PV1z;Dy3@Dt>1IX-BWee)knF~`7cMTY(R!_Br9Jkp35r~n}vrN zg$x)A!ky;#2od6if|H!5%n-&o<}}-uevN8_|INM!!AGt|en%VxlXXY?N)#9Eg2mu^ z2v+1ih6U>=w@BzDb#qwhh;(=)^O39)zZdTicZeTKFp>$$SIHjfGP$4pwW7pnv+|sa zt&7Sf*cGdK?E+O@Qn|YfxlOsRb+dGt;XJGumsLCXItZodGAoC_;yto9>9{0Y+T+;c za?owc1*3YZY*h_AO-uGW6gw*&f2y54;?+>Eoobl-f6DW62S+={TBVN~t-a{~PL~Te?tvMm^ailL!AAbbV{WH!zY`xIS^>Ok&5)}dBm{v|+( z&nat|#oVJpwlqay0eo{Fj$akacgU4rk^ipnaNg$Hq`IMq zljCG$V0v67vJw|aSIBlbY>*dAho#?TqmmPXvs@GJi1?R-qvJIvC&%kfQ_eBY=TtB^ z53j@CQqKdPgX&tZ8jpO{4A%kAHSTXbQaum(6#H!PUhHLX^Hf$Uu_~@>gC|92sXrFJ zLVwlJ9yMr8$YdHO6SwPO#(FQh=9}Lee}cZ-?||lS&;3Ckd}DkLx{tUCJ^oaAD-k|g z&ohn~>97M-$`&K#a_1<=UDAbMUu**&qb9zY)6Z7YL%_`J33-_K3qOucL8qf$U>6W8 zsO5}iPJv*#xJI7jwAA?`Fx;JYwshL;bjbO(a)DEt;-|w?hj)%8j;9^pI-PT_SGBs$ zP>VGr&3Ye*_gbH=-j}@Adu{Ss>Gex&e>_fAi(`jrRF4Lq0X z4PL%lmY>-#*$<+v@)!A@@jB)8-Ot6>Qq!yX?l%-b)?V~ErT*dG>E`8n)%An=PEcL+ zc9XlYJK83GEc;-#YkW{_MEJ%8c(7+UEi_fnG)xE0_Ac<&hPvxkg;{HheD?dATqoSt z1||p1SATKc>oV#fkvcgoaT6+=6nYs!vQGg8yX-p28Bq)WHhUkdlZjw>(7#j96IJ+y z#K+VY#zkHdaFrq@BMxQG?#>sS6M#>St9%Kb&*yHdsxp-Ofi2L>#otx$ddscG z!=y25Ex`NYX}|c%{G`62J`A5C-vFQ2J}S)>FGo*}`jdyH>u1%p^9SWxx6hiH-c{ZN z4b>B)W_$joMz{tkb5&Jte(v+!B(4J01!aPARP~?B3704rnEMaSTi^TsQvU*Nl^@LC z#{Wd%$Dk)6gy7k_4Be5yGXb{(mIu$&IR}0T@Cu9x>JO;$d*f~6xz#gUeO8^Q;RaqY zd^fo#k7RDnewE*xgpLE6+N3}8@JVwGapC^ae;QN5ZUh>GJYrrM9~k%QABAPxAm44YiQ=T`KLC#lPPkENR7r5MWnvkzm#W`PdwpHZHill|&W?>5G=NNbcd>eKG zqnNcHc=Uv#I5|d6lC4)bJDZdxz{8oXyzD}CQ@h{wT%aLqn!MB=J?=-<-@W)=cQyMp z?cQ*0Pr!qK?}4rXTLMf0?*njtPyM#~NBF(aZt@-Wned75anv+=x_QFXAJuFxlW&b* zx^}nL+V^iC4~|x;Ge8#<9lSc& zC*-i+7;dKz(*G7g48I@#LVqOG5VAXXI;=^5JA6)AO7^)1&N)co*q_CBQz z)=fpIViu>rsi>>*$j*#>X1Y>%skF58bha@1cEohNN31#Kl;K$nEyF4~$J84CJhnN! zC~%*yDPk;gN#NHYwg0sGnU|f$sM+TQQ6F>PqB`n6>}IWMRIYKVQG8Yqq$A=7(mV29 zG8^$`QK9g%Y!@pKt+33OfH_DN09{HML{U!<+jxNF{MkNLgyuk!!P z|6tI%V6u*(+n~D;d@49U=u1#gP+s8KKzhI$f2}{jnY9(#O@6t)KfsFp6ZkT)BVe)L z8Ev)SDZf8_ANUSvC;b}&QvLt--yd*2s41jB?2>*s+$nT_XmPl+{@;kThSP?}QOc<8 zhQFh24PPUVNA?>Q8i`SRBDRKZ2^t8H`JeKek2AfCcaGi zREn(ESGi{R84sCaa_(nNnPQSH3Z7;!O8=62Hu*!0TLeFX6xA93?r@4p!a(1>VT_3ME~1boc51^T{@(0DtJM#cj$E3-=Uph{$XGAhr)l;qe4%G5<^0Q zmAY5D6y0ySUfo_DM;8|KAW$6Wr`sAFu3HlHd*Bdwy$9dN4Z6b6T)jF3y$>D_3krV~6&N3p!>>V9BlBJs{8RaIF~9s<+RdbGg|Dmbo42HRWU|WZicS}d z<{r*kn)o9oH#R4JWzz1%&Cw~LIl)(h$^(@l>w^7#QM$E3cl>txCVIPiNj*hg)|y@3 zcRU}fSWXvJ&Td5aMXp||b#4$(ji%Zg?_J}|@-GS~4w%$g2K@+p5+u}(g)+lVgl*HS zBVI*JhOdn%j@%kK5Gjwi93H0^hQ1BS3BDHs36+E;hB<{D4cipDG?W%P7B;0vhh>Le z44n>L5t^bOi8L6t#N3ZRVH!@DpSU-%JHau&IMx)OlR!6>B|J^IY-%=X6BZ?XPfAIO zPmGLz9P=vjTUcH2SnxJorEYbIPTv`sZ(v3rOweSzl}*&XDetL?t$$ZMkaMd<(2!DR zUFlYGJ-@Z~NmW2aNmX27M8?XLqp6ULqiKWjl`)*?w5TT$rl{eF8^JfjUBeP}A9TXN z0sjjDQ@VvZnf8_^UQJM6((Lvr_Pn6B_S)z(sD=4Kd_(*jbw>Za0o;%@{k*UpVITF6 z!|z5OisBod8Q&NnQ49kj>RaT|$di$E5$tf6u-1@Yp&t6q2yMh*WP9Y9h&>TKQH_RE zhMR^*#{JP4Bh;vlk;MO#6rK{8X3A(z|DH0Qq%dtu&?dc0YDx-7N=eL2B&Q~1EKA>! zdM~Lw9&5CSNDey?HY?N+dRISgD35t=(j{`!FBTlAyiuRGXiclA>_GP1`qf>t>S;B? z#c37$8cr`hQ@^G@&|F`fU0{)aDc2+QW$KG0xAu4sK`nq!>~O1P0Y{O z_whEd$D$t^U5r*yu2DV)yU1G+6#cl~96lA5YFGl^>kQ+D7=A1(j%#8iOeYEx#HO8z zoRp|^T4r$0!aR?hGZ`P!UZh?~Q>1yOw5M34Ca3nKf6Km;m6dufX+~V5;om4|)M~J% zHsM-hI@kwxreU&+i(b{}8VZ(pGz^stHp#lTG{)9bn|9X!Y?^A;w%In9*Bq(7T=u5; zL*DNE(X6{^^D{$I|4f3#UW~OeT1F9~G)A?dE3!l%7BVOFVEC8tCt(A+6Tx}Gn*vt* ztqQ0JZVD;X*#wP;ehXg{xjyoR@q@`Ro@ZK@P?%Vp9GJMnG#N{Z-WF{#1{j-+QBlSS zLIgi@)X-pT0k1nTuj2a>+!HI4OH#+vGSec`qSLE0qq0MC|I5E$=v~OoGv{J+L$dc~ z?#+CeRh0cX*E+jDt110S@}op#{QB6vG23D#u^-}kV(GC@68NbzGS}rrm}NEh8ZDdn z4Yl<)ofciM+H;n=xBT5^-O*qFHUi_@8r2KX%s?a*CGSwn`Y1%;YhQy1e(%5$6$>@9gq_Mp>i2gIxprdarfO=v>rBY#=SFu68o#<syp4Mhp+q=_}ytext4{B0$$eX+^D>3*_*S3nIReL z)3GU^lb$E;NVt~Jn7AzAa>C(ccDf?lCFgnWa9&;hcHs#MN zHkRErzcQaSTNlZ5voavb=?T9~@g^V&)JZlRa{c`tLEX7s*a*=evfy5_%LrJ zd>FriI$Au=9{YV{WQA$4dU@lri)}+qh4uYaw<=DRUovkkSe-}D^i5fnn3RA?2#T+c zeQWB7-xNcQzmqIZElBN1-j~{(&dz>ZfGzx4M9QluY%X41@T=fTL2usQ*;g~1QvOPz zrQArlp7Jv_DlIP~E4w52X}(nfsxYr;0*uL{OG=BYOU{%&D)+3YulQK@zzivRQK-lt z%SlT=nKGHQJE`1CksZ2MT-n0^#96x|2wxYM$^ zdEMgJDtSe3c|ZxWcy=kh@Llfi0z%=6vUydKigl#}CF;`h3b)!@O|P5I)LYkVEL&aT zR+3swD;O+jET)T;zdO(OJO6yAci^2=~^HcK1bN|d26b+fL zls~Havgk@fNR#K%($1H?Yx~0o$t&VUoyIKI++B-ayL0@%ar2m9g>T<@_uh_st!2%z zOL+Bn>t@zYRXr#zDq38;+bk%*RD-E$s)1F0tc99bGxW?A;A>{FSSxuQ6{(7(W~Xi3QHq`|Xym9}XE|tvbF&IDTbq{#vUwCsxm030Z!+_gBZ(4s~1lQfAZb`du~O zD?V1#RRmNuEV@>oRbR3wx%Pg;nWZOM&eff$6;!{e>8L$kd9Y%vy0)^T+`BBRw72w3 z*}-ysxkage$z<_~q9^9y3VHR`+Cz)Yjnw9wZP&Y7`|1bbEAEXxT}iOu7dG%4 zmoKiZ$zCL>ZLZ3y7%u-(K3N`HR$F?){8!0sv%IvV>|(`8jiFw+WU8gMExz-3Z*Kp+ zp}8x=M!&7LUfsA_I67xV=5Xn-d{ET)bD4b?r=8qd*F%IQua}!7%bbRu`m}n<;>g-_HHnq)DlS#~EG}v&Yr?f|?AX?`r9XJkIGnyxGipCd zUpcixKP(<9TYjZ~X7ASSzAkZRQ>SC+v942H{aqzJ$-ULxP95y_nhrvnvSohLjU|Ki zuj}-6>UwCSTeEd*eB0^Hp`Nt9+~rG$Hm`uJj9Yno#joL@!J*|d`;(WQ?#<~5?XKv? zce{2k?*6Bzs%KTt+-^x1zQebzU}Q;7d@A2*V+IwhObDw+P&b|YE5f0$z Ee;Vu5$^ZZW literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1_mlgrib2/gg_sfc.tmpl b/ifs_samples/grib1_mlgrib2/gg_sfc.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..4f8371064cbadc574de319a6c9e6418c55e59124 GIT binary patch literal 26860 zcmbrkg;yJ0)Hh1q^{KnNySux$&{EvB#T}9mf_pp=h}*bDplE?oye`z;-P?QK_q+G| z2X1E(%B-%L({uLz*=FaF-COLuUw5&yTbAgW_%Bfd{?@DesQz}~`~UnI{(rvx-_I^x zx_0lfXwjm@|9j`Y-Q@27{@FQqvH$%)KPTD$?h*b5+*tH~{{1k!(RS19X4%cRTVl5k zT)XV{+8wfUuyeL^xAV7){NF3lF2ybfT=M^W5qAIIRblu4@B06qL;T-o%m4RXDRznf z@7w*sN}R!p4uO^J`rkD!0jr$_Rz2Eon4Q<<-idv-w59eP?0(q&na2qCTKB=O-(221 z|8d^!+~0Ym^H%3@=Z`LPoNqd7T^wEaxJ7vp-cNl5zV^Pf?`*G5cdl!o^H-<0P9L2o zI?s0g&v~?SH|J~@vCBV~QO-|X|8pPYIm7FVPqyEG-rs%d{nGri0xbSr{O))Kxx;SD zT}3W^osBMsU3kuQ&YPTfIv;g*b>8B1-F1oE2G{9MKb^ZfJ#(4h^3bKteT!$CSE$bf zuM-|4J*W8F1wIV)3{3Z5;%D<+=JCzF-eb9Yl3SU_I*&{4>s<#p4{+*zHqvQ<)7Z27 z9ltm|aDMM}%F*W7$8qtQ?4vcOpE^OVGIy=l65kU(X}FU|vbFRlr53}cF*Xu4%T>_kZ99zyjJR?2x!O`>V7iZWxZ~v7u1!o?d z$v7Ezy6w=Gvv|Ej$bk^;x|5@VfV<(BrY?oLUd&lukxo2kjef8*m zBJDuR_N2X;r!e;%pIUFpxrd?Q;bYIIo_ilU^Zf7d<>7R=TTFIzXt+KwDPUs2lE7g; zM$Zg)iMyBQLoeJb(zC_A&|`|H(fya3$dz{8?z+VFn;YbI%RS5ele@oLo7*-wlj|#& z365QlZ#Wg_d%#EM)p7jBq5Qpvcerf(yMM0Re%~T@lW%@F5<|wlixtK6h`t`PFJ^VL zd(83xB4lF3*z+|JYeQ(?RIhlKXm<}cm1~5X;p_+JT940O&fZ%+4!KYEPy;Oeb0$bbVzueh(%{beGZR^tc;o-^)vQvLTLP`1Vw14k3P`R`$glTVONEO)cpI@d`)JG>YAm1@p4HmF+Us{B)1!~iB=2>BU4zVLM%mvxImp4)haVoq60x6hpQPN%7@sN3 z>X&sn_b1OSEjr~l_gnH+Rz!SR96x?(bY1-VgfR(q>;c?3-hkwJ9J{1Xk#?ac*qKrH z0?Bj6^YMZ6&c616y-uZ|7aF2U#8~h#p{|ht(rv%u7IzyiY zMusJa{SHqFUJ|rFV4d$&SC0r`_$AlwPB+eG*>`mubre5~ozlA2pYiaS8aO}r<+;_a zg=gKIpE>&{mL|nUHM5aqJI+zgr_{q4cXI~j_RagtJD52$lTPoG-Zgb?@?2I{+9ocY zay*fp^pzvvbxB!}YM1sotsprh=@*Q1P@tE` z#(+?tJnt)>oo+i_ulkP+I^$3IuJt7YD*_%w<|ZtRv#@It(&Ki~Pol7Ip-{X$=QtaJT(_OuU_6dJ=%NJy&Y zj86Up_S-#meA@A>XL+ackII5_vhyg`vNSZcCiPOXAbVie)bvPh1MfgeWws*ABg;Pf zc>3Jz#LT2*CzcQEUQ!tQMB<@%BHAaaf5ey2BcWQaFWy(q`S{Na(0hgkHwGPcz3;ft z>8l6NofXt0WOhhncuvTg1S07k*OBAE*_yoTfBGT(PP|{3F@eXv7b%a>2erC?e<~Yyv(Vo8*QW<_Oa!w2{9!++R4NeM3Fhq}!dKtf+JuLB75)w_NY)t>+noWWNU5)iW^Miu=jwx9c)h|0v^jL}&KvNvXL z$QqipCTD1_LtcLF{ahtKt#De_!8Db0z5Ktdo5|A(c4cE}mFYWkwb^9m_UwS%&b$eE z$8%frxP|XTKE=yR9hIX?3ySv0Iwf)WooVM%%Qz)0nsqx#6>p6{9eXb_HmozGXJ}%? zfS7K9w)20^yMzV$9}avMH7&|F^njwZO0$gFOVXWFaQ=nTAoUV)t*TBD zP&&D|R}oA6ub@8nbyjiuWbSG1j|9gEeq>wpmvh;HQ^M~@&y1WJelT)vM9=uWF~=kS z#Ae4-1!hO5M*WPj#@vl5k1@x*h^>iji9eMf=k(*0aQCEKO>Ii8Pd%45J;gbBU|eEM zc>L|uSt&@yOWtc%VBBc`7l9_1QkSn@GrbP_dHTKe+vNQ%Fg;*vu1|SJ(p%PHj+E<`@`-mVeR)Po=D@5WIsAfQg01`u;_ZT=g{6gEW#a{dWK5oY_Qza7 z{_iYqMz6d*InVOlax`fnsW(zDrq&35s8(w?XkKXYwbM28HG9;Tl`rI%<@=;f{K(v@ z^mpmq+ZReG97sQ?q`{SJu z`1;)NfUbTC{?-6>z;eHz0Z?Gq^Vh=mM!+$r*%FR{^NsU{!mr}L6TFkm5DgO43BrZnCBFr`3((wY#rGtea+wTOmMw2a-iy4>jAfbJ?E3uY zS=Bjm)oRTY%_|LG4{K#6kuliNMVX_xU7{&!5&V{A=Dgsxu@A+O;R{2}QC=aVqtm0l zpSv2qJbGGGX!P9pv$0jN-(snNg7aYs0i}UNrAl>h9DBY1cC+WVx_oIWfFzta#Rbo{D`mksUoK(iq+AoOg6w zbg$67@S4!nkfd{+=Sza;hIS9OgbLzbB>&-bCLWKy#Ij2s&YJ{k$tBg4wlc#hV|Yed zW>wb0oNI+A3hxM6vVMF^X-uiV;);QH2bQg4)jT&LC0sDDEW~Sh%>zyZC8#YJ6pKY?h{= zC_9ap%WY0z5`KjWqdz1BC(sFa(jIPDA}fIvr%d>ev_I)3Yi8mC)@fEaYY^L>Go4kD zbd5ccb)ADGA48>u$Ze&F(=j~ z`X|J*TT;8Hd1VaE49{@Q49MJ=Ez7FNhI5>AY6@QQy+l)lPen3elk7?`GuCUmwH^~E&|4Yu|ba31`dpPzSZ_d@^0m-A1#oYc}FRngi7Oy*x zpL#ttENx4AbH-5co*7xO+41S|sX4r1DTk99Qbu#+$swtEX-m`kag9l~SW9eN?8)do z@k3*7ME8q47PBnIE7`=`l?JEu=j$?*NgvoHye+BIGW+Gs$?cN!IL9Y9EGH(%ns+0A zMgA_q4zZVbw1^b%mvGQxOohxqc9|B7{c@5-EJF;GZSoR+*4nEw6tjvW#5U1#QISw1 z)=OT9FBV);7!0#?R}Ae2n|_)0ho(~TR{K=-Mfps)t7NXS-mrjkS~N}eDYGQ(PtKcy z&$&K1{c_P9HB+c<*1?!%H!%5fuvYictuhs z_7gjaH%N~cTrZSqwj0W%P2zd5ACwL)hHKILn!Ct7<1zl;{640y`knGFGMrn^`!0oY z9~3MpED~-PUF4riugQFqdM$SsKT8mme=D2J(eQ4jjLUqN>z~z^H-PQWZe@K)vQPTL z8p_ruA51Re7`P)+j&RYG3|>-70(Wm}w^T_Qn%ZY(+8!Z=}S|Wr1NuM@h=G%@|P5L6fWVr6{ZNY z1=j_L;7H+j!7WLnL?Rh4t1gl%w~(W84zWSyS?UXIFiPMr>fd^WTLOsQadH*g%DMMwC zi*AUYWW43Smd6VB2{#u0&YqIrE^n3ekzm=eS%0&Q89lP5=l;!lkW-yf$aUwWvL12D zI0HD(laHq?1HO};vWw@E!bzQ&mXy(uyD;}QP*2?4mfXX+b8>@nJ90PXe9L*7Q57!&++kU>vM=R&=Qw8H%gIV_ zOr4yLq~FMxkXp?_v*JXXvX|$#WQ@+N&m{{s<|pN{Gph50g~{SX$z91dVY6_cKpChQx%jB)xFYosBGGiiV-DS3l;n+ zf@XfPz)SEnQJ(lSyeSvU|83lA$z^VkGZ+PFK-HR@Jd0#x%9w-?tQ*Bu()04}if$#_ zgdUl^g4&|R;v>a$H1WEZ5#q-2fl4eP#BuuhU z+$M3C?gV}%O*~z^Ldq?Qk!2S
        ZR<2P-N@n7kkl3Hbw{=PCz=coDvZ`GeveJYJ8 z<;or_{3Mfe52SvN*^xLuwoA^p{G5Ui(_!=bGPxzxa+oSNG(s~dr+6d8rX@;2t0`B4Qw^9}jM znZ6k{nZGh$XZ}u)$PlEx&sd+4lu?~|IkP7BSK(g46#-v(LDUs=&rrTSe*u3e;H&b& z&HO?9<$`5`tNd#I+(I_LAHP%3i$6~!5{=E+!+xD{D!H7Ml3J0>us%gl8RCM8l0->A zDb4ShKcR4zV84hjbQ3*L*sC-1JMugWdzLIwG^>wjT$FcNv30nkYL6dNLexACQW=zRL@oxUgg6Sen zzDlyaP|ZgRLj~PI9mNTt!W{m>{FAu{^8B+~fg)Iwvo-5>4m&Thz?r{N*j4N!St)jx ztd#5#{}HE&MhbldErM@?I^j;iTj3gEiO60QC-M_b5|#?L3)_YL1kZ*0h4$hK@fP8O z0!!|+*vFhZDfaA+q^eX1xUmJs%T=3Y!v)i% zmleUK!&Dzs0`)w_pOR9!wy3j+kzJDwFZP!9lrEE{7LAm}$@a)D6gd>VEl!u$maHi4 zQ*yi{tK@IV0fhm&122R-wcg4&&3=tW3CWGhyJ~0EP1SzYN%au*Hq|s$CNx($Qms=B zD47P{F-_BeJ(Ay$-&f1|AtjZhKW-*=lm}q%i8g~Uqj&UfZs7Sx=gwr9IE8)(g54wg zL@$Y(o4-VGzM#0EE$zMFbIu=robb1(Yw38oQ(?XEePMm!@BGuE>Eh+0fua)8Grp&w zk0h+fStbb86gm_h6i}k6vd|)4(ZS+zMSo=vWb0&dX}Ba^{9Ce6 zvQyFzFky*!f#js*tpt+nl5`iJ7i|#_7GIJK6Auvml32yR#O}gRg>CtAejfLB?(YIV z`v_-S(u_p61cJZ@^eXm0@5s3)t8(t=`K;rZ!4b2f0k&~vr2f1NX2JmO6iRf z$KuPf&Z4CSpPU< zlGW^=83w@&^*L#%YJZ7H(ObTv=!~$Bps+wG9U+;SZx;U*o|io-9V~Z|?kYY}JV)j$ z`6N;ZCBh*hJIPCFYSG@JXYv$9s)AqQC!bin4b;>z*%aAyDK7Juev*!r2&J%8Bt0yh zE1fR6B=HoFkqD%%QjKJ+q^oSCY#ca|a`77e5B^eqxBP5*pvadyk+(eV0!NW)Vo2$~QcCVx%oJTN_K{yI{i)D^ z)zHcmWq=~LG^cdBqPudaimmKWPFADp6xBh6NcmR9XdAVEF>eJTyJ-kQ!r?!#n_<23 zvawxrSXHB*q`IcED!o*z)J@tt?Pu*8!#+*1-i(d0uBj9fM(zX5THU+aP_qLcUBwvV zQ4zKo>R0xrVT>sw+Lyb97n@$fE=x#bhsB0QY)y%a9US+C3ndatx#+Xa##(ypaz<@bt1WFMuC@_nUmO0Oy&E3*}y zN^j+6(BajkJ|%u7tBWd&mleG(PAfVhwaFr+agr61mD2uFM7CMBRAwj|T(q^wy=Yg_ zZJD!lxpbxUvDhZODcm9ICpsjqm2<`R+;yqJIpxCJ^6#3j`ss$#hHTv_O_PUZtFpb*06M>7_SIU#h&oE}7LO>g_7MDqU5qUa$P8 zC{^Fmz197vj!clZI~@$m#|40)Yl?64rZEkCrhDoFC zBNUNRUIELVbu~6VJUD)MA}{`HYA@YiO^PZ)=3lx*(MP&iX(vAkH19WYYROHxv(l!f z0Zw&l`hvCQDlV2@D=krUQ>qn&>X2%qYPss7TB*LIg)}2oBSBBzR(2|nD_HUzd84AY za+0E~BvvjfnOL%}WSqQFE|IU6$CezFn@e0vn9?nBUU7`0i z1LZ%^cIqzH7kySk)i%^CtLI-yZe4Q4vjc7a(K_k!hB86H->~gT2aHA3+pO=d@zfsCL~3WLC#sgIo~w6iLN$8zOU*pZ zJoQDjMSVg2MfFfstQw${sa~rPrBrdcbh-Sae0y`H%cB9W|gEB z?#z6Y(JBux4A;Fk6`5?t2;)3sPs2mwAY;1LuUKm+)(2{5XxxC_n5FKe)@t0ey|i_@ zvAU@`FI|S}73hUd9ZP>*zf&jBzScGBSh{z*-MYit}}nAA-nRdjkc92`xZYl=aet86;j=qEtU=D8cIMsF`LbP=G6=znNO%L7%LW3 zhgOOk4>z}2eak?wUQtk!-9%P@sPB4lcn5N|q3v<&@TMEhb6TG^iR-E>zM-Rv*iuF` zTNABZrS8cu5JgF7=_=rie@L2(kfJ8p9C@9zRpwt}P`xpZG(0fPFxi{frZ=WCQ@v@5 zX_aY;Zk%DWVVb_sm}JBZcMXa9Qo|6#0@FD(zgoO()iQY9DLFn!BnG%0|T%1>nMx9&$zTt>PU;mx|WQ8jF&Py2{o` zPULsdm>5tJty-s)6_}Jj3A8eSUyRA*sn6*Cv z;!M*I*Ei`N=%%W&)lJ56#ydv2$==xCILhd#pRHf4o2#S1`!8#pG=DVq!2d7ROArD* zMp-Srz}~*HeXRIV>1VAl$_#xBHP&8MR+)R5XPLeAo2|$i#rRo{md&ybzHktFYALV2 zP$jE5d{KUJNAv3%Kg)1ya!r*j$QD|;!$3`TLGDi z=y8T>)fe;+y;ieFe@b0kx>DOsx<=Yh;tUYrlS-yIr4BSw@JDnG>WHKxU*Qf&0tJtP&YUc_JB=r0lWxugFGP_K zObMnnM#8w+5T!5CDRmchDVj2EiN-_aqGT%>rL!WUbbje%#l+Gd^2Xw6MKg*{7eyES zEY@gLnmEa4=`usNl6Lq7c=A!m89D=Ph8MwkrY(jW$6umrV`5E;Tk<8@4petTxu> z)+RAeh>->lYcl-VFcrx%O4X&tk=jf8QhkP|M0Z#hhH}ZxSU>Cpb`0x+I$-P3e&{yr zAo?C1h2~?!(G6%6=7B9iKVs*x?pQRo7FD6~*a$QjbwQKS=jl?kcQxPCJ5_U3E0u4QSxQPZMKurbMT|nEa4xAS zO;oH^gc*ZP?&1*1XxV%vA8A2uBU|BHuq*rk79*>m?$9yhIASsVH3dQ^p(Lo&^wiV@ zO);sBtKt3VHxxmB!C&Bd*cYyZCqWBL7Sk@{X5)B+zu|#?ug+h;PQOt1KywOu3A2f7 zX7vSQRdV&o$}UwQH9cx4H{>?>*8FPmZJO5nqqdgRR4lBhtoUSODqN}zwTl``>Is_L zAgGD1ryKQ+r7cX`(zf6>-zy~@jMdG;SSFi?(w_9KrqsGkjpG{MUyi$c`|{2DH+8Y* zV#_?sM}1J;G9r@9Dw{wA5ob{y>Ir=_X-(1aFZ2R_of=DYC-&kfxtAy*HWF51DLxK& z!&!J3?u2QHp2QxU!lUu$cm**Y*WqjNS=eVR8GC{4L~mnm*fCUziqJdQar7qKfNX>J zBg0`HwAd&yAiVvj^OIk|!C71$I z@6#+bo`jDnMi&Xi-?hWgFSr(ei;suqsUi_0@&R56`5RBeSCL+@6SM=0fV&~SXd2W9 z=0lgz%cvZcqF2x!NCXm&X(qJl;IC&DLZx&nR2e zw6$V=)6UCFo6fczZnn0hv@EcNSVvhX%S7frBQfWg7gSxobn5blW_`oYi}|%hW|pOo zwTEqpwZ36*?Z!%H+gxfqrNrY27FA9T$Nv$-iFec>dI2?sJVho@Bo#v5BQ*p@)DyX6 z1Q|;nBR3Ixav<@CTu+7)Im8#@EI6w?`~lvC7vtOUG1zu&E0&M6qf^ly&_m=cngt6{ z7%4*bLMt*Cm^PU9=^2nMYIWCjd$fU?P_7MB? zn~oss3@eqL(nOF=tsw4Fj`$UT_Z9dLRETC^$FVV(142PFP4nT`hz@Q<2V!fmW_&Eh z#r9$()`{&wFk~un26_wqhERjrP;FSJe_@F zRSmx(t*J+|LyNwnyb0;}uXSnL*H&B0y{798p|#kh>6f0hEbN$fWkg40M{wEO@@35U z25aNOOFu83s=HJB(EP!IT1Q(cYaeqN{ha#Dd@fsi`B`IdgWKh@iemF~OM~UP6}Dcm z=^KvKZL3162G^}%JgFJf4EhM&i&{q((%sD>ax*=cilsVeXBwirPry}BpmT|*n3Qm&Bc~sS`K*mleVk2P?xFyWBddC59=I; zCm}rJX^m7g3u%YBu$y)xz8>pCM3GK}jXX=-Ax7azSPz&&w_;jyE7hHvK#sz*u_jE4 zyJI_$cgQMO1q!fA{Xl^#HDfNkuX3u=RbQ?aSIMg-^&?wq z+orcYZob-*(B7>hxZ_#J&-QoiVB~(uyDq!lp^4YVzvkF+tK&o4?V5t}8_fsnUF+}G z+%C&DSDB}q*PB}`7Hg`dgLyzdq5m?=EgR|{H^tU(wH>l3ELmXxUs&hc>}&<)=dDq7 z&nxvc8*6qDW)h;k>2mrJV=^b0n;9QEfF4XQqqVdK+@DRG=}0PsnoV7xWYm7}wU;_d zWm22SXOu5>5S)X8=pYh^)p#d<4PT31!nUA4(N?T0mX2j%@37a{0(3nRh71QgaTJn3 z)evTiGDaGdhJAo_x&j<-*L&)#baV8pbSm8^!ye-TlN8zjKSbA~A!s?;iZ3AKqzLp} zK0a7oZs-D$#y)rk0TUF{jgF&NlG})C{4o(m>ga*=PwF8xgJ>g`;ctnd_#t#G`~;Z~ z^uY|s#pG-prT=SOVd`c4W#Air7^?K`h6j~Sb!4Tss(byQ`s{_Nz==)?`~%@ z=D*Y>dLQ$MQJGV%nbtQzBQ?`qsS7lVuBOYFX-pRVk}9XJ(k^rl>IXfQN~HRdXF%61 zqvla6s+ycfvdK_#Bk_z_0~lckei2=aJi~Tj)9_Jv47Lh=hdx0)kQ)deDS)-mYrvl) zfNr^D@-qdRa!qcgZ^psKxyEazAXA1Z5$KyBq!ZnPzQ-5hJ24vHPO!(`RJ&6ni{|9?>FJ?B~kGM)k5juPnhGV|SHJF0m!kb}F zh+~>#>Ia2GyP-eOKvSNn0`89gt1{Jgsoh)ms$pwm)TNKDpDxa7?%LeFv9PYC$-8A? z+r)PC%Gmb(Z5=HkP2p|RJ2thyygIV2xkW)x8ttWbW%;&d>r;z;S*;DTd}LlRKba?H zwmHDE%sSJ$&icak*7m_#e&L6u0%+OYR;@L|*576=qstx2#@V*nItZ2Zg=GtL(tN}+ z(6Yrg!TQl!VDT`2qYLSS%yecX^@f&Hf9XJa2sIy^l9}1e45eG>BUB^dLqb$2C84|0 z$_ON-BdvfVAy;S^ z+yj0Lt~W>r`U%Yhm~O@g;&p@v{szBJx|21;L#i7sXI9ZW=t8E`%%iW66PWQ(0wg3~ zfDRu`{QwovpPWS9qR)d`*<^NRNO}M{m+X$WU|)Ox$lzhywn ztojkHMXd{(dpE|{{jQ6t+h?tyUex`xZK&RGA*RAmebTzql5IZ6=q#HUy;)+uY?WI5 ztctR+wz;^nYH!(S>v*%=vd(hc5@WTqd07)|cgxysgU$JtpG=zB*|OI%lrdX3S)Faq z%68KfGnUDrhca^dEqN7SP%SftK0)PEx9I?88>40pGQF5Zw2F>pBI)C_BfXE#rW^n+ z?We|*VPq>Yh%gc#0i!$Og}6O-7jwdLFh~3*z7%T*>`;i!2WJ5xZ;)2>D5^y{Xeizn ze}vcKu{e)#BT|VOq?Br;JE;A{ZBYB$=!H~Q`h$5C^O(6oO{ad6{gi$21S*#Hrs{Ex zek>Ubbt0n(q2ViilKw&MAa9b61RFnqj|c3-0&02y7KFuM)3GCH2>cnMOzTaVrn9Em zNHlrPl4zS++10YvcCN}?yRxdd!smix)%Ne$Wne{9 zZN}w+HQTJKt=G(N@h|47X8)>-7XvH^z?YZiEevJmS?Vk|Ecw>2=A&ghY=~{OZKqXR zAvP~#Ld?&Zzw~GttlZkw>c|9Ixt1o2t9i7!pE=uHZbq$JEx)X1Eqvl8=|(hA?o=}! zMkP__C@-4Lz;qLBWoFXH=*e^<<3hcpSDODZ8sHSs z*}B*Jm32_tn3d*MP`{&rzKpjnu!hjzm{HdA)?JokmJOD2Qp^azoebs;{gM1k=P*C4 zJAhW6WZDnRz*7qtB2IWGnTMzE6#1+?b`HO9s;S=~Fah zK5psB;Pg}`iT+Km1Sd3~Or$F4zNC!ur*`2&GJ=>)iK*4ZbK)uSmx#nZ<5oP32qaG8 zMywi3#4PA`I|gITnE}9 zkJw6h5K%-reifHvD0&5Buxl8E$CAS-$V^xtSPwA@^Odqp3t26xSY{R5BCXHNHp@0k zk+m1~nh7t9w^h>7MlURhkXzDitlGlLcH7GG{?=dAHD+9yv?i0fL^YW8bccDH1+{3c zU95YlFj@iFbhbrgiL^v8DAh@|(Az10`W3yAIY3E>VfZ)lf$;(Qk$P#)pa+C5z6`YAPs*+&M6XsT=kXjlr%F3=s?1VJJQfxP(l6684yw3$VqFoI%V& z8CAj)w^z$)3~Q9=av^f7S_%zSQxYQKS>Cfmt}_#ONTc?{3OGz3ibAZMU| z;2^a?FF{vg^L2lfW0doCufQ8eqWS0;w2|14hvWAE>K(-UBYwyjs2I^9_lTXuE+T|n zMqZ$%(*ma5Oj%9=-DtBcwtlv8t(VL)pa6fHy8x^mY0`j};)*#Z>IGcyGg=nivlbG4ZU^^$3RWmQ`@TAo;^Se{r;GS6r| zI0H~O0IB!m3St)4NWRDm>Y6~*p9tGwb&ADG?s+Mh~EIrYogfXAtIWDfT!yX z-cSP^_H_)#5WFjK5U(MY60^}qXf7UuIAE=qv;1JmO4A+_4`e+;__1axI-S@AZ%39R zld(F2OAR2xz;kfifGtB_qhUlh;tb(~#XvvtX+%6&?>gFrIYx<+v4bP=2jd9q1vI*@=ZX^%V7bu(>Lw=_YQa6|v48jD_>2wdG8ofyha8EGt z-AWfzBbc|$TgpcDp?=f-seGb4ehPSLE73sQCph3FZUa5?giIrz;(duO_&uxyn+j5j zO~evHjt?O!aTNc7$Kb~>0;C&X$S3$wOpkNG-9mg2`UZ)CE${}AJ4GPRK%O%a@;3w< zmKdAR$;1JZP0pBB8x5ui=r9y$Tmgq8Ft!IIM105}*@}&!CQx?7dwe6&AMe2Xp@~Eg zIg1`g38*zdSrrl%A|7Z3J^_YdNX${lPoB^0)V%iuLbrau9x6?D}rQ{zv9PIof>N9nWdP>it9EfIs z+DcMR1d!8+bh4OCB4hAZz$ZK;U5Q*`5va*`1WkSi_1%R4m53t%_xZq}Rvo;ZO;ux_H^ni}2!>0IEEto=|^@0vx4RQtQd# z^l!jI3B*Y>2A@Inz{gU@)E&?w!UX(m05OV6NAfAXX(YS_{z`tO7t#0VtCRzMiLo>H zr|!{C0QG~JH58k^OZ@}f@POG&kEcqhG9rY~VFKb6aG_g>dsHLUlh_J$los%@2+t>e zk}{&5SU~wu8_3x}rKrix z!*d8{@;yBOBwfjL4ZRQVgMP&O5sQhJz)Q9{0;Vl z=OQJrH*gry_*!B!W{+gRtKk>ec61)LlnBIIk)MznsGy$YZ{`H>G$VjtSxnuhUV+|^ zA|0rmba$qjabWg>`Z`CsFpJD;`ajYG>xK13-y3Vt8-Ra5;3{+&Zn7W*o0&-Vv_()U z^iq1Dc`MV*K)?k#F?K-ZyrosddEm>hnzxy!T9#QX=0)Z*<_-O4SAAi z!U=o};FWdQd5~qCLi(7dYX%6mY4eeCxXu(0DdF*O0t%sr;O8LKC^qeZ)*$&=2A5&v8_OcN!OW-}z-fM=QTiogW1N@~0M#M-1Kov|QY`Wxl}gz& z6Pfpvqh$~CgQ;TNfPT)Q7E*_)c#@!`AXVs2$w*JKg!n^6Q6H&`^eOB+e#evp&B6BJ zd8CA%P7eb9_9%F29V4Q?6Q%eVQiriHHdRQyq9f^z_;GwQDFUmXOil#ZLtl!bQ0fZx zoq0`ZfX>P!@0$lxo4}oIK-&(aT`4`i0%S-bbUm%3+W_xhq-K#Lh;TBHw2%z|qx<1+ z0B3W7R(AlY>S{tjq=GJ3js@Wpa3ww!Psbl%c~~Z>>VC*{)k2=y@=$)U=joE zgU_KovGvGa_z<*8uP_>*BTyo88huG@vlP&0O)%zeNF?up*@lfC0eEUAd6k?={v)G+ zmSd66iB-g5z)D{L?!^=Lfl^#S&7__I4t_`H)1k}|Jcznveua0X`Vhm(Y9j^J!Yiq8 z>LH`00?bE%t8J$9sRztNz#$5HKHvbp`KXx#l1z%u07!8VxFZ(10bfb&1O3Y()|0Qv zQDg(*L_8&T1La==@|BlV0qsh!rDjn^^f>6mQ{;7^KqrB`GlDt*RH1@|$%BNwaVgN} zy(l#`j$)`#@-{Vqo42PaV>xgf}HnJah%V2Ub@tK$cn0X1<0~yfkXYfK|I=&xUf)B!0pnuT_tQ=#3 zd5RBGgY<@nL-mjY!YzReM(Wi(N>xL{u2SBc-rKTF_BtWBaL?+n) z!Nvm94w9nzR66j-WuyV$gB1XO&_*mG{0RfO1TV&X5EZ%z>3}j31u=x!PFw|gqKZOM z15$x%$rDTjuEh$-o3sb^RMP`qhD4DG^eXck%Nz3ps}Hk-nhR>}9;jOdeFB_WE3=Z> zL9d}E(p|_ZYB`yVw_`VP37G}X`3_*BgJcfqh<5T0!6G#z7pNN}?Lj}F0_pdlt9Da< zU^mmq<48ZOoOn+*QGJnH7z_6T%oqbu9l>{knG8hMQj0+so&=dhxOoI{Q#*kQeM4Tw zJkIU%>w{Kx+>K>FHt6i#>rF72vz@ z9heX#L>$1nQCJL`gcKnA5fn@kAY>PO461?TkizuB^vu|3oT>g)s!u(xn6J-+t{@`Z z9S=r%&;ghR6JiR=K;7~Gh`IPs{I_NTa-4ifJt6MmDk2qSgIw?nb^&A(AwUN&0Q1xw ztO`C2PlM;d$DwFA5Pc64t2``?JYC~OMUxxx&%``{2luEB{4ufyOgdb#+4MVG1RZI9 zWSwSZ6N8zx)OIqLbS95e>zToTYfpn(K25jM7pVaJ7O|V8u(!x!tS_bp{k4W5f#UE2 z&cA`ciLY1*IR;?)J98hVh)HBdfdorM-6xJSbFfFS3ThzBh&b8<9gN<=&*D??`($t8 zJ~LJ6r{`Z9Hh zd`vo$S!gqUmdK#4kON3FxsV)2bQ10$GhL0H!B(PDtSfpPorXLCiFE;d9-aebKyId& z#xI8Nh8Cm3c*{r|1p0h^mCC|RO8Ly1FLg$J@lU|j4MLAY&e%;j0r`zD1!(+jOaXi8r_MWLj94`a8G19+J=A$HQWbML-nTDCIu7&KZNf=bCH#o zSrtcYxcMf{21xEhUBv^*HI~KXH6#mujd?Iz&3CMQtMnkJKTPZ;CsY4`Q>;TU+kphrG{{;Ie z!WZLR@kY`fB%&+8v-VLoh6|=_d+?j&W}=ROs9N#|ag}&Qdg4>Ca!`fu$%VvKd;pju zw}JgXi@rt^k;{k+@(>vUPlHs@I#a1>f@z0wxPjCsfVt#o{VM%2{SsZX&Oz&=*-_#f zH7+Y($p+cdK-RP7gnvQ*kO}dyIU&EU$J&dkL{w| zX%10OJ}}$N9@a3X)}W$iQ&;FsppM6q0R)8ez&zZBHGo-cPpl_$7%1m0NFBNt?}qQi zUGPLy0A}O~Sa0kv_7N+_jv`IuQEE6NH|xx$v?GO(Yp5K=0dF89usl+V?lWwLf6)q^ zJ(z31Mlq0uYz1!Q6V8D16oAth2D&^K;Mfu}$gmXTEuFYO;tR6pYGMgF3rs@Bkx5hr zK$}kB80G>+be7B|e8IGE2vcP|-?XH5y{19CTk}LC(oWO$S8x-2Q|ZDd+Q;Z)Fi$U`#l$yk zIPgeAkx10bI0^cHD!K}&sJ1q0zGn*}q5_JF7$}Mgf(nSDqJV^y2#O+Nfr#XEcX#*9 zz0*M|Vm%e(+1=Rr#+KmV-7S~CnY_uO;7I^WrQL*L&4POP(9Ubbd?i#$=j2i}w3 zaPL>o9dHtJ&V9o*%{|W9>G{6mOag{nj^f&f&IMlrg@{>BY;Px zJN)c-?cwhA-cddu*s=7u+^$KkdiQ+K0{0ttgDcXtrukjVuGUrU>p>^>Npqi;!~-9F zS3J*r>svy+phMj1*Ph(2fEbz$x+XdvIuMRjdyZ|Al?6`iHE<}zwlrAATB;!l#Iw{x zddno~I|`qngrnT{mR3*!r2DQmcQ>E+cH8n?U5+H*k9#=MAKRleG(tp z<#F|KL!M06L04Z#uan`(w12Q3fXZ!N>m@kQ@&TG zYuVhE*fkw|-$_uxC|eaRo1nujA6nbmHn$mCJ~uOboxVBV`5vuD>Y;f)c%obZjzs%O z8w~%nuC)>zey%KMqT{mD&+*V1>0Ip^;M@XyZi#D-`+^S%P!Fp;|FoQFo8$Z8Sml}H zscUw*G``(!kk8vJ^^S4mz$5>^7xspE!#uw{xgL#oh-;-gzKX#w; zjPxMA>)g5SCT~Y`gYN^#qc1`4kP345-sU6C+du_>1FU0_x6&8mdFXlKsqv2X4FD%K z4WNI3@~#EZc&Gc7Tj#p$>;#ry=LoTVwcP>8xkiWsRY1cnM=X%}x=CUxG7C%}0j3e5 z4#wp&xt3_piWXGsX6_pVvZXm!fqo9a$u=)lE8)xYxSWQfmn_$&3-|QQZsM&4t(CaiFX}ymBGuQ4*NF`+0$&l1LmmR z{njS{yXDEvD)%EtrK<$?0yN+k_d0ixdxU!i@Mf($0>tT??hp_!Cc3yDp{Lrt+m#0p zSpFW0cb_lAJ=VqYto2Oy@ZDRzd7v|J3Dl5F+$&vs-MhgYymWQD!d(A>F~_;Sg7;o~ zQ^5K0Y*(5a=^XED1J)t6f3uyi5v-}O64F6?Er|dFybdZgNeo;=r~Vkg;a^hRZG46| z*|;ti*il?)UhgUJesWE5*EsXs8$nm~d0PPJK)h|~52A9r_o&w&%>E$HM7JEE^VT~a zILv^*+F`p5D{SMe|Jb(J7QrddBy)%{T9>x}&x29NMj!1wys7gn*v;*>Hn!+}b3u>w zlIN(`)m#ox80pRHy<2^kd;)i?Z=h!hKs!xzdtGB3832=c(H>=8V;^AqZl7i=xBj%2 z!fI%l%zR%UZsAHWN&HP)lh7Rz;0o$-}!M8}3s^>KEWv^CL-a${}u=3@Xez;Um4zi@YZ zUN@Us_WH6ttGq~8xvRv@cWK?(V26_87-0X`vBmb=KEbN7y|QxPn-C8YnOn^t%>7LY z^9)lGz~yfrZbPt-iXSLxQ<-oa;~ zGw=;-fN{Mu31q4gSD^C`fTwJIF8wJ90bQO`v?1B+XQF5 zW4+yH_u3q`#a6U+H1rz|vs!G+ZNF`=?M8crW3mlvH`q@));ieEd-nUbI@>|Vc-vd& zA{Wbc!@eBMOeg#idTaS@p;>Y)v6d+FYx8PTnemCSzu|>GMn~7`@Xgd(`CyIE5bZec z&i63vBWzZ%OPbm`wKWdZ!gqZ8y|;WN9*sK(bQ9}c(N4YN8L-YShsZI{vD6-9y<|V+ z{0X?Y4fYn;0=eL?fa|^tGMi|IcBkgZp|GFr? ztpH(1cb^53#@{u?73X+pvjOz3&F+K0!Ph|4WI?^qG4ov$!PH^S0f^&NeUG7!Ua9>K z(D;@5UxpOpb+g1W&q{>TO)~Qr(-iY%>klX%vY6dqU0!)UxT_sBo7@y?qFQN?zvc{d z2w;qlfXbuCPPKlu4uRLf2O+!lx;5OI0BazWB^DlPdjU7v=GlU5KIjO6H+%}^#to6S8nQ@zElk2hbFK4rzX@?yw=Md*`SB~?xSjLy;%22mj=wmN&7eZ6nlT5P4L}( z$=u&O)pWsBXfC$oTB@K@_^VX~tos)H3F-t`^h)TnIo_OR>fcU1Hsnz7{->>0&wS?( z*AB;eU_Tu;k&R<#+oJ3;dywszJ zu|aH*8@dgp2FN(eIM(>hG}Uz1yb9DNc!*)iFbhG2SO`n4!%XkZea){e>!3?8%bH?Y zXL(>bU>;^#V9YVl4Z93h{S(~_om)3YGfNfwICeQN zyB4{ZIL=4-3LAxLpM1+1=-oqJih;@uD#P+8(*IEt#g36(M zh-&=L_}nl;o31*lX;ptv{j15)akK)>NX;q@SM#@KygEj`NKFN-$!&l^Wzf(RSLDY` zI4IPdV$zu#&6~}1bE?6m7Hf7JO7!J`SCk@tYuayqW+^qj0o)-X9AsjevRMPGb*Xx)f@k0k&qC`lqHw-LAf<_Ncw;FjXCG z$*ur4#HWh3O6SS18K&v)81`9qSgzU50XD}7`yPN({A80^4c6aKi2j;3U*oU7u4z~Q zQh!msQeDyv)+B3aU>q3j7+r|5M29sUGZ#QgD9hxrRKQWr{?31$BSA!VLlE2#dJ2y; zKQ%|1_d}5umFcJD4`@4d9wJz-0_^)_kP)xw59|0Ex$?Dgf)b^!)?}$O6&DqOidy+E z#Y1_y@_=fXJXf(z=94!ng{G~2XThx&1k$ScIy0Tdw%UOavM|X3p1@(d)u}5~%_=m30_}o+hTdkL% zYIvu0q_xe8fM=LD87^w-l?#;bl#3K(#ZJXC`BZtHJV3rlu2W_zMT)-a2<1ifIyFJt z$CPAwY+h!j+GLJs+jiLBG8D#|Z$mleMq{?=sd=Qa*yv|GW^@|z4V9*urX8ktra>9Tbr)!QsERwWNqrx>M%_`;1V7LtltzZYzU-F+ev`w^1LV|7`dSxSFeVtsvv|0Suu%@;UNS`C8c*S+mToh?gIc=gK`& z60L}~k2{R}Rj`D+UWAgq)(tk?F=ZK}O|J}(jMGiKp=_wX1vZIwlT>r$3YkSZPy$Qt zNzRJ@5jTrIii#vVWVObSBoisuIRGqHN)A?zSgBXrfSE?h_v%vb=RQ(m13YH>Sb5!$2F9UpE ziIJuASEb6l+(M;HU84D_j!;cdl`7ig%jE*8O*Ti~BrlQARg@__3Zr7P;;tf9u9j!Y zuc*Q_AGApAN5x=mtmY4OmbOb*r0vxBYyMW>P<)XOlsF_yrN4nDN2BzLC`-f>4-mEB zV+m_%pO_5x2}P=Eswz#h$?#U!Ylzoo>HgH7xAZfv*36VYlw1PCaDJvA4rC6m}Gf6vKeO`T2dsdSrchFwQ z-YW+xM<{EQB*iWHRi#})0X+E}X} zBaV}9QXf}e)HbNg)m5t3sv(-e+C|b;B7{)NZ{}^{)$rWhV%86K31G*G{zh_4gcUv%925A&z0z&6J@Q_~CzV8=$4QkYNQ%WPCC8)$*-qI= zX_Jg1PmoQO50e#2tHtjmPsKMRUnQr+ZK7Aabip*CRd`tRRPtTgF0T?>6+h)lxmCVd zUMI_zkCr(lL85#iPFO6wAS?sAG*1Mh1X-dyu}B<+fe2G*&lwf`X2BPppU6+0r<$cP zDRX6aB;O8O%i?M-rg7%B?l{ty|l)a9V0~GWSoF2|Z&M|%` zXD7Ena9(^t`doNdxI$-=K=WoeEyN%};(Ub;f^ zOd1d7$052Wcqc*#uJJ>7yLn3l2tmFuMv@?X$nyzz3Vgz6!q5DR{AfWi{~J&;+ARr? zc%^E|E2&ESU6d&f7e|U-iNXa0?htMwuU-%*3>GaG(N6(yZ7=4&~5?C-o1u}6+mX2_LNtfWLZ zjkkj1$BE`1WDRFTQsb#q`UdJDpmnvGl0czSzcSOAYnW$P80G}VH`Yp)oB4^E%ihhq z$!p_6yjwgczlhV$e#zR*c)_Tm-=p*CBt`<`4*ff$lkuFRskr~}Lb#WB{=5|aY~DHUS^jcbwP6+RTb z6!r)mqCbTBf(5)NRv~K}_au+aKLO_Xn(&7(QM5^f6$Oe$ihQD7LW*!Szna_3Z2>++ z<~H$Ccy0V{K^MQ9UrgJF+k=slliBlGiR|?(0xLooB%Lddk$n-1xM+ilvDJyVCq47AG(u%hVg}EV0>mBVjpF! zr>&q4qnx00QTJ2dQ14Uav<(8fpeNAZAqCT}P=fqR&{h&PDa0qlAnZTh~m+he zcL?rt&Tu`PnVic&Z7Gb>MRE|{6Z+#H6V4En`0x1TI3v(jdx5)5$R}JRTmZUju_U05 zMJc9ypa#=QX+z0AvOjqsX*1~pSw-qgo=M6f*~r&{HqTHho$?YWHJzfkDXkO>?I2Kp zf|*Iwhtw3xzm!b!MDk98jMPJW#YAypcpG_#criR0KaUG@^?y4E0^9* zpT-zMIY{HuZZRLRF0*1-Ijnn(LdGxJCyI~MNhA}>@#VNIYzIz>{R905`!@#0=3;(h zg3u0Zf6Q^rVVs#5MQkH(A{@Y5Z~{UnF@VS;4JFcuY66D1g_KA7PM%CMl24OcDci}9 z$sA%5v735`-k-XF97&l)`a)C@ariyNBea)Hf0l|~zjz4ugZ_90or?p^_8FZe=4tb`r1;GqJ4EtQzpUN8DX(DJzMlq^zX; z!}!TDadq5nTn!h+!}C7!>bYKS40jGkz@c-Na01xZ!2EyX%x6p4xs=(2aGH(Qhtf#R zqm7`SXGSxM=*#IB=qqW_)By4-QePsDun_OTO~RZ-UqZ7nOHc)cSwuZemoi~iU&eFh2KG<( zHr9N`4~CSvlc``7(pS*jwEyTt#%x+P4Nt#9zrj4t3Z*AeMv%6W4Rk%Q`Q4m!_8E>6 zSk7qfC~)@<4u^A-gJM5nCj)KTeaxeb4>T;vgKMI?$^VhFX(g1q^cea=Y7Y%T^`o)L zFG(W_JwSzaAx?y|V^QcEsB7p<)D=`R($Gk2x{5r7`iSnv)L}KLJy)*sn;nn)J$qTt%SA|Sk5K-16nirKKU|5O4&~wKu9A#B+Dt|DaE8(ay%KP zHc-s8D9QlhInqpu3F!O@S=*V9*o)an_766Tjb|@lpJlIRJz+&KlNmc0%PHX`Iq@sd zh$WI26TgvS$=y^o$x8Z3Y9J9w^@OYV!FU*VAGZ%n!Cu5}M(;yWkZvRz8G|TpT!jcj z-bXLQSg|Eo2lhEO7PAOD4lBn#z$RgF*p-+=7y+gY{R90JZN$`Lr(l`5Y}^d&3#<~W zz%~K@IYOdQc+{QL_q2RkUs^i#9JP$fq*^H7$eW2wqJcDww2SzPq$E!OUgAeg#jEi= zR5xlE`fpqZkwnZQG!rTa9fTb~?{FM3mQaenM?6GbPCrL`ML$f}(AkVI=1j&#W-vnx z^kMJQYiT_+h<2Zlj{l9HjAh~bV=&kr{4@Ml;$-4M0*jD~@5bZseZd$dxXZW&SQmB_ zb_|A&I)h*|}FfWYDl^j&Np3=Ojs{T<82S#c|H4BQFaFW?nQd>2qL_27Qua&TfC z3)t00>^B@0{}rP^C!j(aXEhiaTbk}6m>3^E3Y&^U;YE0u7!Q1F7k(@@5xtkSYU%3Tn#oIHxWCp$%WXCpN%D9H{$zYkKod< z@3G<7vDgCaQ(Ox61Lglm26G7g7`+Bvg!+UEL!7N2Qop2bQQh!;^nI=MrZY z#ZoX0glznCVi)-kbrdC)^prf2LLtYJ29TKe#h6^=7<4Qq2b+PY*f+3pVoeV6Jh_Lq~^+nEZxZH52@oM9Xrd>!SDjC&?bRkwC=Oa6i zPnxFg-B9^g<@(A8yZKeOs<&6$st#1$t1PG*yXS0uHDWx_BEE#ZhntVY-_xMCSm6xUsjym*t=uLt|7Zi>w=L=qy`la zX6yiJ8?qM#A^$?HYUthlt}?$)R?FYpTT7_lfeb+WZrWKdt&OhQRlau9v)!3{da75| zWbI3=qu0e&Z>>^QbyeNkT~-ygo=E5YRdNxueiOfd!slnuFzUMV#9$A(&F1C zS4;P8RBcY*erLzRiiQg6w%yw@tG3rqLk&cK#`I!`V%(U2vD<-1RHMx3=Ro8APuwE{ z9bbb3%I~O?i2jW!h}oD0=-!gAWkKctY#+L#Xlr_T@vemG2B4mO2$|W`)^MtR-M*XE zwFNiImX&w!`dF>0$!qAS5867t47Z(M%E_-?!(Rs%ek;u@o43!tZ+um1Nom3CtYK@O zuRfn}Gx_bZ^C`rotT=8=Z_Kl(^|7MW0cjU<@f(5*w-h~H|9!)uqQ8rKH;^`rDMoC5 zyaz(M(ShiN=qKp4$fM|Llm;~d<%je`oyQEo{)K&sorHeelvsyv?28CTJg@D)C9h=q z#-NRtO9z+U+Ono1VHdgjpXy25vr6t4NY~|Omu)p{Kd_y>EobZDaz)Xg5>?^u+~5R5 z{EPXY7KW`jQ=YI>zvX$x*A#i;!?-&!LuSN9@FOc`Bt%S|GCLeOg&2M;>Q_QRLhq{V zk|706dHV~G=bb5-SoFHYxmDIEL0m-%k#~?cQ2mhUO;?+0kdu(LsMqN2$dbxCn}%*K zuO3q$xAS93pWLwp**VC}nv5UmoHd(Pe_f+pvnfrTot(dCgS(WPb#l$2OkuXWC?yNI z2C*bO=GL6|)7djQ$&}J1o0nxoFO84Op0glAIqAoQJ|RINqs9jYdB;Bvy%|CSlvr;ZP2j%*Cc8N1SNrT;4b#bZLpj|%opD2VXR zu2{ICU~fTL!Jw?{HN&$S*BvYRuX1#?s)|~fy>n;f+O5MY^0(dJiY&L3S&A6>bBjU? zqc-l{@-20K20i0hHZAK{+Vkc5q@$@*7C*?CwmNKa&xB8*{E+?=E=}A!{_WWDe%#S* zlj!l268A10m6RK$4?R7)c69ML+^9&uKSs?PJ7L`QaSJD|SZK`InfEMvV(N;O)ob^q zomuy^6thdPk&*voU3>1%lEBUX6)#LPth%$ZE#-Y0dM!RGJ=vCAoN_-YJ~=W5kvczq z{)|2meq*KM1_oD8kOwCOl#Na8(`VGhNw1^c%-uh$W$Lc62_yLdp8~rBmIWRQk_Gn( z*&N&z>X=7Q?@n!A^(?Jlx^zuw+Vs`zyiX;2^U5-8>7&yE)72TnQobY%Uvz2J_!U%c)(suyFCBBo zf1TgP(N}_#CcKY$IcIj<%ACsF&{c(NqO$(X9Gdw!e{9L@0yt~*%B}IX*v19>6O{{x z&hw945%neh*}`9Qtm) z=P|7-<`x@^Rrx!!F6VaTm#^!}othcF!W^}4?v}V)OFt}O&bzrFa@w|t0kft@W(5Bn zQ#p`Oh7*H*C|?+9+QPH}Q2!XeoK~?b5r&%>33>@zIXS z|3p5Fj)`H+Ulp}+*5v7@r|k|;ADb409X~j5>xg?p?+sc$VCv8(K^n{p{dE~UB1MM}3^N-1|sDN-)JS>Mn5KfLFB&iT&s zoacOJK4;F4=R8HSV)j>GQ9>wRr|Q!73+M^8a6X=phQ_;gC?uWKcn&d{z6^S6>A+6iUg1>Y<<%Ob;Ge z6v`m0=9fpTedB6@sIjWxLvb|w(ch44(OEsaQ?btey;EBlcjhRBew_m;V( z70+>R%Tez4XQ%oDyP#$^5-iD>1wAMgd?k$q*85oC>s_s2OHwr0cI6O!`-^z+2akq> zKYXtfe7DCB_I$YpzSl1S-)nb)Ju_k8yK&KASKB1`&I>JI+vfw|n^T?OYoBFDlt{WlreKVKe#{14z#(d*4<4^iV=A+N-GZVYInYmIbQ>22J z_TSbs>vv?#w`(()KZzY+e(dgHE}Ghy|23A){M#iw|6z+T|M5&ie%$A`@{=tY`7ca_ z=I6{T;<)&WpZ@HmHZ1r|c`B)q68m+gJhb%S zw}gcS7eeZVM+>Qj3lI9t-p+rpk|?YRJ^BDY*(vxM^BEcK4`kopU)y?sGauE>KS1*Q zvEi>}iEH+2c~n~c0GVdX;sf-3@5%J9(ePy61DyWtbFQzkwI%)ml6^h750HMEd-4E* z?EbHL0sl?^1DS-wzP2Z8U;Uad|Jk-m2H#?0+}zlkSz;Z`aICA$z$aA3@#*X*-+A{* z<^lK6_jxsI#%Vwq`w;}=?7|kg_5t7bvzTPx6=@aY+v4B(n*SQkXdXlvfouswH2HV> z7k>%&^=~fw9MfsOZ(sVOuK>RTwEy{#!9oFm{_Zl__3&L%{?A(S@ag8MFB8KUao!R7 z*?TS^^>X+0?2m2JPul=sC~jc7C-t!z&zIr8m9=!Hy_5Gz;>VBAjQ=u{8UGNAG5#`d z=A-YOGBf|Jo!RjF>>0yv>!&}wwa$2L;)MAWyOHtUo7uiUhp~Jv`>z>YPsTGo`1vUL z+xJD})SYv{Hz)&ssd3PMf3eor$ysIq@b}4g+_BTYexs7{gfo=9c@YJE^Abq2x_U_y zw;D(t<^d^hP^PJO9wQ^Vw}Efb!I|=obS6<4O}?Oy^)3HpYo=hToAF$29P=9xYlij1 z%9+s5QH4;k-w^2nR{J3i50e$DvR?*~cW#|H8jDf_-h z*`Ls-ZZ?uXR1MRYpGjxDc&Qh7^CyR7L`FNgwiHiqxkw@FSi}{@qg{;nl>p5l86@BO z-*{4d{~RbbeL>&5U&|a^*&wel)nr2KA|vrk=X*~;Fn;BtGD8JhB%TZVvficwG5^!f zXnlf8`)QQJSNC2#`9Ik+r02u~{PM4BzA)zD)PN8M${vS-g?Kk3^Zi%I_fFmPN1D^= zqZbB&PrtD--Pj*ae)RY{{i~nsPR&jxli@jy^a$Nwr+>WiENTC+it+YHFH@RXNq=i| z!T0VK!D!UX0{>W?#tTxJ#d_y3H;mN3_eq*h2d2`&R~C6 zNJf>jreE)lCWYo*fY&_h`$lFi?H^zC0iz!*lB?zGz?YOPp!>6#Y17n;(@))gmj3qD zLAw4&-GHQIznSO-dTkNR&@Z;g zs+Y!n-1D>PgU1`mzkR@CTqyZ(Amc*6Pu?{}eynPrUP+^pv+}Gff4aHO2o3K8N}n49 z7;%SWQ>7OeOlt+u+-UNnvk>y#PrnZ|)Uy~3CobQ=_JsRFC2fq*(IbXf@WID#KgMF% zwthw*d*zT!2yLGJ!@CRgZ+_?^TN8udS+zTD*ZmK0@cey7_{XK>KhqaU^}kc;oA01x z*Y3*nHy8fKc;s>o`7b+L(`lMFfrekO$wt}4^k=y*(cfgn`#$}%iy^#mL@&Ct=Hp*4 zW&FqNEV($7;)9q<#=LTwRQ){DN3Tf-{=ud(Ui(otH9zBO~3cZI`Gr5yX2EkwE}Ovc24?#**e|v?j$4nZ3t+p zuOegIEL!`|>wQmk$jGAaG&0)6wE)t!;A^wm7!>w(^3o&)$h2pY(jTWzHOx-{Uwk8x z4o`hb$3FT`-?y)wlkZp&7eovi!YB=9F!<5b^| z63L$*h0q4#*U6T&5g&8EX&T;oh75dEcfY?X{{sI_yfDc_tG#(f9hA& zz;-l3{^3t6zJ%{z1TMUQGO}JQAeRc7fs6myOn<8PGqU;1crrXM5qR}&gYWv={S55y z{{nQqWdeToct3FdSs(dX=o;C;kTD*4d6x{C8JxaxtBS$Nd6#_k@c{61tO!X1FYVY)Max(DrKf0&l zo~|Tc@23K_KZpdby;)CQGqsaw!P5Y}``3)*hv~q5XC3*QTPMDnPcrGB zBCiWS2P!Tod@n^j>`VNIg#6D7iy!~uY!dkX8ySo+%tb~&`wZ|7^h0`vwF?+r%^-+}55xkTaV#JSwy}c!N`tzhNGu>dzyh+|Aa9V98^8ii zN$_1kS+N?l4eBHbK~8^=r$wIuhwB`$3+j{hiW~7fycX`jH{mYHxim`-tJAgFTD8<) zREt*1;^93VERUAA3pO!}_ zBM6>RtDV*437XBbnjQI!VO^JD>(V9gt3ccsremAbD6Xtj*Q)MG7ZC`H)qoP#G&^_%L(u#Yqc5FghtG|b*syN79 zEiPxNyA8YAaAHS0594rZ$rP_zKa5718mn6PIg(Y~uC!4yre!JX?L+es_6qQC$8H)BRhqNB)iRM6mpxVc?&^^&M z)}h~0K^S7JxAY(qZWMZ~J~D5~!mt$;B#IH$5Tn{Y&4gh>;@6C55|qPcR6Ju2t*BO} zLTaKG?I&vaJ?bt~h$P*;L9FT~^+)I_0YU*7wT=@M;TYPYvPl!HeezCxLAxz9;X{a< z*f4u#n+7(wA3|}D640IzJ6IkPYdh8un)}9hq7sjRE$mD!Y4zF<2_0+Jj_w>(6>33V#QQ5-cPBj|8>gt`)sl}2cISRLpp^`qov-qm_|$GoCA zLpt?<1S~#>$B+%>vMEZLfhOwD6x+HEd2p5nWeygqY=d*L5bZop6*Tku^@x=xi;%a- zW35%THsKlWH1JEe^`oi<#E)-j5~-umiDtpRUd+OAjIAD!CIQSFh%i%}Zs_B&;D93@ zyZvFo+=uO)bFAcUSjEhcn~6SLS79+vR>nab44<1UBJSv6GpWtV2wap#U48k zUO=g;DY?@u686co8jseY?G;a;Z7>U4MqSXD>I6-Zw#(NnnYw;45AQYAY0q>_#Lvsd z?Z!QeO9yLQGMB}r>?|0CO&C*7ElRMQX?7IV*El9mVTz4stAr;t3)-m?O2Lt`%@n6p zRI^DWZy#cvLhblJAL-{$%Ht0<3vd&tL z_+ur6E=#n6*6DjR?HENBTos#j-e7FC@vO}wbhQ|4eURgS`hdrGrZ5PpxnW=bj{3z3pB z?Y?wfo~P zU8dzw#NtIFhnj9g4L2ym9QU+$;WX?(B~lValUSS9j)ocA&}GNn^5!cO7PpY1$)w-a zEZ{JM!mqPVntO~lzbF=9+Fi*$J;*}>fna)EfNnquqG?iuQ(iNuO- zQ0x-y+ZIfXe3>Fd+^1ZG9K=Xzq9E-Gqz`p^bvZ><#Sjs$(V}_A9(<5z&_(e2+-^Z0 z99P;=vV3`-!#8)Sc}ka}hG#R^DQci(W3+iw3@JBN;iWJdCu=dRz(dwU)wrcYb82#- z6Uq?%7O@Yife4c30g|hdgi*Sa0 z0Y`*Ql7OiZ*)fI_fE>oFb*BguHyKxn9d(Udq=~?Hgwd*MeXKeYk5UuD4Pw9+uWwec zk>z5Cdfjx4)+)#B0DK=B)TeU2`YM%2=d}0p4}#}E3kq-Vfpf*N$GqR!bSW)Z!rPWcHE1xifw z&R+2*94j6&CZUbkmZp)|6eT0A+Pm^G)f~P9_3B5=2WX8Nvd7>#NTagXP)np@iE6bn zN1Z4nv{lZOt8t<*$s|#O#45AIE^$?{Urtk337YdAwm#3KI0dULt#L!Pu*^P9pYrr7 zf`>D9%pB>s;!xcb+!aj9k@9%FkGQL!!<+G8fxj5K8E(UiTCi-xv8`UWLq*^|hnmWQ zHZ?IN)yD2iDF#56z$S5AmBMR<>WMi`jDqi6K-$G_n@77O&4N)ir07=JP%YwD0Jzq+ zZEKKE@G}Jt%T!GdJYSGm$V2Z}pUVBhS$*5hNL7m9oQP&aL;?io8+7$5z}^P|qI4-+ zSub@HfMi4#4X2GRPLXFkzd9`UD_EsF@>S*xXHvIV9w(|ST9==jn=Cu%kvNn$sXTI5m&fUk zH4eOA5UE`UdHmG!(`$Wp3Oj<^f}Yv3G+VkxDN8j{-e4aFLlk`_q@haR$C%d+Sy~j$ z!dzptd)XdY(#;PjM7j-d$#h?B&^avCswH-x*lEtf9kOcJAUhEE<8!x2cs@T+mUMNa zs6jGQnkowcMvNlfj>RI+#m5{TB;!iIYT#xa)>fQRw2W+Bi_q6V@p4z08V!Ni#95hz zx2;HYXJ|bf9-3KKX<2}}iF1CYRc5IbS-=tJ{n8j!4LHaf~Q*ld-7RVwvtIzOG9sU zs?H^L%}NO@iqQx3`$b;;h9)+68@U(sNKBbi9F?p#4ij$ywd1j$wRAud_FeNyWcPzk#( zPj(>m>QjZYJoI{ZS+cI5dWbuX&4xVraj8>J5l4EXYGVi{ZCok4SykD9_g)?(s%ti^ zk&<2gzQKK`6FDs$Q8nr9aGy5APzUF*KwEM(s7iqhrdDF~CdofyWvP~{)MYt%tNxT4 zhu7G~x!GX6j$#}zfaYrXuy9`;ZP`Q(@+s}PC0xprk$9+^V`5q;$}aw>W6u;X^D~@w zwLDcbq)Cu2YZmQW`g2;kqRTO%BT%x?AR=^<(p;_tZqaw;G^1;`n$+zt(hM=pt(KU= z9qXuSf{>Uz?9hB#?LtGU@t89rSt>~`S<{b!quCz)=Bs;%y3mA&Yd0%Rs?7ZD>nB=| z&P|OMf$)N55^wW!Bceq$QCC}c`WBdH3`5iTHalAPnD z?hG4L9bD@om}sp`mvxu%pQ}@9Z;wG1*`V{Vges1OvK5DVKe9?!;~VCsl19ampt3OB zJaoqnY&;=zp5LzFowC-;<}@DTay>1Lm*3F1s#4S2__C{1&5m}<5Et|qGaKf)%`cvM zs!BFJFn%U=AuVdc?gyvjI})cc7fF$A<2+nqy06(L)cCw6rP$3ms_Hel1bs!_7PmRc zK#Eo^G)s(N*TlL(EvN#}n_-F^&@1=5){xA?G&t3>EV~O?1Z)n1HP~|T);t97tErKl zU#S8^^feYOp7X+>BjQG^dW+-ckLse`_e5D(N@Xj&lecd@zQK}o$af`kWzAO;i_-<6 zmhj-nCCIw1v6dBavpQC`S=0c-7pPJ?6QxdAxkc3NIv`u4S*UPoa_&S*(TdA4R$IGjFz zZCHFR-BlkMd71@YJJM>{GWgXjgB_|x2c6aY3BJKNSGljq=4G2^ZOvd?F}1u+ke8ch z472QU`}qm-9#6Ce&u>9(x4fDjU`5b%3nh-_1RP0cYEs^qlcs+wT@v0ks2R<{nJ2uv zwPQEWBrr4nT6|0WrJ1DtvK?=PD2qt7HM^_y_eDb&Gwoybck@DX58!Q8J2qRqq1>=$ zsM*A*qCpozWXa~`E#_!vJPH*DjJd`&)v2@Ip2kmotK8h^;eg?YZy$evhCjD zVJ=|Kc2XAfilM%u(K7tz5oZ*P)o0#LvAFXiF7N1;ZpD;(zkS5$d@HFafo`$HJ2M26 zc)Bh_xo&I%XNp^Hw&`ZmPYU~LBXpG);|lf_sp<|@vZPAluq>JHD;;H{gp9*hgvqH` z%`I&~rX*P_Gsh`o4PFONv7@q^-M2D}&xISV@Y)ep{PTB9dn!kYf#SicQ}+VyFYMHJ zmDWSM9H$JGW>us)TAu5Eez+pJHjfoqpw*t&$5qIrZCs}=4xhPwfG+3mbEiD<%BkWR zC{s0KPSUSxDDp<_QdxrRNFI30)am=^E z-imsxH`nCxR}9=-(^K}Vkv`G+Flt^)F3!u2hS+G0e6)Si`tdxb|y~K@ocLW zFKW;YsvNLI3ROcgYJQ{1rDn-oC0Tg1aQoT_Y%kfh@}67Pwsqy|H=o~-_S6jN;)-e1 z5L45e9`@unhi+!Qjl9sxRM)MS^vWq(l+nu0ywz|Ee4++gZcWwZrFx(=#KqdL0FBG? z3}PO^^$B`sX{P0#^b~2pj(7%B4ALjhmFzm<@>FJ?w9_%A^B8)Fo@AM_stJ^>=_X9+ z`5s;3>ui8^Ii)`ATD7e6QjNZ{B}_0u>rh5nLW&^1zc9xty474%OOG_lUa7qS7macn z2-^?b;<=|c@wpFj@x1I&++8x9zpk#SSl3kICniGQqr5AEH}EtgN*tgop&2gY+9B3YTojDB~MRr9^U z>gv3N%hBGXn<>0pR_xU|&r*Ib=ut+L4cr_P&wqPHjl3BFEoQ`)r`2WIV~INbT4^)J zBa%en+FtF6wAGp|Ug2e$vP|Pdrk5z1=gD-3*HhKIqQv}uV_QX!fJ%pmmQs$Y?WNYs zDNR64&l986j#uVgwu=YMPBgSKO6R%KA=|HNL~FB#%4=WGmN#G<@Gc0IO zKpbO~&TES*775m0+tE|7UU#~+MKgs%Gb0_XQiTQhte!Q)u9gfhXnOcH3rdT3{2n7*6O|>QO*XG*zh9%9Bkc#B$ z51=UrS{={dG;h~?6{$SV9fLAjoLDq&t8w2okFtgt&TwSOz`fX{_^vI{*u$ep zdTxz+HaITsmZ38^v)ftCxxtvMIpq0H6ZJjd7K=7XZv{GD6B*JkI|`!-mZ{N{t2oT@ zNCPGFRbk5c;!G?ZPZe+6w8;{rHQG*56cQziC~Yap6gmq#k(F2ciu2-_QaiGx?=?4} zbCNTAhXGU!i|jWdwCJ<-6}+}HaPQ?1CDG7m?0LSIyJ)o7s>|7i&b(Avz_tj*NXO_) zw2|@-bq4FCqR|qMhN@zV47X!?$w_y#TVrpnOOHy4sl-7=J5p{h;ZQ+ihy&>ky9+~MkI*pEg^Q?W%2#~9CB(Jz(4*a7H9bKTLJ zgzOpHqGd;uO+6|&dwm(}&x)n0Z@SCI!A<_5rKLn9^mDpzpYS(CvDUVVEi46It1?MV z+I6j8xsAK6Gq_(FKz7uA6%*Q!jT)m=j%>D|_6^j1OreOHe|m%t#vRb%ch}VWSuNC) z2HY@Fn1GzPy9#0MuD;*ZfJW<+2?@G_O)5csvV1Qu)zqo-=Py`}P*k;#xr^>{)^5is zLY}n59u|o%uGtTZ`mt>@$Z5%i6qj4`)snEI+^Y9DlsZh;Y$8d7>)Bc8(+RD5E zX*8Om8#E;-(vfDdNx0=0H>ZHvwz+a1PJ@Sp1e#hBrFV+?-eyCFlvDkjhjO{3@B9Vg5Xciy0tY%%LO@awx(!|YXhPnoUUqs+)| zQ4GD|;+!J0>OM&X6tBz`XXxyvMX5s=1D{zSTd3eje%C%woWO{|(#jTiX_*l>2OGzd zw#6)i0e9nGViT7r!bB}WA7lnuFG=K8O5E_S*;#(3Jj}^9c2={92zD;7RVPyC!DCP+ z!NC&YEzz!(b!``Gg{G_njx1Y$FW+N4+@TwxFa23h1BgM;C8$~m^HD|0eSzfPNfcjvn8dmn>i~2NK2h?lr zte`@PB_VhnFVmT0>zAo5bA}bhndzQsUQ!R9I5|2*m}2rOYm^jyuI2>pHdN})Il20K zXuBA%6e-pg?hgy2NnuY^#oa^P|>{U0K(xat4^ literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1_mlgrib2/sh_sfc.tmpl b/ifs_samples/grib1_mlgrib2/sh_sfc.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..957d49f917675e88ce1bda947a5923f8b5f3cac7 GIT binary patch literal 9358 zcmYM24>)7jzW3F29akOKsH#!NQB|X=s;WjEwYSt5V~iSOOvYp)A|fIpA|i>1{7*y@ z5fKp)5kV${F(zY-G1;3=Rh?ATaa0{u$LqT4I`cY?*LCK&?rZu!&wbZ^p8Z+h_51$T zTF|t0=&Flas405|F48a!`xS=d}@w;e%0r?>F4M7neQ3p%Wz77@5e7W3FRKX zB$%@ezvSeb65@z>3c}ZZs;twx5dFDmXOM-8;C;UQ0%}*~0zj;mbi+(rw z?k^e<_V5>dwLbVI9S<0Ozv!@6YkuL|uD|#ofsfZO`s_b{`I1wmqe+FN>|0V4E11Z^f?P3aXco1wazyW?|I$`uVYw~vs z9bjO=HJ~fOCCzZV3$z zT>B1ur*axT6E+7-b$EjB-Q+;$qDFw0_aDLj!tbHHbN>otFUsJv)vv>Tc{kxRwPyJ2 zheT-j!apG8pf7wzmIb`~bbC^q6P8l2TMm6R{df3-`{Cf1-ACZt(NjS7Rt@<6Tr$8Z z@c={0Q^A10{R`-S=6m?{PBwgIG8lUMKjYyyUaf@MtQhdOjCbIWA6&uw)P6Xk_(Q1U zVLy1*hYd%#96;EJWBA_0o z=W-*QTyPdhT8M&U(w=~R-{ycms&|3G)C?f%<8ENSI2QWylVzwg`Y|9pItRY>oi8+6 z`vCgeh81}9l@olkXBR$Ou9_SOd_Cn&0t$-yO#qy_`p-aD-80btFZG;<$qz>UJo(1TCUoPY zd;q-g1Pt>YgGvK`2m4)~g^oT}z+u8aLW)fXaG~tn>9hI-es?h*d~NJE0OwEf5F+Jf z^3vP6(8YpXp!u}VK}HM|mAntJJ0ajd%6cFyQjvz_&7rfuO8cfX$Y_LsipBpzpN-;HOJ!NPI^H z=~90Oy~TeY=$Z6~22FQT0NuruP!A(OVC(`s$`R1s(g(lx`*(nlhC0w!CkJYtEWq8$eT3KS1BCI9((DnsN#C7BqnM1J1Ou;mE=(P|Oowh!}PWLW$}j?!`5r z*5&6ETGE;U`{6sVuYWM07+wK*Xa5Co6rd;1zg3ygx^7-wQ@K0z^a`~@-TN5 zoO-Y52++ zvr~}APrqkDI?E0B7upbah#hj7v&pAJgUvXfS3IUpU|}j|qc@E15BzWK=@+z&?gO!0 zvD^gH+^Oc@Z=jBPK&s0R1}>*RS7g<&o@R?tMzc8KNs`1+gQ6dFgxJ`cj8BHUjCb^s zBPmi9Craa4?mCsyT4A%dJx1>?i~Qtd0M)vL8zv7oyR}6%2G{zv=5gmA(6kFRl)=T@ zJ58}{YM->-nDSifcoHYXqd_vIBT{mF;~9ZP#W+yNz5K1q^IuP^P=csjAGO)Msh$h7 zH{|A~X>;E?KzVbVrioElzD;J!XLWqsF6gdI?Y35Ie=-_5^}iUBnDiV(+JML76UJ6M zmzyYNvD1s^`js?{EUn7}w|+gBdGznQAc$3IqW*$3S|W8d*5TDouZ(d zpL1AYeHvRH3wYfm*fv<=izjV9W%@p?nB|y}&i2!#{`cd!wz8A2Y#38QTGEaH*+4$8 zWv%_3`_PUV8_O8kP;qX=)L|9WPsGZZ3a`OnHXF4wrIAM8auhlWl-jt$7z(m|ef^HscbrNv5CLw zkj-RgP#5pc(DFWZVPUGsxI^pJ>o9+et&*8$|2Gq4UQB)~|zS_9e>y!7cUta@M(`otuv0FN3#B3R&goSV1US;rUu@&YI=H%=4G=2oeDfD_sZgQzk z#6KsUG3Q?H> zDq#&rH(bg1)C}!&$GR5N=jpf!qHHTO5;OZfVRQtE%yqMP{lOh+FW5HQfAG_p%eQA( zcjDXCs97PpcjL+?n@yM}tP5f*_qsAJSjwZyo@d&G3+VkipVqC8^_Cc_4_%kB%}LHN zB&U5!W8#@h;s|V#Qr~I3;S^*jm&Sc=d-uB7vWgOGqj1>P(KbYJ62sC%9g}`+WUMuy z#R)eL(%6rcqF~fX?eySCJL?v?XtxCgZ+@O$ByCKsG373SPBJYkyxn^GMcnK2={lyT zDLjV`^t(-Y4ziW}C@@#ncSO_6gRV!F#>&lC(6?+7AuTxHP|W2laQa9l(KL0USIN-S z`(D|Qq}@C&Ke(~SHkFU)vMNyD%yE-yg$z>_x{Rit70DWOE!ln2TN$Dw6rB=K5mw{d z9L;bWUA?uV4wQ%G1Qc`H)gmPkQx0pDzKNWbHGx;veNTrR#SSxELxN8 z;J|oyY7{Y|g}bS~i(?wU9bI}Zbv-++i6f`S5YKA4;ng07L@TLst39X9qeUpm9^9#C z6eBx43jG;Qt*wU8luh#%THDu!EIo~$&}ZQ!$c)$1r?+X|`Fx)K=|SfTcDCQ`o=oqa zj^mQ5Jx64zGWPgrNSkL}T&a93x`iXp_d=62B*RrpOFTGMQQl>S4AH9(ryJ|>b88CiQwoM@YIAPuaT zWiCn*C`WCK8=Ubq3|_zxU<91f0LEB5tt*P^)$J{v~vK8H&!KWO7$PeU(P z&-4g6W@fS~-3ZS`k~7KUB;_~pvW-%bc;hR_GJAg${+>%b406mhrX6tOUg?uL^r#Z`SfHViC>ZGJli9?{HYT( zKaRa~=rbSuW`phAF>*f@r(L{;lZ=ur41SlG659^rWQOBhlHx`AHgAbHBnW*N-MZSP zviRw9wK565FhTBZ4`vN>kWVRceS?#mc5fy(w$@6YHAS}s6eO!o;Ak_we>H93yIHcE znNzr>NKkGt!={c$v($bXqn;q2|BS0}QtVZE=5$Jamr6L?d{itip_BA<8f~l6K9*VK z`cqz$Tlb+LymwZiVu)LFDx;|(^qoeBWQpX#GLVi)E4&&5O zyBW2(;Vnb5jKEzMc$Wo`MY_8&v^4WjqenHSJ-jZknZ?TE)3hsBrbKGSikW_WzR*YYEX{`X$F9!h zF%k_V3BK1)8z+pqkw0KG9w05W6@FC7YURi^x4IXdsj96Eb8jxQ@6t(4NT!z{>55xD zqC+Jck!58VR*02gULs8fBQ1F>Q?L8lv!)%(#&B#ESwpt1G#_H72Yrc~W3il2^(ZrN zaDg_{&LVQ_?Btb39Vw>PTenOfpvz2w;&CIgK2C{z@SI||x)*3VY`4%fGB(g0Zpf02 z$+zukN_TimnxpsCV#Gt`=#u;=aTG3pu08tcc9YhUMj;G@RnK;;qa%m1M_}2sbe%ME zUzr?6oRA4EyN(6cx-rHQuU+q>Q4tl!TTV1qibxBgouKFIqgy<=s1n-P#OSy&iIO{K zQ_i()nYPQa#lp%yroCFmp(!IN&jvG_adp;45{2BlTq7-uCj`olnQlUxa)!5@HKK6H zx4TBKklU2Vr5j0U@mDN82ok?0pqx~5R6BiL$%-c1E7Pxr*75UPMf#6?gzWQpMc~!F z#;tlIC#oqD&8-`5iphE*T)(;3r>coiB{U*?{l9!hIxLHB^O79W@V6O_^zsBu94f16 zg@r|qmTE;=oawRzMtJdDqqk*+c*2~rVwKXqbRJ2(hMueUrg&b<=g6)Osq;QPQ6aN+ zTAK*dmdTv1$2L6YzVSRfmCE*X)?8g@#p6{FmvFXQhr3iqAaLkY@J z@eCW?f@s3g_et?K2bWm2Mv`lzZw-^|xeTmf!-q2t{&~CRL=;(=P{$q|}Lyd2_OPgr8$D^;p$Gb>`x24Y$oCamXB! zBLdr!M|W@Vss*(aQBa+Uhb+w#Gx!I0Gf}~Jcbft^v6?*PagF_vS(@8wPnkAQ(bCK7 zlv&K2mS1X?gfqwWT+AkSz&7+OvP*w2(L%t@w(d|Dg=liJD(%+(;QqHp>*`&^9ba+M z9cR%q$|em-7c%w9Y*9iLs$+cl(# zjeVOVuvf(=rP`cOdktblg%s#22fr11I=C8I2YpA7&lN zlle$)zF@H$rPJw+7lv!;`3vgBhBO6AAKN%$IJg>7H-0OqjMflPND-IEb?qvGdS}QQTd+8`lEz8B;oa!@iMbSGqV_&-x69Ded>us;YEbvmO-WUuO_oYo z?PgbGD_uQrdtSm3WtP*ML-I$A93Gvj)F(c`nO$pSZ5zfpnrH23)A8vp6R#Q5swGpy zWA|bt;*JpF;pr}5INuY?VWf7f-FK}Uv%X-Wt$t;CDuTN+>?RwbkB%R;9Eygdsnr?f z=wh9iUp+M8RC}4d``{dKWYf?z_nFX3wwWaF)4maqwNeJXm7 zGh3ppHQ(N)Y*xCPrP;gvNyd4#UzOoUbN8%rU$tjJUybctR&Mtrg<1BQj)Z>ejAvs~ zy@xcKx?P!wLCC2{`RPBpvSo!fqtGF><%tp$-PxPX!;dU>ihtzvfW6jEucqf+QjIG! zv}4XnC3qGLT+`Rh60sWnFwRbQ(iDtd4`z5Br7jV>S?8g&7CAeE&B^LTDoUM+dO=22 ztgFyM_w;AgDw%6}-c>*D(De~km|T3zOqFt?I43fyg(IYVK0e0aB(a7#yDe+HlL~U> zlrc~jsh6=S9k^OcI$rAX*+Hk1%hiWgCR^4ULrls6)c8yby=hFb`7rKbd{2(bpbDXc z&^fF)-ij)qk?#mL?ZKcztX{Q@;`4cd9Ig@394sTt;;H;XDKE~zYST~+9107MUMM7# zY+l(Ly}&~9nj`y%^Uw@Z8dgttKUslnGI zh=qNt*9i(WSE<1bsv2;5X{UzDVZV_1b$NDWx5}AtyRk0wmUkP9Ka{gmIVz58j>{hE zw~NuAMKk49p|{m_>)j4oEc(c15}}85cktXi3G$9ckFBRktZE~hHnvX+Z6wl1s;0?w zJ(_5jjoMvC23kWFbi#zk*#!IjMWU}h@cY&zxSD%>+s9>NLXZ_0v^$i66?cZahexjpccKvo8B zI)C0EuBRBy!U&Up|4?7PX+ahyFt;6+p_z8n`qhXsQo}&Q92Z@U|ME~X`|U(V=pW{b z8&$0`$AU%M=vkR;9D9o z{7g!O0GXF4+A*2+Aw<8SKtaZIykes}h68F@EeQiimY>?!vP10S?N-@&n+1e!Jw2J> ztT-k|)od$O#>G->?+hlPXZIn3YlQ+S8Le*N2s1X_zjVHMg^Mg^=w>wo?CI7(E=N40 z3dbcW+<8Kct#!l@Aexo0Se%*+j>fQ4f|ZAnXB$I`cOF{U$m*jBt!zVy9ADIM>vK#d z3%i3P2)ZX!Z}1X}=NgcmrWztMnl>a=vy6I=#vlz|Hr;Bq9*6?uI72$c^$QG{!61}p zbjDGMb?$;`YIF;Ws}$uKa3v_gToY1>=lk_6tCpL2s3?HSPi~0QkbZrvHIF`1ja#v%&wd71L;m4xs+TJMcu&qvG}E~ zy!F-~{04ieUR-7=MWm;SRV)vFYEwLIK$@#x>qvXFZ7?=^Yi89drfbt?^+cmP$8N<_ zVwlplk)pKE$W*hDjAB=FJBDkW^%jNr@f5<+>=fly_=~j`*TQGDdllLqHPZ5cULJ2z z_9(UKR79y)>oy^h6If7W=n~ zR*C9LRp|&RtcW6P--n zT211SDwKRObEg1BPetW5M{r+MFV(E%r%lgF;yO$wac`<7Nth%UDB*WHi*xl3w1MMS zP1nTsCrZ-Ck+hIjF*~a=qa&m~!w`2ZtbGojsTw9drzO%jWRhZubV%8(TeW$yrpwt+ zRp;mUgqloip3tO>Yr_k;{i&*iVt2#LZ5LriZCgZET91ASo_6CsBe*dLIy zpnlP9OMl*XfH`c*pt~sDn}T`agD#SpI_@J*K0+Fl7u3H=iR#K|%aUbu__q#g5PVm) zS?R`=cgxxxI)C+)4og)Rj8(_W!IrpMf|#%J6J*n!>e;p-L2l)&&W-O=9wDA@48&p$ zFT@~yul=~`WMF{Asljl95Mv@DHJk6nb}_oPCh)UIhXfvKYu^r@WXrEPsPSWka?EO0 zOD-wI=3BLOU)87-o0{Y5bIZM$nno<&wcLk$VAENf^q(}7Ezz{y_Wef#dLNx!mzL>LdqU?(hjiPuhtheOZ~sO^ zI%!2at|YQN*@!ESyK7}unz1a3jV?Zs+N(WoE;Qyg=$P)GYR3A?Fx4^Fgb$99`o`$y zIrI#7f<&%QKZu)%T(+H8Ll+C{hxIb){P|t}G5-UCk1B z+~x?##4MwuB}|LK3oxVovT1;vXxXJfX|oim1Yl?Mv*?v7SljPrbHUX+UTa8FFj z4w#k~88B`#GM016n!8!3EGYWKEJ!O(y5gRL_(~3jE|t#Mo=&^j-D3 z#@HNRtL@tt#PibWf!z^;+1B8cDBFxGTbB z5^p@?&TtSTZg}zoUtJbEsxz{eb33zH-Qpt1sSRK!$lUr;%kfq5RPDpn%814g!BD^O za^{G9c#Ik}8Z?NpjCZ9yS&}D}t9S{wb`^%pxh7Y9h?&q7D$8o0BB{EtlAv0Drf>Oy zd?}yGBia0$26*1&1o{cdfC$C%`DzX@m? z&JGEZb6Cp{(kSh0!q!nA|(Grz(jgtz8UOV|xW7RyR7xnSy zY-6`}RM}W!Zfbqp=h>`9t_#D)JZbi1CiAje40p^p7lEP42Y0|vt4G-OSVNsKWrdv7 zl6hmke5}j|X}4FSn`r)lO^4ubH6WFm<~`JLHQ13nh9l+= z1vA`;F6x6O97~_U9+RQ-M}zv}WGJ1jc2t)piWP2-Z+5Gjr<)kn*}d6Ums_a1>|r*| zMj+O2lOi42HacdZs&B^YwzUZ%byQPW2GbBTUq=-Y`&}wMy1Yh`E5LSnt7pHAJi*bj zqZDpj;z-cvedYP`eO9(~UXj(2Rtt)qxA9g(`H>bca@A-JNP~_>(Ps4^$?*eXrN-gK z7K(jk8G63N)Zic_akE>vOnwEfjZvbeZ&_q0n5{JHJ7CRFwV7>UMQG<}a{eM+IbcDD zn(bwy)?~h?7TbX#xqnXKZ_#5VPU#EH4r{5}QGvX>#z^N{diI`ZRe0f;#iPlM@mxa{ zdn>hEkD3LpyJfg4igqw!sEQ>z`Ek5)tt3-;-|D8f&+z!g=QE0I3Vfj~U8|IDcCH EFW=h0;{X5v literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1_mlgrib2_ieee32/Makefile.am b/ifs_samples/grib1_mlgrib2_ieee32/Makefile.am new file mode 100644 index 000000000..bde839398 --- /dev/null +++ b/ifs_samples/grib1_mlgrib2_ieee32/Makefile.am @@ -0,0 +1,268 @@ +#This file is generated by make_makefile_am.pl +# DON'T EDIT!!! + +grib1_mlgrib2_ieee32dir = @IFS_SAMPLES_DIR@/grib1_mlgrib2_ieee32 + +dist_grib1_mlgrib2_ieee32_DATA = \ + gg_ml.tmpl \ + gg_sfc.tmpl \ + sh_ml.tmpl \ + sh_sfc.tmpl + +nodist_grib1_mlgrib2_ieee32_DATA = \ + GRIB1.tmpl \ + GRIB2.tmpl \ + gg_sfc_grib1.tmpl \ + gg_sfc_grib2.tmpl \ + polar_stereographic_pl_grib1.tmpl \ + polar_stereographic_pl_grib2.tmpl \ + polar_stereographic_sfc_grib1.tmpl \ + polar_stereographic_sfc_grib2.tmpl \ + reduced_gg_ml_grib1.tmpl \ + reduced_gg_ml_grib2.tmpl \ + reduced_gg_pl_1024_grib1.tmpl \ + reduced_gg_pl_1024_grib2.tmpl \ + reduced_gg_pl_128_grib1.tmpl \ + reduced_gg_pl_128_grib2.tmpl \ + reduced_gg_pl_160_grib1.tmpl \ + reduced_gg_pl_160_grib2.tmpl \ + reduced_gg_pl_2000_grib1.tmpl \ + reduced_gg_pl_2000_grib2.tmpl \ + reduced_gg_pl_200_grib1.tmpl \ + reduced_gg_pl_200_grib2.tmpl \ + reduced_gg_pl_256_grib1.tmpl \ + reduced_gg_pl_256_grib2.tmpl \ + reduced_gg_pl_320_grib1.tmpl \ + reduced_gg_pl_320_grib2.tmpl \ + reduced_gg_pl_32_grib1.tmpl \ + reduced_gg_pl_32_grib2.tmpl \ + reduced_gg_pl_400_grib1.tmpl \ + reduced_gg_pl_400_grib2.tmpl \ + reduced_gg_pl_48_grib1.tmpl \ + reduced_gg_pl_48_grib2.tmpl \ + reduced_gg_pl_512_grib1.tmpl \ + reduced_gg_pl_512_grib2.tmpl \ + reduced_gg_pl_640_grib1.tmpl \ + reduced_gg_pl_640_grib2.tmpl \ + reduced_gg_pl_80_grib1.tmpl \ + reduced_gg_pl_80_grib2.tmpl \ + reduced_gg_pl_grib1.tmpl \ + reduced_gg_pl_grib2.tmpl \ + reduced_gg_sfc_grib1.tmpl \ + reduced_gg_sfc_grib2.tmpl \ + reduced_gg_sfc_jpeg_grib2.tmpl \ + reduced_ll_sfc_grib1.tmpl \ + reduced_ll_sfc_grib2.tmpl \ + regular_gg_ml_grib1.tmpl \ + regular_gg_ml_grib2.tmpl \ + regular_gg_pl_grib1.tmpl \ + regular_gg_pl_grib2.tmpl \ + regular_gg_sfc_grib1.tmpl \ + regular_gg_sfc_grib2.tmpl \ + regular_ll_pl_grib1.tmpl \ + regular_ll_pl_grib2.tmpl \ + regular_ll_sfc_grib1.tmpl \ + regular_ll_sfc_grib2.tmpl \ + rotated_ll_pl_grib1.tmpl \ + rotated_ll_pl_grib2.tmpl \ + rotated_ll_sfc_grib1.tmpl \ + rotated_ll_sfc_grib2.tmpl \ + sh_ml_grib1.tmpl \ + sh_ml_grib2.tmpl \ + sh_pl_grib1.tmpl \ + sh_pl_grib2.tmpl \ + sh_sfc_grib1.tmpl \ + sh_sfc_grib2.tmpl + +GRIB1.tmpl: ../../samples/GRIB1.tmpl + cp -f ../../samples/GRIB1.tmpl . + +GRIB2.tmpl: ../../samples/GRIB2.tmpl + cp -f ../../samples/GRIB2.tmpl . + +gg_sfc_grib1.tmpl: ../../samples/gg_sfc_grib1.tmpl + cp -f ../../samples/gg_sfc_grib1.tmpl . + +gg_sfc_grib2.tmpl: ../../samples/gg_sfc_grib2.tmpl + cp -f ../../samples/gg_sfc_grib2.tmpl . + +polar_stereographic_pl_grib1.tmpl: ../../samples/polar_stereographic_pl_grib1.tmpl + cp -f ../../samples/polar_stereographic_pl_grib1.tmpl . + +polar_stereographic_pl_grib2.tmpl: ../../samples/polar_stereographic_pl_grib2.tmpl + cp -f ../../samples/polar_stereographic_pl_grib2.tmpl . + +polar_stereographic_sfc_grib1.tmpl: ../../samples/polar_stereographic_sfc_grib1.tmpl + cp -f ../../samples/polar_stereographic_sfc_grib1.tmpl . + +polar_stereographic_sfc_grib2.tmpl: ../../samples/polar_stereographic_sfc_grib2.tmpl + cp -f ../../samples/polar_stereographic_sfc_grib2.tmpl . + +reduced_gg_ml_grib1.tmpl: ../../samples/reduced_gg_ml_grib1.tmpl + cp -f ../../samples/reduced_gg_ml_grib1.tmpl . + +reduced_gg_ml_grib2.tmpl: ../../samples/reduced_gg_ml_grib2.tmpl + cp -f ../../samples/reduced_gg_ml_grib2.tmpl . + +reduced_gg_pl_1024_grib1.tmpl: ../../samples/reduced_gg_pl_1024_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_1024_grib1.tmpl . + +reduced_gg_pl_1024_grib2.tmpl: ../../samples/reduced_gg_pl_1024_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_1024_grib2.tmpl . + +reduced_gg_pl_128_grib1.tmpl: ../../samples/reduced_gg_pl_128_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_128_grib1.tmpl . + +reduced_gg_pl_128_grib2.tmpl: ../../samples/reduced_gg_pl_128_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_128_grib2.tmpl . + +reduced_gg_pl_160_grib1.tmpl: ../../samples/reduced_gg_pl_160_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_160_grib1.tmpl . + +reduced_gg_pl_160_grib2.tmpl: ../../samples/reduced_gg_pl_160_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_160_grib2.tmpl . + +reduced_gg_pl_2000_grib1.tmpl: ../../samples/reduced_gg_pl_2000_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_2000_grib1.tmpl . + +reduced_gg_pl_2000_grib2.tmpl: ../../samples/reduced_gg_pl_2000_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_2000_grib2.tmpl . + +reduced_gg_pl_200_grib1.tmpl: ../../samples/reduced_gg_pl_200_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_200_grib1.tmpl . + +reduced_gg_pl_200_grib2.tmpl: ../../samples/reduced_gg_pl_200_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_200_grib2.tmpl . + +reduced_gg_pl_256_grib1.tmpl: ../../samples/reduced_gg_pl_256_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_256_grib1.tmpl . + +reduced_gg_pl_256_grib2.tmpl: ../../samples/reduced_gg_pl_256_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_256_grib2.tmpl . + +reduced_gg_pl_320_grib1.tmpl: ../../samples/reduced_gg_pl_320_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_320_grib1.tmpl . + +reduced_gg_pl_320_grib2.tmpl: ../../samples/reduced_gg_pl_320_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_320_grib2.tmpl . + +reduced_gg_pl_32_grib1.tmpl: ../../samples/reduced_gg_pl_32_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_32_grib1.tmpl . + +reduced_gg_pl_32_grib2.tmpl: ../../samples/reduced_gg_pl_32_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_32_grib2.tmpl . + +reduced_gg_pl_400_grib1.tmpl: ../../samples/reduced_gg_pl_400_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_400_grib1.tmpl . + +reduced_gg_pl_400_grib2.tmpl: ../../samples/reduced_gg_pl_400_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_400_grib2.tmpl . + +reduced_gg_pl_48_grib1.tmpl: ../../samples/reduced_gg_pl_48_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_48_grib1.tmpl . + +reduced_gg_pl_48_grib2.tmpl: ../../samples/reduced_gg_pl_48_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_48_grib2.tmpl . + +reduced_gg_pl_512_grib1.tmpl: ../../samples/reduced_gg_pl_512_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_512_grib1.tmpl . + +reduced_gg_pl_512_grib2.tmpl: ../../samples/reduced_gg_pl_512_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_512_grib2.tmpl . + +reduced_gg_pl_640_grib1.tmpl: ../../samples/reduced_gg_pl_640_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_640_grib1.tmpl . + +reduced_gg_pl_640_grib2.tmpl: ../../samples/reduced_gg_pl_640_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_640_grib2.tmpl . + +reduced_gg_pl_80_grib1.tmpl: ../../samples/reduced_gg_pl_80_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_80_grib1.tmpl . + +reduced_gg_pl_80_grib2.tmpl: ../../samples/reduced_gg_pl_80_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_80_grib2.tmpl . + +reduced_gg_pl_grib1.tmpl: ../../samples/reduced_gg_pl_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_grib1.tmpl . + +reduced_gg_pl_grib2.tmpl: ../../samples/reduced_gg_pl_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_grib2.tmpl . + +reduced_gg_sfc_grib1.tmpl: ../../samples/reduced_gg_sfc_grib1.tmpl + cp -f ../../samples/reduced_gg_sfc_grib1.tmpl . + +reduced_gg_sfc_grib2.tmpl: ../../samples/reduced_gg_sfc_grib2.tmpl + cp -f ../../samples/reduced_gg_sfc_grib2.tmpl . + +reduced_gg_sfc_jpeg_grib2.tmpl: ../../samples/reduced_gg_sfc_jpeg_grib2.tmpl + cp -f ../../samples/reduced_gg_sfc_jpeg_grib2.tmpl . + +reduced_ll_sfc_grib1.tmpl: ../../samples/reduced_ll_sfc_grib1.tmpl + cp -f ../../samples/reduced_ll_sfc_grib1.tmpl . + +reduced_ll_sfc_grib2.tmpl: ../../samples/reduced_ll_sfc_grib2.tmpl + cp -f ../../samples/reduced_ll_sfc_grib2.tmpl . + +regular_gg_ml_grib1.tmpl: ../../samples/regular_gg_ml_grib1.tmpl + cp -f ../../samples/regular_gg_ml_grib1.tmpl . + +regular_gg_ml_grib2.tmpl: ../../samples/regular_gg_ml_grib2.tmpl + cp -f ../../samples/regular_gg_ml_grib2.tmpl . + +regular_gg_pl_grib1.tmpl: ../../samples/regular_gg_pl_grib1.tmpl + cp -f ../../samples/regular_gg_pl_grib1.tmpl . + +regular_gg_pl_grib2.tmpl: ../../samples/regular_gg_pl_grib2.tmpl + cp -f ../../samples/regular_gg_pl_grib2.tmpl . + +regular_gg_sfc_grib1.tmpl: ../../samples/regular_gg_sfc_grib1.tmpl + cp -f ../../samples/regular_gg_sfc_grib1.tmpl . + +regular_gg_sfc_grib2.tmpl: ../../samples/regular_gg_sfc_grib2.tmpl + cp -f ../../samples/regular_gg_sfc_grib2.tmpl . + +regular_ll_pl_grib1.tmpl: ../../samples/regular_ll_pl_grib1.tmpl + cp -f ../../samples/regular_ll_pl_grib1.tmpl . + +regular_ll_pl_grib2.tmpl: ../../samples/regular_ll_pl_grib2.tmpl + cp -f ../../samples/regular_ll_pl_grib2.tmpl . + +regular_ll_sfc_grib1.tmpl: ../../samples/regular_ll_sfc_grib1.tmpl + cp -f ../../samples/regular_ll_sfc_grib1.tmpl . + +regular_ll_sfc_grib2.tmpl: ../../samples/regular_ll_sfc_grib2.tmpl + cp -f ../../samples/regular_ll_sfc_grib2.tmpl . + +rotated_ll_pl_grib1.tmpl: ../../samples/rotated_ll_pl_grib1.tmpl + cp -f ../../samples/rotated_ll_pl_grib1.tmpl . + +rotated_ll_pl_grib2.tmpl: ../../samples/rotated_ll_pl_grib2.tmpl + cp -f ../../samples/rotated_ll_pl_grib2.tmpl . + +rotated_ll_sfc_grib1.tmpl: ../../samples/rotated_ll_sfc_grib1.tmpl + cp -f ../../samples/rotated_ll_sfc_grib1.tmpl . + +rotated_ll_sfc_grib2.tmpl: ../../samples/rotated_ll_sfc_grib2.tmpl + cp -f ../../samples/rotated_ll_sfc_grib2.tmpl . + +sh_ml_grib1.tmpl: ../../samples/sh_ml_grib1.tmpl + cp -f ../../samples/sh_ml_grib1.tmpl . + +sh_ml_grib2.tmpl: ../../samples/sh_ml_grib2.tmpl + cp -f ../../samples/sh_ml_grib2.tmpl . + +sh_pl_grib1.tmpl: ../../samples/sh_pl_grib1.tmpl + cp -f ../../samples/sh_pl_grib1.tmpl . + +sh_pl_grib2.tmpl: ../../samples/sh_pl_grib2.tmpl + cp -f ../../samples/sh_pl_grib2.tmpl . + +sh_sfc_grib1.tmpl: ../../samples/sh_sfc_grib1.tmpl + cp -f ../../samples/sh_sfc_grib1.tmpl . + +sh_sfc_grib2.tmpl: ../../samples/sh_sfc_grib2.tmpl + cp -f ../../samples/sh_sfc_grib2.tmpl . + + + + diff --git a/ifs_samples/grib1_mlgrib2_ieee32/gg_ml.tmpl b/ifs_samples/grib1_mlgrib2_ieee32/gg_ml.tmpl new file mode 100755 index 0000000000000000000000000000000000000000..10c5994320d1e0031635dda746b7d3262952f0df GIT binary patch literal 27684 zcmd42Re0N27X=zNOR~j`wq729IUTf{GQdP?2|Nb2n6ZOAWI}QAUM@Kb@ii(elHe8LPtpDeMD0@s) zG}vO|qQl{EVpLSLF%}$2x)&22r6>IUf4{)NM*scke@Eg=75#5NY8cqTYmGbp--qB> zI4TN@qNB7ZJt`0tiOL3B>8Ns1m80r_zik%PE~?l6wxXyJQ4_(o@c-GiME&2}{;2UiHI-xs=r^+DpkdWY&fc`UoG)nGRV^4&wN}BTz3BxDKi@0Z@U2+EfxX)c zF6Eprc-(e>!Pm4_h4B}Q3gP?dg-l_wLhbv=!qB&Og;|+P3kz4wEUc3Jtg!xmYhi2e z{=#mx(hCQ=iWLssQ><{*?1_cr1*C9t#=F94_o>2J24mrz1v3lh%|BT<|J#+q1xqUz zE|}V>aQ@ze!g&NzID7K;!Wo|Ng_CbDFC4dXX5olS;le@1{e|5MOBObFO)acm?OtI) z^vJ^GdTR^SdBqAHpB@#)Oo}UboKd;p=!8ZEt9rC57@xSkp!Jsy1=&iS0<=VK$-8W= zl8aNKN;W**tR#YQB~~`MS3` z+bzSi_jtzSw9=XIflir2h!2@}KF`le375+nb8%+YId3={GZbZ)f7>m4G|yyjJ^VTQ zMWbRlSd%q5=`Y)WVzR*%p@< z*?T-Mt808-iG!xRa`S8CRrz@#ulCi4d5z?6dCmVu^V+=h=XGq+Ew5{VGq1;p#d*C` z9C>}a{*%`~L(Us8)SEZ3*@nEL|BW;r{~r)UMU@CVA&bmWQOJLvCM19eZ+XNJC>@v> zI2L#kcpG>cI2D*2$oAjx7x_cJyS~Z3X1?~mO@7`#!T&KhH~1k`Cp15_I&?Cug?ojE zhn=BfL973#zp?MTue!INXRoKeXN`A_??oUwa5h*WygIxC{HzME5045r3m-^a9%&Hi z67eLSO{@{#9gYru2`u#w_PzGa^8WA!Jb!w+c^vw3eWRzPw}Y>Rzja_m@LA|;xOrq* z5+Au32_@c1d>^4BeO9WE=iQfI5t{%Y?_Sp4Zy5D`oUDaiBHgJv6b384)Q~X^5{|3Xs_+W{U z7G9b7GqOFULCUdIYijkB(aEKgy(yhjFQ+w2+nzQqby!N7q^XJHLpMWx!*Xa(aAjbZ z|E{l@e$1WdZmh@a)%0DSIK7!WsC`l+>c7t4?hT%*zU9GniBRH$NP5Jb_*deY$jqc| z$xBktr_M+@pRy)3I^}Xo>*OQJ?@||~i|G^6m!|hlTb8;urAN~A#Pi`kVQ2VC_)fTL zcyYK>aDO1lS6_eUe(OHw9_KFUy5LTCA9t5^4RAJ4hboHFP9vQs-D#eE{v#nncxPgh z#CC~yBON14B7GvYlknu7sln6@sZCQ(rwmN3mo^|BPyL>{I=y*Di%d&qpNzNZm(wk2 z)|8q_ha!C=R78oG6E8*r5g$17zCb7MJI?_R@80FoowHr1-2GjToYmEp%4KDdnxV1U zO_$a4Ffb?hF5EJ_KD0Y5MQo9C5pUwwNHAGUO-XB%@=wZ+)aI!#(uSt%>EAPi^w}Bx zvn*LlvfbH#X1&hLN#B>=DScwvqLeL3gCcj58YX2Vbxmp#85l{6lt^?2F9cTm&-miK zb3M|wC|l))a+cCiU7&8#rn?&GzkL1tFGJyQuh5ZDvC!Ly zC22v@z$7H{Ir1jyM9Ryw&1u=G)|ASr&eS<+RnqHcL^9rFw9nu(H|50Tw#{vv(=zK; zW_)_-^kV6|)7Gc7Nis&#k_<^|QpL#2!~x;Dq4FVfuz#>Zu(-dgPw;j2F84fkUvaGk z^YT?UyH;x_)PagYj+chYUbR45=e*?Z|Xc(`;Pek4J-{z3HbemV6=*PHP3#}O7~e^*ZOGw=G)A>4rQ~SovJA_6vszcRQWG&p1k`9f*oH<9~boz_Ucm-1&S zl9H1=Hl=B5)6`2~?Tk$Aka{?^XWHD1tc=&0F`3rP&RHqh4|2ZciaG!0JkM2g*sROh zp6uS4-_stZ*du!rq0sN(?cmbjm|$BFG3$Jfyi>d;-)8@Zz=q(uARQP7VwCoj(C2~Z zspjsjU)Ia%zxAQ6iY{H-s7=!vD^um`N``Vp>*}tmfAJLahJ7Rbf`4K#9GV$g1tNW2 z_|L?JiE9#lTW6cPR&W#l~O*nM_R+wi78`J8mAsf`<*^1{cy(Fth}t=neL2D znWwYkb0*}j&ApvFF?T@Duk6}cm9mBGX<5k`v8j=yjfpwI>wzx*_x@u6S74H#1hahK z)7SIBd&T!FP(4^X_%Xx;NBakRd3}MqhP%L%q(9YD^gVhby`AfXJI1X!i=6$Pgw{z- z0x_~iJLTHzneI#QzVJ==NBnyOodTDF1A{Aq|AfWx%Wz@nMtF4C61tTrMy@6IOG!wc zp3*jrO)HjaP0mf~n9?|{c>2wZKQpIg8?sJjw#y(gMr7sYG|b(Umz-BWuWIg*9ADO@ ztP|O>ndj4or4cFnlGcXz1djOL`*M9V0wsb){?%Z_&Uoi|UVD9>0p9-p#erMFwV?~4 zI)QrL`+7(BbN2~-i?@S*N#Eg_;~C@L>uT!ir|kr>T~S*M?xUyX)$Ti2y87t<_y+ki z{BQlE{G{LGJMAA8$PX+J<%csupMxU61*`lj#p~jZLStMo4GnUk2ue`GF<)jJkLWf z<9+YD39??Q@0s_wceF3cza)qUZGj%XFTRGpm%h*bl7Y^_ZJ{P%C9!lQFKJ)Ol9c0# zc=$m0U}D{*O{qv)RGOYPE&WwSjf^_!|EAZ@5HqV}8*^OQAG052|H@IbmuB_JoSbpbNiG|S3M~d1_^{`*r&%ixHB+gH=edM10ed2_w> zy|ui3y$!w7z1zJbJxBFHy3sAT%Xun!o_MBtP;V=L1K()xP|q26DRqjpN0Q}iWr1=| z8KC932D|IJz3$q&F+W_Sv#`zti@ULvmF3Ks{w>CW^Bl~keQa{&U~CcC`F5O2~Q3#4E7Fo@>TYn^*r^) z`4arWfEbt*sODehyXf8Q`3bh)o*dn!kJS(By*&jUx1Qpz=VshKcRl@%r-Nq^$mF|y zv;ALu-8~W4zgk(jk(960R! z?H%J@>7M85n-Y1@)-qv6ZxA#5sHS${k=UV8^_FVE-_Bi$8?n2iU_h$D* zeU8WA?(WWVcLuq=pB|%U=#YL>f9P51yY8>-8R`x=$Eu&ydCrc`^UiLrKU@=?v^LG@ z*N!o^x)*Wp*ub*K$8}tCig%=Uv(C95xPH5J_jkR4yU_VlyRH7K9G1r`leJCG^{)G##=Zg{;_d47dV}74 zPj|hq-d*3Tr?~!h#kfW}4{E4#M2S|5Yx(Lp<)#8lrxn7P=lta|y8Q0t-kbhQfq4P5 ze|O;D!1>_haKA`q0$W8EZ1% zWX;V=&!p4GrWK?SsST2m$gafmp;YfQJyBQnSiOwLpwywAos|=G4+O)EVup3%1hQHcin6yKv`m=Kxo87Y|TsxO=<%s;=qZ-L$sK z6{nZ?aGomqO4l)MhuT|NA>Re}w%OImebWQ``Jf&c>YL+fpm))~=!4uF-80=w-0SqN zdP8@j>!Ax%&&%7S({d&Gi*!gNg$2SYk&;(vGqrl^KhBVQowuRygMXUuqpv|AIZ)MK zEszpQ3g?A~B$i3+o47mDGqNM;MM@-PXo^31MRGItf<^=OIm1)+sa8Lgkhk&@Ad=wT9AFE|L!_+q8f-Pivqp(jGe#ooif++y!of zyNi4<7)=iR8xHc zh=rBzzubSi=XzRtwz`X4X6FcXjMPfFA+{7B2ut|l+(@ngKUkbBpO6p8J=IapdG0ED zBTu~NvNzw?%-_dv@;31e4wMSAf!D!Kp{bz{;Z5OdiO(auB5fj`2$lE(ybnk=rJP9f zr~R8gG5uG1h19Mow&W{G!xQ%;<|J;6%#5(1bYCk^Ea0=}v^`2AnU`eIE41P|uoKw( zLZ)0#U8H@}eyd;ApXxw)vr-kTVpMt~|DhDfTjc|)Sy?A9l8TE_A|bw)PAG9oro2Px ztZq_&YfoJ{uAc5_ceXZA`RpX!1N0;v(R=CnZnMkcDsuI3Lh2{2$SrsV`mP1{gd-py z~QuN*FmT)X`)3+ z)sDHgxXS=0)Iv}4toBv*MS0e`r@GI0eE@F{`cC@}`m6bk{?UP?z|-LE5F5%0;lY)m zw8T1*_K_P&k5ihajZ6QWk(fR+&6m6>QX~8$TsG7>cs8Vk{teFz@qV)>*&XHds_o^9 z!Vzu-m&py|2582EuIq|JnUECy1kp_xWrP}f%d9Peo zsi2%ux=4?On|vZyi#PI_{5la5KS-5iQrW7OQAN!TVxh5fvh$<5K$)W{&hgGw&c&{m z?%l4vu2i?t-PhGYTd0;-gHGDr&Exew3Z4zm4Nnb@^AGUmdMN#dYn;|cJ)r!Mf6LMG zbmfjxPc9>uRAl9-+*uqau94CNiFrdGX6m!!xk|i+-^#7wrz^S6C9Z`a50&*Ky03UT zdi#3~?n3RH)8iiLzT*C^Kh!UH$^tGQtDo|0@|E$M15rU!Ff*7H4kWHmY!``1E}m99 zBQJej>e-YMNmTe=@I=7l&-ESiy#?d`&NovZ=q#mnSL(>JFr2ADRU|)CpQ%sOB?=}} z@x??OwUc?zTg3&^Z1JiDiyire+;2Xf?;zv|(P9VLCf$&eltTHD^h}&2?BZ*&o!E0+ zU9LZ$Av71OOLqCR@=Y0_+SR4XYqb}6cgmmC#ZJ~a)Ma#c)yuk0IbXXryQ*kylmQB? zbkugZKX~f;Jb_k$i-F?)V!jgkYgfQoUVW^T0%JB$WchPKT@e$O^E-ux;sH4y8!rkAdgLt2I%k98#^Ze%YSqe?L6+X zyY@MogT47K%w1ony^G{3(Q()kG0K6`O#6$A{oe@IuE{WP@WH-jf_oDfCHp2(y~4$u(me zG3A-QOigAiXA~Yt6{P-BE$M_bUTiI72`vRP*ObG#x!hQ8A3sVsB{h=ADch8x%09Kb zIzgMGr7KI72I?_qXXkU*2shy#?REgxI#}JTRFLLKtK|n;HTO8Zp-1uV@+NzN`V2kb zx}inOKcy3*LoAYW#r@nbb|>?c8P05F$8p_+wc;HxYjJEzb|`(AvQWjyYh((wof*d^ z2&JS6@-AmNeUy8ji*`MCZ`W|`oN`ebt}N7?N(p(AGEYrZH>fVPtVRJuNOmr9TRe-s zJABprS3(aH$3{|tYE&Wv1m860R0y;qbrCAok_2uZc~#;KUtM&!1or*i6sB8 zutL}_nE54OO;+F=^OXcau<~2^8A4@ovGiE!r_54YXxp8*^QyCimZF)o1J3Qv+5kV7 zIZaNh`cru;&ygOB1!6I2loE7WTwC-sZ?xyT-pl#SIl}p;@=~<&ow#G1k3S%$@C37l zwv%_s-_$!MgRdgwvOa1k^%wP=%qR9y1o@0OMK-0ob7h2dsg!)fSytcaLX=|QY-Obp z62`yerb?WAP7DaBuv+{ot&}CDhh}oguIH{xfPIt$8hnwrOei|BcH*SSAK^#ATcsKlz;JM*&6gxIzq=$r|=v2Y;+f%?C1>BP%q0vb0^Cb z+a%~4)C|4{e}MnC55@l?Ux4}DMm!^q(_Oi)LSybDm&e!U2k|BN@4`1Bo}0p*=QjwQ zh37&ufe`Mr1}srk=ZWV*+{$OG&`+YapjGYqa-VRl(F(Nd6YCy$`x0L@j|8; zqf}JiIVZWUxN14~19#zHke^U~5_^bkz|^8kFfs$v9jG;=otQ$lr>*QR_CECwQJ+Lf z2Cs*2B94<9aftXpePga4X$?oR76u8l&xVE%q!6_=AfAH~gD?8+_%xpMkH?M1QBB*4w+syE;1` zyL`@*&VQWml-t4rrZv@sd_}y&Yhi1#V^|W_3;l()bew~WU=nI*nPa+cT42^Ji5ASt zTbo)p*fzlJ9hb2wxD7u|e8KPG(Gr^pYK#Y#{v0gl!YpNWgar9znf#GIo)&=D$&nom!pYmh&PAijZELYATG z(XZ&9(inNPM!7gwk~UXur4|7uBD#ipx_cXWdh2%p#twD+ z-DdY|w*>g=F6W<`Tdl7)QCq5Ym4VV3{sw&(e~ax!=R2x7td2qGKD0ZUhIX=3@BsKA zT;F!cnqm52tYmZ>vrLUmB~AU!kmWvf)jkk~(F@ovG|_P!TSPP@UX$Z#o|(?JVe4|e z1x^TYeVE=%4c5y|6(}%f2PH`QsDzc_N>ddBPGCsBC%uyGYD62NMX8ekr)nrp7S4+~ z!Xtnp+r%CsCC-;R%NM1i;$PAN={-PRhvF4K^F7(^OcVMI^PQc;ET+@R$K+xvlb*}W zqHmHt@Gu^QKgQ?aPl&HXdz`^EbOV~^$h7+%9q?1+O!7Bb0%U{}l7VZImv`g>t$)Ok63L+4j_EqBxjw#Nj|b+Sj2k zQQD3n5S$5*MG}xd5CarzUSJFx${1c4orbl>A*OrQcqktk=jeew#x3@3$Y;lMw3S15 ze8khpZd5Lv$2R09aal|SdH^G`Hm)ll%~upmqAqQdpDDGJ$La^5JmRD#;zr3Kzf#Ak zN7cIWKQbns7Zkp|P)!O-HKcOlP~oMNtfa^r+xqei`_&E>{A>Q&?Sy5_L1;%=q)rK8V@gnkJ((N&W6N<%Z5#c8^!|TM>A~s28}{Q z`#$V8PB@l3`l1rj*)|&r+N01X_$+b^^_$*F{Xlb(uUzY$kRS zCx`)l4YPn;M_!;>P*IePTuc6-G-3l7Hv`d_m_d}n=VHUqy(r|E;kb^jMrWgy9et5? zaAPEBZ|#_bttRFWz3^Bp1B<~ZY${%w5Q!#4Z8AvrVM%5>)rCwUUXn2RihM`zAX|`y zYBb;p4+CuU64=c4kAo+#~Weg?L%ywrLOfD{N4T#ZG)ruEqp)Tg-oLV;$pe! z>;|?47tQ}EV&YS&lRR7bto)Gf3!>l=*Gr=TQ;(8fi!#5RJIPGpw*i?w;AMhl%j4e*{)MctRd5r2#Ri?73gH%m&D$xV)fFB}86Ay_a zL>&6gaScsE52Me}7WT4mO{fpt%s$ld1?x^6pd{iWo{D9HxUG(Ok;C@GXnDLm`I!Dr z-yoL}afC_?Ckly+RCDSWxrjJUJO%u-1y11O$g|Wpx*oHiJ0SeUA7!tz*SO2VdnrNu zF7;B<)jQf(=Um|5ws$6|SLNN}JTW466mvzNcwU^vAK=2wDDoX~A7tT@1di9i5*+R9 zvmFt~ANC3MWsY$Uuf3Z6rh`BhK=o`Dz=$3{7~VH_)Wg54%arSkK`J{ckViS zhTYDd;9}Vq>}Ea544+U5{KrtRTLUI(`Z-f!ol@_QlA2yUng6_3ROJ12!E! z=6L96Wbc7YLu$Z1p$gU$mRT0k%0fj*LwhgBYxGadkL|?@9Hrq$PG{l3W<1lKWBA=-MCuEa)FxRG)A`N(AfctWQI1!tDp~RysV={Z z-NY|XXcXX3KCBisPC9`gq? znAt|3r4Cbdss2<0DwZ5Vb|+_(Rfy4eSF8Y?ftA5Ca18UIyDX6P}bK-usV`v-I(ZpU{JEXfly@PF{q_)KC5$xt?`J}F|dy$~Vb>&P9) zZ%oGfQ03@5v_@7WQ^^<9Dz?3_PwFpER@x|MR8(uLnUn$Y2stQS0Sae_f{Ts#-U21G z;O;Ujs7w+g|EA87TZxW@6`zE$_Ga)zcs4u@+5wleFG1aoJN5ul0h#QG0^_>P-WP6a zYis$#{J@$A<-n7WX^vzpgy*A85FBa?ZL!xvzk)m5;8<+$3h#!Fz)$R}Fo>81m|9C( zpkFZ;*h_qCVVPJ>goTO1Kp`Sj7Mh4X#ZlrdDI|^*MsokK)tDvBZMFsbk(=srCW?&0`2V0D0*mI#hwrtxDxC8Rm zk?yz)nA%@h4nCPYMIIw-kZHtg;saTqc!k$P3E0UCnnGx=`U1EqJT&t zEp$n4o!DGnq3!@aYY=e8oyrz@jC5FPBn}d0i=;S$AI%=*`f*3u+0-WdEdGM50bGb6 zu@LNI=y2p1v;}$yuZ6xt2arpS=Z}2kq|>KYSUvkK))PqBq4;8|YN}3DcE%zzkt|_B*$c zza)GSRtW-Fztgyu{3M|wzfWNJCtL+)INh86%9^+pf=}4TpW|wAJ$Rl!A?y%N3p5|# zDzk-Pj*37Ina*DW?5@0ka#y)T2BYdwL#RDeM`{vvnSMiGp@QUbDw&!^U84hZUwSMx zi#Q5&&kd>r4 zt_xV=c)%4vIbJx(r?S(z{oHD%ELj29NDsp^Ch`E$72kn%cJOeaZ56;4Biss_hDeT) z=os`5M}7NT#{;|*aTafk-f@s{7pM?UK?d35?M;Dt|AkzF{NvHNdPaZex(MTdJJd?hz??K? zgFq8irQ_)VbUMA1VVH4DS-?VO11?{eoxz@G2e1{`j;xh=#?E8*Q{9QHL@a@m3#kv} zbwb9o&^>5zv@v=OYl^KxAAmK~1U*T}jVT ztAzA-v_dzd@6mX>0()$?ZC=YiHV7VT&v&p6#(n}hgnYMObQDJq;X5gWK25)-2UG8; zt5k8aIKCCTK{%-r^k>$?HU_LXojyRWB0iGuDIYa~-pdp)ub5^`fStlK!W(Iz9G1F? zal#RPCl}8UR4lQKSWDI=t5MsyD1I4toomfAyviM922qX4SyTxMxHe2{_AQso4Fs7x zPDmGK2#JCT%=T{J+;rnneh~M98_2$5?$HOSALK>i5|K?*BKi|Ah}QTSd>P0RLopcZ zLm=c)z^hi%F#y+CawB<(oK5t`CO9<5JXAyrv4-efyd^n-I!sK!V~EnEO1EKixDjF- z`G@kC{9Wm#)=}bBNpUK9N|D%7$QFNzJB6OyGkO)-7OeLs*k+*rV;#Fu&QWB~fa}^m zTlZNd>s;$u>wBx$^1(LTy3XpeHHB6o$xt=RLTj}3y=@enYR4R((H)L!fbkEr&4()5 z7F*BTu0w|q%ARSjf&}4t$O!uztSzBX>lowkS0=63n^DvD%b=!KZd_4){-@a zmEBSff0td)vdndQC{5F~=)24|CP0(aKDvnBO^ehaY6>M&L8>|Vh|I!^aGlsiwILtl zeoV&pW7qJ1h-QQe`0Z~hgZvvPnKJZW)G=x+{e`_F<*7~83u=~{ptP3Ds#U@MHm#U^ zS3Dwh2Rb~5y-M!IH{%q#44vsXZC?QJeF=QjcGX7O`q`%0XlpAgY+Y+PXPIn%Vti-( zWZq{RX^SzpGkr3hHLbVUY(3!4$Z}*Nw8;9|HXZtE`(eIl63jPk+u_eh6}T=m4!Q_e zvhT#ZQ91Mr`U`{5%P1$_+~I`J0@kn;DG#vgl%tE|l4C7e7F&-UN7p-Gdp-MdoB?+{ zo;pJ(P_3!1^c;2`SC2iyQtVf50@slF$z)Qk0IRQsHN{tuRjDxDm#xpu=1_V$bp`NF zo}|dl)IxB+;dC)-KYfIKAyk*Dil4<<5-GKjN=r-Rk#bq7CCDQVAx8{KsxX#IXIHSZ z*egI^q_DXF7c;n$z<;U7<4i2ooqSE6z&~M634vpYk7@!RssG^cAjT3a%MO7xRlLs-Q zqr1Ht7|9_}C2MChYp!f@Tl!nBSuK|Nzytej`e|HltY#8Twasr$C5?wnLyS#K6)drq zsn#;K^42Amd$x4jYn#u~+BD77)LI)#gG|s|=!Na0tsCM)$Kv2BnQZ0*y@`y$ssc{b z1!(0D0O4HFOZY6Z0GW=I0)E9{dknl4x&wVe5*&@t19%C51N-nhfc^ENNr2y5nU0K$ z5ty;mYrqD#lOjp!+b#e^s64jRSkTdWFK(98U`g6RnKzu5` z2Wq3O+*KMa<_Uj^JEcBSb*Yl{x7=J_ERN=Lxl&w1fJ^5Aip}MX!d$7j;**{Tv8<17 zMa?E^6FTt}`1=2{JoN{$hS*JP0G#m#U7EZPSm{+ZR}8S<=pgxlY)9uZ_qh3zOMUE& z0X52J&MsO{HQPyPX6>wtbavIQDLuuG+zuvznn0!ECG2;R0d^zY4RFevrnjc0=4?x6 zt8VRU)yzE%D~#ohe;DV1_YC7S!#+dUFv?KRpc+q_`FfbwA@bOxFPw}H#U z7O0PHA0*lyf~Hz|t2H1l5E}BZ?8f!I*a; zE0J5s2-$)n$!f$r-~=28IV~Mqj%GOWu*TFYZXfXJ{{pU2GvK-}5t|6P{7-SNxL2$t zZI>@AztzvmN@)$y+#3~2o+)ku3{jQdD65p75+oeut1u#PFBP&LS&NzpG(F#tRm)e)6sSD>m(5__1=R6ec�F zv_W~a6m}U~?{LB2p+~lJ5DE>1oVJfpKd3W^oh(}i$P2xIUP5uUAGX6F>->NQL;Y;y zY;iUi*6mwCMmR_Qfse$}a12+mijLQgmsm31AKyUEqeg+s#B=f(5g?9|gUEbx1-XN$ zj4#HL9Y4`TbU(gYzlwZW{)Q06uj5AwYXL)_=G^Aq?Od)hY9(i! z3w0J#cT2ma1o@#dOTHITCP5_-6SkKz_LJgru@N|1IWTm~7eIk4w zmLb7fXq^C!0CQc+y3_L1(%RC*It1E}L?I}25E@{6XN$Gou&lB~nHQQnn19=Hky&UJ z{5#nn?~QTTTa0o1fh5|?IsQg>2#FY+e26QEWf>=(Kct$<#{ zRuRR?hx7`z3GgYZvG@4yJi;B|y0ItO&7fMO%Hy?t?tJ}}YXZoP2VHmcL+*RdrOGtv zlPt=G(oHdz`x9i;H*^+tipVG4Foo<#whq;RxJ&D78xCf+0(W{g{(x9bKLKNzgO$O0 zkbrBj9ryv#33a*Z0rB-#KC29pdx;@ohZ3u;bd7V(&^$_OX$;?-9*pz$%?JuFgf2r< z;Fr)wTU%R6+XbjTbPf4!|ACZ-UGPcdHhdmZZMoL!rcQ=c2_F*5#s8DwN{AQ}OoKoJ zL7ugYWu2v@xsfH>ddW5q%-K`ZEi)(@fn)P*lI<8&3Hkxz>b})s>1Nqz!7OtvFU?;- z7XM+5x0$R1tX>-fO@kbe4(G!qpz}7>+`;5G8I0#m@2nqz#u$rs!oL&6fCKOX<3P0D zv8%{eq(52*??gpYUCGrrhpnWHbOBIQ1i2A7nqJ_qwFgzi9%yT<4}O(gMb#w_({*@^ zU(AhQRx%}lYR>0iVXLyrbzlEi9|5YXO+A#iy#Cy|LHS2{p%y4rB@?%Vz5u+O|CD$X z`H-qh-)98!DP9^Q$v(_wmZtYnO^Bn|9*hT(h!d63evT4Y9da^TNmwM`)L5mHJX|TO zj8#U7S;9vNmcM8xU8%0suDQ;uDk~;4NAaWfIJg}`A?=ZPxEeeL{)qHKHo~=`wa8OP zHTzO~CThUCqigJSp?FJ2W7~uuh99PCrlE$F@jnvo8X6mi8~YlsnyQ(2hf z+L~JrSgx9r45ozBCd{(Kdcs=Ka^GSy9W~D~7n&FoYwBlGO#RGhmM1p5ZI~6ebh2)- zrP}I4ZQ)8t4t&d&YBn2YC(MXHWDHp@0^YmTeh4_%NATN(8S7`?3jc(5!S&#E_6;bB z_I2DxRYwWOa;z?h2Os&C?1ro86LhrwuAKyKeOvo`G#ML9)FoR|yV&CF8YZ7QM^|LZ zf@;|Zp_8;t{pvj7{9D`Pg1o3d$NS6OT8mbDY8J&LR_0y<#f8(SxeDwOrXCy5^rUJ5 zZ2OA$1J3>miX$O%2{9F2JrbDNw|6(=rDt19(XZdKBFldFXie;MV zaDp0FB0k#i*0kMt#9%k{OE_rY6CTG8iC=DvGiR9lSO!@3S}c})%YJK-4TGA(`@#8Y z!|$P11!3EhUTB)3rG>4!`istR$Ecum!0;=%f_ zFaA&lYj3paD&{N!YTzdCF;A>(kaM1MvRYR{_~)F+GA--ORV{VkMxY|~$v(uf8)NYu_-@B6 zxG7X%i?S>=S2NoTHxiQK#rPWWALF+egXWXAE66o84*iTekx>w0-f!$5zdq(j?11=J z3AN%6#odn!#Kp(0iR&GYC8QgxnK84?w8Zq=THkujmT4<)n*i6ck3>(PS@t{|X=LLv zqZdYfjG7TWF>XRa6T=DfM@T}9_H_F&qz^<}F>^^{E0fU@Yik9)f+kr%S}s_|Sa;Y4 z!KL6D@IbgZ^bqO~jR%#@tCru^X0XHI!-|MGWPP#$aRIM^{fU0WP~1XwW;=n7mEBrM z`%^vV>Z&vD^?HH(jw{zy$~jzF4=U{aM1e2j=L=Tu8~cDwVr8}qvyglU{ALMn0lexr zSa&RJe+HLx80ewwergLo4EN#h=vLfXsf6qlN{c=@MJwlQDK`=Osx|al-XFfF0Xa~? zTg_EgPUT;45_ONj(am-@a?&1$41m+E|AGuT0C4xuXg->Yj>7&WCK3~IpQA3a&u)N^ zTbBVo6f)K~95*~LTsGD=#+ee$!);$3+i{YpPO#`IBw*=b$cURBb2RQs!lAeyai!zN z#@>#360i=0%|2wj3+_Ih+A3U z_ISM>M0dEWfL@VF+EDq2)Jf_u?%;!bN8u0QPp&U(XWBEP*i!T!vIg-UyNH%^90HZn zBSbkzO~-tCDm$1SPhO^qQ;GC^?uIm0&5$JFG{Ah+`AM6ogq)>3TRa!MHv%<6C4*kQ zyS!Sku-obC#AIx!V;UNRJwlh+cfxz12-FX5XkUYU#8+eA@IQzO_;0KM@OY*peULeT zr=PaoG&@W^%)J4&%r|tcGwO)=~=XITv9&c*|#B(urf-OL#88jl%fCU_DO;#S2Li@6g!HNJYnK7(W&Zr*2p zXg+GO0c}#-xGR2R{88gs(>=>fXd%)Oxd9mPSld*%5E)`m09jL}X0vle52*j$bryMs z=s{idnB9|I1=?<tdQw1Gfty#P_OW* z_!&By{zZ?Zx3dVVvT6JlsVd03C8fdg5#_maqI;rin?A@_$9vz`E;u>S9?tN-aT=uq z{6yA6{S7L0<;j86R-j;P_&?}5#|Otk$4&e!F(0prdhG8V8K}wr8brrkcpel4>h`xa z$KtSVw8ofu^L|S&+iPSzx)RR<6{1o^NvsW$ZYyS9VLEPZVM;al)bbPG8ev#S<0JeN-p?J71ZBP2Lvw*{p?h+!^2-zNL%~xTIlgXz&|ZwukdTxk?b&bC6~)u$US6v;sRmAwgTtBjy=hK*)ay~?O0_$;K)YqAye(u07Ejt zZ4nL1v3a35cne?|xA3W;%9=rzB``;G_&C%DVj&%*td>iQL&aUfD83``h-5Hgr^LJ5A?7KY&!jV5m;o%r-sgIW;IR)m z3ph<*v~liX`b+nA=U%P7I@I;fU)j%kH~Pi}j)m}0E&p@(MXkErQXB!ixbET@)ul+n z8E!SVlE2DlG5slwn2zrPodFhmX?q`ZCRQ150D5t5VK=d<=yz-rmSaBzUqgJzRrmx_ z9Xa4=hBYVlQlrV6RDcKoM{l`(7h;1-nR(+EbF8JYWstdrHQTn_cG&XMG7Pw?7tHl6 ziuIVaho!tV4T?tNhjo@ zvaK?-7%quekT!6%&1Ph5xTlzlFm zhUbz63{D#;D``Ph|@SEj1qk;iTzQtl;GGX_kQv7>2=@tWbPp^3Qzlxaup{gKh= zc9N$c{9nRMyugp*8qtXQ!Znprl>Pxc-J&qic;oSwJ73chkWuF7&3 z`KQ`Xy{~ML2TMahA5oEfLdlg{NfLM-pq%94YjA7%wR}gZfihnCTYIHv`6OSAZ$OX@ zMFl#0_qw{cEP9mJ?CT9izm0dLp6Kka#!Gv|YC>9S}$P;uBpz2aMQy{Sc{ zliURAlRMZ<{+&Ed{pqak9UT4?x(c4f9OZ51`R;k@nE;-NEAFYP`?L)}OVRQiRZ-r9 z=ZrJ7c<{u)3-upmz7nNXR3}Og08dQ;?nWd2v@}i~>59_J_=foNy*vHeL+yfzzTxga zwO?8d*KqG{|KI*hPjlA-ZI0Seek%PVb(2EU65%iAE_sG%jyK0nVl27<>kWFo#-eW= z=g|PZi+F+Ub(}z>(I22gvjf1Pl8$6YMaLFUEnSZ+u-|tScdT^mz`9Zl!-5{9mSlhQ z1#$z`HBP z#_{EZFLDiSpsTZ|Rj5>WMZgMrRtI{MyrSo(r>%a{RTFfj#Y_D_^?Z}~R5&h7lB;U- zUAOco*Klna=q!m*n~SITnxGS79oLmRA{o?OE~{SNTg?agV*N?MM!{BrG~aQ3f%CVk zx2MS8A|QM2xk73mHAbxjdiC!s-PCM(H@qB#VaOuU|sck?YegT&X4^KFLt)?InQ~X&-;xiKw#jxwwoX&wy!}V>^1BSY$Md# z76YBMBZ6w~H7d=18|pX2dgv3#wDrisPhh{dwlrHGfM~#q$AAiRt<6hFzHK{5oHg67 zu!Y-RhM%;T+MS2*hQ5XDg|t}Tw7k3^VLlz~Cyk)Kue3OBA)Whto|Oe=!9i0!7lI0{uzPI#*7}IeAXEnJvt`)!!=hkcAY{uCtE-TokZX`!s0Pf^ zXCXeKG^h!X*tNjX2nbw1x(!U%9umpq8j6|rf%%!Wo?9sJ=K8Zr86N==w1jb%aRIPW z7)lu_nz)DXi(rAjfIWmw#9t<(X^)sAObpFH8>hEZkOX(^J}d_Vre0Vwp_W$2a09FZ zpLvb-6V&^$+yI`MhvHC}1q=$alkQHAyKzdOUQ7719laLfO>=4 zj8xl=!tTL?5ze5q>j;-YYry^80{#v*2rY(tA@(62*j<5nKw@nD5L)C*FpDjMKDSv7 zF~S^?TXA-{Q9K=LdaBqFfZpKTniFWN*v{A}La z)Il!7kJw*DOv4{R|F!i4H;gu$dN6r7ykPx8+WZ$5A1n&zh0dFrzsFK#z1(&IsM$g7 z2k46{6h3o5JBpD*7UE|jQ{X``2l!>=9Mox)4s{FVY`*|H+wz^|cgP{=I4lM}Y?p5j z=I2;F&KgI=jo@#9Y#Iso0J9C7MbgmiSt~fcoQ2@5t>jvBra)r51<=z&v>@6}%1>ZY z2q%q`;>a+f9bSYvgVA7*6S(AI@C>vw?CHJqT1qXclkf#k!Q4gf!p_9^lZ7-n&6^rY z?`QS`h7`#v;hK4`c#-UDEGR3MOW_;&BDMwX2Vf}hq$$cA8j5lW^eVDRW^xrtjDLfz zMh77?5qA)K>@Og*z{Dfo&fSh{Ux7S|MB1m>#~~&VU+pGgm*FAyljxVAKMsfgu)PFX zYCDZw1M<^81aHh=c52vtSQO-f%>>Aj71;=FQ(;ap8RU(1oQ=X}!0IOGll}=N#Z23N z=rPzYyK=iEST76*4Y5T-opToBsvL!kHW|>m3Tjp;cNk%nh)hX zAXJ~yr|J8cc^o!x8#j`@i49|a14R9M?rs*5&Y;bq*3l#k6eELroic;cO8H3HMII!k zz`f_P&83ArBagx-j1MeRptp?mzI!?hseJZ^=yjJ652-U4PWLy&REc5rKZ zZnqhMMyL^o5kz8kYa^_nOi>?EzL7i$5^Nn}-1al%Gi)}JgDuBHK=vV$;6!{t zwFe}{Hi`#*kVRrGrQe`xDf{VZxdHt< z`T_n3X&qrNx(+dj*nu*kl=cuiFG!}fE3^`J0=fZe4W?f*n}2P_AO>hVYz64ebL{^H z_x5ub0VV^v4W15dhkk?CBi!IGVI12KTOI5JA`0nfw*k-@yWroD?r0Wvf^e0^7Y#@r zO5O?{u>WHC(qGfx)12s9<{My;U{m4<^Kq9kmPj-*3R#RfPLdJFh(Cxj{2k)&l+!d7 z?J#W<{T~j77XwbkAGEzx6QhHN5%Tyh>@Yw>kFpKyYNjjQiW*EyrMZ*4z&xxH%TaB!d`|(;?@vmVpn6_a7#d+6HcfCNhD|d1&{__h5tG~OmBh94tP_`5OaBcWrVl>&0%qGvm!7!h&Kad58F8d_Z6eb8A zfLj2FyEAwmddhyg{UquVIumsWzRq?gJjL!Ns9=+Ak&t-s9gl^N!I!}s0kM#Xvcz5? zco59^aI`Dv-=#xO*v+tChD<`%fJ{z;{V@~^c?Ud8{;(FiVfz=D?I6u#WW|YAO7T*v zaF8$KHu0tbm08LDz(sJAxlN3(q+bLDK}eh?6yfgU`pIbO9LhqHE#8^_vRD_` z3)vSrJWeVni}Q>9iusTc!Dwf;GOsZ20V9Hmv6p!RI1#kmcK%;{fP!-(Sw9&@3Y~a^ z{0HSBIhiy;!jt+b6EqP$jn+cRC$1yblbfk?X=f;x@IeG$LNBfqQ-+aXM=^FNBBp`x z4{-+ZI58d@iXtJ`W0v4#XeLsQnvbqS|AtDigF`8Bh23uCHPE-J05$DFdlue}a*NVH zU?Z<09>8D0KHE=V;dm=t7A{U?{(V57$R-g}I&fxHvv-n{w9yds{;6wm=c~tmI^snRtu=k`1 zj`42^CS?f@1YRMN!|3Dh<$@7EZ3}BH^DLu~GsQFTjIyk0@6V50!XOJ`oBJ*2;4VL1}^Ay5H#0Mb~* zj$qCMcfK&nQ_>ZBA9DvafRawv(Ld8=6a#4NvKkhkd2(=mXX?Kzr63fV;qzZgH z$Vv6kztUy`+R#M6Q13Bf*k%DuHYKqWp(GB90@+LnR1R~DcHYlF!E6+~5iaK$g~=jU zwveV3JydYyYHko62i#$1mMiy|s6yz?dCwl?>Nvr4D%B3;LR5@&b_T11wu8Kac$Zj0 z$Roy(N=e^9V(=;XGJb(Q4mJ#PgW+uFfK&*|2CxryIrh1T#mH;e+4w0Uo!CH)V4mk( z;HB^;c{8}loIBhG-hMuY`;|S)JkQ8rG_f){+j$ILH+P7$fos7F=T(5yce5Z>I3d0! z^%ZXxyyK;ErJN<4N#N$e@g{g$_66pj%rDGo`UrhLbseRd=?+XEQw%NZKBt`Zg?5gj zAYUf#AS6;UsS#8bV>6(_!b!)mOk6cdL4nXx=m)6fG#0rKFr5V4T5J>gGS-E7h2ljC zBwZ&T106&GWj63-SO8nb1IiETPl}w*rp>2w1!24%Ru_lPN@o<)k23;(A5h9azb<&D2%oSCke8f_)Ki$rhA3gk(ZGaX+ZJo5?cDL8>ju0ppBl13Xa(%)%xI zBqv)Sb+AgrFi24C!X6|95jDghN+aVMr-IKFv~qXzjL*OY zwUhf;utT^Pu-jt6IRQ`bQ`97WA%)8h$Un)|l2}o_I8@XlDil2s3ncT!zl21dnEjaT z#A;_58TT27xLf!UJQpsOH=BQpcaL?F_7kMG)&j!OM4wGN2X?22oKPm3+)lJ0j*;_d zROT(v&&#A9qO1aj1s!n}VIS!?>N$EDeS$uZ_7||3jI(Vyt7x+Th5nXNM%hgp5IzzR zg$E?r;=ja|q7ULwK9*U+juu~(b;~u9nTmxTt3BVUFZt$ae>#szAG!VJli}E{yd1Dc z;lc`2RIB6)v?M@iAsms46lK!eA{X%)DUYw>FA^RRo#Y<`evil0qvY8X72_5M&o#3O zDP-bF;sh{j}`T0$ci}A zudpk4DS{WG)nc0HglLg)Qs^tZ2MG8O&MQs`@C?l4&k}qWCrWA3brQ2=hEyTdOW(0WFO==WozWi6;=vAhgb5=QiGVs-wYf#vpAFN*WACv+0p{>NfBAJN$d;$ zs*$~fIg7rBeibmzC18)a0*q8uoOkSP%obWMWq>lx5OIIwt^s#!I(0YY39#1W)9Zm< zYbVQs^%V3re(;7xC8BUHk*60d;ohOkKJT5EN0XLpOk)$kjTn2nTb7X1q zWZB=q0pH>1~IZvK7+pvPTZiQVZcpK8LdqxOSd#{dgAKOThSaO^^oM zQUd}w_a@7Qet{mwtmFR9{l>b={Qq8mgEPpx!O!A3@*sjN@sM<%151IEp8|%$DA_Wx zC;Nl|CEF_f>K^DZ=G^7p>}qzdSKd{mNSY--WErwaRg3!v_f0-aLI&fYhIzhX2{f=J z)!siW85cR~K@5K4v`*@)QmQ81`aP%IJymC2eUvMm|8m6224omVvhtcf>(3S$DLrL~+qBSPZU* zU`6g@Sg?+Ai-b;6H;0vuNQXxP7amAlK3+m!oSH%pfp&cljvS+#?&gHW0-vvQa#yCVBf!E)Z@@Lcpv zfZ%QC9tAea$D$VDUGXK!4^gMsOM(~na&IzEGamD-g(M+L=pdXg-Xm+1j!UwoJ&rvt z2i>MzFsi4@R@Jc6v}C_Sv9r?gr`pLQUJdoysfM}#r#vrraI|x*Rr;vW+Kc}0beYj> zVsiarHKUnDq1Bm;u#chLniH}<^$M>*|M%J)%}nw-gqEs}0Um+Y({oIAyH;)k)T7#hk0!e>B0X5;LzPtmog4&)AG9cmTkUjmf) zoU(>l%snb(OH&jUz&GdN_*Jn?{)c=na1z?dHcB7M!sT>%s{D6{^@^QNN~OkSvD*fZ zT93mX|9ND1+IYNoU*+NG@sDSQXQv0xWruRB(~xt%v%lkVhg|s;`R@u3=WVV{svC+p zIZj3frpHwxD{+Bzg>09@26?e`So&QyDmfuI%Qf+ih<`aaI$m>fa=h*|>WOr~Knal0O7toNd8zWKfJC+NHV4ru=N+#mG8H^%3n`-q#+<4={h65*ru zJmZLw4m&`lY%x+UcaC!0C0z*i#WvtEYT}zY{cI&Y1kB8ykcWxC@Z;DNbUNwdpQRjbYpzSND%VNlutyQ=e8wH_>8Boc zU8}sOa#IaDo8;coe-t%N>z#f%J#ykGRyrI|pd8-F9!dU{U3Z>#@ATBFUwOdXz;mhI z;N`1j`I-Ha{UF*Zf06GQuTx&%{ak!4HNBeeenSCd?M0tc>L2c%ZeFfeT|cPr1l2`v zH@O?Tqiy2HvJYmv#s|elgl|lM2YZIoLR0lj!*tMW?*eaasJm`en6b;50J zU~H%dV505w-Adv-hz&nFxjl{X6wMQH5Vf zd`xX&T;wGIS1D35;!x)7?tH;H0r=#&%9r5zeD2oly2E9oDnq#+*aE#={9W~~x7=zx zOd7M+0=zGt_KTm)PwE@$!|*Bc4e)vGqtaaQa`e=wKY3WXepXF8e^9P<`>dJiUFA*C zP(3kfw&!nZglmv8S5@Wa=RVI(;wn&GP$noxRsXr1aEWq(x&P3-^}X*e^)Jv?`N8~c z{7(da40;km2%fFW&>aap6L2eFdGJh~bKsW%ufUj~{(vgKH{Ld$TRpSYXVr-sZr~Ne zcawYaNap73SNY9J=s2LMP5LtrpETDH7w#YZr!gh$MxZgsBj%OyfpM??QCOBv>XqyL zSw9w0>6h&@<#|&XN! z?hV)W1Uv}%9_SjdCBPK$J^<(U)NiYQgx?G8Cf{M737-fbM@^%rnFw;f$kWct*6XOo-b<>!pjLavXfWRWz7XHfem4R<19U;r!K;IP zLJsSV;dc5U{cjP(@cZE}^hZJsA-jX8!zA2TOJGAVa`b-*U}C%?}@E?^D`f z-Bg4sW^wwPinCK9Gm*Q$uAt&&;>)B@ zrO0}Hm1~Bd@sKGd=YHmtDJI#X;A!@v^e?GrlRw0`Merj?QLRxl!}f?;{~dnqz5?%` zTA-u^-&s3Nu9v%)pZiYLe$`Uot=y(s=4S2kPSGqqB^Nu*P(qzro!+Q&T@yTH9+%yB zs{_3bdau{64!9ab^uMjeY5xe=r9y!Tx~;+Cx+Ous2M&SPd+>eSpeqc`)!T&UN5Ud^M5Y>| zq6?zW$C!)`QB~1%qdTL;vAJ;xv51&=v9!2-@r|+Mn3u6HW1FL6BP+tT=w1dc4!9IJ zKk$0c`{41gpzv2wf$R^UJ@b-Avk6_`2%8c}t2%Cab)z=ybto z?%}MZi9cd;V{_tHChbn#9Gw!H6MQwOJWv_3F4*4}rCS?x$8V=^qPMG;)KlbTt=Z*$ z$Mdm@<#bWy>_&87p(*;2NP}TZ%>DQirs0J7iF*^f6CC4fn33O9g!qbGyre>2iVNufeq?Dxi z#K`!^F|Q)Oh1CU*1#i<;>Q;y7^qrCU24?iZ1WmSE*+lJ|@}8R5`gg?xIk!p#4Jmcj zm2M^1^IL15R0UL&RK*oWWUNd%nhMD{nl>0;8N-QAi+U1aiW-i%5qvY;H7rs0K_?6x z@V^i+rCX?zX>WPr)dck=&2FD!&kJg6uZ=!~T9_ZiH^jeDXY}72zzs>$&kNfT_EG;h z{BGo-D8AvD@r?lz#V{bEzC|95JQ-OR!47u`YYq7o>Y?w9&_)bKwnv_c*b~tc)o3_n zxM_G~+#iiGLXGMeN&G)a;VFS>ri|wF?rlf$Rl*G(La%w`xvh*FP z_maxvu||uCn7V zoK~@~;q>A&^=s+_&Gp6E1s3_2ay?RCroKpWiyt;&OvABvBX=4~qn?MSg;s>x>+>TX zh9h;m5M#xF%M@bfPdpY}%Q~ zNr_6QWd`Rg%=5@Olkp+#Me2n#MVe&5`QMWp9c< zsv#aJt&WfUPwV^kZuB1`mPA#*|xhJOiv5;mYa5u6viDPXnV zs(^~%rjSCNP0)Dgx9~NQ>my$nKbRcjd8Ty z-prR-McJQot+V^Hn$n*nKT1T#uaDguvn^H<`ys9;mLB^gfuA}fb6sA9Sypqe(Xxr( zP+M=)Y0>qnJ!h$V%inF*9WC93y_-6CO(TtVwa7}>ireMoMXLPu1%m9I8QNq-qLT@2 zVw=3;MbY0QC&DWub{Jk6PZ{RvABJM}^Ml{}ZSa4scQ*D$)`oqH>@=K=d>)lxj7^ZH z<)vIswNH7OTAP7Ook*r9Y>J;7cRubyoMkL8dYwTS`8w)T^sJbMnD?>AP4dK5$=#{@ z(l2J7$aVu&mOOhT=U{GcepR8a=y}PulKDl}h2sUYau4LcED{!8DWvCNGGC;LllLT1 zP5a`$$9E>mlH*cC(-~>6(-;{Oxp#{HsFc?&Y+Bhev)N{8VXyr_dH;-#H|@8(xAr*< z`7Phui|)GLKD5NKes06%#m}lr%5RsV3azs$Q!TQWrVS)-NW5q&jcqrcj6M-JBW7LH zqwv`gZ2cntT|r64`zB*7Dkdt9U>q>sOK?bgpKHj@%+O`d$of6YoHmt;Pr)Q96KfKS z6NvHAv4t^*VkhFt<8u=Nlc}jw>H9Lj0y*W#m8IrL+ z9h>qw>3QOgglh?niOUi$Cmc>@rz^5ua-Qc7=hfvuF1S|su$Wi0q1eKVEd5k&Q~tbS zW7%EvEAv^ib&)(bD+7|8p76^QZvqm*6l2EwoDKO|#U*9GY921B>L}{w_jvb*5A#;S zhw&?@qs8OwvEN5VR+t8>mp3lE*f!KuSl?fDtKwAoCG*yT)p_(x-;`B}NeP&Qp!n+8 zx2BHxO)=E?JIUhIg4B-WeW}gq?Ci${*utMhq`Zp4=Hk@_zY4At^ydAYeKo@=<*yW4 z%8iukDL+%A((*F0vO990=35n@3iFC4z?eL`q_nuYMt&h>#kfjXMj6&d*${~;mFNZd&XD&9y9K~ zI(>vZ_;Y}<>|59EHbrw)lW4K3y1M*G;f-ur+QpQn)Dy{L2`5rUQcotkrhNzN{6|(u zE+-$FdnoU7K}FGE@jJ6q#m_2I`K@wB>Hb1~&ce*Hj3*fnGIBDlvU+pM^Q8Ik{3C_l z#kk^=#c$0_v%Z8>;%xq2R#f)AY}_1LxFjzyXFAs*_iS!a_PNX#S+Jb0g4xAmWdT*s z>$kSHc3JmM4D=1#ti+G}7=5<-@ml-e1J{g>eq0$pd>E*{s{4YwYnSHNudTmYwX|fU z&?c`a$17tj(>-q>dv>N{t~ocTAhC2|X+hDtf}WxT^Y!wnMd6KBi+)zUuUt_4AipqQ zm3t&RBF876S%@pjDSA~TEy^lRC_Y{C(A;9KFjtjEmRXrci(?Dk=FQ61X7A76Q(SD0 zFD)v|sDM?o7KJq|XpwdF^)Be&KQw-pTvehMS zC8@=Qss?UR1QQWJXDKNul{oS#_DLw63JTD7>IQKP7KG_s@Jm(UAE{ z`J<{Yi>@?;GeoJIDVUH;)Nc`1Xx=@9ntPTGkx9 zgjavJZf5ON)q~QaqQ%9#&4ThvHJF;F8d&AW%Gj!@MgKHcv{o+pV^L3qdzpXP{qn#v zyxF02Rr${H#bx#--%DK0k)>f}mSvC1K9zZyD~iJl{R`ZRmXtg)SC(d$%`CU6cCGu; zWY_wrQ`B>}-){N(;gAv5s^e>f<5$+^ueDlpV)fjWkmaX)e|2o_P`9NoWj5We-&OOy z;$uZ!ML<=_w8==BliU;qou#ljX5xwWTM_f0f)e%S%hjE>?`x80v*frdn#-;yaJ`=Jwwk zn!7S=^xJCd)s3r#qjOed4wnwg2St59m)Uo5+R3eTP1FYe2HPbaEzjHIItp4Zw3<5q z?EKz(rfFN#tmf5CllANBW-acoy;yCoJWzh9G{#(7I=9@S3R*LNk+4DA+}1YPEm(GF z;M368m8VAEuhNfh91*Qx4Qq!Y2X^;8>Rr&4*zUiS(|T`db9;AJZ`Y;{`%ZGt+^(Fq z+Lni{UQ2hh%xUPUPpg+Kj;uXblUVt#;!?HG;-ZGKCS2>rj%__#`hy3J!|5wEqxPfp zl~XJ9!{VW`k@Z1bvkw)>pIod-&N9++*{r4)WL4A=^(TzTjn?2STb1u zx=vrGu7@_dHCwmFx1H`B>PhR%UA}Z^^9snyxRtk8{2C4#99llJKY7{d-khG$?uu@F zw`=#}?tgl!dRFz!?Ur=mJAB&;mNvG!HPtlSY#=wPoAfRB+b(zB>sj6BIdEn0!tlJ| zlfyrTqX*wCXZP(~7S-#}lhpmNyRzFB{9g^7*E&wN|7Z_x%WSi6``&S-+p^cUuW_Jz z`QL-grB_HZe{oO9^am?y@!@H_qq4&>^smG;Q)UA E2g9(@%>V!Z literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1_mlgrib2_ieee32/gg_sfc.tmpl b/ifs_samples/grib1_mlgrib2_ieee32/gg_sfc.tmpl new file mode 100755 index 0000000000000000000000000000000000000000..4f8371064cbadc574de319a6c9e6418c55e59124 GIT binary patch literal 26860 zcmbrkg;yJ0)Hh1q^{KnNySux$&{EvB#T}9mf_pp=h}*bDplE?oye`z;-P?QK_q+G| z2X1E(%B-%L({uLz*=FaF-COLuUw5&yTbAgW_%Bfd{?@DesQz}~`~UnI{(rvx-_I^x zx_0lfXwjm@|9j`Y-Q@27{@FQqvH$%)KPTD$?h*b5+*tH~{{1k!(RS19X4%cRTVl5k zT)XV{+8wfUuyeL^xAV7){NF3lF2ybfT=M^W5qAIIRblu4@B06qL;T-o%m4RXDRznf z@7w*sN}R!p4uO^J`rkD!0jr$_Rz2Eon4Q<<-idv-w59eP?0(q&na2qCTKB=O-(221 z|8d^!+~0Ym^H%3@=Z`LPoNqd7T^wEaxJ7vp-cNl5zV^Pf?`*G5cdl!o^H-<0P9L2o zI?s0g&v~?SH|J~@vCBV~QO-|X|8pPYIm7FVPqyEG-rs%d{nGri0xbSr{O))Kxx;SD zT}3W^osBMsU3kuQ&YPTfIv;g*b>8B1-F1oE2G{9MKb^ZfJ#(4h^3bKteT!$CSE$bf zuM-|4J*W8F1wIV)3{3Z5;%D<+=JCzF-eb9Yl3SU_I*&{4>s<#p4{+*zHqvQ<)7Z27 z9ltm|aDMM}%F*W7$8qtQ?4vcOpE^OVGIy=l65kU(X}FU|vbFRlr53}cF*Xu4%T>_kZ99zyjJR?2x!O`>V7iZWxZ~v7u1!o?d z$v7Ezy6w=Gvv|Ej$bk^;x|5@VfV<(BrY?oLUd&lukxo2kjef8*m zBJDuR_N2X;r!e;%pIUFpxrd?Q;bYIIo_ilU^Zf7d<>7R=TTFIzXt+KwDPUs2lE7g; zM$Zg)iMyBQLoeJb(zC_A&|`|H(fya3$dz{8?z+VFn;YbI%RS5ele@oLo7*-wlj|#& z365QlZ#Wg_d%#EM)p7jBq5Qpvcerf(yMM0Re%~T@lW%@F5<|wlixtK6h`t`PFJ^VL zd(83xB4lF3*z+|JYeQ(?RIhlKXm<}cm1~5X;p_+JT940O&fZ%+4!KYEPy;Oeb0$bbVzueh(%{beGZR^tc;o-^)vQvLTLP`1Vw14k3P`R`$glTVONEO)cpI@d`)JG>YAm1@p4HmF+Us{B)1!~iB=2>BU4zVLM%mvxImp4)haVoq60x6hpQPN%7@sN3 z>X&sn_b1OSEjr~l_gnH+Rz!SR96x?(bY1-VgfR(q>;c?3-hkwJ9J{1Xk#?ac*qKrH z0?Bj6^YMZ6&c616y-uZ|7aF2U#8~h#p{|ht(rv%u7IzyiY zMusJa{SHqFUJ|rFV4d$&SC0r`_$AlwPB+eG*>`mubre5~ozlA2pYiaS8aO}r<+;_a zg=gKIpE>&{mL|nUHM5aqJI+zgr_{q4cXI~j_RagtJD52$lTPoG-Zgb?@?2I{+9ocY zay*fp^pzvvbxB!}YM1sotsprh=@*Q1P@tE` z#(+?tJnt)>oo+i_ulkP+I^$3IuJt7YD*_%w<|ZtRv#@It(&Ki~Pol7Ip-{X$=QtaJT(_OuU_6dJ=%NJy&Y zj86Up_S-#meA@A>XL+ackII5_vhyg`vNSZcCiPOXAbVie)bvPh1MfgeWws*ABg;Pf zc>3Jz#LT2*CzcQEUQ!tQMB<@%BHAaaf5ey2BcWQaFWy(q`S{Na(0hgkHwGPcz3;ft z>8l6NofXt0WOhhncuvTg1S07k*OBAE*_yoTfBGT(PP|{3F@eXv7b%a>2erC?e<~Yyv(Vo8*QW<_Oa!w2{9!++R4NeM3Fhq}!dKtf+JuLB75)w_NY)t>+noWWNU5)iW^Miu=jwx9c)h|0v^jL}&KvNvXL z$QqipCTD1_LtcLF{ahtKt#De_!8Db0z5Ktdo5|A(c4cE}mFYWkwb^9m_UwS%&b$eE z$8%frxP|XTKE=yR9hIX?3ySv0Iwf)WooVM%%Qz)0nsqx#6>p6{9eXb_HmozGXJ}%? zfS7K9w)20^yMzV$9}avMH7&|F^njwZO0$gFOVXWFaQ=nTAoUV)t*TBD zP&&D|R}oA6ub@8nbyjiuWbSG1j|9gEeq>wpmvh;HQ^M~@&y1WJelT)vM9=uWF~=kS z#Ae4-1!hO5M*WPj#@vl5k1@x*h^>iji9eMf=k(*0aQCEKO>Ii8Pd%45J;gbBU|eEM zc>L|uSt&@yOWtc%VBBc`7l9_1QkSn@GrbP_dHTKe+vNQ%Fg;*vu1|SJ(p%PHj+E<`@`-mVeR)Po=D@5WIsAfQg01`u;_ZT=g{6gEW#a{dWK5oY_Qza7 z{_iYqMz6d*InVOlax`fnsW(zDrq&35s8(w?XkKXYwbM28HG9;Tl`rI%<@=;f{K(v@ z^mpmq+ZReG97sQ?q`{SJu z`1;)NfUbTC{?-6>z;eHz0Z?Gq^Vh=mM!+$r*%FR{^NsU{!mr}L6TFkm5DgO43BrZnCBFr`3((wY#rGtea+wTOmMw2a-iy4>jAfbJ?E3uY zS=Bjm)oRTY%_|LG4{K#6kuliNMVX_xU7{&!5&V{A=Dgsxu@A+O;R{2}QC=aVqtm0l zpSv2qJbGGGX!P9pv$0jN-(snNg7aYs0i}UNrAl>h9DBY1cC+WVx_oIWfFzta#Rbo{D`mksUoK(iq+AoOg6w zbg$67@S4!nkfd{+=Sza;hIS9OgbLzbB>&-bCLWKy#Ij2s&YJ{k$tBg4wlc#hV|Yed zW>wb0oNI+A3hxM6vVMF^X-uiV;);QH2bQg4)jT&LC0sDDEW~Sh%>zyZC8#YJ6pKY?h{= zC_9ap%WY0z5`KjWqdz1BC(sFa(jIPDA}fIvr%d>ev_I)3Yi8mC)@fEaYY^L>Go4kD zbd5ccb)ADGA48>u$Ze&F(=j~ z`X|J*TT;8Hd1VaE49{@Q49MJ=Ez7FNhI5>AY6@QQy+l)lPen3elk7?`GuCUmwH^~E&|4Yu|ba31`dpPzSZ_d@^0m-A1#oYc}FRngi7Oy*x zpL#ttENx4AbH-5co*7xO+41S|sX4r1DTk99Qbu#+$swtEX-m`kag9l~SW9eN?8)do z@k3*7ME8q47PBnIE7`=`l?JEu=j$?*NgvoHye+BIGW+Gs$?cN!IL9Y9EGH(%ns+0A zMgA_q4zZVbw1^b%mvGQxOohxqc9|B7{c@5-EJF;GZSoR+*4nEw6tjvW#5U1#QISw1 z)=OT9FBV);7!0#?R}Ae2n|_)0ho(~TR{K=-Mfps)t7NXS-mrjkS~N}eDYGQ(PtKcy z&$&K1{c_P9HB+c<*1?!%H!%5fuvYictuhs z_7gjaH%N~cTrZSqwj0W%P2zd5ACwL)hHKILn!Ct7<1zl;{640y`knGFGMrn^`!0oY z9~3MpED~-PUF4riugQFqdM$SsKT8mme=D2J(eQ4jjLUqN>z~z^H-PQWZe@K)vQPTL z8p_ruA51Re7`P)+j&RYG3|>-70(Wm}w^T_Qn%ZY(+8!Z=}S|Wr1NuM@h=G%@|P5L6fWVr6{ZNY z1=j_L;7H+j!7WLnL?Rh4t1gl%w~(W84zWSyS?UXIFiPMr>fd^WTLOsQadH*g%DMMwC zi*AUYWW43Smd6VB2{#u0&YqIrE^n3ekzm=eS%0&Q89lP5=l;!lkW-yf$aUwWvL12D zI0HD(laHq?1HO};vWw@E!bzQ&mXy(uyD;}QP*2?4mfXX+b8>@nJ90PXe9L*7Q57!&++kU>vM=R&=Qw8H%gIV_ zOr4yLq~FMxkXp?_v*JXXvX|$#WQ@+N&m{{s<|pN{Gph50g~{SX$z91dVY6_cKpChQx%jB)xFYosBGGiiV-DS3l;n+ zf@XfPz)SEnQJ(lSyeSvU|83lA$z^VkGZ+PFK-HR@Jd0#x%9w-?tQ*Bu()04}if$#_ zgdUl^g4&|R;v>a$H1WEZ5#q-2fl4eP#BuuhU z+$M3C?gV}%O*~z^Ldq?Qk!2S
          ZR<2P-N@n7kkl3Hbw{=PCz=coDvZ`GeveJYJ8 z<;or_{3Mfe52SvN*^xLuwoA^p{G5Ui(_!=bGPxzxa+oSNG(s~dr+6d8rX@;2t0`B4Qw^9}jM znZ6k{nZGh$XZ}u)$PlEx&sd+4lu?~|IkP7BSK(g46#-v(LDUs=&rrTSe*u3e;H&b& z&HO?9<$`5`tNd#I+(I_LAHP%3i$6~!5{=E+!+xD{D!H7Ml3J0>us%gl8RCM8l0->A zDb4ShKcR4zV84hjbQ3*L*sC-1JMugWdzLIwG^>wjT$FcNv30nkYL6dNLexACQW=zRL@oxUgg6Sen zzDlyaP|ZgRLj~PI9mNTt!W{m>{FAu{^8B+~fg)Iwvo-5>4m&Thz?r{N*j4N!St)jx ztd#5#{}HE&MhbldErM@?I^j;iTj3gEiO60QC-M_b5|#?L3)_YL1kZ*0h4$hK@fP8O z0!!|+*vFhZDfaA+q^eX1xUmJs%T=3Y!v)i% zmleUK!&Dzs0`)w_pOR9!wy3j+kzJDwFZP!9lrEE{7LAm}$@a)D6gd>VEl!u$maHi4 zQ*yi{tK@IV0fhm&122R-wcg4&&3=tW3CWGhyJ~0EP1SzYN%au*Hq|s$CNx($Qms=B zD47P{F-_BeJ(Ay$-&f1|AtjZhKW-*=lm}q%i8g~Uqj&UfZs7Sx=gwr9IE8)(g54wg zL@$Y(o4-VGzM#0EE$zMFbIu=robb1(Yw38oQ(?XEePMm!@BGuE>Eh+0fua)8Grp&w zk0h+fStbb86gm_h6i}k6vd|)4(ZS+zMSo=vWb0&dX}Ba^{9Ce6 zvQyFzFky*!f#js*tpt+nl5`iJ7i|#_7GIJK6Auvml32yR#O}gRg>CtAejfLB?(YIV z`v_-S(u_p61cJZ@^eXm0@5s3)t8(t=`K;rZ!4b2f0k&~vr2f1NX2JmO6iRf z$KuPf&Z4CSpPU< zlGW^=83w@&^*L#%YJZ7H(ObTv=!~$Bps+wG9U+;SZx;U*o|io-9V~Z|?kYY}JV)j$ z`6N;ZCBh*hJIPCFYSG@JXYv$9s)AqQC!bin4b;>z*%aAyDK7Juev*!r2&J%8Bt0yh zE1fR6B=HoFkqD%%QjKJ+q^oSCY#ca|a`77e5B^eqxBP5*pvadyk+(eV0!NW)Vo2$~QcCVx%oJTN_K{yI{i)D^ z)zHcmWq=~LG^cdBqPudaimmKWPFADp6xBh6NcmR9XdAVEF>eJTyJ-kQ!r?!#n_<23 zvawxrSXHB*q`IcED!o*z)J@tt?Pu*8!#+*1-i(d0uBj9fM(zX5THU+aP_qLcUBwvV zQ4zKo>R0xrVT>sw+Lyb97n@$fE=x#bhsB0QY)y%a9US+C3ndatx#+Xa##(ypaz<@bt1WFMuC@_nUmO0Oy&E3*}y zN^j+6(BajkJ|%u7tBWd&mleG(PAfVhwaFr+agr61mD2uFM7CMBRAwj|T(q^wy=Yg_ zZJD!lxpbxUvDhZODcm9ICpsjqm2<`R+;yqJIpxCJ^6#3j`ss$#hHTv_O_PUZtFpb*06M>7_SIU#h&oE}7LO>g_7MDqU5qUa$P8 zC{^Fmz197vj!clZI~@$m#|40)Yl?64rZEkCrhDoFC zBNUNRUIELVbu~6VJUD)MA}{`HYA@YiO^PZ)=3lx*(MP&iX(vAkH19WYYROHxv(l!f z0Zw&l`hvCQDlV2@D=krUQ>qn&>X2%qYPss7TB*LIg)}2oBSBBzR(2|nD_HUzd84AY za+0E~BvvjfnOL%}WSqQFE|IU6$CezFn@e0vn9?nBUU7`0i z1LZ%^cIqzH7kySk)i%^CtLI-yZe4Q4vjc7a(K_k!hB86H->~gT2aHA3+pO=d@zfsCL~3WLC#sgIo~w6iLN$8zOU*pZ zJoQDjMSVg2MfFfstQw${sa~rPrBrdcbh-Sae0y`H%cB9W|gEB z?#z6Y(JBux4A;Fk6`5?t2;)3sPs2mwAY;1LuUKm+)(2{5XxxC_n5FKe)@t0ey|i_@ zvAU@`FI|S}73hUd9ZP>*zf&jBzScGBSh{z*-MYit}}nAA-nRdjkc92`xZYl=aet86;j=qEtU=D8cIMsF`LbP=G6=znNO%L7%LW3 zhgOOk4>z}2eak?wUQtk!-9%P@sPB4lcn5N|q3v<&@TMEhb6TG^iR-E>zM-Rv*iuF` zTNABZrS8cu5JgF7=_=rie@L2(kfJ8p9C@9zRpwt}P`xpZG(0fPFxi{frZ=WCQ@v@5 zX_aY;Zk%DWVVb_sm}JBZcMXa9Qo|6#0@FD(zgoO()iQY9DLFn!BnG%0|T%1>nMx9&$zTt>PU;mx|WQ8jF&Py2{o` zPULsdm>5tJty-s)6_}Jj3A8eSUyRA*sn6*Cv z;!M*I*Ei`N=%%W&)lJ56#ydv2$==xCILhd#pRHf4o2#S1`!8#pG=DVq!2d7ROArD* zMp-Srz}~*HeXRIV>1VAl$_#xBHP&8MR+)R5XPLeAo2|$i#rRo{md&ybzHktFYALV2 zP$jE5d{KUJNAv3%Kg)1ya!r*j$QD|;!$3`TLGDi z=y8T>)fe;+y;ieFe@b0kx>DOsx<=Yh;tUYrlS-yIr4BSw@JDnG>WHKxU*Qf&0tJtP&YUc_JB=r0lWxugFGP_K zObMnnM#8w+5T!5CDRmchDVj2EiN-_aqGT%>rL!WUbbje%#l+Gd^2Xw6MKg*{7eyES zEY@gLnmEa4=`usNl6Lq7c=A!m89D=Ph8MwkrY(jW$6umrV`5E;Tk<8@4petTxu> z)+RAeh>->lYcl-VFcrx%O4X&tk=jf8QhkP|M0Z#hhH}ZxSU>Cpb`0x+I$-P3e&{yr zAo?C1h2~?!(G6%6=7B9iKVs*x?pQRo7FD6~*a$QjbwQKS=jl?kcQxPCJ5_U3E0u4QSxQPZMKurbMT|nEa4xAS zO;oH^gc*ZP?&1*1XxV%vA8A2uBU|BHuq*rk79*>m?$9yhIASsVH3dQ^p(Lo&^wiV@ zO);sBtKt3VHxxmB!C&Bd*cYyZCqWBL7Sk@{X5)B+zu|#?ug+h;PQOt1KywOu3A2f7 zX7vSQRdV&o$}UwQH9cx4H{>?>*8FPmZJO5nqqdgRR4lBhtoUSODqN}zwTl``>Is_L zAgGD1ryKQ+r7cX`(zf6>-zy~@jMdG;SSFi?(w_9KrqsGkjpG{MUyi$c`|{2DH+8Y* zV#_?sM}1J;G9r@9Dw{wA5ob{y>Ir=_X-(1aFZ2R_of=DYC-&kfxtAy*HWF51DLxK& z!&!J3?u2QHp2QxU!lUu$cm**Y*WqjNS=eVR8GC{4L~mnm*fCUziqJdQar7qKfNX>J zBg0`HwAd&yAiVvj^OIk|!C71$I z@6#+bo`jDnMi&Xi-?hWgFSr(ei;suqsUi_0@&R56`5RBeSCL+@6SM=0fV&~SXd2W9 z=0lgz%cvZcqF2x!NCXm&X(qJl;IC&DLZx&nR2e zw6$V=)6UCFo6fczZnn0hv@EcNSVvhX%S7frBQfWg7gSxobn5blW_`oYi}|%hW|pOo zwTEqpwZ36*?Z!%H+gxfqrNrY27FA9T$Nv$-iFec>dI2?sJVho@Bo#v5BQ*p@)DyX6 z1Q|;nBR3Ixav<@CTu+7)Im8#@EI6w?`~lvC7vtOUG1zu&E0&M6qf^ly&_m=cngt6{ z7%4*bLMt*Cm^PU9=^2nMYIWCjd$fU?P_7MB? zn~oss3@eqL(nOF=tsw4Fj`$UT_Z9dLRETC^$FVV(142PFP4nT`hz@Q<2V!fmW_&Eh z#r9$()`{&wFk~un26_wqhERjrP;FSJe_@F zRSmx(t*J+|LyNwnyb0;}uXSnL*H&B0y{798p|#kh>6f0hEbN$fWkg40M{wEO@@35U z25aNOOFu83s=HJB(EP!IT1Q(cYaeqN{ha#Dd@fsi`B`IdgWKh@iemF~OM~UP6}Dcm z=^KvKZL3162G^}%JgFJf4EhM&i&{q((%sD>ax*=cilsVeXBwirPry}BpmT|*n3Qm&Bc~sS`K*mleVk2P?xFyWBddC59=I; zCm}rJX^m7g3u%YBu$y)xz8>pCM3GK}jXX=-Ax7azSPz&&w_;jyE7hHvK#sz*u_jE4 zyJI_$cgQMO1q!fA{Xl^#HDfNkuX3u=RbQ?aSIMg-^&?wq z+orcYZob-*(B7>hxZ_#J&-QoiVB~(uyDq!lp^4YVzvkF+tK&o4?V5t}8_fsnUF+}G z+%C&DSDB}q*PB}`7Hg`dgLyzdq5m?=EgR|{H^tU(wH>l3ELmXxUs&hc>}&<)=dDq7 z&nxvc8*6qDW)h;k>2mrJV=^b0n;9QEfF4XQqqVdK+@DRG=}0PsnoV7xWYm7}wU;_d zWm22SXOu5>5S)X8=pYh^)p#d<4PT31!nUA4(N?T0mX2j%@37a{0(3nRh71QgaTJn3 z)evTiGDaGdhJAo_x&j<-*L&)#baV8pbSm8^!ye-TlN8zjKSbA~A!s?;iZ3AKqzLp} zK0a7oZs-D$#y)rk0TUF{jgF&NlG})C{4o(m>ga*=PwF8xgJ>g`;ctnd_#t#G`~;Z~ z^uY|s#pG-prT=SOVd`c4W#Air7^?K`h6j~Sb!4Tss(byQ`s{_Nz==)?`~%@ z=D*Y>dLQ$MQJGV%nbtQzBQ?`qsS7lVuBOYFX-pRVk}9XJ(k^rl>IXfQN~HRdXF%61 zqvla6s+ycfvdK_#Bk_z_0~lckei2=aJi~Tj)9_Jv47Lh=hdx0)kQ)deDS)-mYrvl) zfNr^D@-qdRa!qcgZ^psKxyEazAXA1Z5$KyBq!ZnPzQ-5hJ24vHPO!(`RJ&6ni{|9?>FJ?B~kGM)k5juPnhGV|SHJF0m!kb}F zh+~>#>Ia2GyP-eOKvSNn0`89gt1{Jgsoh)ms$pwm)TNKDpDxa7?%LeFv9PYC$-8A? z+r)PC%Gmb(Z5=HkP2p|RJ2thyygIV2xkW)x8ttWbW%;&d>r;z;S*;DTd}LlRKba?H zwmHDE%sSJ$&icak*7m_#e&L6u0%+OYR;@L|*576=qstx2#@V*nItZ2Zg=GtL(tN}+ z(6Yrg!TQl!VDT`2qYLSS%yecX^@f&Hf9XJa2sIy^l9}1e45eG>BUB^dLqb$2C84|0 z$_ON-BdvfVAy;S^ z+yj0Lt~W>r`U%Yhm~O@g;&p@v{szBJx|21;L#i7sXI9ZW=t8E`%%iW66PWQ(0wg3~ zfDRu`{QwovpPWS9qR)d`*<^NRNO}M{m+X$WU|)Ox$lzhywn ztojkHMXd{(dpE|{{jQ6t+h?tyUex`xZK&RGA*RAmebTzql5IZ6=q#HUy;)+uY?WI5 ztctR+wz;^nYH!(S>v*%=vd(hc5@WTqd07)|cgxysgU$JtpG=zB*|OI%lrdX3S)Faq z%68KfGnUDrhca^dEqN7SP%SftK0)PEx9I?88>40pGQF5Zw2F>pBI)C_BfXE#rW^n+ z?We|*VPq>Yh%gc#0i!$Og}6O-7jwdLFh~3*z7%T*>`;i!2WJ5xZ;)2>D5^y{Xeizn ze}vcKu{e)#BT|VOq?Br;JE;A{ZBYB$=!H~Q`h$5C^O(6oO{ad6{gi$21S*#Hrs{Ex zek>Ubbt0n(q2ViilKw&MAa9b61RFnqj|c3-0&02y7KFuM)3GCH2>cnMOzTaVrn9Em zNHlrPl4zS++10YvcCN}?yRxdd!smix)%Ne$Wne{9 zZN}w+HQTJKt=G(N@h|47X8)>-7XvH^z?YZiEevJmS?Vk|Ecw>2=A&ghY=~{OZKqXR zAvP~#Ld?&Zzw~GttlZkw>c|9Ixt1o2t9i7!pE=uHZbq$JEx)X1Eqvl8=|(hA?o=}! zMkP__C@-4Lz;qLBWoFXH=*e^<<3hcpSDODZ8sHSs z*}B*Jm32_tn3d*MP`{&rzKpjnu!hjzm{HdA)?JokmJOD2Qp^azoebs;{gM1k=P*C4 zJAhW6WZDnRz*7qtB2IWGnTMzE6#1+?b`HO9s;S=~Fah zK5psB;Pg}`iT+Km1Sd3~Or$F4zNC!ur*`2&GJ=>)iK*4ZbK)uSmx#nZ<5oP32qaG8 zMywi3#4PA`I|gITnE}9 zkJw6h5K%-reifHvD0&5Buxl8E$CAS-$V^xtSPwA@^Odqp3t26xSY{R5BCXHNHp@0k zk+m1~nh7t9w^h>7MlURhkXzDitlGlLcH7GG{?=dAHD+9yv?i0fL^YW8bccDH1+{3c zU95YlFj@iFbhbrgiL^v8DAh@|(Az10`W3yAIY3E>VfZ)lf$;(Qk$P#)pa+C5z6`YAPs*+&M6XsT=kXjlr%F3=s?1VJJQfxP(l6684yw3$VqFoI%V& z8CAj)w^z$)3~Q9=av^f7S_%zSQxYQKS>Cfmt}_#ONTc?{3OGz3ibAZMU| z;2^a?FF{vg^L2lfW0doCufQ8eqWS0;w2|14hvWAE>K(-UBYwyjs2I^9_lTXuE+T|n zMqZ$%(*ma5Oj%9=-DtBcwtlv8t(VL)pa6fHy8x^mY0`j};)*#Z>IGcyGg=nivlbG4ZU^^$3RWmQ`@TAo;^Se{r;GS6r| zI0H~O0IB!m3St)4NWRDm>Y6~*p9tGwb&ADG?s+Mh~EIrYogfXAtIWDfT!yX z-cSP^_H_)#5WFjK5U(MY60^}qXf7UuIAE=qv;1JmO4A+_4`e+;__1axI-S@AZ%39R zld(F2OAR2xz;kfifGtB_qhUlh;tb(~#XvvtX+%6&?>gFrIYx<+v4bP=2jd9q1vI*@=ZX^%V7bu(>Lw=_YQa6|v48jD_>2wdG8ofyha8EGt z-AWfzBbc|$TgpcDp?=f-seGb4ehPSLE73sQCph3FZUa5?giIrz;(duO_&uxyn+j5j zO~evHjt?O!aTNc7$Kb~>0;C&X$S3$wOpkNG-9mg2`UZ)CE${}AJ4GPRK%O%a@;3w< zmKdAR$;1JZP0pBB8x5ui=r9y$Tmgq8Ft!IIM105}*@}&!CQx?7dwe6&AMe2Xp@~Eg zIg1`g38*zdSrrl%A|7Z3J^_YdNX${lPoB^0)V%iuLbrau9x6?D}rQ{zv9PIof>N9nWdP>it9EfIs z+DcMR1d!8+bh4OCB4hAZz$ZK;U5Q*`5va*`1WkSi_1%R4m53t%_xZq}Rvo;ZO;ux_H^ni}2!>0IEEto=|^@0vx4RQtQd# z^l!jI3B*Y>2A@Inz{gU@)E&?w!UX(m05OV6NAfAXX(YS_{z`tO7t#0VtCRzMiLo>H zr|!{C0QG~JH58k^OZ@}f@POG&kEcqhG9rY~VFKb6aG_g>dsHLUlh_J$los%@2+t>e zk}{&5SU~wu8_3x}rKrix z!*d8{@;yBOBwfjL4ZRQVgMP&O5sQhJz)Q9{0;Vl z=OQJrH*gry_*!B!W{+gRtKk>ec61)LlnBIIk)MznsGy$YZ{`H>G$VjtSxnuhUV+|^ zA|0rmba$qjabWg>`Z`CsFpJD;`ajYG>xK13-y3Vt8-Ra5;3{+&Zn7W*o0&-Vv_()U z^iq1Dc`MV*K)?k#F?K-ZyrosddEm>hnzxy!T9#QX=0)Z*<_-O4SAAi z!U=o};FWdQd5~qCLi(7dYX%6mY4eeCxXu(0DdF*O0t%sr;O8LKC^qeZ)*$&=2A5&v8_OcN!OW-}z-fM=QTiogW1N@~0M#M-1Kov|QY`Wxl}gz& z6Pfpvqh$~CgQ;TNfPT)Q7E*_)c#@!`AXVs2$w*JKg!n^6Q6H&`^eOB+e#evp&B6BJ zd8CA%P7eb9_9%F29V4Q?6Q%eVQiriHHdRQyq9f^z_;GwQDFUmXOil#ZLtl!bQ0fZx zoq0`ZfX>P!@0$lxo4}oIK-&(aT`4`i0%S-bbUm%3+W_xhq-K#Lh;TBHw2%z|qx<1+ z0B3W7R(AlY>S{tjq=GJ3js@Wpa3ww!Psbl%c~~Z>>VC*{)k2=y@=$)U=joE zgU_KovGvGa_z<*8uP_>*BTyo88huG@vlP&0O)%zeNF?up*@lfC0eEUAd6k?={v)G+ zmSd66iB-g5z)D{L?!^=Lfl^#S&7__I4t_`H)1k}|Jcznveua0X`Vhm(Y9j^J!Yiq8 z>LH`00?bE%t8J$9sRztNz#$5HKHvbp`KXx#l1z%u07!8VxFZ(10bfb&1O3Y()|0Qv zQDg(*L_8&T1La==@|BlV0qsh!rDjn^^f>6mQ{;7^KqrB`GlDt*RH1@|$%BNwaVgN} zy(l#`j$)`#@-{Vqo42PaV>xgf}HnJah%V2Ub@tK$cn0X1<0~yfkXYfK|I=&xUf)B!0pnuT_tQ=#3 zd5RBGgY<@nL-mjY!YzReM(Wi(N>xL{u2SBc-rKTF_BtWBaL?+n) z!Nvm94w9nzR66j-WuyV$gB1XO&_*mG{0RfO1TV&X5EZ%z>3}j31u=x!PFw|gqKZOM z15$x%$rDTjuEh$-o3sb^RMP`qhD4DG^eXck%Nz3ps}Hk-nhR>}9;jOdeFB_WE3=Z> zL9d}E(p|_ZYB`yVw_`VP37G}X`3_*BgJcfqh<5T0!6G#z7pNN}?Lj}F0_pdlt9Da< zU^mmq<48ZOoOn+*QGJnH7z_6T%oqbu9l>{knG8hMQj0+so&=dhxOoI{Q#*kQeM4Tw zJkIU%>w{Kx+>K>FHt6i#>rF72vz@ z9heX#L>$1nQCJL`gcKnA5fn@kAY>PO461?TkizuB^vu|3oT>g)s!u(xn6J-+t{@`Z z9S=r%&;ghR6JiR=K;7~Gh`IPs{I_NTa-4ifJt6MmDk2qSgIw?nb^&A(AwUN&0Q1xw ztO`C2PlM;d$DwFA5Pc64t2``?JYC~OMUxxx&%``{2luEB{4ufyOgdb#+4MVG1RZI9 zWSwSZ6N8zx)OIqLbS95e>zToTYfpn(K25jM7pVaJ7O|V8u(!x!tS_bp{k4W5f#UE2 z&cA`ciLY1*IR;?)J98hVh)HBdfdorM-6xJSbFfFS3ThzBh&b8<9gN<=&*D??`($t8 zJ~LJ6r{`Z9Hh zd`vo$S!gqUmdK#4kON3FxsV)2bQ10$GhL0H!B(PDtSfpPorXLCiFE;d9-aebKyId& z#xI8Nh8Cm3c*{r|1p0h^mCC|RO8Ly1FLg$J@lU|j4MLAY&e%;j0r`zD1!(+jOaXi8r_MWLj94`a8G19+J=A$HQWbML-nTDCIu7&KZNf=bCH#o zSrtcYxcMf{21xEhUBv^*HI~KXH6#mujd?Iz&3CMQtMnkJKTPZ;CsY4`Q>;TU+kphrG{{;Ie z!WZLR@kY`fB%&+8v-VLoh6|=_d+?j&W}=ROs9N#|ag}&Qdg4>Ca!`fu$%VvKd;pju zw}JgXi@rt^k;{k+@(>vUPlHs@I#a1>f@z0wxPjCsfVt#o{VM%2{SsZX&Oz&=*-_#f zH7+Y($p+cdK-RP7gnvQ*kO}dyIU&EU$J&dkL{w| zX%10OJ}}$N9@a3X)}W$iQ&;FsppM6q0R)8ez&zZBHGo-cPpl_$7%1m0NFBNt?}qQi zUGPLy0A}O~Sa0kv_7N+_jv`IuQEE6NH|xx$v?GO(Yp5K=0dF89usl+V?lWwLf6)q^ zJ(z31Mlq0uYz1!Q6V8D16oAth2D&^K;Mfu}$gmXTEuFYO;tR6pYGMgF3rs@Bkx5hr zK$}kB80G>+be7B|e8IGE2vcP|-?XH5y{19CTk}LC(oWO$S8x-2Q|ZDd+Q;Z)Fi$U`#l$yk zIPgeAkx10bI0^cHD!K}&sJ1q0zGn*}q5_JF7$}Mgf(nSDqJV^y2#O+Nfr#XEcX#*9 zz0*M|Vm%e(+1=Rr#+KmV-7S~CnY_uO;7I^WrQL*L&4POP(9Ubbd?i#$=j2i}w3 zaPL>o9dHtJ&V9o*%{|W9>G{6mOag{nj^f&f&IMlrg@{>BY;Px zJN)c-?cwhA-cddu*s=7u+^$KkdiQ+K0{0ttgDcXtrukjVuGUrU>p>^>Npqi;!~-9F zS3J*r>svy+phMj1*Ph(2fEbz$x+XdvIuMRjdyZ|Al?6`iHE<}zwlrAATB;!l#Iw{x zddno~I|`qngrnT{mR3*!r2DQmcQ>E+cH8n?U5+H*k9#=MAKRleG(tp z<#F|KL!M06L04Z#uan`(w12Q3fXZ!N>m@kQ@&TG zYuVhE*fkw|-$_uxC|eaRo1nujA6nbmHn$mCJ~uOboxVBV`5vuD>Y;f)c%obZjzs%O z8w~%nuC)>zey%KMqT{mD&+*V1>0Ip^;M@XyZi#D-`+^S%P!Fp;|FoQFo8$Z8Sml}H zscUw*G``(!kk8vJ^^S4mz$5>^7xspE!#uw{xgL#oh-;-gzKX#w; zjPxMA>)g5SCT~Y`gYN^#qc1`4kP345-sU6C+du_>1FU0_x6&8mdFXlKsqv2X4FD%K z4WNI3@~#EZc&Gc7Tj#p$>;#ry=LoTVwcP>8xkiWsRY1cnM=X%}x=CUxG7C%}0j3e5 z4#wp&xt3_piWXGsX6_pVvZXm!fqo9a$u=)lE8)xYxSWQfmn_$&3-|QQZsM&4t(CaiFX}ymBGuQ4*NF`+0$&l1LmmR z{njS{yXDEvD)%EtrK<$?0yN+k_d0ixdxU!i@Mf($0>tT??hp_!Cc3yDp{Lrt+m#0p zSpFW0cb_lAJ=VqYto2Oy@ZDRzd7v|J3Dl5F+$&vs-MhgYymWQD!d(A>F~_;Sg7;o~ zQ^5K0Y*(5a=^XED1J)t6f3uyi5v-}O64F6?Er|dFybdZgNeo;=r~Vkg;a^hRZG46| z*|;ti*il?)UhgUJesWE5*EsXs8$nm~d0PPJK)h|~52A9r_o&w&%>E$HM7JEE^VT~a zILv^*+F`p5D{SMe|Jb(J7QrddBy)%{T9>x}&x29NMj!1wys7gn*v;*>Hn!+}b3u>w zlIN(`)m#ox80pRHy<2^kd;)i?Z=h!hKs!xzdtGB3832=c(H>=8V;^AqZl7i=xBj%2 z!fI%l%zR%UZsAHWN&HP)lh7Rz;0o$-}!M8}3s^>KEWv^CL-a${}u=3@Xez;Um4zi@YZ zUN@Us_WH6ttGq~8xvRv@cWK?(V26_87-0X`vBmb=KEbN7y|QxPn-C8YnOn^t%>7LY z^9)lGz~yfrZbPt-iXSLxQ<-oa;~ zGw=;-fN{Mu31q4gSD^C`fTwJIF8wJ90bQO`v?1B+XQF5 zW4+yH_u3q`#a6U+H1rz|vs!G+ZNF`=?M8crW3mlvH`q@));ieEd-nUbI@>|Vc-vd& zA{Wbc!@eBMOeg#idTaS@p;>Y)v6d+FYx8PTnemCSzu|>GMn~7`@Xgd(`CyIE5bZec z&i63vBWzZ%OPbm`wKWdZ!gqZ8y|;WN9*sK(bQ9}c(N4YN8L-YShsZI{vD6-9y<|V+ z{0X?Y4fYn;0=eL?fa|^tGMi|IcBkgZp|GFr? ztpH(1cb^53#@{u?73X+pvjOz3&F+K0!Ph|4WI?^qG4ov$!PH^S0f^&NeUG7!Ua9>K z(D;@5UxpOpb+g1W&q{>TO)~Qr(-iY%>klX%vY6dqU0!)UxT_sBo7@y?qFQN?zvc{d z2w;qlfXbuCPPKlu4uRLf2O+!lx;5OI0BazWB^DlPdjU7v=GlU5KIjO6H+%}^#to6S8nQ@zElk2hbFK4rzX@?yw=Md*`SB~?xSjLy;%22mj=wmN&7eZ6nlT5P4L}( z$=u&O)pWsBXfC$oTB@K@_^VX~tos)H3F-t`^h)TnIo_OR>fcU1Hsnz7{->>0&wS?( z*AB;eU_Tu;k&R<#+oJ3;dywszJ zu|aH*8@dgp2FN(eIM(>hG}Uz1yb9DNc!*)iFbhG2SO`n4!%XkZea){e>!3?8%bH?Y zXL(>bU>;^#V9YVl4Z93h{S(~_om)3YGfNfwICeQN zyB4{ZIL=4-3LAxLpM1+1=-oqJih;@uD#P+8(*IEt#g36(M zh-&=L_}nl;o31*lX;ptv{j15)akK)>NX;q@SM#@KygEj`NKFN-$!&l^Wzf(RSLDY` zI4IPdV$zu#&6~}1bE?6m7Hf7JO7!J`SCk@tYuayqW+^qj0o)-X9AsjevRMPGb*Xx)f@k0k&qC`lqHw-LAf<_Ncw;FjXCG z$*ur4#HWh3O6SS18K&v)81`9qSgzU50XD}7`yPN({A80^4c6aKi2j;3U*oU7u4z~Q zQh!msQeDyv)+B3aU>q3j7+r|5M29sUGZ#QgD9hxrRKQWr{?31$BSA!VLlE2#dJ2y; zKQ%|1_d}5umFcJD4`@4d9wJz-0_^)_kP)xw59|0Ex$?Dgf)b^!)?}$O6&DqOidy+E z#Y1_y@_=fXJXf(z=94!ng{G~2XThx&1k$ScIy0Tdw%UOavM|X3p1@(d)u}5~%_=m30_}o+hTdkL% zYIvu0q_xe8fM=LD87^w-l?#;bl#3K(#ZJXC`BZtHJV3rlu2W_zMT)-a2<1ifIyFJt z$CPAwY+h!j+GLJs+jiLBG8D#|Z$mleMq{?=sd=Qa*yv|GW^@|z4V9*urX8ktra>9Tbr)!QsERwWNqrx>M%_`;1V7LtltzZYzU-F+ev`w^1LV|7`dSxSFeVtsvv|0Suu%@;UNS`C8c*S+mToh?gIc=gK`& z60L}~k2{R}Rj`D+UWAgq)(tk?F=ZK}O|J}(jMGiKp=_wX1vZIwlT>r$3YkSZPy$Qt zNzRJ@5jTrIii#vVWVObSBoisuIRGqHN)A?zSgBXrfSE?h_v%vb=RQ(m13YH>Sb5!$2F9UpE ziIJuASEb6l+(M;HU84D_j!;cdl`7ig%jE*8O*Ti~BrlQARg@__3Zr7P;;tf9u9j!Y zuc*Q_AGApAN5x=mtmY4OmbOb*r0vxBYyMW>P<)XOlsF_yrN4nDN2BzLC`-f>4-mEB zV+m_%pO_5x2}P=Eswz#h$?#U!Ylzoo>HgH7xAZfv*36VYlw1PCaDJvA4rC6m}Gf6vKeO`T2dsdSrchFwQ z-YW+xM<{EQB*iWHRi#})0X+E}X} zBaV}9QXf}e)HbNg)m5t3sv(-e+C|b;B7{)NZ{}^{)$rWhV%86K31G*G{zh_4gcUv%925A&z0z&6J@Q_~CzV8=$4QkYNQ%WPCC8)$*-qI= zX_Jg1PmoQO50e#2tHtjmPsKMRUnQr+ZK7Aabip*CRd`tRRPtTgF0T?>6+h)lxmCVd zUMI_zkCr(lL85#iPFO6wAS?sAG*1Mh1X-dyu}B<+fe2G*&lwf`X2BPppU6+0r<$cP zDRX6aB;O8O%i?M-rg7%B?l{ty|l)a9V0~GWSoF2|Z&M|%` zXD7Ena9(^t`doNdxI$-=K=WoeEyN%};(Ub;f^ zOd1d7$052Wcqc*#uJJ>7yLn3l2tmFuMv@?X$nyzz3Vgz6!q5DR{AfWi{~J&;+ARr? zc%^E|E2&ESU6d&f7e|U-iNXa0?htMwuU-%*3>GaG(N6(yZ7=4&~5?C-o1u}6+mX2_LNtfWLZ zjkkj1$BE`1WDRFTQsb#q`UdJDpmnvGl0czSzcSOAYnW$P80G}VH`Yp)oB4^E%ihhq z$!p_6yjwgczlhV$e#zR*c)_Tm-=p*CBt`<`4*ff$lkuFRskr~}Lb#WB{=5|aY~DHUS^jcbwP6+RTb z6!r)mqCbTBf(5)NRv~K}_au+aKLO_Xn(&7(QM5^f6$Oe$ihQD7LW*!Szna_3Z2>++ z<~H$Ccy0V{K^MQ9UrgJF+k=slliBlGiR|?(0xLooB%Lddk$n-1xM+ilvDJyVCq47AG(u%hVg}EV0>mBVjpF! zr>&q4qnx00QTJ2dQ14Uav<(8fpeNAZAqCT}P=fqR&{h&PDa0qlAnZTh~m+he zcL?rt&Tu`PnVic&Z7Gb>MRE|{6Z+#H6V4En`0x1TI3v(jdx5)5$R}JRTmZUju_U05 zMJc9ypa#=QX+z0AvOjqsX*1~pSw-qgo=M6f*~r&{HqTHho$?YWHJzfkDXkO>?I2Kp zf|*Iwhtw3xzm!b!MDk98jMPJW#YAypcpG_#criR0KaUG@^?y4E0^9* zpT-zMIY{HuZZRLRF0*1-Ijnn(LdGxJCyI~MNhA}>@#VNIYzIz>{R905`!@#0=3;(h zg3u0Zf6Q^rVVs#5MQkH(A{@Y5Z~{UnF@VS;4JFcuY66D1g_KA7PM%CMl24OcDci}9 z$sA%5v735`-k-XF97&l)`a)C@ariyNBea)Hf0l|~zjz4ugZ_90or?p^_8FZe=4tb`r1;GqJ4EtQzpUN8DX(DJzMlq^zX; z!}!TDadq5nTn!h+!}C7!>bYKS40jGkz@c-Na01xZ!2EyX%x6p4xs=(2aGH(Qhtf#R zqm7`SXGSxM=*#IB=qqW_)By4-QePsDun_OTO~RZ-UqZ7nOHc)cSwuZemoi~iU&eFh2KG<( zHr9N`4~CSvlc``7(pS*jwEyTt#%x+P4Nt#9zrj4t3Z*AeMv%6W4Rk%Q`Q4m!_8E>6 zSk7qfC~)@<4u^A-gJM5nCj)KTeaxeb4>T;vgKMI?$^VhFX(g1q^cea=Y7Y%T^`o)L zFG(W_JwSzaAx?y|V^QcEsB7p<)D=`R($Gk2x{5r7`iSnv)L}KLJy)*sn;nn)J$qTt%SA|Sk5K-16nirKKU|5O4&~wKu9A#B+Dt|DaE8(ay%KP zHc-s8D9QlhInqpu3F!O@S=*V9*o)an_766Tjb|@lpJlIRJz+&KlNmc0%PHX`Iq@sd zh$WI26TgvS$=y^o$x8Z3Y9J9w^@OYV!FU*VAGZ%n!Cu5}M(;yWkZvRz8G|TpT!jcj z-bXLQSg|Eo2lhEO7PAOD4lBn#z$RgF*p-+=7y+gY{R90JZN$`Lr(l`5Y}^d&3#<~W zz%~K@IYOdQc+{QL_q2RkUs^i#9JP$fq*^H7$eW2wqJcDww2SzPq$E!OUgAeg#jEi= zR5xlE`fpqZkwnZQG!rTa9fTb~?{FM3mQaenM?6GbPCrL`ML$f}(AkVI=1j&#W-vnx z^kMJQYiT_+h<2Zlj{l9HjAh~bV=&kr{4@Ml;$-4M0*jD~@5bZseZd$dxXZW&SQmB_ zb_|A&I)h*|}FfWYDl^j&Np3=Ojs{T<82S#c|H4BQFaFW?nQd>2qL_27Qua&TfC z3)t00>^B@0{}rP^C!j(aXEhiaTbk}6m>3^E3Y&^U;YE0u7!Q1F7k(@@5xtkSYU%3Tn#oIHxWCp$%WXCpN%D9H{$zYkKod< z@3G<7vDgCaQ(Ox61Lglm26G7g7`+Bvg!+UEL!7N2Qop2bQQh!;^nI=MrZY z#ZoX0glznCVi)-kbrdC)^prf2LLtYJ29TKe#h6^=7<4Qq2b+PY*f+3pVoeV6Jh_Lq~^+nEZxZH52@oM9Xrd>!SDjC&?bRkwC=Oa6i zPnxFg-B9^g<@(A8yZKeOs<&6$st#1$t1PG*yXS0uHDWx_BEE#ZhntVY-_xMCSm6xUsjym*t=uLt|7Zi>w=L=qy`la zX6yiJ8?qM#A^$?HYUthlt}?$)R?FYpTT7_lfeb+WZrWKdt&OhQRlau9v)!3{da75| zWbI3=qu0e&Z>>^QbyeNkT~-ygo=E5YRdNxueiOfd!slnuFzUMV#9$A(&F1C zS4;P8RBcY*erLzRiiQg6w%yw@tG3rqLk&cK#`I!`V%(U2vD<-1RHMx3=Ro8APuwE{ z9bbb3%I~O?i2jW!h}oD0=-!gAWkKctY#+L#Xlr_T@vemG2B4mO2$|W`)^MtR-M*XE zwFNiImX&w!`dF>0$!qAS5867t47Z(M%E_-?!(Rs%ek;u@o43!tZ+um1Nom3CtYK@O zuRfn}Gx_bZ^C`rotT=8=Z_Kl(^|7MW0cjU<@f(5*w-h~H|9!)uqQ8rKH;^`rDMoC5 zyaz(M(ShiN=qKp4$fM|Llm;~d<%je`oyQEo{)K&sorHeelvsyv?28CTJg@D)C9h=q z#-NRtO9z+U+Ono1VHdgjpXy25vr6t4NY~|Omu)p{Kd_y>EobZDaz)Xg5>?^u+~5R5 z{EPXY7KW`jQ=YI>zvX$x*A#i;!?-&!LuSN9@FOc`Bt%S|GCLeOg&2M;>Q_QRLhq{V zk|706dHV~G=bb5-SoFHYxmDIEL0m-%k#~?cQ2mhUO;?+0kdu(LsMqN2$dbxCn}%*K zuO3q$xAS93pWLwp**VC}nv5UmoHd(Pe_f+pvnfrTot(dCgS(WPb#l$2OkuXWC?yNI z2C*bO=GL6|)7djQ$&}J1o0nxoFO84Op0glAIqAoQJ|RINqs9jYdB;Bvy%|CSlvr;ZP2j%*Cc8N1SNrT;4b#bZLpj|%opD2VXR zu2{ICU~fTL!Jw?{HN&$S*BvYRuX1#?s)|~fy>n;f+O5MY^0(dJiY&L3S&A6>bBjU? zqc-l{@-20K20i0hHZAK{+Vkc5q@$@*7C*?CwmNKa&xB8*{E+?=E=}A!{_WWDe%#S* zlj!l268A10m6RK$4?R7)c69ML+^9&uKSs?PJ7L`QaSJD|SZK`InfEMvV(N;O)ob^q zomuy^6thdPk&*voU3>1%lEBUX6)#LPth%$ZE#-Y0dM!RGJ=vCAoN_-YJ~=W5kvczq z{)|2meq*KM1_oD8kOwCOl#Na8(`VGhNw1^c%-uh$W$Lc62_yLdp8~rBmIWRQk_Gn( z*&N&z>X=7Q?@n!A^(?Jlx^zuw+Vs`zyiX;2^U5-8>7&yE)72TnQobY%Uvz2J_!U%c)(suyFCBBo zf1TgP(N}_#CcKY$IcIj<%ACsF&{c(NqO$(X9Gdw!e{9L@0yt~*%B}IX*v19>6O{{x z&hw945%neh*}`9Qtm) z=P|7-<`x@^Rrx!!F6VaTm#^!}othcF!W^}4?v}V)OFt}O&bzrFa@w|t0kft@W(5Bn zQ#p`Oh7*H*C|?+9+QPH}Q2!XeoK~?b5r&%>33>@zIXS z|3p5Fj)`H+Ulp}+*5v7@r|k|;ADb409X~j5>xg?p?+sc$VCv8(K^H#k_fuhVqw>#X~BhyS-rOG`<~ z%E(F8_6takG%a?AQ`vM)XT@9G zd0KCjbJpx;=ZEVSPaN30W}@eju@hsC=TEE*h@JR!&Se+10_tKF)X&8yB-SN-kGD(q zDeh9;VefK(Lbc0x>~+;}-sL*%=2BN8ci(l!%iFH2HxF}-oHf@qrB2|Q|E=A%@`t1A zxw=}{yQ15!9johIzuT>HlWz)h(|9Uy(|2=p8~!WS&FV*&8<0Xbx8f|fnKrN87S;E2 z3ox&D3z{o%+dab3ElT3(7MGpumSm{umMZLW+y7M8?SP_^+rhjnx18LoZn;11yX6&n zx#gvAaLcVzaLXB}>6V>Z>y|kx$u0F!ky|3ma*Me;)-Bx0!Y#nhizakZ`iJ?mVl$$VGsiS{l}4CcBV zwv}>Oa^2TObHLz-)hEdOtL3HmBeOh(l8|_@`C>pT5 zOeA<~CR!o*EQ))iDLT3?S#%-xw&>NeSbIgiclLv`582zy5ZF&!;AtOtC(1tR#Z3GC zVdnP51B&d$n{w^1`=;7IIW^Y)i|u>|S^udHY8J~K20q&5VB~M^FsfS4!Mg6U18kOe zn0Q{kP)%P%kzGEqE!`MCtxcTpaC@A!~fRnu9M8R_7 ze`nW6I{fn?DaYz%bN}Jl7f$~}2a$RDKU?xOru`q*9gn#15BVSE^8eXh8|wdOSI!9e zhxUH{*Z-kpU;mN+!{z-a{6oAmY{UOBIZ5{)^250{{}6uKeE)}ZY~lZ|ORw&{`p@Rx z3jaHwhlT&|deA+!t@>Tk0{SS6RNvK_!_y}}tCqORN@Ok!sV)t5r0v&2sI7BBiglfI=)&n?Hbe{m{qN?U(Bjgq^f>t))47utyP`5r}5Jn|Eku)BCL7Hs&0JW z1wn_TtIlmX2U9$;s;Za6qBxbRvW@ll%k+0u0Z*+x8^59|>(Xmj^=wB~a=0|vzUN?7 z?1QObKc%E9oEwtMXD(K4b@>l-hMuVk_-%>u`I4%|3GrB*IJ9b3yB{q5GoWhnYklP{_}1tu#aqR!Afd2IW}PdkP}Df{vvQ!rkkoCWDgM5qoo$_UHyuCJxvacr z-*Q$U`u4N_tXWQf`wy;Nl1Cwqb?cVT6}?kgD(W?E=l73IkyL3JNrW?Yh=xvoAW8VB zBuXfmD{2|*C7M?I6`sCVk`z9^Em?yjBtvaGBu?}9(Db)mBFDLuLe6cTEqjsA`W42z zbQ0K)!3v^*TPvV9Zv!1}cL?i`tU{etl$H)G!rbA?@Yp_)E{Gq?2kY;oI@Ug1#?FA} zcGPq0vFdzDRG{$j%@Jhs&vl5a_mh2}?qR8iE7vI8%cb_+!gHI)k)IZNusTWwmXQ{` za^gOpb@T_@-EK|x{grC9g2aZef(h(HN=g472FpmtZNb9`y>&*{R+a0X}eh2GgsE%wYm0pi!YHs ze34;e8y-IE!{*2}i2qKwhBK1xu`y?bVE-i=w#p`mGv>#zlO}#3r#PW5=!cS|>HbLj zz%2K(gT-ofXBzw2>qz3b%!m?e>qL}LM_S(*|qP)bh zlD7(uk_~~^MA`jyMaOC?`JJQFINS4wN=jzZ#zkx3;rK8~mdkAs^-kfLn+D*u_-!JM zb#i>?___3!l^a>PA)ouYhS1^V?$jh+3I%(Vxyqqu)BxPbx~(Bx=ioqQ5^RnKUfDpJ z!a{sj@SNuiOraxM3u(z0!W#m=vOVt-pn8oP&JHdk`oHgqBSV&om1PqlB-{mB3Q~l= zHpfY#N-nCKHo){H+c4o_J?ZSIfK%;{!Bk@#gpYg9r52i&ygibLcyL>t+@s<4QHbWQ|t|Py4OQr+@xKC;L9736YmT?!R_CnBEVECf0E80be;7w9piX zw}k3HBx@WMKyUgAEQ#KT9Uq5tk4ffqw1YAHch3>_d@g_s->1U-FMDgx9q)oWgP%d- z(_?tl^FC_po`Cw@(h#Tg9wy3ON9#%7UIs`cxuu6a(%(<=?i#S@xf6uVw=V(Lb0j|FhSyHW zKL`P5%GkS{UbOGGTWqF2i_MZZWQO%q$gZTxWb804Vd~Ef!XU3)QW&a5-q(1NeIX8L zZupeUdD$RFm&3%Q%0Rrce5v?ojf5PKc>#8tcall7{e^Fo>Y(#;n0-l88yDIyq(S686M|bnQpPN8FVI))NyZQaS6WRov>*4duZLMNN$#Y7lyN!%(6@hf2*tz+dVk}WzunE#p}P~ zLKinUIo}LAJp}CYxNm%1-D2?zlT^|eRS&28UBm#N$eJDd>xt2w5twb5hw0glV0QmK z>11l;lyw_;9!*ErWjjbwB$7Qo7ufh^g|PVPOLVaT@Vw#&Z->ug^kfePM#++v_us_% zdT+?Bt0}n7#fc0XXAcAK8KH8&n^0N2li-0yl2hM6Zsoia+c-ZbhrWd4P^l^wR=xm? z3m1|&4LelKEfO#K{8kv{wS}FksE2-s5?IjfRYJ|H)r2k|$=<|S3SNi$i@zFBvN3%e zxold?R)%Dfc=Hf6YM;g)XrzhuSLEBzu-FD^k1tDd+LwxA7uD0Art?skd7JL~zQ$hp z_62;ru~{;v{UQBkWI?ZdSuXL-@)vELqb72;oXXYLJ7U}+O+MA{HFZy@m#A9Uke;W9 zY2~r&{NDOz`a^0AJ#@DYec5Q#jvNB}Hy{EWc*RALmVN-c5wJb~lAVS;|=1evY5*w1MOU4s>$PRJux|2ak`5 z#rqeharea`H2BL8EI;v()xY{GPJ81-1Jmur?)}f;jjc2A$odcPdJn;eqrS0(+Gk`- z<_DNPXp1;+oB>qFce3-QB5uOm$v%4%a{bDDP?V?QVPmb}!LwL+ePb6c57rPb&6xnx z69!=YuZL7MObQkzd82-?H!NNs$vQ1sae4p$aLAmQ;yXFEB(U{@u*`ZH73TEE4Z?Phkc#^Tmr)x*^#0gYeDh%>u*k^^EtkBwE9F)UHr@ zj&7EDU^Qj1*lNZUEcj#(i;ikB>$L;O{l9HYKI)wKsgy1WT4%;`Pd{V5yVkJb6McDO z^HQFlb69k9REcEn^ib|jV@3OW>m@~XBPF-0^J)Gn6??g-?R5Z=QMoEc&yT`ApBkt_ zwjEW}UW5<3t_X9K+#%WcDb+Y(1=~;UA%5Xyth#!j@Oju&QWcra=eDo!Tl062`sYS) zyQ~J!K2a6g1-Xd5Mmdqq!b}_=Je=$Hi=nzF5V!V!hc2^{z*tiov%VR!<1bf2222&N zfBp$~`m7*V12Z6Y$~I8>9UzR|ybvc2DJ9JZ$MVeF>4DtY(PUi_}&BRlOE z1Zqc;*hn2)@!ZyD!gbCP=9#!k6#adJ^QJm)eDD%-%52bc549j`HP$tU{3^s`7wyqfFqN6S?`!dt5-gr@?S*F{Hh_x=_i-7Rv~&_h48gR7uM{X z1b(a=Wg1=in9L|)WyyS~ExiaY|C|BP7)-jKoWV7r25>n=mqj-$;WjdMsJnWeIQDKU zTBd)-ua3{4U}6`!==^|PRhUT)7j%Mu?Ii4((*^0n;vqvbh+Ue#fMj_akW&{Vu=h(p zyj51o4DUI>$h`~L@SWp?t7ES)uV;xciTLC3ZY`YnJcOOTy9(EixQkj!1cr|DB;}(d z?CK$Xa#M|xJKKH8CGC$OuWQ2g52z9cd|p5z_l1fJpT(hyMnCbJW0m5cBgYFwe2lpH z?KDz7g@Dq}UW|X`M!LRNlNX!bk+u`7SaV_;Qz}_5IrnyhXzKQEn6&4UA(SP;z z{Cb^<#M6F`=)#=ad_j$c1VTsB9%mwoDHto#QL~ZsuXGSOxU13UnYVd@+Za4oH&@dC z+%ud#={sGseH*+x?T&f!&GfXwMc!XKna0Qbq2c#MT;P)lEX{|?zcC@FWZ&3*8uW(m z_4_Dhl@n-6t_hvgp-oEsiZRvWB$r{n)M4p8Oi_P~iTlq{jhY|u?DS?}&YE13xCx4q z1K{Y?Bn(-W$ECdv(Lo(ksQ0rYd~^6auF>=qjm`RFkwPbHeeVauCw_wGL);;JTQ~V@ zt|q>I>l?eHG!u>tE(7@x3$ARopf+vNFnIsQfwWh2z_9k+Y|~pYAN)!idL81xPxm}_ zXA7B`coZ%vu18x%A^5(sgE<$2ajj}BY$}Z>x#Nv+*e8KFYqlq8owtFw&!`j&42Kfo z2|r=3gE6Ws4iWBL|5_O16Nn=WJ_x6@Y!!<&I?0@C?Ic;4!d|agB8(Js*d7@`1{zOB zZ(~!|y;zM6Rm%{DwZ||P7X@bFJ+Oe};&A;x?2VlR7{t`_tBuK+ky9(u-0w;EM(yBQ zn;c1cO_W4CV;}vl;&Lp|bQW!P!GLilzMOSaRMUu@K@j9H%qpBtF?&vQ% z%9HX9x-aSAm?7Xk5ixC`76$!iLdr!2I8n2ej=2*FBV^op=u26$zm$_fM2vn(UfgKM z6OyXGohr+mCROLw;Tt0zRIzb|&%5W5N)}V!S_hPqyRRV zx#PMvL*jXK962#M7(5dXqV3jFjGAo9Ed7TPZ;S8DHLI2F3u_7 zhiB_b*1cORl1m*+^I59I*eQ@aa=OTGjJqx}U-y?UN^7QuQ%3TLFSYd5hFEsEU@))g zmLWyD%{*yD1+6STOWiejEsUQbyuM~JKRYf4Z~R<jzC&U%cPU-kHk`hCv4b|;+)JN3XGpBd-9YkxanwLp}KB zML54x=|&S29gx3w=II4#)Mk1nT}>ZwxNr&8)=ef^oA=Vh3>$Xm!VzpK8R3Wi7AIIAmB?fb@dz!(Z9UN zv#bXs`m706-MbK;C^}-t_3i9NX&DIpb6|AAP)saq#Z^Z+8Cc>30tH!SmO9X`?$KjV z6UU2_!Z(8KmvC?>^a36JOPrfBi*52%AUFAUajJL~*)Y9{q={FO^LB#1HFOKi!f$My z?obl(Z6a}6I0k**=&|IRM$9uV2l{`RB8bW|XV-o+w%;g+9DBD<%+G7l@cqjr!TSqE z^S+*-*=fGCO0AIoxqF!3mAlWQMKeY6<6d)_x)R*JYlq0iI){g=wa}V*duiIUGc^3Q zIvy*W$V-}3Xx!~*)FG#fkNNzAL_eBBwGHL*cttu9`m517uMbe=iyvWH;x&BzI~SG* z7m#RyGN10ff}9(i1@|>#$gd~zLd!Xf{Q8s0b-o{mL&YcPaLd6^D6Nf4*ojj75nF*o)wQRU)@f&Mq z--gtqiQ**>8!$1^5+8=HCixyQaOCtGaZ!zcn{QFa+$f+LH%G&YpRMbEEe*eXje za{8PM=pH(RdX~S$~TLVcLI#(56XvoapAr&@I^Z~ZPzaX*R4 z5{gX*$!NLsFbTVS6HlDe=DIb$Px^xRR;Q5ojB1#rnbenm5AH6f`*5Htp557bEGoZ z#8Zhd!qFHrdQ8}pKX$@L7dM0S+6q#TI1*EhOvs)^@uEroI@ER4Qi-|Td%7U5k}lhr zkKc@ps7}uzHc)39k1G_=umk<*mc%H&#W$VLb<&}5=o(+uSs}43=pf#W&q3)+Ilpx) zgXd3kp*ri&L%dB8o@z;_*I$)kfKdS#8cWeN>GL3ejoSbC>m&2xKn`ut|Nc~R&|oM_ zf6$0(Yx_7)<4?khgBz)l-FK?_ISDtlYjKU916(fD3|hat(;UqXG;w*zUHB3{a+tTc zxpM;zdJ&JKtTQop+E18#Ii7kv93}kK?=a?D<$%Vt)`<&!hLcnL>)D@OR-l85>~48Mtp~7L0;8fnDn3* z0!Fr0@6Jdg6P|{P-@D7RFH`T34Yp&2FJB+Sszd1w@4?;j2hYU1HDYDax?@K zOo6P96@8JB9PUbtCNHe}3%?$x!VKLO;j8T}ICN|uC!*Ow{N4qK=gqGd8OZ|uye@*@ z+Vx!$de#EYIw(<5-XR`k^#L|_ZlTTHE)uDC^LW&Z649U-8OU6s%~z^u@P(EQG=8cJ zOc>Tl6~tk*(r`GQz$d7t5lQW$4f#kFN;UU&vBJ!e)YPL&ES-Ikiz@A?$++{NXE+HD zEuMgpUwrt&`?f&-i=qD6^I3e>OLTZA3s>i<(Acj6IykDDJ0&Ae{c;dW_8p)(3aeNQ ziRa2sN3bVz2lVA{t6|#`g5HNlvOzf>tj%OSddNM8rKSY#C2OGci9f=O|9(KX_kOtU z_6P&|>I2IKcUZd4Tg*|aA#Jkr-QeMC1K&&K=CN^}CbN9VP7(VHKe`Q%T|TwEMM z<2>)ekEVT?@cJv)46lNv_KBGEO^1)2K7!uW)1af`?{Moafqma9PpYG6z_%G&Bv1(BPww{Yp{b!c|6Li~PO6?roJiopHnDO7lFEU{9Nl??9j;;qKl z#SOi+G$r0#q%dy-*BqipGd&N2`0!ddHMEOOn!)+GhXXi084Vy#4a_wbRVBl{- zRhsND{*g0267507&|Zj9oG(4$&I7)^h9mI?+<(VYiH2q) zElOSmF*~#V)hlUcLo|TjfBe^S%9qu6(M1=v$++F=Tvlfho=Mr$-+<@(Xmy?FzilrgK zj?x8m0BK=w7a!;AKjo0w$D3$iQDg0&&CjuAQV+iEzQj`3@1P^T_`}$pt1(Y@EUMOa z!M$l`*`Uj57=PFrRHl`JB+U>H)@HH_OIx@*KAz-V8G$FOlEjam+EByu_Aq7eD0I2f zL++`)!bOJ$gS~SJnCm@5{h@DgOH(?;jB$pUp<{*l1|_)Epb_1tC8E{DI`Qp>{!C|> zG)yWtf$l=r%Uc^ECLzrX)v~ACC;h7 z%aS%c!=hYvoe#L^iX-dH|)p1Z7T#1U8Z^O>dVhlfHLZyC>rL#4Tk>2=oJbd+dKIob! z{MEFe8l!H2#l59mX38UO=8=YKgD%3CL3M0JiUuFuYlpUp#?;bhJuz+ShnDtVNJ_+Z zh+db1o>x>s76*Xb^BmlFYbg0SbsBMq91AAv1MLio9s`*?g*n!>fO-BZ+!&?LE{}fz zF?pxi;_ftzt$hZqwiAfT-Ug=a(8cy9g<<6G0ia<&oO~+3N~-RZquJ98_APlR`K+i1 z`}ijD#ocFwoBInuKlQwLl5_Jv-Vzn$JjD^oYIJmP3r(`?CFbpVxL}MJ8@HI^wVC=< zJ9H#o9JG@=CdXsz5%v2w6k5e1i_Q7Z9v=C0mjd2hrP1?kXNfKzzpj7nN3}Uv%qh;=JF*hXa6H4G!{mZ3@G4wN z7`J^9T2z~Xvh!k6tbGP<8EK;BmlE9Ha!go}D-TspdtjQ=NWrJ+bIH*Q$FO|XaKWX~ zH=w`K3Uta*K;h6zB6z;IZ%vURDVBQVa-uc!ymy5)7G(+(qN>R)eU4+hI2Y(gQsoL| zdc?wmPt&@FwcWA}j)#l*p}Y(nIs7uU)G2}~WtL3Ok=N{Ggv0`fC{J2(d`V~h9~zFKHPN9pC#3BHanV&@n45w36wqor|jkk13SNB@_)&YpJqo~OpJ-| z_}y6U{*gTk*vZ_M-yvPDeYN-pRbuV(zL<7K8nG;2M6$Olk_R1)ILdA#S}S`&VB$UT z$tVq&FlGzHJ}U)b$7DKrTqLXUnazXc%=l21Vro_Kn;h?+Lp4X7=EZt;h}KuQ>>NGf zFq}Y9wwie8JX>-r=r7It)(L5oy;;_~QdX7rl^QPFNG&=P*dyM}izaspFP-~Q>%V_4 zzCQT_HhuqqQQs!v@1uFBoNWrv=2}u^rEqSf<%oNH&ccvEp)6gfNn`x{@X@ZLJn;8D zD3f|jxBgwh<==PkxpQq$SaY5FwhSV*q4pTFECu&%x5w4CV<7L(M>y{A1Ec&~xq4~@ z*594+z6c~oUpRg9p9J7KtsbCShc2r9k<)dZnwu` zzP*Gf=cQ9!&GW=`r5suY^ny~)J5bNs!)A-FVwhJi%71mnktuiJ)T@L z!8^nr`j^7=HuTwczP7j&$Kn!*A)dS@HPEA7FCy`6CIz%VlVx+ZA9pGI|#&*2lSTJhwN z?R3bG6k)a~70(-{p{QF0lI|-Jx~i1~F6mEdGPYuRnVk5=mv``S#~7UMl8&8*iy%UO z2n-G%2Eo5y3rE>mu*`{5#P97-2#??L11-5YH0*nCUH3P#424>fe)$;|jMd=-yDt;@ z_4Y(V*h^jQUco;5S=bl|DMPzsHdvQ_`*J0={i>>Mu~dP0%RJ$NT>;$Wlb_Jnz8@WG z*2O+VedF@;5s!q_kq>ujVB%peD9CK!yg~Ma4~7H! zov7ZhQmoKj45tOd*`g3XJb&XE3|zMnidPXPu^q}bJ(guBn`6Oo+di0g{|*jb?}hT- z(@4uzYqH9;kxB26W*Zb*NvqT)a&rM^h1xG*jNt^X)H;J7zE;D7EY-=!efOa8XdIs< z5VKXAOKHa5`7l5}f-9Gb_zoQxlpj_^=k^J5OYSU%ta+OB@Cj?K^k+X`TGNIy$5LoO zcPu}4_Bs5K1XFdRGVyM$CaxD4Ni{z#fy)K0ROUuMOm2!o(QJ7t^EimTZ>-=JX*-$G zizasL&3K%-?glP-V+Hb3Ib>2}y71AvUsOg_K^)QA%gqJWY;TSlWDzOhf{rfy@O>Qb z*Z39csSaFQlZLs=t?}ZNCh{yKTkz@6Ae^&w4yB-d=`GEWFB~e+vLblKTuU;6G%hIszEMul^lP+HWVFA51kmD}IxybsM}n$2STZJUVYJ_hLZ zSR394ZG=l>AF#)(Ph$416v%uLM*I0+#rl*4K5(%Uc<$HGg98Om4#H2$HF!iGv7Fb4+C-b{%FMXWN*DBv+4;9Z)o2PF` zmzxEY-i^db*I&TeLRpAzHNs5G$GBb10v?5KqQXno%=c9lS2`yTdG$XaPdAUmIOllD{F7k9+c zV#3vodSLIdBB(6-^N-_4zlI{*Uvv@jGfSxaV=_JQ zsW@k<0;yX26UX-}K&_y7$lRh%JiOwusj(9UN|PbiK$=*e)WB?40YB-Tg7LTy25b_M zy{cB&87_-&pJ-4WF9oW)(v#gv?x3?acERqw`}piNvEPrlxC(wuu- z&b5<=9NY@!9`#ghWe{eCwqQctOsetB8g9&R6>in5!U|O>@>%2qkyZxixU?NJmmFvJ zCcR>BR_}sRqi|SXBh4)ze&$1?JRo~l1UzYdfEfjP7@HJL{6?OHr+xa7m@C!n*pON1 zwe=kF-2G9gQgH_wwZg@NXUO8w&J?tHxB-?sE)b`-bfEl(Y3$kIV&MiyEppmX1Db0m zfqD0L%r$a@;N3-Z(c7t*XK@_E@hvE9D~B5|{@<>nk%+NUWL9CXFKPcKrv-~ObyT@&Mi z%kb{~WmM|+ZnT=5&kd^^Q0c#^WOKE51k$k{szs|%<7vmvr zqb@||DL_&GSTeV!mPx!H)c%rugI75%WP9B+yfH5ybek5#_OFj|&~07zsHhI%*Dq>Q zIGRq&(-Ypm6ho)3AA()mD%ndx2Q~hXCJe+}m?Zo}l{Zd+2YtGj$+H;2I7Pr3ecw_maZSK(?q@i!Asd5kDEA1I7B6prWjk3i2*c zRgG(Su*L*s&rB2e6=ZRv6}O=xwU@Pd`k}YZVoWN&N_9h4Qp30--0}Ph^k2IXzFo-$ ztyQrw$Nn^o7>vAV{A#wKV-k&QP)6N5`J`)41k6hM$)(hN$hEc{IxlD!SG=vn2R<;T zc2=(NeE(wh(fI~fH`OB_1`eQ3=cRF`$!BbPo5c)00fy~(g4;`?&}sN?OtHTR!#B%7 zi_LBHao&KZZ&i`ILp9;fJ3T0FYDcGY0XVNZj_j!!Kn+$Hu}0tDe5kNisOWT$S`#^e z=XwF24BaX?d~rI+{IbG10p`Nub~TvR^c(c`#u3rGX>jYc5*+Zq&$3>4;5{2nTykUs zk-oA7BU9(&!+HVhU|T_Uloe{c{SPYotrV}Y9*4Eg^N8PvaI|f1hCJCs8guCoX6)4G z)=h5EbJ~*H$XG(r{SH3d_YV$vJ*2kE{3(@}|43y-pU3(c<|N#$dVwt&8}XXvLn!>50OG#9*X2nP#s!%` z=$pL|wY&8nv9ahaGG!m=UB&~|(rYj!Wd#(T42)D{iM z-=a>9rpH0#_AW?`yhu&_&BTZPO29`k8hOZI(A7u--8m5$tThnC@8U83vjVF^6D@s9jMtZN?&asfVc;38kLqo4~{Jgvh&9_nE2A`R~rdSK}6-(0TV zgS4SN> z1(i+#B%}k2k@a!_BJ#qPK4f?nAKflFBu+_~%pwNt%3 zD!a;K%(vp7xfRsbHJ4eopFlb9Ltv#`3Ob(%n5Mm9?F| z#y)+t0gj5gKn;$mLT7FWR<7xfh3Pjz>99Si8IlG=r;bMa>&;~!+QKXOJQ%2`%&i)X zK(57!E}nM=ntd&>Zef3{yfGC^?~Q`r8?O*nzQ{cweWD$d??T}VDrzLfuhVx@Q}YI zPA(aUTEnkH#Pug2o3F#R9n!*4Kc_&O*K)F};s&4cK^@BEt*PB05pKE@fIrv?@#lgN zDzhY=JntCA`xlJBB~{hrT7n@AmW_n@>ypW-MRiya@6KX7H-qYT9h5fdWT^$SF#4}4 zMh9?!Wud~XFZwu5*AzT`W|H&QfI05)6aIa$5*u=-_5B+3m))N_0o=Va z^{x_(O}|CB{0eH^FAjg5yMmY40=OJoNfnd_VfW;L_$XaYSnd86=I^XUsS8`!%e_|Q z_{-zsvX_@pJ1`!n%v53(26yqu;tU*>yO@;RHf0wsK4&uS-K@G$gMC|f2Tn-uV|yng zFrDeA@pPpJ%KVCC&(igApi4N}JE;}i{Lf-s)nsyiw4v~0$Q35s{Q?%ce89yiVqDR0 zKZNlPs5?50%j`IS>8E6bm-U|zrY^vJ&WWJ+Nu6mo#0V=#_@bq3f0F;%k~GBIk+AYt zICSBB@`I{^Nx=oKa94!GEra2&uRiKUf90N&Z@|$lrf^ou0w3&Hg1e`Wq4N9lguOo% zg$~~S!q!~vn6JQ57JKXx z7mSAL^g4Wk2&AhV2?*A%+NXmk8Q`pg8FD~?(m(RpB@59XC{$r z6x%0RevPcNHeE&=`UDB_lPlZ+bb@UL!$M)`%*^vx)CA^iiB ztBb&)Z(i3#jP)gJm8OC2xDHI1DNVj-hC*!iRJ%mS{g^zaM$9g5hcbl;WK8)}uHteT z9QKxjnSLWN`5uQ?%z`j}CZ(#M+iUfvJ;iRrH+bsM6F5CY7N#U;q0`kK?0;LHe0P!s zP4P?iOlvsWKUV~a)h?8t?!m4Z{3XxL%3#j+-r8FE)okb$U#jDH77b=alj93_kg_cw zm~?Ni&|udmm}gQX3`k!q{xI?v>q`-d>8(oPp$3X$?pd+=7EAKB%|Mu6)EBRKMW9v8 zQmPqv3sR%Sd`H{_)@xrvH`r|ud*=Fc^YaJr;H7dpVo0^{<7EZBddC2>m9N32=T}Ic zk$>O6C+ozQj8A~)2R9^11PvR8k>GoQaN+Z2@elfdeB8sxz54ay@Ey6eO6Ode-uiIT zEH#`JznYG{vvNUmi?;B#-fk>5dJ1N*o{7^Q`w6cOlhhs<^B8CKpM!yGy`bZ*6PtFm zhZ~ReL(OwX;qPJ(7NM%e2R=Q{buJ8pnYXP$6z~;Cl$GL8 zBqSZX*u_z2p^A+lwTF!{Xwx=~vRMX^Z#p3HtPfg*{l?etC|GtEbhR zJ`L5Stt_N1gjp+%L7r zZ%3^O{;;>l3Qx(Hqq*%E@}I(5GD2}6PL9+R=X?^7(FIPBIV%!k42w~5UI=Sx*M$6m z+Au7%0r%weahZYR;Hl;dI8ar9(_Tnn%>9cna{o&p)JuG7Y6h0c4rTIdYW}Zcv+;#G zj^j8R?jpu1%tKU4#ir)r?)Uk4h*c9pF=`W5sbQq1s8mGch{GvSX;L{odiMK#Pp!5L zg*=9-Y=q1gTSF})C2kEcf zKy7fFlvWBRJdj9%ozw6~&7ol?V}j3h6yGs}Rzb&^<=knO9$3}##@h|;d+V9m({k3@ z$YbujBhsND_Em9_3DgQ0t#py7-aVImn;C(-wY`!Wq>=iGHfA@FS@2=z=>MD6`)oyVw?4Bs?Z(s# zOZ0hI3P~HraHrzK|9=j}7wqR`!DBRYBZ_>B&T=)yrF?1o70JSR1)L~}reiU&)K^lB zqKtXW_7t&|zH&6brz?4DFwGoBJkdiMhq~#JlvO8#$&q9zE6-$!At}(L8i0oSdXiUP zWhMbB7!L`1$N*PJynFrq#r+ zt1_alP<@p5!>P^tI@&C^ zIcp|=61T+~BaAJ1zB+@e5mZ4)m)7jzW3F29akOKsH#!NQB|X=s;WjEwYSt5V~iSOOvYp)A|fIpA|i>1{7*y@ z5fKp)5kV${F(zY-G1;3=Rh?ATaa0{u$LqT4I`cY?*LCK&?rZu!&wbZ^p8Z+h_51$T zTF|t0=&Flas405|F48a!`xS=d}@w;e%0r?>F4M7neQ3p%Wz77@5e7W3FRKX zB$%@ezvSeb65@z>3c}ZZs;twx5dFDmXOM-8;C;UQ0%}*~0zj;mbi+(rw z?k^e<_V5>dwLbVI9S<0Ozv!@6YkuL|uD|#ofsfZO`s_b{`I1wmqe+FN>|0V4E11Z^f?P3aXco1wazyW?|I$`uVYw~vs z9bjO=HJ~fOCCzZV3$z zT>B1ur*axT6E+7-b$EjB-Q+;$qDFw0_aDLj!tbHHbN>otFUsJv)vv>Tc{kxRwPyJ2 zheT-j!apG8pf7wzmIb`~bbC^q6P8l2TMm6R{df3-`{Cf1-ACZt(NjS7Rt@<6Tr$8Z z@c={0Q^A10{R`-S=6m?{PBwgIG8lUMKjYyyUaf@MtQhdOjCbIWA6&uw)P6Xk_(Q1U zVLy1*hYd%#96;EJWBA_0o z=W-*QTyPdhT8M&U(w=~R-{ycms&|3G)C?f%<8ENSI2QWylVzwg`Y|9pItRY>oi8+6 z`vCgeh81}9l@olkXBR$Ou9_SOd_Cn&0t$-yO#qy_`p-aD-80btFZG;<$qz>UJo(1TCUoPY zd;q-g1Pt>YgGvK`2m4)~g^oT}z+u8aLW)fXaG~tn>9hI-es?h*d~NJE0OwEf5F+Jf z^3vP6(8YpXp!u}VK}HM|mAntJJ0ajd%6cFyQjvz_&7rfuO8cfX$Y_LsipBpzpN-;HOJ!NPI^H z=~90Oy~TeY=$Z6~22FQT0NuruP!A(OVC(`s$`R1s(g(lx`*(nlhC0w!CkJYtEWq8$eT3KS1BCI9((DnsN#C7BqnM1J1Ou;mE=(P|Oowh!}PWLW$}j?!`5r z*5&6ETGE;U`{6sVuYWM07+wK*Xa5Co6rd;1zg3ygx^7-wQ@K0z^a`~@-TN5 zoO-Y52++ zvr~}APrqkDI?E0B7upbah#hj7v&pAJgUvXfS3IUpU|}j|qc@E15BzWK=@+z&?gO!0 zvD^gH+^Oc@Z=jBPK&s0R1}>*RS7g<&o@R?tMzc8KNs`1+gQ6dFgxJ`cj8BHUjCb^s zBPmi9Craa4?mCsyT4A%dJx1>?i~Qtd0M)vL8zv7oyR}6%2G{zv=5gmA(6kFRl)=T@ zJ58}{YM->-nDSifcoHYXqd_vIBT{mF;~9ZP#W+yNz5K1q^IuP^P=csjAGO)Msh$h7 zH{|A~X>;E?KzVbVrioElzD;J!XLWqsF6gdI?Y35Ie=-_5^}iUBnDiV(+JML76UJ6M zmzyYNvD1s^`js?{EUn7}w|+gBdGznQAc$3IqW*$3S|W8d*5TDouZ(d zpL1AYeHvRH3wYfm*fv<=izjV9W%@p?nB|y}&i2!#{`cd!wz8A2Y#38QTGEaH*+4$8 zWv%_3`_PUV8_O8kP;qX=)L|9WPsGZZ3a`OnHXF4wrIAM8auhlWl-jt$7z(m|ef^HscbrNv5CLw zkj-RgP#5pc(DFWZVPUGsxI^pJ>o9+et&*8$|2Gq4UQB)~|zS_9e>y!7cUta@M(`otuv0FN3#B3R&goSV1US;rUu@&YI=H%=4G=2oeDfD_sZgQzk z#6KsUG3Q?H> zDq#&rH(bg1)C}!&$GR5N=jpf!qHHTO5;OZfVRQtE%yqMP{lOh+FW5HQfAG_p%eQA( zcjDXCs97PpcjL+?n@yM}tP5f*_qsAJSjwZyo@d&G3+VkipVqC8^_Cc_4_%kB%}LHN zB&U5!W8#@h;s|V#Qr~I3;S^*jm&Sc=d-uB7vWgOGqj1>P(KbYJ62sC%9g}`+WUMuy z#R)eL(%6rcqF~fX?eySCJL?v?XtxCgZ+@O$ByCKsG373SPBJYkyxn^GMcnK2={lyT zDLjV`^t(-Y4ziW}C@@#ncSO_6gRV!F#>&lC(6?+7AuTxHP|W2laQa9l(KL0USIN-S z`(D|Qq}@C&Ke(~SHkFU)vMNyD%yE-yg$z>_x{Rit70DWOE!ln2TN$Dw6rB=K5mw{d z9L;bWUA?uV4wQ%G1Qc`H)gmPkQx0pDzKNWbHGx;veNTrR#SSxELxN8 z;J|oyY7{Y|g}bS~i(?wU9bI}Zbv-++i6f`S5YKA4;ng07L@TLst39X9qeUpm9^9#C z6eBx43jG;Qt*wU8luh#%THDu!EIo~$&}ZQ!$c)$1r?+X|`Fx)K=|SfTcDCQ`o=oqa zj^mQ5Jx64zGWPgrNSkL}T&a93x`iXp_d=62B*RrpOFTGMQQl>S4AH9(ryJ|>b88CiQwoM@YIAPuaT zWiCn*C`WCK8=Ubq3|_zxU<91f0LEB5tt*P^)$J{v~vK8H&!KWO7$PeU(P z&-4g6W@fS~-3ZS`k~7KUB;_~pvW-%bc;hR_GJAg${+>%b406mhrX6tOUg?uL^r#Z`SfHViC>ZGJli9?{HYT( zKaRa~=rbSuW`phAF>*f@r(L{;lZ=ur41SlG659^rWQOBhlHx`AHgAbHBnW*N-MZSP zviRw9wK565FhTBZ4`vN>kWVRceS?#mc5fy(w$@6YHAS}s6eO!o;Ak_we>H93yIHcE znNzr>NKkGt!={c$v($bXqn;q2|BS0}QtVZE=5$Jamr6L?d{itip_BA<8f~l6K9*VK z`cqz$Tlb+LymwZiVu)LFDx;|(^qoeBWQpX#GLVi)E4&&5O zyBW2(;Vnb5jKEzMc$Wo`MY_8&v^4WjqenHSJ-jZknZ?TE)3hsBrbKGSikW_WzR*YYEX{`X$F9!h zF%k_V3BK1)8z+pqkw0KG9w05W6@FC7YURi^x4IXdsj96Eb8jxQ@6t(4NT!z{>55xD zqC+Jck!58VR*02gULs8fBQ1F>Q?L8lv!)%(#&B#ESwpt1G#_H72Yrc~W3il2^(ZrN zaDg_{&LVQ_?Btb39Vw>PTenOfpvz2w;&CIgK2C{z@SI||x)*3VY`4%fGB(g0Zpf02 z$+zukN_TimnxpsCV#Gt`=#u;=aTG3pu08tcc9YhUMj;G@RnK;;qa%m1M_}2sbe%ME zUzr?6oRA4EyN(6cx-rHQuU+q>Q4tl!TTV1qibxBgouKFIqgy<=s1n-P#OSy&iIO{K zQ_i()nYPQa#lp%yroCFmp(!IN&jvG_adp;45{2BlTq7-uCj`olnQlUxa)!5@HKK6H zx4TBKklU2Vr5j0U@mDN82ok?0pqx~5R6BiL$%-c1E7Pxr*75UPMf#6?gzWQpMc~!F z#;tlIC#oqD&8-`5iphE*T)(;3r>coiB{U*?{l9!hIxLHB^O79W@V6O_^zsBu94f16 zg@r|qmTE;=oawRzMtJdDqqk*+c*2~rVwKXqbRJ2(hMueUrg&b<=g6)Osq;QPQ6aN+ zTAK*dmdTv1$2L6YzVSRfmCE*X)?8g@#p6{FmvFXQhr3iqAaLkY@J z@eCW?f@s3g_et?K2bWm2Mv`lzZw-^|xeTmf!-q2t{&~CRL=;(=P{$q|}Lyd2_OPgr8$D^;p$Gb>`x24Y$oCamXB! zBLdr!M|W@Vss*(aQBa+Uhb+w#Gx!I0Gf}~Jcbft^v6?*PagF_vS(@8wPnkAQ(bCK7 zlv&K2mS1X?gfqwWT+AkSz&7+OvP*w2(L%t@w(d|Dg=liJD(%+(;QqHp>*`&^9ba+M z9cR%q$|em-7c%w9Y*9iLs$+cl(# zjeVOVuvf(=rP`cOdktblg%s#22fr11I=C8I2YpA7&lN zlle$)zF@H$rPJw+7lv!;`3vgBhBO6AAKN%$IJg>7H-0OqjMflPND-IEb?qvGdS}QQTd+8`lEz8B;oa!@iMbSGqV_&-x69Ded>us;YEbvmO-WUuO_oYo z?PgbGD_uQrdtSm3WtP*ML-I$A93Gvj)F(c`nO$pSZ5zfpnrH23)A8vp6R#Q5swGpy zWA|bt;*JpF;pr}5INuY?VWf7f-FK}Uv%X-Wt$t;CDuTN+>?RwbkB%R;9Eygdsnr?f z=wh9iUp+M8RC}4d``{dKWYf?z_nFX3wwWaF)4maqwNeJXm7 zGh3ppHQ(N)Y*xCPrP;gvNyd4#UzOoUbN8%rU$tjJUybctR&Mtrg<1BQj)Z>ejAvs~ zy@xcKx?P!wLCC2{`RPBpvSo!fqtGF><%tp$-PxPX!;dU>ihtzvfW6jEucqf+QjIG! zv}4XnC3qGLT+`Rh60sWnFwRbQ(iDtd4`z5Br7jV>S?8g&7CAeE&B^LTDoUM+dO=22 ztgFyM_w;AgDw%6}-c>*D(De~km|T3zOqFt?I43fyg(IYVK0e0aB(a7#yDe+HlL~U> zlrc~jsh6=S9k^OcI$rAX*+Hk1%hiWgCR^4ULrls6)c8yby=hFb`7rKbd{2(bpbDXc z&^fF)-ij)qk?#mL?ZKcztX{Q@;`4cd9Ig@394sTt;;H;XDKE~zYST~+9107MUMM7# zY+l(Ly}&~9nj`y%^Uw@Z8dgttKUslnGI zh=qNt*9i(WSE<1bsv2;5X{UzDVZV_1b$NDWx5}AtyRk0wmUkP9Ka{gmIVz58j>{hE zw~NuAMKk49p|{m_>)j4oEc(c15}}85cktXi3G$9ckFBRktZE~hHnvX+Z6wl1s;0?w zJ(_5jjoMvC23kWFbi#zk*#!IjMWU}h@cY&zxSD%>+s9>NLXZ_0v^$i66?cZahexjpccKvo8B zI)C0EuBRBy!U&Up|4?7PX+ahyFt;6+p_z8n`qhXsQo}&Q92Z@U|ME~X`|U(V=pW{b z8&$0`$AU%M=vkR;9D9o z{7g!O0GXF4+A*2+Aw<8SKtaZIykes}h68F@EeQiimY>?!vP10S?N-@&n+1e!Jw2J> ztT-k|)od$O#>G->?+hlPXZIn3YlQ+S8Le*N2s1X_zjVHMg^Mg^=w>wo?CI7(E=N40 z3dbcW+<8Kct#!l@Aexo0Se%*+j>fQ4f|ZAnXB$I`cOF{U$m*jBt!zVy9ADIM>vK#d z3%i3P2)ZX!Z}1X}=NgcmrWztMnl>a=vy6I=#vlz|Hr;Bq9*6?uI72$c^$QG{!61}p zbjDGMb?$;`YIF;Ws}$uKa3v_gToY1>=lk_6tCpL2s3?HSPi~0QkbZrvHIF`1ja#v%&wd71L;m4xs+TJMcu&qvG}E~ zy!F-~{04ieUR-7=MWm;SRV)vFYEwLIK$@#x>qvXFZ7?=^Yi89drfbt?^+cmP$8N<_ zVwlplk)pKE$W*hDjAB=FJBDkW^%jNr@f5<+>=fly_=~j`*TQGDdllLqHPZ5cULJ2z z_9(UKR79y)>oy^h6If7W=n~ zR*C9LRp|&RtcW6P--n zT211SDwKRObEg1BPetW5M{r+MFV(E%r%lgF;yO$wac`<7Nth%UDB*WHi*xl3w1MMS zP1nTsCrZ-Ck+hIjF*~a=qa&m~!w`2ZtbGojsTw9drzO%jWRhZubV%8(TeW$yrpwt+ zRp;mUgqloip3tO>Yr_k;{i&*iVt2#LZ5LriZCgZET91ASo_6CsBe*dLIy zpnlP9OMl*XfH`c*pt~sDn}T`agD#SpI_@J*K0+Fl7u3H=iR#K|%aUbu__q#g5PVm) zS?R`=cgxxxI)C+)4og)Rj8(_W!IrpMf|#%J6J*n!>e;p-L2l)&&W-O=9wDA@48&p$ zFT@~yul=~`WMF{Asljl95Mv@DHJk6nb}_oPCh)UIhXfvKYu^r@WXrEPsPSWka?EO0 zOD-wI=3BLOU)87-o0{Y5bIZM$nno<&wcLk$VAENf^q(}7Ezz{y_Wef#dLNx!mzL>LdqU?(hjiPuhtheOZ~sO^ zI%!2at|YQN*@!ESyK7}unz1a3jV?Zs+N(WoE;Qyg=$P)GYR3A?Fx4^Fgb$99`o`$y zIrI#7f<&%QKZu)%T(+H8Ll+C{hxIb){P|t}G5-UCk1B z+~x?##4MwuB}|LK3oxVovT1;vXxXJfX|oim1Yl?Mv*?v7SljPrbHUX+UTa8FFj z4w#k~88B`#GM016n!8!3EGYWKEJ!O(y5gRL_(~3jE|t#Mo=&^j-D3 z#@HNRtL@tt#PibWf!z^;+1B8cDBFxGTbB z5^p@?&TtSTZg}zoUtJbEsxz{eb33zH-Qpt1sSRK!$lUr;%kfq5RPDpn%814g!BD^O za^{G9c#Ik}8Z?NpjCZ9yS&}D}t9S{wb`^%pxh7Y9h?&q7D$8o0BB{EtlAv0Drf>Oy zd?}yGBia0$26*1&1o{cdfC$C%`DzX@m? z&JGEZb6Cp{(kSh0!q!nA|(Grz(jgtz8UOV|xW7RyR7xnSy zY-6`}RM}W!Zfbqp=h>`9t_#D)JZbi1CiAje40p^p7lEP42Y0|vt4G-OSVNsKWrdv7 zl6hmke5}j|X}4FSn`r)lO^4ubH6WFm<~`JLHQ13nh9l+= z1vA`;F6x6O97~_U9+RQ-M}zv}WGJ1jc2t)piWP2-Z+5Gjr<)kn*}d6Ums_a1>|r*| zMj+O2lOi42HacdZs&B^YwzUZ%byQPW2GbBTUq=-Y`&}wMy1Yh`E5LSnt7pHAJi*bj zqZDpj;z-cvedYP`eO9(~UXj(2Rtt)qxA9g(`H>bca@A-JNP~_>(Ps4^$?*eXrN-gK z7K(jk8G63N)Zic_akE>vOnwEfjZvbeZ&_q0n5{JHJ7CRFwV7>UMQG<}a{eM+IbcDD zn(bwy)?~h?7TbX#xqnXKZ_#5VPU#EH4r{5}QGvX>#z^N{diI`ZRe0f;#iPlM@mxa{ zdn>hEkD3LpyJfg4igqw!sEQ>z`Ek5)tt3-;-|D8f&+z!g=QE0I3Vfj~U8|IDcCH EFW=h0;{X5v literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1_mlgrib2_ieee64/Makefile.am b/ifs_samples/grib1_mlgrib2_ieee64/Makefile.am new file mode 100644 index 000000000..60c408604 --- /dev/null +++ b/ifs_samples/grib1_mlgrib2_ieee64/Makefile.am @@ -0,0 +1,272 @@ +#This file is generated by make_makefile_am.pl +# DON'T EDIT!!! + +grib1_mlgrib2_ieee64dir = @IFS_SAMPLES_DIR@/grib1_mlgrib2_ieee64 + +dist_grib1_mlgrib2_ieee64_DATA = \ + gg_ml.tmpl \ + gg_sfc.tmpl \ + sh_ml.tmpl \ + sh_sfc.tmpl + +nodist_grib1_mlgrib2_ieee64_DATA = \ + GRIB1.tmpl \ + GRIB2.tmpl \ + budg.tmpl \ + gg_sfc_grib1.tmpl \ + gg_sfc_grib2.tmpl \ + polar_stereographic_pl_grib1.tmpl \ + polar_stereographic_pl_grib2.tmpl \ + polar_stereographic_sfc_grib1.tmpl \ + polar_stereographic_sfc_grib2.tmpl \ + reduced_gg_ml_grib1.tmpl \ + reduced_gg_ml_grib2.tmpl \ + reduced_gg_pl_1024_grib1.tmpl \ + reduced_gg_pl_1024_grib2.tmpl \ + reduced_gg_pl_128_grib1.tmpl \ + reduced_gg_pl_128_grib2.tmpl \ + reduced_gg_pl_160_grib1.tmpl \ + reduced_gg_pl_160_grib2.tmpl \ + reduced_gg_pl_2000_grib1.tmpl \ + reduced_gg_pl_2000_grib2.tmpl \ + reduced_gg_pl_200_grib1.tmpl \ + reduced_gg_pl_200_grib2.tmpl \ + reduced_gg_pl_256_grib1.tmpl \ + reduced_gg_pl_256_grib2.tmpl \ + reduced_gg_pl_320_grib1.tmpl \ + reduced_gg_pl_320_grib2.tmpl \ + reduced_gg_pl_32_grib1.tmpl \ + reduced_gg_pl_32_grib2.tmpl \ + reduced_gg_pl_400_grib1.tmpl \ + reduced_gg_pl_400_grib2.tmpl \ + reduced_gg_pl_48_grib1.tmpl \ + reduced_gg_pl_48_grib2.tmpl \ + reduced_gg_pl_512_grib1.tmpl \ + reduced_gg_pl_512_grib2.tmpl \ + reduced_gg_pl_640_grib1.tmpl \ + reduced_gg_pl_640_grib2.tmpl \ + reduced_gg_pl_80_grib1.tmpl \ + reduced_gg_pl_80_grib2.tmpl \ + reduced_gg_pl_grib1.tmpl \ + reduced_gg_pl_grib2.tmpl \ + reduced_gg_sfc_grib1.tmpl \ + reduced_gg_sfc_grib2.tmpl \ + reduced_gg_sfc_jpeg_grib2.tmpl \ + reduced_ll_sfc_grib1.tmpl \ + reduced_ll_sfc_grib2.tmpl \ + regular_gg_ml_grib1.tmpl \ + regular_gg_ml_grib2.tmpl \ + regular_gg_pl_grib1.tmpl \ + regular_gg_pl_grib2.tmpl \ + regular_gg_sfc_grib1.tmpl \ + regular_gg_sfc_grib2.tmpl \ + regular_ll_pl_grib1.tmpl \ + regular_ll_pl_grib2.tmpl \ + regular_ll_sfc_grib1.tmpl \ + regular_ll_sfc_grib2.tmpl \ + rotated_ll_pl_grib1.tmpl \ + rotated_ll_pl_grib2.tmpl \ + rotated_ll_sfc_grib1.tmpl \ + rotated_ll_sfc_grib2.tmpl \ + sh_ml_grib1.tmpl \ + sh_ml_grib2.tmpl \ + sh_pl_grib1.tmpl \ + sh_pl_grib2.tmpl \ + sh_sfc_grib1.tmpl \ + sh_sfc_grib2.tmpl + +GRIB1.tmpl: ../../samples/GRIB1.tmpl + cp -f ../../samples/GRIB1.tmpl . + +GRIB2.tmpl: ../../samples/GRIB2.tmpl + cp -f ../../samples/GRIB2.tmpl . + +gg_sfc_grib1.tmpl: ../../samples/gg_sfc_grib1.tmpl + cp -f ../../samples/gg_sfc_grib1.tmpl . + +budg.tmpl: ../../samples/budg.tmpl + cp -f ../../samples/budg.tmpl . + +gg_sfc_grib2.tmpl: ../../samples/gg_sfc_grib2.tmpl + cp -f ../../samples/gg_sfc_grib2.tmpl . + +polar_stereographic_pl_grib1.tmpl: ../../samples/polar_stereographic_pl_grib1.tmpl + cp -f ../../samples/polar_stereographic_pl_grib1.tmpl . + +polar_stereographic_pl_grib2.tmpl: ../../samples/polar_stereographic_pl_grib2.tmpl + cp -f ../../samples/polar_stereographic_pl_grib2.tmpl . + +polar_stereographic_sfc_grib1.tmpl: ../../samples/polar_stereographic_sfc_grib1.tmpl + cp -f ../../samples/polar_stereographic_sfc_grib1.tmpl . + +polar_stereographic_sfc_grib2.tmpl: ../../samples/polar_stereographic_sfc_grib2.tmpl + cp -f ../../samples/polar_stereographic_sfc_grib2.tmpl . + +reduced_gg_ml_grib1.tmpl: ../../samples/reduced_gg_ml_grib1.tmpl + cp -f ../../samples/reduced_gg_ml_grib1.tmpl . + +reduced_gg_ml_grib2.tmpl: ../../samples/reduced_gg_ml_grib2.tmpl + cp -f ../../samples/reduced_gg_ml_grib2.tmpl . + +reduced_gg_pl_1024_grib1.tmpl: ../../samples/reduced_gg_pl_1024_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_1024_grib1.tmpl . + +reduced_gg_pl_1024_grib2.tmpl: ../../samples/reduced_gg_pl_1024_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_1024_grib2.tmpl . + +reduced_gg_pl_128_grib1.tmpl: ../../samples/reduced_gg_pl_128_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_128_grib1.tmpl . + +reduced_gg_pl_128_grib2.tmpl: ../../samples/reduced_gg_pl_128_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_128_grib2.tmpl . + +reduced_gg_pl_160_grib1.tmpl: ../../samples/reduced_gg_pl_160_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_160_grib1.tmpl . + +reduced_gg_pl_160_grib2.tmpl: ../../samples/reduced_gg_pl_160_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_160_grib2.tmpl . + +reduced_gg_pl_2000_grib1.tmpl: ../../samples/reduced_gg_pl_2000_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_2000_grib1.tmpl . + +reduced_gg_pl_2000_grib2.tmpl: ../../samples/reduced_gg_pl_2000_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_2000_grib2.tmpl . + +reduced_gg_pl_200_grib1.tmpl: ../../samples/reduced_gg_pl_200_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_200_grib1.tmpl . + +reduced_gg_pl_200_grib2.tmpl: ../../samples/reduced_gg_pl_200_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_200_grib2.tmpl . + +reduced_gg_pl_256_grib1.tmpl: ../../samples/reduced_gg_pl_256_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_256_grib1.tmpl . + +reduced_gg_pl_256_grib2.tmpl: ../../samples/reduced_gg_pl_256_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_256_grib2.tmpl . + +reduced_gg_pl_320_grib1.tmpl: ../../samples/reduced_gg_pl_320_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_320_grib1.tmpl . + +reduced_gg_pl_320_grib2.tmpl: ../../samples/reduced_gg_pl_320_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_320_grib2.tmpl . + +reduced_gg_pl_32_grib1.tmpl: ../../samples/reduced_gg_pl_32_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_32_grib1.tmpl . + +reduced_gg_pl_32_grib2.tmpl: ../../samples/reduced_gg_pl_32_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_32_grib2.tmpl . + +reduced_gg_pl_400_grib1.tmpl: ../../samples/reduced_gg_pl_400_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_400_grib1.tmpl . + +reduced_gg_pl_400_grib2.tmpl: ../../samples/reduced_gg_pl_400_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_400_grib2.tmpl . + +reduced_gg_pl_48_grib1.tmpl: ../../samples/reduced_gg_pl_48_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_48_grib1.tmpl . + +reduced_gg_pl_48_grib2.tmpl: ../../samples/reduced_gg_pl_48_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_48_grib2.tmpl . + +reduced_gg_pl_512_grib1.tmpl: ../../samples/reduced_gg_pl_512_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_512_grib1.tmpl . + +reduced_gg_pl_512_grib2.tmpl: ../../samples/reduced_gg_pl_512_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_512_grib2.tmpl . + +reduced_gg_pl_640_grib1.tmpl: ../../samples/reduced_gg_pl_640_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_640_grib1.tmpl . + +reduced_gg_pl_640_grib2.tmpl: ../../samples/reduced_gg_pl_640_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_640_grib2.tmpl . + +reduced_gg_pl_80_grib1.tmpl: ../../samples/reduced_gg_pl_80_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_80_grib1.tmpl . + +reduced_gg_pl_80_grib2.tmpl: ../../samples/reduced_gg_pl_80_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_80_grib2.tmpl . + +reduced_gg_pl_grib1.tmpl: ../../samples/reduced_gg_pl_grib1.tmpl + cp -f ../../samples/reduced_gg_pl_grib1.tmpl . + +reduced_gg_pl_grib2.tmpl: ../../samples/reduced_gg_pl_grib2.tmpl + cp -f ../../samples/reduced_gg_pl_grib2.tmpl . + +reduced_gg_sfc_grib1.tmpl: ../../samples/reduced_gg_sfc_grib1.tmpl + cp -f ../../samples/reduced_gg_sfc_grib1.tmpl . + +reduced_gg_sfc_grib2.tmpl: ../../samples/reduced_gg_sfc_grib2.tmpl + cp -f ../../samples/reduced_gg_sfc_grib2.tmpl . + +reduced_gg_sfc_jpeg_grib2.tmpl: ../../samples/reduced_gg_sfc_jpeg_grib2.tmpl + cp -f ../../samples/reduced_gg_sfc_jpeg_grib2.tmpl . + +reduced_ll_sfc_grib1.tmpl: ../../samples/reduced_ll_sfc_grib1.tmpl + cp -f ../../samples/reduced_ll_sfc_grib1.tmpl . + +reduced_ll_sfc_grib2.tmpl: ../../samples/reduced_ll_sfc_grib2.tmpl + cp -f ../../samples/reduced_ll_sfc_grib2.tmpl . + +regular_gg_ml_grib1.tmpl: ../../samples/regular_gg_ml_grib1.tmpl + cp -f ../../samples/regular_gg_ml_grib1.tmpl . + +regular_gg_ml_grib2.tmpl: ../../samples/regular_gg_ml_grib2.tmpl + cp -f ../../samples/regular_gg_ml_grib2.tmpl . + +regular_gg_pl_grib1.tmpl: ../../samples/regular_gg_pl_grib1.tmpl + cp -f ../../samples/regular_gg_pl_grib1.tmpl . + +regular_gg_pl_grib2.tmpl: ../../samples/regular_gg_pl_grib2.tmpl + cp -f ../../samples/regular_gg_pl_grib2.tmpl . + +regular_gg_sfc_grib1.tmpl: ../../samples/regular_gg_sfc_grib1.tmpl + cp -f ../../samples/regular_gg_sfc_grib1.tmpl . + +regular_gg_sfc_grib2.tmpl: ../../samples/regular_gg_sfc_grib2.tmpl + cp -f ../../samples/regular_gg_sfc_grib2.tmpl . + +regular_ll_pl_grib1.tmpl: ../../samples/regular_ll_pl_grib1.tmpl + cp -f ../../samples/regular_ll_pl_grib1.tmpl . + +regular_ll_pl_grib2.tmpl: ../../samples/regular_ll_pl_grib2.tmpl + cp -f ../../samples/regular_ll_pl_grib2.tmpl . + +regular_ll_sfc_grib1.tmpl: ../../samples/regular_ll_sfc_grib1.tmpl + cp -f ../../samples/regular_ll_sfc_grib1.tmpl . + +regular_ll_sfc_grib2.tmpl: ../../samples/regular_ll_sfc_grib2.tmpl + cp -f ../../samples/regular_ll_sfc_grib2.tmpl . + +rotated_ll_pl_grib1.tmpl: ../../samples/rotated_ll_pl_grib1.tmpl + cp -f ../../samples/rotated_ll_pl_grib1.tmpl . + +rotated_ll_pl_grib2.tmpl: ../../samples/rotated_ll_pl_grib2.tmpl + cp -f ../../samples/rotated_ll_pl_grib2.tmpl . + +rotated_ll_sfc_grib1.tmpl: ../../samples/rotated_ll_sfc_grib1.tmpl + cp -f ../../samples/rotated_ll_sfc_grib1.tmpl . + +rotated_ll_sfc_grib2.tmpl: ../../samples/rotated_ll_sfc_grib2.tmpl + cp -f ../../samples/rotated_ll_sfc_grib2.tmpl . + +sh_ml_grib1.tmpl: ../../samples/sh_ml_grib1.tmpl + cp -f ../../samples/sh_ml_grib1.tmpl . + +sh_ml_grib2.tmpl: ../../samples/sh_ml_grib2.tmpl + cp -f ../../samples/sh_ml_grib2.tmpl . + +sh_pl_grib1.tmpl: ../../samples/sh_pl_grib1.tmpl + cp -f ../../samples/sh_pl_grib1.tmpl . + +sh_pl_grib2.tmpl: ../../samples/sh_pl_grib2.tmpl + cp -f ../../samples/sh_pl_grib2.tmpl . + +sh_sfc_grib1.tmpl: ../../samples/sh_sfc_grib1.tmpl + cp -f ../../samples/sh_sfc_grib1.tmpl . + +sh_sfc_grib2.tmpl: ../../samples/sh_sfc_grib2.tmpl + cp -f ../../samples/sh_sfc_grib2.tmpl . + + + + diff --git a/ifs_samples/grib1_mlgrib2_ieee64/gg_ml.tmpl b/ifs_samples/grib1_mlgrib2_ieee64/gg_ml.tmpl new file mode 100755 index 0000000000000000000000000000000000000000..10c5994320d1e0031635dda746b7d3262952f0df GIT binary patch literal 27684 zcmd42Re0N27X=zNOR~j`wq729IUTf{GQdP?2|Nb2n6ZOAWI}QAUM@Kb@ii(elHe8LPtpDeMD0@s) zG}vO|qQl{EVpLSLF%}$2x)&22r6>IUf4{)NM*scke@Eg=75#5NY8cqTYmGbp--qB> zI4TN@qNB7ZJt`0tiOL3B>8Ns1m80r_zik%PE~?l6wxXyJQ4_(o@c-GiME&2}{;2UiHI-xs=r^+DpkdWY&fc`UoG)nGRV^4&wN}BTz3BxDKi@0Z@U2+EfxX)c zF6Eprc-(e>!Pm4_h4B}Q3gP?dg-l_wLhbv=!qB&Og;|+P3kz4wEUc3Jtg!xmYhi2e z{=#mx(hCQ=iWLssQ><{*?1_cr1*C9t#=F94_o>2J24mrz1v3lh%|BT<|J#+q1xqUz zE|}V>aQ@ze!g&NzID7K;!Wo|Ng_CbDFC4dXX5olS;le@1{e|5MOBObFO)acm?OtI) z^vJ^GdTR^SdBqAHpB@#)Oo}UboKd;p=!8ZEt9rC57@xSkp!Jsy1=&iS0<=VK$-8W= zl8aNKN;W**tR#YQB~~`MS3` z+bzSi_jtzSw9=XIflir2h!2@}KF`le375+nb8%+YId3={GZbZ)f7>m4G|yyjJ^VTQ zMWbRlSd%q5=`Y)WVzR*%p@< z*?T-Mt808-iG!xRa`S8CRrz@#ulCi4d5z?6dCmVu^V+=h=XGq+Ew5{VGq1;p#d*C` z9C>}a{*%`~L(Us8)SEZ3*@nEL|BW;r{~r)UMU@CVA&bmWQOJLvCM19eZ+XNJC>@v> zI2L#kcpG>cI2D*2$oAjx7x_cJyS~Z3X1?~mO@7`#!T&KhH~1k`Cp15_I&?Cug?ojE zhn=BfL973#zp?MTue!INXRoKeXN`A_??oUwa5h*WygIxC{HzME5045r3m-^a9%&Hi z67eLSO{@{#9gYru2`u#w_PzGa^8WA!Jb!w+c^vw3eWRzPw}Y>Rzja_m@LA|;xOrq* z5+Au32_@c1d>^4BeO9WE=iQfI5t{%Y?_Sp4Zy5D`oUDaiBHgJv6b384)Q~X^5{|3Xs_+W{U z7G9b7GqOFULCUdIYijkB(aEKgy(yhjFQ+w2+nzQqby!N7q^XJHLpMWx!*Xa(aAjbZ z|E{l@e$1WdZmh@a)%0DSIK7!WsC`l+>c7t4?hT%*zU9GniBRH$NP5Jb_*deY$jqc| z$xBktr_M+@pRy)3I^}Xo>*OQJ?@||~i|G^6m!|hlTb8;urAN~A#Pi`kVQ2VC_)fTL zcyYK>aDO1lS6_eUe(OHw9_KFUy5LTCA9t5^4RAJ4hboHFP9vQs-D#eE{v#nncxPgh z#CC~yBON14B7GvYlknu7sln6@sZCQ(rwmN3mo^|BPyL>{I=y*Di%d&qpNzNZm(wk2 z)|8q_ha!C=R78oG6E8*r5g$17zCb7MJI?_R@80FoowHr1-2GjToYmEp%4KDdnxV1U zO_$a4Ffb?hF5EJ_KD0Y5MQo9C5pUwwNHAGUO-XB%@=wZ+)aI!#(uSt%>EAPi^w}Bx zvn*LlvfbH#X1&hLN#B>=DScwvqLeL3gCcj58YX2Vbxmp#85l{6lt^?2F9cTm&-miK zb3M|wC|l))a+cCiU7&8#rn?&GzkL1tFGJyQuh5ZDvC!Ly zC22v@z$7H{Ir1jyM9Ryw&1u=G)|ASr&eS<+RnqHcL^9rFw9nu(H|50Tw#{vv(=zK; zW_)_-^kV6|)7Gc7Nis&#k_<^|QpL#2!~x;Dq4FVfuz#>Zu(-dgPw;j2F84fkUvaGk z^YT?UyH;x_)PagYj+chYUbR45=e*?Z|Xc(`;Pek4J-{z3HbemV6=*PHP3#}O7~e^*ZOGw=G)A>4rQ~SovJA_6vszcRQWG&p1k`9f*oH<9~boz_Ucm-1&S zl9H1=Hl=B5)6`2~?Tk$Aka{?^XWHD1tc=&0F`3rP&RHqh4|2ZciaG!0JkM2g*sROh zp6uS4-_stZ*du!rq0sN(?cmbjm|$BFG3$Jfyi>d;-)8@Zz=q(uARQP7VwCoj(C2~Z zspjsjU)Ia%zxAQ6iY{H-s7=!vD^um`N``Vp>*}tmfAJLahJ7Rbf`4K#9GV$g1tNW2 z_|L?JiE9#lTW6cPR&W#l~O*nM_R+wi78`J8mAsf`<*^1{cy(Fth}t=neL2D znWwYkb0*}j&ApvFF?T@Duk6}cm9mBGX<5k`v8j=yjfpwI>wzx*_x@u6S74H#1hahK z)7SIBd&T!FP(4^X_%Xx;NBakRd3}MqhP%L%q(9YD^gVhby`AfXJI1X!i=6$Pgw{z- z0x_~iJLTHzneI#QzVJ==NBnyOodTDF1A{Aq|AfWx%Wz@nMtF4C61tTrMy@6IOG!wc zp3*jrO)HjaP0mf~n9?|{c>2wZKQpIg8?sJjw#y(gMr7sYG|b(Umz-BWuWIg*9ADO@ ztP|O>ndj4or4cFnlGcXz1djOL`*M9V0wsb){?%Z_&Uoi|UVD9>0p9-p#erMFwV?~4 zI)QrL`+7(BbN2~-i?@S*N#Eg_;~C@L>uT!ir|kr>T~S*M?xUyX)$Ti2y87t<_y+ki z{BQlE{G{LGJMAA8$PX+J<%csupMxU61*`lj#p~jZLStMo4GnUk2ue`GF<)jJkLWf z<9+YD39??Q@0s_wceF3cza)qUZGj%XFTRGpm%h*bl7Y^_ZJ{P%C9!lQFKJ)Ol9c0# zc=$m0U}D{*O{qv)RGOYPE&WwSjf^_!|EAZ@5HqV}8*^OQAG052|H@IbmuB_JoSbpbNiG|S3M~d1_^{`*r&%ixHB+gH=edM10ed2_w> zy|ui3y$!w7z1zJbJxBFHy3sAT%Xun!o_MBtP;V=L1K()xP|q26DRqjpN0Q}iWr1=| z8KC932D|IJz3$q&F+W_Sv#`zti@ULvmF3Ks{w>CW^Bl~keQa{&U~CcC`F5O2~Q3#4E7Fo@>TYn^*r^) z`4arWfEbt*sODehyXf8Q`3bh)o*dn!kJS(By*&jUx1Qpz=VshKcRl@%r-Nq^$mF|y zv;ALu-8~W4zgk(jk(960R! z?H%J@>7M85n-Y1@)-qv6ZxA#5sHS${k=UV8^_FVE-_Bi$8?n2iU_h$D* zeU8WA?(WWVcLuq=pB|%U=#YL>f9P51yY8>-8R`x=$Eu&ydCrc`^UiLrKU@=?v^LG@ z*N!o^x)*Wp*ub*K$8}tCig%=Uv(C95xPH5J_jkR4yU_VlyRH7K9G1r`leJCG^{)G##=Zg{;_d47dV}74 zPj|hq-d*3Tr?~!h#kfW}4{E4#M2S|5Yx(Lp<)#8lrxn7P=lta|y8Q0t-kbhQfq4P5 ze|O;D!1>_haKA`q0$W8EZ1% zWX;V=&!p4GrWK?SsST2m$gafmp;YfQJyBQnSiOwLpwywAos|=G4+O)EVup3%1hQHcin6yKv`m=Kxo87Y|TsxO=<%s;=qZ-L$sK z6{nZ?aGomqO4l)MhuT|NA>Re}w%OImebWQ``Jf&c>YL+fpm))~=!4uF-80=w-0SqN zdP8@j>!Ax%&&%7S({d&Gi*!gNg$2SYk&;(vGqrl^KhBVQowuRygMXUuqpv|AIZ)MK zEszpQ3g?A~B$i3+o47mDGqNM;MM@-PXo^31MRGItf<^=OIm1)+sa8Lgkhk&@Ad=wT9AFE|L!_+q8f-Pivqp(jGe#ooif++y!of zyNi4<7)=iR8xHc zh=rBzzubSi=XzRtwz`X4X6FcXjMPfFA+{7B2ut|l+(@ngKUkbBpO6p8J=IapdG0ED zBTu~NvNzw?%-_dv@;31e4wMSAf!D!Kp{bz{;Z5OdiO(auB5fj`2$lE(ybnk=rJP9f zr~R8gG5uG1h19Mow&W{G!xQ%;<|J;6%#5(1bYCk^Ea0=}v^`2AnU`eIE41P|uoKw( zLZ)0#U8H@}eyd;ApXxw)vr-kTVpMt~|DhDfTjc|)Sy?A9l8TE_A|bw)PAG9oro2Px ztZq_&YfoJ{uAc5_ceXZA`RpX!1N0;v(R=CnZnMkcDsuI3Lh2{2$SrsV`mP1{gd-py z~QuN*FmT)X`)3+ z)sDHgxXS=0)Iv}4toBv*MS0e`r@GI0eE@F{`cC@}`m6bk{?UP?z|-LE5F5%0;lY)m zw8T1*_K_P&k5ihajZ6QWk(fR+&6m6>QX~8$TsG7>cs8Vk{teFz@qV)>*&XHds_o^9 z!Vzu-m&py|2582EuIq|JnUECy1kp_xWrP}f%d9Peo zsi2%ux=4?On|vZyi#PI_{5la5KS-5iQrW7OQAN!TVxh5fvh$<5K$)W{&hgGw&c&{m z?%l4vu2i?t-PhGYTd0;-gHGDr&Exew3Z4zm4Nnb@^AGUmdMN#dYn;|cJ)r!Mf6LMG zbmfjxPc9>uRAl9-+*uqau94CNiFrdGX6m!!xk|i+-^#7wrz^S6C9Z`a50&*Ky03UT zdi#3~?n3RH)8iiLzT*C^Kh!UH$^tGQtDo|0@|E$M15rU!Ff*7H4kWHmY!``1E}m99 zBQJej>e-YMNmTe=@I=7l&-ESiy#?d`&NovZ=q#mnSL(>JFr2ADRU|)CpQ%sOB?=}} z@x??OwUc?zTg3&^Z1JiDiyire+;2Xf?;zv|(P9VLCf$&eltTHD^h}&2?BZ*&o!E0+ zU9LZ$Av71OOLqCR@=Y0_+SR4XYqb}6cgmmC#ZJ~a)Ma#c)yuk0IbXXryQ*kylmQB? zbkugZKX~f;Jb_k$i-F?)V!jgkYgfQoUVW^T0%JB$WchPKT@e$O^E-ux;sH4y8!rkAdgLt2I%k98#^Ze%YSqe?L6+X zyY@MogT47K%w1ony^G{3(Q()kG0K6`O#6$A{oe@IuE{WP@WH-jf_oDfCHp2(y~4$u(me zG3A-QOigAiXA~Yt6{P-BE$M_bUTiI72`vRP*ObG#x!hQ8A3sVsB{h=ADch8x%09Kb zIzgMGr7KI72I?_qXXkU*2shy#?REgxI#}JTRFLLKtK|n;HTO8Zp-1uV@+NzN`V2kb zx}inOKcy3*LoAYW#r@nbb|>?c8P05F$8p_+wc;HxYjJEzb|`(AvQWjyYh((wof*d^ z2&JS6@-AmNeUy8ji*`MCZ`W|`oN`ebt}N7?N(p(AGEYrZH>fVPtVRJuNOmr9TRe-s zJABprS3(aH$3{|tYE&Wv1m860R0y;qbrCAok_2uZc~#;KUtM&!1or*i6sB8 zutL}_nE54OO;+F=^OXcau<~2^8A4@ovGiE!r_54YXxp8*^QyCimZF)o1J3Qv+5kV7 zIZaNh`cru;&ygOB1!6I2loE7WTwC-sZ?xyT-pl#SIl}p;@=~<&ow#G1k3S%$@C37l zwv%_s-_$!MgRdgwvOa1k^%wP=%qR9y1o@0OMK-0ob7h2dsg!)fSytcaLX=|QY-Obp z62`yerb?WAP7DaBuv+{ot&}CDhh}oguIH{xfPIt$8hnwrOei|BcH*SSAK^#ATcsKlz;JM*&6gxIzq=$r|=v2Y;+f%?C1>BP%q0vb0^Cb z+a%~4)C|4{e}MnC55@l?Ux4}DMm!^q(_Oi)LSybDm&e!U2k|BN@4`1Bo}0p*=QjwQ zh37&ufe`Mr1}srk=ZWV*+{$OG&`+YapjGYqa-VRl(F(Nd6YCy$`x0L@j|8; zqf}JiIVZWUxN14~19#zHke^U~5_^bkz|^8kFfs$v9jG;=otQ$lr>*QR_CECwQJ+Lf z2Cs*2B94<9aftXpePga4X$?oR76u8l&xVE%q!6_=AfAH~gD?8+_%xpMkH?M1QBB*4w+syE;1` zyL`@*&VQWml-t4rrZv@sd_}y&Yhi1#V^|W_3;l()bew~WU=nI*nPa+cT42^Ji5ASt zTbo)p*fzlJ9hb2wxD7u|e8KPG(Gr^pYK#Y#{v0gl!YpNWgar9znf#GIo)&=D$&nom!pYmh&PAijZELYATG z(XZ&9(inNPM!7gwk~UXur4|7uBD#ipx_cXWdh2%p#twD+ z-DdY|w*>g=F6W<`Tdl7)QCq5Ym4VV3{sw&(e~ax!=R2x7td2qGKD0ZUhIX=3@BsKA zT;F!cnqm52tYmZ>vrLUmB~AU!kmWvf)jkk~(F@ovG|_P!TSPP@UX$Z#o|(?JVe4|e z1x^TYeVE=%4c5y|6(}%f2PH`QsDzc_N>ddBPGCsBC%uyGYD62NMX8ekr)nrp7S4+~ z!Xtnp+r%CsCC-;R%NM1i;$PAN={-PRhvF4K^F7(^OcVMI^PQc;ET+@R$K+xvlb*}W zqHmHt@Gu^QKgQ?aPl&HXdz`^EbOV~^$h7+%9q?1+O!7Bb0%U{}l7VZImv`g>t$)Ok63L+4j_EqBxjw#Nj|b+Sj2k zQQD3n5S$5*MG}xd5CarzUSJFx${1c4orbl>A*OrQcqktk=jeew#x3@3$Y;lMw3S15 ze8khpZd5Lv$2R09aal|SdH^G`Hm)ll%~upmqAqQdpDDGJ$La^5JmRD#;zr3Kzf#Ak zN7cIWKQbns7Zkp|P)!O-HKcOlP~oMNtfa^r+xqei`_&E>{A>Q&?Sy5_L1;%=q)rK8V@gnkJ((N&W6N<%Z5#c8^!|TM>A~s28}{Q z`#$V8PB@l3`l1rj*)|&r+N01X_$+b^^_$*F{Xlb(uUzY$kRS zCx`)l4YPn;M_!;>P*IePTuc6-G-3l7Hv`d_m_d}n=VHUqy(r|E;kb^jMrWgy9et5? zaAPEBZ|#_bttRFWz3^Bp1B<~ZY${%w5Q!#4Z8AvrVM%5>)rCwUUXn2RihM`zAX|`y zYBb;p4+CuU64=c4kAo+#~Weg?L%ywrLOfD{N4T#ZG)ruEqp)Tg-oLV;$pe! z>;|?47tQ}EV&YS&lRR7bto)Gf3!>l=*Gr=TQ;(8fi!#5RJIPGpw*i?w;AMhl%j4e*{)MctRd5r2#Ri?73gH%m&D$xV)fFB}86Ay_a zL>&6gaScsE52Me}7WT4mO{fpt%s$ld1?x^6pd{iWo{D9HxUG(Ok;C@GXnDLm`I!Dr z-yoL}afC_?Ckly+RCDSWxrjJUJO%u-1y11O$g|Wpx*oHiJ0SeUA7!tz*SO2VdnrNu zF7;B<)jQf(=Um|5ws$6|SLNN}JTW466mvzNcwU^vAK=2wDDoX~A7tT@1di9i5*+R9 zvmFt~ANC3MWsY$Uuf3Z6rh`BhK=o`Dz=$3{7~VH_)Wg54%arSkK`J{ckViS zhTYDd;9}Vq>}Ea544+U5{KrtRTLUI(`Z-f!ol@_QlA2yUng6_3ROJ12!E! z=6L96Wbc7YLu$Z1p$gU$mRT0k%0fj*LwhgBYxGadkL|?@9Hrq$PG{l3W<1lKWBA=-MCuEa)FxRG)A`N(AfctWQI1!tDp~RysV={Z z-NY|XXcXX3KCBisPC9`gq? znAt|3r4Cbdss2<0DwZ5Vb|+_(Rfy4eSF8Y?ftA5Ca18UIyDX6P}bK-usV`v-I(ZpU{JEXfly@PF{q_)KC5$xt?`J}F|dy$~Vb>&P9) zZ%oGfQ03@5v_@7WQ^^<9Dz?3_PwFpER@x|MR8(uLnUn$Y2stQS0Sae_f{Ts#-U21G z;O;Ujs7w+g|EA87TZxW@6`zE$_Ga)zcs4u@+5wleFG1aoJN5ul0h#QG0^_>P-WP6a zYis$#{J@$A<-n7WX^vzpgy*A85FBa?ZL!xvzk)m5;8<+$3h#!Fz)$R}Fo>81m|9C( zpkFZ;*h_qCVVPJ>goTO1Kp`Sj7Mh4X#ZlrdDI|^*MsokK)tDvBZMFsbk(=srCW?&0`2V0D0*mI#hwrtxDxC8Rm zk?yz)nA%@h4nCPYMIIw-kZHtg;saTqc!k$P3E0UCnnGx=`U1EqJT&t zEp$n4o!DGnq3!@aYY=e8oyrz@jC5FPBn}d0i=;S$AI%=*`f*3u+0-WdEdGM50bGb6 zu@LNI=y2p1v;}$yuZ6xt2arpS=Z}2kq|>KYSUvkK))PqBq4;8|YN}3DcE%zzkt|_B*$c zza)GSRtW-Fztgyu{3M|wzfWNJCtL+)INh86%9^+pf=}4TpW|wAJ$Rl!A?y%N3p5|# zDzk-Pj*37Ina*DW?5@0ka#y)T2BYdwL#RDeM`{vvnSMiGp@QUbDw&!^U84hZUwSMx zi#Q5&&kd>r4 zt_xV=c)%4vIbJx(r?S(z{oHD%ELj29NDsp^Ch`E$72kn%cJOeaZ56;4Biss_hDeT) z=os`5M}7NT#{;|*aTafk-f@s{7pM?UK?d35?M;Dt|AkzF{NvHNdPaZex(MTdJJd?hz??K? zgFq8irQ_)VbUMA1VVH4DS-?VO11?{eoxz@G2e1{`j;xh=#?E8*Q{9QHL@a@m3#kv} zbwb9o&^>5zv@v=OYl^KxAAmK~1U*T}jVT ztAzA-v_dzd@6mX>0()$?ZC=YiHV7VT&v&p6#(n}hgnYMObQDJq;X5gWK25)-2UG8; zt5k8aIKCCTK{%-r^k>$?HU_LXojyRWB0iGuDIYa~-pdp)ub5^`fStlK!W(Iz9G1F? zal#RPCl}8UR4lQKSWDI=t5MsyD1I4toomfAyviM922qX4SyTxMxHe2{_AQso4Fs7x zPDmGK2#JCT%=T{J+;rnneh~M98_2$5?$HOSALK>i5|K?*BKi|Ah}QTSd>P0RLopcZ zLm=c)z^hi%F#y+CawB<(oK5t`CO9<5JXAyrv4-efyd^n-I!sK!V~EnEO1EKixDjF- z`G@kC{9Wm#)=}bBNpUK9N|D%7$QFNzJB6OyGkO)-7OeLs*k+*rV;#Fu&QWB~fa}^m zTlZNd>s;$u>wBx$^1(LTy3XpeHHB6o$xt=RLTj}3y=@enYR4R((H)L!fbkEr&4()5 z7F*BTu0w|q%ARSjf&}4t$O!uztSzBX>lowkS0=63n^DvD%b=!KZd_4){-@a zmEBSff0td)vdndQC{5F~=)24|CP0(aKDvnBO^ehaY6>M&L8>|Vh|I!^aGlsiwILtl zeoV&pW7qJ1h-QQe`0Z~hgZvvPnKJZW)G=x+{e`_F<*7~83u=~{ptP3Ds#U@MHm#U^ zS3Dwh2Rb~5y-M!IH{%q#44vsXZC?QJeF=QjcGX7O`q`%0XlpAgY+Y+PXPIn%Vti-( zWZq{RX^SzpGkr3hHLbVUY(3!4$Z}*Nw8;9|HXZtE`(eIl63jPk+u_eh6}T=m4!Q_e zvhT#ZQ91Mr`U`{5%P1$_+~I`J0@kn;DG#vgl%tE|l4C7e7F&-UN7p-Gdp-MdoB?+{ zo;pJ(P_3!1^c;2`SC2iyQtVf50@slF$z)Qk0IRQsHN{tuRjDxDm#xpu=1_V$bp`NF zo}|dl)IxB+;dC)-KYfIKAyk*Dil4<<5-GKjN=r-Rk#bq7CCDQVAx8{KsxX#IXIHSZ z*egI^q_DXF7c;n$z<;U7<4i2ooqSE6z&~M634vpYk7@!RssG^cAjT3a%MO7xRlLs-Q zqr1Ht7|9_}C2MChYp!f@Tl!nBSuK|Nzytej`e|HltY#8Twasr$C5?wnLyS#K6)drq zsn#;K^42Amd$x4jYn#u~+BD77)LI)#gG|s|=!Na0tsCM)$Kv2BnQZ0*y@`y$ssc{b z1!(0D0O4HFOZY6Z0GW=I0)E9{dknl4x&wVe5*&@t19%C51N-nhfc^ENNr2y5nU0K$ z5ty;mYrqD#lOjp!+b#e^s64jRSkTdWFK(98U`g6RnKzu5` z2Wq3O+*KMa<_Uj^JEcBSb*Yl{x7=J_ERN=Lxl&w1fJ^5Aip}MX!d$7j;**{Tv8<17 zMa?E^6FTt}`1=2{JoN{$hS*JP0G#m#U7EZPSm{+ZR}8S<=pgxlY)9uZ_qh3zOMUE& z0X52J&MsO{HQPyPX6>wtbavIQDLuuG+zuvznn0!ECG2;R0d^zY4RFevrnjc0=4?x6 zt8VRU)yzE%D~#ohe;DV1_YC7S!#+dUFv?KRpc+q_`FfbwA@bOxFPw}H#U z7O0PHA0*lyf~Hz|t2H1l5E}BZ?8f!I*a; zE0J5s2-$)n$!f$r-~=28IV~Mqj%GOWu*TFYZXfXJ{{pU2GvK-}5t|6P{7-SNxL2$t zZI>@AztzvmN@)$y+#3~2o+)ku3{jQdD65p75+oeut1u#PFBP&LS&NzpG(F#tRm)e)6sSD>m(5__1=R6ec�F zv_W~a6m}U~?{LB2p+~lJ5DE>1oVJfpKd3W^oh(}i$P2xIUP5uUAGX6F>->NQL;Y;y zY;iUi*6mwCMmR_Qfse$}a12+mijLQgmsm31AKyUEqeg+s#B=f(5g?9|gUEbx1-XN$ zj4#HL9Y4`TbU(gYzlwZW{)Q06uj5AwYXL)_=G^Aq?Od)hY9(i! z3w0J#cT2ma1o@#dOTHITCP5_-6SkKz_LJgru@N|1IWTm~7eIk4w zmLb7fXq^C!0CQc+y3_L1(%RC*It1E}L?I}25E@{6XN$Gou&lB~nHQQnn19=Hky&UJ z{5#nn?~QTTTa0o1fh5|?IsQg>2#FY+e26QEWf>=(Kct$<#{ zRuRR?hx7`z3GgYZvG@4yJi;B|y0ItO&7fMO%Hy?t?tJ}}YXZoP2VHmcL+*RdrOGtv zlPt=G(oHdz`x9i;H*^+tipVG4Foo<#whq;RxJ&D78xCf+0(W{g{(x9bKLKNzgO$O0 zkbrBj9ryv#33a*Z0rB-#KC29pdx;@ohZ3u;bd7V(&^$_OX$;?-9*pz$%?JuFgf2r< z;Fr)wTU%R6+XbjTbPf4!|ACZ-UGPcdHhdmZZMoL!rcQ=c2_F*5#s8DwN{AQ}OoKoJ zL7ugYWu2v@xsfH>ddW5q%-K`ZEi)(@fn)P*lI<8&3Hkxz>b})s>1Nqz!7OtvFU?;- z7XM+5x0$R1tX>-fO@kbe4(G!qpz}7>+`;5G8I0#m@2nqz#u$rs!oL&6fCKOX<3P0D zv8%{eq(52*??gpYUCGrrhpnWHbOBIQ1i2A7nqJ_qwFgzi9%yT<4}O(gMb#w_({*@^ zU(AhQRx%}lYR>0iVXLyrbzlEi9|5YXO+A#iy#Cy|LHS2{p%y4rB@?%Vz5u+O|CD$X z`H-qh-)98!DP9^Q$v(_wmZtYnO^Bn|9*hT(h!d63evT4Y9da^TNmwM`)L5mHJX|TO zj8#U7S;9vNmcM8xU8%0suDQ;uDk~;4NAaWfIJg}`A?=ZPxEeeL{)qHKHo~=`wa8OP zHTzO~CThUCqigJSp?FJ2W7~uuh99PCrlE$F@jnvo8X6mi8~YlsnyQ(2hf z+L~JrSgx9r45ozBCd{(Kdcs=Ka^GSy9W~D~7n&FoYwBlGO#RGhmM1p5ZI~6ebh2)- zrP}I4ZQ)8t4t&d&YBn2YC(MXHWDHp@0^YmTeh4_%NATN(8S7`?3jc(5!S&#E_6;bB z_I2DxRYwWOa;z?h2Os&C?1ro86LhrwuAKyKeOvo`G#ML9)FoR|yV&CF8YZ7QM^|LZ zf@;|Zp_8;t{pvj7{9D`Pg1o3d$NS6OT8mbDY8J&LR_0y<#f8(SxeDwOrXCy5^rUJ5 zZ2OA$1J3>miX$O%2{9F2JrbDNw|6(=rDt19(XZdKBFldFXie;MV zaDp0FB0k#i*0kMt#9%k{OE_rY6CTG8iC=DvGiR9lSO!@3S}c})%YJK-4TGA(`@#8Y z!|$P11!3EhUTB)3rG>4!`istR$Ecum!0;=%f_ zFaA&lYj3paD&{N!YTzdCF;A>(kaM1MvRYR{_~)F+GA--ORV{VkMxY|~$v(uf8)NYu_-@B6 zxG7X%i?S>=S2NoTHxiQK#rPWWALF+egXWXAE66o84*iTekx>w0-f!$5zdq(j?11=J z3AN%6#odn!#Kp(0iR&GYC8QgxnK84?w8Zq=THkujmT4<)n*i6ck3>(PS@t{|X=LLv zqZdYfjG7TWF>XRa6T=DfM@T}9_H_F&qz^<}F>^^{E0fU@Yik9)f+kr%S}s_|Sa;Y4 z!KL6D@IbgZ^bqO~jR%#@tCru^X0XHI!-|MGWPP#$aRIM^{fU0WP~1XwW;=n7mEBrM z`%^vV>Z&vD^?HH(jw{zy$~jzF4=U{aM1e2j=L=Tu8~cDwVr8}qvyglU{ALMn0lexr zSa&RJe+HLx80ewwergLo4EN#h=vLfXsf6qlN{c=@MJwlQDK`=Osx|al-XFfF0Xa~? zTg_EgPUT;45_ONj(am-@a?&1$41m+E|AGuT0C4xuXg->Yj>7&WCK3~IpQA3a&u)N^ zTbBVo6f)K~95*~LTsGD=#+ee$!);$3+i{YpPO#`IBw*=b$cURBb2RQs!lAeyai!zN z#@>#360i=0%|2wj3+_Ih+A3U z_ISM>M0dEWfL@VF+EDq2)Jf_u?%;!bN8u0QPp&U(XWBEP*i!T!vIg-UyNH%^90HZn zBSbkzO~-tCDm$1SPhO^qQ;GC^?uIm0&5$JFG{Ah+`AM6ogq)>3TRa!MHv%<6C4*kQ zyS!Sku-obC#AIx!V;UNRJwlh+cfxz12-FX5XkUYU#8+eA@IQzO_;0KM@OY*peULeT zr=PaoG&@W^%)J4&%r|tcGwO)=~=XITv9&c*|#B(urf-OL#88jl%fCU_DO;#S2Li@6g!HNJYnK7(W&Zr*2p zXg+GO0c}#-xGR2R{88gs(>=>fXd%)Oxd9mPSld*%5E)`m09jL}X0vle52*j$bryMs z=s{idnB9|I1=?<tdQw1Gfty#P_OW* z_!&By{zZ?Zx3dVVvT6JlsVd03C8fdg5#_maqI;rin?A@_$9vz`E;u>S9?tN-aT=uq z{6yA6{S7L0<;j86R-j;P_&?}5#|Otk$4&e!F(0prdhG8V8K}wr8brrkcpel4>h`xa z$KtSVw8ofu^L|S&+iPSzx)RR<6{1o^NvsW$ZYyS9VLEPZVM;al)bbPG8ev#S<0JeN-p?J71ZBP2Lvw*{p?h+!^2-zNL%~xTIlgXz&|ZwukdTxk?b&bC6~)u$US6v;sRmAwgTtBjy=hK*)ay~?O0_$;K)YqAye(u07Ejt zZ4nL1v3a35cne?|xA3W;%9=rzB``;G_&C%DVj&%*td>iQL&aUfD83``h-5Hgr^LJ5A?7KY&!jV5m;o%r-sgIW;IR)m z3ph<*v~liX`b+nA=U%P7I@I;fU)j%kH~Pi}j)m}0E&p@(MXkErQXB!ixbET@)ul+n z8E!SVlE2DlG5slwn2zrPodFhmX?q`ZCRQ150D5t5VK=d<=yz-rmSaBzUqgJzRrmx_ z9Xa4=hBYVlQlrV6RDcKoM{l`(7h;1-nR(+EbF8JYWstdrHQTn_cG&XMG7Pw?7tHl6 ziuIVaho!tV4T?tNhjo@ zvaK?-7%quekT!6%&1Ph5xTlzlFm zhUbz63{D#;D``Ph|@SEj1qk;iTzQtl;GGX_kQv7>2=@tWbPp^3Qzlxaup{gKh= zc9N$c{9nRMyugp*8qtXQ!Znprl>Pxc-J&qic;oSwJ73chkWuF7&3 z`KQ`Xy{~ML2TMahA5oEfLdlg{NfLM-pq%94YjA7%wR}gZfihnCTYIHv`6OSAZ$OX@ zMFl#0_qw{cEP9mJ?CT9izm0dLp6Kka#!Gv|YC>9S}$P;uBpz2aMQy{Sc{ zliURAlRMZ<{+&Ed{pqak9UT4?x(c4f9OZ51`R;k@nE;-NEAFYP`?L)}OVRQiRZ-r9 z=ZrJ7c<{u)3-upmz7nNXR3}Og08dQ;?nWd2v@}i~>59_J_=foNy*vHeL+yfzzTxga zwO?8d*KqG{|KI*hPjlA-ZI0Seek%PVb(2EU65%iAE_sG%jyK0nVl27<>kWFo#-eW= z=g|PZi+F+Ub(}z>(I22gvjf1Pl8$6YMaLFUEnSZ+u-|tScdT^mz`9Zl!-5{9mSlhQ z1#$z`HBP z#_{EZFLDiSpsTZ|Rj5>WMZgMrRtI{MyrSo(r>%a{RTFfj#Y_D_^?Z}~R5&h7lB;U- zUAOco*Klna=q!m*n~SITnxGS79oLmRA{o?OE~{SNTg?agV*N?MM!{BrG~aQ3f%CVk zx2MS8A|QM2xk73mHAbxjdiC!s-PCM(H@qB#VaOuU|sck?YegT&X4^KFLt)?InQ~X&-;xiKw#jxwwoX&wy!}V>^1BSY$Md# z76YBMBZ6w~H7d=18|pX2dgv3#wDrisPhh{dwlrHGfM~#q$AAiRt<6hFzHK{5oHg67 zu!Y-RhM%;T+MS2*hQ5XDg|t}Tw7k3^VLlz~Cyk)Kue3OBA)Whto|Oe=!9i0!7lI0{uzPI#*7}IeAXEnJvt`)!!=hkcAY{uCtE-TokZX`!s0Pf^ zXCXeKG^h!X*tNjX2nbw1x(!U%9umpq8j6|rf%%!Wo?9sJ=K8Zr86N==w1jb%aRIPW z7)lu_nz)DXi(rAjfIWmw#9t<(X^)sAObpFH8>hEZkOX(^J}d_Vre0Vwp_W$2a09FZ zpLvb-6V&^$+yI`MhvHC}1q=$alkQHAyKzdOUQ7719laLfO>=4 zj8xl=!tTL?5ze5q>j;-YYry^80{#v*2rY(tA@(62*j<5nKw@nD5L)C*FpDjMKDSv7 zF~S^?TXA-{Q9K=LdaBqFfZpKTniFWN*v{A}La z)Il!7kJw*DOv4{R|F!i4H;gu$dN6r7ykPx8+WZ$5A1n&zh0dFrzsFK#z1(&IsM$g7 z2k46{6h3o5JBpD*7UE|jQ{X``2l!>=9Mox)4s{FVY`*|H+wz^|cgP{=I4lM}Y?p5j z=I2;F&KgI=jo@#9Y#Iso0J9C7MbgmiSt~fcoQ2@5t>jvBra)r51<=z&v>@6}%1>ZY z2q%q`;>a+f9bSYvgVA7*6S(AI@C>vw?CHJqT1qXclkf#k!Q4gf!p_9^lZ7-n&6^rY z?`QS`h7`#v;hK4`c#-UDEGR3MOW_;&BDMwX2Vf}hq$$cA8j5lW^eVDRW^xrtjDLfz zMh77?5qA)K>@Og*z{Dfo&fSh{Ux7S|MB1m>#~~&VU+pGgm*FAyljxVAKMsfgu)PFX zYCDZw1M<^81aHh=c52vtSQO-f%>>Aj71;=FQ(;ap8RU(1oQ=X}!0IOGll}=N#Z23N z=rPzYyK=iEST76*4Y5T-opToBsvL!kHW|>m3Tjp;cNk%nh)hX zAXJ~yr|J8cc^o!x8#j`@i49|a14R9M?rs*5&Y;bq*3l#k6eELroic;cO8H3HMII!k zz`f_P&83ArBagx-j1MeRptp?mzI!?hseJZ^=yjJ652-U4PWLy&REc5rKZ zZnqhMMyL^o5kz8kYa^_nOi>?EzL7i$5^Nn}-1al%Gi)}JgDuBHK=vV$;6!{t zwFe}{Hi`#*kVRrGrQe`xDf{VZxdHt< z`T_n3X&qrNx(+dj*nu*kl=cuiFG!}fE3^`J0=fZe4W?f*n}2P_AO>hVYz64ebL{^H z_x5ub0VV^v4W15dhkk?CBi!IGVI12KTOI5JA`0nfw*k-@yWroD?r0Wvf^e0^7Y#@r zO5O?{u>WHC(qGfx)12s9<{My;U{m4<^Kq9kmPj-*3R#RfPLdJFh(Cxj{2k)&l+!d7 z?J#W<{T~j77XwbkAGEzx6QhHN5%Tyh>@Yw>kFpKyYNjjQiW*EyrMZ*4z&xxH%TaB!d`|(;?@vmVpn6_a7#d+6HcfCNhD|d1&{__h5tG~OmBh94tP_`5OaBcWrVl>&0%qGvm!7!h&Kad58F8d_Z6eb8A zfLj2FyEAwmddhyg{UquVIumsWzRq?gJjL!Ns9=+Ak&t-s9gl^N!I!}s0kM#Xvcz5? zco59^aI`Dv-=#xO*v+tChD<`%fJ{z;{V@~^c?Ud8{;(FiVfz=D?I6u#WW|YAO7T*v zaF8$KHu0tbm08LDz(sJAxlN3(q+bLDK}eh?6yfgU`pIbO9LhqHE#8^_vRD_` z3)vSrJWeVni}Q>9iusTc!Dwf;GOsZ20V9Hmv6p!RI1#kmcK%;{fP!-(Sw9&@3Y~a^ z{0HSBIhiy;!jt+b6EqP$jn+cRC$1yblbfk?X=f;x@IeG$LNBfqQ-+aXM=^FNBBp`x z4{-+ZI58d@iXtJ`W0v4#XeLsQnvbqS|AtDigF`8Bh23uCHPE-J05$DFdlue}a*NVH zU?Z<09>8D0KHE=V;dm=t7A{U?{(V57$R-g}I&fxHvv-n{w9yds{;6wm=c~tmI^snRtu=k`1 zj`42^CS?f@1YRMN!|3Dh<$@7EZ3}BH^DLu~GsQFTjIyk0@6V50!XOJ`oBJ*2;4VL1}^Ay5H#0Mb~* zj$qCMcfK&nQ_>ZBA9DvafRawv(Ld8=6a#4NvKkhkd2(=mXX?Kzr63fV;qzZgH z$Vv6kztUy`+R#M6Q13Bf*k%DuHYKqWp(GB90@+LnR1R~DcHYlF!E6+~5iaK$g~=jU zwveV3JydYyYHko62i#$1mMiy|s6yz?dCwl?>Nvr4D%B3;LR5@&b_T11wu8Kac$Zj0 z$Roy(N=e^9V(=;XGJb(Q4mJ#PgW+uFfK&*|2CxryIrh1T#mH;e+4w0Uo!CH)V4mk( z;HB^;c{8}loIBhG-hMuY`;|S)JkQ8rG_f){+j$ILH+P7$fos7F=T(5yce5Z>I3d0! z^%ZXxyyK;ErJN<4N#N$e@g{g$_66pj%rDGo`UrhLbseRd=?+XEQw%NZKBt`Zg?5gj zAYUf#AS6;UsS#8bV>6(_!b!)mOk6cdL4nXx=m)6fG#0rKFr5V4T5J>gGS-E7h2ljC zBwZ&T106&GWj63-SO8nb1IiETPl}w*rp>2w1!24%Ru_lPN@o<)k23;(A5h9azb<&D2%oSCke8f_)Ki$rhA3gk(ZGaX+ZJo5?cDL8>ju0ppBl13Xa(%)%xI zBqv)Sb+AgrFi24C!X6|95jDghN+aVMr-IKFv~qXzjL*OY zwUhf;utT^Pu-jt6IRQ`bQ`97WA%)8h$Un)|l2}o_I8@XlDil2s3ncT!zl21dnEjaT z#A;_58TT27xLf!UJQpsOH=BQpcaL?F_7kMG)&j!OM4wGN2X?22oKPm3+)lJ0j*;_d zROT(v&&#A9qO1aj1s!n}VIS!?>N$EDeS$uZ_7||3jI(Vyt7x+Th5nXNM%hgp5IzzR zg$E?r;=ja|q7ULwK9*U+juu~(b;~u9nTmxTt3BVUFZt$ae>#szAG!VJli}E{yd1Dc z;lc`2RIB6)v?M@iAsms46lK!eA{X%)DUYw>FA^RRo#Y<`evil0qvY8X72_5M&o#3O zDP-bF;sh{j}`T0$ci}A zudpk4DS{WG)nc0HglLg)Qs^tZ2MG8O&MQs`@C?l4&k}qWCrWA3brQ2=hEyTdOW(0WFO==WozWi6;=vAhgb5=QiGVs-wYf#vpAFN*WACv+0p{>NfBAJN$d;$ zs*$~fIg7rBeibmzC18)a0*q8uoOkSP%obWMWq>lx5OIIwt^s#!I(0YY39#1W)9Zm< zYbVQs^%V3re(;7xC8BUHk*60d;ohOkKJT5EN0XLpOk)$kjTn2nTb7X1q zWZB=q0pH>1~IZvK7+pvPTZiQVZcpK8LdqxOSd#{dgAKOThSaO^^oM zQUd}w_a@7Qet{mwtmFR9{l>b={Qq8mgEPpx!O!A3@*sjN@sM<%151IEp8|%$DA_Wx zC;Nl|CEF_f>K^DZ=G^7p>}qzdSKd{mNSY--WErwaRg3!v_f0-aLI&fYhIzhX2{f=J z)!siW85cR~K@5K4v`*@)QmQ81`aP%IJymC2eUvMm|8m6224omVvhtcf>(3S$DLrL~+qBSPZU* zU`6g@Sg?+Ai-b;6H;0vuNQXxP7amAlK3+m!oSH%pfp&cljvS+#?&gHW0-vvQa#yCVBf!E)Z@@Lcpv zfZ%QC9tAea$D$VDUGXK!4^gMsOM(~na&IzEGamD-g(M+L=pdXg-Xm+1j!UwoJ&rvt z2i>MzFsi4@R@Jc6v}C_Sv9r?gr`pLQUJdoysfM}#r#vrraI|x*Rr;vW+Kc}0beYj> zVsiarHKUnDq1Bm;u#chLniH}<^$M>*|M%J)%}nw-gqEs}0Um+Y({oIAyH;)k)T7#hk0!e>B0X5;LzPtmog4&)AG9cmTkUjmf) zoU(>l%snb(OH&jUz&GdN_*Jn?{)c=na1z?dHcB7M!sT>%s{D6{^@^QNN~OkSvD*fZ zT93mX|9ND1+IYNoU*+NG@sDSQXQv0xWruRB(~xt%v%lkVhg|s;`R@u3=WVV{svC+p zIZj3frpHwxD{+Bzg>09@26?e`So&QyDmfuI%Qf+ih<`aaI$m>fa=h*|>WOr~Knal0O7toNd8zWKfJC+NHV4ru=N+#mG8H^%3n`-q#+<4={h65*ru zJmZLw4m&`lY%x+UcaC!0C0z*i#WvtEYT}zY{cI&Y1kB8ykcWxC@Z;DNbUNwdpQRjbYpzSND%VNlutyQ=e8wH_>8Boc zU8}sOa#IaDo8;coe-t%N>z#f%J#ykGRyrI|pd8-F9!dU{U3Z>#@ATBFUwOdXz;mhI z;N`1j`I-Ha{UF*Zf06GQuTx&%{ak!4HNBeeenSCd?M0tc>L2c%ZeFfeT|cPr1l2`v zH@O?Tqiy2HvJYmv#s|elgl|lM2YZIoLR0lj!*tMW?*eaasJm`en6b;50J zU~H%dV505w-Adv-hz&nFxjl{X6wMQH5Vf zd`xX&T;wGIS1D35;!x)7?tH;H0r=#&%9r5zeD2oly2E9oDnq#+*aE#={9W~~x7=zx zOd7M+0=zGt_KTm)PwE@$!|*Bc4e)vGqtaaQa`e=wKY3WXepXF8e^9P<`>dJiUFA*C zP(3kfw&!nZglmv8S5@Wa=RVI(;wn&GP$noxRsXr1aEWq(x&P3-^}X*e^)Jv?`N8~c z{7(da40;km2%fFW&>aap6L2eFdGJh~bKsW%ufUj~{(vgKH{Ld$TRpSYXVr-sZr~Ne zcawYaNap73SNY9J=s2LMP5LtrpETDH7w#YZr!gh$MxZgsBj%OyfpM??QCOBv>XqyL zSw9w0>6h&@<#|&XN! z?hV)W1Uv}%9_SjdCBPK$J^<(U)NiYQgx?G8Cf{M737-fbM@^%rnFw;f$kWct*6XOo-b<>!pjLavXfWRWz7XHfem4R<19U;r!K;IP zLJsSV;dc5U{cjP(@cZE}^hZJsA-jX8!zA2TOJGAVa`b-*U}C%?}@E?^D`f z-Bg4sW^wwPinCK9Gm*Q$uAt&&;>)B@ zrO0}Hm1~Bd@sKGd=YHmtDJI#X;A!@v^e?GrlRw0`Merj?QLRxl!}f?;{~dnqz5?%` zTA-u^-&s3Nu9v%)pZiYLe$`Uot=y(s=4S2kPSGqqB^Nu*P(qzro!+Q&T@yTH9+%yB zs{_3bdau{64!9ab^uMjeY5xe=r9y!Tx~;+Cx+Ous2M&SPd+>eSpeqc`)!T&UN5Ud^M5Y>| zq6?zW$C!)`QB~1%qdTL;vAJ;xv51&=v9!2-@r|+Mn3u6HW1FL6BP+tT=w1dc4!9IJ zKk$0c`{41gpzv2wf$R^UJ@b-Avk6_`2%8c}t2%Cab)z=ybto z?%}MZi9cd;V{_tHChbn#9Gw!H6MQwOJWv_3F4*4}rCS?x$8V=^qPMG;)KlbTt=Z*$ z$Mdm@<#bWy>_&87p(*;2NP}TZ%>DQirs0J7iF*^f6CC4fn33O9g!qbGyre>2iVNufeq?Dxi z#K`!^F|Q)Oh1CU*1#i<;>Q;y7^qrCU24?iZ1WmSE*+lJ|@}8R5`gg?xIk!p#4Jmcj zm2M^1^IL15R0UL&RK*oWWUNd%nhMD{nl>0;8N-QAi+U1aiW-i%5qvY;H7rs0K_?6x z@V^i+rCX?zX>WPr)dck=&2FD!&kJg6uZ=!~T9_ZiH^jeDXY}72zzs>$&kNfT_EG;h z{BGo-D8AvD@r?lz#V{bEzC|95JQ-OR!47u`YYq7o>Y?w9&_)bKwnv_c*b~tc)o3_n zxM_G~+#iiGLXGMeN&G)a;VFS>ri|wF?rlf$Rl*G(La%w`xvh*FP z_maxvu||uCn7V zoK~@~;q>A&^=s+_&Gp6E1s3_2ay?RCroKpWiyt;&OvABvBX=4~qn?MSg;s>x>+>TX zh9h;m5M#xF%M@bfPdpY}%Q~ zNr_6QWd`Rg%=5@Olkp+#Me2n#MVe&5`QMWp9c< zsv#aJt&WfUPwV^kZuB1`mPA#*|xhJOiv5;mYa5u6viDPXnV zs(^~%rjSCNP0)Dgx9~NQ>my$nKbRcjd8Ty z-prR-McJQot+V^Hn$n*nKT1T#uaDguvn^H<`ys9;mLB^gfuA}fb6sA9Sypqe(Xxr( zP+M=)Y0>qnJ!h$V%inF*9WC93y_-6CO(TtVwa7}>ireMoMXLPu1%m9I8QNq-qLT@2 zVw=3;MbY0QC&DWub{Jk6PZ{RvABJM}^Ml{}ZSa4scQ*D$)`oqH>@=K=d>)lxj7^ZH z<)vIswNH7OTAP7Ook*r9Y>J;7cRubyoMkL8dYwTS`8w)T^sJbMnD?>AP4dK5$=#{@ z(l2J7$aVu&mOOhT=U{GcepR8a=y}PulKDl}h2sUYau4LcED{!8DWvCNGGC;LllLT1 zP5a`$$9E>mlH*cC(-~>6(-;{Oxp#{HsFc?&Y+Bhev)N{8VXyr_dH;-#H|@8(xAr*< z`7Phui|)GLKD5NKes06%#m}lr%5RsV3azs$Q!TQWrVS)-NW5q&jcqrcj6M-JBW7LH zqwv`gZ2cntT|r64`zB*7Dkdt9U>q>sOK?bgpKHj@%+O`d$of6YoHmt;Pr)Q96KfKS z6NvHAv4t^*VkhFt<8u=Nlc}jw>H9Lj0y*W#m8IrL+ z9h>qw>3QOgglh?niOUi$Cmc>@rz^5ua-Qc7=hfvuF1S|su$Wi0q1eKVEd5k&Q~tbS zW7%EvEAv^ib&)(bD+7|8p76^QZvqm*6l2EwoDKO|#U*9GY921B>L}{w_jvb*5A#;S zhw&?@qs8OwvEN5VR+t8>mp3lE*f!KuSl?fDtKwAoCG*yT)p_(x-;`B}NeP&Qp!n+8 zx2BHxO)=E?JIUhIg4B-WeW}gq?Ci${*utMhq`Zp4=Hk@_zY4At^ydAYeKo@=<*yW4 z%8iukDL+%A((*F0vO990=35n@3iFC4z?eL`q_nuYMt&h>#kfjXMj6&d*${~;mFNZd&XD&9y9K~ zI(>vZ_;Y}<>|59EHbrw)lW4K3y1M*G;f-ur+QpQn)Dy{L2`5rUQcotkrhNzN{6|(u zE+-$FdnoU7K}FGE@jJ6q#m_2I`K@wB>Hb1~&ce*Hj3*fnGIBDlvU+pM^Q8Ik{3C_l z#kk^=#c$0_v%Z8>;%xq2R#f)AY}_1LxFjzyXFAs*_iS!a_PNX#S+Jb0g4xAmWdT*s z>$kSHc3JmM4D=1#ti+G}7=5<-@ml-e1J{g>eq0$pd>E*{s{4YwYnSHNudTmYwX|fU z&?c`a$17tj(>-q>dv>N{t~ocTAhC2|X+hDtf}WxT^Y!wnMd6KBi+)zUuUt_4AipqQ zm3t&RBF876S%@pjDSA~TEy^lRC_Y{C(A;9KFjtjEmRXrci(?Dk=FQ61X7A76Q(SD0 zFD)v|sDM?o7KJq|XpwdF^)Be&KQw-pTvehMS zC8@=Qss?UR1QQWJXDKNul{oS#_DLw63JTD7>IQKP7KG_s@Jm(UAE{ z`J<{Yi>@?;GeoJIDVUH;)Nc`1Xx=@9ntPTGkx9 zgjavJZf5ON)q~QaqQ%9#&4ThvHJF;F8d&AW%Gj!@MgKHcv{o+pV^L3qdzpXP{qn#v zyxF02Rr${H#bx#--%DK0k)>f}mSvC1K9zZyD~iJl{R`ZRmXtg)SC(d$%`CU6cCGu; zWY_wrQ`B>}-){N(;gAv5s^e>f<5$+^ueDlpV)fjWkmaX)e|2o_P`9NoWj5We-&OOy z;$uZ!ML<=_w8==BliU;qou#ljX5xwWTM_f0f)e%S%hjE>?`x80v*frdn#-;yaJ`=Jwwk zn!7S=^xJCd)s3r#qjOed4wnwg2St59m)Uo5+R3eTP1FYe2HPbaEzjHIItp4Zw3<5q z?EKz(rfFN#tmf5CllANBW-acoy;yCoJWzh9G{#(7I=9@S3R*LNk+4DA+}1YPEm(GF z;M368m8VAEuhNfh91*Qx4Qq!Y2X^;8>Rr&4*zUiS(|T`db9;AJZ`Y;{`%ZGt+^(Fq z+Lni{UQ2hh%xUPUPpg+Kj;uXblUVt#;!?HG;-ZGKCS2>rj%__#`hy3J!|5wEqxPfp zl~XJ9!{VW`k@Z1bvkw)>pIod-&N9++*{r4)WL4A=^(TzTjn?2STb1u zx=vrGu7@_dHCwmFx1H`B>PhR%UA}Z^^9snyxRtk8{2C4#99llJKY7{d-khG$?uu@F zw`=#}?tgl!dRFz!?Ur=mJAB&;mNvG!HPtlSY#=wPoAfRB+b(zB>sj6BIdEn0!tlJ| zlfyrTqX*wCXZP(~7S-#}lhpmNyRzFB{9g^7*E&wN|7Z_x%WSi6``&S-+p^cUuW_Jz z`QL-grB_HZe{oO9^am?y@!@H_qq4&>^smG;Q)UA E2g9(@%>V!Z literal 0 HcmV?d00001 diff --git a/ifs_samples/grib1_mlgrib2_ieee64/gg_sfc.tmpl b/ifs_samples/grib1_mlgrib2_ieee64/gg_sfc.tmpl new file mode 100755 index 0000000000000000000000000000000000000000..4f8371064cbadc574de319a6c9e6418c55e59124 GIT binary patch literal 26860 zcmbrkg;yJ0)Hh1q^{KnNySux$&{EvB#T}9mf_pp=h}*bDplE?oye`z;-P?QK_q+G| z2X1E(%B-%L({uLz*=FaF-COLuUw5&yTbAgW_%Bfd{?@DesQz}~`~UnI{(rvx-_I^x zx_0lfXwjm@|9j`Y-Q@27{@FQqvH$%)KPTD$?h*b5+*tH~{{1k!(RS19X4%cRTVl5k zT)XV{+8wfUuyeL^xAV7){NF3lF2ybfT=M^W5qAIIRblu4@B06qL;T-o%m4RXDRznf z@7w*sN}R!p4uO^J`rkD!0jr$_Rz2Eon4Q<<-idv-w59eP?0(q&na2qCTKB=O-(221 z|8d^!+~0Ym^H%3@=Z`LPoNqd7T^wEaxJ7vp-cNl5zV^Pf?`*G5cdl!o^H-<0P9L2o zI?s0g&v~?SH|J~@vCBV~QO-|X|8pPYIm7FVPqyEG-rs%d{nGri0xbSr{O))Kxx;SD zT}3W^osBMsU3kuQ&YPTfIv;g*b>8B1-F1oE2G{9MKb^ZfJ#(4h^3bKteT!$CSE$bf zuM-|4J*W8F1wIV)3{3Z5;%D<+=JCzF-eb9Yl3SU_I*&{4>s<#p4{+*zHqvQ<)7Z27 z9ltm|aDMM}%F*W7$8qtQ?4vcOpE^OVGIy=l65kU(X}FU|vbFRlr53}cF*Xu4%T>_kZ99zyjJR?2x!O`>V7iZWxZ~v7u1!o?d z$v7Ezy6w=Gvv|Ej$bk^;x|5@VfV<(BrY?oLUd&lukxo2kjef8*m zBJDuR_N2X;r!e;%pIUFpxrd?Q;bYIIo_ilU^Zf7d<>7R=TTFIzXt+KwDPUs2lE7g; zM$Zg)iMyBQLoeJb(zC_A&|`|H(fya3$dz{8?z+VFn;YbI%RS5ele@oLo7*-wlj|#& z365QlZ#Wg_d%#EM)p7jBq5Qpvcerf(yMM0Re%~T@lW%@F5<|wlixtK6h`t`PFJ^VL zd(83xB4lF3*z+|JYeQ(?RIhlKXm<}cm1~5X;p_+JT940O&fZ%+4!KYEPy;Oeb0$bbVzueh(%{beGZR^tc;o-^)vQvLTLP`1Vw14k3P`R`$glTVONEO)cpI@d`)JG>YAm1@p4HmF+Us{B)1!~iB=2>BU4zVLM%mvxImp4)haVoq60x6hpQPN%7@sN3 z>X&sn_b1OSEjr~l_gnH+Rz!SR96x?(bY1-VgfR(q>;c?3-hkwJ9J{1Xk#?ac*qKrH z0?Bj6^YMZ6&c616y-uZ|7aF2U#8~h#p{|ht(rv%u7IzyiY zMusJa{SHqFUJ|rFV4d$&SC0r`_$AlwPB+eG*>`mubre5~ozlA2pYiaS8aO}r<+;_a zg=gKIpE>&{mL|nUHM5aqJI+zgr_{q4cXI~j_RagtJD52$lTPoG-Zgb?@?2I{+9ocY zay*fp^pzvvbxB!}YM1sotsprh=@*Q1P@tE` z#(+?tJnt)>oo+i_ulkP+I^$3IuJt7YD*_%w<|ZtRv#@It(&Ki~Pol7Ip-{X$=QtaJT(_OuU_6dJ=%NJy&Y zj86Up_S-#meA@A>XL+ackII5_vhyg`vNSZcCiPOXAbVie)bvPh1MfgeWws*ABg;Pf zc>3Jz#LT2*CzcQEUQ!tQMB<@%BHAaaf5ey2BcWQaFWy(q`S{Na(0hgkHwGPcz3;ft z>8l6NofXt0WOhhncuvTg1S07k*OBAE*_yoTfBGT(PP|{3F@eXv7b%a>2erC?e<~Yyv(Vo8*QW<_Oa!w2{9!++R4NeM3Fhq}!dKtf+JuLB75)w_NY)t>+noWWNU5)iW^Miu=jwx9c)h|0v^jL}&KvNvXL z$QqipCTD1_LtcLF{ahtKt#De_!8Db0z5Ktdo5|A(c4cE}mFYWkwb^9m_UwS%&b$eE z$8%frxP|XTKE=yR9hIX?3ySv0Iwf)WooVM%%Qz)0nsqx#6>p6{9eXb_HmozGXJ}%? zfS7K9w)20^yMzV$9}avMH7&|F^njwZO0$gFOVXWFaQ=nTAoUV)t*TBD zP&&D|R}oA6ub@8nbyjiuWbSG1j|9gEeq>wpmvh;HQ^M~@&y1WJelT)vM9=uWF~=kS z#Ae4-1!hO5M*WPj#@vl5k1@x*h^>iji9eMf=k(*0aQCEKO>Ii8Pd%45J;gbBU|eEM zc>L|uSt&@yOWtc%VBBc`7l9_1QkSn@GrbP_dHTKe+vNQ%Fg;*vu1|SJ(p%PHj+E<`@`-mVeR)Po=D@5WIsAfQg01`u;_ZT=g{6gEW#a{dWK5oY_Qza7 z{_iYqMz6d*InVOlax`fnsW(zDrq&35s8(w?XkKXYwbM28HG9;Tl`rI%<@=;f{K(v@ z^mpmq+ZReG97sQ?q`{SJu z`1;)NfUbTC{?-6>z;eHz0Z?Gq^Vh=mM!+$r*%FR{^NsU{!mr}L6TFkm5DgO43BrZnCBFr`3((wY#rGtea+wTOmMw2a-iy4>jAfbJ?E3uY zS=Bjm)oRTY%_|LG4{K#6kuliNMVX_xU7{&!5&V{A=Dgsxu@A+O;R{2}QC=aVqtm0l zpSv2qJbGGGX!P9pv$0jN-(snNg7aYs0i}UNrAl>h9DBY1cC+WVx_oIWfFzta#Rbo{D`mksUoK(iq+AoOg6w zbg$67@S4!nkfd{+=Sza;hIS9OgbLzbB>&-bCLWKy#Ij2s&YJ{k$tBg4wlc#hV|Yed zW>wb0oNI+A3hxM6vVMF^X-uiV;);QH2bQg4)jT&LC0sDDEW~Sh%>zyZC8#YJ6pKY?h{= zC_9ap%WY0z5`KjWqdz1BC(sFa(jIPDA}fIvr%d>ev_I)3Yi8mC)@fEaYY^L>Go4kD zbd5ccb)ADGA48>u$Ze&F(=j~ z`X|J*TT;8Hd1VaE49{@Q49MJ=Ez7FNhI5>AY6@QQy+l)lPen3elk7?`GuCUmwH^~E&|4Yu|ba31`dpPzSZ_d@^0m-A1#oYc}FRngi7Oy*x zpL#ttENx4AbH-5co*7xO+41S|sX4r1DTk99Qbu#+$swtEX-m`kag9l~SW9eN?8)do z@k3*7ME8q47PBnIE7`=`l?JEu=j$?*NgvoHye+BIGW+Gs$?cN!IL9Y9EGH(%ns+0A zMgA_q4zZVbw1^b%mvGQxOohxqc9|B7{c@5-EJF;GZSoR+*4nEw6tjvW#5U1#QISw1 z)=OT9FBV);7!0#?R}Ae2n|_)0ho(~TR{K=-Mfps)t7NXS-mrjkS~N}eDYGQ(PtKcy z&$&K1{c_P9HB+c<*1?!%H!%5fuvYictuhs z_7gjaH%N~cTrZSqwj0W%P2zd5ACwL)hHKILn!Ct7<1zl;{640y`knGFGMrn^`!0oY z9~3MpED~-PUF4riugQFqdM$SsKT8mme=D2J(eQ4jjLUqN>z~z^H-PQWZe@K)vQPTL z8p_ruA51Re7`P)+j&RYG3|>-70(Wm}w^T_Qn%ZY(+8!Z=}S|Wr1NuM@h=G%@|P5L6fWVr6{ZNY z1=j_L;7H+j!7WLnL?Rh4t1gl%w~(W84zWSyS?UXIFiPMr>fd^WTLOsQadH*g%DMMwC zi*AUYWW43Smd6VB2{#u0&YqIrE^n3ekzm=eS%0&Q89lP5=l;!lkW-yf$aUwWvL12D zI0HD(laHq?1HO};vWw@E!bzQ&mXy(uyD;}QP*2?4mfXX+b8>@nJ90PXe9L*7Q57!&++kU>vM=R&=Qw8H%gIV_ zOr4yLq~FMxkXp?_v*JXXvX|$#WQ@+N&m{{s<|pN{Gph50g~{SX$z91dVY6_cKpChQx%jB)xFYosBGGiiV-DS3l;n+ zf@XfPz)SEnQJ(lSyeSvU|83lA$z^VkGZ+PFK-HR@Jd0#x%9w-?tQ*Bu()04}if$#_ zgdUl^g4&|R;v>a$H1WEZ5#q-2fl4eP#BuuhU z+$M3C?gV}%O*~z^Ldq?Qk!2S
            ZR<2P-N@n7kkl3Hbw{=PCz=coDvZ`GeveJYJ8 z<;or_{3Mfe52SvN*^xLuwoA^p{G5Ui(_!=bGPxzxa+oSNG(s~dr+6d8rX@;2t0`B4Qw^9}jM znZ6k{nZGh$XZ}u)$PlEx&sd+4lu?~|IkP7BSK(g46#-v(LDUs=&rrTSe*u3e;H&b& z&HO?9<$`5`tNd#I+(I_LAHP%3i$6~!5{=E+!+xD{D!H7Ml3J0>us%gl8RCM8l0->A zDb4ShKcR4zV84hjbQ3*L*sC-1JMugWdzLIwG^>wjT$FcNv30nkYL6dNLexACQW=zRL@oxUgg6Sen zzDlyaP|ZgRLj~PI9mNTt!W{m>{FAu{^8B+~fg)Iwvo-5>4m&Thz?r{N*j4N!St)jx ztd#5#{}HE&MhbldErM@?I^j;iTj3gEiO60QC-M_b5|#?L3)_YL1kZ*0h4$hK@fP8O z0!!|+*vFhZDfaA+q^eX1xUmJs%T=3Y!v)i% zmleUK!&Dzs0`)w_pOR9!wy3j+kzJDwFZP!9lrEE{7LAm}$@a)D6gd>VEl!u$maHi4 zQ*yi{tK@IV0fhm&122R-wcg4&&3=tW3CWGhyJ~0EP1SzYN%au*Hq|s$CNx($Qms=B zD47P{F-_BeJ(Ay$-&f1|AtjZhKW-*=lm}q%i8g~Uqj&UfZs7Sx=gwr9IE8)(g54wg zL@$Y(o4-VGzM#0EE$zMFbIu=robb1(Yw38oQ(?XEePMm!@BGuE>Eh+0fua)8Grp&w zk0h+fStbb86gm_h6i}k6vd|)4(ZS+zMSo=vWb0&dX}Ba^{9Ce6 zvQyFzFky*!f#js*tpt+nl5`iJ7i|#_7GIJK6Auvml32yR#O}gRg>CtAejfLB?(YIV z`v_-S(u_p61cJZ@^eXm0@5s3)t8(t=`K;rZ!4b2f0k&~vr2f1NX2JmO6iRf z$KuPf&Z4CSpPU< zlGW^=83w@&^*L#%YJZ7H(ObTv=!~$Bps+wG9U+;SZx;U*o|io-9V~Z|?kYY}JV)j$ z`6N;ZCBh*hJIPCFYSG@JXYv$9s)AqQC!bin4b;>z*%aAyDK7Juev*!r2&J%8Bt0yh zE1fR6B=HoFkqD%%QjKJ+q^oSCY#ca|a`77e5B^eqxBP5*pvadyk+(eV0!NW)Vo2$~QcCVx%oJTN_K{yI{i)D^ z)zHcmWq=~LG^cdBqPudaimmKWPFADp6xBh6NcmR9XdAVEF>eJTyJ-kQ!r?!#n_<23 zvawxrSXHB*q`IcED!o*z)J@tt?Pu*8!#+*1-i(d0uBj9fM(zX5THU+aP_qLcUBwvV zQ4zKo>R0xrVT>sw+Lyb97n@$fE=x#bhsB0QY)y%a9US+C3ndatx#+Xa##(ypaz<@bt1WFMuC@_nUmO0Oy&E3*}y zN^j+6(BajkJ|%u7tBWd&mleG(PAfVhwaFr+agr61mD2uFM7CMBRAwj|T(q^wy=Yg_ zZJD!lxpbxUvDhZODcm9ICpsjqm2<`R+;yqJIpxCJ^6#3j`ss$#hHTv_O_PUZtFpb*06M>7_SIU#h&oE}7LO>g_7MDqU5qUa$P8 zC{^Fmz197vj!clZI~@$m#|40)Yl?64rZEkCrhDoFC zBNUNRUIELVbu~6VJUD)MA}{`HYA@YiO^PZ)=3lx*(MP&iX(vAkH19WYYROHxv(l!f z0Zw&l`hvCQDlV2@D=krUQ>qn&>X2%qYPss7TB*LIg)}2oBSBBzR(2|nD_HUzd84AY za+0E~BvvjfnOL%}WSqQFE|IU6$CezFn@e0vn9?nBUU7`0i z1LZ%^cIqzH7kySk)i%^CtLI-yZe4Q4vjc7a(K_k!hB86H->~gT2aHA3+pO=d@zfsCL~3WLC#sgIo~w6iLN$8zOU*pZ zJoQDjMSVg2MfFfstQw${sa~rPrBrdcbh-Sae0y`H%cB9W|gEB z?#z6Y(JBux4A;Fk6`5?t2;)3sPs2mwAY;1LuUKm+)(2{5XxxC_n5FKe)@t0ey|i_@ zvAU@`FI|S}73hUd9ZP>*zf&jBzScGBSh{z*-MYit}}nAA-nRdjkc92`xZYl=aet86;j=qEtU=D8cIMsF`LbP=G6=znNO%L7%LW3 zhgOOk4>z}2eak?wUQtk!-9%P@sPB4lcn5N|q3v<&@TMEhb6TG^iR-E>zM-Rv*iuF` zTNABZrS8cu5JgF7=_=rie@L2(kfJ8p9C@9zRpwt}P`xpZG(0fPFxi{frZ=WCQ@v@5 zX_aY;Zk%DWVVb_sm}JBZcMXa9Qo|6#0@FD(zgoO()iQY9DLFn!BnG%0|T%1>nMx9&$zTt>PU;mx|WQ8jF&Py2{o` zPULsdm>5tJty-s)6_}Jj3A8eSUyRA*sn6*Cv z;!M*I*Ei`N=%%W&)lJ56#ydv2$==xCILhd#pRHf4o2#S1`!8#pG=DVq!2d7ROArD* zMp-Srz}~*HeXRIV>1VAl$_#xBHP&8MR+)R5XPLeAo2|$i#rRo{md&ybzHktFYALV2 zP$jE5d{KUJNAv3%Kg)1ya!r*j$QD|;!$3`TLGDi z=y8T>)fe;+y;ieFe@b0kx>DOsx<=Yh;tUYrlS-yIr4BSw@JDnG>WHKxU*Qf&0tJtP&YUc_JB=r0lWxugFGP_K zObMnnM#8w+5T!5CDRmchDVj2EiN-_aqGT%>rL!WUbbje%#l+Gd^2Xw6MKg*{7eyES zEY@gLnmEa4=`usNl6Lq7c=A!m89D=Ph8MwkrY(jW$6umrV`5E;Tk<8@4petTxu> z)+RAeh>->lYcl-VFcrx%O4X&tk=jf8QhkP|M0Z#hhH}ZxSU>Cpb`0x+I$-P3e&{yr zAo?C1h2~?!(G6%6=7B9iKVs*x?pQRo7FD6~*a$QjbwQKS=jl?kcQxPCJ5_U3E0u4QSxQPZMKurbMT|nEa4xAS zO;oH^gc*ZP?&1*1XxV%vA8A2uBU|BHuq*rk79*>m?$9yhIASsVH3dQ^p(Lo&^wiV@ zO);sBtKt3VHxxmB!C&Bd*cYyZCqWBL7Sk@{X5)B+zu|#?ug+h;PQOt1KywOu3A2f7 zX7vSQRdV&o$}UwQH9cx4H{>?>*8FPmZJO5nqqdgRR4lBhtoUSODqN}zwTl``>Is_L zAgGD1ryKQ+r7cX`(zf6>-zy~@jMdG;SSFi?(w_9KrqsGkjpG{MUyi$c`|{2DH+8Y* zV#_?sM}1J;G9r@9Dw{wA5ob{y>Ir=_X-(1aFZ2R_of=DYC-&kfxtAy*HWF51DLxK& z!&!J3?u2QHp2QxU!lUu$cm**Y*WqjNS=eVR8GC{4L~mnm*fCUziqJdQar7qKfNX>J zBg0`HwAd&yAiVvj^OIk|!C71$I z@6#+bo`jDnMi&Xi-?hWgFSr(ei;suqsUi_0@&R56`5RBeSCL+@6SM=0fV&~SXd2W9 z=0lgz%cvZcqF2x!NCXm&X(qJl;IC&DLZx&nR2e zw6$V=)6UCFo6fczZnn0hv@EcNSVvhX%S7frBQfWg7gSxobn5blW_`oYi}|%hW|pOo zwTEqpwZ36*?Z!%H+gxfqrNrY27FA9T$Nv$-iFec>dI2?sJVho@Bo#v5BQ*p@)DyX6 z1Q|;nBR3Ixav<@CTu+7)Im8#@EI6w?`~lvC7vtOUG1zu&E0&M6qf^ly&_m=cngt6{ z7%4*bLMt*Cm^PU9=^2nMYIWCjd$fU?P_7MB? zn~oss3@eqL(nOF=tsw4Fj`$UT_Z9dLRETC^$FVV(142PFP4nT`hz@Q<2V!fmW_&Eh z#r9$()`{&wFk~un26_wqhERjrP;FSJe_@F zRSmx(t*J+|LyNwnyb0;}uXSnL*H&B0y{798p|#kh>6f0hEbN$fWkg40M{wEO@@35U z25aNOOFu83s=HJB(EP!IT1Q(cYaeqN{ha#Dd@fsi`B`IdgWKh@iemF~OM~UP6}Dcm z=^KvKZL3162G^}%JgFJf4EhM&i&{q((%sD>ax*=cilsVeXBwirPry}BpmT|*n3Qm&Bc~sS`K*mleVk2P?xFyWBddC59=I; zCm}rJX^m7g3u%YBu$y)xz8>pCM3GK}jXX=-Ax7azSPz&&w_;jyE7hHvK#sz*u_jE4 zyJI_$cgQMO1q!fA{Xl^#HDfNkuX3u=RbQ?aSIMg-^&?wq z+orcYZob-*(B7>hxZ_#J&-QoiVB~(uyDq!lp^4YVzvkF+tK&o4?V5t}8_fsnUF+}G z+%C&DSDB}q*PB}`7Hg`dgLyzdq5m?=EgR|{H^tU(wH>l3ELmXxUs&hc>}&<)=dDq7 z&nxvc8*6qDW)h;k>2mrJV=^b0n;9QEfF4XQqqVdK+@DRG=}0PsnoV7xWYm7}wU;_d zWm22SXOu5>5S)X8=pYh^)p#d<4PT31!nUA4(N?T0mX2j%@37a{0(3nRh71QgaTJn3 z)evTiGDaGdhJAo_x&j<-*L&)#baV8pbSm8^!ye-TlN8zjKSbA~A!s?;iZ3AKqzLp} zK0a7oZs-D$#y)rk0TUF{jgF&NlG})C{4o(m>ga*=PwF8xgJ>g`;ctnd_#t#G`~;Z~ z^uY|s#pG-prT=SOVd`c4W#Air7^?K`h6j~Sb!4Tss(byQ`s{_Nz==)?`~%@ z=D*Y>dLQ$MQJGV%nbtQzBQ?`qsS7lVuBOYFX-pRVk}9XJ(k^rl>IXfQN~HRdXF%61 zqvla6s+ycfvdK_#Bk_z_0~lckei2=aJi~Tj)9_Jv47Lh=hdx0)kQ)deDS)-mYrvl) zfNr^D@-qdRa!qcgZ^psKxyEazAXA1Z5$KyBq!ZnPzQ-5hJ24vHPO!(`RJ&6ni{|9?>FJ?B~kGM)k5juPnhGV|SHJF0m!kb}F zh+~>#>Ia2GyP-eOKvSNn0`89gt1{Jgsoh)ms$pwm)TNKDpDxa7?%LeFv9PYC$-8A? z+r)PC%Gmb(Z5=HkP2p|RJ2thyygIV2xkW)x8ttWbW%;&d>r;z;S*;DTd}LlRKba?H zwmHDE%sSJ$&icak*7m_#e&L6u0%+OYR;@L|*576=qstx2#@V*nItZ2Zg=GtL(tN}+ z(6Yrg!TQl!VDT`2qYLSS%yecX^@f&Hf9XJa2sIy^l9}1e45eG>BUB^dLqb$2C84|0 z$_ON-BdvfVAy;S^ z+yj0Lt~W>r`U%Yhm~O@g;&p@v{szBJx|21;L#i7sXI9ZW=t8E`%%iW66PWQ(0wg3~ zfDRu`{QwovpPWS9qR)d`*<^NRNO}M{m+X$WU|)Ox$lzhywn ztojkHMXd{(dpE|{{jQ6t+h?tyUex`xZK&RGA*RAmebTzql5IZ6=q#HUy;)+uY?WI5 ztctR+wz;^nYH!(S>v*%=vd(hc5@WTqd07)|cgxysgU$JtpG=zB*|OI%lrdX3S)Faq z%68KfGnUDrhca^dEqN7SP%SftK0)PEx9I?88>40pGQF5Zw2F>pBI)C_BfXE#rW^n+ z?We|*VPq>Yh%gc#0i!$Og}6O-7jwdLFh~3*z7%T*>`;i!2WJ5xZ;)2>D5^y{Xeizn ze}vcKu{e)#BT|VOq?Br;JE;A{ZBYB$=!H~Q`h$5C^O(6oO{ad6{gi$21S*#Hrs{Ex zek>Ubbt0n(q2ViilKw&MAa9b61RFnqj|c3-0&02y7KFuM)3GCH2>cnMOzTaVrn9Em zNHlrPl4zS++10YvcCN}?yRxdd!smix)%Ne$Wne{9 zZN}w+HQTJKt=G(N@h|47X8)>-7XvH^z?YZiEevJmS?Vk|Ecw>2=A&ghY=~{OZKqXR zAvP~#Ld?&Zzw~GttlZkw>c|9Ixt1o2t9i7!pE=uHZbq$JEx)X1Eqvl8=|(hA?o=}! zMkP__C@-4Lz;qLBWoFXH=*e^<<3hcpSDODZ8sHSs z*}B*Jm32_tn3d*MP`{&rzKpjnu!hjzm{HdA)?JokmJOD2Qp^azoebs;{gM1k=P*C4 zJAhW6WZDnRz*7qtB2IWGnTMzE6#1+?b`HO9s;S=~Fah zK5psB;Pg}`iT+Km1Sd3~Or$F4zNC!ur*`2&GJ=>)iK*4ZbK)uSmx#nZ<5oP32qaG8 zMywi3#4PA`I|gITnE}9 zkJw6h5K%-reifHvD0&5Buxl8E$CAS-$V^xtSPwA@^Odqp3t26xSY{R5BCXHNHp@0k zk+m1~nh7t9w^h>7MlURhkXzDitlGlLcH7GG{?=dAHD+9yv?i0fL^YW8bccDH1+{3c zU95YlFj@iFbhbrgiL^v8DAh@|(Az10`W3yAIY3E>VfZ)lf$;(Qk$P#)pa+C5z6`YAPs*+&M6XsT=kXjlr%F3=s?1VJJQfxP(l6684yw3$VqFoI%V& z8CAj)w^z$)3~Q9=av^f7S_%zSQxYQKS>Cfmt}_#ONTc?{3OGz3ibAZMU| z;2^a?FF{vg^L2lfW0doCufQ8eqWS0;w2|14hvWAE>K(-UBYwyjs2I^9_lTXuE+T|n zMqZ$%(*ma5Oj%9=-DtBcwtlv8t(VL)pa6fHy8x^mY0`j};)*#Z>IGcyGg=nivlbG4ZU^^$3RWmQ`@TAo;^Se{r;GS6r| zI0H~O0IB!m3St)4NWRDm>Y6~*p9tGwb&ADG?s+Mh~EIrYogfXAtIWDfT!yX z-cSP^_H_)#5WFjK5U(MY60^}qXf7UuIAE=qv;1JmO4A+_4`e+;__1axI-S@AZ%39R zld(F2OAR2xz;kfifGtB_qhUlh;tb(~#XvvtX+%6&?>gFrIYx<+v4bP=2jd9q1vI*@=ZX^%V7bu(>Lw=_YQa6|v48jD_>2wdG8ofyha8EGt z-AWfzBbc|$TgpcDp?=f-seGb4ehPSLE73sQCph3FZUa5?giIrz;(duO_&uxyn+j5j zO~evHjt?O!aTNc7$Kb~>0;C&X$S3$wOpkNG-9mg2`UZ)CE${}AJ4GPRK%O%a@;3w< zmKdAR$;1JZP0pBB8x5ui=r9y$Tmgq8Ft!IIM105}*@}&!CQx?7dwe6&AMe2Xp@~Eg zIg1`g38*zdSrrl%A|7Z3J^_YdNX${lPoB^0)V%iuLbrau9x6?D}rQ{zv9PIof>N9nWdP>it9EfIs z+DcMR1d!8+bh4OCB4hAZz$ZK;U5Q*`5va*`1WkSi_1%R4m53t%_xZq}Rvo;ZO;ux_H^ni}2!>0IEEto=|^@0vx4RQtQd# z^l!jI3B*Y>2A@Inz{gU@)E&?w!UX(m05OV6NAfAXX(YS_{z`tO7t#0VtCRzMiLo>H zr|!{C0QG~JH58k^OZ@}f@POG&kEcqhG9rY~VFKb6aG_g>dsHLUlh_J$los%@2+t>e zk}{&5SU~wu8_3x}rKrix z!*d8{@;yBOBwfjL4ZRQVgMP&O5sQhJz)Q9{0;Vl z=OQJrH*gry_*!B!W{+gRtKk>ec61)LlnBIIk)MznsGy$YZ{`H>G$VjtSxnuhUV+|^ zA|0rmba$qjabWg>`Z`CsFpJD;`ajYG>xK13-y3Vt8-Ra5;3{+&Zn7W*o0&-Vv_()U z^iq1Dc`MV*K)?k#F?K-ZyrosddEm>hnzxy!T9#QX=0)Z*<_-O4SAAi z!U=o};FWdQd5~qCLi(7dYX%6mY4eeCxXu(0DdF*O0t%sr;O8LKC^qeZ)*$&=2A5&v8_OcN!OW-}z-fM=QTiogW1N@~0M#M-1Kov|QY`Wxl}gz& z6Pfpvqh$~CgQ;TNfPT)Q7E*_)c#@!`AXVs2$w*JKg!n^6Q6H&`^eOB+e#evp&B6BJ zd8CA%P7eb9_9%F29V4Q?6Q%eVQiriHHdRQyq9f^z_;GwQDFUmXOil#ZLtl!bQ0fZx zoq0`ZfX>P!@0$lxo4}oIK-&(aT`4`i0%S-bbUm%3+W_xhq-K#Lh;TBHw2%z|qx<1+ z0B3W7R(AlY>S{tjq=GJ3js@Wpa3ww!Psbl%c~~Z>>VC*{)k2=y@=$)U=joE zgU_KovGvGa_z<*8uP_>*BTyo88huG@vlP&0O)%zeNF?up*@lfC0eEUAd6k?={v)G+ zmSd66iB-g5z)D{L?!^=Lfl^#S&7__I4t_`H)1k}|Jcznveua0X`Vhm(Y9j^J!Yiq8 z>LH`00?bE%t8J$9sRztNz#$5HKHvbp`KXx#l1z%u07!8VxFZ(10bfb&1O3Y()|0Qv zQDg(*L_8&T1La==@|BlV0qsh!rDjn^^f>6mQ{;7^KqrB`GlDt*RH1@|$%BNwaVgN} zy(l#`j$)`#@-{Vqo42PaV>xgf}HnJah%V2Ub@tK$cn0X1<0~yfkXYfK|I=&xUf)B!0pnuT_tQ=#3 zd5RBGgY<@nL-mjY!YzReM(Wi(N>xL{u2SBc-rKTF_BtWBaL?+n) z!Nvm94w9nzR66j-WuyV$gB1XO&_*mG{0RfO1TV&X5EZ%z>3}j31u=x!PFw|gqKZOM z15$x%$rDTjuEh$-o3sb^RMP`qhD4DG^eXck%Nz3ps}Hk-nhR>}9;jOdeFB_WE3=Z> zL9d}E(p|_ZYB`yVw_`VP37G}X`3_*BgJcfqh<5T0!6G#z7pNN}?Lj}F0_pdlt9Da< zU^mmq<48ZOoOn+*QGJnH7z_6T%oqbu9l>{knG8hMQj0+so&=dhxOoI{Q#*kQeM4Tw zJkIU%>w{Kx+>K>FHt6i#>rF72vz@ z9heX#L>$1nQCJL`gcKnA5fn@kAY>PO461?TkizuB^vu|3oT>g)s!u(xn6J-+t{@`Z z9S=r%&;ghR6JiR=K;7~Gh`IPs{I_NTa-4ifJt6MmDk2qSgIw?nb^&A(AwUN&0Q1xw ztO`C2PlM;d$DwFA5Pc64t2``?JYC~OMUxxx&%``{2luEB{4ufyOgdb#+4MVG1RZI9 zWSwSZ6N8zx)OIqLbS95e>zToTYfpn(K25jM7pVaJ7O|V8u(!x!tS_bp{k4W5f#UE2 z&cA`ciLY1*IR;?)J98hVh)HBdfdorM-6xJSbFfFS3ThzBh&b8<9gN<=&*D??`($t8 zJ~LJ6r{`Z9Hh zd`vo$S!gqUmdK#4kON3FxsV)2bQ10$GhL0H!B(PDtSfpPorXLCiFE;d9-aebKyId& z#xI8Nh8Cm3c*{r|1p0h^mCC|RO8Ly1FLg$J@lU|j4MLAY&e%;j0r`zD1!(+jOaXi8r_MWLj94`a8G19+J=A$HQWbML-nTDCIu7&KZNf=bCH#o zSrtcYxcMf{21xEhUBv^*HI~KXH6#mujd?Iz&3CMQtMnkJKTPZ;CsY4`Q>;TU+kphrG{{;Ie z!WZLR@kY`fB%&+8v-VLoh6|=_d+?j&W}=ROs9N#|ag}&Qdg4>Ca!`fu$%VvKd;pju zw}JgXi@rt^k;{k+@(>vUPlHs@I#a1>f@z0wxPjCsfVt#o{VM%2{SsZX&Oz&=*-_#f zH7+Y($p+cdK-RP7gnvQ*kO}dyIU&EU$J&dkL{w| zX%10OJ}}$N9@a3X)}W$iQ&;FsppM6q0R)8ez&zZBHGo-cPpl_$7%1m0NFBNt?}qQi zUGPLy0A}O~Sa0kv_7N+_jv`IuQEE6NH|xx$v?GO(Yp5K=0dF89usl+V?lWwLf6)q^ zJ(z31Mlq0uYz1!Q6V8D16oAth2D&^K;Mfu}$gmXTEuFYO;tR6pYGMgF3rs@Bkx5hr zK$}kB80G>+be7B|e8IGE2vcP|-?XH5y{19CTk}LC(oWO$S8x-2Q|ZDd+Q;Z)Fi$U`#l$yk zIPgeAkx10bI0^cHD!K}&sJ1q0zGn*}q5_JF7$}Mgf(nSDqJV^y2#O+Nfr#XEcX#*9 zz0*M|Vm%e(+1=Rr#+KmV-7S~CnY_uO;7I^WrQL*L&4POP(9Ubbd?i#$=j2i}w3 zaPL>o9dHtJ&V9o*%{|W9>G{6mOag{nj^f&f&IMlrg@{>BY;Px zJN)c-?cwhA-cddu*s=7u+^$KkdiQ+K0{0ttgDcXtrukjVuGUrU>p>^>Npqi;!~-9F zS3J*r>svy+phMj1*Ph(2fEbz$x+XdvIuMRjdyZ|Al?6`iHE<}zwlrAATB;!l#Iw{x zddno~I|`qngrnT{mR3*!r2DQmcQ>E+cH8n?U5+H*k9#=MAKRleG(tp z<#F|KL!M06L04Z#uan`(w12Q3fXZ!N>m@kQ@&TG zYuVhE*fkw|-$_uxC|eaRo1nujA6nbmHn$mCJ~uOboxVBV`5vuD>Y;f)c%obZjzs%O z8w~%nuC)>zey%KMqT{mD&+*V1>0Ip^;M@XyZi#D-`+^S%P!Fp;|FoQFo8$Z8Sml}H zscUw*G``(!kk8vJ^^S4mz$5>^7xspE!#uw{xgL#oh-;-gzKX#w; zjPxMA>)g5SCT~Y`gYN^#qc1`4kP345-sU6C+du_>1FU0_x6&8mdFXlKsqv2X4FD%K z4WNI3@~#EZc&Gc7Tj#p$>;#ry=LoTVwcP>8xkiWsRY1cnM=X%}x=CUxG7C%}0j3e5 z4#wp&xt3_piWXGsX6_pVvZXm!fqo9a$u=)lE8)xYxSWQfmn_$&3-|QQZsM&4t(CaiFX}ymBGuQ4*NF`+0$&l1LmmR z{njS{yXDEvD)%EtrK<$?0yN+k_d0ixdxU!i@Mf($0>tT??hp_!Cc3yDp{Lrt+m#0p zSpFW0cb_lAJ=VqYto2Oy@ZDRzd7v|J3Dl5F+$&vs-MhgYymWQD!d(A>F~_;Sg7;o~ zQ^5K0Y*(5a=^XED1J)t6f3uyi5v-}O64F6?Er|dFybdZgNeo;=r~Vkg;a^hRZG46| z*|;ti*il?)UhgUJesWE5*EsXs8$nm~d0PPJK)h|~52A9r_o&w&%>E$HM7JEE^VT~a zILv^*+F`p5D{SMe|Jb(J7QrddBy)%{T9>x}&x29NMj!1wys7gn*v;*>Hn!+}b3u>w zlIN(`)m#ox80pRHy<2^kd;)i?Z=h!hKs!xzdtGB3832=c(H>=8V;^AqZl7i=xBj%2 z!fI%l%zR%UZsAHWN&HP)lh7Rz;0o$-}!M8}3s^>KEWv^CL-a${}u=3@Xez;Um4zi@YZ zUN@Us_WH6ttGq~8xvRv@cWK?(V26_87-0X`vBmb=KEbN7y|QxPn-C8YnOn^t%>7LY z^9)lGz~yfrZbPt-iXSLxQ<-oa;~ zGw=;-fN{Mu31q4gSD^C`fTwJIF8wJ90bQO`v?1B+XQF5 zW4+yH_u3q`#a6U+H1rz|vs!G+ZNF`=?M8crW3mlvH`q@));ieEd-nUbI@>|Vc-vd& zA{Wbc!@eBMOeg#idTaS@p;>Y)v6d+FYx8PTnemCSzu|>GMn~7`@Xgd(`CyIE5bZec z&i63vBWzZ%OPbm`wKWdZ!gqZ8y|;WN9*sK(bQ9}c(N4YN8L-YShsZI{vD6-9y<|V+ z{0X?Y4fYn;0=eL?fa|^tGMi|IcBkgZp|GFr? ztpH(1cb^53#@{u?73X+pvjOz3&F+K0!Ph|4WI?^qG4ov$!PH^S0f^&NeUG7!Ua9>K z(D;@5UxpOpb+g1W&q{>TO)~Qr(-iY%>klX%vY6dqU0!)UxT_sBo7@y?qFQN?zvc{d z2w;qlfXbuCPPKlu4uRLf2O+!lx;5OI0BazWB^DlPdjU7v=GlU5KIjO6H+%}^#to6S8nQ@zElk2hbFK4rzX@?yw=Md*`SB~?xSjLy;%22mj=wmN&7eZ6nlT5P4L}( z$=u&O)pWsBXfC$oTB@K@_^VX~tos)H3F-t`^h)TnIo_OR>fcU1Hsnz7{->>0&wS?( z*AB;eU_Tu;k&R<#+oJ3;dywszJ zu|aH*8@dgp2FN(eIM(>hG}Uz1yb9DNc!*)iFbhG2SO`n4!%XkZea){e>!3?8%bH?Y zXL(>bU>;^#V9YVl4Z93h{S(~_om)3YGfNfwICeQN zyB4{ZIL=4-3LAxLpM1+1=-oqJih;@uD#P+8(*IEt#g36(M zh-&=L_}nl;o31*lX;ptv{j15)akK)>NX;q@SM#@KygEj`NKFN-$!&l^Wzf(RSLDY` zI4IPdV$zu#&6~}1bE?6m7Hf7JO7!J`SCk@tYuayqW+^qj0o)-X9AsjevRMPGb*Xx)f@k0k&qC`lqHw-LAf<_Ncw;FjXCG z$*ur4#HWh3O6SS18K&v)81`9qSgzU50XD}7`yPN({A80^4c6aKi2j;3U*oU7u4z~Q zQh!msQeDyv)+B3aU>q3j7+r|5M29sUGZ#QgD9hxrRKQWr{?31$BSA!VLlE2#dJ2y; zKQ%|1_d}5umFcJD4`@4d9wJz-0_^)_kP)xw59|0Ex$?Dgf)b^!)?}$O6&DqOidy+E z#Y1_y@_=fXJXf(z=94!ng{G~2XThx&1k$ScIy0Tdw%UOavM|X3p1@(d)u}5~%_=m30_}o+hTdkL% zYIvu0q_xe8fM=LD87^w-l?#;bl#3K(#ZJXC`BZtHJV3rlu2W_zMT)-a2<1ifIyFJt z$CPAwY+h!j+GLJs+jiLBG8D#|Z$mleMq{?=sd=Qa*yv|GW^@|z4V9*urX8ktra>9Tbr)!QsERwWNqrx>M%_`;1V7LtltzZYzU-F+ev`w^1LV|7`dSxSFeVtsvv|0Suu%@;UNS`C8c*S+mToh?gIc=gK`& z60L}~k2{R}Rj`D+UWAgq)(tk?F=ZK}O|J}(jMGiKp=_wX1vZIwlT>r$3YkSZPy$Qt zNzRJ@5jTrIii#vVWVObSBoisuIRGqHN)A?zSgBXrfSE?h_v%vb=RQ(m13YH>Sb5!$2F9UpE ziIJuASEb6l+(M;HU84D_j!;cdl`7ig%jE*8O*Ti~BrlQARg@__3Zr7P;;tf9u9j!Y zuc*Q_AGApAN5x=mtmY4OmbOb*r0vxBYyMW>P<)XOlsF_yrN4nDN2BzLC`-f>4-mEB zV+m_%pO_5x2}P=Eswz#h$?#U!Ylzoo>HgH7xAZfv*36VYlw1PCaDJvA4rC6m}Gf6vKeO`T2dsdSrchFwQ z-YW+xM<{EQB*iWHRi#})0X+E}X} zBaV}9QXf}e)HbNg)m5t3sv(-e+C|b;B7{)NZ{}^{)$rWhV%86K31G*G{zh_4gcUv%925A&z0z&6J@Q_~CzV8=$4QkYNQ%WPCC8)$*-qI= zX_Jg1PmoQO50e#2tHtjmPsKMRUnQr+ZK7Aabip*CRd`tRRPtTgF0T?>6+h)lxmCVd zUMI_zkCr(lL85#iPFO6wAS?sAG*1Mh1X-dyu}B<+fe2G*&lwf`X2BPppU6+0r<$cP zDRX6aB;O8O%i?M-rg7%B?l{ty|l)a9V0~GWSoF2|Z&M|%` zXD7Ena9(^t`doNdxI$-=K=WoeEyN%};(Ub;f^ zOd1d7$052Wcqc*#uJJ>7yLn3l2tmFuMv@?X$nyzz3Vgz6!q5DR{AfWi{~J&;+ARr? zc%^E|E2&ESU6d&f7e|U-iNXa0?htMwuU-%*3>GaG(N6(yZ7=4&~5?C-o1u}6+mX2_LNtfWLZ zjkkj1$BE`1WDRFTQsb#q`UdJDpmnvGl0czSzcSOAYnW$P80G}VH`Yp)oB4^E%ihhq z$!p_6yjwgczlhV$e#zR*c)_Tm-=p*CBt`<`4*ff$lkuFRskr~}Lb#WB{=5|aY~DHUS^jcbwP6+RTb z6!r)mqCbTBf(5)NRv~K}_au+aKLO_Xn(&7(QM5^f6$Oe$ihQD7LW*!Szna_3Z2>++ z<~H$Ccy0V{K^MQ9UrgJF+k=slliBlGiR|?(0xLooB%Lddk$n-1xM+ilvDJyVCq47AG(u%hVg}EV0>mBVjpF! zr>&q4qnx00QTJ2dQ14Uav<(8fpeNAZAqCT}P=fqR&{h&PDa0qlAnZTh~m+he zcL?rt&Tu`PnVic&Z7Gb>MRE|{6Z+#H6V4En`0x1TI3v(jdx5)5$R}JRTmZUju_U05 zMJc9ypa#=QX+z0AvOjqsX*1~pSw-qgo=M6f*~r&{HqTHho$?YWHJzfkDXkO>?I2Kp zf|*Iwhtw3xzm!b!MDk98jMPJW#YAypcpG_#criR0KaUG@^?y4E0^9* zpT-zMIY{HuZZRLRF0*1-Ijnn(LdGxJCyI~MNhA}>@#VNIYzIz>{R905`!@#0=3;(h zg3u0Zf6Q^rVVs#5MQkH(A{@Y5Z~{UnF@VS;4JFcuY66D1g_KA7PM%CMl24OcDci}9 z$sA%5v735`-k-XF97&l)`a)C@ariyNBea)Hf0l|~zjz4ugZ_90or?p^_8FZe=4tb`r1;GqJ4EtQzpUN8DX(DJzMlq^zX; z!}!TDadq5nTn!h+!}C7!>bYKS40jGkz@c-Na01xZ!2EyX%x6p4xs=(2aGH(Qhtf#R zqm7`SXGSxM=*#IB=qqW_)By4-QePsDun_OTO~RZ-UqZ7nOHc)cSwuZemoi~iU&eFh2KG<( zHr9N`4~CSvlc``7(pS*jwEyTt#%x+P4Nt#9zrj4t3Z*AeMv%6W4Rk%Q`Q4m!_8E>6 zSk7qfC~)@<4u^A-gJM5nCj)KTeaxeb4>T;vgKMI?$^VhFX(g1q^cea=Y7Y%T^`o)L zFG(W_JwSzaAx?y|V^QcEsB7p<)D=`R($Gk2x{5r7`iSnv)L}KLJy)*sn;nn)J$qTt%SA|Sk5K-16nirKKU|5O4&~wKu9A#B+Dt|DaE8(ay%KP zHc-s8D9QlhInqpu3F!O@S=*V9*o)an_766Tjb|@lpJlIRJz+&KlNmc0%PHX`Iq@sd zh$WI26TgvS$=y^o$x8Z3Y9J9w^@OYV!FU*VAGZ%n!Cu5}M(;yWkZvRz8G|TpT!jcj z-bXLQSg|Eo2lhEO7PAOD4lBn#z$RgF*p-+=7y+gY{R90JZN$`Lr(l`5Y}^d&3#<~W zz%~K@IYOdQc+{QL_q2RkUs^i#9JP$fq*^H7$eW2wqJcDww2SzPq$E!OUgAeg#jEi= zR5xlE`fpqZkwnZQG!rTa9fTb~?{FM3mQaenM?6GbPCrL`ML$f}(AkVI=1j&#W-vnx z^kMJQYiT_+h<2Zlj{l9HjAh~bV=&kr{4@Ml;$-4M0*jD~@5bZseZd$dxXZW&SQmB_ zb_|A&I)h*|}FfWYDl^j&Np3=Ojs{T<82S#c|H4BQFaFW?nQd>2qL_27Qua&TfC z3)t00>^B@0{}rP^C!j(aXEhiaTbk}6m>3^E3Y&^U;YE0u7!Q1F7k(@@5xtkSYU%3Tn#oIHxWCp$%WXCpN%D9H{$zYkKod< z@3G<7vDgCaQ(Ox61Lglm26G7g7`+Bvg!+UEL!7N2Qop2bQQh!;^nI=MrZY z#ZoX0glznCVi)-kbrdC)^prf2LLtYJ29TKe#h6^=7<4Qq2b+PY*f+3pVoeV6Jh_Lq~^+nEZxZH52@oM9Xrd>!SDjC&?bRkwC=Oa6i zPnxFg-B9^g<@(A8yZKeOs<&6$st#1$t1PG*yXS0uHDWx_BEE#ZhntVY-_xMCSm6xUsjym*t=uLt|7Zi>w=L=qy`la zX6yiJ8?qM#A^$?HYUthlt}?$)R?FYpTT7_lfeb+WZrWKdt&OhQRlau9v)!3{da75| zWbI3=qu0e&Z>>^QbyeNkT~-ygo=E5YRdNxueiOfd!slnuFzUMV#9$A(&F1C zS4;P8RBcY*erLzRiiQg6w%yw@tG3rqLk&cK#`I!`V%(U2vD<-1RHMx3=Ro8APuwE{ z9bbb3%I~O?i2jW!h}oD0=-!gAWkKctY#+L#Xlr_T@vemG2B4mO2$|W`)^MtR-M*XE zwFNiImX&w!`dF>0$!qAS5867t47Z(M%E_-?!(Rs%ek;u@o43!tZ+um1Nom3CtYK@O zuRfn}Gx_bZ^C`rotT=8=Z_Kl(^|7MW0cjU<@f(5*w-h~H|9!)uqQ8rKH;^`rDMoC5 zyaz(M(ShiN=qKp4$fM|Llm;~d<%je`oyQEo{)K&sorHeelvsyv?28CTJg@D)C9h=q z#-NRtO9z+U+Ono1VHdgjpXy25vr6t4NY~|Omu)p{Kd_y>EobZDaz)Xg5>?^u+~5R5 z{EPXY7KW`jQ=YI>zvX$x*A#i;!?-&!LuSN9@FOc`Bt%S|GCLeOg&2M;>Q_QRLhq{V zk|706dHV~G=bb5-SoFHYxmDIEL0m-%k#~?cQ2mhUO;?+0kdu(LsMqN2$dbxCn}%*K zuO3q$xAS93pWLwp**VC}nv5UmoHd(Pe_f+pvnfrTot(dCgS(WPb#l$2OkuXWC?yNI z2C*bO=GL6|)7djQ$&}J1o0nxoFO84Op0glAIqAoQJ|RINqs9jYdB;Bvy%|CSlvr;ZP2j%*Cc8N1SNrT;4b#bZLpj|%opD2VXR zu2{ICU~fTL!Jw?{HN&$S*BvYRuX1#?s)|~fy>n;f+O5MY^0(dJiY&L3S&A6>bBjU? zqc-l{@-20K20i0hHZAK{+Vkc5q@$@*7C*?CwmNKa&xB8*{E+?=E=}A!{_WWDe%#S* zlj!l268A10m6RK$4?R7)c69ML+^9&uKSs?PJ7L`QaSJD|SZK`InfEMvV(N;O)ob^q zomuy^6thdPk&*voU3>1%lEBUX6)#LPth%$ZE#-Y0dM!RGJ=vCAoN_-YJ~=W5kvczq z{)|2meq*KM1_oD8kOwCOl#Na8(`VGhNw1^c%-uh$W$Lc62_yLdp8~rBmIWRQk_Gn( z*&N&z>X=7Q?@n!A^(?Jlx^zuw+Vs`zyiX;2^U5-8>7&yE)72TnQobY%Uvz2J_!U%c)(suyFCBBo zf1TgP(N}_#CcKY$IcIj<%ACsF&{c(NqO$(X9Gdw!e{9L@0yt~*%B}IX*v19>6O{{x z&hw945%neh*}`9Qtm) z=P|7-<`x@^Rrx!!F6VaTm#^!}othcF!W^}4?v}V)OFt}O&bzrFa@w|t0kft@W(5Bn zQ#p`Oh7*H*C|?+9+QPH}Q2!XeoK~?b5r&%>33>@zIXS z|3p5Fj)`H+Ulp}+*5v7@r|k|;ADb409X~j5>xg?p?+sc$VCv8(K^?En5-uAG%sh4K}x z_R+w~>MQ^H^(#%Rtb*`IIV$=G7gZ~(4Qkr)x9T&W%flS@a;i)!|zNwXO9 z`_{I<_50EG{ee$*wQW-E+MLtu237pc&gsDgyO5YRc9|30?25|<*y-;~yX_xTyTfJs z>@E$xV0S;nuzTM>(7w_|ZeRP(0Q;u)s(ssk^X$8Scx69$&>DOD^$YEt`#iGuG-}uf zbu#Q@-3HjtXs_C59a8P{7Z=&jZdu2^WZ*0Nd3T!FFRD`2e#wf3_RE%^wqO3?H~ST9 z9PL+>M%phgt8BllQ62lmCHw3bbewHpa&w)1;r@m8xtDs_rw{95A8T)G@7KQ6-esa` zZ&xnQzR#4+_HCA__VwQ0voBv<(eD00N4pbqG`o%Qfp)Wd?z0Q}C){qxca!bv54X0x z-OSB)RbMOHX=iojOSe1o?+{JU>j+PGbDQ!j?h8a%#{m z8sIlNc3`!#lLJfoj~rC{aO9xOMt=>u^=|p#zCFeaF1WaG@cB+XhBTXcJX5D=8QtLiW z1FRi9###senq{4J&)Iq&?_|Bc!8+@oqL*8r^)0c!y|ah)o4%7-1^;oZW*2YP=w>QY z{5!FZKUQSD%1*MuF_qZxBh}cL<*v;6^RLYP>RqO_{=ob$*Jr^`yRZoVSQcZ~j>YG$ zV$=K9W63dpv($mDSz1;nHp6#29SS*mU*-ToWqV*xiakn z8I`K20X1wD`Qes7j5+}i)c-bl~&?Y-v2avxYn8f*9VBQ?VtWDt;Ch>ZvS)r zio<>Xr%%^v@;@Ixzk2uozMh@k{QG~m*zsq(|M~dMHtmi78i=H};s2FZBD(I;|LM{R zC-{F2*bMs>|CLrOr@_Mixqi|3>FR%dfSAe8{a0FvqB;Zr=i}4z51`9#7N5~bwq#co z6@A@%v`LDR{2{WhZqPNf?v|;OWmm?ZB&^udZzDMR(uj7D#l3GW``7dYm0FbEQDE8m zN3AuIB@HPt(Z6(=4O!8f2ZUAG=_Az?QlvcyH_<1T-Z4lvy(9;go!Awqk%CY2=ICRe zb7d!|IT`4qv2i*n5*pfT=p*%}LzY;-lWgPSUWHn?UIbQU!n=`4GIfZDhCVdmHz?Bj z%`(sjVoRZj|F^%2{z=rqZ-BZhu#UbN|>!Scx3_at17TRj86|@bAaaY!n*@MM7A#j&}Moh@<011)@dz+hP^+ zx*trK*v(%d*)+RMX;@^siVp4I0mbyb9}PG&Rw!`%M>iG5ZtuZi@T6poWFgg^4Rqwm zrV0!_zllR$;~ilox({uskSwLjVI2;xe8_~c(FF>$&+dvALq2>#i{?)M=+M#V$VoPJ z{{R&xyS6f5{PAZdOjy?#ir|e;4RqUp1RaLX{7of=z4ICc9hALIL)&!Tp~7iH8_L$X|&?4j?4^FZGmWyWNJ|vi=aNV7w zp{E(XQfK3^iVi&UM1f9g_L-yzTyxlf5$bc5WK$|zzOG~D2F%&i^-ZDZS$IQ*gO>N# zNj5ZXy$1W9I*%4EDI=ve-yfi~60Hu5Ru%;^Zll^tJI^zlW#IJ|J9Jz*uzPPS}MaS`%h?cTg8l1c8qC&E)8?hYDYZ;)D zVqw@+9XcK=<|K>%CC@+yZ~a?C51+Q5qkBZmB4~S7qI8l)6n)QO^2A;W?26lg9&Q^P886x!<6NDs+GGFDHe^@JR+bF21e?eRrSZaPs?hCMmo|rV&;w z_~0-D#t*utl48pGrV8{b^oMNlxcMe@e&^3g;W@8@Mly$2Ra6+_?X18t=2|E`>bt6F zn};z{zr~dmYB6ozSn24RFLboc-o+-#ydHm2(O%__>rgei6Ewdm_fIx{_!|X1ZMU;V zim^(66OJysD)kSuted^6_f#+sia2e+5pN!&8J(7KbYRnC8rru_44OHg3RFqqbIDJG zLsn+!Bpcaguk2s`I!3X9PV#%Q1;3G6VPl;WO)M~4$33wIA1?PYAjj9 z=>j`7>{~QjRsX3&I;R#suYbf`%* z!(5+am1HFyK5KA9riTK@GJr45&@2e!s4!Eblr2X>oWszkQ zWhbtvrehv5HA*E#lfGpHeO#NRXcl#_uR@C0jf)NF?bFaCSz>Kdfl;kn=rB;5&Pm}v z@{57?{dtj!4%oU;LA(Dlov;!OgBIv8$mftsvKdD=XmCuI2eSSC+-XpY=r@+_eBiZn zvSVZJC^Tn*qKOJ)9+lHb;q6+FpySG$8JuJ>w(@*MB;;!Xp(cWXrz zdgf_Se_qbVvmFV;1KRU@KC{sA}e-WX}PVg_TqXp%b3~=&32Z1DBIQR7qr+u;VxP% zZ!f>Dn7yJF=4|1ij|S%Y&$kHre&W<7PO`$478g~hrJ~oCZZkds849q)}#LvgA{gqG=jcQT{#vP zMEigLHc1wz^;F>4)K+NGCoj)H$9J|xv(!-mgq4_TZ*9Pw{%52^vYb_F=C*wyK_Bn6 z&>%%vrwbZc_R@JDLEBf;wgxF;hF>ya^xTmI?SCI{>d&e_=j&@jFQ}%b? zx*BwWjhJPJ7M?xZ=_G4W`>a6<>(v1q?a(Vnf$kOe5_DXDSz@A{{Kj*%Z}VyfoP6gm zjbuCbTqdm8>2`CZ(aFCZ z>Zd*`oZoODS}ZR7m#|_hlu8DiyEp-g&;@oH^p5n=Nfy1;vVVv6>CMqIyS6q+v8Y;{ zY^S%uP{eF~NLaD-?lpCoTT)3Qg~P`J1IF*{rjx8RGG7`~!?HfaR_??x&smnI!Bqbb z2JAMsoI;BD=1rsvKHGC@7G1xC3G;i)`_Br?eL;)3wZ9TpBI(*G1Ll8oo|A0$ml+B= zZr;CAx8`4Tbg$I!(X7xp*FbkH-;cxTTTd%6Hte%OveY{3RdjMYYqW4$&>YPic3Q3v zUiCu9y!V4P8p+~+O;t(ZX1iX8S(8Q)wEa9hrb72cou!(&o>Pmq{*_FUC4F)t=<9vE zO(#XD!yOZLslU!3SlKvz^icfP=_&7X)EaaD08rsuti8Rz^kdF4* z^hAY&dapyX31txm9Jj4IT6n!mBxt{y_@fEkdRU%cTbpVM+JEdV4o5GGHel}&V|3W_ zaXkeN51vTS{Jo$8^mpC>fs%7zC5lYWNW%w*2!#Jx!#IRF_To9iv^vdIZU$snV|FM>V5{v zhP+HhGd;b53JZPXWaqBB1x4}rS_aAHRlJC11(h?Pm?yXj=kDvJkgVuJ9zpxhj4LJ# z-}>AjS#iS$8ale_4=VKiH(n=MUdS6L;&`Beo>8%(3X2JCIf$4}%;>1R@lnGZ~kd0df$3NziW5%hdt zN!MWH8AmQH8-Ql~lD#SYGejpvvh}wLy7$Uz1g#4dhsaL<`@V^e=;x@zvD^DF(CuI3adf9j-z#W`fL{%;>lOoV(kBauFAElrN{JodM(1^<>$wD)mYv^fRJ*B=i zUzyabiOpu66wV7~p@qZOP8?4B{*^+q$@b?7T1WocqmyFN;3O68b?h4xtu&9<(Ax7K zb?9nS5iQ)04};8e>CXmw=)9XIbPe6gN#?a%J`TdJ{5l=;&duch$-17LBzsix78+Zz z?YC<|@ni49QhjDUl`b%SeoGEFK8{mJ(QD=RgcaM;ypay$$A3YKOtqN9l$f8;%=_euIHL0^Q${XBZci8e+At&O0F|vbaN*i9r$pp zL5jGt3>5~ZL~!Vu6h_efU2|Q7-ovV>B=dRDkwcg4{yHh#CuFK<_rvQsoZP*W0p0#g zHKDe;qDl(qRr7V&)mq*j<``w!-uf(cQZV-#c89~Eeftsgy0Kkljbv5!W*g|iErK9( zJvBmwUah8aQbeUZGSE|7HIh!5?a9#|^PUs5oz>l`!C?(+sBquVaDw)`ZPpwHzS?h) zVxz-z4ZVL~6N1hM7aUXJ#@y2;$@b0sNYM5hf1ktk5y#PN`6J8i+5Wb@>{Tn*ak?N@ z^{Zl%Z2jYMI$RoU`R|MKjvLe>vHux@K5oDe6$Wqkie`m#x=T~%2SE{I9*{j>yJny> zzKfP!9QhT^iU$3xlOnhJMH8Li9Be>-sI3ZJ)l`MF{_@>tD2m4(GGTw$$_B|wddvIC z@;oih+y17;tjy>MF@%edcLU+m_8qk>2(xTGR`?2U+T& z4knz^@DCmOrqo6Y2hRirW-k3xBiW4H*Ju{Hx`|4Pw7DbD!uFqb(vY|BDd{+>KSZ<8 zr4LLP{QeviVJo8uI-hiL(%^&>^7t%#(>h=-dRO1bG4}}RhGwIx_k*HCg`*~VMBisR z?EUjSg%n<6&U1A4u+Id2-}vMgl@z{5Qw?-S4+kjvxBjf6M}J5m=ylmDy%bV-)+{j5 zJreqJ7||n4fi}lFLJ^$RR)aX9ZYnN{Iv9XN}(M`&+OwXb-Xs;pk_;3`=D9y0yhPQ^gW=FV)YAQ zz|!>tImzZ;btULH^WC=^%(uxkNH*6h8jAddomF)HNBMXP$Ln(c6D2n%o4CHX>UM&@ z&*@l6hjA|dS+^>cnA9S9P8AjAOsNf7j3*=LcrkmR0tYt^R!KJD2K`ALIaA(WrZNr9 z3d4Ugp>w54DjeNl0u)8_uj=U3QlY`@j=7u^vnw<=(3wSdbr@7NK_f-9_YoC_FJ1$g zOYUw39q8RmLuX&_A@wyzQCf*Pe;Bfz_e|o{^z(;F3MoQ&oF?e|!`dDu$()CeS75s0 zszKL%T@6yCwk@wiFZ(>m(#Ahkpli8dvSYg5;pnt|C!vU~-NHbJrB0SzuhvJ%CVu~1 zA;qZvmfIC}Bh$cqROvd*nallf69yIU(n#UI^@<83^DW!6-Db=FG&*|)jjhDUUGn}4 zrx#0P53doT&;=HrdDnpBv)`JeaEkh>lGe}bOeX%n{cXtGI+%-~kry;rE#j6*vXKt2 zW%tgX2btTc`6emajoP5216p)2U@+G?DWZSB^r~Xj8b1pmlhuCuA$y^paiF zd$@GV%|ab>y~G~PN*grc>m?v<7*9Di`3A$zbFLC53lLnciAI6{Tt_v)jW zTfz?R4>C0qKnA%gPIZHWlP}(?rnt`_cWdlLyj}Hdxa8jRBCiJ=4 z3oX3As*p_`wp)dh?tO9oKfMppKGH<&{%rU{% zgu|Y$M~faO3v~3P>xC+8HNHq8g>T$3PO_0Bbd?l7la`w3kYz^=^t9r0IvjcXAB|+* zlXVknS(^yj|K1+w&@Xm~4%go-R$=hc3JP4}vQ74yF*PV@J8YK4;nGiYRJd^ZuhOM~ z&IYwu`*$8>-ia?cTxwGtEtaNyRN-pp_8Q5u+I1#qKRX_%kYdrvo*bQ%93}ORZK_d= z;uUQOI=`uWl#^_J%{UE4_g`m_BC_{#6Q&NaJRXbtRmGeY^M@uW5|(XHVM%E(jbu6b zf0?i_U@;WAi3_D(TTUs|Y(lLl6&CM2!AUWBK&b|kzj;c~Iv(H9Ku4{%Z1*|kbOrNC z-)5UI!+n%A;7EdoPU*9clVW5*oB^k_`3cQp&Ob!6$o`2MDS`_AA+0TRH#MT#~IS(3E?I+^Xc!2rpM*9G~o1olUjHOE!Sbl%gY+cVrmwf zFmhNID5Cq=aden%J_9SC2!W!)5nA=>bs=xp%LnDRlUp5A5{m+d9ka_Lxsga`Rg>DL3 zON*2Syq!r&+tptAxQN~tJ89IyVJtT=cfY!Vpw}HHb%o5Kn%v%)bAr5|%+3CxoYQ%z zj_ZRH(hO3JJ6gd+J5D{R!I7P_4N?T(Y@2-{u1io*%B8})S_eZuNXM&D-QR@RL$>u-pDJ@BH<>;cJu+>FzDBxG*YCt+GU_a z9o{O?@#k_-Kn(Dt7EJj^GknnKN-c6O0-wZ=>pJ)viF9r^_X zX{7M2a>;-}%hyWBRoX;J$MHl(g+BG?a#HxT6B=wEG*Tg10fViium!8gRtZ_m;Ll%c+@jn5#(& z&zvU)dSgpxOSfq+TXPwzSkXK(*qxy7a~gb7(foN6j-Fq$Sa!*!8d4W82E}aqEP|eo zx>1~D-i^;2=nVZ=f?lV){6;64ZrxBeX5e8c=-bp#++&i zS<-TU1x<)eZMo$U)xmdLd8tj#{ z$|QyVg7RqL@#i>$WXToRs4%)^f1MP=`Z#Im$vZuum@*}eqh0MjLy>mnTLbOa*O2Dg zPSeqO7y4?Xm~OuhO~-@f3dw?_ubb#8-%T>$gy%1H7~QdvB5k~$!=&NS1f4%@ZlIFP z@mu+IMBMxDG|V#_J>!_iP5Pj~4ExPcgmtT`!d6EQ8zhTgU24MARnIgS)%7_+>&S}| z$eboNH_@u|UkZ9U?~P_vx}4ESk#eR7LEF{1&I)?kt%e+qYwBZ=Z1~G@CR%O#T19&= zS!JMy+Fm5+>)mkCV4D}S4CvbVmI>Xyuckxgk=zeio7zh>YT=vHm&1UD3ssUOC=E5} zGob}q1p0AlGuy!$HJdbewgJ5!2M~1LmuA_oV)S~Li;?k8I_AD7D=O&dTlZAx@%4mB zvcdb#X;ACB$AA-it|jQ>Y%8j0#~*fRaKp1BI?P+!g`o2>b(!pfsD5ZRt6Lu^(vDS> zol*9Nqiv3CLyO`*xsVmrZ_VNC9owOpy}3kMQ1v^Vn%>vFNFzmI3l{^f-91Dn+31A_ zHR#ncj+0{1hrbM1TJ0p7Wo&t`!YKdQXc6z>4B4Wke{1Nlwha`R+ZNDyT1f#eu-KaE zI{E+Je;pgrQ_i&o{v7kr>!);*P4MwC(awwCqlMR&4F(KeW37;^@1<~Q7XAVbbw*1k zgB0OY%BwK_%NqsqImb+rCC{iv(D8azbDb2vBbO*JZ$W_xvnvL3IJkuaL66tcVh!!r z-m+fBoVu-I9yG8n<}5$CodTIxsY;62N^f+u*Ne^secdXJI9mG}4@Hz`XBG0#vviVq z#8__kAmbS3EM}-wL|C^)i=ZGksrTj|b@Xt%$0qc0T5OQa?PWR?UN04b_V3pVbm%gy zg#rilpG(l^eYZn}fgite7}lmp?KfAmmDF?6Gq4yOj~M>B`Y>j?Te-pz(+ z5r1Htj&^z2MjCLugrmo{ZGskKCor^78&%Rs7S^Yu3S*jYMvLGPDu)p}wi_gyl4GMl z>pgP)VZDwvQ_(|S4u-<#K^2a6_)b1wZ0w;z1@q3G-3a=5uT_8smyf%kl48+IL0E}x zSMPI@B|N-?X1Tj8`$bXqX9FFc>Y&3VE%P`j^cHfv6h$-pQqt>wuS^w2KmAi9#jHES zOjwY;56y~$HgM>FELDa4s%5>JU*Q<17IFV1o6u|JD~)71uZ|k%>~bSGI-~9vf{vFZ z_aV#L7_Xz1-fjlW{jsu1vMl=nD)eb{5-nm1P8cvUEm&Hx_=HZ)0w!-a;jBwzR8ly_ zG&f+tXReWK`k2-#EN;1;!0T-D4N~OwYOKMMsWFhn)qSJDx%w{z{ru>mlLpg=v^Ai| z)AAhpp4p<2EaIDoDmr*>HbLvon~fUu$QozDAZ;m{g;rdz!laUNCMmSOUk!Ax>q3EP zGfQ+hJ?{n-VSREm^w<$i6|{54A+(5D*~lcB$IR6nh8I}wms^W7Xc2hlfC2q(l$j(8 zZZ(Ra+i~|71>HS%Ms7+Y=y=lXrVa;ponyeM>;6WI=-J;& zNA+ySsaZg1J=xP%|7gfwR;t1AKCgA?Z|4Ms>jg&xPJJt%58>i6RnCKwImf)&)LGIY zn{72}=6rjGLJC{uJ8AfdW}KP@c`nvTVdF7Rg+V2I(X88uEd-tS_>SeUJ zBFABiik|Bn#9@YhS0lxoitSaHw0H!Ek;nQPBKmx^{QwA?Rl{X)mQdq=~BA%)d7Qbaq+ z+b_a8yue(HnZJsl^{(KKfu2--35TAIUPI=(-?Hum|J+1H`%jM0NI~xp)}eb~WfgXO z5<}3}_Y2iXHnG>YCUk$i2rXQ*RvPHRji0G7GVitq-TU6+Fd*6u3b*B_bQqg)ULl#k zi)G#L8v2KZx#L6!Id?tgYM{MK{4|pJ?;U2M?YbS((Njk4)?ncHZ=rCs_E*v6em-oV zW9-9pIQ?prbn5Fa8a3;)bd>>XjXSH7!lmsDj*jwKqQQvhG_;7X*42R4<+h@kyD{BF zhc*f`pzr%D(xDrF)2W%qy+sPF*2+~Sh4zOpTCBaJYH;=PCj@Qhz5_WNFk=ClmGtye zp?;L5ulKYDk^_+-*>^rTZGFq=*@RR)I5j z-!e#+G2oB}(|0!Eq~M|BO?1?rw@~;!cQN41@w;VD-)lgYkmRhA!q2Il?6~!7rTLMT z=PR(weU9tBCr1;s9-N-9p#7t5Im}&o#DE#0{dAJ~gdXQGeX_ktim2obDokF#U5DDs z+ni*PW=%A`|9-AQir#B>phd{#dK!%TI>dxFF)tL7rQTGeiSFG@wD*Ek9Xfm}QDEm$ zZ#XH!)AktXi3QUYbWH0?9ESh+uTHYqnYJpNe)@zoH1m^5E#j(1a2QoLTY()SywS}6 zZF?1tI=WYfPVTEUQcQNRY`=ZS`0CUwV%ZNI21Kn>NfGixxDM^JdUBHab*`d7m#w%bUwm=ZFCp!>76k2Lr}x`OtKIc`AB;fhI$X?2>a z(5BgDjbtP4)zG2e*f%Pi*EAc7Sq&c(v<_O|ge*47M+mP?;{P&148%fq*xJZS!ZYUllv1Z*mp$3_4eKW;<%oB|DeOfiK{f2Qag*F z*K>AolVqdI)+kV4=C6_>YRm)<=Qp|n+3asmYp~>Sfq;y)(l32yR!h|GlXn6s3VcXd*PhSuijA$!JXFeBGPC530m6&)6S=?&TFJ^NKy zIPn@vXnPnwL?wmK@Xrbi-|x&x7J2`q3WLX=AZT5#5C=tQ zg+v_&Rr^)y_b9EcdJzj~c!`qs?+ZT}P|NwrB(1+z zw^2z}Yspp@Vo08bUN2ul|Ahzg8u$utA?^& zQd@Cq(W2aQ6P5(`BIx~O#eNz(_S|c<2z<{Vo9)`nK!>coXTmw2)6lGV-gOlnSIhF> z&3&`S#Jt_s-I%l4{-vB0(=T+>VB#7NlVqjGn-X+9a$Bmw;_#k2$uf^ORbckDFKAKp z$5)PytDC68*+Zug^m;(16(_~qgI^7F`tR+~Ebj>YNrtxeS74mOJG9U~$gjsD(k5X} zKVP*x54_bnT+e2%{2OyNtvC^iqOSfL%=i$*NjBrpO49WE19i0D;#makx1&7JBI|Lq z2EA6jH%OM|{SOplqg$IWdq$4be}`p1&ffG3n%V9j#!2C~{+5Pz?lE40k-uDoB4|-- z4Xq`3bLr9;ofJ_Y?waUnqc$3F#4CS-9+z>?Rnq!y>I=l@tTczvJj`-W>=!E;_rZr1<`k2m1fM z-%@BsK1cU(E~k?$JN#c27N4+eA9hnJDAXdv@2WI$>lz(BJ$SfEvJA`nxJ2TSmm21I z_3BEKLmo;K4#@RIMBUkF()BEGXCElSeY;6hQ#w)7*K2SD&7x{w)=7FF?s5ekKdPbu zqkE;OB)zYHGC{BNO-FD%~i3F`9OOj1e#42MsIv!2cb8b-5^S0}; z3iBImp@RVv8-{Bn8+>q+bXx0FC?*DvH%R*V***@nx`70(=asfAFn)nt7g$iA zZaOtfd4)0EzV4lMQuxh3W}>~mA7j9Yf5vk-{a$&3t}nB!%h3m16wLcxGISWfp@%f+ zWIIYL*0SSM>BN2W6uKbdX8LlHHMu`shu&>#Xru`2ts5|)ja*OIh~^<^I!{pu+Hc#f z#s%hHcb!U#QHvL$h1>3nCdqnQUMFDgcPDYo{aZGc=2mdjs9Ad7!wM|*%hyPef5eT$ zY~RBKowtcQ2GldJNb|#nn&`s)zp13~tscf<(T(49lFfCfD9t*w&!84bU00*U;tA`~ zY*w|m3OfG6B@G>LZkN<|^jw8nBy@Ko=s5M$a1G{c-A2%MyuE`?in(+DGN4~YxxKRN zRlCtF$i+`5#qjSJbC_rKH$h*=?4*;-Pq>(nxBm$(GL;ch@1)NvH47;>Pj*qAIO(8G zH5AMXd|w*Sao*oy;LVzsE3UL!?sux^nKKh%bXOE z&n^3BdcbZI^U1Hz>yX#5MhpAErP8QQ?-XiQuD6#8$Ekfy7;pbX+SPNaPA#IF?j&gc zujg;Vky*A19Geq?7IFD4q*KOq*U%%+PF6@Zwdz)B^x}6qwfHV>snmCLFO8bn?I}RB z3F8$LPX4qHO|Q?sP@w-X%X$~)w4bB<^+-2K=70R04x^g8s4!s2Mg``#@1c>x^~q@+ z&Nj15n0aR+WZ8e;)}c$;OxYO~f77T%>D~5dk>KyHKpuP-(s_BV3S%z~(@D|hX?sY2 zAAf}j=YF}V!swt*oD>sU%tH&;ooPDBGS7BXVD?hoAce=?fXN#BW=+t8L`kz!7S-lm9TGqzpX>rfLOmy)w7wSjfRk*-4nKm<-=^%;q1)`%8l2%h5VDNEa}?;>(VD}! zqz*bMc&(|j3+m1>sQ=&VX!A~cQ_}f|`$!#gzV)Sw?&#xYLYIE~2-@z)>{nsN%2Nu- zif@$|=&a)#bU3&6&nn4sHZ3!yV{@QbRykhkGQ2*gW~Eox7^FzL5F`ygpRQ4}O#L*6 zNhhl+q=-HhPtfx-NvP0$`EZkDfm1Hac3!Ybnp5dtZbkF{y}1G-ZN?LHzbE>j#l&hO z3>ckIOwjha`JO`l-}gVWypIkB=3Jkp!_pyJG?K-?mCrxRj!5R1M|oME$HXX471zha zwAJ9~pE3wKo~CXzV8)(JCMj}`|Et0HHro`EWeT}{v)&_is+cDZzo@~0vUD_yx_+3T z^`Wqt2FH#0Q-Q93oij)gJx}9s$nsRkQeWB`=%7a>XpuVnj83x1;lrgqMV8wa{`C-z z>HC)U_c2EOo!fTu|f);U;eY+?%apDa5kO{-{myc0IfN7LUsYowAat*D#=Q>wP)q~PUJbaZ^5 zH7YDJsuFbE9`&2F(EpuE7uf7O0kXX&Uo`20;181w_@AHWv5b?^8rrSlD;=hXFPH5# zE8C=InF)IhlHQlsRvJA%MM1~>an^*%E8=z7%x5ty0M111fS-jM+9zhl%b7Rg!uCa!!G< z&#R!tq;;!J=-^>!&~Pd zaIm_eVeX+dF`@gJ1Wt;H87YwY9X(-?BE4C#0!!WFO*lJyr9m>!*B?1d+`U5~#ms=l z(s8xoRBBf8>lmpw-ws83-w`^TW3z!nZB48}vI5KRr=j;zb)lrk>6`DQr7jOtx**b9 zUDV;MM*niCx%5&%@?cCWoUcZ!Q+0{(IKDPnIzNn`e-)t z{Z0-CA6lV7K1?%6(Zgc~huI@4tI%n}N}XgeRgkourj$XEdb_d$(-)TMBulK4A)Ovp zqEU;Ov-0^AiKpcKV^hY@RcX#zvLhz04}Ml1vatM?vV$DnaB2|~Hpw7a>e-hH)Ve;_ zND+3ZCuBiQx~k}mIv3DlT<@PDOLBdypyRS43A%kxPOBunKd6olvo=IFRYU?#>5r4P>=EA#Dcavo4mo*hms4|kE_2|xcv>1BSP9a(L z{2nHBwmzqlg0CCNVWit1I>|Ea+*COARuh8GqqeV>PI_jop;Mn2D#=Ezn2u(-oj#(4 z)?t+b3%1SS&}(ulf*z-#H>9IZ6c}_t%viTWhjBBHYB0Fj5y(=v&Q@UJgQg}aJbsBs zix~I6AdCJ~M9}@4^}9-n#CknB%s6vWAz9Fz@fwWkzd|L&l-$b(dR%0x2EF>!m4>Vn z2HLr^To;9#(grPJfB(kB+$(&k2IKo}gCgqEViQJt-qB%fyX~B09#5wd^!tfEKha^~ z%7F&-P~LHp0IuLdQoHWM>W;s-e?dcW_c9N1vAl4pJ%UxVk^dAcZz~ zf(naz{$;`lW0Fp?^f7BynDzV@jTG(w4nm8ZJuw7*T_?GYvYdm970i|X9aNaUMy?Yq z%B7D%&Egx}mj35`{33K;ELueGz9#3f_5P-$b!{WlND;fOOo7p!mhHx)%Y2oZWelpq zq5ly1xQqCLS0=ScnO&@5KA~YoMD-CKk zD!8tOd6L^96$X^6rjRV=s3x^{ZEaGEn33xV`ngG`5(P#jM42S>o;^Z`PQ(1rBGpmR zq{(;CEMt?E0nzw;v&2{w5aBG5ouJzifKmS0hDWjphVxPf!2W;pDteCiLtYfo5^Gbrcx( z&V(ZSfVB!UU*&5giy6Ni&6593GD#7Axs3v&>RvENHg;_zG)rk;$%K&~`Wd8fX|qX# z!L_a_BpWs7vk6>+2_{!6;in7+>$`He=3ULI3)sBNugz$p_a znk4I1wY&;l1Iw8(xp7sg-_#Y9^tc_XYLG1ajqg!Gr8&z` zPAf1f?Tbc=`8Gm!QO-A%v|bz=XONmG|P=`djD1}IXSHk2K)>TeT0 znTN`bYPmvMW$$1b)A@}1X%mK4O_Lo^KTxL&B5KM2gJhX(vvlI8@{~01_O}L;lFlk5 z<4tRuXurpO2ztJLyQV>}rWehy?rq2^&8Zh=qPuXJ{{R73MO^Z#~Dxu6E zS<0IODjeVc4=ASpARhO1K88b9$mQ$K7&A)V4K@Ykn z*Hf0i<*rUG(rPy%XnXs)Ihth+y{N&ilVS`Q_|RH`>D}5JFzNX*lN6&m?N!kMEvx8o zD%9S6 zF-ey3rV~N0-$$#Q6p?CY4bBML0-4X%`YOyhxmF=XZ1{1sD7a*~Unv!Lo761#ayh`0*F4a{da-!fr9`A|-ZiRA({^r$NSDmrGLe11hliRF1pI59|GAHQIsg6nhl zmP)7HZfH_7UV1@;w*IToVur2U-o?~YJ9M=5o@vrx)5@e~A$~hlIC0rHD8}sm6S6Tg z`s<_^{AUJav3K1}7{5=(F@%aYHYV7V!(D%hPk|2w_IE|w{ z@@MHVIO7KcMqU1(k}R|KEK~YxAB_}wO~y(?f7z-~v$WrP8_;`PU4oA14}a63@6iQN zl%5Eaj!D^IQnR8&FNG97O)dMu)H>T$Y8D)I8`A3vrwz1w@?0GjbejVO|5%Qo^T+G= zRg&f0f26~dXv^*OeB_Q6>Bm+pn0p>M!eQP36)l2or>Zb{SqwoxXE>Fsk<2&3!$e2) zt;1np+c~nMJ6toUneS{(g~|4d3Hm%I9i;Ko-|2LLP4@W{&60*@Dlqor6toB&&=oC0 z`uz%-KFz(CZzWSLiVFVShBeAAS&rIhOb5vTB77F&FXO&l#9Ea64r}ZJHkx z!Oz>N=susy=`iT}G^x+<_6mB$A=7dmRjtX@2cYwAbe(9UXUAZWp49zrBKaLe(*l-XDBHw*P@N~9rvM7hG9Qrt=p+!boITgk_ zk1|R6{Q&b7m=u4IlOoyq99m5GZU$NGawiTGdi60$5xC^F0i(KQsU(ZI*;5+TW4l5v zA`gr;V8HI>91hNHOVIk#)f3HPE;L08*NsON$Q?g%lJ)i3NznE;Z=FI4k7^C1iTh{j z)XcBjN)yJ`T4}(nYOfU-8DUM(_hF8S2Fx03S@(Od_(w+v8?P`I33D5sXXamoua|B+mQsRfqpG~%?-sRdtHO~c${L4X0Ho+~CCbU}W+ z$l9bS)PlFX!ZFW@dxBCJ|qi~Ib}?ECu9 zC*Nm4X71cJlgUlyp8{6?c2$wA`obX-7Pj^fbR2aC2v~gD&EbeSmu-^yn(FPC#ZEb6 zVD6if%wfWmrWVOcKKX}2_rLnkfR)eR6(q~saNUBlua8lrocv=WA|T||CgD&<4)og4 zb$XdbH0Ej74-CpCuqBU|DpxU z#|=fx+A*J*aQYdC?z&Sa6@9_#Us%Fn%{Pw(oSo3jgcVtOJ7X0~^DJta@yr1Ojt)&i zv)Xk#2wJ~`+zKujqi<)68XghUtoqh63v*9>2}cjE)Mx&uE*=hU)d#x6xN_lx}rI-U%iW07)rtF{W(w*QrrEc>6G3EF>O z*lFm#u-PJI-J~Z>IHkoTn`FF|eja3aOaSIAKPyYXsD5=E2DNl+v!0x+%`Gc4X)epQ z1zRMWc5S$VrO{bvS(y?pVD8yEgJfkB51?6x1ApN#b9@&la|V26p;K9B6BgYZWx%Q@ zdkE-h`>uljyN)$oC;c0fnvQR^9P{a~ykf!e$5$&-X8m;5MyGW3-_N2~-@=^DNZo9} zDb4$FQhG)S1>^R7ZIaBn>TL^M(50J6vXWte1g$TtS3&8C>}sNCe6-wx^X~K!q>L}< zZbI+il?KV?4v!Y-Fxk?Ej)(s3(bMFzNzG<#IHh3mPbmg;{Bo3_{p^4O1xu*|Gu6dR<&#qbq-lwqSa0twFMq z_<9rakiLSHzN=j!i#W2(M5k@oNYMWC^9LMe1ua4|zIiK@dG{6x=vdLog2iV(u}K#7 z!M7Y{ei$ zQcL&6#unz@@#_dWPk194jq68q=o-96kgTrcX*8=!IDwYF$Mxfu#Vh>#nXGn^3b#+a zw2MRMwJlJVR$muTRQ9q+Hrw89Lx=j#AmzN@vI$xa>&K(n;v*vjtZXq4%F-kLf5+G9 zH49ymI?o_k_0C`plX^T-r1br?%7g`uB^JqIW4}PNw6UQarcCHylX6^7Wx~?dpX-j_ zzZtTu^HCNoY&A}hGN@5Ef}W?}pI0!j&lQ_w4K61bq)fOJr_i1^dkS=3(?YbI*(bpw z*|gu+3v|)M3Py2=wcHf zt6bDV8}rWB7PVZM@qr@gb0AwySby<~MaqKI0S2rdImLz{iGu{mMAVPk^x0bsYFRt1 zhk|*(?tv`DTc>pj4@c)sI!Vy_617*6vgC6&TE=ym%t@A2?Z2PAM}~=cd}2S$rRT!; zmiE|4LDJ{f2PrtTtJ5T<`@_d9w0qH~XgW^ha8izM8Ev82!<#m`tmv?UGYh5e)WciR z%-wzshprxn33@-X)hQbW<{cL#y`NrU!Gz>43f8q#HYwAO+%#a}NBszTevY13Ffn;A zT6&^dqGe&^+ni+H3R|Gv@BYh%x#za%&e$GpqGw*+Ye8?DwKmC;#2XyWefkB1l+|Uy z+OqpmoSK!l?m*D<@Ig15lyeq#Q?PQE5F{IMxC@7QF{K2ZXLVd^!Sv6=ZIVsdcUt%G z*ff(Sc~UQLx*pIueY-iKtHAA3Pu19P+Oe|+ z$x7@Yy5l1J`={q#)5lTi^EKmiyX2XAy^!hgbtc+zXt_bMxbeSpIOFJ-HYvR$UNg|C z2b~Izy|WfABM1E<(0L0sDs>6&tWbbqv#Y>ox9=k2sfR(;d|c%6gK>-oZk!H^aEKOf9W?M8xHR@{lQ;jC+y70JXd|9+Hh zGBIbpuj~C38{7Il1KqsGRLo_<^fw7Q{!j8h?(&*gJs(kiMbBIBx?;d2u?V zW)+#2(9#`wLObo$Oq0G~t{-bGQf7U!*&tbdWDh8_2ACEsJYH>+%<cLbjDLS8&>0{8-6EN&cvpAYcMhAHu6r}jfJF~SSR~_TI%^#V zA}HxNvup*2Rmc4IyYk5&6g4aSEd|o&Y}%NxW>uI)vbRqsdW z_%&8x9@jY8gzf>82>cv-vPH7li*wK+SC1b?OK-Dnf@Ea}?xVSEex}eXObSv?yqsjAow0+_Z2T7w6b$cv#U}sn=gnkxyLN(_&3(V8fqC+Z zjS8BpKQp28KVyl2{dXf;2$D_O+)P1d<7X{WdKZ}nIPg`sry#zOIUAHGoRDq&>i2Fp!2WbX*P6>4zNg;+0@|B5%{bkW%_er0_L3KHpxo2 z+_BKS?==onoc{e#diF19mV1W@%mV{Np(M z?zkdl^{1^&=(>B8p!@T9iVX{6zcfg>EUuS=ne$H*^nOL-+fephc~rr9$q5E5D*Hu{ zZ0?796dd~?0Lt>z?i?0{218c%N4WtLzHgyO`n@Mhw4=TsZc{V&#zVSu;yy8{rSq$7 zPO`}lm!MhM%ahTP^bZ}THlx=%{qhPM1pABbDdYz#C(EBqC z^n|bd>&@I=EiAO7<1omoZye_6*ieTFYtIe0wC~R4B+E^0Y{Hx!Ar>jKPnV!&an(#g zGKag~LOag>Y?C3!TKLzCsUOZasaf{z`vxgpX&Go)Jh5JoEV1SiheNxj2v%w@H>Y;E{G<|9_k4&|C2e=9+tShurqBH?C!C z1kELD+endY*qB@c?Vfv@Lr2;*MY8;l-P(lKC$&MVUa@H|vsPs5W*4eVbn>@_28>xh z8O>5dD+pSC?Qbhm2DR*F!^)=P43Z7#m~6qayOp}r-Y6E-a(3N#1?RLKg=WPc`Iog!{FBB=0>fSM6)?fY0Z^DBNPR%m+&&QlO zTCGM){>M}kPI_;wMKb5>kK1VH%aaxK^!-`DPBS7Qb5)GsXlMJMw55CY8r1apkS#VW zjh;x*c0XkhTJlFP8YD|gjIdzmvw;eB+4ygQ)>q$X1GZ1vh?W!Y`TxI}wV@pI-g1-y zlipgRNEx!vveC|xqZZl~(qF-;kCy2E-}gCK+TTKHOs^Nuj^?BsGG?NJCHxyfvcyLb z9D0w%6ZC!db^kI+`aVFhf>}dv+a!zKmc-$+$NYbPa+edBOXvNO0`s^F!ay5;Z_eSw zrQ0o-F~ooWvpOtBGw=5=aLgND;b_U5>*tm6Ui%Gd<|=7xL%!~7ibs2sF{@PXBhon{A+^^|__r zu+M%K=yA>SIdomq_fLko8&lH#eei*$=Z*&oJ!{zoflg1oXQC(1-DkiV?~GC8|6f06 z(pxtu>HYHNvklBMcK1ii3Gp!|$%e-l=^omtHDpf>ddGm1gWj-68GUPj2~*>DagsS= z=UC8l<)TT-tcCG{WX{CRXx6FbTTV*X`X)BXaz3BLVOH!jXc>FPzy75E{sfvOBzOeo z1Otnr3MBT!sHQ67lkA8y){bzMfBTH#ex|boUR6WU&D+LD?g*)_^Im>*dZ0*WT0p z+^3UGnlp3s+uGtL(*=6K(^Uk$j%dBoL{F@?}08_cS4GZc63YSB#Uo+#74(OPlv4M tk7u-Pnoc#TWlE1t227X#A?R_&?-OuX`f3yQezO6GLzX8I0VC)7jzW3F29akOKsH#!NQB|X=s;WjEwYSt5V~iSOOvYp)A|fIpA|i>1{7*y@ z5fKp)5kV${F(zY-G1;3=Rh?ATaa0{u$LqT4I`cY?*LCK&?rZu!&wbZ^p8Z+h_51$T zTF|t0=&Flas405|F48a!`xS=d}@w;e%0r?>F4M7neQ3p%Wz77@5e7W3FRKX zB$%@ezvSeb65@z>3c}ZZs;twx5dFDmXOM-8;C;UQ0%}*~0zj;mbi+(rw z?k^e<_V5>dwLbVI9S<0Ozv!@6YkuL|uD|#ofsfZO`s_b{`I1wmqe+FN>|0V4E11Z^f?P3aXco1wazyW?|I$`uVYw~vs z9bjO=HJ~fOCCzZV3$z zT>B1ur*axT6E+7-b$EjB-Q+;$qDFw0_aDLj!tbHHbN>otFUsJv)vv>Tc{kxRwPyJ2 zheT-j!apG8pf7wzmIb`~bbC^q6P8l2TMm6R{df3-`{Cf1-ACZt(NjS7Rt@<6Tr$8Z z@c={0Q^A10{R`-S=6m?{PBwgIG8lUMKjYyyUaf@MtQhdOjCbIWA6&uw)P6Xk_(Q1U zVLy1*hYd%#96;EJWBA_0o z=W-*QTyPdhT8M&U(w=~R-{ycms&|3G)C?f%<8ENSI2QWylVzwg`Y|9pItRY>oi8+6 z`vCgeh81}9l@olkXBR$Ou9_SOd_Cn&0t$-yO#qy_`p-aD-80btFZG;<$qz>UJo(1TCUoPY zd;q-g1Pt>YgGvK`2m4)~g^oT}z+u8aLW)fXaG~tn>9hI-es?h*d~NJE0OwEf5F+Jf z^3vP6(8YpXp!u}VK}HM|mAntJJ0ajd%6cFyQjvz_&7rfuO8cfX$Y_LsipBpzpN-;HOJ!NPI^H z=~90Oy~TeY=$Z6~22FQT0NuruP!A(OVC(`s$`R1s(g(lx`*(nlhC0w!CkJYtEWq8$eT3KS1BCI9((DnsN#C7BqnM1J1Ou;mE=(P|Oowh!}PWLW$}j?!`5r z*5&6ETGE;U`{6sVuYWM07+wK*Xa5Co6rd;1zg3ygx^7-wQ@K0z^a`~@-TN5 zoO-Y52++ zvr~}APrqkDI?E0B7upbah#hj7v&pAJgUvXfS3IUpU|}j|qc@E15BzWK=@+z&?gO!0 zvD^gH+^Oc@Z=jBPK&s0R1}>*RS7g<&o@R?tMzc8KNs`1+gQ6dFgxJ`cj8BHUjCb^s zBPmi9Craa4?mCsyT4A%dJx1>?i~Qtd0M)vL8zv7oyR}6%2G{zv=5gmA(6kFRl)=T@ zJ58}{YM->-nDSifcoHYXqd_vIBT{mF;~9ZP#W+yNz5K1q^IuP^P=csjAGO)Msh$h7 zH{|A~X>;E?KzVbVrioElzD;J!XLWqsF6gdI?Y35Ie=-_5^}iUBnDiV(+JML76UJ6M zmzyYNvD1s^`js?{EUn7}w|+gBdGznQAc$3IqW*$3S|W8d*5TDouZ(d zpL1AYeHvRH3wYfm*fv<=izjV9W%@p?nB|y}&i2!#{`cd!wz8A2Y#38QTGEaH*+4$8 zWv%_3`_PUV8_O8kP;qX=)L|9WPsGZZ3a`OnHXF4wrIAM8auhlWl-jt$7z(m|ef^HscbrNv5CLw zkj-RgP#5pc(DFWZVPUGsxI^pJ>o9+et&*8$|2Gq4UQB)~|zS_9e>y!7cUta@M(`otuv0FN3#B3R&goSV1US;rUu@&YI=H%=4G=2oeDfD_sZgQzk z#6KsUG3Q?H> zDq#&rH(bg1)C}!&$GR5N=jpf!qHHTO5;OZfVRQtE%yqMP{lOh+FW5HQfAG_p%eQA( zcjDXCs97PpcjL+?n@yM}tP5f*_qsAJSjwZyo@d&G3+VkipVqC8^_Cc_4_%kB%}LHN zB&U5!W8#@h;s|V#Qr~I3;S^*jm&Sc=d-uB7vWgOGqj1>P(KbYJ62sC%9g}`+WUMuy z#R)eL(%6rcqF~fX?eySCJL?v?XtxCgZ+@O$ByCKsG373SPBJYkyxn^GMcnK2={lyT zDLjV`^t(-Y4ziW}C@@#ncSO_6gRV!F#>&lC(6?+7AuTxHP|W2laQa9l(KL0USIN-S z`(D|Qq}@C&Ke(~SHkFU)vMNyD%yE-yg$z>_x{Rit70DWOE!ln2TN$Dw6rB=K5mw{d z9L;bWUA?uV4wQ%G1Qc`H)gmPkQx0pDzKNWbHGx;veNTrR#SSxELxN8 z;J|oyY7{Y|g}bS~i(?wU9bI}Zbv-++i6f`S5YKA4;ng07L@TLst39X9qeUpm9^9#C z6eBx43jG;Qt*wU8luh#%THDu!EIo~$&}ZQ!$c)$1r?+X|`Fx)K=|SfTcDCQ`o=oqa zj^mQ5Jx64zGWPgrNSkL}T&a93x`iXp_d=62B*RrpOFTGMQQl>S4AH9(ryJ|>b88CiQwoM@YIAPuaT zWiCn*C`WCK8=Ubq3|_zxU<91f0LEB5tt*P^)$J{v~vK8H&!KWO7$PeU(P z&-4g6W@fS~-3ZS`k~7KUB;_~pvW-%bc;hR_GJAg${+>%b406mhrX6tOUg?uL^r#Z`SfHViC>ZGJli9?{HYT( zKaRa~=rbSuW`phAF>*f@r(L{;lZ=ur41SlG659^rWQOBhlHx`AHgAbHBnW*N-MZSP zviRw9wK565FhTBZ4`vN>kWVRceS?#mc5fy(w$@6YHAS}s6eO!o;Ak_we>H93yIHcE znNzr>NKkGt!={c$v($bXqn;q2|BS0}QtVZE=5$Jamr6L?d{itip_BA<8f~l6K9*VK z`cqz$Tlb+LymwZiVu)LFDx;|(^qoeBWQpX#GLVi)E4&&5O zyBW2(;Vnb5jKEzMc$Wo`MY_8&v^4WjqenHSJ-jZknZ?TE)3hsBrbKGSikW_WzR*YYEX{`X$F9!h zF%k_V3BK1)8z+pqkw0KG9w05W6@FC7YURi^x4IXdsj96Eb8jxQ@6t(4NT!z{>55xD zqC+Jck!58VR*02gULs8fBQ1F>Q?L8lv!)%(#&B#ESwpt1G#_H72Yrc~W3il2^(ZrN zaDg_{&LVQ_?Btb39Vw>PTenOfpvz2w;&CIgK2C{z@SI||x)*3VY`4%fGB(g0Zpf02 z$+zukN_TimnxpsCV#Gt`=#u;=aTG3pu08tcc9YhUMj;G@RnK;;qa%m1M_}2sbe%ME zUzr?6oRA4EyN(6cx-rHQuU+q>Q4tl!TTV1qibxBgouKFIqgy<=s1n-P#OSy&iIO{K zQ_i()nYPQa#lp%yroCFmp(!IN&jvG_adp;45{2BlTq7-uCj`olnQlUxa)!5@HKK6H zx4TBKklU2Vr5j0U@mDN82ok?0pqx~5R6BiL$%-c1E7Pxr*75UPMf#6?gzWQpMc~!F z#;tlIC#oqD&8-`5iphE*T)(;3r>coiB{U*?{l9!hIxLHB^O79W@V6O_^zsBu94f16 zg@r|qmTE;=oawRzMtJdDqqk*+c*2~rVwKXqbRJ2(hMueUrg&b<=g6)Osq;QPQ6aN+ zTAK*dmdTv1$2L6YzVSRfmCE*X)?8g@#p6{FmvFXQhr3iqAaLkY@J z@eCW?f@s3g_et?K2bWm2Mv`lzZw-^|xeTmf!-q2t{&~CRL=;(=P{$q|}Lyd2_OPgr8$D^;p$Gb>`x24Y$oCamXB! zBLdr!M|W@Vss*(aQBa+Uhb+w#Gx!I0Gf}~Jcbft^v6?*PagF_vS(@8wPnkAQ(bCK7 zlv&K2mS1X?gfqwWT+AkSz&7+OvP*w2(L%t@w(d|Dg=liJD(%+(;QqHp>*`&^9ba+M z9cR%q$|em-7c%w9Y*9iLs$+cl(# zjeVOVuvf(=rP`cOdktblg%s#22fr11I=C8I2YpA7&lN zlle$)zF@H$rPJw+7lv!;`3vgBhBO6AAKN%$IJg>7H-0OqjMflPND-IEb?qvGdS}QQTd+8`lEz8B;oa!@iMbSGqV_&-x69Ded>us;YEbvmO-WUuO_oYo z?PgbGD_uQrdtSm3WtP*ML-I$A93Gvj)F(c`nO$pSZ5zfpnrH23)A8vp6R#Q5swGpy zWA|bt;*JpF;pr}5INuY?VWf7f-FK}Uv%X-Wt$t;CDuTN+>?RwbkB%R;9Eygdsnr?f z=wh9iUp+M8RC}4d``{dKWYf?z_nFX3wwWaF)4maqwNeJXm7 zGh3ppHQ(N)Y*xCPrP;gvNyd4#UzOoUbN8%rU$tjJUybctR&Mtrg<1BQj)Z>ejAvs~ zy@xcKx?P!wLCC2{`RPBpvSo!fqtGF><%tp$-PxPX!;dU>ihtzvfW6jEucqf+QjIG! zv}4XnC3qGLT+`Rh60sWnFwRbQ(iDtd4`z5Br7jV>S?8g&7CAeE&B^LTDoUM+dO=22 ztgFyM_w;AgDw%6}-c>*D(De~km|T3zOqFt?I43fyg(IYVK0e0aB(a7#yDe+HlL~U> zlrc~jsh6=S9k^OcI$rAX*+Hk1%hiWgCR^4ULrls6)c8yby=hFb`7rKbd{2(bpbDXc z&^fF)-ij)qk?#mL?ZKcztX{Q@;`4cd9Ig@394sTt;;H;XDKE~zYST~+9107MUMM7# zY+l(Ly}&~9nj`y%^Uw@Z8dgttKUslnGI zh=qNt*9i(WSE<1bsv2;5X{UzDVZV_1b$NDWx5}AtyRk0wmUkP9Ka{gmIVz58j>{hE zw~NuAMKk49p|{m_>)j4oEc(c15}}85cktXi3G$9ckFBRktZE~hHnvX+Z6wl1s;0?w zJ(_5jjoMvC23kWFbi#zk*#!IjMWU}h@cY&zxSD%>+s9>NLXZ_0v^$i66?cZahexjpccKvo8B zI)C0EuBRBy!U&Up|4?7PX+ahyFt;6+p_z8n`qhXsQo}&Q92Z@U|ME~X`|U(V=pW{b z8&$0`$AU%M=vkR;9D9o z{7g!O0GXF4+A*2+Aw<8SKtaZIykes}h68F@EeQiimY>?!vP10S?N-@&n+1e!Jw2J> ztT-k|)od$O#>G->?+hlPXZIn3YlQ+S8Le*N2s1X_zjVHMg^Mg^=w>wo?CI7(E=N40 z3dbcW+<8Kct#!l@Aexo0Se%*+j>fQ4f|ZAnXB$I`cOF{U$m*jBt!zVy9ADIM>vK#d z3%i3P2)ZX!Z}1X}=NgcmrWztMnl>a=vy6I=#vlz|Hr;Bq9*6?uI72$c^$QG{!61}p zbjDGMb?$;`YIF;Ws}$uKa3v_gToY1>=lk_6tCpL2s3?HSPi~0QkbZrvHIF`1ja#v%&wd71L;m4xs+TJMcu&qvG}E~ zy!F-~{04ieUR-7=MWm;SRV)vFYEwLIK$@#x>qvXFZ7?=^Yi89drfbt?^+cmP$8N<_ zVwlplk)pKE$W*hDjAB=FJBDkW^%jNr@f5<+>=fly_=~j`*TQGDdllLqHPZ5cULJ2z z_9(UKR79y)>oy^h6If7W=n~ zR*C9LRp|&RtcW6P--n zT211SDwKRObEg1BPetW5M{r+MFV(E%r%lgF;yO$wac`<7Nth%UDB*WHi*xl3w1MMS zP1nTsCrZ-Ck+hIjF*~a=qa&m~!w`2ZtbGojsTw9drzO%jWRhZubV%8(TeW$yrpwt+ zRp;mUgqloip3tO>Yr_k;{i&*iVt2#LZ5LriZCgZET91ASo_6CsBe*dLIy zpnlP9OMl*XfH`c*pt~sDn}T`agD#SpI_@J*K0+Fl7u3H=iR#K|%aUbu__q#g5PVm) zS?R`=cgxxxI)C+)4og)Rj8(_W!IrpMf|#%J6J*n!>e;p-L2l)&&W-O=9wDA@48&p$ zFT@~yul=~`WMF{Asljl95Mv@DHJk6nb}_oPCh)UIhXfvKYu^r@WXrEPsPSWka?EO0 zOD-wI=3BLOU)87-o0{Y5bIZM$nno<&wcLk$VAENf^q(}7Ezz{y_Wef#dLNx!mzL>LdqU?(hjiPuhtheOZ~sO^ zI%!2at|YQN*@!ESyK7}unz1a3jV?Zs+N(WoE;Qyg=$P)GYR3A?Fx4^Fgb$99`o`$y zIrI#7f<&%QKZu)%T(+H8Ll+C{hxIb){P|t}G5-UCk1B z+~x?##4MwuB}|LK3oxVovT1;vXxXJfX|oim1Yl?Mv*?v7SljPrbHUX+UTa8FFj z4w#k~88B`#GM016n!8!3EGYWKEJ!O(y5gRL_(~3jE|t#Mo=&^j-D3 z#@HNRtL@tt#PibWf!z^;+1B8cDBFxGTbB z5^p@?&TtSTZg}zoUtJbEsxz{eb33zH-Qpt1sSRK!$lUr;%kfq5RPDpn%814g!BD^O za^{G9c#Ik}8Z?NpjCZ9yS&}D}t9S{wb`^%pxh7Y9h?&q7D$8o0BB{EtlAv0Drf>Oy zd?}yGBia0$26*1&1o{cdfC$C%`DzX@m? z&JGEZb6Cp{(kSh0!q!nA|(Grz(jgtz8UOV|xW7RyR7xnSy zY-6`}RM}W!Zfbqp=h>`9t_#D)JZbi1CiAje40p^p7lEP42Y0|vt4G-OSVNsKWrdv7 zl6hmke5}j|X}4FSn`r)lO^4ubH6WFm<~`JLHQ13nh9l+= z1vA`;F6x6O97~_U9+RQ-M}zv}WGJ1jc2t)piWP2-Z+5Gjr<)kn*}d6Ums_a1>|r*| zMj+O2lOi42HacdZs&B^YwzUZ%byQPW2GbBTUq=-Y`&}wMy1Yh`E5LSnt7pHAJi*bj zqZDpj;z-cvedYP`eO9(~UXj(2Rtt)qxA9g(`H>bca@A-JNP~_>(Ps4^$?*eXrN-gK z7K(jk8G63N)Zic_akE>vOnwEfjZvbeZ&_q0n5{JHJ7CRFwV7>UMQG<}a{eM+IbcDD zn(bwy)?~h?7TbX#xqnXKZ_#5VPU#EH4r{5}QGvX>#z^N{diI`ZRe0f;#iPlM@mxa{ zdn>hEkD3LpyJfg4igqw!sEQ>z`Ek5)tt3-;-|D8f&+z!g=QE0I3Vfj~U8|IDcCH EFW=h0;{X5v literal 0 HcmV?d00001 diff --git a/ifs_samples/make_makefile_am.pl b/ifs_samples/make_makefile_am.pl new file mode 100755 index 000000000..8fa368da3 --- /dev/null +++ b/ifs_samples/make_makefile_am.pl @@ -0,0 +1,112 @@ +#!/usr/bin/perl +use strict; +use File::Basename; + +my $samplesdir="../samples"; +my @sub; +navigate("."); +foreach my $d ( sort @sub ) +{ + process($d); +} +@sub=(); + +sub navigate { + my ($dir) = @_; + + opendir(DIR,$dir); + foreach my $d ( readdir(DIR) ) + { + next if($d =~ /^\./); + + if(-d "$dir/$d") + { + push @sub , "$dir/$d"; + navigate("$dir/$d"); + } + } + closedir(DIR); +} + +sub process_samples { + my ($out) = @_; + my @files; + my $dir=$samplesdir; + + opendir(DIR,$dir); + foreach my $d ( readdir(DIR) ) + { + #next if($d =~ /^\./); + + unless (-d $d) { + push @files, "../$dir/$d" if($d =~ /\.(tmpl)$/); + } + + } + closedir(DIR); + + if(@files) + { + foreach my $f ( sort @files ) + { + my $filename = fileparse($f); + print $out "\\\n\t$filename "; + } + print $out "\n\n"; + foreach my $f ( sort @files ) + { + my $filename = fileparse($f); + print $out "$filename: $f\n"; + print $out "\tcp -f $f .\n\n"; + } + print $out "\n\n"; + } + + +} +sub process { + my ($dir) = @_; + my @files; + my $out; + + opendir(DIR,$dir); + foreach my $d ( readdir(DIR) ) + { + next if($d =~ /^\./); + + unless (-d $d) { + push @files, $d if($d =~ /\.(tmpl)$/); + } + + } + closedir(DIR); + + if(@files) + { + my $name; + $dir =~ s/^\.\///; + $name = "$dir"; + $name =~ s/\W/_/g; + my $makefile="$name/Makefile.am"; + + system("p4 edit $makefile"); + open($out,"> $makefile") or die "unable to open $makefile: $!"; + + print $out "#This file is generated by make_makefile_am.pl\n"; + print $out "# DON'T EDIT!!!\n\n"; + print $out $name."dir = \@IFS_SAMPLES_DIR\@/$name\n\n"; + print $out "dist_".$name."_DATA = "; + + foreach my $f ( sort @files ) + { + print $out "\\\n\t$f "; + } + print $out "\n\n"; + print $out "nodist_".$name."_DATA = "; + process_samples($out); + print $out "\n"; + close($out); + } + + +} diff --git a/java/gribview/src/gribview/BevelArrowIcon.java b/java/gribview/src/gribview/BevelArrowIcon.java new file mode 100755 index 000000000..8752d597b --- /dev/null +++ b/java/gribview/src/gribview/BevelArrowIcon.java @@ -0,0 +1,142 @@ +package gribview; + + + import java.awt.*; + import javax.swing.*; + + + /** + * @version 1.0 02/26/99 + */ + public class BevelArrowIcon implements Icon { + public static final int UP = 0; // direction + public static final int DOWN = 1; + + private static final int DEFAULT_SIZE = 11; + + private Color edge1; + private Color edge2; + private Color fill; + private int size; + private int direction; + + public BevelArrowIcon(int direction, boolean isRaisedView, boolean isPressedView) { + if (isRaisedView) { + if (isPressedView) { + init( UIManager.getColor("controlLtHighlight"), + UIManager.getColor("controlDkShadow"), + UIManager.getColor("controlShadow"), + DEFAULT_SIZE, direction); + } else { + init( UIManager.getColor("controlHighlight"), + UIManager.getColor("controlShadow"), + UIManager.getColor("control"), + DEFAULT_SIZE, direction); + } + } else { + if (isPressedView) { + init( UIManager.getColor("controlDkShadow"), + UIManager.getColor("controlLtHighlight"), + UIManager.getColor("controlShadow"), + DEFAULT_SIZE, direction); + } else { + init( UIManager.getColor("controlShadow"), + UIManager.getColor("controlHighlight"), + UIManager.getColor("control"), + DEFAULT_SIZE, direction); + } + } + } + + public BevelArrowIcon(Color edge1, Color edge2, Color fill, + int size, int direction) { + init(edge1, edge2, fill, size, direction); + } + + + public void paintIcon(Component c, Graphics g, int x, int y) { + switch (direction) { + case DOWN: drawDownArrow(g, x, y); break; + case UP: drawUpArrow(g, x, y); break; + } + } + + public int getIconWidth() { + return size; + } + + public int getIconHeight() { + return size; + } + + + private void init(Color edge1, Color edge2, Color fill, + int size, int direction) { + this.edge1 = edge1; + this.edge2 = edge2; + this.fill = fill; + this.size = size; + this.direction = direction; + } + + private void drawDownArrow(Graphics g, int xo, int yo) { + g.setColor(edge1); + g.drawLine(xo, yo, xo+size-1, yo); + g.drawLine(xo, yo+1, xo+size-3, yo+1); + g.setColor(edge2); + g.drawLine(xo+size-2, yo+1, xo+size-1, yo+1); + int x = xo+1; + int y = yo+2; + int dx = size-6; + while (y+1 < yo+size) { + g.setColor(edge1); + g.drawLine(x, y, x+1, y); + g.drawLine(x, y+1, x+1, y+1); + if (0 < dx) { + g.setColor(fill); + g.drawLine(x+2, y, x+1+dx, y); + g.drawLine(x+2, y+1, x+1+dx, y+1); + } + g.setColor(edge2); + g.drawLine(x+dx+2, y, x+dx+3, y); + g.drawLine(x+dx+2, y+1, x+dx+3, y+1); + x += 1; + y += 2; + dx -= 2; + } + g.setColor(edge1); + g.drawLine(xo+(size/2), yo+size-1, xo+(size/2), yo+size-1); + } + + private void drawUpArrow(Graphics g, int xo, int yo) { + g.setColor(edge1); + int x = xo+(size/2); + g.drawLine(x, yo, x, yo); + x--; + int y = yo+1; + int dx = 0; + while (y+3 < yo+size) { + g.setColor(edge1); + g.drawLine(x, y, x+1, y); + g.drawLine(x, y+1, x+1, y+1); + if (0 < dx) { + g.setColor(fill); + g.drawLine(x+2, y, x+1+dx, y); + g.drawLine(x+2, y+1, x+1+dx, y+1); + } + g.setColor(edge2); + g.drawLine(x+dx+2, y, x+dx+3, y); + g.drawLine(x+dx+2, y+1, x+dx+3, y+1); + x -= 1; + y += 2; + dx += 2; + } + g.setColor(edge1); + g.drawLine(xo, yo+size-3, xo+1, yo+size-3); + g.setColor(edge2); + g.drawLine(xo+2, yo+size-2, xo+size-1, yo+size-2); + g.drawLine(xo, yo+size-1, xo+size, yo+size-1); + } + + + } diff --git a/java/gribview/src/gribview/BlankIcon.java b/java/gribview/src/gribview/BlankIcon.java new file mode 100755 index 000000000..1d925e60c --- /dev/null +++ b/java/gribview/src/gribview/BlankIcon.java @@ -0,0 +1,39 @@ +package gribview; + +import java.awt. *; +import javax.swing. *; + +/** + * @version 1.0 02/26/99 + */ +public class BlankIcon implements Icon { + private Color fillColor; + private int size; + + public BlankIcon() { + this(null, 11); + } + + public BlankIcon(Color color, int size) { + //UIManager.getColor("control") + //UIManager.getColor("controlShadow") + fillColor = color; + + this.size = size; + } + + public void paintIcon(Component c, Graphics g, int x, int y) { + if (fillColor != null) { + g.setColor(fillColor); + g.drawRect(x, y, size-1, size-1); + } + } + + public int getIconWidth() { + return size; + } + + public int getIconHeight() { + return size; + } +} diff --git a/java/gribview/src/gribview/GribAnimator.java b/java/gribview/src/gribview/GribAnimator.java new file mode 100755 index 000000000..922324125 --- /dev/null +++ b/java/gribview/src/gribview/GribAnimator.java @@ -0,0 +1,62 @@ +package gribview; + + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class GribAnimator implements Runnable{ + Thread t = null; + GribMainFrame view = null; + public long speed = 10; + boolean playing = false; + + public GribAnimator(GribMainFrame rp) { + this.view = rp; + + + } + + public void accelerate(){ + if (speed > 1) speed --; + } + + public void slowDown(){ + speed ++; + } + + + + public void start(){ + playing = true; + t = new Thread(this); + t.start(); + } + + public void stop(){ + playing = false; + } + + public void run(){ + while(playing){ + try { + view.selectNext(); + t.sleep(speed*100); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + } + + + +} diff --git a/java/gribview/src/gribview/GribHandleSet.java b/java/gribview/src/gribview/GribHandleSet.java new file mode 100755 index 000000000..073e47838 --- /dev/null +++ b/java/gribview/src/gribview/GribHandleSet.java @@ -0,0 +1,177 @@ +package gribview; + +import jgribapi.*; +import java.util.*; +import javax.swing.event.*; + +import javax.swing.*; +import javax.swing.table.*; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class GribHandleSet extends Vector implements TableModel { + + + private GribHandle current = null; + handleComparator handleCompare = new handleComparator(); + private Vector selectionKeys = new Vector(); + JTable driver = null; + + public GribHandleSet() { + super(); + + try { + jbInit(); + } catch (Exception ex) { + ex.printStackTrace(); + } + addSelection("ID"); + addSelection("step"); + addSelection("param"); + addSelection("date"); + } + + + public void addHandle(GribHandle h) { + this.add(h); + if (current == null) { + current = h; + } + + } + public void addSelection(String name){ + selectionKeys.add(name); + } + public GribHandle getHandleAt(int index) { + if (index >= size()) return null; + if (index < 0) return null; + return (GribHandle) elementAt(index); + } + + public void removeHandle(GribHandle h) { + this.remove(h); + } + + public void setDrivingTable(JTable driver) { + this.driver = driver; + } + + + public GribHandle getCurrentHandle() { + + if(driver != null) + current = getHandleAt(driver.getSelectedRow()); + + return current; + + } + + public int addAKey(String s) { + selectionKeys.add(s); + return selectionKeys.indexOf(s); + } + private void jbInit() throws Exception { + } + + public int getRowCount() { + return this.size(); + } + + public int getColumnCount() { + return selectionKeys.size(); + } + + public String getColumnName(int columnIndex) { + return selectionKeys.elementAt(columnIndex).toString(); + } + + public Class getColumnClass(int columnIndex) { + return String.class; + }; + + public boolean isCellEditable(int rowIndex, + int columnIndex) { + return false; + } + + public Object getValueAt(int rowIndex, + int columnIndex) { + + GribHandle g = getHandleAt(rowIndex); + if(columnIndex == 0) return Long.toString(g.getID()); + + return g.getString(selectionKeys.elementAt(columnIndex).toString()); + } + + public void setValueAt(Object aValue, + int rowIndex, + int columnIndex) { + return; + } + + + public void removeTableModelListener(TableModelListener l) { + return; + } + + public void addTableModelListener(TableModelListener l) { + return; + } + + public void sortByColumn(int sortCol, boolean isAscent) { + String sortKey = selectionKeys.elementAt(sortCol).toString(); + if(sortCol == 0) + handleCompare.setCompareKey("Comparing IDS"); + else + handleCompare.setCompareKey(sortKey); + handleCompare.setAscentCompare(isAscent); + Collections.sort(this, handleCompare); + } +} + + +class handleComparator implements Comparator { + boolean ascent = true; + private String compareKey = null; + + public void setCompareKey(String compareKey) { + this.compareKey = compareKey; + } + + public void setAscentCompare(boolean ascent) { + this.ascent = ascent; + } + + public int compare(Object o1, Object o2) { + int rep ; + if (compareKey == null) { + return 0; + } + if (compareKey.compareTo("Comparing IDS") == 0) { + rep = (int)(((GribHandle)o2).getID() - ((GribHandle)o1).getID()); + } + else + try { + rep = Double.compare(Double.parseDouble((((GribHandle)o1).getString(compareKey))),Double.parseDouble((((GribHandle)o2).getString(compareKey)))); + } catch (Exception ex) { + rep = ((GribHandle)o1).getString(compareKey).compareTo(((GribHandle)o2).getString(compareKey)); + } + + if (ascent) { + return rep; + } else { + return -rep; + } + + } +} diff --git a/java/gribview/src/gribview/GribMainFrame.java b/java/gribview/src/gribview/GribMainFrame.java new file mode 100755 index 000000000..b662dc09e --- /dev/null +++ b/java/gribview/src/gribview/GribMainFrame.java @@ -0,0 +1,697 @@ + +package gribview; + +import jgribapi.*; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.*; +import java.awt.image.*; +import javax.swing.*; +import javax.swing.table.*; +import java.awt.*; +import java.awt.event.*; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class GribMainFrame extends JFrame { + JPanel contentPane; + BorderLayout borderLayout1 = new BorderLayout(); + JMenuBar jMenuBar1 = new JMenuBar(); + JMenu jMenuFile = new JMenu(); + JMenuItem jMenuFileExit = new JMenuItem(); + JLabel statusBar = new JLabel(); + JMenuItem jMenuOpen = new JMenuItem(); + GribAnimator animator = new GribAnimator(this); + GribHandleSet set = new GribHandleSet(); + String dpath = "."; + JPanel jMainPane = new JPanel(); + + String statusBarDefaultText = "Welcome to gribview 0.1 - ECMWF 2005"; + + JPanel jHandleSetPane = new JPanel(); + + BorderLayout borderLayout2 = new BorderLayout(); + + JTabbedPane jHandleSelected = new JTabbedPane(); + + JPanel jHeaderPane = new JPanel(); + JPanel jRequestPane = new JPanel(); + JPanel jInspectPane = new JPanel(); + JPanel jViewPane = new JPanel(); + JPanel jTopDataPane = new JPanel(); + JPanel jTreePane = new JPanel(); + SortButtonRenderer sortedRenderer = new SortButtonRenderer(); + + JTable jHandeSelectionTable = new JTable(set); + JTableHeader selectionTableheader = jHandeSelectionTable.getTableHeader(); + + JScrollPane jSelectionScrollPane = new JScrollPane(jHandeSelectionTable); + + JScrollPane jHeaderScrollPane = new JScrollPane(jHeaderPane); + JScrollPane jRequestScrollPane = new JScrollPane(jRequestPane); + + JScrollPane jInspectScrollPane = new JScrollPane(jInspectPane); + JScrollPane jTreeScrollPane = new JScrollPane(jTreePane); + JSplitPane jSplitSelectionPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false); + + BorderLayout borderLayout3 = new BorderLayout(); + BorderLayout borderLayout4 = new BorderLayout(); + BorderLayout borderLayout5 = new BorderLayout(); + BorderLayout borderLayout6 = new BorderLayout(); + BorderLayout borderLayout7 = new BorderLayout(); + + JGribToolBar toolBar = new JGribToolBar(this); + JTextArea jTextHeader = new JTextArea(); + JTextArea jTextRequest = new JTextArea(); + GribRenderPane gribRenderPane = new GribRenderPane(this); + JScrollPane jRenderScrollPane = new JScrollPane(gribRenderPane); + + + String requestHandlers[] = {"class", + "type", + "stream", + + "expver", + "date", + "time", + "levelist", + "channel", + + "diagnostic", + "iteration", + "step", + + "method", + "system", + "number", + "frequency", + "direction", + "origin", + "refdate", + "reference", + "fcmonth", + "leadtime", + "opttime", + "ident", + "instrument", + "obstype", + "levtype", + + "fcperiod", + "param", + "domain", + "quantile" + + }; + JMenu jMenuHelp = new JMenu(); + JMenuItem jMenuAbout = new JMenuItem(); + JMenuItem jMenuSaveAll = new JMenuItem(); + JMenuItem jMenuSaveSelect = new JMenuItem(); + JSlider jSliderZoom = new JSlider(JSlider.VERTICAL); + + public GribMainFrame() { + try { + setDefaultCloseOperation(EXIT_ON_CLOSE); + jbInit(); + } catch (Exception exception) { + exception.printStackTrace(); + } + } + + public GribMainFrame(String[] args) { + try { + setDefaultCloseOperation(EXIT_ON_CLOSE); + jbInit(); + } catch (Exception exception) { + exception.printStackTrace(); + } + + for (int i = 0; i < args.length; i++) { + openGribFile(args[i]); + } + + } + + + /** + * Component initialization. + * + * @throws java.lang.Exception + */ + private void jbInit() throws Exception { + contentPane = (JPanel) getContentPane(); + contentPane.setLayout(borderLayout1); + setSize(new Dimension(600, 600)); + setTitle("Grib View"); + statusBar.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10)); + statusBar.setBorder(BorderFactory.createLoweredBevelBorder()); + statusBar.setDoubleBuffered(true); + statusBar.setDisplayedMnemonic('0'); + statusBar.setText(" "); + jMenuFile.setText("File"); + set.setDrivingTable(jHandeSelectionTable); + jMenuOpen.setText("Open"); + jMenuOpen.addActionListener(new GribMainFrame_jMenuOpen_actionAdapter(this)); + jMenuOpen.addMouseListener(new GribMainFrame_jMenuOpen_mouseAdapter(this)); + jMenuFileExit.setText("Exit"); + jMenuFileExit.addActionListener(new + GribMainFrame_jMenuFileExit_ActionAdapter(this)); + jMainPane.setLayout(borderLayout2); + ImageIcon topIcon = new ImageIcon(GribMainFrame.class.getResource( + "apilogo.gif")); + this.setIconImage(topIcon.getImage()); + selectionTableheader.addMouseListener(new HeaderListener( + selectionTableheader, sortedRenderer)); + + jHandeSelectionTable.addMouseListener(new HandleTableMouseListener(this)); + jHandeSelectionTable.addKeyListener(new HandleTableKeyListener(this)); + + jSelectionScrollPane.setMaximumSize(new Dimension(32767, 32767)); + jSelectionScrollPane.setPreferredSize(new Dimension(123, 123)); + jHeaderPane.setLayout(borderLayout3); + jRequestPane.setLayout(borderLayout4); + jViewPane.setLayout(borderLayout5); + jTopDataPane.setLayout(borderLayout6); + jMenuHelp.setText("Help"); + jMenuAbout.setText("About"); + jMenuAbout.addActionListener(new GribMainFrame_jMenuAbout_actionAdapter(this)); + jMenuSaveAll.setText("Save All"); + jMenuSaveAll.addActionListener(new + GribMainFrame_jMenuSaveAll_actionAdapter(this)); + jMenuSaveSelect.setText("Save Selected"); + jMenuSaveSelect.addActionListener(new + GribMainFrame_jMenuSaveSelect_actionAdapter(this)); + jSliderZoom.addMouseListener(new GribMainFrame_jSliderZoom_mouseAdapter(this)); + jSliderZoom.addMouseMotionListener(new + GribMainFrame_jSliderZoom_mouseMotionAdapter(this)); + jMenuBar1.add(jMenuFile); + jMenuBar1.add(jMenuHelp); + jMenuFile.add(jMenuOpen); + jMenuFile.add(jMenuSaveAll); + jMenuFile.add(jMenuFileExit); + jSliderZoom.setValue(0); + // jMenuFile.add(jMenuSaveSelect); + + jSplitSelectionPane.setOneTouchExpandable(true); + setJMenuBar(jMenuBar1); + statusBar.setText(statusBarDefaultText); + + jHandeSelectionTable.setShowHorizontalLines(false); + + jHeaderPane.add(jTextHeader, java.awt.BorderLayout.CENTER); + jRequestPane.add(jTextRequest, java.awt.BorderLayout.CENTER); + + selectionTableheader.setDefaultRenderer(sortedRenderer); + sortedRenderer.setSelectedColumn(1); + + contentPane.add(statusBar, java.awt.BorderLayout.SOUTH); + + contentPane.add(jMainPane, java.awt.BorderLayout.CENTER); + + jViewPane.add(jRenderScrollPane, java.awt.BorderLayout.CENTER); + + jHandleSelected.add(jHeaderScrollPane, "Header"); + jHandleSelected.add(jRequestScrollPane, "Request"); + jHandleSelected.add(jViewPane, "View"); + jHandleSelected.add(jInspectScrollPane, "Inspect"); + // jHandleSelected.add(jTreeScrollPane, "Tree"); + jViewPane.add(jSliderZoom, java.awt.BorderLayout.EAST); + + jTopDataPane.add(jHandleSelected, java.awt.BorderLayout.CENTER); + jTopDataPane.add(toolBar, java.awt.BorderLayout.NORTH); + + + + jSplitSelectionPane.add(jSelectionScrollPane); + jSplitSelectionPane.add(jTopDataPane); + jSelectionScrollPane.setMinimumSize(new Dimension(150,100)); + jTopDataPane.setMinimumSize(new Dimension(150,150)); + + jMainPane.add(jSplitSelectionPane, java.awt.BorderLayout.CENTER); + jMenuHelp.add(jMenuAbout); + + dpath = System.getProperty("user.dir"); + + jTextHeader.setFont(new Font("Monospaced",Font.PLAIN,14)); + jTextRequest.setFont(new Font("Monospaced",Font.PLAIN,14)); + + + } + + + void updateSelection(){ + jHandeSelectionTable = new JTable(set); + selectionTableheader = jHandeSelectionTable.getTableHeader(); + jSelectionScrollPane.removeAll(); + jSelectionScrollPane.add(jHandeSelectionTable); + } + + /** + * File | Exit action performed. + * + * @param actionEvent ActionEvent + */ + void jMenuFileExit_actionPerformed(ActionEvent actionEvent) { + System.exit(0); + } + + public GribRenderPane getGribRenderPane() { + return gribRenderPane; + } + public GribAnimator getAnimator(){ + + return animator; + } + + String makeRequest() { + + GribHandle g = set.getCurrentHandle(); + String rep = "GRIB"; + for (int i = 0; i < requestHandlers.length; i++) { + String val = g.getString(requestHandlers[i]); + if (val.length() > 0) { + rep = rep + "," + "\n\t" + requestHandlers[i] + " = " + val; + } + } + return rep; + } + + public void jHandleTableListener_selectedChange() { + int oldv = jHeaderScrollPane.getVerticalScrollBar().getValue(); + jTextHeader.setText(set.getCurrentHandle().getAscii("GRIB")); + jHeaderScrollPane.getVerticalScrollBar().setValue(0); + + jTextRequest.setText(makeRequest()); + gribRenderPane.setHandle(set.getCurrentHandle()); + gribRenderPane.repaint(); + jInspectPane.removeAll(); + JGribObjectProducer jo = new JGribViewDescriptorProducer(set.getCurrentHandle(),this); + Vector v = set.getCurrentHandle().getObjects(jo,"GRIB",null); + jInspectPane.setLayout(new GridLayout(v.size()-1,1)); + for (int i = 1; i< v.size(); i++ ) { + jInspectPane.add((JGribEditComponent) v.elementAt(i)); + } + jInspectPane.validate(); + jInspectPane.repaint(); + } + + + public void resetSelected(){ + set.getCurrentHandle().reset(); + gribRenderPane.setHandle(set.getCurrentHandle()); + jHandleTableListener_selectedChange() ; + } + + public void selectNext() { + if(jHandeSelectionTable.getRowCount() <1)return; + int slctd = jHandeSelectionTable.getSelectedRow(); + toolBar.setEnabled(true); + if (jHandeSelectionTable.getRowCount()-1 > slctd) + slctd++; + else + slctd = 0; + + jHandeSelectionTable.changeSelection(slctd, -1, false, false); + + jHandleTableListener_selectedChange() ; + } + public void selectPrevious() { + if(jHandeSelectionTable.getRowCount() <1)return; + int slctd = jHandeSelectionTable.getSelectedRow(); + + if (jHandeSelectionTable.getRowCount() > 0) + slctd--; + else + slctd = 0; + + jHandeSelectionTable.changeSelection(slctd, -1, false, false); + + jHandleTableListener_selectedChange() ; + } + + public void jHandleTableListener_actionPerformed(MouseEvent e) { + jHandleTableListener_selectedChange(); + } + + public void openGribFile(String fname) { + GribFile gf = null; + + try { + gf = new GribFile(fname); + + } catch (Exception ex) { + ex.printStackTrace(); + } + GribHandle g = null; + if (gf != null) { + int n = 0; + + while ((g = ((GribHandle) gf.next())) != null) { + set.addHandle(g); + + } + + jHandeSelectionTable.setSize(100, 100); + + jHandeSelectionTable.repaint(); + selectNext() ; + } + jHandleSelected.setSelectedComponent(jViewPane); + if(jHandeSelectionTable.getRowCount() >1) + // toolBar.play(); + this.setTitle( this.getTitle()+" : "+fname); + } + + public void jMenuOpen_actionPerformed(ActionEvent e) { + JFileChooser jf = new JFileChooser(dpath); + + int returnVal = jf.showOpenDialog(this); + + if (returnVal == jf.APPROVE_OPTION) { + openGribFile(jf.getSelectedFile().getAbsolutePath()); + } + + dpath=jf.getSelectedFile().getPath(); + + } + +public void addAColumn(String key){ + int newset =set.addAKey(key); + TableColumn column = new TableColumn(newset); + jHandeSelectionTable.getColumnModel().addColumn(column); + + column.setHeaderValue(key); + jHandeSelectionTable.repaint(); + selectionTableheader.repaint(); +} + +public void packImageInFile(){ +/* + JGribTreeNode root = new JGribTreeNode(JGribObjectProducer.GRIBSECTION,"GRIB",set.getCurrentHandle()); + jTreePane.removeAll(); + jTreePane.setLayout(new BorderLayout()); + jTreePane.add(new JTree(root),BorderLayout.CENTER) ; +return; +*/ + + JFileChooser jf = new JFileChooser(dpath); + int returnVal = jf.showOpenDialog(this); + dpath=jf.getSelectedFile().getPath(); + if (returnVal == jf.APPROVE_OPTION) { + + GribHandle h = set.getCurrentHandle(); + ImageIcon im = new ImageIcon(jf.getSelectedFile().getAbsolutePath()); + + int mni = im.getIconWidth(); + int mnj = im.getIconHeight(); + System.out.println("ni "+ mni +"nj "+ mnj ); + + int vals[] = new int[mni*mnj]; + double dvals[] = new double[mni*mnj]; + + PixelGrabber pr = new PixelGrabber(im.getImage(),0,0,mni,mnj,vals,0,mni); + + try { + pr.grabPixels(); + + } catch (Exception ex) { + ex.printStackTrace(); + } + + h.setLong("geography.ni",mni); + h.setLong("geography.nj",mnj); + + for (int j = 0; j < dvals.length; j++) { + double val = vals[j] & 0x000000FF; + val += (vals[j] & 0x0000FF00)>>8; + val += (vals[j] & 0x00FF0000)>>16; + dvals[j] = val; + } + + + h.setDoubleArray("values",dvals); + + + } + } + public void jMenuOpen_mouseEntered(MouseEvent e) { + statusBar.setText("Opens a gribFile"); + } + + public void jMenuOpen_mouseExited(MouseEvent e) { + statusBar.setText(statusBarDefaultText); + } + + + public void jMenuAbout_actionPerformed(ActionEvent e) { + GribViewAboutBox dlg = new GribViewAboutBox(this); + Dimension dlgSize = dlg.getPreferredSize(); + Dimension frmSize = getSize(); + Point loc = getLocation(); + dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, + (frmSize.height - dlgSize.height) / 2 + loc.y); + dlg.setModal(true); + dlg.pack(); + dlg.show(); + } + + public void jMenuSaveSelect_actionPerformed(ActionEvent e) { + + } + + public void jMenuSaveAll_actionPerformed(ActionEvent e) { + JFileChooser jf = new JFileChooser(dpath); + + + + + jf.setDialogType(JFileChooser.SAVE_DIALOG); + + int returnVal = jf.showSaveDialog(this); + + if (returnVal == jf.APPROVE_OPTION) { + try { + dpath = jf.getSelectedFile().getPath(); + + GribFile gf = new GribFile(jf.getSelectedFile().getAbsolutePath()); + for (int i = 0; i < set.size(); i++) { + gf.writeHandle(set.getHandleAt(i)); + } + gf.close(); + + } catch (Exception ex) { + + } + + } + + } + + public void jSliderZoom_mouseReleased(MouseEvent e) { + + } + + public void jSliderZoom_mouseMoved(MouseEvent e) { + + } + + public void jSliderZoom_mouseDragged(MouseEvent e) { + gribRenderPane.zoom = jSliderZoom.getValue()+1; + gribRenderPane.repaint(); + } + public void setSlider(int val) { + if (val >100) + val = 100; + if (val < 00) + val = 0; + jSliderZoom.setValue(val); + jSliderZoom.repaint(); + } + + + +} + + +class GribMainFrame_jSliderZoom_mouseAdapter extends MouseAdapter { + private GribMainFrame adaptee; + GribMainFrame_jSliderZoom_mouseAdapter(GribMainFrame adaptee) { + this.adaptee = adaptee; + } + + public void mouseReleased(MouseEvent e) { + adaptee.jSliderZoom_mouseReleased(e); + } +} + + +class GribMainFrame_jSliderZoom_mouseMotionAdapter extends MouseMotionAdapter { + private GribMainFrame adaptee; + GribMainFrame_jSliderZoom_mouseMotionAdapter(GribMainFrame adaptee) { + this.adaptee = adaptee; + } + + public void mouseMoved(MouseEvent e) { + adaptee.jSliderZoom_mouseMoved(e); + } + + public void mouseDragged(MouseEvent e) { + adaptee.jSliderZoom_mouseDragged(e); + } +} + + +class GribMainFrame_jMenuSaveAll_actionAdapter implements ActionListener { + private GribMainFrame adaptee; + GribMainFrame_jMenuSaveAll_actionAdapter(GribMainFrame adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jMenuSaveAll_actionPerformed(e); + } +} + + +class GribMainFrame_jMenuSaveSelect_actionAdapter implements ActionListener { + private GribMainFrame adaptee; + GribMainFrame_jMenuSaveSelect_actionAdapter(GribMainFrame adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jMenuSaveSelect_actionPerformed(e); + } +} + + +class GribMainFrame_jMenuAbout_actionAdapter implements ActionListener { + private GribMainFrame adaptee; + GribMainFrame_jMenuAbout_actionAdapter(GribMainFrame adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jMenuAbout_actionPerformed(e); + } +} + + +class GribMainFrame_jMenuOpen_mouseAdapter extends MouseAdapter { + private GribMainFrame adaptee; + GribMainFrame_jMenuOpen_mouseAdapter(GribMainFrame adaptee) { + this.adaptee = adaptee; + } + + public void mouseEntered(MouseEvent e) { + adaptee.jMenuOpen_mouseEntered(e); + } + + public void mouseExited(MouseEvent e) { + adaptee.jMenuOpen_mouseExited(e); + } + +} + + +class GribMainFrame_jMenuOpen_actionAdapter implements ActionListener { + private GribMainFrame adaptee; + GribMainFrame_jMenuOpen_actionAdapter(GribMainFrame adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jMenuOpen_actionPerformed(e); + } +} + + +class GribMainFrame_jMenuFileExit_ActionAdapter implements ActionListener { + GribMainFrame adaptee; + + GribMainFrame_jMenuFileExit_ActionAdapter(GribMainFrame adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent actionEvent) { + adaptee.jMenuFileExit_actionPerformed(actionEvent); + } +} + + +class HandleTableKeyListener extends KeyAdapter { + GribMainFrame adapter; + + HandleTableKeyListener(GribMainFrame adapter) { + this.adapter = adapter; + } + + public void keyReleased(KeyEvent e) { + adapter.jHandleTableListener_selectedChange(); + } + +} + + +class HandleTableMouseListener extends MouseAdapter { + GribMainFrame adapter; + + HandleTableMouseListener(GribMainFrame adapter) { + this.adapter = adapter; + } + + public void mouseReleased(MouseEvent e) { + adapter.jHandleTableListener_selectedChange(); + } + +} + + +class HeaderListener extends MouseAdapter { + JTableHeader header; + SortButtonRenderer renderer; + + HeaderListener(JTableHeader header, SortButtonRenderer renderer) { + this.header = header; + this.renderer = renderer; + } + + public void mousePressed(MouseEvent e) { + int col = header.columnAtPoint(e.getPoint()); + int sortCol = header.getTable().convertColumnIndexToModel(col); + renderer.setPressedColumn(col); + renderer.setSelectedColumn(col); + header.repaint(); + + if (header.getTable().isEditing()) { + header.getTable().getCellEditor().stopCellEditing(); + } + + boolean isAscent; + if (SortButtonRenderer.DOWN == renderer.getState(col)) { + isAscent = true; + } else { + isAscent = false; + } + ((GribHandleSet) header.getTable().getModel()) + .sortByColumn(sortCol, isAscent); + } + + public void mouseReleased(MouseEvent e) { + int col = header.columnAtPoint(e.getPoint()); + renderer.setPressedColumn( -1); // clear + header.repaint(); + } +} diff --git a/java/gribview/src/gribview/GribRenderPane.java b/java/gribview/src/gribview/GribRenderPane.java new file mode 100755 index 000000000..159a19207 --- /dev/null +++ b/java/gribview/src/gribview/GribRenderPane.java @@ -0,0 +1,632 @@ + +package gribview; + +import javax.swing.*; +import java.awt.*; +import java.awt.geom.*; +import java.util.*; +import java.awt.image.*; +import java.awt.print.PrinterJob; +import java.awt.event.*; +import java.awt.print.*; +import jgribapi.*; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class GribRenderPane extends JComponent implements Printable { + GribHandle handle = null; + GribHandle cachedHandle = null; + Image image = null; + + public static final int DRAG_MAP = 0; + public static final int ADD_MARKER = 1; + double vals[]; + int ni = 1; + int batard = 0; + int mode = DRAG_MAP; + // projection + double zoom = 1; + double centerx = Double.MAX_VALUE; + double centery = Double.MAX_VALUE; + + // original data + double olx = 0; + double oly = 0; + double ofx = 0; + double ofy = 0; + + // first projection + double plx = 0; + double ply = 0; + double pfx = 0; + double pfy = 0; + + int oldMousX = 0; + int oldMousY = 0; + + double refx = 0; + double refy = 0; + GribMainFrame mainFrame; + + public GribRenderPane(GribMainFrame mainFrame) { + + this.mainFrame = mainFrame; + GribRenderPane_jRenderPane_mouseAdapter myAdapter = new + GribRenderPane_jRenderPane_mouseAdapter(this); + addMouseMotionListener(myAdapter); + addMouseWheelListener(myAdapter); + addMouseListener(myAdapter); + } + + public void setHandle(GribHandle g) { + this.handle = g; + cachedHandle = null; + } + + public void setMode(int mode) { + this.mode = mode; + } + + + + + + public void paintImage(Graphics g, Component o, int x, int y, int width, + int height) { + + + + Graphics2D gr = (Graphics2D) g; +/* gr.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + gr.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BICUBIC);*/ + + + if (cachedHandle == null) { + boolean sph = false; + + + + vals = handle.getDoubleArray("values"); + double missvals = handle.getDouble("missingValue"); + + ofx = handle.getDouble("geography.loFirst"); + ofy = handle.getDouble("geography.laFirst"); + + olx = handle.getDouble("geography.loLast"); + oly = handle.getDouble("geography.laLast") ; + if (ofx == ofy) { + ofx = 0; + ofy = 90; + } + if (olx == oly) { + olx = 360; + oly = -90; + } + if((Double.MAX_VALUE == centerx)||(plx!=olx)||(ply!=oly)||(pfx!=ofx)||(pfy!=ofy)) + { + centerx = (olx+ofx)/2; + centery = (oly+ofy)/2; + plx = olx; + ply = oly; + pfx = ofx; + pfy = ofy; + zoom = 1; + } + + // System.out.println("ox:" + ofx +" oy:" + ofy +" olx:" + olx+" oly:" +oly); + ni = (int) handle.getLong("geography.ni"); + if (ni == 0 || ni == 65535) { + ni = (int)handle.getLong("pentagonalResolutionParameterJ"); + if (ni == 0 || ni == 65535) { + ni = (int) Math.sqrt(vals.length); + } + else + { + sph = true; + } + } + if (ni == 0) { + return; + } + + + + if(sph){ + ni = (int)handle.getLong("pentagonalResolutionParameterJ"); + ni ++; + double tvals[] = handle.getDoubleArray("values"); + int rp = 0; + int cp = 1; + + for (int j = 0; j < ni; j++){ + for (int i = j; i < ni; i++){ + tvals[rp] *= Math.pow(i*(i+1),1); + vals[j*ni+i] = tvals[rp]; + rp+=2; + } + for (int i = j; i < ni; i++){ + tvals[cp] *= Math.pow(i*(i+1),1); + vals[i*ni+j] = tvals[cp]; + cp+=2; + } + + + } + + } + + + + + + + handle.maxVal = vals[0]; + handle.minVal = handle.maxVal; + + for (int i = 0; i < vals.length; i++) { + if (vals[i] != missvals){ + if(handle.maxVal == missvals) handle.maxVal = vals[i]; + if (handle.maxVal < vals[i]) { + handle.maxVal = vals[i]; + } + if (handle.minVal > vals[i]) { + handle.minVal = vals[i]; + } + } + } + int pixels[] = new int[vals.length]; + int mint = 0; + double shade = 1.0; + mint &= 0; + // System.out.println("nvals : "+ vals.length+" ni : "+ ni + " max " +handle.maxVal + " min " + handle.minVal); + + + for (int i = 0; i < vals.length; i++) { + if (vals[i] == missvals) pixels[i] = 255 << 24 | 255 << 16 | 0 << 8 | 0; + else{ + + int v = (int) (((vals[i] - handle.minVal) / + (handle.maxVal - handle.minVal)) * (255.0 *shade)); + /* + int red = v << 16; + int green = v << 8; + int blue = v ;*/ + int red = 0; + int green = 0; + int blue = 0; + + if (v <= 255) { + red = v; + green = v; + blue = v; + } +/* + if (v <= 255) { + red = v; + green = 0; + blue = 0; + } + if ((v > 255) && (v <= 510)) { + v -= 255; + + red = 255 - v; + green = v; + blue = 0; + } + + if ((v > 510) && (v <= 765)) { + v -= 510; + + red = 0; + green = 255 - v; + blue = v; + } + if ((v > 765) && (v <= 1020)) { + v -= 765; + + red = v; + green = 0; + blue = 255 - v; + } + if ((v > 1020) && (v <= 1275)) { + v -= 1020; + + red = 255; + green = v; + blue = 0; + } + if ((v > 1275) && (v <= 1530)) { + v -= 1275; + red = 255; + green = 255 - v; + blue = v; + } + if ((v > 1530) && (v <= 1785)) { + v -= 1530; + red = 255 - v; + green = 0; + blue = 255; + } + if ((v > 1785) && (v <= 2040)) { + v -= 1785; + red = 0; + green = v; + blue = 255; + } + if ((v > 2040) && (v <= 2295)) { + v -= 2040; + red = v; + green = 255; + blue = 255; + }*/ + + + + red = red << 16; + green = green << 8; + + pixels[i] = 255 << 24 | red | green | blue; + } + } + + /* + ColorModel cmi = generateColorModel(); + DataBuffer dbuf = new DataBufferByte(pixels,vals.length,0); + int numBanks = dbuf.getNumBanks(); + int bitMasks[] = new int[]{(byte)255}; + SampleModel sampleModel = new SinglePixelPackedSampleModel(DataBuffer.TYPE_BYTE , ni, vals.length/ni, bitMasks); + WritableRaster raster = Raster.createWritableRaster(sampleModel, dbuf, null); + BufferedImage image = new BufferedImage(cmi, raster, false, null); + */ + MemoryImageSource mr = new MemoryImageSource(ni, pixels.length / ni, + pixels, 0, ni); + image = Toolkit.getDefaultToolkit().createImage(mr); + + /* for (int i = 0; i < vals.length; i++) { + int vi = (int) (((vals[i] - handle.minVal) / + (handle.maxVal - handle.minVal)) * 255); + gr.setColor(new Color(vi, vi, vi)); + + if (vals[i] == handle.maxVal) { + gr.setColor(Color.red); + } + if (vals[i] == handle.minVal) { + gr.setColor(Color.blue); + } + gr.fillRect((i % ni), i / ni, 1, 1); + } + */ + // gr.setColor(new Color(100, 255, 200)); + // gr.fillRect(0,0,width,height); + + + cachedHandle = handle; + + + + } + paintProjectedImage(gr); + } + + void paintProjectedImage(Graphics2D gr){ + boolean drawpath=false; + + double lw = getWidth()*zoom; + double lh = getHeight()*zoom; + + + + double fx = (centerx-ofx)/(olx - ofx); + double fy = (centery-ofy)/(oly - ofy); + + + double lx = (zoom*getWidth())*fx; + double ly = (zoom*getHeight())*fy; + + lx = getWidth()/2 - lx; + ly = getHeight()/2 - ly; + gr.drawImage(image, (int)(lx), (int)(ly),(int)(lw),(int)(lh), this); + if(drawpath) + { + GeneralPath gpath = new GeneralPath(); + for (int i = 0; i < getComponentCount(); i++) { + JGribMarker mark = ((JGribMarker) getComponent(i)); + + if(i>0){ + JGribMarker previous = ((JGribMarker) getComponent(i-1)); + gr.setColor(new Color(255,50,50,100)); + gr.setStroke(new BasicStroke(2.0f)); + double x1 = previous.getX()+20; + double y1 = previous.getY()+20; + double x2 = mark.getX()+20; + double y2 = mark.getY()+20; + + double cx1 = x1; + double cy1 = y1; + double cx2 = x2; + double cy2 = y2; + + if(i < getComponentCount()-1){ + JGribMarker next = ((JGribMarker) getComponent(i+1)); + double x3 = next.getX()+20; + double y3 = next.getY()+20; + + cx2 = x2+((x2 - ((x1+x3)/2))/2); + cy2 = y2+((y2 - ((y1+y3)/2))/2); + + x3 = cx2; + cx2 = x2+(cy2-y2); + cy2 = y2-(x3-x2); + + } + + if(i > 1){ + JGribMarker prevprevious = ((JGribMarker) getComponent(i-2)); + + double x0 = prevprevious.getX()+20; + double y0 = prevprevious.getY()+20; + + cx1 = x1-((x1 - ((x0+x2)/2))/2); + cy1 = y1-((y1 - ((y0+y2)/2))/2); + + x0 =cx1; + cx1 = x1+(cy1-y1); + cy1 = y1-(x0-x1); + + } + gr.fillOval((int)cx1+1,(int)cy1+1,3,3); + gr.fillOval((int)cx2+1,(int)cy2+1,3,3); + gpath.curveTo((float)cx1,(float)cy1,(float)cx2,(float)cy2,(float)x2,(float)y2); + } + + else + { + + gpath.moveTo(mark.getX()+20,mark.getY()+20); + } + + + + } + + // if(getComponentCount() > 2) gpath.closePath(); + gr.draw(gpath); + } + else{ + + for (int i = 0; i < getComponentCount(); i++) + ((JGribMarker) getComponent(i)).paint(gr); + + + } + } + + + public void paint(Graphics gr) { + if (handle != null) { + Graphics2D g = (Graphics2D) gr; + + if (handle != null) { + paintImage(g, this, 0, 0, this.getWidth(), + this.getHeight()); + /* g.setColor(Color.black); + g.fillRect(0, this.getHeight() - 20, this.getWidth(), 20);*/ + + g.setColor(new Color(255,255,255,100)); + g.fillRect(0, this.getHeight() - 20, this.getWidth(), 20); + + g.setColor(Color.black); + + g.drawString("Maximum :" + handle.maxVal + " Minimum :" + + handle.minVal, 10, this.getHeight() - 5); + } + } + + } + + public int print(Graphics g, PageFormat pf, int pi) throws PrinterException { + Graphics2D g2d = (Graphics2D) g; + if (pi >= 1) { + return Printable.NO_SUCH_PAGE; + } + g2d.translate(pf.getImageableX(), pf.getImageableY()); + paint(g2d); + return Printable.PAGE_EXISTS; + } + + + public void jRenderPane_mouseWheelMoved(MouseWheelEvent e) { + + double nzoom = zoom - ((double)e.getWheelRotation()*Math.abs(zoom))/5; + if (nzoom > 1){ + zoom = nzoom; + } + else + { + zoom = 1; + double dcx = (centerx-(olx+ofx)/2); + double dcy = (centery-(oly+ofy)/2); + if(dcx < 0.01 && dcy < 0.01) + { + centerx = (olx+ofx)/2; + centery = (oly+ofy)/2; + } + else + centerx = centerx-dcx/5; + centery = centery-dcy/5; + + } + mainFrame.setSlider((int)zoom); + repaint(); + } + + public void setDragOrigin(MouseEvent e){ + oldMousX = e.getX(); + oldMousY = e.getY(); + } + + public void moving(MouseEvent e){ + if (mode == ADD_MARKER){ + this.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); + } + if (mode == DRAG_MAP){ + this.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + } + + + } + public void exiting(MouseEvent e){ + + } + public void drag(MouseEvent e){ + int dx = oldMousX - e.getX(); + int dy = oldMousY - e.getY(); + + + centerImage(getWidth()/2+dx, getHeight()/2+dy); + + oldMousX = e.getX(); + oldMousY = e.getY(); + + repaint(); + } + public void doubleClicked(MouseEvent e){ + if (mode == DRAG_MAP) + centerImage(e.getX(),e.getY()); + } + public void clicked(MouseEvent e){ + + if (mode == ADD_MARKER){ + addMarker(e); + setMode(DRAG_MAP); + } + } + + + + public double getValueAt(Point2D.Double p){ + return vals[getIndexAt(p)]; + + } + public int getIndexAt(Point2D.Double p){ + + + if((p.getX() < ofx) || ( p.getY() > ofy) ) return 0; + + if((p.getX() > olx) || ( p.getY() < oly) ) return 0; + + double x = (p.getX() -ofx)/ (olx-ofx); + double y = (p.getY() -ofy)/ (oly-ofy); + + int nline = vals.length/ni; + int pos = ni*((int)(nline * y)) ; + pos += x*ni; + + + if (pos < 0) return 0; + if (pos > vals.length) return 0; + + + return pos; + } + + private void centerImage(int x, int y){ + Point2D.Double p = getLonLat(x,y); + centerx = p.getX(); + centery = p.getY(); + repaint(); + } + + public Point getPosition(Point2D.Double p){ + Point rep = new Point(10,10); + + double x = -(p.getX()-centerx); + double y = -(p.getY()-centery); + + x /= (olx-ofx); + y /= (oly-ofy); + + x *= getWidth(); + y *= getHeight(); + + x *= zoom; + y *= zoom; + + rep.x = (int)-( x - (getWidth()/ 2)); + rep.y = (int)-( y - (getHeight()/ 2)); + + return rep; + } + + public Point2D.Double getLonLat(int x, int y){ + + double dx = (getWidth()/ 2)-x ; + double dy = (getHeight()/2)-y; + + dx /= zoom; + dy /= zoom; + + dx /= getWidth(); + dy /= getHeight(); + + dx *= (olx-ofx); + dy *= (oly-ofy); + + dx = centerx - dx; + dy = centery - dy; + + return new Point2D.Double(dx, dy); + } + + void addMarker(MouseEvent e){ + this.add(new JGribMarker(this,getLonLat(e.getX(),e.getY()))); + repaint(); + } +} + +class GribRenderPane_jRenderPane_mouseAdapter implements + MouseWheelListener, MouseMotionListener , MouseListener{ + private GribRenderPane adaptee; + GribRenderPane_jRenderPane_mouseAdapter(GribRenderPane adaptee) { + this.adaptee = adaptee; + } + + public void mouseWheelMoved(MouseWheelEvent e) { + adaptee.jRenderPane_mouseWheelMoved(e); + } + public void mouseMoved(MouseEvent e) { + adaptee.moving(e); + } + public void mouseDragged(MouseEvent e) { + adaptee.drag(e); + } + public void mouseReleased(MouseEvent e) { + + } + public void mousePressed(MouseEvent e) { + adaptee.setDragOrigin(e); + } + public void mouseExited(MouseEvent e) { + adaptee.exiting(e); + } + public void mouseEntered(MouseEvent e) { + } + public void mouseClicked(MouseEvent e) { + if(2 == e.getClickCount()) + adaptee.doubleClicked(e); + else + adaptee.clicked(e); + } +} diff --git a/java/gribview/src/gribview/GribView.java b/java/gribview/src/gribview/GribView.java new file mode 100755 index 000000000..2a924429e --- /dev/null +++ b/java/gribview/src/gribview/GribView.java @@ -0,0 +1,81 @@ + +package gribview; + +import java.awt.Toolkit; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import java.util.*; +import java.awt.Dimension; +import java.awt.GraphicsEnvironment; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class GribView { + public GribView() { + try { + jbInit(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + boolean packFrame = false; + + /** + * Construct and show the application. + */ + public GribView(String[] args) { + GribMainFrame frame = new GribMainFrame(args); + // Validate frames that have preset sizes + // Pack frames that have useful preferred size info, e.g. from their layout + if (packFrame) { + frame.pack(); + } else { + frame.validate(); + } + + // Center the window + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + Dimension frameSize = frame.getSize(); + if (frameSize.height > screenSize.height) { + frameSize.height = screenSize.height; + } + if (frameSize.width > screenSize.width) { + frameSize.width = screenSize.width; + } + frame.setLocation((screenSize.width - frameSize.width) / 2, + (screenSize.height - frameSize.height) / 2); + frame.setVisible(true); + } + + /** + * Application entry point. + * + * @param args String[] + */ + public static void main(String[] args) { + try { + UIManager.setLookAndFeel(UIManager. + getSystemLookAndFeelClassName()); + } catch (Exception exception) { + exception.printStackTrace(); + } + + + new GribView(args); + + } + + private void jbInit() throws Exception { + } +} diff --git a/java/gribview/src/gribview/GribViewAboutBox.java b/java/gribview/src/gribview/GribViewAboutBox.java new file mode 100755 index 000000000..caf4bc59a --- /dev/null +++ b/java/gribview/src/gribview/GribViewAboutBox.java @@ -0,0 +1,108 @@ +package gribview; + + + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.*; + +/** + *

            Title: java Grib View

            + * + *

            Description: Java grib viewer and quick visualisation

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company: ECMWF European Center for Medium Range Weathe Forecast

            + * + * @author Jean Baptiste Filippi + * @version 1.0 + */ +public class GribViewAboutBox extends JDialog implements ActionListener { + JPanel panel1 = new JPanel(); + JPanel panel2 = new JPanel(); + JPanel insetsPanel1 = new JPanel(); + JPanel insetsPanel2 = new JPanel(); + JPanel insetsPanel3 = new JPanel(); + JButton button1 = new JButton(); + JLabel imageLabel = new JLabel(); + JLabel label1 = new JLabel(); + JLabel label2 = new JLabel(); + JLabel label3 = new JLabel(); + JLabel label4 = new JLabel(); + ImageIcon image1 = new ImageIcon(); + BorderLayout borderLayout1 = new BorderLayout(); + BorderLayout borderLayout2 = new BorderLayout(); + FlowLayout flowLayout1 = new FlowLayout(); + GridLayout gridLayout1 = new GridLayout(); + String product = "java Grib View"; + String version = "1.0"; + String copyright = "Copyright (c) 2005 "; + String comments = "Java grib viewer and quick visualisation"; + + public GribViewAboutBox(Frame parent) { + super(parent); + try { + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + jbInit(); + } catch (Exception exception) { + exception.printStackTrace(); + } + } + + public GribViewAboutBox() { + this(null); + } + + /** + * Component initialization. + * + * @throws java.lang.Exception + */ + private void jbInit() throws Exception { + image1 = new ImageIcon(GribMainFrame.class.getResource( + "apilogo.png")); + imageLabel.setIcon(image1); + setTitle("About"); + panel1.setLayout(borderLayout1); + panel2.setLayout(borderLayout2); + insetsPanel1.setLayout(flowLayout1); + insetsPanel2.setLayout(flowLayout1); + insetsPanel2.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + gridLayout1.setRows(4); + gridLayout1.setColumns(1); + label1.setText(product); + label2.setText(version); + label3.setText(copyright); + label4.setText(comments); + insetsPanel3.setLayout(gridLayout1); + insetsPanel3.setBorder(BorderFactory.createEmptyBorder(10, 60, 10, 10)); + button1.setText("OK"); + button1.addActionListener(this); + insetsPanel2.add(imageLabel, null); + panel2.add(insetsPanel2, BorderLayout.WEST); + getContentPane().add(panel1, null); + insetsPanel3.add(label1, null); + insetsPanel3.add(label2, null); + insetsPanel3.add(label3, null); + insetsPanel3.add(label4, null); + insetsPanel3.add(button1); + panel2.add(insetsPanel3, BorderLayout.CENTER); + panel1.add(insetsPanel1, BorderLayout.SOUTH); + panel1.add(panel2, BorderLayout.NORTH); + setResizable(true); + } + + /** + * Close the dialog on a button event. + * + * @param actionEvent ActionEvent + */ + public void actionPerformed(ActionEvent actionEvent) { + if (actionEvent.getSource() == button1) { + dispose(); + } + } +} diff --git a/java/gribview/src/gribview/JGribEditComponent.java b/java/gribview/src/gribview/JGribEditComponent.java new file mode 100755 index 000000000..fab692200 --- /dev/null +++ b/java/gribview/src/gribview/JGribEditComponent.java @@ -0,0 +1,224 @@ +package gribview; + +import javax.swing.*; +import jgribapi.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.GridLayout; +import java.util.Iterator; +import java.util.Vector; +import java.awt.BorderLayout; +import java.awt.*; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class JGribEditComponent extends JPanel { + GribHandle g = null; + int type; + String key; + JButton jLabelKey = new JButton(); + JTextField jTextValue = new JTextField(); + JButton jButton1 = new JButton(); + JButton jButton2 = new JButton(); + JLabel defaultLabel = new JLabel(); + GridLayout gridLayout1 = new GridLayout(1,3); + BorderLayout borderLayout1 = new BorderLayout(); + + + GribMainFrame obs; + + public JGribEditComponent() { + try { + jbInit(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public JGribEditComponent(GribMainFrame obs,GribHandle g,String key, int type) { + jButton2.setBackground(UIManager.getColor( + "ComboBox.selectionBackground")); + jButton1.setBackground(UIManager.getColor("Desktop.background")); + jLabelKey.setBackground(Color.orange); + + defaultLabel.setBackground(UIManager.getColor( + "CheckBoxMenuItem.foreground")); + + this.g = g; + this.type =type; + this.key = key; + this.obs = obs; + + jLabelKey.setPreferredSize(new Dimension(150,10)); + + + jButton1.setPreferredSize(new Dimension(100,10)); + jButton2.setPreferredSize(new Dimension(100,10)); + + jLabelKey.setText(key); + this.setLayout(borderLayout1); + this.add(jLabelKey,BorderLayout.WEST); + + jButton2.setText("pack"); + jButton1.setText("+"); + jButton2.addActionListener(new + JGribEditComponent_jButton2_actionAdapter(this)); + if(type == JGribObjectProducer.GRIBDEFAULT){ + defaultLabel.setText(g.getAscii(key)); + this.add(defaultLabel,BorderLayout.CENTER); + this.add(new JLabel("-"),BorderLayout.EAST); + } + + if(type == JGribObjectProducer.GRIBSECTION){ + defaultLabel.setText("Section"); + this.add(defaultLabel); + + jButton1.addActionListener(new + JGribEditComponent_jButton1_actionAdapter(this)); + + + this.add(jButton1,BorderLayout.EAST); + } + if(type == JGribObjectProducer.GRIBLONG){ + jTextValue.setText(g.getString(key)); + jLabelKey.addActionListener(new + JGribEditComponent_jLabelKey_actionAdapter(this)); + this.add(jTextValue,BorderLayout.CENTER); + this.add(jButton2,BorderLayout.EAST); + + } + if(type == JGribObjectProducer.GRIBDOUBLE){ + jTextValue.setText(g.getString(key)); + jLabelKey.addActionListener(new + JGribEditComponent_jLabelKey_actionAdapter(this)); + this.add(jTextValue,BorderLayout.CENTER); + this.add(jButton2,BorderLayout.EAST); + + } + if(type == JGribObjectProducer.GRIBSTRING){ + jTextValue.setText(g.getString(key)); + jLabelKey.addActionListener(new + JGribEditComponent_jLabelKey_actionAdapter(this)); + this.add(jTextValue,BorderLayout.CENTER); + this.add(jButton2,BorderLayout.EAST); + } + + if(type == JGribObjectProducer.GRIBBYTES){ + defaultLabel.setText("Bytes"); + this.add(defaultLabel,BorderLayout.CENTER); + this.add(new JLabel(),BorderLayout.EAST); + + } + + + } + private void jbInit() throws Exception { + jLabelKey.setBackground(UIManager.getColor("CheckBox.focus")); + jLabelKey.setText("Key"); + jLabelKey.addActionListener(new + JGribEditComponent_jLabelKey_actionAdapter(this)); + jTextValue.setText("value"); + jTextValue.setText("+"); + jButton1.addActionListener(new + JGribEditComponent_jButton1_actionAdapter(this)); + this.setLayout(gridLayout1); + jButton2.addActionListener(new + JGribEditComponent_jButton2_actionAdapter(this)); + this.setLayout(gridLayout1); + jButton2.setBackground(UIManager.getColor( + "ComboBox.selectionBackground")); + jButton1.setBackground(UIManager.getColor("Desktop.background")); + defaultLabel.setBackground(UIManager.getColor( + "CheckBoxMenuItem.foreground")); + + this.add(jLabelKey); + this.add(defaultLabel); + this.add(jTextValue); + this.add(jButton2); + this.add(jButton1); + + } + + + public void jButton1_actionPerformed(ActionEvent e) { + JPanel jInspectPane = new JPanel(); + JGribObjectProducer jo = new JGribViewDescriptorProducer(g,obs); + Vector v = g.getObjects(jo,key,null); + JFrame jw = new JFrame("Section " + key); + jInspectPane.setLayout(new GridLayout(v.size()-1,4)); + for (int i = 1; i< v.size(); i++ ) { + jInspectPane.add((JGribEditComponent) v.elementAt(i)); + } + + JScrollPane jInspectScrollPane = new JScrollPane(jInspectPane); + jw.getContentPane().add(jInspectScrollPane, java.awt.BorderLayout.CENTER); + jw.setSize(jInspectScrollPane.getPreferredSize()); + jw.setVisible(true); +/* obs.validate(); + obs.repaint();*/ + } + + public void jButton2_actionPerformed(ActionEvent e) { + if(type == JGribObjectProducer.GRIBLONG){ + long a = Integer.parseInt(jTextValue.getText()); + g.setLong(key,a); + } + if(type == JGribObjectProducer.GRIBDOUBLE) + g.setDouble(key,Double.parseDouble(jTextValue.getText())); + + + if(type == JGribObjectProducer.GRIBSTRING) + g.setString(key,jTextValue.getText()); + + } + + public void jLabelKey_actionPerformed(ActionEvent e) { + obs.addAColumn(jLabelKey.getText()); + } +} + + +class JGribEditComponent_jLabelKey_actionAdapter implements ActionListener { + private JGribEditComponent adaptee; + JGribEditComponent_jLabelKey_actionAdapter(JGribEditComponent adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jLabelKey_actionPerformed(e); + } +} + + +class JGribEditComponent_jButton2_actionAdapter implements ActionListener { + private JGribEditComponent adaptee; + JGribEditComponent_jButton2_actionAdapter(JGribEditComponent adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jButton2_actionPerformed(e); + } +} + + +class JGribEditComponent_jButton1_actionAdapter implements ActionListener { + private JGribEditComponent adaptee; + JGribEditComponent_jButton1_actionAdapter(JGribEditComponent adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jButton1_actionPerformed(e); + } +} diff --git a/java/gribview/src/gribview/JGribMarker.java b/java/gribview/src/gribview/JGribMarker.java new file mode 100755 index 000000000..c512cc982 --- /dev/null +++ b/java/gribview/src/gribview/JGribMarker.java @@ -0,0 +1,192 @@ +package gribview; + +import javax.swing.*; +import java.awt.*; +import java.awt.geom.*; +import java.util.*; +import java.awt.image.*; +import java.awt.print.PrinterJob; +import java.awt.event.*; +import java.awt.print.*; +import jgribapi.*; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class JGribMarker extends JComponent { + public JGribMarker() { + try { + jbInit(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + private GribRenderPane rpane = null; + + private boolean modeEdit = true; + + Point2D.Double p; + + public JGribMarker(GribRenderPane parentPane, Point2D.Double p) { + rpane = parentPane; + this.setSize(140, 41); + + this.p = p; + + JGribMarker_mouseAdapter myAdapter = new JGribMarker_mouseAdapter(this); + addMouseListener(myAdapter); + addMouseMotionListener(myAdapter); + } + + public void paint(Graphics2D g) { + + Point lp = rpane.getPosition(p); + lp.x -=21; + lp.y -=21; + setLocation(lp); + + if (modeEdit) { + paintEdit(g); + } else { + paintIdle(g); + } + } + + private void paintEdit(Graphics2D g) { + + g.setColor(new Color(255, 255, 255, 20)); + + g.fillOval(getX(), getY(), 41, 41); + g.setColor(new Color(255, 255, 255, 150)); + g.fillRect(getX()+21, getY(), getWidth()-21, getHeight()); + + g.setColor(new Color(255, 255, 255, 255)); + + g.fillRect(getX(), getY()+19, 40, 3); + g.fillRect(getX()+19, getY(), 3, 40); + + g.setColor(new Color(255, 0, 0, 255)); + + g.fillRect(getX(), getY()+20, 40, 1); + g.fillRect(getX()+20, getY(), 1, 40); + + g.setColor(new Color(0, 0, 0, 250)); + + g.drawString("lat: "+ ((int)(p.getX()*10))/10.0 +" lon: "+ ((int)(p.getY()*10))/10.0 ,getX()+25, getY()+15); + double val = rpane.getValueAt(p); + g.drawString("val: "+ ((int)(val*1000))/1000.0,getX()+25, getY()+35); + if((p.getX() > 8.6) && (p.getX() < 9.5)) + if((p.getY() > 41.4) && (p.getY() < 42.6)){ + g.setColor(new Color(255, 255, 255, 100)); + g.drawString("- Best place in the world -",getX()+25, getY()+25); + g.setColor(new Color(0, 0, 0, 100)); + g.drawString("- Best place in the world -",getX()+24, getY()+24); + } + + } + + + private void paintIdle(Graphics2D g) { + + g.setColor(new Color(255, 255, 255, 80)); + + + + g.fillRect(getX()+21, getY(), getWidth()-21, getHeight()); + + g.setColor(new Color(255, 255, 255, 50)); + + g.fillRect(getX(), getY()+19, 40, 3); + g.fillRect(getX()+19, getY(), 3, 40); + + g.setColor(new Color(255, 0, 0, 50)); + + g.fillRect(getX(), getY()+20, 40, 1); + g.fillRect(getX()+20, getY(), 1, 40); + + g.setColor(new Color(0, 0, 0, 100)); + + g.drawString("lat: "+ ((int)(p.getX()*10))/10.0 +" lon: "+ ((int)(p.getY()*10))/10.0 ,getX()+25, getY()+15); + double val = rpane.getValueAt(p); + g.drawString("val: "+ val,getX()+25, getY()+35); + + if((p.getX() > 8.6) && (p.getX() < 9.5)) + if((p.getY() > 41.4) && (p.getY() < 42.6)){ + g.setColor(new Color(255, 255, 255, 100)); + g.drawString("- Best place in the world -",getX()+25, getY()+25); + g.setColor(new Color(0, 0, 0, 100)); + g.drawString("- Best place in the world -",getX()+24, getY()+24); + } + } + + public void setEditable(boolean edit) { + modeEdit = edit; + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + repaint(); + } + public void removeMe() { + rpane.remove(this); + + rpane.repaint(); + } + + private void jbInit() throws Exception { + } + + public void moving(){} + public void drag(MouseEvent e){ + p.setLocation(rpane.getLonLat(e.getX()+getX(),e.getY()+getY())); + rpane.repaint(); + } + +} + + +class JGribMarker_mouseAdapter implements + MouseListener, MouseMotionListener { + private JGribMarker adaptee; + JGribMarker_mouseAdapter(JGribMarker adaptee) { + this.adaptee = adaptee; + } + + public void mouseReleased(MouseEvent e) { + + } + + public void mouseMoved(MouseEvent e) { + } + + public void mouseDragged(MouseEvent e) { + adaptee.drag(e); + } + public void mousePressed(MouseEvent e) { + + } + + public void mouseExited(MouseEvent e) { + adaptee.setEditable(false); + + } + + public void mouseEntered(MouseEvent e) { + adaptee.setEditable(true); + + } + + public void mouseClicked(MouseEvent e) { + if (2 == e.getClickCount()) { + adaptee.removeMe(); + } + + } +} diff --git a/java/gribview/src/gribview/JGribToolBar.java b/java/gribview/src/gribview/JGribToolBar.java new file mode 100755 index 000000000..e3ece3997 --- /dev/null +++ b/java/gribview/src/gribview/JGribToolBar.java @@ -0,0 +1,260 @@ +package gribview; + +import javax.swing.JToolBar; +import javax.swing.JButton; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.*; +import java.awt.Component; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class JGribToolBar extends JToolBar { + boolean playing = false; + + GribMainFrame mainFrame = null; + + public JGribToolBar() { + try { + jbInit(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public JGribToolBar(GribMainFrame mainFrame ) { + this.mainFrame = mainFrame; + try { + jbInit(); + } catch (Exception ex) { + ex.printStackTrace(); + } +} + + private void jbInit() throws Exception { + + jButtonMarker.setText("Add Marker"); + jButtonMarker.addActionListener(new + JGribToolBar_jButtonMarker_actionAdapter(this)); + jButtonPlay.setText("Play"); + jButtonPlay.addActionListener(new + JGribToolBar_jButtonPlay_actionAdapter(this)); + jButtonFaster.setText("Faster"); + jButtonFaster.addActionListener(new + JGribToolBar_jButtonFaster_actionAdapter(this)); + jButtonNext.setText("Next"); + jButtonNext.addActionListener(new + JGribToolBar_jButtonNext_actionAdapter(this)); + jButtonPrevious.setText("Previous"); + jButtonPrevious.addActionListener(new + JGribToolBar_jButtonPrevious_actionAdapter(this)); + jButtonSlower.setText("Slower"); + jButtonSlower.addActionListener(new + JGribToolBar_jButtonSlower_actionAdapter(this)); + jButtonReset.setText("Reset"); + jButtonReset.addActionListener(new + JGribToolBar_jButtonReset_actionAdapter(this)); + jButtonPackImage.setText("Pack Image"); + jButtonPackImage.addActionListener(new + JGribToolBar_jButtonPackImage_actionAdapter(this)); + this.add(jButtonMarker); + this.add(jButtonPackImage); + this.add(jButtonReset); + this.add(component1); + this.add(jButtonPrevious); + this.add(jButtonPlay); + this.add(jButtonNext); + this.add(jButtonSlower); + this.add(jButtonFaster); + setEnabled(false); + } + + JButton jButtonMarker = new JButton(); + JButton jButtonPlay = new JButton(); + JButton jButtonReset = new JButton(); + JButton jButtonFaster = new JButton(); + JButton jButtonNext = new JButton(); + JButton jButtonPrevious = new JButton(); + JButton jButtonSlower = new JButton(); + Component component1 = Box.createVerticalStrut(2); + JButton jButtonPackImage = new JButton(); + public void jButtonMarker_actionPerformed(ActionEvent e) { + mainFrame.getGribRenderPane().setMode(GribRenderPane.ADD_MARKER); + + } + + public void jButtonPrevious_actionPerformed(ActionEvent e) { + mainFrame.selectPrevious(); + // mainFrame.prout(); + /* double[] val = mainFrame.getGribRenderPane().handle.getDoubleArray("values"); + for (int i = 0; i < val.length; i++) { + val[i] = 10; + } + mainFrame.getGribRenderPane().handle.setDoubleArray("values",val); +*/ + } + + public void play() { + if(!playing){ + mainFrame.getAnimator().start(); + jButtonPlay.setText("Stop"); + playing = true; + } + } + + public void stop() { + if(playing){ + mainFrame.getAnimator().stop(); + jButtonPlay.setText("Play"); + playing = false; + } + } + + public void jButtonPlay_actionPerformed(ActionEvent e) { + if(playing){ + stop(); + }else{ + play(); + } + + } + public void setEnabled(boolean v) { + jButtonMarker.setEnabled(v); + jButtonPackImage.setEnabled(v); + jButtonPrevious.setEnabled(v); + jButtonPlay.setEnabled(v); + jButtonNext.setEnabled(v); + jButtonSlower.setEnabled(v); + jButtonFaster.setEnabled(v); + } + + + + public void jButtonNext_actionPerformed(ActionEvent e) { + mainFrame.selectNext() ; + } + + public void jButtonSlower_actionPerformed(ActionEvent e) { + mainFrame.getAnimator().slowDown(); + } + + public void jButtonFaster_actionPerformed(ActionEvent e) { + mainFrame.getAnimator().accelerate(); + } + + public void jButtonPackImage_actionPerformed(ActionEvent e) { + mainFrame.packImageInFile(); + } + + public void jButtonReset_actionPerformed(ActionEvent e) { + mainFrame.resetSelected(); + } + +} + + +class JGribToolBar_jButtonReset_actionAdapter implements ActionListener { + private JGribToolBar adaptee; + JGribToolBar_jButtonReset_actionAdapter(JGribToolBar adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jButtonReset_actionPerformed(e); + } +} + + +class JGribToolBar_jButtonPackImage_actionAdapter implements ActionListener { + private JGribToolBar adaptee; + JGribToolBar_jButtonPackImage_actionAdapter(JGribToolBar adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + + adaptee.jButtonPackImage_actionPerformed(e); + } +} + + +class JGribToolBar_jButtonFaster_actionAdapter implements ActionListener { + private JGribToolBar adaptee; + JGribToolBar_jButtonFaster_actionAdapter(JGribToolBar adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jButtonFaster_actionPerformed(e); + } +} + + +class JGribToolBar_jButtonSlower_actionAdapter implements ActionListener { + private JGribToolBar adaptee; + JGribToolBar_jButtonSlower_actionAdapter(JGribToolBar adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jButtonSlower_actionPerformed(e); + } +} + + +class JGribToolBar_jButtonPlay_actionAdapter implements ActionListener { + private JGribToolBar adaptee; + JGribToolBar_jButtonPlay_actionAdapter(JGribToolBar adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jButtonPlay_actionPerformed(e); + } +} + + +class JGribToolBar_jButtonNext_actionAdapter implements ActionListener { + private JGribToolBar adaptee; + JGribToolBar_jButtonNext_actionAdapter(JGribToolBar adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jButtonNext_actionPerformed(e); + } +} + + +class JGribToolBar_jButtonMarker_actionAdapter implements ActionListener { + private JGribToolBar adaptee; + JGribToolBar_jButtonMarker_actionAdapter(JGribToolBar adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jButtonMarker_actionPerformed(e); + } +} + + +class JGribToolBar_jButtonPrevious_actionAdapter implements ActionListener { + private JGribToolBar adaptee; + JGribToolBar_jButtonPrevious_actionAdapter(JGribToolBar adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jButtonPrevious_actionPerformed(e); + } +} diff --git a/java/gribview/src/gribview/JGribTreeNode.java b/java/gribview/src/gribview/JGribTreeNode.java new file mode 100644 index 000000000..0d3261967 --- /dev/null +++ b/java/gribview/src/gribview/JGribTreeNode.java @@ -0,0 +1,95 @@ +package gribview; + +import java.util.Enumeration; + +import javax.swing.tree.MutableTreeNode; +import javax.swing.tree.*; +import jgribapi.*; +import java.util.Vector; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class JGribTreeNode extends DefaultMutableTreeNode { + + private boolean areChildrenDefined = false; + private int outlineNum =2; + private int numChildren =2; + private int type; + private String keyname ; + private GribHandle g ; + + + + + + public JGribTreeNode(int type,String keyname ,GribHandle g) { + this.g = g; + this.type = type; + this.keyname = keyname; + + } + + public boolean isLeaf() { + + if(this.type == JGribObjectProducer.GRIBSECTION) return false; + return true; + } + + public int getChildCount() { + if (!areChildrenDefined) + defineChildNodes(); + return(super.getChildCount()); + } + + private void defineChildNodes() { + // You must set the flag before defining children if you + // use "add" for the new children. Otherwise you get an infinite + // recursive loop, since add results in a call to getChildCount. + // However, you could use "insert" in such a case. + areChildrenDefined = true; + + JGribViewEditionNodeProducer jo = new JGribViewEditionNodeProducer(g); + Vector v = g.getObjects(jo,keyname,null); + + for(int i=1; iTitle:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class JGribViewDescriptorProducer implements JGribObjectProducer { + GribHandle h; + GribMainFrame obs; + public JGribViewDescriptorProducer(GribHandle g, GribMainFrame obs) { + this.h =g; + this.obs = obs; + } + + /** + * gribFactory + * + * @param object Object + * @param _int int + * @param string String + * @return Object + * @todo Implement this jgribapi.JGribObjectProducer method + */ + public Object gribFactory(Object object, int type, String name) { + return new JGribEditComponent(obs,h,name,type); + } +} diff --git a/java/gribview/src/gribview/JGribViewEditionNodeProducer.java b/java/gribview/src/gribview/JGribViewEditionNodeProducer.java new file mode 100644 index 000000000..d0925e136 --- /dev/null +++ b/java/gribview/src/gribview/JGribViewEditionNodeProducer.java @@ -0,0 +1,39 @@ +package gribview; + +import jgribapi.JGribObjectProducer; +import javax.swing.JComponent; +import jgribapi.GribHandle; +import javax.swing.tree.*; +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ + +public class JGribViewEditionNodeProducer implements JGribObjectProducer { + GribHandle h; + public JGribViewEditionNodeProducer(GribHandle g) { + this.h =g; + + } + + /** + * gribFactory + * + * @param object Object + * @param _int int + * @param string String + * @return Object + * @todo Implement this jgribapi.JGribObjectProducer method + */ + public Object gribFactory(Object object, int type, String name) { + return new JGribTreeNode(type,name,h); + } +} diff --git a/java/gribview/src/gribview/SortButtonRenderer.java b/java/gribview/src/gribview/SortButtonRenderer.java new file mode 100755 index 000000000..48277a4ab --- /dev/null +++ b/java/gribview/src/gribview/SortButtonRenderer.java @@ -0,0 +1,99 @@ +package gribview; + +import java.util.*; +import java.awt.*; +import javax.swing.*; +import javax.swing.table.*; + +/** + * @version 1.0 02/25/99 + */ +public class SortButtonRenderer extends JButton implements TableCellRenderer { + public static final int NONE = 0; + public static final int DOWN = 1; + public static final int UP = 2; + + int pushedColumn; + Hashtable state; + JButton downButton,upButton; + + public SortButtonRenderer() { + pushedColumn = -1; + state = new Hashtable(); + + setMargin(new Insets(0,0,0,0)); + setHorizontalTextPosition(LEFT); + setIcon(new BlankIcon()); + + // perplexed + // ArrowIcon(SwingConstants.SOUTH, true) + // BevelArrowIcon (int direction, boolean isRaisedView, boolean isPressedView) + + downButton = new JButton(); + downButton.setMargin(new Insets(0,0,0,0)); + downButton.setHorizontalTextPosition(LEFT); + downButton.setIcon(new BevelArrowIcon(BevelArrowIcon.DOWN, false, false)); + downButton.setPressedIcon(new BevelArrowIcon(BevelArrowIcon.DOWN, false, true)); + + upButton = new JButton(); + upButton.setMargin(new Insets(0,0,0,0)); + upButton.setHorizontalTextPosition(LEFT); + upButton.setIcon(new BevelArrowIcon(BevelArrowIcon.UP, false, false)); + upButton.setPressedIcon(new BevelArrowIcon(BevelArrowIcon.UP, false, true)); + + } + + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { + JButton button = this; + Object obj = state.get(new Integer(column)); + if (obj != null) { + if (((Integer)obj).intValue() == DOWN) { + button = downButton; + } else { + button = upButton; + } + } + button.setText((value ==null) ? "" : value.toString()); + boolean isPressed = (column == pushedColumn); + button.getModel().setPressed(isPressed); + button.getModel().setArmed(isPressed); + return button; + } + + public void setPressedColumn(int col) { + pushedColumn = col; + } + + public void setSelectedColumn(int col) { + if (col < 0) return; + Integer value = null; + Object obj = state.get(new Integer(col)); + if (obj == null) { + value = new Integer(DOWN); + } else { + if (((Integer)obj).intValue() == DOWN) { + value = new Integer(UP); + } else { + value = new Integer(DOWN); + } + } + state.clear(); + state.put(new Integer(col), value); + } + + public int getState(int col) { + int retValue; + Object obj = state.get(new Integer(col)); + if (obj == null) { + retValue = NONE; + } else { + if (((Integer)obj).intValue() == DOWN) { + retValue = DOWN; + } else { + retValue = UP; + } + } + return retValue; + } +} diff --git a/java/jgribapi/src/jgribapi/GribDump.java b/java/jgribapi/src/jgribapi/GribDump.java new file mode 100755 index 000000000..bf2057517 --- /dev/null +++ b/java/jgribapi/src/jgribapi/GribDump.java @@ -0,0 +1,32 @@ +package jgribapi; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class GribDump { + public GribDump() { + } + + public static void main(String[] args) { + try { + + GribFile gf = new GribFile("/var/tmp/maf/testdata/latlon.grib2"); + GribHandle g =((GribHandle)gf.next()); + System.out.println(g.getLong("step")); + g.reset(); + System.out.println(g.getLong("step")); + + } catch (Exception ex) { + ex.printStackTrace(); + } + } +} diff --git a/java/jgribapi/src/jgribapi/GribFile.java b/java/jgribapi/src/jgribapi/GribFile.java new file mode 100755 index 000000000..2d097c39c --- /dev/null +++ b/java/jgribapi/src/jgribapi/GribFile.java @@ -0,0 +1,69 @@ +package jgribapi; + +import java.util.*; +import java.io.*; +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class GribFile implements Iterator{ + + String fname = null; + long fileID =0; + + static { + System.loadLibrary("ecmgrib"); + } + + private native GribHandle gribGetNextHandle(long fileID); + private native long gribEOFReached(long fileID); + private native long gribGetGribFile(String fname); + private native void gribCloseFile(long fileID); + private native long gribNewFile(String fname); + private native void gribWriteHandle(long fileID, long handleID); + + public GribFile(String fname) throws FileNotFoundException { + this.fname = fname; + fileID = gribGetGribFile(fname); + + + if(fileID == -1){ + fileID = gribNewFile(fname); + if(fileID == -1){ + throw new FileNotFoundException(fname); + } + } + + } + + public Object next() { + return (GribHandle)gribGetNextHandle(fileID); + } + + public boolean hasNext() { + return gribEOFReached(fileID)>0; + } + + public void writeHandle(GribHandle g) { + gribWriteHandle(fileID, g.getID()); + } + + + + public void close() { + gribCloseFile(fileID); + } + + public void remove() { + return; + } + +} diff --git a/java/jgribapi/src/jgribapi/GribHandle.java b/java/jgribapi/src/jgribapi/GribHandle.java new file mode 100755 index 000000000..855853dbc --- /dev/null +++ b/java/jgribapi/src/jgribapi/GribHandle.java @@ -0,0 +1,158 @@ +package jgribapi; +import java.io.FileNotFoundException; +import java.awt.*; +import java.awt.image.*; +import java.util.*; +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class GribHandle { + + private long handleID; + + private String fname; + + + public double maxVal = Double.MIN_VALUE; + public double minVal = Double.MAX_VALUE ; + + + public GribHandle() { + try { + jbInit(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + + static { + System.loadLibrary("ecmgrib"); + } + + private native long getIteratorID(long hid) ; + + private native String gribGetString(long id, String key); + + private native long gribGetLong (long id, String key) ; + + private native double gribGetDouble(long id, String key) ; + + private native long[] gribGetLongArray (long id, String key) ; + + private native double[] gribGetDoubleArray(long id, String key) ; + + private native int gribSetString(long id, String key, String val) ; + + private native GribKey gribCreateNext(long searchid); + + private native long gribSetSearch(long id, String key) ; + + private native int gribSetLong (long id, String key, long val) ; + + private native int gribSetDouble(long id, String key, double val) ; + + private native int gribSetLongArray (long id, String key, long[] val) ; + private native int gribSetDoubleArray(long id, String key, double[] val) ; + + private native String gribGetXml(long id) ; + + private native String gribGetXml(long id, String key) ; + + private native String gribGetAscii(long id, String key) ; + + private native byte[] gribGetBytes(long id, String key) ; + + private native int gribDeleteHandle(long handleID) ; + private native void gribResetHandle(long handleID) ; + + public void reset(){ + gribResetHandle(handleID); + } + public String getString(String key){ + return gribGetString(handleID, key); + } + public long getLong(String key){ + return gribGetLong(handleID, key); + } + public byte[] geByteArray(String key){ + return gribGetBytes(handleID, key); + } + public String getAscii(String key){ + return gribGetAscii(handleID, key); + } + public double getDouble(String key){ + return gribGetDouble(handleID, key); + } + public long[] getLongArray(String key){ + return gribGetLongArray(handleID, key); + } + public double[] getDoubleArray(String key){ + return gribGetDoubleArray(handleID, key); + } + public long gribGetIteratorID(){ + return getIteratorID(handleID); + } + + public GribIterator iterator(){ + return null; + } + public String getGribXmlDocument(){ + return gribGetXml(handleID); + } + + public String getGribXml(String key){ + return gribGetXml(handleID,key); + } + + public GribHandle(long id){ + handleID = id; + } + + public long getID(){ + return handleID ; + } + public Vector getObjects(JGribObjectProducer o,String skey, Object udata){ + Vector v = new Vector(); + + long searchid = gribSetSearch(getID(),skey); + if(searchid == 0) return v; + GribKey key = gribCreateNext(searchid) ; + + while(key != null){ + v.add(o.gribFactory(udata,key.type,key.name)); + key = gribCreateNext(searchid); + } + return v ; + } + + public int setDoubleArray(String key, double[] val) { + return gribSetDoubleArray(handleID, key, val); + } + + public int setLong(String key, long val) { + return gribSetLong(handleID, key, val); + } + + public int setDouble(String key, double val) { + return gribSetDouble(handleID, key, val); + } + + public int setString(String key, String val) { + return gribSetString(handleID, key, val); + } + + private void jbInit() throws Exception { + } + + +} diff --git a/java/jgribapi/src/jgribapi/GribIterator.java b/java/jgribapi/src/jgribapi/GribIterator.java new file mode 100755 index 000000000..a4ec3ca94 --- /dev/null +++ b/java/jgribapi/src/jgribapi/GribIterator.java @@ -0,0 +1,53 @@ +package jgribapi; + +import java.util.*; +import java.lang.ArrayStoreException; +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ + +public class GribIterator implements Iterator { + GribHandle h = null; + long iterID = 0; + private double lats[] = null; + private double lons[] = null; + private double vals[] = null; + + static { + System.loadLibrary("ecmgrib"); + } + + private native GribPoint gribIteratorGetNext(long iterID); + private native long gribIteratorHasNext(long iterID); + + public GribIterator(GribHandle h) throws ArrayStoreException{ + this.h = h; + + iterID = h.gribGetIteratorID(); + if (this.iterID == -1) { + throw new ArrayStoreException(); + } + } + + public Object next() { + return (GribPoint)gribIteratorGetNext(iterID); + } + + public boolean hasNext() { + return gribIteratorHasNext(iterID)>0; + } + + public void remove() { + return; + } + +} diff --git a/java/jgribapi/src/jgribapi/GribKey.java b/java/jgribapi/src/jgribapi/GribKey.java new file mode 100644 index 000000000..8e2936fc8 --- /dev/null +++ b/java/jgribapi/src/jgribapi/GribKey.java @@ -0,0 +1,27 @@ +package jgribapi; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class GribKey { + + + public String name = null; + public int type = 0; + + public GribKey(int type, String name){ + this.name = name; + this.type = type; + } + + +} diff --git a/java/jgribapi/src/jgribapi/GribPoint.java b/java/jgribapi/src/jgribapi/GribPoint.java new file mode 100755 index 000000000..e6a9710fc --- /dev/null +++ b/java/jgribapi/src/jgribapi/GribPoint.java @@ -0,0 +1,74 @@ +package jgribapi; + + +import java.awt.*; +import javax.swing.JComponent; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ +public class GribPoint { + + public double lat; + public double lon; + public double val; + + static double max = Double.MIN_VALUE; + static double min = Double.MAX_VALUE; + + static double minlat = Double.MAX_VALUE; + static double minlon = Double.MAX_VALUE; + + static double maxlon = Double.MIN_VALUE; + static double maxlat = Double.MIN_VALUE; + + + public GribPoint() { + lat = 0; + lon = 0; + val = 0; + } + + public GribPoint(double lat, double lon, double val) { + this.lat = lat; + this.lon = lon; + this.val = val; + // this.setToolTipText(this.toString()); + + if (val > max) { + max = val; + } + if (val < min) { + min = val; + } + + if (lon > maxlon) { + maxlon = lon; + } + if (lon < minlon) { + minlon = lon; + } + + if (lat > maxlat) { + maxlat = lat; + } + if (lat < minlat) { + minlat = lat; + } + + } + + public String toString() { + return "lat:" + lat + " lon:" + lon + " val:" + val; + } + +} diff --git a/java/jgribapi/src/jgribapi/JGribObjectProducer.java b/java/jgribapi/src/jgribapi/JGribObjectProducer.java new file mode 100644 index 000000000..6b352baf4 --- /dev/null +++ b/java/jgribapi/src/jgribapi/JGribObjectProducer.java @@ -0,0 +1,26 @@ +package jgribapi; + +/** + *

            Title:

            + * + *

            Description:

            + * + *

            Copyright: Copyright (c) 2005

            + * + *

            Company:

            + * + * @author not attributable + * @version 1.0 + */ + +public interface JGribObjectProducer { + public static int GRIBLONG =1; + public static int GRIBDOUBLE =2; + public static int GRIBSTRING =3; + public static int GRIBBYTES =4; + public static int GRIBSECTION =5; + public static int GRIBDEFAULT =42; + + + Object gribFactory(Object userData, int Type, String name); +} diff --git a/license.pl b/license.pl new file mode 100755 index 000000000..73da27d9c --- /dev/null +++ b/license.pl @@ -0,0 +1,131 @@ +#!/usr/bin/perl +use strict; + +my $APACHE = <<"EOF"; +Copyright 2005-2007 ECMWF + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. You may obtain a +copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless +required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES +OR CONDITIONS OF ANY KIND, either express or implied. See the License +for the specific language governing permissions and limitations under +the License. +EOF + +my $LGPL = <<"EOF"; +Copyright 2005-2007 ECMWF + +Licensed under the GNU Lesser General Public License which +incorporates the terms and conditions of version 3 of the GNU +General Public License. +See LICENSE and gpl-3.0.txt for details. +EOF + +my $GPL = <<"EOF"; +Copyright 2005-2007 ECMWF + +Licensed under the GNU General Public License version 3. +See LICENSE for details. +EOF + + +my $LICENSE = $LGPL; + +my %COMMENTS = ( + + java => { start => "/**\n" , end => "*/\n\n" , comment => "* " }, + xml => { start => "\n\n" , after => "\<\?xml[^<]*\>" }, +# xsd => { start => "\n\n" }, +# jsp => { start => "\n\n" }, + sh => { comment => "# ", end => "\n", after => "^#!/.*\n" }, + pl => { comment => "# ", end => "\n", after => "^#!/.*\n" }, + js => { start => "/**\n" , end => "*/\n\n" , comment => "* " }, + c => { start => "/**\n" , end => "*/\n\n" , comment => "* " }, + h => { start => "/**\n" , end => "*/\n\n" , comment => "* " }, + l => { start => "/**\n" , end => "*/\n\n" , comment => "* " }, + y => { start => "/**\n" , end => "*/\n\n" , comment => "* " }, + css => { start => "/**\n" , end => "*/\n\n" , comment => "* " }, + sql => { comment => "-- ", end => "\n" }, + properties => { comment => "# ", end => "\n" }, + def => { comment => "# ", end => "\n" }, + F => { comment => "C ", end => "C\n\n " }, + f => { comment => "C ", end => "C\n\n" }, + + ); + + +foreach my $file ( @ARGV ) +{ + my $doit=1; + + $file =~ /\.(\w+)/; + my $ext = $1; + + my $c = $COMMENTS{$ext}; + + unless($c) + { + print "$file: unsupported extension. File ignored\n"; + next; + } + + open(IN,"<$file") or die "$file: $!"; + my @text = ; + close(IN); + + if(join("",@text) =~ /Licensed under the/gs) + { + print "$file: License already stated. File ignored\n"; + next; + } + + open(OUT,">$file.tmp") or die "$file.tmp: $!"; + + if($c->{after}) + { + my @x; + my $re = $c->{after}; + loop: while(@text) + { + if($text[0] =~ m/$re/) + { + print OUT @x, shift @text; + @x = (); + last loop; + } + push @x,shift @text; + } + @text = (@x,@text); + } + + print OUT $c->{start}; + foreach my $line ( split("\n",$LICENSE) ) + { + print OUT $c->{comment}, $line,"\n"; + } + print OUT $c->{end}; + + print OUT @text; + close(OUT) or die "$file: $!"; + + if($doit) { + use File::Copy qw(cp); + use File::Compare qw(compare_text compare); + + if(compare_text("$file.tmp",$file)) { + print "UPDATING file $file\n"; + system("p4 edit $file") unless(-w $file); + cp($file,"$file.old") or die "cp($file,$file.old): $!"; + cp("$file.tmp",$file) or die "cp($file.tmp,$file): $!"; + } + } else { + print "IGNORING file $file\n"; + } + + unlink("$file.tmp"); + + +} + diff --git a/m4/ax_linux_distribution.m4 b/m4/ax_linux_distribution.m4 new file mode 100644 index 000000000..4c22cac01 --- /dev/null +++ b/m4/ax_linux_distribution.m4 @@ -0,0 +1,77 @@ +# SYNOPSIS +# +# AX_LINUX_DISTRIBUTION +# +# DESCRIPTION +# +# Try to detect the name and version of the Linux distribution where the software is being run +# +# In configure.in: +# +# dnl For my rpm.m4 macros +# AC_SUBST(LINUX_DISTRIBUTION_NAME) +# AC_SUBST(LINUX_DISTRIBUTION_VERSION) +# +# Daniel Varela 2011 +# Version 1.1 (2011-11-11) + + +dnl AX_LINUX_DISTRIBUTION +dnl Figure out the Linux distribution where the software is being built +dnl automake target + +AC_DEFUN([AX_LINUX_DISTRIBUTION], +[dnl +AC_REQUIRE([AC_CANONICAL_HOST]) +HOST_CPU=${host_cpu} +HOST_VENDOR=${host_vendor} +HOST_OS=${host_os} + +if test x$HOST_OS = "xlinux-gnu" +then + AC_MSG_CHECKING(for Linux distribution ) + + # This works for Fedora, RedHat and Slackware + for f in /etc/fedora-release /etc/redhat-release /etc/slackware-release + do + if test -f $f; then + distro=`cat $f` + break + fi + done + + # This works in Ubuntu (11 at least) + if test -f /etc/lsb-release; then + distro=`cat /etc/lsb-release | grep DISTRIB_ID | awk -F= '{print $2}' ` + distro_version=`cat /etc/lsb-release | grep DISTRIB_RELEASE | awk -F= '{print $2}' ` + fi + + # For SuSE + if test -f /etc/SuSE-release; then + distro=`cat /etc/SuSE-release | head -1` + #distro_version=`cat /etc/SuSE-release | tail -1 | awk -F= '{print $2}' ` + fi + + # At least Debian has this + if test -f /etc/issue.net -a "x$distro" = x; then + distro=`cat /etc/issue.net | head -1` + fi + + # Everything else + if test "x$distro" = x; then + distro="Unknown Linux" + fi + + LINUX_DISTRIBUTION_NAME=$distro + LINUX_DISTRIBUTION_VERSION=$distro_version + AC_MSG_RESULT($LINUX_DISTRIBUTION_NAME $LINUX_DISTRIBUTION_VERSION) + +else + LINUX_DISTRIBUTION_NAME=$HOST_OS + LINUX_DISTRIBUTION_VERSION="" + AC_MSG_NOTICE(OS is non-Linux UNIX $HOST_OS.) +fi + +AC_SUBST(LINUX_DISTRIBUTION_NAME) +AC_SUBST(LINUX_DISTRIBUTION_VERSION) +]) diff --git a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4 new file mode 100644 index 000000000..c98687d01 --- /dev/null +++ b/m4/ax_python_devel.m4 @@ -0,0 +1,325 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_python_devel.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PYTHON_DEVEL([version]) +# +# DESCRIPTION +# +# Note: Defines as a precious variable "PYTHON_VERSION". Don't override it +# in your configure.ac. +# +# This macro checks for Python and tries to get the include path to +# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) +# output variables. It also exports $(PYTHON_EXTRA_LIBS) and +# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code. +# +# You can search for some particular version of Python by passing a +# parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please +# note that you *have* to pass also an operator along with the version to +# match, and pay special attention to the single quotes surrounding the +# version number. Don't use "PYTHON_VERSION" for this: that environment +# variable is declared as precious and thus reserved for the end-user. +# +# This macro should work for all versions of Python >= 2.1.0. As an end +# user, you can disable the check for the python version by setting the +# PYTHON_NOVERSIONCHECK environment variable to something else than the +# empty string. +# +# If you need to use this macro for an older Python version, please +# contact the authors. We're always open for feedback. +# +# LICENSE +# +# Copyright (c) 2009 Sebastian Huber +# Copyright (c) 2009 Alan W. Irwin +# Copyright (c) 2009 Rafael Laboissiere +# Copyright (c) 2009 Andrew Collier +# Copyright (c) 2009 Matteo Settenvini +# Copyright (c) 2009 Horst Knorr +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 8 + +AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL]) +AC_DEFUN([AX_PYTHON_DEVEL],[ + # + # Allow the use of a (user set) custom python version + # + AC_ARG_VAR([PYTHON_VERSION],[The installed Python + version to use, for example '2.3'. This string + will be appended to the Python interpreter + canonical name.]) + + AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) + if test -z "$PYTHON"; then + AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path]) + PYTHON_VERSION="" + fi + + # + # Check for a version of Python >= 2.1.0 + # + AC_MSG_CHECKING([for a version of Python >= '2.1.0']) + ac_supports_python_ver=`$PYTHON -c "import sys; \ + ver = sys.version.split ()[[0]]; \ + print (ver >= '2.1.0')"` + if test "$ac_supports_python_ver" != "True"; then + if test -z "$PYTHON_NOVERSIONCHECK"; then + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([ +This version of the AC@&t@_PYTHON_DEVEL macro +doesn't work properly with versions of Python before +2.1.0. You may need to re-run configure, setting the +variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG, +PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. +Moreover, to disable this check, set PYTHON_NOVERSIONCHECK +to something else than an empty string. +]) + else + AC_MSG_RESULT([skip at user request]) + fi + else + AC_MSG_RESULT([yes]) + fi + + # + # if the macro parameter ``version'' is set, honour it + # + if test -n "$1"; then + AC_MSG_CHECKING([for a version of Python $1]) + ac_supports_python_ver=`$PYTHON -c "import sys; \ + ver = sys.version.split ()[[0]]; \ + print (ver $1)"` + if test "$ac_supports_python_ver" = "True"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([this package requires Python $1. +If you have it installed, but it isn't the default Python +interpreter in your system path, please pass the PYTHON_VERSION +variable to configure. See ``configure --help'' for reference. +]) + PYTHON_VERSION="" + fi + fi + + # + # Check if you have distutils, else fail + # + AC_MSG_CHECKING([for the distutils Python package]) + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` + if test -z "$ac_distutils_result"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([cannot import Python module "distutils". +Please check your Python installation. The error was: +$ac_distutils_result]) + PYTHON_VERSION="" + fi + + # + # Check for Python include path + # + AC_MSG_CHECKING([for Python include path]) + if test -z "$PYTHON_CPPFLAGS"; then + python_path=`$PYTHON -c "import distutils.sysconfig; \ + print (distutils.sysconfig.get_python_inc ());"` + if test -n "${python_path}"; then + python_path="-I$python_path" + fi + PYTHON_CPPFLAGS=$python_path + fi + AC_MSG_RESULT([$PYTHON_CPPFLAGS]) + AC_SUBST([PYTHON_CPPFLAGS]) + + # + # Check for Python library path + # + AC_MSG_CHECKING([for Python library path]) + if test -z "$PYTHON_LDFLAGS"; then + # (makes two attempts to ensure we've got a version number + # from the interpreter) + ac_python_version=`cat<]], + [[Py_Initialize();]]) + ],[pythonexists=yes],[pythonexists=no]) + AC_LANG_POP([C]) + # turn back to default flags + CPPFLAGS="$ac_save_CPPFLAGS" + LIBS="$ac_save_LIBS" + + AC_MSG_RESULT([$pythonexists]) + + if test ! "x$pythonexists" = "xyes"; then + AC_MSG_FAILURE([ + Could not link test program to Python. Maybe the main Python library has been + installed in some non-standard library path. If so, pass it to configure, + via the LDFLAGS environment variable. + Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib" + ============================================================================ + ERROR! + You probably have to install the development version of the Python package + for your distribution. The exact name of this package varies among them. + ============================================================================ + ]) + PYTHON_VERSION="" + fi + + # + # all done! + # +]) diff --git a/m4/ax_rpm_init.m4 b/m4/ax_rpm_init.m4 new file mode 100644 index 000000000..da84893f3 --- /dev/null +++ b/m4/ax_rpm_init.m4 @@ -0,0 +1,258 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_rpm_init.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_RPM_INIT +# +# DESCRIPTION +# +# Setup variables for creation of rpms. It will define several variables +# useful for creating rpms on a system where rpms are supported. +# Currently, I requires changes to Makefile.am to function properly (see +# the example below). +# +# Also note that I do not use any non-UNIX OSs (and for the most part, I +# only use RedHat), so this is probably generally not useful for other +# systems. +# +# Required setup: +# +# In configure.in: +# +# dnl For my rpm.m4 macros +# RPM_RELEASE=1 +# AC_SUBST(RPM_RELEASE) +# +# AX_RPM_INIT +# dnl Enable or disable the rpm making rules in Makefile.am +# AM_CONDITIONAL(MAKE_RPMS, test x$make_rpms = xtrue) +# +# Furthermore, the %GNUconfigure rpm macro has a problem in that it does +# not define CXXFLAGS for the target system correctly, so for compiling +# C++ code, add the following line _before_ calling AC_PROG_CXX: +# +# dnl This is a little hack to make this work with rpm better (see mysql++.spec.in) +# test -z "$CXXFLAGS" && CXXFLAGS="${CFLAGS}" +# +# Changes to Makefile.am (I am trying to get rid of this step; suggestions +# invited): +# +# if MAKE_RPMS +# rpm: @RPM_TARGET@ +# +# .PHONY: rpm +# +# $(RPM_TARGET): $(DISTFILES) +# ${MAKE} dist +# -mkdir -p $(RPM_DIR)/SRPMS +# -mkdir -p `dirname $(RPM_TARGET)` +# $(RPM_PROG) $(RPM_ARGS) $(RPM_TARBALL) +# @echo Congratulations, $(RPM_TARGET) "(and friends)" should now exist. +# else +# endif +# +# Also, it works best with a XXXX.spec.in file like the following (this is +# way down on the wishlist, but a program to generate the skeleton spec.in +# much like autoscan would just kick butt!): +# +# ---------- 8< ---------- +# # -*- Mode:rpm-spec -*- +# # mysql++.spec.in +# Summary: Your package description goes here +# %define rel @RPM_RELEASE@ +# +# %define version @VERSION@ +# %define pkgname @PACKAGE@ +# %define prefix /usr +# +# %define lt_release @LT_RELEASE@ +# %define lt_version @LT_CURRENT@.@LT_REVISION@.@LT_AGE@ +# +# # This is a hack until I can figure out how to better handle replacing +# # autoconf macros... (gotta love autoconf...) +# %define __aclocal aclocal || aclocal -I ./macros +# %define configure_args @RPM_CONFIGURE_ARGS@ +# +# Name: %{pkgname} +# Version: %{version} +# Release: %{rel} +# +# Copyright: LGPL +# Group: # your group name goes here +# Source: %{pkgname}-%{version}.tar.gz +# Requires: # additional requirements +# Buildroot: /tmp/%{pkgname}-root +# URL: http://yoururl.go.here +# Prefix: %{prefix} +# BuildArchitectures: # Target platforms, i.e., i586 +# Packager: Your Name +# +# %description +# Your package description +# +# %changelog +# +# %prep +# %setup +# #%patch +# +# %build +# %GNUconfigure %{configure_args} +# # This is why we copy the CFLAGS to the CXXFLAGS in configure.in +# # CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{prefix} +# make +# +# %install +# # To make things work with BUILDROOT +# if [ "$RPM_BUILD_ROOT" != "/tmp/%{pkgname}-root" ] +# then +# echo +# echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# echo @ @ +# echo @ RPM_BUILD_ROOT is not what I expected. Please clean it yourself. @ +# echo @ @ +# echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# echo +# else +# echo Cleaning RPM_BUILD_ROOT: "$RPM_BUILD_ROOT" +# rm -rf "$RPM_BUILD_ROOT" +# fi +# make DESTDIR="$RPM_BUILD_ROOT" install +# +# %clean +# # Call me paranoid, but I do not want to be responsible for nuking +# # someone's harddrive! +# if [ "$RPM_BUILD_ROOT" != "/tmp/%{pkgname}-root" ] +# then +# echo +# echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# echo @ @ +# echo @ RPM_BUILD_ROOT is not what I expected. Please clean it yourself. @ +# echo @ @ +# echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# echo +# else +# echo Cleaning RPM_BUILD_ROOT: "$RPM_BUILD_ROOT" +# rm -rf "$RPM_BUILD_ROOT" +# fi +# +# %files +# %defattr(-, root, root) +# # Your application file list goes here +# # %{prefix}/lib/lib*.so* +# %doc COPYRIGHT ChangeLog README AUTHORS NEWS +# %doc doc/* +# +# # If you install a library +# %post -p /sbin/ldconfig +# +# # If you install a library +# %postun -p /sbin/ldconfig +# +# %package devel +# Summary: Development files for %{pkgname} +# Group: Applications/Databases +# %description devel +# Development files for %{pkgname}. +# +# %files devel +# %defattr(-, root, root) +# # Your development files go here +# # Programmers documentation goes here +# %doc doc +# +# # end of file +# ---------- >8 ---------- +# +# LICENSE +# +# Copyright (c) 2008 Dale K. Hawkins +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +# Modified by Daniel Varela 2011 + +#serial 5 + +dnl AX_RPM_INIT +dnl Figure out how to create rpms for this system and setup for an +dnl automake target + +AU_ALIAS([AM_RPM_INIT], [AX_RPM_INIT]) +AC_DEFUN([AX_RPM_INIT], +[dnl +AC_REQUIRE([AC_CANONICAL_HOST]) +RPM_HOST_CPU=${host_cpu} +RPM_HOST_VENDOR=${host_vendor} +RPM_HOST_OS=${host_os} + +dnl Find the RPM program +AC_ARG_WITH(rpmbuild-prog,[ --with-rpmbuild-prog=PROG Which rpmbuild to use (optional)], + rpmbuild_prog="$withval", rpmbuild_prog="") + +AC_ARG_WITH(rpmbuild-extra-args, [ --with-rpmbuild-extra-args=ARGS Run rpmbuild with extra arguments (defaults to none)], + rpmbuild_extra_args="$withval", rpmbuild_extra_args="") + +AC_ARG_WITH(rpm-release, [ --with-rpm-release=NUMBER The rpms will use this release number (defaults to 1)], + rpm_release="$withval", rpm_release=1) + +RPM_TARGET="" +RPM_RELEASE=$rpm_release + +AC_PATH_PROG(RPMBUILD_PROG, rpmbuild, no) +no_rpm=no + +if test "$RPMBUILD_PROG" = "no" +then + echo rpm package building is disabled. Set the path to the rpmbuild program using --with-rpmbuild-prog=PROG + no_rpm=yes + RPM_MAKE_RULES="" +else +# AC_MSG_CHECKING(how rpmbuild sets %{_rpmdir}) + rpmdir=`$RPMBUILD_PROG --eval %{_rpmdir} 2> /dev/null` + if test x$rpmdir = x"%{_rpmdir}" ; then + AC_MSG_RESULT([not set (cannot build rpms?)]) + echo *** Could not determine the value of %{_rpmdir} + echo *** This could be because it is not set, or your version of rpm does not set it + echo *** It must be set in order to generate the correct rpm generation commands + echo *** + echo *** You might still be able to create rpms, but I could not automate it for you + echo *** BTW, if you know this is wrong, please help to improve the rpm.m4 module + echo *** Send corrections, updates and fixes to dhawkins@cdrgts.com. Thanks. +# else +# AC_MSG_RESULT([$rpmdir]) + fi + AC_MSG_CHECKING(how rpm sets %{_rpmfilename}) + rpmfilename=`$RPMBUILD_PROG --eval %{_rpmfilename} 2> /dev/null | sed "s/%{ARCH}/${RPM_HOST_CPU}/g" | sed "s/%{NAME}/$PACKAGE/g" | sed "s/%{VERSION}/${VERSION}/g" | sed "s/%{RELEASE}/${RPM_RELEASE}/g"` + AC_MSG_RESULT([$rpmfilename]) + + RPM_DIR=${rpmdir} + RPM_TARGET=$rpmfilename + RPM_ARGS="-ta $rpmbuild_extra_args" + RPM_TARBALL=${PACKAGE}-${VERSION}.tar.gz + +fi + +case "${no_rpm}" in + yes) make_rpms=false;; + no) make_rpms=true;; + *) AC_MSG_WARN([bad value ${no_rpm} for no_rpm (not making rpms)]) + make_rpms=false;; +esac + +AC_SUBST(RPM_DIR) +AC_SUBST(RPM_TARGET) +AC_SUBST(RPM_ARGS) +AC_SUBST(RPM_TARBALL) +AC_SUBST(RPM_HOST_CPU) +AC_SUBST(RPM_HOST_VENDOR) +AC_SUBST(RPM_HOST_OS) + +RPM_CONFIGURE_ARGS=${ac_configure_args} +AC_SUBST(RPM_CONFIGURE_ARGS) +]) diff --git a/m4/libtool.m4 b/m4/libtool.m4 new file mode 100644 index 000000000..d8125842f --- /dev/null +++ b/m4/libtool.m4 @@ -0,0 +1,7831 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 new file mode 100644 index 000000000..17cfd51c0 --- /dev/null +++ b/m4/ltoptions.m4 @@ -0,0 +1,369 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 new file mode 100644 index 000000000..9000a057d --- /dev/null +++ b/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 new file mode 100644 index 000000000..9c7b5d411 --- /dev/null +++ b/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3293 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4]) +m4_define([LT_PACKAGE_REVISION], [1.3293]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4' +macro_revision='1.3293' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 new file mode 100644 index 000000000..c573da90c --- /dev/null +++ b/m4/lt~obsolete.m4 @@ -0,0 +1,98 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/make_dist_definitions b/make_dist_definitions new file mode 100755 index 000000000..8dd1ed760 --- /dev/null +++ b/make_dist_definitions @@ -0,0 +1,29 @@ +set -e +make dist + +. ./version.sh +libraryVersion=$GRIB_API_MAJOR_VERSION.$GRIB_API_MINOR_VERSION.$GRIB_API_REVISION_VERSION +tar=grib_api-$libraryVersion.tar.gz +dir=grib_api-$libraryVersion + +rm -rf $dir | true +tar zxvf $tar + +version=`grep definitionFilesVersion $dir/definitions/*.def | awk 'BEGIN {FS="\"";}{print $2;}' ` +echo definitions version $version + +definitions=grib_def-$version + +rm -rf $definitions | true + +cp -r $dir/definitions $definitions +install=$definitions/installDefinitions.sh +rm -f $install.new +sed s/%LIBRARY_VERSION%/$libraryVersion/g $install > $install.new +chmod +w $install.new +mv $install.new $install + +tar zcvf $definitions.tar.gz $definitions + +rm -rf $definitions $dir + diff --git a/parameters/Makefile b/parameters/Makefile new file mode 100644 index 000000000..c391b5d2a --- /dev/null +++ b/parameters/Makefile @@ -0,0 +1,23 @@ +all : ../definitions/grib2/tigge_name.def ../tigge/tigge_check.h db + +# ./tigge_def.pl produces 3 files. The rule is only for tigge_name.def +# ../definitions/grib2/tigge_parameter.def +# ../definitions/grib2/tigge_short_name.def + +../definitions/grib2/tigge_name.def: master.info tigge_def.pl + -p4 edit ../definitions/grib2/tigge_name.def + -p4 edit ../definitions/grib2/tigge_parameter.def + -p4 edit ../definitions/grib2/tigge_short_name.def + ./tigge_def.pl master.info + cp tigge_name.def ../definitions/grib2/tigge_name.def + cp tigge_parameter.def ../definitions/grib2/tigge_parameter.def + cp tigge_short_name.def ../definitions/grib2/tigge_short_name.def + +../tigge/tigge_check.h: master.info tigge_check.info tigge_check.pl + -p4 edit ../tigge/tigge_check.h + ./tigge_check.pl master.info tigge_check.info > ../tigge/tigge_check.h + +db : master.info feed_metdb.pl + ./feed_metdb.pl + ./feed_tigge.pl prod + touch db diff --git a/parameters/feed_metdb.pl b/parameters/feed_metdb.pl new file mode 100755 index 000000000..7c83db160 --- /dev/null +++ b/parameters/feed_metdb.pl @@ -0,0 +1,88 @@ +#!/usr/local/bin/perl56 + +# What to do: +# +# 1) change info in the file master.info +# +# 2) +# the following tabe must exist in psql metdb_test; +# +# create table grib2_test ( +# param_id integer, +# levtype text, +# keyword text, +# value text, +# insert_date date default current_date, +# update_date date default current_date, +# +# PRIMARY KEY ("param_id", "levtype", "keyword", "value") +# ); + +use strict; + +use DBI; + +open( IN, "connect("dbi:Pg(RaiseError=>1):dbname=metdb_test;host=datasvc","max", ""); + +my $prepare = "delete from grib2_test"; +my $sth = $DHB->prepare( $prepare ); +$sth->execute(); + +my $header = 0; +my $data = 0; +my @headers; +while( ) { + + my $current = $_; + chomp($current); + + if( m/^#/ ) { + next + } + elsif( m/^\-+\Z/ ) { + $data = 1; # now the data section comes + next + } + elsif( !m/^#/ and $data == 0 ) { + $header = 1; + @headers = split( /\s/, $current ); + next + } + + my @data = split( " ", $current ); + + my $grib1; + my $levtype; + my $count = 0; + foreach my $name ( @headers ) { + + $grib1 = $data[ $count ] if( $name =~ m/^mars.param\Z/ ); + $levtype = $data[ $count ] if( $name =~ m/^mars.levtype\Z/ ); + + if( $name =~ m/^tigge_name\Z/ ) { + $count++; + next + } + + if( $name =~ /^\w+\Z/ and $data[ $count ] =~ /\d+/ ) { + my $keyword = $name; + my $value = $data[ $count ]; + + my $prepare = "insert into grib2_test values( '$grib1', '$levtype', '$keyword', '$value' )"; + my $sth = $DHB->prepare( $prepare ); + + print $prepare . "\n"; + + $sth->execute(); + } + + $count++; + } + +} + diff --git a/parameters/feed_tigge.pl b/parameters/feed_tigge.pl new file mode 100755 index 000000000..e189e86af --- /dev/null +++ b/parameters/feed_tigge.pl @@ -0,0 +1,115 @@ +#!/usr/local/bin/perl56 + +# feeds all static infos into psql tigge_test +# such as: - title, +# - name, +# - abbreviation +# - unit +# +# the information comes from master.info except for unit +# +# an evironmental variable GRIB_DEFINITION_PATH must exist +# master.info is in GRIB_DEFINITION_PATH/../parameters +# the units are taken from GRIB_DEFINITION_PATH/definitions/* +# +# a table parameters with the above columns must exist +# + +use DBI; + +use strict; + +my $what = $ARGV[0]; +die "'test' or 'prod'? type either 'feed_tigge test' or 'feed_tigge prod'" unless( $what eq "test" or + $what eq "prod" ); + +my $DHB = DBI->connect("dbi:Pg(RaiseError=>1):dbname=tigge_$what;host=datasvc","max", ""); + +my $prepare = "select levtype, grib1_numbers from parameters"; +my $sth = $DHB->prepare( $prepare ); +$sth->execute(); + +my $path = "/home/max/grib_api/parameters"; +open( IN, "<$path/master.info" ) or die "can not open file master.info"; +my @master_info = ; +close( IN ); + +while( my ( $levtype, $grib1_numbers ) = $sth->fetchrow_array() ) { + my @parameter = grep(/^$grib1_numbers\s+/, @master_info); + @parameter = grep(/\s+$levtype\s+/,@parameter); + + die "more than one match for levtype = $levtype and grib1_numbers = $grib1_numbers" if( scalar( @parameter ) > 1 ); + die "no match found for levtype = $levtype and grib1_numbers = $grib1_numbers" unless( @parameter ); + + my @entries = split(" ", $parameter[0] ); + my $abbreviation = $entries[1]; + my $name = $entries[2]; + + my $title = get_title( $name ); + my $unit = get_unit( $entries[4], $entries[5], $entries[6], $entries[13] ); + + # check whether parameter entry exists + my $prepare = "select levtype, grib1_numbers from parameters where levtype=? and grib1_numbers=?"; + my $sth = $DHB->prepare( $prepare ); + $sth->execute( $levtype, $grib1_numbers); + + if( $sth->fetchrow_array() ) { + + print "updating $title ( $name ): $unit and $abbreviation\n"; + + my @strings = ( "title='$title'", "name='$name'", "unit='$unit'", "abbreviation='$abbreviation'" ); + foreach my $string ( @strings ) { + my $prepare = "update parameters set $string where levtype=? and grib1_numbers=?"; + my $sth = $DHB->prepare( $prepare ); + $sth->execute( $levtype, $grib1_numbers); + } + } +} + + +sub get_title { + my ( $name ) = @_; + + $name =~ s/u_vel/u-vel/; + $name =~ s/v_vel/v-vel/; + $name =~ s/time_int/time-int/; + $name =~ s/land_sea/land-sea/; + $name =~ s/_/ /g; + + return ucfirst( $name ) +} + + +sub get_unit { + my ( $disc, $cat, $num, $stat_proc ) = @_; + + my $path = "/home/max/grib_api/definitions/grib2"; + open( IN2, "<$path/4.2.$disc.$cat.table" ) or die "Could not open file $path/4.2.$disc.$cat.table"; + my @content = ; + close IN2; + + my ($what) = grep(/^\s*$num\s+\w+/, @content); + + my ( $unit ) = ( $what =~ /^\s*$num\s+.+\s+\(([\w|\s|\-|%]*)\)\Z/ ); + $unit = "unknown" unless( $unit ); + $unit = "" if( $unit eq "Numeric" ); + chomp( $unit ); + + if( $stat_proc == 1 ) { + if( $unit !~ /\ss/ ) { + $unit = $unit . " s"; + } + elsif( $unit =~ /\ss-1/ ) { + $unit =~ s/s-1// + } + elsif( $unit =~ /\ss\s/ ) { + $unit =~ s/\ss\s/s2/ + } + else { + $unit =~ s/\ss(-?\d+)\s/\ss$1+1\s/ + } + } + + return $unit +} + diff --git a/parameters/grib1_def.pl b/parameters/grib1_def.pl new file mode 100755 index 000000000..cc93ca300 --- /dev/null +++ b/parameters/grib1_def.pl @@ -0,0 +1,166 @@ +#!/usr/local/bin/perl56 -I/usr/local/lib/metaps/perl +use Data::Dumper; +use metdb qw(prod); + +use metdb::grib_parameters; + +my @x = metdb::grib_parameters->all_fields; +#print Dumper(\@x); +my $last; + +open(out,"> grib1_short_name.def"); + +print out <<"EOF"; +# Automatically generated by $0, do not edit + +EOF + +foreach my $p ( metdb::grib_parameters->find( + { }, + [qw(grib_originating_centre grib_code_table grib_parameter)])) +{ + my ($centre,$table) = ($p->get_grib_originating_centre,$p->get_grib_code_table); + my ($param,$abbr,$name) = ($p->get_grib_parameter, $p->get_mars_abbreviation,$p->get_long_name); + $abbr =~ tr/A-Z/a-z/; + + print out " \'$abbr\' = { indicatorOfParameter=$param ; gribTablesVersionNo=$table ;}\n" unless(!$abbr); +} + +close out; +open(out,"> grib1_name.def"); + +print out <<"EOF"; +# Automatically generated by $0, do not edit + +EOF + +foreach my $p ( metdb::grib_parameters->find( + { }, + [qw(grib_originating_centre grib_code_table grib_parameter)])) +{ + my ($centre,$table) = ($p->get_grib_originating_centre,$p->get_grib_code_table); + my ($param,$abbr,$name) = ($p->get_grib_parameter, $p->get_mars_abbreviation,$p->get_long_name); + $abbr =~ tr/A-Z/a-z/; + + $name =~ s/ /_/g; + $name =~ s/,//g; + print out " \'$name\' = { indicatorOfParameter=$param ; gribTablesVersionNo=$table ; }\n" unless(!$abbr); +} + +close out; +open(out,"> grib1_units.def"); + +print out <<"EOF"; +# Automatically generated by $0, do not edit + +EOF + +foreach my $p ( metdb::grib_parameters->find( + { }, + [qw(grib_originating_centre grib_code_table grib_parameter)])) +{ + my ($centre,$table) = ($p->get_grib_originating_centre,$p->get_grib_code_table); + my ($param,$abbr,$unit) = ($p->get_grib_parameter, $p->get_mars_abbreviation,$p->get_unit); + $abbr =~ tr/A-Z/a-z/; + + print out " \'$unit\' = { indicatorOfParameter=$param ; gribTablesVersionNo=$table ; }\n" unless(!$abbr); +} + +close out; + + +__END__ +'grib_originating_centre', +'grib_code_table', +'grib_parameter', +'mars_abbreviation', +'long_name', +'description', +'web_title', +'unit', +'comment', +'parameter_type', +'wind_corresponding_parameter', +'netcdf_name', +'netcdf_cf_approved', +'magics_abbreviated_text', +'magics_title', +'magics_offset', +'magics_factor', +'magics_scaled_unit', +'magics_contour_interval', +'magics_specification_group', +'magics_comment', +'dissemination_accuracy', +'dissemination', +'insert_date', +'update_date' + +my %x; + +foreach my $n ( sort keys %{$info} ) +{ + my $p = $info->{$n}->{'mars.param'}; + my $z = $info->{$n}; + + if(exists $x{$p}) + { + # Find differences + my %z; + my @z = keys %{$x{$p}}; + + foreach my $k ( keys %{$z} ) + { + $z{$k} = $z->{$k} if($x{$p}->{$k} eq $z->{$k}); + } + + $z = \%z; + } + + $x{$p} = $z; + +} + +foreach my $k ( sort { $x{$a}->{tigge_name} cmp $x{$b}->{tigge_name} } keys %x ) +{ + print "# $x{$k}->{tigge_name} \n"; + print " '$k' = {\n"; + + foreach my $m ( sort keys %{$x{$k}} ) + { + + next if($m =~ /\./); + next if($m =~ /\_/); + my $v = $x{$k}->{$m}; + next if($v =~ /#/); + next if($v =~ /missing/i); + + print " $m = $v;\n"; + } + + print " }\n\n"; +} + + +foreach my $k ( sort { $x{$a}->{'mars.abbreviation'} cmp $x{$b}->{tigge_name} } keys %x ) +{ + #print "# $x{$k}->{tigge_name} \n"; + print " '$x{$k}->{'mars.abbreviation'}' = { parameter = $k; }\n"; +} + +print <<"EOF"; +} + +alias ls.short_name=tigge_short_name; + +concept tigge_name { +EOF + +foreach my $k ( sort { $x{$a}->{tigge_name} cmp $x{$b}->{tigge_name} } keys %x ) +{ + print " '$x{$k}->{tigge_name}' = { parameter = $k; }\n"; +} + +print <<"EOF"; +} +EOF diff --git a/parameters/human_readable.pl b/parameters/human_readable.pl new file mode 100755 index 000000000..3eb5a8bc8 --- /dev/null +++ b/parameters/human_readable.pl @@ -0,0 +1,89 @@ +#!/usr/local/bin/perl56 + +use strict; + + +@ARGV = qw(master.info) unless(@ARGV); + + +my $path = $ENV{ GRIB_DEFINITION_PATH }; +$path = "../definitions" unless( $path ); +$path = $path . "/grib2"; + +my $start = 0; +while( <> ) { + + if( m/^\-+\Z/ ) { + $start = 1; + next + } + elsif( $start == 0 ) { + next + } + + my ( $grib, $abbr, $title, $lev, $disc, $cat, $num, + $sfc1a, $sfc1b, $sfc1c, $sfc2a, $sfc2b, $sfc2c, + $stat) = split(/\s+/, $_); + + my @where = ( "4.2.$disc.$cat.table", + "4.5.table", "4.5.table", + "4.10.table" ); + my @what = ( $num, $sfc1a, $sfc2a, $stat ); + + my $level1 = get_level_value( $sfc1a, $sfc1b, $sfc1c ); + my $level2 = get_level_value( $sfc2a, $sfc2b, $sfc2c ); + + my @result; + my $count = 0; + foreach my $file ( @where ) { + + my $number = $what[ $count++ ]; + next unless( $number =~ m/\d+/ ); + + my $file = "$path/$file"; + open( IN2, "<$file") or die "Could not open file $file"; + my @content = ; + close IN2; + + my ($what) = grep(/^\s*$number\s+\w+/, @content); + + my ( $what ) = ( $what =~ /^\s*$number\s+\w+\s+([\w|\s|-]+)/ ); + $what = "unknown" unless( $what ); + chomp( $what ); + + my $test = $what; + my $foo = chop( $test ); + chop( $what ) if( $foo =~ m/\s/ ); + + $what = $what . "($level1)" if( $count == 2 and $level1 =~ m/\d+/ ); + $what = $what . "($level2)" if( $count == 3 and $level2 =~ m/\d+/ ); + push @result, $what; + } + + print "$grib\t$title ($abbr):\n"; + print "\t\t" . join(", ", @result) . "\n\n"; + +} + + +sub get_level_value { + my ( $code, $value1, $value2 ) = @_; + + return if( $value1 == 255 and $value2 == 255 ); + + return if( $value1 eq "#" ); + + my $file = "$path/4.5.table"; + open( IN3, "<$file") or die "Could not open file $file"; + my @content = ; + close IN3; + + my ($what) = grep(/^\s*$code\s+\w+/, @content); + + my ( $unit ) = ( $what =~ /^\s*$code\s+[\w|\s]+\(([\w|\s|-]+)\)/ ); + chomp( $unit ); + + my $value = 10**(-$value2) * $value1; + return "$value $unit" +} + diff --git a/parameters/master.info b/parameters/master.info new file mode 100644 index 000000000..e52037341 --- /dev/null +++ b/parameters/master.info @@ -0,0 +1,69 @@ +# 1 ... Grib1 number +# 2 ... acronym +# 3 ... title +# 4 ... levtype +# 5 ... discipline +# 6 ... parameterCategory +# 7 ... parameterNumber +# 8 ... typeOfFirstFixedSurface +# 9 ... scaledValueOfFirstFixedSurface +# 10 ... scaleFactorOfFirstFixedSurface +# 11 ... typeOfSecondFixedSurface +# 12 ... scaledValueOfSecondFixedSurface +# 13 ... scaleFactorOfSecondFixedSurface +# 14 ... typeOfStatisticalProcessing +# 15 ... productDefinitionTemplateNumber +# 16 ... scaledValueOfLowerLimit +# 17 ... scaledValueOfUpperLimit +# 18 ... one +# +# # ... means value does not exist or is variable (e.g. value for pressure levels) +# +# 1 2 3 4 5 6 7 8 9 10 11 12 13 +mars.param mars.abbreviation tigge_name mars.levtype discipline parameterCategory parameterNumber typeOfFirstFixedSurface scaledValueOfFirstFixedSurface scaleFactorOfFirstFixedSurface typeOfSecondFixedSurface scaledValueOfSecondFixedSurface scaleFactorOfSecondFixedSurface typeOfStatisticalProcessing productDefinitionTemplateNumber scaledValueOfLowerLimit scaledValueOfUpperLimit one +--------------------------------------------------------------------------------------------------------------------------------- +3 pt potential_temperature pv 0 0 2 109 2 6 MISSING MISSING MISSING # # # # # +228039 sm soil_moisture sfc 2 0 22 106 0 0 106 2 1 # # # # # +59 cape convective_available_potential_energy sfc 0 7 6 1 MISSING MISSING 8 MISSING MISSING # # # # # +60 pv potential_vorticity pt 0 2 14 107 320 0 MISSING MISSING MISSING # # # # # +121 mx2t6 surface_air_maximum_temperature sfc 0 0 0 103 # # MISSING MISSING MISSING 2 # # # # +122 mn2t6 surface_air_minimum_temperature sfc 0 0 0 103 # # MISSING MISSING MISSING 3 # # # # +130 t temperature pl 0 0 0 100 # # MISSING MISSING MISSING # # # # # +131 u u_velocity pl 0 2 2 100 # # MISSING MISSING MISSING # # # # # +131 u u_velocity pv 0 2 2 109 2 6 MISSING MISSING MISSING # # # # # +132 v v_velocity pl 0 2 3 100 # # MISSING MISSING MISSING # # # # # +132 v v_velocity pv 0 2 3 109 2 6 MISSING MISSING MISSING # # # # # +133 q specific_humidity pl 0 1 0 100 # # MISSING MISSING MISSING # # # # # +134 sp surface_pressure sfc 0 3 0 1 MISSING MISSING MISSING MISSING MISSING # # # # # +136 tcw total_column_water sfc 0 1 51 1 MISSING MISSING 8 MISSING MISSING # # # # # +228139 st soil_temperature sfc 2 0 2 106 0 0 106 2 1 # # # # # +228141 sd snow_depth_water_equivalent sfc 0 1 60 1 MISSING MISSING MISSING MISSING MISSING # # # # # +228144 sf snow_fall_water_equivalent sfc 0 1 53 1 MISSING MISSING MISSING MISSING MISSING 1 # # # # +146 sshf time_integrated_surface_sensible_heat_flux sfc 0 0 11 1 MISSING MISSING MISSING MISSING MISSING 1 # # # # +147 slhf time_integrated_surface_latent_heat_flux sfc 0 0 10 1 MISSING MISSING MISSING MISSING MISSING 1 # # # # +151 msl mean_sea_level_pressure sfc 0 3 0 101 MISSING MISSING MISSING MISSING MISSING # # # # # +156 gh geopotential_height pl 0 3 5 100 # # MISSING MISSING MISSING # # # # # +228164 tcc total_cloud_cover sfc 0 6 1 1 MISSING MISSING 8 MISSING MISSING # # # # # +165 10u 10_meter_u_velocity sfc 0 2 2 103 10 0 MISSING MISSING MISSING # # # # # +166 10v 10_meter_v_velocity sfc 0 2 3 103 10 0 MISSING MISSING MISSING # # # # # +167 2t surface_air_temperature sfc 0 0 0 103 # # MISSING MISSING MISSING # # # # # +168 2d surface_air_dew_point_temperature sfc 0 0 6 103 # # MISSING MISSING MISSING # # # # # +172 lsm land_sea_mask sfc 2 0 0 1 MISSING MISSING MISSING MISSING MISSING # # # # # +176 ssr time_integrated_surface_net_solar_radiation sfc 0 4 9 1 MISSING MISSING MISSING MISSING MISSING 1 # # # # +177 str time_integrated_surface_net_thermal_radiation sfc 0 5 5 1 MISSING MISSING MISSING MISSING MISSING 1 # # # # +179 ttr time_integrated_outgoing_long_wave_radiation sfc 0 5 5 8 MISSING MISSING MISSING MISSING MISSING 1 # # # # +189 sund sunshine_duration sfc 0 6 24 1 MISSING MISSING MISSING MISSING MISSING 1 # # # # +228228 tp total_precipitation sfc 0 1 52 1 MISSING MISSING MISSING MISSING MISSING 1 # # # # +235 skt skin_temperature sfc 0 0 17 1 MISSING MISSING MISSING MISSING MISSING # # # # # +228001 ci convective_inhibition sfc 0 7 7 1 MISSING MISSING 8 MISSING MISSING # # # # # +228002 orog orography sfc 0 3 5 1 MISSING MISSING MISSING MISSING MISSING # # # # # +228170 cap field_capacity sfc 2 3 12 106 0 0 106 2 1 # # # # # +228171 wilt wilting_point sfc 2 0 26 106 0 0 106 2 1 # # # # # +131062 tpg10 total_precipitation_of_at_least_10_mm sfc 0 1 52 1 MISSING MISSING MISSING MISSING MISSING 1 9 10 MISSING # +131063 tpg20 total_precipitation_of_at_least_20_mm sfc 0 1 52 1 MISSING MISSING MISSING MISSING MISSING 1 9 20 MISSING # +131070 10fgg15 10_metre_wind_gust_of_at_least_15_m/s sfc 0 2 22 103 10 0 MISSING MISSING MISSING 2 9 15 MISSING # +131071 10fgg25 10_metre_wind_gust_of_at_least_25_m/s sfc 0 2 22 103 10 0 MISSING MISSING MISSING 2 9 25 MISSING # +171034 ssta sea_surface_temperature_anomaly sfc 0 0 9 1 MISSING MISSING MISSING MISSING MISSING # # # # # +49 10u maximum_wind_gust sfc 0 2 22 103 10 0 MISSING MISSING MISSING 2 # # # # +default unknown unknown # 0 0 0 # # # # # # # # # # # + diff --git a/parameters/report.pl b/parameters/report.pl new file mode 100755 index 000000000..7b1ea2aeb --- /dev/null +++ b/parameters/report.pl @@ -0,0 +1,41 @@ +#!/usr/bin/perl +use tigge; +use Data::Dumper; + +my $h = tigge::read_info(@ARGV); + +show($h,qw(discipline parameterCategory parameterNumber)); +show($h,qw(typeOfStatisticalProcessing)); +show($h,qw(typeOfFirstFixedSurface typeOfSecondFixedSurface)); + + +sub show { + my ($h,@keys) = @_; + + my %p; + print '=' x 80, "\n"; + print "@keys\n"; + print '=' x 80, "\n"; + + foreach my $k ( sort keys %{$h} ) + { + my %y = %{$h->{$k}}; + my @v = @y{@keys}; + my $p = join("-",@v); + + push @{$p{$p}}, $h->{$k}; + } + + foreach my $k ( sort keys %p ) + { + print "$k\n"; + foreach my $p ( @{$p{$k}} ) + { + print " ",$p->{tigge_name}," ($p->{'mars.levtype'})\n"; + } + } + + print '-' x 80, "\n"; + print "\n"; + +} diff --git a/parameters/tigge.pm b/parameters/tigge.pm new file mode 100755 index 000000000..5232f4d09 --- /dev/null +++ b/parameters/tigge.pm @@ -0,0 +1,55 @@ +package tigge; +use strict; + +sub read_info { + + my (@files) = @_; + my %params; + + @files = qw(master.info) unless(@files); + + foreach my $f ( @files ) + { + open(IN,"<$f") or die "$f: $!"; + + my @header; + my @values; + + while() + { + chomp; + next if(/^#/); + next if(/^-/); + + unless(@header) + { + @header = split; + next; + } + + @values = split; + next unless(@values); + + die unless(@values == @header); + + my %h; + @h{@header} = @values; + + my $name = $h{tigge_name}; + my $levtype = $h{"mars.levtype"}; + die "No tigge name @header" unless($name); + die "No levtype" unless($levtype); + $name = "${name}_${levtype}"; + die "Duplicate entry $name" if(exists $params{$name}); + $params{$name} = \%h; + } + + close(IN); + + } + + + return \%params; +} + +1; diff --git a/parameters/tigge_check.info b/parameters/tigge_check.info new file mode 100644 index 000000000..80705b86c --- /dev/null +++ b/parameters/tigge_check.info @@ -0,0 +1,44 @@ +tigge_name mars.levtype min1 min2 max1 max2 checks +--------------------------------------------------------------------------------------------------------------------------------- +#potential_temperature pv 220 460 3 3 point_in_time,given_level,potential_vorticity_level +# Changed for ukmo +potential_temperature pv 220 265 380 1200 point_in_time,given_level,potential_vorticity_level +soil_moisture sfc -1e-18 0 450 500 point_in_time,given_thickness,has_bitmap +convective_available_potential_energy sfc 0 0 0 17000 point_in_time,predefined_thickness +potential_vorticity pt -0.005 -1e-6 1e-6 0.002 point_in_time,given_level,potential_temperature_level +surface_air_maximum_temperature sfc 190 230 310 330 six_hourly,given_level +surface_air_minimum_temperature sfc 190 230 310 320 six_hourly,given_level +temperature pl 185 250 230 330 point_in_time,given_level,pressure_level +u_velocity pl -120 -20 20 120 point_in_time,given_level,pressure_level +u_velocity pv -120 -30 70 120 point_in_time,given_level,potential_vorticity_level +v_velocity pl -120 -20 20 120 point_in_time,given_level,pressure_level +v_velocity pv -120 -50 55 120 point_in_time,given_level,potential_vorticity_level +specific_humidity pl -1e-2 1e-4 0.0001 0.050 point_in_time,given_level,pressure_level +surface_pressure sfc 48000 50500 103000 110000 point_in_time,predefined_level +total_column_water sfc 0.1 0.21 75 150 point_in_time,predefined_thickness +soil_temperature sfc 200 230 310 350 point_in_time,given_thickness +# snow_depth_water_equivalent sfc -4e-19 15 -99 2 point_in_time,predefined_level +# Changed for ncep +snow_depth_water_equivalent sfc -4e-19 0 12000 15000 point_in_time,predefined_level +snow_fall_water_equivalent sfc -1e-9 -1e-9 3.5 3.5 from_start,predefined_level +time_integrated_surface_sensible_heat_flux sfc -3e+6 -3e+6 1.5e+6 1.5e+6 from_start,predefined_level +time_integrated_surface_latent_heat_flux sfc -4e+6 -4e+6 700000 700000 from_start,predefined_level +mean_sea_level_pressure sfc 91000 95000 104000 107000 point_in_time,predefined_level +geopotential_height pl -810 20000 320 22000 point_in_time,given_level,pressure_level +total_cloud_cover sfc 0 1e-10 100 100.00001 point_in_time,predefined_thickness +10_meter_u_velocity sfc -80 -20 20 80 point_in_time,given_level +10_meter_v_velocity sfc -80 -20 20 80 point_in_time,given_level +surface_air_temperature sfc 190 230 300 350 point_in_time,given_level +surface_air_dew_point_temperature sfc 130 230 280 320 point_in_time,given_level +land_sea_mask sfc 0 0 1 1 point_in_time,predefined_level +time_integrated_surface_net_solar_radiation sfc 0 0 4e+6 4e+6 from_start,predefined_level +time_integrated_surface_net_thermal_radiation sfc -1.1e+6 -1.1e+6 700000 700000 from_start,predefined_level +time_integrated_outgoing_long_wave_radiation sfc -1.5e+6 -1.5e+6 -300000 -300000 from_start,predefined_level +sunshine_duration sfc 0 0 3600.00000001 3600.00000001 from_start,predefined_level +total_precipitation sfc -1e-8 -1e-8 45 45 from_start,predefined_level +skin_temperature sfc 180 210 320 355 point_in_time,predefined_level +convective_inhibition sfc -1500 -1500 0 0 point_in_time,predefined_thickness +orography sfc -1300 -109 5600 56000 point_in_time,predefined_level +wilting_point sfc 1e99 -1e99 99 -99 point_in_time,given_thickness,has_bitmap +field_capacity sfc 1e99 -1e99 99 -99 point_in_time,given_thickness,has_bitmap +saturation_of_soil_moisture sfc 1e99 -1e99 99 -99 point_in_time,given_thickness,has_bitmap diff --git a/parameters/tigge_check.pl b/parameters/tigge_check.pl new file mode 100755 index 000000000..1541bc894 --- /dev/null +++ b/parameters/tigge_check.pl @@ -0,0 +1,51 @@ +#!/usr/bin/perl +use tigge; +use Data::Dumper; + +my $info = tigge::read_info(@ARGV[0]); # "master.info"); +my $checks = tigge::read_info(@ARGV[1]); # "tigge_check.info"); + +#system("p4 edit ../tigge/tigge_check.h"); +#open(STDOUT,">../tigge/tigge_check.h"); + +print "parameter parameters[] = {\n"; + + + + +foreach my $n ( sort keys %{$info} ) +{ + + if($checks->{$n}->{checks} =~ /potential_vorticity_level/) + { + delete $info->{$n}->{scaleFactorOfFirstFixedSurface}; + delete $info->{$n}->{scaledValueOfFirstFixedSurface}; + } + + + print " {\n"; + print " \"$n\",\n"; + print " $checks->{$n}->{min1},\n"; + print " $checks->{$n}->{min2},\n"; + print " $checks->{$n}->{max1},\n"; + print " $checks->{$n}->{max2},\n"; + print " {\n"; + foreach my $m ( sort keys %{$info->{$n}} ) + { + next if($m =~ /\./); + next if($m =~ /\_/); + my $v = $info->{$n}->{$m}; + next if($v =~ /#/); + next if($v =~ /missing/i); + + print " {\"$m\", $v},\n"; + } + print " {NULL, },\n"; + print " },\n"; + print " {"; + print join(", ",map {"\&$_"} split(",",$checks->{$n}->{checks})); + print "},\n"; + print " },\n\n"; +} + +print "};\n"; diff --git a/parameters/tigge_def.pl b/parameters/tigge_def.pl new file mode 100755 index 000000000..01ef94ac0 --- /dev/null +++ b/parameters/tigge_def.pl @@ -0,0 +1,84 @@ +#!/usr/bin/perl +use tigge; +use Data::Dumper; + +my $info = tigge::read_info(@ARGV[0]); + +open(out," > tigge_parameter.def"); +print out <<"EOF"; +# Automatically generated by $0, do not edit + +EOF + +my %x; + +foreach my $n ( sort keys %{$info} ) +{ + my $p = $info->{$n}->{'mars.param'}; + my $z = $info->{$n}; + + if(exists $x{$p}) + { + # Find differences + my %z; + my @z = keys %{$x{$p}}; + + foreach my $k ( keys %{$z} ) + { + $z{$k} = $z->{$k} if($x{$p}->{$k} eq $z->{$k}); + } + + $z = \%z; + } + + $x{$p} = $z; + +} + +foreach my $k ( sort { $x{$a}->{tigge_name} cmp $x{$b}->{tigge_name} } keys %x ) +{ + print out "# $x{$k}->{tigge_name} \n"; + print out " '$k' = {\n"; + + foreach my $m ( sort keys %{$x{$k}} ) + { + + next if($m =~ /\./); + next if($m =~ /\_/); + my $v = $x{$k}->{$m}; + next if($v =~ /#/); + next if($v =~ /missing/i); + + print out " $m = $v;\n"; + } + + print out " }\n\n"; +} + +close out; +open(out," > tigge_short_name.def"); +print out <<"EOF"; +# Automatically generated by $0, do not edit + +EOF + +foreach my $k ( sort { $x{$a}->{'mars.abbreviation'} cmp $x{$b}->{tigge_name} } keys %x ) +{ + #print "# $x{$k}->{tigge_name} \n"; + print out " '$x{$k}->{'mars.abbreviation'}' = { parameter = $k; }\n"; +} + +close out; + +open(out," > tigge_name.def"); +print out <<"EOF"; +# Automatically generated by $0, do not edit + +EOF + +foreach my $k ( sort { $x{$a}->{tigge_name} cmp $x{$b}->{tigge_name} } keys %x ) +{ + print out " '$x{$k}->{tigge_name}' = { parameter = $k; }\n"; +} + +close out; diff --git a/parameters/tigge_parameters.pl b/parameters/tigge_parameters.pl new file mode 100755 index 000000000..d79b2296c --- /dev/null +++ b/parameters/tigge_parameters.pl @@ -0,0 +1,51 @@ +#!/usr/bin/perl +use Data::Dumper; +use tigge; + +my $info = tigge::read_info(@ARGV[0]); + +my %x; + +foreach my $n ( sort keys %{$info} ) +{ + my $p = $info->{$n}->{'mars.param'}; + my $z = $info->{$n}; + + if(exists $x{$p}) + { + # Find differences + my %z; + my @z = keys %{$x{$p}}; + + foreach my $k ( keys %{$z} ) + { + $z{$k} = $z->{$k} if($x{$p}->{$k} eq $z->{$k}); + } + + $z = \%z; + } + + $x{$p} = $z; + +} + +foreach my $k ( sort { $x{$a}->{tigge_name} cmp $x{$b}->{tigge_name} } keys %x ) +{ + print "----------------------------------------------\n"; + print "$x{$k}->{'mars.abbreviation'}\t\t$x{$k}->{tigge_name}\n"; + + foreach my $m ( sort keys %{$x{$k}} ) + { + + next if($m =~ /\./); + next if($m =~ /\_/); + my $v = $x{$k}->{$m}; + next if($v =~ /#/); + next if($v =~ /missing/i); + + print " $m = $v;\n"; + } + + print "----------------------------------------------\n"; +} + diff --git a/perf/jmeter.awk b/perf/jmeter.awk new file mode 100644 index 000000000..a8212472f --- /dev/null +++ b/perf/jmeter.awk @@ -0,0 +1,85 @@ +BEGIN { + OFMT = "%.4f" + print "" + + if (JMETER=="true") { + print "" + } else { + print "" + } + test_name = "none" + dir = "" + times["real"] = "" + times["user"] = "" + times["sys"] = "" +} + +/TEST\:/ {test_name = $2} +/PASS\:/ { if (JMETER=="true") + for (key in times) jmeter_sample(dir,test_name,key,times[key],TIMESTAMP,"true") + else + junit_sample(dir,test_name,times["real"], "true") + } + +/FAIL\:/ { if (JMETER=="true") + for (key in times) jmeter_sample(dir,test_name,key,times[key],TIMESTAMP,"false") + else + junit_sample(dir,test_name,times["real"], "false") + } + +/^real|^user|^sys/ {times[$1]=get_time_in_msecs($2)} + +/DIRECTORY:/ {dir = get_dir($2)} + +END { + if (JMETER=="true") { + print "" + } else { + print "" + } +} + + + + + + + +function jmeter_sample(dir, test_name,test_type,time,timestamp,success) { + print "" +} + +function junit_sample(dir,test_name,time,success) { + if (success=="true") { + print "" + } else { + print "" + print "Non zero-return" + print "" + } +} + + +function get_time_in_msecs(timestring) { + if ( timestring ~ /s$/ ) { + # It must be the 0m0.003s format + len = split(timestring,bits,"[hms]") + } else { + # It must be the 2:00.0 format + len = split(timestring,bits,":") + } + val = 0 + count = 0 + for (i = len-1;i>=0;i--) { + if (! bits[i] ~ /\s*/) { + val = val + (bits[i] * 1000 * (60 ^ count)) + count ++ + } + } + return val; +} + +function get_dir(dir) { + len = split(dir,bits,"/") + return bits[len] +} diff --git a/perf/time.sh b/perf/time.sh new file mode 100755 index 000000000..6baf3fde6 --- /dev/null +++ b/perf/time.sh @@ -0,0 +1,3 @@ +#This script times stuff to get nice reports +echo "DIRECTORY: " `pwd` +time $@ diff --git a/perl/GRIB-API/API.xs b/perl/GRIB-API/API.xs new file mode 100644 index 000000000..5b6349efc --- /dev/null +++ b/perl/GRIB-API/API.xs @@ -0,0 +1,987 @@ +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include "ppport.h" + +#include +#include +/* +http://world.std.com/~swmcd/steven/perl/pm/xs/modules/Set/Bit/ +*/ + +static int _fail_on_error = 0; + +static int error(int e) +{ + if(e && _fail_on_error) croak(grib_get_error_message(e)); + return e; +} + +static int fail(int e) +{ + if(e) croak(grib_get_error_message(e)); + return e; +} + +static SV* get_long(grib_handle* h,const char* what) +{ + long value; + + if(error(grib_get_long(h,what,&value)) == 0) + return sv_2mortal(newSViv(value)); + + return &PL_sv_undef; +} + +static SV* get_double(grib_handle* h,const char* what) +{ + double value; + + if(error(grib_get_double(h,what,&value)) == 0) + return sv_2mortal(newSVnv(value)); + + return &PL_sv_undef; +} + +static SV* get_string(grib_handle* h,const char* what) +{ + char buf[1024]; + size_t size = sizeof(buf); + + if(error(grib_get_string(h,what,buf,&size)) == 0) + { + while(size>0 && buf[size-1] == 0) size--; + return sv_2mortal(newSVpv(buf,size)); + } + + return &PL_sv_undef; +} + +static SV* get_bytes(grib_handle* h,const char* what) +{ + size_t size; + SV* sv; + char *buffer = 0; + + if(error(grib_get_size(h,what,&size)) != 0) + return &PL_sv_undef; + + sv = newSVpv("",0); + buffer = SvGROW(sv,size); + + if(error(grib_get_bytes(h,what,buffer,&size)) == 0) + { + SvCUR_set(sv, size); + SvPOK_only(sv); + return sv_2mortal(sv); + } + else + { + /* Memory leek ... */ + return &PL_sv_undef; + } + +} + +static SV* get_double_array(grib_handle* h,const char* what) +{ + + size_t size = 0; + double *values = 0; + SV* result = &PL_sv_undef; + + + if(error(grib_get_size(h,what,&size)) != 0) + return &PL_sv_undef; + + Newz(0,values,size,double); + + if(error(grib_get_double_array(h,what,values,&size)) == 0) + { + AV* av = newAV(); + int i; + + for(i = 0; i < size; i++) + av_push(av,newSVnv(values[i])); + + result = sv_2mortal(newRV_noinc((SV*)av)); + /* sv_bless(result,gv_stashpv("GRIB::API::Debug",1)); */ + } + Safefree(values); + + return result; + +} + +static SV* get_long_array(grib_handle* h,const char* what) +{ + + size_t size = 0; + long *values = 0; + SV* result = &PL_sv_undef; + + + if(error(grib_get_size(h,what,&size)) != 0) + return &PL_sv_undef; + + Newz(0,values,size,long); + + if(error(grib_get_long_array(h,what,values,&size)) == 0) + { + AV* av = newAV(); + int i; + + for(i = 0; i < size; i++) + av_push(av,newSVnv(values[i])); + + result = sv_2mortal(newRV_noinc((SV*)av)); + } + Safefree(values); + + return result; + +} + +static int compar(const void *a, const void *b) +{ + double da = *(double*)a; + double db = *(double*)b; + + if(da == db) + return 0; + + if(da < db) + return -1; + + return 1; +} + + +typedef grib_handle *GRIB__API; +typedef grib_iterator *GRIB__API__Iterator; + + +MODULE = GRIB::API PACKAGE = GRIB::API + +PROTOTYPES: ENABLE + +void debug() + CODE: + grib_context_set_debug(0,1); + +GRIB::API +Read(file) + SV* file + + PREINIT: + FILE* f = PerlIO_findFILE(IoIFP(sv_2io(file))); + int err; + CODE: + RETVAL = grib_handle_new_from_file(0,f,&err); + fail(err); + OUTPUT: + RETVAL + +GRIB::API +create(bufsv) + SV* bufsv + + PREINIT: + size_t size = 0; + char *buffer; + CODE: + + RETVAL = 0; + + if(SvOK(bufsv)) + { + size = SvCUR(bufsv); + buffer = SvPV(bufsv,PL_na); + RETVAL = grib_handle_new_from_message(0,buffer,size); + } + OUTPUT: + RETVAL + +GRIB::API +template(name) + char* name + + PREINIT: + CODE: + RETVAL = grib_handle_new_from_template(0,name); + OUTPUT: + RETVAL + + +GRIB::API +clone(h) + GRIB::API h + CODE: + RETVAL = grib_handle_clone(h); + OUTPUT: + RETVAL + + +void +DESTROY(h) + GRIB::API h + CODE: + grib_handle_delete(h); + +void +Write(h,file) + GRIB::API h + SV* file + + PREINIT: + FILE* f = PerlIO_findFILE(IoIFP(sv_2io(file))); + size_t size = 0; + const void *message = 0; + PPCODE: + + if( fail(grib_get_message(h,&message,&size) ) == 0) + { + /* printf("write %ld\n",size); */ + if(fwrite(message,1,size,f) == size) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + } + else + XPUSHs(&PL_sv_undef); + +void fail_on_error(f = 1) + long f + + PPCODE: + _fail_on_error = f; + XPUSHs(&PL_sv_yes); + +void +Dump(h,file,mode = "debug",flags = ~0,format = NULL) + GRIB::API h + SV* file + char *mode + long flags + char *format + + PREINIT: + FILE* f = PerlIO_findFILE(IoIFP(sv_2io(file))); + PPCODE: + grib_dump_content(h,f,mode,flags,format); + XPUSHs(&PL_sv_yes); + + +void +get_long(h,what) + GRIB::API h + char *what + PPCODE: + XPUSHs(get_long(h,what)); + + +void +get_double(h,what) + GRIB::API h + char *what + PPCODE: + XPUSHs(get_double(h,what)); + +void +get_string(h,what) + GRIB::API h + char *what + PPCODE: + XPUSHs(get_string(h,what)); + +void +get_bytes(h,what) + GRIB::API h + char *what + PPCODE: + XPUSHs(get_bytes(h,what)); + + +void +set_bytes(h,what,bufsv) + GRIB::API h + char *what + SV* bufsv + + PREINIT: + size_t size = 0; + char *buffer; + PPCODE: + + if(!SvOK(bufsv)) + XPUSHs(&PL_sv_undef); + else { + + size = SvCUR(bufsv); + buffer = SvPV(bufsv,PL_na); + + if(error(grib_set_bytes(h,what,buffer,&size)) == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + } + +void +set_values(h,ref) + GRIB::API h + SV* ref + + PREINIT: + size_t size = 0; + grib_values vals[1024]; + HV* hash; + SV *value; + I32 ret; + char* key; + int i; + PPCODE: + { + if(SvTYPE(SvRV(ref)) != SVt_PVHV) + { + croak("not an HASH reference!"); + XPUSHs(&PL_sv_undef); + } + else + { + hash = (HV*)SvRV(ref); + hv_iterinit(hash); + size = 0; + while((value = hv_iternextsv(hash, &key, &ret)) != 0) + { + /* printf("key=%s\n",key); */ + vals[size].name = strdup(key); + if(SvIOK(value)) + { + vals[size].type = GRIB_TYPE_LONG; + vals[size].long_value = SvIV(value); + /* printf("-- %d %d %ld\n",size,vals[size].type,vals[size].long_value); */ + } + else if(SvNOK(value)) + { + vals[size].type = GRIB_TYPE_DOUBLE; + vals[size].double_value = SvNV(value); + /* printf("-- %d %d %g\n",size,vals[size].type,vals[size].double_value); */ + } + else if(SvPOK(value)) + { + size_t len; + char *buffer = SvPV(value,len); + /* e = grib_set_string(h,what,buffer,&size); */ + vals[size].type = GRIB_TYPE_STRING; + vals[size].string_value = buffer; + /* printf("-- %d %d %s\n",size,vals[size].type,vals[size].string_value); */ + } + else if(!SvOK(value) || (value == &PL_sv_undef)) + { + /* TODO: support other missing */ + vals[size].type = GRIB_TYPE_LONG; + vals[size].long_value = GRIB_MISSING_LONG; + } + else + { + char buf[1024]; + sprintf(buf,"Invalid type %s",key); + croak(buf); + XPUSHs(&PL_sv_undef); + break; + } + + /* printf("%d %d %d\n",SvIOK(value),SvNOK(value),SvPOK(value)); */ + + size++; + if(size > 1024) + { + croak("Too many values"); + XPUSHs(&PL_sv_undef); + break; + } + } + + /* printf("%s %d\n",vals[0].name,vals[0].type); */ + /* printf("SIZE %d\n",size); */ + + if(error(grib_set_values(h,vals,size)) == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + + for(i = 0; i < size; i++) + free((char*)vals[i].name); + + XPUSHs(&PL_sv_yes); + } + } + +void +get_double_array(h,what) + GRIB::API h + char *what + + PREINIT: + size_t size = 0; + PPCODE: + + if(error(grib_get_size(h,what,&size)) != 0) + XPUSHs(&PL_sv_undef); + else { + + double *values = 0; + + Newz(0,values,size,double); + + if(values) + { + + if(error(grib_get_double_array(h,what,values,&size)) == 0) + { + int i; + if(GIMME_V == G_ARRAY) + { + EXTEND(SP,size); + for(i = 0; i < size; i++) + XPUSHs(sv_2mortal(newSVnv(values[i]))); + } + else + { + AV* av = newAV(); + + for(i = 0; i < size; i++) + av_push(av,newSVnv(values[i])); + + /* XPUSHs(bufsv); */ + /* XPUSHs(sv_2mortal(newSViv(size)));*/ + XPUSHs(newRV_noinc((SV*)av)); + } + } + else + XPUSHs(&PL_sv_undef); + + } + else + XPUSHs(&PL_sv_undef); + + Safefree(values); + } + +void +set_double_array(h,what,list) + GRIB::API h + char *what + SV* list + + PREINIT: + size_t size = 0; + double *values = 0; + int i; + AV* av; + + if(!SvROK(list)) + croak("Argument 2 is not an ARRAY reference"); + + if(SvTYPE(SvRV(list))!=SVt_PVAV) + croak("Argument 2 is not an ARRAY reference"); + + av = (AV*)SvRV(list); + if(av_len(av) < 0) + croak("list has negative size "); + + size = av_len(av) + 1; + /* printf("set_double_array: %d\n",size); */ + + + PPCODE: + + + Newz(0,values,size,double); + + if(!values) + croak("cannot allocate values"); + + for(i = 0; i < size; i++) + { + SV* sv = *av_fetch(av,i,1); + if(SvNOK(sv)) + values[i] = SvNV(sv); + else if(SvIOK(sv)) + values[i] = SvIV(sv); + else if(SvPOK(sv)) + { + char *buffer = SvPV(sv,PL_na); + values[i] = atof(buffer); + } + else values[i] = 0; + } + + + /* printf("list %d\n",size); */ + + if(error(grib_set_double_array(h,what,values,size)) == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + + Safefree(values); + +void +set_long_array(h,what,list) + GRIB::API h + char *what + SV* list + + PREINIT: + size_t size = 0; + + if(!SvROK(list)) + croak("Argument 2 is not an ARRAY reference"); + + if(SvTYPE(SvRV(list))!=SVt_PVAV) + croak("Argument 2 is not an ARRAY reference"); + + AV* av = (AV*)SvRV(list); + if(av_len(av) < 0) + croak("list has negative size "); + + size = av_len(av); + + + PPCODE: + + if(error(grib_get_size(h,what,&size)) != 0) + XPUSHs(&PL_sv_undef); + else { + + long *values = 0; + + Newz(0,values,size,long); + + if(values) + { + int i; + AV* av = (AV*)SvRV(list); + size = av_len(av); + for(i = 0; i < size; i++) + { + SV* sv = *av_fetch(av,i,1); + if(SvNOK(sv)) + values[i] = SvNV(sv); + else if(SvIOK(sv)) + values[i] = SvIV(sv); + else if(SvPOK(sv)) + { + char *buffer = SvPV(sv,PL_na); + values[i] = atof(buffer); + } + else + values[i] = 0; + + } + + /* printf("list %d\n",size); */ + + if(error(grib_set_long_array(h,what,values,size)) == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + + } + else + XPUSHs(&PL_sv_undef); + + Safefree(values); + } + +void +get_long_array(h,what) + GRIB::API h + char *what + + PREINIT: + size_t size = 0; + PPCODE: + + if(error(grib_get_size(h,what,&size)) != 0) + XPUSHs(&PL_sv_undef); + else { + + long *values = 0; + + Newz(0,values,size,long); + + if(values) + { + + if(error(grib_get_long_array(h,what,values,&size)) == 0) + { + int i; + if(GIMME_V == G_ARRAY) + { + EXTEND(SP,size); + for(i = 0; i < size; i++) + XPUSHs(sv_2mortal(newSViv(values[i]))); + } + else + { + AV* av = newAV(); + + for(i = 0; i < size; i++) + av_push(av,newSViv(values[i])); + + /* XPUSHs(bufsv); */ + /*XPUSHs(sv_2mortal(newSViv(size)));*/ + XPUSHs(sv_2mortal(newRV_noinc((SV*)av))); + } + } + else + XPUSHs(&PL_sv_undef); + + } + else + XPUSHs(&PL_sv_undef); + + Safefree(values); + } + +char* +get_accessor_class(h,what) + GRIB::API h + char *what + PREINIT: + char *p; + PPCODE: + p = (char*)grib_get_accessor_class_name(h,what); + if(p) + XPUSHs(sv_2mortal(newSVpv(p,0))); + else + XPUSHs(&PL_sv_undef); + +void +get_size(h,what) + GRIB::API h + char *what + + PREINIT: + size_t size = 0; + PPCODE: + + if( error(grib_get_size(h,what,&size)) != 0) + XPUSHs(&PL_sv_undef); + else + XPUSHs(sv_2mortal(newSViv(size))); + +void +get_type(h,what) + GRIB::API h + char *what + + PREINIT: + int type = 0; + PPCODE: + if( error(grib_get_native_type(h,what,&type)) != 0) + XPUSHs(&PL_sv_undef); + else + XPUSHs(sv_2mortal(newSViv(type))); + +void +set(h,what,value) + GRIB::API h + char *what + SV* value; + PREINIT: + int e = 1; + PPCODE: + if(SvIOK(value)) + e = error(grib_set_long(h,what,SvIV(value))); + else if(SvNOK(value)) + e = error(grib_set_double(h,what,SvNV(value))); + else if(SvPOK(value)) + { + size_t size; + char *buffer = SvPV(value,size); + e = error(grib_set_string(h,what,buffer,&size)); + } + + if(e == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + +SV* +get(h,what) + GRIB::API h + char *what + PREINIT: + int e1,e2; + int type; + size_t size; + long long_value; + double double_value; + SV* result = &PL_sv_undef; + char buf[1024]; + + PPCODE: + e1 = error(grib_get_native_type(h,what,&type)); + e2 = error(grib_get_size(h,what,&size)); + + if(e1 == 0 && e2 == 0) + { + /* printf("what=%s type=%d size=%d\n",what,type,size); */ + switch(type) + { + case GRIB_TYPE_LONG: + if(size > 1) + result = get_long_array(h,what); + else + result = get_long(h,what); + break; + + case GRIB_TYPE_DOUBLE: + if(size > 1) + result = get_double_array(h,what); + else + result = get_double(h,what); + break; + + case GRIB_TYPE_STRING: + result = get_string(h,what); + break; + + case GRIB_TYPE_BYTES: + result = get_bytes(h,what); + break; + + default: + /* result = get_bytes(h,what); */ + break; + + } + } + XPUSHs(result); + + +SV* +get_gaussian_latitudes(n) + int n + PREINIT: + double *values = 0; + SV* result = &PL_sv_undef; + + PPCODE: + Newz(0,values,n*2,double); + + if( error(grib_get_gaussian_latitudes(n,values)) == 0) + { + AV* av = newAV(); + int i; + + for(i = 0; i < n*2; i++) + av_push(av,newSVnv(values[i])); + + result = sv_2mortal(newRV_noinc((SV*)av)); + /* sv_bless(result,gv_stashpv("GRIB::API::Debug",1)); */ + } + Safefree(values); + XPUSHs(result); + + +void +set_long(h,what,value) + GRIB::API h + char *what + long value; + PREINIT: + PPCODE: + if(error(grib_set_long(h,what,value)) == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + +void +set_long_internal(h,what,value) + GRIB::API h + char *what + long value; + PREINIT: + PPCODE: + if(error(grib_set_long_internal(h,what,value)) == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + +void +set_double(h,what,value) + GRIB::API h + char *what + double value; + PREINIT: + PPCODE: + if(error(grib_set_double(h,what,value)) == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + +void +set_double_internal(h,what,value) + GRIB::API h + char *what + double value; + PREINIT: + PPCODE: + if(error(grib_set_double_internal(h,what,value)) == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + +void +set_string(h,what,value) + GRIB::API h + char *what + char *value; + PREINIT: + size_t size = strlen(value); + PPCODE: + if(error(grib_set_string(h,what,value,&size)) == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + +void +set_string_internal(h,what,value) + GRIB::API h + char *what + char *value; + PREINIT: + size_t size = strlen(value); + PPCODE: + if(error(grib_set_string_internal(h,what,value,&size)) == 0) + XPUSHs(&PL_sv_yes); + else + XPUSHs(&PL_sv_undef); + +void +update_sections_lengths(h) + GRIB::API h + PPCODE: + grib_update_sections_lengths(h); + +void +obsfucate(h,what = "values") + GRIB::API h + char *what + PREINIT: + int e; + size_t size = 0; + double *values = 0; + PPCODE: + + + if(error(grib_get_size(h,what,&size)) != 0) + { + croak(grib_get_error_message(e)); + return; + } + + Newz(0,values,size,double); + + + if(error(grib_get_double_array(h,what,values,&size)) != 0) + { + Safefree(values); + croak(grib_get_error_message(e)); + return; + } + + qsort(values,size,sizeof(double),&compar); + + if(error(grib_set_double_array(h,what,values,size)) != 0) + { + Safefree(values); + croak(grib_get_error_message(e)); + return; + } + + Safefree(values); + +void +zero(h,what = "values") + GRIB::API h + char *what + PREINIT: + PPCODE: + + fail(grib_set_double_array(h,what,NULL,0)); + + + + +void +get_keys(h,name_space = NULL) + GRIB::API h + char *name_space + + PREINIT: + grib_keys_iterator* ks; + + PPCODE: + + ks = grib_keys_iterator_new(h,GRIB_KEYS_ITERATOR_ALL_KEYS,name_space); + + if(GIMME_V == G_ARRAY) + { + EXTEND(SP,800); + while(grib_keys_iterator_next(ks)) + { + const char* name = grib_keys_iterator_get_name(ks); + XPUSHs(sv_2mortal(newSVpvn(name,strlen(name)))); + } + } + else + { + AV* av = newAV(); + while(grib_keys_iterator_next(ks)) + { + const char* name = grib_keys_iterator_get_name(ks); + av_push(av,newSVpvn(name,strlen(name))); + } + + XPUSHs(newRV_noinc((SV*)av)); + } + grib_keys_iterator_delete(ks); + + +GRIB::API::Iterator +iterator(h) + GRIB::API h + CODE: + /* FIXME: RETVAL = grib_iterator_new(h); */ + abort(); + + /* printf("ITERATOR %p\n",RETVAL); */ + OUTPUT: + RETVAL + +MODULE = GRIB::API PACKAGE = GRIB::API::Iterator + +void +next(i) + GRIB::API::Iterator i + PREINIT: + double lat,lon,value; + PPCODE: + if(grib_iterator_next(i,&lat,&lon,&value)) + { + + XPUSHs(sv_2mortal(newSVnv(lat))); + XPUSHs(sv_2mortal(newSVnv(lon))); + XPUSHs(sv_2mortal(newSVnv(value))); + } + /* else */ + /* XPUSHs(&PL_sv_undef); */ + + + diff --git a/perl/GRIB-API/Changes b/perl/GRIB-API/Changes new file mode 100644 index 000000000..cbcf7a130 --- /dev/null +++ b/perl/GRIB-API/Changes @@ -0,0 +1,6 @@ +Revision history for Perl extension GRIB::API. + +0.01 Fri Nov 25 13:48:43 2005 + - original version; created by h2xs 1.23 with options + -cn GRIB::API ../src/grib_api.h + diff --git a/perl/GRIB-API/INSTALL b/perl/GRIB-API/INSTALL new file mode 100644 index 000000000..bd5d3cd1e --- /dev/null +++ b/perl/GRIB-API/INSTALL @@ -0,0 +1,13 @@ +%perl56 Makefile.PL PREFIX=/tmp/test INSTALLDIRS=perl +%make +%make install + +and +use lib qw(/tmp/test/lib); + +If you don't set INSTALLDIRS, the modules go to /tmp/test/lib/site_perl, so you need +use lib qw(/tmp/test/lib/site_perl); + +perl56 Makefile.PL PREFIX=/home/ma/mab/grib/api INSTALLDIRS=perl + +perl Makefile.PL PREFIX=/home/ma/mab/grib/api INSTALLDIRS=perl LD="ld -b32" diff --git a/perl/GRIB-API/MANIFEST b/perl/GRIB-API/MANIFEST new file mode 100644 index 000000000..d4c1a4a76 --- /dev/null +++ b/perl/GRIB-API/MANIFEST @@ -0,0 +1,12 @@ +API.xs +Changes +Makefile.PL +MANIFEST +ppport.h +README +test.pl +typemap +t/GRIB-API.t +lib/GRIB/API.pm +lib/GRIB/API/Tie.pm +lib/GRIB/API/Debug.pm diff --git a/perl/GRIB-API/Makefile.PL.in b/perl/GRIB-API/Makefile.PL.in new file mode 100755 index 000000000..0f73d9230 --- /dev/null +++ b/perl/GRIB-API/Makefile.PL.in @@ -0,0 +1,23 @@ +use 5.006001; +use ExtUtils::MakeMaker; +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. +WriteMakefile( + NAME => 'GRIB::API', + # Module version + 'VERSION' => '@PACKAGE_VERSION@', + + # Preprocessor defines + 'DEFINE' => '@DEFS@', # e.g., '-DHAVE_SOMETHING' + + VERSION_FROM => 'lib/GRIB/API.pm', # finds $VERSION + PREREQ_PM => {}, # e.g., Module::Name => 1.1 + ($] >= 5.005 ? ## Add these new keywords supported since 5.005 + (ABSTRACT_FROM => 'lib/GRIB/API.pm', # retrieve abstract from module + AUTHOR => 'Baudouin Raoult ') : ()), + LIBS => ['-L../../src -lgrib_api -lm @LIB_JP2@ @LIB_PNG@'], # e.g., '-lm' + INC => '-I@GRIB_API_INC@', # e.g., '-I. -I/usr/include/other' + # Un-comment this if you add C files to link with later: + # OBJECT => '$(O_FILES)', # link all the C files too + depend => { "API.o" => "../../src/libgrib_api.a" } +); diff --git a/perl/GRIB-API/README b/perl/GRIB-API/README new file mode 100644 index 000000000..3809191be --- /dev/null +++ b/perl/GRIB-API/README @@ -0,0 +1,38 @@ +GRIB-API version 0.01 +===================== + +The README is used to introduce the module and provide instructions on +how to install the module, any machine dependencies it may have (for +example C compilers and installed libraries) and any other information +that should be provided before the module is installed. + +A README file is required for CPAN modules since CPAN extracts the +README file from a module distribution so that people browsing the +archive can use it get an idea of the modules uses. It is usually a +good idea to provide version information here so that people can +decide whether fixes for the module are worth downloading. + +INSTALLATION + +To install this module type the following: + + perl Makefile.PL + make + make test + make install + +DEPENDENCIES + +This module requires these other modules and libraries: + + blah blah blah + +COPYRIGHT AND LICENCE +Copyright 2005-2012 ECMWF. + +This software is licensed under the terms of the Apache Licence Version 2.0 +which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + +In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + diff --git a/perl/GRIB-API/convert.pl b/perl/GRIB-API/convert.pl new file mode 100755 index 000000000..32cdf56ef --- /dev/null +++ b/perl/GRIB-API/convert.pl @@ -0,0 +1,529 @@ +#!/usr/bin/perl +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +use lib qw(blib/lib blib/arch); +use GRIB::API; +use Data::Dumper; + + +my %DEFAULTS = ( scaleFactorOfFirstFixedSurface => 255, + productionStatusOfProcessedData => 5, # Tigge test + shapeOfTheEarth => 6, +); + + +my $ukmo = 1; + + +############################################################# +# Generated by ./tigge_parameters.pl + +my %GRIB1TO2; +my %NEW_ID; +%GRIB1TO2 = ( + '134_sfc' => { + discipline => 0, + parameterNumber => 2, + typeOfFirstFixedSurface => 103, + parameterCategory => 2 + }, + '167_sfc' => { + discipline => 0, + parameterNumber => 0, + typeOfFirstFixedSurface => 103, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 0, + scaledValueOfFirstFixedSurface => 2 + }, + '168_sfc' => { + discipline => 0, + parameterNumber => 6, + typeOfFirstFixedSurface => 103, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 0, + scaledValueOfFirstFixedSurface => 2 + }, + '136_sfc' => { + typeOfSecondFixedSurface => 8, + discipline => 0, + parameterNumber => 47, + typeOfFirstFixedSurface => 1, + parameterCategory => 1 + }, + '121_sfc' => { + discipline => 0, + parameterNumber => 0, + typeOfStatisticalProcessing => 2, + typeOfFirstFixedSurface => 103, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 0, + scaledValueOfFirstFixedSurface => 2 + }, + '172_sfc' => { + discipline => 2, + parameterNumber => 0, + typeOfFirstFixedSurface => 1, + parameterCategory => 0 + }, + '122_sfc' => { + discipline => 0, + parameterNumber => 0, + typeOfStatisticalProcessing => 3, + typeOfFirstFixedSurface => 103, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 0, + scaledValueOfFirstFixedSurface => 2 + }, + '228001_sfc' => { + typeOfSecondFixedSurface => 8, + discipline => 0, + parameterNumber => 7, + typeOfFirstFixedSurface => 1, + parameterCategory => 7 + }, + '228_sfc' => { + discipline => 0, + parameterNumber => 54, + typeOfStatisticalProcessing => 1, + typeOfFirstFixedSurface => 1, + parameterCategory => 1 + }, + '141_sfc' => { + discipline => 0, + parameterNumber => 13, + typeOfFirstFixedSurface => 1, + parameterCategory => 1 + }, + '189_sfc' => { + discipline => 0, + parameterNumber => 22, + typeOfStatisticalProcessing => 1, + typeOfFirstFixedSurface => 1, + parameterCategory => 6 + }, + '228002_sfc' => { + discipline => 0, + parameterNumber => 5, + typeOfFirstFixedSurface => 1, + parameterCategory => 3 + }, + '139_sfc' => { + typeOfSecondFixedSurface => 106, + discipline => 2, + scaledValueOfSecondFixedSurface => 2, + parameterNumber => 2, + typeOfFirstFixedSurface => 106, + scaleFactorOfFirstFixedSurface => 0, + scaleFactorOfSecondFixedSurface => 1, + parameterCategory => 0, + scaledValueOfFirstFixedSurface => 0 + }, + '130_pl' => { + discipline => 0, + parameterNumber => 0, + typeOfFirstFixedSurface => 100, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 0 + }, + '131_pl' => { + discipline => 0, + parameterNumber => 2, + typeOfFirstFixedSurface => 100, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 2 + }, + '39_sfc' => { + typeOfSecondFixedSurface => 106, + discipline => 2, + scaledValueOfSecondFixedSurface => 2, + parameterNumber => 22, + typeOfFirstFixedSurface => 106, + scaleFactorOfFirstFixedSurface => 0, + scaleFactorOfSecondFixedSurface => 1, + parameterCategory => 0, + scaledValueOfFirstFixedSurface => 0 + }, + '132_pl' => { + discipline => 0, + parameterNumber => 3, + typeOfFirstFixedSurface => 100, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 2 + }, + '176_sfc' => { + discipline => 0, + parameterNumber => 9, + typeOfStatisticalProcessing => 1, + typeOfFirstFixedSurface => 1, + parameterCategory => 4 + }, + '133_pl' => { + discipline => 0, + parameterNumber => 0, + typeOfFirstFixedSurface => 100, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 1 + }, + '144_sfc' => { + discipline => 0, + parameterNumber => 55, + typeOfStatisticalProcessing => 1, + typeOfFirstFixedSurface => 1, + parameterCategory => 1 + }, + '60_pt' => { + discipline => 0, + parameterNumber => 14, + typeOfFirstFixedSurface => 107, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 2, + scaledValueOfFirstFixedSurface => 2000000 + }, + '177_sfc' => { + discipline => 0, + parameterNumber => 5, + typeOfStatisticalProcessing => 1, + typeOfFirstFixedSurface => 1, + parameterCategory => 5 + }, + '3_pv' => { + discipline => 0, + parameterNumber => 2, + typeOfFirstFixedSurface => 109, + scaleFactorOfFirstFixedSurface => 6, + parameterCategory => 0, + scaledValueOfFirstFixedSurface => 2 + }, + '131_pv' => { + discipline => 0, + parameterNumber => 2, + typeOfFirstFixedSurface => 109, + scaleFactorOfFirstFixedSurface => 6, + parameterCategory => 2, + scaledValueOfFirstFixedSurface => 2 + }, + '132_pv' => { + discipline => 0, + parameterNumber => 3, + typeOfFirstFixedSurface => 109, + scaleFactorOfFirstFixedSurface => 6, + parameterCategory => 2, + scaledValueOfFirstFixedSurface => 2 + }, + '235_sfc' => { + discipline => 0, + parameterNumber => 17, + typeOfFirstFixedSurface => 1, + parameterCategory => 0 + }, + '59_sfc' => { + typeOfSecondFixedSurface => 8, + discipline => 0, + parameterNumber => 6, + typeOfFirstFixedSurface => 1, + parameterCategory => 7 + }, + '146_sfc' => { + discipline => 0, + parameterNumber => 11, + typeOfStatisticalProcessing => 1, + typeOfFirstFixedSurface => 1, + parameterCategory => 0 + }, + '179_sfc' => { + discipline => 0, + parameterNumber => 5, + typeOfStatisticalProcessing => 1, + typeOfFirstFixedSurface => 8, + parameterCategory => 5 + }, + '164_sfc' => { + typeOfSecondFixedSurface => 8, + discipline => 0, + parameterNumber => 1, + typeOfFirstFixedSurface => 1, + parameterCategory => 6 + }, + '147_sfc' => { + discipline => 0, + parameterNumber => 10, + typeOfStatisticalProcessing => 1, + typeOfFirstFixedSurface => 1, + parameterCategory => 0 + }, + '165_sfc' => { + discipline => 0, + parameterNumber => 2, + typeOfFirstFixedSurface => 103, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 2, + scaledValueOfFirstFixedSurface => 10 + }, + '166_sfc' => { + discipline => 0, + parameterNumber => 3, + typeOfFirstFixedSurface => 103, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 2, + scaledValueOfFirstFixedSurface => 10 + }, + '156_pl' => { + discipline => 0, + parameterNumber => 5, + typeOfFirstFixedSurface => 100, + scaleFactorOfFirstFixedSurface => 0, + parameterCategory => 3 + }, + '151_sfc' => { + discipline => 0, + parameterNumber => 0, + typeOfFirstFixedSurface => 101, + parameterCategory => 3 + } + ); +%NEW_ID = ( + '167.128' => 167, + '176.128' => 176, + '60.128' => 60, + '168.128' => 168, + '144.128' => 144, + '1.228' => 228001, + '177.128' => 177, + '121.128' => 121, + '136.128' => 136, + '130.128' => 130, + '235.128' => 235, + '2.228' => 228002, + '59.128' => 59, + '3.128' => 3, + '172.128' => 172, + '122.128' => 122, + '146.128' => 146, + '131.128' => 131, + '179.128' => 179, + '164.128' => 164, + '147.128' => 147, + '132.128' => 132, + '228.128' => 228, + '156.128' => 156, + '141.128' => 141, + '165.128' => 165, + '189.128' => 189, + '139.128' => 139, + '133.128' => 133, + '166.128' => 166, + '151.128' => 151, + '39.128' => 39, + '134.128' => 134 + ); + +############################################################# + + +my %EQ = ( + '201.128' => '121.128', # MX2T -> MX2T6, for UKMO + '202.128' => '122.128', # MN2T -> MN2T6, for UKMO + '129.128' => '156.128', # Z -> GH, for ECMWF +); + +# Special case for orography + +$GRIB1TO2{"156_sfc"} = $GRIB1TO2{"228002_sfc"}; + +my %MAPPING = ( + param => \%GRIB1TO2, + marsType => { + cf => { + productDefinitionTemplateNumber => 1, + typeOfGeneratingProcess => 4, # To be checked + typeOfEnsembleForecast => 1, # Low-res control forecast +# numberOfForecastsInEnsemble => 51, + typeOfProcessedData => 3, + }, + fc => { + productDefinitionTemplateNumber => 0, + typeOfGeneratingProcess => 2, # To be checked + typeOfProcessedData => 2, + }, + pf => { + productDefinitionTemplateNumber => 1, + typeOfGeneratingProcess => 4, # To be checked + typeOfEnsembleForecast => 3, # Positively perturbed forecast + typeOfProcessedData => 4, + }, + }, +); + + +my %GAUSSIAN; + +die "Usage: $0 in out" unless(@ARGV == 2); +my ($in,$out) = @ARGV; + +open(IN, "<$in" ) or die "$in: $!"; +open(OUT, ">$out") or die "$out: $!"; + +my $g; +my $n = 0; + +while($g = GRIB::API->new(\*IN)) +{ +# print "GRIB $n ...\n"; + + + my %g1; + foreach my $k ( keys %MAPPING ) + { + $g1{$k} = $g->get_string($k); + } + + # my $l = $LEVELS{$g->get_string("levtype")}; + my $l = $g->get_string("levtype"); + my $p = $g1{param}; + + $p = $EQ{$p} if(exists $EQ{$p}); + +unless(exists $NEW_ID{$p}) +{ + system("smslabel","info","No ID for $p"); + die "No ID for $p" +} + $p = $NEW_ID{$p}; + $p = "${p}_${l}"; + $g1{param} = $p; + +# print Dumper(\%g1); + +# Change edition, this should copy lots of things + + + + +# Update missing fields + + my %x = %DEFAULTS; + + foreach my $m ( keys %MAPPING ) + { + + my $e = $MAPPING{$m}; + my $mapping = $e->{$g1{$m}}; + unless($mapping) { + # $g->Dump(\*STDOUT); + system("smslabel","info","No mapping for [$m] [$g1{$m}]"); + die Dumper(\%g1, "No mapping for [$m] [$g1{$m}]") + } + + foreach my $k ( keys %{$mapping} ) + { + $x{$k} = $mapping->{$k} if(defined $mapping->{$k}); + } + + } + + if(exists $x{typeOfStatisticalProcessing}) + { + $x{productDefinitionTemplateNumber} = 8 if($x{productDefinitionTemplateNumber} == 0); + $x{productDefinitionTemplateNumber} = 11 if($x{productDefinitionTemplateNumber} == 1); + } + + $x{editionNumber} = 2; + + if($ukmo) + { + $x{basicAngleOfTheInitialProductionDomain} = 360; + $x{subdivisionsOfBasicAngle} = 864; + $x{iDirectionIncrement} = 3; + $x{jDirectionIncrement} = 2; + + $x{latitudeOfFirstGridPoint} = -216; + $x{latitudeOfLastGridPoint} = 0; + + $x{longitudeOfFirstGridPoint} = 216; + $x{longitudeOfLastGridPoint} = 861; + + if($g1{"param"} =~ /^13(1|2)/) + { + $x{subdivisionsOfBasicAngle} = 1728; + } + } + + + delete $x{forecastTime}; + +# $g->Dump(\*STDOUT); +# print STDERR Dumper(\%x); + + + my ($s,$e) = ($g->get("marsStartStep"),$g->get("marsEndStep")); + + +#if($n == 0) { print '-' x 80, "\n"; $g->Dump(\*STDOUT) ; print '-' x 80, "\n\n"; }; + $g->set_values(\%x) or die Dumper(\%x); ; + +# if($n == 0) { print '+' x 80, "\n"; $g->Dump(\*STDOUT) ; print '+' x 80, "\n\n"; }; + +# $g->Dump(\*STDOUT); + +# Gaussian grid + + if($g->get("gridDefinitionTemplateNumber") == 40) + { + my $n = $g->get("numberOfParallelsBetweenAPoleAndTheEquator"); + unless(exists $GAUSSIAN{$n}) + { + my $x = GRIB::API::get_gaussian_latitudes($n); + $GAUSSIAN{$n} = $x->[0]; + } + my $x = int($GAUSSIAN{$n}*1_000_000); + $g->set_long("latitudeOfFirstGridPoint",$x); + $g->set_long("latitudeOfLastGridPoint",-$x); + + my $y = $g->get_long("latitudeOfFirstGridPoint"); + die if($x != $y); + + } + + my $n = $g->get("numberOfValues"); + die "numberOfValues: $n" unless($n > 0); + + my $n = $g->get("numberOfDataPoints"); + die "numberOfDataPoints: $n" unless($n > 0); + + $g->set("backgroundGeneratingProcessIdentifier",$g->get("generatingProcessIdentifier")); + +#$g->set("lengthOfTheTimeRangeOverWhichStatisticalProcessingIsDone", +# $g->get("marsEndStep")-$g->get("marsStartStep")); + + if(exists $x{typeOfStatisticalProcessing}){ + + if($x{typeOfStatisticalProcessing} eq 1) # some grib1 are badly coded + { + $g->set_long("marsStartStep",0); + $g->set_long("marsEndStep",$e); + } + else + { +# UKMO die "s=$s e=$e" unless($e == $s); +#if($s > 0) +#{ +#$g->set_long("marsStartStep",$s-6); +# $g->set_long("marsEndStep",$s); +#} + } + } + + + + $g->Write(\*OUT) or die "$out: $!"; +#print "... done\n"; + $n++; +} + +close(OUT) or die "$out: $!"; diff --git a/perl/GRIB-API/lib/GRIB/API.pm b/perl/GRIB-API/lib/GRIB/API.pm new file mode 100644 index 000000000..981e85607 --- /dev/null +++ b/perl/GRIB-API/lib/GRIB/API.pm @@ -0,0 +1,97 @@ +package GRIB::API; + +use 5.006001; +use strict; +use warnings; +use Carp; + +require Exporter; +use AutoLoader qw(AUTOLOAD); + +our @ISA = qw(Exporter); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use GRIB::API ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( 'all' => [ qw( + +) ] ); + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw( + +); + +our $VERSION = '0.01'; + +require XSLoader; +XSLoader::load('GRIB::API', $VERSION); + +# Preloaded methods go here. + +sub new { + my ($class,$arg) = @_; + return Read($arg) if(ref($arg) =~ /GLOB/); + return create($arg) if(substr($arg,0,4) =~ /(GRIB|BUDG|TIDE)/); + return template($arg); +} + +# Autoload methods go after =cut, and are processed by the autosplit program. + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +GRIB::API - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use GRIB::API; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for GRIB::API, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Baudouin Raoult, Emab@suse.deE + +=head1 COPYRIGHT AND LICENSE +Copyright 2005-2012 ECMWF. + +This software is licensed under the terms of the Apache Licence Version 2.0 +which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + +In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +=cut diff --git a/perl/GRIB-API/lib/GRIB/API/Debug.pm b/perl/GRIB-API/lib/GRIB/API/Debug.pm new file mode 100644 index 000000000..3cf02dde5 --- /dev/null +++ b/perl/GRIB-API/lib/GRIB/API/Debug.pm @@ -0,0 +1,7 @@ +package GRIB::API::Debug; + +sub DESTROY { + print "GRIB::API::Debug DESTROY called\n"; +} + +1; diff --git a/perl/GRIB-API/lib/GRIB/API/Tie.pm b/perl/GRIB-API/lib/GRIB/API/Tie.pm new file mode 100644 index 000000000..6f05d58f9 --- /dev/null +++ b/perl/GRIB-API/lib/GRIB/API/Tie.pm @@ -0,0 +1,46 @@ +package GRIB::API::Tie; +use Carp; + +sub TIEHASH { + my ($class,$handle) = @_; + bless({handle=>$handle},$class); +} + +sub FETCH { + my ($self,$key) = @_; + return $self->{handle}->get($key); +} + +sub STORE { + my ($self,$key,$value) = @_; + $self->{handle}->set($key,$value) or warn "Cannot set $key to $value"; + delete $self->{keys}; +} + +sub EXISTS { + my ($self,$key) = @_; + die; + return $self->{handle}->get_size($key); +} + +sub CLEAR { + my ($self) = @_; + warn "GRIB::API::Tie::CLEAR ignored"; + +} + +sub FIRSTKEY { + my ($self) = @_; + $self->{keys} = $self->{handle}->get_keys(); + $self->{n} = 0; + $self->{keys}->[$self->{n}++]; +} + +sub NEXTKEY { + my ($self,$last) = @_; + croak "Cannot iterate and modify GRIB at the same time" + unless(exists $self->{keys}); + $self->{keys}->[$self->{n}++]; +} + +1; diff --git a/perl/GRIB-API/ppport.h b/perl/GRIB-API/ppport.h new file mode 100644 index 000000000..cc9f678f2 --- /dev/null +++ b/perl/GRIB-API/ppport.h @@ -0,0 +1,1096 @@ + +/* ppport.h -- Perl/Pollution/Portability Version 2.011 + * + * Automatically Created by Devel::PPPort on Fri Nov 25 13:48:43 2005 + * + * Do NOT edit this file directly! -- Edit PPPort.pm instead. + * + * Version 2.x, Copyright (C) 2001, Paul Marquess. + * Version 1.x, Copyright (C) 1999, Kenneth Albanowski. + * This code may be used and distributed under the same license as any + * version of Perl. + * + * This version of ppport.h is designed to support operation with Perl + * installations back to 5.004, and has been tested up to 5.8.1. + * + * If this version of ppport.h is failing during the compilation of this + * module, please check if a newer version of Devel::PPPort is available + * on CPAN before sending a bug report. + * + * If you are using the latest version of Devel::PPPort and it is failing + * during compilation of this module, please send a report to perlbug@perl.com + * + * Include all following information: + * + * 1. The complete output from running "perl -V" + * + * 2. This file. + * + * 3. The name & version of the module you were trying to build. + * + * 4. A full log of the build that failed. + * + * 5. Any other information that you think could be relevant. + * + * + * For the latest version of this code, please retreive the Devel::PPPort + * module from CPAN. + * + */ + +/* + * In order for a Perl extension module to be as portable as possible + * across differing versions of Perl itself, certain steps need to be taken. + * Including this header is the first major one, then using dTHR is all the + * appropriate places and using a PL_ prefix to refer to global Perl + * variables is the second. + * + */ + + +/* If you use one of a few functions that were not present in earlier + * versions of Perl, please add a define before the inclusion of ppport.h + * for a static include, or use the GLOBAL request in a single module to + * produce a global definition that can be referenced from the other + * modules. + * + * Function: Static define: Extern define: + * newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL + * + */ + + +/* To verify whether ppport.h is needed for your module, and whether any + * special defines should be used, ppport.h can be run through Perl to check + * your source code. Simply say: + * + * perl -x ppport.h *.c *.h *.xs foo/bar*.c [etc] + * + * The result will be a list of patches suggesting changes that should at + * least be acceptable, if not necessarily the most efficient solution, or a + * fix for all possible problems. It won't catch where dTHR is needed, and + * doesn't attempt to account for global macro or function definitions, + * nested includes, typemaps, etc. + * + * In order to test for the need of dTHR, please try your module under a + * recent version of Perl that has threading compiled-in. + * + */ + + +/* +#!/usr/bin/perl +@ARGV = ("*.xs") if !@ARGV; +%badmacros = %funcs = %macros = (); $replace = 0; +foreach () { + $funcs{$1} = 1 if /Provide:\s+(\S+)/; + $macros{$1} = 1 if /^#\s*define\s+([a-zA-Z0-9_]+)/; + $replace = $1 if /Replace:\s+(\d+)/; + $badmacros{$2}=$1 if $replace and /^#\s*define\s+([a-zA-Z0-9_]+).*?\s+([a-zA-Z0-9_]+)/; + $badmacros{$1}=$2 if /Replace (\S+) with (\S+)/; +} +foreach $filename (map(glob($_),@ARGV)) { + unless (open(IN, "<$filename")) { + warn "Unable to read from $file: $!\n"; + next; + } + print "Scanning $filename...\n"; + $c = ""; while () { $c .= $_; } close(IN); + $need_include = 0; %add_func = (); $changes = 0; + $has_include = ($c =~ /#.*include.*ppport/m); + + foreach $func (keys %funcs) { + if ($c =~ /#.*define.*\bNEED_$func(_GLOBAL)?\b/m) { + if ($c !~ /\b$func\b/m) { + print "If $func isn't needed, you don't need to request it.\n" if + $changes += ($c =~ s/^.*#.*define.*\bNEED_$func\b.*\n//m); + } else { + print "Uses $func\n"; + $need_include = 1; + } + } else { + if ($c =~ /\b$func\b/m) { + $add_func{$func} =1 ; + print "Uses $func\n"; + $need_include = 1; + } + } + } + + if (not $need_include) { + foreach $macro (keys %macros) { + if ($c =~ /\b$macro\b/m) { + print "Uses $macro\n"; + $need_include = 1; + } + } + } + + foreach $badmacro (keys %badmacros) { + if ($c =~ /\b$badmacro\b/m) { + $changes += ($c =~ s/\b$badmacro\b/$badmacros{$badmacro}/gm); + print "Uses $badmacros{$badmacro} (instead of $badmacro)\n"; + $need_include = 1; + } + } + + if (scalar(keys %add_func) or $need_include != $has_include) { + if (!$has_include) { + $inc = join('',map("#define NEED_$_\n", sort keys %add_func)). + "#include \"ppport.h\"\n"; + $c = "$inc$c" unless $c =~ s/#.*include.*XSUB.*\n/$&$inc/m; + } elsif (keys %add_func) { + $inc = join('',map("#define NEED_$_\n", sort keys %add_func)); + $c = "$inc$c" unless $c =~ s/^.*#.*include.*ppport.*$/$inc$&/m; + } + if (!$need_include) { + print "Doesn't seem to need ppport.h.\n"; + $c =~ s/^.*#.*include.*ppport.*\n//m; + } + $changes++; + } + + if ($changes) { + open(OUT,">/tmp/ppport.h.$$"); + print OUT $c; + close(OUT); + open(DIFF, "diff -u $filename /tmp/ppport.h.$$|"); + while () { s!/tmp/ppport\.h\.$$!$filename.patched!; print STDOUT; } + close(DIFF); + unlink("/tmp/ppport.h.$$"); + } else { + print "Looks OK\n"; + } +} +__DATA__ +*/ + +#ifndef _P_P_PORTABILITY_H_ +#define _P_P_PORTABILITY_H_ + +#ifndef PERL_REVISION +# ifndef __PATCHLEVEL_H_INCLUDED__ +# define PERL_PATCHLEVEL_H_IMPLICIT +# include +# endif +# if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) +# include +# endif +# ifndef PERL_REVISION +# define PERL_REVISION (5) + /* Replace: 1 */ +# define PERL_VERSION PATCHLEVEL +# define PERL_SUBVERSION SUBVERSION + /* Replace PERL_PATCHLEVEL with PERL_VERSION */ + /* Replace: 0 */ +# endif +#endif + +#define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION) + +/* It is very unlikely that anyone will try to use this with Perl 6 + (or greater), but who knows. + */ +#if PERL_REVISION != 5 +# error ppport.h only works with Perl version 5 +#endif /* PERL_REVISION != 5 */ + +#ifndef ERRSV +# define ERRSV perl_get_sv("@",FALSE) +#endif + +#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5)) +/* Replace: 1 */ +# define PL_Sv Sv +# define PL_compiling compiling +# define PL_copline copline +# define PL_curcop curcop +# define PL_curstash curstash +# define PL_defgv defgv +# define PL_dirty dirty +# define PL_dowarn dowarn +# define PL_hints hints +# define PL_na na +# define PL_perldb perldb +# define PL_rsfp_filters rsfp_filters +# define PL_rsfpv rsfp +# define PL_stdingv stdingv +# define PL_sv_no sv_no +# define PL_sv_undef sv_undef +# define PL_sv_yes sv_yes +/* Replace: 0 */ +#endif + +#ifdef HASATTRIBUTE +# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) +# define PERL_UNUSED_DECL +# else +# define PERL_UNUSED_DECL __attribute__((unused)) +# endif +#else +# define PERL_UNUSED_DECL +#endif + +#ifndef dNOOP +# define NOOP (void)0 +# define dNOOP extern int Perl___notused PERL_UNUSED_DECL +#endif + +#ifndef dTHR +# define dTHR dNOOP +#endif + +#ifndef dTHX +# define dTHX dNOOP +# define dTHXa(x) dNOOP +# define dTHXoa(x) dNOOP +#endif + +#ifndef pTHX +# define pTHX void +# define pTHX_ +# define aTHX +# define aTHX_ +#endif + +#ifndef dAX +# define dAX I32 ax = MARK - PL_stack_base + 1 +#endif +#ifndef dITEMS +# define dITEMS I32 items = SP - MARK +#endif + +/* IV could also be a quad (say, a long long), but Perls + * capable of those should have IVSIZE already. */ +#if !defined(IVSIZE) && defined(LONGSIZE) +# define IVSIZE LONGSIZE +#endif +#ifndef IVSIZE +# define IVSIZE 4 /* A bold guess, but the best we can make. */ +#endif + +#ifndef UVSIZE +# define UVSIZE IVSIZE +#endif + +#ifndef NVTYPE +# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) +# define NVTYPE long double +# else +# define NVTYPE double +# endif +typedef NVTYPE NV; +#endif + +#ifndef INT2PTR + +#if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) +# define PTRV UV +# define INT2PTR(any,d) (any)(d) +#else +# if PTRSIZE == LONGSIZE +# define PTRV unsigned long +# else +# define PTRV unsigned +# endif +# define INT2PTR(any,d) (any)(PTRV)(d) +#endif +#define NUM2PTR(any,d) (any)(PTRV)(d) +#define PTR2IV(p) INT2PTR(IV,p) +#define PTR2UV(p) INT2PTR(UV,p) +#define PTR2NV(p) NUM2PTR(NV,p) +#if PTRSIZE == LONGSIZE +# define PTR2ul(p) (unsigned long)(p) +#else +# define PTR2ul(p) INT2PTR(unsigned long,p) +#endif + +#endif /* !INT2PTR */ + +#ifndef boolSV +# define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) +#endif + +#ifndef gv_stashpvn +# define gv_stashpvn(str,len,flags) gv_stashpv(str,flags) +#endif + +#ifndef newSVpvn +# define newSVpvn(data,len) ((len) ? newSVpv ((data), (len)) : newSVpv ("", 0)) +#endif + +#ifndef newRV_inc +/* Replace: 1 */ +# define newRV_inc(sv) newRV(sv) +/* Replace: 0 */ +#endif + +/* DEFSV appears first in 5.004_56 */ +#ifndef DEFSV +# define DEFSV GvSV(PL_defgv) +#endif + +#ifndef SAVE_DEFSV +# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) +#endif + +#ifndef newRV_noinc +# ifdef __GNUC__ +# define newRV_noinc(sv) \ + ({ \ + SV *nsv = (SV*)newRV(sv); \ + SvREFCNT_dec(sv); \ + nsv; \ + }) +# else +# if defined(USE_THREADS) +static SV * newRV_noinc (SV * sv) +{ + SV *nsv = (SV*)newRV(sv); + SvREFCNT_dec(sv); + return nsv; +} +# else +# define newRV_noinc(sv) \ + (PL_Sv=(SV*)newRV(sv), SvREFCNT_dec(sv), (SV*)PL_Sv) +# endif +# endif +#endif + +/* Provide: newCONSTSUB */ + +/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ +#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 63)) + +#if defined(NEED_newCONSTSUB) +static +#else +extern void newCONSTSUB(HV * stash, char * name, SV *sv); +#endif + +#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) +void +newCONSTSUB(stash,name,sv) +HV *stash; +char *name; +SV *sv; +{ + U32 oldhints = PL_hints; + HV *old_cop_stash = PL_curcop->cop_stash; + HV *old_curstash = PL_curstash; + line_t oldline = PL_curcop->cop_line; + PL_curcop->cop_line = PL_copline; + + PL_hints &= ~HINT_BLOCK_SCOPE; + if (stash) + PL_curstash = PL_curcop->cop_stash = stash; + + newSUB( + +#if (PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22)) + /* before 5.003_22 */ + start_subparse(), +#else +# if (PERL_VERSION == 3) && (PERL_SUBVERSION == 22) + /* 5.003_22 */ + start_subparse(0), +# else + /* 5.003_23 onwards */ + start_subparse(FALSE, 0), +# endif +#endif + + newSVOP(OP_CONST, 0, newSVpv(name,0)), + newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ + newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) + ); + + PL_hints = oldhints; + PL_curcop->cop_stash = old_cop_stash; + PL_curstash = old_curstash; + PL_curcop->cop_line = oldline; +} +#endif + +#endif /* newCONSTSUB */ + +#ifndef START_MY_CXT + +/* + * Boilerplate macros for initializing and accessing interpreter-local + * data from C. All statics in extensions should be reworked to use + * this, if you want to make the extension thread-safe. See ext/re/re.xs + * for an example of the use of these macros. + * + * Code that uses these macros is responsible for the following: + * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" + * 2. Declare a typedef named my_cxt_t that is a structure that contains + * all the data that needs to be interpreter-local. + * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. + * 4. Use the MY_CXT_INIT macro such that it is called exactly once + * (typically put in the BOOT: section). + * 5. Use the members of the my_cxt_t structure everywhere as + * MY_CXT.member. + * 6. Use the dMY_CXT macro (a declaration) in all the functions that + * access MY_CXT. + */ + +#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ + defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) + +/* This must appear in all extensions that define a my_cxt_t structure, + * right after the definition (i.e. at file scope). The non-threads + * case below uses it to declare the data as static. */ +#define START_MY_CXT + +#if (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION < 68 )) +/* Fetches the SV that keeps the per-interpreter data. */ +#define dMY_CXT_SV \ + SV *my_cxt_sv = perl_get_sv(MY_CXT_KEY, FALSE) +#else /* >= perl5.004_68 */ +#define dMY_CXT_SV \ + SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ + sizeof(MY_CXT_KEY)-1, TRUE) +#endif /* < perl5.004_68 */ + +/* This declaration should be used within all functions that use the + * interpreter-local data. */ +#define dMY_CXT \ + dMY_CXT_SV; \ + my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) + +/* Creates and zeroes the per-interpreter data. + * (We allocate my_cxtp in a Perl SV so that it will be released when + * the interpreter goes away.) */ +#define MY_CXT_INIT \ + dMY_CXT_SV; \ + /* newSV() allocates one more than needed */ \ + my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ + Zero(my_cxtp, 1, my_cxt_t); \ + sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) + +/* This macro must be used to access members of the my_cxt_t structure. + * e.g. MYCXT.some_data */ +#define MY_CXT (*my_cxtp) + +/* Judicious use of these macros can reduce the number of times dMY_CXT + * is used. Use is similar to pTHX, aTHX etc. */ +#define pMY_CXT my_cxt_t *my_cxtp +#define pMY_CXT_ pMY_CXT, +#define _pMY_CXT ,pMY_CXT +#define aMY_CXT my_cxtp +#define aMY_CXT_ aMY_CXT, +#define _aMY_CXT ,aMY_CXT + +#else /* single interpreter */ + +#define START_MY_CXT static my_cxt_t my_cxt; +#define dMY_CXT_SV dNOOP +#define dMY_CXT dNOOP +#define MY_CXT_INIT NOOP +#define MY_CXT my_cxt + +#define pMY_CXT void +#define pMY_CXT_ +#define _pMY_CXT +#define aMY_CXT +#define aMY_CXT_ +#define _aMY_CXT + +#endif + +#endif /* START_MY_CXT */ + +#ifndef IVdf +# if IVSIZE == LONGSIZE +# define IVdf "ld" +# define UVuf "lu" +# define UVof "lo" +# define UVxf "lx" +# define UVXf "lX" +# else +# if IVSIZE == INTSIZE +# define IVdf "d" +# define UVuf "u" +# define UVof "o" +# define UVxf "x" +# define UVXf "X" +# endif +# endif +#endif + +#ifndef NVef +# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ + defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */ +# define NVef PERL_PRIeldbl +# define NVff PERL_PRIfldbl +# define NVgf PERL_PRIgldbl +# else +# define NVef "e" +# define NVff "f" +# define NVgf "g" +# endif +#endif + +#ifndef AvFILLp /* Older perls (<=5.003) lack AvFILLp */ +# define AvFILLp AvFILL +#endif + +#ifdef SvPVbyte +# if PERL_REVISION == 5 && PERL_VERSION < 7 + /* SvPVbyte does not work in perl-5.6.1, borrowed version for 5.7.3 */ +# undef SvPVbyte +# define SvPVbyte(sv, lp) \ + ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ + ? ((lp = SvCUR(sv)), SvPVX(sv)) : my_sv_2pvbyte(aTHX_ sv, &lp)) + static char * + my_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp) + { + sv_utf8_downgrade(sv,0); + return SvPV(sv,*lp); + } +# endif +#else +# define SvPVbyte SvPV +#endif + +#ifndef SvPV_nolen +# define SvPV_nolen(sv) \ + ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ + ? SvPVX(sv) : sv_2pv_nolen(sv)) + static char * + sv_2pv_nolen(pTHX_ register SV *sv) + { + STRLEN n_a; + return sv_2pv(sv, &n_a); + } +#endif + +#ifndef get_cv +# define get_cv(name,create) perl_get_cv(name,create) +#endif + +#ifndef get_sv +# define get_sv(name,create) perl_get_sv(name,create) +#endif + +#ifndef get_av +# define get_av(name,create) perl_get_av(name,create) +#endif + +#ifndef get_hv +# define get_hv(name,create) perl_get_hv(name,create) +#endif + +#ifndef call_argv +# define call_argv perl_call_argv +#endif + +#ifndef call_method +# define call_method perl_call_method +#endif + +#ifndef call_pv +# define call_pv perl_call_pv +#endif + +#ifndef call_sv +# define call_sv perl_call_sv +#endif + +#ifndef eval_pv +# define eval_pv perl_eval_pv +#endif + +#ifndef eval_sv +# define eval_sv perl_eval_sv +#endif + +#ifndef PERL_SCAN_GREATER_THAN_UV_MAX +# define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 +#endif + +#ifndef PERL_SCAN_SILENT_ILLDIGIT +# define PERL_SCAN_SILENT_ILLDIGIT 0x04 +#endif + +#ifndef PERL_SCAN_ALLOW_UNDERSCORES +# define PERL_SCAN_ALLOW_UNDERSCORES 0x01 +#endif + +#ifndef PERL_SCAN_DISALLOW_PREFIX +# define PERL_SCAN_DISALLOW_PREFIX 0x02 +#endif + +#if (PERL_VERSION > 6) || ((PERL_VERSION == 6) && (PERL_SUBVERSION >= 1)) +#define I32_CAST +#else +#define I32_CAST (I32*) +#endif + +#ifndef grok_hex +static UV _grok_hex (char *string, STRLEN *len, I32 *flags, NV *result) { + NV r = scan_hex(string, *len, I32_CAST len); + if (r > UV_MAX) { + *flags |= PERL_SCAN_GREATER_THAN_UV_MAX; + if (result) *result = r; + return UV_MAX; + } + return (UV)r; +} + +# define grok_hex(string, len, flags, result) \ + _grok_hex((string), (len), (flags), (result)) +#endif + +#ifndef grok_oct +static UV _grok_oct (char *string, STRLEN *len, I32 *flags, NV *result) { + NV r = scan_oct(string, *len, I32_CAST len); + if (r > UV_MAX) { + *flags |= PERL_SCAN_GREATER_THAN_UV_MAX; + if (result) *result = r; + return UV_MAX; + } + return (UV)r; +} + +# define grok_oct(string, len, flags, result) \ + _grok_oct((string), (len), (flags), (result)) +#endif + +#if !defined(grok_bin) && defined(scan_bin) +static UV _grok_bin (char *string, STRLEN *len, I32 *flags, NV *result) { + NV r = scan_bin(string, *len, I32_CAST len); + if (r > UV_MAX) { + *flags |= PERL_SCAN_GREATER_THAN_UV_MAX; + if (result) *result = r; + return UV_MAX; + } + return (UV)r; +} + +# define grok_bin(string, len, flags, result) \ + _grok_bin((string), (len), (flags), (result)) +#endif + +#ifndef IN_LOCALE +# define IN_LOCALE \ + (PL_curcop == &PL_compiling ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) +#endif + +#ifndef IN_LOCALE_RUNTIME +# define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) +#endif + +#ifndef IN_LOCALE_COMPILETIME +# define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) +#endif + + +#ifndef IS_NUMBER_IN_UV +# define IS_NUMBER_IN_UV 0x01 +# define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 +# define IS_NUMBER_NOT_INT 0x04 +# define IS_NUMBER_NEG 0x08 +# define IS_NUMBER_INFINITY 0x10 +# define IS_NUMBER_NAN 0x20 +#endif + +#ifndef grok_numeric_radix +# define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(aTHX_ sp, send) + +#define grok_numeric_radix Perl_grok_numeric_radix + +bool +Perl_grok_numeric_radix(pTHX_ const char **sp, const char *send) +{ +#ifdef USE_LOCALE_NUMERIC +#if (PERL_VERSION > 6) || ((PERL_VERSION == 6) && (PERL_SUBVERSION >= 1)) + if (PL_numeric_radix_sv && IN_LOCALE) { + STRLEN len; + char* radix = SvPV(PL_numeric_radix_sv, len); + if (*sp + len <= send && memEQ(*sp, radix, len)) { + *sp += len; + return TRUE; + } + } +#else + /* pre5.6.0 perls don't have PL_numeric_radix_sv so the radix + * must manually be requested from locale.h */ +#include + struct lconv *lc = localeconv(); + char *radix = lc->decimal_point; + if (radix && IN_LOCALE) { + STRLEN len = strlen(radix); + if (*sp + len <= send && memEQ(*sp, radix, len)) { + *sp += len; + return TRUE; + } + } +#endif /* PERL_VERSION */ +#endif /* USE_LOCALE_NUMERIC */ + /* always try "." if numeric radix didn't match because + * we may have data from different locales mixed */ + if (*sp < send && **sp == '.') { + ++*sp; + return TRUE; + } + return FALSE; +} +#endif /* grok_numeric_radix */ + +#ifndef grok_number + +#define grok_number Perl_grok_number + +int +Perl_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep) +{ + const char *s = pv; + const char *send = pv + len; + const UV max_div_10 = UV_MAX / 10; + const char max_mod_10 = UV_MAX % 10; + int numtype = 0; + int sawinf = 0; + int sawnan = 0; + + while (s < send && isSPACE(*s)) + s++; + if (s == send) { + return 0; + } else if (*s == '-') { + s++; + numtype = IS_NUMBER_NEG; + } + else if (*s == '+') + s++; + + if (s == send) + return 0; + + /* next must be digit or the radix separator or beginning of infinity */ + if (isDIGIT(*s)) { + /* UVs are at least 32 bits, so the first 9 decimal digits cannot + overflow. */ + UV value = *s - '0'; + /* This construction seems to be more optimiser friendly. + (without it gcc does the isDIGIT test and the *s - '0' separately) + With it gcc on arm is managing 6 instructions (6 cycles) per digit. + In theory the optimiser could deduce how far to unroll the loop + before checking for overflow. */ + if (++s < send) { + int digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + digit = *s - '0'; + if (digit >= 0 && digit <= 9) { + value = value * 10 + digit; + if (++s < send) { + /* Now got 9 digits, so need to check + each time for overflow. */ + digit = *s - '0'; + while (digit >= 0 && digit <= 9 + && (value < max_div_10 + || (value == max_div_10 + && digit <= max_mod_10))) { + value = value * 10 + digit; + if (++s < send) + digit = *s - '0'; + else + break; + } + if (digit >= 0 && digit <= 9 + && (s < send)) { + /* value overflowed. + skip the remaining digits, don't + worry about setting *valuep. */ + do { + s++; + } while (s < send && isDIGIT(*s)); + numtype |= + IS_NUMBER_GREATER_THAN_UV_MAX; + goto skip_value; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + numtype |= IS_NUMBER_IN_UV; + if (valuep) + *valuep = value; + + skip_value: + if (GROK_NUMERIC_RADIX(&s, send)) { + numtype |= IS_NUMBER_NOT_INT; + while (s < send && isDIGIT(*s)) /* optional digits after the radix */ + s++; + } + } + else if (GROK_NUMERIC_RADIX(&s, send)) { + numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */ + /* no digits before the radix means we need digits after it */ + if (s < send && isDIGIT(*s)) { + do { + s++; + } while (s < send && isDIGIT(*s)); + if (valuep) { + /* integer approximation is valid - it's 0. */ + *valuep = 0; + } + } + else + return 0; + } else if (*s == 'I' || *s == 'i') { + s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; + s++; if (s == send || (*s != 'F' && *s != 'f')) return 0; + s++; if (s < send && (*s == 'I' || *s == 'i')) { + s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; + s++; if (s == send || (*s != 'I' && *s != 'i')) return 0; + s++; if (s == send || (*s != 'T' && *s != 't')) return 0; + s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0; + s++; + } + sawinf = 1; + } else if (*s == 'N' || *s == 'n') { + /* XXX TODO: There are signaling NaNs and quiet NaNs. */ + s++; if (s == send || (*s != 'A' && *s != 'a')) return 0; + s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; + s++; + sawnan = 1; + } else + return 0; + + if (sawinf) { + numtype &= IS_NUMBER_NEG; /* Keep track of sign */ + numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; + } else if (sawnan) { + numtype &= IS_NUMBER_NEG; /* Keep track of sign */ + numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; + } else if (s < send) { + /* we can have an optional exponent part */ + if (*s == 'e' || *s == 'E') { + /* The only flag we keep is sign. Blow away any "it's UV" */ + numtype &= IS_NUMBER_NEG; + numtype |= IS_NUMBER_NOT_INT; + s++; + if (s < send && (*s == '-' || *s == '+')) + s++; + if (s < send && isDIGIT(*s)) { + do { + s++; + } while (s < send && isDIGIT(*s)); + } + else + return 0; + } + } + while (s < send && isSPACE(*s)) + s++; + if (s >= send) + return numtype; + if (len == 10 && memEQ(pv, "0 but true", 10)) { + if (valuep) + *valuep = 0; + return IS_NUMBER_IN_UV; + } + return 0; +} +#endif /* grok_number */ + +#ifndef PERL_MAGIC_sv +# define PERL_MAGIC_sv '\0' +#endif + +#ifndef PERL_MAGIC_overload +# define PERL_MAGIC_overload 'A' +#endif + +#ifndef PERL_MAGIC_overload_elem +# define PERL_MAGIC_overload_elem 'a' +#endif + +#ifndef PERL_MAGIC_overload_table +# define PERL_MAGIC_overload_table 'c' +#endif + +#ifndef PERL_MAGIC_bm +# define PERL_MAGIC_bm 'B' +#endif + +#ifndef PERL_MAGIC_regdata +# define PERL_MAGIC_regdata 'D' +#endif + +#ifndef PERL_MAGIC_regdatum +# define PERL_MAGIC_regdatum 'd' +#endif + +#ifndef PERL_MAGIC_env +# define PERL_MAGIC_env 'E' +#endif + +#ifndef PERL_MAGIC_envelem +# define PERL_MAGIC_envelem 'e' +#endif + +#ifndef PERL_MAGIC_fm +# define PERL_MAGIC_fm 'f' +#endif + +#ifndef PERL_MAGIC_regex_global +# define PERL_MAGIC_regex_global 'g' +#endif + +#ifndef PERL_MAGIC_isa +# define PERL_MAGIC_isa 'I' +#endif + +#ifndef PERL_MAGIC_isaelem +# define PERL_MAGIC_isaelem 'i' +#endif + +#ifndef PERL_MAGIC_nkeys +# define PERL_MAGIC_nkeys 'k' +#endif + +#ifndef PERL_MAGIC_dbfile +# define PERL_MAGIC_dbfile 'L' +#endif + +#ifndef PERL_MAGIC_dbline +# define PERL_MAGIC_dbline 'l' +#endif + +#ifndef PERL_MAGIC_mutex +# define PERL_MAGIC_mutex 'm' +#endif + +#ifndef PERL_MAGIC_shared +# define PERL_MAGIC_shared 'N' +#endif + +#ifndef PERL_MAGIC_shared_scalar +# define PERL_MAGIC_shared_scalar 'n' +#endif + +#ifndef PERL_MAGIC_collxfrm +# define PERL_MAGIC_collxfrm 'o' +#endif + +#ifndef PERL_MAGIC_tied +# define PERL_MAGIC_tied 'P' +#endif + +#ifndef PERL_MAGIC_tiedelem +# define PERL_MAGIC_tiedelem 'p' +#endif + +#ifndef PERL_MAGIC_tiedscalar +# define PERL_MAGIC_tiedscalar 'q' +#endif + +#ifndef PERL_MAGIC_qr +# define PERL_MAGIC_qr 'r' +#endif + +#ifndef PERL_MAGIC_sig +# define PERL_MAGIC_sig 'S' +#endif + +#ifndef PERL_MAGIC_sigelem +# define PERL_MAGIC_sigelem 's' +#endif + +#ifndef PERL_MAGIC_taint +# define PERL_MAGIC_taint 't' +#endif + +#ifndef PERL_MAGIC_uvar +# define PERL_MAGIC_uvar 'U' +#endif + +#ifndef PERL_MAGIC_uvar_elem +# define PERL_MAGIC_uvar_elem 'u' +#endif + +#ifndef PERL_MAGIC_vstring +# define PERL_MAGIC_vstring 'V' +#endif + +#ifndef PERL_MAGIC_vec +# define PERL_MAGIC_vec 'v' +#endif + +#ifndef PERL_MAGIC_utf8 +# define PERL_MAGIC_utf8 'w' +#endif + +#ifndef PERL_MAGIC_substr +# define PERL_MAGIC_substr 'x' +#endif + +#ifndef PERL_MAGIC_defelem +# define PERL_MAGIC_defelem 'y' +#endif + +#ifndef PERL_MAGIC_glob +# define PERL_MAGIC_glob '*' +#endif + +#ifndef PERL_MAGIC_arylen +# define PERL_MAGIC_arylen '#' +#endif + +#ifndef PERL_MAGIC_pos +# define PERL_MAGIC_pos '.' +#endif + +#ifndef PERL_MAGIC_backref +# define PERL_MAGIC_backref '<' +#endif + +#ifndef PERL_MAGIC_ext +# define PERL_MAGIC_ext '~' +#endif + +#endif /* _P_P_PORTABILITY_H_ */ + +/* End of File ppport.h */ diff --git a/perl/GRIB-API/t/GRIB-API.t b/perl/GRIB-API/t/GRIB-API.t new file mode 100644 index 000000000..58130ff51 --- /dev/null +++ b/perl/GRIB-API/t/GRIB-API.t @@ -0,0 +1,27 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl GRIB-API.t' + +######################### + +# change 'tests => 1' to 'tests => last_test_to_print'; + +use Test::More tests => 1; +BEGIN { use_ok('GRIB::API') }; + +######################### + +# Insert your test code below, the Test::More module is use()ed here so read +# its man page ( perldoc Test::More ) for help writing this test script. + +use Data::Dumper; + +ok(test1()); + +sub test1 { +print "here\n"; + +open(IN,"new(\*IN)) +{ + my @x = $x->get_keys("mars"); + print "@x\n"; +} + +__END__ + +autoflush STDOUT 1; + +unless( -f "data.grib") +{ + open(MARS,"|mars"); + print MARS "ret,tar=data.grib,level=500,grid=5/5,area=e\n"; + close(MARS); +} + +#GRIB::API::debug(); + + +{ + print Dumper($x->get_long("date")); + print Dumper($x->get_long("foo")); + print Dumper($x->get_double("class")); + print Dumper($x->get_string("class")); + print Dumper($x->get_string("expver")); + print "set ", Dumper($x->set_long("date",20050101)); + + + print Dumper($x->get_long("date")); + $x->set_string("class","rd") or die; + $x->set_string("klass","rd") or warn; + print Dumper($x->get_string("class")); + + my $class = "xxxx"; + print Dumper([$class=$x->get_bytes("expver"),$class]); + + my $class = "xxxx"; + print Dumper([$class=$x->get_bytes("expver"),$class]); + + $class = pack "L" , 0x41414141; + print Dumper([$class]); + $x->set_bytes("expver",$class) or warn; + print Dumper($x->get_string("expver")); + + print Dumper($x->get_size("values")); + my @x = $x->get_double_array("values"); + print scalar(@x),"\n"; + my $t = $x->get_double_array("values"); + print ref($t),"\n"; + +if(1) { + foreach my $t ( @x ) { $t *= 2; } + $x->set_double_array("values",\@x) or die; + my @y = $x->get_double_array("values"); + + my $i = 0; + foreach my $t ( @x ) + { + my $x = ($t - $y[$i])/($t?$t:1); + $x = -$x if($x<0); + die "$t $y[$i] $x" if($x > 1e6); + $i++; + } +} + + + my $i = $x->iterator(); + print "iterator $i\n"; + if($i) + { + while( ($lat,$lon,$value) = $i->next()) + { + print "($lat,$lon,$value)\n"; + } + } + + + @x = $x->get_keys(); + print Dumper(\@x); + + open(OUT,">foo"); + $x->Write(\*OUT); + close(OUT); + + + my %x; + tie %x, "GRIB::API::Tie",$x; + print "--- ",$x{class},"\n"; + $x{class} = "e4"; + print "--- ",$x{class},"\n"; + $x{class} = 1; + print "--- ",$x{class},"\n"; + + + foreach my $z ( keys %x ) + { + print "$z = [$x{$z}]\n" ; + print " size=[", $x->get_size($z),"] type=[", $x->get_type($z), "] class=[" , $x->get_accessor_class($z), "]\n"; + ;#unless($z =~ /grib(\w+)?section_?\d/i); + } + + $r = $x->get("values"); + print $r,"\n"; + $r = undef; + + + print Dumper(\%x); + + my $y= GRIB::API::create("GRIB\0\0\0\1" . "\0" x 400000); + my %y; + tie %y, "GRIB::API::Tie",$y; + + #%y = %x; +# print Dumper(\%y); +} diff --git a/perl/GRIB-API/typemap b/perl/GRIB-API/typemap new file mode 100644 index 000000000..6254cb227 --- /dev/null +++ b/perl/GRIB-API/typemap @@ -0,0 +1,2 @@ +GRIB::API T_PTROBJ +GRIB::API::Iterator T_PTROBJ diff --git a/perl/Makefile.am b/perl/Makefile.am new file mode 100644 index 000000000..8db8c7b88 --- /dev/null +++ b/perl/Makefile.am @@ -0,0 +1,39 @@ + +API_DIR=GRIB-API +PERLMAKEMAKER=$(API_DIR)/Makefile.PL +PERLMAKEFILE=$(API_DIR)/Makefile +PERLLIB=$(API_DIR)/blib/arch/auto/GRIB/API/API.so + +dist-hook: + ( cd $(API_DIR) && \ + cat MANIFEST \ + | cpio -pdum $(distdir)/$(API_DIR) 2> /dev/null ; ) + +all-local: all-perl + +all-perl: $(PERLLIB) + +$(PERLMAKEFILE): $(PERLMAKEMAKER) + cd $(API_DIR) && @PERL@ Makefile.PL @PERL_INSTALL_OPTIONS@ @PERL_MAKE_OPTIONS@ @PERL_LD_OPTIONS@ + +$(PERLLIB): $(PERLMAKEFILE) $(top_builddir)/src/libgrib_api.a + cd $(API_DIR) && $(MAKE) + +$(top_builddir)/src/libgrib_api.a: $(top_builddir)/src/Makefile + cd $(top_builddir)/src && $(MAKE) + +install-exec-perl: $(PERLMAKEFILE) + cd $(API_DIR) && $(MAKE) install && $(MAKE) clean + +install-exec-am:install-exec-perl + +check-perl: $(PERLMAKEFILE) + cd $(API_DIR) && $(MAKE) test + +clean-perl: $(PERLMAKEFILE) + cd $(API_DIR) && \ + $(MAKE) clean && \ + rm -f Makefile.old + +distclean-perl: clean-perl +clean: clean-perl diff --git a/perl/README b/perl/README new file mode 100644 index 000000000..6cfe17d5c --- /dev/null +++ b/perl/README @@ -0,0 +1,20 @@ +Batti: + +cd grib_api/main/perl/GRIB-API +perl56 Makefile.PL +make + +./test.pl +./create.pl +xdiff data.grib copy.grib +~emos/bin/linux/compareGribFiles data.grib copy.grib + +mars +ret,targ="data.grib",level=1,levtype=ml + + +./create.pl +xdiff *.dump + +(cannot set "pv") + diff --git a/project_summary.cmake b/project_summary.cmake new file mode 100644 index 000000000..36fcb7c20 --- /dev/null +++ b/project_summary.cmake @@ -0,0 +1,10 @@ +if( SWIG_FOUND ) + message( STATUS " SWIG command : [${SWIG_EXECUTABLE}]" ) +endif() + +if(CMATH_FOUND) + message( STATUS " CMath libs : [${CMATH_LIBRARIES}]" ) +endif() + + + diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt new file mode 100644 index 000000000..ad26abd7a --- /dev/null +++ b/python/CMakeLists.txt @@ -0,0 +1,65 @@ +# check for Numpy + +if(PYTHON_EXECUTABLE) + + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/numpy_path.py "try: import numpy; print numpy.get_include()\nexcept: pass\n") + exec_program( ${PYTHON_EXECUTABLE} + ARGS "\"${CMAKE_CURRENT_BINARY_DIR}/determineNumpyPath.py\"" + OUTPUT_VARIABLE NUMPY_PATH + ) +endif() + +find_path( PYTHON_NUMPY_INCLUDE_DIR arrayobject.h + "${NUMPY_PATH}/numpy/" + "${PYTHON_INCLUDE_PATH}/numpy/" + /usr/include/python2.6/numpy/ + /usr/include/python2.5/numpy/ + /usr/include/python2.4/numpy/ + /usr/include/python2.3/numpy/ + DOC "Directory where the arrayobject.h header file can be found. This file is part of the numpy package" +) + +if( PYTHON_NUMPY_INCLUDE_DIR ) + set(PYTHON_NUMPY_FOUND 1 CACHE INTERNAL "Python numpy development package is available") +endif() + +############################################################################### +# swig python interface + +if( GRIB_API_PYTHON AND SWIG_FOUND AND PYTHONLIBS_FOUND ) + + # preparing for generating setup.py + + if( PYTHON_NUMPY_FOUND ) + set( DATA_HANDLER "numpy" ) + else() + set( DATA_HANDLER "array" ) + endif() + + if( PNG_LIBRARIES ) + set( LIB_PNG "${PNG_LIBRARIES}" ) + else() + set( LIB_PNG "" ) + endif() + + include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) + + # do the smae for JASPER and OPENJPEG + + configure_file( setup.py.in setup.py ) + + set(CMAKE_SWIG_FLAGS "") + + include_directories( ${PYTHON_INCLUDE_PATH} ) + + set_source_files_properties( gribapi_swig.i PROPERTIES C ON ) + + swig_add_module( gribapi_swig python gribapi_swig.i ) + + swig_link_libraries( gribapi_swig grib_api ${PYTHON_LIBRARIES} ) + + set(PYTHON_DEST "lib/python${PYTHON_VERSION}/site-packages" ) + install(TARGETS _gribapi_swig DESTINATION ${PYTHON_DEST} ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gribapi_swig.py DESTINATION ${PYTHON_DEST}) + +endif() diff --git a/python/Makefile.am b/python/Makefile.am new file mode 100644 index 000000000..282559050 --- /dev/null +++ b/python/Makefile.am @@ -0,0 +1,109 @@ +if WITH_PYTHON + +if CREATING_SHARED_LIBS +############################################################################### +# Case when shared libraries are enabled +############################################################################### +pkgpyexec_LTLIBRARIES = _gribapi_swig.la + +_gribapi_swig_la_SOURCES = gribapi_swig_wrap.c grib_interface.c grib_interface.h +_gribapi_swig_la_LIBADD = $(top_builddir)/src/libgrib_api.la $(PYTHON_LIBS) +_gribapi_swig_la_LDFLAGS = -module -avoid-version $(PYTHON_LDFLAGS) + +INCLUDES = $(PYTHON_INCLUDES) -I$(NUMPY_INCLUDE) + +gribapi_swig_wrap.c: swig_wrap_$(PYTHON_DATA_HANDLER).c + cp -f swig_wrap_$(PYTHON_DATA_HANDLER).c gribapi_swig_wrap.c + +gribapi_swig.py: swig_wrap_$(PYTHON_DATA_HANDLER).py + cp -f swig_wrap_$(PYTHON_DATA_HANDLER).py gribapi_swig.py + +# Extra stuff to go into the distribution +EXTRA_DIST = grib_interface.h \ + grib_interface.c \ + gribapi_swig.i \ + gribapi.py \ + numpy.i \ + grib_errors.h \ + extrules.am \ + dummy.am \ + swig_wrap_array.c \ + swig_wrap_numpy.c \ + swig_wrap_array.py \ + swig_wrap_numpy.py + +# What else I want installed +pkgpyexec_DATA = \ + gribapi.py \ + gribapi_swig.py + +CLEANFILES = \ + gribapi_swig_wrap.c \ + gribapi_swig.py \ + _gribapi_swig.la + +include $(DEVEL_RULES) + +else +############################################################################### +# When shared libraries are disabled. +# Uses the static library so must have --with-pic +############################################################################### +noinst_SCRIPTS = setup.py + +CLEANFILES = $(noinst_SCRIPTS) \ + gribapi_swig_wrap.c \ + gribapi_swig.py \ + _gribapi_swig.so + +# Extra stuff to go into the distribution +EXTRA_DIST = setup.py.in \ + grib_interface.h \ + grib_interface.c \ + gribapi_swig.i \ + gribapi.py \ + numpy.i \ + grib_errors.h \ + extrules.am \ + dummy.am \ + swig_wrap_array.c \ + swig_wrap_numpy.c \ + swig_wrap_array.py \ + swig_wrap_numpy.py + +# What I want installed +pdir = $(libdir)/python$(PYTHON_VERSION)/site-packages/grib_api +p_DATA = \ + _gribapi_swig.so \ + gribapi.py \ + gribapi_swig.py + +do_subst = sed -e 's,[@]LIB_JASPER[@],$(LIB_JASPER),g' \ + -e 's,[@]JASPER_DIR[@],$(JASPER_DIR),g' \ + -e 's,[@]LIB_OPENJPEG[@],$(LIB_OPENJPEG),g' \ + -e 's,[@]OPENJPEG_DIR[@],$(OPENJPEG_DIR),g' \ + -e 's,[@]LIB_PNG[@],$(LIB_PNG),g' \ + -e 's,[@]BUILD_DIR[@],$(top_builddir),g' \ + -e 's,[@]DATA_HANDLER[@],$(PYTHON_DATA_HANDLER),g' + +clean-local: + -rm -rf build + +setup.py: setup.py.in + $(do_subst) < setup.py.in > setup.py + +gribapi_swig_wrap.c: swig_wrap_$(PYTHON_DATA_HANDLER).c + cp -f swig_wrap_$(PYTHON_DATA_HANDLER).c gribapi_swig_wrap.c + +gribapi_swig.py: swig_wrap_$(PYTHON_DATA_HANDLER).py + cp -f swig_wrap_$(PYTHON_DATA_HANDLER).py gribapi_swig.py + +_gribapi_swig.so: setup.py gribapi_swig_wrap.c gribapi_swig.py + $(PYTHON) setup.py build_ext --inplace + +include $(DEVEL_RULES) + +endif + +endif + diff --git a/python/README b/python/README new file mode 100755 index 000000000..fb798bc9d --- /dev/null +++ b/python/README @@ -0,0 +1,24 @@ +GRIB API Python bindings + +In order to enable the Python bindings in the build, +use the --enable-python configure flag. + +./configure --enable-python + +This will enable the build of the Python bindings with +NumPy support enabled. Python needs to be in the path +and, of course, the NumPy package installed. + +To build the Python bindings without NumPy support, use +the --disable-numpy configure flag. This will result in +Python array objects being used for data handling. + +On 'make install', the Python bindings will be installed under +'${GRIBAPI_install_dir}/lib/pythonX.X/site-packages/grib_api', +where X.X is the version of python used to build the bindings. +Add this folder to your PYTHONPATH and you are ready to go. + +For more information on the Python bindings, please visit our +website at: + +http://www.ecmwf.int/publications/manuals/grib_api/ diff --git a/python/compare_iterator_values.sh b/python/compare_iterator_values.sh new file mode 100755 index 000000000..2ff92c655 --- /dev/null +++ b/python/compare_iterator_values.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +for file in ../data/*.grib?; do + ./test_iterator.py $file > temp1 + ../examples/C/iterator $file > temp2 + + diff temp1 temp2 >& /dev/null + + if [[ $? == 0 ]]; then + echo "$file --- OK" + else + echo "$file --- WRONG" + basename=`basename $file` + cp temp1 ${basename}_iterator_slave + cp temp2 ${basename}_iterator_master + fi +done + +rm -f temp1 temp2 diff --git a/python/dummy.am b/python/dummy.am new file mode 100644 index 000000000..e69de29bb diff --git a/python/extrules.am b/python/extrules.am new file mode 100644 index 000000000..0b81577b9 --- /dev/null +++ b/python/extrules.am @@ -0,0 +1,8 @@ +swig : gribapi_swig.i + p4 edit swig_wrap_numpy.c swig_wrap_numpy.py swig_wrap_array.c swig_wrap_array.py + + swig -python -module gribapi_swig -DNUMPY -o swig_wrap_numpy.c gribapi_swig.i + cp gribapi_swig.py swig_wrap_numpy.py + + swig -python -module gribapi_swig -o swig_wrap_array.c gribapi_swig.i + cp gribapi_swig.py swig_wrap_array.py diff --git a/python/grib_errors.h b/python/grib_errors.h new file mode 100644 index 000000000..b37479067 --- /dev/null +++ b/python/grib_errors.h @@ -0,0 +1,121 @@ +/* This part is automatically generated by ./errors.pl, do not edit */ +#ifndef grib_errors_H +#define grib_errors_H +/*! \defgroup errors Error codes +Error codes returned by the grib_api functions. +*/ +/*! @{*/ +/** No error */ +#define GRIB_SUCCESS 0 +/** End of resource reached */ +#define GRIB_END_OF_FILE -1 +/** Internal error */ +#define GRIB_INTERNAL_ERROR -2 +/** Passed buffer is too small */ +#define GRIB_BUFFER_TOO_SMALL -3 +/** Function not yet implemented */ +#define GRIB_NOT_IMPLEMENTED -4 +/** Missing 7777 at end of message */ +#define GRIB_7777_NOT_FOUND -5 +/** Passed array is too small */ +#define GRIB_ARRAY_TOO_SMALL -6 +/** File not found */ +#define GRIB_FILE_NOT_FOUND -7 +/** Code not found in code table */ +#define GRIB_CODE_NOT_FOUND_IN_TABLE -8 +/** Array size mismatch */ +#define GRIB_WRONG_ARRAY_SIZE -9 +/** Key/value not found */ +#define GRIB_NOT_FOUND -10 +/** Input output problem */ +#define GRIB_IO_PROBLEM -11 +/** Message invalid */ +#define GRIB_INVALID_MESSAGE -12 +/** Decoding invalid */ +#define GRIB_DECODING_ERROR -13 +/** Encoding invalid */ +#define GRIB_ENCODING_ERROR -14 +/** Code cannot unpack because of string too small */ +#define GRIB_NO_MORE_IN_SET -15 +/** Problem with calculation of geographic attributes */ +#define GRIB_GEOCALCULUS_PROBLEM -16 +/** Out of memory */ +#define GRIB_OUT_OF_MEMORY -17 +/** Value is read only */ +#define GRIB_READ_ONLY -18 +/** Invalid argument */ +#define GRIB_INVALID_ARGUMENT -19 +/** Null handle */ +#define GRIB_NULL_HANDLE -20 +/** Invalid section number */ +#define GRIB_INVALID_SECTION_NUMBER -21 +/** Value cannot be missing */ +#define GRIB_VALUE_CANNOT_BE_MISSING -22 +/** Wrong message length */ +#define GRIB_WRONG_LENGTH -23 +/** Invalid key type */ +#define GRIB_INVALID_TYPE -24 +/** Unable to set step */ +#define GRIB_WRONG_STEP -25 +/** Wrong units for step (step must be integer) */ +#define GRIB_WRONG_STEP_UNIT -26 +/** Invalid file id */ +#define GRIB_INVALID_FILE -27 +/** Invalid grib id */ +#define GRIB_INVALID_GRIB -28 +/** Invalid index id */ +#define GRIB_INVALID_INDEX -29 +/** Invalid iterator id */ +#define GRIB_INVALID_ITERATOR -30 +/** Invalid keys iterator id */ +#define GRIB_INVALID_KEYS_ITERATOR -31 +/** Invalid nearest id */ +#define GRIB_INVALID_NEAREST -32 +/** Invalid order by */ +#define GRIB_INVALID_ORDERBY -33 +/** Missing a key from the fieldset */ +#define GRIB_MISSING_KEY -34 +/** The point is out of the grid area */ +#define GRIB_OUT_OF_AREA -35 +/** Concept no match */ +#define GRIB_CONCEPT_NO_MATCH -36 +/** Definitions files not found */ +#define GRIB_NO_DEFINITIONS -37 +/** Wrong type while packing */ +#define GRIB_WRONG_TYPE -38 +/** End of resource */ +#define GRIB_END -39 +/** Unable to code a field without values */ +#define GRIB_NO_VALUES -40 +/** Grid description is wrong or inconsistent */ +#define GRIB_WRONG_GRID -41 +/** End of index reached */ +#define GRIB_END_OF_INDEX -42 +/** Null index */ +#define GRIB_NULL_INDEX -43 +/** End of resource reached when reading message */ +#define GRIB_PREMATURE_END_OF_FILE -44 +/** An internal array is too small */ +#define GRIB_INTERNAL_ARRAY_TOO_SMALL -45 +/** Message is too large for the current architecture */ +#define GRIB_MESSAGE_TOO_LARGE -46 +/** Constant field */ +#define GRIB_CONSTANT_FIELD -47 +/** Switch unable to find a matching case */ +#define GRIB_SWITCH_NO_MATCH -48 +/** Underflow */ +#define GRIB_UNDERFLOW -49 +/** Message malformed */ +#define GRIB_MESSAGE_MALFORMED -50 +/** Index is corrupted */ +#define GRIB_CORRUPTED_INDEX -51 +/** Invalid number of bits per value */ +#define GRIB_INVALID_BPV -52 +/** Edition of two messages is different */ +#define GRIB_DIFFERENT_EDITION -53 +/** Value is different */ +#define GRIB_VALUE_DIFFERENT -54 +/** Invalid key value */ +#define GRIB_INVALID_KEY_VALUE -55 +/*! @}*/ +#endif diff --git a/python/grib_interface.c b/python/grib_interface.c new file mode 100644 index 000000000..fd2807cd5 --- /dev/null +++ b/python/grib_interface.c @@ -0,0 +1,1968 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include "assert.h" + +#if HAVE_SYS_TYPES_H +# include +#endif + +#if HAVE_SYS_STAT_H +# include +#endif + +#ifdef HAVE_FCNTL_H +# include +#endif + +#include + +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t handle_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t index_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t multi_handle_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t iterator_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t keys_iterator_mutex = PTHREAD_MUTEX_INITIALIZER; + + +static void init() { + pthread_mutexattr_t attr; + + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&handle_mutex,&attr); + pthread_mutex_init(&index_mutex,&attr); + pthread_mutex_init(&multi_handle_mutex,&attr); + pthread_mutex_init(&iterator_mutex,&attr); + pthread_mutex_init(&keys_iterator_mutex,&attr); + pthread_mutexattr_destroy(&attr); + +} + +#endif + +int GRIB_NULL=-1; +int GRIB_NULL_NEAREST=-1; +extern int errno; + +typedef struct l_grib_file l_grib_file; + +struct l_grib_file { + int id; + FILE* f; + l_grib_file* next; +}; + +typedef struct l_grib_handle l_grib_handle; + +struct l_grib_handle { + int id; + grib_handle* h; + l_grib_handle* next; +}; + +typedef struct l_grib_index l_grib_index; + +struct l_grib_index { + int id; + grib_index* h; + l_grib_index* next; +}; + +typedef struct l_grib_multi_handle l_grib_multi_handle; + +struct l_grib_multi_handle { + int id; + grib_multi_handle* h; + l_grib_multi_handle* next; +}; + +typedef struct l_grib_iterator l_grib_iterator; + +struct l_grib_iterator { + int id; + grib_iterator* i; + l_grib_iterator* next; +}; + +typedef struct l_grib_keys_iterator l_grib_keys_iterator; + +struct l_grib_keys_iterator { + int id; + grib_keys_iterator* i; + l_grib_keys_iterator* next; +}; + +static l_grib_handle* handle_set = NULL; +static l_grib_index* index_set = NULL; +static l_grib_multi_handle* multi_handle_set = NULL; +static l_grib_file* file_set = NULL; +static l_grib_iterator* iterator_set = NULL; +static l_grib_keys_iterator* keys_iterator_set = NULL; + +static int push_file(FILE* f){ + l_grib_file* current = file_set; + l_grib_file* previous = file_set; + l_grib_file* new = NULL; + int myindex = 1; + + if(!file_set){ + file_set = malloc(sizeof(l_grib_file)); + file_set->id = myindex; + file_set->f = f; + file_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->f = f; + return current->id ; + } else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_handle)); + new->id = myindex; + new->f = f; + new->next = current; + previous->next = new; + return myindex; +} + +static void _push_handle(grib_handle *h,int *gid){ + l_grib_handle* current= handle_set; + l_grib_handle* previous= handle_set; + l_grib_handle* new= NULL; + int myindex= 1; + + if (*gid > 0 ) { + while(current) { + if(current->id == *gid) break; + current = current->next; + } + if (current) { + grib_handle_delete(current->h); + current->h=h; + return; + } + } + + current= handle_set; + + if(!handle_set){ + handle_set = malloc(sizeof(l_grib_handle)); + handle_set->id = myindex; + handle_set->h = h; + handle_set->next = NULL; + *gid=myindex; + return; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->h = h; + *gid=current->id; + return; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_handle)); + new->id = myindex; + new->h = h; + new->next = current; + previous->next = new; + + *gid=myindex; + return; +} + +static void _push_index(grib_index *h,int *gid){ + l_grib_index* current= index_set; + l_grib_index* previous= index_set; + l_grib_index* new= NULL; + int myindex= 1; + + if (*gid > 0 ) { + while(current) { + if(current->id == *gid) break; + current = current->next; + } + if (current) { + grib_index_delete(current->h); + current->h=h; + return; + } + } + + current= index_set; + + if(!index_set){ + index_set = malloc(sizeof(l_grib_index)); + index_set->id = myindex; + index_set->h = h; + index_set->next = NULL; + *gid=myindex; + return; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->h = h; + *gid=current->id; + return; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_index)); + new->id = myindex; + new->h = h; + new->next = current; + previous->next = new; + + *gid=myindex; + return; +} + +static void _push_multi_handle(grib_multi_handle *h,int *gid){ + l_grib_multi_handle* current= multi_handle_set; + l_grib_multi_handle* previous= multi_handle_set; + l_grib_multi_handle* new= NULL; + int myindex= 1; + + if (*gid > 0 ) { + while(current) { + if(current->id == *gid) break; + current = current->next; + } + if (current) { + grib_multi_handle_delete(current->h); + current->h=h; + return; + } + } + + current= multi_handle_set; + + if(!multi_handle_set){ + multi_handle_set = malloc(sizeof(l_grib_multi_handle)); + multi_handle_set->id = myindex; + multi_handle_set->h = h; + multi_handle_set->next = NULL; + *gid=myindex; + return; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->h = h; + *gid=current->id; + return; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_multi_handle)); + new->id = myindex; + new->h = h; + new->next = current; + previous->next = new; + + *gid=myindex; + return; +} + +static void push_handle(grib_handle *h,int *gid){ + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&handle_mutex) + _push_handle(h,gid); + GRIB_MUTEX_UNLOCK(&handle_mutex) + return; +} + +static void push_index(grib_index *h,int *gid){ + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&index_mutex) + _push_index(h,gid); + GRIB_MUTEX_UNLOCK(&index_mutex) + return; +} + +static void push_multi_handle(grib_multi_handle *h,int *gid){ + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&multi_handle_mutex) + _push_multi_handle(h,gid); + GRIB_MUTEX_UNLOCK(&multi_handle_mutex) + return; +} + + +static int _push_iterator(grib_iterator *i){ + l_grib_iterator* current = iterator_set; + l_grib_iterator* previous = iterator_set; + l_grib_iterator* new = NULL; + int myindex = 1; + + if(!iterator_set){ + iterator_set = malloc(sizeof(l_grib_iterator)); + iterator_set->id = myindex; + iterator_set->i = i; + iterator_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->i = i; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_iterator)); + new->id = myindex; + new->i = i; + new->next = current; + previous->next = new; + + return myindex; +} + +static int push_iterator(grib_iterator *i){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + ret=_push_iterator(i); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return ret; +} + +static int _push_keys_iterator(grib_keys_iterator *i){ + l_grib_keys_iterator* current = keys_iterator_set; + l_grib_keys_iterator* previous = keys_iterator_set; + l_grib_keys_iterator* new = NULL; + int myindex = 1; + + if(!keys_iterator_set){ + keys_iterator_set = malloc(sizeof(l_grib_keys_iterator)); + keys_iterator_set->id = myindex; + keys_iterator_set->i = i; + keys_iterator_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->i = i; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + if(!previous) return -1; + + new = malloc(sizeof(l_grib_keys_iterator)); + new->id = myindex; + new->i = i; + new->next = current; + previous->next = new; + + return myindex; +} + +static int push_keys_iterator(grib_keys_iterator *i){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + ret=_push_keys_iterator(i); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return ret; +} + +static grib_handle* _get_handle(int handle_id){ + l_grib_handle* current= handle_set; + + while(current){ + if(current->id == handle_id) return current->h; + current = current->next; + } + + return NULL; +} + +static grib_index* _get_index(int index_id){ + l_grib_index* current= index_set; + + while(current){ + if(current->id == index_id) return current->h; + current = current->next; + } + + return NULL; +} + +static grib_multi_handle* _get_multi_handle(int multi_handle_id){ + l_grib_multi_handle* current= multi_handle_set; + + while(current){ + if(current->id == multi_handle_id) return current->h; + current = current->next; + } + + return NULL; +} + +static grib_handle* get_handle(int handle_id){ + grib_handle* h=NULL; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&handle_mutex) + h=_get_handle(handle_id); + GRIB_MUTEX_UNLOCK(&handle_mutex) + return h; +} + +static grib_index* get_index(int index_id){ + grib_index* h=NULL; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&index_mutex) + h=_get_index(index_id); + GRIB_MUTEX_UNLOCK(&index_mutex) + return h; +} + +static grib_multi_handle* get_multi_handle(int multi_handle_id){ + grib_multi_handle* h=NULL; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&multi_handle_mutex) + h=_get_multi_handle(multi_handle_id); + GRIB_MUTEX_UNLOCK(&multi_handle_mutex) + return h; +} + +static FILE* get_file(int file_id){ + l_grib_file* current = file_set; + while(current){ + if(current->id == file_id) return current->f; + current = current->next; + } + return NULL; +} + +static grib_iterator* _get_iterator(int iterator_id){ + l_grib_iterator* current = iterator_set; + + while(current){ + if(current->id == iterator_id) return current->i; + current = current->next; + } + return NULL; +} +static grib_iterator* get_iterator(int iterator_id){ + grib_iterator* i=NULL; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + i=_get_iterator(iterator_id); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return i; +} + +static grib_keys_iterator* _get_keys_iterator(int keys_iterator_id){ + l_grib_keys_iterator* current = keys_iterator_set; + + while(current){ + if(current->id == keys_iterator_id) return current->i; + current = current->next; + } + return NULL; +} + +static grib_keys_iterator* get_keys_iterator(int keys_iterator_id){ + grib_keys_iterator* i=NULL; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + i=_get_keys_iterator(keys_iterator_id); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return i; +} + +static int clear_file(int file_id){ + l_grib_file* current = file_set; + int ret = 0; + while(current){ + if(current->id == file_id){ + current->id = -(current->id); + if (current->f) { + ret = fclose(current->f); + if (0 == ret) { + return GRIB_SUCCESS; + } else { + return GRIB_IO_PROBLEM; + } + } + return GRIB_SUCCESS; + } + current = current->next; + } + return GRIB_INVALID_FILE; +} + +static int _clear_handle(int handle_id){ + + l_grib_handle* current = handle_set; + + /* look for the input grib id to release it */ + while(current){ + if(current->id == handle_id){ + current->id = -(current->id); + if(current->h) return grib_handle_delete(current->h); + } + current = current->next; + } + + /* fail with invalid grib id if not found */ + return GRIB_INVALID_GRIB; +} + +static int _clear_index(int index_id){ + + l_grib_index* current = index_set; + + while(current){ + if(current->id == index_id){ + current->id = -(current->id); + if (current->h) { + grib_index_delete(current->h); + return GRIB_SUCCESS; + } + } + current = current->next; + } + return GRIB_SUCCESS; +} + +static int _clear_multi_handle(int multi_handle_id){ + + l_grib_multi_handle* current = multi_handle_set; + + while(current){ + if(current->id == multi_handle_id){ + current->id = -(current->id); + if(current->h) return grib_multi_handle_delete(current->h); + } + current = current->next; + } + return GRIB_SUCCESS; +} + +static int clear_handle(int handle_id){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&handle_mutex) + ret=_clear_handle(handle_id); + GRIB_MUTEX_UNLOCK(&handle_mutex) + return ret; +} + +static int clear_index(int index_id){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&index_mutex) + ret=_clear_index(index_id); + GRIB_MUTEX_UNLOCK(&index_mutex) + return ret; +} + +static int clear_multi_handle(int multi_handle_id){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&multi_handle_mutex) + ret=_clear_multi_handle(multi_handle_id); + GRIB_MUTEX_UNLOCK(&multi_handle_mutex) + return ret; +} + +static int _clear_iterator(int iterator_id){ + + l_grib_iterator* current = iterator_set; + + while(current){ + if(current->id == iterator_id){ + current->id = -(current->id); + return grib_iterator_delete(current->i); + } + current = current->next; + } + return GRIB_INVALID_ITERATOR; +} + +static int clear_iterator(int iterator_id){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + ret=_clear_iterator(iterator_id); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return ret; +} + +static int _clear_keys_iterator(int keys_iterator_id){ + + l_grib_keys_iterator* current = keys_iterator_set; + + while(current){ + if(current->id == keys_iterator_id){ + current->id = -(current->id); + return grib_keys_iterator_delete(current->i); + } + current = current->next; + } + return GRIB_INVALID_KEYS_ITERATOR; +} + +static int clear_keys_iterator(int keys_iterator_id){ + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + ret=_clear_keys_iterator(keys_iterator_id); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return ret; +} + +int grib_c_read_any_from_file(int* fid, char* buffer, int* nbytes) { + grib_context* c; + int err=0; + size_t size=(size_t)nbytes; + FILE* f=get_file(*fid); + + if (f) { + c=grib_context_get_default( ); + err=grib_read_any_from_file(c,f,buffer,&size); + *nbytes=size; + return err; + } else { + return GRIB_INVALID_FILE; + } +} + +int grib_c_write_file(int* fid, char* buffer, int* nbytes) { + grib_context* c; + FILE* f=get_file(*fid); + + if (f) { + int ioerr; + c=grib_context_get_default( ); + if( fwrite(buffer, 1, *nbytes, f) != *nbytes) { + ioerr=errno; + grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s",strerror(ioerr)); + return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; + } else { + return GRIB_INVALID_FILE; + } +} + +int grib_c_read_file(int* fid, char* buffer, int* nbytes) { + grib_context* c; + FILE* f=get_file(*fid); + + if (f) { + int ioerr; + c=grib_context_get_default( ); + if( fread(buffer, 1, *nbytes, f) != *nbytes) { + ioerr=errno; + grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s",strerror(ioerr)); + return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; + } else { + return GRIB_INVALID_FILE; + } +} + +int grib_c_open_file(int* fid, char* name , char* op){ + FILE* f = NULL; + int ioerr=0; + int ret=GRIB_SUCCESS; + + /*TODO Proper context passed as external parameter */ + grib_context* context=grib_context_get_default(); + + f = fopen(name,op); + + if(!f) { + ioerr=errno; + grib_context_log(context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s: %s",strerror(ioerr),name); + *fid = -1; + ret=GRIB_IO_PROBLEM; + } else { + *fid = push_file(f); + ret=GRIB_SUCCESS; + } + return ret; +} + +int grib_c_close_file(int* fid){ + return clear_file(*fid); +} + +int grib_c_multi_support_on(void) { + grib_multi_support_on(0); + return GRIB_SUCCESS; +} + +int grib_c_multi_support_off(void) { + grib_multi_support_off(0); + return GRIB_SUCCESS; +} + +static int _grib_c_iterator_new_(int* gid,int* iterid,int* mode) { + int err=0; + grib_handle* h; + grib_iterator* iter; + + h=get_handle(*gid); + if (!h) { + *iterid=-1; + return GRIB_NULL_HANDLE; + } + iter=grib_iterator_new(h,*mode,&err); + if (iter) + *iterid=push_iterator(iter); + else + *iterid=-1; + return err; +} + +int grib_c_iterator_new(int* gid,int* iterid,int* mode) { + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&iterator_mutex) + ret=_grib_c_iterator_new_(gid,iterid,mode); + GRIB_MUTEX_UNLOCK(&iterator_mutex) + return ret; +} + +int grib_c_iterator_next(int* iterid,double* lat,double* lon,double* value) { + grib_iterator* iter=get_iterator(*iterid); + if (!iter) return GRIB_INVALID_ITERATOR; + return grib_iterator_next(iter,lat,lon,value); +} + +int grib_c_iterator_delete(int* iterid) { + return clear_iterator(*iterid); +} + +static int _grib_c_keys_iterator_new_(int* gid,int* iterid,char* name_space) { + int err=0; + grib_handle* h; + grib_keys_iterator* iter; + + h=get_handle(*gid); + if (!h) { + *iterid=-1; + return GRIB_NULL_HANDLE; + } + iter=grib_keys_iterator_new(h,0,name_space); + if (iter) + *iterid=push_keys_iterator(iter); + else + *iterid=-1; + return err; +} + +int grib_c_keys_iterator_new(int* gid,int* iterid,char* name_space) { + int ret=0; + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&keys_iterator_mutex) + ret=_grib_c_keys_iterator_new_(gid,iterid,name_space); + GRIB_MUTEX_UNLOCK(&keys_iterator_mutex) + return ret; +} + +int grib_c_keys_iterator_next(int* iterid) { + int ret = 0; + + grib_keys_iterator* iter= get_keys_iterator(*iterid); + + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + + ret = grib_keys_iterator_next(iter); + + return ret; +} + +int grib_c_keys_iterator_delete(int* iterid) { + return clear_keys_iterator(*iterid); +} + +int grib_c_gribex_mode_on(void) { + grib_gribex_mode_on(0); + return GRIB_SUCCESS; +} + +int grib_c_gribex_mode_off(void) { + grib_gribex_mode_off(0); + return GRIB_SUCCESS; +} + +int grib_c_skip_computed(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_COMPUTED); +} + +int grib_c_skip_coded(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_CODED); +} + +int grib_c_skip_edition_specific(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_EDITION_SPECIFIC); +} + +int grib_c_skip_duplicates(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_DUPLICATES); +} + +int grib_c_skip_read_only(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_READ_ONLY); +} + +int grib_c_skip_function(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_FUNCTION); +} + +int grib_c_keys_iterator_get_name(int* iterid,char* name,int len) { + size_t lsize=len; + char buf[1024]={0,}; + + grib_keys_iterator* kiter=get_keys_iterator(*iterid); + + if (!kiter) return GRIB_INVALID_KEYS_ITERATOR; + + sprintf(buf,"%s",grib_keys_iterator_get_name(kiter)); + lsize=strlen(buf); + + if (len < lsize) return GRIB_ARRAY_TOO_SMALL; + + memcpy(name,buf,lsize); + name[lsize] = '\0'; + + return 0; +} + +int grib_c_keys_iterator_rewind(int* kiter) { + grib_keys_iterator* i=get_keys_iterator(*kiter); + + if (!i) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_rewind(i); +} + +int grib_c_new_from_message(int* gid, void* buffer , size_t* bufsize){ + grib_handle *h = NULL; + h = grib_handle_new_from_message_copy(0, buffer, *bufsize); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} + +int grib_c_new_from_message_copy(int* gid, void* buffer , size_t* bufsize){ + grib_handle *h = NULL; + h = grib_handle_new_from_message_copy(0, buffer, *bufsize); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} + +int grib_c_new_from_samples(int* gid, char* name){ + grib_handle *h = NULL; + + h = grib_handle_new_from_samples(NULL,name); + /* grib_context_set_debug(h->context,1);*/ + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_FILE_NOT_FOUND; +} + +int grib_c_new_from_template(int* gid, char* name){ + grib_handle *h = NULL; + + h = grib_handle_new_from_template(NULL,name); + /* grib_context_set_debug(h->context,1);*/ + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} + +int grib_c_clone(int* gidsrc,int* giddest){ + grib_handle *src = get_handle(*gidsrc); + grib_handle *dest = NULL; + + if(src){ + dest = grib_handle_clone(src); + if(dest){ + push_handle(dest,giddest); + return GRIB_SUCCESS; + } + } + + *giddest = -1; + return GRIB_INVALID_GRIB; +} + +int grib_c_copy_namespace(int* gidsrc,char* name,int* giddest){ + grib_handle *src = get_handle(*gidsrc); + grib_handle *dest = get_handle(*giddest); + + if(src && dest) + return grib_copy_namespace(dest,name,src); + + return GRIB_INVALID_GRIB; +} + +int grib_c_count_in_file(FILE* f,int* n) { + int err = 0; + if (f) err=grib_count_in_file(0, f,n); + return err; +} + +int grib_c_new_gts_from_file(FILE* f, int* gid){ + grib_handle *h = NULL; + int err = 0; + + if(f){ + h = grib_gts_handle_new_from_file(0,f,&err); + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_c_new_bufr_from_file(FILE* f, int* gid){ + grib_handle *h = NULL; + int err = 0; + + if(f){ + h = grib_bufr_handle_new_from_file(0,f,&err); + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_c_new_from_file(FILE* f, int* gid, int headers_only){ + grib_handle *h = NULL; + int err = 0; + + if(f){ + h = headers_only ? + grib_handle_headers_only_new_from_file(0,f,&err) : + grib_handle_new_from_file(0,f,&err); + + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_c_new_from_index(int* iid, int* gid){ + int err = 0; + grib_index* i = get_index(*iid); + + grib_handle *h = NULL; + + if(i){ + h = grib_handle_new_from_index(i,&err); + if(h){ + push_handle(h,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_INDEX; + } + } + + *gid=-1; + return GRIB_INVALID_INDEX; +} + +int grib_c_index_new_from_file(char* file ,char* keys ,int* gid){ + int err = 0; + grib_index *i = NULL; + + if(*file){ + i = grib_index_new_from_file(0,file,keys,&err); + if(i){ + push_index(i,gid); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_c_index_add_file(int* iid, char* file) { + grib_index *i = get_index(*iid); + int err = GRIB_SUCCESS; + + if (!i) { + return GRIB_INVALID_INDEX; + } else { + err = grib_index_add_file(i,file); + return err; + } +} + +int grib_c_index_release(int* hid){ + return clear_index(*hid); +} + +int grib_c_multi_release(int* hid){ + return clear_multi_handle(*hid); +} + +int grib_c_release(int* hid){ + return clear_handle(*hid); +} + +int grib_c_dump(int* gid){ + grib_handle *h = get_handle(*gid); + + if(!h) + return GRIB_INVALID_GRIB; + else + grib_dump_content(h,stdout,NULL,0,NULL); + + return GRIB_SUCCESS; +} + +int grib_c_print(int* gid, char* key){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + grib_dumper* d = NULL; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + d = grib_dumper_factory("serialize",h,stdout,0,0); + err = grib_print(h, key, d); + grib_dumper_delete(d); + return err; + } +} + +int grib_c_get_error_string(int* err, char* buf, int len){ + const char* err_msg = grib_get_error_message(*err); + size_t erlen = strlen(err_msg); + if( len < erlen) return GRIB_ARRAY_TOO_SMALL; + + strncpy(buf, err_msg,(size_t)erlen); + buf[erlen] = '\0'; + + return GRIB_SUCCESS; +} + +int grib_c_get_size_int(int* gid, char* key, int* val){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_size(h, key, &tsize); + *val = tsize; + return err; + } +} + +int grib_c_get_string_length(int* gid, char* key, size_t* val){ + grib_handle *h = get_handle(*gid); + + if(!h) + return GRIB_INVALID_GRIB; + else + return grib_get_string_length(h, key, val); + +} + +int grib_c_get_size_long(int* gid, char* key, long* val){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_size(h, key, &tsize); + *val = tsize; + return err; + } +} + +int grib_c_index_get_size_int(int* gid, char* key, int* val){ + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_index_get_size(h, key, &tsize); + *val = tsize; + return err; + } +} + +int grib_c_index_get_size_long(int* gid, char* key, long* val){ + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_index_get_size(h, key, &tsize); + *val = tsize; + return err; + } +} + +int grib_c_get_int(int* gid, char* key, int* val){ + grib_handle *h = get_handle(*gid); + long long_val; + int err = GRIB_SUCCESS; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_get_long(h, key,&long_val); + *val = long_val; + return err; +} + +int grib_c_get_long(int* gid, char* key, long* val){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_get_long(h, key, val); + return err; +} + +int grib_c_get_double(int* gid, char* key, double* val){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_get_double(h, key, val); + return err; +} + +int grib_c_get_int_array(int* gid, char* key, int *val, int* size){ + + grib_handle *h = get_handle(*gid); + long* long_val = NULL; + int err = GRIB_SUCCESS; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + if(sizeof(long) == sizeof(int)){ + long_val = (long*)val; + err = grib_get_long_array(h, key, long_val, &lsize); + *size = lsize; + return err; + } + if(*size) + long_val = grib_context_malloc(h->context,(*size)*(sizeof(long))); + else + long_val = grib_context_malloc(h->context,(sizeof(long))); + + if(!long_val) return GRIB_OUT_OF_MEMORY; + err = grib_get_long_array(h, key, long_val, &lsize); + + for(*size=0;*sizecontext,long_val); + return err; +} + +int grib_c_get_long_array(int* gid, char* key, long *val, int* size){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_long_array(h, key, val, &lsize); + *size=lsize; + + return err; +} + +int grib_c_index_get_string(int* gid, char* key, char* val, int *eachsize,int* size){ + + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + int i; + size_t lsize = *size; + char** bufval; + char* p=val; + + if(!h) return GRIB_INVALID_GRIB; + + bufval=(char**)grib_context_malloc_clear(h->context,sizeof(char*)* *size); + + err = grib_index_get_string(h, key, bufval, &lsize); + *size = lsize; + + if (err) return err; + + for (i=0;icontext,bufval); + printf("eachsize=%d strlen(bufval[i])=%d\n",*eachsize,(unsigned int)strlen(bufval[i])); + return GRIB_ARRAY_TOO_SMALL; + } + memcpy(p,bufval[i],l); + p+=l; + for (j=0;j<*eachsize-l;j++) *(p++)=' '; + } + grib_context_free(h->context,bufval); + + return err; +} + +int grib_c_index_get_long(int* gid, char* key, long *val, int* size){ + + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_index_get_long(h, key, val, &lsize); + *size = lsize; + return err; +} + +int grib_c_index_get_int(int* gid, char* key, int *val, int* size){ + + grib_index *h = get_index(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + long* lval=0; + int i; + + if(!h) return GRIB_INVALID_GRIB; + + lval=grib_context_malloc(h->context,sizeof(long)* *size); + if (!lval) return GRIB_OUT_OF_MEMORY; + + err = grib_index_get_long(h, key, lval, &lsize); + for (i=0;icontext,(lsize)*(sizeof(long))); + else + long_val = grib_context_malloc(h->context,(sizeof(long))); + + if(!long_val) return GRIB_OUT_OF_MEMORY; + + for(lsize=0;lsize<(*size);lsize++) + long_val[lsize] = val[lsize]; + + err = grib_set_long_array(h, key, long_val, lsize); + + grib_context_free(h->context,long_val); + return err; +} + +int grib_c_set_long_array(int* gid, char* key, long* val, int* size){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_long_array(h, key, val, lsize); + + return err; +} + +int grib_c_set_int(int* gid, char* key, int* val){ + grib_handle *h = get_handle(*gid); + long long_val = *val; + if(!h) return GRIB_INVALID_GRIB; + return grib_set_long(h, key, long_val); +} + +int grib_c_set_long(int* gid, char* key, long* val){ + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + return grib_set_long(h, key, *val); +} + +int grib_c_set_missing(int* gid, char* key){ + + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_missing(h, key); +} + +/* + * Submits all keys with the given values in one go. + * 'keyvals' is a string of the form: + * key1=val1,key2=val2,key3=val3 + */ +int grib_c_set_key_vals(int* gid, char* keyvals) +{ + grib_handle* h = get_handle(*gid); + if (!h) return GRIB_INVALID_GRIB; + { + int err = GRIB_SUCCESS; + grib_values values[1024]={{0,},}; + int count = 1000; /* max. num key/val pairs */ + if ((err = parse_keyval_string(NULL, keyvals, 1, GRIB_TYPE_UNDEFINED, values, &count)) != GRIB_SUCCESS) { + return err; + } + if ((err = grib_set_values(h,values,count)) != GRIB_SUCCESS) { + return err; + } + } + return GRIB_SUCCESS; +} + +int grib_c_is_missing(int* gid, char* key,int* isMissing){ + int err=0; + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + + *isMissing=grib_is_missing(h, key,&err); + return err; +} + +int grib_c_is_defined(int* gid, char* key,int* isDefined){ + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + + *isDefined=grib_is_defined(h, key); + return GRIB_SUCCESS; +} + +int grib_c_set_real4(int* gid, char* key, float* val){ + + grib_handle *h = get_handle(*gid); + double val8 = *val; + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double(h, key, val8); +} + +int grib_c_get_real4_element(int* gid, char* key, int* index,float* val){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + double val8 = 0; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_double_element(h, key, *index,&val8); + *val = val8; + return err; +} + +int grib_c_get_real4_elements(int* gid, char* key,int* index, float *val,int* size){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + long i=0; + double* val8 = NULL; + + if(!h) return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + + err = grib_get_double_elements(h, key, index,(long)lsize,val8); + + for(i=0;icontext,val8); + + return err; +} + +int grib_c_get_real4(int* gid, char* key, float* val){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + double val8 = 0; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_double(h, key, &val8); + *val = val8; + return err; +} + +int grib_c_get_real4_array(int* gid, char* key, float *val, int* size){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + double* val8 = NULL; + + if(!h) return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + err = grib_get_double_array(h, key, val8, &lsize); + + for(*size=0;*sizecontext,val8); + + return err; +} + +int grib_c_set_real4_array(int* gid, char* key, float*val, int* size){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + double* val8 = NULL; + + if(!h) return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,lsize*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + for(lsize=0;lsize<*size;lsize++) + val8[lsize] = val[lsize]; + + err = grib_set_double_array(h, key, val8, lsize); + grib_context_free(h->context,val8); + return err; + +} + +int grib_c_index_select_real8(int* gid, char* key, double* val){ + + grib_index *h = get_index(*gid); + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_double(h, key, *val); +} + +int grib_c_index_select_string(int* gid, char* key, char* val){ + + grib_index *h = get_index(*gid); + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_string(h, key, val); +} + +int grib_c_index_select_int(int* gid, char* key, int* val){ + + grib_index *h = get_index(*gid); + long lval=*val; + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_long(h, key, lval); +} + +int grib_c_index_select_long(int* gid, char* key, long* val){ + + grib_index *h = get_index(*gid); + + if(!h) return GRIB_INVALID_GRIB; + return grib_index_select_long(h, key, *val); +} + +int grib_c_set_real8(int* gid, char* key, double* val){ + + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + return grib_set_double(h, key, *val); +} + +int grib_c_get_real8(int* gid, char* key, double* val){ + + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_get_double(h, key, val); +} + +int grib_c_set_double(int *gid, char *key, double *val) { + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double(h, key, *val); +} + +int grib_c_get_real8_element(int* gid, char* key,int* index, double* val){ + + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_get_double_element(h, key, *index,val); +} + +int grib_c_get_real8_elements(int* gid, char* key,int* index, double* val, int *size){ + + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_get_double_elements(h, key, index,*size,val); +} + +int grib_c_find_nearest_four_single(int* gid,int* is_lsm, + double* inlat,double* inlon, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) { + grib_nearest* nearest=NULL; + int err=0, result=0; + unsigned long flags=0; + size_t len=4; + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + nearest=grib_nearest_new(h,&err); + if (err!=GRIB_SUCCESS) return err; + + result = grib_nearest_find(nearest,h,*inlat,*inlon, + flags,outlats,outlons,values,distances,indexes,&len); + grib_nearest_delete(nearest); + return result; +} + +int grib_c_find_nearest_single(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes) { + + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_nearest_find_multiple(h,*is_lsm, + inlats,inlons,1,outlats,outlons, + values,distances,indexes); +} + +int grib_c_find_nearest_multiple(int* gid,int* is_lsm, + double* inlats,double* inlons, + double* outlats,double* outlons, + double* values,double* distances, + int* indexes, int* npoints) { + + grib_handle *h = get_handle(*gid); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_nearest_find_multiple(h,*is_lsm, + inlats,inlons,*npoints,outlats,outlons, + values,distances,indexes); +} + +int grib_c_get_real8_array(int* gid, char* key, double*val, int* size){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + size_t lsize = *size; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_double_array(h, key, val, &lsize); + *size = lsize; + return err; + } +} + +int grib_c_set_real8_array(int* gid, char* key, double*val, int* size){ + + grib_handle *h = get_handle(*gid); + + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double_array(h, key, val, lsize); + +} + +int grib_c_set_double_array(int* gid, char* key, double*val, int* size){ + + grib_handle *h = get_handle(*gid); + + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double_array(h, key, val, lsize); + +} + +int grib_c_get_string(int* gid, char* key, char* val, size_t *lsize){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_string(h, key, val, lsize); + + return err; +} + +int grib_c_set_string(int* gid, char* key, char* val, int len2){ + + grib_handle *h = get_handle(*gid); + + size_t lsize = len2; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_string(h, key, val, &lsize); +} + +int grib_c_get_data_real4(int* gid,float* lats, float* lons,float* values,size_t* size) { + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + double *lat8=NULL,*lon8=NULL,*val8 = NULL; + size_t i=0; + + if(!h) return GRIB_INVALID_GRIB; + + val8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + if(!val8) return GRIB_OUT_OF_MEMORY; + lon8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + if(!lon8) return GRIB_OUT_OF_MEMORY; + lat8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + if(!lat8) return GRIB_OUT_OF_MEMORY; + + err=grib_get_data(h,lat8,lon8,val8,size); + + for(i=0;i<*size;i++) { + values[i] = val8[i]; + lats[i] = lat8[i]; + lons[i] = lon8[i]; + } + + grib_context_free(h->context,val8); + grib_context_free(h->context,lat8); + grib_context_free(h->context,lon8); + + return err; + +} + +int grib_c_get_data_real8(int* gid,double* lats, double* lons,double* values,size_t* size) { + + grib_handle *h = get_handle(*gid); + return grib_get_data(h,lats,lons,values,size); + +} + +int grib_c_get_message_size(int* gid, size_t *len){ + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + + *len = h->buffer->ulength; + return GRIB_SUCCESS; + +} + +int grib_c_copy_message(int* gid, void* mess,size_t* len){ + grib_handle *h = get_handle(*gid); + if(!h) + return GRIB_INVALID_GRIB; + + if(*len < h->buffer->ulength) { + grib_context_log(h->context,GRIB_LOG_ERROR,"grib_copy_message: buffer=%ld message size=%ld",*len,h->buffer->ulength); + return GRIB_BUFFER_TOO_SMALL; + } + + + memcpy(mess,h->buffer->data,h->buffer->ulength); + *len=h->buffer->ulength; + return GRIB_SUCCESS; + +} + +void grib_c_check(int* err,char* call,char* str){ + grib_context* c=grib_context_get_default(); + if ( *err == GRIB_SUCCESS || *err == GRIB_END_OF_FILE ) return; + grib_context_log(c,GRIB_LOG_ERROR,"%s: %s %s", + call,str,grib_get_error_message(*err)); + exit(*err); +} + +int grib_c_write(int* gid, FILE* f) { + grib_handle *h = get_handle(*gid); + const void* mess = NULL; + size_t mess_len = 0; + + if(!f) return GRIB_INVALID_FILE; + if (!h) return GRIB_INVALID_GRIB; + + grib_get_message(h,&mess,&mess_len); + if(fwrite(mess,1, mess_len,f) != mess_len) { + perror("grib_write"); + return GRIB_IO_PROBLEM; + } + + return GRIB_SUCCESS; +} + +int grib_c_multi_new(int* mgid) { + grib_multi_handle *mh = grib_multi_handle_new(0); + if (!mh) return GRIB_INVALID_GRIB; + push_multi_handle(mh,mgid); + return GRIB_SUCCESS; +} + +int grib_c_multi_write(int* gid, FILE* f) { + grib_multi_handle *h = get_multi_handle(*gid); + + if(!f) return GRIB_INVALID_FILE; + if (!h) return GRIB_INVALID_GRIB; + + return grib_multi_handle_write(h,f); +} + +int grib_c_multi_append(int* ingid, int* sec,int* mgid) { + grib_handle *h = get_handle(*ingid); + grib_multi_handle *mh = get_multi_handle(*mgid); + + if (!h) return GRIB_INVALID_GRIB; + + if (!mh) { + mh=grib_multi_handle_new(h->context); + push_multi_handle(mh,mgid); + } + + return grib_multi_handle_append(h,*sec,mh); +} + +int grib_c_get_native_type(int* gid, char* key, int* type) { + grib_handle *h = get_handle(*gid); + + if (!h) return GRIB_INVALID_GRIB; + + return grib_get_native_type(h, key, type); +} + +int grib_c_index_write(int* gid, char* file) { + grib_index *i = get_index(*gid); + int err = GRIB_SUCCESS; + + if (!i) { + return GRIB_INVALID_GRIB; + } else { + err = grib_index_write(i,file); + return err; + } +} + +int grib_c_index_read(char* file, int* gid) { + int err = 0; + grib_index *i = NULL; + + if (*file) { + i = grib_index_read(0,file,&err); + if (i) { + push_index(i,gid); + return GRIB_SUCCESS; + } else { + *gid = -1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +void no_fail_on_wrong_length(int flag) { + grib_context *c = grib_context_get_default(); + int value; + assert(c != NULL); + value = (flag != 0) ? 1 : 0; + c->no_fail_on_wrong_length = value; +} + +void grib_c_gts_header_on(void) { + grib_context *c = grib_context_get_default(); + assert(c != NULL); + grib_gts_header_on(c); +} + +void grib_c_gts_header_off(void) { + grib_context *c = grib_context_get_default(); + assert(c != NULL); + grib_gts_header_off(c); +} + +long grib_c_get_api_version(void) { + return grib_get_api_version(); +} + +int grib_c_get_message(int *gid, const void **msg, size_t *size) { + grib_handle *h = get_handle(*gid); + return grib_get_message(h,msg,size); +} diff --git a/python/grib_interface.h b/python/grib_interface.h new file mode 100644 index 000000000..e19db589e --- /dev/null +++ b/python/grib_interface.h @@ -0,0 +1,109 @@ +#ifndef GRIB_INTERFACE_H +#define GRIB_INTERFACE_H + +int grib_c_read_any_from_file(int *fid, char *buffer, int *nbytes); +int grib_c_write_file(int *fid, char *buffer, int *nbytes); +int grib_c_read_file(int *fid, char *buffer, int *nbytes); +int grib_c_open_file(int *fid, char *name, char *op); +int grib_c_close_file(int *fid); +int grib_c_multi_support_on(void); +int grib_c_multi_support_off(void); +int grib_c_iterator_new(int *gid, int *iterid, int *mode); +int grib_c_iterator_next(int *iterid, double *lat, double *lon, double *value); +int grib_c_iterator_delete(int *iterid); +int grib_c_keys_iterator_new(int *gid, int *iterid, char *name_space); +int grib_c_keys_iterator_next(int *iterid); +int grib_c_keys_iterator_delete(int *iterid); +int grib_c_gribex_mode_on(void); +int grib_c_gribex_mode_off(void); +int grib_c_skip_computed(int *iterid); +int grib_c_skip_coded(int *iterid); +int grib_c_skip_edition_specific(int *iterid); +int grib_c_skip_duplicates(int *iterid); +int grib_c_skip_read_only(int *iterid); +int grib_c_skip_function(int *iterid); +int grib_c_keys_iterator_get_name(int *iterid, char *name, int len); +int grib_c_keys_iterator_rewind(int *kiter); +int grib_c_new_from_message(int *gid, void *buffer, size_t *bufsize); +int grib_c_new_from_message_copy(int *gid, void *buffer, size_t *bufsize); +int grib_c_new_from_samples(int *gid, char *name); +int grib_c_new_from_template(int *gid, char *name); +int grib_c_clone(int *gidsrc, int *giddest); +int grib_c_copy_namespace(int *gidsrc, char *name, int *giddest); +int grib_c_count_in_file(FILE *f, int *n); +int grib_c_new_from_file(FILE *f, int *gid, int headers_only); +int grib_c_new_bufr_from_file(FILE *f, int *gid); +int grib_c_new_gts_from_file(FILE *f, int *gid); +int grib_c_new_from_index(int *iid, int *gid); +int grib_c_index_new_from_file(char *file, char *keys, int *gid); +int grib_c_index_add_file(int* iid, char* file); +int grib_c_index_release(int *hid); +int grib_c_multi_release(int *hid); +int grib_c_release(int *hid); +int grib_c_dump(int *gid); +int grib_c_print(int *gid, char *key); +int grib_c_get_error_string(int *err, char *buf, int len); +int grib_c_get_size_int(int *gid, char *key, int *val); +int grib_c_get_size_long(int *gid, char *key, long *val); +int grib_c_index_get_size_int(int *gid, char *key, int *val); +int grib_c_index_get_size_long(int *gid, char *key, long *val); +int grib_c_get_int(int *gid, char *key, int *val); +int grib_c_get_long(int *gid, char *key, long *val); +int grib_c_get_double(int *gid, char *key, double *val); +int grib_c_get_int_array(int *gid, char *key, int *val, int *size); +int grib_c_get_long_array(int *gid, char *key, long *val, int *size); +int grib_c_index_get_string(int *gid, char *key, char *val, int *eachsize, int *size); +int grib_c_index_get_long(int *gid, char *key, long *val, int *size); +int grib_c_index_get_int(int *gid, char *key, int *val, int *size); +int grib_c_index_get_real8(int *gid, char *key, double *val, int *size); +int grib_c_set_int_array(int *gid, char *key, int *val, int *size); +int grib_c_set_long_array(int *gid, char *key, long *val, int *size); +int grib_c_set_int(int *gid, char *key, int *val); +int grib_c_set_long(int *gid, char *key, long *val); +int grib_c_set_missing(int *gid, char *key); +int grib_c_set_key_vals(int* gid, char* keyvals); +int grib_c_is_missing(int *gid, char *key, int *isMissing); +int grib_c_is_defined(int *gid, char *key, int *isDefined); +int grib_c_set_real4(int *gid, char *key, float *val); +int grib_c_get_real4_element(int *gid, char *key, int *index, float *val); +int grib_c_get_real4_elements(int *gid, char *key, int *index, float *val, int *size); +int grib_c_get_real4(int *gid, char *key, float *val); +int grib_c_get_real4_array(int *gid, char *key, float *val, int *size); +int grib_c_set_real4_array(int *gid, char *key, float *val, int *size); +int grib_c_index_select_real8(int *gid, char *key, double *val); +int grib_c_index_select_string(int *gid, char *key, char *val); +int grib_c_index_select_int(int *gid, char *key, int *val); +int grib_c_index_select_long(int *gid, char *key, long *val); +int grib_c_set_real8(int *gid, char *key, double *val); +int grib_c_get_real8(int *gid, char *key, double *val); +int grib_c_get_real8_element(int *gid, char *key, int *index, double *val); +int grib_c_get_real8_elements(int *gid, char *key, int *index, double *val, int *size); +int grib_c_find_nearest_four_single(int *gid, int *is_lsm, double *inlat, double *inlon, double *outlats, double *outlons, double *values, double *distances, int *indexes); +int grib_c_find_nearest_single(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes); +int grib_c_find_nearest_multiple(int *gid, int *is_lsm, double *inlats, double *inlons, double *outlats, double *outlons, double *values, double *distances, int *indexes, int *npoints); +int grib_c_get_real8_array(int *gid, char *key, double *val, int *size); +int grib_c_set_real8_array(int *gid, char *key, double *val, int *size); +int grib_c_get_string(int *gid, char *key, char *val, size_t *lsize); +int grib_c_set_string(int *gid, char *key, char *val, int len2); +int grib_c_get_data_real4(int *gid, float *lats, float *lons, float *values, size_t *size); +int grib_c_get_data_real8(int *gid, double *lats, double *lons, double *values, size_t *size); +int grib_c_get_message_size(int *gid, size_t *len); +int grib_c_copy_message(int *gid, void *mess, size_t *len); +void grib_c_check(int *err, char *call, char *str); +int grib_c_write(int *gid, FILE *f); +int grib_c_multi_new(int* mgid); +int grib_c_multi_write(int *gid, FILE *f); +int grib_c_multi_append(int *ingid, int *sec, int *mgid); +int grib_c_set_double_array(int* gid, char* key, double*val, int* size); +int grib_c_set_double(int* gid, char* key, double*val); +int grib_c_get_native_type(int* gid, char* key, int* type); +int grib_c_index_write(int* gid, char* file); +int grib_c_index_read(char* file, int* gid); +void no_fail_on_wrong_length(int flag); +long grib_c_get_api_version(void); +void grib_c_gts_header_on(void); +void grib_c_gts_header_off(void); +int grib_c_get_message(int *gid, const void **msg, size_t *size); +int grib_c_get_string_length(int* gid, char* key, size_t* val); + +#endif diff --git a/python/gribapi.c b/python/gribapi.c new file mode 100644 index 000000000..3f06b2930 --- /dev/null +++ b/python/gribapi.c @@ -0,0 +1,187 @@ +#include "Python.h" +#include "grib_api.h" + + +static PyObject* Error; + + +PyDoc_STRVAR(gribapi__doc__, + "gribapi point evalutation kernel"); + +PyDoc_STRVAR(read__doc__, + "gribapi point evalutation kernel"); + +static PyObject * +py_new_handle_from_file(PyObject *self, PyObject *args) +{ + /* TODO: Call PyFile_Check or PyFile_CheckExact */ + int err = 0; + grib_handle *h; + PyObject *file; + + if(!PyArg_ParseTuple(args,"O",&file)) + return NULL; + + h = grib_handle_new_from_file(NULL,PyFile_AsFile(file),&err); + + if(err) { + /* http://www.ragestorm.net/tutorial?id=21 */ + PyErr_Format(Error,"grib_api: %s",grib_get_error_message(err)); + return NULL; + } + + + /* TODO: Do an OO version */ + + if(h) + return PyLong_FromVoidPtr(h); + + Py_RETURN_NONE; +} + +static PyObject * +py_handle_delete(PyObject *self, PyObject *args) +{ + PyObject* h; + if(!PyArg_ParseTuple(args,"O",&h)) + return NULL; + grib_handle_delete(PyLong_AsVoidPtr(h)); + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * +py_keys_iterator_delete(PyObject *self, PyObject *args) +{ + PyObject* h; + if(!PyArg_ParseTuple(args,"O",&h)) + return NULL; + grib_keys_iterator_delete(PyLong_AsVoidPtr(h)); + Py_INCREF(Py_None); + return Py_None; +} + + +static PyObject * +py_get_string(PyObject *self, PyObject *args) +{ + PyObject* h; + char *s; + size_t size; + char tmp[1024]; + int err; + + if(!PyArg_ParseTuple(args,"Os",&h,&s)) + return NULL; + + size = sizeof(tmp); + err = grib_get_string(PyLong_AsVoidPtr(h),s,tmp,&size); + + if(err) { + /* http://www.ragestorm.net/tutorial?id=21 */ + PyErr_Format(Error,"grib_api: %s %s",s,grib_get_error_message(err)); + return NULL; + } + + return PyString_InternFromString(tmp); + +} + +static PyObject * +py_keys_iterator_next(PyObject *self, PyObject *args) +{ + PyObject* h; + int more; + + if(!PyArg_ParseTuple(args,"O",&h)) + return NULL; + + more = grib_keys_iterator_next(PyLong_AsVoidPtr(h)); + if(more) + { + Py_RETURN_TRUE; + } + else + { + Py_RETURN_FALSE; + } +} + + +static PyObject * +py_keys_iterator_get_string(PyObject *self, PyObject *args) +{ + PyObject* h; + size_t size; + char tmp[1024]; + int err; + + if(!PyArg_ParseTuple(args,"O",&h)) + return NULL; + + size = sizeof(tmp); + err = grib_keys_iterator_get_string(PyLong_AsVoidPtr(h),tmp,&size); + + if(err) { + /* http://www.ragestorm.net/tutorial?id=21 */ + PyErr_Format(Error,"grib_api: %s",grib_get_error_message(err)); + return NULL; + } + + return PyString_InternFromString(tmp); + +} + +static PyObject * +py_keys_iterator_get_name(PyObject *self, PyObject *args) +{ + PyObject* h; + + if(!PyArg_ParseTuple(args,"O",&h)) + return NULL; + + + return PyString_InternFromString(grib_keys_iterator_get_name(PyLong_AsVoidPtr(h))); + +} + +static PyObject * +py_keys_iterator_new(PyObject *self, PyObject *args) +{ + PyObject* h; + char *s; + + if(!PyArg_ParseTuple(args,"Os",&h,&s)) + return NULL; + + return PyLong_FromVoidPtr(grib_keys_iterator_new(PyLong_AsVoidPtr(h),GRIB_KEYS_ITERATOR_ALL_KEYS,s)); +} + +static PyMethodDef gribapi_methods[] = { + + {"new_handle_from_file", py_new_handle_from_file, METH_VARARGS, read__doc__}, + {"get_string", py_get_string, METH_VARARGS, read__doc__}, + {"keys_iterator_new", py_keys_iterator_new, METH_VARARGS, read__doc__}, + {"keys_iterator_delete", py_keys_iterator_delete, METH_VARARGS, read__doc__}, + {"handle_delete", py_handle_delete, METH_VARARGS, read__doc__}, + {"keys_iterator_get_string", py_keys_iterator_get_string, METH_VARARGS, read__doc__}, + {"keys_iterator_get_name", py_keys_iterator_get_name, METH_VARARGS, read__doc__}, + {"keys_iterator_next", py_keys_iterator_next, METH_VARARGS, read__doc__}, + + + {NULL, NULL} /* sentinel */ +}; + +PyMODINIT_FUNC +initgribapi(void) +{ + PyObject* m; + + /* There have been several InitModule functions over time */ + m = Py_InitModule3("gribapi", gribapi_methods, gribapi__doc__); + + /* TODO: Create our own exception */ + Error = PyErr_NewException("grib.apierror",NULL,NULL); + Py_INCREF(Error); + PyModule_AddObject(m, "error", Error); +} diff --git a/python/gribapi.py b/python/gribapi.py new file mode 100644 index 000000000..48e96951d --- /dev/null +++ b/python/gribapi.py @@ -0,0 +1,1661 @@ +""" +@package gribapi +@brief This package is a low level Python interface to GRIB API. It offers almost one to one bindings to the C API functions. + +The Python interface to GRIB API uses by default the NumPy package +as the container of choice for the possible arrays of values that can be encoded/decoded in and from a grib message. +Numpy is a package used for scientific computing in Python and an efficient container for generic data. + +Alternatively, the Python interface can be built without Numpy support, in which case, the data container used +will be Python's native 'array' object. + +The Python interface and its support for NumPy can be enabled/disabled from the configure by using the following configure flags:\n + +@code +--enable-python +--disable-numpy + +Ex. ./configure --enable-python --disable-numpy +@endcode + +When the '--enable-python' flag is used, then the system Python will be used to build the interface. + +NumPy support can be disabled by using the '--disable-numpy' flag. + +@em Requirements: + + - Python 2.5 or higher + - NumPy (optional) + +""" +import gribapi_swig as _internal +import types +import sys +import os +from array import array +from functools import wraps +#import inspect + +KEYTYPES = { + 1:int, + 2:float, + 3:str, +} + +# GRIB-51 Skip function arguments type checking if the +# environment variable is defined +no_type_checks = os.environ.get('GRIB_API_PYTHON_NO_TYPE_CHECKS') is not None + +# function arguments type checking decorator +# got inspired from http://code.activestate.com/recipes/454322-type-checking-decorator/ +# modified to support multiple allowed types and all types in the same decorator call +def require(**_params_): + def check_types(_func_, _params_ = _params_): + if no_type_checks: + return _func_ + @wraps(_func_) + def modified(*args, **kw): + arg_names = _func_.func_code.co_varnames + #argnames, varargs, kwargs, defaults = inspect.getargspec(_func_) + kw.update(zip(arg_names, args)) + for name, allowed_types in _params_.iteritems(): + param = kw[name] + if type(allowed_types) == types.TypeType: + allowed_types = (allowed_types,) + assert type(param) in allowed_types, \ + "Parameter '%s' should be type %s" % (name, " or ".join([t.__name__ for t in allowed_types])) + return _func_(**kw) + return modified + return check_types + +class GribInternalError(Exception): + """ + @brief Wrap errors coming from the C API in a Python exception object. + """ + def __init__(self, value): + # Call the base class constructor with the parameters it needs + Exception.__init__(self, value) + if type(value) is int: + err, self.msg = _internal.grib_c_get_error_string(value, 1024) + assert(err == 0) + else: + self.msg = value + def __str__(self): + return self.msg + +class Bunch(dict): + """ + The collector of a bunch of named stuff :). + """ + def __init__(self, **kw): + dict.__init__(self, kw) + self.__dict__.update(kw) + + def __setitem__(self, key, value): + dict.__setitem__(self, key, value) + self.__dict__[key] = value + + def __setattr__(self, key, value): + dict.__setitem__(self, key, value) + self.__dict__[key] = value + + def __delitem__(self, key): + dict.__delitem__(self, key) + del self.__dict__[key] + + def __delattr__(self, key): + dict.__delitem__(self, key) + del self.__dict__[key] + + def __str__(self): + state = ["%s=%r" % (attribute, value) + for (attribute, value) + in self.__dict__.items()] + return '\n'.join(state) + +def with_numpy(): + """ + @brief Is numpy enabled? + @return 0->disabled, 1->enabled + """ + numpy = 0 + try: + _internal.with_numpy() + numpy = 1 + except AttributeError: + pass + + return numpy + +@require(errid=int) +def GRIB_CHECK(errid): + """ + Utility function checking the GRIB API error code and raising + an error if that was set. + + @param errid the C interface error id to check + @exception GribInternalError + """ + if errid: + raise GribInternalError(errid) + +@require(fileobj=file) +def gts_new_from_file(fileobj): + """ + @brief Load in memory a GTS message from a file. + + The message can be accessed through its id and it will be available\n + until @ref grib_release is called.\n + + The message can be loaded headers only by using the headers_only argument. + Default is to have the headers only option set to off (False). If set to on (True), + data values will be skipped. This will result in a significant performance gain + if one is only interested in browsing through messages to retrieve metadata. + Any attempt to retrieve data values keys when in the headers only mode will + result in a key not found error. + + \b Examples: \ref get.py "get.py" + + @param fileobj python file object + @param headers_only whether or not to load the message with the headers only + @return id of the GTS loaded in memory + @exception GribInternalError + """ + err, gribid = _internal.grib_c_new_gts_from_file(fileobj, 0) + if err: + if err == _internal.GRIB_END_OF_FILE: + return None + else: + GRIB_CHECK(err) + else: + return gribid + +@require(fileobj=file) +def bufr_new_from_file(fileobj): + """ + @brief Load in memory a BUFR message from a file. + + The message can be accessed through its id and it will be available\n + until @ref grib_release is called.\n + + The message can be loaded headers only by using the headers_only argument. + Default is to have the headers only option set to off (False). If set to on (True), + data values will be skipped. This will result in a significant performance gain + if one is only interested in browsing through messages to retrieve metadata. + Any attempt to retrieve data values keys when in the headers only mode will + result in a key not found error. + + \b Examples: \ref get.py "get.py" + + @param fileobj python file object + @param headers_only whether or not to load the message with the headers only + @return id of the BUFR loaded in memory + @exception GribInternalError + """ + err, gribid = _internal.grib_c_new_bufr_from_file(fileobj,0) + if err: + if err == _internal.GRIB_END_OF_FILE: + return None + else: + GRIB_CHECK(err) + else: + return gribid + +@require(fileobj=file) +def grib_new_from_file(fileobj, headers_only = False): + """ + @brief Load in memory a grib message from a file. + + The message can be accessed through its gribid and it will be available\n + until @ref grib_release is called.\n + + The message can be loaded headers only by using the headers_only argument. + Default is to have the headers only option set to off (False). If set to on (True), + data values will be skipped. This will result in a significant performance gain + if one is only interested in browsing through messages to retrieve metadata. + Any attempt to retrieve data values keys when in the headers only mode will + result in a key not found error. + + \b Examples: \ref get.py "get.py" + + @param fileobj python file object + @param headers_only whether or not to load the message with the headers only + @return id of the grib loaded in memory + @exception GribInternalError + """ + err, gribid = _internal.grib_c_new_from_file(fileobj,0,headers_only) + if err: + if err == _internal.GRIB_END_OF_FILE: + return None + else: + GRIB_CHECK(err) + else: + return gribid + +@require(fileobj=file) +def grib_count_in_file(fileobj): + """ + @brief Count the messages in a file. + + \b Examples: \ref count_messages.py "count_messages.py" + + @param fileobj python file object + @return number of messages in the file + @exception GribInternalError + """ + err, num = _internal.grib_c_count_in_file(fileobj) + GRIB_CHECK(err) + return num + +def grib_multi_support_on(): + """ + @brief Turn on the support for multiple fields in a single message. + + @exception GribInternalError + """ + _internal.grib_c_multi_support_on() + +def grib_multi_support_off(): + """ + @brief Turn off the support for multiple fields in a single message. + + @exception GribInternalError + """ + _internal.grib_c_multi_support_off() + +@require(gribid=int) +def grib_release(gribid): + """ + @brief Free the memory for the message referred as gribid. + + \b Examples: \ref get.py "get.py" + + @param gribid id of the grib loaded in memory + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_release(gribid)) + +@require(gribid=int,key=str) +def grib_get_string(gribid, key): + """ + @brief Get the string value of a key from a grib message. + + @param gribid id of the grib loaded in memory + @param key key name + @return string value of key + @exception GribInternalError + """ + length = grib_get_string_length(gribid, key) + err,value = _internal.grib_c_get_string(gribid, key, length) + GRIB_CHECK(err) + + stpos = value.find('\0') + if stpos != -1: + value = value[0:stpos] + + return value + +@require(gribid=int,key=str,value=str) +def grib_set_string(gribid, key, value): + """ + @brief Set the value for a string key in a grib message. + + @param gribid id of the grib loaded in memory + @param key key name + @param value string value + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_set_string(gribid,key,value,len(value))) + +def grib_gribex_mode_on(): + """ + @brief Turn on the compatibility mode with gribex. + + @exception GribInternalError + """ + _internal.grib_c_gribex_mode_on() + +def grib_gribex_mode_off(): + """ + @brief Turn off the compatibility mode with gribex. + + @exception GribInternalError + """ + _internal.grib_c_gribex_mode_off() + +@require(gribid=int,fileobj=file) +def grib_write(gribid,fileobj): + """ + @brief Write a message to a file. + + \b Examples: \ref set.py "set.py" + + @param gribid id of the grib loaded in memory + @param fileobj python file object + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_write(gribid,fileobj)) + +@require(multigribid=int,fileobj=file) +def grib_multi_write(multigribid,fileobj): + """ + @brief Write a multi field message to a file. + + \b Examples: \ref multi_write.py "multi_write.py" + + @param multigribid id of the multi field grib loaded in memory + @param fileobj python file object + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_multi_write(multigribid,fileobj)) + +@require(ingribid=int,startsection=int,multigribid=int) +def grib_multi_append(ingribid, startsection, multigribid): + """ + @brief Append a single field grib message to a multi field grib message. + + Only the sections with section number greather or equal "startsection" + are copied from the input single message to the multi field output grib. + + \b Examples: \ref multi_write.py "multi_write.py" + + @param ingribid id of the input single grib + @param startsection starting from startsection (included) all the sections are copied + from the input single grib to the output multi grib + @param multigribid id of the output multi filed grib + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_multi_append(ingribid, startsection, multigribid)) + +@require(gribid=int,key=str) +def grib_get_size(gribid,key): + """ + @brief Get the size of an array key. + + \b Examples: \ref get.py "get.py",\ref count_messages.py "count_messages.py" + + @param gribid id of the grib loaded in memory + @param key name of the key + @exception GribInternalError + """ + err,result = _internal.grib_c_get_size_long(gribid,key) + GRIB_CHECK(err) + return result + +@require(gribid=int,key=str) +def grib_get_string_length(gribid,key): + """ + @brief Get the length of the string version of a key. + + @param gribid id of the grib loaded in memory + @param key name of the key + @exception GribInternalError + """ + err,result = _internal.grib_c_get_string_length(gribid,key) + GRIB_CHECK(err) + return result + +@require(iterid=int) +def grib_skip_computed(iterid): + """ + @brief Skip the computed keys in a keys iterator. + + The computed keys are not coded in the message, they are computed + from other keys. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_computed(iterid)) + +@require(iterid=int) +def grib_skip_coded(iterid): + """ + @brief Skip the coded keys in a keys iterator. + + The coded keys are actually coded in the message. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_coded(iterid)) + +@require(iterid=int) +def grib_skip_edition_specific(iterid): + """ + @brief Skip the edition specific keys in a keys iterator. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_edition_specific(iterid)) + +@require(iterid=int) +def grib_skip_duplicates(iterid): + """ + @brief Skip the duplicate keys in a keys iterator. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_duplicates(iterid)) + +@require(iterid=int) +def grib_skip_read_only(iterid): + """ + @brief Skip the read_only keys in a keys iterator. + + Read only keys cannot be set. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_read_only(iterid)) + +@require(iterid=int) +def grib_skip_function(iterid): + """ + @brief Skip the function keys in a keys iterator. + + @see grib_keys_iterator_new,grib_keys_iterator_next,grib_keys_iterator_delete + + @param iterid keys iterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_skip_function(iterid)) + +@require(gribid=int,mode=int) +def grib_iterator_new(gribid,mode): + """ + @brief Create a new geoiterator for the given message, using its geometry and values. + + The geoiterator can be used to go through all the geopoints in a message and + retrieve the values corresponding to those geopoints. + + \b Examples: \ref iterator.py "iterator.py" + + @param gribid id of the grib loaded in memory + @param mode flags for future use + @return geoiterator id + """ + err, iterid = _internal.grib_c_iterator_new(gribid,mode) + GRIB_CHECK(err) + return iterid + +@require(iterid=int) +def grib_iterator_delete(iterid): + """ + @brief Delete a geoiterator and free memory. + + \b Examples: \ref iterator.py "iterator.py" + + @param iterid geoiterator id + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_iterator_delete(iterid)) + +@require(iterid=int) +def grib_iterator_next(iterid): + """ + @brief Retrieve the next value from a geoiterator. + + \b Examples: \ref iterator.py "iterator.py" + + @param iterid geoiterator id + @return tuple with the latitude, longitude and value + @exception GribInternalError + """ + err,lat,lon,value = _internal.grib_c_iterator_next(iterid) + if (err == 0): + return [] + elif (err < 0): + GRIB_CHECK(err) + else: + return (lat,lon,value) + +@require(gribid=int) +def grib_keys_iterator_new(gribid,namespace=None): + """ + @brief Create a new iterator on the keys. + + The keys iterator can be navigated to give all the key names which + can then be used to get or set the key values with \ref grib_get or + \ref grib_set. + The set of keys returned can be controlled with the input variable + namespace or using the functions + \ref grib_skip_read_only, \ref grib_skip_duplicates, + \ref grib_skip_coded,\ref grib_skip_computed. + If namespace is a non empty string only the keys belonging to + that namespace are returned. Available namespaces are "ls" (to get the same + default keys as the grib_ls and "mars" to get the keys used by mars. + + \b Examples: \ref iterator.py "iterator.py" + + @param gribid id of the grib loaded in memory + @param namespace the namespace of the keys to search for (all the keys if empty) + @return keys iterator id to be used in the keys iterator functions + @exception GribInternalError + """ + err, iterid = _internal.grib_c_keys_iterator_new(gribid,namespace) + GRIB_CHECK(err) + return iterid + +@require(iterid=int) +def grib_keys_iterator_next(iterid): + """ + @brief Advance to the next keys iterator value. + + \b Examples: \ref keys_iterator.py "keys_iterator.py" + + @param iterid keys iterator id created with @ref grib_keys_iterator_new + @exception GribInternalError + """ + res = _internal.grib_c_keys_iterator_next(iterid) + if res < 0: + GRIB_CHECK(res) + return res + +@require(iterid=int) +def grib_keys_iterator_delete(iterid): + """ + @brief Delete a keys iterator and free memory. + + \b Examples: \ref keys_iterator.py "keys_iterator.py" + + @param iterid keys iterator id created with @ref grib_keys_iterator_new + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_keys_iterator_delete(iterid)) + +@require(iterid=int) +def grib_keys_iterator_get_name(iterid): + """ + @brief Get the name of a key from a keys iterator. + + \b Examples: \ref keys_iterator.py "keys_iterator.py" + + @param iterid keys iterator id created with @ref grib_keys_iterator_new + @return key name to be retrieved + @exception GribInternalError + """ + err, name = _internal.grib_c_keys_iterator_get_name(iterid,1024) + GRIB_CHECK(err) + return name + +@require(iterid=int) +def grib_keys_iterator_rewind(iterid): + """ + @brief Rewind a keys iterator. + + @param iterid keys iterator id created with @ref grib_keys_iterator_new + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_keys_iterator_rewind(iterid)) + +@require(gribid=int,key=str) +def grib_get_long(gribid,key): + """ + @brief Get the value of a key in a grib message as an int. + + @param gribid id of the grib loaded in memory + @param key key name + @return value of key as int + @exception GribInternalError + """ + err, value = _internal.grib_c_get_long(gribid,key) + GRIB_CHECK(err) + return value + +@require(gribid=int,key=str) +def grib_get_double(gribid,key): + """ + @brief Get the value of a key in a grib message as a float. + + @param gribid id of the grib loaded in memory + @param key key name + @return value of key as float + @exception GribInternalError + """ + err, value = _internal.grib_c_get_double(gribid,key) + GRIB_CHECK(err) + return value + +@require(gribid=int,key=str,value=(int,long,float,str)) +def grib_set_long(gribid,key,value): + """ + @brief Set the integer value for a key in a grib message. + + A TypeError exception will be thrown if value cannot be represented + as an integer. + + @param gribid id of the grib loaded in memory + @param key key name + @param value value to set + @exception GribInternalError,TypeError + """ + try: + value = int(value) + except (ValueError,TypeError): + raise TypeError("Invalid type") + + if (value > sys.maxint): + raise TypeError("Invalid type") + + GRIB_CHECK(_internal.grib_c_set_long(gribid,key,value)) + +@require(gribid=int,key=str,value=(int,long,float,str)) +def grib_set_double(gribid,key,value): + """ + @brief Set the double value for a key in a grib message. + + A TypeError exception will be thrown if value cannot be represented + as a float. + + @param gribid id of the grib loaded in memory + @param key key name + @param value float value to set + @exception GribInternalError,TypeError + """ + try: + value = float(value) + except (ValueError,TypeError): + raise TypeError("Invalid type") + + GRIB_CHECK(_internal.grib_c_set_double(gribid,key,value)) + +@require(samplename=str) +def grib_new_from_samples(samplename): + """ + @brief Create a new valid gribid from a sample. + + The available samples are picked up from the directory pointed to + by the environment variable GRIB_SAMPLES_PATH. + To know where the samples directory is run the grib_info tool.\n + + \b Examples: \ref samples.py "samples.py" + + @param samplename name of the sample to be used + @return id of the grib loaded in memory + @exception GribInternalError + """ + err,gribid = _internal.grib_c_new_from_samples(0,samplename) + GRIB_CHECK(err) + return gribid + +@require(gribid_src=int) +def grib_clone(gribid_src): + """ + @brief Create a copy of a message. + + Create a copy of a given message (\em gribid_src) resulting in a new + message in memory (\em gribid_dest) identical to the original one. + + \b Examples: \ref clone.py "clone.py" + + @param gribid_src id of grib to be cloned + @return id of clone + @exception GribInternalError + """ + err,newgribid_src = _internal.grib_c_clone(gribid_src,0) + GRIB_CHECK(err) + return newgribid_src + +@require(gribid=int,key=str) +def grib_set_double_array(gribid,key,inarray): + """ + @brief Set the value of the key to a double array. + + The input array can be a numpy.ndarray or a python sequence like tuple, list, array, ... + + If NumPy is enabled, the wrapper will internally try to convert the input to a NumPy array + before extracting its data and length. This is possible as NumPy + allows the construction of arrays from arbitrary python sequences. + + The elements of the input sequence need to be convertible to a double. + + @param gribid id of the grib loaded in memory + @param key key name + @param inarray tuple,list,array,numpy.ndarray + @exception GribInternalError + """ + if with_numpy(): + GRIB_CHECK(_internal.grib_set_double_ndarray(gribid,key,inarray)) + else: + nval = len(inarray) + a = _internal.new_doubleArray(nval) + s = _internal.intp() + s.assign(nval) + + for i in range(nval): + _internal.doubleArray_setitem(a,i,inarray[i]) + + GRIB_CHECK(_internal.grib_c_set_real8_array(gribid,key,a,s)) + + _internal.delete_doubleArray(a) + +@require(gribid=int,key=str) +def grib_get_double_array(gribid,key): + """ + @brief Get the value of the key as a double array. + + If NumPy is enabled, the double array will be stored in a NumPy ndarray. + Otherwise, Python's native array type will be used. + + @param gribid id of the grib loaded in memory + @param key key name + @return numpy.ndarray or array + @exception GribInternalError + """ + if with_numpy(): + nval = grib_get_size(gribid,key) + err,result = _internal.grib_get_double_ndarray(gribid,key,nval) + GRIB_CHECK(err) + return result + else: + nval = grib_get_size(gribid,key) + a = _internal.new_doubleArray(nval) + s = _internal.intp() + s.assign(nval) + + GRIB_CHECK(_internal.grib_c_get_real8_array(gribid,key,a,s)) + + result = array("d") + for i in range(nval): + result.append(_internal.doubleArray_getitem(a,i)) + + _internal.delete_doubleArray(a) + + return result + +@require(gribid=int,key=str) +def grib_set_long_array(gribid, key, inarray): + """ + @brief Set the value of the key to an integer array. + + If NumPy is enabled, the wrapper will internally try to convert the input to a NumPy array + before extracting its data and length. This is possible as NumPy + allows the construction of arrays from arbitrary python sequences. + + The elements of the input sequence need to be convertible to an int. + + @param gribid id of the grib loaded in memory + @param key key name + @param inarray tuple,list,python array,numpy array + @exception GribInternalError + """ + if with_numpy(): + GRIB_CHECK(_internal.grib_set_long_ndarray(gribid, key, inarray)) + else: + nval = len(inarray) + a = _internal.new_longArray(nval) + s = _internal.intp() + s.assign(nval) + + for i in range(nval): + _internal.longArray_setitem(a,i,inarray[i]) + + GRIB_CHECK(_internal.grib_c_set_long_array(gribid,key,a,s)) + + _internal.delete_longArray(a) + +@require(gribid=int,key=str) +def grib_get_long_array(gribid,key): + """ + @brief Get the integer array of values for a key from a grib message. + + If NumPy is enabled, the integer array will be stored in a NumPy ndarray. + Otherwise, Python's native array type will be used. + + @param gribid id of the grib loaded in memory + @param key key name + @return numpy.ndarray or array + @exception GribInternalError + """ + if with_numpy(): + nval = grib_get_size(gribid,key) + err,result = _internal.grib_get_long_ndarray(gribid,key,nval) + GRIB_CHECK(err) + return result + else: + nval = grib_get_size(gribid,key) + a = _internal.new_longArray(nval) + s = _internal.intp() + s.assign(nval) + + GRIB_CHECK(_internal.grib_c_get_long_array(gribid,key,a,s)) + + result = array("l") + for i in range(nval): + result.append(_internal.longArray_getitem(a,i)) + + _internal.delete_longArray(a) + + return result + +def grib_multi_new(): + """ + @brief Create a new multi field and return its id. + + \b Examples: \ref multi_write.py "multi_write.py" + + @return id of the multi field + @exception GribInternalError + """ + err,mgid = _internal.grib_c_multi_new() + GRIB_CHECK(err) + return mgid + +@require(gribid=int) +def grib_multi_release(gribid): + """ + @brief Release a multi field from memory. + + \b Examples: \ref multi_write.py "multi_write.py" + + @param gribid id of the multi field we want to release the memory for + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_multi_release(gribid)) + +@require(gribid_src=int,namespace=str,gribid_dest=int) +def grib_copy_namespace(gribid_src, namespace, gribid_dest): + """ + @brief Copy the value of all the keys belonging to a namespace from the source message + to the destination message. + + @param gribid_src id of source message + @param gribid_dest id of destination message + @param namespace namespace to be copied + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_copy_namespace(gribid_src, namespace, gribid_dest)) + +@require(filename=str,keys=(tuple,list)) +def grib_index_new_from_file(filename, keys): + """ + @brief Create a new index from a file. + + \b Examples: \ref index.py "index.py" + + @param filename path of the file to index on + @param keys sequence of keys to index on + @return index id + @exception GribInternalError + """ + ckeys = ",".join(keys) + err,iid = _internal.grib_c_index_new_from_file(filename,ckeys) + GRIB_CHECK(err) + return iid + +@require(indexid=int,filename=str) +def grib_index_add_file(indexid, filename): + """ + @brief Add a file to an index. + + \b Examples: \ref index.py "index.py" + + @param indexid id of the index to add the file to + @param filename path of the file to be added to index + @exception GribInternalError + """ + err = _internal.grib_c_index_add_file(indexid, filename) + GRIB_CHECK(err) + +@require(indexid=int) +def grib_index_release(indexid): + """ + @brief Delete an index. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_index_release(indexid)) + +@require(indexid=int,key=str) +def grib_index_get_size(indexid,key): + """ + @brief Get the number of distinct values for the index key. The key must belong to the index. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. The index must have been created on the given key. + @param key key for which the number of values is computed + @return number of distinct values for key in index + @exception GribInternalError + """ + err,value = _internal.grib_c_index_get_size_long(indexid,key) + GRIB_CHECK(err) + return value + +@require(indexid=int,key=str) +def grib_index_get_long(indexid,key): + """ + @brief Get the distinct values of the key in argument contained in the index. The key must belong to the index. + + This function is used when the type of the key was explicitly defined as long or when the native type of the key is long. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key for wich the values are returned + @return tuple with values of key in index + @exception GribInternalError + """ + nval = grib_index_get_size(indexid,key) + + a = _internal.new_longArray(nval) + s = _internal.intp() + s.assign(nval) + + GRIB_CHECK(_internal.grib_c_index_get_long(indexid,key,a,s)) + + result = [] + for i in range(nval): + result.append(_internal.longArray_getitem(a,i)) + + _internal.delete_longArray(a) + + return tuple(result) + +def grib_index_get_string(indexid,key): + """ + @brief Get the distinct values of the key in argument contained in the index. The key must belong to the index. + + This function is used when the type of the key was explicitly defined as string or when the native type of the key is string. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key for wich the values are returned + @param return tuple with values of key in index + @exception GribInternalError + """ + nval = grib_index_get_size(indexid,key) + max_val_size = 1024 + + err,raw_result,outnval = _internal.grib_c_index_get_string(indexid,key,max_val_size,nval) + GRIB_CHECK(err) + + assert nval == outnval + + result = [] + for i in range(nval): + low = i*max_val_size + high = (i+1)*max_val_size + value = raw_result[low:high].rstrip() + result.append(value) + + return tuple(result) + +@require(iid=int,key=str) +def grib_index_get_double(iid,key): + """ + @brief Get the distinct values of the key in argument contained in the index. The key must belong to the index. + + This function is used when the type of the key was explicitly defined as double or when the native type of the key is double. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key for wich the values are returned + @return tuple with values of key in index + @exception GribInternalError + """ + nval = grib_index_get_size(iid,key) + + a = _internal.new_doubleArray(nval) + s = _internal.intp() + s.assign(nval) + + GRIB_CHECK(_internal.grib_c_index_get_real8(iid,key,a,s)) + + result = [] + for i in range(nval): + result.append(_internal.doubleArray_getitem(a,i)) + + _internal.delete_doubleArray(a) + + return tuple(result) + +@require(indexid=int,key=str,val=int) +def grib_index_select_long(indexid,key,val): + """ + @brief Select the message subset with key==value. The value is an integer. + + The key must have been created with integer type or have integer as native type if the type was not explicitly defined in the index creation. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key to be selected + @param value value of the key to select + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_index_select_long(indexid,key,val)) + +@require(iid=int,key=str,val=float) +def grib_index_select_double(iid,key,val): + """ + @brief Select the message subset with key==value. The value is a double. + + The key must have been created with integer type or have integer as native type if the type was not explicitly defined in the index creation. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key to be selected + @param value value of the key to select + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_index_select_real8(iid,key,val)) + +@require(indexid=int,key=str,val=str) +def grib_index_select_string(indexid,key,val): + """ + @brief Select the message subset with key==value. The value is a integer. + + The key must have been created with string type or have string as native type if the type was not explicitly defined in the index creation. + + In case of error, if the status parameter (optional) is not given, the program will + exit with an error message.\n Otherwise the error message can be + gathered with @ref grib_get_error_string. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key to be selected + @param value value of the key to select + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_index_select_string(indexid,key,val)) + +def grib_new_from_index(indexid): + """ + @brief Create a new handle from an index after having selected the key values. + + All the keys belonging to the index must be selected before calling this function. + Successive calls to this function will return all the handles compatible with the constraints defined selecting the values of the index keys. + + The message can be accessed through its gribid and it will be available until @ref grib_release is called. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. + @return id of the grib loaded in memory or None if end of index + @exception GribInternalError + """ + err,gribid = _internal.grib_c_new_from_index(indexid,0) + + if err: + if err == _internal.GRIB_END_OF_INDEX: + return None + else: + GRIB_CHECK(err) + else: + return gribid + +@require(gribid=int) +def grib_get_message_size(gribid): + """ + @brief Get the size of a coded message. + + @param gribid id of the grib loaded in memory + @return size in bytes of the message + @exception GribInternalError + """ + err,value = _internal.grib_c_get_message_size(gribid) + GRIB_CHECK(err) + return value + +@require(gribid=int,key=str,index=int) +def grib_get_double_element(gribid,key,index): + """ + @brief Get as double the i-th element of the "key" array. + + @param gribid id of the grib loaded in memory + @param key the key to be searched + @param index zero based index of value to retrieve + @return value + @exception GribInternalError + + """ + err,value = _internal.grib_c_get_real8_element(gribid,key,index) + GRIB_CHECK(err) + return value + +@require(gribid=int,key=str,indexes=(list,tuple)) +def grib_get_double_elements(gribid,key,indexes): + """ + @brief Get as double array the elements of the "key" array whose indexes are listed in the input array. + + @param gribid id of the grib loaded in memory + @param key the key to be searched + @param indexes list or tuple of indexes + @return numpy.ndarray or array + @exception GribInternalError + + """ + if with_numpy(): + nidx = len(indexes) + err,result = _internal.grib_get_double_ndelements(gribid,key,indexes,nidx) + GRIB_CHECK(err) + return result + else: + nidx = len(indexes) + + pidx = _internal.new_intArray(nidx) + pval = _internal.new_doubleArray(nidx) + psize = _internal.intp() + psize.assign(nidx) + + for i in range(len(indexes)): + _internal.intArray_setitem(pidx,i,indexes[i]) + + err = _internal.grib_c_get_real8_elements(gribid,key,pidx,pval,psize) + GRIB_CHECK(err) + + result = array("d") + for i in range(psize.value()): + result.append(_internal.doubleArray_getitem(pval,i)) + + _internal.delete_intArray(pidx) + _internal.delete_doubleArray(pval) + + return result + +def grib_get_elements(gribid,key,indexes): + """ + @brief Retrieve the elements of the key array for the indexes specified in the input. + + @param gribid id of the grib loaded in memory + @param key the key to be searched + @param indexes single index or a list of indexes + @return numpy.ndarray or array containing the values of key for the given indexes + @exception GribInternalError + """ + try: + iter(indexes) + except TypeError: + indexes = (indexes,) + + nidx = len(indexes) + err,result = _internal.grib_get_double_ndelements(gribid,key,indexes,nidx) + GRIB_CHECK(err) + return result + +@require(gribid=int,key=str) +def grib_set_missing(gribid,key): + """ + @brief Set as missing the value for a key in a grib message. + + It can be used to set a missing value in the grib header but not in + the data values. + + \b Examples: \ref set_missing.py "set_missing.py" + + @param gribid id of the grib loaded in memory + @param key key name + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_set_missing(gribid,key)) + +@require(gribid=int) +def grib_set_key_vals(gribid, key_vals): + """ + Set the values for several keys at once in a grib message. + + @param gribid id of the grib loaded in memory + @param key_vals can be a string, list/tuple or dictionary. + If a string, format must be "key1=val1,key2=val2" + If a list, it must contain strings of the form "key1=val1" + @exception GribInternalError + """ + if (len(key_vals) == 0): + raise GribInternalError("Empty key/values argument") + keyValsString = "" + if isinstance(key_vals, str): + # Plain string. We need to do a DEEP copy so as not to change the original + keyValsString = ''.join(key_vals) + elif isinstance(key_vals, list) or isinstance(key_vals, tuple): + # A list of key=val strings + for kv in key_vals: + if not isinstance(kv, str): + raise TypeError("Invalid list/tuple element type '%s'"%kv) + if not '=' in str(kv): + raise GribInternalError("Invalid list/tuple element format '%s'"%kv) + if len(keyValsString) > 0: + keyValsString += ',' + keyValsString += kv + elif isinstance(key_vals, dict): + # A dictionary mapping keys to values + for key in key_vals.iterkeys(): + if len(keyValsString) > 0: + keyValsString += ',' + keyValsString += key+'=' + str(key_vals[key]) + else: + raise TypeError("Invalid argument type") + + GRIB_CHECK(_internal.grib_c_set_key_vals(gribid,keyValsString)) + +@require(gribid=int,key=str) +def grib_is_missing(gribid,key): + """ + @brief Check if the value of a key is MISSING. + + The value of a key is considered as MISSING when all the bits assigned to it + are set to 1. This is different from the actual key missing from the grib message. + The value of a key MISSING has a special significance and that can be read about + in the WMO documentation. + + @param gribid id of the grib loaded in memory + @param key key name + @return 0->not missing, 1->missing + @exception GribInternalError + """ + err,value = _internal.grib_c_is_missing(gribid,key) + GRIB_CHECK(err) + return value + +@require(gribid=int,key=str) +def grib_is_defined(gribid,key): + """ + @brief Check if a key is defined (exists) + @param gribid id of the grib loaded in memory + @param key key name + @return 0->not defined, 1->defined + @exception GribInternalError + """ + err,value = _internal.grib_c_is_defined(gribid,key) + GRIB_CHECK(err) + return value + +@require(gribid=int,inlat=(int,float),inlon=(int,float)) +def grib_find_nearest(gribid,inlat,inlon,is_lsm = False,npoints = 1): + """ + @brief Find the nearest grid point or the nearest four grid points to a given latitude/longitude. + + The number of nearest points returned can be controled through the npoints function argument. + + \b Examples: \ref nearest.py "nearest.py" + + @param gribid id of the grib loaded in memory + @param inlat latitude of the point + @param inlon longitude of the point + @param is_lsm True if the nearest land point is required otherwise False. + @param npoints 1 or 4 nearest grid points + @return (npoints*(outlat,outlon,value,dist,index)) + @exception GribInternalError + """ + if npoints == 1: + err,outlat,outlon,value,dist,idx = _internal.grib_c_find_nearest_single(gribid,is_lsm,inlat,inlon) + GRIB_CHECK(err) + return (Bunch(lat = outlat,lon = outlon,value = value,distance = dist,index = idx),) + elif npoints == 4: + poutlat = _internal.new_doubleArray(4) + poutlon = _internal.new_doubleArray(4) + pvalues = _internal.new_doubleArray(4) + pdist = _internal.new_doubleArray(4) + pidx = _internal.new_intArray(4) + + GRIB_CHECK(_internal.grib_c_find_nearest_four_single(gribid,is_lsm,inlat,inlon,poutlat,poutlon,pvalues,pdist,pidx)) + + result = [] + for i in range(4): + result.append(Bunch( \ + lat = _internal.doubleArray_getitem(poutlat,i), \ + lon = _internal.doubleArray_getitem(poutlon,i), \ + value = _internal.doubleArray_getitem(pvalues,i), \ + distance = _internal.doubleArray_getitem(pdist,i), \ + index = _internal.intArray_getitem(pidx,i), \ + )) + + _internal.delete_doubleArray(poutlat) + _internal.delete_doubleArray(poutlon) + _internal.delete_doubleArray(pvalues) + _internal.delete_doubleArray(pdist) + _internal.delete_intArray(pidx) + + return tuple(result) + else: + raise ValueError("Invalid value for npoints. Expecting 1 or 4.") + +@require(gribid=int,key=str) +def grib_get_native_type(gribid,key): + """ + @brief Retrieve the native type of a key. + + Possible values can be int, float or string. + + @param gribid id of the grib loaded in memory + @param key key we want to find out the type for + @return type of key given as input or None if not determined + @exception GribInternalError + """ + err,itype = _internal.grib_c_get_native_type(gribid,key) + GRIB_CHECK(err) + if itype in KEYTYPES: + return KEYTYPES[itype] + else: + return None + +@require(gribid=int,key=str) +def grib_get(gribid,key, ktype=None): + """ + @brief Get the value of a key in a grib message. + + The type of value returned depends on the native type of the requested key. + The type of value returned can be forced by using the type argument of the + function. The type argument can be int, float or str. + + The \em gribid references a grib message loaded in memory. + + \b Examples: \ref get.py "get.py", \ref print_data.py "print_data.py" + + @see grib_new_from_file, grib_release, grib_set + + @param gribid id of the grib loaded in memory + @param key key name + @param ktype the type we want the output in (int, float or str), native type if not specified + @return scalar value of key as int, float or str + @exception GribInternalError + """ + if ktype is None: + ktype = grib_get_native_type(gribid,key) + + result = None + if ktype is int: + result = grib_get_long(gribid,key) + elif ktype is float: + result = grib_get_double(gribid,key) + elif ktype is str: + result = grib_get_string(gribid,key) + + return result + +@require(gribid=int,key=str) +def grib_get_array(gribid,key, ktype=None): + """ + @brief Get the contents of an array key. + + The output array will be stored in a NumPy ndarray or array. + The type of the array returned depends on the native type of the requested key. + The type of value returned can be forced by using the type argument of the function. + The type argument can be int or float. + + @param gribid id of the grib loaded in memory + @param key the key to get the value for + @param ktype the type we want the output in (can be int or float), native type if not specified + @return numpy.ndarray or array + @exception GribInternalError + """ + if ktype is None: + ktype = grib_get_native_type(gribid,key) + + result = None + if ktype is int: + result = grib_get_long_array(gribid,key) + elif ktype is float: + result = grib_get_double_array(gribid,key) + + return result + +@require(gribid=int) +def grib_get_values(gribid): + """ + @brief Retrieve the contents of the 'values' key. + + A NumPy ndarray or Python array containing the values in the message is returned. + + \b Examples: \ref print_data.py "print_data.py", \ref samples.py "samples.py" + + @param gribid id of the grib loaded in memory + @return numpy.ndarray or array + @exception GribInternalError + """ + return grib_get_double_array(gribid,"values") + +@require(gribid=int) +def grib_set_values(gribid,values): + """ + @brief Set the contents of the 'values' key. + + The input array can be a numpy.ndarray or a python sequence like tuple, list, array, ... + + If NumPy is enabled, the wrapper will internally try to convert the input to a NumPy array + before extracting its data and length. This is possible as NumPy + allows the construction of arrays from arbitrary python sequences. + + The elements of the input sequence need to be convertible to a double. + + \b Examples: \ref clone.py "clone.py", \ref samples.py "samples.py" + + @param gribid id of the grib loaded in memory + @param values array of values to set as tuple, list, array or numpy.ndarray + """ + grib_set_double_array(gribid,"values",values) + +@require(gribid=int,key=str) +def grib_set(gribid,key,value): + """ + @brief Set the value for a scalar key in a grib message. + + The input value can be a python int, float or str. + + \b Examples: \ref set.py "set.py" + + @see grib_new_from_file, grib_release, grib_get + + @param gribid id of the grib loaded in memory + @param key key name + @param value scalar value to set for key + @exception GribInternalError + """ + if isinstance(value,int): + grib_set_long(gribid,key,value) + elif isinstance(value,float): + grib_set_double(gribid,key,value) + elif isinstance(value,str): + grib_set_string(gribid,key,value) + else: + raise GribInternalError("Invalid type of value when setting key '%s'." % key) + +@require(gribid=int,key=str) +def grib_set_array(gribid,key,value): + """ + @brief Set the value for an array key in a grib message. + + Some array keys can be "values","pl", "pv" respectively the data values, + the list of number of points for each latitude in a reduced grid and the list of + vertical levels. + + The input array can be a numpy.ndarray or a python sequence like tuple, list, array, ... + + If NumPy is enabled, the wrapper will internally try to convert the input to a NumPy array + before extracting its data and length. This is possible as NumPy + allows the construction of arrays from arbitrary python sequences. + + @param gribid id of the grib loaded in memory + @param key key name + @param value array value to set for key + @exception GribInternalError + + """ + val0 = None + try: + val0 = value[0] + except TypeError: + pass + + if isinstance(val0, int): + grib_set_long_array(gribid, key, value) + elif isinstance(val0, float): + grib_set_double_array(gribid, key, value) + else: + raise GribInternalError("Invalid type of value when setting key '%s'." % key) + +@require(indexid=int,key=str) +def grib_index_get(indexid,key, ktype=str): + """ + @brief Get the distinct values of an index key. The key must belong to the index. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. The index must have been created on the given key. + @param key key for which the values are returned + @return array of values + @exception GribInternalError + """ + # Cannot get the native type of a key from an index + # so right now the default is str. The user can overwrite + # the type but there is no way right now to do it automatically. + + #if ktype is None: + # ktype = grib_get_native_type(indexid,key) + + result = None + if ktype is int: + result = grib_index_get_long(indexid,key) + elif ktype is float: + result = grib_index_get_double(indexid,key) + elif ktype is str: + result = grib_index_get_string(indexid,key) + + return result + +@require(indexid=int,key=str) +def grib_index_select(indexid,key,value): + """ + @brief Select the message subset with key==value. + + \b Examples: \ref index.py "index.py" + + @param indexid id of an index created from a file. The index must have been created with the key in argument. + @param key key to be selected + @param value value of the key to select + @exception GribInternalError + """ + if isinstance(value,int): + grib_index_select_long(indexid,key,value) + elif isinstance(value,float): + grib_index_select_double(indexid,key,value) + elif isinstance(value,str): + grib_index_select_string(indexid,key,value) + else: + raise GribInternalError("Invalid type of value when setting key '%s'." % key) + +@require(indexid=int,filename=str) +def grib_index_write(indexid, filename): + """ + @brief Write an index to a file for later reuse. + + An index can be loaded back from an index file with \ref grib_index_read. + + \b Examples: \ref index.py "index.py" + + @param indexid id of the index + @param filename path of file to save the index to + @exception GribInternalError + """ + GRIB_CHECK(_internal.grib_c_index_write(indexid, filename)) + +@require(filename=str) +def grib_index_read(filename): + """ + @brief Loads an index previously saved with \ref grib_index_write to a file. + + \b Examples: \ref index.py "index.py" + + @param filename path of file to load the index from + @return id of the loaded index + @exception GribInternalError + """ + err,indexid = _internal.grib_c_index_read(filename) + GRIB_CHECK(err) + return indexid + +@require(flag=bool) +def grib_no_fail_on_wrong_length(flag): + """ + @brief Do not fail if the message has the wrong length. + + @param flag True/False + """ + if flag: + _internal.no_fail_on_wrong_length(1) + else: + _internal.no_fail_on_wrong_length(0) + +@require(flag=bool) +def grib_gts_header(flag): + """ + @brief Set the GTS header on/off. + + @param flag True/False + """ + if flag: + _internal.grib_c_gts_header_on() + else: + _internal.grib_c_gts_header_off() + +def grib_get_api_version(): + """ + @brief Get the api version. + + Returns the version of the api as a string in the format "major.minor.revision". + """ + div = lambda v,d: (v/d,v%d) + v = _internal.grib_c_get_api_version() + v,revision = div(v,100) + v,minor = div(v,100) + major = v + + return "%d.%d.%d" % (major,minor,revision) + +__version__ = grib_get_api_version() + +@require(gribid=int) +def grib_get_message(gribid): + """ + @brief Get the binary message. + + Returns the binary string message associated with the grib identified by gribid. + + @see grib_new_from_message + + @param gribid id of the grib loaded in memory + @return binary string message associated with gribid + @exception GribInternalError + """ + error,message = _internal.grib_c_get_message(gribid) + GRIB_CHECK(error) + return message + +@require(message=str) +def grib_new_from_message(message): + """ + @brief Create a grib handle from a message in memory. + + Create a new grib message from the input binary string and return its grib id. + + @see grib_get_message + + @param message binary string message + @return gribid of the newly created grib message + @exception GribInternalError + """ + error,gribid = _internal.grib_c_new_from_message(0,message,len(message)) + GRIB_CHECK(error) + return gribid + diff --git a/python/gribapi_swig.i b/python/gribapi_swig.i new file mode 100644 index 000000000..efc23d4fb --- /dev/null +++ b/python/gribapi_swig.i @@ -0,0 +1,208 @@ +%module gribapi_swig + +%include "cpointer.i" +%include "cstring.i" +%include "typemaps.i" +%include "cdata.i" +%include "carrays.i" +%include "grib_errors.h" + +%{ +#define SWIG_FILE_WITH_INIT +#include "grib_interface.h" +%} + +#if defined(NUMPY) + +%include "numpy.i" +%init %{ +import_array(); +%} + +#endif + +/* Converts a PyFile instance to a stdio FILE* */ +%typemap(in) FILE* { + if ( PyFile_Check($input) ){ + $1 = PyFile_AsFile($input); + } else { + PyErr_SetString(PyExc_TypeError, "$1_name must be a file type."); + return NULL; + } +} + +%pointer_class(int, intp); +%pointer_class(long, longp); +%pointer_class(double, doublep); +%array_functions(double, doubleArray); +%array_functions(long, longArray); +%array_functions(int, intArray); + +// creation +int grib_c_new_from_file(FILE* f, int* INOUT, int headers_only); +int grib_c_new_bufr_from_file(FILE* f, int* INOUT); +int grib_c_new_gts_from_file(FILE* f, int* INOUT); +int grib_c_iterator_new(int* INPUT, int* OUTPUT, int* INPUT); +int grib_c_keys_iterator_new(int* INPUT, int* OUTPUT, char* name_space); +int grib_c_new_from_samples(int* INOUT, char* name); +int grib_c_index_new_from_file(char* file, char* keys, int* OUTPUT); +int grib_c_index_add_file(int* INPUT, char* file); +int grib_c_new_from_index(int *INPUT, int *INOUT); +int grib_c_index_write(int* INPUT, char* file); +int grib_c_index_read(char* file, int* OUTPUT); +int grib_c_new_from_message(int *INOUT, char *binmsg, size_t *INPUT); +// --- + +%apply int* INPUT { int* fid }; +%apply int* INPUT { int* gid }; +%apply int* INPUT { int* iterid }; +%apply int* INPUT { int* iid }; + +// file operations +int grib_c_count_in_file(FILE* f,int* OUTPUT); +// --- + +// grib handle operations +int grib_c_release(int* gid); +int grib_c_write(int* gid, FILE* f); +int grib_c_get_size_long(int* gid, char* key, long* OUTPUT); +int grib_c_get_string_length(int* gid, char* key, size_t* OUTPUT); +int grib_c_clone(int* gid,int* INOUT); +int grib_c_copy_namespace(int* gid, char* name, int* INPUT); +int grib_c_get_message_size(int* gid, size_t* OUTPUT); +int grib_c_get_native_type(int* gid, char* key, int* OUTPUT); +// --- + +// multi support +int grib_c_multi_new(int* OUTPUT); +int grib_c_multi_support_on(void); +int grib_c_multi_write(int* gid, FILE* f); +int grib_c_multi_support_off(void); +int grib_c_multi_release(int* gid); +int grib_c_multi_append(int* INPUT, int* INPUT,int* INPUT); +// --- + +// gribex support +int grib_c_gribex_mode_on(void); +int grib_c_gribex_mode_off(void); +// --- + +// keys iterator +int grib_c_keys_iterator_next(int* iterid); +int grib_c_keys_iterator_delete(int* iterid); +int grib_c_skip_computed(int* iterid); +int grib_c_skip_coded(int* iterid); +int grib_c_skip_edition_specific(int* iterid); +int grib_c_skip_duplicates(int* iterid); +int grib_c_skip_read_only(int* iterid); +int grib_c_skip_function(int* iterid); +int grib_c_keys_iterator_rewind(int* iterid); + +%cstring_bounded_output(char* name, 1024); +int grib_c_keys_iterator_get_name(int* iterid, char* name, int len); +// --- + +// indexing routines +int grib_c_index_get_size_long(int* iid, char* key, long* OUTPUT); +int grib_c_index_get_long(int* iid, char* key, long* val, int* size); +int grib_c_index_get_real8(int* iid, char* key, double* val, int* size); +%cstring_bounded_output(char* index_string_output, 1024*1024); +int grib_c_index_get_string(int* iid, char* key, char* index_string_output, int* INPUT, int* INOUT); +int grib_c_index_select_long(int *iid, char *key, long *INPUT); +int grib_c_index_select_real8(int *iid, char *key, double *INPUT); +int grib_c_index_select_string(int *iid, char *key, char *val); +int grib_c_index_release(int* iid); +// --- + +// values iterator +int grib_c_iterator_delete(int* iterid); +int grib_c_iterator_next(int* iterid, double* OUTPUT, double* OUTPUT, double* OUTPUT); +// --- + +// getting/setting key values +%cstring_output_withsize(char* string_val, size_t* string_size) +int grib_c_get_string(int* gid, char* key, char* string_val, size_t* string_size); +int grib_c_set_string(int* gid, char* key, char* sval, int len2); +int grib_c_get_long(int* gid, char* key, long* OUTPUT); +int grib_c_set_long(int* gid, char* key, long* INPUT); +int grib_c_get_double(int* gid, char* key, double* OUTPUT); +int grib_c_set_double(int* gid, char* key, double* INPUT); +int grib_c_set_real8_array(int* gid, char* key, double* val, int* size); +int grib_c_get_real8_array(int* gid, char* key, double* val, int* size); +int grib_c_get_long_array(int* gid, char* key, long* val, int* size); +int grib_c_set_long_array(int* gid, char* key, long* val, int* size); +int grib_c_get_real8_element(int* gid, char* key, int* INPUT, double* OUTPUT); +int grib_c_get_real8_elements(int* gid, char* key, int* index, double* val, int* size); +int grib_c_set_missing(int* gid, char* key); +int grib_c_set_key_vals(int* gid, char* keyvals); +int grib_c_is_missing(int* gid, char* key, int* OUTPUT); +int grib_c_is_defined(int* gid, char* key, int* OUTPUT); + +#if defined(NUMPY) + +%apply (double* IN_ARRAY1, int DIM1) {(double* dpin_val, int dpin_val_dim1)}; +%apply (long* IN_ARRAY1, int DIM1) {(long* lpin_val, int lpin_val_dim1)}; +%apply (int* IN_ARRAY1, int DIM1) {(int* ipin_index, int ipin_index_dim1)}; +%apply (double* ARGOUT_ARRAY1, int DIM1) {(double* dpout_val, int dpout_val_dim1)}; +%apply (long* ARGOUT_ARRAY1, int DIM1) {(long* lpout_val, int lpout_val_dim1)}; + +%inline %{ +void with_numpy() { + return; +} +int grib_set_double_ndarray(int* gid, char* key, double* dpin_val, int dpin_val_dim1) { + return grib_c_set_real8_array(gid,key,dpin_val,&dpin_val_dim1); +} +int grib_set_long_ndarray(int* gid, char* key, long* lpin_val, int lpin_val_dim1) { + return grib_c_set_long_array(gid,key,lpin_val,&lpin_val_dim1); +} +int grib_get_double_ndarray(int* gid, char* key, double* dpout_val, int dpout_val_dim1) { + return grib_c_get_real8_array(gid,key,dpout_val,&dpout_val_dim1); +} +int grib_get_long_ndarray(int* gid, char* key, long* lpout_val, int lpout_val_dim1) { + return grib_c_get_long_array(gid,key,lpout_val,&lpout_val_dim1); +} +int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_index_dim1, double* dpout_val, int dpout_val_dim1) { + return grib_c_get_real8_elements(gid,key,ipin_index,dpout_val,&dpout_val_dim1); +} +%} +%clear double* dpin_val, int dpin_val_dim1; +%clear long* lpin_val, int lpin_val_dim1; +%clear int* ipout_val, int ipout_val_dim1; +%clear double* dpout_val, int dpout_val_dim1; +%clear long* lpout_val, int lpout_val_dim1; + +#endif +// --- + +// nearest +int grib_c_find_nearest_single(int* gid, int* INPUT, double* INPUT, double* INPUT, double* OUTPUT, double* OUTPUT, double* OUTPUT, double* OUTPUT, int* OUTPUT); +int grib_c_find_nearest_four_single(int* gid, int* INPUT, double* INPUT, double* INPUT, double* outlats, double* outlons, double* values, double* distances, int* indexes); +// --- + +/* +* Get the binary string message for a grib. +* +* Set the 3rd argument to nothing in 'cstring_output_allocate_size'. +* This is kind of difficult to explain, but, *msg will point directly to +* the binary message data of the current grib (which is stored in +* handle->buffer->data if I remember correctly) so freeing it will cause +* the binary message data in the grib_handle structure to be freed. This +* is a problem as grib_api does not know that, so it tries to free it +* itself (grib_release does that) resulting in a 'Segmentation fault'. +*/ +%cstring_output_allocate_size(const void **binmsg, size_t *binmsglen,); +int grib_c_get_message(int *gid, const void **binmsg, size_t *binmsglen); +%clear const void **binmsg, size_t *binmsglen; + +%clear int* fid; +%clear int* gid; +%clear int* iterid; + +%cstring_bounded_output(char* error_message, 1024); +int grib_c_get_error_string(int* INPUT, char* error_message, int len); + +void no_fail_on_wrong_length(int flag); +long grib_c_get_api_version(); +void grib_c_gts_header_on(); +void grib_c_gts_header_off(); diff --git a/python/numpy.i b/python/numpy.i new file mode 100644 index 000000000..e3ff236aa --- /dev/null +++ b/python/numpy.i @@ -0,0 +1,1634 @@ +/* -*- C -*- (not really, but good for syntax highlighting) */ +#ifdef SWIGPYTHON + +%{ +#ifndef SWIG_FILE_WITH_INIT +# define NO_IMPORT_ARRAY +#endif +#include "stdio.h" +#include +%} + +/**********************************************************************/ + +%fragment("NumPy_Backward_Compatibility", "header") +{ +/* Support older NumPy data type names +*/ +%#if NDARRAY_VERSION < 0x01000000 +%#define NPY_BOOL PyArray_BOOL +%#define NPY_BYTE PyArray_BYTE +%#define NPY_UBYTE PyArray_UBYTE +%#define NPY_SHORT PyArray_SHORT +%#define NPY_USHORT PyArray_USHORT +%#define NPY_INT PyArray_INT +%#define NPY_UINT PyArray_UINT +%#define NPY_LONG PyArray_LONG +%#define NPY_ULONG PyArray_ULONG +%#define NPY_LONGLONG PyArray_LONGLONG +%#define NPY_ULONGLONG PyArray_ULONGLONG +%#define NPY_FLOAT PyArray_FLOAT +%#define NPY_DOUBLE PyArray_DOUBLE +%#define NPY_LONGDOUBLE PyArray_LONGDOUBLE +%#define NPY_CFLOAT PyArray_CFLOAT +%#define NPY_CDOUBLE PyArray_CDOUBLE +%#define NPY_CLONGDOUBLE PyArray_CLONGDOUBLE +%#define NPY_OBJECT PyArray_OBJECT +%#define NPY_STRING PyArray_STRING +%#define NPY_UNICODE PyArray_UNICODE +%#define NPY_VOID PyArray_VOID +%#define NPY_NTYPES PyArray_NTYPES +%#define NPY_NOTYPE PyArray_NOTYPE +%#define NPY_CHAR PyArray_CHAR +%#define NPY_USERDEF PyArray_USERDEF +%#define npy_intp intp + +%#define NPY_MAX_BYTE MAX_BYTE +%#define NPY_MIN_BYTE MIN_BYTE +%#define NPY_MAX_UBYTE MAX_UBYTE +%#define NPY_MAX_SHORT MAX_SHORT +%#define NPY_MIN_SHORT MIN_SHORT +%#define NPY_MAX_USHORT MAX_USHORT +%#define NPY_MAX_INT MAX_INT +%#define NPY_MIN_INT MIN_INT +%#define NPY_MAX_UINT MAX_UINT +%#define NPY_MAX_LONG MAX_LONG +%#define NPY_MIN_LONG MIN_LONG +%#define NPY_MAX_ULONG MAX_ULONG +%#define NPY_MAX_LONGLONG MAX_LONGLONG +%#define NPY_MIN_LONGLONG MIN_LONGLONG +%#define NPY_MAX_ULONGLONG MAX_ULONGLONG +%#define NPY_MAX_INTP MAX_INTP +%#define NPY_MIN_INTP MIN_INTP + +%#define NPY_FARRAY FARRAY +%#define NPY_F_CONTIGUOUS F_CONTIGUOUS +%#endif +} + +/**********************************************************************/ + +/* The following code originally appeared in + * enthought/kiva/agg/src/numeric.i written by Eric Jones. It was + * translated from C++ to C by John Hunter. Bill Spotz has modified + * it to fix some minor bugs, upgrade from Numeric to numpy (all + * versions), add some comments and functionality, and convert from + * direct code insertion to SWIG fragments. + */ + +%fragment("NumPy_Macros", "header") +{ +/* Macros to extract array attributes. + */ +%#define is_array(a) ((a) && PyArray_Check((PyArrayObject *)a)) +%#define array_type(a) (int)(PyArray_TYPE(a)) +%#define array_numdims(a) (((PyArrayObject *)a)->nd) +%#define array_dimensions(a) (((PyArrayObject *)a)->dimensions) +%#define array_size(a,i) (((PyArrayObject *)a)->dimensions[i]) +%#define array_data(a) (((PyArrayObject *)a)->data) +%#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS(a)) +%#define array_is_native(a) (PyArray_ISNOTSWAPPED(a)) +%#define array_is_fortran(a) (PyArray_ISFORTRAN(a)) +} + +/**********************************************************************/ + +%fragment("NumPy_Utilities", "header") +{ + /* Given a PyObject, return a string describing its type. + */ + const char* pytype_string(PyObject* py_obj) { + if (py_obj == NULL ) return "C NULL value"; + if (py_obj == Py_None ) return "Python None" ; + if (PyCallable_Check(py_obj)) return "callable" ; + if (PyString_Check( py_obj)) return "string" ; + if (PyInt_Check( py_obj)) return "int" ; + if (PyFloat_Check( py_obj)) return "float" ; + if (PyDict_Check( py_obj)) return "dict" ; + if (PyList_Check( py_obj)) return "list" ; + if (PyTuple_Check( py_obj)) return "tuple" ; + if (PyFile_Check( py_obj)) return "file" ; + if (PyModule_Check( py_obj)) return "module" ; + if (PyInstance_Check(py_obj)) return "instance" ; + + return "unkown type"; + } + + /* Given a NumPy typecode, return a string describing the type. + */ + const char* typecode_string(int typecode) { + static const char* type_names[25] = {"bool", "byte", "unsigned byte", + "short", "unsigned short", "int", + "unsigned int", "long", "unsigned long", + "long long", "unsigned long long", + "float", "double", "long double", + "complex float", "complex double", + "complex long double", "object", + "string", "unicode", "void", "ntypes", + "notype", "char", "unknown"}; + return typecode < 24 ? type_names[typecode] : type_names[24]; + } + + /* Make sure input has correct numpy type. Allow character and byte + * to match. Also allow int and long to match. This is deprecated. + * You should use PyArray_EquivTypenums() instead. + */ + int type_match(int actual_type, int desired_type) { + return PyArray_EquivTypenums(actual_type, desired_type); + } +} + +/**********************************************************************/ + +%fragment("NumPy_Object_to_Array", "header", + fragment="NumPy_Backward_Compatibility", + fragment="NumPy_Macros", + fragment="NumPy_Utilities") +{ + /* Given a PyObject pointer, cast it to a PyArrayObject pointer if + * legal. If not, set the python error string appropriately and + * return NULL. + */ + PyArrayObject* obj_to_array_no_conversion(PyObject* input, int typecode) + { + PyArrayObject* ary = NULL; + if (is_array(input) && (typecode == NPY_NOTYPE || + PyArray_EquivTypenums(array_type(input), typecode))) + { + ary = (PyArrayObject*) input; + } + else if is_array(input) + { + const char* desired_type = typecode_string(typecode); + const char* actual_type = typecode_string(array_type(input)); + PyErr_Format(PyExc_TypeError, + "Array of type '%s' required. Array of type '%s' given", + desired_type, actual_type); + ary = NULL; + } + else + { + const char * desired_type = typecode_string(typecode); + const char * actual_type = pytype_string(input); + PyErr_Format(PyExc_TypeError, + "Array of type '%s' required. A '%s' was given", + desired_type, actual_type); + ary = NULL; + } + return ary; + } + + /* Convert the given PyObject to a NumPy array with the given + * typecode. On success, return a valid PyArrayObject* with the + * correct type. On failure, the python error string will be set and + * the routine returns NULL. + */ + PyArrayObject* obj_to_array_allow_conversion(PyObject* input, int typecode, + int* is_new_object) + { + PyArrayObject* ary = NULL; + PyObject* py_obj; + if (is_array(input) && (typecode == NPY_NOTYPE || + PyArray_EquivTypenums(array_type(input),typecode))) + { + ary = (PyArrayObject*) input; + *is_new_object = 0; + } + else + { + py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_DEFAULT); + /* If NULL, PyArray_FromObject will have set python error value.*/ + ary = (PyArrayObject*) py_obj; + *is_new_object = 1; + } + return ary; + } + + /* Given a PyArrayObject, check to see if it is contiguous. If so, + * return the input pointer and flag it as not a new object. If it is + * not contiguous, create a new PyArrayObject using the original data, + * flag it as a new object and return the pointer. + */ + PyArrayObject* make_contiguous(PyArrayObject* ary, int* is_new_object, + int min_dims, int max_dims) + { + PyArrayObject* result; + if (array_is_contiguous(ary)) + { + result = ary; + *is_new_object = 0; + } + else + { + result = (PyArrayObject*) PyArray_ContiguousFromObject((PyObject*)ary, + array_type(ary), + min_dims, + max_dims); + *is_new_object = 1; + } + return result; + } + + /* Given a PyArrayObject, check to see if it is Fortran-contiguous. + * If so, return the input pointer, but do not flag it as not a new + * object. If it is not Fortran-contiguous, create a new + * PyArrayObject using the original data, flag it as a new object + * and return the pointer. + */ + PyArrayObject* make_fortran(PyArrayObject* ary, int* is_new_object, + int min_dims, int max_dims) + { + PyArrayObject* result; + if (array_is_fortran(ary)) + { + result = ary; + *is_new_object = 0; + } + else + { + Py_INCREF(ary->descr); + result = (PyArrayObject*) PyArray_FromArray(ary, ary->descr, NPY_FORTRAN); + *is_new_object = 1; + } + return result; + } + + /* Convert a given PyObject to a contiguous PyArrayObject of the + * specified type. If the input object is not a contiguous + * PyArrayObject, a new one will be created and the new object flag + * will be set. + */ + PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input, + int typecode, + int* is_new_object) + { + int is_new1 = 0; + int is_new2 = 0; + PyArrayObject* ary2; + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode, + &is_new1); + if (ary1) + { + ary2 = make_contiguous(ary1, &is_new2, 0, 0); + if ( is_new1 && is_new2) + { + Py_DECREF(ary1); + } + ary1 = ary2; + } + *is_new_object = is_new1 || is_new2; + return ary1; + } + + /* Convert a given PyObject to a Fortran-ordered PyArrayObject of the + * specified type. If the input object is not a Fortran-ordered + * PyArrayObject, a new one will be created and the new object flag + * will be set. + */ + PyArrayObject* obj_to_array_fortran_allow_conversion(PyObject* input, + int typecode, + int* is_new_object) + { + int is_new1 = 0; + int is_new2 = 0; + PyArrayObject* ary2; + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode, + &is_new1); + if (ary1) + { + ary2 = make_fortran(ary1, &is_new2, 0, 0); + if (is_new1 && is_new2) + { + Py_DECREF(ary1); + } + ary1 = ary2; + } + *is_new_object = is_new1 || is_new2; + return ary1; + } + +} /* end fragment */ + + +/**********************************************************************/ + +%fragment("NumPy_Array_Requirements", "header", + fragment="NumPy_Backward_Compatibility", + fragment="NumPy_Macros") +{ + /* Test whether a python object is contiguous. If array is + * contiguous, return 1. Otherwise, set the python error string and + * return 0. + */ + int require_contiguous(PyArrayObject* ary) + { + int contiguous = 1; + if (!array_is_contiguous(ary)) + { + PyErr_SetString(PyExc_TypeError, + "Array must be contiguous. A non-contiguous array was given"); + contiguous = 0; + } + return contiguous; + } + + /* Require that a numpy array is not byte-swapped. If the array is + * not byte-swapped, return 1. Otherwise, set the python error string + * and return 0. + */ + int require_native(PyArrayObject* ary) + { + int native = 1; + if (!array_is_native(ary)) + { + PyErr_SetString(PyExc_TypeError, + "Array must have native byteorder. " + "A byte-swapped array was given"); + native = 0; + } + return native; + } + + /* Require the given PyArrayObject to have a specified number of + * dimensions. If the array has the specified number of dimensions, + * return 1. Otherwise, set the python error string and return 0. + */ + int require_dimensions(PyArrayObject* ary, int exact_dimensions) + { + int success = 1; + if (array_numdims(ary) != exact_dimensions) + { + PyErr_Format(PyExc_TypeError, + "Array must have %d dimensions. Given array has %d dimensions", + exact_dimensions, array_numdims(ary)); + success = 0; + } + return success; + } + + /* Require the given PyArrayObject to have one of a list of specified + * number of dimensions. If the array has one of the specified number + * of dimensions, return 1. Otherwise, set the python error string + * and return 0. + */ + int require_dimensions_n(PyArrayObject* ary, int* exact_dimensions, int n) + { + int success = 0; + int i; + char dims_str[255] = ""; + char s[255]; + for (i = 0; i < n && !success; i++) + { + if (array_numdims(ary) == exact_dimensions[i]) + { + success = 1; + } + } + if (!success) + { + for (i = 0; i < n-1; i++) + { + sprintf(s, "%d, ", exact_dimensions[i]); + strcat(dims_str,s); + } + sprintf(s, " or %d", exact_dimensions[n-1]); + strcat(dims_str,s); + PyErr_Format(PyExc_TypeError, + "Array must have %s dimensions. Given array has %d dimensions", + dims_str, array_numdims(ary)); + } + return success; + } + + /* Require the given PyArrayObject to have a specified shape. If the + * array has the specified shape, return 1. Otherwise, set the python + * error string and return 0. + */ + int require_size(PyArrayObject* ary, npy_intp* size, int n) + { + int i; + int success = 1; + int len; + char desired_dims[255] = "["; + char s[255]; + char actual_dims[255] = "["; + for(i=0; i < n;i++) + { + if (size[i] != -1 && size[i] != array_size(ary,i)) + { + success = 0; + } + } + if (!success) + { + for (i = 0; i < n; i++) + { + if (size[i] == -1) + { + sprintf(s, "*,"); + } + else + { + sprintf(s, "%ld,", (long int)size[i]); + } + strcat(desired_dims,s); + } + len = strlen(desired_dims); + desired_dims[len-1] = ']'; + for (i = 0; i < n; i++) + { + sprintf(s, "%ld,", (long int)array_size(ary,i)); + strcat(actual_dims,s); + } + len = strlen(actual_dims); + actual_dims[len-1] = ']'; + PyErr_Format(PyExc_TypeError, + "Array must have shape of %s. Given array has shape of %s", + desired_dims, actual_dims); + } + return success; + } + + /* Require the given PyArrayObject to to be FORTRAN ordered. If the + * the PyArrayObject is already FORTRAN ordered, do nothing. Else, + * set the FORTRAN ordering flag and recompute the strides. + */ + int require_fortran(PyArrayObject* ary) + { + int success = 1; + int nd = array_numdims(ary); + int i; + if (array_is_fortran(ary)) return success; + /* Set the FORTRAN ordered flag */ + ary->flags = NPY_FARRAY; + /* Recompute the strides */ + ary->strides[0] = ary->strides[nd-1]; + for (i=1; i < nd; ++i) + ary->strides[i] = ary->strides[i-1] * array_size(ary,i-1); + return success; + } +} + +/* Combine all NumPy fragments into one for convenience */ +%fragment("NumPy_Fragments", "header", + fragment="NumPy_Backward_Compatibility", + fragment="NumPy_Macros", + fragment="NumPy_Utilities", + fragment="NumPy_Object_to_Array", + fragment="NumPy_Array_Requirements") { } + +/* End John Hunter translation (with modifications by Bill Spotz) + */ + +/* %numpy_typemaps() macro + * + * This macro defines a family of 41 typemaps that allow C arguments + * of the form + * + * (DATA_TYPE IN_ARRAY1[ANY]) + * (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) + * (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) + * + * (DATA_TYPE IN_ARRAY2[ANY][ANY]) + * (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) + * (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) + * + * (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) + * (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) + * (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3) + * + * (DATA_TYPE INPLACE_ARRAY1[ANY]) + * (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) + * (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) + * + * (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) + * (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) + * (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2) + * + * (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) + * (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3) + * (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + * (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3) + * + * (DATA_TYPE ARGOUT_ARRAY1[ANY]) + * (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) + * (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) + * + * (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) + * + * (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) + * + * (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1) + * (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1) + * + * (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + * (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2) + * (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + * (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2) + * + * (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + * (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3) + * (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + * (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3) + * + * where "DATA_TYPE" is any type supported by the NumPy module, and + * "DIM_TYPE" is any int-like type suitable for specifying dimensions. + * The difference between "ARRAY" typemaps and "FARRAY" typemaps is + * that the "FARRAY" typemaps expect FORTRAN ordering of + * multidimensional arrays. In python, the dimensions will not need + * to be specified (except for the "DATA_TYPE* ARGOUT_ARRAY1" + * typemaps). The IN_ARRAYs can be a numpy array or any sequence that + * can be converted to a numpy array of the specified type. The + * INPLACE_ARRAYs must be numpy arrays of the appropriate type. The + * ARGOUT_ARRAYs will be returned as new numpy arrays of the + * appropriate type. + * + * These typemaps can be applied to existing functions using the + * %apply directive. For example: + * + * %apply (double* IN_ARRAY1, int DIM1) {(double* series, int length)}; + * double prod(double* series, int length); + * + * %apply (int DIM1, int DIM2, double* INPLACE_ARRAY2) + * {(int rows, int cols, double* matrix )}; + * void floor(int rows, int cols, double* matrix, double f); + * + * %apply (double IN_ARRAY3[ANY][ANY][ANY]) + * {(double tensor[2][2][2] )}; + * %apply (double ARGOUT_ARRAY3[ANY][ANY][ANY]) + * {(double low[2][2][2] )}; + * %apply (double ARGOUT_ARRAY3[ANY][ANY][ANY]) + * {(double upp[2][2][2] )}; + * void luSplit(double tensor[2][2][2], + * double low[2][2][2], + * double upp[2][2][2] ); + * + * or directly with + * + * double prod(double* IN_ARRAY1, int DIM1); + * + * void floor(int DIM1, int DIM2, double* INPLACE_ARRAY2, double f); + * + * void luSplit(double IN_ARRAY3[ANY][ANY][ANY], + * double ARGOUT_ARRAY3[ANY][ANY][ANY], + * double ARGOUT_ARRAY3[ANY][ANY][ANY]); + */ + +%define %numpy_typemaps(DATA_TYPE, DATA_TYPECODE, DIM_TYPE) + +/************************/ +/* Input Array Typemaps */ +/************************/ + +/* Typemap suite for (DATA_TYPE IN_ARRAY1[ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE IN_ARRAY1[ANY]) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE IN_ARRAY1[ANY]) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[1] = { $1_dim0 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 1) || + !require_size(array, size, 1)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(freearg) + (DATA_TYPE IN_ARRAY1[ANY]) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[1] = { -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 1) || + !require_size(array, size, 1)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); +} +%typemap(freearg) + (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[1] = {-1}; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 1) || + !require_size(array, size, 1)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE IN_ARRAY2[ANY][ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE IN_ARRAY2[ANY][ANY]) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE IN_ARRAY2[ANY][ANY]) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[2] = { $1_dim0, $1_dim1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 2) || + !require_size(array, size, 2)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(freearg) + (DATA_TYPE IN_ARRAY2[ANY][ANY]) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[2] = { -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 2) || + !require_size(array, size, 2)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); +} +%typemap(freearg) + (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[2] = { -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 2) || + !require_size(array, size, 2)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[2] = { -1, -1 }; + array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 2) || + !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); +} +%typemap(freearg) + (DATA_TYPE* IN_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[2] = { -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 2) || + !require_size(array, size, 2) || !require_fortran(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_FARRAY2) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 3) || + !require_size(array, size, 3)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(freearg) + (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[3] = { -1, -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 3) || + !require_size(array, size, 3)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); +} +%typemap(freearg) + (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, + * DATA_TYPE* IN_ARRAY3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[3] = { -1, -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 3) || + !require_size(array, size, 3)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[3] = { -1, -1, -1 }; + array = obj_to_array_fortran_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 3) || + !require_size(array, size, 3) | !require_fortran(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); +} +%typemap(freearg) + (DATA_TYPE* IN_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, + * DATA_TYPE* IN_FARRAY3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3) +{ + $1 = is_array($input) || PySequence_Check($input); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3) + (PyArrayObject* array=NULL, int is_new_object=0) +{ + npy_intp size[3] = { -1, -1, -1 }; + array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, + &is_new_object); + if (!array || !require_dimensions(array, 3) || + !require_size(array, size, 3) || !require_fortran(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DATA_TYPE*) array_data(array); +} +%typemap(freearg) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_FARRAY3) +{ + if (is_new_object$argnum && array$argnum) + { Py_DECREF(array$argnum); } +} + +/***************************/ +/* In-Place Array Typemaps */ +/***************************/ + +/* Typemap suite for (DATA_TYPE INPLACE_ARRAY1[ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE INPLACE_ARRAY1[ANY]) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE INPLACE_ARRAY1[ANY]) + (PyArrayObject* array=NULL) +{ + npy_intp size[1] = { $1_dim0 }; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,1) || !require_size(array, size, 1) || + !require_contiguous(array) || !require_native(array)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) + (PyArrayObject* array=NULL, int i=1) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,1) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = 1; + for (i=0; i < array_numdims(array); ++i) $2 *= array_size(array,i); +} + +/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) + (PyArrayObject* array=NULL, int i=0) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,1) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = 1; + for (i=0; i < array_numdims(array); ++i) $1 *= array_size(array,i); + $2 = (DATA_TYPE*) array_data(array); +} + +/* Typemap suite for (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) + (PyArrayObject* array=NULL) +{ + npy_intp size[2] = { $1_dim0, $1_dim1 }; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_size(array, size, 2) || + !require_contiguous(array) || !require_native(array)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_contiguous(array) || + !require_native(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DATA_TYPE*) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_FARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_contiguous(array) + || !require_native(array) || !require_fortran(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_FARRAY2) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_contiguous(array) || + !require_native(array) || !require_fortran(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DATA_TYPE*) array_data(array); +} + +/* Typemap suite for (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) + (PyArrayObject* array=NULL) +{ + npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 }; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_size(array, size, 3) || + !require_contiguous(array) || !require_native(array)) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_contiguous(array) || + !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, + * DATA_TYPE* INPLACE_ARRAY3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DATA_TYPE*) array_data(array); +} + +/* Typemap suite for (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, + * DIM_TYPE DIM3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DATA_TYPE* INPLACE_FARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_contiguous(array) || + !require_native(array) || !require_fortran(array)) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); +} + +/* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, + * DATA_TYPE* INPLACE_FARRAY3) + */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY, + fragment="NumPy_Macros") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3) +{ + $1 = is_array($input) && PyArray_EquivTypenums(array_type($input), + DATA_TYPECODE); +} +%typemap(in, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_FARRAY3) + (PyArrayObject* array=NULL) +{ + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_contiguous(array) + || !require_native(array) || !require_fortran(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DATA_TYPE*) array_data(array); +} + +/*************************/ +/* Argout Array Typemaps */ +/*************************/ + +/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY1[ANY]) + */ +%typemap(in,numinputs=0, + fragment="NumPy_Backward_Compatibility,NumPy_Macros") + (DATA_TYPE ARGOUT_ARRAY1[ANY]) + (PyObject * array = NULL) +{ + npy_intp dims[1] = { $1_dim0 }; + array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(argout) + (DATA_TYPE ARGOUT_ARRAY1[ANY]) +{ + $result = SWIG_Python_AppendOutput($result,array$argnum); +} + +/* Typemap suite for (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) + */ +%typemap(in,numinputs=1, + fragment="NumPy_Fragments") + (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) + (PyObject * array = NULL) +{ + npy_intp dims[1]; + if (!PyInt_Check($input)) + { + const char* typestring = pytype_string($input); + PyErr_Format(PyExc_TypeError, + "Int dimension expected. '%s' given.", + typestring); + SWIG_fail; + } + $2 = (DIM_TYPE) PyInt_AsLong($input); + dims[0] = (npy_intp) $2; + array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $1 = (DATA_TYPE*) array_data(array); +} +%typemap(argout) + (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) +{ + $result = SWIG_Python_AppendOutput($result,array$argnum); +} + +/* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) + */ +%typemap(in,numinputs=1, + fragment="NumPy_Fragments") + (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) + (PyObject * array = NULL) +{ + npy_intp dims[1]; + if (!PyInt_Check($input)) + { + const char* typestring = pytype_string($input); + PyErr_Format(PyExc_TypeError, + "Int dimension expected. '%s' given.", + typestring); + SWIG_fail; + } + $1 = (DIM_TYPE) PyInt_AsLong($input); + dims[0] = (npy_intp) $1; + array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $2 = (DATA_TYPE*) array_data(array); +} +%typemap(argout) + (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) +{ + $result = SWIG_Python_AppendOutput($result,array$argnum); +} + +/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) + */ +%typemap(in,numinputs=0, + fragment="NumPy_Backward_Compatibility,NumPy_Macros") + (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) + (PyObject * array = NULL) +{ + npy_intp dims[2] = { $1_dim0, $1_dim1 }; + array = PyArray_SimpleNew(2, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(argout) + (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) +{ + $result = SWIG_Python_AppendOutput($result,array$argnum); +} + +/* Typemap suite for (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) + */ +%typemap(in,numinputs=0, + fragment="NumPy_Backward_Compatibility,NumPy_Macros") + (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) + (PyObject * array = NULL) +{ + npy_intp dims[3] = { $1_dim0, $1_dim1, $1_dim2 }; + array = PyArray_SimpleNew(3, dims, DATA_TYPECODE); + if (!array) SWIG_fail; + $1 = ($1_ltype) array_data(array); +} +%typemap(argout) + (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) +{ + $result = SWIG_Python_AppendOutput($result,array$argnum); +} + +/*****************************/ +/* Argoutview Array Typemaps */ +/*****************************/ + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1 ) + (DATA_TYPE* data_temp , DIM_TYPE dim_temp) +{ + $1 = &data_temp; + $2 = &dim_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DATA_TYPE** ARGOUTVIEW_ARRAY1, DIM_TYPE* DIM1) +{ + npy_intp dims[1] = { *$2 }; + PyObject * array = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$1)); + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,array); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DATA_TYPE** ARGOUTVIEW_ARRAY1) + (DIM_TYPE dim_temp, DATA_TYPE* data_temp ) +{ + $1 = &dim_temp; + $2 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DIM_TYPE* DIM1, DATA_TYPE** ARGOUTVIEW_ARRAY1) +{ + npy_intp dims[1] = { *$1 }; + PyObject * array = PyArray_SimpleNewFromData(1, dims, DATA_TYPECODE, (void*)(*$2)); + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,array); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 ) + (DATA_TYPE* data_temp , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DATA_TYPE** ARGOUTVIEW_ARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) +{ + npy_intp dims[2] = { *$2, *$3 }; + PyObject * array = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,array); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DATA_TYPE** ARGOUTVIEW_ARRAY2) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_ARRAY2) +{ + npy_intp dims[2] = { *$1, *$2 }; + PyObject * array = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,array); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1 , DIM_TYPE* DIM2 ) + (DATA_TYPE* data_temp , DIM_TYPE dim1_temp, DIM_TYPE dim2_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") + (DATA_TYPE** ARGOUTVIEW_FARRAY2, DIM_TYPE* DIM1, DIM_TYPE* DIM2) +{ + npy_intp dims[2] = { *$2, *$3 }; + PyObject * obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject * array = (PyArrayObject*) obj; + if (!array || !require_fortran(array)) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1 , DIM_TYPE* DIM2 , DATA_TYPE** ARGOUTVIEW_FARRAY2) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DATA_TYPE* data_temp ) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DATA_TYPE** ARGOUTVIEW_FARRAY2) +{ + npy_intp dims[2] = { *$1, *$2 }; + PyObject * obj = PyArray_SimpleNewFromData(2, dims, DATA_TYPECODE, (void*)(*$3)); + PyArrayObject * array = (PyArrayObject*) obj; + if (!array || !require_fortran(array)) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + (DATA_TYPE* data_temp, DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DATA_TYPE** ARGOUTVIEW_ARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) +{ + npy_intp dims[3] = { *$2, *$3, *$4 }; + PyObject * array = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,array); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, + DATA_TYPE** ARGOUTVIEW_ARRAY3) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_ARRAY3) +{ + npy_intp dims[3] = { *$1, *$2, *$3 }; + PyObject * array = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$3)); + if (!array) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,array); +} + +/* Typemap suite for (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, + DIM_TYPE* DIM3) + */ +%typemap(in,numinputs=0) + (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) + (DATA_TYPE* data_temp, DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp) +{ + $1 = &data_temp; + $2 = &dim1_temp; + $3 = &dim2_temp; + $4 = &dim3_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") + (DATA_TYPE** ARGOUTVIEW_FARRAY3, DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3) +{ + npy_intp dims[3] = { *$2, *$3, *$4 }; + PyObject * obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$1)); + PyArrayObject * array = (PyArrayObject*) obj; + if (!array || require_fortran(array)) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +/* Typemap suite for (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, + DATA_TYPE** ARGOUTVIEW_FARRAY3) + */ +%typemap(in,numinputs=0) + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3) + (DIM_TYPE dim1_temp, DIM_TYPE dim2_temp, DIM_TYPE dim3_temp, DATA_TYPE* data_temp) +{ + $1 = &dim1_temp; + $2 = &dim2_temp; + $3 = &dim3_temp; + $4 = &data_temp; +} +%typemap(argout, + fragment="NumPy_Backward_Compatibility,NumPy_Array_Requirements") + (DIM_TYPE* DIM1, DIM_TYPE* DIM2, DIM_TYPE* DIM3, DATA_TYPE** ARGOUTVIEW_FARRAY3) +{ + npy_intp dims[3] = { *$1, *$2, *$3 }; + PyObject * obj = PyArray_SimpleNewFromData(3, dims, DATA_TYPECODE, (void*)(*$3)); + PyArrayObject * array = (PyArrayObject*) obj; + if (!array || require_fortran(array)) SWIG_fail; + $result = SWIG_Python_AppendOutput($result,obj); +} + +%enddef /* %numpy_typemaps() macro */ +/* *************************************************************** */ + +/* Concrete instances of the %numpy_typemaps() macro: Each invocation + * below applies all of the typemaps above to the specified data type. + */ +%numpy_typemaps(signed char , NPY_BYTE , int) +%numpy_typemaps(unsigned char , NPY_UBYTE , int) +%numpy_typemaps(short , NPY_SHORT , int) +%numpy_typemaps(unsigned short , NPY_USHORT , int) +%numpy_typemaps(int , NPY_INT , int) +%numpy_typemaps(unsigned int , NPY_UINT , int) +%numpy_typemaps(long , NPY_LONG , int) +%numpy_typemaps(unsigned long , NPY_ULONG , int) +%numpy_typemaps(long long , NPY_LONGLONG , int) +%numpy_typemaps(unsigned long long, NPY_ULONGLONG, int) +%numpy_typemaps(float , NPY_FLOAT , int) +%numpy_typemaps(double , NPY_DOUBLE , int) + +/* *************************************************************** + * The follow macro expansion does not work, because C++ bool is 4 + * bytes and NPY_BOOL is 1 byte + * + * %numpy_typemaps(bool, NPY_BOOL, int) + */ + +/* *************************************************************** + * On my Mac, I get the following warning for this macro expansion: + * 'swig/python detected a memory leak of type 'long double *', no destructor found.' + * + * %numpy_typemaps(long double, NPY_LONGDOUBLE, int) + */ + +/* *************************************************************** + * Swig complains about a syntax error for the following macro + * expansions: + * + * %numpy_typemaps(complex float, NPY_CFLOAT , int) + * + * %numpy_typemaps(complex double, NPY_CDOUBLE, int) + * + * %numpy_typemaps(complex long double, NPY_CLONGDOUBLE, int) + */ + +#endif /* SWIGPYTHON */ diff --git a/python/run_tests.sh b/python/run_tests.sh new file mode 100755 index 000000000..d60911cf7 --- /dev/null +++ b/python/run_tests.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +input=$1 + +./test_general.py $input +./test_index.py $input +./test_keysiterator.py $input +./test_iterator.py $input diff --git a/python/setup.py.in b/python/setup.py.in new file mode 100644 index 000000000..c121621a1 --- /dev/null +++ b/python/setup.py.in @@ -0,0 +1,68 @@ +#!/usr/bin/env python + +from distutils.core import setup, Extension +import os,sys + +attdict = dict( + sources = ['gribapi_swig_wrap.c','grib_interface.c'], + swig_opts = [], + include_dirs = ['.'], + library_dirs = ["%s/lib" % sys.prefix], + libraries = [], + extra_objects = [], +) + +add_attribute = lambda **args: [list.append(attdict[key],value) for key,value in args.items()] + +build_dir = '@BUILD_DIR@' +add_attribute( + include_dirs = os.path.join(build_dir,'src'), + extra_objects = os.path.join(build_dir, 'src', '.libs', 'libgrib_api.a') +) + +with_jasper = '@LIB_JASPER@' +if with_jasper: + jasper_dir = '@JASPER_DIR@' + if jasper_dir and jasper_dir != 'system': + add_attribute( + include_dirs = os.path.join(jasper_dir,'include'), + library_dirs = os.path.join(jasper_dir,'lib') + ) + add_attribute(libraries = 'jasper') + +with_openjpeg = '@LIB_OPENJPEG@' +if with_openjpeg: + openjpeg_dir = '@OPENJPEG_DIR@' + if openjpeg_dir and openjpeg_dir != 'system': + add_attribute( + include_dirs = os.path.join(openjpeg_dir,'include'), + library_dirs = os.path.join(openjpeg_dir,'lib') + ) + add_attribute(libraries = 'openjpeg') + +png = '@LIB_PNG@' +if png: + add_attribute(libraries = 'png') + +data_handler = '@DATA_HANDLER@' +if data_handler == "numpy": + import numpy + # Obtain the numpy include directory. This logic works across numpy versions. + try: + numpy_include = numpy.get_include() + except AttributeError: + numpy_include = numpy.get_numpy_include() + + add_attribute( + include_dirs = numpy_include, + ) + +gribapi_module = Extension('_gribapi_swig',**attdict) + +setup (name = 'gribapi', + version = '0.1', + author = 'ECMWF', + description = """Grib API SWIG module""", + ext_modules = [gribapi_module], + py_modules = ['gribapi_swig','gribapi'], + ) diff --git a/python/swig_wrap_array.c b/python/swig_wrap_array.c new file mode 100644 index 000000000..68358ac36 --- /dev/null +++ b/python/swig_wrap_array.c @@ -0,0 +1,8124 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.40 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +#define SWIGPYTHON +#define SWIG_PYTHON_DIRECTOR_NO_VTABLE + +/* ----------------------------------------------------------------------------- + * This section contains generic SWIG labels for method/variable + * declarations/attributes, and other compiler dependent labels. + * ----------------------------------------------------------------------------- */ + +/* template workaround for compilers that cannot correctly implement the C++ standard */ +#ifndef SWIGTEMPLATEDISAMBIGUATOR +# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) +# define SWIGTEMPLATEDISAMBIGUATOR template +# elif defined(__HP_aCC) +/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ +/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ +# define SWIGTEMPLATEDISAMBIGUATOR template +# else +# define SWIGTEMPLATEDISAMBIGUATOR +# endif +#endif + +/* inline attribute */ +#ifndef SWIGINLINE +# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) +# define SWIGINLINE inline +# else +# define SWIGINLINE +# endif +#endif + +/* attribute recognised by some compilers to avoid 'unused' warnings */ +#ifndef SWIGUNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +# elif defined(__ICC) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +#endif + +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + +#ifndef SWIGUNUSEDPARM +# ifdef __cplusplus +# define SWIGUNUSEDPARM(p) +# else +# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# endif +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static SWIGUNUSED +#endif + +/* internal inline SWIG method */ +#ifndef SWIGINTERNINLINE +# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE +#endif + +/* exporting methods */ +#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY +# endif +#endif + +#ifndef SWIGEXPORT +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT +# else +# define SWIGEXPORT __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) +# define SWIGEXPORT __attribute__ ((visibility("default"))) +# else +# define SWIGEXPORT +# endif +# endif +#endif + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + + + +/* Python.h has to appear first */ +#include + +/* ----------------------------------------------------------------------------- + * swigrun.swg + * + * This file contains generic C API SWIG runtime support for pointer + * type checking. + * ----------------------------------------------------------------------------- */ + +/* This should only be incremented when either the layout of swig_type_info changes, + or for whatever reason, the runtime changes incompatibly */ +#define SWIG_RUNTIME_VERSION "4" + +/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ +#ifdef SWIG_TYPE_TABLE +# define SWIG_QUOTE_STRING(x) #x +# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) +# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) +#else +# define SWIG_TYPE_TABLE_NAME +#endif + +/* + You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for + creating a static or dynamic library from the SWIG runtime code. + In 99.9% of the cases, SWIG just needs to declare them as 'static'. + + But only do this if strictly necessary, ie, if you have problems + with your compiler or suchlike. +*/ + +#ifndef SWIGRUNTIME +# define SWIGRUNTIME SWIGINTERN +#endif + +#ifndef SWIGRUNTIMEINLINE +# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE +#endif + +/* Generic buffer size */ +#ifndef SWIG_BUFFER_SIZE +# define SWIG_BUFFER_SIZE 1024 +#endif + +/* Flags for pointer conversions */ +#define SWIG_POINTER_DISOWN 0x1 +#define SWIG_CAST_NEW_MEMORY 0x2 + +/* Flags for new pointer objects */ +#define SWIG_POINTER_OWN 0x1 + + +/* + Flags/methods for returning states. + + The SWIG conversion methods, as ConvertPtr, return and integer + that tells if the conversion was successful or not. And if not, + an error code can be returned (see swigerrors.swg for the codes). + + Use the following macros/flags to set or process the returning + states. + + In old versions of SWIG, code such as the following was usually written: + + if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { + // success code + } else { + //fail code + } + + Now you can be more explicit: + + int res = SWIG_ConvertPtr(obj,vptr,ty.flags); + if (SWIG_IsOK(res)) { + // success code + } else { + // fail code + } + + which is the same really, but now you can also do + + Type *ptr; + int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); + if (SWIG_IsOK(res)) { + // success code + if (SWIG_IsNewObj(res) { + ... + delete *ptr; + } else { + ... + } + } else { + // fail code + } + + I.e., now SWIG_ConvertPtr can return new objects and you can + identify the case and take care of the deallocation. Of course that + also requires SWIG_ConvertPtr to return new result values, such as + + int SWIG_ConvertPtr(obj, ptr,...) { + if () { + if () { + *ptr = ; + return SWIG_NEWOBJ; + } else { + *ptr = ; + return SWIG_OLDOBJ; + } + } else { + return SWIG_BADOBJ; + } + } + + Of course, returning the plain '0(success)/-1(fail)' still works, but you can be + more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the + SWIG errors code. + + Finally, if the SWIG_CASTRANK_MODE is enabled, the result code + allows to return the 'cast rank', for example, if you have this + + int food(double) + int fooi(int); + + and you call + + food(1) // cast rank '1' (1 -> 1.0) + fooi(1) // cast rank '0' + + just use the SWIG_AddCast()/SWIG_CheckState() +*/ + +#define SWIG_OK (0) +#define SWIG_ERROR (-1) +#define SWIG_IsOK(r) (r >= 0) +#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) + +/* The CastRankLimit says how many bits are used for the cast rank */ +#define SWIG_CASTRANKLIMIT (1 << 8) +/* The NewMask denotes the object was created (using new/malloc) */ +#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) +/* The TmpMask is for in/out typemaps that use temporal objects */ +#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) +/* Simple returning values */ +#define SWIG_BADOBJ (SWIG_ERROR) +#define SWIG_OLDOBJ (SWIG_OK) +#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) +#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) +/* Check, add and del mask methods */ +#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) +#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) +#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) +#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) +#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) +#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) + +/* Cast-Rank Mode */ +#if defined(SWIG_CASTRANK_MODE) +# ifndef SWIG_TypeRank +# define SWIG_TypeRank unsigned long +# endif +# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ +# define SWIG_MAXCASTRANK (2) +# endif +# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) +# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) +SWIGINTERNINLINE int SWIG_AddCast(int r) { + return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; +} +SWIGINTERNINLINE int SWIG_CheckState(int r) { + return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; +} +#else /* no cast-rank mode */ +# define SWIG_AddCast +# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) +#endif + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *(*swig_converter_func)(void *, int *); +typedef struct swig_type_info *(*swig_dycast_func)(void **); + +/* Structure to store information on one type */ +typedef struct swig_type_info { + const char *name; /* mangled name of this type */ + const char *str; /* human readable name of this type */ + swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ + struct swig_cast_info *cast; /* linked list of types that can cast into this type */ + void *clientdata; /* language specific type data */ + int owndata; /* flag if the structure owns the clientdata */ +} swig_type_info; + +/* Structure to store a type and conversion function used for casting */ +typedef struct swig_cast_info { + swig_type_info *type; /* pointer to type that is equivalent to this type */ + swig_converter_func converter; /* function to cast the void pointers */ + struct swig_cast_info *next; /* pointer to next cast in linked list */ + struct swig_cast_info *prev; /* pointer to the previous cast */ +} swig_cast_info; + +/* Structure used to store module information + * Each module generates one structure like this, and the runtime collects + * all of these structures and stores them in a circularly linked list.*/ +typedef struct swig_module_info { + swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ + size_t size; /* Number of types in this module */ + struct swig_module_info *next; /* Pointer to next element in circularly linked list */ + swig_type_info **type_initial; /* Array of initially generated type structures */ + swig_cast_info **cast_initial; /* Array of initially generated casting structures */ + void *clientdata; /* Language specific module data */ +} swig_module_info; + +/* + Compare two type names skipping the space characters, therefore + "char*" == "char *" and "Class" == "Class", etc. + + Return 0 when the two name types are equivalent, as in + strncmp, but skipping ' '. +*/ +SWIGRUNTIME int +SWIG_TypeNameComp(const char *f1, const char *l1, + const char *f2, const char *l2) { + for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { + while ((*f1 == ' ') && (f1 != l1)) ++f1; + while ((*f2 == ' ') && (f2 != l2)) ++f2; + if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; + } + return (int)((l1 - f1) - (l2 - f2)); +} + +/* + Check type equivalence in a name list like ||... + Return 0 if not equal, 1 if equal +*/ +SWIGRUNTIME int +SWIG_TypeEquiv(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; +} + +/* + Check type equivalence in a name list like ||... + Return 0 if equal, -1 if nb < tb, 1 if nb > tb +*/ +SWIGRUNTIME int +SWIG_TypeCompare(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; +} + + +/* + Check the typename +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheck(const char *c, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (strcmp(iter->type->name, c) == 0) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; +} + +/* + Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (iter->type == from) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; +} + +/* + Cast a pointer up an inheritance hierarchy +*/ +SWIGRUNTIMEINLINE void * +SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { + return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); +} + +/* + Dynamic pointer casting. Down an inheritance hierarchy +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { + swig_type_info *lastty = ty; + if (!ty || !ty->dcast) return ty; + while (ty && (ty->dcast)) { + ty = (*ty->dcast)(ptr); + if (ty) lastty = ty; + } + return lastty; +} + +/* + Return the name associated with this type +*/ +SWIGRUNTIMEINLINE const char * +SWIG_TypeName(const swig_type_info *ty) { + return ty->name; +} + +/* + Return the pretty name associated with this type, + that is an unmangled type name in a form presentable to the user. +*/ +SWIGRUNTIME const char * +SWIG_TypePrettyName(const swig_type_info *type) { + /* The "str" field contains the equivalent pretty names of the + type, separated by vertical-bar characters. We choose + to print the last name, as it is often (?) the most + specific. */ + if (!type) return NULL; + if (type->str != NULL) { + const char *last_name = type->str; + const char *s; + for (s = type->str; *s; s++) + if (*s == '|') last_name = s+1; + return last_name; + } + else + return type->name; +} + +/* + Set the clientdata field for a type +*/ +SWIGRUNTIME void +SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { + swig_cast_info *cast = ti->cast; + /* if (ti->clientdata == clientdata) return; */ + ti->clientdata = clientdata; + + while (cast) { + if (!cast->converter) { + swig_type_info *tc = cast->type; + if (!tc->clientdata) { + SWIG_TypeClientData(tc, clientdata); + } + } + cast = cast->next; + } +} +SWIGRUNTIME void +SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { + SWIG_TypeClientData(ti, clientdata); + ti->owndata = 1; +} + +/* + Search for a swig_type_info structure only by mangled name + Search is a O(log #types) + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_MangledTypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + swig_module_info *iter = start; + do { + if (iter->size) { + register size_t l = 0; + register size_t r = iter->size - 1; + do { + /* since l+r >= 0, we can (>> 1) instead (/ 2) */ + register size_t i = (l + r) >> 1; + const char *iname = iter->types[i]->name; + if (iname) { + register int compare = strcmp(name, iname); + if (compare == 0) { + return iter->types[i]; + } else if (compare < 0) { + if (i) { + r = i - 1; + } else { + break; + } + } else if (compare > 0) { + l = i + 1; + } + } else { + break; /* should never happen */ + } + } while (l <= r); + } + iter = iter->next; + } while (iter != end); + return 0; +} + +/* + Search for a swig_type_info structure for either a mangled name or a human readable name. + It first searches the mangled names of the types, which is a O(log #types) + If a type is not found it then searches the human readable names, which is O(#types). + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + /* STEP 1: Search the name field using binary search */ + swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); + if (ret) { + return ret; + } else { + /* STEP 2: If the type hasn't been found, do a complete search + of the str field (the human readable name) */ + swig_module_info *iter = start; + do { + register size_t i = 0; + for (; i < iter->size; ++i) { + if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) + return iter->types[i]; + } + iter = iter->next; + } while (iter != end); + } + + /* neither found a match */ + return 0; +} + +/* + Pack binary data into a string +*/ +SWIGRUNTIME char * +SWIG_PackData(char *c, void *ptr, size_t sz) { + static const char hex[17] = "0123456789abcdef"; + register const unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register unsigned char uu = *u; + *(c++) = hex[(uu & 0xf0) >> 4]; + *(c++) = hex[uu & 0xf]; + } + return c; +} + +/* + Unpack binary data from a string +*/ +SWIGRUNTIME const char * +SWIG_UnpackData(const char *c, void *ptr, size_t sz) { + register unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register char d = *(c++); + register unsigned char uu; + if ((d >= '0') && (d <= '9')) + uu = ((d - '0') << 4); + else if ((d >= 'a') && (d <= 'f')) + uu = ((d - ('a'-10)) << 4); + else + return (char *) 0; + d = *(c++); + if ((d >= '0') && (d <= '9')) + uu |= (d - '0'); + else if ((d >= 'a') && (d <= 'f')) + uu |= (d - ('a'-10)); + else + return (char *) 0; + *u = uu; + } + return c; +} + +/* + Pack 'void *' into a string buffer. +*/ +SWIGRUNTIME char * +SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { + char *r = buff; + if ((2*sizeof(void *) + 2) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,&ptr,sizeof(void *)); + if (strlen(name) + 1 > (bsz - (r - buff))) return 0; + strcpy(r,name); + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + *ptr = (void *) 0; + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sizeof(void *)); +} + +SWIGRUNTIME char * +SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { + char *r = buff; + size_t lname = (name ? strlen(name) : 0); + if ((2*sz + 2 + lname) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,ptr,sz); + if (lname) { + strncpy(r,name,lname+1); + } else { + *r = 0; + } + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + memset(ptr,0,sz); + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sz); +} + +#ifdef __cplusplus +} +#endif + +/* Errors in SWIG */ +#define SWIG_UnknownError -1 +#define SWIG_IOError -2 +#define SWIG_RuntimeError -3 +#define SWIG_IndexError -4 +#define SWIG_TypeError -5 +#define SWIG_DivisionByZero -6 +#define SWIG_OverflowError -7 +#define SWIG_SyntaxError -8 +#define SWIG_ValueError -9 +#define SWIG_SystemError -10 +#define SWIG_AttributeError -11 +#define SWIG_MemoryError -12 +#define SWIG_NullReferenceError -13 + + + +/* Compatibility macros for Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + +#define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type) +#define PyInt_Check(x) PyLong_Check(x) +#define PyInt_AsLong(x) PyLong_AsLong(x) +#define PyInt_FromLong(x) PyLong_FromLong(x) +#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args) + +#endif + +#ifndef Py_TYPE +# define Py_TYPE(op) ((op)->ob_type) +#endif + +/* SWIG APIs for compatibility of both Python 2 & 3 */ + +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_Python_str_FromFormat PyUnicode_FromFormat +#else +# define SWIG_Python_str_FromFormat PyString_FromFormat +#endif + + +/* Warning: This function will allocate a new string in Python 3, + * so please call SWIG_Python_str_DelForPy3(x) to free the space. + */ +SWIGINTERN char* +SWIG_Python_str_AsChar(PyObject *str) +{ +#if PY_VERSION_HEX >= 0x03000000 + char *cstr; + char *newstr; + Py_ssize_t len; + str = PyUnicode_AsUTF8String(str); + PyBytes_AsStringAndSize(str, &cstr, &len); + newstr = (char *) malloc(len+1); + memcpy(newstr, cstr, len+1); + Py_XDECREF(str); + return newstr; +#else + return PyString_AsString(str); +#endif +} + +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_Python_str_DelForPy3(x) free( (void*) (x) ) +#else +# define SWIG_Python_str_DelForPy3(x) +#endif + + +SWIGINTERN PyObject* +SWIG_Python_str_FromChar(const char *c) +{ +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_FromString(c); +#else + return PyString_FromString(c); +#endif +} + +/* Add PyOS_snprintf for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 +# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) +# define PyOS_snprintf _snprintf +# else +# define PyOS_snprintf snprintf +# endif +#endif + +/* A crude PyString_FromFormat implementation for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 + +#ifndef SWIG_PYBUFFER_SIZE +# define SWIG_PYBUFFER_SIZE 1024 +#endif + +static PyObject * +PyString_FromFormat(const char *fmt, ...) { + va_list ap; + char buf[SWIG_PYBUFFER_SIZE * 2]; + int res; + va_start(ap, fmt); + res = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf); +} +#endif + +/* Add PyObject_Del for old Pythons */ +#if PY_VERSION_HEX < 0x01060000 +# define PyObject_Del(op) PyMem_DEL((op)) +#endif +#ifndef PyObject_DEL +# define PyObject_DEL PyObject_Del +#endif + +/* A crude PyExc_StopIteration exception for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 +# ifndef PyExc_StopIteration +# define PyExc_StopIteration PyExc_RuntimeError +# endif +# ifndef PyObject_GenericGetAttr +# define PyObject_GenericGetAttr 0 +# endif +#endif + +/* Py_NotImplemented is defined in 2.1 and up. */ +#if PY_VERSION_HEX < 0x02010000 +# ifndef Py_NotImplemented +# define Py_NotImplemented PyExc_RuntimeError +# endif +#endif + +/* A crude PyString_AsStringAndSize implementation for old Pythons */ +#if PY_VERSION_HEX < 0x02010000 +# ifndef PyString_AsStringAndSize +# define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;} +# endif +#endif + +/* PySequence_Size for old Pythons */ +#if PY_VERSION_HEX < 0x02000000 +# ifndef PySequence_Size +# define PySequence_Size PySequence_Length +# endif +#endif + +/* PyBool_FromLong for old Pythons */ +#if PY_VERSION_HEX < 0x02030000 +static +PyObject *PyBool_FromLong(long ok) +{ + PyObject *result = ok ? Py_True : Py_False; + Py_INCREF(result); + return result; +} +#endif + +/* Py_ssize_t for old Pythons */ +/* This code is as recommended by: */ +/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */ +#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) +typedef int Py_ssize_t; +# define PY_SSIZE_T_MAX INT_MAX +# define PY_SSIZE_T_MIN INT_MIN +#endif + +/* ----------------------------------------------------------------------------- + * error manipulation + * ----------------------------------------------------------------------------- */ + +SWIGRUNTIME PyObject* +SWIG_Python_ErrorType(int code) { + PyObject* type = 0; + switch(code) { + case SWIG_MemoryError: + type = PyExc_MemoryError; + break; + case SWIG_IOError: + type = PyExc_IOError; + break; + case SWIG_RuntimeError: + type = PyExc_RuntimeError; + break; + case SWIG_IndexError: + type = PyExc_IndexError; + break; + case SWIG_TypeError: + type = PyExc_TypeError; + break; + case SWIG_DivisionByZero: + type = PyExc_ZeroDivisionError; + break; + case SWIG_OverflowError: + type = PyExc_OverflowError; + break; + case SWIG_SyntaxError: + type = PyExc_SyntaxError; + break; + case SWIG_ValueError: + type = PyExc_ValueError; + break; + case SWIG_SystemError: + type = PyExc_SystemError; + break; + case SWIG_AttributeError: + type = PyExc_AttributeError; + break; + default: + type = PyExc_RuntimeError; + } + return type; +} + + +SWIGRUNTIME void +SWIG_Python_AddErrorMsg(const char* mesg) +{ + PyObject *type = 0; + PyObject *value = 0; + PyObject *traceback = 0; + + if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback); + if (value) { + char *tmp; + PyObject *old_str = PyObject_Str(value); + PyErr_Clear(); + Py_XINCREF(type); + + PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(old_str); + Py_DECREF(value); + } else { + PyErr_SetString(PyExc_RuntimeError, mesg); + } +} + +#if defined(SWIG_PYTHON_NO_THREADS) +# if defined(SWIG_PYTHON_THREADS) +# undef SWIG_PYTHON_THREADS +# endif +#endif +#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */ +# if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL) +# if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */ +# define SWIG_PYTHON_USE_GIL +# endif +# endif +# if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */ +# ifndef SWIG_PYTHON_INITIALIZE_THREADS +# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads() +# endif +# ifdef __cplusplus /* C++ code */ + class SWIG_Python_Thread_Block { + bool status; + PyGILState_STATE state; + public: + void end() { if (status) { PyGILState_Release(state); status = false;} } + SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {} + ~SWIG_Python_Thread_Block() { end(); } + }; + class SWIG_Python_Thread_Allow { + bool status; + PyThreadState *save; + public: + void end() { if (status) { PyEval_RestoreThread(save); status = false; }} + SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {} + ~SWIG_Python_Thread_Allow() { end(); } + }; +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK SWIG_Python_Thread_Block _swig_thread_block +# define SWIG_PYTHON_THREAD_END_BLOCK _swig_thread_block.end() +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW SWIG_Python_Thread_Allow _swig_thread_allow +# define SWIG_PYTHON_THREAD_END_ALLOW _swig_thread_allow.end() +# else /* C code */ +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK PyGILState_STATE _swig_thread_block = PyGILState_Ensure() +# define SWIG_PYTHON_THREAD_END_BLOCK PyGILState_Release(_swig_thread_block) +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW PyThreadState *_swig_thread_allow = PyEval_SaveThread() +# define SWIG_PYTHON_THREAD_END_ALLOW PyEval_RestoreThread(_swig_thread_allow) +# endif +# else /* Old thread way, not implemented, user must provide it */ +# if !defined(SWIG_PYTHON_INITIALIZE_THREADS) +# define SWIG_PYTHON_INITIALIZE_THREADS +# endif +# if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK) +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK +# endif +# if !defined(SWIG_PYTHON_THREAD_END_BLOCK) +# define SWIG_PYTHON_THREAD_END_BLOCK +# endif +# if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW) +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW +# endif +# if !defined(SWIG_PYTHON_THREAD_END_ALLOW) +# define SWIG_PYTHON_THREAD_END_ALLOW +# endif +# endif +#else /* No thread support */ +# define SWIG_PYTHON_INITIALIZE_THREADS +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK +# define SWIG_PYTHON_THREAD_END_BLOCK +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW +# define SWIG_PYTHON_THREAD_END_ALLOW +#endif + +/* ----------------------------------------------------------------------------- + * Python API portion that goes into the runtime + * ----------------------------------------------------------------------------- */ + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* cc-mode */ +#endif +#endif + +/* ----------------------------------------------------------------------------- + * Constant declarations + * ----------------------------------------------------------------------------- */ + +/* Constant Types */ +#define SWIG_PY_POINTER 4 +#define SWIG_PY_BINARY 5 + +/* Constant information structure */ +typedef struct swig_const_info { + int type; + char *name; + long lvalue; + double dvalue; + void *pvalue; + swig_type_info **ptype; +} swig_const_info; + + +/* ----------------------------------------------------------------------------- + * Wrapper of PyInstanceMethod_New() used in Python 3 + * It is exported to the generated module, used for -fastproxy + * ----------------------------------------------------------------------------- */ +SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *self, PyObject *func) +{ +#if PY_VERSION_HEX >= 0x03000000 + return PyInstanceMethod_New(func); +#else + return NULL; +#endif +} + +#ifdef __cplusplus +#if 0 +{ /* cc-mode */ +#endif +} +#endif + + +/* ----------------------------------------------------------------------------- + * See the LICENSE file for information on copyright, usage and redistribution + * of SWIG, and the README file for authors - http://www.swig.org/release.html. + * + * pyrun.swg + * + * This file contains the runtime support for Python modules + * and includes code for managing global variables and pointer + * type checking. + * + * ----------------------------------------------------------------------------- */ + +/* Common SWIG API */ + +/* for raw pointers */ +#define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0) +#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags) +#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own) +#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(ptr, type, flags) +#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) +#define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src) +#define swig_owntype int + +/* for raw packed data */ +#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) + +/* for class or struct pointers */ +#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) +#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) + +/* for C or C++ function pointers */ +#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type) +#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(ptr, type, 0) + +/* for C++ member pointers, ie, member methods */ +#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) + + +/* Runtime API */ + +#define SWIG_GetModule(clientdata) SWIG_Python_GetModule() +#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) +#define SWIG_NewClientData(obj) SwigPyClientData_New(obj) + +#define SWIG_SetErrorObj SWIG_Python_SetErrorObj +#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg +#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code) +#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) +#define SWIG_fail goto fail + + +/* Runtime API implementation */ + +/* Error manipulation */ + +SWIGINTERN void +SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetObject(errtype, obj); + Py_DECREF(obj); + SWIG_PYTHON_THREAD_END_BLOCK; +} + +SWIGINTERN void +SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetString(errtype, (char *) msg); + SWIG_PYTHON_THREAD_END_BLOCK; +} + +#define SWIG_Python_Raise(obj, type, desc) SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj) + +/* Set a constant value */ + +SWIGINTERN void +SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { + PyDict_SetItemString(d, (char*) name, obj); + Py_DECREF(obj); +} + +/* Append a value to the result obj */ + +SWIGINTERN PyObject* +SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) { +#if !defined(SWIG_PYTHON_OUTPUT_TUPLE) + if (!result) { + result = obj; + } else if (result == Py_None) { + Py_DECREF(result); + result = obj; + } else { + if (!PyList_Check(result)) { + PyObject *o2 = result; + result = PyList_New(1); + PyList_SetItem(result, 0, o2); + } + PyList_Append(result,obj); + Py_DECREF(obj); + } + return result; +#else + PyObject* o2; + PyObject* o3; + if (!result) { + result = obj; + } else if (result == Py_None) { + Py_DECREF(result); + result = obj; + } else { + if (!PyTuple_Check(result)) { + o2 = result; + result = PyTuple_New(1); + PyTuple_SET_ITEM(result, 0, o2); + } + o3 = PyTuple_New(1); + PyTuple_SET_ITEM(o3, 0, obj); + o2 = result; + result = PySequence_Concat(o2, o3); + Py_DECREF(o2); + Py_DECREF(o3); + } + return result; +#endif +} + +/* Unpack the argument tuple */ + +SWIGINTERN int +SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs) +{ + if (!args) { + if (!min && !max) { + return 1; + } else { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", + name, (min == max ? "" : "at least "), (int)min); + return 0; + } + } + if (!PyTuple_Check(args)) { + PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple"); + return 0; + } else { + register Py_ssize_t l = PyTuple_GET_SIZE(args); + if (l < min) { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + name, (min == max ? "" : "at least "), (int)min, (int)l); + return 0; + } else if (l > max) { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + name, (min == max ? "" : "at most "), (int)max, (int)l); + return 0; + } else { + register int i; + for (i = 0; i < l; ++i) { + objs[i] = PyTuple_GET_ITEM(args, i); + } + for (; l < max; ++l) { + objs[l] = 0; + } + return i + 1; + } + } +} + +/* A functor is a function object with one single object argument */ +#if PY_VERSION_HEX >= 0x02020000 +#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunctionObjArgs(functor, obj, NULL); +#else +#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunction(functor, "O", obj); +#endif + +/* + Helper for static pointer initialization for both C and C++ code, for example + static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...); +*/ +#ifdef __cplusplus +#define SWIG_STATIC_POINTER(var) var +#else +#define SWIG_STATIC_POINTER(var) var = 0; if (!var) var +#endif + +/* ----------------------------------------------------------------------------- + * Pointer declarations + * ----------------------------------------------------------------------------- */ + +/* Flags for new pointer objects */ +#define SWIG_POINTER_NOSHADOW (SWIG_POINTER_OWN << 1) +#define SWIG_POINTER_NEW (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN) + +#define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1) + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* cc-mode */ +#endif +#endif + +/* How to access Py_None */ +#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# ifndef SWIG_PYTHON_NO_BUILD_NONE +# ifndef SWIG_PYTHON_BUILD_NONE +# define SWIG_PYTHON_BUILD_NONE +# endif +# endif +#endif + +#ifdef SWIG_PYTHON_BUILD_NONE +# ifdef Py_None +# undef Py_None +# define Py_None SWIG_Py_None() +# endif +SWIGRUNTIMEINLINE PyObject * +_SWIG_Py_None(void) +{ + PyObject *none = Py_BuildValue((char*)""); + Py_DECREF(none); + return none; +} +SWIGRUNTIME PyObject * +SWIG_Py_None(void) +{ + static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None(); + return none; +} +#endif + +/* The python void return value */ + +SWIGRUNTIMEINLINE PyObject * +SWIG_Py_Void(void) +{ + PyObject *none = Py_None; + Py_INCREF(none); + return none; +} + +/* SwigPyClientData */ + +typedef struct { + PyObject *klass; + PyObject *newraw; + PyObject *newargs; + PyObject *destroy; + int delargs; + int implicitconv; +} SwigPyClientData; + +SWIGRUNTIMEINLINE int +SWIG_Python_CheckImplicit(swig_type_info *ty) +{ + SwigPyClientData *data = (SwigPyClientData *)ty->clientdata; + return data ? data->implicitconv : 0; +} + +SWIGRUNTIMEINLINE PyObject * +SWIG_Python_ExceptionType(swig_type_info *desc) { + SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0; + PyObject *klass = data ? data->klass : 0; + return (klass ? klass : PyExc_RuntimeError); +} + + +SWIGRUNTIME SwigPyClientData * +SwigPyClientData_New(PyObject* obj) +{ + if (!obj) { + return 0; + } else { + SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData)); + /* the klass element */ + data->klass = obj; + Py_INCREF(data->klass); + /* the newraw method and newargs arguments used to create a new raw instance */ + if (PyClass_Check(obj)) { + data->newraw = 0; + data->newargs = obj; + Py_INCREF(obj); + } else { +#if (PY_VERSION_HEX < 0x02020000) + data->newraw = 0; +#else + data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__"); +#endif + if (data->newraw) { + Py_INCREF(data->newraw); + data->newargs = PyTuple_New(1); + PyTuple_SetItem(data->newargs, 0, obj); + } else { + data->newargs = obj; + } + Py_INCREF(data->newargs); + } + /* the destroy method, aka as the C++ delete method */ + data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__"); + if (PyErr_Occurred()) { + PyErr_Clear(); + data->destroy = 0; + } + if (data->destroy) { + int flags; + Py_INCREF(data->destroy); + flags = PyCFunction_GET_FLAGS(data->destroy); +#ifdef METH_O + data->delargs = !(flags & (METH_O)); +#else + data->delargs = 0; +#endif + } else { + data->delargs = 0; + } + data->implicitconv = 0; + return data; + } +} + +SWIGRUNTIME void +SwigPyClientData_Del(SwigPyClientData* data) +{ + Py_XDECREF(data->newraw); + Py_XDECREF(data->newargs); + Py_XDECREF(data->destroy); +} + +/* =============== SwigPyObject =====================*/ + +typedef struct { + PyObject_HEAD + void *ptr; + swig_type_info *ty; + int own; + PyObject *next; +} SwigPyObject; + +SWIGRUNTIME PyObject * +SwigPyObject_long(SwigPyObject *v) +{ + return PyLong_FromVoidPtr(v->ptr); +} + +SWIGRUNTIME PyObject * +SwigPyObject_format(const char* fmt, SwigPyObject *v) +{ + PyObject *res = NULL; + PyObject *args = PyTuple_New(1); + if (args) { + if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) { + PyObject *ofmt = SWIG_Python_str_FromChar(fmt); + if (ofmt) { +#if PY_VERSION_HEX >= 0x03000000 + res = PyUnicode_Format(ofmt,args); +#else + res = PyString_Format(ofmt,args); +#endif + Py_DECREF(ofmt); + } + Py_DECREF(args); + } + } + return res; +} + +SWIGRUNTIME PyObject * +SwigPyObject_oct(SwigPyObject *v) +{ + return SwigPyObject_format("%o",v); +} + +SWIGRUNTIME PyObject * +SwigPyObject_hex(SwigPyObject *v) +{ + return SwigPyObject_format("%x",v); +} + +SWIGRUNTIME PyObject * +#ifdef METH_NOARGS +SwigPyObject_repr(SwigPyObject *v) +#else +SwigPyObject_repr(SwigPyObject *v, PyObject *args) +#endif +{ + const char *name = SWIG_TypePrettyName(v->ty); + PyObject *repr = SWIG_Python_str_FromFormat("", name, v); + if (v->next) { +#ifdef METH_NOARGS + PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next); +#else + PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args); +#endif +#if PY_VERSION_HEX >= 0x03000000 + PyObject *joined = PyUnicode_Concat(repr, nrep); + Py_DecRef(repr); + Py_DecRef(nrep); + repr = joined; +#else + PyString_ConcatAndDel(&repr,nrep); +#endif + } + return repr; +} + +SWIGRUNTIME int +SwigPyObject_print(SwigPyObject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) +{ + char *str; +#ifdef METH_NOARGS + PyObject *repr = SwigPyObject_repr(v); +#else + PyObject *repr = SwigPyObject_repr(v, NULL); +#endif + if (repr) { + str = SWIG_Python_str_AsChar(repr); + fputs(str, fp); + SWIG_Python_str_DelForPy3(str); + Py_DECREF(repr); + return 0; + } else { + return 1; + } +} + +SWIGRUNTIME PyObject * +SwigPyObject_str(SwigPyObject *v) +{ + char result[SWIG_BUFFER_SIZE]; + return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ? + SWIG_Python_str_FromChar(result) : 0; +} + +SWIGRUNTIME int +SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w) +{ + void *i = v->ptr; + void *j = w->ptr; + return (i < j) ? -1 : ((i > j) ? 1 : 0); +} + +/* Added for Python 3.x, would it also be useful for Python 2.x? */ +SWIGRUNTIME PyObject* +SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op) +{ + PyObject* res; + if( op != Py_EQ && op != Py_NE ) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + if( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ) + res = Py_True; + else + res = Py_False; + Py_INCREF(res); + return res; +} + + +SWIGRUNTIME PyTypeObject* _PySwigObject_type(void); + +SWIGRUNTIME PyTypeObject* +SwigPyObject_type(void) { + static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigObject_type(); + return type; +} + +SWIGRUNTIMEINLINE int +SwigPyObject_Check(PyObject *op) { + return (Py_TYPE(op) == SwigPyObject_type()) + || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0); +} + +SWIGRUNTIME PyObject * +SwigPyObject_New(void *ptr, swig_type_info *ty, int own); + +SWIGRUNTIME void +SwigPyObject_dealloc(PyObject *v) +{ + SwigPyObject *sobj = (SwigPyObject *) v; + PyObject *next = sobj->next; + if (sobj->own == SWIG_POINTER_OWN) { + swig_type_info *ty = sobj->ty; + SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; + PyObject *destroy = data ? data->destroy : 0; + if (destroy) { + /* destroy is always a VARARGS method */ + PyObject *res; + if (data->delargs) { + /* we need to create a temporary object to carry the destroy operation */ + PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0); + res = SWIG_Python_CallFunctor(destroy, tmp); + Py_DECREF(tmp); + } else { + PyCFunction meth = PyCFunction_GET_FUNCTION(destroy); + PyObject *mself = PyCFunction_GET_SELF(destroy); + res = ((*meth)(mself, v)); + } + Py_XDECREF(res); + } +#if !defined(SWIG_PYTHON_SILENT_MEMLEAK) + else { + const char *name = SWIG_TypePrettyName(ty); + printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown")); + } +#endif + } + Py_XDECREF(next); + PyObject_DEL(v); +} + +SWIGRUNTIME PyObject* +SwigPyObject_append(PyObject* v, PyObject* next) +{ + SwigPyObject *sobj = (SwigPyObject *) v; +#ifndef METH_O + PyObject *tmp = 0; + if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL; + next = tmp; +#endif + if (!SwigPyObject_Check(next)) { + return NULL; + } + sobj->next = next; + Py_INCREF(next); + return SWIG_Py_Void(); +} + +SWIGRUNTIME PyObject* +#ifdef METH_NOARGS +SwigPyObject_next(PyObject* v) +#else +SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *) v; + if (sobj->next) { + Py_INCREF(sobj->next); + return sobj->next; + } else { + return SWIG_Py_Void(); + } +} + +SWIGINTERN PyObject* +#ifdef METH_NOARGS +SwigPyObject_disown(PyObject *v) +#else +SwigPyObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *)v; + sobj->own = 0; + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject* +#ifdef METH_NOARGS +SwigPyObject_acquire(PyObject *v) +#else +SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *)v; + sobj->own = SWIG_POINTER_OWN; + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject* +SwigPyObject_own(PyObject *v, PyObject *args) +{ + PyObject *val = 0; +#if (PY_VERSION_HEX < 0x02020000) + if (!PyArg_ParseTuple(args,(char *)"|O:own",&val)) +#else + if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) +#endif + { + return NULL; + } + else + { + SwigPyObject *sobj = (SwigPyObject *)v; + PyObject *obj = PyBool_FromLong(sobj->own); + if (val) { +#ifdef METH_NOARGS + if (PyObject_IsTrue(val)) { + SwigPyObject_acquire(v); + } else { + SwigPyObject_disown(v); + } +#else + if (PyObject_IsTrue(val)) { + SwigPyObject_acquire(v,args); + } else { + SwigPyObject_disown(v,args); + } +#endif + } + return obj; + } +} + +#ifdef METH_O +static PyMethodDef +swigobject_methods[] = { + {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS, (char *)"aquires ownership of the pointer"}, + {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, + {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"}, + {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"}, + {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_NOARGS, (char *)"returns object representation"}, + {0, 0, 0, 0} +}; +#else +static PyMethodDef +swigobject_methods[] = { + {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS, (char *)"aquires ownership of the pointer"}, + {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, + {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"}, + {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"}, + {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"}, + {0, 0, 0, 0} +}; +#endif + +#if PY_VERSION_HEX < 0x02020000 +SWIGINTERN PyObject * +SwigPyObject_getattr(SwigPyObject *sobj,char *name) +{ + return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name); +} +#endif + +SWIGRUNTIME PyTypeObject* +_PySwigObject_type(void) { + static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer"; + + static PyNumberMethods SwigPyObject_as_number = { + (binaryfunc)0, /*nb_add*/ + (binaryfunc)0, /*nb_subtract*/ + (binaryfunc)0, /*nb_multiply*/ + /* nb_divide removed in Python 3 */ +#if PY_VERSION_HEX < 0x03000000 + (binaryfunc)0, /*nb_divide*/ +#endif + (binaryfunc)0, /*nb_remainder*/ + (binaryfunc)0, /*nb_divmod*/ + (ternaryfunc)0,/*nb_power*/ + (unaryfunc)0, /*nb_negative*/ + (unaryfunc)0, /*nb_positive*/ + (unaryfunc)0, /*nb_absolute*/ + (inquiry)0, /*nb_nonzero*/ + 0, /*nb_invert*/ + 0, /*nb_lshift*/ + 0, /*nb_rshift*/ + 0, /*nb_and*/ + 0, /*nb_xor*/ + 0, /*nb_or*/ +#if PY_VERSION_HEX < 0x03000000 + 0, /*nb_coerce*/ +#endif + (unaryfunc)SwigPyObject_long, /*nb_int*/ +#if PY_VERSION_HEX < 0x03000000 + (unaryfunc)SwigPyObject_long, /*nb_long*/ +#else + 0, /*nb_reserved*/ +#endif + (unaryfunc)0, /*nb_float*/ +#if PY_VERSION_HEX < 0x03000000 + (unaryfunc)SwigPyObject_oct, /*nb_oct*/ + (unaryfunc)SwigPyObject_hex, /*nb_hex*/ +#endif +#if PY_VERSION_HEX >= 0x03000000 /* 3.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */ +#elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */ +#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */ +#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */ + 0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */ +#endif + }; + + static PyTypeObject swigpyobject_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp + = { + /* PyObject header changed in Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + PyVarObject_HEAD_INIT(&PyType_Type, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"SwigPyObject", /* tp_name */ + sizeof(SwigPyObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyObject_dealloc, /* tp_dealloc */ + (printfunc)SwigPyObject_print, /* tp_print */ +#if PY_VERSION_HEX < 0x02020000 + (getattrfunc)SwigPyObject_getattr, /* tp_getattr */ +#else + (getattrfunc)0, /* tp_getattr */ +#endif + (setattrfunc)0, /* tp_setattr */ +#if PY_VERSION_HEX >= 0x03000000 + 0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */ +#else + (cmpfunc)SwigPyObject_compare, /* tp_compare */ +#endif + (reprfunc)SwigPyObject_repr, /* tp_repr */ + &SwigPyObject_as_number, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)SwigPyObject_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigobject_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + (richcmpfunc)SwigPyObject_richcompare, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0, /* tp_iter */ + 0, /* tp_iternext */ + swigobject_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#ifdef COUNT_ALLOCS + 0,0,0,0 /* tp_alloc -> tp_next */ +#endif + }; + swigpyobject_type = tmp; + /* for Python 3 we already assigned ob_type in PyVarObject_HEAD_INIT() */ +#if PY_VERSION_HEX < 0x03000000 + swigpyobject_type.ob_type = &PyType_Type; +#endif + type_init = 1; + } + return &swigpyobject_type; +} + +SWIGRUNTIME PyObject * +SwigPyObject_New(void *ptr, swig_type_info *ty, int own) +{ + SwigPyObject *sobj = PyObject_NEW(SwigPyObject, SwigPyObject_type()); + if (sobj) { + sobj->ptr = ptr; + sobj->ty = ty; + sobj->own = own; + sobj->next = 0; + } + return (PyObject *)sobj; +} + +/* ----------------------------------------------------------------------------- + * Implements a simple Swig Packed type, and use it instead of string + * ----------------------------------------------------------------------------- */ + +typedef struct { + PyObject_HEAD + void *pack; + swig_type_info *ty; + size_t size; +} SwigPyPacked; + +SWIGRUNTIME int +SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags)) +{ + char result[SWIG_BUFFER_SIZE]; + fputs("pack, v->size, 0, sizeof(result))) { + fputs("at ", fp); + fputs(result, fp); + } + fputs(v->ty->name,fp); + fputs(">", fp); + return 0; +} + +SWIGRUNTIME PyObject * +SwigPyPacked_repr(SwigPyPacked *v) +{ + char result[SWIG_BUFFER_SIZE]; + if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) { + return SWIG_Python_str_FromFormat("", result, v->ty->name); + } else { + return SWIG_Python_str_FromFormat("", v->ty->name); + } +} + +SWIGRUNTIME PyObject * +SwigPyPacked_str(SwigPyPacked *v) +{ + char result[SWIG_BUFFER_SIZE]; + if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){ + return SWIG_Python_str_FromFormat("%s%s", result, v->ty->name); + } else { + return SWIG_Python_str_FromChar(v->ty->name); + } +} + +SWIGRUNTIME int +SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w) +{ + size_t i = v->size; + size_t j = w->size; + int s = (i < j) ? -1 : ((i > j) ? 1 : 0); + return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size); +} + +SWIGRUNTIME PyTypeObject* _PySwigPacked_type(void); + +SWIGRUNTIME PyTypeObject* +SwigPyPacked_type(void) { + static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigPacked_type(); + return type; +} + +SWIGRUNTIMEINLINE int +SwigPyPacked_Check(PyObject *op) { + return ((op)->ob_type == _PySwigPacked_type()) + || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0); +} + +SWIGRUNTIME void +SwigPyPacked_dealloc(PyObject *v) +{ + if (SwigPyPacked_Check(v)) { + SwigPyPacked *sobj = (SwigPyPacked *) v; + free(sobj->pack); + } + PyObject_DEL(v); +} + +SWIGRUNTIME PyTypeObject* +_PySwigPacked_type(void) { + static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer"; + static PyTypeObject swigpypacked_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp + = { + /* PyObject header changed in Python 3 */ +#if PY_VERSION_HEX>=0x03000000 + PyVarObject_HEAD_INIT(&PyType_Type, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"SwigPyPacked", /* tp_name */ + sizeof(SwigPyPacked), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyPacked_dealloc, /* tp_dealloc */ + (printfunc)SwigPyPacked_print, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ +#if PY_VERSION_HEX>=0x03000000 + 0, /* tp_reserved in 3.0.1 */ +#else + (cmpfunc)SwigPyPacked_compare, /* tp_compare */ +#endif + (reprfunc)SwigPyPacked_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)SwigPyPacked_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigpacked_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#ifdef COUNT_ALLOCS + 0,0,0,0 /* tp_alloc -> tp_next */ +#endif + }; + swigpypacked_type = tmp; + /* for Python 3 the ob_type already assigned in PyVarObject_HEAD_INIT() */ +#if PY_VERSION_HEX < 0x03000000 + swigpypacked_type.ob_type = &PyType_Type; +#endif + type_init = 1; + } + return &swigpypacked_type; +} + +SWIGRUNTIME PyObject * +SwigPyPacked_New(void *ptr, size_t size, swig_type_info *ty) +{ + SwigPyPacked *sobj = PyObject_NEW(SwigPyPacked, SwigPyPacked_type()); + if (sobj) { + void *pack = malloc(size); + if (pack) { + memcpy(pack, ptr, size); + sobj->pack = pack; + sobj->ty = ty; + sobj->size = size; + } else { + PyObject_DEL((PyObject *) sobj); + sobj = 0; + } + } + return (PyObject *) sobj; +} + +SWIGRUNTIME swig_type_info * +SwigPyPacked_UnpackData(PyObject *obj, void *ptr, size_t size) +{ + if (SwigPyPacked_Check(obj)) { + SwigPyPacked *sobj = (SwigPyPacked *)obj; + if (sobj->size != size) return 0; + memcpy(ptr, sobj->pack, size); + return sobj->ty; + } else { + return 0; + } +} + +/* ----------------------------------------------------------------------------- + * pointers/data manipulation + * ----------------------------------------------------------------------------- */ + +SWIGRUNTIMEINLINE PyObject * +_SWIG_This(void) +{ + return SWIG_Python_str_FromChar("this"); +} + +SWIGRUNTIME PyObject * +SWIG_This(void) +{ + static PyObject *SWIG_STATIC_POINTER(swig_this) = _SWIG_This(); + return swig_this; +} + +/* #define SWIG_PYTHON_SLOW_GETSET_THIS */ + +/* TODO: I don't know how to implement the fast getset in Python 3 right now */ +#if PY_VERSION_HEX>=0x03000000 +#define SWIG_PYTHON_SLOW_GETSET_THIS +#endif + +SWIGRUNTIME SwigPyObject * +SWIG_Python_GetSwigThis(PyObject *pyobj) +{ + if (SwigPyObject_Check(pyobj)) { + return (SwigPyObject *) pyobj; + } else { + PyObject *obj = 0; +#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000)) + if (PyInstance_Check(pyobj)) { + obj = _PyInstance_Lookup(pyobj, SWIG_This()); + } else { + PyObject **dictptr = _PyObject_GetDictPtr(pyobj); + if (dictptr != NULL) { + PyObject *dict = *dictptr; + obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0; + } else { +#ifdef PyWeakref_CheckProxy + if (PyWeakref_CheckProxy(pyobj)) { + PyObject *wobj = PyWeakref_GET_OBJECT(pyobj); + return wobj ? SWIG_Python_GetSwigThis(wobj) : 0; + } +#endif + obj = PyObject_GetAttr(pyobj,SWIG_This()); + if (obj) { + Py_DECREF(obj); + } else { + if (PyErr_Occurred()) PyErr_Clear(); + return 0; + } + } + } +#else + obj = PyObject_GetAttr(pyobj,SWIG_This()); + if (obj) { + Py_DECREF(obj); + } else { + if (PyErr_Occurred()) PyErr_Clear(); + return 0; + } +#endif + if (obj && !SwigPyObject_Check(obj)) { + /* a PyObject is called 'this', try to get the 'real this' + SwigPyObject from it */ + return SWIG_Python_GetSwigThis(obj); + } + return (SwigPyObject *)obj; + } +} + +/* Acquire a pointer value */ + +SWIGRUNTIME int +SWIG_Python_AcquirePtr(PyObject *obj, int own) { + if (own == SWIG_POINTER_OWN) { + SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj); + if (sobj) { + int oldown = sobj->own; + sobj->own = own; + return oldown; + } + } + return 0; +} + +/* Convert a pointer value */ + +SWIGRUNTIME int +SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) { + if (!obj) return SWIG_ERROR; + if (obj == Py_None) { + if (ptr) *ptr = 0; + return SWIG_OK; + } else { + SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj); + if (own) + *own = 0; + while (sobj) { + void *vptr = sobj->ptr; + if (ty) { + swig_type_info *to = sobj->ty; + if (to == ty) { + /* no type cast needed */ + if (ptr) *ptr = vptr; + break; + } else { + swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); + if (!tc) { + sobj = (SwigPyObject *)sobj->next; + } else { + if (ptr) { + int newmemory = 0; + *ptr = SWIG_TypeCast(tc,vptr,&newmemory); + if (newmemory == SWIG_CAST_NEW_MEMORY) { + assert(own); + if (own) + *own = *own | SWIG_CAST_NEW_MEMORY; + } + } + break; + } + } + } else { + if (ptr) *ptr = vptr; + break; + } + } + if (sobj) { + if (own) + *own = *own | sobj->own; + if (flags & SWIG_POINTER_DISOWN) { + sobj->own = 0; + } + return SWIG_OK; + } else { + int res = SWIG_ERROR; + if (flags & SWIG_POINTER_IMPLICIT_CONV) { + SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; + if (data && !data->implicitconv) { + PyObject *klass = data->klass; + if (klass) { + PyObject *impconv; + data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/ + impconv = SWIG_Python_CallFunctor(klass, obj); + data->implicitconv = 0; + if (PyErr_Occurred()) { + PyErr_Clear(); + impconv = 0; + } + if (impconv) { + SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv); + if (iobj) { + void *vptr; + res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0); + if (SWIG_IsOK(res)) { + if (ptr) { + *ptr = vptr; + /* transfer the ownership to 'ptr' */ + iobj->own = 0; + res = SWIG_AddCast(res); + res = SWIG_AddNewMask(res); + } else { + res = SWIG_AddCast(res); + } + } + } + Py_DECREF(impconv); + } + } + } + } + return res; + } + } +} + +/* Convert a function ptr value */ + +SWIGRUNTIME int +SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) { + if (!PyCFunction_Check(obj)) { + return SWIG_ConvertPtr(obj, ptr, ty, 0); + } else { + void *vptr = 0; + + /* here we get the method pointer for callbacks */ + const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc); + const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0; + if (desc) + desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0; + if (!desc) + return SWIG_ERROR; + if (ty) { + swig_cast_info *tc = SWIG_TypeCheck(desc,ty); + if (tc) { + int newmemory = 0; + *ptr = SWIG_TypeCast(tc,vptr,&newmemory); + assert(!newmemory); /* newmemory handling not yet implemented */ + } else { + return SWIG_ERROR; + } + } else { + *ptr = vptr; + } + return SWIG_OK; + } +} + +/* Convert a packed value value */ + +SWIGRUNTIME int +SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) { + swig_type_info *to = SwigPyPacked_UnpackData(obj, ptr, sz); + if (!to) return SWIG_ERROR; + if (ty) { + if (to != ty) { + /* check type cast? */ + swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); + if (!tc) return SWIG_ERROR; + } + } + return SWIG_OK; +} + +/* ----------------------------------------------------------------------------- + * Create a new pointer object + * ----------------------------------------------------------------------------- */ + +/* + Create a new instance object, without calling __init__, and set the + 'this' attribute. +*/ + +SWIGRUNTIME PyObject* +SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this) +{ +#if (PY_VERSION_HEX >= 0x02020000) + PyObject *inst = 0; + PyObject *newraw = data->newraw; + if (newraw) { + inst = PyObject_Call(newraw, data->newargs, NULL); + if (inst) { +#if !defined(SWIG_PYTHON_SLOW_GETSET_THIS) + PyObject **dictptr = _PyObject_GetDictPtr(inst); + if (dictptr != NULL) { + PyObject *dict = *dictptr; + if (dict == NULL) { + dict = PyDict_New(); + *dictptr = dict; + PyDict_SetItem(dict, SWIG_This(), swig_this); + } + } +#else + PyObject *key = SWIG_This(); + PyObject_SetAttr(inst, key, swig_this); +#endif + } + } else { +#if PY_VERSION_HEX >= 0x03000000 + inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None); + PyObject_SetAttr(inst, SWIG_This(), swig_this); + Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG; +#else + PyObject *dict = PyDict_New(); + PyDict_SetItem(dict, SWIG_This(), swig_this); + inst = PyInstance_NewRaw(data->newargs, dict); + Py_DECREF(dict); +#endif + } + return inst; +#else +#if (PY_VERSION_HEX >= 0x02010000) + PyObject *inst; + PyObject *dict = PyDict_New(); + PyDict_SetItem(dict, SWIG_This(), swig_this); + inst = PyInstance_NewRaw(data->newargs, dict); + Py_DECREF(dict); + return (PyObject *) inst; +#else + PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type); + if (inst == NULL) { + return NULL; + } + inst->in_class = (PyClassObject *)data->newargs; + Py_INCREF(inst->in_class); + inst->in_dict = PyDict_New(); + if (inst->in_dict == NULL) { + Py_DECREF(inst); + return NULL; + } +#ifdef Py_TPFLAGS_HAVE_WEAKREFS + inst->in_weakreflist = NULL; +#endif +#ifdef Py_TPFLAGS_GC + PyObject_GC_Init(inst); +#endif + PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this); + return (PyObject *) inst; +#endif +#endif +} + +SWIGRUNTIME void +SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this) +{ + PyObject *dict; +#if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS) + PyObject **dictptr = _PyObject_GetDictPtr(inst); + if (dictptr != NULL) { + dict = *dictptr; + if (dict == NULL) { + dict = PyDict_New(); + *dictptr = dict; + } + PyDict_SetItem(dict, SWIG_This(), swig_this); + return; + } +#endif + dict = PyObject_GetAttrString(inst, (char*)"__dict__"); + PyDict_SetItem(dict, SWIG_This(), swig_this); + Py_DECREF(dict); +} + + +SWIGINTERN PyObject * +SWIG_Python_InitShadowInstance(PyObject *args) { + PyObject *obj[2]; + if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) { + return NULL; + } else { + SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]); + if (sthis) { + SwigPyObject_append((PyObject*) sthis, obj[1]); + } else { + SWIG_Python_SetSwigThis(obj[0], obj[1]); + } + return SWIG_Py_Void(); + } +} + +/* Create a new pointer object */ + +SWIGRUNTIME PyObject * +SWIG_Python_NewPointerObj(void *ptr, swig_type_info *type, int flags) { + if (!ptr) { + return SWIG_Py_Void(); + } else { + int own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; + PyObject *robj = SwigPyObject_New(ptr, type, own); + SwigPyClientData *clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0; + if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) { + PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj); + if (inst) { + Py_DECREF(robj); + robj = inst; + } + } + return robj; + } +} + +/* Create a new packed object */ + +SWIGRUNTIMEINLINE PyObject * +SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { + return ptr ? SwigPyPacked_New((void *) ptr, sz, type) : SWIG_Py_Void(); +} + +/* -----------------------------------------------------------------------------* + * Get type list + * -----------------------------------------------------------------------------*/ + +#ifdef SWIG_LINK_RUNTIME +void *SWIG_ReturnGlobalTypeList(void *); +#endif + +SWIGRUNTIME swig_module_info * +SWIG_Python_GetModule(void) { + static void *type_pointer = (void *)0; + /* first check if module already created */ + if (!type_pointer) { +#ifdef SWIG_LINK_RUNTIME + type_pointer = SWIG_ReturnGlobalTypeList((void *)0); +#else + type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, + (char*)"type_pointer" SWIG_TYPE_TABLE_NAME); + if (PyErr_Occurred()) { + PyErr_Clear(); + type_pointer = (void *)0; + } +#endif + } + return (swig_module_info *) type_pointer; +} + +#if PY_MAJOR_VERSION < 2 +/* PyModule_AddObject function was introduced in Python 2.0. The following function + is copied out of Python/modsupport.c in python version 2.3.4 */ +SWIGINTERN int +PyModule_AddObject(PyObject *m, char *name, PyObject *o) +{ + PyObject *dict; + if (!PyModule_Check(m)) { + PyErr_SetString(PyExc_TypeError, + "PyModule_AddObject() needs module as first arg"); + return SWIG_ERROR; + } + if (!o) { + PyErr_SetString(PyExc_TypeError, + "PyModule_AddObject() needs non-NULL value"); + return SWIG_ERROR; + } + + dict = PyModule_GetDict(m); + if (dict == NULL) { + /* Internal error -- modules must have a dict! */ + PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__", + PyModule_GetName(m)); + return SWIG_ERROR; + } + if (PyDict_SetItemString(dict, name, o)) + return SWIG_ERROR; + Py_DECREF(o); + return SWIG_OK; +} +#endif + +SWIGRUNTIME void +SWIG_Python_DestroyModule(void *vptr) +{ + swig_module_info *swig_module = (swig_module_info *) vptr; + swig_type_info **types = swig_module->types; + size_t i; + for (i =0; i < swig_module->size; ++i) { + swig_type_info *ty = types[i]; + if (ty->owndata) { + SwigPyClientData *data = (SwigPyClientData *) ty->clientdata; + if (data) SwigPyClientData_Del(data); + } + } + Py_DECREF(SWIG_This()); +} + +SWIGRUNTIME void +SWIG_Python_SetModule(swig_module_info *swig_module) { + static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} };/* Sentinel */ + +#if PY_VERSION_HEX >= 0x03000000 + /* Add a dummy module object into sys.modules */ + PyObject *module = PyImport_AddModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION); +#else + PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, + swig_empty_runtime_method_table); +#endif + PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule); + if (pointer && module) { + PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer); + } else { + Py_XDECREF(pointer); + } +} + +/* The python cached type query */ +SWIGRUNTIME PyObject * +SWIG_Python_TypeCache(void) { + static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New(); + return cache; +} + +SWIGRUNTIME swig_type_info * +SWIG_Python_TypeQuery(const char *type) +{ + PyObject *cache = SWIG_Python_TypeCache(); + PyObject *key = SWIG_Python_str_FromChar(type); + PyObject *obj = PyDict_GetItem(cache, key); + swig_type_info *descriptor; + if (obj) { + descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj); + } else { + swig_module_info *swig_module = SWIG_Python_GetModule(); + descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type); + if (descriptor) { + obj = PyCObject_FromVoidPtr(descriptor, NULL); + PyDict_SetItem(cache, key, obj); + Py_DECREF(obj); + } + } + Py_DECREF(key); + return descriptor; +} + +/* + For backward compatibility only +*/ +#define SWIG_POINTER_EXCEPTION 0 +#define SWIG_arg_fail(arg) SWIG_Python_ArgFail(arg) +#define SWIG_MustGetPtr(p, type, argnum, flags) SWIG_Python_MustGetPtr(p, type, argnum, flags) + +SWIGRUNTIME int +SWIG_Python_AddErrMesg(const char* mesg, int infront) +{ + if (PyErr_Occurred()) { + PyObject *type = 0; + PyObject *value = 0; + PyObject *traceback = 0; + PyErr_Fetch(&type, &value, &traceback); + if (value) { + char *tmp; + PyObject *old_str = PyObject_Str(value); + Py_XINCREF(type); + PyErr_Clear(); + if (infront) { + PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str)); + } else { + PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); + } + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(old_str); + } + return 1; + } else { + return 0; + } +} + +SWIGRUNTIME int +SWIG_Python_ArgFail(int argnum) +{ + if (PyErr_Occurred()) { + /* add information about failing argument */ + char mesg[256]; + PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum); + return SWIG_Python_AddErrMesg(mesg, 1); + } else { + return 0; + } +} + +SWIGRUNTIMEINLINE const char * +SwigPyObject_GetDesc(PyObject *self) +{ + SwigPyObject *v = (SwigPyObject *)self; + swig_type_info *ty = v ? v->ty : 0; + return ty ? ty->str : (char*)""; +} + +SWIGRUNTIME void +SWIG_Python_TypeError(const char *type, PyObject *obj) +{ + if (type) { +#if defined(SWIG_COBJECT_TYPES) + if (obj && SwigPyObject_Check(obj)) { + const char *otype = (const char *) SwigPyObject_GetDesc(obj); + if (otype) { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'SwigPyObject(%s)' is received", + type, otype); + return; + } + } else +#endif + { + const char *otype = (obj ? obj->ob_type->tp_name : 0); + if (otype) { + PyObject *str = PyObject_Str(obj); + const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0; + if (cstr) { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received", + type, otype, cstr); + SWIG_Python_str_DelForPy3(cstr); + } else { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received", + type, otype); + } + Py_XDECREF(str); + return; + } + } + PyErr_Format(PyExc_TypeError, "a '%s' is expected", type); + } else { + PyErr_Format(PyExc_TypeError, "unexpected type is received"); + } +} + + +/* Convert a pointer value, signal an exception on a type mismatch */ +SWIGRUNTIME void * +SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags) { + void *result; + if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) { + PyErr_Clear(); +#if SWIG_POINTER_EXCEPTION + if (flags) { + SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj); + SWIG_Python_ArgFail(argnum); + } +#endif + } + return result; +} + + +#ifdef __cplusplus +#if 0 +{ /* cc-mode */ +#endif +} +#endif + + + +#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) + +#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else + + + +/* -------- TYPES TABLE (BEGIN) -------- */ + +#define SWIGTYPE_p_FILE swig_types[0] +#define SWIGTYPE_p_char swig_types[1] +#define SWIGTYPE_p_double swig_types[2] +#define SWIGTYPE_p_doublep swig_types[3] +#define SWIGTYPE_p_int swig_types[4] +#define SWIGTYPE_p_intp swig_types[5] +#define SWIGTYPE_p_long swig_types[6] +#define SWIGTYPE_p_longp swig_types[7] +#define SWIGTYPE_p_p_void swig_types[8] +#define SWIGTYPE_p_size_t swig_types[9] +static swig_type_info *swig_types[11]; +static swig_module_info swig_module = {swig_types, 10, 0, 0, 0, 0}; +#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) +#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) + +/* -------- TYPES TABLE (END) -------- */ + +#if (PY_VERSION_HEX <= 0x02000000) +# if !defined(SWIG_PYTHON_CLASSIC) +# error "This python version requires swig to be run with the '-classic' option" +# endif +#endif + +/*----------------------------------------------- + @(target):= _gribapi_swig.so + ------------------------------------------------*/ +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_init PyInit__gribapi_swig + +#else +# define SWIG_init init_gribapi_swig + +#endif +#define SWIG_name "_gribapi_swig" + +#define SWIGVERSION 0x010340 +#define SWIG_VERSION SWIGVERSION + + +#define SWIG_as_voidptr(a) (void *)((const void *)(a)) +#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),(void**)(a)) + + +typedef struct SWIGCDATA { + char *data; + size_t len; +} SWIGCDATA; + + + + + + +static SWIGCDATA cdata_void(void *ptr, size_t nelements) + + + +{ + SWIGCDATA d; + d.data = (char *) ptr; + + + + d.len = nelements; + + return d; +} + + + + + +SWIGINTERN int +SWIG_AsVal_double (PyObject *obj, double *val) +{ + int res = SWIG_TypeError; + if (PyFloat_Check(obj)) { + if (val) *val = PyFloat_AsDouble(obj); + return SWIG_OK; + } else if (PyInt_Check(obj)) { + if (val) *val = PyInt_AsLong(obj); + return SWIG_OK; + } else if (PyLong_Check(obj)) { + double v = PyLong_AsDouble(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + double d = PyFloat_AsDouble(obj); + if (!PyErr_Occurred()) { + if (val) *val = d; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + long v = PyLong_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_AddCast(SWIG_OK)); + } else { + PyErr_Clear(); + } + } + } +#endif + return res; +} + + +#include + + +#include + + +SWIGINTERNINLINE int +SWIG_CanCastAsInteger(double *d, double min, double max) { + double x = *d; + if ((min <= x && x <= max)) { + double fx = floor(x); + double cx = ceil(x); + double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */ + if ((errno == EDOM) || (errno == ERANGE)) { + errno = 0; + } else { + double summ, reps, diff; + if (rd < x) { + diff = x - rd; + } else if (rd > x) { + diff = rd - x; + } else { + return 1; + } + summ = rd + x; + reps = diff/summ; + if (reps < 8*DBL_EPSILON) { + *d = rd; + return 1; + } + } + } + return 0; +} + + +SWIGINTERN int +SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) +{ + if (PyInt_Check(obj)) { + long v = PyInt_AsLong(obj); + if (v >= 0) { + if (val) *val = v; + return SWIG_OK; + } else { + return SWIG_OverflowError; + } + } else if (PyLong_Check(obj)) { + unsigned long v = PyLong_AsUnsignedLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + unsigned long v = PyLong_AsUnsignedLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + double d; + int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); + if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) { + if (val) *val = (unsigned long)(d); + return res; + } + } + } +#endif + return SWIG_TypeError; +} + + +SWIGINTERNINLINE int +SWIG_AsVal_size_t (PyObject * obj, size_t *val) +{ + unsigned long v; + int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0); + if (SWIG_IsOK(res) && val) *val = (size_t)(v); + return res; +} + + +SWIGINTERN swig_type_info* +SWIG_pchar_descriptor(void) +{ + static int init = 0; + static swig_type_info* info = 0; + if (!init) { + info = SWIG_TypeQuery("_p_char"); + init = 1; + } + return info; +} + + +SWIGINTERNINLINE PyObject * +SWIG_FromCharPtrAndSize(const char* carray, size_t size) +{ + if (carray) { + if (size > INT_MAX) { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + return pchar_descriptor ? + SWIG_NewPointerObj((char *)(carray), pchar_descriptor, 0) : SWIG_Py_Void(); + } else { +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_FromStringAndSize(carray, (int)(size)); +#else + return PyString_FromStringAndSize(carray, (int)(size)); +#endif + } + } else { + return SWIG_Py_Void(); + } +} + + + #define SWIG_From_long PyInt_FromLong + + +SWIGINTERNINLINE PyObject * +SWIG_From_int (int value) +{ + return SWIG_From_long (value); +} + + +#define SWIG_FILE_WITH_INIT +#include "grib_interface.h" + + +typedef int intp; + +SWIGINTERN intp *new_intp(){ + return (int *)malloc(sizeof(int)); + } +SWIGINTERN void delete_intp(intp *self){ + if (self) free((char*)self); + } + +#include +#if !defined(SWIG_NO_LLONG_MAX) +# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) +# define LLONG_MAX __LONG_LONG_MAX__ +# define LLONG_MIN (-LLONG_MAX - 1LL) +# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) +# endif +#endif + + +SWIGINTERN int +SWIG_AsVal_long (PyObject *obj, long* val) +{ + if (PyInt_Check(obj)) { + if (val) *val = PyInt_AsLong(obj); + return SWIG_OK; + } else if (PyLong_Check(obj)) { + long v = PyLong_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + long v = PyInt_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + double d; + int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); + if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) { + if (val) *val = (long)(d); + return res; + } + } + } +#endif + return SWIG_TypeError; +} + + +SWIGINTERN int +SWIG_AsVal_int (PyObject * obj, int *val) +{ + long v; + int res = SWIG_AsVal_long (obj, &v); + if (SWIG_IsOK(res)) { + if ((v < INT_MIN || v > INT_MAX)) { + return SWIG_OverflowError; + } else { + if (val) *val = (int)(v); + } + } + return res; +} + +SWIGINTERN void intp_assign(intp *self,int value){ + *self = value; + } +SWIGINTERN int intp_value(intp *self){ + return *self; + } +SWIGINTERN int *intp_cast(intp *self){ + return self; + } +SWIGINTERN intp *intp_frompointer(int *t){ + return (intp *) t; + } + +typedef long longp; + +SWIGINTERN longp *new_longp(){ + return (long *)malloc(sizeof(long)); + } +SWIGINTERN void delete_longp(longp *self){ + if (self) free((char*)self); + } +SWIGINTERN void longp_assign(longp *self,long value){ + *self = value; + } +SWIGINTERN long longp_value(longp *self){ + return *self; + } +SWIGINTERN long *longp_cast(longp *self){ + return self; + } +SWIGINTERN longp *longp_frompointer(long *t){ + return (longp *) t; + } + +typedef double doublep; + +SWIGINTERN doublep *new_doublep(){ + return (double *)malloc(sizeof(double)); + } +SWIGINTERN void delete_doublep(doublep *self){ + if (self) free((char*)self); + } +SWIGINTERN void doublep_assign(doublep *self,double value){ + *self = value; + } +SWIGINTERN double doublep_value(doublep *self){ + return *self; + } + + #define SWIG_From_double PyFloat_FromDouble + +SWIGINTERN double *doublep_cast(doublep *self){ + return self; + } +SWIGINTERN doublep *doublep_frompointer(double *t){ + return (doublep *) t; + } + + static double *new_doubleArray(size_t nelements) { + return (double *)malloc((nelements)*sizeof(double)); + } + + static void delete_doubleArray(double *ary) { + free((char*)ary); + } + + static double doubleArray_getitem(double *ary, size_t index) { + return ary[index]; + } + static void doubleArray_setitem(double *ary, size_t index, double value) { + ary[index] = value; + } + + + static long *new_longArray(size_t nelements) { + return (long *)malloc((nelements)*sizeof(long)); + } + + static void delete_longArray(long *ary) { + free((char*)ary); + } + + static long longArray_getitem(long *ary, size_t index) { + return ary[index]; + } + static void longArray_setitem(long *ary, size_t index, long value) { + ary[index] = value; + } + + + static int *new_intArray(size_t nelements) { + return (int *)malloc((nelements)*sizeof(int)); + } + + static void delete_intArray(int *ary) { + free((char*)ary); + } + + static int intArray_getitem(int *ary, size_t index) { + return ary[index]; + } + static void intArray_setitem(int *ary, size_t index, int value) { + ary[index] = value; + } + + +SWIGINTERN int +SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) +{ +#if PY_VERSION_HEX>=0x03000000 + if (PyUnicode_Check(obj)) +#else + if (PyString_Check(obj)) +#endif + { + char *cstr; Py_ssize_t len; +#if PY_VERSION_HEX>=0x03000000 + if (!alloc && cptr) { + /* We can't allow converting without allocation, since the internal + representation of string in Python 3 is UCS-2/UCS-4 but we require + a UTF-8 representation. + TODO(bhy) More detailed explanation */ + return SWIG_RuntimeError; + } + obj = PyUnicode_AsUTF8String(obj); + PyBytes_AsStringAndSize(obj, &cstr, &len); + if(alloc) *alloc = SWIG_NEWOBJ; +#else + PyString_AsStringAndSize(obj, &cstr, &len); +#endif + if (cptr) { + if (alloc) { + /* + In python the user should not be able to modify the inner + string representation. To warranty that, if you define + SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string + buffer is always returned. + + The default behavior is just to return the pointer value, + so, be careful. + */ +#if defined(SWIG_PYTHON_SAFE_CSTRINGS) + if (*alloc != SWIG_OLDOBJ) +#else + if (*alloc == SWIG_NEWOBJ) +#endif + { + *cptr = (char *)memcpy((char *)malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); + *alloc = SWIG_NEWOBJ; + } + else { + *cptr = cstr; + *alloc = SWIG_OLDOBJ; + } + } else { + #if PY_VERSION_HEX>=0x03000000 + assert(0); /* Should never reach here in Python 3 */ + #endif + *cptr = SWIG_Python_str_AsChar(obj); + } + } + if (psize) *psize = len + 1; +#if PY_VERSION_HEX>=0x03000000 + Py_XDECREF(obj); +#endif + return SWIG_OK; + } else { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + if (pchar_descriptor) { + void* vptr = 0; + if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { + if (cptr) *cptr = (char *) vptr; + if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; + if (alloc) *alloc = SWIG_OLDOBJ; + return SWIG_OK; + } + } + } + return SWIG_TypeError; +} + + + + + +SWIGINTERNINLINE PyObject* +SWIG_From_unsigned_SS_long (unsigned long value) +{ + return (value > LONG_MAX) ? + PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value)); +} + + +SWIGINTERNINLINE PyObject * +SWIG_From_size_t (size_t value) +{ + return SWIG_From_unsigned_SS_long ((unsigned long)(value)); +} + + +SWIGINTERNINLINE PyObject * +SWIG_FromCharPtr(const char *cptr) +{ + return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0)); +} + +#ifdef __cplusplus +extern "C" { +#endif +SWIGINTERN PyObject *_wrap_cdata(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + void *arg1 = (void *) 0 ; + size_t arg2 = (size_t) 1 ; + int res1 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + SWIGCDATA result; + + if (!PyArg_ParseTuple(args,(char *)"O|O:cdata",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdata" "', argument " "1"" of type '" "void *""'"); + } + if (obj1) { + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "cdata" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + } + result = cdata_void(arg1,arg2); + resultobj = SWIG_FromCharPtrAndSize((&result)->data,(&result)->len); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_memmove(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + void *arg1 = (void *) 0 ; + void *arg2 = (void *) 0 ; + size_t arg3 ; + int res1 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:memmove",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "memmove" "', argument " "1"" of type '" "void *""'"); + } + res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "memmove" "', argument " "2"" of type '" "void const *""'"); + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "memmove" "', argument " "3"" of type '" "size_t""'"); + } + arg3 = (size_t)(val3); + memmove(arg1,(void const *)arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_intp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_intp")) SWIG_fail; + result = (intp *)new_intp(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_intp, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_intp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_intp",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_intp" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + delete_intp(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + int arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intp_assign",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_assign" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intp_assign" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + intp_assign(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:intp_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_value" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + result = (int)intp_value(arg1); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:intp_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_cast" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + result = (int *)intp_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + intp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:intp_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_frompointer" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + result = (intp *)intp_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_intp, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *intp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_intp, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_longp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_longp")) SWIG_fail; + result = (longp *)new_longp(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_longp, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_longp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_longp",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_longp" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + delete_longp(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + long arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + long val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:longp_assign",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_assign" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + ecode2 = SWIG_AsVal_long(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "longp_assign" "', argument " "2"" of type '" "long""'"); + } + arg2 = (long)(val2); + longp_assign(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + long result; + + if (!PyArg_ParseTuple(args,(char *)"O:longp_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_value" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + result = (long)longp_value(arg1); + resultobj = SWIG_From_long((long)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + long *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:longp_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_cast" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + result = (long *)longp_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_long, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + longp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:longp_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_frompointer" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + result = (longp *)longp_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_longp, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *longp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_longp, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_doublep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_doublep")) SWIG_fail; + result = (doublep *)new_doublep(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_doublep, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_doublep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_doublep",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_doublep" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + delete_doublep(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + double arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + double val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:doublep_assign",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_assign" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + ecode2 = SWIG_AsVal_double(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "doublep_assign" "', argument " "2"" of type '" "double""'"); + } + arg2 = (double)(val2); + doublep_assign(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + double result; + + if (!PyArg_ParseTuple(args,(char *)"O:doublep_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_value" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + result = (double)doublep_value(arg1); + resultobj = SWIG_From_double((double)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + double *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:doublep_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_cast" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + result = (double *)doublep_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_double, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + doublep *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:doublep_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_frompointer" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + result = (doublep *)doublep_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_doublep, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *doublep_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_doublep, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_doubleArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + double *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_doubleArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_doubleArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = (size_t)(val1); + result = (double *)new_doubleArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_double, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_doubleArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_doubleArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_doubleArray" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + delete_doubleArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doubleArray_getitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + double result; + + if (!PyArg_ParseTuple(args,(char *)"OO:doubleArray_getitem",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doubleArray_getitem" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "doubleArray_getitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + result = (double)doubleArray_getitem(arg1,arg2); + resultobj = SWIG_From_double((double)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doubleArray_setitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + size_t arg2 ; + double arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + double val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:doubleArray_setitem",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doubleArray_setitem" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "doubleArray_setitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + ecode3 = SWIG_AsVal_double(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "doubleArray_setitem" "', argument " "3"" of type '" "double""'"); + } + arg3 = (double)(val3); + doubleArray_setitem(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_longArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + long *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_longArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_longArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = (size_t)(val1); + result = (long *)new_longArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_long, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_longArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_longArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_longArray" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + delete_longArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longArray_getitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + long result; + + if (!PyArg_ParseTuple(args,(char *)"OO:longArray_getitem",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longArray_getitem" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "longArray_getitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + result = (long)longArray_getitem(arg1,arg2); + resultobj = SWIG_From_long((long)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longArray_setitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + size_t arg2 ; + long arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + long val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:longArray_setitem",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longArray_setitem" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "longArray_setitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + ecode3 = SWIG_AsVal_long(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "longArray_setitem" "', argument " "3"" of type '" "long""'"); + } + arg3 = (long)(val3); + longArray_setitem(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_intArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + int *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_intArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_intArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = (size_t)(val1); + result = (int *)new_intArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_intArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_intArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_intArray" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + delete_intArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intArray_getitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:intArray_getitem",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intArray_getitem" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intArray_getitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + result = (int)intArray_getitem(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intArray_setitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + size_t arg2 ; + int arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intArray_setitem",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intArray_setitem" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intArray_setitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intArray_setitem" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + intArray_setitem(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int *arg2 = (int *) 0 ; + int arg3 ; + int temp2 ; + int res2 = 0 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_from_file",&obj0,&obj1,&obj2)) SWIG_fail; + { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_file" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "grib_c_new_from_file" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + result = (int)grib_c_new_from_file(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_bufr_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int *arg2 = (int *) 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_new_bufr_from_file",&obj0,&obj1)) SWIG_fail; + { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_bufr_from_file" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_bufr_from_file(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_gts_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int *arg2 = (int *) 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_new_gts_from_file",&obj0,&obj1)) SWIG_fail; + { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_gts_from_file" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_gts_from_file(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_iterator_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_iterator_new",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_new" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_new" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_iterator_new(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + char *arg3 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_keys_iterator_new",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_new" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res3 = SWIG_AsCharPtrAndSize(obj1, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_keys_iterator_new" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + result = (int)grib_c_keys_iterator_new(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_samples(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_new_from_samples",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_samples" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_new_from_samples" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_new_from_samples(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res1)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1))); + } else { + int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags)); + } + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_new_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int res1 ; + char *buf1 = 0 ; + int alloc1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_new_from_file",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "grib_c_index_new_from_file" "', argument " "1"" of type '" "char *""'"); + } + arg1 = (char *)(buf1); + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_new_from_file" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_new_from_file(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_add_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_add_file",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_add_file" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_add_file" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_add_file(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_index(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_new_from_index",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_index" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_index" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_from_index(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_write",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_write" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_write" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_write(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_read(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char *arg1 = (char *) 0 ; + int *arg2 = (int *) 0 ; + int res1 ; + char *buf1 = 0 ; + int alloc1 = 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_index_read",&obj0)) SWIG_fail; + res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "grib_c_index_read" "', argument " "1"" of type '" "char *""'"); + } + arg1 = (char *)(buf1); + result = (int)grib_c_index_read(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + return resultobj; +fail: + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_message(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + size_t *arg3 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + size_t temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_from_message",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_message" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_new_from_message" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_size_t,0))))) { + size_t val; + int ecode = SWIG_AsVal_size_t(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_message" "', argument " "3"" of type '" "size_t""'"); + } + temp3 = (size_t)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_from_message(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res1)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1))); + } else { + int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags)); + } + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_count_in_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int *arg2 = (int *) 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_count_in_file",&obj0)) SWIG_fail; + { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + result = (int)grib_c_count_in_file(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_release(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_release",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_release" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_release(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + FILE *arg2 = (FILE *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_write",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_write" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + { + if ( PyFile_Check(obj1) ){ + arg2 = PyFile_AsFile(obj1); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + result = (int)grib_c_write(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_size_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_size_long",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_size_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_size_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_size_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_string_length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + size_t *arg3 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + size_t temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_string_length",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_string_length" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_string_length" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_string_length(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_size_t((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_size_t, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_clone",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_clone" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_clone" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_clone(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_copy_namespace(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_copy_namespace",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_copy_namespace" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_copy_namespace" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_copy_namespace" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_copy_namespace(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_message_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + size_t *arg2 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + size_t temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_get_message_size",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_message_size" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_get_message_size(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_size_t((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_size_t, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_native_type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_native_type",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_native_type" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_native_type" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_native_type(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = SWIG_TMPOBJ ; + int result; + + arg1 = &temp1; + if (!PyArg_ParseTuple(args,(char *)":grib_c_multi_new")) SWIG_fail; + result = (int)grib_c_multi_new(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res1)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1))); + } else { + int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_support_on(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_multi_support_on")) SWIG_fail; + result = (int)grib_c_multi_support_on(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + FILE *arg2 = (FILE *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_multi_write",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_write" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + { + if ( PyFile_Check(obj1) ){ + arg2 = PyFile_AsFile(obj1); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + result = (int)grib_c_multi_write(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_support_off(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_multi_support_off")) SWIG_fail; + result = (int)grib_c_multi_support_off(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_release(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_multi_release",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_release" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_multi_release(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_multi_append",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_append" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_append" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_append" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_multi_append(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gribex_mode_on(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gribex_mode_on")) SWIG_fail; + result = (int)grib_c_gribex_mode_on(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gribex_mode_off(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gribex_mode_off")) SWIG_fail; + result = (int)grib_c_gribex_mode_off(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_keys_iterator_next",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_next" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_keys_iterator_next(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_keys_iterator_delete",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_delete" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_keys_iterator_delete(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_computed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_computed",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_computed" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_computed(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_coded(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_coded",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_coded" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_coded(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_edition_specific(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_edition_specific",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_edition_specific" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_edition_specific(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_duplicates(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_duplicates",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_duplicates" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_duplicates(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_read_only(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_read_only",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_read_only" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_read_only(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_function(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_function",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_function" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_function(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_rewind(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_keys_iterator_rewind",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_rewind" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_keys_iterator_rewind(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_get_name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int temp1 ; + int res1 = 0 ; + char temp2[1024+1] ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = (char *) temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_keys_iterator_get_name",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_get_name" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + ecode3 = SWIG_AsVal_int(obj1, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "grib_c_keys_iterator_get_name" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + result = (int)grib_c_keys_iterator_get_name(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + arg2[1024] = 0; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg2)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_size_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_get_size_long",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_size_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_size_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_get_size_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_index_get_long",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_index_get_long" "', argument " "3"" of type '" "long *""'"); + } + arg3 = (long *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_index_get_long" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_index_get_long(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_real8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_index_get_real8",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_real8" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_real8" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_index_get_real8" "', argument " "3"" of type '" "double *""'"); + } + arg3 = (double *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_index_get_real8" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_index_get_real8(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int *arg4 = (int *) 0 ; + int *arg5 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + char temp3[1024*1024+1] ; + int temp4 ; + int res4 = 0 ; + int temp5 ; + int res5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + arg3 = (char *) temp3; + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_index_get_string",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_string" "', argument " "4"" of type '" "int""'"); + } + temp4 = (int)(val); + arg4 = &temp4; + res4 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res5 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg5),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj3, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_string" "', argument " "5"" of type '" "int""'"); + } + temp5 = (int)(val); + arg5 = &temp5; + res5 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_get_string(arg1,arg2,arg3,arg4,arg5); + resultobj = SWIG_From_int((int)(result)); + arg3[1024*1024] = 0; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg3)); + if (SWIG_IsTmpObj(res5)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg5))); + } else { + int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_select_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_index_select_long",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_select_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_long,0))))) { + long val; + int ecode = SWIG_AsVal_long(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_long" "', argument " "3"" of type '" "long""'"); + } + temp3 = (long)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_select_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_select_real8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + double temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_index_select_real8",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_real8" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_select_real8" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_real8" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_select_real8(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_select_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_index_select_string",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_select_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_index_select_string" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + result = (int)grib_c_index_select_string(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_release(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_index_release",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_release" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_release(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_iterator_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_iterator_delete",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_delete" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_iterator_delete(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_iterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + double *arg2 = (double *) 0 ; + double *arg3 = (double *) 0 ; + double *arg4 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + double temp2 ; + int res2 = SWIG_TMPOBJ ; + double temp3 ; + int res3 = SWIG_TMPOBJ ; + double temp4 ; + int res4 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + arg3 = &temp3; + arg4 = &temp4; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_iterator_next",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_next" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_iterator_next(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res4)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg4))); + } else { + int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + size_t *arg4 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + size_t n3 ; + char *buff3 = 0 ; + size_t size3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_get_string",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_AsVal_size_t (obj2, &n3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_string" "', argument " "3"" of type '" "(char* string_val, size_t* string_size)""'"); + } + buff3= (char *)malloc((n3+1)*sizeof(char)); + arg3 = (char *)(buff3); + size3 = (size_t)(n3); + arg4 = &size3; + result = (int)grib_c_get_string(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtrAndSize(arg3,*arg4)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (buff3) free((char*)buff3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (buff3) free((char*)buff3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + int val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_set_string",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_set_string" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + ecode4 = SWIG_AsVal_int(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "grib_c_set_string" "', argument " "4"" of type '" "int""'"); + } + arg4 = (int)(val4); + result = (int)grib_c_set_string(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_long",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_set_long",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_long,0))))) { + long val; + int ecode = SWIG_AsVal_long(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_long" "', argument " "3"" of type '" "long""'"); + } + temp3 = (long)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_set_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + double temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_double",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_double" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_double" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_double(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + double temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_set_double",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_double" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_double" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_double" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_set_double(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_real8_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_set_real8_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_real8_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_real8_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_set_real8_array" "', argument " "3"" of type '" "double *""'"); + } + arg3 = (double *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_set_real8_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_set_real8_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_real8_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_get_real8_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_real8_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_real8_array" "', argument " "3"" of type '" "double *""'"); + } + arg3 = (double *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_get_real8_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_get_real8_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_long_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_get_long_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_long_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_long_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_long_array" "', argument " "3"" of type '" "long *""'"); + } + arg3 = (long *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_get_long_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_get_long_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_long_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_set_long_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_long_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_long_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_set_long_array" "', argument " "3"" of type '" "long *""'"); + } + arg3 = (long *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_set_long_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_set_long_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_real8_element(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + double *arg4 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = 0 ; + double temp4 ; + int res4 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + arg4 = &temp4; + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_get_real8_element",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_element" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_real8_element" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_element" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_get_real8_element(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res4)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg4))); + } else { + int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_real8_elements(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + double *arg4 = (double *) 0 ; + int *arg5 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOO:grib_c_get_real8_elements",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_elements" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_real8_elements" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_real8_elements" "', argument " "3"" of type '" "int *""'"); + } + arg3 = (int *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_get_real8_elements" "', argument " "4"" of type '" "double *""'"); + } + arg4 = (double *)(argp4); + res5 = SWIG_ConvertPtr(obj4, &argp5,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "grib_c_get_real8_elements" "', argument " "5"" of type '" "int *""'"); + } + arg5 = (int *)(argp5); + result = (int)grib_c_get_real8_elements(arg1,arg2,arg3,arg4,arg5); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_missing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_set_missing",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_missing" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_missing" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_set_missing(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_key_vals(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_set_key_vals",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_key_vals" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_key_vals" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_set_key_vals(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_is_missing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_is_missing",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_is_missing" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_is_missing" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_is_missing(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_is_defined(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_is_defined",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_is_defined" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_is_defined" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_is_defined(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_find_nearest_single(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + double *arg3 = (double *) 0 ; + double *arg4 = (double *) 0 ; + double *arg5 = (double *) 0 ; + double *arg6 = (double *) 0 ; + double *arg7 = (double *) 0 ; + double *arg8 = (double *) 0 ; + int *arg9 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + double temp3 ; + int res3 = 0 ; + double temp4 ; + int res4 = 0 ; + double temp5 ; + int res5 = SWIG_TMPOBJ ; + double temp6 ; + int res6 = SWIG_TMPOBJ ; + double temp7 ; + int res7 = SWIG_TMPOBJ ; + double temp8 ; + int res8 = SWIG_TMPOBJ ; + int temp9 ; + int res9 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + arg5 = &temp5; + arg6 = &temp6; + arg7 = &temp7; + arg8 = &temp8; + arg9 = &temp9; + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_find_nearest_single",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj3, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "4"" of type '" "double""'"); + } + temp4 = (double)(val); + arg4 = &temp4; + res4 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_find_nearest_single(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res5)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg5))); + } else { + int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res6)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg6))); + } else { + int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res7)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg7))); + } else { + int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res8)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg8))); + } else { + int new_flags = SWIG_IsNewObj(res8) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg8), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res9)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg9))); + } else { + int new_flags = SWIG_IsNewObj(res9) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg9), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_find_nearest_four_single(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + double *arg3 = (double *) 0 ; + double *arg4 = (double *) 0 ; + double *arg5 = (double *) 0 ; + double *arg6 = (double *) 0 ; + double *arg7 = (double *) 0 ; + double *arg8 = (double *) 0 ; + int *arg9 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + double temp3 ; + int res3 = 0 ; + double temp4 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + void *argp6 = 0 ; + int res6 = 0 ; + void *argp7 = 0 ; + int res7 = 0 ; + void *argp8 = 0 ; + int res8 = 0 ; + void *argp9 = 0 ; + int res9 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + PyObject * obj5 = 0 ; + PyObject * obj6 = 0 ; + PyObject * obj7 = 0 ; + PyObject * obj8 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:grib_c_find_nearest_four_single",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj3, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "4"" of type '" "double""'"); + } + temp4 = (double)(val); + arg4 = &temp4; + res4 = SWIG_AddTmpMask(ecode); + } + res5 = SWIG_ConvertPtr(obj4, &argp5,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "grib_c_find_nearest_four_single" "', argument " "5"" of type '" "double *""'"); + } + arg5 = (double *)(argp5); + res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res6)) { + SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "grib_c_find_nearest_four_single" "', argument " "6"" of type '" "double *""'"); + } + arg6 = (double *)(argp6); + res7 = SWIG_ConvertPtr(obj6, &argp7,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res7)) { + SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "grib_c_find_nearest_four_single" "', argument " "7"" of type '" "double *""'"); + } + arg7 = (double *)(argp7); + res8 = SWIG_ConvertPtr(obj7, &argp8,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res8)) { + SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "grib_c_find_nearest_four_single" "', argument " "8"" of type '" "double *""'"); + } + arg8 = (double *)(argp8); + res9 = SWIG_ConvertPtr(obj8, &argp9,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res9)) { + SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "grib_c_find_nearest_four_single" "', argument " "9"" of type '" "int *""'"); + } + arg9 = (int *)(argp9); + result = (int)grib_c_find_nearest_four_single(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_message(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + void **arg2 = (void **) 0 ; + size_t *arg3 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + void *temp2 = 0 ; + size_t tempn2 ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; arg3 = &tempn2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_get_message",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_message" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_get_message(arg1,(void const **)arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (*arg2) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtrAndSize(*arg2,*arg3)); + ; + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_error_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int temp1 ; + int res1 = 0 ; + char temp2[1024+1] ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = (char *) temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_error_string",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_error_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + ecode3 = SWIG_AsVal_int(obj1, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "grib_c_get_error_string" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + result = (int)grib_c_get_error_string(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + arg2[1024] = 0; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg2)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_no_fail_on_wrong_length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int arg1 ; + int val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:no_fail_on_wrong_length",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_int(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "no_fail_on_wrong_length" "', argument " "1"" of type '" "int""'"); + } + arg1 = (int)(val1); + no_fail_on_wrong_length(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_api_version(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_get_api_version")) SWIG_fail; + result = (long)grib_c_get_api_version(); + resultobj = SWIG_From_long((long)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gts_header_on(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gts_header_on")) SWIG_fail; + grib_c_gts_header_on(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gts_header_off(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gts_header_off")) SWIG_fail; + grib_c_gts_header_off(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +static PyMethodDef SwigMethods[] = { + { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL}, + { (char *)"cdata", _wrap_cdata, METH_VARARGS, NULL}, + { (char *)"memmove", _wrap_memmove, METH_VARARGS, NULL}, + { (char *)"new_intp", _wrap_new_intp, METH_VARARGS, NULL}, + { (char *)"delete_intp", _wrap_delete_intp, METH_VARARGS, NULL}, + { (char *)"intp_assign", _wrap_intp_assign, METH_VARARGS, NULL}, + { (char *)"intp_value", _wrap_intp_value, METH_VARARGS, NULL}, + { (char *)"intp_cast", _wrap_intp_cast, METH_VARARGS, NULL}, + { (char *)"intp_frompointer", _wrap_intp_frompointer, METH_VARARGS, NULL}, + { (char *)"intp_swigregister", intp_swigregister, METH_VARARGS, NULL}, + { (char *)"new_longp", _wrap_new_longp, METH_VARARGS, NULL}, + { (char *)"delete_longp", _wrap_delete_longp, METH_VARARGS, NULL}, + { (char *)"longp_assign", _wrap_longp_assign, METH_VARARGS, NULL}, + { (char *)"longp_value", _wrap_longp_value, METH_VARARGS, NULL}, + { (char *)"longp_cast", _wrap_longp_cast, METH_VARARGS, NULL}, + { (char *)"longp_frompointer", _wrap_longp_frompointer, METH_VARARGS, NULL}, + { (char *)"longp_swigregister", longp_swigregister, METH_VARARGS, NULL}, + { (char *)"new_doublep", _wrap_new_doublep, METH_VARARGS, NULL}, + { (char *)"delete_doublep", _wrap_delete_doublep, METH_VARARGS, NULL}, + { (char *)"doublep_assign", _wrap_doublep_assign, METH_VARARGS, NULL}, + { (char *)"doublep_value", _wrap_doublep_value, METH_VARARGS, NULL}, + { (char *)"doublep_cast", _wrap_doublep_cast, METH_VARARGS, NULL}, + { (char *)"doublep_frompointer", _wrap_doublep_frompointer, METH_VARARGS, NULL}, + { (char *)"doublep_swigregister", doublep_swigregister, METH_VARARGS, NULL}, + { (char *)"new_doubleArray", _wrap_new_doubleArray, METH_VARARGS, NULL}, + { (char *)"delete_doubleArray", _wrap_delete_doubleArray, METH_VARARGS, NULL}, + { (char *)"doubleArray_getitem", _wrap_doubleArray_getitem, METH_VARARGS, NULL}, + { (char *)"doubleArray_setitem", _wrap_doubleArray_setitem, METH_VARARGS, NULL}, + { (char *)"new_longArray", _wrap_new_longArray, METH_VARARGS, NULL}, + { (char *)"delete_longArray", _wrap_delete_longArray, METH_VARARGS, NULL}, + { (char *)"longArray_getitem", _wrap_longArray_getitem, METH_VARARGS, NULL}, + { (char *)"longArray_setitem", _wrap_longArray_setitem, METH_VARARGS, NULL}, + { (char *)"new_intArray", _wrap_new_intArray, METH_VARARGS, NULL}, + { (char *)"delete_intArray", _wrap_delete_intArray, METH_VARARGS, NULL}, + { (char *)"intArray_getitem", _wrap_intArray_getitem, METH_VARARGS, NULL}, + { (char *)"intArray_setitem", _wrap_intArray_setitem, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_file", _wrap_grib_c_new_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_bufr_from_file", _wrap_grib_c_new_bufr_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_gts_from_file", _wrap_grib_c_new_gts_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_iterator_new", _wrap_grib_c_iterator_new, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_new", _wrap_grib_c_keys_iterator_new, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_samples", _wrap_grib_c_new_from_samples, METH_VARARGS, NULL}, + { (char *)"grib_c_index_new_from_file", _wrap_grib_c_index_new_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_index_add_file", _wrap_grib_c_index_add_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_index", _wrap_grib_c_new_from_index, METH_VARARGS, NULL}, + { (char *)"grib_c_index_write", _wrap_grib_c_index_write, METH_VARARGS, NULL}, + { (char *)"grib_c_index_read", _wrap_grib_c_index_read, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_message", _wrap_grib_c_new_from_message, METH_VARARGS, NULL}, + { (char *)"grib_c_count_in_file", _wrap_grib_c_count_in_file, METH_VARARGS, NULL}, + { (char *)"grib_c_release", _wrap_grib_c_release, METH_VARARGS, NULL}, + { (char *)"grib_c_write", _wrap_grib_c_write, METH_VARARGS, NULL}, + { (char *)"grib_c_get_size_long", _wrap_grib_c_get_size_long, METH_VARARGS, NULL}, + { (char *)"grib_c_get_string_length", _wrap_grib_c_get_string_length, METH_VARARGS, NULL}, + { (char *)"grib_c_clone", _wrap_grib_c_clone, METH_VARARGS, NULL}, + { (char *)"grib_c_copy_namespace", _wrap_grib_c_copy_namespace, METH_VARARGS, NULL}, + { (char *)"grib_c_get_message_size", _wrap_grib_c_get_message_size, METH_VARARGS, NULL}, + { (char *)"grib_c_get_native_type", _wrap_grib_c_get_native_type, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_new", _wrap_grib_c_multi_new, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_support_on", _wrap_grib_c_multi_support_on, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_write", _wrap_grib_c_multi_write, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_support_off", _wrap_grib_c_multi_support_off, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_release", _wrap_grib_c_multi_release, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_append", _wrap_grib_c_multi_append, METH_VARARGS, NULL}, + { (char *)"grib_c_gribex_mode_on", _wrap_grib_c_gribex_mode_on, METH_VARARGS, NULL}, + { (char *)"grib_c_gribex_mode_off", _wrap_grib_c_gribex_mode_off, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_next", _wrap_grib_c_keys_iterator_next, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_delete", _wrap_grib_c_keys_iterator_delete, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_computed", _wrap_grib_c_skip_computed, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_coded", _wrap_grib_c_skip_coded, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_edition_specific", _wrap_grib_c_skip_edition_specific, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_duplicates", _wrap_grib_c_skip_duplicates, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_read_only", _wrap_grib_c_skip_read_only, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_function", _wrap_grib_c_skip_function, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_rewind", _wrap_grib_c_keys_iterator_rewind, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_get_name", _wrap_grib_c_keys_iterator_get_name, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_size_long", _wrap_grib_c_index_get_size_long, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_long", _wrap_grib_c_index_get_long, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_real8", _wrap_grib_c_index_get_real8, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_string", _wrap_grib_c_index_get_string, METH_VARARGS, NULL}, + { (char *)"grib_c_index_select_long", _wrap_grib_c_index_select_long, METH_VARARGS, NULL}, + { (char *)"grib_c_index_select_real8", _wrap_grib_c_index_select_real8, METH_VARARGS, NULL}, + { (char *)"grib_c_index_select_string", _wrap_grib_c_index_select_string, METH_VARARGS, NULL}, + { (char *)"grib_c_index_release", _wrap_grib_c_index_release, METH_VARARGS, NULL}, + { (char *)"grib_c_iterator_delete", _wrap_grib_c_iterator_delete, METH_VARARGS, NULL}, + { (char *)"grib_c_iterator_next", _wrap_grib_c_iterator_next, METH_VARARGS, NULL}, + { (char *)"grib_c_get_string", _wrap_grib_c_get_string, METH_VARARGS, NULL}, + { (char *)"grib_c_set_string", _wrap_grib_c_set_string, METH_VARARGS, NULL}, + { (char *)"grib_c_get_long", _wrap_grib_c_get_long, METH_VARARGS, NULL}, + { (char *)"grib_c_set_long", _wrap_grib_c_set_long, METH_VARARGS, NULL}, + { (char *)"grib_c_get_double", _wrap_grib_c_get_double, METH_VARARGS, NULL}, + { (char *)"grib_c_set_double", _wrap_grib_c_set_double, METH_VARARGS, NULL}, + { (char *)"grib_c_set_real8_array", _wrap_grib_c_set_real8_array, METH_VARARGS, NULL}, + { (char *)"grib_c_get_real8_array", _wrap_grib_c_get_real8_array, METH_VARARGS, NULL}, + { (char *)"grib_c_get_long_array", _wrap_grib_c_get_long_array, METH_VARARGS, NULL}, + { (char *)"grib_c_set_long_array", _wrap_grib_c_set_long_array, METH_VARARGS, NULL}, + { (char *)"grib_c_get_real8_element", _wrap_grib_c_get_real8_element, METH_VARARGS, NULL}, + { (char *)"grib_c_get_real8_elements", _wrap_grib_c_get_real8_elements, METH_VARARGS, NULL}, + { (char *)"grib_c_set_missing", _wrap_grib_c_set_missing, METH_VARARGS, NULL}, + { (char *)"grib_c_set_key_vals", _wrap_grib_c_set_key_vals, METH_VARARGS, NULL}, + { (char *)"grib_c_is_missing", _wrap_grib_c_is_missing, METH_VARARGS, NULL}, + { (char *)"grib_c_is_defined", _wrap_grib_c_is_defined, METH_VARARGS, NULL}, + { (char *)"grib_c_find_nearest_single", _wrap_grib_c_find_nearest_single, METH_VARARGS, NULL}, + { (char *)"grib_c_find_nearest_four_single", _wrap_grib_c_find_nearest_four_single, METH_VARARGS, NULL}, + { (char *)"grib_c_get_message", _wrap_grib_c_get_message, METH_VARARGS, NULL}, + { (char *)"grib_c_get_error_string", _wrap_grib_c_get_error_string, METH_VARARGS, NULL}, + { (char *)"no_fail_on_wrong_length", _wrap_no_fail_on_wrong_length, METH_VARARGS, NULL}, + { (char *)"grib_c_get_api_version", _wrap_grib_c_get_api_version, METH_VARARGS, NULL}, + { (char *)"grib_c_gts_header_on", _wrap_grib_c_gts_header_on, METH_VARARGS, NULL}, + { (char *)"grib_c_gts_header_off", _wrap_grib_c_gts_header_off, METH_VARARGS, NULL}, + { NULL, NULL, 0, NULL } +}; + + +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ + +static void *_p_intpTo_p_int(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((int *) ((intp *) x)); +} +static void *_p_doublepTo_p_double(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((double *) ((doublep *) x)); +} +static void *_p_longpTo_p_long(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((long *) ((longp *) x)); +} +static swig_type_info _swigt__p_FILE = {"_p_FILE", "FILE *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_double = {"_p_double", "double *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_doublep = {"_p_doublep", "doublep *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_int = {"_p_int", "int *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_intp = {"_p_intp", "intp *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_long = {"_p_long", "long *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_longp = {"_p_longp", "longp *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_p_void = {"_p_p_void", "void **", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_size_t = {"_p_size_t", "size_t *", 0, 0, (void*)0, 0}; + +static swig_type_info *swig_type_initial[] = { + &_swigt__p_FILE, + &_swigt__p_char, + &_swigt__p_double, + &_swigt__p_doublep, + &_swigt__p_int, + &_swigt__p_intp, + &_swigt__p_long, + &_swigt__p_longp, + &_swigt__p_p_void, + &_swigt__p_size_t, +}; + +static swig_cast_info _swigc__p_FILE[] = { {&_swigt__p_FILE, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_double[] = { {&_swigt__p_double, 0, 0, 0}, {&_swigt__p_doublep, _p_doublepTo_p_double, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_doublep[] = { {&_swigt__p_doublep, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_int[] = { {&_swigt__p_intp, _p_intpTo_p_int, 0, 0}, {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_intp[] = { {&_swigt__p_intp, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0}, {&_swigt__p_longp, _p_longpTo_p_long, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_longp[] = { {&_swigt__p_longp, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_p_void[] = { {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_size_t[] = { {&_swigt__p_size_t, 0, 0, 0},{0, 0, 0, 0}}; + +static swig_cast_info *swig_cast_initial[] = { + _swigc__p_FILE, + _swigc__p_char, + _swigc__p_double, + _swigc__p_doublep, + _swigc__p_int, + _swigc__p_intp, + _swigc__p_long, + _swigc__p_longp, + _swigc__p_p_void, + _swigc__p_size_t, +}; + + +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ + +static swig_const_info swig_const_table[] = { +{0, 0, 0, 0.0, 0, 0}}; + +#ifdef __cplusplus +} +#endif +/* ----------------------------------------------------------------------------- + * Type initialization: + * This problem is tough by the requirement that no dynamic + * memory is used. Also, since swig_type_info structures store pointers to + * swig_cast_info structures and swig_cast_info structures store pointers back + * to swig_type_info structures, we need some lookup code at initialization. + * The idea is that swig generates all the structures that are needed. + * The runtime then collects these partially filled structures. + * The SWIG_InitializeModule function takes these initial arrays out of + * swig_module, and does all the lookup, filling in the swig_module.types + * array with the correct data and linking the correct swig_cast_info + * structures together. + * + * The generated swig_type_info structures are assigned staticly to an initial + * array. We just loop through that array, and handle each type individually. + * First we lookup if this type has been already loaded, and if so, use the + * loaded structure instead of the generated one. Then we have to fill in the + * cast linked list. The cast data is initially stored in something like a + * two-dimensional array. Each row corresponds to a type (there are the same + * number of rows as there are in the swig_type_initial array). Each entry in + * a column is one of the swig_cast_info structures for that type. + * The cast_initial array is actually an array of arrays, because each row has + * a variable number of columns. So to actually build the cast linked list, + * we find the array of casts associated with the type, and loop through it + * adding the casts to the list. The one last trick we need to do is making + * sure the type pointer in the swig_cast_info struct is correct. + * + * First off, we lookup the cast->type name to see if it is already loaded. + * There are three cases to handle: + * 1) If the cast->type has already been loaded AND the type we are adding + * casting info to has not been loaded (it is in this module), THEN we + * replace the cast->type pointer with the type pointer that has already + * been loaded. + * 2) If BOTH types (the one we are adding casting info to, and the + * cast->type) are loaded, THEN the cast info has already been loaded by + * the previous module so we just ignore it. + * 3) Finally, if cast->type has not already been loaded, then we add that + * swig_cast_info to the linked list (because the cast->type) pointer will + * be correct. + * ----------------------------------------------------------------------------- */ + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* c-mode */ +#endif +#endif + +#if 0 +#define SWIGRUNTIME_DEBUG +#endif + + +SWIGRUNTIME void +SWIG_InitializeModule(void *clientdata) { + size_t i; + swig_module_info *module_head, *iter; + int found, init; + + clientdata = clientdata; + + /* check to see if the circular list has been setup, if not, set it up */ + if (swig_module.next==0) { + /* Initialize the swig_module */ + swig_module.type_initial = swig_type_initial; + swig_module.cast_initial = swig_cast_initial; + swig_module.next = &swig_module; + init = 1; + } else { + init = 0; + } + + /* Try and load any already created modules */ + module_head = SWIG_GetModule(clientdata); + if (!module_head) { + /* This is the first module loaded for this interpreter */ + /* so set the swig module into the interpreter */ + SWIG_SetModule(clientdata, &swig_module); + module_head = &swig_module; + } else { + /* the interpreter has loaded a SWIG module, but has it loaded this one? */ + found=0; + iter=module_head; + do { + if (iter==&swig_module) { + found=1; + break; + } + iter=iter->next; + } while (iter!= module_head); + + /* if the is found in the list, then all is done and we may leave */ + if (found) return; + /* otherwise we must add out module into the list */ + swig_module.next = module_head->next; + module_head->next = &swig_module; + } + + /* When multiple interpeters are used, a module could have already been initialized in + a different interpreter, but not yet have a pointer in this interpreter. + In this case, we do not want to continue adding types... everything should be + set up already */ + if (init == 0) return; + + /* Now work on filling in swig_module.types */ +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: size %d\n", swig_module.size); +#endif + for (i = 0; i < swig_module.size; ++i) { + swig_type_info *type = 0; + swig_type_info *ret; + swig_cast_info *cast; + +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); +#endif + + /* if there is another module already loaded */ + if (swig_module.next != &swig_module) { + type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); + } + if (type) { + /* Overwrite clientdata field */ +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: found type %s\n", type->name); +#endif + if (swig_module.type_initial[i]->clientdata) { + type->clientdata = swig_module.type_initial[i]->clientdata; +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); +#endif + } + } else { + type = swig_module.type_initial[i]; + } + + /* Insert casting types */ + cast = swig_module.cast_initial[i]; + while (cast->type) { + /* Don't need to add information already in the list */ + ret = 0; +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); +#endif + if (swig_module.next != &swig_module) { + ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); +#ifdef SWIGRUNTIME_DEBUG + if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); +#endif + } + if (ret) { + if (type == swig_module.type_initial[i]) { +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: skip old type %s\n", ret->name); +#endif + cast->type = ret; + ret = 0; + } else { + /* Check for casting already in the list */ + swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); +#ifdef SWIGRUNTIME_DEBUG + if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); +#endif + if (!ocast) ret = 0; + } + } + + if (!ret) { +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); +#endif + if (type->cast) { + type->cast->prev = cast; + cast->next = type->cast; + } + type->cast = cast; + } + cast++; + } + /* Set entry in modules->types array equal to the type */ + swig_module.types[i] = type; + } + swig_module.types[i] = 0; + +#ifdef SWIGRUNTIME_DEBUG + printf("**** SWIG_InitializeModule: Cast List ******\n"); + for (i = 0; i < swig_module.size; ++i) { + int j = 0; + swig_cast_info *cast = swig_module.cast_initial[i]; + printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); + while (cast->type) { + printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); + cast++; + ++j; + } + printf("---- Total casts: %d\n",j); + } + printf("**** SWIG_InitializeModule: Cast List ******\n"); +#endif +} + +/* This function will propagate the clientdata field of type to +* any new swig_type_info structures that have been added into the list +* of equivalent types. It is like calling +* SWIG_TypeClientData(type, clientdata) a second time. +*/ +SWIGRUNTIME void +SWIG_PropagateClientData(void) { + size_t i; + swig_cast_info *equiv; + static int init_run = 0; + + if (init_run) return; + init_run = 1; + + for (i = 0; i < swig_module.size; i++) { + if (swig_module.types[i]->clientdata) { + equiv = swig_module.types[i]->cast; + while (equiv) { + if (!equiv->converter) { + if (equiv->type && !equiv->type->clientdata) + SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); + } + equiv = equiv->next; + } + } + } +} + +#ifdef __cplusplus +#if 0 +{ + /* c-mode */ +#endif +} +#endif + + + +#ifdef __cplusplus +extern "C" { +#endif + + /* Python-specific SWIG API */ +#define SWIG_newvarlink() SWIG_Python_newvarlink() +#define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr) +#define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants) + + /* ----------------------------------------------------------------------------- + * global variable support code. + * ----------------------------------------------------------------------------- */ + + typedef struct swig_globalvar { + char *name; /* Name of global variable */ + PyObject *(*get_attr)(void); /* Return the current value */ + int (*set_attr)(PyObject *); /* Set the value */ + struct swig_globalvar *next; + } swig_globalvar; + + typedef struct swig_varlinkobject { + PyObject_HEAD + swig_globalvar *vars; + } swig_varlinkobject; + + SWIGINTERN PyObject * + swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) { +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_InternFromString(""); +#else + return PyString_FromString(""); +#endif + } + + SWIGINTERN PyObject * + swig_varlink_str(swig_varlinkobject *v) { +#if PY_VERSION_HEX >= 0x03000000 + PyObject *str = PyUnicode_InternFromString("("); + PyObject *tail; + PyObject *joined; + swig_globalvar *var; + for (var = v->vars; var; var=var->next) { + tail = PyUnicode_FromString(var->name); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; + if (var->next) { + tail = PyUnicode_InternFromString(", "); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; + } + } + tail = PyUnicode_InternFromString(")"); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; +#else + PyObject *str = PyString_FromString("("); + swig_globalvar *var; + for (var = v->vars; var; var=var->next) { + PyString_ConcatAndDel(&str,PyString_FromString(var->name)); + if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", ")); + } + PyString_ConcatAndDel(&str,PyString_FromString(")")); +#endif + return str; + } + + SWIGINTERN int + swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { + char *tmp; + PyObject *str = swig_varlink_str(v); + fprintf(fp,"Swig global variables "); + fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str)); + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(str); + return 0; + } + + SWIGINTERN void + swig_varlink_dealloc(swig_varlinkobject *v) { + swig_globalvar *var = v->vars; + while (var) { + swig_globalvar *n = var->next; + free(var->name); + free(var); + var = n; + } + } + + SWIGINTERN PyObject * + swig_varlink_getattr(swig_varlinkobject *v, char *n) { + PyObject *res = NULL; + swig_globalvar *var = v->vars; + while (var) { + if (strcmp(var->name,n) == 0) { + res = (*var->get_attr)(); + break; + } + var = var->next; + } + if (res == NULL && !PyErr_Occurred()) { + PyErr_SetString(PyExc_NameError,"Unknown C global variable"); + } + return res; + } + + SWIGINTERN int + swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { + int res = 1; + swig_globalvar *var = v->vars; + while (var) { + if (strcmp(var->name,n) == 0) { + res = (*var->set_attr)(p); + break; + } + var = var->next; + } + if (res == 1 && !PyErr_Occurred()) { + PyErr_SetString(PyExc_NameError,"Unknown C global variable"); + } + return res; + } + + SWIGINTERN PyTypeObject* + swig_varlink_type(void) { + static char varlink__doc__[] = "Swig var link object"; + static PyTypeObject varlink_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp + = { + /* PyObject header changed in Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + PyVarObject_HEAD_INIT(&PyType_Type, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* Number of items in variable part (ob_size) */ +#endif + (char *)"swigvarlink", /* Type name (tp_name) */ + sizeof(swig_varlinkobject), /* Basic size (tp_basicsize) */ + 0, /* Itemsize (tp_itemsize) */ + (destructor) swig_varlink_dealloc, /* Deallocator (tp_dealloc) */ + (printfunc) swig_varlink_print, /* Print (tp_print) */ + (getattrfunc) swig_varlink_getattr, /* get attr (tp_getattr) */ + (setattrfunc) swig_varlink_setattr, /* Set attr (tp_setattr) */ + 0, /* tp_compare */ + (reprfunc) swig_varlink_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + (reprfunc) swig_varlink_str, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + 0, /* tp_flags */ + varlink__doc__, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#ifdef COUNT_ALLOCS + 0,0,0,0 /* tp_alloc -> tp_next */ +#endif + }; + varlink_type = tmp; + /* for Python 3 we already assigned ob_type in PyVarObject_HEAD_INIT() */ +#if PY_VERSION_HEX < 0x03000000 + varlink_type.ob_type = &PyType_Type; +#endif + type_init = 1; + } + return &varlink_type; + } + + /* Create a variable linking object for use later */ + SWIGINTERN PyObject * + SWIG_Python_newvarlink(void) { + swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type()); + if (result) { + result->vars = 0; + } + return ((PyObject*) result); + } + + SWIGINTERN void + SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) { + swig_varlinkobject *v = (swig_varlinkobject *) p; + swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar)); + if (gv) { + size_t size = strlen(name)+1; + gv->name = (char *)malloc(size); + if (gv->name) { + strncpy(gv->name,name,size); + gv->get_attr = get_attr; + gv->set_attr = set_attr; + gv->next = v->vars; + } + } + v->vars = gv; + } + + SWIGINTERN PyObject * + SWIG_globals(void) { + static PyObject *_SWIG_globals = 0; + if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink(); + return _SWIG_globals; + } + + /* ----------------------------------------------------------------------------- + * constants/methods manipulation + * ----------------------------------------------------------------------------- */ + + /* Install Constants */ + SWIGINTERN void + SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { + PyObject *obj = 0; + size_t i; + for (i = 0; constants[i].type; ++i) { + switch(constants[i].type) { + case SWIG_PY_POINTER: + obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); + break; + case SWIG_PY_BINARY: + obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype)); + break; + default: + obj = 0; + break; + } + if (obj) { + PyDict_SetItemString(d, constants[i].name, obj); + Py_DECREF(obj); + } + } + } + + /* -----------------------------------------------------------------------------*/ + /* Fix SwigMethods to carry the callback ptrs when needed */ + /* -----------------------------------------------------------------------------*/ + + SWIGINTERN void + SWIG_Python_FixMethods(PyMethodDef *methods, + swig_const_info *const_table, + swig_type_info **types, + swig_type_info **types_initial) { + size_t i; + for (i = 0; methods[i].ml_name; ++i) { + const char *c = methods[i].ml_doc; + if (c && (c = strstr(c, "swig_ptr: "))) { + int j; + swig_const_info *ci = 0; + const char *name = c + 10; + for (j = 0; const_table[j].type; ++j) { + if (strncmp(const_table[j].name, name, + strlen(const_table[j].name)) == 0) { + ci = &(const_table[j]); + break; + } + } + if (ci) { + size_t shift = (ci->ptype) - types; + swig_type_info *ty = types_initial[shift]; + size_t ldoc = (c - methods[i].ml_doc); + size_t lptr = strlen(ty->name)+2*sizeof(void*)+2; + char *ndoc = (char*)malloc(ldoc + lptr + 10); + if (ndoc) { + char *buff = ndoc; + void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0; + if (ptr) { + strncpy(buff, methods[i].ml_doc, ldoc); + buff += ldoc; + strncpy(buff, "swig_ptr: ", 10); + buff += 10; + SWIG_PackVoidPtr(buff, ptr, ty->name, lptr); + methods[i].ml_doc = ndoc; + } + } + } + } + } + } + +#ifdef __cplusplus +} +#endif + +/* -----------------------------------------------------------------------------* + * Partial Init method + * -----------------------------------------------------------------------------*/ + +#ifdef __cplusplus +extern "C" +#endif + +SWIGEXPORT +#if PY_VERSION_HEX >= 0x03000000 +PyObject* +#else +void +#endif +SWIG_init(void) { + PyObject *m, *d; +#if PY_VERSION_HEX >= 0x03000000 + static struct PyModuleDef SWIG_module = { + PyModuleDef_HEAD_INIT, + (char *) SWIG_name, + NULL, + -1, + SwigMethods, + NULL, + NULL, + NULL, + NULL + }; +#endif + + /* Fix SwigMethods to carry the callback ptrs when needed */ + SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); + +#if PY_VERSION_HEX >= 0x03000000 + m = PyModule_Create(&SWIG_module); +#else + m = Py_InitModule((char *) SWIG_name, SwigMethods); +#endif + d = PyModule_GetDict(m); + + SWIG_InitializeModule(0); + SWIG_InstallConstants(d,swig_const_table); + + + SWIG_Python_SetConstant(d, "GRIB_SUCCESS",SWIG_From_int((int)(0))); + SWIG_Python_SetConstant(d, "GRIB_END_OF_FILE",SWIG_From_int((int)(-1))); + SWIG_Python_SetConstant(d, "GRIB_INTERNAL_ERROR",SWIG_From_int((int)(-2))); + SWIG_Python_SetConstant(d, "GRIB_BUFFER_TOO_SMALL",SWIG_From_int((int)(-3))); + SWIG_Python_SetConstant(d, "GRIB_NOT_IMPLEMENTED",SWIG_From_int((int)(-4))); + SWIG_Python_SetConstant(d, "GRIB_7777_NOT_FOUND",SWIG_From_int((int)(-5))); + SWIG_Python_SetConstant(d, "GRIB_ARRAY_TOO_SMALL",SWIG_From_int((int)(-6))); + SWIG_Python_SetConstant(d, "GRIB_FILE_NOT_FOUND",SWIG_From_int((int)(-7))); + SWIG_Python_SetConstant(d, "GRIB_CODE_NOT_FOUND_IN_TABLE",SWIG_From_int((int)(-8))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_ARRAY_SIZE",SWIG_From_int((int)(-9))); + SWIG_Python_SetConstant(d, "GRIB_NOT_FOUND",SWIG_From_int((int)(-10))); + SWIG_Python_SetConstant(d, "GRIB_IO_PROBLEM",SWIG_From_int((int)(-11))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_MESSAGE",SWIG_From_int((int)(-12))); + SWIG_Python_SetConstant(d, "GRIB_DECODING_ERROR",SWIG_From_int((int)(-13))); + SWIG_Python_SetConstant(d, "GRIB_ENCODING_ERROR",SWIG_From_int((int)(-14))); + SWIG_Python_SetConstant(d, "GRIB_NO_MORE_IN_SET",SWIG_From_int((int)(-15))); + SWIG_Python_SetConstant(d, "GRIB_GEOCALCULUS_PROBLEM",SWIG_From_int((int)(-16))); + SWIG_Python_SetConstant(d, "GRIB_OUT_OF_MEMORY",SWIG_From_int((int)(-17))); + SWIG_Python_SetConstant(d, "GRIB_READ_ONLY",SWIG_From_int((int)(-18))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_ARGUMENT",SWIG_From_int((int)(-19))); + SWIG_Python_SetConstant(d, "GRIB_NULL_HANDLE",SWIG_From_int((int)(-20))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_SECTION_NUMBER",SWIG_From_int((int)(-21))); + SWIG_Python_SetConstant(d, "GRIB_VALUE_CANNOT_BE_MISSING",SWIG_From_int((int)(-22))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_LENGTH",SWIG_From_int((int)(-23))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_TYPE",SWIG_From_int((int)(-24))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_STEP",SWIG_From_int((int)(-25))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_STEP_UNIT",SWIG_From_int((int)(-26))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_FILE",SWIG_From_int((int)(-27))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_GRIB",SWIG_From_int((int)(-28))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_INDEX",SWIG_From_int((int)(-29))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_ITERATOR",SWIG_From_int((int)(-30))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_KEYS_ITERATOR",SWIG_From_int((int)(-31))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_NEAREST",SWIG_From_int((int)(-32))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_ORDERBY",SWIG_From_int((int)(-33))); + SWIG_Python_SetConstant(d, "GRIB_MISSING_KEY",SWIG_From_int((int)(-34))); + SWIG_Python_SetConstant(d, "GRIB_OUT_OF_AREA",SWIG_From_int((int)(-35))); + SWIG_Python_SetConstant(d, "GRIB_CONCEPT_NO_MATCH",SWIG_From_int((int)(-36))); + SWIG_Python_SetConstant(d, "GRIB_NO_DEFINITIONS",SWIG_From_int((int)(-37))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_TYPE",SWIG_From_int((int)(-38))); + SWIG_Python_SetConstant(d, "GRIB_END",SWIG_From_int((int)(-39))); + SWIG_Python_SetConstant(d, "GRIB_NO_VALUES",SWIG_From_int((int)(-40))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_GRID",SWIG_From_int((int)(-41))); + SWIG_Python_SetConstant(d, "GRIB_END_OF_INDEX",SWIG_From_int((int)(-42))); + SWIG_Python_SetConstant(d, "GRIB_NULL_INDEX",SWIG_From_int((int)(-43))); + SWIG_Python_SetConstant(d, "GRIB_PREMATURE_END_OF_FILE",SWIG_From_int((int)(-44))); + SWIG_Python_SetConstant(d, "GRIB_INTERNAL_ARRAY_TOO_SMALL",SWIG_From_int((int)(-45))); + SWIG_Python_SetConstant(d, "GRIB_MESSAGE_TOO_LARGE",SWIG_From_int((int)(-46))); + SWIG_Python_SetConstant(d, "GRIB_CONSTANT_FIELD",SWIG_From_int((int)(-47))); + SWIG_Python_SetConstant(d, "GRIB_SWITCH_NO_MATCH",SWIG_From_int((int)(-48))); + SWIG_Python_SetConstant(d, "GRIB_UNDERFLOW",SWIG_From_int((int)(-49))); + SWIG_Python_SetConstant(d, "GRIB_MESSAGE_MALFORMED",SWIG_From_int((int)(-50))); + SWIG_Python_SetConstant(d, "GRIB_CORRUPTED_INDEX",SWIG_From_int((int)(-51))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_BPV",SWIG_From_int((int)(-52))); + SWIG_Python_SetConstant(d, "GRIB_DIFFERENT_EDITION",SWIG_From_int((int)(-53))); + SWIG_Python_SetConstant(d, "GRIB_VALUE_DIFFERENT",SWIG_From_int((int)(-54))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_KEY_VALUE",SWIG_From_int((int)(-55))); +#if PY_VERSION_HEX >= 0x03000000 + return m; +#else + return; +#endif +} + diff --git a/python/swig_wrap_array.py b/python/swig_wrap_array.py new file mode 100644 index 000000000..5a69c570f --- /dev/null +++ b/python/swig_wrap_array.py @@ -0,0 +1,546 @@ +# This file was automatically generated by SWIG (http://www.swig.org). +# Version 1.3.40 +# +# Do not make changes to this file unless you know what you are doing--modify +# the SWIG interface file instead. +# This file is compatible with both classic and new-style classes. + +from sys import version_info +if version_info >= (2,6,0): + def swig_import_helper(): + from os.path import dirname + import imp + fp = None + try: + fp, pathname, description = imp.find_module('_gribapi_swig', [dirname(__file__)]) + except ImportError: + import _gribapi_swig + return _gribapi_swig + if fp is not None: + try: + _mod = imp.load_module('_gribapi_swig', fp, pathname, description) + finally: + fp.close() + return _mod + _gribapi_swig = swig_import_helper() + del swig_import_helper +else: + import _gribapi_swig +del version_info +try: + _swig_property = property +except NameError: + pass # Python < 2.2 doesn't have 'property'. +def _swig_setattr_nondynamic(self,class_type,name,value,static=1): + if (name == "thisown"): return self.this.own(value) + if (name == "this"): + if type(value).__name__ == 'SwigPyObject': + self.__dict__[name] = value + return + method = class_type.__swig_setmethods__.get(name,None) + if method: return method(self,value) + if (not static) or hasattr(self,name): + self.__dict__[name] = value + else: + raise AttributeError("You cannot add attributes to %s" % self) + +def _swig_setattr(self,class_type,name,value): + return _swig_setattr_nondynamic(self,class_type,name,value,0) + +def _swig_getattr(self,class_type,name): + if (name == "thisown"): return self.this.own() + method = class_type.__swig_getmethods__.get(name,None) + if method: return method(self) + raise AttributeError(name) + +def _swig_repr(self): + try: strthis = "proxy of " + self.this.__repr__() + except: strthis = "" + return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) + +try: + _object = object + _newclass = 1 +except AttributeError: + class _object : pass + _newclass = 0 + + + +def cdata(*args): + return _gribapi_swig.cdata(*args) +cdata = _gribapi_swig.cdata + +def memmove(*args): + return _gribapi_swig.memmove(*args) +memmove = _gribapi_swig.memmove +GRIB_SUCCESS = _gribapi_swig.GRIB_SUCCESS +GRIB_END_OF_FILE = _gribapi_swig.GRIB_END_OF_FILE +GRIB_INTERNAL_ERROR = _gribapi_swig.GRIB_INTERNAL_ERROR +GRIB_BUFFER_TOO_SMALL = _gribapi_swig.GRIB_BUFFER_TOO_SMALL +GRIB_NOT_IMPLEMENTED = _gribapi_swig.GRIB_NOT_IMPLEMENTED +GRIB_7777_NOT_FOUND = _gribapi_swig.GRIB_7777_NOT_FOUND +GRIB_ARRAY_TOO_SMALL = _gribapi_swig.GRIB_ARRAY_TOO_SMALL +GRIB_FILE_NOT_FOUND = _gribapi_swig.GRIB_FILE_NOT_FOUND +GRIB_CODE_NOT_FOUND_IN_TABLE = _gribapi_swig.GRIB_CODE_NOT_FOUND_IN_TABLE +GRIB_WRONG_ARRAY_SIZE = _gribapi_swig.GRIB_WRONG_ARRAY_SIZE +GRIB_NOT_FOUND = _gribapi_swig.GRIB_NOT_FOUND +GRIB_IO_PROBLEM = _gribapi_swig.GRIB_IO_PROBLEM +GRIB_INVALID_MESSAGE = _gribapi_swig.GRIB_INVALID_MESSAGE +GRIB_DECODING_ERROR = _gribapi_swig.GRIB_DECODING_ERROR +GRIB_ENCODING_ERROR = _gribapi_swig.GRIB_ENCODING_ERROR +GRIB_NO_MORE_IN_SET = _gribapi_swig.GRIB_NO_MORE_IN_SET +GRIB_GEOCALCULUS_PROBLEM = _gribapi_swig.GRIB_GEOCALCULUS_PROBLEM +GRIB_OUT_OF_MEMORY = _gribapi_swig.GRIB_OUT_OF_MEMORY +GRIB_READ_ONLY = _gribapi_swig.GRIB_READ_ONLY +GRIB_INVALID_ARGUMENT = _gribapi_swig.GRIB_INVALID_ARGUMENT +GRIB_NULL_HANDLE = _gribapi_swig.GRIB_NULL_HANDLE +GRIB_INVALID_SECTION_NUMBER = _gribapi_swig.GRIB_INVALID_SECTION_NUMBER +GRIB_VALUE_CANNOT_BE_MISSING = _gribapi_swig.GRIB_VALUE_CANNOT_BE_MISSING +GRIB_WRONG_LENGTH = _gribapi_swig.GRIB_WRONG_LENGTH +GRIB_INVALID_TYPE = _gribapi_swig.GRIB_INVALID_TYPE +GRIB_WRONG_STEP = _gribapi_swig.GRIB_WRONG_STEP +GRIB_WRONG_STEP_UNIT = _gribapi_swig.GRIB_WRONG_STEP_UNIT +GRIB_INVALID_FILE = _gribapi_swig.GRIB_INVALID_FILE +GRIB_INVALID_GRIB = _gribapi_swig.GRIB_INVALID_GRIB +GRIB_INVALID_INDEX = _gribapi_swig.GRIB_INVALID_INDEX +GRIB_INVALID_ITERATOR = _gribapi_swig.GRIB_INVALID_ITERATOR +GRIB_INVALID_KEYS_ITERATOR = _gribapi_swig.GRIB_INVALID_KEYS_ITERATOR +GRIB_INVALID_NEAREST = _gribapi_swig.GRIB_INVALID_NEAREST +GRIB_INVALID_ORDERBY = _gribapi_swig.GRIB_INVALID_ORDERBY +GRIB_MISSING_KEY = _gribapi_swig.GRIB_MISSING_KEY +GRIB_OUT_OF_AREA = _gribapi_swig.GRIB_OUT_OF_AREA +GRIB_CONCEPT_NO_MATCH = _gribapi_swig.GRIB_CONCEPT_NO_MATCH +GRIB_NO_DEFINITIONS = _gribapi_swig.GRIB_NO_DEFINITIONS +GRIB_WRONG_TYPE = _gribapi_swig.GRIB_WRONG_TYPE +GRIB_END = _gribapi_swig.GRIB_END +GRIB_NO_VALUES = _gribapi_swig.GRIB_NO_VALUES +GRIB_WRONG_GRID = _gribapi_swig.GRIB_WRONG_GRID +GRIB_END_OF_INDEX = _gribapi_swig.GRIB_END_OF_INDEX +GRIB_NULL_INDEX = _gribapi_swig.GRIB_NULL_INDEX +GRIB_PREMATURE_END_OF_FILE = _gribapi_swig.GRIB_PREMATURE_END_OF_FILE +GRIB_INTERNAL_ARRAY_TOO_SMALL = _gribapi_swig.GRIB_INTERNAL_ARRAY_TOO_SMALL +GRIB_MESSAGE_TOO_LARGE = _gribapi_swig.GRIB_MESSAGE_TOO_LARGE +GRIB_CONSTANT_FIELD = _gribapi_swig.GRIB_CONSTANT_FIELD +GRIB_SWITCH_NO_MATCH = _gribapi_swig.GRIB_SWITCH_NO_MATCH +GRIB_UNDERFLOW = _gribapi_swig.GRIB_UNDERFLOW +GRIB_MESSAGE_MALFORMED = _gribapi_swig.GRIB_MESSAGE_MALFORMED +GRIB_CORRUPTED_INDEX = _gribapi_swig.GRIB_CORRUPTED_INDEX +GRIB_INVALID_BPV = _gribapi_swig.GRIB_INVALID_BPV +GRIB_DIFFERENT_EDITION = _gribapi_swig.GRIB_DIFFERENT_EDITION +GRIB_VALUE_DIFFERENT = _gribapi_swig.GRIB_VALUE_DIFFERENT +GRIB_INVALID_KEY_VALUE = _gribapi_swig.GRIB_INVALID_KEY_VALUE +class intp(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, intp, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, intp, name) + __repr__ = _swig_repr + def __init__(self): + this = _gribapi_swig.new_intp() + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _gribapi_swig.delete_intp + __del__ = lambda self : None; + def assign(self, *args): return _gribapi_swig.intp_assign(self, *args) + def value(self): return _gribapi_swig.intp_value(self) + def cast(self): return _gribapi_swig.intp_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _gribapi_swig.intp_frompointer + if _newclass:frompointer = staticmethod(_gribapi_swig.intp_frompointer) +intp_swigregister = _gribapi_swig.intp_swigregister +intp_swigregister(intp) + +def intp_frompointer(*args): + return _gribapi_swig.intp_frompointer(*args) +intp_frompointer = _gribapi_swig.intp_frompointer + +class longp(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, longp, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, longp, name) + __repr__ = _swig_repr + def __init__(self): + this = _gribapi_swig.new_longp() + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _gribapi_swig.delete_longp + __del__ = lambda self : None; + def assign(self, *args): return _gribapi_swig.longp_assign(self, *args) + def value(self): return _gribapi_swig.longp_value(self) + def cast(self): return _gribapi_swig.longp_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _gribapi_swig.longp_frompointer + if _newclass:frompointer = staticmethod(_gribapi_swig.longp_frompointer) +longp_swigregister = _gribapi_swig.longp_swigregister +longp_swigregister(longp) + +def longp_frompointer(*args): + return _gribapi_swig.longp_frompointer(*args) +longp_frompointer = _gribapi_swig.longp_frompointer + +class doublep(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, doublep, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, doublep, name) + __repr__ = _swig_repr + def __init__(self): + this = _gribapi_swig.new_doublep() + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _gribapi_swig.delete_doublep + __del__ = lambda self : None; + def assign(self, *args): return _gribapi_swig.doublep_assign(self, *args) + def value(self): return _gribapi_swig.doublep_value(self) + def cast(self): return _gribapi_swig.doublep_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _gribapi_swig.doublep_frompointer + if _newclass:frompointer = staticmethod(_gribapi_swig.doublep_frompointer) +doublep_swigregister = _gribapi_swig.doublep_swigregister +doublep_swigregister(doublep) + +def doublep_frompointer(*args): + return _gribapi_swig.doublep_frompointer(*args) +doublep_frompointer = _gribapi_swig.doublep_frompointer + + +def new_doubleArray(*args): + return _gribapi_swig.new_doubleArray(*args) +new_doubleArray = _gribapi_swig.new_doubleArray + +def delete_doubleArray(*args): + return _gribapi_swig.delete_doubleArray(*args) +delete_doubleArray = _gribapi_swig.delete_doubleArray + +def doubleArray_getitem(*args): + return _gribapi_swig.doubleArray_getitem(*args) +doubleArray_getitem = _gribapi_swig.doubleArray_getitem + +def doubleArray_setitem(*args): + return _gribapi_swig.doubleArray_setitem(*args) +doubleArray_setitem = _gribapi_swig.doubleArray_setitem + +def new_longArray(*args): + return _gribapi_swig.new_longArray(*args) +new_longArray = _gribapi_swig.new_longArray + +def delete_longArray(*args): + return _gribapi_swig.delete_longArray(*args) +delete_longArray = _gribapi_swig.delete_longArray + +def longArray_getitem(*args): + return _gribapi_swig.longArray_getitem(*args) +longArray_getitem = _gribapi_swig.longArray_getitem + +def longArray_setitem(*args): + return _gribapi_swig.longArray_setitem(*args) +longArray_setitem = _gribapi_swig.longArray_setitem + +def new_intArray(*args): + return _gribapi_swig.new_intArray(*args) +new_intArray = _gribapi_swig.new_intArray + +def delete_intArray(*args): + return _gribapi_swig.delete_intArray(*args) +delete_intArray = _gribapi_swig.delete_intArray + +def intArray_getitem(*args): + return _gribapi_swig.intArray_getitem(*args) +intArray_getitem = _gribapi_swig.intArray_getitem + +def intArray_setitem(*args): + return _gribapi_swig.intArray_setitem(*args) +intArray_setitem = _gribapi_swig.intArray_setitem + +def grib_c_new_from_file(*args): + return _gribapi_swig.grib_c_new_from_file(*args) +grib_c_new_from_file = _gribapi_swig.grib_c_new_from_file + +def grib_c_new_bufr_from_file(*args): + return _gribapi_swig.grib_c_new_bufr_from_file(*args) +grib_c_new_bufr_from_file = _gribapi_swig.grib_c_new_bufr_from_file + +def grib_c_new_gts_from_file(*args): + return _gribapi_swig.grib_c_new_gts_from_file(*args) +grib_c_new_gts_from_file = _gribapi_swig.grib_c_new_gts_from_file + +def grib_c_iterator_new(*args): + return _gribapi_swig.grib_c_iterator_new(*args) +grib_c_iterator_new = _gribapi_swig.grib_c_iterator_new + +def grib_c_keys_iterator_new(*args): + return _gribapi_swig.grib_c_keys_iterator_new(*args) +grib_c_keys_iterator_new = _gribapi_swig.grib_c_keys_iterator_new + +def grib_c_new_from_samples(*args): + return _gribapi_swig.grib_c_new_from_samples(*args) +grib_c_new_from_samples = _gribapi_swig.grib_c_new_from_samples + +def grib_c_index_new_from_file(*args): + return _gribapi_swig.grib_c_index_new_from_file(*args) +grib_c_index_new_from_file = _gribapi_swig.grib_c_index_new_from_file + +def grib_c_index_add_file(*args): + return _gribapi_swig.grib_c_index_add_file(*args) +grib_c_index_add_file = _gribapi_swig.grib_c_index_add_file + +def grib_c_new_from_index(*args): + return _gribapi_swig.grib_c_new_from_index(*args) +grib_c_new_from_index = _gribapi_swig.grib_c_new_from_index + +def grib_c_index_write(*args): + return _gribapi_swig.grib_c_index_write(*args) +grib_c_index_write = _gribapi_swig.grib_c_index_write + +def grib_c_index_read(*args): + return _gribapi_swig.grib_c_index_read(*args) +grib_c_index_read = _gribapi_swig.grib_c_index_read + +def grib_c_new_from_message(*args): + return _gribapi_swig.grib_c_new_from_message(*args) +grib_c_new_from_message = _gribapi_swig.grib_c_new_from_message + +def grib_c_count_in_file(*args): + return _gribapi_swig.grib_c_count_in_file(*args) +grib_c_count_in_file = _gribapi_swig.grib_c_count_in_file + +def grib_c_release(*args): + return _gribapi_swig.grib_c_release(*args) +grib_c_release = _gribapi_swig.grib_c_release + +def grib_c_write(*args): + return _gribapi_swig.grib_c_write(*args) +grib_c_write = _gribapi_swig.grib_c_write + +def grib_c_get_size_long(*args): + return _gribapi_swig.grib_c_get_size_long(*args) +grib_c_get_size_long = _gribapi_swig.grib_c_get_size_long + +def grib_c_get_string_length(*args): + return _gribapi_swig.grib_c_get_string_length(*args) +grib_c_get_string_length = _gribapi_swig.grib_c_get_string_length + +def grib_c_clone(*args): + return _gribapi_swig.grib_c_clone(*args) +grib_c_clone = _gribapi_swig.grib_c_clone + +def grib_c_copy_namespace(*args): + return _gribapi_swig.grib_c_copy_namespace(*args) +grib_c_copy_namespace = _gribapi_swig.grib_c_copy_namespace + +def grib_c_get_message_size(*args): + return _gribapi_swig.grib_c_get_message_size(*args) +grib_c_get_message_size = _gribapi_swig.grib_c_get_message_size + +def grib_c_get_native_type(*args): + return _gribapi_swig.grib_c_get_native_type(*args) +grib_c_get_native_type = _gribapi_swig.grib_c_get_native_type + +def grib_c_multi_new(): + return _gribapi_swig.grib_c_multi_new() +grib_c_multi_new = _gribapi_swig.grib_c_multi_new + +def grib_c_multi_support_on(): + return _gribapi_swig.grib_c_multi_support_on() +grib_c_multi_support_on = _gribapi_swig.grib_c_multi_support_on + +def grib_c_multi_write(*args): + return _gribapi_swig.grib_c_multi_write(*args) +grib_c_multi_write = _gribapi_swig.grib_c_multi_write + +def grib_c_multi_support_off(): + return _gribapi_swig.grib_c_multi_support_off() +grib_c_multi_support_off = _gribapi_swig.grib_c_multi_support_off + +def grib_c_multi_release(*args): + return _gribapi_swig.grib_c_multi_release(*args) +grib_c_multi_release = _gribapi_swig.grib_c_multi_release + +def grib_c_multi_append(*args): + return _gribapi_swig.grib_c_multi_append(*args) +grib_c_multi_append = _gribapi_swig.grib_c_multi_append + +def grib_c_gribex_mode_on(): + return _gribapi_swig.grib_c_gribex_mode_on() +grib_c_gribex_mode_on = _gribapi_swig.grib_c_gribex_mode_on + +def grib_c_gribex_mode_off(): + return _gribapi_swig.grib_c_gribex_mode_off() +grib_c_gribex_mode_off = _gribapi_swig.grib_c_gribex_mode_off + +def grib_c_keys_iterator_next(*args): + return _gribapi_swig.grib_c_keys_iterator_next(*args) +grib_c_keys_iterator_next = _gribapi_swig.grib_c_keys_iterator_next + +def grib_c_keys_iterator_delete(*args): + return _gribapi_swig.grib_c_keys_iterator_delete(*args) +grib_c_keys_iterator_delete = _gribapi_swig.grib_c_keys_iterator_delete + +def grib_c_skip_computed(*args): + return _gribapi_swig.grib_c_skip_computed(*args) +grib_c_skip_computed = _gribapi_swig.grib_c_skip_computed + +def grib_c_skip_coded(*args): + return _gribapi_swig.grib_c_skip_coded(*args) +grib_c_skip_coded = _gribapi_swig.grib_c_skip_coded + +def grib_c_skip_edition_specific(*args): + return _gribapi_swig.grib_c_skip_edition_specific(*args) +grib_c_skip_edition_specific = _gribapi_swig.grib_c_skip_edition_specific + +def grib_c_skip_duplicates(*args): + return _gribapi_swig.grib_c_skip_duplicates(*args) +grib_c_skip_duplicates = _gribapi_swig.grib_c_skip_duplicates + +def grib_c_skip_read_only(*args): + return _gribapi_swig.grib_c_skip_read_only(*args) +grib_c_skip_read_only = _gribapi_swig.grib_c_skip_read_only + +def grib_c_skip_function(*args): + return _gribapi_swig.grib_c_skip_function(*args) +grib_c_skip_function = _gribapi_swig.grib_c_skip_function + +def grib_c_keys_iterator_rewind(*args): + return _gribapi_swig.grib_c_keys_iterator_rewind(*args) +grib_c_keys_iterator_rewind = _gribapi_swig.grib_c_keys_iterator_rewind + +def grib_c_keys_iterator_get_name(*args): + return _gribapi_swig.grib_c_keys_iterator_get_name(*args) +grib_c_keys_iterator_get_name = _gribapi_swig.grib_c_keys_iterator_get_name + +def grib_c_index_get_size_long(*args): + return _gribapi_swig.grib_c_index_get_size_long(*args) +grib_c_index_get_size_long = _gribapi_swig.grib_c_index_get_size_long + +def grib_c_index_get_long(*args): + return _gribapi_swig.grib_c_index_get_long(*args) +grib_c_index_get_long = _gribapi_swig.grib_c_index_get_long + +def grib_c_index_get_real8(*args): + return _gribapi_swig.grib_c_index_get_real8(*args) +grib_c_index_get_real8 = _gribapi_swig.grib_c_index_get_real8 + +def grib_c_index_get_string(*args): + return _gribapi_swig.grib_c_index_get_string(*args) +grib_c_index_get_string = _gribapi_swig.grib_c_index_get_string + +def grib_c_index_select_long(*args): + return _gribapi_swig.grib_c_index_select_long(*args) +grib_c_index_select_long = _gribapi_swig.grib_c_index_select_long + +def grib_c_index_select_real8(*args): + return _gribapi_swig.grib_c_index_select_real8(*args) +grib_c_index_select_real8 = _gribapi_swig.grib_c_index_select_real8 + +def grib_c_index_select_string(*args): + return _gribapi_swig.grib_c_index_select_string(*args) +grib_c_index_select_string = _gribapi_swig.grib_c_index_select_string + +def grib_c_index_release(*args): + return _gribapi_swig.grib_c_index_release(*args) +grib_c_index_release = _gribapi_swig.grib_c_index_release + +def grib_c_iterator_delete(*args): + return _gribapi_swig.grib_c_iterator_delete(*args) +grib_c_iterator_delete = _gribapi_swig.grib_c_iterator_delete + +def grib_c_iterator_next(*args): + return _gribapi_swig.grib_c_iterator_next(*args) +grib_c_iterator_next = _gribapi_swig.grib_c_iterator_next + +def grib_c_get_string(*args): + return _gribapi_swig.grib_c_get_string(*args) +grib_c_get_string = _gribapi_swig.grib_c_get_string + +def grib_c_set_string(*args): + return _gribapi_swig.grib_c_set_string(*args) +grib_c_set_string = _gribapi_swig.grib_c_set_string + +def grib_c_get_long(*args): + return _gribapi_swig.grib_c_get_long(*args) +grib_c_get_long = _gribapi_swig.grib_c_get_long + +def grib_c_set_long(*args): + return _gribapi_swig.grib_c_set_long(*args) +grib_c_set_long = _gribapi_swig.grib_c_set_long + +def grib_c_get_double(*args): + return _gribapi_swig.grib_c_get_double(*args) +grib_c_get_double = _gribapi_swig.grib_c_get_double + +def grib_c_set_double(*args): + return _gribapi_swig.grib_c_set_double(*args) +grib_c_set_double = _gribapi_swig.grib_c_set_double + +def grib_c_set_real8_array(*args): + return _gribapi_swig.grib_c_set_real8_array(*args) +grib_c_set_real8_array = _gribapi_swig.grib_c_set_real8_array + +def grib_c_get_real8_array(*args): + return _gribapi_swig.grib_c_get_real8_array(*args) +grib_c_get_real8_array = _gribapi_swig.grib_c_get_real8_array + +def grib_c_get_long_array(*args): + return _gribapi_swig.grib_c_get_long_array(*args) +grib_c_get_long_array = _gribapi_swig.grib_c_get_long_array + +def grib_c_set_long_array(*args): + return _gribapi_swig.grib_c_set_long_array(*args) +grib_c_set_long_array = _gribapi_swig.grib_c_set_long_array + +def grib_c_get_real8_element(*args): + return _gribapi_swig.grib_c_get_real8_element(*args) +grib_c_get_real8_element = _gribapi_swig.grib_c_get_real8_element + +def grib_c_get_real8_elements(*args): + return _gribapi_swig.grib_c_get_real8_elements(*args) +grib_c_get_real8_elements = _gribapi_swig.grib_c_get_real8_elements + +def grib_c_set_missing(*args): + return _gribapi_swig.grib_c_set_missing(*args) +grib_c_set_missing = _gribapi_swig.grib_c_set_missing + +def grib_c_set_key_vals(*args): + return _gribapi_swig.grib_c_set_key_vals(*args) +grib_c_set_key_vals = _gribapi_swig.grib_c_set_key_vals + +def grib_c_is_missing(*args): + return _gribapi_swig.grib_c_is_missing(*args) +grib_c_is_missing = _gribapi_swig.grib_c_is_missing + +def grib_c_is_defined(*args): + return _gribapi_swig.grib_c_is_defined(*args) +grib_c_is_defined = _gribapi_swig.grib_c_is_defined + +def grib_c_find_nearest_single(*args): + return _gribapi_swig.grib_c_find_nearest_single(*args) +grib_c_find_nearest_single = _gribapi_swig.grib_c_find_nearest_single + +def grib_c_find_nearest_four_single(*args): + return _gribapi_swig.grib_c_find_nearest_four_single(*args) +grib_c_find_nearest_four_single = _gribapi_swig.grib_c_find_nearest_four_single + +def grib_c_get_message(*args): + return _gribapi_swig.grib_c_get_message(*args) +grib_c_get_message = _gribapi_swig.grib_c_get_message + +def grib_c_get_error_string(*args): + return _gribapi_swig.grib_c_get_error_string(*args) +grib_c_get_error_string = _gribapi_swig.grib_c_get_error_string + +def no_fail_on_wrong_length(*args): + return _gribapi_swig.no_fail_on_wrong_length(*args) +no_fail_on_wrong_length = _gribapi_swig.no_fail_on_wrong_length + +def grib_c_get_api_version(): + return _gribapi_swig.grib_c_get_api_version() +grib_c_get_api_version = _gribapi_swig.grib_c_get_api_version + +def grib_c_gts_header_on(): + return _gribapi_swig.grib_c_gts_header_on() +grib_c_gts_header_on = _gribapi_swig.grib_c_gts_header_on + +def grib_c_gts_header_off(): + return _gribapi_swig.grib_c_gts_header_off() +grib_c_gts_header_off = _gribapi_swig.grib_c_gts_header_off + + diff --git a/python/swig_wrap_numpy.c b/python/swig_wrap_numpy.c new file mode 100644 index 000000000..0d2ce0f4c --- /dev/null +++ b/python/swig_wrap_numpy.c @@ -0,0 +1,8957 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 1.3.40 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +#define SWIGPYTHON +#define SWIG_PYTHON_DIRECTOR_NO_VTABLE + +/* ----------------------------------------------------------------------------- + * This section contains generic SWIG labels for method/variable + * declarations/attributes, and other compiler dependent labels. + * ----------------------------------------------------------------------------- */ + +/* template workaround for compilers that cannot correctly implement the C++ standard */ +#ifndef SWIGTEMPLATEDISAMBIGUATOR +# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) +# define SWIGTEMPLATEDISAMBIGUATOR template +# elif defined(__HP_aCC) +/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ +/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ +# define SWIGTEMPLATEDISAMBIGUATOR template +# else +# define SWIGTEMPLATEDISAMBIGUATOR +# endif +#endif + +/* inline attribute */ +#ifndef SWIGINLINE +# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) +# define SWIGINLINE inline +# else +# define SWIGINLINE +# endif +#endif + +/* attribute recognised by some compilers to avoid 'unused' warnings */ +#ifndef SWIGUNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +# elif defined(__ICC) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +#endif + +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + +#ifndef SWIGUNUSEDPARM +# ifdef __cplusplus +# define SWIGUNUSEDPARM(p) +# else +# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# endif +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static SWIGUNUSED +#endif + +/* internal inline SWIG method */ +#ifndef SWIGINTERNINLINE +# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE +#endif + +/* exporting methods */ +#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY +# endif +#endif + +#ifndef SWIGEXPORT +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT +# else +# define SWIGEXPORT __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) +# define SWIGEXPORT __attribute__ ((visibility("default"))) +# else +# define SWIGEXPORT +# endif +# endif +#endif + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + + + +/* Python.h has to appear first */ +#include + +/* ----------------------------------------------------------------------------- + * swigrun.swg + * + * This file contains generic C API SWIG runtime support for pointer + * type checking. + * ----------------------------------------------------------------------------- */ + +/* This should only be incremented when either the layout of swig_type_info changes, + or for whatever reason, the runtime changes incompatibly */ +#define SWIG_RUNTIME_VERSION "4" + +/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ +#ifdef SWIG_TYPE_TABLE +# define SWIG_QUOTE_STRING(x) #x +# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) +# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) +#else +# define SWIG_TYPE_TABLE_NAME +#endif + +/* + You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for + creating a static or dynamic library from the SWIG runtime code. + In 99.9% of the cases, SWIG just needs to declare them as 'static'. + + But only do this if strictly necessary, ie, if you have problems + with your compiler or suchlike. +*/ + +#ifndef SWIGRUNTIME +# define SWIGRUNTIME SWIGINTERN +#endif + +#ifndef SWIGRUNTIMEINLINE +# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE +#endif + +/* Generic buffer size */ +#ifndef SWIG_BUFFER_SIZE +# define SWIG_BUFFER_SIZE 1024 +#endif + +/* Flags for pointer conversions */ +#define SWIG_POINTER_DISOWN 0x1 +#define SWIG_CAST_NEW_MEMORY 0x2 + +/* Flags for new pointer objects */ +#define SWIG_POINTER_OWN 0x1 + + +/* + Flags/methods for returning states. + + The SWIG conversion methods, as ConvertPtr, return and integer + that tells if the conversion was successful or not. And if not, + an error code can be returned (see swigerrors.swg for the codes). + + Use the following macros/flags to set or process the returning + states. + + In old versions of SWIG, code such as the following was usually written: + + if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { + // success code + } else { + //fail code + } + + Now you can be more explicit: + + int res = SWIG_ConvertPtr(obj,vptr,ty.flags); + if (SWIG_IsOK(res)) { + // success code + } else { + // fail code + } + + which is the same really, but now you can also do + + Type *ptr; + int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); + if (SWIG_IsOK(res)) { + // success code + if (SWIG_IsNewObj(res) { + ... + delete *ptr; + } else { + ... + } + } else { + // fail code + } + + I.e., now SWIG_ConvertPtr can return new objects and you can + identify the case and take care of the deallocation. Of course that + also requires SWIG_ConvertPtr to return new result values, such as + + int SWIG_ConvertPtr(obj, ptr,...) { + if () { + if () { + *ptr = ; + return SWIG_NEWOBJ; + } else { + *ptr = ; + return SWIG_OLDOBJ; + } + } else { + return SWIG_BADOBJ; + } + } + + Of course, returning the plain '0(success)/-1(fail)' still works, but you can be + more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the + SWIG errors code. + + Finally, if the SWIG_CASTRANK_MODE is enabled, the result code + allows to return the 'cast rank', for example, if you have this + + int food(double) + int fooi(int); + + and you call + + food(1) // cast rank '1' (1 -> 1.0) + fooi(1) // cast rank '0' + + just use the SWIG_AddCast()/SWIG_CheckState() +*/ + +#define SWIG_OK (0) +#define SWIG_ERROR (-1) +#define SWIG_IsOK(r) (r >= 0) +#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) + +/* The CastRankLimit says how many bits are used for the cast rank */ +#define SWIG_CASTRANKLIMIT (1 << 8) +/* The NewMask denotes the object was created (using new/malloc) */ +#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) +/* The TmpMask is for in/out typemaps that use temporal objects */ +#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) +/* Simple returning values */ +#define SWIG_BADOBJ (SWIG_ERROR) +#define SWIG_OLDOBJ (SWIG_OK) +#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) +#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) +/* Check, add and del mask methods */ +#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) +#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) +#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) +#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) +#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) +#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) + +/* Cast-Rank Mode */ +#if defined(SWIG_CASTRANK_MODE) +# ifndef SWIG_TypeRank +# define SWIG_TypeRank unsigned long +# endif +# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ +# define SWIG_MAXCASTRANK (2) +# endif +# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) +# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) +SWIGINTERNINLINE int SWIG_AddCast(int r) { + return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; +} +SWIGINTERNINLINE int SWIG_CheckState(int r) { + return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; +} +#else /* no cast-rank mode */ +# define SWIG_AddCast +# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) +#endif + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *(*swig_converter_func)(void *, int *); +typedef struct swig_type_info *(*swig_dycast_func)(void **); + +/* Structure to store information on one type */ +typedef struct swig_type_info { + const char *name; /* mangled name of this type */ + const char *str; /* human readable name of this type */ + swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ + struct swig_cast_info *cast; /* linked list of types that can cast into this type */ + void *clientdata; /* language specific type data */ + int owndata; /* flag if the structure owns the clientdata */ +} swig_type_info; + +/* Structure to store a type and conversion function used for casting */ +typedef struct swig_cast_info { + swig_type_info *type; /* pointer to type that is equivalent to this type */ + swig_converter_func converter; /* function to cast the void pointers */ + struct swig_cast_info *next; /* pointer to next cast in linked list */ + struct swig_cast_info *prev; /* pointer to the previous cast */ +} swig_cast_info; + +/* Structure used to store module information + * Each module generates one structure like this, and the runtime collects + * all of these structures and stores them in a circularly linked list.*/ +typedef struct swig_module_info { + swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ + size_t size; /* Number of types in this module */ + struct swig_module_info *next; /* Pointer to next element in circularly linked list */ + swig_type_info **type_initial; /* Array of initially generated type structures */ + swig_cast_info **cast_initial; /* Array of initially generated casting structures */ + void *clientdata; /* Language specific module data */ +} swig_module_info; + +/* + Compare two type names skipping the space characters, therefore + "char*" == "char *" and "Class" == "Class", etc. + + Return 0 when the two name types are equivalent, as in + strncmp, but skipping ' '. +*/ +SWIGRUNTIME int +SWIG_TypeNameComp(const char *f1, const char *l1, + const char *f2, const char *l2) { + for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { + while ((*f1 == ' ') && (f1 != l1)) ++f1; + while ((*f2 == ' ') && (f2 != l2)) ++f2; + if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; + } + return (int)((l1 - f1) - (l2 - f2)); +} + +/* + Check type equivalence in a name list like ||... + Return 0 if not equal, 1 if equal +*/ +SWIGRUNTIME int +SWIG_TypeEquiv(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; +} + +/* + Check type equivalence in a name list like ||... + Return 0 if equal, -1 if nb < tb, 1 if nb > tb +*/ +SWIGRUNTIME int +SWIG_TypeCompare(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; +} + + +/* + Check the typename +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheck(const char *c, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (strcmp(iter->type->name, c) == 0) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; +} + +/* + Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison +*/ +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { + if (ty) { + swig_cast_info *iter = ty->cast; + while (iter) { + if (iter->type == from) { + if (iter == ty->cast) + return iter; + /* Move iter to the top of the linked list */ + iter->prev->next = iter->next; + if (iter->next) + iter->next->prev = iter->prev; + iter->next = ty->cast; + iter->prev = 0; + if (ty->cast) ty->cast->prev = iter; + ty->cast = iter; + return iter; + } + iter = iter->next; + } + } + return 0; +} + +/* + Cast a pointer up an inheritance hierarchy +*/ +SWIGRUNTIMEINLINE void * +SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { + return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); +} + +/* + Dynamic pointer casting. Down an inheritance hierarchy +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { + swig_type_info *lastty = ty; + if (!ty || !ty->dcast) return ty; + while (ty && (ty->dcast)) { + ty = (*ty->dcast)(ptr); + if (ty) lastty = ty; + } + return lastty; +} + +/* + Return the name associated with this type +*/ +SWIGRUNTIMEINLINE const char * +SWIG_TypeName(const swig_type_info *ty) { + return ty->name; +} + +/* + Return the pretty name associated with this type, + that is an unmangled type name in a form presentable to the user. +*/ +SWIGRUNTIME const char * +SWIG_TypePrettyName(const swig_type_info *type) { + /* The "str" field contains the equivalent pretty names of the + type, separated by vertical-bar characters. We choose + to print the last name, as it is often (?) the most + specific. */ + if (!type) return NULL; + if (type->str != NULL) { + const char *last_name = type->str; + const char *s; + for (s = type->str; *s; s++) + if (*s == '|') last_name = s+1; + return last_name; + } + else + return type->name; +} + +/* + Set the clientdata field for a type +*/ +SWIGRUNTIME void +SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { + swig_cast_info *cast = ti->cast; + /* if (ti->clientdata == clientdata) return; */ + ti->clientdata = clientdata; + + while (cast) { + if (!cast->converter) { + swig_type_info *tc = cast->type; + if (!tc->clientdata) { + SWIG_TypeClientData(tc, clientdata); + } + } + cast = cast->next; + } +} +SWIGRUNTIME void +SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { + SWIG_TypeClientData(ti, clientdata); + ti->owndata = 1; +} + +/* + Search for a swig_type_info structure only by mangled name + Search is a O(log #types) + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_MangledTypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + swig_module_info *iter = start; + do { + if (iter->size) { + register size_t l = 0; + register size_t r = iter->size - 1; + do { + /* since l+r >= 0, we can (>> 1) instead (/ 2) */ + register size_t i = (l + r) >> 1; + const char *iname = iter->types[i]->name; + if (iname) { + register int compare = strcmp(name, iname); + if (compare == 0) { + return iter->types[i]; + } else if (compare < 0) { + if (i) { + r = i - 1; + } else { + break; + } + } else if (compare > 0) { + l = i + 1; + } + } else { + break; /* should never happen */ + } + } while (l <= r); + } + iter = iter->next; + } while (iter != end); + return 0; +} + +/* + Search for a swig_type_info structure for either a mangled name or a human readable name. + It first searches the mangled names of the types, which is a O(log #types) + If a type is not found it then searches the human readable names, which is O(#types). + + We start searching at module start, and finish searching when start == end. + Note: if start == end at the beginning of the function, we go all the way around + the circular list. +*/ +SWIGRUNTIME swig_type_info * +SWIG_TypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + /* STEP 1: Search the name field using binary search */ + swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); + if (ret) { + return ret; + } else { + /* STEP 2: If the type hasn't been found, do a complete search + of the str field (the human readable name) */ + swig_module_info *iter = start; + do { + register size_t i = 0; + for (; i < iter->size; ++i) { + if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) + return iter->types[i]; + } + iter = iter->next; + } while (iter != end); + } + + /* neither found a match */ + return 0; +} + +/* + Pack binary data into a string +*/ +SWIGRUNTIME char * +SWIG_PackData(char *c, void *ptr, size_t sz) { + static const char hex[17] = "0123456789abcdef"; + register const unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register unsigned char uu = *u; + *(c++) = hex[(uu & 0xf0) >> 4]; + *(c++) = hex[uu & 0xf]; + } + return c; +} + +/* + Unpack binary data from a string +*/ +SWIGRUNTIME const char * +SWIG_UnpackData(const char *c, void *ptr, size_t sz) { + register unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register char d = *(c++); + register unsigned char uu; + if ((d >= '0') && (d <= '9')) + uu = ((d - '0') << 4); + else if ((d >= 'a') && (d <= 'f')) + uu = ((d - ('a'-10)) << 4); + else + return (char *) 0; + d = *(c++); + if ((d >= '0') && (d <= '9')) + uu |= (d - '0'); + else if ((d >= 'a') && (d <= 'f')) + uu |= (d - ('a'-10)); + else + return (char *) 0; + *u = uu; + } + return c; +} + +/* + Pack 'void *' into a string buffer. +*/ +SWIGRUNTIME char * +SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { + char *r = buff; + if ((2*sizeof(void *) + 2) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,&ptr,sizeof(void *)); + if (strlen(name) + 1 > (bsz - (r - buff))) return 0; + strcpy(r,name); + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + *ptr = (void *) 0; + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sizeof(void *)); +} + +SWIGRUNTIME char * +SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { + char *r = buff; + size_t lname = (name ? strlen(name) : 0); + if ((2*sz + 2 + lname) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,ptr,sz); + if (lname) { + strncpy(r,name,lname+1); + } else { + *r = 0; + } + return buff; +} + +SWIGRUNTIME const char * +SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + memset(ptr,0,sz); + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sz); +} + +#ifdef __cplusplus +} +#endif + +/* Errors in SWIG */ +#define SWIG_UnknownError -1 +#define SWIG_IOError -2 +#define SWIG_RuntimeError -3 +#define SWIG_IndexError -4 +#define SWIG_TypeError -5 +#define SWIG_DivisionByZero -6 +#define SWIG_OverflowError -7 +#define SWIG_SyntaxError -8 +#define SWIG_ValueError -9 +#define SWIG_SystemError -10 +#define SWIG_AttributeError -11 +#define SWIG_MemoryError -12 +#define SWIG_NullReferenceError -13 + + + +/* Compatibility macros for Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + +#define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type) +#define PyInt_Check(x) PyLong_Check(x) +#define PyInt_AsLong(x) PyLong_AsLong(x) +#define PyInt_FromLong(x) PyLong_FromLong(x) +#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args) + +#endif + +#ifndef Py_TYPE +# define Py_TYPE(op) ((op)->ob_type) +#endif + +/* SWIG APIs for compatibility of both Python 2 & 3 */ + +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_Python_str_FromFormat PyUnicode_FromFormat +#else +# define SWIG_Python_str_FromFormat PyString_FromFormat +#endif + + +/* Warning: This function will allocate a new string in Python 3, + * so please call SWIG_Python_str_DelForPy3(x) to free the space. + */ +SWIGINTERN char* +SWIG_Python_str_AsChar(PyObject *str) +{ +#if PY_VERSION_HEX >= 0x03000000 + char *cstr; + char *newstr; + Py_ssize_t len; + str = PyUnicode_AsUTF8String(str); + PyBytes_AsStringAndSize(str, &cstr, &len); + newstr = (char *) malloc(len+1); + memcpy(newstr, cstr, len+1); + Py_XDECREF(str); + return newstr; +#else + return PyString_AsString(str); +#endif +} + +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_Python_str_DelForPy3(x) free( (void*) (x) ) +#else +# define SWIG_Python_str_DelForPy3(x) +#endif + + +SWIGINTERN PyObject* +SWIG_Python_str_FromChar(const char *c) +{ +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_FromString(c); +#else + return PyString_FromString(c); +#endif +} + +/* Add PyOS_snprintf for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 +# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) +# define PyOS_snprintf _snprintf +# else +# define PyOS_snprintf snprintf +# endif +#endif + +/* A crude PyString_FromFormat implementation for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 + +#ifndef SWIG_PYBUFFER_SIZE +# define SWIG_PYBUFFER_SIZE 1024 +#endif + +static PyObject * +PyString_FromFormat(const char *fmt, ...) { + va_list ap; + char buf[SWIG_PYBUFFER_SIZE * 2]; + int res; + va_start(ap, fmt); + res = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf); +} +#endif + +/* Add PyObject_Del for old Pythons */ +#if PY_VERSION_HEX < 0x01060000 +# define PyObject_Del(op) PyMem_DEL((op)) +#endif +#ifndef PyObject_DEL +# define PyObject_DEL PyObject_Del +#endif + +/* A crude PyExc_StopIteration exception for old Pythons */ +#if PY_VERSION_HEX < 0x02020000 +# ifndef PyExc_StopIteration +# define PyExc_StopIteration PyExc_RuntimeError +# endif +# ifndef PyObject_GenericGetAttr +# define PyObject_GenericGetAttr 0 +# endif +#endif + +/* Py_NotImplemented is defined in 2.1 and up. */ +#if PY_VERSION_HEX < 0x02010000 +# ifndef Py_NotImplemented +# define Py_NotImplemented PyExc_RuntimeError +# endif +#endif + +/* A crude PyString_AsStringAndSize implementation for old Pythons */ +#if PY_VERSION_HEX < 0x02010000 +# ifndef PyString_AsStringAndSize +# define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;} +# endif +#endif + +/* PySequence_Size for old Pythons */ +#if PY_VERSION_HEX < 0x02000000 +# ifndef PySequence_Size +# define PySequence_Size PySequence_Length +# endif +#endif + +/* PyBool_FromLong for old Pythons */ +#if PY_VERSION_HEX < 0x02030000 +static +PyObject *PyBool_FromLong(long ok) +{ + PyObject *result = ok ? Py_True : Py_False; + Py_INCREF(result); + return result; +} +#endif + +/* Py_ssize_t for old Pythons */ +/* This code is as recommended by: */ +/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */ +#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) +typedef int Py_ssize_t; +# define PY_SSIZE_T_MAX INT_MAX +# define PY_SSIZE_T_MIN INT_MIN +#endif + +/* ----------------------------------------------------------------------------- + * error manipulation + * ----------------------------------------------------------------------------- */ + +SWIGRUNTIME PyObject* +SWIG_Python_ErrorType(int code) { + PyObject* type = 0; + switch(code) { + case SWIG_MemoryError: + type = PyExc_MemoryError; + break; + case SWIG_IOError: + type = PyExc_IOError; + break; + case SWIG_RuntimeError: + type = PyExc_RuntimeError; + break; + case SWIG_IndexError: + type = PyExc_IndexError; + break; + case SWIG_TypeError: + type = PyExc_TypeError; + break; + case SWIG_DivisionByZero: + type = PyExc_ZeroDivisionError; + break; + case SWIG_OverflowError: + type = PyExc_OverflowError; + break; + case SWIG_SyntaxError: + type = PyExc_SyntaxError; + break; + case SWIG_ValueError: + type = PyExc_ValueError; + break; + case SWIG_SystemError: + type = PyExc_SystemError; + break; + case SWIG_AttributeError: + type = PyExc_AttributeError; + break; + default: + type = PyExc_RuntimeError; + } + return type; +} + + +SWIGRUNTIME void +SWIG_Python_AddErrorMsg(const char* mesg) +{ + PyObject *type = 0; + PyObject *value = 0; + PyObject *traceback = 0; + + if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback); + if (value) { + char *tmp; + PyObject *old_str = PyObject_Str(value); + PyErr_Clear(); + Py_XINCREF(type); + + PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(old_str); + Py_DECREF(value); + } else { + PyErr_SetString(PyExc_RuntimeError, mesg); + } +} + +#if defined(SWIG_PYTHON_NO_THREADS) +# if defined(SWIG_PYTHON_THREADS) +# undef SWIG_PYTHON_THREADS +# endif +#endif +#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */ +# if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL) +# if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */ +# define SWIG_PYTHON_USE_GIL +# endif +# endif +# if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */ +# ifndef SWIG_PYTHON_INITIALIZE_THREADS +# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads() +# endif +# ifdef __cplusplus /* C++ code */ + class SWIG_Python_Thread_Block { + bool status; + PyGILState_STATE state; + public: + void end() { if (status) { PyGILState_Release(state); status = false;} } + SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {} + ~SWIG_Python_Thread_Block() { end(); } + }; + class SWIG_Python_Thread_Allow { + bool status; + PyThreadState *save; + public: + void end() { if (status) { PyEval_RestoreThread(save); status = false; }} + SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {} + ~SWIG_Python_Thread_Allow() { end(); } + }; +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK SWIG_Python_Thread_Block _swig_thread_block +# define SWIG_PYTHON_THREAD_END_BLOCK _swig_thread_block.end() +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW SWIG_Python_Thread_Allow _swig_thread_allow +# define SWIG_PYTHON_THREAD_END_ALLOW _swig_thread_allow.end() +# else /* C code */ +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK PyGILState_STATE _swig_thread_block = PyGILState_Ensure() +# define SWIG_PYTHON_THREAD_END_BLOCK PyGILState_Release(_swig_thread_block) +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW PyThreadState *_swig_thread_allow = PyEval_SaveThread() +# define SWIG_PYTHON_THREAD_END_ALLOW PyEval_RestoreThread(_swig_thread_allow) +# endif +# else /* Old thread way, not implemented, user must provide it */ +# if !defined(SWIG_PYTHON_INITIALIZE_THREADS) +# define SWIG_PYTHON_INITIALIZE_THREADS +# endif +# if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK) +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK +# endif +# if !defined(SWIG_PYTHON_THREAD_END_BLOCK) +# define SWIG_PYTHON_THREAD_END_BLOCK +# endif +# if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW) +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW +# endif +# if !defined(SWIG_PYTHON_THREAD_END_ALLOW) +# define SWIG_PYTHON_THREAD_END_ALLOW +# endif +# endif +#else /* No thread support */ +# define SWIG_PYTHON_INITIALIZE_THREADS +# define SWIG_PYTHON_THREAD_BEGIN_BLOCK +# define SWIG_PYTHON_THREAD_END_BLOCK +# define SWIG_PYTHON_THREAD_BEGIN_ALLOW +# define SWIG_PYTHON_THREAD_END_ALLOW +#endif + +/* ----------------------------------------------------------------------------- + * Python API portion that goes into the runtime + * ----------------------------------------------------------------------------- */ + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* cc-mode */ +#endif +#endif + +/* ----------------------------------------------------------------------------- + * Constant declarations + * ----------------------------------------------------------------------------- */ + +/* Constant Types */ +#define SWIG_PY_POINTER 4 +#define SWIG_PY_BINARY 5 + +/* Constant information structure */ +typedef struct swig_const_info { + int type; + char *name; + long lvalue; + double dvalue; + void *pvalue; + swig_type_info **ptype; +} swig_const_info; + + +/* ----------------------------------------------------------------------------- + * Wrapper of PyInstanceMethod_New() used in Python 3 + * It is exported to the generated module, used for -fastproxy + * ----------------------------------------------------------------------------- */ +SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *self, PyObject *func) +{ +#if PY_VERSION_HEX >= 0x03000000 + return PyInstanceMethod_New(func); +#else + return NULL; +#endif +} + +#ifdef __cplusplus +#if 0 +{ /* cc-mode */ +#endif +} +#endif + + +/* ----------------------------------------------------------------------------- + * See the LICENSE file for information on copyright, usage and redistribution + * of SWIG, and the README file for authors - http://www.swig.org/release.html. + * + * pyrun.swg + * + * This file contains the runtime support for Python modules + * and includes code for managing global variables and pointer + * type checking. + * + * ----------------------------------------------------------------------------- */ + +/* Common SWIG API */ + +/* for raw pointers */ +#define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0) +#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags) +#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own) +#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(ptr, type, flags) +#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) +#define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src) +#define swig_owntype int + +/* for raw packed data */ +#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) + +/* for class or struct pointers */ +#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) +#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) + +/* for C or C++ function pointers */ +#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type) +#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(ptr, type, 0) + +/* for C++ member pointers, ie, member methods */ +#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) +#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) + + +/* Runtime API */ + +#define SWIG_GetModule(clientdata) SWIG_Python_GetModule() +#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) +#define SWIG_NewClientData(obj) SwigPyClientData_New(obj) + +#define SWIG_SetErrorObj SWIG_Python_SetErrorObj +#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg +#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code) +#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) +#define SWIG_fail goto fail + + +/* Runtime API implementation */ + +/* Error manipulation */ + +SWIGINTERN void +SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetObject(errtype, obj); + Py_DECREF(obj); + SWIG_PYTHON_THREAD_END_BLOCK; +} + +SWIGINTERN void +SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetString(errtype, (char *) msg); + SWIG_PYTHON_THREAD_END_BLOCK; +} + +#define SWIG_Python_Raise(obj, type, desc) SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj) + +/* Set a constant value */ + +SWIGINTERN void +SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { + PyDict_SetItemString(d, (char*) name, obj); + Py_DECREF(obj); +} + +/* Append a value to the result obj */ + +SWIGINTERN PyObject* +SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) { +#if !defined(SWIG_PYTHON_OUTPUT_TUPLE) + if (!result) { + result = obj; + } else if (result == Py_None) { + Py_DECREF(result); + result = obj; + } else { + if (!PyList_Check(result)) { + PyObject *o2 = result; + result = PyList_New(1); + PyList_SetItem(result, 0, o2); + } + PyList_Append(result,obj); + Py_DECREF(obj); + } + return result; +#else + PyObject* o2; + PyObject* o3; + if (!result) { + result = obj; + } else if (result == Py_None) { + Py_DECREF(result); + result = obj; + } else { + if (!PyTuple_Check(result)) { + o2 = result; + result = PyTuple_New(1); + PyTuple_SET_ITEM(result, 0, o2); + } + o3 = PyTuple_New(1); + PyTuple_SET_ITEM(o3, 0, obj); + o2 = result; + result = PySequence_Concat(o2, o3); + Py_DECREF(o2); + Py_DECREF(o3); + } + return result; +#endif +} + +/* Unpack the argument tuple */ + +SWIGINTERN int +SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs) +{ + if (!args) { + if (!min && !max) { + return 1; + } else { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", + name, (min == max ? "" : "at least "), (int)min); + return 0; + } + } + if (!PyTuple_Check(args)) { + PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple"); + return 0; + } else { + register Py_ssize_t l = PyTuple_GET_SIZE(args); + if (l < min) { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + name, (min == max ? "" : "at least "), (int)min, (int)l); + return 0; + } else if (l > max) { + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + name, (min == max ? "" : "at most "), (int)max, (int)l); + return 0; + } else { + register int i; + for (i = 0; i < l; ++i) { + objs[i] = PyTuple_GET_ITEM(args, i); + } + for (; l < max; ++l) { + objs[l] = 0; + } + return i + 1; + } + } +} + +/* A functor is a function object with one single object argument */ +#if PY_VERSION_HEX >= 0x02020000 +#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunctionObjArgs(functor, obj, NULL); +#else +#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunction(functor, "O", obj); +#endif + +/* + Helper for static pointer initialization for both C and C++ code, for example + static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...); +*/ +#ifdef __cplusplus +#define SWIG_STATIC_POINTER(var) var +#else +#define SWIG_STATIC_POINTER(var) var = 0; if (!var) var +#endif + +/* ----------------------------------------------------------------------------- + * Pointer declarations + * ----------------------------------------------------------------------------- */ + +/* Flags for new pointer objects */ +#define SWIG_POINTER_NOSHADOW (SWIG_POINTER_OWN << 1) +#define SWIG_POINTER_NEW (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN) + +#define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1) + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* cc-mode */ +#endif +#endif + +/* How to access Py_None */ +#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# ifndef SWIG_PYTHON_NO_BUILD_NONE +# ifndef SWIG_PYTHON_BUILD_NONE +# define SWIG_PYTHON_BUILD_NONE +# endif +# endif +#endif + +#ifdef SWIG_PYTHON_BUILD_NONE +# ifdef Py_None +# undef Py_None +# define Py_None SWIG_Py_None() +# endif +SWIGRUNTIMEINLINE PyObject * +_SWIG_Py_None(void) +{ + PyObject *none = Py_BuildValue((char*)""); + Py_DECREF(none); + return none; +} +SWIGRUNTIME PyObject * +SWIG_Py_None(void) +{ + static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None(); + return none; +} +#endif + +/* The python void return value */ + +SWIGRUNTIMEINLINE PyObject * +SWIG_Py_Void(void) +{ + PyObject *none = Py_None; + Py_INCREF(none); + return none; +} + +/* SwigPyClientData */ + +typedef struct { + PyObject *klass; + PyObject *newraw; + PyObject *newargs; + PyObject *destroy; + int delargs; + int implicitconv; +} SwigPyClientData; + +SWIGRUNTIMEINLINE int +SWIG_Python_CheckImplicit(swig_type_info *ty) +{ + SwigPyClientData *data = (SwigPyClientData *)ty->clientdata; + return data ? data->implicitconv : 0; +} + +SWIGRUNTIMEINLINE PyObject * +SWIG_Python_ExceptionType(swig_type_info *desc) { + SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0; + PyObject *klass = data ? data->klass : 0; + return (klass ? klass : PyExc_RuntimeError); +} + + +SWIGRUNTIME SwigPyClientData * +SwigPyClientData_New(PyObject* obj) +{ + if (!obj) { + return 0; + } else { + SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData)); + /* the klass element */ + data->klass = obj; + Py_INCREF(data->klass); + /* the newraw method and newargs arguments used to create a new raw instance */ + if (PyClass_Check(obj)) { + data->newraw = 0; + data->newargs = obj; + Py_INCREF(obj); + } else { +#if (PY_VERSION_HEX < 0x02020000) + data->newraw = 0; +#else + data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__"); +#endif + if (data->newraw) { + Py_INCREF(data->newraw); + data->newargs = PyTuple_New(1); + PyTuple_SetItem(data->newargs, 0, obj); + } else { + data->newargs = obj; + } + Py_INCREF(data->newargs); + } + /* the destroy method, aka as the C++ delete method */ + data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__"); + if (PyErr_Occurred()) { + PyErr_Clear(); + data->destroy = 0; + } + if (data->destroy) { + int flags; + Py_INCREF(data->destroy); + flags = PyCFunction_GET_FLAGS(data->destroy); +#ifdef METH_O + data->delargs = !(flags & (METH_O)); +#else + data->delargs = 0; +#endif + } else { + data->delargs = 0; + } + data->implicitconv = 0; + return data; + } +} + +SWIGRUNTIME void +SwigPyClientData_Del(SwigPyClientData* data) +{ + Py_XDECREF(data->newraw); + Py_XDECREF(data->newargs); + Py_XDECREF(data->destroy); +} + +/* =============== SwigPyObject =====================*/ + +typedef struct { + PyObject_HEAD + void *ptr; + swig_type_info *ty; + int own; + PyObject *next; +} SwigPyObject; + +SWIGRUNTIME PyObject * +SwigPyObject_long(SwigPyObject *v) +{ + return PyLong_FromVoidPtr(v->ptr); +} + +SWIGRUNTIME PyObject * +SwigPyObject_format(const char* fmt, SwigPyObject *v) +{ + PyObject *res = NULL; + PyObject *args = PyTuple_New(1); + if (args) { + if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) { + PyObject *ofmt = SWIG_Python_str_FromChar(fmt); + if (ofmt) { +#if PY_VERSION_HEX >= 0x03000000 + res = PyUnicode_Format(ofmt,args); +#else + res = PyString_Format(ofmt,args); +#endif + Py_DECREF(ofmt); + } + Py_DECREF(args); + } + } + return res; +} + +SWIGRUNTIME PyObject * +SwigPyObject_oct(SwigPyObject *v) +{ + return SwigPyObject_format("%o",v); +} + +SWIGRUNTIME PyObject * +SwigPyObject_hex(SwigPyObject *v) +{ + return SwigPyObject_format("%x",v); +} + +SWIGRUNTIME PyObject * +#ifdef METH_NOARGS +SwigPyObject_repr(SwigPyObject *v) +#else +SwigPyObject_repr(SwigPyObject *v, PyObject *args) +#endif +{ + const char *name = SWIG_TypePrettyName(v->ty); + PyObject *repr = SWIG_Python_str_FromFormat("", name, v); + if (v->next) { +#ifdef METH_NOARGS + PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next); +#else + PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args); +#endif +#if PY_VERSION_HEX >= 0x03000000 + PyObject *joined = PyUnicode_Concat(repr, nrep); + Py_DecRef(repr); + Py_DecRef(nrep); + repr = joined; +#else + PyString_ConcatAndDel(&repr,nrep); +#endif + } + return repr; +} + +SWIGRUNTIME int +SwigPyObject_print(SwigPyObject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) +{ + char *str; +#ifdef METH_NOARGS + PyObject *repr = SwigPyObject_repr(v); +#else + PyObject *repr = SwigPyObject_repr(v, NULL); +#endif + if (repr) { + str = SWIG_Python_str_AsChar(repr); + fputs(str, fp); + SWIG_Python_str_DelForPy3(str); + Py_DECREF(repr); + return 0; + } else { + return 1; + } +} + +SWIGRUNTIME PyObject * +SwigPyObject_str(SwigPyObject *v) +{ + char result[SWIG_BUFFER_SIZE]; + return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ? + SWIG_Python_str_FromChar(result) : 0; +} + +SWIGRUNTIME int +SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w) +{ + void *i = v->ptr; + void *j = w->ptr; + return (i < j) ? -1 : ((i > j) ? 1 : 0); +} + +/* Added for Python 3.x, would it also be useful for Python 2.x? */ +SWIGRUNTIME PyObject* +SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op) +{ + PyObject* res; + if( op != Py_EQ && op != Py_NE ) { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + if( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ) + res = Py_True; + else + res = Py_False; + Py_INCREF(res); + return res; +} + + +SWIGRUNTIME PyTypeObject* _PySwigObject_type(void); + +SWIGRUNTIME PyTypeObject* +SwigPyObject_type(void) { + static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigObject_type(); + return type; +} + +SWIGRUNTIMEINLINE int +SwigPyObject_Check(PyObject *op) { + return (Py_TYPE(op) == SwigPyObject_type()) + || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0); +} + +SWIGRUNTIME PyObject * +SwigPyObject_New(void *ptr, swig_type_info *ty, int own); + +SWIGRUNTIME void +SwigPyObject_dealloc(PyObject *v) +{ + SwigPyObject *sobj = (SwigPyObject *) v; + PyObject *next = sobj->next; + if (sobj->own == SWIG_POINTER_OWN) { + swig_type_info *ty = sobj->ty; + SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; + PyObject *destroy = data ? data->destroy : 0; + if (destroy) { + /* destroy is always a VARARGS method */ + PyObject *res; + if (data->delargs) { + /* we need to create a temporary object to carry the destroy operation */ + PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0); + res = SWIG_Python_CallFunctor(destroy, tmp); + Py_DECREF(tmp); + } else { + PyCFunction meth = PyCFunction_GET_FUNCTION(destroy); + PyObject *mself = PyCFunction_GET_SELF(destroy); + res = ((*meth)(mself, v)); + } + Py_XDECREF(res); + } +#if !defined(SWIG_PYTHON_SILENT_MEMLEAK) + else { + const char *name = SWIG_TypePrettyName(ty); + printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown")); + } +#endif + } + Py_XDECREF(next); + PyObject_DEL(v); +} + +SWIGRUNTIME PyObject* +SwigPyObject_append(PyObject* v, PyObject* next) +{ + SwigPyObject *sobj = (SwigPyObject *) v; +#ifndef METH_O + PyObject *tmp = 0; + if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL; + next = tmp; +#endif + if (!SwigPyObject_Check(next)) { + return NULL; + } + sobj->next = next; + Py_INCREF(next); + return SWIG_Py_Void(); +} + +SWIGRUNTIME PyObject* +#ifdef METH_NOARGS +SwigPyObject_next(PyObject* v) +#else +SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *) v; + if (sobj->next) { + Py_INCREF(sobj->next); + return sobj->next; + } else { + return SWIG_Py_Void(); + } +} + +SWIGINTERN PyObject* +#ifdef METH_NOARGS +SwigPyObject_disown(PyObject *v) +#else +SwigPyObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *)v; + sobj->own = 0; + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject* +#ifdef METH_NOARGS +SwigPyObject_acquire(PyObject *v) +#else +SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) +#endif +{ + SwigPyObject *sobj = (SwigPyObject *)v; + sobj->own = SWIG_POINTER_OWN; + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject* +SwigPyObject_own(PyObject *v, PyObject *args) +{ + PyObject *val = 0; +#if (PY_VERSION_HEX < 0x02020000) + if (!PyArg_ParseTuple(args,(char *)"|O:own",&val)) +#else + if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) +#endif + { + return NULL; + } + else + { + SwigPyObject *sobj = (SwigPyObject *)v; + PyObject *obj = PyBool_FromLong(sobj->own); + if (val) { +#ifdef METH_NOARGS + if (PyObject_IsTrue(val)) { + SwigPyObject_acquire(v); + } else { + SwigPyObject_disown(v); + } +#else + if (PyObject_IsTrue(val)) { + SwigPyObject_acquire(v,args); + } else { + SwigPyObject_disown(v,args); + } +#endif + } + return obj; + } +} + +#ifdef METH_O +static PyMethodDef +swigobject_methods[] = { + {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS, (char *)"aquires ownership of the pointer"}, + {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, + {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"}, + {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"}, + {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_NOARGS, (char *)"returns object representation"}, + {0, 0, 0, 0} +}; +#else +static PyMethodDef +swigobject_methods[] = { + {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"}, + {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS, (char *)"aquires ownership of the pointer"}, + {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, + {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"}, + {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"}, + {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"}, + {0, 0, 0, 0} +}; +#endif + +#if PY_VERSION_HEX < 0x02020000 +SWIGINTERN PyObject * +SwigPyObject_getattr(SwigPyObject *sobj,char *name) +{ + return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name); +} +#endif + +SWIGRUNTIME PyTypeObject* +_PySwigObject_type(void) { + static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer"; + + static PyNumberMethods SwigPyObject_as_number = { + (binaryfunc)0, /*nb_add*/ + (binaryfunc)0, /*nb_subtract*/ + (binaryfunc)0, /*nb_multiply*/ + /* nb_divide removed in Python 3 */ +#if PY_VERSION_HEX < 0x03000000 + (binaryfunc)0, /*nb_divide*/ +#endif + (binaryfunc)0, /*nb_remainder*/ + (binaryfunc)0, /*nb_divmod*/ + (ternaryfunc)0,/*nb_power*/ + (unaryfunc)0, /*nb_negative*/ + (unaryfunc)0, /*nb_positive*/ + (unaryfunc)0, /*nb_absolute*/ + (inquiry)0, /*nb_nonzero*/ + 0, /*nb_invert*/ + 0, /*nb_lshift*/ + 0, /*nb_rshift*/ + 0, /*nb_and*/ + 0, /*nb_xor*/ + 0, /*nb_or*/ +#if PY_VERSION_HEX < 0x03000000 + 0, /*nb_coerce*/ +#endif + (unaryfunc)SwigPyObject_long, /*nb_int*/ +#if PY_VERSION_HEX < 0x03000000 + (unaryfunc)SwigPyObject_long, /*nb_long*/ +#else + 0, /*nb_reserved*/ +#endif + (unaryfunc)0, /*nb_float*/ +#if PY_VERSION_HEX < 0x03000000 + (unaryfunc)SwigPyObject_oct, /*nb_oct*/ + (unaryfunc)SwigPyObject_hex, /*nb_hex*/ +#endif +#if PY_VERSION_HEX >= 0x03000000 /* 3.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */ +#elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */ +#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */ +#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */ + 0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */ +#endif + }; + + static PyTypeObject swigpyobject_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp + = { + /* PyObject header changed in Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + PyVarObject_HEAD_INIT(&PyType_Type, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"SwigPyObject", /* tp_name */ + sizeof(SwigPyObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyObject_dealloc, /* tp_dealloc */ + (printfunc)SwigPyObject_print, /* tp_print */ +#if PY_VERSION_HEX < 0x02020000 + (getattrfunc)SwigPyObject_getattr, /* tp_getattr */ +#else + (getattrfunc)0, /* tp_getattr */ +#endif + (setattrfunc)0, /* tp_setattr */ +#if PY_VERSION_HEX >= 0x03000000 + 0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */ +#else + (cmpfunc)SwigPyObject_compare, /* tp_compare */ +#endif + (reprfunc)SwigPyObject_repr, /* tp_repr */ + &SwigPyObject_as_number, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)SwigPyObject_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigobject_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + (richcmpfunc)SwigPyObject_richcompare, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0, /* tp_iter */ + 0, /* tp_iternext */ + swigobject_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#ifdef COUNT_ALLOCS + 0,0,0,0 /* tp_alloc -> tp_next */ +#endif + }; + swigpyobject_type = tmp; + /* for Python 3 we already assigned ob_type in PyVarObject_HEAD_INIT() */ +#if PY_VERSION_HEX < 0x03000000 + swigpyobject_type.ob_type = &PyType_Type; +#endif + type_init = 1; + } + return &swigpyobject_type; +} + +SWIGRUNTIME PyObject * +SwigPyObject_New(void *ptr, swig_type_info *ty, int own) +{ + SwigPyObject *sobj = PyObject_NEW(SwigPyObject, SwigPyObject_type()); + if (sobj) { + sobj->ptr = ptr; + sobj->ty = ty; + sobj->own = own; + sobj->next = 0; + } + return (PyObject *)sobj; +} + +/* ----------------------------------------------------------------------------- + * Implements a simple Swig Packed type, and use it instead of string + * ----------------------------------------------------------------------------- */ + +typedef struct { + PyObject_HEAD + void *pack; + swig_type_info *ty; + size_t size; +} SwigPyPacked; + +SWIGRUNTIME int +SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags)) +{ + char result[SWIG_BUFFER_SIZE]; + fputs("pack, v->size, 0, sizeof(result))) { + fputs("at ", fp); + fputs(result, fp); + } + fputs(v->ty->name,fp); + fputs(">", fp); + return 0; +} + +SWIGRUNTIME PyObject * +SwigPyPacked_repr(SwigPyPacked *v) +{ + char result[SWIG_BUFFER_SIZE]; + if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) { + return SWIG_Python_str_FromFormat("", result, v->ty->name); + } else { + return SWIG_Python_str_FromFormat("", v->ty->name); + } +} + +SWIGRUNTIME PyObject * +SwigPyPacked_str(SwigPyPacked *v) +{ + char result[SWIG_BUFFER_SIZE]; + if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){ + return SWIG_Python_str_FromFormat("%s%s", result, v->ty->name); + } else { + return SWIG_Python_str_FromChar(v->ty->name); + } +} + +SWIGRUNTIME int +SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w) +{ + size_t i = v->size; + size_t j = w->size; + int s = (i < j) ? -1 : ((i > j) ? 1 : 0); + return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size); +} + +SWIGRUNTIME PyTypeObject* _PySwigPacked_type(void); + +SWIGRUNTIME PyTypeObject* +SwigPyPacked_type(void) { + static PyTypeObject *SWIG_STATIC_POINTER(type) = _PySwigPacked_type(); + return type; +} + +SWIGRUNTIMEINLINE int +SwigPyPacked_Check(PyObject *op) { + return ((op)->ob_type == _PySwigPacked_type()) + || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0); +} + +SWIGRUNTIME void +SwigPyPacked_dealloc(PyObject *v) +{ + if (SwigPyPacked_Check(v)) { + SwigPyPacked *sobj = (SwigPyPacked *) v; + free(sobj->pack); + } + PyObject_DEL(v); +} + +SWIGRUNTIME PyTypeObject* +_PySwigPacked_type(void) { + static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer"; + static PyTypeObject swigpypacked_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp + = { + /* PyObject header changed in Python 3 */ +#if PY_VERSION_HEX>=0x03000000 + PyVarObject_HEAD_INIT(&PyType_Type, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ +#endif + (char *)"SwigPyPacked", /* tp_name */ + sizeof(SwigPyPacked), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)SwigPyPacked_dealloc, /* tp_dealloc */ + (printfunc)SwigPyPacked_print, /* tp_print */ + (getattrfunc)0, /* tp_getattr */ + (setattrfunc)0, /* tp_setattr */ +#if PY_VERSION_HEX>=0x03000000 + 0, /* tp_reserved in 3.0.1 */ +#else + (cmpfunc)SwigPyPacked_compare, /* tp_compare */ +#endif + (reprfunc)SwigPyPacked_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)0, /* tp_hash */ + (ternaryfunc)0, /* tp_call */ + (reprfunc)SwigPyPacked_str, /* tp_str */ + PyObject_GenericGetAttr, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + swigpacked_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + 0, /* tp_new */ + 0, /* tp_free */ + 0, /* tp_is_gc */ + 0, /* tp_bases */ + 0, /* tp_mro */ + 0, /* tp_cache */ + 0, /* tp_subclasses */ + 0, /* tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#ifdef COUNT_ALLOCS + 0,0,0,0 /* tp_alloc -> tp_next */ +#endif + }; + swigpypacked_type = tmp; + /* for Python 3 the ob_type already assigned in PyVarObject_HEAD_INIT() */ +#if PY_VERSION_HEX < 0x03000000 + swigpypacked_type.ob_type = &PyType_Type; +#endif + type_init = 1; + } + return &swigpypacked_type; +} + +SWIGRUNTIME PyObject * +SwigPyPacked_New(void *ptr, size_t size, swig_type_info *ty) +{ + SwigPyPacked *sobj = PyObject_NEW(SwigPyPacked, SwigPyPacked_type()); + if (sobj) { + void *pack = malloc(size); + if (pack) { + memcpy(pack, ptr, size); + sobj->pack = pack; + sobj->ty = ty; + sobj->size = size; + } else { + PyObject_DEL((PyObject *) sobj); + sobj = 0; + } + } + return (PyObject *) sobj; +} + +SWIGRUNTIME swig_type_info * +SwigPyPacked_UnpackData(PyObject *obj, void *ptr, size_t size) +{ + if (SwigPyPacked_Check(obj)) { + SwigPyPacked *sobj = (SwigPyPacked *)obj; + if (sobj->size != size) return 0; + memcpy(ptr, sobj->pack, size); + return sobj->ty; + } else { + return 0; + } +} + +/* ----------------------------------------------------------------------------- + * pointers/data manipulation + * ----------------------------------------------------------------------------- */ + +SWIGRUNTIMEINLINE PyObject * +_SWIG_This(void) +{ + return SWIG_Python_str_FromChar("this"); +} + +SWIGRUNTIME PyObject * +SWIG_This(void) +{ + static PyObject *SWIG_STATIC_POINTER(swig_this) = _SWIG_This(); + return swig_this; +} + +/* #define SWIG_PYTHON_SLOW_GETSET_THIS */ + +/* TODO: I don't know how to implement the fast getset in Python 3 right now */ +#if PY_VERSION_HEX>=0x03000000 +#define SWIG_PYTHON_SLOW_GETSET_THIS +#endif + +SWIGRUNTIME SwigPyObject * +SWIG_Python_GetSwigThis(PyObject *pyobj) +{ + if (SwigPyObject_Check(pyobj)) { + return (SwigPyObject *) pyobj; + } else { + PyObject *obj = 0; +#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000)) + if (PyInstance_Check(pyobj)) { + obj = _PyInstance_Lookup(pyobj, SWIG_This()); + } else { + PyObject **dictptr = _PyObject_GetDictPtr(pyobj); + if (dictptr != NULL) { + PyObject *dict = *dictptr; + obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0; + } else { +#ifdef PyWeakref_CheckProxy + if (PyWeakref_CheckProxy(pyobj)) { + PyObject *wobj = PyWeakref_GET_OBJECT(pyobj); + return wobj ? SWIG_Python_GetSwigThis(wobj) : 0; + } +#endif + obj = PyObject_GetAttr(pyobj,SWIG_This()); + if (obj) { + Py_DECREF(obj); + } else { + if (PyErr_Occurred()) PyErr_Clear(); + return 0; + } + } + } +#else + obj = PyObject_GetAttr(pyobj,SWIG_This()); + if (obj) { + Py_DECREF(obj); + } else { + if (PyErr_Occurred()) PyErr_Clear(); + return 0; + } +#endif + if (obj && !SwigPyObject_Check(obj)) { + /* a PyObject is called 'this', try to get the 'real this' + SwigPyObject from it */ + return SWIG_Python_GetSwigThis(obj); + } + return (SwigPyObject *)obj; + } +} + +/* Acquire a pointer value */ + +SWIGRUNTIME int +SWIG_Python_AcquirePtr(PyObject *obj, int own) { + if (own == SWIG_POINTER_OWN) { + SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj); + if (sobj) { + int oldown = sobj->own; + sobj->own = own; + return oldown; + } + } + return 0; +} + +/* Convert a pointer value */ + +SWIGRUNTIME int +SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) { + if (!obj) return SWIG_ERROR; + if (obj == Py_None) { + if (ptr) *ptr = 0; + return SWIG_OK; + } else { + SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj); + if (own) + *own = 0; + while (sobj) { + void *vptr = sobj->ptr; + if (ty) { + swig_type_info *to = sobj->ty; + if (to == ty) { + /* no type cast needed */ + if (ptr) *ptr = vptr; + break; + } else { + swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); + if (!tc) { + sobj = (SwigPyObject *)sobj->next; + } else { + if (ptr) { + int newmemory = 0; + *ptr = SWIG_TypeCast(tc,vptr,&newmemory); + if (newmemory == SWIG_CAST_NEW_MEMORY) { + assert(own); + if (own) + *own = *own | SWIG_CAST_NEW_MEMORY; + } + } + break; + } + } + } else { + if (ptr) *ptr = vptr; + break; + } + } + if (sobj) { + if (own) + *own = *own | sobj->own; + if (flags & SWIG_POINTER_DISOWN) { + sobj->own = 0; + } + return SWIG_OK; + } else { + int res = SWIG_ERROR; + if (flags & SWIG_POINTER_IMPLICIT_CONV) { + SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; + if (data && !data->implicitconv) { + PyObject *klass = data->klass; + if (klass) { + PyObject *impconv; + data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/ + impconv = SWIG_Python_CallFunctor(klass, obj); + data->implicitconv = 0; + if (PyErr_Occurred()) { + PyErr_Clear(); + impconv = 0; + } + if (impconv) { + SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv); + if (iobj) { + void *vptr; + res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0); + if (SWIG_IsOK(res)) { + if (ptr) { + *ptr = vptr; + /* transfer the ownership to 'ptr' */ + iobj->own = 0; + res = SWIG_AddCast(res); + res = SWIG_AddNewMask(res); + } else { + res = SWIG_AddCast(res); + } + } + } + Py_DECREF(impconv); + } + } + } + } + return res; + } + } +} + +/* Convert a function ptr value */ + +SWIGRUNTIME int +SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) { + if (!PyCFunction_Check(obj)) { + return SWIG_ConvertPtr(obj, ptr, ty, 0); + } else { + void *vptr = 0; + + /* here we get the method pointer for callbacks */ + const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc); + const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0; + if (desc) + desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0; + if (!desc) + return SWIG_ERROR; + if (ty) { + swig_cast_info *tc = SWIG_TypeCheck(desc,ty); + if (tc) { + int newmemory = 0; + *ptr = SWIG_TypeCast(tc,vptr,&newmemory); + assert(!newmemory); /* newmemory handling not yet implemented */ + } else { + return SWIG_ERROR; + } + } else { + *ptr = vptr; + } + return SWIG_OK; + } +} + +/* Convert a packed value value */ + +SWIGRUNTIME int +SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) { + swig_type_info *to = SwigPyPacked_UnpackData(obj, ptr, sz); + if (!to) return SWIG_ERROR; + if (ty) { + if (to != ty) { + /* check type cast? */ + swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); + if (!tc) return SWIG_ERROR; + } + } + return SWIG_OK; +} + +/* ----------------------------------------------------------------------------- + * Create a new pointer object + * ----------------------------------------------------------------------------- */ + +/* + Create a new instance object, without calling __init__, and set the + 'this' attribute. +*/ + +SWIGRUNTIME PyObject* +SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this) +{ +#if (PY_VERSION_HEX >= 0x02020000) + PyObject *inst = 0; + PyObject *newraw = data->newraw; + if (newraw) { + inst = PyObject_Call(newraw, data->newargs, NULL); + if (inst) { +#if !defined(SWIG_PYTHON_SLOW_GETSET_THIS) + PyObject **dictptr = _PyObject_GetDictPtr(inst); + if (dictptr != NULL) { + PyObject *dict = *dictptr; + if (dict == NULL) { + dict = PyDict_New(); + *dictptr = dict; + PyDict_SetItem(dict, SWIG_This(), swig_this); + } + } +#else + PyObject *key = SWIG_This(); + PyObject_SetAttr(inst, key, swig_this); +#endif + } + } else { +#if PY_VERSION_HEX >= 0x03000000 + inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None); + PyObject_SetAttr(inst, SWIG_This(), swig_this); + Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG; +#else + PyObject *dict = PyDict_New(); + PyDict_SetItem(dict, SWIG_This(), swig_this); + inst = PyInstance_NewRaw(data->newargs, dict); + Py_DECREF(dict); +#endif + } + return inst; +#else +#if (PY_VERSION_HEX >= 0x02010000) + PyObject *inst; + PyObject *dict = PyDict_New(); + PyDict_SetItem(dict, SWIG_This(), swig_this); + inst = PyInstance_NewRaw(data->newargs, dict); + Py_DECREF(dict); + return (PyObject *) inst; +#else + PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type); + if (inst == NULL) { + return NULL; + } + inst->in_class = (PyClassObject *)data->newargs; + Py_INCREF(inst->in_class); + inst->in_dict = PyDict_New(); + if (inst->in_dict == NULL) { + Py_DECREF(inst); + return NULL; + } +#ifdef Py_TPFLAGS_HAVE_WEAKREFS + inst->in_weakreflist = NULL; +#endif +#ifdef Py_TPFLAGS_GC + PyObject_GC_Init(inst); +#endif + PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this); + return (PyObject *) inst; +#endif +#endif +} + +SWIGRUNTIME void +SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this) +{ + PyObject *dict; +#if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS) + PyObject **dictptr = _PyObject_GetDictPtr(inst); + if (dictptr != NULL) { + dict = *dictptr; + if (dict == NULL) { + dict = PyDict_New(); + *dictptr = dict; + } + PyDict_SetItem(dict, SWIG_This(), swig_this); + return; + } +#endif + dict = PyObject_GetAttrString(inst, (char*)"__dict__"); + PyDict_SetItem(dict, SWIG_This(), swig_this); + Py_DECREF(dict); +} + + +SWIGINTERN PyObject * +SWIG_Python_InitShadowInstance(PyObject *args) { + PyObject *obj[2]; + if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) { + return NULL; + } else { + SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]); + if (sthis) { + SwigPyObject_append((PyObject*) sthis, obj[1]); + } else { + SWIG_Python_SetSwigThis(obj[0], obj[1]); + } + return SWIG_Py_Void(); + } +} + +/* Create a new pointer object */ + +SWIGRUNTIME PyObject * +SWIG_Python_NewPointerObj(void *ptr, swig_type_info *type, int flags) { + if (!ptr) { + return SWIG_Py_Void(); + } else { + int own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; + PyObject *robj = SwigPyObject_New(ptr, type, own); + SwigPyClientData *clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0; + if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) { + PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj); + if (inst) { + Py_DECREF(robj); + robj = inst; + } + } + return robj; + } +} + +/* Create a new packed object */ + +SWIGRUNTIMEINLINE PyObject * +SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { + return ptr ? SwigPyPacked_New((void *) ptr, sz, type) : SWIG_Py_Void(); +} + +/* -----------------------------------------------------------------------------* + * Get type list + * -----------------------------------------------------------------------------*/ + +#ifdef SWIG_LINK_RUNTIME +void *SWIG_ReturnGlobalTypeList(void *); +#endif + +SWIGRUNTIME swig_module_info * +SWIG_Python_GetModule(void) { + static void *type_pointer = (void *)0; + /* first check if module already created */ + if (!type_pointer) { +#ifdef SWIG_LINK_RUNTIME + type_pointer = SWIG_ReturnGlobalTypeList((void *)0); +#else + type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, + (char*)"type_pointer" SWIG_TYPE_TABLE_NAME); + if (PyErr_Occurred()) { + PyErr_Clear(); + type_pointer = (void *)0; + } +#endif + } + return (swig_module_info *) type_pointer; +} + +#if PY_MAJOR_VERSION < 2 +/* PyModule_AddObject function was introduced in Python 2.0. The following function + is copied out of Python/modsupport.c in python version 2.3.4 */ +SWIGINTERN int +PyModule_AddObject(PyObject *m, char *name, PyObject *o) +{ + PyObject *dict; + if (!PyModule_Check(m)) { + PyErr_SetString(PyExc_TypeError, + "PyModule_AddObject() needs module as first arg"); + return SWIG_ERROR; + } + if (!o) { + PyErr_SetString(PyExc_TypeError, + "PyModule_AddObject() needs non-NULL value"); + return SWIG_ERROR; + } + + dict = PyModule_GetDict(m); + if (dict == NULL) { + /* Internal error -- modules must have a dict! */ + PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__", + PyModule_GetName(m)); + return SWIG_ERROR; + } + if (PyDict_SetItemString(dict, name, o)) + return SWIG_ERROR; + Py_DECREF(o); + return SWIG_OK; +} +#endif + +SWIGRUNTIME void +SWIG_Python_DestroyModule(void *vptr) +{ + swig_module_info *swig_module = (swig_module_info *) vptr; + swig_type_info **types = swig_module->types; + size_t i; + for (i =0; i < swig_module->size; ++i) { + swig_type_info *ty = types[i]; + if (ty->owndata) { + SwigPyClientData *data = (SwigPyClientData *) ty->clientdata; + if (data) SwigPyClientData_Del(data); + } + } + Py_DECREF(SWIG_This()); +} + +SWIGRUNTIME void +SWIG_Python_SetModule(swig_module_info *swig_module) { + static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} };/* Sentinel */ + +#if PY_VERSION_HEX >= 0x03000000 + /* Add a dummy module object into sys.modules */ + PyObject *module = PyImport_AddModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION); +#else + PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, + swig_empty_runtime_method_table); +#endif + PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule); + if (pointer && module) { + PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer); + } else { + Py_XDECREF(pointer); + } +} + +/* The python cached type query */ +SWIGRUNTIME PyObject * +SWIG_Python_TypeCache(void) { + static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New(); + return cache; +} + +SWIGRUNTIME swig_type_info * +SWIG_Python_TypeQuery(const char *type) +{ + PyObject *cache = SWIG_Python_TypeCache(); + PyObject *key = SWIG_Python_str_FromChar(type); + PyObject *obj = PyDict_GetItem(cache, key); + swig_type_info *descriptor; + if (obj) { + descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj); + } else { + swig_module_info *swig_module = SWIG_Python_GetModule(); + descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type); + if (descriptor) { + obj = PyCObject_FromVoidPtr(descriptor, NULL); + PyDict_SetItem(cache, key, obj); + Py_DECREF(obj); + } + } + Py_DECREF(key); + return descriptor; +} + +/* + For backward compatibility only +*/ +#define SWIG_POINTER_EXCEPTION 0 +#define SWIG_arg_fail(arg) SWIG_Python_ArgFail(arg) +#define SWIG_MustGetPtr(p, type, argnum, flags) SWIG_Python_MustGetPtr(p, type, argnum, flags) + +SWIGRUNTIME int +SWIG_Python_AddErrMesg(const char* mesg, int infront) +{ + if (PyErr_Occurred()) { + PyObject *type = 0; + PyObject *value = 0; + PyObject *traceback = 0; + PyErr_Fetch(&type, &value, &traceback); + if (value) { + char *tmp; + PyObject *old_str = PyObject_Str(value); + Py_XINCREF(type); + PyErr_Clear(); + if (infront) { + PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str)); + } else { + PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); + } + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(old_str); + } + return 1; + } else { + return 0; + } +} + +SWIGRUNTIME int +SWIG_Python_ArgFail(int argnum) +{ + if (PyErr_Occurred()) { + /* add information about failing argument */ + char mesg[256]; + PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum); + return SWIG_Python_AddErrMesg(mesg, 1); + } else { + return 0; + } +} + +SWIGRUNTIMEINLINE const char * +SwigPyObject_GetDesc(PyObject *self) +{ + SwigPyObject *v = (SwigPyObject *)self; + swig_type_info *ty = v ? v->ty : 0; + return ty ? ty->str : (char*)""; +} + +SWIGRUNTIME void +SWIG_Python_TypeError(const char *type, PyObject *obj) +{ + if (type) { +#if defined(SWIG_COBJECT_TYPES) + if (obj && SwigPyObject_Check(obj)) { + const char *otype = (const char *) SwigPyObject_GetDesc(obj); + if (otype) { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'SwigPyObject(%s)' is received", + type, otype); + return; + } + } else +#endif + { + const char *otype = (obj ? obj->ob_type->tp_name : 0); + if (otype) { + PyObject *str = PyObject_Str(obj); + const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0; + if (cstr) { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received", + type, otype, cstr); + SWIG_Python_str_DelForPy3(cstr); + } else { + PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received", + type, otype); + } + Py_XDECREF(str); + return; + } + } + PyErr_Format(PyExc_TypeError, "a '%s' is expected", type); + } else { + PyErr_Format(PyExc_TypeError, "unexpected type is received"); + } +} + + +/* Convert a pointer value, signal an exception on a type mismatch */ +SWIGRUNTIME void * +SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags) { + void *result; + if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) { + PyErr_Clear(); +#if SWIG_POINTER_EXCEPTION + if (flags) { + SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj); + SWIG_Python_ArgFail(argnum); + } +#endif + } + return result; +} + + +#ifdef __cplusplus +#if 0 +{ /* cc-mode */ +#endif +} +#endif + + + +#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) + +#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else + + + +/* -------- TYPES TABLE (BEGIN) -------- */ + +#define SWIGTYPE_p_FILE swig_types[0] +#define SWIGTYPE_p_char swig_types[1] +#define SWIGTYPE_p_double swig_types[2] +#define SWIGTYPE_p_doublep swig_types[3] +#define SWIGTYPE_p_int swig_types[4] +#define SWIGTYPE_p_intp swig_types[5] +#define SWIGTYPE_p_long swig_types[6] +#define SWIGTYPE_p_longp swig_types[7] +#define SWIGTYPE_p_p_void swig_types[8] +#define SWIGTYPE_p_size_t swig_types[9] +static swig_type_info *swig_types[11]; +static swig_module_info swig_module = {swig_types, 10, 0, 0, 0, 0}; +#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) +#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) + +/* -------- TYPES TABLE (END) -------- */ + +#if (PY_VERSION_HEX <= 0x02000000) +# if !defined(SWIG_PYTHON_CLASSIC) +# error "This python version requires swig to be run with the '-classic' option" +# endif +#endif + +/*----------------------------------------------- + @(target):= _gribapi_swig.so + ------------------------------------------------*/ +#if PY_VERSION_HEX >= 0x03000000 +# define SWIG_init PyInit__gribapi_swig + +#else +# define SWIG_init init_gribapi_swig + +#endif +#define SWIG_name "_gribapi_swig" + +#define SWIGVERSION 0x010340 +#define SWIG_VERSION SWIGVERSION + + +#define SWIG_as_voidptr(a) (void *)((const void *)(a)) +#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),(void**)(a)) + + +typedef struct SWIGCDATA { + char *data; + size_t len; +} SWIGCDATA; + + + + + + +static SWIGCDATA cdata_void(void *ptr, size_t nelements) + + + +{ + SWIGCDATA d; + d.data = (char *) ptr; + + + + d.len = nelements; + + return d; +} + + + + + +SWIGINTERN int +SWIG_AsVal_double (PyObject *obj, double *val) +{ + int res = SWIG_TypeError; + if (PyFloat_Check(obj)) { + if (val) *val = PyFloat_AsDouble(obj); + return SWIG_OK; + } else if (PyInt_Check(obj)) { + if (val) *val = PyInt_AsLong(obj); + return SWIG_OK; + } else if (PyLong_Check(obj)) { + double v = PyLong_AsDouble(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + double d = PyFloat_AsDouble(obj); + if (!PyErr_Occurred()) { + if (val) *val = d; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + long v = PyLong_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_AddCast(SWIG_OK)); + } else { + PyErr_Clear(); + } + } + } +#endif + return res; +} + + +#include + + +#include + + +SWIGINTERNINLINE int +SWIG_CanCastAsInteger(double *d, double min, double max) { + double x = *d; + if ((min <= x && x <= max)) { + double fx = floor(x); + double cx = ceil(x); + double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */ + if ((errno == EDOM) || (errno == ERANGE)) { + errno = 0; + } else { + double summ, reps, diff; + if (rd < x) { + diff = x - rd; + } else if (rd > x) { + diff = rd - x; + } else { + return 1; + } + summ = rd + x; + reps = diff/summ; + if (reps < 8*DBL_EPSILON) { + *d = rd; + return 1; + } + } + } + return 0; +} + + +SWIGINTERN int +SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) +{ + if (PyInt_Check(obj)) { + long v = PyInt_AsLong(obj); + if (v >= 0) { + if (val) *val = v; + return SWIG_OK; + } else { + return SWIG_OverflowError; + } + } else if (PyLong_Check(obj)) { + unsigned long v = PyLong_AsUnsignedLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + unsigned long v = PyLong_AsUnsignedLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + double d; + int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); + if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) { + if (val) *val = (unsigned long)(d); + return res; + } + } + } +#endif + return SWIG_TypeError; +} + + +SWIGINTERNINLINE int +SWIG_AsVal_size_t (PyObject * obj, size_t *val) +{ + unsigned long v; + int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0); + if (SWIG_IsOK(res) && val) *val = (size_t)(v); + return res; +} + + +SWIGINTERN swig_type_info* +SWIG_pchar_descriptor(void) +{ + static int init = 0; + static swig_type_info* info = 0; + if (!init) { + info = SWIG_TypeQuery("_p_char"); + init = 1; + } + return info; +} + + +SWIGINTERNINLINE PyObject * +SWIG_FromCharPtrAndSize(const char* carray, size_t size) +{ + if (carray) { + if (size > INT_MAX) { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + return pchar_descriptor ? + SWIG_NewPointerObj((char *)(carray), pchar_descriptor, 0) : SWIG_Py_Void(); + } else { +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_FromStringAndSize(carray, (int)(size)); +#else + return PyString_FromStringAndSize(carray, (int)(size)); +#endif + } + } else { + return SWIG_Py_Void(); + } +} + + + #define SWIG_From_long PyInt_FromLong + + +SWIGINTERNINLINE PyObject * +SWIG_From_int (int value) +{ + return SWIG_From_long (value); +} + + +#define SWIG_FILE_WITH_INIT +#include "grib_interface.h" + + +#ifndef SWIG_FILE_WITH_INIT +# define NO_IMPORT_ARRAY +#endif +#include "stdio.h" +#include + + +typedef int intp; + +SWIGINTERN intp *new_intp(){ + return (int *)malloc(sizeof(int)); + } +SWIGINTERN void delete_intp(intp *self){ + if (self) free((char*)self); + } + +#include +#if !defined(SWIG_NO_LLONG_MAX) +# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) +# define LLONG_MAX __LONG_LONG_MAX__ +# define LLONG_MIN (-LLONG_MAX - 1LL) +# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) +# endif +#endif + + +SWIGINTERN int +SWIG_AsVal_long (PyObject *obj, long* val) +{ + if (PyInt_Check(obj)) { + if (val) *val = PyInt_AsLong(obj); + return SWIG_OK; + } else if (PyLong_Check(obj)) { + long v = PyLong_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_OK; + } else { + PyErr_Clear(); + } + } +#ifdef SWIG_PYTHON_CAST_MODE + { + int dispatch = 0; + long v = PyInt_AsLong(obj); + if (!PyErr_Occurred()) { + if (val) *val = v; + return SWIG_AddCast(SWIG_OK); + } else { + PyErr_Clear(); + } + if (!dispatch) { + double d; + int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); + if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) { + if (val) *val = (long)(d); + return res; + } + } + } +#endif + return SWIG_TypeError; +} + + +SWIGINTERN int +SWIG_AsVal_int (PyObject * obj, int *val) +{ + long v; + int res = SWIG_AsVal_long (obj, &v); + if (SWIG_IsOK(res)) { + if ((v < INT_MIN || v > INT_MAX)) { + return SWIG_OverflowError; + } else { + if (val) *val = (int)(v); + } + } + return res; +} + +SWIGINTERN void intp_assign(intp *self,int value){ + *self = value; + } +SWIGINTERN int intp_value(intp *self){ + return *self; + } +SWIGINTERN int *intp_cast(intp *self){ + return self; + } +SWIGINTERN intp *intp_frompointer(int *t){ + return (intp *) t; + } + +typedef long longp; + +SWIGINTERN longp *new_longp(){ + return (long *)malloc(sizeof(long)); + } +SWIGINTERN void delete_longp(longp *self){ + if (self) free((char*)self); + } +SWIGINTERN void longp_assign(longp *self,long value){ + *self = value; + } +SWIGINTERN long longp_value(longp *self){ + return *self; + } +SWIGINTERN long *longp_cast(longp *self){ + return self; + } +SWIGINTERN longp *longp_frompointer(long *t){ + return (longp *) t; + } + +typedef double doublep; + +SWIGINTERN doublep *new_doublep(){ + return (double *)malloc(sizeof(double)); + } +SWIGINTERN void delete_doublep(doublep *self){ + if (self) free((char*)self); + } +SWIGINTERN void doublep_assign(doublep *self,double value){ + *self = value; + } +SWIGINTERN double doublep_value(doublep *self){ + return *self; + } + + #define SWIG_From_double PyFloat_FromDouble + +SWIGINTERN double *doublep_cast(doublep *self){ + return self; + } +SWIGINTERN doublep *doublep_frompointer(double *t){ + return (doublep *) t; + } + + static double *new_doubleArray(size_t nelements) { + return (double *)malloc((nelements)*sizeof(double)); + } + + static void delete_doubleArray(double *ary) { + free((char*)ary); + } + + static double doubleArray_getitem(double *ary, size_t index) { + return ary[index]; + } + static void doubleArray_setitem(double *ary, size_t index, double value) { + ary[index] = value; + } + + + static long *new_longArray(size_t nelements) { + return (long *)malloc((nelements)*sizeof(long)); + } + + static void delete_longArray(long *ary) { + free((char*)ary); + } + + static long longArray_getitem(long *ary, size_t index) { + return ary[index]; + } + static void longArray_setitem(long *ary, size_t index, long value) { + ary[index] = value; + } + + + static int *new_intArray(size_t nelements) { + return (int *)malloc((nelements)*sizeof(int)); + } + + static void delete_intArray(int *ary) { + free((char*)ary); + } + + static int intArray_getitem(int *ary, size_t index) { + return ary[index]; + } + static void intArray_setitem(int *ary, size_t index, int value) { + ary[index] = value; + } + + +SWIGINTERN int +SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) +{ +#if PY_VERSION_HEX>=0x03000000 + if (PyUnicode_Check(obj)) +#else + if (PyString_Check(obj)) +#endif + { + char *cstr; Py_ssize_t len; +#if PY_VERSION_HEX>=0x03000000 + if (!alloc && cptr) { + /* We can't allow converting without allocation, since the internal + representation of string in Python 3 is UCS-2/UCS-4 but we require + a UTF-8 representation. + TODO(bhy) More detailed explanation */ + return SWIG_RuntimeError; + } + obj = PyUnicode_AsUTF8String(obj); + PyBytes_AsStringAndSize(obj, &cstr, &len); + if(alloc) *alloc = SWIG_NEWOBJ; +#else + PyString_AsStringAndSize(obj, &cstr, &len); +#endif + if (cptr) { + if (alloc) { + /* + In python the user should not be able to modify the inner + string representation. To warranty that, if you define + SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string + buffer is always returned. + + The default behavior is just to return the pointer value, + so, be careful. + */ +#if defined(SWIG_PYTHON_SAFE_CSTRINGS) + if (*alloc != SWIG_OLDOBJ) +#else + if (*alloc == SWIG_NEWOBJ) +#endif + { + *cptr = (char *)memcpy((char *)malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); + *alloc = SWIG_NEWOBJ; + } + else { + *cptr = cstr; + *alloc = SWIG_OLDOBJ; + } + } else { + #if PY_VERSION_HEX>=0x03000000 + assert(0); /* Should never reach here in Python 3 */ + #endif + *cptr = SWIG_Python_str_AsChar(obj); + } + } + if (psize) *psize = len + 1; +#if PY_VERSION_HEX>=0x03000000 + Py_XDECREF(obj); +#endif + return SWIG_OK; + } else { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + if (pchar_descriptor) { + void* vptr = 0; + if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { + if (cptr) *cptr = (char *) vptr; + if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; + if (alloc) *alloc = SWIG_OLDOBJ; + return SWIG_OK; + } + } + } + return SWIG_TypeError; +} + + + + + +SWIGINTERNINLINE PyObject* +SWIG_From_unsigned_SS_long (unsigned long value) +{ + return (value > LONG_MAX) ? + PyLong_FromUnsignedLong(value) : PyInt_FromLong((long)(value)); +} + + +SWIGINTERNINLINE PyObject * +SWIG_From_size_t (size_t value) +{ + return SWIG_From_unsigned_SS_long ((unsigned long)(value)); +} + + +SWIGINTERNINLINE PyObject * +SWIG_FromCharPtr(const char *cptr) +{ + return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0)); +} + + +void with_numpy() { + return; +} +int grib_set_double_ndarray(int* gid, char* key, double* dpin_val, int dpin_val_dim1) { + return grib_c_set_real8_array(gid,key,dpin_val,&dpin_val_dim1); +} +int grib_set_long_ndarray(int* gid, char* key, long* lpin_val, int lpin_val_dim1) { + return grib_c_set_long_array(gid,key,lpin_val,&lpin_val_dim1); +} +int grib_get_double_ndarray(int* gid, char* key, double* dpout_val, int dpout_val_dim1) { + return grib_c_get_real8_array(gid,key,dpout_val,&dpout_val_dim1); +} +int grib_get_long_ndarray(int* gid, char* key, long* lpout_val, int lpout_val_dim1) { + return grib_c_get_long_array(gid,key,lpout_val,&lpout_val_dim1); +} +int grib_get_double_ndelements(int* gid, char* key, int* ipin_index, int ipin_index_dim1, double* dpout_val, int dpout_val_dim1) { + return grib_c_get_real8_elements(gid,key,ipin_index,dpout_val,&dpout_val_dim1); +} + + +/* Support older NumPy data type names +*/ +#if NDARRAY_VERSION < 0x01000000 +#define NPY_BOOL PyArray_BOOL +#define NPY_BYTE PyArray_BYTE +#define NPY_UBYTE PyArray_UBYTE +#define NPY_SHORT PyArray_SHORT +#define NPY_USHORT PyArray_USHORT +#define NPY_INT PyArray_INT +#define NPY_UINT PyArray_UINT +#define NPY_LONG PyArray_LONG +#define NPY_ULONG PyArray_ULONG +#define NPY_LONGLONG PyArray_LONGLONG +#define NPY_ULONGLONG PyArray_ULONGLONG +#define NPY_FLOAT PyArray_FLOAT +#define NPY_DOUBLE PyArray_DOUBLE +#define NPY_LONGDOUBLE PyArray_LONGDOUBLE +#define NPY_CFLOAT PyArray_CFLOAT +#define NPY_CDOUBLE PyArray_CDOUBLE +#define NPY_CLONGDOUBLE PyArray_CLONGDOUBLE +#define NPY_OBJECT PyArray_OBJECT +#define NPY_STRING PyArray_STRING +#define NPY_UNICODE PyArray_UNICODE +#define NPY_VOID PyArray_VOID +#define NPY_NTYPES PyArray_NTYPES +#define NPY_NOTYPE PyArray_NOTYPE +#define NPY_CHAR PyArray_CHAR +#define NPY_USERDEF PyArray_USERDEF +#define npy_intp intp + +#define NPY_MAX_BYTE MAX_BYTE +#define NPY_MIN_BYTE MIN_BYTE +#define NPY_MAX_UBYTE MAX_UBYTE +#define NPY_MAX_SHORT MAX_SHORT +#define NPY_MIN_SHORT MIN_SHORT +#define NPY_MAX_USHORT MAX_USHORT +#define NPY_MAX_INT MAX_INT +#define NPY_MIN_INT MIN_INT +#define NPY_MAX_UINT MAX_UINT +#define NPY_MAX_LONG MAX_LONG +#define NPY_MIN_LONG MIN_LONG +#define NPY_MAX_ULONG MAX_ULONG +#define NPY_MAX_LONGLONG MAX_LONGLONG +#define NPY_MIN_LONGLONG MIN_LONGLONG +#define NPY_MAX_ULONGLONG MAX_ULONGLONG +#define NPY_MAX_INTP MAX_INTP +#define NPY_MIN_INTP MIN_INTP + +#define NPY_FARRAY FARRAY +#define NPY_F_CONTIGUOUS F_CONTIGUOUS +#endif + + +/* Macros to extract array attributes. + */ +#define is_array(a) ((a) && PyArray_Check((PyArrayObject *)a)) +#define array_type(a) (int)(PyArray_TYPE(a)) +#define array_numdims(a) (((PyArrayObject *)a)->nd) +#define array_dimensions(a) (((PyArrayObject *)a)->dimensions) +#define array_size(a,i) (((PyArrayObject *)a)->dimensions[i]) +#define array_data(a) (((PyArrayObject *)a)->data) +#define array_is_contiguous(a) (PyArray_ISCONTIGUOUS(a)) +#define array_is_native(a) (PyArray_ISNOTSWAPPED(a)) +#define array_is_fortran(a) (PyArray_ISFORTRAN(a)) + + + /* Given a PyObject, return a string describing its type. + */ + const char* pytype_string(PyObject* py_obj) { + if (py_obj == NULL ) return "C NULL value"; + if (py_obj == Py_None ) return "Python None" ; + if (PyCallable_Check(py_obj)) return "callable" ; + if (PyString_Check( py_obj)) return "string" ; + if (PyInt_Check( py_obj)) return "int" ; + if (PyFloat_Check( py_obj)) return "float" ; + if (PyDict_Check( py_obj)) return "dict" ; + if (PyList_Check( py_obj)) return "list" ; + if (PyTuple_Check( py_obj)) return "tuple" ; + if (PyFile_Check( py_obj)) return "file" ; + if (PyModule_Check( py_obj)) return "module" ; + if (PyInstance_Check(py_obj)) return "instance" ; + + return "unkown type"; + } + + /* Given a NumPy typecode, return a string describing the type. + */ + const char* typecode_string(int typecode) { + static const char* type_names[25] = {"bool", "byte", "unsigned byte", + "short", "unsigned short", "int", + "unsigned int", "long", "unsigned long", + "long long", "unsigned long long", + "float", "double", "long double", + "complex float", "complex double", + "complex long double", "object", + "string", "unicode", "void", "ntypes", + "notype", "char", "unknown"}; + return typecode < 24 ? type_names[typecode] : type_names[24]; + } + + /* Make sure input has correct numpy type. Allow character and byte + * to match. Also allow int and long to match. This is deprecated. + * You should use PyArray_EquivTypenums() instead. + */ + int type_match(int actual_type, int desired_type) { + return PyArray_EquivTypenums(actual_type, desired_type); + } + + + /* Given a PyObject pointer, cast it to a PyArrayObject pointer if + * legal. If not, set the python error string appropriately and + * return NULL. + */ + PyArrayObject* obj_to_array_no_conversion(PyObject* input, int typecode) + { + PyArrayObject* ary = NULL; + if (is_array(input) && (typecode == NPY_NOTYPE || + PyArray_EquivTypenums(array_type(input), typecode))) + { + ary = (PyArrayObject*) input; + } + else if is_array(input) + { + const char* desired_type = typecode_string(typecode); + const char* actual_type = typecode_string(array_type(input)); + PyErr_Format(PyExc_TypeError, + "Array of type '%s' required. Array of type '%s' given", + desired_type, actual_type); + ary = NULL; + } + else + { + const char * desired_type = typecode_string(typecode); + const char * actual_type = pytype_string(input); + PyErr_Format(PyExc_TypeError, + "Array of type '%s' required. A '%s' was given", + desired_type, actual_type); + ary = NULL; + } + return ary; + } + + /* Convert the given PyObject to a NumPy array with the given + * typecode. On success, return a valid PyArrayObject* with the + * correct type. On failure, the python error string will be set and + * the routine returns NULL. + */ + PyArrayObject* obj_to_array_allow_conversion(PyObject* input, int typecode, + int* is_new_object) + { + PyArrayObject* ary = NULL; + PyObject* py_obj; + if (is_array(input) && (typecode == NPY_NOTYPE || + PyArray_EquivTypenums(array_type(input),typecode))) + { + ary = (PyArrayObject*) input; + *is_new_object = 0; + } + else + { + py_obj = PyArray_FROMANY(input, typecode, 0, 0, NPY_DEFAULT); + /* If NULL, PyArray_FromObject will have set python error value.*/ + ary = (PyArrayObject*) py_obj; + *is_new_object = 1; + } + return ary; + } + + /* Given a PyArrayObject, check to see if it is contiguous. If so, + * return the input pointer and flag it as not a new object. If it is + * not contiguous, create a new PyArrayObject using the original data, + * flag it as a new object and return the pointer. + */ + PyArrayObject* make_contiguous(PyArrayObject* ary, int* is_new_object, + int min_dims, int max_dims) + { + PyArrayObject* result; + if (array_is_contiguous(ary)) + { + result = ary; + *is_new_object = 0; + } + else + { + result = (PyArrayObject*) PyArray_ContiguousFromObject((PyObject*)ary, + array_type(ary), + min_dims, + max_dims); + *is_new_object = 1; + } + return result; + } + + /* Given a PyArrayObject, check to see if it is Fortran-contiguous. + * If so, return the input pointer, but do not flag it as not a new + * object. If it is not Fortran-contiguous, create a new + * PyArrayObject using the original data, flag it as a new object + * and return the pointer. + */ + PyArrayObject* make_fortran(PyArrayObject* ary, int* is_new_object, + int min_dims, int max_dims) + { + PyArrayObject* result; + if (array_is_fortran(ary)) + { + result = ary; + *is_new_object = 0; + } + else + { + Py_INCREF(ary->descr); + result = (PyArrayObject*) PyArray_FromArray(ary, ary->descr, NPY_FORTRAN); + *is_new_object = 1; + } + return result; + } + + /* Convert a given PyObject to a contiguous PyArrayObject of the + * specified type. If the input object is not a contiguous + * PyArrayObject, a new one will be created and the new object flag + * will be set. + */ + PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input, + int typecode, + int* is_new_object) + { + int is_new1 = 0; + int is_new2 = 0; + PyArrayObject* ary2; + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode, + &is_new1); + if (ary1) + { + ary2 = make_contiguous(ary1, &is_new2, 0, 0); + if ( is_new1 && is_new2) + { + Py_DECREF(ary1); + } + ary1 = ary2; + } + *is_new_object = is_new1 || is_new2; + return ary1; + } + + /* Convert a given PyObject to a Fortran-ordered PyArrayObject of the + * specified type. If the input object is not a Fortran-ordered + * PyArrayObject, a new one will be created and the new object flag + * will be set. + */ + PyArrayObject* obj_to_array_fortran_allow_conversion(PyObject* input, + int typecode, + int* is_new_object) + { + int is_new1 = 0; + int is_new2 = 0; + PyArrayObject* ary2; + PyArrayObject* ary1 = obj_to_array_allow_conversion(input, typecode, + &is_new1); + if (ary1) + { + ary2 = make_fortran(ary1, &is_new2, 0, 0); + if (is_new1 && is_new2) + { + Py_DECREF(ary1); + } + ary1 = ary2; + } + *is_new_object = is_new1 || is_new2; + return ary1; + } + + + + /* Test whether a python object is contiguous. If array is + * contiguous, return 1. Otherwise, set the python error string and + * return 0. + */ + int require_contiguous(PyArrayObject* ary) + { + int contiguous = 1; + if (!array_is_contiguous(ary)) + { + PyErr_SetString(PyExc_TypeError, + "Array must be contiguous. A non-contiguous array was given"); + contiguous = 0; + } + return contiguous; + } + + /* Require that a numpy array is not byte-swapped. If the array is + * not byte-swapped, return 1. Otherwise, set the python error string + * and return 0. + */ + int require_native(PyArrayObject* ary) + { + int native = 1; + if (!array_is_native(ary)) + { + PyErr_SetString(PyExc_TypeError, + "Array must have native byteorder. " + "A byte-swapped array was given"); + native = 0; + } + return native; + } + + /* Require the given PyArrayObject to have a specified number of + * dimensions. If the array has the specified number of dimensions, + * return 1. Otherwise, set the python error string and return 0. + */ + int require_dimensions(PyArrayObject* ary, int exact_dimensions) + { + int success = 1; + if (array_numdims(ary) != exact_dimensions) + { + PyErr_Format(PyExc_TypeError, + "Array must have %d dimensions. Given array has %d dimensions", + exact_dimensions, array_numdims(ary)); + success = 0; + } + return success; + } + + /* Require the given PyArrayObject to have one of a list of specified + * number of dimensions. If the array has one of the specified number + * of dimensions, return 1. Otherwise, set the python error string + * and return 0. + */ + int require_dimensions_n(PyArrayObject* ary, int* exact_dimensions, int n) + { + int success = 0; + int i; + char dims_str[255] = ""; + char s[255]; + for (i = 0; i < n && !success; i++) + { + if (array_numdims(ary) == exact_dimensions[i]) + { + success = 1; + } + } + if (!success) + { + for (i = 0; i < n-1; i++) + { + sprintf(s, "%d, ", exact_dimensions[i]); + strcat(dims_str,s); + } + sprintf(s, " or %d", exact_dimensions[n-1]); + strcat(dims_str,s); + PyErr_Format(PyExc_TypeError, + "Array must have %s dimensions. Given array has %d dimensions", + dims_str, array_numdims(ary)); + } + return success; + } + + /* Require the given PyArrayObject to have a specified shape. If the + * array has the specified shape, return 1. Otherwise, set the python + * error string and return 0. + */ + int require_size(PyArrayObject* ary, npy_intp* size, int n) + { + int i; + int success = 1; + int len; + char desired_dims[255] = "["; + char s[255]; + char actual_dims[255] = "["; + for(i=0; i < n;i++) + { + if (size[i] != -1 && size[i] != array_size(ary,i)) + { + success = 0; + } + } + if (!success) + { + for (i = 0; i < n; i++) + { + if (size[i] == -1) + { + sprintf(s, "*,"); + } + else + { + sprintf(s, "%ld,", (long int)size[i]); + } + strcat(desired_dims,s); + } + len = strlen(desired_dims); + desired_dims[len-1] = ']'; + for (i = 0; i < n; i++) + { + sprintf(s, "%ld,", (long int)array_size(ary,i)); + strcat(actual_dims,s); + } + len = strlen(actual_dims); + actual_dims[len-1] = ']'; + PyErr_Format(PyExc_TypeError, + "Array must have shape of %s. Given array has shape of %s", + desired_dims, actual_dims); + } + return success; + } + + /* Require the given PyArrayObject to to be FORTRAN ordered. If the + * the PyArrayObject is already FORTRAN ordered, do nothing. Else, + * set the FORTRAN ordering flag and recompute the strides. + */ + int require_fortran(PyArrayObject* ary) + { + int success = 1; + int nd = array_numdims(ary); + int i; + if (array_is_fortran(ary)) return success; + /* Set the FORTRAN ordered flag */ + ary->flags = NPY_FARRAY; + /* Recompute the strides */ + ary->strides[0] = ary->strides[nd-1]; + for (i=1; i < nd; ++i) + ary->strides[i] = ary->strides[i-1] * array_size(ary,i-1); + return success; + } + + +#ifdef __cplusplus +extern "C" { +#endif +SWIGINTERN PyObject *_wrap_cdata(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + void *arg1 = (void *) 0 ; + size_t arg2 = (size_t) 1 ; + int res1 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + SWIGCDATA result; + + if (!PyArg_ParseTuple(args,(char *)"O|O:cdata",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "cdata" "', argument " "1"" of type '" "void *""'"); + } + if (obj1) { + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "cdata" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + } + result = cdata_void(arg1,arg2); + resultobj = SWIG_FromCharPtrAndSize((&result)->data,(&result)->len); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_memmove(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + void *arg1 = (void *) 0 ; + void *arg2 = (void *) 0 ; + size_t arg3 ; + int res1 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:memmove",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1), 0, 0); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "memmove" "', argument " "1"" of type '" "void *""'"); + } + res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2), 0, 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "memmove" "', argument " "2"" of type '" "void const *""'"); + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "memmove" "', argument " "3"" of type '" "size_t""'"); + } + arg3 = (size_t)(val3); + memmove(arg1,(void const *)arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_intp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_intp")) SWIG_fail; + result = (intp *)new_intp(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_intp, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_intp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_intp",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_intp" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + delete_intp(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + int arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intp_assign",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_assign" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intp_assign" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + intp_assign(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:intp_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_value" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + result = (int)intp_value(arg1); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + intp *arg1 = (intp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:intp_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_intp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_cast" "', argument " "1"" of type '" "intp *""'"); + } + arg1 = (intp *)(argp1); + result = (int *)intp_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intp_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + intp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:intp_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intp_frompointer" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + result = (intp *)intp_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_intp, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *intp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_intp, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_longp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_longp")) SWIG_fail; + result = (longp *)new_longp(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_longp, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_longp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_longp",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_longp" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + delete_longp(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + long arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + long val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:longp_assign",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_assign" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + ecode2 = SWIG_AsVal_long(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "longp_assign" "', argument " "2"" of type '" "long""'"); + } + arg2 = (long)(val2); + longp_assign(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + long result; + + if (!PyArg_ParseTuple(args,(char *)"O:longp_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_value" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + result = (long)longp_value(arg1); + resultobj = SWIG_From_long((long)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + longp *arg1 = (longp *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + long *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:longp_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_longp, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_cast" "', argument " "1"" of type '" "longp *""'"); + } + arg1 = (longp *)(argp1); + result = (long *)longp_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_long, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longp_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + longp *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:longp_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longp_frompointer" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + result = (longp *)longp_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_longp, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *longp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_longp, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_doublep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_doublep")) SWIG_fail; + result = (doublep *)new_doublep(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_doublep, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_doublep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_doublep",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_doublep" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + delete_doublep(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + double arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + double val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:doublep_assign",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_assign" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + ecode2 = SWIG_AsVal_double(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "doublep_assign" "', argument " "2"" of type '" "double""'"); + } + arg2 = (double)(val2); + doublep_assign(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + double result; + + if (!PyArg_ParseTuple(args,(char *)"O:doublep_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_value" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + result = (double)doublep_value(arg1); + resultobj = SWIG_From_double((double)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + doublep *arg1 = (doublep *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + double *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:doublep_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_doublep, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_cast" "', argument " "1"" of type '" "doublep *""'"); + } + arg1 = (doublep *)(argp1); + result = (double *)doublep_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_double, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doublep_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + doublep *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:doublep_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doublep_frompointer" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + result = (doublep *)doublep_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_doublep, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *doublep_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_doublep, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_doubleArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + double *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_doubleArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_doubleArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = (size_t)(val1); + result = (double *)new_doubleArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_double, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_doubleArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_doubleArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_doubleArray" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + delete_doubleArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doubleArray_getitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + double result; + + if (!PyArg_ParseTuple(args,(char *)"OO:doubleArray_getitem",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doubleArray_getitem" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "doubleArray_getitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + result = (double)doubleArray_getitem(arg1,arg2); + resultobj = SWIG_From_double((double)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_doubleArray_setitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + double *arg1 = (double *) 0 ; + size_t arg2 ; + double arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + double val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:doubleArray_setitem",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "doubleArray_setitem" "', argument " "1"" of type '" "double *""'"); + } + arg1 = (double *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "doubleArray_setitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + ecode3 = SWIG_AsVal_double(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "doubleArray_setitem" "', argument " "3"" of type '" "double""'"); + } + arg3 = (double)(val3); + doubleArray_setitem(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_longArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + long *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_longArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_longArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = (size_t)(val1); + result = (long *)new_longArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_long, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_longArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_longArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_longArray" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + delete_longArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longArray_getitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + long result; + + if (!PyArg_ParseTuple(args,(char *)"OO:longArray_getitem",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longArray_getitem" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "longArray_getitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + result = (long)longArray_getitem(arg1,arg2); + resultobj = SWIG_From_long((long)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_longArray_setitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long *arg1 = (long *) 0 ; + size_t arg2 ; + long arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + long val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:longArray_setitem",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "longArray_setitem" "', argument " "1"" of type '" "long *""'"); + } + arg1 = (long *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "longArray_setitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + ecode3 = SWIG_AsVal_long(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "longArray_setitem" "', argument " "3"" of type '" "long""'"); + } + arg3 = (long)(val3); + longArray_setitem(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_intArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + int *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_intArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_intArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = (size_t)(val1); + result = (int *)new_intArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_int, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_intArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_intArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_intArray" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + delete_intArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intArray_getitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:intArray_getitem",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intArray_getitem" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intArray_getitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + result = (int)intArray_getitem(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intArray_setitem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + size_t arg2 ; + int arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intArray_setitem",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intArray_setitem" "', argument " "1"" of type '" "int *""'"); + } + arg1 = (int *)(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intArray_setitem" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = (size_t)(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intArray_setitem" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + intArray_setitem(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int *arg2 = (int *) 0 ; + int arg3 ; + int temp2 ; + int res2 = 0 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_from_file",&obj0,&obj1,&obj2)) SWIG_fail; + { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_file" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "grib_c_new_from_file" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + result = (int)grib_c_new_from_file(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_bufr_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int *arg2 = (int *) 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_new_bufr_from_file",&obj0,&obj1)) SWIG_fail; + { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_bufr_from_file" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_bufr_from_file(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_gts_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int *arg2 = (int *) 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_new_gts_from_file",&obj0,&obj1)) SWIG_fail; + { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_gts_from_file" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_gts_from_file(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_iterator_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_iterator_new",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_new" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_new" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_iterator_new(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + char *arg3 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_keys_iterator_new",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_new" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res3 = SWIG_AsCharPtrAndSize(obj1, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_keys_iterator_new" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + result = (int)grib_c_keys_iterator_new(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_samples(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_new_from_samples",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_samples" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_new_from_samples" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_new_from_samples(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res1)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1))); + } else { + int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags)); + } + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_new_from_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int res1 ; + char *buf1 = 0 ; + int alloc1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_new_from_file",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "grib_c_index_new_from_file" "', argument " "1"" of type '" "char *""'"); + } + arg1 = (char *)(buf1); + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_new_from_file" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_new_from_file(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_add_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_add_file",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_add_file" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_add_file" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_add_file(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_index(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_new_from_index",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_index" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_index" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_from_index(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_write",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_write" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_write" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_write(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_read(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + char *arg1 = (char *) 0 ; + int *arg2 = (int *) 0 ; + int res1 ; + char *buf1 = 0 ; + int alloc1 = 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_index_read",&obj0)) SWIG_fail; + res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "grib_c_index_read" "', argument " "1"" of type '" "char *""'"); + } + arg1 = (char *)(buf1); + result = (int)grib_c_index_read(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + return resultobj; +fail: + if (alloc1 == SWIG_NEWOBJ) free((char*)buf1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_new_from_message(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + size_t *arg3 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + size_t temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_new_from_message",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_message" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_new_from_message" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_size_t,0))))) { + size_t val; + int ecode = SWIG_AsVal_size_t(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_new_from_message" "', argument " "3"" of type '" "size_t""'"); + } + temp3 = (size_t)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_new_from_message(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res1)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1))); + } else { + int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags)); + } + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_count_in_file(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + FILE *arg1 = (FILE *) 0 ; + int *arg2 = (int *) 0 ; + int temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_count_in_file",&obj0)) SWIG_fail; + { + if ( PyFile_Check(obj0) ){ + arg1 = PyFile_AsFile(obj0); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + result = (int)grib_c_count_in_file(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_release(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_release",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_release" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_release(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + FILE *arg2 = (FILE *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_write",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_write" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + { + if ( PyFile_Check(obj1) ){ + arg2 = PyFile_AsFile(obj1); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + result = (int)grib_c_write(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_size_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_size_long",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_size_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_size_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_size_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_string_length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + size_t *arg3 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + size_t temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_string_length",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_string_length" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_string_length" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_string_length(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_size_t((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_size_t, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_clone",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_clone" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_clone" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_clone(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_copy_namespace(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_copy_namespace",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_copy_namespace" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_copy_namespace" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_copy_namespace" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_copy_namespace(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_message_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + size_t *arg2 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + size_t temp2 ; + int res2 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_get_message_size",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_message_size" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_get_message_size(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_size_t((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_size_t, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_native_type(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_native_type",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_native_type" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_native_type" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_native_type(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = SWIG_TMPOBJ ; + int result; + + arg1 = &temp1; + if (!PyArg_ParseTuple(args,(char *)":grib_c_multi_new")) SWIG_fail; + result = (int)grib_c_multi_new(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res1)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg1))); + } else { + int new_flags = SWIG_IsNewObj(res1) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg1), SWIGTYPE_p_int, new_flags)); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_support_on(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_multi_support_on")) SWIG_fail; + result = (int)grib_c_multi_support_on(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + FILE *arg2 = (FILE *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_multi_write",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_write" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + { + if ( PyFile_Check(obj1) ){ + arg2 = PyFile_AsFile(obj1); + } else { + PyErr_SetString(PyExc_TypeError, "f must be a file type."); + return NULL; + } + } + result = (int)grib_c_multi_write(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_support_off(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_multi_support_off")) SWIG_fail; + result = (int)grib_c_multi_support_off(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_release(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_multi_release",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_release" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_multi_release(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_multi_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + int temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_multi_append",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_append" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_append" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_multi_append" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_multi_append(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gribex_mode_on(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gribex_mode_on")) SWIG_fail; + result = (int)grib_c_gribex_mode_on(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gribex_mode_off(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gribex_mode_off")) SWIG_fail; + result = (int)grib_c_gribex_mode_off(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_keys_iterator_next",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_next" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_keys_iterator_next(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_keys_iterator_delete",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_delete" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_keys_iterator_delete(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_computed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_computed",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_computed" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_computed(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_coded(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_coded",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_coded" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_coded(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_edition_specific(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_edition_specific",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_edition_specific" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_edition_specific(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_duplicates(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_duplicates",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_duplicates" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_duplicates(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_read_only(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_read_only",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_read_only" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_read_only(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_skip_function(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_skip_function",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_skip_function" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_skip_function(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_rewind(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_keys_iterator_rewind",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_rewind" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_keys_iterator_rewind(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_get_name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int temp1 ; + int res1 = 0 ; + char temp2[1024+1] ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = (char *) temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_keys_iterator_get_name",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_keys_iterator_get_name" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + ecode3 = SWIG_AsVal_int(obj1, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "grib_c_keys_iterator_get_name" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + result = (int)grib_c_keys_iterator_get_name(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + arg2[1024] = 0; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg2)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_size_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_index_get_size_long",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_size_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_size_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_index_get_size_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_index_get_long",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_index_get_long" "', argument " "3"" of type '" "long *""'"); + } + arg3 = (long *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_index_get_long" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_index_get_long(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_real8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_index_get_real8",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_real8" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_real8" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_index_get_real8" "', argument " "3"" of type '" "double *""'"); + } + arg3 = (double *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_index_get_real8" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_index_get_real8(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_get_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int *arg4 = (int *) 0 ; + int *arg5 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + char temp3[1024*1024+1] ; + int temp4 ; + int res4 = 0 ; + int temp5 ; + int res5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + arg3 = (char *) temp3; + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_index_get_string",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_get_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_string" "', argument " "4"" of type '" "int""'"); + } + temp4 = (int)(val); + arg4 = &temp4; + res4 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res5 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg5),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj3, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_get_string" "', argument " "5"" of type '" "int""'"); + } + temp5 = (int)(val); + arg5 = &temp5; + res5 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_get_string(arg1,arg2,arg3,arg4,arg5); + resultobj = SWIG_From_int((int)(result)); + arg3[1024*1024] = 0; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg3)); + if (SWIG_IsTmpObj(res5)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg5))); + } else { + int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_select_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_index_select_long",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_select_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_long,0))))) { + long val; + int ecode = SWIG_AsVal_long(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_long" "', argument " "3"" of type '" "long""'"); + } + temp3 = (long)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_select_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_select_real8(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + double temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_index_select_real8",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_real8" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_select_real8" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_real8" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_select_real8(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_select_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_index_select_string",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_select_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_index_select_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_index_select_string" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + result = (int)grib_c_index_select_string(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_index_release(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_index_release",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_index_release" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_index_release(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_iterator_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_iterator_delete",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_delete" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_iterator_delete(arg1); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_iterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + double *arg2 = (double *) 0 ; + double *arg3 = (double *) 0 ; + double *arg4 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + double temp2 ; + int res2 = SWIG_TMPOBJ ; + double temp3 ; + int res3 = SWIG_TMPOBJ ; + double temp4 ; + int res4 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; + arg3 = &temp3; + arg4 = &temp4; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_iterator_next",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_iterator_next" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_iterator_next(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res2)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg2))); + } else { + int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res4)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg4))); + } else { + int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + size_t *arg4 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + size_t n3 ; + char *buff3 = 0 ; + size_t size3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_get_string",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_AsVal_size_t (obj2, &n3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_string" "', argument " "3"" of type '" "(char* string_val, size_t* string_size)""'"); + } + buff3= (char *)malloc((n3+1)*sizeof(char)); + arg3 = (char *)(buff3); + size3 = (size_t)(n3); + arg4 = &size3; + result = (int)grib_c_get_string(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtrAndSize(arg3,*arg4)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (buff3) free((char*)buff3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (buff3) free((char*)buff3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + int val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_set_string",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_string" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_set_string" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + ecode4 = SWIG_AsVal_int(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "grib_c_set_string" "', argument " "4"" of type '" "int""'"); + } + arg4 = (int)(val4); + result = (int)grib_c_set_string(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_long",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_long((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_long, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + long temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_set_long",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_long" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_long" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_long,0))))) { + long val; + int ecode = SWIG_AsVal_long(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_long" "', argument " "3"" of type '" "long""'"); + } + temp3 = (long)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_set_long(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + double temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_double",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_double" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_double" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_get_double(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_double(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + double temp3 ; + int res3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_set_double",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_double" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_double" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_double" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_set_double(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_real8_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_set_real8_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_real8_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_real8_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_set_real8_array" "', argument " "3"" of type '" "double *""'"); + } + arg3 = (double *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_set_real8_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_set_real8_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_real8_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_get_real8_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_real8_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_real8_array" "', argument " "3"" of type '" "double *""'"); + } + arg3 = (double *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_get_real8_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_get_real8_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_long_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_get_long_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_long_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_long_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_long_array" "', argument " "3"" of type '" "long *""'"); + } + arg3 = (long *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_get_long_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_get_long_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_long_array(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int *arg4 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_set_long_array",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_long_array" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_long_array" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_long, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_set_long_array" "', argument " "3"" of type '" "long *""'"); + } + arg3 = (long *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_set_long_array" "', argument " "4"" of type '" "int *""'"); + } + arg4 = (int *)(argp4); + result = (int)grib_c_set_long_array(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_real8_element(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + double *arg4 = (double *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = 0 ; + double temp4 ; + int res4 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + arg4 = &temp4; + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_c_get_real8_element",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_element" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_real8_element" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_element" "', argument " "3"" of type '" "int""'"); + } + temp3 = (int)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_get_real8_element(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res4)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg4))); + } else { + int new_flags = SWIG_IsNewObj(res4) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg4), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_real8_elements(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + double *arg4 = (double *) 0 ; + int *arg5 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOO:grib_c_get_real8_elements",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_real8_elements" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_get_real8_elements" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "grib_c_get_real8_elements" "', argument " "3"" of type '" "int *""'"); + } + arg3 = (int *)(argp3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "grib_c_get_real8_elements" "', argument " "4"" of type '" "double *""'"); + } + arg4 = (double *)(argp4); + res5 = SWIG_ConvertPtr(obj4, &argp5,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "grib_c_get_real8_elements" "', argument " "5"" of type '" "int *""'"); + } + arg5 = (int *)(argp5); + result = (int)grib_c_get_real8_elements(arg1,arg2,arg3,arg4,arg5); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_missing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_set_missing",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_missing" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_missing" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_set_missing(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_set_key_vals(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_set_key_vals",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_set_key_vals" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_set_key_vals" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_set_key_vals(arg1,arg2); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_is_missing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_is_missing",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_is_missing" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_is_missing" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_is_missing(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_is_defined(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int temp3 ; + int res3 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg3 = &temp3; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_is_defined",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_is_defined" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_c_is_defined" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + result = (int)grib_c_is_defined(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res3)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg3))); + } else { + int new_flags = SWIG_IsNewObj(res3) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg3), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_with_numpy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + + if (!PyArg_ParseTuple(args,(char *)":with_numpy")) SWIG_fail; + with_numpy(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_set_double_ndarray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyArrayObject *array3 = NULL ; + int is_new_object3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_set_double_ndarray",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_set_double_ndarray" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_set_double_ndarray" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + npy_intp size[1] = { + -1 + }; + array3 = obj_to_array_contiguous_allow_conversion(obj2, NPY_DOUBLE, + &is_new_object3); + if (!array3 || !require_dimensions(array3, 1) || + !require_size(array3, size, 1)) SWIG_fail; + arg3 = (double*) array_data(array3); + arg4 = (int) array_size(array3,0); + } + result = (int)grib_set_double_ndarray(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_set_long_ndarray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyArrayObject *array3 = NULL ; + int is_new_object3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_set_long_ndarray",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_set_long_ndarray" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_set_long_ndarray" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + npy_intp size[1] = { + -1 + }; + array3 = obj_to_array_contiguous_allow_conversion(obj2, NPY_LONG, + &is_new_object3); + if (!array3 || !require_dimensions(array3, 1) || + !require_size(array3, size, 1)) SWIG_fail; + arg3 = (long*) array_data(array3); + arg4 = (int) array_size(array3,0); + } + result = (int)grib_set_long_ndarray(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_get_double_ndarray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + double *arg3 = (double *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject *array3 = NULL ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_get_double_ndarray",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_get_double_ndarray" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_get_double_ndarray" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + npy_intp dims[1]; + if (!PyInt_Check(obj2)) + { + const char* typestring = pytype_string(obj2); + PyErr_Format(PyExc_TypeError, + "Int dimension expected. '%s' given.", + typestring); + SWIG_fail; + } + arg4 = (int) PyInt_AsLong(obj2); + dims[0] = (npy_intp) arg4; + array3 = PyArray_SimpleNew(1, dims, NPY_DOUBLE); + if (!array3) SWIG_fail; + arg3 = (double*) array_data(array3); + } + result = (int)grib_get_double_ndarray(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + { + resultobj = SWIG_Python_AppendOutput(resultobj,array3); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_get_long_ndarray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + long *arg3 = (long *) 0 ; + int arg4 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyObject *array3 = NULL ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:grib_get_long_ndarray",&obj0,&obj1,&obj2)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_get_long_ndarray" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_get_long_ndarray" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + npy_intp dims[1]; + if (!PyInt_Check(obj2)) + { + const char* typestring = pytype_string(obj2); + PyErr_Format(PyExc_TypeError, + "Int dimension expected. '%s' given.", + typestring); + SWIG_fail; + } + arg4 = (int) PyInt_AsLong(obj2); + dims[0] = (npy_intp) arg4; + array3 = PyArray_SimpleNew(1, dims, NPY_LONG); + if (!array3) SWIG_fail; + arg3 = (long*) array_data(array3); + } + result = (int)grib_get_long_ndarray(arg1,arg2,arg3,arg4); + resultobj = SWIG_From_int((int)(result)); + { + resultobj = SWIG_Python_AppendOutput(resultobj,array3); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_get_double_ndelements(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int *arg3 = (int *) 0 ; + int arg4 ; + double *arg5 = (double *) 0 ; + int arg6 ; + int temp1 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + PyArrayObject *array3 = NULL ; + int is_new_object3 = 0 ; + PyObject *array5 = NULL ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_get_double_ndelements",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_get_double_ndelements" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "grib_get_double_ndelements" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + { + npy_intp size[1] = { + -1 + }; + array3 = obj_to_array_contiguous_allow_conversion(obj2, NPY_INT, + &is_new_object3); + if (!array3 || !require_dimensions(array3, 1) || + !require_size(array3, size, 1)) SWIG_fail; + arg3 = (int*) array_data(array3); + arg4 = (int) array_size(array3,0); + } + { + npy_intp dims[1]; + if (!PyInt_Check(obj3)) + { + const char* typestring = pytype_string(obj3); + PyErr_Format(PyExc_TypeError, + "Int dimension expected. '%s' given.", + typestring); + SWIG_fail; + } + arg6 = (int) PyInt_AsLong(obj3); + dims[0] = (npy_intp) arg6; + array5 = PyArray_SimpleNew(1, dims, NPY_DOUBLE); + if (!array5) SWIG_fail; + arg5 = (double*) array_data(array5); + } + result = (int)grib_get_double_ndelements(arg1,arg2,arg3,arg4,arg5,arg6); + resultobj = SWIG_From_int((int)(result)); + { + resultobj = SWIG_Python_AppendOutput(resultobj,array5); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + { + if (is_new_object3 && array3) + { + Py_DECREF(array3); + } + } + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_find_nearest_single(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + double *arg3 = (double *) 0 ; + double *arg4 = (double *) 0 ; + double *arg5 = (double *) 0 ; + double *arg6 = (double *) 0 ; + double *arg7 = (double *) 0 ; + double *arg8 = (double *) 0 ; + int *arg9 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + double temp3 ; + int res3 = 0 ; + double temp4 ; + int res4 = 0 ; + double temp5 ; + int res5 = SWIG_TMPOBJ ; + double temp6 ; + int res6 = SWIG_TMPOBJ ; + double temp7 ; + int res7 = SWIG_TMPOBJ ; + double temp8 ; + int res8 = SWIG_TMPOBJ ; + int temp9 ; + int res9 = SWIG_TMPOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + int result; + + arg5 = &temp5; + arg6 = &temp6; + arg7 = &temp7; + arg8 = &temp8; + arg9 = &temp9; + if (!PyArg_ParseTuple(args,(char *)"OOOO:grib_c_find_nearest_single",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj3, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_single" "', argument " "4"" of type '" "double""'"); + } + temp4 = (double)(val); + arg4 = &temp4; + res4 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_find_nearest_single(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsTmpObj(res5)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg5))); + } else { + int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res6)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg6))); + } else { + int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res7)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg7))); + } else { + int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res8)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_double((*arg8))); + } else { + int new_flags = SWIG_IsNewObj(res8) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg8), SWIGTYPE_p_double, new_flags)); + } + if (SWIG_IsTmpObj(res9)) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg9))); + } else { + int new_flags = SWIG_IsNewObj(res9) ? (SWIG_POINTER_OWN | 0 ) : 0 ; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg9), SWIGTYPE_p_int, new_flags)); + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_find_nearest_four_single(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + int *arg2 = (int *) 0 ; + double *arg3 = (double *) 0 ; + double *arg4 = (double *) 0 ; + double *arg5 = (double *) 0 ; + double *arg6 = (double *) 0 ; + double *arg7 = (double *) 0 ; + double *arg8 = (double *) 0 ; + int *arg9 = (int *) 0 ; + int temp1 ; + int res1 = 0 ; + int temp2 ; + int res2 = 0 ; + double temp3 ; + int res3 = 0 ; + double temp4 ; + int res4 = 0 ; + void *argp5 = 0 ; + int res5 = 0 ; + void *argp6 = 0 ; + int res6 = 0 ; + void *argp7 = 0 ; + int res7 = 0 ; + void *argp8 = 0 ; + int res8 = 0 ; + void *argp9 = 0 ; + int res9 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject * obj4 = 0 ; + PyObject * obj5 = 0 ; + PyObject * obj6 = 0 ; + PyObject * obj7 = 0 ; + PyObject * obj8 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOO:grib_c_find_nearest_four_single",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res2 = SWIG_ConvertPtr(obj1,SWIG_as_voidptrptr(&arg2),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj1, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "2"" of type '" "int""'"); + } + temp2 = (int)(val); + arg2 = &temp2; + res2 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj2, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "3"" of type '" "double""'"); + } + temp3 = (double)(val); + arg3 = &temp3; + res3 = SWIG_AddTmpMask(ecode); + } + if (!(SWIG_IsOK((res4 = SWIG_ConvertPtr(obj3,SWIG_as_voidptrptr(&arg4),SWIGTYPE_p_double,0))))) { + double val; + int ecode = SWIG_AsVal_double(obj3, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_find_nearest_four_single" "', argument " "4"" of type '" "double""'"); + } + temp4 = (double)(val); + arg4 = &temp4; + res4 = SWIG_AddTmpMask(ecode); + } + res5 = SWIG_ConvertPtr(obj4, &argp5,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res5)) { + SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "grib_c_find_nearest_four_single" "', argument " "5"" of type '" "double *""'"); + } + arg5 = (double *)(argp5); + res6 = SWIG_ConvertPtr(obj5, &argp6,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res6)) { + SWIG_exception_fail(SWIG_ArgError(res6), "in method '" "grib_c_find_nearest_four_single" "', argument " "6"" of type '" "double *""'"); + } + arg6 = (double *)(argp6); + res7 = SWIG_ConvertPtr(obj6, &argp7,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res7)) { + SWIG_exception_fail(SWIG_ArgError(res7), "in method '" "grib_c_find_nearest_four_single" "', argument " "7"" of type '" "double *""'"); + } + arg7 = (double *)(argp7); + res8 = SWIG_ConvertPtr(obj7, &argp8,SWIGTYPE_p_double, 0 | 0 ); + if (!SWIG_IsOK(res8)) { + SWIG_exception_fail(SWIG_ArgError(res8), "in method '" "grib_c_find_nearest_four_single" "', argument " "8"" of type '" "double *""'"); + } + arg8 = (double *)(argp8); + res9 = SWIG_ConvertPtr(obj8, &argp9,SWIGTYPE_p_int, 0 | 0 ); + if (!SWIG_IsOK(res9)) { + SWIG_exception_fail(SWIG_ArgError(res9), "in method '" "grib_c_find_nearest_four_single" "', argument " "9"" of type '" "int *""'"); + } + arg9 = (int *)(argp9); + result = (int)grib_c_find_nearest_four_single(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); + resultobj = SWIG_From_int((int)(result)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + if (SWIG_IsNewObj(res2)) free((char*)arg2); + if (SWIG_IsNewObj(res3)) free((char*)arg3); + if (SWIG_IsNewObj(res4)) free((char*)arg4); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_message(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + void **arg2 = (void **) 0 ; + size_t *arg3 = (size_t *) 0 ; + int temp1 ; + int res1 = 0 ; + void *temp2 = 0 ; + size_t tempn2 ; + PyObject * obj0 = 0 ; + int result; + + arg2 = &temp2; arg3 = &tempn2; + if (!PyArg_ParseTuple(args,(char *)"O:grib_c_get_message",&obj0)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_message" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + result = (int)grib_c_get_message(arg1,(void const **)arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + if (*arg2) { + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtrAndSize(*arg2,*arg3)); + ; + } + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_error_string(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int *arg1 = (int *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int temp1 ; + int res1 = 0 ; + char temp2[1024+1] ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + int result; + + arg2 = (char *) temp2; + if (!PyArg_ParseTuple(args,(char *)"OO:grib_c_get_error_string",&obj0,&obj1)) SWIG_fail; + if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) { + int val; + int ecode = SWIG_AsVal_int(obj0, &val); + if (!SWIG_IsOK(ecode)) { + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "grib_c_get_error_string" "', argument " "1"" of type '" "int""'"); + } + temp1 = (int)(val); + arg1 = &temp1; + res1 = SWIG_AddTmpMask(ecode); + } + ecode3 = SWIG_AsVal_int(obj1, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "grib_c_get_error_string" "', argument " "3"" of type '" "int""'"); + } + arg3 = (int)(val3); + result = (int)grib_c_get_error_string(arg1,arg2,arg3); + resultobj = SWIG_From_int((int)(result)); + arg2[1024] = 0; + resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg2)); + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) free((char*)arg1); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_no_fail_on_wrong_length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int arg1 ; + int val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:no_fail_on_wrong_length",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_int(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "no_fail_on_wrong_length" "', argument " "1"" of type '" "int""'"); + } + arg1 = (int)(val1); + no_fail_on_wrong_length(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_get_api_version(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + long result; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_get_api_version")) SWIG_fail; + result = (long)grib_c_get_api_version(); + resultobj = SWIG_From_long((long)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gts_header_on(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gts_header_on")) SWIG_fail; + grib_c_gts_header_on(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_grib_c_gts_header_off(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + + if (!PyArg_ParseTuple(args,(char *)":grib_c_gts_header_off")) SWIG_fail; + grib_c_gts_header_off(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +static PyMethodDef SwigMethods[] = { + { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL}, + { (char *)"cdata", _wrap_cdata, METH_VARARGS, NULL}, + { (char *)"memmove", _wrap_memmove, METH_VARARGS, NULL}, + { (char *)"new_intp", _wrap_new_intp, METH_VARARGS, NULL}, + { (char *)"delete_intp", _wrap_delete_intp, METH_VARARGS, NULL}, + { (char *)"intp_assign", _wrap_intp_assign, METH_VARARGS, NULL}, + { (char *)"intp_value", _wrap_intp_value, METH_VARARGS, NULL}, + { (char *)"intp_cast", _wrap_intp_cast, METH_VARARGS, NULL}, + { (char *)"intp_frompointer", _wrap_intp_frompointer, METH_VARARGS, NULL}, + { (char *)"intp_swigregister", intp_swigregister, METH_VARARGS, NULL}, + { (char *)"new_longp", _wrap_new_longp, METH_VARARGS, NULL}, + { (char *)"delete_longp", _wrap_delete_longp, METH_VARARGS, NULL}, + { (char *)"longp_assign", _wrap_longp_assign, METH_VARARGS, NULL}, + { (char *)"longp_value", _wrap_longp_value, METH_VARARGS, NULL}, + { (char *)"longp_cast", _wrap_longp_cast, METH_VARARGS, NULL}, + { (char *)"longp_frompointer", _wrap_longp_frompointer, METH_VARARGS, NULL}, + { (char *)"longp_swigregister", longp_swigregister, METH_VARARGS, NULL}, + { (char *)"new_doublep", _wrap_new_doublep, METH_VARARGS, NULL}, + { (char *)"delete_doublep", _wrap_delete_doublep, METH_VARARGS, NULL}, + { (char *)"doublep_assign", _wrap_doublep_assign, METH_VARARGS, NULL}, + { (char *)"doublep_value", _wrap_doublep_value, METH_VARARGS, NULL}, + { (char *)"doublep_cast", _wrap_doublep_cast, METH_VARARGS, NULL}, + { (char *)"doublep_frompointer", _wrap_doublep_frompointer, METH_VARARGS, NULL}, + { (char *)"doublep_swigregister", doublep_swigregister, METH_VARARGS, NULL}, + { (char *)"new_doubleArray", _wrap_new_doubleArray, METH_VARARGS, NULL}, + { (char *)"delete_doubleArray", _wrap_delete_doubleArray, METH_VARARGS, NULL}, + { (char *)"doubleArray_getitem", _wrap_doubleArray_getitem, METH_VARARGS, NULL}, + { (char *)"doubleArray_setitem", _wrap_doubleArray_setitem, METH_VARARGS, NULL}, + { (char *)"new_longArray", _wrap_new_longArray, METH_VARARGS, NULL}, + { (char *)"delete_longArray", _wrap_delete_longArray, METH_VARARGS, NULL}, + { (char *)"longArray_getitem", _wrap_longArray_getitem, METH_VARARGS, NULL}, + { (char *)"longArray_setitem", _wrap_longArray_setitem, METH_VARARGS, NULL}, + { (char *)"new_intArray", _wrap_new_intArray, METH_VARARGS, NULL}, + { (char *)"delete_intArray", _wrap_delete_intArray, METH_VARARGS, NULL}, + { (char *)"intArray_getitem", _wrap_intArray_getitem, METH_VARARGS, NULL}, + { (char *)"intArray_setitem", _wrap_intArray_setitem, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_file", _wrap_grib_c_new_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_bufr_from_file", _wrap_grib_c_new_bufr_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_gts_from_file", _wrap_grib_c_new_gts_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_iterator_new", _wrap_grib_c_iterator_new, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_new", _wrap_grib_c_keys_iterator_new, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_samples", _wrap_grib_c_new_from_samples, METH_VARARGS, NULL}, + { (char *)"grib_c_index_new_from_file", _wrap_grib_c_index_new_from_file, METH_VARARGS, NULL}, + { (char *)"grib_c_index_add_file", _wrap_grib_c_index_add_file, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_index", _wrap_grib_c_new_from_index, METH_VARARGS, NULL}, + { (char *)"grib_c_index_write", _wrap_grib_c_index_write, METH_VARARGS, NULL}, + { (char *)"grib_c_index_read", _wrap_grib_c_index_read, METH_VARARGS, NULL}, + { (char *)"grib_c_new_from_message", _wrap_grib_c_new_from_message, METH_VARARGS, NULL}, + { (char *)"grib_c_count_in_file", _wrap_grib_c_count_in_file, METH_VARARGS, NULL}, + { (char *)"grib_c_release", _wrap_grib_c_release, METH_VARARGS, NULL}, + { (char *)"grib_c_write", _wrap_grib_c_write, METH_VARARGS, NULL}, + { (char *)"grib_c_get_size_long", _wrap_grib_c_get_size_long, METH_VARARGS, NULL}, + { (char *)"grib_c_get_string_length", _wrap_grib_c_get_string_length, METH_VARARGS, NULL}, + { (char *)"grib_c_clone", _wrap_grib_c_clone, METH_VARARGS, NULL}, + { (char *)"grib_c_copy_namespace", _wrap_grib_c_copy_namespace, METH_VARARGS, NULL}, + { (char *)"grib_c_get_message_size", _wrap_grib_c_get_message_size, METH_VARARGS, NULL}, + { (char *)"grib_c_get_native_type", _wrap_grib_c_get_native_type, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_new", _wrap_grib_c_multi_new, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_support_on", _wrap_grib_c_multi_support_on, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_write", _wrap_grib_c_multi_write, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_support_off", _wrap_grib_c_multi_support_off, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_release", _wrap_grib_c_multi_release, METH_VARARGS, NULL}, + { (char *)"grib_c_multi_append", _wrap_grib_c_multi_append, METH_VARARGS, NULL}, + { (char *)"grib_c_gribex_mode_on", _wrap_grib_c_gribex_mode_on, METH_VARARGS, NULL}, + { (char *)"grib_c_gribex_mode_off", _wrap_grib_c_gribex_mode_off, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_next", _wrap_grib_c_keys_iterator_next, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_delete", _wrap_grib_c_keys_iterator_delete, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_computed", _wrap_grib_c_skip_computed, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_coded", _wrap_grib_c_skip_coded, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_edition_specific", _wrap_grib_c_skip_edition_specific, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_duplicates", _wrap_grib_c_skip_duplicates, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_read_only", _wrap_grib_c_skip_read_only, METH_VARARGS, NULL}, + { (char *)"grib_c_skip_function", _wrap_grib_c_skip_function, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_rewind", _wrap_grib_c_keys_iterator_rewind, METH_VARARGS, NULL}, + { (char *)"grib_c_keys_iterator_get_name", _wrap_grib_c_keys_iterator_get_name, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_size_long", _wrap_grib_c_index_get_size_long, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_long", _wrap_grib_c_index_get_long, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_real8", _wrap_grib_c_index_get_real8, METH_VARARGS, NULL}, + { (char *)"grib_c_index_get_string", _wrap_grib_c_index_get_string, METH_VARARGS, NULL}, + { (char *)"grib_c_index_select_long", _wrap_grib_c_index_select_long, METH_VARARGS, NULL}, + { (char *)"grib_c_index_select_real8", _wrap_grib_c_index_select_real8, METH_VARARGS, NULL}, + { (char *)"grib_c_index_select_string", _wrap_grib_c_index_select_string, METH_VARARGS, NULL}, + { (char *)"grib_c_index_release", _wrap_grib_c_index_release, METH_VARARGS, NULL}, + { (char *)"grib_c_iterator_delete", _wrap_grib_c_iterator_delete, METH_VARARGS, NULL}, + { (char *)"grib_c_iterator_next", _wrap_grib_c_iterator_next, METH_VARARGS, NULL}, + { (char *)"grib_c_get_string", _wrap_grib_c_get_string, METH_VARARGS, NULL}, + { (char *)"grib_c_set_string", _wrap_grib_c_set_string, METH_VARARGS, NULL}, + { (char *)"grib_c_get_long", _wrap_grib_c_get_long, METH_VARARGS, NULL}, + { (char *)"grib_c_set_long", _wrap_grib_c_set_long, METH_VARARGS, NULL}, + { (char *)"grib_c_get_double", _wrap_grib_c_get_double, METH_VARARGS, NULL}, + { (char *)"grib_c_set_double", _wrap_grib_c_set_double, METH_VARARGS, NULL}, + { (char *)"grib_c_set_real8_array", _wrap_grib_c_set_real8_array, METH_VARARGS, NULL}, + { (char *)"grib_c_get_real8_array", _wrap_grib_c_get_real8_array, METH_VARARGS, NULL}, + { (char *)"grib_c_get_long_array", _wrap_grib_c_get_long_array, METH_VARARGS, NULL}, + { (char *)"grib_c_set_long_array", _wrap_grib_c_set_long_array, METH_VARARGS, NULL}, + { (char *)"grib_c_get_real8_element", _wrap_grib_c_get_real8_element, METH_VARARGS, NULL}, + { (char *)"grib_c_get_real8_elements", _wrap_grib_c_get_real8_elements, METH_VARARGS, NULL}, + { (char *)"grib_c_set_missing", _wrap_grib_c_set_missing, METH_VARARGS, NULL}, + { (char *)"grib_c_set_key_vals", _wrap_grib_c_set_key_vals, METH_VARARGS, NULL}, + { (char *)"grib_c_is_missing", _wrap_grib_c_is_missing, METH_VARARGS, NULL}, + { (char *)"grib_c_is_defined", _wrap_grib_c_is_defined, METH_VARARGS, NULL}, + { (char *)"with_numpy", _wrap_with_numpy, METH_VARARGS, NULL}, + { (char *)"grib_set_double_ndarray", _wrap_grib_set_double_ndarray, METH_VARARGS, NULL}, + { (char *)"grib_set_long_ndarray", _wrap_grib_set_long_ndarray, METH_VARARGS, NULL}, + { (char *)"grib_get_double_ndarray", _wrap_grib_get_double_ndarray, METH_VARARGS, NULL}, + { (char *)"grib_get_long_ndarray", _wrap_grib_get_long_ndarray, METH_VARARGS, NULL}, + { (char *)"grib_get_double_ndelements", _wrap_grib_get_double_ndelements, METH_VARARGS, NULL}, + { (char *)"grib_c_find_nearest_single", _wrap_grib_c_find_nearest_single, METH_VARARGS, NULL}, + { (char *)"grib_c_find_nearest_four_single", _wrap_grib_c_find_nearest_four_single, METH_VARARGS, NULL}, + { (char *)"grib_c_get_message", _wrap_grib_c_get_message, METH_VARARGS, NULL}, + { (char *)"grib_c_get_error_string", _wrap_grib_c_get_error_string, METH_VARARGS, NULL}, + { (char *)"no_fail_on_wrong_length", _wrap_no_fail_on_wrong_length, METH_VARARGS, NULL}, + { (char *)"grib_c_get_api_version", _wrap_grib_c_get_api_version, METH_VARARGS, NULL}, + { (char *)"grib_c_gts_header_on", _wrap_grib_c_gts_header_on, METH_VARARGS, NULL}, + { (char *)"grib_c_gts_header_off", _wrap_grib_c_gts_header_off, METH_VARARGS, NULL}, + { NULL, NULL, 0, NULL } +}; + + +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ + +static void *_p_intpTo_p_int(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((int *) ((intp *) x)); +} +static void *_p_doublepTo_p_double(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((double *) ((doublep *) x)); +} +static void *_p_longpTo_p_long(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((long *) ((longp *) x)); +} +static swig_type_info _swigt__p_FILE = {"_p_FILE", "FILE *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_double = {"_p_double", "double *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_doublep = {"_p_doublep", "doublep *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_int = {"_p_int", "int *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_intp = {"_p_intp", "intp *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_long = {"_p_long", "long *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_longp = {"_p_longp", "longp *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_p_void = {"_p_p_void", "void **", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_size_t = {"_p_size_t", "size_t *", 0, 0, (void*)0, 0}; + +static swig_type_info *swig_type_initial[] = { + &_swigt__p_FILE, + &_swigt__p_char, + &_swigt__p_double, + &_swigt__p_doublep, + &_swigt__p_int, + &_swigt__p_intp, + &_swigt__p_long, + &_swigt__p_longp, + &_swigt__p_p_void, + &_swigt__p_size_t, +}; + +static swig_cast_info _swigc__p_FILE[] = { {&_swigt__p_FILE, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_double[] = { {&_swigt__p_double, 0, 0, 0}, {&_swigt__p_doublep, _p_doublepTo_p_double, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_doublep[] = { {&_swigt__p_doublep, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_int[] = { {&_swigt__p_intp, _p_intpTo_p_int, 0, 0}, {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_intp[] = { {&_swigt__p_intp, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0}, {&_swigt__p_longp, _p_longpTo_p_long, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_longp[] = { {&_swigt__p_longp, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_p_void[] = { {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_size_t[] = { {&_swigt__p_size_t, 0, 0, 0},{0, 0, 0, 0}}; + +static swig_cast_info *swig_cast_initial[] = { + _swigc__p_FILE, + _swigc__p_char, + _swigc__p_double, + _swigc__p_doublep, + _swigc__p_int, + _swigc__p_intp, + _swigc__p_long, + _swigc__p_longp, + _swigc__p_p_void, + _swigc__p_size_t, +}; + + +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ + +static swig_const_info swig_const_table[] = { +{0, 0, 0, 0.0, 0, 0}}; + +#ifdef __cplusplus +} +#endif +/* ----------------------------------------------------------------------------- + * Type initialization: + * This problem is tough by the requirement that no dynamic + * memory is used. Also, since swig_type_info structures store pointers to + * swig_cast_info structures and swig_cast_info structures store pointers back + * to swig_type_info structures, we need some lookup code at initialization. + * The idea is that swig generates all the structures that are needed. + * The runtime then collects these partially filled structures. + * The SWIG_InitializeModule function takes these initial arrays out of + * swig_module, and does all the lookup, filling in the swig_module.types + * array with the correct data and linking the correct swig_cast_info + * structures together. + * + * The generated swig_type_info structures are assigned staticly to an initial + * array. We just loop through that array, and handle each type individually. + * First we lookup if this type has been already loaded, and if so, use the + * loaded structure instead of the generated one. Then we have to fill in the + * cast linked list. The cast data is initially stored in something like a + * two-dimensional array. Each row corresponds to a type (there are the same + * number of rows as there are in the swig_type_initial array). Each entry in + * a column is one of the swig_cast_info structures for that type. + * The cast_initial array is actually an array of arrays, because each row has + * a variable number of columns. So to actually build the cast linked list, + * we find the array of casts associated with the type, and loop through it + * adding the casts to the list. The one last trick we need to do is making + * sure the type pointer in the swig_cast_info struct is correct. + * + * First off, we lookup the cast->type name to see if it is already loaded. + * There are three cases to handle: + * 1) If the cast->type has already been loaded AND the type we are adding + * casting info to has not been loaded (it is in this module), THEN we + * replace the cast->type pointer with the type pointer that has already + * been loaded. + * 2) If BOTH types (the one we are adding casting info to, and the + * cast->type) are loaded, THEN the cast info has already been loaded by + * the previous module so we just ignore it. + * 3) Finally, if cast->type has not already been loaded, then we add that + * swig_cast_info to the linked list (because the cast->type) pointer will + * be correct. + * ----------------------------------------------------------------------------- */ + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* c-mode */ +#endif +#endif + +#if 0 +#define SWIGRUNTIME_DEBUG +#endif + + +SWIGRUNTIME void +SWIG_InitializeModule(void *clientdata) { + size_t i; + swig_module_info *module_head, *iter; + int found, init; + + clientdata = clientdata; + + /* check to see if the circular list has been setup, if not, set it up */ + if (swig_module.next==0) { + /* Initialize the swig_module */ + swig_module.type_initial = swig_type_initial; + swig_module.cast_initial = swig_cast_initial; + swig_module.next = &swig_module; + init = 1; + } else { + init = 0; + } + + /* Try and load any already created modules */ + module_head = SWIG_GetModule(clientdata); + if (!module_head) { + /* This is the first module loaded for this interpreter */ + /* so set the swig module into the interpreter */ + SWIG_SetModule(clientdata, &swig_module); + module_head = &swig_module; + } else { + /* the interpreter has loaded a SWIG module, but has it loaded this one? */ + found=0; + iter=module_head; + do { + if (iter==&swig_module) { + found=1; + break; + } + iter=iter->next; + } while (iter!= module_head); + + /* if the is found in the list, then all is done and we may leave */ + if (found) return; + /* otherwise we must add out module into the list */ + swig_module.next = module_head->next; + module_head->next = &swig_module; + } + + /* When multiple interpeters are used, a module could have already been initialized in + a different interpreter, but not yet have a pointer in this interpreter. + In this case, we do not want to continue adding types... everything should be + set up already */ + if (init == 0) return; + + /* Now work on filling in swig_module.types */ +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: size %d\n", swig_module.size); +#endif + for (i = 0; i < swig_module.size; ++i) { + swig_type_info *type = 0; + swig_type_info *ret; + swig_cast_info *cast; + +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); +#endif + + /* if there is another module already loaded */ + if (swig_module.next != &swig_module) { + type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); + } + if (type) { + /* Overwrite clientdata field */ +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: found type %s\n", type->name); +#endif + if (swig_module.type_initial[i]->clientdata) { + type->clientdata = swig_module.type_initial[i]->clientdata; +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); +#endif + } + } else { + type = swig_module.type_initial[i]; + } + + /* Insert casting types */ + cast = swig_module.cast_initial[i]; + while (cast->type) { + /* Don't need to add information already in the list */ + ret = 0; +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); +#endif + if (swig_module.next != &swig_module) { + ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); +#ifdef SWIGRUNTIME_DEBUG + if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); +#endif + } + if (ret) { + if (type == swig_module.type_initial[i]) { +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: skip old type %s\n", ret->name); +#endif + cast->type = ret; + ret = 0; + } else { + /* Check for casting already in the list */ + swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); +#ifdef SWIGRUNTIME_DEBUG + if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); +#endif + if (!ocast) ret = 0; + } + } + + if (!ret) { +#ifdef SWIGRUNTIME_DEBUG + printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); +#endif + if (type->cast) { + type->cast->prev = cast; + cast->next = type->cast; + } + type->cast = cast; + } + cast++; + } + /* Set entry in modules->types array equal to the type */ + swig_module.types[i] = type; + } + swig_module.types[i] = 0; + +#ifdef SWIGRUNTIME_DEBUG + printf("**** SWIG_InitializeModule: Cast List ******\n"); + for (i = 0; i < swig_module.size; ++i) { + int j = 0; + swig_cast_info *cast = swig_module.cast_initial[i]; + printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); + while (cast->type) { + printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); + cast++; + ++j; + } + printf("---- Total casts: %d\n",j); + } + printf("**** SWIG_InitializeModule: Cast List ******\n"); +#endif +} + +/* This function will propagate the clientdata field of type to +* any new swig_type_info structures that have been added into the list +* of equivalent types. It is like calling +* SWIG_TypeClientData(type, clientdata) a second time. +*/ +SWIGRUNTIME void +SWIG_PropagateClientData(void) { + size_t i; + swig_cast_info *equiv; + static int init_run = 0; + + if (init_run) return; + init_run = 1; + + for (i = 0; i < swig_module.size; i++) { + if (swig_module.types[i]->clientdata) { + equiv = swig_module.types[i]->cast; + while (equiv) { + if (!equiv->converter) { + if (equiv->type && !equiv->type->clientdata) + SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); + } + equiv = equiv->next; + } + } + } +} + +#ifdef __cplusplus +#if 0 +{ + /* c-mode */ +#endif +} +#endif + + + +#ifdef __cplusplus +extern "C" { +#endif + + /* Python-specific SWIG API */ +#define SWIG_newvarlink() SWIG_Python_newvarlink() +#define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr) +#define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants) + + /* ----------------------------------------------------------------------------- + * global variable support code. + * ----------------------------------------------------------------------------- */ + + typedef struct swig_globalvar { + char *name; /* Name of global variable */ + PyObject *(*get_attr)(void); /* Return the current value */ + int (*set_attr)(PyObject *); /* Set the value */ + struct swig_globalvar *next; + } swig_globalvar; + + typedef struct swig_varlinkobject { + PyObject_HEAD + swig_globalvar *vars; + } swig_varlinkobject; + + SWIGINTERN PyObject * + swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) { +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_InternFromString(""); +#else + return PyString_FromString(""); +#endif + } + + SWIGINTERN PyObject * + swig_varlink_str(swig_varlinkobject *v) { +#if PY_VERSION_HEX >= 0x03000000 + PyObject *str = PyUnicode_InternFromString("("); + PyObject *tail; + PyObject *joined; + swig_globalvar *var; + for (var = v->vars; var; var=var->next) { + tail = PyUnicode_FromString(var->name); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; + if (var->next) { + tail = PyUnicode_InternFromString(", "); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; + } + } + tail = PyUnicode_InternFromString(")"); + joined = PyUnicode_Concat(str, tail); + Py_DecRef(str); + Py_DecRef(tail); + str = joined; +#else + PyObject *str = PyString_FromString("("); + swig_globalvar *var; + for (var = v->vars; var; var=var->next) { + PyString_ConcatAndDel(&str,PyString_FromString(var->name)); + if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", ")); + } + PyString_ConcatAndDel(&str,PyString_FromString(")")); +#endif + return str; + } + + SWIGINTERN int + swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { + char *tmp; + PyObject *str = swig_varlink_str(v); + fprintf(fp,"Swig global variables "); + fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str)); + SWIG_Python_str_DelForPy3(tmp); + Py_DECREF(str); + return 0; + } + + SWIGINTERN void + swig_varlink_dealloc(swig_varlinkobject *v) { + swig_globalvar *var = v->vars; + while (var) { + swig_globalvar *n = var->next; + free(var->name); + free(var); + var = n; + } + } + + SWIGINTERN PyObject * + swig_varlink_getattr(swig_varlinkobject *v, char *n) { + PyObject *res = NULL; + swig_globalvar *var = v->vars; + while (var) { + if (strcmp(var->name,n) == 0) { + res = (*var->get_attr)(); + break; + } + var = var->next; + } + if (res == NULL && !PyErr_Occurred()) { + PyErr_SetString(PyExc_NameError,"Unknown C global variable"); + } + return res; + } + + SWIGINTERN int + swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { + int res = 1; + swig_globalvar *var = v->vars; + while (var) { + if (strcmp(var->name,n) == 0) { + res = (*var->set_attr)(p); + break; + } + var = var->next; + } + if (res == 1 && !PyErr_Occurred()) { + PyErr_SetString(PyExc_NameError,"Unknown C global variable"); + } + return res; + } + + SWIGINTERN PyTypeObject* + swig_varlink_type(void) { + static char varlink__doc__[] = "Swig var link object"; + static PyTypeObject varlink_type; + static int type_init = 0; + if (!type_init) { + const PyTypeObject tmp + = { + /* PyObject header changed in Python 3 */ +#if PY_VERSION_HEX >= 0x03000000 + PyVarObject_HEAD_INIT(&PyType_Type, 0) +#else + PyObject_HEAD_INIT(NULL) + 0, /* Number of items in variable part (ob_size) */ +#endif + (char *)"swigvarlink", /* Type name (tp_name) */ + sizeof(swig_varlinkobject), /* Basic size (tp_basicsize) */ + 0, /* Itemsize (tp_itemsize) */ + (destructor) swig_varlink_dealloc, /* Deallocator (tp_dealloc) */ + (printfunc) swig_varlink_print, /* Print (tp_print) */ + (getattrfunc) swig_varlink_getattr, /* get attr (tp_getattr) */ + (setattrfunc) swig_varlink_setattr, /* Set attr (tp_setattr) */ + 0, /* tp_compare */ + (reprfunc) swig_varlink_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + (reprfunc) swig_varlink_str, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + 0, /* tp_flags */ + varlink__doc__, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ +#if PY_VERSION_HEX >= 0x02020000 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */ +#endif +#if PY_VERSION_HEX >= 0x02030000 + 0, /* tp_del */ +#endif +#ifdef COUNT_ALLOCS + 0,0,0,0 /* tp_alloc -> tp_next */ +#endif + }; + varlink_type = tmp; + /* for Python 3 we already assigned ob_type in PyVarObject_HEAD_INIT() */ +#if PY_VERSION_HEX < 0x03000000 + varlink_type.ob_type = &PyType_Type; +#endif + type_init = 1; + } + return &varlink_type; + } + + /* Create a variable linking object for use later */ + SWIGINTERN PyObject * + SWIG_Python_newvarlink(void) { + swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type()); + if (result) { + result->vars = 0; + } + return ((PyObject*) result); + } + + SWIGINTERN void + SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) { + swig_varlinkobject *v = (swig_varlinkobject *) p; + swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar)); + if (gv) { + size_t size = strlen(name)+1; + gv->name = (char *)malloc(size); + if (gv->name) { + strncpy(gv->name,name,size); + gv->get_attr = get_attr; + gv->set_attr = set_attr; + gv->next = v->vars; + } + } + v->vars = gv; + } + + SWIGINTERN PyObject * + SWIG_globals(void) { + static PyObject *_SWIG_globals = 0; + if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink(); + return _SWIG_globals; + } + + /* ----------------------------------------------------------------------------- + * constants/methods manipulation + * ----------------------------------------------------------------------------- */ + + /* Install Constants */ + SWIGINTERN void + SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { + PyObject *obj = 0; + size_t i; + for (i = 0; constants[i].type; ++i) { + switch(constants[i].type) { + case SWIG_PY_POINTER: + obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); + break; + case SWIG_PY_BINARY: + obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype)); + break; + default: + obj = 0; + break; + } + if (obj) { + PyDict_SetItemString(d, constants[i].name, obj); + Py_DECREF(obj); + } + } + } + + /* -----------------------------------------------------------------------------*/ + /* Fix SwigMethods to carry the callback ptrs when needed */ + /* -----------------------------------------------------------------------------*/ + + SWIGINTERN void + SWIG_Python_FixMethods(PyMethodDef *methods, + swig_const_info *const_table, + swig_type_info **types, + swig_type_info **types_initial) { + size_t i; + for (i = 0; methods[i].ml_name; ++i) { + const char *c = methods[i].ml_doc; + if (c && (c = strstr(c, "swig_ptr: "))) { + int j; + swig_const_info *ci = 0; + const char *name = c + 10; + for (j = 0; const_table[j].type; ++j) { + if (strncmp(const_table[j].name, name, + strlen(const_table[j].name)) == 0) { + ci = &(const_table[j]); + break; + } + } + if (ci) { + size_t shift = (ci->ptype) - types; + swig_type_info *ty = types_initial[shift]; + size_t ldoc = (c - methods[i].ml_doc); + size_t lptr = strlen(ty->name)+2*sizeof(void*)+2; + char *ndoc = (char*)malloc(ldoc + lptr + 10); + if (ndoc) { + char *buff = ndoc; + void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0; + if (ptr) { + strncpy(buff, methods[i].ml_doc, ldoc); + buff += ldoc; + strncpy(buff, "swig_ptr: ", 10); + buff += 10; + SWIG_PackVoidPtr(buff, ptr, ty->name, lptr); + methods[i].ml_doc = ndoc; + } + } + } + } + } + } + +#ifdef __cplusplus +} +#endif + +/* -----------------------------------------------------------------------------* + * Partial Init method + * -----------------------------------------------------------------------------*/ + +#ifdef __cplusplus +extern "C" +#endif + +SWIGEXPORT +#if PY_VERSION_HEX >= 0x03000000 +PyObject* +#else +void +#endif +SWIG_init(void) { + PyObject *m, *d; +#if PY_VERSION_HEX >= 0x03000000 + static struct PyModuleDef SWIG_module = { + PyModuleDef_HEAD_INIT, + (char *) SWIG_name, + NULL, + -1, + SwigMethods, + NULL, + NULL, + NULL, + NULL + }; +#endif + + /* Fix SwigMethods to carry the callback ptrs when needed */ + SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); + +#if PY_VERSION_HEX >= 0x03000000 + m = PyModule_Create(&SWIG_module); +#else + m = Py_InitModule((char *) SWIG_name, SwigMethods); +#endif + d = PyModule_GetDict(m); + + SWIG_InitializeModule(0); + SWIG_InstallConstants(d,swig_const_table); + + + SWIG_Python_SetConstant(d, "GRIB_SUCCESS",SWIG_From_int((int)(0))); + SWIG_Python_SetConstant(d, "GRIB_END_OF_FILE",SWIG_From_int((int)(-1))); + SWIG_Python_SetConstant(d, "GRIB_INTERNAL_ERROR",SWIG_From_int((int)(-2))); + SWIG_Python_SetConstant(d, "GRIB_BUFFER_TOO_SMALL",SWIG_From_int((int)(-3))); + SWIG_Python_SetConstant(d, "GRIB_NOT_IMPLEMENTED",SWIG_From_int((int)(-4))); + SWIG_Python_SetConstant(d, "GRIB_7777_NOT_FOUND",SWIG_From_int((int)(-5))); + SWIG_Python_SetConstant(d, "GRIB_ARRAY_TOO_SMALL",SWIG_From_int((int)(-6))); + SWIG_Python_SetConstant(d, "GRIB_FILE_NOT_FOUND",SWIG_From_int((int)(-7))); + SWIG_Python_SetConstant(d, "GRIB_CODE_NOT_FOUND_IN_TABLE",SWIG_From_int((int)(-8))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_ARRAY_SIZE",SWIG_From_int((int)(-9))); + SWIG_Python_SetConstant(d, "GRIB_NOT_FOUND",SWIG_From_int((int)(-10))); + SWIG_Python_SetConstant(d, "GRIB_IO_PROBLEM",SWIG_From_int((int)(-11))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_MESSAGE",SWIG_From_int((int)(-12))); + SWIG_Python_SetConstant(d, "GRIB_DECODING_ERROR",SWIG_From_int((int)(-13))); + SWIG_Python_SetConstant(d, "GRIB_ENCODING_ERROR",SWIG_From_int((int)(-14))); + SWIG_Python_SetConstant(d, "GRIB_NO_MORE_IN_SET",SWIG_From_int((int)(-15))); + SWIG_Python_SetConstant(d, "GRIB_GEOCALCULUS_PROBLEM",SWIG_From_int((int)(-16))); + SWIG_Python_SetConstant(d, "GRIB_OUT_OF_MEMORY",SWIG_From_int((int)(-17))); + SWIG_Python_SetConstant(d, "GRIB_READ_ONLY",SWIG_From_int((int)(-18))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_ARGUMENT",SWIG_From_int((int)(-19))); + SWIG_Python_SetConstant(d, "GRIB_NULL_HANDLE",SWIG_From_int((int)(-20))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_SECTION_NUMBER",SWIG_From_int((int)(-21))); + SWIG_Python_SetConstant(d, "GRIB_VALUE_CANNOT_BE_MISSING",SWIG_From_int((int)(-22))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_LENGTH",SWIG_From_int((int)(-23))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_TYPE",SWIG_From_int((int)(-24))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_STEP",SWIG_From_int((int)(-25))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_STEP_UNIT",SWIG_From_int((int)(-26))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_FILE",SWIG_From_int((int)(-27))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_GRIB",SWIG_From_int((int)(-28))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_INDEX",SWIG_From_int((int)(-29))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_ITERATOR",SWIG_From_int((int)(-30))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_KEYS_ITERATOR",SWIG_From_int((int)(-31))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_NEAREST",SWIG_From_int((int)(-32))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_ORDERBY",SWIG_From_int((int)(-33))); + SWIG_Python_SetConstant(d, "GRIB_MISSING_KEY",SWIG_From_int((int)(-34))); + SWIG_Python_SetConstant(d, "GRIB_OUT_OF_AREA",SWIG_From_int((int)(-35))); + SWIG_Python_SetConstant(d, "GRIB_CONCEPT_NO_MATCH",SWIG_From_int((int)(-36))); + SWIG_Python_SetConstant(d, "GRIB_NO_DEFINITIONS",SWIG_From_int((int)(-37))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_TYPE",SWIG_From_int((int)(-38))); + SWIG_Python_SetConstant(d, "GRIB_END",SWIG_From_int((int)(-39))); + SWIG_Python_SetConstant(d, "GRIB_NO_VALUES",SWIG_From_int((int)(-40))); + SWIG_Python_SetConstant(d, "GRIB_WRONG_GRID",SWIG_From_int((int)(-41))); + SWIG_Python_SetConstant(d, "GRIB_END_OF_INDEX",SWIG_From_int((int)(-42))); + SWIG_Python_SetConstant(d, "GRIB_NULL_INDEX",SWIG_From_int((int)(-43))); + SWIG_Python_SetConstant(d, "GRIB_PREMATURE_END_OF_FILE",SWIG_From_int((int)(-44))); + SWIG_Python_SetConstant(d, "GRIB_INTERNAL_ARRAY_TOO_SMALL",SWIG_From_int((int)(-45))); + SWIG_Python_SetConstant(d, "GRIB_MESSAGE_TOO_LARGE",SWIG_From_int((int)(-46))); + SWIG_Python_SetConstant(d, "GRIB_CONSTANT_FIELD",SWIG_From_int((int)(-47))); + SWIG_Python_SetConstant(d, "GRIB_SWITCH_NO_MATCH",SWIG_From_int((int)(-48))); + SWIG_Python_SetConstant(d, "GRIB_UNDERFLOW",SWIG_From_int((int)(-49))); + SWIG_Python_SetConstant(d, "GRIB_MESSAGE_MALFORMED",SWIG_From_int((int)(-50))); + SWIG_Python_SetConstant(d, "GRIB_CORRUPTED_INDEX",SWIG_From_int((int)(-51))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_BPV",SWIG_From_int((int)(-52))); + SWIG_Python_SetConstant(d, "GRIB_DIFFERENT_EDITION",SWIG_From_int((int)(-53))); + SWIG_Python_SetConstant(d, "GRIB_VALUE_DIFFERENT",SWIG_From_int((int)(-54))); + SWIG_Python_SetConstant(d, "GRIB_INVALID_KEY_VALUE",SWIG_From_int((int)(-55))); + + import_array(); + +#if PY_VERSION_HEX >= 0x03000000 + return m; +#else + return; +#endif +} + diff --git a/python/swig_wrap_numpy.py b/python/swig_wrap_numpy.py new file mode 100644 index 000000000..02511d93d --- /dev/null +++ b/python/swig_wrap_numpy.py @@ -0,0 +1,570 @@ +# This file was automatically generated by SWIG (http://www.swig.org). +# Version 1.3.40 +# +# Do not make changes to this file unless you know what you are doing--modify +# the SWIG interface file instead. +# This file is compatible with both classic and new-style classes. + +from sys import version_info +if version_info >= (2,6,0): + def swig_import_helper(): + from os.path import dirname + import imp + fp = None + try: + fp, pathname, description = imp.find_module('_gribapi_swig', [dirname(__file__)]) + except ImportError: + import _gribapi_swig + return _gribapi_swig + if fp is not None: + try: + _mod = imp.load_module('_gribapi_swig', fp, pathname, description) + finally: + fp.close() + return _mod + _gribapi_swig = swig_import_helper() + del swig_import_helper +else: + import _gribapi_swig +del version_info +try: + _swig_property = property +except NameError: + pass # Python < 2.2 doesn't have 'property'. +def _swig_setattr_nondynamic(self,class_type,name,value,static=1): + if (name == "thisown"): return self.this.own(value) + if (name == "this"): + if type(value).__name__ == 'SwigPyObject': + self.__dict__[name] = value + return + method = class_type.__swig_setmethods__.get(name,None) + if method: return method(self,value) + if (not static) or hasattr(self,name): + self.__dict__[name] = value + else: + raise AttributeError("You cannot add attributes to %s" % self) + +def _swig_setattr(self,class_type,name,value): + return _swig_setattr_nondynamic(self,class_type,name,value,0) + +def _swig_getattr(self,class_type,name): + if (name == "thisown"): return self.this.own() + method = class_type.__swig_getmethods__.get(name,None) + if method: return method(self) + raise AttributeError(name) + +def _swig_repr(self): + try: strthis = "proxy of " + self.this.__repr__() + except: strthis = "" + return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) + +try: + _object = object + _newclass = 1 +except AttributeError: + class _object : pass + _newclass = 0 + + + +def cdata(*args): + return _gribapi_swig.cdata(*args) +cdata = _gribapi_swig.cdata + +def memmove(*args): + return _gribapi_swig.memmove(*args) +memmove = _gribapi_swig.memmove +GRIB_SUCCESS = _gribapi_swig.GRIB_SUCCESS +GRIB_END_OF_FILE = _gribapi_swig.GRIB_END_OF_FILE +GRIB_INTERNAL_ERROR = _gribapi_swig.GRIB_INTERNAL_ERROR +GRIB_BUFFER_TOO_SMALL = _gribapi_swig.GRIB_BUFFER_TOO_SMALL +GRIB_NOT_IMPLEMENTED = _gribapi_swig.GRIB_NOT_IMPLEMENTED +GRIB_7777_NOT_FOUND = _gribapi_swig.GRIB_7777_NOT_FOUND +GRIB_ARRAY_TOO_SMALL = _gribapi_swig.GRIB_ARRAY_TOO_SMALL +GRIB_FILE_NOT_FOUND = _gribapi_swig.GRIB_FILE_NOT_FOUND +GRIB_CODE_NOT_FOUND_IN_TABLE = _gribapi_swig.GRIB_CODE_NOT_FOUND_IN_TABLE +GRIB_WRONG_ARRAY_SIZE = _gribapi_swig.GRIB_WRONG_ARRAY_SIZE +GRIB_NOT_FOUND = _gribapi_swig.GRIB_NOT_FOUND +GRIB_IO_PROBLEM = _gribapi_swig.GRIB_IO_PROBLEM +GRIB_INVALID_MESSAGE = _gribapi_swig.GRIB_INVALID_MESSAGE +GRIB_DECODING_ERROR = _gribapi_swig.GRIB_DECODING_ERROR +GRIB_ENCODING_ERROR = _gribapi_swig.GRIB_ENCODING_ERROR +GRIB_NO_MORE_IN_SET = _gribapi_swig.GRIB_NO_MORE_IN_SET +GRIB_GEOCALCULUS_PROBLEM = _gribapi_swig.GRIB_GEOCALCULUS_PROBLEM +GRIB_OUT_OF_MEMORY = _gribapi_swig.GRIB_OUT_OF_MEMORY +GRIB_READ_ONLY = _gribapi_swig.GRIB_READ_ONLY +GRIB_INVALID_ARGUMENT = _gribapi_swig.GRIB_INVALID_ARGUMENT +GRIB_NULL_HANDLE = _gribapi_swig.GRIB_NULL_HANDLE +GRIB_INVALID_SECTION_NUMBER = _gribapi_swig.GRIB_INVALID_SECTION_NUMBER +GRIB_VALUE_CANNOT_BE_MISSING = _gribapi_swig.GRIB_VALUE_CANNOT_BE_MISSING +GRIB_WRONG_LENGTH = _gribapi_swig.GRIB_WRONG_LENGTH +GRIB_INVALID_TYPE = _gribapi_swig.GRIB_INVALID_TYPE +GRIB_WRONG_STEP = _gribapi_swig.GRIB_WRONG_STEP +GRIB_WRONG_STEP_UNIT = _gribapi_swig.GRIB_WRONG_STEP_UNIT +GRIB_INVALID_FILE = _gribapi_swig.GRIB_INVALID_FILE +GRIB_INVALID_GRIB = _gribapi_swig.GRIB_INVALID_GRIB +GRIB_INVALID_INDEX = _gribapi_swig.GRIB_INVALID_INDEX +GRIB_INVALID_ITERATOR = _gribapi_swig.GRIB_INVALID_ITERATOR +GRIB_INVALID_KEYS_ITERATOR = _gribapi_swig.GRIB_INVALID_KEYS_ITERATOR +GRIB_INVALID_NEAREST = _gribapi_swig.GRIB_INVALID_NEAREST +GRIB_INVALID_ORDERBY = _gribapi_swig.GRIB_INVALID_ORDERBY +GRIB_MISSING_KEY = _gribapi_swig.GRIB_MISSING_KEY +GRIB_OUT_OF_AREA = _gribapi_swig.GRIB_OUT_OF_AREA +GRIB_CONCEPT_NO_MATCH = _gribapi_swig.GRIB_CONCEPT_NO_MATCH +GRIB_NO_DEFINITIONS = _gribapi_swig.GRIB_NO_DEFINITIONS +GRIB_WRONG_TYPE = _gribapi_swig.GRIB_WRONG_TYPE +GRIB_END = _gribapi_swig.GRIB_END +GRIB_NO_VALUES = _gribapi_swig.GRIB_NO_VALUES +GRIB_WRONG_GRID = _gribapi_swig.GRIB_WRONG_GRID +GRIB_END_OF_INDEX = _gribapi_swig.GRIB_END_OF_INDEX +GRIB_NULL_INDEX = _gribapi_swig.GRIB_NULL_INDEX +GRIB_PREMATURE_END_OF_FILE = _gribapi_swig.GRIB_PREMATURE_END_OF_FILE +GRIB_INTERNAL_ARRAY_TOO_SMALL = _gribapi_swig.GRIB_INTERNAL_ARRAY_TOO_SMALL +GRIB_MESSAGE_TOO_LARGE = _gribapi_swig.GRIB_MESSAGE_TOO_LARGE +GRIB_CONSTANT_FIELD = _gribapi_swig.GRIB_CONSTANT_FIELD +GRIB_SWITCH_NO_MATCH = _gribapi_swig.GRIB_SWITCH_NO_MATCH +GRIB_UNDERFLOW = _gribapi_swig.GRIB_UNDERFLOW +GRIB_MESSAGE_MALFORMED = _gribapi_swig.GRIB_MESSAGE_MALFORMED +GRIB_CORRUPTED_INDEX = _gribapi_swig.GRIB_CORRUPTED_INDEX +GRIB_INVALID_BPV = _gribapi_swig.GRIB_INVALID_BPV +GRIB_DIFFERENT_EDITION = _gribapi_swig.GRIB_DIFFERENT_EDITION +GRIB_VALUE_DIFFERENT = _gribapi_swig.GRIB_VALUE_DIFFERENT +GRIB_INVALID_KEY_VALUE = _gribapi_swig.GRIB_INVALID_KEY_VALUE +class intp(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, intp, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, intp, name) + __repr__ = _swig_repr + def __init__(self): + this = _gribapi_swig.new_intp() + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _gribapi_swig.delete_intp + __del__ = lambda self : None; + def assign(self, *args): return _gribapi_swig.intp_assign(self, *args) + def value(self): return _gribapi_swig.intp_value(self) + def cast(self): return _gribapi_swig.intp_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _gribapi_swig.intp_frompointer + if _newclass:frompointer = staticmethod(_gribapi_swig.intp_frompointer) +intp_swigregister = _gribapi_swig.intp_swigregister +intp_swigregister(intp) + +def intp_frompointer(*args): + return _gribapi_swig.intp_frompointer(*args) +intp_frompointer = _gribapi_swig.intp_frompointer + +class longp(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, longp, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, longp, name) + __repr__ = _swig_repr + def __init__(self): + this = _gribapi_swig.new_longp() + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _gribapi_swig.delete_longp + __del__ = lambda self : None; + def assign(self, *args): return _gribapi_swig.longp_assign(self, *args) + def value(self): return _gribapi_swig.longp_value(self) + def cast(self): return _gribapi_swig.longp_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _gribapi_swig.longp_frompointer + if _newclass:frompointer = staticmethod(_gribapi_swig.longp_frompointer) +longp_swigregister = _gribapi_swig.longp_swigregister +longp_swigregister(longp) + +def longp_frompointer(*args): + return _gribapi_swig.longp_frompointer(*args) +longp_frompointer = _gribapi_swig.longp_frompointer + +class doublep(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, doublep, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, doublep, name) + __repr__ = _swig_repr + def __init__(self): + this = _gribapi_swig.new_doublep() + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _gribapi_swig.delete_doublep + __del__ = lambda self : None; + def assign(self, *args): return _gribapi_swig.doublep_assign(self, *args) + def value(self): return _gribapi_swig.doublep_value(self) + def cast(self): return _gribapi_swig.doublep_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _gribapi_swig.doublep_frompointer + if _newclass:frompointer = staticmethod(_gribapi_swig.doublep_frompointer) +doublep_swigregister = _gribapi_swig.doublep_swigregister +doublep_swigregister(doublep) + +def doublep_frompointer(*args): + return _gribapi_swig.doublep_frompointer(*args) +doublep_frompointer = _gribapi_swig.doublep_frompointer + + +def new_doubleArray(*args): + return _gribapi_swig.new_doubleArray(*args) +new_doubleArray = _gribapi_swig.new_doubleArray + +def delete_doubleArray(*args): + return _gribapi_swig.delete_doubleArray(*args) +delete_doubleArray = _gribapi_swig.delete_doubleArray + +def doubleArray_getitem(*args): + return _gribapi_swig.doubleArray_getitem(*args) +doubleArray_getitem = _gribapi_swig.doubleArray_getitem + +def doubleArray_setitem(*args): + return _gribapi_swig.doubleArray_setitem(*args) +doubleArray_setitem = _gribapi_swig.doubleArray_setitem + +def new_longArray(*args): + return _gribapi_swig.new_longArray(*args) +new_longArray = _gribapi_swig.new_longArray + +def delete_longArray(*args): + return _gribapi_swig.delete_longArray(*args) +delete_longArray = _gribapi_swig.delete_longArray + +def longArray_getitem(*args): + return _gribapi_swig.longArray_getitem(*args) +longArray_getitem = _gribapi_swig.longArray_getitem + +def longArray_setitem(*args): + return _gribapi_swig.longArray_setitem(*args) +longArray_setitem = _gribapi_swig.longArray_setitem + +def new_intArray(*args): + return _gribapi_swig.new_intArray(*args) +new_intArray = _gribapi_swig.new_intArray + +def delete_intArray(*args): + return _gribapi_swig.delete_intArray(*args) +delete_intArray = _gribapi_swig.delete_intArray + +def intArray_getitem(*args): + return _gribapi_swig.intArray_getitem(*args) +intArray_getitem = _gribapi_swig.intArray_getitem + +def intArray_setitem(*args): + return _gribapi_swig.intArray_setitem(*args) +intArray_setitem = _gribapi_swig.intArray_setitem + +def grib_c_new_from_file(*args): + return _gribapi_swig.grib_c_new_from_file(*args) +grib_c_new_from_file = _gribapi_swig.grib_c_new_from_file + +def grib_c_new_bufr_from_file(*args): + return _gribapi_swig.grib_c_new_bufr_from_file(*args) +grib_c_new_bufr_from_file = _gribapi_swig.grib_c_new_bufr_from_file + +def grib_c_new_gts_from_file(*args): + return _gribapi_swig.grib_c_new_gts_from_file(*args) +grib_c_new_gts_from_file = _gribapi_swig.grib_c_new_gts_from_file + +def grib_c_iterator_new(*args): + return _gribapi_swig.grib_c_iterator_new(*args) +grib_c_iterator_new = _gribapi_swig.grib_c_iterator_new + +def grib_c_keys_iterator_new(*args): + return _gribapi_swig.grib_c_keys_iterator_new(*args) +grib_c_keys_iterator_new = _gribapi_swig.grib_c_keys_iterator_new + +def grib_c_new_from_samples(*args): + return _gribapi_swig.grib_c_new_from_samples(*args) +grib_c_new_from_samples = _gribapi_swig.grib_c_new_from_samples + +def grib_c_index_new_from_file(*args): + return _gribapi_swig.grib_c_index_new_from_file(*args) +grib_c_index_new_from_file = _gribapi_swig.grib_c_index_new_from_file + +def grib_c_index_add_file(*args): + return _gribapi_swig.grib_c_index_add_file(*args) +grib_c_index_add_file = _gribapi_swig.grib_c_index_add_file + +def grib_c_new_from_index(*args): + return _gribapi_swig.grib_c_new_from_index(*args) +grib_c_new_from_index = _gribapi_swig.grib_c_new_from_index + +def grib_c_index_write(*args): + return _gribapi_swig.grib_c_index_write(*args) +grib_c_index_write = _gribapi_swig.grib_c_index_write + +def grib_c_index_read(*args): + return _gribapi_swig.grib_c_index_read(*args) +grib_c_index_read = _gribapi_swig.grib_c_index_read + +def grib_c_new_from_message(*args): + return _gribapi_swig.grib_c_new_from_message(*args) +grib_c_new_from_message = _gribapi_swig.grib_c_new_from_message + +def grib_c_count_in_file(*args): + return _gribapi_swig.grib_c_count_in_file(*args) +grib_c_count_in_file = _gribapi_swig.grib_c_count_in_file + +def grib_c_release(*args): + return _gribapi_swig.grib_c_release(*args) +grib_c_release = _gribapi_swig.grib_c_release + +def grib_c_write(*args): + return _gribapi_swig.grib_c_write(*args) +grib_c_write = _gribapi_swig.grib_c_write + +def grib_c_get_size_long(*args): + return _gribapi_swig.grib_c_get_size_long(*args) +grib_c_get_size_long = _gribapi_swig.grib_c_get_size_long + +def grib_c_get_string_length(*args): + return _gribapi_swig.grib_c_get_string_length(*args) +grib_c_get_string_length = _gribapi_swig.grib_c_get_string_length + +def grib_c_clone(*args): + return _gribapi_swig.grib_c_clone(*args) +grib_c_clone = _gribapi_swig.grib_c_clone + +def grib_c_copy_namespace(*args): + return _gribapi_swig.grib_c_copy_namespace(*args) +grib_c_copy_namespace = _gribapi_swig.grib_c_copy_namespace + +def grib_c_get_message_size(*args): + return _gribapi_swig.grib_c_get_message_size(*args) +grib_c_get_message_size = _gribapi_swig.grib_c_get_message_size + +def grib_c_get_native_type(*args): + return _gribapi_swig.grib_c_get_native_type(*args) +grib_c_get_native_type = _gribapi_swig.grib_c_get_native_type + +def grib_c_multi_new(): + return _gribapi_swig.grib_c_multi_new() +grib_c_multi_new = _gribapi_swig.grib_c_multi_new + +def grib_c_multi_support_on(): + return _gribapi_swig.grib_c_multi_support_on() +grib_c_multi_support_on = _gribapi_swig.grib_c_multi_support_on + +def grib_c_multi_write(*args): + return _gribapi_swig.grib_c_multi_write(*args) +grib_c_multi_write = _gribapi_swig.grib_c_multi_write + +def grib_c_multi_support_off(): + return _gribapi_swig.grib_c_multi_support_off() +grib_c_multi_support_off = _gribapi_swig.grib_c_multi_support_off + +def grib_c_multi_release(*args): + return _gribapi_swig.grib_c_multi_release(*args) +grib_c_multi_release = _gribapi_swig.grib_c_multi_release + +def grib_c_multi_append(*args): + return _gribapi_swig.grib_c_multi_append(*args) +grib_c_multi_append = _gribapi_swig.grib_c_multi_append + +def grib_c_gribex_mode_on(): + return _gribapi_swig.grib_c_gribex_mode_on() +grib_c_gribex_mode_on = _gribapi_swig.grib_c_gribex_mode_on + +def grib_c_gribex_mode_off(): + return _gribapi_swig.grib_c_gribex_mode_off() +grib_c_gribex_mode_off = _gribapi_swig.grib_c_gribex_mode_off + +def grib_c_keys_iterator_next(*args): + return _gribapi_swig.grib_c_keys_iterator_next(*args) +grib_c_keys_iterator_next = _gribapi_swig.grib_c_keys_iterator_next + +def grib_c_keys_iterator_delete(*args): + return _gribapi_swig.grib_c_keys_iterator_delete(*args) +grib_c_keys_iterator_delete = _gribapi_swig.grib_c_keys_iterator_delete + +def grib_c_skip_computed(*args): + return _gribapi_swig.grib_c_skip_computed(*args) +grib_c_skip_computed = _gribapi_swig.grib_c_skip_computed + +def grib_c_skip_coded(*args): + return _gribapi_swig.grib_c_skip_coded(*args) +grib_c_skip_coded = _gribapi_swig.grib_c_skip_coded + +def grib_c_skip_edition_specific(*args): + return _gribapi_swig.grib_c_skip_edition_specific(*args) +grib_c_skip_edition_specific = _gribapi_swig.grib_c_skip_edition_specific + +def grib_c_skip_duplicates(*args): + return _gribapi_swig.grib_c_skip_duplicates(*args) +grib_c_skip_duplicates = _gribapi_swig.grib_c_skip_duplicates + +def grib_c_skip_read_only(*args): + return _gribapi_swig.grib_c_skip_read_only(*args) +grib_c_skip_read_only = _gribapi_swig.grib_c_skip_read_only + +def grib_c_skip_function(*args): + return _gribapi_swig.grib_c_skip_function(*args) +grib_c_skip_function = _gribapi_swig.grib_c_skip_function + +def grib_c_keys_iterator_rewind(*args): + return _gribapi_swig.grib_c_keys_iterator_rewind(*args) +grib_c_keys_iterator_rewind = _gribapi_swig.grib_c_keys_iterator_rewind + +def grib_c_keys_iterator_get_name(*args): + return _gribapi_swig.grib_c_keys_iterator_get_name(*args) +grib_c_keys_iterator_get_name = _gribapi_swig.grib_c_keys_iterator_get_name + +def grib_c_index_get_size_long(*args): + return _gribapi_swig.grib_c_index_get_size_long(*args) +grib_c_index_get_size_long = _gribapi_swig.grib_c_index_get_size_long + +def grib_c_index_get_long(*args): + return _gribapi_swig.grib_c_index_get_long(*args) +grib_c_index_get_long = _gribapi_swig.grib_c_index_get_long + +def grib_c_index_get_real8(*args): + return _gribapi_swig.grib_c_index_get_real8(*args) +grib_c_index_get_real8 = _gribapi_swig.grib_c_index_get_real8 + +def grib_c_index_get_string(*args): + return _gribapi_swig.grib_c_index_get_string(*args) +grib_c_index_get_string = _gribapi_swig.grib_c_index_get_string + +def grib_c_index_select_long(*args): + return _gribapi_swig.grib_c_index_select_long(*args) +grib_c_index_select_long = _gribapi_swig.grib_c_index_select_long + +def grib_c_index_select_real8(*args): + return _gribapi_swig.grib_c_index_select_real8(*args) +grib_c_index_select_real8 = _gribapi_swig.grib_c_index_select_real8 + +def grib_c_index_select_string(*args): + return _gribapi_swig.grib_c_index_select_string(*args) +grib_c_index_select_string = _gribapi_swig.grib_c_index_select_string + +def grib_c_index_release(*args): + return _gribapi_swig.grib_c_index_release(*args) +grib_c_index_release = _gribapi_swig.grib_c_index_release + +def grib_c_iterator_delete(*args): + return _gribapi_swig.grib_c_iterator_delete(*args) +grib_c_iterator_delete = _gribapi_swig.grib_c_iterator_delete + +def grib_c_iterator_next(*args): + return _gribapi_swig.grib_c_iterator_next(*args) +grib_c_iterator_next = _gribapi_swig.grib_c_iterator_next + +def grib_c_get_string(*args): + return _gribapi_swig.grib_c_get_string(*args) +grib_c_get_string = _gribapi_swig.grib_c_get_string + +def grib_c_set_string(*args): + return _gribapi_swig.grib_c_set_string(*args) +grib_c_set_string = _gribapi_swig.grib_c_set_string + +def grib_c_get_long(*args): + return _gribapi_swig.grib_c_get_long(*args) +grib_c_get_long = _gribapi_swig.grib_c_get_long + +def grib_c_set_long(*args): + return _gribapi_swig.grib_c_set_long(*args) +grib_c_set_long = _gribapi_swig.grib_c_set_long + +def grib_c_get_double(*args): + return _gribapi_swig.grib_c_get_double(*args) +grib_c_get_double = _gribapi_swig.grib_c_get_double + +def grib_c_set_double(*args): + return _gribapi_swig.grib_c_set_double(*args) +grib_c_set_double = _gribapi_swig.grib_c_set_double + +def grib_c_set_real8_array(*args): + return _gribapi_swig.grib_c_set_real8_array(*args) +grib_c_set_real8_array = _gribapi_swig.grib_c_set_real8_array + +def grib_c_get_real8_array(*args): + return _gribapi_swig.grib_c_get_real8_array(*args) +grib_c_get_real8_array = _gribapi_swig.grib_c_get_real8_array + +def grib_c_get_long_array(*args): + return _gribapi_swig.grib_c_get_long_array(*args) +grib_c_get_long_array = _gribapi_swig.grib_c_get_long_array + +def grib_c_set_long_array(*args): + return _gribapi_swig.grib_c_set_long_array(*args) +grib_c_set_long_array = _gribapi_swig.grib_c_set_long_array + +def grib_c_get_real8_element(*args): + return _gribapi_swig.grib_c_get_real8_element(*args) +grib_c_get_real8_element = _gribapi_swig.grib_c_get_real8_element + +def grib_c_get_real8_elements(*args): + return _gribapi_swig.grib_c_get_real8_elements(*args) +grib_c_get_real8_elements = _gribapi_swig.grib_c_get_real8_elements + +def grib_c_set_missing(*args): + return _gribapi_swig.grib_c_set_missing(*args) +grib_c_set_missing = _gribapi_swig.grib_c_set_missing + +def grib_c_set_key_vals(*args): + return _gribapi_swig.grib_c_set_key_vals(*args) +grib_c_set_key_vals = _gribapi_swig.grib_c_set_key_vals + +def grib_c_is_missing(*args): + return _gribapi_swig.grib_c_is_missing(*args) +grib_c_is_missing = _gribapi_swig.grib_c_is_missing + +def grib_c_is_defined(*args): + return _gribapi_swig.grib_c_is_defined(*args) +grib_c_is_defined = _gribapi_swig.grib_c_is_defined + +def with_numpy(): + return _gribapi_swig.with_numpy() +with_numpy = _gribapi_swig.with_numpy + +def grib_set_double_ndarray(*args): + return _gribapi_swig.grib_set_double_ndarray(*args) +grib_set_double_ndarray = _gribapi_swig.grib_set_double_ndarray + +def grib_set_long_ndarray(*args): + return _gribapi_swig.grib_set_long_ndarray(*args) +grib_set_long_ndarray = _gribapi_swig.grib_set_long_ndarray + +def grib_get_double_ndarray(*args): + return _gribapi_swig.grib_get_double_ndarray(*args) +grib_get_double_ndarray = _gribapi_swig.grib_get_double_ndarray + +def grib_get_long_ndarray(*args): + return _gribapi_swig.grib_get_long_ndarray(*args) +grib_get_long_ndarray = _gribapi_swig.grib_get_long_ndarray + +def grib_get_double_ndelements(*args): + return _gribapi_swig.grib_get_double_ndelements(*args) +grib_get_double_ndelements = _gribapi_swig.grib_get_double_ndelements + +def grib_c_find_nearest_single(*args): + return _gribapi_swig.grib_c_find_nearest_single(*args) +grib_c_find_nearest_single = _gribapi_swig.grib_c_find_nearest_single + +def grib_c_find_nearest_four_single(*args): + return _gribapi_swig.grib_c_find_nearest_four_single(*args) +grib_c_find_nearest_four_single = _gribapi_swig.grib_c_find_nearest_four_single + +def grib_c_get_message(*args): + return _gribapi_swig.grib_c_get_message(*args) +grib_c_get_message = _gribapi_swig.grib_c_get_message + +def grib_c_get_error_string(*args): + return _gribapi_swig.grib_c_get_error_string(*args) +grib_c_get_error_string = _gribapi_swig.grib_c_get_error_string + +def no_fail_on_wrong_length(*args): + return _gribapi_swig.no_fail_on_wrong_length(*args) +no_fail_on_wrong_length = _gribapi_swig.no_fail_on_wrong_length + +def grib_c_get_api_version(): + return _gribapi_swig.grib_c_get_api_version() +grib_c_get_api_version = _gribapi_swig.grib_c_get_api_version + +def grib_c_gts_header_on(): + return _gribapi_swig.grib_c_gts_header_on() +grib_c_gts_header_on = _gribapi_swig.grib_c_gts_header_on + +def grib_c_gts_header_off(): + return _gribapi_swig.grib_c_gts_header_off() +grib_c_gts_header_off = _gribapi_swig.grib_c_gts_header_off + + diff --git a/python/test_extra.py b/python/test_extra.py new file mode 100755 index 000000000..33c3e18c0 --- /dev/null +++ b/python/test_extra.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +from gribapi import * +import sys + +input=sys.argv[1] + +fid = open(input,"r") +oid = open("test","w") + +while 1: + gid = grib_new_from_file(fid) + if gid is None: break + + print grib_get(gid,"centre") + print grib_get(gid,"centre",int) + print grib_get(gid,"centre",float) + print grib_get(gid,"centre",str) + + print "Nvalues = ",grib_get_size(gid,"values") + + values = grib_get_array(gid,"values") + print values[:10] + values = values * 2 + + grib_set_double_array(gid,"values",values) + + values = grib_get_array(gid,"values") + print values[:10] + values = values / 2 + + grib_set_double_array(gid,"values",[1]) + + values = grib_get_values(gid) + print values[:10] + + print grib_get(gid,"bitsPerValue") + grib_set(gid,"bitsPerValue",10) + print grib_get(gid,"bitsPerValue") + + grib_write(gid,oid) + + grib_release(gid) + +oid.close() +fid.close() diff --git a/python/test_general.py b/python/test_general.py new file mode 100755 index 000000000..53fb7f35e --- /dev/null +++ b/python/test_general.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python + +import sys +from gribapi import * +import random +import traceback + +VERBOSE=1 +WRITE=0 + +class Usage(Exception): + def __init__(self): + pass + +def test(): + # test new from sample + #grib_release(grib_new_from_samples("GRIB2")) + + if len(sys.argv) < 2: + raise Usage + + infile = sys.argv[1] + outfile = infile + ".out" + multifile = infile + ".multi" + clonefile = infile + ".clone" + binstrfile = infile + ".binstr" + + fid = open(infile,"r") + while 1: + gid = grib_new_from_file(fid) + if not gid: break + grib_release(gid) + fid.close() + + fid = open(infile,"r") + out = open(outfile,"w") + multi = open(outfile,"w") + clone_fid = open(clonefile,"w") + binstr_fid = open(binstrfile,"w") + + #print "Writing from binary string to ",binstrfile + #x = grib_read_file(fid) + #print len(x) + #grib_write_file(binstr_fid,x) + #grib_close_file(binstr_fid) + + print "Operating on file '%s'" % infile + + n = grib_count_in_file(fid) + print "Message count ",n + + # multi support test + grib_multi_support_on() + ismulti = "no" if (n == grib_count_in_file(fid)) else "yes" + print "Is multi field - %s" % ismulti + grib_multi_support_off() + # end multi support test + + # gribex support test on/off + print "Gribex support on/off" + grib_gribex_mode_on() + grib_gribex_mode_off + # end gribex support test + + print "Browsing through messages " + for i in range(n): + gid = grib_new_from_file(fid) + + #grib_dump(gid) + #grib_print(gid,"centre") + + if i == 0: + print "Message size: ",grib_get_message_size(gid) + nval = grib_get_size(gid,"values") + print "Number of values in message %d is %d" % (i,nval) + + print "== %s %s %s %d ==" % \ + ( \ + grib_get_string(gid,"shortName"), \ + grib_get_string(gid,"name"), \ + grib_get_string(gid,"typeOfLevel"), \ + grib_get_long(gid,"level"), \ + ) + + print "Nearest point to 10,10: " + print grib_find_nearest(gid,10,10) + + print grib_find_nearest(gid,10,10,npoints=4) + + rand_list = [] + for i in range(0,5): + rand_index = random.randint(1,nval) + rand_list.append(rand_index) + myval = grib_get_double_element(gid,"values",rand_index) + print "Random index value[%d] = %.8f" % (rand_index,myval) + + all4rand = grib_get_double_elements(gid,"values",rand_list) + print "All at once index values: ",all4rand + + centre = grib_get_string(gid,"centre") + grib_set_string(gid,"centre","ecmf") + new_centre = grib_get_string(gid,"centre") + print "Before/after string centre: %s/%s" % (centre,new_centre) + + centre = grib_get_long(gid,"centre") + grib_set_long(gid,"centre",99) + new_centre = grib_get_long(gid,"centre") + print "Before/after numeric centre: %d/%d" % (centre,new_centre) + + centre = grib_get_double(gid,"centre") + grib_set_double(gid,"centre",9) + new_centre = grib_get_double(gid,"centre") + print "Before/after numeric floating point centre: %f/%f" % (centre,new_centre) + + vals = grib_get_double_array(gid,"values") + print "Values before: ",vals[:10] + grib_set_double_array(gid,"values",(1.0, 2.0, 3.14)) + vals = grib_get_double_array(gid,"values") + print "Values after: ",vals[:10] + + print "Saving modified message to %s" % outfile + if WRITE: grib_write(gid,out) + + print "Creating and saving a clone to %s" % clonefile + clone_gid = grib_clone(gid) + if WRITE: grib_write(clone_gid,clone_fid) + grib_release(clone_gid) + + Ni = grib_get(gid,"Ni") + print "Setting Ni to missing from --> ",Ni + grib_set_missing(gid,"Ni") + assert grib_is_missing(gid,"Ni") + miss_Ni = grib_get(gid,"Ni") + print "Ni is now --> ",miss_Ni + grib_set(gid,"Ni",Ni) + new_Ni = grib_get(gid,"Ni") + print "Set Ni back to its original value --> ",new_Ni + assert Ni == new_Ni + + print "Check some keys to see if they are defined" + assert grib_is_defined(gid,"Ni") + assert grib_is_defined(gid,"edition") + assert not grib_is_defined(gid,"DarkThrone") + + #grib_multi_write(gid,multi) + + + grib_release(gid) + + fid.close() + out.close() + clone_fid.close() + print "Closed file" + + +def main(): + try: + test() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + except Usage: + print "Usage: %s infile" % sys.argv[0] + sys.exit(2) + +if __name__ == "__main__": + main() + print "------------------------------------" diff --git a/python/test_index.py b/python/test_index.py new file mode 100755 index 000000000..8f09605b8 --- /dev/null +++ b/python/test_index.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python + +import sys +from gribapi import * +from array import array +import random +import traceback +import itertools + +VERBOSE=1 +WRITE=0 + +class Usage(Exception): + def __init__(self): + pass + +def product(*args, **kwds): + # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy + # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 + pools = map(tuple, args) * kwds.get('repeat', 1) + result = [[]] + for pool in pools: + result = [x+[y] for x in result for y in pool] + for prod in result: + yield tuple(prod) + +def test(): + # test new from sample + #grib_release(grib_new_from_samples("GRIB2")) + + if len(sys.argv) < 2: + raise Usage + + infile = sys.argv[1] + index_keys = ["shortName","level","number","step"] + + print "indexing..." + iid = grib_index_new_from_file(infile,index_keys) + print "end indexing..." + + index_vals = [] + + for key in index_keys: + print "%sSize=%d" % ( + key, + grib_index_get_size(iid,key) + ) + + key_vals = grib_index_get_string(iid,key) + print " ".join(key_vals) + + index_vals.append(key_vals) + + for prod in product(*index_vals): + for i in range(len(index_keys)): + grib_index_select_string(iid,index_keys[i],str(prod[i])) + + while 1: + gid = grib_new_from_index(iid) + if gid is None: break + print " ".join(["%s=%s" % (key,grib_get_string(gid,key)) for key in index_keys]) + grib_release(gid) + + grib_index_release(iid) + + +def main(): + try: + test() + except GribInternalError,err: + if VERBOSE: + traceback.print_exc(file=sys.stderr) + else: + print >>sys.stderr,err.msg + + return 1 + except Usage: + print "Usage: %s infile" % sys.argv[0] + sys.exit(2) + +if __name__ == "__main__": + main() + #print "------------------------------------" diff --git a/python/test_iterator.py b/python/test_iterator.py new file mode 100755 index 000000000..149c891f1 --- /dev/null +++ b/python/test_iterator.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python + +import sys +from gribapi import * +import profile + +def main(): + infile = sys.argv[1] + fid = open(infile,"r") + count = grib_count_in_file(fid) + + for i in range(count): + gid = grib_new_from_file(fid) + nval = grib_get_size(gid,"values") + iterid = grib_iterator_new(gid,0) + + missingValue = grib_get_double(gid,"missingValue") + + i=0 + while 1: + result = grib_iterator_next(iterid) + if not result: break + + [lat,lon,value] = result + + sys.stdout.write("- %d - lat=%.6f lon=%.6f value=" % (i,lat,lon)) + + if value == missingValue: + print "missing" + else: + print "%.6f" % value + + i += 1 + + grib_iterator_delete(iterid) + grib_release(gid) + + fid.close() + +if __name__ == "__main__": + #profile.run('main()') + main() diff --git a/python/test_keysiterator.py b/python/test_keysiterator.py new file mode 100755 index 000000000..f527a6cef --- /dev/null +++ b/python/test_keysiterator.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +import sys +from gribapi import * + +infile = sys.argv[1] +fid = open(infile,"r") +count = grib_count_in_file(fid) + +for i in range(count): + gid = grib_new_from_file(fid) + iterid = grib_keys_iterator_new(gid) + +# grib_skip_computed(iterid) +# grib_skip_coded(iterid) +# grib_skip_edition_specific(iterid) +# grib_skip_duplicated(iterid) +# grib_skip_read_only(iterid) +# grib_skip_function(iterid) + + while grib_keys_iterator_next(iterid): + keyname = grib_keys_iterator_get_name(iterid) + keyval = grib_get_string(iterid,keyname) + keytype = grib_get_native_type(gid,keyname) + print "%s = %s (%s)" % (keyname,keyval,str(keytype)) + + grib_keys_iterator_delete(iterid) + grib_release(gid) + +fid.close() + + diff --git a/rpms/grib_api.pc.in b/rpms/grib_api.pc.in new file mode 100644 index 000000000..de784dfd8 --- /dev/null +++ b/rpms/grib_api.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@ +includedir=@includedir@ +libdir=@libdir@ + +Name: grib_api +Description: The grib_api library +Version: @VERSION@ +Cflags: @CFLAGS@ +Libs: @LDFLAGS@ @LIBS@ diff --git a/rpms/grib_api.spec.in b/rpms/grib_api.spec.in new file mode 100644 index 000000000..830fa0b75 --- /dev/null +++ b/rpms/grib_api.spec.in @@ -0,0 +1,130 @@ +# -*- Mode:rpm-spec -*- +Summary: The ECMWF GRIB API is an application program interface accessible from C and FORTRAN programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages. +%define rel @RPM_RELEASE@ + +%define version @VERSION@ +%define pkgname @PACKAGE@ +%define prefix @prefix@ +%define _prefix @prefix@ +%define _target_platform @RPM_HOST_CPU@-@RPM_HOST_VENDOR@-@RPM_HOST_OS@ +%define _target_cpu @RPM_HOST_CPU@ +%define _enable_python %(test -z "@WITH_PYTHON_TRUE@" && echo 1 || echo 0) +%define _enable_fortran %(test -z "@WITH_FORTRAN_TRUE@" && echo 1 || echo 0) +%define _requires_openjpeg %(test -n "@LIB_OPENJPEG@" && echo 1 || echo 0) +%define _requires_jasper %(test -n "@LIB_JASPER@" && echo 1 || echo 0) + +%define lt_release @LT_RELEASE@ +%define lt_version @LT_CURRENT@.@LT_REVISION@.@LT_AGE@ + +%define __aclocal aclocal || aclocal -I ./macros +%define configure_args @RPM_CONFIGURE_ARGS@ + +Name: %{pkgname} +Version: %{version} +Release: %{rel} +Distribution: @LINUX_DISTRIBUTION_NAME@ @LINUX_DISTRIBUTION_VERSION@ + +Vendor: ECMWF +License: Apache Licence version 2.0 +Group: Scientific/Libraries +Source: %{pkgname}-%{version}.tar.gz +%if %{_requires_jasper} +Requires: libjasper +%endif +%if %{_requires_openjpeg} +Requires: openjpeg +%endif +Buildroot: /tmp/%{pkgname}-root +URL: http://www.ecmwf.int +Prefix: %{prefix} +BuildArchitectures: %{_target_cpu} +Packager: Software Support + +%description +The ECMWF GRIB API is an application program interface accessible from C and FORTRAN programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages. + +%changelog +* Thu Mar 15 2012 - Get the changelog from JIRA +- Multiple bugfixes + +%prep +%setup +#%patch + +%build +%GNUconfigure %{?configure_args} +# This is why we copy the CFLAGS to the CXXFLAGS in configure.in +# CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{prefix} +make + +%install +# To make things work with BUILDROOT +echo Cleaning RPM_BUILD_ROOT: "$RPM_BUILD_ROOT" +rm -rf "$RPM_BUILD_ROOT" +make DESTDIR="$RPM_BUILD_ROOT" install + +%clean + + +%files +%defattr(-, root, root) +%doc ChangeLog README AUTHORS NEWS LICENSE +#%doc doc/* +%prefix/bin/* +# %prefix/lib*/libgrib_api.so +# %prefix/lib*/libgrib_api-%{version}.so +%prefix/share/grib_api/definitions/* + +# If you install a library +%post -p /sbin/ldconfig + +# If you install a library +%postun -p /sbin/ldconfig + +%package devel +Summary: Development files for %{pkgname} +Group: Scientific/Libraries +Requires: grib_api +%description devel +Development files for %{pkgname}. +The ECMWF GRIB API is an application program interface accessible from C and FORTRAN programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages. +%files devel +%defattr(-, root, root) +#%doc doc +%prefix/include/* +%prefix/lib*/*.a +# %prefix/lib*/*.la +%prefix/lib*/pkgconfig/* +%prefix/share/grib_api/samples/* +%prefix/share/grib_api/ifs_samples/* + +# Only generate package if python is enabled +%if %{_enable_python} +%package python +Summary: Python interface for %{pkgname} +Group: Scientific/Libraries +Requires: grib_api +%description python +Python interface for %{pkgname}. +The ECMWF GRIB API is an application program interface accessible from C and FORTRAN programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages. +%files python +%defattr(-, root, root) +%prefix/lib*/python*/* +%endif + +# Only generate package if fortran is enabled +%if %{_enable_fortran} +%package fortran +Summary: Fortran 90 interface for %{pkgname} +Group: Scientific/Libraries +Requires: grib_api +%description fortran +Fortran 77 and 90 interface for %{pkgname}. +The ECMWF GRIB API is an application program interface accessible from C and FORTRAN programs developed for encoding and decoding WMO FM-92 GRIB edition 1 +and edition 2 messages. +%files fortran +%defattr(-, root,root) +%prefix/lib*/*f90* +%prefix/lib*/*f77* +%endif + diff --git a/rpms/grib_api_f90.pc.in b/rpms/grib_api_f90.pc.in new file mode 100644 index 000000000..80181eb6a --- /dev/null +++ b/rpms/grib_api_f90.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@ +includedir=@includedir@ +libdir=@libdir@ +FC=@FC@ + +Name: grib_api +Description: The grib_api library for Fortran 90 +Version: @VERSION@ +Cflags: @CFLAGS@ "@F90_MODULE_FLAG@@includedir@" +Libs: -L@libdir@ @LDFLAGS@ @LIBS@ -lgrib_api_f90 -lgrib_api diff --git a/samples/GRIB1.tmpl b/samples/GRIB1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..b82d308d8cbab22ca6b124680d23acccf31bce46 GIT binary patch literal 107 zcmZ<{@^oTg$Yx|;ygeBkR&UJ@L&cKj30mm1H*q*02C1b zVtJSp^W=6AlfeK)FrGZzz#!KG!9cze3rG|Q{x<*#Mi7e;$v7Zaloeu;eFFnS0~bgE P5U{cR2a>Gp=0E@dB;hbX literal 0 HcmV?d00001 diff --git a/samples/Makefile.am b/samples/Makefile.am new file mode 100644 index 000000000..8bf2f0257 --- /dev/null +++ b/samples/Makefile.am @@ -0,0 +1,69 @@ + +samplesdir = @GRIB_SAMPLES_PATH@ + +dist_samples_DATA = \ + GRIB1.tmpl \ + GRIB2.tmpl \ + reduced_gg_ml_grib1.tmpl \ + reduced_gg_ml_grib2.tmpl \ + reduced_gg_pl_grib1.tmpl \ + reduced_gg_pl_grib2.tmpl \ + reduced_gg_sfc_grib1.tmpl \ + reduced_gg_sfc_grib2.tmpl \ + reduced_gg_sfc_jpeg_grib2.tmpl \ + reduced_ll_sfc_grib1.tmpl \ + reduced_ll_sfc_grib2.tmpl \ + regular_gg_ml_grib1.tmpl \ + regular_gg_ml_grib2.tmpl \ + regular_gg_pl_grib1.tmpl \ + regular_gg_pl_grib2.tmpl \ + polar_stereographic_pl_grib1.tmpl \ + polar_stereographic_pl_grib2.tmpl \ + polar_stereographic_sfc_grib1.tmpl \ + polar_stereographic_sfc_grib2.tmpl \ + regular_ll_pl_grib1.tmpl \ + regular_ll_pl_grib2.tmpl \ + regular_ll_sfc_grib1.tmpl \ + regular_ll_sfc_grib2.tmpl \ + regular_gg_sfc_grib1.tmpl \ + regular_gg_sfc_grib2.tmpl \ + rotated_ll_pl_grib1.tmpl \ + rotated_ll_pl_grib2.tmpl \ + rotated_ll_sfc_grib1.tmpl \ + rotated_ll_sfc_grib2.tmpl \ + reduced_gg_pl_128_grib1.tmpl \ + reduced_gg_pl_128_grib2.tmpl \ + reduced_gg_pl_160_grib1.tmpl \ + reduced_gg_pl_160_grib2.tmpl \ + reduced_gg_pl_200_grib1.tmpl \ + reduced_gg_pl_200_grib2.tmpl \ + reduced_gg_pl_256_grib1.tmpl \ + reduced_gg_pl_256_grib2.tmpl \ + reduced_gg_pl_320_grib1.tmpl \ + reduced_gg_pl_320_grib2.tmpl \ + reduced_gg_pl_400_grib1.tmpl \ + reduced_gg_pl_400_grib2.tmpl \ + reduced_gg_pl_48_grib1.tmpl \ + reduced_gg_pl_48_grib2.tmpl \ + reduced_gg_pl_32_grib1.tmpl \ + reduced_gg_pl_32_grib2.tmpl \ + reduced_gg_pl_512_grib1.tmpl \ + reduced_gg_pl_512_grib2.tmpl \ + reduced_gg_pl_640_grib1.tmpl \ + reduced_gg_pl_640_grib2.tmpl \ + reduced_gg_pl_1024_grib1.tmpl \ + reduced_gg_pl_1024_grib2.tmpl \ + reduced_gg_pl_2000_grib1.tmpl \ + reduced_gg_pl_2000_grib2.tmpl \ + reduced_gg_pl_80_grib1.tmpl \ + reduced_gg_pl_80_grib2.tmpl \ + sh_ml_grib1.tmpl \ + sh_ml_grib2.tmpl \ + sh_pl_grib1.tmpl \ + sh_pl_grib2.tmpl \ + budg.tmpl \ + gg_sfc_grib1.tmpl \ + gg_sfc_grib2.tmpl \ + sh_sfc_grib1.tmpl \ + sh_sfc_grib2.tmpl + diff --git a/samples/budg.tmpl b/samples/budg.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..988838796ba797d9284293b9c6b31fe80b5aafb3 GIT binary patch literal 6000 zcmZ8B1-F1oE2G{9MKb^ZfJ#(4h^3bKteT!$CSE$bf zuM-|4J*W8F1wIV)3{3Z5;%D<+=JCzF-eb9Yl3SU_I*&{4>s<#p4{+*zHqvQ<)7Z27 z9ltm|aDMM}%F*W7$8qtQ?4vcOpE^OVGIy=l65kU(X}FU|vbFRlr53}cF*Xu4%T>_kZ99zyjJR?2x!O`>V7iZWxZ~v7u1!o?d z$v7Ezy6w=Gvv|Ej$bk^;x|5@VfV<(BrY?oLUd&lukxo2kjef8*m zBJDuR_N2X;r!e;%pIUFpxrd?Q;bYIIo_ilU^Zf7d<>7R=TTFIzXt+KwDPUs2lE7g; zM$Zg)iMyBQLoeJb(zC_A&|`|H(fya3$dz{8?z+VFn;YbI%RS5ele@oLo7*-wlj|#& z365QlZ#Wg_d%#EM)p7jBq5Qpvcerf(yMM0Re%~T@lW%@F5<|wlixtK6h`t`PFJ^VL zd(83xB4lF3*z+|JYeQ(?RIhlKXm<}cm1~5X;p_+JT940O&fZ%+4!KYEPy;Oeb0$bbVzueh(%{beGZR^tc;o-^)vQvLTLP`1Vw14k3P`R`$glTVONEO)cpI@d`)JG>YAm1@p4HmF+Us{B)1!~iB=2>BU4zVLM%mvxImp4)haVoq60x6hpQPN%7@sN3 z>X&sn_b1OSEjr~l_gnH+Rz!SR96x?(bY1-VgfR(q>;c?3-hkwJ9J{1Xk#?ac*qKrH z0?Bj6^YMZ6&c616y-uZ|7aF2U#8~h#p{|ht(rv%u7IzyiY zMusJa{SHqFUJ|rFV4d$&SC0r`_$AlwPB+eG*>`mubre5~ozlA2pYiaS8aO}r<+;_a zg=gKIpE>&{mL|nUHM5aqJI+zgr_{q4cXI~j_RagtJD52$lTPoG-Zgb?@?2I{+9ocY zay*fp^pzvvbxB!}YM1sotsprh=@*Q1P@tE` z#(+?tJnt)>oo+i_ulkP+I^$3IuJt7YD*_%w<|ZtRv#@It(&Ki~Pol7Ip-{X$=QtaJT(_OuU_6dJ=%NJy&Y zj86Up_S-#meA@A>XL+ackII5_vhyg`vNSZcCiPOXAbVie)bvPh1MfgeWws*ABg;Pf zc>3Jz#LT2*CzcQEUQ!tQMB<@%BHAaaf5ey2BcWQaFWy(q`S{Na(0hgkHwGPcz3;ft z>8l6NofXt0WOhhncuvTg1S07k*OBAE*_yoTfBGT(PP|{3F@eXv7b%a>2erC?e<~Yyv(Vo8*QW<_Oa!w2{9!++R4NeM3Fhq}!dKtf+JuLB75)w_NY)t>+noWWNU5)iW^Miu=jwx9c)h|0v^jL}&KvNvXL z$QqipCTD1_LtcLF{ahtKt#De_!8Db0z5Ktdo5|A(c4cE}mFYWkwb^9m_UwS%&b$eE z$8%frxP|XTKE=yR9hIX?3ySv0Iwf)WooVM%%Qz)0nsqx#6>p6{9eXb_HmozGXJ}%? zfS7K9w)20^yMzV$9}avMH7&|F^njwZO0$gFOVXWFaQ=nTAoUV)t*TBD zP&&D|R}oA6ub@8nbyjiuWbSG1j|9gEeq>wpmvh;HQ^M~@&y1WJelT)vM9=uWF~=kS z#Ae4-1!hO5M*WPj#@vl5k1@x*h^>iji9eMf=k(*0aQCEKO>Ii8Pd%45J;gbBU|eEM zc>L|uSt&@yOWtc%VBBc`7l9_1QkSn@GrbP_dHTKe+vNQ%Fg;*vu1|SJ(p%PHj+E<`@`-mVeR)Po=D@5WIsAfQg01`u;_ZT=g{6gEW#a{dWK5oY_Qza7 z{_iYqMz6d*InVOlax`fnsW(zDrq&35s8(w?XkKXYwbM28HG9;Tl`rI%<@=;f{K(v@ z^mpmq+ZReG97sQ?q`{SJu z`1;)NfUbTC{?-6>z;eHz0Z?Gq^Vh=mM!+$r*%FR{^NsU{!mr}L6TFkm5DgO43BrZnCBFr`3((wY#rGtea+wTOmMw2a-iy4>jAfbJ?E3uY zS=Bjm)oRTY%_|LG4{K#6kuliNMVX_xU7{&!5&V{A=Dgsxu@A+O;R{2}QC=aVqtm0l zpSv2qJbGGGX!P9pv$0jN-(snNg7aYs0i}UNrAl>h9DBY1cC+WVx_oIWfFzta#Rbo{D`mksUoK(iq+AoOg6w zbg$67@S4!nkfd{+=Sza;hIS9OgbLzbB>&-bCLWKy#Ij2s&YJ{k$tBg4wlc#hV|Yed zW>wb0oNI+A3hxM6vVMF^X-uiV;);QH2bQg4)jT&LC0sDDEW~Sh%>zyZC8#YJ6pKY?h{= zC_9ap%WY0z5`KjWqdz1BC(sFa(jIPDA}fIvr%d>ev_I)3Yi8mC)@fEaYY^L>Go4kD zbd5ccb)ADGA48>u$Ze&F(=j~ z`X|J*TT;8Hd1VaE49{@Q49MJ=Ez7FNhI5>AY6@QQy+l)lPen3elk7?`GuCUmwH^~E&|4Yu|ba31`dpPzSZ_d@^0m-A1#oYc}FRngi7Oy*x zpL#ttENx4AbH-5co*7xO+41S|sX4r1DTk99Qbu#+$swtEX-m`kag9l~SW9eN?8)do z@k3*7ME8q47PBnIE7`=`l?JEu=j$?*NgvoHye+BIGW+Gs$?cN!IL9Y9EGH(%ns+0A zMgA_q4zZVbw1^b%mvGQxOohxqc9|B7{c@5-EJF;GZSoR+*4nEw6tjvW#5U1#QISw1 z)=OT9FBV);7!0#?R}Ae2n|_)0ho(~TR{K=-Mfps)t7NXS-mrjkS~N}eDYGQ(PtKcy z&$&K1{c_P9HB+c<*1?!%H!%5fuvYictuhs z_7gjaH%N~cTrZSqwj0W%P2zd5ACwL)hHKILn!Ct7<1zl;{640y`knGFGMrn^`!0oY z9~3MpED~-PUF4riugQFqdM$SsKT8mme=D2J(eQ4jjLUqN>z~z^H-PQWZe@K)vQPTL z8p_ruA51Re7`P)+j&RYG3|>-70(Wm}w^T_Qn%ZY(+8!Z=}S|Wr1NuM@h=G%@|P5L6fWVr6{ZNY z1=j_L;7H+j!7WLnL?Rh4t1gl%w~(W84zWSyS?UXIFiPMr>fd^WTLOsQadH*g%DMMwC zi*AUYWW43Smd6VB2{#u0&YqIrE^n3ekzm=eS%0&Q89lP5=l;!lkW-yf$aUwWvL12D zI0HD(laHq?1HO};vWw@E!bzQ&mXy(uyD;}QP*2?4mfXX+b8>@nJ90PXe9L*7Q57!&++kU>vM=R&=Qw8H%gIV_ zOr4yLq~FMxkXp?_v*JXXvX|$#WQ@+N&m{{s<|pN{Gph50g~{SX$z91dVY6_cKpChQx%jB)xFYosBGGiiV-DS3l;n+ zf@XfPz)SEnQJ(lSyeSvU|83lA$z^VkGZ+PFK-HR@Jd0#x%9w-?tQ*Bu()04}if$#_ zgdUl^g4&|R;v>a$H1WEZ5#q-2fl4eP#BuuhU z+$M3C?gV}%O*~z^Ldq?Qk!2S
              ZR<2P-N@n7kkl3Hbw{=PCz=coDvZ`GeveJYJ8 z<;or_{3Mfe52SvN*^xLuwoA^p{G5Ui(_!=bGPxzxa+oSNG(s~dr+6d8rX@;2t0`B4Qw^9}jM znZ6k{nZGh$XZ}u)$PlEx&sd+4lu?~|IkP7BSK(g46#-v(LDUs=&rrTSe*u3e;H&b& z&HO?9<$`5`tNd#I+(I_LAHP%3i$6~!5{=E+!+xD{D!H7Ml3J0>us%gl8RCM8l0->A zDb4ShKcR4zV84hjbQ3*L*sC-1JMugWdzLIwG^>wjT$FcNv30nkYL6dNLexACQW=zRL@oxUgg6Sen zzDlyaP|ZgRLj~PI9mNTt!W{m>{FAu{^8B+~fg)Iwvo-5>4m&Thz?r{N*j4N!St)jx ztd#5#{}HE&MhbldErM@?I^j;iTj3gEiO60QC-M_b5|#?L3)_YL1kZ*0h4$hK@fP8O z0!!|+*vFhZDfaA+q^eX1xUmJs%T=3Y!v)i% zmleUK!&Dzs0`)w_pOR9!wy3j+kzJDwFZP!9lrEE{7LAm}$@a)D6gd>VEl!u$maHi4 zQ*yi{tK@IV0fhm&122R-wcg4&&3=tW3CWGhyJ~0EP1SzYN%au*Hq|s$CNx($Qms=B zD47P{F-_BeJ(Ay$-&f1|AtjZhKW-*=lm}q%i8g~Uqj&UfZs7Sx=gwr9IE8)(g54wg zL@$Y(o4-VGzM#0EE$zMFbIu=robb1(Yw38oQ(?XEePMm!@BGuE>Eh+0fua)8Grp&w zk0h+fStbb86gm_h6i}k6vd|)4(ZS+zMSo=vWb0&dX}Ba^{9Ce6 zvQyFzFky*!f#js*tpt+nl5`iJ7i|#_7GIJK6Auvml32yR#O}gRg>CtAejfLB?(YIV z`v_-S(u_p61cJZ@^eXm0@5s3)t8(t=`K;rZ!4b2f0k&~vr2f1NX2JmO6iRf z$KuPf&Z4CSpPU< zlGW^=83w@&^*L#%YJZ7H(ObTv=!~$Bps+wG9U+;SZx;U*o|io-9V~Z|?kYY}JV)j$ z`6N;ZCBh*hJIPCFYSG@JXYv$9s)AqQC!bin4b;>z*%aAyDK7Juev*!r2&J%8Bt0yh zE1fR6B=HoFkqD%%QjKJ+q^oSCY#ca|a`77e5B^eqxBP5*pvadyk+(eV0!NW)Vo2$~QcCVx%oJTN_K{yI{i)D^ z)zHcmWq=~LG^cdBqPudaimmKWPFADp6xBh6NcmR9XdAVEF>eJTyJ-kQ!r?!#n_<23 zvawxrSXHB*q`IcED!o*z)J@tt?Pu*8!#+*1-i(d0uBj9fM(zX5THU+aP_qLcUBwvV zQ4zKo>R0xrVT>sw+Lyb97n@$fE=x#bhsB0QY)y%a9US+C3ndatx#+Xa##(ypaz<@bt1WFMuC@_nUmO0Oy&E3*}y zN^j+6(BajkJ|%u7tBWd&mleG(PAfVhwaFr+agr61mD2uFM7CMBRAwj|T(q^wy=Yg_ zZJD!lxpbxUvDhZODcm9ICpsjqm2<`R+;yqJIpxCJ^6#3j`ss$#hHTv_O_PUZtFpb*06M>7_SIU#h&oE}7LO>g_7MDqU5qUa$P8 zC{^Fmz197vj!clZI~@$m#|40)Yl?64rZEkCrhDoFC zBNUNRUIELVbu~6VJUD)MA}{`HYA@YiO^PZ)=3lx*(MP&iX(vAkH19WYYROHxv(l!f z0Zw&l`hvCQDlV2@D=krUQ>qn&>X2%qYPss7TB*LIg)}2oBSBBzR(2|nD_HUzd84AY za+0E~BvvjfnOL%}WSqQFE|IU6$CezFn@e0vn9?nBUU7`0i z1LZ%^cIqzH7kySk)i%^CtLI-yZe4Q4vjc7a(K_k!hB86H->~gT2aHA3+pO=d@zfsCL~3WLC#sgIo~w6iLN$8zOU*pZ zJoQDjMSVg2MfFfstQw${sa~rPrBrdcbh-Sae0y`H%cB9W|gEB z?#z6Y(JBux4A;Fk6`5?t2;)3sPs2mwAY;1LuUKm+)(2{5XxxC_n5FKe)@t0ey|i_@ zvAU@`FI|S}73hUd9ZP>*zf&jBzScGBSh{z*-MYit}}nAA-nRdjkc92`xZYl=aet86;j=qEtU=D8cIMsF`LbP=G6=znNO%L7%LW3 zhgOOk4>z}2eak?wUQtk!-9%P@sPB4lcn5N|q3v<&@TMEhb6TG^iR-E>zM-Rv*iuF` zTNABZrS8cu5JgF7=_=rie@L2(kfJ8p9C@9zRpwt}P`xpZG(0fPFxi{frZ=WCQ@v@5 zX_aY;Zk%DWVVb_sm}JBZcMXa9Qo|6#0@FD(zgoO()iQY9DLFn!BnG%0|T%1>nMx9&$zTt>PU;mx|WQ8jF&Py2{o` zPULsdm>5tJty-s)6_}Jj3A8eSUyRA*sn6*Cv z;!M*I*Ei`N=%%W&)lJ56#ydv2$==xCILhd#pRHf4o2#S1`!8#pG=DVq!2d7ROArD* zMp-Srz}~*HeXRIV>1VAl$_#xBHP&8MR+)R5XPLeAo2|$i#rRo{md&ybzHktFYALV2 zP$jE5d{KUJNAv3%Kg)1ya!r*j$QD|;!$3`TLGDi z=y8T>)fe;+y;ieFe@b0kx>DOsx<=Yh;tUYrlS-yIr4BSw@JDnG>WHKxU*Qf&0tJtP&YUc_JB=r0lWxugFGP_K zObMnnM#8w+5T!5CDRmchDVj2EiN-_aqGT%>rL!WUbbje%#l+Gd^2Xw6MKg*{7eyES zEY@gLnmEa4=`usNl6Lq7c=A!m89D=Ph8MwkrY(jW$6umrV`5E;Tk<8@4petTxu> z)+RAeh>->lYcl-VFcrx%O4X&tk=jf8QhkP|M0Z#hhH}ZxSU>Cpb`0x+I$-P3e&{yr zAo?C1h2~?!(G6%6=7B9iKVs*x?pQRo7FD6~*a$QjbwQKS=jl?kcQxPCJ5_U3E0u4QSxQPZMKurbMT|nEa4xAS zO;oH^gc*ZP?&1*1XxV%vA8A2uBU|BHuq*rk79*>m?$9yhIASsVH3dQ^p(Lo&^wiV@ zO);sBtKt3VHxxmB!C&Bd*cYyZCqWBL7Sk@{X5)B+zu|#?ug+h;PQOt1KywOu3A2f7 zX7vSQRdV&o$}UwQH9cx4H{>?>*8FPmZJO5nqqdgRR4lBhtoUSODqN}zwTl``>Is_L zAgGD1ryKQ+r7cX`(zf6>-zy~@jMdG;SSFi?(w_9KrqsGkjpG{MUyi$c`|{2DH+8Y* zV#_?sM}1J;G9r@9Dw{wA5ob{y>Ir=_X-(1aFZ2R_of=DYC-&kfxtAy*HWF51DLxK& z!&!J3?u2QHp2QxU!lUu$cm**Y*WqjNS=eVR8GC{4L~mnm*fCUziqJdQar7qKfNX>J zBg0`HwAd&yAiVvj^OIk|!C71$I z@6#+bo`jDnMi&Xi-?hWgFSr(ei;suqsUi_0@&R56`5RBeSCL+@6SM=0fV&~SXd2W9 z=0lgz%cvZcqF2x!NCXm&X(qJl;IC&DLZx&nR2e zw6$V=)6UCFo6fczZnn0hv@EcNSVvhX%S7frBQfWg7gSxobn5blW_`oYi}|%hW|pOo zwTEqpwZ36*?Z!%H+gxfqrNrY27FA9T$Nv$-iFec>dI2?sJVho@Bo#v5BQ*p@)DyX6 z1Q|;nBR3Ixav<@CTu+7)Im8#@EI6w?`~lvC7vtOUG1zu&E0&M6qf^ly&_m=cngt6{ z7%4*bLMt*Cm^PU9=^2nMYIWCjd$fU?P_7MB? zn~oss3@eqL(nOF=tsw4Fj`$UT_Z9dLRETC^$FVV(142PFP4nT`hz@Q<2V!fmW_&Eh z#r9$()`{&wFk~un26_wqhERjrP;FSJe_@F zRSmx(t*J+|LyNwnyb0;}uXSnL*H&B0y{798p|#kh>6f0hEbN$fWkg40M{wEO@@35U z25aNOOFu83s=HJB(EP!IT1Q(cYaeqN{ha#Dd@fsi`B`IdgWKh@iemF~OM~UP6}Dcm z=^KvKZL3162G^}%JgFJf4EhM&i&{q((%sD>ax*=cilsVeXBwirPry}BpmT|*n3Qm&Bc~sS`K*mleVk2P?xFyWBddC59=I; zCm}rJX^m7g3u%YBu$y)xz8>pCM3GK}jXX=-Ax7azSPz&&w_;jyE7hHvK#sz*u_jE4 zyJI_$cgQMO1q!fA{Xl^#HDfNkuX3u=RbQ?aSIMg-^&?wq z+orcYZob-*(B7>hxZ_#J&-QoiVB~(uyDq!lp^4YVzvkF+tK&o4?V5t}8_fsnUF+}G z+%C&DSDB}q*PB}`7Hg`dgLyzdq5m?=EgR|{H^tU(wH>l3ELmXxUs&hc>}&<)=dDq7 z&nxvc8*6qDW)h;k>2mrJV=^b0n;9QEfF4XQqqVdK+@DRG=}0PsnoV7xWYm7}wU;_d zWm22SXOu5>5S)X8=pYh^)p#d<4PT31!nUA4(N?T0mX2j%@37a{0(3nRh71QgaTJn3 z)evTiGDaGdhJAo_x&j<-*L&)#baV8pbSm8^!ye-TlN8zjKSbA~A!s?;iZ3AKqzLp} zK0a7oZs-D$#y)rk0TUF{jgF&NlG})C{4o(m>ga*=PwF8xgJ>g`;ctnd_#t#G`~;Z~ z^uY|s#pG-prT=SOVd`c4W#Air7^?K`h6j~Sb!4Tss(byQ`s{_Nz==)?`~%@ z=D*Y>dLQ$MQJGV%nbtQzBQ?`qsS7lVuBOYFX-pRVk}9XJ(k^rl>IXfQN~HRdXF%61 zqvla6s+ycfvdK_#Bk_z_0~lckei2=aJi~Tj)9_Jv47Lh=hdx0)kQ)deDS)-mYrvl) zfNr^D@-qdRa!qcgZ^psKxyEazAXA1Z5$KyBq!ZnPzQ-5hJ24vHPO!(`RJ&6ni{|9?>FJ?B~kGM)k5juPnhGV|SHJF0m!kb}F zh+~>#>Ia2GyP-eOKvSNn0`89gt1{Jgsoh)ms$pwm)TNKDpDxa7?%LeFv9PYC$-8A? z+r)PC%Gmb(Z5=HkP2p|RJ2thyygIV2xkW)x8ttWbW%;&d>r;z;S*;DTd}LlRKba?H zwmHDE%sSJ$&icak*7m_#e&L6u0%+OYR;@L|*576=qstx2#@V*nItZ2Zg=GtL(tN}+ z(6Yrg!TQl!VDT`2qYLSS%yecX^@f&Hf9XJa2sIy^l9}1e45eG>BUB^dLqb$2C84|0 z$_ON-BdvfVAy;S^ z+yj0Lt~W>r`U%Yhm~O@g;&p@v{szBJx|21;L#i7sXI9ZW=t8E`%%iW66PWQ(0wg3~ zfDRu`{QwovpPWS9qR)d`*<^NRNO}M{m+X$WU|)Ox$lzhywn ztojkHMXd{(dpE|{{jQ6t+h?tyUex`xZK&RGA*RAmebTzql5IZ6=q#HUy;)+uY?WI5 ztctR+wz;^nYH!(S>v*%=vd(hc5@WTqd07)|cgxysgU$JtpG=zB*|OI%lrdX3S)Faq z%68KfGnUDrhca^dEqN7SP%SftK0)PEx9I?88>40pGQF5Zw2F>pBI)C_BfXE#rW^n+ z?We|*VPq>Yh%gc#0i!$Og}6O-7jwdLFh~3*z7%T*>`;i!2WJ5xZ;)2>D5^y{Xeizn ze}vcKu{e)#BT|VOq?Br;JE;A{ZBYB$=!H~Q`h$5C^O(6oO{ad6{gi$21S*#Hrs{Ex zek>Ubbt0n(q2ViilKw&MAa9b61RFnqj|c3-0&02y7KFuM)3GCH2>cnMOzTaVrn9Em zNHlrPl4zS++10YvcCN}?yRxdd!smix)%Ne$Wne{9 zZN}w+HQTJKt=G(N@h|47X8)>-7XvH^z?YZiEevJmS?Vk|Ecw>2=A&ghY=~{OZKqXR zAvP~#Ld?&Zzw~GttlZkw>c|9Ixt1o2t9i7!pE=uHZbq$JEx)X1Eqvl8=|(hA?o=}! zMkP__C@-4Lz;qLBWoFXH=*e^<<3hcpSDODZ8sHSs z*}B*Jm32_tn3d*MP`{&rzKpjnu!hjzm{HdA)?JokmJOD2Qp^azoebs;{gM1k=P*C4 zJAhW6WZDnRz*7qtB2IWGnTMzE6#1+?b`HO9s;S=~Fah zK5psB;Pg}`iT+Km1Sd3~Or$F4zNC!ur*`2&GJ=>)iK*4ZbK)uSmx#nZ<5oP32qaG8 zMywi3#4PA`I|gITnE}9 zkJw6h5K%-reifHvD0&5Buxl8E$CAS-$V^xtSPwA@^Odqp3t26xSY{R5BCXHNHp@0k zk+m1~nh7t9w^h>7MlURhkXzDitlGlLcH7GG{?=dAHD+9yv?i0fL^YW8bccDH1+{3c zU95YlFj@iFbhbrgiL^v8DAh@|(Az10`W3yAIY3E>VfZ)lf$;(Qk$P#)pa+C5z6`YAPs*+&M6XsT=kXjlr%F3=s?1VJJQfxP(l6684yw3$VqFoI%V& z8CAj)w^z$)3~Q9=av^f7S_%zSQxYQKS>Cfmt}_#ONTc?{3OGz3ibAZMU| z;2^a?FF{vg^L2lfW0doCufQ8eqWS0;w2|14hvWAE>K(-UBYwyjs2I^9_lTXuE+T|n zMqZ$%(*ma5Oj%9=-DtBcwtlv8t(VL)pa6fHy8x^mY0`j};)*#Z>IGcyGg=nivlbG4ZU^^$3RWmQ`@TAo;^Se{r;GS6r| zI0H~O0IB!m3St)4NWRDm>Y6~*p9tGwb&ADG?s+Mh~EIrYogfXAtIWDfT!yX z-cSP^_H_)#5WFjK5U(MY60^}qXf7UuIAE=qv;1JmO4A+_4`e+;__1axI-S@AZ%39R zld(F2OAR2xz;kfifGtB_qhUlh;tb(~#XvvtX+%6&?>gFrIYx<+v4bP=2jd9q1vI*@=ZX^%V7bu(>Lw=_YQa6|v48jD_>2wdG8ofyha8EGt z-AWfzBbc|$TgpcDp?=f-seGb4ehPSLE73sQCph3FZUa5?giIrz;(duO_&uxyn+j5j zO~evHjt?O!aTNc7$Kb~>0;C&X$S3$wOpkNG-9mg2`UZ)CE${}AJ4GPRK%O%a@;3w< zmKdAR$;1JZP0pBB8x5ui=r9y$Tmgq8Ft!IIM105}*@}&!CQx?7dwe6&AMe2Xp@~Eg zIg1`g38*zdSrrl%A|7Z3J^_YdNX${lPoB^0)V%iuLbrau9x6?D}rQ{zv9PIof>N9nWdP>it9EfIs z+DcMR1d!8+bh4OCB4hAZz$ZK;U5Q*`5va*`1WkSi_1%R4m53t%_xZq}Rvo;ZO;ux_H^ni}2!>0IEEto=|^@0vx4RQtQd# z^l!jI3B*Y>2A@Inz{gU@)E&?w!UX(m05OV6NAfAXX(YS_{z`tO7t#0VtCRzMiLo>H zr|!{C0QG~JH58k^OZ@}f@POG&kEcqhG9rY~VFKb6aG_g>dsHLUlh_J$los%@2+t>e zk}{&5SU~wu8_3x}rKrix z!*d8{@;yBOBwfjL4ZRQVgMP&O5sQhJz)Q9{0;Vl z=OQJrH*gry_*!B!W{+gRtKk>ec61)LlnBIIk)MznsGy$YZ{`H>G$VjtSxnuhUV+|^ zA|0rmba$qjabWg>`Z`CsFpJD;`ajYG>xK13-y3Vt8-Ra5;3{+&Zn7W*o0&-Vv_()U z^iq1Dc`MV*K)?k#F?K-ZyrosddEm>hnzxy!T9#QX=0)Z*<_-O4SAAi z!U=o};FWdQd5~qCLi(7dYX%6mY4eeCxXu(0DdF*O0t%sr;O8LKC^qeZ)*$&=2A5&v8_OcN!OW-}z-fM=QTiogW1N@~0M#M-1Kov|QY`Wxl}gz& z6Pfpvqh$~CgQ;TNfPT)Q7E*_)c#@!`AXVs2$w*JKg!n^6Q6H&`^eOB+e#evp&B6BJ zd8CA%P7eb9_9%F29V4Q?6Q%eVQiriHHdRQyq9f^z_;GwQDFUmXOil#ZLtl!bQ0fZx zoq0`ZfX>P!@0$lxo4}oIK-&(aT`4`i0%S-bbUm%3+W_xhq-K#Lh;TBHw2%z|qx<1+ z0B3W7R(AlY>S{tjq=GJ3js@Wpa3ww!Psbl%c~~Z>>VC*{)k2=y@=$)U=joE zgU_KovGvGa_z<*8uP_>*BTyo88huG@vlP&0O)%zeNF?up*@lfC0eEUAd6k?={v)G+ zmSd66iB-g5z)D{L?!^=Lfl^#S&7__I4t_`H)1k}|Jcznveua0X`Vhm(Y9j^J!Yiq8 z>LH`00?bE%t8J$9sRztNz#$5HKHvbp`KXx#l1z%u07!8VxFZ(10bfb&1O3Y()|0Qv zQDg(*L_8&T1La==@|BlV0qsh!rDjn^^f>6mQ{;7^KqrB`GlDt*RH1@|$%BNwaVgN} zy(l#`j$)`#@-{Vqo42PaV>xgf}HnJah%V2Ub@tK$cn0X1<0~yfkXYfK|I=&xUf)B!0pnuT_tQ=#3 zd5RBGgY<@nL-mjY!YzReM(Wi(N>xL{u2SBc-rKTF_BtWBaL?+n) z!Nvm94w9nzR66j-WuyV$gB1XO&_*mG{0RfO1TV&X5EZ%z>3}j31u=x!PFw|gqKZOM z15$x%$rDTjuEh$-o3sb^RMP`qhD4DG^eXck%Nz3ps}Hk-nhR>}9;jOdeFB_WE3=Z> zL9d}E(p|_ZYB`yVw_`VP37G}X`3_*BgJcfqh<5T0!6G#z7pNN}?Lj}F0_pdlt9Da< zU^mmq<48ZOoOn+*QGJnH7z_6T%oqbu9l>{knG8hMQj0+so&=dhxOoI{Q#*kQeM4Tw zJkIU%>w{Kx+>K>FHt6i#>rF72vz@ z9heX#L>$1nQCJL`gcKnA5fn@kAY>PO461?TkizuB^vu|3oT>g)s!u(xn6J-+t{@`Z z9S=r%&;ghR6JiR=K;7~Gh`IPs{I_NTa-4ifJt6MmDk2qSgIw?nb^&A(AwUN&0Q1xw ztO`C2PlM;d$DwFA5Pc64t2``?JYC~OMUxxx&%``{2luEB{4ufyOgdb#+4MVG1RZI9 zWSwSZ6N8zx)OIqLbS95e>zToTYfpn(K25jM7pVaJ7O|V8u(!x!tS_bp{k4W5f#UE2 z&cA`ciLY1*IR;?)J98hVh)HBdfdorM-6xJSbFfFS3ThzBh&b8<9gN<=&*D??`($t8 zJ~LJ6r{`Z9Hh zd`vo$S!gqUmdK#4kON3FxsV)2bQ10$GhL0H!B(PDtSfpPorXLCiFE;d9-aebKyId& z#xI8Nh8Cm3c*{r|1p0h^mCC|RO8Ly1FLg$J@lU|j4MLAY&e%;j0r`zD1!(+jOaXi8r_MWLj94`a8G19+J=A$HQWbML-nTDCIu7&KZNf=bCH#o zSrtcYxcMf{21xEhUBv^*HI~KXH6#mujd?Iz&3CMQtMnkJKTPZ;CsY4`Q>;TU+kphrG{{;Ie z!WZLR@kY`fB%&+8v-VLoh6|=_d+?j&W}=ROs9N#|ag}&Qdg4>Ca!`fu$%VvKd;pju zw}JgXi@rt^k;{k+@(>vUPlHs@I#a1>f@z0wxPjCsfVt#o{VM%2{SsZX&Oz&=*-_#f zH7+Y($p+cdK-RP7gnvQ*kO}dyIU&EU$J&dkL{w| zX%10OJ}}$N9@a3X)}W$iQ&;FsppM6q0R)8ez&zZBHGo-cPpl_$7%1m0NFBNt?}qQi zUGPLy0A}O~Sa0kv_7N+_jv`IuQEE6NH|xx$v?GO(Yp5K=0dF89usl+V?lWwLf6)q^ zJ(z31Mlq0uYz1!Q6V8D16oAth2D&^K;Mfu}$gmXTEuFYO;tR6pYGMgF3rs@Bkx5hr zK$}kB80G>+be7B|e8IGE2vcP|-?XH5y{19CTk}LC(oWO$S8x-2Q|ZDd+Q;Z)Fi$U`#l$yk zIPgeAkx10bI0^cHD!K}&sJ1q0zGn*}q5_JF7$}Mgf(nSDqJV^y2#O+Nfr#XEcX#*9 zz0*M|Vm%e(+1=Rr#+KmV-7S~CnY_uO;7I^WrQL*L&4POP(9Ubbd?i#$=j2i}w3 zaPL>o9dHtJ&V9o*%{|W9>G{6mOag{nj^f&f&IMlrg@{>BY;Px zJN)c-?cwhA-cddu*s=7u+^$KkdiQ+K0{0ttgDcXtrukjVuGUrU>p>^>Npqi;!~-9F zS3J*r>svy+phMj1*Ph(2fEbz$x+XdvIuMRjdyZ|Al?6`iHE<}zwlrAATB;!l#Iw{x zddno~I|`qngrnT{mR3*!r2DQmcQ>E+cH8n?U5+H*k9#=MAKRleG(tp z<#F|KL!M06L04Z#uan`(w12Q3fXZ!N>m@kQ@&TG zYuVhE*fkw|-$_uxC|eaRo1nujA6nbmHn$mCJ~uOboxVBV`5vuD>Y;f)c%obZjzs%O z8w~%nuC)>zey%KMqT{mD&+*V1>0Ip^;M@XyZi#D-`+^S%P!Fp;|FoQFo8$Z8Sml}H zscUw*G``(!kk8vJ^^S4mz$5>^7xspE!#uw{xgL#oh-;-gzKX#w; zjPxMA>)g5SCT~Y`gYN^#qc1`4kP345-sU6C+du_>1FU0_x6&8mdFXlKsqv2X4FD%K z4WNI3@~#EZc&Gc7Tj#p$>;#ry=LoTVwcP>8xkiWsRY1cnM=X%}x=CUxG7C%}0j3e5 z4#wp&xt3_piWXGsX6_pVvZXm!fqo9a$u=)lE8)xYxSWQfmn_$&3-|QQZsM&4t(CaiFX}ymBGuQ4*NF`+0$&l1LmmR z{njS{yXDEvD)%EtrK<$?0yN+k_d0ixdxU!i@Mf($0>tT??hp_!Cc3yDp{Lrt+m#0p zSpFW0cb_lAJ=VqYto2Oy@ZDRzd7v|J3Dl5F+$&vs-MhgYymWQD!d(A>F~_;Sg7;o~ zQ^5K0Y*(5a=^XED1J)t6f3uyi5v-}O64F6?Er|dFybdZgNeo;=r~Vkg;a^hRZG46| z*|;ti*il?)UhgUJesWE5*EsXs8$nm~d0PPJK)h|~52A9r_o&w&%>E$HM7JEE^VT~a zILv^*+F`p5D{SMe|Jb(J7QrddBy)%{T9>x}&x29NMj!1wys7gn*v;*>Hn!+}b3u>w zlIN(`)m#ox80pRHy<2^kd;)i?Z=h!hKs!xzdtGB3832=c(H>=8V;^AqZl7i=xBj%2 z!fI%l%zR%UZsAHWN&HP)lh7Rz;0o$-}!M8}3s^>KEWv^CL-a${}u=3@Xez;Um4zi@YZ zUN@Us_WH6ttGq~8xvRv@cWK?(V26_87-0X`vBmb=KEbN7y|QxPn-C8YnOn^t%>7LY z^9)lGz~yfrZbPt-iXSLxQ<-oa;~ zGw=;-fN{Mu31q4gSD^C`fTwJIF8wJ90bQO`v?1B+XQF5 zW4+yH_u3q`#a6U+H1rz|vs!G+ZNF`=?M8crW3mlvH`q@));ieEd-nUbI@>|Vc-vd& zA{Wbc!@eBMOeg#idTaS@p;>Y)v6d+FYx8PTnemCSzu|>GMn~7`@Xgd(`CyIE5bZec z&i63vBWzZ%OPbm`wKWdZ!gqZ8y|;WN9*sK(bQ9}c(N4YN8L-YShsZI{vD6-9y<|V+ z{0X?Y4fYn;0=eL?fa|^tGMi|IcBkgZp|GFr? ztpH(1cb^53#@{u?73X+pvjOz3&F+K0!Ph|4WI?^qG4ov$!PH^S0f^&NeUG7!Ua9>K z(D;@5UxpOpb+g1W&q{>TO)~Qr(-iY%>klX%vY6dqU0!)UxT_sBo7@y?qFQN?zvc{d z2w;qlfXbuCPPKlu4uRLf2O+!lx;5OI0BazWB^DlPdjU7v=GlU5KIjO6H+%}^#to6S8nQ@zElk2hbFK4rzX@?yw=Md*`SB~?xSjLy;%22mj=wmN&7eZ6nlT5P4L}( z$=u&O)pWsBXfC$oTB@K@_^VX~tos)H3F-t`^h)TnIo_OR>fcU1Hsnz7{->>0&wS?( z*AB;eU_Tu;k&R<#+oJ3;dywszJ zu|aH*8@dgp2FN(eIM(>hG}Uz1yb9DNc!*)iFbhG2SO`n4!%XkZea){e>!3?8%bH?Y zXL(>bU>;^#V9YVl4Z93h{S(~_om)3YGfNfwICeQN zyB4{ZIL=4-3LAxLpM1+1=-oqJih;@uD#P+8(*IEt#g36(M zh-&=L_}nl;o31*lX;ptv{j15)akK)>NX;q@SM#@KygEj`NKFN-$!&l^Wzf(RSLDY` zI4IPdV$zu#&6~}1bE?6m7Hf7JO7!J`SCk@tYuayqW+^qj0o)-X9AsjevRMPGb*Xx)f@k0k&qC`lqHw-LAf<_Ncw;FjXCG z$*ur4#HWh3O6SS18K&v)81`9qSgzU50XD}7`yPN({A80^4c6aKi2j;3U*oU7u4z~Q zQh!msQeDyv)+B3aU>q3j7+r|5M29sUGZ#QgD9hxrRKQWr{?31$BSA!VLlE2#dJ2y; zKQ%|1_d}5umFcJD4`@4d9wJz-0_^)_kP)xw59|0Ex$?Dgf)b^!)?}$O6&DqOidy+E z#Y1_y@_=fXJXf(z=94!ng{G~2XThx&1k$ScIy0Tdw%UOavM|X3p1@(d)u}5~%_=m30_}o+hTdkL% zYIvu0q_xe8fM=LD87^w-l?#;bl#3K(#ZJXC`BZtHJV3rlu2W_zMT)-a2<1ifIyFJt z$CPAwY+h!j+GLJs+jiLBG8D#|Z$mleMq{?=sd=Qa*yv|GW^@|z4V9*urX8ktra>9Tbr)!QsERwWNqrx>M%_`;1V7LtltzZYzU-F+ev`w^1LV|7`dSxSFeVtsvv|0Suu%@;UNS`C8c*S+mToh?gIc=gK`& z60L}~k2{R}Rj`D+UWAgq)(tk?F=ZK}O|J}(jMGiKp=_wX1vZIwlT>r$3YkSZPy$Qt zNzRJ@5jTrIii#vVWVObSBoisuIRGqHN)A?zSgBXrfSE?h_v%vb=RQ(m13YH>Sb5!$2F9UpE ziIJuASEb6l+(M;HU84D_j!;cdl`7ig%jE*8O*Ti~BrlQARg@__3Zr7P;;tf9u9j!Y zuc*Q_AGApAN5x=mtmY4OmbOb*r0vxBYyMW>P<)XOlsF_yrN4nDN2BzLC`-f>4-mEB zV+m_%pO_5x2}P=Eswz#h$?#U!Ylzoo>HgH7xAZfv*36VYlw1PCaDJvA4rC6m}Gf6vKeO`T2dsdSrchFwQ z-YW+xM<{EQB*iWHRi#})0X+E}X} zBaV}9QXf}e)HbNg)m5t3sv(-e+C|b;B7{)NZ{}^{)$rWhV%86K31G*G{zh_4gcUv%925A&z0z&6J@Q_~CzV8=$4QkYNQ%WPCC8)$*-qI= zX_Jg1PmoQO50e#2tHtjmPsKMRUnQr+ZK7Aabip*CRd`tRRPtTgF0T?>6+h)lxmCVd zUMI_zkCr(lL85#iPFO6wAS?sAG*1Mh1X-dyu}B<+fe2G*&lwf`X2BPppU6+0r<$cP zDRX6aB;O8O%i?M-rg7%B?l{ty|l)a9V0~GWSoF2|Z&M|%` zXD7Ena9(^t`doNdxI$-=K=WoeEyN%};(Ub;f^ zOd1d7$052Wcqc*#uJJ>7yLn3l2tmFuMv@?X$nyzz3Vgz6!q5DR{AfWi{~J&;+ARr? zc%^E|E2&ESU6d&f7e|U-iNXa0?htMwuU-%*3>GaG(N6(yZ7=4&~5?C-o1u}6+mX2_LNtfWLZ zjkkj1$BE`1WDRFTQsb#q`UdJDpmnvGl0czSzcSOAYnW$P80G}VH`Yp)oB4^E%ihhq z$!p_6yjwgczlhV$e#zR*c)_Tm-=p*CBt`<`4*ff$lkuFRskr~}Lb#WB{=5|aY~DHUS^jcbwP6+RTb z6!r)mqCbTBf(5)NRv~K}_au+aKLO_Xn(&7(QM5^f6$Oe$ihQD7LW*!Szna_3Z2>++ z<~H$Ccy0V{K^MQ9UrgJF+k=slliBlGiR|?(0xLooB%Lddk$n-1xM+ilvDJyVCq47AG(u%hVg}EV0>mBVjpF! zr>&q4qnx00QTJ2dQ14Uav<(8fpeNAZAqCT}P=fqR&{h&PDa0qlAnZTh~m+he zcL?rt&Tu`PnVic&Z7Gb>MRE|{6Z+#H6V4En`0x1TI3v(jdx5)5$R}JRTmZUju_U05 zMJc9ypa#=QX+z0AvOjqsX*1~pSw-qgo=M6f*~r&{HqTHho$?YWHJzfkDXkO>?I2Kp zf|*Iwhtw3xzm!b!MDk98jMPJW#YAypcpG_#criR0KaUG@^?y4E0^9* zpT-zMIY{HuZZRLRF0*1-Ijnn(LdGxJCyI~MNhA}>@#VNIYzIz>{R905`!@#0=3;(h zg3u0Zf6Q^rVVs#5MQkH(A{@Y5Z~{UnF@VS;4JFcuY66D1g_KA7PM%CMl24OcDci}9 z$sA%5v735`-k-XF97&l)`a)C@ariyNBea)Hf0l|~zjz4ugZ_90or?p^_8FZe=4tb`r1;GqJ4EtQzpUN8DX(DJzMlq^zX; z!}!TDadq5nTn!h+!}C7!>bYKS40jGkz@c-Na01xZ!2EyX%x6p4xs=(2aGH(Qhtf#R zqm7`SXGSxM=*#IB=qqW_)By4-QePsDun_OTO~RZ-UqZ7nOHc)cSwuZemoi~iU&eFh2KG<( zHr9N`4~CSvlc``7(pS*jwEyTt#%x+P4Nt#9zrj4t3Z*AeMv%6W4Rk%Q`Q4m!_8E>6 zSk7qfC~)@<4u^A-gJM5nCj)KTeaxeb4>T;vgKMI?$^VhFX(g1q^cea=Y7Y%T^`o)L zFG(W_JwSzaAx?y|V^QcEsB7p<)D=`R($Gk2x{5r7`iSnv)L}KLJy)*sn;nn)J$qTt%SA|Sk5K-16nirKKU|5O4&~wKu9A#B+Dt|DaE8(ay%KP zHc-s8D9QlhInqpu3F!O@S=*V9*o)an_766Tjb|@lpJlIRJz+&KlNmc0%PHX`Iq@sd zh$WI26TgvS$=y^o$x8Z3Y9J9w^@OYV!FU*VAGZ%n!Cu5}M(;yWkZvRz8G|TpT!jcj z-bXLQSg|Eo2lhEO7PAOD4lBn#z$RgF*p-+=7y+gY{R90JZN$`Lr(l`5Y}^d&3#<~W zz%~K@IYOdQc+{QL_q2RkUs^i#9JP$fq*^H7$eW2wqJcDww2SzPq$E!OUgAeg#jEi= zR5xlE`fpqZkwnZQG!rTa9fTb~?{FM3mQaenM?6GbPCrL`ML$f}(AkVI=1j&#W-vnx z^kMJQYiT_+h<2Zlj{l9HjAh~bV=&kr{4@Ml;$-4M0*jD~@5bZseZd$dxXZW&SQmB_ zb_|A&I)h*|}FfWYDl^j&Np3=Ojs{T<82S#c|H4BQFaFW?nQd>2qL_27Qua&TfC z3)t00>^B@0{}rP^C!j(aXEhiaTbk}6m>3^E3Y&^U;YE0u7!Q1F7k(@@5xtkSYU%3Tn#oIHxWCp$%WXCpN%D9H{$zYkKod< z@3G<7vDgCaQ(Ox61Lglm26G7g7`+Bvg!+UEL!7N2Qop2bQQh!;^nI=MrZY z#ZoX0glznCVi)-kbrdC)^prf2LLtYJ29TKe#h6^=7<4Qq2b+PY*f+3pVoeV6Jh_Lq~^+nEZxZH52@oM9Xrd>!SDjC&?bRkwC=Oa6i zPnxFg-B9^g<@(A8yZKeOs<&6$st#1$t1PG*yXS0uHDWx_BEE#ZhntVY-_xMCSm6xUsjym*t=uLt|7Zi>w=L=qy`la zX6yiJ8?qM#A^$?HYUthlt}?$)R?FYpTT7_lfeb+WZrWKdt&OhQRlau9v)!3{da75| zWbI3=qu0e&Z>>^QbyeNkT~-ygo=E5YRdNxueiOfd!slnuFzUMV#9$A(&F1C zS4;P8RBcY*erLzRiiQg6w%yw@tG3rqLk&cK#`I!`V%(U2vD<-1RHMx3=Ro8APuwE{ z9bbb3%I~O?i2jW!h}oD0=-!gAWkKctY#+L#Xlr_T@vemG2B4mO2$|W`)^MtR-M*XE zwFNiImX&w!`dF>0$!qAS5867t47Z(M%E_-?!(Rs%ek;u@o43!tZ+um1Nom3CtYK@O zuRfn}Gx_bZ^C`rotT=8=Z_Kl(^|7MW0cjU<@f(5*w-h~H|9!)uqQ8rKH;^`rDMoC5 zyaz(M(ShiN=qKp4$fM|Llm;~d<%je`oyQEo{)K&sorHeelvsyv?28CTJg@D)C9h=q z#-NRtO9z+U+Ono1VHdgjpXy25vr6t4NY~|Omu)p{Kd_y>EobZDaz)Xg5>?^u+~5R5 z{EPXY7KW`jQ=YI>zvX$x*A#i;!?-&!LuSN9@FOc`Bt%S|GCLeOg&2M;>Q_QRLhq{V zk|706dHV~G=bb5-SoFHYxmDIEL0m-%k#~?cQ2mhUO;?+0kdu(LsMqN2$dbxCn}%*K zuO3q$xAS93pWLwp**VC}nv5UmoHd(Pe_f+pvnfrTot(dCgS(WPb#l$2OkuXWC?yNI z2C*bO=GL6|)7djQ$&}J1o0nxoFO84Op0glAIqAoQJ|RINqs9jYdB;Bvy%|CSlvr;ZP2j%*Cc8N1SNrT;4b#bZLpj|%opD2VXR zu2{ICU~fTL!Jw?{HN&$S*BvYRuX1#?s)|~fy>n;f+O5MY^0(dJiY&L3S&A6>bBjU? zqc-l{@-20K20i0hHZAK{+Vkc5q@$@*7C*?CwmNKa&xB8*{E+?=E=}A!{_WWDe%#S* zlj!l268A10m6RK$4?R7)c69ML+^9&uKSs?PJ7L`QaSJD|SZK`InfEMvV(N;O)ob^q zomuy^6thdPk&*voU3>1%lEBUX6)#LPth%$ZE#-Y0dM!RGJ=vCAoN_-YJ~=W5kvczq z{)|2meq*KM1_oD8kOwCOl#Na8(`VGhNw1^c%-uh$W$Lc62_yLdp8~rBmIWRQk_Gn( z*&N&z>X=7Q?@n!A^(?Jlx^zuw+Vs`zyiX;2^U5-8>7&yE)72TnQobY%Uvz2J_!U%c)(suyFCBBo zf1TgP(N}_#CcKY$IcIj<%ACsF&{c(NqO$(X9Gdw!e{9L@0yt~*%B}IX*v19>6O{{x z&hw945%neh*}`9Qtm) z=P|7-<`x@^Rrx!!F6VaTm#^!}othcF!W^}4?v}V)OFt}O&bzrFa@w|t0kft@W(5Bn zQ#p`Oh7*H*C|?+9+QPH}Q2!XeoK~?b5r&%>33>@zIXS z|3p5Fj)`H+Ulp}+*5v7@r|k|;ADb409X~j5>xg?p?+sc$VCv8(K^hs@wyJYZY z_^HhL|4xE$7unejvm0$U&2E<6e7hxf>%g(gZm-=TI|uN$?soomk^egq?NaP=z#;#? z2VwVrjtaZ~f5-p14)K4lE&t!WQtT4{-@E&Rl{kYH9Re%c^}jVP0jr$_Ry`W5-p+1H z_y0Z_c>GNSpQ_7$@Ba7lzfby3Zt8=*X2bVd{H=VUEj;?#$qPz(2Cq4pSdtcgjwpXV+ z*EP`ji_;sY56%;vXFLDnJleUNbGD1v<*&;q=f|%9xDWE2;q}=k+wULmZ$9;YY5rLO z7XL1Ocf5k!VYlV3BA33-Mwi1bJm)&+P0l-=k2vX3d&fT4!x=e6+ z=+frC#k0*T)MtX%36GJUQ~d1$9|n2`ru#4Pv-vLb`08HovD`h$t;}Pc$0hgmt^=G0 zIQ2do>9oLU?AiT}pPe2!zjHd}Xmjl2xcE%=(VEjwoFG@3yVh%o?+KqY-+lgO-vI#) zL0&=nb2t3LeZ757`eb^X_VDv`_3ZCC*W-nU*>ke%b(beD0Zu-SEoUB{k)C<)=y~?D zGwhtV|H_$yGY`&WoQyl&c4*7lJ7)*D5BJ*OGx*#!Z%yEqfC2vf1KRz+1^YzQh3xmu z_W9`h*ss9zn|qj-oyS*?B_2cF`?`PfRJcXDymkq8E^!Jv>vq=vEOGXclf-4VORS5% z<9MgsGc*0ZcyvFJb|7VY(%#Hdn0t;-t+(Xd!_e^XvFB6Iy$hXr{#W?&a5~&ACObMb zTpySeFfm|B;4mMfXNJ4P-OKZ#7w#45+2UU4F~!s9{?kq5O1o}%UE=!H4RX8Xp5^}0 z-QTUvZJV3P^`*-M$F9dWoQm^3;G^^EIDX?${@%koT(-c0 zieh?1Uys=rvpU*6W_bV+GBIN8`I?BeA+&F*SG-HKyN8>~HNwqs_Pukh$0sjm@2wt( z+$Vb|y^DPp`&4H`rdNiK+P%@Ur`ILFJAS=N8RE)1int*+;eUY4o74Mst&TfiQvxAro?{|A0@@| zcJhMKCuM%g2;}-C3zKhhu5gAW+>EDV?ILc(w8VaocTW756VKTf*Uah4E)7}apK5A`W5>o`9}wM`#lTI3H1&x z3ApR~(0hnOm%|56aop-$rnufbtF?c**Y8B8M<1U_-s=Lp2AR){vcGq7kb|oaKRk#f zVn5+NPPvsaK2w<0FY9vd51w0EbjmO8*W|0Li1@NNe*Dtty7=`8V-o7v1GsU#0m<_? zc1a&2?LtqmGo$VWlIM));{)fNedPmt!|rGOPIwGBIo314C&KHz^LO{*9{1cf_&fUl z6KDud39toqhCU693`-9C6`m5jBxrxYI^U_T9udOuORn9WZk)}s@9H?}D1H_@rFE@8 zB3b@opzO^S_bW+TaVoTHqNsfRP}<_yg3oA-xzFmq-mo!%$C zYwFtMxvZ?TOq`b!1U!h$O;{LbVb>(2$L);W z6`_sG3j2PZi9C5e%;$r{)svIYRGjub^~Ju};jZ(^vsq3;pS}S@oe%r_g}(4u=lbRB zX&)#lG=`s$kW|eXo%|8(w|naNwBuP%^G@X-l?CNw=TWR>X=rLq>ZN2s_Q0&E>5<$9 z-hq_LY(y|0|}@t+x> z_Y4hg3_9$3-*KVS7Z090E2u}v?2yLroRBpMMAAL3BgcWWHF?*6^$>n1-Y?9Uz+>Nw zlt<`;T3z0|DI7l8-#_W-aMvltE!M-^W03E|z?gIFkoM>W(K~|joPu2+$4yWAkZ~oe zAbVZj2iEqiH#t8terKG_-<+Q)ewg}Bgh@tn2Nb@_SiyUf8JjK4+neo`_A}*6T3pWM zf^(w#q8`E_nQpRC(nd+6a7i-E{=nYGN=mvF|26tnRBa?T{88Ajkegwa=%g5f=WgFg zzVFWGgx&GK;NR{IdnG$_oM-xI&)*8E3_lk+Cx#b~COgLlCj}%JqQ^(Qh~Lg0mUt@( ziKbFEr*=(167s_kw`KN6Tmw$;Iiq&z;-+-l>euFVGf;HS;HwDG%;d8Ot(PW`QPVV!UFvd2fmG(7Udgyz*FJ#D!>}<71bJA9=(xf$NAKnwkA9<8!_xV@LX+tgm^!bNP8`d38CZS;p)o>CP!Q z|3YbydWpDJRi_9jom||jh$a48P@nrMt2li!_cZr=f@1_fvMu`ax$M9x;rF9wMotYs z7`Zm0XZ+rnD@VAhZve!(!oR{jO?cEQlX(!#E? z@q$4zCeJ?mL#`nIR~9#;SKgkSr}=ItslYlPobtF;?6&o%kl>6-bPJ?hKK z=km+)ebOd=WNuaZ+w|^nbz$TEO(2$T=NJ3$Jy#e${JcIYB8DB`Jx(2WCzcGWJ4eO| zW4&Yd#Jz~05TBiJCW%aROB#?gfORmjGo^tSz++Orr=YxdX=2`!gvhv&@iDBIynboh zdF9*%vFF2ndnW|GIyXF^t6ze@H9#G(-0w#K6xj9rwXnSraLj48gk#`*<-F$ja6AF; zwQxgt+tQOW9Wz&E3-Ye;tN3pPZzVHCg9LSgaN#$}FTw5tGv2eV{(orN~x0MR;8y>wZzMx>E?s&+`@HTB8~MF(V8qXkeL{am`LnP~l15Y_OG`b+(Ir>J zI>$YUn-+I6;ZyvJnB7quW1lBIi%p7O9j}UK;=|+0!xqM`OPY~%Ea`7TXrdu8j&*=t z#A)a3<2>htB(F>!nS6&kg!?NcC*>k9n)fqxcj|+*>zNa>T-dRk7~VBjJZnEs#Xg$I zjvf?gjP7;LJ3219S7=^%O=xOJ(z(v_CBbt;y9ZlB1#!=le{(t$kH=nO*(DF>O#->( zl4?p@ncc$Dr;fRwZapHcZ4iiKfa|jrqo|?#lY9CReBZwRjM_?#fc(^k`={S z(qW=^g_Q+e3P&TwLT` z{3JUyzA`yBOH)vkoyN=MHYYF%KSPDl?-PO(=mb1z4>v54mB5NqCcIDDpY(z?GjRdy zG%K7nh;7fA&ZfR1}fSmyPMLHIZ|>WqciJg_BO#E;o!WXTtC3)(#*wNBKiO~le3cR z9{W$~nB*Fuw%QY`lRR0A*hAR=u#8DpSZvnoSIY}axAqL7ec?myh?Nu3y zS;Y}zn`pVHNT?C(CC|kd3$7>(hFQ8RhIWHZzfAjGQ>l2PeWLoTd@9^kGFMq|Sim_g znkM_0SrYa;=XJrST%VkNxoEB_dqmFmbSkqp^LI)f?`q2E^q{nH2@_MFrLE-d<2+)w zuw2+r>Y7Ci6r*@6@Wa z%(Te#*o^c{TjrCj16kVaD>;XAqVr(hgcNZuJMCk#GI2F$C$BbBz{^VBnG(l2oVYLH zK++!8Jyvo;UVFO+Gv8_J|j;(4$ilnyP1Ytj3fyU0D`G5+5CKBh1F zo$@X+oLkQOCWUez6f7w$5^fh=H(7 zI+o#*aV`B*rdQ6eocNruoC~?Cya~CF3N~i><&G}g#`=;NlX#sqJgr-5?{sTgYHB!l zdfLs@p4`He1IZIPA?(?lPbs{VEh%}aWAdH}o`~0GbJEJw2c@FvOH-Gm^K)PFF9{d& zmlSpsF5$ZsrUI-c!O5o4xUwW=l z19j1``R2mM{ObaiK+6f|R`Z?sVR@w`rP>b4QS*dMC3fOm>;^uI=w<4!`>E+PiE~;~ zJ0<6ZTeDXwLuHSOZipXeyy3r+#|rleHx~ZNo|4}#Zgff zQ=L-Cb?2nA{^gW$25_DwA5U2Z`c8JrE}lyYCv{?4Qbt4W!ra?HJ#lkeau4Uu$qmZw z$laLpHRnlAUCyh#PkD+wbKa!9fAW_X%q|$lN3#7=GPrls;-kH}Mt8mn_(rpOnkasLl@-CW{j# zcO~0|&BB2Kfq0Q*m)K48RybYQB>pS8Ea6F=Wc`a~DJP*Q^hbG5{akfSRZu!q_fp%T zvS~*uMwDzVRPd(=n)$^7FTs;UdE$@ord%xlmvO5lm$^aCU=*YQRcmtcERvBaV-nu8 zZWLEZ&&#_jx|M7bdSvnnYKs<&j}-S6{!>_=*FS$j-c!kQS#KFqxRpCSw;{VD^I3L$ zL1W(VtlybkxSW)WsnKcOcwW4e)aktAywa3ssXtTaWq4-B=8i8+EKDvuRCuNkDzMLg zUNE7cCEu98u%LH7ntw81R5-mrRdBrENWr|qjKYb6D&cFMe{yKtH&!)kFqfY&E2Tdx zG<|5snVc8-n+uwA)!8?)Kjlrz9-VPBeNwJX*h4-#kC#0y%PRg{lqFj!jhFTiB;`*O z&l6WknkAi*Fv&u3o5WqZ6Z9)-;_2cQQf^UP$~U2?wW=M;pP4x8VV$t|Il!&JGU5t>nw znnIQaX_pyx>o#Z&TA_A`GN;Hd_pbPpG%ep>EH8X2xRn2|e|4clkx@7- zZ)2{RA64)p-;iIN>6=lL`7`rX=CAaK3_;qvjP)5w8P%DWGi!2x7VZ^X5%7f}(b$YV>{l75lFL~ssTIi# z>th6!AugCGNtE=H()^zJ6AEVu_KWyJH_-!yy*e|$BhRz2XUP&pv-*g}MR~Uq*3C|};Em@0BAK3{SSazQNm7n)PrAzBBmr)Iq- zQuAIrSNBt^)SfXoX|JeHX?n=#3HJ)SW{7j=6s*mVq;8V@&UF%86>-#`5REmva%cIJ zvPHxus=3rBp^6=z)@=Hz6R7Sgew40_&*fI;`sGgvI1_m*IyC#Kuth)?Gzq8Y=c#*X z#*{o1@8+*8m@d-ft0dbC)qJ!tRL~vdQJerO%;7K0Kbd|2;*{{(kA-Pd`SM992soJkPsUD)< zrkbY8gyt$os&%RXCDXt?rfC|mf8{si_tkQKNJ%B>kDG}d_y zbn$Z0Kv9Y4Dc@7jM-o=#EE9_T1P+Ch_)80Z7T|?53LOd$3MkQ3S!fZj=wR`Pya+beE{*w-t}&KT5Rf zStUG0q~en@rSwLLWASBKXVFrbRAwxhSJWbFD0*FdQ9iF&Q1r6+c8R3)nPRjutAwQx zD+ehJihasRO}cIrG*J0K)l>FG;a=pXSS*=a^h)Wk{GlGF{HW@ytW#xZZjc&$yX zQ*6@p)0H7kR!8H!;yXpVExPL5>YZittYU&I-6wdRySXgCe3$fS*4R*McwOk*n5^(0 z36j`_$*#ObtiPNw$!hkG41-{X`kXXWwZBB9=q+DSbVk@mP*|Xpj*!gEH;exW&&wW{ z4wkz}cNL!~o+I;>d=x2!65$Y$o#cfywPI5U6qor+ zKT5|+gi=^4k{*`Ml}?vjl6Z>8NCeVWsYWtZ(p5H6HV#CjT)c+=oxhadEk9cxDDve_ z#OY6P!?<*S)ja(s?Js4iqF!>g=w@+V$vjP#?oTPL*rqtH7*hJTl#;s^ zGewt+edL!)e<(CyHMBBC8KB55%_*I(=&l^9Vk~MhY;4yYR@JB{sjjK4N-xzab(6ME`$@aTuuoI0H)CV0Ybu3=k^2C% zR`;$p)a<}VS24zTRD^AY`jx$I7-Pza_T_Hj#ip0A%M#MqVX>hRTT|j<2giNpLWzV@ zF8ZW=p)4)ECqE)5ivI|!1YJZsi-KhJ#a~K%6ilgJ*{kHeyj8Kbv}@^F`Mu&0*#~K( zd|&D7(yNL`%4|ia(p$M1RCsl%Pl;d2>Y~cxWks)w(~6ErZL$byoMeS$rL?~kk!_YO zl^Kc#7i}$aFWOafTjnfXE?p^oB(@1}3U`S5i4KWt5{F~;Be!Ahb zAzOD!6Q;H+PAJkznpArIKl-@}pVBvqSjEoLCyGvmS1G4tU1_mmdg;y57b-8XOJ;S6 zdb>)mN>>%D*DL=jO4YY?Z*>2tBa~a!cYwE1tEs|X8D@*vC2Ud#^|i>&!$=qWrD;1X zBc?!qsW((8KGY;LwW8CoOK6>;lgP%7FrxDD7gtv8w75%5<#|?*)}a;C8k85WUMR%o zRc5zYo7) z&HGiHT5?nFthA|VfK#2CzF@7nii@S!N=p>olxhW`I;7gDTCTdNR;n*)A4o9dIgk7}oOr)HOSwI)kDMsr5JO8G{;R3iaZFV#hArmI@C z&vhL-qxPZBMf2OZ1~U?n8Ka(=-!d{hRQFJoiLlWLxR<$xNuUTqL9QpFsP$Bso(1(H zO!REq?COq-?3(Yyf%5NYJ9QW9i$1NPY8&d6)$^|;w=TKj*@3oyZ=G~`Lz$r9PuTXP z14%hi(Mi)1gVSnRdfuDl=~?lb*F~Pfs}fD=+M<6;W5tXxLhLTSDSM|Z(xvIedbVMe zK1J`X_t%Lub=p1JEN!rECCH1N+D*EBTB&xl_KG%4->Lssw^`p^>2mo8`S#+%qDa{@$wvt; zc_wL)Zj?MI%qmGM+?n}rMyou)FkJV}RAjOlBaHKmJq-_ygN*4~zhbSSSRbgJp>YFx zW0ty?TB~u>_R`kr#_Fc(ymT3=m!K9pbu9gL{Z5@g`%2fSW9i=NcIysnk82NW{Wbrn za|6ZQoKwEUR!DVcwpccpYbXKn*lafY znO8G>WImy~V60eB9a<@FJlx!7^(_O&dPPA^b`x3szP{_l;T_1;hPFqo!<%k2&uM+q zB(AHj_==7yVoMp(Y)!OsmAWUtKoljRrK><^{9V#qgcLQ&=E&=$tup@-gX*<$q~U>S zhRNQY*$T$2p_BLG5R%z$zZ91{eQ~O9G*4$OSS2ilHC;%6h^pGoxZx!z- zx>U4Y)>xEW)K#`law5Nr#$2f77nY1N9EJnnE6_Akun9G#o6=14Ouvl|>UFxi#zzJ( z{b0i+-ED26#;pAT5NDcxxV}mEKsQyDt!^@oGu|=EP4>qA#!*H`{cQbW-CP|7?tfY1 zr1`C}2mSw2y#yi9W0cj>3+(Mn+lPwpm44O=qs-99P-E?7WtF*?d6wB*zuJndQH-DE zXxS|5;0p(#CzkT+3sth3!x!ZjcQn7M@v{uKCf8Kif^4CcJFK~ku4dU~`&LcEjmv(Q z(B>5_qngZ3wH1)Lh#qICR((c)(`z+*^rzItr7N}Fq-&)8B+dW;SIzNy1h0d<2DVGq~@7r=`kH^>u`LEfhO zrX!}V#^1(dXb?EF&y-+VV|MolG)`Q%6qr0n%)Be?M z(6s0(^((a-;p1epm- zys)YAR`syzeUuLGsDD(B*50c<)3~T*KznnCU7M-(ZrwE7Q|mJ8NVAZxs@~Wff7#T~ z>r!K*wP8!c%xYt8Zfz3tm>6mBuqMNw3{#OTqf}jL9I3seFV$ygN_2;HVJMf}jP=7# zV8^g7r~|eh?T2o|4x;bSQD{Ck9NmCMVIJ5L^aFMt>yAZZYf%*%kBvZsQ5Q5BU5+%u ze~~Tl3Fr+RgH$1B;RLA6B!mV-J)!=FPX->qvak9NdY&#tdsp*Sy;C(uwNm+7nWdyu zQ&jT+U&JUx3g?oV(nQ5tMVK+zJA-4jw2S+ zA5$Q75=w$PO;1cs&=ix}xEkJ%enk=FC;S<%hkfBncoMY0WHIeBZZ?iL_!}PR_v-xh z>+}nC4>YHs7ciT+W>#M?RwY-Ttn5-1Qq!Y$azk!|Z_UpZ-==BJ-)n10O~t~B%8HLR zroyGlP`jw1q@JL;4T75Jdb&~HSlYt0Eo}>K^Sx5i!C2iajAgQUDD6q#YD%r!)Hts3 z-Q~E;w=dtUe_a=AF1F0Ge9#BgEh8eytg;D25OEgOp`OrJlhzas|3oj~*Qv2YcVaJ& zl6#2~Vk2QCmg3`ZH=Kos;ZB&A=t=CsDLfi~hF1{daUH%EpM`zGlCkI5PV_eBh8;td zs0h7-9Y=4%4ahclKQbKVL5qzNQ;xC8;A)tnyQd4(e$Yh zJ3%|32)G;Ki>5(+U_NvSy^P9HDS8F%fkYtTNDdqeuQ5F`nvL%a1N17x0NrE#6~jQ? zX&r_xz%ocbf@4*ezp3I?^{k|7x7Q81j5LR}hO~BRLt9_A&u`ySeW&Jkt+4u3^@iH& z#^cRH+iXoH^Ng}ZObxR_sCWM*0VSbNxpSnC`1)^4nHw#}u+Q%XFZU{U4daQrVZoOnwOq8Ct8$Wvqj zMN%Q;JyJtpL_Lv9Mv$@OF>({3CkGP0$@OF?kwbhY&VpFw;Sca8ycpk(kHNNMTd{nk z9i58yfF2@m&@5Pp!blOa7g~|Iz_h`%PtO2vQLDSI+oKKCgsSE0P3pd?4rMQ8gi@z$ z0F@w9LaHQnV1XIQE1lqLdiY6WqZa>TCyysyB&qe3(TJC2RP91secX_^ne zLUeE=IuKifHREG3F18mVu}*9cf+16pGte987lazrhHAq){d40~!(M&1K3F#vXn_mX zy0T_#rETVgfD1n>t7`ZSX-z$v9a{7qp}?loO+2(85~O~3TCWnss> zDQqS^JpF=x5X?=2O|)%TF7F8{96J zRTP__SsEL_UD+mW-A>oLx!`@+fY%aD88;9-3 zP9pb^QRsKH7aEU<;IXFH&>mBk=^tYkW3IkTe@|DYo2RvE!?cqD(l@E2)pEegAGKYz zg}O}rZ{u(1Kh`-6PeORc(;BI07SaxLVK?nYd_C5Oh$5W`8+n$vLyW?cupTglZpF0Z zR;oKSfgFWrV@;S8cgJ=hZ;@573KqisAy4BA!xg=~p`YQFp+C?K`+)*gYQ|i6SLIZt ztG-+PNQJwoPw))O@uip}kv2aL3b*AMJ13!N~oRcU^Y9Lldu!f6cMuR>%9c z+cgE{H<}ODyVl>Wxm}iRt};(IuQ#_?EY?&@2lIe_O#fk)TQ<}^YKpDjYCB|6ShB$W zKex`e+1U!p&s(GFo>l5=HrDJQ%p^p6)8+KPjLDo}Zf1Pw0D3UJjMmZ`aDFyzrX#5k zYBqI&l2QA?b1!w2%A_`tPbpvOAc%v4=pYh^)p#d<4PT31!nUA4&{nJ~mX2j%Z?RX{ z0(3nRh71QgaTJn3)evTiGDaGdhJAo_x&j<-*L&)#baV8pbSm9P!ye-TlN8zjKSbA~ zA!s?;iZ3AKqzKepK0a7oZs-D$#y)rk0TUF{jgF&NlG})C{1FjG>ga*=59%Q`gJ>g` z;ctkc_#t#G{1}-J^uY|s#pG-prT=4GVd`c4Y2X{a8>;l}h6j~Sb!4Tss(byQ`s{_Onb| z)?`~%@=0DUWdLQ#IqcW#jGp(41~9@7{35y-d5Z1Ars1RT7;F{#7JZC* zAU6;`QUGhASAai90NrxQK-U1N-NZdI7xmY-_xr>jdEyrdJ-83K7+lv7c-mgM_eVN2pv8O z!!cjv8ce}&;LWfn#4*h=^@GBp-Oz7npefH(0e8p$R+(zM)b6c&*|4=S>e7eSj~8b( zcWv(8SXkH6!^@+v4 ztk#BEJ}@ttAIxJj+Zu%;4h^a7CpS13@WSh@1 zI?EPZ90J2#;BQtOfO~;t)gR@ zNcuSKNbjSwDF=W{`>F9{7}-h;B8*9oyaIcX!t^(q`y-;$eW}i!Nw2Z;{p4yfSMkF1z|DRbnFNk z0)K)i(|S{;>8xos5=~ySB-*A{cD1avovSj}uB^yO>GO(hlHskWZnr+tA)@$ZB_-FG}vwzjaivbn{;L8j17KSqOEOnL}mVE0M z^U<;$HpI5tw$rMu5Sy1VA?9byA9^$mR&MQTbz}mqTuYP1)jZnV&zx;8H>1|AmY>$M z7Cv#4bR!xlcdD5Vqmrm|lo!orV7iI6GBfF8^kh1baiLz&E6sly4RfBpNUx&zQ$~6@ z6-4c(MpGxrH{>4t6!8N;L-^v?2r=e@&&R(L%g8~*eB6Ww5zg3GpkI&T**F`&fNupF zY8LUBxCRb;d@2@&f58Q0U#gY1r?LURpCGcS7+gTbQ||$`?4;IEO9+3^3pNw`U^y~M zJ+tT#UPnIz8euekhvbuw$yBl)sOKvL1)_Qecg08I{`eaF0Qw2dLEa#9;AnU#{0H?R z!kI{`kF|`6XC_$&+o+1v3m3{qR4%ZMtKd|fXL@2g(3S9p%E`8_)HbLAm!O@*nTn4! z8I=rHLEX|^qKnNRZQbkr$~vfR%t~`B$luXGU&dP(SVQQq%qZ)5>n_VN%LYq1DP{!V zOa}9s{y=`BbC~bep5{fAtC`J^Oc%y#zGCi4`_ZwMF=jEn%)Fek(Pu~pvXy#B->1eh zZp>0pB?IaE^eGxLAGh>maC$0}ME{~!f(Xqg6R8TiFDaw^sa?2`j36dcVrn(tMWUZ!0K6Ca2r>38)vE*WbH-0V#3SfZIyJi(F;o=$UNz>bCAj)w^z$)3~Q9=av^bv6l%zSQxY`=k@Cfmt}_#ONT zc?{3OGz3ibAZMVz;UKj@FF{vg^L2leW0doCFTov0qWS0;w2|14hvWAE>K(-UBYwyj zs2I^9_lTXuE+T|nMqZ$%(*ma5Oj%9=-DtBcwtlj4t(VL)pa6fFy8x^mY0`j};)*#Z>IQ!@n==nivlbG4ZU`I2dVX;oV{ zS{_@cSRPwWGEZqehylnOfYkeO1u+Y2C7+NJ&|I*~#Xx(i2`}s$9LhA(U#K7S5i%cC zc|B>M&(MzK9;%M|Vjj#yGimf4;xxsh&rtTnK5{A%PS0ib0dH19)zayNn(9r(k`N&# zHWQ^p95EGNgBB2d@#EMn%ni9gY{#CXT5Jh68cRas@%h+L%z@Z}NwJ6cB0_;b#BTuR zHBoHx5D`s6pr`8%?ob0d?CTheA$V8fAYMZ(C1#`lqPchs;()bc&hmpLD@}V$JmB>R z;YXUO=yYNeyd7DNOvdU6E;WD%1J}WE1GWr#g@zH`h%L7TeIQxHEXKpe zDf0qcn`i#VyqmsBKVmMJ?JQHwx9E4~?^ZXP&UVHYVYzIcVCI0j2sUH1zqyv~O6sX( zvK$w|iFh=rBoRtPE+DRB7mVLvH$0cBG{#~3$tJWfxsg0bU!ZVm4Ec>ZNZnwbGYAtz zr_()%YV;;4z&*jlcPm{?jbPp|Zzvnphx$eLr}ByJ_$km!TZsnZKEVNzxDE8kV=|3+ zg7+o5;PR8f4l?lhb9t19_=&rM7n{eU@PPBP!K z^tFgB@5;uO{bLKVpp4QSXjyD|WzIBP&6{a4J)RKJ-KZ#XBq|0hJBNHhjK^e<0_%#f z$xf&en@9$O-JL@&z!s=@R3ljqm`%y7q%}-Ca|U3JiD_e0)J=RZ-A>P>my*BfaIo|L zQlF?})DwCZeb@)}{8Fh)tpqr^maw1-eR-mtm5Wr+VkO*j@k;H7+F8mul06T)L)mIsRLIbE& zq#V0cmS^c{jRpM?oAF`}nl~_Q^bckZeVu6lh;-97xQw=yS_fK!KtE7ro@VJzF#uJb zP>-oUL;;S{E2;J5aQYWup#Bj=&O_ieTlI%_owdBP5||TnKcxfzDxZD-0*3%yybt;T??)^qUVvV*jfpZlGWpbd(gt>k zq`DIeu{88J{1xc|!{|?H8vYsc$ND3G@PQ^jBF1tPTSgtBN|~kRvt}pe8Qn>%=}F8O zCWN}oY^A?29p+n>SirpAmM-Rv<~V@dhv_Bsc6vCGLdJkKz9Sq7SA0D14iacC-J703 zJSK0EN663A8+b8NKr+B<%f)fxDP>2mBeuZ*%BxIl_!9Ar-bq_^1L<${FX{=iiw>gK zk+*3Mxr9_wcGPS0H4ufZ%sMKOyZ~}eKr|8~(MUQ8M5u^1(9zU3axFQVjKd$0gUEHH zis}PY%_C|Ba2FcLp+qMx#?-i+=mtF1P#nf#>;d`;ae}{NTL702$2y5^#BcmBegM;$ zTD6x<{fj!#nebQG51xyZz}}$4h{o3vn=yMN16~b3$F`&Mu%$#G-irKy)IbIGB!4j{ zKuLgtSxx^#dSJb<-sn4H4SECc?|WQ@ z4#Q0rgkUoh$)2_dDurH34>WIOni&XmK~9VvP&sdC6>%Q)4s$bDo#YA7R`4U7smAr$0!2jR~fdl=tl@yZ_ zLW>7LX!DxSDTQGmN% zP-}?0jFb5mQ$_oewS+ew1mB=gVhL4ConZ!-VdQJeBDlfKs2o5vKhr4vg0V49%m{$$ z5dEI+LQ5$Y`Ikzi?3szoJIc|rhxyJ_F>XLV=THl&!&E#;P*UJ3bf;vbCs{)LrlP11 z)J6If_6@&d%7Nx!`|vzcLQkg$f&TU=xN03EqP`KO_!v@$u`o7ONWG*Z>5cetd^0Hm ztDj6x1l~hmilR{J3iXY7MQMP}$|Ucb2UDBCnQcJZ4y0WvJ-q^WNFj7Rt)trj?_Z>5 zkt2w3GLW>84FIG2;jaN_bAeWO0Iuq4LO`T~Dp-yM;S+ErJ{3>LA7FV{Cdlf3$ZU9@ z>7M?GMkl?9HtuM3KAv{686TWK%e)b)YLeNp+d>q)Bt({b%L5o{-So!KS2!-r56E*dNtJ>bjyy^ z50LS-q?%GQ6^uK5(Y%{E#k^uT^b}f0d?mJ#{lHxYlZ%N@#1z2HOTZq;fL=d?7ZTI) z{n!$G5VivSgGONG7z@l(e2^NXH#{7wha4au(-PGjF5k3KPnu>!DB_AfL9AFeWFa~L zay2bA)j%f!8jT||$p#2E7MOOB6wRm7L4RCE8t^?>0q76fh(&}yVIY^_#h4GGLKh(& zP$r@vh7j9{t3XdwQ7CFaDo`zXf{DPjSOIyH_Q0NKdcez&C^CUwWqxgWZGK?&VRle+ zL9X2cd8?pLfS9#1E14bi8fqflg{-2MlgW5Hb`zJ7Ss>1L023V~b3jG3lXnOfsUf*Q z-56;P`T-S4zXMgZoALv@nMNK*`eEh7JFFkxEEl?7=Y>sz7x!3AhMQP465)X z@Fc>`BS1H`6R6PF}k#z)*`j;65l=eb8npQC5nEA{FCY|mJ_&)|{ z?Sa5OJq&8GCs3mTd>6h069R{b16Vf-i$Rl+0%Sjef=L2|?1GO$HIN)qn4X)S8XJu> z)gMdssmB%b^?A@0M1;HJ!6*+p0MlSXOhFl_JN^$b7axlM(o8^(lMkuK#9drPq@rx# z3x38f08b(W=->rlo|=PI!KdMA@I3f96b%QW?|@^KhozCHYrLpvawGnUmr&-y=U}i0~oy;Yj$>Y>|W-#E|(;$~m)2;MHDgeJl>?SGf z4YC;Pi>X0CbgQcSG6UUi3*uSs}Y9Pyq zINAdpjNZY|;#2VZWN+d=IUd9CVC-L_2Vib5G8DwF0%)sXpg7MHH^A8d;HK448>w}a zh-m=qznNM>38`HAGIfZ2L^_gLXfuA6$e^x}14uKukQ_#I67Ik=U5%Z=R-#g@D|#HA zhCBw2bpd=Ho&#k-Zl)K;&xUV?7Nf#=%Samp`h0zr%EC=b`NWzpbw+*hkD#j?gdT^S zv72xL@(W)I+$MK;G2R1u0nNv=0ZN8~m@2@G=sbEF-HDz;{gKmfPh>jUhJXn*+y_!a z^`=)Q1r!56gzrIfk(HNO6-R8i`6kTu5#3q7;8}M1c8QzM=0dLC* zOdWdx4Rnh>YuRd9$YcYw@ijfc>M4MBI0sD!K1~@ji{Kc0qZ|yyU}7ZEmly+dy(7L7 z^#FRZ16Ub4uc1nLZJDkP}6H;8u(w03#K?@nSs=1l|QduShc2N zhfQYfZmBST!P+T3wu^G7IYd4Az-%*nSi_iFgNmL_U7hxh zyn&3s@<=JV&#)Q(Nh@^rV6OcN#ef&G6?7vXaR$Uw0HQGrRCzAIu_a`XVJYxiI&pu* z7kJOr#1e8An1qZYlc)@UHl3hjmAQ_-Hn0$#+KmV-7S~CnY z_uO;7I^WrQ1FwO4AUPav9cH9pchTF#J@8ZSQ*fTHZ&NgX@dbiClE0_HTkZ&R(GRqP z6YI?8mn~V|LQjr|U_YzfAqx;*c_wV=Xp0X~WMjRdh_xaX*6G(fQ^T|DP8*F?u72f~qJ&$dmnvcRdm z1`dVTmU_!rOBE!6c$PXyZ0N8vM+aFpBL+yW|qG~czRuBHp#E?cgv)3MYyxv9AM z9jJ5P`a-}d(X{47pTtLYd0c(mkSD`+$ko@;>tr}G>>sQLp)#A-dKnJ1e1K+|V|7J; zE$O^+;NK4Aq3%QJ?SHrGnzytjc1{Q1cM4Q6$`(cQX6Q)shnCjXEv<&;&rJ+phi{H| zzDMhkdT5>xo+wv#PKapDWXu=(ytab3AfJI@h=cIJW|yTjHAIzUV^& z)WaIjKg}mw=lFg&R(s}nYMWdxjc-pYvU$fN4aigK;@bt|i*DvKiHK#+TdlH|Tt3_$Ii6Y^l!Gpq~S9vP~;m zCi(_7w>K>Z9Vo5)o2SGrcL%s~ozI=eoP{={eWtD1I>j~`?zJwn)L6nyGGm0=ziVNe z`3Sl*wsXdzy$9BT4&2?2yv_;k37+fVtaW*dqrKR98&p}Vn#-GopvQ3-AYXR7HSQvS zis^I(x<=`Vao?@OS*MuXDV#Ua=aTc-L`P zDZBz|w}11HJx%tzV2;|{Z+!x=Tb|scazA!dxQbyfKm&epuXh)^N4RGIZ`QgaK%Bni z4gv9EqKoShdaB%eT)6;&HOfQr?)Rm;$GTXab)M-SzI&TD7jyg{ zm#!{XnCm|<<~Y|^@ZM{0GB`h;?Mihco#UOYz&fP%Z?=;*f;9zJLON)lB@tkN*Fz;H ziGgeA&>sgl{L6}a4bSi<8`s4GJBo`<8$9{mPp&EMYGcwZw&w)h_}uCK~!$@ z9`lX@vp>i)(Jcq)ybX?r4m04dw%hK&3fnmAKeny5MQ}1S$sA&g)}^bIjHI)GrMq1Mb?>66MpTOPX8|YaA&`uNGUe_2$I>2OJ zvPW6h+6UOa+o##etUs+Kuo_x!xe9RCXDmMfK79@R4%XQ{0GHWg&N3#M?^^>c+s)$u zzJ0HQ=WK7@2l9Borarzk?m-T^GYUrA$HNL&yra}EvJZEbJEI-V&ZVxUPOMAeS_;m# zm$(EjFF?q$0Sm4O;73`m)vmA3lde;)Ypw?8Nykf2i^RBxf=*hYbBE)XOX6DT9ONK5 z+MHa+9jCy31;l&2n+fKh<$7pub41whIlR`B0NwcvItDdZhMN1C%%%oYvgu#rM$=y7 zP+gCHu>Mb`6}wzASKnnf`9jNB0=Z>|17-VUE48_;58(yYYU?p*tL28N*7!;{qJ3kB`UJaE+LGu+ zxv@5S({X?q;J7!qU%0zGubWKG`+QlR)n25l%vJ2>yR_~sutQ0946y&}*lPQ2pJ3J4 zURgQtEr08iOque9B;yKKwt<@P*)wyk%p zbR4&3I|z+wuXy`W_X0_N>*nZny+l}^e$7CDUZm^$n ztaGrP_w5gCwYEc!@wT_lMJ|@@rhNsNnGX0P^w#p*LbGIBVl7eT*XA{*QsYx&f5QuX zjE=6=;hU&6^1&LRA=+`lo#$cLN7$@jmo&9yYD*lbh41=qMdrj zGhm&a4v}M?W0^h3df9&1`4ez)>+Q|31#-b(0oQ#wWH!+ZCv3Yqyni7NA8wEJ$sCV8 zslG7q`K2z{j3MZFV304ZaSdCJX9?j+^h9 z2&Q&(Hb5Mw=(`Pl^h)h_fX1)T|1u;SZ+;I; z!CmE`+2p2B6V*zCMrqDMhXKa;D5yNT?NsYm>kxQ7dz5c z*H_bSqQZQ~G1~&@ljXQ?c5`1(m(SsA^+tOm!Tv4Yu@Im{-`O*5Pk^;Y*n{koY-s@R zb>F_s-fbTNlN}Mz8!+NZ_%7TB9sm!p3^h`n=GGYt1%Ogrpg zIfpohyRw~k9OqrZj^ob0_RWq-wxjkTwxQ5s%NdtC!>9!hrOy>+%W0n@LLm1AQpTN~njsAtf2NW)(_6~CgY_x=0p6Sd= zFFf8F2yn}pumkeJkKoPF9%zEaZGH*R{vyjF(>G(BDcl?YXF#U`y5DTx2J&Kz@s6q1 zRA&;KCs~A+Jum~7fQo&*=^>N~7g)Qk-)-CAUbqJ^|1|Jrz#tfCI|t9V{<6F?^UZ&m zo`8`n3>OWphQo&8`U|?rT8T!h&aKtT&ubRTx-{`Rx@DT>pmnYz#?P zE)AHAQ}%E6Dfa$Ao8Y_ovbn!`s_CMsz+7a>u~b4O@K>t}SodxC6Vw5)=oQdsbG$j# z)W3~-e8}P813fKP&wS?(*G|UON=>YM1E}bt!s(U554v;D?RV_R|nFCXHD$SAA1cuAQe_tw_;I0e9@HZaVxo z{2C^~apw8jtD08zpT<$f22;ABS~XoqGrzHD&6j|+ZMROg+=ix`H<&TT|66Py(?Gx= zTV|>;)fpC>ewzyn{q+<>kwI*b8@dc72FN(eIM(>hG}Uy^yc*Odc!*(1Hw!_9SO80{ z!%XkZea){e>!Hgq%bILiZ+U1rXdY%-V9Ykq4Z96i{Zriwom)3YGf=4-3L%SgsM1+1=-oxo| zh;@uD#P+8($65vdg36#gh-&=L_}nl;o2ELZX;FVr{i{jWakK)>NX=>uSM#@KygEj` zNKFN-$?bqaWzf(RSLMe|I4IPdY|@z<%v;QKbBe*G7HjqxiuGlHSClM%YdTLsXwi|p!=rXsJo=Sqz~5*(M9RYfv*#_kmf&)QX8Pn z*7oS8>6Ci0AWan5vexWOo1?;!{Q2r1Rw04b${@4f`!SE!S=50h?oleJ{W%ezM7| z2J3GqM1NhIrx~Tbp=ne9Qh!msQeD;z)+A|YU>q3j7+r|5Scf$oH|Il2DAVMzl*3WZ z{?31$BSA!VLlE2#>VZd^d(4sM15l(zW%_CP1KI&yfC!dr0Q)`}WW=lbBRalDu6(VW zphT&wG@0rQ#U(|cqDKBp@km~#Jg6Eb&rxib`Q!}>xiUk&R{PY@Y#d;~n@FZ%#yZ1k zLy`Wo{;8o-Gf{3+UKNm(E&BQTuZC#jA_Lusu<%T?O%wHz8b}qQ2~Ow~u)>Drab zrh4;H(^B06{arm(SF4?&UZ;vx{!-_wEow;hSiMGlL)j#c6}-zj(%Nc8z%$I74VN@^$_2`I%0&vYVwYmMe5yQG9w6T= z*C{iUB1KBuCrk$pDra)i`;BfX7**YEy@+32KM(w{ofCqcTs9Rvb{|s5Ht=$~@&AFp9^@ zJIZ$DGex)ZyyBu7p$*jc)zugv(>zU-F+ev`w@DwN|7`dSxSDHpEg<9d0SuwN@;UMn z`8wGbS(D7Ih?gIg=g2)$60MN7pF52ERj`D+L4=aN)(tk?HDwy3O|J}(jnhqgpe(4r z1vZIwlT>r$3YkSZPy$QtOU{Y^5jTlGiV7t=Wi`@MvKYYOpROp7UsNyGy3D)G*Pu%K zCAi$2X#CT_Hx4pv)s-2vCb8b29jqFqvTBd%UKtwnS$c;)Mt@jG)o##CP`y))QCw48 zRoG;QWFo;C!3ln^V5Z=UC{74?#-i)uC87xNdTD~ZN1dk2)%j^pfEbQcSEwV@v%vb= zRQ(kh3YH>Cb4>F_F9UpEiIJrnrAm=`xdlp@x>)m79if__Dp9n`SI7lYn{1A}QC=*c zt0+}?6h_4s#XUueTrJO#UsZ)^K4_8JkBY(CSj`{mOl_yGP}`vyrTJTZQ}IPUP~wm* zll}&p91YT|qD&D_JV4Zpk0q?5ePS}$Clx8Gsj5`XX2V-uuOVKWsryrV!P3vTMl)0X zNOD=!BK#z56Rs0DcwT-5|Er)_Fj<%=$r6PN2TRD}LeUDzeANMsPSc`ig7}rHYSCep zN3^3!w%X4JkqQFmqeQ8M(!bS3%0tR6Ku6%D(y6RfWy>E+wul==E5+5~)nGkG3+jY# z#KR?_A|xJ-8Hnkni-f_#G2%GsX7vg6C2hUBOkJsZts0^ktX(8sEkX#T{3hOJUNz6n zEn@v(7jq_Ys=0MsAHRe*n>$l*K}Z#p@;AxmsG?Oh>T$|Y=?$4)c2gE7juGXEQv`2$ zS9y!M5?(OxJI~6i5s;-0*(;e;UZez|8b!P;MOrGgO5KtG@kxFtl= z7dbvo4X+Rs z9?5rUo4itNRs57IxJhg}GmN2QC$o36&NDtT8`%}y z8~h^v6=}9~sr0FIgLI|jnKT~Ek3)1{@J@sfT<3@I_VAVn5Q02mj3hz&i02dT68MDA zgrE7B_|bx3{x_gxv_}#k@k-T_S5lSuyC_2(E{+tv5`_y0+#%dVUY#IL7%W;Wrb)2k z`?7TD2#HLRDVZb56T{-g0q z+247^VviiBOqVOASV^&P8gC`Xj}y&3#2U_sq{dUJ^o`WRK&`;H}exShrNe)i`UA9c(-{@ej%rg{gSnX@q$rFzfb4WNsI)>UHW%M2je-T zo4J^o$$;rpW;SOm?L$SK*lt>mU@&vohf1$@RInIqDA5c z@i@_W5ECbe&WL0A{dkE$CG0P*h#xE9^T+c_H~=!rQ*r;{g>WzPM)8vQvw7#a=lCo5 z<$@d`S~x*CSGZlYO!!FjQrInYi2e}f2^R38SOu)@+*3R@|0I~_>%t$xMA2puRum{2 zDe{SS3n{|U{3>n}w;A{lncK)q=C$&>1fBdYei3ayZZAeoPGZkzC9*fL2&@QUkaVs* zM)pNa7xe{KkLB)Rx3Kz936wYzf)q>oK^Z`5BAy^TAUq+_Xu*st6da|UQby6!f~kk- zedtd5S;iNZf$^Djn0<_~fwq!5jB=9FNj*S)Lw!J%(>BuL=zr2O!E-JRrWZ5vSvxpn zE{^kp^9O4Pa~16+* zIi8_mZ3J4HxA}>@GlCHQFab$WF0c!Hf>u77@6QA3nY^Lg1nv>;BHkcwJFx3{wCVfL zkn01U9j4oy<>pZ86-!6E-Im`8MW^%3owWTmhC&@v0Pw0<-LO4rM;=kip;EX_9 z?FH@%A&+p0a1rRP#gc$J7Nv;tff`IJp$#Sb$fL*uNn1!4$tqG`@=Q`T$ws~bw0VY7 z>6Dj1sp&MuO=+Q6XorCM6U0vN@pHK_ zH;#RYJ)O;Gqd}y=aq75OZY6g)`!J`6dywnmHgh^SnVcBTTcC>eo`>f3<-TG6W*gZz zxIcK?cxU)WdClAp%(b-Rv|c8j-NE(oDEx39k;mmr_z+M~ddrLBs<;8%Xig8Og5%&^ zA!>=rfxWG4ap2ouX1 z&8h~!d(7R-8l$2GJe;7YGCa#XVovY!ZczE7NULDuVjp5GW2sm`k5>5d7I+*`& zocU}iJBKox5Kgnv`cN9ExwH}V3(ROnA$JWN^<_L~Ze;&tZ)eSC{9s6#yO;__0evOSP5X~dWXz^z(eU)E^qb5RtWf$= z$_UanvVpD#Hou3H#y-nY0?QfA^#^zF;BYv%I4Jg0b`sF0-OoJ6_&~#wJh(=xoBSU+ zi&jjzM~|T|q;}H~R6iP<{E{@1&<#{*7ve-XI~Ik$iMo!?KwU*8Aq@?*#%svasE_C_ zOf7aaR) z>nSUOnZ(%1SV0LV$%$WqMl6xMnD~tpOYWkwNmkNNQay=Csv}&(55~i|2e|!M3ic9q z3wl3_f^;L%$QVRX!)inr@&S4w#)>V*IiH2iP;WGoBcAA`Ym0;v?+eB#!Ck>Ez`C&h*fAJ7>MVlMnA2F2dlpl17wVl zLc~x+SfjMzV#9}q!HqqL7E}r<7j*<(ig9BX0fEIA=zG{c7#e07`a713v*K3b7`T(T zU%)Gr_)ef=>cRcQW#hy+7O<;L*l##0{wqd-PC$h;%&IpuG&kNyFfl%S6gCBi!i(@Q zF&_BVZv0qmB7PC!JZUru0;-Jjfhz0|S{d~ups}Bzt)LC1wo#L*vA_m7xN2+~ZX$MG zqYJSEKO0NJZo>D&9>t|%-($nEW3l)>(~Z@b zH%Jqv5?7AjgkOV`;K$&HVkwwQ6}_^^hl0DCAhu01^|w7?Xn>gO0^y zW784k`v+D`tj+dL7uKnt4^vfX~Z-RY&_FQ zZD<0@pUaSI8{XIH>jGKPCl28pu7h)xHKC&J8v~lXbjTL`YY^Zp+hhKTSYDbl=@?hotiu}s4d(YKXA;tqO z;>+0kxcRugxDZ?&_BA#ieGh*Pmqkb-ZYQoM_7d(BrsAd8eyCr_)`pvC5_TT)W%;>H zy*qdA9iN3amvVHXht4ExJ>Dtz`cu)t0m!cXuu)=-?KfVa!1`X)IjuSOfPmQ#*O(G zy90Pc70Qf$4m95X#62d^@zpq>{Ej+>=--fxn2lM0?k)aW8dUbrj-fjXx22U8?M|qw z2kO~}kr|Dx^{4CB@4r=5lYg^xd0E%)k5!uL-1_#qpl#DjaXa`WoV=Q~{Pl3bx02k_ zdHe1A$5*Blm*mgR9JcoPnhOcHlHM-AkW5_0isQ!g#ypGK5Gz^}ka{r(zcILAYhllZ z?;8&n{$13&k+gA45n{`ey%5rk4n!|RKSi%Y9z$25G^i0MKcpY(0%idAFYHU~B=nQU z#9DkqUqm?Kc}@SVxy92r1#P-gGPvaS*0tpcyUA7mR888ES^OYhx;`(fbemzv!5!@F z+1rkkDGCP_s|xny1Sc5cU(ElsFl^=7vV>jwt&lZL$Ul;u=bbyoW55gyw+Ha zoP?}Fy+-dq7FXQeJakK0)tI`tT_214ssyF&8h0Fq`bWw z-6hn_Q)>@r2(#RU$(hKth$Z1Mx97Z{&YsChqLeJzvOGO{S$tg9oCOieNk1m^2?+}E zA0HUx9seZsR#?rnlm%~NU&NeQWK3SLxotyB&eZJ7dDn|S?el9KgdBoMMO?*%i zqgIbvJSKF!f3R;teuQ^+`NEC)`|?Zk2W4ih9iG{+{&?Yk6{D+EmDGx?UArpQZ5v*m zxBbC3WSOPZQpm`gTNqjpwQ1khZz=QB>FLk1XqmrKpRdp_J(eGao;lkr8!ah&@-cJMi-64`A7Qw;XiNegmE{DtiL>1)`zpNjY8mZsa%MyCd* zsndrge@Pg==<@3EE3YkDF$lbalbnsLVezhGsm;8(Ta( zAI==TYFoT5wqe16MCHPv^F~FkjQSG)Y~ioD*63yP5~hhm(#JiTxOn2Tpt1m|U-hV) z{xe2w7#SasA3SCPGa`P@^O%;EbBl~cs=Qs9S8_V@%GP)0OwEX1X^z@IcWd13WgnI> z=iOQmIcksth8{a*QV7lOzC0GO4~O#lD@ literal 0 HcmV?d00001 diff --git a/samples/polar_stereographic_pl_grib1.tmpl b/samples/polar_stereographic_pl_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..e8d72d4be74e6d5f47fe4e898ab4bae4ed334cbe GIT binary patch literal 108 zcmZ<{@^oTg$YEq)Flk6?_}{QRg*k|wS)7LfC;|ea5DHE*GBU9+8W;ygeBkR&UJ2w?^ij2}P*+kaF56cYeq zc_3y0$uLiD2Qe88Km_B-!wn2_Ef5S6KmtlEP|p7bAcGOaNk=jo$Q5OUSZd$Ez|g=2 RQUC;OZ2y5IE4w)m006_$FvS1> literal 0 HcmV?d00001 diff --git a/samples/polar_stereographic_sfc_grib1.tmpl b/samples/polar_stereographic_sfc_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..48557010c5f0608db6d9f41779ab68a5728c0811 GIT binary patch literal 108 zcmZ<{@^oTg$YEq)Flk6?_}{RckvWK+S)7LfC;|ea5DHE*GBU9+8WwaQAUO&1_o9JM)vE>;yh3ZK_&)9AY@`;G%zqQ1PVGb0|~|t zKthD=KPmu<2>`J?^W=6Q1q5&ggbN{+SfITB4L}AXhyx~=Acg_CqO1@b>>C&u8n{3T PfPjtdKagZ)HwOX$<%J~F literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_ml_grib1.tmpl b/samples/reduced_gg_ml_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..8fdd2898b7bd57a2bf4c9676196062c4bed0f676 GIT binary patch literal 972 zcmc&xYeJx5|VklgZ>pg|Baxm@F+3;3cVy{i!6CX)bbtv$0!- z#+gVp%-v$mN%^ zqwGL|;|H{L@E1(-$zhq!eR%yD+vl19e3csO$Gc-76L9 z_V6*b%p7C1sTft+f!gc=3>%6@I(`|UrV2x>D=L&vEGXGyt8i zYfyYsilV+r6mITD>vkm_|B+3fxFpj{R84aXcj$HpJyp)wQ#VsHDzr#tYu7rm+Z2hK zgNk-_ujtQj{WW)p9i@edkeLM;tU@<<_bLgvg=rrlmI(a|eK7cb6ow`9F!pu>e3|fpsm$Xr6S@h$pQ(j;g$?}7 zorQ$}2`rXMVJW>)W5pd=KsFLL;z@kT77|Q=M35*FN0K@2CFvxKW8O0Lmv goQ!^PoO1-15X>d{a*1wSvVaf^b3&FkAxaLv0raB~{Qv*} literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_ml_grib2.tmpl b/samples/reduced_gg_ml_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..1a2b6d345f25c0fd108b6529ad2fa2beb77d7714 GIT binary patch literal 1048 zcmZ<{@^t$DpMi-13|J(9lqe%Z5(5JZ10(x&W^o>%07#M*M4Vs-65@}T7#TF!{$m25 zqyrE$fMi&0HXQ)58Cro1Q7^{@AVDBkfq_AUL7G8@L4!e;!HB^IsKbN7n<0Q93J4Pz zQW$c8umTJl7)XNug~^1H)L|K|rcYpW%0Zp&x51)02Xi#@>OmZ^2Xtt7(2tzON+t!1x+ zTj#6^ZhdkBZj&rOxJ`X1;Wm?`^prxdu&+sEcMS4_Zd z)}$S7(>43tCf!};*1KzlTl-}Lw?;=Dw-PrOw^X$$ZlNI$+*}zu+)QHDxGB$da1;9S z#Eoepi|bR%0M}#v39c*4GFY`! zqzBGQ+;UD4S0fxQW%pS7OMt^39Q1>LFqvc*XP%jQ&mz^U#FBI03Cl_59#;GZ3#^*O zK3U!SHqYABz}vd}(hTeKS_U>E> zop%Lnm*!2dJ<@T(_IYB59lPWkJDFK?>`VeJ?EIpA?6NMl*tI+fvYXnVWw%^pncdE! zd3I+~CfVKJWMKE%G|HYi&DWk+C&^yyZmqpSnwGuhHWquMeJAX#i&^cR4{_Ri&kM5; z`g_qn^7>=@1jV2BsaJ&UvtH}i=ckp}7rUz3m$fgluQV01uP**-Uu&soU)Q2#U!StU cz5yK2qO72d%)kKULIR(S4U|J!+0B6f088IMzW@LL literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_1024_grib1.tmpl b/samples/reduced_gg_pl_1024_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..b7239e4d14f7af45fb8b5351e7df2a87df0d6c4e GIT binary patch literal 4204 zcmeI#KWGzS7{~G7dv|Fr=`}e7hl0a7SxUuNEOxMPI#i{T)3t%h=ZLB#i2-t;AFv}I+VJIV5ctedGGSxpIk1v!j*z}AGqW$M}}~@_xav^ zc>fN}Sq9wTPhQpeiz)RepEC^58L?e-U%WkIipEN%(sgmhv~XFg*LASTZE^g3ayzqd zrC!&>0c{u13k!X?ib33hjeBGa4={l;nI+H20$Ii?)=?qv9aU7Zi?8H6`Az=dgn<=^ zHw$-r1gagkZJ7&iU$fX8b@jX^tPZbwexbjlj^wgA~edU)+ z1+fD9)pEp=>Z_{F_S8M~NYcJq9+Wc3*1**H8Kwvm-;*{GjchYru2p3I6aeb!sbp@niTiN&1sDc43GF|54r zbw06fJ5^KNVIR5^FwoJE5r-R{y)`0wuBC+coI=4oBO`@&-V{<)L~2UKClz_gk;4`QD`@N(Pwf-TTC?5m0L`MXgxX7Svgy- zB%DU)y!jRGL`(bVv|ICL;f$cKuO_ z^vWnzjOjHE{L-O!Zv6y%Xv^y)9_pv*NM8-h_L40|ucFPGd#xI%xur(5JFlsb59MvO}+H51h{3@w#`->0nMhEV|gQOp#!%~&~}ryzkKy-q5uE@ literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_1024_grib2.tmpl b/samples/reduced_gg_pl_1024_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..b1ef8ac18ef8e63d2530405a33c8e24ac2b4fe50 GIT binary patch literal 4292 zcmeI$KWNlo7{~G7`zE>M+Us2uIusOwQz;eCLa~Fz;7}`_v<}ii4r!r-L!Ihk$xy9Q zhb}E00|jv`;^5{{Iut2#I9U;_4n-Fc?9}Ca-sJM{a=A+(r6A@5m%AjrmgAZ{-`u!; z^Lo7w4rkG~Y1PYcA5g&5&-p^Z-GMV4jBuHi%jL^}J}v>1=Ra_U{#-r20GjiYVvjP# z2b~vB=t=L~*Lz|kAk((9=!1cNT*MHr!o)b4z%5LnLLQJu#C=w#{EF%hv-6<5%(QqM&Rp{(hA*Sb2My#G=DC#F+aOBvGf-@o(;Wcl5o_d4zGx_ylQ%yMSu17vxgqW5ZdP8>aj52`(RC<(g`+KyR-~V1VtqB@wU^gov=(jF z+-ucP%`L`SuObbEYS0jU=(Qr>i!@}-Z_5oTP0^cPdwMNuhWgZNR_a&LvFyO_+I^>U zxBTv1bvoFh9u{33RPt=2oJB($4$;-X5mmNmZPDDKy?3a>tBoSJsm<4@(wCfG7u_!U zy+Wp_=qH@EH>vW6sP_A*`unK4AO)Fiq>Hwzx?kZWEwa5jPruYZhST P#R0VBa$=XFUZLeLWbckc literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_128_grib1.tmpl b/samples/reduced_gg_pl_128_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..7f1fdc78cfec675b344a4c1f0cc012a40c76618e GIT binary patch literal 620 zcmchVu}T9$6h-e_BN$mk1dDVDSfq%s2EoQ+m4Mm>OCgP74_!JHx=dchB71-(4d}1UNU3@7BEacYgM(VF>Q%IL<%C zED}^CilQ^!3F>H6tQANv)%Bp4?!FAHh0zsogc?rJ#3|aiM2uU~#RKUh!83W~(IFY* zgM2zNWSHU0vB1)?!iu*Xkh-HKEr~rHc`A`gju9h6&qyXErm|)(+kA`iyGelmVe?M@ z=ap<%I4|m-min5=sOVYyUuRKHs8eL8Ip&FKwg7YXi7&i?8Es_Vj5-=SUxwz?UqX}W bv+LZ(wA`lcCau?KAK{*#qL86N?BXIAq+s2O;9@uFAX;$LMaZJy)}@{MCv@-+ zD8-?Ff;hE{vx8HY_`ORS8nXL-aCf9<~agD%t<6QK-9L7h>kp+cgs(eb8)fXFhJ7?}3=ij|g-ddU9_~pW z76S}1<|{s4A_4@MVNPDj2l>QGASJRJQI|UJjA_bkhC5L#8Agm`k}{Q;g=G1X1OrmZ z;hEobOdf0g7y0k+{PCAwE{Tff^OF_VY=(;@*=d^fL`F#i+C|(-wx?#=pLQ9ys{H~h zwym9O_v*lmHUxd2V33}{V1@~20W)TdVDmPgAPw5>+#%Cry8hAp0Kfpf(92EF{M A`v3p{ literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_160_grib2.tmpl b/samples/reduced_gg_pl_160_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..2736ebedeaf22f8777cb508a0c9c85c4f24a9fc5 GIT binary patch literal 836 zcmdUtu}Z^G6o&tE+q4vlpwOYvLBt_Kh1$hMFi1h&ih~p<5eJd%x)ic#aqD0^=Mg%% z=}sl#^^J4>x?_)d;6ufKe$z!Rgun)>*oKQ;G;shA zC!~!FatR;zq>BJO^fBc25HFT7#+YJ8KFBBe!h+XZBb%1G)Wu6^$xVtoQ3BGp3}m!q zA~ADG^DPO6Z8EhCo>`@1vIORTk-dNCkH7RXov3MletX3^-NSj(*~zlkBN-$KXcloQ z>6}{2{4~orRm~SzFm26TvsVYEv|*f>p^gk`OOMuctv^0ZQlHw^EsvHpX`4&ysY>M0nFt9 literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_2000_grib1.tmpl b/samples/reduced_gg_pl_2000_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..f92e5499ed98d3442fd61e47760c83379773629a GIT binary patch literal 8108 zcmeI%J7^Pe9KiA4-6hSVX_BVT^kL&|o(^s7gCj>rgs`AT1PeXs3$Ma!SES z9Xi<3F(QbALn#gx2ZJ~i=@6VOIJ6F>E+Xh+5#sNEuUzhZc|kDwKpuCO1a3&~|NCCM zb>k}Zy`}&za(ABOxJNV0vELU60B#|-HsL|OrzqM*#pCe{WJ_NXPP=lsP?}2Ykk=0r zJMN`3xtu3UUI9cP3Nh%1b1(>((RDNiH(?r*=pMSyTY|@E4Q)Ugy%A-A*o7~=L->h) z!3hOa5XGpoh~>>ud5hE{#Zha#b!toWfg%n>N7QeE2Gk>BX~`5VSfB+QO{C}-qAabn zPyY}wz>6`G0Vb)j!sKNbwLNB!IhMG9H|$cIbt!Q!$(Bp$y^HuJaf2-ECPr1#ZZq5N zZTDBD22fxd^xSSBGFCiZ1Ct(ooJVQXBglHxzI%9H5Y2n7t$HP&yc#~xNczkz`y?NI zy8NIc=9fJ6TWVxWFw>a#w$VfY3=9R-xPXyY0fnaXj&MyTf?>x-f`wiNZ3uydct|ZB zvgdP1B@7w|;WBG(*YT{`kqG|K+mwlv&)?|3aa1vMvms_OdKy80QY zpMm-r__}-$rH)FRdzmqkIPp%UuwpR)~*6JyiC@Ex9vt1^sbW(R(RoBm^kf9e9IQ6% z;3381Mi3oEIs_eBqJxCc(kUZIJ4jt3s7n%T&pThv&iA?>u;l!}U1w%j8DX9G`Cq<% z^-?YeG)Noo!-p6JHvw3nxKF`QNIn1!G*F24QHez2EI@aP0qXqw5KTdkKWE+m!fEnS za)h0v`=qzIhfiX2U#7@T04@s}pCHwFb{enaMRqGK?^&vqrOC4FD7ATQgm8?;liZ>Lor#PT~6Et2LxD_NYPIfSz2$G{vl&P!ZWH~CTX(F9LX?7JIoIAP2~g0pwDQ=rziSUn?AkQKH{s2 z#Xq_t!V<#hLBu)-^^t-N z)#rOw??D(`B*I4Nus0vV1`#mXiHLjaYD^tZ6BI~jvJq=7 zqd&1SYZi;L-R!7kuB2YIc+d(iZnYjm9B*z)Xe{p4lelMXQKv^m zT~KwBT@}|YoH)4xCs*L)3j9A;pz@!x_!Fz{zfm>)ukRc!_TC0xU*-3A<-Y%Ihsxc} zw@rCpW#E}!*DhlvTruJ5>p1H+e2vR`(94<<&nf9j)_K*8M~hmOmwRS_?_b85huxe7 z_ZK*`Io@QbF=ahz!o8)NW@S81&~VaL*mMrhwwUpidX9+iXPQ=w_-pZE?HJTs0s&7kpEK@)BLEF7QP&CEs9e0{)X5)V%EdpveD>7Op57zpk~ z0?$zU1#eL|z`BIsUbU4hxm1;;sl$M|*5Dqs<*axpKXYm)lB*GZHTI;eQkpjM`jco= zsm5)pR=}-?;c>Z~Sv565SKUD06*sYnbDQdWm6|jGQCj)fc2;^fufJxsE}N1%t*BJnd8Oh` zXkAy(S}%5Axd2lKS`(HFvD%B*l!7c`O)2^*+Uru^CY^gxsotc2C($Gp@e!$wlSbZ;wY&$bc^p6J0Zx%*Pqy4c{6dju)A)El eO(HwV>=0u~s0X+x0*FC!0&adkImB}3aQg==oBp8y literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_200_grib1.tmpl b/samples/reduced_gg_pl_200_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..260bcddf031378924361bdb229ba1456eb14d88f GIT binary patch literal 908 zcmdUuF-rnr7{~w5dj=U25i|%61`Q4dCP5AjZ!Hx~Hc5j>I5@c5knz@{L4%WX;1_W4 z0~}6{jV+7q<-922J&c72Y3u(H=^@-9S6=7KCo>Msu*Xwv|1oXj zXHklzr2YI-UZP&QGz}y^aUB@?PV{|GjO$G!U{cNZOI-7;6aRo2+bB+oo8st*ZMEm- tio;#Dxy4pD+3q@9USZpdY`wUzc?u#&n;MGfh_Wne4=_pwhvSh}$VA=c08~Sk%8Xf9d-Arq=S|}F!jhMK(FeAW#11mp zMGgnBaZ1jS#}$gWK^b?b!a)rUG|?i@9$j>~_=UWaPx6Hce{X}NJ+dmR>?tMnOGOEe zYE0><89gNo=NPMRK{Gid6=3Ty1wF&j%hYvUw?ho{YF@SQ5yrp*Y2*K~aE9;+`Q)E` zb!G;k9JZO&`XAYLf?5<7s$>WCOZgS`tEoP1;-YomlIjR+h%fD@Mw7}2P7m>Jt=`~VaH;wAt9 literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_256_grib1.tmpl b/samples/reduced_gg_pl_256_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..0eff9451cf92f174e1518d7634c0a6c024a9febe GIT binary patch literal 1132 zcmdUuu}cC`9LK-E_b$kgh@e4mxHb_3lc1&H3ZbIOCTWl(92(qhD7aG4HYaDnf54$X z;BazqaLi2?af+ZOm+SY=yXzE@8hanO$Gzi*_ul7oetmfctwg|)b^GF2&qX=iibSK} z6*czeQ}84b8l}_eL$#vm*w-9KfC?4${#2-JJd7O2`xm>2K}P}y$lwG9E|@Fia03%X zlyJ{HqJ{>VXfdxYHf;3p<}$_y^NAUOwi(?eMJX~|vUC@sOl7i|hD(Qhx}+EdOz2A? zz{CR#@k3ttSYna7XonbxWrkuX-hCuIbh$`UCZ)NCs$7LFe@|cfOyycM{6E(3h`;)K z@BiV%?3HI;U2{t&-(qsma1*w+iRjIy!8P}$o8+!%zxJKJ6v&D@zxz-w2tJ*Db#U|IB c3`wODlyUD0C<|6sJ-Ys*8(Ykb;UXb*fH992^AQ>LO(D=jP;G=s(aw zoP#)Y=+IG}>{6UW(5Xv(zch(ym7=5H1DB9Xj@;e*+{)(Ka<2ysudI7sQVKgj3~KBt zkxceGFrlG{wp2c!p98E_!*_~@S|J6Mnzu^sY%A3?d^Hv^$qXCmhBZDkv zF^@&qSS9NyVjE@bVjoB380WacHLB#s!-b0m9z5E3Bk$<)_r^)aV@Ay=+oPcNB2-jG zIpoTtt^)3q@Ep=nAA;sA^i+tgzbNSdM-OtLYY|#{m`DAnUjqz$GG>sR$(iy9PRviZ z=JzyBz>67)h5yIs8L>B*d-D$~=Ki?mCnI*L%w5b4?QAC4^B@DfN+yPL(u$<0rZ0w4 z=7jkxMN(;pS)G#X_EW4nVXmLOoZp4Hulpv56XHhHm4a`OxYV~w`~tePO`L1{1~zD; z>zi4nqt~?coYsoF`?R=Bn~Sts+_q`?JZ;a?`ZVnarY$y7y-PN7Ch!xev#J~ta!eo< WlY<6WasVeGFR57dlus#82;2rD$ literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_320_grib1.tmpl b/samples/reduced_gg_pl_320_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..05d7ad4a1385d69b29db5204c9b4aed4b244254c GIT binary patch literal 1388 zcmeH{Jxc>Y6h-fw*?^HCB3K9(D+o$Zh(XZ8ViiHfDpq14K@zY?ADh4^foNx=b-+K6 z!p6!aRSFAB?UE*>5(_Jv_04A8OuqdA&ViksDc{_C_KpsA5Xlj+uFh^eb(N8=$!IJF zzR_#8y@g*QVNoKHSkpHV8w-}_2}P$*`h0o%6e%ou9y$61%wP_SSjH-n*n)$7<`5~I zAdL)ixL^t>;g-2a8IL|LT-5O9)4-?CH-V-Y+h>JV$nn{wbAvqPNiny~9aRFVq^XBA z=}RNP%!fFl!?9?igvqtI77qchqL+8^(MBS`mL1|UF4F@k%5GdaoEP~bTisYN*tCX| zwT7dtUMkjjo-Kn2{`t!U%$f23_$gQV-bRgh$?S*(Y#K>HcZ&F=vo$<!1GAjw zl*f(K+rM4-?S^>o>&-7;Hm Qj_rrogoJJ;NZ|rm%Cnj~et$3L`H~p(5A^pTm&-lw2=Bh%&xcPRmwP>ExCwvq zE35Ds2%)BaPtVNs7w}3$5gn*fskFr9RRg?uZ?!@`(;FQ?Te($M!kR9+$9(5W_Uq+_ zTm)1E%wi4;$YT*@yhVgnvW9ikP{$W+W0!nG6K!&U4vri#Vw~ca;~IY*cl>)VNzPGJ zMHM+#)RxDN+EJFY$-e3)oG9TcQB-zgT!V$XXecO86<#5B^b|UFdiEW(+wtb9C(C`)PE-LfWK!vpS;W6k#}RC zd6S#ZB%tCY1%oN#FUi*U2JTu>L%^>mFxOR+Wmd!0!t@|8+=!+BnAG*t(SE?|fCri04<7h<@D`}Oj!058iEJpM1>W&v Pr+GmplaZxx>J8@}KnXC? literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_32_grib1.tmpl b/samples/reduced_gg_pl_32_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..b8623687cbaee5f1ea2f08d0cea89540478158f5 GIT binary patch literal 236 zcmZ<{@^oTgc*DrRVA7D(`M;qlh4}>+Cl3z;Py_@-ArzcsWMpDtG%zqQ1dA+SP-OZ4 zpTU7K+ycaJ47Xq{b^!_~fMpp(7^E3g7&I7k8H^Zg7#tWp7`zz*7@~kMfgyz<2M8;` tuz`Uz2+;-7p8_-qWL^N!WDlSXHb9$nfi|iDZ5Cl*;NfWCggC_<2mmE0DC7VD literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_32_grib2.tmpl b/samples/reduced_gg_pl_32_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..bbb40f511fafaddea2cefeb7ab549ec6beba0162 GIT binary patch literal 324 zcmb79F$%&!5S%-634t_1f`yGpiZp>}V-rwBFlrMltwd7#0LwHA{=x^?_zT})=_f4D z*`%~`hTGlSWp{R$+tu7!Xf#j@x=7&w7%1=M2SHmvS3{B7QCXIan0$6=EK tLQbWWiZPW#E-`dy1oq0UltdMvE;m`SSu-+ns1$(OZ#`UBE->DN_yW|sP(J_w literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_400_grib1.tmpl b/samples/reduced_gg_pl_400_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..1869f1e97098ff0adac989243b5441f27c33fbb3 GIT binary patch literal 1708 zcmeIzF-Rjp6vpxI&Flu15W<0lV6oSUM2I42VG%|2j;p*%EWAY&EbMcQFp7oOrO`TI zYZ1iWU}a%pd4Veo1hG0StZdddvwO1>U0e{$+aDy^O_$93zvb^=7f?7QU|Mbbiq!t5 zydN4Y7Qs*SH5|X$S0dq2wOXCjPYNMEdr>3 z4A-X9*Pk2Pr4w=3*DRHkY}Kh-%{FgTH&C~b?ra-xO)D>LJCBl@DlTi?DeX2bCI!|l z4vZ474DNJN?5^pz?s%K&t~c4SX}#j=>-O*P76^G8tngOQyFu@WDc%-iyfsF6d!RU= L2ItG*Ylg39?k{gW literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_400_grib2.tmpl b/samples/reduced_gg_pl_400_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..b2ce21990a4ac0b895687615c1bfe83204db4ca3 GIT binary patch literal 1796 zcmeH|F=!J}7{~wLd-pCBLa9Q)LWiSMC>3HCI|v3Tt>RRt(kY0A4qcq$BD|qW+_JRu zK{uyR+#C#@I&|o0M5J{nPU6t1OZ>if=erksBv2gvesDSRa(Cg~_x=8B&z?LQ4x!+x z67ffk@EkCp%9p8XHCwhbV;0XmUOWyNg1pLe%;!zZp*?qUfKn8(ahtYZ@`yuc1#F|T3KW%iLWADBLK%zS3f@yl_AEB=Gi zlsFb?k(!Pb+74(_n=Ex5d(_K0BH_$)L6>x?cvIAzr>P1yREAX{9d+P2RUrd4P(L#? z9EmPi(5(`7bx2>AbD~f5kAeuE<*1CU=x=OP(2L6W6gdpH#8_rb#;O@dYHr4%3HfR! z5Mu((_&@(@2PW+Gq<6*Z;k!M&VTYt+`))Pw&Y7`2%pIO}J0Http%+Yxy*5i*r8Bqe zXA;Gv@|nzT`Be8uW`DQD4lTV97$nK8^2af3o56^GPQ8~7RABarmelYaANT>_OF(Z^2^onQ)Qkib@X!KwN`Al< L$FgK9_ql!p6)KXq literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_48_grib1.tmpl b/samples/reduced_gg_pl_48_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..77aed713b6afcaffedfdeb718a4b0e537857b80a GIT binary patch literal 300 zcmZ<{@^oTg)L~>`Flk8Y{NK=&!u*1ZlZS@^C;|ea5DHE*GBU9+8WM0JaI0lqe%Z5(5J(10(w_P97eJ1cM+G10xVJu`n7K7#K1zFmf;h zWsDy%F*0bd{l^4A$pnyAkPNGPBL|4h&y2h2}Ter1xU9o0C^JZO;J`*Krt}bH!v_X SaDo&70UH}A1X$V4fdBw;PG~d$ literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_512_grib1.tmpl b/samples/reduced_gg_pl_512_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..6314e1e17cdf417e475c2606a50f3ed556de356c GIT binary patch literal 2156 zcmd_rze^io9LMp`^W$=72qhFc2oBdx#6l{CI&`>puq{rl9mK^@6dbbKCGfNe+AWhf z2K)y?>E6T1!69P<9qb}@DTO+@T))r#crLj-njen67bN6}i@E3Xe);zG3wR9%JW=mI zN9xm-xGc|9Dxf?1dXT)CSH`$xwOZ}5zT^3LD5FS%ZI<=tkDFzu*@_~rKhSj_v+yyG zM_9r$@`|kD4K`3GTWH_|no!tB3x{ZvudxszPVt@mB!9?XTr;qH#E&hqAhpACyKI*! z(u#Fh;)H4E#s#}#R~%%{2zYLtYihs&KQ_9&Uyt|rZ%rWPi`;^!TkMHkC~VHenYheI zq?YBdZCRvbrX!2KN#fu}RYzN~YCGfj;v{}JLrN$JO1FDgN`$4Ux!wfU+{r0-v?JH1 z>)y>TcO(!0x6%J0`o`UUg|79tJsRVwP*Xf@YZE-p-t?!2{xUmzx1Z3UaH27M>gi6l z3FGWX+qyj~@h(+w+%4!`BgMVzm@QO8JGpIH)8%Yyv+bpKy~VbT4*OPo&$9A$vCvln zKdD1f3Mxi#pdnq;mScV}&>a=GXuYpafoay9ZkTQvyD)7#k6U+=mamhRP*D?g8}m}` zn0_v%Mb&KuuBo)Tx4OH!zo%5&7op?dPfb Rvs8anJT>#Y3c8-s^$!VH-4*}< literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_512_grib2.tmpl b/samples/reduced_gg_pl_512_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..0553d25af2f8fb849c26184e0690ae8432457ead GIT binary patch literal 2244 zcmd^>y=xRf7{;HO{klMq7`!5o;t-1?L^#u!Lh-POkyILskTi!FNRi4Wf&`|BCU&Vp z%7gp^hgjIT1d9|YuJptrHbEN^j7^&Jd1r6;zBaj!l+F+KYj)UWci!hWkDfk$Sg%9F zw#;YlvI@@u4=VUNGCCS{;JSt)+Es-@;SP|QcYqszKWc@%U+->!Ye!0tw{riMJ$b`} z?910HauN2KYYw@(1U9 z!D}REnO4OHYpThH+E9k;&COgW_#wwxxRlg6=g?EHvv`K>LpZa1rLC&rDbxSf1*iH8dr^Mtun%3eRb_aeS| zUHIsr=wHq=KO*#pCddrHVlX%+=*@nRMm4w^KZBlR@PE_$3-OMt{e^1kzuoU+R+u4X z+u{JTIWv6KaAaJ2mse=9qoUDW^}G^iLO=OYPR*VTZ^gUf-y@nhY*@KWKkw1h z+cfqj&Am>8m&h`WzF^%hj-R3J^R)g1#sS=Pxsg_X#|<9<4uX1HmPLXr6Oi>}p#eNF QfEke+*nD5Qyx=a|KZExIIRF3v literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_640_grib1.tmpl b/samples/reduced_gg_pl_640_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..5c03e8acf6f475ad18b23f0ddd6ee8782c564a75 GIT binary patch literal 2668 zcmeI!ziSg=9LMp`^W0tTE(8gJL!rY79ZIMWi(m(b)1fL(wGPFlhqTZkL$|uLJW8RJ zE}crpfd4>HcaP#wq(epv4((FvB7&W|oZshuJn3`ZHK}HB@LrJQ!jU1#eZTLAPai)( zwZ(ut;>DXtyk0O)t8T3ZdPg2Nk|*`Z7&lq7*}N^^sd~6+Mv(RPlLcjwb}aXp_H9b-C`4e@_^Qc}AvTG>jl; z-RKF8A_vBSahfranlkeiO`R|^9aHzwBo<24t-3W`pl$W@&Psf>G!t~B_ybcWE=HLX(_EI*->6hwiR$rr6qgoIIXXJDzPxFvNrYE4wc#l6`Sm~78P6& gx7-X>ooqYVc#~9n<5YbkRDY;B!o6Py9e3&Y1p{3*&j0`b literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_640_grib2.tmpl b/samples/reduced_gg_pl_640_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..a7dd5580bb0e89cdc112abc468b90e00f2b67102 GIT binary patch literal 2756 zcmeH}J!lhQ7{~wbd*7i*6fzWw98Mubh+XVZFgVnTQ>{bMY(zP&C5%4Yj~@eR0m#CWn@4NqRt zLFu{vjz0vX4_w1AT$FJWqZlV9i3ga%W5UBT%;N>|5-V881{%bNkN^Sp@HylNKZ##B zr5|{Oa6_u1D(WF~qQjzC6h5&Y(i9Opf;mh%7AN9F(nFCWDRr4JBO`oymQ}eG(~>F& z@<)V*5LZj6Xcf)tVp;1DXj$xQ``Whz9Wi5iH?z8muO~Ehm5(}MAcvw+G$t}=7`=FJ zM0_^JFmCbl?;HI5OkJgN3V=&WF*rBB~~#f&A?els0r9iv(fKL z&DnFgI+kQ^lEJj+OwP*c;7pn?cO|_?>0e1*z>Vx6aRqtMWf85^FIE-r@M9a9N&Tdr zI?D(<47-dtPTl4(be)~pe44Qd`Q$|GMjca{i|vU$$_-(+0#3=a*td>i``RND3t}s4 zke_XksjZN)vA4~W!Fi#}O_9~H+p*(~lI@kr`i9B=fEzk(xY}=MLtg;82;y~vC6P4| WC4)s1xZ?x9!xN}XlZOoJHq~#Ml3AJn literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_80_grib1.tmpl b/samples/reduced_gg_pl_80_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..78701256731d970940a7517aa7557ca1ddc2c823 GIT binary patch literal 428 zcmcJLJq`g;6ot?AlOR)wM4=;5C`d*kqfrbEx`|Szn26E>=!QmgDzybDEkJ1r64i7{ zI~eD_L814)@NS>Q%bIeEUfNGcA z$xxMFnv&qkfBF3L`+xP5ElJA6(L25N&^}2s?RYSKw`{Kc7c>#jh-cimwB*oMgVrjv O2P+rm`$d{Wm*)imGE3k9 literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_80_grib2.tmpl b/samples/reduced_gg_pl_80_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..eb9d2bd0b286f92a37b64d2509b106028fd5764e GIT binary patch literal 516 zcmcJMF;2rk5Jlgb*iocN2qYKjB9y`fNKO+PBrF=BvnZ*ekTM5I>4pSELzUWx-~cH( z0;2N`xWV#goiw3lp5&eN*t_%p+&*AU)oD;OE_h~h>Qy+Tv2c*N*#8=BgUxAdgM#Y{s-AtIND`Ys+`Ux% E0wd~fHUIzs literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_grib1.tmpl b/samples/reduced_gg_pl_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..6e4d9b1972884e0eccae6f65824178ca41bfd9ee GIT binary patch literal 236 zcmZ<{@^oTgc*DrRVA7EE|9?YM3iAtgc2*t+pa=+vLMS-N$jHRPXkcJq2o_nupvdz7 zKZ65fxCMyc7;eE@>;e=}0LwCnFi10~FlaF7G8i$~FgP%HFnBWrFhl`i0z(Qz4iHv= wVFLqc5TXmDKLuzK$h-ic$sRx(Y=AcD0&P?Q+APArz{A17;3xocj5!bh0DhS%761SM literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_pl_grib2.tmpl b/samples/reduced_gg_pl_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..3f038588c0f8066e1430cf59377b80607b97ae3f GIT binary patch literal 312 zcmb79D-yym5Pd04W01`tFbq>sQ-cAK89s&rrh`N=Oe6X9UPr1Iu>-!xx_GK e5X6;~WFAnLxMZwZEguD@t%zS_nfySTG4TepDol$2 literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_sfc_grib1.tmpl b/samples/reduced_gg_sfc_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..a18b650ab3eeeacd1ecd627cbdd8130f248727a6 GIT binary patch literal 236 zcmZ<{@^oTgc*DrRVA7D(@V{X>kj2g{&cgttK|mBj!AV9&CKg5m0|P^_$N~mMmjC}5 z92mnbK>WsV3)W&6pnw8cmO+F;nn8s@gF%ekXhY literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_sfc_grib2.tmpl b/samples/reduced_gg_sfc_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..5cae32465511afc2a891ee8a21f2f447fd800455 GIT binary patch literal 312 zcmb79D-Oay6r63ltwFY_zz|YVQ-cA~gpZ+sX^<#FnqW8pvW9zb22OzF26!&A%oH4o zdD+?b-sJt3+ttE3c<5jz{1Sr$5WqxFKkYFg(TW~EDSdecdFXyYamEKJw!Gct<3cA{ z&#y`{8~`!;$dIGJ2qh~jY*1rI+oQpWcJ8djfA*})2_+{LoS1QP%q4~a cNpLO6$UADkFBm3PhXT`9;um443v4td-c{yL@c;k- literal 0 HcmV?d00001 diff --git a/samples/reduced_gg_sfc_jpeg_grib2.tmpl b/samples/reduced_gg_sfc_jpeg_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..cf8a7753e250a66b9f09c85c8727c7373d468182 GIT binary patch literal 501 zcmb7Ay-or_5dIc8h(>LMP|#eI0t*mqNX!+0CL$Ihg@w@s%w3|15pz&n$645$_yRnG zPjDq~U~GK{quuz;NrDNL-|T)nv-7t*N4?{g2oi{4K6&H}u7MOx<}I0D{MpQB0FdKh^-V!AtA}AX7qh?(9B!67&Nb-){<@3jS&~yFbBRj7!Un@yE7PdJ>Nd}{L$_3-mX>Z)mo)0J?N+ntQ03N ym)LAP1VQ+B$um~t9)}FL;zt+(PHM5_5!jfW@z literal 0 HcmV?d00001 diff --git a/samples/reduced_ll_sfc_grib1.tmpl b/samples/reduced_ll_sfc_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..c9781f761d62b09074076b483f7a5ff1b1c16216 GIT binary patch literal 40288 zcmeIyQDmKW7{~Gd^E}xW5i!+vv5T;(s$Rrd#ny{+v7L)8tD1_)MOAxD#KbO+shEmd zkExm?Dk`?fD(0AqiHJESqK=A)iKvK(h=|xCrg9NoO)irCPD0nancdCzeH`BNI`8}b z|DWggoDVxb%BAn}mQq{klN$%s-+EGdE#7EMy3&wRI-$?Yhnd%%$Ye5a*DlsIq_@(+ zf&F3E@9FE8x3AxOrGG^iK7IL?e{(*P%4sZ3q)M7jkJDUQNK0uoZKSRAG(Agumh4q) zv}4w6Eq2<@S;pS6tmUlTKDJJ~VtMPfUMpCi^;^;I+JN1+VS8X@8?yH+Y|J`?d*Pr{I??+wKM?*Blu{arT zMoXNEGjT3jBNJ_LA+qsa(I2;>7+=Mm z_&Q245QA|)hT@wTi3c$n-$yxqh_U!F#$zHTMwX9l+Rn?km{jfG-BQ_7~*QnLji`tHVs=t4Gbnnq~YEL|RcI_>-x2+t$xweAE z!__QkUA5KCX`M4#Z*A3&wEijWqoVyxYG32p--Z{Bv<=>`0w5lIx)Rz|Z=cM}7q<+;$o$srE&(+5r z^>a&oT~~jX)#rKjdq#bqQvWBFgNMq)sB$r+e3X=vqVjT6xhW_=J<8El<*7rtYFECp z%Gr74?W}UwqWm3K4(r`*U%A{>KDU+AHRW|txt&#hrRkxPp^x~O=Y8A@KIuiD_Ln~Ii@xluzUFUy!#DlCZ}~Q2D92t@q6!D_ zBNC{^VH`yr>TwJwkiK#jNu9Lc#3gM;28>>&oPN96!C&{8Z&swIg2^YdCmna zaxQT$m*xsquv(h05zVzPa~x+m#>jCH7EJr1)j3D)NT>r}~ll_TcctlxXqaf9_-V_lb7-+9(~ zn)RM!-N#w~G3MYQ^Dx9*^fMnl%t@Acxz5~Vn4b>j=p6IZ%v?1xUrFYyfq6T^+$EU5 z{mfyxyKOUW9LGP`ov2h!j-wlQ&e!wpF0MP|KCk<{U+8?hVzIbXwQxlyLR> z7qyU*sOg6V>a(&5b@!!QhLhimLW!!ct)pE7w4!l^0cbQ(r}ua8$;WU zh0xBdVcIuvhz{OXLdTEf(PyMWx?F#sZklwZN0r}!8(0li^?krEvjf4D3`A{t;ObHf zURF`yThR{zjYomWbce9lJczjx1G;BgNZzG^j6pu++^mPfZc0*rm!0TYv+FrAzYv%${r<6<=|$SvVl)*LMQ Yi(sip0?Wr5)E28Ho10P8np3Rs2Y;pZ7XSbN literal 0 HcmV?d00001 diff --git a/samples/regular_gg_ml_grib2.tmpl b/samples/regular_gg_ml_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..1ee6c206604b91c0e51f74d5e7e782746f3866a0 GIT binary patch literal 920 zcmZ<{@^t$DpMi-1447vCDN#m-BnAc+21fSl%;G#i0gxmsi11(r5(+@fpuzSZ6#&H= zfYp7uvY!m+-iR)pWQtwuZRO+O)@I+fzH2Yi8SAe(e6^%I{R`s(dcN)r#es zYv8jBuGz)PuFb&_t`qlJxGwniz;(k<2iJr9cDP=)z2N#Z`+(~Y^9(oEOAT)P4=voJ z+#K9ges{R(|NP))ZMDSBZTSqhAd?qvu?KkEGPMr4l|)#$)vGzUwd{3p>zp;gtxrzC zZIa~&x2X>$+-9hHIbU4%f`@d9F4}QLe(yb}sj&BU~1lGPuN_NpTSnk#Sy;^uSq(Th1xs zYJ|h3>>g`>32@kh!h0|PlSy`Q=9#JYEKVa0#2z^Ym7lhwU%^Q=t` zysf)0&9FYNWnd%1-eBYNzQm?WR?24Uk#9Dy5*%zrl2+SVyjHhOw)kY*c~`)8Y2F0e zBOMoPpC@+Mu}i+OlbJQg&Lq&n&M(@>F6&~8UCWaoyQvLYcFRSU+3hTvXLlxLlHL7H z26mrKqwJZ}eC>I4lI+Fq*4itiY1wOTW3e~dcf#JfnAP6-5U0KOyfFKqzZdNzuRpd= zQ2c41dPUei>$Q%3ep-orv8$?mS^FaUN>d^G>f*2VwU&zZbuC)<^(h;ygeBkR&UJ@L&cK3P8-D!S){&0L2=B z*a3(cKr*a0n+|~32CYDbsF&jc2CX+9K)wP

              BUZ0>S?VAi)S?r2y%+1rRfVTv1kt UQu_vwBowf*{RgsG+0B6f0LWl0m;e9( literal 0 HcmV?d00001 diff --git a/samples/regular_gg_sfc_grib1.tmpl b/samples/regular_gg_sfc_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..80ae64b78b5478a46e852ea08dd0768259652976 GIT binary patch literal 108 zcmZ<{@^oTg$YEq)Flk6?_}|dP$oztxS)7LfC;|ea5DHE*GBU9+8W;ygeBkR&UJ@L&cK3P8-D!S){&0L2=B z*a3(cKr*a0n+|~32CYDbsF&jc2CX+9K)wP

              BUZ0>S?VAi)S?0SU&o1rRfVTv1kt UQu_vwBowf*{RgsG+0B6f0JYF8H2?qr literal 0 HcmV?d00001 diff --git a/samples/regular_ll_pl_grib1.tmpl b/samples/regular_ll_pl_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..a6f481aa66fe733f993e3bddc718028ba19ee7fe GIT binary patch literal 108 zcmZ<{@^oTg$YEq)Flk6?_}{QRg*k|wS)7LfC;|ea5DHE*GBU9+8W=)QCfLK7l!_mOyC;(!a0|5X;R}M-5 literal 0 HcmV?d00001 diff --git a/samples/regular_ll_pl_grib2.tmpl b/samples/regular_ll_pl_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..00aefc640c4008902518e91bec8049e28ce8f67e GIT binary patch literal 184 zcmZ<{@^t$DpMi-10(Jl?QAUO&1_l-eM)vE>;ygeBkR&UJ@L&cKj30mm1KWR802C4c zVtJ4pNQQZGJBZ0(03sMq9&TWeYk^=OUx@`I3IzWffCM9ml>(%FI3Q*MxuUEPi|iX1 U7#g@h3V?u(?LUxYWj6-`0BG1O0{{R3 literal 0 HcmV?d00001 diff --git a/samples/regular_ll_sfc_grib1.tmpl b/samples/regular_ll_sfc_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..e87fb114e4e9230a3b15aaadf2cfb02f4cc86598 GIT binary patch literal 108 zcmZ<{@^oTg$YEq)Flk6?_}{P`$YN&}=V1WSARr2%;3Oj>6APn(fq@}dM1kQy1A_pA hJj1I5Ain`5R%*b0f&BuA1q3`C4P1@_AeK20000A)4Uzx= literal 0 HcmV?d00001 diff --git a/samples/regular_ll_sfc_grib2.tmpl b/samples/regular_ll_sfc_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..9281fb3a50b98669ad8e4207cb335f73572b805d GIT binary patch literal 184 zcmZ<{@^t$DpMi-10(Jl?QAUO&1_l-eM)vE>;ygeBkR&UJ@L&cKj30mm1KWR802C4c zVtJ4pNQQZGJBZ0(03sMq9&TWeYk^=OUx@`I3IzWffCM9mm5yW_kSodxvB=)QCfLJJihogbZQ2-=l4g>(H4Gt3k literal 0 HcmV?d00001 diff --git a/samples/rotated_ll_pl_grib2.tmpl b/samples/rotated_ll_pl_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..24968ac9b1c773959313a49f9e5d1869e0743df1 GIT binary patch literal 196 zcmZ<{@^t$DpMi-10*(MFQAUO&1_l-eM)vE>;ygeBkR&UJ2w?^ij2}P*+kaF56cYeq zc_3y0$uLiD2Qe88Km_B-!wn2_Ef5S6KmtlEP|p7bAcGOaNkK9i$Q5OUSZd$Ez|g=2 RQUC;OZ2y5IE4w)m006^5Fv0); literal 0 HcmV?d00001 diff --git a/samples/rotated_ll_sfc_grib1.tmpl b/samples/rotated_ll_sfc_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..b3a918f8a7bbe61b74a6d260d50f804a77e53017 GIT binary patch literal 118 zcmZ<{@^oTgC}U(`Flk6?_}{P`$YN&}=V1WSARr2%;3Oj>6APn(fq@}dM2q1+7lQzU hJj1I5Ain`5R%*b0f&BuAg#vgu8n_$;ygeBkR&UJ2w?^ij2}P*+kaF56cYeq zc_3y0$uLiD2Qe88Km_B-!wn2_Ef5S6KmtlEP|p7bAcGOaNk=jo$Q5OUSZd$Ez|g=2 RQUC;OZ2y5IE4w)m006_$FvS1> literal 0 HcmV?d00001 diff --git a/samples/sh_ml_grib1.tmpl b/samples/sh_ml_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..4e2275502dd1bae5117f38a0e2a80a40aa00acb3 GIT binary patch literal 10200 zcmc(lk5?Plo#+Xngr$@aOb8(uV~jDzvMhvt|Ckxgj7Bq~(P$)%ej?N?9Hct;KJo+j1?0^cFESQ3k9@c`i~Qx8V`xmtc{En~Ycwu-35`FJfhI^l zMibACp-FF5p-001iXN@(MUUO1(exj-q9=h>^wj-olt1%RH0!5psOVJ%DlLB)RglA| zIzAc&f76P>o?aCFEsp9QjX;T{dnmcxj8ZSvqlVv2qxA0zQDgOAP~+_k)ObsV8uK1T z=~p691K~#X?Y~BevX4;g6ADE>>qMd64pjZv4^cVsZ>ZQRL$e?sdise|XvUuzH0_si zG^JmICjBH6P55vVeVqSW^sy-^^4V8q$aty?c?|)Oi?0qMro>uA`o)t-+IJp79*=Uv zecw%nC1RWAY4H^ByM+HcTmQrL|K9{9apa8Zv%+Py-2AWVmjgF}SnM<4*tQ$cyz(4y z@p&WgjzAAScEtid`6moK{?H1Tt^5SkM!yQWR-Xr-6{LXezMp|N{&E8RRJH>>rtE{_ z-ntDX{4fzp+RTEEPCXBuNdF0RI*x|2J3fLGBl!?qaS|efk3*Iw3*>&+2o(tl=;9v| zpy#^Yf?g^zK(F$AP{$`PK)pqo&`(FhpzDE~(0k8(2l~~-KS2M{V}ovg^C9$yk3WT0 zj(!dOY3>lT@fRNSc~K?wh4whK`~5!XYjG^}w`abDzL6h=?$>8Re=iu;#2mOcjUTKH z|5a?RJtnf@JCSj5aqzpz8xP#BInI6kEgj0>0|rZ5CEv=Atw_I>8{RzgfZX4H`^2}h zWqalU!K1~0_*PC?1|ASP4CQ~z#{xfnKyXsbJ|OpeqUu}zJn7K4Jo$#`0l^Qy5PZvz zK6w9I%6~NZfLuzQ?g3%#Q~&jV(9!3A3iS{6LFtbcL)x&6pe}d_`peD-T+o^ZNqA1E zTK7Sazgi9XL(V}@2!9(q{!2md*w?ReAMZaIOlx>081q>U`09mY;CRh@!Pw`&1}&R^ z1krH{JQ)!LKl=R7TvCPwy!7WEfN4Fwpe<<>~Z!s3Z^IQe%%DCrK#RlxhfCnWj7#|O58|MW&E)RFGze$%xN z$-k66f`DKQD(*e((sK^!Q23V8SomP&_#S#((p7?l4~t9=rZF z@P}asCx5*XlnK^A(eFnBZ@oovF`<=Q_K76!$kShdF-P9z;$uGpi`f%g=k+A;vGU{z zsQ1N*RN`px(D96*Y+nUE7W)c!c^oBMYvgtAWcfPB`;Hj6{OURIXh{L*biNP%+uLt)FWJs;V)-o) z{aykmf4dm?`C=%T@!HQg@Pof_uHUOc`QvYJsRk9O`whS)wG?rQclg{Bb^~|hm5X5f z?PuVmUxQ5#M{~!nJ_jBu{1m+VCl}|gx(&W`>9K%$d6fhHmj`T|T?52qE9e#e3zzzX z*+A^%Gr%`Hg`6xegnR#+EzNU56@2OkLGT~HyAV9mULK5Vso?yF!l0NtFLHOjQgDYG z{~mne*B=7-XgHVdtpW>w_!PI=+5u*}{uLaNMRM=_nBh(z`ieUtSmu6u?`!b*fSyzR za}HQ=_|Keq-^C?uPH<^r3}mN{fZ30p&{!WP;4?3yAeFWPzMlLO=+MA%?yJwg2IWV1 zobuBdPWWE~VDnrbXn*Y&+^bLZb1GLI_)e!efK0vsR{Y1yT*7bKxx!2t_jRr@;OkIu zf4aOG_%X1;z5DAA1BC`Zqn#hzL*9ZhKXXv>Ae*BBipoDktag7r-Alq2L zz4&S~=>K9LoK=i-isyY`W#}7$*uP{2fbaYfyacv!_P4yCsGj1q&!=+q-)tNd`9Wa% zyI*n*|MDX+?v<&)A4*<$|L5%wPdtfV3!Xql+$XbMc;_vSeQy#x+4EgcSy&lR|NRme`|_W`)Q3&n$v?WmfBLjH@Y2ZW z#8X$R;q>9Bz__nYayLXV+_Mj>IomtYfy>W)zOtLKk_+OJ-p5pe)ci=)jK~2-`!mT zuk7W6w%y+VS1aG+j=4VvEgyZv9j?2;Js0qCG2eS4@a`k8gGahP;mpQJ@a&3sBKcom z(fn%TufR7WdEiuAKJdjY92`{+a$lZ{=ki|-2Q9}=1)hCnflEEQ4gQ2p0B!NrT-xJb zf+s*N7ym``#L3rk-(NF)%$+`5%hlz6#d%(#xy0cZF#Fy2z*o2IV9uZC!0)S1gSHdz zab)AO9D3nD!L)w;#F=|yIB9>4d;RF+;M=bkfb{oDIc3>L+;ZGH@WvxQ<9Metxi-Yc zC3Jd#V_E+`k;wK>=-V}5zWfq+_LB%M&XC0Ya54={{N`OQ=J+qcQtO*sYP|x651oUS zdq3npjkpZv?Iv=jjf-5?n*$uRGXbj7PCy^jzButj>$BiekAKc3*8GA~KmV|X z3m=}azn%~nzTOKOzrO~jee^5%sZa9ZW53Luc=GV4$PL1;DIokz65-dn4r(gl*I|TT zU46jN1G$6nLtTU)J7_x=P54z_!vE}nuJ;zW9un<*3d+ALoil{m`Bz9O*)MbVeT{zs#?6_7T zNWTn)obs!2bkvXp6^UmQej>^+>zTIQfg+3&al64q?UDRb5fG#7q~LQ^`a$)5SJSB} zW|S8T-Zou9SM~G8O>3R8%Y^0a(zLCbD8_r(wbS)@F&QfE&)(%<)1VnHB%CRAreODN znb>@;0^iN8b54^bc@f%3oK{U?CAxJaiP^A(5*@&_L2>Ze?KYm3#ZSuEBfjb@shExK{-RVrRqOY<~SGRERK*5DjMR`vZ-nv5Zqp&C=W zGL-MvwjkrD=FvT(Ufl_aU=mL`z2@EFGa8?}9$BmH%_zoi=~|SDFkp<(&Ex$<(A1ri zDzOSG4o);BYh$F>$p&KyQf3&^u~2D#ob#SymyRNXo*_0F z9Tx8^?t}O8Ql;gFHFQ!_;k;H>01w*x3nQ5{tc7jX(76~nB%e0BbbNgj?(jxI3{_EB zWvDc6(>q|1&W~OLgbqIIzR;O3(To{aRYUR)+Kt`F8>1r5kLw1^0^xOQl*O&N>h2+$ zi$gAT%I3|jz`;CXd`xgEo$`|{h(b4t)LGvoSmxM zvQBxLp|Q|SW-v)eB$A*FrFkw1xXVP!`mAZHGUC3OQl(G@CNq8wm{ZQ>U&UIn8Xdz= zfr_CG`A(4wZm^CJdwKD$8)gwz$GELyOsZkmdEJnNPMZR%OwByru8B~lDsE+6V;V9C zj196bXv5(%G;3C%5O_&cM#6NXeovPK^k7}qOf5;Y7~MJ#MTtp6V>X8D;4$9foPa5s zxJ?M1874>eynZ)=!tS$~LQMqY>Z9%@|y(MA1L7p0UdrXK6MpqiM9?=0-4>pIt`Pu>Bbk)-`P! z9%kBc?1-CkmU2ta*3zSP4=B;zQu0i(s#172x8zK#p~ly&h;{A*xNQ*WQ_jj8&{|+e z4;Z2i>oPOdm)%Bn6by(2P#K(XHpb4FqTI8Ee4|KR=3BSdK`VM2Nr^fPLlQoa2wYcJ z^Bs=xW68P+G!jYy7w9nRhV+g(MKwScX+xPQh{vWNZO88xbwU+YDk9C-uF3G-vX?NW zraQT2YD+jxEEY|=TYM!Z!&EtV0aGTNR&ZDC7N))1y0GrHx)c%=rHU)2kBl{#9pXWtO7QG*0UMCvwk ztDs?QJGac{g_o#gYL^(3xwEU)w?)?k%e3OmO{zAdBdwk2bd2d%3Onc#XY*OidCkqb zBB)t1+E#5SanE@|%qd2fxenjA*)(&~fV|6oA1E<|7@FOg?i+fD^s=#XfrCbysE z;Z-A~YQq|2_wWeqvY2)PaIqS9#2EJR`^Z{WJkw0?6G=)l7Ngse!-`mXQ7gh?*r15i zj#yI#Da16hrd=alAV$C%$Jr>d$xu?3ZrYL3>cs3VODiKHI*WUh9l8pQPf_bm)Cb(j z)?#ry)rF_fW2L&}d6S|JxXoiAt+!-QVD2tegVi@-S8D;R4oGlbv3qVw&5;q zoHUZI<6-Ee4Fj&YMF+DJZMmXd*Qa{x)y0NPT4qXzhpiJzuR@0IxoeODDMR>h9tcpC zC)T~i(Bc^duG0HWW->&akQ*-BM8cFe`FHbs&jx`Ia+4`x2C!MC2JdmKsjnakqV8N! zFziazjfpzoPR3`unT=Z0_4TyPc-Oi^?a6ylv%Q~bG=!U3vXd>=Wh$?ouA?WF{jyn= z0EX-~YDrc?RnVyvH}H6- zTPn#3&z9*b!4`2HIiov1|=F<5|0y0u%{I90i68WLb7P_MNJqRAdSUN>ZeancZ?8Dn_uN5aWnQI<2{nf67EB@hI?N@Dwe%gEkwIm|7=o%;cAspc=dL)HdA$DNNn!5POXw25x3!oY7b$DPUy$c;yh?tGs6_P;MKS z<)$kLmMhAfvV@BowaIkBi7DJcL}T-WM|O`M zD=)=+viArmr&)!aO#;T9*Vs5?ucrX5g{b@}DP^RMd|tXaQQZwLT1H($ONF;fjGnv+ zN99cC3`x?-6nC@u;FGBWpoQqwl_>d0l0H=$rYoh_)M2_v-Cd)IP#`^U6h5n6H2Q7r z3RoG>tdN*=m~F`|U=?s<_OM|bR|t!g^>!D&g?i);dfU2gk25ctrqn(qfVznpuu5C2 znr3@M-O4&LjBO(0eC48LTL{ua!ThU=tE|J-Z=aFh1h1RcPPJe=SP{CdDd%?_8Oa`^ zi_z-h`f`}5F7!~<42H(SW0;Se!uV{Ba|TUf=COTci|(GqW23!*y|r-UZ2#FBQ-u~% zPAU5+H?_+~s`~9K?tQ}oQ4KnD-HI+{kMX*4jk+o;z?U_hmK|ZT;Dg{{)La~IE6s`>CH(F)y`3S_~8wH%0`Y>Lw=mrT^|Xk-R;b8=_SZ{{Qr%Yr#$r;D$L@#5S@ zy7g%5*>L)vH%h(nv`t^{RuxKgm7-PaoXSfFn9!06!$y7ub3cC%y{m0}dIT77VMv?P zrmv#!V(E@3IGt*fG8B_Fh8IEm?sOxrC*jWACUjeuBqL2FCXWHOkCpENb*c?d2)tgg zinVGgv^R7$%0ZLI6%fae11UG;1(2tp`+S+TAT2}ENww26iiCU{dK;JrsURPEZ zwish=cQRMaB9}xmQ{vBQFQv0ovhmEB(rIsyG4;}1aHZ+1wH_Fg1;~>zZ zPU2-)(oZaEhE#Wvfb^cVO|@s-fyRqg(!<%^Q$2$2GxP3wWvKlwJ%&f-lryPjlHfV; z(<*JkF|Tgpbh&WSd>`##=BZRqyL%0m5P`FmCdN9OGn{kBOsi`!zqpH9pvsCWb5VF) zIh1a5&t|b$E8DpFZlm4nDo@7j$A$;e}r;_9`#-O27UCp#v)}U=<~x*%qC-py?8p z>#nM+b9W$L&Zwg)?*@gM7NrgJj?`nBJOdylFl1m9SIjkq{aG3ET7_BKr|3V}7ruGw^=j`wVv)oMuq9xl)NdM&^~lRW?=}CQO0kwR67<-Gf!TDycg2xbuvOS zV(d77C$ZGeRI8rYz@`}Cy7Uv|qmRkRAFYFl(wXWIC2 zRIPrB8F#Pi=hZTPXx1&MLhH>b2fH*jsG3d4TV}$|(PkGx9=V+pW(zUT38Hexkcs?m zyt$xB6KB9Zk-{ZW#TnTpxG2FCEOnq^2N9oy2kV6TaxtsPcx=iz<4T014_3?2v~ABg zS_PZoQQU*r*TPTluBLnAC zN9V*9;JRs47me@aw5xa67+pDK)3jReosPiz(lET9?KI9pZes;5bSxs_)=4nc+O_s zAe%0esFOt@j7YL-ND<$KTC%UG_rMxxK~qOhQwx^poC>7oJfFP%91ScLCnXk}njS66 zX*in9uLAZ;Q)Rp6RYR(|L%w%>m-b$iP%53DY$|L{y`DXrF4K{UD^D$ycjb3qtfnF* zbJ#W-DHxUYJ4ej*IlSym0)>U_ARQr114DBA1&ZuejhUaR@@Q8PL7~9hj8C4d(rigQ za+z8HP95Zfi@g=5Dsv?pWe~dhRn>X1Y`rz)T&dmf7^mHo&^E70H^nNV6?obhuat^9 zhn_Dz8ze*MH65R>pf@iK8k2GSREeomSeoh0n#!(v27@HvoHotSd$vA>!5U3G7Qlp9 zP}hW4p00Jy7~S9in~@y>MxSP7X)2kloo$t`(Sy=h-4cIX-2o(MTkyETaL8urvJ56g z$Xi7BPPGfY9)QPGloMs1o2AQgiNPjHD4LKbTUyemGYVueKuU4Nx!y~?=Mq%qcyiuN z+FdYR*yp^>tSUFvbJqUC&eSCXoi(o6!wOVeSQD{j5M~!UI-FfNk8A>G$U*hEWmV*7 zdj)QHl_m{}(?n4{c+k0PS-L=LT3vfNe$1s@XLe8Q6gG+y=v}o+J(qD^A;atQ+Rejk zK-XCS({(0+x5Ru4XfkbyTJ-hkJ<&>Tn5~GWoD;4+Xu!LxO_UwP3AUtD_YGCX+v3Lj zQb&ZjvtY_piI*$qb=60F=m5xg{7>@>BhQy&tIzj{yv}7;#pyLPifG77fO{Rdt5`nZ zqoro{zJ!;5E!%xIl$kzW;rO#-<57O#aq2)i^_&fVuRPYyYY7zDcgvEk zi|IqooIwZ?J1}-w+qW%yTSo>!;-?Rv2f0QUVW}e)uC|!rJ`cr9+Q+q=A^mUa~*l<1=n?L zXJ>?qJ_;EqaVSEKle}FFO1W;r3EEhOOdn(&YoCrizwRk08^oK`BVdQSR2g18;@Q#+ ztK8agJ%BFNr6g=(xA$lZrit&ZG!Lw^~Lx-Ha;+i)n+eqmH9%AaEz3U?Jd z#yN=2;maco#oF?$p0las_}Pg|H_C77yX2ItCwV8k?^LEL(ztT&t|{=3TjW)1Gw3K7 z;g_H7Lq_s=hWOk$rd+pbh?7+5?+YP!&H11at6FkI`F!qK$9x9nbe!xulUTH1$u#$B z_|{I*hvDYo+3*22?y097e#^4a3!Gi-!%fS9vKDprcF=~a0%Y$NX=Yfg1a(%^Ad z6}qd)pe5pc@-|;^G1E|nZRK~sVMRCmEBFRmS`wcgnHvi-E{8INS~yYdt|dnEqUl*j zt(B%T%@Mg%KCGa}vQ|FCbh;bZ(w9T>)-KFgU|`dIPrZ)Mcm~Z4UKE|cb|vwqA^G-G z{rHF`kU!}jH(+$?#YjUG?6VGu+pvIn$q^x{xirfwK9_Er!tv~g3lm4j^R9_YEeUxQ z=2$uGzT)dF@z-Yj(}E;|xJ9p7uOF=RRhCVXp?I#g(|eLwea*pX|Bh3F7aN<=C7D<4 zAn#;Nu?G>Pu?bR#UcSJ3hJ#jm-=fm4hPO(4GAG#hKh3$cxXc(+EIQ7>~YJG0-7gX z%-OxNBK75&-O=W1M+X#uMLDxrnJc-X!WJ*-1-$Vopzx&EH2uW1cm*3)6&Y@4Z$OZy z$g^k$E>4+Ctov}8*O#42R;xBlEojiwr>Z4T=+?RMbP2g?xe0e+tkryEUdNLsOEwug zcQ9$aU>cY(F9?&Z>rk|9K@}#M0tV6M!)?l?lz;-`Z&|O?tA?uFOk<}l=;*{L2xTG- z3z8ecyLhE(HJz3W=6FC=NgW9hHTaabE~6p82?#Z=*bA`cJQmrfZ^*iBscDRs2W6VB zpPclxiTd5GOr<0pPD28!Xnjp~WWug1r8o);qmnJOtdX20iyv)Lv4^AO)nKtcTwHQ; z9hn!j7#CGOEJ|VKujN)s>NG93QiQeDX_u8QabMo1U1&*!gqB&|lyKadC^Rbq2N}Rx zpvBr^sWhzehpG7F&{J(O_eH$S>*o8GD|vPHGNhJXSDT;SC`!}WtgWO#c`d=5U#A>F zSyupyWcHvWz~ySDXUu($CPf>IOWQ1%ebm;cZ^`H?Oe2 zT{@8L+s>LsI-MRdCMzd4d6W6wtOE>J1q}+k$T7@Hc=roZWkGS55~Er)J=rOm6f2*M zviI_CJy)ebFY_erxqP4+Su-{(=71UVjI%_-(+wCy;eIN?o=R38L`*Htau4H}1>>K& zWf0Iy?%1LQb+0u7C>HktT{#1aA#}@7>WDhhZmUt;;ZGq;rxob5H$hw}-ofbffKEas zsP>o}_LaOTG{&SlUxpVEcaW%K8Ds;~n=oFs2gRc;d?x4qk&4T^jzqr881M3Ehs(AU zMOeRQhiU+1+6K>nIYqmF&g?6dB-pxni`phZBYKz2U^6tU&Kp91RB|Y6`Op@0^eN?PtLm$OoP&VkG^cel-GlK$=en}V2qNM0)AstK_ zac-JR4_4ArCPhC5G(ubOrXch9qAt`ts)%y(?OVA$igoz}ma0rdq9t?Mpv9JJGtUAo O(u4Bg-<$t8<$nYJ1zuPH literal 0 HcmV?d00001 diff --git a/samples/sh_ml_grib2.tmpl b/samples/sh_ml_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..1f3983c6148ca112975e7a53c57eb858bb152f76 GIT binary patch literal 10134 zcmd6sk5?PlmG~7xFr|c0LJ1|55KJ(}vMhuoB+U|K zgiw|eLMfqy5QR`m2_=q0C}9aDFk&eo)Q7T!x|C9ubt&r-%2LX*E=ySIEcQ9y|Ka=Q zy!)B^-kUpf?mO?jx$misxcsZHSYfP3=}gB7zWErdh{XzLJ$CB%k3SQAQt+_yiH9Qj z@e>h?oCw}Ymj1u|*kdf#<6+^fv6BK8>#N!maZ?+_O2CQ|d+ePpM2 zNk%r_kbR(!m7n^Yk(0;u@}PM|{)cjxBH_49LA=XVy!v5}V(3z%;!oDw$|rvcDlb$< zD=pQH%I|%jR(1|E%F#c=%4OlG@^Io<^_2W&)#(MdN)o=TGHfoYE?+yX`X`f3^`l9V zs^?%`HS{H-`sL)9>bKCM>d%*_REN1f^ocvQ=u>|Zp-Cu$rvGmvdg04G6p-|x=zBrb z$lpTqr=rnISyO1GO@zLZfuQvv1bwZu6>Uk0Mcc%C=$n5^MBhFYiN5obAo}C(IkfxB zW%MU~6#A2PKiWMRf&Mrl7VT^sL*F{vg0}s8Kl;P*Ao}WWx#;&~Y_t+pq9qyasF_|z zRgX2IeCGgq`o{pspT(4F_I0=F{eVx^l0Bxn^grb)FwLQQS^+En_^eIY zD_|)L<~_>T_+-V+qIE^u*Hh%S-`S8mmzx27;v?Tb^!NV{iQfjhaxazK6_scz#b2Ae zEpE%jBv1X)FZrj0eaYQ}Za~1*0zbGD1U}E=g7K$nLE>+fVAHpgz>jARz->1I#TR`5 ziT?8pR4m$uUiC;a<8XP&Fwr!8qMx5NUp8k0(EB?{NdTilgw?ssI#bTvDe@Y=v*?#y8 zlJM2NM;y9d`;e1=NG*Fv>FbX@8chEZ@$Q9(dg#0V`piR4zW1lDhXkK^*Yik!yz1~F zq3y>bAMuBO#~x8BpdXSs;8#6l=tA<-kMxZC#fO9p|IK|w(`UbYNYHyR_92!?CDPY`WA5Tt55p)b-X=HB-YL!bO}Waz_O|Gzx((=cg5Mj(WD9>W)xR)Bh+fAX1+8=234 zc?kY)M+EvJYoXa&)Z|l(eW8!LVnb2o!_4%9Xh`?b2T(>w0r>f^89-|Nh_SpA&V2Ie z3Ul#y&5ZryE~etiH88Dc2qe!jjJswCc=q}JiBGv(4C~*90RGKB#>z{d`24%I;14aY zfwK6|CeP;1_>8ocPPt+hEMx3}7F!G2SbSp!?GxXtFF$ zod1xRsC~MJA-en%|EmuIwg0$1G4vJ&F5VXZr=`$r%oz01KMyg1mq6&PACEzeuVT=Z50@Zg*nfdDe?vlde;W%x zzu99xi0lQQ9EoO<{Cm*X5`P3(?LVDpuTBL&6|k6h3Ps?1{7EnkcLT5XwL+;s%#n~U z9Rn+6kxa%A zcbFGG?P0j_OOn4OEr3tF-^vXCa~<@;NAHFnw_IT8FEYW#BrfCqtOvNT8V0731I#PW z3@{(xx&eAD^~~4!d*JJB)f4xwaVLKNynkYR+&6KYR|Sl|5d>l40oZYBIP|+0xS`Z* z8mKp&%Y1X(2S**bnYXQMu)7F@=1(CZ^-R_H${$_O*C%+PQ`5hKq8^W7Vt#rLc;`YQ zRQYEIGxlG7(BoIXG5)jA4D;QWtDwlmO^G=R0jEkhOq3M)q~mlDczM5sDXeCNWdGO& zbjLH`8{QD~*wx4yRy{yI$< zDr)Tjb)}UMUlbJ*{Dflo`ZXr`)2h(f!!N;vx7kdExeUAwEHFPi9GUpS8_UH0E)jgc z83qZk3wUa22JAT*V?lfhdN$=f=*QWaq3eJ967*CLF)zL@VzjeCD0-xf5xs1m0aJMcn)3<{fYqvi{;P&}W}dg(9bG!1rTsGhaQM2>$hpLx_?v%%#6Jf?H3> zKY7dEI9~NkJ-G2oI`ebK6lnYgmuWgsGCw{TU~0eFG(mj*@1cmd-Uj+y+zET>%M zZv-={*x;2n7ss#vV+Lr~i@?YymCTv%`=KZPqi5prkx>RX&jsuL5&^vT2^JFZW0~!U z8_b8L$>Y0UG=;wN(OclqUMW-m-F;@PeUGU<9}g7&=C9xr1JM&Zoh+~!-T}MIkAPo{ z?=i2{#(_Uub1>2r``dMm$#U{?s)K5Q>Bca`zG+Si9O)ukpc*9D+I31VUQ3Q z2z}>b0`qB7G}w~}n1SJDb|Wr7H~;^#HE)-qp(Zh_Mk8{n_T zV<&oj>!EMVqyxYI>+Ol}o! ziJf*lAn3&drY1Zq^xT@@8t^v4J4ky9n!C0K$}`x@5#FSdawpXx*Y~ z-f|C#)C&deItOv2;hc*^C?H74FIH&>pa+hobF-3!lwBUdw zE!DUW>!vr)*JD0Sn4mA`fOAWx%ycLss4{yh`oNNfF6T?IgZw)Cyr#4uQWb@f;4E6I z-clq}+omwQ1D@AOPCmQc!Zy<=nBSD`l7~5yktHop)r_*`x6pXof@M_{hqmO#P)+t0 zHKV#oB#3HBwro~JnQW&U?1PF8ZC@^_iN)_CHHLN|j1y3`D4280$|JlU3L<>D21`A^ z>E7p1vLa`_Vzag<(}&HeTYw}vtdCSLV}1CPp(`)hHC*7&T`5`ut9&A}5^2FJ(F!77 zo@7W-#pVuc8uX=#a^0YsM#>7~?T3;BGFmg`8l+Q{LxN+;1L-Yil`{5(pBpB$bG3-9Z=qac{UF1yb>%F z%Et8@;GnpJbfRMg<3!|TM%{1Z@`laPCa3JCvm0;rv91P1%f?ptq#scZ$~~7s1T-xQ ziF#B~gQ8NDa3IavZ4k>p6hy&I=!VRrD}&eVLGX?!C{EWkmN+$;RI(yUk*EqI*$$!f zfQl0Jn$y8@{DF}GQwfj3h~0vhfThBlXe(NyrZ}mH57`#)dmZuy^9X)akl+|I@`*ai zX&$H2bO-ifU9xiCFbQVKma%qOB#za*0@0KQ+Dss{4cxfr7$P{$~KAn1>=F0lT`@9~-aavezyV6Ndlm3i-O#o_T$I5~bLCJMS z6N8JyL;_SyTW*JcQ0*m4XWi7m~g>^ByEs>Gv&1oY#JpFtwQZ7#{ zjILj6zbSD`Yq^mV3{b z3ifNfsxWF6VbiIKwioVugGfach^H5|%QB1Rtff?$;a@FD^a`TS;l4IeZVW*#It}#tW`TN5aAji#+pg&qHDRd zE?hOPcZz*jr3@3_)biAoYEpJ&-4<*T12}<4sdw_LkRfz0zue-MuMsK40X{Br=2Sy> z__w%sNy&xVL~UkAdOIGpjjPv7I>-@wb1`ba<)j^v#G)p~Qmrd>F1c97RK3GkhaFoi zvZdTfai{eGT&iQ~nw?qBF)gBT({W<1jZ`*Y0HsyDn|cInLmNbgSfuK%fV9JMAB5Rr zb;sBP#b$N_)l44a$$$}!Rqu-Bk~nfz#Ybc5DZWNEVou|x;`7v|YE$EoqPSdUD~{GQ z=}OBp4Ewnxl$5h;YNhyi(AN!gs4HYel3HhycG8(*_6ZV*PAruiFYD29=@IXOayvIu zk*aSpQuw^BjO@dc5t3Y>H>4u{jNxA4piHQ5z<4N3=h|b!^36@jFnEp>sYg;lk^*J8;2Za{F?=}R->ZD7CfIwCg5E0 zl4065Zm3pqWS(4s`c zo93>Ee7Y=BWXO;YnWq7_M5H`&)+ju=6kdd}r7%%>X3OnERxd~}P#Z89H7r45euQX8 z5f0qu+%N1Yo`PAL9jcV-M;ECYtlPE;-B3vIx{FiXAxD~eoZlf2Qbm^AIZAVeww|=; z@0<6DBXN(?XzimKbrD8d6Qq6WEa2ApI&uc+6D@*VIbyXCYob!3f=tsWm8lBClE%(J zC)HDyC{Usu6NCft_A=SBWQ0ECtq~o*01BkxjWnWKddQijM<(Gj?6 zkHfZH_mpuWHvm#$`Uv%kfyJpq9ili>@970`va>}%O;x5MLT%F_s7Kywa1(p_mCOV1*lHaXYlI5Z?^?qZN|2_HHO<(F z`L=0Zg!<)bAw8guKoM_cj#4Z%2lcD!EqIXcv>j!&*awkv5(TG-2q;QBZdxVw$QDFm z=z>_*8eOcsnU1x`pivqwCE_FigJchIXz&1g`ZY0I+A6EpFKFDTU$icjDLbS~6 zFHmoFV7p3}*hcP|x2*BTRl_V)1i(rsz96kq)q?YMH@^$0(}dGan)o6=|E`6l=qBWx zo06Nf&CzFF5Z{#d3ip!=v-xhL~;I-VQJ86vOgBF!wy zp=<05%4BL8JqB9ThbEVWbi>xxl9A%R;u=GR3IS$;UcyNn&{1HYb=`TaTfwWPHg%Vz z6X@0t1DnK6kq5gg3!3(MDUv(xyNKV!FAzBg%3HlQcPd?_cIK}ZS3(^54&I8~$>oZs zJezq4PFN)8L5GOnZfm3l)OGe9Y5#K)0F`=#a-6S9R&8HNIMXEU&4@6Zc#gmjAAMJv z1$gmwb(Xx*x}yh6)=;1EuFwb2IWLECcdn~gR z<9TuVx+`(YFhy6@fM6#t5x>h_(gz(JtsL{^HPr5G zc?oorlT=t~g>JjBf_hMRq`a?cyfgy$J5WWN-J-1`@1q&EXn6+FmP-*-_BiH6j-45L zOskOx^P7}=>SU3|P-<}LeXFz8C0Kl06H{VigNu*Uc0$bLm)$n=v+({L8b_{3W}5(Z>_%0xoo;& zn)4p0M{!mLSa%ujLk`8W9aXH_HoaJ8DhLP_O3KvQPdF^FnHYj4U z7G7v9Xw7Rymy-B2<+)0A;$RW=CTS4`#}n%lr5{XW8Y z*E1sMgLB>7t_#b~WgyIYpB%@c^88eqQG>H>*m+Quc-pPrKJVwv7#}D*sAVF})$ZJs z3-QU~N&{tH%p1zPXC$E-G$80CR)}(MWxi6*0D~D8=VCUEwkjN8hr*Z3$|^(CEJA35 z#>|cSa?!TouB+5CjV~&DOnXS0n=)qVD#<2k0HZ|_c!sJ~-K4!~O3+Y-9Zf$pZ%+jV zrF-z9mXltjOE++cgxn@wd@hf>VOfLrBmt5Q^q9hQ1l(W3_GzjHaLV6saaXvYSd&iE ze*aSbn59e|PKN2~U#Jn?BbQ6sJYj}y?M)!_ObWf0qQMp%>v+*+8WR0sf^piCg+HzMVyG1+RMWpq7P%+BOP^A{k zT6osMGa?g(^YtQ5ld0OaVp#ar4a9vVgWS?Y3PFU*kS1c?<}OjZZ%)zWj3!Vhg?(3) zBAyc&Rj!iO+)hEdVi#IAJ2ZpzjqF*&CP$*}CA+{b^^Dq&8Oa-NUqLvBTSRF*+0*&8 zL|AU8b~ZNmI3`t1h&0;)z=AEX6ptw9Al)6P7)fD^a=g{L)UD z1*xVJ3+_@8#u%dm*F1M8FWka1E^(vt#}(6sU0AcHNfxieTv5C=e#HgRRk=6OFjZz# zhMz=yLbhDZ)A|LpEb|+)`UOXlJmzG!3`^g0G0G~rQ9g>f6bDLV&_O0RvRCrz>k2;N->Q8*V zC)hS-(l_BujHgaL=Qc#i+Ocx7Miy;Laj@;p>H#`KB!p7y;w~|37614WfXT*)Mp1Z9#(Fax+ z#L@L;*2OYwz{ZeHf@fKlWf|CiK z$SccoXV2zTT|*I}bV-%2>nW~JrO-wLn}$&yI;C#HD$m#27xYePKb@HqDUCT#i_$@n zsGV*VZ;}JKaq2Y=19iZOsunE1Bm%J*I!yz~k>VEq;kkC6+Xb_!3O`=%x?OfxEYw-} ziQZ{(im4@IKGP$Lg;RYM7kjSuTucQ0SW3Zd(&?Em>9yaXHh>*y$=p{GOk2~D*^KN6 z^?-pgp zFG<*^9Y;vN`#_Z>I*Ai3$>$#Es`PgRjfG{lNMq15YpBHhz_Pmfxgur1lyU_waY~{t zm!TWq?dH4fcO4byHjzbs#C3 zDR$UWlLpU>;c{(?Y6nazm?|9QFBix2Q|S9PjH1omo+@KI&+j-jE zmYX}!dzTw>QPW*(Y_2=M=Q*y-EsGTFI95sqNN?4Fama7659LK_dI}`q$>C7`u{_Oe z%dgkR672a~CrZ)-cn zgs3}ZKd1Lx78s>pzj)s;`Mq7uO>?u<<{9Dmi+dF#1#DeH{u1R^Z|LHMRoVwU#94EB zN{?2p*`kYzoQt;QOw?{W+j$|$yJE^R_Q*KqAb$kf)e`(EZnxD7>_f}+u8D66XhzrrjA?9Ok&%V+Q{#6^<-6EPtJ{`$H_987n%0X8v4{T zat%_e?K8wx-nw34PL>@=V8bCaYYUh*lzd}2HYv3Ey3V+X*+8S7pvrX}GUml7az&r4 z;1bLH7JGuS+gWK&)6Z*-c$AHCI8?#wHYK-k)RgLGE8A+SX z0{!@sHA=GXy`=>U7U)Ly$*wsO6sF4=N0stGl1T~$$C^7F?u%Kva&)(_LmuuO3#?q+vt_If(8 z#$V8)k2OZYwt_BchdIf7ly4NRa>voVoCmrvLASD#?>Or!*uig@gm8tY-duCFuO{=` zlb3I@SQ>|};$kEg*3hf$@ZXbmJ4Ff)$55Nb9|x8ZAna?3#zk4P8}!mOf~ivIQ{$QBqO572z1~K2~Yi$RLFSc`hkfTBkwq8f?~G zm)TI*1c&L@tsbWfChi4+qlYSb)hd`~rj^tWTg)l#1}LQr~kOR>yt(XWC5X_NJ>X=2i_CxRq!utOG`rv||#DqK=Sc*x_g<7mU5OCP^EO<+hnn z>!_ty+mhK?l3qfQ>A6+bXwCws+BzfLwHy^Ss59V{qP^^SMbPdNpdvrM!=5SZqHWR$ za7rh^ytW})$bR5S6HN&^0hDNwb?2nYQq3Gqw6%vl_fnNad7Uk6&*#9^icNj9WC>m{ zF4#+jY<0grOx{N%TGKR@ClOPN-S47oi_(N^b2=`$=8W^MKt1M2*eB?PJM;P_gUVf9 znJxOcc1w-q9%ojuc3z^KcP9!e1^XzOF{u_3iQo}6W?e6sRmK{?%jK9Czo&>kovCS{ zdJ>uPBP2oD!lCjWJXdl3z?Q^u=o1_+)lm7a#EbU1_K5~qq-t>W8&g%s7mY<_!bD3K zdsWrMZB*XZWYU?k4f_}`knJ-xtBKUwyiFv4q~`W>*EC0t8;U`5gDE4!p-&dqBE3YM zZCe}7SpgcD^xl(6?}Q|f5J*A^y(ow%P03kSJ%2e-FMD=_nw*Gcfa}O-v92IJ7@|v&1**e057j-m&EnmRU#eqBB7Hz{u>8=@&75v{PyOjNJ9Udp8|KhhyFLd__p__ zpzGDB{|wkb{wXkH1^Yj1=IZ}5pkdcfLDWvmPvPlN7k&yHNU!=S64_SqpWYhgPvJX5 zfBR{F{rpou1=qiiK=zWqflt1FLU!^bAg1mrh?%q=wBDM4(q3m}+2($-W7CsOu z8F3tJCQA@}<$2J%ZZCovU;-C}d;;S~tH8+H+u^6_fq>5n7!0Hkz_}4PWXiQ%B=bf& z5-_FffNNVT;uEQae{1~(nNXbs`0sxVI65NW`j|3gR&Ny?^3Q3|Tcv|HJlG8{Pc);J z&fd}QjhX_6CB8zMQc94b^S;QkA_z&|ItHOkTLe!3o`?`mZUc>DWk~uM4(M6C7x6zH z0fI6e0^qPnsJ9s$U&uxxR?kMJEL{vAOPCD&EqM#z)|CU@U+|ze`7JQZrG@v+UJg#Z zI~<(+dn#PF$p`jt<-qRtd@%eRA5OoXjQ9|S!Uv?tfva0O;NB^-`faO1`U7TW!r9^g zMBKCvOnzzy{nq${<7MwaaN|W#IqY9hrV0mbrf1-MzXhOlcLWkJOaW#pt{@W@#v_4S zg25Ty_Ya)!r2y@}z`%`-eejO^I52D|3-R&oO?~yj1|OPDhY#LvhbKQ9jD$l^;N`m) z!_k|@!_SvA1GqtnNNDCo*t~8$ke+Yqx4-N`&hBNyCu5c(q`M&KZYx7V*hIuPA`Oha zv*B=2>&^15qzpS0-0q07mSUjBGcS32wZxN1h*6* zbl(X0&Yf+@#DzYfe>(-3vSBj3aZoujgG@tN zveuw7XKhAieOZjeE_@Bt?t{RIr`^b;WCz@ol8(f__W`GM79o)Xa*=Tp$%wz?1QNwQ zf&~Ay6PZ0X7V)0B5%HN^1wW;a1A~W|U}IeX5DtZbKHV>Xh1qY69nG1*KjzQ+`I)_YXU;@G4 z9>8xm--co9WiSXE08Sqmj?4yJ;P_|{+?C-0uvKEjyDS=xLfrxVt8~D=(Y=87)g7Q_ z$Tu+LLIrwDk?@2%_p$d7q)F0)K$wLBC&Vv!Cb}%?0 z6bvaCfCQe(1wnl!?7y7_PFh(F=iILc%Fiu?wX^WxB$6*YYw{v+qIoOuWmYE`G;0p9 z$-WKrJ4FOGPB{byY*+)pCI7&^qi@2&A9evBp8So9dN>fAiqXIm)!kr->?Rmy35HwS zHp8!G*ukkAQNZ~N5aQc&9KJO~4XlgLMSKnphACz;{C;de>Pz$sxG$pwSaxIs5>zn& zIKHV1-u-$ooV%_I?m5v9EQV(GXVKP!xJ8SACs!{5AC*JE$rUN^DH%kN5%mM&`i5N)rseTL({lCjfHt_QCL%^Ki|TiSWwc$$&gN z12uKJ0u|^rABf+14LJUGA2>mSf|mvzfw#{Z2>RcS0zT)3voOBg%^$!Bpb=v#K?a-pA=}X~AY9Me7v><`v74RkVCjkEE zFgSVMJNWgpZAj4Vp`ib!Hux*12c9ryGQ2^U2JaZuhl~@7VDEER0U$z!e7M^Oe#klp zcbyptoILn1{3Of?{JEBSaVhmkGqqdG6fR_;IfV&0VOx#1Y`kF>Rk`F?hS|i zc0WM{v=2l1E(`^nZw0{0&S9X>G5`<+jRQVEMgiY1Wdp~1?C`zJO4v>2!HgU)WP)cD zj1Ld)pHb=V589Fk7&rY5JBq)+_kAD3A(05^`;-Gj2}U46hBLs_C3oRybU83{NMC;@ zaV4s@>O3-zya#slUPJuen1E@NcktGWV-W943|OF!1ByLo`vW^}f)BpN!oOdl0D}4> za5sD&2%TODua@Zn=HXy?-u*HC)3Lp9+{PI|Npc@BsdWM{zjq{R=C=@3z|n26aNtGQ zZ)rSoz%#Lb+OpsJ=SnVuE7vnL4hYr}A-L%`2o91%aP<@j77T;n)uVr0#~^so8wg$l zL$Gx^1T)@2aC$cct0Ey7RSUr#iy^pi7X(+?AUNVW1ha!7I8Fw^;tU8jjQkN#g5bg* z?|XScu)>wfME5Hdcs!-j@|hq zp9I0QgAg2f2ZFOy!rAXZl$Ky}oC$^mor6uH#iHs+U$f2es7Rlr-~wB~y-uk?48drRoN8yITW$>ynIz_{7kqMvVG#(Z6QGHX@M zUgHwg1nTmH3^$XRknw;KQ8G}x-3N-9QnFlhnlrI$J^$CzK`HCaep!@kJWHx}tCF$r ztwieXp5Jrcv%j;NN@6raP&$dGE0^AA-p60PhjCwQK5cN^lC;blJjA+>+D z==GeOnLl<{i1kUqqwT3&S-mQIZO>BLdxcF*sZk`TlWX(V%FY^ti@UID{(A?lp@GmR zIjC5!cwp#vw5IPeD(k(B%E&GrdF z+OOEsBzxy@+uo+%&dSRSQ6$>V$xb{Y$cUv zao07l%kW=GCp<2+M*#FQcQ$fwp*n)$hS3Zik*rrVo^13Pb z6iDr5kHf{sUvBbRR8XYKL6_dDn`%f&+Xlsv$2&js0$M~UROfR|`hs%`Mny>N^q`YP z8uPOJ**H4{F;3);ver@0(i=7L39UTeq`zX?t)n> z%rU)K&e^mNRKlhsGEr8r^>n>))v>AjtA}_#wgh8?JR_Emmx`PVCvVQ@^3L+FPFUH| z+GcQS#Pf15w zE0b6%jy#&xhO(jh^oOb*@iVo9ZSk&^HP6*c8gevwhezjLTf!%X6g10BhRm`Q#S;No zStioS=O`mg23iAqUm?OPH!O{x(Q_w%h{%__rhHdxm=%i&hdfJ{mHLIh)w?QFp`M8^ z?a4R`S-W5#`i7?r+iH}t2Xv$Civ>d!e{vo`p%{JS_Zb+~8qTPgS?cv>>fFsJBKZM6 zG4*leQSmykidY=CO!)&V}_~tl3FTi#Wm)Ln>NIp)7?>)He45G#$@P~ zt`^I2VQOJz*=e#D(M&!qO^<9dg6IhHc}a-sdR-uXVpV6y4DFZDwn{7hl{zb?v>@L8 zG`ly2u3BL{6Zmpvd)#+)1AV>^A^VA9Invl*q7ofYg0XAIn_1o&PC92 z+!J0><=>d)Ma)WZYo+XdNnlw<+fD7Hrt-Y1B9-FzTB9KCAhxj5l56oz)au z1kJCxe0090d(kb+Owvqa5cF?pNzw6&ccmP5OI;N4R2^Tnp^l+_+8AyDwX2kL(({ZI zn$etWLcmsswzjzFHFr9excZrSz3PByUDrkTq64zI1`Wp*|>0b;a4_+z?(uL-UsH=D+nEYmt^cW0>^v!o4^w2IZWb zjuwVU@(h>cN7=X00?t&z3Cf-H)2hjZX0$IfMAZuA@vm_MRO5)Hip{h^L}JD^QX69k ze-MpMPV+1=MzS76R~LPwbTJ~;w92C`r}bkhhIl1DXMw|mgY1>%L>z}A!SF^4>f51 zQf{I?iQGXcm)hA+m;*@LSzdYj^UVd!_NIcJW{+mJ9GTtC8bNqV^%yP|KXj;VA_t|p zSyo$pDSu|sI@N1+wo&Lr>mHM~*L7>d%i}3ydrT%zjep+in$CRUQlHFOMfYkJTMwuH zMkN!5Fd1`Ow6%++s6*`U#b=sW84$tjyjGcko2_qZ%`N&aT%o(!uu8cb3}Nr)mZ<*K zRWie6barQchU1R%2H4CRYDu;%6RgiaOE05e*cKs7}M#URj zv}$zTAO^nVPw5_8x^O(!kIP8`aaZMc3s;m+r<5!?1S!k^)yA0zS(5TswtOjHwZvA{ z(y29{a;7PyvI@#tib;4yb&7US$xgs`yh(9Wqs`Abf6=aiD{633U!9BJA(*fBrarVY z)#qfdIKNqgY5x>>G7Tz#lVx42{Nnb?O)cpbPg6cajk9cvK7l8Z>7;?Oir8CQNtTGzynv%P{X2bU{}$zM3ryc9|bXO=OHt!=Sd|y%Gn|`mwp} zZ0REcS%6<~M2?#&lO2rxY&)vD%O4;MH2)%9ZM3r@C6ftK*CWBxl8OXcSrB?t(K&UU z@qs&9GFco|`AXL3%D~QEF^xa_*Mgbd4b3X1fy;8Eo!zUGZIOVl4Rp=>;zoIv#N(XEOmMN?p(@MlyFh;xheZ ze-)^KDH_R~76L@JqL`fJ(8(eL4#&IBY$t|hnyYVU$sS$eoCa!??J$vnsZkc_5?uGoOBw#z zc&3WaB1%ZZwKmoZ<9g9W%@;wV^a*b>b#G=i&ya9Tk;&+GI|X=saciJ>B#kY(6_3r% z%F3t2#+GqMNmtSbL#x3rvo^A0GydS3Y`Dc)lCk{byjQ4|sWYQ{j0Z5kkuOMBbB|RP zG90cb!|!TCMCAN-fnp&M6eS!=kx)NtcLED_3v$ob_ufhL4M96Bk#P`107nEhOS z!ZJ_Gq>&^?xtma_u8_(E9m6Ws*XzBM7WF7f7v&GdRb_l;J$JHhh+x0&4)ePB3suPc zq#!63ORs0WWqefFX=&UA&;?6;Z9GBl@tV2k4Khljw!Z=$d)P6Y@*aO`;yt zU~?~Tlw4gBQlLummVKjj7j%MOs(vNpmWJ?`anqZlc~!FeRbw@m9qu%>J_dJy<#vgA z2MV<{80HJ|eaa3T2J>80Vm>C@=2%ij!p-AQMTOZ_vH9q=D4HB)huw1qQnmHB=YKUs(-S9n0bO!U4erFdC+ zd(k`7@VYnZ5U7MMG;YqWqovTg<5#mDYad(l(bu`VO{E#p&X;sE>I%9OTCDAk5OXUz zrMb1j>C#(e&WigomEk&mkA9`4RO;>is}^#H5=*O>F%Wu~;Cn_uo+R>psTY^y2+46o zvI}>kpBX9{XMh9RL}9X-vZqYN9~549&rN8{pG19!CJ`Ovc3~@Z94|P{m2)q%UGiJTq2}j|)0+L< zzM}I?b?i(dhO&&Hp+r~rM%+bd^x zSh)wpe-ylpAv!zxjd2Y*v4s)Z`I2}9gF_XiHu5sjF>unIjzK$`s%m_v~Gb2Z!k1@vMlXcNDxr{FR zU3o~*uY?((@NdkOpp)!*xeK%N<~-4?#r9MBRE@xfjJeX9qFBS-ydFCex7@|leJ7s9 z@}h5;fSf4pH0G1S3KeOwOq!PN zBi#F?pWK0zuiS8ZYr$r8m3u5}Q2HcEAtQpkmJwl1vfNPYqTW|r&eMCaq{4DJPm%k! zq+C3Z*+fkBkfg`*{hfSbDs8snZ|ywua*;LdoW6bDLv1V6q^T)fZ1^Bls+E;b(zfE- zI4x*D-u|+>N|KgRs%l+Cy`>pLZB+kL_A95UT2ADaBW!bXi57;UD)yNE&i`7_nHSxB zM0=$=O6O6XC_jpJ@}_Bb7Zq4rT6Y?8;w1(53Kme00q4wjofzh{8XwxJyuWn2G=G=8 z)hyRrrDBbQk(;-XSXVcOHQd5iw3scn2e@A5I`>=Kkf7^^@tGIVgX5Ex_fsEp)1CK3 zb+~KV4>>vd+2B4@3i{Ig@c?tC$+jpVK>-&SC0BXW+F~fG=%%YJ-$K&4|8XIbB~>60wv5n8eUkgJoXFg6ytO7!w5eNU4wITE_gHVnL%OW= zMvId#~DN6vC^yosD$7_B@Ys$Pufn^j+_-Gxz@Y}p$DNj)24@M@)8 z*1JNgHbq*|@X{HZ|HV-(4HR`X-xXc3pD@pL?qx5eMex|zOYxJL;+*@cGx;wB>vMM~ zVb@oQG5=Q;pnaKzcVHE_)$1kWlZOcp6mXbTW&`8HlV8?5Gco`bNP*l7!VNl$NY`r0u)2FD)d!?Dlrsw`9ZdbF^L(8{XqjGtu z0rn-FIdrYmns_Papt?tY0Og&osC`XHFKnm7g+Z*6@>$$2&1ursqF->Uga@lmr*5!h zr)U(`oMzpo+I8vtrj6_qg-+a53#5CdKB%qBE0rcF{&0BM#XJwl5^t5MsjpQhd92!6 zIoBqogy%0%{aqNAFELFJ4|h6*cFjE2_1dIGU77{$_lYg02f~R`LS~Y(K)G3VSe34y zC5h&IR$7gLyb5*XvMprij(R{qeU@G9-Igday)BzhGZ4+poAQ8l~kWi8N@*4A&H3&$5?F4@YL3 zgk#xHD|D+aP}@mD<#WMmX;u1()MD~*jzRX)@Udnt(_OY%+U6Rd8>nta?-y*46sh0M z2(rg2)+;v3JiOI4J9Hd}kD@l4;0(ajF@IrTc;C=GmWug2%iDfc(5R4;FEPx-Qchds z9Sux)qtK+~o93|h63ZKURWD7W^5+RTBAeuQo|4idX`>zEan*-Qub8J9XzI88AmjL) zHyXC-MP*Gk%l$=O>}p~}u>Q>Zn0(2;O!!LCh9wlm^KjXp%E`%3_#E*^QKx*p;stHJ zI)MG0>r4}gLtGrtm*Giz4OPcU3U`RlIM-eL1gy+O$ z^)uos<{hP459IE#-X&4vmJ+j~pGJpq+jS*!x#OL9mzly+$!?@xWIPow!QW)G<6GiP zIYWsP>FKHu@^wO`bcA%j?qBgF{x-ulmM`TW%^URsr9)@SOcI6W#<0^!`&{jWKGlYgnnD-UDo1BLaE9aCOz}X;HJ5~(vO$+ zk)27K8VGD}B9_>v-LDy-8BrP`h`|J#sSGFik$}q#T9BwJqb28B%{+0|k8?dYKgF}l8E6ZUs6r( zZTn`+eRH*3pp;>TOKTYqm@}gWnkbqoA<CoP-AYhlo3j&?&8(9N2PF>N z@4Caf6L|&305qKEOG_7et7>d-Kvh0cGLZd`WjgPcydnEfzTA;WO|d>w>2-~Hs;CCj zmAIA6R;__~l(~*-5Z)Jb*evAU@B;H|?rSYihARX!)h(J|pX6s*KDv)CiN)ANNO5Dz zRBmeYL3KFifjva?dtLOBH+eQ~c=gRJha$RkG&M&2HYY_et!RPNBTV7{Y5&Z#bnB-n|@tl=qAvj4n)3DERYGyA@j^{z0)^Ca- z+78!k_OKkCbhh5C4U5L>t|)U*t8><6^ols?t;HF#H=Zp^(Ybc%gRHPTWy~1N$VzUVoSwC>X9x;%?*=xgSuUlgP}ER)%bkD8U|`-Gw`d@!{@f&PxBYXH*v0IJe?` zc}`R(=26}J)TO)_%phQ3?w{y8ESkMSu_X75b7{6la##F|c|LnYO@Y&bUrTWtJBy9U zL#?ZG50Yn=wk1ZpKBc$CAF(WqzFilHJ}f+D8|8#m^DL{(zCym1E*_-ys9d^j$_F`Z z@m;cxPI8D5SBPut(Kd7z2)i?Wx!-xTc>Yx#1e$dMW>_ zM$7Fk=^$P;=u*O}F}xMDFj6IFEnjDOm=l=Sp#zxjlvzqF*O$4Y>ji#$=KG>@H(C6F z4^n3{_bd7|nf4y~!_sJpLcwJ}Grs5eQ_|goi6Pk^L^p{q`S-=|&8KbGSy$Mv%D>6- z1!L(`n>+;#7jlt@ezTM^Cs>`^YZ#1lVBxq literal 0 HcmV?d00001 diff --git a/samples/sh_pl_grib2.tmpl b/samples/sh_pl_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..6b24f57ba47dccf8e1f5766f9887ea16eaaa0d27 GIT binary patch literal 9398 zcmXw;cT^MG^T0vHf(^SUD*8}CQ9(dJvZ0egNbkM(Mo2;u0tqdIj#5ObV!@72(WjD4 zu=n15c2TjHr#|cBhu?F4vuEZrclOTA?m735dv{@YMAE>3*ATD&Nznd5O!4;OdwC7> z@*Z(>=(I6|f!{ZMew%=ygT^mm&@3O+`2SaL??G?gutD=%2JD08cf?CLNXNQ?|HKIlT|XZFrdu*>%Wnc)zu~{>A$-{WoAF+6f4_hiaGdY_O~}Oj!G{_g zk6x_)&A4N^y}t=9RKEO8*O-g&-vpq^rN8M;QwRJeSV;e0Kae~8um6qvF=u`=e$nSJ zPaN)7yma83X9bfFT{UwTv?iJeed7vsKbvTTo>W*9_@{LJIq!+^CIESl&5Mmh2zb>hl#ivsw!cJsb>vIqGzm@ACzFKYi`-+S3TG zEl&WW8%KcMxLa}HyBNr~m0WOKRFQl3t{~UY2a!Nwx)coUI|$BLsRzD%C%K5mW@yl> z1D;7hf%`{Cu*W}F;MN_Bac@kW2Oa;j-`%=K2z@yFjN1{=9Y1_a59mhNq4qO(+_@n^ z?#YRlfZ98!+(|X-z)!9k5FR@V(DOe)>IuHUydNl_pxOzU?Y$d>1UErP6a@iq{ojLQ zcTMVX9k~R0w`4;j67{ZEI>3&9g^Usvn3y{?8MVeX>~@zAVI z{lLz!13>Mv8fZRaGxXAgpU^W`sL+p3uR&voF6e0;7wk=rftFp|0sgtF7d&tO3iV5_ z=)rBr0|6sE0DWgS81)1R4f5xLjhm=(>Mv$6C71*zJ!t89hYfUxSFZzS99-?fAAp03 z`Z`G6aJ_rVG?eQFJ_zD?+XtSyGu0K+eE>|4TH{`S#2)Y6T;%o^LBRC|eozL!-@Wz1 z31DY76)39x3bl-8x(i|}p!Aa{kU3@*h^h+%|GxPiO1+G7`wssJwGmw4&%M21Jw*zw z=n4iSUEcvGPU{{)(n4n(+Tk99?FG3H_kfpc8Ufeinz+y0esIaqV)ukpEZ}Lq0q}l2 zbI*ATcT>;0fH5usa6>r~y#3@MI0;C0Gp?bazUEKv6rW?D^NJJfnTmC1NT!1Wt-IZU zJ8psbQBtt+H5`%e1pFLcbv!M^`_0joBKfpbzEklKkyz@oY9Tp1(mfNQWmWbAgx?R&kzXrEuup-4UC z?(iU&g&PX4I3En8Vyytb{GRKK!tEla<^n;A@8E?A2cSOQ521^EZvj;o!+x3o_*8<;82SdFd4g)U; zoKX8czaFru7q~YD>uNq30Qg*5?z)9;1n$_^xdMzSz|~DoAZKA4@F*4wEVb+bcJWQX zlG(?A#K-b3p4$v@udYlUO8jMUS0Q^tv0Q+J_0*GDhVC=hL zt|tU2xbVzjV4`3FD7vbR%i6IWklwrsn4~_y>)3u!@_92*Zod@!tK|Tsb)ggTC;mU6 z;~hM%F2Ly`OeX@6(HT8I2G>UZQ@m@$X%nRBxe1K_aTy$aV+J^P&Me5e1}EfJ?K{W@ z;e81IZ!UoN-~#s2M}pG=PJj^$hXC$xjnHWW0j|~wP{@_XVUW9rhXeeB86f)Yv_r?H zw8R}PaJq)eta0D&9{{`#4+TQnEG~(8Jm4Iybfuz%06f6}o*nB267}DJ_R?7Wx&S$Bg1 zDg5;aGVs_1%xxP9w4DA5amCC7EYA}G+qHB6(P;tssZP)v$8_yz@&dcVxUNPj)b;k* zP*;yV8uEzM@A~@d3n-ZU+~sxB3+O~%f@GM2!6$iI$Z$%L3paZ*Wct)gAU{tHJZ=96 zEUUca`bOCeb`{n@Mx~zu!>^759UZ$}u4`(@ud!{ePK6Q@H=z|wzJ`Z@vns%Op39KQ zRe@lTNDb*KgC3mnvCs8v9mK`%t^tNXy5sKl?uM+~5eoV5k{q)BpZzYk&*q*T2YX#J zH{EkRo(BiVo;VB{HZeb=0T*(2~6 z{}6b{9|fM|4uMA&F7PB)2t2K;1)iD%0#B(~;0e1e@X+Q6JkcV7hnFJoXhskEGX_i9cW#Kl6G9xU=N5S6gY(fp1)dfA z2jg)95Ale=6aG-(Nt1ErG$Bz={&@7hopa#(3%v2l+M7{FlMC4korhJw!qydBEOd0I zC~g?Y69L{aVU9=h?Ik zMz|zk6FvAwX{_LtA}VpG zo>kFTvyeefxwu+vi>3Mt<;B;FBN9K0o~a%y_Qxle|Eu5Jw2B*HepDU37A2a*@~ODn zpjOi}79>n76;QuPn8ZWQ^<^8!M%OR}^w&s^smkOkI zw%jl$@p~3Anm;5zNXtqMl&myg5}mU?u>WCY>5nO=H|!<&iL~77)g1}m3DFJfavHJ4 zX^gGav?A0`>=}oao+!MbrIH;Gf5Y@R8EQ{@m!z&XlRsX0tjfL0z}lN~K5r@aMSZGp zcgl+bUeWO&ZvUuIBl1X9aWM8 zQFp1Y`(9_z1dnQp{jbr+>{j43fDV1%e82Dx?t!9NvR|?rx1*#Cdjs|>CNX=JxN$P61Ou4cQSmFK3xf&p8k02U1(e|A=y@8vU*!D`1yzG*MToPFEN5I)! zg??>zFw!Crkk4d}F;)^Tl4=w&xKY^e=^~C=)(R7&0n0wqaNv#LNV>3iM#}MGQQ2F^ zziIrMorWCJb)imb&mS96YClWwZG4e9o@mit59eTgQf@0EIZqUakzB@r!HM)ryjpTa zK9r40NELs80|-ULRBo=mmEW1zCQ9FaStI&mTxDsiDWAAtzIE@~)5!13o#qwLE}fd@ z)licRqduX`tGX0oo^R6>T5oV9Q&M?BwLhZ@wDU3}nBK8xR0!ED-RUqy)#yU7!?bXn zK59FHelh6_0ln*lh?_RYc)m)z;nZBP%*XMyVGbg|;oCG($h9q>)s@X)US!>zy1uos zSz}Z1mSkRUiCb917sc*2DyLKFs#vPG)Q_KF}CqM8HD@jx}owr-Xh`+nrEB=ZrTN z2-1L4E_1=|IEoOBS`p2=Bhj*&JzR2^-Y1w3SBDP-!DXB2W1<$yx9JIsyAmDr&1m(oFnn&SdsY{WutU6+cavEQT(d(O7 z-O5u$PhJfD7-V=HLZ3(LWQV0)DzYToIK!4Kk3m}P^CMTh;oaB*b&RK%mABYd37U}o z%sA&KcvCLL$!m0qo)q{Or8M7D&a5rYD$SKij#g-;N#r!qM#q1v_$}o`bEu2aSw@FsgfDY8iRc$LIT(T&~h>9n1CTAAqhO{ zcMKLR+t9J5`9ybXr4Y1m;{NOSYqutb9=uYDiFSkdm;kQUIb> z57G4|G+LDvdAaWxe;_a$U+TBX+}y40`z;sAi8-A$I$5jcgJMWNNz}(tX6-Fx+))O2I6k`^>lczt;f5&=)N%}R!G z0{K~*YvPl%2QW5$F8U1qVe)y|tQnVoaA!z!XZlh(j@$ls(vHvJY!0 zk%UWf)N8}3eUW9kzwqtka5>R=vf;dX9Cl+~u`!(SuUM<}DBI$%=RehXOr|O2wtpW%_sQNWyukm!y`NVBVpm zFW*AWVF$4enaJA2!Ci^emXvak-nlF*qg`;BcUW}-drA=RXyZokXY%(cXHz@W^(wq{ z4S5o(oAo#46!$#gr|M1>iQk+%ihYCsr=~q|0eU*Aq<#x61bq|QTL#P@D+;Bm>rRF< z(IUA`c?;c~-d5ln%E0Q9M_Z{-80v}`GPwVk(mEd-QRa&v+BA`(oMb{^(MkDJ1&p=T5r4MOhE>#Ya26j2RQ3g_o_EY4<-cC4l)X4|EZjm zP!WmNmYrgKD7}+VM;&f}7}m14WnUx}k#5o7Nt^krvB9z@$y>|kBS0Mvei3yDlEy;| zwi$&xm07EIMr$9G;khF<4CWO}3=m~E@{ZKcj}XgKuuqV_86@35iPPuW$HKyrJG)+R&!d zpR*-NgrXAs7QBvgLw1gML`sWAwY~@P36c6&^nZxA64sR?g_BiwRx5j{+>h|oLXlq* zy`}$UoJ0KA4&FTJ%ftzWJ&|V+XV5?OA&~8e`-u-2xA4Ow zpA_$<=yUy12cX2#SDYR2i@-15P>#@Uc5ynAKV5VT-lZ!nnE^ zy1sN0`(S&c*@2r#mrDrP9SKokEAxB9nn{r~7;CR^v;3dtlLc~ydVQ5x5VclTEKHSe z2V#r?i?$IzremT)RJV0wkQwF_{XurS;AYBCyu7)=W= zoB94_c#Br-}YC z$>V1$_=_6Q0-Q0CLT?hB&D9{0%-fU}%=~m6Kg4;}(8pV*fDu)M6Z8KGnatBkG$|_- z^R?Qn6|`5%Eb$akPRZhmIjQ@slGSb0W4fyahg2&URTCo2$1!AhxzwbJwLd8?Bu`66 zQDiJChL0VkG*e$|w{fp3ez0qV{md>xPii_-6MIUMO76(Fu~F*0Mt|ODB8`7P29chY zmW^MrqKGj@xSljjurcAs!kx4gDStC`X5{KL{&?1D=G(;e&;^m5S~vVJ+!f(Q#wlkG z*=mo_9F=Rr!k4zNCCf1h+}L9PpYUC|KYqDtS?1;P$&Sm#iyRe0qu~i#6}7(arKG{j1=pJ1VCJI z)Vfu;%UFNHY1Jh4X;zSUvFKMCJ;Rr(%6XESFW$+XqPV>#P54)xvWP{rsp~P_^g=}3 zvc-7)B6_L5h+U174!@sA3b&D5hgXhPZ7u(B{(a-QgpBmlm1G4 z#;`<5A!7L_8M_jp_CRN>ifk0BtJGdngM19W9sjrFrZgtCiZM&&!v<9kDYtn)2pq~c z30ksRcsuO_`K!c2OpDRejL(&@B)J2O-MO6zz2@lW9%T+UuEgF~-cT;F{K3$g z48n@6Xx)5sy+JGZEQ2$T6b0$-k+h*>~pdQ1O$-YKrkPNxwQ+gl|5n7U%ucwvxB; zPN46>o<=xi7GN&w2kMu+ zGTgksO&_8#wl-ExbalpxoG|55ezJM0eB4UD<16J!R2^{%<1|alGCLpV`P8gd6`;l8j_^_A`W0IchwRR?IxW4?O?HZE0CN$+ zjJ%_Z&xlaYqx9#L$grzL!X)`VX0+f_h5j+Id0<6tSc7*$d$UT}z2taaw;^mA%S zyniH3vLs!i;3V^}gczDA<8R%0mBS*`EmwN@-!a>n7x;~)D?GN!C4@=JqzIf8w@7v_ zgQQL%`a#}se#KBRZ4350+hsH8vorODFC9d}X!8)!^+j`YXBD2;?WJfn_nRu2R@+Rf zZ$2pemhX@M$q2PHnz~@6`QxcWlV|dC$YHoG4~`NEOPrOy7OKatJ! z2G|rPSXAl6D)EJ~##My-igAP*`M*V*=(S~H45PT0rmrhddIS+AhjgE^f128|BI`~l zZH$65jBb_CQ|6UVBA(0oM|D8)so;a6 zNo^GJ6nt`K)=o@iY~pEHtekGYk| zTgopP8S3B!S0Vtrwsc}VWr5DTDmGT)F=_cXnS_cwK}7C7dvmq{tIGe^-ph|O{#o$I zreyhWFDYykGQEm^N`#k0qo&Pmx}uj?i7iX!u(BLam(f zSl37TgW1H|Oz(=^PH3jJzys1n=r%%s=GS5jWv}-BW`FLk4z4~#sGrqoycZ)-r6t!G zY%C!|pnA>Yz{>Q~wC^|u4kiC4;;}|03#zQ4Mpv$f1~YN2Mx!a?GjUSt*=3u##{@wB z2y`{&S2kReZ##uCsE%`$_1?iGZhz-m|gtU;&v~A!JZL z<`9&Cu%!BpZAJDEYo5@b+g|sGd&P1_zu4A8TTTpP(h%2TW>I(3UaA$cI*#-9io$#I+Llv2G0cPqDz6JNcIHpRF}5~H4Po}|90cwmhw z@G;`E&q(H2-=RW_VDWIgj9J79i1tlaYclEGlG3cViUl-M=3l%PIaNNq_)lX*CNt67 zQcqt*QVNYLuVoyOcdFfqe#w%Gcj)At7Lq3?fLc(zkkPI-XSVFyB5x1&cv8?3@ra{-onIS}{#z{@mF41vWvU(vu zlKx$4)cP}h<>92Kx*E)}>LGC{b`Wi5*JiuZzmirU&&c`2-Z&{tt@BrWQEiYZ@;;-d zD)XvTi6jb_TFn^zTFCcFADKLdFCtyBY!iW!N8B+=W*k=m;|JMi#~)hzM(Uu8%rlWx z%Xx`v!xcgcmLq+|-Y6_hJ_F6ejiPHrZ!}-a7gO?!x`fSkZ`BZa3k+oM;OELe1_fAF zNVZ9KiX6<1<@;20>m*4%kOPZxgrqf9Bjliy4{#bn5j7v9j%(-7q!SOMCJ8SfP| z-D_ugIyL`?IL}^74x`@9`U<&bS<87VX-1%PW0=VFZ^bxBKa0-$%54*Gle{KwlTW9; zV%U9Au1FoAQ4hm*g= zY@j@p%GL3ihm4P~gy=Pxw8$5cA&eGPfmm$)$UC6NQ)Qw%(5vJZyn56Q)KxtcK|E>5?T;cMDbwO79(zXQ=-RzqLT z+#)|_8l&mS-c3It`i^Lhb&r6aNWyA-Z z8>koAmniK5A^w%^czT3PVmP&O7b65Q3;S)}_mXNsY1S0%2Em3bZ$?tSSMuq?Zk#P{ zS2ddEhe2Svm7u~~;aeESj)Kq86Ua8)Gd6<~uxzEQhzQ9v>Y2Q>!E-$$8_;yATlFva z9q2MSBTI=wvTt$$N*MnExiYzwpMxsk`$=)g_wpv{_N)|Do#LwyiwV_D#+GM3uyh%o z=*z@xsR%wwSV8WiEQlDQ!z)TT7=0BZH)}i*U29<7G*4981t&%HlH1nBaA5&8y_5A5 zlRy~7IETsBr|Ii*ADND1-?jfNFy!4~u=39vFIehVH*S1kv*o3lHz|V|F!oVYK-?%c zg`!X@!(GWO4Ti8v>`$~G;bvO zemaiLh8I$NM9=Kw%7#FeTAr~l5EO`y{N3yWtRh+?T85}gkCoO@&&D3%Taiaq$5m&t zOxo!%Pu65&GRIF=ZhoI2%kC{0Li^Y72lKwTI{hw7Y+XqJjL&3hRZW&GqFQ$&dOf94 zsiB;tY$a$oPuQ(y18#e$N&k-VPRSG@a}rYJ4T??u*=dHa`6ugFz|Gv=yc%FG0~&cm z9!l@C1S*bJM%KU2GAl#N?xk5Jk%eOkQM?Zs0DE5UGNFS5u|O)QvYWZAOgx zIK`hmN*c%5NzcviBfP@mC|`|a(IIZEB{IDoc?3R*ageew`EKW!w1k?)C7+8kBHG~3 zDwjgnFr(l@l@6I*wMW{Q(Hzq*YHbt8 zc1bXrA;b>mHRLwIw1kg_^xQ-I=H{NVK-CDtb>(!OQ{pGTW`)a1%5HLhH6iv5pj9i2 zXQHns7D&AqA9S}!;|XS5ThoA$Ui47WuJ49DFg--KSdv&5GQA|#TCrjj%D?Kca+tgX z|3F587ZDew`qgYY`{qX>bh^kLWDvV&76P;@`1PY`m8JQ=w#Z6trS) zYE(c-8JxL}7=m@ux3E-(ry2fPt*Us+M`@ZA!I(_h*Zvx{H}!LFaXyasg_S@Erht-e zMXIHf^t3RNFOe{4FSVcP)9}gp!!UvAU%2-$Z&*)wpY`X>x2ZR1Z;OA4vf1NFb88)@ zYTODIhBuWIC;P@0XVNp55M0vhnWJ#2NjnWcjfH$0wnZk Sz&=%P!8}8gGu}rJ%Krge)>!WV literal 0 HcmV?d00001 diff --git a/samples/sh_sfc_grib1.tmpl b/samples/sh_sfc_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..957d49f917675e88ce1bda947a5923f8b5f3cac7 GIT binary patch literal 9358 zcmYM24>)7jzW3F29akOKsH#!NQB|X=s;WjEwYSt5V~iSOOvYp)A|fIpA|i>1{7*y@ z5fKp)5kV${F(zY-G1;3=Rh?ATaa0{u$LqT4I`cY?*LCK&?rZu!&wbZ^p8Z+h_51$T zTF|t0=&Flas405|F48a!`xS=d}@w;e%0r?>F4M7neQ3p%Wz77@5e7W3FRKX zB$%@ezvSeb65@z>3c}ZZs;twx5dFDmXOM-8;C;UQ0%}*~0zj;mbi+(rw z?k^e<_V5>dwLbVI9S<0Ozv!@6YkuL|uD|#ofsfZO`s_b{`I1wmqe+FN>|0V4E11Z^f?P3aXco1wazyW?|I$`uVYw~vs z9bjO=HJ~fOCCzZV3$z zT>B1ur*axT6E+7-b$EjB-Q+;$qDFw0_aDLj!tbHHbN>otFUsJv)vv>Tc{kxRwPyJ2 zheT-j!apG8pf7wzmIb`~bbC^q6P8l2TMm6R{df3-`{Cf1-ACZt(NjS7Rt@<6Tr$8Z z@c={0Q^A10{R`-S=6m?{PBwgIG8lUMKjYyyUaf@MtQhdOjCbIWA6&uw)P6Xk_(Q1U zVLy1*hYd%#96;EJWBA_0o z=W-*QTyPdhT8M&U(w=~R-{ycms&|3G)C?f%<8ENSI2QWylVzwg`Y|9pItRY>oi8+6 z`vCgeh81}9l@olkXBR$Ou9_SOd_Cn&0t$-yO#qy_`p-aD-80btFZG;<$qz>UJo(1TCUoPY zd;q-g1Pt>YgGvK`2m4)~g^oT}z+u8aLW)fXaG~tn>9hI-es?h*d~NJE0OwEf5F+Jf z^3vP6(8YpXp!u}VK}HM|mAntJJ0ajd%6cFyQjvz_&7rfuO8cfX$Y_LsipBpzpN-;HOJ!NPI^H z=~90Oy~TeY=$Z6~22FQT0NuruP!A(OVC(`s$`R1s(g(lx`*(nlhC0w!CkJYtEWq8$eT3KS1BCI9((DnsN#C7BqnM1J1Ou;mE=(P|Oowh!}PWLW$}j?!`5r z*5&6ETGE;U`{6sVuYWM07+wK*Xa5Co6rd;1zg3ygx^7-wQ@K0z^a`~@-TN5 zoO-Y52++ zvr~}APrqkDI?E0B7upbah#hj7v&pAJgUvXfS3IUpU|}j|qc@E15BzWK=@+z&?gO!0 zvD^gH+^Oc@Z=jBPK&s0R1}>*RS7g<&o@R?tMzc8KNs`1+gQ6dFgxJ`cj8BHUjCb^s zBPmi9Craa4?mCsyT4A%dJx1>?i~Qtd0M)vL8zv7oyR}6%2G{zv=5gmA(6kFRl)=T@ zJ58}{YM->-nDSifcoHYXqd_vIBT{mF;~9ZP#W+yNz5K1q^IuP^P=csjAGO)Msh$h7 zH{|A~X>;E?KzVbVrioElzD;J!XLWqsF6gdI?Y35Ie=-_5^}iUBnDiV(+JML76UJ6M zmzyYNvD1s^`js?{EUn7}w|+gBdGznQAc$3IqW*$3S|W8d*5TDouZ(d zpL1AYeHvRH3wYfm*fv<=izjV9W%@p?nB|y}&i2!#{`cd!wz8A2Y#38QTGEaH*+4$8 zWv%_3`_PUV8_O8kP;qX=)L|9WPsGZZ3a`OnHXF4wrIAM8auhlWl-jt$7z(m|ef^HscbrNv5CLw zkj-RgP#5pc(DFWZVPUGsxI^pJ>o9+et&*8$|2Gq4UQB)~|zS_9e>y!7cUta@M(`otuv0FN3#B3R&goSV1US;rUu@&YI=H%=4G=2oeDfD_sZgQzk z#6KsUG3Q?H> zDq#&rH(bg1)C}!&$GR5N=jpf!qHHTO5;OZfVRQtE%yqMP{lOh+FW5HQfAG_p%eQA( zcjDXCs97PpcjL+?n@yM}tP5f*_qsAJSjwZyo@d&G3+VkipVqC8^_Cc_4_%kB%}LHN zB&U5!W8#@h;s|V#Qr~I3;S^*jm&Sc=d-uB7vWgOGqj1>P(KbYJ62sC%9g}`+WUMuy z#R)eL(%6rcqF~fX?eySCJL?v?XtxCgZ+@O$ByCKsG373SPBJYkyxn^GMcnK2={lyT zDLjV`^t(-Y4ziW}C@@#ncSO_6gRV!F#>&lC(6?+7AuTxHP|W2laQa9l(KL0USIN-S z`(D|Qq}@C&Ke(~SHkFU)vMNyD%yE-yg$z>_x{Rit70DWOE!ln2TN$Dw6rB=K5mw{d z9L;bWUA?uV4wQ%G1Qc`H)gmPkQx0pDzKNWbHGx;veNTrR#SSxELxN8 z;J|oyY7{Y|g}bS~i(?wU9bI}Zbv-++i6f`S5YKA4;ng07L@TLst39X9qeUpm9^9#C z6eBx43jG;Qt*wU8luh#%THDu!EIo~$&}ZQ!$c)$1r?+X|`Fx)K=|SfTcDCQ`o=oqa zj^mQ5Jx64zGWPgrNSkL}T&a93x`iXp_d=62B*RrpOFTGMQQl>S4AH9(ryJ|>b88CiQwoM@YIAPuaT zWiCn*C`WCK8=Ubq3|_zxU<91f0LEB5tt*P^)$J{v~vK8H&!KWO7$PeU(P z&-4g6W@fS~-3ZS`k~7KUB;_~pvW-%bc;hR_GJAg${+>%b406mhrX6tOUg?uL^r#Z`SfHViC>ZGJli9?{HYT( zKaRa~=rbSuW`phAF>*f@r(L{;lZ=ur41SlG659^rWQOBhlHx`AHgAbHBnW*N-MZSP zviRw9wK565FhTBZ4`vN>kWVRceS?#mc5fy(w$@6YHAS}s6eO!o;Ak_we>H93yIHcE znNzr>NKkGt!={c$v($bXqn;q2|BS0}QtVZE=5$Jamr6L?d{itip_BA<8f~l6K9*VK z`cqz$Tlb+LymwZiVu)LFDx;|(^qoeBWQpX#GLVi)E4&&5O zyBW2(;Vnb5jKEzMc$Wo`MY_8&v^4WjqenHSJ-jZknZ?TE)3hsBrbKGSikW_WzR*YYEX{`X$F9!h zF%k_V3BK1)8z+pqkw0KG9w05W6@FC7YURi^x4IXdsj96Eb8jxQ@6t(4NT!z{>55xD zqC+Jck!58VR*02gULs8fBQ1F>Q?L8lv!)%(#&B#ESwpt1G#_H72Yrc~W3il2^(ZrN zaDg_{&LVQ_?Btb39Vw>PTenOfpvz2w;&CIgK2C{z@SI||x)*3VY`4%fGB(g0Zpf02 z$+zukN_TimnxpsCV#Gt`=#u;=aTG3pu08tcc9YhUMj;G@RnK;;qa%m1M_}2sbe%ME zUzr?6oRA4EyN(6cx-rHQuU+q>Q4tl!TTV1qibxBgouKFIqgy<=s1n-P#OSy&iIO{K zQ_i()nYPQa#lp%yroCFmp(!IN&jvG_adp;45{2BlTq7-uCj`olnQlUxa)!5@HKK6H zx4TBKklU2Vr5j0U@mDN82ok?0pqx~5R6BiL$%-c1E7Pxr*75UPMf#6?gzWQpMc~!F z#;tlIC#oqD&8-`5iphE*T)(;3r>coiB{U*?{l9!hIxLHB^O79W@V6O_^zsBu94f16 zg@r|qmTE;=oawRzMtJdDqqk*+c*2~rVwKXqbRJ2(hMueUrg&b<=g6)Osq;QPQ6aN+ zTAK*dmdTv1$2L6YzVSRfmCE*X)?8g@#p6{FmvFXQhr3iqAaLkY@J z@eCW?f@s3g_et?K2bWm2Mv`lzZw-^|xeTmf!-q2t{&~CRL=;(=P{$q|}Lyd2_OPgr8$D^;p$Gb>`x24Y$oCamXB! zBLdr!M|W@Vss*(aQBa+Uhb+w#Gx!I0Gf}~Jcbft^v6?*PagF_vS(@8wPnkAQ(bCK7 zlv&K2mS1X?gfqwWT+AkSz&7+OvP*w2(L%t@w(d|Dg=liJD(%+(;QqHp>*`&^9ba+M z9cR%q$|em-7c%w9Y*9iLs$+cl(# zjeVOVuvf(=rP`cOdktblg%s#22fr11I=C8I2YpA7&lN zlle$)zF@H$rPJw+7lv!;`3vgBhBO6AAKN%$IJg>7H-0OqjMflPND-IEb?qvGdS}QQTd+8`lEz8B;oa!@iMbSGqV_&-x69Ded>us;YEbvmO-WUuO_oYo z?PgbGD_uQrdtSm3WtP*ML-I$A93Gvj)F(c`nO$pSZ5zfpnrH23)A8vp6R#Q5swGpy zWA|bt;*JpF;pr}5INuY?VWf7f-FK}Uv%X-Wt$t;CDuTN+>?RwbkB%R;9Eygdsnr?f z=wh9iUp+M8RC}4d``{dKWYf?z_nFX3wwWaF)4maqwNeJXm7 zGh3ppHQ(N)Y*xCPrP;gvNyd4#UzOoUbN8%rU$tjJUybctR&Mtrg<1BQj)Z>ejAvs~ zy@xcKx?P!wLCC2{`RPBpvSo!fqtGF><%tp$-PxPX!;dU>ihtzvfW6jEucqf+QjIG! zv}4XnC3qGLT+`Rh60sWnFwRbQ(iDtd4`z5Br7jV>S?8g&7CAeE&B^LTDoUM+dO=22 ztgFyM_w;AgDw%6}-c>*D(De~km|T3zOqFt?I43fyg(IYVK0e0aB(a7#yDe+HlL~U> zlrc~jsh6=S9k^OcI$rAX*+Hk1%hiWgCR^4ULrls6)c8yby=hFb`7rKbd{2(bpbDXc z&^fF)-ij)qk?#mL?ZKcztX{Q@;`4cd9Ig@394sTt;;H;XDKE~zYST~+9107MUMM7# zY+l(Ly}&~9nj`y%^Uw@Z8dgttKUslnGI zh=qNt*9i(WSE<1bsv2;5X{UzDVZV_1b$NDWx5}AtyRk0wmUkP9Ka{gmIVz58j>{hE zw~NuAMKk49p|{m_>)j4oEc(c15}}85cktXi3G$9ckFBRktZE~hHnvX+Z6wl1s;0?w zJ(_5jjoMvC23kWFbi#zk*#!IjMWU}h@cY&zxSD%>+s9>NLXZ_0v^$i66?cZahexjpccKvo8B zI)C0EuBRBy!U&Up|4?7PX+ahyFt;6+p_z8n`qhXsQo}&Q92Z@U|ME~X`|U(V=pW{b z8&$0`$AU%M=vkR;9D9o z{7g!O0GXF4+A*2+Aw<8SKtaZIykes}h68F@EeQiimY>?!vP10S?N-@&n+1e!Jw2J> ztT-k|)od$O#>G->?+hlPXZIn3YlQ+S8Le*N2s1X_zjVHMg^Mg^=w>wo?CI7(E=N40 z3dbcW+<8Kct#!l@Aexo0Se%*+j>fQ4f|ZAnXB$I`cOF{U$m*jBt!zVy9ADIM>vK#d z3%i3P2)ZX!Z}1X}=NgcmrWztMnl>a=vy6I=#vlz|Hr;Bq9*6?uI72$c^$QG{!61}p zbjDGMb?$;`YIF;Ws}$uKa3v_gToY1>=lk_6tCpL2s3?HSPi~0QkbZrvHIF`1ja#v%&wd71L;m4xs+TJMcu&qvG}E~ zy!F-~{04ieUR-7=MWm;SRV)vFYEwLIK$@#x>qvXFZ7?=^Yi89drfbt?^+cmP$8N<_ zVwlplk)pKE$W*hDjAB=FJBDkW^%jNr@f5<+>=fly_=~j`*TQGDdllLqHPZ5cULJ2z z_9(UKR79y)>oy^h6If7W=n~ zR*C9LRp|&RtcW6P--n zT211SDwKRObEg1BPetW5M{r+MFV(E%r%lgF;yO$wac`<7Nth%UDB*WHi*xl3w1MMS zP1nTsCrZ-Ck+hIjF*~a=qa&m~!w`2ZtbGojsTw9drzO%jWRhZubV%8(TeW$yrpwt+ zRp;mUgqloip3tO>Yr_k;{i&*iVt2#LZ5LriZCgZET91ASo_6CsBe*dLIy zpnlP9OMl*XfH`c*pt~sDn}T`agD#SpI_@J*K0+Fl7u3H=iR#K|%aUbu__q#g5PVm) zS?R`=cgxxxI)C+)4og)Rj8(_W!IrpMf|#%J6J*n!>e;p-L2l)&&W-O=9wDA@48&p$ zFT@~yul=~`WMF{Asljl95Mv@DHJk6nb}_oPCh)UIhXfvKYu^r@WXrEPsPSWka?EO0 zOD-wI=3BLOU)87-o0{Y5bIZM$nno<&wcLk$VAENf^q(}7Ezz{y_Wef#dLNx!mzL>LdqU?(hjiPuhtheOZ~sO^ zI%!2at|YQN*@!ESyK7}unz1a3jV?Zs+N(WoE;Qyg=$P)GYR3A?Fx4^Fgb$99`o`$y zIrI#7f<&%QKZu)%T(+H8Ll+C{hxIb){P|t}G5-UCk1B z+~x?##4MwuB}|LK3oxVovT1;vXxXJfX|oim1Yl?Mv*?v7SljPrbHUX+UTa8FFj z4w#k~88B`#GM016n!8!3EGYWKEJ!O(y5gRL_(~3jE|t#Mo=&^j-D3 z#@HNRtL@tt#PibWf!z^;+1B8cDBFxGTbB z5^p@?&TtSTZg}zoUtJbEsxz{eb33zH-Qpt1sSRK!$lUr;%kfq5RPDpn%814g!BD^O za^{G9c#Ik}8Z?NpjCZ9yS&}D}t9S{wb`^%pxh7Y9h?&q7D$8o0BB{EtlAv0Drf>Oy zd?}yGBia0$26*1&1o{cdfC$C%`DzX@m? z&JGEZb6Cp{(kSh0!q!nA|(Grz(jgtz8UOV|xW7RyR7xnSy zY-6`}RM}W!Zfbqp=h>`9t_#D)JZbi1CiAje40p^p7lEP42Y0|vt4G-OSVNsKWrdv7 zl6hmke5}j|X}4FSn`r)lO^4ubH6WFm<~`JLHQ13nh9l+= z1vA`;F6x6O97~_U9+RQ-M}zv}WGJ1jc2t)piWP2-Z+5Gjr<)kn*}d6Ums_a1>|r*| zMj+O2lOi42HacdZs&B^YwzUZ%byQPW2GbBTUq=-Y`&}wMy1Yh`E5LSnt7pHAJi*bj zqZDpj;z-cvedYP`eO9(~UXj(2Rtt)qxA9g(`H>bca@A-JNP~_>(Ps4^$?*eXrN-gK z7K(jk8G63N)Zic_akE>vOnwEfjZvbeZ&_q0n5{JHJ7CRFwV7>UMQG<}a{eM+IbcDD zn(bwy)?~h?7TbX#xqnXKZ_#5VPU#EH4r{5}QGvX>#z^N{diI`ZRe0f;#iPlM@mxa{ zdn>hEkD3LpyJfg4igqw!sEQ>z`Ek5)tt3-;-|D8f&+z!g=QE0I3Vfj~U8|IDcCH EFW=h0;{X5v literal 0 HcmV?d00001 diff --git a/samples/sh_sfc_grib2.tmpl b/samples/sh_sfc_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..b76eb5d7c5bd1b67436e5bd255bc859e4843358b GIT binary patch literal 9410 zcmXw;2UJtZ_xQnzZN-kdDy{`AC}NkqAgBwX2%>l$+nIk%bC^5n_%T@*OtG<@EK{c0y1KgVm~{L)byC?MoK$X;)#LxFt?gv%w`r5= zr~IJ(`0?YX$HsQD@qaRDuABZ}@Xp>@u~OP(4ttwfBL{32|5t2mulx*|F=I0C`n59; zNd%~$BY5=Wn}4#`71I>f@p`$x;e=OW@I2!iQaU)Q$>Y4SIvA5Rg8Ln{ec|Gvp zr*Ex+PmOTlj6KkW?+2|8wE>oyPH4b$4G0g;YX|4|dsm049_B z!mMjA0Lx!hK}cOSkeR%od*N+`wQu0Pb!;TsYKfg;eN|@%=cD?d;vO5=;a5G@s))HB z)AR|jm7iVVxos+IbA%nx&31;bZytcuWzJSXRJP@76AAtVSqZtqr&-}uu25EV2RyEC zJ%qi#54!(LG*owTAFy#WA6hln3Mnr5K&8I>fCW>tp;_hs06LK~RB$ocef24CKpVkx zA3eX)-6(iwwfG0PpS)fOT>n=Etl4}GzJJ02zU1084+oz)@Q(IakC~=jaN3iXfQUH( zpUQ29FDgV^LBt?@gKikQJX@vE5RAVl~WE zu^75&HbX^?gAjkj9vb2YK(0r=K)=*1gam;o*v3yrXyE=Wv!lzG-f?0BVpzL)eR-gQ6IR4U2V0dg8=DrnSHU486hO!#>a+ViT0}$PDZ~e+d{_6AfKVqd{K}%z+uJ`Yo>LXe-!08(2dg0NOGo zaBqy!I^10bxB2Z3tQy6D?^$ulx&m(lpK{9qij~nV#hY1HKdsqv?EQMEUvm(;n%Z;V z+xQ+p?r&o$l#D{)6MNvC1rM{&pPXyvYe>vhLEBd40ciRF6ySRh`m?AF(yY<%cXFI? zAM*Es%M=%2?MXer3-TaTzRV00-$KB`D+Vkj!H$qJbf5dVT|V&XOJ7?4$#e#e7WV^p zot^;~&5cu9107ppIyO;Q#0p!&x*n7`fNEoMrqRvww-G^vsvDXvm`Q=e)ev%A&+Gr1W zb}qBj%v8+p?Qz3Fy8GGllN-B)hXZ(pzC=C`_`IfVKExr zgV&w5h`R3p3ns^O!Mj>qzYJPFyHkMF)Vnb4(MlML;sWp+hhgvjaey@##^Jkhr=iDB zoe$I^Rsefv?*lpm&p_B58PFG{f=}NhcYlPk1L9<#El&k_K&p!dqK-1M8n?T>LHHzK7jD< z5pW_`3yX?whBgG6Ez6xqFoszL?2fq$+ord(RJ=Y6*>9}_vJbjIvd8bCz`^xE)2s<7 zj&;TI=B_jJk}(KOY__-D+~Q^NxNip38d{gQ#||)#bAh?t>j3Gwx9&5hg##`n8emr+ zwyRvG?7aKeo=*SbWBXtHFl{=rI@|Wad0*YwTioLD#5tQ{FC%*GnJEO&_VHWA=B*#`_^`-1a&^ zf4dcCKcf;_^m{(AYkUJFsecR1tG@@>E}sR!qY%(q)hU>z0MX@_ItN%AejCQ${uox1 z?g+#du7Zs&eq|vv{|dvuIAeLXBfw&lwbcST6~atG!|0_T(z6pp=FJ6>hYcVSe+fhi zCw;}KAaW=NM3&6}k&lu-1(7NUM4}H(<^w=v+C>m)bOezSD~N=A zKqP50mPG)Onv)=sIhiwK3y3^H29Z&Jg2)|*L1ZGFwY?kT@o?Sas|(NlI8DcFE7jas zxxF-YH|I+Gv2bG6Xy*yt=Z3XKp_228?M1MJh67G1sj3syv*>@^E|j=+WJOOH8??vE zdjvaWWJNro9UnaWGWM03jC(M0g}uFcKi^Z`*qg_HSxn`h>s}ySNzNiKH{7btQt$Q} zD*jLtB8(SW6fV3QocOxgGB&+Ralf@lze5~xxVdhL#wD#7^S8oSctWz7o}}B!USzG- z*AuPnQ=%>?Cg>@3A*MxMi*?t}&gCtR@z3rp@(|t+`|-if8D(A;S1AsCTpFNzl)C8mOR~DMD(o!J?QS2QgbP~z z$9%o(_ds~cC%qec8viTfaN4`7gxp(VNwH&^S0qGpeR|l}F(p>j`J$~TeUE{%sp&W4 zrPF6ASJcPvj8dF=iomh#cSEyK@xZ;XTg^+UCw)rw{+UU&BLcrcg2+;LLO9+L#@>j+ z4eyHUb9eN3%l#yVyC0_g{?5)49)I21(P2~I6`^2!l`ZvHDUU|?HzqT-A!naY6Ix^E zCM}JBUl@~Eiv{)XTTd%eWkuj8uC>^g=w(_F*CMjEe9L{$I-Om5C8ltv&sEC7!k)bM zf~Yme3^Pmqt~nSgKjTNu$*Z8QgV{>{(GK_`&SiWQhj}B4O8@xN+f5&jI?^;irQ{wP zPr+a6lfB(ipRpYBZ`1qu#s^f746Z*oztFj7@XAK~S50)qnH%>LQ`*)v$PgZk%*J!Y zXY&@7c4_)ZjHdjWQ06XCNQO;YUQ#f25o=5uLpdD#rLvu6EOAkttEeg6E~TCOEx9{jIVIGObxFY`SfW8Ym752r<)K%>TU;qbX?X8Mn*e49g zxjX?a)yL`9&YaHLOmAdQ4u9I=M8%g3TgdHbt-P#!-?=8zzTJc7deN&rM-va0i2f8G za|YMQGP57<#O{Nhyrxr4HWeua($<{0Ug7pWBK@+y0x-#u9s$Mb{b0#tM%+=%}kv3u* zuLbpujFG&O-RPQ^m8PDJyBd*do``mbz8zmZSV7OKG7vn_QDvsoD8lZP2Eppy>tPN# zqw!1CpKle|*tCSvnde-SSIVYS76*>x?KMtG^~6mpl#ATsaX!ZC-Bn9J@{ykzUha_Np1)eW^Rb@STsF#Mj zapjms8Em*2-k3s(!AB~bANBuw=Hb$msLCLLpTu4!jvo)S%V|!qL!3Y0k^e5N6!ju8 zqI5=_-m8Oa!au*N*zcu!)cAnklUpu=k-p*G$+t72gfP-_jyq>1b}-*R`whm(<{USO zaS419m35iAAa0i^y2JrZOw6x6T9HjZOIldnAiRVWqHt-YE|{+kW&H{R#Y^c6O{fEzq#fyVOnq@t_(fI{hcvR zKvt#}J}8!=7l9|k9>=Ys{;m1QTPk=q__^_x)=C`1d=`Zvs2MLC23zckj^7_Fe>zl# zI-#mf-Fb6Owj0PEurZx%xPq>dt2z-edjBrW(bnbL6I^UE%=KPTvY=V43Dxi5m%zu0 z+vH4L2hMav&~IepN^$}&lEmF=$^O#`N%QaA>llna9`n?|0LFx#orCr{*C@J z6kB~nR}#Mu{Am6h(!i)i6{0G*{g{*HjfZVfh>Y*YZ}22B`x(o0bBo#PAJ}l>spG{= zUeNA?3q5vIIFxVvzY|dM;*#AF_S}EueZ3AbPpbmzIY|gwdva4@w$3KyF6D^%BlOAr z2}LD(!@m*j>$lOmfY*Uk(hD0M_2k&-6s0O-;ADtxN{&QE9*U?uD#17h4xI89OMFf16wDTBR`c&B8%u?drH zBIaYA=AWUvoic9x4=3NGP(0e?+Km(*T_s%;F+P(+rcd-cdO&>9?} z5{r&1_vgi{6v-=7Ls3_V;e<9UriX@m_3W`?fw`4CP)(BMkpC|3+^@NQIB&@7xkY5JRJk zqu%5$)Yb+5!QV^CFs}|zNw`%IcKk|`P0~L%>?psON(CP)rx(V6mk@^<78f^1)evWL zMluTV^TPU>Bc>L`i&JYWe5f}9TgkbnZ*!jpz07klG>b>YjMFanmf`nAITHPQaph>* zr}7^otCY)X+q!1qoC_Z|x2mVazG)?7c=hdK`l*TJ*R7!hq!E)LW7_5fxwU)Z?wI(|Lxiu1ZRJ-?cO<8!xDJMldv-whmm#RoAn?o) zr#EzaVC%UA{pwzn{GwTp9j>2AnrV!U7d2dKwUf*e0XfCZYVS8$BjQdop(mg2P-I)K zD_mcpA-G|C1pzo{2kT(nae5X>*vV(YYN%#1;w!sSS<91kX+W(;F+pWuiXW(pd4)hf2Qs?YB=j# zdp~Xhx~oiWFNqlf1*X3O9%lCu?lPBYi2N;P;nkW3Lsxmdw@SlhC;f~0;{P@&B|+rx zU*DQ`mGPJxBn=ptE>PS^16}Lx3l|EWiygBzV+Yy8XD4cBrMO*MUyoK;1efXSG%W>3 zi90hH&7OJP_+L;Sx-f(fN*R1VrbgUAz7KK=@MWNCgyWh!6V;rvpE4BjM%EjSFL+q2 zB!A$2q^ITUnfymoma#4_*|%azgDYp6$vpXvI-ljMep>IH+;2DmF6Z@OjkRuaJN`W7 z1#_%)wrXj@Mc#`XE@~&{2dVhfNB)Az6*skXybQ^mXEc;AFX&^oq}Qs(3eO7{if;=K zqx@=ya_5OXsS~=_yuTRD?EbW~f*>xZ=}pwk=93B(ldKt2z)3ybS45k%D-Zu$^c^|H z|19QhJYUPnfCRUxdyI&LEo|R<&d{Awuja;z7b&%c3HTcD2O3Z`#U?j4-9XgH>iTMm z_!ny3QpC93xhhf(wZ?ljZ-~%uT+L}Ld{V!_u$h0_zP~z`$6cnL-dvhGTM|v! zD=nu5N!N4U@Y`_jSuTjzlB0+Aqv$1=3buZxxZwN;Z7Z+FNHd== zzDXFD$Kkn*-->G0wMuw1HYJe1D9c_s8u6^mnf($s#gsI8Ud$rV^rq5&{4=_3!3Oqg zOrYkG_M(v5#%O5~!c41C`|!837DweIejxvC%4@|lV`@)Om(_S>@$jx}b#tf0l~mmg zQ~$<4B3T6>UyFV%I%YM(d_SvNeRT8m7g^IYpxoeXyY6Zd`FiNsgFs4z6 zM>Gq{BcWG$9*L=}>zO$;PV}$n|6!I_(gU07{LB1R8ob9dSjAGsTIIf~gws_eS@QqY zE(1Sy)tE4~Gp;U>d}XPG5Aadg{`h9;QiM~1Mz=~Gp39T1L=5Brf;Xh*%7Yw-wqr%9 zqr&o$${nTwg=2}m>Ie0JF`*ifF_E|`yo_nhic%kKqP4kR?v_%_aw?HYW(K4TF*nMX zsl&#R(mdsH01*`{#{brv$O>2eJW)sG3Lb?4(wMfj_HM>T`Ulv zCa~kA?9$?4y&Sil*-d4|ro>04Z9eJa9h7*Dat<93cO0iEpNXqic*aNXuc|2(f^{~y z*ov#|Z`h@UZAzA$qe5UK^PLW#5oU54=|6fADOs|C$=%*y%AP8ZyuJD))t~3w&RyvA z9(;v(JxC+@u-l7E5fL0IWQ}m3|>*OyP!xbxZzx&Ln$e{m; zofEvGa!0lwvy{se--`sRHzntpBysojy&f~D<0+NVL#DfVYm2XeL#1o0^Q+dDTEr^w zckR2Zi_~W1i!)cUXNc#Cx3M=7n+JW=(rYIJ@7#Qm_L%Wf+zk>9_p8$DD|Mdctp$Dj zBl*^xBZxG7VL}Uz%<#~C)=kwOCoclc;A+#1#OGXi{%+3Sn0W5z@GX2rnZ)odQ`Yo} z`|9G~GGbXP^L61zRYe1yI=MHic!0Xf(GVbxJYi|sVbV#;O>8i_k}_4+ReTI}u;ON7 zQThA!gKSK13~r{{up_t3;UqrGIUU2^o9?Q8p>|-rR%f$g1l#2o)8b{TICBbTXqOk6 z_%!L+Dx4;iwWQcSEi3;idZpxcsz;ZA{+6ifJ0zjV-u6sU|HzwK`lLc?tl;)F1F8+| zS80Bt>qTkg9O};82cl^-y}ntJuJ)2F(ZpAG^33`9Mh>?B>>f-sr57D++DzENTmvQ% z7Ae27GkEumYch9$DET}&nNw0(SukGLBlmBBAg z3@64&UUGIDN_?_dFqL+KYb&2mL<)=bg9hgghVisyrFy=qo8qB(mitC>m$j#M5R*=w zsw+y8`y}CAO7_G$5FJhKbX=alY_YZNsDsjt_a5UU*lfO&dfU4^C{zrHtO|= zj;ugR8fgVen{+4jdfAnP&MY^^FY*CjqllFMAo6+QVJafbQ7FX0Z zD=Pm;{WIGMUznAeQmB8v5F6oa>eCz1(wygt)b zbta)XBZWO!^*uCK1uGK=cvi_1J5{Nq-(#!YpF)2H;1zGo+w&elQN-Ab4?ji5*Za+~r$t6tK62sS7>xF1MFm7i`ScLG4Ow_{s)pYi>ivy2%>BT}LLjRhd{B zlK!M7n-WPbpk=U%mA@!2=j2sebNiaOl6--8!9T3=>?*3KF8@M|*L!yE)*si7YQ;e( z7@Nqmh2y#z3>VQt@xICq5dj^jjh4@+w$fjoy3w#TOO>0IwU6PLc2EQ(+C@_(-C}#{ zlp_>NRMul+V)()~ZuCkCzF;Wf2sQna(|HU_=SW&t2zWdGBPDJq8)Kc*-v>KJ`Ns}dg1BFb4oYg4|szA z?|4Jl?&C zIh?&FYZT)tS;)o_TQbABT~ZH}B+N?steUPaEr_5CsPNm2wLuC% zxzzAYdX;gM^_AjRnx&ai4UZoxN~ydbKZ9goA_}eSn|a-w?OY9;Sr{Y?%Jznt4YpuN z^FuJLx(M^vrKPnX<#pv>WlPMin9p6SM461T!jkCCY#qz98K1GFB|wW~L>Zr%^WvWs zELWy*KhfSZ7K#a#gE{?#Z2X-LI*u#J0#8;EPf1(;XkLM@@0ee2HdBiaTi4_Vqm`WL zaoeQ%r|%T&(;t=g$zF;xbq(lWimnLCXcN?Vlm9g~#K<@sC%*wMvag~akoV^#9{VNv zh17<_XW8F*mSebn`wpt*1CwB2b9due33pW0M_>jqc}z7fpGE$`qI2kp=h#6x#c}z0 zG3BQOP~uHIA!Q7!@;oK@B64H7_x>AUI`>!Ag>J`G3YSqMiOW+=O)*8v@^*!8pbh1n zrC4dx3YJrYIQA-fO;qXu&{OV^7R33Ux2e{hHfHL@O`Z}eN22kSPma*p1mzFnvy!lE zbg=`GA}C{`N>d~O{IJ$1+J{`Zs8*&aI2-qd*kefSY|pBw|3txLB`In09kdsxk(~|+ zf3>w$ED^Wp;^`gQ54=7e9#WL*3iR?U;#KpzFrCUlt7>u~24}v`yOu-gR@CfCcFyGt z?o9}hhl@54FVLDx&Qkf>e|R4&xwxUCiRO=3n66t*s%*uKvXqRd{BgE_^QKTVdQiHC zmL}RJ%`nL62*JVlQ&q3gpEXx_Vzs@|*O)`xsu7nNG0eItve52n3?5%07U}N`XNsq1 zs@a=W%c<9}>4n{y2gsQ6uJ~h&?$Ub(oNAo3fKf|}Ec7F;k1OW%l70ftUAQG ztT7q3=TJfqaW$k8;SSMJHGw{#v-b;#i z-mCKQ+&RRCW<&0;*%_R14po!IzN*+w4iS&04a!1=XK1>-bjoV|C*gPSn7#{x5qqJI zH9)AZ1?}q6B7)LMxFs`(nkK~*T&v3B7Kzr;A2BxPuHs}8M})_7v{XF{*gGlz4?n + +exit 0 + +# SMSCMD is %SMSCMD% +# SMSNODE is %SMSNODE% +# diff --git a/sms/grib_api/include/eoj.h b/sms/grib_api/include/eoj.h new file mode 100644 index 000000000..4f908830d --- /dev/null +++ b/sms/grib_api/include/eoj.h @@ -0,0 +1,21 @@ + +if [[ `hostname|cut -c1-3` = hpc ]] +then + JID=`/usr/local/bin/jid` + rsh %HOST% -n /usr/local/bin/eoj -v $JID + export NO_EPILOG='eoj' + + rcp %LOGDIR%%SMSNAME%.%SMSTRYNO% \ + %SMSNODE%:%SMSHOME%/%SMSNAME%.%SMSTRYNO% + + . /etc/epilog +fi + +if [[ "x${ARCH}x" = "xhpia64x" ]] +then + + rcp /var/spool/PBS/spool/${PBS_JOBID}.OU \ + %SMSNODE%:%SMSJOBOUT% + +fi + diff --git a/sms/grib_api/include/grib_api.h b/sms/grib_api/include/grib_api.h new file mode 100644 index 000000000..792fcec95 --- /dev/null +++ b/sms/grib_api/include/grib_api.h @@ -0,0 +1,15 @@ + +SMSHOME=%SMSHOME% +P4_LOCAL=%P4_LOCAL% +P4_HOST=%P4_HOST% +LIBRARY=%LIBRARY% +RELEASE=%RELEASE% +DESTINATION=%DESTINATION% +ADDRESS=%ADDRESS% + +set -a +PACKAGE=${LIBRARY}-${RELEASE} +PACKAGE_TAR_GZ=${LIBRARY}-${RELEASE}.tar.gz +LIB_DIR=${P4_LOCAL}/grib_api/releases/${RELEASE} +INSTALL_DIR=${DESTINATION}/${LIBRARY}/${RELEASE} +set +a diff --git a/sms/grib_api/include/head.h b/sms/grib_api/include/head.h new file mode 100644 index 000000000..297a12184 --- /dev/null +++ b/sms/grib_api/include/head.h @@ -0,0 +1,40 @@ +#!/bin/ksh + +set -e # stop the shell on first error +set -u # fail when using an undefined variable +set -x # echo script lines as they are executed + +# Defines the three variables that are needed for any +# communication with SMS + +export SMS_PROG=%SMS_PROG% # SMS Remote Procedure Call number +export SMSNODE=%SMSNODE% # The name sms that issued this task +export SMSNAME=%SMSNAME% # The name of this current task +export SMSPASS=%SMSPASS% # A unique password +export SMSTRYNO=%SMSTRYNO% # Current try number of the task + +# Tell SMS we have stated +# The SMS variable SMSRID will be set to parameter of smsinit +# Here we give the current PID. + +smsinit $$ + +# Defined a error hanlder + +ERROR() { + set +e # Clear -e flag, so we don't fail + smsabort # Notify SMS that something went wrong + trap 0 # Remove the trap + +%include + + exit 0 # End the script +} + +# Trap any calls to exit and errors caught by the -e flag + +trap ERROR 0 + +# Trap any signal that may cause the script to fail + +trap '{ echo "Killed by a signal"; ERROR ; }' 1 2 3 4 5 6 7 8 10 12 13 15 diff --git a/sms/grib_api/include/perforce.h b/sms/grib_api/include/perforce.h new file mode 100644 index 000000000..cbe115465 --- /dev/null +++ b/sms/grib_api/include/perforce.h @@ -0,0 +1,16 @@ +host=$(hostname) +host=%HOST% +package=%PACKAGE% +root=%P4ROOT%/client/main +[[ ! -d $root ]] && mkdir -p $root +cd $root +export P4CLIENT=${package}_${host} + +export P4PORT=p4od:14001 + +p4login +p4 client -t ${package}_template -o | p4 client -i + +p4 sync %P4SYNCOPTION% +make .init # creates make.dep + diff --git a/sms/grib_api/include/qsub.h b/sms/grib_api/include/qsub.h new file mode 100644 index 000000000..09488489e --- /dev/null +++ b/sms/grib_api/include/qsub.h @@ -0,0 +1,13 @@ +: +# QSUB -q %QUEUE% +# QSUB -u %USER% +# QSUB -eo +# QSUB -ro +# QSUB -ko +# QSUB -nr +# QSUB -s /bin/ksh +# QSUB -r %TASK%_%FAMILY1% +# QSUB -o %LOGDIR%%SMSNAME%.%SMSTRYNO% +# QSUB -lT 500 +# QSUB -lt 450 +# QSUB -lM 200Mb diff --git a/sms/grib_api/include/step1.h b/sms/grib_api/include/step1.h new file mode 100644 index 000000000..7dd6c4fff --- /dev/null +++ b/sms/grib_api/include/step1.h @@ -0,0 +1,18 @@ +# QSUB -p 70 +#======================================================================= +# step1.h +# Define second step for copying the logfile when on the ibm-cluster +#======================================================================= +# @ step_name=step_1 +# @ queue +# @ dependency=(step_1==0 || step_1!=0) +# @ class=%QUEUE_EPILOG:emos-exp% +# @ user_priority=100 +# @ output = /dev/null +# @ error = /dev/null +# @ job_name = $(jobid) +# @ step_name = step_2 + +export LOADL_STEP_NAME=${LOADL_STEP_NAME:-step_1} +case $LOADL_STEP_NAME in +step_1) diff --git a/sms/grib_api/include/step2.h b/sms/grib_api/include/step2.h new file mode 100644 index 000000000..2f41ad6e5 --- /dev/null +++ b/sms/grib_api/include/step2.h @@ -0,0 +1,17 @@ +#======================================================================= +# step2.h +# Define second step for copying the logfile when on the ibm-cluster +#======================================================================= + +#sleep for a few seconds to allow next task to get into queue + +;; +step_2) + +if [[ "x${ARCH}x" = "xibm_power4x" ]]; then + rcp %SMSJOBOUT% %SMSNODE%:%SMSJOBOUT% +fi + +exit +;; +esac diff --git a/sms/grib_api/smsfiles/buildLibrary.sms b/sms/grib_api/smsfiles/buildLibrary.sms new file mode 100755 index 000000000..265e45b60 --- /dev/null +++ b/sms/grib_api/smsfiles/buildLibrary.sms @@ -0,0 +1,22 @@ +%manual + + + The work is carried out + +%end +%include +%include +%include +%include + +TMPBASE=%TMPBASE% + +cd ${TMPBASE}/${LIBRARY}/${ADDRESS}/${PACKAGE} + +make + +smslabel buildLibrary "`ls -l src/libgrib_api.a`" + +%include + +%include diff --git a/sms/grib_api/smsfiles/checking.sms b/sms/grib_api/smsfiles/checking.sms new file mode 100755 index 000000000..3d0d0bbde --- /dev/null +++ b/sms/grib_api/smsfiles/checking.sms @@ -0,0 +1,22 @@ +%manual + + Unpacks the tar file of gribex and pbio sources for the version + defined by GRIBEX_CYCLE and "make"s the library. + + The work is carried out in /scratch/ma/mas/CompareGribexVersions + +%end +%include +%include +%include +%include + +TMPBASE=%TMPBASE% + +cd ${TMPBASE}/${LIBRARY}/${ADDRESS} + +make check + +%include + +%include diff --git a/sms/grib_api/smsfiles/createTar.sms b/sms/grib_api/smsfiles/createTar.sms new file mode 100755 index 000000000..da797b375 --- /dev/null +++ b/sms/grib_api/smsfiles/createTar.sms @@ -0,0 +1,49 @@ +%manual + + The work is carried out in + +%end +%include +%include +%include +%include + + +cd ${P4_LOCAL} + +[ -d $LIBRARY ] && cd $LIBRARY || { mkdir $LIBRARY ; cd $LIBRARY ; } +[ -d releases ] && cd releases || { mkdir releases; cd releases ; } + + +rm -rf ${RELEASE} +mkdir ${RELEASE} ; cd ${RELEASE} + +#[ -d ${RELEASE} ] && cd ${RELEASE} || { mkdir ${RELEASE} ; cd ${RELEASE} ; } + +export P4CLIENT=${LIBRARY}_${P4_HOST}_${RELEASE} + +export P4PORT=p4od:14001 + +p4login -f +#p4login + +p4 client -t ${LIBRARY}_${P4_HOST} -o | sed "s/main/releases\/${RELEASE}/g" | p4 client -i + +#p4 sync -f +p4 sync + +p4 client -d ${LIBRARY}_${P4_HOST}_${RELEASE} + +chmod 755 -R * + +./autogen.sh + +./configure + +make dist + +[ -f "${PACKAGE_TAR_GZ}" ] && smslabel createTar "Release number is ${RELEASE}" || { smslabel createTar "${PACKAGE_TAR_GZ} is not available" ; exit ; } + +%include + +%include diff --git a/sms/grib_api/smsfiles/install.sms b/sms/grib_api/smsfiles/install.sms new file mode 100755 index 000000000..bbdc0c1e6 --- /dev/null +++ b/sms/grib_api/smsfiles/install.sms @@ -0,0 +1,39 @@ +%manual + + Unpacks the tar file of gribex and pbio sources for the version + defined by GRIBEX_CYCLE and "make"s the library. + + The work is carried out in /scratch/ma/mas/CompareGribexVersions + +%end +%include +%include +%include +%include + +PLATFORM=%PLATFORM% +HOST=%HOST% +TMPBASE=%TMPBASE% +CURRENT=%CURRENT% + + +[ -d ${INSTALL_DIR} ] || mkdir ${INSTALL_DIR} + +cd ${TMPBASE}/${LIBRARY}/${ADDRESS} + +make install + +cd ${DESTINATION}/${LIBRARY}/ + +rm -f new current + +ln -s ${RELEASE} new +ln -s ${CURRENT} current + +chmod -R 755 new current ${RELEASE} ${RELEASE}/* + +smslabel install "`ls -l ${RELEASE}/lib`" + +%include + +%include diff --git a/sms/grib_api/smsfiles/setup.sms b/sms/grib_api/smsfiles/setup.sms new file mode 100755 index 000000000..e3c5b125e --- /dev/null +++ b/sms/grib_api/smsfiles/setup.sms @@ -0,0 +1,27 @@ +%manual + + The work is carried out in + +%end +%include +%include +%include +%include + +TMPBASE=%TMPBASE% + +cd ${TMPBASE} + +[ -d $LIBRARY ] && cd $LIBRARY || { mkdir $LIBRARY ; cd $LIBRARY ; } + +rcp $P4_HOST:$LIB_DIR/$PACKAGE_TAR_GZ $PACKAGE_TAR_GZ + +[ -f "${PACKAGE_TAR_GZ}" ] && smslabel setup "${PACKAGE_TAR_GZ} is available" || { smslabel setup "${PACKAGE_TAR_GZ} is not available" ; exit ; } + +[ -f ${PACKAGE}.tar ] && rm -f ${PACKAGE}.tar + +gunzip $PACKAGE_TAR_GZ + +%include + +%include diff --git a/sms/submit.ksh b/sms/submit.ksh new file mode 100755 index 000000000..de3628912 --- /dev/null +++ b/sms/submit.ksh @@ -0,0 +1,5 @@ +#!/bin/ksh +set -e +job=$1 +out=$2 +$job > $out 2>&1 & diff --git a/sms/submit.sge b/sms/submit.sge new file mode 100755 index 000000000..9ec4b4d46 --- /dev/null +++ b/sms/submit.sge @@ -0,0 +1,22 @@ +#!/bin/ksh +job=$1 +out=$2 +q="-q mars" + +. /usr/local/share/ecmwf/use/sh.sge + +rm -f $out + +exec 0>/marsdev/data/max/sms/submit.log 2>&1 + +n=0 +while [[ $n -lt 10 ]] +do + qsub $q -j yes -o $out $job && exit 0 + echo "$n: $(date) qsub failed: $?" + sleep 1 + n=$((n+1)) +done +echo "submit failed, too many retries" +exit 1 diff --git a/sms/test_gribs/bin/cube.pl b/sms/test_gribs/bin/cube.pl new file mode 100755 index 000000000..390ffc89a --- /dev/null +++ b/sms/test_gribs/bin/cube.pl @@ -0,0 +1,283 @@ +#!/usr/local/bin/perl56 -I/marsdev/data/max/webapps +use strict; + + +use LWP::UserAgent; +my $ua = new LWP::UserAgent; + +use webmars::parameter; +use webmars::mars::request2; +use Data::Dumper; + +@ARGV=qw(marsod) unless(@ARGV); +$ARGV[1]=9876 unless($ARGV[1]); + +open(DEF,">$ARGV[0].def"); + +my $m = ($ARGV[0] eq "marsms") ? 1 : 0; + +print DEF <<"EOF"; +suite mars_server +limit test_archive 3 +limit test_retrieve 3 +limit compare 3 +limit grib_api 3 +limit sample 3 +limit qsub 50 +export MARSMS $m + +family $ARGV[0] + edit DATABASE $ARGV[0] + limit $ARGV[0] 2 + inlimit qsub +EOF + + +my $host = "$ARGV[0]:$ARGV[1]"; + +my $tmp = tools::tmpfile->new; + +my $cube = 0; +my $empty = 0; + +my @unset = qw( + year month branch +); + +my %replace = ( + satellite => "ident", + band => "obstype", +); + +my %seen; + +my $url = "http://$host/cgi/lastcube"; +my $req = HTTP::Request->new(GET => $url); +my $res = $ua->request($req); +my $last = $res->content; + + +my $suite={}; +my $smslabel = $ENV{SMSLABEL}; + +# $last=10; +if($ARGV[2]) +{ + $cube=$ARGV[2]; + $last=$ARGV[2]; +} + +while($cube <= $last) +{ + system("smslabel $smslabel '$cube out of $last'") + if($smslabel && (($cube % 100) == 0)); + + unless(-f $cube) + { + + for(;;) + { + + my $url = "http://$host/cgi/cube?id=$cube"; + my $req = HTTP::Request->new(GET => $url); + my $res = $ua->request($req); + + my $text = $res->content; + + + open(OUT,">$cube") or die "$cube: $!"; + print OUT $text; + close(OUT) or die "$cube: $!"; + + last unless($text =~ /exception/i); + + } + + } + + + my $req = webmars::mars::request2->new_from_cube($cube); + $cube++; + + my ($v) = $req->get_values("expver"); + + next unless($v == 1 or $v eq ""); + + + my @r = $req->split_for_batch; + + foreach my $s ( @r ) + { + foreach my $r ( $s->individual_requests ) + { + process($r->clone,1,2,2); + process($r->clone,2,2,2); + } + } + +} + +system("smslabel $smslabel '$cube out of $last'") if($smslabel); +put($suite,qw(CLASS STREAM TYPE LEVTYPE RUN) ); + + +sub process { + my ($r,$run,$max,$step) = @_; + + my ($year) = $r->get_values("year"); + my ($month) = $r->get_values("month"); + + map { $r->unset_value($_) } @unset; + + foreach my $k ( keys %replace ) + { + my @x = $r->get_values($k); + if(scalar(@x)) + { + $r->unset_value($k); + $r->set_values($replace{$k},@x); + } + } + + # print Dumper($r); + + + my $j = $run - 1; + my @s; + for(my $i = 0; $i < $max ; $i++) { push @s,$j; $j += $step;} + + foreach my $x ( qw(date step levelist number direction frequency ) ) + { + + my @x = $r->get_values($x); + next unless(@x); + + my @u; + foreach my $s ( @s) + { + push @u,$x[$s] if(defined $x[$s]); + } + + unless(@u) + { + for(my $i = 0; $i < $max; $i++) + { + push @u,$x[$i] if(defined $x[$i]); + + } + } + + $r->restrict_values($x,\@u); + my @v = $r->get_values($x); + die Dumper($r,\@x,\@u,\@s,$x) unless(@v); + + } + + my @x = $r->get_values("date"); + unless(@x) + { + #print "$cube year=$year month=$month @x\n"; + #print $r->as_batch,"\n"; + + if($month <= 12) + { + my @strmonth = qw(jan feb mar apr may jun jul aug sep oct nov dec); + $month = @strmonth[$month-1]; + } + else + { + $month =~ s/-//g; + $month .= "01" unless(length($month) == 8); + } + + $r->set_values("date",$month); + +# print $r->as_batch,"\n"; + + } + + + my $year = int($year/10) . "0"; + + + + my $c = $r->clone; + map { $c->unset_value($_) } qw(date time); + + my $t = join("_",$c->target_name,$year,$run); + $t =~ s/\W/_/g; + + + next if($seen{$t}); + + + my $req = $r->as_batch; + $req =~ s/\n//gs; + $req =~ s/retrieve,//; + + my ($class) = $r->get_values("class"); + my ($type) = $r->get_values("type"); + my ($stream) = $r->get_values("stream"); + my ($levtype) = $r->get_values("levtype"); + + $levtype = "sfc" unless($levtype); + $type = "xx" unless($type); + $stream = "xx" unless($stream); + + + +if(0) { + foreach my $e qw(country model icmodel bcmodel dbase rki rty) + { + my ($s) = $r->get_values($e); + $stream .= "_$s" if(defined $s); + } +} + + + push @{$suite->{$class}->{$stream}->{$type}->{$levtype}->{$run}}, [$t,$req,$cube-1]; + + # open(OUT,">reqs/$t.req") or die "reqs/$t.req: $!"; + # print OUT $r->as_batch,",target='$t.data'\n\n"; + # close(OUT) or die "reqs/$t.req: $!"; + + $seen{$t}++; +} + + +sub put { + my ($suite,$name,@rest) = @_; + + unless($name) + { + foreach my $s ( @{$suite} ) + { + my ($t,$req,$cube) = @{$s}; +print DEF <<"EOF"; + +family $t + edit REQ "$req" + edit CUBE "$cube" + task prod_retrieve ; inlimit $ARGV[0] + task test_archive ; inlimit test_archive; trigger prod_retrieve == complete + task test_retrieve ; inlimit test_retrieve; trigger test_archive == complete + task compare ; inlimit compare; trigger test_retrieve == complete + task sample ; label info "" ; inlimit sample; trigger prod_retrieve == complete + #task sample ; label info "" ; inlimit sample; trigger prod_retrieve == complete + #task request ; label info "" ; inlimit request; trigger prod_retrieve == complete + #task gribex ; label info "" ; inlimit gribex; trigger prod_retrieve == complete + #task cleanup ; inlimit compare; trigger compare == complete +endfamily +EOF + } + return; + } + + foreach my $x ( sort keys %{$suite} ) + { + print DEF "family $x; edit $name '$x'\n"; + put($suite->{$x},@rest); + print DEF "endfamily\n"; + } +} + diff --git a/sms/test_gribs/bin/samples.pl b/sms/test_gribs/bin/samples.pl new file mode 100755 index 000000000..c4a9958ea --- /dev/null +++ b/sms/test_gribs/bin/samples.pl @@ -0,0 +1,93 @@ +#!/usr/local/bin/perl56 -I/marsdev/data/max/webapps +use strict; + + +use LWP::UserAgent; +my $ua = new LWP::UserAgent; + +use webmars::parameter; +use webmars::mars::request2; +use Data::Dumper; + +my @tests; +opendir(DIR,"/marsdev/data/max/grib_api/tests.ecmwf"); +foreach my $t ( sort map { s/\.test$//; $_; } grep { /\.test$/} readdir(DIR) ) +{ + my $exit = 0; + open(IN,") + { + chomp; + $exit++ if(/^exit$/); + } + close(IN); + push @tests,$t unless($exit); +} +closedir(DIR); + +print "@tests\n"; + +open(DEF,">samples.def"); + +print DEF <<"EOF"; +suite mars_server +limit grib_api 3 +limit qsub 50 + +family samples + inlimit qsub +EOF + +foreach my $t ( @tests) +{ + my $x = $t eq "memory" ? 1 : 5; + print DEF "limit $t $x\n"; +} + +opendir(S,"/vol/dataserv/grib_samples") or die "opendir /vol/dataserv/grib_samples: $!"; + +foreach my $d ( sort readdir(S) ) +{ + next if($d =~ /problem/ ); +# next unless($d =~ /brute/ ); + next if($d =~ /^\./); + + opendir(DIR,"/vol/dataserv/grib_samples/$d"); + + print DEF "family $d\n"; + + foreach my $x ( sort readdir(DIR)) + { + next unless($x =~ /\.\w\w\w\w/); + + my $y = $x; + $y =~ s/\W/_/g; + print DEF <<"EOF"; +family $y #; autocancel +00:01 + edit SAMPLEDIR /vol/dataserv/grib_samples/$d + edit FILE "$x" + task copy +EOF + + +foreach my $t ( @tests) +{ + print DEF <<"EOF"; + task $t + trigger copy == complete + inlimit /mars_server/samples:$t + edit SMSSCRIPT $ENV{SMSFILES}/test.sms + label info "" +EOF +} + + print DEF <<"EOF"; +endfamily +EOF + } + + print DEF "endfamily\n"; + +} + + diff --git a/sms/test_gribs/mars_server.def b/sms/test_gribs/mars_server.def new file mode 100644 index 000000000..07f885822 --- /dev/null +++ b/sms/test_gribs/mars_server.def @@ -0,0 +1,58 @@ +suite mars_server + defstatus suspended +limit test_archive 3 +limit test_retrieve 3 +limit compare 3 +limit grib_api 3 +limit gribex 3 +limit request 3 +limit sample 3 +limit qsub 50 + +edit MARSMS 0 +edit SMSTRIES 1 + +family build + defstatus suspended + inlimit qsub + + task make + edit SMSCMD "%SMSJOB% 1> %SMSJOBOUT% 2>&1 &" + + family marser + edit PORT 9876 + task cube + label info "" + endfamily + + family marsod + edit PORT 9876 + task cube + label info "" + endfamily + + family marsms + edit PORT 19876 + task cube + label info "" + endfamily + + task samples + + + + family extras + task extras + label info "" + endfamily + +endfamily + + set HOME "/marsdev/data/max" + set SMSHOME "$HOME/sms/test_gribs" + + edit SMSHOME $SMSHOME + edit SMSFILES $SMSHOME/smsfiles + edit SMSINCLUDE $SMSHOME/smsinclude + edit WORKDIR $HOME/work/test_gribs + edit SMSCMD "$HOME/sms/submit %SMSJOB% %SMSJOBOUT%" diff --git a/sms/test_gribs/smsfiles/cleanup.sms b/sms/test_gribs/smsfiles/cleanup.sms new file mode 100644 index 000000000..f4279f793 --- /dev/null +++ b/sms/test_gribs/smsfiles/cleanup.sms @@ -0,0 +1,6 @@ +%include + +rm -f dump back +#rm data + +%include diff --git a/sms/test_gribs/smsfiles/compare.sms b/sms/test_gribs/smsfiles/compare.sms new file mode 100644 index 000000000..b8f3da073 --- /dev/null +++ b/sms/test_gribs/smsfiles/compare.sms @@ -0,0 +1,17 @@ +%include +%include + +ls -l data back + +set +e +cmp data back +status=$? +set -e + +if [[ $status -ne 0 ]] +then + /home/ma/emos/bin/linux/compareGribFiles -random -fail -p0 data back +fi + +%include + diff --git a/sms/test_gribs/smsfiles/copy.sms b/sms/test_gribs/smsfiles/copy.sms new file mode 100644 index 000000000..3923c41a3 --- /dev/null +++ b/sms/test_gribs/smsfiles/copy.sms @@ -0,0 +1,6 @@ +%include + +rm -f data +ln -s %SAMPLEDIR%/%FILE% data + +%include diff --git a/sms/test_gribs/smsfiles/cube.sms b/sms/test_gribs/smsfiles/cube.sms new file mode 100644 index 000000000..f0da38a35 --- /dev/null +++ b/sms/test_gribs/smsfiles/cube.sms @@ -0,0 +1,11 @@ +%include + +what=%FAMILY1% +export SMSLABEL=info +$SMSHOME/bin/cube.pl $what %PORT% +cdp<<@ +play -r /mars_server/$what $what.def +exit 0 +@ + +%include diff --git a/sms/test_gribs/smsfiles/grib_api.sms b/sms/test_gribs/smsfiles/grib_api.sms new file mode 100644 index 000000000..e4b1229e8 --- /dev/null +++ b/sms/test_gribs/smsfiles/grib_api.sms @@ -0,0 +1,46 @@ +%include + +name=%FAMILY1% +rm -fr /scratch/ma/max/problems/$name + +export GRIB_DEFINITION_PATH=/home/ma/mab/src/q/definitions +here=`pwd` +cd /home/ma/mab/src/q +test=$(ls *.test) +cd $here +cat > info +fail=0 +for n in $test +do + t=$(basename $n .test) + echo -n "$t " >> info + banner $n + cat info | perl -e '$/=undef;system("smslabel","info",<>);' + set +e + rm -f core + /home/ma/mab/src/q/$n data > out 2>>info + status=$? + tail out + [[ -f core ]] && ls -l core >> info + rm -f core + set -e + + if [[ $status -eq 0 ]] + then + echo OK >> info + else + echo FAIL >> info + fail=1 + fi + cat info | perl -e '$/=undef;system("smslabel","info",<>);' + +done + + +if [[ $fail -ne 0 ]] +then +cp data /scratch/ma/max/problems/$name +exit 1 +fi + +%include diff --git a/sms/test_gribs/smsfiles/gribex.sms b/sms/test_gribs/smsfiles/gribex.sms new file mode 100644 index 000000000..59dda6f7f --- /dev/null +++ b/sms/test_gribs/smsfiles/gribex.sms @@ -0,0 +1,7 @@ +%include + +export GRIB_DEFINITION_PATH=/home/ma/mab/src/q/definitions +/home/ma/mab/src/q/gribex data || true + + +%include diff --git a/sms/test_gribs/smsfiles/make.sms b/sms/test_gribs/smsfiles/make.sms new file mode 100644 index 000000000..37f0ff9d7 --- /dev/null +++ b/sms/test_gribs/smsfiles/make.sms @@ -0,0 +1,19 @@ +%include + +cd /marsdev/data/max/grib_api + +use autoconf +mkdir -p $TMPDIR + +export P4CONFIG=p4config +p4login +p4 sync + + +# export CFLAGS="-g -m32 -O3" +# ./configure --prefix=`pwd` + +pwd +make + +%include diff --git a/sms/test_gribs/smsfiles/prod_retrieve.sms b/sms/test_gribs/smsfiles/prod_retrieve.sms new file mode 100644 index 000000000..5fc57c8dc --- /dev/null +++ b/sms/test_gribs/smsfiles/prod_retrieve.sms @@ -0,0 +1,17 @@ +%include + +cat %WORKDIR%/%DATABASE%/%CUBE% || true + +if [[ ! -f data ]] +then +$MARSCMD <<@ +retrieve, + database=%DATABASE%, + %REQ%, +target=tmp +@ + +mv tmp data +fi + +%include diff --git a/sms/test_gribs/smsfiles/sample.sms b/sms/test_gribs/smsfiles/sample.sms new file mode 100644 index 000000000..4a533f5c8 --- /dev/null +++ b/sms/test_gribs/smsfiles/sample.sms @@ -0,0 +1,7 @@ +%include + +export GRIB_DEFINITION_PATH=/home/ma/mab/src/q/definitions +/home/ma/mab/src/q/sample data + + +%include diff --git a/sms/test_gribs/smsfiles/samples.sms b/sms/test_gribs/smsfiles/samples.sms new file mode 100644 index 000000000..d91c85a68 --- /dev/null +++ b/sms/test_gribs/smsfiles/samples.sms @@ -0,0 +1,11 @@ +%include + +export SMSFILES=%SMSFILES% +export SMSLABEL=info +$SMSHOME/bin/samples.pl +cdp<<@ +play -r /mars_server/samples samples.def +exit 0 +@ + +%include diff --git a/sms/test_gribs/smsfiles/test.sms b/sms/test_gribs/smsfiles/test.sms new file mode 100644 index 000000000..e81770f76 --- /dev/null +++ b/sms/test_gribs/smsfiles/test.sms @@ -0,0 +1,52 @@ +%include + +home=/marsdev/data/max/grib_api/tests.ecmwf + +name=%FAMILY1% +rm -fr /scratch/ma/max/problems/$name + +# export GRIB_DEFINITION_PATH=/home/ma/mab/src/q/definitions +here=`pwd` +cd $home + +export MARS_LANGUAGE_FILE=/home/ma/max/dwd/linux/etc/mars.def +export MARS_CHECK_FILE=/home/ma/max/dwd/linux/chk/mars.chk + +env | sort + +export MARS_MM_FIRSTOFMONTH=1 + +t=%TASK% +n=%TASK%.test + +cd $here +rm -f info.$t /scratch/ma/max/problems/$name.$t +fail=0 + +set +e +rm -f core +$home/$n data 2>>info.$t +status=$? +[[ -f core ]] && ls -l core >> info.$t +rm -f core +set -e + +if [[ $status -eq 0 ]] +then + echo OK >> info.$t +else + echo FAIL >> info.$t + fail=1 +fi +cat info.$t | perl -e '$/=undef;$x=substr(<>,-1024,1024);system("smslabel","info",$x);' + + +if [[ $fail -ne 0 ]] +then +ln -s -f %SAMPLEDIR%/%FILE% /scratch/ma/max/problems/$name.$t +# cp data /scratch/ma/max/problems/$name.$t +echo "gribprofile /scratch/ma/max/problems/$name.$t" +exit 1 +fi + +%include diff --git a/sms/test_gribs/smsfiles/test_archive.sms b/sms/test_gribs/smsfiles/test_archive.sms new file mode 100644 index 000000000..c531f493b --- /dev/null +++ b/sms/test_gribs/smsfiles/test_archive.sms @@ -0,0 +1,16 @@ +%include +%include + + +rm -f back +export GRIB_DEFINITION_PATH=/home/ma/mab/src/q/definitions +/home/ma/mab/src/q/g2r data || true + +$MARSCMD <<@ +archive, + database=marsnext, + %REQ%, +source=data +@ + +%include diff --git a/sms/test_gribs/smsfiles/test_retrieve.sms b/sms/test_gribs/smsfiles/test_retrieve.sms new file mode 100644 index 000000000..7830235f3 --- /dev/null +++ b/sms/test_gribs/smsfiles/test_retrieve.sms @@ -0,0 +1,21 @@ +%include +%include + +#export MARS_MD5=1 +#MARSCMD="mars -n" + +if [[ ! -f back ]] +then +$MARSCMD <<@ +retrieve, + database=marsnext, + %REQ%, +# fi=x +#write,fi=x, + tar=tmp +@ + +mv tmp back +fi + +%include diff --git a/sms/test_gribs/smsinclude/head.h b/sms/test_gribs/smsinclude/head.h new file mode 100644 index 000000000..e2edf9be2 --- /dev/null +++ b/sms/test_gribs/smsinclude/head.h @@ -0,0 +1,63 @@ +#!/bin/ksh + +set -e # stop the shell on first error +set -u # fail when using an undefined variable + +# Defines the three variables that are needed for any +# communication with SMS + +export SMS_PROG=%SMS_PROG% # SMS Remote Procedure Call number +export SMSNODE=%SMSNODE% # The name sms that issued this task +export SMSNAME=%SMSNAME% # The name of this current task +export SMSPASS=%SMSPASS% # A unique password +export SMSTRYNO=%SMSTRYNO% # Current try number of the task + +# Tell SMS we have stated +# The SMS variable SMSRID will be set to parameter of smsinit +# Here we give the current PID. + +smsinit $$ + +# Defined a error hanlder + +ERROR() { + set +e # Clear -e flag, so we don't fail + smsabort # Notify SMS that something went wrong + trap 0 # Remove the trap + . /usr/local/share/ecmwf/share/.epilog + exit 0 # End the script +} + +# Trap any calls to exit and errors caught by the -e flag + +trap ERROR 0 + +# Trap any signal that may cause the script to fail + +trap '{ echo "Killed by a signal"; ERROR ; }' 1 2 3 4 5 6 7 8 10 12 13 15 + +ulimit -s +ulimit -d +ulimit -m +ulimit -a + +export SMSHOME=%SMSHOME% + +workdir=%WORKDIR%/%FAMILY1% + +[[ -d $workdir ]] || mkdir -p $workdir + +export MARS_MM_FIRSTOFMONTH=1 + +[[ %MARSMS% -eq 1 ]] && export MARS_HOME=/home/ma/max/dwd/$ARCH + +# hostname >> $SMSHOME/hosts + +set -x # echo script lines as they are executed +cd $workdir + +export MARSCMD='mars -t' + +#banner `hostname` + +#export LOCAL_DEFINITION_TEMPLATES=/ diff --git a/sms/test_gribs/smsinclude/tail.h b/sms/test_gribs/smsinclude/tail.h new file mode 100644 index 000000000..ada1ebd29 --- /dev/null +++ b/sms/test_gribs/smsinclude/tail.h @@ -0,0 +1,4 @@ +smscomplete # Notify SMS of a normal end +trap 0 # Remove all traps +. /usr/local/share/ecmwf/share/.epilog +exit 0 # End the shell diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 000000000..899851c2b --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,318 @@ +list( APPEND grib_api_srcs + grib_api.h + action.c + action_class_alias.c + action_class_gen.c + action_class_if.c + action_class_switch.c + grib_accessor_class_g1fcperiod.c + grib_accessor_class_g1end_of_interval_monthly.c + grib_accessor_class_mars_param.c + action_class_section.c + action_class_list.c + action_class_while.c + action_class_put.c + action_class_meta.c + action_class_remove.c + action_class_assert.c + action_class_template.c + action_class_trigger.c + action_class_when.c + action_class_concept.c + action_class_set.c + action_class_set_darray.c + action_class_set_iarray.c + action_class_noop.c + action_class_write.c + action_class_print.c + action_class_variable.c + action_class_modify.c + grib_accessor.c + grib_concept.c + grib_darray.c + grib_iarray.c + grib_accessor_class_array.c + grib_accessor_class_assert.c + grib_accessor_class_ascii.c + grib_accessor_class_bit.c + grib_accessor_class_bitmap.c + grib_accessor_class_bits.c + grib_accessor_class_bits_per_value.c + grib_accessor_class_g1bitmap.c + grib_accessor_class_g2bitmap.c + grib_accessor_class_concept.c + grib_accessor_class_decimal_precision.c + grib_accessor_class_divdouble.c + grib_accessor_class_budgdate.c + grib_accessor_class_validity_date.c + grib_accessor_class_validity_time.c + grib_accessor_class_bytes.c + grib_accessor_class.c + grib_accessor_class_change_scanning_direction.c + grib_accessor_class_codeflag.c + grib_accessor_class_codetable.c + grib_accessor_class_codetable_units.c + grib_accessor_class_codetable_title.c + grib_accessor_class_count_file.c + grib_accessor_class_count_total.c + grib_accessor_class_double.c + grib_accessor_class_element.c + grib_accessor_class_evaluate.c + grib_accessor_class_g1area.c + grib_accessor_class_g1date.c + grib_accessor_class_g1monthlydate.c + grib_accessor_class_library_version.c + grib_accessor_class_when.c + grib_accessor_class_g1verificationdate.c + grib_accessor_class_g1day_of_the_year_date.c + grib_accessor_class_g1_half_byte_codeflag.c + grib_accessor_class_g1forecastmonth.c + grib_accessor_class_g1step_range.c + grib_accessor_class_g2step_range.c + grib_accessor_class_data_g22order_packing.c + grib_accessor_class_mars_step.c + grib_accessor_class_g1param.c + grib_accessor_class_g1p1p2.c + grib_accessor_class_g1_increment.c + grib_accessor_class_latlon_increment.c + grib_accessor_class_g2date.c + grib_accessor_class_g2level.c + grib_accessor_class_g2step.c + grib_accessor_class_g2end_step.c + grib_accessor_class_g2latlon.c + grib_accessor_class_g2lon.c + grib_accessor_class_global_gaussian.c + grib_accessor_class_gen.c + grib_accessor_class_gts_header.c + grib_accessor_class_ifs_param.c + grib_accessor_class_julian_day.c + grib_accessor_class_latlonvalues.c + grib_accessor_class_latitudes.c + grib_accessor_class_longitudes.c + grib_accessor_class_missing.c + grib_accessor_class_offset_file.c + grib_accessor_class_scale.c + grib_accessor_class_from_scale_factor_scaled_value.c + grib_accessor_class_times.c + grib_accessor_class_forward.c + grib_accessor_class_g2bitmap_present.c + grib_accessor_class_ibmfloat.c + grib_accessor_class_ieeefloat.c + grib_accessor_class_constant.c + grib_accessor_class_iterator.c + grib_accessor_class_message.c + grib_accessor_class_nearest.c + grib_accessor_class_box.c + grib_accessor_class_ksec1expver.c + grib_accessor_class_laplacian.c + grib_accessor_class_label.c + grib_accessor_class_long.c + grib_accessor_class_lookup.c + grib_accessor_class_octect_number.c + grib_accessor_class_headers_only.c + grib_accessor_class_padding.c + grib_accessor_class_pad.c + grib_accessor_class_padto.c + grib_accessor_class_padtoeven.c + grib_accessor_class_padtomultiple.c + grib_accessor_class_section_padding.c + grib_accessor_class_section_pointer.c + grib_accessor_class_position.c + grib_accessor_class_signed.c + grib_accessor_class_signed_bits.c + grib_accessor_class_section.c + grib_accessor_class_step_in_units.c + grib_accessor_class_section_length.c + grib_accessor_class_g1_message_length.c + grib_accessor_class_g1_section4_length.c + grib_accessor_class_size.c + grib_accessor_class_scale_values.c + grib_accessor_class_offset_values.c + grib_accessor_class_sprintf.c + grib_accessor_class_round.c + grib_accessor_class_spectral_truncation.c + grib_accessor_class_time.c + grib_accessor_class_transient.c + grib_accessor_class_g1_half_byte_codeflag.c + grib_accessor_class_values.c + grib_accessor_class_simple_packing_error.c + grib_accessor_class_data_simple_packing.c + grib_accessor_class_count_missing.c + grib_accessor_class_data_sh_packed.c + grib_accessor_class_data_sh_unpacked.c + grib_accessor_class_number_of_values_data_raw_packing.c + grib_accessor_class_data_g1simple_packing.c + grib_accessor_class_data_g1shsimple_packing.c + grib_accessor_class_data_shsimple_packing.c + grib_accessor_class_data_constant_field.c + grib_accessor_class_data_dummy_field.c + grib_2order_packer_simple.c + grib_accessor_class_variable.c + grib_accessor_class_second_order_bits_per_value.c + grib_accessor_class_data_g2simple_packing.c + grib_accessor_class_data_g2simple_packing_with_preprocessing.c + grib_accessor_class_data_g2shsimple_packing.c + grib_accessor_class_data_g2complex_packing.c + grib_accessor_class_data_2order_packing.c + grib_accessor_class_data_2order_packing_count.c + grib_accessor_class_data_g1second_order_row_by_row_packing.c + grib_accessor_class_data_g1second_order_constant_width_packing.c + grib_accessor_class_data_g1second_order_general_packing.c + grib_accessor_class_data_g1second_order_general_extended_packing.c + grib_accessor_class_g2grid.c + grib_accessor_class_data_apply_bitmap.c + grib_accessor_class_data_apply_boustrophedonic.c + grib_accessor_class_data_secondary_bitmap.c + grib_accessor_class_data_g1secondary_bitmap.c + grib_accessor_class_data_g2secondary_bitmap.c + grib_accessor_class_data_jpeg2000_packing.c + grib_accessor_class_data_png_packing.c + grib_accessor_class_data_szip_packing.c + grib_accessor_class_data_raw_packing.c + grib_accessor_class_data_complex_packing.c + grib_accessor_class_data_g1complex_packing.c + grib_accessor_class_gds_not_present_bitmap.c + grib_accessor_class_data_apply_gdsnotpresent.c + grib_accessor_class_gds_is_present.c + grib_accessor_class_select_step_template.c + grib_accessor_class_local_definition.c + grib_accessor_class_g2_eps.c + grib_accessor_class_g2_mars_labeling.c + grib_accessor_class_md5.c + grib_jasper_encoding.c + grib_openjpeg_encoding.c + action_class_set_missing.c + grib_accessor_class_number_of_points.c + grib_accessor_class_suppressed.c + grib_index.c + grib_accessor_class_number_of_points_gaussian.c + grib_accessor_class_number_of_values.c + grib_accessor_class_number_of_coded_values.c + grib_accessor_class_g1number_of_coded_values_sh_complex.c + grib_accessor_class_g1number_of_coded_values_sh_simple.c + grib_accessor_class_dirty.c + grib_accessor_class_statistics.c + grib_accessor_class_statistics_spectral.c + grib_accessor_class_unsigned.c + grib_accessor_class_unsigned_bits.c + grib_accessor_class_spd.c + grib_accessor_class_sum.c + grib_accessor_class_vector.c + grib_accessor_class_long_vector.c + grib_gaussian_reduced.c + grib_accessor_class_abstract_vector.c + grib_accessor_class_abstract_long_vector.c + grib_loader_from_handle.c + grib_bits.c + grib_timer.c + grib_ibmfloat.c + grib_ieeefloat.c + grib_accessor_class_reference_value_error.c + grib_memory.c + grib_buffer.c + grib_dumper.c + grib_dumper_class_serialize.c + grib_dumper_class_debug.c + grib_dumper_class_default.c + grib_dumper_class_keys.c + grib_dumper_class_c_code.c + grib_dumper_class_wmo.c + grib_dumper_class.c + grib_context.c + grib_date.c + grib_fieldset.c + grib_filepool.c + grib_geography.c + grib_handle.c + grib_header_compute.c + grib_hash_keys.c + grib_io.c + grib_trie.c + grib_itrie.c + grib_rules.c + grib_keys_iterator.c + grib_parse_utils.c + grib_query.c + grib_scaling.c + grib_templates.c + grib_dependency.c + grib_value.c + grib_errors.c + grib_expression_class_binop.c + grib_expression_class_true.c + grib_expression_class_string_compare.c + grib_expression_class_unop.c + grib_expression_class_functor.c + grib_expression_class_accessor.c + grib_expression_class_long.c + grib_expression_class_double.c + grib_expression_class_string.c + grib_box.c + grib_box_class.c + grib_box_class_gen.c + grib_box_class_regular_gaussian.c + grib_box_class_reduced_gaussian.c + grib_nearest.c + grib_nearest_class.c + grib_nearest_class_gen.c + grib_nearest_class_regular.c + grib_nearest_class_reduced.c + grib_nearest_class_latlon_reduced.c + grib_nearest_class_sh.c + grib_iterator_class_polar_stereographic.c + grib_iterator_class_lambert_azimuthal_equal_area.c + grib_iterator_class_lambert_conformal.c + grib_iterator.c + grib_iterator_class.c + grib_iterator_class_gaussian.c + grib_iterator_class_gaussian_reduced.c + grib_iterator_class_latlon_reduced.c + grib_iterator_class_gen.c + grib_iterator_class_latlon.c + grib_iterator_class_regular.c + grib_expression.c + grib_util.c + compile.c + functions.c + grib_accessor_class.h + grib_accessor_factory.h + grib_api.h + grib_api_fortran.h + grib_api_internal.h + grib_api_prototypes.h + grib_box_class.h + grib_box_factory.h + grib_dumper_class.h + grib_dumper_factory.h + grib_emoslib.h + grib_expression.h + grib_iterator_class.h + grib_iterator_factory.h + grib_nearest_class.h + grib_nearest_factory.h + grib_templates.h + grib_yacc.h + jgribapi_GribFile.h + jgribapi_GribHandle.h + jgribapi_GribIterator.h + md5.h + md5.c +) + +# list( APPEND grib_api_extra_srcs +# grib_bits_any_endian.c +# grib_bits_any_endian_simple.c +# ) + +ecbuild_generate_yy( YYPREFIX grib_yy + YACC griby + LEX gribl + DEPENDANT action.c ) + +ecbuild_add_library( TARGET grib_api + SOURCES griby.c gribl.c ${grib_api_extra_srcs} ${grib_api_srcs} + INCLUDES ${SZIP_INCLUDE_DIRS} + LIBS ${SZIP_LIBRARY} ${CMATH_LIBRARIES} ) + + +# TODO: add support for jpg and png diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 000000000..be3f0318f --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,333 @@ +# See http://www.delorie.com/gnu/docs/automake/automake_48.html + + +AM_CFLAGS = @WARN_PEDANTIC@ + +# -DUSE_JPEG2000 +# -DYYDEBUG + + +lib_LTLIBRARIES = libgrib_api.la +include_HEADERS = grib_api.h + +libgrib_api_la_prototypes= \ + action.c \ + action_class_alias.c \ + action_class_gen.c \ + action_class_if.c \ + action_class_switch.c \ + grib_accessor_class_g1fcperiod.c \ + grib_accessor_class_g1end_of_interval_monthly.c \ + grib_accessor_class_mars_param.c \ + action_class_section.c \ + action_class_list.c \ + action_class_while.c \ + action_class_put.c \ + action_class_meta.c \ + action_class_remove.c \ + action_class_assert.c \ + action_class_template.c \ + action_class_trigger.c \ + action_class_when.c \ + action_class_concept.c \ + action_class_set.c \ + action_class_set_darray.c \ + action_class_set_iarray.c \ + action_class_noop.c \ + action_class_write.c \ + action_class_print.c \ + action_class_variable.c \ + action_class_modify.c \ + grib_accessor.c \ + grib_concept.c \ + grib_darray.c \ + grib_iarray.c \ + grib_accessor_class_array.c \ + grib_accessor_class_assert.c \ + grib_accessor_class_ascii.c \ + grib_accessor_class_bit.c \ + grib_accessor_class_bitmap.c \ + grib_accessor_class_bits.c \ + grib_accessor_class_bits_per_value.c \ + grib_accessor_class_g1bitmap.c \ + grib_accessor_class_g2bitmap.c \ + grib_accessor_class_concept.c \ + grib_accessor_class_decimal_precision.c \ + grib_accessor_class_divdouble.c \ + grib_accessor_class_budgdate.c \ + grib_accessor_class_validity_date.c \ + grib_accessor_class_validity_time.c \ + grib_accessor_class_bytes.c \ + grib_accessor_class.c \ + grib_accessor_class_change_scanning_direction.c \ + grib_accessor_class_codeflag.c \ + grib_accessor_class_codetable.c \ + grib_accessor_class_codetable_units.c \ + grib_accessor_class_codetable_title.c \ + grib_accessor_class_count_file.c \ + grib_accessor_class_count_total.c \ + grib_accessor_class_double.c \ + grib_accessor_class_element.c \ + grib_accessor_class_evaluate.c \ + grib_accessor_class_g1area.c \ + grib_accessor_class_g1date.c \ + grib_accessor_class_g1monthlydate.c \ + grib_accessor_class_library_version.c \ + grib_accessor_class_when.c \ + grib_accessor_class_g1verificationdate.c \ + grib_accessor_class_g1day_of_the_year_date.c \ + grib_accessor_class_g1_half_byte_codeflag.c \ + grib_accessor_class_g1forecastmonth.c \ + grib_accessor_class_g1step_range.c \ + grib_accessor_class_g2step_range.c \ + grib_accessor_class_data_g22order_packing.c \ + grib_accessor_class_mars_step.c \ + grib_accessor_class_g1param.c \ + grib_accessor_class_g1p1p2.c \ + grib_accessor_class_g1_increment.c \ + grib_accessor_class_latlon_increment.c \ + grib_accessor_class_g2date.c \ + grib_accessor_class_g2level.c \ + grib_accessor_class_g2step.c \ + grib_accessor_class_g2end_step.c \ + grib_accessor_class_g2latlon.c \ + grib_accessor_class_g2lon.c \ + grib_accessor_class_global_gaussian.c \ + grib_accessor_class_gen.c \ + grib_accessor_class_gts_header.c \ + grib_accessor_class_ifs_param.c \ + grib_accessor_class_julian_day.c \ + grib_accessor_class_latlonvalues.c \ + grib_accessor_class_latitudes.c \ + grib_accessor_class_longitudes.c \ + grib_accessor_class_missing.c \ + grib_accessor_class_offset_file.c \ + grib_accessor_class_scale.c \ + grib_accessor_class_from_scale_factor_scaled_value.c \ + grib_accessor_class_times.c \ + grib_accessor_class_forward.c \ + grib_accessor_class_g2bitmap_present.c \ + grib_accessor_class_ibmfloat.c \ + grib_accessor_class_ieeefloat.c \ + grib_accessor_class_constant.c \ + grib_accessor_class_iterator.c \ + grib_accessor_class_message.c \ + grib_accessor_class_nearest.c \ + grib_accessor_class_box.c \ + grib_accessor_class_ksec1expver.c \ + grib_accessor_class_laplacian.c \ + grib_accessor_class_label.c \ + grib_accessor_class_long.c \ + grib_accessor_class_lookup.c \ + grib_accessor_class_octect_number.c \ + grib_accessor_class_headers_only.c \ + grib_accessor_class_padding.c \ + grib_accessor_class_pad.c \ + grib_accessor_class_padto.c \ + grib_accessor_class_padtoeven.c \ + grib_accessor_class_padtomultiple.c \ + grib_accessor_class_section_padding.c \ + grib_accessor_class_section_pointer.c \ + grib_accessor_class_position.c \ + grib_accessor_class_signed.c \ + grib_accessor_class_signed_bits.c \ + grib_accessor_class_section.c \ + grib_accessor_class_step_in_units.c \ + grib_accessor_class_section_length.c \ + grib_accessor_class_g1_message_length.c \ + grib_accessor_class_g1_section4_length.c \ + grib_accessor_class_size.c \ + grib_accessor_class_scale_values.c \ + grib_accessor_class_offset_values.c \ + grib_accessor_class_sprintf.c \ + grib_accessor_class_round.c \ + grib_accessor_class_spectral_truncation.c \ + grib_accessor_class_time.c \ + grib_accessor_class_transient.c \ + grib_accessor_class_values.c \ + grib_accessor_class_simple_packing_error.c \ + grib_accessor_class_data_simple_packing.c \ + grib_accessor_class_data_szip_packing.c \ + grib_accessor_class_count_missing.c \ + grib_accessor_class_data_sh_packed.c \ + grib_accessor_class_data_sh_unpacked.c \ + grib_accessor_class_number_of_values_data_raw_packing.c \ + grib_accessor_class_data_g1simple_packing.c \ + grib_accessor_class_data_g1shsimple_packing.c \ + grib_accessor_class_data_shsimple_packing.c \ + grib_accessor_class_data_constant_field.c \ + grib_accessor_class_data_dummy_field.c \ + grib_2order_packer_simple.c \ + grib_accessor_class_variable.c \ + grib_accessor_class_second_order_bits_per_value.c \ + grib_accessor_class_data_g2simple_packing.c \ + grib_accessor_class_data_g2simple_packing_with_preprocessing.c \ + grib_accessor_class_data_g2shsimple_packing.c \ + grib_accessor_class_data_g2complex_packing.c \ + grib_accessor_class_data_2order_packing.c \ + grib_accessor_class_data_2order_packing_count.c \ + grib_accessor_class_data_g1second_order_row_by_row_packing.c \ + grib_accessor_class_data_g1second_order_constant_width_packing.c \ + grib_accessor_class_data_g1second_order_general_packing.c \ + grib_accessor_class_data_g1second_order_general_extended_packing.c \ + grib_accessor_class_g2grid.c \ + grib_accessor_class_data_apply_bitmap.c \ + grib_accessor_class_data_apply_boustrophedonic.c \ + grib_accessor_class_data_secondary_bitmap.c \ + grib_accessor_class_data_g1secondary_bitmap.c \ + grib_accessor_class_data_g2secondary_bitmap.c \ + grib_accessor_class_data_jpeg2000_packing.c \ + grib_accessor_class_data_png_packing.c \ + grib_accessor_class_data_raw_packing.c \ + grib_accessor_class_data_complex_packing.c \ + grib_accessor_class_data_g1complex_packing.c \ + grib_accessor_class_gds_not_present_bitmap.c \ + grib_accessor_class_data_apply_gdsnotpresent.c \ + grib_accessor_class_gds_is_present.c \ + grib_accessor_class_select_step_template.c \ + grib_accessor_class_local_definition.c \ + grib_accessor_class_g2_eps.c \ + grib_accessor_class_g2_mars_labeling.c \ + grib_accessor_class_md5.c \ + grib_jasper_encoding.c \ + grib_openjpeg_encoding.c \ + action_class_set_missing.c \ + grib_accessor_class_number_of_points.c \ + grib_accessor_class_suppressed.c \ + grib_index.c \ + grib_accessor_class_number_of_points_gaussian.c \ + grib_accessor_class_number_of_values.c \ + grib_accessor_class_number_of_coded_values.c \ + grib_accessor_class_g1number_of_coded_values_sh_complex.c \ + grib_accessor_class_g1number_of_coded_values_sh_simple.c \ + grib_accessor_class_dirty.c \ + grib_accessor_class_statistics.c \ + grib_accessor_class_statistics_spectral.c \ + grib_accessor_class_unsigned.c \ + grib_accessor_class_unsigned_bits.c \ + grib_accessor_class_spd.c \ + grib_accessor_class_sum.c \ + grib_accessor_class_vector.c \ + grib_accessor_class_long_vector.c \ + grib_gaussian_reduced.c \ + grib_accessor_class_abstract_vector.c \ + grib_accessor_class_abstract_long_vector.c \ + grib_loader_from_handle.c \ + grib_bits.c \ + grib_timer.c \ + grib_ibmfloat.c \ + grib_ieeefloat.c \ + grib_accessor_class_reference_value_error.c \ + grib_memory.c \ + grib_buffer.c \ + grib_dumper.c \ + grib_dumper_class_serialize.c \ + grib_dumper_class_debug.c \ + grib_dumper_class_default.c \ + grib_dumper_class_keys.c \ + grib_dumper_class_c_code.c \ + grib_dumper_class_wmo.c \ + grib_dumper_class.c \ + grib_context.c \ + grib_date.c \ + grib_fieldset.c \ + grib_filepool.c \ + grib_geography.c \ + grib_handle.c \ + grib_header_compute.c \ + grib_hash_keys.c \ + grib_io.c \ + grib_trie.c \ + grib_itrie.c \ + grib_rules.c \ + grib_keys_iterator.c \ + grib_parse_utils.c \ + grib_query.c \ + grib_scaling.c \ + grib_templates.c \ + grib_dependency.c \ + grib_value.c \ + grib_errors.c \ + grib_expression_class_binop.c \ + grib_expression_class_true.c \ + grib_expression_class_string_compare.c \ + grib_expression_class_unop.c \ + grib_expression_class_functor.c \ + grib_expression_class_accessor.c \ + grib_expression_class_long.c \ + grib_expression_class_double.c \ + grib_expression_class_string.c \ + grib_box.c \ + grib_box_class.c \ + grib_box_class_gen.c \ + grib_box_class_regular_gaussian.c \ + grib_box_class_reduced_gaussian.c \ + grib_nearest.c \ + grib_nearest_class.c \ + grib_nearest_class_gen.c \ + grib_nearest_class_regular.c \ + grib_nearest_class_reduced.c \ + grib_nearest_class_latlon_reduced.c \ + grib_nearest_class_sh.c \ + grib_iterator_class_polar_stereographic.c \ + grib_iterator_class_lambert_azimuthal_equal_area.c \ + grib_iterator_class_lambert_conformal.c \ + grib_iterator.c \ + grib_iterator_class.c \ + grib_iterator_class_gaussian.c \ + grib_iterator_class_gaussian_reduced.c \ + grib_iterator_class_latlon_reduced.c \ + grib_iterator_class_gen.c \ + grib_iterator_class_latlon.c \ + grib_iterator_class_regular.c \ + grib_expression.c \ + grib_util.c \ + compile.c \ + functions.c + +libgrib_api_extra_prototypes = grib_bits_any_endian.c grib_bits_any_endian_simple.c + +libgrib_api_la_SOURCES = $(libgrib_api_la_prototypes) grib_yacc.c grib_lex.c md5.c + +libgrib_api_la_LIBADD = @LIBOBJS@ +libgrib_api_la_DEPENDENCIES = grib_api.h $(libgrib_api_la_LIBADD) +libgrib_api_la_LDFLAGS = -release $(GRIB_API_MAIN_VERSION) + +# set the include path +INCLUDES= -I. + +## Make sure these will be cleaned even when they're not built by +## default. +CLEANFILES = libgrib_api.la + +noinst_HEADERS = grib_api_internal.h \ + md5.h \ + grib_emoslib.h \ + grib_api_prototypes.h \ + grib_dumper_class.h \ + errors.pl \ + grib_dumper_factory.h \ + grib_accessor_class.h \ + grib_accessor_factory.h \ + grib_expression.h \ + grib_nearest_class.h \ + grib_nearest_factory.h \ + grib_box_class.h \ + grib_box_factory.h \ + grib_iterator_class.h \ + grib_iterator_factory.h \ + grib_templates.h \ + grib_yacc.h \ + grib2c.pl \ + grib_errors_internal.txt \ + grib_errors.txt + +EXTRA_DIST= dummy.am griby.y gribl.l grib_accessor_classes_hash.c \ + grib_bits_fast_big_endian.c grib_bits_any_endian.c \ + grib_bits_fast_big_endian_vector.c grib_bits_any_endian_vector.c \ + grib_bits_fast_big_endian_simple.c grib_bits_any_endian_simple.c \ + grib_bits_fast_big_endian_omp.c grib_bits_any_endian_omp.c + +include $(DEVEL_RULES) + + diff --git a/src/TODO b/src/TODO new file mode 100644 index 000000000..26490c063 --- /dev/null +++ b/src/TODO @@ -0,0 +1,24 @@ +geography +grib1 words = grib2 words + gridType -> dataRepresentationType (grib1) + ??? (grib2) + + +find a way to have the version in grib_api.h +why if(a->offset%2) buflen++; +lat/lon is not in 0..180 + + +constness + +reparse on unsigned[size] +repasre lists + +expression: persitemy malloc +tidy errors +iterator and scanning mode +gribex and missing local definition + +SST dats +Don't repack unecessary values in packers +grid 90 diff --git a/src/action.c b/src/action.c new file mode 100644 index 000000000..bdba9e528 --- /dev/null +++ b/src/action.c @@ -0,0 +1,190 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ + +#include "grib_api_internal.h" + +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; + +static void init_mutex() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex1,&attr); + pthread_mutexattr_destroy(&attr); + +} +#endif + + +static void init(grib_action_class *c) +{ + if(c && !c->inited) + { + init(c->super ? *(c->super) : NULL); + c->init_class(c); + c->inited = 1; + } +} + +void grib_dump(grib_action* a, FILE* f, int l) +{ + grib_action_class *c = a->cclass; + init(c); + + while(c) + { + if(c->dump) + { + c->dump(a, f, l); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + +void grib_xref(grib_action* a, FILE* f,const char* path) +{ + grib_action_class *c = a->cclass; + init(c); + + while(c) + { + if(c->xref) + { + c->xref(a, f,path); + return; + } + c = c->super ? *(c->super) : NULL; + } + printf("xref not implemented for %s\n",a->cclass->name); + Assert(0); +} + + +void grib_free_action(grib_context* context,grib_action* a) +{ + grib_action_class *c = a->cclass; + init(c); + while(c) + { + if(c->destroy) + c->destroy(context, a); + c = c->super ? *(c->super) : NULL; + } + grib_context_free_persistent(context, a); +} + +int grib_create_accessor(grib_section* p, grib_action* a, grib_loader* h) +{ + grib_action_class *c = a->cclass; + init(c); + while(c) + { + if(c->create_accessor) { + int ret; + GRIB_PTHREAD_ONCE(&once,&init_mutex); + GRIB_MUTEX_LOCK(&mutex1); + ret=c->create_accessor(p, a, h); + GRIB_MUTEX_UNLOCK(&mutex1); + return ret; + } + c = c->super ? *(c->super) : NULL; + } + fprintf(stderr,"Cannot create accessor %s %s\n",a->name,a->cclass->name); + Assert(0); + return 0; +} + +int grib_action_notify_change( grib_action* a, grib_accessor *observer, grib_accessor *observed) +{ + grib_action_class *c = a->cclass; + init(c); + while(c) + { + if(c->notify_change) + return c->notify_change(a,observer,observed); + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +grib_action* grib_action_reparse( grib_action* a, grib_accessor* acc,int* doit) +{ + grib_action_class *c = a->cclass; + init(c); + while(c) + { + if(c->reparse) + return c->reparse(a,acc,doit); + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_action_execute( grib_action* a, grib_handle* h) +{ + grib_action_class *c = a->cclass; + init(c); + while(c) + { + if(c->execute) + return c->execute(a,h); + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +void grib_dump_action_branch(FILE* out,grib_action* a, int decay) +{ + while(a) + { + grib_dump(a,out,decay); + a=a->next; + } +} + +void grib_dump_action_tree( grib_context* ctx,FILE* out) +{ + grib_dump_action_branch( out, ctx->grib_reader->first->root ,0); +} + +void grib_xref_action_branch(FILE* out,grib_action* a,const char* path) +{ + while(a) + { + grib_xref(a,out,path); + a=a->next; + } +} + +void grib_compile(grib_action* a, grib_compiler* compiler) +{ + grib_action_class *c = a->cclass; + init(c); + if(c->compile) { + c->compile(a,compiler); + } + else + { + fprintf(stderr, "NO COMPILE METHOD '%s'\n", c->name); + Assert(0); + } +} diff --git a/src/action_class_alias.c b/src/action_class_alias.c new file mode 100644 index 000000000..7676b5101 --- /dev/null +++ b/src/action_class_alias.c @@ -0,0 +1,304 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = create_accessor + IMPLEMENTS = dump;xref + IMPLEMENTS = destroy + IMPLEMENTS = compile + MEMBERS = char* target + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void xref (grib_action* d, FILE* f,const char* path); +static void compile (grib_action* a, grib_compiler* compiler); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); + + +typedef struct grib_action_alias { + grib_action act; +/* Members defined in alias */ + char* target; +} grib_action_alias; + + +static grib_action_class _grib_action_class_alias = { + 0, /* super */ + "action_class_alias", /* name */ + sizeof(grib_action_alias), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + &xref, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + 0, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_alias = &_grib_action_class_alias; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + + +grib_action* grib_action_create_alias(grib_context* context, const char* name, const char* arg1,const char* name_space,int flags) +{ + grib_action_alias* a ; + grib_action_class* c = grib_action_class_alias; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + + act->context = context; + + act->op = NULL; + act->name = grib_context_strdup_persistent(context, name); + if(name_space) + act->name_space = grib_context_strdup_persistent(context, name_space); + + act->cclass = c; + act->flags = flags; + a = (grib_action_alias*)act; + a->target = arg1 ? grib_context_strdup_persistent(context, arg1) : NULL; + + return act; +} + +static void compile(grib_action* act, grib_compiler *compiler) +{ + grib_action_alias* a = (grib_action_alias*)act; + fprintf(compiler->out,"%s = grib_action_create_alias(ctx,",compiler->var); + fprintf(compiler->out,"\"%s\",",act->name); + if(a->target) { + fprintf(compiler->out,"\"%s\",",a->target); + } + else + { + fprintf(compiler->out,"NULL,"); + } + if(act->name_space) { + fprintf(compiler->out,"\"%s\",",act->name_space); + } + else + { + fprintf(compiler->out,"NULL,"); + } + grib_compile_flags(compiler, act->flags); + fprintf(compiler->out,");"); + fprintf(compiler->out,"\n"); +} + +static int same(const char* a,const char* b) +{ + if(a == b) return 1; + if(a && b) return (strcmp(a,b) == 0); + return 0; +} + +static int create_accessor( grib_section* p, grib_action* act,grib_loader *h) +{ + int i,j,id; + grib_action_alias* self = (grib_action_alias*)act; + grib_accessor *x=NULL ; + grib_accessor *y=NULL ; + + /*if alias and target have the same name add only the namespace */ + if (self->target && !strcmp(act->name,self->target) && act->name_space!=NULL) { + x = grib_find_accessor_fast(p->h,self->target); + if(x == NULL) + { + grib_context_log(p->h->context,GRIB_LOG_WARNING,"alias %s: cannot find %s", + act->name,self->target); + return GRIB_SUCCESS; + } + + if (x->name_space==NULL) + x->name_space=act->name_space; + + i = 0; + while(i < MAX_ACCESSOR_NAMES) { + if(x->all_names[i] != NULL && !strcmp(x->all_names[i],act->name) ) { + if (x->all_name_spaces[i]==NULL) { + x->all_name_spaces[i] = act->name_space; + return GRIB_SUCCESS; + } else if (!strcmp(x->all_name_spaces[i],act->name_space) ) { + return GRIB_SUCCESS; + } + } + i++; + } + i=0; + while(i < MAX_ACCESSOR_NAMES) { + if (x->all_names[i]==NULL) { + x->all_names[i]=act->name; + x->all_name_spaces[i] = act->name_space; + return GRIB_SUCCESS; + } + i++; + } + grib_context_log(p->h->context,GRIB_LOG_FATAL, + "unable to alias %s : increase MAX_ACCESSOR_NAMES",act->name); + + return GRIB_INTERNAL_ERROR; + } + + /* if(self->target == NULL || (act->flags & GRIB_ACCESSOR_FLAG_OVERRIDE)) */ + y = grib_find_accessor_fast(p->h,act->name); + + /* delete old alias if already defined */ + if ( y != NULL ) + { + i=0; + while ( i < MAX_ACCESSOR_NAMES && y->all_names[i] ) + { + if ( same ( y->all_names[i],act->name ) && same ( y->all_name_spaces[i],act->name_space ) ) + { + + grib_context_log ( p->h->context,GRIB_LOG_DEBUG,"alias %s.%s already defined for %s. Deleting old alias", + act->name_space,act->name,y->name ); + /* printf("[%s %s]\n",y->all_names[i], y->all_name_spaces[i]); */ + + while ( i < MAX_ACCESSOR_NAMES-1 ) + { + y->all_names[i] = y->all_names[i+1]; + y->all_name_spaces[i] = y->all_name_spaces[i+1]; + i++; + } + + y->all_names[MAX_ACCESSOR_NAMES-1] = NULL; + y->all_name_spaces[MAX_ACCESSOR_NAMES-1] = NULL; + + break; + } + i++; + } + + if ( self->target == NULL ) + return GRIB_SUCCESS; + } + + if (!self->target) return GRIB_SUCCESS; + + x = grib_find_accessor_fast(p->h,self->target); + if(x == NULL) + { + grib_context_log(p->h->context,GRIB_LOG_WARNING,"alias %s: cannot find %s", + act->name,self->target); + return GRIB_SUCCESS; + } + + if (x->parent->h->use_trie) { + id=grib_hash_keys_get_id(x->parent->h->context->keys,act->name); + + if (x->parent->h->accessors[id] != x) { + /*x->same=x->parent->h->accessors[id];*/ + x->parent->h->accessors[id]=x; + } + } + + i = 0; + while(i < MAX_ACCESSOR_NAMES) { + if(x->all_names[i] == NULL) + { + /* Only add entries if not already there */ + int found = 0; + for(j=0; jall_names[j], act->name); + int namespaceSame = same(x->all_name_spaces[j], act->name_space); + if (nameSame && namespaceSame) { + found = 1; + } + } + if (!found) { /* Not there. So add them */ + x->all_names[i] = act->name; + x->all_name_spaces[i] = act->name_space; + } + return GRIB_SUCCESS; + } + i++; + } + + for(i = 0 ; i < MAX_ACCESSOR_NAMES; i++) + grib_context_log(p->h->context,GRIB_LOG_ERROR,"alias %s= ( %s already bound to %s )", + act->name,self->target,x->all_names[i]); + + return GRIB_SUCCESS; +} + +static void dump( grib_action* act, FILE* f, int lvl) +{ + grib_action_alias* a = (grib_action_alias*)act; + int i =0; + for (i=0;icontext,f," "); + if(a->target) + grib_context_print(act->context,f," alias %s %s \n", act->name, a->target ); + else + grib_context_print(act->context,f," unalias %s \n", act->name); +} + +static void xref( grib_action* act, FILE* f,const char* path) +{ + grib_action_alias* a = (grib_action_alias*)act; + if(a->target) { + fprintf(f,"bless({name=>'%s', target=>'%s', path=>'%s'},'xref::alias'),\n", act->name, a->target,path ); + if(act->name_space) + fprintf(f,"bless({name=>'%s.%s', target=>'%s', path=>'%s'},'xref::alias'),\n", act->name_space,act->name, a->target,path ); + } + else + { + fprintf(f,"bless({name=>'%s', path=>'%s'},'xref::unalias'),\n", act->name, path ); + if(act->name_space) + fprintf(f,"bless({name=>'%s.%s', path=>'%s'},'xref::unalias'),\n", act->name_space,act->name, path ); + } +} + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_alias* a = (grib_action_alias*)act; + + if(a->target) + grib_context_free_persistent(context, a->target); + + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + grib_context_free_persistent(context, act->name_space); +} diff --git a/src/action_class_assert.c b/src/action_class_assert.c new file mode 100644 index 000000000..ec7df4cc3 --- /dev/null +++ b/src/action_class_assert.c @@ -0,0 +1,160 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile * + ***************************************************************************/ +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = create_accessor + IMPLEMENTS = dump;notify_change + IMPLEMENTS = destroy; execute + MEMBERS = grib_expression *expression + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); +static int notify_change(grib_action* a, grib_accessor* observer,grib_accessor* observed); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_assert { + grib_action act; +/* Members defined in assert */ + grib_expression *expression; +} grib_action_assert; + + +static grib_action_class _grib_action_class_assert = { + 0, /* super */ + "action_class_assert", /* name */ + sizeof(grib_action_assert), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + &create_accessor, /* create_accessor*/ + + ¬ify_change, /* notify_change */ + 0, /* reparse */ + &execute, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_assert = &_grib_action_class_assert; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_assert( grib_context* context, grib_expression* expression) +{ + grib_action_assert* a = NULL; + grib_action_class* c = grib_action_class_assert; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->next = NULL; + act->name = grib_context_strdup_persistent(context, "assertion"); + act->op = grib_context_strdup_persistent(context, "evaluate"); + act->cclass = c; + act->context = context; + a = (grib_action_assert*)act; + a->expression = expression; + return act; +} + +static int create_accessor(grib_section* p, grib_action* act,grib_loader *h) +{ + grib_action_assert* self = (grib_action_assert*)act; + grib_accessor* as = grib_accessor_factory(p, act,0,NULL); + if(!as)return GRIB_INTERNAL_ERROR; + grib_dependency_observe_expression(as,self->expression); + + grib_push_accessor(as,p->block); + + + return GRIB_SUCCESS; +} + +static void dump( grib_action* act, FILE* f, int lvl) +{ + int i =0; + grib_action_assert* self=(grib_action_assert*)act; + for (i=0;icontext,f," "); + grib_expression_print(act->context,self->expression,0); + printf("\n"); +} + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_assert* a = ( grib_action_assert*)act; + grib_expression_free(context,a->expression); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); +} + +static int execute(grib_action* a,grib_handle* h) { + int ret=0; + double res=0; + grib_action_assert* self= (grib_action_assert*)a; + + if ((ret=grib_expression_evaluate_double(h,self->expression,&res)) != GRIB_SUCCESS) + return ret; + + if (res != 0) + return GRIB_SUCCESS; + else { + grib_context_log(h->context,GRIB_LOG_ERROR,"Assertion failure: "); + grib_expression_print(h->context,self->expression,h); + printf("\n"); + return GRIB_ASSERTION_FAILURE; + } +} + +static int notify_change(grib_action* a, grib_accessor* observer,grib_accessor* observed) +{ + grib_action_assert* self = (grib_action_assert*) a; + + int ret = GRIB_SUCCESS; + long lres; + + if ((ret = grib_expression_evaluate_long(observed->parent->h, self->expression,&lres)) + != GRIB_SUCCESS) return ret; + + + if (lres != 0) + return GRIB_SUCCESS; + else + return GRIB_ASSERTION_FAILURE; +} diff --git a/src/action_class_concept.c b/src/action_class_concept.c new file mode 100644 index 000000000..d38bc8cb4 --- /dev/null +++ b/src/action_class_concept.c @@ -0,0 +1,398 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + SUPER = action_class_gen + IMPLEMENTS = dump + IMPLEMENTS = destroy + MEMBERS = grib_concept_value* concept + MEMBERS = char* basename + MEMBERS = char* masterDir + MEMBERS = char* localDir + MEMBERS = int nofail + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void destroy (grib_context*,grib_action*); + + +typedef struct grib_action_concept { + grib_action act; +/* Members defined in gen */ + long len; + grib_arguments* params; +/* Members defined in concept */ + grib_concept_value* concept; + char* basename; + char* masterDir; + char* localDir; + int nofail; +} grib_action_concept; + +extern grib_action_class* grib_action_class_gen; + +static grib_action_class _grib_action_class_concept = { + &grib_action_class_gen, /* super */ + "action_class_concept", /* name */ + sizeof(grib_action_concept), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + 0, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_concept = &_grib_action_class_concept; + +static void init_class(grib_action_class* c) +{ + c->xref = (*(c->super))->xref; + c->create_accessor = (*(c->super))->create_accessor; + c->notify_change = (*(c->super))->notify_change; + c->reparse = (*(c->super))->reparse; + c->execute = (*(c->super))->execute; + c->compile = (*(c->super))->compile; +} +/* END_CLASS_IMP */ + +static grib_concept_value* get_concept(grib_handle* h,grib_action_concept* self); + +grib_action* grib_action_create_concept( grib_context* context, + const char* name, + grib_concept_value* concept, + const char* basename,const char* name_space,const char* defaultkey, + const char* masterDir,const char* localDir,const char* ecmfDir,int flags,int nofail ) +{ + grib_action_concept* a=NULL ; + grib_action_class* c = grib_action_class_concept; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"concept"); + + act->cclass = c; + a=(grib_action_concept*)act ; + act->context = context; + act->flags = flags; + + if (name_space) + act->name_space = grib_context_strdup_persistent(context,name_space); + + if (basename) + a->basename= grib_context_strdup_persistent(context,basename); + else a->basename=NULL; + + if (masterDir) + a->masterDir= grib_context_strdup_persistent(context,masterDir); + else a->masterDir=NULL; + + if (localDir) + a->localDir= grib_context_strdup_persistent(context,localDir); + else a->localDir=NULL; + + if (defaultkey) + act->defaultkey = grib_context_strdup_persistent(context,defaultkey); + + a->concept = concept; + if (concept) { + grib_concept_value* c=concept; + grib_trie* index=grib_trie_new(context); + while (c) { + c->index=index; + grib_trie_insert_no_replace(index,c->name,c); + c=c->next; + } + + } + act->name = grib_context_strdup_persistent(context,name); + + a->nofail=nofail; + + return act; +} + +static void dump(grib_action* act, FILE* f, int lvl) +{ + int i = 0; + + for (i=0;icontext,f," "); + + printf("concept(%s) { ",act->name); + printf("\n"); + + for (i=0;icontext,f," "); + printf("}\n"); +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_concept* self = (grib_action_concept*) act; + + grib_concept_value * v = self->concept; + if (v) grib_trie_delete(v->index); + while(v) + { + grib_concept_value* n = v->next; + grib_concept_value_delete(context,v); + v = n; + } + + grib_context_free_persistent(context, self->masterDir); + grib_context_free_persistent(context, self->localDir); + grib_context_free_persistent(context, self->basename); + +} + +static grib_concept_value* get_concept(grib_handle* h,grib_action_concept* self) +{ + char buf[1024]={0,}; + char master[1024]={0,}; + char local[1024]={0,}; + char masterDir[1024]={0,}; + size_t lenMasterDir=1024; + char localDir[1024]={0,}; + size_t lenLocalDir=1024; + char key[1024]={0,}; + char* full=0; + int id; + + grib_context* context=((grib_action*)self)->context; + grib_concept_value* c=NULL; + + if (self->concept != NULL) + return self->concept; + + Assert(self->masterDir); + grib_get_string(h,self->masterDir,masterDir,&lenMasterDir); + + sprintf(buf,"%s/%s",masterDir,self->basename); + + grib_recompose_name(h,NULL, buf, master,1); + + if (self->localDir) { + grib_get_string(h,self->localDir,localDir,&lenLocalDir); + sprintf(buf,"%s/%s",localDir,self->basename); + grib_recompose_name(h,NULL, buf, local,1); + } + + sprintf(key,"%s%s",master,local); + + id=grib_itrie_get_id(h->context->concepts_index,key); + if ((c=h->context->concepts[id])!=NULL) return c; + + if (*local && (full=grib_context_full_path(context,local))!=NULL) { + c=grib_parse_concept_file(context,full); + grib_context_log(h->context,GRIB_LOG_DEBUG, + "Loading concept %s from %s",((grib_action*)self)->name,full); + } + + if ((full=grib_context_full_path(context,master))==NULL) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "Unable to load %s from %s ",((grib_action*)self)->name,full); + return NULL; + } + + if(c) { + grib_concept_value* last=c; + while (last->next) last=last->next; + last->next=grib_parse_concept_file(context,full); + } else + c=grib_parse_concept_file(context,full); + + grib_context_log(h->context,GRIB_LOG_DEBUG, + "Loading concept %s from %s",((grib_action*)self)->name,full); + + h->context->concepts[id]=c; + if (c) { + grib_trie* index=grib_trie_new(context); + while (c) { + c->index=index; + grib_trie_insert_no_replace(index,c->name,c); + c=c->next; + } + + } + + return h->context->concepts[id]; +} + +const char* grib_concept_evaluate(grib_handle* h,grib_action* act) +{ + grib_action_concept* self = (grib_action_concept*) act; + grib_concept_value* c = get_concept(h,self); + int match = 0; + const char* best = 0; + const char* prev = 0; + + while(c) + { + grib_concept_condition* e = c->conditions; + int cnt = 0; + while(e) + { + long lval; + double dval; + long lres=0; + double dres=0.0; + const char *cval; + char buf[80]; + char tmp[80]; + size_t len = sizeof(buf); + size_t size=sizeof(tmp); + int err=0; + int ok = 0; + int type = grib_expression_native_type(h,e->expression); + + switch(type) + { + case GRIB_TYPE_LONG: + grib_expression_evaluate_long(h,e->expression,&lres); + ok = (grib_get_long(h,e->name,&lval) == GRIB_SUCCESS) && + (lval == lres); + break; + + case GRIB_TYPE_DOUBLE: + grib_expression_evaluate_double(h,e->expression,&dres); + ok = (grib_get_double(h,e->name,&dval) == GRIB_SUCCESS) && + (dval == dres); + break; + + case GRIB_TYPE_STRING: + ok = (grib_get_string(h,e->name,buf,&len) == GRIB_SUCCESS) && + ((cval = grib_expression_evaluate_string(h,e->expression,tmp,&size,&err)) != NULL) && + (err==0) && (strcmp(buf,cval) == 0); + break; + + default: + /* TODO: */ + break; + } + + if(!ok) + break; + + e = e->next; + cnt++; + } + + if(e == NULL) + { + if(cnt >= match) { + prev = (cnt > match) ? NULL : best; + match = cnt; + best = c->name; + } + + } + + c = c->next; + } + + return best; +} + +int grib_concept_apply(grib_handle* h,grib_action* act,const char* name) +{ + long lres=0; + double dres=0.0; + int err=0; + size_t count = 0; + size_t size; + grib_concept_condition* e=NULL; + grib_values values[1024]; + char tmp[80][1024]; + grib_action_concept* self = (grib_action_concept*) act; + grib_concept_value* concepts = get_concept(h,self); + grib_concept_value* c=NULL; + + Assert(concepts!=NULL); + + c=grib_trie_get(concepts->index,name); + + if (!c) c=grib_trie_get(concepts->index,"default"); + + if (!c){ + err= self->nofail ? GRIB_SUCCESS : GRIB_CONCEPT_NO_MATCH; + if (err) grib_context_log(h->context,GRIB_LOG_ERROR, + "concept: no match for %s=%s", act->name,name); + return err; + } + + e = c->conditions; + while(e) + { + Assert(count<1024); + values[count].name = e->name; + + values[count].type = grib_expression_native_type(h,e->expression); + switch(values[count].type) + { + case GRIB_TYPE_LONG: + grib_expression_evaluate_long(h,e->expression,&lres); + values[count].long_value = lres; + break; + case GRIB_TYPE_DOUBLE: + grib_expression_evaluate_double(h,e->expression,&dres); + values[count].double_value = dres; + break; + case GRIB_TYPE_STRING: + size = sizeof(tmp[count]); + values[count].string_value = + grib_expression_evaluate_string(h,e->expression,tmp[count],&size,&err); + break; + + default: + return GRIB_NOT_IMPLEMENTED; + break; + } + + count++; + e = e->next; + } + + return grib_set_values(h,values,count); + +} + + + diff --git a/src/action_class_gen.c b/src/action_class_gen.c new file mode 100644 index 000000000..e842666f9 --- /dev/null +++ b/src/action_class_gen.c @@ -0,0 +1,239 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = create_accessor + IMPLEMENTS = dump;xref + IMPLEMENTS = destroy + IMPLEMENTS = notify_change + IMPLEMENTS = compile + MEMBERS = long len + MEMBERS = grib_arguments* params + END_CLASS_DEF + +*/ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void xref (grib_action* d, FILE* f,const char* path); +static void compile (grib_action* a, grib_compiler* compiler); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); +static int notify_change(grib_action* a, grib_accessor* observer,grib_accessor* observed); + + +typedef struct grib_action_gen { + grib_action act; +/* Members defined in gen */ + long len; + grib_arguments* params; +} grib_action_gen; + + +static grib_action_class _grib_action_class_gen = { + 0, /* super */ + "action_class_gen", /* name */ + sizeof(grib_action_gen), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + &xref, /* xref */ + + &create_accessor, /* create_accessor*/ + + ¬ify_change, /* notify_change */ + 0, /* reparse */ + 0, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_gen = &_grib_action_class_gen; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + + +grib_action* grib_action_create_gen( grib_context* context, const char* name, const char* op, const long len, grib_arguments* params, grib_arguments* default_value,int flags,const char* name_space,const char* set) +{ + grib_action_gen* a = NULL; + grib_action_class* c = grib_action_class_gen; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->next = NULL; + act->name = grib_context_strdup_persistent(context, name); + act->op = grib_context_strdup_persistent(context, op); + if(name_space) + act->name_space = grib_context_strdup_persistent(context, name_space); + act->cclass = c; + act->context = context; + act->flags = flags; + a = (grib_action_gen*)act; + + a->len = len; + + a->params = params; + if (set) + act->set = grib_context_strdup_persistent(context, set); + act->default_value = default_value; + + + return act; +} + +static void dump( grib_action* act, FILE* f, int lvl) +{ + grib_action_gen* a = ( grib_action_gen*)act; + int i =0; + for (i=0;icontext,f," "); + grib_context_print(act->context,f,"%s[%d] %s \n", act->op, a->len , act->name); +} + +#define F(x) if(flg&x) { fprintf(f,"%s=>1,",#x); flg &= !x; } +static int count=0; +static void xref( grib_action* act, FILE* f,const char *path) +{ + grib_action_gen* a = ( grib_action_gen*)act; + unsigned long flg = act->flags; + int position= a->len > 0 ? count++ : -1; + + fprintf(f,"bless({path=>'%s',size => %ld, name=> '%s', position=> %d, ",path, (long)a->len , act->name,position); + + + fprintf(f," params=> ["); + grib_arguments_print(act->context,a->params,NULL); + fprintf(f,"], flags=> {"); + + + F(GRIB_ACCESSOR_FLAG_READ_ONLY); + F(GRIB_ACCESSOR_FLAG_DUMP); + F(GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC); + F(GRIB_ACCESSOR_FLAG_CAN_BE_MISSING); + F(GRIB_ACCESSOR_FLAG_HIDDEN); + F(GRIB_ACCESSOR_FLAG_CONSTRAINT); + F(GRIB_ACCESSOR_FLAG_OVERRIDE); + F(GRIB_ACCESSOR_FLAG_NO_COPY); + F(GRIB_ACCESSOR_FLAG_COPY_OK); + F(GRIB_ACCESSOR_FLAG_FUNCTION); + F(GRIB_ACCESSOR_FLAG_DATA); + F(GRIB_ACCESSOR_FLAG_NO_FAIL); + F(GRIB_ACCESSOR_FLAG_TRANSIENT); + F(GRIB_ACCESSOR_FLAG_STRING_TYPE); + F(GRIB_ACCESSOR_FLAG_LONG_TYPE); + + + /* make sure all flags are processed */ + if(flg) { printf("FLG = %ld\n",(long)flg); } + Assert(flg == 0); + + fprintf(f,"}, defaults=> ["); + grib_arguments_print(act->context,act->default_value,NULL); + + + fprintf(f,"]}, 'xref::%s'),\n",act->op); +} + +static int create_accessor( grib_section* p, grib_action* act, grib_loader *loader) +{ + grib_action_gen* a = ( grib_action_gen*)act; + grib_accessor* ga = NULL; + + ga = grib_accessor_factory( p, act,a->len,a->params); + if(!ga) return GRIB_INTERNAL_ERROR; + + grib_push_accessor(ga,p->block); + + if(ga->flags & GRIB_ACCESSOR_FLAG_CONSTRAINT) + grib_dependency_observe_arguments(ga,act->default_value); + + if(loader == NULL) + return GRIB_SUCCESS; + else + return loader->init_accessor(loader,ga,act->default_value); + +} + +static int notify_change(grib_action* act, grib_accessor * notified, grib_accessor* changed) +{ + if(act->default_value) + return grib_pack_expression(notified,grib_arguments_get_expression(notified->parent->h,act->default_value,0)); + return GRIB_SUCCESS; +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_gen* a = ( grib_action_gen*)act; + + if(a->params != act->default_value) + grib_arguments_free(context, a->params); + grib_arguments_free(context, act->default_value); + + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + grib_context_free_persistent(context, act->name_space); + if (act->set) + grib_context_free_persistent(context, act->set); + +} + +static void compile(grib_action* act, grib_compiler* compiler) +{ + grib_action_gen* a = (grib_action_gen*)act; + fprintf(compiler->out,"%s = grib_action_create_gen(ctx,",compiler->var); + fprintf(compiler->out,"\"%s\",",act->name); + fprintf(compiler->out,"\"%s\",",act->op); + fprintf(compiler->out,"%ld,",a->len); + grib_compile_arguments(a->params, compiler); + fprintf(compiler->out,","); + grib_compile_arguments(act->default_value, compiler); + fprintf(compiler->out,","); + grib_compile_flags(compiler,act->flags); + fprintf(compiler->out,","); + if(act->name_space) { + fprintf(compiler->out,"\"%s\",",act->name_space); + } + else + { + fprintf(compiler->out,"NULL,"); + } + if(act->set) { + fprintf(compiler->out,"\"%s\");",act->set); + } + else + { + fprintf(compiler->out,"NULL);"); + } + fprintf(compiler->out,"\n"); +} diff --git a/src/action_class_if.c b/src/action_class_if.c new file mode 100644 index 000000000..c3b0c6a2e --- /dev/null +++ b/src/action_class_if.c @@ -0,0 +1,301 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + SUPER = action_class_section + IMPLEMENTS = create_accessor + IMPLEMENTS = dump + IMPLEMENTS = destroy + IMPLEMENTS = xref + IMPLEMENTS = compile + IMPLEMENTS = reparse;execute + MEMBERS = grib_expression *expression + MEMBERS = grib_action *block_true + MEMBERS = grib_action *block_false + MEMBERS = int transient + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void xref (grib_action* d, FILE* f,const char* path); +static void compile (grib_action* a, grib_compiler* compiler); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); +static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_if { + grib_action act; +/* Members defined in section */ +/* Members defined in if */ + grib_expression *expression; + grib_action *block_true; + grib_action *block_false; + int transient; +} grib_action_if; + +extern grib_action_class* grib_action_class_section; + +static grib_action_class _grib_action_class_if = { + &grib_action_class_section, /* super */ + "action_class_if", /* name */ + sizeof(grib_action_if), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + &xref, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + &reparse, /* reparse */ + &execute, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_if = &_grib_action_class_if; + +static void init_class(grib_action_class* c) +{ + c->notify_change = (*(c->super))->notify_change; +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_if( grib_context* context, + grib_expression* expression, + grib_action* block_true,grib_action* block_false,int transient) +{ char name[1024]; + grib_action_if* a ; + grib_action_class* c = grib_action_class_if; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"section"); + + act->cclass = c; + a = (grib_action_if*)act; + act->context = context; + + a->expression = expression; + a->block_true = block_true; + a->block_false = block_false; + a->transient = transient; + + if (transient) + sprintf(name,"__if%p",(void*)a); + else + sprintf(name,"_if%p",(void*)a); + + act->name = grib_context_strdup_persistent(context,name); + + return act; +} + +static void compile(grib_action* act, grib_compiler *compiler) +{ + grib_action_if* a = (grib_action_if*)act; + char t[80]; + char f[80]; + + if(a->block_true) + grib_compile_action_branch(a->block_true, compiler,t); + else + strcpy(t,"NULL"); + + if(a->block_false) + grib_compile_action_branch(a->block_false, compiler,f); + else + strcpy(f,"NULL"); + + fprintf(compiler->out,"%s = grib_action_create_if(ctx,",compiler->var); + grib_compile_expression(a->expression, compiler); + fprintf(compiler->out,",%s,%s,%d);\n", t,f,a->transient); +} + +static int create_accessor( grib_section* p, grib_action* act, grib_loader *h) +{ + grib_action_if* a = (grib_action_if*)act; + grib_action* next = NULL; + int ret = 0; + long lres=0; + + grib_accessor* as = NULL; + grib_section* gs = NULL; + + as = grib_accessor_factory(p, act,0,NULL); + if(!as)return GRIB_INTERNAL_ERROR; + gs = as->sub_section; + grib_push_accessor(as,p->block); + + if ((ret=grib_expression_evaluate_long(p->h,a->expression,&lres)) != GRIB_SUCCESS) + return ret; + + if(lres) + next = a->block_true; + else + next = a->block_false; + +#if 0 +if(p->h->context->debug > 1) +{ + printf("EVALUATE create_accessor_handle "); +grib_expression_print(p->h->context,a->expression,p->h); +printf(" [%d]\n", next == a->block_true); + + grib_dump_action_branch(stdout,next,5); +} +#endif + + gs->branch = next; + grib_dependency_observe_expression(as,a->expression); + + while(next){ + + ret = grib_create_accessor(gs, next, h); + if(ret != GRIB_SUCCESS) return ret; + next= next->next; + } + + return GRIB_SUCCESS; +} + +static int execute(grib_action* act, grib_handle *h) +{ + grib_action_if* a = (grib_action_if*)act; + grib_action* next = NULL; + int ret = 0; + long lres=0; + + if ((ret=grib_expression_evaluate_long(h,a->expression,&lres)) != GRIB_SUCCESS) { + if (ret == GRIB_NOT_FOUND) lres=0; + else + return ret; + } + + if(lres) + next = a->block_true; + else + next = a->block_false; + + while(next){ + + ret = grib_action_execute(next, h); + if(ret != GRIB_SUCCESS) return ret; + next= next->next; + } + + return GRIB_SUCCESS; +} + +static void dump(grib_action* act, FILE* f, int lvl) +{ + grib_action_if* a = (grib_action_if*)act; + int i = 0; + + for (i=0;icontext,f," "); + + printf("if(%s) { ",act->name); grib_expression_print(act->context,a->expression,0); + printf("\n"); + + if(a->block_true){ + /* grib_context_print(act->context,f,"IF \t TODO \n"); TODO */ + grib_dump_action_branch(f,a->block_true,lvl+1); + } + if(a->block_false){ + printf("}\n"); + for (i=0;icontext,f," "); + printf("else(%s) { ",act->name); grib_expression_print(act->context,a->expression,0); + /* grib_context_print(act->context,f,"ELSE \n" );*/ + grib_dump_action_branch(f,a->block_false,lvl+1); + } + for (i=0;icontext,f," "); + printf("}\n"); +} + + +static grib_action* reparse(grib_action* a,grib_accessor* acc,int* doit) +{ + int ret=0; + long lres=0; + grib_action_if* self = (grib_action_if*)a; + + /* printf("reparse %s %s\n",a->name,acc->name); */ + + if((ret=grib_expression_evaluate_long(acc->parent->h,self->expression,&lres)) != GRIB_SUCCESS) + grib_context_log(acc->parent->h->context, + GRIB_LOG_ERROR,"if reparse grib_expression_evaluate_long %s", + grib_get_error_message(ret)); + + if(lres) + return self->block_true; + else + return self->block_false; + +} + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_if* a = (grib_action_if*) act; + grib_action *t = a->block_true; + grib_action *f = a->block_false; + + while(t) + { + grib_action *nt = t->next; + grib_free_action(context,t); + t = nt; + } + + while(f) + { + grib_action *nf = f->next; + grib_free_action(context,f); + f = nf; + } + + + grib_expression_free(context,a->expression); + + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); +} + +static void xref(grib_action* d, FILE* f,const char* path) +{ +} + + diff --git a/src/action_class_list.c b/src/action_class_list.c new file mode 100644 index 000000000..6d5325db9 --- /dev/null +++ b/src/action_class_list.c @@ -0,0 +1,214 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + SUPER = action_class_section + IMPLEMENTS = create_accessor + IMPLEMENTS = dump;compile + IMPLEMENTS = destroy + IMPLEMENTS = reparse + MEMBERS = grib_expression *expression + MEMBERS = grib_action *block_list + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void compile (grib_action* a, grib_compiler* compiler); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); +static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); + + +typedef struct grib_action_list { + grib_action act; +/* Members defined in section */ +/* Members defined in list */ + grib_expression *expression; + grib_action *block_list; +} grib_action_list; + +extern grib_action_class* grib_action_class_section; + +static grib_action_class _grib_action_class_list = { + &grib_action_class_section, /* super */ + "action_class_list", /* name */ + sizeof(grib_action_list), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + &reparse, /* reparse */ + 0, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_list = &_grib_action_class_list; + +static void init_class(grib_action_class* c) +{ + c->xref = (*(c->super))->xref; + c->notify_change = (*(c->super))->notify_change; + c->execute = (*(c->super))->execute; +} +/* END_CLASS_IMP */ + +static void dump( grib_action* act, FILE* f, int lvl) +{ + grib_action_list* a = ( grib_action_list*)act; + int i = 0; + for (i=0;icontext,f," "); + grib_context_print(act->context,f,"Loop %s\n", act->name ); + grib_dump_action_branch(f,a->block_list,lvl+1); +} + + +static int create_accessor(grib_section* p, grib_action* act,grib_loader* h) +{ + grib_action_list* a = ( grib_action_list*)act; + + grib_accessor* ga = NULL; + grib_section* gs = NULL; + grib_action* la = NULL; + grib_action* next = NULL; + int ret = 0; + long val = 0; + + if ((ret=grib_expression_evaluate_long(p->h,a->expression,&val)) != GRIB_SUCCESS){ + grib_context_log(p->h->context, GRIB_LOG_DEBUG, " List %s creating %d values unable to evaluate long \n", act->name, val ); + return ret; + } + + grib_context_log(p->h->context, GRIB_LOG_DEBUG, " List %s creating %d values \n", act->name, val ); + + ga = grib_accessor_factory(p, act,0,NULL); + if(!ga) return GRIB_BUFFER_TOO_SMALL; + gs = ga->sub_section; + ga->loop = val; + + + grib_push_accessor(ga,p->block); + + la = a->block_list; + + gs->branch = la; + grib_dependency_observe_expression(ga,a->expression); + + while(val--){ + next = la; + while(next){ + ret = grib_create_accessor(gs, next,h); + if(ret != GRIB_SUCCESS) return ret; + next= next->next; + } + } + return GRIB_SUCCESS; + +} + +grib_action* grib_action_create_list( grib_context* context, const char* name, grib_expression* expression, grib_action* block) +{ + grib_action_list* a ; + grib_action_class* c = grib_action_class_list; + grib_action* act = ( grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->cclass = c; + act->context = context; + a = ( grib_action_list*)act; + act->next = NULL; + act->name = grib_context_strdup_persistent(context,name); + act->op = grib_context_strdup_persistent(context,"section"); + a->expression = expression; + + a->block_list = block; + + grib_context_log(context, GRIB_LOG_DEBUG, " Action List %s is created \n",act->name); + return act; +} + +static void compile(grib_action* act, grib_compiler *compiler) +{ + grib_action_list* a = (grib_action_list*)act; + char b[80]; + + if(a->block_list) + grib_compile_action_branch(a->block_list, compiler,b); + else + strcpy(b,"NULL"); + + fprintf(compiler->out,"%s = grib_action_create_list(ctx,",compiler->var); + fprintf(compiler->out,"\"%s\",", act->name); + grib_compile_expression(a->expression, compiler); + fprintf(compiler->out,",%s);\n",b); +} + +static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit) +{ + grib_action_list* self = ( grib_action_list*)a; + + int ret = 0; + long val = 0; + + if ((ret=grib_expression_evaluate_long(acc->parent->h,self->expression,&val)) != GRIB_SUCCESS){ + grib_context_log(acc->parent->h->context, GRIB_LOG_ERROR, " List %s creating %d values unable to evaluate long \n", acc->name, val ); + } + + *doit = (val != acc->loop); + + return self->block_list; +} + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_list* self = ( grib_action_list*)act; + grib_action *a = self->block_list; + + while(a) + { + grib_action *na = a->next; + grib_free_action(context,a); + a = na; + } + + + + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + grib_expression_free(context, self->expression); + +} + diff --git a/src/action_class_meta.c b/src/action_class_meta.c new file mode 100644 index 000000000..eb3086005 --- /dev/null +++ b/src/action_class_meta.c @@ -0,0 +1,118 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + SUPER = action_class_gen + IMPLEMENTS = dump + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); + + +typedef struct grib_action_meta { + grib_action act; +/* Members defined in gen */ + long len; + grib_arguments* params; +/* Members defined in meta */ +} grib_action_meta; + +extern grib_action_class* grib_action_class_gen; + +static grib_action_class _grib_action_class_meta = { + &grib_action_class_gen, /* super */ + "action_class_meta", /* name */ + sizeof(grib_action_meta), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + 0, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_meta = &_grib_action_class_meta; + +static void init_class(grib_action_class* c) +{ + c->xref = (*(c->super))->xref; + c->create_accessor = (*(c->super))->create_accessor; + c->notify_change = (*(c->super))->notify_change; + c->reparse = (*(c->super))->reparse; + c->execute = (*(c->super))->execute; + c->compile = (*(c->super))->compile; +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_meta( grib_context* context, const char* name, const char* op, + grib_arguments* params, grib_arguments* default_value,unsigned long flags,const char* name_space) +{ + grib_action_meta* a = (grib_action_meta*)grib_context_malloc_clear_persistent(context,sizeof(grib_action_meta)); + grib_action* act = (grib_action*)a; + act->next = NULL; + act->name = grib_context_strdup_persistent(context, name); + act->op = grib_context_strdup_persistent(context, op); + if(name_space) + act->name_space = grib_context_strdup_persistent(context, name_space); + act->cclass = grib_action_class_meta; + act->context = context; + act->flags = flags; + a->params = params; + act->default_value = default_value; + a->len = 0; + + + /* grib_arguments_print(context,a->params,0); printf("\n"); */ + + + return act; +} + + +static void dump( grib_action* act, FILE* f, int lvl) +{ + + int i =0; + for (i=0;icontext,f," "); + grib_context_print(act->context,f," meta %s \n", act->name ); +} + diff --git a/src/action_class_modify.c b/src/action_class_modify.c new file mode 100644 index 000000000..00f664c36 --- /dev/null +++ b/src/action_class_modify.c @@ -0,0 +1,152 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = dump;xref;compile + IMPLEMENTS = create_accessor + IMPLEMENTS = destroy + MEMBERS = long flags + MEMBERS = char *name + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void xref (grib_action* d, FILE* f,const char* path); +static void compile (grib_action* a, grib_compiler* compiler); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); + + +typedef struct grib_action_modify { + grib_action act; +/* Members defined in modify */ + long flags; + char *name; +} grib_action_modify; + + +static grib_action_class _grib_action_class_modify = { + 0, /* super */ + "action_class_modify", /* name */ + sizeof(grib_action_modify), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + &xref, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + 0, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_modify = &_grib_action_class_modify; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_modify( grib_context* context, + const char* name, + long flags) +{ + + grib_action_modify* a ; + grib_action_class* c = grib_action_class_modify; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"section"); + + act->cclass = c; + a = (grib_action_modify*)act; + act->context = context; + + a->flags = flags; + a->name = grib_context_strdup_persistent(context,name); + + + act->name = grib_context_strdup_persistent(context,"flags"); + + return act; +} + +static void compile(grib_action* act, grib_compiler *compiler) +{ + fprintf(compiler->out,"%s = grib_action_create_modify(ctx,",compiler->var); + fprintf(compiler->out,"\"%s\",",act->name); + grib_compile_flags(compiler, act->flags); + fprintf(compiler->out,");"); + fprintf(compiler->out,"\n"); +} + +static void dump(grib_action* act, FILE* f, int lvl) +{ +} + +static int create_accessor(grib_section* p, grib_action* act,grib_loader *h) +{ + grib_action_modify* a = ( grib_action_modify*)act; + + + grib_accessor* ga = NULL; + + ga = grib_find_accessor(p->h, a->name); + + if(ga) + ga->flags = a->flags; + + else{ + grib_context_log(act->context, GRIB_LOG_DEBUG, "action_class_modify: create_accessor_buffer : No accessor named %s to modify.", a->name); + } + return GRIB_SUCCESS; + + +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_modify* a = (grib_action_modify*) act; + + grib_context_free_persistent(context, a->name); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + +} + +static void xref(grib_action* d, FILE* f,const char* path) +{ +} diff --git a/src/action_class_noop.c b/src/action_class_noop.c new file mode 100644 index 000000000..c4db630b4 --- /dev/null +++ b/src/action_class_noop.c @@ -0,0 +1,120 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = dump;destroy;xref;execute;compile + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void xref (grib_action* d, FILE* f,const char* path); +static void compile (grib_action* a, grib_compiler* compiler); +static void destroy (grib_context*,grib_action*); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_noop { + grib_action act; +/* Members defined in noop */ +} grib_action_noop; + + +static grib_action_class _grib_action_class_noop = { + 0, /* super */ + "action_class_noop", /* name */ + sizeof(grib_action_noop), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + &xref, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + &execute, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_noop = &_grib_action_class_noop; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_noop( grib_context* context,const char* fname) +{ + char buf[1024]; + + grib_action_noop* a ; + grib_action_class* c = grib_action_class_noop; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"section"); + + act->cclass = c; + a = (grib_action_noop*)act; + act->context = context; + + sprintf(buf,"_noop%p",(void*)a); + + act->name = grib_context_strdup_persistent(context,buf); + + return act; +} + +static void compile(grib_action* act, grib_compiler *compiler) +{ + fprintf(compiler->out,"%s = grib_action_create_noop(ctx,",compiler->var); + fprintf(compiler->out,"\"%s\"",act->name); + fprintf(compiler->out,");"); + fprintf(compiler->out,"\n"); +} + +static void dump(grib_action* act, FILE* f, int lvl) +{ +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); +} + +static void xref(grib_action* d, FILE* f,const char* path) +{ +} + +static int execute(grib_action* act, grib_handle *h) {return 0;} diff --git a/src/action_class_print.c b/src/action_class_print.c new file mode 100644 index 000000000..0ec4ed1c9 --- /dev/null +++ b/src/action_class_print.c @@ -0,0 +1,156 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = dump + IMPLEMENTS = destroy;execute + MEMBERS = char *name + MEMBERS = char *outname + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void destroy (grib_context*,grib_action*); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_print { + grib_action act; +/* Members defined in print */ + char *name; + char *outname; +} grib_action_print; + + +static grib_action_class _grib_action_class_print = { + 0, /* super */ + "action_class_print", /* name */ + sizeof(grib_action_print), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + &execute, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_print = &_grib_action_class_print; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_print( grib_context* context, const char* name,char* outname) +{ + char buf[1024]; + + grib_action_print* a ; + grib_action_class* c = grib_action_class_print; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"section"); + + act->cclass = c; + a = (grib_action_print*)act; + act->context = context; + + a->name = grib_context_strdup_persistent(context,name); + + if (outname) { + FILE* out=NULL; + int ioerr=0; + a->outname = grib_context_strdup_persistent(context,outname); + out=fopen(outname,"w"); + ioerr=errno; + if (!out) { + grib_context_log(act->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "IO ERROR: %s: %s",strerror(ioerr),outname); + } + if (out) fclose(out); + } + + sprintf(buf,"print%p",(void*)a->name); + + act->name = grib_context_strdup_persistent(context,buf); + + return act; +} + +static int execute(grib_action* act, grib_handle *h) +{ + char fname[2048]; + grib_action_print* self = (grib_action_print*) act; + int err =0; + FILE* out=NULL; + int ioerr=0; + + if (self->outname) { + out=fopen(self->outname,"a"); + ioerr=errno; + if (!out) { + grib_context_log(act->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "IO ERROR: %s: %s",strerror(ioerr),self->outname); + return GRIB_IO_PROBLEM; + } + } else { + out=stdout; + } + + err=grib_recompose_print(h,NULL,self->name,fname,0,out); + + if (self->outname) fclose(out); + + return err; +} + + +static void dump(grib_action* act, FILE* f, int lvl) +{ +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_print* a = (grib_action_print*) act; + + grib_context_free_persistent(context, a->name); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + +} diff --git a/src/action_class_put.c b/src/action_class_put.c new file mode 100644 index 000000000..6c744ff0b --- /dev/null +++ b/src/action_class_put.c @@ -0,0 +1,140 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = create_accessor + IMPLEMENTS = dump + IMPLEMENTS = destroy + MEMBERS = grib_arguments* args + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); + + +typedef struct grib_action_put { + grib_action act; +/* Members defined in put */ + grib_arguments* args; +} grib_action_put; + + +static grib_action_class _grib_action_class_put = { + 0, /* super */ + "action_class_put", /* name */ + sizeof(grib_action_put), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + 0, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_put = &_grib_action_class_put; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_put( grib_context* context, const char* name ,grib_arguments *args ) +{ + grib_action_put* a = NULL; + grib_action_class* c = grib_action_class_put; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->next = NULL; + act->name = grib_context_strdup_persistent(context,name); + act->op = grib_context_strdup_persistent(context,"forward"); + act->cclass = c; + act->context = context; + a = (grib_action_put*)act; + a->args = args; + return act; +} + +static int create_accessor(grib_section* p, grib_action* act,grib_loader *h) +{ + grib_action_put* a = ( grib_action_put*)act; + + grib_section* ts = NULL; + + grib_accessor* ga = NULL; + + ga = grib_find_accessor(p->h, grib_arguments_get_name(p->h,a->args,1)); + if(ga) + ts = ga->sub_section; + /* ts = grib_get_sub_section(ga); */ + else return GRIB_BUFFER_TOO_SMALL; + + if(ts){ + ga = grib_accessor_factory( ts, act,0,a->args); + if(ga)grib_push_accessor(ga,ts->block); + else return GRIB_BUFFER_TOO_SMALL; + + } + else{ + grib_context_log(act->context, GRIB_LOG_ERROR, "Action_class_put : create_accessor_buffer : No Section named %s to export %s ", grib_arguments_get_name(p->h,a->args,1), grib_arguments_get_name(p->h,a->args,0)); + } + return GRIB_SUCCESS; +} + + +static void dump( grib_action* act, FILE* f, int lvl) +{ + grib_action_put* a = ( grib_action_put*)act; + + int i = 0; + + for (i=0;icontext,f," "); + + grib_context_print(act->context,f,"put %s as %s in %s\n",grib_arguments_get_name(0,a->args,0),act->name,grib_arguments_get_name(0,a->args,1)); + +} +static void destroy(grib_context* context, grib_action* act) +{ + grib_action_put* a = ( grib_action_put*)act; + + grib_arguments_free(context, a->args); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); +} diff --git a/src/action_class_remove.c b/src/action_class_remove.c new file mode 100644 index 000000000..99a4a2b59 --- /dev/null +++ b/src/action_class_remove.c @@ -0,0 +1,169 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = create_accessor + IMPLEMENTS = dump + IMPLEMENTS = destroy; xref; compile + MEMBERS = grib_arguments* args + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void xref (grib_action* d, FILE* f,const char* path); +static void compile (grib_action* a, grib_compiler* compiler); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); + + +typedef struct grib_action_remove { + grib_action act; +/* Members defined in remove */ + grib_arguments* args; +} grib_action_remove; + + +static grib_action_class _grib_action_class_remove = { + 0, /* super */ + "action_class_remove", /* name */ + sizeof(grib_action_remove), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + &xref, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + 0, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_remove = &_grib_action_class_remove; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_remove( grib_context* context, grib_arguments *args ) +{ + grib_action_remove* a = NULL; + grib_action_class* c = grib_action_class_remove; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->next = NULL; + act->name = grib_context_strdup_persistent(context,"DELETE"); + act->op = grib_context_strdup_persistent(context,"remove"); + act->cclass = c; + act->context = context; + a = (grib_action_remove*)act; + a->args = args; + return act; +} + +static void compile(grib_action* act, grib_compiler* compiler) +{ + grib_action_remove* a = (grib_action_remove*)act; + fprintf(compiler->out,"%s = grib_action_create_remove(ctx,",compiler->var); + grib_compile_arguments(a->args,compiler); + fprintf(compiler->out,");\n"); +} + +static void remove_accessor(grib_accessor *a){ + grib_section* s = a->parent; + int id; + + if (!a || !a->previous) return; + + if (a->parent->h->use_trie && *(a->all_names[0]) != '_') { + id=grib_hash_keys_get_id(a->parent->h->context->keys,a->all_names[0]); + a->parent->h->accessors[id]=NULL; + } + + if (a->next) a->previous->next = a->next; + else return; + + a->next->previous = a->previous; + + grib_free_accessor(s->h->context,a); + + return; +} + +static int create_accessor(grib_section* p, grib_action* act,grib_loader*h) +{ + grib_action_remove* a = ( grib_action_remove*)act; + + + grib_accessor* ga = NULL; + + + ga = grib_find_accessor(p->h, grib_arguments_get_name(p->h,a->args,0)); + + if(ga) + remove_accessor(ga); + + + else{ + grib_context_log(act->context, GRIB_LOG_DEBUG, "Action_class_remove : create_accessor_buffer : No accessor named %s to remove ", grib_arguments_get_name(p->h,a->args,0)); + } + return GRIB_SUCCESS; + + +} + +static void dump( grib_action* act, FILE* f, int lvl) +{ + grib_action_remove* a = ( grib_action_remove*)act; + + int i = 0; + + for (i=0;icontext,f," "); + + grib_context_print(act->context,f,"remove %s as %s in %s\n",grib_arguments_get_name(0,a->args,0),act->name,grib_arguments_get_name(0,a->args,1)); + +} +static void destroy(grib_context* context, grib_action* act) +{ + grib_action_remove* a = ( grib_action_remove*)act; + + grib_arguments_free(context, a->args); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); +} + +static void xref(grib_action* d, FILE* f,const char* path) +{ +} diff --git a/src/action_class_section.c b/src/action_class_section.c new file mode 100644 index 000000000..88e261638 --- /dev/null +++ b/src/action_class_section.c @@ -0,0 +1,231 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = notify_change + IMPLEMENTS = reparse + IMPLEMENTS = xref + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void xref (grib_action* d, FILE* f,const char* path); +static int notify_change(grib_action* a, grib_accessor* observer,grib_accessor* observed); +static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); + + +typedef struct grib_action_section { + grib_action act; +/* Members defined in section */ +} grib_action_section; + + +static grib_action_class _grib_action_class_section = { + 0, /* super */ + "action_class_section", /* name */ + sizeof(grib_action_section), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* destroy */ + + 0, /* dump */ + &xref, /* xref */ + + 0, /* create_accessor*/ + + ¬ify_change, /* notify_change */ + &reparse, /* reparse */ + 0, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_section = &_grib_action_class_section; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +#if 0 +/* new GCC compiler v4.5.0 complains function is defined but not used*/ +static void check_sections(grib_section *s,grib_handle* h) +{ + grib_accessor *a = s?s->block->first:NULL; + if(s) Assert(s->h == h); + while(a) + { + Assert(a->parent->h == h); + check_sections(a->sub_section,h); + a = a->next; + } +} +#endif + +static int notify_change(grib_action* act, grib_accessor * notified, + grib_accessor* changed) +{ + + grib_loader loader = { 0,}; + + grib_section *old_section = NULL; + grib_handle *h = notified->parent->h; + size_t len = 0; + size_t size = 0; + int err=0; + grib_handle* tmp_handle; + int doit = 0; + + grib_action* la = NULL; + + grib_context_log(h->context, + GRIB_LOG_DEBUG,"------------- SECTION action %s (%s) is triggerred by [%s]", + act->name, notified->name, changed->name); + + la = grib_action_reparse(act,notified,&doit); + old_section = notified->sub_section; + Assert(old_section); + + Assert(old_section->h == h); + + /* printf("old = %p\n",(void*)old_section->branch); */ + /* printf("new = %p\n",(void*)la); */ + + grib_context_log(h->context, + GRIB_LOG_DEBUG,"------------- DOIT %ld OLD %p NEW %p", + doit,old_section->branch,la); + + + if(!doit) { + if(la != NULL || old_section->branch != NULL) + if(la == old_section->branch) + { + grib_context_log(h->context,GRIB_LOG_DEBUG,"IGNORING TRIGGER action %s (%s) is triggerred %p", act->name, notified->name + ,(void*)la); + return GRIB_SUCCESS; + } + } + + loader.list_is_resized = (la == old_section->branch); + + if (!strcmp(changed->name,"GRIBEditionNumber")) loader.changing_edition=1; + else loader.changing_edition=0; + + old_section->branch = la; + + tmp_handle = grib_new_handle(h->context); + if(!tmp_handle) + return GRIB_OUT_OF_MEMORY; + + tmp_handle->buffer = grib_create_growable_buffer(h->context); + Assert(tmp_handle->buffer); /* FIXME */ + + loader.data = h; + loader.lookup_long = grib_lookup_long_from_handle; + loader.init_accessor = grib_init_accessor_from_handle; + + + Assert(h->kid == NULL); + tmp_handle->loader = &loader; + tmp_handle->main = h; + h->kid = tmp_handle; + /* printf("tmp_handle- main %p %p\n",(void*)tmp_handle,(void*)h); */ + + grib_context_log(h->context,GRIB_LOG_DEBUG,"------------- CREATE TMP BLOCK ", act->name, notified->name); + tmp_handle->root = grib_section_create(tmp_handle,NULL); + + tmp_handle->use_trie=1; + + err=grib_create_accessor(tmp_handle->root, act, &loader); + + grib_section_adjust_sizes(tmp_handle->root,1,0); + + grib_section_post_init(tmp_handle->root); + + /* grib_recompute_sections_lengths(tmp_handle->root); */ + grib_get_block_length(tmp_handle->root,&len); + grib_context_log(h->context,GRIB_LOG_DEBUG,"------------- TMP BLOCK IS sectlen=%d buffer=%d", len, tmp_handle->buffer->ulength); + +#if 0 + if(h->context->debug > 10) + grib_dump_content(tmp_handle,stdout,NULL,0,NULL); +#endif + + /* Assert(tmp_handle->buffer->ulength == len); */ + /* grib_empty_section(h->context,old_section); */ + + grib_buffer_replace(notified, tmp_handle->buffer->data, tmp_handle->buffer->ulength,0,1); + + grib_swap_sections(old_section, + tmp_handle->root->block->first->sub_section); + + Assert(tmp_handle->dependencies == NULL); + /* printf("grib_handle_delete %p\n",(void*)tmp_handle); */ + + + grib_handle_delete(tmp_handle); + + h->use_trie = 1; + h->trie_invalid=1; + h->kid = NULL; + + grib_section_adjust_sizes(h->root,1,0); + + grib_section_post_init(h->root); + + grib_get_block_length(old_section,&size); + + grib_context_log(h->context,GRIB_LOG_DEBUG,"------------- BLOCK SIZE %ld, buffer len=%ld", size,len); + if(h->context->debug > 10) + grib_dump_content(h,stdout,"debug",~0,NULL); + + Assert(size == len); + + grib_update_paddings(old_section); + + + return err; +} + + +static grib_action* reparse(grib_action* a,grib_accessor* acc,int* doit) +{ + /* Should be inerited */ + printf("reparse should be inerited: %s\n",a->name); + + Assert(1==0); + return 0; +} + +static void xref(grib_action* d, FILE* f,const char* path) +{ +} diff --git a/src/action_class_set.c b/src/action_class_set.c new file mode 100644 index 000000000..3ba760e66 --- /dev/null +++ b/src/action_class_set.c @@ -0,0 +1,157 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = dump;xref;compile + IMPLEMENTS = destroy;execute + MEMBERS = grib_expression *expression + MEMBERS = char *name + MEMBERS = int nofail + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void xref (grib_action* d, FILE* f,const char* path); +static void compile (grib_action* a, grib_compiler* compiler); +static void destroy (grib_context*,grib_action*); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_set { + grib_action act; +/* Members defined in set */ + grib_expression *expression; + char *name; + int nofail; +} grib_action_set; + + +static grib_action_class _grib_action_class_set = { + 0, /* super */ + "action_class_set", /* name */ + sizeof(grib_action_set), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + &xref, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + &execute, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_set = &_grib_action_class_set; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_set( grib_context* context, + const char* name, grib_expression* expression,int nofail) +{ + char buf[1024]; + + grib_action_set* a ; + grib_action_class* c = grib_action_class_set; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"section"); + + act->cclass = c; + a = (grib_action_set*)act; + act->context = context; + + a->expression = expression; + a->name = grib_context_strdup_persistent(context,name); + a->nofail = nofail; + + + sprintf(buf,"set%p",(void*)expression); + + act->name = grib_context_strdup_persistent(context,buf); + + return act; +} + +static void compile(grib_action* act, grib_compiler *compiler) +{ + grib_action_set* a = (grib_action_set*)act; + + fprintf(compiler->out,"%s = grib_action_create_set(ctx,",compiler->var); + fprintf(compiler->out,"\"%s\",", a->name); + grib_compile_expression(a->expression, compiler); + fprintf(compiler->out,",%d);\n", a->nofail); +} + +static int execute(grib_action* a, grib_handle *h) +{ + int ret=0; + grib_action_set* self = (grib_action_set*) a; + ret=grib_set_expression(h,self->name,self->expression); + if (self->nofail) return 0; + if (ret != GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"Error while setting key %s (%s)", + self->name,grib_get_error_message(ret)); + } + return ret; +} + + +static void dump(grib_action* act, FILE* f, int lvl) +{ + int i =0; + grib_action_set* self=(grib_action_set*)act; + for (i=0;icontext,f," "); + grib_context_print(act->context,f,self->name); + printf("\n"); +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_set* a = (grib_action_set*) act; + + grib_context_free_persistent(context, a->name); + grib_expression_free(context,a->expression); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + +} + +static void xref(grib_action* d, FILE* f,const char *path) +{ +} diff --git a/src/action_class_set_darray.c b/src/action_class_set_darray.c new file mode 100644 index 000000000..8591968c4 --- /dev/null +++ b/src/action_class_set_darray.c @@ -0,0 +1,138 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = dump;xref + IMPLEMENTS = destroy;execute + MEMBERS = grib_darray *darray + MEMBERS = char *name + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void xref (grib_action* d, FILE* f,const char* path); +static void destroy (grib_context*,grib_action*); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_set_darray { + grib_action act; +/* Members defined in set_darray */ + grib_darray *darray; + char *name; +} grib_action_set_darray; + + +static grib_action_class _grib_action_class_set_darray = { + 0, /* super */ + "action_class_set_darray", /* name */ + sizeof(grib_action_set_darray), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + &xref, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + &execute, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_set_darray = &_grib_action_class_set_darray; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_set_darray( grib_context* context, + const char* name, + grib_darray* darray) +{ + char buf[1024]; + + grib_action_set_darray* a ; + grib_action_class* c = grib_action_class_set_darray; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"section"); + + act->cclass = c; + a = (grib_action_set_darray*)act; + act->context = context; + + a->darray = darray; + a->name = grib_context_strdup_persistent(context,name); + + + sprintf(buf,"set_darray%p",(void*)darray); + + act->name = grib_context_strdup_persistent(context,buf); + + return act; +} + +static int execute(grib_action* a, grib_handle *h) +{ + grib_action_set_darray* self = (grib_action_set_darray*) a; + + return grib_set_double_array(h,self->name,self->darray->v,self->darray->n); +} + + +static void dump(grib_action* act, FILE* f, int lvl) +{ + int i =0; + grib_action_set_darray* self=(grib_action_set_darray*)act; + for (i=0;icontext,f," "); + grib_context_print(act->context,f,self->name); + printf("\n"); +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_set_darray* a = (grib_action_set_darray*) act; + + grib_context_free_persistent(context, a->name); + grib_darray_delete(context,a->darray); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + +} + +static void xref(grib_action* d, FILE* f,const char *path) +{ +} diff --git a/src/action_class_set_iarray.c b/src/action_class_set_iarray.c new file mode 100644 index 000000000..e2a09c548 --- /dev/null +++ b/src/action_class_set_iarray.c @@ -0,0 +1,138 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = dump;xref + IMPLEMENTS = destroy;execute + MEMBERS = grib_iarray *iarray + MEMBERS = char *name + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void xref (grib_action* d, FILE* f,const char* path); +static void destroy (grib_context*,grib_action*); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_set_iarray { + grib_action act; +/* Members defined in set_iarray */ + grib_iarray *iarray; + char *name; +} grib_action_set_iarray; + + +static grib_action_class _grib_action_class_set_iarray = { + 0, /* super */ + "action_class_set_iarray", /* name */ + sizeof(grib_action_set_iarray), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + &xref, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + &execute, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_set_iarray = &_grib_action_class_set_iarray; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_set_iarray( grib_context* context, + const char* name, + grib_iarray* iarray) +{ + char buf[1024]; + + grib_action_set_iarray* a ; + grib_action_class* c = grib_action_class_set_iarray; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"section"); + + act->cclass = c; + a = (grib_action_set_iarray*)act; + act->context = context; + + a->iarray = iarray; + a->name = grib_context_strdup_persistent(context,name); + + + sprintf(buf,"set_iarray%p",(void*)iarray); + + act->name = grib_context_strdup_persistent(context,buf); + + return act; +} + +static int execute(grib_action* a, grib_handle *h) +{ + grib_action_set_iarray* self = (grib_action_set_iarray*) a; + + return grib_set_long_array(h,self->name,self->iarray->v,self->iarray->n); +} + + +static void dump(grib_action* act, FILE* f, int lvl) +{ + int i =0; + grib_action_set_iarray* self=(grib_action_set_iarray*)act; + for (i=0;icontext,f," "); + grib_context_print(act->context,f,self->name); + printf("\n"); +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_set_iarray* a = (grib_action_set_iarray*) act; + + grib_context_free_persistent(context, a->name); + grib_iarray_delete(context,a->iarray); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + +} + +static void xref(grib_action* d, FILE* f,const char *path) +{ +} diff --git a/src/action_class_set_missing.c b/src/action_class_set_missing.c new file mode 100644 index 000000000..6b6074f61 --- /dev/null +++ b/src/action_class_set_missing.c @@ -0,0 +1,129 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = dump + IMPLEMENTS = destroy;execute + MEMBERS = char *name + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void destroy (grib_context*,grib_action*); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_set_missing { + grib_action act; +/* Members defined in set_missing */ + char *name; +} grib_action_set_missing; + + +static grib_action_class _grib_action_class_set_missing = { + 0, /* super */ + "action_class_set_missing", /* name */ + sizeof(grib_action_set_missing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + &execute, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_set_missing = &_grib_action_class_set_missing; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_set_missing( grib_context* context, + const char* name) +{ + char buf[1024]; + + grib_action_set_missing* a ; + grib_action_class* c = grib_action_class_set_missing; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"set_missing"); + + act->cclass = c; + a = (grib_action_set_missing*)act; + act->context = context; + + a->name = grib_context_strdup_persistent(context,name); + + + sprintf(buf,"set_missing_%s",name); + + act->name = grib_context_strdup_persistent(context,buf); + + return act; +} + +static int execute(grib_action* a, grib_handle *h) +{ + grib_action_set_missing* self = (grib_action_set_missing*) a; + + return grib_set_missing(h,self->name); +} + + +static void dump(grib_action* act, FILE* f, int lvl) +{ + int i =0; + grib_action_set_missing* self=(grib_action_set_missing*)act; + for (i=0;icontext,f," "); + grib_context_print(act->context,f,self->name); + printf("\n"); +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_set_missing* a = (grib_action_set_missing*) act; + + grib_context_free_persistent(context, a->name); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + +} + diff --git a/src/action_class_switch.c b/src/action_class_switch.c new file mode 100644 index 000000000..9d55e959f --- /dev/null +++ b/src/action_class_switch.c @@ -0,0 +1,241 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + SUPER = action_class_section + IMPLEMENTS = destroy + IMPLEMENTS = xref + IMPLEMENTS = execute + MEMBERS = grib_arguments* args + MEMBERS = grib_case *Case + MEMBERS = grib_action *Default + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void xref (grib_action* d, FILE* f,const char* path); +static void destroy (grib_context*,grib_action*); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_switch { + grib_action act; +/* Members defined in section */ +/* Members defined in switch */ + grib_arguments* args; + grib_case *Case; + grib_action *Default; +} grib_action_switch; + +extern grib_action_class* grib_action_class_section; + +static grib_action_class _grib_action_class_switch = { + &grib_action_class_section, /* super */ + "action_class_switch", /* name */ + sizeof(grib_action_switch), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + 0, /* dump */ + &xref, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + &execute, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_switch = &_grib_action_class_switch; + +static void init_class(grib_action_class* c) +{ + c->dump = (*(c->super))->dump; + c->create_accessor = (*(c->super))->create_accessor; + c->notify_change = (*(c->super))->notify_change; + c->reparse = (*(c->super))->reparse; + c->compile = (*(c->super))->compile; +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_switch( grib_context* context, + grib_arguments* args, + grib_case* Case, + grib_action* Default) +{ char name[1024]; + grib_action_switch* a ; + grib_action_class* c = grib_action_class_switch; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"section"); + + act->cclass = c; + a = (grib_action_switch*)act; + act->context = context; + + a->args = args; + a->Case = Case; + a->Default = Default; + + sprintf(name,"_switch%p",(void*)a); + + act->name = grib_context_strdup_persistent(context,name); + + return act; +} + +grib_case* grib_case_new(grib_context* c,grib_arguments* values,grib_action* action) +{ + grib_case* Case = grib_context_malloc_clear_persistent(c,sizeof(grib_case)); + + Case->values=values; + Case->action=action; + + return Case; +} + + +static int execute(grib_action* act, grib_handle *h) { + grib_action_switch* a = (grib_action_switch*)act; + grib_case* c=a->Case; + grib_action* next = a->Default; + grib_arguments* args=a->args; + grib_arguments* values; + grib_expression* e; + grib_expression* value; + int ret = 0; + long lres=0; + double dres=0; + long lval=0; + double dval=0; + int type=0; + int ok=0; + const char *cval; + const char *cres; + char buf[80]; + char tmp[80]; + size_t len = sizeof(buf); + size_t size=sizeof(tmp); + int err=0; + + Assert(args); + + while (c) { + e=args->expression; + values=c->values; + value=values->expression; + ok=0; + while (e && value) { + if (!strcmp(value->cclass->name,"true")) ok=1; + else { + type=grib_expression_native_type(h,value); + + switch(type) { + case GRIB_TYPE_LONG: + ok= ( grib_expression_evaluate_long(h,value,&lres) == GRIB_SUCCESS) && + ( grib_expression_evaluate_long(h,e,&lval) == GRIB_SUCCESS) && + (lval == lres); + break; + + case GRIB_TYPE_DOUBLE: + ok = ( grib_expression_evaluate_double(h,value,&dres) == GRIB_SUCCESS) && + ( grib_expression_evaluate_double(h,e,&dval) == GRIB_SUCCESS) && + (dval == dres); + break; + + case GRIB_TYPE_STRING: + len = sizeof(buf); + size=sizeof(tmp); + ok = ((cres=grib_expression_evaluate_string(h,e,buf,&len,&err)) != NULL ) && + (err==0) && ((cval = grib_expression_evaluate_string(h,value,tmp,&size,&err)) != NULL) && + (err==0) && ((strcmp(buf,cval) == 0) || (strcmp(cval,"*")==0)); + break; + + default: + /* TODO: */ + break; + } + } + if (!ok) break; + + args=args->next; + if (args) e=args->expression; + else e=NULL; + + values=values->next; + if (values) value=values->expression; + else value=NULL; + } + + if(ok) { next=c->action; break; } + + c=c->next; + } + + if (!next) return GRIB_SWITCH_NO_MATCH; + + while(next){ + ret = grib_action_execute(next, h); + if(ret != GRIB_SUCCESS) return ret; + next= next->next; + } + + return GRIB_SUCCESS; +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_switch* a = (grib_action_switch*) act; + grib_case *t = a->Case; + + while(t) + { + grib_case *nt = t->next; + grib_free_action(context,t->action); + grib_arguments_free(context,t->values); + grib_context_free(context,t); + t = nt; + } + + grib_free_action(context,a->Default); + + + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); +} + +static void xref(grib_action* d, FILE* f,const char* path) +{ +} + + diff --git a/src/action_class_template.c b/src/action_class_template.c new file mode 100644 index 000000000..26e1205f7 --- /dev/null +++ b/src/action_class_template.c @@ -0,0 +1,239 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile + * * + ***************************************************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + SUPER = action_class_section + IMPLEMENTS = create_accessor + IMPLEMENTS = dump + IMPLEMENTS = destroy + IMPLEMENTS = reparse + IMPLEMENTS = compile + MEMBERS = int nofail + MEMBERS = char* arg + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void compile (grib_action* a, grib_compiler* compiler); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); +static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); + + +typedef struct grib_action_template { + grib_action act; +/* Members defined in section */ +/* Members defined in template */ + int nofail; + char* arg; +} grib_action_template; + +extern grib_action_class* grib_action_class_section; + +static grib_action_class _grib_action_class_template = { + &grib_action_class_section, /* super */ + "action_class_template", /* name */ + sizeof(grib_action_template), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + &reparse, /* reparse */ + 0, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_template = &_grib_action_class_template; + +static void init_class(grib_action_class* c) +{ + c->xref = (*(c->super))->xref; + c->notify_change = (*(c->super))->notify_change; + c->execute = (*(c->super))->execute; +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_template( grib_context* context,int nofail,const char* name , const char* arg1) +{ + grib_action_template* a ; + grib_action_class* c = grib_action_class_template; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act-> name = grib_context_strdup_persistent(context,name); + act-> op = grib_context_strdup_persistent(context,"section"); + act-> cclass = c; + act-> next = NULL; + act->context = context; + a = (grib_action_template*)act; + a->nofail=nofail; + if (arg1) a->arg = grib_context_strdup_persistent(context,arg1); + else a->arg = NULL; + + return act; +} + +static void compile(grib_action* act, grib_compiler *compiler) +{ + grib_action_template* a = (grib_action_template*)act; + fprintf(compiler->out,"%s = grib_action_create_template(ctx,", compiler->var); + fprintf(compiler->out,"%d,",a->nofail); + fprintf(compiler->out,"\"%s\",",act->name); + if(a->arg) { + fprintf(compiler->out,"\"%s\");",a->arg); + } + else + { + fprintf(compiler->out,"NULL);"); + } + fprintf(compiler->out,"\n"); +} + +static void dump( grib_action* act, FILE* f, int lvl) +{ + grib_action_template* a = ( grib_action_template*)act; + int i = 0; + for (i=0;icontext,f," "); + grib_context_print(act->context,f,"Template %s %s\n",act->name , a->arg ); +} + +grib_action* get_empty_template(grib_context* c,int *err) { + char fname[]="empty_template.def"; + char* path=0; + + path=grib_context_full_path(c,fname); + if (path) { + *err=GRIB_SUCCESS; + return grib_parse_file(c, path); + } else { + *err=GRIB_INTERNAL_ERROR; + grib_context_log(c,GRIB_LOG_ERROR,"get_empty_template: unable to get template %s",fname); + return NULL; + } + +} + +static int create_accessor(grib_section* p, grib_action* act, grib_loader *h ){ + int ret = GRIB_SUCCESS; + grib_action_template* a = ( grib_action_template*)act; + grib_action* la = NULL; + grib_action* next = NULL; + grib_accessor* as = NULL; + grib_section* gs = NULL; + + char fname[1024]={0,}; + char *fpath=0; + + as = grib_accessor_factory(p, act,0,NULL); + + if(!as) return GRIB_INTERNAL_ERROR; + if(a->arg){ + ret = grib_recompose_name(p->h,as,a->arg,fname,1); + + if ((fpath=grib_context_full_path(p->h->context,fname))==NULL) { + if (!a->nofail) { + grib_context_log(p->h->context,GRIB_LOG_ERROR, + "Unable to find template %s from %s ",act->name,fname); + return GRIB_FILE_NOT_FOUND; + } + la = get_empty_template(p->h->context,&ret); + if (ret) return ret; + } else + la = grib_parse_file(p->h->context, fpath); + } + as->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + gs = as->sub_section; + gs->branch = la; /* Will be used to prevent unecessary reparse */ + + grib_push_accessor(as,p->block); + + if(la){ + next = la; + + while(next){ + ret = grib_create_accessor(gs, next,h); + if(ret != GRIB_SUCCESS) { + if(p->h->context->debug) + { + grib_context_log(p->h->context,GRIB_LOG_ERROR, + "Error processing template %s: %s [%s] %04lx", + fname,grib_get_error_message(ret),next->name,next->flags); + } + return ret; + } + next= next->next; + } + } + return GRIB_SUCCESS; +} + + +static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit) +{ + grib_action_template* self = (grib_action_template*)a; + char *fpath=0; + + if(self->arg){ + char fname[1024]; + grib_recompose_name(acc->parent->h,NULL,self->arg,fname,1); + + if ((fpath=grib_context_full_path(acc->parent->h->context,fname))==NULL) { + if (!self->nofail) { + grib_context_log(acc->parent->h->context,GRIB_LOG_ERROR, + "Unable to find template %s from %s ",a->name,fname); + return NULL; + } return a; + } + + /* printf("REPARSE %s\n",fpath); */ + return grib_parse_file(acc->parent->h->context, fpath); + } + + return NULL; + +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_template* a = (grib_action_template*)act; + + grib_context_free_persistent(context, a->arg); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); +} diff --git a/src/action_class_trigger.c b/src/action_class_trigger.c new file mode 100644 index 000000000..012d080f7 --- /dev/null +++ b/src/action_class_trigger.c @@ -0,0 +1,181 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile + * * + ***************************************************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + SUPER = action_class_section + IMPLEMENTS = create_accessor + IMPLEMENTS = dump + IMPLEMENTS = destroy + IMPLEMENTS = reparse + MEMBERS = grib_arguments* trigger_on + MEMBERS = grib_action *block + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); +static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit); + + +typedef struct grib_action_trigger { + grib_action act; +/* Members defined in section */ +/* Members defined in trigger */ + grib_arguments* trigger_on; + grib_action *block; +} grib_action_trigger; + +extern grib_action_class* grib_action_class_section; + +static grib_action_class _grib_action_class_trigger = { + &grib_action_class_section, /* super */ + "action_class_trigger", /* name */ + sizeof(grib_action_trigger), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + &reparse, /* reparse */ + 0, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_trigger = &_grib_action_class_trigger; + +static void init_class(grib_action_class* c) +{ + c->xref = (*(c->super))->xref; + c->notify_change = (*(c->super))->notify_change; + c->execute = (*(c->super))->execute; + c->compile = (*(c->super))->compile; +} +/* END_CLASS_IMP */ + +grib_action *grib_action_create_trigger(grib_context *context, grib_arguments *args, grib_action *block) +{ + char name[1024]; + + grib_action_trigger* a = 0; + grib_action_class* c = grib_action_class_trigger; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + + sprintf(name,"_trigger%p",(void*)act); + + act-> name = grib_context_strdup_persistent(context,name); + act-> op = grib_context_strdup_persistent(context,"section"); + act-> cclass = c; + act-> next = NULL; + act->context = context; + + a = ( grib_action_trigger*)act; + a->trigger_on = args; + a->block = block; + + return act; +} + +static void dump( grib_action* act, FILE* f, int lvl) +{ + /* grib_action_trigger* a = ( grib_action_trigger*)act; */ + int i = 0; + for (i=0;icontext,f," "); + grib_context_print(act->context,f,"Trigger\n"); + +} + + +static int create_accessor(grib_section* p, grib_action* act, grib_loader *h ) +{ + int ret = GRIB_SUCCESS; + grib_action_trigger* a = ( grib_action_trigger*)act; + grib_action* next = NULL; + grib_accessor* as = NULL; + grib_section* gs = NULL; + + + as = grib_accessor_factory(p, act,0,NULL); + + if(!as) return GRIB_INTERNAL_ERROR; + + gs = as->sub_section; + gs->branch = 0; /* Force a reparse each time */ + + grib_push_accessor(as,p->block); + grib_dependency_observe_arguments(as,a->trigger_on); + + next = a->block; + + while(next){ + ret = grib_create_accessor(gs, next,h); + if(ret != GRIB_SUCCESS) return ret; + next= next->next; + } + + return GRIB_SUCCESS; + +} + + +static grib_action* reparse(grib_action* a,grib_accessor* acc,int* doit) +{ + grib_action_trigger* self = (grib_action_trigger*)a; + return self->block; +} + + +/* COMEBACK */ +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_trigger* a = (grib_action_trigger*)act; + + grib_action *b = a->block; + + while(b) + { + grib_action *n = b->next; + grib_free_action(context,b); + b = n; + } + + grib_arguments_free(context, a->trigger_on); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); +} diff --git a/src/action_class_variable.c b/src/action_class_variable.c new file mode 100644 index 000000000..e4d9a3794 --- /dev/null +++ b/src/action_class_variable.c @@ -0,0 +1,135 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + SUPER = action_class_gen + IMPLEMENTS = execute + IMPLEMENTS = compile + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void compile (grib_action* a, grib_compiler* compiler); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_variable { + grib_action act; +/* Members defined in gen */ + long len; + grib_arguments* params; +/* Members defined in variable */ +} grib_action_variable; + +extern grib_action_class* grib_action_class_gen; + +static grib_action_class _grib_action_class_variable = { + &grib_action_class_gen, /* super */ + "action_class_variable", /* name */ + sizeof(grib_action_variable), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* destroy */ + + 0, /* dump */ + 0, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + &execute, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_variable = &_grib_action_class_variable; + +static void init_class(grib_action_class* c) +{ + c->dump = (*(c->super))->dump; + c->xref = (*(c->super))->xref; + c->create_accessor = (*(c->super))->create_accessor; + c->notify_change = (*(c->super))->notify_change; + c->reparse = (*(c->super))->reparse; +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_variable( grib_context* context, const char* name, const char* op, const long len, grib_arguments* params, grib_arguments* default_value,int flags,const char* name_space) +{ + grib_action_variable* a = NULL; + grib_action_class* c = grib_action_class_variable; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->next = NULL; + act->name = grib_context_strdup_persistent(context, name); + if(name_space) + act->name_space = grib_context_strdup_persistent(context, name_space); + act->op = grib_context_strdup_persistent(context, op); + act->cclass = c; + act->context = context; + act->flags = flags; + a = (grib_action_variable*)act; + a->len = len; + a->params = params; + act->default_value = default_value; + + /* printf("CREATE %s\n",name); */ + + return act; +} + +static int execute(grib_action* a, grib_handle *h) +{ + return grib_create_accessor(h->root, a, NULL ); +} + +static void compile(grib_action* act, grib_compiler *compiler) +{ + grib_action_variable* a = (grib_action_variable*)act; + fprintf(compiler->out,"%s = grib_action_create_variable(ctx,",compiler->var); + fprintf(compiler->out,"\"%s\",",act->name); + fprintf(compiler->out,"\"%s\",",act->op); + fprintf(compiler->out,"%ld,",a->len); + fprintf(compiler->out,"NULL,"); /* a->params */ + fprintf(compiler->out,"NULL,"); /* a->default_value */ + grib_compile_flags(compiler, act->flags); + fprintf(compiler->out,","); + if(act->name_space) { + fprintf(compiler->out,"\"%s\");",act->name_space); + } + else + { + fprintf(compiler->out,"NULL);"); + } + fprintf(compiler->out,"\n"); +} + + + diff --git a/src/action_class_when.c b/src/action_class_when.c new file mode 100644 index 000000000..f28b5aa7d --- /dev/null +++ b/src/action_class_when.c @@ -0,0 +1,249 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = create_accessor + IMPLEMENTS = dump;xref;compile + IMPLEMENTS = destroy;notify_change + MEMBERS = grib_expression *expression + MEMBERS = grib_action *block_true + MEMBERS = grib_action *block_false + MEMBERS = int loop + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void xref (grib_action* d, FILE* f,const char* path); +static void compile (grib_action* a, grib_compiler* compiler); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); +static int notify_change(grib_action* a, grib_accessor* observer,grib_accessor* observed); + + +typedef struct grib_action_when { + grib_action act; +/* Members defined in when */ + grib_expression *expression; + grib_action *block_true; + grib_action *block_false; + int loop; +} grib_action_when; + + +static grib_action_class _grib_action_class_when = { + 0, /* super */ + "action_class_when", /* name */ + sizeof(grib_action_when), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + &xref, /* xref */ + + &create_accessor, /* create_accessor*/ + + ¬ify_change, /* notify_change */ + 0, /* reparse */ + 0, /* execute */ + &compile, /* compile */ +}; + +grib_action_class* grib_action_class_when = &_grib_action_class_when; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +grib_action* grib_action_create_when( grib_context* context, + grib_expression* expression, + grib_action* block_true,grib_action* block_false) +{ + char name[1024]; + + grib_action_when* a ; + grib_action_class* c = grib_action_class_when; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"when"); + + act->cclass = c; + a = (grib_action_when*)act; + act->context = context; + + a->expression = expression; + a->block_true = block_true; + a->block_false = block_false; + + + sprintf(name,"_when%p",(void*)expression); + + act->name = grib_context_strdup_persistent(context,name); + + return act; +} + +static void compile(grib_action* act, grib_compiler *compiler) +{ + grib_action_when* a = (grib_action_when*)act; + char t[80]; + char f[80]; + + if(a->block_true) + grib_compile_action_branch(a->block_true, compiler,t); + else + strcpy(t,"NULL"); + + if(a->block_false) + grib_compile_action_branch(a->block_false, compiler,f); + else + strcpy(f,"NULL"); + + fprintf(compiler->out,"%s = grib_action_create_when(ctx,",compiler->var); + grib_compile_expression(a->expression, compiler); + fprintf(compiler->out,",%s,%s);\n", t,f); +} + + +static int create_accessor(grib_section* p, grib_action* act,grib_loader *h) +{ + grib_action_when* self = (grib_action_when*)act; + grib_accessor* as = grib_accessor_factory(p, act,0,0); + if(!as)return GRIB_INTERNAL_ERROR; + + grib_dependency_observe_expression(as,self->expression); + + grib_push_accessor(as,p->block); + + return GRIB_SUCCESS; +} + + +static void dump(grib_action* act, FILE* f, int lvl) +{ + grib_action_when* a = (grib_action_when*)act; + int i = 0; + + for (i=0;icontext,f," "); + + printf("when(%s) { ",act->name); + grib_expression_print(act->context,a->expression,0); + printf("\n"); + + grib_dump_action_branch(f,a->block_true,lvl+1); + + for (i=0;icontext,f," "); + printf("}"); + + if (a->block_false) { + printf(" else { "); + + grib_dump_action_branch(f,a->block_true,lvl+1); + + for (i=0;icontext,f," "); + printf("}"); + } + printf("\n"); +} + +static int notify_change(grib_action* a, grib_accessor* observer,grib_accessor* observed) +{ + grib_action_when* self = (grib_action_when*) a; + grib_action *b = NULL; + int ret = GRIB_SUCCESS; + long lres; + + if ((ret = grib_expression_evaluate_long(observed->parent->h, self->expression,&lres)) + != GRIB_SUCCESS) return ret; + + if(0 && self->loop) + { + printf("LOOP detected...\n"); + printf("WHEN triggered by %s %ld\n",observed->name,lres); + grib_expression_print(observed->parent->h->context,self->expression,0); + printf("\n"); + return ret; + } + + self->loop = 1; + + if(lres) + b=self->block_true; + else + b=self->block_false; + + while(b) { + ret = grib_action_execute(b,observed->parent->h); + if(ret != GRIB_SUCCESS) { + self->loop = 0; + return ret; + } + b = b->next; + } + + self->loop = 0; + + return GRIB_SUCCESS; +} + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_when* self = (grib_action_when*) act; + grib_action *t = self->block_true; + + + while(t) + { + grib_action *nt = t->next; + grib_free_action(context,t); + t = nt; + } + + t=self->block_false; + while(t) + { + grib_action *nt = t->next; + grib_free_action(context,t); + t = nt; + } + + grib_expression_free(context,self->expression); + + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); +} + +static void xref(grib_action* d, FILE* f,const char* path) +{ +} diff --git a/src/action_class_while.c b/src/action_class_while.c new file mode 100755 index 000000000..795998141 --- /dev/null +++ b/src/action_class_while.c @@ -0,0 +1,179 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + SUPER = action_class_section + IMPLEMENTS = create_accessor + IMPLEMENTS = dump + IMPLEMENTS = destroy + MEMBERS = grib_expression *expression + MEMBERS = grib_action *block_while + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void destroy (grib_context*,grib_action*); +static int create_accessor(grib_section*,grib_action*,grib_loader*); + + +typedef struct grib_action_while { + grib_action act; +/* Members defined in section */ +/* Members defined in while */ + grib_expression *expression; + grib_action *block_while; +} grib_action_while; + +extern grib_action_class* grib_action_class_section; + +static grib_action_class _grib_action_class_while = { + &grib_action_class_section, /* super */ + "action_class_while", /* name */ + sizeof(grib_action_while), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + &create_accessor, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + 0, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_while = &_grib_action_class_while; + +static void init_class(grib_action_class* c) +{ + c->xref = (*(c->super))->xref; + c->notify_change = (*(c->super))->notify_change; + c->reparse = (*(c->super))->reparse; + c->execute = (*(c->super))->execute; + c->compile = (*(c->super))->compile; +} +/* END_CLASS_IMP */ + +static void dump( grib_action* act, FILE* f, int lvl) +{ + grib_action_while* a = ( grib_action_while*)act; + int i = 0; + for (i=0;icontext,f," "); + grib_context_print(act->context,f,"Loop %s\n", act->name ); + grib_dump_action_branch(f,a->block_while,lvl+1); +} + +static int create_accessor(grib_section* p, grib_action* act,grib_loader* h) +{ + grib_action_while* a = ( grib_action_while*)act; + + grib_accessor* ga = NULL; + grib_section* gs = NULL; + grib_action* la = NULL; + grib_action* next = NULL; + int ret = 0; + /* long n = 0; */ + + ga = grib_accessor_factory(p, act,0,NULL); + if(!ga) return GRIB_BUFFER_TOO_SMALL; + gs = ga->sub_section; + + grib_push_accessor(ga,p->block); + + la = a->block_while; + + for(;;) + { + long val = 0; + + if ((ret=grib_expression_evaluate_long(p->h,a->expression,&val)) != GRIB_SUCCESS){ + grib_context_log(p->h->context, GRIB_LOG_DEBUG, " List %s creating %d values unable to evaluate long \n", act->name, val ); + return ret; + } + + /* printf("val=%ld %ld\n",val,n++); */ + + if(!val) + break; + + + next = la; + while(next){ + ret = grib_create_accessor(gs, next,h); + if(ret != GRIB_SUCCESS) return ret; + next= next->next; + } + } + return GRIB_SUCCESS; + +} + +grib_action* grib_action_create_while( grib_context* context, grib_expression* expression, grib_action* block) +{ + char name[80]; + grib_action_while* a ; + grib_action_class* c = grib_action_class_while; + grib_action* act = ( grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->cclass = c; + act->context = context; + a = ( grib_action_while*)act; + act->next = NULL; + + + sprintf(name,"_while%p",(void*)a); + act->name = grib_context_strdup_persistent(context,name); + act->op = grib_context_strdup_persistent(context,"section"); + a->expression = expression; + + a->block_while = block; + + grib_context_log(context, GRIB_LOG_DEBUG, " Action List %s is created \n",act->name); + return act; +} + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_while* self = ( grib_action_while*)act; + grib_action *a = self->block_while; + + while(a) + { + grib_action *na = a->next; + grib_free_action(context,a); + a = na; + } + + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + grib_expression_free(context, self->expression); + +} + diff --git a/src/action_class_write.c b/src/action_class_write.c new file mode 100755 index 000000000..21401cc11 --- /dev/null +++ b/src/action_class_write.c @@ -0,0 +1,203 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = action + IMPLEMENTS = dump + IMPLEMENTS = destroy;execute + MEMBERS = char *name + MEMBERS = int append + MEMBERS = int padtomultiple + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "action.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_action_class*); +static void dump (grib_action* d, FILE*,int); +static void destroy (grib_context*,grib_action*); +static int execute(grib_action* a,grib_handle* h); + + +typedef struct grib_action_write { + grib_action act; +/* Members defined in write */ + char *name; + int append; + int padtomultiple; +} grib_action_write; + + +static grib_action_class _grib_action_class_write = { + 0, /* super */ + "action_class_write", /* name */ + sizeof(grib_action_write), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + &destroy, /* destroy */ + + &dump, /* dump */ + 0, /* xref */ + + 0, /* create_accessor*/ + + 0, /* notify_change */ + 0, /* reparse */ + &execute, /* execute */ + 0, /* compile */ +}; + +grib_action_class* grib_action_class_write = &_grib_action_class_write; + +static void init_class(grib_action_class* c) +{ +} +/* END_CLASS_IMP */ + +extern int errno; + +grib_action* grib_action_create_write( grib_context* context, const char* name,int append,int padtomultiple) +{ + char buf[1024]; + + grib_action_write* a =NULL; + grib_action_class* c = grib_action_class_write; + grib_action* act = (grib_action*)grib_context_malloc_clear_persistent(context,c->size); + act->op = grib_context_strdup_persistent(context,"section"); + + act->cclass = c; + a = (grib_action_write*)act; + act->context = context; + + a->name = grib_context_strdup_persistent(context,name); + + sprintf(buf,"write%p",(void*)a->name); + + act->name = grib_context_strdup_persistent(context,buf); + a->append=append; + a->padtomultiple=padtomultiple; + + return act; +} + +static int execute(grib_action* act, grib_handle *h) +{ + int ioerr=0; + grib_action_write* a = (grib_action_write*) act; + int err =GRIB_SUCCESS; + size_t size; + const void* buffer=NULL; + char* filename; + char string[1024]={0,}; + + grib_file* of=NULL; + + if ((err=grib_get_message(h,&buffer,&size))!= GRIB_SUCCESS) { + grib_context_log(act->context,GRIB_LOG_ERROR,"unable to get message\n"); + return err; + } + + if (strlen(a->name)!=0) { + err = grib_recompose_name(h,NULL,a->name,string,0); + filename=string; + } else { + filename = act->context->outfilename ? act->context->outfilename : "filter.out"; + } + + if (a->append) of=grib_file_open(filename,"a",&err); + else of=grib_file_open(filename,"w",&err); + + if (!of || !of->handle) { + grib_context_log(act->context,GRIB_LOG_ERROR,"unable to open file %s\n",filename); + return GRIB_IO_PROBLEM; + } + + if (h->gts_header) { + if (fwrite(h->gts_header, 1, h->gts_header_len, of->handle) != h->gts_header_len) { + ioerr = errno; + grib_context_log(act->context, (GRIB_LOG_ERROR) | (GRIB_LOG_PERROR), + "Error writing GTS header to %s", filename); + return GRIB_IO_PROBLEM; + } + } + + if(fwrite(buffer,1,size,of->handle) != size) { + ioerr=errno; + grib_context_log(act->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "Error writing to %s",filename); + return GRIB_IO_PROBLEM; + } + + if (a->padtomultiple) { + char* zeros; + size_t padding=a->padtomultiple - size%a->padtomultiple; + /* printf("XXX padding=%d size=%d padtomultiple=%d\n",padding,size,a->padtomultiple); */ + zeros=calloc(padding,1); + if(fwrite(zeros,1,padding,of->handle) != padding) { + ioerr=errno; + grib_context_log(act->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "Error writing to %s",filename); + return GRIB_IO_PROBLEM; + } + free(zeros); + } + + if (h->gts_header) { + char gts_trailer[4]={'\x0D','\x0D','\x0A','\x03'}; + if (fwrite(gts_trailer, 1, 4, of->handle) != 4) { + ioerr = errno; + grib_context_log(act->context, (GRIB_LOG_ERROR) | (GRIB_LOG_PERROR), + "Error writing GTS trailer to %s", filename); + return GRIB_IO_PROBLEM; + } + } + + grib_file_close(filename,&err); + + if (err != GRIB_SUCCESS) { + grib_context_log(act->context,GRIB_LOG_ERROR,"unable to get message\n"); + return err; + } + + return err; +} + + +static void dump(grib_action* act, FILE* f, int lvl) +{ +} + + +static void destroy(grib_context* context,grib_action* act) +{ + grib_action_write* a = (grib_action_write*) act; + + grib_context_free_persistent(context, a->name); + grib_context_free_persistent(context, act->name); + grib_context_free_persistent(context, act->op); + +} diff --git a/src/build_jgribapi.sh b/src/build_jgribapi.sh new file mode 100755 index 000000000..beacd8873 --- /dev/null +++ b/src/build_jgribapi.sh @@ -0,0 +1 @@ +gcc -o libjgribapi.so -shared -Wl,-soname,jgribapi.so -I$JAVA_HOME/include -I$JAVA_HOME/include/linux grib_java_interface.c -static -lc -L. -lgrib_api diff --git a/src/compile.c b/src/compile.c new file mode 100644 index 000000000..a6c59dc07 --- /dev/null +++ b/src/compile.c @@ -0,0 +1,105 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ + +#include "grib_api_internal.h" + + +#define COMPILE_FLAGS(z) if(flags&z) { flags ^= ~z; fprintf(c->out,"%s%s",sep,#z);sep="|"; } + +void grib_compile_flags(grib_compiler* c,long flags) { + char *sep = ""; + + fprintf(c->out,"0x%ld",flags); + return; + + if(flags == 0) { + fprintf(c->out,"0"); + return; + } + + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_READ_ONLY); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_DUMP); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_CAN_BE_MISSING); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_HIDDEN); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_CONSTRAINT); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_OVERRIDE); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_NO_COPY); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_COPY_OK); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_FUNCTION); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_DATA); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_NO_FAIL); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_TRANSIENT); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_STRING_TYPE); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_LONG_TYPE); + COMPILE_FLAGS(GRIB_ACCESSOR_FLAG_LOWERCASE); + + if(flags) { + fprintf(stderr,"Unknown flags %lx\n", flags); + Assert(0); + } +} + + +void grib_compile_action_branch(grib_action* a,grib_compiler* c, char* name) +{ + int first = 1; + char var[80]; + char tmp[80]; + const char* save = c->var; + int n = c->cnt++; + c->var = tmp; + if(c->cnt >= c->max) { + fprintf(stderr,"Not enough variables %d\n",c->max); + Assert(0); + } + sprintf(var,"a[%d]", n); + while(a) + { + if(first) sprintf(tmp,"%s",var); else sprintf(tmp,"b[%d]->next",n); + grib_compile(a,c); + fprintf(c->out,"b[%d] = %s;\n",n, c->var); + a=a->next; + first = 0; + } + c->var = save; + + if(name) strcpy(name, var); +} + +void grib_compile_expression(grib_expression* e, grib_compiler *compiler) +{ + if(!e) + { + fprintf(compiler->out,"NULL"); + } + else + { + grib_expression_compile(e,compiler); + } +} + +void grib_compile_arguments(grib_arguments* a, grib_compiler *compiler) +{ + if(!a) + fprintf(compiler->out,"NULL"); + else { + fprintf(compiler->out, "grib_arguments_new(ctx,"); + grib_compile_expression(a->expression, compiler); + fprintf(compiler->out, ","); + grib_compile_arguments(a->next,compiler); + fprintf(compiler->out, ")"); + } +} diff --git a/src/dummy.am b/src/dummy.am new file mode 100644 index 000000000..e69de29bb diff --git a/src/dummy_yyunput b/src/dummy_yyunput new file mode 100644 index 000000000..0933ec369 --- /dev/null +++ b/src/dummy_yyunput @@ -0,0 +1,5 @@ + + void grib_dummy() { + grib_yyunput(1,0); + } + diff --git a/src/errors.pl b/src/errors.pl new file mode 100755 index 000000000..51e14e96c --- /dev/null +++ b/src/errors.pl @@ -0,0 +1,166 @@ +#!/usr/bin/perl + +use Data::Dumper; + +use strict; use warnings; + +my $internal = get_internal_errors(); +my $public = get_public_errors(); + +write_public($public); +#write_internal($internal); +write_C_errors($public,$internal); +write_F90_errors($public); +write_python_errors($public); + +sub write_python_errors { + my $errdict = shift; + + open(H,">grib_errors.h.new") or die "grib_errors.h.new: $!"; + open(IN,") { + if (/^!ERRORS/) { + foreach my $code (reverse sort {$a<=>$b} keys %{$errdict}) { + my $desc = $errdict->{$code}; + print H "/** $desc->{text} */\n"; + print H "#define $desc->{name}\t\t$code\n"; + } + } else { + print H; + } + } + + close(H); + close(IN); +} + +sub write_F90_errors { + my $errdict = shift; + + open(F,">grib_api_constants.h.new") or die "grib_api_constants.h.new: $!"; + + foreach (sort {$a<=>$b} keys %{$errdict}){ + printf F " integer, parameter,public :: %-50s = %d\n", + $errdict->{$_}{name},$_; + } + printf F " integer, parameter,public :: %-50s = %d\n","GRIB_NULL",-1; + + close(F); +} + +sub write_C_errors { + my ($public,$internal) = @_; + + open(C,">grib_errors.c.new") or die "grib_errors.c.new: $!"; + open(IN,") { + if (/^!ERRORS/) { + foreach (reverse sort {$a<=>$b} keys %{$public}) { + my $desc = $public->{$_}; + print C "\"$desc->{text}\",\t\t/* $_ $desc->{name} */\n"; + } + + foreach (sort {$a<=>$b} keys %{$internal}) { + my $desc = $internal->{$_}; + print C "\"$desc->{text}\",\t\t/* $_ $desc->{name} */\n"; + } + } else { + print C; + } + } + + close(C); + close(IN); +} + +sub write_public { + my $errdict = shift; + + open(GAH,"grib_api.h.new") or die "grib_api.h.new: $!"; + open(IN,") { + last if /This part is automatically generated/; + print H; + } + + foreach () { + if (/^!ERRORS/) { + foreach my $code (reverse sort {$a<=>$b} keys %{$errdict}) { + my $desc = $errdict->{$code}; + print H "/** $desc->{text} */\n"; + print H "#define $desc->{name}\t\t$code\n"; + } + } else { + print H; + } + } + + close(GAH); + close(H); + close(IN); +} + +sub write_internal { + my $errdict = shift; + + open(GAH,"grib_api_internal.h.new") or die "grib_api_internal.h.new: $!"; + open(IN,") { + last if /This part is automatically generated/; + print H; + } + + foreach () { + if (/^!ERRORS/) { + foreach my $code (sort {$a<=>$b} keys %{$errdict}) { + my $desc = $errdict->{$code}; + print H "/** $desc->{text} */\n"; + print H "#define $desc->{name}\t\t$code\n"; + } + } else { + print H; + } + } + + close(GAH); + close(H); + close(IN); +} + +sub get_public_errors { + open(IN,") { + next unless(/^GRIB_/); + chomp; + my ($name,$text) = split(" ",$_,2); + $temp{$code}{name} = $name; + $temp{$code}{text} = $text; + $code--; + } + close(IN); + return \%temp; +} + +sub get_internal_errors { + open(INI,") { + next unless(/^GRIB_/); + chomp; + my ($name,$text) = split(" ",$_,2); + $temp{$code}{name} = $name; + $temp{$code}{text} = $text; + $code++; + } + close(INI); + return \%temp; +} diff --git a/src/extrules.am b/src/extrules.am new file mode 100644 index 000000000..126f90037 --- /dev/null +++ b/src/extrules.am @@ -0,0 +1,43 @@ +.grib.c:; ./grib2c.pl $< +# .req.grib:; mars $< + +grib_errors.c : grib_errors.txt errors.pl + ./errors.pl + cmp grib_errors.c grib_errors.c.new || (p4 edit grib_errors.c ; cp grib_errors.c.new grib_errors.c) + cmp grib_api.h grib_api.h.new || (p4 edit grib_api.h ; cp grib_api.h.new grib_api.h) + cmp ../fortran/grib_api_constants.h grib_api_constants.h.new || (p4 edit ../fortran/grib_api_constants.h ; cp grib_api_constants.h.new ../fortran/grib_api_constants.h) + cmp ../python/grib_errors.h grib_errors.h.new || (p4 edit ../python/grib_errors.h ; cp grib_errors.h.new ../python/grib_errors.h) + + +proto:;-p4 edit grib_api_prototypes.h;mkptypes -A $(libgrib_api_a_prototypes) $(libgrib_api_extra_prototypes) > grib_api_prototypes.h +test:all;(cd ../tests; make tests) + +templates: + -p4 edit grib_templates.h + ./grib2c.pl ../templates/*.grib + +grib_lex.c : gribl.l grib_yacc.h + $(LEX) gribl.l + p4 edit grib_lex.c + sed 's/yy/grib_yy/g' < $(LEX_OUTPUT_ROOT).c | sed 's/static void grib_yyunput/void grib_yyunput/' > grib_lex1.c + sed 's/fgetc/getc/g' < grib_lex1.c > grib_lex.c + rm -f grib_lex1.c + rm -f $(LEX_OUTPUT_ROOT).c + +grib_yacc.h grib_yacc.c : griby.y + $(YACC) -d griby.y + p4 edit grib_yacc.c + sed 's/yy/grib_yy/g' < y.tab.c > grib_yacc1.c + sed 's/fgetc/getc/g' < grib_yacc1.c > grib_yacc.c + rm -f grib_yacc1.c + p4 edit grib_yacc.h + sed 's/yy/grib_yy/g' < y.tab.h > grib_yacc.h + rm -f y.tab.c y.tab.h + +hash_keys: + ./make_hash_keys.ksh + +grib_accessor_classes_hash.c: + ./make_accessor_class_hash.ksh + +SUFFIXES= .conf .grib .req .txt diff --git a/src/functions.c b/src/functions.c new file mode 100644 index 000000000..a673e2537 --- /dev/null +++ b/src/functions.c @@ -0,0 +1,98 @@ +#include "grib_api_internal.h" + +long grib_op_eq(long a, long b) {return a == b;} +long grib_op_ne(long a, long b) {return a != b;} +long grib_op_lt(long a, long b) {return a < b;} +long grib_op_gt(long a, long b) {return a > b;} +long grib_op_and(long a, long b) {return a && b;} +long grib_op_or(long a, long b) {return a || b;} +long grib_op_ge(long a, long b) {return a >= b;} +long grib_op_le(long a, long b) {return a <= b;} + +long grib_op_bit(long a, long b) {return a&(1< b;} +double grib_op_ge_d(double a, double b) {return a >= b;} +double grib_op_le_d(double a, double b) {return a <= b;} + + +#define LOOKUP(a) if(proc == a) {return "&"#a;} +const char* grib_binop_long_proc_name(grib_binop_long_proc proc) { + if(!proc) return "NULL"; + LOOKUP(grib_op_eq); + LOOKUP(grib_op_ne); + LOOKUP(grib_op_lt); + LOOKUP(grib_op_gt); + LOOKUP(grib_op_and); + LOOKUP(grib_op_or); + LOOKUP(grib_op_ge); + LOOKUP(grib_op_le); + LOOKUP(grib_op_bit); + LOOKUP(grib_op_bitoff); + LOOKUP(grib_op_pow); + LOOKUP(grib_op_add); + LOOKUP(grib_op_sub); + LOOKUP(grib_op_div); + LOOKUP(grib_op_mul); + LOOKUP(grib_op_modulo); + fprintf(stderr,"Cannot find grib_binop_long_proc\n"); + Assert(0); + return NULL; +} + +const char* grib_binop_double_proc_name(grib_binop_double_proc proc) { + if(!proc) return "NULL"; + LOOKUP(grib_op_mul_d); + LOOKUP(grib_op_div_d); + LOOKUP(grib_op_add_d); + LOOKUP(grib_op_sub_d); + LOOKUP(grib_op_eq_d); + LOOKUP(grib_op_ne_d); + LOOKUP(grib_op_lt_d); + LOOKUP(grib_op_gt_d); + LOOKUP(grib_op_ge_d); + LOOKUP(grib_op_le_d); + fprintf(stderr,"Cannot find grib_binop_double_proc_name\n"); + Assert(0); + return NULL; +} + +const char* grib_unop_long_proc_name(grib_unop_long_proc proc) { + if(!proc) return "NULL"; + LOOKUP(grib_op_not); + LOOKUP(grib_op_neg); + fprintf(stderr,"Cannot find grib_unop_long_proc_name\n"); + Assert(0); + return NULL; +} + +const char* grib_unop_double_proc_name(grib_unop_double_proc proc) { + if(!proc) return "NULL"; + LOOKUP(grib_op_neg_d); + fprintf(stderr,"Cannot find grib_unop_double_proc_name\n"); + Assert(0); + return NULL; +} diff --git a/src/grib2c.pl b/src/grib2c.pl new file mode 100755 index 000000000..f1f6eda0f --- /dev/null +++ b/src/grib2c.pl @@ -0,0 +1,70 @@ +#!/usr/bin/perl +use strict; +use Data::Dumper; + +my $name; +my %entries; + +system("p4 edit grib_templates.h"); +open(OUT,">grib_templates.h") or "die grib_templates.h: $!"; +print OUT "/* This file is automatically generated by $0, do not edit */\n\n"; + +foreach $name ( @ARGV ) +{ + + $name =~ /(\w+)\.grib/; + my $proc = $1; + + print "$name\n"; + + open(IN,"<$name") or die "$name: $!"; + + my $ccproc = $proc; + $ccproc =~ s/\W/_/; + + print OUT << "EOF"; + +/* + $name +*/ + +unsigned char _grib_template_${ccproc}\[\] = { + +EOF + + my $len; my $data; + my $size = 0; + + while (($len = read(IN,$data,8))) + { + foreach my $x ( unpack('C*', $data) ) + { + printf OUT " 0x%02x,", $x; + $size++; + } + print OUT "\n"; + } + + + print OUT << "EOF"; + +}; + + +EOF + + $entries{"\t{\"$proc\", _grib_template_${ccproc}, $size, },"}++; + +} + + +print OUT "\nstatic grib_templates templates[] = {\n"; + +foreach my $k ( sort keys %entries ) +{ + print OUT "$k\n"; +} + +print OUT "};\n\n"; + +close(OUT) or "die grib_templates.h: $!"; diff --git a/src/grib_2order_packer_simple.c b/src/grib_2order_packer_simple.c new file mode 100644 index 000000000..f216bc2e1 --- /dev/null +++ b/src/grib_2order_packer_simple.c @@ -0,0 +1,103 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +static unsigned long calc_pow_2(unsigned long op){ + unsigned long a = 1; + while(op--) a*=2; + return a; +} + +static int calc_bits_needed(unsigned long spread){ + int nbit = 0; + if (spread == 0) return nbit; + while (spread>0){ + spread/=2; + nbit++; + } + return nbit; +} + +static int find_next_group(const unsigned long* vals, size_t len, unsigned long w, unsigned long l,unsigned long* nbits, unsigned long* groupsize, long* r_val){ + long lmin = 0; + long lmax = 0; + + size_t i = 0; + if (len <=0 ) return GRIB_ARRAY_TOO_SMALL; + lmin = vals[0]; + lmax = lmin; + + while(i < len){ + if(vals[i] < lmin) lmin = vals[i]; + if(vals[i] > lmax) lmax = vals[i]; + Assert((lmax-lmin) >= 0); + *nbits = calc_bits_needed(lmax-lmin); + *r_val = lmin; + i++; + *groupsize = i; + + if(*groupsize > l-2) return GRIB_SUCCESS; + if(*nbits > w-2) return GRIB_SUCCESS; + } + + return GRIB_SUCCESS; +} + +void grib_free_second_order_groups(grib_context *c,second_order_packed* sp){ + if(!sp) return; + grib_context_free(c,sp->array_of_group_size); + grib_context_free(c,sp->array_of_group_refs); + grib_context_free(c,sp->array_of_group_width); + grib_context_free(c,sp); +} +second_order_packed* grib_get_second_order_groups(grib_context *c, const unsigned long* vals, size_t len){ + second_order_packed* s = grib_context_malloc_clear(c,sizeof(second_order_packed)); + const unsigned long* group_val = vals; + size_t nv = len; + size_t i = 0; + unsigned long nbit_per_group; + unsigned long size_of_group; + long ref_of_group; + + s->packed_byte_count = 0; + s->nbits_per_group_size = 6; + s->nbits_per_widths = 4; + s->size_of_group_array = 0; + + while(find_next_group(group_val, nv, calc_pow_2(s->nbits_per_widths), calc_pow_2(s->nbits_per_group_size ), &nbit_per_group, &size_of_group, &ref_of_group) == GRIB_SUCCESS){ + s->size_of_group_array += 1; + nv -= size_of_group; + group_val += size_of_group; + s->packed_byte_count += size_of_group*nbit_per_group; + } + s->packed_byte_count = ((s->packed_byte_count+7)/8); + + + s->array_of_group_size = grib_context_malloc_clear(c,sizeof(unsigned long)*s->size_of_group_array); + s->array_of_group_width = grib_context_malloc_clear(c,sizeof(unsigned long)*s->size_of_group_array); + s->array_of_group_refs = grib_context_malloc_clear(c,sizeof( long)*s->size_of_group_array); + + group_val = vals; + nv = len; + + while(find_next_group(group_val, nv, calc_pow_2(s->nbits_per_widths), calc_pow_2(s->nbits_per_group_size ), &nbit_per_group, &size_of_group, &ref_of_group) == GRIB_SUCCESS){ + nv -= size_of_group; + group_val += size_of_group; + Assert(isize_of_group_array); + s->array_of_group_size[i] = size_of_group; + s->array_of_group_width[i] = nbit_per_group; + s->array_of_group_refs[i] = ref_of_group; + i++; + + } + + return s; +} diff --git a/src/grib_accessor.c b/src/grib_accessor.c new file mode 100644 index 000000000..4d75d1468 --- /dev/null +++ b/src/grib_accessor.c @@ -0,0 +1,544 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 + * Enrico Fucile + * * + ***************************************************************************/ + +#include "grib_api_internal.h" + +void grib_print_accessor(grib_accessor* a, grib_dumper* f) +{ + grib_accessor_class *c = a->cclass; + while(c) + { + + if(c->dump) + { + c->dump(a, f); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + + +int grib_pack_missing(grib_accessor* a) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + while(c) + { + if(c->pack_missing) + { + return c->pack_missing(a); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_pack_zero(grib_accessor* a) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + while(c) + { + if(c->clear) + { + return c->clear(a); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + + + +int grib_is_missing_internal(grib_accessor* a) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + while(c) + { + if(c->is_missing) + { + return c->is_missing(a); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} +int grib_pack_double(grib_accessor* a, const double* v, size_t *len ) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + while(c) + { + if(c->pack_double) + { + return c->pack_double(a,v,len); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_pack_expression(grib_accessor* a, grib_expression *e ) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + while(c) + { + if(c->pack_expression) + { + return c->pack_expression(a,e); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + + +int grib_pack_string(grib_accessor* a, const char* v, size_t *len ) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (string) %s",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?v:"(null)");*/ + while(c) + { + + if(c->pack_string) + { + return c->pack_string(a,v,len); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_pack_long(grib_accessor* a,const long* v, size_t *len ) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + while(c) + { + if(c->pack_long) + { + return c->pack_long(a,v,len); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_pack_bytes(grib_accessor* a, const unsigned char* v, size_t *len ) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (bytes) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + while(c) + { + if(c->pack_bytes) + { + return c->pack_bytes(a,v,len); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_unpack_bytes(grib_accessor* a, unsigned char* v, size_t *len ) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (bytes)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); */ + while(c) + { + if(c->unpack_bytes) + { + return c->unpack_bytes(a,v,len); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_unpack_double_subarray(grib_accessor* a, double* v, size_t start, size_t len ) +{ + grib_accessor_class *c = a->cclass; + while(c) + { + if(c->unpack_double_subarray) + { + return c->unpack_double_subarray(a,v,start,len); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_unpack_double(grib_accessor* a, double* v, size_t *len ) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (double)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); */ + while(c) + { + if(c->unpack_double) + { + return c->unpack_double(a,v,len); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_unpack_double_element(grib_accessor* a, size_t i ,double* v ) +{ + grib_accessor_class *c = a->cclass; + while(c) + { + if(c->unpack_double_element) + { + return c->unpack_double_element(a,i,v); + } + c = c->super ? *(c->super) : NULL; + } + return GRIB_NOT_IMPLEMENTED; +} + +int grib_unpack_string(grib_accessor* a, char* v, size_t *len ) +{ + grib_accessor_class *c = a->cclass; + /* grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (string)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); */ + while(c) + { + if(c->unpack_string) + { + return c->unpack_string(a,v,len); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_unpack_long(grib_accessor* a,long* v, size_t *len ) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is unpacking (long)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); */ + while(c) + { + if(c->unpack_long) + { + return c->unpack_long(a,v,len); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +long grib_accessor_get_native_type(grib_accessor* a) +{ + grib_accessor_class *c = NULL; + if (a) c = a->cclass; + + while(c) + { + if(c->get_native_type) + return c->get_native_type(a); + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +long grib_get_next_position_offset(grib_accessor* a) +{ + grib_accessor_class *c = NULL; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is checking next (long)",(a->parent->owner)?(a->parent->owner->name):"root", a->name ); */ + if (a) c = a->cclass; + + while(c) + { + if(c->next_offset) + return c->next_offset(a); + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +long grib_string_length(grib_accessor* a) +{ + grib_accessor_class *c = NULL; + if (a) c = a->cclass; + + while(c) + { + if(c->string_length) + return c->string_length(a); + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +long grib_byte_offset(grib_accessor* a) +{ + grib_accessor_class *c = NULL; + if (a) c = a->cclass; + + while(c) + { + if(c->byte_offset) + return c->byte_offset(a); + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +long grib_byte_count(grib_accessor* a) +{ + grib_accessor_class *c = NULL; + if (a) c = a->cclass; + + while(c) + { + if(c->byte_count) + return c->byte_count(a); + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +long grib_value_count(grib_accessor* a) +{ + grib_accessor_class *c = NULL; + if (a) c = a->cclass; + + while(c) + { + if(c->value_count) + return c->value_count(a); + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +int grib_accessor_notify_change(grib_accessor* a,grib_accessor* changed) +{ + grib_accessor_class *c = NULL; + if (a) c = a->cclass; + + while(c) + { + if(c->notify_change) + return c->notify_change(a,changed); + c = c->super ? *(c->super) : NULL; + } + printf("notify_change not implemented for %s %s\n",a->cclass->name,a->name); + Assert(0); + return 0; +} + + +/* For this one, ALL init are called */ + +static void init_accessor(grib_accessor_class* c,grib_accessor* a, const long len, grib_arguments* args) +{ + if(c) { + grib_accessor_class *s = c->super ? *(c->super) : NULL; + if(!c->inited) + { + if(c->init_class) c->init_class(c); + c->inited = 1; + } + init_accessor(s,a,len,args); + if(c->init) c->init(a,len, args); + } +} + +void grib_init_accessor(grib_accessor* a, const long len, grib_arguments* args) +{ + init_accessor(a->cclass,a,len,args); +} + +#if 0 +static void post_init_accessor(grib_accessor_class* c,grib_accessor* a) +{ + if(c) { + grib_accessor_class *s = c->super ? *(c->super) : NULL; + post_init_accessor(s,a); + if(c->post_init) c->post_init(a); + } +} +#endif + +/* For this one, ALL destroy are called */ + +void grib_free_accessor(grib_context *ct, grib_accessor* a) +{ + grib_accessor_class *c = a->cclass; + while(c) + { + grib_accessor_class *s = c->super ? *(c->super) : NULL; + if(c->destroy) c->destroy(ct,a); + c = s; + } + grib_context_free(ct,a); +} + + +void grib_update_size(grib_accessor* a, size_t len ) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + while(c) + { + if(c->update_size) + { + c->update_size(a,len); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + +int grib_nearest_smaller_value(grib_accessor* a,double val,double* nearest) +{ + grib_accessor_class *c = a->cclass; + while(c) + { + if(c->nearest_smaller_value) + { + return c->nearest_smaller_value(a,val,nearest); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + + +size_t grib_preferred_size(grib_accessor* a,int from_handle) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + while(c) + { + if(c->preferred_size) + { + return c->preferred_size(a,from_handle); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +grib_accessor* grib_next_accessor(grib_accessor* a) +{ + grib_accessor_class *c = a->cclass; + while(c) + { + if(c->next) + { + return c->next(a,1); + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return 0; +} + +void grib_resize(grib_accessor* a,size_t new_size) +{ + grib_accessor_class *c = a->cclass; + /*grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, "(%s)%s is packing (long) %d",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0); */ + while(c) + { + if(c->resize) + { + c->resize(a,new_size); + return ; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); + return; +} + +int grib_compare_accessors(grib_accessor* a1,grib_accessor* a2,int compare_flags) { + int ret=0; + long type1=0; + long type2=0; + int type_mismatch=0; + grib_accessor_class *c1=NULL; + + if ((compare_flags & GRIB_COMPARE_NAMES) && strcmp(a1->name,a2->name)) + return GRIB_NAME_MISMATCH; + + if ( compare_flags & GRIB_COMPARE_TYPES ) { + type1=grib_accessor_get_native_type( a1 ); + type2=grib_accessor_get_native_type( a2 ); + + type_mismatch = type1 != type2 ? 1 : 0; + } + + ret=GRIB_UNABLE_TO_COMPARE_ACCESSORS; + c1 = a1->cclass; + while(c1) + { + + if(c1->compare) + { + ret = c1->compare(a1, a2); + break; + } + c1 = c1->super ? *(c1->super) : NULL; + } + + if (ret == GRIB_VALUE_MISMATCH && type_mismatch) + ret = GRIB_TYPE_AND_VALUE_MISMATCH; + + return ret; +} + +const char* grib_get_type_name(int type) +{ + switch(type) + { + case GRIB_TYPE_LONG: return "long"; break; + case GRIB_TYPE_STRING: return "string"; break; + case GRIB_TYPE_BYTES: return "bytes"; break; + case GRIB_TYPE_DOUBLE: return "double"; break; + case GRIB_TYPE_LABEL: return "label"; break; + case GRIB_TYPE_SECTION: return "section"; break; + } + + return "unknown"; +} diff --git a/src/grib_accessor_class.c b/src/grib_accessor_class.c new file mode 100644 index 000000000..04079d9f2 --- /dev/null +++ b/src/grib_accessor_class.c @@ -0,0 +1,369 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include "grib_accessor_classes_hash.c" +/* grib level */ + + +/* This file is generated my ./make_class.pl */ +#include "grib_accessor_class.h" + +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; + +static void init() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex1,&attr); + pthread_mutexattr_destroy(&attr); + +} +#endif + +struct table_entry +{ + char *type; + grib_accessor_class **cclass; +}; + +static GRIB_INLINE int grib_inline_strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} + +static struct table_entry table[] = +{ + /* This file is generated my ./make_class.pl */ +#include "grib_accessor_factory.h" +}; + +#define NUMBER(x) (sizeof(x)/sizeof(x[0])) + +grib_section* grib_create_root_section(const grib_context *context, grib_handle *h) +{ + char* fpath=0; + grib_section* s = (grib_section*) grib_context_malloc_clear(context,sizeof(grib_section)); + + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex1); + if(h->context->grib_reader == NULL) { + if ((fpath=grib_context_full_path(h->context,"boot.def"))==NULL) { + grib_context_log(h->context,GRIB_LOG_FATAL, + "Unable to find boot.def "); + } + grib_parse_file(h->context,fpath); + } + GRIB_MUTEX_UNLOCK(&mutex1); + + s->h = h; + s->aclength = NULL; + s->owner = NULL; + s->block = (grib_block_of_accessors*) + grib_context_malloc_clear(context, sizeof(grib_block_of_accessors)); + grib_context_log(context, GRIB_LOG_DEBUG, "Creating root section"); + return s; +} + + +static GRIB_INLINE grib_accessor_class* get_class(grib_context* c,char* type) { + int i; + grib_accessor_class** class=NULL; + + if ( (class=grib_trie_get(c->classes,type))!=NULL) + return *(class); + + for(i = 0; i < NUMBER(table) ; i++) { + if( grib_inline_strcmp(type,table[i].type) == 0 ) + { + grib_trie_insert(c->classes,type,table[i].cclass); + return *(table[i].cclass); + } + } + grib_context_log(c,GRIB_LOG_FATAL,"unable to create class %s",type); + return NULL; +} + +grib_accessor* grib_accessor_factory(grib_section* p, grib_action* creator, + const long len, grib_arguments* params) +{ + grib_accessor_class* c=NULL; + grib_accessor* a=NULL; + size_t size=0; + + c = get_class(p->h->context,creator->op); + /* c=*((grib_accessor_classes_hash(creator->op,strlen(creator->op)))->cclass); */ + + a = (grib_accessor*) grib_context_malloc_clear(p->h->context,c->size); + + a->name = creator->name; + a->name_space = creator->name_space; + + a->all_names[0] = creator->name; + a->all_name_spaces[0] = creator->name_space; + + a->creator = creator; + a->next = NULL; + a->previous = NULL; + a->parent = p; + a->length = 0 ; + a->offset = 0; + a->flags = creator->flags; + a->set = creator->set; + + if(p->block->last) { + a->offset = grib_get_next_position_offset(p->block->last); + #if 0 + printf("offset: p->block->last %s %s %ld %ld\n", + p->block->last->cclass->name, + p->block->last->name,(long)p->block->last->offset,(long)p->block->last->length); + #endif + } else { + if(p->owner) { + a->offset = p->owner->offset; + } else + a->offset = 0; + } + + a->cclass = c; + + grib_init_accessor(a, len, params); + size = grib_get_next_position_offset(a); + + if(size > p->h->buffer->ulength) { + if(!p->h->buffer->growable) { + if(!p->h->partial) + grib_context_log(p->h->context, GRIB_LOG_ERROR, + "Creating (%s)%s of %s at offset %d-%d over message boundary (%d)", + p->owner?p->owner->name : "" ,a->name , + creator->op, a->offset, + a->offset + a->length, + p->h->buffer->ulength); + + grib_free_accessor(p->h->context,a); + return NULL; + } else { + grib_context_log(p->h->context,GRIB_LOG_DEBUG, + "CREATE: name=%s class=%s offset=%ld length=%ld action=", + a->name,a->cclass->name,a->offset,a->length); + + grib_grow_buffer(p->h->context,p->h->buffer,size); + p->h->buffer->ulength = size; + } + } + + + if(p->owner) + grib_context_log(p->h->context, GRIB_LOG_DEBUG, + "Creating (%s)%s of %s at offset %d [len=%d]", + p->owner->name ,a->name ,creator->op, a->offset,len,p->block); + else + grib_context_log(p->h->context, GRIB_LOG_DEBUG, + "Creating root %s of %s at offset %d [len=%d]", + a->name ,creator->op, a->offset,len,p->block); + + return a; +} + +void grib_push_accessor(grib_accessor* a, grib_block_of_accessors* l) +{ + int id; + if (!l->first) + l->first = l->last = a; + else{ + l->last->next = a; + a->previous = l->last; + } + l->last = a; + + + if (a->parent->h->use_trie) { + if (*(a->all_names[0]) != '_') { + id=grib_hash_keys_get_id(a->parent->h->context->keys,a->all_names[0]); + + + a->same=a->parent->h->accessors[id]; + a->parent->h->accessors[id]=a; + + if(a->same == a) { + fprintf(stderr,"---> %s\n",a->name); + Assert(a->same != a); + } + } + } + +} + +void grib_section_post_init(grib_section* s) +{ + grib_accessor* a = s ? s->block->first : NULL; + + while(a ) { + grib_accessor_class* c=a->cclass; + if(c->post_init) c->post_init(a); + if (a->sub_section) + grib_section_post_init(a->sub_section); + a = a->next; + } + +} + +void grib_section_adjust_sizes(grib_section* s,int update,int depth) +{ + grib_accessor* a = s ? s->block->first : NULL; + size_t length = update ? 0 : (s?s->padding:0); + size_t offset = (s && s->owner) ? s->owner->offset:0; + int force_update = update > 1; + + while(a) { + register long l; + /* grib_section_adjust_sizes(grib_get_sub_section(a),update,depth+1); */ + grib_section_adjust_sizes(a->sub_section,update,depth+1); + + l = a->length; + + if(offset != a->offset) { + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG,"Offset mismatch %s A->offset %ld offset %ld\n",a->name,(long)a->offset, (long)offset); + a->offset = offset; + } + length += l; + offset += l; + a = a->next; + } + + if(s) + { + if(s->aclength) + { + size_t len = 1; + long plen = 0; + int lret=grib_unpack_long(s->aclength, &plen, &len); + Assert( lret == GRIB_SUCCESS); + /* This happens when there is some padding */ + if((plen != length) || force_update) + { + if(update) + { + plen = length; + lret=grib_pack_long(s->aclength, &plen, &len); + Assert(lret == GRIB_SUCCESS); + s->padding = 0; + } + else { + if(!s->h->partial) { + if(length >= plen) + { + grib_context_log(s->h->context,GRIB_LOG_ERROR,"Invalid size %ld found for %s, assuming %ld", + (long)plen,s->owner->name,(long)length); + plen = length; + } + s->padding = plen - length; + } + length = plen; + } + } + } + + if(s->owner) s->owner->length = length; + s->length = length; + } + +} + +int grib_get_block_length(grib_section* s, size_t *l) +{ + *l = s->length; + return GRIB_SUCCESS; +#if 0 + + /* TODO: Because grib_pack_long takes a SIGNED value, we may have problems */ + + if(s->aclength) + { + size_t len = 1; + long plen = 0; + + int ret = grib_unpack_long(s->aclength, &plen, &len); + if(ret == GRIB_SUCCESS && plen != 0) + { + *l = plen; + return GRIB_SUCCESS; + } + } + + /* empty block */ + if(s->block->first == NULL) + { + *l = 0; + return GRIB_SUCCESS; + } + /* no accessor for block length */ + if(s->owner) + *l = grib_get_next_position_offset(s->block->last) - s->owner->offset; + else + *l = grib_get_next_position_offset(s->block->last); + + + if(s->aclength) + { + size_t len = 1; + long plen = *l; + + int ret = grib_pack_long(s->aclength, &plen, &len); + if(ret != GRIB_SUCCESS) + ; + if(s->h->context->debug) + printf("SECTION updating length %ld %s\n",plen,s->owner->name); + } + + /* + if(s->aclength) + Assert(*l == plen);*/ + + return GRIB_SUCCESS; +#endif +} + + +grib_accessor* find_paddings(grib_section* s) +{ + grib_accessor* a = s ? s->block->first : NULL; + + while(a) + { + /* grib_accessor* p = find_paddings(grib_get_sub_section(a)); */ + grib_accessor* p = find_paddings(a->sub_section); + if(p) return p; + + if(grib_preferred_size(a,0) != a->length) + return a; + + a = a->next; + } + + return NULL; +} + +void grib_update_paddings(grib_section* s) +{ + grib_accessor* last = NULL; + grib_accessor* changed; + + /* while((changed = find_paddings(s)) != NULL) */ + while((changed = find_paddings(s->h->root)) != NULL) + { + Assert(changed != last); + grib_resize(changed,grib_preferred_size(changed,0)); + last = changed; + } +} diff --git a/src/grib_accessor_class.h b/src/grib_accessor_class.h new file mode 100644 index 000000000..4b51fdeb6 --- /dev/null +++ b/src/grib_accessor_class.h @@ -0,0 +1,168 @@ +/* This file is automatically generated by ./make_class.pl, do not edit */ +extern grib_accessor_class* grib_accessor_class_abstract_long_vector; +extern grib_accessor_class* grib_accessor_class_abstract_vector; +extern grib_accessor_class* grib_accessor_class_array; +extern grib_accessor_class* grib_accessor_class_ascii; +extern grib_accessor_class* grib_accessor_class_assert; +extern grib_accessor_class* grib_accessor_class_bit; +extern grib_accessor_class* grib_accessor_class_bitmap; +extern grib_accessor_class* grib_accessor_class_bits; +extern grib_accessor_class* grib_accessor_class_bits_per_value; +extern grib_accessor_class* grib_accessor_class_box; +extern grib_accessor_class* grib_accessor_class_budgdate; +extern grib_accessor_class* grib_accessor_class_bytes; +extern grib_accessor_class* grib_accessor_class_change_scanning_direction; +extern grib_accessor_class* grib_accessor_class_codeflag; +extern grib_accessor_class* grib_accessor_class_codetable; +extern grib_accessor_class* grib_accessor_class_codetable_title; +extern grib_accessor_class* grib_accessor_class_codetable_units; +extern grib_accessor_class* grib_accessor_class_concept; +extern grib_accessor_class* grib_accessor_class_constant; +extern grib_accessor_class* grib_accessor_class_count_file; +extern grib_accessor_class* grib_accessor_class_count_missing; +extern grib_accessor_class* grib_accessor_class_count_total; +extern grib_accessor_class* grib_accessor_class_data_2order_packing; +extern grib_accessor_class* grib_accessor_class_data_2order_packing_count; +extern grib_accessor_class* grib_accessor_class_data_apply_bitmap; +extern grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic; +extern grib_accessor_class* grib_accessor_class_data_apply_gdsnotpresent; +extern grib_accessor_class* grib_accessor_class_data_complex_packing; +extern grib_accessor_class* grib_accessor_class_data_constant_field; +extern grib_accessor_class* grib_accessor_class_data_dummy_field; +extern grib_accessor_class* grib_accessor_class_data_g1complex_packing; +extern grib_accessor_class* grib_accessor_class_data_g1second_order_constant_width_packing; +extern grib_accessor_class* grib_accessor_class_data_g1second_order_general_extended_packing; +extern grib_accessor_class* grib_accessor_class_data_g1second_order_general_packing; +extern grib_accessor_class* grib_accessor_class_data_g1second_order_row_by_row_packing; +extern grib_accessor_class* grib_accessor_class_data_g1secondary_bitmap; +extern grib_accessor_class* grib_accessor_class_data_g1shsimple_packing; +extern grib_accessor_class* grib_accessor_class_data_g1simple_packing; +extern grib_accessor_class* grib_accessor_class_data_g22order_packing; +extern grib_accessor_class* grib_accessor_class_data_g2complex_packing; +extern grib_accessor_class* grib_accessor_class_data_g2secondary_bitmap; +extern grib_accessor_class* grib_accessor_class_data_g2shsimple_packing; +extern grib_accessor_class* grib_accessor_class_data_g2simple_packing; +extern grib_accessor_class* grib_accessor_class_data_g2simple_packing_with_preprocessing; +extern grib_accessor_class* grib_accessor_class_data_jpeg2000_packing; +extern grib_accessor_class* grib_accessor_class_data_png_packing; +extern grib_accessor_class* grib_accessor_class_data_raw_packing; +extern grib_accessor_class* grib_accessor_class_data_secondary_bitmap; +extern grib_accessor_class* grib_accessor_class_data_sh_packed; +extern grib_accessor_class* grib_accessor_class_data_sh_unpacked; +extern grib_accessor_class* grib_accessor_class_data_shsimple_packing; +extern grib_accessor_class* grib_accessor_class_data_simple_packing; +extern grib_accessor_class* grib_accessor_class_data_szip_packing; +extern grib_accessor_class* grib_accessor_class_decimal_precision; +extern grib_accessor_class* grib_accessor_class_dirty; +extern grib_accessor_class* grib_accessor_class_divdouble; +extern grib_accessor_class* grib_accessor_class_double; +extern grib_accessor_class* grib_accessor_class_element; +extern grib_accessor_class* grib_accessor_class_evaluate; +extern grib_accessor_class* grib_accessor_class_forward; +extern grib_accessor_class* grib_accessor_class_from_scale_factor_scaled_value; +extern grib_accessor_class* grib_accessor_class_g1_half_byte_codeflag; +extern grib_accessor_class* grib_accessor_class_g1_increment; +extern grib_accessor_class* grib_accessor_class_g1_message_length; +extern grib_accessor_class* grib_accessor_class_g1_section4_length; +extern grib_accessor_class* grib_accessor_class_g1area; +extern grib_accessor_class* grib_accessor_class_g1bitmap; +extern grib_accessor_class* grib_accessor_class_g1date; +extern grib_accessor_class* grib_accessor_class_g1day_of_the_year_date; +extern grib_accessor_class* grib_accessor_class_g1end_of_interval_monthly; +extern grib_accessor_class* grib_accessor_class_g1fcperiod; +extern grib_accessor_class* grib_accessor_class_g1forecastmonth; +extern grib_accessor_class* grib_accessor_class_g1monthlydate; +extern grib_accessor_class* grib_accessor_class_g1number_of_coded_values_sh_complex; +extern grib_accessor_class* grib_accessor_class_g1number_of_coded_values_sh_simple; +extern grib_accessor_class* grib_accessor_class_g1p1p2; +extern grib_accessor_class* grib_accessor_class_g1param; +extern grib_accessor_class* grib_accessor_class_g1step_range; +extern grib_accessor_class* grib_accessor_class_g1verificationdate; +extern grib_accessor_class* grib_accessor_class_g2_eps; +extern grib_accessor_class* grib_accessor_class_g2_mars_labeling; +extern grib_accessor_class* grib_accessor_class_g2bitmap; +extern grib_accessor_class* grib_accessor_class_g2bitmap_present; +extern grib_accessor_class* grib_accessor_class_g2date; +extern grib_accessor_class* grib_accessor_class_g2end_step; +extern grib_accessor_class* grib_accessor_class_g2grid; +extern grib_accessor_class* grib_accessor_class_g2latlon; +extern grib_accessor_class* grib_accessor_class_g2level; +extern grib_accessor_class* grib_accessor_class_g2lon; +extern grib_accessor_class* grib_accessor_class_g2step; +extern grib_accessor_class* grib_accessor_class_g2step_range; +extern grib_accessor_class* grib_accessor_class_gds_is_present; +extern grib_accessor_class* grib_accessor_class_gds_not_present_bitmap; +extern grib_accessor_class* grib_accessor_class_gen; +extern grib_accessor_class* grib_accessor_class_global_gaussian; +extern grib_accessor_class* grib_accessor_class_gts_header; +extern grib_accessor_class* grib_accessor_class_headers_only; +extern grib_accessor_class* grib_accessor_class_ibmfloat; +extern grib_accessor_class* grib_accessor_class_ieeefloat; +extern grib_accessor_class* grib_accessor_class_ifs_param; +extern grib_accessor_class* grib_accessor_class_iterator; +extern grib_accessor_class* grib_accessor_class_julian_day; +extern grib_accessor_class* grib_accessor_class_ksec1expver; +extern grib_accessor_class* grib_accessor_class_label; +extern grib_accessor_class* grib_accessor_class_laplacian; +extern grib_accessor_class* grib_accessor_class_latitudes; +extern grib_accessor_class* grib_accessor_class_latlon_increment; +extern grib_accessor_class* grib_accessor_class_latlonvalues; +extern grib_accessor_class* grib_accessor_class_library_version; +extern grib_accessor_class* grib_accessor_class_local_definition; +extern grib_accessor_class* grib_accessor_class_long; +extern grib_accessor_class* grib_accessor_class_long_vector; +extern grib_accessor_class* grib_accessor_class_longitudes; +extern grib_accessor_class* grib_accessor_class_lookup; +extern grib_accessor_class* grib_accessor_class_mars_param; +extern grib_accessor_class* grib_accessor_class_mars_step; +extern grib_accessor_class* grib_accessor_class_md5; +extern grib_accessor_class* grib_accessor_class_message; +extern grib_accessor_class* grib_accessor_class_missing; +extern grib_accessor_class* grib_accessor_class_nearest; +extern grib_accessor_class* grib_accessor_class_number_of_coded_values; +extern grib_accessor_class* grib_accessor_class_number_of_points; +extern grib_accessor_class* grib_accessor_class_number_of_points_gaussian; +extern grib_accessor_class* grib_accessor_class_number_of_values; +extern grib_accessor_class* grib_accessor_class_number_of_values_data_raw_packing; +extern grib_accessor_class* grib_accessor_class_octect_number; +extern grib_accessor_class* grib_accessor_class_offset_file; +extern grib_accessor_class* grib_accessor_class_offset_values; +extern grib_accessor_class* grib_accessor_class_pad; +extern grib_accessor_class* grib_accessor_class_padding; +extern grib_accessor_class* grib_accessor_class_padto; +extern grib_accessor_class* grib_accessor_class_padtoeven; +extern grib_accessor_class* grib_accessor_class_padtomultiple; +extern grib_accessor_class* grib_accessor_class_position; +extern grib_accessor_class* grib_accessor_class_reference_value_error; +extern grib_accessor_class* grib_accessor_class_round; +extern grib_accessor_class* grib_accessor_class_scale; +extern grib_accessor_class* grib_accessor_class_scale_values; +extern grib_accessor_class* grib_accessor_class_second_order_bits_per_value; +extern grib_accessor_class* grib_accessor_class_section; +extern grib_accessor_class* grib_accessor_class_section_length; +extern grib_accessor_class* grib_accessor_class_section_padding; +extern grib_accessor_class* grib_accessor_class_section_pointer; +extern grib_accessor_class* grib_accessor_class_select_step_template; +extern grib_accessor_class* grib_accessor_class_signed; +extern grib_accessor_class* grib_accessor_class_signed_bits; +extern grib_accessor_class* grib_accessor_class_simple_packing_error; +extern grib_accessor_class* grib_accessor_class_size; +extern grib_accessor_class* grib_accessor_class_spd; +extern grib_accessor_class* grib_accessor_class_spectral_truncation; +extern grib_accessor_class* grib_accessor_class_sprintf; +extern grib_accessor_class* grib_accessor_class_statistics; +extern grib_accessor_class* grib_accessor_class_statistics_spectral; +extern grib_accessor_class* grib_accessor_class_step_in_units; +extern grib_accessor_class* grib_accessor_class_sum; +extern grib_accessor_class* grib_accessor_class_suppressed; +extern grib_accessor_class* grib_accessor_class_time; +extern grib_accessor_class* grib_accessor_class_times; +extern grib_accessor_class* grib_accessor_class_transient; +extern grib_accessor_class* grib_accessor_class_unsigned; +extern grib_accessor_class* grib_accessor_class_unsigned_bits; +extern grib_accessor_class* grib_accessor_class_validity_date; +extern grib_accessor_class* grib_accessor_class_validity_time; +extern grib_accessor_class* grib_accessor_class_values; +extern grib_accessor_class* grib_accessor_class_variable; +extern grib_accessor_class* grib_accessor_class_vector; +extern grib_accessor_class* grib_accessor_class_when; diff --git a/src/grib_accessor_class_abstract_long_vector.c b/src/grib_accessor_class_abstract_long_vector.c new file mode 100644 index 000000000..988d1fdae --- /dev/null +++ b/src/grib_accessor_class_abstract_long_vector.c @@ -0,0 +1,133 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/****************************************************************** + * Enrico Fucile + ******************************************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + MEMBERS = long* v + MEMBERS = long pack_index + MEMBERS = int number_of_elements + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_abstract_long_vector { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in abstract_long_vector */ + long* v; + long pack_index; + int number_of_elements; +} grib_accessor_abstract_long_vector; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_abstract_long_vector = { + &grib_accessor_class_gen, /* super */ + "abstract_long_vector", /* name */ + sizeof(grib_accessor_abstract_long_vector), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_abstract_long_vector = &_grib_accessor_class_abstract_long_vector; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + + diff --git a/src/grib_accessor_class_abstract_vector.c b/src/grib_accessor_class_abstract_vector.c new file mode 100644 index 000000000..444ae9f6b --- /dev/null +++ b/src/grib_accessor_class_abstract_vector.c @@ -0,0 +1,132 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/****************************************************************** + * Enrico Fucile + ******************************************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + MEMBERS = double* v + MEMBERS = int number_of_elements + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_abstract_vector { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in abstract_vector */ + double* v; + int number_of_elements; +} grib_accessor_abstract_vector; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_abstract_vector = { + &grib_accessor_class_double, /* super */ + "abstract_vector", /* name */ + sizeof(grib_accessor_abstract_vector), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_abstract_vector = &_grib_accessor_class_abstract_vector; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + + diff --git a/src/grib_accessor_class_array.c b/src/grib_accessor_class_array.c new file mode 100644 index 000000000..004c7ab76 --- /dev/null +++ b/src/grib_accessor_class_array.c @@ -0,0 +1,144 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/***************************************************************** + * Enrico Fucile + **************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init;dump + MEMBERS = grib_action* *builder + MEMBERS = grib_block_of_accessors *block; + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_array { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in array */ + grib_action* *builder; + grib_block_of_accessors *block; +} grib_accessor_array; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_array = { + &grib_accessor_class_gen, /* super */ + "array", /* name */ + sizeof(grib_accessor_array), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_array = &_grib_accessor_class_array; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + grib_accessor_array* self = (grib_accessor_array*)a; + self->block = (grib_block_of_accessors*) grib_context_malloc_clear(a->parent->h->context,sizeof(grib_block_of_accessors)); + a->length = 0; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_accessor_array* self = (grib_accessor_array*)a; + grib_dump_section(dumper,a,self->block); +} + + diff --git a/src/grib_accessor_class_ascii.c b/src/grib_accessor_class_ascii.c new file mode 100644 index 000000000..91f5ca0bd --- /dev/null +++ b/src/grib_accessor_class_ascii.c @@ -0,0 +1,267 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +/*********************************************************** + * Enrico Fucile + ***********************************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = unpack_string;pack_string + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = init;dump;string_length + IMPLEMENTS = value_count + IMPLEMENTS = get_native_type + IMPLEMENTS = compare + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static size_t string_length(grib_accessor*); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_ascii { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in ascii */ +} grib_accessor_ascii; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_ascii = { + &grib_accessor_class_gen, /* super */ + "ascii", /* name */ + sizeof(grib_accessor_ascii), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_ascii = &_grib_accessor_class_ascii; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + a->length = len; + Assert(a->length>=0); +} + +static long value_count(grib_accessor* a){ + return 1; +} + +static size_t string_length(grib_accessor* a){ + return a->length; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_string(dumper,a,NULL); +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_STRING; +} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + + int i = 0; + + if(len[0] < (a->length+1)) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%d) for %s it contains %d values ", len[0], a->name , a->length+1 ); + len[0] = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + for ( i = 0; i < a->length; i++) + val[i] = a->parent->h->buffer->data[a->offset+i]; + val[i] = 0; + len[0] = i; + return GRIB_SUCCESS; +} + +static int pack_string(grib_accessor* a, const char* val, size_t *len) +{ + + int i = 0; + if(len[0] > (a->length)+1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "pack_string: Wrong size (%d) for %s it contains %d values ", len[0], a->name , a->length+1 ); + len[0] = 0; + return GRIB_BUFFER_TOO_SMALL; + } + + for ( i = 0; i < a->length; i++) + { + if( i < len[0] ) + a->parent->h->buffer->data[a->offset+i] = val[i]; + else + a->parent->h->buffer->data[a->offset+i] = 0; + } + + return GRIB_SUCCESS; +} + +static int pack_long(grib_accessor* a, const long* v, size_t *len){ + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, " Should not pack %s as long", a->name); + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_double(grib_accessor* a, const double*v, size_t *len){ + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, " Should not pack %s as double", a->name); + return GRIB_NOT_IMPLEMENTED; +} + + +static int unpack_long (grib_accessor* a, long* v, size_t *len){ + + char val[1024]; + size_t l = sizeof(val); + char *last = NULL; + grib_unpack_string (a , val, &l); + + *v = strtol(val,&last,10); + + if(*last == 0) + { + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, " Casting string %s to long", a->name); + return GRIB_SUCCESS; + } + + return GRIB_INVALID_TYPE; +} + +static int unpack_double (grib_accessor* a, double*v, size_t *len){ + char val[1024]; + size_t l = sizeof(val); + char *last = NULL; + grib_unpack_string (a , val, &l); + + *v = strtod(val,&last); + + if(*last == 0) + { + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, " Casting string %s to long", a->name); + return GRIB_SUCCESS; + } + + return GRIB_NOT_IMPLEMENTED; +} + + +static int compare(grib_accessor* a,grib_accessor* b) { + int retval=0; + char *aval=0; + char *bval=0; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + aval=grib_context_malloc(a->parent->h->context,alen*sizeof(char)); + bval=grib_context_malloc(b->parent->h->context,blen*sizeof(char)); + + grib_unpack_string(a,aval,&alen); + grib_unpack_string(b,bval,&blen); + + retval = GRIB_SUCCESS; + if (strcmp(aval,bval)) retval = GRIB_STRING_VALUE_MISMATCH; + + grib_context_free(a->parent->h->context,aval); + grib_context_free(b->parent->h->context,bval); + + return retval; +} + diff --git a/src/grib_accessor_class_assert.c b/src/grib_accessor_class_assert.c new file mode 100644 index 000000000..cba2cb8e2 --- /dev/null +++ b/src/grib_accessor_class_assert.c @@ -0,0 +1,146 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init;dump + IMPLEMENTS = notify_change + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int notify_change(grib_accessor*,grib_accessor*); + +typedef struct grib_accessor_assert { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in assert */ +} grib_accessor_assert; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_assert = { + &grib_accessor_class_gen, /* super */ + "assert", /* name */ + sizeof(grib_accessor_assert), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + ¬ify_change, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_assert = &_grib_accessor_class_assert; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg) +{ + a->length = 0; + a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + /* grib_dump_assert(dumper,a,NULL); */ +} + +static int notify_change(grib_accessor* a,grib_accessor* changed) +{ + return grib_action_notify_change(a->creator,a,changed); +} + diff --git a/src/grib_accessor_class_bit.c b/src/grib_accessor_class_bit.c new file mode 100644 index 000000000..c5c70a85a --- /dev/null +++ b/src/grib_accessor_class_bit.c @@ -0,0 +1,198 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump + MEMBERS = const char* owner + MEMBERS = int bit_index + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_bit { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in bit */ + const char* owner; + int bit_index; +} grib_accessor_bit; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_bit = { + &grib_accessor_class_long, /* super */ + "bit", /* name */ + sizeof(grib_accessor_bit), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_bit = &_grib_accessor_class_bit; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + grib_accessor_bit *ac = (grib_accessor_bit*) a; + a->length = 0; + ac->owner = grib_arguments_get_name(a->parent->h,arg,0); + ac->bit_index = grib_arguments_get_long(a->parent->h,arg,1); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_bit *ac = (grib_accessor_bit*) a; + int ret = 0; + + long data = 0; + + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_bit : unpack_long : Wrong size for %s it contains %d values ", a->name , 1 ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + if((ret = grib_get_long_internal(a->parent->h,ac->owner,&data)) != GRIB_SUCCESS){ + *len = 0; + return ret; + } + + if(data & (1<bit_index)) + *val = 1; + else + *val = 0; + + *len = 1; + return GRIB_SUCCESS; +} + +static int pack_long (grib_accessor* a, const long *val, size_t *len) +{ + grib_accessor_bit *ac = (grib_accessor_bit*) a; + grib_accessor* owner = NULL; + unsigned char *mdata = 0; + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_bit : pack_long : At least one value to pack for %s", a->name ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + owner = grib_find_accessor(a->parent->h,ac->owner); + + if(!owner){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_bit : Cannot get the owner %s for computing the bit value of %s ",ac->owner, a->name); + *len = 0; + return GRIB_NOT_FOUND; + } + + mdata = a->parent->h->buffer->data; + mdata += grib_byte_offset(owner); + + grib_set_bit( mdata,7-ac->bit_index , *val>0); + + *len = 1; + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_bitmap.c b/src/grib_accessor_class_bitmap.c new file mode 100644 index 000000000..16462d527 --- /dev/null +++ b/src/grib_accessor_class_bitmap.c @@ -0,0 +1,290 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_bytes + + IMPLEMENTS = next_offset + IMPLEMENTS = unpack_double;unpack_double_element + IMPLEMENTS = unpack_long + IMPLEMENTS = unpack_string + IMPLEMENTS = init;dump;update_size + MEMBERS=const char* tableReference + MEMBERS=const char* missing_value + MEMBERS=const char* offsetbsec + MEMBERS=const char* sLength + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long next_offset(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); +static int unpack_double_element(grib_accessor*,size_t i, double* val); + +typedef struct grib_accessor_bitmap { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +/* Members defined in bitmap */ + const char* tableReference; + const char* missing_value; + const char* offsetbsec; + const char* sLength; +} grib_accessor_bitmap; + +extern grib_accessor_class* grib_accessor_class_bytes; + +static grib_accessor_class _grib_accessor_class_bitmap = { + &grib_accessor_class_bytes, /* super */ + "bitmap", /* name */ + sizeof(grib_accessor_bitmap), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + &next_offset, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + &unpack_double_element, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_bitmap = &_grib_accessor_class_bitmap; + + +static void init_class(grib_accessor_class* c) +{ + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void compute_size(grib_accessor* a) +{ + long slen = 0; + long off = 0; + + grib_accessor_bitmap* self = (grib_accessor_bitmap*)a; + grib_get_long_internal(a->parent->h, self->offsetbsec,&off); + grib_get_long_internal(a->parent->h, self->sLength, &slen); + + if(slen == 0) + { + grib_accessor* seclen; + size_t size; + /* Assume reparsing */ + Assert(a->parent->h->loader != 0); + if (a->parent->h->loader != 0) { + seclen = grib_find_accessor(a->parent->h, self->sLength); + Assert(seclen); + grib_get_block_length(seclen->parent,&size); + slen = size; + } + } + +#if 0 + printf("compute_size off=%ld slen=%ld a->offset=%ld\n", + (long)off,(long)slen,(long)a->offset); +#endif + + a->length = off+(slen-a->offset); + + if(a->length < 0) + { + /* Assume reparsing */ + /*Assert(a->parent->h->loader != 0);*/ + a->length = 0; + } + + + Assert(a->length>=0); +} + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + + grib_accessor_bitmap* self = (grib_accessor_bitmap*)a; + int n = 0; + + self->tableReference = grib_arguments_get_name(a->parent->h,arg,n++); + self->missing_value = grib_arguments_get_name(a->parent->h,arg,n++); + self->offsetbsec = grib_arguments_get_name(a->parent->h,arg,n++); + self->sLength = grib_arguments_get_name(a->parent->h,arg,n++); + + compute_size(a); + +} + +static long next_offset(grib_accessor* a){ + return grib_byte_offset(a) + grib_byte_count(a); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + long len = grib_value_count(a); + char label[1024]; + sprintf(label,"Bitmap of %ld values",len); + grib_dump_bytes(dumper, a,label); +} + + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + long pos = a->offset*8; + size_t tlen; + long i; + + tlen = grib_value_count(a); + + if(*len < tlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , tlen ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + for(i=0;iparent->h->buffer->data, &pos,1); + } + *len = tlen; + return GRIB_SUCCESS; + +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + long pos = a->offset*8; + size_t tlen; + long i; + + tlen = grib_value_count(a); + + if(*len < tlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , tlen ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + for(i=0;iparent->h->buffer->data, &pos,1); + } + *len = tlen; + return GRIB_SUCCESS; + +} + +static int unpack_double_element (grib_accessor* a, size_t idx, double* val) +{ + long pos = a->offset*8; + + pos+=idx; + *val = (double)grib_decode_unsigned_long(a->parent->h->buffer->data, &pos,1); + + return GRIB_SUCCESS; + +} + + +static void update_size(grib_accessor* a,size_t s) +{ + a->length = s; +} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + + int i = 0; + + if(len[0] < (a->length)) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%d) for %s it contains %d values ", len[0], a->name , a->length ); + len[0] = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + for ( i = 0; i < a->length; i++) + val[i] = a->parent->h->buffer->data[a->offset+i]; + + len[0] = a->length; + + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_bits.c b/src/grib_accessor_class_bits.c new file mode 100644 index 000000000..0986f66b2 --- /dev/null +++ b/src/grib_accessor_class_bits.c @@ -0,0 +1,205 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = unpack_long;get_native_type + IMPLEMENTS = pack_long + IMPLEMENTS = init + MEMBERS=const char* argument + MEMBERS=long start + MEMBERS=long len + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_bits { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bits */ + const char* argument; + long start; + long len; +} grib_accessor_bits; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_bits = { + &grib_accessor_class_gen, /* super */ + "bits", /* name */ + sizeof(grib_accessor_bits), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_bits = &_grib_accessor_class_bits; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_bits* self = (grib_accessor_bits*)a; + int n = 0; + + self->argument = grib_arguments_get_name(a->parent->h,c,n++); + self->start = grib_arguments_get_long(a->parent->h,c,n++); + self->len = grib_arguments_get_long(a->parent->h,c,n++); + + assert(self->len <= sizeof(long)*8); + + a->length=0; + +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_bits* self = (grib_accessor_bits*)a; + grib_accessor* x=NULL; + unsigned char* p=NULL; + grib_handle* h=a->parent->h; + long start,length; + int ret=0; + + if(*len < 1) return GRIB_WRONG_ARRAY_SIZE; + + start=self->start; + length=self->len; + + x=grib_find_accessor(a->parent->h,self->argument); + if (!x) return GRIB_NOT_FOUND; + + p = h->buffer->data + grib_byte_offset(x); + *val=grib_decode_unsigned_long(p,&start,length); + + *len=1; + + return ret; +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_bits* self = (grib_accessor_bits*)a; + grib_accessor* x=NULL; + grib_handle* h=a->parent->h; + unsigned char* p=NULL; + long start,length; + + if(*len != 1) return GRIB_WRONG_ARRAY_SIZE; + + start = self->start; + length = self->len; + + x=grib_find_accessor(a->parent->h,self->argument); + if (!x) return GRIB_NOT_FOUND; + + p=h->buffer->data + grib_byte_offset(x); + return grib_encode_unsigned_longb(p,*val,&start,length); + +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_BYTES; +} + + + + diff --git a/src/grib_accessor_class_bits_per_value.c b/src/grib_accessor_class_bits_per_value.c new file mode 100644 index 000000000..19e49bd18 --- /dev/null +++ b/src/grib_accessor_class_bits_per_value.c @@ -0,0 +1,186 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/********************************** + * Enrico Fucile + *********************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long; pack_long + IMPLEMENTS = init + MEMBERS = const char* values + MEMBERS = const char* bits_per_value + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_bits_per_value { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in bits_per_value */ + const char* values; + const char* bits_per_value; +} grib_accessor_bits_per_value; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_bits_per_value = { + &grib_accessor_class_long, /* super */ + "bits_per_value", /* name */ + sizeof(grib_accessor_bits_per_value), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_bits_per_value = &_grib_accessor_class_bits_per_value; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* args) +{ + int n=0; + grib_accessor_bits_per_value* self= (grib_accessor_bits_per_value*)a; + self->values=grib_arguments_get_name(a->parent->h,args,n++); + self->bits_per_value=grib_arguments_get_name(a->parent->h,args,n++); + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_accessor_bits_per_value* self= (grib_accessor_bits_per_value*)a; + grib_handle* h=a->parent->h; + + if((ret = grib_get_long_internal(h,self->bits_per_value,val)) + != GRIB_SUCCESS) return ret; + + *len =1; + return ret; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + double* values=NULL; + size_t size=0; + int ret=0; + grib_accessor_bits_per_value* self= (grib_accessor_bits_per_value*)a; + grib_context* c=a->parent->h->context; + grib_handle* h=a->parent->h; + + if ( (ret=grib_get_size(h,self->values,&size)) != GRIB_SUCCESS) return ret; + + values=(double*)grib_context_malloc(c,size*sizeof(double)); + if (!values) return GRIB_OUT_OF_MEMORY; + + if((ret = grib_get_double_array_internal(h,self->values,values,&size)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + if((ret = grib_set_long_internal(h, self->bits_per_value,*val)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_set_double_array_internal(h, self->values,values,size)) + != GRIB_SUCCESS) return ret; + + grib_context_free(c,values); + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_accessor_class_box.c b/src/grib_accessor_class_box.c new file mode 100644 index 000000000..bd26b544c --- /dev/null +++ b/src/grib_accessor_class_box.c @@ -0,0 +1,161 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * + * + */ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init;dump + MEMBERS=grib_arguments* args + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_box { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in box */ + grib_arguments* args; +} grib_accessor_box; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_box = { + &grib_accessor_class_gen, /* super */ + "box", /* name */ + sizeof(grib_accessor_box), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_box = &_grib_accessor_class_box; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* args) +{ + grib_accessor_box* self = (grib_accessor_box*)a; + self->args = args; +} + +static void dump(grib_accessor* a,grib_dumper* dumper) +{ + /* TODO: pass args */ + grib_dump_label(dumper,a,NULL); +} + +grib_box* grib_box_new(grib_handle* h,int* error) +{ + grib_accessor* a = NULL; + grib_accessor_box* na =NULL; + grib_box* n =NULL; + *error=GRIB_NOT_IMPLEMENTED; + a = grib_find_accessor(h,"BOX"); + na = (grib_accessor_box*)a; + + if (!a) return NULL; + + n = grib_box_factory(h,na->args); + + if (n) *error=GRIB_SUCCESS; + + return n; +} + diff --git a/src/grib_accessor_class_budgdate.c b/src/grib_accessor_class_budgdate.c new file mode 100644 index 000000000..39c926949 --- /dev/null +++ b/src/grib_accessor_class_budgdate.c @@ -0,0 +1,199 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init + MEMBERS=const char* year + MEMBERS=const char* month + MEMBERS=const char* day + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_budgdate { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in budgdate */ + const char* year; + const char* month; + const char* day; +} grib_accessor_budgdate; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_budgdate = { + &grib_accessor_class_long, /* super */ + "budgdate", /* name */ + sizeof(grib_accessor_budgdate), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_budgdate = &_grib_accessor_class_budgdate; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_budgdate* self = (grib_accessor_budgdate*)a; + int n = 0; + + self->year = grib_arguments_get_name(a->parent->h,c,n++); + self->month = grib_arguments_get_name(a->parent->h,c,n++); + self->day = grib_arguments_get_name(a->parent->h,c,n++); +} + + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_accessor_budgdate* self = (grib_accessor_budgdate*)a; + + long year = 0; + long month = 0; + long day = 0; + + if ((ret=grib_get_long_internal(a->parent->h, self->day,&day))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->month,&month))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->year,&year))!=GRIB_SUCCESS) + return ret; + + if(*len < 1) + return GRIB_WRONG_ARRAY_SIZE; + + val[0] = (1900 + year) * 10000 + month * 100 + day; + + return ret; +} + +/* TODO: Check for a valid date */ + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + int ret=0; + long v = val[0]; + grib_accessor_budgdate* self = (grib_accessor_budgdate*)a; + + long year = 0; + long month = 0; + long day = 0; + + if(*len != 1) + return GRIB_WRONG_ARRAY_SIZE; + + year = v / 10000; v %= 10000; + month = v / 100; v %= 100; + day = v; + + year -= 1900; + + Assert(year < 255); + + if ((ret=grib_set_long_internal(a->parent->h,self->day,day))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_set_long_internal(a->parent->h,self->month,month))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_set_long_internal(a->parent->h,self->year,year))!=GRIB_SUCCESS) + return ret; + + return ret; +} + diff --git a/src/grib_accessor_class_bytes.c b/src/grib_accessor_class_bytes.c new file mode 100644 index 000000000..e46badd08 --- /dev/null +++ b/src/grib_accessor_class_bytes.c @@ -0,0 +1,169 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = get_native_type;init + IMPLEMENTS = compare;unpack_string + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_bytes { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +} grib_accessor_bytes; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_bytes = { + &grib_accessor_class_gen, /* super */ + "bytes", /* name */ + sizeof(grib_accessor_bytes), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_bytes = &_grib_accessor_class_bytes; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + /*grib_accessor_signed* self = (grib_accessor_signed*)a; */ + a->length = len; + Assert(a->length>=0); + +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_BYTES; +} + + +static int compare(grib_accessor* a, grib_accessor* b) { + int retval=GRIB_SUCCESS; + + size_t alen = (size_t)grib_byte_count(a); + size_t blen = (size_t)grib_byte_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + return retval; +} + +static int unpack_string(grib_accessor *a , char* v, size_t *len){ + unsigned char* p=NULL; + char* s=v; + int i; + long length=grib_byte_count(a); + + if (*len < 2*length) { + *len=2*length; + return GRIB_ARRAY_TOO_SMALL; + } + + p = a->parent->h->buffer->data + grib_byte_offset(a); + + for (i = 0; i < length; i++) { + sprintf (s,"%02x", *(p++)); + s+=2; + } + + *len=length; + + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_change_scanning_direction.c b/src/grib_accessor_class_change_scanning_direction.c new file mode 100644 index 000000000..ca7dcb1fd --- /dev/null +++ b/src/grib_accessor_class_change_scanning_direction.c @@ -0,0 +1,266 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************ + * Enrico Fucile + ************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = pack_long; + IMPLEMENTS = init;get_native_type + MEMBERS = const char* values + MEMBERS = const char* Ni + MEMBERS = const char* Nj + MEMBERS = const char* i_scans_negatively + MEMBERS = const char* j_scans_positively + MEMBERS = const char* first + MEMBERS = const char* last + MEMBERS = const char* axis + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_change_scanning_direction { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in change_scanning_direction */ + const char* values; + const char* Ni; + const char* Nj; + const char* i_scans_negatively; + const char* j_scans_positively; + const char* first; + const char* last; + const char* axis; +} grib_accessor_change_scanning_direction; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_change_scanning_direction = { + &grib_accessor_class_gen, /* super */ + "change_scanning_direction", /* name */ + sizeof(grib_accessor_change_scanning_direction), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_change_scanning_direction = &_grib_accessor_class_change_scanning_direction; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* args ) +{ + int n=0; + grib_accessor_change_scanning_direction* self= (grib_accessor_change_scanning_direction*)a; + + self->values=grib_arguments_get_name(a->parent->h,args,n++); + self->Ni=grib_arguments_get_name(a->parent->h,args,n++); + self->Nj=grib_arguments_get_name(a->parent->h,args,n++); + self->i_scans_negatively=grib_arguments_get_name(a->parent->h,args,n++); + self->j_scans_positively=grib_arguments_get_name(a->parent->h,args,n++); + self->first=grib_arguments_get_name(a->parent->h,args,n++); + self->last=grib_arguments_get_name(a->parent->h,args,n++); + self->axis=grib_arguments_get_name(a->parent->h,args,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length = 0; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + int ret=0; + long i,j,jr,end,Ni,Nj,k,kp; + double tmp; + long iScansNegatively=0; + long jScansPositively=0; + long first=0; + long last=0; + size_t size=0; + double* values=NULL; + grib_accessor_change_scanning_direction* self= (grib_accessor_change_scanning_direction*)a; + grib_context* c=a->parent->h->context; + grib_handle* h=a->parent->h; + + if (*val==0) return 0; + + if((ret = grib_get_long_internal(h,self->Ni,&Ni)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(h,self->Nj,&Nj)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(h,self->i_scans_negatively,&iScansNegatively)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(h,self->j_scans_positively,&jScansPositively)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(h,self->first,&first)) + != GRIB_SUCCESS) return ret; + if((ret = grib_get_long_internal(h,self->last,&last)) + != GRIB_SUCCESS) return ret; + + if ( (ret=grib_get_size(h,self->values,&size)) != GRIB_SUCCESS) return ret; + + if (size>Ni*Nj) { + grib_context_log(c,GRIB_LOG_ERROR,"change_scanning_direction: wrong values size!=Ni*Nj (%ld!=%ld*%ld)",size,Ni,Nj); + return GRIB_WRONG_ARRAY_SIZE; + } + + values=(double*)grib_context_malloc(c,size*sizeof(double)); + if (!values) return GRIB_OUT_OF_MEMORY; + + if((ret = grib_get_double_array_internal(h,self->values,values,&size)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + if (self->axis[0] == 'x') { + end=(Ni+0.5)/2; + for (j=0;ji_scans_negatively,iScansNegatively)) + != GRIB_SUCCESS) return ret; + } else { + long kpj; + end=(Nj+0.5)/2; + for (i=0;ij_scans_positively,jScansPositively)) + != GRIB_SUCCESS) return ret; + } + + if((ret = grib_set_double_array_internal(h,self->values,values,size)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + if((ret = grib_set_long_internal(h,self->first,last)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_set_long_internal(h,self->last,first)) + != GRIB_SUCCESS) return ret; + + grib_context_free(c,values); + + return GRIB_SUCCESS; +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_LONG; +} + + diff --git a/src/grib_accessor_class_codeflag.c b/src/grib_accessor_class_codeflag.c new file mode 100644 index 000000000..7a607c4e3 --- /dev/null +++ b/src/grib_accessor_class_codeflag.c @@ -0,0 +1,238 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/**************************************** + * Enrico Fucile + **************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_unsigned + IMPLEMENTS = init;dump + IMPLEMENTS = value_count + MEMBERS = const char* tablename + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_codeflag { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in codeflag */ + const char* tablename; +} grib_accessor_codeflag; + +extern grib_accessor_class* grib_accessor_class_unsigned; + +static grib_accessor_class _grib_accessor_class_codeflag = { + &grib_accessor_class_unsigned, /* super */ + "codeflag", /* name */ + sizeof(grib_accessor_codeflag), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_codeflag = &_grib_accessor_class_codeflag; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init (grib_accessor* a,const long len, grib_arguments* param) +{ + grib_accessor_codeflag* self = (grib_accessor_codeflag*)a; + a->length = len; + self->tablename = grib_arguments_get_string(a->parent->h,param,0); + Assert(a->length>=0); +} + +static int test_bit(long a, long b) +{ + return a&(1<parent->h,NULL, self->tablename, fname,1); + + if ((filename=grib_context_full_path(a->parent->h->context,fname))==NULL) { + grib_context_log(a->parent->h->context,GRIB_LOG_WARNING,"Cannot open flag table %s",filename); + strcpy(codename, "Cannot open flag table"); + return GRIB_FILE_NOT_FOUND; + } + + f=fopen(filename, "r"); + + if (!f) + { + grib_context_log(a->parent->h->context,(GRIB_LOG_WARNING)|(GRIB_LOG_PERROR),"Cannot open flag table %s",filename); + strcpy(codename, "Cannot open flag table"); + return GRIB_FILE_NOT_FOUND; + } + +#if 0 + strcpy(codename, self->tablename); + strcat(codename,": "); + j = strlen(codename); +#endif + + while(fgets(line,sizeof(line)-1,f)) + { + sscanf(line,"%s %s", num, bval); + + if(num[0] != '#') + if((test_bit(code, a->length*8-atol(num))>0) == atol(bval)) + { +#if 1 + codename[j++] = '('; + codename[j++] = num[0]; + codename[j++] = '='; + codename[j++] = bval[0]; + codename[j++] = ')'; + codename[j++] = ' '; + if(j) + codename[j++] = ' '; +#endif + for(i=(strlen(num)+strlen(bval)+2); i < strlen(line)-1;i++) + codename[j++] = line[i]; + if(line[i]!='\n') + codename[j++] = line[i]; + codename[j++] = ';'; + } + + } + if(j>1 && codename[j-1] == ';') j--; + codename[j] = 0; + + strcat(codename,":"); + strcat(codename,self->tablename); + + fclose(f); + return GRIB_SUCCESS; +} +static long value_count(grib_accessor* a) +{ + return 1; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_accessor_codeflag* self = (grib_accessor_codeflag*)a; + long v; + char flagname[1024]; + char fname[1024]; + + size_t llen = 1; + + grib_recompose_name(a->parent->h,NULL, self->tablename, fname,1); + grib_unpack_long(a, &v, &llen); + + grib_get_codeflag(a, v, flagname); + + grib_dump_bits(dumper,a,flagname); + + + +} diff --git a/src/grib_accessor_class_codetable.c b/src/grib_accessor_class_codetable.c new file mode 100644 index 000000000..f038fd557 --- /dev/null +++ b/src/grib_accessor_class_codetable.c @@ -0,0 +1,674 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/***************************************** + * Enrico Fucile + ****************************************/ + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_unsigned + IMPLEMENTS = init;dump;unpack_string;pack_expression;unpack_long + IMPLEMENTS = value_count;pack_string; destroy; get_native_type; + MEMBERS = const char* tablename + MEMBERS = const char* masterDir + MEMBERS = const char* localDir + MEMBERS = grib_codetable* table + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int pack_expression(grib_accessor*, grib_expression*); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_codetable { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in codetable */ + const char* tablename; + const char* masterDir; + const char* localDir; + grib_codetable* table; +} grib_accessor_codetable; + +extern grib_accessor_class* grib_accessor_class_unsigned; + +static grib_accessor_class _grib_accessor_class_codetable = { + &grib_accessor_class_unsigned, /* super */ + "codetable", /* name */ + sizeof(grib_accessor_codetable), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + &pack_expression, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_codetable = &_grib_accessor_class_codetable; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static int grib_load_codetable(grib_context* c,const char* filename, + const char* recomposed_name,size_t size,grib_codetable* t); +static void init(grib_accessor* a, const long len, grib_arguments* params) { + int n=0; + grib_accessor_codetable* self = (grib_accessor_codetable*)a; + grib_action* act=(grib_action*)(a->creator); + + self->tablename = grib_arguments_get_string(a->parent->h,params,n++); + self->masterDir = grib_arguments_get_name(a->parent->h,params,n++); + self->localDir = grib_arguments_get_name(a->parent->h,params,n++); + + /*if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) + printf("-------- %s type string (%ld)\n",a->name,a->flags);*/ + + if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { + a->length = 0; + if (!a->vvalue) + a->vvalue = grib_context_malloc_clear(a->parent->h->context,sizeof(grib_virtual_value)); + a->vvalue->type=grib_accessor_get_native_type(a); + a->vvalue->length=len; + if (act->default_value!=NULL) { + const char* p = 0; + size_t len = 1; + long l; + int ret=0; + double d; + char tmp[1024]; + grib_expression* expression=grib_arguments_get_expression(a->parent->h,act->default_value,0); + int type = grib_expression_native_type(a->parent->h,expression); + switch(type) { + case GRIB_TYPE_DOUBLE: + grib_expression_evaluate_double(a->parent->h,expression,&d); + grib_pack_double(a,&d,&len); + break; + + case GRIB_TYPE_LONG: + grib_expression_evaluate_long(a->parent->h,expression,&l); + grib_pack_long(a,&l,&len); + break; + + default: + len = sizeof(tmp); + p = grib_expression_evaluate_string(a->parent->h,expression,tmp,&len,&ret); + if (ret != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_FATAL, + "unable to evaluate %s as string",a->name); + } + len = strlen(p)+1; + pack_string(a,p,&len); + break; + } + } + } else + a->length = len; + +} + +static grib_codetable* load_table(grib_accessor_codetable* self) +{ + size_t size = 0; + grib_handle* h = ((grib_accessor*)self)->parent->h; + grib_context* c = h->context; + grib_codetable* t = NULL; + grib_codetable* next=NULL ; + grib_accessor* a=(grib_accessor*)self; + char *filename=0; + char name[1024]={0,}; + char recomposed[1024]={0,}; + char localRecomposed[1024]={0,}; + char *localFilename=0; + char localName[1024]={0,}; + char masterDir[1024]={0,}; + char localDir[1024]={0,}; + size_t len=1024; + + if (self->masterDir != NULL) + grib_get_string(h,self->masterDir,masterDir,&len); + + len=1024; + if (self->localDir != NULL) + grib_get_string(h,self->localDir,localDir,&len); + + if (*masterDir!=0) { + sprintf(name,"%s/%s",masterDir,self->tablename); + grib_recompose_name(h, NULL,name, recomposed,0); + filename=grib_context_full_path(c,recomposed); + } else { + grib_recompose_name(h, NULL,self->tablename, recomposed,0); + filename=grib_context_full_path(c,recomposed); + } + + if (*localDir!=0) { + sprintf(localName,"%s/%s",localDir,self->tablename); + grib_recompose_name(h, NULL,localName, localRecomposed,0); + localFilename=grib_context_full_path(c,localRecomposed); + } + + next=c->codetable; + while(next) { + if((filename && next->filename[0] && strcmp(filename,next->filename[0]) == 0) && + ((localFilename==0 && next->filename[1]==NULL) || + ((localFilename!=0 && next->filename[1]!=NULL) + && strcmp(localFilename,next->filename[1]) ==0)) ) + return next; + next = next->next; + } + + if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { + Assert(a->vvalue!=NULL); + size=a->vvalue->length*8; + } else { + size = grib_byte_count((grib_accessor*)self) * 8; + } + size = grib_power(size,2); + + t = (grib_codetable*)grib_context_malloc_clear_persistent(c,sizeof(grib_codetable) + + (size-1)*sizeof(code_table_entry)); + + if (filename!=0) grib_load_codetable(c,filename,recomposed,size,t); + + if (localFilename!=0) grib_load_codetable(c,localFilename,localRecomposed,size,t); + + if (t->filename[0]==NULL && t->filename[1]==NULL) { + grib_context_free_persistent(c,t); + return NULL; + } + + return t; + +} + +static int grib_load_codetable(grib_context* c,const char* filename, + const char* recomposed_name,size_t size,grib_codetable* t) { + char line[1024]; + FILE *f = NULL; + int lineNumber = 0; + + grib_context_log(c,GRIB_LOG_DEBUG,"Loading code table form %s",filename); + + f=fopen(filename, "r"); + if (!f) return GRIB_IO_PROBLEM; + + Assert(t!=NULL); + + if (t->filename[0] == NULL ){ + t->filename[0] = grib_context_strdup_persistent(c,filename); + t->recomposed_name[0] = grib_context_strdup_persistent(c,recomposed_name); + t->next = c->codetable; + t->size = size; + c->codetable = t; + } else { + t->filename[1] = grib_context_strdup_persistent(c,filename); + t->recomposed_name[1] = grib_context_strdup_persistent(c,recomposed_name); + } + + while(fgets(line,sizeof(line)-1,f)) + { + char* p = line; + int code = 0; + char abbreviation[1024] = {0,}; + char title[1024]={0,}; + char* q = abbreviation; + char* r = title; + char* units=0; + char unknown[]="unknown"; + ++lineNumber; + + line[strlen(line)-1] = 0; + + while(*p != '\0' && isspace(*p)) p++; + + if(*p == '#') + continue; + + while(*p != '\0' && isspace(*p)) p++; + + if( *p =='\0' ) continue; + + if (!isdigit(*p)) + { + grib_context_log(c,GRIB_LOG_ERROR, "Invalid entry in file %s: line %d", filename, lineNumber); + continue; /* skip this line */ + } + Assert(isdigit(*p)); + + while(*p != '\0') + { + if(isspace(*p)) break; + code *= 10; + code += *p - '0'; + p++; + } + + if(code <0 || code >= size) + { + grib_context_log(c,GRIB_LOG_WARNING,"code_table_entry: invalide code in %s: %d (table size=%d)",filename,code,size); + continue; + } + + while(*p != '\0' && isspace(*p)) p++; + + while(*p != '\0') + { + if(isspace(*p)) break; + *q++ = *p++; + } + *q = 0; + while(*p != '\0' && isspace(*p)) p++; + + while(*p != '\0') + { + if(*p == '(' ) break; + *r++ = *p++; + } + *r = 0; + + while(*p != '\0' && isspace(*p)) p++; + if (*p != '\0') { + units=++p; + while(*p != '\0' && *p != ')' ) p++; + *p='\0'; + } else { + units=unknown; + } + + Assert(*abbreviation); + Assert(*title); + + if(t->entries[code].abbreviation != NULL) + { + grib_context_log(c,GRIB_LOG_WARNING,"code_table_entry: duplicate code in %s: %d (table size=%d)",filename,code,size); + continue; + } + + Assert(t->entries[code].abbreviation == NULL); + Assert(t->entries[code].title == NULL); + + t->entries[code].abbreviation = grib_context_strdup_persistent(c,abbreviation); + t->entries[code].title = grib_context_strdup_persistent(c,title); + t->entries[code].units = grib_context_strdup_persistent(c,units); + + + } + + fclose(f); + + return 0; + +} + + +void grib_codetable_delete(grib_context* c) { + grib_codetable* t = c->codetable; + + while(t) + { + grib_codetable* s = t->next; + int i; + + for(i = 0; i < t->size; i++) + { + grib_context_free_persistent(c,t->entries[i].abbreviation); + grib_context_free_persistent(c,t->entries[i].title); + } + grib_context_free_persistent(c,t->filename[0]); + if(t->filename[1]) + grib_context_free_persistent(c,t->filename[1]); + grib_context_free_persistent(c,t->recomposed_name[0]); + if (t->recomposed_name[1]) + grib_context_free_persistent(c,t->recomposed_name[1]); + grib_context_free_persistent(c,t); + t = s; + } + +} + + + +static void dump(grib_accessor* a, grib_dumper* dumper) { + grib_accessor_codetable* self = (grib_accessor_codetable*)a; + char comment[2048]; + grib_codetable* table; + + size_t llen = 1; + long value; + + if(!self->table) self->table = load_table(self); + table=self->table; + + grib_unpack_long(a, &value,&llen); + + if(value == GRIB_MISSING_LONG) + { + if(a->length < 4) + { + value = (1L << a->length) - 1; + } + } + + if(table && value >= 0 && value < table->size) + { + if(table->entries[value].abbreviation) + { + int b = atol(table->entries[value].abbreviation); + if(b == value) + strcpy(comment,table->entries[value].title); + else + sprintf(comment,"%s", table->entries[value].title); + + if (table->entries[value].units!=NULL && strcmp(table->entries[value].units,"unknown")) { + strcat(comment," ("); + strcat(comment,table->entries[value].units); + strcat(comment,") "); + } + } + else + { + strcpy(comment,"Unknown code table entry"); + } + + } + else + { + strcpy(comment,"Unknown code table entry"); + } + + strcat(comment," ("); + if (table) { + strcat(comment,table->recomposed_name[0]); + if (table->recomposed_name[1]!=NULL) { + strcat(comment," , "); + strcat(comment,table->recomposed_name[1]); + } + } + strcat(comment,") "); + + grib_dump_long(dumper,a,comment); + +} + +static int unpack_string (grib_accessor* a, char* buffer, size_t *len) +{ + grib_accessor_codetable* self = (grib_accessor_codetable*)a; + grib_codetable* table = NULL; + + size_t size = 1; + long value; + int err = GRIB_SUCCESS; + char tmp[1024]; + size_t l = 0; + + if( (err = grib_unpack_long(a,&value,&size)) != GRIB_SUCCESS) + return err; + + if(!self->table) self->table = load_table(self); + table=self->table; + + if(table && (value >= 0) && (value < table->size) && table->entries[value].abbreviation) + { + strcpy(tmp,table->entries[value].abbreviation); + } + else + { + +#if 1 + sprintf(tmp,"%d",(int)value); +#else + return GRIB_DECODING_ERROR; +#endif + } + + + l = strlen(tmp) + 1; + + if(*len < l) + { + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } + + strcpy(buffer,tmp); + *len = l; + + return GRIB_SUCCESS; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + +static int pack_string(grib_accessor* a, const char* buffer, size_t *len) +{ + grib_accessor_codetable* self = (grib_accessor_codetable*)a; + grib_codetable* table ; + + long i; + size_t size = 1; + + typedef int (*cmpproc)(const char*, const char*); + + cmpproc cmp = a->flags | GRIB_ACCESSOR_FLAG_LOWERCASE ? strcasecmp : strcmp; + + if(!self->table) self->table = load_table(self); + table=self->table; + + if(!table) + return GRIB_ENCODING_ERROR; + + if (a->set) { + int err=grib_set_string(a->parent->h,a->set,buffer,len); + if (err!=0) return err; + } + + for(i = 0 ; i < table->size; i++) + if(table->entries[i].abbreviation) + if(cmp(table->entries[i].abbreviation,buffer) == 0) + return grib_pack_long(a,&i,&size); + + if (a->flags & GRIB_ACCESSOR_FLAG_NO_FAIL) { + grib_action* act=(grib_action*)(a->creator); + if (act->default_value!=NULL) { + const char* p = 0; + size_t len = 1; + long l; + int ret=0; + double d; + char tmp[1024]; + grib_expression* expression=grib_arguments_get_expression(a->parent->h,act->default_value,0); + int type = grib_expression_native_type(a->parent->h,expression); + switch(type) { + case GRIB_TYPE_DOUBLE: + grib_expression_evaluate_double(a->parent->h,expression,&d); + grib_pack_double(a,&d,&len); + break; + + case GRIB_TYPE_LONG: + grib_expression_evaluate_long(a->parent->h,expression,&l); + grib_pack_long(a,&l,&len); + break; + + default: + len = sizeof(tmp); + p = grib_expression_evaluate_string(a->parent->h,expression,tmp,&len,&ret); + if (ret != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_FATAL, + "unable to evaluate %s as string",a->name); + return ret; + } + len = strlen(p)+1; + pack_string(a,p,&len); + break; + } + return GRIB_SUCCESS; + } + + } + return GRIB_ENCODING_ERROR; +} + +static int pack_expression(grib_accessor* a, grib_expression *e){ + const char* cval; + int ret=0; + long lval=0; + size_t len = 1; + char tmp[1024]; + + if (strcmp(e->cclass->name,"long")==0) { + ret=grib_expression_evaluate_long(a->parent->h,e,&lval); + ret = grib_pack_long(a,&lval,&len); + } else { + len = sizeof(tmp); + cval = grib_expression_evaluate_string(a->parent->h,e,tmp,&len,&ret); + if (ret!=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"grib_accessor_codetable.pack_expression: unable to evaluate string %s to be set in %s\n",grib_expression_get_name(e),a->name); + return ret; + } + len = strlen(cval) + 1; + ret = grib_pack_string(a,cval,&len); + } + return ret; +} + +static void destroy(grib_context* context,grib_accessor* a) +{ + if (a->vvalue != NULL) { + grib_context_free(context, a->vvalue); + a->vvalue=NULL; + } + +} + +static int get_native_type(grib_accessor* a){ + int type=GRIB_TYPE_LONG; + /*printf("---------- %s flags=%ld GRIB_ACCESSOR_FLAG_STRING_TYPE=%d\n", + a->name,a->flags,GRIB_ACCESSOR_FLAG_STRING_TYPE);*/ + if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) + type=GRIB_TYPE_STRING; + return type; +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_codetable* self = (grib_accessor_codetable*)a; + unsigned long rlen = grib_value_count(a); + unsigned long i = 0; + long pos = a->offset*8; + + if(!self->table) self->table = load_table(self); + + if(*len < rlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " wrong size (%ld) for %s it contains %d values ",*len, a->name , rlen); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { + *val=a->vvalue->lval; + *len=1; + return GRIB_SUCCESS; + } + + for(i=0; i< rlen;i++){ + val[i] = (long)grib_decode_unsigned_long(a->parent->h->buffer->data , &pos, self->nbytes*8); + } + + *len = rlen; + return GRIB_SUCCESS; +} + + diff --git a/src/grib_accessor_class_codetable_title.c b/src/grib_accessor_class_codetable_title.c new file mode 100644 index 000000000..1e3119d9e --- /dev/null +++ b/src/grib_accessor_class_codetable_title.c @@ -0,0 +1,205 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/***************************************** + * Enrico Fucile + ****************************************/ + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init;unpack_string; get_native_type + MEMBERS = const char* codetable + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_codetable_title { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in codetable_title */ + const char* codetable; +} grib_accessor_codetable_title; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_codetable_title = { + &grib_accessor_class_gen, /* super */ + "codetable_title", /* name */ + sizeof(grib_accessor_codetable_title), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_codetable_title = &_grib_accessor_class_codetable_title; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +typedef struct grib_accessor_codetable { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in codetable */ + const char* tablename; + const char* masterDir; + const char* localDir; + grib_codetable* table; +} grib_accessor_codetable; + + +static void init(grib_accessor* a, const long len, grib_arguments* params) { + grib_accessor_codetable_title* self = (grib_accessor_codetable_title*)a; + int n=0; + self->codetable = grib_arguments_get_name(a->parent->h,params,n++); + a->length=0; + a->flags|= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_STRING; +} + + +static int unpack_string (grib_accessor* a, char* buffer, size_t *len) +{ + grib_accessor_codetable_title* self = (grib_accessor_codetable_title*)a; + grib_codetable* table = NULL; + + size_t size = 1; + long value; + int err = GRIB_SUCCESS; + char tmp[1024]; + size_t l = 1024; + grib_accessor_codetable* ca=(grib_accessor_codetable*)grib_find_accessor(a->parent->h,self->codetable); + + if( (err = grib_unpack_long((grib_accessor*)ca,&value,&size)) != GRIB_SUCCESS) + return err; + + table=ca->table; + + if(table && (value >= 0) && (value < table->size) && table->entries[value].title) + { + strcpy(tmp,table->entries[value].title); + } + else + { + +#if 1 + sprintf(tmp,"%d",(int)value); +#else + return GRIB_DECODING_ERROR; +#endif + } + + + l = strlen(tmp) + 1; + + if(*len < l) + { + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } + + strcpy(buffer,tmp); + *len = l; + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_accessor_class_codetable_units.c b/src/grib_accessor_class_codetable_units.c new file mode 100644 index 000000000..481fc88cd --- /dev/null +++ b/src/grib_accessor_class_codetable_units.c @@ -0,0 +1,205 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/***************************************** + * Enrico Fucile + ****************************************/ + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init;unpack_string; get_native_type + MEMBERS = const char* codetable + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_codetable_units { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in codetable_units */ + const char* codetable; +} grib_accessor_codetable_units; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_codetable_units = { + &grib_accessor_class_gen, /* super */ + "codetable_units", /* name */ + sizeof(grib_accessor_codetable_units), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_codetable_units = &_grib_accessor_class_codetable_units; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +typedef struct grib_accessor_codetable { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in codetable */ + const char* tablename; + const char* masterDir; + const char* localDir; + grib_codetable* table; +} grib_accessor_codetable; + + +static void init(grib_accessor* a, const long len, grib_arguments* params) { + grib_accessor_codetable_units* self = (grib_accessor_codetable_units*)a; + int n=0; + self->codetable = grib_arguments_get_name(a->parent->h,params,n++); + a->length=0; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_STRING; +} + + +static int unpack_string (grib_accessor* a, char* buffer, size_t *len) +{ + grib_accessor_codetable_units* self = (grib_accessor_codetable_units*)a; + grib_codetable* table = NULL; + + size_t size = 1; + long value; + int err = GRIB_SUCCESS; + char tmp[1024]; + size_t l = 1024; + grib_accessor_codetable* ca=(grib_accessor_codetable*)grib_find_accessor(a->parent->h,self->codetable); + + if( (err = grib_unpack_long((grib_accessor*)ca,&value,&size)) != GRIB_SUCCESS) + return err; + + table=ca->table; + + if(table && (value >= 0) && (value < table->size) && table->entries[value].units) + { + strcpy(tmp,table->entries[value].units); + } + else + { + +#if 1 + sprintf(tmp,"%d",(int)value); +#else + return GRIB_DECODING_ERROR; +#endif + } + + + l = strlen(tmp) + 1; + + if(*len < l) + { + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } + + strcpy(buffer,tmp); + *len = l; + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_accessor_class_concept.c b/src/grib_accessor_class_concept.c new file mode 100644 index 000000000..489c8f6dd --- /dev/null +++ b/src/grib_accessor_class_concept.c @@ -0,0 +1,275 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + + +/******************************************************* + * Enrico Fucile + ******************************************************/ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = unpack_string;pack_string;string_length + IMPLEMENTS = unpack_long;pack_long;destroy + IMPLEMENTS = init;dump;value_count;get_native_type + IMPLEMENTS = compare + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static size_t string_length(grib_accessor*); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_concept { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in concept */ +} grib_accessor_concept; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_concept = { + &grib_accessor_class_gen, /* super */ + "concept", /* name */ + sizeof(grib_accessor_concept), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_concept = &_grib_accessor_class_concept; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +#define MAX_CONCEPT_STRING_LENGTH 255 + +GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} + +static void init(grib_accessor* a, const long len , grib_arguments* args ) +{ + a->length = 0; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_string(dumper,a,NULL); +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + char buf[80]; + size_t s; + sprintf(buf,"%ld",*val); +#if 0 + if(*len > 1) + return GRIB_NOT_IMPLEMENTED; +#endif + s = strlen(buf)+1; + return pack_string(a,buf,&s); +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + return GRIB_NOT_IMPLEMENTED; + +} +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + /* TODO properly caling grib_concept_evaluate_long ! */ + const char *p = grib_concept_evaluate(a->parent->h,a->creator); + + if(!p) { + if (a->creator->defaultkey) + return grib_get_long_internal(a->parent->h,a->creator->defaultkey,val); + + return GRIB_NOT_FOUND; + } + + *val = atol(p); + *len = 1; + + return GRIB_SUCCESS; + +} + +static int get_native_type(grib_accessor* a) +{ + int type=GRIB_TYPE_STRING; + if (a->flags & GRIB_ACCESSOR_FLAG_LONG_TYPE) + type=GRIB_TYPE_LONG; + + return type; +} + +static void destroy(grib_context* c,grib_accessor* a) +{ + /* + grib_accessor_concept *self = (grib_accessor_concept*)a; + grib_context_free(c,self->cval); + */ +} + +static int unpack_string (grib_accessor* a, char* val, size_t *len){ + size_t slen ; + const char *p = grib_concept_evaluate(a->parent->h,a->creator); + + if(!p) { + if (a->creator->defaultkey) + return grib_get_string_internal(a->parent->h,a->creator->defaultkey,val,len); + + return GRIB_NOT_FOUND; + } + + slen = strlen(p) +1; + if(*len < slen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Variable unpack_string Wrong size for %s it is %d bytes big (len=%d)", a->name , slen ,*len); + *len = slen; + return GRIB_BUFFER_TOO_SMALL; + } + strcpy(val,p); + *len = slen; + return GRIB_SUCCESS; +} + + +static int pack_string(grib_accessor* a, const char* val, size_t *len) +{ + return grib_concept_apply(a->parent->h,a->creator,val); +} + +static size_t string_length(grib_accessor* a) +{ + return MAX_CONCEPT_STRING_LENGTH; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + + +static int compare(grib_accessor* a,grib_accessor* b) { + int retval=0; + char *aval=0; + char *bval=0; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + aval=grib_context_malloc(a->parent->h->context,alen*sizeof(char)); + bval=grib_context_malloc(b->parent->h->context,blen*sizeof(char)); + + grib_unpack_string(a,aval,&alen); + grib_unpack_string(b,bval,&blen); + + retval = GRIB_SUCCESS; + if (!aval || !bval || grib_inline_strcmp(aval,bval)) retval = GRIB_STRING_VALUE_MISMATCH; + + grib_context_free(a->parent->h->context,aval); + grib_context_free(b->parent->h->context,bval); + + return retval; +} + diff --git a/src/grib_accessor_class_constant.c b/src/grib_accessor_class_constant.c new file mode 100644 index 000000000..ee118a760 --- /dev/null +++ b/src/grib_accessor_class_constant.c @@ -0,0 +1,158 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + + +/************************************* + * Enrico Fucile + **************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_variable + IMPLEMENTS = init;pack_double;pack_long;pack_string;pack_bytes + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_bytes(grib_accessor*,const unsigned char*, size_t *len); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_constant { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in variable */ + double dval; + char* cval; + int type; +/* Members defined in constant */ +} grib_accessor_constant; + +extern grib_accessor_class* grib_accessor_class_variable; + +static grib_accessor_class _grib_accessor_class_constant = { + &grib_accessor_class_variable, /* super */ + "constant", /* name */ + sizeof(grib_accessor_constant), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + &pack_bytes, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_constant = &_grib_accessor_class_constant; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->unpack_long = (*(c->super))->unpack_long; + c->unpack_double = (*(c->super))->unpack_double; + c->unpack_string = (*(c->super))->unpack_string; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static int pack_bytes(grib_accessor* a,const unsigned char* val, size_t *len) +{ + return GRIB_READ_ONLY; +} + +static int pack_double(grib_accessor* a, const double* val,size_t *len) +{ + return GRIB_READ_ONLY; +} + +static int pack_long(grib_accessor* a, const long* val,size_t *len) +{ + return GRIB_READ_ONLY; +} + +static int pack_string(grib_accessor* a, const char* val, size_t *len) +{ + return GRIB_READ_ONLY; +} + diff --git a/src/grib_accessor_class_count_file.c b/src/grib_accessor_class_count_file.c new file mode 100644 index 000000000..36d7383e8 --- /dev/null +++ b/src/grib_accessor_class_count_file.c @@ -0,0 +1,140 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*********************************************** + * Enrico Fucile + **********************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_count_file { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in count_file */ +} grib_accessor_count_file; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_count_file = { + &grib_accessor_class_long, /* super */ + "count_file", /* name */ + sizeof(grib_accessor_count_file), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_count_file = &_grib_accessor_class_count_file; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + *val = a->parent->h->context->handle_file_count; + *len =1; + return 0; +} + diff --git a/src/grib_accessor_class_count_missing.c b/src/grib_accessor_class_count_missing.c new file mode 100644 index 000000000..d77f6b9d8 --- /dev/null +++ b/src/grib_accessor_class_count_missing.c @@ -0,0 +1,225 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init; + IMPLEMENTS = value_count + MEMBERS = const char* bitmap + MEMBERS = const char* unusedBitsInBitmap + MEMBERS = const char* numberOfDataPoints + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_count_missing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in count_missing */ + const char* bitmap; + const char* unusedBitsInBitmap; + const char* numberOfDataPoints; +} grib_accessor_count_missing; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_count_missing = { + &grib_accessor_class_long, /* super */ + "count_missing", /* name */ + sizeof(grib_accessor_count_missing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_count_missing = &_grib_accessor_class_count_missing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static const unsigned char bitsoff[]={ +8, 7, 7, 6, 7, 6, 6, 5, 7, 6, 6, 5, 6, 5, 5, 4, 7, +6, 6, 5, 6, 5, 5, 4, 6, 5, 5, 4, 5, 4, 4, 3, 7, 6, +6, 5, 6, 5, 5, 4, 6, 5, 5, 4, 5, 4, 4, 3, 6, 5, 5, +4, 5, 4, 4, 3, 5, 4, 4, 3, 4, 3, 3, 2, 7, 6, 6, 5, +6, 5, 5, 4, 6, 5, 5, 4, 5, 4, 4, 3, 6, 5, 5, 4, 5, +4, 4, 3, 5, 4, 4, 3, 4, 3, 3, 2, 6, 5, 5, 4, 5, 4, +4, 3, 5, 4, 4, 3, 4, 3, 3, 2, 5, 4, 4, 3, 4, 3, 3, +2, 4, 3, 3, 2, 3, 2, 2, 1, 7, 6, 6, 5, 6, 5, 5, 4, +6, 5, 5, 4, 5, 4, 4, 3, 6, 5, 5, 4, 5, 4, 4, 3, 5, +4, 4, 3, 4, 3, 3, 2, 6, 5, 5, 4, 5, 4, 4, 3, 5, 4, +4, 3, 4, 3, 3, 2, 5, 4, 4, 3, 4, 3, 3, 2, 4, 3, 3, +2, 3, 2, 2, 1, 6, 5, 5, 4, 5, 4, 4, 3, 5, 4, 4, 3, +4, 3, 3, 2, 5, 4, 4, 3, 4, 3, 3, 2, 4, 3, 3, 2, 3, +2, 2, 1, 5, 4, 4, 3, 4, 3, 3, 2, 4, 3, 3, 2, 3, 2, +2, 1, 4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, +0 }; + +static const unsigned char bitson[]={ +0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, +2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, +2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, +4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, +2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, +4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, +4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, +6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, +2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, +4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, +4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, +6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, +4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, +6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, +6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, +8 }; + + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + int n=0; + grib_accessor_count_missing* self = (grib_accessor_count_missing*)a; + a->length=0; + a->flags|=GRIB_ACCESSOR_FLAG_READ_ONLY; + self->bitmap = grib_arguments_get_name(a->parent->h,arg,n++); + self->unusedBitsInBitmap = grib_arguments_get_name(a->parent->h,arg,n++); + self->numberOfDataPoints = grib_arguments_get_name(a->parent->h,arg,n++); +} + +static int used[] ={ 0,1,3,7,15,31,63,127,255}; + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_count_missing* self = (grib_accessor_count_missing*)a; + unsigned char* p; + int i; + long size=0; + long offset=0; + long unusedBitsInBitmap=0; + long numberOfDataPoints=0; + grib_handle* h=a->parent->h; + grib_accessor* bitmap=grib_find_accessor(a->parent->h,self->bitmap); + + *val=0; + *len=1; + if (!bitmap) return GRIB_SUCCESS; + + size=grib_byte_count(bitmap); + offset=grib_byte_offset(bitmap); + + if (grib_get_long(h,self->unusedBitsInBitmap,&unusedBitsInBitmap) != GRIB_SUCCESS) { + if (grib_get_long(h,self->numberOfDataPoints,&numberOfDataPoints) != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"unable to count missing values"); + return GRIB_INTERNAL_ERROR; + } + unusedBitsInBitmap=size*8-numberOfDataPoints; + } + + p=a->parent->h->buffer->data+offset; + + size-=unusedBitsInBitmap/8; + unusedBitsInBitmap= unusedBitsInBitmap % 8; + + for (i=0;idump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + *val = a->parent->h->context->handle_total_count; + *len =1; + return 0; +} + diff --git a/src/grib_accessor_class_data_2order_packing.c b/src/grib_accessor_class_data_2order_packing.c new file mode 100644 index 000000000..bab7584c7 --- /dev/null +++ b/src/grib_accessor_class_data_2order_packing.c @@ -0,0 +1,982 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#define fortint long +#define fortfloat double +#define C2FORT(x) (x) +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_values + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=const char* bits_per_value + MEMBERS=const char* reference_value + MEMBERS=const char* binary_scale_factor + MEMBERS=const char* decimal_scale_factor + MEMBERS=const char* half_byte + MEMBERS=const char* n1 + MEMBERS=const char* n2 + MEMBERS=const char* extraValues + MEMBERS=const char* p1 + MEMBERS=const char* p2 + MEMBERS=const char* matrix_values + MEMBERS=const char* snd_bitmap + MEMBERS=const char* snd_ordr_wdiff + MEMBERS=const char* general_ext + MEMBERS=const char* boustrophedonic + MEMBERS=const char* two_ordr_spd + MEMBERS=const char* plus1_spd + MEMBERS=const char* width_widths + MEMBERS=const char* width_lengths + MEMBERS=const char* octet_start_group + MEMBERS=const char* width_spd_sp_desc + MEMBERS=const char* nap + MEMBERS=const char* bitmap + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_2order_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_2order_packing */ + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; + const char* half_byte; + const char* n1; + const char* n2; + const char* extraValues; + const char* p1; + const char* p2; + const char* matrix_values; + const char* snd_bitmap; + const char* snd_ordr_wdiff; + const char* general_ext; + const char* boustrophedonic; + const char* two_ordr_spd; + const char* plus1_spd; + const char* width_widths; + const char* width_lengths; + const char* octet_start_group; + const char* width_spd_sp_desc; + const char* nap; + const char* bitmap; +} grib_accessor_data_2order_packing; + +extern grib_accessor_class* grib_accessor_class_values; + +static grib_accessor_class _grib_accessor_class_data_2order_packing = { + &grib_accessor_class_values, /* super */ + "data_2order_packing", /* name */ + sizeof(grib_accessor_data_2order_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_2order_packing = &_grib_accessor_class_data_2order_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_2order_packing *self =(grib_accessor_data_2order_packing*)a; + + self->bits_per_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->reference_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->binary_scale_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->decimal_scale_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->half_byte = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->n1 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->n2 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->p1 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->extraValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->p2 = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->matrix_values = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->snd_bitmap = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->snd_ordr_wdiff = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->general_ext = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->boustrophedonic = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->two_ordr_spd = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->plus1_spd = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->width_widths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->width_lengths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->octet_start_group = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->width_spd_sp_desc = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->nap = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->bitmap = grib_arguments_get_name(a->parent->h,args,self->carg++); + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + +} + +static const unsigned char BitsSetTable256[256] = +{ +# define B2(n) n, n+1, n+1, n+2 +# define B4(n) B2(n), B2(n+1), B2(n+1), B2(n+2) +# define B6(n) B4(n), B4(n+1), B4(n+1), B4(n+2) + B6(0), B6(1), B6(1), B6(2) +}; + +static const unsigned char left_mask[8]={0,0x80,0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe }; +static const unsigned char right_mask[8]={0,0x80,0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe }; + +static unsigned char* bitmap_pop_line(unsigned char* bitmap,long* bitmap_len,int *bit_offset, + long points_in_line,int *values_in_line) { + unsigned char* p=bitmap; + int m=0,bits=0; + int bytes=0; + + *values_in_line=0; + + if (*bit_offset) { + bits=8 - *bit_offset; + m=*(p++) & right_mask[bits]; + *values_in_line += BitsSetTable256[m]; + points_in_line-=bits; + (*bitmap_len)--; + *bit_offset=0; + } + + bytes=points_in_line/8; + + while (bytes) { + m=*(p++) & 0xff; + *values_in_line += BitsSetTable256[m]; + (*bitmap_len)--; + bytes--; + } + + *bit_offset=points_in_line % 8; + m=*p & left_mask[*bit_offset]; + *values_in_line += BitsSetTable256[m]; + + return p; +} + +static int reverse_rows (unsigned long* data, long len, long number_along_parallel, + unsigned char* bitmap,long bitmap_len){ + long count = 0; + long i = 0; + long left = 0; + long right = number_along_parallel-1; + long tmp = 0; + long inc; + + if (bitmap_len==0) { + /* NO BITMAP*/ + inc=number_along_parallel; + count = number_along_parallel; + + while(count < len){ + left = 0; + right = number_along_parallel-1; + data += inc; + + for (i = 0;i0); + } + + inc=number_along_parallel*2; + count += inc; + } + } else { + /*BITMAP present number of point per line not constant*/ + int line_len=0,bit_offset=0; + long bitmap_left_len=bitmap_len; + unsigned char* p=bitmap; + long count=0; + + p=bitmap_pop_line(p,&bitmap_left_len,&bit_offset,number_along_parallel,&line_len); + while(bitmap_left_len>0 && count>=len){ + count+=line_len; + data += line_len; + + p=bitmap_pop_line(p,&bitmap_left_len,&bit_offset,number_along_parallel,&line_len); + left = 0; + right = line_len-1; + + for (i = 0;i0); + } + + count+=line_len; + Assert(countv[j]) + *bias = v[j]; + } + + for(j = order; j< len;j++){ + Assert(v[j]-*bias >=0); + vals[j] = v[j]-*bias; + } + + grib_context_free(c,v); + return 0; +} + +static int de_spatial_difference (grib_context *c, unsigned long* vals, long len, long order, long bias){ + + long j = 0; + + long i_origin = 0; + long i_first_diff = 0; + long i_second_diff = 0; + if(order == 0)return 0; + Assert(order > 0); + Assert(order <= 3); + + i_origin=vals[order-1]; + + if (order == 1) { + for(j = 1; j< len;j++){ + i_origin=i_origin+(vals[j]+bias); + vals[j]=i_origin; + } + } + + if (order == 2){ + i_first_diff=vals[1]-vals[0]; + for(j = 2; j< len;j++){ + i_first_diff=i_first_diff+(vals[j]+bias); + i_origin=i_origin+i_first_diff; + vals[j]=i_origin; + } + } + + if (order == 3){ + i_first_diff=vals[2]-vals[1]; + i_second_diff=i_first_diff-(vals[1]-vals[0]); + for(j = 3; j< len;j++){ + i_second_diff=i_second_diff+(vals[j]+bias); + i_first_diff=i_first_diff+i_second_diff; + i_origin=i_origin+i_first_diff; + /* if(j<10) fprintf(stdout,"> %d = %d\n",j,i_origin); + */ vals[j]=i_origin; + + } + } + return 0; +} + +#define KEEP_OLD 0 + +#if KEEP_OLD == 1 + second_order_packed* sd = NULL; +#endif + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_2order_packing* self = (grib_accessor_data_2order_packing*)a; + + size_t i = 0; + size_t j = 0; + size_t n_vals = grib_value_count(a); + + long vcount = 0, err = 0, bias = 0; + double reference_value; + long binary_scale_factor; + long bits_per_value, decimal_scale_factor; + long n1 = 0, n2 = 0, extraValues = 0, p1 = 0, p2 = 0; + + long offsetsection = 0, snd_bitmap = 0, snd_ordr_wdiff = 0; + + long matrix_values =0; + long general_ext =0; + long boustrophedonic =0; + long two_ordr_spd =0; + long plus1_spd =0; + + long nbits_per_width =0; + long nbits_per_group_size =0; + long octet_start_group =0; + long width_spd_sp_desc =0; + + + unsigned char* buf_size_of_groups = (unsigned char*)a->parent->h->buffer->data; + unsigned char* buf_width_of_group = (unsigned char*)a->parent->h->buffer->data; + unsigned char* bufrefs = (unsigned char*)a->parent->h->buffer->data; + unsigned char* bufvals = (unsigned char*)a->parent->h->buffer->data; + + double s = 0; + double d = 0; + + double max = 0; + double min = 0; + + unsigned long* sec_val = NULL; + long ref_vals = 0; + short n_sp_diff = 0; + + short f_size_of_group = 0; + short f_width_of_group = 0; + + long bitp = 0; + long pointer_of_group_size = 0; + long pointer_of_group_width = 0; + long refsp = 0; + long nap = 0; + unsigned char* bitmap=NULL; + grib_accessor* abitmap=NULL; + size_t bitmap_len=0; + + if((err = grib_get_long_internal(a->parent->h,self->offsetsection,&offsetsection)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) + != GRIB_SUCCESS) return err; + if((err = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) + != GRIB_SUCCESS)return err; + if((err = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->n1,&n1)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->n2, &n2)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->p1, &p1)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->extraValues, &extraValues)) != GRIB_SUCCESS) return err; + + p1=p1+65536*extraValues; + + if((err = grib_get_long_internal(a->parent->h,self->p2, &p2)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->matrix_values, &matrix_values)) + != GRIB_SUCCESS)return err; + if((err = grib_get_long_internal(a->parent->h,self->snd_bitmap, &snd_bitmap)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->snd_ordr_wdiff, &snd_ordr_wdiff)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->general_ext, &general_ext)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->boustrophedonic, &boustrophedonic)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->two_ordr_spd, &two_ordr_spd)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->plus1_spd, &plus1_spd)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->width_widths, &nbits_per_width)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->width_lengths, &nbits_per_group_size)) + != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->octet_start_group, &octet_start_group)) + != GRIB_SUCCESS) return err; + + if((err = grib_get_long_internal(a->parent->h,self->width_spd_sp_desc, &width_spd_sp_desc)) + != GRIB_SUCCESS) width_spd_sp_desc=-1; + + if((err = grib_get_long_internal(a->parent->h,self->nap, &nap)) != GRIB_SUCCESS) return err; + + self->dirty=0; + + n_sp_diff = two_ordr_spd*2+plus1_spd; + + Assert(bits_per_value < (sizeof(unsigned long)*8)-1); + + if ((abitmap=grib_find_accessor(a->parent->h,self->bitmap))!=NULL) { + bitmap_len=grib_byte_count(abitmap); + bitmap=grib_context_malloc_clear(a->parent->h->context,sizeof(char)*bitmap_len); + err=grib_unpack_bytes(abitmap,bitmap,&bitmap_len); + if (err) {grib_context_free(a->parent->h->context,bitmap); return err;} + } + + if(bits_per_value == 0) + return GRIB_NOT_IMPLEMENTED; + + /* I have everything now start decoding */ +/* + fprintf(stdout,"\n****************************************\n"); + fprintf(stdout," bits_per_value = %ld\n", bits_per_value); + fprintf(stdout," reference_value = %g\n", reference_value); + fprintf(stdout," binary_scale_factor = %ld\n", binary_scale_factor); + fprintf(stdout," decimal_scale_factor = %ld\n", decimal_scale_factor); + fprintf(stdout," n1 = %ld\n", n1); + fprintf(stdout," n2 = %ld\n", n2); + fprintf(stdout," p1 = %ld\n", p1); + fprintf(stdout," p2 = %ld\n", p2); + fprintf(stdout," matrix_values = %ld\n", matrix_values); + fprintf(stdout," snd_bitmap = %ld\n", snd_bitmap); + fprintf(stdout," snd_ordr_wdiff = %ld\n", snd_ordr_wdiff); + fprintf(stdout," general_ext = %ld\n", general_ext); + fprintf(stdout," boustrophedonic = %ld\n", boustrophedonic); + fprintf(stdout," two_ordr_spd = %ld \n", two_ordr_spd); + + fprintf(stdout," plus1_spd = %ld\n", plus1_spd); + + fprintf(stdout," n_sp_diff = %d\n", n_sp_diff); + fprintf(stdout," width_widths = %ld\n", nbits_per_group_size); + fprintf(stdout," width_lengths = %ld\n", nbits_per_width); + fprintf(stdout," octet_start_group = %ld\n", octet_start_group); + fprintf(stdout," width_spd_sp_desc = %ld\n", width_spd_sp_desc); + + + fprintf(stdout," offsetsection = %ld\n", offsetsection); + + fprintf(stdout," offset w = %ld\n", octet_start_group + offsetsection); + + fprintf(stdout,"\n****************************************\n"); +*/ + if(snd_bitmap || matrix_values) + return GRIB_NOT_IMPLEMENTED; + + + sec_val = grib_context_malloc(a->parent->h->context,(n_vals)*sizeof(unsigned long)); + grib_context_free(a->parent->h->context,sec_val); + sec_val = grib_context_malloc(a->parent->h->context,(n_vals)*sizeof(unsigned long)); + + buf_width_of_group += a->offset; + buf_size_of_groups += offsetsection+(octet_start_group-1); /* -1 because of documented starting at 1(and not 0)*/ + bufrefs += offsetsection+n1-1; /* -1 because of documented starting at 1(and not 0)*/ + + pointer_of_group_size = 0; + pointer_of_group_width = 0; + refsp = 0; + + for(i=0;i < n_sp_diff;i++) + sec_val[i] = grib_decode_unsigned_long(buf_width_of_group, &pointer_of_group_width, width_spd_sp_desc); + + + bias = grib_decode_signed_longb(buf_width_of_group, &pointer_of_group_width, width_spd_sp_desc); + + bufvals += offsetsection+n2-1; + bitp = 0; + vcount = n_sp_diff; + + if(pointer_of_group_width%8) + pointer_of_group_width = 8+(pointer_of_group_width-(pointer_of_group_width%8)); +#if KEEP_OLD == 1 + if(sd == NULL){ + sd = grib_context_malloc_clear(a->parent->h->context,sizeof(second_order_packed)); + sd->packed_byte_count = 0; + sd->nbits_per_group_size = nbits_per_group_size; + sd->nbits_per_widths = nbits_per_width; + sd->size_of_group_array = p1; + sd->array_of_group_size = grib_context_malloc_clear(a->parent->h->context,sizeof(unsigned long)*sd->size_of_group_array); + sd->array_of_group_width = grib_context_malloc_clear(a->parent->h->context,sizeof(unsigned long)*sd->size_of_group_array); + sd->array_of_group_refs = grib_context_malloc_clear(a->parent->h->context,sizeof( long)*sd->size_of_group_array); + } +#endif + for(i=0;i < p1;i++){ + f_width_of_group = (short) grib_decode_unsigned_long(buf_width_of_group, &pointer_of_group_width, nbits_per_width); + f_size_of_group = (short) grib_decode_unsigned_long(buf_size_of_groups, &pointer_of_group_size, nbits_per_group_size); + ref_vals = grib_decode_unsigned_long(bufrefs, &refsp, bits_per_value); +#if KEEP_OLD == 1 + + if(sd->packed_byte_count == 0){ + sd->array_of_group_width[i] = f_width_of_group; + sd->array_of_group_size[i] = f_size_of_group; + sd->array_of_group_refs[i] = ref_vals; + } +#endif + for(j=0; j < f_size_of_group;j++){ + sec_val[vcount+j] = ref_vals + grib_decode_unsigned_long(bufvals, &bitp, f_width_of_group); + } + vcount += f_size_of_group; + } +#if KEEP_OLD == 1 + if(sd->packed_byte_count == 0) sd->packed_byte_count = (bitp+7)/8; +#endif + + Assert (n_vals == vcount); + /*for(i=0;i < 10;i++) + printf("readvalue [%d] %ld %ld bias %ld <<\n", i,sec_val[i],binary_scale_factor,bias );*/ + + if(snd_ordr_wdiff) + de_spatial_difference(a->parent->h->context,sec_val, n_vals, n_sp_diff, bias); + + if(boustrophedonic) + reverse_rows(sec_val,n_vals,nap,bitmap,bitmap_len); + + s = grib_power(binary_scale_factor,2); + d = grib_power(-decimal_scale_factor,10) ; + + for(i=0;i < n_vals;i++) + val[i] = (double) ((((double)sec_val[i])*s)+reference_value)*d; + + max = val[0]; + min = max; + for(i=0;i< n_vals;i++) + { + if ( val[i] > max ) + max = val[i]; + if ( val[i] < min ) + min = val[i]; + } + min *= d; + max *= d; + + grib_context_free(a->parent->h->context,sec_val); + if (bitmap!=NULL) grib_context_free(a->parent->h->context,bitmap); + + return err; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_2order_packing* self = (grib_accessor_data_2order_packing*)a; + + size_t i = 0; + size_t j = 0; + size_t n_vals = *len; + size_t buff_len = 0; + double divisor = 1; + long vcount = 0; + int err = 0; + long bias = 0; + double reference_value; + long binary_scale_factor; + long bits_per_value; + long bit_per_val_rectified_for_gribex; + long decimal_scale_factor; + long n1 = 0; + long n2 = 0; + long p1 = 0; + long n_unused_bits = 0; + long used_bits = 0; + long offsetsection = 0; + long snd_bitmap = 0; + long snd_ordr_wdiff = 0; + + long matrix_values = 0; + + long general_ext = 0; + long boustrophedonic = 0; + long two_ordr_spd = 0; + long plus1_spd = 0; + + long octet_start_group = 0; + long width_spd_sp_desc = 0; + + unsigned char* buf = NULL; + unsigned char* buf_size_of_groups = NULL; + unsigned char* buf_width_of_group = NULL; + unsigned char* buf_refs = NULL; + unsigned char* buf_vals = NULL; + + + double d = 0; + + unsigned long* sec_val = NULL; + unsigned long* group_val = NULL; + + short n_sp_diff = 0; + unsigned char* bitmap=NULL; + grib_accessor* abitmap=NULL; + size_t bitmap_len=0; + +#if KEEP_OLD == 1 + +#else + second_order_packed* sd = NULL; +#endif + + long bitp = 0; + long pointer_of_group_size = 0; + long pointer_of_group_width = 0; + long refsp = 0; + long nap = 0; + long offsetdata = 0; + + double max; + double min; + int extraValues=0; + + + size_t nv =0; + + if (*len ==0) return GRIB_NO_VALUES; + + if((err = grib_get_long_internal(a->parent->h,self->offsetsection,&offsetsection)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->offsetdata,&offsetdata)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->matrix_values, &matrix_values)) != GRIB_SUCCESS)return err; + if((err = grib_get_long_internal(a->parent->h,self->snd_bitmap, &snd_bitmap)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->snd_ordr_wdiff, &snd_ordr_wdiff)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->general_ext, &general_ext)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->boustrophedonic, &boustrophedonic)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->width_spd_sp_desc, &width_spd_sp_desc)) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->nap, &nap)) != GRIB_SUCCESS) return err; + + if ((abitmap=grib_find_accessor(a->parent->h,self->bitmap))!=NULL) { + bitmap_len=grib_byte_count(abitmap); + bitmap=grib_context_malloc_clear(a->parent->h->context,sizeof(char)*bitmap_len); + err=grib_unpack_bytes(abitmap,bitmap,&bitmap_len); + if (err) {grib_context_free(a->parent->h->context,bitmap); return err;} + } + + two_ordr_spd = 1; + plus1_spd = 0; + + if(bits_per_value == 0) + return GRIB_NOT_IMPLEMENTED; + + n_sp_diff = two_ordr_spd*2+plus1_spd; + /* calculation of integer array */ + + sec_val = grib_context_malloc(a->parent->h->context,(n_vals)*sizeof(long)); + d = grib_power(decimal_scale_factor,10) ; + max = val[0]; + min = max; + for(i=0;i< n_vals;i++) + { + if ( val[i] > max ) max = val[i]; + if ( val[i] < min ) min = val[i]; + } + min *= d; + max *= d; + + bit_per_val_rectified_for_gribex = bits_per_value+8-bits_per_value%8; + if (grib_get_nearest_smaller_value(a->parent->h,self->reference_value,min,&reference_value) + !=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to find nearest_smaller_value of %g for %s",min,self->reference_value); + exit(GRIB_INTERNAL_ERROR); + } + + /* the scale factor in Grib 1 is adjusted in gribex, for "normalization purpose" ... ?*/ + binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&err); + + divisor = grib_power(-binary_scale_factor,2); + + + for(i=0;i< n_vals;i++) + sec_val[i] = (unsigned long)((((val[i]*d)-reference_value)*divisor)+0.5); + + /* reverse the rows*/ + if(boustrophedonic) + reverse_rows(sec_val,n_vals,nap,bitmap,bitmap_len); + + + if(snd_ordr_wdiff) + if((err = spatial_difference(a->parent->h->context,sec_val, n_vals, n_sp_diff, &bias))){ + grib_context_free(a->parent->h->context,sec_val); + return err; + } + + + + /* for(i=0;i < 10;i++) + printf("paking value [%d] %g %ld %ld bias %ld <<\n", i, val[i],sec_val[i],binary_scale_factor,bias ); +*/ + nv = n_vals-n_sp_diff; + group_val = sec_val+n_sp_diff; + +#if KEEP_OLD == 1 + +#else + sd = grib_get_second_order_groups(a->parent->h->context, group_val, nv); +#endif + + bitp = 0; + p1 = sd->size_of_group_array; + + bitp = (width_spd_sp_desc*(n_sp_diff+1)) ; + octet_start_group = (bitp+7)/8; + + bitp = (p1*sd->nbits_per_widths); + octet_start_group += (bitp+7)/8; + + bitp = (octet_start_group*8) + (sd->nbits_per_group_size*p1); + n1 = (bitp+7)/8; + + bitp = n1*8 + bits_per_value*p1; + n2 = (bitp+7)/8; + + used_bits = n2*8; + + buff_len = (n2+sd->packed_byte_count); + + if((a->offset+buff_len)%2) buff_len++; + + buf = NULL; + buf = grib_context_malloc_clear(a->parent->h->context,buff_len); + + buf_width_of_group = buf; + buf_size_of_groups = buf+octet_start_group; + buf_refs = buf+n1; + buf_vals = buf+n2; + + pointer_of_group_size = 0; + pointer_of_group_width = 0; + refsp = 0; + bitp = 0; + + for(i=0;i < n_sp_diff;i++) + grib_encode_unsigned_longb(buf_width_of_group,sec_val[i], &pointer_of_group_width, width_spd_sp_desc); + + grib_encode_signed_longb(buf_width_of_group, bias, &pointer_of_group_width, width_spd_sp_desc); + + if(pointer_of_group_width%8) + pointer_of_group_width = 8+(pointer_of_group_width-(pointer_of_group_width%8)); + + vcount = n_sp_diff; + + for(i = 0;iarray_of_group_width[i],&pointer_of_group_width,sd->nbits_per_widths); + grib_encode_unsigned_longb(buf_size_of_groups,sd->array_of_group_size[i], &pointer_of_group_size ,sd->nbits_per_group_size); + grib_encode_unsigned_longb(buf_refs, sd->array_of_group_refs[i], &refsp , bits_per_value); + used_bits += sd->array_of_group_size[i]*sd->array_of_group_width[i]; + for(j=0; j < sd->array_of_group_size[i];j++){ + grib_encode_unsigned_longb(buf_vals, sec_val[vcount+j]-sd->array_of_group_refs[i] ,&bitp , sd->array_of_group_width[i]); + + /* if(vcount+j < 10) + printf(">>paking value [%ld] %g %ld %ld nb %ld <<\n", vcount+j, val[vcount+j],sec_val[vcount+j],binary_scale_factor,sd->array_of_group_refs[i] );*/ + } + vcount+= sd->array_of_group_size[i]; + } + n_unused_bits = (buff_len*8)-used_bits; + + grib_buffer_replace(a, buf,buff_len,1,1); + + if((buff_len + (offsetdata-offsetsection)) %2) { + buff_len ++; + grib_update_size(a,buff_len); + } + + octet_start_group += 1+ a->offset-offsetsection; + if((err = grib_set_long_internal(a->parent->h,self->octet_start_group, octet_start_group)) != GRIB_SUCCESS) return err; + + n1 += 1+a->offset-offsetsection; + if((err = grib_set_long_internal(a->parent->h,self->n1,n1)) != GRIB_SUCCESS) return err; + + n2 += 1+a->offset-offsetsection; + if((err = grib_set_long_internal(a->parent->h,self->n2,n2)) != GRIB_SUCCESS) return err; + + extraValues=0; + while (p1 > 65535) { + p1-=65536; + extraValues++; + } + + if((err = grib_set_long_internal(a->parent->h,self->p1,p1)) != GRIB_SUCCESS) return err; + + if((err = grib_set_long_internal(a->parent->h,self->extraValues,extraValues)) != GRIB_SUCCESS) return err; + + if((err = grib_set_long_internal(a->parent->h,self->p2,n_vals - n_sp_diff)) != GRIB_SUCCESS) return err; + + if((err = grib_set_double_internal(a->parent->h,self->reference_value, reference_value)) != GRIB_SUCCESS)return err; + + { + /* Make sure we can decode it again */ + double ref = 1e-100; + grib_get_double_internal(a->parent->h,self->reference_value,&ref); + Assert(ref == reference_value); + } + + if((err = grib_set_long_internal(a->parent->h,self->binary_scale_factor, binary_scale_factor)) != GRIB_SUCCESS) return err; + + if((err = grib_set_long_internal(a->parent->h,self->decimal_scale_factor, decimal_scale_factor)) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->width_widths, sd->nbits_per_widths)) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->width_lengths, sd->nbits_per_group_size)) != GRIB_SUCCESS) return err; + + + err = grib_set_long_internal(a->parent->h,self->half_byte, n_unused_bits); + if(err != GRIB_SUCCESS) return err; + +#if KEEP_OLD == 1 + +#else + + grib_free_second_order_groups(a->parent->h->context,sd); +#endif +; + + grib_context_free(a->parent->h->context,buf); + grib_context_free(a->parent->h->context,sec_val); + if (bitmap!=NULL) grib_context_free(a->parent->h->context,bitmap); + + return GRIB_SUCCESS; +} + +static long value_count(grib_accessor* a){ + grib_accessor_data_2order_packing* self = (grib_accessor_data_2order_packing*)a; + long count = 0; + long two_ordr_spd = 0; + long plus1_spd = 0; + unsigned char* buf_size_of_groups = (unsigned char*)a->parent->h->buffer->data; + long octet_start_group = 0; + long offsetsection = 0; + long nbits_per_lengths = 0; + long pointer_of_group_size = 0; + long p1 = 0; + long extraValues=0; + + size_t i = 0; + + if(grib_get_long_internal(a->parent->h,self->two_ordr_spd, &two_ordr_spd) != GRIB_SUCCESS) + return 0; + if( grib_get_long_internal(a->parent->h,self->plus1_spd, &plus1_spd) != GRIB_SUCCESS) + return 0; + if( grib_get_long_internal(a->parent->h,self->width_lengths, &nbits_per_lengths) != GRIB_SUCCESS) + return 0; + if( grib_get_long_internal(a->parent->h,self->offsetsection, &offsetsection) != GRIB_SUCCESS) + return 0; + if( grib_get_long_internal(a->parent->h,self->octet_start_group, &octet_start_group) != GRIB_SUCCESS) + return 0; + if( grib_get_long_internal(a->parent->h,self->p1, &p1) != GRIB_SUCCESS) + return 0; + if( grib_get_long_internal(a->parent->h,self->extraValues, &extraValues) != GRIB_SUCCESS) + return 0; + + p1+=extraValues*65536; + + buf_size_of_groups += offsetsection+(octet_start_group-1); + count = two_ordr_spd*2+plus1_spd; + + for(i=0;i < p1;i++) + count += grib_decode_unsigned_long(buf_size_of_groups, &pointer_of_group_size, nbits_per_lengths); + + + return count; + +} diff --git a/src/grib_accessor_class_data_2order_packing_count.c b/src/grib_accessor_class_data_2order_packing_count.c new file mode 100644 index 000000000..f1984b79b --- /dev/null +++ b/src/grib_accessor_class_data_2order_packing_count.c @@ -0,0 +1,196 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_unsigned + IMPLEMENTS = init + IMPLEMENTS = unpack_long + MEMBERS = const char* offsetsection + MEMBERS = const char* p1 + MEMBERS = const char* two_ordr_spd + MEMBERS = const char* plus1_spd + MEMBERS = const char* width_lengths + MEMBERS = const char* octet_start_group + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_2order_packing_count { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in data_2order_packing_count */ + const char* offsetsection; + const char* p1; + const char* two_ordr_spd; + const char* plus1_spd; + const char* width_lengths; + const char* octet_start_group; +} grib_accessor_data_2order_packing_count; + +extern grib_accessor_class* grib_accessor_class_unsigned; + +static grib_accessor_class _grib_accessor_class_data_2order_packing_count = { + &grib_accessor_class_unsigned, /* super */ + "data_2order_packing_count", /* name */ + sizeof(grib_accessor_data_2order_packing_count), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_2order_packing_count = &_grib_accessor_class_data_2order_packing_count; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_2order_packing_count *self =(grib_accessor_data_2order_packing_count*)a; + int n=0; + + self->offsetsection = grib_arguments_get_name(a->parent->h,args,n++); + self->p1 = grib_arguments_get_name(a->parent->h,args,n++); + self->two_ordr_spd = grib_arguments_get_name(a->parent->h,args,n++); + self->plus1_spd = grib_arguments_get_name(a->parent->h,args,n++); + self->width_lengths = grib_arguments_get_name(a->parent->h,args,n++); + self->octet_start_group = grib_arguments_get_name(a->parent->h,args,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + +} + + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_accessor_data_2order_packing_count* self = (grib_accessor_data_2order_packing_count*)a; + long count = 0; + long two_ordr_spd = 0; + long plus1_spd = 0; + unsigned char* buf_size_of_groups = (unsigned char*)a->parent->h->buffer->data; + long octet_start_group = 0; + long offsetsection = 0; + long nbits_per_lengths = 0; + long pointer_of_group_size = 0; + long p1 = 0; + + size_t i = 0; + + if ((ret=grib_get_long_internal(a->parent->h,self->two_ordr_spd, &two_ordr_spd)) + !=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h,self->plus1_spd, &plus1_spd)) + !=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h,self->width_lengths, &nbits_per_lengths)) + !=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h,self->offsetsection, &offsetsection)) + !=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h,self->octet_start_group, &octet_start_group)) + !=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h,self->p1, &p1)) + !=GRIB_SUCCESS) return ret; + + buf_size_of_groups += offsetsection+(octet_start_group-1); + count = two_ordr_spd*2+plus1_spd; + + for(i=0;i < p1;i++) + count += grib_decode_unsigned_long(buf_size_of_groups, &pointer_of_group_size, nbits_per_lengths); + + *val=count; + *len=1; + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_data_apply_bitmap.c b/src/grib_accessor_class_data_apply_bitmap.c new file mode 100644 index 000000000..b8266f0ad --- /dev/null +++ b/src/grib_accessor_class_data_apply_bitmap.c @@ -0,0 +1,359 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init + IMPLEMENTS = unpack_double;unpack_double_element + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + IMPLEMENTS = dump;get_native_type + MEMBERS=const char* coded_values + MEMBERS=const char* bitmap + MEMBERS=const char* missing_value + MEMBERS=const char* number_of_data_points + MEMBERS=const char* number_of_values + MEMBERS=const char* binary_scale_factor + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int unpack_double_element(grib_accessor*,size_t i, double* val); + +typedef struct grib_accessor_data_apply_bitmap { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in data_apply_bitmap */ + const char* coded_values; + const char* bitmap; + const char* missing_value; + const char* number_of_data_points; + const char* number_of_values; + const char* binary_scale_factor; +} grib_accessor_data_apply_bitmap; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_data_apply_bitmap = { + &grib_accessor_class_gen, /* super */ + "data_apply_bitmap", /* name */ + sizeof(grib_accessor_data_apply_bitmap), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + &unpack_double_element, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_apply_bitmap = &_grib_accessor_class_data_apply_bitmap; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + int n=0; + grib_accessor_data_apply_bitmap *self =(grib_accessor_data_apply_bitmap*)a; + + self->coded_values = grib_arguments_get_name(a->parent->h,args,n++); + self->bitmap = grib_arguments_get_name(a->parent->h,args,n++); + self->missing_value = grib_arguments_get_name(a->parent->h,args,n++); + self->binary_scale_factor = grib_arguments_get_name(a->parent->h,args,n++); + self->number_of_data_points = grib_arguments_get_name(a->parent->h,args,n++); + self->number_of_values = grib_arguments_get_name(a->parent->h,args,n++); + + a->length = 0; +} +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_values(dumper,a); +} + + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_apply_bitmap *self =(grib_accessor_data_apply_bitmap*)a; + size_t len = 0; + int ret = 0; + + if(grib_find_accessor(a->parent->h,self->bitmap)) + ret = grib_get_size(a->parent->h,self->bitmap,&len); + else + ret = grib_get_size(a->parent->h,self->coded_values,&len); + + if(ret == GRIB_SUCCESS) + return len; + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "grib_accessor_data_simple_packing_bitmap : value_count : cannot get number of values %s", + a->name); + return 0; +} + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_apply_bitmap* self = (grib_accessor_data_apply_bitmap*)a; + + size_t i = 0; + size_t j = 0; + size_t n_vals = grib_value_count(a); + size_t coded_n_vals = 0; + + int err = 0; + double* coded_vals = NULL; + + double missing_value = 0; + + if(!grib_find_accessor(a->parent->h,self->bitmap)) + return grib_get_double_array_internal(a->parent->h,self->coded_values,val,len); + + if((err = grib_get_size(a->parent->h,self->coded_values,&coded_n_vals)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_double_internal(a->parent->h,self->missing_value,&missing_value)) + != GRIB_SUCCESS) return err; + + if(*len < n_vals) + { + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if (coded_n_vals==0) { + for(i=0;i < n_vals;i++) + val[i] = missing_value; + + *len=n_vals; + return GRIB_SUCCESS; + } + + if((err = grib_get_double_array_internal(a->parent->h,self->bitmap,val,&n_vals)) + != GRIB_SUCCESS) + return err; + + coded_vals = grib_context_malloc(a->parent->h->context,coded_n_vals*sizeof(double)); + if(coded_vals == NULL) return GRIB_OUT_OF_MEMORY; + + if((err = grib_get_double_array_internal(a->parent->h,self->coded_values,coded_vals,&coded_n_vals)) + != GRIB_SUCCESS) + { + grib_context_free(a->parent->h->context,coded_vals); + return err; + } + + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "grib_accessor_data_simple_packing_bitmap : unpack_double : creating %s, %d values", + a->name, n_vals); + + for(i=0;i < n_vals;i++) + { + if(val[i] == 0 ){ + val[i] = missing_value; + } + else + { + val[i] = coded_vals[j++]; + if(j>coded_n_vals) + { + grib_context_free(a->parent->h->context,coded_vals); + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "grib_accessor_data_simple_packing_bitmap [%s]:" + " unpack_double : number of coded values does not match bitmap %ld %ld", + a->name,coded_n_vals,n_vals); + + return GRIB_ARRAY_TOO_SMALL; + } + } + } + + *len = n_vals; + + grib_context_free(a->parent->h->context,coded_vals); + return err; +} + +static int unpack_double_element(grib_accessor* a, size_t idx,double* val) +{ + grib_accessor_data_apply_bitmap* self = (grib_accessor_data_apply_bitmap*)a; + int err = 0,i=0; + size_t cidx=0; + double missing_value = 0; + double* bvals=NULL; + size_t n_vals = grib_value_count(a); + + if(!grib_find_accessor(a->parent->h,self->bitmap)) + return grib_get_double_element_internal(a->parent->h,self->coded_values,idx,val); + + if((err = grib_get_double_internal(a->parent->h,self->missing_value,&missing_value)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_double_element_internal(a->parent->h,self->bitmap,idx,val)) != GRIB_SUCCESS) + return err; + + if (*val == 0) {*val=missing_value;return GRIB_SUCCESS;} + + bvals = grib_context_malloc(a->parent->h->context,n_vals*sizeof(double)); + if(bvals == NULL) return GRIB_OUT_OF_MEMORY; + + if((err = grib_get_double_array_internal(a->parent->h,self->bitmap,bvals,&n_vals)) != GRIB_SUCCESS) + return err; + + cidx=0; + for (i=0;iparent->h->context,bvals); + + return grib_get_double_element_internal(a->parent->h,self->coded_values,cidx,val); + +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_apply_bitmap* self = (grib_accessor_data_apply_bitmap*)a; + int err = 0; + size_t bmaplen = *len; + long coded_n_vals = 0; + double* coded_vals = NULL; + long i = 0; + long j = 0; + double missing_value = 0; + + if (*len ==0) return GRIB_NO_VALUES; + + if(!grib_find_accessor(a->parent->h,self->bitmap)){ + err = grib_set_double_array_internal(a->parent->h,self->coded_values,val,*len); + /*printf("SETTING TOTAL number_of_data_points %s %ld\n",self->number_of_data_points,*len);*/ + if(self->number_of_data_points) + grib_set_long_internal(a->parent->h,self->number_of_data_points,*len); + return err; + } + + if((err = grib_get_double_internal(a->parent->h,self->missing_value,&missing_value)) != GRIB_SUCCESS) + return err; + + if((err = grib_set_double_array_internal(a->parent->h,self->bitmap,val,bmaplen)) != GRIB_SUCCESS) + return err; + + coded_n_vals = *len; + + if(coded_n_vals < 1){ + err = grib_set_double_array_internal(a->parent->h,self->coded_values,NULL,0); + return err; + } + + coded_vals = grib_context_malloc_clear(a->parent->h->context,coded_n_vals*sizeof(double)); + if(!coded_vals) return GRIB_OUT_OF_MEMORY; + + for(i=0; i<*len ; i++) + { + if(val[i] != missing_value) { + coded_vals[j++] = val[i]; + } + } + + err = grib_set_double_array_internal(a->parent->h,self->coded_values,coded_vals,j); + if (j==0) { + if (self->number_of_values) + err=grib_set_long_internal(a->parent->h,self->number_of_values,0); + if (self->binary_scale_factor) + err=grib_set_long_internal(a->parent->h,self->binary_scale_factor,0); + } + + grib_context_free(a->parent->h->context,coded_vals); + + return err; +} + +static int get_native_type(grib_accessor* a) +{ +/* grib_accessor_data_apply_bitmap* self = (grib_accessor_data_apply_bitmap*)a; + return grib_accessor_get_native_type(grib_find_accessor(a->parent->h,self->coded_values));*/ + + return GRIB_TYPE_DOUBLE; +} diff --git a/src/grib_accessor_class_data_apply_boustrophedonic.c b/src/grib_accessor_class_data_apply_boustrophedonic.c new file mode 100644 index 000000000..03ad98c0f --- /dev/null +++ b/src/grib_accessor_class_data_apply_boustrophedonic.c @@ -0,0 +1,334 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init + IMPLEMENTS = unpack_double;unpack_double_element + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + IMPLEMENTS = dump;get_native_type + MEMBERS=const char* values + MEMBERS=const char* numberOfRows + MEMBERS=const char* numberOfColumns + MEMBERS=const char* numberOfPoints + MEMBERS=const char* pl + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int unpack_double_element(grib_accessor*,size_t i, double* val); + +typedef struct grib_accessor_data_apply_boustrophedonic { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in data_apply_boustrophedonic */ + const char* values; + const char* numberOfRows; + const char* numberOfColumns; + const char* numberOfPoints; + const char* pl; +} grib_accessor_data_apply_boustrophedonic; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_data_apply_boustrophedonic = { + &grib_accessor_class_gen, /* super */ + "data_apply_boustrophedonic", /* name */ + sizeof(grib_accessor_data_apply_boustrophedonic), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + &unpack_double_element, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_apply_boustrophedonic = &_grib_accessor_class_data_apply_boustrophedonic; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + int n=0; + grib_accessor_data_apply_boustrophedonic *self =(grib_accessor_data_apply_boustrophedonic*)a; + + self->values = grib_arguments_get_name(a->parent->h,args,n++); + self->numberOfRows = grib_arguments_get_name(a->parent->h,args,n++); + self->numberOfColumns = grib_arguments_get_name(a->parent->h,args,n++); + self->numberOfPoints = grib_arguments_get_name(a->parent->h,args,n++); + self->pl = grib_arguments_get_name(a->parent->h,args,n++); + + a->length = 0; +} +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_values(dumper,a); +} + + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_apply_boustrophedonic *self =(grib_accessor_data_apply_boustrophedonic*)a; + long numberOfPoints; + int ret; + + ret=grib_get_long_internal(a->parent->h,self->numberOfPoints,&numberOfPoints); + if (ret) return 0; + + return numberOfPoints; +} + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_apply_boustrophedonic* self = (grib_accessor_data_apply_boustrophedonic*)a; + size_t plSize=0; + long *pl=0; + double *values=0; + double *pvalues=0; + double *pval=0; + size_t valuesSize=0; + long i,j; + int ret; + long numberOfPoints,numberOfRows,numberOfColumns; + + ret=grib_get_long_internal(a->parent->h,self->numberOfPoints,&numberOfPoints); + if (ret) return ret; + + if(*len < numberOfPoints) { + *len = numberOfPoints; + return GRIB_ARRAY_TOO_SMALL; + } + + ret=grib_get_size(a->parent->h,self->values,&valuesSize); + if (ret) return ret; + + /* constant field */ + if (valuesSize==0) return 0; + + if (valuesSize!=numberOfPoints) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"boustrophedonic ordering error: ( %s=%ld ) != (sizeOf(%s)=%ld)", + self->numberOfPoints,numberOfPoints,self->values,(long)valuesSize); + return GRIB_DECODING_ERROR; + } + + values=grib_context_malloc_clear(a->parent->h->context,sizeof(double)*numberOfPoints); + ret=grib_get_double_array_internal(a->parent->h,self->values,values,&valuesSize); + if (ret) return ret; + + pvalues=values; + pval=val; + + ret=grib_get_long_internal(a->parent->h,self->numberOfRows,&numberOfRows); + if (ret) return ret; + + ret=grib_get_long_internal(a->parent->h,self->numberOfColumns,&numberOfColumns); + if (ret) return ret; + + if (grib_get_size(a->parent->h,self->pl,&plSize) == GRIB_SUCCESS) { + Assert(plSize==numberOfRows); + pl=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*plSize); + ret=grib_get_long_array_internal(a->parent->h,self->pl,pl,&plSize); + if (ret) return ret; + + for (j=0;jparent->h->context,pl); + + } else { + + for (j=0;jparent->h->context,values); + + return GRIB_SUCCESS; +} + +static int unpack_double_element(grib_accessor* a, size_t idx,double* val) +{ + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_apply_boustrophedonic* self = (grib_accessor_data_apply_boustrophedonic*)a; + size_t plSize=0; + long *pl=0; + double *values=0; + double *pvalues=0; + double *pval=0; + size_t valuesSize=0; + long i,j; + int ret; + long numberOfPoints,numberOfRows,numberOfColumns; + + ret=grib_get_long_internal(a->parent->h,self->numberOfPoints,&numberOfPoints); + if (ret) return ret; + + if(*len < numberOfPoints) { + *len = numberOfPoints; + return GRIB_ARRAY_TOO_SMALL; + } + + valuesSize=numberOfPoints; + + values=grib_context_malloc_clear(a->parent->h->context,sizeof(double)*numberOfPoints); + + pvalues=values; + pval=(double*)val; + + ret=grib_get_long_internal(a->parent->h,self->numberOfRows,&numberOfRows); + if (ret) return ret; + + ret=grib_get_long_internal(a->parent->h,self->numberOfColumns,&numberOfColumns); + if (ret) return ret; + + if (grib_get_size(a->parent->h,self->pl,&plSize) == GRIB_SUCCESS) { + Assert(plSize==numberOfRows); + pl=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*plSize); + ret=grib_get_long_array_internal(a->parent->h,self->pl,pl,&plSize); + if (ret) return ret; + + for (j=0;jparent->h->context,pl); + + } else { + + for (j=0;jparent->h,self->values,values,valuesSize); + if (ret) return ret; + + grib_context_free(a->parent->h->context,values); + + + return ret; +} + +static int get_native_type(grib_accessor* a) +{ + return GRIB_TYPE_DOUBLE; +} diff --git a/src/grib_accessor_class_data_apply_gdsnotpresent.c b/src/grib_accessor_class_data_apply_gdsnotpresent.c new file mode 100644 index 000000000..2f1de5fd6 --- /dev/null +++ b/src/grib_accessor_class_data_apply_gdsnotpresent.c @@ -0,0 +1,302 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + + +/**************************************** + * Enrico Fucile + ***************************************/ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + IMPLEMENTS = dump;get_native_type + MEMBERS=const char* coded_values + MEMBERS=const char* number_of_values + MEMBERS=const char* number_of_points + MEMBERS=const char* latitude_of_first_point + MEMBERS=const char* ni + MEMBERS=const char* missing_value + MEMBERS=const char* bitmap_present + MEMBERS=const char* bitmap + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_apply_gdsnotpresent { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in data_apply_gdsnotpresent */ + const char* coded_values; + const char* number_of_values; + const char* number_of_points; + const char* latitude_of_first_point; + const char* ni; + const char* missing_value; + const char* bitmap_present; + const char* bitmap; +} grib_accessor_data_apply_gdsnotpresent; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_data_apply_gdsnotpresent = { + &grib_accessor_class_gen, /* super */ + "data_apply_gdsnotpresent", /* name */ + sizeof(grib_accessor_data_apply_gdsnotpresent), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_apply_gdsnotpresent = &_grib_accessor_class_data_apply_gdsnotpresent; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + int n=0; + grib_accessor_data_apply_gdsnotpresent *self =(grib_accessor_data_apply_gdsnotpresent*)a; + + self->coded_values = grib_arguments_get_name(a->parent->h,args,n++); + self->number_of_values = grib_arguments_get_name(a->parent->h,args,n++); + self->number_of_points = grib_arguments_get_name(a->parent->h,args,n++); + self->latitude_of_first_point = grib_arguments_get_name(a->parent->h,args,n++); + self->ni = grib_arguments_get_name(a->parent->h,args,n++); + self->missing_value = grib_arguments_get_name(a->parent->h,args,n++); + self->bitmap_present = grib_arguments_get_name(a->parent->h,args,n++); + self->bitmap = grib_arguments_get_name(a->parent->h,args,n++); + + a->length = 0; +} +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_values(dumper,a); +} + + +static long value_count(grib_accessor* a) +{ + long number_of_points=0; + int ret; + grib_accessor_data_apply_gdsnotpresent *self =(grib_accessor_data_apply_gdsnotpresent*)a; + + if((ret = grib_get_long(a->parent->h,self->number_of_points,&number_of_points)) + != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "grib_accessor_data_apply_gdsnotpresent: value_count: unable to get number of points"); + return 0; + } + + return number_of_points; +} + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_apply_gdsnotpresent* self = (grib_accessor_data_apply_gdsnotpresent*)a; + + long number_of_points=0,number_of_values=0,ni=0; + long latitude_of_first_point=0; + size_t i = 0; + size_t n_vals = grib_value_count(a); + size_t size=0; + long missing_value; + + int err = 0; + double* coded_vals = NULL; + + if((err = grib_get_long(a->parent->h,self->number_of_points,&number_of_points)) + != GRIB_SUCCESS) return err; + + if((err = grib_get_long(a->parent->h,self->number_of_values,&number_of_values)) + != GRIB_SUCCESS) return err; + + if((err = grib_get_long(a->parent->h,self->latitude_of_first_point,&latitude_of_first_point)) + != GRIB_SUCCESS) return err; + + if((err = grib_get_long(a->parent->h,self->missing_value,&missing_value)) + != GRIB_SUCCESS) return err; + + if((err = grib_get_long(a->parent->h,self->ni,&ni)) + != GRIB_SUCCESS) return err; + + if(*len < number_of_points) + { + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if(number_of_values > 0){ + coded_vals = grib_context_malloc(a->parent->h->context,number_of_values*sizeof(double)); + + if(coded_vals == NULL) + return GRIB_OUT_OF_MEMORY; + } + + size=number_of_values; + if((err=grib_get_double_array_internal(a->parent->h,self->coded_values,coded_vals,&size)) + != GRIB_SUCCESS) { + grib_context_free(a->parent->h->context,coded_vals); + return err; + } + if (number_of_values!=size) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "grib_accessor_data_apply_gdsnotpresent : wrong numberOfValues %ld != %ld", + number_of_values,size); + } + + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "grib_accessor_data_apply_gdsnotpresent : unpack_double : creating %s, %d values", + a->name, number_of_points); + + if (latitude_of_first_point == 0) { + for (i=0;i < number_of_values;i++) val[i]=coded_vals[i]; + for (i=number_of_values;iparent->h->context,coded_vals); + return err; +} + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + int ret=GRIB_SUCCESS; + long bitmap_present=0; + + grib_accessor_data_apply_gdsnotpresent* self = (grib_accessor_data_apply_gdsnotpresent*)a; + + if (*len ==0) return GRIB_NO_VALUES; + + ret=grib_set_long(a->parent->h,self->bitmap_present,bitmap_present); + if(ret) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "Accessor %s cannont pack value for %s error %d \n", a->name, self->bitmap_present, ret); + return ret; + } + +#if 0 + if(!grib_find_accessor(a->parent->h,self->bitmap)){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "Accessor %s cannont access bitmap \n", a->name, self->bitmap_present, ret); + return ret; + } +#endif + + + ret = grib_set_double_array_internal(a->parent->h,self->coded_values,val,*len); + if(ret) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "Accessor %s cannont pack value for %s error %d \n", a->name, self->coded_values, ret); + return ret; + } + + return ret; +} + +static int get_native_type(grib_accessor* a) +{ +/* grib_accessor_data_apply_gdsnotpresent* self = (grib_accessor_data_apply_gdsnotpresent*)a; + return grib_accessor_get_native_type(grib_find_accessor(a->parent->h,self->coded_values));*/ + + return GRIB_TYPE_DOUBLE; +} diff --git a/src/grib_accessor_class_data_complex_packing.c b/src/grib_accessor_class_data_complex_packing.c new file mode 100644 index 000000000..4ebbf6cd9 --- /dev/null +++ b/src/grib_accessor_class_data_complex_packing.c @@ -0,0 +1,877 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_simple_packing + IMPLEMENTS = unpack_double + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + IMPLEMENTS = init + MEMBERS= const char* GRIBEX_sh_bug_present + MEMBERS= const char* ieee_floats + MEMBERS= const char* laplacianOperatorIsSet + MEMBERS= const char* laplacianOperator + MEMBERS= const char* sub_j + MEMBERS= const char* sub_k + MEMBERS= const char* sub_m + MEMBERS= const char* pen_j + MEMBERS= const char* pen_k + MEMBERS= const char* pen_m + END_CLASS_DEF + + */ + + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_complex_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_complex_packing */ + const char* GRIBEX_sh_bug_present; + const char* ieee_floats; + const char* laplacianOperatorIsSet; + const char* laplacianOperator; + const char* sub_j; + const char* sub_k; + const char* sub_m; + const char* pen_j; + const char* pen_k; + const char* pen_m; +} grib_accessor_data_complex_packing; + +extern grib_accessor_class* grib_accessor_class_data_simple_packing; + +static grib_accessor_class _grib_accessor_class_data_complex_packing = { + &grib_accessor_class_data_simple_packing, /* super */ + "data_complex_packing", /* name */ + sizeof(grib_accessor_data_complex_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_complex_packing = &_grib_accessor_class_data_complex_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +typedef unsigned long (*encode_float_proc)(double); +typedef double (*decode_float_proc)(unsigned long); + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_complex_packing *self =(grib_accessor_data_complex_packing*)a; + + self->GRIBEX_sh_bug_present = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->ieee_floats = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->laplacianOperatorIsSet = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->laplacianOperator = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->sub_j = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->sub_k = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->sub_m = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pen_j = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pen_k = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pen_m = grib_arguments_get_name(a->parent->h,args,self->carg++); + + a->flags |= GRIB_ACCESSOR_FLAG_DATA; +} + + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_complex_packing *self =(grib_accessor_data_complex_packing*)a; + int ret = 0; + + long pen_j= 0; + long pen_k= 0; + long pen_m= 0; + + if(a->length == 0) + return 0; + + if((ret = grib_get_long_internal(a->parent->h,self->pen_j,&pen_j)) != GRIB_SUCCESS) return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_k,&pen_k)) != GRIB_SUCCESS) return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_m,&pen_m)) != GRIB_SUCCESS) return ret; + + if (pen_j != pen_k || pen_j!=pen_m ) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"pen_j=%ld, pen_k=%ld, pen_m=%ld\n",pen_j,pen_k,pen_m); + Assert ((pen_j == pen_k) && (pen_j == pen_m)); + } + return (pen_j+1)*(pen_j+2); +} + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_complex_packing* self = (grib_accessor_data_complex_packing*)a; + + size_t i = 0; + int ret = GRIB_SUCCESS; + long hcount = 0; + long lcount = 0; + long hpos = 0; + long lup = 0; + long mmax = 0; + long n_vals = 0; + double *scals = NULL; + double *pscals=NULL,*pval=NULL; + + double s = 0; + double d = 0; + double laplacianOperator = 0; + unsigned char* buf = NULL; + unsigned char* hres = NULL; + unsigned char* lres = NULL; + unsigned long packed_offset; + long lpos = 0; + + long maxv = 0; + long GRIBEX_sh_bug_present =0; + long ieee_floats = 0; + + long offsetdata = 0; + long bits_per_value = 0; + double reference_value = 0; + long binary_scale_factor = 0; + long decimal_scale_factor = 0; + + + long sub_j= 0; + long sub_k= 0; + long sub_m= 0; + long pen_j= 0; + long pen_k= 0; + long pen_m= 0; + + double operat= 0; + int bytes; + + decode_float_proc decode_float = NULL; + + n_vals = grib_value_count(a); + + if(*len < n_vals){ + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if((ret = grib_get_long_internal(a->parent->h,self->offsetdata,&offsetdata)) + != GRIB_SUCCESS) return ret; + if((ret = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) + != GRIB_SUCCESS) return ret; + if((ret = grib_get_double_internal(a->parent->h,self->reference_value,&reference_value)) + != GRIB_SUCCESS) return ret; + if((ret = grib_get_long_internal(a->parent->h,self->binary_scale_factor,&binary_scale_factor)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->decimal_scale_factor,&decimal_scale_factor)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->GRIBEX_sh_bug_present,&GRIBEX_sh_bug_present)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->ieee_floats,&ieee_floats)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_double_internal(a->parent->h,self->laplacianOperator,&laplacianOperator)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_j,&sub_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_k,&sub_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_m,&sub_m)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_j,&pen_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_k,&pen_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_m,&pen_m)) != GRIB_SUCCESS) + return ret; + + self->dirty=0; + + switch (ieee_floats) { + case 0: + decode_float=grib_long_to_ibm; + bytes=4; + break; + case 1: + decode_float=grib_long_to_ieee; + bytes=4; + break; + case 2: + decode_float=grib_long_to_ieee64; + bytes=8; + break; + default: + return GRIB_NOT_IMPLEMENTED; + } + + Assert (sub_j == sub_k); + Assert (sub_j == sub_m); + Assert (pen_j == pen_k); + Assert (pen_j == pen_m); + + buf = (unsigned char*)a->parent->h->buffer->data; + + maxv = pen_j+1; + + buf += grib_byte_offset(a); + hres = buf; + lres = buf; + + if (pen_j == sub_j) { + n_vals = (pen_j+1)*(pen_j+2); + d = grib_power(-decimal_scale_factor,10) ; + grib_ieee_decode_array(a->parent->h->context,buf,n_vals,bytes,val); + if (d) { + for (i=0;iparent->h->context,maxv*sizeof(double)); + Assert(scals); + + scals[0] = 0; + for(i=1;iparent->h->context,GRIB_LOG_WARNING, + "COMPLEX_PACKING : problem with operator div by zero at index %d of %d \n", + i , maxv); + scals[i] = 0; + } + } + + /* + printf("UNPACKING LAPLACE=%.20f\n",laplacianOperator); + + printf("packed offset=%ld\n",packed_offset); + for(i=0;i0) + { + lup=mmax; + if(sub_k>=0) + { + for(hcount=0;hcount= i); + *len = i; + + if(d != 1) { + for(i=0;i<*len;i++) + val[i++] *= d; + } + + grib_context_free(a->parent->h->context,scals); + + return ret; + +} + + + +#define MAXVAL(a,b) a>b?a:b + +static double calculate_pfactor(grib_context *ctx,const double* spectralField, long fieldTruncation, long subsetTruncation) +{ + /*long n_vals = ((fieldTruncation+1)*(fieldTruncation+2));*/ + long loop, index, m, n = 0; + double pFactor, zeps = 1.0e-15; + long ismin = (subsetTruncation+1), ismax = (fieldTruncation+1); + double* weights, range, * norms; + double weightedSumOverX = 0.0, weightedSumOverY = 0.0, sumOfWeights = 0.0, x, y; + double numerator = 0.0, denominator = 0.0, slope; + + /* Catch corner case. See GRIB-172 */ + if (ismax-ismin <= 1) { + return 1; /* any value will do! we cannot do linear fit on a single point! */ + } + /* + // Setup the weights + */ + + range = (double) (ismax - ismin +1); + + weights = (double*) grib_context_malloc(ctx,(ismax+1)*sizeof(double)); + for( loop = ismin; loop <= ismax; loop++ ) + weights[loop] = range / (double) (loop-ismin+1); + /* + // Compute norms + // Handle values 2 at a time (real and imaginary parts). + */ + norms = (double*) grib_context_malloc(ctx,(ismax+1)*sizeof(double)); + + for( loop = 0; loop < ismax+1; loop++ ) norms[loop] = 0.0; + /* + // Form norms for the rows which contain part of the unscaled subset. + */ + + index = -2; + for( m = 0; m < subsetTruncation; m++ ) + for( n = m; n <= fieldTruncation; n++ ) { + index += 2; + if( n >= subsetTruncation ) { + norms[n] = MAXVAL(norms[n],fabs(spectralField[index])); + norms[n] = MAXVAL(norms[n],fabs(spectralField[index+1])); + } + } + /* + // Form norms for the rows which do not contain part of the unscaled subset. + */ + + for( m = subsetTruncation; m <= fieldTruncation; m++ ) + for( n = m; n <= fieldTruncation; n++ ) { + index += 2; + norms[n] = MAXVAL(norms[n],fabs(spectralField[index])); + norms[n] = MAXVAL(norms[n],fabs(spectralField[index+1])); + } + + /* + // Ensure the norms have a value which is not too small in case of + // problems with math functions (e.g. LOG). + */ + + for( loop = ismin; loop <= ismax; loop++ ) { + norms[n] = MAXVAL(norms[n],zeps); + if( norms[n] == zeps ) weights[n] = 100.0 * zeps; + } + + /* + // Do linear fit to find the slope + */ + + for( loop = ismin; loop <= ismax; loop++ ) { + x = log( (double) (loop*(loop+1)) ); + y = log( norms[loop] ); + weightedSumOverX = weightedSumOverX + x * weights[loop]; + weightedSumOverY = weightedSumOverY + y * weights[loop]; + sumOfWeights = sumOfWeights + weights[loop]; + } + weightedSumOverX = weightedSumOverX / sumOfWeights; + weightedSumOverY = weightedSumOverY / sumOfWeights; + + /* + // Perform a least square fit for the equation + */ + + for( loop = ismin; loop <= ismax; loop++ ) { + + x = log( (double)(loop*(loop+1)) ); + y = log( norms[loop] ); + numerator = + numerator + weights[loop] * (y-weightedSumOverY) * (x-weightedSumOverX); + denominator = + denominator + weights[loop] * ((x-weightedSumOverX) * (x-weightedSumOverX)); + } + slope = numerator / denominator; + + grib_context_free(ctx,weights); + grib_context_free(ctx,norms); + + pFactor = -slope; + if( pFactor < -9999.9 ) pFactor = -9999.9; + if( pFactor > 9999.9 ) pFactor = 9999.9; + return pFactor; +} + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) { + + grib_accessor_data_complex_packing* self = (grib_accessor_data_complex_packing*)a; + + size_t i = 0; + int ret = GRIB_SUCCESS; + long hcount = 0; + long lcount = 0; + long hpos = 0; + long lup = 0; + long mmax = 0; + long n_vals = 0; + double *scals = NULL; + + double s = 0; + double d = 0; + + unsigned char* buf = NULL; + + size_t buflen = 0; + + size_t hsize = 0; + size_t lsize = 0; + + + unsigned char* hres = NULL; + unsigned char* lres = NULL; + + long lpos = 0; + long maxv = 0; + + long offsetdata = 0; + long bits_per_value = 0; + double reference_value = 0; + long binary_scale_factor = 0; + long decimal_scale_factor = 0; + long laplacianOperatorIsSet = 0; + + double laplacianOperator = 0; + long sub_j= 0; + long sub_k= 0; + long sub_m= 0; + long pen_j= 0; + long pen_k= 0; + long pen_m= 0; + long GRIBEX_sh_bug_present =0; + long ieee_floats =0; + double min = 0; + double max = 0; + double current_val = 0; + short mixmax_unset = 0; + int bytes; + + encode_float_proc encode_float = NULL; + + if (*len ==0) return GRIB_NO_VALUES; + + if((ret = grib_get_long_internal(a->parent->h,self->offsetdata,&offsetdata)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->decimal_scale_factor,&decimal_scale_factor)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->GRIBEX_sh_bug_present,&GRIBEX_sh_bug_present)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->ieee_floats,&ieee_floats)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->laplacianOperatorIsSet,&laplacianOperatorIsSet)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(a->parent->h,self->laplacianOperator,&laplacianOperator)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->sub_j,&sub_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_k,&sub_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_m,&sub_m)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_j,&pen_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_k,&pen_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_m,&pen_m)) != GRIB_SUCCESS) + return ret; + + self->dirty=1; + + + switch (ieee_floats) { + case 0: + encode_float =grib_ibm_to_long; + bytes=4; + break; + case 1: + encode_float =grib_ieee_to_long; + bytes=4; + break; + case 2: + encode_float =grib_ieee64_to_long; + bytes=8; + break; + default: + return GRIB_NOT_IMPLEMENTED; + } + + Assert (sub_j == sub_k); Assert( sub_j == sub_m); + Assert (pen_j == pen_k); Assert( pen_j == pen_m); + + n_vals = (pen_j+1)*(pen_j+2); + d = grib_power(decimal_scale_factor,10) ; + + if(*len != n_vals){ + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"COMPLEX_PACKING : wrong number of values, expected %d - got %d",n_vals,*len); + return GRIB_INTERNAL_ERROR; + } + + if (pen_j == sub_j) { + double* values; + if (d) { + values=grib_context_malloc_clear(a->parent->h->context,sizeof(double)*n_vals); + for (i=0;iparent->h->context,buflen); + grib_ieee_encode_array(a->parent->h->context,values,n_vals,bytes,buf); + if (d) grib_context_free(a->parent->h->context,values); + grib_buffer_replace(a, buf, buflen,1,1); + grib_context_free(a->parent->h->context,buf); + return 0; + } + + if(!laplacianOperatorIsSet) { + laplacianOperator = calculate_pfactor(a->parent->h->context,val,pen_j,sub_j); + if((ret = grib_set_double_internal(a->parent->h,self->laplacianOperator,laplacianOperator)) + != GRIB_SUCCESS) return ret; + grib_get_double_internal(a->parent->h,self->laplacianOperator,&laplacianOperator); + } + +/* +printf("PACKING LAPLACE set=%ld value=%.20f\n",laplacianOperatorIsSet,laplacianOperator); +*/ + hsize = 4*(sub_k+1)*(sub_k+2); + lsize = ((n_vals - ((sub_k+1)*(sub_k+2)))*bits_per_value)/8; + + buflen = hsize+lsize; + + buf = grib_context_malloc(a->parent->h->context,buflen); + hres = buf; + lres = buf+hsize; + + maxv = pen_j+1; + + lpos = 0; + hpos = 0; + + scals = (double*) grib_context_malloc(a->parent->h->context,maxv*sizeof(double)); + Assert(scals); + + scals[0] =0; + for(i=1;i0) + { + lup=mmax; + + if(sub_k>=0) + { + i += 2*(sub_k+1); + lup += sub_k+1 ; + hcount += sub_k+1 ; + sub_k--; + } + + for(lcount=hcount; lcount < maxv ; lcount++) + { + current_val = ((val[i++]*d) * scals[lup]); + if(mixmax_unset == 0){ + max = current_val; + min = current_val; + mixmax_unset = 1; + } + + if(current_val > max) max = current_val; + if(current_val < min) min = current_val; + + current_val = ((val[i++]*d) * scals[lup]); + if(current_val > max) max = current_val; + if(current_val < min) min = current_val; + + lup++; + } + maxv--; + hcount=0; + mmax++; + } + + if (grib_get_nearest_smaller_value(a->parent->h,self->reference_value,min,&reference_value) + !=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to find nearest_smaller_value of %g for %s",min,self->reference_value); + exit(GRIB_INTERNAL_ERROR); + } + binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&ret); + + if (ret==GRIB_UNDERFLOW) { + d=0; + binary_scale_factor = 0; + reference_value=0; + + } + s = grib_power(-binary_scale_factor,2); + + /* printf("D : %.30f\n",d); */ + + i=0; + + mmax = 0; + maxv = pen_j+1; + i=0; + lcount=0; + hcount=0; + sub_k = sub_j; + + while(maxv>0) + { + lup=mmax; + + if(sub_k>=0) + { + for(hcount=0;hcountparent->h->context,GRIB_LOG_ERROR, + "COMPLEX_PACKING : negative coput before packing (%g)", current_val); + grib_encode_unsigned_longb(lres, current_val, &lpos, bits_per_value); + + current_val = (((((val[i++]*d) * scals[lup])-reference_value)*s)+0.5); + if(current_val < 0) + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "COMPLEX_PACKING : negative coput before packing (%g)", current_val); + grib_encode_unsigned_longb(lres, current_val, &lpos, bits_per_value); + lup++; + } + } else { + for(lcount=hcount; lcount < maxv ; lcount++) + { + current_val = (((((val[i++]*d) * scals[lup])-reference_value)*s)+0.5); + if(current_val < 0) + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "COMPLEX_PACKING : negative coput before packing (%g)", current_val); + grib_encode_unsigned_long(lres, current_val, &lpos, bits_per_value); + + current_val = (((((val[i++]*d) * scals[lup])-reference_value)*s)+0.5); + if(current_val < 0) + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "COMPLEX_PACKING : negative coput before packing (%g)", current_val); + grib_encode_unsigned_long(lres, current_val, &lpos, bits_per_value); + lup++; + } + } +#endif + + maxv--; + hcount=0; + mmax++; + } + + if(((hpos/8) != hsize) &&((lpos/8) != lsize)) + { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "COMPLEX_PACKING : Mismatch in packing between high resolution and low resolution part"); + grib_context_free(a->parent->h->context,buf); + grib_context_free(a->parent->h->context,scals); + return GRIB_INTERNAL_ERROR; + } + + buflen = ((hpos + lpos)/8); + + if((ret = grib_set_double_internal(a->parent->h,self->reference_value, reference_value)) != GRIB_SUCCESS) + return ret; + { + /* Make sure we can decode it again */ + double ref = 1e-100; + grib_get_double_internal(a->parent->h,self->reference_value,&ref); + Assert(ref == reference_value); + } + + if((ret = grib_set_long_internal(a->parent->h,self->binary_scale_factor, binary_scale_factor)) != GRIB_SUCCESS) + return ret; + + grib_buffer_replace(a, buf, buflen,1,1); + grib_context_free(a->parent->h->context,buf); + grib_context_free(a->parent->h->context,scals); + + return ret; + +} diff --git a/src/grib_accessor_class_data_constant_field.c b/src/grib_accessor_class_data_constant_field.c new file mode 100644 index 000000000..b43d8b0b7 --- /dev/null +++ b/src/grib_accessor_class_data_constant_field.c @@ -0,0 +1,192 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_values + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + IMPLEMENTS = pack_double + MEMBERS=const char* ni + MEMBERS=const char* nj + MEMBERS=const char* reference_value + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_constant_field { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_constant_field */ + const char* ni; + const char* nj; + const char* reference_value; +} grib_accessor_data_constant_field; + +extern grib_accessor_class* grib_accessor_class_values; + +static grib_accessor_class _grib_accessor_class_data_constant_field = { + &grib_accessor_class_values, /* super */ + "data_constant_field", /* name */ + sizeof(grib_accessor_data_constant_field), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_constant_field = &_grib_accessor_class_data_constant_field; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_constant_field* self = (grib_accessor_data_constant_field*)a; + + self->ni = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->nj = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->reference_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + +} +static long value_count(grib_accessor* a){ + grib_accessor_data_constant_field* self = (grib_accessor_data_constant_field*)a; + long ni; + long nj; + int err = 0; + if((err = grib_get_long_internal(a->parent->h,self->ni,&ni)) != GRIB_SUCCESS) + return 0; + if((err = grib_get_long_internal(a->parent->h,self->nj, &nj)) != GRIB_SUCCESS) + return 0; + return ni*nj; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_constant_field* self = (grib_accessor_data_constant_field*)a; + size_t i = 0; + size_t n_vals = grib_value_count(a); + double reference_value = 0; + int err = 0; + if(*len < n_vals){ + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if((err = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) != GRIB_SUCCESS) + return err; + + for(i=0;i < n_vals;i++) + val[i] = reference_value; + + *len = (long) n_vals; + return err; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + /* This should keep GRIBEX happy */ + unsigned char zero =0; + if(a->offset%2) + grib_buffer_replace(a, &zero, 1,1,1); + else + grib_buffer_replace(a, NULL, 0,1,1); + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_data_dummy_field.c b/src/grib_accessor_class_data_dummy_field.c new file mode 100644 index 000000000..0e43738f4 --- /dev/null +++ b/src/grib_accessor_class_data_dummy_field.c @@ -0,0 +1,247 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_g1simple_packing + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + IMPLEMENTS = pack_double + MEMBERS=const char* missing_value + MEMBERS=const char* numberOfPoints + MEMBERS=const char* bitmap + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_dummy_field { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_g1simple_packing */ + const char* half_byte; + const char* packingType; + const char* ieee_packing; + const char* precision; +/* Members defined in data_dummy_field */ + const char* missing_value; + const char* numberOfPoints; + const char* bitmap; +} grib_accessor_data_dummy_field; + +extern grib_accessor_class* grib_accessor_class_data_g1simple_packing; + +static grib_accessor_class _grib_accessor_class_data_dummy_field = { + &grib_accessor_class_data_g1simple_packing, /* super */ + "data_dummy_field", /* name */ + sizeof(grib_accessor_data_dummy_field), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_dummy_field = &_grib_accessor_class_data_dummy_field; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_dummy_field* self = (grib_accessor_data_dummy_field*)a; + self->missing_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfPoints = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->bitmap = grib_arguments_get_name(a->parent->h,args,self->carg++); +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_dummy_field* self = (grib_accessor_data_dummy_field*)a; + size_t i = 0; + size_t n_vals = 0; + long numberOfPoints; + double missing_value = 0; + int err = 0; + + if((err = grib_get_long_internal(a->parent->h,self->numberOfPoints, &numberOfPoints)) + != GRIB_SUCCESS) return err; + n_vals =numberOfPoints; + + if((err = grib_get_double_internal(a->parent->h,self->missing_value, &missing_value)) + != GRIB_SUCCESS) return err; + + if(*len < n_vals){ + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + for(i=0;i < n_vals;i++) + val[i] = missing_value; + + if(grib_find_accessor(a->parent->h,self->bitmap)) { + if((err = grib_set_double_array_internal(a->parent->h,self->bitmap,val,n_vals)) != GRIB_SUCCESS) + return err; + } + + *len = (long) n_vals; + return err; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_dummy_field* self = (grib_accessor_data_dummy_field*)a; + + + size_t n_vals = *len; + int err = 0; + + long bits_per_value = 0; + + long half_byte = 0; + + size_t buflen = 0; + unsigned char* buf = NULL; + + if (*len ==0) return GRIB_NO_VALUES; + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS) + return err; + + buflen = (1+((bits_per_value*n_vals)/8))*sizeof(unsigned char); + + buf = grib_context_malloc_clear(a->parent->h->context,buflen); + if (!buf) return GRIB_OUT_OF_MEMORY; + + half_byte = (buflen*8)-((*len)*bits_per_value); + + if((err = grib_set_long_internal(a->parent->h,self->half_byte, half_byte)) != GRIB_SUCCESS){ + grib_context_free(a->parent->h->context,buf); + return err; + } + grib_buffer_replace(a, buf, buflen,1,1); + + grib_context_free(a->parent->h->context,buf); + + return GRIB_SUCCESS; + +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_dummy_field* self = (grib_accessor_data_dummy_field*)a; + int err=0; + long numberOfPoints = 0; + + if((err = grib_get_long_internal(a->parent->h,self->numberOfPoints, &numberOfPoints)) + != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"unable to get count of %s (%s)",a->name,grib_get_error_message(err)); + return -1; + } + return numberOfPoints; +} + diff --git a/src/grib_accessor_class_data_g1complex_packing.c b/src/grib_accessor_class_data_g1complex_packing.c new file mode 100644 index 000000000..65ce88239 --- /dev/null +++ b/src/grib_accessor_class_data_g1complex_packing.c @@ -0,0 +1,259 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_complex_packing + IMPLEMENTS = pack_double + IMPLEMENTS = init + MEMBERS= const char* N + MEMBERS=const char* half_byte + MEMBERS=const char* packingType + MEMBERS=const char* ieee_packing + MEMBERS=const char* precision + END_CLASS_DEF + + */ + + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g1complex_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_complex_packing */ + const char* GRIBEX_sh_bug_present; + const char* ieee_floats; + const char* laplacianOperatorIsSet; + const char* laplacianOperator; + const char* sub_j; + const char* sub_k; + const char* sub_m; + const char* pen_j; + const char* pen_k; + const char* pen_m; +/* Members defined in data_g1complex_packing */ + const char* N; + const char* half_byte; + const char* packingType; + const char* ieee_packing; + const char* precision; +} grib_accessor_data_g1complex_packing; + +extern grib_accessor_class* grib_accessor_class_data_complex_packing; + +static grib_accessor_class _grib_accessor_class_data_g1complex_packing = { + &grib_accessor_class_data_complex_packing, /* super */ + "data_g1complex_packing", /* name */ + sizeof(grib_accessor_data_g1complex_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g1complex_packing = &_grib_accessor_class_data_g1complex_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g1complex_packing *self =(grib_accessor_data_g1complex_packing*)a; + self->half_byte = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->N = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->packingType = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->ieee_packing = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->precision = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->edition=1; + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + } + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_g1complex_packing* self = + (grib_accessor_data_g1complex_packing*)a; + int ret = GRIB_SUCCESS; + long seclen=0; + long sub_j= 0; + long sub_k= 0; + long sub_m= 0; + long n= 0; + long half_byte= 0; + long bits_per_value =0; + size_t buflen =0; + grib_context* c=a->parent->h->context; + grib_handle* h=a->parent->h; + char* ieee_packing_s=NULL; + char* packingType_s=NULL; + char* precision_s=NULL; + + grib_accessor_class* super = *(a->cclass->super); + + + if (*len ==0) return GRIB_NO_VALUES; + + if (c->ieee_packing && self->ieee_packing) { + long precision=c->ieee_packing==32 ? 1 : 2; + size_t lenstr=strlen(self->ieee_packing); + + packingType_s=grib_context_strdup(c,self->packingType); + ieee_packing_s=grib_context_strdup(c,self->ieee_packing); + precision_s=grib_context_strdup(c,self->precision); + + grib_set_string(h,packingType_s,ieee_packing_s,&lenstr); + grib_set_long(h,precision_s,precision); + + grib_context_free(c,packingType_s); + grib_context_free(c,ieee_packing_s); + grib_context_free(c,precision_s); + return grib_set_double_array(h,"values",val,*len); + } + + if((ret = grib_get_long_internal(a->parent->h,self->sub_j,&sub_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_k,&sub_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_m,&sub_m)) != GRIB_SUCCESS) + return ret; + + self->dirty=1; + + Assert ((sub_j== sub_k) && (sub_m== sub_j)); + + ret = super->pack_double(a,val,len); + + if(ret == GRIB_SUCCESS){ + n = a->offset + 4*((sub_k+1)*(sub_k+2)); +#if 1 + /* Octet number starts from beginning of message but shouldn't */ + if((ret = grib_set_long_internal(a->parent->h,self->N,n)) != GRIB_SUCCESS) + return ret; +#else + ret = grib_get_long_internal(a->parent->h,self->offsetsection,&offsetsection); + if(ret != GRIB_SUCCESS) return ret; + if((ret = grib_set_long_internal(a->parent->h,self->N,n-offsetsection)) + != GRIB_SUCCESS) return ret; +#endif + ret = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value); + if(ret != GRIB_SUCCESS) return ret; + + ret = grib_get_long_internal(a->parent->h,self->seclen,&seclen); + if(ret != GRIB_SUCCESS) return ret; + + buflen = 32*(sub_k+1)*(sub_k+2)+(*len-(sub_k+1)*(sub_k+2))*bits_per_value+18*8; + half_byte = seclen*8-buflen; + if (a->parent->h->context->debug==-1) { + printf("GRIB_API DEBUG: half_byte=%ld\n",half_byte); + } + + ret = grib_set_long_internal(a->parent->h,self->half_byte, half_byte); + if(ret != GRIB_SUCCESS) return ret; + } + return ret; +} + diff --git a/src/grib_accessor_class_data_g1second_order_constant_width_packing.c b/src/grib_accessor_class_data_g1second_order_constant_width_packing.c new file mode 100644 index 000000000..72b3d3857 --- /dev/null +++ b/src/grib_accessor_class_data_g1second_order_constant_width_packing.c @@ -0,0 +1,324 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_simple_packing + IMPLEMENTS = init + IMPLEMENTS = pack_double + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + MEMBERS=const char* half_byte + MEMBERS=const char* packingType + MEMBERS=const char* ieee_packing + MEMBERS=const char* precision + MEMBERS=const char* widthOfFirstOrderValues + MEMBERS=const char* N1 + MEMBERS=const char* N2 + MEMBERS=const char* numberOfGroups + MEMBERS=const char* numberOfSecondOrderPackedValues + MEMBERS=const char* extraValues + MEMBERS=const char* pl + MEMBERS=const char* Ni + MEMBERS=const char* Nj + MEMBERS=const char* jPointsAreConsecutive + MEMBERS=const char* bitmap + MEMBERS=const char* groupWidth + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g1second_order_constant_width_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_g1second_order_constant_width_packing */ + const char* half_byte; + const char* packingType; + const char* ieee_packing; + const char* precision; + const char* widthOfFirstOrderValues; + const char* N1; + const char* N2; + const char* numberOfGroups; + const char* numberOfSecondOrderPackedValues; + const char* extraValues; + const char* pl; + const char* Ni; + const char* Nj; + const char* jPointsAreConsecutive; + const char* bitmap; + const char* groupWidth; +} grib_accessor_data_g1second_order_constant_width_packing; + +extern grib_accessor_class* grib_accessor_class_data_simple_packing; + +static grib_accessor_class _grib_accessor_class_data_g1second_order_constant_width_packing = { + &grib_accessor_class_data_simple_packing, /* super */ + "data_g1second_order_constant_width_packing", /* name */ + sizeof(grib_accessor_data_g1second_order_constant_width_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g1second_order_constant_width_packing = &_grib_accessor_class_data_g1second_order_constant_width_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g1second_order_constant_width_packing *self =(grib_accessor_data_g1second_order_constant_width_packing*)a; + + self->half_byte = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->packingType = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->ieee_packing = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->precision = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->widthOfFirstOrderValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->N1 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->N2 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfGroups = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfSecondOrderPackedValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->extraValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->Ni = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->Nj = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pl = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->jPointsAreConsecutive = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->bitmap = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->groupWidth = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->edition=1; + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + +} + +static long value_count(grib_accessor* a) +{ + long numberOfSecondOrderPackedValues=0; + grib_accessor_data_g1second_order_constant_width_packing *self =(grib_accessor_data_g1second_order_constant_width_packing*)a; + + if(grib_get_long_internal(a->parent->h,self->numberOfSecondOrderPackedValues,&numberOfSecondOrderPackedValues) != GRIB_SUCCESS) + return 0; + return numberOfSecondOrderPackedValues; + +} + +static int unpack_double(grib_accessor* a, double* values, size_t *len) +{ + grib_accessor_data_g1second_order_constant_width_packing* self = (grib_accessor_data_g1second_order_constant_width_packing*)a; + int ret=0; + long numberOfGroups,numberOfSecondOrderPackedValues; + long groupWidth=0; + long* firstOrderValues=0; + long* X=0; + long numberPerRow=0; + long pos=0; + long widthOfFirstOrderValues=0; + long jPointsAreConsecutive; + unsigned char* buf = (unsigned char*)a->parent->h->buffer->data; + long i,n; + double reference_value; + long binary_scale_factor; + long decimal_scale_factor; + double s,d; + long* secondaryBitmap; + + buf += grib_byte_offset(a); + + if((ret=grib_get_long_internal(a->parent->h,self->numberOfGroups,&numberOfGroups)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->jPointsAreConsecutive,&jPointsAreConsecutive)) != GRIB_SUCCESS) + return ret; + + if (jPointsAreConsecutive) { + if((ret=grib_get_long_internal(a->parent->h,self->Ni,&numberPerRow)) != GRIB_SUCCESS) + return ret; + } else { + if((ret=grib_get_long_internal(a->parent->h,self->Nj,&numberPerRow)) != GRIB_SUCCESS) + return ret; + } + + if((ret=grib_get_long_internal(a->parent->h,self->widthOfFirstOrderValues,&widthOfFirstOrderValues)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->binary_scale_factor,&binary_scale_factor)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->decimal_scale_factor,&decimal_scale_factor)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_double_internal(a->parent->h,self->reference_value,&reference_value)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->numberOfSecondOrderPackedValues, + &numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->groupWidth, &groupWidth)) != GRIB_SUCCESS) + return ret; + + secondaryBitmap=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfSecondOrderPackedValues); + grib_decode_long_array(buf,&pos,1,numberOfSecondOrderPackedValues,secondaryBitmap); + pos = 8 * ( (pos + 7 ) / 8); + + firstOrderValues=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfGroups); + grib_decode_long_array(buf,&pos,widthOfFirstOrderValues,numberOfGroups,firstOrderValues); + pos = 8 * ( (pos + 7 ) / 8); + + X=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfSecondOrderPackedValues); + + if (groupWidth>0) { + grib_decode_long_array(buf,&pos,groupWidth,numberOfSecondOrderPackedValues,X); + n=0; + i=-1; + while (nparent->h->context,secondaryBitmap); + grib_context_free(a->parent->h->context,firstOrderValues); + grib_context_free(a->parent->h->context,X); + + return ret; +} + +static int pack_double(grib_accessor* a, const double* cval, size_t *len) +{ + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"constant width packing not implemented"); + return GRIB_NOT_IMPLEMENTED; + +} + diff --git a/src/grib_accessor_class_data_g1second_order_general_extended_packing.c b/src/grib_accessor_class_data_g1second_order_general_extended_packing.c new file mode 100644 index 000000000..6b9b3b1d1 --- /dev/null +++ b/src/grib_accessor_class_data_g1second_order_general_extended_packing.c @@ -0,0 +1,1157 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_simple_packing + IMPLEMENTS = init + IMPLEMENTS = pack_double + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + IMPLEMENTS = destroy + MEMBERS=const char* half_byte + MEMBERS=const char* packingType + MEMBERS=const char* ieee_packing + MEMBERS=const char* precision + MEMBERS=const char* widthOfFirstOrderValues + MEMBERS=const char* firstOrderValues + MEMBERS=const char* N1 + MEMBERS=const char* N2 + MEMBERS=const char* numberOfGroups + MEMBERS=const char* codedNumberOfGroups + MEMBERS=const char* numberOfSecondOrderPackedValues + MEMBERS=const char* extraValues + MEMBERS=const char* groupWidths + MEMBERS=const char* widthOfWidths + MEMBERS=const char* groupLengths + MEMBERS=const char* widthOfLengths + MEMBERS=const char* NL + MEMBERS=const char* SPD + MEMBERS=const char* widthOfSPD + MEMBERS=const char* orderOfSPD + MEMBERS=const char* numberOfPoints + MEMBERS=const char* dataFlag + MEMBERS=double* values + MEMBERS=size_t size + + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g1second_order_general_extended_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_g1second_order_general_extended_packing */ + const char* half_byte; + const char* packingType; + const char* ieee_packing; + const char* precision; + const char* widthOfFirstOrderValues; + const char* firstOrderValues; + const char* N1; + const char* N2; + const char* numberOfGroups; + const char* codedNumberOfGroups; + const char* numberOfSecondOrderPackedValues; + const char* extraValues; + const char* groupWidths; + const char* widthOfWidths; + const char* groupLengths; + const char* widthOfLengths; + const char* NL; + const char* SPD; + const char* widthOfSPD; + const char* orderOfSPD; + const char* numberOfPoints; + const char* dataFlag; + double* values; + size_t size; +} grib_accessor_data_g1second_order_general_extended_packing; + +extern grib_accessor_class* grib_accessor_class_data_simple_packing; + +static grib_accessor_class _grib_accessor_class_data_g1second_order_general_extended_packing = { + &grib_accessor_class_data_simple_packing, /* super */ + "data_g1second_order_general_extended_packing", /* name */ + sizeof(grib_accessor_data_g1second_order_general_extended_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g1second_order_general_extended_packing = &_grib_accessor_class_data_g1second_order_general_extended_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +#define MAX_NUMBER_OF_GROUPS 65534 +#define EFDEBUG 0 + +static unsigned long nbits[32]={ + 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, + 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, + 0x1000, 0x2000, 0x4000, 0x8000, 0x10000, 0x20000, + 0x40000, 0x80000, 0x100000, 0x200000, 0x400000, 0x800000, + 0x1000000, 0x2000000, 0x4000000, 0x8000000, 0x10000000, 0x20000000, + 0x40000000, 0x80000000 +}; + +GRIB_INLINE static long number_of_bits(unsigned long x) { + unsigned long *n=nbits; + long i=0; + while (x>=*n) {n++;i++;} + return i; +} + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g1second_order_general_extended_packing *self =(grib_accessor_data_g1second_order_general_extended_packing*)a; + + self->half_byte = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->packingType = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->ieee_packing = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->precision = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->widthOfFirstOrderValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->firstOrderValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->N1 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->N2 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfGroups = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->codedNumberOfGroups = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfSecondOrderPackedValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->extraValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->groupWidths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->widthOfWidths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->groupLengths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->widthOfLengths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->NL = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->SPD = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->widthOfSPD = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->orderOfSPD = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfPoints = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->dataFlag = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->edition=1; + self->dirty=1; + self->values=NULL; + self->size=0; + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_g1second_order_general_extended_packing* self = (grib_accessor_data_g1second_order_general_extended_packing*)a; + long numberOfCodedValues=0; + long numberOfGroups=0; + size_t ngroups; + long *groupLengths; + long orderOfSPD=0; + long i; + + grib_get_long(a->parent->h,self->numberOfGroups,&numberOfGroups); + if (numberOfGroups==0) return 0; + + groupLengths=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfGroups); + ngroups=numberOfGroups; + grib_get_long_array(a->parent->h,self->groupLengths,groupLengths,&ngroups); + + for (i=0;iparent->h->context,groupLengths); + + grib_get_long(a->parent->h,self->orderOfSPD,&orderOfSPD); + + return numberOfCodedValues+orderOfSPD; +} + +static int unpack_double(grib_accessor* a, double* values, size_t *len) +{ + grib_accessor_data_g1second_order_general_extended_packing* self = (grib_accessor_data_g1second_order_general_extended_packing*)a; + int ret=0; + long numberOfGroups,numberOfSecondOrderPackedValues; + long* firstOrderValues=0; + long* X=0; + long pos=0; + unsigned char* buf = (unsigned char*)a->parent->h->buffer->data; + long i,n; + double reference_value; + long binary_scale_factor; + long decimal_scale_factor; + double s,d; + long j,count=0; + long *groupWidths=NULL,*groupLengths=NULL; + long orderOfSPD=0; + long *SPD=0; + long numberOfValues=0; + long bias; + long y=0,z=0,w=0; + size_t k,ngroups; + + if (!self->dirty) { + if (*lensize) { + return GRIB_ARRAY_TOO_SMALL; + } + for (k=0;ksize;k++) + values[k]=self->values[k]; + + *len=self->size; + return GRIB_SUCCESS; + } + + self->dirty=0; + + buf += grib_byte_offset(a); + numberOfValues=value_count(a); + + if((ret=grib_get_long_internal(a->parent->h,self->numberOfGroups,&numberOfGroups)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->binary_scale_factor,&binary_scale_factor)) != GRIB_SUCCESS) + return ret; + + ngroups=numberOfGroups; + groupWidths=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfGroups); + ret=grib_get_long_array(a->parent->h,self->groupWidths,groupWidths,&ngroups); + if(ret != GRIB_SUCCESS) return ret; + + groupLengths=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfGroups); + ret=grib_get_long_array(a->parent->h,self->groupLengths,groupLengths,&ngroups); + if(ret != GRIB_SUCCESS) return ret; + + firstOrderValues=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfGroups); + ret=grib_get_long_array(a->parent->h,self->firstOrderValues,firstOrderValues,&ngroups); + if(ret != GRIB_SUCCESS) return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->decimal_scale_factor,&decimal_scale_factor)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_double_internal(a->parent->h,self->reference_value,&reference_value)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->numberOfSecondOrderPackedValues, + &numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->orderOfSPD,&orderOfSPD)) != GRIB_SUCCESS) + return ret; + + if (orderOfSPD) { + size_t nSPD=orderOfSPD+1; + SPD=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*nSPD); + ret=grib_get_long_array(a->parent->h,self->SPD,SPD,&nSPD); + bias=SPD[orderOfSPD]; + if(ret != GRIB_SUCCESS) return ret; + } + + + X=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfValues); + + n=orderOfSPD; + for (i=0;i0) { + + for (j=0;jvalues) { + if (numberOfValues!=self->size) { + grib_context_free(a->parent->h->context,self->values); + self->values=grib_context_malloc_clear(a->parent->h->context,sizeof(double)*numberOfValues); + } + } else { + self->values=grib_context_malloc_clear(a->parent->h->context,sizeof(double)*numberOfValues); + } + + s = grib_power(binary_scale_factor,2); + d = grib_power(-decimal_scale_factor,10) ; + for (i=0; ivalues[i]=values[i]; + } + + *len=numberOfValues; + self->size=numberOfValues; + + grib_context_free(a->parent->h->context,X); + grib_context_free(a->parent->h->context,groupWidths); + grib_context_free(a->parent->h->context,groupLengths); + grib_context_free(a->parent->h->context,firstOrderValues); + if (orderOfSPD) + grib_context_free(a->parent->h->context,SPD); + + return ret; +} + +static void grib_split_long_groups(grib_context* c,long* numberOfGroups,long* lengthOfSecondOrderValues, + long* groupLengths,long* widthOfLengths, + long* groupWidths, long widthOfWidths, + long* firstOrderValues,long widthOfFirstOrderValues) { + + long i,j; + long newWidth,delta; + long *widthsOfLengths; + long *localWidthsOfLengths; + long *localLengths; + long *localWidths; + long *localFirstOrderValues; + int maxNumberOfGroups=*numberOfGroups*2; + + + /* the widthOfLengths is the same for all the groupLengths and therefore if + few big groups are present all the groups have to be coded with a large number + of bits (big widthOfLengths) even if the majority of them is small. + Here we try to reduce the size of the message splitting the big groups. + */ + + widthsOfLengths=grib_context_malloc_clear(c,sizeof(long)*maxNumberOfGroups); + j=0; + /* compute the widthOfLengths and the number of big groups */ + for (i=0;i<*numberOfGroups;i++) { + widthsOfLengths[i]=number_of_bits(groupLengths[i]); + if (*widthOfLengths==widthsOfLengths[i]) { + j++; + } + } + + /* variation of the size of message due to decrease of groupLengths + of 1*/ + newWidth=*widthOfLengths-1; + delta=j*(widthOfWidths+widthOfFirstOrderValues+newWidth)-*numberOfGroups; + + if (delta>=0) { + grib_context_free(c,widthsOfLengths); + return; + } + + localWidthsOfLengths=grib_context_malloc_clear(c,sizeof(long)*maxNumberOfGroups); + localLengths=grib_context_malloc_clear(c,sizeof(long)*maxNumberOfGroups); + localWidths=grib_context_malloc_clear(c,sizeof(long)*maxNumberOfGroups); + localFirstOrderValues=grib_context_malloc_clear(c,sizeof(long)*maxNumberOfGroups); + + while (newWidth>0) { + /* it is worth to split big groups */ + j=0; + for (i=0;i<*numberOfGroups;i++) { + if (newWidthnewWidth) { + localLengths[j]--; + localWidthsOfLengths[j]--; + j++; + localLengths[j]=1; + localWidthsOfLengths[j]=1; + localWidths[j]=groupWidths[i]; + localFirstOrderValues[j]=firstOrderValues[i]; + } + j++; + } else { + localLengths[j]=groupLengths[i]; + localWidthsOfLengths[j]=widthsOfLengths[i]; + localWidths[j]=groupWidths[i]; + localFirstOrderValues[j]=firstOrderValues[i]; + j++; + } + } + + if (j>maxNumberOfGroups) break; + + *numberOfGroups=j; + *widthOfLengths=newWidth; + j=0; + *lengthOfSecondOrderValues=0; + for (i=0;i<*numberOfGroups;i++) { + groupLengths[i]=localLengths[i]; + widthsOfLengths[i]=localWidthsOfLengths[i]; + groupWidths[i]=localWidths[i]; + firstOrderValues[i]=localFirstOrderValues[i]; + *lengthOfSecondOrderValues+=groupLengths[i]*groupWidths[i]; + if (*widthOfLengths==widthsOfLengths[i]) j++; + } + + newWidth--; + delta=j*(widthOfWidths+widthOfFirstOrderValues+newWidth)-*numberOfGroups; + if (delta>=0) break; + } + + grib_context_free(c,widthsOfLengths); + grib_context_free(c,localWidthsOfLengths); + grib_context_free(c,localLengths); + grib_context_free(c,localWidths); + grib_context_free(c,localFirstOrderValues); +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_g1second_order_general_extended_packing* self = (grib_accessor_data_g1second_order_general_extended_packing*)a; + int ret=0; + int grib2=0; + long bits_per_value,orderOfSPD,binary_scale_factor; + long numberOfValues; + double max,min; + double decimal,divisor; + double reference_value; + size_t size,sizebits; + long half_byte; + long* X; + long* Xp; + long i; + long incrementGroupLengthA,groupWidthA,prevGroupLength,offsetD,remainingValuesB,groupLengthB; + long maxB,minB,maxAB,minAB; + long offsetBeforeData,offsetSection4; + unsigned char* buffer = NULL; + long maxWidth,maxLength,widthOfWidths,NL,widthOfLengths,N1,N2,extraValues,codedNumberOfGroups,numberOfSecondOrderPackedValues; + long pos; + + + long numberOfGroups; + long groupLengthC,groupLengthA,remainingValues,count; + long maxA,minA; + long maxC,minC,offsetC; + long maxAC,minAC; + long range,bias,maxSPD; + long firstOrderValuesMax,offset,groupLength,j,groupWidth,firstOrderValue,lengthOfSecondOrderValues; + long *groupLengths,*groupWidths,*firstOrderValues; + /* long groupLengths[MAX_NUMBER_OF_GROUPS],groupWidths[MAX_NUMBER_OF_GROUPS],firstOrderValues[MAX_NUMBER_OF_GROUPS]; */ + + /* TODO put these parameters in def file */ + long startGroupLength=15; + long incrementGroupLength=3; + long minGroupLength=3; + long widthOfSPD,widthOfBias; + long *offsets; + long widthOfFirstOrderValues; + int computeGroupA=1; + long dataHeadersLength,widthsLength,lengthsLength,firstOrderValuesLength; + long decimal_scale_factor; + + self->dirty=1; + + numberOfValues=*len; + + max = val[0]; + min = max; + for(i=1;i< numberOfValues;i++) { + if (val[i] > max ) max = val[i]; + if (val[i] < min ) min = val[i]; + } + + /* For constant fields set decimal scale factor to 0 (See GRIB-165) */ + if (min==max) { + grib_set_long_internal(a->parent->h,self->decimal_scale_factor, 0); + } + + if((ret = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) + != GRIB_SUCCESS) + return ret; + decimal = grib_power(decimal_scale_factor,10); + + max*=decimal; + min*=decimal; + + if (grib_get_nearest_smaller_value(a->parent->h,self->reference_value,min,&reference_value) + !=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to find nearest_smaller_value of %g for %s",min,self->reference_value); + exit(GRIB_INTERNAL_ERROR); + } + if((ret = grib_set_double_internal(a->parent->h,self->reference_value, reference_value)) != + GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->offsetdata,&offsetBeforeData)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->offsetsection,&offsetSection4)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->orderOfSPD,&orderOfSPD)) != GRIB_SUCCESS) + return ret; + + binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&ret); + + if((ret = grib_set_long_internal(a->parent->h,self->binary_scale_factor, binary_scale_factor)) != + GRIB_SUCCESS) + return ret; + + divisor = grib_power(-binary_scale_factor,2); + X=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfValues); + for(i=0;i< numberOfValues;i++){ + X[i] = (((val[i]*decimal)-reference_value)*divisor)+0.5; + } + + groupLengths=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfValues); + groupWidths=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfValues); + firstOrderValues=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfValues); + + /* spatial differencing */ + switch (orderOfSPD) { + case 1: + for (i=numberOfValues-1;i>0;i--) { + X[i]-=X[i-1]; + } + break; + case 2: + for (i=numberOfValues-1;i>1;i--) { + X[i]-=2*X[i-1]-X[i-2]; + } + break; + case 3: + for (i=numberOfValues-1;i>2;i--) { + X[i]-=3*(X[i-1]-X[i-2])+X[i-3]; + } + break; + } + if (orderOfSPD) { + bias=X[orderOfSPD]; + for (i=orderOfSPD+1;i X[i] ) bias=X[i]; + } + for (i=orderOfSPD;iX[count+i]) minA=X[count+i]; + } + + } + groupWidthA=number_of_bits(maxA-minA); + range=(long)grib_power(groupWidthA,2)-1; + + offsetC=count+groupLengthA; + if (offsetC==numberOfValues) { + /* no more values close group A and end loop */ + groupLengths[numberOfGroups]=groupLengthA; + groupWidths[numberOfGroups]=groupWidthA; + /* firstOrderValues[numberOfGroups]=minA; */ + /* to optimise the width of first order variable */ + firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0; + numberOfGroups++; + break; + } + + /* group C created with length=incrementGroupLength (fixed) + or remaining values if close to end + */ + groupLengthC=incrementGroupLength; + if ( groupLengthC + offsetC > numberOfValues - startGroupLength/2) { + groupLengthC=numberOfValues-offsetC; + } + maxC=X[offsetC]; + minC=X[offsetC]; + for (i=1;iX[offsetC+i]) minC=X[offsetC+i]; + } + + maxAC= maxA > maxC ? maxA : maxC; + minAC= minA < minC ? minA : minC; + + /* check if A+C can be represented with the same width as A*/ + if (maxAC-minAC > range) { + /* A could not be expanded adding C. Check if A could be expanded taking + some elements from preceding group. The condition is always that width of + A doesn't increase. + */ + if (numberOfGroups>0 && groupWidths[numberOfGroups-1] > groupWidthA ) { + prevGroupLength=groupLengths[numberOfGroups-1]-incrementGroupLength; + offsetC=count-incrementGroupLength; + /* preceding group length cannot be less than a minimum value */ + while (prevGroupLength >= minGroupLength) { + maxAC=maxA; + minAC=minA; + for (i=0;iX[offsetC+i]) minAC=X[offsetC+i]; + } + + /* no more elements can be transfered, exit loop*/ + if (maxAC-minAC > range) break; + + maxA=maxAC; + minA=minAC; + groupLengths[numberOfGroups-1]-=incrementGroupLength; + groupLengthA+=incrementGroupLength; + count-=incrementGroupLength; + remainingValues+=incrementGroupLength; + + offsetC-=incrementGroupLength; + prevGroupLength-=incrementGroupLength; + } + } + /* close group A*/ + groupLengths[numberOfGroups]=groupLengthA; + groupWidths[numberOfGroups]=groupWidthA; + /* firstOrderValues[numberOfGroups]=minA; */ + /* to optimise the width of first order variable */ + firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0; + count+=groupLengthA; + remainingValues-=groupLengthA; + numberOfGroups++; + /* incrementGroupLengthA is reset to the fixed startGroupLength as it + could have been changed after the A+C or A+B ok condition. + */ + incrementGroupLengthA=startGroupLength; + computeGroupA=1; +#if 0 + if (numberOfGroups==MAX_NUMBER_OF_GROUPS) { + groupLengthA= remainingValues ; + maxA=X[count]; + minA=X[count]; + for (i=1;iX[count+i]) minA=X[count+i]; + } + groupWidthA=number_of_bits(maxA-minA); + range=(long)grib_power(groupWidthA,2)-1; + groupLengths[numberOfGroups]=groupLengthA; + groupWidths[numberOfGroups]=groupWidthA; + firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0; + break; + } +#endif + continue; + } + + /* A+C could be coded with the same width as A*/ + offsetD=offsetC+groupLengthC; + if (offsetD==numberOfValues) { + groupLengths[numberOfGroups]=groupLengthA+groupLengthC; + groupWidths[numberOfGroups]=groupWidthA; + + /* range of AC is the same as A*/ + /* firstOrderValues[numberOfGroups]=minAC; */ + /* to optimise the width of first order variable */ + firstOrderValues[numberOfGroups] = maxAC-range > 0 ? maxAC-range : 0; + numberOfGroups++; + break; + } + + /* group B is created with length startGroupLength, starting at the + same offset as C. + */ + remainingValuesB=numberOfValues-offsetC; + groupLengthB= startGroupLength < remainingValuesB ? startGroupLength : remainingValuesB ; + maxB=maxC; + minB=minC; + for (i=groupLengthC;iX[offsetC+i]) minB=X[offsetC+i]; + } + + /* check if group B can be coded with a smaller width than A */ + if (maxB-minB <= range/2 && range>0 ) { + + /* TODO Add code to try if A can be expanded taking some elements + from the left (preceding) group. + A possible variation is to do this left check (and the previous one) + in the final loop when checking that the width of each group. + */ + + /* close group A and continue loop*/ + groupLengths[numberOfGroups]=groupLengthA; + groupWidths[numberOfGroups]=groupWidthA; + /* firstOrderValues[numberOfGroups]=minA; */ + /* to optimise the width of first order variable */ + firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0; + count+=groupLengthA; + remainingValues-=groupLengthA; + numberOfGroups++; +#if 0 + if (numberOfGroups==MAX_NUMBER_OF_GROUPS) { + groupLengthA= remainingValues ; + maxA=X[count]; + minA=X[count]; + for (i=1;iX[count+i]) minA=X[count+i]; + } + groupWidthA=number_of_bits(maxA-minA); + range=(long)grib_power(groupWidthA,2)-1; + groupLengths[numberOfGroups]=groupLengthA; + groupWidths[numberOfGroups]=groupWidthA; + firstOrderValues[numberOfGroups] = maxA-range > 0 ? maxA-range : 0; + break; + } +#endif + incrementGroupLengthA=startGroupLength; + computeGroupA=1; + continue; + } + + /* check if A+B can be coded with same with as A */ + maxAB= maxA > maxB ? maxA : maxB; + minAB= minA < minB ? minA : minB; + if (maxAB-minAB <= range) { + /* A+B can be merged. The increment used at the beginning of the loop to + build group C is increased to the size of group B + */ + incrementGroupLengthA+=groupLengthB; + maxA=maxAB; + minA=minAB; + computeGroupA=0; + continue; + } + + /* A+B cannot be merged, A+C can be merged*/ + incrementGroupLengthA+=groupLengthC; + computeGroupA=1; + + } /* end of the while*/ + + /* computing bitsPerValue as the number of bits needed to represent + the firstOrderValues. + */ + max=firstOrderValues[0]; + min=firstOrderValues[0]; + for (i=1;ifirstOrderValues[i]) min=firstOrderValues[i]; + } + widthOfFirstOrderValues=number_of_bits(max-min); + firstOrderValuesMax=(long)grib_power(widthOfFirstOrderValues,2)-1; + + if (numberOfGroups>2) { + /* loop through all the groups except the last in reverse order to + check if each group width is still appropriate for the group. + Focus on groups which have been shrank as left groups of an A group taking + some of their elements. + */ + offsets=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfGroups); + offsets[0]=orderOfSPD; + for (i=1;i=0;i--) { + offset=offsets[i]; + groupLength=groupLengths[i]; + + if (groupLength >= startGroupLength) continue; + + max=X[offset]; + min=X[offset]; + for (j=1;jX[offset+j]) min=X[offset+j]; + } + groupWidth=number_of_bits(max-min); + range=(long)grib_power(groupWidth,2)-1; + + /* width of first order values has to be unchanged.*/ + for (j=groupWidth;jrange ? max-range : 0; + if (firstOrderValue <= firstOrderValuesMax ) { + groupWidths[i]=j; + firstOrderValues[i]=firstOrderValue; + break; + } + } + + offsetC=offset; + /* group width of the current group (i) can have been reduced + and it is worth to try to expand the group to get some elements + from the left group if it has bigger width. + */ + if (i>0 && (groupWidths[i-1] > groupWidths[i]) ) { + prevGroupLength=groupLengths[i-1]-incrementGroupLength; + offsetC-=incrementGroupLength; + while (prevGroupLength >= minGroupLength) { + for (j=0;jX[offsetC+j]) min=X[offsetC+j]; + } + + /* width of first order values has to be unchanged*/ + firstOrderValue=max>range ? max-range : 0; + if (max-min > range || firstOrderValue > firstOrderValuesMax ) break; + + groupLengths[i-1]-=incrementGroupLength; + groupLengths[i]+=incrementGroupLength; + firstOrderValues[i]=firstOrderValue; + + offsetC-=incrementGroupLength; + prevGroupLength-=incrementGroupLength; + } + } + + } + grib_context_free(a->parent->h->context,offsets); + } + + maxWidth=groupWidths[0]; + maxLength=groupLengths[0]; + for (i=1;iparent->h->context->no_big_group_split) { + grib_split_long_groups(a->parent->h->context,&numberOfGroups,&lengthOfSecondOrderValues, + groupLengths,&widthOfLengths,groupWidths,widthOfWidths, + firstOrderValues,widthOfFirstOrderValues); + } + + Xp=X+orderOfSPD; + for ( i=0; iparent->h,self->widthOfSPD, widthOfSPD)) + != GRIB_SUCCESS) + return ret; + + } + + /* end writing SPD */ + + if((ret = grib_set_long_internal(a->parent->h,self->widthOfFirstOrderValues, widthOfFirstOrderValues)) + != GRIB_SUCCESS) + return ret; + + dataHeadersLength=25; + if (orderOfSPD) dataHeadersLength+=1+((orderOfSPD+1)*widthOfSPD+7)/8; + widthsLength=(widthOfWidths*numberOfGroups+7)/8; + lengthsLength=(widthOfLengths*numberOfGroups+7)/8; + firstOrderValuesLength=(widthOfFirstOrderValues*numberOfGroups+7)/8; + + NL=widthsLength+dataHeadersLength+1; + N1=NL+lengthsLength; + N2=N1+firstOrderValuesLength; + + NL= NL > 65535 ? 65535 : NL; + N2= N2 > 65535 ? 65535 : N2; + N1= N1 > 65535 ? 65535 : N1; + + grib_set_long(a->parent->h,self->NL, NL); + grib_set_long(a->parent->h,self->N1, N1); + grib_set_long(a->parent->h,self->N2, N2); + + if (numberOfGroups > 65535 ) { + extraValues=numberOfGroups/65536; + codedNumberOfGroups=numberOfGroups%65536; + } else { + extraValues=0; + codedNumberOfGroups=numberOfGroups; + } + + /* if no extraValues key present it is a GRIB2*/ + grib2=0; + if((ret = grib_set_long(a->parent->h,self->extraValues, extraValues)) != GRIB_SUCCESS) { + codedNumberOfGroups=numberOfGroups; + grib2=1; + } + + if((ret = grib_set_long_internal(a->parent->h,self->codedNumberOfGroups, codedNumberOfGroups)) != GRIB_SUCCESS) + return ret; + + numberOfSecondOrderPackedValues=numberOfValues-orderOfSPD; + if (!grib2 && numberOfSecondOrderPackedValues > 65535 ) + numberOfSecondOrderPackedValues= 65535; + + if((ret = grib_set_long_internal(a->parent->h,self->numberOfSecondOrderPackedValues, numberOfSecondOrderPackedValues)) + != GRIB_SUCCESS) + return ret; + + if (grib2) { + if((ret = grib_set_long_internal(a->parent->h,self->bits_per_value, bits_per_value)) != GRIB_SUCCESS) + return ret; + } else { + if((ret = grib_set_long_internal(a->parent->h,self->bits_per_value, 0)) != GRIB_SUCCESS) + return ret; + } + + if((ret = grib_set_long_internal(a->parent->h,self->widthOfWidths, widthOfWidths)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_set_long_internal(a->parent->h,self->widthOfLengths, widthOfLengths)) != GRIB_SUCCESS) + return ret; + + lengthOfSecondOrderValues=0; + for ( i=0; iparent->h,self->half_byte, half_byte)) != GRIB_SUCCESS) + return ret; + + buffer=grib_context_malloc_clear(a->parent->h->context,size); + + pos=0; + if (orderOfSPD) { + long SPD[4]={0,}; + size_t nSPD=orderOfSPD+1; + Assert(orderOfSPD<=3); + for (i=0;iparent->h,self->SPD,SPD,nSPD); + if(ret) return ret; + } + + ret=grib_set_long_array_internal(a->parent->h,self->groupWidths,groupWidths,(size_t)numberOfGroups); + if(ret) return ret; + + ret=grib_set_long_array_internal(a->parent->h,self->groupLengths,groupLengths,(size_t)numberOfGroups); + if(ret) return ret; + + ret=grib_set_long_array_internal(a->parent->h,self->firstOrderValues,firstOrderValues,(size_t)numberOfGroups); + if(ret) return ret; + + Xp=X+orderOfSPD; + pos=0; + count=0; + for (i=0;i0) { + for (j=0;jparent->h->context,buffer); + grib_context_free(a->parent->h->context,X); + grib_context_free(a->parent->h->context,groupLengths); + grib_context_free(a->parent->h->context,groupWidths); + grib_context_free(a->parent->h->context,firstOrderValues); + + return ret; + +} + +static void destroy(grib_context* context,grib_accessor* a) +{ + grib_accessor_data_g1second_order_general_extended_packing *self =(grib_accessor_data_g1second_order_general_extended_packing*)a; + if (self->values != NULL) { + grib_context_free(context, self->values); + self->values=NULL; + } + +} + diff --git a/src/grib_accessor_class_data_g1second_order_general_packing.c b/src/grib_accessor_class_data_g1second_order_general_packing.c new file mode 100644 index 000000000..7610de895 --- /dev/null +++ b/src/grib_accessor_class_data_g1second_order_general_packing.c @@ -0,0 +1,319 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_simple_packing + IMPLEMENTS = init + IMPLEMENTS = pack_double + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + MEMBERS=const char* half_byte + MEMBERS=const char* packingType + MEMBERS=const char* ieee_packing + MEMBERS=const char* precision + MEMBERS=const char* widthOfFirstOrderValues + MEMBERS=const char* N1 + MEMBERS=const char* N2 + MEMBERS=const char* numberOfGroups + MEMBERS=const char* numberOfSecondOrderPackedValues + MEMBERS=const char* extraValues + MEMBERS=const char* pl + MEMBERS=const char* Ni + MEMBERS=const char* Nj + MEMBERS=const char* jPointsAreConsecutive + MEMBERS=const char* bitmap + MEMBERS=const char* groupWidths + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g1second_order_general_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_g1second_order_general_packing */ + const char* half_byte; + const char* packingType; + const char* ieee_packing; + const char* precision; + const char* widthOfFirstOrderValues; + const char* N1; + const char* N2; + const char* numberOfGroups; + const char* numberOfSecondOrderPackedValues; + const char* extraValues; + const char* pl; + const char* Ni; + const char* Nj; + const char* jPointsAreConsecutive; + const char* bitmap; + const char* groupWidths; +} grib_accessor_data_g1second_order_general_packing; + +extern grib_accessor_class* grib_accessor_class_data_simple_packing; + +static grib_accessor_class _grib_accessor_class_data_g1second_order_general_packing = { + &grib_accessor_class_data_simple_packing, /* super */ + "data_g1second_order_general_packing", /* name */ + sizeof(grib_accessor_data_g1second_order_general_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g1second_order_general_packing = &_grib_accessor_class_data_g1second_order_general_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g1second_order_general_packing *self =(grib_accessor_data_g1second_order_general_packing*)a; + + self->half_byte = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->packingType = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->ieee_packing = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->precision = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->widthOfFirstOrderValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->N1 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->N2 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfGroups = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfSecondOrderPackedValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->extraValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->Ni = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->Nj = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pl = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->jPointsAreConsecutive = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->bitmap = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->groupWidths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->edition=1; + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + +} + +static long value_count(grib_accessor* a) +{ + long numberOfSecondOrderPackedValues=0; + grib_accessor_data_g1second_order_general_packing *self =(grib_accessor_data_g1second_order_general_packing*)a; + + if(grib_get_long_internal(a->parent->h,self->numberOfSecondOrderPackedValues,&numberOfSecondOrderPackedValues) != GRIB_SUCCESS) + return 0; + return numberOfSecondOrderPackedValues; + +} + +static int unpack_double(grib_accessor* a, double* values, size_t *len) +{ + grib_accessor_data_g1second_order_general_packing* self = (grib_accessor_data_g1second_order_general_packing*)a; + int ret=0; + long numberOfGroups,numberOfSecondOrderPackedValues; + long* groupWidths=0; + long* firstOrderValues=0; + long* X=0; + long pos=0; + long widthOfFirstOrderValues=0; + unsigned char* buf = (unsigned char*)a->parent->h->buffer->data; + long i,n; + double reference_value; + long binary_scale_factor; + long decimal_scale_factor; + double s,d; + long* secondaryBitmap; + long groupLength,j; + size_t groupWidthsSize; + + buf += grib_byte_offset(a); + + if((ret=grib_get_long_internal(a->parent->h,self->numberOfGroups,&numberOfGroups)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->widthOfFirstOrderValues,&widthOfFirstOrderValues)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->binary_scale_factor,&binary_scale_factor)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->decimal_scale_factor,&decimal_scale_factor)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_double_internal(a->parent->h,self->reference_value,&reference_value)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->numberOfSecondOrderPackedValues, + &numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) + return ret; + + groupWidths=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfGroups); + groupWidthsSize=numberOfGroups; + if((ret=grib_get_long_array_internal(a->parent->h,self->groupWidths, groupWidths,&groupWidthsSize)) != GRIB_SUCCESS) + return ret; + + secondaryBitmap=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*(numberOfSecondOrderPackedValues+1)); + secondaryBitmap[numberOfSecondOrderPackedValues]=1; + grib_decode_long_array(buf,&pos,1,numberOfSecondOrderPackedValues,secondaryBitmap); + pos = 8 * ( (pos + 7 ) / 8); + + firstOrderValues=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfGroups); + grib_decode_long_array(buf,&pos,widthOfFirstOrderValues,numberOfGroups,firstOrderValues); + pos = 8 * ( (pos + 7 ) / 8); + + X=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfSecondOrderPackedValues); + + n=0; + i=-1; + groupLength=0; + while (n0) { + for (j=0;jparent->h->context,secondaryBitmap); + grib_context_free(a->parent->h->context,firstOrderValues); + grib_context_free(a->parent->h->context,X); + grib_context_free(a->parent->h->context,groupWidths); + + return ret; +} + +static int pack_double(grib_accessor* a, const double* cval, size_t *len) +{ + /* return GRIB_NOT_IMPLEMENTED; */ + char type[]="grid_second_order"; + size_t size=strlen(type); + + grib_set_string(a->parent->h,"packingType",type,&size); + + return grib_set_double_array(a->parent->h,"values",cval,*len); + +} + diff --git a/src/grib_accessor_class_data_g1second_order_row_by_row_packing.c b/src/grib_accessor_class_data_g1second_order_row_by_row_packing.c new file mode 100644 index 000000000..7baf79ba0 --- /dev/null +++ b/src/grib_accessor_class_data_g1second_order_row_by_row_packing.c @@ -0,0 +1,424 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_simple_packing + IMPLEMENTS = init + IMPLEMENTS = pack_double + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + MEMBERS=const char* half_byte + MEMBERS=const char* packingType + MEMBERS=const char* ieee_packing + MEMBERS=const char* precision + MEMBERS=const char* widthOfFirstOrderValues + MEMBERS=const char* N1 + MEMBERS=const char* N2 + MEMBERS=const char* numberOfGroups + MEMBERS=const char* numberOfSecondOrderPackedValues + MEMBERS=const char* extraValues + MEMBERS=const char* pl + MEMBERS=const char* Ni + MEMBERS=const char* Nj + MEMBERS=const char* jPointsAreConsecutive + MEMBERS=const char* bitmap + MEMBERS=const char* groupWidths + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g1second_order_row_by_row_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_g1second_order_row_by_row_packing */ + const char* half_byte; + const char* packingType; + const char* ieee_packing; + const char* precision; + const char* widthOfFirstOrderValues; + const char* N1; + const char* N2; + const char* numberOfGroups; + const char* numberOfSecondOrderPackedValues; + const char* extraValues; + const char* pl; + const char* Ni; + const char* Nj; + const char* jPointsAreConsecutive; + const char* bitmap; + const char* groupWidths; +} grib_accessor_data_g1second_order_row_by_row_packing; + +extern grib_accessor_class* grib_accessor_class_data_simple_packing; + +static grib_accessor_class _grib_accessor_class_data_g1second_order_row_by_row_packing = { + &grib_accessor_class_data_simple_packing, /* super */ + "data_g1second_order_row_by_row_packing", /* name */ + sizeof(grib_accessor_data_g1second_order_row_by_row_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g1second_order_row_by_row_packing = &_grib_accessor_class_data_g1second_order_row_by_row_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g1second_order_row_by_row_packing *self =(grib_accessor_data_g1second_order_row_by_row_packing*)a; + + self->half_byte = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->packingType = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->ieee_packing = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->precision = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->widthOfFirstOrderValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->N1 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->N2 = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfGroups = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfSecondOrderPackedValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->extraValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->Ni = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->Nj = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pl = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->jPointsAreConsecutive = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->groupWidths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->bitmap = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->edition=1; + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_g1second_order_row_by_row_packing *self =(grib_accessor_data_g1second_order_row_by_row_packing*)a; + long n=0,i=0; + long numberOfRows=0; + long jPointsAreConsecutive=0; + long Ni=0,Nj=0; + int bitmapPresent=0; + size_t plSize=0; + long* pl=0; + int ret=0; + grib_context* c=a->parent->h->context; + + if (self->bitmap) bitmapPresent=1; + if((ret=grib_get_long_internal(a->parent->h,self->jPointsAreConsecutive,&jPointsAreConsecutive)) != GRIB_SUCCESS) + return ret; + if((ret=grib_get_long_internal(a->parent->h,self->Ni,&Ni)) != GRIB_SUCCESS) + return ret; + if((ret=grib_get_long_internal(a->parent->h,self->Nj,&Nj)) != GRIB_SUCCESS) + return ret; + if (jPointsAreConsecutive) { + numberOfRows=Ni; + } else { + numberOfRows=Nj; + } + + plSize=0; + ret=grib_get_size(a->parent->h,self->pl,&plSize); + if (ret==GRIB_SUCCESS) { + pl=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*plSize); + if((ret=grib_get_long_array(a->parent->h,self->pl,pl,&plSize)) != GRIB_SUCCESS) + return ret; + } + + n=0; + if (bitmapPresent) { + long *bitmap,*pbitmap; + size_t numberOfPoints = 0; + + if (plSize) { + for (i=0;iparent->h->context,sizeof(long)*numberOfPoints); + pbitmap=bitmap; + grib_get_long_array(a->parent->h,self->bitmap,bitmap,&numberOfPoints); + for (i=0;iparent->h->context,pbitmap); + } else { + if (plSize) { + for (i=0;iparent->h->buffer->data; + long k,i,j,n,Ni,Nj; + double reference_value; + long binary_scale_factor; + long decimal_scale_factor; + double s,d; + size_t groupWidthsSize=0; + int bitmapPresent=0; + size_t plSize=0; + long* pl=0; + + buf += grib_byte_offset(a); + + if((ret=grib_get_long_internal(a->parent->h,self->numberOfGroups,&numberOfGroups)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->jPointsAreConsecutive,&jPointsAreConsecutive)) != GRIB_SUCCESS) + return ret; + + if (self->bitmap) bitmapPresent=1; + ret=grib_get_size(a->parent->h,self->pl,&plSize); + if (ret==GRIB_SUCCESS) { + pl=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*plSize); + if((ret=grib_get_long_array(a->parent->h,self->pl,pl,&plSize)) != GRIB_SUCCESS) + return ret; + } + + if((ret=grib_get_long_internal(a->parent->h,self->Ni,&Ni)) != GRIB_SUCCESS) + return ret; + if((ret=grib_get_long_internal(a->parent->h,self->Nj,&Nj)) != GRIB_SUCCESS) + return ret; + if (jPointsAreConsecutive) { + numberOfRows=Ni; + numberOfColumns=Nj; + } else { + numberOfRows=Nj; + numberOfColumns=Ni; + } + + numbersPerRow=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfRows); + if (bitmapPresent) { + long *bitmap,*pbitmap; + size_t numberOfPoints=Ni*Nj; + + if (plSize) { + numberOfPoints=0; + for (i=0;iparent->h->context,sizeof(long)*numberOfPoints); + pbitmap=bitmap; + grib_get_long_array(a->parent->h,self->bitmap,bitmap,&numberOfPoints); + if (plSize) { + for (i=0;iparent->h->context,pbitmap); + } else { + if (plSize) { + for (i=0;iparent->h,self->widthOfFirstOrderValues,&widthOfFirstOrderValues)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->binary_scale_factor,&binary_scale_factor)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->decimal_scale_factor,&decimal_scale_factor)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_double_internal(a->parent->h,self->reference_value,&reference_value)) != GRIB_SUCCESS) + return ret; + + if((ret=grib_get_long_internal(a->parent->h,self->numberOfSecondOrderPackedValues, + &numberOfSecondOrderPackedValues)) != GRIB_SUCCESS) + return ret; + + groupWidths=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfGroups); + groupWidthsSize=numberOfGroups; + if((ret=grib_get_long_array_internal(a->parent->h,self->groupWidths, groupWidths,&groupWidthsSize)) != GRIB_SUCCESS) + return ret; + + firstOrderValues=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*numberOfGroups); + grib_decode_long_array(buf,&pos,widthOfFirstOrderValues,numberOfGroups,firstOrderValues); + pos = 8 * ( (pos + 7 ) / 8); + + n=0; + for (i=0; iparent->h->context,sizeof(long)*n); + n=0; + k=0; + for (i=0; i0) { + for (j=0;jparent->h->context,firstOrderValues); + grib_context_free(a->parent->h->context,X); + grib_context_free(a->parent->h->context,groupWidths); + if (plSize) grib_context_free(a->parent->h->context,pl); + + return ret; +} + +static int pack_double(grib_accessor* a, const double* cval, size_t *len) +{ + char type[]="grid_second_order"; + size_t size=strlen(type); + + grib_set_string(a->parent->h,"packingType",type,&size); + + return grib_set_double_array(a->parent->h,"values",cval,*len); +} + diff --git a/src/grib_accessor_class_data_g1secondary_bitmap.c b/src/grib_accessor_class_data_g1secondary_bitmap.c new file mode 100644 index 000000000..4f716908a --- /dev/null +++ b/src/grib_accessor_class_data_g1secondary_bitmap.c @@ -0,0 +1,244 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_secondary_bitmap + IMPLEMENTS = init + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=const char* number_of_ones + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g1secondary_bitmap { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in data_secondary_bitmap */ + const char* primary_bitmap; + const char* secondary_bitmap; + const char* missing_value; + const char* expand_by; +/* Members defined in data_g1secondary_bitmap */ + const char* number_of_ones; +} grib_accessor_data_g1secondary_bitmap; + +extern grib_accessor_class* grib_accessor_class_data_secondary_bitmap; + +static grib_accessor_class _grib_accessor_class_data_g1secondary_bitmap = { + &grib_accessor_class_data_secondary_bitmap, /* super */ + "data_g1secondary_bitmap", /* name */ + sizeof(grib_accessor_data_g1secondary_bitmap), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g1secondary_bitmap = &_grib_accessor_class_data_g1secondary_bitmap; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g1secondary_bitmap *self =(grib_accessor_data_g1secondary_bitmap*)a; + self->number_of_ones = grib_arguments_get_name(a->parent->h,args,4); +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_g1secondary_bitmap *self =(grib_accessor_data_g1secondary_bitmap*)a; + size_t len = 0; + int err = 0; + long expand_by; + + if((err = grib_get_long_internal(a->parent->h,self->expand_by,&expand_by)) != GRIB_SUCCESS) + return 0; + + if((err = grib_get_size(a->parent->h,self->primary_bitmap,&len)) != GRIB_SUCCESS) + return 0; + + return expand_by*len; +} + + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_g1secondary_bitmap* self = (grib_accessor_data_g1secondary_bitmap*)a; + + int err = 0; + + long primary_len = 0; + long secondary_len = 0; + double* primary_bitmap = NULL; + double* secondary_bitmap = NULL; + long i = 0; + long j = 0; + long on = 0; + long k; + long m; + double missing_value = 0; + double present_value = 0; + long expand_by =0; + + if (*len ==0) return GRIB_NO_VALUES; + + if((err = grib_get_long(a->parent->h,self->expand_by,&expand_by)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_double_internal(a->parent->h,self->missing_value,&missing_value)) != GRIB_SUCCESS) + return err; + + Assert(expand_by); + + if(*len % expand_by) + { + /*TODO: issue warning */ + return GRIB_ENCODING_ERROR; + } + + + primary_len = *len / expand_by; + primary_bitmap= grib_context_malloc_clear(a->parent->h->context,primary_len*sizeof(double)); + if(!primary_bitmap) return GRIB_OUT_OF_MEMORY; + + secondary_len = *len ; + secondary_bitmap= grib_context_malloc_clear(a->parent->h->context,secondary_len*sizeof(double)); + if(!secondary_bitmap) { + grib_context_free(a->parent->h->context,primary_bitmap); + return GRIB_OUT_OF_MEMORY; + } + + if(missing_value == 0) + present_value = 1; + else + present_value = 0; + + k = 0; + m = 0; + for(i=0; i<*len ; i += expand_by) + { + int cnt = 0; + for(j = 0; j < expand_by; j++) + if(val[i+j] == missing_value) + cnt++; + + if(cnt == expand_by) /* all expand_by values are missing */ + primary_bitmap[k++] = missing_value; + else { + primary_bitmap[k++] = present_value; + for(j = 0; j < expand_by; j++) + secondary_bitmap[m++] = val[i+j]; + on++; + } + } + + *len = k; + + /*printf("QQQQQQQ %ld %ld second=%ld\n",primary_len,on,m);*/ + Assert(k == primary_len); + + err = grib_set_double_array_internal(a->parent->h,self->primary_bitmap,primary_bitmap,k); + if(err == GRIB_SUCCESS) + err = grib_set_double_array_internal(a->parent->h,self->secondary_bitmap,secondary_bitmap,m); + + grib_context_free(a->parent->h->context,primary_bitmap); + grib_context_free(a->parent->h->context,secondary_bitmap); + + if(err == GRIB_SUCCESS) + err = grib_set_long_internal(a->parent->h,self->number_of_ones,on); + + return err; +} + diff --git a/src/grib_accessor_class_data_g1shsimple_packing.c b/src/grib_accessor_class_data_g1shsimple_packing.c new file mode 100644 index 000000000..f1d5aa330 --- /dev/null +++ b/src/grib_accessor_class_data_g1shsimple_packing.c @@ -0,0 +1,176 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_shsimple_packing + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g1shsimple_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in data_shsimple_packing */ + const char* coded_values; + const char* real_part; + int dirty; +/* Members defined in data_g1shsimple_packing */ +} grib_accessor_data_g1shsimple_packing; + +extern grib_accessor_class* grib_accessor_class_data_shsimple_packing; + +static grib_accessor_class _grib_accessor_class_data_g1shsimple_packing = { + &grib_accessor_class_data_shsimple_packing, /* super */ + "data_g1shsimple_packing", /* name */ + sizeof(grib_accessor_data_g1shsimple_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g1shsimple_packing = &_grib_accessor_class_data_g1shsimple_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_g1shsimple_packing *self =(grib_accessor_data_g1shsimple_packing*)a; + size_t len = 0; + grib_get_size(a->parent->h,self->coded_values,&len); + len += 1; + return len; +} + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_g1shsimple_packing* self = (grib_accessor_data_g1shsimple_packing*)a; + int err = GRIB_SUCCESS; + + size_t coded_n_vals = 0; + size_t n_vals = 0; + + if((err = grib_get_size(a->parent->h,self->coded_values,&coded_n_vals)) != GRIB_SUCCESS) + return err; + + n_vals = coded_n_vals + 1; + + if(*len < n_vals) + { + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if((err = grib_get_double_internal(a->parent->h,self->real_part,val)) != GRIB_SUCCESS) + return err; + + val++; + + if((err = grib_get_double_array_internal(a->parent->h,self->coded_values,val,&coded_n_vals)) != GRIB_SUCCESS) + return err; + + + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "grib_accessor_data_g1shsimple_packing_bitmap : unpack_double : creating %s, %d values", + a->name, n_vals); + + *len = n_vals; + + return err; +} + diff --git a/src/grib_accessor_class_data_g1simple_packing.c b/src/grib_accessor_class_data_g1simple_packing.c new file mode 100644 index 000000000..6d511f481 --- /dev/null +++ b/src/grib_accessor_class_data_g1simple_packing.c @@ -0,0 +1,343 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_simple_packing + IMPLEMENTS = init + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=const char* half_byte + MEMBERS=const char* packingType + MEMBERS=const char* ieee_packing + MEMBERS=const char* precision + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g1simple_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_g1simple_packing */ + const char* half_byte; + const char* packingType; + const char* ieee_packing; + const char* precision; +} grib_accessor_data_g1simple_packing; + +extern grib_accessor_class* grib_accessor_class_data_simple_packing; + +static grib_accessor_class _grib_accessor_class_data_g1simple_packing = { + &grib_accessor_class_data_simple_packing, /* super */ + "data_g1simple_packing", /* name */ + sizeof(grib_accessor_data_g1simple_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g1simple_packing = &_grib_accessor_class_data_g1simple_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g1simple_packing *self =(grib_accessor_data_g1simple_packing*)a; + + self->half_byte = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->packingType = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->ieee_packing = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->precision = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->edition=1; + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + +} + +static long value_count(grib_accessor* a) +{ + long number_of_values; + grib_accessor_data_g1simple_packing *self =(grib_accessor_data_g1simple_packing*)a; + + + /* Special case for when values are cleared */ + /*if(a->length == 0) + return 0;*/ + + if(grib_get_long_internal(a->parent->h,self->number_of_values,&number_of_values) != GRIB_SUCCESS) + return 0; + return number_of_values; + +} + +static int pack_double(grib_accessor* a, const double* cval, size_t *len) +{ + grib_accessor_data_g1simple_packing* self = (grib_accessor_data_g1simple_packing*)a; + grib_accessor_class* super = *(a->cclass->super); + + size_t n_vals = *len; + long half_byte = 0; + int ret = 0; + long offsetdata = 0; + long offsetsection = 0; + double reference_value = 0; + long binary_scale_factor = 0; + long bits_per_value = 0; + long decimal_scale_factor = 0; + double decimal = 1; + size_t buflen = 0; + unsigned char* buf = NULL; + unsigned char* encoded = NULL; + double divisor = 1; + int i; + long off = 0; + grib_context* c=a->parent->h->context; + grib_handle* h=a->parent->h; + char* ieee_packing_s=NULL; + char* packingType_s=NULL; + char* precision_s=NULL; + double units_factor=1.0; + double units_bias=0.0; + double* val=(double*)cval; + double missingValue=9999.0; + long constantFieldHalfByte=0; + int err=0; + + if(*len != 0) { + if(self->units_factor && + (grib_get_double_internal(a->parent->h,self->units_factor,&units_factor)== GRIB_SUCCESS)) { + grib_set_double_internal(a->parent->h,self->units_factor,1.0); + } + + if(self->units_bias && + (grib_get_double_internal(a->parent->h,self->units_bias,&units_bias)== GRIB_SUCCESS)) { + grib_set_double_internal(a->parent->h,self->units_bias,0.0); + } + + if (units_factor != 1.0) { + if (units_bias != 0.0) + for (i=0;iieee_packing && self->ieee_packing) { + long precision=c->ieee_packing==32 ? 1 : 2; + size_t lenstr=strlen(self->ieee_packing); + + packingType_s=grib_context_strdup(c,self->packingType); + ieee_packing_s=grib_context_strdup(c,self->ieee_packing); + precision_s=grib_context_strdup(c,self->precision); + + grib_set_string(h,packingType_s,ieee_packing_s,&lenstr); + grib_set_long(h,precision_s,precision); + + grib_context_free(c,packingType_s); + grib_context_free(c,ieee_packing_s); + grib_context_free(c,precision_s); + return grib_set_double_array(h,"values",val,*len); + } + } + + ret = super->pack_double(a,val,len); + switch (ret) { + case GRIB_CONSTANT_FIELD: + ret=grib_get_long(a->parent->h,"constantFieldHalfByte",&constantFieldHalfByte); + if (ret) constantFieldHalfByte=0; + if((ret = grib_set_long_internal(a->parent->h,self->half_byte, constantFieldHalfByte)) + != GRIB_SUCCESS) + return ret; + grib_buffer_replace(a, NULL, 0,1,1); + return GRIB_SUCCESS; + break; + case GRIB_NO_VALUES: + ret=grib_get_long(a->parent->h,"constantFieldHalfByte",&constantFieldHalfByte); + if (ret) constantFieldHalfByte=0; + /* TODO move to def file */ + grib_get_double(a->parent->h,"missingValue", &missingValue); + if((err = grib_set_double_internal(a->parent->h,self->reference_value, missingValue)) != + GRIB_SUCCESS) + return err; + if((ret = grib_set_long_internal(a->parent->h,self->binary_scale_factor, binary_scale_factor)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_set_long_internal(a->parent->h,self->half_byte, constantFieldHalfByte)) + != GRIB_SUCCESS) + return ret; + grib_buffer_replace(a, NULL, 0,1,1); + return GRIB_SUCCESS; + break; + case GRIB_SUCCESS: + break; + default: + grib_context_log(a->parent->h->context,GRIB_LOG_FATAL,"unable to compute packing parameters\n"); + return ret; + } + + if((ret = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != + GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->offsetdata,&offsetdata)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->offsetsection,&offsetsection)) != GRIB_SUCCESS) + return ret; + + decimal = grib_power(decimal_scale_factor,10) ; + divisor = grib_power(-binary_scale_factor,2); + + buflen = (((bits_per_value*n_vals)+7)/8)*sizeof(unsigned char); + if((buflen + (offsetdata-offsetsection)) %2) { + buflen++; + /* + a->length++; + a->parent->h->buffer->ulength++; + */ + } + half_byte = (buflen*8)-((*len)*bits_per_value); + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, + "HALF byte: buflen=%d bits_per_value=%ld len=%d half_byte=%ld\n", + buflen,bits_per_value,*len,half_byte); + + Assert(half_byte <= 0x0f); + + if((ret = grib_set_long_internal(a->parent->h,self->half_byte, half_byte)) + != GRIB_SUCCESS) + return ret; + + buf = grib_context_buffer_malloc_clear(a->parent->h->context,buflen); + encoded = buf; + + grib_encode_double_array(n_vals,val,bits_per_value,reference_value,decimal,divisor,encoded,&off); + + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "grib_accessor_data_g1simple_packing : pack_double : packing %s, %d values", a->name, n_vals); + + grib_buffer_replace(a, buf, buflen,1,1); + + grib_context_buffer_free(a->parent->h->context,buf); + + return GRIB_SUCCESS; + +} + diff --git a/src/grib_accessor_class_data_g22order_packing.c b/src/grib_accessor_class_data_g22order_packing.c new file mode 100644 index 000000000..74214c7df --- /dev/null +++ b/src/grib_accessor_class_data_g22order_packing.c @@ -0,0 +1,745 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#define fortint long +#define fortfloat double +#define C2FORT(x) (x) +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_values + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=const char* numberOfValues + MEMBERS=const char* bits_per_value + MEMBERS=const char* reference_value + MEMBERS=const char* binary_scale_factor + MEMBERS=const char* decimal_scale_factor + MEMBERS=const char* typeOfOriginalFieldValues + MEMBERS=const char* groupSplittingMethodUsed + MEMBERS=const char* missingValueManagementUsed + MEMBERS=const char* primaryMissingValueSubstitute + MEMBERS=const char* secondaryMissingValueSubstitute + MEMBERS=const char* numberOfGroupsOfDataValues + MEMBERS=const char* referenceForGroupWidths + MEMBERS=const char* numberOfBitsUsedForTheGroupWidths + MEMBERS=const char* referenceForGroupLengths + MEMBERS=const char* lengthIncrementForTheGroupLengths + MEMBERS=const char* trueLengthOfLastGroup + MEMBERS=const char* numberOfBitsUsedForTheScaledGroupLengths + MEMBERS=const char* orderOfSpatialDifferencing + MEMBERS=const char* numberOfOctetsExtraDescriptors + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g22order_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_g22order_packing */ + const char* numberOfValues; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; + const char* typeOfOriginalFieldValues; + const char* groupSplittingMethodUsed; + const char* missingValueManagementUsed; + const char* primaryMissingValueSubstitute; + const char* secondaryMissingValueSubstitute; + const char* numberOfGroupsOfDataValues; + const char* referenceForGroupWidths; + const char* numberOfBitsUsedForTheGroupWidths; + const char* referenceForGroupLengths; + const char* lengthIncrementForTheGroupLengths; + const char* trueLengthOfLastGroup; + const char* numberOfBitsUsedForTheScaledGroupLengths; + const char* orderOfSpatialDifferencing; + const char* numberOfOctetsExtraDescriptors; +} grib_accessor_data_g22order_packing; + +extern grib_accessor_class* grib_accessor_class_values; + +static grib_accessor_class _grib_accessor_class_data_g22order_packing = { + &grib_accessor_class_values, /* super */ + "data_g22order_packing", /* name */ + sizeof(grib_accessor_data_g22order_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g22order_packing = &_grib_accessor_class_data_g22order_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g22order_packing *self =(grib_accessor_data_g22order_packing*)a; + + self->numberOfValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->bits_per_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->reference_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->binary_scale_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->decimal_scale_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->typeOfOriginalFieldValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->groupSplittingMethodUsed = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->missingValueManagementUsed = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->primaryMissingValueSubstitute = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->secondaryMissingValueSubstitute = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfGroupsOfDataValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->referenceForGroupWidths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfBitsUsedForTheGroupWidths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->referenceForGroupLengths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->lengthIncrementForTheGroupLengths = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->trueLengthOfLastGroup = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfBitsUsedForTheScaledGroupLengths = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->orderOfSpatialDifferencing = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->numberOfOctetsExtraDescriptors = grib_arguments_get_name(a->parent->h,args,self->carg++); + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + +} + +#if 0 +static int reverse_rows (unsigned long* data, long len, long number_along_parallel){ + long count = 0; + long i = 0; + long left = 0; + long right = number_along_parallel-1; + long tmp = 0; + + data += number_along_parallel; + count = number_along_parallel; + + while(count < len){ + left = 0; + right = number_along_parallel-1; + + for (i = 0;i0){ + spread/=2; + nbit++; + } + return nbit; +} +static int find_next_group(const unsigned long* vals, size_t len, unsigned long w, unsigned long l,long* nbits, long* groupsize, long* r_val){ + unsigned long lmin = 0; + unsigned long lmax = 0; + + size_t i = 0; + + + if (len <=0 ) return GRIB_ARRAY_TOO_SMALL; + lmin = vals[0]; + lmax = lmin; + + while(i < len){ + if(vals[i] < lmin) lmin = vals[i]; + if(vals[i] > lmax) lmax = vals[i]; + Assert((lmax-lmin) >= 0); + *nbits = calc_bits_needed(lmax-lmin); + *r_val = lmin; + i++; + *groupsize = i; + + if(*groupsize > l-2) return GRIB_SUCCESS; + if(*nbits > w-2) return GRIB_SUCCESS; + } + + return GRIB_SUCCESS; +} + +#if 0 +static int spatial_difference (grib_context *c, unsigned long* vals, long len, long order, long* bias){ + + long j = 3; + + + long *v = grib_context_malloc(c,(len)*sizeof(long)); + + for(j = 0; j< len;j++) + v[j] = vals[j]; + + if (order == 1){ + grib_context_free(c,v); + return GRIB_NOT_IMPLEMENTED; + *bias=v[order]; + for(j = order; j< len;j++){ + v[j] -= vals [j-1]; + if(*bias>v[j]) + *bias = v[j]; + } + } + + if (order == 2){ + *bias=v[order]; + for(j = order; j< len;j++){ + v[j] -= vals [j-1]; + v[j] -= vals [j-1] - vals[j-2]; + if(*bias>v[j]) + *bias = v[j]; + } + } + if (order == 3){ + grib_context_free(c,v); + return GRIB_NOT_IMPLEMENTED; + *bias=v[order]; + for(j = order; j< len;j++){ + v[j] -= vals[j-1]; + v[j] -= vals[j-1] - vals[j-2]; + v[j] -= vals[j-2] - vals[j-3]; + if(*bias>v[j]) + *bias = v[j]; + } + } + for(j = order; j< len;j++){ + Assert(v[j]-*bias >=0); + vals[j] = v[j]-*bias; + } + + grib_context_free(c,v); + return 0; +} +#endif + +static int de_spatial_difference (grib_context *c, unsigned long* vals, long len, long order, long bias){ + + long j = 0; + + long i_origin = 0; + long i_first_diff = 0; + long i_second_diff = 0; + + Assert(order > 0); + Assert(order <= 3); + + i_origin=vals[order-1]; + + if (order == 1) { + for(j = 1; j< len;j++){ + i_origin=i_origin+(vals[j]+bias); + vals[j]=i_origin; + } + } + + if (order == 2){ + i_first_diff=vals[1]-vals[0]; + for(j = 2; j< len;j++){ + i_first_diff=i_first_diff+(vals[j]+bias); + i_origin=i_origin+i_first_diff; + vals[j]=i_origin; + } + } + + if (order == 3){ + i_first_diff=vals[2]-vals[1]; + i_second_diff=i_first_diff-(vals[1]-vals[0]); + for(j = 3; j< len;j++){ + i_second_diff=i_second_diff+(vals[j]+bias); + i_first_diff=i_first_diff+i_second_diff; + i_origin=i_origin+i_first_diff; + vals[j]=i_origin; + } + } + return 0; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_g22order_packing* self = (grib_accessor_data_g22order_packing*)a; + + size_t i = 0; + size_t j = 0; + size_t n_vals = grib_value_count(a); + + long vcount = 0; + int err = GRIB_SUCCESS; + + unsigned long* sec_val = NULL; + + unsigned char* buf = (unsigned char*)a->parent->h->buffer->data; + unsigned char* buf_ref = NULL; + unsigned char* buf_width = NULL; + unsigned char* buf_length = NULL; + unsigned char* buf_vals = NULL; + + long length_p = 0; + long ref_p = 0; + long width_p = 0; + long vals_p = 0; + + long nvals_per_group = 0; + long nbits_per_group_val = 0; + long group_ref_val = 0; + + long bits_per_value = 0; + double binary_s = 0; + double decimal_s = 0; + double reference_value = 0; + + long binary_scale_factor; + long decimal_scale_factor; + long typeOfOriginalFieldValues; + long groupSplittingMethodUsed; + long missingValueManagementUsed; + long primaryMissingValueSubstitute; + long secondaryMissingValueSubstitute; + long numberOfGroupsOfDataValues; + long referenceForGroupWidths; + long numberOfBitsUsedForTheGroupWidths; + long referenceForGroupLengths; + long lengthIncrementForTheGroupLengths; + long trueLengthOfLastGroup; + long numberOfBitsUsedForTheScaledGroupLengths; + long orderOfSpatialDifferencing; + long numberOfOctetsExtraDescriptors; + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value )) != GRIB_SUCCESS) return err; + if((err = grib_get_double_internal(a->parent->h,self->reference_value,&reference_value )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->binary_scale_factor,&binary_scale_factor )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor,&decimal_scale_factor )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->typeOfOriginalFieldValues,&typeOfOriginalFieldValues )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->groupSplittingMethodUsed,&groupSplittingMethodUsed )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->missingValueManagementUsed,&missingValueManagementUsed )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->primaryMissingValueSubstitute,&primaryMissingValueSubstitute )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->secondaryMissingValueSubstitute,&secondaryMissingValueSubstitute )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->numberOfGroupsOfDataValues,&numberOfGroupsOfDataValues )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->referenceForGroupWidths,&referenceForGroupWidths )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->numberOfBitsUsedForTheGroupWidths,&numberOfBitsUsedForTheGroupWidths )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->referenceForGroupLengths,&referenceForGroupLengths )) != GRIB_SUCCESS) return err; + + if((err = grib_get_long_internal(a->parent->h,self->lengthIncrementForTheGroupLengths,&lengthIncrementForTheGroupLengths )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->trueLengthOfLastGroup,&trueLengthOfLastGroup )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->numberOfBitsUsedForTheScaledGroupLengths,&numberOfBitsUsedForTheScaledGroupLengths )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->orderOfSpatialDifferencing,&orderOfSpatialDifferencing )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->numberOfOctetsExtraDescriptors,&numberOfOctetsExtraDescriptors )) != GRIB_SUCCESS) return err; + + self->dirty=0; + + /* I have everything now start decoding */ + /* + fprintf(stdout,"\n****************************************\n"); + fprintf(stdout," bits_per_value = %d\n", bits_per_value); + fprintf(stdout," reference_value = %g\n", reference_value); + fprintf(stdout," binary_scale_factor = %d\n", binary_scale_factor); + fprintf(stdout," decimal_scale_factor = %d\n", decimal_scale_factor); + fprintf(stdout," typeOfOriginalFieldValues = %d\n", typeOfOriginalFieldValues); + fprintf(stdout," groupSplittingMethodUsed = %d\n", groupSplittingMethodUsed); + fprintf(stdout," missingValueManagementUsed = %d\n", missingValueManagementUsed); + fprintf(stdout," primaryMissingValueSubstitute = %d\n", primaryMissingValueSubstitute); + fprintf(stdout," secondaryMissingValueSubstitute = %d\n", secondaryMissingValueSubstitute); + fprintf(stdout," numberOfGroupsOfDataValues = %d\n", numberOfGroupsOfDataValues); + fprintf(stdout," referenceForGroupWidths = %d\n", referenceForGroupWidths); + fprintf(stdout," numberOfBitsUsedForTheGroupWidths = %d\n", numberOfBitsUsedForTheGroupWidths); + fprintf(stdout," referenceForGroupLengths = %d\n", referenceForGroupLengths); + fprintf(stdout," lengthIncrementForTheGroupLengths = %d\n", lengthIncrementForTheGroupLengths); + fprintf(stdout," trueLengthOfLastGroup = %d\n", trueLengthOfLastGroup); + fprintf(stdout," numberOfBitsUsedForTheScaledGroupLengths = %d\n", numberOfBitsUsedForTheScaledGroupLengths); + fprintf(stdout," numberOfOctetsExtraDescriptors = %d\n", numberOfOctetsExtraDescriptors); + fprintf(stdout," orderOfSpatialDifferencing = %d\n", orderOfSpatialDifferencing); + fprintf(stdout,"\n****************************************\n"); + */ + sec_val = grib_context_malloc(a->parent->h->context,(n_vals)*sizeof(unsigned long)); + + buf_ref = buf + a->offset ; + + ref_p = (numberOfGroupsOfDataValues*bits_per_value); + + if(orderOfSpatialDifferencing) ref_p += (1+orderOfSpatialDifferencing)*(numberOfOctetsExtraDescriptors*8); + + buf_width = buf_ref + (ref_p/8) + (ref_p%8?1:0); + + width_p = (numberOfGroupsOfDataValues*numberOfBitsUsedForTheGroupWidths); + buf_length = buf_width + (width_p/8) + (width_p%8?1:0); + + length_p = (numberOfGroupsOfDataValues*numberOfBitsUsedForTheScaledGroupLengths); + buf_vals = buf_length + (length_p/8) + (length_p%8?1:0); + + length_p = 0; + ref_p = orderOfSpatialDifferencing?(orderOfSpatialDifferencing+1)*(numberOfOctetsExtraDescriptors*8):0; + width_p = 0; + vals_p = 0; + + + vcount = 0; + + for(i=0;i < numberOfGroupsOfDataValues;i++){ + group_ref_val = grib_decode_unsigned_long(buf_ref,&ref_p, bits_per_value); + nvals_per_group = grib_decode_unsigned_long(buf_length, &length_p,numberOfBitsUsedForTheScaledGroupLengths); + nbits_per_group_val = grib_decode_unsigned_long(buf_width, &width_p, numberOfBitsUsedForTheGroupWidths); + + nvals_per_group *= lengthIncrementForTheGroupLengths; + nvals_per_group += referenceForGroupLengths; + nbits_per_group_val += referenceForGroupWidths; + + if (i == numberOfGroupsOfDataValues-1) nvals_per_group = trueLengthOfLastGroup; + Assert (n_vals >= vcount+nvals_per_group); + + for(j=0; j < nvals_per_group;j++){ + sec_val[vcount+j] = group_ref_val + grib_decode_unsigned_long(buf_vals, &vals_p, nbits_per_group_val); + } + + vcount += nvals_per_group; + } + + if(orderOfSpatialDifferencing){ + long bias = 0; + ref_p = 0; + + for(i=0;i < orderOfSpatialDifferencing;i++) + sec_val[i] = grib_decode_unsigned_long(buf_ref, &ref_p, numberOfOctetsExtraDescriptors*8); + + bias = grib_decode_signed_longb(buf_ref, &ref_p, numberOfOctetsExtraDescriptors*8); + + de_spatial_difference (a->parent->h->context, sec_val, n_vals, orderOfSpatialDifferencing, bias); + } + + binary_s = grib_power(binary_scale_factor,2); + decimal_s = grib_power(-decimal_scale_factor,10) ; + + for(i=0;i < n_vals;i++) + val[i] = (double) ((((double)sec_val[i])*binary_s)+reference_value)*decimal_s; + + grib_context_free(a->parent->h->context,sec_val); + return err; +} + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_g22order_packing* self = (grib_accessor_data_g22order_packing*)a; + + size_t i = 0; + size_t j = 0; + size_t n_vals = *len; + + int err = 0; + + unsigned char* buf = NULL; + unsigned char* buf_ref = NULL; + unsigned char* buf_width = NULL; + unsigned char* buf_length = NULL; + unsigned char* buf_vals = NULL; + + + double d = 0; + double divisor = 0; + + unsigned long* sec_val = NULL; + unsigned long* group_val = NULL; + + double max; + double min; + + long length_p = 0; + long ref_p = 0; + long width_p = 0; + long vals_p = 0; + + size_t nv = 0; + size_t buf_size = 0; + + long bits_per_value = 0; + + double reference_value = 0; + + long nvals_per_group = 0; + long nbits_per_group_val = 0; + long group_ref_val = 0; + + + long binary_scale_factor; + long decimal_scale_factor; + long typeOfOriginalFieldValues; + long groupSplittingMethodUsed; + long missingValueManagementUsed; + long primaryMissingValueSubstitute; + long secondaryMissingValueSubstitute; + long numberOfGroupsOfDataValues; + long referenceForGroupWidths; + long numberOfBitsUsedForTheGroupWidths; + long referenceForGroupLengths; + long lengthIncrementForTheGroupLengths; + long trueLengthOfLastGroup; + long numberOfBitsUsedForTheScaledGroupLengths; + + long maxgrw ; + long maxgrl ; + + if (*len ==0) return GRIB_NO_VALUES; + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor,&decimal_scale_factor )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->typeOfOriginalFieldValues,&typeOfOriginalFieldValues )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->groupSplittingMethodUsed,&groupSplittingMethodUsed )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->missingValueManagementUsed,&missingValueManagementUsed )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->primaryMissingValueSubstitute,&primaryMissingValueSubstitute )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->secondaryMissingValueSubstitute,&secondaryMissingValueSubstitute )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->numberOfBitsUsedForTheGroupWidths,&numberOfBitsUsedForTheGroupWidths )) != GRIB_SUCCESS) return err; + if((err = grib_get_long_internal(a->parent->h,self->numberOfBitsUsedForTheScaledGroupLengths,&numberOfBitsUsedForTheScaledGroupLengths )) != GRIB_SUCCESS) return err; + + self->dirty=1; + + referenceForGroupWidths = 0; + referenceForGroupLengths =0; + lengthIncrementForTheGroupLengths = 1; + numberOfBitsUsedForTheGroupWidths = 4; + numberOfBitsUsedForTheScaledGroupLengths = 10; + + + + /* calculation of integer array */ + sec_val = NULL; + sec_val = grib_context_malloc(a->parent->h->context,(n_vals)*sizeof(long)); + if(!sec_val) return GRIB_OUT_OF_MEMORY; + + d = grib_power(decimal_scale_factor,10) ; + + max = val[0]; + min = max; + for(i=0;i< n_vals;i++) + { + if ( val[i] > max ) + max = val[i]; + if ( val[i] < min ) + min = val[i]; + } + min *= d; + max *= d; + + if (grib_get_nearest_smaller_value(a->parent->h,self->reference_value,min,&reference_value) + !=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to find nearest_smaller_value of %g for %s",min,self->reference_value); + exit(GRIB_INTERNAL_ERROR); + } + + binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&err); + divisor = grib_power(-binary_scale_factor,2); + + + for(i=0;i< n_vals;i++) + sec_val[i] = (unsigned long)((((val[i]*d)-reference_value)*divisor)+0.5); + + numberOfGroupsOfDataValues = 0; + nv = n_vals; + group_val = sec_val; + + maxgrw = calc_pow_2(numberOfBitsUsedForTheGroupWidths); + maxgrl = calc_pow_2(numberOfBitsUsedForTheScaledGroupLengths); + + numberOfGroupsOfDataValues = 0; + nv = n_vals; + group_val = sec_val; + vals_p=0; + + while(find_next_group(group_val,nv,maxgrw,maxgrl,&nbits_per_group_val,&nvals_per_group,&group_ref_val)==GRIB_SUCCESS){ + numberOfGroupsOfDataValues++; + nv -= nvals_per_group; + group_val += nvals_per_group; + vals_p += nbits_per_group_val*nvals_per_group; + } + + trueLengthOfLastGroup = nvals_per_group; + + buf_size = (7+(numberOfGroupsOfDataValues*bits_per_value))/8; + buf_size += (7+(numberOfGroupsOfDataValues*numberOfBitsUsedForTheGroupWidths))/8; + buf_size += (7+(numberOfGroupsOfDataValues*numberOfBitsUsedForTheScaledGroupLengths))/8; + + buf_size += (vals_p/8) + (vals_p%8?1:0); + + buf = grib_context_malloc_clear(a->parent->h->context,buf_size); + + buf_ref = buf; + buf_width = buf_ref + (7+(numberOfGroupsOfDataValues*bits_per_value))/8; + buf_length = buf_width + (7+(numberOfGroupsOfDataValues*numberOfBitsUsedForTheGroupWidths))/8; + buf_vals = buf_length + (7+(numberOfGroupsOfDataValues*numberOfBitsUsedForTheScaledGroupLengths))/8; + + nv = n_vals; + group_val = sec_val; + vals_p = 0; ref_p =0;width_p=0;length_p=0; + i = 0; + + while(find_next_group(group_val,nv,maxgrw,maxgrl,&nbits_per_group_val,&nvals_per_group,&group_ref_val)==GRIB_SUCCESS){ + grib_encode_unsigned_longb(buf_ref , group_ref_val , &ref_p , bits_per_value); + grib_encode_unsigned_longb(buf_width , nbits_per_group_val , &width_p , numberOfBitsUsedForTheGroupWidths); + grib_encode_unsigned_longb(buf_length, nvals_per_group , &length_p , numberOfBitsUsedForTheScaledGroupLengths); + + if(nbits_per_group_val) + for(j = 0; j < nvals_per_group; j++){ + grib_encode_unsigned_longb(buf_vals, sec_val[i+j]-group_ref_val ,&vals_p , nbits_per_group_val); + } + i+= nvals_per_group; + group_val += nvals_per_group; + nv-=nvals_per_group; + } + + /* fprintf(stdout," %d bytes %d marked\n", (ref_p+7)/8 + (width_p+7)/8 + (length_p+7)/8 + (vals_p+7)/8,buf_size); + */ + + grib_buffer_replace(a, buf,buf_size,1,1); + grib_context_free (a->parent->h->context,buf); + grib_context_free (a->parent->h->context,sec_val); + + if((err = grib_set_long_internal(a->parent->h,self->bits_per_value,bits_per_value )) != GRIB_SUCCESS) return err; + if((err = grib_set_double_internal(a->parent->h,self->reference_value,reference_value )) != GRIB_SUCCESS) return err; + { + /* Make sure we can decode it again */ + double ref = 1e-100; + grib_get_double_internal(a->parent->h,self->reference_value,&ref); + Assert(ref == reference_value); + } + if((err = grib_set_long_internal(a->parent->h,self->binary_scale_factor,binary_scale_factor )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->decimal_scale_factor,decimal_scale_factor )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->typeOfOriginalFieldValues,typeOfOriginalFieldValues )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->groupSplittingMethodUsed,groupSplittingMethodUsed )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->missingValueManagementUsed,missingValueManagementUsed )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->primaryMissingValueSubstitute,primaryMissingValueSubstitute )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->secondaryMissingValueSubstitute,secondaryMissingValueSubstitute )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->numberOfGroupsOfDataValues,numberOfGroupsOfDataValues )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->referenceForGroupWidths,referenceForGroupWidths )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->numberOfBitsUsedForTheGroupWidths,numberOfBitsUsedForTheGroupWidths )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->referenceForGroupLengths,referenceForGroupLengths )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->lengthIncrementForTheGroupLengths,lengthIncrementForTheGroupLengths )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->trueLengthOfLastGroup,trueLengthOfLastGroup )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->numberOfBitsUsedForTheScaledGroupLengths,numberOfBitsUsedForTheScaledGroupLengths )) != GRIB_SUCCESS) return err; + + if((err = grib_set_long_internal(a->parent->h,self->orderOfSpatialDifferencing,0 )) != GRIB_SUCCESS) return err; + if((err = grib_set_long_internal(a->parent->h,self->numberOfOctetsExtraDescriptors,0 )) != GRIB_SUCCESS) return err; + + return GRIB_SUCCESS; +} + +static long value_count(grib_accessor* a){ + grib_accessor_data_g22order_packing* self = (grib_accessor_data_g22order_packing*)a; + long count = 0; + + if(grib_get_long_internal(a->parent->h,self->numberOfValues, &count) != GRIB_SUCCESS) + return 0; + return count; + +} diff --git a/src/grib_accessor_class_data_g2complex_packing.c b/src/grib_accessor_class_data_g2complex_packing.c new file mode 100644 index 000000000..4ad1bedc7 --- /dev/null +++ b/src/grib_accessor_class_data_g2complex_packing.c @@ -0,0 +1,187 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_complex_packing + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + IMPLEMENTS = init + MEMBERS=const char* numberOfValues + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g2complex_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_complex_packing */ + const char* GRIBEX_sh_bug_present; + const char* ieee_floats; + const char* laplacianOperatorIsSet; + const char* laplacianOperator; + const char* sub_j; + const char* sub_k; + const char* sub_m; + const char* pen_j; + const char* pen_k; + const char* pen_m; +/* Members defined in data_g2complex_packing */ + const char* numberOfValues; +} grib_accessor_data_g2complex_packing; + +extern grib_accessor_class* grib_accessor_class_data_complex_packing; + +static grib_accessor_class _grib_accessor_class_data_g2complex_packing = { + &grib_accessor_class_data_complex_packing, /* super */ + "data_g2complex_packing", /* name */ + sizeof(grib_accessor_data_g2complex_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g2complex_packing = &_grib_accessor_class_data_g2complex_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args){ + grib_accessor_data_g2complex_packing *self =(grib_accessor_data_g2complex_packing*)a; + self->numberOfValues = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->edition=2; + + a->flags |= GRIB_ACCESSOR_FLAG_DATA; +} + +static long value_count(grib_accessor* a) { + long numberOfValues = 0; + int ret = GRIB_SUCCESS; + grib_accessor_data_g2complex_packing* self = (grib_accessor_data_g2complex_packing*)a; + if((ret = grib_get_long(a->parent->h,self->numberOfValues,&numberOfValues)) != GRIB_SUCCESS) + return 0; + + return numberOfValues; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) { + grib_accessor_data_g2complex_packing* self = (grib_accessor_data_g2complex_packing*)a; + int ret = GRIB_SUCCESS; + grib_accessor_class* super = *(a->cclass->super); + + if (*len ==0) return GRIB_NO_VALUES; + + ret = super->pack_double(a,val,len); + + if(ret == GRIB_SUCCESS) + ret = grib_set_long_internal(a->parent->h,self->numberOfValues,*len) ; + + return ret; +} + diff --git a/src/grib_accessor_class_data_g2secondary_bitmap.c b/src/grib_accessor_class_data_g2secondary_bitmap.c new file mode 100644 index 000000000..7cf2f66b9 --- /dev/null +++ b/src/grib_accessor_class_data_g2secondary_bitmap.c @@ -0,0 +1,238 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_secondary_bitmap + IMPLEMENTS = init + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=const char* number_of_values + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g2secondary_bitmap { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in data_secondary_bitmap */ + const char* primary_bitmap; + const char* secondary_bitmap; + const char* missing_value; + const char* expand_by; +/* Members defined in data_g2secondary_bitmap */ + const char* number_of_values; +} grib_accessor_data_g2secondary_bitmap; + +extern grib_accessor_class* grib_accessor_class_data_secondary_bitmap; + +static grib_accessor_class _grib_accessor_class_data_g2secondary_bitmap = { + &grib_accessor_class_data_secondary_bitmap, /* super */ + "data_g2secondary_bitmap", /* name */ + sizeof(grib_accessor_data_g2secondary_bitmap), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g2secondary_bitmap = &_grib_accessor_class_data_g2secondary_bitmap; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g2secondary_bitmap *self =(grib_accessor_data_g2secondary_bitmap*)a; + self->number_of_values = grib_arguments_get_name(a->parent->h,args,4); +} + + + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_g2secondary_bitmap *self =(grib_accessor_data_g2secondary_bitmap*)a; + int err = 0; + long len; + + if((err = grib_get_long_internal(a->parent->h,self->number_of_values,&len)) != GRIB_SUCCESS) + return 0; + +return len; +} + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_g2secondary_bitmap* self = (grib_accessor_data_g2secondary_bitmap*)a; + + int err = 0; + + long primary_len = 0; + long secondary_len = 0; + double* primary_bitmap = NULL; + double* secondary_bitmap = NULL; + long i = 0; + long j = 0; + long on = 0; + long k; + long m; + double missing_value = 0; + double present_value = 0; + long expand_by =0; + + if (*len ==0) return GRIB_NO_VALUES; + + if((err = grib_get_long(a->parent->h,self->expand_by,&expand_by)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_double_internal(a->parent->h,self->missing_value,&missing_value)) != GRIB_SUCCESS) + return err; + + Assert(expand_by); + + if(*len % expand_by) + { + /*TODO: issue warning */ + return GRIB_ENCODING_ERROR; + } + + primary_len = *len / expand_by; + primary_bitmap= grib_context_malloc_clear(a->parent->h->context,primary_len*sizeof(double)); + if(!primary_bitmap) return GRIB_OUT_OF_MEMORY; + + secondary_len = *len ; + secondary_bitmap= grib_context_malloc_clear(a->parent->h->context,secondary_len*sizeof(double)); + if(!secondary_bitmap) { + grib_context_free(a->parent->h->context,primary_bitmap); + return GRIB_OUT_OF_MEMORY; + } + + if(missing_value == 0) + present_value = 1; + else + present_value = 0; + + k = 0; + m = 0; + for(i=0; i<*len ; i += expand_by) + { + int cnt = 0; + for(j = 0; j < expand_by; j++) + if(val[i+j] == missing_value) + cnt++; + + if(cnt == expand_by) /* all expand_by values are missing */ + primary_bitmap[k++] = missing_value; + else { + primary_bitmap[k++] = present_value; + for(j = 0; j < expand_by; j++) + secondary_bitmap[m++] = val[i+j]; + on++; + } + } + + *len = k; + + Assert(k == primary_len); + + err = grib_set_double_array_internal(a->parent->h,self->primary_bitmap,primary_bitmap,k); + if(err == GRIB_SUCCESS) + err = grib_set_double_array_internal(a->parent->h,self->secondary_bitmap,secondary_bitmap,m); + + grib_context_free(a->parent->h->context,primary_bitmap); + grib_context_free(a->parent->h->context,secondary_bitmap); + + if(err == GRIB_SUCCESS) + err = grib_set_long_internal(a->parent->h,self->number_of_values,*len * expand_by); + + return err; +} diff --git a/src/grib_accessor_class_data_g2shsimple_packing.c b/src/grib_accessor_class_data_g2shsimple_packing.c new file mode 100644 index 000000000..1e1a8ef26 --- /dev/null +++ b/src/grib_accessor_class_data_g2shsimple_packing.c @@ -0,0 +1,218 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_shsimple_packing + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=const char* numberOfValues + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g2shsimple_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in data_shsimple_packing */ + const char* coded_values; + const char* real_part; + int dirty; +/* Members defined in data_g2shsimple_packing */ + const char* numberOfValues; +} grib_accessor_data_g2shsimple_packing; + +extern grib_accessor_class* grib_accessor_class_data_shsimple_packing; + +static grib_accessor_class _grib_accessor_class_data_g2shsimple_packing = { + &grib_accessor_class_data_shsimple_packing, /* super */ + "data_g2shsimple_packing", /* name */ + sizeof(grib_accessor_data_g2shsimple_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g2shsimple_packing = &_grib_accessor_class_data_g2shsimple_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g2shsimple_packing *self =(grib_accessor_data_g2shsimple_packing*)a; + + self->numberOfValues = grib_arguments_get_name(a->parent->h,args,2); + a->flags |= GRIB_ACCESSOR_FLAG_DATA; +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_g2shsimple_packing *self =(grib_accessor_data_g2shsimple_packing*)a; + long len = 0; + int ret = grib_get_long(a->parent->h,self->numberOfValues,&len); + + if( ret == GRIB_SUCCESS) + return len; + return 0; +} + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_g2shsimple_packing* self = (grib_accessor_data_g2shsimple_packing*)a; + int err = GRIB_SUCCESS; + + size_t n_vals = 0; + + if((err = grib_get_size(a->parent->h,self->coded_values,&n_vals)) != GRIB_SUCCESS) + return err; + + self->dirty=0; + + /* n_vals = coded_n_vals+1; */ + + if(*len < n_vals) + { + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if((err = grib_get_double_internal(a->parent->h,self->real_part,val)) != GRIB_SUCCESS) + return err; + + val++; + + if((err = grib_get_double_array_internal(a->parent->h,self->coded_values,val,&n_vals)) != GRIB_SUCCESS) + return err; + + *len = n_vals; + + return err; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_g2shsimple_packing* self = (grib_accessor_data_g2shsimple_packing*)a; + int err = GRIB_SUCCESS; + + size_t coded_n_vals = *len-1; + size_t n_vals = *len; + + if (*len ==0) return GRIB_NO_VALUES; + + self->dirty=1; + + if((err = grib_set_double_internal(a->parent->h,self->real_part,*val)) != GRIB_SUCCESS) + return err; + { + /* Make sure we can decode it again */ + double ref = 1e-100; + grib_get_double_internal(a->parent->h,self->real_part,&ref); + Assert(ref == *val); + } + + val++; + + if((err = grib_set_double_array_internal(a->parent->h,self->coded_values,val,coded_n_vals)) != GRIB_SUCCESS) + return err; + + *len = n_vals; + + if((err = grib_set_long_internal(a->parent->h,self->numberOfValues,(long)n_vals)) != GRIB_SUCCESS) + return err; + + return err; +} + diff --git a/src/grib_accessor_class_data_g2simple_packing.c b/src/grib_accessor_class_data_g2simple_packing.c new file mode 100644 index 000000000..84d556a24 --- /dev/null +++ b/src/grib_accessor_class_data_g2simple_packing.c @@ -0,0 +1,263 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_simple_packing + IMPLEMENTS = init + IMPLEMENTS = pack_double + IMPLEMENTS = pack_bytes + IMPLEMENTS = value_count + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_bytes(grib_accessor*,const unsigned char*, size_t *len); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g2simple_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_g2simple_packing */ +} grib_accessor_data_g2simple_packing; + +extern grib_accessor_class* grib_accessor_class_data_simple_packing; + +static grib_accessor_class _grib_accessor_class_data_g2simple_packing = { + &grib_accessor_class_data_simple_packing, /* super */ + "data_g2simple_packing", /* name */ + sizeof(grib_accessor_data_g2simple_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + &pack_bytes, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g2simple_packing = &_grib_accessor_class_data_g2simple_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g2simple_packing *self =(grib_accessor_data_g2simple_packing*)a; + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + self->edition=2; +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_g2simple_packing *self =(grib_accessor_data_g2simple_packing*)a; + long n_vals= 0; + if(grib_get_long_internal(a->parent->h,self->number_of_values,&n_vals) != GRIB_SUCCESS) + return 0; + return n_vals; +} + + + +static int pack_double(grib_accessor* a, const double* cval, size_t *len) +{ + grib_accessor_data_g2simple_packing* self = (grib_accessor_data_g2simple_packing*)a; + grib_accessor_class* super = *(a->cclass->super); + size_t n_vals = *len; + double reference_value = 0; + long binary_scale_factor = 0; + long bits_per_value = 0; + long decimal_scale_factor = 0; + double decimal = 1; + size_t buflen = 0; + unsigned char* buf = NULL; + unsigned char* encoded = NULL; + double divisor = 1; + long off = 0; + int ret =0; + double units_factor=1.0; + double units_bias=0.0; + double* val=(double*)cval; + int i; + + if(*len == 0) { + grib_buffer_replace(a, NULL, 0,1,1); + return GRIB_SUCCESS; + } + + if(ret == GRIB_SUCCESS) + ret = grib_set_long_internal(a->parent->h,self->number_of_values, *len); + + if (ret!=GRIB_SUCCESS) return ret; + + if(self->units_factor && + (grib_get_double_internal(a->parent->h,self->units_factor,&units_factor)== GRIB_SUCCESS)) { + grib_set_double_internal(a->parent->h,self->units_factor,1.0); + } + + if(self->units_bias && + (grib_get_double_internal(a->parent->h,self->units_bias,&units_bias)== GRIB_SUCCESS)) { + grib_set_double_internal(a->parent->h,self->units_bias,0.0); + } + + if (units_factor != 1.0) { + if (units_bias != 0.0) + for (i=0;ipack_double(a,val,len); + switch (ret) { + case GRIB_CONSTANT_FIELD: + grib_buffer_replace(a, NULL, 0,1,1); + return GRIB_SUCCESS; + case GRIB_SUCCESS: + break; + default: + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"unable to compute packing parameters\n"); + return ret; + } + + if((ret = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != + GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) + != GRIB_SUCCESS) + return ret; + + decimal = grib_power(decimal_scale_factor,10) ; + divisor = grib_power(-binary_scale_factor,2); + + buflen = (((bits_per_value*n_vals)+7)/8)*sizeof(unsigned char); + buf = grib_context_buffer_malloc_clear(a->parent->h->context,buflen); + encoded = buf; + + grib_encode_double_array(n_vals,val,bits_per_value,reference_value,decimal,divisor,encoded,&off); + + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "grib_accessor_data_g2simple_packing : pack_double : packing %s, %d values", a->name, n_vals); + + grib_buffer_replace(a, buf, buflen,1,1); + + grib_context_buffer_free(a->parent->h->context,buf); + + return ret; +} + +static int pack_bytes(grib_accessor* a, const unsigned char* val, size_t *len) +{ + size_t length = *len; + grib_buffer_replace(a, val, length,1,1); + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_data_g2simple_packing_with_preprocessing.c b/src/grib_accessor_class_data_g2simple_packing_with_preprocessing.c new file mode 100644 index 000000000..c581e5212 --- /dev/null +++ b/src/grib_accessor_class_data_g2simple_packing_with_preprocessing.c @@ -0,0 +1,302 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*********************************** + * Enrico Fucile + **********************************/ + +#include "grib_api_internal.h" +#define DIRECT 0 +#define INVERSE 1 + + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_g2simple_packing + IMPLEMENTS = init + IMPLEMENTS = pack_double + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + MEMBERS=const char* pre_processing + MEMBERS=const char* pre_processing_parameter + END_CLASS_DEF + + */ + +static int pre_processing_func(double* values,long length, long pre_processing, + double *pre_processing_parameter,int mode); + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_g2simple_packing_with_preprocessing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_g2simple_packing */ +/* Members defined in data_g2simple_packing_with_preprocessing */ + const char* pre_processing; + const char* pre_processing_parameter; +} grib_accessor_data_g2simple_packing_with_preprocessing; + +extern grib_accessor_class* grib_accessor_class_data_g2simple_packing; + +static grib_accessor_class _grib_accessor_class_data_g2simple_packing_with_preprocessing = { + &grib_accessor_class_data_g2simple_packing, /* super */ + "data_g2simple_packing_with_preprocessing", /* name */ + sizeof(grib_accessor_data_g2simple_packing_with_preprocessing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_g2simple_packing_with_preprocessing = &_grib_accessor_class_data_g2simple_packing_with_preprocessing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_g2simple_packing_with_preprocessing *self =(grib_accessor_data_g2simple_packing_with_preprocessing*)a; + self->pre_processing = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pre_processing_parameter = grib_arguments_get_name(a->parent->h,args,self->carg++); + a->flags |= GRIB_ACCESSOR_FLAG_DATA; +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_g2simple_packing_with_preprocessing *self =(grib_accessor_data_g2simple_packing_with_preprocessing*)a; + long n_vals= 0; + + if(grib_get_long_internal(a->parent->h,self->number_of_values,&n_vals) != GRIB_SUCCESS) + return 0; + return n_vals; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_g2simple_packing_with_preprocessing* self = (grib_accessor_data_g2simple_packing_with_preprocessing*)a; + grib_accessor_class* super = *(a->cclass->super); + + size_t n_vals = grib_value_count(a); + int err = 0; + + long pre_processing; + double pre_processing_parameter; + + if(n_vals==0){ + *len = 0; + return GRIB_SUCCESS; + } + + self->dirty=0; + + + if((err = grib_get_long_internal(a->parent->h,self->pre_processing, &pre_processing)) != GRIB_SUCCESS){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->pre_processing, err); + return err; + } + + if((err = grib_get_double_internal(a->parent->h,self->pre_processing_parameter, &pre_processing_parameter)) != GRIB_SUCCESS){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->pre_processing_parameter, err); + return err; + } + + err = super->unpack_double(a,val,&n_vals); + if (err!=GRIB_SUCCESS) return err; + + err=pre_processing_func(val,n_vals,pre_processing,&pre_processing_parameter,INVERSE); + if (err != GRIB_SUCCESS) return err; + + *len = (long) n_vals; + + return err; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_g2simple_packing_with_preprocessing* self = (grib_accessor_data_g2simple_packing_with_preprocessing*)a; + grib_accessor_class* super = *(a->cclass->super); + + size_t n_vals = *len; + int err = 0; + + long pre_processing=0; + double pre_processing_parameter=0; + + self->dirty=1; + + if((err = grib_get_long_internal(a->parent->h,self->pre_processing, &pre_processing)) != GRIB_SUCCESS) + return err; + + err=pre_processing_func((double*)val,n_vals,pre_processing,&pre_processing_parameter,DIRECT); + if (err != GRIB_SUCCESS) return err; + + err = super->pack_double(a,val,len); + if (err!=GRIB_SUCCESS) return err; + + if((err = grib_set_double_internal(a->parent->h,self->pre_processing_parameter, pre_processing_parameter)) != GRIB_SUCCESS) + return err; + + + if((err = grib_set_long_internal(a->parent->h,self->number_of_values, n_vals)) != GRIB_SUCCESS) + return err; + + + return GRIB_SUCCESS; + +} + + +static int pre_processing_func(double* values,long length, long pre_processing, + double *pre_processing_parameter,int mode) { + int i; + int ret=0; + double min=values[0]; + double next_min=values[0]; + + switch (pre_processing) { + /* NONE */ + case 0: + break; + /* LOGARITHM */ + case 1: + if (mode == DIRECT) { + for (i=0;i next_min) + next_min=values[i]; + } + for (i=0;i min && values[i] < next_min ) + next_min=values[i]; + } + if ( min > 0 ) { + *pre_processing_parameter=0; + for (i=0;idump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static int first = 1; + +#define JASPER_LIB 1 +#define OPENJPEG_LIB 2 + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + const char * user_lib=NULL; + grib_accessor_data_jpeg2000_packing *self =(grib_accessor_data_jpeg2000_packing*)a; + + self->type_of_compression_used = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->target_compression_ratio = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->ni = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->nj = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->list_defining_points = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->number_of_data_points = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->scanning_mode = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->edition=2; + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + +#if HAVE_LIBJASPER + self->jpeg_lib=JASPER_LIB; +#elif HAVE_LIBOPENJPEG + self->jpeg_lib=OPENJPEG_LIB; +#endif + + if ((user_lib=getenv("GRIB_JPEG"))!=NULL ) { + if (!strcmp(user_lib,"jasper")) { + self->jpeg_lib=JASPER_LIB; + } else if (!strcmp(user_lib,"openjpeg")) { + self->jpeg_lib=OPENJPEG_LIB; + } + } + + self->dump_jpg = getenv("GRIB_DUMP_JPG_FILE"); + + if(first) { + if(self->dump_jpg) + printf("GRIB JPEG dumping to %s\n",self->dump_jpg); + first = 0; + } + +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_jpeg2000_packing *self =(grib_accessor_data_jpeg2000_packing*)a; + long n_vals= 0; + + if(grib_get_long_internal(a->parent->h,self->number_of_values,&n_vals) != GRIB_SUCCESS) + return 0; + + return n_vals; +} + +#define EXTRA_BUFFER_SIZE 10240 + +#ifdef HAVE_JPEG +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_jpeg2000_packing *self =(grib_accessor_data_jpeg2000_packing*)a; + + int err = GRIB_SUCCESS; + int i; + size_t buflen = grib_byte_count(a); + + double bscale = 0; + double dscale = 0; + unsigned char* buf = NULL; + size_t n_vals = 0; + + long binary_scale_factor = 0; + long decimal_scale_factor = 0; + double reference_value = 0; + long bits_per_value =0; + double units_factor=1.0; + double units_bias=0.0; + + n_vals = grib_value_count(a); + + if(self->units_factor) + grib_get_double_internal(a->parent->h,self->units_factor,&units_factor); + + if(self->units_bias) + grib_get_double_internal(a->parent->h,self->units_bias,&units_bias); + + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS) + return err; + if((err = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + return err; + + self->dirty=0; + + bscale = grib_power(binary_scale_factor,2); + dscale = grib_power(-decimal_scale_factor,10); + + /* TODO: This should be called upstream */ + if(*len < n_vals) + return GRIB_ARRAY_TOO_SMALL; + + /* Special case */ + + if(bits_per_value == 0) + { + for(i = 0; i < n_vals; i++) + val[i] = reference_value; + *len = n_vals; + return GRIB_SUCCESS; + } + + buf = (unsigned char*)a->parent->h->buffer->data; + buf += grib_byte_offset(a); + + switch (self->jpeg_lib) { + case OPENJPEG_LIB: + if ((err = grib_openjpeg_decode(a->parent->h->context,buf,&buflen,val,&n_vals)) != GRIB_SUCCESS) + return err; + break; + case JASPER_LIB: + if ((err = grib_jasper_decode(a->parent->h->context,buf,&buflen,val,&n_vals)) != GRIB_SUCCESS) + return err; + break; + } + + *len = n_vals; + + for (i = 0; i < n_vals; i++) { + val[i] = (val[i] * bscale + reference_value) * dscale; + } + if (units_factor != 1.0) { + if (units_bias != 0.0) + for (i=0;icclass->super); + size_t n_vals = *len; + int err = 0; + int i; + double reference_value = 0; + long binary_scale_factor = 0; + long bits_per_value = 0; + long decimal_scale_factor = 0; + double decimal = 1; + size_t simple_packing_size = 0; + unsigned char* buf = NULL; + double divisor = 1; + long width; + long height; + long ni; + long nj; + long target_compression_ratio; + long type_of_compression_used; + long scanning_mode; + long list_defining_points; + long number_of_data_points; + int ret =0; + j2k_encode_helper helper; + double units_factor=1.0; + double units_bias=0.0; + double* val=(double*)cval; + + self->dirty=1; + + if(*len == 0){ + grib_buffer_replace(a, NULL, 0, 1, 1); + return GRIB_SUCCESS; + } + + if(self->units_factor && + (grib_get_double_internal(a->parent->h,self->units_factor,&units_factor)== GRIB_SUCCESS)) { + grib_set_double_internal(a->parent->h,self->units_factor,1.0); + } + + if(self->units_bias && + (grib_get_double_internal(a->parent->h,self->units_bias,&units_bias)== GRIB_SUCCESS)) { + grib_set_double_internal(a->parent->h,self->units_bias,0.0); + } + + if (units_factor != 1.0) { + if (units_bias != 0.0) + for (i=0;ipack_double(a,val,len); + switch (ret) { + case GRIB_CONSTANT_FIELD: + grib_buffer_replace(a, NULL, 0,1,1); + return GRIB_SUCCESS; + break; + case GRIB_SUCCESS: + break; + default: + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"unable to compute packing parameters\n"); + return ret; + } + + if((ret = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != + GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) + != GRIB_SUCCESS) + return ret; + + decimal = grib_power(decimal_scale_factor,10) ; + divisor = grib_power(-binary_scale_factor,2); + + simple_packing_size = (((bits_per_value*n_vals)+7)/8)*sizeof(unsigned char); + buf = grib_context_malloc_clear(a->parent->h->context,simple_packing_size+EXTRA_BUFFER_SIZE); + if(!buf) { + err = GRIB_OUT_OF_MEMORY; + goto cleanup; + } + + if((err = grib_get_long_internal(a->parent->h,self->ni,&ni)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->nj,&nj)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->type_of_compression_used,&type_of_compression_used)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->target_compression_ratio,&target_compression_ratio)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->scanning_mode,&scanning_mode)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->list_defining_points,&list_defining_points)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->number_of_data_points,&number_of_data_points)) != GRIB_SUCCESS) + return err; + + width = ni; + height = nj; + + if((scanning_mode & (1<<5)) != 0) + { + long tmp = width; + width = height; + height = tmp; + } + + /* The grid is not regular */ + if(list_defining_points != 0) + { + width = *len; + height = 1; + } + + /* There is a bitmap */ + if(*len != number_of_data_points) + { + width = *len; + height = 1; + } + + if(width*height != *len) + { + /* fprintf(stderr,"width=%ld height=%ld len=%d\n",(long)width,(long)height,(long)*len); */ + Assert(width*height == *len); + } + + switch( type_of_compression_used) + { + case 0: + Assert(target_compression_ratio == 255); + helper.compression = 0; + break; + + case 1: + Assert(target_compression_ratio != 255); + Assert(target_compression_ratio != 0); + helper.compression = target_compression_ratio; + break; + + default: + err = GRIB_NOT_IMPLEMENTED; + goto cleanup; + } + + helper.jpeg_buffer = buf; + helper.width = width; + helper.height = height; + helper.bits_per_value = bits_per_value; + + helper.buffer_size = simple_packing_size + EXTRA_BUFFER_SIZE; + helper.values = val; + helper.no_values = n_vals; + helper.reference_value = reference_value; + helper.divisor = divisor; + helper.decimal = decimal; + helper.jpeg_length = 0; + + switch (self->jpeg_lib) { + case OPENJPEG_LIB: + if ( (err = grib_openjpeg_encode(a->parent->h->context,&helper)) != GRIB_SUCCESS ) goto cleanup; + break; + case JASPER_LIB: + if ( (err = grib_jasper_encode(a->parent->h->context,&helper)) != GRIB_SUCCESS ) goto cleanup; + break; + } + + if(helper.jpeg_length > simple_packing_size) + grib_context_log(a->parent->h->context, GRIB_LOG_WARNING, + "grib_accessor_data_jpeg2000_packing(%s) : jpeg data (%ld) larger than input data (%ld)", + self->jpeg_lib==OPENJPEG_LIB ? "openjpeg" : "jasper", + helper.jpeg_length, simple_packing_size); + + Assert( helper.jpeg_length <= helper.buffer_size); + + if(self->dump_jpg) { + FILE *f = fopen(self->dump_jpg,"w"); + if(f) { + if(fwrite(helper.jpeg_buffer,helper.jpeg_length,1,f) != 1) + perror(self->dump_jpg); + if (fclose(f) != 0) + perror(self->dump_jpg); + } + else perror(self->dump_jpg); + } + + grib_buffer_replace(a, helper.jpeg_buffer, helper.jpeg_length, 1, 1); + +cleanup: + + grib_context_free(a->parent->h->context,buf); + + if(err == GRIB_SUCCESS) + err = grib_set_long_internal(a->parent->h,self->number_of_values, *len); + return err; + +} +#else + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "jpeg support not enabled. Please rerun configure with the --with-jasper or --with-openjpeg option."); + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "jpeg support not enabled. Please rerun configure with the --with-jasper or --with-openjpeg option."); + return GRIB_NOT_IMPLEMENTED; +} + +#endif + +static int unpack_double_element(grib_accessor* a, size_t idx, double* val) +{ + size_t size; + double* values; + int err=0; + + err=grib_get_size(a->parent->h,"values",&size); + if (err) return err; + if (idx > size) return GRIB_INVALID_NEAREST; + + values=grib_context_malloc_clear(a->parent->h->context,size*sizeof(double)); + err=grib_get_double_array(a->parent->h,"values",values,&size); + if (err) return err; + *val=values[idx]; + grib_context_free(a->parent->h->context,values); + return err; +} diff --git a/src/grib_accessor_class_data_png_packing.c b/src/grib_accessor_class_data_png_packing.c new file mode 100644 index 000000000..75659d9f5 --- /dev/null +++ b/src/grib_accessor_class_data_png_packing.c @@ -0,0 +1,679 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#define PNG_ANYBITS + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_values + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=const char* number_of_values + MEMBERS=const char* reference_value + MEMBERS=const char* binary_scale_factor + MEMBERS=const char* decimal_scale_factor + MEMBERS=const char* bits_per_value + MEMBERS=const char* ni + MEMBERS=const char* nj + MEMBERS=const char* list_defining_points + MEMBERS=const char* number_of_data_points + MEMBERS=const char* scanning_mode + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_png_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_png_packing */ + const char* number_of_values; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; + const char* bits_per_value; + const char* ni; + const char* nj; + const char* list_defining_points; + const char* number_of_data_points; + const char* scanning_mode; +} grib_accessor_data_png_packing; + +extern grib_accessor_class* grib_accessor_class_values; + +static grib_accessor_class _grib_accessor_class_data_png_packing = { + &grib_accessor_class_values, /* super */ + "data_png_packing", /* name */ + sizeof(grib_accessor_data_png_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_png_packing = &_grib_accessor_class_data_png_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_png_packing *self =(grib_accessor_data_png_packing*)a; + + self->number_of_values = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->reference_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->binary_scale_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->decimal_scale_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->bits_per_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->ni = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->nj = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->list_defining_points = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->number_of_data_points = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->scanning_mode = grib_arguments_get_name(a->parent->h,args,self->carg++); + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_png_packing *self =(grib_accessor_data_png_packing*)a; + long n_vals= 0; + if(grib_get_long_internal(a->parent->h,self->number_of_values,&n_vals) != GRIB_SUCCESS) + return 0; + + return n_vals; +} + +#if HAVE_LIBPNG + +#include "png.h" + +typedef struct png_read_callback_data { + unsigned char* buffer; + size_t length; + size_t offset; +} png_read_callback_data; + +static void png_read_callback(png_structp png,png_bytep data, png_size_t length) +{ + png_read_callback_data* p = (png_read_callback_data*)png_get_io_ptr(png); + Assert(p->offset + length <= p->length); + memcpy(data,p->buffer+p->offset,length); + p->offset += length; +} + +static void png_write_callback(png_structp png,png_bytep data, png_size_t length) +{ + png_read_callback_data* p = (png_read_callback_data*)png_get_io_ptr(png); + Assert(p->offset + length <= p->length); + memcpy(p->buffer+p->offset,data,length); + p->offset += length; +} + +static void png_flush_callback(png_structp png) +{ + /* Empty */ +} + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_png_packing *self =(grib_accessor_data_png_packing*)a; + + int err = GRIB_SUCCESS; + int i,j; + size_t buflen = grib_byte_count(a); + + double bscale = 0; + double dscale = 0; + unsigned char* buf = NULL; + size_t n_vals = 0; + + long binary_scale_factor = 0; + long decimal_scale_factor = 0; + double reference_value = 0; + long bits_per_value =0; + long bits8; + + png_structp png = 0; + png_infop info = 0,end = 0; + png_bytepp rows = 0; + int interlace = 0,colour = 0,compression = 0,filter = 0,depth = 0; + + png_uint_32 width = 0,height = 0; + + png_read_callback_data callback_data; + + self->dirty=0; + + n_vals = grib_value_count(a); + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS) + return err; + if((err = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + return err; + + bscale = grib_power(binary_scale_factor,2); + dscale = grib_power(-decimal_scale_factor,10); + + /* TODO: This should be called upstream */ + if(*len < n_vals) + return GRIB_ARRAY_TOO_SMALL; + + /* Special case */ + + if(bits_per_value == 0) + { + for(i = 0; i < n_vals; i++) + val[i] = reference_value; + *len = n_vals; + return GRIB_SUCCESS; + } + + buf = (unsigned char*)a->parent->h->buffer->data; + buf += grib_byte_offset(a); + + + if ( png_sig_cmp(buf,0,8) != 0) + return GRIB_INVALID_MESSAGE; + + + png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, + NULL, NULL); + if (!png) + { + err = GRIB_DECODING_ERROR; + goto cleanup; + } + + info = png_create_info_struct(png); + if (!info) + { + err = GRIB_DECODING_ERROR; + goto cleanup; + } + + end = png_create_info_struct(png); + if (!end) + { + err = GRIB_DECODING_ERROR; + goto cleanup; + } + + if (setjmp(png_jmpbuf(png))) + { + err = GRIB_DECODING_ERROR; + goto cleanup; + } + + callback_data.buffer = buf; + callback_data.offset = 0; + callback_data.length = buflen; + + /* printf("buflen=%d\n",buflen); */ + + png_set_read_fn(png,&callback_data,png_read_callback); + png_read_png(png, info, PNG_TRANSFORM_IDENTITY, NULL); + + Assert(callback_data.offset == callback_data.length); + + + rows = png_get_rows(png, info); + + png_get_IHDR(png, info, + &width, &height, + &depth, &colour, + &interlace, + &compression, + &filter); + + + if (colour == PNG_COLOR_TYPE_RGB) depth=24; + if (colour == PNG_COLOR_TYPE_RGB_ALPHA) depth=32; + bits8 = ((bits_per_value+7)/8)*8; + +#ifdef PNG_ANYBITS + Assert(depth == bits8); +#else + Assert( bits_per_value % 8 == 0 ); +#endif + + i = 0; + + /* printf("bscale=%g dscale=%g reference_value=%g\n",bscale,dscale,reference_value); */ + + for(j=0; jdirty=1; + + n_vals = grib_value_count(a); + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS) + return err; + if((err = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + return err; + + /* Special case */ + + if(*len == 0) { + grib_buffer_replace(a, NULL, 0,1,1); + return GRIB_SUCCESS; + } + + if(bits_per_value == 0) + { + int i; + /* constant field */ + for(i = 1 ; i < n_vals; i++) + Assert(val[i] == val[0]); + + if((err = grib_set_double_internal(a->parent->h,self->reference_value, val[0])) != GRIB_SUCCESS) + return err; + { + /* Make sure we can decode it again */ + double ref = 1e-100; + grib_get_double_internal(a->parent->h,self->reference_value,&ref); + printf("%g %g %g\n",reference_value,ref,reference_value-ref); + Assert(ref == reference_value); + } + + if((err = grib_set_long_internal(a->parent->h,self->number_of_values, n_vals)) != GRIB_SUCCESS) + return err; + + grib_buffer_replace(a, NULL, 0,1,1); + + return GRIB_SUCCESS; + } + + if((err = grib_get_long_internal(a->parent->h,self->ni,&ni)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->nj,&nj)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->scanning_mode,&scanning_mode)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->list_defining_points,&list_defining_points)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->number_of_data_points,&number_of_data_points)) != GRIB_SUCCESS) + return err; + + width = ni; + height = nj; + + if((scanning_mode & (1<<5)) != 0) + { + long tmp = width; + width = height; + height = tmp; + } + + /* The grid is not regular */ + if(list_defining_points != 0) + { + width = *len; + height = 1; + } + + /* There is a bitmap */ + if(*len != number_of_data_points) + { + width = *len; + height = 1; + } + + + if(width*height != *len) + { + fprintf(stderr,"width=%ld height=%ld len=%ld\n", (long)width, (long)height, (long)(*len) ); + Assert(width*height == *len); + } + + + d = grib_power(decimal_scale_factor,10) ; + + + max = val[0]; + min = max; + for(i=1;i< n_vals;i++) + { + if (val[i] > max ) + max = val[i]; + if (val[i] < min ) + min = val[i]; + } + min *= d; + max *= d; + + if (grib_get_nearest_smaller_value(a->parent->h,self->reference_value,min,&reference_value) + !=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to find nearest_smaller_value of %g for %s",min,self->reference_value); + exit(GRIB_INTERNAL_ERROR); + } + + if(reference_value > min) + { + fprintf(stderr,"reference_value=%g min_value=%g diff=%g\n",reference_value,min,reference_value-min); + Assert(reference_value <= min); + } + + binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&err); + divisor = grib_power(-binary_scale_factor,2); + +#ifndef PNG_ANYBITS + Assert(bits_per_value % 8 == 0); +#endif + bits8 = (bits_per_value+7)/8*8; + encoded = grib_context_buffer_malloc_clear(a->parent->h->context,bits8/8*n_vals); + + if(!encoded) { + err = GRIB_OUT_OF_MEMORY; + goto cleanup; + } + + buflen = 0; + p = encoded; + for(i=0;i< n_vals;i++){ + long blen = bits8; + unsigned long unsigned_val = (unsigned long)((((val[i]*d)-(reference_value))*divisor)+0.5); + while(blen >= 8) + { + blen -= 8; + *p = (unsigned_val >> blen); + p++; + buflen++; + } + } + /* buflen = n_vals*(bits_per_value/8);*/ + + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "grib_accessor_data_png_packing : pack_double : packing %s, %d values", a->name, n_vals); + buf = grib_context_buffer_malloc_clear(a->parent->h->context,buflen); + + if(!buf) { + err = GRIB_OUT_OF_MEMORY; + goto cleanup; + } + + + if((err = grib_set_double_internal(a->parent->h,self->reference_value, reference_value)) != GRIB_SUCCESS) + return err; + { + /* Make sure we can decode it again */ + double ref = 1e-100; + grib_get_double_internal(a->parent->h,self->reference_value,&ref); + Assert(ref == reference_value); + } + if((err = grib_set_long_internal(a->parent->h,self->binary_scale_factor, binary_scale_factor)) != GRIB_SUCCESS) + return err; + if((err = grib_set_long_internal(a->parent->h,self->decimal_scale_factor, decimal_scale_factor)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->ni,&ni)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->nj,&nj)) != GRIB_SUCCESS) + return err; + + png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png) + { + err = GRIB_DECODING_ERROR; + goto cleanup; + } + + info = png_create_info_struct(png); + if (!info) + { + err = GRIB_DECODING_ERROR; + goto cleanup; + } + + if (setjmp(png_jmpbuf(png))) + { + err = GRIB_DECODING_ERROR; + goto cleanup; + } + + + callback_data.buffer = buf; + callback_data.offset = 0; + callback_data.length = buflen; + + /* printf("buflen=%d\n",buflen); */ + + + png_set_write_fn(png,&callback_data,png_write_callback,png_flush_callback); + + depth = bits8; + + colour = PNG_COLOR_TYPE_GRAY; + if (bits8 == 24) + { + depth=8; + colour=PNG_COLOR_TYPE_RGB; + } + + if(bits8 == 32 ) + { + depth=8; + colour=PNG_COLOR_TYPE_RGB_ALPHA; + } + + png_set_IHDR(png, info, width, height, + depth, colour, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + + + /*bytes=bit_depth/8;*/ + bytes = bits8/8; + + rows = grib_context_buffer_malloc_clear(a->parent->h->context,sizeof(png_bytep)*height); + + rows = malloc(height*sizeof(png_bytep)); + for (j=0;jparent->h->context,buf); + grib_context_buffer_free(a->parent->h->context,encoded); + grib_context_buffer_free(a->parent->h->context,rows); + + if(err == GRIB_SUCCESS) + err = grib_set_long_internal(a->parent->h,self->number_of_values, *len); + + return err; +} +#else + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "grib_accessor_data_png_packing : png support no enabled. Please rerun configure with --with-png-support"); + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "grib_accessor_data_png_packing : png support no enabled. Please rerun configure with --with-png-support"); + return GRIB_NOT_IMPLEMENTED; +} + +#endif diff --git a/src/grib_accessor_class_data_raw_packing.c b/src/grib_accessor_class_data_raw_packing.c new file mode 100644 index 000000000..56af80c1b --- /dev/null +++ b/src/grib_accessor_class_data_raw_packing.c @@ -0,0 +1,326 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +/***************************** + * Enrico Fucile + ****************************/ + +#include "grib_api_internal.h" + +#define PRE_PROCESSING_NONE 0 +#define PRE_PROCESSING_DIFFERENCE 1 +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_values + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = unpack_double_element + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=const char* number_of_values + MEMBERS=const char* precision + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int unpack_double_element(grib_accessor*,size_t i, double* val); + +typedef struct grib_accessor_data_raw_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_raw_packing */ + const char* number_of_values; + const char* precision; +} grib_accessor_data_raw_packing; + +extern grib_accessor_class* grib_accessor_class_values; + +static grib_accessor_class _grib_accessor_class_data_raw_packing = { + &grib_accessor_class_values, /* super */ + "data_raw_packing", /* name */ + sizeof(grib_accessor_data_raw_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + &unpack_double_element, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_raw_packing = &_grib_accessor_class_data_raw_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_raw_packing *self =(grib_accessor_data_raw_packing*)a; + + self->number_of_values = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->precision = grib_arguments_get_name(a->parent->h,args,self->carg++); + a->flags |= GRIB_ACCESSOR_FLAG_DATA; +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_raw_packing *self =(grib_accessor_data_raw_packing*)a; + long n_vals= 0; + if(grib_get_long_internal(a->parent->h,self->number_of_values,&n_vals) != GRIB_SUCCESS) + return 0; + + return n_vals; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_raw_packing *self =(grib_accessor_data_raw_packing*)a; + unsigned char* buf = NULL; + int bytes = 0; + size_t nvals = 0; + long inlen = grib_byte_count(a); + + long precision = 0; + + int code = GRIB_SUCCESS; + + if((code = grib_get_long_internal(a->parent->h,self->precision,&precision)) + != GRIB_SUCCESS) + return code; + + self->dirty=0; + + buf = (unsigned char*)a->parent->h->buffer->data; + buf += grib_byte_offset(a); + + switch(precision) + { + case 1: + bytes = 4; + break; + + case 2: + bytes = 8; + break; + + default: + return GRIB_NOT_IMPLEMENTED; + break; + } + + nvals = inlen / bytes; + + if(*len < nvals) + return GRIB_ARRAY_TOO_SMALL; + + code=grib_ieee_decode_array(a->parent->h->context,buf,nvals,bytes,val); + + *len = nvals; + + return code; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_raw_packing *self =(grib_accessor_data_raw_packing*)a; + + int bytes = 0; + unsigned char* buffer = NULL; + + long precision = 0; + + double* values = (double*)val; + size_t inlen = *len; + + int free_buffer = 0; + int free_values = 0; + + int code = GRIB_SUCCESS; + + + size_t bufsize = 0; + + if (*len ==0) return GRIB_NO_VALUES; + + if((code = grib_get_long_internal(a->parent->h,self->precision,&precision)) + != GRIB_SUCCESS) + return code; + + self->dirty=1; + + switch(precision) + { + case 1: + bytes = 4; + break; + + case 2: + bytes = 8; + break; + + default: + code = GRIB_NOT_IMPLEMENTED; + goto clean_up; + break; + } + + bufsize = bytes*inlen; + + buffer = grib_context_malloc(a->parent->h->context, bufsize); + + if(!buffer) + { + code = GRIB_OUT_OF_MEMORY; + goto clean_up; + } + + code=grib_ieee_encode_array(a->parent->h->context,values,inlen,bytes,buffer); + +clean_up: + if(free_buffer) free(buffer); + if(free_values) free(values); + + grib_buffer_replace(a, buffer, bufsize,1,1); + + grib_context_buffer_free(a->parent->h->context,buffer); + + code = grib_set_long(a->parent->h,self->number_of_values, inlen); + if(code==GRIB_READ_ONLY) code=0; + + return code; + +} + +static int unpack_double_element(grib_accessor* a, size_t idx, double* val) { + int ret=0; + grib_accessor_data_raw_packing *self =(grib_accessor_data_raw_packing*)a; + unsigned char* buf = NULL; + int bytes = 0; + size_t nvals = 0; + long inlen = grib_byte_count(a); + long pos; + + long precision = 0; + + if((ret = grib_get_long_internal(a->parent->h,self->precision,&precision)) + != GRIB_SUCCESS) + return ret; + + self->dirty=0; + + buf = (unsigned char*)a->parent->h->buffer->data; + buf += grib_byte_offset(a); + + switch(precision) + { + case 1: + bytes = 4; + break; + + case 2: + bytes = 8; + break; + + default: + return GRIB_NOT_IMPLEMENTED; + break; + } + + pos=bytes*idx; + + Assert(pos<=inlen); + + nvals = 1; + buf+=pos; + + ret=grib_ieee_decode_array(a->parent->h->context,buf,nvals,bytes,val); + + return ret; +} diff --git a/src/grib_accessor_class_data_secondary_bitmap.c b/src/grib_accessor_class_data_secondary_bitmap.c new file mode 100644 index 000000000..e7559ff57 --- /dev/null +++ b/src/grib_accessor_class_data_secondary_bitmap.c @@ -0,0 +1,245 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = dump;get_native_type + MEMBERS=const char* primary_bitmap + MEMBERS=const char* secondary_bitmap + MEMBERS=const char* missing_value + MEMBERS=const char* expand_by + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_secondary_bitmap { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in data_secondary_bitmap */ + const char* primary_bitmap; + const char* secondary_bitmap; + const char* missing_value; + const char* expand_by; +} grib_accessor_data_secondary_bitmap; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_data_secondary_bitmap = { + &grib_accessor_class_gen, /* super */ + "data_secondary_bitmap", /* name */ + sizeof(grib_accessor_data_secondary_bitmap), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_secondary_bitmap = &_grib_accessor_class_data_secondary_bitmap; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_secondary_bitmap *self =(grib_accessor_data_secondary_bitmap*)a; + + + self->primary_bitmap = grib_arguments_get_name(a->parent->h,args,0); + self->secondary_bitmap = grib_arguments_get_name(a->parent->h,args,1); + self->missing_value = grib_arguments_get_name(a->parent->h,args,2); + self->expand_by = grib_arguments_get_name(a->parent->h,args,3); + + a->length = 0; +} +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_values(dumper,a); +} + + + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_secondary_bitmap* self = (grib_accessor_data_secondary_bitmap*)a; + + size_t i = 0; + size_t j = 0; + size_t k = 0; + size_t m = 0; + size_t n_vals = grib_value_count(a); + long expand_by =0; + int err = 0; + size_t primary_len; + size_t secondary_len; + double* primary_vals; + double* secondary_vals; + + if(*len < n_vals) + { + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if((err = grib_get_long(a->parent->h,self->expand_by,&expand_by)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_size(a->parent->h,self->primary_bitmap,&primary_len)) != GRIB_SUCCESS) + return err; + + if((err = grib_get_size(a->parent->h,self->secondary_bitmap,&secondary_len)) != GRIB_SUCCESS) + return err; + + primary_vals = grib_context_malloc(a->parent->h->context,primary_len*sizeof(double)); + if(!primary_vals) + return GRIB_OUT_OF_MEMORY; + + secondary_vals = grib_context_malloc(a->parent->h->context,secondary_len*sizeof(double)); + if(!secondary_vals) + { + grib_context_free(a->parent->h->context,primary_vals); + return GRIB_OUT_OF_MEMORY; + } + + if((err = grib_get_double_array_internal(a->parent->h,self->primary_bitmap,primary_vals,&primary_len)) != GRIB_SUCCESS) + { + grib_context_free(a->parent->h->context,secondary_vals); + grib_context_free(a->parent->h->context,primary_vals); + return err; + } + + if((err = grib_get_double_array_internal(a->parent->h,self->secondary_bitmap,secondary_vals,&secondary_len)) != GRIB_SUCCESS) + { + grib_context_free(a->parent->h->context,secondary_vals); + grib_context_free(a->parent->h->context,primary_vals); + return err; + } + + k = 0; + m = 0; + for(i=0;i < primary_len;i++) + { + /* if(primary_vals[i]) f++; */ + if(primary_vals[i]) + { + for(j = 0; j < expand_by; j++) + val[k++] = secondary_vals[m++]; + } + else { + for(j = 0; j < expand_by; j++) + val[k++] = 0; + } + + } + + Assert(k <= *len); + Assert(m <= secondary_len); + + /*printf("FOOBAR %d %d %ld %d\n",f,primary_len,expand_by,n_vals);*/ + + *len = n_vals; + + grib_context_free(a->parent->h->context,primary_vals); + grib_context_free(a->parent->h->context,secondary_vals); + return err; +} + + +static int get_native_type(grib_accessor* a) +{ + /* grib_accessor_data_secondary_bitmap* self = (grib_accessor_data_secondary_bitmap*)a; + return grib_accessor_get_native_type(grib_find_accessor(a->parent->h,self->coded_values));*/ + + return GRIB_TYPE_DOUBLE; +} diff --git a/src/grib_accessor_class_data_sh_packed.c b/src/grib_accessor_class_data_sh_packed.c new file mode 100644 index 000000000..08e8cd858 --- /dev/null +++ b/src/grib_accessor_class_data_sh_packed.c @@ -0,0 +1,404 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_simple_packing + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + IMPLEMENTS = init + MEMBERS= const char* GRIBEX_sh_bug_present + MEMBERS= const char* ieee_floats + MEMBERS= const char* laplacianOperatorIsSet + MEMBERS= const char* laplacianOperator + MEMBERS= const char* sub_j + MEMBERS= const char* sub_k + MEMBERS= const char* sub_m + MEMBERS= const char* pen_j + MEMBERS= const char* pen_k + MEMBERS= const char* pen_m + END_CLASS_DEF + + */ + + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_sh_packed { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_sh_packed */ + const char* GRIBEX_sh_bug_present; + const char* ieee_floats; + const char* laplacianOperatorIsSet; + const char* laplacianOperator; + const char* sub_j; + const char* sub_k; + const char* sub_m; + const char* pen_j; + const char* pen_k; + const char* pen_m; +} grib_accessor_data_sh_packed; + +extern grib_accessor_class* grib_accessor_class_data_simple_packing; + +static grib_accessor_class _grib_accessor_class_data_sh_packed = { + &grib_accessor_class_data_simple_packing, /* super */ + "data_sh_packed", /* name */ + sizeof(grib_accessor_data_sh_packed), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_sh_packed = &_grib_accessor_class_data_sh_packed; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +typedef unsigned long (*encode_float_proc)(double); +typedef double (*decode_float_proc)(unsigned long); + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_sh_packed *self =(grib_accessor_data_sh_packed*)a; + + self->GRIBEX_sh_bug_present = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->ieee_floats = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->laplacianOperatorIsSet = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->laplacianOperator = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->sub_j = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->sub_k = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->sub_m = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pen_j = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pen_k = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pen_m = grib_arguments_get_name(a->parent->h,args,self->carg++); + + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + a->length=0; +} + + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_sh_packed *self =(grib_accessor_data_sh_packed*)a; + int ret = 0; + + long sub_j= 0; + long sub_k= 0; + long sub_m= 0; + long pen_j= 0; + long pen_k= 0; + long pen_m= 0; + + if((ret = grib_get_long_internal(a->parent->h,self->sub_j,&sub_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_k,&sub_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_m,&sub_m)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->pen_j,&pen_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_k,&pen_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_m,&pen_m)) != GRIB_SUCCESS) + return ret; + + if (pen_j != pen_k || pen_j!=pen_m ) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"pen_j=%ld, pen_k=%ld, pen_m=%ld\n",pen_j,pen_k,pen_m); + Assert ((pen_j == pen_k) && (pen_j == pen_m)); + } + return (pen_j+1)*(pen_j+2)-(sub_j+1)*(sub_j+2); +} + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_sh_packed* self = (grib_accessor_data_sh_packed*)a; + + size_t i = 0; + int ret = GRIB_SUCCESS; + long hcount = 0; + long lcount = 0; + long hpos = 0; + long lup = 0; + long mmax = 0; + long n_vals = 0; + double *scals = NULL; + double *pscals=NULL; + double dummy=0; + + double s = 0; + double d = 0; + double laplacianOperator = 0; + unsigned char* buf = NULL; + unsigned char* hres = NULL; + unsigned char* lres = NULL; + unsigned long packed_offset; + long lpos = 0; + + long maxv = 0; + long GRIBEX_sh_bug_present =0; + long ieee_floats = 0; + + long offsetdata = 0; + long bits_per_value = 0; + double reference_value = 0; + long binary_scale_factor = 0; + long decimal_scale_factor = 0; + + + long sub_j= 0; + long sub_k= 0; + long sub_m= 0; + long pen_j= 0; + long pen_k= 0; + long pen_m= 0; + + double operat= 0; + + decode_float_proc decode_float = NULL; + + n_vals = grib_value_count(a); + + if(*len < n_vals){ + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if((ret = grib_get_long_internal(a->parent->h,self->offsetdata,&offsetdata)) + != GRIB_SUCCESS) return ret; + if((ret = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) + != GRIB_SUCCESS) return ret; + if((ret = grib_get_double_internal(a->parent->h,self->reference_value,&reference_value)) + != GRIB_SUCCESS) return ret; + if((ret = grib_get_long_internal(a->parent->h,self->binary_scale_factor,&binary_scale_factor)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->decimal_scale_factor,&decimal_scale_factor)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->GRIBEX_sh_bug_present,&GRIBEX_sh_bug_present)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->ieee_floats,&ieee_floats)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_double_internal(a->parent->h,self->laplacianOperator,&laplacianOperator)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_j,&sub_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_k,&sub_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_m,&sub_m)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_j,&pen_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_k,&pen_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_m,&pen_m)) != GRIB_SUCCESS) + return ret; + + self->dirty=0; + + switch (ieee_floats) { + case 0: + decode_float=grib_long_to_ibm; + break; + case 1: + decode_float=grib_long_to_ieee; + break; + case 2: + decode_float=grib_long_to_ieee64; + break; + default: + return GRIB_NOT_IMPLEMENTED; + } + + Assert (sub_j == sub_k); + Assert (sub_j == sub_m); + Assert (pen_j == pen_k); + Assert (pen_j == pen_m); + + buf = (unsigned char*)a->parent->h->buffer->data; + + maxv = pen_j+1; + + buf += offsetdata; + hres = buf; + lres = buf; + + packed_offset = offsetdata + 4*(sub_k+1)*(sub_k+2); + + lpos = 8*(packed_offset-offsetdata); + + s = grib_power(binary_scale_factor,2); + d = grib_power(-decimal_scale_factor,10) ; + + scals = (double*)grib_context_malloc(a->parent->h->context,maxv*sizeof(double)); + Assert(scals); + + scals[0] = 0; + for(i=1;i0) + { + lup=mmax; + if(sub_k>=0) + { + for(hcount=0;hcount= i); + *len = n_vals; + + if(d != 1) { + for(i=0;i<*len;i++) + val[i++] *= d; + } + + grib_context_free(a->parent->h->context,scals); + + return ret; + +} + diff --git a/src/grib_accessor_class_data_sh_unpacked.c b/src/grib_accessor_class_data_sh_unpacked.c new file mode 100644 index 000000000..9a48cb6fd --- /dev/null +++ b/src/grib_accessor_class_data_sh_unpacked.c @@ -0,0 +1,390 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_data_simple_packing + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + IMPLEMENTS = init + MEMBERS= const char* GRIBEX_sh_bug_present + MEMBERS= const char* ieee_floats + MEMBERS= const char* laplacianOperatorIsSet + MEMBERS= const char* laplacianOperator + MEMBERS= const char* sub_j + MEMBERS= const char* sub_k + MEMBERS= const char* sub_m + MEMBERS= const char* pen_j + MEMBERS= const char* pen_k + MEMBERS= const char* pen_m + END_CLASS_DEF + + */ + + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_sh_unpacked { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +/* Members defined in data_sh_unpacked */ + const char* GRIBEX_sh_bug_present; + const char* ieee_floats; + const char* laplacianOperatorIsSet; + const char* laplacianOperator; + const char* sub_j; + const char* sub_k; + const char* sub_m; + const char* pen_j; + const char* pen_k; + const char* pen_m; +} grib_accessor_data_sh_unpacked; + +extern grib_accessor_class* grib_accessor_class_data_simple_packing; + +static grib_accessor_class _grib_accessor_class_data_sh_unpacked = { + &grib_accessor_class_data_simple_packing, /* super */ + "data_sh_unpacked", /* name */ + sizeof(grib_accessor_data_sh_unpacked), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_sh_unpacked = &_grib_accessor_class_data_sh_unpacked; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +typedef unsigned long (*encode_float_proc)(double); +typedef double (*decode_float_proc)(unsigned long); + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_sh_unpacked *self =(grib_accessor_data_sh_unpacked*)a; + + self->GRIBEX_sh_bug_present = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->ieee_floats = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->laplacianOperatorIsSet = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->laplacianOperator = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->sub_j = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->sub_k = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->sub_m = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pen_j = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pen_k = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->pen_m = grib_arguments_get_name(a->parent->h,args,self->carg++); + + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + a->length=0; +} + + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_sh_unpacked *self =(grib_accessor_data_sh_unpacked*)a; + int ret = 0; + + long sub_j= 0; + long sub_k= 0; + long sub_m= 0; + + if((ret = grib_get_long_internal(a->parent->h,self->sub_j,&sub_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_k,&sub_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_m,&sub_m)) != GRIB_SUCCESS) + return ret; + + if (sub_j != sub_k || sub_j!=sub_m ) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"sub_j=%ld, sub_k=%ld, sub_m=%ld\n",sub_j,sub_k,sub_m); + Assert ((sub_j == sub_k) && (sub_j == sub_m)); + } + return (sub_j+1)*(sub_j+2); +} + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_data_sh_unpacked* self = (grib_accessor_data_sh_unpacked*)a; + + size_t i = 0; + int ret = GRIB_SUCCESS; + long hcount = 0; + long lcount = 0; + long hpos = 0; + long lup = 0; + long mmax = 0; + long n_vals = 0; + double *scals = NULL; + double *pscals=NULL; + double dummy=0; + + double s = 0; + double d = 0; + double laplacianOperator = 0; + unsigned char* buf = NULL; + unsigned char* hres = NULL; + unsigned char* lres = NULL; + unsigned long packed_offset; + long lpos = 0; + + long maxv = 0; + long GRIBEX_sh_bug_present =0; + long ieee_floats = 0; + + long offsetdata = 0; + long bits_per_value = 0; + double reference_value = 0; + long binary_scale_factor = 0; + long decimal_scale_factor = 0; + + + long sub_j= 0; + long sub_k= 0; + long sub_m= 0; + long pen_j= 0; + long pen_k= 0; + long pen_m= 0; + + double operat= 0; + + decode_float_proc decode_float = NULL; + + n_vals = grib_value_count(a); + + if(*len < n_vals){ + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if((ret = grib_get_long_internal(a->parent->h,self->offsetdata,&offsetdata)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->GRIBEX_sh_bug_present,&GRIBEX_sh_bug_present)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->ieee_floats,&ieee_floats)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h,self->sub_j,&sub_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_k,&sub_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->sub_m,&sub_m)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_j,&pen_j)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_k,&pen_k)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->pen_m,&pen_m)) != GRIB_SUCCESS) + return ret; + + self->dirty=0; + + switch (ieee_floats) { + case 0: + decode_float=grib_long_to_ibm; + break; + case 1: + decode_float=grib_long_to_ieee; + break; + case 2: + decode_float=grib_long_to_ieee64; + break; + default: + return GRIB_NOT_IMPLEMENTED; + } + + Assert (sub_j == sub_k); + Assert (sub_j == sub_m); + Assert (pen_j == pen_k); + Assert (pen_j == pen_m); + + buf = (unsigned char*)a->parent->h->buffer->data; + + maxv = pen_j+1; + + buf += offsetdata; + hres = buf; + lres = buf; + + packed_offset = offsetdata + 4*(sub_k+1)*(sub_k+2); + + lpos = 8*(packed_offset-offsetdata); + + s = grib_power(binary_scale_factor,2); + d = grib_power(-decimal_scale_factor,10) ; + + scals = (double*)grib_context_malloc(a->parent->h->context,maxv*sizeof(double)); + Assert(scals); + if((ret = grib_get_double_internal(a->parent->h,self->laplacianOperator,&laplacianOperator)) + != GRIB_SUCCESS) + return ret; + + scals[0] = 0; + for(i=1;i0) + { + lup=mmax; + if(sub_k>=0) + { + for(hcount=0;hcount= i); + *len = n_vals; + + if(d != 1) { + for(i=0;i<*len;i++) + val[i++] *= d; + } + + grib_context_free(a->parent->h->context,scals); + + return ret; + +} + diff --git a/src/grib_accessor_class_data_shsimple_packing.c b/src/grib_accessor_class_data_shsimple_packing.c new file mode 100644 index 000000000..22ca5ad8b --- /dev/null +++ b/src/grib_accessor_class_data_shsimple_packing.c @@ -0,0 +1,179 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init + IMPLEMENTS = pack_double + IMPLEMENTS = dump;get_native_type + MEMBERS=const char* coded_values + MEMBERS=const char* real_part + MEMBERS=int dirty + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_shsimple_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in data_shsimple_packing */ + const char* coded_values; + const char* real_part; + int dirty; +} grib_accessor_data_shsimple_packing; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_data_shsimple_packing = { + &grib_accessor_class_gen, /* super */ + "data_shsimple_packing", /* name */ + sizeof(grib_accessor_data_shsimple_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_shsimple_packing = &_grib_accessor_class_data_shsimple_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_shsimple_packing *self =(grib_accessor_data_shsimple_packing*)a; + + self->coded_values = grib_arguments_get_name(a->parent->h,args,0); + self->real_part = grib_arguments_get_name(a->parent->h,args,1); + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + + a->length = 0; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_values(dumper,a); +} + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_shsimple_packing* self = (grib_accessor_data_shsimple_packing*)a; + int err = GRIB_SUCCESS; + + size_t coded_n_vals = *len-1; + size_t n_vals = *len; + + self->dirty=1; + + if (*len ==0) return GRIB_NO_VALUES; + + if((err = grib_set_double_internal(a->parent->h,self->real_part,*val)) != GRIB_SUCCESS) + return err; + + + val++; + + if((err = grib_set_double_array_internal(a->parent->h,self->coded_values,val,coded_n_vals)) != GRIB_SUCCESS) + return err; + + + *len = n_vals; + + return err; + +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_DOUBLE; +} + diff --git a/src/grib_accessor_class_data_simple_packing.c b/src/grib_accessor_class_data_simple_packing.c new file mode 100644 index 000000000..8e6eeae6c --- /dev/null +++ b/src/grib_accessor_class_data_simple_packing.c @@ -0,0 +1,646 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/******************************** + * Enrico Fucile + *******************************/ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_values + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = unpack_double_element + IMPLEMENTS = unpack_double_subarray + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=int edition + MEMBERS=const char* units_factor + MEMBERS=const char* units_bias + MEMBERS=const char* changing_precision + MEMBERS=const char* number_of_values + MEMBERS=const char* bits_per_value + MEMBERS=const char* reference_value + MEMBERS=const char* binary_scale_factor + MEMBERS=const char* decimal_scale_factor + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int unpack_double_element(grib_accessor*,size_t i, double* val); +static int unpack_double_subarray(grib_accessor*, double* val,size_t start,size_t len); + +typedef struct grib_accessor_data_simple_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_simple_packing */ + int edition; + const char* units_factor; + const char* units_bias; + const char* changing_precision; + const char* number_of_values; + const char* bits_per_value; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; +} grib_accessor_data_simple_packing; + +extern grib_accessor_class* grib_accessor_class_values; + +static grib_accessor_class _grib_accessor_class_data_simple_packing = { + &grib_accessor_class_values, /* super */ + "data_simple_packing", /* name */ + sizeof(grib_accessor_data_simple_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + &unpack_double_element, /* unpack only ith value */ + &unpack_double_subarray, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_simple_packing = &_grib_accessor_class_data_simple_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_simple_packing *self =(grib_accessor_data_simple_packing*)a; + self->units_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->units_bias = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->changing_precision = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->number_of_values = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->bits_per_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->reference_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->binary_scale_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->decimal_scale_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + self->dirty=1; + +} + +static unsigned long nbits[32]={ + 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, + 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, + 0x1000, 0x2000, 0x4000, 0x8000, 0x10000, 0x20000, + 0x40000, 0x80000, 0x100000, 0x200000, 0x400000, 0x800000, + 0x1000000, 0x2000000, 0x4000000, 0x8000000, 0x10000000, 0x20000000, + 0x40000000, 0x80000000 +}; + +GRIB_INLINE static long number_of_bits(unsigned long x) { + unsigned long *n=nbits; + long i=0; + while (x>=*n) {n++;i++;} + return i; +} + + +static long value_count(grib_accessor* a){ + grib_accessor_data_simple_packing* self = (grib_accessor_data_simple_packing*)a; + + long number_of_values; + + if(grib_get_long_internal(a->parent->h,self->number_of_values,&number_of_values) != GRIB_SUCCESS) + return 0; + + return number_of_values; + +} + +static int unpack_double_element(grib_accessor* a, size_t idx, double* val) +{ + grib_accessor_data_simple_packing* self = (grib_accessor_data_simple_packing*)a; + + size_t n_vals; + int err = 0; + + double reference_value; + long binary_scale_factor; + long bits_per_value; + long decimal_scale_factor; + unsigned char* buf = (unsigned char*)a->parent->h->buffer->data; + double s = 0; + double d = 0; + long pos = 0; + size_t o = 0; + + n_vals = grib_value_count(a); + if(n_vals==0){ + return GRIB_NOT_FOUND; + } + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != + GRIB_SUCCESS) + return err; + + self->dirty=0; + + if((err = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) != + GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) + != GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) + != GRIB_SUCCESS) + return err; + + /* Special case */ + + if (bits_per_value == 0) { + *val=reference_value; + return GRIB_SUCCESS; + } + + s = grib_power(binary_scale_factor,2); + d = grib_power(-decimal_scale_factor,10) ; + + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "grib_accessor_data_simple_packing : unpack_double : creating %s, %d values", + a->name, n_vals); + + buf += grib_byte_offset(a); + + Assert(((bits_per_value*n_vals)/8) < (1<<29)); + /*ensure that the bit pointer is not overflown*/ + + if(bits_per_value%8) + { + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "unpack_double : calling outline function : bpv %d, rv : %g, sf : %d, dsf : %d ", + bits_per_value,reference_value,binary_scale_factor, decimal_scale_factor); + pos=idx*bits_per_value; + *val= (double) ((( + grib_decode_unsigned_long(buf, &pos, bits_per_value)*s)+reference_value)*d); + /* val[i] = grib_decode_unsigned_long(buf, &pos, bits_per_value); */ + /* fprintf(stdout,"unpck uuu-o: %d vals %d bitspv buf %d by long \n", n_vals, bits_per_value, pos/8);*/ + } + else + { + int bc; + long lvalue = 0; + int l = bits_per_value/8; + + pos=idx*l; + buf+=pos; + lvalue = 0; + lvalue <<= 8; + lvalue |= buf[o++] ; + + for ( bc=1; bcparent->h,self->bits_per_value,&bits_per_value)) != + GRIB_SUCCESS) + return err; + + /*/ + * check we don't decode bpv > max(ulong) as it is + * not currently supported by the algorithm + */ + if ( bits_per_value > (sizeof(long)*8) ) { + return GRIB_INVALID_BPV; + } + + if(self->units_factor && + (grib_get_double_internal(a->parent->h,self->units_factor,&units_factor)== GRIB_SUCCESS)) { + grib_set_double_internal(a->parent->h,self->units_factor,1.0); + } + + if(self->units_bias && + (grib_get_double_internal(a->parent->h,self->units_bias,&units_bias)== GRIB_SUCCESS)) { + grib_set_double_internal(a->parent->h,self->units_bias,0.0); + } + + if(n_vals==0){ + *len = 0; + return GRIB_SUCCESS; + } + + self->dirty=0; + + if((err = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) != + GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) + != GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) + != GRIB_SUCCESS) + return err; + + /* Special case */ + + if(bits_per_value == 0) + { + for(i = 0; i < n_vals; i++) + val[i] = reference_value; + *len = n_vals; + return GRIB_SUCCESS; + } + + s = grib_power(binary_scale_factor,2); + d = grib_power(-decimal_scale_factor,10) ; + + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "grib_accessor_data_simple_packing : unpack_double : creating %s, %d values", + a->name, n_vals); + + buf += grib_byte_offset(a); + + Assert(((bits_per_value*n_vals)/8) < (1<<29)); + /*ensure that the bit pointer is not overflown*/ + + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "unpack_double : calling outline function : bpv %d, rv : %g, sf : %d, dsf : %d ", + bits_per_value,reference_value,binary_scale_factor, decimal_scale_factor); + grib_decode_double_array(buf,&pos,bits_per_value,reference_value,s,d,n_vals,val); + + *len = (long) n_vals; + + if (units_factor != 1.0) { + if (units_bias != 0.0) + for (i=0;iparent->h->buffer->data; + size_t nvals = len; + size_t *plen=&len; + long bits_per_value=0; + long pos; + int err; + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != + GRIB_SUCCESS) + return err; + + buf+=(start*bits_per_value)/8; + pos=start*bits_per_value%8; + return _unpack_double(a,val,plen,buf,pos,nvals); +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) { + unsigned char* buf = (unsigned char*)a->parent->h->buffer->data; + size_t nvals = grib_value_count(a); + long pos=0; + return _unpack_double(a,val,len,buf,pos,nvals); +} + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_simple_packing* self = (grib_accessor_data_simple_packing*)a; + + size_t i = 0; + size_t n_vals = *len; + int err = 0; + int last; + double reference_value = 0; + long binary_scale_factor = 0; + long bits_per_value = 0; + long decimal_scale_factor = 0; + long decimal_scale_factor_get = 0; + double decimal = 1; + double max = 0; + double min = 0; + double unscaled_max = 0; + double unscaled_min = 0; + double f=0; + double range=0; + double minrange=0,maxrange=0; + long changing_precision=0; + grib_context* c=a->parent->h->context; + + decimal_scale_factor=0; + + if (*len == 0) { + return GRIB_NO_VALUES; + } + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != + GRIB_SUCCESS) + return err; + + if(*len == 0) return GRIB_SUCCESS; + + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor_get)) + != GRIB_SUCCESS) + return err; + /*/ + * check we don't encode bpv > max(ulong)-1 as it is + * not currently supported by the algorithm + */ + if ( bits_per_value > (sizeof(long)*8-1) ) { + return GRIB_INVALID_BPV; + } + + self->dirty=1; + + max = val[0]; + min = max; + for(i=1;i< n_vals;i++) { + if (val[i] > max ) max = val[i]; + if (val[i] < min ) min = val[i]; + } + + /* constant field only reference_value is set and bits_per_value=0 */ + if(max==min) { + if (grib_get_nearest_smaller_value(a->parent->h,self->reference_value,val[0],&reference_value) + !=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to find nearest_smaller_value of %g for %s",min,self->reference_value); + exit(GRIB_INTERNAL_ERROR); + } + if((err = grib_set_double_internal(a->parent->h,self->reference_value, reference_value)) != + GRIB_SUCCESS) + return err; + + { + /* Make sure we can decode it again */ + double ref = 1e-100; + grib_get_double_internal(a->parent->h,self->reference_value,&ref); + if (ref != reference_value) + printf("%.20e != %.20e",ref,reference_value); + Assert(ref == reference_value); + } + + if (c->large_constant_fields || (c->gribex_mode_on==1 && self->edition==1)) { + if((err = grib_set_long_internal(a->parent->h,self->binary_scale_factor, 0)) != + GRIB_SUCCESS) + return err; + + if((err = grib_set_long_internal(a->parent->h,self->decimal_scale_factor, 0)) != + GRIB_SUCCESS) + return err; + + if (bits_per_value==0) { + if((err = grib_set_long_internal(a->parent->h,self->bits_per_value, 16)) != + GRIB_SUCCESS) + return err; + } + + return GRIB_SUCCESS; + } else { + bits_per_value=0; + if((err = grib_set_long_internal(a->parent->h,self->bits_per_value, bits_per_value)) != + GRIB_SUCCESS) + return err; + + return GRIB_CONSTANT_FIELD; + } + } + + if((err = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) + != GRIB_SUCCESS) + return err; + + if((err = grib_get_long_internal(a->parent->h,self->changing_precision, &changing_precision)) + != GRIB_SUCCESS) + return err; + + /* the packing parameters are not properly defined + this is a safe way of fixing the problem */ + if ( changing_precision==0 && bits_per_value==0 && decimal_scale_factor_get==0) { + + grib_context_log(a->parent->h->context,GRIB_LOG_WARNING, + "%s==0 and %s==0 (setting %s=24)", + self->bits_per_value, + self->decimal_scale_factor, + self->bits_per_value); + + bits_per_value=24; + if((err = grib_set_long_internal(a->parent->h,self->bits_per_value, + bits_per_value))!= GRIB_SUCCESS) + return err; + } + + if ( bits_per_value == 0 || (binary_scale_factor==0 && decimal_scale_factor_get!=0) ) { + /* decimal_scale_factor is given, binary_scale_factor=0 + and bits_per_value is computed */ + binary_scale_factor=0; + decimal_scale_factor=decimal_scale_factor_get; + decimal = grib_power(decimal_scale_factor,10) ; + min*=decimal; + max*=decimal; + + /* bits_per_value=(long)ceil(log((double)(imax-imin+1))/log(2.0)); */ + bits_per_value=number_of_bits((unsigned long)fabs(max-min)); + /*printf("bits_per_value=%ld\n",bits_per_value);*/ + if((err = grib_set_long_internal(a->parent->h,self->bits_per_value, bits_per_value)) != + GRIB_SUCCESS) + return err; + if (grib_get_nearest_smaller_value(a->parent->h,self->reference_value,min,&reference_value) + !=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to find nearest_smaller_value of %g for %s",min,self->reference_value); + exit(GRIB_INTERNAL_ERROR); + } + /* divisor=1; */ + } else { + last=127; + if (c->gribex_mode_on && self->edition==1) last=99; + /* bits_per_value is given and decimal_scale_factor + and binary_scale_factor are calcualated + */ + if (max == min) { + binary_scale_factor=0; + /* divisor=1; */ + if (grib_get_nearest_smaller_value(a->parent->h,self->reference_value,min,&reference_value) + !=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to find nearest_smaller_value of %g for %s",min,self->reference_value); + exit(GRIB_INTERNAL_ERROR); + } + } else { + /* printf("max=%g reference_value=%g grib_power(-last,2)=%g decimal_scale_factor=%ld bits_per_value=%ld\n", + max,reference_value,grib_power(-last,2),decimal_scale_factor,bits_per_value);*/ + /* last must be a parameter coming from the def file*/ + range=(max-min); + unscaled_min=min; + unscaled_max=max; + f=(grib_power(bits_per_value,2)-1); + minrange=grib_power(-last,2)*f; + maxrange=grib_power(last,2)*f; + + while (rangemaxrange) { + decimal_scale_factor-=1; + decimal/=10; + min=unscaled_min*decimal; + max=unscaled_max*decimal; + range=(max-min); + } + + if (grib_get_nearest_smaller_value(a->parent->h,self->reference_value, + min,&reference_value)!=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to find nearest_smaller_value of %g for %s",min,self->reference_value); + exit(GRIB_INTERNAL_ERROR); + } + + binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&err); + } + } + + + if((err = grib_set_double_internal(a->parent->h,self->reference_value, reference_value)) != + GRIB_SUCCESS) + return err; + + if((err = grib_set_long_internal(a->parent->h,self->changing_precision, 0)) != + GRIB_SUCCESS) + return err; + if((err = grib_set_long_internal(a->parent->h,self->binary_scale_factor, binary_scale_factor)) != + GRIB_SUCCESS) + return err; + if((err = grib_set_long_internal(a->parent->h,self->decimal_scale_factor, decimal_scale_factor)) + != GRIB_SUCCESS) + return err; + + + return GRIB_SUCCESS; + +} + diff --git a/src/grib_accessor_class_data_szip_packing.c b/src/grib_accessor_class_data_szip_packing.c new file mode 100644 index 000000000..cba8f5ec4 --- /dev/null +++ b/src/grib_accessor_class_data_szip_packing.c @@ -0,0 +1,559 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_values + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=const char* number_of_values + MEMBERS=const char* reference_value + MEMBERS=const char* binary_scale_factor + MEMBERS=const char* decimal_scale_factor + MEMBERS=const char* bits_per_value + + MEMBERS=const char* number_of_data_points + + MEMBERS=const char* szip_options_mask + MEMBERS=const char* szip_bits_per_pixel + MEMBERS=const char* szip_pixels_per_block + MEMBERS=const char* szip_pixels_per_scanline + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_data_szip_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +/* Members defined in data_szip_packing */ + const char* number_of_values; + const char* reference_value; + const char* binary_scale_factor; + const char* decimal_scale_factor; + const char* bits_per_value; + const char* number_of_data_points; + const char* szip_options_mask; + const char* szip_bits_per_pixel; + const char* szip_pixels_per_block; + const char* szip_pixels_per_scanline; +} grib_accessor_data_szip_packing; + +extern grib_accessor_class* grib_accessor_class_values; + +static grib_accessor_class _grib_accessor_class_data_szip_packing = { + &grib_accessor_class_values, /* super */ + "data_szip_packing", /* name */ + sizeof(grib_accessor_data_szip_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_data_szip_packing = &_grib_accessor_class_data_szip_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + grib_accessor_data_szip_packing *self =(grib_accessor_data_szip_packing*)a; + + self->number_of_values = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->reference_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->binary_scale_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->decimal_scale_factor = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->bits_per_value = grib_arguments_get_name(a->parent->h,args,self->carg++); + + self->number_of_data_points = grib_arguments_get_name(a->parent->h,args,self->carg++); + + + self->szip_options_mask = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->szip_bits_per_pixel = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->szip_pixels_per_block = grib_arguments_get_name(a->parent->h,args,self->carg++); + self->szip_pixels_per_scanline = grib_arguments_get_name(a->parent->h,args,self->carg++); + + a->flags |= GRIB_ACCESSOR_FLAG_DATA; + +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_data_szip_packing *self =(grib_accessor_data_szip_packing*)a; + long n_vals= 0; + if(grib_get_long_internal(a->parent->h,self->number_of_values,&n_vals) != GRIB_SUCCESS) + return 0; + + return n_vals; +} + +#ifdef HAVE_LIBSZIP + +#include "szlib.h" + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + + grib_accessor_data_szip_packing *self =(grib_accessor_data_szip_packing*)a; + + int err = GRIB_SUCCESS; + int i,j; + size_t buflen = grib_byte_count(a); + SZ_com_t sz_options; + double bscale = 0; + double dscale = 0; + unsigned char* buf = NULL; + size_t n_vals = 0; + size_t size; + unsigned char* decoded = NULL; + long pos = 0; + + long binary_scale_factor = 0; + long decimal_scale_factor = 0; + double reference_value = 0; + long bits_per_value =0; + long bits8; + + + long szip_options_mask ; + long szip_bits_per_pixel ; + long szip_pixels_per_block ; + long szip_pixels_per_scanline ; + + self->dirty=0; + + n_vals = grib_value_count(a); + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS) + return err; + if((err = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + return err; + + + if((err = grib_get_long_internal(a->parent->h,self->szip_options_mask,&szip_options_mask)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->szip_bits_per_pixel, &szip_bits_per_pixel)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->szip_pixels_per_block, &szip_pixels_per_block)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->szip_pixels_per_scanline, &szip_pixels_per_scanline)) != GRIB_SUCCESS) + return err; + + + bscale = grib_power(binary_scale_factor,2); + dscale = grib_power(-decimal_scale_factor,10); + + /* TODO: This should be called upstream */ + if(*len < n_vals) + return GRIB_ARRAY_TOO_SMALL; + + /* Special case */ + + if(bits_per_value == 0) + { + for(i = 0; i < n_vals; i++) + val[i] = reference_value; + *len = n_vals; + return GRIB_SUCCESS; + } + + buf = (unsigned char*)a->parent->h->buffer->data; + buf += grib_byte_offset(a); + + memset(&sz_options, 0, sizeof(sz_options)); + sz_options.options_mask = szip_options_mask; + sz_options.bits_per_pixel = szip_bits_per_pixel; + sz_options.pixels_per_block = szip_pixels_per_block; + sz_options.pixels_per_scanline = szip_pixels_per_scanline; + +/* + printf("sz_options.options_mask %d\n", sz_options.options_mask); + printf("sz_options.bits_per_pixel %d\n", sz_options.bits_per_pixel); + printf("sz_options.pixels_per_block %d\n", sz_options.pixels_per_block); + printf("sz_options.pixels_per_scanline %d\n", sz_options.pixels_per_scanline); + */ + + bits8 = ((szip_bits_per_pixel + 7)/8)*8; + size = n_vals * (szip_bits_per_pixel + 7)/8; + decoded = grib_context_buffer_malloc_clear(a->parent->h->context,size); + if(!decoded) { + err = GRIB_OUT_OF_MEMORY; + goto cleanup; + } + + + if((err = SZ_BufftoBuffDecompress( decoded,&size,buf, buflen , &sz_options)) != SZ_OK) + { + printf("SZ_BufftoBuffDecompress Error %d\n", err); + err = GRIB_ENCODING_ERROR; + goto cleanup; + } + + /* printf("bscale=%g dscale=%g reference_value=%g\n",bscale,dscale,reference_value); */ + + + pos = 0; + unsigned char *p = decoded; + for(i = 0; i < n_vals; i++) + { + val[i] = (double) (((grib_decode_unsigned_long(p, &pos, bits8)*bscale)+reference_value)*dscale); + } + /*-------------------------------------------*/ + *len = n_vals; + + +cleanup: + grib_context_buffer_free(a->parent->h->context,decoded); + return err; + +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_data_szip_packing *self =(grib_accessor_data_szip_packing*)a; + + int err = GRIB_SUCCESS; + int i; + size_t buflen = grib_byte_count(a); + + unsigned char* buf = NULL; + unsigned char* encoded = NULL; + size_t n_vals = 0; + + long binary_scale_factor = 0; + long decimal_scale_factor = 0; + double reference_value = 0; + long bits8; + long bits_per_value =0; + double max,min; + + double d; + + + unsigned char *p; + double divisor; + + long ni,nj; + long scanning_mode; + long list_defining_points; + long number_of_data_points; + + long szip_options_mask ; + long szip_bits_per_pixel ; + long szip_pixels_per_block ; + long szip_pixels_per_scanline ; + + size_t width, height; + + SZ_com_t sz_options; + + self->dirty=1; + + n_vals = grib_value_count(a); + + if((err = grib_get_long_internal(a->parent->h,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS) + return err; + if((err = grib_get_double_internal(a->parent->h,self->reference_value, &reference_value)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS) + return err; + + + if((err = grib_get_long_internal(a->parent->h,self->szip_options_mask,&szip_options_mask)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->szip_bits_per_pixel, &szip_bits_per_pixel)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->szip_pixels_per_block, &szip_pixels_per_block)) != GRIB_SUCCESS) + return err; + if((err = grib_get_long_internal(a->parent->h,self->szip_pixels_per_scanline, &szip_pixels_per_scanline)) != GRIB_SUCCESS) + return err; + + + /* Special case */ + + if(*len == 0) { + grib_buffer_replace(a, NULL, 0,1,1); + return GRIB_SUCCESS; + } + + if(bits_per_value == 0) + { + int i; + /* constant field */ + for(i = 1 ; i < n_vals; i++) + Assert(val[i] == val[0]); + + if((err = grib_set_double_internal(a->parent->h,self->reference_value, val[0])) != GRIB_SUCCESS) + return err; + { + /* Make sure we can decode it again */ + double ref = 1e-100; + grib_get_double_internal(a->parent->h,self->reference_value,&ref); + printf("%g %g %g\n",reference_value,ref,reference_value-ref); + Assert(ref == reference_value); + } + + if((err = grib_set_long_internal(a->parent->h,self->number_of_values, n_vals)) != GRIB_SUCCESS) + return err; + + grib_buffer_replace(a, NULL, 0,1,1); + + return GRIB_SUCCESS; + } + + if((err = grib_get_long_internal(a->parent->h,self->number_of_data_points,&number_of_data_points)) != GRIB_SUCCESS) + return err; + + + + + d = grib_power(decimal_scale_factor,10) ; + + + max = val[0]; + min = max; + for(i=1;i< n_vals;i++) + { + if (val[i] > max ) + max = val[i]; + if (val[i] < min ) + min = val[i]; + } + min *= d; + max *= d; + + if (grib_get_nearest_smaller_value(a->parent->h,self->reference_value,min,&reference_value) + !=GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to find nearest_smaller_value of %g for %s",min,self->reference_value); + exit(GRIB_INTERNAL_ERROR); + } + + if(reference_value > min) + { + fprintf(stderr,"reference_value=%g min_value=%g diff=%g\n",reference_value,min,reference_value-min); + Assert(reference_value <= min); + } + + binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&err); + divisor = grib_power(-binary_scale_factor,2); + + bits8 = (bits_per_value+7)/8*8; + encoded = grib_context_buffer_malloc_clear(a->parent->h->context,bits8/8*n_vals); + + if(!encoded) { + err = GRIB_OUT_OF_MEMORY; + goto cleanup; + } + + buflen = 0; + p = encoded; + for(i=0;i< n_vals;i++){ + long blen = bits8; + unsigned long unsigned_val = (unsigned long)((((val[i]*d)-(reference_value))*divisor)+0.5); + while(blen >= 8) + { + blen -= 8; + *p = (unsigned_val >> blen); + p++; + buflen++; + } + } + /* buflen = n_vals*(bits_per_value/8);*/ + + grib_context_log(a->parent->h->context, GRIB_LOG_DEBUG, + "grib_accessor_data_szip_packing : pack_double : packing %s, %d values", a->name, n_vals); + + buflen += 10240; + buf = grib_context_buffer_malloc_clear(a->parent->h->context,buflen); + + if(!buf) { + err = GRIB_OUT_OF_MEMORY; + goto cleanup; + } + + + if((err = grib_set_double_internal(a->parent->h,self->reference_value, reference_value)) != GRIB_SUCCESS) + return err; + { + /* Make sure we can decode it again */ + double ref = 1e-100; + grib_get_double_internal(a->parent->h,self->reference_value,&ref); + Assert(ref == reference_value); + } + + if((err = grib_set_long_internal(a->parent->h,self->binary_scale_factor, binary_scale_factor)) != GRIB_SUCCESS) + return err; + + if((err = grib_set_long_internal(a->parent->h,self->decimal_scale_factor, decimal_scale_factor)) != GRIB_SUCCESS) + return err; + + + memset(&sz_options, 0, sizeof(sz_options)); + sz_options.options_mask = szip_options_mask; + sz_options.bits_per_pixel = bits_per_value; + sz_options.pixels_per_block = szip_pixels_per_block; + sz_options.pixels_per_scanline = szip_pixels_per_scanline; + + /* + + This does not support spherical harmonics, and treats 24 differently than: + see http://cdo.sourcearchive.com/documentation/1.5.1.dfsg.1-1/cgribexlib_8c_source.html + */ + + /* + printf("sz_options.options_mask %d\n", sz_options.options_mask); + printf("sz_options.bits_per_pixel %d\n", sz_options.bits_per_pixel); + printf("sz_options.pixels_per_block %d\n", sz_options.pixels_per_block); + printf("sz_options.pixels_per_scanline %d\n", sz_options.pixels_per_scanline); + */ + + if((err = SZ_BufftoBuffCompress(buf,&buflen,encoded, bits8/8*n_vals, &sz_options)) != SZ_OK) + { + printf("SZ_BufftoBuffCompress Error %d\n", err); + err = GRIB_ENCODING_ERROR; + goto cleanup; + } + + /* + + printf("n_vals = %ld, bits8 = %ld\n", (long)n_vals, (long)bits8); + printf("in %ld out => %ld\n", (long)bits8/8*n_vals,(long) buflen); + */ + + grib_buffer_replace(a, buf, buflen ,1,1); + +cleanup: + grib_context_buffer_free(a->parent->h->context,buf); + grib_context_buffer_free(a->parent->h->context,encoded); + + if(err == GRIB_SUCCESS) + err = grib_set_long_internal(a->parent->h,self->number_of_values, *len); + + if(err == GRIB_SUCCESS) + err = grib_set_long_internal(a->parent->h,self->szip_bits_per_pixel, sz_options.bits_per_pixel); + + return err; +} +#else + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "grib_accessor_data_szip_packing : szip support no enabled. Please rerun configure with --with-szip-support"); + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "grib_accessor_data_szip_packing : szip support no enabled. Please rerun configure with --with-szip-support"); + return GRIB_NOT_IMPLEMENTED; +} + +#endif diff --git a/src/grib_accessor_class_decimal_precision.c b/src/grib_accessor_class_decimal_precision.c new file mode 100644 index 000000000..aa117392e --- /dev/null +++ b/src/grib_accessor_class_decimal_precision.c @@ -0,0 +1,229 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/********************************** + * Enrico Fucile + *********************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long; pack_long + IMPLEMENTS = init + MEMBERS = const char* values + MEMBERS = const char* bits_per_value + MEMBERS = const char* changing_precision + MEMBERS = const char* decimal_scale_factor + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_decimal_precision { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in decimal_precision */ + const char* values; + const char* bits_per_value; + const char* changing_precision; + const char* decimal_scale_factor; +} grib_accessor_decimal_precision; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_decimal_precision = { + &grib_accessor_class_long, /* super */ + "decimal_precision", /* name */ + sizeof(grib_accessor_decimal_precision), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_decimal_precision = &_grib_accessor_class_decimal_precision; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* args) +{ + int n=0; + grib_accessor_decimal_precision* self= (grib_accessor_decimal_precision*)a; + + self->bits_per_value=grib_arguments_get_name(a->parent->h,args,n++); + self->decimal_scale_factor=grib_arguments_get_name(a->parent->h,args,n++); + self->changing_precision=grib_arguments_get_name(a->parent->h,args,n++); + self->values=grib_arguments_get_name(a->parent->h,args,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_accessor_decimal_precision* self= (grib_accessor_decimal_precision*)a; + grib_handle* h=a->parent->h; + + if((ret = grib_get_long_internal(h,self->decimal_scale_factor,val)) + != GRIB_SUCCESS) return ret; + + *len =1; + return ret; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + long bitsPerValue=0; + double* values=NULL; + size_t size=0; + int ret=0; + grib_accessor_decimal_precision* self= (grib_accessor_decimal_precision*)a; + grib_context* c=a->parent->h->context; + grib_handle* h=a->parent->h; + + if (!self->values) { + if((ret = grib_set_long_internal(h, self->bits_per_value,0)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_set_long_internal(h, self->decimal_scale_factor,*val)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_set_long_internal(h, self->changing_precision,1)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + return GRIB_SUCCESS; + } + + if ( (ret=grib_get_size(h,self->values,&size)) != GRIB_SUCCESS) return ret; + + values=(double*)grib_context_malloc(c,size*sizeof(double)); + if (!values) return GRIB_OUT_OF_MEMORY; + + if((ret = grib_get_double_array_internal(h,self->values,values,&size)) + != GRIB_SUCCESS) { + grib_context_buffer_free(c,values); + return ret; + } + + if((ret = grib_set_long_internal(h, self->decimal_scale_factor,*val)) + != GRIB_SUCCESS) { + grib_context_buffer_free(c,values); + return ret; + } + + if((ret = grib_set_long_internal(h, self->bits_per_value,bitsPerValue)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + if((ret = grib_set_long_internal(h, self->changing_precision,1)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + if((ret = grib_set_double_array_internal(h, self->values,values,size)) + != GRIB_SUCCESS) { + grib_context_buffer_free(c,values); + return ret; + } + + grib_context_free(c,values); + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_accessor_class_dirty.c b/src/grib_accessor_class_dirty.c new file mode 100644 index 000000000..512381e4a --- /dev/null +++ b/src/grib_accessor_class_dirty.c @@ -0,0 +1,161 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************ + * Enrico Fucile + **********************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = pack_long + IMPLEMENTS = init + MEMBERS = const char* accessor + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_dirty { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in dirty */ + const char* accessor; +} grib_accessor_dirty; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_dirty = { + &grib_accessor_class_long, /* super */ + "dirty", /* name */ + sizeof(grib_accessor_dirty), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_dirty = &_grib_accessor_class_dirty; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_dirty* self = (grib_accessor_dirty*)a; + self->accessor = grib_arguments_get_name(a->parent->h,c,0); + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + a->length=0; +} + +static int pack_long (grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_dirty* self = (grib_accessor_dirty*)a; + grib_accessor* x=grib_find_accessor(a->parent->h,self->accessor); + + if (x) x->dirty=*val; + + return GRIB_SUCCESS; +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_dirty* self = (grib_accessor_dirty*)a; + grib_accessor* x=grib_find_accessor(a->parent->h,self->accessor); + + if (x) x->dirty=1; + + *val=1; + + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_divdouble.c b/src/grib_accessor_class_divdouble.c new file mode 100644 index 000000000..e712a060b --- /dev/null +++ b/src/grib_accessor_class_divdouble.c @@ -0,0 +1,169 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/***************************************** + * Enrico Fucile + ****************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double + IMPLEMENTS = init + MEMBERS = const char* val + MEMBERS = double divisor + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_divdouble { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in divdouble */ + const char* val; + double divisor; +} grib_accessor_divdouble; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_divdouble = { + &grib_accessor_class_double, /* super */ + "divdouble", /* name */ + sizeof(grib_accessor_divdouble), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_divdouble = &_grib_accessor_class_divdouble; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_divdouble* self = (grib_accessor_divdouble*)a; + int n = 0; + + self->val = grib_arguments_get_name(a->parent->h,c,n++); + self->divisor = grib_arguments_get_double(a->parent->h,c,n++); +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_divdouble* self = (grib_accessor_divdouble*)a; + int ret = GRIB_SUCCESS; + long ivalue = 0; + double value = 0; + + if(*len < 1) + { + *len = 1; + return GRIB_ARRAY_TOO_SMALL; + } + + + ret = grib_get_long_internal(a->parent->h, self->val, &ivalue); + + value = ivalue; + + if(ret != GRIB_SUCCESS ) + return ret; + + /* fprintf(stdout,"\nname %s %s %g/%g\n",a->name ,self->val,value,divisor);*/ + *val = value/self->divisor; + + *len = 1; + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_double.c b/src/grib_accessor_class_double.c new file mode 100644 index 000000000..306c49327 --- /dev/null +++ b/src/grib_accessor_class_double.c @@ -0,0 +1,224 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************************ + * Enrico Fucile + ***********************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = get_native_type;unpack_string + IMPLEMENTS = pack_missing; + IMPLEMENTS = dump + IMPLEMENTS = compare + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_missing(grib_accessor*); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_double { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +} grib_accessor_double; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_double = { + &grib_accessor_class_gen, /* super */ + "double", /* name */ + sizeof(grib_accessor_double), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + &pack_missing, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_double = &_grib_accessor_class_double; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_DOUBLE; +} + + +static int unpack_string(grib_accessor*a , char* v, size_t *len){ + + double val = 0; + size_t l = 1; + char repres[1024]; + + grib_unpack_double (a , &val, &l); + + if ((val == GRIB_MISSING_DOUBLE) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) ) + sprintf(repres,"MISSING"); + else + sprintf(repres,"%g", val); + + l = strlen(repres)+1; + + if(l >*len ){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_long : unpack_string : Buffer too small for %s ", a->name ); + + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, "grib_accessor_long: Casting double %s to string ", a->name); + + *len = l; + + strcpy(v,repres); + return GRIB_SUCCESS; + + +} +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_values(dumper,a); +} + +static int compare(grib_accessor* a, grib_accessor* b) { + int retval=0; + double *aval=0; + double *bval=0; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + aval=grib_context_malloc(a->parent->h->context,alen*sizeof(double)); + bval=grib_context_malloc(b->parent->h->context,blen*sizeof(double)); + + grib_unpack_double(a,aval,&alen); + grib_unpack_double(b,bval,&blen); + + retval = GRIB_SUCCESS; + while (alen != 0) { + if (*bval != *aval) retval = GRIB_DOUBLE_VALUE_MISMATCH; + alen--; + } + + grib_context_free(a->parent->h->context,aval); + grib_context_free(b->parent->h->context,bval); + + return retval; + +} + +static int pack_missing(grib_accessor* a){ + + size_t one = 1; + double value = GRIB_MISSING_DOUBLE; + + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + return grib_pack_double(a,&value,&one); + return GRIB_VALUE_CANNOT_BE_MISSING; +} + +/* +static int is_missing(grib_accessor* a){ + + size_t one = 1; + double value = GRIB_MISSING_DOUBLE; + + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + { + int e=grib_unpack_double(a,&value,&one); + Assert(e == 0); + return value == GRIB_MISSING_DOUBLE; + } + return 0; +} +*/ diff --git a/src/grib_accessor_class_element.c b/src/grib_accessor_class_element.c new file mode 100644 index 000000000..c4b659f4e --- /dev/null +++ b/src/grib_accessor_class_element.c @@ -0,0 +1,211 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long; + IMPLEMENTS = init + MEMBERS=const char* array + MEMBERS=long element + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_element { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in element */ + const char* array; + long element; +} grib_accessor_element; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_element = { + &grib_accessor_class_long, /* super */ + "element", /* name */ + sizeof(grib_accessor_element), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_element = &_grib_accessor_class_element; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_element* self = (grib_accessor_element*)a; + int n = 0; + + self->array = grib_arguments_get_name(a->parent->h,c,n++); + self->element = grib_arguments_get_long(a->parent->h,c,n++); + +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_element* self = (grib_accessor_element*)a; + int ret = 0; + size_t size=0; + long* ar=NULL; + grib_context* c=a->parent->h->context; + + if(*len < 1){ + ret = GRIB_ARRAY_TOO_SMALL; + return ret; + } + + if((ret = grib_get_size(a->parent->h, self->array,&size)) != GRIB_SUCCESS) + return ret; + + ar=grib_context_malloc_clear(c,size*sizeof(long)); + if (!ar) { + grib_context_log(c,GRIB_LOG_ERROR,"unable to allocate %d bytes",size*sizeof(long)); + return GRIB_OUT_OF_MEMORY; + } + + if((ret = grib_get_long_array_internal(a->parent->h, self->array,ar,&size)) != GRIB_SUCCESS) + return ret; + + if (self->element>=size) return GRIB_INTERNAL_ERROR; + *val=ar[self->element]; + + grib_context_free(c,ar); + return ret; +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_element* self = (grib_accessor_element*)a; + int ret = 0; + size_t size=0; + long* ar=NULL; + grib_context* c=a->parent->h->context; + + if(*len < 1){ + ret = GRIB_ARRAY_TOO_SMALL; + return ret; + } + + if((ret = grib_get_size(a->parent->h, self->array,&size)) != GRIB_SUCCESS) + return ret; + + ar=grib_context_malloc_clear(c,size*sizeof(long)); + if (!ar) { + grib_context_log(c,GRIB_LOG_ERROR,"unable to allocate %d bytes",size*sizeof(long)); + return GRIB_OUT_OF_MEMORY; + } + + if((ret = grib_get_long_array_internal(a->parent->h, self->array,ar,&size)) != GRIB_SUCCESS) + return ret; + + + ar[self->element]=*val; + + if((ret = grib_set_long_array_internal(a->parent->h, self->array,ar,size)) != GRIB_SUCCESS) + return ret; + + grib_context_free(c,ar); + return ret; +} + diff --git a/src/grib_accessor_class_evaluate.c b/src/grib_accessor_class_evaluate.c new file mode 100644 index 000000000..f7995274e --- /dev/null +++ b/src/grib_accessor_class_evaluate.c @@ -0,0 +1,153 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init + MEMBERS= grib_arguments* arg + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_evaluate { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in evaluate */ + grib_arguments* arg; +} grib_accessor_evaluate; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_evaluate = { + &grib_accessor_class_long, /* super */ + "evaluate", /* name */ + sizeof(grib_accessor_evaluate), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_evaluate = &_grib_accessor_class_evaluate; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_evaluate* self = (grib_accessor_evaluate*)a; + self->arg = c; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len){ + + return GRIB_NOT_IMPLEMENTED; + +} + + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_accessor_evaluate* self = (grib_accessor_evaluate*)a; + grib_expression* e = grib_arguments_get_expression(a->parent->h,self->arg,0); + + + ret = grib_expression_evaluate_long(a->parent->h,e,val); + *len = 1; + + return ret; +} + diff --git a/src/grib_accessor_class_forward.c b/src/grib_accessor_class_forward.c new file mode 100644 index 000000000..0215cdd00 --- /dev/null +++ b/src/grib_accessor_class_forward.c @@ -0,0 +1,145 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + SUPER= grib_accessor_class_gen + CLASS = accessor + IMPLEMENTS = init;dump + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_forward { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in forward */ +} grib_accessor_forward; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_forward = { + &grib_accessor_class_gen, /* super */ + "forward", /* name */ + sizeof(grib_accessor_forward), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_forward = &_grib_accessor_class_forward; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + /* a->alias = grib_arguments_get_name(a->parent->h,c,0); */ +} + + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + +#if 0 + /* grib_accessor_forward* self = (grib_accessor_forward*)a; */ + grib_accessor *target = grib_find_accessor(a->parent->h,a->alias); + if(target) { + grib_dump_label(dumper,a,"is:"); + dumper->depth += 2; + grib_print_accessor(target, dumper); + dumper->depth -= 2; + } + else grib_dump_label(dumper,a," undefined "); +#endif +} + diff --git a/src/grib_accessor_class_from_scale_factor_scaled_value.c b/src/grib_accessor_class_from_scale_factor_scaled_value.c new file mode 100644 index 000000000..ac2fe77ab --- /dev/null +++ b/src/grib_accessor_class_from_scale_factor_scaled_value.c @@ -0,0 +1,184 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double;is_missing + IMPLEMENTS = init + MEMBERS=const char* scaleFactor + MEMBERS=const char* scaledValue + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int is_missing(grib_accessor*); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_from_scale_factor_scaled_value { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in from_scale_factor_scaled_value */ + const char* scaleFactor; + const char* scaledValue; +} grib_accessor_from_scale_factor_scaled_value; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_from_scale_factor_scaled_value = { + &grib_accessor_class_double, /* super */ + "from_scale_factor_scaled_value", /* name */ + sizeof(grib_accessor_from_scale_factor_scaled_value), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + &is_missing, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_from_scale_factor_scaled_value = &_grib_accessor_class_from_scale_factor_scaled_value; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_from_scale_factor_scaled_value* self = (grib_accessor_from_scale_factor_scaled_value*)a; + int n = 0; + + self->scaleFactor = grib_arguments_get_name(a->parent->h,c,n++); + self->scaledValue = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) { + grib_accessor_from_scale_factor_scaled_value* self = (grib_accessor_from_scale_factor_scaled_value*)a; + int ret = 0; + long scaleFactor=0; + long scaledValue=0; + + if((ret = grib_get_long_internal(a->parent->h, self->scaleFactor,&scaleFactor)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->scaledValue,&scaledValue)) != GRIB_SUCCESS) + return ret; + + *val=scaledValue; + while (scaleFactor <0) {*val*=10;scaleFactor++;} + while (scaleFactor >0) {*val/=10;scaleFactor--;} + + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + + +static int is_missing(grib_accessor* a){ + grib_accessor_from_scale_factor_scaled_value* self = (grib_accessor_from_scale_factor_scaled_value*)a; + int ret = 0; + long scaleFactor=0; + long scaledValue=0; + + if((ret = grib_get_long_internal(a->parent->h, self->scaleFactor,&scaleFactor)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->scaledValue,&scaledValue)) + != GRIB_SUCCESS) + return ret; + + return ((scaleFactor == GRIB_MISSING_LONG) | (scaledValue == GRIB_MISSING_LONG)); +} + diff --git a/src/grib_accessor_class_g1_half_byte_codeflag.c b/src/grib_accessor_class_g1_half_byte_codeflag.c new file mode 100644 index 000000000..ec8c6485f --- /dev/null +++ b/src/grib_accessor_class_g1_half_byte_codeflag.c @@ -0,0 +1,194 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump + IMPLEMENTS = get_native_type + IMPLEMENTS = compare + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_g1_half_byte_codeflag { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in g1_half_byte_codeflag */ +} grib_accessor_g1_half_byte_codeflag; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_g1_half_byte_codeflag = { + &grib_accessor_class_gen, /* super */ + "g1_half_byte_codeflag", /* name */ + sizeof(grib_accessor_g1_half_byte_codeflag), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1_half_byte_codeflag = &_grib_accessor_class_g1_half_byte_codeflag; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + a->length = 0; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + + unsigned char dat = 0; + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + dat = a->parent->h->buffer->data[a->offset] & 0x0f; + + + *val = dat; + *len = 1; + return GRIB_SUCCESS; +} + +static int pack_long (grib_accessor* a, const long *val, size_t *len) +{ + int ret = 0; + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } +/* printf("HALF BYTE pack long %ld %02x\n",*val,a->parent->h->buffer->data[a->offset]);*/ + a->parent->h->buffer->data[a->offset] = (a->parent->h->buffer->data[a->offset] & 0xf0) | (*val & 0x0f); +/* printf("HALF BYTE pack long %ld %02x\n",*val,a->parent->h->buffer->data[a->offset]);*/ + + *len = 1; + return ret; +} + +static int get_native_type(grib_accessor* a) +{ + return GRIB_TYPE_LONG; +} + +static int compare(grib_accessor* a,grib_accessor* b) { + long aval=0; + long bval=0; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen !=1 || blen != 1) return GRIB_COUNT_MISMATCH; + + grib_unpack_long(a,&aval,&alen); + grib_unpack_long(b,&bval,&blen); + + if (bval != aval) return GRIB_VALUE_MISMATCH; + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_g1_increment.c b/src/grib_accessor_class_g1_increment.c new file mode 100644 index 000000000..358e946e3 --- /dev/null +++ b/src/grib_accessor_class_g1_increment.c @@ -0,0 +1,276 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************* + * Enrico Fucile + ***********************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = init + MEMBERS=const char* directionIncrementGiven + MEMBERS=const char* directionIncrement + MEMBERS=const char* first + MEMBERS=const char* last + MEMBERS=const char* numberOfPoints + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1_increment { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in g1_increment */ + const char* directionIncrementGiven; + const char* directionIncrement; + const char* first; + const char* last; + const char* numberOfPoints; +} grib_accessor_g1_increment; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_g1_increment = { + &grib_accessor_class_double, /* super */ + "g1_increment", /* name */ + sizeof(grib_accessor_g1_increment), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1_increment = &_grib_accessor_class_g1_increment; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g1_increment* self = (grib_accessor_g1_increment*)a; + int n = 0; + + self->directionIncrementGiven = grib_arguments_get_name(a->parent->h,c,n++); + self->directionIncrement = grib_arguments_get_name(a->parent->h,c,n++); + self->first = grib_arguments_get_name(a->parent->h,c,n++); + self->last = grib_arguments_get_name(a->parent->h,c,n++); + self->numberOfPoints = grib_arguments_get_name(a->parent->h,c,n++); +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_g1_increment* self = (grib_accessor_g1_increment*)a; + int ret = 0; + + long directionIncrementGiven=0; + long directionIncrement; + double first = 0; + double last = 0; + long numberOfPoints = 0; + + if(*len < 1) + ret = GRIB_ARRAY_TOO_SMALL; + + if((ret = grib_get_long_internal(a->parent->h, self->directionIncrementGiven,&directionIncrementGiven)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->directionIncrement,&directionIncrement)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_double_internal(a->parent->h, self->first,&first)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_double_internal(a->parent->h, self->last,&last)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->numberOfPoints,&numberOfPoints)) + != GRIB_SUCCESS) + return ret; + + if (!directionIncrementGiven || directionIncrement == GRIB_MISSING_LONG) { + *val = fabs(last-first)/(double)(numberOfPoints-1); + } else { + *val = (double)directionIncrement/1000.0; + } + +#if 0 + printf("unpack -- %s=%ld %s=%ld %s=%f %s=%f %s=%ld %s=%f\n", + self->directionIncrementGiven,directionIncrementGiven, + self->directionIncrement,directionIncrement, + self->last,last, + self->first,first, + self->numberOfPoints,numberOfPoints, + a->name,*val); +#endif + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_g1_increment* self = (grib_accessor_g1_increment*)a; + int ret = 0; + long codedNumberOfPoints=0; + + long directionIncrementGiven=0; + long directionIncrement; + double first = 0; + double last = 0; + long numberOfPoints = 0; + double incrementInMillidegrees; + + ret = grib_get_double_internal(a->parent->h, self->first,&first); + if(ret != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->first, ret); + return ret; + } + ret = grib_get_double_internal(a->parent->h, self->last,&last); + if(ret != GRIB_SUCCESS){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->last, ret); + return ret; + } + + if((ret = grib_get_long_internal(a->parent->h, self->directionIncrementGiven,&directionIncrementGiven)) + != GRIB_SUCCESS){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->directionIncrementGiven, ret); + return ret; + } + + numberOfPoints = 1+rint(fabs((last-first) / *val)); + + incrementInMillidegrees = *val * 1000; + if ((int)incrementInMillidegrees == incrementInMillidegrees ) { + directionIncrement=(int)incrementInMillidegrees; + } else { + directionIncrement=0xffffff; + directionIncrementGiven=0; + } + + ret = grib_set_long_internal(a->parent->h, self->numberOfPoints,numberOfPoints); + if(ret ) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->numberOfPoints, ret); + + + grib_get_long_internal(a->parent->h, self->numberOfPoints,&codedNumberOfPoints); + + + ret = grib_set_long_internal(a->parent->h, self->directionIncrement,directionIncrement); + if(ret ) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->directionIncrement, ret); + + ret = grib_set_long_internal(a->parent->h, self->directionIncrementGiven,directionIncrementGiven); + if(ret ) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->directionIncrementGiven, ret); + +#if 0 + printf("pack -- %s=%ld %s=%ld %s=%f %s=%f %s=%ld codedNumberOfPoints=%ld %s=%f\n", + self->directionIncrementGiven,directionIncrementGiven, + self->directionIncrement,directionIncrement, + self->last,last, + self->first,first, + self->numberOfPoints,numberOfPoints, + codedNumberOfPoints, + a->name,*val); +#endif + + + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + diff --git a/src/grib_accessor_class_g1_message_length.c b/src/grib_accessor_class_g1_message_length.c new file mode 100644 index 000000000..0c121f375 --- /dev/null +++ b/src/grib_accessor_class_g1_message_length.c @@ -0,0 +1,257 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_section_length + IMPLEMENTS = init;unpack_long;pack_long + MEMBERS = const char *sec4_length + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1_message_length { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in section_length */ +/* Members defined in g1_message_length */ + const char *sec4_length; +} grib_accessor_g1_message_length; + +extern grib_accessor_class* grib_accessor_class_section_length; + +static grib_accessor_class _grib_accessor_class_g1_message_length = { + &grib_accessor_class_section_length, /* super */ + "g1_message_length", /* name */ + sizeof(grib_accessor_g1_message_length), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1_message_length = &_grib_accessor_class_g1_message_length; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* args ) +{ + grib_accessor_g1_message_length *self = (grib_accessor_g1_message_length*)a; + self->sec4_length = grib_arguments_get_name(a->parent->h,args,0); +} + +int grib_get_g1_message_size(grib_handle* h,grib_accessor* tl,grib_accessor* s4, + long* total_length,long* sec4_len) +{ + unsigned long tlen,slen; + long off; + + if(!tl) return GRIB_NOT_FOUND; + if(!s4) { + *sec4_len = 0; + off = tl->offset * 8; + *total_length = grib_decode_unsigned_long(h->buffer->data, &off, tl->length * 8); + return GRIB_SUCCESS; + } + + off = tl->offset * 8; + tlen = grib_decode_unsigned_long(h->buffer->data, &off, tl->length * 8); + + off = s4->offset * 8; + slen = grib_decode_unsigned_long(h->buffer->data, &off, s4->length * 8); + + /* printf("\nlarge grib tlen=%ld slen=%ld diff=%ld\n",tlen&0x7fffff,slen,tlen-slen); */ + + if(slen < 120 && (tlen & 0x800000)) + { + /* printf("DECODING large grib tlen=%ld slen=%ld\n",tlen,slen); */ + + tlen &= 0x7fffff; + tlen *= 120; + tlen -= slen; + tlen += 4; + + slen = tlen - s4->offset - 4; /* 4 is for 7777 */; + + + + /*printf("DECODING large grib total=%ld section4=%ld\n",tlen,slen);*/ + } + + *total_length = tlen; + *sec4_len = slen; + + return GRIB_SUCCESS; +} + + +static int pack_long(grib_accessor* a, const long* val,size_t *len) +{ + grib_accessor_g1_message_length *self = (grib_accessor_g1_message_length*)a; + grib_accessor_class* super = *(a->cclass->super); + + /* Here we assume that the totalLength will be coded AFTER the section4 length, and + the section4 length will be overwritten by the totalLength accessor for large GRIBs */ + + grib_accessor* s4 = grib_find_accessor(a->parent->h,self->sec4_length); + long tlen,slen; + long t120; + int ret; + + + + tlen = *val; + if((tlen < 0x800000 || !a->parent->h->context->gribex_mode_on) && tlen < 0xFFFFFF ) + { + /* printf("ENCODING small grib total = %ld\n",tlen); */ + return super->pack_long(a,val,len); + } + + if(!s4) return GRIB_NOT_FOUND; + + /* special case for large GRIBs */ + + tlen -= 4; + t120 = (tlen+119)/120; + slen = t120*120 - tlen; + + + tlen = 0x800000 | t120; + + + /* printf("ENCODING large grib total = %ld tlen=%ld slen=%ld \n",*val,tlen,slen); */ + + *len = 1; + if((ret = grib_pack_long(s4,&slen,len)) != GRIB_SUCCESS) + return ret; + + *len = 1; + if((ret = super->pack_long(a,&tlen,len)) != GRIB_SUCCESS) + return ret; + + { + long total_length = -1, sec4_length = -1; + grib_get_g1_message_size(a->parent->h, + a, + grib_find_accessor(a->parent->h,self->sec4_length), + &total_length, + &sec4_length); + + Assert(total_length == *val); + + } + + return GRIB_SUCCESS; +} + +static int unpack_long(grib_accessor* a, long* val,size_t *len) +{ + grib_accessor_g1_message_length *self = (grib_accessor_g1_message_length*)a; + int ret; + + long total_length, sec4_length; + + if((ret = grib_get_g1_message_size(a->parent->h, + a, + grib_find_accessor(a->parent->h,self->sec4_length), + &total_length, + &sec4_length)) != GRIB_SUCCESS) + return ret; + + + *val = total_length; + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_g1_section4_length.c b/src/grib_accessor_class_g1_section4_length.c new file mode 100644 index 000000000..c00251d3d --- /dev/null +++ b/src/grib_accessor_class_g1_section4_length.c @@ -0,0 +1,167 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_section_length + IMPLEMENTS = init;unpack_long;pack_long + MEMBERS = const char* total_length + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1_section4_length { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in section_length */ +/* Members defined in g1_section4_length */ + const char* total_length; +} grib_accessor_g1_section4_length; + +extern grib_accessor_class* grib_accessor_class_section_length; + +static grib_accessor_class _grib_accessor_class_g1_section4_length = { + &grib_accessor_class_section_length, /* super */ + "g1_section4_length", /* name */ + sizeof(grib_accessor_g1_section4_length), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1_section4_length = &_grib_accessor_class_g1_section4_length; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void init(grib_accessor* a, const long len , grib_arguments* args ) +{ + grib_accessor_g1_section4_length *self = (grib_accessor_g1_section4_length*)a; + self->total_length = grib_arguments_get_name(a->parent->h,args,0); +} + +static int pack_long(grib_accessor* a, const long* val,size_t *len) +{ + grib_accessor_class* super = *(a->cclass->super); + + /* Here we assume that the totalLength will be coded AFTER the section4 length, and + the section4 length will be overwritten by the totalLength accessor for large GRIBs */ + + /*printf("UPDATING sec4len %ld\n",*val);*/ + + return super->pack_long(a,val,len); +} + +static int unpack_long(grib_accessor* a, long* val,size_t *len) +{ + grib_accessor_g1_section4_length *self = (grib_accessor_g1_section4_length*)a; + int ret; + + long total_length, sec4_length; + + if((ret = grib_get_g1_message_size(a->parent->h, + grib_find_accessor(a->parent->h,self->total_length), + a, + &total_length, + &sec4_length)) != GRIB_SUCCESS) + return ret; + + + *val = sec4_length; + + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_g1area.c b/src/grib_accessor_class_g1area.c new file mode 100644 index 000000000..210fecba9 --- /dev/null +++ b/src/grib_accessor_class_g1area.c @@ -0,0 +1,228 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = pack_double;unpack_string + IMPLEMENTS = init;dump + IMPLEMENTS = unpack_double + MEMBERS=const char* laf + MEMBERS=const char* lof + MEMBERS=const char* lal + MEMBERS=const char* lol + MEMBERS=const char* div + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1area { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in g1area */ + const char* laf; + const char* lof; + const char* lal; + const char* lol; + const char* div; +} grib_accessor_g1area; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_g1area = { + &grib_accessor_class_double, /* super */ + "g1area", /* name */ + sizeof(grib_accessor_g1area), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1area = &_grib_accessor_class_g1area; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g1area* self = (grib_accessor_g1area*)a; + int n = 0; + + self->laf = grib_arguments_get_name(a->parent->h,c,n++); + self->lof = grib_arguments_get_name(a->parent->h,c,n++); + self->lal = grib_arguments_get_name(a->parent->h,c,n++); + self->lol = grib_arguments_get_name(a->parent->h,c,n++); + +} + + +static int pack_double (grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_g1area* self = (grib_accessor_g1area*)a; + int ret = 0; + + ret = grib_set_double_internal(a->parent->h, self->laf,val[0]); + if(ret ) return ret; + ret = grib_set_double_internal(a->parent->h, self->lof,val[1]); + if(ret ) return ret; + ret = grib_set_double_internal(a->parent->h, self->lal,val[2]); + if(ret) return ret; + + ret = grib_set_double_internal(a->parent->h, self->lol,val[3]); + if(ret ) return ret; + + if (ret == GRIB_SUCCESS) *len = 4; + + return ret; +} +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_g1area* self = (grib_accessor_g1area*)a; + int ret = 0; + + if(*len < 4){ + *len = 4; + return GRIB_BUFFER_TOO_SMALL; + } + + ret = grib_get_double_internal(a->parent->h, self->laf,val++); + if(ret) return ret; + + ret = grib_get_double_internal(a->parent->h, self->lof,val++); + if(ret) return ret; + + ret = grib_get_double_internal(a->parent->h, self->lal,val++); + if(ret) return ret; + + ret = grib_get_double_internal(a->parent->h, self->lol,val); + if(ret ) return ret; + + if (ret == GRIB_SUCCESS) *len = 4; + + return ret; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_string(dumper,a,NULL); +} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + grib_accessor_g1area* self = (grib_accessor_g1area*)a; + int ret = 0; + + double laf,lof,lal,lol; + + ret = grib_get_double_internal(a->parent->h, self->laf,&laf); + if(ret) return ret; + ret = grib_get_double_internal(a->parent->h, self->lof,&lof); + if(ret) return ret; + ret = grib_get_double_internal(a->parent->h, self->lal,&lal); + if(ret) return ret; + ret = grib_get_double_internal(a->parent->h, self->lol,&lol); + if(ret) return ret; + if(*len < 60) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " Buffer too smalle for %s (%d) ", a->name ,*len); + len = 0; + return GRIB_BUFFER_TOO_SMALL; + } + + + sprintf(val,"N:%3.5f W:%3.5f S:%3.5f E:%3.5f",((float)laf),((float)lof),((float)lal),((float)lol)); + + len[0] = strlen(val); + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_g1bitmap.c b/src/grib_accessor_class_g1bitmap.c new file mode 100644 index 000000000..ee608e609 --- /dev/null +++ b/src/grib_accessor_class_g1bitmap.c @@ -0,0 +1,237 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_bitmap + IMPLEMENTS = pack_double; unpack_bytes + IMPLEMENTS = value_count + IMPLEMENTS = init; + MEMBERS=const char* unusedBits + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_bytes (grib_accessor*,unsigned char*, size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1bitmap { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +/* Members defined in bitmap */ + const char* tableReference; + const char* missing_value; + const char* offsetbsec; + const char* sLength; +/* Members defined in g1bitmap */ + const char* unusedBits; +} grib_accessor_g1bitmap; + +extern grib_accessor_class* grib_accessor_class_bitmap; + +static grib_accessor_class _grib_accessor_class_g1bitmap = { + &grib_accessor_class_bitmap, /* super */ + "g1bitmap", /* name */ + sizeof(grib_accessor_g1bitmap), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + &unpack_bytes, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1bitmap = &_grib_accessor_class_g1bitmap; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void grib_set_bit_on( unsigned char* p, long *bitp); + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + + grib_accessor_g1bitmap* self = (grib_accessor_g1bitmap*)a; + + self->unusedBits = grib_arguments_get_name(a->parent->h,arg,4); + +} + + +static int pack_double(grib_accessor* a, const double* val,size_t *len){ + grib_accessor_g1bitmap* self = (grib_accessor_g1bitmap*)a; + + size_t tlen; + + unsigned char* buf = NULL; + long i; + int err = 0; + long pos = 0; + long bmaplen = 0; + const int bit_padding = 16; + double miss_values = 0; + tlen = ((*len+bit_padding-1)/bit_padding*bit_padding)/8; + + if((err = grib_get_double_internal(a->parent->h, self->missing_value, &miss_values)) + != GRIB_SUCCESS) + return err; + + buf = grib_context_malloc_clear(a->parent->h->context,tlen); + if(!buf) return GRIB_OUT_OF_MEMORY; + pos=0; + for(i=0;i<*len;i++) + { + if (val[i] == miss_values) + pos++; + else{ + bmaplen++; + grib_set_bit_on(buf, &pos); + } + } + + if((err = grib_set_long_internal(a->parent->h, self->unusedBits,tlen*8 - *len )) + != GRIB_SUCCESS) + return err; + + grib_buffer_replace(a, buf, tlen,1,1); + + grib_context_free(a->parent->h->context,buf); + + return GRIB_SUCCESS; +} + + +static long value_count(grib_accessor* a) +{ + grib_accessor_g1bitmap* self = (grib_accessor_g1bitmap*)a; + long tlen; + int err; + + if ((err=grib_get_long_internal(a->parent->h, self->unusedBits, &tlen)) != GRIB_SUCCESS) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_class_bitmap.value_count : cannot get %s err=%d",self->unusedBits,err); + + tlen = (a->length*8)-tlen; + return tlen; +} + +static int unpack_bytes(grib_accessor* a, unsigned char* val, size_t *len) +{ + unsigned char* buf = a->parent->h->buffer->data; + grib_accessor_g1bitmap* self = (grib_accessor_g1bitmap*)a; + long tlen; + int err; + long length = grib_byte_count(a); + long offset = grib_byte_offset(a); + + if(*len < length ) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it is %d bytes long\n", a->name ,length ); + *len = length; + return GRIB_ARRAY_TOO_SMALL; + } + + if ((err=grib_get_long_internal(a->parent->h, self->unusedBits, &tlen)) != GRIB_SUCCESS) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "grib_accessor_class_bitmap.unpack_bytes : cannot get %s err=%d",self->unusedBits,err); + + length-= tlen/8; + memcpy(val,buf + offset,length ); + *len = length; + + return GRIB_SUCCESS; +} + +static void grib_set_bit_on( unsigned char* p, long *bitp){ + unsigned char o = 1; + p += (*bitp >> 3); + o <<= 7-((*bitp)%8); + *p |= o; + (*bitp)+=1; +} + + diff --git a/src/grib_accessor_class_g1date.c b/src/grib_accessor_class_g1date.c new file mode 100644 index 000000000..cb0dd9ef9 --- /dev/null +++ b/src/grib_accessor_class_g1date.c @@ -0,0 +1,298 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************ + * Enrico Fucile + ***********************************/ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long;unpack_string + IMPLEMENTS = init;dump;value_count + MEMBERS=const char* century + MEMBERS=const char* year + MEMBERS=const char* month + MEMBERS=const char* day + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1date { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g1date */ + const char* century; + const char* year; + const char* month; + const char* day; +} grib_accessor_g1date; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g1date = { + &grib_accessor_class_long, /* super */ + "g1date", /* name */ + sizeof(grib_accessor_g1date), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1date = &_grib_accessor_class_g1date; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g1date* self = (grib_accessor_g1date*)a; + int n = 0; + + self->century = grib_arguments_get_name(a->parent->h,c,n++); + self->year = grib_arguments_get_name(a->parent->h,c,n++); + self->month = grib_arguments_get_name(a->parent->h,c,n++); + self->day = grib_arguments_get_name(a->parent->h,c,n++); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_accessor_g1date* self = (grib_accessor_g1date*)a; + + long year = 0; + long century = 0; + long month = 0; + long day = 0; + + if ((ret=grib_get_long_internal(a->parent->h, self->century,¢ury))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->day,&day))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->month,&month))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->year,&year))!=GRIB_SUCCESS) + return ret; + + if(*len < 1) + return GRIB_WRONG_ARRAY_SIZE; + + *val = ((century-1)*100 + year) * 10000 + month * 100 + day; + + if(year == 255 && day == 255 && month >= 1 && month <= 12) + { + *val = month; + } + + if(year == 255 && day != 255 && month >= 1 && month <= 12) + { + *val = month * 100 + day; + } + + return GRIB_SUCCESS; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + int ret=0; + long v = val[0]; + grib_accessor_g1date* self = (grib_accessor_g1date*)a; + + long year = 0; + long century = 0; + long month = 0; + long day = 0; + + if(*len != 1) + return GRIB_WRONG_ARRAY_SIZE; + + { + long d = grib_julian_to_date((long)grib_date_to_julian(v)); + if(v != d) + { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"grib_accessor_g1date: pack_long invalid date %ld, changed to %ld",v,d); + return GRIB_ENCODING_ERROR; + } + } + + century = v / 1000000; v %= 1000000; + year = v / 10000; v %= 10000; + month = v / 100; v %= 100; + day = v; + + if(year == 0) + year = 100; + else + century++; + + if ((ret=grib_set_long_internal(a->parent->h,self->century,century))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_set_long_internal(a->parent->h,self->day,day))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_set_long_internal(a->parent->h,self->month,month))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_set_long_internal(a->parent->h,self->year,year))!=GRIB_SUCCESS) + return ret; + + return GRIB_SUCCESS; +} + +static char* months[] = { + "jan","feb","mar","apr", + "may","jun","jul","aug", + "sep","oct","nov","dec", +}; + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + int ret=0; + char tmp[1024]; + grib_accessor_g1date* self = (grib_accessor_g1date*)a; + long year = 0; + long century = 0; + long month = 0; + long day = 0; + size_t l; + + if ((ret=grib_get_long_internal(a->parent->h, self->century,¢ury))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->day,&day))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->month,&month))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->year,&year))!=GRIB_SUCCESS) + return ret; + + if(*len < 1) + return GRIB_WRONG_ARRAY_SIZE; + + if(year == 255 && day == 255 && month >= 1 && month <= 12) + { + strcpy(tmp,months[month-1]); + } + else if(year == 255 && month >= 1 && month <= 12) + { + sprintf(tmp,"%s-%02ld",months[month-1],day); + /* sprintf(tmp,"%02ld-%02ld",month,day); */ + } + else + { + long x = ((century-1)*100 + year) * 10000 + month * 100 + day; + sprintf(tmp,"%ld",x); + } + + l = strlen(tmp) + 1; + if(*len < l) + { + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } + + *len = l; + strcpy(val,tmp); + + + return GRIB_SUCCESS; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + diff --git a/src/grib_accessor_class_g1day_of_the_year_date.c b/src/grib_accessor_class_g1day_of_the_year_date.c new file mode 100644 index 000000000..e27deaf58 --- /dev/null +++ b/src/grib_accessor_class_g1day_of_the_year_date.c @@ -0,0 +1,188 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_g1date + IMPLEMENTS = unpack_string + IMPLEMENTS = dump + IMPLEMENTS = init + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_string (grib_accessor*, char*, size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1day_of_the_year_date { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g1date */ + const char* century; + const char* year; + const char* month; + const char* day; +/* Members defined in g1day_of_the_year_date */ +} grib_accessor_g1day_of_the_year_date; + +extern grib_accessor_class* grib_accessor_class_g1date; + +static grib_accessor_class _grib_accessor_class_g1day_of_the_year_date = { + &grib_accessor_class_g1date, /* super */ + "g1day_of_the_year_date", /* name */ + sizeof(grib_accessor_g1day_of_the_year_date), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1day_of_the_year_date = &_grib_accessor_class_g1day_of_the_year_date; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_string(dumper,a,NULL); +} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + /* special clim case where each mont have 30 days.. to comply with mars*/ + grib_accessor_g1day_of_the_year_date* self = (grib_accessor_g1day_of_the_year_date*)a; + + + char tmp[1024]; + + long year = 0; + long century = 0; + long month = 0; + long day = 0; + + long fullyear = 0; + long fake_day_of_year = 0; + + + size_t l; + + grib_get_long_internal(a->parent->h, self->century,¢ury); + grib_get_long_internal(a->parent->h, self->day,&day); + grib_get_long_internal(a->parent->h, self->month,&month); + grib_get_long_internal(a->parent->h, self->year,&year); + + if(*len < 1) + return GRIB_BUFFER_TOO_SMALL; + + + fullyear = ((century-1)*100 + year); + fake_day_of_year = ((month-1) * 30) + day; + sprintf(tmp,"%04ld-%03ld",fullyear,fake_day_of_year); + + l = strlen(tmp) + 1; + if(*len < l) + { + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } + + *len = l; + strcpy(val,tmp); + + + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_g1end_of_interval_monthly.c b/src/grib_accessor_class_g1end_of_interval_monthly.c new file mode 100644 index 000000000..6cc900592 --- /dev/null +++ b/src/grib_accessor_class_g1end_of_interval_monthly.c @@ -0,0 +1,235 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_abstract_vector + IMPLEMENTS = unpack_double; destroy + IMPLEMENTS = value_count;compare + IMPLEMENTS = init + MEMBERS = const char* verifyingMonth + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_g1end_of_interval_monthly { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in abstract_vector */ + double* v; + int number_of_elements; +/* Members defined in g1end_of_interval_monthly */ + const char* verifyingMonth; +} grib_accessor_g1end_of_interval_monthly; + +extern grib_accessor_class* grib_accessor_class_abstract_vector; + +static grib_accessor_class _grib_accessor_class_g1end_of_interval_monthly = { + &grib_accessor_class_abstract_vector, /* super */ + "g1end_of_interval_monthly", /* name */ + sizeof(grib_accessor_g1end_of_interval_monthly), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1end_of_interval_monthly = &_grib_accessor_class_g1end_of_interval_monthly; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g1end_of_interval_monthly* self = (grib_accessor_g1end_of_interval_monthly*)a; + int n = 0; + + self->verifyingMonth = grib_arguments_get_name(a->parent->h,c,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + + self->number_of_elements=6; + self->v=(double*)grib_context_malloc(a->parent->h->context, + sizeof(double)*self->number_of_elements); + + a->length=0; + a->dirty=1; +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_g1end_of_interval_monthly* self = (grib_accessor_g1end_of_interval_monthly*)a; + int ret = 0; + char verifyingMonth[7]={0,}; + size_t slen=7; + long year=0,month=0,date=0; + long mdays[]={31,28,31,30,31,30,31,31,30,31,30,31}; + long days=0; + + if (!a->dirty) return GRIB_SUCCESS; + + if((ret=grib_get_string(a->parent->h,self->verifyingMonth,verifyingMonth,&slen)) + != GRIB_SUCCESS) return ret; + + date=atoi(verifyingMonth); + year=date/100; + month=date-year*100; + if ( month == 2 ) { + days=28; + if (year%400 == 0 || ( year%4 == 0 && year%100 != 0) ) days=29; + } else days=mdays[month-1]; + + self->v[0]=year; + self->v[1]=month; + + self->v[2]=days; + self->v[3]=24; + self->v[4]=00; + self->v[5]=00; + + a->dirty=0; + + val[0]=self->v[0]; + val[1]=self->v[1]; + val[2]=self->v[2]; + val[3]=self->v[3]; + val[4]=self->v[4]; + val[5]=self->v[5]; + + return ret; +} + +static long value_count(grib_accessor* a) { + grib_accessor_g1end_of_interval_monthly* self = (grib_accessor_g1end_of_interval_monthly*)a; + return self->number_of_elements; +} + +static void destroy(grib_context* c,grib_accessor* a) +{ + grib_accessor_g1end_of_interval_monthly* self = (grib_accessor_g1end_of_interval_monthly*)a; + grib_context_free(c,self->v); +} + +static int compare(grib_accessor* a, grib_accessor* b) { + int retval=0; + double *aval=0; + double *bval=0; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + aval=grib_context_malloc(a->parent->h->context,alen*sizeof(double)); + bval=grib_context_malloc(b->parent->h->context,blen*sizeof(double)); + + b->dirty=1; + a->dirty=1; + + grib_unpack_double(a,aval,&alen); + grib_unpack_double(b,bval,&blen); + + retval = GRIB_SUCCESS; + while (alen != 0) { + if (*bval != *aval) retval = GRIB_DOUBLE_VALUE_MISMATCH; + alen--; + } + + grib_context_free(a->parent->h->context,aval); + grib_context_free(b->parent->h->context,bval); + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_accessor_class_g1fcperiod.c b/src/grib_accessor_class_g1fcperiod.c new file mode 100644 index 000000000..53a1b11f8 --- /dev/null +++ b/src/grib_accessor_class_g1fcperiod.c @@ -0,0 +1,160 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_g1step_range + IMPLEMENTS = unpack_string + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_string (grib_accessor*, char*, size_t *len); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1fcperiod { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in abstract_long_vector */ + long* v; + long pack_index; + int number_of_elements; +/* Members defined in g1step_range */ + const char* p1; + const char* p2; + const char* timeRangeIndicator; + const char *unit; + const char *step_unit; + const char *stepType; + const char *patch_fp_precip; +/* Members defined in g1fcperiod */ +} grib_accessor_g1fcperiod; + +extern grib_accessor_class* grib_accessor_class_g1step_range; + +static grib_accessor_class _grib_accessor_class_g1fcperiod = { + &grib_accessor_class_g1step_range, /* super */ + "g1fcperiod", /* name */ + sizeof(grib_accessor_g1fcperiod), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1fcperiod = &_grib_accessor_class_g1fcperiod; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + long start = 0, end = 0; + char tmp[1024]; + int err = grib_g1_step_get_steps(a,&start,&end); + size_t l = 0; + + + if(err) return err; + + sprintf(tmp,"%ld-%ld",start/24,end/24); + /*printf("---- FCPERIOD %s [start:%g, end:%g]",tmp,start,end);*/ + + l = strlen(tmp) + 1; + if(*len < l) + { + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } + + *len = l; + strcpy(val,tmp); + + + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_g1forecastmonth.c b/src/grib_accessor_class_g1forecastmonth.c new file mode 100644 index 000000000..7ef7cc932 --- /dev/null +++ b/src/grib_accessor_class_g1forecastmonth.c @@ -0,0 +1,213 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump + MEMBERS=const char* verification_yearmonth + MEMBERS=const char* base_date + MEMBERS=const char* day + MEMBERS=const char* hour + MEMBERS=const char* fcmonth + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1forecastmonth { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g1forecastmonth */ + const char* verification_yearmonth; + const char* base_date; + const char* day; + const char* hour; + const char* fcmonth; +} grib_accessor_g1forecastmonth; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g1forecastmonth = { + &grib_accessor_class_long, /* super */ + "g1forecastmonth", /* name */ + sizeof(grib_accessor_g1forecastmonth), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1forecastmonth = &_grib_accessor_class_g1forecastmonth; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g1forecastmonth* self = (grib_accessor_g1forecastmonth*)a; + int n = 0; + + self->verification_yearmonth = grib_arguments_get_name(a->parent->h,c,n++); + self->base_date = grib_arguments_get_name(a->parent->h,c,n++); + self->day = grib_arguments_get_name(a->parent->h,c,n++); + self->hour = grib_arguments_get_name(a->parent->h,c,n++); + self->fcmonth = grib_arguments_get_name(a->parent->h,c,n++); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_accessor_g1forecastmonth* self = (grib_accessor_g1forecastmonth*)a; + + long verification_yearmonth = 0; + long base_yearmonth = 0; + long base_date = 0; + long day = 0; + long hour = 0; + + long vyear = 0; + long vmonth = 0; + long byear = 0; + long bmonth = 0; + + long fcmonth = 0; + long gribForecastMonth = 0; + + if ((ret=grib_get_long_internal(a->parent->h, + self->verification_yearmonth,&verification_yearmonth))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->base_date,&base_date))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->day,&day))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->hour,&hour))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->fcmonth,&gribForecastMonth))!=GRIB_SUCCESS) + return ret; + + base_yearmonth = base_date / 100; + + vyear = verification_yearmonth / 100; + vmonth = verification_yearmonth % 100; + byear = base_yearmonth / 100; + bmonth = base_yearmonth % 100; + + fcmonth = (vyear - byear) * 12 + (vmonth - bmonth); + if(day == 1 && hour == 0) + fcmonth++; + + if(gribForecastMonth != 0 && gribForecastMonth!=fcmonth) { + grib_context_log(a->parent->h->context,GRIB_LOG_FATAL,"%s=%ld (%s-%s)=%ld",self->fcmonth, + gribForecastMonth,self->base_date,self->verification_yearmonth,fcmonth); + Assert(gribForecastMonth == fcmonth); + } + + *val = fcmonth; + + return GRIB_SUCCESS; +} + +/* TODO: Check for a valid date */ + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_g1forecastmonth* self = (grib_accessor_g1forecastmonth*)a; + return grib_set_long_internal(a->parent->h,self->fcmonth, *val); + +} diff --git a/src/grib_accessor_class_g1monthlydate.c b/src/grib_accessor_class_g1monthlydate.c new file mode 100644 index 000000000..bc6d521f2 --- /dev/null +++ b/src/grib_accessor_class_g1monthlydate.c @@ -0,0 +1,164 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + + +/*********************************************** + * Enrico Fucile + **********************************************/ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init;dump + MEMBERS=const char* date + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1monthlydate { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g1monthlydate */ + const char* date; +} grib_accessor_g1monthlydate; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g1monthlydate = { + &grib_accessor_class_long, /* super */ + "g1monthlydate", /* name */ + sizeof(grib_accessor_g1monthlydate), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1monthlydate = &_grib_accessor_class_g1monthlydate; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g1monthlydate* self = (grib_accessor_g1monthlydate*)a; + int n = 0; + + self->date = grib_arguments_get_name(a->parent->h,c,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_g1monthlydate* self = (grib_accessor_g1monthlydate*)a; + + long date = 0; + + grib_get_long_internal(a->parent->h, self->date,&date); + + date /= 100; + date*=100; + date+=1; + + *val = date; + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_accessor_class_g1number_of_coded_values_sh_complex.c b/src/grib_accessor_class_g1number_of_coded_values_sh_complex.c new file mode 100644 index 000000000..d8d2b73c2 --- /dev/null +++ b/src/grib_accessor_class_g1number_of_coded_values_sh_complex.c @@ -0,0 +1,207 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/****************************************************** + * Enrico Fucile + *******************************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init + MEMBERS = const char* numberOfValues + MEMBERS = const char* bitsPerValue + MEMBERS = const char* offsetBeforeData + MEMBERS = const char* offsetAfterData + MEMBERS = const char* unusedBits + MEMBERS = const char* JS + MEMBERS = const char* KS + MEMBERS = const char* MS + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1number_of_coded_values_sh_complex { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g1number_of_coded_values_sh_complex */ + const char* numberOfValues; + const char* bitsPerValue; + const char* offsetBeforeData; + const char* offsetAfterData; + const char* unusedBits; + const char* JS; + const char* KS; + const char* MS; +} grib_accessor_g1number_of_coded_values_sh_complex; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g1number_of_coded_values_sh_complex = { + &grib_accessor_class_long, /* super */ + "g1number_of_coded_values_sh_complex", /* name */ + sizeof(grib_accessor_g1number_of_coded_values_sh_complex), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1number_of_coded_values_sh_complex = &_grib_accessor_class_g1number_of_coded_values_sh_complex; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_g1number_of_coded_values_sh_complex* self = (grib_accessor_g1number_of_coded_values_sh_complex*)a; + self->bitsPerValue = grib_arguments_get_name(a->parent->h,c,n++); + self->offsetBeforeData = grib_arguments_get_name(a->parent->h,c,n++); + self->offsetAfterData = grib_arguments_get_name(a->parent->h,c,n++); + self->unusedBits = grib_arguments_get_name(a->parent->h,c,n++); + self->numberOfValues = grib_arguments_get_name(a->parent->h,c,n++); + self->JS = grib_arguments_get_name(a->parent->h,c,n++); + self->KS = grib_arguments_get_name(a->parent->h,c,n++); + self->MS = grib_arguments_get_name(a->parent->h,c,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=GRIB_SUCCESS; + long bpv=0; + long offsetBeforeData=0,offsetAfterData=0,unusedBits=0,numberOfValues; + long JS=0,KS=0,MS=0,NS=0; + + grib_accessor_g1number_of_coded_values_sh_complex* self = (grib_accessor_g1number_of_coded_values_sh_complex*)a; + + if((ret = grib_get_long_internal(a->parent->h, self->bitsPerValue,&bpv)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->offsetBeforeData,&offsetBeforeData)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->offsetAfterData,&offsetAfterData)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->unusedBits,&unusedBits)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->JS,&JS)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->KS,&KS)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->MS,&MS)) != GRIB_SUCCESS) + return ret; + + if (JS != KS || KS != MS) return GRIB_NOT_IMPLEMENTED; + + NS=(MS+1)*(MS+2); + + if ( bpv != 0 ) { + *val =((offsetAfterData-offsetBeforeData)*8-unusedBits+NS*(bpv-32))/bpv; + } else { + if((ret = grib_get_long_internal(a->parent->h, self->numberOfValues,&numberOfValues)) != GRIB_SUCCESS) + return ret; + + *val=numberOfValues; + } + + + return ret; +} + diff --git a/src/grib_accessor_class_g1number_of_coded_values_sh_simple.c b/src/grib_accessor_class_g1number_of_coded_values_sh_simple.c new file mode 100644 index 000000000..3f6f362f9 --- /dev/null +++ b/src/grib_accessor_class_g1number_of_coded_values_sh_simple.c @@ -0,0 +1,184 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/********************************************** + * Enrico Fucile + **********************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init + MEMBERS = const char* numberOfValues + MEMBERS = const char* bitsPerValue + MEMBERS = const char* offsetBeforeData + MEMBERS = const char* offsetAfterData + MEMBERS = const char* unusedBits + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1number_of_coded_values_sh_simple { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g1number_of_coded_values_sh_simple */ + const char* numberOfValues; + const char* bitsPerValue; + const char* offsetBeforeData; + const char* offsetAfterData; + const char* unusedBits; +} grib_accessor_g1number_of_coded_values_sh_simple; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g1number_of_coded_values_sh_simple = { + &grib_accessor_class_long, /* super */ + "g1number_of_coded_values_sh_simple", /* name */ + sizeof(grib_accessor_g1number_of_coded_values_sh_simple), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1number_of_coded_values_sh_simple = &_grib_accessor_class_g1number_of_coded_values_sh_simple; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_g1number_of_coded_values_sh_simple* self = (grib_accessor_g1number_of_coded_values_sh_simple*)a; + self->bitsPerValue = grib_arguments_get_name(a->parent->h,c,n++); + self->offsetBeforeData = grib_arguments_get_name(a->parent->h,c,n++); + self->offsetAfterData = grib_arguments_get_name(a->parent->h,c,n++); + self->unusedBits = grib_arguments_get_name(a->parent->h,c,n++); + self->numberOfValues = grib_arguments_get_name(a->parent->h,c,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=GRIB_SUCCESS; + long bpv=0; + long offsetBeforeData=0,offsetAfterData=0,unusedBits=0,numberOfValues; + + grib_accessor_g1number_of_coded_values_sh_simple* self = (grib_accessor_g1number_of_coded_values_sh_simple*)a; + + if((ret = grib_get_long_internal(a->parent->h, self->bitsPerValue,&bpv)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->offsetBeforeData,&offsetBeforeData)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->offsetAfterData,&offsetAfterData)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->unusedBits,&unusedBits)) != GRIB_SUCCESS) + return ret; + + if ( bpv != 0 ) { + *val=((offsetAfterData-offsetBeforeData)*8-unusedBits)/bpv; + } else { + if((ret = grib_get_long_internal(a->parent->h, self->numberOfValues,&numberOfValues)) != GRIB_SUCCESS) + return ret; + + *val=numberOfValues; + } + + + return ret; +} + diff --git a/src/grib_accessor_class_g1p1p2.c b/src/grib_accessor_class_g1p1p2.c new file mode 100644 index 000000000..2d05201fb --- /dev/null +++ b/src/grib_accessor_class_g1p1p2.c @@ -0,0 +1,174 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************** + * Enrico Fucile + **************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_unsigned + IMPLEMENTS = unpack_long;pack_long;value_count + IMPLEMENTS = init;dump + MEMBERS = const char* p1 + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1p1p2 { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in g1p1p2 */ + const char* p1; +} grib_accessor_g1p1p2; + +extern grib_accessor_class* grib_accessor_class_unsigned; + +static grib_accessor_class _grib_accessor_class_g1p1p2 = { + &grib_accessor_class_unsigned, /* super */ + "g1p1p2", /* name */ + sizeof(grib_accessor_g1p1p2), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1p1p2 = &_grib_accessor_class_g1p1p2; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g1p1p2* self = (grib_accessor_g1p1p2*)a; + int n = 0; + self->p1 = grib_arguments_get_name(a->parent->h,c,n++); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_string(dumper,a,NULL); + +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int err=0; + long off=0; + grib_accessor_g1p1p2* self = (grib_accessor_g1p1p2*)a; + grib_accessor* p1_accessor=grib_find_accessor( a->parent->h,self->p1); + off = p1_accessor->offset*8; + *val=grib_decode_unsigned_long(a->parent->h->buffer->data, &off, 16); + + return err; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + long off=0; + int err=0; + grib_accessor_g1p1p2* self = (grib_accessor_g1p1p2*)a; + grib_accessor* p1_accessor=grib_find_accessor( a->parent->h,self->p1); + off = p1_accessor->offset*8; + err = grib_encode_unsigned_long(a->parent->h->buffer->data, *val,&off,16); + if (err == GRIB_SUCCESS) len[0] = 1; + + return err; +} + +static long value_count(grib_accessor* a){ return 1;} + + diff --git a/src/grib_accessor_class_g1param.c b/src/grib_accessor_class_g1param.c new file mode 100644 index 000000000..c3dae284d --- /dev/null +++ b/src/grib_accessor_class_g1param.c @@ -0,0 +1,181 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = pack_long;unpack_long + IMPLEMENTS = init + MEMBERS = const char* table + MEMBERS = const char* parameter + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1param { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g1param */ + const char* table; + const char* parameter; +} grib_accessor_g1param; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g1param = { + &grib_accessor_class_long, /* super */ + "g1param", /* name */ + sizeof(grib_accessor_g1param), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1param = &_grib_accessor_class_g1param; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g1param* self = (grib_accessor_g1param*)a; + int n = 0; + self->parameter = grib_arguments_get_name(a->parent->h,c,n++); + self->table = grib_arguments_get_name(a->parent->h,c,n++); +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_g1param* self = (grib_accessor_g1param*)a; + long parameter = *val % 1000; + long table = *val / 1000; + int err = 0; + + if(table == 0) table = 128; + + err = grib_set_long_internal(a->parent->h,self->parameter,parameter); + if(err) return err; + + err = grib_set_long_internal(a->parent->h,self->table,table); + return err; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_g1param* self = (grib_accessor_g1param*)a; + int err = GRIB_SUCCESS; + /* size_t l = 0; */ + long parameter = 0; + long table = 0; + + err = grib_get_long_internal(a->parent->h,self->parameter,¶meter); + if(err) return err; + + err = grib_get_long_internal(a->parent->h,self->table,&table); + if(err) return err; + + if(*len < 1) + return GRIB_BUFFER_TOO_SMALL; + + + *len = 1; + + + if(table == 128) + *val = parameter; + else + *val = table * 1000 + parameter; + + + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_g1step_range.c b/src/grib_accessor_class_g1step_range.c new file mode 100644 index 000000000..cdb18aaf5 --- /dev/null +++ b/src/grib_accessor_class_g1step_range.c @@ -0,0 +1,692 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/********************************************* + * Enrico Fucile + *******************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_abstract_long_vector + IMPLEMENTS = pack_string;unpack_string;value_count + IMPLEMENTS = pack_long;unpack_long;dump + IMPLEMENTS = get_native_type;string_length + IMPLEMENTS = init; destroy + MEMBERS = const char* p1 + MEMBERS = const char* p2 + MEMBERS = const char* timeRangeIndicator + MEMBERS = const char *unit + MEMBERS = const char *step_unit + MEMBERS = const char *stepType + MEMBERS = const char *patch_fp_precip + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static size_t string_length(grib_accessor*); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1step_range { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in abstract_long_vector */ + long* v; + long pack_index; + int number_of_elements; +/* Members defined in g1step_range */ + const char* p1; + const char* p2; + const char* timeRangeIndicator; + const char *unit; + const char *step_unit; + const char *stepType; + const char *patch_fp_precip; +} grib_accessor_g1step_range; + +extern grib_accessor_class* grib_accessor_class_abstract_long_vector; + +static grib_accessor_class _grib_accessor_class_g1step_range = { + &grib_accessor_class_abstract_long_vector, /* super */ + "g1step_range", /* name */ + sizeof(grib_accessor_g1step_range), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1step_range = &_grib_accessor_class_g1step_range; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g1step_range* self = (grib_accessor_g1step_range*)a; + grib_handle* h=a->parent->h; + int n = 0; + self->p1 = grib_arguments_get_name(h,c,n++); + self->p2 = grib_arguments_get_name(h,c,n++); + self->timeRangeIndicator = grib_arguments_get_name(h,c,n++); + self->unit = grib_arguments_get_name(h,c,n++); + self->step_unit = grib_arguments_get_name(h,c,n++); + self->stepType = grib_arguments_get_name(h,c,n++); + self->patch_fp_precip = grib_arguments_get_name(h,c,n++); + + self->number_of_elements=2; + self->v=(long*)grib_context_malloc_clear(h->context, + sizeof(long)*self->number_of_elements); + self->pack_index=-1; + a->dirty=1; + + a->length=0; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_string(dumper,a,NULL); + +} + +static int error_on_units=1; + +static int u2s1[] = { + 60, /* (0) minutes */ + 3600, /* (1) hour */ + 86400, /* (2) day */ + 2592000, /* (3) month */ + -1, /* (4) */ + -1, /* (5) */ + -1, /* (6) */ + -1, /* (7) */ + -1, /* (8) */ + -1, /* (9) */ + 10800, /* (10) 3 hours */ + 21600, /* (11) 6 hours */ + 43200, /* (12) 12 hours */ + 900, /* (13) 15 minutes */ + 1800, /* (14) 30 minutes */ + 1 /* (15) seconds */ +}; + +static int units_index[] = { + 1,0,10,11,12,2,0,13,14,15 +}; + +static int u2s[] = { + 60, /* (0) minutes */ + 3600, /* (1) hour */ + 86400, /* (2) day */ + 2592000, /* (3) month */ + -1, /* (4) */ + -1, /* (5) */ + -1, /* (6) */ + -1, /* (7) */ + -1, /* (8) */ + -1, /* (9) */ + 10800, /* (10) 3 hours */ + 21600, /* (11) 6 hours */ + 43200, /* (12) 12 hours */ + 1, /* (13) seconds */ + 900, /* (14) 15 minutes */ + 1800 /* (15) 30 minutes */ +}; + + +int grib_g1_step_get_steps(grib_accessor* a,long* start,long* end) { + grib_accessor_g1step_range* self = (grib_accessor_g1step_range*)a; + int err = 0; + long p1 = 0,p2 = 0,unit = 0,timeRangeIndicator=0,timeRangeIndicatorFromStepRange=0; + long step_unit=1; + char stepType[20]={0,}; + size_t stepTypeLen=20; + long newstart,newend; + int factor=1; + long u2sf,u2sf_step_unit; + + if (self->step_unit != NULL) + grib_get_long_internal(a->parent->h,self->step_unit,&step_unit); + + if (err!=GRIB_SUCCESS) return err; + + err = grib_get_long_internal(a->parent->h,self->unit,&unit); + if(err) return err; + + err = grib_get_long_internal(a->parent->h,self->p1,&p1); + if(err) return err; + + err = grib_get_long_internal(a->parent->h,self->p2,&p2); + if(err) return err; + + err = grib_get_long_internal(a->parent->h,self->timeRangeIndicator,&timeRangeIndicator); + if(err) return err; + + /* TODO move to the def file */ + err = grib_get_long(a->parent->h,"timeRangeIndicatorFromStepRange",&timeRangeIndicatorFromStepRange); + + if (timeRangeIndicatorFromStepRange==10) timeRangeIndicator=timeRangeIndicatorFromStepRange; + + if (self->stepType) { + err = grib_get_string_internal(a->parent->h,self->stepType,stepType,&stepTypeLen); + if(err) return err; + } else sprintf(stepType,"unknown"); + + *start = p1; + *end = p2; + + if (timeRangeIndicator==10) *start = *end = (p1<<8) | (p2<<0); + else if (!strcmp(stepType,"instant")) *start = *end = p1; + else if (!strcmp(stepType,"accum") && timeRangeIndicator==0 ) {*start =0; *end = p1;} + + if (u2s1[unit] == u2s[step_unit] || (*start==0 && *end==0) ) return 0; + + newstart = (*start) * u2s1[unit]; + newend = (*end) * u2s1[unit]; + + if (newstart<0 || newend<0) { + factor=60; + u2sf=u2s1[unit]/factor; + if (u2s1[unit] % factor) return GRIB_DECODING_ERROR; + newstart = (*start) * u2sf; + newend = (*end) * u2sf; + u2sf_step_unit=u2s[step_unit]/factor; + if (u2s[step_unit] % factor) return GRIB_DECODING_ERROR; + } else { + u2sf_step_unit=u2s[step_unit]; + } + + if (newstart % u2sf_step_unit != 0 || newend % u2sf_step_unit != 0) { + return GRIB_DECODING_ERROR; + } else { + *start = newstart/u2sf_step_unit; + *end = newend/u2sf_step_unit; + } + + return 0; +} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) { + grib_accessor_g1step_range* self = (grib_accessor_g1step_range*)a; + char buf[100]; + size_t size=0; + long start=0,end=0; + long timeRangeIndicator=0; + long unit; + int err=0; + char stepType[20]={0,}; + size_t stepTypeLen=20; + + if ((err=grib_g1_step_get_steps(a,&start,&end))!=GRIB_SUCCESS) { + size_t step_unit_string_len=10; + char step_unit_string[10]; + + if (self->step_unit != NULL) + grib_get_string(a->parent->h,self->step_unit,step_unit_string,&step_unit_string_len); + else + sprintf(step_unit_string,"h"); + + if (error_on_units) { + grib_get_long_internal(a->parent->h,self->unit,&unit); + grib_set_long_internal(a->parent->h,self->step_unit,unit); + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to represent the step in %s", + step_unit_string); + } + return err; + } + + err = grib_get_long_internal(a->parent->h,self->timeRangeIndicator,&timeRangeIndicator); + if(err) return err; + + if (self->stepType) { + err = grib_get_string_internal(a->parent->h,self->stepType,stepType,&stepTypeLen); + if(err) return err; + } else sprintf(stepType,"unknown"); + + /* Patch for olf forecast probabilities */ + if(self->patch_fp_precip) + { + start += 24; + } + + if(strcmp(stepType,"instant") == 0) { + sprintf(buf,"%ld",start); + } + else if( (strcmp(stepType,"avgfc") == 0) || + (strcmp(stepType,"avgua") == 0) || + (strcmp(stepType,"avgia") == 0) ) + { + sprintf(buf,"%ld",start); + } + else if( + (strcmp(stepType,"accum") == 0) || + (strcmp(stepType,"avg") == 0) || + (strcmp(stepType,"min") == 0) || + (strcmp(stepType,"max") == 0) || + (strcmp(stepType,"rms") == 0) || + (strcmp(stepType,"diff") == 0) + ) + { + if(start == end) { + sprintf(buf,"%ld",end); + } + else + { + sprintf(buf,"%ld-%ld",start, end); + } + } + else { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, "Unknown stepType=[%s] timeRangeIndicator=[%ld]",stepType,timeRangeIndicator); + return GRIB_NOT_IMPLEMENTED; + } + + size=strlen(buf)+1; + + if (*lenparent->h; + long timeRangeIndicator=0,P1=0,P2=0; + long start=0,end=-1,unit=0,ounit=0,step_unit=1; + int ret=0; + long end_sec,start_sec; + char *p=NULL,*q=NULL; + int instant=0; + char stepType[20]={0,}; + size_t stepTypeLen=20; + + if (self->stepType) { + ret = grib_get_string_internal(a->parent->h,self->stepType,stepType,&stepTypeLen); + if(ret) return ret; + } else sprintf(stepType,"unknown"); + + if((ret = grib_set_long_internal(h,"timeRangeIndicatorFromStepRange",-1))) + return ret; + + /* don't change timeRangeIndicator when setting step EXCEPT IF instant*/ + if((ret = grib_get_long_internal(h,self->timeRangeIndicator,&timeRangeIndicator))) + return ret; + + instant= ( strcmp(stepType,"instant") == 0 ) ? 1 : 0; + + if((ret = grib_get_long_internal(h,self->unit,&unit))) + return ret; + + if(self->step_unit!=NULL && (ret = grib_get_long_internal(h,self->step_unit,&step_unit))) + return ret; + + ounit=unit; + + start=strtol(val, &p,10); + end=start; + if ( *p!=0 ) end=strtol(++p, &q,10); + + if (start==0 && end==0) { + if((ret = grib_set_long_internal(h,self->p1,start)) != GRIB_SUCCESS) + return ret; + ret = grib_set_long_internal(h,self->p2,end); + return ret; + } + end_sec=end*u2s[step_unit]; + start_sec=start*u2s[step_unit]; + + if ( ( end_sec > 918000 || start_sec > 918000 ) && + h->context->gribex_mode_on && instant ) { + timeRangeIndicator = 10; + if((ret = grib_set_long_internal(h,self->timeRangeIndicator,10))) + return ret; + /* TODO move to the def file*/ + if((ret = grib_set_long_internal(h,"timeRangeIndicatorFromStepRange",10))) + return ret; + } + + if (timeRangeIndicator == 10) { + long off=0; + grib_accessor* p1_accessor=NULL; + if ( end != start && !h->context->gribex_mode_on) { + if ( h->context->gribex_mode_on==0 ) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "Unable to set %s: end must be equal to start when timeRangeIndicator=10", + a->name); + return GRIB_WRONG_STEP; + } else start = end; + } + if ((ret=grib_g1_step_apply_units(&start,&end,&step_unit,&P1,&P2,&unit,65535,instant)) + !=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find units to set %s=%s",a->name,val); + return ret; + } + + p1_accessor=grib_find_accessor( a->parent->h,self->p1); + if (p1_accessor==NULL) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find accessor %s",self->p1); + return GRIB_NOT_FOUND; + } + off = p1_accessor->offset*8; + ret = grib_encode_unsigned_long(a->parent->h->buffer->data, P1,&off,16); + if (ret!=0) return ret; + + if (ounit != unit) + ret = grib_set_long_internal(h,self->unit,unit); + + return ret; + } + + if ( (ret=grib_g1_step_apply_units(&start,&end,&step_unit,&P1,&P2,&unit,255,instant)) + !=GRIB_SUCCESS ) { + + if (instant || h->context->gribex_mode_on) { + long off=0; + grib_accessor* p1_accessor=NULL; + if((ret = grib_set_long_internal(h,self->timeRangeIndicator,10))) + return ret; + /* TODO move to the def file*/ + if((ret = grib_set_long_internal(h,"timeRangeIndicatorFromStepRange",10))) + return ret; + if (end != start && !h->context->gribex_mode_on) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "Unable to set %s: end must be equal to start when timeRangeIndicator=10", + a->name); + return GRIB_WRONG_STEP; + } else start=end; + + if ((ret=grib_g1_step_apply_units(&start,&end,&step_unit,&P1,&P2,&unit,65535,instant)) + !=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find units to set %s=%s",a->name,val); + return ret; + } + + p1_accessor=grib_find_accessor( a->parent->h,self->p1); + if (p1_accessor==NULL) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find accessor %s",self->p1); + return GRIB_NOT_FOUND; + } + off = p1_accessor->offset*8; + ret = grib_encode_unsigned_long(a->parent->h->buffer->data, P1,&off,16); + if (ret!=0) return ret; + + if (ounit != unit) + ret = grib_set_long_internal(h,self->unit,unit); + } + + return ret; + } + + if (ounit != unit) + if((ret = grib_set_long_internal(h,self->unit,unit)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_set_long_internal(h,self->p1,P1)) != GRIB_SUCCESS) + return ret; + if((ret = grib_set_long_internal(h,self->p2,P2)) != GRIB_SUCCESS) + return ret; + + self->v[0]=start; + self->v[1]=end; + a->dirty=0; + + return 0; + +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + +static size_t string_length(grib_accessor* a) +{ + return 255; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + char buff[100]; + size_t bufflen=100; + char sval[100]; + char* p=sval; + size_t svallen=100; + grib_accessor_g1step_range* self = (grib_accessor_g1step_range*)a; + char stepType[20]={0,}; + size_t stepTypeLen=20; + long step_unit=0; + int err=0; + + if (self->stepType) { + err = grib_get_string_internal(a->parent->h,self->stepType,stepType,&stepTypeLen); + if(err) return err; + } else sprintf(stepType,"unknown"); + + if(self->step_unit!=NULL && (err = grib_get_long_internal(a->parent->h,self->step_unit,&step_unit))) + return err; + + switch (self->pack_index) { + case -1 : + self->pack_index=-1; + sprintf(buff,"%ld",*val); + return pack_string( a,buff,&bufflen); + case 0 : + self->pack_index=-1; + error_on_units=0; + unpack_string(a,sval,&svallen); + error_on_units=1; + while (*p != '-' && *p != '\0' ) p++; + if (*p=='-') { + sprintf(buff,"%ld-%s",*val,++p); + } else { + if (strcmp(stepType,"instant") && strcmp(stepType,"avgd")) { + sprintf(buff,"%ld-%s",*val,sval); + } else { + sprintf(buff,"%ld",*val); + } + } + return pack_string( a,buff,&bufflen); + case 1 : + self->pack_index=-1; + error_on_units=0; + unpack_string(a,sval,&svallen); + error_on_units=1; + while (*p != '-' && *p != '\0' ) p++; + if (*p=='-') { + *p='\0'; + sprintf(buff,"%s-%ld",sval,*val); + } else { + if (strcmp(stepType,"instant") && strcmp(stepType,"avgd")) { + sprintf(buff,"%s-%ld",sval,*val); + } else { + sprintf(buff,"%ld",*val); + } + } + return pack_string( a,buff,&bufflen); + default : + Assert(self->pack_index<2); + } + + return GRIB_INTERNAL_ERROR; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) { + grib_accessor_g1step_range* self = (grib_accessor_g1step_range*)a; + char buff[100]; + size_t bufflen=100; + long start,end; + char* p=buff; + char* q=NULL; + int err=0; + + /*TODO implement dirty*/ + if ((err=unpack_string( a,buff,&bufflen))!=GRIB_SUCCESS) + return err; + + start=strtol(buff, &p,10); + end=start; + if ( *p!=0 ) end=strtol(++p, &q,10); + + if (self->pack_index==1) *val=start; + else *val=end; + + self->v[0]=start; + self->v[1]=end; + a->dirty=0; + + return 0; +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_STRING; +} + + +static void destroy(grib_context* c,grib_accessor* a) { + grib_accessor_g1step_range *self = (grib_accessor_g1step_range*)a; + grib_context_free(c,self->v); +} + + diff --git a/src/grib_accessor_class_g1verificationdate.c b/src/grib_accessor_class_g1verificationdate.c new file mode 100644 index 000000000..ba1293476 --- /dev/null +++ b/src/grib_accessor_class_g1verificationdate.c @@ -0,0 +1,183 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init;dump + MEMBERS=const char* date + MEMBERS=const char* time + MEMBERS=const char* step + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g1verificationdate { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g1verificationdate */ + const char* date; + const char* time; + const char* step; +} grib_accessor_g1verificationdate; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g1verificationdate = { + &grib_accessor_class_long, /* super */ + "g1verificationdate", /* name */ + sizeof(grib_accessor_g1verificationdate), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g1verificationdate = &_grib_accessor_class_g1verificationdate; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g1verificationdate* self = (grib_accessor_g1verificationdate*)a; + int n = 0; + + self->date = grib_arguments_get_name(a->parent->h,c,n++); + self->time = grib_arguments_get_name(a->parent->h,c,n++); + self->step = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_g1verificationdate* self = (grib_accessor_g1verificationdate*)a; + int ret=0; + long date = 0; + long time = 0; + long cdate = 0; + long step = 0; + long vtime = 0; + long vdate = 0; + long vd = 0; + + if ((ret=grib_get_long_internal(a->parent->h, self->date,&date))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->time,&time))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->step,&step))!=GRIB_SUCCESS) return ret; + + time /= 100; + + cdate = (long)grib_date_to_julian (date); + vtime = cdate * 24 + time + step; + vd = vtime / 24; + vdate = grib_julian_to_date (vd); + + /* printf("\n********\n date %d, time %d, step %d, vdate: %d, cdate %d, vd %d\n********\n", date, time, step, vdate, cdate, vd); */ + + if(*len < 1) + return GRIB_ARRAY_TOO_SMALL; + + *val = vdate; + + /* fprintf(stdout,"\n********\n %d cdate %d vd %d\n********\n", vdate, cdate, step); */ + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_g2_eps.c b/src/grib_accessor_class_g2_eps.c new file mode 100644 index 000000000..1f227be88 --- /dev/null +++ b/src/grib_accessor_class_g2_eps.c @@ -0,0 +1,238 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_unsigned + IMPLEMENTS = unpack_long;pack_long; value_count + IMPLEMENTS = init + MEMBERS=const char* productDefinitionTemplateNumber + MEMBERS=const char* stream + MEMBERS=const char* type + MEMBERS=const char* stepType + MEMBERS=const char* derivedForecast + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2_eps { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in g2_eps */ + const char* productDefinitionTemplateNumber; + const char* stream; + const char* type; + const char* stepType; + const char* derivedForecast; +} grib_accessor_g2_eps; + +extern grib_accessor_class* grib_accessor_class_unsigned; + +static grib_accessor_class _grib_accessor_class_g2_eps = { + &grib_accessor_class_unsigned, /* super */ + "g2_eps", /* name */ + sizeof(grib_accessor_g2_eps), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2_eps = &_grib_accessor_class_g2_eps; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g2_eps* self = (grib_accessor_g2_eps*)a; + int n = 0; + + self->productDefinitionTemplateNumber = grib_arguments_get_name(a->parent->h,c,n++); + self->type = grib_arguments_get_name(a->parent->h,c,n++); + self->stream = grib_arguments_get_name(a->parent->h,c,n++); + self->stepType = grib_arguments_get_name(a->parent->h,c,n++); + self->derivedForecast = grib_arguments_get_name(a->parent->h,c,n++); + +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_g2_eps* self = (grib_accessor_g2_eps*)a; + long productDefinitionTemplateNumber=0; + + grib_get_long(a->parent->h, self->productDefinitionTemplateNumber,&productDefinitionTemplateNumber); + + *val=0; + if (productDefinitionTemplateNumber==1 || productDefinitionTemplateNumber==11) + *val=1; + + return GRIB_SUCCESS; +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_g2_eps* self = (grib_accessor_g2_eps*)a; + long productDefinitionTemplateNumber=-1; + long productDefinitionTemplateNumberNew=-1; + long type=-1; + long stream=-1; + char stepType[15]={0,}; + size_t slen=15; + int eps=*val; + int isInstant=0; + long derivedForecast=-1; + + if (grib_get_long(a->parent->h, self->productDefinitionTemplateNumber,&productDefinitionTemplateNumber)!=GRIB_SUCCESS) + return GRIB_SUCCESS; + + grib_get_long(a->parent->h, self->type,&type); + grib_get_long(a->parent->h, self->stream,&stream); + grib_get_string(a->parent->h, self->stepType,stepType,&slen); + if (!strcmp(stepType,"instant")) isInstant=1; + + /* eps or enda or elda or ewla */ + if ( eps || stream==1030 || stream==1249 || stream==1250 ) { + if (isInstant) { + /* type=em || type=es */ + if (type==17) { + productDefinitionTemplateNumberNew=2; + derivedForecast=0; + } else if (type==18) { + productDefinitionTemplateNumberNew=2; + derivedForecast=4; + } else { + productDefinitionTemplateNumberNew=1; + } + } else { + /* type=em || type=es */ + if (type==17) { + productDefinitionTemplateNumberNew=12; + derivedForecast=0; + } else if (type==18) { + productDefinitionTemplateNumberNew=12; + derivedForecast=4; + } else { + productDefinitionTemplateNumberNew=11; + } + } + } else { + if (isInstant) { + productDefinitionTemplateNumberNew=0; + } else { + productDefinitionTemplateNumberNew=8; + } + } + + if (productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) { + grib_set_long(a->parent->h, self->productDefinitionTemplateNumber,productDefinitionTemplateNumberNew); + if (derivedForecast>=0) + grib_set_long(a->parent->h, self->derivedForecast,derivedForecast); + } + + return 0; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + diff --git a/src/grib_accessor_class_g2_mars_labeling.c b/src/grib_accessor_class_g2_mars_labeling.c new file mode 100644 index 000000000..91391ccce --- /dev/null +++ b/src/grib_accessor_class_g2_mars_labeling.c @@ -0,0 +1,513 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = unpack_long;pack_long; value_count + IMPLEMENTS = unpack_string;pack_string + IMPLEMENTS = init; get_native_type + MEMBERS=int index + MEMBERS=const char* class + MEMBERS=const char* stream + MEMBERS=const char* type + MEMBERS=const char* expver + MEMBERS=const char* typeOfProcessedData + MEMBERS=const char* productDefinitionTemplateNumber + MEMBERS=const char* stepType + MEMBERS=const char* derivedForecast + MEMBERS=const char* typeOfGeneratingProcess + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2_mars_labeling { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in g2_mars_labeling */ + int index; + const char* class; + const char* stream; + const char* type; + const char* expver; + const char* typeOfProcessedData; + const char* productDefinitionTemplateNumber; + const char* stepType; + const char* derivedForecast; + const char* typeOfGeneratingProcess; +} grib_accessor_g2_mars_labeling; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_g2_mars_labeling = { + &grib_accessor_class_gen, /* super */ + "g2_mars_labeling", /* name */ + sizeof(grib_accessor_g2_mars_labeling), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2_mars_labeling = &_grib_accessor_class_g2_mars_labeling; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g2_mars_labeling* self = (grib_accessor_g2_mars_labeling*)a; + int n = 0; + + self->index = grib_arguments_get_long(a->parent->h,c,n++); + self->class = grib_arguments_get_name(a->parent->h,c,n++); + self->type = grib_arguments_get_name(a->parent->h,c,n++); + self->stream = grib_arguments_get_name(a->parent->h,c,n++); + self->expver = grib_arguments_get_name(a->parent->h,c,n++); + self->typeOfProcessedData = grib_arguments_get_name(a->parent->h,c,n++); + self->productDefinitionTemplateNumber = grib_arguments_get_name(a->parent->h,c,n++); + self->stepType = grib_arguments_get_name(a->parent->h,c,n++); + self->derivedForecast = grib_arguments_get_name(a->parent->h,c,n++); + self->typeOfGeneratingProcess = grib_arguments_get_name(a->parent->h,c,n++); +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_g2_mars_labeling* self = (grib_accessor_g2_mars_labeling*)a; + char* key=NULL; + + switch (self->index) { + case 0: + key=(char*)self->class; + break; + case 1: + key=(char*)self->type; + break; + case 2: + key=(char*)self->stream; + break; + default : + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s",a->name); + return GRIB_INTERNAL_ERROR; + break; + } + + return grib_get_long(a->parent->h, key,val); +} + +static int unpack_string (grib_accessor* a, char* val, size_t *len) +{ + grib_accessor_g2_mars_labeling* self = (grib_accessor_g2_mars_labeling*)a; + char* key=NULL; + + switch (self->index) { + case 0: + key=(char*)self->class; + break; + case 1: + key=(char*)self->type; + break; + case 2: + key=(char*)self->stream; + break; + default : + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s",a->name); + return GRIB_INTERNAL_ERROR; + break; + } + + return grib_get_string(a->parent->h, key,val,len); + +} + +static int extra_set(grib_accessor* a,long val) { + int ret=0; + grib_accessor_g2_mars_labeling* self = (grib_accessor_g2_mars_labeling*)a; + char stepType[30]={0,}; + size_t stepTypelen=30; + long derivedForecast=-1; + long productDefinitionTemplateNumberNew=-1; + long productDefinitionTemplateNumber; + long typeOfProcessedData=-1; + long typeOfGeneratingProcess=-1; + + switch (self->index) { + case 0: + /* class */ + return ret; + break; + case 1: + /* type */ + switch (val) { + case 0: /* Unknown (0) */ + typeOfProcessedData=255; + typeOfGeneratingProcess=255; + break; + case 1: /* First guess (fg) */ + case 3: /* Initialised analysis (ia) */ + typeOfProcessedData=0; + typeOfGeneratingProcess=1; + break; + case 2: /* Analysis (an) */ + case 4: /* Oi analysis (oi) */ + case 5: /* 3d variational analysis (3v) */ + case 6: /* 4d variational analysis (4v) */ + case 7: /* 3d variational gradients (3g) */ + case 8: /* 4d variational gradients (4g) */ + typeOfProcessedData=0; + typeOfGeneratingProcess=0; + break; + case 9: /* Forecast (fc) */ + typeOfProcessedData=1; + typeOfGeneratingProcess=2; + break; + case 10: /* Control forecast (cf) */ + typeOfProcessedData=3; + typeOfGeneratingProcess=4; + break; + case 11: /* Perturbed forecast (pf) */ + typeOfProcessedData=4; + typeOfGeneratingProcess=4; + break; + case 12: /* Errors in first guess (ef) */ + case 13: /* Errors in analysis (ea) */ + typeOfProcessedData=255; + typeOfGeneratingProcess=7; + break; + case 14: /* Cluster means (cm) */ + case 15: /* Cluster std deviations (cs) */ + typeOfProcessedData=255; + typeOfGeneratingProcess=4; + break; + case 16: /* Forecast probability (fp) */ + typeOfProcessedData=8; + typeOfGeneratingProcess=5; + break; + case 17: /* Ensemble mean (em) */ + derivedForecast=0; + grib_get_string(a->parent->h,self->stepType,stepType,&stepTypelen); + if (!strcmp(stepType,"instant")) { + productDefinitionTemplateNumberNew=2; + } else { + productDefinitionTemplateNumberNew=12; + } + typeOfProcessedData=255; + typeOfGeneratingProcess=4; + break; + case 18: /* Ensemble standard deviation (es) */ + derivedForecast=4; + grib_get_string(a->parent->h,self->stepType,stepType,&stepTypelen); + if (!strcmp(stepType,"instant")) { + productDefinitionTemplateNumberNew=2; + } else { + productDefinitionTemplateNumberNew=12; + } + typeOfProcessedData=255; + typeOfGeneratingProcess=4; + break; + case 19: /* Forecast accumulation (fa) */ + case 20: /* Climatology (cl) */ + case 21: /* Climate simulation (si) */ + case 22: /* Climate 30 days simulation (s3) */ + case 23: /* Empirical distribution (ed) */ + case 24: /* Tubes (tu) */ + case 25: /* Flux forcing realtime (ff) */ + case 26: /* Ocean forward (of) */ + case 27: /* Extreme forecast index (efi) */ + case 28: /* Extreme forecast index control (efic) */ + case 29: /* Probability boundaries (pb) */ + typeOfProcessedData=255; + typeOfGeneratingProcess=255; + break; + case 30: /* Event probability (ep) */ + typeOfProcessedData=8; + typeOfGeneratingProcess=5; + break; + case 31: /* Bias-corrected Forecast (bf) */ + typeOfProcessedData=1; + typeOfGeneratingProcess=3; + break; + case 32: /* Climate distribution (cd) */ + case 33: /* 4D analysis increments (4i) */ + case 34: /* Gridded observations (go) */ + case 35: /* Model errors (me) */ + case 36: /* Probability distribution (pd) */ + case 37: /* Cluster information (ci) */ + case 38: /* Shift of Tail (sot) */ + case 40: /* Images (im) */ + case 42: /* Simulated images (sim) */ + typeOfProcessedData=255; + typeOfGeneratingProcess=255; + break; + case 43: /* Weighted ensemble mean (wem) */ + case 44: /* Weighted ensemble standard deviation (wes) */ + case 45: /* Cluster representative (cr) */ + case 46: /* Scaled ensemble standard deviation (ses) */ + typeOfProcessedData=255; + typeOfGeneratingProcess=4; + break; + case 50: /* Sensitivity gradient (sg) */ + case 52: /* Sensitivity forecast (sf) */ + case 60: /* Perturbed analysis (pa) */ + case 61: /* Initial condition perturbation (icp) */ + case 62: /* Singular vector (sv) */ + case 63: /* Adjoint singular vector (as) */ + case 64: /* Signal variance (svar) */ + typeOfProcessedData=255; + typeOfGeneratingProcess=255; + break; + case 65: /* Calibration/Validation forecast (cv) */ + typeOfProcessedData=5; + typeOfGeneratingProcess=4; + break; + case 70: /* Ocean reanalysis (or) */ + case 71: /* Flux forcing (fx) */ + case 80: /* Forecast mean (fcmean) */ + case 81: /* Forecast maximum (fcmax) */ + case 82: /* Forecast minimum (fcmin) */ + case 83: /* Forecast standard deviation (fcstdev) */ + typeOfProcessedData=255; + typeOfGeneratingProcess=255; + break; + case 84: /* Ensemble mean of temporal mean (emtm) */ + case 85: /* Ensemble standard deviation of temporal mean (estdtm) */ + typeOfProcessedData=255; + typeOfGeneratingProcess=4; + break; + default : + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"unknown mars.type %d",(int)val); + return GRIB_ENCODING_ERROR; + } + case 2: + /* stream */ + switch (val) { + case 1030: /* enda */ + case 1249: /* elda */ + case 1250: /* ewla */ + grib_get_string(a->parent->h,self->stepType,stepType,&stepTypelen); + if (!strcmp(stepType,"instant")) { + productDefinitionTemplateNumberNew=1; + } else { + productDefinitionTemplateNumberNew=11; + } + break; + } + break; + default : + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s",a->name); + return GRIB_INTERNAL_ERROR; + break; + } + + if (productDefinitionTemplateNumberNew>=0) { + grib_get_long(a->parent->h,self->productDefinitionTemplateNumber,&productDefinitionTemplateNumber); + if (productDefinitionTemplateNumber!=productDefinitionTemplateNumberNew) + grib_set_long(a->parent->h,self->productDefinitionTemplateNumber,productDefinitionTemplateNumberNew); + } + + if (derivedForecast>=0) { + grib_set_long(a->parent->h,self->derivedForecast,derivedForecast); + } + + if (typeOfProcessedData>0) + grib_set_long(a->parent->h,self->typeOfProcessedData,typeOfProcessedData); + if (typeOfGeneratingProcess>0) + grib_set_long(a->parent->h,self->typeOfGeneratingProcess,typeOfGeneratingProcess); + + return ret; +} + +static int pack_string(grib_accessor* a, const char* val, size_t *len) +{ + grib_accessor_g2_mars_labeling* self = (grib_accessor_g2_mars_labeling*)a; + char* key=NULL; + int ret=0; + long lval=0; + + switch (self->index) { + case 0: + key=(char*)self->class; + break; + case 1: + key=(char*)self->type; + break; + case 2: + key=(char*)self->stream; + break; + default : + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s",a->name); + return GRIB_INTERNAL_ERROR; + break; + } + + ret=grib_set_string(a->parent->h, key,val,len); + if (ret) return ret; + + ret=grib_get_long(a->parent->h, key,&lval); + if (ret) return ret; + + return extra_set(a,lval); +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_g2_mars_labeling* self = (grib_accessor_g2_mars_labeling*)a; + char* key=NULL; + int ret=0; + + switch (self->index) { + case 0: + key=(char*)self->class; + break; + case 1: + key=(char*)self->type; + break; + case 2: + key=(char*)self->stream; + break; + default : + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s",a->name); + return GRIB_INTERNAL_ERROR; + break; + } + + ret=grib_set_long(a->parent->h, key,*val); + if (ret) return ret; + + return extra_set(a,*val); +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + +static int get_native_type(grib_accessor* a) +{ + grib_accessor_g2_mars_labeling* self = (grib_accessor_g2_mars_labeling*)a; + char* key=NULL; + int ret=0; + int type=0; + + switch (self->index) { + case 0: + key=(char*)self->class; + break; + case 1: + key=(char*)self->type; + break; + case 2: + key=(char*)self->stream; + break; + default : + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "invalid first argument of g2_mars_labeling in %s",a->name); + return GRIB_INTERNAL_ERROR; + break; + } + + ret=grib_get_native_type(a->parent->h,key,&type); + if (ret) grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to get native type for %s",key); + return type; +} diff --git a/src/grib_accessor_class_g2bitmap.c b/src/grib_accessor_class_g2bitmap.c new file mode 100644 index 000000000..3bfe04beb --- /dev/null +++ b/src/grib_accessor_class_g2bitmap.c @@ -0,0 +1,206 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_bitmap + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + IMPLEMENTS = init; + MEMBERS=const char* numberOfValues + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2bitmap { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +/* Members defined in bitmap */ + const char* tableReference; + const char* missing_value; + const char* offsetbsec; + const char* sLength; +/* Members defined in g2bitmap */ + const char* numberOfValues; +} grib_accessor_g2bitmap; + +extern grib_accessor_class* grib_accessor_class_bitmap; + +static grib_accessor_class _grib_accessor_class_g2bitmap = { + &grib_accessor_class_bitmap, /* super */ + "g2bitmap", /* name */ + sizeof(grib_accessor_g2bitmap), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2bitmap = &_grib_accessor_class_g2bitmap; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + + grib_accessor_g2bitmap* self = (grib_accessor_g2bitmap*)a; + + self->numberOfValues = grib_arguments_get_name(a->parent->h,arg,4); +} + + +static void grib_set_bit_on( unsigned char* p, long *bitp){ + unsigned char o = 1; + p += (*bitp >> 3); + o <<= 7-((*bitp)%8); + *p |= o; + (*bitp)+=1; +} + +static int pack_double(grib_accessor* a, const double* val,size_t *len){ + grib_accessor_g2bitmap* self = (grib_accessor_g2bitmap*)a; + + size_t tlen; + + unsigned char* buf = NULL; + long i; + int err = 0; + long pos = 0; + long bmaplen = 0; + double miss_values = 0; + tlen = (*len+7)/8; + + if((err = grib_get_double_internal(a->parent->h, self->missing_value, &miss_values)) + != GRIB_SUCCESS) + return err; + + buf = grib_context_malloc_clear(a->parent->h->context,tlen); + if(!buf) return GRIB_OUT_OF_MEMORY; + pos=0; + for(i=0;i<*len;i++) + { + if (val[i] == miss_values) + pos++; + else{ + bmaplen++; + grib_set_bit_on(buf, &pos); + } + } + + if((err = grib_set_long_internal(a->parent->h, self->numberOfValues,*len )) != GRIB_SUCCESS) { + grib_context_free(a->parent->h->context,buf); + return err; + } + + grib_buffer_replace(a, buf, tlen,1,1); + + grib_context_free(a->parent->h->context,buf); + + return GRIB_SUCCESS; +} + + +static long value_count(grib_accessor* a) +{ + grib_accessor_g2bitmap* self = (grib_accessor_g2bitmap*)a; + long tlen; + int err; + + if ((err=grib_get_long_internal(a->parent->h, self->numberOfValues, &tlen)) != GRIB_SUCCESS) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_class_bitmap.value_count : cannot get %s err=%d",self->numberOfValues,err); + + return tlen; +} + diff --git a/src/grib_accessor_class_g2bitmap_present.c b/src/grib_accessor_class_g2bitmap_present.c new file mode 100644 index 000000000..9caa0ceaa --- /dev/null +++ b/src/grib_accessor_class_g2bitmap_present.c @@ -0,0 +1,171 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/**************************************** + * Enrico Fucile + *************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = pack_long + IMPLEMENTS = init + MEMBERS = const char* bitmapIndicator + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2bitmap_present { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g2bitmap_present */ + const char* bitmapIndicator; +} grib_accessor_g2bitmap_present; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g2bitmap_present = { + &grib_accessor_class_long, /* super */ + "g2bitmap_present", /* name */ + sizeof(grib_accessor_g2bitmap_present), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2bitmap_present = &_grib_accessor_class_g2bitmap_present; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_g2bitmap_present* self = (grib_accessor_g2bitmap_present*)a; + self->bitmapIndicator = grib_arguments_get_name(a->parent->h,c,n++); + + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=GRIB_SUCCESS; + long bitmapIndicator=0; + + grib_accessor_g2bitmap_present* self = (grib_accessor_g2bitmap_present*)a; + + ret = grib_get_long_internal(a->parent->h, self->bitmapIndicator,&bitmapIndicator); + if (ret) { + if (ret==GRIB_NOT_FOUND) { + *val=0; + return 0; + } else return ret; + } + + *val=1; + if (bitmapIndicator==255) *val=0; + + *len=1; + return ret; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_g2bitmap_present* self = (grib_accessor_g2bitmap_present*)a; + long bitmapIndicator=0; + + if (*val==0) bitmapIndicator=255; + + + return grib_set_long(a->parent->h,self->bitmapIndicator,bitmapIndicator); +} diff --git a/src/grib_accessor_class_g2date.c b/src/grib_accessor_class_g2date.c new file mode 100644 index 000000000..1ce136279 --- /dev/null +++ b/src/grib_accessor_class_g2date.c @@ -0,0 +1,197 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long;init;dump + MEMBERS=const char* century + MEMBERS=const char* year + MEMBERS=const char* month + MEMBERS=const char* day + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2date { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g2date */ + const char* century; + const char* year; + const char* month; + const char* day; +} grib_accessor_g2date; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g2date = { + &grib_accessor_class_long, /* super */ + "g2date", /* name */ + sizeof(grib_accessor_g2date), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2date = &_grib_accessor_class_g2date; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g2date* self = (grib_accessor_g2date*)a; + int n = 0; + + self->year = grib_arguments_get_name(a->parent->h,c,n++); + self->month = grib_arguments_get_name(a->parent->h,c,n++); + self->day = grib_arguments_get_name(a->parent->h,c,n++); + +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_accessor_g2date* self = (grib_accessor_g2date*)a; + + long year = 0; + long month = 0; + long day = 0; + + if ((ret=grib_get_long_internal(a->parent->h, self->day,&day))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->month,&month))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->year,&year))!=GRIB_SUCCESS) return ret; + + if(*len < 1) + return GRIB_WRONG_ARRAY_SIZE; + + val[0] = year * 10000 + month * 100 + day; + + + return GRIB_SUCCESS; +} + +/* TODO: Check for a valid date */ + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + int ret; + long v = val[0]; + grib_accessor_g2date* self = (grib_accessor_g2date*)a; + + long year = 0; + long month = 0; + long day = 0; + + if(*len != 1) + return GRIB_WRONG_ARRAY_SIZE; + + year = v / 10000; v %= 10000; + month = v / 100; v %= 100; + day = v; + + if ((ret=grib_set_long_internal(a->parent->h,self->day,day))!=GRIB_SUCCESS) return ret; + if ((ret=grib_set_long_internal(a->parent->h,self->month,month))!=GRIB_SUCCESS) return ret; + if ((ret=grib_set_long_internal(a->parent->h,self->year,year))!=GRIB_SUCCESS) return ret; + + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_g2end_step.c b/src/grib_accessor_class_g2end_step.c new file mode 100644 index 000000000..9455433a2 --- /dev/null +++ b/src/grib_accessor_class_g2end_step.c @@ -0,0 +1,370 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump + MEMBERS = const char* start_step + MEMBERS = const char* unit + + MEMBERS = const char* year + MEMBERS = const char* month + MEMBERS = const char* day + MEMBERS = const char* hour + MEMBERS = const char* minute + MEMBERS = const char* second + + MEMBERS = const char* year_of_end_of_interval + MEMBERS = const char* month_of_end_of_interval + MEMBERS = const char* day_of_end_of_interval + MEMBERS = const char* hour_of_end_of_interval + MEMBERS = const char* minute_of_end_of_interval + MEMBERS = const char* second_of_end_of_interval + + MEMBERS = const char* coded_unit + MEMBERS = const char* coded_time_range + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2end_step { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g2end_step */ + const char* start_step; + const char* unit; + const char* year; + const char* month; + const char* day; + const char* hour; + const char* minute; + const char* second; + const char* year_of_end_of_interval; + const char* month_of_end_of_interval; + const char* day_of_end_of_interval; + const char* hour_of_end_of_interval; + const char* minute_of_end_of_interval; + const char* second_of_end_of_interval; + const char* coded_unit; + const char* coded_time_range; +} grib_accessor_g2end_step; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g2end_step = { + &grib_accessor_class_long, /* super */ + "g2end_step", /* name */ + sizeof(grib_accessor_g2end_step), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2end_step = &_grib_accessor_class_g2end_step; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g2end_step* self = (grib_accessor_g2end_step*)a; + int n = 0; + + self->start_step = grib_arguments_get_name(a->parent->h,c,n++); + self->unit = grib_arguments_get_name(a->parent->h,c,n++); + + self->year = grib_arguments_get_name(a->parent->h,c,n++); + self->month = grib_arguments_get_name(a->parent->h,c,n++); + self->day = grib_arguments_get_name(a->parent->h,c,n++); + self->hour = grib_arguments_get_name(a->parent->h,c,n++); + self->minute = grib_arguments_get_name(a->parent->h,c,n++); + self->second = grib_arguments_get_name(a->parent->h,c,n++); + + self->year_of_end_of_interval = grib_arguments_get_name(a->parent->h,c,n++); + self->month_of_end_of_interval = grib_arguments_get_name(a->parent->h,c,n++); + self->day_of_end_of_interval = grib_arguments_get_name(a->parent->h,c,n++); + self->hour_of_end_of_interval = grib_arguments_get_name(a->parent->h,c,n++); + self->minute_of_end_of_interval = grib_arguments_get_name(a->parent->h,c,n++); + self->second_of_end_of_interval = grib_arguments_get_name(a->parent->h,c,n++); + + self->coded_unit = grib_arguments_get_name(a->parent->h,c,n++); + self->coded_time_range = grib_arguments_get_name(a->parent->h,c,n++); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_double(dumper,a,NULL); +} + +static int u2s2[] = { + 60, /* (0) minutes */ + 3600, /* (1) hour */ + 86400, /* (2) day */ + 2592000, /* (3) month */ + -1, /* (4) */ + -1, /* (5) */ + -1, /* (6) */ + -1, /* (7) */ + -1, /* (8) */ + -1, /* (9) */ + 10800, /* (10) 3 hours */ + 21600, /* (11) 6 hours */ + 43200, /* (12) 12 hours */ + 1 /* (13) seconds */ +}; + +static int u2s[] = { + 60, /* (0) minutes */ + 3600, /* (1) hour */ + 86400, /* (2) day */ + 2592000, /* (3) month */ + -1, /* (4) */ + -1, /* (5) */ + -1, /* (6) */ + -1, /* (7) */ + -1, /* (8) */ + -1, /* (9) */ + 10800, /* (10) 3 hours */ + 21600, /* (11) 6 hours */ + 43200, /* (12) 12 hours */ + 1, /* (13) seconds */ + 900, /* (14) 15 minutes */ + 1800 /* (15) 30 minutes */ +}; + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_g2end_step* self = (grib_accessor_g2end_step*)a; + int err = 0; + long start_step; + long unit; + long coded_unit; + long coded_time_range; + long coded_time_range_sec=0; + int factor; + long u2sf,u2sf_step_unit; + + grib_handle* h=a->parent->h; + + if((err = grib_get_long_internal(h,self->start_step,&start_step))) return err; + + /*point in time */ + if (self->year == NULL) { + *val=start_step; + return 0; + } + + if((err = grib_get_long_internal(h,self->unit,&unit))) return err; + + if((err = grib_get_long_internal(h,self->coded_unit,&coded_unit))) return err; + if((err = grib_get_long_internal(h,self->coded_time_range, + &coded_time_range))) return err; + + if (coded_unit!=unit) { + coded_time_range_sec=coded_time_range*u2s2[coded_unit]; + if (coded_time_range_sec<0) { + factor=60; + if (u2s2[coded_unit] % factor) return GRIB_DECODING_ERROR; + if (u2s[unit] % factor) return GRIB_DECODING_ERROR; + u2sf=u2s2[coded_unit]/factor; + coded_time_range_sec=coded_time_range*u2sf; + u2sf_step_unit=u2s[unit]/factor; + } else { + u2sf_step_unit=u2s[unit]; + } + if (coded_time_range_sec % u2sf_step_unit!=0) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to convert endStep in stepUnits"); + return GRIB_WRONG_STEP_UNIT; + } + coded_time_range = coded_time_range_sec / u2sf_step_unit; + } + + *val = start_step + coded_time_range; + + return GRIB_SUCCESS; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_g2end_step* self = (grib_accessor_g2end_step*)a; + grib_handle* h=a->parent->h; + + int err = 0; + + long year; + long month; + long day; + long hour; + long minute; + long second; + + long start_step; + long unit,coded_unit; + long year_of_end_of_interval; + long month_of_end_of_interval; + long day_of_end_of_interval; + long hour_of_end_of_interval; + long minute_of_end_of_interval = 0; + long second_of_end_of_interval = 0; + + long coded_time_range,time_range; + + double dend, dstep; + + /*point in time */ + if (self->year == NULL) { + err = grib_set_long_internal(h,self->start_step,*val); + return err; + } + + if((err = grib_get_long_internal(h,self->coded_unit,&coded_unit))) return err; + if((err = grib_get_long_internal(h,self->unit,&unit))) return err; + if((err = grib_get_long_internal(h,self->year,&year))) return err; + if((err = grib_get_long_internal(h,self->month,&month))) return err; + if((err = grib_get_long_internal(h,self->day,&day))) return err; + if((err = grib_get_long_internal(h,self->hour,&hour))) return err; + if((err = grib_get_long_internal(h,self->minute,&minute))) return err; + if((err = grib_get_long_internal(h,self->second,&second))) return err; + + if((err = grib_get_long_internal(h,self->start_step,&start_step))) + return err; + + time_range = *val-start_step; + + if (time_range<0){ + grib_context_log(h->context,GRIB_LOG_ERROR, + "endStep < startStep (%ld < %ld)",*val,start_step); + return GRIB_WRONG_STEP; + } + + err=grib_datetime_to_julian(year,month,day,hour,minute,second,&dend); + if (err!=GRIB_SUCCESS) return err; + + dstep=(((double)(*val))*u2s[unit])/u2s[2]; + dend+=dstep; + + err=grib_julian_to_datetime(dend,&year_of_end_of_interval,&month_of_end_of_interval, + &day_of_end_of_interval,&hour_of_end_of_interval, + &minute_of_end_of_interval,&second_of_end_of_interval); + if (err!=GRIB_SUCCESS) return err; + + if((err = grib_set_long_internal(a->parent->h,self->year_of_end_of_interval, + year_of_end_of_interval))) return err; + if((err = grib_set_long_internal(a->parent->h,self->month_of_end_of_interval, + month_of_end_of_interval))) return err; + if((err = grib_set_long_internal(a->parent->h,self->day_of_end_of_interval, + day_of_end_of_interval))) return err; + if((err = grib_set_long_internal(a->parent->h,self->hour_of_end_of_interval, + hour_of_end_of_interval))) return err; + if((err = grib_set_long_internal(a->parent->h,self->minute_of_end_of_interval, + minute_of_end_of_interval))) return err; + if((err = grib_set_long_internal(a->parent->h,self->second_of_end_of_interval, + second_of_end_of_interval))) return err; + + if (time_range*u2s[unit]%u2s2[coded_unit]) { + coded_unit=unit; + if((err = grib_set_long_internal(a->parent->h,self->coded_unit, + coded_unit))) return err; + coded_time_range=time_range; + } else + coded_time_range=(time_range*u2s[unit])/u2s2[coded_unit]; + + if((err = grib_set_long_internal(a->parent->h,self->coded_time_range, + coded_time_range))) return err; + + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_g2grid.c b/src/grib_accessor_class_g2grid.c new file mode 100644 index 000000000..355f44333 --- /dev/null +++ b/src/grib_accessor_class_g2grid.c @@ -0,0 +1,387 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************************* + * Enrico Fucile + ***********************************************/ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double;pack_double;value_count + IMPLEMENTS = init + MEMBERS=const char* latitude_first + MEMBERS=const char* longitude_first + MEMBERS=const char* latitude_last + MEMBERS=const char* longitude_last + MEMBERS=const char* i_increment + MEMBERS=const char* j_increment + MEMBERS=const char* basic_angle + MEMBERS=const char* sub_division + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2grid { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in g2grid */ + const char* latitude_first; + const char* longitude_first; + const char* latitude_last; + const char* longitude_last; + const char* i_increment; + const char* j_increment; + const char* basic_angle; + const char* sub_division; +} grib_accessor_g2grid; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_g2grid = { + &grib_accessor_class_double, /* super */ + "g2grid", /* name */ + sizeof(grib_accessor_g2grid), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2grid = &_grib_accessor_class_g2grid; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g2grid* self = (grib_accessor_g2grid*)a; + int n = 0; + + self->latitude_first = grib_arguments_get_name(a->parent->h,c,n++); + self->longitude_first = grib_arguments_get_name(a->parent->h,c,n++); + self->latitude_last = grib_arguments_get_name(a->parent->h,c,n++); + self->longitude_last = grib_arguments_get_name(a->parent->h,c,n++); + self->i_increment = grib_arguments_get_name(a->parent->h,c,n++); + self->j_increment = grib_arguments_get_name(a->parent->h,c,n++); + self->basic_angle = grib_arguments_get_name(a->parent->h,c,n++); + self->sub_division = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= + GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC | + GRIB_ACCESSOR_FLAG_READ_ONLY ; + +} + +static long value_count(grib_accessor* a) +{ + return 6; +} + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_g2grid* self = (grib_accessor_g2grid*)a; + int ret = 0; + + long basic_angle = 0; + long sub_division = 0; + int n = 0; + long v[6]; + int i; + + if(*len < 6){ + ret = GRIB_ARRAY_TOO_SMALL; + return ret; + } + + if((ret = grib_get_long_internal(a->parent->h, self->basic_angle,&basic_angle)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->sub_division,&sub_division)) != GRIB_SUCCESS) + return ret; + + + if(sub_division == GRIB_MISSING_LONG || sub_division == 0) + sub_division = 1000000; + + + + if(basic_angle == 0) + basic_angle = 1; + + n = 0; + if((ret = grib_get_long_internal(a->parent->h, self->latitude_first,&v[n++])) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->longitude_first,&v[n++])) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->latitude_last,&v[n++])) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->longitude_last,&v[n++])) != GRIB_SUCCESS) + return ret; + + if(!self->i_increment) v[n++] = GRIB_MISSING_LONG; + else + if((ret = grib_get_long_internal(a->parent->h, self->i_increment,&v[n++])) != GRIB_SUCCESS) + return ret; + + if(!self->j_increment) v[n++] = GRIB_MISSING_LONG; + else + if(self->j_increment) + if((ret = grib_get_long_internal(a->parent->h, self->j_increment,&v[n++])) != GRIB_SUCCESS) + return ret; + + for(i = 0 ; i < n ; i++) + if(v[i] == GRIB_MISSING_LONG) + val[i] = GRIB_MISSING_DOUBLE; + else + val[i] = (double)v[i] / (double)sub_division * (double)basic_angle; + + + + return GRIB_SUCCESS; +} + +static long gcd(long a,long b) +{ + if(b>a) return gcd(b,a); + if(b == 0) return a; + return gcd(b,a%b); +} + +static long lcm(long a,long b) +{ + return a*b/gcd(a,b); +} + + +static int is_ok(const double* val,long v[6],double basic_angle,double sub_division) +{ + int i; + int ok = 1; + + for(i = 0; i < 6 ; i++) + { + if(val[i] == GRIB_MISSING_DOUBLE) + v[i] = GRIB_MISSING_LONG; + else + { + double d = (val[i] * sub_division) / basic_angle; + double e; + v[i] = d; + e = (v[i] * basic_angle) / sub_division ; + + /* if(fabs(e - val[i]) >= 1e-6) */ + if(fabs(e - val[i]) > 0) + { + /* printf("e=%g val=%g diff=%g\n",e,val[i],e-val[i]); */ + ok = 0; + } + } + + } + + return ok; +} + +static int try(const double* val,long v[6],long* basic_angle,long* sub_division) +{ + int i = 0; + long ni, nj; + + for(i = 0; i < 6 ; i++) + if(val[i] == GRIB_MISSING_DOUBLE) + return 0; + + if(val[4] == 0) return 0; + if(val[5] == 0) return 0; + + + ni = (long)(0.5+fabs((val[0] - val[2])/val[4])) + 1; + nj = (long)(0.5+fabs((val[1] - val[3])/val[5])) + 1; + + *basic_angle = 360; + *sub_division = lcm(ni,nj); + +#if 0 + printf("ni = %ld, nj = %ld , basic_angle=%ld sub_division = %ld\n", + ni,nj, + *basic_angle,*sub_division); +#endif + if(*sub_division < 0) + return 0; + + Assert(*sub_division >= 0); + + return is_ok(val,v,*basic_angle,*sub_division); + +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_g2grid* self = (grib_accessor_g2grid*)a; + int ret; + long v[6]; + int n; + long basic_angle; + long sub_division; + + if(*len < 6){ + ret = GRIB_ARRAY_TOO_SMALL; + return ret; + } + + /* printf("pack_double %g %g %g %g %g %g\n",val[0],val[1],val[2],val[3],val[4],val[5]);*/ + + if(is_ok(val,v,1,1000000)) + { + basic_angle = 1; + sub_division = 1000000; + } + else if(try(val,v,&basic_angle,&sub_division)) + { + + } + else + { + basic_angle = 1; + sub_division = 1000000; + + if(!is_ok(val,v,basic_angle,sub_division)) + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG,"Grid cannot be coded with any loss of precision"); + } + + if(basic_angle == 1 && sub_division == 1000000) + { + basic_angle = 0; + sub_division = GRIB_MISSING_LONG; + } + + if((ret = grib_set_long_internal(a->parent->h, self->basic_angle,basic_angle)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_set_long_internal(a->parent->h, self->sub_division,sub_division)) != GRIB_SUCCESS) + return ret; + + n = 0; + if((ret = grib_set_long_internal(a->parent->h, self->latitude_first,v[n++])) != GRIB_SUCCESS) + return ret; + + if((ret = grib_set_long_internal(a->parent->h, self->longitude_first,v[n++])) != GRIB_SUCCESS) + return ret; + + if((ret = grib_set_long_internal(a->parent->h, self->latitude_last,v[n++])) != GRIB_SUCCESS) + return ret; + + if((ret = grib_set_long_internal(a->parent->h, self->longitude_last,v[n++])) != GRIB_SUCCESS) + return ret; + + if(!self->i_increment) n++; + else + if((ret = grib_set_long_internal(a->parent->h, self->i_increment,v[n++])) != GRIB_SUCCESS) + return ret; + + if(!self->j_increment) n++; + else + if((ret = grib_set_long_internal(a->parent->h, self->j_increment,v[n++])) != GRIB_SUCCESS) + return ret; + + + return GRIB_SUCCESS; +} + + + diff --git a/src/grib_accessor_class_g2latlon.c b/src/grib_accessor_class_g2latlon.c new file mode 100644 index 000000000..2b0383eac --- /dev/null +++ b/src/grib_accessor_class_g2latlon.c @@ -0,0 +1,234 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/******************************************** + * Enrico Fucile + *********************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = is_missing;pack_missing + IMPLEMENTS = init + MEMBERS=const char* grid + MEMBERS=int index + MEMBERS=const char* given + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_missing(grib_accessor*); +static int is_missing(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2latlon { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in g2latlon */ + const char* grid; + int index; + const char* given; +} grib_accessor_g2latlon; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_g2latlon = { + &grib_accessor_class_double, /* super */ + "g2latlon", /* name */ + sizeof(grib_accessor_g2latlon), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + &pack_missing, /* grib_pack procedures long */ + &is_missing, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2latlon = &_grib_accessor_class_g2latlon; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g2latlon* self = (grib_accessor_g2latlon*)a; + int n = 0; + + self->grid = grib_arguments_get_name(a->parent->h,c,n++); + self->index = grib_arguments_get_long(a->parent->h,c,n++); + self->given = grib_arguments_get_name(a->parent->h,c,n++); +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_g2latlon* self = (grib_accessor_g2latlon*)a; + int ret = 0; + + long given = 1; + double grid[6]; + size_t size = 6; + + if(*len < 1){ + ret = GRIB_ARRAY_TOO_SMALL; + return ret; + } + + if(self->given) + if((ret = grib_get_long_internal(a->parent->h, self->given,&given)) != GRIB_SUCCESS) + return ret; + + if(!given) + { + *val = GRIB_MISSING_DOUBLE; + return GRIB_SUCCESS; + } + + + if((ret = grib_get_double_array_internal(a->parent->h, self->grid,grid,&size)) != GRIB_SUCCESS) + return ret; + + *val = grid[self->index]; + + return GRIB_SUCCESS; +} + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_g2latlon* self = (grib_accessor_g2latlon*)a; + int ret = 0; + + double grid[6]; + size_t size = 6; + + if(*len < 1){ + ret = GRIB_ARRAY_TOO_SMALL; + return ret; + } + + if(self->given) + { + long given = *val != GRIB_MISSING_DOUBLE; + if((ret = grib_set_long_internal(a->parent->h, self->given,given)) != GRIB_SUCCESS) + return ret; + } + + + if((ret = grib_get_double_array_internal(a->parent->h, self->grid,grid,&size)) != GRIB_SUCCESS) + return ret; + + if ( (self->index == 1 || self->index == 3) && *val < 0 ) grid[self->index] = 360+*val; + else grid[self->index] = *val; + + return grib_set_double_array_internal(a->parent->h, self->grid,grid,size); +} + +static int pack_missing(grib_accessor* a) +{ + grib_accessor_g2latlon* self = (grib_accessor_g2latlon*)a; + double missing = GRIB_MISSING_DOUBLE; + size_t size = 1; + + if(!self->given) + return GRIB_NOT_IMPLEMENTED; + + return pack_double(a,&missing,&size); +} + +static int is_missing(grib_accessor* a) +{ + grib_accessor_g2latlon* self = (grib_accessor_g2latlon*)a; + long given = 1; + + + if(self->given) grib_get_long_internal(a->parent->h, self->given,&given); + + + return !given; +} + + diff --git a/src/grib_accessor_class_g2level.c b/src/grib_accessor_class_g2level.c new file mode 100644 index 000000000..f1c8fc0d7 --- /dev/null +++ b/src/grib_accessor_class_g2level.c @@ -0,0 +1,275 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long;init;dump;is_missing + MEMBERS=const char* type_first + MEMBERS=const char* scale_first + MEMBERS=const char* value_first + MEMBERS=const char* pressure_units + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int is_missing(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2level { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g2level */ + const char* type_first; + const char* scale_first; + const char* value_first; + const char* pressure_units; +} grib_accessor_g2level; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g2level = { + &grib_accessor_class_long, /* super */ + "g2level", /* name */ + sizeof(grib_accessor_g2level), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + &is_missing, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2level = &_grib_accessor_class_g2level; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g2level* self = (grib_accessor_g2level*)a; + int n = 0; + + self->type_first = grib_arguments_get_name(a->parent->h,c,n++); + self->scale_first = grib_arguments_get_name(a->parent->h,c,n++); + self->value_first = grib_arguments_get_name(a->parent->h,c,n++); + self->pressure_units = grib_arguments_get_name(a->parent->h,c,n++); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_accessor_g2level* self = (grib_accessor_g2level*)a; + + long type_first = 0; + long scale_first = 0; + long value_first = 0; + char pressure_units[10]={0,}; + size_t pressure_units_len=10; + + double v; + + if((ret = grib_get_long_internal(a->parent->h, self->type_first,&type_first)) + !=GRIB_SUCCESS) return ret; + if((ret = grib_get_long_internal(a->parent->h, self->scale_first,&scale_first)) + !=GRIB_SUCCESS) return ret; + if((ret = grib_get_long_internal(a->parent->h, self->value_first,&value_first)) + !=GRIB_SUCCESS) return ret; + if((ret = grib_get_string_internal(a->parent->h, self->pressure_units,pressure_units,&pressure_units_len)) + !=GRIB_SUCCESS) return ret; + + if (value_first == GRIB_MISSING_LONG) { + *val=0; + return GRIB_SUCCESS; + } + /* value = value_first * 10 ^ -scale_first */ + + if(*len < 1) + return GRIB_WRONG_ARRAY_SIZE; + + v = value_first; + + if(scale_first != GRIB_MISSING_LONG) + { + while(scale_first<0 && v!=0) { v *= 10.0; scale_first ++; } + while(scale_first>0 && v!=0) { v /= 10.0; scale_first --; } + } + + switch(type_first) + { + case 100: /* Isobaric surface (Pa) */ + if (!strcmp(pressure_units,"hPa")) + { + long x= v/100.0; /* 1 hPa = 100 Pa */ + if (scale_first == 0 && x==0) + { + /* Switch to Pa instead of hPa as the value is less than a hectoPascal */ + char pa[]="Pa"; + size_t lpa=strlen(pa); + if((ret = grib_set_string_internal(a->parent->h, self->pressure_units,pa,&lpa)) !=GRIB_SUCCESS) + return ret; + } + else + { + v=x; + } + } + break; + + case 109: /* Potential vorticity surface */ + v *= 1e6; + break; + } + + val[0] = (long)(v+0.5); + + return GRIB_SUCCESS; +} + +/* TODO: Support double */ + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + int ret=0; + long value_first = *val; + long scale_first = 0; + long type_first = 0; + char pressure_units[10]={0,}; + size_t pressure_units_len=10; + + grib_accessor_g2level* self = (grib_accessor_g2level*)a; + + if(*len != 1) + return GRIB_WRONG_ARRAY_SIZE; + + if((ret = grib_get_long_internal(a->parent->h, self->type_first,&type_first)) + !=GRIB_SUCCESS) return ret; + + if((ret = grib_get_string_internal(a->parent->h, self->pressure_units,pressure_units,&pressure_units_len)) + !=GRIB_SUCCESS) return ret; + + switch(type_first) + { + case 100: /* Pa */ + scale_first = 0; + if (!strcmp(pressure_units,"hPa")) + value_first *= 100; + break; + + default: + break; + } + + if ( type_first>9 ) { + if((ret = grib_set_long_internal(a->parent->h, self->scale_first,scale_first)) + !=GRIB_SUCCESS) return ret; + if((ret = grib_set_long_internal(a->parent->h, self->value_first,value_first)) + !=GRIB_SUCCESS) return ret; + } + + return GRIB_SUCCESS; +} + +static int is_missing(grib_accessor* a){ + + grib_accessor_g2level* self = (grib_accessor_g2level*)a; + int err=0; + int ret=0; + + ret=grib_is_missing(a->parent->h, self->scale_first,&err) + + grib_is_missing(a->parent->h, self->value_first,&err); + return ret; + +} diff --git a/src/grib_accessor_class_g2lon.c b/src/grib_accessor_class_g2lon.c new file mode 100644 index 000000000..60e408fbe --- /dev/null +++ b/src/grib_accessor_class_g2lon.c @@ -0,0 +1,176 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/******************************************** + * Enrico Fucile + *********************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = init + MEMBERS=const char* longitude + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2lon { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in g2lon */ + const char* longitude; +} grib_accessor_g2lon; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_g2lon = { + &grib_accessor_class_double, /* super */ + "g2lon", /* name */ + sizeof(grib_accessor_g2lon), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2lon = &_grib_accessor_class_g2lon; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g2lon* self = (grib_accessor_g2lon*)a; + int n = 0; + + self->longitude = grib_arguments_get_name(a->parent->h,c,n++); +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_g2lon* self = (grib_accessor_g2lon*)a; + int ret = 0; + long longitude; + + if((ret = grib_get_long(a->parent->h, self->longitude,&longitude)) != GRIB_SUCCESS) + return ret; + + + if (longitude==GRIB_MISSING_LONG) { + *val=GRIB_MISSING_DOUBLE; + return GRIB_SUCCESS; + } + + + *val=((double)longitude) / 1000000.0 ; + + return GRIB_SUCCESS; +} + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_g2lon* self = (grib_accessor_g2lon*)a; + long longitude; + double value=*val; + + if (value == GRIB_MISSING_DOUBLE) { + longitude=GRIB_MISSING_LONG; + } else { + if (value<0) value+=360; + longitude=value * 1000000; + } + return grib_set_long(a->parent->h, self->longitude,longitude); +} + + diff --git a/src/grib_accessor_class_g2step.c b/src/grib_accessor_class_g2step.c new file mode 100644 index 000000000..3d2a3f39d --- /dev/null +++ b/src/grib_accessor_class_g2step.c @@ -0,0 +1,192 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump + MEMBERS = const char* forecast_time + MEMBERS = const char* unit + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2step { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in g2step */ + const char* forecast_time; + const char* unit; +} grib_accessor_g2step; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_g2step = { + &grib_accessor_class_long, /* super */ + "g2step", /* name */ + sizeof(grib_accessor_g2step), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2step = &_grib_accessor_class_g2step; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g2step* self = (grib_accessor_g2step*)a; + int n = 0; + self->forecast_time = grib_arguments_get_name(a->parent->h,c,n++); + self->unit = grib_arguments_get_name(a->parent->h,c,n++); + +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_double(dumper,a,NULL); + +} +static int units[] = { + 0, /* (0) minutes */ + 1, /* (1) hour */ + 24, /* (2) day */ + + 0, 0, 0, 0, 0, 0, 0, + + 3, /* (10) 3 hours */ + 6, /* (11) 6 hours */ + 12, /* (12) 12 hours */ +}; + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_g2step* self = (grib_accessor_g2step*)a; + int err = 0; + long forecast_time = 0,unit = 0; + + err = grib_get_long_internal(a->parent->h,self->unit,&unit); + if(err) return err; + + err = grib_get_long_internal(a->parent->h,self->forecast_time,&forecast_time); + if(err) return err; + + if(!units[unit]) + return GRIB_NOT_IMPLEMENTED; + + *val = forecast_time * units[unit]; + + return GRIB_SUCCESS; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_g2step* self = (grib_accessor_g2step*)a; + int err = 0; + long forecast_time = *val; + long unit = 1; + + Assert(forecast_time >= 0); + + err = grib_set_long_internal(a->parent->h,self->unit,unit); + if(err) return err; + + err = grib_set_long_internal(a->parent->h,self->forecast_time,forecast_time); + if(err) return err; + + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_g2step_range.c b/src/grib_accessor_class_g2step_range.c new file mode 100644 index 000000000..fb57609fe --- /dev/null +++ b/src/grib_accessor_class_g2step_range.c @@ -0,0 +1,255 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/********************************************* + * Enrico Fucile + *******************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = pack_string;unpack_string;value_count + IMPLEMENTS = pack_long;unpack_long;dump + IMPLEMENTS = get_native_type;string_length + IMPLEMENTS = init + MEMBERS = const char* startStep + MEMBERS = const char* endStep + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static size_t string_length(grib_accessor*); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_g2step_range { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in g2step_range */ + const char* startStep; + const char* endStep; +} grib_accessor_g2step_range; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_g2step_range = { + &grib_accessor_class_gen, /* super */ + "g2step_range", /* name */ + sizeof(grib_accessor_g2step_range), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_g2step_range = &_grib_accessor_class_g2step_range; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_g2step_range* self = (grib_accessor_g2step_range*)a; + + int n = 0; + + self->startStep = grib_arguments_get_name(a->parent->h,c,n++); + self->endStep = grib_arguments_get_name(a->parent->h,c,n++); + + a->length=0; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_string(dumper,a,NULL); + +} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) { + grib_accessor_g2step_range* self = (grib_accessor_g2step_range*)a; + grib_handle* h=a->parent->h; + char buf[100]; + int ret=0; + size_t size=0; + long start=0,end=0; + + ret = grib_get_long_internal(h,self->startStep,&start); + if (ret) return ret; + + if (self->endStep==NULL) { + sprintf(buf,"%ld",start); + } else { + ret = grib_get_long_internal(h,self->endStep,&end); + if (ret) return ret; + + if(start == end) + { + sprintf(buf,"%ld",end); + } + else + { + sprintf(buf,"%ld-%ld",start,end); + } + } + + size=strlen(buf)+1; + + if (*lenparent->h; + + long start=0,end=-1; + int ret=0; + char *p=NULL,*q=NULL; + + start=strtol(val, &p,10); + end=start; + + if ( *p!=0 ) end=strtol(++p, &q,10); + ret=grib_set_long_internal(h,self->startStep,start); + if (ret) return ret; + + if(self->endStep!=NULL) { + ret=grib_set_long_internal(h,self->endStep,end); + } + + return 0; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + +static size_t string_length(grib_accessor* a) +{ + return 255; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + char buff[100]; + size_t bufflen=100; + + sprintf(buff,"%ld",*val); + return pack_string( a,buff,&bufflen); +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) { + char buff[100]; + size_t bufflen=100; + long start,end; + char* p=buff; + char* q=NULL; + int err=0; + + + if ((err=unpack_string( a,buff,&bufflen))!=GRIB_SUCCESS) + return err; + + start=strtol(buff, &p,10); + end=start; + if ( *p!=0 ) end=strtol(++p, &q,10); + + *val=end; + + return 0; +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_STRING; +} + diff --git a/src/grib_accessor_class_gds_is_present.c b/src/grib_accessor_class_gds_is_present.c new file mode 100644 index 000000000..b0c540765 --- /dev/null +++ b/src/grib_accessor_class_gds_is_present.c @@ -0,0 +1,206 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/****************************** + * Enrico Fucile + *****************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = pack_long + IMPLEMENTS = init + MEMBERS = const char* gds_present + MEMBERS = const char* grid_definition + MEMBERS = const char* bitmap_present + MEMBERS = const char* values + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_gds_is_present { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in gds_is_present */ + const char* gds_present; + const char* grid_definition; + const char* bitmap_present; + const char* values; +} grib_accessor_gds_is_present; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_gds_is_present = { + &grib_accessor_class_long, /* super */ + "gds_is_present", /* name */ + sizeof(grib_accessor_gds_is_present), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_gds_is_present = &_grib_accessor_class_gds_is_present; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_gds_is_present* self = (grib_accessor_gds_is_present*)a; + self->gds_present = grib_arguments_get_name(a->parent->h,c,n++); + self->grid_definition = grib_arguments_get_name(a->parent->h,c,n++); + self->bitmap_present = grib_arguments_get_name(a->parent->h,c,n++); + self->values = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + a->length=0; +} + +static int pack_long (grib_accessor* a, const long* val, size_t *len) +{ + long missing=255; + int ret=0; + size_t size=0; + double* values; + grib_context* c=a->parent->h->context; + grib_handle* h=a->parent->h; + grib_accessor_gds_is_present* self = (grib_accessor_gds_is_present*)a; + + if (*val != 1) return GRIB_NOT_IMPLEMENTED; + + if ( (ret=grib_get_size(h,self->values,&size)) != GRIB_SUCCESS) return ret; + + values=(double*)grib_context_malloc(c,size*sizeof(double)); + if (!values) return GRIB_OUT_OF_MEMORY; + + if((ret = grib_get_double_array_internal(h,self->values,values,&size)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + if((ret = grib_set_long_internal(h, self->gds_present,*val)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_set_long_internal(h, self->bitmap_present,*val)) + != GRIB_SUCCESS) return ret; + + + + if((ret = grib_set_long_internal(h, self->grid_definition,missing)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_set_double_array_internal(h, self->values,values,size)) + != GRIB_SUCCESS) return ret; + + grib_context_free(c,values); + + return GRIB_SUCCESS; +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_handle* h=a->parent->h; + grib_accessor_gds_is_present* self = (grib_accessor_gds_is_present*)a; + + if((ret = grib_get_long_internal(h,self->gds_present,val)) + != GRIB_SUCCESS) return ret; + + *len=1; + + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_gds_not_present_bitmap.c b/src/grib_accessor_class_gds_not_present_bitmap.c new file mode 100644 index 000000000..da8b9c8dc --- /dev/null +++ b/src/grib_accessor_class_gds_not_present_bitmap.c @@ -0,0 +1,293 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/****************************** + * Enrico Fucile + *****************************/ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init + IMPLEMENTS = unpack_double + IMPLEMENTS = pack_double + IMPLEMENTS = value_count + MEMBERS=const char* missing_value + MEMBERS=const char* number_of_values + MEMBERS=const char* number_of_points + MEMBERS=const char* latitude_of_first_point + MEMBERS=const char* ni + + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_gds_not_present_bitmap { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in gds_not_present_bitmap */ + const char* missing_value; + const char* number_of_values; + const char* number_of_points; + const char* latitude_of_first_point; + const char* ni; +} grib_accessor_gds_not_present_bitmap; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_gds_not_present_bitmap = { + &grib_accessor_class_gen, /* super */ + "gds_not_present_bitmap", /* name */ + sizeof(grib_accessor_gds_not_present_bitmap), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_gds_not_present_bitmap = &_grib_accessor_class_gds_not_present_bitmap; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + int n=0; + grib_accessor_gds_not_present_bitmap *self =(grib_accessor_gds_not_present_bitmap*)a; + + self->missing_value = grib_arguments_get_name(a->parent->h,args,n++); + self->number_of_values = grib_arguments_get_name(a->parent->h,args,n++); + self->number_of_points = grib_arguments_get_name(a->parent->h,args,n++); + self->latitude_of_first_point = grib_arguments_get_name(a->parent->h,args,n++); + self->ni = grib_arguments_get_name(a->parent->h,args,n++); + + + a->length = 0; +} + + +static long value_count(grib_accessor* a) +{ + grib_accessor_gds_not_present_bitmap* self = (grib_accessor_gds_not_present_bitmap*)a; + long number_of_points; + int err; + + if ((err=grib_get_long_internal(a->parent->h, self->number_of_points, &number_of_points)) != GRIB_SUCCESS) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_class_bitmap.value_count : cannot get %s err=%d",self->number_of_points,err); + + return number_of_points; +} + + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_gds_not_present_bitmap* self = (grib_accessor_gds_not_present_bitmap*)a; + + long number_of_points=0,number_of_values=0,ni=0; + long latitude_of_first_point=0; + size_t i = 0; + size_t n_vals = grib_value_count(a); + size_t size=0; + long missing_value; + + int err = 0; + double* coded_vals = NULL; + + if((err = grib_get_long(a->parent->h,self->number_of_points,&number_of_points)) + != GRIB_SUCCESS) return err; + + if((err = grib_get_long(a->parent->h,self->number_of_values,&number_of_values)) + != GRIB_SUCCESS) return err; + + if((err = grib_get_long(a->parent->h,self->latitude_of_first_point,&latitude_of_first_point)) + != GRIB_SUCCESS) return err; + + if((err = grib_get_long(a->parent->h,self->missing_value,&missing_value)) + != GRIB_SUCCESS) return err; + + if((err = grib_get_long(a->parent->h,self->ni,&ni)) + != GRIB_SUCCESS) return err; + + if(*len < number_of_points) + { + *len = n_vals; + return GRIB_ARRAY_TOO_SMALL; + } + + if(number_of_values > 0){ + coded_vals = grib_context_malloc(a->parent->h->context,number_of_values*sizeof(double)); + + if(coded_vals == NULL) + return GRIB_OUT_OF_MEMORY; + } + + size=number_of_values; + + if (latitude_of_first_point == 0) { + for (i=0;i < number_of_values;i++) val[i]=1; + for (i=number_of_values;iparent->h->context,coded_vals); + return err; +} + +#if 0 + +static void grib_set_bit_on( unsigned char* p, long *bitp){ + unsigned char o = 1; + p += (*bitp >> 3); + o <<= 7-((*bitp)%8); + *p |= o; + (*bitp)+=1; +} + +static int pack_double(grib_accessor* a, const double* val,size_t *len){ + grib_accessor_gds_not_present_bitmap* self = (grib_accessor_gds_not_present_bitmap*)a; + + size_t tlen; + + unsigned char* buf = NULL; + long i; + int err = 0; + long pos = 0; + long bmaplen = 0; + const int bit_padding = 16; + double miss_values = 0; + tlen = ((*len+bit_padding-1)/bit_padding*bit_padding)/8; + + if((err = grib_get_double_internal(a->parent->h, self->missing_value, &miss_values)) != GRIB_SUCCESS) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_class_bitmap : pack_double : Cannot unpack %s err=%d ",self->missing_value,err); + return err; + } + + buf = grib_context_malloc_clear(a->parent->h->context,tlen); + if(!buf) return GRIB_OUT_OF_MEMORY; + pos=0; + for(i=0;i<*len;i++) + { + if (val[i] == miss_values) + pos++; + else{ + bmaplen++; + grib_set_bit_on(buf, &pos); + } + } + + if((err = grib_set_long_internal(a->parent->h, self->unusedBits,tlen*8 - *len )) != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_class_bitmap : pack_double : Cannot pack %s err=%d ",self->unusedBits,err); + grib_context_free(a->parent->h->context,buf); + return err; + } + + + grib_buffer_replace(a, buf, tlen,1,1); + + grib_context_free(a->parent->h->context,buf); + + return GRIB_SUCCESS; +} + +#else + +static int pack_double(grib_accessor* a, const double* val,size_t *len){ + return GRIB_NOT_IMPLEMENTED; +} + +#endif diff --git a/src/grib_accessor_class_gen.c b/src/grib_accessor_class_gen.c new file mode 100644 index 000000000..e7e218546 --- /dev/null +++ b/src/grib_accessor_class_gen.c @@ -0,0 +1,538 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + IMPLEMENTS = unpack_long;pack_long; clear + IMPLEMENTS = unpack_double;pack_double;unpack_double_element + IMPLEMENTS = unpack_string;pack_string + IMPLEMENTS = unpack_bytes;pack_bytes + IMPLEMENTS = unpack_double_subarray + IMPLEMENTS = init;dump;destroy;string_length + IMPLEMENTS = get_native_type;sub_section + IMPLEMENTS = next_offset;value_count;byte_offset;byte_count + IMPLEMENTS = notify_change;pack_expression + IMPLEMENTS = update_size; next; preferred_size + IMPLEMENTS = compare;is_missing + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static grib_section* sub_section(grib_accessor* a); +static int get_native_type(grib_accessor*); +static int is_missing(grib_accessor*); +static int pack_bytes(grib_accessor*,const unsigned char*, size_t *len); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int pack_expression(grib_accessor*, grib_expression*); +static int unpack_bytes (grib_accessor*,unsigned char*, size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static size_t string_length(grib_accessor*); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static long next_offset(grib_accessor*); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int notify_change(grib_accessor*,grib_accessor*); +static void update_size(grib_accessor*,size_t); +static size_t preferred_size(grib_accessor*,int); +static grib_accessor* next(grib_accessor*, int); +static int compare(grib_accessor*, grib_accessor*); +static int unpack_double_element(grib_accessor*,size_t i, double* val); +static int unpack_double_subarray(grib_accessor*, double* val,size_t start,size_t len); +static int clear(grib_accessor*); + +typedef struct grib_accessor_gen { + grib_accessor att; +/* Members defined in gen */ +} grib_accessor_gen; + + +static grib_accessor_class _grib_accessor_class_gen = { + 0, /* super */ + "gen", /* name */ + sizeof(grib_accessor_gen), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + &dump, /* describes himself */ + &next_offset, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + &get_native_type, /* get native type */ + &sub_section, /* get sub_section */ + 0, /* grib_pack procedures long */ + &is_missing, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + &pack_bytes, /* grib_pack procedures bytes */ + &unpack_bytes, /* grib_unpack procedures bytes */ + &pack_expression, /* pack_expression */ + ¬ify_change, /* notify_change */ + &update_size, /* update_size */ + &preferred_size, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + &next, /* next accessor */ + &compare, /* compare vs. another accessor */ + &unpack_double_element, /* unpack only ith value */ + &unpack_double_subarray, /* unpack a subarray */ + &clear, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_gen = &_grib_accessor_class_gen; + + +static void init_class(grib_accessor_class* c) +{ +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long len, grib_arguments* param) +{ + + grib_action* act=(grib_action*)(a->creator); + if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { + a->length = 0; + if (!a->vvalue) + a->vvalue = grib_context_malloc_clear(a->parent->h->context,sizeof(grib_virtual_value)); + a->vvalue->type=grib_accessor_get_native_type(a); + a->vvalue->length=len; + if (act->default_value!=NULL) { + const char* p = 0; + size_t len = 1; + long l; + int ret=0; + double d; + char tmp[1024]; + grib_expression* expression=grib_arguments_get_expression(a->parent->h,act->default_value,0); + int type = grib_expression_native_type(a->parent->h,expression); + switch(type) { + case GRIB_TYPE_DOUBLE: + grib_expression_evaluate_double(a->parent->h,expression,&d); + grib_pack_double(a,&d,&len); + break; + + case GRIB_TYPE_LONG: + grib_expression_evaluate_long(a->parent->h,expression,&l); + grib_pack_long(a,&l,&len); + break; + + default: + len = sizeof(tmp); + p = grib_expression_evaluate_string(a->parent->h,expression,tmp,&len,&ret); + if (ret != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"unable to evaluate %s as string",a->name); + Assert(0); + } + len = strlen(p)+1; + grib_pack_string(a,p,&len); + break; + } + } + } else + a->length = len; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + if(a->cclass->unpack_string) + grib_dump_string(dumper,a,NULL); + else if(a->cclass->unpack_double) + grib_dump_double(dumper,a,NULL); + else if(a->cclass->unpack_long) + grib_dump_long(dumper,a,NULL); + else + grib_dump_bytes(dumper,a,NULL); +} + +static long next_offset(grib_accessor* a) +{ + return a->offset+a->length; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + +static size_t string_length(grib_accessor* a) +{ + return 1024; +} + +static long byte_count(grib_accessor* a) +{ + return a->length; +} + +static int get_native_type(grib_accessor* a){ + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "Accessor %s [%s] must implement 'get_native_type'", a->name,a->cclass->name); + return GRIB_TYPE_UNDEFINED; +} + +static long byte_offset(grib_accessor* a) +{ + return a->offset; +} + +static int unpack_bytes(grib_accessor* a, unsigned char* val, size_t *len) +{ + unsigned char* buf = a->parent->h->buffer->data; + long length = grib_byte_count(a); + long offset = grib_byte_offset(a); + + + if(*len < length ) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it is %d bytes long\n", a->name ,length ); + *len = length; + return GRIB_ARRAY_TOO_SMALL; + } + + + memcpy(val,buf + offset,length ); + *len = length; + + return GRIB_SUCCESS; +} + +static int clear(grib_accessor* a) +{ + unsigned char* buf = a->parent->h->buffer->data; + long length = grib_byte_count(a); + long offset = grib_byte_offset(a); + + memset(buf + offset,0,length); + + return GRIB_SUCCESS; +} + +static int unpack_long (grib_accessor* a, long* v, size_t *len){ + + if(a->cclass->unpack_double && a->cclass->unpack_double != &unpack_double) + { + double val = 0.0; + size_t l = 1; + grib_unpack_double (a , &val, &l); + *v = (long)val; + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, " Casting double %s to long", a->name); + return GRIB_SUCCESS; + } + + if(a->cclass->unpack_string && a->cclass->unpack_string != &unpack_string) + { + char val[1024]; + size_t l = sizeof(val); + char *last = NULL; + grib_unpack_string (a , val, &l); + + *v = strtol(val,&last,10); + + if(*last == 0) + { + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, " Casting string %s to long", a->name); + return GRIB_SUCCESS; + } + } + + return GRIB_NOT_IMPLEMENTED; +} + +static int unpack_double (grib_accessor* a, double*v, size_t *len){ + + if(a->cclass->unpack_long && a->cclass->unpack_long != &unpack_long) + { + long val = 0; + size_t l = 1; + grib_unpack_long (a , &val, &l); + *v = val; + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, " Casting long %s to double", a->name); + return GRIB_SUCCESS; + } + + if(a->cclass->unpack_string && a->cclass->unpack_string != &unpack_string) + { + char val[1024]; + size_t l = sizeof(val); + char *last = NULL; + grib_unpack_string (a , val, &l); + + *v = strtod(val,&last); + + if(*last == 0) + { + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, " Casting string %s to long", a->name); + return GRIB_SUCCESS; + } + } + + return GRIB_NOT_IMPLEMENTED; +} + +static int unpack_string(grib_accessor*a , char* v, size_t *len){ + + if(a->cclass->unpack_double && a->cclass->unpack_double != &unpack_double) + { + double val = 0.0; + size_t l = 1; + grib_unpack_double (a , &val, &l); + sprintf(v,"%g",val); + *len = strlen(v); + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, " Casting double %s to string", a->name); + return GRIB_SUCCESS; + } + + if(a->cclass->unpack_long && a->cclass->unpack_long != &unpack_long) + { + long val = 0; + size_t l = 1; + grib_unpack_long (a , &val, &l); + sprintf(v,"%ld",val); + *len = strlen(v); + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, " Casting long %s to string \n", a->name); + return GRIB_SUCCESS; + } + + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_expression(grib_accessor* a, grib_expression *e){ + size_t len = 1; + long lval; + double dval; + const char *cval; + int ret=0; + char tmp[1024]; + + switch(grib_accessor_get_native_type(a)) + { + case GRIB_TYPE_LONG: + len = 1; + ret = grib_expression_evaluate_long(a->parent->h,e,&lval); + if (ret != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"unable to set %s as long",a->name); + return ret; + } + return grib_pack_long(a,&lval,&len); + break; + + case GRIB_TYPE_DOUBLE: + len = 1; + ret = grib_expression_evaluate_double(a->parent->h,e,&dval); + return grib_pack_double(a,&dval,&len); + break; + + case GRIB_TYPE_STRING: + len = sizeof(tmp); + cval = grib_expression_evaluate_string(a->parent->h,e,tmp,&len,&ret); + if (ret != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"unable to set %s as string",a->name); + return ret; + } + len = strlen(cval); + return grib_pack_string(a,cval,&len); + break; + } + + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_long(grib_accessor* a, const long* v, size_t *len){ + grib_context* c=a->parent->h->context; + if(a->cclass->pack_double && a->cclass->pack_double != &pack_double) + { + int i=0,ret=0; + double* val = (double*)grib_context_malloc(c,*len*(sizeof(double))) ; + if (!val) { + grib_context_log(c,GRIB_LOG_ERROR, + "unable to allocate %d bytes\n",(int)(*len*(sizeof(double)))); + return GRIB_OUT_OF_MEMORY; + } + for (i=0;i<*len;i++) val[i]=(long)v[i]; + ret=grib_pack_double (a , val, len); + grib_context_free(c,val); + return ret; + } + grib_context_log(c,GRIB_LOG_ERROR, " Should not grib_pack %s as long", a->name); + Assert(0); + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_double(grib_accessor* a, const double *v, size_t *len){ + grib_context* c=a->parent->h->context; + if(a->cclass->pack_long && a->cclass->pack_long != &pack_long) + { + int i=0,ret=0; + long* val = (long*)grib_context_malloc(c,*len*(sizeof(long))) ; + if (!val) { + grib_context_log(c,GRIB_LOG_ERROR, + "unable to allocate %d bytes\n",(int)(*len*(sizeof(long)))); + return GRIB_OUT_OF_MEMORY; + } + for (i=0;i<*len;i++) val[i]=(long)v[i]; + ret=grib_pack_long (a , val, len); + grib_context_free(c,val); + return ret; + } + grib_context_log(c,GRIB_LOG_ERROR, " Should not grib_pack %s as double", a->name); + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_string(grib_accessor*a , const char* v, size_t *len){ + if(a->cclass->pack_double && a->cclass->pack_double != &pack_double) + { + size_t l = 1; + double val = atof(v); + return grib_pack_double (a , &val, &l); + } + + if(a->cclass->pack_long && a->cclass->pack_long != &pack_long) + { + size_t l = 1; + long val = atof(v); + return grib_pack_long (a , &val, &l); + } + + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + " Should not grib_pack %s as string", a->name); + return GRIB_NOT_IMPLEMENTED; +} + +static int pack_bytes(grib_accessor* a, const unsigned char* val, size_t *len) +{ + size_t length = *len; + grib_buffer_replace(a, val, length,1,1); + return GRIB_SUCCESS; +} + +static void destroy(grib_context* ct, grib_accessor* a) +{ + grib_dependency_remove_observed(a); + grib_dependency_remove_observer(a); + if (a->vvalue!=NULL) { + grib_context_free(ct,a->vvalue); + a->vvalue=NULL; + } +} + +static grib_section* sub_section(grib_accessor* a) +{ + return NULL; +} + +static int notify_change(grib_accessor* self,grib_accessor* observed) +{ + /* Default behaviour is to notify creator */ + return grib_action_notify_change(self->creator,self,observed); +} + +static void update_size(grib_accessor* a,size_t s) +{ + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "Accessor %s [%s] must implement 'update_size'", a->name,a->cclass->name); + Assert(0 == 1); +} + +static grib_accessor* next(grib_accessor* a, int mod) { + grib_accessor* next=NULL; + if (a->next) { + next=a->next; + } else { + if (a->parent->owner) + next=a->parent->owner->cclass->next(a->parent->owner,0); + } + return next; +} + + +static int compare(grib_accessor* a, grib_accessor* b) { + return GRIB_NOT_IMPLEMENTED; +} + +/* Redefined in all padding */ + +static size_t preferred_size(grib_accessor* a,int from_handle) +{ + return a->length; +} + +static int is_missing(grib_accessor* a){ + int i=0; + int is_missing=1; + unsigned char ones=0xff; + unsigned char* v=NULL; + + if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { + if (a->vvalue == NULL) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"%s internal error (flags=0x%X)",a->name,a->flags); + } + Assert(a->vvalue!=NULL); + return a->vvalue->missing; + } + Assert(a->length>=0); + + v=a->parent->h->buffer->data+a->offset; + + for (i=0; i < a->length; i++) { + if (*v != ones) { + is_missing=0; + break; + } + v++; + } + + return is_missing; +} + +static int unpack_double_element(grib_accessor* a, size_t i, double* val) { + return GRIB_NOT_IMPLEMENTED; +} + +static int unpack_double_subarray(grib_accessor* a, double* val,size_t start,size_t len) { + return GRIB_NOT_IMPLEMENTED; +} + diff --git a/src/grib_accessor_class_global_gaussian.c b/src/grib_accessor_class_global_gaussian.c new file mode 100644 index 000000000..1147594f4 --- /dev/null +++ b/src/grib_accessor_class_global_gaussian.c @@ -0,0 +1,320 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************************* + * Enrico Fucile + ***********************************************/ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init + MEMBERS=const char* N + MEMBERS=const char* Ni + MEMBERS=const char* di + MEMBERS=const char* latfirst + MEMBERS=const char* lonfirst + MEMBERS=const char* latlast + MEMBERS=const char* lonlast + MEMBERS=const char* basic_angle + MEMBERS=const char* subdivision + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_global_gaussian { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in global_gaussian */ + const char* N; + const char* Ni; + const char* di; + const char* latfirst; + const char* lonfirst; + const char* latlast; + const char* lonlast; + const char* basic_angle; + const char* subdivision; +} grib_accessor_global_gaussian; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_global_gaussian = { + &grib_accessor_class_long, /* super */ + "global_gaussian", /* name */ + sizeof(grib_accessor_global_gaussian), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_global_gaussian = &_grib_accessor_class_global_gaussian; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_global_gaussian* self = (grib_accessor_global_gaussian*)a; + int n = 0; + + self->N = grib_arguments_get_name(a->parent->h,c,n++); + self->Ni = grib_arguments_get_name(a->parent->h,c,n++); + self->di = grib_arguments_get_name(a->parent->h,c,n++); + self->latfirst = grib_arguments_get_name(a->parent->h,c,n++); + self->lonfirst = grib_arguments_get_name(a->parent->h,c,n++); + self->latlast = grib_arguments_get_name(a->parent->h,c,n++); + self->lonlast = grib_arguments_get_name(a->parent->h,c,n++); + self->basic_angle = grib_arguments_get_name(a->parent->h,c,n++); + self->subdivision = grib_arguments_get_name(a->parent->h,c,n++); +} + + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_global_gaussian* self = (grib_accessor_global_gaussian*)a; + int ret = GRIB_SUCCESS; + long latfirst,latlast,lonfirst,lonlast,basic_angle,subdivision,N,Ni; + double dlatfirst,dlatlast,dlonfirst,dlonlast,d; + double* lats; + long factor; + grib_context* c=a->parent->h->context; + + if (self->basic_angle && self->subdivision) { + + factor=1000000; + if((ret = grib_get_long_internal(a->parent->h, self->basic_angle,&basic_angle)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->subdivision,&subdivision)) != GRIB_SUCCESS) + return ret; + + if ((basic_angle!=0 && basic_angle!=GRIB_MISSING_LONG) || + ( subdivision !=0 && subdivision == GRIB_MISSING_LONG)) { + *val=0; + return ret; + } + } else { + factor=1000; + } + + if((ret = grib_get_long_internal(a->parent->h, self->N,&N)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->Ni,&Ni)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->latfirst,&latfirst)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->lonfirst,&lonfirst)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->latlast,&latlast)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->lonlast,&lonlast)) != GRIB_SUCCESS) + return ret; + + dlatfirst=((double)latfirst)/factor; + dlatlast=((double)latlast)/factor; + dlonfirst=((double)lonfirst)/factor; + dlonlast=((double)lonlast)/factor; + + lats=(double*)grib_context_malloc(c,sizeof(double)*N*2); + if (!lats) { + grib_context_log(c,GRIB_LOG_FATAL, + "global_gaussian: unable to allocate %d bytes",sizeof(double)*N*2); + } + if((ret = grib_get_gaussian_latitudes(N, lats)) != GRIB_SUCCESS) + return ret; + + if (Ni == GRIB_MISSING_LONG ) Ni=N*4; + d=fabs(lats[0]-lats[1]); + if ( (fabs(dlatfirst-lats[0]) >= d ) || + (fabs(dlatlast+lats[0]) >= d ) || + dlonfirst != 0 || + fabs(dlonlast - (360.0-360.0/Ni)) > 360.0/Ni + ) + { + /* not global */ + *val=0; + } else { + /* global */ + *val=1; + } + + grib_context_free(c,lats); + + return ret; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_global_gaussian* self = (grib_accessor_global_gaussian*)a; + int ret=GRIB_SUCCESS; + long latfirst,latlast,lonfirst,lonlast,di,diold,basic_angle=0,N,Ni; + long factor; + double* lats; + double ddi,dlonlast; + double dfactor,dNi; + grib_context* c=a->parent->h->context; + + if (*val == 0) return ret; + + if (self->basic_angle) { + factor=1000000; + if((ret = grib_set_missing(a->parent->h, self->subdivision)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_set_long_internal(a->parent->h, self->basic_angle,basic_angle)) != GRIB_SUCCESS) + return ret; + } else factor=1000; + + if((ret = grib_get_long_internal(a->parent->h, self->N,&N)) != GRIB_SUCCESS) + return ret; + if (N==0) return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->Ni,&Ni)) != GRIB_SUCCESS) + return ret; + if (Ni == GRIB_MISSING_LONG ) Ni=N*4; + if (Ni==0) return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->di,&diold)) != GRIB_SUCCESS) + return ret; + + lats=(double*)grib_context_malloc(c,sizeof(double)*N*2); + if (!lats) { + grib_context_log(c,GRIB_LOG_FATAL, + "global_gaussian: unable to allocate %d bytes",sizeof(double)*N*2); + } + if((ret = grib_get_gaussian_latitudes(N, lats)) != GRIB_SUCCESS) + return ret; + + /* rounding */ + latfirst=(long)(lats[0]*factor+0.5); + latlast=-latfirst; + lonfirst=0; + dfactor=(double)factor; + dNi=(double)Ni; + ddi=(360.0*dfactor)/dNi; + dlonlast=(360.0*dfactor)-ddi+0.5; + ddi=ddi+0.5; + di=ddi; + lonlast=dlonlast; + + grib_context_free(c,lats); + + if((ret = grib_set_long_internal(a->parent->h, self->latfirst,latfirst)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_set_long_internal(a->parent->h, self->lonfirst,lonfirst)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_set_long_internal(a->parent->h, self->latlast,latlast)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_set_long_internal(a->parent->h, self->lonlast,lonlast)) != GRIB_SUCCESS) + return ret; + + if (diold != GRIB_MISSING_LONG) + if((ret = grib_set_long_internal(a->parent->h, self->di,di)) != GRIB_SUCCESS) + return ret; + + return GRIB_SUCCESS; +} + + + diff --git a/src/grib_accessor_class_gts_header.c b/src/grib_accessor_class_gts_header.c new file mode 100644 index 000000000..5a7d3f900 --- /dev/null +++ b/src/grib_accessor_class_gts_header.c @@ -0,0 +1,178 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_ascii + IMPLEMENTS = pack_string;unpack_string;value_count + IMPLEMENTS = init;string_length + MEMBERS = int gts_offset + MEMBERS = int gts_length + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static size_t string_length(grib_accessor*); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_gts_header { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in ascii */ +/* Members defined in gts_header */ + int gts_offset; + int gts_length; +} grib_accessor_gts_header; + +extern grib_accessor_class* grib_accessor_class_ascii; + +static grib_accessor_class _grib_accessor_class_gts_header = { + &grib_accessor_class_ascii, /* super */ + "gts_header", /* name */ + sizeof(grib_accessor_gts_header), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_gts_header = &_grib_accessor_class_gts_header; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_gts_header* self = (grib_accessor_gts_header*)a; + self->gts_offset = -1; + self->gts_length = -1; + self->gts_offset = grib_arguments_get_long(a->parent->h,c,0); + self->gts_length = grib_arguments_get_long(a->parent->h,c,1); +} + +static int pack_string(grib_accessor* a, const char* val, size_t *len){ + + return GRIB_NOT_IMPLEMENTED; + +} + + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + grib_accessor_gts_header* self=(grib_accessor_gts_header*)a; + grib_handle* h=a->parent->h; + int offset=0; + int length=0; + + if (h->gts_header==NULL || h->gts_header_len<8) { + if (*len < 8) return GRIB_ARRAY_TOO_SMALL; + sprintf(val,"missing"); + return GRIB_SUCCESS; + } + if (*len < h->gts_header_len ) return GRIB_ARRAY_TOO_SMALL; + + offset = self->gts_offset > 0 ? self->gts_offset : 0; + length = self->gts_length > 0 ? self->gts_length : h->gts_header_len; + + memcpy(val,h->gts_header+offset , length); + + *len = length; + + return GRIB_SUCCESS; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + +static size_t string_length(grib_accessor* a) +{ + grib_handle* h=a->parent->h; + return h->gts_header_len; +} diff --git a/src/grib_accessor_class_headers_only.c b/src/grib_accessor_class_headers_only.c new file mode 100644 index 000000000..8df9df2fa --- /dev/null +++ b/src/grib_accessor_class_headers_only.c @@ -0,0 +1,140 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*********************************************** + * Enrico Fucile + **********************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = unpack_long + IMPLEMENTS = init + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_headers_only { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in headers_only */ +} grib_accessor_headers_only; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_headers_only = { + &grib_accessor_class_gen, /* super */ + "headers_only", /* name */ + sizeof(grib_accessor_headers_only), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_headers_only = &_grib_accessor_class_headers_only; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + *val = a->parent->h->partial; + *len =1; + return 0; +} + diff --git a/src/grib_accessor_class_ibmfloat.c b/src/grib_accessor_class_ibmfloat.c new file mode 100644 index 000000000..d586c9a99 --- /dev/null +++ b/src/grib_accessor_class_ibmfloat.c @@ -0,0 +1,257 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/******************************** + * Enrico Fucile + *******************************/ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = init + IMPLEMENTS = next_offset + IMPLEMENTS = byte_count + IMPLEMENTS = value_count + IMPLEMENTS = byte_offset + MEMBERS = grib_arguments* arg + IMPLEMENTS = update_size + IMPLEMENTS = nearest_smaller_value + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static long next_offset(grib_accessor*); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); +static int nearest_smaller_value (grib_accessor*, double,double*); + +typedef struct grib_accessor_ibmfloat { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in ibmfloat */ + grib_arguments* arg; +} grib_accessor_ibmfloat; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_ibmfloat = { + &grib_accessor_class_double, /* super */ + "ibmfloat", /* name */ + sizeof(grib_accessor_ibmfloat), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + &next_offset, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + &nearest_smaller_value, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_ibmfloat = &_grib_accessor_class_ibmfloat; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->string_length = (*(c->super))->string_length; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len, grib_arguments* arg) +{ + grib_accessor_ibmfloat* self = (grib_accessor_ibmfloat*)a; + self->arg = arg; + a->length = 4*grib_value_count(a); + Assert(a->length>=0); +} + + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + + unsigned long rlen = grib_value_count(a); + unsigned long i = 0; + long bitp = a->offset*8; + + if(*len < rlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " wrong size (%ld) for %s it contains %d values ", *len,a->name , rlen); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + for(i=0; i< rlen; i++) + val[i] = grib_long_to_ibm(grib_decode_unsigned_long(a->parent->h->buffer->data,&bitp,32)); + + *len = rlen; + return GRIB_SUCCESS; +} + +static int pack_double (grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_ibmfloat* self = (grib_accessor_ibmfloat*)a; + int ret = 0; + unsigned long i = 0; + unsigned long rlen = *len; + size_t buflen = 0; + unsigned char *buf = NULL; + long off = 0; + + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " wrong size for %s it pack at least 1 values ", a->name , rlen ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + if (rlen == 1){ +/* + double x = 0; + grib_nearest_smaller_ibm_float(val[0],&x); + double y = grib_long_to_ibm(grib_ibm_to_long(val[0])); + printf("IBMFLOAT val=%.20f nearest_smaller_ibm_float=%.20f long_to_ibm=%.20f\n",val[0],x ,y); +*/ + off = byte_offset(a)*8; + ret = grib_encode_unsigned_long(a->parent->h->buffer->data,grib_ibm_to_long(val[0]), &off, 32); + if (*len > 1) grib_context_log(a->parent->h->context, GRIB_LOG_WARNING, "grib_accessor_unsigned : Trying to pack %d values in a scalar %s, packing first value", *len, a->name ); + if (ret == GRIB_SUCCESS) len[0] = 1; + return ret; + } + + buflen = rlen*4; + + buf = grib_context_malloc(a->parent->h->context,buflen); + + for(i=0; i < rlen;i++){ + grib_encode_unsigned_longb(buf,grib_ibm_to_long(val[i]), &off, 32); + } + ret = grib_set_long_internal(a->parent->h,grib_arguments_get_name(a->parent->h,self->arg,0),rlen); + + if(ret == GRIB_SUCCESS) + grib_buffer_replace(a, buf, buflen,1,1); + else + *len = 0; + + grib_context_free(a->parent->h->context,buf); + + a->length = byte_count(a); + + return ret; + +} + +static long byte_count(grib_accessor* a){ + return a->length; +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_ibmfloat* self = (grib_accessor_ibmfloat*)a; + long len = 0; + int ret =0; + if(!self->arg) return 1; + ret = grib_get_long_internal(a->parent->h,grib_arguments_get_name(a->parent->h,self->arg,0),&len); + if(ret == GRIB_SUCCESS) return len; + return 1; +} + +static long byte_offset(grib_accessor* a){ + return a->offset; +} +static void update_size(grib_accessor* a,size_t s) +{ + a->length = s; + Assert(a->length>=0); +} +static long next_offset(grib_accessor* a){ + return grib_byte_offset(a)+grib_byte_count(a); +} + +static int nearest_smaller_value(grib_accessor* a, double val,double* nearest) +{ + int ret=0; + if (grib_nearest_smaller_ibm_float(val,nearest)==GRIB_INTERNAL_ERROR) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"grib_nearest_smaller_ibm_float overflow value=%g\n",val); + grib_dump_content(a->parent->h,stderr,"wmo",GRIB_DUMP_FLAG_HEXADECIMAL,0); + ret=GRIB_INTERNAL_ERROR; + } + return ret; +} diff --git a/src/grib_accessor_class_ieeefloat.c b/src/grib_accessor_class_ieeefloat.c new file mode 100644 index 000000000..e0a8c2557 --- /dev/null +++ b/src/grib_accessor_class_ieeefloat.c @@ -0,0 +1,228 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = init + IMPLEMENTS = value_count + MEMBERS = grib_arguments* arg + IMPLEMENTS = update_size + IMPLEMENTS = nearest_smaller_value + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); +static int nearest_smaller_value (grib_accessor*, double,double*); + +typedef struct grib_accessor_ieeefloat { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in ieeefloat */ + grib_arguments* arg; +} grib_accessor_ieeefloat; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_ieeefloat = { + &grib_accessor_class_double, /* super */ + "ieeefloat", /* name */ + sizeof(grib_accessor_ieeefloat), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + &nearest_smaller_value, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_ieeefloat = &_grib_accessor_class_ieeefloat; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void init(grib_accessor* a, const long len, grib_arguments* arg) +{ + grib_accessor_ieeefloat* self = (grib_accessor_ieeefloat*)a; + self->arg = arg; + a->length = 4*grib_value_count(a); + + Assert(a->length>=0); +} + +static long value_count(grib_accessor* a){ + grib_accessor_ieeefloat* self = (grib_accessor_ieeefloat*)a; + long len = 0; + int ret =0; + if(!self->arg) return 1; + ret = grib_get_long_internal(a->parent->h,grib_arguments_get_name(a->parent->h,self->arg,0),&len); + if(ret == GRIB_SUCCESS) return len; + return 1; +} + +static int pack_double (grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_ieeefloat* self = (grib_accessor_ieeefloat*)a; + int ret = 0; + unsigned long i = 0; + unsigned long rlen = *len; + size_t buflen = 0; + unsigned char *buf = NULL; + long off = 0; + + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " wrong size for %s it pack at least 1 values ", a->name , rlen ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + if (rlen == 1){ + off = a->offset*8; + ret = grib_encode_unsigned_long(a->parent->h->buffer->data,grib_ieee_to_long(val[0]), &off, 32); + if (*len > 1) grib_context_log(a->parent->h->context, GRIB_LOG_WARNING, "grib_accessor_unsigned : Trying to pack %d values in a scalar %s, packing first value", *len, a->name ); + if (ret == GRIB_SUCCESS) len[0] = 1; + return ret; + } + + buflen = rlen*4; + + buf = grib_context_malloc(a->parent->h->context,buflen); + + for(i=0; i < rlen;i++){ + grib_encode_unsigned_longb(buf,grib_ieee_to_long(val[i]), &off, 32); + } + ret = grib_set_long_internal(a->parent->h,grib_arguments_get_name(a->parent->h,self->arg,0),rlen); + + if(ret == GRIB_SUCCESS) + grib_buffer_replace(a, buf, buflen,1,1); + else + *len = 0; + + grib_context_free(a->parent->h->context,buf); + + + + return ret; + +} + + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + + + unsigned long rlen = grib_value_count(a); + unsigned long i = 0; + long bitp = a->offset*8; + + if(*len < rlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " wrong size (%ld) for %s it contains %d values ", *len,a->name , rlen); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + for(i=0; i< rlen; i++) + val[i] = grib_long_to_ieee(grib_decode_unsigned_long(a->parent->h->buffer->data,&bitp,32)); + + *len = rlen; + return GRIB_SUCCESS; +} +static void update_size(grib_accessor* a,size_t s) +{ + a->length = s; + Assert(a->length>=0); +} + +static int nearest_smaller_value(grib_accessor* a, double val,double* nearest) +{ + return grib_nearest_smaller_ieee_float(val,nearest); +} + diff --git a/src/grib_accessor_class_ifs_param.c b/src/grib_accessor_class_ifs_param.c new file mode 100644 index 000000000..1e0e37906 --- /dev/null +++ b/src/grib_accessor_class_ifs_param.c @@ -0,0 +1,213 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = unpack_long; pack_long + IMPLEMENTS = init; get_native_type + MEMBERS=const char* paramId + MEMBERS=const char* type + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_ifs_param { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in ifs_param */ + const char* paramId; + const char* type; +} grib_accessor_ifs_param; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_ifs_param = { + &grib_accessor_class_gen, /* super */ + "ifs_param", /* name */ + sizeof(grib_accessor_ifs_param), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_ifs_param = &_grib_accessor_class_ifs_param; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_ifs_param* self = (grib_accessor_ifs_param*)a; + int n = 0; + + self->paramId = grib_arguments_get_name(a->parent->h,c,n++); + self->type = grib_arguments_get_name(a->parent->h,c,n++); + +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_ifs_param* self = (grib_accessor_ifs_param*)a; + int ret = 0; + long paramId = 0; + + if((ret = grib_get_long_internal(a->parent->h, self->paramId,¶mId)) != GRIB_SUCCESS) + return ret; + + if (paramId > 129000 && paramId < 129999 ) + *val = paramId - 129000; + else if (paramId > 200000 && paramId < 200999 ) + *val = paramId - 200000; + else if (paramId > 211000 && paramId < 211999 ) + *val = paramId - 1000; + else + *val = paramId; + + return ret; +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_ifs_param* self = (grib_accessor_ifs_param*)a; + long type = 0; + long table=128; + long paramId = *val; + long param; + + grib_get_long(a->parent->h, self->type,&type); + + if (type==33 || type==35) { + if (paramId>1000) { + table=paramId/1000; + param=paramId-table*1000; + paramId=param; + } + switch (table) { + case 210 : + paramId+=211000; + break; + case 128: + paramId+=200000; + break; + default: + break; + } + } + if (type == 50 || type == 52 ) { + if (paramId>1000) { + table=paramId/1000; + param=paramId-table*1000; + paramId=param; + } + switch (table) { + case 128: + paramId+=129000; + break; + default: + break; + } + } + + return grib_set_long_internal(a->parent->h,self->paramId,paramId); +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_LONG; +} + diff --git a/src/grib_accessor_class_iterator.c b/src/grib_accessor_class_iterator.c new file mode 100644 index 000000000..4df43481b --- /dev/null +++ b/src/grib_accessor_class_iterator.c @@ -0,0 +1,158 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************** + * Enrico Fucile + *************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init;dump + MEMBERS=grib_arguments* args + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_iterator { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in iterator */ + grib_arguments* args; +} grib_accessor_iterator; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_iterator = { + &grib_accessor_class_gen, /* super */ + "iterator", /* name */ + sizeof(grib_accessor_iterator), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_iterator = &_grib_accessor_class_iterator; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* args) +{ + grib_accessor_iterator* self = (grib_accessor_iterator*)a; + self->args = args; +} + +static void dump(grib_accessor* a,grib_dumper* dumper) +{ + /* TODO: pass args */ + grib_dump_label(dumper,a,NULL); +} + +grib_iterator* grib_iterator_new(grib_handle* h,unsigned long flags,int* error) +{ + grib_accessor* a = NULL; + grib_accessor_iterator* ita =NULL; + grib_iterator* iter =NULL; + *error=GRIB_NOT_IMPLEMENTED; + a = grib_find_accessor(h,"ITERATOR"); + ita = (grib_accessor_iterator*)a; + + if (!a) return NULL; + + iter = grib_iterator_factory(h,ita->args,flags,error); + + if (iter) *error=GRIB_SUCCESS; + + return iter; +} + diff --git a/src/grib_accessor_class_julian_day.c b/src/grib_accessor_class_julian_day.c new file mode 100644 index 000000000..b608ff486 --- /dev/null +++ b/src/grib_accessor_class_julian_day.c @@ -0,0 +1,224 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = dump + IMPLEMENTS = init + MEMBERS = const char *date + MEMBERS = const char *hour + MEMBERS = const char *minute + MEMBERS = const char *second + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_julian_day { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in julian_day */ + const char *date; + const char *hour; + const char *minute; + const char *second; +} grib_accessor_julian_day; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_julian_day = { + &grib_accessor_class_double, /* super */ + "julian_day", /* name */ + sizeof(grib_accessor_julian_day), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_julian_day = &_grib_accessor_class_julian_day; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_julian_day* self = (grib_accessor_julian_day*)a; + int n=0; + + self->date = grib_arguments_get_name(a->parent->h,c,n++); + self->hour = grib_arguments_get_name(a->parent->h,c,n++); + self->minute = grib_arguments_get_name(a->parent->h,c,n++); + self->second = grib_arguments_get_name(a->parent->h,c,n++); + + a->length=0; +} + + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_string(dumper,a,NULL); +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + const double v=*val; + return pack_double(a,&v,len); +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_julian_day* self = (grib_accessor_julian_day*)a; + int ret=0; + long hour=0; + long minute=0; + long second=0; + long date=0; + long year,month,day; + + ret=grib_julian_to_datetime(*val,&year,&month,&day,&hour,&minute,&second); + + date=year * 10000 + month * 100 + day; + + ret=grib_set_long_internal(a->parent->h,self->date,date); + if (ret!=0) return ret; + ret=grib_set_long_internal(a->parent->h,self->hour,hour); + if (ret!=0) return ret; + ret=grib_set_long_internal(a->parent->h,self->minute,minute); + if (ret!=0) return ret; + ret=grib_set_long_internal(a->parent->h,self->second,second); + + return ret; +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + double v=0; + + ret=unpack_double(a,&v,len); + *val=(long)v; + + return ret; +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + int ret=0; + long date,hour,minute,second; + long year,month,day; + grib_accessor_julian_day* self = (grib_accessor_julian_day*)a; + + ret=grib_get_long_internal(a->parent->h,self->date,&date); + if (ret!=GRIB_SUCCESS) return ret; + ret=grib_get_long_internal(a->parent->h,self->hour,&hour); + if (ret!=GRIB_SUCCESS) return ret; + ret=grib_get_long_internal(a->parent->h,self->minute,&minute); + if (ret!=GRIB_SUCCESS) return ret; + ret=grib_get_long_internal(a->parent->h,self->second,&second); + if (ret!=GRIB_SUCCESS) return ret; + + year = date / 10000; + date %= 10000; + month = date / 100; + date %= 100; + day = date; + + ret=grib_datetime_to_julian(year,month,day,hour,minute,second,val); + + return ret; +} + diff --git a/src/grib_accessor_class_ksec1expver.c b/src/grib_accessor_class_ksec1expver.c new file mode 100644 index 000000000..0d4faa7d1 --- /dev/null +++ b/src/grib_accessor_class_ksec1expver.c @@ -0,0 +1,202 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_ascii + IMPLEMENTS = unpack_long;pack_string; + IMPLEMENTS = pack_long + IMPLEMENTS = init + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_ksec1expver { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in ascii */ +/* Members defined in ksec1expver */ +} grib_accessor_ksec1expver; + +extern grib_accessor_class* grib_accessor_class_ascii; + +static grib_accessor_class _grib_accessor_class_ksec1expver = { + &grib_accessor_class_ascii, /* super */ + "ksec1expver", /* name */ + sizeof(grib_accessor_ksec1expver), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_ksec1expver = &_grib_accessor_class_ksec1expver; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len, grib_arguments* arg ) +{ + a->length = len; + Assert(a->length>=0); +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + + long value = 0; + long pos = a->offset*8; + char *intc = NULL; + char expver[5]; + char refexpver[5]; + size_t llen = a->length+1; + Assert(a->length == 4); + + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + value = grib_decode_unsigned_long(a->parent->h->buffer->data , &pos, a->length*8); + + grib_unpack_string(a, refexpver , &llen); + + /* test for endiannes */ + intc = (char*)&value; + + expver[0] = intc[0]; + expver[1] = intc[1]; + expver[2] = intc[2]; + expver[3] = intc[3]; + expver[4] = 0; + + /* if there is a difference, have to reverse*/ + if(strcmp(refexpver, expver)){ + intc[0] = expver[3]; + intc[1] = expver[2]; + intc[2] = expver[1]; + intc[3] = expver[0]; + } + + *val = value; + *len = 1; + return GRIB_SUCCESS; +} + +static int pack_string(grib_accessor* a, const char* val, size_t *len) +{ + int i = 0; + if (len[0] != 4 ) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong length for %s. It has to be 4",a->name); + return GRIB_INVALID_KEY_VALUE; + } + if(len[0] > (a->length)+1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "pack_string: Wrong size (%d) for %s it contains %d values ", len[0], a->name , a->length+1 ); + len[0] = 0; + return GRIB_BUFFER_TOO_SMALL; + } + + for ( i = 0; i < a->length; i++) + a->parent->h->buffer->data[a->offset+i] = val[i]; + + return GRIB_SUCCESS; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) { + char sval[5]={0,}; + size_t slen=4; + sprintf(sval,"%04d",(int)(*val)); + return pack_string(a,sval,&slen); +} + diff --git a/src/grib_accessor_class_label.c b/src/grib_accessor_class_label.c new file mode 100644 index 000000000..973cfb905 --- /dev/null +++ b/src/grib_accessor_class_label.c @@ -0,0 +1,155 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init;dump;get_native_type;unpack_string + IMPLEMENTS = compare + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_label { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in label */ +} grib_accessor_label; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_label = { + &grib_accessor_class_gen, /* super */ + "label", /* name */ + sizeof(grib_accessor_label), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_label = &_grib_accessor_class_label; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg) +{ + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + a->length = 0; +} + + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_label(dumper,a,NULL); +} + +static int get_native_type(grib_accessor* a) +{ + return GRIB_TYPE_LABEL; +} + + +static int compare(grib_accessor* a, grib_accessor* b) { + return GRIB_SUCCESS; +} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + size_t vlen=strlen(a->name); + if (vlen > *len) return GRIB_BUFFER_TOO_SMALL; + *len=vlen; + strcpy(val,a->name); + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_laplacian.c b/src/grib_accessor_class_laplacian.c new file mode 100644 index 000000000..5475c361f --- /dev/null +++ b/src/grib_accessor_class_laplacian.c @@ -0,0 +1,271 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double;pack_double;is_missing + IMPLEMENTS = pack_long + IMPLEMENTS = init + MEMBERS=const char* value + MEMBERS=const char* multiplier + MEMBERS=const char* divisor + MEMBERS=const char* truncating + MEMBERS=const char* computeLaplacianOperator + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int is_missing(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_laplacian { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in laplacian */ + const char* value; + const char* multiplier; + const char* divisor; + const char* truncating; + const char* computeLaplacianOperator; +} grib_accessor_laplacian; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_laplacian = { + &grib_accessor_class_double, /* super */ + "laplacian", /* name */ + sizeof(grib_accessor_laplacian), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + &is_missing, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_laplacian = &_grib_accessor_class_laplacian; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_laplacian* self = (grib_accessor_laplacian*)a; + int n = 0; + + self->value = grib_arguments_get_name(a->parent->h,c,n++); + self->multiplier = grib_arguments_get_name(a->parent->h,c,n++); + self->divisor = grib_arguments_get_name(a->parent->h,c,n++); + self->truncating = grib_arguments_get_name(a->parent->h,c,n++); + self->computeLaplacianOperator = grib_arguments_get_name(a->parent->h,c,n++); + +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_laplacian* self = (grib_accessor_laplacian*)a; + int ret = 0; + long value = 0; + long multiplier = 0; + long divisor = 0; + + if(*len < 1){ + ret = GRIB_ARRAY_TOO_SMALL; + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "Accessor %s cannot gather value for %s and/or %s error %d", + a->name,self->multiplier, self->divisor, ret); + return ret; + } + + if((ret = grib_get_long_internal(a->parent->h, self->divisor,&divisor)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->multiplier,&multiplier)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->value,&value)) != GRIB_SUCCESS) + return ret; + + if (value == GRIB_MISSING_LONG) *val=GRIB_MISSING_DOUBLE; + else *val = ((double)(value*multiplier))/divisor; + /*printf("unpack_double: divisor=%ld multiplier=%ld long_value=%ld scaled_value=%.30f\n",(double)divisor,(double)multiplier,value,*val);*/ + + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + double dval=(const double)*val; + return pack_double(a, &dval,len); +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_laplacian* self = (grib_accessor_laplacian*)a; + int ret = 0; + + long value = 0; + long divisor = 0; + long multiplier = 0; + long truncating=0; + double x; + + grib_set_long(a->parent->h, self->computeLaplacianOperator,0); + + ret = grib_get_long_internal(a->parent->h, self->divisor,&divisor); + if(ret != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->divisor, ret); + return ret; + } + ret = grib_get_long_internal(a->parent->h, self->multiplier,&multiplier); + if(ret != GRIB_SUCCESS){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->divisor, ret); + return ret; + } + if (self->truncating) { + ret = grib_get_long_internal(a->parent->h, self->truncating,&truncating); + if(ret != GRIB_SUCCESS){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->truncating, ret); + return ret; + } + } + + if (multiplier == 0) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont divide by a zero multiplier %s error %d \n", a->name, self->multiplier, ret); + return GRIB_ENCODING_ERROR; + } + + x=*val * (double)divisor / (double)multiplier; + if (*val == GRIB_MISSING_DOUBLE) value = GRIB_MISSING_LONG; + else if (truncating) { + value = (long)x; + } else { + value = x > 0 ? (long) (x+0.5) : (long)(x-0.5); + } + + ret = grib_set_long_internal(a->parent->h, self->value,value); + if(ret ) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->value, ret); + + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + +static int is_missing(grib_accessor* a){ + grib_accessor_laplacian* self = (grib_accessor_laplacian*)a; + grib_accessor* av=grib_find_accessor(a->parent->h,self->value); + + if (!av) return GRIB_NOT_FOUND; + return grib_is_missing_internal(av); +#if 0 + int ret=0; + long value=0; + + if((ret = grib_get_long_internal(a->parent->h,self->value, + &value) ) != GRIB_SUCCESS){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "Accessor %s cannont gather value for %s error %d \n", a->name, + self->value, ret); + return 0; + } + + return (value == GRIB_MISSING_LONG); +#endif + + +} + diff --git a/src/grib_accessor_class_latitudes.c b/src/grib_accessor_class_latitudes.c new file mode 100644 index 000000000..4b4274c26 --- /dev/null +++ b/src/grib_accessor_class_latitudes.c @@ -0,0 +1,301 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double; + IMPLEMENTS = value_count + IMPLEMENTS = init + MEMBERS =const char* values + MEMBERS =long distinct + MEMBERS =double* lats + MEMBERS =long size + MEMBERS =int save + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_latitudes { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in latitudes */ + const char* values; + long distinct; + double* lats; + long size; + int save; +} grib_accessor_latitudes; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_latitudes = { + &grib_accessor_class_double, /* super */ + "latitudes", /* name */ + sizeof(grib_accessor_latitudes), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_latitudes = &_grib_accessor_class_latitudes; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static int get_distinct(grib_accessor* a,double** val,long* len); + +static int compare_doubles( const void* a, const void* b, int ascending ) { + /* ascending is a boolean: 0 or 1 */ + double* arg1 = (double*) a; + double* arg2 = (double*) b; + if (ascending) { + if( *arg1 < *arg2 ) return -1; /*Smaller values come before larger ones*/ + } else { + if( *arg1 > *arg2 ) return -1; /*Larger values come before smaller ones*/ + } + if( *arg1 == *arg2 ) return 0; + else return 1; +} +static int compare_doubles_ascending( const void* a, const void* b ) { + return compare_doubles(a,b,1); +} +static int compare_doubles_descending( const void* a, const void* b ) { + return compare_doubles(a,b,0); +} + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_latitudes* self = (grib_accessor_latitudes*)a; + int n = 0; + + self->values = grib_arguments_get_name(a->parent->h,c,n++); + self->distinct = grib_arguments_get_long(a->parent->h,c,n++); + self->save=0; + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_context* c=a->parent->h->context; + grib_accessor_latitudes* self = (grib_accessor_latitudes*)a; + int ret = 0; + double* v=val; + double dummy=0; + size_t size=0; + grib_iterator* iter=NULL; + + self->save=1; + size=value_count(a); + if (*lensave=0; + + /* self->lats are computed in _value_count*/ + if (self->lats) { + int i; + *len=self->size; + for (i=0;ilats[i]; + grib_context_free(c,self->lats); + self->lats=NULL; + self->size=0; + return GRIB_SUCCESS; + } + + iter=grib_iterator_new(a->parent->h,0,&ret); + if (ret!=GRIB_SUCCESS) { + if (iter) grib_iterator_delete(iter); + grib_context_log(c,GRIB_LOG_ERROR,"unable to create iterator"); + return ret; + } + + while(grib_iterator_next(iter,v++,&dummy,&dummy)) {} + grib_iterator_delete(iter); + + *len=size; + + return ret; +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_latitudes* self = (grib_accessor_latitudes*)a; + grib_handle* h=a->parent->h; + grib_context* c=a->parent->h->context; + double* val=NULL; + int ret; + long len; + size_t size; + if ((ret=grib_get_size(h,self->values,&size))!=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to get size of %s",self->values); + return 0; + } + len=(long)size; + + if (self->distinct) { + ret=get_distinct(a,&val,&len); + if (ret!=GRIB_SUCCESS) return 0; + if (self->save) { + self->lats=val; + self->size=len; + } else { + grib_context_free(c,val); + } + } + + return len; +} + +static int get_distinct(grib_accessor* a,double** val,long* len) { + long count=0; + double prev; + double *v=NULL; + double *v1=NULL; + double dummy; + int ret=0; + int i; + long jScansPositively=0; /*default: north to south*/ + size_t size=*len; + grib_context* c=a->parent->h->context; + grib_iterator* iter=grib_iterator_new(a->parent->h,0,&ret); + if (ret!=GRIB_SUCCESS) { + if (iter) grib_iterator_delete(iter); + grib_context_log(c,GRIB_LOG_ERROR,"unable to create iterator"); + return ret; + } + v=(double*)grib_context_malloc_clear(c,size*sizeof(double)); + if (!v) { + grib_context_log(c,GRIB_LOG_ERROR, + "unable to allocate %ld bytes",(long)size*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + *val=v; + + while(grib_iterator_next(iter,v++,&dummy,&dummy)) {} + grib_iterator_delete(iter); + v=*val; + + /* See which direction the latitudes are to be scanned */ + if((ret = grib_get_long_internal(a->parent->h, "jScansPositively", &jScansPositively))) return ret; + if (jScansPositively) { + qsort(v,*len,sizeof(double),&compare_doubles_ascending); /*South to North*/ + } else { + qsort(v,*len,sizeof(double),&compare_doubles_descending); /*North to South*/ + } + + v1=(double*)grib_context_malloc_clear(c,size*sizeof(double)); + if (!v1) { + grib_context_log(c,GRIB_LOG_ERROR, "unable to allocate %ld bytes",(long)size*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + + /*Construct a unique set of lats by filtering out duplicates*/ + prev=v[0]; + v1[0]=prev; + count=1; + for (i=1;i<*len;i++) { + if (v[i]!=prev) { + prev=v[i]; + v1[count]=prev; /*Value different from previous so store it*/ + count++; + } + } + + grib_context_free(c,v); + + *val=v1; + + *len=count; + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_latlon_increment.c b/src/grib_accessor_class_latlon_increment.c new file mode 100644 index 000000000..fa33e903f --- /dev/null +++ b/src/grib_accessor_class_latlon_increment.c @@ -0,0 +1,333 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/******************************** + * Enrico Fucile + ********************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double;pack_double;is_missing + IMPLEMENTS = init + MEMBERS=const char* directionIncrementGiven + MEMBERS=const char* directionIncrement + MEMBERS=const char* scansPositively + MEMBERS=const char* first + MEMBERS=const char* last + MEMBERS=const char* numberOfPoints + MEMBERS=const char* angleMultiplier + MEMBERS=const char* angleDivisor + MEMBERS=long isLongitude + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int is_missing(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_latlon_increment { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in latlon_increment */ + const char* directionIncrementGiven; + const char* directionIncrement; + const char* scansPositively; + const char* first; + const char* last; + const char* numberOfPoints; + const char* angleMultiplier; + const char* angleDivisor; + long isLongitude; +} grib_accessor_latlon_increment; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_latlon_increment = { + &grib_accessor_class_double, /* super */ + "latlon_increment", /* name */ + sizeof(grib_accessor_latlon_increment), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + &is_missing, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_latlon_increment = &_grib_accessor_class_latlon_increment; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a; + int n = 0; + + self->directionIncrementGiven = grib_arguments_get_name(a->parent->h,c,n++); + self->directionIncrement = grib_arguments_get_name(a->parent->h,c,n++); + self->scansPositively = grib_arguments_get_name(a->parent->h,c,n++); + self->first = grib_arguments_get_name(a->parent->h,c,n++); + self->last = grib_arguments_get_name(a->parent->h,c,n++); + self->numberOfPoints = grib_arguments_get_name(a->parent->h,c,n++); + self->angleMultiplier = grib_arguments_get_name(a->parent->h,c,n++); + self->angleDivisor = grib_arguments_get_name(a->parent->h,c,n++); + self->isLongitude=grib_arguments_get_long(a->parent->h, c,n++); +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a; + int ret = 0; + + long directionIncrementGiven=0; + long directionIncrement=0; + long angleDivisor=1; + long angleMultiplier=1; + double first = 0; + double last = 0; + long numberOfPoints = 0; + long scansPositively = 0; + + if(*len < 1) return GRIB_ARRAY_TOO_SMALL; + + if((ret = grib_get_long_internal(a->parent->h, + self->directionIncrementGiven,&directionIncrementGiven)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->scansPositively,&scansPositively)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, + self->directionIncrement,&directionIncrement)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_double_internal(a->parent->h, self->first,&first)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_double_internal(a->parent->h, self->last,&last)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->numberOfPoints,&numberOfPoints)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->angleMultiplier,&angleMultiplier)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->angleDivisor,&angleDivisor)) + != GRIB_SUCCESS) + return ret; + + if (self->isLongitude) { + if (last < first && scansPositively) last+=360; + if (last > first && !scansPositively) first-=360; + } + + if (!directionIncrementGiven && numberOfPoints != GRIB_MISSING_LONG) { + *val = fabs(last-first)/(double)(numberOfPoints-1); + } else if (numberOfPoints == GRIB_MISSING_LONG){ + *val = GRIB_MISSING_DOUBLE; + } else { + Assert(angleDivisor!=0); + *val = (double)directionIncrement/angleDivisor*angleMultiplier; + } + +#if 0 + printf("unpack -- %s=%ld %s=%ld %s=%f %s=%f %s=%ld %s=%f\n", + self->directionIncrementGiven,directionIncrementGiven, + self->directionIncrement,directionIncrement, + self->last,last, + self->first,first, + self->numberOfPoints,numberOfPoints, + a->name,*val); +#endif + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a; + int ret = 0; + long codedNumberOfPoints=0; + + long directionIncrementGiven=0; + long directionIncrement=0; + long angleDivisor=1; + long angleMultiplier=1; + double first = 0; + double last = 0; + long numberOfPoints = 0; + long numberOfPointsInternal = 0; + long scansPositively = 0; + double directionIncrementDouble=0; + + ret = grib_get_double_internal(a->parent->h, self->first,&first); + if(ret != GRIB_SUCCESS) return ret; + + ret = grib_get_double_internal(a->parent->h, self->last,&last); + if(ret != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->directionIncrementGiven,&directionIncrementGiven)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->numberOfPoints,&numberOfPoints)) != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->scansPositively,&scansPositively)) + != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->angleMultiplier,&angleMultiplier)) != GRIB_SUCCESS) return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->angleDivisor,&angleDivisor)) != GRIB_SUCCESS) return ret; + + if (self->isLongitude) { + if (last < first && scansPositively) last+=360; + if (last > first && !scansPositively) first-=360; + } + + if (*val == GRIB_MISSING_DOUBLE) { + directionIncrement=GRIB_MISSING_LONG; + directionIncrementGiven=1; + numberOfPoints=GRIB_MISSING_LONG; + } else { + numberOfPointsInternal = 1+rint(fabs((last-first) / *val)); + + directionIncrementDouble = rint (*val * (double)angleDivisor / (double)angleMultiplier); + + directionIncrement=(long)directionIncrementDouble; + if (directionIncrement == 0 ) { + directionIncrement=GRIB_MISSING_LONG; + directionIncrementGiven=0; + } + } + + + /*ret = grib_set_long_internal(a->parent->h, self->numberOfPoints,numberOfPoints); + if(ret ) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->numberOfPoints, ret);*/ + + + grib_get_long_internal(a->parent->h, self->numberOfPoints,&codedNumberOfPoints); + + ret = grib_set_long_internal(a->parent->h, self->directionIncrement,directionIncrement); + if(ret ) return ret; + + ret = grib_set_long_internal(a->parent->h, self->directionIncrementGiven,directionIncrementGiven); + if(ret )return ret; + +#if 0 + printf("pack -- %s=%ld %s=%ld \n ------- %s=%f %s=%f \n ------- %s=%ld codedNumberOfPoints=%ld %s=%f\n", + self->directionIncrementGiven,directionIncrementGiven, + self->directionIncrement,directionIncrement, + self->last,last, + self->first,first, + self->numberOfPoints,numberOfPoints, + codedNumberOfPoints, + a->name,*val); +#endif + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + +static int is_missing(grib_accessor* a){ + + size_t len=1; + double val=0; + + unpack_double(a, &val, &len); + + return (val == GRIB_MISSING_DOUBLE); +} + diff --git a/src/grib_accessor_class_latlonvalues.c b/src/grib_accessor_class_latlonvalues.c new file mode 100644 index 000000000..d40b6392a --- /dev/null +++ b/src/grib_accessor_class_latlonvalues.c @@ -0,0 +1,189 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double; + IMPLEMENTS = value_count + IMPLEMENTS = init + MEMBERS =const char* values + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_latlonvalues { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in latlonvalues */ + const char* values; +} grib_accessor_latlonvalues; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_latlonvalues = { + &grib_accessor_class_double, /* super */ + "latlonvalues", /* name */ + sizeof(grib_accessor_latlonvalues), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_latlonvalues = &_grib_accessor_class_latlonvalues; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_latlonvalues* self = (grib_accessor_latlonvalues*)a; + int n = 0; + + self->values = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_context* c=a->parent->h->context; + int ret = 0; + double* v=val; + double lat,lon,value; + size_t size=0; + grib_iterator* iter=grib_iterator_new(a->parent->h,0,&ret); + + size=value_count(a); + + if (*lenparent->h; + int ret; + size_t size; + if ((ret=grib_get_size(h,self->values,&size))!=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to get size of %s",self->values); + return ret; + } + + return (long)(3*size); + +} + + diff --git a/src/grib_accessor_class_library_version.c b/src/grib_accessor_class_library_version.c new file mode 100644 index 000000000..19a7db3f4 --- /dev/null +++ b/src/grib_accessor_class_library_version.c @@ -0,0 +1,157 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_ascii + IMPLEMENTS = unpack_string;value_count;string_length + IMPLEMENTS = init + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_string (grib_accessor*, char*, size_t *len); +static size_t string_length(grib_accessor*); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_library_version { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in ascii */ +/* Members defined in library_version */ +} grib_accessor_library_version; + +extern grib_accessor_class* grib_accessor_class_ascii; + +static grib_accessor_class _grib_accessor_class_library_version = { + &grib_accessor_class_ascii, /* super */ + "library_version", /* name */ + sizeof(grib_accessor_library_version), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_library_version = &_grib_accessor_class_library_version; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ +} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + char result[30]={0,}; + size_t size; + + int major=GRIB_API_MAJOR_VERSION; + int minor=GRIB_API_MINOR_VERSION; + int revision=GRIB_API_REVISION_VERSION; + + sprintf(result,"%d.%d.%d",major,minor,revision); + size=sizeof(result); + + if ( *len < size ) return GRIB_ARRAY_TOO_SMALL; + strcpy(val,result); + + *len=size; + + return GRIB_SUCCESS; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + +static size_t string_length(grib_accessor* a) +{ + return 255; +} diff --git a/src/grib_accessor_class_local_definition.c b/src/grib_accessor_class_local_definition.c new file mode 100644 index 000000000..f56ab0e9b --- /dev/null +++ b/src/grib_accessor_class_local_definition.c @@ -0,0 +1,306 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_unsigned + IMPLEMENTS = unpack_long;pack_long; value_count + IMPLEMENTS = init + MEMBERS=const char* productDefinitionTemplateNumber + MEMBERS=const char* productDefinitionTemplateNumberInternal + MEMBERS=const char* grib2LocalSectionNumber + MEMBERS=const char* type + MEMBERS=const char* stream + MEMBERS=const char* class + MEMBERS=const char* eps + MEMBERS=const char* stepType + MEMBERS=const char* derivedForecast + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_local_definition { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in local_definition */ + const char* productDefinitionTemplateNumber; + const char* productDefinitionTemplateNumberInternal; + const char* grib2LocalSectionNumber; + const char* type; + const char* stream; + const char* class; + const char* eps; + const char* stepType; + const char* derivedForecast; +} grib_accessor_local_definition; + +extern grib_accessor_class* grib_accessor_class_unsigned; + +static grib_accessor_class _grib_accessor_class_local_definition = { + &grib_accessor_class_unsigned, /* super */ + "local_definition", /* name */ + sizeof(grib_accessor_local_definition), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_local_definition = &_grib_accessor_class_local_definition; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_local_definition* self = (grib_accessor_local_definition*)a; + int n = 0; + + self->grib2LocalSectionNumber = grib_arguments_get_name(a->parent->h,c,n++); + self->productDefinitionTemplateNumber = grib_arguments_get_name(a->parent->h,c,n++); + self->productDefinitionTemplateNumberInternal = grib_arguments_get_name(a->parent->h,c,n++); + self->type = grib_arguments_get_name(a->parent->h,c,n++); + self->stream = grib_arguments_get_name(a->parent->h,c,n++); + self->class = grib_arguments_get_name(a->parent->h,c,n++); + self->eps = grib_arguments_get_name(a->parent->h,c,n++); + self->stepType = grib_arguments_get_name(a->parent->h,c,n++); + self->derivedForecast = grib_arguments_get_name(a->parent->h,c,n++); + +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_local_definition* self = (grib_accessor_local_definition*)a; + + return grib_get_long(a->parent->h, self->grib2LocalSectionNumber,val); +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_local_definition* self = (grib_accessor_local_definition*)a; + long productDefinitionTemplateNumber=-1; + long productDefinitionTemplateNumberInternal=-1; + long productDefinitionTemplateNumberNew=-1; + long grib2LocalSectionNumber=-1; + long type=-1; + long stream=-1; + long class=-1; + long eps=-1; + char stepType[15]={0,}; + size_t slen=15; + int localDefinitionNumber=*val; + int isInstant=0; + int tooEarly=0; + long derivedForecast=-1; + + if (grib_get_long(a->parent->h, self->productDefinitionTemplateNumber,&productDefinitionTemplateNumber)!=GRIB_SUCCESS) + tooEarly=1; + grib_get_long(a->parent->h, self->productDefinitionTemplateNumberInternal,&productDefinitionTemplateNumberInternal); + grib_get_long(a->parent->h, self->type,&type); + grib_get_long(a->parent->h, self->stream,&stream); + grib_get_long(a->parent->h, self->class,&class); + grib_get_long(a->parent->h, self->eps,&eps); + grib_get_string(a->parent->h, self->stepType,stepType,&slen); + if (!strcmp(stepType,"instant")) isInstant=1; + grib_get_long(a->parent->h, self->grib2LocalSectionNumber,&grib2LocalSectionNumber); + + if (productDefinitionTemplateNumber==1 || productDefinitionTemplateNumber==11) + eps=1; + + switch (localDefinitionNumber) { + case 0: + case 300: + productDefinitionTemplateNumberNew=productDefinitionTemplateNumber; + break; + + case 500: + productDefinitionTemplateNumberNew=0; + break; + + case 1: /* MARS labelling */ + case 36: /* MARS labelling for long window 4Dvar system */ + case 40: /* MARS labeling with domain and model (for LAM) */ + if (isInstant) { + /* type=em || type=es */ + if (type==17) { + productDefinitionTemplateNumberNew=2; + derivedForecast=0; + } else if (type==18) { + productDefinitionTemplateNumberNew=2; + derivedForecast=4; + /* eps or enda or elda or ewla */ + } else if (eps==1 || stream==1030 || stream==1249 || stream==1250) { + productDefinitionTemplateNumberNew=1; + } else { + productDefinitionTemplateNumberNew=0; + } + } else { + /* type=em || type=es */ + if (type==17) { + productDefinitionTemplateNumberNew=12; + derivedForecast=0; + } else if (type==18) { + productDefinitionTemplateNumberNew=12; + derivedForecast=4; + /* eps or enda or elda or ewla */ + } else if (eps==1 || stream==1030 || stream==1249 || stream==1250) { + productDefinitionTemplateNumberNew=11; + } else { + productDefinitionTemplateNumberNew=8; + } + } + break; + + case 15: /* Seasonal forecast data */ + case 16: + case 18: /* Multianalysis ensemble data */ + case 26: /* MARS labelling or ensemble forecast data */ + case 30: /* Forecasting Systems with Variable Resolution */ + if (isInstant) { + productDefinitionTemplateNumberNew=1; + } else { + productDefinitionTemplateNumberNew=11; + } + break; + + case 7: /* Sensitivity data */ + case 9: /* Singular vectors and ensemble perturbations */ + case 11: /* Supplementary data used by the analysis */ + case 20: /* 4D variational increments */ + case 21: /* Sensitive area predictions */ + case 23: /* Coupled atmospheric, wave and ocean means */ + case 24: /* Satellite Channel Number Data */ + case 25: + case 28: /* COSMO local area EPS */ + case 38: /* 4D variational increments for long window 4Dvar system */ + case 39: /* 4DVar model errors for long window 4Dvar system */ + if (isInstant) { + productDefinitionTemplateNumberNew=0; + } else { + productDefinitionTemplateNumberNew=8; + } + break; + + default: + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"Invalid localDefinitionNumber %d",localDefinitionNumber); + return GRIB_ENCODING_ERROR; + break; + } + + if (productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) { + if (tooEarly) + grib_set_long(a->parent->h, self->productDefinitionTemplateNumberInternal,productDefinitionTemplateNumberNew); + else + grib_set_long(a->parent->h, self->productDefinitionTemplateNumber,productDefinitionTemplateNumberNew); + } + if (derivedForecast>=0) + grib_set_long(a->parent->h, self->derivedForecast,derivedForecast); + + grib_set_long(a->parent->h, self->grib2LocalSectionNumber,*val); + + return 0; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + diff --git a/src/grib_accessor_class_long.c b/src/grib_accessor_class_long.c new file mode 100644 index 000000000..dbdaef3c4 --- /dev/null +++ b/src/grib_accessor_class_long.c @@ -0,0 +1,276 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = get_native_type;pack_missing; + IMPLEMENTS = unpack_string; pack_string + IMPLEMENTS = unpack_double + IMPLEMENTS = dump + IMPLEMENTS = compare + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_missing(grib_accessor*); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_long { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +} grib_accessor_long; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_long = { + &grib_accessor_class_gen, /* super */ + "long", /* name */ + sizeof(grib_accessor_long), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + &pack_missing, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_long = &_grib_accessor_class_long; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_LONG; +} + +static void dump(grib_accessor* a,grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + + + +static int unpack_string(grib_accessor*a , char* v, size_t *len){ + + long val = 0; + size_t l = 1; + char repres[1024]; + + grib_unpack_long (a , &val, &l); + + if ((val == GRIB_MISSING_LONG) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) ) + sprintf(repres,"MISSING"); + else + sprintf(repres,"%ld", val); + + l = strlen(repres)+1; + + if(l >*len ){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_long : unpack_string : Buffer too small for %s ", a->name ); + + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, "grib_accessor_long: Casting long %s to string ", a->name); + + *len = l; + + strcpy(v,repres); + return GRIB_SUCCESS; + +} +static int pack_missing(grib_accessor* a){ + + size_t one = 1; + long value = GRIB_MISSING_LONG; + + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + return grib_pack_long(a,&value,&one); + + return GRIB_VALUE_CANNOT_BE_MISSING; +} + + +/* +static int is_missing(grib_accessor* a){ + + size_t one = 1; + long value = GRIB_MISSING_LONG; + long ret=0; + + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + { + ret = grib_unpack_long(a,&value,&one); + Assert( ret == 0); + return value == GRIB_MISSING_LONG; + } + + return 0; +} +*/ + +static int unpack_double(grib_accessor* a, double* val,size_t *len){ + size_t rlen = (size_t)grib_value_count(a); + unsigned long i = 0; + long *values = NULL; + long oneval = 0; + int ret = GRIB_SUCCESS; + + if(*len < rlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " wrong size for %s it contains %d values ", a->name , rlen); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + if(rlen == 1){ + ret = grib_unpack_long(a,&oneval,&rlen); + if(ret != GRIB_SUCCESS) return ret; + *val = oneval; + *len = 1; + return GRIB_SUCCESS; + } + + values = grib_context_malloc(a->parent->h->context,rlen*sizeof(long)); + if(!values) return GRIB_INTERNAL_ERROR; + + + ret = grib_unpack_long(a,values,&rlen); + if(ret != GRIB_SUCCESS){ + grib_context_free(a->parent->h->context,values); + return ret; + } + for(i=0; i< rlen;i++) + val[i] = values[i]; + + grib_context_free(a->parent->h->context,values); + + *len = rlen; + return GRIB_SUCCESS; +} + +static int compare(grib_accessor* a,grib_accessor* b) { + int retval=0; + long *aval=0; + long *bval=0; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + aval=grib_context_malloc(a->parent->h->context,alen*sizeof(long)); + bval=grib_context_malloc(b->parent->h->context,blen*sizeof(long)); + + grib_unpack_long(a,aval,&alen); + grib_unpack_long(b,bval,&blen); + + retval = GRIB_SUCCESS; + while (alen != 0) { + if (*bval != *aval) retval = GRIB_LONG_VALUE_MISMATCH; + alen--; + } + + grib_context_free(a->parent->h->context,aval); + grib_context_free(b->parent->h->context,bval); + + return retval; +} + +static int pack_string(grib_accessor* a, const char* val, size_t *len) +{ + char* end=NULL; + long v=strtol(val,&end,10); + if (end) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"trying to pack \"%s\" as long",val); + return GRIB_WRONG_TYPE; + } + return grib_pack_long( a,&v,len); +} + diff --git a/src/grib_accessor_class_long_vector.c b/src/grib_accessor_class_long_vector.c new file mode 100644 index 000000000..554841b77 --- /dev/null +++ b/src/grib_accessor_class_long_vector.c @@ -0,0 +1,225 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_abstract_long_vector + IMPLEMENTS = init + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = unpack_double;get_native_type + MEMBERS = const char* vector + MEMBERS = int index + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_long_vector { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in abstract_long_vector */ + long* v; + long pack_index; + int number_of_elements; +/* Members defined in long_vector */ + const char* vector; + int index; +} grib_accessor_long_vector; + +extern grib_accessor_class* grib_accessor_class_abstract_long_vector; + +static grib_accessor_class _grib_accessor_class_long_vector = { + &grib_accessor_class_abstract_long_vector, /* super */ + "long_vector", /* name */ + sizeof(grib_accessor_long_vector), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_long_vector = &_grib_accessor_class_long_vector; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +typedef struct grib_accessor_abstract_long_vector { + grib_accessor att; + /* Members defined in gen */ + /* Members defined in abstract_long_vector */ + long* v; + long pack_index; + int number_of_elements; +} grib_accessor_abstract_long_vector; + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; + grib_accessor* va=NULL; + grib_accessor_abstract_long_vector* v =NULL; + int n = 0; + + self->vector = grib_arguments_get_name(a->parent->h,c,n++); + + va=(grib_accessor*)grib_find_accessor(a->parent->h,self->vector); + v=(grib_accessor_abstract_long_vector*)va; + + self->index = grib_arguments_get_long(a->parent->h,c,n++); + + /* check self->index on init and never change it */ + Assert(self->index < v->number_of_elements && self->index>=0); + + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) { + size_t size=0; + long* vector; + grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; + grib_accessor* va=NULL; + grib_accessor_abstract_long_vector* v =NULL; + + va=(grib_accessor*)grib_find_accessor(a->parent->h,self->vector); + v=(grib_accessor_abstract_long_vector*)va; + + /*TODO implement the dirty mechanism to avoid to unpack every time */ + grib_get_size(a->parent->h,self->vector,&size); + vector=(long*)grib_context_malloc(a->parent->h->context,sizeof(long)*size); + grib_unpack_long(va,vector,&size); + grib_context_free(a->parent->h->context,vector); + + + *val = v->v[self->index]; + + return GRIB_SUCCESS; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) { + long lval=0; + int err=0; + grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; + grib_accessor* va=NULL; + grib_accessor_abstract_long_vector* v =NULL; + va=(grib_accessor*)grib_find_accessor(a->parent->h,self->vector); + v=(grib_accessor_abstract_long_vector*)va; + + err=unpack_long(a,&lval,len); + + *val = (double)v->v[self->index]; + + return err; +} + +static int pack_long (grib_accessor* a, const long* val, size_t *len) { + int err=0; + grib_accessor_long_vector* self = (grib_accessor_long_vector*)a; + grib_accessor* va=NULL; + grib_accessor_abstract_long_vector* v =NULL; + + va=(grib_accessor*)grib_find_accessor(a->parent->h,self->vector); + v=(grib_accessor_abstract_long_vector*)va; + + v->pack_index=self->index; + + err=grib_pack_long(va,val,len); + + return err; +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_LONG; +} + + diff --git a/src/grib_accessor_class_longitudes.c b/src/grib_accessor_class_longitudes.c new file mode 100644 index 000000000..9c91e08a0 --- /dev/null +++ b/src/grib_accessor_class_longitudes.c @@ -0,0 +1,295 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double; + IMPLEMENTS = value_count + IMPLEMENTS = init + MEMBERS =const char* values + MEMBERS =long distinct + MEMBERS =double* lons + MEMBERS =long size + MEMBERS =int save + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_longitudes { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in longitudes */ + const char* values; + long distinct; + double* lons; + long size; + int save; +} grib_accessor_longitudes; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_longitudes = { + &grib_accessor_class_double, /* super */ + "longitudes", /* name */ + sizeof(grib_accessor_longitudes), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_longitudes = &_grib_accessor_class_longitudes; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + +static int get_distinct(grib_accessor* a,double** val,long* len); +static int compare_doubles( const void* a, const void* b ); + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_longitudes* self = (grib_accessor_longitudes*)a; + int n = 0; + + self->values = grib_arguments_get_name(a->parent->h,c,n++); + self->distinct = grib_arguments_get_long(a->parent->h,c,n++); + self->save=0; + self->lons=0; + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_context* c=a->parent->h->context; + grib_accessor_longitudes* self = (grib_accessor_longitudes*)a; + int ret = 0; + double* v=val; + double dummy=0; + size_t size=0; + grib_iterator* iter=NULL; + + self->save=1; + size=value_count(a); + if (*lensave=0; + + /* self->lons are computed in value_count*/ + if (self->lons) { + int i; + *len=self->size; + for (i=0;ilons[i]; + grib_context_free(c,self->lons); + self->lons=NULL; + self->size=0; + return GRIB_SUCCESS; + } + + iter=grib_iterator_new(a->parent->h,0,&ret); + if (ret!=GRIB_SUCCESS) { + if (iter) grib_iterator_delete(iter); + grib_context_log(c,GRIB_LOG_ERROR,"unable to create iterator"); + return ret; + } + + while(grib_iterator_next(iter,&dummy,v++,&dummy)) {} + grib_iterator_delete(iter); + + *len=size; + + return ret; +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_longitudes* self = (grib_accessor_longitudes*)a; + grib_handle* h=a->parent->h; + grib_context* c=a->parent->h->context; + double* val=NULL; + int ret; + long len; + size_t size; + if ((ret=grib_get_size(h,self->values,&size))!=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to get size of %s",self->values); + return 0; + } + len=(long)size; + + if (self->distinct) { + ret=get_distinct(a,&val,&len); + if (ret!=GRIB_SUCCESS) return 0; + if (self->save) { + self->lons=val; + self->size=len; + } else { + grib_context_free(c,val); + } + } + + return len; +} + +static int get_distinct(grib_accessor* a,double** val,long* len) { + long count=0; + double prev; + double *v=NULL; + double *v1=NULL; + double dummy; + int ret=0; + int i; + size_t size=*len; + grib_context* c=a->parent->h->context; + grib_iterator* iter=grib_iterator_new(a->parent->h,0,&ret); + if (ret!=GRIB_SUCCESS) { + if (iter) grib_iterator_delete(iter); + grib_context_log(c,GRIB_LOG_ERROR,"unable to create iterator"); + return ret; + } + v=(double*)grib_context_malloc_clear(c,size*sizeof(double)); + if (!v) { + grib_context_log(c,GRIB_LOG_ERROR, + "unable to allocate %ld bytes",(long)size*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + *val=v; + + while(grib_iterator_next(iter,&dummy,v++,&dummy)) {} + grib_iterator_delete(iter); + v=*val; + + qsort(v,*len,sizeof(double),&compare_doubles); + + v1=(double*)grib_context_malloc_clear(c,size*sizeof(double)); + if (!v1) { + grib_context_log(c,GRIB_LOG_ERROR, + "unable to allocate %ld bytes",(long)size*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + + prev=v[0]; + v1[0]=prev; + count=1; + for (i=1;i<*len;i++) { + if (v[i]!=prev) { + prev=v[i]; + v1[count]=prev; + count++; + } + } + + grib_context_free(c,v); + + *val=v1; + + *len=count; + return GRIB_SUCCESS; +} + +static int compare_doubles( const void* a, const void* b ) { + double* arg1 = (double*) a; + double* arg2 = (double*) b; + if( *arg1 < *arg2 ) return -1; + else if( *arg1 == *arg2 ) return 0; + else return 1; +} + + + diff --git a/src/grib_accessor_class_lookup.c b/src/grib_accessor_class_lookup.c new file mode 100644 index 000000000..5ffa3b288 --- /dev/null +++ b/src/grib_accessor_class_lookup.c @@ -0,0 +1,261 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long; unpack_string + IMPLEMENTS = init;post_init;dump + IMPLEMENTS = byte_offset;byte_count + IMPLEMENTS = pack_long + IMPLEMENTS = notify_change + MEMBERS = long llength + MEMBERS = long loffset + MEMBERS = grib_expression* real_name + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void post_init(grib_accessor*); +static void init_class(grib_accessor_class*); +static int notify_change(grib_accessor*,grib_accessor*); + +typedef struct grib_accessor_lookup { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in lookup */ + long llength; + long loffset; + grib_expression* real_name; +} grib_accessor_lookup; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_lookup = { + &grib_accessor_class_long, /* super */ + "lookup", /* name */ + sizeof(grib_accessor_lookup), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + &post_init, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + ¬ify_change, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_lookup = &_grib_accessor_class_lookup; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len, grib_arguments *arg ) +{ + grib_accessor_lookup* self = (grib_accessor_lookup*)a; + a->length = 0; + self->llength = len; + self->loffset = grib_arguments_get_long(a->parent->h,arg,0); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + self->real_name = grib_arguments_get_expression(a->parent->h,arg,1); +} + +static void post_init(grib_accessor* a) +{ + grib_accessor_lookup* self = (grib_accessor_lookup*)a; + if(self->real_name ) + grib_dependency_observe_expression(a,self->real_name ); + +} + +static void dump(grib_accessor* a,grib_dumper* dumper) +{ + grib_accessor_lookup* self = (grib_accessor_lookup*)a; + unsigned char bytes[1024] = {0,}; + char msg[1024]= {0,}; + char buf[1024]; + int i; + unsigned long v = 0; + + size_t llen = self->llength; + grib_unpack_bytes(a, bytes, &llen); /* TODO: Unpack byte unpack the wrong offset */ + + bytes[llen] = 0; + for(i = 0; i < llen; i++) + { + msg[i] = isprint(bytes[i]) ? bytes[i] : '?'; + v <<= 8; + v |= bytes[i]; + } + + msg[llen] = 0; + + sprintf(buf,"%s %ld %ld-%ld",msg,v,(long)a->offset+self->loffset,(long)self->llength); + + grib_dump_long(dumper,a,buf); + +} + +static int unpack_string(grib_accessor*a , char* v, size_t *len){ + + grib_accessor_lookup* self = (grib_accessor_lookup*)a; + unsigned char bytes[1024] = {0,}; + int i; + + size_t llen = self->llength; + grib_unpack_bytes(a, bytes, &llen); /* TODO: Unpack byte unpack the wrong offset */ + + bytes[llen] = 0; + for(i = 0; i < llen; i++) + { + v[i] = isprint(bytes[i]) ? bytes[i] : '?'; + } + + v[llen] = 0; + + + return GRIB_SUCCESS; + +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_lookup* al = (grib_accessor_lookup*)a; + grib_handle *h = a->parent->h; + + + long pos = (a->offset+al->loffset)*8; + + + if(len[0] < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + len[0] = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + /* This is used when reparsing or rebuilding */ + if(h->loader) { + Assert(*len == 1); + return h->loader->lookup_long(h->context,h->loader,a->name,val); + } + + val[0] = grib_decode_unsigned_long(h->buffer->data , &pos, al->llength*8); + len[0] = 1; + +/* printf("lookup: %s %ld %ld\n",a->name,pos/8,val[0]); */ + + return GRIB_SUCCESS; + +} + +static int pack_long (grib_accessor* a, const long* val, size_t *len) +{ + return GRIB_NOT_IMPLEMENTED; +} + + +static long byte_count(grib_accessor* a) +{ + grib_accessor_lookup* al = (grib_accessor_lookup*)a; + return al->llength; +} + +static long byte_offset(grib_accessor* a) +{ + grib_accessor_lookup* al = (grib_accessor_lookup*)a; + return al->loffset; +} + +static int notify_change(grib_accessor* self,grib_accessor* changed) +{ + /* Forward changes */ + return grib_dependency_notify_change(self); +} + + + + diff --git a/src/grib_accessor_class_mars_param.c b/src/grib_accessor_class_mars_param.c new file mode 100644 index 000000000..605fa54b0 --- /dev/null +++ b/src/grib_accessor_class_mars_param.c @@ -0,0 +1,197 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_ascii + IMPLEMENTS = pack_string;unpack_string + IMPLEMENTS = init + MEMBERS= const char* paramId + MEMBERS= const char* table + MEMBERS= const char* param + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_mars_param { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in ascii */ +/* Members defined in mars_param */ + const char* paramId; + const char* table; + const char* param; +} grib_accessor_mars_param; + +extern grib_accessor_class* grib_accessor_class_ascii; + +static grib_accessor_class _grib_accessor_class_mars_param = { + &grib_accessor_class_ascii, /* super */ + "mars_param", /* name */ + sizeof(grib_accessor_mars_param), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_mars_param = &_grib_accessor_class_mars_param; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_mars_param* self = (grib_accessor_mars_param*)a; + self->paramId= grib_arguments_get_name(a->parent->h,c,n++); + self->table= grib_arguments_get_name(a->parent->h,c,n++); + self->param= grib_arguments_get_name(a->parent->h,c,n++); +} + +static int pack_string(grib_accessor* a, const char* val, size_t *len){ +#if 1 + return GRIB_NOT_IMPLEMENTED; +#else + grib_accessor_mars_param* self = (grib_accessor_mars_param*)a; + long paramId=0; + long param=0; + long table=0; + char* p=(char*)val; + char* q=NULL; + + param=strtol(val, &p,10); + if ( *p!=0 ) table=strtol(++p, &q,10); + else table=128; + + paramId=table*1000+param; + + return grib_set_long_internal(a->parent->h,self->paramId,paramId); +#endif +} + + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + grib_accessor_mars_param* self = (grib_accessor_mars_param*)a; + long param=0; + long table=0; + int ret=0; + +#if 1 + if(self->table!=NULL && (ret = grib_get_long_internal(a->parent->h,self->table,&table)) != GRIB_SUCCESS) return ret; + if(self->param!=NULL && (ret = grib_get_long_internal(a->parent->h,self->param,¶m)) != GRIB_SUCCESS) return ret; +#else + { + long paramId=0; + grib_get_long(a->parent->h,self->paramId,¶mId); + + if (paramId==0 || (paramId < 4000 && paramId > 1000 )) { + if(self->table!=NULL && (ret = grib_get_long_internal(a->parent->h,self->table,&table)) + != GRIB_SUCCESS) return ret; + if(self->param!=NULL && (ret = grib_get_long_internal(a->parent->h,self->param,¶m)) + != GRIB_SUCCESS) return ret; + } else if (paramId<1000) { + table=128; + param=paramId; + } else { + table=paramId/1000; + param=paramId-table*1000; + } + } +#endif + + /*if (table==200) table=128;*/ + sprintf(val,"%ld.%ld",param,table); + + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_mars_step.c b/src/grib_accessor_class_mars_step.c new file mode 100644 index 000000000..6021feab2 --- /dev/null +++ b/src/grib_accessor_class_mars_step.c @@ -0,0 +1,216 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_ascii + IMPLEMENTS = pack_string;unpack_string;value_count + IMPLEMENTS = pack_long; unpack_long + IMPLEMENTS = get_native_type + IMPLEMENTS = init + MEMBERS = const char* stepRange + MEMBERS = const char* stepType + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_mars_step { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in ascii */ +/* Members defined in mars_step */ + const char* stepRange; + const char* stepType; +} grib_accessor_mars_step; + +extern grib_accessor_class* grib_accessor_class_ascii; + +static grib_accessor_class _grib_accessor_class_mars_step = { + &grib_accessor_class_ascii, /* super */ + "mars_step", /* name */ + sizeof(grib_accessor_mars_step), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_mars_step = &_grib_accessor_class_mars_step; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_mars_step* self = (grib_accessor_mars_step*)a; + self->stepRange = grib_arguments_get_name(a->parent->h,c,n++); + self->stepType = grib_arguments_get_name(a->parent->h,c,n++); +} + +static int pack_string(grib_accessor* a, const char* val, size_t *len){ + char stepType[100]; + size_t stepTypeLen=100; + char buf[100]={0,}; + int ret; + grib_accessor_mars_step* self = (grib_accessor_mars_step*)a; + grib_accessor* stepRangeAcc=grib_find_accessor(a->parent->h,self->stepRange); + + if (!stepRangeAcc) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"%s not found",self->stepRange); + return GRIB_NOT_FOUND; + } + + if ((ret=grib_get_string(a->parent->h,self->stepType,stepType,&stepTypeLen))!=GRIB_SUCCESS) + return ret; + + if (!strcmp(stepType,"instant")) sprintf(buf,"%s",val) ; + else sprintf(buf,"0-%s",val); + + return grib_pack_string(stepRangeAcc,buf,len); +} + + +static int unpack_string(grib_accessor* a, char* val, size_t *len) { + int ret=0; + grib_accessor_mars_step* self = (grib_accessor_mars_step*)a; + char buf[100]={0,}; + char* p=NULL; + size_t buflen=100; + long step; + grib_accessor* stepRangeAcc=grib_find_accessor(a->parent->h,self->stepRange); + + if (!stepRangeAcc) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"%s not found",self->stepRange); + return GRIB_NOT_FOUND; + } + + if ((ret=grib_unpack_string(stepRangeAcc,buf,&buflen))!=GRIB_SUCCESS) + return ret; + + strcpy(val,buf); + step=strtol(buf, &p,10); + + if ( p!=NULL && *p=='-' && step==0 ) strcpy(val,++p); + + *len=strlen(val); + + return ret; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + char buff[100]={0,}; + size_t bufflen=100; + + sprintf(buff,"%ld",*val); + + return pack_string(a,buff,&bufflen); + +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) { + grib_accessor_mars_step* self = (grib_accessor_mars_step*)a; + grib_accessor* stepRangeAcc=grib_find_accessor(a->parent->h,self->stepRange); + + if (!stepRangeAcc) return GRIB_NOT_FOUND; + + return grib_unpack_long(stepRangeAcc,val,len); +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_LONG; +} diff --git a/src/grib_accessor_class_md5.c b/src/grib_accessor_class_md5.c new file mode 100644 index 000000000..87997b98d --- /dev/null +++ b/src/grib_accessor_class_md5.c @@ -0,0 +1,206 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include "md5.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = get_native_type;init + IMPLEMENTS = compare;unpack_string;value_count + MEMBERS = const char* offset + MEMBERS = const char* length + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_md5 { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in md5 */ + const char* offset; + const char* length; +} grib_accessor_md5; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_md5 = { + &grib_accessor_class_gen, /* super */ + "md5", /* name */ + sizeof(grib_accessor_md5), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_md5 = &_grib_accessor_class_md5; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + grib_accessor_md5* self = (grib_accessor_md5*)a; + int n=0; + + self->offset = grib_arguments_get_name(a->parent->h,arg,n++); + self->length = grib_arguments_get_name(a->parent->h,arg,n++); + a->length = 0; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_BYTES; +} + + +static int compare(grib_accessor* a, grib_accessor* b) { + int retval=GRIB_SUCCESS; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + return retval; +} + +static int unpack_string(grib_accessor*a , char* v, size_t *len){ + grib_accessor_md5* self = (grib_accessor_md5*)a; + unsigned mess_len; + unsigned char* mess; + unsigned char* p; + long offset,length; + grib_string_list* blacklist=NULL; + grib_accessor* b=NULL; + int ret=0; + int i=0; + struct grib_md5_state md5c; + + if (*len <32 ) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"md5: array too small"); + return GRIB_ARRAY_TOO_SMALL; + } + + if((ret = grib_get_long_internal(a->parent->h,self->offset,&offset)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h,self->length,&length)) + != GRIB_SUCCESS) + return ret; + + + mess=grib_context_malloc(a->parent->h->context,length); + memcpy(mess,a->parent->h->buffer->data+offset,length); + mess_len=length; + + blacklist=a->parent->h->context->blacklist; + while (blacklist && blacklist->value) { + + b=grib_find_accessor(a->parent->h,blacklist->value); + if (!b) return GRIB_NOT_FOUND; + + p=mess+b->offset-offset; + for (i=0;ilength;i++) *(p++)=0; + + blacklist=blacklist->next; + } + + grib_md5_init(&md5c); + grib_md5_add(&md5c,mess,mess_len); + grib_md5_end(&md5c,v); + + return ret; +} + +static long value_count(grib_accessor* a) { return 16;} diff --git a/src/grib_accessor_class_message.c b/src/grib_accessor_class_message.c new file mode 100644 index 000000000..7dc2ab291 --- /dev/null +++ b/src/grib_accessor_class_message.c @@ -0,0 +1,186 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_bytes + IMPLEMENTS = init;update_size;resize; value_count + IMPLEMENTS = unpack_string; string_length + IMPLEMENTS = compare + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_string (grib_accessor*, char*, size_t *len); +static size_t string_length(grib_accessor*); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); +static void resize(grib_accessor*,size_t); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_message { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +/* Members defined in message */ +} grib_accessor_message; + +extern grib_accessor_class* grib_accessor_class_bytes; + +static grib_accessor_class _grib_accessor_class_message = { + &grib_accessor_class_bytes, /* super */ + "message", /* name */ + sizeof(grib_accessor_message), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + &resize, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_message = &_grib_accessor_class_message; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void init(grib_accessor* a, const long len, grib_arguments*arg ) +{ + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->length=a->parent->h->buffer->ulength-len-a->offset; +} + +static int compare(grib_accessor* a, grib_accessor* b) { + if (a->length != b->length) return GRIB_COUNT_MISMATCH; + return GRIB_SUCCESS; +} + + +static void update_size(grib_accessor* a,size_t new_size) +{ + /* printf("update_size: grib_accessor_class_message.c %ld %ld %s %s\n", (long)new_size,(long)a->length,a->cclass->name,a->name); */ + a->length = new_size; +} + +static void resize(grib_accessor* a,size_t new_size) +{ + void* zero = grib_context_malloc_clear(a->parent->h->context,new_size); + + grib_buffer_replace(a,zero,new_size,1,0); + grib_context_free(a->parent->h->context,zero); + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG,"resize: grib_accessor_class_message.c %ld %ld %s %s\n",(long)new_size,(long)a->length,a->cclass->name,a->name); + Assert(new_size == a->length); + +} + +static long value_count(grib_accessor* a){ return 1;} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + + int i = 0; + + if(len[0] < (a->length+1)) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "unpack_string: Wrong size (%d) for %s it contains %d values ", len[0], a->name , a->length+1 ); + len[0] = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + for ( i = 0; i < a->length; i++) + val[i] = a->parent->h->buffer->data[a->offset+i]; + val[i] = 0; + len[0] = i; + return GRIB_SUCCESS; +} + +static size_t string_length(grib_accessor* a){ + return a->length; +} + + diff --git a/src/grib_accessor_class_missing.c b/src/grib_accessor_class_missing.c new file mode 100644 index 000000000..b328c5ecd --- /dev/null +++ b/src/grib_accessor_class_missing.c @@ -0,0 +1,213 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = unpack_string;pack_string + IMPLEMENTS = unpack_bytes;pack_bytes + IMPLEMENTS = init;dump;destroy + IMPLEMENTS = get_native_type;sub_section + IMPLEMENTS = next_offset;value_count;byte_offset;byte_count + IMPLEMENTS = notify_change;pack_expression + IMPLEMENTS = update_size + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static grib_section* sub_section(grib_accessor* a); +static int get_native_type(grib_accessor*); +static int pack_bytes(grib_accessor*,const unsigned char*, size_t *len); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int pack_expression(grib_accessor*, grib_expression*); +static int unpack_bytes (grib_accessor*,unsigned char*, size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static long next_offset(grib_accessor*); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int notify_change(grib_accessor*,grib_accessor*); +static void update_size(grib_accessor*,size_t); + +typedef struct grib_accessor_missing { + grib_accessor att; +/* Members defined in missing */ +} grib_accessor_missing; + + +static grib_accessor_class _grib_accessor_class_missing = { + 0, /* super */ + "missing", /* name */ + sizeof(grib_accessor_missing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + &dump, /* describes himself */ + &next_offset, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + &get_native_type, /* get native type */ + &sub_section, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + &pack_bytes, /* grib_pack procedures bytes */ + &unpack_bytes, /* grib_unpack procedures bytes */ + &pack_expression, /* pack_expression */ + ¬ify_change, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_missing = &_grib_accessor_class_missing; + + +static void init_class(grib_accessor_class* c) +{ +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long len, grib_arguments* param) +{ + /* a->flags = GRIB_FLAG_READONLY; */ + a->length = 0; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + /* grib_dump_bytes(dumper,a,NULL); */ +} + +static long next_offset(grib_accessor* a) +{ + return a->offset; +} + +static long value_count(grib_accessor* a) +{ + return 0; +} + +static long byte_count(grib_accessor* a) +{ + return 0; +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_UNDEFINED; +} + +static long byte_offset(grib_accessor* a) +{ + return a->offset; +} + +static int unpack_bytes(grib_accessor* a, unsigned char* val, size_t *len) +{ + return GRIB_NOT_FOUND; +} + +static int unpack_long (grib_accessor* a, long* v, size_t *len){ + return GRIB_NOT_FOUND; +} + +static int unpack_double (grib_accessor* a, double*v, size_t *len){ + + return GRIB_NOT_FOUND; +} + +static int unpack_string(grib_accessor*a , char* v, size_t *len){ + return GRIB_NOT_FOUND; + } + +static int pack_expression(grib_accessor* a, grib_expression *e){ + return GRIB_NOT_FOUND; +} + +static int pack_long(grib_accessor* a, const long* v, size_t *len){ + return GRIB_NOT_FOUND; +} + +static int pack_double(grib_accessor* a, const double*v, size_t *len){ + return GRIB_NOT_FOUND; +} + +static int pack_string(grib_accessor*a , const char* v, size_t *len){ + return GRIB_NOT_FOUND; +} + +static int pack_bytes(grib_accessor* a, const unsigned char* val, size_t *len) +{ + return GRIB_NOT_FOUND; +} + +static void destroy(grib_context* ct, grib_accessor* a) +{ +} + +static grib_section* sub_section(grib_accessor* a) +{ + return NULL; +} + +static int notify_change(grib_accessor* self,grib_accessor* observed) +{ + return GRIB_NOT_FOUND; +} + +static void update_size(grib_accessor* a,size_t s) +{ +} diff --git a/src/grib_accessor_class_nearest.c b/src/grib_accessor_class_nearest.c new file mode 100644 index 000000000..868a22140 --- /dev/null +++ b/src/grib_accessor_class_nearest.c @@ -0,0 +1,161 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * + * + */ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init;dump + MEMBERS=grib_arguments* args + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_nearest { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in nearest */ + grib_arguments* args; +} grib_accessor_nearest; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_nearest = { + &grib_accessor_class_gen, /* super */ + "nearest", /* name */ + sizeof(grib_accessor_nearest), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_nearest = &_grib_accessor_class_nearest; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* args) +{ + grib_accessor_nearest* self = (grib_accessor_nearest*)a; + self->args = args; +} + +static void dump(grib_accessor* a,grib_dumper* dumper) +{ + /* TODO: pass args */ + grib_dump_label(dumper,a,NULL); +} + +grib_nearest* grib_nearest_new(grib_handle* h,int* error) +{ + grib_accessor* a = NULL; + grib_accessor_nearest* na =NULL; + grib_nearest* n =NULL; + *error=GRIB_NOT_IMPLEMENTED; + a = grib_find_accessor(h,"NEAREST"); + na = (grib_accessor_nearest*)a; + + if (!a) return NULL; + + n = grib_nearest_factory(h,na->args); + + if (n) *error=GRIB_SUCCESS; + + return n; +} + diff --git a/src/grib_accessor_class_number_of_coded_values.c b/src/grib_accessor_class_number_of_coded_values.c new file mode 100644 index 000000000..f159bf791 --- /dev/null +++ b/src/grib_accessor_class_number_of_coded_values.c @@ -0,0 +1,187 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/***************************** + * Enrico Fucile + ****************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init + MEMBERS = const char* numberOfValues + MEMBERS = const char* bitsPerValue + MEMBERS = const char* offsetBeforeData + MEMBERS = const char* offsetAfterData + MEMBERS = const char* unusedBits + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_number_of_coded_values { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in number_of_coded_values */ + const char* numberOfValues; + const char* bitsPerValue; + const char* offsetBeforeData; + const char* offsetAfterData; + const char* unusedBits; +} grib_accessor_number_of_coded_values; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_number_of_coded_values = { + &grib_accessor_class_long, /* super */ + "number_of_coded_values", /* name */ + sizeof(grib_accessor_number_of_coded_values), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_number_of_coded_values = &_grib_accessor_class_number_of_coded_values; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_number_of_coded_values* self = (grib_accessor_number_of_coded_values*)a; + self->bitsPerValue = grib_arguments_get_name(a->parent->h,c,n++); + self->offsetBeforeData = grib_arguments_get_name(a->parent->h,c,n++); + self->offsetAfterData = grib_arguments_get_name(a->parent->h,c,n++); + self->unusedBits = grib_arguments_get_name(a->parent->h,c,n++); + self->numberOfValues = grib_arguments_get_name(a->parent->h,c,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=GRIB_SUCCESS; + long bpv=0; + long offsetBeforeData=0,offsetAfterData=0,unusedBits=0,numberOfValues; + + grib_accessor_number_of_coded_values* self = (grib_accessor_number_of_coded_values*)a; + + if((ret = grib_get_long_internal(a->parent->h, self->bitsPerValue,&bpv)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->offsetBeforeData,&offsetBeforeData)) != GRIB_SUCCESS) + return ret; + + + if((ret = grib_get_long_internal(a->parent->h, self->offsetAfterData,&offsetAfterData)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->unusedBits,&unusedBits)) != GRIB_SUCCESS) + return ret; + + if ( bpv != 0 ) { + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG,"grib_accessor_number_of_coded_values: offsetAfterData=%ld offsetBeforeData=%ld unusedBits=%ld bpv=%ld\n", + offsetAfterData,offsetBeforeData,unusedBits,bpv); + *val=((offsetAfterData-offsetBeforeData)*8-unusedBits)/bpv; + } else { + if((ret = grib_get_long_internal(a->parent->h, self->numberOfValues,&numberOfValues)) != GRIB_SUCCESS) + return ret; + + *val=numberOfValues; + } + + + return ret; +} + diff --git a/src/grib_accessor_class_number_of_points.c b/src/grib_accessor_class_number_of_points.c new file mode 100644 index 000000000..42a2b5b5b --- /dev/null +++ b/src/grib_accessor_class_number_of_points.c @@ -0,0 +1,185 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/**************************************** + * Enrico Fucile + *************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init + MEMBERS = const char* ni + MEMBERS = const char* nj + MEMBERS = const char* plpresent + MEMBERS = const char* pl + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_number_of_points { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in number_of_points */ + const char* ni; + const char* nj; + const char* plpresent; + const char* pl; +} grib_accessor_number_of_points; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_number_of_points = { + &grib_accessor_class_long, /* super */ + "number_of_points", /* name */ + sizeof(grib_accessor_number_of_points), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_number_of_points = &_grib_accessor_class_number_of_points; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_number_of_points* self = (grib_accessor_number_of_points*)a; + self->ni = grib_arguments_get_name(a->parent->h,c,n++); + self->nj = grib_arguments_get_name(a->parent->h,c,n++); + self->plpresent = grib_arguments_get_name(a->parent->h,c,n++); + self->pl = grib_arguments_get_name(a->parent->h,c,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=GRIB_SUCCESS; + long ni=0,nj=0,plpresent=0; + size_t plsize=0; + long* pl; + int i; + grib_accessor_number_of_points* self = (grib_accessor_number_of_points*)a; + grib_context* c=a->parent->h->context; + + if((ret = grib_get_long_internal(a->parent->h, self->ni,&ni)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->nj,&nj)) != GRIB_SUCCESS) + return ret; + + if(self->plpresent && + ((ret = grib_get_long_internal(a->parent->h, self->plpresent,&plpresent)) != GRIB_SUCCESS) ) + return ret; + + if (nj == 0) return GRIB_GEOCALCULUS_PROBLEM; + + if (plpresent) { + /*reduced*/ + plsize=nj; + pl=(long*)grib_context_malloc(c,sizeof(long)*plsize); + grib_get_long_array_internal(a->parent->h,self->pl,pl, &plsize); + *val=0; + for (i=0;idump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +#define EFDEBUG 0 + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_number_of_points_gaussian* self = (grib_accessor_number_of_points_gaussian*)a; + self->ni = grib_arguments_get_name(a->parent->h,c,n++); + self->nj = grib_arguments_get_name(a->parent->h,c,n++); + self->plpresent = grib_arguments_get_name(a->parent->h,c,n++); + self->pl = grib_arguments_get_name(a->parent->h,c,n++); + self->order = grib_arguments_get_name(a->parent->h,c,n++); + self->lat_first = grib_arguments_get_name(a->parent->h,c,n++); + self->lon_first = grib_arguments_get_name(a->parent->h,c,n++); + self->lat_last = grib_arguments_get_name(a->parent->h,c,n++); + self->lon_last = grib_arguments_get_name(a->parent->h,c,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len){ + int ret=GRIB_SUCCESS; + long ni=0,nj=0,plpresent=0,order=0; + size_t plsize=0; + double* lats={0,}; + double lat_first,lat_last,lon_first,lon_last; + float d; + long* pl=NULL; + long* plsave=NULL; + int j=0,i=0; + long row_count; + long ilon_first=0,ilon_last=0; + double lon_first_row=0,lon_last_row=0; + + + grib_accessor_number_of_points_gaussian* self = (grib_accessor_number_of_points_gaussian*)a; + grib_context* c=a->parent->h->context; + + if((ret = grib_get_long_internal(a->parent->h, self->ni,&ni)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->nj,&nj)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->plpresent,&plpresent)) != GRIB_SUCCESS) + return ret; + + if (nj == 0) return GRIB_GEOCALCULUS_PROBLEM; + + if (plpresent) { + /*reduced*/ + if((ret = grib_get_long_internal(a->parent->h, self->order,&order)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(a->parent->h, self->lat_first,&lat_first)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(a->parent->h, self->lon_first,&lon_first)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(a->parent->h, self->lat_last,&lat_last)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(a->parent->h, self->lon_last,&lon_last)) != GRIB_SUCCESS) + return ret; + + lats=(double*)grib_context_malloc(a->parent->h->context,sizeof(double)*order*2); + if((ret = grib_get_gaussian_latitudes(order, lats)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_size(a->parent->h,self->pl,&plsize)) != GRIB_SUCCESS) + return ret; + + pl=(long*)grib_context_malloc_clear(c,sizeof(long)*plsize); + plsave=pl; + grib_get_long_array_internal(a->parent->h,self->pl,pl, &plsize); + + if (lon_last<0) lon_last+=360; + if (lon_first<0) lon_first+=360; + + d=fabs(lats[0]-lats[1]); + if ( (fabs(lat_first-lats[0]) >= d ) || + (fabs(lat_last+lats[0]) >= d ) || + lon_first != 0 || + fabs(lon_last - (360.0-90.0/order)) > 90.0/order + ) { + /*sub area*/ +#if EFDEBUG + printf("-------- subarea fabs(lat_first-lats[0])=%g d=%g\n",fabs(lat_first-lats[0]),d); + printf("-------- subarea fabs(lat_last+lats[0])=%g d=%g\n",fabs(lat_last+lats[0]),d); + printf("-------- subarea lon_last=%g order=%ld 360.0-90.0/order=%g\n", + lon_last,order,360.0-90.0/order); + printf("-------- subarea lon_first=%g fabs(lon_last -( 360.0-90.0/order))=%g 90.0/order=%g\n", + lon_first,fabs(lon_last - (360.0-90.0/order)),90.0/order); +#endif + *val=0; + for (j=0;jdump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_number_of_values* self = (grib_accessor_number_of_values*)a; + self->values = grib_arguments_get_name(a->parent->h,c,n++); + self->bitsPerValue = grib_arguments_get_name(a->parent->h,c,n++); + self->numberOfPoints = grib_arguments_get_name(a->parent->h,c,n++); + self->bitmapPresent = grib_arguments_get_name(a->parent->h,c,n++); + self->bitmap = grib_arguments_get_name(a->parent->h,c,n++); + self->numberOfCodedValues = grib_arguments_get_name(a->parent->h,c,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_number_of_values* self = (grib_accessor_number_of_values*)a; + int ret=GRIB_SUCCESS,i; + long npoints=0,bitmap_present=0; + size_t size=0; + +#if GRIB_WARNING + long numberOfCodedValues=0; + long bpv=0; + if((ret = grib_get_long_internal(a->parent->h, self->bitsPerValue,&bpv)) != GRIB_SUCCESS) + return ret; +#endif + + if((ret = grib_get_long_internal(a->parent->h, self->numberOfPoints,&npoints)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->bitmapPresent,&bitmap_present)) != GRIB_SUCCESS) + return ret; + + if (bitmap_present) { + double* bitmap; + size=npoints; + bitmap=(double*)grib_context_malloc(a->parent->h->context,sizeof(double)*size); + if((ret = grib_get_double_array_internal(a->parent->h,self->bitmap,bitmap,&size)) + != GRIB_SUCCESS) return ret; + *val=0; + for (i=0;iparent->h->context,bitmap); + } else { + *val=npoints; + } + +#if GRIB_WARNING + if ( bpv != 0 ) { + if((ret = grib_get_long_internal(a->parent->h, self->numberOfCodedValues,&numberOfCodedValues)) != GRIB_SUCCESS) + return ret; + if (*val != numberOfCodedValues) { + grib_context_log(a->parent->h->context,GRIB_LOG_WARNING, + "number of values from data section (%ld) doesn't match geography (%ld)",numberOfCodedValues,*val); + /* *val=numberOfCodedValues; */ + } + + } +#endif + + + return ret; +} + diff --git a/src/grib_accessor_class_number_of_values_data_raw_packing.c b/src/grib_accessor_class_number_of_values_data_raw_packing.c new file mode 100644 index 000000000..363db6d72 --- /dev/null +++ b/src/grib_accessor_class_number_of_values_data_raw_packing.c @@ -0,0 +1,188 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +/***************************** + * Enrico Fucile + ****************************/ + +#include "grib_api_internal.h" +#define PRECISION_32_IEEE 1 +#define PRECISION_64_IEEE 2 +#define PRECISION_128_IEEE 3 + +#define COMPRESSION_NONE 0 +#define COMPRESSION_LZW 1 + +#define PRE_PROCESSING_NONE 0 +#define PRE_PROCESSING_DIFFERENCE 1 +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init + IMPLEMENTS = unpack_long + MEMBERS=const char* values + MEMBERS=const char* precision + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_number_of_values_data_raw_packing { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in number_of_values_data_raw_packing */ + const char* values; + const char* precision; +} grib_accessor_number_of_values_data_raw_packing; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_number_of_values_data_raw_packing = { + &grib_accessor_class_gen, /* super */ + "number_of_values_data_raw_packing", /* name */ + sizeof(grib_accessor_number_of_values_data_raw_packing), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_number_of_values_data_raw_packing = &_grib_accessor_class_number_of_values_data_raw_packing; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long v, grib_arguments* args) +{ + int n=0; + grib_accessor_number_of_values_data_raw_packing *self =(grib_accessor_number_of_values_data_raw_packing*)a; + + self->values = grib_arguments_get_name(a->parent->h,args,n++); + self->precision = grib_arguments_get_name(a->parent->h,args,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int err=0; + grib_accessor_number_of_values_data_raw_packing *self =(grib_accessor_number_of_values_data_raw_packing*)a; + grib_accessor* adata=NULL; + long precision = 0; + int bytes=0; + long byte_count =0; + + adata=grib_find_accessor(a->parent->h,self->values); + Assert(adata!=NULL); + byte_count=grib_byte_count(adata); + + if((err = grib_get_long_internal(a->parent->h,self->precision,&precision)) + != GRIB_SUCCESS) + return err; + + switch(precision) + { + case 1: + bytes = 4; + break; + + case 2: + bytes = 8; + break; + + default: + return GRIB_NOT_IMPLEMENTED; + break; + } + + *val = byte_count / bytes; + + return err; +} + + diff --git a/src/grib_accessor_class_octect_number.c b/src/grib_accessor_class_octect_number.c new file mode 100644 index 000000000..e15c13afb --- /dev/null +++ b/src/grib_accessor_class_octect_number.c @@ -0,0 +1,169 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init + MEMBERS=const char* left + MEMBERS=long right + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_octect_number { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in octect_number */ + const char* left; + long right; +} grib_accessor_octect_number; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_octect_number = { + &grib_accessor_class_long, /* super */ + "octect_number", /* name */ + sizeof(grib_accessor_octect_number), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_octect_number = &_grib_accessor_class_octect_number; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_octect_number* self = (grib_accessor_octect_number*)a; + int n = 0; + + self->left = grib_arguments_get_name(a->parent->h,c,n++); + self->right = grib_arguments_get_long(a->parent->h,c,n++); + + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_octect_number* self = (grib_accessor_octect_number*)a; + int ret = 0; + long offset; + + offset=a->offset+self->right; + + /*printf("-------- setting %s to %ld\n", self->left,offset);*/ + + if((ret = grib_set_long_internal(a->parent->h, self->left,offset)) != GRIB_SUCCESS) + return ret; + + *val = offset; + + *len =1; + + return ret; +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + return 0; +} + diff --git a/src/grib_accessor_class_offset_file.c b/src/grib_accessor_class_offset_file.c new file mode 100644 index 000000000..430b37616 --- /dev/null +++ b/src/grib_accessor_class_offset_file.c @@ -0,0 +1,169 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double + IMPLEMENTS = unpack_string + IMPLEMENTS = init + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_offset_file { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in offset_file */ +} grib_accessor_offset_file; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_offset_file = { + &grib_accessor_class_double, /* super */ + "offset_file", /* name */ + sizeof(grib_accessor_offset_file), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_offset_file = &_grib_accessor_class_offset_file; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->length=0; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + *val = (double)a->parent->h->offset; + *len =1; + return 0; +} + +static int unpack_string(grib_accessor*a , char* v, size_t *len){ + + double val = 0; + size_t l = 1; + char repres[1024]; + + grib_unpack_double (a , &val, &l); + + sprintf(repres,"%.0f", val); + + l = strlen(repres)+1; + + if(l >*len ){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_long : unpack_string : Buffer too small for %s ", a->name ); + + *len = l; + return GRIB_BUFFER_TOO_SMALL; + } + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, "grib_accessor_long: Casting double %s to string ", a->name); + + *len = l; + + strcpy(v,repres); + return GRIB_SUCCESS; + + +} + diff --git a/src/grib_accessor_class_offset_values.c b/src/grib_accessor_class_offset_values.c new file mode 100644 index 000000000..4b322f5c9 --- /dev/null +++ b/src/grib_accessor_class_offset_values.c @@ -0,0 +1,190 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/********************************** + * Enrico Fucile + *********************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double; pack_double + IMPLEMENTS = init + MEMBERS = const char* values + MEMBERS = const char* missingValue + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_offset_values { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in offset_values */ + const char* values; + const char* missingValue; +} grib_accessor_offset_values; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_offset_values = { + &grib_accessor_class_double, /* super */ + "offset_values", /* name */ + sizeof(grib_accessor_offset_values), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_offset_values = &_grib_accessor_class_offset_values; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* args) +{ + int n=0; + grib_accessor_offset_values* self= (grib_accessor_offset_values*)a; + self->values=grib_arguments_get_name(a->parent->h,args,n++); + self->missingValue=grib_arguments_get_name(a->parent->h,args,n++); + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + int ret=0; + *val=0; + *len =1; + return ret; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + double* values=NULL; + size_t size=0; + double missingValue=0; + int ret=0,i=0; + grib_accessor_offset_values* self= (grib_accessor_offset_values*)a; + grib_context* c=a->parent->h->context; + grib_handle* h=a->parent->h; + + if (*val==0) return GRIB_SUCCESS; + + if((ret = grib_get_double_internal(h,self->missingValue,&missingValue)) + != GRIB_SUCCESS) { + return ret; + } + + if ( (ret=grib_get_size(h,self->values,&size)) != GRIB_SUCCESS) return ret; + + values=(double*)grib_context_malloc(c,size*sizeof(double)); + if (!values) return GRIB_OUT_OF_MEMORY; + + if((ret = grib_get_double_array_internal(h,self->values,values,&size)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + for (i=0;ivalues,values,size)) + != GRIB_SUCCESS) return ret; + + grib_context_free(c,values); + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_accessor_class_pad.c b/src/grib_accessor_class_pad.c new file mode 100644 index 000000000..b49db36a2 --- /dev/null +++ b/src/grib_accessor_class_pad.c @@ -0,0 +1,152 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_padding + IMPLEMENTS = init;preferred_size + MEMBERS =grib_expression* expression + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static size_t preferred_size(grib_accessor*,int); + +typedef struct grib_accessor_pad { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +/* Members defined in padding */ +/* Members defined in pad */ + grib_expression* expression; +} grib_accessor_pad; + +extern grib_accessor_class* grib_accessor_class_padding; + +static grib_accessor_class _grib_accessor_class_pad = { + &grib_accessor_class_padding, /* super */ + "pad", /* name */ + sizeof(grib_accessor_pad), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + &preferred_size, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_pad = &_grib_accessor_class_pad; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static size_t preferred_size(grib_accessor* a,int from_handle) +{ + grib_accessor_pad* self = (grib_accessor_pad*)a; + + long length = 0; + + grib_expression_evaluate_long(a->parent->h,self->expression,&length); + + return length > 0 ? length : 0; +} + + +static void init(grib_accessor* a, const long len, grib_arguments*arg ) +{ + grib_accessor_pad* self = (grib_accessor_pad*)a; + + self->expression = grib_arguments_get_expression(a->parent->h, arg,0); + a->length = preferred_size(a,1); +} + diff --git a/src/grib_accessor_class_padding.c b/src/grib_accessor_class_padding.c new file mode 100644 index 000000000..0c1ca616e --- /dev/null +++ b/src/grib_accessor_class_padding.c @@ -0,0 +1,161 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_bytes + IMPLEMENTS = init;update_size;resize; value_count + IMPLEMENTS = compare;string_length;byte_count + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static size_t string_length(grib_accessor*); +static long byte_count(grib_accessor*); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); +static void resize(grib_accessor*,size_t); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_padding { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +/* Members defined in padding */ +} grib_accessor_padding; + +extern grib_accessor_class* grib_accessor_class_bytes; + +static grib_accessor_class _grib_accessor_class_padding = { + &grib_accessor_class_bytes, /* super */ + "padding", /* name */ + sizeof(grib_accessor_padding), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + &byte_count, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + &resize, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_padding = &_grib_accessor_class_padding; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void init(grib_accessor* a, const long len, grib_arguments*arg ) +{ + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static int compare(grib_accessor* a, grib_accessor* b) { + if (a->length != b->length) return GRIB_COUNT_MISMATCH; + return GRIB_SUCCESS; +} + + +static void update_size(grib_accessor* a,size_t new_size) +{ + /* printf("update_size: grib_accessor_class_padding.c %ld %ld %s %s\n", (long)new_size,(long)a->length,a->cclass->name,a->name); */ + a->length = new_size; +} + +static void resize(grib_accessor* a,size_t new_size) +{ + void* zero = grib_context_malloc_clear(a->parent->h->context,new_size); + + grib_buffer_replace(a,zero,new_size,1,0); + grib_context_free(a->parent->h->context,zero); + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG,"resize: grib_accessor_class_padding.c %ld %ld %s %s\n",(long)new_size,(long)a->length,a->cclass->name,a->name); + Assert(new_size == a->length); + +} + +static long value_count(grib_accessor* a){ return 1;} +static long byte_count(grib_accessor* a){ return a->length;} +static size_t string_length(grib_accessor* a){ return (size_t)a->length;} diff --git a/src/grib_accessor_class_padto.c b/src/grib_accessor_class_padto.c new file mode 100644 index 000000000..1f648f995 --- /dev/null +++ b/src/grib_accessor_class_padto.c @@ -0,0 +1,161 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_padding + IMPLEMENTS = init;preferred_size;dump + MEMBERS=grib_expression* expression + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static size_t preferred_size(grib_accessor*,int); + +typedef struct grib_accessor_padto { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +/* Members defined in padding */ +/* Members defined in padto */ + grib_expression* expression; +} grib_accessor_padto; + +extern grib_accessor_class* grib_accessor_class_padding; + +static grib_accessor_class _grib_accessor_class_padto = { + &grib_accessor_class_padding, /* super */ + "padto", /* name */ + sizeof(grib_accessor_padto), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + &preferred_size, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_padto = &_grib_accessor_class_padto; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static size_t preferred_size(grib_accessor* a,int from_handle) +{ + grib_accessor_padto* self = (grib_accessor_padto*)a; + + long length=0; + long end; + + grib_expression_evaluate_long(a->parent->h,self->expression,&end); + + length = end - a->offset; + + /* printf("preferred_size: prefered: %ld current:%ld %s %s %ld\n", (long)length,(long)a->length,a->cclass->name,a->name,(long)a->offset); */ + + return length > 0 ? length : 0; +} + + +static void init(grib_accessor* a, const long len, grib_arguments*arg ) +{ + grib_accessor_padto* self = (grib_accessor_padto*)a; + + self->expression = grib_arguments_get_expression(a->parent->h, arg,0); + a->length = preferred_size(a,1); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + /*grib_dump_string(dumper,a,NULL);*/ +} + diff --git a/src/grib_accessor_class_padtoeven.c b/src/grib_accessor_class_padtoeven.c new file mode 100644 index 000000000..9d9af3d4c --- /dev/null +++ b/src/grib_accessor_class_padtoeven.c @@ -0,0 +1,170 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_padding + IMPLEMENTS = init;preferred_size + MEMBERS=const char* section_offset + MEMBERS=const char* section_length + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static size_t preferred_size(grib_accessor*,int); + +typedef struct grib_accessor_padtoeven { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +/* Members defined in padding */ +/* Members defined in padtoeven */ + const char* section_offset; + const char* section_length; +} grib_accessor_padtoeven; + +extern grib_accessor_class* grib_accessor_class_padding; + +static grib_accessor_class _grib_accessor_class_padtoeven = { + &grib_accessor_class_padding, /* super */ + "padtoeven", /* name */ + sizeof(grib_accessor_padtoeven), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + &preferred_size, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_padtoeven = &_grib_accessor_class_padtoeven; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static size_t preferred_size(grib_accessor* a,int from_handle) +{ + grib_accessor_padtoeven* self = (grib_accessor_padtoeven*)a; + long offset = 0; + long length = 0; + long seclen; + + grib_get_long_internal(a->parent->h,self->section_offset,&offset); + grib_get_long_internal(a->parent->h,self->section_length,&length); + + if((length%2) && from_handle) { +#if 0 + grib_context_log(a->parent->h->context, + GRIB_LOG_ERROR,"GRIB message has an odd length section (%ld, %s)", + (long)length,a->name); +#endif + return 0; + + } + + /* printf("EVEN %ld %ld\n",(long) a->offset,(long) offset);*/ + + seclen = a->offset - offset; + + return seclen % 2 ? 1 : 0; +} + +static void init(grib_accessor* a, const long len, grib_arguments* args) +{ + grib_accessor_padtoeven* self = (grib_accessor_padtoeven*)a; + + self->section_offset = grib_arguments_get_name(a->parent->h,args,0); + self->section_length = grib_arguments_get_name(a->parent->h,args,1); + + a->length = preferred_size(a,1); + +} diff --git a/src/grib_accessor_class_padtomultiple.c b/src/grib_accessor_class_padtomultiple.c new file mode 100644 index 000000000..827bb9dc6 --- /dev/null +++ b/src/grib_accessor_class_padtomultiple.c @@ -0,0 +1,158 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_padding + IMPLEMENTS = init;preferred_size + MEMBERS=grib_expression* begin + MEMBERS=grib_expression* multiple + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static size_t preferred_size(grib_accessor*,int); + +typedef struct grib_accessor_padtomultiple { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +/* Members defined in padding */ +/* Members defined in padtomultiple */ + grib_expression* begin; + grib_expression* multiple; +} grib_accessor_padtomultiple; + +extern grib_accessor_class* grib_accessor_class_padding; + +static grib_accessor_class _grib_accessor_class_padtomultiple = { + &grib_accessor_class_padding, /* super */ + "padtomultiple", /* name */ + sizeof(grib_accessor_padtomultiple), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + &preferred_size, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_padtomultiple = &_grib_accessor_class_padtomultiple; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static size_t preferred_size(grib_accessor* a,int from_handle) +{ + grib_accessor_padtomultiple* self = (grib_accessor_padtomultiple*)a; + long padding=0; + long begin = 0; + long multiple = 0; + + grib_expression_evaluate_long(a->parent->h,self->begin,&begin); + grib_expression_evaluate_long(a->parent->h,self->multiple,&multiple); + + padding = a->offset - begin; + padding = ((padding + multiple - 1)/multiple)*multiple - padding; + + return padding == 0 ? multiple : padding; + +} + +static void init(grib_accessor* a, const long len, grib_arguments *arg ) +{ + grib_accessor_padtomultiple* self = (grib_accessor_padtomultiple*)a; + + self->begin = grib_arguments_get_expression(a->parent->h, arg,0); + self->multiple = grib_arguments_get_expression(a->parent->h, arg,1); + a->length = preferred_size(a,1); +} diff --git a/src/grib_accessor_class_position.c b/src/grib_accessor_class_position.c new file mode 100644 index 000000000..79fd4f9cc --- /dev/null +++ b/src/grib_accessor_class_position.c @@ -0,0 +1,169 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = unpack_long + IMPLEMENTS = get_native_type + IMPLEMENTS = init;dump + IMPLEMENTS = compare + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_position { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in position */ +} grib_accessor_position; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_position = { + &grib_accessor_class_gen, /* super */ + "position", /* name */ + sizeof(grib_accessor_position), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_position = &_grib_accessor_class_position; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + a->length = 0; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_LONG; +} + +static void dump(grib_accessor* a,grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + *val = a->offset; + *len = 1; + return GRIB_SUCCESS; + +} + +static int compare(grib_accessor* a, grib_accessor* b) { + if (a->offset != b->offset) return GRIB_OFFSET_MISMATCH; + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_reference_value_error.c b/src/grib_accessor_class_reference_value_error.c new file mode 100644 index 000000000..316a93d5f --- /dev/null +++ b/src/grib_accessor_class_reference_value_error.c @@ -0,0 +1,166 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double + IMPLEMENTS = init + MEMBERS=const char* referenceValue + MEMBERS=const char* floatType + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_reference_value_error { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in reference_value_error */ + const char* referenceValue; + const char* floatType; +} grib_accessor_reference_value_error; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_reference_value_error = { + &grib_accessor_class_double, /* super */ + "reference_value_error", /* name */ + sizeof(grib_accessor_reference_value_error), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_reference_value_error = &_grib_accessor_class_reference_value_error; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_reference_value_error* self = (grib_accessor_reference_value_error*)a; + int n = 0; + + self->referenceValue = grib_arguments_get_name(a->parent->h,c,n++); + self->floatType = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->length=0; + +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) { + grib_accessor_reference_value_error* self = (grib_accessor_reference_value_error*)a; + int ret = 0; + double referenceValue=0; + + if((ret = grib_get_double_internal(a->parent->h, + self->referenceValue,&referenceValue)) != GRIB_SUCCESS) + return ret; + + if (!strcmp(self->floatType,"ibm")) + *val=grib_ibmfloat_error(referenceValue); + else if (!strcmp(self->floatType,"ieee")) + *val=grib_ieeefloat_error(referenceValue); + else Assert(1==0); + + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + diff --git a/src/grib_accessor_class_round.c b/src/grib_accessor_class_round.c new file mode 100644 index 000000000..002525d1a --- /dev/null +++ b/src/grib_accessor_class_round.c @@ -0,0 +1,186 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_evaluate + IMPLEMENTS = unpack_double + IMPLEMENTS = unpack_string + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_round { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in evaluate */ + grib_arguments* arg; +/* Members defined in round */ +} grib_accessor_round; + +extern grib_accessor_class* grib_accessor_class_evaluate; + +static grib_accessor_class _grib_accessor_class_round = { + &grib_accessor_class_evaluate, /* super */ + "round", /* name */ + sizeof(grib_accessor_round), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_round = &_grib_accessor_class_round; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_round* self = (grib_accessor_round*)a; + + + int ret = GRIB_SUCCESS; + + size_t replen = 0; + double rounding_precision = 0; + double rounded = 0; + double toround = 0; + + const char* oval = NULL; + oval = grib_arguments_get_name(a->parent->h,self->arg,0); + + + if( (ret = grib_get_double_internal(a->parent->h, oval, &toround)) != 0) + return ret; + + rounding_precision = grib_arguments_get_long(a->parent->h,self->arg,1); + + rounded = floor(rounding_precision * toround + 0.5) / rounding_precision; + + + + *len = replen; + + *val = rounded; + + return ret; +} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + + + char result[1024] ; + int ret = GRIB_SUCCESS; + size_t replen = 1; + + double value = 0; + + ret = unpack_double(a, &value, &replen); + + sprintf(result,"%.3f",value); + + replen = strlen(result)+1; + + if(*len < replen){ + *len = replen; + return GRIB_ARRAY_TOO_SMALL; + } + + *len = replen; + + sprintf(val,"%s",result); + + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_scale.c b/src/grib_accessor_class_scale.c new file mode 100644 index 000000000..f5c4e24a3 --- /dev/null +++ b/src/grib_accessor_class_scale.c @@ -0,0 +1,266 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double;pack_double;is_missing + IMPLEMENTS = pack_long + IMPLEMENTS = init + MEMBERS=const char* value + MEMBERS=const char* multiplier + MEMBERS=const char* divisor + MEMBERS=const char* truncating + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int is_missing(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_scale { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in scale */ + const char* value; + const char* multiplier; + const char* divisor; + const char* truncating; +} grib_accessor_scale; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_scale = { + &grib_accessor_class_double, /* super */ + "scale", /* name */ + sizeof(grib_accessor_scale), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + &is_missing, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_scale = &_grib_accessor_class_scale; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_scale* self = (grib_accessor_scale*)a; + int n = 0; + + self->value = grib_arguments_get_name(a->parent->h,c,n++); + self->multiplier = grib_arguments_get_name(a->parent->h,c,n++); + self->divisor = grib_arguments_get_name(a->parent->h,c,n++); + self->truncating = grib_arguments_get_name(a->parent->h,c,n++); + +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_scale* self = (grib_accessor_scale*)a; + int ret = 0; + long value = 0; + long multiplier = 0; + long divisor = 0; + + if(*len < 1){ + ret = GRIB_ARRAY_TOO_SMALL; + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "Accessor %s cannot gather value for %s and/or %s error %d", + a->name,self->multiplier, self->divisor, ret); + return ret; + } + + if((ret = grib_get_long_internal(a->parent->h, self->divisor,&divisor)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->multiplier,&multiplier)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->value,&value)) != GRIB_SUCCESS) + return ret; + + if (value == GRIB_MISSING_LONG) *val=GRIB_MISSING_DOUBLE; + else *val = ((double)(value*multiplier))/divisor; + /*printf("unpack_double: divisor=%ld multiplier=%ld long_value=%ld scaled_value=%.30f\n",(double)divisor,(double)multiplier,value,*val);*/ + + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + double dval=(const double)*val; + return pack_double(a, &dval,len); +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_scale* self = (grib_accessor_scale*)a; + int ret = 0; + + long value = 0; + long divisor = 0; + long multiplier = 0; + long truncating=0; + double x; + + ret = grib_get_long_internal(a->parent->h, self->divisor,&divisor); + if(ret != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->divisor, ret); + return ret; + } + ret = grib_get_long_internal(a->parent->h, self->multiplier,&multiplier); + if(ret != GRIB_SUCCESS){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->divisor, ret); + return ret; + } + if (self->truncating) { + ret = grib_get_long_internal(a->parent->h, self->truncating,&truncating); + if(ret != GRIB_SUCCESS){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->truncating, ret); + return ret; + } + } + + if (multiplier == 0) { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont divide by a zero multiplier %s error %d \n", a->name, self->multiplier, ret); + return GRIB_ENCODING_ERROR; + } + + x=*val * (double)divisor / (double)multiplier; + if (*val == GRIB_MISSING_DOUBLE) value = GRIB_MISSING_LONG; + else if (truncating) { + value = (long)x; + } else { + value = x > 0 ? (long)(x+0.5) : (long)(x-0.5) ; + } + + ret = grib_set_long_internal(a->parent->h, self->value,value); + if(ret ) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->value, ret); + + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + +static int is_missing(grib_accessor* a){ + grib_accessor_scale* self = (grib_accessor_scale*)a; + grib_accessor* av=grib_find_accessor(a->parent->h,self->value); + + if (!av) return GRIB_NOT_FOUND; + return grib_is_missing_internal(av); +#if 0 + int ret=0; + long value=0; + + if((ret = grib_get_long_internal(a->parent->h,self->value, + &value) ) != GRIB_SUCCESS){ + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "Accessor %s cannont gather value for %s error %d \n", a->name, + self->value, ret); + return 0; + } + + return (value == GRIB_MISSING_LONG); +#endif + + +} + diff --git a/src/grib_accessor_class_scale_values.c b/src/grib_accessor_class_scale_values.c new file mode 100644 index 000000000..07e54811c --- /dev/null +++ b/src/grib_accessor_class_scale_values.c @@ -0,0 +1,189 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/********************************** + * Enrico Fucile + *********************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double; pack_double + IMPLEMENTS = init + MEMBERS = const char* values + MEMBERS = const char* missingValue + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_scale_values { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in scale_values */ + const char* values; + const char* missingValue; +} grib_accessor_scale_values; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_scale_values = { + &grib_accessor_class_double, /* super */ + "scale_values", /* name */ + sizeof(grib_accessor_scale_values), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_scale_values = &_grib_accessor_class_scale_values; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* args) +{ + int n=0; + grib_accessor_scale_values* self= (grib_accessor_scale_values*)a; + self->values=grib_arguments_get_name(a->parent->h,args,n++); + self->missingValue=grib_arguments_get_name(a->parent->h,args,n++); + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + int ret=0; + *val=1; + *len =1; + return ret; +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + double* values=NULL; + double missingValue=0; + size_t size=0; + int ret=0,i=0; + grib_accessor_scale_values* self= (grib_accessor_scale_values*)a; + grib_context* c=a->parent->h->context; + grib_handle* h=a->parent->h; + + if (*val==1) return GRIB_SUCCESS; + + if((ret = grib_get_double_internal(h,self->missingValue,&missingValue)) + != GRIB_SUCCESS) { + return ret; + } + + if ( (ret=grib_get_size(h,self->values,&size)) != GRIB_SUCCESS) return ret; + + values=(double*)grib_context_malloc(c,size*sizeof(double)); + if (!values) return GRIB_OUT_OF_MEMORY; + + if((ret = grib_get_double_array_internal(h,self->values,values,&size)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + for (i=0;ivalues,values,size)) + != GRIB_SUCCESS) return ret; + + grib_context_free(c,values); + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_accessor_class_second_order_bits_per_value.c b/src/grib_accessor_class_second_order_bits_per_value.c new file mode 100644 index 000000000..cd84d3ff3 --- /dev/null +++ b/src/grib_accessor_class_second_order_bits_per_value.c @@ -0,0 +1,227 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/********************************** + * Enrico Fucile + **********************************/ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = pack_long + IMPLEMENTS = init + MEMBERS = const char* values + MEMBERS = const char* binaryScaleFactor + MEMBERS = const char* decimalScaleFactor + MEMBERS = long bitsPerValue + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_second_order_bits_per_value { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in second_order_bits_per_value */ + const char* values; + const char* binaryScaleFactor; + const char* decimalScaleFactor; + long bitsPerValue; +} grib_accessor_second_order_bits_per_value; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_second_order_bits_per_value = { + &grib_accessor_class_long, /* super */ + "second_order_bits_per_value", /* name */ + sizeof(grib_accessor_second_order_bits_per_value), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_second_order_bits_per_value = &_grib_accessor_class_second_order_bits_per_value; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static unsigned long nbits[32]={ + 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, + 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, + 0x1000, 0x2000, 0x4000, 0x8000, 0x10000, 0x20000, + 0x40000, 0x80000, 0x100000, 0x200000, 0x400000, 0x800000, + 0x1000000, 0x2000000, 0x4000000, 0x8000000, 0x10000000, 0x20000000, + 0x40000000, 0x80000000 +}; + +GRIB_INLINE static long number_of_bits(unsigned long x) { + unsigned long *n=nbits; + long i=0; + while (x>=*n) {n++;i++;} + return i; +} + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + int n=0; + grib_accessor_second_order_bits_per_value* self = (grib_accessor_second_order_bits_per_value*)a; + self->values = grib_arguments_get_name(a->parent->h,c,n++); + self->binaryScaleFactor = grib_arguments_get_name(a->parent->h,c,n++); + self->decimalScaleFactor = grib_arguments_get_name(a->parent->h,c,n++); + self->bitsPerValue=0; + + a->length=0; +} + +static int pack_long(grib_accessor* a, const long* val,size_t *len) +{ + grib_accessor_second_order_bits_per_value* self = (grib_accessor_second_order_bits_per_value*)a; + self->bitsPerValue=(long)*val; + *len=1; + + return 0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=GRIB_SUCCESS; + size_t size=0; + size_t i; + double max,min,d,b; + double *values=0; + long binaryScaleFactor,decimalScaleFactor; + + grib_accessor_second_order_bits_per_value* self = (grib_accessor_second_order_bits_per_value*)a; + if (self->bitsPerValue) { + *val=self->bitsPerValue; + return GRIB_SUCCESS; + } + + if((ret = grib_get_size(a->parent->h, self->values,&size)) != GRIB_SUCCESS) { + *val=self->bitsPerValue; + return GRIB_SUCCESS; + } + + if((ret = grib_get_long(a->parent->h, self->binaryScaleFactor,&binaryScaleFactor)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->decimalScaleFactor,&decimalScaleFactor)) != GRIB_SUCCESS) + return ret; + + values=grib_context_malloc_clear(a->parent->h->context,sizeof(double)*size); + if (!values) { + grib_context_log(a->parent->h->context,GRIB_LOG_FATAL,"%s unable to allocate %ld bytes", + a->name,(long)size); + return GRIB_OUT_OF_MEMORY; + } + if((ret = grib_get_double_array_internal(a->parent->h, self->values,values,&size)) != GRIB_SUCCESS) + return ret; + + max=values[0]; + min=max; + for (i=1;ivalues[i]) min=values[i]; + } + + d=grib_power(decimalScaleFactor,10); + b=grib_power(-binaryScaleFactor,2); + + /* self->bitsPerValue=(long)ceil(log((double)((max-min)*d+1))/log(2.0))-binaryScaleFactor; */ + self->bitsPerValue=number_of_bits((unsigned long)(fabs(max-min)*b*d)); + *val=self->bitsPerValue; + + grib_context_free(a->parent->h->context,values); + + return ret; +} + diff --git a/src/grib_accessor_class_section.c b/src/grib_accessor_class_section.c new file mode 100644 index 000000000..290401ad6 --- /dev/null +++ b/src/grib_accessor_class_section.c @@ -0,0 +1,221 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = next_offset;byte_count + IMPLEMENTS = destroy;sub_section + IMPLEMENTS = get_native_type + IMPLEMENTS = init;dump;update_size + IMPLEMENTS = next + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static grib_section* sub_section(grib_accessor* a); +static int get_native_type(grib_accessor*); +static long byte_count(grib_accessor*); +static long next_offset(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); +static grib_accessor* next(grib_accessor*, int); + +typedef struct grib_accessor_section { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in section */ +} grib_accessor_section; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_section = { + &grib_accessor_class_gen, /* super */ + "section", /* name */ + sizeof(grib_accessor_section), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + &dump, /* describes himself */ + &next_offset, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + &byte_count, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + &sub_section, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + &next, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_section = &_grib_accessor_class_section; + + +static void init_class(grib_accessor_class* c) +{ + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_offset = (*(c->super))->byte_offset; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + a->sub_section = grib_section_create(a->parent->h,a); + a->length = 0; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_section(dumper,a,a->sub_section->block); +} + +static long byte_count(grib_accessor* a) +{ + + if( !a->length || a->parent->h->loader ) + { + if(a->name[1]=='_') return 0; + + /* printf("adjusting sizes SECTION %s is %ld %ld\n",a->name,(long)a->offset,(long)a->length); */ + grib_section_adjust_sizes(a->sub_section,a->parent->h->loader != NULL,0); + /* printf(" SECTION %s is %ld %ld\n",a->name,(long)a->offset,(long)a->length); */ + } + + + /* printf("SECTION %s is %ld %d\n",a->name,a->length,a->sub_section->aclength != NULL); */ + + return a->length; +} + +static long next_offset(grib_accessor* a) +{ + return a->offset + byte_count(a); +} + +static void destroy(grib_context* ct, grib_accessor* a) +{ + grib_section_delete(ct,a->sub_section); +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_SECTION; +} + +static grib_section* sub_section(grib_accessor* a){ + /* grib_accessor_section* self = (grib_accessor_section*)a; */ + return a->sub_section; +} + + +static void update_size(grib_accessor* a,size_t length) +{ + + size_t size = 1; + long len = length; + Assert(length <= 0x7fffffff); + if(a->sub_section->aclength) + { + int e=grib_pack_long(a->sub_section->aclength,&len,&size); + Assert( e == GRIB_SUCCESS); + printf("update_length %s %ld %ld\n",a->sub_section->aclength->name, + (long)a->sub_section->aclength->offset, + (long)a->sub_section->aclength->length + + ); + } + + a->sub_section->length = a->length = length; + a->sub_section->padding = 0; + + printf("update_size %s %ld\n",a->name,a->length); + + Assert(a->length>=0); +} + +static grib_accessor* next(grib_accessor* a,int explore) { + grib_accessor* next=NULL; + if (explore) { + next=a->sub_section->block->first; + if (!next) next=a->next; + } else { + next=a->next; + } + if (!next) { + if (a->parent->owner) + next=a->parent->owner->cclass->next(a->parent->owner,0); + } + return next; +} + diff --git a/src/grib_accessor_class_section_length.c b/src/grib_accessor_class_section_length.c new file mode 100644 index 000000000..95c3c7e8b --- /dev/null +++ b/src/grib_accessor_class_section_length.c @@ -0,0 +1,145 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_unsigned + IMPLEMENTS = init;dump + IMPLEMENTS = value_count + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_section_length { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in section_length */ +} grib_accessor_section_length; + +extern grib_accessor_class* grib_accessor_class_unsigned; + +static grib_accessor_class _grib_accessor_class_section_length = { + &grib_accessor_class_unsigned, /* super */ + "section_length", /* name */ + sizeof(grib_accessor_section_length), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_section_length = &_grib_accessor_class_section_length; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + a->parent->aclength = a; + a->length = len; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + Assert(a->length>=0); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static long value_count(grib_accessor* a) +{ + return 1; +} diff --git a/src/grib_accessor_class_section_padding.c b/src/grib_accessor_class_section_padding.c new file mode 100644 index 000000000..91735b6a2 --- /dev/null +++ b/src/grib_accessor_class_section_padding.c @@ -0,0 +1,186 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_padding + IMPLEMENTS = init;preferred_size + MEMBERS = int preserve + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static size_t preferred_size(grib_accessor*,int); + +typedef struct grib_accessor_section_padding { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in bytes */ +/* Members defined in padding */ +/* Members defined in section_padding */ + int preserve; +} grib_accessor_section_padding; + +extern grib_accessor_class* grib_accessor_class_padding; + +static grib_accessor_class _grib_accessor_class_section_padding = { + &grib_accessor_class_padding, /* super */ + "section_padding", /* name */ + sizeof(grib_accessor_section_padding), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + &preferred_size, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_section_padding = &_grib_accessor_class_section_padding; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static size_t preferred_size(grib_accessor* a, int from_handle) +{ + grib_accessor_section_padding* self = (grib_accessor_section_padding*)a; + grib_accessor *b = a; + grib_accessor* section_length = 0; + long length = 0; + size_t size = 1; + + long alength = 0; + + if(!from_handle) + { + if(self->preserve) + return a->length; + else + return 0; + } + + /* The section length should be a parameter */ + while(section_length == NULL && b != NULL) + { + section_length = b->parent->aclength; + b = b->parent->owner; + } + + if(!section_length) + { + /* printf("PADDING is no !section_length\n"); */ + return 0; + } + + if(grib_unpack_long(section_length,&length,&size) == GRIB_SUCCESS) + { + if(length) + alength = length - a->offset + section_length->parent->owner->offset; + else + alength = 0; + + /*Assert(a->length>=0);*/ + + if (alength<0) alength=0; + + /* printf("PADDING is %ld\n",a->length); */ + } + else + { + /* printf("PADDING unpack fails\n"); */ + } + + return alength; +} + +static void init(grib_accessor* a, const long len, grib_arguments*arg ) +{ + grib_accessor_section_padding* self = (grib_accessor_section_padding*)a; + self->preserve = 1; /* This should be a parameter */ + a->length = preferred_size(a,1); + +} diff --git a/src/grib_accessor_class_section_pointer.c b/src/grib_accessor_class_section_pointer.c new file mode 100644 index 000000000..2feeaa6e4 --- /dev/null +++ b/src/grib_accessor_class_section_pointer.c @@ -0,0 +1,216 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init;get_native_type;unpack_string + IMPLEMENTS = byte_count; byte_offset + MEMBERS = const char* sectionOffset + MEMBERS = const char* sectionLength + MEMBERS = long sectionNumber + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_section_pointer { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in section_pointer */ + const char* sectionOffset; + const char* sectionLength; + long sectionNumber; +} grib_accessor_section_pointer; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_section_pointer = { + &grib_accessor_class_gen, /* super */ + "section_pointer", /* name */ + sizeof(grib_accessor_section_pointer), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_section_pointer = &_grib_accessor_class_section_pointer; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg) +{ + int n=0; + grib_accessor_section_pointer* self=(grib_accessor_section_pointer*)a; + + self->sectionOffset = grib_arguments_get_name(a->parent->h,arg,n++); + self->sectionLength = grib_arguments_get_name(a->parent->h,arg,n++); + self->sectionNumber = grib_arguments_get_long(a->parent->h,arg,n++); + + Assert (self->sectionNumber < MAX_NUM_SECTIONS ); + + a->parent->h->section_offset[self->sectionNumber]=(char*)self->sectionOffset; + a->parent->h->section_length[self->sectionNumber]=(char*)self->sectionLength; + + /* printf("++++++++++++++ GRIB_API: creating section_pointer%d %s %s\n", */ + /* self->sectionNumber,self->sectionLength,self->sectionLength); */ + + if( a->parent->h->sections_count < self->sectionNumber) + a->parent->h->sections_count=self->sectionNumber; + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + a->length = 0; +} + +static int get_native_type(grib_accessor* a) +{ + return GRIB_TYPE_BYTES; +} + + +static int unpack_string(grib_accessor *a , char* v, size_t *len){ + /* + unsigned char* p=NULL; + char* s=v; + int i; + long length=grib_byte_count(a); + + if (*len < length) return GRIB_ARRAY_TOO_SMALL; + + p = a->parent->h->buffer->data + grib_byte_offset(a); + + for (i = 0; i < length; i++) { + sprintf (s,"%02x", *(p++)); + s+=2; + } + + *len=length; + */ + sprintf(v,"%ld_%ld",grib_byte_offset(a),grib_byte_count(a)); + return GRIB_SUCCESS; +} + +static long byte_count(grib_accessor* a){ + grib_accessor_section_pointer* self=(grib_accessor_section_pointer*)a; + long sectionLength=0; + int ret=0; + + ret=grib_get_long(a->parent->h,self->sectionLength,§ionLength); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to get %s %s", + self->sectionLength,grib_get_error_message(ret)); + return -1; + } + + return sectionLength; +} + +static long byte_offset(grib_accessor* a){ + grib_accessor_section_pointer* self=(grib_accessor_section_pointer*)a; + long sectionOffset=0; + int ret=0; + + ret=grib_get_long(a->parent->h,self->sectionOffset,§ionOffset); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "unable to get %s %s", + self->sectionOffset,grib_get_error_message(ret)); + return -1; + } + + return sectionOffset; +} + diff --git a/src/grib_accessor_class_select_step_template.c b/src/grib_accessor_class_select_step_template.c new file mode 100644 index 000000000..53095889e --- /dev/null +++ b/src/grib_accessor_class_select_step_template.c @@ -0,0 +1,250 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_unsigned + IMPLEMENTS = unpack_long;pack_long; value_count + IMPLEMENTS = init + MEMBERS=const char* productDefinitionTemplateNumber + MEMBERS=int instant + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_select_step_template { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in select_step_template */ + const char* productDefinitionTemplateNumber; + int instant; +} grib_accessor_select_step_template; + +extern grib_accessor_class* grib_accessor_class_unsigned; + +static grib_accessor_class _grib_accessor_class_select_step_template = { + &grib_accessor_class_unsigned, /* super */ + "select_step_template", /* name */ + sizeof(grib_accessor_select_step_template), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_select_step_template = &_grib_accessor_class_select_step_template; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_select_step_template* self = (grib_accessor_select_step_template*)a; + int n = 0; + + self->productDefinitionTemplateNumber = grib_arguments_get_name(a->parent->h,c,n++); + self->instant = grib_arguments_get_long(a->parent->h,c,n++); + +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + *val=1; + return GRIB_SUCCESS; +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_select_step_template* self = (grib_accessor_select_step_template*)a; + long productDefinitionTemplateNumber=0; + long productDefinitionTemplateNumberNew=0; + + grib_get_long(a->parent->h, self->productDefinitionTemplateNumber,&productDefinitionTemplateNumber); + + if (self->instant) { + switch (productDefinitionTemplateNumber) { + case 8: + productDefinitionTemplateNumberNew=0; + break; + case 9: + productDefinitionTemplateNumberNew=5; + break; + case 10: + productDefinitionTemplateNumberNew=6; + break; + case 11: + productDefinitionTemplateNumberNew=1; + break; + case 12: + productDefinitionTemplateNumberNew=2; + break; + case 13: + productDefinitionTemplateNumberNew=3; + break; + case 14: + productDefinitionTemplateNumberNew=4; + break; + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 15: + productDefinitionTemplateNumberNew=productDefinitionTemplateNumber; + break; + default: + productDefinitionTemplateNumberNew=productDefinitionTemplateNumber; + break; + } + } else { + switch (productDefinitionTemplateNumber) { + case 0: + productDefinitionTemplateNumberNew=8; + break; + case 1: + productDefinitionTemplateNumberNew=11; + break; + case 2: + productDefinitionTemplateNumberNew=12; + break; + case 3: + productDefinitionTemplateNumberNew=13; + break; + case 4: + productDefinitionTemplateNumberNew=14; + break; + case 5: + productDefinitionTemplateNumberNew=9; + break; + case 6: + productDefinitionTemplateNumberNew=10; + break; + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + productDefinitionTemplateNumberNew=productDefinitionTemplateNumber; + break; + default: + productDefinitionTemplateNumberNew=productDefinitionTemplateNumber; + break; + } + + } + + if (productDefinitionTemplateNumber != productDefinitionTemplateNumberNew) + grib_set_long(a->parent->h, self->productDefinitionTemplateNumber,productDefinitionTemplateNumberNew); + + return 0; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + diff --git a/src/grib_accessor_class_signed.c b/src/grib_accessor_class_signed.c new file mode 100644 index 000000000..61dabf243 --- /dev/null +++ b/src/grib_accessor_class_signed.c @@ -0,0 +1,308 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump + IMPLEMENTS = next_offset + IMPLEMENTS = byte_count + IMPLEMENTS = value_count + IMPLEMENTS = byte_offset + IMPLEMENTS = update_size; is_missing + MEMBERS = grib_arguments* arg + MEMBERS = int nbytes; + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int is_missing(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static long next_offset(grib_accessor*); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); + +typedef struct grib_accessor_signed { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in signed */ + grib_arguments* arg; + int nbytes; +} grib_accessor_signed; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_signed = { + &grib_accessor_class_long, /* super */ + "signed", /* name */ + sizeof(grib_accessor_signed), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + &next_offset, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + &is_missing, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_signed = &_grib_accessor_class_signed; + + +static void init_class(grib_accessor_class* c) +{ + c->string_length = (*(c->super))->string_length; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + grib_accessor_signed* self = (grib_accessor_signed*)a; + self->arg = arg; + a->length = len * grib_value_count(a); + self->nbytes = len; + Assert(a->length>=0); + +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + long rlen = grib_value_count(a); + if(rlen == 1) + grib_dump_long(dumper,a,NULL); + else + grib_dump_values(dumper,a); +} + +static long ones[] = { + 0, + -0x7f, + -0x7fff, + -0x7fffff, + -0x7fffffff, +}; + + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + + grib_accessor_signed* self = (grib_accessor_signed*)a; + unsigned long rlen = grib_value_count(a); + unsigned long i = 0; + + long pos = a->offset; + long missing = 0; + + + if(*len < rlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " wrong size for %s it contains %d values ", a->name , rlen); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + { + Assert(self->nbytes <= 4); + missing = ones[self->nbytes]; + } + + + for(i=0; i< rlen;i++){ + val[i] = (long)grib_decode_signed_long(a->parent->h->buffer->data , pos, self->nbytes); + if(missing) + if(val[i] == missing) + val[i] = GRIB_MISSING_LONG; + pos += self->nbytes; + } + + *len = rlen; + return GRIB_SUCCESS; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_signed* self = (grib_accessor_signed*)a; + int ret = 0; + long off = 0; + unsigned long rlen = grib_value_count(a); + size_t buflen = 0; + unsigned char *buf = NULL; + unsigned long i = 0; + long missing = 0; + + + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + len[0] = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + { + Assert(self->nbytes <= 4); + missing = ones[self->nbytes]; + } + + if (rlen == 1){ + long v = val[0]; + if(missing) + if(v == GRIB_MISSING_LONG) + v = missing; + + + off = a->offset; + ret = grib_encode_signed_long(a->parent->h->buffer->data, v , off, a->length); + if (ret == GRIB_SUCCESS) len[0] = 1; + if (*len > 1) grib_context_log(a->parent->h->context, GRIB_LOG_WARNING, "grib_accessor_signed : Trying to pack %d values in a scalar %s, packing first value", *len, a->name ); + len[0] = 1; + return ret; + } + + /* TODO: We assume that there are no missing values if there are more that 1 value */ + + + + buflen = *len*a->length; + + buf = grib_context_malloc(a->parent->h->context,buflen); + + for(i=0; i < *len;i++){ + grib_encode_signed_long(buf, val[i] , off, a->length); + off+= a->length; + } + ret = grib_set_long_internal(a->parent->h,grib_arguments_get_name(a->parent->h,self->arg,0),*len); + + if(ret == GRIB_SUCCESS) + grib_buffer_replace(a, buf, buflen,1,1); + else + *len = 0; + + grib_context_free(a->parent->h->context,buf); + return ret; +} + +static long byte_count(grib_accessor* a){ + return a->length; +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_signed* self = (grib_accessor_signed*)a; + long len = 0; + int ret =0; + if(!self->arg) return 1; + ret = grib_get_long_internal(a->parent->h,grib_arguments_get_name(a->parent->h,self->arg,0),&len); + if(ret == GRIB_SUCCESS) return len; + return 1; +} + +static long byte_offset(grib_accessor* a){ + return a->offset; +} + +static void update_size(grib_accessor* a,size_t s) +{ + a->length = s; + Assert(a->length>=0); +} + +static long next_offset(grib_accessor* a){ + return grib_byte_offset(a)+grib_byte_count(a); +} + +static int is_missing(grib_accessor* a){ + int i=0; + unsigned char ff=0xff; + unsigned long offset=a->offset; + + if (a->length==0) { + Assert(a->vvalue!=NULL); + return a->vvalue->missing; + } + + for (i=0;ilength;i++) { + if (a->parent->h->buffer->data[offset] != ff) return 0; + offset++; + } + + return 1; +} diff --git a/src/grib_accessor_class_signed_bits.c b/src/grib_accessor_class_signed_bits.c new file mode 100644 index 000000000..13c7b0de1 --- /dev/null +++ b/src/grib_accessor_class_signed_bits.c @@ -0,0 +1,271 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump + IMPLEMENTS = next_offset + IMPLEMENTS = byte_count + IMPLEMENTS = value_count + IMPLEMENTS = byte_offset + IMPLEMENTS = update_size + MEMBERS = const char* numberOfBits + MEMBERS = const char* numberOfElements + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static long next_offset(grib_accessor*); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); + +typedef struct grib_accessor_signed_bits { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in signed_bits */ + const char* numberOfBits; + const char* numberOfElements; +} grib_accessor_signed_bits; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_signed_bits = { + &grib_accessor_class_long, /* super */ + "signed_bits", /* name */ + sizeof(grib_accessor_signed_bits), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + &next_offset, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_signed_bits = &_grib_accessor_class_signed_bits; + + +static void init_class(grib_accessor_class* c) +{ + c->string_length = (*(c->super))->string_length; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static long byte_count(grib_accessor* a){ + return a->length; +} + +static long compute_byte_count(grib_accessor* a){ + grib_accessor_signed_bits* self = (grib_accessor_signed_bits*)a; + long numberOfBits; + long numberOfElements; + int ret=0; + + ret=grib_get_long(a->parent->h,self->numberOfBits,&numberOfBits); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "%s unable to get %s to compute size",a->name,self->numberOfBits); + return 0; + } + + ret=grib_get_long(a->parent->h,self->numberOfElements,&numberOfElements); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "%s unable to get %s to compute size",a->name,self->numberOfElements); + return 0; + } + + return (numberOfBits*numberOfElements+7)/8; +} + +static void init(grib_accessor* a, const long len , grib_arguments* args ) +{ + grib_accessor_signed_bits* self = (grib_accessor_signed_bits*)a; + int n=0; + self->numberOfBits=grib_arguments_get_name(a->parent->h,args,n++); + self->numberOfElements=grib_arguments_get_name(a->parent->h,args,n++); + a->length = compute_byte_count(a); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_signed_bits* self = (grib_accessor_signed_bits*)a; + int i; + int ret=0; + long pos = a->offset*8; + long rlen = value_count(a); + long numberOfBits = 0; + + if(*len < rlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + " wrong size (%ld) for %s it contains %d values ",*len, a->name , rlen); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + ret=grib_get_long(a->parent->h,self->numberOfBits,&numberOfBits); + if (ret) return ret; + + if (numberOfBits==0) { + int i; + for (i=0;iparent->h->buffer->data, &pos, numberOfBits); + + *len = rlen; + + return GRIB_SUCCESS; +} + +static int pack_long (grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_signed_bits* self = (grib_accessor_signed_bits*)a; + int ret = 0; + long off = 0; + long numberOfBits=0; + size_t buflen = 0; + unsigned char *buf = NULL; + unsigned long i = 0; + unsigned long rlen = value_count(a); + + if(*len != rlen) { + ret=grib_set_long(a->parent->h,self->numberOfElements,rlen); + } + + ret=grib_get_long(a->parent->h,self->numberOfBits,&numberOfBits); + if (ret) return ret; + + buflen = compute_byte_count(a); + buf = grib_context_malloc_clear(a->parent->h->context,buflen+sizeof(long)); + + for(i=0; i < rlen;i++) + grib_encode_signed_longb(buf, val[i] , &off, numberOfBits); + + grib_buffer_replace(a, buf, buflen,1,1); + + grib_context_free(a->parent->h->context,buf); + + return ret; + +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_signed_bits* self = (grib_accessor_signed_bits*)a; + int ret; + long numberOfElements; + + ret=grib_get_long(a->parent->h,self->numberOfElements,&numberOfElements); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "%s unable to get %s to compute size",a->name,self->numberOfElements); + return 0; + } + + return numberOfElements; +} + +static long byte_offset(grib_accessor* a){ + return a->offset; +} + +static void update_size(grib_accessor* a,size_t s) +{ + a->length = s; +} + +static long next_offset(grib_accessor* a){ + return byte_offset(a)+byte_count(a); +} + diff --git a/src/grib_accessor_class_simple_packing_error.c b/src/grib_accessor_class_simple_packing_error.c new file mode 100644 index 000000000..9e358add3 --- /dev/null +++ b/src/grib_accessor_class_simple_packing_error.c @@ -0,0 +1,194 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_double + IMPLEMENTS = init + MEMBERS=const char* binaryScaleFactor + MEMBERS=const char* bitsPerValue + MEMBERS=const char* decimalScaleFactor + MEMBERS=const char* referenceValue + MEMBERS=const char* floatType + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_simple_packing_error { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in simple_packing_error */ + const char* binaryScaleFactor; + const char* bitsPerValue; + const char* decimalScaleFactor; + const char* referenceValue; + const char* floatType; +} grib_accessor_simple_packing_error; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_simple_packing_error = { + &grib_accessor_class_double, /* super */ + "simple_packing_error", /* name */ + sizeof(grib_accessor_simple_packing_error), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_simple_packing_error = &_grib_accessor_class_simple_packing_error; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_simple_packing_error* self = (grib_accessor_simple_packing_error*)a; + int n = 0; + + self->bitsPerValue = grib_arguments_get_name(a->parent->h,c,n++); + self->binaryScaleFactor = grib_arguments_get_name(a->parent->h,c,n++); + self->decimalScaleFactor = grib_arguments_get_name(a->parent->h,c,n++); + self->referenceValue = grib_arguments_get_name(a->parent->h,c,n++); + self->floatType = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->length=0; + +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) { + grib_accessor_simple_packing_error* self = (grib_accessor_simple_packing_error*)a; + int ret = 0; + long binaryScaleFactor=0; + long bitsPerValue=0; + long decimalScaleFactor=0; + double referenceValue=0; + + if((ret = grib_get_long_internal(a->parent->h, + self->binaryScaleFactor,&binaryScaleFactor)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(a->parent->h, + self->bitsPerValue,&bitsPerValue)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, + self->decimalScaleFactor,&decimalScaleFactor)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_double_internal(a->parent->h, + self->referenceValue,&referenceValue)) != GRIB_SUCCESS) + return ret; + + if (!strcmp(self->floatType,"ibm")) + *val=grib_ibmfloat_error(referenceValue); + else if (!strcmp(self->floatType,"ieee")) + *val=grib_ieeefloat_error(referenceValue); + else Assert(1==0); + + if (bitsPerValue!=0) + *val=(*val+grib_power(binaryScaleFactor,2))*grib_power(-decimalScaleFactor,10)*0.5; + + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + + + diff --git a/src/grib_accessor_class_size.c b/src/grib_accessor_class_size.c new file mode 100644 index 000000000..258cd5b69 --- /dev/null +++ b/src/grib_accessor_class_size.c @@ -0,0 +1,145 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init + MEMBERS = const char* accessor + END_CLASS_DEF + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_size { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in size */ + const char* accessor; +} grib_accessor_size; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_size = { + &grib_accessor_class_long, /* super */ + "size", /* name */ + sizeof(grib_accessor_size), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_size = &_grib_accessor_class_size; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_size* self = (grib_accessor_size*)a; + self->accessor = grib_arguments_get_name(a->parent->h,c,0); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + size_t size=0; + grib_accessor_size* self = (grib_accessor_size*)a; + ret=grib_get_size(a->parent->h,self->accessor,&size); + *val=(long)size; + *len =1; + return ret; +} + diff --git a/src/grib_accessor_class_spd.c b/src/grib_accessor_class_spd.c new file mode 100644 index 000000000..fb0a29b24 --- /dev/null +++ b/src/grib_accessor_class_spd.c @@ -0,0 +1,275 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump + IMPLEMENTS = next_offset + IMPLEMENTS = byte_count + IMPLEMENTS = value_count + IMPLEMENTS = byte_offset + IMPLEMENTS = update_size + MEMBERS = const char* numberOfBits + MEMBERS = const char* numberOfElements + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static long next_offset(grib_accessor*); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); + +typedef struct grib_accessor_spd { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in spd */ + const char* numberOfBits; + const char* numberOfElements; +} grib_accessor_spd; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_spd = { + &grib_accessor_class_long, /* super */ + "spd", /* name */ + sizeof(grib_accessor_spd), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + &next_offset, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_spd = &_grib_accessor_class_spd; + + +static void init_class(grib_accessor_class* c) +{ + c->string_length = (*(c->super))->string_length; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static long byte_count(grib_accessor* a){ + return a->length; +} + +static long compute_byte_count(grib_accessor* a){ + grib_accessor_spd* self = (grib_accessor_spd*)a; + long numberOfBits; + long numberOfElements; + int ret=0; + + ret=grib_get_long(a->parent->h,self->numberOfBits,&numberOfBits); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "%s unable to get %s to compute size",a->name,self->numberOfBits); + return 0; + } + + ret=grib_get_long(a->parent->h,self->numberOfElements,&numberOfElements); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "%s unable to get %s to compute size",a->name,self->numberOfElements); + return 0; + } + numberOfElements++; + + return (numberOfBits*numberOfElements+7)/8; +} + + +static void init(grib_accessor* a, const long len , grib_arguments* args ) +{ + grib_accessor_spd* self = (grib_accessor_spd*)a; + int n=0; + self->numberOfBits=grib_arguments_get_name(a->parent->h,args,n++); + self->numberOfElements=grib_arguments_get_name(a->parent->h,args,n++); + a->length = compute_byte_count(a); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_spd* self = (grib_accessor_spd*)a; + int i; + int ret=0; + long pos = a->offset*8; + long rlen = value_count(a); + long numberOfBits = 0; + + if(*len < rlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + " wrong size (%ld) for %s it contains %d values ",*len, a->name , rlen); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + ret=grib_get_long(a->parent->h,self->numberOfBits,&numberOfBits); + if (ret) return ret; + + for (i=0;iparent->h->buffer->data, &pos, numberOfBits); + + val[rlen-1] = grib_decode_signed_longb(a->parent->h->buffer->data, &pos, numberOfBits); + + *len = rlen; + + return GRIB_SUCCESS; +} + +static int pack_long (grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_spd* self = (grib_accessor_spd*)a; + int ret = 0; + long off = 0; + long numberOfBits=0; + size_t buflen = 0; + unsigned char *buf = NULL; + unsigned long i = 0; + unsigned long rlen = value_count(a); + + if(*len != rlen) + { + ret=grib_set_long(a->parent->h,self->numberOfElements,(*len)-1); + } + + ret=grib_get_long(a->parent->h,self->numberOfBits,&numberOfBits); + if (ret) return ret; + + buflen = compute_byte_count(a); + buf = grib_context_malloc_clear(a->parent->h->context,buflen); + + for(i=0; i < rlen-1;i++) { + grib_encode_unsigned_longb(buf, val[i] , &off, numberOfBits); + } + + grib_encode_signed_longb(buf, val[rlen-1] , &off, numberOfBits); + + grib_buffer_replace(a, buf, buflen,1,1); + + grib_context_free(a->parent->h->context,buf); + + *len=rlen; + return ret; + +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_spd* self = (grib_accessor_spd*)a; + int ret; + long numberOfElements; + + ret=grib_get_long(a->parent->h,self->numberOfElements,&numberOfElements); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "%s unable to get %s to compute size",a->name,self->numberOfElements); + return 0; + } + numberOfElements++; + + return numberOfElements; +} + +static long byte_offset(grib_accessor* a){ + return a->offset; +} + +static void update_size(grib_accessor* a,size_t s) +{ + a->length = s; +} + +static long next_offset(grib_accessor* a){ + return byte_offset(a)+a->length; +} + diff --git a/src/grib_accessor_class_spectral_truncation.c b/src/grib_accessor_class_spectral_truncation.c new file mode 100644 index 000000000..b3a2dca0a --- /dev/null +++ b/src/grib_accessor_class_spectral_truncation.c @@ -0,0 +1,209 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init + MEMBERS=const char* J + MEMBERS=const char* K + MEMBERS=const char* M + MEMBERS=const char* T + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_spectral_truncation { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in spectral_truncation */ + const char* J; + const char* K; + const char* M; + const char* T; +} grib_accessor_spectral_truncation; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_spectral_truncation = { + &grib_accessor_class_long, /* super */ + "spectral_truncation", /* name */ + sizeof(grib_accessor_spectral_truncation), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_spectral_truncation = &_grib_accessor_class_spectral_truncation; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_spectral_truncation* self = (grib_accessor_spectral_truncation*)a; + int n = 0; + + self->J = grib_arguments_get_name(a->parent->h,c,n++); + self->K = grib_arguments_get_name(a->parent->h,c,n++); + self->M = grib_arguments_get_name(a->parent->h,c,n++); + self->T = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_spectral_truncation* self = (grib_accessor_spectral_truncation*)a; + int ret = 0; + + long J,K,M,T,Tc; + + if(*len < 1) return GRIB_ARRAY_TOO_SMALL; + + if((ret = grib_get_long_internal(a->parent->h, self->J,&J)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->K,&K)) + != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->M,&M)) + != GRIB_SUCCESS) + return ret; + + Tc=-1; + if (J==K && K==M ) { + /* Triangular truncation */ + Tc=(M+1)*(M+2); + } + if (K==J+M ) { + /* Rhomboidal truncation */ + Tc=2*J*M; + } + if (J==K && K > M ) { + /* Trapezoidal truncation */ + Tc=M*(2*J-M); + } + + *val=Tc; + + if((ret = grib_get_long_internal(a->parent->h, self->T,&T)) + != GRIB_SUCCESS) { + + if (Tc == -1) + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "%s. Spectral Truncation Type Unknown: %s=%d %s=%d %s=%d \n", + a->name, self->J,J, self->K,K, self->M,M); + + Tc=0; + grib_set_long(a->parent->h, self->T,Tc); + + } else { + + if (Tc != -1 && Tc != T ) grib_set_long(a->parent->h, self->T,Tc); + + } + + if (ret == GRIB_SUCCESS) *len = 1; + + return ret; +} + diff --git a/src/grib_accessor_class_sprintf.c b/src/grib_accessor_class_sprintf.c new file mode 100644 index 000000000..21feab7dd --- /dev/null +++ b/src/grib_accessor_class_sprintf.c @@ -0,0 +1,248 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_ascii + IMPLEMENTS = pack_string;unpack_string;value_count + IMPLEMENTS = init;string_length + MEMBERS= grib_arguments* args + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static size_t string_length(grib_accessor*); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_sprintf { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in ascii */ +/* Members defined in sprintf */ + grib_arguments* args; +} grib_accessor_sprintf; + +extern grib_accessor_class* grib_accessor_class_ascii; + +static grib_accessor_class _grib_accessor_class_sprintf = { + &grib_accessor_class_ascii, /* super */ + "sprintf", /* name */ + sizeof(grib_accessor_sprintf), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_sprintf = &_grib_accessor_class_sprintf; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_sprintf* self = (grib_accessor_sprintf*)a; + self->args = c; + +} + +static int pack_string(grib_accessor* a, const char* val, size_t *len){ + + return GRIB_NOT_IMPLEMENTED; + +} + + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + grib_accessor_sprintf* self = (grib_accessor_sprintf*)a; + + char result[1024] ; + char sres[1024] ; + long ires = 0; + double dres= 0; + + int i = 0; + size_t replen = 1024; + + int ret = GRIB_SUCCESS; + + int carg= 0; + int is_missing = 0; + const char* uname = NULL; + const char* tempname = NULL; + + + uname = grib_arguments_get_string(a->parent->h,self->args,carg++); + sprintf(result,"%s",""); + + for(i=0;iparent->h,self->args,carg++); + + if((ret = grib_get_long_internal(a->parent->h,tempname,&ires)) != GRIB_SUCCESS) + return ret; + /* Bug GRIB-56: Check to see if the key is missing */ + is_missing = grib_is_missing(a->parent->h,tempname,&ret); + if (ret != GRIB_SUCCESS) + return ret; + if (is_missing) { + sprintf(result, "%sMISSING",result); + } + else { + /* Not missing so print it */ + if (precision!=999) { + sprintf(result,"%s%.*ld",result,precision, ires); + } else { + sprintf(result,"%s%ld",result, ires); + } + } + break; + + case 'g': + tempname = grib_arguments_get_name(a->parent->h,self->args,carg++); + if((ret = grib_get_double_internal(a->parent->h,tempname,&dres)) != GRIB_SUCCESS) + return ret; + sprintf(result,"%s%g",result, dres); + + + break; + + case 's': + tempname = grib_arguments_get_name(a->parent->h,self->args,carg++); + if((ret = grib_get_string_internal(a->parent->h,tempname,sres, &replen )) != GRIB_SUCCESS) + return ret; + sprintf(result,"%s%s",result, sres); + replen = 1024; + + + } + } + else + sprintf(result,"%s%c",result, uname[i]); + + + } + + replen = strlen(result)+1; + + if(*len < replen){ + *len = replen; + return GRIB_ARRAY_TOO_SMALL; + } + *len = replen; + + sprintf(val,"%s",result); + + return GRIB_SUCCESS; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + +static size_t string_length(grib_accessor* a) +{ + return 1024; +} + diff --git a/src/grib_accessor_class_statistics.c b/src/grib_accessor_class_statistics.c new file mode 100644 index 000000000..94357c964 --- /dev/null +++ b/src/grib_accessor_class_statistics.c @@ -0,0 +1,285 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_abstract_vector + IMPLEMENTS = unpack_double; destroy + IMPLEMENTS = unpack_string + IMPLEMENTS = value_count;compare + IMPLEMENTS = init + MEMBERS = const char* values + MEMBERS = const char* missing_value + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_statistics { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in abstract_vector */ + double* v; + int number_of_elements; +/* Members defined in statistics */ + const char* values; + const char* missing_value; +} grib_accessor_statistics; + +extern grib_accessor_class* grib_accessor_class_abstract_vector; + +static grib_accessor_class _grib_accessor_class_statistics = { + &grib_accessor_class_abstract_vector, /* super */ + "statistics", /* name */ + sizeof(grib_accessor_statistics), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_statistics = &_grib_accessor_class_statistics; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_statistics* self = (grib_accessor_statistics*)a; + int n = 0; + + self->missing_value = grib_arguments_get_name(a->parent->h,c,n++); + self->values = grib_arguments_get_name(a->parent->h,c,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + + self->number_of_elements=8; + self->v=(double*)grib_context_malloc(a->parent->h->context, + sizeof(double)*self->number_of_elements); + + a->length=0; + a->dirty=1; +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_statistics* self = (grib_accessor_statistics*)a; + int ret = 0,i=0; + double* values; + size_t size=0; + double max,min,avg,sd,value,skew,kurt,x; + double missing=0; + long number_of_missing=0; + grib_context* c=a->parent->h->context; + grib_handle* h=a->parent->h; + + if (!a->dirty) return GRIB_SUCCESS; + + if ( (ret=grib_get_size(h,self->values,&size)) != GRIB_SUCCESS) return ret; + + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, + "grib_accessor_statistics: computing statistics for %d values",size); + + if((ret=grib_get_double(a->parent->h,self->missing_value,&missing)) + != GRIB_SUCCESS) return ret; + + values=(double*)grib_context_malloc_clear(c,size*sizeof(double)); + if (!values) return GRIB_OUT_OF_MEMORY; + + if((ret = grib_get_double_array_internal(h,self->values,values,&size)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + number_of_missing=0; + i=0; + while (i max && value != missing) max=value; + if (value < min && value != missing) min=value; + if (value != missing) avg+=value; + else number_of_missing++; + } + + avg/=(size-number_of_missing); + + sd=0; skew=0; kurt=0; + for (i=0;idirty=0; + + grib_context_free(c,values); + + self->v[0]=max; + self->v[1]=min; + self->v[2]=avg; + self->v[3]=number_of_missing; + self->v[4]=sd; + self->v[5]=skew; + self->v[6]=kurt; + self->v[7]= sd == 0 ? 1 : 0; + + for (i=0;inumber_of_elements;i++) + val[i]=self->v[i]; + + return ret; +} + +static long value_count(grib_accessor* a) { + grib_accessor_statistics* self = (grib_accessor_statistics*)a; + return self->number_of_elements; +} + +static void destroy(grib_context* c,grib_accessor* a) +{ + grib_accessor_statistics* self = (grib_accessor_statistics*)a; + grib_context_free(c,self->v); +} + +static int compare(grib_accessor* a, grib_accessor* b) { + int retval=0; + double *aval=0; + double *bval=0; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + aval=grib_context_malloc(a->parent->h->context,alen*sizeof(double)); + bval=grib_context_malloc(b->parent->h->context,blen*sizeof(double)); + + b->dirty=1; + a->dirty=1; + + grib_unpack_double(a,aval,&alen); + grib_unpack_double(b,bval,&blen); + + retval = GRIB_SUCCESS; + while (alen != 0) { + if (*bval != *aval) retval = GRIB_DOUBLE_VALUE_MISMATCH; + alen--; + } + + grib_context_free(a->parent->h->context,aval); + grib_context_free(b->parent->h->context,bval); + + return GRIB_SUCCESS; +} + +static int unpack_string(grib_accessor*a , char* v, size_t *len){ + return GRIB_NOT_IMPLEMENTED; +} + + diff --git a/src/grib_accessor_class_statistics_spectral.c b/src/grib_accessor_class_statistics_spectral.c new file mode 100644 index 000000000..e8cd99102 --- /dev/null +++ b/src/grib_accessor_class_statistics_spectral.c @@ -0,0 +1,283 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_abstract_vector + IMPLEMENTS = unpack_double; destroy + IMPLEMENTS = value_count;compare + IMPLEMENTS = init + MEMBERS = const char* values + MEMBERS = const char* J + MEMBERS = const char* K + MEMBERS = const char* M + MEMBERS = const char* JS + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_statistics_spectral { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in abstract_vector */ + double* v; + int number_of_elements; +/* Members defined in statistics_spectral */ + const char* values; + const char* J; + const char* K; + const char* M; + const char* JS; +} grib_accessor_statistics_spectral; + +extern grib_accessor_class* grib_accessor_class_abstract_vector; + +static grib_accessor_class _grib_accessor_class_statistics_spectral = { + &grib_accessor_class_abstract_vector, /* super */ + "statistics_spectral", /* name */ + sizeof(grib_accessor_statistics_spectral), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_statistics_spectral = &_grib_accessor_class_statistics_spectral; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_statistics_spectral* self = (grib_accessor_statistics_spectral*)a; + int n = 0; + + self->values = grib_arguments_get_name(a->parent->h,c,n++); + self->J = grib_arguments_get_name(a->parent->h,c,n++); + self->K = grib_arguments_get_name(a->parent->h,c,n++); + self->M = grib_arguments_get_name(a->parent->h,c,n++); + self->JS = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + + self->number_of_elements=4; + self->v=(double*)grib_context_malloc(a->parent->h->context, + sizeof(double)*self->number_of_elements); + + a->length=0; + a->dirty=1; +} + + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_statistics_spectral* self = (grib_accessor_statistics_spectral*)a; + int ret = 0,i=0; + double* values; + size_t size=0; + long J,K,M,N; + double avg,enorm,sd; + grib_context* c=a->parent->h->context; + grib_handle* h=a->parent->h; + + if (!a->dirty) return GRIB_SUCCESS; + + if ( (ret=grib_get_size(h,self->values,&size)) != GRIB_SUCCESS) return ret; + + if((ret=grib_get_long(a->parent->h,self->J,&J)) + != GRIB_SUCCESS) return ret; + + if((ret=grib_get_long(a->parent->h,self->K,&K)) + != GRIB_SUCCESS) return ret; + + if((ret=grib_get_long(a->parent->h,self->M,&M)) + != GRIB_SUCCESS) return ret; + + if (J != M || M != K) return GRIB_NOT_IMPLEMENTED; + + N=(M+1)*(M+2)/2; + + if (2*N != size) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "wrong number of components for spherical harmonics %ld != %ld",2*N,size); + return GRIB_WRONG_ARRAY_SIZE; + } + + values=(double*)grib_context_malloc(c,size*sizeof(double)); + if (!values) return GRIB_OUT_OF_MEMORY; + + if((ret = grib_get_double_array_internal(h,self->values,values,&size)) + != GRIB_SUCCESS) { + grib_context_free(c,values); + return ret; + } + + avg=values[0]; + enorm=0; + sd=0; + + for (i=2; i < 2*J ; i+=2) + sd += values[i]*values[i]; + + for (i= 2*J; i < size; i+=2) + sd += values[i]*values[i] - values[i+1]*values[i+1]; + + enorm=sd+avg*avg; + + sd=sqrt(sd); + enorm=sqrt(enorm); + + a->dirty=0; + + grib_context_free(c,values); + + self->v[0]=avg; + self->v[1]=enorm; + self->v[2]=sd; + self->v[3]= sd == 0 ? 1 : 0; + + for (i=0;inumber_of_elements;i++) + val[i]=self->v[i]; + + return ret; +} + +static long value_count(grib_accessor* a) { + grib_accessor_statistics_spectral* self = (grib_accessor_statistics_spectral*)a; + return self->number_of_elements; +} + +static void destroy(grib_context* c,grib_accessor* a) +{ + grib_accessor_statistics_spectral* self = (grib_accessor_statistics_spectral*)a; + grib_context_free(c,self->v); +} + +static int compare(grib_accessor* a, grib_accessor* b) { + int retval=0; + double *aval=0; + double *bval=0; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + aval=grib_context_malloc(a->parent->h->context,alen*sizeof(double)); + bval=grib_context_malloc(b->parent->h->context,blen*sizeof(double)); + + b->dirty=1; + a->dirty=1; + + grib_unpack_double(a,aval,&alen); + grib_unpack_double(b,bval,&blen); + + retval = GRIB_SUCCESS; + while (alen != 0) { + if (*bval != *aval) retval = GRIB_DOUBLE_VALUE_MISMATCH; + alen--; + } + + grib_context_free(a->parent->h->context,aval); + grib_context_free(b->parent->h->context,bval); + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_accessor_class_step_in_units.c b/src/grib_accessor_class_step_in_units.c new file mode 100644 index 000000000..448acee17 --- /dev/null +++ b/src/grib_accessor_class_step_in_units.c @@ -0,0 +1,274 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump + MEMBERS = const char* codedStep + MEMBERS = const char* codedUnits + MEMBERS = const char* stepUnits + MEMBERS = const char* indicatorOfUnitForTimeRange + MEMBERS = const char* lengthOfTimeRange + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_step_in_units { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in step_in_units */ + const char* codedStep; + const char* codedUnits; + const char* stepUnits; + const char* indicatorOfUnitForTimeRange; + const char* lengthOfTimeRange; +} grib_accessor_step_in_units; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_step_in_units = { + &grib_accessor_class_long, /* super */ + "step_in_units", /* name */ + sizeof(grib_accessor_step_in_units), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_step_in_units = &_grib_accessor_class_step_in_units; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_step_in_units* self = (grib_accessor_step_in_units*)a; + int n = 0; + + self->codedStep = grib_arguments_get_name(a->parent->h,c,n++); + self->codedUnits = grib_arguments_get_name(a->parent->h,c,n++); + self->stepUnits = grib_arguments_get_name(a->parent->h,c,n++); + self->indicatorOfUnitForTimeRange = grib_arguments_get_name(a->parent->h,c,n++); + self->lengthOfTimeRange = grib_arguments_get_name(a->parent->h,c,n++); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_double(dumper,a,NULL); + +} + +/* Conversion of to seconds - Grib edition 2 table 4.4 */ +static int u2s2[] = { + 60, /* (0) minutes */ + 3600, /* (1) hour */ + 86400, /* (2) day */ + 2592000, /* (3) month */ + -1, /* (4) year */ + -1, /* (5) decade */ + -1, /* (6) 30 years */ + -1, /* (7) century */ + -1, /* (8) RESERVED */ + -1, /* (9) RESERVED */ + 10800, /* (10) 3 hours */ + 21600, /* (11) 6 hours */ + 43200, /* (12) 12 hours */ + 1 /* (13) seconds */ +}; + +/* Note: 'stepUnits' has a different table with extra entries e.g. 15 and 30 mins */ +static int u2s[] = { + 60, /* (0) minutes */ + 3600, /* (1) hour */ + 86400, /* (2) day */ + 2592000, /* (3) month */ + -1, /* (4) year */ + -1, /* (5) decade */ + -1, /* (6) 30 years */ + -1, /* (7) century */ + -1, /* (8) */ + -1, /* (9) */ + 10800, /* (10) 3 hours */ + 21600, /* (11) 6 hours */ + 43200, /* (12) 12 hours */ + 1, /* (13) seconds */ + 900, /* (14) 15 minutes */ + 1800 /* (15) 30 minutes */ +}; + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_step_in_units* self = (grib_accessor_step_in_units*)a; + int err = 0; + long codedStep,codedUnits,stepUnits; + grib_handle* h=a->parent->h; + int factor=0; + long u2sf,u2sf_step_unit; + + + if((err = grib_get_long_internal(h,self->codedUnits,&codedUnits))) return err; + if((err = grib_get_long_internal(h,self->stepUnits,&stepUnits))) return err; + if((err = grib_get_long_internal(h,self->codedStep,&codedStep))) return err; + + if (stepUnits!=codedUnits) { + *val=codedStep*u2s2[codedUnits]; + if (*val<0) { + factor=60; + if (u2s2[codedUnits] % factor) return GRIB_DECODING_ERROR; + if (u2s[stepUnits] % factor) return GRIB_DECODING_ERROR; + u2sf=u2s2[codedUnits]/factor; + *val=codedStep*u2sf; + u2sf_step_unit=u2s[stepUnits]/factor; + } else { + u2sf_step_unit=u2s[stepUnits]; + } + + if (*val % u2sf_step_unit!=0) { + err = grib_set_long_internal(h,self->stepUnits,codedUnits); + *val=codedStep; + return err; + } + *val = *val / u2sf_step_unit; + } else *val=codedStep; + + return GRIB_SUCCESS; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_step_in_units* self = (grib_accessor_step_in_units*)a; + grib_handle* h=a->parent->h; + int err = 0; + long codedStep,codedUnits,stepUnits; + long oldStep=0; + long indicatorOfUnitForTimeRange,lengthOfTimeRange; + + if((err = grib_get_long_internal(h,self->codedUnits,&codedUnits))) return err; + if((err = grib_get_long_internal(h,self->stepUnits,&stepUnits))) return err; + + unpack_long(a,&oldStep,len); + + if (stepUnits!=codedUnits) { + codedStep=*val * u2s[stepUnits]; + if (codedStep%u2s2[codedUnits]!=0) { + codedUnits=stepUnits; + err = grib_set_long_internal(h,self->codedUnits,codedUnits); + if (err!=GRIB_SUCCESS) return err; + codedStep=*val; + } + else { + codedStep = codedStep / u2s2[codedUnits]; + } + } + else { + codedStep = *val; + } + + if (self->indicatorOfUnitForTimeRange) { + if((err = grib_get_long_internal(h, + self->indicatorOfUnitForTimeRange,&indicatorOfUnitForTimeRange))) return err; + if((err = grib_get_long_internal(h, + self->lengthOfTimeRange,&lengthOfTimeRange))) return err; + if (codedUnits == indicatorOfUnitForTimeRange ) + lengthOfTimeRange-=codedStep-oldStep; + else lengthOfTimeRange-=codedStep * u2s2[codedUnits]/u2s2[indicatorOfUnitForTimeRange]; + lengthOfTimeRange = lengthOfTimeRange > 0 ? lengthOfTimeRange : 0 ; + err = grib_set_long_internal(a->parent->h,self->lengthOfTimeRange,lengthOfTimeRange); + if (err!=GRIB_SUCCESS) return err; + } + + return grib_set_long_internal(a->parent->h,self->codedStep,codedStep); +} diff --git a/src/grib_accessor_class_sum.c b/src/grib_accessor_class_sum.c new file mode 100644 index 000000000..b877cb613 --- /dev/null +++ b/src/grib_accessor_class_sum.c @@ -0,0 +1,212 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_double + IMPLEMENTS = unpack_long + IMPLEMENTS = unpack_double + IMPLEMENTS = value_count + IMPLEMENTS = init + MEMBERS=const char* values + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_sum { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in sum */ + const char* values; +} grib_accessor_sum; + +extern grib_accessor_class* grib_accessor_class_double; + +static grib_accessor_class _grib_accessor_class_sum = { + &grib_accessor_class_double, /* super */ + "sum", /* name */ + sizeof(grib_accessor_sum), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_sum = &_grib_accessor_class_sum; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_sum* self = (grib_accessor_sum*)a; + int n = 0; + self->values = grib_arguments_get_name(a->parent->h,c,n++); + a->length=0; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_sum* self = (grib_accessor_sum*)a; + int ret = 0; + size_t size=0; + long* values=0; + long i; + + size=value_count(a); + if (size==0) { + *val=0; + return ret; + } + values=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*size); + if (!values) return GRIB_OUT_OF_MEMORY; + + grib_get_long_array(a->parent->h,self->values,values,&size); + + *val=0; + for (i=0;iparent->h->context,values); + + return ret; +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_sum* self = (grib_accessor_sum*)a; + int ret = 0; + size_t size=0; + double* values=0; + long i; + + size=value_count(a); + if (size==0) { + *val=0; + return ret; + } + values=grib_context_malloc_clear(a->parent->h->context,sizeof(double)*size); + if (!values) return GRIB_OUT_OF_MEMORY; + + grib_get_double_array(a->parent->h,self->values,values,&size); + + *val=0; + for (i=0;iparent->h->context,values); + + return ret; +} + + +static long value_count(grib_accessor* a) +{ + grib_accessor_sum* self = (grib_accessor_sum*)a; + size_t n=0; + int ret=0; + ret = grib_get_size(a->parent->h, self->values,&n); + + if (ret) + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "%s is unable to get size of %s",a->name,self->values); + + return n; + +} diff --git a/src/grib_accessor_class_suppressed.c b/src/grib_accessor_class_suppressed.c new file mode 100644 index 000000000..1a405adbc --- /dev/null +++ b/src/grib_accessor_class_suppressed.c @@ -0,0 +1,201 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = value_count;get_native_type + IMPLEMENTS = pack_string;unpack_string + IMPLEMENTS = pack_long;unpack_long + IMPLEMENTS = pack_double;unpack_double + IMPLEMENTS = init + MEMBERS= grib_arguments* args + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_suppressed { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in suppressed */ + grib_arguments* args; +} grib_accessor_suppressed; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_suppressed = { + &grib_accessor_class_long, /* super */ + "suppressed", /* name */ + sizeof(grib_accessor_suppressed), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_suppressed = &_grib_accessor_class_suppressed; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_suppressed* self = (grib_accessor_suppressed*)a; + self->args = c; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static void log_message(grib_accessor* a) { + grib_accessor_suppressed* self = (grib_accessor_suppressed*)a; + int i=0; + + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "key %s is unvailable in this version.",a->name); + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "Please use the following keys:"); + while (grib_arguments_get_name(a->parent->h,self->args,i)) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "\t- %s", + grib_arguments_get_name(a->parent->h,self->args,i)); + i++; + } +} + +static int pack_string(grib_accessor* a, const char* val, size_t *len){ + + log_message(a); + return GRIB_NOT_IMPLEMENTED; + +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len){ + + log_message(a); + return GRIB_NOT_IMPLEMENTED; + +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len){ + + log_message(a); + return GRIB_NOT_IMPLEMENTED; + +} + + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + /*log_message(a);*/ + return GRIB_NOT_IMPLEMENTED; +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + log_message(a); + return GRIB_NOT_IMPLEMENTED; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + log_message(a); + return GRIB_NOT_IMPLEMENTED; +} + + +static long value_count(grib_accessor* a) { return 1; } + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_STRING; +} + diff --git a/src/grib_accessor_class_time.c b/src/grib_accessor_class_time.c new file mode 100644 index 000000000..4243da03e --- /dev/null +++ b/src/grib_accessor_class_time.c @@ -0,0 +1,230 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = unpack_string + IMPLEMENTS = init;dump + MEMBERS=const char* hour + MEMBERS=const char* minute + MEMBERS=const char* second + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_time { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in time */ + const char* hour; + const char* minute; + const char* second; +} grib_accessor_time; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_time = { + &grib_accessor_class_long, /* super */ + "time", /* name */ + sizeof(grib_accessor_time), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_time = &_grib_accessor_class_time; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_time* self = (grib_accessor_time*)a; + int n = 0; + + self->hour = grib_arguments_get_name(a->parent->h,c,n++); + self->minute = grib_arguments_get_name(a->parent->h,c,n++); + self->second = grib_arguments_get_name(a->parent->h,c,n++); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + int ret=0; + grib_accessor_time* self = (grib_accessor_time*)a; + + long hour = 0; + long minute = 0; + long second = 0; + + if ((ret=grib_get_long_internal(a->parent->h, self->hour,&hour))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->minute,&minute))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->second,&second))!=GRIB_SUCCESS) + return ret; + + Assert(second == 0); + + if(*len < 1) + return GRIB_WRONG_ARRAY_SIZE; + + *val = hour*100 + minute; + + if(hour == 255) + *val = 12*100; + + if(hour != 255 && minute == 255) + *val = hour*100; + + return GRIB_SUCCESS; +} + +/* TODO: Check for a valid date */ + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + int ret=0; + long v = val[0]; + grib_accessor_time* self = (grib_accessor_time*)a; + + long hour = 0; + long minute = 0; + long second = 0; + + if(*len != 1) + return GRIB_WRONG_ARRAY_SIZE; + + hour = v / 100; + minute = v % 100; + second = 0; + + if ((ret=grib_set_long_internal(a->parent->h,self->hour,hour))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_set_long_internal(a->parent->h,self->minute,minute))!=GRIB_SUCCESS) + return ret; + if ((ret=grib_set_long_internal(a->parent->h,self->second,second))!=GRIB_SUCCESS) + return ret; + + return GRIB_SUCCESS; +} + +static int unpack_string(grib_accessor* a, char* val, size_t *len) +{ + + long v = 0; + size_t lsize = 1; + + unpack_long(a, &v, &lsize); + + if(*len < 5) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "grib_accessor_time : unpack_string : Buffer too small for %s ", a->name ); + + *len = 5; + return GRIB_BUFFER_TOO_SMALL; + } + + + sprintf(val,"%04ld",v); + + len[0] = 5; + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_times.c b/src/grib_accessor_class_times.c new file mode 100755 index 000000000..5a7685d56 --- /dev/null +++ b/src/grib_accessor_class_times.c @@ -0,0 +1,215 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_unsigned + IMPLEMENTS = unpack_long;pack_long; value_count + IMPLEMENTS = init + MEMBERS= const char* value + MEMBERS= const char* factor + MEMBERS= const char* divisor + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long value_count(grib_accessor*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_times { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +/* Members defined in times */ + const char* value; + const char* factor; + const char* divisor; +} grib_accessor_times; + +extern grib_accessor_class* grib_accessor_class_unsigned; + +static grib_accessor_class _grib_accessor_class_times = { + &grib_accessor_class_unsigned, /* super */ + "times", /* name */ + sizeof(grib_accessor_times), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_times = &_grib_accessor_class_times; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_times* self = (grib_accessor_times*)a; + int n = 0; + + self->value = grib_arguments_get_name(a->parent->h,c,n++); + self->factor = grib_arguments_get_name(a->parent->h,c,n++); + self->divisor = grib_arguments_get_name(a->parent->h,c,n++); + a->length=0; +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_times* self = (grib_accessor_times*)a; + int ret = 0; + long factor=0; + long divisor=1; + int *err=&ret; + long value = 0; + + if(*len < 1) + return GRIB_ARRAY_TOO_SMALL; + + if (grib_is_missing(a->parent->h,self->value,err)!=0) { + *val=GRIB_MISSING_LONG; + return GRIB_SUCCESS; + } + if(ret ) return ret; + + ret = grib_get_long_internal(a->parent->h, self->factor,&factor); + if(ret ) return ret; + if (self->divisor) + ret = grib_get_long_internal(a->parent->h, self->divisor,&divisor); + if(ret ) return ret; + ret = grib_get_long_internal(a->parent->h, self->value,&value); + if(ret ) return ret; + /* printf("factor=%ld divisor=%ld value=%ld\n",factor,divisor,value); */ + + *val =( (double)value * (double)factor) / (double)divisor; + + *len = 1; + + return ret; +} + + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_times* self = (grib_accessor_times*)a; + int ret = 0; + long value = 0; + long factor,v,divisor=1; + + if (*val==GRIB_MISSING_LONG) + return grib_set_missing(a->parent->h,self->value); + + ret = grib_get_long_internal(a->parent->h, self->factor,&factor); + if(ret ) return ret; + if (self->divisor) + ret = grib_get_long_internal(a->parent->h, self->divisor,&divisor); + if(ret ) return ret; + + /*Assert((*val%self->factor)==0);*/ + v=*val*divisor; + if ((v%factor)==0) { + value = v/factor; + } else { + value = v > 0 ? ((double)v)/factor+0.5 : + ((double)v)/factor-0.5; + /* grib_context_log(a->parent->h->context,GRIB_LOG_WARNING,"%s/%ld = %ld/%ld = %ld. Rounding to convert key.",a->name,self->factor,*val,self->factor,value); */ + } + + ret = grib_set_long_internal(a->parent->h, self->value,value); + if(ret ) return ret; + + *len = 1; + + return ret; +} + +static long value_count(grib_accessor* a) { return 1;} + diff --git a/src/grib_accessor_class_transient.c b/src/grib_accessor_class_transient.c new file mode 100644 index 000000000..f13beb6cf --- /dev/null +++ b/src/grib_accessor_class_transient.c @@ -0,0 +1,124 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_variable + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_transient { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in variable */ + double dval; + char* cval; + int type; +/* Members defined in transient */ +} grib_accessor_transient; + +extern grib_accessor_class* grib_accessor_class_variable; + +static grib_accessor_class _grib_accessor_class_transient = { + &grib_accessor_class_variable, /* super */ + "transient", /* name */ + sizeof(grib_accessor_transient), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_transient = &_grib_accessor_class_transient; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ diff --git a/src/grib_accessor_class_unsigned.c b/src/grib_accessor_class_unsigned.c new file mode 100644 index 000000000..3025e58ad --- /dev/null +++ b/src/grib_accessor_class_unsigned.c @@ -0,0 +1,340 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump;is_missing + IMPLEMENTS = next_offset + IMPLEMENTS = byte_count + IMPLEMENTS = value_count + IMPLEMENTS = byte_offset + IMPLEMENTS = update_size; destroy + MEMBERS = long nbytes + MEMBERS = grib_arguments* arg + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int is_missing(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static long next_offset(grib_accessor*); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); + +typedef struct grib_accessor_unsigned { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned */ + long nbytes; + grib_arguments* arg; +} grib_accessor_unsigned; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_unsigned = { + &grib_accessor_class_long, /* super */ + "unsigned", /* name */ + sizeof(grib_accessor_unsigned), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + &dump, /* describes himself */ + &next_offset, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + &is_missing, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_unsigned = &_grib_accessor_class_unsigned; + + +static void init_class(grib_accessor_class* c) +{ + c->string_length = (*(c->super))->string_length; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + + +static void init(grib_accessor* a, const long len , grib_arguments* arg ) +{ + grib_accessor_unsigned* self = (grib_accessor_unsigned*)a; + self->arg = NULL; + self->arg = arg; + self->nbytes = len; + + if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { + a->length=0; + if (!a->vvalue) + a->vvalue=grib_context_malloc_clear(a->parent->h->context,sizeof(grib_virtual_value)); + a->vvalue->type=GRIB_TYPE_LONG; + a->vvalue->length=len; + } else { + a->length = len*grib_value_count(a); + a->vvalue=NULL; + } + +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + long rlen = grib_value_count(a); + if(rlen == 1) + grib_dump_long(dumper,a,NULL); + else + grib_dump_values(dumper,a); +} + +static unsigned long ones[] = { + 0, + 0xff, + 0xffff, + 0xffffff, + 0xffffffff, +}; + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_unsigned* self = (grib_accessor_unsigned*)a; + unsigned long rlen = grib_value_count(a); + unsigned long i = 0; + unsigned long missing = 0; + long pos = a->offset*8; + + if(*len < rlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " wrong size (%ld) for %s it contains %d values ",*len, a->name , rlen); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { + *val=a->vvalue->lval; + *len=1; + return GRIB_SUCCESS; + } + + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + { + Assert(self->nbytes <= 4); + missing = ones[self->nbytes]; + } + + for(i=0; i< rlen;i++){ + val[i] = (long)grib_decode_unsigned_long(a->parent->h->buffer->data , &pos, self->nbytes*8); + if(missing) + if(val[i] == missing) + val[i] = GRIB_MISSING_LONG; + } + + *len = rlen; + return GRIB_SUCCESS; +} + +static int pack_long (grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_unsigned* self = (grib_accessor_unsigned*)a; + int ret = 0; + long off = 0; + unsigned long rlen = grib_value_count(a); + size_t buflen = 0; + unsigned char *buf = NULL; + unsigned long i = 0; + unsigned long missing = 0; + + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + { + Assert(self->nbytes <= 4); + missing = ones[self->nbytes]; + } + + if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { + a->vvalue->lval=val[0]; + + if(missing && val[0] == GRIB_MISSING_LONG) + a->vvalue->missing=1; + else + a->vvalue->missing=0; + + return GRIB_SUCCESS; + } + + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + len[0] = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + + if (rlen == 1){ + long v = val[0]; +#if 1 + if(missing) + if(v == GRIB_MISSING_LONG) + v = missing; +#endif + off = a->offset*8; + ret = grib_encode_unsigned_long(a->parent->h->buffer->data, v , &off, self->nbytes*8); + if (ret == GRIB_SUCCESS) len[0] = 1; + if (*len > 1) grib_context_log(a->parent->h->context, GRIB_LOG_WARNING, "grib_accessor_unsigned : Trying to pack %d values in a scalar %s, packing first value", *len, a->name ); + len[0] = 1; + return ret; + } + + + /* TODO: We assume that there are no missing values if there are more that 1 value */ + + + buflen = *len*self->nbytes; + + buf = grib_context_malloc(a->parent->h->context,buflen); + + for(i=0; i < *len;i++) + grib_encode_unsigned_long(buf, val[i] , &off, self->nbytes*8); + + ret = grib_set_long_internal(a->parent->h,grib_arguments_get_name(a->parent->h,self->arg,0),*len); + + if(ret == GRIB_SUCCESS) + grib_buffer_replace(a, buf, buflen,1,1); + else + *len = 0; + + grib_context_free(a->parent->h->context,buf); + return ret; + +} + +static long byte_count(grib_accessor* a){ + return a->length; +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_unsigned* self = (grib_accessor_unsigned*)a; + long len = 0; + int ret =0; + if(!self->arg) return 1; + ret = grib_get_long_internal(a->parent->h,grib_arguments_get_name(a->parent->h,self->arg,0),&len); + if(ret == GRIB_SUCCESS) return len; + return 1; +} + +static long byte_offset(grib_accessor* a){ + return a->offset; +} +static void update_size(grib_accessor* a,size_t s) +{ + a->length = s; +} + +static long next_offset(grib_accessor* a){ + return grib_byte_offset(a)+grib_byte_count(a); +} + +static int is_missing(grib_accessor* a){ + int i=0; + unsigned char ff=0xff; + unsigned long offset=a->offset; + + if (a->length==0) { + Assert(a->vvalue!=NULL); + return a->vvalue->missing; + } + + for (i=0;ilength;i++) { + if (a->parent->h->buffer->data[offset] != ff) { + return 0; + } + offset++; + } + return 1; +} + + +static void destroy(grib_context* context,grib_accessor* a) +{ + if (a->vvalue != NULL) + grib_context_free(context, a->vvalue); + + a->vvalue=NULL; +} + diff --git a/src/grib_accessor_class_unsigned_bits.c b/src/grib_accessor_class_unsigned_bits.c new file mode 100644 index 000000000..1b665a06d --- /dev/null +++ b/src/grib_accessor_class_unsigned_bits.c @@ -0,0 +1,280 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long;pack_long + IMPLEMENTS = init;dump + IMPLEMENTS = next_offset + IMPLEMENTS = byte_count + IMPLEMENTS = value_count + IMPLEMENTS = byte_offset + IMPLEMENTS = update_size + MEMBERS = const char* numberOfBits + MEMBERS = const char* numberOfElements + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static long next_offset(grib_accessor*); +static long value_count(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); + +typedef struct grib_accessor_unsigned_bits { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in unsigned_bits */ + const char* numberOfBits; + const char* numberOfElements; +} grib_accessor_unsigned_bits; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_unsigned_bits = { + &grib_accessor_class_long, /* super */ + "unsigned_bits", /* name */ + sizeof(grib_accessor_unsigned_bits), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + &next_offset, /* get length of section */ + 0, /* get length of string */ + &value_count, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_unsigned_bits = &_grib_accessor_class_unsigned_bits; + + +static void init_class(grib_accessor_class* c) +{ + c->string_length = (*(c->super))->string_length; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + + +static long compute_byte_count(grib_accessor* a){ + grib_accessor_unsigned_bits* self = (grib_accessor_unsigned_bits*)a; + long numberOfBits; + long numberOfElements; + int ret=0; + + ret=grib_get_long(a->parent->h,self->numberOfBits,&numberOfBits); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "%s unable to get %s to compute size",a->name,self->numberOfBits); + return 0; + } + + ret=grib_get_long(a->parent->h,self->numberOfElements,&numberOfElements); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "%s unable to get %s to compute size",a->name,self->numberOfElements); + return 0; + } + + return (numberOfBits*numberOfElements+7)/8; +} + + +static void init(grib_accessor* a, const long len , grib_arguments* args ) +{ + grib_accessor_unsigned_bits* self = (grib_accessor_unsigned_bits*)a; + int n=0; + self->numberOfBits=grib_arguments_get_name(a->parent->h,args,n++); + self->numberOfElements=grib_arguments_get_name(a->parent->h,args,n++); + a->length = compute_byte_count(a); +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long (grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_unsigned_bits* self = (grib_accessor_unsigned_bits*)a; + int ret=0; + long pos = a->offset*8; + long rlen = value_count(a); + long numberOfBits = 0; + + if(*len < rlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + " wrong size (%ld) for %s it contains %d values ",*len, a->name , rlen); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + + ret=grib_get_long(a->parent->h,self->numberOfBits,&numberOfBits); + if (ret) return ret; + if (numberOfBits==0) { + int i; + for (i=0;iparent->h->buffer->data,&pos,numberOfBits,rlen,val); + + *len = rlen; + + return GRIB_SUCCESS; +} + +static int pack_long (grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_unsigned_bits* self = (grib_accessor_unsigned_bits*)a; + int ret = 0; + long off = 0; + long numberOfBits=0; + size_t buflen = 0; + unsigned char *buf = NULL; + unsigned long i = 0; + unsigned long rlen = value_count(a); + + /* + if(*len < rlen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, + "Wrong size for %s it contains %d values ", a->name , rlen ); + return GRIB_ARRAY_TOO_SMALL; + } + */ + if (*len!=rlen) + ret=grib_set_long(a->parent->h,self->numberOfElements,*len); + + ret=grib_get_long(a->parent->h,self->numberOfBits,&numberOfBits); + if (ret) return ret; + if (numberOfBits==0) { + grib_buffer_replace(a, NULL, 0,1,1); + return GRIB_SUCCESS; + } + + buflen = compute_byte_count(a); + buf = grib_context_malloc_clear(a->parent->h->context,buflen+sizeof(long)); + + for(i=0; i < *len;i++) + grib_encode_unsigned_longb(buf, val[i] , &off, numberOfBits); + + grib_buffer_replace(a, buf, buflen,1,1); + + grib_context_free(a->parent->h->context,buf); + + return ret; + +} + +static long byte_count(grib_accessor* a){ + return a->length; +} + +static long value_count(grib_accessor* a) +{ + grib_accessor_unsigned_bits* self = (grib_accessor_unsigned_bits*)a; + int ret; + long numberOfElements; + + ret=grib_get_long(a->parent->h,self->numberOfElements,&numberOfElements); + if (ret) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR, + "%s unable to get %s to compute size",a->name,self->numberOfElements); + return 0; + } + + return numberOfElements; +} + +static long byte_offset(grib_accessor* a){ + return a->offset; +} + +static void update_size(grib_accessor* a,size_t s) +{ + a->length = s; +} + +static long next_offset(grib_accessor* a){ + return byte_offset(a)+a->length; +} + diff --git a/src/grib_accessor_class_validity_date.c b/src/grib_accessor_class_validity_date.c new file mode 100644 index 000000000..bdafb3670 --- /dev/null +++ b/src/grib_accessor_class_validity_date.c @@ -0,0 +1,239 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init;dump + MEMBERS=const char* date + MEMBERS=const char* time + MEMBERS=const char* step + MEMBERS=const char* stepUnits + MEMBERS=const char* year + MEMBERS=const char* month + MEMBERS=const char* day + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_validity_date { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in validity_date */ + const char* date; + const char* time; + const char* step; + const char* stepUnits; + const char* year; + const char* month; + const char* day; +} grib_accessor_validity_date; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_validity_date = { + &grib_accessor_class_long, /* super */ + "validity_date", /* name */ + sizeof(grib_accessor_validity_date), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_validity_date = &_grib_accessor_class_validity_date; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +/* Table of multipliers to convert step units to minutes */ +static double u2m[] = { + 1, /* index 0: minutes */ + 60, /* index 1: hour */ + 24*60, /* index 2: day */ + 24*60*30, /* index 3: month */ + -1, /* index 4: year */ + -1, /* index 5: decade */ + -1, /* index 6: 30 years */ + -1, /* index 7: century */ + -1, /* index 8: RESERVED */ + -1, /* index 9: RESERVED */ + 3*60, /* index 10: 3 hours */ + 6*60, /* index 11: 6 hours */ + 12*60, /* index 12: 12 hours */ + 1/60.0, /* index 13: seconds */ + 15, /* index 14: 15 mins */ + 30 /* index 15: 30 mins */ +}; + +static long convert_to_minutes(long step, long stepUnits) +{ + if (stepUnits == 0) return step; /* unit=minutes so no change */ + if (stepUnits == 1) return step*60; /* unit=hours */ + /* Assert( stepUnits < sizeof(u2m)/sizeof(u2m[0]) ); */ + + return (long) (step*u2m[stepUnits]); +} + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_validity_date* self = (grib_accessor_validity_date*)a; + int n = 0; + + self->date = grib_arguments_get_name(a->parent->h,c,n++); + self->time = grib_arguments_get_name(a->parent->h,c,n++); + self->step = grib_arguments_get_name(a->parent->h,c,n++); + self->stepUnits = grib_arguments_get_name(a->parent->h,c,n++); + self->year = grib_arguments_get_name(a->parent->h,c,n++); + self->month = grib_arguments_get_name(a->parent->h,c,n++); + self->day = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_validity_date* self = (grib_accessor_validity_date*)a; + int ret=0; + long date = 0; + long time = 0; + long step = 0; + long stepUnits = 0; + long hours = 0, minutes=0, step_mins=0, tmp, tmp_hrs, tmp_mins; + + if (self->year) { + long year,month,day; + if ((ret=grib_get_long_internal(a->parent->h, self->year,&year))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->month,&month))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->day,&day))!=GRIB_SUCCESS) return ret; + *val=year*10000+month*100+day; + return GRIB_SUCCESS; + } + if ((ret=grib_get_long_internal(a->parent->h, self->date,&date))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->time,&time))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->step,&step))!=GRIB_SUCCESS) return ret; + + if (self->stepUnits) { + if ((ret=grib_get_long_internal(a->parent->h, self->stepUnits,&stepUnits))!=GRIB_SUCCESS) return ret; + step_mins = convert_to_minutes(step, stepUnits); + Assert(step_mins>=0); + } + + minutes = time % 100; + hours = time / 100; + tmp = minutes + step_mins; /* add the step to our minutes */ + tmp_hrs = tmp/60; /* how many hours and mins is that? */ + tmp_mins = tmp%60; + hours += tmp_hrs; /* increment hours */ + + date = grib_date_to_julian (date); + /* does the new 'hours' exceed 24? if so increment julian */ + while(hours>=24) { + date ++; + hours -= 24; + } + + if(*len < 1) + return GRIB_ARRAY_TOO_SMALL; + + *val = grib_julian_to_date(date); + + return GRIB_SUCCESS; +} diff --git a/src/grib_accessor_class_validity_time.c b/src/grib_accessor_class_validity_time.c new file mode 100644 index 000000000..403660729 --- /dev/null +++ b/src/grib_accessor_class_validity_time.c @@ -0,0 +1,232 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_long + IMPLEMENTS = unpack_long + IMPLEMENTS = init;dump + MEMBERS=const char* date + MEMBERS=const char* time + MEMBERS=const char* step + MEMBERS=const char* stepUnits + MEMBERS=const char* hours + MEMBERS=const char* minutes + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_long(grib_accessor*, long* val,size_t *len); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_validity_time { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in long */ +/* Members defined in validity_time */ + const char* date; + const char* time; + const char* step; + const char* stepUnits; + const char* hours; + const char* minutes; +} grib_accessor_validity_time; + +extern grib_accessor_class* grib_accessor_class_long; + +static grib_accessor_class _grib_accessor_class_validity_time = { + &grib_accessor_class_long, /* super */ + "validity_time", /* name */ + sizeof(grib_accessor_validity_time), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_validity_time = &_grib_accessor_class_validity_time; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +/* Table of multipliers to convert step units to minutes */ +static double u2m[] = { + 1, /* index 0: minutes */ + 60, /* index 1: hour */ + 24*60, /* index 2: day */ + 24*60*30, /* index 3: month */ + -1, /* index 4: year */ + -1, /* index 5: decade */ + -1, /* index 6: 30 years */ + -1, /* index 7: century */ + -1, /* index 8: RESERVED */ + -1, /* index 9: RESERVED */ + 3*60, /* index 10: 3 hours */ + 6*60, /* index 11: 6 hours */ + 12*60, /* index 12: 12 hours */ + 1/60.0, /* index 13: seconds */ + 15, /* index 14: 15 mins */ + 30 /* index 15: 30 mins */ +}; + +static long convert_to_minutes(long step, long stepUnits) +{ + if (stepUnits == 0) return step; /* unit=minutes so no change */ + if (stepUnits == 1) return step*60; /* unit=hours */ + /* Assert( stepUnits < sizeof(u2m)/sizeof(u2m[0]) ); */ + + return (long) (step*u2m[stepUnits]); +} + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_validity_time* self = (grib_accessor_validity_time*)a; + int n = 0; + + self->date = grib_arguments_get_name(a->parent->h,c,n++); + self->time = grib_arguments_get_name(a->parent->h,c,n++); + self->step = grib_arguments_get_name(a->parent->h,c,n++); + self->stepUnits = grib_arguments_get_name(a->parent->h,c,n++); + self->hours = grib_arguments_get_name(a->parent->h,c,n++); + self->minutes = grib_arguments_get_name(a->parent->h,c,n++); + + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_long(dumper,a,NULL); +} + +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_validity_time* self = (grib_accessor_validity_time*)a; + int ret=0; + long date = 0; + long time = 0; + long step = 0; + long stepUnits = 0; + long hours = 0, minutes=0, step_mins=0, tmp, tmp_hrs, tmp_mins; + + if (self->hours) { + long hours,minutes; + if ((ret=grib_get_long_internal(a->parent->h, self->hours,&hours))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->minutes,&minutes))!=GRIB_SUCCESS) return ret; + *val=hours*100+minutes; + return GRIB_SUCCESS; + } + if ((ret=grib_get_long_internal(a->parent->h, self->date,&date))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->time,&time))!=GRIB_SUCCESS) return ret; + if ((ret=grib_get_long_internal(a->parent->h, self->step,&step))!=GRIB_SUCCESS) return ret; + + /* Seconds will always be zero. So convert to minutes */ + if (self->stepUnits) { + if ((ret=grib_get_long_internal(a->parent->h, self->stepUnits,&stepUnits))!=GRIB_SUCCESS) return ret; + step_mins = convert_to_minutes(step, stepUnits); + Assert(step_mins>=0); + } + + minutes = time % 100; + hours = time / 100; + tmp = minutes + step_mins; /* add the step to our minutes */ + tmp_hrs = tmp/60; /* how many hours and mins is that? */ + tmp_mins = tmp%60; + hours += tmp_hrs; /* increment hours */ + hours = hours % 24; /* wrap round if >= 24 */ + time = hours * 100 + tmp_mins; + + if(*len < 1) + return GRIB_ARRAY_TOO_SMALL; + + *val = time; + + return GRIB_SUCCESS; +} + diff --git a/src/grib_accessor_class_values.c b/src/grib_accessor_class_values.c new file mode 100644 index 000000000..9fb44ff2e --- /dev/null +++ b/src/grib_accessor_class_values.c @@ -0,0 +1,268 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init + IMPLEMENTS = dump + IMPLEMENTS = next_offset + IMPLEMENTS = byte_count + IMPLEMENTS = byte_offset + IMPLEMENTS = get_native_type + IMPLEMENTS = update_size + IMPLEMENTS = compare + IMPLEMENTS = pack_long + MEMBERS= int carg + MEMBERS= const char* seclen + MEMBERS= const char* offsetdata + MEMBERS= const char* offsetsection + MEMBERS= int dirty + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static long byte_count(grib_accessor*); +static long byte_offset(grib_accessor*); +static long next_offset(grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static void update_size(grib_accessor*,size_t); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_values { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in values */ + int carg; + const char* seclen; + const char* offsetdata; + const char* offsetsection; + int dirty; +} grib_accessor_values; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_values = { + &grib_accessor_class_gen, /* super */ + "values", /* name */ + sizeof(grib_accessor_values), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + &next_offset, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + &byte_count, /* get number of bytes */ + &byte_offset, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + &update_size, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_values = &_grib_accessor_class_values; + + +static void init_class(grib_accessor_class* c) +{ + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ +static long init_length(grib_accessor* a) +{ + grib_accessor_values* self = (grib_accessor_values*)a; + int ret = 0; + + long seclen = 0; + long offsetsection = 0; + long offsetdata = 0; + + if((ret = grib_get_long_internal(a->parent->h, self->seclen,&seclen))) + return ret; + + if(seclen == 0) + { + /* printf("init_length seclen=0\n"); */ + return 0; + } + + if((ret = grib_get_long_internal(a->parent->h, self->offsetsection,&offsetsection))) + return ret; + + if((ret = grib_get_long_internal(a->parent->h, self->offsetdata,&offsetdata))) + return ret; + + /* When reparsing */ + if(offsetdata < offsetsection) + { + /* printf("init_length offsetdata < offsetsection=0\n"); */ + Assert(a->parent->h->loader); + return 0; + } + + return seclen-(offsetdata-offsetsection); + +} +static void init(grib_accessor* a,const long v, grib_arguments* params) +{ + grib_accessor_values *self =(grib_accessor_values*)a; + self->carg = 0; + + self->seclen = grib_arguments_get_name(a->parent->h,params,self->carg++); + self->offsetdata = grib_arguments_get_name(a->parent->h,params,self->carg++); + self->offsetsection = grib_arguments_get_name(a->parent->h,params,self->carg++); + self->dirty =1; + + a->length = init_length(a); + + /* Assert(a->length>=0); */ +} + +static int get_native_type(grib_accessor* a){ + return GRIB_TYPE_DOUBLE; +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_dump_values(dumper,a); +} + + +static long byte_count(grib_accessor* a){ + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG,"byte_count of %s = %ld",a->name,a->length); + return a->length; + +} + +static long byte_offset(grib_accessor* a){ + return a->offset; +} + +static long next_offset(grib_accessor* a){ + return a->offset+a->length; +} + +static void update_size(grib_accessor* a,size_t s) +{ + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG,"updating size of %s old %ld new %ld",a->name,a->length,s); + a->length = s; + Assert(a->length>=0); +} + +static int compare(grib_accessor* a, grib_accessor* b) { + int retval=0; + double *aval=0; + double *bval=0; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + aval=grib_context_malloc(a->parent->h->context,alen*sizeof(double)); + bval=grib_context_malloc(b->parent->h->context,blen*sizeof(double)); + + grib_unpack_double(a,aval,&alen); + grib_unpack_double(b,bval,&blen); + + retval = GRIB_SUCCESS; + while (alen != 0) { + if (*bval != *aval) retval = GRIB_DOUBLE_VALUE_MISMATCH; + alen--; + } + + grib_context_free(a->parent->h->context,aval); + grib_context_free(b->parent->h->context,bval); + + return retval; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + int ret=0; + grib_accessor_values *self =(grib_accessor_values*)a; + int i; + double* dval=grib_context_malloc(a->parent->h->context,*len*sizeof(double)); + + for (i=0;i<*len;i++) dval[i]=(double)val[i]; + + ret=grib_pack_double(a,dval,len); + + grib_context_free(a->parent->h->context,dval); + + self->dirty=1; + + return ret; +} + + diff --git a/src/grib_accessor_class_variable.c b/src/grib_accessor_class_variable.c new file mode 100644 index 000000000..fcfbb7337 --- /dev/null +++ b/src/grib_accessor_class_variable.c @@ -0,0 +1,375 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = unpack_double;pack_double + IMPLEMENTS = unpack_string;pack_string;string_length + IMPLEMENTS = unpack_long;pack_long;destroy;byte_count + IMPLEMENTS = init;dump;value_count;get_native_type + IMPLEMENTS = compare + MEMBERS=double dval + MEMBERS=char* cval + MEMBERS=int type + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int get_native_type(grib_accessor*); +static int pack_double(grib_accessor*, const double* val,size_t *len); +static int pack_long(grib_accessor*, const long* val,size_t *len); +static int pack_string(grib_accessor*, const char*, size_t *len); +static int unpack_double(grib_accessor*, double* val,size_t *len); +static int unpack_long(grib_accessor*, long* val,size_t *len); +static int unpack_string (grib_accessor*, char*, size_t *len); +static size_t string_length(grib_accessor*); +static long byte_count(grib_accessor*); +static long value_count(grib_accessor*); +static void destroy(grib_context*,grib_accessor*); +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int compare(grib_accessor*, grib_accessor*); + +typedef struct grib_accessor_variable { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in variable */ + double dval; + char* cval; + int type; +} grib_accessor_variable; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_variable = { + &grib_accessor_class_gen, /* super */ + "variable", /* name */ + sizeof(grib_accessor_variable), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + &destroy, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + &string_length, /* get length of string */ + &value_count, /* get number of values */ + &byte_count, /* get number of bytes */ + 0, /* get offset to bytes */ + &get_native_type, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + &pack_long, /* grib_pack procedures long */ + &unpack_long, /* grib_unpack procedures long */ + &pack_double, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + &pack_string, /* grib_pack procedures string */ + &unpack_string, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + &compare, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_variable = &_grib_accessor_class_variable; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->byte_offset = (*(c->super))->byte_offset; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +#define MAX_VARIABLE_STRING_LENGTH 255 + +static void init(grib_accessor* a, const long length , grib_arguments* args ) +{ + grib_accessor_variable* self = (grib_accessor_variable*)a; + grib_expression *expression = grib_arguments_get_expression(a->parent->h,args,0); + const char* p = 0; + size_t len = 1; + long l; + int ret=0; + double d; + char tmp[1024]; + + a->length = 0; + self->type = grib_expression_native_type(a->parent->h,expression); + + switch(self->type) + { + case GRIB_TYPE_DOUBLE: + grib_expression_evaluate_double(a->parent->h,expression,&d); + pack_double(a,&d,&len); + break; + + case GRIB_TYPE_LONG: + grib_expression_evaluate_long(a->parent->h,expression,&l); + pack_long(a,&l,&len); + break; + + default: + len = sizeof(tmp); + p = grib_expression_evaluate_string(a->parent->h,expression,tmp,&len,&ret); + if (ret != GRIB_SUCCESS) { + grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"unable to evaluate %s as string",a->name); + Assert(0); + } + len = strlen(p)+1; + pack_string(a,p,&len); + break; + } +} + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + grib_accessor_variable *self = (grib_accessor_variable*)a; + switch(self->type) + { + case GRIB_TYPE_DOUBLE: + grib_dump_double(dumper,a,NULL); + break; + + case GRIB_TYPE_LONG: + grib_dump_long(dumper,a,NULL); + break; + + default: + grib_dump_string(dumper,a,NULL); + break; + } +} + +static int pack_double(grib_accessor* a, const double* val, size_t *len) +{ + grib_accessor_variable *self = (grib_accessor_variable*)a; + + if(*len != 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + *len = 1; + return GRIB_ARRAY_TOO_SMALL; + } + + self->dval = *val; + if ( *val < (double) LONG_MIN || *val > (double) LONG_MAX ) + self->type = GRIB_TYPE_DOUBLE; + else + self->type = ((long)*val == *val) ? GRIB_TYPE_LONG : GRIB_TYPE_DOUBLE; + + return GRIB_SUCCESS; +} + +static int pack_long(grib_accessor* a, const long* val, size_t *len) +{ + grib_accessor_variable *self = (grib_accessor_variable*)a; + + if(*len != 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + *len = 1; + return GRIB_ARRAY_TOO_SMALL; + } + + self->dval = *val; + self->type = GRIB_TYPE_LONG; + + return GRIB_SUCCESS; +} + +static int unpack_double(grib_accessor* a, double* val, size_t *len) +{ + grib_accessor_variable *ac = (grib_accessor_variable*)a; + + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + *val = ac->dval; + *len = 1; + return GRIB_SUCCESS; + +} +static int unpack_long(grib_accessor* a, long* val, size_t *len) +{ + grib_accessor_variable *ac = (grib_accessor_variable*)a; + + if(*len < 1) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Wrong size for %s it contains %d values ", a->name , 1 ); + *len = 0; + return GRIB_ARRAY_TOO_SMALL; + } + *val = (long)ac->dval; + *len = 1; + return GRIB_SUCCESS; + +} + +static int get_native_type(grib_accessor* a) +{ + grib_accessor_variable *self = (grib_accessor_variable*)a; + return self->type; +} + +static void destroy(grib_context* c,grib_accessor* a) +{ + grib_accessor_variable *self = (grib_accessor_variable*)a; + grib_context_free(c,self->cval); +} + +static int unpack_string (grib_accessor* a, char* val, size_t *len){ + grib_accessor_variable *self = (grib_accessor_variable*)a; + + char buf[80]; + char *p = buf; + size_t slen ; + + if(self->type == GRIB_TYPE_STRING) { + p = self->cval; + } else { + sprintf(p,"%g",self->dval); + } + + slen = strlen(p) +1; + if(*len < slen) + { + grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, "Variable unpack_string Wrong size for %s it is %d bytes big (len=%d)", a->name , slen ,*len); + *len = slen; + return GRIB_BUFFER_TOO_SMALL; + } + strcpy(val,p); + *len = slen; + + return GRIB_SUCCESS; +} + + +static int pack_string(grib_accessor* a, const char* val, size_t *len) +{ + grib_accessor_variable *self = (grib_accessor_variable*)a; + grib_context *c = a->parent->h->context; + + grib_context_free(c,self->cval); + self->cval = grib_context_strdup(c,val); + self->dval = atof(self->cval); + self->type = GRIB_TYPE_STRING; + return GRIB_SUCCESS; +} + +static long value_count(grib_accessor* a) +{ + return 1; +} + +static size_t string_length(grib_accessor* a) +{ + grib_accessor_variable *self = (grib_accessor_variable*)a; + if(self->type == GRIB_TYPE_STRING) + return strlen(self->cval); + else + return MAX_VARIABLE_STRING_LENGTH; +} + +static long byte_count(grib_accessor* a) { + return a->length; +} + +/* NOT ANY MORE +static long byte_count(grib_accessor* a) { + grib_accessor_variable *self = (grib_accessor_variable*)a; + char buf[80]={0,}; + + if(self->type == GRIB_TYPE_STRING) { + return strlen(self->cval) +1; + } else { + sprintf(buf,"%g",self->dval); + printf("========> \"%s\"\n",buf); + return strlen(buf)+1; + } +} +*/ + +static int compare(grib_accessor* a, grib_accessor* b) { + int retval=0; + double *aval=0; + double *bval=0; + + size_t alen = (size_t)grib_value_count(a); + size_t blen = (size_t)grib_value_count(b); + + if (alen != blen) return GRIB_COUNT_MISMATCH; + + aval=grib_context_malloc(a->parent->h->context,alen*sizeof(double)); + bval=grib_context_malloc(b->parent->h->context,blen*sizeof(double)); + + grib_unpack_double(a,aval,&alen); + grib_unpack_double(b,bval,&blen); + + retval = GRIB_SUCCESS; + while (alen != 0) { + if (*bval != *aval) retval = GRIB_DOUBLE_VALUE_MISMATCH; + alen--; + } + + grib_context_free(a->parent->h->context,aval); + grib_context_free(b->parent->h->context,bval); + + return retval; + +} + diff --git a/src/grib_accessor_class_vector.c b/src/grib_accessor_class_vector.c new file mode 100644 index 000000000..4c04c5939 --- /dev/null +++ b/src/grib_accessor_class_vector.c @@ -0,0 +1,190 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_abstract_vector + IMPLEMENTS = init + IMPLEMENTS = unpack_double + MEMBERS = const char* vector + MEMBERS = int index + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static int unpack_double(grib_accessor*, double* val,size_t *len); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); + +typedef struct grib_accessor_vector { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in abstract_vector */ + double* v; + int number_of_elements; +/* Members defined in vector */ + const char* vector; + int index; +} grib_accessor_vector; + +extern grib_accessor_class* grib_accessor_class_abstract_vector; + +static grib_accessor_class _grib_accessor_class_vector = { + &grib_accessor_class_abstract_vector, /* super */ + "vector", /* name */ + sizeof(grib_accessor_vector), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + 0, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + &unpack_double, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + 0, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_vector = &_grib_accessor_class_vector; + + +static void init_class(grib_accessor_class* c) +{ + c->dump = (*(c->super))->dump; + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->notify_change = (*(c->super))->notify_change; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +typedef struct grib_accessor_abstract_vector { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in double */ +/* Members defined in abstract_vector */ + double* v; + int number_of_elements; +} grib_accessor_abstract_vector; + +static void init(grib_accessor* a,const long l, grib_arguments* c) +{ + grib_accessor_vector* self = (grib_accessor_vector*)a; + int n = 0; + + self->vector = grib_arguments_get_name(a->parent->h,c,n++); + self->index = grib_arguments_get_long(a->parent->h,c,n++); + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + a->flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + a->length=0; +} + +static int unpack_double (grib_accessor* a, double* val, size_t *len) +{ + size_t size=0; + double* stat; + grib_accessor_vector* self = (grib_accessor_vector*)a; + grib_accessor* va=(grib_accessor*)grib_find_accessor(a->parent->h,self->vector); + grib_accessor_abstract_vector* v = (grib_accessor_abstract_vector*)va; + + Assert(self->index>=0); + + if (self->index>=v->number_of_elements) { + grib_context_log(a->parent->h->context,GRIB_LOG_FATAL,"index=%d number_of_elements=%d for %s",self->index,v->number_of_elements,a->name); + Assert(self->index < v->number_of_elements); + } + + if (va->dirty) { + grib_get_size(a->parent->h,self->vector,&size); + stat=(double*)grib_context_malloc_clear(a->parent->h->context,sizeof(double)*size); + grib_unpack_double(va,stat,&size); + grib_context_free(a->parent->h->context,stat); + } + + + *val = v->v[self->index]; + + + + return GRIB_SUCCESS; +} + + + + diff --git a/src/grib_accessor_class_when.c b/src/grib_accessor_class_when.c new file mode 100644 index 000000000..bd132e741 --- /dev/null +++ b/src/grib_accessor_class_when.c @@ -0,0 +1,147 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = accessor + SUPER = grib_accessor_class_gen + IMPLEMENTS = init;dump; + IMPLEMENTS = notify_change + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "accessor.class" and rerun ./make_class.pl + +*/ + +static void dump(grib_accessor*, grib_dumper*); +static void init(grib_accessor*,const long, grib_arguments* ); +static void init_class(grib_accessor_class*); +static int notify_change(grib_accessor*,grib_accessor*); + +typedef struct grib_accessor_when { + grib_accessor att; +/* Members defined in gen */ +/* Members defined in when */ +} grib_accessor_when; + +extern grib_accessor_class* grib_accessor_class_gen; + +static grib_accessor_class _grib_accessor_class_when = { + &grib_accessor_class_gen, /* super */ + "when", /* name */ + sizeof(grib_accessor_when), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + 0, /* post_init */ + 0, /* free mem */ + &dump, /* describes himself */ + 0, /* get length of section */ + 0, /* get length of string */ + 0, /* get number of values */ + 0, /* get number of bytes */ + 0, /* get offset to bytes */ + 0, /* get native type */ + 0, /* get sub_section */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_pack procedures long */ + 0, /* grib_unpack procedures long */ + 0, /* grib_pack procedures double */ + 0, /* grib_unpack procedures double */ + 0, /* grib_pack procedures string */ + 0, /* grib_unpack procedures string */ + 0, /* grib_pack procedures bytes */ + 0, /* grib_unpack procedures bytes */ + 0, /* pack_expression */ + ¬ify_change, /* notify_change */ + 0, /* update_size */ + 0, /* preferred_size */ + 0, /* resize */ + 0, /* nearest_smaller_value */ + 0, /* next accessor */ + 0, /* compare vs. another accessor */ + 0, /* unpack only ith value */ + 0, /* unpack a subarray */ + 0, /* clear */ +}; + + +grib_accessor_class* grib_accessor_class_when = &_grib_accessor_class_when; + + +static void init_class(grib_accessor_class* c) +{ + c->next_offset = (*(c->super))->next_offset; + c->string_length = (*(c->super))->string_length; + c->value_count = (*(c->super))->value_count; + c->byte_count = (*(c->super))->byte_count; + c->byte_offset = (*(c->super))->byte_offset; + c->get_native_type = (*(c->super))->get_native_type; + c->sub_section = (*(c->super))->sub_section; + c->pack_missing = (*(c->super))->pack_missing; + c->is_missing = (*(c->super))->is_missing; + c->pack_long = (*(c->super))->pack_long; + c->unpack_long = (*(c->super))->unpack_long; + c->pack_double = (*(c->super))->pack_double; + c->unpack_double = (*(c->super))->unpack_double; + c->pack_string = (*(c->super))->pack_string; + c->unpack_string = (*(c->super))->unpack_string; + c->pack_bytes = (*(c->super))->pack_bytes; + c->unpack_bytes = (*(c->super))->unpack_bytes; + c->pack_expression = (*(c->super))->pack_expression; + c->update_size = (*(c->super))->update_size; + c->preferred_size = (*(c->super))->preferred_size; + c->resize = (*(c->super))->resize; + c->nearest_smaller_value = (*(c->super))->nearest_smaller_value; + c->next = (*(c->super))->next; + c->compare = (*(c->super))->compare; + c->unpack_double_element = (*(c->super))->unpack_double_element; + c->unpack_double_subarray = (*(c->super))->unpack_double_subarray; + c->clear = (*(c->super))->clear; +} + +/* END_CLASS_IMP */ + +static void init(grib_accessor* a, const long len , grib_arguments* arg) +{ + + a->length = 0; + a->flags |= GRIB_ACCESSOR_FLAG_HIDDEN; + a->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; +} + + +static void dump(grib_accessor* a, grib_dumper* dumper) +{ + /* grib_dump_when(dumper,a,NULL); */ +} + +static int notify_change(grib_accessor* a,grib_accessor* changed) +{ + return grib_action_notify_change(a->creator,a,changed); +} + diff --git a/src/grib_accessor_classes_hash.c b/src/grib_accessor_classes_hash.c new file mode 100644 index 000000000..e1e677ed3 --- /dev/null +++ b/src/grib_accessor_classes_hash.c @@ -0,0 +1,497 @@ +/* C code produced by gperf version 3.0.2 */ +/* Command-line: gperf -W classes -t -G -H grib_accessor_classes_get_id -N grib_accessor_classes_hash -m 1 -j 1 accessor_class_list.gperf */ +/* Computed positions: -k'2-3,7,11' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "accessor_class_list.gperf" + +#include "grib_api_internal.h" +#include "grib_accessor_class.h" + +#line 6 "accessor_class_list.gperf" +struct accessor_class_hash { char *name; grib_accessor_class **cclass;}; + +#define TOTAL_KEYWORDS 149 +#define MIN_WORD_LENGTH 3 +#define MAX_WORD_LENGTH 40 +#define MIN_HASH_VALUE 7 +#define MAX_HASH_VALUE 349 +/* maximum key range = 343, duplicates = 0 */ + +#ifdef __GNUC__ + +#else +#ifdef __cplusplus + +#endif +#endif +static unsigned int +grib_accessor_classes_get_id (str, len) + register const char *str; + register unsigned int len; +{ + static unsigned short asso_values[] = + { + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 0, 35, + 10, 350, 3, 7, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 46, 350, 0, 91, 74, + 37, 0, 64, 147, 110, 29, 350, 2, 79, 74, + 21, 1, 34, 350, 10, 42, 2, 94, 102, 350, + 9, 0, 0, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350 + }; + register int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[10]]; + /*FALLTHROUGH*/ + case 10: + case 9: + case 8: + case 7: + hval += asso_values[(unsigned char)str[6]]; + /*FALLTHROUGH*/ + case 6: + case 5: + case 4: + case 3: + hval += asso_values[(unsigned char)str[2]]; + /*FALLTHROUGH*/ + case 2: + hval += asso_values[(unsigned char)str[1]]; + break; + } + return hval; +} + +static struct accessor_class_hash classes[] = + { + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 20 "accessor_class_list.gperf" + {"bytes", &grib_accessor_class_bytes}, +#line 110 "accessor_class_list.gperf" + {"lookup", &grib_accessor_class_lookup}, +#line 115 "accessor_class_list.gperf" + {"nearest", &grib_accessor_class_nearest}, +#line 97 "accessor_class_list.gperf" + {"ieeefloat", &grib_accessor_class_ieeefloat}, +#line 99 "accessor_class_list.gperf" + {"iterator", &grib_accessor_class_iterator}, + {""}, +#line 18 "accessor_class_list.gperf" + {"box", &grib_accessor_class_box}, +#line 144 "accessor_class_list.gperf" + {"statistics", &grib_accessor_class_statistics}, + {""}, {""}, {""}, +#line 50 "accessor_class_list.gperf" + {"data_raw_packing", &grib_accessor_class_data_raw_packing}, +#line 150 "accessor_class_list.gperf" + {"transient", &grib_accessor_class_transient}, +#line 111 "accessor_class_list.gperf" + {"mars_param", &grib_accessor_class_mars_param}, +#line 112 "accessor_class_list.gperf" + {"mars_step", &grib_accessor_class_mars_step}, +#line 36 "accessor_class_list.gperf" + {"data_constant_field", &grib_accessor_class_data_constant_field}, +#line 35 "accessor_class_list.gperf" + {"data_complex_packing", &grib_accessor_class_data_complex_packing}, +#line 93 "accessor_class_list.gperf" + {"gen", &grib_accessor_class_gen}, +#line 11 "accessor_class_list.gperf" + {"array", &grib_accessor_class_array}, +#line 107 "accessor_class_list.gperf" + {"long", &grib_accessor_class_long}, + {""}, {""}, {""}, {""}, +#line 26 "accessor_class_list.gperf" + {"concept", &grib_accessor_class_concept}, +#line 31 "accessor_class_list.gperf" + {"data_2order_packing", &grib_accessor_class_data_2order_packing}, +#line 141 "accessor_class_list.gperf" + {"size", &grib_accessor_class_size}, +#line 14 "accessor_class_list.gperf" + {"bit", &grib_accessor_class_bit}, +#line 16 "accessor_class_list.gperf" + {"bits", &grib_accessor_class_bits}, +#line 44 "accessor_class_list.gperf" + {"data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap}, +#line 15 "accessor_class_list.gperf" + {"bitmap", &grib_accessor_class_bitmap}, +#line 32 "accessor_class_list.gperf" + {"data_2order_packing_count", &grib_accessor_class_data_2order_packing_count}, +#line 49 "accessor_class_list.gperf" + {"data_png_packing", &grib_accessor_class_data_png_packing}, +#line 124 "accessor_class_list.gperf" + {"pad", &grib_accessor_class_pad}, +#line 68 "accessor_class_list.gperf" + {"g1area", &grib_accessor_class_g1area}, +#line 126 "accessor_class_list.gperf" + {"padto", &grib_accessor_class_padto}, +#line 108 "accessor_class_list.gperf" + {"long_vector", &grib_accessor_class_long_vector}, +#line 57 "accessor_class_list.gperf" + {"dirty", &grib_accessor_class_dirty}, +#line 17 "accessor_class_list.gperf" + {"bits_per_value", &grib_accessor_class_bits_per_value}, +#line 22 "accessor_class_list.gperf" + {"codeflag", &grib_accessor_class_codeflag}, +#line 113 "accessor_class_list.gperf" + {"md5", &grib_accessor_class_md5}, +#line 103 "accessor_class_list.gperf" + {"latitudes", &grib_accessor_class_latitudes}, + {""}, +#line 55 "accessor_class_list.gperf" + {"data_simple_packing", &grib_accessor_class_data_simple_packing}, +#line 27 "accessor_class_list.gperf" + {"constant", &grib_accessor_class_constant}, +#line 129 "accessor_class_list.gperf" + {"position", &grib_accessor_class_position}, +#line 84 "accessor_class_list.gperf" + {"g2date", &grib_accessor_class_g2date}, +#line 95 "accessor_class_list.gperf" + {"gts_header", &grib_accessor_class_gts_header}, +#line 62 "accessor_class_list.gperf" + {"forward", &grib_accessor_class_forward}, + {""}, +#line 48 "accessor_class_list.gperf" + {"data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing}, +#line 89 "accessor_class_list.gperf" + {"g2step", &grib_accessor_class_g2step}, + {""}, +#line 51 "accessor_class_list.gperf" + {"data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap}, +#line 39 "accessor_class_list.gperf" + {"data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap}, +#line 85 "accessor_class_list.gperf" + {"g2end_step", &grib_accessor_class_g2end_step}, +#line 142 "accessor_class_list.gperf" + {"spectral_truncation", &grib_accessor_class_spectral_truncation}, +#line 45 "accessor_class_list.gperf" + {"data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing}, +#line 146 "accessor_class_list.gperf" + {"step_in_units", &grib_accessor_class_step_in_units}, + {""}, +#line 46 "accessor_class_list.gperf" + {"data_g2simple_packing", &grib_accessor_class_data_g2simple_packing}, +#line 43 "accessor_class_list.gperf" + {"data_g2complex_packing", &grib_accessor_class_data_g2complex_packing}, +#line 145 "accessor_class_list.gperf" + {"statistics_spectral", &grib_accessor_class_statistics_spectral}, +#line 42 "accessor_class_list.gperf" + {"data_g22order_packing", &grib_accessor_class_data_g22order_packing}, +#line 151 "accessor_class_list.gperf" + {"unsigned", &grib_accessor_class_unsigned}, +#line 101 "accessor_class_list.gperf" + {"ksec1expver", &grib_accessor_class_ksec1expver}, + {""}, +#line 104 "accessor_class_list.gperf" + {"latlon_increment", &grib_accessor_class_latlon_increment}, +#line 78 "accessor_class_list.gperf" + {"g1p1p2", &grib_accessor_class_g1p1p2}, + {""}, {""}, +#line 70 "accessor_class_list.gperf" + {"g1date", &grib_accessor_class_g1date}, +#line 132 "accessor_class_list.gperf" + {"scale", &grib_accessor_class_scale}, +#line 156 "accessor_class_list.gperf" + {"vector", &grib_accessor_class_vector}, + {""}, +#line 72 "accessor_class_list.gperf" + {"g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly}, + {""}, {""}, +#line 154 "accessor_class_list.gperf" + {"values", &grib_accessor_class_values}, +#line 47 "accessor_class_list.gperf" + {"data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing}, + {""}, +#line 60 "accessor_class_list.gperf" + {"element", &grib_accessor_class_element}, +#line 40 "accessor_class_list.gperf" + {"data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing}, +#line 13 "accessor_class_list.gperf" + {"assert", &grib_accessor_class_assert}, + {""}, +#line 41 "accessor_class_list.gperf" + {"data_g1simple_packing", &grib_accessor_class_data_g1simple_packing}, +#line 38 "accessor_class_list.gperf" + {"data_g1complex_packing", &grib_accessor_class_data_g1complex_packing}, +#line 152 "accessor_class_list.gperf" + {"validity_date", &grib_accessor_class_validity_date}, + {""}, +#line 102 "accessor_class_list.gperf" + {"label", &grib_accessor_class_label}, +#line 155 "accessor_class_list.gperf" + {"variable", &grib_accessor_class_variable}, +#line 87 "accessor_class_list.gperf" + {"g2latlon", &grib_accessor_class_g2latlon}, +#line 33 "accessor_class_list.gperf" + {"data_apply_bitmap", &grib_accessor_class_data_apply_bitmap}, +#line 131 "accessor_class_list.gperf" + {"round", &grib_accessor_class_round}, +#line 59 "accessor_class_list.gperf" + {"double", &grib_accessor_class_double}, +#line 134 "accessor_class_list.gperf" + {"section", &grib_accessor_class_section}, +#line 92 "accessor_class_list.gperf" + {"gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap}, +#line 67 "accessor_class_list.gperf" + {"g1_section4_length", &grib_accessor_class_g1_section4_length}, + {""}, +#line 34 "accessor_class_list.gperf" + {"data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent}, +#line 148 "accessor_class_list.gperf" + {"time", &grib_accessor_class_time}, +#line 149 "accessor_class_list.gperf" + {"times", &grib_accessor_class_times}, +#line 82 "accessor_class_list.gperf" + {"g2bitmap", &grib_accessor_class_g2bitmap}, + {""}, {""}, +#line 61 "accessor_class_list.gperf" + {"evaluate", &grib_accessor_class_evaluate}, + {""}, +#line 157 "accessor_class_list.gperf" + {"when", &grib_accessor_class_when}, +#line 143 "accessor_class_list.gperf" + {"sprintf", &grib_accessor_class_sprintf}, +#line 105 "accessor_class_list.gperf" + {"latlonvalues", &grib_accessor_class_latlonvalues}, + {""}, {""}, +#line 73 "accessor_class_list.gperf" + {"g1fcperiod", &grib_accessor_class_g1fcperiod}, + {""}, +#line 12 "accessor_class_list.gperf" + {"ascii", &grib_accessor_class_ascii}, + {""}, +#line 153 "accessor_class_list.gperf" + {"validity_time", &grib_accessor_class_validity_time}, +#line 65 "accessor_class_list.gperf" + {"g1_increment", &grib_accessor_class_g1_increment}, +#line 98 "accessor_class_list.gperf" + {"ifs_param", &grib_accessor_class_ifs_param}, +#line 109 "accessor_class_list.gperf" + {"longitudes", &grib_accessor_class_longitudes}, +#line 83 "accessor_class_list.gperf" + {"g2bitmap_present", &grib_accessor_class_g2bitmap_present}, + {""}, {""}, +#line 135 "accessor_class_list.gperf" + {"section_length", &grib_accessor_class_section_length}, + {""}, {""}, {""}, +#line 69 "accessor_class_list.gperf" + {"g1bitmap", &grib_accessor_class_g1bitmap}, + {""}, {""}, {""}, +#line 23 "accessor_class_list.gperf" + {"codetable", &grib_accessor_class_codetable}, +#line 137 "accessor_class_list.gperf" + {"section_pointer", &grib_accessor_class_section_pointer}, + {""}, +#line 19 "accessor_class_list.gperf" + {"budgdate", &grib_accessor_class_budgdate}, + {""}, {""}, {""}, +#line 106 "accessor_class_list.gperf" + {"library_version", &grib_accessor_class_library_version}, +#line 24 "accessor_class_list.gperf" + {"codetable_title", &grib_accessor_class_codetable_title}, +#line 136 "accessor_class_list.gperf" + {"section_padding", &grib_accessor_class_section_padding}, +#line 127 "accessor_class_list.gperf" + {"padtoeven", &grib_accessor_class_padtoeven}, + {""}, +#line 79 "accessor_class_list.gperf" + {"g1param", &grib_accessor_class_g1param}, + {""}, {""}, {""}, +#line 77 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple}, +#line 76 "accessor_class_list.gperf" + {"g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex}, + {""}, {""}, +#line 37 "accessor_class_list.gperf" + {"data_dummy_field", &grib_accessor_class_data_dummy_field}, + {""}, {""}, +#line 63 "accessor_class_list.gperf" + {"from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value}, +#line 53 "accessor_class_list.gperf" + {"data_sh_unpacked", &grib_accessor_class_data_sh_unpacked}, +#line 86 "accessor_class_list.gperf" + {"g2grid", &grib_accessor_class_g2grid}, + {""}, {""}, {""}, +#line 54 "accessor_class_list.gperf" + {"data_shsimple_packing", &grib_accessor_class_data_shsimple_packing}, +#line 64 "accessor_class_list.gperf" + {"g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag}, +#line 28 "accessor_class_list.gperf" + {"count_file", &grib_accessor_class_count_file}, +#line 56 "accessor_class_list.gperf" + {"decimal_precision", &grib_accessor_class_decimal_precision}, +#line 140 "accessor_class_list.gperf" + {"simple_packing_error", &grib_accessor_class_simple_packing_error}, + {""}, +#line 96 "accessor_class_list.gperf" + {"ibmfloat", &grib_accessor_class_ibmfloat}, + {""}, +#line 88 "accessor_class_list.gperf" + {"g2level", &grib_accessor_class_g2level}, + {""}, {""}, +#line 128 "accessor_class_list.gperf" + {"padtomultiple", &grib_accessor_class_padtomultiple}, +#line 138 "accessor_class_list.gperf" + {"select_step_template", &grib_accessor_class_select_step_template}, +#line 147 "accessor_class_list.gperf" + {"suppressed", &grib_accessor_class_suppressed}, +#line 91 "accessor_class_list.gperf" + {"gds_is_present", &grib_accessor_class_gds_is_present}, +#line 139 "accessor_class_list.gperf" + {"signed", &grib_accessor_class_signed}, +#line 94 "accessor_class_list.gperf" + {"global_gaussian", &grib_accessor_class_global_gaussian}, + {""}, +#line 122 "accessor_class_list.gperf" + {"offset_file", &grib_accessor_class_offset_file}, +#line 66 "accessor_class_list.gperf" + {"g1_message_length", &grib_accessor_class_g1_message_length}, +#line 30 "accessor_class_list.gperf" + {"count_total", &grib_accessor_class_count_total}, +#line 133 "accessor_class_list.gperf" + {"scale_values", &grib_accessor_class_scale_values}, + {""}, {""}, +#line 125 "accessor_class_list.gperf" + {"padding", &grib_accessor_class_padding}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 52 "accessor_class_list.gperf" + {"data_sh_packed", &grib_accessor_class_data_sh_packed}, + {""}, +#line 21 "accessor_class_list.gperf" + {"change_scanning_direction", &grib_accessor_class_change_scanning_direction}, + {""}, {""}, +#line 71 "accessor_class_list.gperf" + {"g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date}, + {""}, {""}, +#line 130 "accessor_class_list.gperf" + {"reference_value_error", &grib_accessor_class_reference_value_error}, + {""}, {""}, +#line 29 "accessor_class_list.gperf" + {"count_missing", &grib_accessor_class_count_missing}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 81 "accessor_class_list.gperf" + {"g1verificationdate", &grib_accessor_class_g1verificationdate}, +#line 10 "accessor_class_list.gperf" + {"abstract_vector", &grib_accessor_class_abstract_vector}, + {""}, {""}, +#line 114 "accessor_class_list.gperf" + {"missing", &grib_accessor_class_missing}, +#line 121 "accessor_class_list.gperf" + {"octect_number", &grib_accessor_class_octect_number}, + {""}, +#line 9 "accessor_class_list.gperf" + {"abstract_long_vector", &grib_accessor_class_abstract_long_vector}, +#line 100 "accessor_class_list.gperf" + {"julian_day", &grib_accessor_class_julian_day}, + {""}, +#line 58 "accessor_class_list.gperf" + {"divdouble", &grib_accessor_class_divdouble}, +#line 75 "accessor_class_list.gperf" + {"g1monthlydate", &grib_accessor_class_g1monthlydate}, + {""}, {""}, {""}, {""}, {""}, +#line 25 "accessor_class_list.gperf" + {"codetable_units", &grib_accessor_class_codetable_units}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 90 "accessor_class_list.gperf" + {"g2step_range", &grib_accessor_class_g2step_range}, + {""}, {""}, {""}, {""}, +#line 74 "accessor_class_list.gperf" + {"g1forecastmonth", &grib_accessor_class_g1forecastmonth}, + {""}, +#line 117 "accessor_class_list.gperf" + {"number_of_points", &grib_accessor_class_number_of_points}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 118 "accessor_class_list.gperf" + {"number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 123 "accessor_class_list.gperf" + {"offset_values", &grib_accessor_class_offset_values}, +#line 80 "accessor_class_list.gperf" + {"g1step_range", &grib_accessor_class_g1step_range}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 116 "accessor_class_list.gperf" + {"number_of_coded_values", &grib_accessor_class_number_of_coded_values}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 119 "accessor_class_list.gperf" + {"number_of_values", &grib_accessor_class_number_of_values}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 120 "accessor_class_list.gperf" + {"number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing} + }; + +#ifdef __GNUC__ + +#endif +struct accessor_class_hash * +grib_accessor_classes_hash (str, len) + register const char *str; + register unsigned int len; +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = grib_accessor_classes_get_id (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register const char *s = classes[key].name; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &classes[key]; + } + } + return 0; +} diff --git a/src/grib_accessor_factory.h b/src/grib_accessor_factory.h new file mode 100644 index 000000000..4b0fa1e88 --- /dev/null +++ b/src/grib_accessor_factory.h @@ -0,0 +1,168 @@ +/* This file is automatically generated by ./make_class.pl, do not edit */ +{ "abstract_long_vector", &grib_accessor_class_abstract_long_vector, }, +{ "abstract_vector", &grib_accessor_class_abstract_vector, }, +{ "array", &grib_accessor_class_array, }, +{ "ascii", &grib_accessor_class_ascii, }, +{ "assert", &grib_accessor_class_assert, }, +{ "bit", &grib_accessor_class_bit, }, +{ "bitmap", &grib_accessor_class_bitmap, }, +{ "bits", &grib_accessor_class_bits, }, +{ "bits_per_value", &grib_accessor_class_bits_per_value, }, +{ "box", &grib_accessor_class_box, }, +{ "budgdate", &grib_accessor_class_budgdate, }, +{ "bytes", &grib_accessor_class_bytes, }, +{ "change_scanning_direction", &grib_accessor_class_change_scanning_direction, }, +{ "codeflag", &grib_accessor_class_codeflag, }, +{ "codetable", &grib_accessor_class_codetable, }, +{ "codetable_title", &grib_accessor_class_codetable_title, }, +{ "codetable_units", &grib_accessor_class_codetable_units, }, +{ "concept", &grib_accessor_class_concept, }, +{ "constant", &grib_accessor_class_constant, }, +{ "count_file", &grib_accessor_class_count_file, }, +{ "count_missing", &grib_accessor_class_count_missing, }, +{ "count_total", &grib_accessor_class_count_total, }, +{ "data_2order_packing", &grib_accessor_class_data_2order_packing, }, +{ "data_2order_packing_count", &grib_accessor_class_data_2order_packing_count, }, +{ "data_apply_bitmap", &grib_accessor_class_data_apply_bitmap, }, +{ "data_apply_boustrophedonic", &grib_accessor_class_data_apply_boustrophedonic, }, +{ "data_apply_gdsnotpresent", &grib_accessor_class_data_apply_gdsnotpresent, }, +{ "data_complex_packing", &grib_accessor_class_data_complex_packing, }, +{ "data_constant_field", &grib_accessor_class_data_constant_field, }, +{ "data_dummy_field", &grib_accessor_class_data_dummy_field, }, +{ "data_g1complex_packing", &grib_accessor_class_data_g1complex_packing, }, +{ "data_g1second_order_constant_width_packing", &grib_accessor_class_data_g1second_order_constant_width_packing, }, +{ "data_g1second_order_general_extended_packing", &grib_accessor_class_data_g1second_order_general_extended_packing, }, +{ "data_g1second_order_general_packing", &grib_accessor_class_data_g1second_order_general_packing, }, +{ "data_g1second_order_row_by_row_packing", &grib_accessor_class_data_g1second_order_row_by_row_packing, }, +{ "data_g1secondary_bitmap", &grib_accessor_class_data_g1secondary_bitmap, }, +{ "data_g1shsimple_packing", &grib_accessor_class_data_g1shsimple_packing, }, +{ "data_g1simple_packing", &grib_accessor_class_data_g1simple_packing, }, +{ "data_g22order_packing", &grib_accessor_class_data_g22order_packing, }, +{ "data_g2complex_packing", &grib_accessor_class_data_g2complex_packing, }, +{ "data_g2secondary_bitmap", &grib_accessor_class_data_g2secondary_bitmap, }, +{ "data_g2shsimple_packing", &grib_accessor_class_data_g2shsimple_packing, }, +{ "data_g2simple_packing", &grib_accessor_class_data_g2simple_packing, }, +{ "data_g2simple_packing_with_preprocessing", &grib_accessor_class_data_g2simple_packing_with_preprocessing, }, +{ "data_jpeg2000_packing", &grib_accessor_class_data_jpeg2000_packing, }, +{ "data_png_packing", &grib_accessor_class_data_png_packing, }, +{ "data_raw_packing", &grib_accessor_class_data_raw_packing, }, +{ "data_secondary_bitmap", &grib_accessor_class_data_secondary_bitmap, }, +{ "data_sh_packed", &grib_accessor_class_data_sh_packed, }, +{ "data_sh_unpacked", &grib_accessor_class_data_sh_unpacked, }, +{ "data_shsimple_packing", &grib_accessor_class_data_shsimple_packing, }, +{ "data_simple_packing", &grib_accessor_class_data_simple_packing, }, +{ "data_szip_packing", &grib_accessor_class_data_szip_packing, }, +{ "decimal_precision", &grib_accessor_class_decimal_precision, }, +{ "dirty", &grib_accessor_class_dirty, }, +{ "divdouble", &grib_accessor_class_divdouble, }, +{ "double", &grib_accessor_class_double, }, +{ "element", &grib_accessor_class_element, }, +{ "evaluate", &grib_accessor_class_evaluate, }, +{ "forward", &grib_accessor_class_forward, }, +{ "from_scale_factor_scaled_value", &grib_accessor_class_from_scale_factor_scaled_value, }, +{ "g1_half_byte_codeflag", &grib_accessor_class_g1_half_byte_codeflag, }, +{ "g1_increment", &grib_accessor_class_g1_increment, }, +{ "g1_message_length", &grib_accessor_class_g1_message_length, }, +{ "g1_section4_length", &grib_accessor_class_g1_section4_length, }, +{ "g1area", &grib_accessor_class_g1area, }, +{ "g1bitmap", &grib_accessor_class_g1bitmap, }, +{ "g1date", &grib_accessor_class_g1date, }, +{ "g1day_of_the_year_date", &grib_accessor_class_g1day_of_the_year_date, }, +{ "g1end_of_interval_monthly", &grib_accessor_class_g1end_of_interval_monthly, }, +{ "g1fcperiod", &grib_accessor_class_g1fcperiod, }, +{ "g1forecastmonth", &grib_accessor_class_g1forecastmonth, }, +{ "g1monthlydate", &grib_accessor_class_g1monthlydate, }, +{ "g1number_of_coded_values_sh_complex", &grib_accessor_class_g1number_of_coded_values_sh_complex, }, +{ "g1number_of_coded_values_sh_simple", &grib_accessor_class_g1number_of_coded_values_sh_simple, }, +{ "g1p1p2", &grib_accessor_class_g1p1p2, }, +{ "g1param", &grib_accessor_class_g1param, }, +{ "g1step_range", &grib_accessor_class_g1step_range, }, +{ "g1verificationdate", &grib_accessor_class_g1verificationdate, }, +{ "g2_eps", &grib_accessor_class_g2_eps, }, +{ "g2_mars_labeling", &grib_accessor_class_g2_mars_labeling, }, +{ "g2bitmap", &grib_accessor_class_g2bitmap, }, +{ "g2bitmap_present", &grib_accessor_class_g2bitmap_present, }, +{ "g2date", &grib_accessor_class_g2date, }, +{ "g2end_step", &grib_accessor_class_g2end_step, }, +{ "g2grid", &grib_accessor_class_g2grid, }, +{ "g2latlon", &grib_accessor_class_g2latlon, }, +{ "g2level", &grib_accessor_class_g2level, }, +{ "g2lon", &grib_accessor_class_g2lon, }, +{ "g2step", &grib_accessor_class_g2step, }, +{ "g2step_range", &grib_accessor_class_g2step_range, }, +{ "gds_is_present", &grib_accessor_class_gds_is_present, }, +{ "gds_not_present_bitmap", &grib_accessor_class_gds_not_present_bitmap, }, +{ "gen", &grib_accessor_class_gen, }, +{ "global_gaussian", &grib_accessor_class_global_gaussian, }, +{ "gts_header", &grib_accessor_class_gts_header, }, +{ "headers_only", &grib_accessor_class_headers_only, }, +{ "ibmfloat", &grib_accessor_class_ibmfloat, }, +{ "ieeefloat", &grib_accessor_class_ieeefloat, }, +{ "ifs_param", &grib_accessor_class_ifs_param, }, +{ "iterator", &grib_accessor_class_iterator, }, +{ "julian_day", &grib_accessor_class_julian_day, }, +{ "ksec1expver", &grib_accessor_class_ksec1expver, }, +{ "label", &grib_accessor_class_label, }, +{ "laplacian", &grib_accessor_class_laplacian, }, +{ "latitudes", &grib_accessor_class_latitudes, }, +{ "latlon_increment", &grib_accessor_class_latlon_increment, }, +{ "latlonvalues", &grib_accessor_class_latlonvalues, }, +{ "library_version", &grib_accessor_class_library_version, }, +{ "local_definition", &grib_accessor_class_local_definition, }, +{ "long", &grib_accessor_class_long, }, +{ "long_vector", &grib_accessor_class_long_vector, }, +{ "longitudes", &grib_accessor_class_longitudes, }, +{ "lookup", &grib_accessor_class_lookup, }, +{ "mars_param", &grib_accessor_class_mars_param, }, +{ "mars_step", &grib_accessor_class_mars_step, }, +{ "md5", &grib_accessor_class_md5, }, +{ "message", &grib_accessor_class_message, }, +{ "missing", &grib_accessor_class_missing, }, +{ "nearest", &grib_accessor_class_nearest, }, +{ "number_of_coded_values", &grib_accessor_class_number_of_coded_values, }, +{ "number_of_points", &grib_accessor_class_number_of_points, }, +{ "number_of_points_gaussian", &grib_accessor_class_number_of_points_gaussian, }, +{ "number_of_values", &grib_accessor_class_number_of_values, }, +{ "number_of_values_data_raw_packing", &grib_accessor_class_number_of_values_data_raw_packing, }, +{ "octect_number", &grib_accessor_class_octect_number, }, +{ "offset_file", &grib_accessor_class_offset_file, }, +{ "offset_values", &grib_accessor_class_offset_values, }, +{ "pad", &grib_accessor_class_pad, }, +{ "padding", &grib_accessor_class_padding, }, +{ "padto", &grib_accessor_class_padto, }, +{ "padtoeven", &grib_accessor_class_padtoeven, }, +{ "padtomultiple", &grib_accessor_class_padtomultiple, }, +{ "position", &grib_accessor_class_position, }, +{ "reference_value_error", &grib_accessor_class_reference_value_error, }, +{ "round", &grib_accessor_class_round, }, +{ "scale", &grib_accessor_class_scale, }, +{ "scale_values", &grib_accessor_class_scale_values, }, +{ "second_order_bits_per_value", &grib_accessor_class_second_order_bits_per_value, }, +{ "section", &grib_accessor_class_section, }, +{ "section_length", &grib_accessor_class_section_length, }, +{ "section_padding", &grib_accessor_class_section_padding, }, +{ "section_pointer", &grib_accessor_class_section_pointer, }, +{ "select_step_template", &grib_accessor_class_select_step_template, }, +{ "signed", &grib_accessor_class_signed, }, +{ "signed_bits", &grib_accessor_class_signed_bits, }, +{ "simple_packing_error", &grib_accessor_class_simple_packing_error, }, +{ "size", &grib_accessor_class_size, }, +{ "spd", &grib_accessor_class_spd, }, +{ "spectral_truncation", &grib_accessor_class_spectral_truncation, }, +{ "sprintf", &grib_accessor_class_sprintf, }, +{ "statistics", &grib_accessor_class_statistics, }, +{ "statistics_spectral", &grib_accessor_class_statistics_spectral, }, +{ "step_in_units", &grib_accessor_class_step_in_units, }, +{ "sum", &grib_accessor_class_sum, }, +{ "suppressed", &grib_accessor_class_suppressed, }, +{ "time", &grib_accessor_class_time, }, +{ "times", &grib_accessor_class_times, }, +{ "transient", &grib_accessor_class_transient, }, +{ "unsigned", &grib_accessor_class_unsigned, }, +{ "unsigned_bits", &grib_accessor_class_unsigned_bits, }, +{ "validity_date", &grib_accessor_class_validity_date, }, +{ "validity_time", &grib_accessor_class_validity_time, }, +{ "values", &grib_accessor_class_values, }, +{ "variable", &grib_accessor_class_variable, }, +{ "vector", &grib_accessor_class_vector, }, +{ "when", &grib_accessor_class_when, }, diff --git a/src/grib_accessor_factory_hash_list b/src/grib_accessor_factory_hash_list new file mode 100644 index 000000000..8947f2a9e --- /dev/null +++ b/src/grib_accessor_factory_hash_list @@ -0,0 +1,174 @@ +/* This file is automatically generated by ./make_class.pl, do not edit */ +abstract_long_vector, &grib_accessor_class_abstract_long_vector +abstract_vector, &grib_accessor_class_abstract_vector +array, &grib_accessor_class_array +ascii, &grib_accessor_class_ascii +assert, &grib_accessor_class_assert +bit, &grib_accessor_class_bit +bitmap, &grib_accessor_class_bitmap +bits, &grib_accessor_class_bits +bits_per_value, &grib_accessor_class_bits_per_value +box, &grib_accessor_class_box +budgdate, &grib_accessor_class_budgdate +bytes, &grib_accessor_class_bytes +change_scanning_direction, &grib_accessor_class_change_scanning_direction +codeflag, &grib_accessor_class_codeflag +codetable, &grib_accessor_class_codetable +codetable_title, &grib_accessor_class_codetable_title +codetable_units, &grib_accessor_class_codetable_units +concept, &grib_accessor_class_concept +constant, &grib_accessor_class_constant +count_file, &grib_accessor_class_count_file +count_missing, &grib_accessor_class_count_missing +count_total, &grib_accessor_class_count_total +data_2order_packing, &grib_accessor_class_data_2order_packing +data_2order_packing_count, &grib_accessor_class_data_2order_packing_count +data_apply_bitmap, &grib_accessor_class_data_apply_bitmap +data_apply_boustrophedonic, &grib_accessor_class_data_apply_boustrophedonic +data_apply_gdsnotpresent, &grib_accessor_class_data_apply_gdsnotpresent +data_complex_packing, &grib_accessor_class_data_complex_packing +data_constant_field, &grib_accessor_class_data_constant_field +data_dummy_field, &grib_accessor_class_data_dummy_field +data_g1complex_packing, &grib_accessor_class_data_g1complex_packing +data_g1second_order_constant_width_packing, &grib_accessor_class_data_g1second_order_constant_width_packing +data_g1second_order_general, &grib_accessor_class_data_g1second_order_general +data_g1second_order_general_extended_packing, &grib_accessor_class_data_g1second_order_general_extended_packing +data_g1second_order_general_packing, &grib_accessor_class_data_g1second_order_general_packing +data_g1second_order_row_by_row_packing, &grib_accessor_class_data_g1second_order_row_by_row_packing +data_g1secondary_bitmap, &grib_accessor_class_data_g1secondary_bitmap +data_g1shsimple_packing, &grib_accessor_class_data_g1shsimple_packing +data_g1simple_packing, &grib_accessor_class_data_g1simple_packing +data_g22order_packing, &grib_accessor_class_data_g22order_packing +data_g2complex_packing, &grib_accessor_class_data_g2complex_packing +data_g2second_order, &grib_accessor_class_data_g2second_order +data_g2second_order_general_extended_packing, &grib_accessor_class_data_g2second_order_general_extended_packing +data_g2second_order_packing, &grib_accessor_class_data_g2second_order_packing +data_g2secondary_bitmap, &grib_accessor_class_data_g2secondary_bitmap +data_g2shsimple_packing, &grib_accessor_class_data_g2shsimple_packing +data_g2simple_packing, &grib_accessor_class_data_g2simple_packing +data_g2simple_packing_with_preprocessing, &grib_accessor_class_data_g2simple_packing_with_preprocessing +data_jpeg2000_packing, &grib_accessor_class_data_jpeg2000_packing +data_png_packing, &grib_accessor_class_data_png_packing +data_raw_packing, &grib_accessor_class_data_raw_packing +data_secondary_bitmap, &grib_accessor_class_data_secondary_bitmap +data_sh_packed, &grib_accessor_class_data_sh_packed +data_sh_unpacked, &grib_accessor_class_data_sh_unpacked +data_shsimple_packing, &grib_accessor_class_data_shsimple_packing +data_simple_packing, &grib_accessor_class_data_simple_packing +data_szip_packing, &grib_accessor_class_data_szip_packing +decimal_precision, &grib_accessor_class_decimal_precision +descriptors, &grib_accessor_class_descriptors +dirty, &grib_accessor_class_dirty +divdouble, &grib_accessor_class_divdouble +double, &grib_accessor_class_double +element, &grib_accessor_class_element +evaluate, &grib_accessor_class_evaluate +forward, &grib_accessor_class_forward +from_scale_factor_scaled_value, &grib_accessor_class_from_scale_factor_scaled_value +g1_half_byte_codeflag, &grib_accessor_class_g1_half_byte_codeflag +g1_increment, &grib_accessor_class_g1_increment +g1_message_length, &grib_accessor_class_g1_message_length +g1_section4_length, &grib_accessor_class_g1_section4_length +g1area, &grib_accessor_class_g1area +g1bitmap, &grib_accessor_class_g1bitmap +g1date, &grib_accessor_class_g1date +g1day_of_the_year_date, &grib_accessor_class_g1day_of_the_year_date +g1end_of_interval_monthly, &grib_accessor_class_g1end_of_interval_monthly +g1fcperiod, &grib_accessor_class_g1fcperiod +g1forecastmonth, &grib_accessor_class_g1forecastmonth +g1monthlydate, &grib_accessor_class_g1monthlydate +g1number_of_coded_values_sh_complex, &grib_accessor_class_g1number_of_coded_values_sh_complex +g1number_of_coded_values_sh_simple, &grib_accessor_class_g1number_of_coded_values_sh_simple +g1p1p2, &grib_accessor_class_g1p1p2 +g1param, &grib_accessor_class_g1param +g1step_range, &grib_accessor_class_g1step_range +g1verificationdate, &grib_accessor_class_g1verificationdate +g2_eps, &grib_accessor_class_g2_eps +g2_mars_labeling, &grib_accessor_class_g2_mars_labeling +g2bitmap, &grib_accessor_class_g2bitmap +g2bitmap_present, &grib_accessor_class_g2bitmap_present +g2date, &grib_accessor_class_g2date +g2end_step, &grib_accessor_class_g2end_step +g2grid, &grib_accessor_class_g2grid +g2latlon, &grib_accessor_class_g2latlon +g2level, &grib_accessor_class_g2level +g2lon, &grib_accessor_class_g2lon +g2step, &grib_accessor_class_g2step +g2step_range, &grib_accessor_class_g2step_range +gds_is_present, &grib_accessor_class_gds_is_present +gds_not_present_bitmap, &grib_accessor_class_gds_not_present_bitmap +gen, &grib_accessor_class_gen +global_gaussian, &grib_accessor_class_global_gaussian +gts_header, &grib_accessor_class_gts_header +headers_only, &grib_accessor_class_headers_only +ibmfloat, &grib_accessor_class_ibmfloat +ieeefloat, &grib_accessor_class_ieeefloat +ifs_param, &grib_accessor_class_ifs_param +iterator, &grib_accessor_class_iterator +julian_day, &grib_accessor_class_julian_day +ksec1expver, &grib_accessor_class_ksec1expver +label, &grib_accessor_class_label +laplacian, &grib_accessor_class_laplacian +latitudes, &grib_accessor_class_latitudes +latlon_increment, &grib_accessor_class_latlon_increment +latlonvalues, &grib_accessor_class_latlonvalues +library_version, &grib_accessor_class_library_version +local_definition, &grib_accessor_class_local_definition +long, &grib_accessor_class_long +long_vector, &grib_accessor_class_long_vector +longitudes, &grib_accessor_class_longitudes +lookup, &grib_accessor_class_lookup +mars_param, &grib_accessor_class_mars_param +mars_step, &grib_accessor_class_mars_step +md5, &grib_accessor_class_md5 +message, &grib_accessor_class_message +missing, &grib_accessor_class_missing +nearest, &grib_accessor_class_nearest +number_of_coded_values, &grib_accessor_class_number_of_coded_values +number_of_points, &grib_accessor_class_number_of_points +number_of_points_gaussian, &grib_accessor_class_number_of_points_gaussian +number_of_values, &grib_accessor_class_number_of_values +number_of_values_data_raw_packing, &grib_accessor_class_number_of_values_data_raw_packing +octect_number, &grib_accessor_class_octect_number +offset_file, &grib_accessor_class_offset_file +offset_values, &grib_accessor_class_offset_values +pad, &grib_accessor_class_pad +padding, &grib_accessor_class_padding +padto, &grib_accessor_class_padto +padtoeven, &grib_accessor_class_padtoeven +padtomultiple, &grib_accessor_class_padtomultiple +position, &grib_accessor_class_position +reference_value_error, &grib_accessor_class_reference_value_error +round, &grib_accessor_class_round +scale, &grib_accessor_class_scale +scale_values, &grib_accessor_class_scale_values +second_order_bits_per_value, &grib_accessor_class_second_order_bits_per_value +section, &grib_accessor_class_section +section_length, &grib_accessor_class_section_length +section_padding, &grib_accessor_class_section_padding +section_pointer, &grib_accessor_class_section_pointer +select_local_definition, &grib_accessor_class_select_local_definition +select_step_template, &grib_accessor_class_select_step_template +signed, &grib_accessor_class_signed +signed_bits, &grib_accessor_class_signed_bits +simple_packing_error, &grib_accessor_class_simple_packing_error +size, &grib_accessor_class_size +spd, &grib_accessor_class_spd +spectral_truncation, &grib_accessor_class_spectral_truncation +sprintf, &grib_accessor_class_sprintf +statistics, &grib_accessor_class_statistics +statistics_spectral, &grib_accessor_class_statistics_spectral +step_in_units, &grib_accessor_class_step_in_units +sum, &grib_accessor_class_sum +suppressed, &grib_accessor_class_suppressed +time, &grib_accessor_class_time +times, &grib_accessor_class_times +transient, &grib_accessor_class_transient +unsigned, &grib_accessor_class_unsigned +unsigned_bits, &grib_accessor_class_unsigned_bits +validity_date, &grib_accessor_class_validity_date +validity_time, &grib_accessor_class_validity_time +values, &grib_accessor_class_values +variable, &grib_accessor_class_variable +vector, &grib_accessor_class_vector +when, &grib_accessor_class_when diff --git a/src/grib_api.h b/src/grib_api.h new file mode 100644 index 000000000..6c62ae994 --- /dev/null +++ b/src/grib_api.h @@ -0,0 +1,1548 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*! \file grib_api.h + \brief grib_api C header file + + This is the only file that must be included to use the grib_api library + from C. +*/ + +#ifndef grib_api_H +#define grib_api_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include + +#define GRIB_API_VERSION (GRIB_API_MAJOR_VERSION*10000+GRIB_API_MINOR_VERSION*100+GRIB_API_REVISION_VERSION) + +/* sections */ +#define GRIB_SECTION_PRODUCT (1<<0) +#define GRIB_SECTION_GRID (1<<1) +#define GRIB_SECTION_LOCAL (1<<2) +#define GRIB_SECTION_DATA (1<<3) +#define GRIB_SECTION_BITMAP (1<<4) + + +/* LOG MODES +Log mode for information for processiong information +*/ +/* Log mode for info */ +#define GRIB_LOG_INFO 0 +/* Log mode for warnings */ +#define GRIB_LOG_WARNING 1 +/* Log mode for errors */ +#define GRIB_LOG_ERROR 2 +/* Log mode for fatal errors */ +#define GRIB_LOG_FATAL 3 +/* Log mode for debug */ +#define GRIB_LOG_DEBUG 4 + +/* Types */ +/* undefined */ +#define GRIB_TYPE_UNDEFINED 0 +/* long integer */ +#define GRIB_TYPE_LONG 1 +/* double */ +#define GRIB_TYPE_DOUBLE 2 +/* char* */ +#define GRIB_TYPE_STRING 3 +/* bytes */ +#define GRIB_TYPE_BYTES 4 +/* section */ +#define GRIB_TYPE_SECTION 5 +/* labe */ +#define GRIB_TYPE_LABEL 6 +/* missing */ +#define GRIB_TYPE_MISSING 7 + +/* Missing values */ +/* #define GRIB_MISSING_LONG 0x80000001*/ +#define GRIB_MISSING_LONG 0xffffffff +#define GRIB_MISSING_DOUBLE -1e+100 + +/*set spec flags*/ +#define GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING (1<<0) + +/* Dump option flags*/ +#define GRIB_DUMP_FLAG_READ_ONLY (1<<0) +#define GRIB_DUMP_FLAG_DUMP_OK (1<<1) +#define GRIB_DUMP_FLAG_VALUES (1<<2) +#define GRIB_DUMP_FLAG_CODED (1<<3) +#define GRIB_DUMP_FLAG_OCTECT (1<<4) +#define GRIB_DUMP_FLAG_ALIASES (1<<5) +#define GRIB_DUMP_FLAG_TYPE (1<<6) +#define GRIB_DUMP_FLAG_HEXADECIMAL (1<<7) +#define GRIB_DUMP_FLAG_NO_DATA (1<<8) +#define GRIB_DUMP_FLAG_ALL_DATA (1<<9) + +/* grib_nearest flags */ +#define GRIB_NEAREST_SAME_GRID (1<<0) +#define GRIB_NEAREST_SAME_DATA (1<<1) +#define GRIB_NEAREST_SAME_POINT (1<<2) + +/*! Iteration is carried out on all the keys available in the message +\ingroup keys_iterator +\see grib_keys_iterator_new +*/ +#define GRIB_KEYS_ITERATOR_ALL_KEYS 0 + +/*! read only keys are skipped by keys iterator. +\ingroup keys_iterator +\see grib_keys_iterator_new +*/ +#define GRIB_KEYS_ITERATOR_SKIP_READ_ONLY (1<<0) + +/*! optional keys are skipped by keys iterator. +\ingroup keys_iterator +\see grib_keys_iterator_new */ +#define GRIB_KEYS_ITERATOR_SKIP_OPTIONAL (1<<1) + +/*! edition specific keys are skipped by keys iterator. +\ingroup keys_iterator +\see grib_keys_iterator_new */ +#define GRIB_KEYS_ITERATOR_SKIP_EDITION_SPECIFIC (1<<2) + +/*! coded keys are skipped by keys iterator. +\ingroup keys_iterator +\see grib_keys_iterator_new */ +#define GRIB_KEYS_ITERATOR_SKIP_CODED (1<<3) + +/*! computed keys are skipped by keys iterator. +\ingroup keys_iterator +\see grib_keys_iterator_new */ +#define GRIB_KEYS_ITERATOR_SKIP_COMPUTED (1<<4) + +/*! duplicates of a key are skipped by keys iterator. +\ingroup keys_iterator +\see grib_keys_iterator_new */ +#define GRIB_KEYS_ITERATOR_SKIP_DUPLICATES (1<<5) + +/*! function keys are skipped by keys iterator. +\ingroup keys_iterator +\see grib_keys_iterator_new */ +#define GRIB_KEYS_ITERATOR_SKIP_FUNCTION (1<<6) + +typedef struct grib_key_value_list grib_key_value_list; + +typedef struct grib_values grib_values; + +struct grib_values { + const char* name; + int type; + long long_value; + double double_value; + const char* string_value; + int error; + int has_value; + int equal; + grib_values* next; +} ; + + +/*! Grib handle, structure giving access to parsed grib values by keys + \ingroup grib_handle +*/ +typedef struct grib_handle grib_handle; + +/*! Grib multi field handle, structure used to build multi fields messages. + \ingroup grib_handle + */ +typedef struct grib_multi_handle grib_multi_handle; + +/*! Grib context, structure containing the memory methods, the parsers and the formats. + \ingroup grib_context +*/ +typedef struct grib_context grib_context; + +/*! Grib iterator, structure supporting a geographic iteration of values on a grib message. + \ingroup grib_iterator +*/ +typedef struct grib_iterator grib_iterator; + +/*! Grib nearest, structure used to find the nearest points of a latitude longitude point. + \ingroup grib_iterator +*/ +typedef struct grib_nearest grib_nearest; + +/*! Grib box, structure used to crop a box given north/west/south/east boundaries. + \ingroup grib_box +*/ +typedef struct grib_box grib_box; +typedef struct grib_points grib_points; + +/*! Grib keys iterator. Iterator over keys. + \ingroup keys_iterator +*/ +typedef struct grib_keys_iterator grib_keys_iterator; + + +typedef struct grib_fieldset grib_fieldset; + +typedef struct grib_order_by grib_order_by; +typedef struct grib_where grib_where; + +typedef struct grib_darray grib_darray; +typedef struct grib_iarray grib_iarray; + +grib_fieldset *grib_fieldset_new_from_files(grib_context *c, char *filenames[], int nfiles, char **keys, int nkeys, char *where_string, char *order_by_string, int *err); + + + +void grib_fieldset_delete(grib_fieldset* set); +void grib_fieldset_rewind(grib_fieldset* set); +int grib_fieldset_apply_order_by(grib_fieldset* set,const char* order_by_string); +grib_handle* grib_fieldset_next_handle(grib_fieldset* set,int* err); +int grib_fieldset_count(grib_fieldset *set); +int grib_values_check(grib_handle* h, grib_values* values, int count); + +/*! \defgroup grib_index The grib_index +The grib_index is the structure giving indexed access to messages in a file. + */ +/*! @{*/ + +/*! index structure to access messages in a file. +*/ +typedef struct grib_index grib_index; + +/** + * Create a new index form a file. The file is indexed with the keys in argument. + * + * @param c : context (NULL for default context) + * @param filename : name of the file of messages to be indexed + * @param keys : comma separated list of keys for the index. + * The type of the key can be explicitly declared appending :l for long, + * :d for double, :s for string to the key name. If the type is not + * declared explicitly, the native type is assumed. + * @param err : 0 if OK, integer value on error + * @return the newly created index + */ +grib_index* grib_index_new_from_file(grib_context* c, + char* filename,const char* keys,int *err); +/** + * Create a new index based on a set of keys. + * + * @param c : context (NULL for default context) + * @param keys : comma separated list of keys for the index. + * The type of the key can be explicitly declared appending :l for long, + * :d for double, :s for string to the key name. If the type is not + * declared explicitly, the native type is assumed. + * @param err : 0 if OK, integer value on error + * @return the newly created index + */ +grib_index* grib_index_new(grib_context* c, const char* keys,int *err); + +/** + * Indexes the file given in argument in the index given in argument. + * + * @param index : index + * @param filename : name of the file of messages to be indexed + * @return 0 if OK, integer value on error + */ +int grib_index_add_file(grib_index *index, const char *filename); +int grib_index_write(grib_index *index, const char *filename); +grib_index* grib_index_read(grib_context* c,const char* filename,int *err); + +/** + * Get the number of distinct values of the key in argument contained in the index. The key must belong to the index. + * + * @param index : an index created from a file. + * The index must have been created with the key in argument. + * @param key : key for which the number of values is computed + * @param size : number of distinct values of the key in the index + * @return 0 if OK, integer value on error + */ +int grib_index_get_size(grib_index* index,const char* key,size_t* size); + +/** + * Get the distinct values of the key in argument contained in the index. The key must belong to the index. This function is used when the type of the key was explicitly defined as long or when the native type of the key is long. + * + * @param index : an index created from a file. + * The index must have been created with the key in argument. + * @param key : key for wich the values are returned + * @param values : array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. + * @param size : size of the values array + * @return 0 if OK, integer value on error + */ +int grib_index_get_long(grib_index* index,const char* key, + long* values,size_t *size); + +/** + * Get the distinct values of the key in argument contained in the index. The key must belong to the index. This function is used when the type of the key was explicitly defined as double or when the native type of the key is double. + * + * @param index : an index created from a file. + * The index must have been created with the key in argument. + * @param key : key for wich the values are returned + * @param values : array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. + * @param size : size of the values array + * @return 0 if OK, integer value on error + */ +int grib_index_get_double(grib_index* index,const char* key, + double* values,size_t *size); + +/** + * Get the distinct values of the key in argument contained in the index. The key must belong to the index. This function is used when the type of the key was explicitly defined as string or when the native type of the key is string. + * + * @param index : an index created from a file. + * The index must have been created with the key in argument. + * @param key : key for wich the values are returned + * @param values : array of values. The array must be allocated before entering this function and its size must be enough to contain all the values. + * @param size : size of the values array + * @return 0 if OK, integer value on error + */ +int grib_index_get_string(grib_index* index,const char* key, + char** values,size_t *size); + + +/** + * Select the message subset with key==value. The value is a long. The key must have been created with long type or have long as native type if the type was not explicitly defined in the index creation. + * + * @param index : an index created from a file. + * The index must have been created with the key in argument. + * @param key : key to be selected + * @param value : value of the key to select + * @return 0 if OK, integer value on error + */ +int grib_index_select_long(grib_index* index,const char* key,long value); + +/** + * Select the message subset with key==value. The value is a double. The key must have been created with double type or have double as native type if the type was not explicitly defined in the index creation. + * + * @param index : an index created from a file. + * The index must have been created with the key in argument. + * @param key : key to be selected + * @param value : value of the key to select + * @return 0 if OK, integer value on error + */ +int grib_index_select_double(grib_index* index,const char* key,double value); + +/** + * Select the message subset with key==value. The value is a string. The key must have been created with string type or have string as native type if the type was not explicitly defined in the index creation. + * + * @param index : an index created from a file. + * The index must have been created with the key in argument. + * @param key : key to be selected + * @param value : value of the key to select + * @return 0 if OK, integer value on error + */ +int grib_index_select_string(grib_index* index,const char* key,char* value); + +/** + * Create a new handle from an index after having selected the key values. + * All the keys belonging to the index must be selected before calling this function. Successive calls to this function will return all the handles compatible with the constraints defined selecting the values of the index keys. + * When no more handles are available from the index a NULL pointer is returned and the err variable is set to GRIB_END_OF_INDEX. + * + * @param index : an index created from a file. + * @param err : 0 if OK, integer value on error. GRIB_END_OF_INDEX when no more handles are contained in the index. + * @return grib handle. + */ +grib_handle* grib_handle_new_from_index(grib_index* index,int *err); + +/** + * Delete the index. + * + * @param index : index to be deleted. + */ +void grib_index_delete(grib_index* index); + +/*! @} */ + +/*! \defgroup grib_handle The grib_handle +The grib_handle is the structure giving access to parsed grib values by keys. +*/ +/*! @{*/ +/** +* Counts the messages contained in a file resource. +* +* @param c : the context from wich the handle will be created (NULL for default context) +* @param f : the file resource +* @param n : the number of messages in the file +* @return 0 if OK, integer value on error +*/ +int grib_count_in_file(grib_context* c, FILE* f,int* n); + +/** +* Create a handle from a file resource. +* The file is read until a message is found. The message is then copied. +* Remember always to delete the handle when it is not needed any more to avoid +* memory leaks. +* +* @param c : the context from wich the handle will be created (NULL for default context) +* @param f : the file resource +* @param error : error code set if the returned handle is NULL and the end of file is not reached +* @return the new handle, NULL if the resource is invalid or a problem is encountered +*/ +grib_handle* grib_handle_new_from_file (grib_context* c, FILE* f, int* error) ; +grib_handle* grib_handle_headers_only_new_from_file (grib_context* c, FILE* f, int* error) ; + +/** +* Create a handle from a file resource. +* The file is supposed to contain a netCDF message. +* Remember always to delete the handle when it is not needed any more to avoid +* memory leaks. +* +* @param c : the context from wich the handle will be created (NULL for default context) +* @param file : the file name +* @param error : error code set if the returned handle is NULL and the end of file is not reached +* @return the new handle, NULL if the resource is invalid or a problem is encountered +*/ +grib_handle* grib_handle_new_from_nc_file(grib_context* c,const char* file,int *error); + +/** +* Write a coded message in a file. +* +* @param h : grib_handle to be written +* @param file : name of the file +* @param mode : mode +* @return 0 if OK, integer value on error +*/ +int grib_write_message(grib_handle* h,const char* file,const char* mode); + +typedef struct grib_string_list grib_string_list; +struct grib_string_list { + char* value; + grib_string_list* next; +}; + +grib_handle* grib_util_sections_copy(grib_handle* hfrom,grib_handle* hto,int what,int *err); +grib_string_list* grib_util_get_param_id(const char* mars_param); +grib_string_list* grib_util_get_mars_param(const char* param_id); + +/** +* Create a handle from a user message in memory. The message will not be freed at the end. +* The message will be copied as soon as a modification is needed. +* +* @param c : the context from which the handle will be created (NULL for default context) +* @param data : the actual message +* @param data_len : the length of the message in number of bytes +* @return the new handle, NULL if the message is invalid or a problem is encountered +*/ +grib_handle* grib_handle_new_from_message(grib_context* c, void* data, size_t data_len); + +/** +* Create a handle from a user message in memory. The message will not be freed at the end. +* The message will be copied as soon as a modification is needed. +* This function works also with multi field messages. +* +* @param c : the context from which the handle will be created (NULL for default context) +* @param data : the actual message +* @param data_len : the length of the message in number of bytes +* @param error : error code +* @return the new handle, NULL if the message is invalid or a problem is encountered +*/ +grib_handle* grib_handle_new_from_multi_message(grib_context* c,void** data, + size_t *data_len,int* error); + +/** +* Create a handle from a user message. The message is copied and will be freed with the handle +* +* @param c : the context from wich the handle will be created (NULL for default context) +* @param data : the actual message +* @param data_len : the length of the message in number of bytes +* @return the new handle, NULL if the message is invalid or a problem is encountered +*/ +grib_handle* grib_handle_new_from_message_copy(grib_context* c, const void* data, size_t data_len); + + +/** +* Create a handle from a read_only template resource. +* The message is copied at the creation of the handle +* +* @param c : the context from wich the handle will be created (NULL for default context) +* @param res_name : the resource name +* @return the new handle, NULL if the resource is invalid or a problem is encountered +*/ +grib_handle* grib_handle_new_from_template (grib_context* c, const char* res_name) ; + +/** + * Create a handle from a message contained in a samples directory. + * The message is copied at the creation of the handle + * + * @param c : the context from wich the handle will be created (NULL for default context) + * @param res_name : the resource name + * @return the new handle, NULL if the resource is invalid or a problem is encountered + */ +grib_handle* grib_handle_new_from_samples (grib_context* c, const char* res_name) ; + + + +/** +* Clone an existing handle using the context of the original handle, +* The message is copied and reparsed +* +* @param h : The handle to be cloned +* @return the new handle, NULL if the message is invalid or a problem is encountered +*/ +grib_handle* grib_handle_clone (grib_handle* h) ; + +/** +* Frees a handle, also frees the message if it is not a user message +* @see grib_handle_new_from_message +* @param h : The handle to be deleted +* @return 0 if OK, integer value on error +*/ +int grib_handle_delete (grib_handle* h); + +/** + * Create an empty multi field handle. + * Remember always to delete the multi handle when it is not needed any more to avoid + * memory leaks. + * + * @param c : the context from wich the handle will be created (NULL for default context) + */ +grib_multi_handle* grib_multi_handle_new (grib_context* c); + +/** + * Append the sections starting with start_section of the message pointed by h at + * the end of the multi field handle mh. + * Remember always to delete the multi handle when it is not needed any more to avoid + * memory leaks. + * + * @param h : The handle from which the sections are copied. + * @param start_section : section number. Starting from this section all the sections to then end of the message will be copied. + * @param mh : The multi field handle on which the sections are appended. + * @return 0 if OK, integer value on error + */ +int grib_multi_handle_append(grib_handle* h,int start_section,grib_multi_handle* mh); + +/** + * Delete multi field handle. + * + * @param mh : The multi field handle to be deleted. + * @return 0 if OK, integer value on error + */ +int grib_multi_handle_delete(grib_multi_handle* mh); + +/** + * Write a multi field handle in a file. + * Remember always to delete the multi handle when it is not needed any more to avoid + * memory leaks. + * + * @param mh : The multi field handle to be written. + * @param f : File on which the file handle is written. + * @return 0 if OK, integer value on error + */ +int grib_multi_handle_write(grib_multi_handle* mh,FILE* f); + +/*! @} */ + +/*! \defgroup handling_coded_messages Handling coded messages */ +/*! @{ */ +/** +* getting the message attached to a handle +* +* @param h : the grib handle to wich the buffer should be gathered +* @param message : the pointer to be set to the handle's data +* @param message_length : at exist, the message size in number of bytes +* @return 0 if OK, integer value on error +*/ +int grib_get_message(grib_handle* h ,const void** message, size_t *message_length ); + + +/** +* getting a copy of the message attached to a handle +* +* @param h : the grib handle to wich the buffer should be returned +* @param message : the pointer to the data buffer to be filled +* @param message_length : at entry, the size in number of bytes of the allocated empty message. +* At exist, the actual message length in number of bytes +* @return 0 if OK, integer value on error +*/ +int grib_get_message_copy(grib_handle* h , void* message,size_t *message_length ); +/*! @} */ + +/*! \defgroup iterators Iterating on latitude/longitude/values */ +/*! @{ */ + +/*! +* \brief Create a new iterator from a handle, using current geometry and values. +* +* \param h : the handle from which the iterator will be created +* \param flags : flags for future use. +* \param error : error code +* \return the new iterator, NULL if no iterator can be created +*/ +grib_iterator* grib_iterator_new (grib_handle* h, unsigned long flags,int* error); + +/** +* Get the next value from an iterator. +* +* @param i : the iterator +* @param lat : on output latitude in degree +* @param lon : on output longitude in degree +* @param value : on output value of the point +* @return positive value if successful, 0 if no more data are available +*/ +int grib_iterator_next (grib_iterator *i, double* lat,double* lon,double* value); + +/** +* Get the previous value from an iterator. +* +* @param i : the iterator +* @param lat : on output latitude in degree +* @param lon : on output longitude in degree +* @param value : on output value of the point* +* @return positive value if successful, 0 if no more data are available +*/ +int grib_iterator_previous (grib_iterator *i, double* lat,double* lon,double* value); + +/** +* Test procedure for values in an iterator. +* +* @param i : the iterator +* @return boolean, 1 if the iterator still nave next values, 0 otherwise +*/ +int grib_iterator_has_next (grib_iterator *i); + +/** +* Test procedure for values in an iterator. +* +* @param i : the iterator +* @return 0 if OK, integer value on error +*/ +int grib_iterator_reset (grib_iterator *i); + +/** +* Frees an iterator from memory +* +* @param i : the iterator +* @return 0 if OK, integer value on error +*/ +int grib_iterator_delete (grib_iterator *i); + +/*! +* \brief Create a new nearest from a handle, using current geometry . +* +* \param h : the handle from which the iterator will be created +* \param error : error code +* \return the new nearest, NULL if no nearest can be created +*/ +grib_nearest* grib_nearest_new (grib_handle* h, int* error); + +/** +* Find the 4 nearest points of a latitude longitude point. +* The flags are provided to speed up the process of searching. If you are +* sure that the point you are asking for is not changing from a call +* to another you can use GRIB_NEAREST_SAME_POINT. The same is valid for +* the grid. Flags can be used together duing an or. +* +* @param nearest : nearest structure +* @param h : handle from which geography and data values are taken +* @param inlat : latitude of the point to search for +* @param inlon : longitude of the point to search for +* @param flags : GRIB_NEAREST_SAME_POINT, GRIB_NEAREST_SAME_GRID +* @param outlats : returned array of latitudes of the nearest points +* @param outlons : returned array of longitudes of the nearest points +* @param values : returned array of data values of the nearest points +* @param distances : returned array of distances from the nearest points +* @param indexes : returned array of indexes of the nearest points +* @param len : size of the arrays +* @return 0 if OK, integer value on error +*/ +int grib_nearest_find(grib_nearest *nearest,grib_handle* h,double inlat,double inlon, + unsigned long flags,double* outlats,double* outlons, + double* values,double* distances,int* indexes,size_t *len); + +/** +* Frees an nearest from memory +* +* @param nearest : the nearest +* @return 0 if OK, integer value on error +*/ +int grib_nearest_delete (grib_nearest *nearest); + +/** +* Find the nearest point of a set of points whose latitudes and longitudes +* are given in the inlats, inlons arrays respectively. +* If the flag is_lsm is 1 the nearest land point is returned and the +* grib passed as handle (h) is considered a land sea mask. +* The land nearest point is the nearest point with land sea mask value>=0.5. +* If no nearest land points are found the nearest value is returned. +* If the flag is_lsm is 0 the nearest point is returned. +* values, distances, indexes (in the "values" array) for the nearest points (ilons,ilats) +* are returned. +* +* @param h : handle from which geography and data values are taken +* @param is_lsm : lsm flag (1-> nearest land, 0-> nearest) +* @param inlats : latitudes of the points to search for +* @param inlons : longitudes of the points to search for +* @param npoints : number of points (size of the inlats,inlons,outlats,outlons,values,distances,indexes arrays) +* @param outlats : returned array of latitudes of the nearest points +* @param outlons : returned array of longitudes of the nearest points +* @param values : returned array of data values of the nearest points +* @param distances : returned array of distances from the nearest points +* @param indexes : returned array of indexes of the nearest points +* @return 0 if OK, integer value on error +*/ +int grib_nearest_find_multiple(grib_handle* h,int is_lsm, + double* inlats,double* inlons,long npoints, + double* outlats,double* outlons, + double* values,double* distances, int* indexes); + +/* @} */ + +/*! \defgroup get_set Accessing header and data values */ +/*! @{ */ +/** +* Get the number offset of a key, in a message if several keys of the same name +* are present, the offset of the last one is returned +* +* @param h : the handle to get the offset from +* @param key : the key to be searched +* @param offset : the address of a size_t where the offset will be set +* @return 0 if OK, integer value on error +*/ +int grib_get_offset(grib_handle* h, const char* key, size_t* offset); + +/** +* Get the number of coded value from a key, if several keys of the same name are present, the total sum is returned +* +* @param h : the handle to get the offset from +* @param key : the key to be searched +* @param size : the address of a size_t where the size will be set +* @return 0 if OK, integer value on error +*/ +int grib_get_size(grib_handle* h, const char* key,size_t *size); + +/** +* Get the length of the string representation of the key, if several keys of the same name are present, the maximum length is returned +* +* @param h : the handle to get the offset from +* @param key : the key to be searched +* @param length : the address of a size_t where the length will be set +* @return 0 if OK, integer value on error +*/ +int grib_get_length(grib_handle* h, const char* key,size_t *length); + +/** +* Get a long value from a key, if several keys of the same name are present, the last one is returned +* @see grib_set_long +* +* @param h : the handle to get the data from +* @param key : the key to be searched +* @param value : the address of a long where the data will be retreived +* @return 0 if OK, integer value on error +*/ +int grib_get_long (grib_handle* h, const char* key, long* value ); + +/** +* Get a double value from a key, if several keys of the same name are present, the last one is returned +* @see grib_set_double +* +* @param h : the handle to get the data from +* @param key : the key to be searched +* @param value : the address of a double where the data will be retreived +* @return 0 if OK, integer value on error +*/ +int grib_get_double (grib_handle* h, const char* key, double* value ); + +/** +* Get as double the i-th element of the "key" array +* +* @param h : the handle to get the data from +* @param key : the key to be searched +* @param i : zero based index +* @param value : the address of a double where the data will be retreived +* @return 0 if OK, integer value on error +*/ +int grib_get_double_element(grib_handle* h, const char* key, int i, double* value ); + +/** +* Get as double array the elements of the "key" array whose indexes are listed in the input array i +* +* @param h : the handle to get the data from +* @param key : the key to be searched +* @param i : zero based array of indexes +* @param size : size of the i and value arrays +* @param value : the address of a double where the data will be retreived +* @return 0 if OK, integer value on error +*/ +int grib_get_double_elements(grib_handle* h, const char* key, int* i, long size,double* value); + +/** +* Get a string value from a key, if several keys of the same name are present, the last one is returned +* @see grib_set_string +* +* @param h : the handle to get the data from +* @param key : the key to be searched +* @param mesg : the address of a string where the data will be retreived +* @param length : the address of a size_t that contains allocated length of the string on input, and that contains the actual length of the string on output +* @return 0 if OK, integer value on error +*/ +int grib_get_string (grib_handle* h, const char* key, char* mesg, size_t *length ); + +/** +* Get raw bytes values from a key. If several keys of the same name are present, the last one is returned +* @see grib_set_bytes +* +* @param h : the handle to get the data from +* @param key : the key to be searched +* @param bytes : the address of a byte array where the data will be retreived +* @param length : the address of a size_t that contains allocated length of the byte array on input, and that contains the actual length of the byte array on output +* @return 0 if OK, integer value on error +*/ +int grib_get_bytes (grib_handle* h, const char* key, unsigned char* bytes, size_t *length ); +/** +* Get double array values from a key. If several keys of the same name are present, the last one is returned +* @see grib_set_double_array +* +* @param h : the handle to get the data from +* @param key : the key to be searched +* @param vals : the address of a double array where the data will be retreived +* @param length : the address of a size_t that contains allocated length of the double array on input, and that contains the actual length of the double array on output +* @return 0 if OK, integer value on error +*/ +int grib_get_double_array (grib_handle* h, const char* key, double* vals, size_t *length ); + +/** +* Get long array values from a key. If several keys of the same name are present, the last one is returned +* @see grib_set_long_array +* +* @param h : the handle to get the data from +* @param key : the key to be searched +* @param vals : the address of a long array where the data will be retreived +* @param length : the address of a size_t that contains allocated length of the long array on input, and that contains the actual length of the long array on output +* @return 0 if OK, integer value on error +*/int grib_get_long_array (grib_handle* h, const char* key, long* vals, size_t *length ); + + + +/* setting data */ +/** +* Copy the keys belonging to a given namespace from a source handle to a destination handle +* +* +* @param dest : destination handle +* @param name : namespace +* @param src : source handle +* @return 0 if OK, integer value on error +*/ +int grib_copy_namespace(grib_handle* dest, const char* name, grib_handle* src); + +/** +* Set a long value from a key. If several keys of the same name are present, the last one is set +* @see grib_get_long +* +* @param h : the handle to set the data to +* @param key : the key to be searched +* @param val : a long where the data will be read +* @return 0 if OK, integer value on error +*/ +int grib_set_long (grib_handle* h, const char* key , long val ); + +/** +* Set a double value from a key. If several keys of the same name are present, the last one is set +* @see grib_get_double +* +* @param h : the handle to set the data to +* @param key : the key to be searched +* @param val : a double where the data will be read +* @return 0 if OK, integer value on error +*/ +int grib_set_double (grib_handle* h, const char* key , double val ); + +/** +* Set a string value from a key. If several keys of the same name are present, the last one is set +* @see grib_get_string +* +* @param h : the handle to set the data to +* @param key : the key to be searched +* @param mesg : the address of a string where the data will be read +* @param length : the address of a size_t that contains the length of the string on input, and that contains the actual packed length of the string on output +* @return 0 if OK, integer value on error +*/ +int grib_set_string (grib_handle* h, const char* key , const char* mesg, size_t *length ); + +/** +* Set a bytes array from a key. If several keys of the same name are present, the last one is set +* @see grib_get_bytes +* +* @param h : the handle to set the data to +* @param key : the key to be searched +* @param bytes : the address of a byte array where the data will be read +* @param length : the address of a size_t that contains the length of the byte array on input, and that contains the actual packed length of the byte array on output +* @return 0 if OK, integer value on error +*/ +int grib_set_bytes (grib_handle* h, const char* key, const unsigned char* bytes, size_t *length ); + +/** +* Set a double array from a key. If several keys of the same name are present, the last one is set +* @see grib_get_double_array +* +* @param h : the handle to set the data to +* @param key : the key to be searched +* @param vals : the address of a double array where the data will be read +* @param length : a size_t that contains the length of the byte array on input +* @return 0 if OK, integer value on error +*/ +int grib_set_double_array (grib_handle* h, const char* key , const double* vals , size_t length ); + +/** +* Set a long array from a key. If several keys of the same name are present, the last one is set +* @see grib_get_long_array +* +* @param h : the handle to set the data to +* @param key : the key to be searched +* @param vals : the address of a long array where the data will be read +* @param length : a size_t that contains the length of the long array on input +* @return 0 if OK, integer value on error +*/ +int grib_set_long_array (grib_handle* h, const char* key , const long* vals , size_t length ); +/*! @} */ + + +/** +* Print all keys, with the context print procedure and dump mode to a resource +* +* @param h : the handle to be printed +* @param out : output file handle +* @param mode : available dump modes are: debug wmo c_code +* @param option_flags : all the GRIB_DUMP_FLAG_x flags can be used +* @param arg : used to provide a format to output data (experimental) +*/ +void grib_dump_content(grib_handle* h,FILE* out,const char* mode, unsigned long option_flags,void* arg); + +/** +* Gather all names available in a handle to a string, using a space as separator +* +* @param h : the handle used to gather the keys +* @param names : the sting to be filled with the names +*/ +void grib_get_all_names(grib_handle* h,char* names); + +/** +* Print all keys from the parsed definition files available in a context +* +* @param f : the File used to print the keys on +* @param c : the context that containd the cached definition files to be printed +*/ +void grib_dump_action_tree(grib_context* c, FILE* f) ; + +/*! \defgroup context The context object + The context is a long life configuration object of the grib_api. + It is used to define special allocation and free routines or + to set special grib_api behaviours and variables. + */ +/*! @{ */ +/** +* Grib free procedure, format of a procedure referenced in the context that is used to free memory +* +* @param c : the context where the memory freeing will apply +* @param data : pointer to the data to be freed +* must match @see grib_malloc_proc +*/ +typedef void (*grib_free_proc) (const grib_context* c, void* data); + +/** +* Grib malloc procedure, format of a procedure referenced in the context that is used to allocate memory +* @param c : the context where the memory allocation will apply +* @param length : length to be allocated in number of bytes +* @return a pointer to the alocated memory, NULL if no memory can be allocated +* must match @see grib_free_proc +*/ +typedef void* (*grib_malloc_proc) (const grib_context* c, size_t length); + +/** +* Grib realloc procedure, format of a procedure referenced in the context that is used to reallocate memory +* @param c : the context where the memory allocation will apply +* @param data : pointer to the data to be reallocated +* @param length : length to be allocated in number of bytes +* @return a pointer to the alocated memory +*/ +typedef void* (*grib_realloc_proc) (const grib_context* c, void* data, size_t length); + +/** +* Grib loc proc, format of a procedure referenced in the context that is used to log internal messages +* +* @param c : the context where the logging will apply +* @param level : the log level, as defined in log modes +* @param mesg : the message to be logged +*/ +typedef void (*grib_log_proc) (const grib_context* c, int level, const char* mesg); + +/** +* Grib print proc, format of a procedure referenced in the context that is used to print external messages +* +* @param c : the context where the logging will apply +* @param descriptor : the structure to be printed on, must match the implementation +* @param mesg : the message to be printed +*/ +typedef void (*grib_print_proc) (const grib_context* c, void* descriptor, const char* mesg); + + +/** +* Grib data read proc, format of a procedure referenced in the context that is used to read from a stream in a resource +* +* @param c : the context where the read will apply +* @param *ptr : the resource +* @param size : size to read +* @param *stream : the stream +* @return size read +*/ +typedef size_t (*grib_data_read_proc) (const grib_context* c,void *ptr, size_t size, void *stream); + +/** +* Grib data read write, format of a procedure referenced in the context that is used to write to a stream from a resource +* +* @param c : the context where the write will apply +* @param *ptr : the resource +* @param size : size to read +* @param *stream : the stream +* @return size written +*/ +typedef size_t (*grib_data_write_proc)(const grib_context* c,const void *ptr, size_t size, void *stream); + +/** +* Grib data tell, format of a procedure referenced in the context that is used to tell the current position in a stream +* +* @param c : the context where the tell will apply +* @param *stream : the stream +* @return the position in the stream +*/ +typedef off_t (*grib_data_tell_proc) (const grib_context* c, void *stream); + +/** +* Grib data seek, format of a procedure referenced in the context that is used to seek the current position in a stream +* +* @param c : the context where the tell will apply +* @param offset : the offset to seek to +* @param whence : If whence is set to SEEK_SET, SEEK_CUR, or SEEK_END, + the offset is relative to the start of the file, + the current position indicator, or end-of-file, respectively. +* @param *stream : the stream +* @return 0 if OK, integer value on error +*/ +typedef off_t (*grib_data_seek_proc) (const grib_context* c, off_t offset, int whence, void *stream); + +/** +* Grib data eof, format of a procedure referenced in the context that is used to test end of file +* +* @param c : the context where the tell will apply +* @param *stream : the stream +* @return the position in the stream +*/ +typedef int (*grib_data_eof_proc) (const grib_context* c, void *stream); + +/** +* Get the static default context +* +* @return the default context, NULL it the context is not available +*/ +grib_context* grib_context_get_default(void); + +/** +* Create and allocate a new context from a parent context. +* +* @param c : the context to be cloned, NULL for default context +* @return the new and empty context, NULL if error +*/ +grib_context* grib_context_new (grib_context* c); + +/** +* Frees the cached definition files of the context +* +* @param c : the context to be deleted +*/ +void grib_context_delete (grib_context* c); + +/** +* Set the gts header mode on. +* The GTS headers will be preserved. +* +* @param c : the context +*/ +void grib_gts_header_on(grib_context* c) ; + +/** +* Set the gts header mode off. +* The GTS headers will be deleted. +* +* @param c : the context +*/ +void grib_gts_header_off(grib_context* c); + +/** +* Set the gribex mode on. +* Grib files will be compatible with gribex. +* +* @param c : the context +*/ +void grib_gribex_mode_on(grib_context* c); + +/** +* Get the gribex mode. +* +* @param c : the context +*/ +int grib_get_gribex_mode ( grib_context* c); + +/** +* Set the gribex mode off. +* Grib files won't be always compatible with gribex. +* +* @param c : the context +*/ +void grib_gribex_mode_off(grib_context* c); + + +/** +* Sets user data in a context +* +* @param c : the context to be modified +* @param udata : the user data to set +*/ +void grib_context_set_user_data (grib_context* c, void* udata); + +/** +* get userData from a context +* +* @param c : the context from which the user data will be retreived +* @return the user data referenced in the context +*/ +void* grib_context_get_user_data (grib_context* c); + +/** +* Sets memory procedures of the context +* +* @param c : the context to be modified +* @param griballoc : the memory allocation procedure to be set @see grib_malloc_proc +* @param gribfree : the memory freeing procedure to be set @see grib_free_proc +*/ +void grib_context_set_memory_proc(grib_context* c, grib_malloc_proc griballoc, + grib_free_proc gribfree, + grib_realloc_proc gribrealloc); + +/** +* Sets memory procedures of the context for persistent data +* +* @param c : the context to be modified +* @param griballoc : the memory allocation procedure to be set @see grib_malloc_proc +* @param gribfree : the memory freeing procedure to be set @see grib_free_proc +*/ +void grib_context_set_persistent_memory_proc(grib_context* c, grib_malloc_proc griballoc, + grib_free_proc gribfree); + +/** +* Sets memory procedures of the context for large buffers +* +* @param c : the context to be modified +* @param griballoc : the memory allocation procedure to be set @see grib_malloc_proc +* @param gribfree : the memory freeing procedure to be set @see grib_free_proc +*/ +void grib_context_set_buffer_memory_proc(grib_context* c, grib_malloc_proc griballoc, + grib_free_proc gribfree, + grib_realloc_proc gribrealloc); + +/** +* Sets the context printing procedure used for user interaction +* +* @param c : the context to be modified +* @param printp : the printing procedure to be set @see grib_print_proc +*/ +void grib_context_set_print_proc(grib_context* c, grib_print_proc printp); + +/** +* Sets the context logging procedure used for system (warning, errors, infos ...) messages +* +* @param c : the context to be modified +* @param logp : the logging procedure to be set @see grib_log_proc +*/ +void grib_context_set_logging_proc(grib_context* c, grib_log_proc logp); + +/** +* Turn on support for multiple fields in single grib messages +* +* @param c : the context to be modified +*/ +void grib_multi_support_on(grib_context* c); + +/** +* Turn off support for multiple fields in single grib messages +* +* @param c : the context to be modified +*/ +void grib_multi_support_off(grib_context* c); +/*! @} */ + +/** +* Get the api version +* +* @return api version +*/ +long grib_get_api_version(void); + +/** +* Prints the api version +* +* +*/ +void grib_print_api_version(FILE* out); + +/*! \defgroup keys_iterator Iterating on keys names +The keys iterator is designed to get the key names defined in a message. +Key names on which the iteration is carried out can be filtered through their +attributes or by the namespace they belong to. +*/ +/*! @{ */ +/*! Create a new iterator from a valid and initialized handle. +* @param h : the handle whose keys you want to iterate +* @param filter_flags : flags to filter out some of the keys through their attributes +* @param name_space : if not null the iteration is carried out only on +* keys belongin to the namespace passed. (NULL for all the keys) +* @return keys iterator ready to iterate through keys according to filter_flags +* and namespace +*/ +grib_keys_iterator* grib_keys_iterator_new(grib_handle* h,unsigned long filter_flags, char* name_space); + +/*! Step to the next iterator. +* @param kiter : valid grib_keys_iterator +* @return 1 if next iterator exitsts, 0 if no more elements to iterate on +*/ +int grib_keys_iterator_next(grib_keys_iterator *kiter); + + + +/*! get the key name from the iterator +* @param kiter : valid grib_keys_iterator +* @return key name +*/ +const char* grib_keys_iterator_get_name(grib_keys_iterator *kiter); + +/*! Delete the iterator. +* @param kiter : valid grib_keys_iterator +* @return 0 if OK, integer value on error +*/ +int grib_keys_iterator_delete( grib_keys_iterator* kiter); + +/*! Rewind the iterator. +* @param kiter : valid grib_keys_iterator +* @return 0 if OK, integer value on error +*/ +int grib_keys_iterator_rewind(grib_keys_iterator* kiter); + + +int grib_keys_iterator_set_flags(grib_keys_iterator *kiter,unsigned long flags); +/* @} */ + +void grib_update_sections_lengths(grib_handle* h); + + +/** +* Convert an error code into a string +* @param code : the error code +* @return the error message +*/ +const char* grib_get_error_message(int code); +const char* grib_get_type_name(int type); + +int grib_get_native_type(grib_handle* h, const char* name,int* type); + +void grib_check(const char* call,const char* file,int line,int e,const char* msg); +#define GRIB_CHECK(a,msg) grib_check(#a,__FILE__,__LINE__,a,msg) +#define GRIB_CHECK_NOLINE(a,msg) grib_check(#a,0,0,a,msg) + + +int grib_set_values(grib_handle* h,grib_values* grib_values , size_t arg_count); +grib_handle* grib_handle_new_from_partial_message_copy(grib_context* c, const void* data, size_t size); +grib_handle* grib_handle_new_from_partial_message(grib_context* c,void* data, size_t buflen); +int grib_is_missing(grib_handle* h, const char* key, int* err); +int grib_is_defined(grib_handle* h, const char* key); +int grib_set_missing(grib_handle* h, const char* key); +int grib_get_gaussian_latitudes(long truncation,double* latitudes); + +int grib_julian_to_datetime(double jd, long *year, long *month, long *day, long *hour, long *minute, long *second); +int grib_datetime_to_julian(long year, long month, long day, long hour, long minute, long second, double *jd); +long grib_julian_to_date(long jdate); +long grib_date_to_julian(long ddate); + +void grib_get_reduced_row(long pl,double lon_first,double lon_last,long* npoints,long* ilon_first, long* ilon_last ); + +/* read products */ +int wmo_read_any_from_file(FILE *f, void *buffer, size_t *len); +int wmo_read_grib_from_file(FILE* f,void* buffer,size_t* len); +int wmo_read_bufr_from_file(FILE* f,void* buffer,size_t* len); +int wmo_read_gts_from_file(FILE* f,void* buffer,size_t* len); +int wmo_read_any_from_stream(void *stream_data, long (*stream_proc )(void *, void *buffer, long len ), void *buffer, size_t *len); +void *wmo_read_any_from_file_malloc(FILE *f,size_t *size,int *err); +void *wmo_read_gts_from_file_malloc(FILE* f,size_t *size,int* err); +void *wmo_read_bufr_from_file_malloc(FILE* f,size_t *size,int* err); +grib_handle* grib_gts_handle_new_from_file ( grib_context* c, FILE* f,int *error ); +grib_handle* grib_bufr_handle_new_from_file ( grib_context* c, FILE* f,int *error ); + +struct grib_points { + grib_context* context; + double* latitudes; + double* longitudes; + size_t* indexes; + size_t* group_start; + size_t* group_len; + size_t n_groups; + size_t n; + size_t size; +}; + +grib_box* grib_box_new(grib_handle* h,int* error); +grib_points* grib_box_get_points(grib_box *box,double north, double west,double south,double east, int *err); +int grib_points_get_values(grib_handle* h, grib_points* points, double* val); + + +/* --------------------------------------- */ + + + + +#define GRIB_UTIL_GRID_SPEC_REGULAR_LL 1 +#define GRIB_UTIL_GRID_SPEC_ROTATED_LL 2 + +#define GRIB_UTIL_GRID_SPEC_REGULAR_GG 3 +#define GRIB_UTIL_GRID_SPEC_ROTATED_GG 4 +#define GRIB_UTIL_GRID_SPEC_REDUCED_GG 5 + +#define GRIB_UTIL_GRID_SPEC_SH 6 +#define GRIB_UTIL_GRID_SPEC_REDUCED_LL 7 +#define GRIB_UTIL_GRID_SPEC_POLAR_STEREOGRAPHIC 8 + + +typedef struct grib_util_grid_spec { + + int grid_type; + + /* Grid */ + long Ni; + long Nj; + + double iDirectionIncrementInDegrees; + double jDirectionIncrementInDegrees; + + double longitudeOfFirstGridPointInDegrees; + double longitudeOfLastGridPointInDegrees; + + double latitudeOfFirstGridPointInDegrees; + double latitudeOfLastGridPointInDegrees; + + /* Rotation */ + long uvRelativeToGrid; + double latitudeOfSouthernPoleInDegrees; + double longitudeOfSouthernPoleInDegrees; + + /* Scanning mode */ + long iScansNegatively; + long jScansPositively; + + /* Gaussian number */ + long N; + + /* bitmap */ + long bitmapPresent; + double missingValue; + + /* pl list for reduced */ + long *pl; + long pl_size; + + /* Spherical harmonics */ + long truncation; + + /* polar stereographic */ + double orientationOfTheGridInDegrees; + long DyInMetres; + long DxInMetres; + +} grib_util_grid_spec; + + +#define GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX 1 +#define GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE 2 +#define GRIB_UTIL_PACKING_TYPE_JPEG 3 +#define GRIB_UTIL_PACKING_TYPE_GRID_COMPLEX 4 +#define GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE 5 +#define GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE_MATRIX 6 +#define GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER 7 + +#define GRIB_UTIL_PACKING_SAME_AS_INPUT 0 +#define GRIB_UTIL_PACKING_USE_PROVIDED 1 + +#define GRIB_UTIL_ACCURACY_SAME_BITS_PER_VALUES_AS_INPUT 0 +#define GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES 1 +#define GRIB_UTIL_ACCURACY_SAME_DECIMAL_SCALE_FACTOR_AS_INPUT 2 +#define GRIB_UTIL_ACCURACY_USE_PROVIDED_DECIMAL_SCALE_FACTOR 3 + +typedef struct grib_util_packing_spec { + + /* Packing options */ + long packing_type; + long packing; + long boustrophedonic; + + long editionNumber; /* =0 for default value */ + + /* Accuracy */ + long accuracy; + long bitsPerValue; + long decimalScaleFactor; + + long computeLaplacianOperator; + int truncateLaplacian; + double laplacianOperator; + + /* local definition */ + long deleteLocalDefinition; /* default(=0) local definition is taken from the input field */ + + /* Extra values when packing */ + grib_values extra_settings[80]; + long extra_settings_count; +} grib_util_packing_spec; + + +grib_handle *grib_util_set_spec(grib_handle *h, + const grib_util_grid_spec *grid_spec, + const grib_util_packing_spec *packing_spec, /* NULL for defaults (same as input) */ + int flags, + const double *data_values, + size_t data_values_count, + int *err); + + +/* --------------------------------------- */ + + +#ifdef __cplusplus +} +#endif +#endif +/* This part is automatically generated by ./errors.pl, do not edit */ +#ifndef grib_errors_H +#define grib_errors_H +/*! \defgroup errors Error codes +Error codes returned by the grib_api functions. +*/ +/*! @{*/ +/** No error */ +#define GRIB_SUCCESS 0 +/** End of resource reached */ +#define GRIB_END_OF_FILE -1 +/** Internal error */ +#define GRIB_INTERNAL_ERROR -2 +/** Passed buffer is too small */ +#define GRIB_BUFFER_TOO_SMALL -3 +/** Function not yet implemented */ +#define GRIB_NOT_IMPLEMENTED -4 +/** Missing 7777 at end of message */ +#define GRIB_7777_NOT_FOUND -5 +/** Passed array is too small */ +#define GRIB_ARRAY_TOO_SMALL -6 +/** File not found */ +#define GRIB_FILE_NOT_FOUND -7 +/** Code not found in code table */ +#define GRIB_CODE_NOT_FOUND_IN_TABLE -8 +/** Array size mismatch */ +#define GRIB_WRONG_ARRAY_SIZE -9 +/** Key/value not found */ +#define GRIB_NOT_FOUND -10 +/** Input output problem */ +#define GRIB_IO_PROBLEM -11 +/** Message invalid */ +#define GRIB_INVALID_MESSAGE -12 +/** Decoding invalid */ +#define GRIB_DECODING_ERROR -13 +/** Encoding invalid */ +#define GRIB_ENCODING_ERROR -14 +/** Code cannot unpack because of string too small */ +#define GRIB_NO_MORE_IN_SET -15 +/** Problem with calculation of geographic attributes */ +#define GRIB_GEOCALCULUS_PROBLEM -16 +/** Out of memory */ +#define GRIB_OUT_OF_MEMORY -17 +/** Value is read only */ +#define GRIB_READ_ONLY -18 +/** Invalid argument */ +#define GRIB_INVALID_ARGUMENT -19 +/** Null handle */ +#define GRIB_NULL_HANDLE -20 +/** Invalid section number */ +#define GRIB_INVALID_SECTION_NUMBER -21 +/** Value cannot be missing */ +#define GRIB_VALUE_CANNOT_BE_MISSING -22 +/** Wrong message length */ +#define GRIB_WRONG_LENGTH -23 +/** Invalid key type */ +#define GRIB_INVALID_TYPE -24 +/** Unable to set step */ +#define GRIB_WRONG_STEP -25 +/** Wrong units for step (step must be integer) */ +#define GRIB_WRONG_STEP_UNIT -26 +/** Invalid file id */ +#define GRIB_INVALID_FILE -27 +/** Invalid grib id */ +#define GRIB_INVALID_GRIB -28 +/** Invalid index id */ +#define GRIB_INVALID_INDEX -29 +/** Invalid iterator id */ +#define GRIB_INVALID_ITERATOR -30 +/** Invalid keys iterator id */ +#define GRIB_INVALID_KEYS_ITERATOR -31 +/** Invalid nearest id */ +#define GRIB_INVALID_NEAREST -32 +/** Invalid order by */ +#define GRIB_INVALID_ORDERBY -33 +/** Missing a key from the fieldset */ +#define GRIB_MISSING_KEY -34 +/** The point is out of the grid area */ +#define GRIB_OUT_OF_AREA -35 +/** Concept no match */ +#define GRIB_CONCEPT_NO_MATCH -36 +/** Definitions files not found */ +#define GRIB_NO_DEFINITIONS -37 +/** Wrong type while packing */ +#define GRIB_WRONG_TYPE -38 +/** End of resource */ +#define GRIB_END -39 +/** Unable to code a field without values */ +#define GRIB_NO_VALUES -40 +/** Grid description is wrong or inconsistent */ +#define GRIB_WRONG_GRID -41 +/** End of index reached */ +#define GRIB_END_OF_INDEX -42 +/** Null index */ +#define GRIB_NULL_INDEX -43 +/** End of resource reached when reading message */ +#define GRIB_PREMATURE_END_OF_FILE -44 +/** An internal array is too small */ +#define GRIB_INTERNAL_ARRAY_TOO_SMALL -45 +/** Message is too large for the current architecture */ +#define GRIB_MESSAGE_TOO_LARGE -46 +/** Constant field */ +#define GRIB_CONSTANT_FIELD -47 +/** Switch unable to find a matching case */ +#define GRIB_SWITCH_NO_MATCH -48 +/** Underflow */ +#define GRIB_UNDERFLOW -49 +/** Message malformed */ +#define GRIB_MESSAGE_MALFORMED -50 +/** Index is corrupted */ +#define GRIB_CORRUPTED_INDEX -51 +/** Invalid number of bits per value */ +#define GRIB_INVALID_BPV -52 +/** Edition of two messages is different */ +#define GRIB_DIFFERENT_EDITION -53 +/** Value is different */ +#define GRIB_VALUE_DIFFERENT -54 +/** Invalid key value */ +#define GRIB_INVALID_KEY_VALUE -55 +/*! @}*/ +#endif diff --git a/src/grib_api.h.in b/src/grib_api.h.in new file mode 100644 index 000000000..bf6184285 --- /dev/null +++ b/src/grib_api.h.in @@ -0,0 +1,10 @@ +/* This part is automatically generated by ./errors.pl, do not edit */ +#ifndef grib_errors_H +#define grib_errors_H +/*! \defgroup errors Error codes +Error codes returned by the grib_api functions. +*/ +/*! @{*/ +!ERRORS go in here +/*! @}*/ +#endif diff --git a/src/grib_api_fortran.h b/src/grib_api_fortran.h new file mode 100644 index 000000000..68ee082ea --- /dev/null +++ b/src/grib_api_fortran.h @@ -0,0 +1,96 @@ + integer grib_open_file + external grib_open_file + integer grib_close_file + external grib_close_file + integer grib_read_file + external grib_read_file + integer grib_new_from_message + external grib_new_from_message + integer grib_new_from_samples + external grib_new_from_samples + integer grib_new_from_template + external grib_new_from_template + integer grib_clone + external grib_clone + integer grib_new_from_file + external grib_new_from_file + integer grib_multi_support_on + external grib_multi_support_on + integer grib_multi_support_off + external grib_multi_support_off + integer grib_gribex_mode_on + external grib_gribex_mode_on + integer grib_gribex_mode_off + external grib_gribex_mode_off + integer grib_release + external grib_release + integer grib_iterator_new + external grib_iterator_new + integer grib_iterator_next + external grib_iterator_next + integer grib_iterator_delete + external grib_iterator_delete + integer grib_dump + external grib_dump + integer grib_print + external grib_print + integer grib_get_error_string + external grib_get_error_string + integer grib_get_size + external grib_get_size + integer grib_get_int + external grib_get_int + integer grib_get_int_array + external grib_get_int_array + integer grib_set_int_array + external grib_set_int_array + integer grib_set_int + external grib_set_int + integer grib_set_real4 + external grib_set_real4 + integer grib_get_real4 + external grib_get_real4 + integer grib_get_real4_array + external grib_get_real4_array + integer grib_set_real4_array + external grib_set_real4_array + integer grib_set_real8 + external grib_set_real8 + integer grib_get_real8 + external grib_get_real8 + integer grib_get_real8_array + external grib_get_real8_array + integer grib_set_real8_array + external grib_set_real8_array + integer grib_get_string + external grib_get_string + integer grib_set_string + external grib_set_string + integer grib_get_message_size + external grib_get_message_size + integer grib_copy_message + external grib_copy_message + integer grib_write + external grib_write + integer grib_keys_iterator_new + external grib_keys_iterator_new + integer grib_keys_iterator_next + external grib_keys_iterator_next + integer grib_keys_iterator_delete + external grib_keys_iterator_delete + integer grib_skip_computed + external grib_skip_computed + integer grib_skip_coded + external grib_skip_coded + integer grib_skip_edition_specific + external grib_skip_edition_specific + integer grib_skip_duplicates + external grib_skip_duplicates + integer grib_skip_read_only + external grib_skip_read_only + integer grib_skip_function + external grib_skip_function + integer grib_keys_iterator_get_name + external grib_keys_iterator_get_name + integer grib_keys_iterator_rewind + external grib_keys_iterator_rewind diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h new file mode 100644 index 000000000..cf8dae1bb --- /dev/null +++ b/src/grib_api_internal.h @@ -0,0 +1,1202 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/** + include private headers used for all internal functions of + grib_api, not seen by the user of the API + */ + +#ifndef grib_api_internal_H +#define grib_api_internal_H + + +#ifdef __cplusplus +extern "C" { +#endif + +/* cmake config header */ +#ifdef HAVE_GRIB_API_CONFIG_H +#include "grib_api_config.h" +#endif + +/* autoconf config header */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#ifdef _LARGE_FILES +#undef _LARGE_FILE_API +#endif +#endif + +#ifndef GRIB_INLINE +#define GRIB_INLINE +#endif + +#if IS_BIG_ENDIAN + +#if GRIB_MEM_ALIGN +#define FAST_BIG_ENDIAN 0 +#else +#define FAST_BIG_ENDIAN 1 +#endif + +#endif + +#if IEEE_BE +#define IEEE +#else +#if IEEE_LE +#define IEEE +#endif +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_STRING_H +#include +#else +#include +#endif + + +#if GRIB_LINUX_PTHREADS + extern int pthread_mutexattr_settype(pthread_mutexattr_t* attr,int type); +#endif + +#if GRIB_PTHREADS + #include + #define GRIB_PTHREAD_ONCE(a,b) pthread_once(a,b); + #define GRIB_MUTEX_LOCK(a) pthread_mutex_lock(a); + #define GRIB_MUTEX_UNLOCK(a) pthread_mutex_unlock(a); +/* +#define GRIB_MUTEX_LOCK(a) {pthread_mutex_lock(a); printf("MUTEX LOCK %p %s line %d\n",(void*)a,__FILE__,__LINE__);} +#define GRIB_MUTEX_UNLOCK(a) {pthread_mutex_unlock(a);printf("MUTEX UNLOCK %p %s line %d\n",(void*)a,__FILE__,__LINE__);} +*/ +#else + #define GRIB_PTHREAD_ONCE(a,b) + #define GRIB_MUTEX_LOCK(a) + #define GRIB_MUTEX_UNLOCK(a) +#endif + +#if GRIB_LINUX_PTHREADS + /* Note: in newer pthreads PTHREAD_MUTEX_RECURSIVE and PTHREAD_MUTEX_RECURSIVE_NP are enums */ + #if !defined (PTHREAD_MUTEX_RECURSIVE) + #define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP + #endif +#endif + + +#ifndef HAVE_FSEEKO +#define fseeko fseek +#define ftello ftell +#endif + +#define Assert(a) {if(!(a)) grib_fail(#a,__FILE__,__LINE__);} + +#include "grib_api.h" + +#define GRIB_UNKNOWN_VALUE -9999.999 +#define GRIB_KEY_UNDEF "undef" + +#define GRIB_HANDLE_BIG_ECMWF_GRIB1 1 + +#define MAX_FILE_HANDLES_WITH_MULTI 10 +#define ACCESSORS_ARRAY_SIZE 2000 +#define MAX_NUM_CONCEPTS 2000 + +#define GRIB_NAMESPACE 10 + +#define GRIB_MY_BUFFER 0 +#define GRIB_USER_BUFFER 1 + +#define GRIB_REAL_MODE4 4 +#define GRIB_REAL_MODE8 8 + +#define MAX_NUM_SECTIONS 9 + +#define GRIB_DISPOSABLE_MEMORY 0 +#define GRIB_LONG_LASTING_MEMORY 1 + +#define GRIB_LOG_PERROR (1<<10) + +/* ACCESSOR COMPARE FLAGS */ +#define GRIB_COMPARE_NAMES (1<<0) +#define GRIB_COMPARE_TYPES (1<<1) + +typedef struct grib_expression grib_expression; +typedef struct grib_arguments grib_arguments; + +typedef struct grib_action_file grib_action_file; +typedef struct grib_action_file_list grib_action_file_list; +typedef struct grib_block_of_accessors grib_block_of_accessors; +typedef struct grib_buffer grib_buffer; +typedef struct grib_accessor_class grib_accessor_class; +typedef struct grib_action grib_action; +typedef struct grib_action_class grib_action_class; +typedef struct grib_section grib_section; +typedef struct grib_packer grib_packer; +typedef struct grib_codetable grib_codetable; + +typedef struct grib_accessor grib_accessor; +typedef struct grib_iterator_class grib_iterator_class; +typedef struct grib_nearest_class grib_nearest_class; +typedef struct grib_box_class grib_box_class; +typedef struct grib_dumper grib_dumper; +typedef struct grib_dumper_class grib_dumper_class; +typedef struct grib_dependency grib_dependency; +typedef struct string_feed string_feed; + +typedef void (*nearest_init_class_proc) (grib_nearest_class*); +typedef int (*nearest_init_proc) (grib_nearest* i,grib_handle*,grib_arguments*); + +typedef int (*nearest_find_proc) (grib_nearest* nearest, grib_handle* h, + double inlat, double inlon, + unsigned long flags, double* outlats, + double* outlons,double *values, + double* distances, int* indexes,size_t *len); +typedef int (*nearest_destroy_proc) (grib_nearest* nearest); + +typedef void (*box_init_class_proc) (grib_box_class*); +typedef int (*box_destroy_proc) (grib_box*); +typedef int (*box_init_proc) (grib_box* ,grib_handle*,grib_arguments*); +typedef grib_points* (*box_get_points_proc) (grib_box*, double, double, double,double, int*); + +typedef void (*iterator_init_class_proc) (grib_iterator_class*); +typedef int (*iterator_init_proc) (grib_iterator* i,grib_handle*,grib_arguments*); + +typedef int (*iterator_next_proc) (grib_iterator* i, double *lat, double *lon, double *val); +typedef int (*iterator_previous_proc) (grib_iterator* i, double *lat, double *lon, double *val); +typedef int (*iterator_reset_proc) (grib_iterator* i); +typedef int (*iterator_destroy_proc) (grib_iterator* i); +typedef long (*iterator_has_next_proc) (grib_iterator* i); + +typedef int (*grib_pack_proc) (grib_handle* h,const double* in, size_t inlen, void* out, size_t* outlen); +typedef int (*grib_unpack_proc) (grib_handle* h,const void* in, size_t inlen, double* out, size_t* outlen); + + +typedef void (*accessor_destroy_proc) (grib_context* , grib_accessor* ); + +typedef int (*accessor_unpack_long_proc) (grib_accessor*, long*, size_t *len); +typedef int (*accessor_unpack_double_proc) (grib_accessor*, double*, size_t *len); +typedef int (*accessor_unpack_double_element_proc) (grib_accessor*, size_t, double*); +typedef int (*accessor_unpack_double_subarray_proc) (grib_accessor*, double*,size_t , size_t); +typedef int (*accessor_unpack_string_proc) (grib_accessor*, char*, size_t *len); +typedef int (*accessor_unpack_bytes_proc) (grib_accessor*, unsigned char*, size_t *len); +typedef int (*accessor_get_native_type_proc) (grib_accessor*); +typedef int (*accessor_notify_change_proc) (grib_accessor*,grib_accessor*); +typedef void (*accessor_update_size_proc) (grib_accessor*,size_t); +typedef size_t (*accessor_preferred_size_proc) (grib_accessor*,int); +typedef void (*accessor_resize_proc) (grib_accessor*,size_t); + +typedef grib_accessor* (*accessor_next_proc) (grib_accessor*,int); +typedef grib_section* (*accessor_sub_section_proc) (grib_accessor*); + + +typedef int (*accessor_pack_missing_proc) (grib_accessor*); +typedef int (*accessor_pack_is_missing_proc) (grib_accessor*); +typedef int (*accessor_pack_long_proc) (grib_accessor*, const long*, size_t *len); +typedef int (*accessor_pack_double_proc) (grib_accessor*, const double*, size_t *len); +typedef int (*accessor_pack_string_proc) (grib_accessor*, const char*, size_t *len); +typedef int (*accessor_pack_bytes_proc) (grib_accessor*, const unsigned char*, size_t *len); +typedef int (*accessor_pack_expression_proc) (grib_accessor*, grib_expression*); +typedef int (*accessor_clear_proc) (grib_accessor*); + +typedef void (*accessor_init_class_proc) (grib_accessor_class*); + +typedef int (*accessor_compare_proc) (grib_accessor*, grib_accessor*); +typedef size_t (*accessor_string_proc) (grib_accessor*); +typedef long (*accessor_value_proc) (grib_accessor*); +typedef void (*accessor_dump_proc) (grib_accessor*, grib_dumper*); +typedef void (*accessor_init_proc) (grib_accessor*, const long len, grib_arguments*); +typedef void (*accessor_post_init_proc) (grib_accessor*); + +typedef int (*accessor_nearest_proc) (grib_accessor*, double,double*); + +typedef long (*grib_binop_long_proc) (long,long); +typedef long (*grib_unop_long_proc) (long); + +typedef double (*grib_binop_double_proc) (double,double); +typedef double (*grib_unop_double_proc) (double); + +typedef int (*grib_binop_string_proc) (char*,char*); + +typedef struct second_order_packed second_order_packed; +typedef void grib_expression_visit_proc (void* udata, grib_expression *e); + + + +struct grib_key_value_list { + const char* name; + int type; + int size; + long* long_value; + double* double_value; + grib_key_value_list* namespace_value; + char* string_value; + int has_value; + int error; + grib_key_value_list* next; +} ; + + +struct second_order_packed { + unsigned long nbits_per_widths; + unsigned long nbits_per_group_size; + size_t size_of_group_array; + size_t packed_byte_count; + unsigned long *array_of_group_size; + unsigned long *array_of_group_width; + long *array_of_group_refs; +} ; + +/** +* an grib_compression +* Structure supporting the packing and unpacking procedures +* +* @see grib_action_create_data +*/ +struct grib_packer { + const char* name; + grib_pack_proc pack; /** < packing procedure */ + grib_unpack_proc unpack; /** < unpacking procedure */ +}; + + +/* --------------- */ + +typedef struct grib_loader grib_loader; +typedef int (*grib_loader_init_accessor_proc)(grib_loader*,grib_accessor*,grib_arguments*); +typedef int (*grib_loader_lookup_long_proc) (grib_context*,grib_loader*,const char* name, long* value); + +struct grib_loader { + void *data; + grib_loader_init_accessor_proc init_accessor; + grib_loader_lookup_long_proc lookup_long; + int list_is_resized; /** will be true if we resize a list */ + int changing_edition; +}; + +/** +* an action +* Structure supporting the creation of accessor, resulting of a statement during a definition file parsing +* +* @see grib_action_class +*/ +struct grib_action +{ + char *name; /** name of the definition statement */ + char *op; /** operator of the definition statement */ + char *name_space; /** namspace of the definition statement */ + grib_action *next; /** next action in the list */ + grib_action_class *cclass; /** link to the structure containing a specific behavior */ + grib_context *context;/** Context */ + unsigned long flags; + char *defaultkey; /** name of the key used as default if not found */ + grib_arguments* default_value; /** default expression as in .def file */ + char* set; + /* If you had something, don't forget to update grib_action_compile */ +}; + +typedef struct grib_accessor_list grib_accessor_list; + +struct grib_accessor_list { + grib_accessor* accessor; + grib_accessor_list* next; +}; + +/* compile */ + +typedef struct grib_compiler { + int cnt; + int max; + FILE *out; + const char *var; +} grib_compiler; + + + +typedef int (*action_create_accessors_handle_proc) (grib_section* p, grib_action* a, grib_loader* h); +typedef int (*action_notify_change_proc) (grib_action* a, grib_accessor* observer,grib_accessor * observed); + +typedef void (*grib_dump_proc) (grib_action*, FILE*, int ); +typedef void (*grib_xref_proc) (grib_action*, FILE*,const char*); +typedef void (*grib_compile_proc) (grib_action*, grib_compiler*); +typedef void (*action_init_class_proc) (grib_action_class* a); +typedef void (*action_init_proc) (grib_action* a); +typedef void (*action_destroy_proc) (grib_context* context, grib_action* a); +typedef grib_action* (*action_reparse_proc) (grib_action* a,grib_accessor*,int*); +typedef int (*action_execute_proc) (grib_action* a,grib_handle*); + +/** +* an action_class +* Structure supporting the specific behavior of an action +* +* @see grib_action +*/ +struct grib_action_class +{ + grib_action_class **super; /** < link to a more general behavior */ + const char* name; /** < name of the behavior class */ + size_t size; /** < size in bytes of the structure */ + + int inited; + action_init_class_proc init_class; + + action_init_proc init; + action_destroy_proc destroy; + /** < destructor method to realease the memory */ + + grib_dump_proc dump; /** < dump method of the action */ + grib_xref_proc xref; /** < dump method of the action */ + action_create_accessors_handle_proc create_accessor; + /** < method to create the corresponding accessor from a handle*/ + action_notify_change_proc notify_change; + /** < method to create the corresponding accessor from a handle*/ + + action_reparse_proc reparse; + action_execute_proc execute; + + grib_compile_proc compile; /** < compile method of the action */ +}; + + + +/** +* a buffer +* Structure containing the datas of a Grib +*/ +struct grib_buffer +{ + int property; /** < property parameter of buffer */ + int validity; /** < validity parameter of buffer */ + int growable; /** < buffer can be grown */ + size_t length; /** < Buffer length */ + size_t ulength; /** < length used of the buffer */ + unsigned char* data; /** < the data byte array */ +}; + +/** +* an Accessor +* Structure supporting each single data unit and allowing its access +* @see grib_accessor_class +*/ + +#define MAX_ACCESSOR_NAMES 20 + +typedef struct grib_virtual_value grib_virtual_value; + +struct grib_virtual_value { + long lval; + double dval; + char* cval; + int missing; + int length; + int type; +}; + +struct grib_accessor +{ + const char *name ; /** < name of the accessor */ + const char* name_space; /** < namespace to which the accessor belongs */ + grib_action *creator ; /** < action that created the accessor */ + long length ; /** < byte length of the accessor */ + long offset ; /** < offset of the data in the buffer */ + grib_section *parent; /** < section to which the accessor is attached */ + grib_accessor *next ; /** < next accessor in list */ + grib_accessor *previous; /** < next accessor in list */ + grib_accessor_class *cclass; /** < behavior of the accessor */ + unsigned long flags; /** < Various flags */ + grib_section* sub_section; + + const char* all_names[MAX_ACCESSOR_NAMES] ; /** < name of the accessor */ + const char* all_name_spaces[MAX_ACCESSOR_NAMES]; /** < namespace to which the accessor belongs */ + int dirty; + + grib_accessor *same; /** < accessors with the same name */ + long loop; /** < used in lists */ + grib_virtual_value* vvalue; /** < virtual value used when transient flag on **/ + const char* set; + +}; + + +#define GRIB_ACCESSOR_FLAG_READ_ONLY (1<<1) +#define GRIB_ACCESSOR_FLAG_DUMP (1<<2) +#define GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC (1<<3) +#define GRIB_ACCESSOR_FLAG_CAN_BE_MISSING (1<<4) +#define GRIB_ACCESSOR_FLAG_HIDDEN (1<<5) +#define GRIB_ACCESSOR_FLAG_CONSTRAINT (1<<6) +#define GRIB_ACCESSOR_FLAG_OVERRIDE (1<<7) +#define GRIB_ACCESSOR_FLAG_NO_COPY (1<<8) +#define GRIB_ACCESSOR_FLAG_COPY_OK (1<<9) +#define GRIB_ACCESSOR_FLAG_FUNCTION (1<<10) +#define GRIB_ACCESSOR_FLAG_DATA (1<<11) +#define GRIB_ACCESSOR_FLAG_NO_FAIL (1<<12) +#define GRIB_ACCESSOR_FLAG_TRANSIENT (1<<13) +#define GRIB_ACCESSOR_FLAG_STRING_TYPE (1<<14) +#define GRIB_ACCESSOR_FLAG_LONG_TYPE (1<<15) +#define GRIB_ACCESSOR_FLAG_LOWERCASE (1<<16) +/* when adding a flag, update grib_compile_flags*/ + +/** +* a section accessor +* Structure supporting hierarchical naming of the accessors +* @see grib_accessor +*/ +struct grib_section +{ + grib_accessor *owner; + grib_handle *h; /** < Handles of all accessors and buffer */ + grib_accessor *aclength; /** < block of the length of the block */ + grib_block_of_accessors *block; /** < block */ + grib_action *branch; /** < branch that created the bolck */ + size_t length; + size_t padding; +}; + + + +struct grib_iterator_class{ + grib_iterator_class** super; + char* name; + size_t size; + + int inited; + iterator_init_class_proc init_class; + + iterator_init_proc init; + iterator_destroy_proc destroy; + + iterator_next_proc next; + iterator_previous_proc previous; + iterator_reset_proc reset; + iterator_has_next_proc has_next; + +}; + +struct grib_nearest_class{ + grib_nearest_class** super; + char* name; + size_t size; + + int inited; + nearest_init_class_proc init_class; + + nearest_init_proc init; + nearest_destroy_proc destroy; + + nearest_find_proc find; + +}; + +struct grib_box_class{ + grib_box_class** super; + char* name; + size_t size; + int inited; + box_init_class_proc init_class; + box_init_proc init; + box_destroy_proc destroy; + box_get_points_proc get_points; + +}; + +/* --------------- */ +/* --------------- */ +typedef void (*search_all_callback_proc)(grib_accessor*,void* data); +/* --------------- */ + + + +typedef int (*dumper_init_proc) (grib_dumper*); +typedef void (*dumper_dump_proc) (grib_dumper*,grib_accessor*,const char* comment); +typedef void (*dumper_dump_section_proc)(grib_dumper*,grib_accessor*,grib_block_of_accessors* block); +typedef void (*dumper_dump_values_proc) (grib_dumper*,grib_accessor*); +typedef int (*dumper_destroy_proc) (grib_dumper*); +typedef void (*dumper_header_proc) (grib_dumper*,grib_handle*); +typedef void (*dumper_footer_proc) (grib_dumper*,grib_handle*); +typedef void (*dumper_init_class_proc) (grib_dumper_class*); + +struct grib_dumper { + FILE* out; + unsigned long option_flags; + void* arg; + int depth; + grib_handle *handle; + grib_dumper_class *cclass; + }; + +struct grib_dumper_class { + grib_dumper_class** super; + char* name; + size_t size; + int inited; + dumper_init_class_proc init_class; + dumper_init_proc init; + dumper_destroy_proc destroy; + dumper_dump_proc dump_long; + dumper_dump_proc dump_double; + dumper_dump_proc dump_string; + dumper_dump_proc dump_label; + dumper_dump_proc dump_bytes; + dumper_dump_proc dump_bits; + dumper_dump_section_proc dump_section; + dumper_dump_values_proc dump_values; + dumper_header_proc header; + dumper_footer_proc footer; +}; + +struct grib_iterator{ + grib_arguments *args; /** args of iterator */ + grib_handle* h; + long e; /** current element */ + size_t nv; /** number of values */ + double* data; /** data values */ + grib_iterator_class* cclass; + unsigned long flags; +}; + +struct grib_nearest{ + grib_arguments *args; /** args of iterator */ + grib_handle* h; + grib_context* context; + double* values; + size_t values_count; + grib_nearest_class* cclass; + unsigned long flags; + +}; + +struct grib_box { + grib_box_class* cclass; + grib_context* context; + grib_arguments *args; + grib_handle* h; + unsigned long flags; + grib_points* points; +}; + + +struct grib_dependency { + grib_dependency* next; + grib_accessor* observed; + grib_accessor* observer; + int run; +}; + + +struct grib_block_of_accessors +{ + grib_accessor* first; + grib_accessor* last ; +}; + + +typedef struct grib_trie grib_trie; +typedef struct grib_itrie grib_itrie; + + +struct grib_darray { + double* v; + size_t size; + size_t n; + size_t incsize; +} ; + +struct grib_iarray { + long* v; + size_t size; + size_t n; + size_t incsize; +} ; + + +#define MAX_SET_VALUES 10 +#define MAX_ACCESSOR_CACHE 100 + + + +struct grib_handle +{ + grib_context* context; /** < context attached to this handle */ + grib_buffer* buffer ; /** < buffer attached to the handle */ + grib_section* root; /** the root section*/ + grib_section* asserts; /** the assertion section*/ + grib_section* rules; /** the rules section*/ + grib_dependency* dependencies; /** List of dependencies */ + grib_handle* main; /** Used during reparsing */ + grib_handle* kid; /** Used during reparsing */ + grib_loader* loader; /** Used during reparsing */ + int values_stack; + const grib_values* values[MAX_SET_VALUES]; /** Used when setting multiple values at once */ + size_t values_count[MAX_SET_VALUES]; /** Used when setting multiple values at once */ + int dont_trigger; /** Don't notify triggers */ + int partial; /** Not a complete message (just headers) */ + int header_mode; /** Header not jet complete */ + char* gts_header; + size_t gts_header_len; + int use_trie; + int trie_invalid; + grib_accessor* accessors[ACCESSORS_ARRAY_SIZE]; + char* section_offset[MAX_NUM_SECTIONS]; + char* section_length[MAX_NUM_SECTIONS]; + int sections_count; + off_t offset; +}; + +struct grib_multi_handle { + grib_context* context; /** < context attached to this handle */ + grib_buffer* buffer ; /** < buffer attached to the handle */ + size_t offset ; + size_t length ; +}; + + +struct grib_accessor_class +{ + grib_accessor_class **super; + const char* name; + size_t size; + + int inited; + accessor_init_class_proc init_class; + + accessor_init_proc init; + accessor_post_init_proc post_init; + accessor_destroy_proc destroy; + + accessor_dump_proc dump; + accessor_value_proc next_offset; + + accessor_string_proc string_length; + accessor_value_proc value_count; + + accessor_value_proc byte_count; + accessor_value_proc byte_offset; + + accessor_get_native_type_proc get_native_type; + + accessor_sub_section_proc sub_section; + + accessor_pack_missing_proc pack_missing ; + accessor_pack_is_missing_proc is_missing ; + + accessor_pack_long_proc pack_long ; + accessor_unpack_long_proc unpack_long ; + + accessor_pack_double_proc pack_double; + accessor_unpack_double_proc unpack_double; + + accessor_pack_string_proc pack_string; + accessor_unpack_string_proc unpack_string; + + accessor_pack_bytes_proc pack_bytes; + accessor_unpack_bytes_proc unpack_bytes; + + accessor_pack_expression_proc pack_expression; + + accessor_notify_change_proc notify_change; + accessor_update_size_proc update_size; + + accessor_preferred_size_proc preferred_size; + accessor_resize_proc resize; + + accessor_nearest_proc nearest_smaller_value; + accessor_next_proc next; + accessor_compare_proc compare; + accessor_unpack_double_element_proc unpack_double_element; + accessor_unpack_double_subarray_proc unpack_double_subarray; + accessor_clear_proc clear; +}; + +typedef struct grib_multi_support grib_multi_support; + +struct grib_multi_support { + FILE* file; + size_t offset; + unsigned char* message; + size_t message_length; + unsigned char* sections[8]; + unsigned char* bitmap_section; + size_t bitmap_section_length; + size_t sections_length[9]; + int section_number; + grib_multi_support* next; +}; + +/* Concepts */ +typedef struct grib_concept_condition grib_concept_condition; + +struct grib_concept_condition { + grib_concept_condition* next; + char* name; + grib_expression* expression; +}; + +typedef struct grib_concept_value_name grib_concept_value_name; +struct grib_concept_value_name { + grib_concept_value_name* next; + char* name; +} ; + +typedef struct grib_concept_value grib_concept_value; + +struct grib_concept_value { + grib_concept_value* next; + char* name; + grib_concept_condition* conditions; + grib_trie* index; +}; + +/* ----------*/ + +struct grib_context +{ + int inited; + int debug; + int write_on_fail; + int no_abort; + int io_buffer_size; + int no_big_group_split; + int no_spd; + int keep_matrix; + char* grib_definition_files_path; + char* grib_samples_path; + char* grib_concept_path; + + grib_action_file_list* grib_reader; + void* user_data; + int real_mode; + + grib_free_proc free_mem; + grib_malloc_proc alloc_mem; + grib_realloc_proc realloc_mem; + + grib_free_proc free_persistent_mem; + grib_malloc_proc alloc_persistent_mem; + + grib_free_proc free_buffer_mem; + grib_malloc_proc alloc_buffer_mem; + grib_realloc_proc realloc_buffer_mem; + + grib_data_read_proc read; + grib_data_write_proc write; + grib_data_tell_proc tell; + grib_data_seek_proc seek; + grib_data_eof_proc eof; + + grib_log_proc output_log; + grib_print_proc print; + + grib_codetable* codetable; + char* outfilename; + int multi_support_on; + grib_multi_support* multi_support; + grib_string_list* grib_definition_files_dir; + int handle_file_count; + int handle_total_count; + off_t message_file_offset; + int no_fail_on_wrong_length; + int gts_header_on; + int gribex_mode_on; + int large_constant_fields; + grib_itrie* keys; + int keys_count; + grib_itrie* concepts_index; + int concepts_count; + grib_concept_value* concepts[MAX_NUM_CONCEPTS]; + grib_trie* def_files; + + grib_string_list* blacklist; + int ieee_packing; + FILE* log_stream; + grib_trie* classes; +#if GRIB_PTHREADS + pthread_mutex_t mutex; +#endif + +}; + +/* file_pool */ +extern grib_string_list grib_file_not_found; + +typedef struct grib_file grib_file; +typedef struct grib_file_pool grib_file_pool; + +struct grib_file { + grib_context* context; + char* name; + FILE* handle; + char* mode; + char* buffer; + long refcount; + grib_file* next; + short id; +} ; + +struct grib_file_pool { + grib_context* context; + grib_file* first; + grib_file* current; + size_t size; + int number_of_opened_files; + int max_opened_files; +}; + +/* fieldset */ +typedef struct grib_field grib_field; +typedef struct grib_column grib_column; +typedef struct grib_fields grib_fields; +typedef struct grib_int_array grib_int_array; + +struct grib_where { + grib_context* context; + char* string; +}; + +struct grib_column { + grib_context* context; + int refcount; + char* name; + int type; + size_t size; + size_t values_array_size; + long* long_values; + double* double_values; + char** string_values; + int* errors; +} ; + +struct grib_order_by { + char* key; + int idkey; + int mode; + grib_order_by* next; +} ; + +#ifdef NEWDB +struct grib_query { + grib_context* context; + char* where_string; + grib_order_by* order_by; +}; +#endif + +struct grib_field { + grib_file* file; + off_t offset; + long length; + grib_field* next; +}; + +struct grib_int_array { + grib_context* context; + size_t size; + int* el; +} ; + +#ifndef NEWDB +struct grib_fieldset { + grib_context* context; + grib_int_array* filter; + grib_int_array* order; + size_t fields_array_size; + size_t size; + grib_column* columns; + size_t columns_size; + grib_where* where; + grib_order_by* order_by; + long current; + grib_field** fields; +}; +#endif + +#ifdef NEWDB +/* grib db */ +struct grib_db { + grib_context* context; + size_t size; + size_t fields_array_size; + grib_column* columns; + size_t columns_size; + grib_field** fields; +}; + +struct grib_fieldset { + grib_context* context; + grib_db* db; + grib_int_array* filter; + grib_int_array* order; + size_t size; + grib_query* query; + long current; +}; +#endif + +/* concept index structures */ + +typedef struct grib_concept_index_key grib_concept_index_key; +typedef struct grib_concept_index grib_concept_index; +typedef struct grib_conditions_tree grib_conditions_tree; +typedef struct grib_concept_entry grib_concept_entry; +typedef struct grib_concept_key grib_concept_key; + +struct grib_concept_index_entry { + char* name; + char* value; + int type; + grib_concept_entry* next; +}; + +struct grib_concept_index_key { + char* name; + int type; + grib_concept_key* next; +}; + +struct grib_concept_index { + grib_context* context; + grib_concept_key* keys; + grib_conditions_tree* conditions; +}; + +struct grib_conditions_tree { + char* value; + void* object; + grib_conditions_tree* next; + grib_conditions_tree* next_key; +}; + +/* index structures */ + +#define STRING_VALUE_LEN 100 + +typedef struct grib_field_tree grib_field_tree; + +struct grib_field_tree { + grib_field* field; + char* value; + grib_field_tree* next; + grib_field_tree* next_level; +}; + +typedef struct grib_index_key grib_index_key; + +struct grib_index_key { + char* name; + int type; + char value[STRING_VALUE_LEN]; + grib_string_list* values; + grib_string_list* current; + int values_count; + int count; + grib_index_key* next; +}; + +typedef struct grib_field_list grib_field_list; +struct grib_field_list { + grib_field* field; + grib_field_list* next; +}; + + +struct grib_index { + grib_context* context; + grib_index_key* keys; + int rewind; + int orderby; + grib_index_key* orederby_keys; + grib_field_tree* fields; + grib_field_list* fieldset; + grib_field_list* current; + grib_file* files; + int count; +}; + +/* header compute */ +typedef struct grib_math grib_math; + +struct grib_math{ + struct grib_math *left; + struct grib_math *right; + char *name; + int arity; +}; + +typedef double (*mathproc)(); +typedef int (*funcproc)(grib_math*,mathproc); + +typedef struct func { + char *name; + funcproc addr; + mathproc proc; + int arity; + char *info; +} func; + +/* action file */ +struct grib_action_file +{ + char* filename ; + grib_action* root ; + grib_action_file* next ; +}; + +struct grib_action_file_list +{ + grib_action_file * first; + grib_action_file * last ; +}; + +#include "grib_expression.h" + +/* ----------*/ +/* md5 */ +typedef unsigned long cvs_uint32; + +struct cvs_MD5Context { + cvs_uint32 buf[4]; + cvs_uint32 bits[2]; + unsigned char in[64]; +}; +/* --- */ + +typedef struct grib_rule_entry grib_rule_entry; + +struct grib_rule_entry { + grib_rule_entry *next; + char *name; + grib_expression *value; +}; + +typedef struct grib_rule grib_rule; + +struct grib_rule { + grib_rule *next; + grib_expression *condition; + grib_rule_entry *entries; +}; + +typedef struct grib_case grib_case; + +struct grib_case { + grib_arguments* values; + grib_action* action; + grib_case* next; +}; + +/* ----------*/ + +typedef struct code_table_entry { + char* abbreviation; + char* title; + char* units; +} code_table_entry; + +struct grib_codetable { + char* filename[2]; + char* recomposed_name[2]; + grib_codetable* next; + size_t size; + code_table_entry entries[1]; +}; + +#if GRIB_TIMER +typedef struct grib_timer { + + struct timeval start_; + double timer_; + int active_; + char *name_; + int count_; + long total_; + + int elapsed_; + double cpu_; + double total_cpu_; + + char *statname_; + grib_context* context; + + struct grib_timer *next_; +} grib_timer; +#else +typedef struct grib_timer { + char nothing; +} grib_timer; +#endif + +typedef struct j2k_encode_helper { + + size_t buffer_size; + + long width; + long height; + long bits_per_value; + + float compression; + + long no_values; + const double *values; + double reference_value; + double divisor; + double decimal; + + long jpeg_length; + unsigned char* jpeg_buffer; + +} j2k_encode_helper; + + +#include "grib_api_prototypes.h" + + +#ifdef __cplusplus +} +#endif +#endif +/* This part is automatically generated by ./errors.pl, do not edit */ +#ifndef grib_errors_internal_H +#define grib_errors_internal_H +/** Value mismatch */ +#define GRIB_VALUE_MISMATCH 1 +/** double values are different */ +#define GRIB_DOUBLE_VALUE_MISMATCH 2 +/** long values are different */ +#define GRIB_LONG_VALUE_MISMATCH 3 +/** byte values are different */ +#define GRIB_BYTE_VALUE_MISMATCH 4 +/** string values are different */ +#define GRIB_STRING_VALUE_MISMATCH 5 +/** Offset mismatch */ +#define GRIB_OFFSET_MISMATCH 6 +/** Count mismatch */ +#define GRIB_COUNT_MISMATCH 7 +/** Name mismatch */ +#define GRIB_NAME_MISMATCH 8 +/** Type mismatch */ +#define GRIB_TYPE_MISMATCH 9 +/** Type and value mismatch */ +#define GRIB_TYPE_AND_VALUE_MISMATCH 10 +/** Unable to compare accessors */ +#define GRIB_UNABLE_TO_COMPARE_ACCESSORS 11 +/** Unable to reset iterator */ +#define GRIB_UNABLE_TO_RESET_ITERATOR 12 +/** Assertion failure */ +#define GRIB_ASSERTION_FAILURE 13 +#endif diff --git a/src/grib_api_internal.h.in b/src/grib_api_internal.h.in new file mode 100644 index 000000000..68ccde4c7 --- /dev/null +++ b/src/grib_api_internal.h.in @@ -0,0 +1,5 @@ +/* This part is automatically generated by ./errors.pl, do not edit */ +#ifndef grib_errors_internal_H +#define grib_errors_internal_H +!ERRORS go in here +#endif diff --git a/src/grib_api_prototypes.h b/src/grib_api_prototypes.h new file mode 100644 index 000000000..441334fd8 --- /dev/null +++ b/src/grib_api_prototypes.h @@ -0,0 +1,1118 @@ + +/* action.c */ +void grib_dump(grib_action *a, FILE *f, int l); +void grib_xref(grib_action *a, FILE *f, const char *path); +void grib_free_action(grib_context *context, grib_action *a); +int grib_create_accessor(grib_section *p, grib_action *a, grib_loader *h); +int grib_action_notify_change(grib_action *a, grib_accessor *observer, grib_accessor *observed); +grib_action *grib_action_reparse(grib_action *a, grib_accessor *acc, int *doit); +int grib_action_execute(grib_action *a, grib_handle *h); +void grib_dump_action_branch(FILE *out, grib_action *a, int decay); +void grib_dump_action_tree(grib_context *ctx, FILE *out); +void grib_xref_action_branch(FILE *out, grib_action *a, const char *path); +void grib_compile(grib_action *a, grib_compiler *compiler); + +/* action_class_alias.c */ +grib_action *grib_action_create_alias(grib_context *context, const char *name, const char *arg1, const char *name_space, int flags); + +/* action_class_gen.c */ +grib_action *grib_action_create_gen(grib_context *context, const char *name, const char *op, const long len, grib_arguments *params, grib_arguments *default_value, int flags, const char *name_space, const char *set); + +/* action_class_if.c */ +grib_action *grib_action_create_if(grib_context *context, grib_expression *expression, grib_action *block_true, grib_action *block_false, int transient); + +/* action_class_switch.c */ +grib_action *grib_action_create_switch(grib_context *context, grib_arguments *args, grib_case *Case, grib_action *Default); +grib_case *grib_case_new(grib_context *c, grib_arguments *values, grib_action *action); + +/* grib_accessor_class_g1fcperiod.c */ + +/* grib_accessor_class_g1end_of_interval_monthly.c */ + +/* grib_accessor_class_mars_param.c */ + +/* action_class_section.c */ + +/* action_class_list.c */ +grib_action *grib_action_create_list(grib_context *context, const char *name, grib_expression *expression, grib_action *block); + +/* action_class_while.c */ +grib_action *grib_action_create_while(grib_context *context, grib_expression *expression, grib_action *block); + +/* action_class_put.c */ +grib_action *grib_action_create_put(grib_context *context, const char *name, grib_arguments *args); + +/* action_class_meta.c */ +grib_action *grib_action_create_meta(grib_context *context, const char *name, const char *op, grib_arguments *params, grib_arguments *default_value, unsigned long flags, const char *name_space); + +/* action_class_remove.c */ +grib_action *grib_action_create_remove(grib_context *context, grib_arguments *args); + +/* action_class_assert.c */ +grib_action *grib_action_create_assert(grib_context *context, grib_expression *expression); + +/* action_class_template.c */ +grib_action *grib_action_create_template(grib_context *context, int nofail, const char *name, const char *arg1); +grib_action *get_empty_template(grib_context *c, int *err); + +/* action_class_trigger.c */ +grib_action *grib_action_create_trigger(grib_context *context, grib_arguments *args, grib_action *block); + +/* action_class_when.c */ +grib_action *grib_action_create_when(grib_context *context, grib_expression *expression, grib_action *block_true, grib_action *block_false); + +/* action_class_concept.c */ +grib_action *grib_action_create_concept(grib_context *context, const char *name, grib_concept_value *concept, const char *basename, const char *name_space, const char *defaultkey, const char *masterDir, const char *localDir, const char *ecmfDir, int flags, int nofail); +const char *grib_concept_evaluate(grib_handle *h, grib_action *act); +int grib_concept_apply(grib_handle *h, grib_action *act, const char *name); + +/* action_class_set.c */ +grib_action *grib_action_create_set(grib_context *context, const char *name, grib_expression *expression, int nofail); + +/* action_class_set_darray.c */ +grib_action *grib_action_create_set_darray(grib_context *context, const char *name, grib_darray *darray); + +/* action_class_set_iarray.c */ +grib_action *grib_action_create_set_iarray(grib_context *context, const char *name, grib_iarray *iarray); + +/* action_class_noop.c */ +grib_action *grib_action_create_noop(grib_context *context, const char *fname); + +/* action_class_write.c */ +grib_action *grib_action_create_write(grib_context *context, const char *name, int append, int padtomultiple); + +/* action_class_print.c */ +grib_action *grib_action_create_print(grib_context *context, const char *name, char *outname); + +/* action_class_variable.c */ +grib_action *grib_action_create_variable(grib_context *context, const char *name, const char *op, const long len, grib_arguments *params, grib_arguments *default_value, int flags, const char *name_space); + +/* action_class_modify.c */ +grib_action *grib_action_create_modify(grib_context *context, const char *name, long flags); + +/* grib_accessor.c */ +void grib_print_accessor(grib_accessor *a, grib_dumper *f); +int grib_pack_missing(grib_accessor *a); +int grib_pack_zero(grib_accessor *a); +int grib_is_missing_internal(grib_accessor *a); +int grib_pack_double(grib_accessor *a, const double *v, size_t *len); +int grib_pack_expression(grib_accessor *a, grib_expression *e); +int grib_pack_string(grib_accessor *a, const char *v, size_t *len); +int grib_pack_long(grib_accessor *a, const long *v, size_t *len); +int grib_pack_bytes(grib_accessor *a, const unsigned char *v, size_t *len); +int grib_unpack_bytes(grib_accessor *a, unsigned char *v, size_t *len); +int grib_unpack_double_subarray(grib_accessor *a, double *v, size_t start, size_t len); +int grib_unpack_double(grib_accessor *a, double *v, size_t *len); +int grib_unpack_double_element(grib_accessor *a, size_t i, double *v); +int grib_unpack_string(grib_accessor *a, char *v, size_t *len); +int grib_unpack_long(grib_accessor *a, long *v, size_t *len); +long grib_accessor_get_native_type(grib_accessor *a); +long grib_get_next_position_offset(grib_accessor *a); +long grib_string_length(grib_accessor *a); +long grib_byte_offset(grib_accessor *a); +long grib_byte_count(grib_accessor *a); +long grib_value_count(grib_accessor *a); +int grib_accessor_notify_change(grib_accessor *a, grib_accessor *changed); +void grib_init_accessor(grib_accessor *a, const long len, grib_arguments *args); +void grib_free_accessor(grib_context *ct, grib_accessor *a); +void grib_update_size(grib_accessor *a, size_t len); +int grib_nearest_smaller_value(grib_accessor *a, double val, double *nearest); +size_t grib_preferred_size(grib_accessor *a, int from_handle); +grib_accessor *grib_next_accessor(grib_accessor *a); +void grib_resize(grib_accessor *a, size_t new_size); +int grib_compare_accessors(grib_accessor *a1, grib_accessor *a2, int compare_flags); +const char *grib_get_type_name(int type); + +/* grib_concept.c */ +grib_concept_value *grib_concept_value_new(grib_context *c, const char *name, grib_concept_condition *conditions); +void grib_concept_value_delete(grib_context *c, grib_concept_value *v); +grib_concept_condition *grib_concept_condition_new(grib_context *c, const char *name, grib_expression *expression); +void grib_concept_condition_delete(grib_context *c, grib_concept_condition *v); + +/* grib_darray.c */ +grib_darray *grib_darray_new(grib_context *c, size_t size, size_t incsize); +grib_darray *grib_darray_resize(grib_context *c, grib_darray *v); +grib_darray *grib_darray_push(grib_context *c, grib_darray *v, double val); +void grib_darray_delete(grib_context *c, grib_darray *v); + +/* grib_iarray.c */ +grib_iarray *grib_iarray_new(grib_context *c, size_t size, size_t incsize); +grib_iarray *grib_iarray_resize(grib_context *c, grib_iarray *v); +grib_iarray *grib_iarray_push(grib_context *c, grib_iarray *v, long val); +void grib_iarray_delete(grib_context *c, grib_iarray *v); + +/* grib_accessor_class_array.c */ + +/* grib_accessor_class_assert.c */ + +/* grib_accessor_class_ascii.c */ + +/* grib_accessor_class_bit.c */ + +/* grib_accessor_class_bitmap.c */ + +/* grib_accessor_class_bits.c */ + +/* grib_accessor_class_bits_per_value.c */ + +/* grib_accessor_class_g1bitmap.c */ + +/* grib_accessor_class_g2bitmap.c */ + +/* grib_accessor_class_concept.c */ + +/* grib_accessor_class_decimal_precision.c */ + +/* grib_accessor_class_divdouble.c */ + +/* grib_accessor_class_budgdate.c */ + +/* grib_accessor_class_validity_date.c */ + +/* grib_accessor_class_validity_time.c */ + +/* grib_accessor_class_bytes.c */ + +/* grib_accessor_class.c */ +grib_section *grib_create_root_section(const grib_context *context, grib_handle *h); +grib_accessor *grib_accessor_factory(grib_section *p, grib_action *creator, const long len, grib_arguments *params); +void grib_push_accessor(grib_accessor *a, grib_block_of_accessors *l); +void grib_section_post_init(grib_section *s); +void grib_section_adjust_sizes(grib_section *s, int update, int depth); +int grib_get_block_length(grib_section *s, size_t *l); +grib_accessor *find_paddings(grib_section *s); +void grib_update_paddings(grib_section *s); + +/* grib_accessor_class_change_scanning_direction.c */ + +/* grib_accessor_class_codeflag.c */ + +/* grib_accessor_class_codetable.c */ +void grib_codetable_delete(grib_context *c); + +/* grib_accessor_class_codetable_units.c */ + +/* grib_accessor_class_codetable_title.c */ + +/* grib_accessor_class_count_file.c */ + +/* grib_accessor_class_count_total.c */ + +/* grib_accessor_class_double.c */ + +/* grib_accessor_class_element.c */ + +/* grib_accessor_class_evaluate.c */ + +/* grib_accessor_class_g1area.c */ + +/* grib_accessor_class_g1date.c */ + +/* grib_accessor_class_g1monthlydate.c */ + +/* grib_accessor_class_library_version.c */ + +/* grib_accessor_class_when.c */ + +/* grib_accessor_class_g1verificationdate.c */ + +/* grib_accessor_class_g1day_of_the_year_date.c */ + +/* grib_accessor_class_g1_half_byte_codeflag.c */ + +/* grib_accessor_class_g1forecastmonth.c */ + +/* grib_accessor_class_g1step_range.c */ +int grib_g1_step_get_steps(grib_accessor *a, long *start, long *end); +int grib_g1_step_apply_units(long *start, long *end, long *step_unit, long *P1, long *P2, long *unit, const int max, const int instant); + +/* grib_accessor_class_g2step_range.c */ + +/* grib_accessor_class_data_g22order_packing.c */ + +/* grib_accessor_class_mars_step.c */ + +/* grib_accessor_class_g1param.c */ + +/* grib_accessor_class_g1p1p2.c */ + +/* grib_accessor_class_g1_increment.c */ + +/* grib_accessor_class_latlon_increment.c */ + +/* grib_accessor_class_g2date.c */ + +/* grib_accessor_class_g2level.c */ + +/* grib_accessor_class_g2step.c */ + +/* grib_accessor_class_g2end_step.c */ + +/* grib_accessor_class_g2latlon.c */ + +/* grib_accessor_class_g2lon.c */ + +/* grib_accessor_class_global_gaussian.c */ + +/* grib_accessor_class_gen.c */ + +/* grib_accessor_class_gts_header.c */ + +/* grib_accessor_class_ifs_param.c */ + +/* grib_accessor_class_julian_day.c */ + +/* grib_accessor_class_latlonvalues.c */ + +/* grib_accessor_class_latitudes.c */ + +/* grib_accessor_class_longitudes.c */ + +/* grib_accessor_class_missing.c */ + +/* grib_accessor_class_offset_file.c */ + +/* grib_accessor_class_scale.c */ + +/* grib_accessor_class_from_scale_factor_scaled_value.c */ + +/* grib_accessor_class_times.c */ + +/* grib_accessor_class_forward.c */ + +/* grib_accessor_class_g2bitmap_present.c */ + +/* grib_accessor_class_ibmfloat.c */ + +/* grib_accessor_class_ieeefloat.c */ + +/* grib_accessor_class_constant.c */ + +/* grib_accessor_class_iterator.c */ +grib_iterator *grib_iterator_new(grib_handle *h, unsigned long flags, int *error); + +/* grib_accessor_class_message.c */ + +/* grib_accessor_class_nearest.c */ +grib_nearest *grib_nearest_new(grib_handle *h, int *error); + +/* grib_accessor_class_box.c */ +grib_box *grib_box_new(grib_handle *h, int *error); + +/* grib_accessor_class_ksec1expver.c */ + +/* grib_accessor_class_laplacian.c */ + +/* grib_accessor_class_label.c */ + +/* grib_accessor_class_long.c */ + +/* grib_accessor_class_lookup.c */ + +/* grib_accessor_class_octect_number.c */ + +/* grib_accessor_class_headers_only.c */ + +/* grib_accessor_class_padding.c */ + +/* grib_accessor_class_pad.c */ + +/* grib_accessor_class_padto.c */ + +/* grib_accessor_class_padtoeven.c */ + +/* grib_accessor_class_padtomultiple.c */ + +/* grib_accessor_class_section_padding.c */ + +/* grib_accessor_class_section_pointer.c */ + +/* grib_accessor_class_position.c */ + +/* grib_accessor_class_signed.c */ + +/* grib_accessor_class_signed_bits.c */ + +/* grib_accessor_class_section.c */ + +/* grib_accessor_class_step_in_units.c */ + +/* grib_accessor_class_section_length.c */ + +/* grib_accessor_class_g1_message_length.c */ +int grib_get_g1_message_size(grib_handle *h, grib_accessor *tl, grib_accessor *s4, long *total_length, long *sec4_len); + +/* grib_accessor_class_g1_section4_length.c */ + +/* grib_accessor_class_size.c */ + +/* grib_accessor_class_scale_values.c */ + +/* grib_accessor_class_offset_values.c */ + +/* grib_accessor_class_sprintf.c */ + +/* grib_accessor_class_round.c */ + +/* grib_accessor_class_spectral_truncation.c */ + +/* grib_accessor_class_time.c */ + +/* grib_accessor_class_transient.c */ + +/* grib_accessor_class_g1_half_byte_codeflag.c */ + +/* grib_accessor_class_values.c */ + +/* grib_accessor_class_simple_packing_error.c */ + +/* grib_accessor_class_data_simple_packing.c */ + +/* grib_accessor_class_count_missing.c */ + +/* grib_accessor_class_data_sh_packed.c */ + +/* grib_accessor_class_data_sh_unpacked.c */ + +/* grib_accessor_class_number_of_values_data_raw_packing.c */ + +/* grib_accessor_class_data_g1simple_packing.c */ + +/* grib_accessor_class_data_g1shsimple_packing.c */ + +/* grib_accessor_class_data_shsimple_packing.c */ + +/* grib_accessor_class_data_constant_field.c */ + +/* grib_accessor_class_data_dummy_field.c */ + +/* grib_2order_packer_simple.c */ +void grib_free_second_order_groups(grib_context *c, second_order_packed *sp); +second_order_packed *grib_get_second_order_groups(grib_context *c, const unsigned long *vals, size_t len); + +/* grib_accessor_class_variable.c */ + +/* grib_accessor_class_second_order_bits_per_value.c */ + +/* grib_accessor_class_data_g2simple_packing.c */ + +/* grib_accessor_class_data_g2simple_packing_with_preprocessing.c */ + +/* grib_accessor_class_data_g2shsimple_packing.c */ + +/* grib_accessor_class_data_g2complex_packing.c */ + +/* grib_accessor_class_data_2order_packing.c */ + +/* grib_accessor_class_data_2order_packing_count.c */ + +/* grib_accessor_class_data_g1second_order_row_by_row_packing.c */ + +/* grib_accessor_class_data_g1second_order_constant_width_packing.c */ + +/* grib_accessor_class_data_g1second_order_general_packing.c */ + +/* grib_accessor_class_data_g1second_order_general_extended_packing.c */ + +/* grib_accessor_class_g2grid.c */ + +/* grib_accessor_class_data_apply_bitmap.c */ + +/* grib_accessor_class_data_apply_boustrophedonic.c */ + +/* grib_accessor_class_data_secondary_bitmap.c */ + +/* grib_accessor_class_data_g1secondary_bitmap.c */ + +/* grib_accessor_class_data_g2secondary_bitmap.c */ + +/* grib_accessor_class_data_jpeg2000_packing.c */ + +/* grib_accessor_class_data_png_packing.c */ + +/* grib_accessor_class_data_raw_packing.c */ + +/* grib_accessor_class_data_complex_packing.c */ + +/* grib_accessor_class_data_g1complex_packing.c */ + +/* grib_accessor_class_gds_not_present_bitmap.c */ + +/* grib_accessor_class_data_apply_gdsnotpresent.c */ + +/* grib_accessor_class_gds_is_present.c */ + +/* grib_accessor_class_select_step_template.c */ + +/* grib_accessor_class_local_definition.c */ + +/* grib_accessor_class_g2_eps.c */ + +/* grib_accessor_class_g2_mars_labeling.c */ + +/* grib_accessor_class_md5.c */ + +/* grib_jasper_encoding.c */ +int grib_jasper_decode(grib_context *c, unsigned char *buf, size_t *buflen, double *values, size_t *no_values); +int grib_jasper_encode(grib_context *c, j2k_encode_helper *helper); +int grib_jasper_decode(grib_context *c, unsigned char *buf, size_t *buflen, double *val, size_t *n_vals); +int grib_jasper_encode(grib_context *c, j2k_encode_helper *helper); + +/* grib_openjpeg_encoding.c */ +int grib_openjpeg_encode(grib_context *c, j2k_encode_helper *helper); +int grib_openjpeg_decode(grib_context *c, unsigned char *buf, size_t *buflen, double *val, size_t *n_vals); +int grib_openjpeg_decode(grib_context *c, unsigned char *buf, size_t *buflen, double *val, size_t *n_vals); +int grib_openjpeg_encode(grib_context *c, j2k_encode_helper *helper); + +/* action_class_set_missing.c */ +grib_action *grib_action_create_set_missing(grib_context *context, const char *name); + +/* grib_accessor_class_number_of_points.c */ + +/* grib_accessor_class_suppressed.c */ + +/* grib_index.c */ +int grib_index_compress(grib_index *index); +int grib_read_uchar(FILE *fh, unsigned char *val); +int grib_read_short(FILE *fh, short *val); +int grib_read_long(FILE *fh, long *val); +int grib_read_unsigned_long(FILE *fh, unsigned long *val); +int grib_write_uchar(FILE *fh, unsigned char val); +int grib_write_short(FILE *fh, short val); +int grib_write_long(FILE *fh, long val); +int grib_write_unsigned_long(FILE *fh, unsigned long val); +int grib_write_string(FILE *fh, const char *s); +int grib_write_identifier(FILE *fh); +int grib_write_null_marker(FILE *fh); +int grib_write_not_null_marker(FILE *fh); +char *grib_read_string(grib_context *c, FILE *fh, int *err); +grib_field_tree *grib_read_field_tree(grib_context *c, FILE *fh, grib_file **files, int *err); +grib_index *grib_index_new(grib_context *c, const char *key, int *err); +void grib_index_delete(grib_index *index); +int grib_index_write(grib_index *index, const char *filename); +grib_index *grib_index_read(grib_context *c, const char *filename, int *err); +int grib_index_search_same(grib_index *index, grib_handle *h); +int grib_index_add_file(grib_index *index, const char *filename); +grib_index *grib_index_new_from_file(grib_context *c, char *filename, const char *keys, int *err); +int grib_index_get_size(grib_index *index, const char *key, size_t *size); +int grib_index_get_string(grib_index *index, const char *key, char **values, size_t *size); +int grib_index_get_long(grib_index *index, const char *key, long *values, size_t *size); +int grib_index_get_double(grib_index *index, const char *key, double *values, size_t *size); +int grib_index_select_long(grib_index *index, const char *skey, long value); +int grib_index_select_double(grib_index *index, const char *skey, double value); +int grib_index_select_string(grib_index *index, const char *skey, char *value); +grib_handle *grib_index_get_handle(grib_field *field, int *err); +void grib_index_dump(grib_index *index); +char *grib_get_field_file(grib_index *index, off_t *offset); +grib_handle *grib_handle_new_from_index(grib_index *index, int *err); +void grib_index_rewind(grib_index *index); +int grib_index_search(grib_index *index, grib_index_key *keys); + +/* grib_accessor_class_number_of_points_gaussian.c */ + +/* grib_accessor_class_number_of_values.c */ + +/* grib_accessor_class_number_of_coded_values.c */ + +/* grib_accessor_class_g1number_of_coded_values_sh_complex.c */ + +/* grib_accessor_class_g1number_of_coded_values_sh_simple.c */ + +/* grib_accessor_class_dirty.c */ + +/* grib_accessor_class_statistics.c */ + +/* grib_accessor_class_statistics_spectral.c */ + +/* grib_accessor_class_unsigned.c */ + +/* grib_accessor_class_unsigned_bits.c */ + +/* grib_accessor_class_spd.c */ + +/* grib_accessor_class_sum.c */ + +/* grib_accessor_class_vector.c */ + +/* grib_accessor_class_long_vector.c */ + +/* grib_gaussian_reduced.c */ +void grib_get_reduced_row(long pl, double lon_first, double lon_last, long *npoints, long *ilon_first, long *ilon_last); + +/* grib_accessor_class_abstract_vector.c */ + +/* grib_accessor_class_abstract_long_vector.c */ + +/* grib_loader_from_handle.c */ +int grib_lookup_long_from_handle(grib_context *gc, grib_loader *loader, const char *name, long *value); +int grib_init_accessor_from_handle(grib_loader *loader, grib_accessor *ga, grib_arguments *default_value); + +/* grib_bits.c */ +unsigned long grib_decode_unsigned_byte_long(const unsigned char *p, long o, int l); +long grib_decode_signed_long(const unsigned char *p, long o, int l); +int grib_encode_signed_long(unsigned char *p, long val, long o, int l); +int grib_get_bit(const unsigned char *p, long bitp); +void grib_set_bit(unsigned char *p, long bitp, int val); +long grib_decode_signed_longb(const unsigned char *p, long *bitp, long nbits); +int grib_encode_signed_longb(unsigned char *p, long val, long *bitp, long nb); + +/* grib_timer.c */ +double proc_cpu(void); +char *timename(double t); +grib_timer *grib_get_timer(grib_context *c, const char *name, const char *statname, int elapsed); +int grib_timer_start(grib_timer *t); +int grib_timer_stop(grib_timer *t, long total); +double grib_timer_value(grib_timer *t); +const char *bytename(double bytes); +void grib_timer_print(grib_timer *t); +void grib_timer_partial_rate(grib_timer *t, double start, long total); +void grib_print_all_timers(void); +void grib_reset_all_timers(void); +grib_timer *grib_get_timer(grib_context *c, const char *name, const char *statname, int elapsed); +int grib_timer_start(grib_timer *t); +int grib_timer_stop(grib_timer *t, long total); +double grib_timer_value(grib_timer *t); +void grib_timer_print(grib_timer *t); +void grib_timer_partial_rate(grib_timer *t, double start, long total); +void grib_print_all_timers(void); +void grib_reset_all_timers(void); + +/* grib_ibmfloat.c */ +unsigned long grib_ibm_to_long(double x); +double grib_ibmfloat_error(double x); +double grib_long_to_ibm(unsigned long x); +double grib_ibm_table_e(unsigned long e); +double grib_ibm_table_v(unsigned long e); +unsigned long grib_ibm_nearest_smaller_to_long(double x); +int grib_nearest_smaller_ibm_float(double a, double *ret); + +/* grib_ieeefloat.c */ +double grib_ieee_table_e(unsigned long e); +double grib_ieee_table_v(unsigned long e); +unsigned long grib_ieee_to_long(double x); +double grib_ieeefloat_error(double x); +double grib_long_to_ieee(unsigned long x); +unsigned long grib_ieee_nearest_smaller_to_long(double x); +int grib_nearest_smaller_ieee_float(double a, double *ret); +double grib_ieeefloat_error(double x); +double grib_long_to_ieee(unsigned long x); +int grib_nearest_smaller_ieee_float(double a, double *x); +unsigned long grib_ieee_to_long(double x); +unsigned long grib_ieee64_to_long(double x); +double grib_long_to_ieee64(unsigned long x); +int grib_ieee_decode_array(grib_context *c, unsigned char *buf, size_t nvals, int bytes, double *val); +int grib_ieee_decode_array(grib_context *c, unsigned char *buf, size_t nvals, int bytes, double *val); +int grib_ieee_encode_array(grib_context *c, double *val, size_t nvals, int bytes, unsigned char *buf); +int grib_ieee_encode_array(grib_context *c, double *val, size_t nvals, int bytes, unsigned char *buf); + +/* grib_accessor_class_reference_value_error.c */ + +/* grib_memory.c */ +void *grib_transient_malloc(const grib_context *c, size_t s); +void *grib_transient_realloc(const grib_context *c, void *p, size_t s); +void grib_transient_free(const grib_context *c, void *p); +void *grib_permanent_malloc(const grib_context *c, size_t s); +void *grib_permanent_realloc(const grib_context *c, void *p, size_t s); +void grib_permanent_free(const grib_context *c, void *p); +void *grib_buffer_malloc(const grib_context *c, size_t s); +void grib_buffer_free(const grib_context *c, void *p); +void *grib_buffer_realloc(const grib_context *c, void *p, size_t s); + +/* grib_buffer.c */ +void grib_get_buffer_ownership(const grib_context *c, grib_buffer *b); +grib_buffer *grib_create_growable_buffer(const grib_context *c); +grib_buffer *grib_new_buffer(const grib_context *c, unsigned char *data, size_t buflen); +void grib_buffer_delete(const grib_context *c, grib_buffer *b); +void grib_grow_buffer(const grib_context *c, grib_buffer *b, size_t new_size); +void grib_buffer_set_ulength(const grib_context *c, grib_buffer *b, size_t length); +void grib_recompute_sections_lengths(grib_section *s); +void grib_buffer_replace(grib_accessor *a, const unsigned char *data, size_t newsize, int update_lengths, int update_paddings); +void grib_update_sections_lengths(grib_handle *h); + +/* grib_dumper.c */ +void grib_init_dumper(grib_dumper *d); +void grib_dumper_delete(grib_dumper *d); +void grib_dump_long(grib_dumper *d, grib_accessor *a, const char *comment); +void grib_dump_double(grib_dumper *d, grib_accessor *a, const char *comment); +void grib_dump_string(grib_dumper *d, grib_accessor *a, const char *comment); +void grib_dump_label(grib_dumper *d, grib_accessor *a, const char *comment); +void grib_dump_bytes(grib_dumper *d, grib_accessor *a, const char *comment); +void grib_dump_bits(grib_dumper *d, grib_accessor *a, const char *comment); +void grib_dump_section(grib_dumper *d, grib_accessor *a, grib_block_of_accessors *block); +void grib_dump_values(grib_dumper *d, grib_accessor *a); +void grib_dump_header(grib_dumper *d, grib_handle *h); +void grib_dump_footer(grib_dumper *d, grib_handle *h); + +/* grib_dumper_class_serialize.c */ + +/* grib_dumper_class_debug.c */ + +/* grib_dumper_class_default.c */ + +/* grib_dumper_class_keys.c */ + +/* grib_dumper_class_c_code.c */ + +/* grib_dumper_class_wmo.c */ + +/* grib_dumper_class.c */ +grib_dumper *grib_dumper_factory(const char *op, grib_handle *h, FILE *out, unsigned long option_flags, void *arg); +void grib_dump_accessors_block(grib_dumper *dumper, grib_block_of_accessors *block); +int grib_print(grib_handle *h, const char *name, grib_dumper *d); +void grib_dump_content(grib_handle *h, FILE *f, const char *mode, unsigned long option_flags, void *data); + +/* grib_context.c */ +size_t grib_context_read(const grib_context *c, void *ptr, size_t size, void *stream); +off_t grib_context_tell(const grib_context *c, void *stream); +int grib_context_seek(const grib_context *c, off_t offset, int whence, void *stream); +int grib_context_eof(const grib_context *c, void *stream); +size_t grib_context_write(const grib_context *c, const void *ptr, size_t size, void *stream); +void grib_context_set_print_proc(grib_context *c, grib_print_proc p); +void grib_context_set_debug(grib_context *c, int mode); +void grib_context_set_logging_proc(grib_context *c, grib_log_proc p); +long grib_get_api_version(void); +void grib_print_api_version(FILE *out); +grib_context *grib_context_get_default(void); +grib_context *grib_context_new(grib_context *parent); +char *grib_context_full_path(grib_context *c, const char *basename); +void grib_context_free(const grib_context *c, void *p); +void grib_context_free_persistent(const grib_context *c, void *p); +void grib_context_reset(grib_context *c); +void grib_context_delete(grib_context *c); +void *grib_context_malloc_persistent(const grib_context *c, size_t size); +char *grib_context_strdup_persistent(const grib_context *c, const char *s); +void *grib_context_malloc_clear_persistent(const grib_context *c, size_t size); +void *grib_context_malloc(const grib_context *c, size_t size); +void *grib_context_realloc(const grib_context *c, void *p, size_t size); +char *grib_context_strdup(const grib_context *c, const char *s); +void *grib_context_malloc_clear(const grib_context *c, size_t size); +void *grib_context_buffer_malloc(const grib_context *c, size_t size); +void grib_context_buffer_free(const grib_context *c, void *p); +void *grib_context_buffer_realloc(const grib_context *c, void *p, size_t size); +void *grib_context_buffer_malloc_clear(const grib_context *c, size_t size); +void grib_context_set_memory_proc(grib_context *c, grib_malloc_proc m, grib_free_proc f, grib_realloc_proc r); +void grib_context_set_persistent_memory_proc(grib_context *c, grib_malloc_proc m, grib_free_proc f); +void grib_context_set_buffer_memory_proc(grib_context *c, grib_malloc_proc m, grib_free_proc f, grib_realloc_proc r); +void grib_context_set_data_accessing_proc(grib_context *c, grib_data_read_proc read, grib_data_write_proc write, grib_data_tell_proc tell); +void grib_context_log(const grib_context *c, int level, const char *fmt, ...); +void grib_context_print(const grib_context *c, void *descriptor, const char *fmt, ...); + +/* grib_date.c */ +int grib_julian_to_datetime(double jd, long *year, long *month, long *day, long *hour, long *minute, long *second); +int grib_datetime_to_julian(long year, long month, long day, long hour, long minute, long second, double *jd); +long grib_julian_to_date(long jdate); +long grib_date_to_julian(long ddate); + +/* grib_fieldset.c */ +int grib_fieldset_new_column(grib_fieldset *set, int id, char *key, int type); +int grib_fieldset_column_copy_from_handle(grib_handle *h, grib_fieldset *set, int i); +grib_fieldset *grib_fieldset_new_from_files(grib_context *c, char *filenames[], int nfiles, char **keys, int nkeys, char *where_string, char *order_by_string, int *err); +int grib_fieldset_apply_where(grib_fieldset *set, const char *where_string); +int grib_fieldset_apply_order_by(grib_fieldset *set, const char *order_by_string); +void grib_fieldset_delete_order_by(grib_context *c, grib_order_by *order_by); +void grib_fieldset_delete(grib_fieldset *set); +int grib_fieldset_add(grib_fieldset *set, char *filename); +void grib_fieldset_rewind(grib_fieldset *set); +grib_handle *grib_fieldset_next_handle(grib_fieldset *set, int *err); +int grib_fieldset_count(grib_fieldset *set); +grib_handle *grib_fieldset_retrieve(grib_fieldset *set, int i, int *err); + +/* grib_filepool.c */ +void grib_file_pool_clean(void); +grib_file *grib_file_pool_get_files(void); +int grib_file_pool_read(grib_context *c, FILE *fh); +int grib_file_pool_write(FILE *fh); +grib_file *grib_file_open(const char *filename, const char *mode, int *err); +void grib_file_close(const char *filename, int *err); +void grib_file_close_all(int *err); +grib_file *grib_get_file(const char *filename, int *err); +grib_file *grib_find_file(short id); +grib_file *grib_file_new(grib_context *c, const char *name, int *err); +void grib_file_delete(grib_file *file); + +/* grib_geography.c */ +int grib_get_gaussian_latitudes(long trunc, double *lats); + +/* grib_handle.c */ +grib_section *grib_section_create(grib_handle *h, grib_accessor *owner); +void grib_swap_sections(grib_section *old, grib_section *new); +void grib_empty_section(grib_context *c, grib_section *b); +void grib_section_delete(grib_context *c, grib_section *b); +int grib_handle_delete(grib_handle *h); +grib_handle *grib_new_handle(grib_context *c); +grib_handle *grib_handle_new_from_template(grib_context *c, const char *name); +grib_handle *grib_handle_new_from_samples(grib_context *c, const char *name); +int grib_write_message(grib_handle *h, const char *file, const char *mode); +grib_handle *grib_handle_clone(grib_handle *h); +grib_handle *grib_handle_new_from_message_copy(grib_context *c, const void *data, size_t size); +grib_handle *grib_handle_new_from_partial_message_copy(grib_context *c, const void *data, size_t size); +grib_handle *grib_handle_new_from_partial_message(grib_context *c, void *data, size_t buflen); +grib_handle *grib_handle_new_from_message(grib_context *c, void *data, size_t buflen); +grib_handle *grib_handle_new_from_multi_message(grib_context *c, void **data, size_t *buflen, int *error); +grib_handle *grib_handle_new_from_file(grib_context *c, FILE *f, int *error); +grib_handle *grib_handle_new_from_nc_file(grib_context *c, const char *file, int *error); +grib_handle *grib_handle_headers_only_new_from_file(grib_context *c, FILE *f, int *error); +grib_handle *grib_gts_handle_new_from_file(grib_context *c, FILE *f, int *error); +grib_handle *grib_bufr_handle_new_from_file(grib_context *c, FILE *f, int *error); +grib_multi_handle *grib_multi_handle_new(grib_context *c); +int grib_multi_handle_delete(grib_multi_handle *h); +int grib_multi_handle_append(grib_handle *h, int start_section, grib_multi_handle *mh); +int grib_multi_handle_write(grib_multi_handle *h, FILE *f); +int grib_get_partial_message(grib_handle *h, const void **msg, size_t *len, int start_section); +int grib_get_partial_message_copy(grib_handle *h, void *message, size_t *len, int start_section); +int grib_get_message_copy(grib_handle *h, void *message, size_t *len); +int grib_get_message(grib_handle *h, const void **msg, size_t *size); +int grib_get_message_headers(grib_handle *h, const void **msg, size_t *size); +grib_handle *grib_handle_new(grib_context *c); +grib_action *grib_action_from_filter(const char *filter); +int grib_handle_apply_action(grib_handle *h, grib_action *a); +int grib_handle_prepare_action(grib_handle *h, grib_action *a); +void grib_multi_support_on(grib_context *c); +void grib_multi_support_off(grib_context *c); +void grib_gts_header_on(grib_context *c); +void grib_gts_header_off(grib_context *c); +int grib_get_gribex_mode(grib_context *c); +void grib_gribex_mode_on(grib_context *c); +void grib_gribex_mode_off(grib_context *c); +void grib_multi_support_reset(grib_context *c); + +/* grib_header_compute.c */ +void print_math(grib_math *m); +grib_math *grib_math_clone(grib_context *c, grib_math *m); +void grib_math_delete(grib_context *c, grib_math *m); +grib_math *grib_math_new(grib_context *c, const char *formula, int *err); + +/* grib_hash_keys.c */ +struct grib_keys_hash *grib_keys_hash_get(const char *str, unsigned int len); +grib_itrie *grib_hash_keys_new(grib_context *c, int *count); +void grib_hash_keys_delete(grib_itrie *t); +int grib_hash_keys_get_id(grib_itrie *t, const char *key); +int grib_hash_keys_insert(grib_itrie *t, const char *key); +int grib_hash_keys_get_size(grib_itrie *t); + +/* grib_io.c */ +off_t stdio_tell(void *data); +int stdio_seek(void *data, off_t len); +size_t stdio_read(void *data, void *buf, size_t len, int *err); +int wmo_read_any_from_file(FILE *f, void *buffer, size_t *len); +int wmo_read_grib_from_file(FILE *f, void *buffer, size_t *len); +int wmo_read_bufr_from_file(FILE *f, void *buffer, size_t *len); +int wmo_read_gts_from_file(FILE *f, void *buffer, size_t *len); +int wmo_read_any_from_stream(void *stream_data, long (*stream_proc )(void *, void *buffer, long len ), void *buffer, size_t *len); +void *wmo_read_gts_from_file_malloc(FILE *f, size_t *size, int *err); +void *wmo_read_any_from_file_malloc(FILE *f, size_t *size, int *err); +void *wmo_read_grib_from_file_malloc(FILE *f, size_t *size, int *err); +void *wmo_read_bufr_from_file_malloc(FILE *f, size_t *size, int *err); +int grib_read_any_headers_only_from_file_alloc(grib_context *ctx, FILE *f, void **buffer, size_t *length, off_t *offset); +int grib_read_any_from_file_alloc(grib_context *ctx, FILE *f, void **buffer, size_t *length); +int grib_read_any_headers_only_from_file(grib_context *ctx, FILE *f, void *buffer, size_t *len); +int grib_read_any_from_file(grib_context *ctx, FILE *f, void *buffer, size_t *len); +int grib_read_any_from_memory_alloc(grib_context *ctx, unsigned char **data, size_t *data_length, void **buffer, size_t *length); +int grib_read_any_from_memory(grib_context *ctx, unsigned char **data, size_t *data_length, void *buffer, size_t *len); +int grib_count_in_file(grib_context *c, FILE *f, int *n); + +/* grib_trie.c */ +grib_trie *grib_trie_new(grib_context *c); +void grib_trie_delete(grib_trie *t); +void grib_trie_clear(grib_trie *t); +void *grib_trie_insert(grib_trie *t, const char *key, void *data); +void *grib_trie_insert_no_replace(grib_trie *t, const char *key, void *data); +void *grib_trie_get(grib_trie *t, const char *key); + +/* grib_itrie.c */ +grib_itrie *grib_itrie_new(grib_context *c, int *count); +void grib_itrie_delete(grib_itrie *t); +int grib_itrie_get_id(grib_itrie *t, const char *key); +int grib_itrie_insert(grib_itrie *t, const char *key); +int grib_itrie_get_size(grib_itrie *t); + +/* grib_rules.c */ +grib_rule_entry *grib_new_rule_entry(grib_context *c, const char *name, grib_expression *expression); +grib_rule *grib_new_rule(grib_context *c, grib_expression *condition, grib_rule_entry *entries); + +/* grib_keys_iterator.c */ +grib_keys_iterator *grib_keys_iterator_new(grib_handle *h, unsigned long filter_flags, char *name_space); +int grib_keys_iterator_set_flags(grib_keys_iterator *ki, unsigned long flags); +int grib_keys_iterator_rewind(grib_keys_iterator *ki); +int grib_keys_iterator_next(grib_keys_iterator *kiter); +const char *grib_keys_iterator_get_name(grib_keys_iterator *kiter); +grib_accessor *grib_keys_iterator_get_accessor(grib_keys_iterator *kiter); +int grib_keys_iterator_delete(grib_keys_iterator *kiter); +int grib_keys_iterator_get_long(grib_keys_iterator *kiter, long *v, size_t *len); +int grib_keys_iterator_get_double(grib_keys_iterator *kiter, double *v, size_t *len); +int grib_keys_iterator_get_string(grib_keys_iterator *kiter, char *v, size_t *len); +int grib_keys_iterator_get_bytes(grib_keys_iterator *kiter, unsigned char *v, size_t *len); +int grib_keys_iterator_get_native_type(grib_keys_iterator *kiter); + +/* grib_parse_utils.c */ +int grib_recompose_name(grib_handle *h, grib_accessor *observer, const char *uname, char *fname, int fail); +int grib_recompose_print(grib_handle *h, grib_accessor *observer, const char *uname, char *fname, int fail, FILE *out); +grib_action_file *grib_find_action_file(const char *fname, grib_action_file_list *afl); +void grib_push_action_file(grib_action_file *af, grib_action_file_list *afl); +int grib_yywrap(void); +int grib_yyerror(const char *msg); +void grib_parser_include(const char *fname); +grib_concept_value *grib_parse_concept_file(grib_context *gc, const char *filename); +grib_rule *grib_parse_rules_file(grib_context *gc, const char *filename); +grib_action *grib_parse_file(grib_context *gc, const char *filename); +int grib_type_to_int(char id); + +/* grib_query.c */ +grib_accessor *grib_find_accessor_fast(grib_handle *h, const char *name); +grib_accessor *grib_find_accessor(grib_handle *h, const char *name); +int grib_find_all_accessors(grib_handle *h, const char *name, search_all_callback_proc callback, void *data); + +/* grib_scaling.c */ +double grib_power(long s, long n); +long grib_get_binary_scale_fact(double max, double min, long bpval, int *ret); +long grib_get_bits_per_value(double max, double min, long binary_scale_factor); +long grib_get_decimal_scale_fact(double max, double min, long bpval, long binary_scale); + +/* grib_templates.c */ +grib_handle *grib_internal_template(grib_context *c, const char *name); +grib_handle *grib_internal_template(grib_context *c, const char *name); +grib_handle *grib_external_template(grib_context *c, const char *name); +char *grib_external_template_path(grib_context *c, const char *name); + +/* grib_dependency.c */ +void grib_dependency_add(grib_accessor *observer, grib_accessor *observed); +void grib_dependency_remove_observed(grib_accessor *observed); +int grib_dependency_notify_change(grib_accessor *observed); +void grib_dependency_remove_observer(grib_accessor *observer); +void grib_dependency_observe_expression(grib_accessor *observer, grib_expression *e); +void grib_dependency_observe_arguments(grib_accessor *observer, grib_arguments *a); + +/* grib_value.c */ +int grib_set_expression(grib_handle *h, const char *name, grib_expression *e); +int grib_set_expression_internal(grib_handle *h, const char *name, grib_expression *e); +int grib_set_long_internal(grib_handle *h, const char *name, long val); +int grib_set_long(grib_handle *h, const char *name, long val); +int grib_set_double_internal(grib_handle *h, const char *name, double val); +int grib_copy_namespace(grib_handle *dest, const char *name, grib_handle *src); +int grib_set_double(grib_handle *h, const char *name, double val); +int grib_set_string_internal(grib_handle *h, const char *name, const char *val, size_t *length); +int grib_set_string(grib_handle *h, const char *name, const char *val, size_t *length); +int grib_set_bytes_internal(grib_handle *h, const char *name, const unsigned char *val, size_t *length); +int grib_set_bytes(grib_handle *h, const char *name, const unsigned char *val, size_t *length); +int grib_clear(grib_handle *h, const char *name); +int grib_set_missing_internal(grib_handle *h, const char *name); +int grib_set_missing(grib_handle *h, const char *name); +int grib_is_missing(grib_handle *h, const char *name, int *err); +int grib_set_flag(grib_handle *h, const char *name, unsigned long flag); +int grib_set_double_array_internal(grib_handle *h, const char *name, const double *val, size_t length); +int grib_set_double_array(grib_handle *h, const char *name, const double *val, size_t length); +int grib_set_long_array_internal(grib_handle *h, const char *name, const long *val, size_t length); +int grib_set_long_array(grib_handle *h, const char *name, const long *val, size_t length); +int grib_get_long_internal(grib_handle *h, const char *name, long *val); +int grib_get_long(grib_handle *h, const char *name, long *val); +int grib_get_double_internal(grib_handle *h, const char *name, double *val); +int grib_get_double(grib_handle *h, const char *name, double *val); +int grib_get_double_element_internal(grib_handle *h, const char *name, int i, double *val); +int grib_get_double_element(grib_handle *h, const char *name, int i, double *val); +int grib_points_get_values(grib_handle *h, grib_points *points, double *val); +int grib_get_double_elements(grib_handle *h, const char *name, int *i, long len, double *val); +int grib_get_string_internal(grib_handle *h, const char *name, char *val, size_t *length); +int grib_get_string(grib_handle *h, const char *name, char *val, size_t *length); +int grib_get_bytes_internal(grib_handle *h, const char *name, unsigned char *val, size_t *length); +int grib_get_bytes(grib_handle *h, const char *name, unsigned char *val, size_t *length); +int grib_get_native_type(grib_handle *h, const char *name, int *type); +const char *grib_get_accessor_class_name(grib_handle *h, const char *name); +int _grib_get_double_array_internal(grib_handle *h, grib_accessor *a, double *val, size_t buffer_len, size_t *decoded_length); +int grib_get_double_array_internal(grib_handle *h, const char *name, double *val, size_t *length); +int grib_get_double_array(grib_handle *h, const char *name, double *val, size_t *length); +int grib_get_string_length(grib_handle *h, const char *name, size_t *size); +int grib_get_size(grib_handle *h, const char *name, size_t *size); +int grib_get_count(grib_handle *h, const char *name, size_t *size); +int _grib_get_size(grib_handle *h, grib_accessor *a, size_t *size); +int grib_get_offset(grib_handle *h, const char *key, size_t *val); +int _grib_get_long_array_internal(grib_handle *h, grib_accessor *a, long *val, size_t buffer_len, size_t *decoded_length); +int grib_get_long_array_internal(grib_handle *h, const char *name, long *val, size_t *length); +int grib_get_long_array(grib_handle *h, const char *name, long *val, size_t *length); +grib_key_value_list *grib_key_value_list_clone(grib_context *c, grib_key_value_list *list); +void grib_key_value_list_delete(grib_context *c, grib_key_value_list *kvl); +int grib_get_key_value_list(grib_handle *h, grib_key_value_list *list); +int grib_get_values(grib_handle *h, grib_values *args, size_t count); +int grib_set_values(grib_handle *h, grib_values *args, size_t count); +int grib_get_nearest_smaller_value(grib_handle *h, const char *name, double val, double *nearest); +void grib_print_values(grib_values *values, int count); +int grib_values_check(grib_handle *h, grib_values *values, int count); + +/* grib_errors.c */ +const char *grib_get_error_message(int code); +void grib_check(const char *call, const char *file, int line, int e, const char *msg); +void grib_fail(const char *expr, const char *file, int line); + +/* grib_expression_class_binop.c */ +grib_expression *new_binop_expression(grib_context *c, grib_binop_long_proc long_func, grib_binop_double_proc double_func, grib_expression *left, grib_expression *right); + +/* grib_expression_class_true.c */ +grib_expression *new_true_expression(grib_context *c); + +/* grib_expression_class_string_compare.c */ +grib_expression *new_string_compare_expression(grib_context *c, grib_expression *left, grib_expression *right); + +/* grib_expression_class_unop.c */ +grib_expression *new_unop_expression(grib_context *c, grib_unop_long_proc long_func, grib_unop_double_proc double_func, grib_expression *exp); + +/* grib_expression_class_functor.c */ +grib_expression *new_func_expression(grib_context *c, const char *name, grib_arguments *args); + +/* grib_expression_class_accessor.c */ +grib_expression *new_accessor_expression(grib_context *c, const char *name); + +/* grib_expression_class_long.c */ +grib_expression *new_long_expression(grib_context *c, long value); + +/* grib_expression_class_double.c */ +grib_expression *new_double_expression(grib_context *c, double value); + +/* grib_expression_class_string.c */ +grib_expression *new_string_expression(grib_context *c, const char *value); + +/* grib_box.c */ +grib_points *grib_box_get_points(grib_box *box, double north, double west, double south, double east, int *err); +int grib_box_init(grib_box *box, grib_handle *h, grib_arguments *args); +int grib_box_delete(grib_box *box); +grib_points *grib_points_new(grib_context *c, size_t size); +void grib_points_delete(grib_points *points); + +/* grib_box_class.c */ +grib_box *grib_box_factory(grib_handle *h, grib_arguments *args); + +/* grib_box_class_gen.c */ + +/* grib_box_class_regular_gaussian.c */ + +/* grib_box_class_reduced_gaussian.c */ + +/* grib_nearest.c */ +int grib_nearest_find(grib_nearest *nearest, grib_handle *h, double inlat, double inlon, unsigned long flags, double *outlats, double *outlons, double *values, double *distances, int *indexes, size_t *len); +int grib_nearest_init(grib_nearest *i, grib_handle *h, grib_arguments *args); +int grib_nearest_delete(grib_nearest *i); +void grib_binary_search(double xx[], const unsigned long n, double x, int *ju, int *jl); +double grib_nearest_distance(double radius, double lon1, double lat1, double lon2, double lat2); +int grib_nearest_find_multiple(grib_handle *h, int is_lsm, double *inlats, double *inlons, long npoints, double *outlats, double *outlons, double *values, double *distances, int *indexes); + +/* grib_nearest_class.c */ +grib_nearest *grib_nearest_factory(grib_handle *h, grib_arguments *args); + +/* grib_nearest_class_gen.c */ + +/* grib_nearest_class_regular.c */ + +/* grib_nearest_class_reduced.c */ + +/* grib_nearest_class_latlon_reduced.c */ + +/* grib_nearest_class_sh.c */ + +/* grib_iterator_class_polar_stereographic.c */ + +/* grib_iterator_class_lambert_azimuthal_equal_area.c */ +/* grib_iterator_class_lambert_conformal.c */ + +/* grib_iterator.c */ +int grib_get_data(grib_handle *h, double *lats, double *lons, double *values, size_t *size); +int grib_iterator_next(grib_iterator *i, double *lat, double *lon, double *value); +int grib_iterator_has_next(grib_iterator *i); +int grib_iterator_previous(grib_iterator *i, double *lat, double *lon, double *value); +int grib_iterator_reset(grib_iterator *i); +int grib_iterator_init(grib_iterator *i, grib_handle *h, grib_arguments *args); +int grib_iterator_delete(grib_iterator *i); + +/* grib_iterator_class.c */ +grib_iterator *grib_iterator_factory(grib_handle *h, grib_arguments *args, unsigned long flags, int *ret); + +/* grib_iterator_class_gaussian.c */ + +/* grib_iterator_class_gaussian_reduced.c */ + +/* grib_iterator_class_latlon_reduced.c */ + +/* grib_iterator_class_gen.c */ + +/* grib_iterator_class_latlon.c */ + +/* grib_iterator_class_regular.c */ + +/* grib_expression.c */ +int grib_expression_native_type(grib_handle *h, grib_expression *g); +int grib_expression_evaluate_long(grib_handle *h, grib_expression *g, long *result); +int grib_expression_evaluate_double(grib_handle *h, grib_expression *g, double *result); +const char *grib_expression_evaluate_string(grib_handle *h, grib_expression *g, char *buf, size_t *size, int *err); +const char *grib_expression_get_name(grib_expression *g); +void grib_expression_print(grib_context *ctx, grib_expression *g, grib_handle *f); +void grib_expression_compile(grib_expression *g, grib_compiler *f); +void grib_expression_free(grib_context *ctx, grib_expression *g); +void grib_expression_add_dependency(grib_expression *e, grib_accessor *observer); +int grib_expression_set_value(grib_handle *h, grib_expression *g, grib_values *v); +grib_arguments *grib_arguments_new(grib_context *c, grib_expression *g, grib_arguments *n); +void grib_arguments_free(grib_context *c, grib_arguments *g); +void grib_arguments_print(grib_context *c, grib_arguments *g, grib_handle *f); +const char *grib_arguments_get_name(grib_handle *h, grib_arguments *args, int n); +const char *grib_arguments_get_string(grib_handle *h, grib_arguments *args, int n); +long grib_arguments_get_long(grib_handle *h, grib_arguments *args, int n); +double grib_arguments_get_double(grib_handle *h, grib_arguments *args, int n); +grib_expression *grib_arguments_get_expression(grib_handle *h, grib_arguments *args, int n); + +/* grib_util.c */ +grib_handle *grib_util_sections_copy(grib_handle *hfrom, grib_handle *hto, int what, int *err); +grib_string_list *grib_util_get_param_id(const char *mars_param); +grib_string_list *grib_util_get_mars_param(const char *param_id); +grib_handle *grib_util_set_spec(grib_handle *h, const grib_util_grid_spec *spec, const grib_util_packing_spec *packing_spec, int flags, const double *data_values, size_t data_values_count, int *err); +int grib_moments(grib_handle *h, double east, double north, double west, double south, int order, double *moments, long *count); +int parse_keyval_string(char* grib_tool, char* arg, int values_required, int default_type, grib_values values[], int* count); + +/* compile.c */ +void grib_compile_flags(grib_compiler *c, long flags); +void grib_compile_action_branch(grib_action *a, grib_compiler *c, char *name); +void grib_compile_expression(grib_expression *e, grib_compiler *compiler); +void grib_compile_arguments(grib_arguments *a, grib_compiler *compiler); + +/* functions.c */ +long grib_op_eq(long a, long b); +long grib_op_ne(long a, long b); +long grib_op_lt(long a, long b); +long grib_op_gt(long a, long b); +long grib_op_and(long a, long b); +long grib_op_or(long a, long b); +long grib_op_ge(long a, long b); +long grib_op_le(long a, long b); +long grib_op_bit(long a, long b); +long grib_op_bitoff(long a, long b); +long grib_op_not(long a); +long grib_op_neg(long a); +double grib_op_neg_d(double a); +long grib_op_pow(long a, long b); +long grib_op_add(long a, long b); +long grib_op_sub(long a, long b); +long grib_op_div(long a, long b); +long grib_op_mul(long a, long b); +long grib_op_modulo(long a, long b); +double grib_op_mul_d(double a, double b); +double grib_op_div_d(double a, double b); +double grib_op_add_d(double a, double b); +double grib_op_sub_d(double a, double b); +double grib_op_eq_d(double a, double b); +double grib_op_ne_d(double a, double b); +double grib_op_lt_d(double a, double b); +double grib_op_gt_d(double a, double b); +double grib_op_ge_d(double a, double b); +double grib_op_le_d(double a, double b); +const char *grib_binop_long_proc_name(grib_binop_long_proc proc); +const char *grib_binop_double_proc_name(grib_binop_double_proc proc); +const char *grib_unop_long_proc_name(grib_unop_long_proc proc); +const char *grib_unop_double_proc_name(grib_unop_double_proc proc); + +/* grib_bits_any_endian.c */ +unsigned long grib_decode_unsigned_long(const unsigned char *p, long *bitp, long nbits); +int grib_encode_unsigned_long(unsigned char *p, unsigned long val, long *bitp, long nbits); +int grib_encode_unsigned_longb(unsigned char *p, unsigned long val, long *bitp, long nb); + +/* grib_bits_any_endian_simple.c */ +int grib_decode_long_array(const unsigned char *p, long *bitp, long bitsPerValue, size_t n_vals, long *val); +int grib_decode_double_array(const unsigned char *p, long *bitp, long bitsPerValue, double reference_value, double s, double d, size_t n_vals, double *val); +int grib_decode_double_array_complex(const unsigned char *p, long *bitp, long nbits, double reference_value, double s, double *d, size_t size, double *val); +int grib_encode_long_array(size_t n_vals, const long *val, long bits_per_value, unsigned char *p, long *off); +int grib_encode_double_array(size_t n_vals, const double *val, long bits_per_value, double reference_value, double d, double divisor, unsigned char *p, long *off); +int grib_encode_double_array_complex(size_t n_vals, double *val, long nbits, double reference_value, double *scal, double d, double divisor, unsigned char *p, long *bitp); diff --git a/src/grib_bits.c b/src/grib_bits.c new file mode 100644 index 000000000..ac16274f2 --- /dev/null +++ b/src/grib_bits.c @@ -0,0 +1,171 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile - 19.06.2007 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +#if OMP_PACKING +#include "omp.h" +#endif + +#define mask1(i) (1u << i) +#define test(n,i) !!((n) & mask1(i)) + +long GRIB_MASK = -1; /* Mask of sword bits */ + +# define VALUE(p,q,b) \ + (((b)==max_nbits ? GRIB_MASK : ~(GRIB_MASK<<(b))) & ((p)>>(max_nbits-((q)+(b))))) + +# define MASKVALUE(q,b) \ + ((b)==max_nbits ? GRIB_MASK : (~(GRIB_MASK<<(b))<<(max_nbits-((q)+(b))))) + + +static unsigned long dmasks[] = { 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, }; + +static int max_nbits = sizeof(unsigned long)*8; + +unsigned long grib_decode_unsigned_byte_long(const unsigned char* p, long o, int l) +{ + long accum = 0; + int i = 0; + unsigned char b = p[o++]; + + Assert(l <= max_nbits); + + accum <<= 8; + accum |= b ; + + for ( i=1; i> (l*8-(8*(i+1))); + p[o++] = accum ; + } + + if (sign) p[off] |= 128; + + return GRIB_SUCCESS; +} + +static void grib_set_bit_on( unsigned char* p, long* bitp){ + + p += *bitp/8; + *p |= (1u << (7-((*bitp)%8))); + (*bitp)++; +} + +static void grib_set_bit_off( unsigned char* p, long* bitp){ + + p += *bitp/8; + *p &= ~(1u << (7-((*bitp)%8))); + (*bitp)++; +} + +int grib_get_bit(const unsigned char* p, long bitp){ + p += (bitp >> 3); + return (*p&(1<<(7-(bitp%8)))); +} + +void grib_set_bit( unsigned char* p, long bitp, int val){ + + if(val == 0) grib_set_bit_off(p,&bitp); + else grib_set_bit_on(p,&bitp); +} + +long grib_decode_signed_longb(const unsigned char* p, long *bitp, long nbits) +{ + int sign = grib_get_bit(p, *bitp); + long val = 0; + + Assert(nbits <= max_nbits); + + *bitp += 1; + + val = grib_decode_unsigned_long( p, bitp, nbits-1); + + if (sign)val = -val; + + + return val; +} + +int grib_encode_signed_longb(unsigned char* p, long val ,long *bitp, long nb) +{ + short sign = val < 0; + + Assert(nb <= max_nbits); + + if(sign) val = -val; + + if(sign) + grib_set_bit_on (p, bitp); + else + grib_set_bit_off(p, bitp); + + return grib_encode_unsigned_longb(p, val ,bitp, nb-1); +} + +#if FAST_BIG_ENDIAN + +#include "grib_bits_fast_big_endian.c" + +#else + +#include "grib_bits_any_endian.c" + +#endif + diff --git a/src/grib_bits_any_endian.c b/src/grib_bits_any_endian.c new file mode 100644 index 000000000..01473b3f5 --- /dev/null +++ b/src/grib_bits_any_endian.c @@ -0,0 +1,167 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile - 19.06.2007 * + * * + ***************************************************************************/ + + +unsigned long grib_decode_unsigned_long(const unsigned char* p, long *bitp, long nbits) +{ + int i; + long ret = 0; + long o = *bitp/8; + int l = nbits/8; + + if (nbits==0) return 0; + + if(nbits > max_nbits) + { + int bits = nbits; + int mod = bits % max_nbits; + + if(mod != 0) + { + int e=grib_decode_unsigned_long(p,bitp,mod); + Assert( e == 0); + bits -= mod; + } + + while(bits > max_nbits) + { + int e=grib_decode_unsigned_long(p,bitp,max_nbits); + Assert( e == 0); + bits -= max_nbits; + } + + return grib_decode_unsigned_long(p,bitp,bits); + } + + if((nbits%8 > 0)||(*bitp%8 > 0)) { + for(i=0; i< nbits;i++){ + ret <<= 1; + if(grib_get_bit( p, *bitp)) ret += 1; + *bitp += 1; + } + return ret; + } + + ret <<= 8; + ret |= p[o++] ; + + for ( i=1; i max_nbits) { + /* TODO: Do some real code here, to support long longs */ + int bits = nbits; + int mod = bits % max_nbits; + long zero = 0; + + if (mod != 0) { + int e = grib_encode_unsigned_long(p, zero, bitp, mod); + /* printf(" -> : encoding %ld bits=%ld %ld\n",zero,(long)mod,*bitp); */ + Assert(e == 0); + bits -= mod; + } + + while (bits > max_nbits) { + int e = grib_encode_unsigned_long(p, zero, bitp, max_nbits); + /* printf(" -> : encoding %ld bits=%ld %ld\n",zero,(long)max_nbits,*bitp); */ + Assert(e == 0); + bits -= max_nbits; + } + + /* printf(" -> : encoding %ld bits=%ld %ld\n",val,(long)bits,*bitp); */ + return grib_encode_unsigned_long(p, val, bitp, bits); + } + + if (s) + p += (*bitp >> 3); /* skip the bytes */ + else + p += (*bitp >> 3); /* skip the bytes */ + + /* head */ + if (s) { + len -= n; + if (len < 0) { + tmp = ((val << -len) | ((*p) & dmasks[n])); + } else { + tmp = ((val >> len) | ((*p) & dmasks[n])); + } + *p = tmp; + (*p)++; + + /*Beware of code like this! compiler warning: operation may be undefined + Read GCC manual on -Wsequence-point*/ + /* *p = ((val << -len) | ((*p)++ & dmasks[n])); */ + } + + /* write the middle words */ + while (len >= 8) { + len -= 8; + *p++ = (val >> len); + } + + /* write the end bits */ + if (len) + *p = (val << (8 - len)); + + *bitp += nbits; + return GRIB_SUCCESS; +} + +int grib_encode_unsigned_longb(unsigned char* p, unsigned long val ,long *bitp, long nb) +{ + long i = 0; + + if (nb > max_nbits) { + fprintf(stderr, "Number of bits (%ld) exceeds maximum number of bits (%d)\n", nb, max_nbits); + Assert(0); + } + + for(i=nb-1; i >= 0; i--){ + if(test(val,i)) + grib_set_bit_on (p, bitp); + else + grib_set_bit_off(p, bitp); + } + return GRIB_SUCCESS; +} + +#if OMP_PACKING + +#include "grib_bits_any_endian_omp.c" + +#elif VECTOR + +#include "grib_bits_any_endian_vector.c" + +#else + +#include "grib_bits_any_endian_simple.c" + +#endif + diff --git a/src/grib_bits_any_endian_omp.c b/src/grib_bits_any_endian_omp.c new file mode 100644 index 000000000..7a2d49c04 --- /dev/null +++ b/src/grib_bits_any_endian_omp.c @@ -0,0 +1,137 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile - 19.06.2007 * + * * + ***************************************************************************/ + + +int grib_decode_long_array(const unsigned char* p, long *bitp, long bitsPerValue, + size_t n_vals,long* val) { + long i=0; + unsigned long lvalue = 0; + + if(bitsPerValue%8) + { + int j=0; + for(i=0;i < n_vals;i++) { + lvalue=0; + for(j=0; j< bitsPerValue;j++){ + lvalue <<= 1; + if(grib_get_bit( p, *bitp)) lvalue += 1; + *bitp += 1; + } + val[i] = lvalue; + } + } else { + int bc; + int l = bitsPerValue/8; + size_t o = *bitp/8; + + for(i=0;i < n_vals;i++) + { + lvalue = 0; + lvalue <<= 8; + lvalue |= p[o++] ; + + for ( bc=1; bc= 8) + { + blen -= 8; + *encoded = (unsigned_val >> blen); + encoded++; + *off+=8; + } + } + } + return GRIB_SUCCESS; +} + +int grib_encode_double_array_complex(size_t n_vals,double* val,long nbits,double reference_value, + double* scal,double d,double divisor,unsigned char* p,long *bitp) { + return GRIB_NOT_IMPLEMENTED; +} + diff --git a/src/grib_bits_any_endian_simple.c b/src/grib_bits_any_endian_simple.c new file mode 100644 index 000000000..80d526b19 --- /dev/null +++ b/src/grib_bits_any_endian_simple.c @@ -0,0 +1,167 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile - 19.06.2007 * + * * + ***************************************************************************/ + +int grib_decode_long_array(const unsigned char* p, long *bitp, long bitsPerValue, + size_t n_vals,long* val) { + long i=0; + unsigned long lvalue = 0; + + if(bitsPerValue%8) + { + int j=0; + for(i=0;i < n_vals;i++) { + lvalue=0; + for(j=0; j< bitsPerValue;j++){ + lvalue <<= 1; + if(grib_get_bit( p, *bitp)) lvalue += 1; + *bitp += 1; + } + val[i] = lvalue; + } + } else { + int bc; + int l = bitsPerValue/8; + size_t o = *bitp/8; + + for(i=0;i < n_vals;i++) + { + lvalue = 0; + lvalue <<= 8; + lvalue |= p[o++] ; + + for ( bc=1; bc= 8) + { + blen -= 8; + *encoded = (unsigned_val >> blen); + encoded++; + *off+=8; + } + } + } + return GRIB_SUCCESS; +} + +int grib_encode_double_array(size_t n_vals,const double* val,long bits_per_value,double reference_value,double d,double divisor,unsigned char* p,long *off) +{ + size_t i=0; + unsigned long unsigned_val=0; + unsigned char *encoded=p; + double x; + if(bits_per_value%8){ + for(i=0;i< n_vals;i++){ + x=(((val[i]*d)-reference_value)*divisor)+0.5; + unsigned_val = (unsigned long)x; + grib_encode_unsigned_longb(encoded, unsigned_val, off , bits_per_value); + } + } else{ + for(i=0;i< n_vals;i++){ + int blen=0; + blen = bits_per_value; + x = ((((val[i]*d)-reference_value)*divisor)+0.5); + unsigned_val = (unsigned long)x; + while(blen >= 8) + { + blen -= 8; + *encoded = (unsigned_val >> blen); + encoded++; + *off+=8; + } + } + } + return GRIB_SUCCESS; +} + +int grib_encode_double_array_complex(size_t n_vals,double* val,long nbits,double reference_value, + double* scal,double d,double divisor,unsigned char* p,long *bitp) { + return GRIB_NOT_IMPLEMENTED; +} + diff --git a/src/grib_bits_any_endian_vector.c b/src/grib_bits_any_endian_vector.c new file mode 100644 index 000000000..0eac7aa5c --- /dev/null +++ b/src/grib_bits_any_endian_vector.c @@ -0,0 +1,134 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile - 19.06.2007 * + * * + ***************************************************************************/ + +int grib_decode_long_array(const unsigned char* p, long *bitp, long bitsPerValue, + size_t n_vals,long* val) { + long i=0; + unsigned long lvalue = 0; + + if(bitsPerValue%8) + { + int j=0; + for(i=0;i < n_vals;i++) { + lvalue=0; + for(j=0; j< bitsPerValue;j++){ + lvalue <<= 1; + if(grib_get_bit( p, *bitp)) lvalue += 1; + *bitp += 1; + } + val[i] = lvalue; + } + } else { + int bc; + int l = bitsPerValue/8; + size_t o = *bitp/8; + + for(i=0;i < n_vals;i++) + { + lvalue = 0; + lvalue <<= 8; + lvalue |= p[o++] ; + + for ( bc=1; bc= 8) + { + blen -= 8; + *encoded = (unsigned_val >> blen); + encoded++; + *off+=8; + } + } + } + return GRIB_SUCCESS; +} + +int grib_encode_double_array_complex(size_t n_vals,double* val,long nbits,double reference_value, + double* scal,double d,double divisor,unsigned char* p,long *bitp) { + return GRIB_NOT_IMPLEMENTED; +} + diff --git a/src/grib_bits_fast_big_endian.c b/src/grib_bits_fast_big_endian.c new file mode 100644 index 000000000..23c4d96aa --- /dev/null +++ b/src/grib_bits_fast_big_endian.c @@ -0,0 +1,98 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile - 19.06.2007 * + * * + ***************************************************************************/ + +unsigned long grib_decode_unsigned_long(const unsigned char* p, long *bitp, long nbits) +{ + long countOfLeftmostBits=0,leftmostBits=0; + long startBit= *bitp ; + long remainingBits = nbits; + long *pp=(long*)p; + unsigned long val=0; + + if (startBit >= max_nbits) { + pp += startBit/max_nbits; + startBit %= max_nbits; + } + + countOfLeftmostBits = startBit + remainingBits; + if (countOfLeftmostBits > max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + remainingBits -= countOfLeftmostBits; + leftmostBits=(VALUE(*pp,startBit,countOfLeftmostBits)) << remainingBits; + startBit = 0; + pp++; + } else + leftmostBits = 0; + + val=leftmostBits+(VALUE(*pp,startBit,remainingBits)); + + *bitp += nbits; + + return val; +} + +int grib_encode_unsigned_long(unsigned char* p, unsigned long val ,long *bitp, long nbits) +{ + long* destination = (long*)p; + long countOfLeftmostBits=0,nextWord=0,startBit=0,remainingBits=0,rightmostBits=0; + + startBit = *bitp; + remainingBits = nbits; + + if (startBit >= max_nbits) { + nextWord = startBit / max_nbits; + startBit %= max_nbits; + } else + nextWord = 0; + + countOfLeftmostBits = startBit + remainingBits; + if (countOfLeftmostBits > max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + startBit = max_nbits - remainingBits; + remainingBits -= countOfLeftmostBits; + destination[nextWord] = + ((destination[nextWord] >> countOfLeftmostBits) << countOfLeftmostBits) + + (VALUE(val,startBit,countOfLeftmostBits)); + startBit = 0; + nextWord++; + } + + rightmostBits = VALUE(val,max_nbits-remainingBits,remainingBits); + destination[nextWord] = + (destination[nextWord] & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + + *bitp+=nbits; + return GRIB_SUCCESS; +} + +int grib_encode_unsigned_longb(unsigned char* p, unsigned long val ,long *bitp, long nbits) +{ + return grib_encode_unsigned_long(p,val ,bitp, nbits); +} + +#if VECTOR + +#include "grib_bits_fast_big_endian_vector.c" + +#elif OMP + +#include "grib_bits_fast_big_endian_omp.c" + +#else + +#include "grib_bits_fast_big_endian_simple.c" + +#endif diff --git a/src/grib_bits_fast_big_endian_omp.c b/src/grib_bits_fast_big_endian_omp.c new file mode 100644 index 000000000..9fe2f7f0d --- /dev/null +++ b/src/grib_bits_fast_big_endian_omp.c @@ -0,0 +1,360 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile - 19.06.2007 * + * * + ***************************************************************************/ + +int grib_decode_long_array(const unsigned char* p, long *bitp, long nbits,size_t size,long* val) { + long i=0; + long countOfLeftmostBits=0,leftmostBits=0; + long startBit,startByte; + long remainingBits = nbits; + long *pp=(long*)p; + int inited=0; + unsigned long uval=0; + + if ( (max_nbits%nbits == 0) && (*bitp%nbits == 0) ) { + +#pragma omp parallel for schedule(static) firstprivate(inited,pp) private(startBit,countOfLeftmostBits,remainingBits,leftmostBits) + for (i=0;i= max_nbits) { + pp+=startBit/max_nbits; + startBit %= max_nbits; + } + inited=1; + } + + if (startBit == max_nbits) { + startBit = 0; + pp++; + } + + val[i]=VALUE(*pp,startBit,remainingBits); + startBit+=remainingBits; + remainingBits=nbits; + } + + } else { + +#pragma omp parallel for schedule(static) firstprivate(inited,pp) private(startBit,countOfLeftmostBits,remainingBits,leftmostBits) + for (i=0;i= max_nbits) { + pp+=startBit/max_nbits; + startBit %= max_nbits; + } + inited=1; + } + + countOfLeftmostBits = startBit + remainingBits; + if (countOfLeftmostBits > max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + remainingBits -= countOfLeftmostBits; + leftmostBits=(VALUE(*(pp++),startBit,countOfLeftmostBits)) << remainingBits; + startBit = 0; + } else + leftmostBits = 0; + + val[i]=leftmostBits+(VALUE(*pp,startBit,remainingBits)); + startBit+=remainingBits; + remainingBits=nbits; + } + + } + + *bitp+=size*nbits; + + return GRIB_SUCCESS; +} + +int grib_decode_double_array(const unsigned char* p, long *bitp, long nbits,double reference_value,double s,double d,size_t size,double* val) { + long i=0; + long countOfLeftmostBits=0,leftmostBits=0; + long startBit,startByte; + long remainingBits = nbits; + long *pp=(long*)p; + int inited=0; + unsigned long uval=0; + double fact=s*d; + double bias=reference_value*d; + + if ( (max_nbits%nbits == 0) && (*bitp%nbits == 0) ) { + +#pragma omp parallel for schedule(static) firstprivate(inited,pp) private(startBit,countOfLeftmostBits,remainingBits,leftmostBits) + for (i=0;i= max_nbits) { + pp+=startBit/max_nbits; + startBit %= max_nbits; + } + inited=1; + } + + if (startBit == max_nbits) { + startBit = 0; + pp++; + } + + val[i]=VALUE(*pp,startBit,remainingBits); + val[i]= val[i] * fact + bias ; + startBit+=remainingBits; + remainingBits=nbits; + } + + } else { + +#pragma omp parallel for schedule(static) firstprivate(inited,pp) private(startBit,countOfLeftmostBits,remainingBits,leftmostBits) + for (i=0;i= max_nbits) { + pp+=startBit/max_nbits; + startBit %= max_nbits; + } + inited=1; + } + + countOfLeftmostBits = startBit + remainingBits; + if (countOfLeftmostBits > max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + remainingBits -= countOfLeftmostBits; + leftmostBits=(VALUE(*(pp++),startBit,countOfLeftmostBits)) << remainingBits; + startBit = 0; + } else + leftmostBits = 0; + + val[i]=leftmostBits+(VALUE(*pp,startBit,remainingBits)); + val[i]= val[i] * fact + bias ; + startBit+=remainingBits; + remainingBits=nbits; + } + + } + + *bitp+=size*nbits; + + return GRIB_SUCCESS; +} + +int grib_decode_double_array_complex(const unsigned char* p, long *bitp, long nbits,double reference_value,double s,double* d,size_t size,double* val) { + long i=0; + long countOfLeftmostBits=0,leftmostBits=0; + long startBit; + long remainingBits = nbits; + long *pp=(long*)p; + int inited=0; + unsigned long uval=0; + + if ( (max_nbits%nbits == 0) && (*bitp%nbits == 0) ) { + +#pragma omp parallel for schedule(static) firstprivate(inited,pp) private(startBit,countOfLeftmostBits,remainingBits,leftmostBits) + for (i=0;i= max_nbits) { + pp+=startBit/max_nbits; + startBit %= max_nbits; + } + inited=1; + } + + if (startBit == max_nbits) { + startBit = 0; + pp++; + } + + val[i]=VALUE(*pp,startBit,remainingBits); + val[i]= ((( (val[i]) * s)+reference_value)*d[i/2]); + startBit+=remainingBits; + remainingBits=nbits; + } + + } else { + +#pragma omp parallel for schedule(static) firstprivate(inited,pp) private(startBit,countOfLeftmostBits,remainingBits,leftmostBits) + for (i=0;i= max_nbits) { + pp+=startBit/max_nbits; + startBit %= max_nbits; + } + inited=1; + } + + countOfLeftmostBits = startBit + remainingBits; + if (countOfLeftmostBits > max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + remainingBits -= countOfLeftmostBits; + leftmostBits=(VALUE(*pp,startBit,countOfLeftmostBits)) << remainingBits; + startBit = 0; + pp++; + } else + leftmostBits = 0; + + val[i]=leftmostBits+(VALUE(*pp,startBit,remainingBits)); + val[i]= ((( (val[i]) * s)+reference_value)*d[i/2]); + startBit+=remainingBits; + remainingBits=nbits; + } + } + + *bitp+=size*nbits; + + return GRIB_SUCCESS; +} + + +int grib_encode_double_array(size_t n_vals,const double* val,long nbits,double reference_value,double d,double divisor,unsigned char* p,long *bitp) +{ + long* destination = (long*)p; + double* v=(double*)val; + long countOfLeftmostBits=0,startBit=0,remainingBits=0,rightmostBits=0; + unsigned long uval=0; + size_t i=0; + + startBit=*bitp; + remainingBits = nbits; + + if (startBit >= max_nbits) { + destination += startBit / max_nbits; + startBit %= max_nbits; + } + + if ( (max_nbits%nbits == 0) && (*bitp%nbits == 0) ) { + + for(i=0;i< n_vals;i++){ + uval = (unsigned long)(((((*v)*d)-reference_value)*divisor)+0.5); + if (startBit == max_nbits) { + startBit = 0; + destination++; + } + + rightmostBits = VALUE(uval,max_nbits-remainingBits,remainingBits); + *destination = ((*destination) & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + startBit+=remainingBits; + remainingBits=nbits; + v++; + } + + } else { + + for(i=0;i< n_vals;i++){ + countOfLeftmostBits = startBit + remainingBits; + uval = (unsigned long)(((((*v)*d)-reference_value)*divisor)+0.5); + if (countOfLeftmostBits > max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + startBit = max_nbits - remainingBits; + remainingBits -= countOfLeftmostBits; + *destination = (((*destination) >> countOfLeftmostBits) << countOfLeftmostBits) + + (VALUE(uval,startBit,countOfLeftmostBits)); + startBit = 0; + destination++; + } + + rightmostBits = VALUE(uval,max_nbits-remainingBits,remainingBits); + *destination = ((*destination) & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + startBit+=remainingBits; + remainingBits=nbits; + v++; + } + + } + + *bitp+=n_vals*nbits; + + return GRIB_SUCCESS; +} + +int grib_encode_double_array_complex(size_t n_vals,double* val,long nbits,double reference_value, + double* scal,double d,double divisor,unsigned char* p,long *bitp) { + long* destination = (long*)p; + double* v=val; + long countOfLeftmostBits=0,startBit=0,remainingBits=0,rightmostBits=0; + unsigned long uval=0; + size_t i=0; + + startBit=*bitp; + remainingBits = nbits; + + if (startBit >= max_nbits) { + destination += startBit / max_nbits; + startBit %= max_nbits; + } + + if ( (max_nbits%nbits == 0) && (*bitp%nbits == 0) ) { + + for(i=0;i< n_vals;i++) { + uval = (unsigned long)(((((*v)*d*scal[i/2])-reference_value)*divisor)+0.5); + if (startBit == max_nbits) { + startBit = 0; + destination++; + } + + rightmostBits = VALUE(uval,max_nbits-remainingBits,remainingBits); + *destination = ((*destination) & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + startBit+=remainingBits; + remainingBits=nbits; + + v++; + } + + } else { + + for(i=0;i< n_vals;i++) { + countOfLeftmostBits = startBit + remainingBits; + uval = (unsigned long)(((((*v)*d*scal[i/2])-reference_value)*divisor)+0.5); + if (countOfLeftmostBits > max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + startBit = max_nbits - remainingBits; + remainingBits -= countOfLeftmostBits; + *destination = (((*destination) >> countOfLeftmostBits) << countOfLeftmostBits) + + (VALUE(uval,startBit,countOfLeftmostBits)); + startBit = 0; + destination++; + } + + rightmostBits = VALUE(uval,max_nbits-remainingBits,remainingBits); + *destination = ((*destination) & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + startBit+=remainingBits; + remainingBits=nbits; + + v++; + } + + } + + *bitp+=n_vals*nbits; + + return 0; +} + diff --git a/src/grib_bits_fast_big_endian_simple.c b/src/grib_bits_fast_big_endian_simple.c new file mode 100644 index 000000000..5ff767c6f --- /dev/null +++ b/src/grib_bits_fast_big_endian_simple.c @@ -0,0 +1,306 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile - 19.06.2007 * + * * + ***************************************************************************/ + +int grib_decode_long_array(const unsigned char* p, long *bitp, long nbits,size_t size,long* val) { + long i=0; + long countOfLeftmostBits=0,leftmostBits=0; + long startBit,startByte; + long remainingBits = nbits; + long *pp=(long*)p; + int inited=0; + unsigned long uval=0; + + startBit=*bitp; + remainingBits = nbits; + if (startBit >= max_nbits) { + pp+=startBit/max_nbits; + startBit %= max_nbits; + } + + if ( (max_nbits%nbits == 0) && (*bitp%nbits == 0) ) { + + for (i=0;i max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + remainingBits -= countOfLeftmostBits; + leftmostBits=(VALUE(*(pp++),startBit,countOfLeftmostBits)) << remainingBits; + startBit = 0; + } else + leftmostBits = 0; + + val[i]=leftmostBits+(VALUE(*pp,startBit,remainingBits)); + startBit+=remainingBits; + remainingBits=nbits; + } + + } + + *bitp+=size*nbits; + + return GRIB_SUCCESS; +} + + +int grib_decode_double_array(const unsigned char* p, long *bitp, long nbits,double reference_value,double s,double d,size_t size,double* val) { + long i=0; + long countOfLeftmostBits=0,leftmostBits=0; + long startBit,startByte; + long remainingBits = nbits; + long *pp=(long*)p; + int inited=0; + unsigned long uval=0; + double fact=s*d; + double bias=reference_value*d; + + startBit=*bitp; + remainingBits = nbits; + if (startBit >= max_nbits) { + pp+=startBit/max_nbits; + startBit %= max_nbits; + } + + if ( (max_nbits%nbits == 0) && (*bitp%nbits == 0) ) { + + for (i=0;i max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + remainingBits -= countOfLeftmostBits; + leftmostBits=(VALUE(*(pp++),startBit,countOfLeftmostBits)) << remainingBits; + startBit = 0; + } else + leftmostBits = 0; + + val[i]=leftmostBits+(VALUE(*pp,startBit,remainingBits)); + val[i]= val[i] * fact + bias ; + startBit+=remainingBits; + remainingBits=nbits; + } + + } + + *bitp+=size*nbits; + + return GRIB_SUCCESS; +} + +int grib_decode_double_array_complex(const unsigned char* p, long *bitp, long nbits,double reference_value,double s,double* d,size_t size,double* val) { + long i=0; + long countOfLeftmostBits=0,leftmostBits=0; + long startBit; + long remainingBits = nbits; + long *pp=(long*)p; + int inited=0; + unsigned long uval=0; + + startBit=*bitp; + remainingBits = nbits; + if (startBit >= max_nbits) { + pp+=startBit/max_nbits; + startBit %= max_nbits; + } + + if ( (max_nbits%nbits == 0) && (*bitp%nbits == 0) ) { + for (i=0;i max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + remainingBits -= countOfLeftmostBits; + leftmostBits=(VALUE(*pp,startBit,countOfLeftmostBits)) << remainingBits; + startBit = 0; + pp++; + } else + leftmostBits = 0; + + val[i]=leftmostBits+(VALUE(*pp,startBit,remainingBits)); + val[i]= ((( (val[i]) * s)+reference_value)*d[i/2]); + startBit+=remainingBits; + remainingBits=nbits; + } + } + + *bitp+=size*nbits; + + return GRIB_SUCCESS; +} + +int grib_encode_double_array(size_t n_vals,const double* val,long nbits,double reference_value,double d,double divisor,unsigned char* p,long *bitp) +{ + long* destination = (long*)p; + double* v=(double*)val; + long countOfLeftmostBits=0,startBit=0,remainingBits=0,rightmostBits=0; + unsigned long uval=0; + size_t i=0; + + startBit=*bitp; + remainingBits = nbits; + + if (startBit >= max_nbits) { + destination += startBit / max_nbits; + startBit %= max_nbits; + } + + if ( (max_nbits%nbits == 0) && (*bitp%nbits == 0) ) { + + for(i=0;i< n_vals;i++){ + uval = (unsigned long)(((((*v)*d)-reference_value)*divisor)+0.5); + if (startBit == max_nbits) { + startBit = 0; + destination++; + } + + rightmostBits = VALUE(uval,max_nbits-remainingBits,remainingBits); + *destination = ((*destination) & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + startBit+=remainingBits; + remainingBits=nbits; + v++; + } + + } else { + + for(i=0;i< n_vals;i++){ + countOfLeftmostBits = startBit + remainingBits; + uval = (unsigned long)(((((*v)*d)-reference_value)*divisor)+0.5); + if (countOfLeftmostBits > max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + startBit = max_nbits - remainingBits; + remainingBits -= countOfLeftmostBits; + *destination = (((*destination) >> countOfLeftmostBits) << countOfLeftmostBits) + + (VALUE(uval,startBit,countOfLeftmostBits)); + startBit = 0; + destination++; + } + + rightmostBits = VALUE(uval,max_nbits-remainingBits,remainingBits); + *destination = ((*destination) & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + startBit+=remainingBits; + remainingBits=nbits; + v++; + } + + } + + *bitp+=n_vals*nbits; + + return GRIB_SUCCESS; +} + +int grib_encode_double_array_complex(size_t n_vals,double* val,long nbits,double reference_value, + double* scal,double d,double divisor,unsigned char* p,long *bitp) { + long* destination = (long*)p; + double* v=val; + long countOfLeftmostBits=0,startBit=0,remainingBits=0,rightmostBits=0; + unsigned long uval=0; + size_t i=0; + + startBit=*bitp; + remainingBits = nbits; + + if (startBit >= max_nbits) { + destination += startBit / max_nbits; + startBit %= max_nbits; + } + + if ( (max_nbits%nbits == 0) && (*bitp%nbits == 0) ) { + + for(i=0;i< n_vals;i++) { + uval = (unsigned long)(((((*v)*d*scal[i/2])-reference_value)*divisor)+0.5); + if (startBit == max_nbits) { + startBit = 0; + destination++; + } + + rightmostBits = VALUE(uval,max_nbits-remainingBits,remainingBits); + *destination = ((*destination) & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + startBit+=remainingBits; + remainingBits=nbits; + + v++; + } + + } else { + + for(i=0;i< n_vals;i++) { + countOfLeftmostBits = startBit + remainingBits; + uval = (unsigned long)(((((*v)*d*scal[i/2])-reference_value)*divisor)+0.5); + if (countOfLeftmostBits > max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + startBit = max_nbits - remainingBits; + remainingBits -= countOfLeftmostBits; + *destination = (((*destination) >> countOfLeftmostBits) << countOfLeftmostBits) + + (VALUE(uval,startBit,countOfLeftmostBits)); + startBit = 0; + destination++; + } + + rightmostBits = VALUE(uval,max_nbits-remainingBits,remainingBits); + *destination = ((*destination) & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + startBit+=remainingBits; + remainingBits=nbits; + + v++; + } + + } + + *bitp+=n_vals*nbits; + + return 0; +} + diff --git a/src/grib_bits_fast_big_endian_vector.c b/src/grib_bits_fast_big_endian_vector.c new file mode 100644 index 000000000..7d0fce08a --- /dev/null +++ b/src/grib_bits_fast_big_endian_vector.c @@ -0,0 +1,394 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile - 06.2010 * + * * + ***************************************************************************/ + +int grib_decode_long_array(const unsigned char* p, long *bitp, long nbits,size_t size,long* val) { + long countOfLeftmostBits=0,leftmostBits=0; + long startBit[size],startByte,off; + long remainingBits = nbits; + long bitpv=*bitp; + int inited=0; + unsigned long uval=0; + long i=0,n; + unsigned long *pp=(unsigned long*)p; + unsigned long *x; + size_t sizel =(size*nbits)/max_nbits; + long vaux[size],vaux2[size],vaux3[size]; + long imax,j; + +/* (void) ftrace_region_begin("gdda-1"); */ + if (size*nbits%max_nbits) sizel++; + + x=malloc(sizel*sizeof(unsigned long)); + memcpy(x,p+bitpv/8,sizel*sizeof(x)); +/* (void) ftrace_region_end ("gdda-1"); */ + + if ( (max_nbits%nbits == 0) && (bitpv%nbits == 0) ) { + +/* long GRIB_MASK = -1; Mask of sword bits + +p:x[startBit/max_nbits] +q:startBit%max_nbits +b:nbits + define VALUE(p,q,b) \ + (((b)==max_nbits ? GRIB_MASK : ~(GRIB_MASK<<(b))) & ((p)>>(max_nbits-((q)+(b))))) */ + +/* (void) ftrace_region_begin("gdda-2"); */ + for (i=0;iimax) + imax=vaux3[i]; + } + for (j=1;j<=imax;j++) { + for (i=0;i>1; +/* vaux2[i]=vaux5[i]>>vaux3[i]; + vaux2[i]=x[startBit[i]/max_nbits]>>(max_nbits-(startBit[i]%max_nbits+nbits)); */ + } + } + for (i=0;i max_nbits) { + countOfLeftmostBits = max_nbits - startBit[i]; + remainingBits -= countOfLeftmostBits; + leftmostBits=(VALUE(x[off],startBit[i],countOfLeftmostBits)) << remainingBits; + off++; + startBit[i] = 0; + } else + leftmostBits = 0; + + val[i]=(leftmostBits+(VALUE(x[off],startBit[i],remainingBits)) ); + } +/* (void) ftrace_region_end ("gdda-3"); */ + } +/* (void) ftrace_region_begin("gdda-4"); */ + free(x); + + *bitp+=size*nbits; +/* (void) ftrace_region_end ("gdda-4"); */ + + return GRIB_SUCCESS; +} + + +int grib_decode_double_array(const unsigned char* p, long *bitp, long nbits,double reference_value,double s,double d,size_t size,double* val) { + long countOfLeftmostBits=0,leftmostBits=0; + long startBit[size],startByte,off; + long remainingBits = nbits; + long bitpv=*bitp; + int inited=0; + unsigned long uval=0; + double fact=s*d; + double bias=reference_value*d; + long i=0,n; + unsigned long *pp=(unsigned long*)p; + unsigned long *x; + size_t sizel =(size*nbits)/max_nbits; + long vaux[size],vaux2[size],vaux3[size]; + long imax,j; + +/* (void) ftrace_region_begin("gdda-1"); */ + if (size*nbits%max_nbits) sizel++; + + x=malloc(sizel*sizeof(unsigned long)); + memcpy(x,p+bitpv/8,sizel*sizeof(x)); +/* (void) ftrace_region_end ("gdda-1"); */ + + if ( (max_nbits%nbits == 0) && (bitpv%nbits == 0) ) { + +/* long GRIB_MASK = -1; Mask of sword bits + +p:x[startBit/max_nbits] +q:startBit%max_nbits +b:nbits + define VALUE(p,q,b) \ + (((b)==max_nbits ? GRIB_MASK : ~(GRIB_MASK<<(b))) & ((p)>>(max_nbits-((q)+(b))))) */ + +/* (void) ftrace_region_begin("gdda-2"); */ + for (i=0;iimax) + imax=vaux3[i]; + } + for (j=1;j<=imax;j++) { + for (i=0;i>1; +/* vaux2[i]=vaux5[i]>>vaux3[i]; + vaux2[i]=x[startBit[i]/max_nbits]>>(max_nbits-(startBit[i]%max_nbits+nbits)); */ + } + } + for (i=0;i max_nbits) { + countOfLeftmostBits = max_nbits - startBit[i]; + remainingBits -= countOfLeftmostBits; + leftmostBits=(VALUE(x[off],startBit[i],countOfLeftmostBits)) << remainingBits; + off++; + startBit[i] = 0; + } else + leftmostBits = 0; + + val[i]=(leftmostBits+(VALUE(x[off],startBit[i],remainingBits)) ) * fact + bias; + } +/* (void) ftrace_region_end ("gdda-3"); */ + } +/* (void) ftrace_region_begin("gdda-4"); */ + free(x); + + *bitp+=size*nbits; +/* (void) ftrace_region_end ("gdda-4"); */ + + return GRIB_SUCCESS; +} + +int grib_decode_double_array_complex(const unsigned char* p, long *bitp, long nbits,double reference_value,double s,double* restrict d,size_t size,double* restrict val) { + long i=0; + long countOfLeftmostBits=0,leftmostBits=0; + long startBit,off; + long remainingBits = nbits; + unsigned long *pp=(unsigned long *)p; + unsigned long bitpv=*bitp; + unsigned long uval=0; + unsigned long *x; + size_t sizel =(size*nbits)/max_nbits; + if (size*nbits%max_nbits) sizel++; + + x=malloc(sizel*sizeof(unsigned long)); + memcpy(x,p+bitpv/8,sizel*sizeof(x)); + + if ( (max_nbits%nbits == 0) && (bitpv%nbits == 0) ) { + + for (i=0;i max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + remainingBits -= countOfLeftmostBits; + leftmostBits=(VALUE(x[off],startBit,countOfLeftmostBits)) << remainingBits; + off++; + startBit = 0; + } else + leftmostBits = 0; + + val[i]= ((( (leftmostBits+(VALUE(x[off],startBit,remainingBits))) * s)+ + reference_value)*d[i/2]); + } + + } + free(x); + + *bitp+=size*nbits; + + return GRIB_SUCCESS; +} + +int grib_encode_double_array(size_t size,const double* val,long nbits,double reference_value,double d,double divisor,unsigned char* p,long *bitp) +{ + unsigned long* restrict destination; + long countOfLeftmostBits=0,startBit=0,remainingBits=0,rightmostBits=0; + long off; + size_t nbytes; + unsigned long uval=0; + size_t i=0; + size_t sizel =(size*nbits)/max_nbits; + if (size*nbits%max_nbits) sizel++; + + destination=malloc(sizel*sizeof(unsigned long)); + + if ( (max_nbits%nbits == 0)) { + + for (i=0;i max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + startBit = max_nbits - remainingBits; + remainingBits -= countOfLeftmostBits; + destination[off] = (((destination[off]) >> countOfLeftmostBits) + << countOfLeftmostBits) + + (VALUE(uval,startBit,countOfLeftmostBits)); + startBit = 0; + off++; + } + + rightmostBits = VALUE(uval,max_nbits-remainingBits,remainingBits); + destination[off] = ((destination[off]) & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + } + + } + + + nbytes=(size*nbits)/8; + if ((size*nbits)%8) nbytes++; + memcpy(p+*bitp,destination,nbytes); + free(destination); + + *bitp+=size*nbits; + + return GRIB_SUCCESS; +} + +int grib_encode_double_array_complex(size_t size,double* restrict val,long nbits,double reference_value, + double* restrict scal,double d,double divisor,unsigned char* p,long *bitp) { + unsigned long* restrict destination; + double* v=val; + long countOfLeftmostBits=0,startBit=0,remainingBits=0,rightmostBits=0,off=0; + unsigned long uval=0; + size_t i=0; + size_t nbytes; + size_t sizel =(size*nbits)/max_nbits; + if (size*nbits%max_nbits) sizel++; + + destination=malloc(sizel*sizeof(unsigned long)); + + if ( (max_nbits%nbits == 0)) { + + for (i=0;i max_nbits) { + countOfLeftmostBits = max_nbits - startBit; + startBit = max_nbits - remainingBits; + remainingBits -= countOfLeftmostBits; + destination[off] = (((destination[off]) >> countOfLeftmostBits) + << countOfLeftmostBits) + + (VALUE(uval,startBit,countOfLeftmostBits)); + startBit = 0; + off++; + } + + rightmostBits = VALUE(uval,max_nbits-remainingBits,remainingBits); + destination[off] = ((destination[off]) & ~MASKVALUE(startBit,remainingBits)) + + (rightmostBits << max_nbits-(remainingBits+startBit)); + } + + } + nbytes=(size*nbits)/8; + if ((size*nbits)%8) nbytes++; + memcpy(p+*bitp,destination,nbytes); + free(destination); + + *bitp+=size*nbits; + + return 0; +} + diff --git a/src/grib_box.c b/src/grib_box.c new file mode 100644 index 000000000..813e4cb95 --- /dev/null +++ b/src/grib_box.c @@ -0,0 +1,104 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/** +* Author: Enrico Fucile +* date: 14/06/2010 +* +*/ + +#include "grib_api_internal.h" + + +grib_points* grib_box_get_points(grib_box *box,double north, double west,double south,double east, int *err) +{ + grib_box_class *c = box->cclass; + while(c) + { + grib_box_class *s = c->super ? *(c->super) : NULL; + if(c->get_points) { + return c->get_points(box,north,west,south,east,err); + } + c = s; + } + Assert(0); + return 0; +} + + +/* For this one, ALL init are called */ + +static int init_box(grib_box_class* c,grib_box* i, grib_handle *h, grib_arguments* args) +{ + + if(c) { + int ret = GRIB_SUCCESS; + grib_box_class *s = c->super ? *(c->super) : NULL; + if(!c->inited) + { + if(c->init_class) c->init_class(c); + c->inited = 1; + } + if(s) ret = init_box(s,i,h,args); + + if(ret != GRIB_SUCCESS) return ret; + + if(c->init) return c->init(i,h, args); + } + return GRIB_INTERNAL_ERROR; +} + +int grib_box_init(grib_box* box, grib_handle *h, grib_arguments* args) +{ + return init_box(box->cclass,box,h,args); +} + +/* For this one, ALL destroy are called */ + +int grib_box_delete(grib_box *box) +{ + grib_box_class *c = box->cclass; + while(c) + { + grib_box_class *s = c->super ? *(c->super) : NULL; + if(c->destroy) c->destroy(box); + c = s; + } + return 0; +} + +grib_points* grib_points_new(grib_context* c,size_t size) { + grib_points* points=grib_context_malloc_clear(c,sizeof(grib_points)); + + points->latitudes=grib_context_malloc_clear(c,sizeof(double)*size); + points->longitudes=grib_context_malloc_clear(c,sizeof(double)*size); + points->indexes=grib_context_malloc_clear(c,sizeof(double)*size); + points->group_start=grib_context_malloc_clear(c,sizeof(double)*size); + points->group_len=grib_context_malloc_clear(c,sizeof(double)*size); + points->size=size; + points->context=c; + + return points; +} + +void grib_points_delete(grib_points *points) { + + grib_context* c; + if (!points) return; + + c=points->context; + grib_context_free(c,points->latitudes); + grib_context_free(c,points->longitudes); + grib_context_free(c,points->indexes); + grib_context_free(c,points->group_start); + grib_context_free(c,points->group_len); + grib_context_free(c,points); + +} diff --git a/src/grib_box_class.c b/src/grib_box_class.c new file mode 100644 index 000000000..46d974a2c --- /dev/null +++ b/src/grib_box_class.c @@ -0,0 +1,58 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + */ + + +#include "grib_api_internal.h" + +#define NUMBER(x) (sizeof(x)/sizeof(x[0])) + +/* This file is generated my ./make_class.pl */ +#include "grib_box_class.h" + +struct table_entry +{ + char *type; + grib_box_class **cclass; +}; + +static struct table_entry table[] = +{ + /* This file is generated my ./make_class.pl */ +#include "grib_box_factory.h" +}; + +grib_box* grib_box_factory( grib_handle* h, grib_arguments* args) +{ + int i; + int ret = GRIB_SUCCESS; + char* type = (char*)grib_arguments_get_name(h,args,0); + + for(i = 0; i < NUMBER(table) ; i++) + if(strcmp(type,table[i].type) == 0) + { + grib_box_class* c = *(table[i].cclass); + grib_box* it = (grib_box*) grib_context_malloc_clear(h->context,c->size); + it->cclass = c; + ret = GRIB_SUCCESS; + ret = grib_box_init(it,h,args); + if(ret == GRIB_SUCCESS) return it; + grib_context_log(h->context,GRIB_LOG_ERROR,"grib_box_factory: error %d instantiating box %s", ret, table[i].type); + grib_box_delete(it); + return NULL; + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"grib_box_factory : Unknown type : %s for box", type); + + return NULL; +} diff --git a/src/grib_box_class.h b/src/grib_box_class.h new file mode 100644 index 000000000..4dcd8762c --- /dev/null +++ b/src/grib_box_class.h @@ -0,0 +1,4 @@ +/* This file is automatically generated by ./make_class.pl, do not edit */ +extern grib_box_class* grib_box_class_gen; +extern grib_box_class* grib_box_class_reduced_gaussian; +extern grib_box_class* grib_box_class_regular_gaussian; diff --git a/src/grib_box_class_gen.c b/src/grib_box_class_gen.c new file mode 100644 index 000000000..2e4df7b3d --- /dev/null +++ b/src/grib_box_class_gen.c @@ -0,0 +1,92 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * + * + */ + + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = box + IMPLEMENTS = destroy + IMPLEMENTS = get_points + IMPLEMENTS = get_values + IMPLEMENTS = init + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "box.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_box_class*); + +static int init (grib_box* box,grib_handle* h,grib_arguments* args); +static grib_points* get_points(grib_box* box, double north, double west, double south,double east,int *err); +static int destroy (grib_box* box); + +typedef struct grib_box_gen{ + grib_box box; +/* Members defined in gen */ +} grib_box_gen; + + +static grib_box_class _grib_box_class_gen = { + 0, /* super */ + "gen", /* name */ + sizeof(grib_box_gen), /* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &get_points, /* get points */ +}; + +grib_box_class* grib_box_class_gen = &_grib_box_class_gen; + + +static void init_class(grib_box_class* c) +{ +} +/* END_CLASS_IMP */ + +static int init(grib_box* box,grib_handle* h,grib_arguments* args) +{ + return 0; +} + +static int destroy(grib_box* box) { + grib_points_delete(box->points); + box->points=0; + return GRIB_SUCCESS; +} + +static grib_points* get_points(grib_box* box, double north, double west, double south,double east, int *err) { + *err=GRIB_NOT_IMPLEMENTED; + return NULL; +} + + + diff --git a/src/grib_box_class_reduced_gaussian.c b/src/grib_box_class_reduced_gaussian.c new file mode 100644 index 000000000..9b78399ce --- /dev/null +++ b/src/grib_box_class_reduced_gaussian.c @@ -0,0 +1,246 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * + * + */ + + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = box + SUPER = grib_box_class_gen + IMPLEMENTS = destroy + IMPLEMENTS = get_points + IMPLEMENTS = init + MEMBERS = double* lats + MEMBERS = size_t nlats + MEMBERS = double** lons + MEMBERS = long* nlons + MEMBERS = size_t size + + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "box.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_box_class*); + +static int init (grib_box* box,grib_handle* h,grib_arguments* args); +static grib_points* get_points(grib_box* box, double north, double west, double south,double east,int *err); +static int destroy (grib_box* box); + +typedef struct grib_box_reduced_gaussian{ + grib_box box; +/* Members defined in gen */ +/* Members defined in reduced_gaussian */ + double* lats; + size_t nlats; + double** lons; + long* nlons; + size_t size; +} grib_box_reduced_gaussian; + +extern grib_box_class* grib_box_class_gen; + +static grib_box_class _grib_box_class_reduced_gaussian = { + &grib_box_class_gen, /* super */ + "reduced_gaussian", /* name */ + sizeof(grib_box_reduced_gaussian), /* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &get_points, /* get points */ +}; + +grib_box_class* grib_box_class_reduced_gaussian = &_grib_box_class_reduced_gaussian; + + +static void init_class(grib_box_class* c) +{ +} +/* END_CLASS_IMP */ + +static int init(grib_box* box,grib_handle* h,grib_arguments* args) +{ + grib_box_reduced_gaussian* self=(grib_box_reduced_gaussian*)box; + int n=1; + int ret=0; + char* key; + long* pl; + double lat_first,lat_last,lon_first,lon_last; + long order; + double *lats; + long j,l,ilon_first,ilon_last,i; + long row_count; + grib_context* c=box->context; + + key = (char*)grib_arguments_get_name(h,args,n++); + ret=grib_get_double(h,key,&lat_first); + if (ret) return ret; + + key = (char*)grib_arguments_get_name(h,args,n++); + ret=grib_get_double(h,key,&lon_first); + if (ret) return ret; + + key = (char*)grib_arguments_get_name(h,args,n++); + ret=grib_get_double(h,key,&lat_last); + if (ret) return ret; + + key = (char*)grib_arguments_get_name(h,args,n++); + ret=grib_get_double(h,key,&lon_last); + if (ret) return ret; + + key = (char*)grib_arguments_get_name(h,args,n++); + ret=grib_get_long(h,key,&order); + if (ret) return ret; + + key = (char*)grib_arguments_get_name(h,args,n++); + ret=grib_get_size(h,key,&self->nlats); + if (ret) return ret; + pl=grib_context_malloc(h->context,self->nlats*sizeof(long)); + ret=grib_get_long_array(h,key,pl,&self->nlats); + if (ret) return ret; + + lats=(double*)grib_context_malloc(h->context,sizeof(double)*order*2); + if((ret = grib_get_gaussian_latitudes(order, lats)) != GRIB_SUCCESS) + return ret; + + if (self->nlats==order*2) { + /*global (latitudes)*/ + self->lats=lats; + } else { + /*sub area (latitudes)*/ + int l=0; + double d=fabs(lats[0]-lats[1]); + while (fabs(lat_first-lats[l]) > d ) {l++;} + self->lats=(double*)grib_context_malloc(h->context,sizeof(double)*self->nlats); + for (i=0;inlats;i++) self->lats[i]=lats[l++]; + grib_context_free(box->context,lats); + } + + self->lons=grib_context_malloc_clear(box->context,sizeof(double*)*self->nlats); + self->size=0; + if (lon_first != 0 || + fabs(lon_last - (360.0-90.0/order)) > 90.0/order) { + /* sub area (longitudes) */ + for (j=0;jnlats;j++) { + row_count=0; + grib_get_reduced_row(pl[j],lon_first,lon_last, + &row_count,&ilon_first,&ilon_last); + self->size+=row_count; + if (ilon_first>ilon_last) ilon_first-=pl[j]; + l=0; + self->lons[j]=grib_context_malloc_clear(c,sizeof(double)*row_count); + for (i=ilon_first;i<=ilon_last;i++) + self->lons[j][l++]=((i)*360.0)/pl[j]; + pl[j]=row_count; + } + } else { + /* global (longitudes) */ + for (j=0;jnlats;j++) { + self->lons[j]=grib_context_malloc_clear(c,sizeof(double)*pl[j]); + self->size+=pl[j]; + for (i=0;ilons[j][i]=(i*360.0)/pl[j]; + } + + } + self->nlons=pl; + + return 0; +} + +static int destroy(grib_box* box) { + grib_box_reduced_gaussian* self=(grib_box_reduced_gaussian*)box; + grib_context* c=box->context; + int i; + + grib_points_delete(box->points); + + grib_context_free(c,self->lats); + for (i=0;inlats;i++) + grib_context_free(c,self->lons[i]); + grib_context_free(c,self->lons); + + return GRIB_SUCCESS; +} + +static grib_points* get_points(grib_box* box, double north, double west, double south,double east, int *err) { + long j,i,index,l; + double lat,lon; + size_t group_count; + int first=1; + grib_box_reduced_gaussian* self=(grib_box_reduced_gaussian*)box; + grib_points* points=NULL; + + grib_context* c=box->context; + points=grib_points_new(c,self->size); + if (!points) + grib_context_log(c,GRIB_LOG_FATAL,"unable to create grib_points\n"); + + index=0; + l=0; + group_count=0; + for (j=0;jnlats;j++) { + lat=self->lats[j]; + for (i=0;inlons[j];i++) { + lon=self->lons[j][i]; + if (latsouth && lon>west && lonlatitudes[l]=lat; + points->longitudes[l]=lon; + points->indexes[l]=index; + points->group_len[group_count]++; + if (first) { + points->group_start[group_count]=index; + points->group_len[group_count]=0; + first=0; + } else { + if (index!=points->group_start[group_count]+points->group_len[group_count]) { + group_count++; + points->group_start[group_count]=index; + points->group_len[group_count]=0; + points->n_groups=group_count+1; + } + } + l++; + } + index++; + } + } + points->group_len[group_count]++; + points->n=l; + if (box->points) grib_points_delete(box->points); + box->points=points; + + *err=0; + + return points; +} + + + diff --git a/src/grib_box_class_regular_gaussian.c b/src/grib_box_class_regular_gaussian.c new file mode 100644 index 000000000..73a56980a --- /dev/null +++ b/src/grib_box_class_regular_gaussian.c @@ -0,0 +1,92 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * + * + */ + + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = box + SUPER = grib_box_class_gen + IMPLEMENTS = destroy + IMPLEMENTS = get_points + IMPLEMENTS = init + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "box.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_box_class*); + +static int init (grib_box* box,grib_handle* h,grib_arguments* args); +static grib_points* get_points(grib_box* box, double north, double west, double south,double east,int *err); +static int destroy (grib_box* box); + +typedef struct grib_box_regular_gaussian{ + grib_box box; +/* Members defined in gen */ +/* Members defined in regular_gaussian */ +} grib_box_regular_gaussian; + +extern grib_box_class* grib_box_class_gen; + +static grib_box_class _grib_box_class_regular_gaussian = { + &grib_box_class_gen, /* super */ + "regular_gaussian", /* name */ + sizeof(grib_box_regular_gaussian), /* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &get_points, /* get points */ +}; + +grib_box_class* grib_box_class_regular_gaussian = &_grib_box_class_regular_gaussian; + + +static void init_class(grib_box_class* c) +{ +} +/* END_CLASS_IMP */ + +static int init(grib_box* box,grib_handle* h,grib_arguments* args) +{ + return 0; +} + +static int destroy(grib_box* box) { + return GRIB_SUCCESS; +} + +static grib_points* get_points(grib_box* box, double north, double west, double south,double east, int *err) { + *err=GRIB_NOT_IMPLEMENTED; + return NULL; +} + + + diff --git a/src/grib_box_factory.h b/src/grib_box_factory.h new file mode 100644 index 000000000..d9761c1f8 --- /dev/null +++ b/src/grib_box_factory.h @@ -0,0 +1,4 @@ +/* This file is automatically generated by ./make_class.pl, do not edit */ +{ "gen", &grib_box_class_gen, }, +{ "reduced_gaussian", &grib_box_class_reduced_gaussian, }, +{ "regular_gaussian", &grib_box_class_regular_gaussian, }, diff --git a/src/grib_buffer.c b/src/grib_buffer.c new file mode 100644 index 000000000..ec904c0e1 --- /dev/null +++ b/src/grib_buffer.c @@ -0,0 +1,268 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +void grib_get_buffer_ownership(const grib_context *c, grib_buffer *b) +{ + unsigned char* newdata; + if(b->property == GRIB_MY_BUFFER) + return; + + newdata = grib_context_malloc(c, b->length); + memcpy(newdata, b->data, b->length); + b->data = newdata; + b->property = GRIB_MY_BUFFER; +} + +grib_buffer* grib_create_growable_buffer(const grib_context* c) +{ + grib_buffer *b = (grib_buffer*)grib_context_malloc_clear(c,sizeof(grib_buffer)); + + if(b == NULL) + { + grib_context_log(c,GRIB_LOG_ERROR,"grib_new_buffer: cannot allocate buffer"); + return NULL; + } + + b->property = GRIB_MY_BUFFER; + b->length = 10240; + b->ulength = 0; + b->data = grib_context_malloc_clear(c,b->length); + b->growable = 1; + + if(!b->data) + { + grib_context_log(c,GRIB_LOG_ERROR,"grib_new_buffer: cannot allocate buffer"); + grib_context_free(c,b); + return NULL; + } + + return b; + +} + + +grib_buffer* grib_new_buffer(const grib_context* c,unsigned char* data,size_t buflen) +{ + grib_buffer *b = (grib_buffer*)grib_context_malloc_clear(c,sizeof(grib_buffer)); + + if(b == NULL) + { + grib_context_log(c,GRIB_LOG_ERROR,"grib_new_buffer: cannot allocate buffer"); + return NULL; + } + + + b->property = GRIB_USER_BUFFER; + b->length = buflen; + b->ulength = buflen; + b->data = data; + + return b; +} + +void grib_buffer_delete(const grib_context *c, grib_buffer *b) +{ + + if(b->property == GRIB_MY_BUFFER) + grib_context_free(c,b->data); + b->length = 0; + b->ulength = 0; + grib_context_free(c,b); + +} + +static void grib_grow_buffer_to(const grib_context *c, grib_buffer *b, size_t ns) +{ + unsigned char* newdata; + + if(ns>b->length) + { + grib_get_buffer_ownership(c, b); + newdata = grib_context_malloc_clear(c, ns); + memcpy(newdata, b->data, b->length); + grib_context_free(c,b->data); + b->data = newdata; + b->length = ns; + } +} + +void grib_grow_buffer(const grib_context *c, grib_buffer *b, size_t new_size) +{ + size_t len = ((new_size + 1023)/1024)*1024; + grib_grow_buffer_to(c,b,len); +} + +void grib_buffer_set_ulength(const grib_context *c, grib_buffer *b, size_t length) +{ + grib_grow_buffer_to(c,b,length); + b->ulength = length; +} + + +static void update_offsets(grib_accessor* a,long len) +{ + while(a) + { + grib_section* s = a->sub_section; + a->offset += len; + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, "::::: grib_buffer : accessor %s is moving by %d bytes to %ld",a->name ,len, a->offset); + if(s) update_offsets(s->block->first,len); + a = a->next; + } +} + + +static void update_offsets_after(grib_accessor* a,long len) +{ + while(a) + { + update_offsets(a->next,len); + a = a->parent->owner; + } +} + +void grib_recompute_sections_lengths(grib_section* s) +{ + if(s) + { + long plen = 0; + size_t len = 1; + + grib_accessor* a = s->block->first; + + while(a) + { + /* grib_recompute_sections_lengths(grib_get_sub_section(a)); */ + grib_recompute_sections_lengths(a->sub_section); + a = a->next; + } + + if(s->aclength) + { + int ret; + if(s->owner) + plen = grib_get_next_position_offset(s->block->last) - s->owner->offset; + else + plen = grib_get_next_position_offset(s->block->last); + + if((ret = grib_pack_long(s->aclength, &plen, &len)) != GRIB_SUCCESS) + ; + +#if 0 + if(s->h->context->debug) + printf("SECTION updating length %ld .. %s\n",plen,s->owner->name); +#endif + + } + } +} + +#if 0 +/* new GCC compiler v4.5.0 complains function is defined but not used*/ +static void update_sections_lengths(grib_section* s) +{ + long plen = 0; + size_t len = 1; + + if(!s) return; + + if(s->aclength) + { + int ret; + if(s->owner) + plen = grib_get_next_position_offset(s->block->last) - s->owner->offset; + else + plen = grib_get_next_position_offset(s->block->last); + + /* if(s->owner) */ + /* s->owner->length = plen; */ + + /* if(s->aclength) */ + if((ret = grib_pack_long(s->aclength, &plen, &len)) != GRIB_SUCCESS) + ; + + if(s->h->context->debug) + { + printf("SECTION updating length %ld .. %s\n",plen,s->owner->name); + printf("NEXT_POS = %ld, owner offset= %ld %s %s\n", + grib_get_next_position_offset(s->block->last), + s->owner ? s->owner->offset : 0L, s->owner->name, + s->block->last->name); + } + } + + if(s->owner) + update_sections_lengths(s->owner->parent); +} +#endif + +void grib_buffer_replace( grib_accessor *a, const unsigned char* data, + size_t newsize,int update_lengths,int update_paddings) +{ + size_t offset = a->offset; + long oldsize = grib_get_next_position_offset(a)-offset; + long increase = (long)newsize - (long)oldsize; + + grib_buffer *buffer = a->parent->h->buffer; + size_t message_length = buffer->ulength; + + grib_context_log(a->parent->h->context,GRIB_LOG_DEBUG, + "grib_buffer_replace %s offset=%ld oldsize=%ld newsize=%ld message_length=%ld update_paddings=%d\n", + a->name,(long)offset,oldsize,(long)newsize,(long)message_length,update_paddings); + + grib_buffer_set_ulength(a->parent->h->context, + buffer, + buffer->ulength+increase); + + /* move the end */ + if(increase) + memmove( + buffer->data + offset + newsize, + buffer->data + offset + oldsize, + message_length - offset - oldsize); + + /* copy new data */ + + memcpy(buffer->data + offset, data, newsize); + + /* if(increase) */ + if(increase) + { + update_offsets_after(a,increase); + if(update_lengths) + { + grib_update_size(a,newsize); + grib_section_adjust_sizes(a->parent->h->root,1,0); + if(update_paddings) + grib_update_paddings(a->parent->h->root); + } + + } + + +} + + + + +void grib_update_sections_lengths(grib_handle* h) { + grib_section_adjust_sizes(h->root,2,0); + grib_update_paddings(h->root); +} + + + + diff --git a/src/grib_compressor.c b/src/grib_compressor.c new file mode 100644 index 000000000..e8e8f918f --- /dev/null +++ b/src/grib_compressor.c @@ -0,0 +1,85 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * maf@agnoman * + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +int grib_compressor_pack (grib_compressor* cmp, const double* vals, size_t valslen, void* buf, size_t* buflen){ + grib_compressor_class *c = cmp->cclass; + while(c) + { + grib_compressor_class *s = c->super ? *(c->super) : NULL; + if(c->pack) return c->pack(cmp,vals,valslen,buf,buflen); + c = s; + } + Assert(0); + return 0; +} +int grib_compressor_unpack(grib_compressor* cmp, const void* buf, size_t buflen, double* vals, size_t* valslen){ + + grib_compressor_class *c = cmp->cclass; + while(c) + { + grib_compressor_class *s = c->super ? *(c->super) : NULL; + if(c->unpack) return c->unpack(cmp,buf,buflen,vals,valslen); + c = s; + } + Assert(0); + return 0; + +} + +/* For this one, ALL init are called */ + +static int init_compressor(grib_compressor_class* c,grib_compressor* cmp, grib_handle *h, grib_arguments* args) +{ + + if(c) { + int ret = GRIB_SUCCESS; + grib_compressor_class *s = c->super ? *(c->super) : NULL; + if(!c->inited) + { + if(c->init_class) c->init_class(c); + c->inited = 1; + } + if(s) ret = init_compressor(s,cmp,h,args); + + if(ret != GRIB_SUCCESS) return ret; + + if(c->init) return c->init(cmp,h, args); + } + return GRIB_INTERNAL_ERROR; +} + +int grib_compressor_init(grib_compressor* i, grib_handle *h, grib_arguments* args) +{ + return init_compressor(i->cclass,i,h,args); +} + +/* For this one, ALL destroy are called */ + +int grib_compressor_delete(grib_compressor *cmp) +{ + grib_compressor_class *c = cmp->cclass; + while(c) + { + grib_compressor_class *s = c->super ? *(c->super) : NULL; + if(c->destroy) c->destroy(cmp); + c = s; + } + /* This should go in a top class */ + grib_context_free(cmp->h->context,cmp); + return 0; +} + + diff --git a/src/grib_concept.c b/src/grib_concept.c new file mode 100644 index 000000000..ec4e73a6f --- /dev/null +++ b/src/grib_concept.c @@ -0,0 +1,49 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + + +grib_concept_value* grib_concept_value_new(grib_context* c, const char* name,grib_concept_condition* conditions) +{ + grib_concept_value* v = grib_context_malloc_clear_persistent(c,sizeof(grib_concept_value)); + + v->name = grib_context_strdup_persistent(c,name); + v->conditions = conditions; + return v; +} + +void grib_concept_value_delete(grib_context* c,grib_concept_value* v) +{ + grib_concept_condition* e = v->conditions; + while(e) + { + grib_concept_condition* n = e->next; + grib_concept_condition_delete(c,e); + e = n; + } + grib_context_free_persistent(c,v->name); + grib_context_free_persistent(c,v); +} + +grib_concept_condition* grib_concept_condition_new(grib_context* c,const char* name,grib_expression* expression) +{ + grib_concept_condition* v = grib_context_malloc_clear_persistent(c,sizeof(grib_concept_condition)); + v->name = grib_context_strdup_persistent(c,name); + v->expression = expression; + return v; +} + +void grib_concept_condition_delete(grib_context* c,grib_concept_condition* v) +{ + grib_expression_free(c,v->expression); + grib_context_free_persistent(c,v->name); + grib_context_free_persistent(c,v); +} diff --git a/src/grib_concept_index.c b/src/grib_concept_index.c new file mode 100644 index 000000000..4747883ed --- /dev/null +++ b/src/grib_concept_index.c @@ -0,0 +1,171 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * Description: concept index + * + * + * + */ + +#include "grib_api_internal.h" + +static grib_concept_index_entry* index_entry_new(grib_context* c,grib_concept_index_keys* keys) { + grib_concept_index_entry* entry=NULL; + + Assert(keys); + + if (!c) c=grib_context_get_default(); + + entry=grib_context_malloc_clear(c,sizeof(grib_concept_index_entry)); + if (!entry) + grib_context_log(c,GRIB_LOG_FATAL,"grib_concept_index_entry unable to allocate"); + e=entry; + + while (keys && keys->name) { + e->name=grib_context_strdup(c,keys->name); + e->type=keys->type; + e->next=grib_context_malloc_clear(c,sizeof(grib_concept_index_entry)); + if (!e->next) + grib_context_log(c,GRIB_LOG_FATAL,"grib_concept_index_entry unable to allocate"); + + e=e->next; + keys=keys->next; + } + + return entry; + +} + +static void index_entry_delete(grib_context* c,grib_concept_index_entry* entry) { + grib_concept_index_entry* e; + while (entry) { + e=entry; + entry=entry->next; + grib_context_free(c,e->name); + grib_context_free(c,e->value); + grib_context_free(c,e); + } +} + +static int index_insert_entry(grib_concept_index* index,grib_concept_index_entry* entry,void* object) { + + int err=0; + int found=0; + grib_conditions_tree* cur=index->conditions; + grib_conditions_tree* prev=index->conditions; + grib_concept_index_keys* keys=index->keys; + + while (keys->name) { + + if (!cur) { + cur=grib_context_malloc_clear_persistent(index->context,sizeof(grib_conditions_tree)); + if (!cur) + grib_context_log(index->context,GRIB_LOG_FATAL,"index_insert_entry unable to allocate"); + prev->next=cur; + } + value = entry->value ? entry->value : "*"; + while (cur && (!cur->value || (found=!strcmp(cur->value,value))==0) ) cur=cur->next; + + if (!found) { + cur->next=grib_context_malloc_clear_persistent(index->context,sizeof(grib_conditions_tree)); + if (!cur->next) + grib_context_log(index->context,GRIB_LOG_FATAL,"index_insert_entry unable to allocate"); + cur=cur->next; + } + + cur->value=grib_context_strdup(index->context,value); + entry=entry->next; + keys=keys->next; + prev=cur; + cur=cur->next_key; + } + + while (cur) { + prev=cur; + cur=cur->next_key; + } + + prev->object=object; + + return err; +} + +static void index_add_conditions(grib_concept_index* index,grib_concept_condition* condition) { + grib_concept_condition* c=condition; + char s[512]={0,}; + grib_concept_index_entry* e;; + grib_concept_index_entry* entry=index_entry_new(index->context,index->keys);; + + while (c) { + size_t size=512; + int type; + e=entry; + type = grib_expression_native_type(0,c->expression); + switch(type) + { + case GRIB_TYPE_LONG: + grib_expression_evaluate_long(0,c->expression,&lres); + sprintf(s,"%ld",lres); + break; + + case GRIB_TYPE_DOUBLE: + grib_expression_evaluate_double(0,c->expression,&dres); + sprintf(s,"%g",dres); + break; + + case GRIB_TYPE_STRING: + grib_expression_evaluate_string(0,c->expression,s,&size,&err); + break; + + default: + Assert(0); + break; + } + + while (e->name && strcmp(e->name,c->name)) + e=e->next; + + e->type=type; + e->value=grib_context_strdup(index->context,s); + if (!e->name) { + e->name=grib_context_strdup(index->context,c->name); + e->next=grib_context_malloc_clear_persistent(index->context,sizeof(grib_concept_index_entry)); + if (!e->next) + grib_context_log(index->context,GRIB_LOG_FATAL,"index_add_conditions unable to allocate"); + } + + c=c->next; + } + + index_insert_entry(index,entry,condition->name); + + index_entry_delete(index->context,entry); +} + +grib_concept_index* grib_concept_index_new_from_concept(grib_context* c,grib_concept_value* concept,int *err) { + grib_concept_index* index; + + if (!c) c=grib_context_get_default(); + + index=grib_context_malloc_clear_persistent(c,sizeof(grib_concept_index)); + index->keys=grib_context_malloc_clear_persistent(c,sizeof(grib_concept_index_key)); + index->conditions=grib_context_malloc_clear_persistent(c,sizeof(grib_conditions_tree)); + index->conditions=grib_context_malloc_clear_persistent(c,sizeof(grib_conditions_tree)); + index->context=c; + + while (concept) { + index_add_conditions(index,concept->conditions,err); + concept=concept->next; + } + + return index; +} diff --git a/src/grib_context.c b/src/grib_context.c new file mode 100644 index 000000000..35c0e7439 --- /dev/null +++ b/src/grib_context.c @@ -0,0 +1,754 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +#include +#include + +grib_string_list grib_file_not_found; + +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; + +static pthread_mutex_t mutex_mem = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t mutex_c = PTHREAD_MUTEX_INITIALIZER; + +static void init() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex_c,&attr); + pthread_mutex_init(&mutex_mem,&attr); + pthread_mutexattr_destroy(&attr); +} + +#endif + + +#if MANAGE_MEM + +#else +static long cnt = 0; +static long cntp = 0; + +static void default_long_lasting_free(const grib_context* c, void* p) { + GRIB_PTHREAD_ONCE(&once,&init); + free(p); + GRIB_MUTEX_LOCK(&mutex_mem); + cntp--; + GRIB_MUTEX_UNLOCK(&mutex_mem); +} +static void* default_long_lasting_malloc(const grib_context* c, size_t size) { + void* ret; + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex_mem); + cntp++; + GRIB_MUTEX_UNLOCK(&mutex_mem); + ret=malloc(size); + return ret; +} +static void default_buffer_free(const grib_context* c, void* p) { + GRIB_PTHREAD_ONCE(&once,&init); + free(p); + GRIB_MUTEX_LOCK(&mutex_mem); + cntp--; + GRIB_MUTEX_UNLOCK(&mutex_mem); +} +static void* default_buffer_malloc(const grib_context* c, size_t size) { + void* ret; + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex_mem); + cntp++; + GRIB_MUTEX_UNLOCK(&mutex_mem); + ret=malloc(size); + return ret; +} +static void* default_buffer_realloc(const grib_context* c, void* p, size_t size) { + void* ret; + ret=realloc(p,size); + return ret; +} +static void default_free(const grib_context* c, void* p) { + GRIB_PTHREAD_ONCE(&once,&init); + free(p); + GRIB_MUTEX_LOCK(&mutex_mem); + cnt--; + GRIB_MUTEX_UNLOCK(&mutex_mem); +} +static void* default_malloc(const grib_context* c, size_t size) { + void* ret; + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex_mem); + cnt++; + GRIB_MUTEX_UNLOCK(&mutex_mem); + ret=malloc(size); + return ret; +} +static void* default_realloc(const grib_context* c, void* p, size_t size) { + void* ret; + ret=realloc(p,size); + return ret; +} +#endif + +static size_t default_read(const grib_context* c, void *ptr, size_t size, void *stream) { + return fread(ptr, 1, size, stream); +} + +static off_t default_tell(const grib_context* c, void *stream) { + return ftello(stream); +} + +static off_t default_seek(const grib_context* c, off_t offset,int whence, void *stream) { + return fseeko(stream,offset,whence); +} + +static int default_feof(const grib_context* c, void *stream) { + return feof((FILE*)stream); +} +static size_t default_write(const grib_context* c,const void *ptr, size_t size, void *stream) { + return fwrite(ptr, 1, size, stream); +} + +size_t grib_context_read(const grib_context* c, void *ptr, size_t size, void *stream) { + if (!c) c=grib_context_get_default(); + return c->read(c,ptr, size, stream); +} + +off_t grib_context_tell(const grib_context* c, void *stream) { + if (!c) c=grib_context_get_default(); + return c->tell(c,stream); +} + +int grib_context_seek(const grib_context* c, off_t offset ,int whence , void *stream) { + if (!c) c=grib_context_get_default(); + return c->seek(c,offset,whence,stream); +} + +int grib_context_eof(const grib_context* c, void *stream) { + if (!c) c=grib_context_get_default(); + return c->eof(c,stream); +} +size_t grib_context_write(const grib_context* c,const void *ptr, size_t size, void *stream) { + if (!c) c=grib_context_get_default(); + return c->write(c,ptr, size, stream); +} + +static void default_log(const grib_context* c, int level, const char* mess){ + if (!c) c=grib_context_get_default(); + if(level == GRIB_LOG_ERROR) { + fprintf(c->log_stream, "GRIB_API ERROR : %s\n", mess); + /*Assert(1==0);*/ + } + if(level == GRIB_LOG_FATAL) fprintf(c->log_stream, "GRIB_API ERROR : %s\n", mess); + if(level == GRIB_LOG_DEBUG && c->debug>0) fprintf(c->log_stream, "GRIB_API DEBUG : %s\n", mess); + if(level == GRIB_LOG_WARNING) fprintf(c->log_stream, "GRIB_API WARNING : %s\n", mess); + if(level == GRIB_LOG_INFO) fprintf(c->log_stream, "GRIB_API INFO : %s\n", mess); + + if(level == GRIB_LOG_FATAL) { Assert(0);} + + if(getenv("GRIB_API_FAIL_IF_LOG_MESSAGE")) + { + long n = atol(getenv("GRIB_API_FAIL_IF_LOG_MESSAGE")); + if(n >= 1 && level == GRIB_LOG_ERROR) Assert(0); + if(n >= 2 && level == GRIB_LOG_WARNING) Assert(0); + } + +} + +static void default_print(const grib_context* c, void* descriptor, const char* mess) +{ + fprintf(descriptor, "%s", mess); +} + +void grib_context_set_print_proc(grib_context* c, grib_print_proc p) +{ + c = c ? c : grib_context_get_default(); + c->print = p; +} + +void grib_context_set_debug(grib_context* c, int mode) +{ + c = c ? c : grib_context_get_default(); + c->debug = mode; +} + +void grib_context_set_logging_proc(grib_context* c, grib_log_proc p) +{ + c = c ? c : grib_context_get_default(); + c->output_log = p; +} + + +long grib_get_api_version(){ + return GRIB_API_VERSION; +} + +void grib_print_api_version(FILE* out) { + fprintf(out,"%d.%d.%d", + GRIB_API_MAJOR_VERSION, + GRIB_API_MINOR_VERSION, + GRIB_API_REVISION_VERSION); +} + +static grib_context default_grib_context = { + 0, /* inited */ + 0, /* debug */ + 0, /* write_on_fail */ + 0, /* no_abort */ + 0, /* io_buffer_size */ + 0, /* no_big_group_split */ + 0, /* no_spd */ + 0, /* keep_matrix */ + 0, /* grib_definition_files_path */ + 0, /* grib_samples_path */ + 0, /* grib_concept_path */ + 0, /* grib_reader */ + 0, /* user data */ + GRIB_REAL_MODE8, /* real mode for fortran */ + +#if MANAGE_MEM + &grib_transient_free, /* free_mem */ + &grib_transient_malloc, /* alloc_mem */ + &grib_transient_realloc, /* realloc_mem */ + + &grib_permanent_free, /* free_persistant_mem */ + &grib_permanent_malloc, /* alloc_persistant_mem */ + + &grib_buffer_free, /* buffer_free_mem */ + &grib_buffer_malloc, /* buffer_alloc_mem */ + &grib_buffer_realloc, /* buffer_realloc_mem */ + +#else + + &default_free, /* free_mem */ + &default_malloc, /* alloc_mem */ + &default_realloc, /* realloc_mem */ + + &default_long_lasting_free, /* free_persistant_mem */ + &default_long_lasting_malloc, /* alloc_persistant_mem */ + + &default_buffer_free, /* free_buffer_mem */ + &default_buffer_malloc, /* alloc_buffer_mem */ + &default_buffer_realloc, /* realloc_buffer_mem */ +#endif + + &default_read, /* file read procedure */ + &default_write, /* file write procedure */ + &default_tell, /* lfile tell procedure */ + &default_seek, /* lfile seek procedure */ + &default_feof, /* file feof procedure */ + + &default_log, /* logging_procedure */ + &default_print, /* print procedure */ + 0, /* code tables */ + 0, /* files */ + 0, /* multigrib support on */ + 0, /* multigrib support */ + 0, /* grib_definition_files_dir */ + 0, /* handle_file_count */ + 0, /* handle_total_count */ + 0, /* message_file_offset */ + 0, /* no_fail_on_wrong_length */ + 0, /* gts_header_on */ + 0, /* gribex_mode_on */ + 0, /* large_constant_fields */ + 0, /* keys (grib_trie*) */ + 0, /* keys_count */ + 0, /* concepts_index */ + 0, /* concepts_count */ + {0,}, /* concepts */ + 0, /* def_files */ + 0, /* ieee_packing */ + 0, /* blacklist */ + 0, /* log_stream */ + 0 /* classes */ +#if GRIB_PTHREADS + ,PTHREAD_MUTEX_INITIALIZER /* mutex */ +#endif +}; + + +grib_context* grib_context_get_default(){ + GRIB_PTHREAD_ONCE(&once,&init); + + if(!default_grib_context.inited) + { + const char * write_on_fail = NULL; + const char * large_constant_fields = NULL; + const char * no_abort = NULL; + const char * debug = NULL; + const char *gribex=NULL; + const char *ieee_packing=NULL; + const char *io_buffer_size=NULL; + const char *log_stream=NULL; + const char *no_big_group_split=NULL; + const char *no_spd=NULL; + const char *keep_matrix=NULL; + + GRIB_MUTEX_LOCK(&mutex_c); + + write_on_fail = getenv("GRIB_API_WRITE_ON_FAIL"); + large_constant_fields = getenv("GRIB_API_LARGE_CONSTANT_FIELDS"); + no_abort = getenv("GRIB_API_NO_ABORT"); + debug = getenv("GRIB_API_DEBUG"); + gribex=getenv("GRIB_GRIBEX_MODE_ON"); + ieee_packing=getenv("GRIB_IEEE_PACKING"); + io_buffer_size=getenv("GRIB_API_IO_BUFFER_SIZE"); + log_stream=getenv("GRIB_API_LOG_STREAM"); + no_big_group_split=getenv("GRIB_API_NO_BIG_GROUP_SPLIT"); + no_spd=getenv("GRIB_API_NO_SPD"); + keep_matrix=getenv("GRIB_API_KEEP_MATRIX"); + default_grib_context.inited = 1; + default_grib_context.io_buffer_size = io_buffer_size ? atoi(io_buffer_size) : 0; + default_grib_context.no_big_group_split = no_big_group_split ? atoi(no_big_group_split) : 0; + default_grib_context.no_spd = no_spd ? atoi(no_spd) : 0; + default_grib_context.keep_matrix = keep_matrix ? atoi(keep_matrix) : 1; + default_grib_context.write_on_fail = write_on_fail ? atoi(write_on_fail) : 0; + default_grib_context.no_abort = no_abort ? atoi(no_abort) : 0; + default_grib_context.debug = debug ? atoi(debug) : 0; + default_grib_context.gribex_mode_on=gribex ? atoi(gribex) : 0; + default_grib_context.large_constant_fields = large_constant_fields ? atoi(large_constant_fields) : 0; + default_grib_context.ieee_packing=ieee_packing ? atoi(ieee_packing) : 0; + default_grib_context.grib_samples_path = getenv("GRIB_SAMPLES_PATH"); + default_grib_context.log_stream=stderr; + if (!log_stream) { + default_grib_context.log_stream=stderr; + } else if (!strcmp(log_stream,"stderr") ) { + default_grib_context.log_stream=stderr; + } else if (!strcmp(log_stream,"stdout") ) { + default_grib_context.log_stream=stdout; + } + + if (!default_grib_context.grib_samples_path) + default_grib_context.grib_samples_path = getenv("GRIB_TEMPLATES_PATH"); +#ifdef GRIB_TEMPLATES_PATH + if(!default_grib_context.grib_samples_path) + default_grib_context.grib_samples_path = GRIB_TEMPLATES_PATH ; +#endif + default_grib_context.grib_definition_files_path = getenv("GRIB_DEFINITION_PATH"); +#ifdef GRIB_DEFINITION_PATH + if(!default_grib_context.grib_definition_files_path) + default_grib_context.grib_definition_files_path = GRIB_DEFINITION_PATH ; +#endif + default_grib_context.keys_count=0; + default_grib_context.keys=grib_hash_keys_new(&(default_grib_context), + &(default_grib_context.keys_count)); + + default_grib_context.concepts_index=grib_itrie_new(&(default_grib_context), + &(default_grib_context.concepts_count)); + default_grib_context.def_files=grib_trie_new(&(default_grib_context)); + default_grib_context.classes=grib_trie_new(&(default_grib_context)); + + GRIB_MUTEX_UNLOCK(&mutex_c); + } + + + return &default_grib_context; +} + +/* TODO: use parent */ + +grib_context* grib_context_new(grib_context* parent) +{ + grib_context* c; +#if GRIB_PTHREADS + pthread_mutexattr_t attr; +#endif + + if (!parent) parent=grib_context_get_default(); + + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&(parent->mutex)); + + c = (grib_context*)grib_context_malloc_clear_persistent(&default_grib_context,sizeof(grib_context)); + + c->inited = default_grib_context.inited; + c->debug = default_grib_context.debug; + + c->real_mode = default_grib_context.real_mode; + + c->free_mem = default_grib_context.free_mem; + c->alloc_mem = default_grib_context.alloc_mem; + + c->free_persistent_mem = default_grib_context.free_persistent_mem; + c->alloc_persistent_mem= default_grib_context.alloc_persistent_mem; + + c->read = default_grib_context.read; + c->write = default_grib_context.write; + c->tell = default_grib_context.tell; + + c->output_log = default_grib_context.output_log; + c->print = default_grib_context.print ; + c->user_data = default_grib_context.user_data; + c->def_files = default_grib_context.def_files; + +#if GRIB_PTHREADS + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex_c,&attr); + pthread_mutexattr_destroy(&attr); +#endif + + GRIB_MUTEX_UNLOCK(&(parent->mutex)); + return c; +} + +/* Hopefully big enough. Note: GRIB_DEFINITION_PATH can contain SEVERAL colon-separated sub-paths */ +#define DEF_PATH_MAXLEN 8192 + +/* GRIB-235: Resolve path to expand symbolic links etc */ +static char* resolve_path(grib_context* c, char* path) +{ + char* result = NULL; + char resolved[DEF_PATH_MAXLEN+1]; + if (!realpath(path, resolved)) { + result = grib_context_strdup(c, path); /* Failed to resolve. Use original path */ + } else { + result = grib_context_strdup(c, resolved); + } + return result; +} + +static int init_definition_files_dir(grib_context* c) { + int err=0; + char path[DEF_PATH_MAXLEN]; + char* p=NULL; + char* dir=NULL; + grib_string_list* next=NULL; + + if (!c) c=grib_context_get_default(); + + if (c->grib_definition_files_dir) return 0; + if (!c->grib_definition_files_path) return GRIB_NO_DEFINITIONS; + + /* Note: strtok modifies its first argument so we copy */ + strncpy(path, c->grib_definition_files_path, DEF_PATH_MAXLEN); + + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex_c); + + p=path; + while(*p!=':' && *p!='\0') p++; + + if (*p != ':') { + /* No colon found so use it as is */ + c->grib_definition_files_dir=(grib_string_list*)grib_context_malloc_clear_persistent(c,sizeof(grib_string_list)); + c->grib_definition_files_dir->value = resolve_path(c, path); + } else { + /* definitions path contains at least one colon so must consist of several paths */ + dir=strtok(path,":"); + + while (dir != NULL) { + if (next) { + next->next=(grib_string_list*)grib_context_malloc_clear_persistent(c,sizeof(grib_string_list)); + next=next->next; + } else { + c->grib_definition_files_dir=(grib_string_list*)grib_context_malloc_clear_persistent(c,sizeof(grib_string_list)); + next=c->grib_definition_files_dir; + } + next->value = resolve_path(c, dir); + dir=strtok(NULL,":"); + } + } + + GRIB_MUTEX_UNLOCK(&mutex_c); + + return err; +} + +char *grib_context_full_path(grib_context* c,const char* basename) +{ + int err=0; + char full[1024]={0,}; + grib_string_list* dir=NULL; + grib_string_list* fullpath=0; + if (!c) c=grib_context_get_default(); + + GRIB_PTHREAD_ONCE(&once,&init); + + if(*basename == '/' || *basename == '.') { + return (char*)basename; + } else { + fullpath=grib_trie_get(c->def_files,basename); + if (fullpath!=NULL) { + return fullpath->value; + } + if (!c->grib_definition_files_dir) { + err=init_definition_files_dir(c); + } + + if (err != GRIB_SUCCESS) { + grib_context_log(c,GRIB_LOG_ERROR, + "Unable to find definition files directory"); + return NULL; + } + + dir=c->grib_definition_files_dir; + + while (dir) { + sprintf(full,"%s/%s",dir->value,basename); + if (!access(full,F_OK)) { + fullpath=grib_context_malloc_clear_persistent(c,sizeof(grib_string_list)); + Assert(fullpath); + fullpath->value=grib_context_strdup(c,full); + GRIB_MUTEX_LOCK(&mutex_c); + grib_trie_insert(c->def_files,basename,fullpath); + grib_context_log(c,GRIB_LOG_DEBUG,"Found def file %s",full); + GRIB_MUTEX_UNLOCK(&mutex_c); + return fullpath->value; + } + dir=dir->next; + } + + } + + GRIB_MUTEX_LOCK(&mutex_c); + /* Store missing files so we don't check for them again and again */ + grib_trie_insert(c->def_files,basename,&grib_file_not_found); + /*grib_context_log(c,GRIB_LOG_ERROR,"Def file \"%s\" not found",basename);*/ + GRIB_MUTEX_UNLOCK(&mutex_c); + full[0]=0; + return NULL; +} + +void grib_context_free(const grib_context* c, void* p){ + if (!c) c=grib_context_get_default(); + if(p) c->free_mem(c,p); +} + +void grib_context_free_persistent(const grib_context* c, void* p){ + if (!c) c=grib_context_get_default(); + if(p) c->free_persistent_mem(c,p); +} + +void grib_context_reset(grib_context* c){ + if (!c) c=grib_context_get_default(); + + if(c->grib_reader) + { + grib_action_file *fr = c->grib_reader->first; + grib_action_file *fn = fr; + grib_action* a; + + while(fn){ + fr = fn; + fn = fn->next; + + a = fr->root; + while(a) + { + grib_action *na = a->next; + grib_free_action(c, a); + a = na; + } + grib_context_free_persistent(c, fr->filename); + grib_context_free_persistent(c, fr); + } + grib_context_free_persistent(c, c->grib_reader); + + } + + c->grib_reader = NULL; + + if(c->codetable) grib_codetable_delete(c); + c->codetable = NULL; + + if(c->grib_definition_files_dir) + grib_context_free(c,c->grib_definition_files_dir); + + if(c->multi_support_on) + grib_multi_support_reset(c); + +} + +void grib_context_delete( grib_context* c){ + if (!c) c=grib_context_get_default(); + + grib_hash_keys_delete( c->keys); + grib_trie_delete(c->def_files); + + grib_context_reset( c ); + if(c != &default_grib_context) + grib_context_free_persistent(&default_grib_context,c); +} + +void* grib_context_malloc_persistent(const grib_context* c, size_t size){ + void* p = c->alloc_persistent_mem(c,size); + if(!p) { + grib_context_log(c,GRIB_LOG_FATAL,"grib_context_malloc: error allocating %lu bytes",(unsigned long)size); + Assert(1); + } + return p; +} + +char* grib_context_strdup_persistent(const grib_context* c,const char* s){ + char *dup = (char*)grib_context_malloc_persistent(c,(strlen(s)*sizeof(char))+1); + if(dup) strcpy(dup,s); + return dup; +} + +void* grib_context_malloc_clear_persistent(const grib_context* c, size_t size){ + void *p = grib_context_malloc_persistent(c,size); + if(p) memset(p,0,size); + return p; +} + + +void* grib_context_malloc(const grib_context* c, size_t size){ + void* p = NULL; + if (!c) c=grib_context_get_default(); + if(size == 0) return p; + else p=c->alloc_mem(c,size); + if(!p) { + grib_context_log(c,GRIB_LOG_FATAL,"grib_context_malloc: error allocating %lu bytes",(unsigned long)size); + Assert(1); + } + return p; +} + +void* grib_context_realloc(const grib_context* c, void *p,size_t size){ + + void* q; + if (!c) c=grib_context_get_default(); + q=c->realloc_mem(c,p,size); + + if(!q) { + grib_context_log(c,GRIB_LOG_FATAL,"grib_context_realloc: error allocating %lu bytes",(unsigned long)size); + exit(1); + } + return q; +} + +char* grib_context_strdup(const grib_context* c,const char* s){ + char *dup = (char*)grib_context_malloc(c,(strlen(s)*sizeof(char))+1); + if(dup) strcpy(dup,s); + return dup; +} + +void* grib_context_malloc_clear(const grib_context* c, size_t size){ + void *p = grib_context_malloc(c,size); + if(p) memset(p,0,size); + return p; +} + +void* grib_context_buffer_malloc(const grib_context* c, size_t size){ + void* p = NULL; + if (!c) c=grib_context_get_default(); + if(size == 0) return p; + else p=c->alloc_buffer_mem(c,size); + if(!p) { + grib_context_log(c,GRIB_LOG_FATAL,"grib_context_buffer_malloc: error allocating %lu bytes",(unsigned long)size); + exit(1); + } + return p; +} + +void grib_context_buffer_free(const grib_context* c, void* p){ + if (!c) c=grib_context_get_default(); + if(p) c->free_buffer_mem(c,p); +} + +void* grib_context_buffer_realloc(const grib_context* c, void *p,size_t size){ + + void* q=c->realloc_buffer_mem(c,p,size); + + if(!q) { + grib_context_log(c,GRIB_LOG_FATAL,"grib_context_buffer_realloc: error allocating %lu bytes",(unsigned long)size); + exit(1); + } + return q; +} + +void* grib_context_buffer_malloc_clear(const grib_context* c, size_t size){ + void *p = grib_context_buffer_malloc(c,size); + if(p) memset(p,0,size); + return p; +} + +void grib_context_set_memory_proc(grib_context* c, grib_malloc_proc m, grib_free_proc f,grib_realloc_proc r) +{ + c->free_mem = f; + c->alloc_mem = m; + c->realloc_mem = r; +} + +void grib_context_set_persistent_memory_proc(grib_context* c, grib_malloc_proc m, grib_free_proc f) +{ + c->free_persistent_mem = f; + c->alloc_persistent_mem = m; +} + +void grib_context_set_buffer_memory_proc(grib_context* c, grib_malloc_proc m, grib_free_proc f,grib_realloc_proc r) +{ + c->free_buffer_mem = f; + c->alloc_buffer_mem = m; + c->realloc_buffer_mem = r; +} + + +void grib_context_set_data_accessing_proc(grib_context* c, grib_data_read_proc read, grib_data_write_proc write, grib_data_tell_proc tell) +{ + c->read = read; + c->write = write; + c->tell = tell; + +} + +/* logging procedure */ +void grib_context_log(const grib_context *c,int level, const char* fmt, ...) +{ + char msg[1024]; + va_list list; + + /* Save some CPU */ + if( (level == GRIB_LOG_DEBUG && c->debug<1) || + (level == GRIB_LOG_WARNING && c->debug<2) ) + return; + + va_start(list,fmt); + vsprintf(msg, fmt, list); + va_end(list); + + if(level & GRIB_LOG_PERROR) + { + level = level & ~GRIB_LOG_PERROR; + + /* #if HAS_STRERROR */ +#if 1 + strcat(msg," ("); + strcat(msg,strerror(errno)); + strcat(msg,")"); +#else + if(errno > 0 && errno < sys_nerr) + { + strcat(msg," ("); + strcat(msg,sys_errlist[errno]); + strcat(msg," )"); + } +#endif + } + + + if(c->output_log) + c->output_log(c,level,msg); +} + +/* logging procedure */ +void grib_context_print(const grib_context *c, void* descriptor,const char* fmt, ...) +{ + char msg[1024]; + va_list list; + va_start(list,fmt); + vsprintf(msg, fmt, list); + va_end(list); + c->print(c,descriptor,msg); +} + diff --git a/src/grib_darray.c b/src/grib_darray.c new file mode 100644 index 000000000..00063b1c1 --- /dev/null +++ b/src/grib_darray.c @@ -0,0 +1,72 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * + * Enrico Fucile + * + ***************************************************************************/ + +#include "grib_api_internal.h" + +grib_darray* grib_darray_new(grib_context* c,size_t size,size_t incsize) { + grib_darray* v=NULL; + if (!c) c=grib_context_get_default(); + v=(grib_darray*)grib_context_malloc(c,sizeof(grib_darray)); + if (!v) { + grib_context_log(c,GRIB_LOG_ERROR, + "grib_darray_new unable to allocate %d bytes\n",sizeof(grib_darray)); + return NULL; + } + v->size=size; + v->n=0; + v->incsize=incsize; + v->v=(double*)grib_context_malloc(c,sizeof(double)*size); + if (!v->v) { + grib_context_log(c,GRIB_LOG_ERROR, + "grib_darray_new unable to allocate %d bytes\n",sizeof(double)*size); + return NULL; + } + return v; +} + +grib_darray* grib_darray_resize(grib_context* c,grib_darray* v) { + int newsize=v->incsize+v->size; + + if (!c) c=grib_context_get_default(); + + v->v=grib_context_realloc(c,v->v,newsize*sizeof(double)); + v->size=newsize; + if (!v->v) { + grib_context_log(c,GRIB_LOG_ERROR, + "grib_darray_resize unable to allocate %d bytes\n",sizeof(double)*newsize); + return NULL; + } + return v; +} + +grib_darray* grib_darray_push(grib_context* c,grib_darray* v,double val) { + size_t start_size=100; + size_t start_incsize=100; + if (!v) v=grib_darray_new(c,start_size,start_incsize); + + if (v->n >= v->size) v=grib_darray_resize(c,v); + v->v[v->n]=val; + v->n++; + return v; +} + +void grib_darray_delete(grib_context* c,grib_darray* v) { + if (!v) return; + if (!c) grib_context_get_default(); + if (v->v) grib_context_free(c,v->v); + grib_context_free(c,v); +} + diff --git a/src/grib_date.c b/src/grib_date.c new file mode 100644 index 000000000..f68c1c72b --- /dev/null +++ b/src/grib_date.c @@ -0,0 +1,190 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile * + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +#define ROUND(a) ((a) >=0 ? (long)((a)+0.5) : (long) ((a)-0.5)) +int grib_julian_to_datetime(double jd,long *year,long* month,long* day, + long *hour,long *minute,long *second) +{ + long z,a,alpha,b,c,d,e; + double dday; + double f; + long s; + + jd+=0.5; + z=(long)jd; + f=jd-z; + + if (z < 2299161) a=z; + else { + alpha=(long)((z-1867216.25)/36524.25); + a=z+1+alpha-(long)(((double)alpha)/4); + } + b=a+1524; + c=(long)((b-122.1)/365.25); + d=(long)(365.25*c); + e=(long)(((double)(b-d))/30.6001); + + dday=b-d-(long)(30.6001*e)+f; + *day=(long)dday; + dday-=*day; + +#if 1 + /* ANF-CG 02.03.2012 */ + s=ROUND((double)(dday*86400)); /* total in sec , no msec*/ + *hour=(long)s/3600; + *minute=(long)((s % 3600)/60); + *second = (long)(s % 60); +#else + /* Old algorithm, now replaced by above. See GRIB-180 */ + dhour=dday*24; + *hour=(long)dhour; + dhour-=*hour; + dminute=dhour*60; + *minute=(long)dminute; + *second=(long)((dminute-*minute)*60); +#endif + + if (e<14) *month=e-1; + else *month=e-13; + + if (*month>2) *year=c-4716; + else *year=c-4715; + + return GRIB_SUCCESS; +} + +int grib_datetime_to_julian(long year,long month,long day, + long hour,long minute,long second,double* jd) +{ + double a,b,dday; + long y,m; + + dday=(double)(hour*3600+minute*60+second)/86400.0+day; + + if ( month < 3) { + y=year-1; + m=month+12; + }else { + y=year; + m=month; + } + a=(long)(((double)y)/100); + + if ( y > 1582 ) b=2-a+(long)(a/4); + else if (y == 1582) { + if (m > 10) b=2-a+(long)(a/4); + else if (m == 10) { + if (day >14) b=2-a+(long)(a/4); + else b=0; + } + else b=0; + } + else b=0; + + *jd=(long)(365.25*(y+4716))+ (long)(30.6001*(m+1))+dday+b-1524.5; + + return GRIB_SUCCESS; +} + + +long grib_julian_to_date(long jdate) +{ + long x,y,d,m,e; + long day,month,year; + + x = 4 * jdate - 6884477; + y = (x / 146097) * 100; + e = x % 146097; + d = e / 4; + + x = 4 * d + 3; + y = (x / 1461) + y; + e = x % 1461; + d = e / 4 + 1; + + x = 5 * d - 3; + m = x / 153 + 1; + e = x % 153; + d = e / 5 + 1; + + if( m < 11 ) + month = m + 2; + else + month = m - 10; + + + day = d; + year = y + m / 11; + + return year * 10000 + month * 100 + day; + +} + +long grib_date_to_julian(long ddate) +{ + long m1,y1,a,b,c,d,j1; + + long month,day,year; + + /*Asserts(ddate > 0);*/ + + year = ddate / 10000; + ddate %= 10000; + month = ddate / 100; + ddate %= 100; + day = ddate; + + + /* if (year < 100) year = year + 1900; */ + + if (month > 2) + { + m1 = month - 3; + y1 = year; + } + else + { + m1 = month + 9; + y1 = year - 1; + } + a = 146097*(y1/100)/4; + d = y1 % 100; + b = 1461*d/4; + c = (153*m1+2)/5+day+1721119; + j1 = a+b+c; + + return(j1); +} + +/* + void basedate_to_verifydate(gribsec1 *s1,request *r) + { + int bdate,vdate,cdate,vd,vtime,vstep; + + bdate = (s1->century-1)*1000000 + s1->year * 10000 + s1->month * 100 + s1->day; + cdate = date_to_julian (bdate); + vtime = cdate * 24 + s1->p1*units[s1->time_unit]; + vd = vtime / 24; + vdate = julian_to_date (vd,mars.y2k); + vtime = vtime % 24; + vstep = 0; + + set_value(r,"DATE","%d",vdate); + set_value(r,"TIME","%02d00",vtime); + set_value(r,"STEP","%d",vstep); + } + */ + diff --git a/src/grib_db.c b/src/grib_db.c new file mode 100644 index 000000000..811588f5c --- /dev/null +++ b/src/grib_db.c @@ -0,0 +1,838 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * Description: grib database routines + * + * + * + */ +#include "grib_api_internal.h" +#define GRIB_START_ARRAY_SIZE 5000 +#define GRIB_ARRAY_INCREMENT 1000 + +#define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; + +#define GRIB_ORDER_BY_ASC 1 +#define GRIB_ORDER_BY_DESC -1 + +GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} + +static int grib_db_new_column(grib_db* db,int id,char* key,int type); +static void grib_db_delete_columns(grib_db* db); +static int grib_db_columns_resize(grib_db* db,size_t newsize); +static int grib_db_column_copy_from_handle(grib_handle* h,grib_db* db,int i); +static grib_db* grib_db_create_from_keys(grib_context* c,char** keys,int nkeys,int* err); +static grib_db* grib_db_create_from_keys(grib_context* c,char** keys,int nkeys,int* err); +static void grib_fieldset* grib_db_fieldset_create(grib_db* db, int* err); +static int grib_fieldset_compare(grib_fieldset* set,int* i,int* j); +static void grib_db_sort(grib_set* set, int beg, int end); +static grib_order_by* grib_db_new_order_by(grib_context* c,char* obstr); +static void grib_db_delete_order_by(grib_context* c,grib_order_by* order_by); +static int grib_db_resize(grib_db* db,size_t newsize); +static int grib_db_resize_fields(grib_db* db,size_t newsize); + + +/* --------------- grib_column functions ------------------*/ +static int grib_db_new_column(grib_db* db,int id,char* key,int type) { + grib_column* column=0; + grib_context* c; + int err=0; + + if (!db) return GRIB_INVALID_ARGUMENT; + + c=db->context; + + db->columns[id].errors=(int*)grib_context_malloc(c, + sizeof(int)*GRIB_START_ARRAY_SIZE); + + switch (type) { + case GRIB_TYPE_LONG: + db->columns[id].long_values=(long*)grib_context_malloc(c, + sizeof(long)*GRIB_START_ARRAY_SIZE); + if (!db->columns[id].long_values) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_new_column : Cannot malloc %d bytes", + sizeof(long)*GRIB_START_ARRAY_SIZE); + err=GRIB_OUT_OF_MEMORY; + return err; + } + break; + case GRIB_TYPE_DOUBLE: + db->columns[id].double_values=(double*)grib_context_malloc(c, + sizeof(double)*GRIB_START_ARRAY_SIZE); + if (!db->columns[id].double_values) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_new_column : Cannot malloc %d bytes", + sizeof(double)*GRIB_START_ARRAY_SIZE); + err=GRIB_OUT_OF_MEMORY; + return err; + } + break; + case GRIB_TYPE_STRING: + db->columns[id].string_values=(char**)grib_context_malloc(c, + sizeof(char*)*GRIB_START_ARRAY_SIZE); + if (!db->columns[id].string_values) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_new_column : Cannot malloc %d bytes", + sizeof(char*)*GRIB_START_ARRAY_SIZE); + err=GRIB_OUT_OF_MEMORY; + return err; + } + break; + default: + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_new_column : unknown column type %d",type); + grib_context_free(c,column); + return err; + } + + db->columns[id].context=c; + db->columns[id].name=strdup(key); + db->columns[id].type=type; + db->columns[id].values_array_size=GRIB_START_ARRAY_SIZE; + db->columns[id].size=0; + return err; +} + +static void grib_db_delete_columns(grib_db* db) { + int i=0; + grib_context* c; + + if (!set) return; + c=db->context; + + for (i=0;icolumns_size;i++) { + switch (db->columns[i].type) { + case GRIB_TYPE_LONG: + grib_context_free(c,db->columns[i].long_values); + break; + case GRIB_TYPE_DOUBLE: + grib_context_free(c,db->columns[i].double_values); + break; + case GRIB_TYPE_STRING: + for (i=0;icolumns[i].size;i++) + grib_context_free(c,db->columns[i].string_values[i]); + grib_context_free(c,db->columns[i].string_values); + break; + default: + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_new_column : unknown column type %d",db->columns[i].type); + } + grib_context_free(c,db->columns[i].errors); + free(db->columns[i].name); + } + grib_context_free(c,db->columns); +} + +static int grib_db_columns_resize(grib_db* db,size_t newsize) { + double* newdoubles; + long* newlongs; + char** newstrings; + int* newerrors; + int i=0; + grib_context* c; + + if (!db || !db->columns) return GRIB_INVALID_ARGUMENT; + + c=db->context; + + if (newsize <= db->columns[0].values_array_size) return 0; + + for (i=0;icolumns_size;i++) { + + switch (db->columns[i].type) { + case GRIB_TYPE_LONG: + newlongs=(long*)grib_context_realloc(c,db->columns[i].long_values, + newsize*sizeof(long)); + if (!newlongs ) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_columns_resize : Cannot malloc %d bytes",newsize-db->columns[i].values_array_size); + return GRIB_OUT_OF_MEMORY; + } else db->columns[i].long_values=newlongs; + break; + case GRIB_TYPE_DOUBLE: + newdoubles=(double*)grib_context_realloc(c,db->columns[i].double_values, + newsize*sizeof(double)); + if (!newdoubles) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_columns_resize : Cannot malloc %d bytes",newsize-db->columns[i].values_array_size); + return GRIB_OUT_OF_MEMORY; + } else db->columns[i].double_values=newdoubles; + break; + case GRIB_TYPE_STRING: + newstrings=(char**)grib_context_realloc(c,db->columns[i].string_values, + newsize*sizeof(char*)); + if (!newstrings) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_columns_resize : Cannot malloc %d bytes",newsize-db->columns[i].values_array_size); + return GRIB_OUT_OF_MEMORY; + } else db->columns[i].string_values=newstrings; + break; + } + newerrors=(int*)grib_context_realloc(c,db->columns[i].errors,newsize*sizeof(int)); + if (!newerrors) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_columns_resize : Cannot malloc %d bytes", + db->columns[i].errors,newsize*sizeof(int)); + return GRIB_OUT_OF_MEMORY; + } else db->columns[i].errors=newerrors; + + db->columns[i].values_array_size=newsize; + + } + + return GRIB_SUCCESS; +} + +static int grib_db_column_copy_from_handle(grib_handle* h,grib_db* db,int i) { + int err=0; + long lval=0; + double dval=0; + char sval[1024]; + size_t slen=1024; + if (!db || !h || db->columns[i].type == 0) + return GRIB_INVALID_ARGUMENT; + + if (db->columns[i].size >= db->columns[i].values_array_size) + grib_db_columns_resize(db,db->columns[i].values_array_size+GRIB_ARRAY_INCREMENT); + + switch (db->columns[i].type) { + case GRIB_TYPE_LONG: + err=grib_get_long(h,db->columns[i].name,&lval); + db->columns[i].long_values[db->columns[i].size]=lval; + break; + case GRIB_TYPE_DOUBLE: + err=grib_get_double(h,db->columns[i].name,&dval); + db->columns[i].double_values[db->columns[i].size]=dval; + break; + case GRIB_TYPE_STRING: + err=grib_get_string(h,db->columns[i].name,sval,&slen); + db->columns[i].string_values[db->columns[i].size]=strdup(sval); + break; + } + + db->columns[i].errors[db->columns[i].size]=err; + db->columns[i].size++; + + return err; +} + +/* --------------- grib_db functions ------------------*/ +grib_db* grib_db_new_from_files(grib_context* c,char* filenames[], +int nfiles, char** keys,int nkeys,int* err) { + int i=0; + int ret=GRIB_SUCCESS; + + grib_db* db=0; + + if (!c) c=grib_context_get_default( ); + + if (( (!keys || nkeys==0) ) || !filenames ) { + *err=GRIB_INVALID_ARGUMENT; + return NULL; + } + + db=grib_db_new_from_file(c,filenames[0],keys,nkeys,err); + if (!db || err != GRIB_SUCCESS) return db; + + *err=GRIB_SUCCESS; + for (i=1;icontext=c; + db->size=0; + db->fields_array_size=size; + db->fields=0; + db->columns=0; + + db->fields=grib_db_create_fields(db->context,size); + + db->columns=(grib_column*)grib_context_malloc(c,sizeof(grib_column)*nkeys); + if (!set->columns) { + grib_context_log(c,GRIB_LOG_ERROR,"grib_db_new_query: memory allocation error"); + *err=GRIB_OUT_OF_MEMORY; + return NULL; + } + for (i=0;icolumns_size=nkeys; + + return db; +} + +void grib_db_delete(grib_db* db) { + grib_context* c=0; + if (!db) return; + + c=set->context; + + grib_db_delete_columns(db); + + grib_db_delete_fields(db); + + grib_context_free( c, db); +} + +grib_query* grib_db_new_query(grib_context* c,const char* where_string, + const char* order_by_string) { + grib_query* q=0; + + if (!c) grib_context_get_default( ); + + q=(grib_query*)grib_context_malloc(c,sizeof(grib_query)); + + q->where_string=0; + q->order_by=0; + + if (where_string) q->where_string=strdup(where_string); + + if (order_by_string) { + q->order_by=grib_db_new_order_by(set->context,(char*)order_by_string); + if ((err=grib_db_set_order_by(set,ob)) != GRIB_SUCCESS) + return q; + } + + return q; +} + +grib_fieldset* grib_db_execute(grib_db* db,grib_query* query,int* err) { + grib_fieldset* set=NULL; + + if (!db) { + *err=GRIB_INVALID_ARGUMENT; + return NULL; + } + set= grib_db_fieldset_create(db,err); + if (*err!=GRIB_SUCCESS) return set; + + set->query=query; + + *err=grib_db_apply_where(set,query->where_string); + if (*err!=GRIB_SUCCESS) return set; + + *err=grib_db_apply_order_by(set,query->order_by); + if (*err!=GRIB_SUCCESS) return set; + + return set; + +} + +static void grib_fieldset* grib_db_fieldset_create(grib_db* db, int* err) { + grib_fieldset* set=(grib_fieldset*)grib_context_malloc(db->context, + sizeof(grib_fieldset)); + + if (!set) { + *err=GRIB_OUT_OF_MEMORY; + return NULL; + } + + set->db=db; + set->context=db->context; + set->grib_query=NULL; + set->size=0; + set->filter=NULL; + set->order=NULL; + + return set; +} + +int grib_db_apply_where(grib_fieldset* set) { + int err=GRIB_SUCCESS; + grib_math* m=0; + + if (!set) return GRIB_INVALID_ARGUMENT; + + /* + m=grib_math_new(set->context,where_string,&err); + + print_math(m); + printf("\n"); + */ + + if (set->filter) grib_db_delete_int_array(set->filter); + set->filter=grib_db_create_int_array(set->context,db->size); + + if (set->order) grib_db_delete_int_array(set->order); + set->order=grib_db_create_int_array(set->context,db->size); + + for (i=0;isize;i++) set->filter[i]=i; + + return err; +} + +int grib_db_apply_order_by(grib_fieldset* set) { + int err=0; + grib_order_by* ob=NULL; + + if (!set || !set->query) return GRIB_INVALID_ARGUMENT; + + if (set->query->order_by) grib_db_sort(set,0,set->size-1); + + grib_db_rewind(set); + + return err; +} + +static int grib_fieldset_compare(grib_fieldset* set,int* i,int* j) { + int ret=0; + double d=0; + int idkey=0; + grib_order_by* ob=0; + int ii=0,jj=0; + int *order=0,*filter=0; + + if (!set || !set->order_by) return GRIB_INVALID_ARGUMENT; + ob=set->query->order_by; + order=set->order->el; + filter=set->filter->el; + + ii=*(set->filter->el+*(order+*i)); + jj=*(set->filter->el+*(order+*j)); + + while (ob) { + idkey=ob->idkey; + switch (set->db->columns[idkey].type) { + case GRIB_TYPE_STRING: + ret=grib_inline_strcmp(set->db->columns[idkey].string_values[ii], + set->db->columns[idkey].string_values[jj]); + break; + + case GRIB_TYPE_DOUBLE: + d=set->db->columns[idkey].double_values[ii]- + set->db->columns[idkey].double_values[jj]; + if (d > 0 ) ret=1; + else if ( d == 0) ret=0; + else ret=-1; + break; + + case GRIB_TYPE_LONG: + ret=set->db->columns[idkey].long_values[ii]- + set->db->columns[idkey].long_values[jj]; + break; + default: + return GRIB_INVALID_TYPE; + } + if (ret!=0) { + ret*=ob->mode; + break; + } + ob=ob->next; + } + + return ret; +} + +static void grib_db_sort(grib_set* set, int beg, int end) { + double temp; + int l=0,r=0; + if (end > beg) { + l = beg + 1; + r = end; + while (l < r) { + if ( grib_db_compare(set,&l,&beg) <= 0 ) { + l++; + } else if(grib_db_compare(set,&r,&beg) >= 0 ) { + r--; + } else { + SWAP(set->order->el[l],set->order->el[r]) + } + } + + if (grib_db_compare(set,&l,&beg) < 0) { + SWAP(set->order->el[l],set->order->el[beg]) + l--; + } else { + l--; + SWAP(set->order->el[l],set->order->el[beg]) + } + + grib_db_sort(set, beg, l); + grib_db_sort(set, r, end); + } +} + +static void grib_db_delete_order_by(grib_context* c,grib_order_by* order_by) { + grib_order_by* ob=order_by; + + if (!c) c=grib_context_get_default(); + + while (order_by) { + if (order_by->key) free(order_by->key); + ob=order_by; + order_by=order_by->next; + grib_context_free( c,ob); + } + + return; +} + +static grib_order_by* grib_db_new_order_by(grib_context* c,char* obstr) { + char *t1=0,*t2=0,*p=0; + int id=0; + char *z=0,*zs=0; + int mode,mode_default=GRIB_ORDER_BY_ASC; + grib_order_by *ob,*sob; + + if (!obstr) return NULL; + + z=strdup(obstr); + zs=z; + grib_trim(&z); + + if (strlen(z)==0) {return 0;} + + ob=(grib_order_by*)grib_context_malloc(c,sizeof(grib_order_by)); + sob=ob; + ob->key=0; + ob->idkey=0; + ob->mode=0; + ob->next=0; + + if (z) t1=strtok(z,","); + + while (t1) { + grib_trim(&t1); + t2=strdup(t1); + p=t2; + while ( *p != ' ' && *p != '\0' ) p++; + mode=mode_default; + if (p != t2) { + while ( *p == ' ' && *p != '\0' ) p++; + if (*p != '\0') { + *(p-1)='\0'; + if (!grib_inline_strcmp(p,"asc")) mode=GRIB_ORDER_BY_ASC; + if (!grib_inline_strcmp(p,"desc")) mode=GRIB_ORDER_BY_DESC; + } + grib_trim(&p); + } + grib_trim(&t2); + id=-1; + t1=strtok(NULL,","); + + if (ob->key) { + ob->next=(grib_order_by*)grib_context_malloc(c,sizeof(grib_order_by)); + ob=ob->next; + ob->key=0; + ob->next=0; + } + ob->mode=mode; + ob->key=t2; + ob->idkey=id; + } + + free(zs); + return sob; +} + +int grib_db_load(grib_db* db,char* filename) { + int ret=GRIB_SUCCESS; + int err=0; + int i=0; + grib_handle* h=0; + int nkeys; + grib_file* file; + double offset=0; + long length=0; + grib_context* c=0; + + if (!db || !filename ) return GRIB_INVALID_ARGUMENT; + c=db->context; + + nkeys=db->columns_size; + + file=grib_file_open(filename,"r",&err); + if (!file || !file->handle) return err; + + while((h = grib_handle_new_from_file(c,file->handle,&err)) + != NULL || ret != GRIB_SUCCESS ) { + if (!h) return ret; + + err=GRIB_SUCCESS; + for (i=0;icolumns_size;i++) { + err=grib_db_column_copy_from_handle(h,db,i); + if (err != GRIB_SUCCESS) ret=err; + } + if (err==GRIB_SUCCESS || err==GRIB_NOT_FOUND) { + if (db->fields_array_size < db->columns[0].values_array_size) { + ret=grib_db_resize(db,db->columns[0].values_array_size); + if (ret!=GRIB_SUCCESS) return ret; + } + offset=0; + ret=grib_get_double(h,"offset",&offset); + db->fields[db->size]=(grib_field*)grib_context_malloc(c,sizeof(grib_field)); + db->fields[db->size]->file=file; + file->refcount++; + db->fields[db->size]->offset=(off_t)offset; + ret=grib_get_long(h,"totalLength",&length); + db->fields[db->size]->length=length; + db->size=set->columns[0].size; + } + grib_handle_delete(h); + } + if (h) grib_handle_delete(h); + + grib_file_close(file->name,&err); + + return ret; +} + +static int grib_db_resize(grib_db* db,size_t newsize) { + int err=0; + + err=grib_db_resize_fields(db,newsize); + if (err != 0) return err; + + set->fields_array_size=newsize; + + return GRIB_SUCCESS; +} + +void grib_db_rewind(grib_fieldset* set) { + if (set) set->current=0; +} + +grib_handle* grib_db_next_handle(grib_fieldset* set,int* err) { + grib_handle* h; + *err=GRIB_SUCCESS; + h=grib_db_retrieve(set,set->current,err); + if (*err==GRIB_SUCCESS) { + set->current++; + } + return h; +} + +int grib_db_count(grib_fieldset* set) { + return set->size; +} + +grib_handle* grib_db_retrieve(grib_fieldset* set,int i,int* err) { + grib_handle* h=0; + grib_field* field=0; + *err=GRIB_SUCCESS; + if ( !set ) { + *err=GRIB_INVALID_ARGUMENT; + return NULL; + } + if (i >= set->size) return NULL; + + field=set->db->fields[set->filter->el[set->order->el[i]]]; + grib_file_open(field->file->name,"r",err); + if (*err!=GRIB_SUCCESS) return NULL; + + fseeko(field->file->handle,field->offset,SEEK_SET); + h=grib_handle_new_from_file(set->context,field->file->handle,err); + if (*err!=GRIB_SUCCESS) return NULL; + + grib_file_close(field->file->name,err); + + return h; +} + +static grib_int_array* grib_db_create_int_array(grib_context* c,size_t size) { + grib_int_array* a; + int i=0; + + if (!c) c=grib_context_get_default(); + + a=(grib_int_array*)grib_context_malloc(c,sizeof(grib_int_array)); + + if (!a) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_create_int_array : Cannot malloc %d bytes", + sizeof(grib_int_array)); + return NULL; + } + + a->el=(int*)grib_context_malloc(c,sizeof(int)*size); + if (!a->el) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_db_create_int_array : Cannot malloc %d bytes", + sizeof(int)*size); + return NULL; + } + + a->size=size; + a->context=c; + for (i=0;iel[i]=i; + + return a; +} + +static int grib_db_resize_int_array(grib_int_array* a,size_t newsize) { + int* el; + int err=0; + if (!a) return GRIB_INVALID_ARGUMENT; + + newsize=newsize*sizeof(int); + + el=(int*)grib_context_realloc(a->context,a->el,newsize); + if (!el) { + grib_context_log(a->context, GRIB_LOG_ERROR, + "grib_db_resize_int_array : Cannot malloc %d bytes", + newsize); + return GRIB_OUT_OF_MEMORY; + } else a->el=el; + a->size=newsize; + return err; +} + +static void grib_db_delete_int_array(grib_int_array* f) { + + grib_context* c=f->context; + + if (!f) return; + + grib_context_free(c,f->el); + grib_context_free(c,f); + +} + +static grib_field** grib_db_create_fields(grib_context* c,size_t size) { + int i=0; + grib_field** fields=(grib_field**)grib_context_malloc(c,size*sizeof(grib_field*)); + if (!fields) return NULL; + for (i=0;icontext,set->fields,newsize*sizeof(grib_field*)); + if (!fields) { + grib_context_log(set->context, GRIB_LOG_ERROR, + "grib_db_resize_fields : Cannot malloc %d bytes", + newsize*sizeof(grib_field*)); + return GRIB_OUT_OF_MEMORY; + } else db->fields=fields; + + for (i=set->fields_array_size;ifields[i]=0; + + db->fields_array_size=newsize; + return err; +} + +static void grib_db_delete_fields(grib_fieldset* set) { + int i; + for (i=0;isize;i++) { + if (!set->fields[i]) continue; + set->fields[i]->file->refcount--; + grib_context_free(set->context,set->fields[i]); + } + grib_context_free(set->context,set->fields); + +} + +static void grib_trim(char** x) { + char* p=0; + while (**x == ' ' && **x != '\0' ) (*x)++; + if (**x == '\0') return; + p=(*x)+strlen(*x)-1; + while ( *p == ' ' ) {*p='\0';p--;} + if ( *p == ' ' ) *p='\0'; +} + +static int grib_db_set_order_by(grib_fieldset* set,grib_order_by* ob) { + grib_order_by* next=ob; + int i=0; + + while(next) { + next->idkey=-1; + for (i=0;icolumns_size; i++) { + if (!grib_inline_strcmp(next->key,set->columns[i].name)) { + next->idkey=i; + break; + } + } + if (next->idkey == -1) { + grib_context_log(set->context,GRIB_LOG_ERROR, + "Unable to apply the order by. Key missing from the fieldset.\n"); + return GRIB_MISSING_KEY; + } + next=next->next; + } + + set->order_by=ob; + + return GRIB_SUCCESS; + +} + diff --git a/src/grib_dependency.c b/src/grib_dependency.c new file mode 100644 index 000000000..fac5630f6 --- /dev/null +++ b/src/grib_dependency.c @@ -0,0 +1,162 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +static grib_handle* handle_of(grib_accessor* observed) +{ + grib_handle *h = observed->parent->h; + while(h->main) h = h->main; + return h; +} + +void grib_dependency_add(grib_accessor* observer,grib_accessor* observed) +{ + grib_handle *h = handle_of(observed); + grib_dependency *d = h->dependencies; + grib_dependency *last = 0; + +/* + printf("observe %p %p %s %s\n",(void*)observed,(void*)observer, observed?observed->name:"NULL", + observer?observer->name:"NULL"); +*/ + + if(!observer || !observed) + { + return; + } + + /* Assert(h == handle_of(observer)); */ + + /* Check if already in list */ + while(d) + { + if(d->observer == observer && d->observed == observed) + return; + last = d; + d = d->next; + } + +#if 0 + d = h->dependencies; + while(d) + { + last = d; + d = d->next; + } + +#endif + + d = (grib_dependency*)grib_context_malloc_clear(h->context,sizeof(grib_dependency)); + Assert(d); + + d->observed = observed; + d->observer = observer; + d->next = 0; + +/* + printf("observe %p %p %s %s\n",(void*)observed,(void*)observer, observed->name,observer->name); +*/ +#if 0 + d->next = h->dependencies; + h->dependencies = d; +#endif + + if(last) + last->next = d; + else + h->dependencies = d; + +} + +void grib_dependency_remove_observed(grib_accessor* observed) +{ + grib_handle *h = handle_of(observed); + grib_dependency *d = h->dependencies; + /* printf("%s\n",observed->name); */ + + while(d) + { + if(d->observed == observed) + { + /* TODO: Notify observer...*/ + d->observed = 0;/* + printf("grib_dependency_remove_observed %s\n",observed->name); */ + } + d = d->next; + } +} + +/* TODO: Notification must go from outer blocks to inner block */ + +int grib_dependency_notify_change(grib_accessor* observed) +{ + grib_handle *h = handle_of(observed); + grib_dependency *d = h->dependencies; + int ret = GRIB_SUCCESS; + + /* Do a two pass mark&sweep, in case some depedancies + are added while we notify */ + + while(d) + { + d->run = (d->observed == observed && d->observer != 0); + d = d->next; + } + + d = h->dependencies; + while(d) + { + if(d->run) + { + /*printf("grib_dependency_notify_change %s %s %p\n",observed->name,d->observer ? d->observer->name : "?", (void*)d->observer);*/ + if( d->observer && (ret = grib_accessor_notify_change(d->observer,observed)) + != GRIB_SUCCESS) return ret; + } + d = d->next; + } + return ret; +} + +void grib_dependency_remove_observer(grib_accessor* observer) +{ + grib_handle *h = handle_of(observer); + grib_dependency *d = h->dependencies; + + if (!observer) return; + + while(d) + { + if(d->observer == observer) + { + d->observer = 0; + } + d = d->next; + } +} + +void grib_dependency_observe_expression(grib_accessor* observer,grib_expression* e) +{ + grib_expression_add_dependency(e,observer); +} + +void grib_dependency_observe_arguments(grib_accessor* observer,grib_arguments* a) +{ + while(a) + { + grib_dependency_observe_expression(observer,a->expression); + a = a->next; + } +} diff --git a/src/grib_dumper.c b/src/grib_dumper.c new file mode 100644 index 000000000..7f4f28a1b --- /dev/null +++ b/src/grib_dumper.c @@ -0,0 +1,199 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" + + +static void init_dumpers(grib_dumper_class* c,grib_dumper* d) +{ + if(c) { + grib_dumper_class *s = c->super ? *(c->super) : NULL; + if(!c->inited) + { + if(c->init_class) c->init_class(c); + c->inited = 1; + } + init_dumpers(s,d); + if(c->init) c->init(d); + } +} + +void grib_init_dumper(grib_dumper* d) +{ + init_dumpers(d->cclass,d); +} + +void grib_dumper_delete(grib_dumper* d) +{ + grib_dumper_class *c = d->cclass; + grib_context *ctx = d->handle->context; + while(c) + { + grib_dumper_class *s = c->super ? *(c->super) : NULL; + if(c->destroy) c->destroy(d); + c = s; + } + grib_context_free(ctx,d); +} + + +void grib_dump_long(grib_dumper* d, grib_accessor* a, const char* comment) +{ + grib_dumper_class *c = d->cclass; + while(c) + { + if(c->dump_long) + { + c->dump_long(d, a, comment); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + +void grib_dump_double(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_class *c = d->cclass; + while(c) + { + if(c->dump_double) + { + c->dump_double(d, a, comment); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + +void grib_dump_string(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_class *c = d->cclass; + while(c) + { + if(c->dump_string) + { + c->dump_string(d, a, comment); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + +void grib_dump_label(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_class *c = d->cclass; + while(c) + { + if(c->dump_label) + { + c->dump_label(d, a, comment); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + +void grib_dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_class *c = d->cclass; + while(c) + { + if(c->dump_bytes) + { + c->dump_bytes(d, a, comment); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + +void grib_dump_bits(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_class *c = d->cclass; + while(c) + { + if(c->dump_bits) + { + c->dump_bits(d, a, comment); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + + +void grib_dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block) +{ + grib_dumper_class *c = d->cclass; + while(c) + { + if(c->dump_section) + { + c->dump_section(d, a, block); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + +void grib_dump_values(grib_dumper* d,grib_accessor* a) +{ + grib_dumper_class *c = d->cclass; + while(c) + { + if(c->dump_values) + { + c->dump_values(d, a); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(0); +} + +void grib_dump_header(grib_dumper* d,grib_handle* h) +{ + grib_dumper_class *c = d->cclass; + while(c) + { + if(c->header) + { + c->header(d,h); + return; + } + c = c->super ? *(c->super) : NULL; + } +} + +void grib_dump_footer(grib_dumper* d,grib_handle* h) +{ + grib_dumper_class *c = d->cclass; + while(c) + { + if(c->footer) + { + c->footer(d,h); + return; + } + c = c->super ? *(c->super) : NULL; + } +} diff --git a/src/grib_dumper_class.c b/src/grib_dumper_class.c new file mode 100644 index 000000000..0078003a1 --- /dev/null +++ b/src/grib_dumper_class.c @@ -0,0 +1,85 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* This file is generated my ./make_class.pl */ +#include "grib_dumper_class.h" + + +struct table_entry +{ + char *type; + grib_dumper_class **cclass; +}; + + +static struct table_entry table[] = +{ + /* This file is generated my ./make_class.pl */ +#include "grib_dumper_factory.h" +}; + +#define NUMBER(x) (sizeof(x)/sizeof(x[0])) + +grib_dumper* grib_dumper_factory(const char* op, grib_handle* h, FILE* out, unsigned long option_flags,void* arg) +{ + int i; + for(i = 0; i < NUMBER(table) ; i++) + if(strcmp(op,table[i].type) == 0) + { + grib_dumper_class* c = *(table[i].cclass); + grib_dumper* d = (grib_dumper*) grib_context_malloc_clear(h->context,c->size); + d->depth = 0; + d->handle = h; + d->cclass = c; + d->option_flags = option_flags; + d->arg = arg; + d->out = out; + grib_init_dumper(d); + grib_context_log(h->context,GRIB_LOG_DEBUG,"Creating dumper of type : %s ", op); + return d; + } + grib_context_log(h->context,GRIB_LOG_ERROR,"Unknown type : %s for dumper", op); + return NULL; +} + +void grib_dump_accessors_block(grib_dumper* dumper,grib_block_of_accessors* block) +{ + grib_accessor* a = block->first; + while(a) + { + grib_print_accessor(a,dumper); + a = a->next; + } +} + +int grib_print (grib_handle* h, const char* name, grib_dumper *d ){ + + grib_accessor* act = grib_find_accessor(h, name); + + if(act){ + grib_print_accessor(act, d ); + return GRIB_SUCCESS; + } + return GRIB_NOT_FOUND; +} + +void grib_dump_content(grib_handle* h, FILE* f,const char* mode,unsigned long option_flags,void *data) +{ + grib_dumper *dumper; + dumper = grib_dumper_factory(mode?mode:"serialize",h,f,option_flags,data); + grib_dump_header(dumper,h); + grib_dump_accessors_block(dumper,h->root->block); + grib_dump_footer(dumper,h); + grib_dumper_delete(dumper); + +} + diff --git a/src/grib_dumper_class.h b/src/grib_dumper_class.h new file mode 100644 index 000000000..e49908af4 --- /dev/null +++ b/src/grib_dumper_class.h @@ -0,0 +1,10 @@ +/* This file is automatically generated by ./make_class.pl, do not edit */ +extern grib_dumper_class* grib_dumper_class_c_code; +extern grib_dumper_class* grib_dumper_class_compare; +extern grib_dumper_class* grib_dumper_class_debug; +extern grib_dumper_class* grib_dumper_class_default; +extern grib_dumper_class* grib_dumper_class_file; +extern grib_dumper_class* grib_dumper_class_keys; +extern grib_dumper_class* grib_dumper_class_serialize; +extern grib_dumper_class* grib_dumper_class_string; +extern grib_dumper_class* grib_dumper_class_wmo; diff --git a/src/grib_dumper_class_c_code.c b/src/grib_dumper_class_c_code.c new file mode 100644 index 000000000..db77601aa --- /dev/null +++ b/src/grib_dumper_class_c_code.c @@ -0,0 +1,453 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = dumper + IMPLEMENTS = dump_long;dump_bits + IMPLEMENTS = dump_double;dump_string + IMPLEMENTS = dump_bytes;dump_values + IMPLEMENTS = dump_label;dump_section + IMPLEMENTS = init;destroy + IMPLEMENTS = header;footer + MEMBERS = int cr + END_CLASS_DEF + + */ + + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "dumper.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_dumper_class*); +static int init (grib_dumper* d); +static int destroy (grib_dumper*); +static void dump_long (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bits (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_double (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_string (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bytes (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_values (grib_dumper* d, grib_accessor* a); +static void dump_label (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); +static void header (grib_dumper*,grib_handle*); +static void footer (grib_dumper*,grib_handle*); + +typedef struct grib_dumper_c_code { + grib_dumper dumper; +/* Members defined in c_code */ + int cr; +} grib_dumper_c_code; + + +static grib_dumper_class _grib_dumper_class_c_code = { + 0, /* super */ + "c_code", /* name */ + sizeof(grib_dumper_c_code), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + &destroy, /* free mem */ + &dump_long, /* dump long */ + &dump_double, /* dump double */ + &dump_string, /* dump string */ + &dump_label, /* dump labels */ + &dump_bytes, /* dump bytes */ + &dump_bits, /* dump bits */ + &dump_section, /* dump section */ + &dump_values, /* dump values */ + &header, /* header */ + &footer, /* footer */ +}; + +grib_dumper_class* grib_dumper_class_c_code = &_grib_dumper_class_c_code; + +/* END_CLASS_IMP */ +static void init_class (grib_dumper_class* c){} + +static int init(grib_dumper* d) +{ + /* grib_dumper_c_code *self = (grib_dumper_c_code*)d; */ + return GRIB_SUCCESS; +} + +static int destroy (grib_dumper* d){ + return GRIB_SUCCESS; +} + +static void pcomment(FILE* f,long value,const char* p) +{ + int cr = 0; + fprintf(f,"\n /* %ld = ",value); + + while(*p) + { + switch(*p) + { + case ';': + fprintf(f,"\n "); + cr = 1; + break; + + case ':': + if(cr) + fprintf(f,"\n See "); + else + fprintf(f,". See "); + break; + + default: + fputc(*p,f); + break; + } + + p++; + } + + fprintf(f," */\n"); + +} + +static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_c_code *self = (grib_dumper_c_code*)d; + long value; size_t size = 1; + int err = grib_unpack_long(a,&value,&size); + + if((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + return; + +#if 1 + if(comment) pcomment(self->dumper.out,value,comment); +#endif + + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) + fprintf(self->dumper.out," GRIB_CHECK(grib_set_missing(h,\"%s\"),%d);\n",a->name,0); + else + fprintf(self->dumper.out," GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n",a->name,value,0); + + if(err) + fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); + + if(comment) fprintf(self->dumper.out,"\n"); + +} + +static int test_bit(long a, long b) {return a&(1<flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return; + + if(a->length == 0) + return; + + buf[0] = 0; + + for(i=0;i<(a->length*8);i++) { + if(test_bit(value,a->length*8-i-1)) + strcat(buf,"1"); + else + strcat(buf,"0"); + } + + if(comment) { + strcat(buf,";"); + strcat(buf,comment); + } + + pcomment(self->dumper.out,value,buf); + + if(err) + fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); + else + fprintf(self->dumper.out," GRIB_CHECK(grib_set_long(h,\"%s\",%ld),%d);\n",a->name,value,0); + + fprintf(self->dumper.out,"\n"); +} + +static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_c_code *self = (grib_dumper_c_code*)d; + double value; size_t size = 1; + int err = grib_unpack_double(a,&value,&size); + if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return; + + if(a->length == 0) + return; + +#if 0 + if(comment) fprintf(self->dumper.out,"/* %s */\n",comment); +#endif + + fprintf(self->dumper.out," GRIB_CHECK(grib_set_double(h,\"%s\",%g),%d);\n",a->name,value,0); + + if(err) + fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); +} + +static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_c_code *self = (grib_dumper_c_code*)d; + char value[1024]; size_t size = sizeof(value); + int err = grib_unpack_string(a,value,&size); + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return; + + if(a->length == 0) + return; + +#if 1 + if(comment) fprintf(self->dumper.out,"/* %s */\n",comment); +#endif + + fprintf(self->dumper.out," p = \"%s\";\n",value); + fprintf(self->dumper.out," size = strlen(p);\n"); + fprintf(self->dumper.out," GRIB_CHECK(grib_set_string(h,\"%s\",p,&size),%d);\n",a->name,0); + + if(err) + fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); +} + +static void dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_c_code *self = (grib_dumper_c_code*)d; + int err =0; + size_t size = a->length; + unsigned char* buf; + + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return; + + if(size == 0) + return; + + buf = grib_context_malloc(d->handle->context,size); + + if(!buf) + { + fprintf(self->dumper.out,"/* %s: cannot malloc(%ld) */\n",a->name,(long)size); + return; + } + + + err = grib_unpack_bytes(a,buf,&size); + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err)); + return ; + } + +#if 0 + if(size > 100) { + more = size - 100; + size = 100; + } + + k = 0; + /* if(size > 100) size = 100; */ + while(k < size) + { + int j; + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + for(j = 0; j < 16 && k < size; j++, k++) + { + fprintf(self->dumper.out,"%02x",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); + } +#endif + grib_context_free(d->handle->context,buf); +} + +static void dump_values(grib_dumper* d,grib_accessor* a) +{ + grib_dumper_c_code *self = (grib_dumper_c_code*)d; + int k,err =0; + double* buf = NULL; + int type=0; + char stype[10]; + size_t size=0; + stype[0]='\0'; + + if((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + || ((a->flags & GRIB_ACCESSOR_FLAG_DATA) + && (d->option_flags & GRIB_DUMP_FLAG_NO_DATA) ) ) + return; + + size=grib_value_count(a); + if(size == 1){ + dump_double(d,a,NULL); + return ; + } + + type=grib_accessor_get_native_type(a); + switch (type) { + case GRIB_TYPE_LONG: + sprintf(stype,"%s","long"); + break; + case GRIB_TYPE_DOUBLE: + sprintf(stype,"%s","double"); + break; + default: + return; + } + + buf = grib_context_malloc(d->handle->context,size * sizeof(double)); + if(!buf) + { + fprintf(self->dumper.out,"/* %s: cannot malloc(%ld) */\n",a->name,(long)size); + return; + } + + err = grib_unpack_double(a,buf,&size); + + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," /* Error accessing %s (%s) */",a->name,grib_get_error_message(err)); + return ; + } + + fprintf(self->dumper.out," size = %ld;\n",(long)size); + fprintf(self->dumper.out," v%s = (%s*)calloc(size,sizeof(%s));\n",stype,stype,stype); + fprintf(self->dumper.out," if(!v%s) {\n",stype); + fprintf(self->dumper.out," fprintf(stderr,\"failed to allocate %%d bytes\\n\",size*sizeof(%s));\n",stype); + fprintf(self->dumper.out," exit(1);\n"); + fprintf(self->dumper.out," }\n"); + + + fprintf(self->dumper.out,"\n "); + k = 0; + while(k < size) + { + fprintf(self->dumper.out," v%s[%4d] = %7g;",stype,k,buf[k]); + k++; + if(k%4 == 0) fprintf(self->dumper.out,"\n "); + + } + if(size%4) fprintf(self->dumper.out,"\n"); + fprintf(self->dumper.out,"\n"); + fprintf(self->dumper.out," GRIB_CHECK(grib_set_%s_array(h,\"%s\",v%s,size),%d);\n",stype,a->name,stype,0); + fprintf(self->dumper.out," free(v%s);\n",stype); + + grib_context_free(d->handle->context,buf); +} + +static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_c_code *self = (grib_dumper_c_code*)d; + fprintf(self->dumper.out,"\n /* %s */\n\n",a->name); +} + +static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block) +{ + /*grib_dumper_c_code *self = (grib_dumper_c_code*)d;*/ + grib_dump_accessors_block(d,block); +} + +static void header(grib_dumper* d,grib_handle* h) +{ + long edition=0; + int ret=0; + grib_dumper_c_code *self = (grib_dumper_c_code*)d; + ret=grib_get_long(h,"editionNumber",&edition); + if (ret != GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"Unable to get edition number."); + Assert(0); + } + + fprintf(self->dumper.out, + "#include \n" + "\n" + "/* This code was generated automatically */\n" + "\n"); + + fprintf(self->dumper.out, + "\n" + "int main(int argc,const char** argv)\n" + "{\n" + " grib_handle *h = NULL;\n" + " size_t size = 0;\n" + " double* vdouble = NULL;\n" + " long* vlong = NULL;\n" + " FILE* f = NULL;\n" + " const char* p = NULL;\n" + " const void* buffer = NULL;\n" + "\n" + " if(argc != 2) {\n" + " fprintf(stderr,\"usage: %%s out\\n\",argv[0]);\n" + " exit(1);\n" + " }\n" + "\n" + " h = grib_handle_new_from_samples(NULL,\"GRIB%ld\");\n" + " if(!h) {\n" + " fprintf(stderr,\"Cannot create grib handle\\n\");\n" + " exit(1);\n" + " }\n" + "\n",(long)edition + ); +} + +static void footer(grib_dumper* d,grib_handle* h) +{ + grib_dumper_c_code *self = (grib_dumper_c_code*)d; + + fprintf(self->dumper.out, + + "/* Save the message */\n" + "\n" + " f = fopen(argv[1],\"w\");\n" + " if(!f) {\n" + " perror(argv[1]);\n" + " exit(1);\n" + " }\n" + "\n" + " GRIB_CHECK(grib_get_message(h,&buffer,&size),0);\n" + "\n" + " if(fwrite(buffer,1,size,f) != size) {\n" + " perror(argv[1]);\n" + " exit(1);\n" + " }\n" + "\n" + " if(fclose(f)) {\n" + " perror(argv[1]);\n" + " exit(1);\n" + " }\n" + "\n" + " grib_handle_delete(h);\n" + " return 0;\n" + "}\n" + ); +} diff --git a/src/grib_dumper_class_debug.c b/src/grib_dumper_class_debug.c new file mode 100644 index 000000000..105227877 --- /dev/null +++ b/src/grib_dumper_class_debug.c @@ -0,0 +1,460 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = dumper + IMPLEMENTS = dump_long;dump_bits + IMPLEMENTS = dump_double;dump_string + IMPLEMENTS = dump_bytes;dump_values + IMPLEMENTS = dump_label;dump_section + IMPLEMENTS = init;destroy + MEMBERS = long section_offset + MEMBERS = long begin + MEMBERS = long end + END_CLASS_DEF + + */ + + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "dumper.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_dumper_class*); +static int init (grib_dumper* d); +static int destroy (grib_dumper*); +static void dump_long (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bits (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_double (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_string (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bytes (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_values (grib_dumper* d, grib_accessor* a); +static void dump_label (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); + +typedef struct grib_dumper_debug { + grib_dumper dumper; +/* Members defined in debug */ + long section_offset; + long begin; + long end; +} grib_dumper_debug; + + +static grib_dumper_class _grib_dumper_class_debug = { + 0, /* super */ + "debug", /* name */ + sizeof(grib_dumper_debug), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + &destroy, /* free mem */ + &dump_long, /* dump long */ + &dump_double, /* dump double */ + &dump_string, /* dump string */ + &dump_label, /* dump labels */ + &dump_bytes, /* dump bytes */ + &dump_bits, /* dump bits */ + &dump_section, /* dump section */ + &dump_values, /* dump values */ + 0, /* header */ + 0, /* footer */ +}; + +grib_dumper_class* grib_dumper_class_debug = &_grib_dumper_class_debug; + +/* END_CLASS_IMP */ +static void set_begin_end(grib_dumper* d,grib_accessor* a); + +static void init_class (grib_dumper_class* c){} + +static int init(grib_dumper* d) +{ + grib_dumper_debug *self = (grib_dumper_debug*)d; + self->section_offset=0; + + return GRIB_SUCCESS; +} + +static int destroy (grib_dumper* d){ + return GRIB_SUCCESS; +} + + +static void aliases(grib_dumper* d,grib_accessor* a) +{ + int i; + grib_dumper_debug *self = (grib_dumper_debug*)d; + + if(a->all_names[1]) + { + char *sep = ""; + fprintf(self->dumper.out," ["); + + for(i = 1; i < MAX_ACCESSOR_NAMES; i++) + { + if(a->all_names[i]) + { + if(a->all_name_spaces[i]) + fprintf(self->dumper.out,"%s%s.%s", sep,a->all_name_spaces[i],a->all_names[i]); + else + fprintf(self->dumper.out,"%s%s", sep,a->all_names[i]); + } + sep = ", "; + } + fprintf(self->dumper.out,"]"); + } +} + +static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_debug *self = (grib_dumper_debug*)d; + long value; size_t size = 1; + int err = grib_unpack_long(a,&value,&size); + int i; + + if( a->length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) + return; + + set_begin_end(d,a); + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a)) + fprintf(self->dumper.out,"%ld-%ld %s %s = MISSING",self->begin,self->end,a->creator->op, a->name); + else + fprintf(self->dumper.out,"%ld-%ld %s %s = %ld",self->begin,self->end,a->creator->op, a->name,value); + if(comment) fprintf(self->dumper.out," [%s]",comment); + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + + aliases(d,a); + + + fprintf(self->dumper.out,"\n"); +} + +static int test_bit(long a, long b) {return a&(1<length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + set_begin_end(d,a); + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"%ld-%ld %s %s = %ld [",self->begin,self->end, a->creator->op,a->name,value); + + for(i=0;i<(a->length*8);i++) { + if(test_bit(value,a->length*8-i-1)) + fprintf(self->dumper.out,"1"); + else + fprintf(self->dumper.out,"0"); + } + + if(comment) + fprintf(self->dumper.out,":%s]",comment); + else + fprintf(self->dumper.out,"]"); + + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + + aliases(d,a); + fprintf(self->dumper.out,"\n"); +} + +static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_debug *self = (grib_dumper_debug*)d; + double value; size_t size = 1; + int err = grib_unpack_double(a,&value,&size); + int i; + + if( a->length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + set_begin_end(d,a); + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a)) + fprintf(self->dumper.out,"%ld-%ld %s %s = MISSING",self->begin,self->end,a->creator->op, a->name); + else + fprintf(self->dumper.out,"%ld-%ld %s %s = %g",self->begin,self->end,a->creator->op, a->name,value); + if(comment) fprintf(self->dumper.out," [%s]",comment); + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + aliases(d,a); + fprintf(self->dumper.out,"\n"); +} + +static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_debug *self = (grib_dumper_debug*)d; + int err=0; + int i; + size_t size=0; + char *value=NULL; + char *p=NULL ; + + err = grib_get_string_length(a->parent->h, a->name, &size); + if ( (size < 2) && grib_is_missing_internal(a) ) { + /* GRIB-302: transients and missing keys. Need to re-adjust the size */ + size = 10; /* big enough to hold the string "missing" */ + } + + value=grib_context_malloc_clear(a->parent->h->context,size); + if (!value) return; + err=grib_unpack_string(a,value,&size); + + if(err) strcpy(value,""); + + p=value; + + if( a->length == 0 && (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + set_begin_end(d,a); + + while(*p) { if(!isprint(*p)) *p = '.'; p++; } + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"%ld-%ld %s %s = %s",self->begin,self->end,a->creator->op, a->name,value); + + if(comment) fprintf(self->dumper.out," [%s]",comment); + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + aliases(d,a); + fprintf(self->dumper.out,"\n"); + + if (value) grib_context_free(a->parent->h->context,value); +} + +static void dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_debug *self = (grib_dumper_debug*)d; + int i,k,err =0; + int more = 0; + size_t size = a->length; + unsigned char* buf = grib_context_malloc(d->handle->context,size); + + if( a->length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + set_begin_end(d,a); + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"%ld-%ld %s %s = %ld",self->begin,self->end,a->creator->op, a->name,a->length); + aliases(d,a); + fprintf(self->dumper.out," {"); + + if(!buf) + { + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; + } + + fprintf(self->dumper.out,"\n"); + + err = grib_unpack_bytes(a,buf,&size); + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err)); + return ; + } + + if(size > 100) { + more = size - 100; + size = 100; + } + + k = 0; + /* if(size > 100) size = 100; */ + while(k < size) + { + int j; + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + for(j = 0; j < 16 && k < size; j++, k++) + { + fprintf(self->dumper.out,"%02x",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); + } + + if(more) + { + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"... %d more values\n",more); + } + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name); + grib_context_free(d->handle->context,buf); +} + +static void dump_values(grib_dumper* d,grib_accessor* a) +{ + grib_dumper_debug *self = (grib_dumper_debug*)d; + int i,k,err =0; + int more = 0; + double* buf = NULL; + size_t size=0; + + if( a->length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + size=grib_value_count(a); + if(size == 1){ + dump_double(d,a,NULL); + return ; + } + buf = grib_context_malloc(d->handle->context,size * sizeof(double)); + + set_begin_end(d,a); + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"%ld-%ld %s %s = (%ld,%ld)",self->begin,self->end,a->creator->op, a->name,(long)size,a->length); + aliases(d,a); + fprintf(self->dumper.out," {"); + + if(!buf) + { + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; + } + + fprintf(self->dumper.out,"\n"); + + err = grib_unpack_double(a,buf,&size); + + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err)); + return ; + } + + if(size > 100) { + more = size - 100; + size = 100; + } + + + k = 0; + while(k < size) + { +#if 1 + int j; + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + for(j = 0; j < 8 && k < size; j++, k++) + { + fprintf(self->dumper.out,"%10g",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); +#else + + fprintf(self->dumper.out,"%d %g\n",k,buf[k]); + +#endif + + } + if(more) + { + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"... %d more values\n",more); + } + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name); + grib_context_free(d->handle->context,buf); +} + +static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_debug *self = (grib_dumper_debug*)d; + int i; + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:""); +} + +static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block) +{ + grib_dumper_debug *self = (grib_dumper_debug*)d; + int i; + /* grib_section* s = grib_get_sub_section(a); */ + grib_section* s = a->sub_section; + + +#if 1 + if(a->name[0] == '_'){ + grib_dump_accessors_block(d,block); + return; + } +#endif + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"======> %s %s (%ld,%ld,%ld)\n",a->creator->op, + a->name,a->length,(long)s->length,(long)s->padding); + if (!strncmp(a->name,"section",7)) self->section_offset=a->offset; + /*printf("------------- section_offset = %ld\n",self->section_offset);*/ + d->depth += 3; + grib_dump_accessors_block(d,block); + d->depth -= 3; + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name); +} + +static void set_begin_end(grib_dumper* d,grib_accessor* a) { + grib_dumper_debug *self = (grib_dumper_debug*)d; + if ((d->option_flags & GRIB_DUMP_FLAG_OCTECT) != 0) { + + self->begin=a->offset-self->section_offset+1; + self->end=grib_get_next_position_offset(a)-self->section_offset; + } else { + self->begin=a->offset; + self->end=grib_get_next_position_offset(a); + } +} diff --git a/src/grib_dumper_class_default.c b/src/grib_dumper_class_default.c new file mode 100644 index 000000000..6c33811a8 --- /dev/null +++ b/src/grib_dumper_class_default.c @@ -0,0 +1,618 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = dumper + IMPLEMENTS = dump_long;dump_bits + IMPLEMENTS = dump_double;dump_string + IMPLEMENTS = dump_bytes;dump_values + IMPLEMENTS = dump_label;dump_section + IMPLEMENTS = init;destroy + MEMBERS = long section_offset + MEMBERS = long begin + MEMBERS = long end + END_CLASS_DEF + + */ + + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "dumper.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_dumper_class*); +static int init (grib_dumper* d); +static int destroy (grib_dumper*); +static void dump_long (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bits (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_double (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_string (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bytes (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_values (grib_dumper* d, grib_accessor* a); +static void dump_label (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); + +typedef struct grib_dumper_default { + grib_dumper dumper; +/* Members defined in default */ + long section_offset; + long begin; + long end; +} grib_dumper_default; + + +static grib_dumper_class _grib_dumper_class_default = { + 0, /* super */ + "default", /* name */ + sizeof(grib_dumper_default), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + &destroy, /* free mem */ + &dump_long, /* dump long */ + &dump_double, /* dump double */ + &dump_string, /* dump string */ + &dump_label, /* dump labels */ + &dump_bytes, /* dump bytes */ + &dump_bits, /* dump bits */ + &dump_section, /* dump section */ + &dump_values, /* dump values */ + 0, /* header */ + 0, /* footer */ +}; + +grib_dumper_class* grib_dumper_class_default = &_grib_dumper_class_default; + +/* END_CLASS_IMP */ + +static void print_offset(FILE* out,grib_dumper* d,grib_accessor* a); + +static void init_class (grib_dumper_class* c){} + +static int init(grib_dumper* d) +{ + grib_dumper_default *self = (grib_dumper_default*)d; + self->section_offset=0; + + return GRIB_SUCCESS; +} + +static int destroy (grib_dumper* d){ + return GRIB_SUCCESS; +} + + +static void aliases(grib_dumper* d,grib_accessor* a) +{ +int i; + grib_dumper_default *self = (grib_dumper_default*)d; + + if( (d->option_flags & GRIB_DUMP_FLAG_ALIASES) == 0) + return; + + if(a->all_names[1]) + { + char *sep = ""; + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# ALIASES: "); + + for(i = 1; i < MAX_ACCESSOR_NAMES; i++) + { + if(a->all_names[i]) + { + if(a->all_name_spaces[i]) + fprintf(self->dumper.out,"%s%s.%s", sep,a->all_name_spaces[i],a->all_names[i]); + else + fprintf(self->dumper.out,"%s%s", sep,a->all_names[i]); + } + sep = ", "; + } + fprintf(self->dumper.out,"\n"); + } +} + +static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_default *self = (grib_dumper_default*)d; + long value; size_t size = 1; + long *values=NULL; + int err = 0; + int i; + + size=grib_value_count(a); + + if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + return; + + print_offset(self->dumper.out,d,a); + + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0){ + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# type %s \n",a->creator->op); + } + + if (size>1) { + values=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*size); + err=grib_unpack_long(a,values,&size); + } else { + err=grib_unpack_long(a,&value,&size); + } + + aliases(d,a); + if(comment) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# %s \n",comment); + } + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"#-READ ONLY- "); + } else + fprintf(self->dumper.out," "); + + if (size>1) { + int cols=19; + int count=0; + fprintf(self->dumper.out,"%s = { \t",a->name); + for (i=0;icols) {fprintf(self->dumper.out,"\n\t\t\t\t");count=0;} + fprintf(self->dumper.out,"%ld ",values[i]); + count++; + } + fprintf(self->dumper.out,"}\n"); + grib_context_free(a->parent->h->context,values); + } else { + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) ) + fprintf(self->dumper.out,"%s = MISSING;",a->name); + else + fprintf(self->dumper.out,"%s = %ld;",a->name,value); + } + + if(err) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err)); + } + + fprintf(self->dumper.out,"\n"); +} + +static int test_bit(long a, long b) {return a&(1<flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + return; + + print_offset(self->dumper.out,d,a); + + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# type %s \n",a->creator->op); + } + + aliases(d,a); + if(comment) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# %s \n",comment); + } + + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# flags: "); + for(i=0;i<(a->length*8);i++) { + if(test_bit(value,a->length*8-i-1)) + fprintf(self->dumper.out,"1"); + else + fprintf(self->dumper.out,"0"); + } + fprintf(self->dumper.out,"\n"); + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"#-READ ONLY- "); + } else + fprintf(self->dumper.out," "); + + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) ) + fprintf(self->dumper.out,"%s = MISSING;",a->name); + else + fprintf(self->dumper.out,"%s = %ld;",a->name,value); + + + if(err) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err)); + } + + fprintf(self->dumper.out,"\n"); +} + +static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_default *self = (grib_dumper_default*)d; + double value; size_t size = 1; + int err = grib_unpack_double(a,&value,&size); + + + if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + return; + + print_offset(self->dumper.out,d,a); + + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# type %s \n",a->creator->op); + } + + aliases(d,a); + if(comment) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# %s \n",comment); + } + + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"#-READ ONLY- "); + } else + fprintf(self->dumper.out," "); + + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) ) + fprintf(self->dumper.out,"%s = MISSING;",a->name); + else + fprintf(self->dumper.out,"%s = %g;",a->name,value); + + + if(err) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err)); + } + + fprintf(self->dumper.out,"\n"); +} + +static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_default *self = (grib_dumper_default*)d; + char *value=NULL; + char *p = NULL; + size_t size = 0; + grib_context* c=NULL; + int err = grib_get_string_length(a->parent->h,a->name,&size); + + c=a->parent->h->context; + if (size==0) return; + + value=grib_context_malloc_clear(c,size); + if (!value) { + grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size); + return; + } + + err = grib_unpack_string(a,value,&size); + p=value; + + if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + return; + + while(*p) { if(!isprint(*p)) *p = '.'; p++; } + + print_offset(self->dumper.out,d,a); + + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# type %s \n",a->creator->op); + } + + aliases(d,a); + if(comment) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# %s \n",comment); + } + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"#-READ ONLY- "); + } else + fprintf(self->dumper.out," "); + + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) ) + fprintf(self->dumper.out,"%s = MISSING;",a->name); + else + fprintf(self->dumper.out,"%s = %s;",a->name,value); + + + if(err) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err)); + } + + fprintf(self->dumper.out,"\n"); + grib_context_free(c,value); +} + +static void dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment) +{ + +#if 0 + grib_dumper_default *self = (grib_dumper_default*)d; + int i,k,err =0; + int more = 0; + size_t size = a->length; + unsigned char* buf = grib_context_malloc(d->handle->context,size); + + if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + return; + + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + fprintf(self->dumper.out,"-READ ONLY- "); + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + /*print_offset(self->dumper.out,self->begin,self->end);*/ + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) + fprintf(self->dumper.out,"%s ",a->creator->op); + + fprintf(self->dumper.out,"%s = %ld",a->name,a->length); + aliases(d,a); + fprintf(self->dumper.out," {"); + + if(!buf) + { + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; + } + + fprintf(self->dumper.out,"\n"); + + err = grib_unpack_bytes(a,buf,&size); + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err)); + return ; + } + + if(size > 100) { + more = size - 100; + size = 100; + } + + k = 0; + /* if(size > 100) size = 100; */ + while(k < size) + { + int j; + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + for(j = 0; j < 16 && k < size; j++, k++) + { + fprintf(self->dumper.out,"%02x",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); + } + + if(more) + { + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"... %d more values\n",more); + } + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name); + grib_context_free(d->handle->context,buf); +#endif +} + +static void dump_values(grib_dumper* d,grib_accessor* a) +{ + grib_dumper_default *self = (grib_dumper_default*)d; + int k,err =0; + int more = 0; + double* buf = NULL; + size_t size=0; + + if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + return; + + size=grib_value_count(a); + if(size == 1){ + dump_double(d,a,NULL); + return ; + } + buf = grib_context_malloc(d->handle->context,size * sizeof(double)); + + print_offset(self->dumper.out,d,a); + + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"# type %s \n",a->creator->op); + } + + aliases(d,a); + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"#-READ ONLY- "); + } else + fprintf(self->dumper.out," "); + + fprintf(self->dumper.out,"%s(%ld) = ",a->name,(long)size); + aliases(d,a); + fprintf(self->dumper.out," {"); + + if(!buf) + { + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; + } + + fprintf(self->dumper.out,"\n"); + + err = grib_unpack_double(a,buf,&size); + + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err)); + return ; + } + + if(!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 100) { + more = size - 100; + size = 100; + } + + k = 0; + while(k < size) { +#if 1 + int j; + fprintf(self->dumper.out," "); + for(j = 0; j < 5 && k < size; j++, k++) { + fprintf(self->dumper.out,"%.10e",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); +#else + + fprintf(self->dumper.out,"%d %g\n",k,buf[k]); + +#endif + + } if(more) { + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"... %d more values\n",more); + } + + fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"} \n"); + grib_context_free(d->handle->context,buf); +} + +static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment) +{ + /*grib_dumper_default *self = (grib_dumper_default*)d; + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:"");*/ +} + +static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block) +{ + grib_dumper_default *self = (grib_dumper_default*)d; + grib_section* s = a->sub_section; + int is_default_section=0; + char* upper=NULL; + char tmp[512]; + char *p=NULL,*q=NULL; + if (!strncmp(a->name,"section",7)) is_default_section=1; + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + if (is_default_section) { + upper=(char*)malloc(strlen(a->name)+1); + p=(char*)a->name; + q=upper; + while (*p != '\0') { + *q=toupper(*p); + q++; + p++; + } + *q='\0'; + + sprintf(tmp,"%s ( length=%ld, padding=%ld )",upper,(long)s->length,(long)s->padding); + /* + fprintf(self->dumper.out,"#============== %-38s ==============\n",tmp); + */ + free(upper); + self->section_offset=a->offset; + } else { + + } + + /*printf("------------- section_offset = %ld\n",self->section_offset);*/ + d->depth += 3; + grib_dump_accessors_block(d,block); + d->depth -= 3; + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + /*fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name);*/ +} + +static void print_offset(FILE* out,grib_dumper* d,grib_accessor* a) { + int i,k; + long offset; + long begin=0,end=0; + size_t size=0,more=0; + grib_dumper_default *self = (grib_dumper_default*)d; + + begin=a->offset-self->section_offset+1;; + end =grib_get_next_position_offset(a)-self->section_offset; + + if ((d->option_flags & GRIB_DUMP_FLAG_HEXADECIMAL) != 0 && a->length != 0) { + if (begin == end) { + fprintf(self->dumper.out," "); + fprintf(out,"# Octet: "); + fprintf(out,"%ld" ,begin); + } + else { + fprintf(self->dumper.out," "); + fprintf(out,"# Octets: "); + fprintf(out,"%ld-%ld" ,begin,end); + } + fprintf(out," = "); + size=a->length; + + if(!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 112) { + more = size - 112; + size = 112; + } + + k = 0; + while(k < size) { + offset=a->offset; + for (i=0;i<14 && kparent->h->buffer->data[offset]); + offset++; + } + if (kdumper.out,"\n #"); + } if(more) { + fprintf(self->dumper.out,"\n #... %d more values\n",(int)more); + } + fprintf(self->dumper.out,"\n"); + + } +} + diff --git a/src/grib_dumper_class_keys.c b/src/grib_dumper_class_keys.c new file mode 100644 index 000000000..0e9e7fdbe --- /dev/null +++ b/src/grib_dumper_class_keys.c @@ -0,0 +1,320 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = dumper + IMPLEMENTS = dump_long;dump_bits + IMPLEMENTS = dump_double;dump_string + IMPLEMENTS = dump_bytes;dump_values + IMPLEMENTS = dump_label;dump_section + IMPLEMENTS = init;destroy + MEMBERS = long section_offset + MEMBERS = long begin + MEMBERS = long end + END_CLASS_DEF + + */ + + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "dumper.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_dumper_class*); +static int init (grib_dumper* d); +static int destroy (grib_dumper*); +static void dump_long (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bits (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_double (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_string (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bytes (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_values (grib_dumper* d, grib_accessor* a); +static void dump_label (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); + +typedef struct grib_dumper_keys { + grib_dumper dumper; +/* Members defined in keys */ + long section_offset; + long begin; + long end; +} grib_dumper_keys; + + +static grib_dumper_class _grib_dumper_class_keys = { + 0, /* super */ + "keys", /* name */ + sizeof(grib_dumper_keys), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + &destroy, /* free mem */ + &dump_long, /* dump long */ + &dump_double, /* dump double */ + &dump_string, /* dump string */ + &dump_label, /* dump labels */ + &dump_bytes, /* dump bytes */ + &dump_bits, /* dump bits */ + &dump_section, /* dump section */ + &dump_values, /* dump values */ + 0, /* header */ + 0, /* footer */ +}; + +grib_dumper_class* grib_dumper_class_keys = &_grib_dumper_class_keys; + +/* END_CLASS_IMP */ + +static void print_offset(FILE* out,grib_dumper* d,grib_accessor* a); + +static void init_class (grib_dumper_class* c){} + +static int init(grib_dumper* d) +{ + grib_dumper_keys *self = (grib_dumper_keys*)d; + self->section_offset=0; + + return GRIB_SUCCESS; +} + +static int destroy (grib_dumper* d){ + return GRIB_SUCCESS; +} + +static void aliases(grib_dumper* d,grib_accessor* a) +{ +int i; + grib_dumper_keys *self = (grib_dumper_keys*)d; + + if( (d->option_flags & GRIB_DUMP_FLAG_ALIASES) == 0) + return; + + if(a->all_names[1]) + { + char *sep = ""; + fprintf(self->dumper.out," ( ALIASES: "); + + for(i = 1; i < MAX_ACCESSOR_NAMES; i++) + { + if(a->all_names[i]) + { + if(a->all_name_spaces[i]) + fprintf(self->dumper.out,"%s%s.%s", sep,a->all_name_spaces[i],a->all_names[i]); + else + fprintf(self->dumper.out,"%s%s", sep,a->all_names[i]); + } + sep = ", "; + } + printf(") "); + } +} + +static void dump_name_only(grib_dumper* d,grib_accessor* a,const char* comment) { + grib_dumper_keys *self = (grib_dumper_keys*)d; + + print_offset(self->dumper.out,d,a); + + + if (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) { + return; + } + + if( a->length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 && + (d->option_flags & GRIB_DUMP_FLAG_DUMP_OK) != 0) + return; + + fprintf(self->dumper.out,"%s",a->name); + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + fprintf(self->dumper.out," (read only)"); + } + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0){ + fprintf(self->dumper.out," (type %s) ",a->creator->op); + } + + aliases(d,a); + + fprintf(self->dumper.out,"\n"); +} + +static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment) +{ + dump_name_only(d,a,comment); +} + +static void dump_bits(grib_dumper* d,grib_accessor* a,const char* comment) +{ + dump_name_only(d,a,comment); +} + +static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment) +{ + dump_name_only(d,a,comment); +} + +static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment) +{ + dump_name_only(d,a,comment); +} + +static void dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment) +{ + +#if 0 + grib_dumper_keys *self = (grib_dumper_keys*)d; + int i,k,err =0; + int more = 0; + size_t size = a->length; + unsigned char* buf = grib_context_malloc(d->handle->context,size); + + if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0) + return; + + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + fprintf(self->dumper.out,"-READ ONLY- "); + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + /*print_offset(self->dumper.out,self->begin,self->end);*/ + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) + fprintf(self->dumper.out,"%s ",a->creator->op); + + fprintf(self->dumper.out,"%s = %ld",a->name,a->length); + aliases(d,a); + fprintf(self->dumper.out," {"); + + if(!buf) + { + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; + } + + fprintf(self->dumper.out,"\n"); + + err = grib_unpack_bytes(a,buf,&size); + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err)); + return ; + } + + if(size > 100) { + more = size - 100; + size = 100; + } + + k = 0; + /* if(size > 100) size = 100; */ + while(k < size) + { + int j; + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + for(j = 0; j < 16 && k < size; j++, k++) + { + fprintf(self->dumper.out,"%02x",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); + } + + if(more) + { + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"... %d more values\n",more); + } + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name); + grib_context_free(d->handle->context,buf); +#endif +} + +static void dump_values(grib_dumper* d,grib_accessor* a) +{ + dump_name_only(d,a,0); +} + +static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment) +{ + /*grib_dumper_keys *self = (grib_dumper_keys*)d; + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:"");*/ +} + +static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block) +{ + grib_dumper_keys *self = (grib_dumper_keys*)d; + /*grib_section* s = grib_get_sub_section(a);*/ + int is_default_section=0; + char* upper=NULL; + char *p=NULL,*q=NULL; + if (!strncmp(a->name,"section",7)) is_default_section=1; + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + if (is_default_section) { + upper=(char*)malloc(strlen(a->name)+1); + p=(char*)a->name; + q=upper; + while (*p != '\0') { + *q=toupper(*p); + if (*q == '_' ) *q=' '; + q++; + p++; + } + *q='\0'; + + /*sprintf(tmp,"%s ",upper,(long)s->length,(long)s->padding);*/ + + fprintf(self->dumper.out,"====> %s <==== \n",upper); + + free(upper); + self->section_offset=a->offset; + } else { + + } + + /*printf("------------- section_offset = %ld\n",self->section_offset);*/ + d->depth += 3; + grib_dump_accessors_block(d,block); + d->depth -= 3; + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + /*fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name);*/ +} + +static void print_offset(FILE* out,grib_dumper* d,grib_accessor* a) { + +} + diff --git a/src/grib_dumper_class_serialize.c b/src/grib_dumper_class_serialize.c new file mode 100644 index 000000000..f9f7e2c56 --- /dev/null +++ b/src/grib_dumper_class_serialize.c @@ -0,0 +1,428 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = dumper + IMPLEMENTS = dump_long;dump_bits + IMPLEMENTS = dump_double;dump_string + IMPLEMENTS = dump_bytes;dump_values + IMPLEMENTS = dump_label;dump_section + IMPLEMENTS = init;destroy + MEMBERS = char* format + END_CLASS_DEF + + */ + + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "dumper.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_dumper_class*); +static int init (grib_dumper* d); +static int destroy (grib_dumper*); +static void dump_long (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bits (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_double (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_string (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bytes (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_values (grib_dumper* d, grib_accessor* a); +static void dump_label (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); + +typedef struct grib_dumper_serialize { + grib_dumper dumper; +/* Members defined in serialize */ + char* format; +} grib_dumper_serialize; + + +static grib_dumper_class _grib_dumper_class_serialize = { + 0, /* super */ + "serialize", /* name */ + sizeof(grib_dumper_serialize), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + &destroy, /* free mem */ + &dump_long, /* dump long */ + &dump_double, /* dump double */ + &dump_string, /* dump string */ + &dump_label, /* dump labels */ + &dump_bytes, /* dump bytes */ + &dump_bits, /* dump bits */ + &dump_section, /* dump section */ + &dump_values, /* dump values */ + 0, /* header */ + 0, /* footer */ +}; + +grib_dumper_class* grib_dumper_class_serialize = &_grib_dumper_class_serialize; + +/* END_CLASS_IMP */ +static void init_class (grib_dumper_class* c){} + +static int init(grib_dumper* d) +{ + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + self->format = (char*)d->arg; + return GRIB_SUCCESS; +} + +static int destroy (grib_dumper* d){ + return GRIB_SUCCESS; +} + +static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + long value; size_t size = 1; + int err = grib_unpack_long(a,&value,&size); + + if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0 && + (strcmp(a->cclass->name,"lookup") != 0) ) + return; + + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_LONG)) + fprintf(self->dumper.out,"%s = MISSING", a->name); + else + fprintf(self->dumper.out,"%s = %ld", a->name,value); + + if ( ((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0) && + (strcmp(a->cclass->name,"lookup") != 0) ) + fprintf(self->dumper.out," (read_only)"); + +#if 0 + if(comment) fprintf(self->dumper.out," [%s]",comment); +#endif + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + + fprintf(self->dumper.out,"\n"); + +} + +#if 0 +static int test_bit(long a, long b) {return a&(1<flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) + return; + + fprintf(self->dumper.out,"%s = %ld ", a->name,value); + +#if 0 + + fprintf(self->dumper.out,"["); + for(i=0;i<(a->length*8);i++) { + if(test_bit(value,a->length*8-i-1)) + fprintf(self->dumper.out,"1"); + else + fprintf(self->dumper.out,"0"); + } + + if(comment) + fprintf(self->dumper.out,":%s]",comment); + else + fprintf(self->dumper.out,"]"); +#endif + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + + fprintf(self->dumper.out,"\n"); + +} + +static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + double value; size_t size = 1; + int err = grib_unpack_double(a,&value,&size); + + if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) + return; + + + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && (value == GRIB_MISSING_DOUBLE)) + fprintf(self->dumper.out,"%s = MISSING", a->name); + else + fprintf(self->dumper.out,"%s = %g",a->name,value); + + if ( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 ) fprintf(self->dumper.out," (read_only)"); + +#if 0 + if(comment) fprintf(self->dumper.out," [%s]",comment); +#endif + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + fprintf(self->dumper.out,"\n"); + +} + +static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + char value[1024]; size_t size = sizeof(value); + int err = grib_unpack_string(a,value,&size); + int i; + + char *p = value; + + if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) + return; + + while(*p) { if(!isprint(*p)) *p = '.'; p++; } + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + + + + fprintf(self->dumper.out,"%s = %s", a->name,value); + if ( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 ) fprintf(self->dumper.out," (read_only)"); + +#if 0 + if(comment) fprintf(self->dumper.out," [%s]",comment); +#endif + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + fprintf(self->dumper.out,"\n"); + +} + +static void dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + int i,k,err =0; + int more = 0; + size_t size = a->length; + unsigned char* buf = grib_context_malloc(d->handle->context,size); + + if( (a->flags & GRIB_ACCESSOR_FLAG_HIDDEN) != 0 ) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) + return; + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"%s = (%ld) {", a->name,a->length); + + if(!buf) + { + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; + } + + fprintf(self->dumper.out,"\n"); + + err = grib_unpack_bytes(a,buf,&size); + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err)); + return ; + } + + if(size > 100) { + more = size - 100; + size = 100; + } + + k = 0; + /* if(size > 100) size = 100; */ + while(k < size) + { + int j; + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + for(j = 0; j < 16 && k < size; j++, k++) + { + fprintf(self->dumper.out,"%02x",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); + } + + if(more) + { + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"... %d more values\n",more); + } + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name); + grib_context_free(d->handle->context,buf); +} + +static void dump_values(grib_dumper* d,grib_accessor* a) +{ + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + int k,err =0; + double* buf = NULL; + int last=0; + int columns=4; + char* values_format=NULL; + char* default_format="%.16e"; + char* columns_str=NULL; + size_t len=0; + char* pc=NULL; + char* pcf=NULL; + size_t size=0; + values_format=default_format; + + if((a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + return; + size=grib_value_count(a); + + if (self->format) { + if (self->format[0]=='\"') values_format=self->format+1; + else values_format=self->format; + last=strlen(values_format)-1; + if (values_format[last]=='\"') values_format[last]='\0'; + } + + + pc = values_format; + pcf = values_format; + while( *pc!='\0' && *pc != '%') pc++; + if (strlen(pc) > 1 ) { + values_format=pc; + len=pc-pcf; + } else { + values_format=default_format; + len=0; + } + + if (len>0) { + columns_str=(char*)malloc((len+1)*sizeof(char)); + columns_str=memcpy(columns_str,pcf,len); + columns_str[len]='\0'; + columns=atoi(columns_str); + free(columns_str); + } + + if(size == 1){ + dump_double(d,a,NULL); + return ; + } + + if ((d->option_flags & GRIB_DUMP_FLAG_VALUES) == 0 ) return; + + buf = grib_context_malloc(d->handle->context,size * sizeof(double)); + + fprintf(self->dumper.out,"%s (%ld) {",a->name,(long)size); + + if(!buf) + { + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; + } + + fprintf(self->dumper.out,"\n"); + + err = grib_unpack_double(a,buf,&size); + + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err)); + return ; + } + + k = 0; + while(k < size) + { + int j; + for(j = 0; j < columns && k < size; j++, k++) + { + fprintf(self->dumper.out,values_format,buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); + } + fprintf(self->dumper.out,"}\n"); + grib_context_free(d->handle->context,buf); +} + +static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment) +{ +#if 0 + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + int i; + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:""); +#endif +} + +static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block) +{ + const char* secstr="section"; + int len=0; + grib_dumper_serialize *self = (grib_dumper_serialize*)d; + + len=strlen(secstr); + + if(a->name[0] == '_'){ + grib_dump_accessors_block(d,block); + return; + } + + if (strncmp(secstr,a->name,len)==0) + fprintf(self->dumper.out,"#------ %s -------\n",a->name); + + + grib_dump_accessors_block(d,block); + +#if 0 + fprintf(self->dumper.out,"<------ %s %s\n",a->creator->op, a->name); +#endif +} diff --git a/src/grib_dumper_class_wmo.c b/src/grib_dumper_class_wmo.c new file mode 100644 index 000000000..44c4365f2 --- /dev/null +++ b/src/grib_dumper_class_wmo.c @@ -0,0 +1,560 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = dumper + IMPLEMENTS = dump_long;dump_bits + IMPLEMENTS = dump_double;dump_string + IMPLEMENTS = dump_bytes;dump_values + IMPLEMENTS = dump_label;dump_section + IMPLEMENTS = init;destroy + MEMBERS = long section_offset + MEMBERS = long begin + MEMBERS = long end + END_CLASS_DEF + + */ + + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "dumper.class" and rerun ./make_class.pl + +*/ + +static void init_class (grib_dumper_class*); +static int init (grib_dumper* d); +static int destroy (grib_dumper*); +static void dump_long (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bits (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_double (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_string (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_bytes (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_values (grib_dumper* d, grib_accessor* a); +static void dump_label (grib_dumper* d, grib_accessor* a,const char* comment); +static void dump_section (grib_dumper* d, grib_accessor* a,grib_block_of_accessors* block); + +typedef struct grib_dumper_wmo { + grib_dumper dumper; +/* Members defined in wmo */ + long section_offset; + long begin; + long end; +} grib_dumper_wmo; + + +static grib_dumper_class _grib_dumper_class_wmo = { + 0, /* super */ + "wmo", /* name */ + sizeof(grib_dumper_wmo), /* size */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* init */ + &destroy, /* free mem */ + &dump_long, /* dump long */ + &dump_double, /* dump double */ + &dump_string, /* dump string */ + &dump_label, /* dump labels */ + &dump_bytes, /* dump bytes */ + &dump_bits, /* dump bits */ + &dump_section, /* dump section */ + &dump_values, /* dump values */ + 0, /* header */ + 0, /* footer */ +}; + +grib_dumper_class* grib_dumper_class_wmo = &_grib_dumper_class_wmo; + +/* END_CLASS_IMP */ +static void set_begin_end(grib_dumper* d,grib_accessor* a); +static void print_offset(FILE* out,long begin,long end); +static void print_hexadecimal(FILE* out,unsigned long flags,grib_accessor* a); + +static void init_class (grib_dumper_class* c){} + +static int init(grib_dumper* d) +{ + grib_dumper_wmo *self = (grib_dumper_wmo*)d; + self->section_offset=0; + + return GRIB_SUCCESS; +} + +static int destroy (grib_dumper* d){ + return GRIB_SUCCESS; +} + + +static void aliases(grib_dumper* d,grib_accessor* a) +{ +int i; + grib_dumper_wmo *self = (grib_dumper_wmo*)d; + + if( (d->option_flags & GRIB_DUMP_FLAG_ALIASES) == 0) + return; + + if(a->all_names[1]) + { + char *sep = ""; + fprintf(self->dumper.out," ["); + + for(i = 1; i < MAX_ACCESSOR_NAMES; i++) + { + if(a->all_names[i]) + { + if(a->all_name_spaces[i]) + fprintf(self->dumper.out,"%s%s.%s", sep,a->all_name_spaces[i],a->all_names[i]); + else + fprintf(self->dumper.out,"%s%s", sep,a->all_names[i]); + } + sep = ", "; + } + fprintf(self->dumper.out,"]"); + } +} + +static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_wmo *self = (grib_dumper_wmo*)d; + long value = 0; size_t size =0; + long *values=NULL; + int err = 0; + int i=0; + + size=grib_value_count(a); + + + if (size>1) { + values=grib_context_malloc_clear(a->parent->h->context,sizeof(long)*size); + err=grib_unpack_long(a,values,&size); + } else { + err=grib_unpack_long(a,&value,&size); + } + + if( a->length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + if( (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) != 0 && + (d->option_flags & GRIB_DUMP_FLAG_READ_ONLY) == 0) + return; + + set_begin_end(d,a); + + + print_offset(self->dumper.out,self->begin,self->end); + + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) + fprintf(self->dumper.out,"%s ",a->creator->op); + + if (size>1) { + int cols=19; + int count=0; + fprintf(self->dumper.out,"%s = { \t",a->name); + for (i=0;icols) {fprintf(self->dumper.out,"\n\t\t\t\t");count=0;} + fprintf(self->dumper.out,"%ld ",values[i]); + count++; + } + fprintf(self->dumper.out,"}\n"); + grib_context_free(a->parent->h->context,values); + } else { + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) ) + fprintf(self->dumper.out,"%s = MISSING",a->name); + else + fprintf(self->dumper.out,"%s = %ld",a->name,value); + + print_hexadecimal(self->dumper.out,d->option_flags,a); + + if(comment) fprintf(self->dumper.out," [%s]",comment); + } + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + + aliases(d,a); + + + fprintf(self->dumper.out,"\n"); +} + +static int test_bit(long a, long b) {return a&(1<length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + set_begin_end(d,a); + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + print_offset(self->dumper.out,self->begin,self->end); + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) + fprintf(self->dumper.out,"%s ",a->creator->op); + + fprintf(self->dumper.out,"%s = %ld [",a->name,value); + + for(i=0;i<(a->length*8);i++) { + if(test_bit(value,a->length*8-i-1)) + fprintf(self->dumper.out,"1"); + else + fprintf(self->dumper.out,"0"); + } +/* + if(comment) + fprintf(self->dumper.out,":%s]",comment); + else +*/ + fprintf(self->dumper.out,"]"); + + if (err==0) print_hexadecimal(self->dumper.out,d->option_flags,a); + + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + + aliases(d,a); + fprintf(self->dumper.out,"\n"); +} + +static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_wmo *self = (grib_dumper_wmo*)d; + double value; size_t size = 1; + int err = grib_unpack_double(a,&value,&size); + + + if( a->length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + set_begin_end(d,a); + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + + print_offset(self->dumper.out,self->begin,self->end); + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) + fprintf(self->dumper.out,"%s ",a->creator->op); + + if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a)) + fprintf(self->dumper.out,"%s = MISSING",a->name); + else + fprintf(self->dumper.out,"%s = %g",a->name,value); + /*if(comment) fprintf(self->dumper.out," [%s]",comment);*/ + + if (err==0) print_hexadecimal(self->dumper.out,d->option_flags,a); + + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + aliases(d,a); + fprintf(self->dumper.out,"\n"); +} + +static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_wmo *self = (grib_dumper_wmo*)d; + size_t size=0; + char *value=NULL; + char *p=NULL; + int err = grib_get_string_length(a->parent->h,a->name,&size); + + value=grib_context_malloc_clear(a->parent->h->context,size); + if (!value) { + grib_context_log(a->parent->h->context,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size); + return; + } + err=grib_unpack_string(a,value,&size); + p=value; + + if( a->length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + set_begin_end(d,a); + + while(*p) { if(!isprint(*p)) *p = '.'; p++; } + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + print_offset(self->dumper.out,self->begin,self->end); + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) + fprintf(self->dumper.out,"%s ",a->creator->op); + + fprintf(self->dumper.out,"%s = %s",a->name,value); + + if (err==0) print_hexadecimal(self->dumper.out,d->option_flags,a); + + /*if(comment) fprintf(self->dumper.out," [%s]",comment);*/ + if(err) + fprintf(self->dumper.out," *** ERR=%d (%s)",err,grib_get_error_message(err)); + aliases(d,a); + fprintf(self->dumper.out,"\n"); + if (value) grib_context_free(a->parent->h->context,value); +} + +static void dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment) +{ + grib_dumper_wmo *self = (grib_dumper_wmo*)d; + int i,k,err =0; + int more = 0; + size_t size = a->length; + unsigned char* buf = grib_context_malloc(d->handle->context,size); + + if( a->length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + set_begin_end(d,a); + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + print_offset(self->dumper.out,self->begin,self->end); + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) + fprintf(self->dumper.out,"%s ",a->creator->op); + + fprintf(self->dumper.out,"%s = %ld",a->name,a->length); + aliases(d,a); + fprintf(self->dumper.out," {"); + + if(!buf) + { + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; + } + + print_hexadecimal(self->dumper.out,d->option_flags,a); + + fprintf(self->dumper.out,"\n"); + + err = grib_unpack_bytes(a,buf,&size); + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err)); + return ; + } + + if(size > 100) { + more = size - 100; + size = 100; + } + + k = 0; + /* if(size > 100) size = 100; */ + while(k < size) + { + int j; + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + for(j = 0; j < 16 && k < size; j++, k++) + { + fprintf(self->dumper.out,"%02x",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); + } + + if(more) + { + for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"... %d more values\n",more); + } + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name); + grib_context_free(d->handle->context,buf); +} + +static void dump_values(grib_dumper* d,grib_accessor* a) +{ + grib_dumper_wmo *self = (grib_dumper_wmo*)d; + int k,err =0; + int more = 0; + double* buf = NULL; + size_t size=0; + + if( a->length == 0 && + (d->option_flags & GRIB_DUMP_FLAG_CODED) != 0) + return; + + size=grib_value_count(a); + + if(size == 1){ + dump_double(d,a,NULL); + return ; + } + buf = grib_context_malloc(d->handle->context,size * sizeof(double)); + + set_begin_end(d,a); + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + print_offset(self->dumper.out,self->begin,self->end); + if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) + fprintf(self->dumper.out,"%s ",a->creator->op); + + fprintf(self->dumper.out,"%s = (%ld,%ld)",a->name,(long)size,a->length); + aliases(d,a); + fprintf(self->dumper.out," {"); + + if(!buf) + { + if(size == 0) + fprintf(self->dumper.out,"}\n"); + else + fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size); + return; + } + + fprintf(self->dumper.out,"\n"); + + err = grib_unpack_double(a,buf,&size); + + if(err){ + grib_context_free(d->handle->context,buf); + fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err)); + return ; + } + + if(size > 100) { + more = size - 100; + size = 100; + } + + + k = 0; + while(k < size) + { +#if 1 + int j; + /*for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");*/ + for(j = 0; j < 8 && k < size; j++, k++) + { + fprintf(self->dumper.out,"%.10e",buf[k]); + if(k != size-1) + fprintf(self->dumper.out,", "); + } + fprintf(self->dumper.out,"\n"); +#else + + fprintf(self->dumper.out,"%d %g\n",k,buf[k]); + +#endif + + } + if(more) + { + /*for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");*/ + fprintf(self->dumper.out,"... %d more values\n",more); + } + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name); + grib_context_free(d->handle->context,buf); +} + +static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment) +{ + /*grib_dumper_wmo *self = (grib_dumper_wmo*)d; + + for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," "); + fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:"");*/ +} + +static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block) +{ + grib_dumper_wmo *self = (grib_dumper_wmo*)d; + grib_section* s = a->sub_section; + int is_wmo_section=0; + char* upper=NULL; + char tmp[512]; + char *p=NULL,*q=NULL; + if (!strncmp(a->name,"section",7)) is_wmo_section=1; + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + if (is_wmo_section) { + upper=(char*)malloc(strlen(a->name)+1); + p=(char*)a->name; + q=upper; + while (*p != '\0') { + *q=toupper(*p); + q++; + p++; + } + *q='\0'; + sprintf(tmp,"%s ( length=%ld, padding=%ld )",upper,(long)s->length,(long)s->padding); + fprintf(self->dumper.out,"====================== %-35s ======================\n",tmp); + free(upper); + self->section_offset=a->offset; + } else { + + } + + /*printf("------------- section_offset = %ld\n",self->section_offset);*/ + d->depth += 3; + grib_dump_accessors_block(d,block); + d->depth -= 3; + + /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/ + /*fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name);*/ +} + +static void set_begin_end(grib_dumper* d,grib_accessor* a) { + grib_dumper_wmo *self = (grib_dumper_wmo*)d; + if ((d->option_flags & GRIB_DUMP_FLAG_OCTECT) != 0) { + + self->begin=a->offset-self->section_offset+1; + self->end=grib_get_next_position_offset(a)-self->section_offset; + } else { + self->begin=a->offset; + self->end=grib_get_next_position_offset(a); + } +} + +static void print_offset(FILE* out,long begin,long end) { + char tmp[50]; + if (begin == end) + fprintf(out,"%-10ld" ,begin); + else { + sprintf(tmp,"%ld-%ld" ,begin,end); + fprintf(out,"%-10s",tmp); + } +} + +static void print_hexadecimal(FILE* out,unsigned long flags,grib_accessor* a) { + int i=0; + unsigned long offset=0; + if ((flags & GRIB_DUMP_FLAG_HEXADECIMAL) != 0 && a->length != 0) { + fprintf(out," ("); + offset=a->offset; + for (i=0;ilength;i++) { + fprintf(out," 0x%.2X",a->parent->h->buffer->data[offset]); + offset++; + } + fprintf(out," )"); + } +} diff --git a/src/grib_dumper_factory.h b/src/grib_dumper_factory.h new file mode 100644 index 000000000..f1be3862f --- /dev/null +++ b/src/grib_dumper_factory.h @@ -0,0 +1,7 @@ +/* This file is automatically generated by ./make_class.pl, do not edit */ +{ "c_code", &grib_dumper_class_c_code, }, +{ "debug", &grib_dumper_class_debug, }, +{ "default", &grib_dumper_class_default, }, +{ "keys", &grib_dumper_class_keys, }, +{ "serialize", &grib_dumper_class_serialize, }, +{ "wmo", &grib_dumper_class_wmo, }, diff --git a/src/grib_emoslib.h b/src/grib_emoslib.h new file mode 100644 index 000000000..2775127d0 --- /dev/null +++ b/src/grib_emoslib.h @@ -0,0 +1,21 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Copyright (C) 2005 by ECMWF * + * maf@agnoman * + * * + ***************************************************************************/ + + + int igglat_(long* KLAT, float *PGAUSS, long* KPR, long* KERR); + void gribex_(long* KSEC0, long* KSEC1, long* KSEC2, double *PSEC2,long* KSEC3, double *PSEC3, long* KSEC4, + double *PSEC4, long* KLENP, void* KGRIB, long* KLENG,long* KWORD, char* HOPER, long* KRET); + diff --git a/src/grib_errors.c b/src/grib_errors.c new file mode 100644 index 000000000..ce0bc1944 --- /dev/null +++ b/src/grib_errors.c @@ -0,0 +1,110 @@ +/* This file is automatically generated by ./errors.pl, do not edit */ + +#include "grib_api_internal.h" + +static const char *errors[] = { +"No error", /* 0 GRIB_SUCCESS */ +"End of resource reached", /* -1 GRIB_END_OF_FILE */ +"Internal error", /* -2 GRIB_INTERNAL_ERROR */ +"Passed buffer is too small", /* -3 GRIB_BUFFER_TOO_SMALL */ +"Function not yet implemented", /* -4 GRIB_NOT_IMPLEMENTED */ +"Missing 7777 at end of message", /* -5 GRIB_7777_NOT_FOUND */ +"Passed array is too small", /* -6 GRIB_ARRAY_TOO_SMALL */ +"File not found", /* -7 GRIB_FILE_NOT_FOUND */ +"Code not found in code table", /* -8 GRIB_CODE_NOT_FOUND_IN_TABLE */ +"Array size mismatch", /* -9 GRIB_WRONG_ARRAY_SIZE */ +"Key/value not found", /* -10 GRIB_NOT_FOUND */ +"Input output problem", /* -11 GRIB_IO_PROBLEM */ +"Message invalid", /* -12 GRIB_INVALID_MESSAGE */ +"Decoding invalid", /* -13 GRIB_DECODING_ERROR */ +"Encoding invalid", /* -14 GRIB_ENCODING_ERROR */ +"Code cannot unpack because of string too small", /* -15 GRIB_NO_MORE_IN_SET */ +"Problem with calculation of geographic attributes", /* -16 GRIB_GEOCALCULUS_PROBLEM */ +"Out of memory", /* -17 GRIB_OUT_OF_MEMORY */ +"Value is read only", /* -18 GRIB_READ_ONLY */ +"Invalid argument", /* -19 GRIB_INVALID_ARGUMENT */ +"Null handle", /* -20 GRIB_NULL_HANDLE */ +"Invalid section number", /* -21 GRIB_INVALID_SECTION_NUMBER */ +"Value cannot be missing", /* -22 GRIB_VALUE_CANNOT_BE_MISSING */ +"Wrong message length", /* -23 GRIB_WRONG_LENGTH */ +"Invalid key type", /* -24 GRIB_INVALID_TYPE */ +"Unable to set step", /* -25 GRIB_WRONG_STEP */ +"Wrong units for step (step must be integer)", /* -26 GRIB_WRONG_STEP_UNIT */ +"Invalid file id", /* -27 GRIB_INVALID_FILE */ +"Invalid grib id", /* -28 GRIB_INVALID_GRIB */ +"Invalid index id", /* -29 GRIB_INVALID_INDEX */ +"Invalid iterator id", /* -30 GRIB_INVALID_ITERATOR */ +"Invalid keys iterator id", /* -31 GRIB_INVALID_KEYS_ITERATOR */ +"Invalid nearest id", /* -32 GRIB_INVALID_NEAREST */ +"Invalid order by", /* -33 GRIB_INVALID_ORDERBY */ +"Missing a key from the fieldset", /* -34 GRIB_MISSING_KEY */ +"The point is out of the grid area", /* -35 GRIB_OUT_OF_AREA */ +"Concept no match", /* -36 GRIB_CONCEPT_NO_MATCH */ +"Definitions files not found", /* -37 GRIB_NO_DEFINITIONS */ +"Wrong type while packing", /* -38 GRIB_WRONG_TYPE */ +"End of resource", /* -39 GRIB_END */ +"Unable to code a field without values", /* -40 GRIB_NO_VALUES */ +"Grid description is wrong or inconsistent", /* -41 GRIB_WRONG_GRID */ +"End of index reached", /* -42 GRIB_END_OF_INDEX */ +"Null index", /* -43 GRIB_NULL_INDEX */ +"End of resource reached when reading message", /* -44 GRIB_PREMATURE_END_OF_FILE */ +"An internal array is too small", /* -45 GRIB_INTERNAL_ARRAY_TOO_SMALL */ +"Message is too large for the current architecture", /* -46 GRIB_MESSAGE_TOO_LARGE */ +"Constant field", /* -47 GRIB_CONSTANT_FIELD */ +"Switch unable to find a matching case", /* -48 GRIB_SWITCH_NO_MATCH */ +"Underflow", /* -49 GRIB_UNDERFLOW */ +"Message malformed", /* -50 GRIB_MESSAGE_MALFORMED */ +"Index is corrupted", /* -51 GRIB_CORRUPTED_INDEX */ +"Invalid number of bits per value", /* -52 GRIB_INVALID_BPV */ +"Edition of two messages is different", /* -53 GRIB_DIFFERENT_EDITION */ +"Value is different", /* -54 GRIB_VALUE_DIFFERENT */ +"Invalid key value", /* -55 GRIB_INVALID_KEY_VALUE */ +"Value mismatch", /* 1 GRIB_VALUE_MISMATCH */ +"double values are different", /* 2 GRIB_DOUBLE_VALUE_MISMATCH */ +"long values are different", /* 3 GRIB_LONG_VALUE_MISMATCH */ +"byte values are different", /* 4 GRIB_BYTE_VALUE_MISMATCH */ +"string values are different", /* 5 GRIB_STRING_VALUE_MISMATCH */ +"Offset mismatch", /* 6 GRIB_OFFSET_MISMATCH */ +"Count mismatch", /* 7 GRIB_COUNT_MISMATCH */ +"Name mismatch", /* 8 GRIB_NAME_MISMATCH */ +"Type mismatch", /* 9 GRIB_TYPE_MISMATCH */ +"Type and value mismatch", /* 10 GRIB_TYPE_AND_VALUE_MISMATCH */ +"Unable to compare accessors", /* 11 GRIB_UNABLE_TO_COMPARE_ACCESSORS */ +"Unable to reset iterator", /* 12 GRIB_UNABLE_TO_RESET_ITERATOR */ +"Assertion failure", /* 13 GRIB_ASSERTION_FAILURE */ +}; + +#define NUMBER(a) sizeof(a)/sizeof(a[0]) + +const char* grib_get_error_message(int code) +{ + code = -code; + if(code <0 || code >= NUMBER(errors)) { + static char mess[80]; + sprintf(mess,"Unknown error %d",code); + return mess; + } + return errors[code]; +} + +void grib_check(const char* call,const char* file,int line,int e,const char* msg) +{ + grib_context* c=grib_context_get_default(); + if(e) { + if (file) { + fprintf(stderr,"%s at line %d: %s failed: %s", + file,line, call,grib_get_error_message(e)); + if (msg) fprintf(stderr," (%s)",msg); + printf("\n"); + } else { + grib_context_log(c,GRIB_LOG_ERROR,"%s",grib_get_error_message(e)); + } + exit(e); + } +} + +void grib_fail(const char* expr,const char* file,int line) { + fprintf(stderr,"%s at line %d: assertion failure Assert(%s)\n",file,line,expr); + abort(); +} + diff --git a/src/grib_errors.c.in b/src/grib_errors.c.in new file mode 100644 index 000000000..67172dfa8 --- /dev/null +++ b/src/grib_errors.c.in @@ -0,0 +1,42 @@ +/* This file is automatically generated by ./errors.pl, do not edit */ + +#include "grib_api_internal.h" + +static const char *errors[] = { +!ERRORS go in here +}; + +#define NUMBER(a) sizeof(a)/sizeof(a[0]) + +const char* grib_get_error_message(int code) +{ + code = -code; + if(code <0 || code >= NUMBER(errors)) { + static char mess[80]; + sprintf(mess,"Unknown error %d",code); + return mess; + } + return errors[code]; +} + +void grib_check(const char* call,const char* file,int line,int e,const char* msg) +{ + grib_context* c=grib_context_get_default(); + if(e) { + if (file) { + fprintf(stderr,"%s at line %d: %s failed: %s", + file,line, call,grib_get_error_message(e)); + if (msg) fprintf(stderr," (%s)",msg); + printf("\n"); + } else { + grib_context_log(c,GRIB_LOG_ERROR,"%s",grib_get_error_message(e)); + } + exit(e); + } +} + +void grib_fail(const char* expr,const char* file,int line) { + fprintf(stderr,"%s at line %d: assertion failure Assert(%s)\n",file,line,expr); + abort(); +} + diff --git a/src/grib_errors.txt b/src/grib_errors.txt new file mode 100644 index 000000000..b319b4c15 --- /dev/null +++ b/src/grib_errors.txt @@ -0,0 +1,63 @@ +/* The first one matches EMOSLIB */ +GRIB_SUCCESS No error +GRIB_END_OF_FILE End of resource reached +GRIB_INTERNAL_ERROR Internal error +GRIB_BUFFER_TOO_SMALL Passed buffer is too small +GRIB_NOT_IMPLEMENTED Function not yet implemented +GRIB_7777_NOT_FOUND Missing 7777 at end of message +/* .... */ +GRIB_ARRAY_TOO_SMALL Passed array is too small +GRIB_FILE_NOT_FOUND File not found +GRIB_CODE_NOT_FOUND_IN_TABLE Code not found in code table +GRIB_WRONG_ARRAY_SIZE Array size mismatch +GRIB_NOT_FOUND Key/value not found +GRIB_IO_PROBLEM Input output problem +GRIB_INVALID_MESSAGE Message invalid +GRIB_DECODING_ERROR Decoding invalid +GRIB_ENCODING_ERROR Encoding invalid +GRIB_NO_MORE_IN_SET Code cannot unpack because of string too small +GRIB_GEOCALCULUS_PROBLEM Problem with calculation of geographic attributes +GRIB_OUT_OF_MEMORY Out of memory +GRIB_READ_ONLY Value is read only +GRIB_INVALID_ARGUMENT Invalid argument +GRIB_NULL_HANDLE Null handle +GRIB_INVALID_SECTION_NUMBER Invalid section number +GRIB_VALUE_CANNOT_BE_MISSING Value cannot be missing +GRIB_WRONG_LENGTH Wrong message length +GRIB_INVALID_TYPE Invalid key type +GRIB_WRONG_STEP Unable to set step +GRIB_WRONG_STEP_UNIT Wrong units for step (step must be integer) +/* some errors for the fortran interface */ +GRIB_INVALID_FILE Invalid file id +GRIB_INVALID_GRIB Invalid grib id +GRIB_INVALID_INDEX Invalid index id +GRIB_INVALID_ITERATOR Invalid iterator id +GRIB_INVALID_KEYS_ITERATOR Invalid keys iterator id +GRIB_INVALID_NEAREST Invalid nearest id +/*some errors for the fieldset */ +GRIB_INVALID_ORDERBY Invalid order by +GRIB_MISSING_KEY Missing a key from the fieldset +/* errors for the nearest*/ +GRIB_OUT_OF_AREA The point is out of the grid area +/* more errors*/ +GRIB_CONCEPT_NO_MATCH Concept no match +GRIB_NO_DEFINITIONS Definitions files not found +GRIB_WRONG_TYPE Wrong type while packing +GRIB_END End of resource +GRIB_NO_VALUES Unable to code a field without values +GRIB_WRONG_GRID Grid description is wrong or inconsistent +GRIB_END_OF_INDEX End of index reached +GRIB_NULL_INDEX Null index +/* Even more errors */ +GRIB_PREMATURE_END_OF_FILE End of resource reached when reading message +GRIB_INTERNAL_ARRAY_TOO_SMALL An internal array is too small +GRIB_MESSAGE_TOO_LARGE Message is too large for the current architecture +GRIB_CONSTANT_FIELD Constant field +GRIB_SWITCH_NO_MATCH Switch unable to find a matching case +GRIB_UNDERFLOW Underflow +GRIB_MESSAGE_MALFORMED Message malformed +GRIB_CORRUPTED_INDEX Index is corrupted +GRIB_INVALID_BPV Invalid number of bits per value +GRIB_DIFFERENT_EDITION Edition of two messages is different +GRIB_VALUE_DIFFERENT Value is different +GRIB_INVALID_KEY_VALUE Invalid key value diff --git a/src/grib_errors_internal.txt b/src/grib_errors_internal.txt new file mode 100644 index 000000000..eb8fd4da7 --- /dev/null +++ b/src/grib_errors_internal.txt @@ -0,0 +1,14 @@ +/* accessors compare */ +GRIB_VALUE_MISMATCH Value mismatch +GRIB_DOUBLE_VALUE_MISMATCH double values are different +GRIB_LONG_VALUE_MISMATCH long values are different +GRIB_BYTE_VALUE_MISMATCH byte values are different +GRIB_STRING_VALUE_MISMATCH string values are different +GRIB_OFFSET_MISMATCH Offset mismatch +GRIB_COUNT_MISMATCH Count mismatch +GRIB_NAME_MISMATCH Name mismatch +GRIB_TYPE_MISMATCH Type mismatch +GRIB_TYPE_AND_VALUE_MISMATCH Type and value mismatch +GRIB_UNABLE_TO_COMPARE_ACCESSORS Unable to compare accessors +GRIB_UNABLE_TO_RESET_ITERATOR Unable to reset iterator +GRIB_ASSERTION_FAILURE Assertion failure diff --git a/src/grib_expression.c b/src/grib_expression.c new file mode 100644 index 000000000..060a7b870 --- /dev/null +++ b/src/grib_expression.c @@ -0,0 +1,282 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include "grib_api_internal.h" + + int grib_expression_native_type(grib_handle* h,grib_expression* g) +{ + grib_expression_class *c = g->cclass; + while(c) + { + if(c->native_type) + return c->native_type(g,h); + c = c->super ? *(c->super) : NULL; + } + grib_context_log(h->context,GRIB_LOG_ERROR, "No native_type() in %s\n",g->cclass->name); + Assert(1==0); + return 0; +} + + + int grib_expression_evaluate_long(grib_handle* h,grib_expression* g,long* result) +{ + grib_expression_class *c = g->cclass; + while(c) + { + if(c->evaluate_long) + return c->evaluate_long(g,h,result); + c = c->super ? *(c->super) : NULL; + } + return GRIB_INVALID_TYPE; +} + + int grib_expression_evaluate_double(grib_handle* h,grib_expression* g,double* result) +{ + grib_expression_class *c = g->cclass; + while(c) + { + if(c->evaluate_double) + return c->evaluate_double(g,h,result); + c = c->super ? *(c->super) : NULL; + } + return GRIB_INVALID_TYPE; +} + + const char* grib_expression_evaluate_string(grib_handle* h,grib_expression* g,char* buf, size_t* size, int *err) +{ + grib_expression_class *c = g->cclass; + while(c) + { + if(c->evaluate_string) + return c->evaluate_string(g,h,buf,size,err); + c = c->super ? *(c->super) : NULL; + } + grib_context_log(h->context,GRIB_LOG_ERROR, "No evaluate_string() in %s\n",g->cclass->name); + *err=GRIB_INVALID_TYPE; + + return 0; +} + + const char* grib_expression_get_name(grib_expression* g) +{ + grib_expression_class *c = g->cclass; + while(c) + { + if(c->get_name) + return c->get_name(g); + c = c->super ? *(c->super) : NULL; + } + printf("No expression_get_name() in %s\n",g->cclass->name); + Assert(1==0); + return 0; +} + + void grib_expression_print(grib_context* ctx,grib_expression* g,grib_handle* f) +{ + grib_expression_class *c = g->cclass; + while(c) + { + if(c->print) + { + c->print(ctx,g,f); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(1==0); + +} + + void grib_expression_compile(grib_expression* g,grib_compiler* f) +{ + grib_expression_class *c = g->cclass; + if(!c->compile) + { + fprintf(stderr, "NO COMPILE METHOD %s\n", c->name); + Assert(0); + } + while(c) + { + if(c->compile) + { + c->compile(g,f); + return; + } + c = c->super ? *(c->super) : NULL; + } + Assert(1==0); + +} + + void grib_expression_free(grib_context* ctx,grib_expression* g) +{ + grib_expression_class *c = g->cclass; + while(c) + { + if(c->destroy) + c->destroy(ctx,g); + c = c->super ? *(c->super) : NULL; + } + grib_context_free_persistent(ctx,g); +} + + + void grib_expression_add_dependency(grib_expression* e, grib_accessor* observer) +{ + grib_expression_class *c = e->cclass; + while(c) + { + if(c->add_dependency) + { + c->add_dependency(e,observer); + return ; + } + c = c->super ? *(c->super) : NULL; + } + Assert(1==0); +} + +/*----------------------------------------*/ + +int grib_expression_set_value(grib_handle* h,grib_expression* g,grib_values* v) +{ + char buffer[1024]; + int ret=0; + size_t size = sizeof(buffer); + + switch(v->type = grib_expression_native_type(h,g)) + { + case GRIB_TYPE_LONG: + return grib_expression_evaluate_long(h,g,&v->long_value); + break; + + case GRIB_TYPE_DOUBLE: + return grib_expression_evaluate_double(h,g,&v->double_value); + break; + + case GRIB_TYPE_STRING: + v->string_value = grib_expression_evaluate_string(h,g,buffer,&size,&ret); + if (ret != GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "grib_expression_set_value: unable to evaluate %s as string", + grib_expression_get_name( g)); + return ret; + } + Assert(v->string_value != buffer); + Assert(v->string_value); + break; + + default: + Assert(1 == 0); + break; + } + return 0; +} + +/*----------------------------------------*/ + +grib_arguments *grib_arguments_new(grib_context* c,grib_expression* g, grib_arguments* n) +{ + grib_arguments* l = (grib_arguments*)grib_context_malloc_clear_persistent(c,sizeof(grib_arguments)); + l->expression = g; + l->next = n; + return l; +} + +void grib_arguments_free(grib_context* c,grib_arguments* g) +{ + if(g) { + grib_arguments_free(c,g->next); + grib_expression_free(c,g->expression); + grib_context_free_persistent(c,g); + } +} + +void grib_arguments_print(grib_context* c,grib_arguments* g,grib_handle* f) +{ + if(g) { + if(g->expression) + grib_expression_print(c,g->expression,f); + if(g->next) + { + printf(","); + grib_arguments_print(c,g->next,f); + } + } +} + + const char *grib_arguments_get_name(grib_handle *h, grib_arguments *args, int n) +{ + grib_expression *e = NULL; + while(args && n-->0) {args = args->next;} + + if(!args) return NULL; + + e = args->expression; + return e ? grib_expression_get_name(e) : NULL; +} + + + const char* grib_arguments_get_string(grib_handle* h,grib_arguments* args,int n) +{ + grib_expression *e = NULL; + int ret=0; + while(args && n-->0) {args = args->next;} + + if(!args) return NULL; + + e = args->expression; + return grib_expression_evaluate_string(h,e,NULL,NULL,&ret); +} + + long grib_arguments_get_long(grib_handle* h,grib_arguments* args,int n) +{ + int ret=0; + long lres=0; + grib_expression *e = NULL; + while(args && n-->0) {args = args->next;} + + if(!args) return 0; + + e = args->expression; + ret = grib_expression_evaluate_long(h,e,&lres); + return lres; + +} + + double grib_arguments_get_double(grib_handle* h,grib_arguments* args,int n) +{ + int ret=0; + double dres=0.0; + + grib_expression *e = NULL; + while(args && n-->0) {args = args->next;} + + if(!args) return 0; + + e = args->expression; + ret = grib_expression_evaluate_double(h,e,&dres); + return dres; + +} + + grib_expression* grib_arguments_get_expression(grib_handle* h,grib_arguments* args,int n) +{ + while(args && n-->0) {args = args->next;} + + if(!args) return 0; + + return args->expression; +} + + + + diff --git a/src/grib_expression.h b/src/grib_expression.h new file mode 100644 index 000000000..fec5a7e41 --- /dev/null +++ b/src/grib_expression.h @@ -0,0 +1,78 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#ifndef grib_expression_H +#define grib_expression_H + +#include "grib_api_internal.h" + + +typedef int (*expression_evaluate_long_proc)(grib_expression*,grib_handle*,long*); +typedef int (*expression_evaluate_double_proc)(grib_expression*,grib_handle*,double*); +typedef const char* (*expression_evaluate_string_proc)(grib_expression*,grib_handle*,char*,size_t*,int*); +typedef const char* (*expression_get_name_proc)(grib_expression*); + +typedef void (*expression_print_proc)(grib_context*,grib_expression*,grib_handle*); +typedef void (*expression_compile_proc)(grib_expression*,grib_compiler*); +typedef void (*expression_add_dependency_proc) (grib_expression*e, grib_accessor* observer ); + +typedef struct grib_expression_class grib_expression_class; + +typedef void (*expression_class_init_proc) (grib_expression_class*e); +typedef void (*expression_init_proc) (grib_expression*e); +typedef void (*expression_destroy_proc) (grib_context*,grib_expression*e); + +typedef int (*expression_native_type_proc)(grib_expression*,grib_handle*); + +struct grib_expression { + grib_expression_class* cclass; +}; + +struct grib_expression_class { + + grib_expression_class **super; + const char *name; + size_t size; + int inited; + + expression_class_init_proc init_class; + expression_init_proc init; + expression_destroy_proc destroy; + + + expression_print_proc print; + expression_compile_proc compile; + expression_add_dependency_proc add_dependency; + + expression_native_type_proc native_type; + expression_get_name_proc get_name; + + expression_evaluate_long_proc evaluate_long; + expression_evaluate_double_proc evaluate_double; + expression_evaluate_string_proc evaluate_string; +}; + + +struct grib_arguments { + struct grib_arguments *next; + grib_expression *expression; + char value[80]; +}; + + +long grib_expression_evaluate(grib_handle*,grib_expression*); +void grib_expression_free(grib_context*,grib_expression*); + +grib_arguments* grib_arguments_new(grib_context*,grib_expression*,grib_arguments*); +void grib_arguments_free(grib_context*,grib_arguments*); + +const char* grib_argument_next(grib_arguments**); + +#endif diff --git a/src/grib_expression_class_accessor.c b/src/grib_expression_class_accessor.c new file mode 100644 index 000000000..2ad37af62 --- /dev/null +++ b/src/grib_expression_class_accessor.c @@ -0,0 +1,182 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = destroy + IMPLEMENTS = native_type + IMPLEMENTS = get_name + IMPLEMENTS = evaluate_long + IMPLEMENTS = evaluate_double + IMPLEMENTS = evaluate_string + IMPLEMENTS = print + IMPLEMENTS = compile + IMPLEMENTS = add_dependency + MEMBERS = char *name + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static void print(grib_context*,grib_expression*,grib_handle*); +static void compile(grib_expression*,grib_compiler*); +static void add_dependency(grib_expression* e, grib_accessor* observer); +static string get_name(grib_expression* e); + +static int native_type(grib_expression*,grib_handle*); + +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); + +typedef struct grib_expression_accessor{ + grib_expression base; +/* Members defined in accessor */ + char *name; +} grib_expression_accessor; + + +static grib_expression_class _grib_expression_class_accessor = { + 0, /* super */ + "accessor", /* name */ + sizeof(grib_expression_accessor),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + &print, + &compile, + &add_dependency, + + &native_type, + &get_name, + + &evaluate_long, + &evaluate_double, + &evaluate_string, +}; + +grib_expression_class* grib_expression_class_accessor = &_grib_expression_class_accessor; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +static const char* get_name(grib_expression* g) +{ + grib_expression_accessor* e = (grib_expression_accessor*)g; + return e->name; +} + +static int evaluate_long(grib_expression* g,grib_handle *h,long* result) +{ + grib_expression_accessor* e = (grib_expression_accessor*)g; + return grib_get_long_internal(h,e->name,result); +} + +static int evaluate_double(grib_expression *g,grib_handle *h,double* result) +{ + grib_expression_accessor* e = (grib_expression_accessor*)g; + return grib_get_double_internal(h,e->name,result); +} + +static string evaluate_string(grib_expression* g,grib_handle* h,char* buf,size_t* size,int* err) +{ + grib_expression_accessor* e = (grib_expression_accessor*)g; + Assert(buf); + if((*err=grib_get_string_internal(h,e->name,buf,size)) != GRIB_SUCCESS) + return NULL; + + return buf; +} + +static void print(grib_context* c,grib_expression* g,grib_handle* f) +{ + grib_expression_accessor* e = (grib_expression_accessor*)g; + printf("access('%s",e->name); + if(f) + { + long s = 0; + grib_get_long(f,e->name,&s); + printf("=%ld",s); + } + printf("')"); +} + +static void destroy(grib_context* c,grib_expression* g) +{ + grib_expression_accessor* e = (grib_expression_accessor*)g; + grib_context_free_persistent(c,e->name); +} + + +static void add_dependency(grib_expression* g, grib_accessor* observer){ + grib_expression_accessor* e = (grib_expression_accessor*)g; + grib_accessor *observed = grib_find_accessor(observer->parent->h,e->name); + + if(!observed) + { + /* grib_context_log(observer->parent->h->context, GRIB_LOG_ERROR, */ + /* "Error in accessor_add_dependency: cannot find [%s]", e->name); */ + /* Assert(observed); */ + return; + } + + grib_dependency_add(observer,observed); +} + +grib_expression* new_accessor_expression(grib_context* c,const char *name) +{ + grib_expression_accessor* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_accessor)); + e->base.cclass = grib_expression_class_accessor; + e->name = grib_context_strdup_persistent(c,name); + return (grib_expression*)e; +} + +static void compile(grib_expression* g,grib_compiler* c) +{ + grib_expression_accessor* e = (grib_expression_accessor*)g; + fprintf(c->out,"new_accessor_expression(ctx,\"%s\")",e->name); +} + +static int native_type(grib_expression* g,grib_handle *h) +{ + grib_expression_accessor* e = (grib_expression_accessor*)g; + int type = 0; + int err; + if((err=grib_get_native_type(h,e->name,&type)) != GRIB_SUCCESS) + grib_context_log(h->context, GRIB_LOG_ERROR, + "Error in native_type %s : %s", e->name,grib_get_error_message(err)); + return type; +} + diff --git a/src/grib_expression_class_binop.c b/src/grib_expression_class_binop.c new file mode 100644 index 000000000..357c9ab92 --- /dev/null +++ b/src/grib_expression_class_binop.c @@ -0,0 +1,190 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = destroy + IMPLEMENTS = native_type + IMPLEMENTS = evaluate_long + IMPLEMENTS = evaluate_double + IMPLEMENTS = print + IMPLEMENTS = compile + IMPLEMENTS = add_dependency + MEMBERS = grib_expression *left + MEMBERS = grib_expression *right + MEMBERS = grib_binop_long_proc long_func + MEMBERS = grib_binop_double_proc double_func + MEMBERS = grib_binop_string_proc string_func + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static void print(grib_context*,grib_expression*,grib_handle*); +static void compile(grib_expression*,grib_compiler*); +static void add_dependency(grib_expression* e, grib_accessor* observer); + +static int native_type(grib_expression*,grib_handle*); + +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); + +typedef struct grib_expression_binop{ + grib_expression base; +/* Members defined in binop */ + grib_expression *left; + grib_expression *right; + grib_binop_long_proc long_func; + grib_binop_double_proc double_func; + grib_binop_string_proc string_func; +} grib_expression_binop; + + +static grib_expression_class _grib_expression_class_binop = { + 0, /* super */ + "binop", /* name */ + sizeof(grib_expression_binop),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + &print, + &compile, + &add_dependency, + + &native_type, + 0, + + &evaluate_long, + &evaluate_double, + 0, +}; + +grib_expression_class* grib_expression_class_binop = &_grib_expression_class_binop; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +static int evaluate_long(grib_expression *g,grib_handle* h,long* lres) +{ + long v1=0; + long v2=0; + int ret; + grib_expression_binop* e = (grib_expression_binop*)g; + + ret = grib_expression_evaluate_long(h,e->left,&v1); + if (ret != GRIB_SUCCESS) return ret; + + ret = grib_expression_evaluate_long(h,e->right,&v2); + if (ret != GRIB_SUCCESS) return ret; + + *lres=e->long_func(v1,v2); + return GRIB_SUCCESS; +} + +static int evaluate_double(grib_expression *g,grib_handle* h,double* dres) +{ + double v1=0.0; + double v2=0.0; + int ret; + + grib_expression_binop* e = (grib_expression_binop*)g; + + ret = grib_expression_evaluate_double(h,e->left,&v1); + if (ret != GRIB_SUCCESS) return ret; + + ret = grib_expression_evaluate_double(h,e->right,&v2); + if (ret != GRIB_SUCCESS) return ret; + + *dres = e->double_func ? e->double_func(v1,v2) : e->long_func(v1,v2); + + return GRIB_SUCCESS; + +} + +static void print(grib_context* c,grib_expression* g,grib_handle* f) +{ + grib_expression_binop* e = (grib_expression_binop*)g; + printf("binop("); + grib_expression_print(c,e->left,f); + printf(","); + grib_expression_print(c,e->right,f); + printf(")"); +} + +static void destroy(grib_context* c,grib_expression* g) +{ + grib_expression_binop* e = (grib_expression_binop*)g; + grib_expression_free(c,e->left); + grib_expression_free(c,e->right); +} + + +static void add_dependency(grib_expression* g, grib_accessor* observer){ + grib_expression_binop* e = (grib_expression_binop*)g; + grib_dependency_observe_expression(observer,e->left); + grib_dependency_observe_expression(observer,e->right); +} + +grib_expression* new_binop_expression(grib_context* c, + grib_binop_long_proc long_func, + grib_binop_double_proc double_func, + grib_expression* left,grib_expression* right) +{ + grib_expression_binop* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_binop)); + e->base.cclass = grib_expression_class_binop; + e->left = left; + e->right = right; + e->long_func = long_func; + e->double_func = double_func; + return (grib_expression*)e; +} + +static void compile(grib_expression* g,grib_compiler* c) +{ + grib_expression_binop* e = (grib_expression_binop*)g; + fprintf(c->out,"new_binop_expression(ctx,"); + fprintf(c->out,"%s,",grib_binop_long_proc_name(e->long_func)); + fprintf(c->out,"%s,",grib_binop_double_proc_name(e->double_func)); + grib_expression_compile(e->left,c); + fprintf(c->out,","); + grib_expression_compile(e->right,c); + fprintf(c->out,")"); +} + +static int native_type(grib_expression* g,grib_handle *h) +{ + grib_expression_binop* e = (grib_expression_binop*)g; + return e->double_func ? GRIB_TYPE_LONG : GRIB_TYPE_DOUBLE; +} diff --git a/src/grib_expression_class_column.c b/src/grib_expression_class_column.c new file mode 100644 index 000000000..edfa81bef --- /dev/null +++ b/src/grib_expression_class_column.c @@ -0,0 +1,152 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = destroy + IMPLEMENTS = native_type + IMPLEMENTS = get_name + IMPLEMENTS = evaluate_long + IMPLEMENTS = evaluate_double + IMPLEMENTS = evaluate_string + MEMBERS = grib_column* column + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static string get_name(grib_expression* e); + +static int native_type(grib_expression*,grib_handle*); + +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); + +typedef struct grib_expression_column{ + grib_expression base; +/* Members defined in column */ + grib_column* column; +} grib_expression_column; + + +static grib_expression_class _grib_expression_class_column = { + 0, /* super */ + "column", /* name */ + sizeof(grib_expression_column),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + 0, + 0, + 0, + + &native_type, + &get_name, + + &evaluate_long, + &evaluate_double, + &evaluate_string, +}; + +grib_expression_class* grib_expression_class_column = &_grib_expression_class_column; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +static const char* get_name(grib_expression* g) +{ + grib_expression_column* e = (grib_expression_column*)g; + return e->name; +} + +static int evaluate_long(grib_expression* g,grib_handle *h,long* result) +{ + grib_expression_column* e = (grib_expression_column*)g; + int err; + if((err=grib_get_long_internal(h,e->name,result)) != GRIB_SUCCESS) + grib_context_log(h->context, GRIB_LOG_DEBUG, + "Error in evaluate_long %s : %s", e->name,grib_get_error_message(err)); + return err; +} + +static int evaluate_double(grib_expression *g,grib_handle *h,double* result) +{ + grib_expression_column* e = (grib_expression_column*)g; + int err; + if((err=grib_get_double_internal(h,e->name,result)) != GRIB_SUCCESS) + grib_context_log(h->context, GRIB_LOG_DEBUG, + "Error in evaluate_double %s : %s", e->name,grib_get_error_message(err)); + return err; +} + +static string evaluate_string(grib_expression* g,grib_handle* h,char* buf,size_t* size,int* err) +{ + grib_expression_column* e = (grib_expression_column*)g; + Assert(buf); + if((err=grib_get_string_internal(h,e->name,buf,size)) != GRIB_SUCCESS) + { + grib_context_log(h->context, GRIB_LOG_DEBUG, + "Error in evaluate_string %s : %s", e->name,grib_get_error_message(err)); + return NULL; + } + return buf; +} + +static void destroy(grib_context* c,grib_expression* g) +{ + grib_expression_column* e = (grib_expression_column*)g; + grib_context_free_persistent(c,e->name); +} + + +grib_expression* new_column_expression(grib_context* c,const char *name) +{ + grib_expression_column* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_column)); + e->base.cclass = grib_expression_class_column; + e->name = grib_context_strdup_persistent(c,name); + return (grib_expression*)e; +} + +static int native_type(grib_expression* g,grib_handle *h) { + grib_expression_column* e = (grib_expression_column*)g; + return e->column->type; +} + diff --git a/src/grib_expression_class_constant.c b/src/grib_expression_class_constant.c new file mode 100644 index 000000000..1b7a0d354 --- /dev/null +++ b/src/grib_expression_class_constant.c @@ -0,0 +1,112 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = destroy + IMPLEMENTS = native_type + IMPLEMENTS = evaluate;print + IMPLEMENTS = add_dependency + MEMBERS = long value + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); + +static int native_type(grib_expression*,grib_handle*); + + +typedef struct grib_expression_constant{ + grib_expression base; +/* Members defined in constant */ + long value; +} grib_expression_constant; + + +static grib_expression_class _grib_expression_class_constant = { + 0, /* super */ + "constant", /* name */ + sizeof(grib_expression_constant),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + &print, + 0, + &add_dependency, + + &native_type, + 0, + + 0, + 0, + 0, +}; + +grib_expression_class* grib_expression_class_constant = &_grib_expression_class_constant; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +static long evaluate(grib_expression* g,grib_handle *h) +{ + grib_expression_constant* e = (grib_expression_constant*)g; + return e->value; +} + +static void print(grib_context* c,grib_expression* g,grib_handle* f) +{ + grib_expression_constant* e = (grib_expression_constant*)g; + printf("constant(%ld)",e->value); +} + +static void destroy(grib_context* c,grib_expression* g) +{ + /* grib_expression_constant* e = (grib_expression_constant*)g; */ +} + + +static void add_dependency(grib_expression* g, grib_accessor* observer){ + /* grib_expression_constant* e = (grib_expression_constant*)g; */ +} + + diff --git a/src/grib_expression_class_double.c b/src/grib_expression_class_double.c new file mode 100644 index 000000000..90ee1c4e1 --- /dev/null +++ b/src/grib_expression_class_double.c @@ -0,0 +1,141 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = destroy + IMPLEMENTS = native_type + IMPLEMENTS = evaluate_long + IMPLEMENTS = evaluate_double + IMPLEMENTS = print + IMPLEMENTS = compile + IMPLEMENTS = add_dependency + MEMBERS = double value + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static void print(grib_context*,grib_expression*,grib_handle*); +static void compile(grib_expression*,grib_compiler*); +static void add_dependency(grib_expression* e, grib_accessor* observer); + +static int native_type(grib_expression*,grib_handle*); + +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); + +typedef struct grib_expression_double{ + grib_expression base; +/* Members defined in double */ + double value; +} grib_expression_double; + + +static grib_expression_class _grib_expression_class_double = { + 0, /* super */ + "double", /* name */ + sizeof(grib_expression_double),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + &print, + &compile, + &add_dependency, + + &native_type, + 0, + + &evaluate_long, + &evaluate_double, + 0, +}; + +grib_expression_class* grib_expression_class_double = &_grib_expression_class_double; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +static int evaluate_long(grib_expression* g,grib_handle *h,long* lres) +{ + grib_expression_double* e = (grib_expression_double*)g; + *lres=e->value; + return GRIB_SUCCESS; +} + +static int evaluate_double(grib_expression* g,grib_handle *h,double* dres) +{ + grib_expression_double* e = (grib_expression_double*)g; + *dres=e->value; + return GRIB_SUCCESS; +} + +static void print(grib_context* c,grib_expression* g,grib_handle* f) +{ + grib_expression_double* e = (grib_expression_double*)g; + printf("double(%g)",e->value); +} + +static void destroy(grib_context* c,grib_expression* g) +{ + /* grib_expression_double* e = (grib_expression_double*)g; */ +} + + +static void add_dependency(grib_expression* g, grib_accessor* observer){ + /* grib_expression_double* e = (grib_expression_double*)g; */ +} + + +grib_expression* new_double_expression(grib_context* c,double value) +{ + grib_expression_double* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_double)); + e->base.cclass = grib_expression_class_double; + e->value = value; + return (grib_expression*)e; +} + +static void compile(grib_expression* g,grib_compiler* c) +{ + grib_expression_double* e = (grib_expression_double*)g; + fprintf(c->out,"new_double_expression(ctx,%g)",e->value); +} + + +static int native_type(grib_expression* g,grib_handle *h) +{ + return GRIB_TYPE_DOUBLE; +} + diff --git a/src/grib_expression_class_functor.c b/src/grib_expression_class_functor.c new file mode 100644 index 000000000..dbc9d91db --- /dev/null +++ b/src/grib_expression_class_functor.c @@ -0,0 +1,196 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = destroy + IMPLEMENTS = native_type + IMPLEMENTS = evaluate_long + IMPLEMENTS = print + IMPLEMENTS = compile + IMPLEMENTS = add_dependency + MEMBERS = char *name + MEMBERS = grib_arguments *args + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static void print(grib_context*,grib_expression*,grib_handle*); +static void compile(grib_expression*,grib_compiler*); +static void add_dependency(grib_expression* e, grib_accessor* observer); + +static int native_type(grib_expression*,grib_handle*); + +static int evaluate_long(grib_expression*,grib_handle*,long*); + +typedef struct grib_expression_functor{ + grib_expression base; +/* Members defined in functor */ + char *name; + grib_arguments *args; +} grib_expression_functor; + + +static grib_expression_class _grib_expression_class_functor = { + 0, /* super */ + "functor", /* name */ + sizeof(grib_expression_functor),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + &print, + &compile, + &add_dependency, + + &native_type, + 0, + + &evaluate_long, + 0, + 0, +}; + +grib_expression_class* grib_expression_class_functor = &_grib_expression_class_functor; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +static int evaluate_long(grib_expression* g,grib_handle* h,long* lres) +{ + grib_expression_functor* e = (grib_expression_functor*)g; + + /* + TODO: needs OO code here + */ + + if(strcmp(e->name,"lookup") == 0) { + return GRIB_SUCCESS; + } + + if(strcmp(e->name,"new") == 0) { + *lres=h->loader != NULL; + return GRIB_SUCCESS; + } + + if(strcmp(e->name,"missing") == 0) + { + const char *p = grib_arguments_get_name(h,e->args,0); + + if(p) + { + + long val = 0; + grib_get_long_internal(h,p,&val); + *lres = (val == GRIB_MISSING_LONG); + return GRIB_SUCCESS; + } + else + *lres=GRIB_MISSING_LONG; + return GRIB_SUCCESS; + } + + if(strcmp(e->name,"defined") == 0) + { + const char *p = grib_arguments_get_name(h,e->args,0); + + if(p) { + grib_accessor* a=grib_find_accessor(h,p); + *lres=a!=NULL ? 1 : 0; + return GRIB_SUCCESS; + } + *lres=0; + return GRIB_SUCCESS; + } + + if(strcmp(e->name,"changed") == 0) + { + *lres=1; + return GRIB_SUCCESS; + } + + if(strcmp(e->name,"gribex_mode_on") == 0) + { + *lres= h->context->gribex_mode_on ? 1 : 0; + return GRIB_SUCCESS; + } + + return GRIB_NOT_IMPLEMENTED; +} + +static void print(grib_context* c,grib_expression* g,grib_handle* f) +{ + grib_expression_functor* e = (grib_expression_functor*)g; + printf("%s(",e->name); + /*grib_expression_print(c,e->args,f);*/ + printf(")"); +} + +static void destroy(grib_context* c,grib_expression* g) +{ + grib_expression_functor* e = (grib_expression_functor*)g; + grib_context_free_persistent(c,e->name); + grib_arguments_free(c,e->args); +} + + +static void add_dependency(grib_expression* g, grib_accessor* observer){ + grib_expression_functor* e = (grib_expression_functor*)g; + if (strcmp(e->name,"defined")) + grib_dependency_observe_arguments(observer,e->args); +} + +grib_expression* new_func_expression(grib_context* c,const char *name,grib_arguments* args) +{ + grib_expression_functor* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_functor)); + e->base.cclass = grib_expression_class_functor; + e->name = grib_context_strdup_persistent(c,name); + e->args = args; + return (grib_expression*)e; +} + +static void compile(grib_expression* g,grib_compiler* c) +{ + grib_expression_functor* e = (grib_expression_functor*)g; + fprintf(c->out,"new_func_expression(ctx,"); + fprintf(c->out,"\"%s\",",e->name); + grib_compile_arguments(e->args,c); + fprintf(c->out,")"); +} + +static int native_type(grib_expression* g,grib_handle *h) +{ + return GRIB_TYPE_LONG; +} diff --git a/src/grib_expression_class_long.c b/src/grib_expression_class_long.c new file mode 100644 index 000000000..b4d3b7173 --- /dev/null +++ b/src/grib_expression_class_long.c @@ -0,0 +1,140 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = native_type;pack_missing + IMPLEMENTS = destroy + IMPLEMENTS = evaluate_long + IMPLEMENTS = evaluate_double + IMPLEMENTS = print + IMPLEMENTS = compile + IMPLEMENTS = add_dependency + MEMBERS = long value + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static void print(grib_context*,grib_expression*,grib_handle*); +static void compile(grib_expression*,grib_compiler*); +static void add_dependency(grib_expression* e, grib_accessor* observer); + +static int native_type(grib_expression*,grib_handle*); + +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); + +typedef struct grib_expression_long{ + grib_expression base; +/* Members defined in long */ + long value; +} grib_expression_long; + + +static grib_expression_class _grib_expression_class_long = { + 0, /* super */ + "long", /* name */ + sizeof(grib_expression_long),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + &print, + &compile, + &add_dependency, + + &native_type, + 0, + + &evaluate_long, + &evaluate_double, + 0, +}; + +grib_expression_class* grib_expression_class_long = &_grib_expression_class_long; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +static int evaluate_long(grib_expression* g,grib_handle* h,long* lres) +{ + grib_expression_long* e = (grib_expression_long*)g; + *lres = e->value; + return GRIB_SUCCESS; +} + +static int evaluate_double(grib_expression* g,grib_handle *h,double* dres) +{ + grib_expression_long* e = (grib_expression_long*)g; + *dres=e->value; + return GRIB_SUCCESS; +} + +static void print(grib_context* c,grib_expression* g,grib_handle* f) +{ + grib_expression_long* e = (grib_expression_long*)g; + printf("long(%ld)",e->value); +} + +static void destroy(grib_context* c,grib_expression* g) +{ + /* grib_expression_long* e = (grib_expression_long*)g; */ +} + + +static void add_dependency(grib_expression* g, grib_accessor* observer){ + /* grib_expression_long* e = (grib_expression_long*)g; */ +} + + +grib_expression* new_long_expression(grib_context* c,long value) +{ + grib_expression_long* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_long)); + e->base.cclass = grib_expression_class_long; + e->value = value; + return (grib_expression*)e; +} + + +static int native_type(grib_expression* g,grib_handle *h) +{ + return GRIB_TYPE_LONG; +} + +static void compile(grib_expression* g,grib_compiler* c) +{ + grib_expression_long* e = (grib_expression_long*)g; + fprintf(c->out,"new_long_expression(ctx,%ld)",e->value); +} diff --git a/src/grib_expression_class_string.c b/src/grib_expression_class_string.c new file mode 100644 index 000000000..7510f748f --- /dev/null +++ b/src/grib_expression_class_string.c @@ -0,0 +1,132 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = native_type + IMPLEMENTS = destroy + IMPLEMENTS = evaluate_string + IMPLEMENTS = print + IMPLEMENTS = compile + IMPLEMENTS = add_dependency + MEMBERS = char* value + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static void print(grib_context*,grib_expression*,grib_handle*); +static void compile(grib_expression*,grib_compiler*); +static void add_dependency(grib_expression* e, grib_accessor* observer); + +static int native_type(grib_expression*,grib_handle*); + +static string evaluate_string(grib_expression*,grib_handle*,char*,size_t*,int*); + +typedef struct grib_expression_string{ + grib_expression base; +/* Members defined in string */ + char* value; +} grib_expression_string; + + +static grib_expression_class _grib_expression_class_string = { + 0, /* super */ + "string", /* name */ + sizeof(grib_expression_string),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + &print, + &compile, + &add_dependency, + + &native_type, + 0, + + 0, + 0, + &evaluate_string, +}; + +grib_expression_class* grib_expression_class_string = &_grib_expression_class_string; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +static const char* evaluate_string(grib_expression* g,grib_handle *h,char* buf,size_t* size,int* err) +{ + grib_expression_string* e = (grib_expression_string*)g; + *err=0; + return e->value; +} + +static void print(grib_context* c,grib_expression* g,grib_handle* f) +{ + grib_expression_string* e = (grib_expression_string*)g; + printf("string('%s')",e->value); +} + +static void destroy(grib_context* c,grib_expression* g) +{ + grib_expression_string* e = (grib_expression_string*)g; + grib_context_free_persistent(c,e->value); +} + + +static void add_dependency(grib_expression* g, grib_accessor* observer){ + /* grib_expression_string* e = (grib_expression_string*)g; */ +} + + +grib_expression* new_string_expression(grib_context* c,const char* value) +{ + grib_expression_string* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_string)); + e->base.cclass = grib_expression_class_string; + e->value = grib_context_strdup_persistent(c,value); + return (grib_expression*)e; +} + +static void compile(grib_expression* g,grib_compiler* c) +{ + grib_expression_string* e = (grib_expression_string*)g; + fprintf(c->out,"new_string_expression(ctx,\"%s\")",e->value); +} + + +static int native_type(grib_expression* g,grib_handle *h) +{ + return GRIB_TYPE_STRING; +} diff --git a/src/grib_expression_class_string_compare.c b/src/grib_expression_class_string_compare.c new file mode 100644 index 000000000..3a82327c0 --- /dev/null +++ b/src/grib_expression_class_string_compare.c @@ -0,0 +1,173 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = destroy + IMPLEMENTS = native_type + IMPLEMENTS = evaluate_long + IMPLEMENTS = evaluate_double + IMPLEMENTS = print;compile + IMPLEMENTS = add_dependency + MEMBERS = grib_expression *left + MEMBERS = grib_expression *right + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static void print(grib_context*,grib_expression*,grib_handle*); +static void compile(grib_expression*,grib_compiler*); +static void add_dependency(grib_expression* e, grib_accessor* observer); + +static int native_type(grib_expression*,grib_handle*); + +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); + +typedef struct grib_expression_string_compare{ + grib_expression base; +/* Members defined in string_compare */ + grib_expression *left; + grib_expression *right; +} grib_expression_string_compare; + + +static grib_expression_class _grib_expression_class_string_compare = { + 0, /* super */ + "string_compare", /* name */ + sizeof(grib_expression_string_compare),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + &print, + &compile, + &add_dependency, + + &native_type, + 0, + + &evaluate_long, + &evaluate_double, + 0, +}; + +grib_expression_class* grib_expression_class_string_compare = &_grib_expression_class_string_compare; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} + +static int evaluate_long(grib_expression *g,grib_handle* h,long* lres) +{ + int ret=0; + char b1[1024]; size_t l1 = sizeof(b1); + char b2[1024]; size_t l2 = sizeof(b2); + const char *v1; + const char *v2; + + grib_expression_string_compare* e = (grib_expression_string_compare*)g; + + v1 = grib_expression_evaluate_string(h,e->left,b1,&l1,&ret); + if(!v1) {*lres=0;return ret;} + + v2 = grib_expression_evaluate_string(h,e->right,b2,&l2,&ret); + if(!v2) {*lres=0;return ret;} + + *lres = (grib_inline_strcmp(v1,v2) == 0); + return GRIB_SUCCESS; +} + +static int evaluate_double(grib_expression *g,grib_handle* h,double* dres) +{ + long n; + int ret = evaluate_long(g,h,&n); + *dres = n; + return ret; +} + +static void print(grib_context* c,grib_expression* g,grib_handle* f) +{ + grib_expression_string_compare* e = (grib_expression_string_compare*)g; + printf("string_compare("); + grib_expression_print(c,e->left,f); + printf(","); + grib_expression_print(c,e->right,f); + printf(")"); +} + +static void destroy(grib_context* c,grib_expression* g) +{ + grib_expression_string_compare* e = (grib_expression_string_compare*)g; + grib_expression_free(c,e->left); + grib_expression_free(c,e->right); +} + + +static void add_dependency(grib_expression* g, grib_accessor* observer){ + grib_expression_string_compare* e = (grib_expression_string_compare*)g; + grib_dependency_observe_expression(observer,e->left); + grib_dependency_observe_expression(observer,e->right); +} + +grib_expression* new_string_compare_expression(grib_context* c, + grib_expression* left,grib_expression* right) +{ + grib_expression_string_compare* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_string_compare)); + e->base.cclass = grib_expression_class_string_compare; + e->left = left; + e->right = right; + return (grib_expression*)e; +} + +static void compile(grib_expression* g,grib_compiler* c) +{ + grib_expression_string_compare* e = (grib_expression_string_compare*)g; + fprintf(c->out,"new_string_compare_expression(ctx,"); + grib_expression_compile(e->left,c); + fprintf(c->out,","); + grib_expression_compile(e->right,c); + fprintf(c->out,")"); +} + +static int native_type(grib_expression* g,grib_handle *h) +{ + return GRIB_TYPE_LONG ; +} diff --git a/src/grib_expression_class_true.c b/src/grib_expression_class_true.c new file mode 100644 index 000000000..fd59f4cac --- /dev/null +++ b/src/grib_expression_class_true.c @@ -0,0 +1,126 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = destroy + IMPLEMENTS = native_type + IMPLEMENTS = evaluate_long + IMPLEMENTS = evaluate_double + IMPLEMENTS = print + IMPLEMENTS = add_dependency + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static void print(grib_context*,grib_expression*,grib_handle*); +static void add_dependency(grib_expression* e, grib_accessor* observer); + +static int native_type(grib_expression*,grib_handle*); + +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); + +typedef struct grib_expression_true{ + grib_expression base; +/* Members defined in true */ +} grib_expression_true; + + +static grib_expression_class _grib_expression_class_true = { + 0, /* super */ + "true", /* name */ + sizeof(grib_expression_true),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + &print, + 0, + &add_dependency, + + &native_type, + 0, + + &evaluate_long, + &evaluate_double, + 0, +}; + +grib_expression_class* grib_expression_class_true = &_grib_expression_class_true; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +static int evaluate_long(grib_expression* g,grib_handle* h,long* lres) +{ + *lres=1; + return GRIB_SUCCESS; +} + +static int evaluate_double(grib_expression* g,grib_handle* h,double* dres) +{ + *dres = 1; + return GRIB_SUCCESS; + +} + +static void print(grib_context* c,grib_expression* g,grib_handle* f) +{ + printf("true("); + printf(")"); +} + +static void destroy(grib_context* c,grib_expression* g) +{ +} + + +static void add_dependency(grib_expression* g, grib_accessor* observer){ +} + +grib_expression* new_true_expression(grib_context* c) +{ + grib_expression_true* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_true)); + e->base.cclass = grib_expression_class_true; + return (grib_expression*)e; +} + + +static int native_type(grib_expression* g,grib_handle *h) +{ + return GRIB_TYPE_LONG; +} + diff --git a/src/grib_expression_class_unop.c b/src/grib_expression_class_unop.c new file mode 100644 index 000000000..a2bb592c8 --- /dev/null +++ b/src/grib_expression_class_unop.c @@ -0,0 +1,166 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = expression + IMPLEMENTS = init_class + IMPLEMENTS = destroy + IMPLEMENTS = native_type + IMPLEMENTS = evaluate_long + IMPLEMENTS = evaluate_double + IMPLEMENTS = print + IMPLEMENTS = compile + IMPLEMENTS = add_dependency + MEMBERS = grib_expression *exp + MEMBERS = grib_unop_long_proc long_func + MEMBERS = grib_unop_double_proc double_func + END_CLASS_DEF + + */ +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "expression.class" and rerun ./make_class.pl + +*/ + +typedef const char* string; /* to keep make_class.pl happy */ + + +static void init_class (grib_expression_class*); + +static void destroy(grib_context*,grib_expression* e); + +static void print(grib_context*,grib_expression*,grib_handle*); +static void compile(grib_expression*,grib_compiler*); +static void add_dependency(grib_expression* e, grib_accessor* observer); + +static int native_type(grib_expression*,grib_handle*); + +static int evaluate_long(grib_expression*,grib_handle*,long*); +static int evaluate_double(grib_expression*,grib_handle*,double*); + +typedef struct grib_expression_unop{ + grib_expression base; +/* Members defined in unop */ + grib_expression *exp; + grib_unop_long_proc long_func; + grib_unop_double_proc double_func; +} grib_expression_unop; + + +static grib_expression_class _grib_expression_class_unop = { + 0, /* super */ + "unop", /* name */ + sizeof(grib_expression_unop),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + 0, /* constructor */ + &destroy, /* destructor */ + &print, + &compile, + &add_dependency, + + &native_type, + 0, + + &evaluate_long, + &evaluate_double, + 0, +}; + +grib_expression_class* grib_expression_class_unop = &_grib_expression_class_unop; + + +static void init_class(grib_expression_class* c) +{ +} +/* END_CLASS_IMP */ + +static int evaluate_long(grib_expression* g,grib_handle* h,long* lres) +{ + int ret; + long v=0; + grib_expression_unop* e = (grib_expression_unop*)g; + ret = grib_expression_evaluate_long(h,e->exp,&v); + if (ret != GRIB_SUCCESS) return ret; + *lres=e->long_func(v); + return GRIB_SUCCESS; +} + +static int evaluate_double(grib_expression* g,grib_handle* h,double* dres) +{ + int ret; + double v=0; + grib_expression_unop* e = (grib_expression_unop*)g; + ret = grib_expression_evaluate_double(h,e->exp,&v); + if (ret != GRIB_SUCCESS) return ret; + *dres = e->double_func ? e->double_func(v) : e->long_func(v); + return GRIB_SUCCESS; + +} + +static void print(grib_context* c,grib_expression* g,grib_handle* f) +{ + grib_expression_unop* e = (grib_expression_unop*)g; + printf("unop("); + grib_expression_print(c,e->exp,f); + printf(")"); +} + +static void destroy(grib_context* c,grib_expression* g) +{ + grib_expression_unop* e = (grib_expression_unop*)g; + grib_expression_free(c,e->exp); +} + + +static void add_dependency(grib_expression* g, grib_accessor* observer){ + grib_expression_unop* e = (grib_expression_unop*)g; + grib_dependency_observe_expression(observer,e->exp); +} + +grib_expression* new_unop_expression(grib_context* c, + grib_unop_long_proc long_func, + grib_unop_double_proc double_func, + grib_expression* exp) +{ + grib_expression_unop* e = grib_context_malloc_clear_persistent(c,sizeof(grib_expression_unop)); + e->base.cclass = grib_expression_class_unop; + e->exp = exp; + e->long_func = long_func; + e->double_func = double_func; + return (grib_expression*)e; +} + +static void compile(grib_expression* g,grib_compiler* c) +{ + grib_expression_unop* e = (grib_expression_unop*)g; + fprintf(c->out,"new_unop_expression(ctx,"); + fprintf(c->out,"%s,",grib_unop_long_proc_name(e->long_func)); + fprintf(c->out,"%s,",grib_unop_double_proc_name(e->double_func)); + grib_expression_compile(e->exp,c); + fprintf(c->out,")"); +} + +static int native_type(grib_expression* g,grib_handle *h) +{ + grib_expression_unop* e = (grib_expression_unop*)g; + return e->double_func ? GRIB_TYPE_LONG : GRIB_TYPE_DOUBLE; +} + diff --git a/src/grib_fieldset.c b/src/grib_fieldset.c new file mode 100644 index 000000000..023190e66 --- /dev/null +++ b/src/grib_fieldset.c @@ -0,0 +1,829 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * Description: routines for grib indexing form a set of files + * + * + * + */ +#include "grib_api_internal.h" +#define GRIB_START_ARRAY_SIZE 5000 +#define GRIB_ARRAY_INCREMENT 1000 + +#define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; + +#define GRIB_ORDER_BY_ASC 1 +#define GRIB_ORDER_BY_DESC -1 + +GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} + +static grib_fieldset* grib_fieldset_create_from_keys(grib_context* c,char** keys,int nkeys,int* err); +static grib_fieldset* grib_fieldset_create_from_order_by(grib_context* c,grib_order_by* ob, + int* err); +static int grib_fieldset_resize(grib_fieldset* set,size_t newsize); +static void grib_trim(char** x); +static grib_order_by* grib_fieldset_new_order_by(grib_context* c,char* z); +static int grib_fieldset_compare(grib_fieldset* set,int* i,int* j); +static void grib_fieldset_sort(grib_fieldset* set, int beg, int end); +static int grib_fieldset_columns_resize(grib_fieldset* set,size_t newsize); +static grib_int_array* grib_fieldset_create_int_array(grib_context* c,size_t size); +static int grib_fieldset_resize_int_array(grib_int_array* a,size_t newsize); +static void grib_fieldset_delete_int_array(grib_int_array* f); +static void grib_fieldset_delete_columns(grib_fieldset* set); +static grib_field** grib_fieldset_create_fields(grib_context* c,size_t size); +static void grib_fieldset_delete_fields(grib_fieldset* set); +static int grib_fieldset_resize_fields(grib_fieldset* set,size_t newsize); +static int grib_fieldset_set_order_by(grib_fieldset* set,grib_order_by* ob); + + +/* --------------- grib_column functions ------------------*/ +int grib_fieldset_new_column(grib_fieldset* set,int id,char* key,int type) { + grib_column* column=0; + grib_context* c; + int err=0; + + if (!set) return GRIB_INVALID_ARGUMENT; + + c=set->context; + + set->columns[id].errors=(int*)grib_context_malloc_clear(c, + sizeof(int)*GRIB_START_ARRAY_SIZE); + + switch (type) { + case GRIB_TYPE_LONG: + set->columns[id].long_values=(long*)grib_context_malloc_clear(c, + sizeof(long)*GRIB_START_ARRAY_SIZE); + if (!set->columns[id].long_values) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_new_column : Cannot malloc %d bytes", + sizeof(long)*GRIB_START_ARRAY_SIZE); + err=GRIB_OUT_OF_MEMORY; + return err; + } + break; + case GRIB_TYPE_DOUBLE: + set->columns[id].double_values=(double*)grib_context_malloc_clear(c, + sizeof(double)*GRIB_START_ARRAY_SIZE); + if (!set->columns[id].double_values) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_new_column : Cannot malloc %d bytes", + sizeof(double)*GRIB_START_ARRAY_SIZE); + err=GRIB_OUT_OF_MEMORY; + return err; + } + break; + case GRIB_TYPE_STRING: + set->columns[id].string_values=(char**)grib_context_malloc_clear(c, + sizeof(char*)*GRIB_START_ARRAY_SIZE); + if (!set->columns[id].string_values) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_new_column : Cannot malloc %d bytes", + sizeof(char*)*GRIB_START_ARRAY_SIZE); + err=GRIB_OUT_OF_MEMORY; + return err; + } + break; + default: + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_new_column : unknown column type %d",type); + grib_context_free(c,column); + return err; + } + + set->columns[id].context=c; + set->columns[id].name=grib_context_strdup(c,key); + set->columns[id].type=type; + set->columns[id].values_array_size=GRIB_START_ARRAY_SIZE; + set->columns[id].size=0; + return err; +} + +static void grib_fieldset_delete_columns(grib_fieldset* set) { + int i=0; + grib_context* c; + + if (!set) return; + c=set->context; + + for (i=0;icolumns_size;i++) { + int j=0; + switch (set->columns[i].type) { + case GRIB_TYPE_LONG: + grib_context_free(c,set->columns[i].long_values); + break; + case GRIB_TYPE_DOUBLE: + grib_context_free(c,set->columns[i].double_values); + break; + case GRIB_TYPE_STRING: + for (j=0;jcolumns[i].size;j++) + grib_context_free(c,set->columns[i].string_values[j]); + break; + default: + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_new_column : unknown column type %d",set->columns[i].type); + } + grib_context_free(c,set->columns[i].errors); + grib_context_free(c,set->columns[i].name); + } + grib_context_free(c,set->columns); +} + +static int grib_fieldset_columns_resize(grib_fieldset* set,size_t newsize) { + double* newdoubles; + long* newlongs; + char** newstrings; + int* newerrors; + int i=0; + grib_context* c; + + if (!set || !set->columns) return GRIB_INVALID_ARGUMENT; + + c=set->context; + + if (newsize <= set->columns[0].values_array_size) return 0; + + for (i=0;icolumns_size;i++) { + + switch (set->columns[i].type) { + case GRIB_TYPE_LONG: + newlongs=(long*)grib_context_realloc(c,set->columns[i].long_values, + newsize*sizeof(long)); + if (!newlongs ) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_columns_resize : Cannot malloc %d bytes",newsize-set->columns[i].values_array_size); + return GRIB_OUT_OF_MEMORY; + } else set->columns[i].long_values=newlongs; + break; + case GRIB_TYPE_DOUBLE: + newdoubles=(double*)grib_context_realloc(c,set->columns[i].double_values, + newsize*sizeof(double)); + if (!newdoubles) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_columns_resize : Cannot malloc %d bytes",newsize-set->columns[i].values_array_size); + return GRIB_OUT_OF_MEMORY; + } else set->columns[i].double_values=newdoubles; + break; + case GRIB_TYPE_STRING: + newstrings=(char**)grib_context_realloc(c,set->columns[i].string_values, + newsize*sizeof(char*)); + if (!newstrings) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_columns_resize : Cannot malloc %d bytes",newsize-set->columns[i].values_array_size); + return GRIB_OUT_OF_MEMORY; + } else set->columns[i].string_values=newstrings; + break; + } + newerrors=(int*)grib_context_realloc(c,set->columns[i].errors,newsize*sizeof(int)); + if (!newerrors) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_columns_resize : Cannot malloc %d bytes", + set->columns[i].errors,newsize*sizeof(int)); + return GRIB_OUT_OF_MEMORY; + } else set->columns[i].errors=newerrors; + + set->columns[i].values_array_size=newsize; + + } + + return GRIB_SUCCESS; +} + +int grib_fieldset_column_copy_from_handle(grib_handle* h,grib_fieldset* set,int i) { + int err=0; + long lval=0; + double dval=0; + char sval[1024]; + size_t slen=1024; + if (!set || !h || set->columns[i].type == 0) + return GRIB_INVALID_ARGUMENT; + + if (set->columns[i].size >= set->columns[i].values_array_size) + grib_fieldset_columns_resize(set,set->columns[i].values_array_size+GRIB_ARRAY_INCREMENT); + + switch (set->columns[i].type) { + case GRIB_TYPE_LONG: + err=grib_get_long(h,set->columns[i].name,&lval); + set->columns[i].long_values[set->columns[i].size]=lval; + break; + case GRIB_TYPE_DOUBLE: + err=grib_get_double(h,set->columns[i].name,&dval); + set->columns[i].double_values[set->columns[i].size]=dval; + break; + case GRIB_TYPE_STRING: + err=grib_get_string(h,set->columns[i].name,sval,&slen); + set->columns[i].string_values[set->columns[i].size]=grib_context_strdup(h->context,sval); + break; + } + + set->columns[i].errors[set->columns[i].size]=err; + set->columns[i].size++; + + return err; +} + +/* --------------- grib_fieldset functions ------------------*/ +grib_fieldset* grib_fieldset_new_from_files(grib_context* c,char* filenames[], + int nfiles, char** keys,int nkeys, + char* where_string,char* order_by_string,int* err) { + int i=0; + int ret=GRIB_SUCCESS; + grib_order_by* ob=NULL; + + grib_fieldset* set=0; + + if (!c) c=grib_context_get_default( ); + + if (( (!keys || nkeys==0) && !order_by_string ) + || !filenames ) { + *err=GRIB_INVALID_ARGUMENT; + return NULL; + } + + if (order_by_string) { + ob=grib_fieldset_new_order_by(c,order_by_string); + if (!ob) { + *err=GRIB_INVALID_ORDERBY; + return NULL; + } + } + + if ( !keys || nkeys==0 ) { + set=grib_fieldset_create_from_order_by(c,ob,err); + } else { + set=grib_fieldset_create_from_keys(c,keys,nkeys,err); + } + + *err=GRIB_SUCCESS; + for (i=0;iorder_by && ob) *err=grib_fieldset_set_order_by(set,ob); + if (*err!=GRIB_SUCCESS) return NULL; + grib_fieldset_sort(set,0,set->size-1); + grib_fieldset_rewind(set); + } + + return set; +} + +static grib_fieldset* grib_fieldset_create_from_keys(grib_context* c,char** keys,int nkeys, + int* err) { + grib_fieldset* set=0; + size_t msize=0,size=0; + int i=0; + int type=0; + int default_type=GRIB_TYPE_STRING; + + if (!c) c=grib_context_get_default( ); + + size=GRIB_START_ARRAY_SIZE; + + msize=sizeof(grib_fieldset); + set=(grib_fieldset*)grib_context_malloc_clear(c,msize); + if (!set) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_create : Cannot malloc %d bytes",msize); + return NULL; + } + + set->context=c; + set->fields_array_size=size; + set->size=0; + set->current=-1; + set->fields=0; + set->filter=0; + set->order=0; + set->columns=0; + set->where=0; + set->order_by=0; + + set->fields=grib_fieldset_create_fields(set->context,size); + + set->order=grib_fieldset_create_int_array(c,size); + set->filter=grib_fieldset_create_int_array(c,size); + for (i=0;ifilter->size;i++) + set->filter->el[i]=i; + + set->columns=(grib_column*)grib_context_malloc_clear(c,sizeof(grib_column)*nkeys); + if (!set->columns) { + grib_context_log(c,GRIB_LOG_ERROR,"grib_fieldset_new_query: memory allocation error"); + *err=GRIB_OUT_OF_MEMORY; + return NULL; + } + for (i=0;icolumns_size=nkeys; + + return set; + +} + +static grib_fieldset* grib_fieldset_create_from_order_by(grib_context* c,grib_order_by* ob, + int* err) { + char** keys=NULL; + size_t nkeys=0; + int i=0; + grib_fieldset* set=NULL; + grib_order_by* next=ob; + + while(next) {nkeys++;next=next->next;} + + keys=grib_context_malloc_clear( c,nkeys*sizeof(char*)); + + next=ob; + i=0; + while(next) {keys[i++]=next->key;next=next->next;} + + set=grib_fieldset_create_from_keys(c,keys,nkeys,err); + grib_context_free(c,keys); + + return set; +} + +int grib_fieldset_apply_where(grib_fieldset* set,const char* where_string) { + int err=GRIB_NOT_IMPLEMENTED; + grib_math* m=0; + + if (!set) return GRIB_INVALID_ARGUMENT; + + m=grib_math_new(set->context,where_string,&err); + + print_math(m); + printf("\n"); + return err; +} + +int grib_fieldset_apply_order_by(grib_fieldset* set,const char* order_by_string) { + int err=0; + grib_order_by* ob=NULL; + + if (!set) return GRIB_INVALID_ARGUMENT; + + if (set->order_by) { + grib_fieldset_delete_order_by(set->context,set->order_by); + set->order_by=0; + } + + ob=grib_fieldset_new_order_by(set->context,(char*)order_by_string); + if ((err=grib_fieldset_set_order_by(set,ob)) != GRIB_SUCCESS) + return err; + + if (set->order_by) grib_fieldset_sort(set,0,set->size-1); + + grib_fieldset_rewind(set); + + return err; +} + + +static int grib_fieldset_compare(grib_fieldset* set,int* i,int* j) { + int ret=0; + double d=0; + int idkey=0; + grib_order_by* ob=0; + int ii=0,jj=0; + int *order=0,*filter=0; + + if (!set || !set->order_by) return GRIB_INVALID_ARGUMENT; + ob=set->order_by; + order=set->order->el; + filter=set->filter->el; + + ii=*(set->filter->el+*(order+*i)); + jj=*(set->filter->el+*(order+*j)); + + while (ob) { + idkey=ob->idkey; + switch (set->columns[idkey].type) { + case GRIB_TYPE_STRING: + ret=strcmp(set->columns[idkey].string_values[ii], + set->columns[idkey].string_values[jj]); + break; + + case GRIB_TYPE_DOUBLE: + d=set->columns[idkey].double_values[ii]- + set->columns[idkey].double_values[jj]; + if (d > 0 ) ret=1; + else if ( d == 0) ret=0; + else ret=-1; + break; + + case GRIB_TYPE_LONG: + ret=set->columns[idkey].long_values[ii]- + set->columns[idkey].long_values[jj]; + break; + default: + return GRIB_INVALID_TYPE; + } + if (ret!=0) { + ret*=ob->mode; + break; + } + ob=ob->next; + } + + return ret; +} + +static void grib_fieldset_sort(grib_fieldset* set, int beg, int end) { + double temp; + int l=0,r=0; + if (end > beg) { + l = beg + 1; + r = end; + while (l < r) { + if ( grib_fieldset_compare(set,&l,&beg) <= 0 ) { + l++; + } else if(grib_fieldset_compare(set,&r,&beg) >= 0 ) { + r--; + } else { + SWAP(set->order->el[l],set->order->el[r]) + } + } + + if (grib_fieldset_compare(set,&l,&beg) < 0) { + SWAP(set->order->el[l],set->order->el[beg]) + l--; + } else { + l--; + SWAP(set->order->el[l],set->order->el[beg]) + } + + grib_fieldset_sort(set, beg, l); + grib_fieldset_sort(set, r, end); + } +} + +void grib_fieldset_delete_order_by(grib_context* c,grib_order_by* order_by) { + grib_order_by* ob=order_by; + + if (!c) c=grib_context_get_default(); + + while (order_by) { + if (order_by->key) free(order_by->key); + ob=order_by; + order_by=order_by->next; + grib_context_free( c,ob); + } + + return; +} + + +static grib_order_by* grib_fieldset_new_order_by(grib_context* c,char* obstr) { + char *t1=0,*t2=0,*p=0; + int id=0; + char *z=0,*zs=0; + int mode,mode_default=GRIB_ORDER_BY_ASC; + grib_order_by *ob,*sob; + + if (!obstr) return NULL; + + z=grib_context_strdup(c,obstr); + zs=z; + grib_trim(&z); + + if (strlen(z)==0) {return 0;} + + ob=(grib_order_by*)grib_context_malloc_clear(c,sizeof(grib_order_by)); + sob=ob; + ob->key=0; + ob->idkey=0; + ob->mode=0; + ob->next=0; + + if (z) t1=strtok(z,","); + + while (t1) { + grib_trim(&t1); + t2=grib_context_strdup(c,t1); + p=t2; + while ( *p != ' ' && *p != '\0' ) p++; + mode=mode_default; + if (p != t2) { + while ( *p == ' ' && *p != '\0' ) p++; + if (*p != '\0') { + *(p-1)='\0'; + if (!grib_inline_strcmp(p,"asc")) mode=GRIB_ORDER_BY_ASC; + if (!grib_inline_strcmp(p,"desc")) mode=GRIB_ORDER_BY_DESC; + } + grib_trim(&p); + } + grib_trim(&t2); + id=-1; + t1=strtok(NULL,","); + + if (ob->key) { + ob->next=(grib_order_by*)grib_context_malloc_clear(c,sizeof(grib_order_by)); + ob=ob->next; + ob->key=0; + ob->next=0; + } + ob->mode=mode; + ob->key=t2; + ob->idkey=id; + } + + if (z) grib_context_free(c,z); + return sob; +} + + +void grib_fieldset_delete(grib_fieldset* set) { + grib_context* c=0; + if (!set) return; + + c=set->context; + + grib_fieldset_delete_columns(set); + + grib_fieldset_delete_fields(set); + grib_fieldset_delete_int_array(set->order); + grib_fieldset_delete_int_array(set->filter); + + grib_context_free( c, set); +} + + +int grib_fieldset_add(grib_fieldset* set,char* filename) { + int ret=GRIB_SUCCESS; + int err=0; + int i=0; + grib_handle* h=0; + int nkeys; + grib_file* file; + double offset=0; + long length=0; + grib_context* c=0; + + if (!set || !filename ) return GRIB_INVALID_ARGUMENT; + c=set->context; + + nkeys=set->columns_size; + + file=grib_file_open(filename,"r",&err); + if (!file || !file->handle) return err; + + while((h = grib_handle_new_from_file(c,file->handle,&ret)) + != NULL || ret != GRIB_SUCCESS ) { + if (!h) return ret; + + err=GRIB_SUCCESS; + for (i=0;icolumns_size;i++) { + err=grib_fieldset_column_copy_from_handle(h,set,i); + if (err != GRIB_SUCCESS) ret=err; + } + if (err==GRIB_SUCCESS || err==GRIB_NOT_FOUND) { + if (set->fields_array_size < set->columns[0].values_array_size) { + ret=grib_fieldset_resize(set,set->columns[0].values_array_size); + if (ret!=GRIB_SUCCESS) return ret; + } + offset=0; + ret=grib_get_double(h,"offset",&offset); + set->fields[set->size]=(grib_field*)grib_context_malloc_clear(c,sizeof(grib_field)); + set->fields[set->size]->file=file; + file->refcount++; + set->fields[set->size]->offset=(off_t)offset; + ret=grib_get_long(h,"totalLength",&length); + set->fields[set->size]->length=length; + set->filter->el[set->size]=set->size; + set->order->el[set->size]=set->size; + set->size=set->columns[0].size; + } + grib_handle_delete(h); + } + if (h) grib_handle_delete(h); + + grib_file_close(file->name,&err); + + grib_fieldset_rewind(set); + + return ret; +} + +static int grib_fieldset_resize(grib_fieldset* set,size_t newsize) { + int err=0; + + err=grib_fieldset_resize_fields(set,newsize); + if (err != 0) return err; + grib_fieldset_resize_int_array(set->order,newsize); + if (err != 0) return err; + grib_fieldset_resize_int_array(set->filter,newsize); + if (err != 0) return err; + + set->fields_array_size=newsize; + + return GRIB_SUCCESS; +} + +void grib_fieldset_rewind(grib_fieldset* set) { + if (set) set->current=0; +} + +grib_handle* grib_fieldset_next_handle(grib_fieldset* set,int* err) { + grib_handle* h; + *err=GRIB_SUCCESS; + h=grib_fieldset_retrieve(set,set->current,err); + if (*err==GRIB_SUCCESS) { + set->current++; + } + return h; +} + +int grib_fieldset_count(grib_fieldset* set) { + return set->size; +} + +grib_handle* grib_fieldset_retrieve(grib_fieldset* set,int i,int* err) { + grib_handle* h=0; + grib_field* field=0; + *err=GRIB_SUCCESS; + if ( !set ) { + *err=GRIB_INVALID_ARGUMENT; + return NULL; + } + if (i >= set->size) return NULL; + + field=set->fields[set->filter->el[set->order->el[i]]]; + grib_file_open(field->file->name,"r",err); + if (*err!=GRIB_SUCCESS) return NULL; + + fseeko(field->file->handle,field->offset,SEEK_SET); + h=grib_handle_new_from_file(set->context,field->file->handle,err); + if (*err!=GRIB_SUCCESS) return NULL; + + grib_file_close(field->file->name,err); + + return h; +} + +static grib_int_array* grib_fieldset_create_int_array(grib_context* c,size_t size) { + grib_int_array* a; + int i=0; + + if (!c) c=grib_context_get_default(); + + a=(grib_int_array*)grib_context_malloc_clear(c,sizeof(grib_int_array)); + + if (!a) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_create_int_array : Cannot malloc %d bytes", + sizeof(grib_int_array)); + return NULL; + } + + a->el=(int*)grib_context_malloc_clear(c,sizeof(int)*size); + if (!a->el) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_fieldset_create_int_array : Cannot malloc %d bytes", + sizeof(int)*size); + return NULL; + } + + a->size=size; + a->context=c; + for (i=0;iel[i]=i; + + return a; +} + +static int grib_fieldset_resize_int_array(grib_int_array* a,size_t newsize) { + int* el; + int err=0; + if (!a) return GRIB_INVALID_ARGUMENT; + + newsize=newsize*sizeof(int); + + el=(int*)grib_context_realloc(a->context,a->el,newsize); + if (!el) { + grib_context_log(a->context, GRIB_LOG_ERROR, + "grib_fieldset_resize_int_array : Cannot malloc %d bytes", + newsize); + return GRIB_OUT_OF_MEMORY; + } else a->el=el; + a->size=newsize; + return err; +} + +static void grib_fieldset_delete_int_array(grib_int_array* f) { + + grib_context* c=f->context; + + if (!f) return; + + grib_context_free(c,f->el); + grib_context_free(c,f); + +} + +static grib_field** grib_fieldset_create_fields(grib_context* c,size_t size) { + int i; + grib_field** fields=(grib_field**)grib_context_malloc_clear(c,size*sizeof(grib_field*)); + if (!fields) return NULL; + for (i=0;icontext,set->fields,newsize*sizeof(grib_field*)); + if (!fields) { + grib_context_log(set->context, GRIB_LOG_ERROR, + "grib_fieldset_resize_fields : Cannot malloc %d bytes", + newsize*sizeof(grib_field*)); + return GRIB_OUT_OF_MEMORY; + } else set->fields=fields; + + for (i=set->fields_array_size;ifields[i]=0; + + set->fields_array_size=newsize; + return err; +} + +static void grib_fieldset_delete_fields(grib_fieldset* set) { + int i; + for (i=0;isize;i++) { + if (!set->fields[i]) continue; + set->fields[i]->file->refcount--; + grib_context_free(set->context,set->fields[i]); + } + grib_context_free(set->context,set->fields); +} + +static void grib_trim(char** x) { + char* p=0; + while (**x == ' ' && **x != '\0' ) (*x)++; + if (**x == '\0') return; + p=(*x)+strlen(*x)-1; + while ( *p == ' ' ) {*p='\0';p--;} + if ( *p == ' ' ) *p='\0'; +} + +static int grib_fieldset_set_order_by(grib_fieldset* set,grib_order_by* ob) { + grib_order_by* next=ob; + char* p=NULL; + int i=0; + + while(next) { + next->idkey=-1; + p=next->key; + while (*p!= 0 && *p != ':') p++; + if (*p ==':') *p=0; + for (i=0;icolumns_size; i++) { + if (!grib_inline_strcmp(next->key,set->columns[i].name)) { + next->idkey=i; + break; + } + } + if (next->idkey == -1) { + grib_context_log(set->context,GRIB_LOG_ERROR, + "Unable to apply the order by. Key missing from the fieldset.\n"); + return GRIB_MISSING_KEY; + } + next=next->next; + } + + set->order_by=ob; + + return GRIB_SUCCESS; + +} + diff --git a/src/grib_filepool.c b/src/grib_filepool.c new file mode 100644 index 000000000..b7f57c72d --- /dev/null +++ b/src/grib_filepool.c @@ -0,0 +1,362 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * Description: file pool + * + * + * + */ + +#include "grib_api_internal.h" +#define GRIB_MAX_OPENED_FILES 200 + +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; + +static void init() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex1,&attr); + pthread_mutexattr_destroy(&attr); + +} +#endif + +static short next_id=0; + +GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} + +static grib_file_pool file_pool= { + 0, /* grib_context* context;*/ + 0, /* grib_file* first;*/ + 0, /* grib_file* current; */ + 0, /* size_t size;*/ + 0, /* int number_of_opened_files;*/ + GRIB_MAX_OPENED_FILES /* int max_opened_files; */ +}; + +void grib_file_pool_clean() { + grib_file *file,*next; + + if (!file_pool.first) return; + + file=file_pool.first; + while(file) { + next=file->next; + grib_file_delete(file); + file=next; + } +} + +static void grib_file_pool_change_id() { + grib_file *file; + + if (!file_pool.first) return; + + file=file_pool.first; + while(file) { + file->id+=1000; + file=file->next; + } +} + +static grib_file* grib_read_file(grib_context *c,FILE* fh,int *err) { + short marker=0; + short id=0; + grib_file* file; + *err = grib_read_short(fh,&marker); + if(!marker) return NULL; + + file=grib_context_malloc_clear(c,sizeof(grib_file)); + file->buffer=0; + file->name=grib_read_string(c,fh,err); + if (*err) return NULL; + + *err=grib_read_short(fh,&id); + file->id=id; + if (*err) return NULL; + + file->next=grib_read_file(c,fh,err); + if (*err) return NULL; + + return file; +} + +static int grib_write_file(FILE *fh,grib_file* file) { + int err=0; + + if (!file) + return grib_write_null_marker(fh); + + err=grib_write_not_null_marker(fh); + if (err) return err; + + err=grib_write_string(fh,file->name); + if (err) return err; + + err=grib_write_short(fh,(short)file->id); + if (err) return err; + + return grib_write_file(fh,file->next); +} + +grib_file* grib_file_pool_get_files() { + return file_pool.first; +} + +int grib_file_pool_read(grib_context* c,FILE* fh) { + int err=0; + short marker=0; + grib_file* file; + + if (!c) c=grib_context_get_default(); + + err = grib_read_short(fh,&marker); + if(!marker) { + grib_context_log(c,GRIB_LOG_ERROR, + "Unable to find file information in index file\n"); + return GRIB_INVALID_FILE; + } + + grib_file_pool_change_id(); + file=file_pool.first; + + while (file->next) + file=file->next; + + file->next=grib_read_file(c,fh,&err); + if (err) return err; + + return GRIB_SUCCESS; +} + +int grib_file_pool_write(FILE* fh) { + int err=0; + if (!file_pool.first) + return grib_write_null_marker(fh); + + err=grib_write_not_null_marker(fh); + if (err) return err; + + return grib_write_file(fh,file_pool.first); +} + +grib_file* grib_file_open(const char* filename, const char* mode,int* err) { + grib_file *file=0,*prev=0; + int same_mode=0; + int is_new=0; + GRIB_PTHREAD_ONCE(&once,&init); + + if (!file_pool.context) file_pool.context=grib_context_get_default(); + + if (file_pool.current && !grib_inline_strcmp(filename,file_pool.current->name)) { + file=file_pool.current; + } else { + GRIB_MUTEX_LOCK(&mutex1); + file=file_pool.first; + while (file) { + if (!grib_inline_strcmp(filename,file->name)) break; + prev=file; + file=file->next; + } + if (!file) { + is_new=1; + file=grib_file_new(file_pool.context,filename,err); + if (prev) prev->next=file; + file_pool.current=file; + if (!prev) file_pool.first=file; + file_pool.size++; + } + GRIB_MUTEX_UNLOCK(&mutex1); + } + + if (file->mode) same_mode=grib_inline_strcmp(mode,file->mode) ? 0 : 1; + if (file->handle && same_mode) { + *err=0; + return file; + } + + GRIB_MUTEX_LOCK(&mutex1); + if (!same_mode && file->handle) { + /*printf("========== mode=%s file->mode=%s\n",mode,file->mode);*/ + fclose(file->handle); + } + + if (!file->handle) { + /*printf("-- opening file %s %s\n",file->name,mode);*/ + if (!is_new && *mode == 'w') + file->handle = fopen(file->name,"a"); + else + file->handle = fopen(file->name,mode); + + file->mode=strdup(mode); + if (!file->handle) { + grib_context_log(file->context,GRIB_LOG_PERROR,"grib_file_open: cannot open file %s",file->name); + *err=GRIB_IO_PROBLEM; + return NULL; + } + if (file_pool.context->io_buffer_size) { +#ifdef POSIX_MEMALIGN + if (posix_memalign((void**)&(file->buffer),sysconf(_SC_PAGESIZE),file_pool.context->io_buffer_size) ) { + grib_context_log(file->context,GRIB_LOG_FATAL,"posix_memalign unable to allocate io_buffer\n"); + } +#else + file->buffer = (void*)malloc(file_pool.context->io_buffer_size); + if (!file->buffer) { + grib_context_log(file->context,GRIB_LOG_FATAL,"Unable to allocate io_buffer\n"); + } +#endif + setvbuf(file->handle,file->buffer,_IOFBF,file_pool.context->io_buffer_size); + } + + file_pool.number_of_opened_files++; + + GRIB_MUTEX_UNLOCK(&mutex1); + + } + return file; +} + +void grib_file_close(const char* filename,int* err) { + grib_file* file=NULL; + + /* Performance: keep the files open to avoid opening and closing files when writing the output. */ + /* So only call fclose() when too many files are open */ + if (file_pool.number_of_opened_files > GRIB_MAX_OPENED_FILES) { + /*printf("++ closing file %s\n",filename);*/ + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex1); + file=grib_get_file(filename,err); + if (file->handle) { + if (fclose(file->handle) != 0) { + *err=GRIB_IO_PROBLEM; + } + if (file->buffer) { + free(file->buffer); + file->buffer=0; + } + file->handle=NULL; + file_pool.number_of_opened_files--; + } + GRIB_MUTEX_UNLOCK(&mutex1); + } +} + +void grib_file_close_all(int *err) +{ + grib_file* file = NULL; + if (!file_pool.first) return; + + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex1); + + file = file_pool.first; + while (file) { + if (file->handle) { + if (fclose(file->handle) != 0) { + *err=GRIB_IO_PROBLEM; + } + file->handle=NULL; + } + file = file->next; + } + + GRIB_MUTEX_UNLOCK(&mutex1); +} + +grib_file* grib_get_file(const char* filename,int* err) +{ + grib_file* file=NULL; + + if (file_pool.current->name && !grib_inline_strcmp(filename,file_pool.current->name)) { + return file_pool.current; + } + + file=file_pool.first; + while (file) { + if (!grib_inline_strcmp(filename,file->name)) break; + file=file->next; + } + if (!file) file=grib_file_new(0,filename,err); + + return file; +} + +grib_file* grib_find_file(short id) { + grib_file* file=NULL; + + if (file_pool.current->name && id==file_pool.current->id) { + return file_pool.current; + } + + file=file_pool.first; + while (file) { + if (id==file->id) break; + file=file->next; + } + + return file; +} + +grib_file* grib_file_new(grib_context* c, const char* name, int* err) { + grib_file* file; + + if (!c) c=grib_context_get_default( ); + + file=grib_context_malloc_clear( c,sizeof(grib_file)); + + if (!file) { + grib_context_log(c,GRIB_LOG_ERROR,"grib_file_new: unable to allocate memory"); + *err=GRIB_OUT_OF_MEMORY; + return NULL; + } + GRIB_PTHREAD_ONCE(&once,&init); + + file->name=strdup(name); + file->id=next_id; + + GRIB_MUTEX_LOCK(&mutex1); + next_id++; + GRIB_MUTEX_UNLOCK(&mutex1); + + file->mode=0; + file->handle=0; + file->refcount=0; + file->context=c; + file->next=0; + file->buffer=0; + return file; +} + +void grib_file_delete(grib_file* file) { + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex1); + if (!file) return; + if(file->name) free(file->name); + if (file->mode) free(file->mode); + if (file->handle) { + fclose(file->handle); + } + if (file->buffer) { + free(file->buffer); + } + grib_context_free(file->context,file); + file=NULL; + GRIB_MUTEX_UNLOCK(&mutex1); +} + diff --git a/src/grib_fortran_interface.c b/src/grib_fortran_interface.c new file mode 100644 index 000000000..8043cee57 --- /dev/null +++ b/src/grib_fortran_interface.c @@ -0,0 +1,1107 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" + +#if HAVE_SYS_TYPES_H +# include +#endif + +#if HAVE_SYS_STAT_H +# include +#endif + +#ifdef HAVE_FCNTL_H +# include +#endif + +#include + +int GRIB_NULL=-1; +int GRIB_NULL_NEAREST=-1; +extern int errno; + +typedef struct l_grib_file l_grib_file; + +struct l_grib_file { + int id; + FILE* f; + l_grib_file* next; +}; + +typedef struct l_grib_handle l_grib_handle; + +struct l_grib_handle { + int id; + grib_handle* h; + l_grib_handle* next; +}; + +typedef struct l_grib_iterator l_grib_iterator; + +struct l_grib_iterator { + int id; + grib_iterator* i; + l_grib_iterator* next; +}; + +typedef struct l_grib_keys_iterator l_grib_keys_iterator; + +struct l_grib_keys_iterator { + int id; + grib_keys_iterator* i; + l_grib_keys_iterator* next; +}; + +static l_grib_handle* handle_set = NULL; +static l_grib_file* file_set = NULL; +static l_grib_iterator* iterator_set = NULL; +static l_grib_keys_iterator* keys_iterator_set = NULL; + +static char* cast_char(char* buf, char* fortstr,int len){ + if (len == 0 ) return NULL; + memcpy(buf,fortstr,len); + buf[len] = '\0'; + return buf; +} + +static int push_file(FILE* f){ + l_grib_file* current = file_set; + l_grib_file* previous = file_set; + l_grib_file* new = NULL; + int myindex = 1; + + if(!file_set){ + file_set = malloc(sizeof(l_grib_file)); + file_set->id = myindex; + file_set->f = f; + file_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->f = f; + return current->id ; + } else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_handle)); + new->id = myindex; + new->f = f; + new->next = current; + previous->next = new; + return myindex; +} + +static int push_handle(grib_handle *h){ + l_grib_handle* current = handle_set; + l_grib_handle* previous = handle_set; + l_grib_handle* new = NULL; + int myindex = 1; + Assert(sizeof(int)==4); + if(!handle_set){ + handle_set = malloc(sizeof(l_grib_handle)); + handle_set->id = myindex; + handle_set->h = h; + handle_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->h = h; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_handle)); + new->id = myindex; + new->h = h; + new->next = current; + previous->next = new; + + return myindex; +} + +static int push_iterator(grib_iterator *i){ + l_grib_iterator* current = iterator_set; + l_grib_iterator* previous = iterator_set; + l_grib_iterator* new = NULL; + int myindex = 1; + Assert(sizeof(int)==4); + if(!iterator_set){ + iterator_set = malloc(sizeof(l_grib_iterator)); + iterator_set->id = myindex; + iterator_set->i = i; + iterator_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->i = i; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + + new = malloc(sizeof(l_grib_iterator)); + new->id = myindex; + new->i = i; + new->next = current; + previous->next = new; + + return myindex; +} + +static int push_keys_iterator(grib_keys_iterator *i){ + l_grib_keys_iterator* current = keys_iterator_set; + l_grib_keys_iterator* previous = keys_iterator_set; + l_grib_keys_iterator* new = NULL; + int myindex = 1; + Assert(sizeof(int)==4); + if(!keys_iterator_set){ + keys_iterator_set = malloc(sizeof(l_grib_keys_iterator)); + keys_iterator_set->id = myindex; + keys_iterator_set->i = i; + keys_iterator_set->next = NULL; + return myindex; + } + + while(current){ + if(current->id < 0){ + current->id = -(current->id); + current->i = i; + return current->id; + } + else{ + myindex++; + previous = current; + current = current->next; + } + } + if(!previous) return -1; + + new = malloc(sizeof(l_grib_keys_iterator)); + new->id = myindex; + new->i = i; + new->next = current; + previous->next = new; + + return myindex; +} + +static grib_handle* get_handle(int handle_id){ + l_grib_handle* current = handle_set; + + while(current){ + if(current->id == handle_id) return current->h; + current = current->next; + } + return NULL; +} + +static FILE* get_file(int file_id){ + l_grib_file* current = file_set; + while(current){ + if(current->id == file_id) return current->f; + current = current->next; + } + return NULL; +} + +static grib_iterator* get_iterator(int iterator_id){ + l_grib_iterator* current = iterator_set; + + while(current){ + if(current->id == iterator_id) return current->i; + current = current->next; + } + return NULL; +} + +static grib_keys_iterator* get_keys_iterator(int keys_iterator_id){ + l_grib_keys_iterator* current = keys_iterator_set; + + while(current){ + if(current->id == keys_iterator_id) return current->i; + current = current->next; + } + return NULL; +} + +static int clear_file(int file_id){ + l_grib_file* current = file_set; + while(current){ + if(current->id == file_id){ + current->id = -(current->id); + if (fclose(current->f) !=0) + return GRIB_IO_PROBLEM; + return GRIB_SUCCESS; + } + current = current->next; + } + return GRIB_INVALID_FILE; +} + +static int clear_handle(int handle_id){ + + l_grib_handle* current = handle_set; + + while(current){ + if(current->id == handle_id){ + current->id = -(current->id); + if(current->h) return grib_handle_delete(current->h); + } + current = current->next; + } + return GRIB_INVALID_GRIB; +} + +static int clear_iterator(int iterator_id){ + + l_grib_iterator* current = iterator_set; + + while(current){ + if(current->id == iterator_id){ + current->id = -(current->id); + return grib_iterator_delete(current->i); + } + current = current->next; + } + return GRIB_INVALID_ITERATOR; +} + +static int clear_keys_iterator(int keys_iterator_id){ + + l_grib_keys_iterator* current = keys_iterator_set; + + while(current){ + if(current->id == keys_iterator_id){ + current->id = -(current->id); + return grib_keys_iterator_delete(current->i); + } + current = current->next; + } + return GRIB_INVALID_KEYS_ITERATOR; +} + +int grib_read_file_(int* fid, char* buffer, int* nbytes) { + grib_context* c; + FILE* f=get_file(*fid); + + if (f) { + int ioerr; + c=grib_context_get_default( ); + if( fread(buffer, 1, *nbytes, f) != *nbytes) { + ioerr=errno; + grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s",strerror(ioerr)); + return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; + } else { + return GRIB_INVALID_FILE; + } +} + +int grib_read_file__(int* fid, char* buffer, int* nbytes) { + return grib_read_file_(fid,buffer,nbytes); +} + +int grib_open_file_(int* fid, char* name , char* op, int lname, int lop){ + FILE* f = NULL; + int ioerr=0; + char oper[8]; + char fname[1024]; + int ret=GRIB_SUCCESS; + /*TODO Proper context passed as external parameter */ + grib_context* context=grib_context_get_default(); + + f = fopen(cast_char(fname,name,lname),cast_char(oper,op,lop)); + + if(!f) { + ioerr=errno; + grib_context_log(context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"IO ERROR: %s: %s",strerror(ioerr),cast_char(fname,name,lname)); + *fid = -1; + ret=GRIB_IO_PROBLEM; + } else { + *fid = push_file(f); + ret=GRIB_SUCCESS; + } + return ret; +} + +int grib_open_file__(int* fid, char* name , char* op, int lname, int lop){ + return grib_open_file_( fid, name , op, lname, lop); +} + +int grib_close_file_(int* fid){ + return clear_file(*fid); +} +int grib_close_file__(int* fid){ + return grib_close_file_(fid); +} + +int grib_multi_support_on_(){ + grib_multi_support_on(0); + return GRIB_SUCCESS; +} +int grib_multi_support_on__(){ + return grib_multi_support_on_(); +} + +int grib_multi_support_off_(){ + grib_multi_support_off(0); + return GRIB_SUCCESS; +} +int grib_multi_support_off__(){ + return grib_multi_support_off_(); +} + + +int grib_iterator_new_(int* gid,int* iterid,int* mode) { + int err=0; + grib_handle* h; + grib_iterator* iter; + + h=get_handle(*gid); + if (!h) { + *iterid=-1; + return GRIB_NULL_HANDLE; + } + iter=grib_iterator_new(h,*mode,&err); + if (iter) + *iterid=push_iterator(iter); + else + *iterid=-1; + return err; +} + +int grib_iterator_new__(int* gid,int* iterid,int* mode) { + return grib_iterator_new_(gid,iterid,mode); +} + +int grib_iterator_next_(int* iterid,double* lat,double* lon,double* value) { + grib_iterator* iter=get_iterator(*iterid); + if (!iter) return GRIB_INVALID_ITERATOR; + return grib_iterator_next(iter,lat,lon,value); +} + +int grib_iterator_next__(int* iterid,double* lat,double* lon,double* value) { + return grib_iterator_next_(iterid,lat,lon,value); +} + +int grib_iterator_delete_(int* iterid) { + return clear_iterator(*iterid); +} + +int grib_iterator_delete__(int* iterid) { + return grib_iterator_delete_(iterid); +} + +int grib_keys_iterator_new_(int* gid,int* iterid,char* name_space,int len) { + int err=0; + char buf[1024]; + grib_handle* h; + grib_keys_iterator* iter; + + h=get_handle(*gid); + if (!h) { + *iterid=-1; + return GRIB_NULL_HANDLE; + } + iter=grib_keys_iterator_new(h,0,cast_char(buf,name_space,len)); + if (iter) + *iterid=push_keys_iterator(iter); + else + *iterid=-1; + return err; +} +int grib_keys_iterator_new__(int* gid,int* iterid,char* name_space,int len) { + return grib_keys_iterator_new_(gid,iterid,name_space,len); +} + +int grib_keys_iterator_next_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_next(iter); +} + +int grib_keys_iterator_next__(int* iterid) { + return grib_keys_iterator_next_(iterid); +} + +int grib_keys_iterator_delete_(int* iterid) { + return clear_keys_iterator(*iterid); +} +int grib_keys_iterator_delete__(int* iterid) { + return grib_keys_iterator_delete_(iterid); +} + +int grib_gribex_mode_on_() { + grib_gribex_mode_on(0); + return GRIB_SUCCESS; +} +int grib_gribex_mode_on__() { + grib_gribex_mode_on(0); + return GRIB_SUCCESS; +} + +int grib_gribex_mode_off_() { + grib_gribex_mode_off(0); + return GRIB_SUCCESS; +} +int grib_gribex_mode_off__() { + grib_gribex_mode_off(0); + return GRIB_SUCCESS; +} + +int grib_skip_computed_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_COMPUTED); +} +int grib_skip_computed__(int* iterid) { + return grib_skip_computed_(iterid); +} + +int grib_skip_coded_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_CODED); +} +int grib_skip_coded__(int* iterid) { + return grib_skip_coded_(iterid); +} + +int grib_skip_edition_specific_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_EDITION_SPECIFIC); +} +int grib_skip_edition_specific__(int* iterid) { + return grib_skip_edition_specific_(iterid); +} + +int grib_skip_duplicates_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_DUPLICATES); +} +int grib_skip_duplicates__(int* iterid) { + return grib_skip_duplicates_(iterid); +} + +int grib_skip_read_only_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_READ_ONLY); +} +int grib_skip_read_only__(int* iterid) { + return grib_skip_read_only_(iterid); +} + +int grib_skip_function_(int* iterid) { + grib_keys_iterator* iter=get_keys_iterator(*iterid); + if (!iter) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_FUNCTION); +} +int grib_skip_function__(int* iterid) { + return grib_skip_function_(iterid); +} + +int grib_keys_iterator_get_name_(int* iterid,char* name,int* retlen,int len) { + size_t lsize=len; + grib_keys_iterator* kiter=get_keys_iterator(*iterid); + + if (!kiter) return GRIB_INVALID_KEYS_ITERATOR; + + sprintf(name,grib_keys_iterator_get_name(kiter)); + lsize=strlen(name); + name+= lsize; + memset(name,'\0',len-lsize); + *retlen=lsize; + return 0; +} +int grib_keys_iterator_get_name__(int* kiter,char* name,int* retlen,int len) { + return grib_keys_iterator_get_name_(kiter,name,retlen,len); +} + +int grib_keys_iterator_rewind_(int* kiter) { + grib_keys_iterator* i=get_keys_iterator(*kiter); + + if (!i) return GRIB_INVALID_KEYS_ITERATOR; + return grib_keys_iterator_rewind(i); +} +int grib_keys_iterator_rewind__(int* kiter) { + return grib_keys_iterator_rewind_(kiter); +} + +int grib_new_from_message_(int* gid, void* buffer , int* bufsize){ + grib_handle *h = NULL; + h = grib_handle_new_from_message_copy(0, buffer, (size_t) *bufsize); + if(h){ + *gid = push_handle(h); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} +int grib_new_from_message__(int* gid, void* buffer , int* bufsize){ + return grib_new_from_message_(gid, buffer , bufsize); +} + +int grib_new_from_message_copy_(int* gid, void* buffer , int* bufsize){ + grib_handle *h = NULL; + h = grib_handle_new_from_message_copy(0, buffer, (size_t) bufsize); + if(h){ + *gid = push_handle(h); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} + +int grib_new_from_message_copy__(int* gid, void* buffer , int* bufsize){ + return grib_new_from_message_copy_(gid, buffer , bufsize); +} + +int grib_new_from_template_(int* gid, char* name , int lname){ + char fname[1024]; + grib_handle *h = NULL; + + h = grib_handle_new_from_template(NULL,cast_char(fname,name,lname)); + /* grib_context_set_debug(h->context,1);*/ + + if(h){ + *gid = push_handle(h); + return GRIB_SUCCESS; + } + + *gid = -1; + return GRIB_INTERNAL_ERROR; +} + +int grib_new_from_template__(int* gid, char* name , int lname){ + return grib_new_from_template_( gid, name , lname); +} + +int grib_clone_(int* gidsrc,int* giddest){ + grib_handle *src = get_handle(*gidsrc); + grib_handle *dest = NULL; + + if(src){ + dest = grib_handle_clone(src); + if(dest){ + *giddest = push_handle(dest); + return GRIB_SUCCESS; + } + } + + *giddest = -1; + return GRIB_INVALID_GRIB; +} + +int grib_clone__(int* gidsrc,int* giddest){ + return grib_clone_(gidsrc, giddest); +} + +int grib_new_from_file_(int* fid, int* gid){ + int err = 0; + FILE* f = get_file(*fid); + + grib_handle *h = NULL; + + if(f){ + h = grib_handle_new_from_file(0,f,&err); + if(h){ + *gid = push_handle(h); + return GRIB_SUCCESS; + } else { + *gid=-1; + return GRIB_END_OF_FILE; + } + } + + *gid=-1; + return GRIB_INVALID_FILE; +} + +int grib_new_from_file__(int* fid, int* gid){ + return grib_new_from_file_( fid, gid); +} + +int grib_release_(int* hid){ + return clear_handle(*hid); +} +int grib_release__(int* hid){ + return grib_release_( hid); +} + +int grib_dump_(int* gid){ + grib_handle *h = get_handle(*gid); + + if(!h) + return GRIB_INVALID_GRIB; + else + grib_dump_content(h,stdout,NULL,0,NULL); + + return GRIB_SUCCESS; +} +int grib_dump__(int* gid){ + return grib_dump_( gid); +} + + +int grib_print_(int* gid, char* key, int len){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + grib_dumper* d = NULL; + char buf[1024]; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + d = grib_dumper_factory("file",h,stdout,0,0); + err = grib_print(h, cast_char(buf,key,len), d); + grib_dumper_delete(d); + return err; + } +} +int grib_print__(int* gid, char* key, int len){ + return grib_print_( gid, key, len); +} + +int grib_get_error_string_(int* err, char* buf, int len){ + const char* err_msg = grib_get_error_message(*err); + size_t erlen = strlen(err_msg); + strncpy(buf, err_msg,(size_t)len); + if( len < erlen) return GRIB_ARRAY_TOO_SMALL; + return GRIB_SUCCESS; +} +int grib_get_error_string__(int* err, char* buf, int len){ + return grib_get_error_string_(err,buf,len); +} +int grib_get_error_string(int* err, char* buf, int len){ + return grib_get_error_string_(err,buf,len); +} +int grib_get_size_(int* gid, char* key, int* val, int len){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t tsize = 0; + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_size(h, cast_char(buf,key,len), &tsize); + *val = tsize; + return err; + } +} +int grib_get_size__(int* gid, char* key, int* val, int len){ + return grib_get_size_( gid, key, val, len); +} + + +int grib_get_int_(int* gid, char* key, int* val, int len){ + grib_handle *h = get_handle(*gid); + long long_val; + int err = GRIB_SUCCESS; + char buf[1024]; + + if(!h) return GRIB_INVALID_GRIB; + err = grib_get_long(h, cast_char(buf,key,len),&long_val); + *val = long_val; + return err; +} +int grib_get_int__(int* gid, char* key, int* val, int len){ + return grib_get_int_( gid, key, val, len); +} +int grib_get_int_array_(int* gid, char* key, int*val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + long* long_val = NULL; + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + + + if(!h) return GRIB_INVALID_GRIB; + + if(sizeof(long) == sizeof(int)){ + long_val = (long*)val; + err = grib_get_long_array(h, cast_char(buf,key,len), long_val, &lsize); + *size = lsize; + return err; + } + if(*size) + long_val = grib_context_malloc(h->context,(*size)*(sizeof(long))); + else + long_val = grib_context_malloc(h->context,(sizeof(long))); + + if(!long_val) return GRIB_OUT_OF_MEMORY; + err = grib_get_long_array(h, cast_char(buf,key,len), long_val, &lsize); + + for(*size=0;*sizecontext,long_val); + return err; +} +int grib_get_int_array__(int* gid, char* key, int*val, int* size, int len){ + return grib_get_int_array_( gid, key, val, size, len); +} + +int grib_set_int_array_(int* gid, char* key, int* val, int* size, int len){ + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + long* long_val = NULL; + size_t lsize = *size; + + if(!h) return GRIB_INVALID_GRIB; + + if(sizeof(long) == sizeof(int)){ + long_val = (long*)val; + return grib_set_long_array(h, cast_char(buf,key,len), long_val, lsize); + } + + if(lsize) + long_val = grib_context_malloc(h->context,(lsize)*(sizeof(long))); + else + long_val = grib_context_malloc(h->context,(sizeof(long))); + + if(!long_val) return GRIB_OUT_OF_MEMORY; + + for(lsize=0;lsize<(*size);lsize++) + long_val[lsize] = val[lsize]; + + err = grib_set_long_array(h, cast_char(buf,key,len), long_val, lsize); + + grib_context_free(h->context,long_val); + return err; +} +int grib_set_int_array__(int* gid, char* key, int* val, int* size, int len){ + return grib_set_int_array_( gid, key, val, size, len); +} + + +int grib_set_int_(int* gid, char* key, int* val, int len){ + grib_handle *h = get_handle(*gid); + char buf[1024]; + long long_val = *val; + if(!h) return GRIB_INVALID_GRIB; + return grib_set_long(h, cast_char(buf,key,len), long_val); +} +int grib_set_int__(int* gid, char* key, int* val, int len){ + return grib_set_int_( gid, key, val, len); +} + + +int grib_set_real4_(int* gid, char* key, float* val, int len){ + + grib_handle *h = get_handle(*gid); + char buf[1024]; + double val8 = *val; + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double(h, cast_char(buf,key,len), val8); +} +int grib_set_real4__(int* gid, char* key, float* val, int len){ + return grib_set_real4_( gid, key, val, len); +} + +int grib_get_real4_(int* gid, char* key, float* val, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + double val8 = 0; + + Assert(sizeof(float) == 4); + + if(!h) + return GRIB_INVALID_GRIB; + + err = grib_get_double(h, cast_char(buf,key,len), &val8); + *val = val8; + return err; +} +int grib_get_real4__(int* gid, char* key, float* val, int len){ + return grib_get_real4_( gid, key, val, len); +} + +int grib_get_real4_array_(int* gid, char* key, float*val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + double* val8 = NULL; + + Assert(sizeof(float) == 4); + + if(!h) return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,(*size)*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + err = grib_get_double_array(h, cast_char(buf,key,len), val8, &lsize); + for(*size=0;*sizecontext,val8); + return err; +} +int grib_get_real4_array__(int* gid, char* key, float* val, int* size, int len){ + return grib_get_real4_array_( gid, key, val, size, len); +} + +int grib_set_real4_array_(int* gid, char* key, float*val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + double* val8 = NULL; + + Assert(sizeof(float) == 4); + + if(!h) + return GRIB_INVALID_GRIB; + + if(*size) + val8 = grib_context_malloc(h->context,lsize*(sizeof(double))); + else + val8 = grib_context_malloc(h->context,sizeof(double)); + + if(!val8) return GRIB_OUT_OF_MEMORY; + + for(lsize=0;lsize<*size;lsize++) + val8[lsize] = val[lsize]; + + err = grib_set_double_array(h, cast_char(buf,key,len), val8, lsize); + grib_context_free(h->context,val8); + return err; + +} + +int grib_set_real4_array__(int* gid, char* key, float*val, int* size, int len){ + return grib_set_real4_array_( gid, key, val, size, len); +} + +int grib_set_real8_(int* gid, char* key, double* val, int len){ + + grib_handle *h = get_handle(*gid); + + char buf[1024]; + + Assert(sizeof(double) == 8); + + if(!h) return GRIB_INVALID_GRIB; + return grib_set_double(h, cast_char(buf,key,len), *val); +} + + +int grib_set_real8__(int* gid, char* key, double* val, int len){ + Assert(sizeof(double) == 8); + return grib_set_real8_( gid, key, val, len); +} + +int grib_get_real8_(int* gid, char* key, double* val, int len){ + + grib_handle *h = get_handle(*gid); + char buf[1024]; + Assert(sizeof(double) == 8); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_get_double(h, cast_char(buf,key,len), val); + +} +int grib_get_real8__(int* gid, char* key, double* val, int len){ + Assert(sizeof(double) == 8); + return grib_get_real8_( gid, key, val, len); +} + +int grib_get_real8_array_(int* gid, char* key, double*val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = *size; + Assert(sizeof(double) == 8); + + if(!h){ + return GRIB_INVALID_GRIB; + }else{ + err = grib_get_double_array(h, cast_char(buf,key,len), val, &lsize); + *size = lsize; + return err; + } +} +int grib_get_real8_array__(int* gid, char* key, double*val, int* size, int len){ + Assert(sizeof(double) == 8); + return grib_get_real8_array_( gid, key, val, size, len); +} + +int grib_set_real8_array_(int* gid, char* key, double*val, int* size, int len){ + + grib_handle *h = get_handle(*gid); + + char buf[1024]; + + size_t lsize = *size; + Assert(sizeof(double) == 8); + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_double_array(h, cast_char(buf,key,len), val, lsize); + +} + +int grib_set_real8_array__(int* gid, char* key, double *val, int* size, int len){ + Assert(sizeof(double) == 8); + return grib_set_real8_array_( gid, key, val, size, len); +} + +int grib_get_string_(int* gid, char* key, char* val, int len, int len2){ + + grib_handle *h = get_handle(*gid); + int err = GRIB_SUCCESS; + char buf[1024]; + size_t lsize = len2; + + if(!h) return GRIB_INVALID_GRIB; + + err = grib_get_string(h, cast_char(buf,key,len), val, &lsize); + val+= lsize; + memset(val,'\0',len2-lsize); + return err; +} + +int grib_get_string__(int* gid, char* key, char* val, int len, int len2){ + return grib_get_string_( gid, key, val, len, len2); +} + +int grib_set_string_(int* gid, char* key, char* val, int len, int len2){ + + grib_handle *h = get_handle(*gid); + + char buf[1024]; + size_t lsize = len2; + + if(!h) return GRIB_INVALID_GRIB; + + return grib_set_string(h, cast_char(buf,key,len), val, &lsize); + +} + +int grib_set_string__(int* gid, char* key, char* val, int len, int len2){ + return grib_set_string_( gid, key, val, len, len2); +} + +int grib_get_message_size_(int* gid, int *len){ + grib_handle *h = get_handle(*gid); + if(!h) return GRIB_INVALID_GRIB; + + *len = h->buffer->ulength; + return GRIB_SUCCESS; + +} +int grib_get_message_size__(int* gid, int *len){ + return grib_get_message_size_( gid, len); +} + +int grib_copy_message_(int* gid, void* mess,int* len){ + grib_handle *h = get_handle(*gid); + if(!h) + return GRIB_INVALID_GRIB; + + if(*len < h->buffer->ulength) + return GRIB_BUFFER_TOO_SMALL; + + + memcpy(mess,h->buffer->data,h->buffer->ulength); + return GRIB_SUCCESS; + +} + +int grib_copy_message__(int* gid, void* mess,int* len){ + return grib_copy_message_( gid, mess, len); +} + +void grib_check_(int* err){ + if ( *err != GRIB_END_OF_FILE ) + GRIB_CHECK(*err,0); +} + +void grib_check__(int* err){ + grib_check_(err); +} + +int grib_write_(int* gid, int* fid) { + grib_handle *h = get_handle(*gid); + FILE* f = get_file(*fid); + const void* mess = NULL; + size_t mess_len = 0; + + if(!f) return GRIB_INVALID_FILE; + if (!h) return GRIB_INVALID_GRIB; + + grib_get_message(h,&mess,&mess_len); + + if(fwrite(mess,1, mess_len,f) != mess_len) + { + perror("grib_write"); + return GRIB_IO_PROBLEM; + } + + return GRIB_SUCCESS; +} + + +int grib_write__(int* gid, int* fid) { + return grib_write_(gid,fid); +} + +int grib_write(int* gid, int* fid) { + return grib_write_(gid,fid); +} + + diff --git a/src/grib_gaussian_reduced.c b/src/grib_gaussian_reduced.c new file mode 100644 index 000000000..9b85daab0 --- /dev/null +++ b/src/grib_gaussian_reduced.c @@ -0,0 +1,119 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include + +/* + * C Implementation: gaussian_reduced + * + * Description: computes the number of points within the range + * lon_first->lon_last and the zero based indexes + * ilon_first,ilon_last of the first and last point + * given the number of points along a parallel (pl) + * + * + * + * + */ +#define EFDEBUG 0 + +void grib_get_reduced_row(long pl,double lon_first,double lon_last,long* npoints,long* ilon_first, long* ilon_last ) { + double range=0,dlon_first=0,dlon_last=0; + long irange; + + range=lon_last-lon_first; + if (range<0) {range+=360;lon_first-=360;} + + /* computing integer number of points and coordinates without using floating point resolution*/ + *npoints=(range*pl)/360.0+1; + *ilon_first=(lon_first*pl)/360.0; + *ilon_last=(lon_last*pl)/360.0; + + irange=*ilon_last-*ilon_first+1; + +#if EFDEBUG + printf(" pl=%ld npoints=%ld range=%.10e ilon_first=%ld ilon_last=%ld irange=%ld\n", + pl,*npoints,range,*ilon_first,*ilon_last,irange); +#endif + + if (irange != *npoints) { +#if EFDEBUG + printf(" ---> (irange=%ld) != (npoints=%ld) ",irange,*npoints); +#endif + if (irange > *npoints) { + /* checking if the first point is out of range*/ + dlon_first=((*ilon_first)*360.0)/pl; + if (dlon_first < lon_first) {(*ilon_first)++;irange--; +#if EFDEBUG + printf(" dlon_first=%.10e < lon_first=%.10e\n",dlon_first,lon_first ); +#endif + } + + /* checking if the last point is out of range*/ + dlon_last=((*ilon_last)*360.0)/pl; + if (dlon_last > lon_last) {(*ilon_last)--;irange--; +#if EFDEBUG + printf(" dlon_last=%.10e < lon_last=%.10e\n",dlon_last,lon_last ); +#endif + } + } else { + int ok=0; + /* checking if the point before the first is in the range*/ + dlon_first=((*ilon_first-1)*360.0)/pl; + if (dlon_first > lon_first) {(*ilon_first)--;irange++;ok=1; +#if EFDEBUG + printf(" dlon_first1=%.10e > lon_first=%.10e\n",dlon_first,lon_first ); +#endif + } + + /* checking if the point after the last is in the range*/ + dlon_last=((*ilon_last+1)*360.0)/pl; + if (dlon_last < lon_last) {(*ilon_last)++;irange++;ok=1; +#if EFDEBUG + printf(" dlon_last1=%.10e > lon_last=%.10e\n",dlon_last,lon_first ); +#endif + } + + /* if neither of the two are triggered then npoints is too large */ + if (!ok) {(*npoints)--; +#if EFDEBUG + printf(" (*npoints)--=%ld\n",*npoints); +#endif + } + } + + assert(*npoints==irange); +#if EFDEBUG + printf("-- pl=%ld npoints=%ld range=%.10e ilon_first=%ld ilon_last=%ld irange=%ld\n", + pl,*npoints,range,*ilon_first,*ilon_last,irange); +#endif + } else { + /* checking if the first point is out of range*/ + dlon_first=((*ilon_first)*360.0)/pl; + if (dlon_first < lon_first) { + (*ilon_first)++;(*ilon_last)++; +#if EFDEBUG + printf(" ---> dlon_first=%.10e < lon_first=%.10e\n",dlon_first,lon_first ); + printf("-- pl=%ld npoints=%ld range=%.10e ilon_first=%ld ilon_last=%ld irange=%ld\n", + pl,*npoints,range,*ilon_first,*ilon_last,irange); +#endif + } + + } + + if (*ilon_first<0) *ilon_first+=pl; + + return; +} + + + + diff --git a/src/grib_geography.c b/src/grib_geography.c new file mode 100644 index 000000000..45b743d1f --- /dev/null +++ b/src/grib_geography.c @@ -0,0 +1,116 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +#include + +#define SCANXY 1 +#define SCANYX 2 +#define SCANRXRY 3 +#define SCANXRY 4 +#define SCANRXY 5 +#define NUMBER(x) (sizeof(x)/sizeof(x[0])) +#define MAXITER 10 + + +static void gauss_first_guess(long trunc, double* vals) +{ + long i = 0, numVals; + static double gvals[] = { 2.4048255577E0, 5.5200781103E0, + 8.6537279129E0, 11.7915344391E0, 14.9309177086E0, + 18.0710639679E0, 21.2116366299E0, 24.3524715308E0, + 27.4934791320E0, 30.6346064684E0, 33.7758202136E0, + 36.9170983537E0, 40.0584257646E0, 43.1997917132E0, + 46.3411883717E0, 49.4826098974E0, 52.6240518411E0, + 55.7655107550E0, 58.9069839261E0, 62.0484691902E0, + 65.1899648002E0, 68.3314693299E0, 71.4729816036E0, + 74.6145006437E0, 77.7560256304E0, 80.8975558711E0, + 84.0390907769E0, 87.1806298436E0, 90.3221726372E0, + 93.4637187819E0, 96.6052679510E0, 99.7468198587E0, + 102.8883742542E0, 106.0299309165E0, 109.1714896498E0, + 112.3130502805E0, 115.4546126537E0, 118.5961766309E0, + 121.7377420880E0, 124.8793089132E0, 128.0208770059E0, + 131.1624462752E0, 134.3040166383E0, 137.4455880203E0, + 140.5871603528E0, 143.7287335737E0, 146.8703076258E0, + 150.0118824570E0, 153.1534580192E0, 156.2950342685E0, }; + + numVals = NUMBER(gvals); + for( i = 0; i < trunc; i++) + { + if(i < numVals) + vals[i] = gvals[i]; + else + vals[i] = vals[i-1] + M_PI; + } +} + +int grib_get_gaussian_latitudes(long trunc, double *lats) +{ + long jlat, iter, legi; + double rad2deg, convval, root, legfonc = 0; + double mem1, mem2, conv; + double denom = 0.0; + double precision = 1.0E-14; + long nlat = trunc*2; + + rad2deg = 180.0/M_PI; + + convval = (1.0 - ((2.0 / M_PI)*(2.0 / M_PI)) * 0.25); + + gauss_first_guess(trunc, lats); + denom = sqrt( ((((double)nlat)+0.5)*(((double)nlat)+0.5)) + convval ); + + for (jlat = 0; jlat < trunc; jlat++) + { + /* First approximation for root */ + root = cos( lats[jlat] / denom ); + + /* Perform loop of Newton iterations */ + iter = 0; + conv = 1; + + while(fabs(conv) >= precision ) + { + mem2 = 1.0; + mem1 = root; + + /* Compute Legendre polynomial */ + for(legi = 0; legi < nlat; legi++) + { + legfonc = ( (2.0 * (legi+1) - 1.0) * root * mem1 - legi * mem2) / ((double)(legi+1)); + mem2 = mem1; + mem1 = legfonc; + } + + /* Perform Newton iteration */ + conv = legfonc / ((((double)nlat) * (mem2 - root * legfonc) ) / (1.0 - (root *root))); + root -= conv; + + /* Routine fails if no convergence after JPMAXITER iterations */ + if( iter++ > MAXITER ) + { + return GRIB_GEOCALCULUS_PROBLEM; + } + } + + /* Set North and South values using symmetry */ + lats[jlat] = asin(root) * rad2deg; + lats[nlat-1-jlat] = -lats[jlat]; + } + + if( nlat != (trunc*2) ) + lats[trunc + 1] = 0.0; + return GRIB_SUCCESS; +} diff --git a/src/grib_handle.c b/src/grib_handle.c new file mode 100644 index 000000000..04adad896 --- /dev/null +++ b/src/grib_handle.c @@ -0,0 +1,1399 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +/* This is the internal version number of our definition files. We need to change it whenever an older engine */ +/* will not be able to work with the current definitions. See the key "internalVersion" in boot,def */ +#define LATEST_VERSION 22 + +/* #if GRIB_PTHREADS */ +#if 0 +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER; + +static void init() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex1,&attr); + pthread_mutex_init(&mutex2,&attr); + pthread_mutexattr_destroy(&attr); + +} +#endif + + +static grib_handle* grib_handle_new_from_file_no_multi ( grib_context* c, FILE* f,int *error ); +static grib_handle* grib_handle_new_from_file_multi ( grib_context* c, FILE* f,int *error ); +static int grib2_get_next_section ( unsigned char* msgbegin,size_t msglen,unsigned char** secbegin,size_t* seclen,int* secnum,int* err ); +static int grib2_has_next_section ( unsigned char* msgbegin,size_t msglen,unsigned char* secbegin,size_t seclen,int* err ); +static void grib2_build_message ( grib_context* context,unsigned char* sections[],size_t sections_len[],void** data,size_t* msglen ); +static grib_multi_support* grib_get_multi_support ( grib_context* c, FILE* f ); +static grib_multi_support* grib_multi_support_new ( grib_context* c ); +static grib_handle* grib_handle_new_multi ( grib_context* c,unsigned char** idata, + size_t *buflen,int* error ); + +grib_section* grib_section_create ( grib_handle* h,grib_accessor* owner ) +{ + grib_section* s = ( grib_section* ) grib_context_malloc_clear ( h->context,sizeof ( grib_section ) ); + s->owner = owner; + s->aclength = NULL; + s->h = h; + s->block = ( grib_block_of_accessors* ) grib_context_malloc_clear ( h->context, sizeof ( grib_block_of_accessors ) ); + return s; +} + +static void update_sections ( grib_section *s,grib_handle* h,long offset ) +{ + grib_accessor *a = s?s->block->first:NULL; + if ( s ) s->h = h; + while ( a ) + { + a->offset += offset; + /* update_sections ( grib_get_sub_section ( a ),h,offset ); */ + update_sections ( a->sub_section,h,offset ); + a = a->next; + } +} + +void grib_swap_sections ( grib_section* old,grib_section *new ) +{ + grib_accessor* a; + grib_block_of_accessors* b = old->block; + + /* printf("SWAPPING -----\n"); grib_dump_section_content(new,stdout); */ + + old->block = new->block; + new->block = b; + + a = old->aclength; + old->aclength = new->aclength; + new->aclength = a; + + a = old->block->first; + while ( a ) + { + a->parent = old; + a = a->next; + } + + update_sections ( old,old->h,old->owner->offset ); + /* update_sections(new,new->h,new->owner->offset); */ + + /* printf("SWAPPING -----\n"); grib_dump_section_content(old,stdout); */ + +} + +void grib_empty_section ( grib_context *c,grib_section* b ) +{ + grib_accessor* current = NULL; + if ( !b ) return; + + b->aclength = NULL; + + current = b->block->first; + + while ( current ) + { + grib_accessor* next = current->next; + grib_free_accessor ( c,current ); + current = next; + } + b->block->first = b->block->last = 0; + +} + +void grib_section_delete ( grib_context *c, grib_section* b ) +{ + if ( !b ) return; + + grib_empty_section ( c,b ); + grib_context_free ( c,b->block ); + grib_context_free ( c,b ); +} + + +int grib_handle_delete ( grib_handle* h ) +{ + if ( h != NULL ) + { + grib_context *ct =h->context; + grib_dependency *d = h->dependencies; + grib_dependency *n; + + Assert ( h->kid == NULL ); + + while ( d ) + { + n = d->next; + grib_context_free ( ct,d ); + d = n; + } + h->dependencies=0; + + grib_buffer_delete ( ct,h->buffer ); + grib_section_delete ( ct,h->root ); + + grib_context_log ( ct,GRIB_LOG_DEBUG,"grib_handle_delete: deleting handle %p",h ); + grib_context_free ( ct,h ); + h=NULL; + } + return GRIB_SUCCESS; +} + + +grib_handle* grib_new_handle ( grib_context* c ) +{ + grib_handle *g = NULL; + if ( c == NULL ) c = grib_context_get_default(); + g = ( grib_handle* ) grib_context_malloc_clear ( c,sizeof ( grib_handle ) ); + + + if ( g == NULL ) { + grib_context_log ( c,GRIB_LOG_ERROR,"grib_new_handle: cannot allocate handle" ); + } else { + g->context = c; + } + + grib_context_log ( c,GRIB_LOG_DEBUG,"grib_new_handle: allocated handle %p",g ); + + return g; +} + +static void check_definitions_version(grib_handle* h) +{ + /* Check version of definition files is compatible with the engine */ + int ret = 0; + long defs_file_version = 0; + if (grib_is_defined(h, "internalVersion")) { + ret = grib_get_long_internal(h, "internalVersion", &defs_file_version); + if (ret == GRIB_SUCCESS && (defs_file_version > LATEST_VERSION)) { + grib_context_log(h->context, GRIB_LOG_FATAL, + "Definition files version (%d) is greater than engine version (%d)!\n" + "These definition files are for a later version of the grib api engine.\n", + defs_file_version, LATEST_VERSION); + + } + } +} + +static grib_handle* grib_handle_create ( grib_handle *gl, grib_context* c,void* data, size_t buflen ) +{ + grib_action* next = NULL; + + if ( gl == NULL ) + return NULL; + + gl->use_trie = 1; + gl->trie_invalid=0; + gl->buffer = grib_new_buffer ( gl->context,data,buflen ); + + if ( gl->buffer == NULL ) + { + grib_handle_delete ( gl ); + return NULL; + } + + gl->root = grib_create_root_section ( gl->context,gl ); + + if ( !gl->root ) + { + grib_context_log ( c, GRIB_LOG_ERROR, "grib_handle_new_from_message: cannot create root section" ); + grib_handle_delete ( gl ); + return NULL; + } + + if ( !gl->context->grib_reader || !gl->context->grib_reader->first ) + { + grib_context_log ( c, GRIB_LOG_ERROR, "grib_handle_new_from_message: cannot create handle, no definitions found" ); + grib_handle_delete ( gl ); + return NULL; + } + + gl->buffer->property = GRIB_USER_BUFFER; + + next = gl->context->grib_reader->first->root; + while ( next ) + { + if ( grib_create_accessor ( gl->root, next, NULL ) != GRIB_SUCCESS ) + break; + next = next->next; + } + + grib_section_adjust_sizes ( gl->root,0,0 ); + grib_section_post_init ( gl->root ); + + check_definitions_version(gl); + + return gl; + +} + +grib_handle* grib_handle_new_from_template ( grib_context* c, const char* name ) +{ + if ( !c ) c=grib_context_get_default(); + /*grib_context_log(c,GRIB_LOG_WARNING,"grib_handle_new_from_template function is deprecated, please use grib_handle_new_from_samples\n");*/ + return grib_handle_new_from_samples ( c,name ); +} + +grib_handle* grib_handle_new_from_samples ( grib_context* c, const char* name ) +{ + grib_handle* g = 0; + if ( c == NULL ) c = grib_context_get_default(); + c->handle_file_count=0; + c->handle_total_count=0; + + /* + g = grib_internal_template(c,name); + if(g) return g; + */ + if (c->debug==-1) { + printf("GRIB_API DEBUG: grib_handle_new_from_samples '%s'\n", name); + } + + g=grib_external_template ( c,name ); + if ( !g ) + grib_context_log (c,GRIB_LOG_ERROR,"Unable to locate sample file %s.tmpl\n in %s",name,c->grib_samples_path); + + return g; +} + + +int grib_write_message(grib_handle* h,const char* file,const char* mode) { + FILE* fh=0; + int err; + const void *buffer; size_t size; + + fh=fopen(file,mode); + if (!fh) { + perror(file); + return GRIB_IO_PROBLEM; + } + err=grib_get_message(h,&buffer,&size); + if (err) return err; + + if(fwrite(buffer,1,size,fh) != size) { + perror(file); + return GRIB_IO_PROBLEM; + } + if (fclose(fh) != 0) { + perror(file); + return GRIB_IO_PROBLEM; + } + return 0; +} + +grib_handle* grib_handle_clone ( grib_handle* h ) +{ + return grib_handle_new_from_message_copy ( h->context, h->buffer->data, h->buffer->ulength ); +} + + +grib_handle* grib_handle_new_from_message_copy ( grib_context* c, const void* data, size_t size ) +{ + grib_handle *g = NULL; + void* copy =NULL; + if ( c == NULL ) c = grib_context_get_default(); + + + c->handle_file_count=0; + c->handle_total_count=0; + copy = grib_context_malloc ( c,size ); + if ( !copy ) { + return NULL; + } + + memcpy ( copy,data,size ); + + g = grib_handle_new_from_message ( c,copy, size ); + g->buffer->property = GRIB_MY_BUFFER; + + return g; +} + +grib_handle* grib_handle_new_from_partial_message_copy ( grib_context* c, const void* data, size_t size ) +{ + grib_handle *g = NULL; + void* copy =NULL; + if ( c == NULL ) c = grib_context_get_default(); + c->handle_file_count=0; + c->handle_total_count=0; + copy = grib_context_malloc ( c,size ); + if ( !copy ) + return NULL; + + memcpy ( copy,data,size ); + + g = grib_handle_new_from_partial_message ( c,copy, size ); + g->buffer->property = GRIB_MY_BUFFER; + + return g; +} + +grib_handle* grib_handle_new_from_partial_message ( grib_context* c,void* data, size_t buflen ) +{ + grib_handle *gl = NULL; + if ( c == NULL ) c = grib_context_get_default(); + c->handle_file_count=0; + c->handle_total_count=0; + gl = grib_new_handle ( c ); + gl->partial = 1; + return grib_handle_create ( gl, c, data, buflen ); +} + + + +grib_handle* grib_handle_new_from_message ( grib_context* c,void* data, size_t buflen ) +{ + grib_handle *gl = NULL; + grib_handle *h = NULL; + if ( c == NULL ) c = grib_context_get_default(); + gl = grib_new_handle ( c ); + h=grib_handle_create ( gl, c, data, buflen ); + return h; +} + + + +grib_handle* grib_handle_new_from_multi_message ( grib_context* c,void** data, + size_t *buflen,int* error ) +{ + grib_handle *h = NULL; + unsigned char** d= ( unsigned char** ) data; + if ( c == NULL ) c = grib_context_get_default(); + + if ( c->multi_support_on ) h=grib_handle_new_multi ( c,d, buflen,error ); + else + { + size_t olen=0; + void * message=NULL; + *error = grib_read_any_from_memory_alloc ( c, d,buflen,&message, &olen ); + if ( message==NULL ) return NULL; + h = grib_new_handle ( c ); + grib_handle_create ( h, c, message, olen ); + } + + return h; +} + + + +grib_handle* grib_handle_new_from_file ( grib_context* c, FILE* f,int *error ) +{ + off_t offset=0; + grib_handle* h=0; + if (!f) {*error=GRIB_IO_PROBLEM; return NULL;} + + if ( c == NULL ) c = grib_context_get_default(); + + if ( ( offset=grib_context_tell ( c,f ) ) < 0 ) + { + /*grib_context_log ( c, GRIB_LOG_ERROR, "grib_handle_new_from_file: cannot get offset" );*/ + *error=GRIB_IO_PROBLEM; + return NULL; + } + + if ( offset == 0 ) c->handle_file_count=0; + + if ( c->multi_support_on ) h=grib_handle_new_from_file_multi ( c,f,error ); + else h=grib_handle_new_from_file_no_multi ( c,f,error ); + + if ( !c->no_fail_on_wrong_length && *error == GRIB_WRONG_LENGTH ) + { + grib_handle_delete ( h ); + h=NULL; + } + + return h; +} + + +static grib_handle* grib_handle_new_multi ( grib_context* c,unsigned char** data, + size_t *buflen,int* error ) +{ + void * message=NULL; + size_t olen = 0,len=0; + grib_handle *gl = NULL; + long edition=0; + size_t seclen=0; + unsigned char* secbegin=0; + int secnum=0,seccount=0; + int err=0,i=0; + grib_multi_support* gm=NULL; + + if ( c == NULL ) c = grib_context_get_default(); + + gm=grib_get_multi_support ( c,0 ); + + if ( !gm->message ) + { + *error = grib_read_any_from_memory_alloc ( c, data,buflen,&message, &olen ); + gm->message_length=olen; + gm->message=message; + if ( *error != GRIB_SUCCESS || !message ) + { + if ( *error == GRIB_END_OF_FILE ) *error = GRIB_SUCCESS; + gm->message_length = 0; + return NULL; + } + } + else + { + message=gm->message; + } + + edition=grib_decode_unsigned_byte_long ( message,7,1 ); + + if ( edition == 2 ) + { + olen=gm->message_length; + if ( gm->section_number == 0 ) + { + gm->sections[0]=message; + } + secbegin=gm->sections[gm->section_number]; + seclen=gm->sections_length[gm->section_number]; + secnum=gm->section_number; + seccount=0; + while ( grib2_get_next_section ( message,olen,&secbegin,&seclen,&secnum,&err ) ) + { + seccount++; + /*printf(" - %d - section %d length=%d\n",(int)seccount,(int)secnum,(int)seclen);*/ + + gm->sections[secnum]=secbegin; + gm->sections_length[secnum]=seclen; + + if ( secnum == 6 ) + { + /* Special case for inherited bitmaps */ + if ( grib_decode_unsigned_byte_long ( secbegin,5,1 ) == 254 ) + { + if ( !gm->bitmap_section ) + { + grib_context_log ( gl->context, GRIB_LOG_ERROR, + "grib_handle_new_from_file : cannot create handle, missing bitmap\n" ); + return NULL; + } + gm->sections[secnum]= gm->bitmap_section; + gm->sections_length[secnum]=gm->bitmap_section_length; + } + else + { + if ( gm->bitmap_section ) + { + grib_context_free ( c,gm->bitmap_section ); + gm->bitmap_section=NULL; + } + gm->bitmap_section = ( unsigned char* ) grib_context_malloc ( c,seclen ); + gm->bitmap_section = memcpy ( gm->bitmap_section,secbegin,seclen ); + gm->bitmap_section_length=seclen; + } + } + + if ( secnum == 7 ) + { + void* p=message; + len=olen; + grib2_build_message ( c,gm->sections,gm->sections_length,&message,&len ); + + if ( grib2_has_next_section ( p,olen,secbegin,seclen,&err ) ) + { + gm->message=p; + gm->section_number=secnum; + olen=len; + } + else + { + grib_context_free ( c,gm->message ); + gm->message=NULL; + for ( i=0;i<8;i++ ) gm->sections[i]=NULL; + gm->section_number=0; + gm->message_length=0; + olen=len; + } + + break; + } + } + + } + else + { + gm->message_length=0; + gm->message=NULL; + } + + gl = grib_handle_new_from_message ( c, message, olen ); + if ( !gl ) + { + *error = GRIB_DECODING_ERROR; + grib_context_log ( gl->context, GRIB_LOG_ERROR, "grib_handle_new_from_file : cannot create handle \n" ); + return NULL; + } + + gl->buffer->property = GRIB_MY_BUFFER; + c->handle_file_count++; + c->handle_total_count++; + + return gl; +} + +grib_handle* grib_handle_new_from_nc_file(grib_context* c,const char* file,int *error) { + FILE* fh=NULL; + char msg[4]; + grib_handle* h=NULL; + size_t len=4; + + fh=fopen(file,"r"); + if (!fh) { + grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"unable to open %s",file); + perror(file); + return NULL; + } + if (fread(msg,1,3,fh)!=3) { + perror(file); + fclose(fh); + return NULL; + } + fclose(fh); + msg[3]='X'; + + h = grib_handle_new_from_message_copy ( c, msg, len ); + + if ( !h ) { + *error = GRIB_DECODING_ERROR; + grib_context_log ( c, GRIB_LOG_ERROR, "grib_handle_new_nc_from_file : cannot create handle \n" ); + return NULL; + } + return h; +} + +static grib_handle* grib_handle_new_from_file_multi ( grib_context* c, FILE* f,int *error ) +{ + void* data = NULL,*old_data=NULL; + size_t olen = 0,len=0; + grib_handle *gl = NULL; + long edition=0; + size_t seclen=0; + unsigned char* secbegin=0; + int secnum=0,seccount=0; + int err=0,i=0; + grib_multi_support* gm=NULL; + off_t gts_header_offset=0; + off_t end_msg_offset=0,start_msg_offset=0; + char *gts_header=0,*save_gts_header=0; + int gtslen=0; + + if ( c == NULL ) c = grib_context_get_default(); + + gm=grib_get_multi_support ( c,f ); + + if ( !gm->message ) + { + gts_header_offset=grib_context_tell( c,f); + data = wmo_read_grib_from_file_malloc ( f, &olen,error ); + end_msg_offset=grib_context_tell ( c,f ); + start_msg_offset=end_msg_offset-olen; + gm->message_length=olen; + gm->message=data; + gm->offset=start_msg_offset; + if ( *error != GRIB_SUCCESS || !data ) + { + if ( data ) grib_context_free ( c,data ); + + if ( *error == GRIB_END_OF_FILE ) *error = GRIB_SUCCESS; + gm->message_length = 0; + gm->message=NULL; + return NULL; + } + if ( c->gts_header_on ) + { + int g=0; + grib_context_seek ( c,gts_header_offset,SEEK_SET,f ); + gtslen=start_msg_offset-gts_header_offset; + gts_header=grib_context_malloc_clear ( c,sizeof ( unsigned char ) *gtslen ); + save_gts_header=gts_header; + grib_context_read ( c,gts_header,gtslen,f ); + g=gtslen; + while ( gts_header!=NULL && g != 0 && *gts_header != '\03' ) + { + /*printf("--------%d %X \n",gtslen,*gts_header);*/ + gts_header++; + g--; + } + if ( g>8 ) {gts_header++;gtslen=g-1;} + else gts_header=save_gts_header; + grib_context_seek ( c,end_msg_offset,SEEK_SET,f ); + } + + } + else + data=gm->message; + + /*TODO general multimessage handling*/ + edition=grib_decode_unsigned_byte_long ( data,7,1 ); + + if ( edition == 2 ) + { + olen=gm->message_length; + if ( gm->section_number == 0 ) + { + gm->sections[0]=data; + } + secbegin=gm->sections[gm->section_number]; + seclen=gm->sections_length[gm->section_number]; + secnum=gm->section_number; + seccount=0; + while ( grib2_get_next_section ( data,olen,&secbegin,&seclen,&secnum,&err ) ) + { + seccount++; + /*printf(" - %d - section %d length=%d\n",(int)seccount,(int)secnum,(int)seclen);*/ + + gm->sections[secnum]=secbegin; + gm->sections_length[secnum]=seclen; + + if ( secnum == 6 ) + { + /* Special case for inherited bitmaps */ + if ( grib_decode_unsigned_byte_long ( secbegin,5,1 ) == 254 ) + { + if ( !gm->bitmap_section ) + { + grib_context_log ( gl->context, GRIB_LOG_ERROR, "grib_handle_new_from_file : cannot create handle, missing bitmap\n" ); + grib_context_free ( c,data ); + return NULL; + } + gm->sections[secnum]= gm->bitmap_section; + gm->sections_length[secnum]=gm->bitmap_section_length; + } + else + { + if ( gm->bitmap_section ) + { + grib_context_free ( c,gm->bitmap_section ); + gm->bitmap_section=NULL; + } + gm->bitmap_section = ( unsigned char* ) grib_context_malloc ( c,seclen ); + gm->bitmap_section = memcpy ( gm->bitmap_section,secbegin,seclen ); + gm->bitmap_section_length=seclen; + } + } + + if ( secnum == 7 ) + { + old_data=data; + len=olen; + grib2_build_message ( c,gm->sections,gm->sections_length,&data,&len ); + + if ( grib2_has_next_section ( old_data,olen,secbegin,seclen,&err ) ) + { + gm->message=old_data; + gm->section_number=secnum; + olen=len; + } + else + { + if ( gm->message ) grib_context_free ( c,gm->message ); + gm->message=NULL; + for ( i=0;i<8;i++ ) gm->sections[i]=NULL; + gm->section_number=0; + gm->message_length=0; + olen=len; + } + break; + } + } + + } + else + { + gm->message_length=0; + gm->message=NULL; + } + + gl = grib_handle_new_from_message ( c, data, olen ); + if ( !gl ) + { + *error = GRIB_DECODING_ERROR; + grib_context_log ( gl->context, GRIB_LOG_ERROR, "grib_handle_new_from_file : cannot create handle \n" ); + grib_context_free ( c,data ); + return NULL; + } + + gl->offset=gm->offset; + gl->buffer->property = GRIB_MY_BUFFER; + c->handle_file_count++; + c->handle_total_count++; + + if ( c->gts_header_on && gtslen >=8 ) + { + gl->gts_header=grib_context_malloc_clear ( c,sizeof ( unsigned char ) *gtslen ); + memcpy ( gl->gts_header,gts_header,gtslen ); + gl->gts_header_len=gtslen; + grib_context_free ( c,save_gts_header ); + gtslen=0; + } else gl->gts_header=NULL; + + return gl; +} + +grib_handle* grib_handle_headers_only_new_from_file ( grib_context* c, FILE* f,int *error ) +{ + void *data = NULL; + size_t olen = 0; + grib_handle *gl = NULL; + off_t start_msg_offset=0; + + if ( c == NULL ) c = grib_context_get_default(); + + *error = grib_read_any_headers_only_from_file_alloc ( c, f, &data, &olen ,&start_msg_offset); + + if ( *error != GRIB_SUCCESS ) + { + if ( data ) grib_context_free ( c,data ); + if ( *error == GRIB_END_OF_FILE ) *error = GRIB_SUCCESS; + return NULL; + } + + gl = grib_handle_new_from_partial_message ( c, data, olen ); + + if ( !gl ) + { + *error = GRIB_DECODING_ERROR; + grib_context_log ( gl->context, GRIB_LOG_ERROR, "grib_handle_new_from_file : cannot create handle \n" ); + grib_context_free ( c,data ); + return NULL; + } + + gl->offset=start_msg_offset; + gl->buffer->property = GRIB_MY_BUFFER; + c->handle_file_count++; + c->handle_total_count++; + + return gl; +} + +grib_handle* grib_gts_handle_new_from_file ( grib_context* c, FILE* f,int *error ) +{ + void *data = NULL; + size_t olen = 0; + grib_handle *gl = NULL; + off_t end_msg_offset=0,start_msg_offset=0; + + if ( c == NULL ) c = grib_context_get_default(); + + data = wmo_read_gts_from_file_malloc ( f, &olen,error ); + end_msg_offset=grib_context_tell ( c,f ); + start_msg_offset=end_msg_offset-olen; + + if ( *error != GRIB_SUCCESS ) + { + if ( data ) grib_context_free ( c,data ); + + if ( *error == GRIB_END_OF_FILE ) *error = GRIB_SUCCESS; + return NULL; + } + + gl = grib_handle_new_from_message ( c, data, olen ); + + if ( !gl ) + { + *error = GRIB_DECODING_ERROR; + grib_context_log ( gl->context, GRIB_LOG_ERROR, "grib_handle_new_from_file : cannot create handle \n" ); + grib_context_free ( c,data ); + return NULL; + } + + gl->offset=start_msg_offset; + gl->buffer->property = GRIB_MY_BUFFER; + c->handle_file_count++; + c->handle_total_count++; + + return gl; +} + +grib_handle* grib_bufr_handle_new_from_file ( grib_context* c, FILE* f,int *error ) +{ + void *data = NULL; + size_t olen = 0; + grib_handle *gl = NULL; + off_t end_msg_offset=0,start_msg_offset=0; + + if ( c == NULL ) c = grib_context_get_default(); + + data = wmo_read_bufr_from_file_malloc ( f, &olen,error ); + end_msg_offset=grib_context_tell ( c,f ); + start_msg_offset=end_msg_offset-olen; + + if ( *error != GRIB_SUCCESS ) + { + if ( data ) grib_context_free ( c,data ); + + if ( *error == GRIB_END_OF_FILE ) *error = GRIB_SUCCESS; + return NULL; + } + + gl = grib_handle_new_from_message ( c, data, olen ); + + if ( !gl ) + { + *error = GRIB_DECODING_ERROR; + grib_context_log ( gl->context, GRIB_LOG_ERROR, "grib_handle_new_from_file : cannot create handle \n" ); + grib_context_free ( c,data ); + return NULL; + } + + gl->offset=start_msg_offset; + gl->buffer->property = GRIB_MY_BUFFER; + c->handle_file_count++; + c->handle_total_count++; + + return gl; +} + +static grib_handle* grib_handle_new_from_file_no_multi ( grib_context* c, FILE* f,int *error ) +{ + void *data = NULL; + size_t olen = 0; + grib_handle *gl = NULL; + off_t gts_header_offset=0; + off_t end_msg_offset=0,start_msg_offset=0; + char *gts_header=0,*save_gts_header=0; + int gtslen=0; + + if ( c == NULL ) c = grib_context_get_default(); + data = wmo_read_grib_from_file_malloc ( f, &olen, error ); + end_msg_offset=grib_context_tell ( c,f ); + start_msg_offset=end_msg_offset-olen; + + if ( *error != GRIB_SUCCESS ) + { + if ( data ) grib_context_free ( c,data ); + + if ( *error == GRIB_END_OF_FILE ) *error = GRIB_SUCCESS; + return NULL; + } + + if ( c->gts_header_on ) + { + int g=0; + grib_context_seek ( c,gts_header_offset,SEEK_SET,f ); + gtslen=start_msg_offset-gts_header_offset; + gts_header=grib_context_malloc ( c,sizeof ( unsigned char ) *gtslen ); + save_gts_header=gts_header; + grib_context_read ( c,gts_header,gtslen,f ); + g=gtslen; + while ( gts_header!=NULL && g != 0 && *gts_header != '\03' ) + { + /*printf("--------%d %X \n",gtslen,*gts_header);*/ + gts_header++; + g--; + } + if ( g>8 ) {gts_header++;gtslen=g-1;} + else gts_header=save_gts_header; + grib_context_seek ( c,end_msg_offset,SEEK_SET,f ); + } + + gl = grib_handle_new_from_message ( c, data, olen ); + + if ( !gl ) + { + *error = GRIB_DECODING_ERROR; + grib_context_log ( c, GRIB_LOG_ERROR, "grib_handle_new_from_file : cannot create handle \n" ); + grib_context_free ( c,data ); + return NULL; + } + + gl->offset=start_msg_offset; + gl->buffer->property = GRIB_MY_BUFFER; + + c->handle_file_count++; + c->handle_total_count++; + + if ( c->gts_header_on && gtslen >=8 ) + { + gl->gts_header=grib_context_malloc ( c,sizeof ( unsigned char ) *gtslen ); + memcpy ( gl->gts_header,gts_header,gtslen ); + gl->gts_header_len=gtslen; + grib_context_free ( c,save_gts_header ); + gtslen=0; + } + + return gl; +} + +grib_multi_handle* grib_multi_handle_new ( grib_context* c ) +{ + grib_multi_handle* h; + if ( c==NULL ) c=grib_context_get_default(); + if ( !c->multi_support_on ) c->multi_support_on=1; + + h= ( grib_multi_handle* ) grib_context_malloc_clear ( c,sizeof ( grib_multi_handle ) ); + if ( h==NULL ) + { + grib_context_log ( c,GRIB_LOG_ERROR, + "grib_multi_handle_new: unable to allocate memory. %s", + grib_get_error_message ( GRIB_OUT_OF_MEMORY ) ); + return NULL; + } + h->buffer = grib_create_growable_buffer ( c ); + h->buffer->ulength=0; + h->context=c; + + return h; +} + +int grib_multi_handle_delete ( grib_multi_handle* h ) +{ + if ( h==NULL ) return GRIB_SUCCESS; + + grib_buffer_delete ( h->context,h->buffer ); + grib_context_free ( h->context,h ); + return GRIB_SUCCESS; +} + +int grib_multi_handle_append ( grib_handle* h,int start_section,grib_multi_handle* mh ) +{ + const void* mess=NULL; + unsigned char* p=NULL; + int err=0; + size_t mess_len = 0; + size_t total_len=0; + + if ( !h ) return GRIB_NULL_HANDLE; + if ( !mh ) return GRIB_NULL_HANDLE; + + if ( start_section==0 || mh->buffer->ulength==0 ) + { + err=grib_get_message ( h,&mess,&mess_len ); + if ( err!=0 ) return err; + total_len=mh->buffer->ulength+mess_len; + + if ( total_len > mh->buffer->length ) + grib_grow_buffer ( h->context,mh->buffer,total_len ); + + p=mh->buffer->data+mh->buffer->ulength; + memcpy ( p,mess,mess_len ); + mh->offset=mh->buffer->ulength; + mh->buffer->ulength=total_len; + mh->length=mess_len; + + } + else + { + long off=0; + err=grib_get_partial_message ( h,&mess,&mess_len,start_section ); + if ( err!=0 ) return err; + total_len=mh->buffer->ulength+mess_len-4; + + while ( total_len > mh->buffer->length ) + grib_grow_buffer ( h->context,mh->buffer,total_len ); + + p=mh->buffer->data+mh->buffer->ulength-4; + memcpy ( p,mess,mess_len ); + mh->length+=mess_len-4; + + off=mh->offset+64; + + grib_encode_unsigned_long ( mh->buffer->data, mh->length, &off, 64 ); + mh->buffer->ulength=total_len; + } + return err; +} + +int grib_multi_handle_write ( grib_multi_handle* h,FILE* f ) +{ + if ( f==NULL ) return GRIB_INVALID_FILE; + if ( h==NULL ) return GRIB_INVALID_GRIB; + + if ( fwrite ( h->buffer->data,1,h->buffer->ulength,f ) != h->buffer->ulength ) + { + grib_context_log ( h->context,GRIB_LOG_PERROR,"grib_multi_handle_write writing on file" ); + return GRIB_IO_PROBLEM; + } + + return 0; +} + +int grib_get_partial_message ( grib_handle* h,const void** msg,size_t* len,int start_section ) +{ + size_t partial_len=0; + long section_offset=0; + if ( !h ) return GRIB_NULL_HANDLE; + + if ( start_section>h->sections_count ) + return GRIB_INVALID_SECTION_NUMBER; + + grib_get_long ( h,h->section_offset[start_section],§ion_offset ); + partial_len=h->buffer->ulength-section_offset; + + *len=partial_len; + *msg = h->buffer->data+section_offset; + + return GRIB_SUCCESS; +} + +int grib_get_partial_message_copy ( grib_handle* h , void* message,size_t *len, + int start_section ) +{ + size_t partial_len=0; + long section_offset=0; + if ( !h ) return GRIB_NULL_HANDLE; + + if ( start_section>h->sections_count ) + return GRIB_INVALID_SECTION_NUMBER; + + grib_get_long ( h,h->section_offset[start_section],§ion_offset ); + partial_len=h->buffer->ulength-section_offset; + + if ( *len < partial_len ) return GRIB_BUFFER_TOO_SMALL; + + *len=partial_len; + + memcpy ( message,h->buffer->data+section_offset,*len ); + return GRIB_SUCCESS; +} + +int grib_get_message_copy ( grib_handle* h , void* message,size_t *len ) +{ + if ( !h ) + return GRIB_NOT_FOUND; + + if ( *len < h->buffer->ulength ) + return GRIB_BUFFER_TOO_SMALL; + + *len=h->buffer->ulength; + + memcpy ( message,h->buffer->data,*len ); + return GRIB_SUCCESS; +} + +int grib_get_message ( grib_handle* h,const void** msg,size_t* size ) +{ + long totalLength=0; + int ret=0; + *msg = h->buffer->data; + *size = h->buffer->ulength; + + ret=grib_get_long(h,"totalLength",&totalLength); + if (!ret) *size=totalLength; + + if ( h->context->gts_header_on && h->gts_header ) + { + char strbuf[10]; + sprintf ( strbuf,"%.8d", ( int ) ( h->buffer->ulength+h->gts_header_len-6 ) ); + memcpy ( h->gts_header,strbuf,8 ); + } + return 0; +} + +int grib_get_message_headers ( grib_handle* h,const void** msg,size_t* size ) +{ + int ret=0; + size_t endOfHeadersMaker; + *msg = h->buffer->data; + *size = h->buffer->ulength; + + if ((ret=grib_get_offset(h,"endOfHeadersMaker",&endOfHeadersMaker))!=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_FATAL, + "grib_get_message_headers unable to get offset of endOfHeadersMaker"); + return ret; + } + + *size=endOfHeadersMaker; + + return ret; +} + +grib_handle *grib_handle_new ( grib_context* c ) +{ + grib_handle* h; + + if ( !c ) c = grib_context_get_default(); + h = grib_new_handle ( c ); + h->buffer = grib_create_growable_buffer ( c ); + if ( h->buffer == NULL ) + { + grib_handle_delete ( h ); + return NULL; + } + h->root = grib_create_root_section ( h->context,h ); + + if ( !h->root ) + { + grib_context_log ( c, GRIB_LOG_ERROR, "grib_handle_new_from_message: cannot create root section" ); + grib_handle_delete ( h ); + return NULL; + } + + if ( !h->context->grib_reader || !h->context->grib_reader->first ) + { + grib_context_log ( c, GRIB_LOG_ERROR, "grib_handle_new_from_message: cannot create handle, no definitions found" ); + grib_handle_delete ( h ); + return NULL; + } + + h->buffer->property = GRIB_USER_BUFFER; + + h->header_mode=1; + + check_definitions_version(h); + + return h; +} + +grib_action* grib_action_from_filter ( const char* filter ) +{ + grib_action* a = NULL; + grib_context* context=grib_context_get_default(); + a = grib_parse_file ( context, filter ); + context->grib_reader=NULL; + return a; +} + +int grib_handle_apply_action ( grib_handle* h,grib_action* a ) +{ + int err; + grib_action* ao = a; + + if ( !a ) return GRIB_SUCCESS; /* TODO: return error */ + + while ( a ) + { + err = grib_action_execute ( a,h ); + if ( err != GRIB_SUCCESS ) + return err; + a = a->next; + } + + a=ao; + + return GRIB_SUCCESS; +} + +int grib_handle_prepare_action ( grib_handle* h,grib_action* a ) +{ + int err; + grib_action* ao = a; + + if ( !a ) return GRIB_SUCCESS; /* TODO: return error */ + + while ( a ) + { + err = grib_action_execute ( a,h ); + if ( err != GRIB_SUCCESS ) + return err; + a = a->next; + } + + a=ao; + + return GRIB_SUCCESS; +} + +static int grib2_get_next_section ( unsigned char* msgbegin,size_t msglen,unsigned char** secbegin,size_t* seclen,int* secnum,int* err ) +{ + + if ( !grib2_has_next_section ( msgbegin,msglen,*secbegin,*seclen,err ) ) + return 0; + + *secbegin+=*seclen; + *seclen=grib_decode_unsigned_byte_long ( *secbegin,0,4 ); + *secnum=grib_decode_unsigned_byte_long ( *secbegin,4,1 ); + + if ( *secnum < 1 || *secnum > 7 ) + { + *err=GRIB_INVALID_SECTION_NUMBER; + return 0; + } + return 1; +} + +static int grib2_has_next_section ( unsigned char* msgbegin,size_t msglen,unsigned char* secbegin,size_t seclen,int* err ) +{ + long next_seclen; + *err=0; + + next_seclen= ( msgbegin+msglen )- ( secbegin+seclen ); + + if ( next_seclen < 5 ) + { + if ( ( next_seclen > 3 ) && !strncmp ( ( char* ) secbegin,"7777",4 ) ) + *err=GRIB_SUCCESS; + else *err=GRIB_7777_NOT_FOUND; + return 0; + } + + secbegin+=seclen; + + return 1; +} + +static void grib2_build_message ( grib_context* context,unsigned char* sections[],size_t sections_len[],void** data,size_t* len ) +{ + int i=0; + char* theEnd="7777"; + unsigned char* sec0; + unsigned char* p=0; + size_t msglen=0; + long bitp=64; + if ( !sections[0] ) + { + *data=NULL; + return; + } + sec0=sections[0]; + for ( i=0;i<8;i++ ) msglen+= sections_len[i]; + msglen+=4; + if ( *lenmulti_support_on=1; +} + +void grib_multi_support_off ( grib_context* c ) +{ + if ( !c ) c=grib_context_get_default(); + c->multi_support_on=0; +} + +void grib_gts_header_on ( grib_context* c ) +{ + if ( !c ) c=grib_context_get_default(); + c->gts_header_on=1; +} + +void grib_gts_header_off ( grib_context* c ) +{ + if ( !c ) c=grib_context_get_default(); + c->gts_header_on=0; +} + +int grib_get_gribex_mode ( grib_context* c) +{ + if ( !c ) c=grib_context_get_default(); + return c->gribex_mode_on; +} + +void grib_gribex_mode_on ( grib_context* c ) +{ + if ( !c ) c=grib_context_get_default(); + c->gribex_mode_on=1; +} + +void grib_gribex_mode_off ( grib_context* c ) +{ + if ( !c ) c=grib_context_get_default(); + c->gribex_mode_on=0; +} + + +static grib_multi_support* grib_get_multi_support ( grib_context* c, FILE* f ) +{ + int i=0; + grib_multi_support* gm=c->multi_support; + grib_multi_support* prev=NULL; + + while ( gm ) + { + if ( gm->file == f ) return gm; + prev=gm; + gm=gm->next; + } + + if ( !gm ) + { + gm=grib_multi_support_new ( c ); + if ( !c->multi_support ) c->multi_support=gm; + else prev->next=gm; + } + + gm->next=0; + if ( gm->message ) grib_context_free ( c,gm->message ); + gm->message=NULL; + gm->section_number=0; + gm->sections_length[0]=16; + for ( i=1;i<8;i++ ) gm->sections_length[i]=0; + gm->sections_length[8]=4; + gm->file=f; + + return gm; +} + + +void grib_multi_support_reset ( grib_context* c ) +{ + grib_multi_support* gm=c->multi_support; + grib_multi_support* next=NULL; + int i=0; + while ( next ) + { + next=gm->next; + if ( gm->file ) fclose ( gm->file ); + if ( gm->message ) grib_context_free ( c,gm->message ); + gm->message=NULL; + for ( i=0;i<8;i++ ) gm->sections[i]=0; + if ( gm->bitmap_section ) grib_context_free ( c,gm->bitmap_section ); + gm->bitmap_section=NULL; + grib_context_free ( c,gm ); + gm=NULL; + } + +} + +static grib_multi_support* grib_multi_support_new ( grib_context* c ) +{ + int i=0; + grib_multi_support* gm= + ( grib_multi_support* ) grib_context_malloc_clear ( c,sizeof ( grib_multi_support ) ); + gm->file=NULL; + gm->message=NULL; + gm->message_length=0; + gm->bitmap_section=NULL; + gm->bitmap_section_length=0; + gm->section_number=0; + gm->next=0; + gm->sections_length[0]=16; + for ( i=1;i<8;i++ ) gm->sections_length[i]=0; + gm->sections_length[8]=4; + + return gm; +} + + diff --git a/src/grib_hash_keys.c b/src/grib_hash_keys.c new file mode 100644 index 000000000..ba4e69e6f --- /dev/null +++ b/src/grib_hash_keys.c @@ -0,0 +1,5443 @@ +/* C code produced by gperf version 3.0.2 */ +/* Command-line: gperf -I -t -G -H hash_keys -N grib_keys_hash_get -m 3 ../tests/keys */ +/* Computed positions: -k'1-6,8-15,20,23,25,27,$' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "../tests/keys" + +#include "grib_api_internal.h" +#line 4 "../tests/keys" +struct grib_keys_hash { char* name; int id;}; +#include + +#define TOTAL_KEYWORDS 1434 +#define MIN_WORD_LENGTH 1 +#define MAX_WORD_LENGTH 74 +#define MIN_HASH_VALUE 8 +#define MAX_HASH_VALUE 13681 +/* maximum key range = 13674, duplicates = 0 */ + +#ifdef __GNUC__ + +#else +#ifdef __cplusplus + +#endif +#endif +static unsigned int +hash_keys (str, len) + register const char *str; + register unsigned int len; +{ + static unsigned short asso_values[] = + { + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 1, 2, 13682, 1, 13682, 13682, 3, 1296, + 1027, 1628, 977, 133, 153, 119, 213, 9, 1, 13682, + 13682, 13682, 13682, 13682, 13682, 1523, 1656, 489, 88, 925, + 625, 1283, 687, 1301, 406, 27, 850, 803, 842, 184, + 104, 105, 1643, 257, 241, 1478, 1487, 379, 40, 94, + 6, 13682, 13682, 13682, 13682, 198, 260, 3, 111, 33, + 15, 2, 35, 76, 404, 21, 897, 1149, 47, 9, + 4, 1, 3, 1970, 5, 1, 1, 9, 372, 1736, + 832, 318, 2115, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, 13682, + 13682, 13682, 13682, 13682, 13682, 13682, 13682 + }; + register int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[26]]; + /*FALLTHROUGH*/ + case 26: + case 25: + hval += asso_values[(unsigned char)str[24]]; + /*FALLTHROUGH*/ + case 24: + case 23: + hval += asso_values[(unsigned char)str[22]]; + /*FALLTHROUGH*/ + case 22: + case 21: + case 20: + hval += asso_values[(unsigned char)str[19]]; + /*FALLTHROUGH*/ + case 19: + case 18: + case 17: + case 16: + case 15: + hval += asso_values[(unsigned char)str[14]]; + /*FALLTHROUGH*/ + case 14: + hval += asso_values[(unsigned char)str[13]+1]; + /*FALLTHROUGH*/ + case 13: + hval += asso_values[(unsigned char)str[12]]; + /*FALLTHROUGH*/ + case 12: + hval += asso_values[(unsigned char)str[11]]; + /*FALLTHROUGH*/ + case 11: + hval += asso_values[(unsigned char)str[10]]; + /*FALLTHROUGH*/ + case 10: + hval += asso_values[(unsigned char)str[9]]; + /*FALLTHROUGH*/ + case 9: + hval += asso_values[(unsigned char)str[8]]; + /*FALLTHROUGH*/ + case 8: + hval += asso_values[(unsigned char)str[7]]; + /*FALLTHROUGH*/ + case 7: + case 6: + hval += asso_values[(unsigned char)str[5]+1]; + /*FALLTHROUGH*/ + case 5: + hval += asso_values[(unsigned char)str[4]]; + /*FALLTHROUGH*/ + case 4: + hval += asso_values[(unsigned char)str[3]]; + /*FALLTHROUGH*/ + case 3: + hval += asso_values[(unsigned char)str[2]]; + /*FALLTHROUGH*/ + case 2: + hval += asso_values[(unsigned char)str[1]]; + /*FALLTHROUGH*/ + case 1: + hval += asso_values[(unsigned char)str[0]]; + break; + } + return hval + asso_values[(unsigned char)str[len - 1]]; +} + +static struct grib_keys_hash wordlist[] = + { + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 775 "../tests/keys" + {"nt",770}, +#line 755 "../tests/keys" + {"n",750}, +#line 427 "../tests/keys" + {"eps",422}, + {""}, +#line 901 "../tests/keys" + {"one",896}, + {""}, +#line 1270 "../tests/keys" + {"step",1265}, + {""}, {""}, {""}, {""}, {""}, +#line 905 "../tests/keys" + {"oper",900}, +#line 1250 "../tests/keys" + {"spare",1245}, +#line 1031 "../tests/keys" + {"present",1026}, +#line 687 "../tests/keys" + {"mars",682}, +#line 758 "../tests/keys" + {"name",753}, +#line 762 "../tests/keys" + {"names",757}, + {""}, +#line 356 "../tests/keys" + {"date",351}, +#line 433 "../tests/keys" + {"error",428}, + {""}, {""}, +#line 1279 "../tests/keys" + {"stream",1274}, + {""}, +#line 1156 "../tests/keys" + {"sd",1151}, +#line 406 "../tests/keys" + {"ed",401}, +#line 422 "../tests/keys" + {"enorm",417}, +#line 763 "../tests/keys" + {"nd",758}, +#line 992 "../tests/keys" + {"param",987}, +#line 1020 "../tests/keys" + {"points",1015}, +#line 1322 "../tests/keys" + {"time",1317}, +#line 911 "../tests/keys" + {"opttime",906}, +#line 732 "../tests/keys" + {"min",727}, +#line 1382 "../tests/keys" + {"units",1377}, + {""}, +#line 197 "../tests/keys" + {"Xo",192}, + {""}, +#line 301 "../tests/keys" + {"const",296}, +#line 325 "../tests/keys" + {"core",320}, +#line 198 "../tests/keys" + {"Xp",193}, +#line 532 "../tests/keys" + {"ident",527}, + {""}, {""}, {""}, +#line 1041 "../tests/keys" + {"process",1036}, +#line 338 "../tests/keys" + {"count",333}, +#line 66 "../tests/keys" + {"K",61}, +#line 1042 "../tests/keys" + {"product",1037}, +#line 712 "../tests/keys" + {"masterDir",707}, +#line 1278 "../tests/keys" + {"stepZero",1273}, +#line 563 "../tests/keys" + {"iteration",558}, +#line 394 "../tests/keys" + {"domain",389}, +#line 1057 "../tests/keys" + {"radius",1052}, +#line 299 "../tests/keys" + {"consensus",294}, + {""}, +#line 1157 "../tests/keys" + {"second",1152}, + {""}, {""}, {""}, {""}, {""}, +#line 380 "../tests/keys" + {"dimension",375}, + {""}, +#line 1175 "../tests/keys" + {"section",1170}, + {""}, +#line 407 "../tests/keys" + {"edition",402}, +#line 1072 "../tests/keys" + {"rectime",1067}, + {""}, +#line 1002 "../tests/keys" + {"parameters",997}, +#line 1078 "../tests/keys" + {"refdate",1073}, +#line 995 "../tests/keys" + {"parameter",990}, + {""}, {""}, {""}, +#line 1027 "../tests/keys" + {"precision",1022}, + {""}, {""}, {""}, +#line 734 "../tests/keys" + {"minute",729}, +#line 250 "../tests/keys" + {"centre",245}, + {""}, +#line 874 "../tests/keys" + {"offset",869}, +#line 262 "../tests/keys" + {"class",257}, + {""}, {""}, +#line 1269 "../tests/keys" + {"statistics",1264}, +#line 443 "../tests/keys" + {"false",438}, + {""}, +#line 1062 "../tests/keys" + {"range",1057}, +#line 200 "../tests/keys" + {"Yo",195}, +#line 1017 "../tests/keys" + {"pl",1012}, + {""}, {""}, +#line 201 "../tests/keys" + {"Yp",196}, +#line 385 "../tests/keys" + {"direction",380}, + {""}, +#line 1332 "../tests/keys" + {"total",1327}, + {""}, {""}, {""}, {""}, {""}, +#line 448 "../tests/keys" + {"file",443}, + {""}, {""}, +#line 30 "../tests/keys" + {"Dstart",25}, + {""}, {""}, {""}, +#line 1018 "../tests/keys" + {"platform",1013}, + {""}, {""}, +#line 1283 "../tests/keys" + {"stuff",1278}, + {""}, {""}, {""}, {""}, +#line 745 "../tests/keys" + {"model",740}, +#line 1158 "../tests/keys" + {"secondDimension",1153}, + {""}, {""}, +#line 1079 "../tests/keys" + {"reference",1074}, + {""}, +#line 22 "../tests/keys" + {"Di",17}, + {""}, {""}, +#line 916 "../tests/keys" + {"origin",911}, +#line 494 "../tests/keys" + {"grid",489}, + {""}, {""}, {""}, {""}, +#line 927 "../tests/keys" + {"padding",922}, + {""}, {""}, +#line 1161 "../tests/keys" + {"secondLatitude",1156}, + {""}, {""}, +#line 776 "../tests/keys" + {"number",771}, + {""}, {""}, {""}, +#line 690 "../tests/keys" + {"marsDomain",685}, +#line 228 "../tests/keys" + {"band",223}, +#line 244 "../tests/keys" + {"categories",239}, + {""}, {""}, {""}, {""}, {""}, +#line 731 "../tests/keys" + {"million",726}, + {""}, {""}, {""}, +#line 1307 "../tests/keys" + {"targetCompressionRatio",1302}, + {""}, {""}, +#line 1065 "../tests/keys" + {"rdbtime",1060}, + {""}, +#line 462 "../tests/keys" + {"flags",457}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1159 "../tests/keys" + {"secondDimensionCoordinateValueDefinition",1154}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 640 "../tests/keys" + {"local",635}, + {""}, +#line 910 "../tests/keys" + {"optionalData",905}, +#line 655 "../tests/keys" + {"longitude",650}, +#line 680 "../tests/keys" + {"longitudes",675}, + {""}, {""}, {""}, +#line 537 "../tests/keys" + {"ifsParam",532}, + {""}, {""}, {""}, +#line 1129 "../tests/keys" + {"scaledDirections",1124}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 154 "../tests/keys" + {"P",149}, + {""}, {""}, +#line 1148 "../tests/keys" + {"scanPosition",1143}, + {""}, {""}, {""}, +#line 1306 "../tests/keys" + {"tablesVersion",1301}, + {""}, {""}, {""}, +#line 378 "../tests/keys" + {"diagnostic",373}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1080 "../tests/keys" + {"referenceDate",1075}, + {""}, {""}, +#line 372 "../tests/keys" + {"defaultParameter",367}, + {""}, +#line 343 "../tests/keys" + {"dataDate",338}, + {""}, {""}, +#line 1210 "../tests/keys" + {"sectionPosition",1205}, + {""}, +#line 1160 "../tests/keys" + {"secondDimensionPhysicalSignificance",1155}, + {""}, +#line 1296 "../tests/keys" + {"suiteName",1291}, +#line 457 "../tests/keys" + {"flag",452}, +#line 1037 "../tests/keys" + {"probPoint",1032}, + {""}, {""}, {""}, +#line 446 "../tests/keys" + {"fgDate",441}, +#line 877 "../tests/keys" + {"offsetAfterData",872}, + {""}, {""}, {""}, +#line 473 "../tests/keys" + {"forecastperiod",468}, + {""}, {""}, {""}, +#line 1177 "../tests/keys" + {"section0Pointer",1172}, +#line 1351 "../tests/keys" + {"tubeDomain",1346}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 703 "../tests/keys" + {"marsParam",698}, + {""}, {""}, {""}, +#line 409 "../tests/keys" + {"efiOrder",404}, + {""}, +#line 1264 "../tests/keys" + {"startStep",1259}, +#line 1043 "../tests/keys" + {"productDefinition",1038}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1304 "../tests/keys" + {"tableCode",1299}, + {""}, +#line 1070 "../tests/keys" + {"realPart",1065}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1315 "../tests/keys" + {"tiggeCentre",1310}, + {""}, {""}, {""}, +#line 559 "../tests/keys" + {"isSens",554}, + {""}, {""}, +#line 1267 "../tests/keys" + {"statisticalProcess",1262}, + {""}, +#line 707 "../tests/keys" + {"marsStep",702}, + {""}, +#line 486 "../tests/keys" + {"global",481}, +#line 487 "../tests/keys" + {"globalDomain",482}, + {""}, {""}, +#line 1268 "../tests/keys" + {"statisticalProcessesList",1263}, + {""}, {""}, +#line 1202 "../tests/keys" + {"section7",1197}, +#line 1044 "../tests/keys" + {"productDefinitionTemplateNumber",1039}, + {""}, +#line 906 "../tests/keys" + {"operStream",901}, +#line 1090 "../tests/keys" + {"representationType",1085}, + {""}, {""}, {""}, {""}, +#line 1025 "../tests/keys" + {"preProcessing",1020}, +#line 708 "../tests/keys" + {"marsStream",703}, +#line 838 "../tests/keys" + {"numberOfPoints",833}, + {""}, {""}, +#line 351 "../tests/keys" + {"dataStream",346}, +#line 346 "../tests/keys" + {"dataOrigin",341}, +#line 872 "../tests/keys" + {"oceanStream",867}, +#line 418 "../tests/keys" + {"endStep",413}, + {""}, +#line 808 "../tests/keys" + {"numberOfDiamonds",803}, + {""}, +#line 496 "../tests/keys" + {"gridDefinition",491}, + {""}, +#line 1355 "../tests/keys" + {"type",1350}, + {""}, {""}, {""}, {""}, +#line 1197 "../tests/keys" + {"section5",1192}, + {""}, +#line 1434 "../tests/keys" + {"year",1429}, +#line 1223 "../tests/keys" + {"setDecimalPrecision",1218}, +#line 1379 "../tests/keys" + {"unitOfTime",1374}, + {""}, {""}, +#line 1301 "../tests/keys" + {"system",1296}, + {""}, +#line 879 "../tests/keys" + {"offsetAfterPadding",874}, + {""}, {""}, +#line 884 "../tests/keys" + {"offsetBeforeData",879}, + {""}, {""}, {""}, {""}, +#line 467 "../tests/keys" + {"forecastPeriod",462}, + {""}, {""}, +#line 1285 "../tests/keys" + {"subDefinitions",1280}, +#line 1009 "../tests/keys" + {"periodOfTime",1004}, + {""}, +#line 1045 "../tests/keys" + {"productDefinitionTemplateNumberInternal",1040}, + {""}, +#line 1088 "../tests/keys" + {"reportType",1083}, + {""}, {""}, +#line 1026 "../tests/keys" + {"preProcessingParameter",1021}, + {""}, +#line 360 "../tests/keys" + {"dateOfReference",355}, + {""}, {""}, {""}, +#line 809 "../tests/keys" + {"numberOfDirections",804}, + {""}, {""}, {""}, {""}, +#line 917 "../tests/keys" + {"originalParameterNumber",912}, +#line 1200 "../tests/keys" + {"section6",1195}, + {""}, +#line 1327 "../tests/keys" + {"timeOfReference",1322}, + {""}, {""}, +#line 1335 "../tests/keys" + {"totalNumber",1330}, +#line 899 "../tests/keys" + {"offsetSection8",894}, + {""}, +#line 1261 "../tests/keys" + {"standardParallelInMicrodegrees",1256}, + {""}, +#line 1199 "../tests/keys" + {"section5Pointer",1194}, +#line 1260 "../tests/keys" + {"standardParallel",1255}, + {""}, {""}, {""}, +#line 1346 "../tests/keys" + {"truncateDegrees",1341}, +#line 1403 "../tests/keys" + {"varno",1398}, +#line 289 "../tests/keys" + {"coefsSecond",284}, +#line 350 "../tests/keys" + {"dataSelection",345}, + {""}, {""}, +#line 294 "../tests/keys" + {"computeStatistics",289}, + {""}, +#line 1084 "../tests/keys" + {"referenceStep",1079}, +#line 376 "../tests/keys" + {"deleteLocalDefinition",371}, +#line 165 "../tests/keys" + {"SecondLatitude",160}, +#line 1252 "../tests/keys" + {"spatialProcessing",1247}, +#line 558 "../tests/keys" + {"isSatellite",553}, +#line 1110 "../tests/keys" + {"satelliteSeries",1105}, + {""}, +#line 654 "../tests/keys" + {"local_use",649}, +#line 1076 "../tests/keys" + {"rectimeSecond",1071}, +#line 500 "../tests/keys" + {"gridPointPosition",495}, + {""}, {""}, +#line 1048 "../tests/keys" + {"productionStatusOfProcessedData",1043}, + {""}, {""}, +#line 805 "../tests/keys" + {"numberOfDataPoints",800}, +#line 398 "../tests/keys" + {"dummyc",393}, + {""}, {""}, +#line 416 "../tests/keys" + {"endOfProduct",411}, + {""}, {""}, +#line 1013 "../tests/keys" + {"phase",1008}, +#line 1313 "../tests/keys" + {"three",1308}, +#line 545 "../tests/keys" + {"instrument",540}, +#line 1292 "../tests/keys" + {"subSetK",1287}, + {""}, +#line 447 "../tests/keys" + {"fgTime",442}, + {""}, {""}, +#line 519 "../tests/keys" + {"hour",514}, + {""}, {""}, +#line 897 "../tests/keys" + {"offsetSection6",892}, +#line 511 "../tests/keys" + {"hdate",506}, + {""}, {""}, {""}, +#line 411 "../tests/keys" + {"eleven",406}, + {""}, {""}, {""}, +#line 729 "../tests/keys" + {"method",724}, +#line 1402 "../tests/keys" + {"values",1397}, + {""}, {""}, {""}, +#line 896 "../tests/keys" + {"offsetSection5",891}, + {""}, {""}, +#line 649 "../tests/keys" + {"localSection",644}, + {""}, {""}, +#line 993 "../tests/keys" + {"paramId",988}, +#line 733 "../tests/keys" + {"minimum",728}, +#line 579 "../tests/keys" + {"laplacianOperator",574}, +#line 260 "../tests/keys" + {"char",255}, + {""}, {""}, +#line 586 "../tests/keys" + {"latitude",581}, +#line 611 "../tests/keys" + {"latitudes",606}, + {""}, {""}, {""}, +#line 1320 "../tests/keys" + {"tigge_name",1315}, + {""}, {""}, +#line 1206 "../tests/keys" + {"section8Pointer",1201}, +#line 471 "../tests/keys" + {"forecastSteps",466}, +#line 430 "../tests/keys" + {"epsStatistics",425}, +#line 754 "../tests/keys" + {"mybits",749}, + {""}, {""}, {""}, +#line 265 "../tests/keys" + {"climateDateTo",260}, + {""}, {""}, +#line 472 "../tests/keys" + {"forecastTime",467}, + {""}, +#line 280 "../tests/keys" + {"clusteringDomain",275}, +#line 624 "../tests/keys" + {"levels",619}, + {""}, +#line 1302 "../tests/keys" + {"systemNumber",1297}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 499 "../tests/keys" + {"gridDescriptionSectionPresent",494}, +#line 898 "../tests/keys" + {"offsetSection7",893}, + {""}, +#line 1319 "../tests/keys" + {"tiggeSection",1314}, +#line 525 "../tests/keys" + {"hundred",520}, +#line 1204 "../tests/keys" + {"section8",1199}, +#line 1038 "../tests/keys" + {"probProductDefinition",1033}, +#line 1069 "../tests/keys" + {"rdbtimeSecond",1064}, + {""}, {""}, {""}, {""}, +#line 444 "../tests/keys" + {"fcmonth",439}, + {""}, {""}, {""}, +#line 1217 "../tests/keys" + {"section_7",1212}, + {""}, {""}, +#line 484 "../tests/keys" + {"generatingProcessIdentifier",479}, +#line 410 "../tests/keys" + {"eight",405}, +#line 856 "../tests/keys" + {"numberOfSection",851}, + {""}, +#line 1071 "../tests/keys" + {"realPartOf00",1066}, + {""}, {""}, +#line 287 "../tests/keys" + {"codedValues",282}, +#line 483 "../tests/keys" + {"generatingProcessIdentificationNumber",478}, + {""}, +#line 902 "../tests/keys" + {"oneConstant",897}, + {""}, {""}, +#line 620 "../tests/keys" + {"level",615}, + {""}, +#line 426 "../tests/keys" + {"ensembleStandardDeviation",421}, + {""}, {""}, +#line 715 "../tests/keys" + {"matrixBitmapsPresent",710}, +#line 688 "../tests/keys" + {"marsClass",683}, + {""}, +#line 225 "../tests/keys" + {"avg",220}, + {""}, {""}, {""}, +#line 1215 "../tests/keys" + {"section_5",1210}, + {""}, +#line 555 "../tests/keys" + {"isConstant",550}, +#line 258 "../tests/keys" + {"channel",253}, + {""}, +#line 1383 "../tests/keys" + {"unitsBias",1378}, +#line 164 "../tests/keys" + {"SPD",159}, + {""}, {""}, +#line 67 "../tests/keys" + {"KS",62}, + {""}, {""}, +#line 428 "../tests/keys" + {"epsContinous",423}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1305 "../tests/keys" + {"tableReference",1300}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 420 "../tests/keys" + {"endTimeStep",415}, +#line 1312 "../tests/keys" + {"thousand",1307}, +#line 431 "../tests/keys" + {"epsStatisticsContinous",426}, +#line 505 "../tests/keys" + {"groupWidths",500}, +#line 463 "../tests/keys" + {"floatVal",458}, +#line 706 "../tests/keys" + {"marsStartStep",701}, +#line 638 "../tests/keys" + {"listOfParametersUsedForClustering",633}, +#line 540 "../tests/keys" + {"indicatorOfParameter",535}, +#line 730 "../tests/keys" + {"methodNumber",725}, + {""}, +#line 1216 "../tests/keys" + {"section_6",1211}, +#line 710 "../tests/keys" + {"mars_labeling",705}, + {""}, {""}, +#line 432 "../tests/keys" + {"epsStatisticsPoint",427}, +#line 300 "../tests/keys" + {"consensusCount",295}, + {""}, +#line 469 "../tests/keys" + {"forecastPeriodTo",464}, + {""}, {""}, +#line 704 "../tests/keys" + {"marsQuantile",699}, + {""}, {""}, +#line 997 "../tests/keys" + {"parameterCode",992}, + {""}, {""}, {""}, +#line 417 "../tests/keys" + {"endOfRange",412}, +#line 210 "../tests/keys" + {"aerosolType",205}, +#line 497 "../tests/keys" + {"gridDefinitionSection",492}, + {""}, {""}, {""}, {""}, {""}, +#line 10 "../tests/keys" + {"7777",5}, +#line 241 "../tests/keys" + {"bottomLevel",236}, + {""}, +#line 857 "../tests/keys" + {"numberOfSingularVectorsComputed",852}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 764 "../tests/keys" + {"neitherPresent",759}, + {""}, {""}, {""}, {""}, +#line 653 "../tests/keys" + {"local_padding",648}, + {""}, +#line 1056 "../tests/keys" + {"radialAngularSpacing",1051}, +#line 1012 "../tests/keys" + {"perturbedType",1007}, +#line 1227 "../tests/keys" + {"shortName",1222}, + {""}, {""}, {""}, {""}, {""}, +#line 747 "../tests/keys" + {"modelIdentifier",742}, +#line 1047 "../tests/keys" + {"productType",1042}, + {""}, {""}, {""}, {""}, {""}, +#line 1284 "../tests/keys" + {"subCentre",1279}, + {""}, {""}, {""}, +#line 172 "../tests/keys" + {"TScalc",167}, +#line 384 "../tests/keys" + {"dimensionType",379}, + {""}, {""}, +#line 1391 "../tests/keys" + {"unpackedSubsetPrecision",1386}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 1362 "../tests/keys" + {"typeOfGrid",1357}, + {""}, +#line 1343 "../tests/keys" + {"totalNumberOfdimensions",1338}, +#line 400 "../tests/keys" + {"dy",395}, + {""}, {""}, +#line 866 "../tests/keys" + {"numberingOrderOfDiamonds",861}, +#line 364 "../tests/keys" + {"day",359}, + {""}, {""}, +#line 213 "../tests/keys" + {"analysisOffsets",208}, +#line 913 "../tests/keys" + {"orderOfSpatialDifferencing",908}, + {""}, +#line 1036 "../tests/keys" + {"probContinous",1031}, + {""}, +#line 1358 "../tests/keys" + {"typeOfCompressionUsed",1353}, +#line 1257 "../tests/keys" + {"spectralType",1252}, + {""}, {""}, {""}, {""}, {""}, +#line 1438 "../tests/keys" + {"yearOfReference",1433}, +#line 1144 "../tests/keys" + {"scaledValueOfStandardDeviation",1139}, +#line 1019 "../tests/keys" + {"plusOneinOrdersOfSPD",1014}, + {""}, {""}, +#line 536 "../tests/keys" + {"ieeeFloats",531}, + {""}, +#line 912 "../tests/keys" + {"orderOfSPD",907}, +#line 881 "../tests/keys" + {"offsetBSection5",876}, + {""}, +#line 203 "../tests/keys" + {"_T",198}, +#line 395 "../tests/keys" + {"dummy",390}, + {""}, {""}, +#line 1145 "../tests/keys" + {"scaledValueOfStandardDeviationInTheCluster",1140}, +#line 1259 "../tests/keys" + {"standardDeviation",1254}, + {""}, +#line 671 "../tests/keys" + {"longitudeOfStretchingPole",666}, + {""}, +#line 357 "../tests/keys" + {"dateOfAnalysis",352}, + {""}, {""}, +#line 1218 "../tests/keys" + {"section_8",1213}, + {""}, +#line 799 "../tests/keys" + {"numberOfComponents",794}, + {""}, +#line 1229 "../tests/keys" + {"short_name",1224}, +#line 1370 "../tests/keys" + {"typeOfProcessedData",1365}, + {""}, +#line 672 "../tests/keys" + {"longitudeOfStretchingPoleInDegrees",667}, + {""}, +#line 1326 "../tests/keys" + {"timeOfAnalysis",1321}, +#line 904 "../tests/keys" + {"oneThousand",899}, + {""}, +#line 726 "../tests/keys" + {"md5Section7",721}, + {""}, {""}, +#line 495 "../tests/keys" + {"gridCoordinate",490}, + {""}, +#line 580 "../tests/keys" + {"laplacianOperatorIsSet",575}, + {""}, {""}, +#line 515 "../tests/keys" + {"hideThis",510}, + {""}, +#line 508 "../tests/keys" + {"gts_ddhh00",503}, + {""}, {""}, {""}, +#line 882 "../tests/keys" + {"offsetBSection6",877}, + {""}, +#line 1060 "../tests/keys" + {"radiusOfClusterDomain",1055}, + {""}, {""}, {""}, +#line 34 "../tests/keys" + {"Dy",29}, + {""}, {""}, {""}, +#line 861 "../tests/keys" + {"numberOfTimeSteps",856}, + {""}, {""}, {""}, +#line 724 "../tests/keys" + {"md5Section5",719}, + {""}, {""}, {""}, {""}, +#line 920 "../tests/keys" + {"originatingCentre",915}, + {""}, {""}, {""}, +#line 922 "../tests/keys" + {"originatingCentrer",917}, +#line 798 "../tests/keys" + {"numberOfColumns",793}, +#line 1336 "../tests/keys" + {"totalNumberOfClusters",1331}, +#line 304 "../tests/keys" + {"controlForecastCluster",299}, +#line 1323 "../tests/keys" + {"timeCoordinateDefinition",1318}, + {""}, +#line 1051 "../tests/keys" + {"pv",1046}, + {""}, {""}, +#line 509 "../tests/keys" + {"gts_header",504}, + {""}, {""}, +#line 833 "../tests/keys" + {"numberOfOctetsSPD",828}, + {""}, +#line 171 "../tests/keys" + {"TS",166}, + {""}, +#line 1082 "../tests/keys" + {"referenceOfWidths",1077}, + {""}, {""}, {""}, +#line 522 "../tests/keys" + {"hourOfReference",517}, + {""}, {""}, +#line 831 "../tests/keys" + {"numberOfOctectsForNumberOfPoints",826}, + {""}, {""}, +#line 789 "../tests/keys" + {"numberOfCategories",784}, + {""}, {""}, {""}, {""}, +#line 725 "../tests/keys" + {"md5Section6",720}, +#line 794 "../tests/keys" + {"numberOfClusters",789}, +#line 1059 "../tests/keys" + {"radiusOfCentralCluster",1054}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1074 "../tests/keys" + {"rectimeHour",1069}, + {""}, {""}, {""}, {""}, {""}, +#line 888 "../tests/keys" + {"offsetFromOriginToInnerBound",883}, +#line 476 "../tests/keys" + {"freeFormData",471}, + {""}, {""}, {""}, +#line 801 "../tests/keys" + {"numberOfControlForecastTube",796}, +#line 619 "../tests/keys" + {"lev",614}, + {""}, +#line 221 "../tests/keys" + {"average",216}, + {""}, {""}, {""}, +#line 1291 "../tests/keys" + {"subSetJ",1286}, +#line 1073 "../tests/keys" + {"rectimeDay",1068}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 64 "../tests/keys" + {"J",59}, + {""}, {""}, +#line 344 "../tests/keys" + {"dataFlag",339}, + {""}, +#line 1281 "../tests/keys" + {"stretchingFactor",1276}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 256 "../tests/keys" + {"changeDecimalPrecision",251}, +#line 748 "../tests/keys" + {"month",743}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 887 "../tests/keys" + {"offsetFreeFormData",882}, + {""}, {""}, {""}, {""}, +#line 793 "../tests/keys" + {"numberOfClusterLowResolution",788}, + {""}, {""}, +#line 247 "../tests/keys" + {"centralClusterDefinition",242}, +#line 1262 "../tests/keys" + {"startOfHeaders",1257}, + {""}, {""}, +#line 675 "../tests/keys" + {"longitudeOfTangencyPoint",670}, + {""}, {""}, {""}, {""}, {""}, +#line 146 "../tests/keys" + {"Nr",141}, + {""}, {""}, +#line 812 "../tests/keys" + {"numberOfForcasts",807}, + {""}, {""}, {""}, {""}, +#line 80 "../tests/keys" + {"Lap",75}, + {""}, +#line 811 "../tests/keys" + {"numberOfFloats",806}, +#line 1369 "../tests/keys" + {"typeOfPreProcessing",1364}, + {""}, +#line 1396 "../tests/keys" + {"upperLimit",1391}, + {""}, {""}, {""}, {""}, {""}, +#line 1089 "../tests/keys" + {"representationMode",1084}, + {""}, +#line 1067 "../tests/keys" + {"rdbtimeHour",1062}, + {""}, {""}, {""}, {""}, {""}, +#line 1282 "../tests/keys" + {"stretchingFactorScaled",1277}, +#line 264 "../tests/keys" + {"climateDateFrom",259}, + {""}, {""}, {""}, +#line 144 "../tests/keys" + {"Ni",139}, +#line 1058 "../tests/keys" + {"radiusInMetres",1053}, +#line 85 "../tests/keys" + {"Latin",80}, + {""}, {""}, {""}, {""}, {""}, +#line 1066 "../tests/keys" + {"rdbtimeDay",1061}, +#line 1142 "../tests/keys" + {"scaledValueOfSecondSize",1137}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 617 "../tests/keys" + {"lengthOfHeaders",612}, +#line 143 "../tests/keys" + {"Nf",138}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1075 "../tests/keys" + {"rectimeMinute",1070}, +#line 65 "../tests/keys" + {"JS",60}, +#line 1256 "../tests/keys" + {"spectralMode",1251}, +#line 503 "../tests/keys" + {"groupSplitting",498}, + {""}, {""}, {""}, {""}, +#line 702 "../tests/keys" + {"marsModel",697}, +#line 452 "../tests/keys" + {"firstLatitude",447}, +#line 658 "../tests/keys" + {"longitudeOfCenterPoint",653}, + {""}, {""}, {""}, {""}, +#line 999 "../tests/keys" + {"parameterName",994}, + {""}, {""}, +#line 907 "../tests/keys" + {"operatingMode",902}, + {""}, {""}, +#line 371 "../tests/keys" + {"defaultName",366}, + {""}, +#line 367 "../tests/keys" + {"dayOfReference",362}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 204 "../tests/keys" + {"_TS",199}, +#line 557 "../tests/keys" + {"isEps",552}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 423 "../tests/keys" + {"ensembleForecastNumbers",418}, +#line 504 "../tests/keys" + {"groupWidth",499}, + {""}, +#line 621 "../tests/keys" + {"levelIndicator",616}, + {""}, {""}, {""}, {""}, +#line 468 "../tests/keys" + {"forecastPeriodFrom",463}, +#line 719 "../tests/keys" + {"md5Headers",714}, +#line 613 "../tests/keys" + {"leadtime",608}, +#line 585 "../tests/keys" + {"latLonValues",580}, + {""}, {""}, +#line 474 "../tests/keys" + {"formatVersionMajorNumber",469}, +#line 659 "../tests/keys" + {"longitudeOfCentralPointInClusterDomain",654}, +#line 535 "../tests/keys" + {"identifier",530}, + {""}, {""}, +#line 1432 "../tests/keys" + {"yFirst",1427}, + {""}, +#line 700 "../tests/keys" + {"marsLevelist",695}, + {""}, {""}, {""}, +#line 647 "../tests/keys" + {"localExtensionPadding",642}, +#line 424 "../tests/keys" + {"ensembleForecastNumbersList",419}, +#line 1356 "../tests/keys" + {"typeOfAnalysis",1351}, + {""}, +#line 876 "../tests/keys" + {"offsetAfterCentreLocalSection",871}, + {""}, +#line 1435 "../tests/keys" + {"yearOfAnalysis",1430}, +#line 475 "../tests/keys" + {"formatVersionMinorNumber",470}, + {""}, +#line 616 "../tests/keys" + {"legNumber",611}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 699 "../tests/keys" + {"marsLevel",694}, + {""}, +#line 701 "../tests/keys" + {"marsLongitude",696}, + {""}, +#line 1068 "../tests/keys" + {"rdbtimeMinute",1063}, +#line 445 "../tests/keys" + {"fcperiod",440}, +#line 245 "../tests/keys" + {"categoryType",240}, +#line 689 "../tests/keys" + {"marsDir",684}, +#line 858 "../tests/keys" + {"numberOfSingularVectorsEvolved",853}, +#line 1234 "../tests/keys" + {"siteLongitude",1229}, +#line 429 "../tests/keys" + {"epsPoint",424}, + {""}, {""}, {""}, {""}, {""}, +#line 547 "../tests/keys" + {"instrumentType",542}, + {""}, +#line 806 "../tests/keys" + {"numberOfDataSubsets",801}, +#line 878 "../tests/keys" + {"offsetAfterLocalSection",873}, + {""}, {""}, {""}, {""}, +#line 78 "../tests/keys" + {"LaD",73}, +#line 673 "../tests/keys" + {"longitudeOfSubSatellitePoint",668}, + {""}, {""}, +#line 1341 "../tests/keys" + {"totalNumberOfIterations",1336}, + {""}, {""}, {""}, {""}, +#line 698 "../tests/keys" + {"marsLatitude",693}, +#line 674 "../tests/keys" + {"longitudeOfSubSatellitePointInDegrees",669}, +#line 251 "../tests/keys" + {"centreForLocal",246}, + {""}, +#line 449 "../tests/keys" + {"firstDimension",444}, + {""}, {""}, +#line 1233 "../tests/keys" + {"siteLatitude",1228}, +#line 224 "../tests/keys" + {"averagingPeriod",219}, +#line 393 "../tests/keys" + {"distinctLongitudes",388}, + {""}, {""}, {""}, {""}, +#line 829 "../tests/keys" + {"numberOfModels",824}, +#line 1378 "../tests/keys" + {"unitOfOffsetFromReferenceTime",1373}, +#line 1209 "../tests/keys" + {"sectionNumber",1204}, + {""}, +#line 408 "../tests/keys" + {"editionNumber",403}, + {""}, {""}, +#line 834 "../tests/keys" + {"numberOfOperationalForecastTube",829}, +#line 1004 "../tests/keys" + {"patch_precip_fp",999}, + {""}, +#line 1366 "../tests/keys" + {"typeOfLevel",1361}, +#line 142 "../tests/keys" + {"Nb",137}, + {""}, +#line 1063 "../tests/keys" + {"rangeBinSpacing",1058}, + {""}, {""}, {""}, +#line 1333 "../tests/keys" + {"totalInitialConditions",1328}, +#line 1390 "../tests/keys" + {"unpackedError",1385}, +#line 646 "../tests/keys" + {"localDir",641}, + {""}, {""}, +#line 564 "../tests/keys" + {"iterationNumber",559}, + {""}, {""}, {""}, +#line 157 "../tests/keys" + {"PLPresent",152}, +#line 277 "../tests/keys" + {"clusterMember9",272}, + {""}, {""}, +#line 743 "../tests/keys" + {"mixedCoordinateDefinition",738}, +#line 281 "../tests/keys" + {"clusteringMethod",276}, +#line 791 "../tests/keys" + {"numberOfChars",786}, +#line 382 "../tests/keys" + {"dimensionNumber",377}, +#line 520 "../tests/keys" + {"hourOfAnalysis",515}, + {""}, {""}, {""}, +#line 379 "../tests/keys" + {"diagnosticNumber",374}, +#line 1344 "../tests/keys" + {"treatmentOfMissingData",1339}, +#line 795 "../tests/keys" + {"numberOfCodedValues",790}, +#line 1000 "../tests/keys" + {"parameterNumber",995}, +#line 1109 "../tests/keys" + {"satelliteNumber",1104}, + {""}, +#line 740 "../tests/keys" + {"missingDataFlag",735}, + {""}, {""}, {""}, {""}, +#line 660 "../tests/keys" + {"longitudeOfFirstDiamondCenterLine",655}, +#line 662 "../tests/keys" + {"longitudeOfFirstGridPoint",657}, + {""}, {""}, {""}, {""}, +#line 790 "../tests/keys" + {"numberOfCharacters",785}, + {""}, +#line 661 "../tests/keys" + {"longitudeOfFirstDiamondCenterLineInDegrees",656}, + {""}, +#line 601 "../tests/keys" + {"latitudeOfStretchingPole",596}, + {""}, +#line 639 "../tests/keys" + {"listOfScaledFrequencies",634}, + {""}, +#line 663 "../tests/keys" + {"longitudeOfFirstGridPointInDegrees",658}, +#line 828 "../tests/keys" + {"numberOfMissingValues",823}, +#line 837 "../tests/keys" + {"numberOfParametersUsedForClustering",832}, +#line 386 "../tests/keys" + {"directionNumber",381}, +#line 278 "../tests/keys" + {"clusterNumber",273}, +#line 919 "../tests/keys" + {"originalSubCentreIdentifier",914}, + {""}, {""}, {""}, {""}, +#line 1347 "../tests/keys" + {"truncateLaplacian",1342}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 415 "../tests/keys" + {"endOfInterval",410}, +#line 377 "../tests/keys" + {"derivedForecast",372}, + {""}, +#line 1318 "../tests/keys" + {"tiggeModel",1313}, +#line 825 "../tests/keys" + {"numberOfMembersInCluster",820}, + {""}, {""}, {""}, {""}, +#line 744 "../tests/keys" + {"mixedCoordinateFieldFlag",739}, + {""}, {""}, {""}, {""}, {""}, +#line 402 "../tests/keys" + {"eastLongitudeOfCluster",397}, +#line 531 "../tests/keys" + {"iScansPositively",526}, + {""}, {""}, {""}, +#line 669 "../tests/keys" + {"longitudeOfSouthernPole",664}, + {""}, {""}, +#line 827 "../tests/keys" + {"numberOfMissingInStatisticalProcess",822}, + {""}, {""}, {""}, {""}, {""}, +#line 923 "../tests/keys" + {"originatingSubCentreSubCenter",918}, + {""}, {""}, +#line 713 "../tests/keys" + {"masterTableNumber",708}, +#line 577 "../tests/keys" + {"kurt",572}, +#line 670 "../tests/keys" + {"longitudeOfSouthernPoleInDegrees",665}, + {""}, +#line 353 "../tests/keys" + {"dataTime",348}, + {""}, +#line 215 "../tests/keys" + {"angleMultiplier",210}, + {""}, +#line 578 "../tests/keys" + {"kurtosis",573}, + {""}, {""}, +#line 1433 "../tests/keys" + {"yLast",1428}, + {""}, {""}, {""}, {""}, +#line 401 "../tests/keys" + {"earthIsOblate",396}, +#line 644 "../tests/keys" + {"localDefinition",639}, +#line 826 "../tests/keys" + {"numberOfMissing",821}, +#line 1321 "../tests/keys" + {"tigge_short_name",1316}, + {""}, +#line 337 "../tests/keys" + {"correction4Part",332}, + {""}, {""}, {""}, {""}, +#line 645 "../tests/keys" + {"localDefinitionNumber",640}, + {""}, {""}, {""}, +#line 590 "../tests/keys" + {"latitudeOfCenterPoint",585}, +#line 1293 "../tests/keys" + {"subSetM",1288}, + {""}, {""}, {""}, +#line 804 "../tests/keys" + {"numberOfDataMatrices",799}, +#line 677 "../tests/keys" + {"longitudeOfThePolePoint",672}, + {""}, {""}, {""}, {""}, {""}, +#line 530 "../tests/keys" + {"iScansNegatively",525}, + {""}, {""}, {""}, {""}, {""}, +#line 17 "../tests/keys" + {"CDFstr",12}, +#line 816 "../tests/keys" + {"numberOfForecastsInTube",811}, +#line 1138 "../tests/keys" + {"scaledValueOfLowerLimit",1133}, +#line 678 "../tests/keys" + {"longitudeOfThePolePointInDegrees",673}, +#line 1186 "../tests/keys" + {"section2Present",1181}, +#line 691 "../tests/keys" + {"marsEndStep",686}, + {""}, +#line 437 "../tests/keys" + {"expver",432}, + {""}, {""}, {""}, {""}, +#line 481 "../tests/keys" + {"g2grid",476}, +#line 1196 "../tests/keys" + {"section4Pointer",1191}, +#line 908 "../tests/keys" + {"operationalForecastCluster",903}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 333 "../tests/keys" + {"correction2Part",328}, + {""}, +#line 539 "../tests/keys" + {"incrementOfLengths",534}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 668 "../tests/keys" + {"longitudeOfSouthEastCornerOfArea",663}, + {""}, {""}, {""}, {""}, {""}, +#line 1436 "../tests/keys" + {"yearOfCentury",1431}, + {""}, {""}, {""}, +#line 718 "../tests/keys" + {"maximum",713}, + {""}, {""}, +#line 282 "../tests/keys" + {"clutterFilterIndicator",277}, + {""}, +#line 924 "../tests/keys" + {"packedValues",919}, + {""}, +#line 895 "../tests/keys" + {"offsetSection4",890}, + {""}, {""}, {""}, {""}, {""}, +#line 369 "../tests/keys" + {"decimalPrecision",364}, + {""}, +#line 1140 "../tests/keys" + {"scaledValueOfRadiusOfSphericalEarth",1135}, + {""}, +#line 1185 "../tests/keys" + {"section2Pointer",1180}, + {""}, {""}, {""}, {""}, +#line 121 "../tests/keys" + {"Model_Additional_Information",116}, + {""}, +#line 1081 "../tests/keys" + {"referenceOfLengths",1076}, + {""}, +#line 1091 "../tests/keys" + {"representativeMember",1086}, + {""}, {""}, {""}, +#line 381 "../tests/keys" + {"dimensionCategory",376}, +#line 442 "../tests/keys" + {"extraValues",437}, +#line 276 "../tests/keys" + {"clusterMember8",271}, + {""}, {""}, +#line 1011 "../tests/keys" + {"perturbationNumber",1006}, + {""}, +#line 1271 "../tests/keys" + {"stepForClustering",1266}, +#line 996 "../tests/keys" + {"parameterCategory",991}, + {""}, {""}, +#line 810 "../tests/keys" + {"numberOfEffectiveValues",805}, + {""}, {""}, {""}, {""}, +#line 286 "../tests/keys" + {"codedNumberOfGroups",281}, +#line 512 "../tests/keys" + {"headersOnly",507}, + {""}, {""}, {""}, +#line 141 "../tests/keys" + {"Nassigned",136}, +#line 403 "../tests/keys" + {"eastLongitudeOfDomainOfTubing",398}, + {""}, {""}, {""}, {""}, +#line 113 "../tests/keys" + {"MS",108}, + {""}, +#line 1340 "../tests/keys" + {"totalNumberOfGridPoints",1335}, + {""}, +#line 746 "../tests/keys" + {"modelErrorType",741}, + {""}, +#line 370 "../tests/keys" + {"decimalScaleFactor",365}, +#line 139 "../tests/keys" + {"NT",134}, +#line 824 "../tests/keys" + {"numberOfLogicals",819}, + {""}, +#line 918 "../tests/keys" + {"originalParameterTableNumber",913}, +#line 1052 "../tests/keys" + {"pvlLocation",1047}, + {""}, {""}, {""}, +#line 760 "../tests/keys" + {"nameOfFirstFixedSurface",755}, + {""}, +#line 695 "../tests/keys" + {"marsIdent",690}, +#line 1272 "../tests/keys" + {"stepInHours",1267}, + {""}, {""}, +#line 694 "../tests/keys" + {"marsGrid",689}, + {""}, +#line 392 "../tests/keys" + {"distinctLatitudes",387}, + {""}, +#line 274 "../tests/keys" + {"clusterMember6",269}, +#line 1029 "../tests/keys" + {"predefined_grid",1024}, +#line 605 "../tests/keys" + {"latitudeOfTangencyPoint",600}, +#line 1030 "../tests/keys" + {"predefined_grid_values",1025}, + {""}, +#line 1232 "../tests/keys" + {"siteId",1227}, +#line 453 "../tests/keys" + {"firstLatitudeInDegrees",448}, + {""}, +#line 1428 "../tests/keys" + {"yCoordinateOfSubSatellitePoint",1423}, + {""}, +#line 342 "../tests/keys" + {"dataCategory",337}, + {""}, {""}, {""}, +#line 273 "../tests/keys" + {"clusterMember5",268}, +#line 387 "../tests/keys" + {"directionScalingFactor",382}, + {""}, {""}, {""}, {""}, +#line 1195 "../tests/keys" + {"section4Padding",1190}, + {""}, +#line 383 "../tests/keys" + {"dimensionTableNumber",378}, + {""}, {""}, {""}, {""}, +#line 599 "../tests/keys" + {"latitudeOfSouthernPole",594}, +#line 1324 "../tests/keys" + {"timeIncrement",1319}, +#line 288 "../tests/keys" + {"coefsFirst",283}, + {""}, +#line 1386 "../tests/keys" + {"unitsFactor",1381}, + {""}, +#line 623 "../tests/keys" + {"levelist",618}, +#line 1231 "../tests/keys" + {"siteElevation",1226}, + {""}, +#line 1427 "../tests/keys" + {"yCoordinateOfOriginOfSectorImage",1422}, +#line 903 "../tests/keys" + {"oneMillionConstant",898}, +#line 665 "../tests/keys" + {"longitudeOfLastGridPoint",660}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 581 "../tests/keys" + {"laplacianScalingFactor",576}, + {""}, +#line 502 "../tests/keys" + {"groupLengths",497}, + {""}, {""}, {""}, +#line 405 "../tests/keys" + {"easternLongitudeOfDomain",400}, + {""}, {""}, {""}, +#line 275 "../tests/keys" + {"clusterMember7",270}, + {""}, +#line 1132 "../tests/keys" + {"scaledValueOfDistanceFromEnsembleMean",1127}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1184 "../tests/keys" + {"section2Padding",1179}, +#line 1384 "../tests/keys" + {"unitsDecimalScaleFactor",1379}, + {""}, +#line 529 "../tests/keys" + {"iIncrement",524}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 534 "../tests/keys" + {"identificationOfOriginatingGeneratingCentre",529}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 767 "../tests/keys" + {"northLatitudeOfCluster",762}, +#line 1244 "../tests/keys" + {"southLatitudeOfCluster",1239}, +#line 1176 "../tests/keys" + {"section0Length",1171}, + {""}, {""}, +#line 404 "../tests/keys" + {"easternLongitudeOfClusterDomain",399}, +#line 498 "../tests/keys" + {"gridDefinitionTemplateNumber",493}, + {""}, +#line 1108 "../tests/keys" + {"satelliteIdentifier",1103}, + {""}, +#line 1359 "../tests/keys" + {"typeOfEnsembleForecast",1354}, + {""}, {""}, +#line 998 "../tests/keys" + {"parameterIndicator",993}, + {""}, +#line 1077 "../tests/keys" + {"reducedGrid",1072}, + {""}, {""}, +#line 592 "../tests/keys" + {"latitudeOfFirstGridPoint",587}, + {""}, +#line 470 "../tests/keys" + {"forecastProbabilityNumber",465}, + {""}, {""}, {""}, +#line 891 "../tests/keys" + {"offsetSection0",886}, +#line 1162 "../tests/keys" + {"secondLatitudeInDegrees",1157}, + {""}, {""}, +#line 603 "../tests/keys" + {"latitudeOfSubSatellitePoint",598}, +#line 607 "../tests/keys" + {"latitudeOfThePolePoint",602}, + {""}, +#line 657 "../tests/keys" + {"longitudeLastInDegrees",652}, +#line 667 "../tests/keys" + {"longitudeOfNorthWestCornerOfArea",662}, + {""}, {""}, {""}, +#line 1352 "../tests/keys" + {"tubeNumber",1347}, +#line 604 "../tests/keys" + {"latitudeOfSubSatellitePointInDegrees",599}, +#line 813 "../tests/keys" + {"numberOfForecastsInCluster",808}, + {""}, +#line 214 "../tests/keys" + {"angleDivisor",209}, + {""}, {""}, {""}, {""}, +#line 259 "../tests/keys" + {"channelNumber",254}, +#line 150 "../tests/keys" + {"Ny",145}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 818 "../tests/keys" + {"numberOfGroups",813}, +#line 589 "../tests/keys" + {"latitudeLongitudeValues",584}, +#line 434 "../tests/keys" + {"expandBy",429}, +#line 821 "../tests/keys" + {"numberOfInts",816}, +#line 832 "../tests/keys" + {"numberOfOctetsExtraDescriptors",827}, + {""}, {""}, +#line 1377 "../tests/keys" + {"typeOfWavelengthInterval",1372}, + {""}, {""}, +#line 1277 "../tests/keys" + {"stepUnits",1272}, + {""}, +#line 1425 "../tests/keys" + {"xFirst",1420}, + {""}, +#line 219 "../tests/keys" + {"applicationIdentifier",214}, +#line 1143 "../tests/keys" + {"scaledValueOfSecondWavelength",1138}, +#line 480 "../tests/keys" + {"functionCode",475}, + {""}, {""}, {""}, +#line 331 "../tests/keys" + {"correction1Part",326}, + {""}, +#line 641 "../tests/keys" + {"localDecimalScaleFactor",636}, +#line 1046 "../tests/keys" + {"productIdentifier",1041}, + {""}, {""}, +#line 248 "../tests/keys" + {"centralLongitude",243}, + {""}, {""}, {""}, {""}, {""}, +#line 49 "../tests/keys" + {"FirstLatitude",44}, + {""}, {""}, {""}, {""}, +#line 1087 "../tests/keys" + {"reflectivityCalibrationConstant",1082}, + {""}, +#line 576 "../tests/keys" + {"kindOfProduct",571}, + {""}, {""}, +#line 513 "../tests/keys" + {"heightOrPressureOfLevel",508}, +#line 242 "../tests/keys" + {"boustrophedonic",237}, +#line 822 "../tests/keys" + {"numberOfIterations",817}, +#line 1141 "../tests/keys" + {"scaledValueOfSecondFixedSurface",1136}, + {""}, +#line 587 "../tests/keys" + {"latitudeFirstInDegrees",582}, + {""}, +#line 246 "../tests/keys" + {"ccccIdentifiers",241}, + {""}, +#line 526 "../tests/keys" + {"iDirectionIncrement",521}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 227 "../tests/keys" + {"backgroundProcess",222}, + {""}, +#line 1182 "../tests/keys" + {"section1Pointer",1177}, + {""}, {""}, {""}, +#line 1203 "../tests/keys" + {"section7Length",1198}, +#line 196 "../tests/keys" + {"WMO",191}, +#line 451 "../tests/keys" + {"firstDimensionPhysicalSignificance",446}, + {""}, +#line 249 "../tests/keys" + {"centralLongitudeInMicrodegrees",244}, + {""}, {""}, +#line 24 "../tests/keys" + {"DiInDegrees",19}, +#line 1361 "../tests/keys" + {"typeOfGeneratingProcess",1356}, + {""}, {""}, {""}, {""}, {""}, +#line 1198 "../tests/keys" + {"section5Length",1193}, + {""}, +#line 1393 "../tests/keys" + {"unsignedIntegers",1388}, + {""}, +#line 556 "../tests/keys" + {"isEPS",551}, + {""}, {""}, {""}, {""}, +#line 1337 "../tests/keys" + {"totalNumberOfDirections",1332}, + {""}, {""}, +#line 648 "../tests/keys" + {"localFlag",643}, +#line 572 "../tests/keys" + {"keyData",567}, +#line 1404 "../tests/keys" + {"verificationDate",1399}, +#line 781 "../tests/keys" + {"numberIncludedInAverage",776}, + {""}, {""}, {""}, +#line 1001 "../tests/keys" + {"parameterUnits",996}, +#line 1201 "../tests/keys" + {"section6Length",1196}, + {""}, {""}, +#line 267 "../tests/keys" + {"clusterIdentifier",262}, + {""}, {""}, {""}, {""}, {""}, +#line 388 "../tests/keys" + {"dirty_statistics",383}, + {""}, +#line 768 "../tests/keys" + {"northLatitudeOfDomainOfTubing",763}, +#line 1245 "../tests/keys" + {"southLatitudeOfDomainOfTubing",1240}, + {""}, {""}, +#line 283 "../tests/keys" + {"codeFigure",278}, + {""}, +#line 1003 "../tests/keys" + {"parametersVersion",998}, + {""}, +#line 158 "../tests/keys" + {"PUnset",153}, + {""}, +#line 112 "../tests/keys" + {"M",107}, + {""}, {""}, {""}, {""}, +#line 820 "../tests/keys" + {"numberOfIntegers",815}, + {""}, {""}, {""}, +#line 741 "../tests/keys" + {"missingValue",736}, +#line 549 "../tests/keys" + {"integerScalingFactorAppliedToDirections",544}, +#line 550 "../tests/keys" + {"integerScalingFactorAppliedToFrequencies",545}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 571 "../tests/keys" + {"julianDay",566}, +#line 1049 "../tests/keys" + {"projectionCenterFlag",1044}, + {""}, {""}, +#line 1050 "../tests/keys" + {"projectionCentreFlag",1045}, + {""}, {""}, {""}, +#line 341 "../tests/keys" + {"countTotal",336}, + {""}, {""}, +#line 1310 "../tests/keys" + {"thisMarsStream",1305}, + {""}, +#line 608 "../tests/keys" + {"latitudeOfTheSouthernPoleOfProjection",603}, +#line 1360 "../tests/keys" + {"typeOfFirstFixedSurface",1355}, + {""}, {""}, +#line 355 "../tests/keys" + {"dataValues",350}, + {""}, {""}, +#line 1205 "../tests/keys" + {"section8Length",1200}, + {""}, +#line 1239 "../tests/keys" + {"sourceOfGridDefinition",1234}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 692 "../tests/keys" + {"marsExpver",687}, + {""}, {""}, {""}, {""}, +#line 492 "../tests/keys" + {"gribMasterTablesVersionNumber",487}, + {""}, {""}, +#line 243 "../tests/keys" + {"boustrophedonicOrdering",238}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 782 "../tests/keys" + {"numberMissingFromAveragesOrAccumulations",777}, +#line 491 "../tests/keys" + {"grib2divider",486}, + {""}, {""}, {""}, +#line 1392 "../tests/keys" + {"unpackedValues",1387}, +#line 717 "../tests/keys" + {"max",712}, + {""}, +#line 399 "../tests/keys" + {"dx",394}, + {""}, +#line 1181 "../tests/keys" + {"section1Padding",1176}, + {""}, +#line 124 "../tests/keys" + {"N",119}, + {""}, {""}, +#line 1380 "../tests/keys" + {"unitOfTimeIncrement",1375}, + {""}, {""}, {""}, {""}, +#line 1426 "../tests/keys" + {"xLast",1421}, + {""}, {""}, +#line 681 "../tests/keys" + {"longitudinalDirectionGridLength",676}, +#line 438 "../tests/keys" + {"extendedFlag",433}, + {""}, {""}, {""}, +#line 257 "../tests/keys" + {"changingPrecision",252}, +#line 551 "../tests/keys" + {"integerValues",546}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 679 "../tests/keys" + {"longitudeOfTheSouthernPoleOfProjection",674}, + {""}, {""}, {""}, +#line 1010 "../tests/keys" + {"periodOfTimeIntervals",1005}, + {""}, +#line 1085 "../tests/keys" + {"referenceValue",1080}, +#line 1136 "../tests/keys" + {"scaledValueOfFirstSize",1131}, +#line 159 "../tests/keys" + {"PVPresent",154}, +#line 1032 "../tests/keys" + {"pressureLevel",1027}, + {""}, +#line 373 "../tests/keys" + {"defaultShortName",368}, + {""}, +#line 815 "../tests/keys" + {"numberOfForecastsInTheCluster",810}, +#line 626 "../tests/keys" + {"libraryVersion",621}, + {""}, {""}, {""}, {""}, +#line 676 "../tests/keys" + {"longitudeOfThePoleOfStretching",671}, + {""}, {""}, +#line 865 "../tests/keys" + {"numberOfVerticalPoints",860}, + {""}, {""}, +#line 863 "../tests/keys" + {"numberOfValues",858}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1353 "../tests/keys" + {"two",1348}, + {""}, +#line 1374 "../tests/keys" + {"typeOfStatisticalProcessing",1369}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1034 "../tests/keys" + {"primaryBitmap",1029}, +#line 652 "../tests/keys" + {"localUsePresent",647}, + {""}, +#line 31 "../tests/keys" + {"Dx",26}, +#line 1253 "../tests/keys" + {"spatialSmoothingOfProduct",1248}, +#line 1334 "../tests/keys" + {"totalLength",1329}, + {""}, {""}, {""}, {""}, +#line 546 "../tests/keys" + {"instrumentIdentifier",541}, + {""}, +#line 1131 "../tests/keys" + {"scaledValueOfCentralWaveNumber",1126}, + {""}, {""}, {""}, +#line 774 "../tests/keys" + {"northernLatitudeOfDomain",769}, +#line 1247 "../tests/keys" + {"southernLatitudeOfDomain",1242}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 637 "../tests/keys" + {"listOfModelIdentifiers",632}, +#line 374 "../tests/keys" + {"definitionFilesVersion",369}, + {""}, {""}, +#line 1266 "../tests/keys" + {"startTimeStep",1261}, + {""}, +#line 1400 "../tests/keys" + {"validityDate",1395}, + {""}, {""}, +#line 1135 "../tests/keys" + {"scaledValueOfFirstFixedSurface",1130}, +#line 1105 "../tests/keys" + {"roundedMarsLatitude",1100}, + {""}, +#line 926 "../tests/keys" + {"packingType",921}, +#line 191 "../tests/keys" + {"Total_Number_Members_Used",186}, +#line 1092 "../tests/keys" + {"reserved",1087}, +#line 50 "../tests/keys" + {"GDSPresent",45}, + {""}, +#line 880 "../tests/keys" + {"offsetBBitmap",875}, + {""}, {""}, +#line 800 "../tests/keys" + {"numberOfContributingSpectralBands",795}, + {""}, +#line 1388 "../tests/keys" + {"unitsOfSecondFixedSurface",1383}, + {""}, {""}, {""}, {""}, +#line 345 "../tests/keys" + {"dataLength",340}, + {""}, {""}, {""}, +#line 773 "../tests/keys" + {"northernLatitudeOfClusterDomain",768}, +#line 1246 "../tests/keys" + {"southernLatitudeOfClusterDomain",1241}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 847 "../tests/keys" + {"numberOfPointsUsed",842}, + {""}, {""}, {""}, +#line 465 "../tests/keys" + {"forecastMonth",460}, + {""}, {""}, {""}, +#line 128 "../tests/keys" + {"NC",123}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 16 "../tests/keys" + {"CDF",11}, +#line 23 "../tests/keys" + {"DiGiven",18}, + {""}, +#line 1107 "../tests/keys" + {"roundedMarsLongitude",1102}, + {""}, +#line 239 "../tests/keys" + {"bitsPerValue",234}, + {""}, +#line 606 "../tests/keys" + {"latitudeOfThePoleOfStretching",601}, +#line 1064 "../tests/keys" + {"rdb_key",1059}, +#line 506 "../tests/keys" + {"gts_CCCC",501}, +#line 335 "../tests/keys" + {"correction3Part",330}, +#line 875 "../tests/keys" + {"offsetAfterBitmap",870}, +#line 1016 "../tests/keys" + {"physicalMeaningOfVerticalCoordinate",1011}, +#line 1303 "../tests/keys" + {"table2Version",1298}, +#line 375 "../tests/keys" + {"deleteExtraLocalSection",370}, +#line 986 "../tests/keys" + {"padding_sec1_loc",981}, + {""}, +#line 686 "../tests/keys" + {"mBasicAngle",681}, + {""}, +#line 347 "../tests/keys" + {"dataRepresentation",342}, +#line 1273 "../tests/keys" + {"stepRange",1268}, +#line 696 "../tests/keys" + {"marsKeywords",691}, + {""}, +#line 1149 "../tests/keys" + {"scanningMode",1144}, + {""}, {""}, +#line 35 "../tests/keys" + {"DyInDegrees",30}, +#line 1263 "../tests/keys" + {"startOfRange",1258}, + {""}, +#line 737 "../tests/keys" + {"minuteOfReference",732}, + {""}, +#line 705 "../tests/keys" + {"marsRange",700}, +#line 189 "../tests/keys" + {"Total_Number_Members_Missing",184}, +#line 784 "../tests/keys" + {"numberOfBits",779}, + {""}, +#line 1133 "../tests/keys" + {"scaledValueOfEarthMajorAxis",1128}, +#line 1421 "../tests/keys" + {"xCoordinateOfSubSatellitePoint",1416}, + {""}, {""}, {""}, {""}, {""}, +#line 229 "../tests/keys" + {"baseDateEPS",224}, +#line 1357 "../tests/keys" + {"typeOfAuxiliaryInformation",1352}, + {""}, +#line 352 "../tests/keys" + {"dataSubCategory",347}, +#line 190 "../tests/keys" + {"Total_Number_Members_Possible",185}, + {""}, +#line 1314 "../tests/keys" + {"thresholdIndicator",1309}, + {""}, +#line 1192 "../tests/keys" + {"section3Pointer",1187}, + {""}, +#line 850 "../tests/keys" + {"numberOfRadials",845}, +#line 1134 "../tests/keys" + {"scaledValueOfEarthMinorAxis",1129}, +#line 26 "../tests/keys" + {"Dj",21}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 614 "../tests/keys" + {"legBaseDate",609}, +#line 533 "../tests/keys" + {"identificationNumber",528}, +#line 1420 "../tests/keys" + {"xCoordinateOfOriginOfSectorImage",1415}, +#line 1407 "../tests/keys" + {"verticalCoordinate",1402}, + {""}, +#line 1309 "../tests/keys" + {"thisMarsClass",1304}, +#line 851 "../tests/keys" + {"numberOfRemaininChars",846}, +#line 885 "../tests/keys" + {"offsetBeforePL",880}, + {""}, +#line 21 "../tests/keys" + {"Date_E4",16}, +#line 1339 "../tests/keys" + {"totalNumberOfFrequencies",1334}, +#line 738 "../tests/keys" + {"minutesAfterDataCutoff",733}, +#line 1146 "../tests/keys" + {"scaledValueOfUpperLimit",1141}, +#line 1033 "../tests/keys" + {"pressureUnits",1028}, +#line 206 "../tests/keys" + {"accumulationInterval",201}, + {""}, {""}, {""}, {""}, +#line 765 "../tests/keys" + {"normAtFinalTime",760}, +#line 845 "../tests/keys" + {"numberOfPointsAlongXAxis",840}, +#line 598 "../tests/keys" + {"latitudeOfSouthEastCornerOfArea",593}, + {""}, +#line 1408 "../tests/keys" + {"verticalCoordinateDefinition",1403}, +#line 664 "../tests/keys" + {"longitudeOfIcosahedronPole",659}, +#line 693 "../tests/keys" + {"marsForecastMonth",688}, +#line 836 "../tests/keys" + {"numberOfParallelsBetweenAPoleAndTheEquator",831}, + {""}, +#line 1311 "../tests/keys" + {"thisMarsType",1306}, + {""}, {""}, +#line 12 "../tests/keys" + {"BOX",7}, + {""}, {""}, +#line 1325 "../tests/keys" + {"timeIncrementBetweenSuccessiveFields",1320}, + {""}, +#line 169 "../tests/keys" + {"Sub-Experiment_Identifier",164}, + {""}, +#line 807 "../tests/keys" + {"numberOfDataValues",802}, + {""}, +#line 216 "../tests/keys" + {"angleOfRotation",211}, +#line 1125 "../tests/keys" + {"scaleFactorOfStandardDeviation",1120}, +#line 548 "../tests/keys" + {"integerPointValues",543}, + {""}, +#line 291 "../tests/keys" + {"complexPacking",286}, +#line 439 "../tests/keys" + {"extraDimensionPresent",434}, +#line 293 "../tests/keys" + {"computeLaplacianOperator",288}, + {""}, {""}, {""}, {""}, +#line 488 "../tests/keys" + {"grib1divider",483}, + {""}, +#line 612 "../tests/keys" + {"latitudinalDirectionGridLength",607}, +#line 1126 "../tests/keys" + {"scaleFactorOfStandardDeviationInTheCluster",1121}, +#line 627 "../tests/keys" + {"listMembersMissing",622}, + {""}, {""}, {""}, +#line 19 "../tests/keys" + {"Date_E2",14}, + {""}, {""}, {""}, {""}, +#line 716 "../tests/keys" + {"matrixOfValues",711}, +#line 855 "../tests/keys" + {"numberOfSecondOrderPackedValues",850}, +#line 7 "../tests/keys" + {"************_EXPERIMENT_************",2}, +#line 1368 "../tests/keys" + {"typeOfPacking",1363}, +#line 1401 "../tests/keys" + {"validityTime",1396}, +#line 466 "../tests/keys" + {"forecastOrSingularVectorNumber",461}, +#line 329 "../tests/keys" + {"corr4Data",324}, + {""}, +#line 622 "../tests/keys" + {"levelType",617}, + {""}, +#line 846 "../tests/keys" + {"numberOfPointsAlongYAxis",841}, +#line 1174 "../tests/keys" + {"secondsOfReference",1169}, +#line 778 "../tests/keys" + {"numberInMixedCoordinateDefinition",773}, + {""}, {""}, {""}, {""}, {""}, +#line 254 "../tests/keys" + {"centuryOfReference",249}, + {""}, {""}, +#line 1375 "../tests/keys" + {"typeOfTimeIncrement",1370}, + {""}, +#line 266 "../tests/keys" + {"climatologicalRegime",261}, + {""}, {""}, {""}, {""}, +#line 413 "../tests/keys" + {"endMark",408}, +#line 1280 "../tests/keys" + {"streamOfAnalysis",1275}, + {""}, +#line 1224 "../tests/keys" + {"setLocalDefinition",1219}, + {""}, {""}, {""}, +#line 1397 "../tests/keys" + {"upperThreshold",1392}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 358 "../tests/keys" + {"dateOfForecastRun",353}, + {""}, +#line 1095 "../tests/keys" + {"reservedOctet",1090}, + {""}, +#line 218 "../tests/keys" + {"angleOfRotationOfProjection",213}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1389 "../tests/keys" + {"unknown",1384}, + {""}, +#line 327 "../tests/keys" + {"corr2Data",322}, + {""}, {""}, +#line 1191 "../tests/keys" + {"section3Padding",1186}, +#line 217 "../tests/keys" + {"angleOfRotationInDegrees",212}, + {""}, +#line 814 "../tests/keys" + {"numberOfForecastsInEnsemble",809}, + {""}, {""}, {""}, {""}, +#line 1193 "../tests/keys" + {"section4",1188}, + {""}, {""}, {""}, {""}, +#line 570 "../tests/keys" + {"jScansPositively",565}, + {""}, {""}, {""}, {""}, {""}, +#line 1165 "../tests/keys" + {"secondOrderValuesDifferentWidths",1160}, + {""}, +#line 594 "../tests/keys" + {"latitudeOfIcosahedronPole",589}, + {""}, +#line 1053 "../tests/keys" + {"qc",1048}, + {""}, {""}, {""}, {""}, {""}, +#line 1008 "../tests/keys" + {"percentileValue",1003}, + {""}, {""}, {""}, +#line 735 "../tests/keys" + {"minuteOfAnalysis",730}, +#line 859 "../tests/keys" + {"numberOfStepsUsedForClustering",854}, +#line 636 "../tests/keys" + {"listOfEnsembleForecastNumbers",631}, + {""}, +#line 336 "../tests/keys" + {"correction4",331}, + {""}, {""}, +#line 153 "../tests/keys" + {"Original_Parameter_Identifier",148}, + {""}, {""}, {""}, +#line 482 "../tests/keys" + {"generalExtended2ordr",477}, +#line 756 "../tests/keys" + {"n2",751}, + {""}, +#line 823 "../tests/keys" + {"numberOfLocalDefinitions",818}, + {""}, {""}, {""}, +#line 261 "../tests/keys" + {"charValues",256}, + {""}, {""}, {""}, {""}, +#line 615 "../tests/keys" + {"legBaseTime",610}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 985 "../tests/keys" + {"padding_local_7_1",980}, + {""}, {""}, +#line 441 "../tests/keys" + {"extraLocalSectionPresent",436}, + {""}, +#line 554 "../tests/keys" + {"isAccumulation",549}, + {""}, +#line 1061 "../tests/keys" + {"radiusOfTheEarth",1056}, + {""}, +#line 1294 "../tests/keys" + {"subcentreOfAnalysis",1289}, +#line 1342 "../tests/keys" + {"totalNumberOfTubes",1337}, +#line 1153 "../tests/keys" + {"scanningMode7",1148}, + {""}, +#line 1258 "../tests/keys" + {"sphericalHarmonics",1253}, +#line 440 "../tests/keys" + {"extraLocalSectionNumber",435}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 390 "../tests/keys" + {"discipline",385}, + {""}, +#line 1290 "../tests/keys" + {"subLocalDefinitions",1285}, +#line 574 "../tests/keys" + {"keySubtype",569}, + {""}, +#line 783 "../tests/keys" + {"numberOfAnalysis",778}, +#line 269 "../tests/keys" + {"clusterMember10",264}, + {""}, {""}, {""}, {""}, {""}, +#line 886 "../tests/keys" + {"offsetBeforePV",881}, + {""}, {""}, {""}, {""}, +#line 456 "../tests/keys" + {"firstOrderValues",451}, +#line 1151 "../tests/keys" + {"scanningMode5",1146}, + {""}, {""}, {""}, +#line 1289 "../tests/keys" + {"subLocalDefinitionNumber",1284}, +#line 1179 "../tests/keys" + {"section1Flags",1174}, +#line 236 "../tests/keys" + {"bitmap",231}, +#line 1172 "../tests/keys" + {"secondaryMissingValue",1167}, +#line 122 "../tests/keys" + {"Model_Identifier",117}, +#line 909 "../tests/keys" + {"optimisationTime",904}, +#line 1439 "../tests/keys" + {"zero",1434}, + {""}, +#line 1338 "../tests/keys" + {"totalNumberOfForecastProbabilities",1333}, + {""}, +#line 752 "../tests/keys" + {"monthlyVerificationDate",747}, + {""}, +#line 1130 "../tests/keys" + {"scaledFrequencies",1125}, +#line 87 "../tests/keys" + {"Latin1InDegrees",82}, + {""}, {""}, {""}, {""}, +#line 849 "../tests/keys" + {"numberOfRadarSitesUsed",844}, + {""}, {""}, +#line 1255 "../tests/keys" + {"spectralDataRepresentationType",1250}, +#line 237 "../tests/keys" + {"bitmapPresent",232}, + {""}, +#line 1419 "../tests/keys" + {"wrongPadding",1414}, +#line 230 "../tests/keys" + {"baseDateOfThisLeg",225}, + {""}, {""}, {""}, +#line 493 "../tests/keys" + {"gribTablesVersionNo",488}, +#line 332 "../tests/keys" + {"correction2",327}, + {""}, {""}, +#line 1123 "../tests/keys" + {"scaleFactorOfSecondSize",1118}, + {""}, {""}, +#line 1152 "../tests/keys" + {"scanningMode6",1147}, +#line 1137 "../tests/keys" + {"scaledValueOfFirstWavelength",1132}, +#line 156 "../tests/keys" + {"P2",151}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 656 "../tests/keys" + {"longitudeFirstInDegrees",651}, +#line 925 "../tests/keys" + {"packingError",920}, +#line 349 "../tests/keys" + {"dataRepresentationType",344}, + {""}, {""}, +#line 295 "../tests/keys" + {"conceptDir",290}, + {""}, +#line 728 "../tests/keys" + {"messageLength",723}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 272 "../tests/keys" + {"clusterMember4",267}, +#line 205 "../tests/keys" + {"_numberOfValues",200}, +#line 1169 "../tests/keys" + {"secondaryBitmaps",1164}, +#line 1167 "../tests/keys" + {"secondaryBitmap",1162}, + {""}, {""}, {""}, {""}, {""}, +#line 1171 "../tests/keys" + {"secondaryBitmapsSize",1166}, +#line 1168 "../tests/keys" + {"secondaryBitmapPresent",1163}, +#line 1170 "../tests/keys" + {"secondaryBitmapsCount",1165}, +#line 1350 "../tests/keys" + {"tsectionNumber5",1345}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 209 "../tests/keys" + {"additionalFlagPresent",204}, + {""}, +#line 1299 "../tests/keys" + {"swapScanningX",1294}, +#line 133 "../tests/keys" + {"NH",128}, + {""}, +#line 914 "../tests/keys" + {"orientationOfTheGrid",909}, +#line 860 "../tests/keys" + {"numberOfTimeRange",855}, +#line 1214 "../tests/keys" + {"section_4",1209}, +#line 464 "../tests/keys" + {"forecastLeadTime",459}, + {""}, {""}, {""}, {""}, {""}, +#line 890 "../tests/keys" + {"offsetICEFieldsUsed",885}, + {""}, {""}, {""}, +#line 1230 "../tests/keys" + {"significanceOfReferenceTime",1225}, + {""}, +#line 830 "../tests/keys" + {"numberOfObservations",825}, +#line 618 "../tests/keys" + {"lengthOfTimeRange",613}, + {""}, +#line 421 "../tests/keys" + {"energyNorm",416}, +#line 8 "../tests/keys" + {"************_PRODUCT_***************",3}, + {""}, {""}, {""}, +#line 1006 "../tests/keys" + {"pentagonalResolutionParameterK",1001}, + {""}, {""}, +#line 1409 "../tests/keys" + {"waveDomain",1404}, +#line 305 "../tests/keys" + {"coordAveraging0",300}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 867 "../tests/keys" + {"observationDiagnostic",862}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 751 "../tests/keys" + {"monthOfReference",746}, + {""}, {""}, {""}, +#line 642 "../tests/keys" + {"localDefNumberOne",637}, +#line 459 "../tests/keys" + {"flagForIrregularGridCoordinateList",454}, + {""}, +#line 25 "../tests/keys" + {"DiInMetres",20}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1154 "../tests/keys" + {"scanningMode8",1149}, +#line 255 "../tests/keys" + {"centuryOfReferenceTimeOfData",250}, + {""}, +#line 326 "../tests/keys" + {"corr1Data",321}, +#line 174 "../tests/keys" + {"TYPE_CF",169}, +#line 573 "../tests/keys" + {"keyMore",568}, + {""}, {""}, {""}, {""}, {""}, +#line 759 "../tests/keys" + {"nameECMF",754}, + {""}, +#line 788 "../tests/keys" + {"numberOfBytesPerInteger",783}, + {""}, +#line 568 "../tests/keys" + {"jIncrement",563}, + {""}, {""}, {""}, +#line 889 "../tests/keys" + {"offsetFromReferenceOfFirstTime",884}, +#line 178 "../tests/keys" + {"TYPE_OF",173}, +#line 180 "../tests/keys" + {"TYPE_PF",175}, + {""}, {""}, {""}, {""}, {""}, +#line 391 "../tests/keys" + {"distanceFromTubeToEnsembleMean",386}, + {""}, {""}, {""}, +#line 238 "../tests/keys" + {"bitmapSectionPresent",233}, + {""}, {""}, {""}, {""}, {""}, +#line 711 "../tests/keys" + {"mask",706}, + {""}, {""}, {""}, {""}, +#line 921 "../tests/keys" + {"originatingCentreOfAnalysis",916}, + {""}, +#line 1212 "../tests/keys" + {"section_2",1207}, + {""}, +#line 643 "../tests/keys" + {"localDefNumberTwo",638}, +#line 1300 "../tests/keys" + {"swapScanningY",1295}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 419 "../tests/keys" + {"endStepInHours",414}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 871 "../tests/keys" + {"oceanAtmosphereCoupling",866}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1330 "../tests/keys" + {"timeUnitFlag",1325}, + {""}, {""}, {""}, {""}, +#line 368 "../tests/keys" + {"dayOfTheYearDate",363}, + {""}, {""}, {""}, {""}, +#line 339 "../tests/keys" + {"countOfGroupLengths",334}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 32 "../tests/keys" + {"DxInDegrees",27}, +#line 1207 "../tests/keys" + {"sectionLengthLimitForEnsembles",1202}, + {""}, {""}, {""}, +#line 1275 "../tests/keys" + {"stepType",1270}, +#line 315 "../tests/keys" + {"coordinate2Start",310}, + {""}, {""}, {""}, {""}, +#line 915 "../tests/keys" + {"orientationOfTheGridInDegrees",910}, + {""}, {""}, {""}, {""}, +#line 709 "../tests/keys" + {"marsType",704}, + {""}, +#line 772 "../tests/keys" + {"northWestLongitudeOfVerficationArea",767}, + {""}, +#line 354 "../tests/keys" + {"dataType",349}, +#line 1248 "../tests/keys" + {"spaceUnitFlag",1243}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1381 "../tests/keys" + {"unitOfTimeRange",1376}, + {""}, {""}, +#line 1219 "../tests/keys" + {"selectStepTemplateInstant",1214}, + {""}, {""}, +#line 363 "../tests/keys" + {"datumSize",358}, + {""}, {""}, {""}, +#line 1194 "../tests/keys" + {"section4Length",1189}, +#line 870 "../tests/keys" + {"obstype",865}, + {""}, {""}, {""}, +#line 565 "../tests/keys" + {"jDirectionIncrement",560}, + {""}, {""}, {""}, +#line 284 "../tests/keys" + {"codeType",279}, + {""}, {""}, +#line 723 "../tests/keys" + {"md5Section4",718}, +#line 185 "../tests/keys" + {"Time_Range_One_E4",180}, +#line 984 "../tests/keys" + {"padding_local_35",979}, + {""}, {""}, {""}, +#line 412 "../tests/keys" + {"endGridDefinition",407}, +#line 104 "../tests/keys" + {"Local_Number_Members_Used",99}, + {""}, {""}, {""}, {""}, {""}, +#line 28 "../tests/keys" + {"DjInDegrees",23}, + {""}, {""}, {""}, +#line 366 "../tests/keys" + {"dayOfEndOfOverallTimeInterval",361}, + {""}, {""}, {""}, +#line 181 "../tests/keys" + {"Threshold_Or_Distribution_0_no_1_yes",176}, +#line 290 "../tests/keys" + {"commonBlock",285}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1220 "../tests/keys" + {"selectStepTemplateInterval",1215}, +#line 1189 "../tests/keys" + {"section3Flags",1184}, + {""}, {""}, {""}, +#line 220 "../tests/keys" + {"auxiliary",215}, +#line 1183 "../tests/keys" + {"section2Length",1178}, + {""}, +#line 425 "../tests/keys" + {"ensembleSize",420}, + {""}, {""}, +#line 792 "../tests/keys" + {"numberOfClusterHighResolution",787}, +#line 1164 "../tests/keys" + {"secondOrderOfDifferentWidth",1159}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 183 "../tests/keys" + {"Time_Range_One_E2",178}, + {""}, {""}, {""}, {""}, +#line 1118 "../tests/keys" + {"scaleFactorOfLowerLimit",1113}, +#line 490 "../tests/keys" + {"grib2LocalSectionPresent",485}, + {""}, {""}, +#line 892 "../tests/keys" + {"offsetSection1",887}, + {""}, {""}, +#line 501 "../tests/keys" + {"gridType",496}, +#line 309 "../tests/keys" + {"coordAveragingTims",304}, + {""}, {""}, {""}, +#line 489 "../tests/keys" + {"grib2LocalSectionNumber",484}, + {""}, {""}, {""}, +#line 597 "../tests/keys" + {"latitudeOfNorthWestCornerOfArea",592}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 96 "../tests/keys" + {"Local_Number_Members_Missing",91}, + {""}, {""}, {""}, {""}, +#line 149 "../tests/keys" + {"Nx",144}, +#line 60 "../tests/keys" + {"Hour_E4",55}, + {""}, +#line 602 "../tests/keys" + {"latitudeOfStretchingPoleInDegrees",597}, + {""}, +#line 1288 "../tests/keys" + {"subLocalDefinitionLength",1283}, + {""}, {""}, {""}, +#line 100 "../tests/keys" + {"Local_Number_Members_Possible",95}, + {""}, {""}, {""}, {""}, +#line 721 "../tests/keys" + {"md5Section2",716}, + {""}, +#line 359 "../tests/keys" + {"dateOfIceFieldUsed",354}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 279 "../tests/keys" + {"clusterSize",274}, + {""}, {""}, +#line 1121 "../tests/keys" + {"scaleFactorOfRadiusOfSphericalEarth",1116}, + {""}, +#line 292 "../tests/keys" + {"componentIndex",287}, + {""}, +#line 635 "../tests/keys" + {"listOfContributingSpectralBands",630}, + {""}, +#line 771 "../tests/keys" + {"northWestLongitudeOfLPOArea",766}, +#line 136 "../tests/keys" + {"NL",131}, +#line 742 "../tests/keys" + {"missingValueManagement",737}, + {""}, {""}, {""}, +#line 1155 "../tests/keys" + {"scanningModeForOneDiamond",1150}, +#line 43 "../tests/keys" + {"Ensemble_Identifier",38}, + {""}, +#line 20 "../tests/keys" + {"Date_E3",15}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 58 "../tests/keys" + {"Hour_E2",53}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 6 "../tests/keys" + {"************_ENSEMBLE_**************",1}, +#line 36 "../tests/keys" + {"DyInMetres",31}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 631 "../tests/keys" + {"listMembersUsed",626}, + {""}, {""}, {""}, {""}, {""}, +#line 252 "../tests/keys" + {"centreForTable2",247}, + {""}, {""}, {""}, {""}, +#line 1345 "../tests/keys" + {"trueLengthOfLastGroup",1340}, + {""}, +#line 1317 "../tests/keys" + {"tiggeLocalVersion",1312}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 233 "../tests/keys" + {"basicAngleOfTheInitialProductionDomain",228}, +#line 1187 "../tests/keys" + {"section2Used",1182}, + {""}, +#line 328 "../tests/keys" + {"corr3Data",323}, + {""}, {""}, +#line 365 "../tests/keys" + {"dayOfAnalysis",360}, + {""}, {""}, {""}, {""}, {""}, +#line 1005 "../tests/keys" + {"pentagonalResolutionParameterJ",1000}, + {""}, {""}, +#line 163 "../tests/keys" + {"Product_Identifier",158}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 682 "../tests/keys" + {"lowerLimit",677}, + {""}, +#line 145 "../tests/keys" + {"Nj",140}, + {""}, {""}, {""}, {""}, {""}, +#line 1265 "../tests/keys" + {"startStepInHours",1260}, +#line 312 "../tests/keys" + {"coordinate1Start",307}, + {""}, +#line 1021 "../tests/keys" + {"postAuxiliary",1016}, + {""}, +#line 1086 "../tests/keys" + {"referenceValueError",1081}, + {""}, {""}, +#line 1316 "../tests/keys" + {"tiggeLAMName",1311}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1178 "../tests/keys" + {"section1",1173}, + {""}, {""}, {""}, {""}, +#line 1112 "../tests/keys" + {"scaleFactorOfDistanceFromEnsembleMean",1107}, + {""}, +#line 552 "../tests/keys" + {"interpretationOfNumberOfPoints",547}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1251 "../tests/keys" + {"spare2",1246}, + {""}, {""}, {""}, {""}, +#line 786 "../tests/keys" + {"numberOfBytesInLocalDefinition",781}, + {""}, {""}, {""}, {""}, {""}, +#line 485 "../tests/keys" + {"getNumberOfValues",480}, + {""}, {""}, +#line 396 "../tests/keys" + {"dummy1",391}, +#line 330 "../tests/keys" + {"correction1",325}, + {""}, {""}, {""}, {""}, +#line 1331 "../tests/keys" + {"topLevel",1326}, +#line 714 "../tests/keys" + {"masterTablesVersionNumber",709}, +#line 852 "../tests/keys" + {"numberOfRepresentativeMember",847}, +#line 155 "../tests/keys" + {"P1",150}, + {""}, {""}, {""}, {""}, +#line 883 "../tests/keys" + {"offsetBeforeBitmap",878}, + {""}, +#line 1254 "../tests/keys" + {"spectralDataRepresentationMode",1249}, + {""}, +#line 27 "../tests/keys" + {"DjGiven",22}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 588 "../tests/keys" + {"latitudeLastInDegrees",583}, + {""}, {""}, +#line 625 "../tests/keys" + {"levtype",620}, + {""}, {""}, {""}, +#line 1385 "../tests/keys" + {"unitsECMF",1380}, + {""}, {""}, {""}, {""}, {""}, +#line 1180 "../tests/keys" + {"section1Length",1175}, + {""}, {""}, {""}, {""}, +#line 477 "../tests/keys" + {"frequency",472}, + {""}, +#line 89 "../tests/keys" + {"Latin2InDegrees",84}, + {""}, {""}, {""}, +#line 727 "../tests/keys" + {"meaningOfVerticalCoordinate",722}, +#line 362 "../tests/keys" + {"dateSSTFieldUsed",357}, +#line 685 "../tests/keys" + {"mAngleMultiplier",680}, + {""}, +#line 1097 "../tests/keys" + {"resolutionAndComponentFlags",1092}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 761 "../tests/keys" + {"nameOfSecondFixedSurface",756}, + {""}, {""}, {""}, {""}, +#line 348 "../tests/keys" + {"dataRepresentationTemplateNumber",343}, +#line 1406 "../tests/keys" + {"versionNumberOfGribLocalTables",1401}, + {""}, {""}, {""}, {""}, {""}, +#line 1124 "../tests/keys" + {"scaleFactorOfSecondWavelength",1119}, +#line 894 "../tests/keys" + {"offsetSection3",889}, + {""}, {""}, +#line 1363 "../tests/keys" + {"typeOfHorizontalLine",1358}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 514 "../tests/keys" + {"heightPressureEtcOfLevels",509}, + {""}, +#line 666 "../tests/keys" + {"longitudeOfLastGridPointInDegrees",661}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 1122 "../tests/keys" + {"scaleFactorOfSecondFixedSurface",1117}, + {""}, {""}, {""}, {""}, +#line 148 "../tests/keys" + {"Number_Combination_Ensembles_1_none",143}, + {""}, +#line 1208 "../tests/keys" + {"sectionLengthLimitForProbability",1203}, + {""}, {""}, {""}, {""}, +#line 1035 "../tests/keys" + {"primaryMissingValue",1030}, + {""}, {""}, {""}, {""}, {""}, +#line 231 "../tests/keys" + {"baseTimeEPS",226}, + {""}, {""}, +#line 893 "../tests/keys" + {"offsetSection2",888}, + {""}, {""}, +#line 1096 "../tests/keys" + {"resolutionAndComponentFlag",1091}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 538 "../tests/keys" + {"ijDirectionIncrementGiven",533}, + {""}, +#line 1437 "../tests/keys" + {"yearOfEndOfOverallTimeInterval",1432}, +#line 1417 "../tests/keys" + {"widthOfSPD",1412}, +#line 1128 "../tests/keys" + {"scaleValuesBy",1123}, + {""}, {""}, +#line 527 "../tests/keys" + {"iDirectionIncrementGiven",522}, + {""}, {""}, {""}, {""}, {""}, +#line 595 "../tests/keys" + {"latitudeOfLastGridPoint",590}, + {""}, {""}, +#line 817 "../tests/keys" + {"numberOfFrequencies",812}, + {""}, {""}, +#line 600 "../tests/keys" + {"latitudeOfSouthernPoleInDegrees",595}, + {""}, +#line 42 "../tests/keys" + {"Ensemble_Combination_Number",37}, + {""}, {""}, +#line 630 "../tests/keys" + {"listMembersMissing4",625}, +#line 593 "../tests/keys" + {"latitudeOfFirstGridPointInDegrees",588}, + {""}, +#line 226 "../tests/keys" + {"backgroundGeneratingProcessIdentifier",221}, +#line 596 "../tests/keys" + {"latitudeOfLastGridPointInDegrees",591}, + {""}, {""}, {""}, {""}, +#line 528 "../tests/keys" + {"iDirectionIncrementInDegrees",523}, + {""}, +#line 1211 "../tests/keys" + {"section_1",1206}, + {""}, {""}, +#line 1103 "../tests/keys" + {"resolutionAndComponentFlags7",1098}, + {""}, {""}, +#line 523 "../tests/keys" + {"hoursAfterDataCutoff",518}, + {""}, {""}, {""}, {""}, +#line 1367 "../tests/keys" + {"typeOfOriginalFieldValues",1362}, + {""}, {""}, {""}, +#line 582 "../tests/keys" + {"laplacianScalingFactorUnset",577}, + {""}, {""}, {""}, {""}, {""}, +#line 979 "../tests/keys" + {"padding_loc9_1",974}, + {""}, +#line 848 "../tests/keys" + {"numberOfPressureLevelsUsedForClustering",843}, +#line 1411 "../tests/keys" + {"westLongitudeOfCluster",1406}, +#line 319 "../tests/keys" + {"coordinate4Flag",314}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 177 "../tests/keys" + {"TYPE_FX",172}, + {""}, +#line 1221 "../tests/keys" + {"sensitiveAreaDomain",1216}, + {""}, +#line 1055 "../tests/keys" + {"quantile",1050}, +#line 1102 "../tests/keys" + {"resolutionAndComponentFlags6",1097}, +#line 126 "../tests/keys" + {"N2",121}, +#line 628 "../tests/keys" + {"listMembersMissing2",623}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1139 "../tests/keys" + {"scaledValueOfMajorAxisOfOblateSpheroidEarth",1134}, +#line 93 "../tests/keys" + {"Lo2",88}, + {""}, +#line 77 "../tests/keys" + {"La2",72}, + {""}, {""}, {""}, +#line 110 "../tests/keys" + {"Lor2",105}, + {""}, +#line 83 "../tests/keys" + {"Lar2",78}, + {""}, +#line 521 "../tests/keys" + {"hourOfEndOfOverallTimeInterval",516}, + {""}, {""}, {""}, {""}, {""}, +#line 982 "../tests/keys" + {"padding_local1_1",977}, +#line 983 "../tests/keys" + {"padding_local1_31",978}, +#line 544 "../tests/keys" + {"indicatorOfUnitOfTimeRange",539}, +#line 803 "../tests/keys" + {"numberOfDataBinsAlongRadials",798}, + {""}, +#line 1225 "../tests/keys" + {"shapeOfTheEarth",1220}, + {""}, {""}, {""}, {""}, {""}, +#line 314 "../tests/keys" + {"coordinate2Flag",309}, + {""}, +#line 1238 "../tests/keys" + {"skewness",1233}, + {""}, {""}, +#line 518 "../tests/keys" + {"horizontalDimensionProcessed",513}, + {""}, +#line 48 "../tests/keys" + {"Extra_Data_FreeFormat_0_none",43}, +#line 770 "../tests/keys" + {"northWestLatitudeOfVerficationArea",765}, + {""}, +#line 313 "../tests/keys" + {"coordinate2End",308}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 1104 "../tests/keys" + {"resolutionAndComponentFlags8",1099}, +#line 787 "../tests/keys" + {"numberOfBytesOfFreeFormatData",782}, + {""}, {""}, +#line 842 "../tests/keys" + {"numberOfPointsAlongSecondAxis",837}, + {""}, {""}, {""}, +#line 298 "../tests/keys" + {"conceptsMasterDir",293}, + {""}, {""}, +#line 843 "../tests/keys" + {"numberOfPointsAlongTheXAxis",838}, + {""}, {""}, {""}, {""}, +#line 835 "../tests/keys" + {"numberOfPackedValues",830}, +#line 1243 "../tests/keys" + {"southEastLongitudeOfVerficationArea",1238}, + {""}, {""}, +#line 1116 "../tests/keys" + {"scaleFactorOfFirstSize",1111}, + {""}, +#line 1166 "../tests/keys" + {"secondaryBitMap",1161}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 361 "../tests/keys" + {"dateOfSSTFieldUsed",356}, + {""}, {""}, {""}, +#line 978 "../tests/keys" + {"padding_loc7_1",973}, + {""}, +#line 1395 "../tests/keys" + {"updateSequenceNumber",1390}, + {""}, {""}, {""}, {""}, {""}, +#line 263 "../tests/keys" + {"classOfAnalysis",258}, +#line 1298 "../tests/keys" + {"swapScanningLon",1293}, + {""}, {""}, {""}, {""}, +#line 976 "../tests/keys" + {"padding_loc5_1",971}, + {""}, +#line 208 "../tests/keys" + {"addExtraLocalSection",203}, + {""}, {""}, +#line 234 "../tests/keys" + {"binaryScaleFactor",229}, + {""}, {""}, +#line 321 "../tests/keys" + {"coordinate4OfLastGridPoint",316}, +#line 235 "../tests/keys" + {"bitMapIndicator",230}, + {""}, {""}, {""}, {""}, +#line 1007 "../tests/keys" + {"pentagonalResolutionParameterM",1002}, + {""}, +#line 397 "../tests/keys" + {"dummy2",392}, +#line 844 "../tests/keys" + {"numberOfPointsAlongTheYAxis",839}, +#line 1111 "../tests/keys" + {"scaleFactorOfCentralWaveNumber",1106}, + {""}, +#line 977 "../tests/keys" + {"padding_loc6_1",972}, + {""}, +#line 777 "../tests/keys" + {"numberInHorizontalCoordinates",772}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 819 "../tests/keys" + {"numberOfHorizontalPoints",814}, + {""}, +#line 591 "../tests/keys" + {"latitudeOfCentralPointInClusterDomain",586}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1115 "../tests/keys" + {"scaleFactorOfFirstFixedSurface",1110}, + {""}, {""}, +#line 1412 "../tests/keys" + {"westLongitudeOfDomainOfTubing",1407}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1372 "../tests/keys" + {"typeOfSecondFixedSurface",1367}, +#line 780 "../tests/keys" + {"numberInTheGridCoordinateList",775}, + {""}, +#line 720 "../tests/keys" + {"md5Section1",715}, +#line 1190 "../tests/keys" + {"section3Length",1185}, + {""}, {""}, {""}, +#line 223 "../tests/keys" + {"averaging2Flag",218}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 184 "../tests/keys" + {"Time_Range_One_E3",179}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 33 "../tests/keys" + {"DxInMetres",28}, + {""}, {""}, {""}, +#line 232 "../tests/keys" + {"baseTimeOfThisLeg",227}, + {""}, {""}, {""}, {""}, +#line 1039 "../tests/keys" + {"probabilityType",1034}, + {""}, {""}, {""}, +#line 1040 "../tests/keys" + {"probabilityTypeName",1035}, + {""}, {""}, +#line 285 "../tests/keys" + {"codedNumberOfFirstOrderPackedValues",280}, + {""}, {""}, {""}, +#line 1297 "../tests/keys" + {"swapScanningLat",1292}, + {""}, {""}, {""}, +#line 802 "../tests/keys" + {"numberOfCoordinatesValues",797}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 450 "../tests/keys" + {"firstDimensionCoordinateValueDefinition",445}, +#line 1418 "../tests/keys" + {"widthOfWidths",1413}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1113 "../tests/keys" + {"scaleFactorOfEarthMajorAxis",1108}, + {""}, {""}, +#line 1287 "../tests/keys" + {"subLocalDefinition2",1282}, +#line 1242 "../tests/keys" + {"southEastLongitudeOfLPOArea",1237}, + {""}, {""}, {""}, +#line 1414 "../tests/keys" + {"westernLongitudeOfDomain",1409}, + {""}, {""}, {""}, {""}, +#line 161 "../tests/keys" + {"P_TACC",156}, + {""}, {""}, {""}, {""}, +#line 1114 "../tests/keys" + {"scaleFactorOfEarthMinorAxis",1109}, + {""}, {""}, {""}, +#line 29 "../tests/keys" + {"DjInMetres",24}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1163 "../tests/keys" + {"secondOfEndOfOverallTimeInterval",1158}, + {""}, {""}, {""}, {""}, {""}, +#line 59 "../tests/keys" + {"Hour_E3",54}, + {""}, {""}, {""}, +#line 1127 "../tests/keys" + {"scaleFactorOfUpperLimit",1122}, + {""}, +#line 766 "../tests/keys" + {"normAtInitialTime",761}, + {""}, {""}, {""}, {""}, {""}, +#line 1413 "../tests/keys" + {"westernLongitudeOfClusterDomain",1408}, +#line 324 "../tests/keys" + {"coordinateIndexNumber",319}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 516 "../tests/keys" + {"horizontalCoordinateDefinition",511}, + {""}, {""}, {""}, +#line 1364 "../tests/keys" + {"typeOfIntervalForFirstAndSecondSize",1359}, +#line 935 "../tests/keys" + {"padding_grid90_1",930}, + {""}, +#line 736 "../tests/keys" + {"minuteOfEndOfOverallTimeInterval",731}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 517 "../tests/keys" + {"horizontalCoordinateSupplement",512}, + {""}, {""}, {""}, {""}, +#line 311 "../tests/keys" + {"coordinate1Flag",306}, + {""}, +#line 1415 "../tests/keys" + {"widthOfFirstOrderValues",1410}, + {""}, +#line 86 "../tests/keys" + {"Latin1",81}, + {""}, {""}, +#line 1387 "../tests/keys" + {"unitsOfFirstFixedSurface",1382}, + {""}, +#line 980 "../tests/keys" + {"padding_loc9_2",975}, +#line 310 "../tests/keys" + {"coordinate1End",305}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 460 "../tests/keys" + {"flagForNormalOrStaggeredGrid",455}, + {""}, {""}, {""}, {""}, +#line 864 "../tests/keys" + {"numberOfVerticalCoordinateValues",859}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 928 "../tests/keys" + {"padding_grid0_1",923}, + {""}, {""}, {""}, +#line 1328 "../tests/keys" + {"timeRangeIndicator",1323}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 868 "../tests/keys" + {"observationGeneratingProcessIdentifier",863}, + {""}, {""}, {""}, {""}, +#line 757 "../tests/keys" + {"n3",752}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 79 "../tests/keys" + {"LaDInDegrees",74}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 796 "../tests/keys" + {"numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction",791}, +#line 797 "../tests/keys" + {"numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction",792}, +#line 1083 "../tests/keys" + {"referenceReflectivityForEchoTop",1078}, + {""}, {""}, {""}, +#line 650 "../tests/keys" + {"localTablesVersion",645}, + {""}, {""}, {""}, +#line 111 "../tests/keys" + {"Lor2InDegrees",106}, + {""}, +#line 84 "../tests/keys" + {"Lar2InDegrees",79}, +#line 1371 "../tests/keys" + {"typeOfSSTFieldUsed",1366}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1024 "../tests/keys" + {"preBitmapValues",1019}, +#line 651 "../tests/keys" + {"localTablesVersionNumber",646}, + {""}, {""}, {""}, {""}, +#line 435 "../tests/keys" + {"experimentVersionNumber",430}, +#line 211 "../tests/keys" + {"alternativeRowScanning",206}, + {""}, {""}, {""}, {""}, +#line 933 "../tests/keys" + {"padding_grid50_1",928}, + {""}, {""}, {""}, +#line 179 "../tests/keys" + {"TYPE_OR",174}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 302 "../tests/keys" + {"constantAntennaElevationAngle",297}, +#line 1188 "../tests/keys" + {"section3",1183}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 749 "../tests/keys" + {"monthOfAnalysis",744}, +#line 222 "../tests/keys" + {"averaging1Flag",217}, + {""}, {""}, {""}, {""}, {""}, +#line 975 "../tests/keys" + {"padding_loc50_1",970}, +#line 175 "../tests/keys" + {"TYPE_FC",170}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 436 "../tests/keys" + {"experimentVersionNumberOfAnalysis",431}, + {""}, {""}, +#line 334 "../tests/keys" + {"correction3",329}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 1308 "../tests/keys" + {"thisExperimentVersionNumber",1303}, + {""}, {""}, {""}, {""}, {""}, +#line 934 "../tests/keys" + {"padding_grid5_1",929}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 130 "../tests/keys" + {"NC2",125}, + {""}, {""}, {""}, {""}, {""}, +#line 610 "../tests/keys" + {"latitudeWhereDxAndDyAreSpecifiedInDegrees",605}, +#line 268 "../tests/keys" + {"clusterMember1",263}, + {""}, +#line 1286 "../tests/keys" + {"subLocalDefinition1",1281}, + {""}, +#line 609 "../tests/keys" + {"latitudeWhereDxAndDyAreSpecified",604}, + {""}, {""}, +#line 541 "../tests/keys" + {"indicatorOfTypeOfLevel",536}, + {""}, +#line 839 "../tests/keys" + {"numberOfPointsAlongAMeridian",834}, + {""}, {""}, +#line 99 "../tests/keys" + {"Local_Number_Members_Missing_E4",94}, + {""}, {""}, +#line 132 "../tests/keys" + {"NG",127}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1117 "../tests/keys" + {"scaleFactorOfFirstWavelength",1112}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 125 "../tests/keys" + {"N1",120}, + {""}, +#line 478 "../tests/keys" + {"frequencyNumber",473}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 91 "../tests/keys" + {"Lo1",86}, + {""}, +#line 75 "../tests/keys" + {"La1",70}, + {""}, {""}, {""}, +#line 108 "../tests/keys" + {"Lor1",103}, + {""}, +#line 81 "../tests/keys" + {"Lar1",76}, + {""}, {""}, +#line 97 "../tests/keys" + {"Local_Number_Members_Missing_E2",92}, +#line 569 "../tests/keys" + {"jPointsAreConsecutive",564}, + {""}, {""}, {""}, {""}, {""}, +#line 1429 "../tests/keys" + {"yDirectionGridLength",1424}, + {""}, {""}, {""}, +#line 785 "../tests/keys" + {"numberOfBitsContainingEachPackedValue",780}, + {""}, +#line 1398 "../tests/keys" + {"upperThresholdValue",1393}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 176 "../tests/keys" + {"TYPE_FF",171}, +#line 840 "../tests/keys" + {"numberOfPointsAlongAParallel",835}, + {""}, {""}, {""}, {""}, {""}, +#line 170 "../tests/keys" + {"TIDE",165}, + {""}, {""}, {""}, {""}, +#line 38 "../tests/keys" + {"ECMWF_s",33}, + {""}, +#line 1106 "../tests/keys" + {"roundedMarsLevelist",1101}, + {""}, {""}, {""}, +#line 103 "../tests/keys" + {"Local_Number_Members_Possible_E4",98}, + {""}, {""}, {""}, {""}, +#line 629 "../tests/keys" + {"listMembersMissing3",624}, +#line 303 "../tests/keys" + {"constituentType",298}, + {""}, {""}, +#line 1094 "../tests/keys" + {"reservedNeedNotBePresent",1089}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 739 "../tests/keys" + {"minutesAfterReferenceTimeOfDataCutoff",734}, + {""}, {""}, +#line 1213 "../tests/keys" + {"section_3",1208}, + {""}, {""}, {""}, {""}, +#line 1241 "../tests/keys" + {"southEastLatitudeOfVerficationArea",1236}, +#line 117 "../tests/keys" + {"Missing_Model_LBC",112}, + {""}, {""}, {""}, {""}, {""}, +#line 316 "../tests/keys" + {"coordinate3Flag",311}, + {""}, {""}, {""}, +#line 88 "../tests/keys" + {"Latin2",83}, + {""}, +#line 1354 "../tests/keys" + {"twoOrdersOfSPD",1349}, + {""}, +#line 152 "../tests/keys" + {"Original_Parameter_Iden_CodeTable2",147}, +#line 101 "../tests/keys" + {"Local_Number_Members_Possible_E2",96}, + {""}, {""}, {""}, +#line 634 "../tests/keys" + {"listMembersUsed4",629}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 109 "../tests/keys" + {"Lor1InDegrees",104}, + {""}, +#line 82 "../tests/keys" + {"Lar1InDegrees",77}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 854 "../tests/keys" + {"numberOfRows",849}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 853 "../tests/keys" + {"numberOfReservedBytes",848}, + {""}, {""}, +#line 340 "../tests/keys" + {"countOfICEFieldsUsed",335}, + {""}, +#line 507 "../tests/keys" + {"gts_TTAAii",502}, + {""}, {""}, {""}, +#line 1365 "../tests/keys" + {"typeOfIntervalForFirstAndSecondWavelength",1360}, + {""}, {""}, {""}, +#line 632 "../tests/keys" + {"listMembersUsed2",627}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 151 "../tests/keys" + {"Original_CodeTable_2_Version_Number",146}, + {""}, {""}, {""}, {""}, +#line 320 "../tests/keys" + {"coordinate4OfFirstGridPoint",315}, +#line 199 "../tests/keys" + {"XpInGridLengths",194}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1015 "../tests/keys" + {"physicalFlag2",1010}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1416 "../tests/keys" + {"widthOfLengths",1411}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 779 "../tests/keys" + {"numberInTheAuxiliaryArray",774}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 414 "../tests/keys" + {"endOfHeadersMaker",409}, + {""}, {""}, {""}, +#line 62 "../tests/keys" + {"IDSAT",57}, + {""}, +#line 1226 "../tests/keys" + {"shapeOfVerificationArea",1221}, + {""}, {""}, {""}, {""}, {""}, +#line 318 "../tests/keys" + {"coordinate3OfLastGridPoint",313}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 202 "../tests/keys" + {"YpInGridLengths",197}, + {""}, {""}, {""}, +#line 479 "../tests/keys" + {"frequencyScalingFactor",474}, +#line 271 "../tests/keys" + {"clusterMember3",266}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 1249 "../tests/keys" + {"spacingOfBinsAlongRadials",1244}, + {""}, {""}, +#line 967 "../tests/keys" + {"padding_loc29_2",962}, + {""}, {""}, {""}, {""}, {""}, +#line 566 "../tests/keys" + {"jDirectionIncrementGiven",561}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 958 "../tests/keys" + {"padding_loc244_2",953}, + {""}, {""}, {""}, {""}, {""}, +#line 1101 "../tests/keys" + {"resolutionAndComponentFlags4",1096}, + {""}, +#line 46 "../tests/keys" + {"Ensemble_Identifier_E4",41}, +#line 722 "../tests/keys" + {"md5Section3",717}, + {""}, {""}, +#line 270 "../tests/keys" + {"clusterMember2",265}, + {""}, +#line 1222 "../tests/keys" + {"setBitsPerValue",1217}, + {""}, {""}, +#line 753 "../tests/keys" + {"multiplicationFactorForLatLong",748}, + {""}, +#line 567 "../tests/keys" + {"jDirectionIncrementInDegrees",562}, +#line 961 "../tests/keys" + {"padding_loc245_2",956}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1276 "../tests/keys" + {"stepTypeInternal",1271}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 769 "../tests/keys" + {"northWestLatitudeOfLPOArea",764}, + {""}, {""}, {""}, {""}, {""}, +#line 683 "../tests/keys" + {"lowerThreshold",678}, +#line 116 "../tests/keys" + {"Minute_E4",111}, + {""}, {""}, +#line 458 "../tests/keys" + {"flagForAnyFurtherInformation",453}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1099 "../tests/keys" + {"resolutionAndComponentFlags2",1094}, + {""}, +#line 44 "../tests/keys" + {"Ensemble_Identifier_E2",39}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 207 "../tests/keys" + {"accuracyMultipliedByFactor",202}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 991 "../tests/keys" + {"padding_sec4_1",986}, + {""}, +#line 1150 "../tests/keys" + {"scanningMode4",1145}, + {""}, {""}, {""}, {""}, {""}, +#line 964 "../tests/keys" + {"padding_loc27_2",959}, + {""}, {""}, {""}, {""}, {""}, +#line 140 "../tests/keys" + {"NV",135}, + {""}, {""}, {""}, {""}, {""}, +#line 389 "../tests/keys" + {"disableGrib1LocalSection",384}, + {""}, {""}, {""}, +#line 94 "../tests/keys" + {"LoV",89}, + {""}, {""}, {""}, {""}, {""}, +#line 212 "../tests/keys" + {"altitudeOfTheCameraFromTheEarthSCenterMeasuredInUnitsOfTheEarth",207}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 37 "../tests/keys" + {"ECMWF",32}, + {""}, {""}, +#line 987 "../tests/keys" + {"padding_sec2_1",982}, +#line 873 "../tests/keys" + {"octetAtWichPackedDataBegins",868}, + {""}, {""}, {""}, {""}, {""}, +#line 114 "../tests/keys" + {"Minute_E2",109}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 1430 "../tests/keys" + {"yDirectionGridLengthInMetres",1425}, + {""}, {""}, +#line 1405 "../tests/keys" + {"verifyingMonth",1400}, + {""}, {""}, {""}, +#line 1349 "../tests/keys" + {"tsectionNumber4",1344}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 969 "../tests/keys" + {"padding_loc2_1",964}, + {""}, {""}, +#line 562 "../tests/keys" + {"isectionNumber4",557}, + {""}, {""}, {""}, +#line 1054 "../tests/keys" + {"qualityControlIndicator",1049}, +#line 994 "../tests/keys" + {"paramIdECMF",989}, + {""}, {""}, +#line 950 "../tests/keys" + {"padding_loc191_2",945}, + {""}, {""}, +#line 182 "../tests/keys" + {"Threshold_Or_Distribution_Units",177}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 129 "../tests/keys" + {"NC1",124}, + {""}, {""}, {""}, +#line 1394 "../tests/keys" + {"unusedBitsInBitmap",1389}, + {""}, {""}, {""}, {""}, +#line 750 "../tests/keys" + {"monthOfEndOfOverallTimeInterval",745}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1431 "../tests/keys" + {"yDirectionGridLengthInMillimetres",1426}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1023 "../tests/keys" + {"powerOfTenUsedToScaleClimateWeight",1018}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 953 "../tests/keys" + {"padding_loc19_2",948}, + {""}, +#line 1173 "../tests/keys" + {"secondsOfAnalysis",1168}, + {""}, {""}, {""}, {""}, +#line 1422 "../tests/keys" + {"xDirectionGridLength",1417}, + {""}, +#line 253 "../tests/keys" + {"centuryOfAnalysis",248}, + {""}, {""}, {""}, +#line 957 "../tests/keys" + {"padding_loc244_1",952}, + {""}, {""}, {""}, {""}, {""}, +#line 296 "../tests/keys" + {"conceptsLocalDirAll",291}, + {""}, {""}, {""}, {""}, +#line 1028 "../tests/keys" + {"precisionOfTheUnpackedSubset",1023}, + {""}, {""}, +#line 930 "../tests/keys" + {"padding_grid1_2",925}, +#line 461 "../tests/keys" + {"flagShowingPostAuxiliaryArrayInUse",456}, +#line 11 "../tests/keys" + {"At_least__Or_Distribut_Proportion_Of",6}, + {""}, +#line 560 "../tests/keys" + {"isectionNumber2",555}, + {""}, +#line 960 "../tests/keys" + {"padding_loc245_1",955}, + {""}, {""}, +#line 575 "../tests/keys" + {"keyType",570}, + {""}, {""}, {""}, +#line 1022 "../tests/keys" + {"postAuxiliaryArrayPresent",1017}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 981 "../tests/keys" + {"padding_local11_1",976}, + {""}, +#line 841 "../tests/keys" + {"numberOfPointsAlongFirstAxis",836}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 1098 "../tests/keys" + {"resolutionAndComponentFlags1",1093}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 98 "../tests/keys" + {"Local_Number_Members_Missing_E3",93}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 173 "../tests/keys" + {"TYPE_AN",168}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 945 "../tests/keys" + {"padding_loc17_2",940}, +#line 1147 "../tests/keys" + {"scalingFactorForFrequencies",1142}, + {""}, {""}, {""}, {""}, +#line 1228 "../tests/keys" + {"shortNameECMF",1223}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 41 "../tests/keys" + {"Ensemble_Combinat_Number_0_none_E4",36}, + {""}, {""}, +#line 323 "../tests/keys" + {"coordinateFlag2",318}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 137 "../tests/keys" + {"NR",132}, + {""}, {""}, +#line 1373 "../tests/keys" + {"typeOfSizeInterval",1368}, + {""}, {""}, +#line 989 "../tests/keys" + {"padding_sec2_3",984}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 102 "../tests/keys" + {"Local_Number_Members_Possible_E3",97}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 39 "../tests/keys" + {"Ensemble_Combinat_Number_0_none_E2",34}, + {""}, +#line 524 "../tests/keys" + {"hoursAfterReferenceTimeOfDataCutoff",519}, +#line 127 "../tests/keys" + {"NB",122}, +#line 1399 "../tests/keys" + {"uvRelativeToGrid",1394}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1014 "../tests/keys" + {"physicalFlag1",1009}, + {""}, +#line 1119 "../tests/keys" + {"scaleFactorOfMajorAxisOfOblateSpheroidEarth",1114}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 947 "../tests/keys" + {"padding_loc18_2",942}, + {""}, {""}, {""}, +#line 949 "../tests/keys" + {"padding_loc191_1",944}, +#line 188 "../tests/keys" + {"Time_Range_Two_E4",183}, +#line 974 "../tests/keys" + {"padding_loc4_2",969}, + {""}, {""}, {""}, +#line 1120 "../tests/keys" + {"scaleFactorOfMinorAxisOfOblateSpheroidEarth",1115}, +#line 988 "../tests/keys" + {"padding_sec2_2",983}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 542 "../tests/keys" + {"indicatorOfUnitForTimeIncrement",537}, +#line 633 "../tests/keys" + {"listMembersUsed3",628}, + {""}, {""}, +#line 455 "../tests/keys" + {"firstMonthUsedToBuildClimateMonth2",450}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 932 "../tests/keys" + {"padding_grid4_1",927}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1274 "../tests/keys" + {"stepRangeInHours",1269}, + {""}, {""}, {""}, +#line 186 "../tests/keys" + {"Time_Range_Two_E2",181}, +#line 970 "../tests/keys" + {"padding_loc2_2",965}, + {""}, {""}, +#line 954 "../tests/keys" + {"padding_loc20_1",949}, + {""}, {""}, {""}, {""}, {""}, +#line 966 "../tests/keys" + {"padding_loc29_1",961}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 900 "../tests/keys" + {"offsetValuesBy",895}, + {""}, {""}, {""}, +#line 47 "../tests/keys" + {"Experiment_Identifier",42}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 317 "../tests/keys" + {"coordinate3OfFirstGridPoint",312}, + {""}, {""}, {""}, +#line 510 "../tests/keys" + {"halfByte",505}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 138 "../tests/keys" + {"NRj",133}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 307 "../tests/keys" + {"coordAveraging2",302}, + {""}, +#line 972 "../tests/keys" + {"padding_loc30_2",967}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 959 "../tests/keys" + {"padding_loc244_3",954}, + {""}, {""}, +#line 107 "../tests/keys" + {"Local_Number_Members_Used_E4",102}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 1240 "../tests/keys" + {"southEastLatitudeOfLPOArea",1235}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 963 "../tests/keys" + {"padding_loc27_1",958}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1093 "../tests/keys" + {"reserved1",1088}, + {""}, +#line 105 "../tests/keys" + {"Local_Number_Members_Used_E2",100}, + {""}, {""}, +#line 1100 "../tests/keys" + {"resolutionAndComponentFlags3",1095}, + {""}, +#line 45 "../tests/keys" + {"Ensemble_Identifier_E3",40}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 962 "../tests/keys" + {"padding_loc26_1",957}, + {""}, {""}, {""}, {""}, +#line 1423 "../tests/keys" + {"xDirectionGridLengthInMetres",1418}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 123 "../tests/keys" + {"Model_LBC_Member_Identifier",118}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 160 "../tests/keys" + {"P_INST",155}, + {""}, {""}, {""}, +#line 869 "../tests/keys" + {"observationType",864}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 697 "../tests/keys" + {"marsKeywords1",692}, +#line 965 "../tests/keys" + {"padding_loc28_1",960}, + {""}, {""}, {""}, +#line 948 "../tests/keys" + {"padding_loc190_1",943}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 990 "../tests/keys" + {"padding_sec3_1",985}, + {""}, {""}, {""}, +#line 1424 "../tests/keys" + {"xDirectionGridLengthInMillimetres",1419}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 454 "../tests/keys" + {"firstMonthUsedToBuildClimateMonth1",449}, + {""}, {""}, {""}, +#line 92 "../tests/keys" + {"Lo1InDegrees",87}, + {""}, +#line 76 "../tests/keys" + {"La1InDegrees",71}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 973 "../tests/keys" + {"padding_loc3_1",968}, + {""}, {""}, +#line 936 "../tests/keys" + {"padding_loc10_1",931}, + {""}, {""}, {""}, {""}, {""}, +#line 543 "../tests/keys" + {"indicatorOfUnitForTimeRange",538}, + {""}, +#line 951 "../tests/keys" + {"padding_loc191_3",946}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 929 "../tests/keys" + {"padding_grid1_1",924}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 240 "../tests/keys" + {"bitsPerValueAndRepack",235}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 18 "../tests/keys" + {"DELETE",13}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 1237 "../tests/keys" + {"skew",1232}, + {""}, {""}, {""}, {""}, +#line 943 "../tests/keys" + {"padding_loc15_1",938}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 322 "../tests/keys" + {"coordinateFlag1",317}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 944 "../tests/keys" + {"padding_loc16_1",939}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 95 "../tests/keys" + {"LoVInDegrees",90}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 946 "../tests/keys" + {"padding_loc18_1",941}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 40 "../tests/keys" + {"Ensemble_Combinat_Number_0_none_E3",35}, + {""}, +#line 9 "../tests/keys" + {"*********_EXTRA_DATA_***************",4}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 952 "../tests/keys" + {"padding_loc192_1",947}, + {""}, +#line 90 "../tests/keys" + {"Less_Than_Or_To_Overall_Distribution",85}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 187 "../tests/keys" + {"Time_Range_Two_E3",182}, + {""}, +#line 306 "../tests/keys" + {"coordAveraging1",301}, + {""}, +#line 971 "../tests/keys" + {"padding_loc30_1",966}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 931 "../tests/keys" + {"padding_grid3_1",926}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 968 "../tests/keys" + {"padding_loc29_3",963}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 61 "../tests/keys" + {"ICEFieldsUsed",56}, + {""}, {""}, +#line 942 "../tests/keys" + {"padding_loc14_2",937}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 168 "../tests/keys" + {"Show_Combination_Ensem_E4_0_no_1_yes",163}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 106 "../tests/keys" + {"Local_Number_Members_Used_E3",101}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 166 "../tests/keys" + {"Show_Combination_Ensem_E2_0_no_1_yes",161}, +#line 120 "../tests/keys" + {"Missing_Model_LBC_E4",115}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 862 "../tests/keys" + {"numberOfUnusedBitsAtEndOfSection3",857}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 115 "../tests/keys" + {"Minute_E3",110}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 118 "../tests/keys" + {"Missing_Model_LBC_E2",113}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 1329 "../tests/keys" + {"timeRangeIndicatorFromStepRange",1324}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 1348 "../tests/keys" + {"tsectionNumber3",1343}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 297 "../tests/keys" + {"conceptsLocalDirECMF",292}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 561 "../tests/keys" + {"isectionNumber3",556}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 684 "../tests/keys" + {"lowerThresholdValue",679}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 553 "../tests/keys" + {"intervalBetweenTimes",548}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 71 "../tests/keys" + {"LBC_Initial_Conditions",66}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 135 "../tests/keys" + {"NINT_RITZ_EXP",130}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 584 "../tests/keys" + {"lastMonthUsedToBuildClimateMonth2",579}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 15 "../tests/keys" + {"BUFRstr",10}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1295 "../tests/keys" + {"subdivisionsOfBasicAngle",1290}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 941 "../tests/keys" + {"padding_loc14_1",936}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 940 "../tests/keys" + {"padding_loc13_4",935}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 308 "../tests/keys" + {"coordAveraging3",303}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 955 "../tests/keys" + {"padding_loc21_1",950}, + {""}, +#line 162 "../tests/keys" + {"P_TAVG",157}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 938 "../tests/keys" + {"padding_loc13_2",933}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 167 "../tests/keys" + {"Show_Combination_Ensem_E3_0_no_1_yes",162}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 583 "../tests/keys" + {"lastMonthUsedToBuildClimateMonth1",578}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 147 "../tests/keys" + {"NrInRadiusOfEarth",142}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 1376 "../tests/keys" + {"typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing",1371}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 13 "../tests/keys" + {"BUDG",8}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 956 "../tests/keys" + {"padding_loc23_1",951}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 192 "../tests/keys" + {"Used_Model_LBC",187}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 937 "../tests/keys" + {"padding_loc13_1",932}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 119 "../tests/keys" + {"Missing_Model_LBC_E3",114}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 131 "../tests/keys" + {"NEAREST",126}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1410 "../tests/keys" + {"weightAppliedToClimateMonth1",1405}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 195 "../tests/keys" + {"Used_Model_LBC_E4",190}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 193 "../tests/keys" + {"Used_Model_LBC_E2",188}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 939 "../tests/keys" + {"padding_loc13_3",934}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 14 "../tests/keys" + {"BUFR",9}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 194 "../tests/keys" + {"Used_Model_LBC_E3",189}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, +#line 1236 "../tests/keys" + {"sizeOfPostAuxiliaryArrayPlusOne",1231}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 68 "../tests/keys" + {"LATITUDE",63}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 51 "../tests/keys" + {"GRIB",46}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 1235 "../tests/keys" + {"sizeOfPostAuxiliaryArray",1230}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 54 "../tests/keys" + {"GRIBEditionNumber",49}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 72 "../tests/keys" + {"LONGITUDE",67}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 52 "../tests/keys" + {"GRIBEXSection1Problem",47}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 70 "../tests/keys" + {"LATITUDE2",65}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 55 "../tests/keys" + {"GRIB_DEPTH",50}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 74 "../tests/keys" + {"LONGITUDE2",69}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 69 "../tests/keys" + {"LATITUDE1",64}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 53 "../tests/keys" + {"GRIBEXShBugPresent",48}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 73 "../tests/keys" + {"LONGITUDE1",68}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 63 "../tests/keys" + {"ITERATOR",58}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 134 "../tests/keys" + {"NINT_LOG10_RITZ",129}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 56 "../tests/keys" + {"GRIB_LATITUDE",51}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 57 "../tests/keys" + {"GRIB_LONGITUDE",52} + }; + +#ifdef __GNUC__ + +#endif +struct grib_keys_hash * +grib_keys_hash_get (str, len) + register const char *str; + register unsigned int len; +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = hash_keys (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register const char *s = wordlist[key].name; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &wordlist[key]; + } + } + return 0; +} +/** + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +*/ + +/************************************** + * Enrico Fucile + **************************************/ + +static int mapping[] = { +0, /* 00 */ +0, /* 01 */ +0, /* 02 */ +0, /* 03 */ +0, /* 04 */ +0, /* 05 */ +0, /* 06 */ +0, /* 07 */ +0, /* 08 */ +0, /* 09 */ +0, /* 0a */ +0, /* 0b */ +0, /* 0c */ +0, /* 0d */ +0, /* 0e */ +0, /* 0f */ +0, /* 10 */ +0, /* 11 */ +0, /* 12 */ +0, /* 13 */ +0, /* 14 */ +0, /* 15 */ +0, /* 16 */ +0, /* 17 */ +0, /* 18 */ +0, /* 19 */ +0, /* 1a */ +0, /* 1b */ +0, /* 1c */ +0, /* 1d */ +0, /* 1e */ +0, /* 1f */ +0, /* 20 */ +0, /* 21 */ +0, /* 22 */ +0, /* 23 */ +0, /* 24 */ +0, /* 25 */ +0, /* 26 */ +0, /* 27 */ +0, /* 28 */ +0, /* 29 */ +0, /* 2a */ +0, /* 2b */ +0, /* 2c */ +0, /* 2d */ +38, /* . */ +39, /* / */ +1, /* 0 */ +2, /* 1 */ +3, /* 2 */ +4, /* 3 */ +5, /* 4 */ +6, /* 5 */ +7, /* 6 */ +8, /* 7 */ +9, /* 8 */ +10, /* 9 */ +0, /* 3a */ +0, /* 3b */ +0, /* 3c */ +0, /* 3d */ +0, /* 3e */ +0, /* 3f */ +0, /* 40 */ +11, /* A */ +12, /* B */ +13, /* C */ +14, /* D */ +15, /* E */ +16, /* F */ +17, /* G */ +18, /* H */ +19, /* I */ +20, /* J */ +21, /* K */ +22, /* L */ +23, /* M */ +24, /* N */ +25, /* O */ +26, /* P */ +27, /* Q */ +28, /* R */ +29, /* S */ +30, /* T */ +31, /* U */ +32, /* V */ +33, /* W */ +34, /* X */ +35, /* Y */ +36, /* Z */ +0, /* 5b */ +0, /* 5c */ +0, /* 5d */ +0, /* 5e */ +37, /* _ */ +0, /* 60 */ +38, /* a */ +39, /* b */ +40, /* c */ +41, /* d */ +42, /* e */ +43, /* f */ +44, /* g */ +45, /* h */ +46, /* i */ +47, /* j */ +48, /* k */ +49, /* l */ +50, /* m */ +51, /* n */ +52, /* o */ +53, /* p */ +54, /* q */ +55, /* r */ +56, /* s */ +57, /* t */ +58, /* u */ +59, /* v */ +60, /* w */ +61, /* x */ +62, /* y */ +63, /* z */ +0, /* 7b */ +0, /* 7c */ +0, /* 7d */ +0, /* 7e */ +0, /* 7f */ +0, /* 80 */ +0, /* 81 */ +0, /* 82 */ +0, /* 83 */ +0, /* 84 */ +0, /* 85 */ +0, /* 86 */ +0, /* 87 */ +0, /* 88 */ +0, /* 89 */ +0, /* 8a */ +0, /* 8b */ +0, /* 8c */ +0, /* 8d */ +0, /* 8e */ +0, /* 8f */ +0, /* 90 */ +0, /* 91 */ +0, /* 92 */ +0, /* 93 */ +0, /* 94 */ +0, /* 95 */ +0, /* 96 */ +0, /* 97 */ +0, /* 98 */ +0, /* 99 */ +0, /* 9a */ +0, /* 9b */ +0, /* 9c */ +0, /* 9d */ +0, /* 9e */ +0, /* 9f */ +0, /* a0 */ +0, /* a1 */ +0, /* a2 */ +0, /* a3 */ +0, /* a4 */ +0, /* a5 */ +0, /* a6 */ +0, /* a7 */ +0, /* a8 */ +0, /* a9 */ +0, /* aa */ +0, /* ab */ +0, /* ac */ +0, /* ad */ +0, /* ae */ +0, /* af */ +0, /* b0 */ +0, /* b1 */ +0, /* b2 */ +0, /* b3 */ +0, /* b4 */ +0, /* b5 */ +0, /* b6 */ +0, /* b7 */ +0, /* b8 */ +0, /* b9 */ +0, /* ba */ +0, /* bb */ +0, /* bc */ +0, /* bd */ +0, /* be */ +0, /* bf */ +0, /* c0 */ +0, /* c1 */ +0, /* c2 */ +0, /* c3 */ +0, /* c4 */ +0, /* c5 */ +0, /* c6 */ +0, /* c7 */ +0, /* c8 */ +0, /* c9 */ +0, /* ca */ +0, /* cb */ +0, /* cc */ +0, /* cd */ +0, /* ce */ +0, /* cf */ +0, /* d0 */ +0, /* d1 */ +0, /* d2 */ +0, /* d3 */ +0, /* d4 */ +0, /* d5 */ +0, /* d6 */ +0, /* d7 */ +0, /* d8 */ +0, /* d9 */ +0, /* da */ +0, /* db */ +0, /* dc */ +0, /* dd */ +0, /* de */ +0, /* df */ +0, /* e0 */ +0, /* e1 */ +0, /* e2 */ +0, /* e3 */ +0, /* e4 */ +0, /* e5 */ +0, /* e6 */ +0, /* e7 */ +0, /* e8 */ +0, /* e9 */ +0, /* ea */ +0, /* eb */ +0, /* ec */ +0, /* ed */ +0, /* ee */ +0, /* ef */ +0, /* f0 */ +0, /* f1 */ +0, /* f2 */ +0, /* f3 */ +0, /* f4 */ +0, /* f5 */ +0, /* f6 */ +0, /* f7 */ +0, /* f8 */ +0, /* f9 */ +0, /* fa */ +0, /* fb */ +0, /* fc */ +0, /* fd */ +0, /* fe */ +0, /* ff */ +}; + +#define SIZE 64 + +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + +static void init() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex,&attr); + pthread_mutexattr_destroy(&attr); + +} +#endif +struct grib_itrie { + grib_itrie* next[SIZE]; + grib_context *context; + int id; + int* count; +}; + + +grib_itrie *grib_hash_keys_new(grib_context* c,int* count) { + grib_itrie* t = grib_context_malloc_clear(c,sizeof(grib_itrie)); + t->context = c; + t->id=-1; + t->count=count; + return t; +} + +void grib_hash_keys_delete(grib_itrie *t) { + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&mutex) + + if(t) { + int i; + for(i = 0; i <= SIZE; i++) + if (t->next[i]) + grib_hash_keys_delete(t->next[i]); + + grib_context_free(t->context,t); + + } + + GRIB_MUTEX_UNLOCK(&mutex) +} + +int grib_hash_keys_get_id(grib_itrie* t,const char* key) +{ + const char *k=key; + grib_itrie* last=t; + + struct grib_keys_hash* hash=grib_keys_hash_get(key,strlen(key)); + + if (hash) { + /* printf("%s found %s (%d)\n",key,hash->name,hash->id); */ + return hash->id; + } + + /* printf("+++ \"%s\"\n",key); */ + + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&mutex) + + while(*k && t) t = t->next[mapping[(int)*k++]]; + + if(t != NULL && t->id != -1) { + GRIB_MUTEX_UNLOCK(&mutex) + return t->id+TOTAL_KEYWORDS+1; + } else { + int ret=grib_hash_keys_insert(last,key); + GRIB_MUTEX_UNLOCK(&mutex) + return ret+TOTAL_KEYWORDS+1; + } +} + +int grib_hash_keys_insert(grib_itrie* t,const char* key) +{ + const char *k = key; + grib_itrie *last = t; + int* count; + + GRIB_PTHREAD_ONCE(&once,&init) + + GRIB_MUTEX_LOCK(&mutex) + + count=t->count; + + while(*k && t) { + last = t; + t = t->next[mapping[(int)*k]]; + if(t) k++; + } + + if (*k!=0) { + t=last; + while(*k) { + int j = mapping[(int)*k++]; + t->next[j] = grib_hash_keys_new(t->context,count); + t = t->next[j]; + } + } + if (*(t->count)+TOTAL_KEYWORDS < ACCESSORS_ARRAY_SIZE) { + t->id=*(t->count); + (*(t->count))++; + } else { + grib_context_log(t->context,GRIB_LOG_ERROR, + "grib_hash_keys_get_id: too many accessors, increase ACCESSORS_ARRAY_SIZE\n"); + Assert(*(t->count)+TOTAL_KEYWORDS < ACCESSORS_ARRAY_SIZE); + } + + GRIB_MUTEX_UNLOCK(&mutex) + + /*printf("grib_hash_keys_get_id: %s -> %d\n",key,t->id);*/ + + return t->id; +} + +int grib_hash_keys_get_size(grib_itrie* t) {return *(t->count);} + diff --git a/src/grib_header_compute.c b/src/grib_header_compute.c new file mode 100644 index 000000000..32ba04cf0 --- /dev/null +++ b/src/grib_header_compute.c @@ -0,0 +1,463 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + + +/* + + Author: B.Raoult + Modified by Enrico Fucile + +*/ + + +#include "grib_api_internal.h" +#include +#include +#include +#include +#include + +#if 0 +GRIB_INLINE static int strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} +#endif + +#define SIZE ((int)4097) +#ifndef NUMBER +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) /* number of elem. of an array */ +#endif +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif +#ifndef MIN +#define MIN(a,b) (((a)<(b))?(a):(b)) +#endif +#define ABS(a) ((a)<0?-(a):(a)) +#define ROUND(a) ((long)((a)+0.5)) +#define EQ(a,b) ((*(a) == *(b)) && (strcmp(a,b) == 0)) +#define LT(a,b) ((*(a) < *(b)) || (strcmp(a,b) < 0)) + + +static grib_math *readpower(grib_context* c,char** form,int *err); +static grib_math *readatom(grib_context* c,char** form,int *err); +static grib_math *readfactor(grib_context* c,char** form,int *err); +static grib_math *readterm(grib_context* c,char** form,int *err); +static grib_math *readtest(grib_context* c,char** form,int *err); +static grib_math *readlist(grib_context* c,char** form,int* n,int *err); +static grib_math *readand(grib_context* c,char** form,int* err); +static grib_math *reador(grib_context* c,char** form,int* err); +static void advance(char** form); +static char *opname(char *p,int n); +/* +static long op_eq(long a, long b) {return a == b;} +static long op_ne(long a, long b) {return a != b;} +static long op_lt(long a, long b) {return a < b;} +static long op_gt(long a, long b) {return a > b;} +static long op_and(long a, long b) {return a && b;} +static long op_or(long a, long b) {return a || b;} +static long op_ge(long a, long b) {return a >= b;} +static long op_le(long a, long b) {return a <= b;} + +static long op_bit(long a, long b) {return a&(1< b;} +static double op_ge_d(double a, double b) {return a >= b;} +static double op_le_d(double a, double b) {return a <= b;} + +static int op_eq_string(char* a,char* b) { + if (a && b) return strcmp(a,b) == 0 ? 1 : 0; + return 0; +} +static int op_ne_string(char* a,char* b) { + if (a && b) return strcmp(a,b) == 0 ? 0 : 1; + return 0; +} +static int op_lt_string(char* a,char* b) { + if (a && b) return strcmp(a,b) < 0 ? 1 : 0; + return 0; +} +static int op_gt_string(char* a,char* b) { + if (a && b) return strcmp(a,b) > 0 ? 1 : 0; + return 0; +} +static int op_ge_string(char* a,char* b) { + if (a && b) return strcmp(a,b) >= 0 ? 1 : 0; + return 0; +} +static int op_le_string(char* a,char* b) { + if (a && b) return strcmp(a,b) <= 0 ? 1 : 0; + return 0; +} +*/ + +typedef double real; +typedef int boolean; +typedef int err; +typedef real (*fop1)(real); +typedef real (*fop2)(real,real); + + +static void advance(char** form) { + (*form)++; + while(isspace(**form)) (*form)++; +} + +static grib_math *readatom(grib_context* c,char** form,int *err) { + grib_math *p; + int i; + char buf[1024]; + + switch(**form) + { + case '(': + advance(form); + p = reador(c,form,err); + if(**form != ')') { + grib_context_log(c, GRIB_LOG_ERROR,"Formula: missing )"); + *err = GRIB_INTERNAL_ERROR; + } + advance(form); + break; + + case '-': + p = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + p->arity = 1; + p->name = strdup("neg"); + advance(form); + p->left = readatom(c,form,err); + break; + + case '!': + p = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + p->arity = 1; + p->name = strdup("neg"); + advance(form); + p->left = readatom(c,form,err); + break; + + case '\0': + grib_context_log(c, GRIB_LOG_ERROR,"Formula: syntax error"); + *err = GRIB_INTERNAL_ERROR; + return NULL; + /*NOTREACHED*/ + break; + + default: + i = 0; + + if(**form == '\'' || **form == '"') + { + char c = *((*form)++); + while(**form && **form != c) + buf[i++] = *((*form)++); + if(**form) (*form)++; + } else + while(isalpha(**form)||isdigit(**form) + || **form =='.' || **form == '_') + buf[i++] = *((*form)++); + + buf[i] = 0; + if(isspace(**form)) advance(form); + + p = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + p->name = strdup(buf); + p->left=0; + + switch(**form) + { + case '(': + advance(form); + p->arity = 0; + p->left = readlist(c,form,&p->arity,err); + if(**form != ')') + { + grib_context_log(c, GRIB_LOG_ERROR,"Formula: missing )"); + *err = GRIB_INTERNAL_ERROR; + } + advance(form); + break; + + case '[': + advance(form); + p->arity = 0; + p->left = readlist(c,form,&p->arity,err); + if(**form != ']') { + grib_context_log(c, GRIB_LOG_ERROR,"Formula: missing ]"); + *err = GRIB_INTERNAL_ERROR; + } + p->arity = -p->arity; + advance(form); + break; + + default: + p->arity = 0; + break; + } + + break; + } + + return p; +} + +static char *opname(char *p,int n) +{ + char buf[5]; + strncpy(buf,p,n); + buf[n] = 0; + return strdup(buf); +} + +void print_math(grib_math *m) +{ + if(m) + { + putchar('('); + print_math(m->left); + printf("%s",m->name); + print_math(m->right); + putchar(')'); + } +} + +static grib_math *readpower(grib_context* c,char** form,int *err) +{ + grib_math *p = readatom(c,form,err); + + + while(**form == '^' || (**form == '*' && *(*form + 1) == '*') ) + { + grib_math *q = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + q->left = p; + q->arity = 2; + + if(**form == '*') { advance(form); **form = '^'; } + + q->name = opname(*form,1); + advance(form); + q->right = readatom(c,form,err); + p = q; + } + return p; +} + +static grib_math *readlist(grib_context* c,char** form,int *n,int * err) +{ + grib_math *p; + + if(**form == ')') return NULL; + + p = readtest(c,form,err); + *n = 1; + + while(**form == ',') { + grib_math *q = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + + (*n)++; + + q->left = p; + + advance(form); + + q->right = readtest(c,form,err); + + p = q; + } + return p; +} + +static grib_math *readfactor(grib_context* c,char** form,int* err) { + grib_math *p = readpower(c,form,err); + + while(**form == '*' || **form == '/') { + grib_math *q = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + + q->arity = 2; + q->left = p; + q->name = opname(*form,1); + + advance(form); + + q->right = readpower(c,form,err); + + p = q; + } + return p; +} + +static grib_math *readterm(grib_context* c,char** form,int* err) { + grib_math *p = readfactor(c,form,err); + while(**form == '+' || **form == '-' ) { + grib_math *q = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + + q->arity = 2; + q->left = p; + q->name = opname(*form,1); + + advance(form); + + q->right = readfactor(c,form,err); + + p = q; + + } + return p; +} + +static grib_math *readtest(grib_context* c,char** form,int* err) { + grib_math *p = readterm(c,form,err); + while(**form == '<' || **form == '>' || **form == '=') { + grib_math *q = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + char *x = *form; + int n = 1; + + q->arity = 2; + q->left = p; + + advance(form); + if(**form == '=' || **form == '>') { + n = 2; + advance(form); + } + + q->name = opname(x,n); + + q->right = readterm(c,form,err); + + p = q; + + } + return p; +} + +static grib_math *readand(grib_context* c,char** form,int* err) { + grib_math *p = readtest(c,form,err); + while(**form == '&' ) { + grib_math *q = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + char *x = *form; + int n = 1; + + q->arity = 2; + q->left = p; + + advance(form); + if(**form == '&') { + n = 2; + advance(form); + } + + q->name = opname(x,n); + + q->right = readtest(c,form,err); + + p = q; + + } + return p; +} + +static grib_math *reador(grib_context* c,char** form,int* err) { + grib_math *p = readand(c,form,err); + while(**form == '|' ) { + grib_math *q = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + char *x = *form; + int n = 1; + + q->arity = 2; + q->left = p; + + advance(form); + if(**form == '|' ) { + n = 2; + advance(form); + } + + q->name = opname(x,n); + + q->right = readand(c,form,err); + + p = q; + + } + return p; +} + +grib_math *grib_math_clone(grib_context* c,grib_math *m) { + grib_math *n = NULL; + if(m) { + n = (grib_math*)grib_context_malloc(c,sizeof(grib_math)); + n->arity = m->arity; + n->name = strdup(m->name); + n->left = grib_math_clone(c,m->left); + n->right = grib_math_clone(c,m->right); + } + return n; +} + +void grib_math_delete (grib_context* c,grib_math* m) { + grib_math *left=0,*right=0; + left=m->left; + right=m->right; + if (m->name) free(m->name); + grib_context_free(c,m); + if (left) grib_math_delete(c,left); + if (right) grib_math_delete(c,right); +} + +grib_math *grib_math_new(grib_context* c,const char* formula,int *err) { + grib_math *x; + char* f=0; + char* fsave=0; + + *err=0; + + if (!formula) {*err=GRIB_INVALID_ARGUMENT;return NULL;} + + f=strdup(formula); + fsave=f; + + x = reador(c,&f,err); + if(*err!=GRIB_SUCCESS) return NULL; + + if(*f) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_math_new : Part of the formula was not processed: '%s'",f); + return NULL; + } + + free(fsave); + + return x; +} + diff --git a/src/grib_iarray.c b/src/grib_iarray.c new file mode 100644 index 000000000..ca616d177 --- /dev/null +++ b/src/grib_iarray.c @@ -0,0 +1,72 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * + * Enrico Fucile + * + ***************************************************************************/ + +#include "grib_api_internal.h" + +grib_iarray* grib_iarray_new(grib_context* c,size_t size,size_t incsize) { + grib_iarray* v=NULL; + if (!c) c=grib_context_get_default(); + v=(grib_iarray*)grib_context_malloc(c,sizeof(grib_iarray)); + if (!v) { + grib_context_log(c,GRIB_LOG_ERROR, + "grib_iarray_new unable to allocate %d bytes\n",sizeof(grib_iarray)); + return NULL; + } + v->size=size; + v->n=0; + v->incsize=incsize; + v->v=(long*)grib_context_malloc(c,sizeof(long)*size); + if (!v->v) { + grib_context_log(c,GRIB_LOG_ERROR, + "grib_iarray_new unable to allocate %d bytes\n",sizeof(long)*size); + return NULL; + } + return v; +} + +grib_iarray* grib_iarray_resize(grib_context* c,grib_iarray* v) { + int newsize=v->incsize+v->size; + + if (!c) c=grib_context_get_default(); + + v->v=grib_context_realloc(c,v->v,newsize*sizeof(long)); + v->size=newsize; + if (!v->v) { + grib_context_log(c,GRIB_LOG_ERROR, + "grib_iarray_resize unable to allocate %d bytes\n",sizeof(long)*newsize); + return NULL; + } + return v; +} + +grib_iarray* grib_iarray_push(grib_context* c,grib_iarray* v,long val) { + size_t start_size=100; + size_t start_incsize=100; + if (!v) v=grib_iarray_new(c,start_size,start_incsize); + + if (v->n >= v->size) v=grib_iarray_resize(c,v); + v->v[v->n]=val; + v->n++; + return v; +} + +void grib_iarray_delete(grib_context* c,grib_iarray* v) { + if (!v) return; + if (!c) grib_context_get_default(); + if (v->v) grib_context_free(c,v->v); + grib_context_free(c,v); +} + diff --git a/src/grib_ibmfloat.c b/src/grib_ibmfloat.c new file mode 100644 index 000000000..28c90cc0c --- /dev/null +++ b/src/grib_ibmfloat.c @@ -0,0 +1,227 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + + +static void init_ibm_table(); + +typedef struct ibm_table_t ibm_table_t; + +struct ibm_table_t { + int inited; + double e[128]; + double v[128]; + double vmin; + double vmax; +}; + +static ibm_table_t ibm_table={ 0,{0,},{0,} }; + +static void init_ibm_table() { + if (!ibm_table.inited) { + unsigned long i; + unsigned long mmin=0x100000; + unsigned long mmax=0xffffff; + double e=1; + for (i=1; i<=57;i++) { e*=16; ibm_table.e[i+70]=e;ibm_table.v[i+70]=e*mmin;} + ibm_table.e[70]=1; + ibm_table.v[70]=mmin; + e=1; + for (i=1; i<=70;i++) { e/=16; ibm_table.e[-i+70]=e;ibm_table.v[-i+70]=e*mmin;} + ibm_table.vmin=ibm_table.v[0]; + ibm_table.vmax=ibm_table.e[127]*mmax; + ibm_table.inited=1; + /*for (i=0;i<128;i++) printf("++++ ibm_table.v[%d]=%g\n",i,ibm_table.v[i]);*/ + } +} + +static void binary_search(double xx[], const unsigned long n, double x, unsigned long *j) +{ + /*These routine works only on ascending ordered arrays*/ + unsigned long ju,jm,jl; + jl=0; + ju=n; + while (ju-jl > 1) { + jm=(ju+jl) >> 1; + /* printf("jl=%lu jm=%lu ju=%lu\n",jl,jm,ju); */ + /* printf("xx[jl]=%.10e xx[jm]=%.10e xx[ju]=%.10e\n",xx[jl],xx[jm],xx[ju]); */ + if (x >= xx[jm]) jl=jm; + else ju=jm; + } + *j=jl; +} + +unsigned long grib_ibm_to_long(double x) { + unsigned long s = 0; + unsigned long mmax = 0xffffff; + unsigned long mmin = 0x800000; + unsigned long m = mmax; + unsigned long e=0; + double rmmax=mmax+0.5; + + if (!ibm_table.inited) init_ibm_table(); + + /* printf("\ngrib_ibm_to_long: x=%.20e\n",x); */ + if (x < 0) { s = 1; x = -x; } + + /* Underflow */ + if (x < ibm_table.vmin) { + /*printf("grib_ibm_to_long: (x < ibm_table.vmin) x=%.20e vmin=%.20e v=0x%lX\n",x,ibm_table.vmin,(s<<31));*/ + return (s << 31); + } + + /* Overflow */ + if (x > ibm_table.vmax) { + fprintf(stderr, "grib_ibm_to_long: Number is too large: x=%.20e > xmax=%.20e\n", x, ibm_table.vmax); + Assert(0); + return 0; + } + + binary_search(ibm_table.v, 127, x, &e); + + /* printf("grib_ibm_to_long: e=%ld\n",e); */ + + x/=ibm_table.e[e]; + + /* printf("grib_ibm_to_long: x=%.20e\n",x); */ + + while(x < mmin ) { x *= 16; e--; + /* printf("grib_ibm_to_long (e--): x=%.20e e=%ld \n",x,e); */ + } + + while(x > rmmax ) { x /= 16; e++; + /* printf("grib_ibm_to_long (e++): x=%.20e e=%ld \n",x,e); */ + } + + m=x+0.5; + /* printf("grib_ibm_to_long: m=0x%lX (%lu) x=%.10e \n",m,m,x ); */ + if ( m > mmax ) { e++; m=0x800000; + /* printf("grib_ibm_to_long: ( m > mmax ) m=0x%lX (%lu) x=%.10e \n",m,m,x ); */ + } + + /* printf("grib_ibm_to_long: s=%lu c=%lu (0x%lX) m=%lu (0x%lX)\n",s,e,e,m,m ); */ + + return (s << 31) | ( e << 24 ) | m; +} + +double grib_ibmfloat_error(double x) { + unsigned long e=0; + + if (!ibm_table.inited) init_ibm_table(); + + if (x < 0) x = -x; + + /* Underflow */ + if (x <= ibm_table.vmin) return ibm_table.vmin; + + /* Overflow */ + if (x > ibm_table.vmax) { + fprintf(stderr, "grib_ibmfloat_error: Number is too large: x=%.20e > xmax=%.20e\n", x, ibm_table.vmax); + Assert(0); + return 0; + } + + binary_search(ibm_table.v, 127, x, &e); + + return ibm_table.e[e] ; +} + +double grib_long_to_ibm(unsigned long x){ + unsigned long s = x & 0x80000000; + unsigned long c = (x & 0x7f000000) >> 24; + unsigned long m = (x & 0x00ffffff); + + double val = m; + + if (!ibm_table.inited) init_ibm_table(); + + /*if(x == 0) return 0;*/ + if (c==0 && m <= 1 ) return 0; + + val*=ibm_table.e[c]; + + if(s) val = -val; + + return val; +} + +double grib_ibm_table_e(unsigned long e) { + if (!ibm_table.inited) init_ibm_table(); + return ibm_table.e[e]; +} + +double grib_ibm_table_v(unsigned long e) { + if (!ibm_table.inited) init_ibm_table(); + return ibm_table.v[e]; +} + +unsigned long grib_ibm_nearest_smaller_to_long(double x) +{ + unsigned long l; + unsigned long e; + unsigned long m ; + unsigned long s; + unsigned long mmin = 0x100000; + double y, eps=0; + + if(x == 0) return 0; + + if (!ibm_table.inited) init_ibm_table(); + + l=grib_ibm_to_long(x); + y=grib_long_to_ibm(l); + + if ( x < y ) { + if ( x < 0 && -x < ibm_table.vmin ) { + l=0x80100000; + } else { + e = (l & 0x7f000000) >> 24; + m = (l & 0x00ffffff); + s = l & 0x80000000; + + if ( m == mmin ) { + /* printf("grib_ibm_nearest_smaller_to_long: m == mmin (0x%lX) e=%lu\n",m,e); */ + e = s ? e : e-1; + if (e<0) e=0; + if (e>127) e=127; + /* printf("grib_ibm_nearest_smaller_to_long: e=%lu \n",e); */ + } + + eps=ibm_table.e[e]; + + /* printf("grib_ibm_nearest_smaller_to_long: x= grib_long_to_ibm(l)); + } + } + + return l; +} + +int grib_nearest_smaller_ibm_float(double a,double* ret) { + unsigned long l=0; + + if (!ibm_table.inited) init_ibm_table(); + + if (a>ibm_table.vmax) return GRIB_INTERNAL_ERROR; + + l=grib_ibm_nearest_smaller_to_long(a); + *ret=grib_long_to_ibm(l); + return GRIB_SUCCESS; +} diff --git a/src/grib_ieeefloat.c b/src/grib_ieeefloat.c new file mode 100644 index 000000000..0f54e997e --- /dev/null +++ b/src/grib_ieeefloat.c @@ -0,0 +1,484 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile - 06.01.2009 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +#if 1 + + +static void init_ieee_table(); + +typedef struct ieee_table_t ieee_table_t; + +struct ieee_table_t { + int inited; + double e[255]; + double v[255]; + double vmin; + double vmax; +}; + +static ieee_table_t ieee_table={ 0,{0,},{0,} }; + +static void init_ieee_table() { + if (!ieee_table.inited) { + unsigned long i; + unsigned long mmin=0x800000; + unsigned long mmax=0xffffff; + double e=1; + for (i=1; i<=104;i++) { + e*=2; + ieee_table.e[i+150]=e; + ieee_table.v[i+150]=e*mmin; + } + ieee_table.e[150]=1; + ieee_table.v[150]=mmin; + e=1; + for (i=1; i<150;i++) { + e/=2; + ieee_table.e[-i+150]=e; + ieee_table.v[-i+150]=e*mmin; + } + ieee_table.vmin=ieee_table.v[1]; + ieee_table.vmax=ieee_table.e[254]*mmax; + ieee_table.inited=1; + /*for (i=0;i<128;i++) printf("++++ ieee_table.v[%d]=%g\n",i,ieee_table.v[i]);*/ + } +} + +static void binary_search(double xx[], const unsigned long n, double x, unsigned long *j) +{ + /*These routine works only on ascending ordered arrays*/ + unsigned long ju,jm,jl; + jl=0; + ju=n; + while (ju-jl > 1) { + jm=(ju+jl) >> 1; + /* printf("jl=%lu jm=%lu ju=%lu\n",jl,jm,ju); */ + /* printf("xx[jl]=%.10e xx[jm]=%.10e xx[ju]=%.10e\n",xx[jl],xx[jm],xx[ju]); */ + if (x >= xx[jm]) jl=jm; + else ju=jm; + } + *j=jl; +} + + + +double grib_ieee_table_e(unsigned long e) { + if (!ieee_table.inited) init_ieee_table(); + return ieee_table.e[e]; +} + +double grib_ieee_table_v(unsigned long e) { + if (!ieee_table.inited) init_ieee_table(); + return ieee_table.v[e]; +} +unsigned long grib_ieee_to_long(double x) { + unsigned long s = 0; + unsigned long mmax = 0xffffff; + unsigned long mmin = 0x800000; + unsigned long m = mmax; + unsigned long e=0; + double rmmax=mmax+0.5; + + if (!ieee_table.inited) init_ieee_table(); + + /* printf("\ngrib_ieee_to_long: x=%.20e\n",x); */ + if (x < 0) { s = 1; x = -x; } + + /* Underflow */ + if (x < ieee_table.vmin) { + /*printf("grib_ieee_to_long: (x < ieee_table.vmin) x=%.20e vmin=%.20e v=0x%lX\n",x,ieee_table.vmin,(s<<31));*/ + return (s << 31); + } + + /* Overflow */ + if (x > ieee_table.vmax) { + fprintf(stderr, "grib_ieee_to_long: Number is too large: x=%.20e > xmax=%.20e\n", x, ieee_table.vmax); + Assert(0); + return 0; + } + + binary_search(ieee_table.v, 254, x, &e); + + /* printf("grib_ieee_to_long: e=%ld\n",e); */ + + x/=ieee_table.e[e]; + + /* printf("grib_ieee_to_long: x=%.20e\n",x); */ + + while(x < mmin ) { x *= 2; e--; + /* printf("grib_ieee_to_long (e--): x=%.20e e=%ld \n",x,e); */ + } + + while(x > rmmax ) { x /= 2; e++; + /* printf("grib_ieee_to_long (e++): x=%.20e e=%ld \n",x,e); */ + } + + m=x+0.5; + /* printf("grib_ieee_to_long: m=0x%lX (%lu) x=%.10e \n",m,m,x ); */ + if ( m > mmax ) { e++; m=0x800000; + /* printf("grib_ieee_to_long: ( m > mmax ) m=0x%lX (%lu) x=%.10e \n",m,m,x ); */ + } + + /* printf("grib_ieee_to_long: s=%lu c=%lu (0x%lX) m=%lu (0x%lX)\n",s,e,e,m,m ); */ + + return (s << 31) | ( e << 23 ) | ( m & 0x7fffff ); +} + +double grib_ieeefloat_error(double x) { + unsigned long e=0; + + if (!ieee_table.inited) init_ieee_table(); + + if (x < 0) x = -x; + + /* Underflow */ + if (x < ieee_table.vmin) return ieee_table.vmin; + + /* Overflow */ + if (x > ieee_table.vmax) { + fprintf(stderr, "grib_ieeefloat_error: Number is too large: x=%.20e > xmax=%.20e\n", x, ieee_table.vmax); + Assert(0); + return 0; + } + + binary_search(ieee_table.v, 254, x, &e); + + return ieee_table.e[e] ; +} + +double grib_long_to_ieee(unsigned long x){ + unsigned long s = x & 0x80000000; + unsigned long c = (x & 0x7f800000) >> 23; + unsigned long m = (x & 0x007fffff); + + double val; + + if (!ieee_table.inited) init_ieee_table(); + + if (c == 0 && m==0) return 0; + + if (c == 0) { + m |= 0x800000; + c=1; + } else m |= 0x800000; + + val=m*ieee_table.e[c]; + if(s) val = -val; + + return val; +} + +unsigned long grib_ieee_nearest_smaller_to_long(double x) +{ + unsigned long l; + unsigned long e; + unsigned long m ; + unsigned long s; + unsigned long mmin = 0x800000; + double y,eps; + + if(x == 0) return 0; + + if (!ieee_table.inited) init_ieee_table(); + + l=grib_ieee_to_long(x); + y=grib_long_to_ieee(l); + + if ( x < y ) { + if ( x < 0 && -x < ieee_table.vmin ) { + l=0x80800000; + } else { + e = (l & 0x7f800000) >> 23; + m = (l & 0x007fffff) | 0x800000; + s = l & 0x80000000; + + if ( m == mmin ) { + /* printf("grib_ieee_nearest_smaller_to_long: m == mmin (0x%lX) e=%lu\n",m,e); */ + e = s ? e : e-1; + if (e<1) e=1; + if (e>254) e=254; + /* printf("grib_ieee_nearest_smaller_to_long: e=%lu \n",e); */ + } + + eps=ieee_table.e[e]; + + /* printf("grib_ieee_nearest_smaller_to_long: x= grib_long_to_ieee(l)); + } + + return l; +} + +int grib_nearest_smaller_ieee_float(double a,double* ret) { + unsigned long l=0; + + if (!ieee_table.inited) init_ieee_table(); + + if (a>ieee_table.vmax) return GRIB_INTERNAL_ERROR; + + l=grib_ieee_nearest_smaller_to_long(a); + *ret=grib_long_to_ieee(l); + return GRIB_SUCCESS; +} + +#else +/* old code to be deleted */ + +double grib_ieeefloat_error(double x) {return 0;} + +double grib_long_to_ieee(unsigned long x) { + unsigned long s = x & 0x80000000; + unsigned long c = (x & 0x7f800000) >> 23; + unsigned long m; + double val; + long e; + + if(x == 0) return 0; + Assert(c != 255); + + if(c == 0) { m = x & 0x007fffff; e = -126 - 23; } + else { m = (x & 0x007fffff) | (1<<23); e = c - 127 - 23; } + + val = m; + + while(e < 0) { val /= 2.0; e++; } + while(e > 0) { val *= 2.0; e--; } + + if(s) val = -val; + + return val; +} + +int grib_nearest_smaller_ieee_float(double a,double* x) { + double e = grib_long_to_ieee(grib_ieee_to_long(a)); + double b = a; + + /* printf("----> a=%g e=%g e-a=%g\n",a,e,e-a); */ + + if( e > b ) + { + unsigned long ub = grib_ieee_to_long(b); + unsigned long ue; + while(e>b) + { + /* printf("a=%g e=%g e-a=%g\n",a,e,e-a); */ + a -= (e-a); + e = grib_long_to_ieee(grib_ieee_to_long(a)); + } + ue = grib_ieee_to_long(e); + Assert((ue-ub) == 1); + } + + Assert(b >= e); + *x=e; + return GRIB_SUCCESS; +} + +unsigned long grib_ieee_to_long(double x) { + /* double y = x; */ + unsigned long s = 0; + unsigned long m; + long p = 0; + unsigned long e = 0; + + if(x == 0) return 0; + + if(x < 0) { s = 1; x = -x; } + while(x < 2) { x *= 2; p--; } + + while(x >= 2) { x /= 2; p++; } + + if(p > 127 ) { + /* Overflow */ + e = 255; + m = 0; + } + else if(p < -126) { + /* int i; */ + e = 0; + /* printf("p=%ld x=%g %ld\n",p,x,p+126+23); */ + m = x * grib_power(p+126+23,2); + } + else { + e = p + 127; + m = x * ( 1 << 23); + m &= 0x007fffff; + } + + m = (s << 31) | ( e << 23 ) | m; + + return m; +} + +#endif + +#ifdef IEEE + +unsigned long grib_ieee64_to_long(double x) { + unsigned long lval; +#if IEEE_LE + unsigned char s[8]={0,}; + unsigned char* buf=(unsigned char*)&x; + int j=0; + for (j=7;j>=0;j--) + s[j]= *(buf++); + memcpy(&lval,s,8); +#elif IEEE_BE + memcpy(&lval,&x,8); +#endif + return lval; +} + +double grib_long_to_ieee64(unsigned long x){ + double dval; +#if IEEE_LE + unsigned char s[8]={0,}; + unsigned char* buf=(unsigned char*)&x; + int j=0; + for (j=7;j>=0;j--) + s[j]= *(buf++); + memcpy(&dval,s,8); +#elif IEEE_BE + memcpy(&dval,&x,8); +#endif + + return dval; +} + + +int grib_ieee_decode_array(grib_context* c,unsigned char* buf,size_t nvals,int bytes,double* val) { + int err=0,i=0,j=0; + unsigned char s[8]={0,}; + float fval; + double* pval=val; + + switch (bytes) { + case 4: + for (i=0;i=0;j--) + s[j]=*(buf++); + memcpy(&fval,s,4); + val[i]=(double)fval; +#elif IEEE_BE + memcpy(&fval,buf,4); + val[i]=(double)fval; + buf+=4; +#endif + } + break; + case 8: + for (i=0;i=0;j--) + s[j]=*(buf++); + memcpy(pval++,s,8); +#elif IEEE_BE + memcpy(pval++,buf,8); + buf+=8; +#endif + } + break; + default: + grib_context_log(c,GRIB_LOG_ERROR, + "grib_ieee_decode_array: %d bits not implemented",bytes*8); + return GRIB_NOT_IMPLEMENTED; + } + + return err; +} + +#else + +int grib_ieee_decode_array(grib_context* c,unsigned char* buf,size_t nvals,int bytes,double* val) { + int err=0,i=0; + long bitr=0; + + for(i=0;i< nvals;i++) + val[i] = grib_long_to_ieee(grib_decode_unsigned_long(buf,&bitr,bytes*8)); + + return err; +} + +#endif + +#ifdef IEEE + +int grib_ieee_encode_array(grib_context* c,double* val,size_t nvals,int bytes, + unsigned char* buf) { + int err=0,i=0,j=0; + unsigned char s4[4]; + unsigned char s8[8]; + float fval=0; + double *pval=val; + + switch (bytes) { + case 4: + for (i=0;i=0;j--) + *(buf++)=s4[j]; +#elif IEEE_BE + memcpy(buf,&(fval),4); + buf+=4; +#endif + } + break; + case 8: + for (i=0;i=0;j--) + *(buf++)=s8[j]; +#elif IEEE_BE + memcpy(buf,pval++,8); + buf+=8; +#endif + } + break; + default: + grib_context_log(c,GRIB_LOG_ERROR, + "grib_ieee_encode_array: %d bits not implemented",bytes*8); + return GRIB_NOT_IMPLEMENTED; + } + + return err; +} + +#else + +int grib_ieee_encode_array(grib_context* c,double* val,size_t nvals,int bytes, + unsigned char* buf) { + int err=0,i=0; + long bitr=0; + + for(i=0;i< nvals;i++) + grib_encode_unsigned_long(buf, grib_ieee_to_long(val[i]), &bitr, bytes*8); + + return err; +} + +#endif diff --git a/src/grib_index.c b/src/grib_index.c new file mode 100644 index 000000000..4852e810a --- /dev/null +++ b/src/grib_index.c @@ -0,0 +1,1372 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * Description: index + * + * + * + */ + +#include "grib_api_internal.h" + +#define UNDEF_LONG -99999 +#define UNDEF_DOUBLE -99999 + +#define NULL_MARKER 0 +#define NOT_NULL_MARKER 255 + + +/* #if GRIB_PTHREADS */ +#if 0 +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER; + +static void init() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex1,&attr); + pthread_mutex_init(&mutex2,&attr); + pthread_mutexattr_destroy(&attr); + +} +#endif + + +static const char* mars_keys = + "mars.date,mars.time,mars.expver,mars.stream,mars.class,mars.type," + "mars.step,mars.param,mars.levtype,mars.levelist,mars.number,mars.iteration," + "mars.domain,mars.fcmonth,mars.fcperiod,mars.hdate,mars.method," + "mars.model,mars.origin,mars.quantile,mars.range,mars.refdate,mars.direction,mars.frequency"; + + +static int grib_filesid=0; +static int index_count; + +static char* get_key(char** keys,int *type) { + char* key=NULL; + char* p=NULL; + + if (*keys == 0 || keys==NULL) return NULL; + *type=GRIB_TYPE_UNDEFINED; + p=*keys; + while (*p == ' ') p++; + + + while (*p != 0 && *p != ':' && *p != ',') p++; + if ( *p == ':' ) { + *type=grib_type_to_int(*(p+1)); + *p=0; + p++; + while (*p != 0 && *p != ',') {*(p++)=0;} + } else *type=GRIB_TYPE_UNDEFINED; + if (*p) {*p=0;p++;} + key=*keys; + *keys= *p==0 ? NULL : p; + return key; +} + +static int compare_long(const void* a,const void* b) { + long* arg1 = (long*) a; + long* arg2 = (long*) b; + if( *arg1 == *arg2 ) return 0; + + return *arg1 < *arg2 ? -1 : 1; +} + +static int compare_double(const void* a,const void* b) { + double* arg1 = (double*) a; + double* arg2 = (double*) b; + if( *arg1 == *arg2 ) return 0; + + return *arg1 < *arg2 ? -1 : 1; + +} + + +static int compare_string(const void* a,const void* b) { + char* arg1 = *(char* const*) a; + char* arg2 = *(char* const*) b; + + while (*arg1 != 0 && *arg2 != 0 && *arg1 == *arg2 ) {arg1++;arg2++;} + + if( *arg1 == *arg2 ) return 0; + + return *arg1 < *arg2 ? -1 : 1; +} + + +static int grib_index_keys_compress(grib_context* c,grib_index* index,int* compress) { + grib_index_key *keys=index->keys->next; + grib_index_key *prev=index->keys; + int level=0; + + if (!keys) return 0; + + level=1; + while (keys) { + if (keys->values_count==1) { + prev->next=keys->next; + grib_context_free(c,keys->name); + grib_context_free(c,keys); + keys=prev->next; + compress[level]=1; + level++; + } else { + prev=keys; + keys=keys->next; + compress[level]=0; + level++; + } + } + + if (index->keys->values_count==1) { + keys=index->keys; + index->keys=index->keys->next; + grib_context_free(c,keys->name); + grib_context_free(c,keys); + compress[0]=1; + } else compress[0]=0; + + return 0; +} + +static int grib_index_fields_compress(grib_context* c, + grib_field_tree* fields,grib_field_tree* prev,int level,int* compress) { + + if (!fields) return 0; + + if (!prev) { + if (fields->next) + grib_index_fields_compress(c,fields->next,0,level,compress); + level++; + return grib_index_fields_compress(c,fields->next_level,fields,level,compress); + } + + if (compress[level]) { + if (!fields->next_level) prev->field=fields->field; + + prev->next_level=fields->next_level; + grib_context_free(c,fields->value); + grib_context_free(c,fields); + level++; + grib_index_fields_compress(c,prev->next_level,prev,level,compress); + } else { + grib_field_tree* next; + next=fields->next; + level++; + while (next) { + grib_index_fields_compress(c,next->next_level,next,level,compress); + next=next->next; + } + grib_index_fields_compress(c,fields->next_level,fields,level,compress); + } + + return 0; +} + +int grib_index_compress(grib_index* index) { + int err=0; + grib_context* c=index->context; + int compress[200]={0,}; + + if (!index->keys->next) return 0; + + err=grib_index_keys_compress(c,index,compress); + if (err) return err; + + grib_index_fields_compress(c,index->fields,0,0,compress); + + if (!index->fields->next) { + grib_field_tree* next_level=index->fields->next_level; + grib_context_free(c,index->fields->value); + grib_context_free(c,index->fields); + index->fields=next_level; + } + return 0; +} + +static grib_index_key* grib_index_new_key(grib_context* c,grib_index_key* keys, + const char* key,int type,int *err) { + grib_index_key *next=NULL,*current=NULL; + grib_string_list* values=NULL; + + next=(grib_index_key*)grib_context_malloc_clear(c,sizeof(grib_index_key)); + if (!next) { + grib_context_log(c,GRIB_LOG_ERROR, + "unable to allocate %d bytes", + sizeof(grib_index_key)); + *err=GRIB_OUT_OF_MEMORY; + return NULL; + } + values=grib_context_malloc_clear(c,sizeof(grib_string_list)); + if (!values) { + grib_context_log(c,GRIB_LOG_ERROR, + "unable to allocate %d bytes", + sizeof(grib_string_list)); + *err=GRIB_OUT_OF_MEMORY; + return NULL; + } + + next->values=values; + + if (!keys) { + keys=next; + current=keys; + } else { + current=keys; + while (current->next) current=current->next; + current->next=next; + current=current->next; + } + + current->type=type; + current->name=grib_context_strdup(c,key); + return keys; +} + +int grib_read_uchar( FILE* fh,unsigned char *val) { + if (fread(val,sizeof(unsigned char),1,fh) <1) { + if (feof(fh)) return GRIB_END_OF_FILE; + else return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; +} + +int grib_read_short( FILE* fh,short *val) { + if (fread(val,sizeof(short),1,fh) <1) { + if (feof(fh)) return GRIB_END_OF_FILE; + else return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; +} + +int grib_read_long( FILE* fh,long *val) { + if (fread(val,sizeof(long),1,fh) <1) { + if (feof(fh)) return GRIB_END_OF_FILE; + else return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; +} + +int grib_read_unsigned_long( FILE* fh,unsigned long *val) { + if (fread(val,sizeof(long),1,fh) <1) { + if (feof(fh)) return GRIB_END_OF_FILE; + else return GRIB_IO_PROBLEM; + } + return GRIB_SUCCESS; +} + +int grib_write_uchar(FILE* fh,unsigned char val) { + if (fwrite(&val,sizeof(unsigned char),1,fh)<1) + return GRIB_IO_PROBLEM; + return GRIB_SUCCESS; +} + +int grib_write_short(FILE* fh,short val) { + if (fwrite(&val,sizeof(short),1,fh)<1) + return GRIB_IO_PROBLEM; + return GRIB_SUCCESS; +} + +int grib_write_long(FILE* fh,long val) { + if (fwrite(&val,sizeof(long),1,fh)<1) + return GRIB_IO_PROBLEM; + return GRIB_SUCCESS; +} + +int grib_write_unsigned_long(FILE* fh,unsigned long val) { + if (fwrite(&val,sizeof(long),1,fh)<1) + return GRIB_IO_PROBLEM; + return GRIB_SUCCESS; +} + +int grib_write_string(FILE* fh,const char* s) +{ + size_t len = strlen(s); + grib_write_uchar(fh,(unsigned char)len); + if (fwrite(s,1,len,fh)file->id); + if (err) return err; + + err=grib_write_unsigned_long(fh,field->offset); + if (err) return err; + + err=grib_write_unsigned_long(fh,field->length); + if (err) return err; + + err=grib_write_field(fh,field->next); + if (err) return err; + + return GRIB_SUCCESS; +} + +static grib_field* grib_read_field(grib_context* c,FILE* fh,grib_file** files,int *err) { + + grib_field* field=NULL; + short file_id; + unsigned char marker ; + unsigned long offset; + unsigned long length; + + *err = grib_read_uchar(fh,&marker); + if(marker == NULL_MARKER) return NULL; + if(marker != NOT_NULL_MARKER) {*err=GRIB_CORRUPTED_INDEX;return NULL;} + + index_count++; + field=grib_context_malloc(c,sizeof(grib_field)); + *err=grib_read_short(fh,&file_id); + if (*err) return NULL; + + field->file=files[file_id]; + + *err=grib_read_unsigned_long(fh,&offset); + field->offset=offset; + if (*err) return NULL; + + *err=grib_read_unsigned_long(fh,&length); + field->length=length; + if (*err) return NULL; + + field->next=grib_read_field(c,fh,files,err); + + return field; +} + +static int grib_write_field_tree(FILE* fh,grib_field_tree* tree) { + + int err=0; + + if(!tree) + return grib_write_null_marker(fh); + + err=grib_write_not_null_marker(fh); + if (err) return err; + + err=grib_write_field(fh,tree->field); + if (err) return err; + + err=grib_write_string(fh,tree->value); + if (err) return err; + + err=grib_write_field_tree(fh,tree->next_level); + if (err) return err; + + err=grib_write_field_tree(fh,tree->next); + if (err) return err; + return GRIB_SUCCESS; +} + +grib_field_tree* grib_read_field_tree(grib_context* c, FILE* fh, + grib_file** files,int *err) { + + grib_field_tree* tree=NULL; + unsigned char marker=0; + *err = grib_read_uchar(fh,&marker); + + if(marker == NULL_MARKER) return NULL; + if(marker != NOT_NULL_MARKER) {*err=GRIB_CORRUPTED_INDEX;return NULL;} + + tree = grib_context_malloc(c, sizeof(grib_field_tree)); + tree->field = grib_read_field(c,fh,files,err); + if (*err) return NULL; + + tree->value = grib_read_string(c,fh,err); + if (*err) return NULL; + + tree->next_level = grib_read_field_tree(c,fh,files,err); + if (*err) return NULL; + + tree->next = grib_read_field_tree(c,fh,files,err); + if (*err) return NULL; + + return tree; +} + + +grib_index* grib_index_new(grib_context* c,const char* key,int *err) { + grib_index* index; + grib_index_key* keys=NULL; + char* q; + int type; + char* p; + + if (!strcmp(key,"mars")) + return grib_index_new(c,mars_keys,err); + + p= grib_context_strdup(c,key); + q=p; + + *err=0; + if (!c) c=grib_context_get_default(); + + index=(grib_index*)grib_context_malloc_clear(c,sizeof(grib_index)); + if (!index) { + grib_context_log(c,GRIB_LOG_ERROR,"unable to create index"); + *err=GRIB_OUT_OF_MEMORY; + return NULL; + } + index->context=c; + + while ((key=get_key(&p,&type))!=NULL) { + keys=grib_index_new_key(c,keys,key,type,err); + if (*err) return NULL; + } + index->keys=keys; + index->fields=(grib_field_tree*)grib_context_malloc_clear(c, + sizeof(grib_field_tree)); + if (!index->fields) {*err=GRIB_OUT_OF_MEMORY;return NULL;} + + grib_context_free(c,q); + return index; +} + +static void grib_index_values_delete(grib_context* c,grib_string_list* values) { + + if (!values) return; + + grib_index_values_delete(c,values->next); + grib_context_free(c,values->value); + grib_context_free(c,values); + + return ; +} + +static void grib_index_key_delete(grib_context* c,grib_index_key* keys) { + if (!keys) return; + + grib_index_key_delete(c,keys->next); + + grib_index_values_delete(c,keys->values); + grib_index_values_delete(c,keys->current); + grib_context_free(c,keys->name); + grib_context_free(c,keys); + + return; +} + + +static long values_count=0; +static grib_string_list* grib_read_key_values(grib_context* c,FILE* fh,int *err) { + grib_string_list* values; + unsigned char marker=0; + + *err = grib_read_uchar(fh,&marker); + if(marker == NULL_MARKER) return NULL; + if(marker != NOT_NULL_MARKER) {*err=GRIB_CORRUPTED_INDEX;return NULL;} + + values_count++; + + values=grib_context_malloc_clear(c,sizeof(grib_string_list)); + values->value=grib_read_string(c,fh,err); + if (*err) return NULL; + + values->next=grib_read_key_values(c,fh,err); + if (*err) return NULL; + + return values; +} + + +static int grib_write_key_values(FILE* fh,grib_string_list* values) { + int err=0; + + if (!values) + return grib_write_null_marker(fh); + + err=grib_write_not_null_marker(fh); + if (err) return err; + + err=grib_write_string(fh,values->value); + + err=grib_write_key_values(fh,values->next); + if (err) return err; + + return GRIB_SUCCESS; +} + + +static grib_index_key* grib_read_index_keys(grib_context* c,FILE* fh,int *err) { + grib_index_key* keys=NULL; + unsigned char marker=0; + unsigned char type=0; + + if (!c) c=grib_context_get_default(); + + *err = grib_read_uchar(fh,&marker); + if(marker == NULL_MARKER) return NULL; + if(marker != NOT_NULL_MARKER) {*err=GRIB_CORRUPTED_INDEX;return NULL;} + + keys= grib_context_malloc_clear(c,sizeof(grib_index_key)); + keys->name = grib_read_string(c,fh,err); + if (*err) return NULL; + + *err = grib_read_uchar(fh,&type); + keys->type=type; + if (*err) return NULL; + + values_count=0; + keys->values=grib_read_key_values(c,fh,err); + if (*err) return NULL; + + keys->values_count=values_count; + if (*err) return NULL; + + + keys->next=grib_read_index_keys(c,fh,err); + if (*err) return NULL; + + return keys; + +} + +static int grib_write_index_keys(FILE* fh,grib_index_key* keys) { + int err=0; + + if (!keys) + return grib_write_null_marker(fh); + + err=grib_write_not_null_marker(fh); + if (err) return err; + + err=grib_write_string(fh,keys->name); + if (err) return err; + + err=grib_write_uchar(fh,(unsigned char)keys->type); + if (err) return err; + + grib_write_key_values(fh,keys->values); + + err=grib_write_index_keys(fh,keys->next); + if (err) return err; + + return GRIB_SUCCESS; +} + +static void grib_field_delete(grib_context* c,grib_field* field) { + int err=0; + + if (!field) return; + + grib_field_delete(c,field->next); + + grib_file_close(field->file->name,&err); + field->file=NULL; + + grib_context_free(c,field); + + return; + +} + +static void grib_field_tree_delete(grib_context* c,grib_field_tree* tree) { + + if(!tree) return; + + grib_field_delete(c,tree->field); + grib_context_free(c,tree->value); + + grib_field_tree_delete(c,tree->next_level); + + grib_field_tree_delete(c,tree->next); + + grib_context_free(c,tree); + + return; +} + +void grib_index_delete(grib_index* index) { + grib_file* file=index->files; + grib_index_key_delete(index->context,index->keys); + grib_field_tree_delete(index->context,index->fields); + while (file) { + grib_file* f=file; + file=file->next; + grib_file_delete(f); + } + grib_context_free(index->context,index); +} + +static int grib_write_files(FILE* fh,grib_file* files) { + int err; + if (!files) + return grib_write_null_marker(fh); + + err=grib_write_not_null_marker(fh); + if (err) return err; + + err=grib_write_string(fh,files->name); + if (err) return err; + + err=grib_write_short(fh,(short)files->id); + if (err) return err; + + return grib_write_files(fh,files->next); +} + +static grib_file* grib_read_files(grib_context *c,FILE* fh,int *err) { + unsigned char marker=0; + short id=0; + grib_file* file; + *err = grib_read_uchar(fh,&marker); + if(marker == NULL_MARKER) return NULL; + if(marker != NOT_NULL_MARKER) {*err=GRIB_CORRUPTED_INDEX;return NULL;} + + file=grib_context_malloc(c,sizeof(grib_file)); + file->name=grib_read_string(c,fh,err); + if (*err) return NULL; + + *err=grib_read_short(fh,&id); + file->id=id; + if (*err) return NULL; + + file->next=grib_read_files(c,fh,err); + if (*err) return NULL; + + return file; +} + + +int grib_index_write(grib_index* index,const char* filename) { + int err=0; + FILE* fh; + grib_file* files; + + fh=fopen(filename,"w"); + if (!fh) { + grib_context_log(index->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "Unable to write in file %s",filename); + perror(filename); + return GRIB_IO_PROBLEM; + } + + err=grib_write_identifier(fh); + if (err) { + grib_context_log(index->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "Unable to write in file %s",filename); + perror(filename); + return err; + } + + if (!index) return grib_write_null_marker(fh); + + err=grib_write_not_null_marker(fh); + if (err) return err; + + files=grib_file_pool_get_files(); + err=grib_write_files(fh,files); + if (err) { + grib_context_log(index->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "Unable to write in file %s",filename); + perror(filename); + return err; + } + + + err=grib_write_index_keys(fh,index->keys); + if (err) { + grib_context_log(index->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "Unable to write in file %s",filename); + perror(filename); + return err; + } + + err=grib_write_field_tree(fh,index->fields); + if (err) { + grib_context_log(index->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "Unable to write in file %s",filename); + perror(filename); + return err; + } + + if (fclose(fh) != 0) { + grib_context_log(index->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "Unable to write in file %s",filename); + perror(filename); + return GRIB_IO_PROBLEM; + } + + return err; +} + +grib_index* grib_index_read(grib_context* c,const char* filename,int *err) { + grib_file *file,*f; + grib_file** files; + grib_index* index=NULL; + unsigned char marker=0; + char* identifier=NULL; + int max=0; + FILE* fh; + + if (!c) c=grib_context_get_default(); + + fh=fopen(filename,"r"); + if (!fh) { + grib_context* c = grib_context_get_default(); + grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "Unable to write in file %s",filename); + perror(filename); + *err=GRIB_IO_PROBLEM; + return NULL; + } + + identifier=grib_read_string(c,fh,err); + if (!identifier) return NULL; + grib_context_free(c,identifier); + + *err = grib_read_uchar(fh,&marker); + if(marker == NULL_MARKER) return NULL; + if(marker != NOT_NULL_MARKER) {*err=GRIB_CORRUPTED_INDEX;return NULL;} + + file = grib_read_files(c,fh,err); + if (*err) return NULL; + + f=file; + while (f) { + if (maxid) max=f->id; + f=f->next; + } + + files=grib_context_malloc_clear(c,sizeof(grib_file)*(max+1)); + + f=file; + while (f) { + grib_file_open(f->name,"r",err); + if (*err) return NULL; + files[f->id]=grib_get_file(f->name,err); + f=f->next; + } + + while (file) { + f=file; + file=file->next; + grib_context_free(c,f->name); + grib_context_free(c,f); + } + + index=grib_context_malloc_clear(c,sizeof(grib_index)); + index->context=c; + + index->keys=grib_read_index_keys(c,fh,err); + if (*err) return NULL; + + index_count=0; + index->fields=grib_read_field_tree(c,fh,files,err); + if (*err) return NULL; + + index->count=index_count; + + fclose(fh); + return index; +} + +int grib_index_search_same(grib_index* index,grib_handle* h) { + int err=0; + char buf[1024]={0,}; + size_t buflen=1024; + grib_index_key* keys; + long lval=0; + double dval=0.0; + grib_context* c; + + if (!index) return GRIB_NULL_INDEX; + c=index->context; + + keys=index->keys; + + while (keys) { + if (keys->type==GRIB_TYPE_UNDEFINED) { + err=grib_get_native_type(h,keys->name,&(keys->type)); + if (err) keys->type=GRIB_TYPE_STRING; + } + buflen=1024; + switch (keys->type) { + case GRIB_TYPE_STRING: + err=grib_get_string(h,keys->name,buf,&buflen); + if (err==GRIB_NOT_FOUND) sprintf(buf,GRIB_KEY_UNDEF); + break; + case GRIB_TYPE_LONG: + err=grib_get_long(h,keys->name,&lval); + if (err==GRIB_NOT_FOUND) sprintf(buf,GRIB_KEY_UNDEF); + else sprintf(buf,"%ld",lval); + break; + case GRIB_TYPE_DOUBLE: + err=grib_get_double(h,keys->name,&dval); + if (err==GRIB_NOT_FOUND) sprintf(buf,GRIB_KEY_UNDEF); + else sprintf(buf,"%g",dval); + break; + default : + err=GRIB_WRONG_TYPE; + return err; + } + if (err && err != GRIB_NOT_FOUND) { + grib_context_log(c,GRIB_LOG_ERROR, + "unable to create index. \"%s\": %s", + keys->name,grib_get_error_message(err)); + return err; + } + sprintf(keys->value,"%s",buf); + keys=keys->next; + } + grib_index_rewind(index); + return 0; +} + +int grib_index_add_file(grib_index* index,const char* filename) { + double dval; + size_t svallen; + long length,lval; + char buf[1024]={0,}; + int err=0; + grib_file* indfile; + grib_file* newfile; + + grib_index_key* index_key=NULL; + grib_handle* h=NULL; + grib_field* field; + grib_field_tree* field_tree; + grib_file* file=NULL; + grib_context* c; + + if (!index) return GRIB_NULL_INDEX; + c=index->context; + + file=grib_file_open(filename,"r",&err); + + if (!file || !file->handle) return err; + + if (!index->files) { + grib_filesid++; + newfile=grib_context_malloc_clear(c,sizeof(grib_file)); + newfile->id=grib_filesid; + newfile->name=strdup(file->name); + index->files=newfile; + } else { + indfile=index->files; + while(indfile) { + if (!strcmp(indfile->name,file->name)) return 0; + indfile=indfile->next; + } + indfile=index->files; + while(indfile->next) indfile=indfile->next; + grib_filesid++; + newfile=grib_context_malloc_clear(c,sizeof(grib_file)); + newfile->id=grib_filesid; + newfile->name=file->name; + indfile->next=newfile; + } + + fseeko(file->handle,0,SEEK_SET); + + while ((h=grib_handle_new_from_file(c,file->handle,&err))!=NULL) { + grib_string_list* v=0; + index_key=index->keys; + field_tree=index->fields; + index_key->value[0]=0; + + /* process only GRIB for the moment*/ + svallen=1024; + grib_get_string(h,"identifier",buf,&svallen); + if (strcmp(buf,"GRIB")) { + grib_handle_delete(h); + return 0; + } + + while (index_key) { + if (index_key->type==GRIB_TYPE_UNDEFINED) { + err=grib_get_native_type(h,index_key->name,&(index_key->type)); + if (err) index_key->type=GRIB_TYPE_STRING; + } + svallen=1024; + switch (index_key->type) { + case GRIB_TYPE_STRING: + err=grib_get_string(h,index_key->name,buf,&svallen); + if (err==GRIB_NOT_FOUND) sprintf(buf,GRIB_KEY_UNDEF); + break; + case GRIB_TYPE_LONG: + err=grib_get_long(h,index_key->name,&lval); + if (err==GRIB_NOT_FOUND) sprintf(buf,GRIB_KEY_UNDEF); + else sprintf(buf,"%ld",lval); + break; + case GRIB_TYPE_DOUBLE: + err=grib_get_double(h,index_key->name,&dval); + if (err==GRIB_NOT_FOUND) sprintf(buf,GRIB_KEY_UNDEF); + else sprintf(buf,"%g",dval); + break; + default : + err=GRIB_WRONG_TYPE; + return err; + } + if (err && err != GRIB_NOT_FOUND) { + grib_context_log(c,GRIB_LOG_ERROR,"unable to create index. \"%s\": %s",index_key->name,grib_get_error_message(err)); + return err; + } + + if (!index_key->values->value) { + index_key->values->value=grib_context_strdup(c,buf); + index_key->values_count++; + } else { + v=index_key->values; + while (v->next && strcmp(v->value,buf)) v=v->next; + if (strcmp(v->value,buf)) { + index_key->values_count++; + if (v->next) v=v->next; + v->next=grib_context_malloc_clear(c,sizeof(grib_string_list)); + v->next->value=grib_context_strdup(c,buf); + } + } + + if (!field_tree->value) { + field_tree->value=grib_context_strdup(c,buf); + } else { + while (field_tree->next && + (field_tree->value==NULL || + strcmp(field_tree->value,buf))) + field_tree=field_tree->next; + + if (!field_tree->value || strcmp(field_tree->value,buf)){ + field_tree->next= + (grib_field_tree*)grib_context_malloc_clear(c, + sizeof(grib_field_tree)); + field_tree=field_tree->next; + field_tree->value=grib_context_strdup(c,buf); + } + } + + if (index_key->next) { + if (!field_tree->next_level) { + field_tree->next_level= + grib_context_malloc_clear(c,sizeof(grib_field_tree)); + } + field_tree=field_tree->next_level; + } + index_key=index_key->next; + } + + field=grib_context_malloc_clear(c,sizeof(grib_field)); + field->file=file; + index->count++; + field->offset=h->offset;; + + err=grib_get_long(h,"totalLength",&length); + if (err) return err; + field->length=length; + + + if (field_tree->field) { + grib_field* pfield=field_tree->field; + while (pfield->next) pfield=pfield->next; + pfield->next=field; + } else + field_tree->field=field; + + if (h) grib_handle_delete(h); + + } + + grib_file_close(file->name,&err); + + if (err) return err; + index->rewind=1; + return GRIB_SUCCESS; + +} + +grib_index* grib_index_new_from_file(grib_context* c, + char* filename,const char* keys,int *err) { + grib_index* index=NULL; + + if(!c) c=grib_context_get_default(); + + index=grib_index_new(c,keys,err); + + *err=grib_index_add_file(index,filename); + if (*err) { + grib_index_delete(index); + return NULL; + } + + return index; +} + +int grib_index_get_size(grib_index* index,const char* key,size_t* size) { + grib_index_key* k=index->keys; + while (k && strcmp(k->name,key)) k=k->next; + if (!k) return GRIB_NOT_FOUND; + *size=k->values_count; + return 0; +} + +int grib_index_get_string(grib_index* index,const char* key, + char** values,size_t *size) { + grib_index_key* k=index->keys; + grib_string_list* kv; + int i=0; + while (k && strcmp(k->name,key)) k=k->next; + if (!k) return GRIB_NOT_FOUND; + if (k->values_count>*size) return GRIB_ARRAY_TOO_SMALL; + kv=k->values; + while (kv) { + values[i++]=grib_context_strdup(index->context,kv->value); + kv=kv->next; + } + *size=k->values_count; + qsort(values,*size,sizeof(char*),&compare_string); + + return GRIB_SUCCESS; +} + +int grib_index_get_long(grib_index* index,const char* key, + long* values,size_t *size) { + grib_index_key* k=index->keys; + grib_string_list* kv; + int i=0; + while (k && strcmp(k->name,key)) k=k->next; + if (!k) return GRIB_NOT_FOUND; + if (k->type != GRIB_TYPE_LONG) { + grib_context_log(index->context,GRIB_LOG_ERROR, + "unable to get index %s as long"); + return GRIB_WRONG_TYPE; + } + if (k->values_count > *size) return GRIB_ARRAY_TOO_SMALL; + kv=k->values; + while (kv) { + if (strcmp(kv->value,GRIB_KEY_UNDEF) ) + values[i++]=atol(kv->value); + else + values[i++]=UNDEF_LONG; + kv=kv->next; + } + *size=k->values_count; + qsort(values,*size,sizeof(long),&compare_long); + + return GRIB_SUCCESS; +} + +int grib_index_get_double(grib_index* index,const char* key, + double* values,size_t *size) { + grib_index_key* k=index->keys; + grib_string_list* kv; + int i=0; + while (k && strcmp(k->name,key)) k=k->next; + if (!k) return GRIB_NOT_FOUND; + if (k->type != GRIB_TYPE_DOUBLE) { + grib_context_log(index->context,GRIB_LOG_ERROR, + "unable to get index %s as double"); + return GRIB_WRONG_TYPE; + } + if (k->values_count>*size) return GRIB_ARRAY_TOO_SMALL; + kv=k->values; + while (kv) { + if (strcmp(kv->value,GRIB_KEY_UNDEF) ) + values[i++]=atof(kv->value); + else + values[i++]=UNDEF_DOUBLE; + + kv=kv->next; + } + *size=k->values_count; + qsort(values,*size,sizeof(double),&compare_double); + + return GRIB_SUCCESS; +} + +int grib_index_select_long(grib_index* index,const char* skey,long value) { + grib_index_key* key=NULL; + int err=GRIB_NOT_FOUND; + + if (!index) { + grib_context* c=grib_context_get_default(); + grib_context_log(c,GRIB_LOG_ERROR,"null index pointer"); + return GRIB_INTERNAL_ERROR; + } + index->orderby=0; + key=index->keys; + + while (key) { + if (!strcmp(key->name,skey)) { + err=0; + break; + } + key=key->next; + } + + if (err) { + grib_context_log(index->context,GRIB_LOG_ERROR, + "key \"%s\" not found in index",skey); + return err; + } + + sprintf(key->value,"%ld",value); + grib_index_rewind(index); + return 0; +} + +int grib_index_select_double(grib_index* index,const char* skey,double value) { + grib_index_key* key=NULL; + int err=GRIB_NOT_FOUND; + + if (!index) { + grib_context* c=grib_context_get_default(); + grib_context_log(c,GRIB_LOG_ERROR,"null index pointer"); + return GRIB_INTERNAL_ERROR; + } + index->orderby=0; + key=index->keys; + + while (key ) { + if (!strcmp(key->name,skey)) { + err=0; + break; + } + key=key->next; + } + + if (err) { + grib_context_log(index->context,GRIB_LOG_ERROR, + "key \"%s\" not found in index",skey); + return err; + } + + sprintf(key->value,"%g",value); + grib_index_rewind(index); + return 0; +} + +int grib_index_select_string(grib_index* index,const char* skey,char* value) { + grib_index_key* key=NULL; + int err=GRIB_NOT_FOUND; + + if (!index) { + grib_context* c=grib_context_get_default(); + grib_context_log(c,GRIB_LOG_ERROR,"null index pointer"); + return GRIB_INTERNAL_ERROR; + } + index->orderby=0; + key=index->keys; + + while (key ) { + if (!strcmp(key->name,skey)) { + err=0; + break; + } + key=key->next; + } + + if (err) { + grib_context_log(index->context,GRIB_LOG_ERROR, + "key \"%s\" not found in index",skey); + return err; + } + + sprintf(key->value,"%s",value); + grib_index_rewind(index); + return 0; +} + +grib_handle* grib_index_get_handle(grib_field* field,int *err) { + grib_handle* h=NULL; + grib_file_open(field->file->name,"r",err); + + if (*err!=GRIB_SUCCESS) return NULL; + + fseeko(field->file->handle,field->offset,SEEK_SET); + h=grib_handle_new_from_file(0,field->file->handle,err); + if (*err!=GRIB_SUCCESS) return NULL; + + grib_file_close(field->file->name,err); + return h; +} + +static int grib_index_execute(grib_index* index) { + grib_index_key* keys=index->keys; + grib_field_tree* fields; + + if (!index) return GRIB_INTERNAL_ERROR; + + fields=index->fields; + index->rewind=0; + + while (keys) { + char* value; + if (keys->value[0]) value=keys->value; + else { + grib_context_log(index->context,GRIB_LOG_ERROR, + "please select a value for index key \"%s\"", + keys->name); + return GRIB_NOT_FOUND; + } + + while (fields && strcmp(fields->value,value)) + fields=fields->next; + if (fields && !strcmp(fields->value,value)) { + if (fields->next_level) { + keys=keys->next; + fields=fields->next_level; + } else { + index->current=index->fieldset; + while(index->current->next) index->current=index->current->next; + index->current->field=fields->field; + return 0; + } + } else return GRIB_END_OF_INDEX; + } + + return 0; +} + +void grib_index_dump(grib_index* index) { + +} + +char* grib_get_field_file(grib_index* index,off_t *offset) { + char* file=NULL; + if (index && index->current && index->current->field) { + file=index->current->field->file->name; + *offset=index->current->field->offset; + } + return file; +} + +grib_handle* grib_handle_new_from_index(grib_index* index,int *err) { + grib_index_key* keys; + grib_field_list *fieldset,*next; + grib_handle* h=NULL; + grib_context* c=NULL; + + if (!index) return NULL; + c=index->context; + if (!index->rewind) { + if (!index->current) { + *err=GRIB_END_OF_INDEX; + return NULL; + } + + if (index->current->field->next) + index->current->field=index->current->field->next; + else if(index->current->next) + index->current=index->current->next; + else {*err=GRIB_END_OF_INDEX;return NULL;} + + h=grib_index_get_handle(index->current->field,err); + return h; + } + + if (!index->fieldset) { + index->fieldset=grib_context_malloc_clear(index->context, + sizeof(grib_field_list)); + if (!index->fieldset) { + grib_context_log(index->context,GRIB_LOG_ERROR, + "unable to allocat %d bytes", + sizeof(grib_field_list)); + return NULL; + } + index->current=index->fieldset; + } else { + fieldset=index->fieldset; + while(fieldset->next) { + next=fieldset->next; + grib_context_free(c,fieldset); + fieldset=next; + } + fieldset->field=NULL; + fieldset->next=NULL; + index->fieldset=fieldset; + index->current=fieldset; + } + + *err=GRIB_END_OF_INDEX; + h=NULL; + keys=index->keys; + + if ((*err=grib_index_execute(index))==GRIB_SUCCESS) { + + if (!index->fieldset) {*err=GRIB_END_OF_INDEX;return NULL;} + index->current=index->fieldset; + h=grib_index_get_handle(index->current->field,err); + } + return h; + +} + +void grib_index_rewind(grib_index* index) { + index->rewind=1; +} + +static grib_index_key* search_key(grib_index_key* keys,grib_index_key* to_search) { + if (!keys || !strcmp(keys->name,to_search->name)) return keys; + return search_key(keys->next,to_search); +} + +int grib_index_search(grib_index* index,grib_index_key* keys) { + + grib_index_key* ki=index->keys; + grib_index_key* ks=keys; + + while (ks) { + ki=search_key(ki,ks); + if (!ki) { + ki=index->keys; + ki=search_key(ki,ks); + } + if (ki) sprintf(ki->value,"%s",ks->value); + ks=ks->next; + } + + grib_index_rewind(index); + return 0; +} + diff --git a/src/grib_io.c b/src/grib_io.c new file mode 100644 index 000000000..dcd3c97a1 --- /dev/null +++ b/src/grib_io.c @@ -0,0 +1,1124 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + + +#define GRIB 0x47524942 +#define BUDG 0x42554447 +#define TIDE 0x54494445 +#define BUFR 0x42554652 + +#define GRIB_API_READS_BUFR 1 + +typedef struct alloc_buffer { + size_t size; + void* buffer; +} alloc_buffer; + +typedef size_t (*readproc)(void*,void*,size_t,int*); +typedef int (*seekproc)(void*,off_t); +typedef off_t (*tellproc)(void*); +typedef void* (*allocproc)(void*,size_t*,int*); + + +typedef struct reader { + void *read_data; + readproc read; + + void *alloc_data; + allocproc alloc; + int headers_only; + + seekproc seek; + tellproc tell; + off_t offset; + + size_t message_size; + +} reader; + + +static int read_the_rest(reader* r,size_t message_length,unsigned char* tmp, int already_read) +{ + int err = 0; + size_t buffer_size; + size_t rest; + unsigned char* buffer; + + buffer_size = message_length; + rest=message_length-already_read; + r->message_size=message_length; + + buffer = (unsigned char*)r->alloc(r->alloc_data,&buffer_size,&err); + if(err) return err; + + if(buffer_size < message_length) + { + if(buffer_size < already_read) + { + memcpy(buffer,tmp,buffer_size); + return GRIB_BUFFER_TOO_SMALL; + } + + memcpy(buffer,tmp,already_read); + if((r->read(r->read_data,buffer+already_read,buffer_size-already_read,&err) != buffer_size-already_read) || err) + return err; + + return GRIB_BUFFER_TOO_SMALL; + } + + memcpy(buffer,tmp,already_read); + + if((r->read(r->read_data,buffer+already_read,rest,&err) != rest) || err) + return err; + + if(!r->headers_only && (buffer[message_length-4] != '7' || + buffer[message_length-3] != '7' || + buffer[message_length-2] != '7' || + buffer[message_length-1] != '7')) { + + return GRIB_WRONG_LENGTH; + } + + + return GRIB_SUCCESS; +} + +#define CHECK_TMP_SIZE(a) if(sizeof(tmp)<(a)) { fprintf(stderr,"%s:%d sizeof(tmp)<%s %d<%d\n", __FILE__,__LINE__,#a,(int)sizeof(tmp),(int)(a)); return GRIB_INTERNAL_ARRAY_TOO_SMALL; } + +#define GROW_BUF_IF_REQUIRED(desired_length) if (buf->length<(desired_length)) { grib_grow_buffer(c, buf, desired_length); tmp=buf->data; } + +#define UINT3(a,b,c) (size_t)((a<<16) + (b<<8) + c); + +static int read_GRIB(reader* r) +{ + unsigned char *tmp=NULL; + size_t length = 0; + size_t total_length = 0; + long edition = 0; + int err = 0; + int i = 0 ,j; + size_t sec1len = 0; + size_t sec2len = 0; + size_t sec3len = 0; + size_t sec4len = 0; + unsigned long flags; + size_t buflen=16368; + grib_context* c; + grib_buffer* buf; + + /*TODO proper context*/ + c=grib_context_get_default(); + tmp=grib_context_malloc_clear(c,buflen); + buf=grib_new_buffer(c,tmp,buflen); + buf->property = GRIB_MY_BUFFER; + + tmp[i++] = 'G'; + tmp[i++] = 'R'; + tmp[i++] = 'I'; + tmp[i++] = 'B'; + + r->offset=r->tell(r->read_data)-4; + + if(r->read(r->read_data,&tmp[i],3,&err) != 3 || err) + return err; + + length= UINT3(tmp[i],tmp[i+1],tmp[i+2]); + i+=3; + + /* Edition number */ + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + edition = tmp[i++]; + + switch(edition) + { + case 1: + if (r->headers_only) { + /* Read section 1 length */ + if(r->read(r->read_data,&tmp[i],3,&err) != 3 || err) + return err; + + sec1len=UINT3(tmp[i],tmp[i+1],tmp[i+2]); + i+=3; + /* Read section 1. 3 = length */ + if((r->read(r->read_data,tmp+i,sec1len-3,&err) != sec1len-3) || err) + return err; + flags = tmp[15]; + + i += sec1len-3; + + GROW_BUF_IF_REQUIRED(8+ sec1len + 4 + 3); + + if(flags & (1<<7)) { + /* Section 2 */ + if(r->read(r->read_data,&tmp[i],3,&err) != 3 || err) + return err; + + sec2len=UINT3(tmp[i],tmp[i+1],tmp[i+2]); + i+=3; + /* Read section 2 */ + if((r->read(r->read_data,tmp+i,sec2len-3,&err) != sec2len-3) || err) + return err; + i += sec2len-3; + } + + GROW_BUF_IF_REQUIRED(8+sec1len + sec2len + 4 + 3); + + total_length=length; + length=8+sec1len + sec2len; + + } + else if(length & 0x800000) + { + + /* Large GRIBs */ + + /* Read section 1 length */ + for(j=0;j<3;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + sec1len <<= 8; + sec1len |= tmp[i]; + i++; + } + + /* table version */ + if(r->read(r->read_data,&tmp[i++],1,&err) != 1 || err) return err; + /* center */ + if(r->read(r->read_data,&tmp[i++],1,&err) != 1 || err) return err; + /* process */ + if(r->read(r->read_data,&tmp[i++],1,&err) != 1 || err) return err; + /* grid */ + if(r->read(r->read_data,&tmp[i++],1,&err) != 1 || err) return err; + /* flags */ + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) return err; + flags = tmp[i++]; + + /* fprintf(stderr," sec1len=%d i=%d flags=%x\n",sec1len,i,flags); */ + + GROW_BUF_IF_REQUIRED(8+sec1len + 4 + 3); + + /* Read section 1. 3 = length, 5 = table,center,process,grid,flags */ + if((r->read(r->read_data,tmp+i,sec1len-3-5,&err) != sec1len-3-5) || err) + return err; + + i += sec1len-3-5; + + if(flags & (1<<7)) { + /* Section 2 */ + for(j=0;j<3;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + sec2len <<= 8; + sec2len |= tmp[i]; + i++; + } + /* Read section 2 */ + if((r->read(r->read_data,tmp+i,sec2len-3,&err) != sec2len-3) || err) + return err; + i += sec2len-3; + } + + GROW_BUF_IF_REQUIRED(sec1len + sec2len + 4 + 3); + + if(flags & (1<<6)) { + + /* Section 3 */ + for(j=0;j<3;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + sec3len <<= 8; + sec3len |= tmp[i]; + i++; + } + + /* Read section 3 */ + GROW_BUF_IF_REQUIRED(sec1len + sec2len + sec3len + 4 + 3); + if((r->read(r->read_data,tmp+i,sec3len-3,&err) != sec3len-3) || err) + return err; + i += sec3len-3; + } + + /* fprintf(stderr,"%s sec1len=%d i=%d\n",type,sec1len,i); */ + + GROW_BUF_IF_REQUIRED(sec1len + sec2len + sec3len + 4 + 3); + + + for(j=0;j<3;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + sec4len <<= 8; + sec4len |= tmp[i]; + i++; + } + + if(sec4len < 120) + { + /* Special coding */ + length &= 0x7fffff; + length *= 120; + length -= sec4len; + length += 4; + } + else + { + /* length is already set to the right value */ + } + + } + break; + + case 2: + length = 0; + + if(sizeof(long) >= 8) { + for(j=0;j<8;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + length <<= 8; + length |= tmp[i]; + i++; + } + } + else + { + /* Check if the length fits in a long */ + for(j=0;j<4;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + length <<= 8; + length |= tmp[i]; + i++; + } + + if(length) + return GRIB_MESSAGE_TOO_LARGE; /* Message too large */ + + for(j=0;j<4;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + length <<= 8; + length |= tmp[i]; + i++; + } + } + break; + + default: + /* fprintf(stderr,"GRIB edition is %d len=%d\n",(int)edition,length); */ + return GRIB_NOT_IMPLEMENTED; + break; + } + + Assert(i <= buf->length); + err=read_the_rest(r,length,tmp,i); + if (r->headers_only && edition==1) { + err=r->seek(r->read_data,total_length-length); + } + + grib_buffer_delete(c,buf); + + return err; + +} + +static int read_TIDE(reader *r,const char* type) +{ + unsigned char tmp[32]; /* Should be enough */ + size_t sec1len = 0; + size_t sec4len = 0; + int err = 0; + int i = 0, j = 0; + + for(j = 0; j < 4; j++) + { + tmp[i] = type[i]; + i++; + } + + + for(j=0;j<3;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + sec1len <<= 8; + sec1len |= tmp[i]; + i++; + } + + /* fprintf(stderr,"%s sec1len=%d i=%d\n",type,sec1len,i); */ + + CHECK_TMP_SIZE(sec1len + 4 + 3 ); + + + /* Read sectoin1 */ + if((r->read(r->read_data,tmp+i,sec1len-3,&err) != sec1len-3) || err) + return err; + + i += sec1len-3; + + for(j=0;j<3;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + sec4len <<= 8; + sec4len |= tmp[i]; + i++; + } + + /* fprintf(stderr,"%s sec4len=%d i=%d l=%d\n",type,sec4len,i,4+sec1len+sec4len+4); */ + + Assert(i <= sizeof(tmp)); + return read_the_rest(r,4+sec1len+sec4len+4,tmp,i); + +} + +static int read_BUFR(reader *r) +{ + unsigned char tmp[65536]; /* Should be enough */ + size_t length = 0; + long edition = 0; + int err = 0; + int i = 0 ,j; + + tmp[i++] = 'B'; + tmp[i++] = 'U'; + tmp[i++] = 'F'; + tmp[i++] = 'R'; + + for(j=0;j<3;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + length <<= 8; + length |= tmp[i]; + i++; + } + + /* Edition number */ + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + edition = tmp[i++]; + + /* assert(edition != 1); */ + + if(edition<2) + { + int n; + size_t sec1len = 0; + size_t sec2len = 0; + size_t sec3len = 0; + size_t sec4len = 0; + unsigned long flags; + + sec1len = length; + + /* table version */ + if(r->read(r->read_data,&tmp[i++],1,&err) != 1 || err) return err; + /* center */ + if(r->read(r->read_data,&tmp[i++],1,&err) != 1 || err) return err; + /* update */ + if(r->read(r->read_data,&tmp[i++],1,&err) != 1 || err) return err; + /* flags */ + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) return err; + flags = tmp[i++]; + + + CHECK_TMP_SIZE(sec1len + 4 + 3 ); + + /* Read section 1. 3 = length, 5 = table,center,process,flags */ + + n = sec1len - 8; /* Just a guess */ + if((r->read(r->read_data,tmp+i,n,&err) != n) || err) + return err; + + i += n; + + if(flags & (1<<7)) { + /* Section 2 */ + for(j=0;j<3;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + sec2len <<= 8; + sec2len |= tmp[i]; + i++; + } + + /* Read section 2 */ + if((r->read(r->read_data,tmp+i,sec2len-3,&err) != sec2len-3) || err) + return err; + i += sec2len-3; + } + + CHECK_TMP_SIZE(sec1len + sec2len + 4 + 3 ); + + + /* Section 3 */ + for(j=0;j<3;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + sec3len <<= 8; + sec3len |= tmp[i]; + i++; + } + + /* Read section 3 */ + if((r->read(r->read_data,tmp+i,sec3len-3,&err) != sec3len-3) || err) + return err; + i += sec3len-3; + + + CHECK_TMP_SIZE( sec1len + sec2len + sec3len + 4 + 3 ); + + + for(j=0;j<3;j++) + { + if(r->read(r->read_data,&tmp[i],1,&err) != 1 || err) + return err; + + sec4len <<= 8; + sec4len |= tmp[i]; + i++; + } + + /* fprintf(stderr," sec1len=%d sec2len=%d sec3len=%d sec4len=%d\n",sec1len, sec2len,sec3len,sec4len); */ + length = 4 + sec1len + sec2len + sec3len + sec4len + 4; + /* fprintf(stderr,"length = %d i = %d\n",length,i); */ + } + + Assert(i <= sizeof(tmp)); + return read_the_rest(r,length,tmp,i); +} + + +static int read_any(reader *r,int grib_ok,int bufr_ok) +{ + unsigned char c; + int err = 0; + unsigned long magic = 0; + + while(r->read(r->read_data,&c,1,&err) == 1 && err == 0) + { + magic <<= 8; + magic |= c; + + switch(magic & 0xffffffff) + { + + case GRIB: + if(grib_ok) + { + err = read_GRIB(r); + return err == GRIB_END_OF_FILE ? GRIB_PREMATURE_END_OF_FILE : err; /* Premature EOF */ + } + break; + + case BUFR: + if(bufr_ok) + { + err = read_BUFR(r); + return err == GRIB_END_OF_FILE ? GRIB_PREMATURE_END_OF_FILE : err; /* Premature EOF */ + } + break; + + case BUDG: + case TIDE: + if(grib_ok) + { + err = read_TIDE(r,magic == TIDE ? "TIDE" : "BUDG"); + return err == GRIB_END_OF_FILE ? GRIB_PREMATURE_END_OF_FILE : err; /* Premature EOF */ + } + break; + + } + } + + return err; + +} + +static int read_any_gts(reader *r) +{ + unsigned char c; + int err = 0; + unsigned char* buffer=NULL; + unsigned long magic = 0; + unsigned long start = 0x010d0d0a; + unsigned long end = 0x0d0d0a03; + unsigned char tmp[32]={0,}; /* Should be enough */ + size_t message_size=0; + size_t already_read=0; + int i=0; + + while(r->read(r->read_data,&c,1,&err) == 1 && err == 0) + { + magic <<= 8; + magic |= c; + magic &= 0xffffffff; + + if (magic == start) { + tmp[i++]=0x01; + tmp[i++]=0x0d; + tmp[i++]=0x0d; + tmp[i++]=0x0a; + + r->offset=r->tell(r->read_data)-4; + + if(r->read(r->read_data,&tmp[i],6,&err) != 6 || err) + return err == GRIB_END_OF_FILE ? GRIB_PREMATURE_END_OF_FILE : err; /* Premature EOF */ + + if (tmp[7] != 0x0d || tmp[8]!= 0x0d || tmp[9]!=0x0a) { + r->seek(r->read_data,-6); + continue; + } + magic=0; + already_read=10; + message_size=already_read; + while(r->read(r->read_data,&c,1,&err) == 1 && err == 0) { + message_size++; + magic <<= 8; + magic |= c; + magic &= 0xffffffff; + if (magic == end) { + r->seek(r->read_data,already_read-message_size); + buffer = (unsigned char*)r->alloc(r->alloc_data,&message_size,&err); + if (!buffer) return GRIB_OUT_OF_MEMORY; + if (err) return err; + memcpy(buffer,tmp,already_read); + r->read(r->read_data,buffer+already_read,message_size-already_read,&err); + r->message_size=message_size; + return err; + } + } + } + } + + return err; +} + +off_t stdio_tell(void* data) { + FILE* f = (FILE*)data; + return ftello(f); +} + +int stdio_seek(void* data,off_t len) { + FILE* f = (FILE*)data; + int err=0; + if (fseeko(f,len,SEEK_CUR)) err=GRIB_IO_PROBLEM; + return err; +} + +size_t stdio_read(void* data,void* buf,size_t len,int* err) +{ + FILE* f = (FILE*)data; + size_t n; + /* char iobuf[1024*1024]; */ + + if (len==0) return 0; + + /* setvbuf(f,iobuf,_IOFBF,sizeof(iobuf)); */ + n = fread(buf,1,len,f); + /* fprintf(stderr,"read %d = %x %c\n",1,(int)buf[0],buf[0]); */ + if(n != len) { + /* fprintf(stderr,"Failed to read %d, only got %d\n",len,n); */ + *err = GRIB_IO_PROBLEM; + if(feof(f)) *err = GRIB_END_OF_FILE; + if(ferror(f)) *err = GRIB_IO_PROBLEM; + } + return n; +} + + +/*================== */ +typedef struct user_buffer { + void* user_buffer; + size_t buffer_size; +} user_buffer; + +static void* user_provider_buffer(void *data,size_t* length,int *err) +{ + user_buffer *u = (user_buffer*)data; + *length = u->buffer_size; + return u->user_buffer; +} + +static +int _wmo_read_any_from_file(FILE* f,void* buffer,size_t* len,int grib_ok,int bufr_ok) +{ + int err; + user_buffer u; + reader r; + + u.user_buffer = buffer; + u.buffer_size = *len; + + r.read_data = f; + r.read = &stdio_read; + r.seek = &stdio_seek; + r.tell = &stdio_tell; + r.alloc_data = &u; + r.alloc = &user_provider_buffer; + r.headers_only = 0; + + + err = read_any(&r,grib_ok,bufr_ok); + *len = r.message_size; + + return err; +} + +int wmo_read_any_from_file(FILE* f,void* buffer,size_t* len) +{ + return _wmo_read_any_from_file(f,buffer,len,1,1); +} + +int wmo_read_grib_from_file(FILE* f,void* buffer,size_t* len) +{ + return _wmo_read_any_from_file(f,buffer,len,1,0); +} + +int wmo_read_bufr_from_file(FILE* f,void* buffer,size_t* len) +{ + return _wmo_read_any_from_file(f,buffer,len,0,1); +} + +int wmo_read_gts_from_file(FILE* f,void* buffer,size_t* len) +{ + int err; + user_buffer u; + reader r; + + u.user_buffer = buffer; + u.buffer_size = *len; + + r.read_data = f; + r.read = &stdio_read; + r.seek = &stdio_seek; + r.tell = &stdio_tell; + r.alloc_data = &u; + r.alloc = &user_provider_buffer; + r.headers_only = 0; + + err = read_any_gts(&r); + *len = r.message_size; + + return err; +} + +/*================== */ + +typedef struct stream_struct { + + void* stream_data; + long (*stream_proc)(void*,void* buffer,long len); + +} stream_struct; + +static off_t stream_tell(void* data) +{ + return 0; +} + +static int stream_seek(void* data,off_t len) +{ + return 0; +} +static size_t stream_read(void* data,void* buffer,size_t len,int* err) +{ + stream_struct *s = (stream_struct*)data; + long n = len; + + if(n != len) { + /* size_t cannot be coded into long */ + *err = GRIB_INTERNAL_ERROR; + return -1; + } + + n = s->stream_proc(s->stream_data,buffer,len); + if(n != len) { + *err = GRIB_IO_PROBLEM; + if(n == -1) *err = GRIB_END_OF_FILE; + } + return n; +} + + +int wmo_read_any_from_stream(void* stream_data,long (*stream_proc)(void*,void* buffer,long len) ,void* buffer,size_t* len) +{ + int err; + stream_struct s; + user_buffer u; + reader r; + + s.stream_data = stream_data; + s.stream_proc = stream_proc; + + u.user_buffer = buffer; + u.buffer_size = *len; + + r.read_data = &s; + r.read = &stream_read; + r.seek = &stream_seek; + r.tell = &stream_tell; + r.alloc_data = &u; + r.alloc = &user_provider_buffer; + r.headers_only = 0; + + err = read_any(&r,1,1); + *len = r.message_size; + + return err; +} + +/*================== */ + +static void* allocate_buffer(void *data,size_t* length,int *err) +{ + alloc_buffer *u = (alloc_buffer*)data; + u->buffer = malloc(*length); + u->size=*length; + if(u->buffer == NULL) + *err = GRIB_OUT_OF_MEMORY; /* Cannot allocate buffer */ + return u->buffer; +} + +void *wmo_read_gts_from_file_malloc(FILE* f,size_t *size,int* err) +{ + alloc_buffer u; + reader r; + + u.buffer = NULL; + + r.read_data = f; + r.read = &stdio_read; + r.seek = &stdio_seek; + r.tell = &stdio_tell; + r.alloc_data = &u; + r.alloc = &allocate_buffer; + r.headers_only = 0; + + *err = read_any_gts(&r); + *size=r.message_size; + + return u.buffer; +} +static void *_wmo_read_any_from_file_malloc(FILE* f,int* err,size_t *size,int grib_ok,int bufr_ok) +{ + alloc_buffer u; + reader r; + + u.buffer = NULL; + + r.read_data = f; + r.read = &stdio_read; + r.seek = &stdio_seek; + r.tell = &stdio_tell; + r.alloc_data = &u; + r.alloc = &allocate_buffer; + r.headers_only = 0; + + *err = read_any(&r,grib_ok,bufr_ok); + *size=r.message_size; + + return u.buffer; +} +void *wmo_read_any_from_file_malloc(FILE* f,size_t *size,int* err) +{ + return _wmo_read_any_from_file_malloc(f,err,size,1,1); +} + +void *wmo_read_grib_from_file_malloc(FILE* f,size_t *size,int* err) +{ + return _wmo_read_any_from_file_malloc(f,err,size,1,0); +} + +void *wmo_read_bufr_from_file_malloc(FILE* f,size_t *size,int* err) +{ + return _wmo_read_any_from_file_malloc(f,err,size,0,1); +} + +/* ======================================= */ + +typedef struct context_alloc_buffer { + grib_context* ctx; + void* buffer; + size_t length; +} context_alloc_buffer; + +static void* context_allocate_buffer(void *data,size_t* length,int *err) +{ + context_alloc_buffer *u = (context_alloc_buffer*)data; + u->buffer = grib_context_malloc(u->ctx,*length); + u->length = *length; + + if(u->buffer == NULL) + *err = GRIB_OUT_OF_MEMORY; /* Cannot allocate buffer */ + return u->buffer; +} + + + +int grib_read_any_headers_only_from_file_alloc(grib_context* ctx,FILE* f,void **buffer,size_t* length,off_t* offset) +{ + int err; + context_alloc_buffer u; + reader r; + + u.buffer = NULL; + u.length = 0; + u.ctx = ctx ? ctx : grib_context_get_default(); + + r.read_data = f; + r.read = &stdio_read; + r.seek = &stdio_seek; + r.tell = &stdio_tell; + r.alloc_data = &u; + r.alloc = &context_allocate_buffer; + r.headers_only = 1; + + err = read_any(&r,1,GRIB_API_READS_BUFR); + + *buffer = u.buffer; + *length = u.length; + *offset = r.offset; + + return err; +} + +int grib_read_any_from_file_alloc(grib_context* ctx,FILE* f,void **buffer,size_t* length) +{ + int err; + context_alloc_buffer u; + reader r; + + u.buffer = NULL; + u.length = 0; + u.ctx = ctx ? ctx : grib_context_get_default(); + + r.read_data = f; + r.read = &stdio_read; + r.seek = &stdio_seek; + r.tell = &stdio_tell; + r.alloc_data = &u; + r.alloc = &context_allocate_buffer; + r.headers_only = 0; + + err = read_any(&r,1,GRIB_API_READS_BUFR); + + *buffer = u.buffer; + *length = u.length; + + return err; +} + + +int grib_read_any_headers_only_from_file(grib_context* ctx,FILE* f,void* buffer,size_t* len) +{ + int err; + user_buffer u; + reader r; + + u.user_buffer = buffer; + u.buffer_size = *len; + + r.read_data = f; + r.read = &stdio_read; + r.seek = &stdio_seek; + r.tell = &stdio_tell; + r.alloc_data = &u; + r.alloc = &user_provider_buffer; + r.headers_only = 1; + + err = read_any(&r,1,GRIB_API_READS_BUFR); + + *len = r.message_size; + + return err; +} + +int grib_read_any_from_file(grib_context* ctx,FILE* f,void* buffer,size_t* len) +{ + int err; + user_buffer u; + reader r; + off_t offset; + + u.user_buffer = buffer; + u.buffer_size = *len; + + r.read_data = f; + r.read = &stdio_read; + r.seek = &stdio_seek; + r.tell = &stdio_tell; + r.alloc_data = &u; + r.alloc = &user_provider_buffer; + r.headers_only = 0; + + + offset=ftello(f); + + err = read_any(&r,1,GRIB_API_READS_BUFR); + + if (err==GRIB_BUFFER_TOO_SMALL) { + if (fseeko(f,offset,SEEK_SET)) + err=GRIB_IO_PROBLEM; + } + + *len = r.message_size; + + return err; +} + +/* ======================================= */ + +typedef struct memory_read_data { + unsigned char *data; + size_t data_len; +} memory_read_data; + +static off_t memory_tell(void* data) +{ + return 0; +} + +static int memory_seek(void* data,off_t len) +{ + return 0; +} + +static size_t memory_read(void* data,void* buf,size_t len,int* err) +{ + memory_read_data *m = (memory_read_data*)data; + + if(len == 0) + { + *err = GRIB_END_OF_FILE; + return 0; + } + else { + size_t l = len > m->data_len ? m->data_len : len; + memcpy(buf,m->data,l); + m->data_len -= l; + m->data += l; + return l; + } +} + + +int grib_read_any_from_memory_alloc(grib_context* ctx,unsigned char** data,size_t* data_length,void **buffer,size_t* length) +{ + int err; + memory_read_data m; + context_alloc_buffer u; + reader r; + + m.data = *data; + m.data_len = *data_length; + + u.buffer = NULL; + u.length = 0; + u.ctx = ctx ? ctx : grib_context_get_default(); + + r.read_data = &m; + r.read = &memory_read; + r.seek = &memory_seek; + r.tell = &memory_tell; + r.alloc_data = &u; + r.alloc = &context_allocate_buffer; + r.headers_only = 0; + + err = read_any(&r,1,GRIB_API_READS_BUFR); + *buffer = u.buffer; + *length = u.length; + + *data_length = m.data_len; + *data = m.data; + + return err; +} + + +int grib_read_any_from_memory(grib_context* ctx,unsigned char** data,size_t* data_length,void* buffer,size_t* len) +{ + int err; + memory_read_data m; + user_buffer u; + reader r; + + m.data = *data; + m.data_len = *data_length; + + + u.user_buffer = buffer; + u.buffer_size = *len; + + r.read_data = &m; + r.read = &memory_read; + r.seek = &memory_seek; + r.tell = &memory_tell; + r.alloc_data = &u; + r.alloc = &user_provider_buffer; + r.headers_only = 0; + + err = read_any(&r,1,GRIB_API_READS_BUFR); + *len = r.message_size; + + *data_length = m.data_len; + *data = m.data; + + + return err; +} + +int grib_count_in_file(grib_context* c, FILE* f,int* n) { + int err=0; + void* mesg=NULL; + size_t size=0; + *n=0; + if (!c) c=grib_context_get_default(); + + while ( (err=grib_read_any_from_file_alloc (c, f, &mesg , &size))==GRIB_SUCCESS) { + grib_context_free(c,mesg); + (*n)++; + } + + rewind(f); + + return err==GRIB_END_OF_FILE ? 0 : err; + +} + + + diff --git a/src/grib_iterator.c b/src/grib_iterator.c new file mode 100644 index 000000000..177033c8c --- /dev/null +++ b/src/grib_iterator.c @@ -0,0 +1,134 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +int grib_get_data(grib_handle* h,double* lats, double* lons,double* values,size_t* size) { + int err=0; + grib_iterator* iter=NULL; + double *lat,*lon,*val; + + iter=grib_iterator_new(h,0,&err); + if (!iter || err!=GRIB_SUCCESS) return err; + + if (iter) { + lat=lats; lon=lons; val=values; + while(grib_iterator_next(iter,lat++,lon++,val++)) {} + } + + grib_iterator_delete( iter); + + return err; +} + +int grib_iterator_next(grib_iterator *i,double* lat,double* lon,double* value) +{ + grib_iterator_class *c = i->cclass; + while(c) + { + grib_iterator_class *s = c->super ? *(c->super) : NULL; + if(c->next) return c->next(i, lat, lon, value); + c = s; + } + Assert(0); + return 0; +} + +int grib_iterator_has_next(grib_iterator *i) +{ + grib_iterator_class *c = i->cclass; + while(c) + { + grib_iterator_class *s = c->super ? *(c->super) : NULL; + if(c->has_next) return c->has_next(i); + c = s; + } + Assert(0); + return 0; +} + + +int grib_iterator_previous(grib_iterator *i,double* lat,double* lon,double* value) +{ + grib_iterator_class *c = i->cclass; + while(c) + { + grib_iterator_class *s = c->super ? *(c->super) : NULL; + if(c->previous) return c->previous(i, lat, lon, value); + c = s; + } + Assert(0); + return 0; +} + + +int grib_iterator_reset(grib_iterator *i) +{ + grib_iterator_class *c = i->cclass; + while(c) + { + grib_iterator_class *s = c->super ? *(c->super) : NULL; + if(c->reset) return c->reset(i); + c = s; + } + Assert(0); + return 0; +} + + +/* For this one, ALL init are called */ + +static int init_iterator(grib_iterator_class* c,grib_iterator* i, grib_handle *h, grib_arguments* args) +{ + + if(c) { + int ret = GRIB_SUCCESS; + grib_iterator_class *s = c->super ? *(c->super) : NULL; + if(!c->inited) + { + if(c->init_class) c->init_class(c); + c->inited = 1; + } + if(s) ret = init_iterator(s,i,h,args); + + if(ret != GRIB_SUCCESS) return ret; + + if(c->init) return c->init(i,h, args); + } + return GRIB_INTERNAL_ERROR; +} + +int grib_iterator_init(grib_iterator* i, grib_handle *h, grib_arguments* args) +{ + return init_iterator(i->cclass,i,h,args); +} + +/* For this one, ALL destroy are called */ + +int grib_iterator_delete(grib_iterator *i) +{ + grib_iterator_class *c = i->cclass; + while(c) + { + grib_iterator_class *s = c->super ? *(c->super) : NULL; + if(c->destroy) c->destroy(i); + c = s; + } + /* This should go in a top class */ + grib_context_free(i->h->context,i); + return 0; +} + + diff --git a/src/grib_iterator_class.c b/src/grib_iterator_class.c new file mode 100644 index 000000000..d1a356378 --- /dev/null +++ b/src/grib_iterator_class.c @@ -0,0 +1,59 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 * + * Enrico Fucile + * * + ***************************************************************************/ + +#include "grib_api_internal.h" + +#define NUMBER(x) (sizeof(x)/sizeof(x[0])) + +/* This file is generated my ./make_class.pl */ +#include "grib_iterator_class.h" + +struct table_entry +{ + char *type; + grib_iterator_class **cclass; +}; + +static struct table_entry table[] = +{ + /* This file is generated my ./make_class.pl */ +#include "grib_iterator_factory.h" +}; + +grib_iterator* grib_iterator_factory( grib_handle* h, grib_arguments* args, unsigned long flags,int *ret) +{ + int i; + char* type = (char*)grib_arguments_get_name(h,args,0); + + for(i = 0; i < NUMBER(table) ; i++) + if(strcmp(type,table[i].type) == 0) + { + grib_iterator_class* c = *(table[i].cclass); + grib_iterator* it = (grib_iterator*) grib_context_malloc_clear(h->context,c->size); + it->cclass = c; + it->flags = flags; + *ret = GRIB_SUCCESS; + *ret = grib_iterator_init(it,h,args); + if(*ret == GRIB_SUCCESS) return it; + grib_context_log(h->context,GRIB_LOG_DEBUG,"grib_iterator_factory: error %d instantiating iterator %s", *ret, table[i].type); + grib_iterator_delete(it); + return NULL; + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"grib_iterator_factory : Unknown type : %s for iterator", type); + + return NULL; +} diff --git a/src/grib_iterator_class.h b/src/grib_iterator_class.h new file mode 100644 index 000000000..6c8d4ff79 --- /dev/null +++ b/src/grib_iterator_class.h @@ -0,0 +1,10 @@ +/* This file is automatically generated by ./make_class.pl, do not edit */ +extern grib_iterator_class* grib_iterator_class_gaussian; +extern grib_iterator_class* grib_iterator_class_gaussian_reduced; +extern grib_iterator_class* grib_iterator_class_gen; +extern grib_iterator_class* grib_iterator_class_lambert_azimuthal_equal_area; +extern grib_iterator_class* grib_iterator_class_lambert_conformal; +extern grib_iterator_class* grib_iterator_class_latlon; +extern grib_iterator_class* grib_iterator_class_latlon_reduced; +extern grib_iterator_class* grib_iterator_class_polar_stereographic; +extern grib_iterator_class* grib_iterator_class_regular; diff --git a/src/grib_iterator_class_gaussian.c b/src/grib_iterator_class_gaussian.c new file mode 100644 index 000000000..238b2a2ad --- /dev/null +++ b/src/grib_iterator_class_gaussian.c @@ -0,0 +1,172 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = iterator + SUPER = grib_iterator_class_regular + IMPLEMENTS = init + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "iterator.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_iterator_class*); + +static int init (grib_iterator* i,grib_handle*,grib_arguments*); + + +typedef struct grib_iterator_gaussian{ + grib_iterator it; +/* Members defined in gen */ + long carg; + const char* missingValue; +/* Members defined in regular */ + double *las; + double *los; + long nap; + long nam; + long iScansNegatively; +/* Members defined in gaussian */ +} grib_iterator_gaussian; + +extern grib_iterator_class* grib_iterator_class_regular; + +static grib_iterator_class _grib_iterator_class_gaussian = { + &grib_iterator_class_regular, /* super */ + "gaussian", /* name */ + sizeof(grib_iterator_gaussian),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + 0, /* destructor */ + 0, /* Next Value */ + 0, /* Previous Value */ + 0, /* Reset the counter */ + 0, /* has next values */ +}; + +grib_iterator_class* grib_iterator_class_gaussian = &_grib_iterator_class_gaussian; + + +static void init_class(grib_iterator_class* c) +{ + c->next = (*(c->super))->next; + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; +} +/* END_CLASS_IMP */ + +static void binary_search(double xx[], const unsigned long n, double x, unsigned long *j); + +static int init(grib_iterator* i,grib_handle* h,grib_arguments *args){ + grib_iterator_gaussian* self = (grib_iterator_gaussian*)i; + + double *lats; + double laf; + double lal; + long trunc; + long lai; + long jScansPositively=0; + int size; + double start; + unsigned long istart=0; + + int ret = GRIB_SUCCESS; + + const char* latofirst = grib_arguments_get_name(h,args,self->carg++); + const char* latoflast = grib_arguments_get_name(h,args,self->carg++); + const char* numtrunc = grib_arguments_get_name(h,args,self->carg++); + const char* s_jScansPositively = grib_arguments_get_name(h,args,self->carg++); + + + if((ret = grib_get_double_internal(h,latofirst, &laf))) return ret; + if((ret = grib_get_double_internal(h,latoflast, &lal))) return ret; + if((ret = grib_get_long_internal(h,numtrunc,&trunc))) return ret; + if((ret = grib_get_long_internal(h,s_jScansPositively,&jScansPositively))) + return ret; + + start=laf; + + size=trunc*2; + + lats = grib_context_malloc(h->context,size*sizeof(double)); + + ret = grib_get_gaussian_latitudes(trunc, lats); + + if(ret != GRIB_SUCCESS) { + grib_context_log(h->context, GRIB_LOG_ERROR,"error %d calculating gaussian points",ret); + return ret; + } +/* + for(loi=(trunc*2)-1;loi>=0;loi--) + if(fabs(lats[loi] - lal) < glatPrecision) break; + + + for(j=(trunc*2)-1;j>0;j--) { + if(fabs(lats[j] - laf) < glatPrecision) break; + } +*/ + + binary_search(lats,size-1,start,&istart); + + if (jScansPositively) { + for(lai=0;lainam;lai++) { + self->las[lai] = lats[istart--]; + if (istart<0) istart=size-1; + } + } else { + for(lai=0;lainam;lai++) { + self->las[lai] = lats[istart++]; + if (istart>size-1) istart=0; + } + } + + grib_context_free(h->context,lats); + + return ret; + +} + +static void binary_search(double xx[], const unsigned long n, double x, unsigned long *j) +{ + /*These routine works only on descending ordered arrays*/ + unsigned long ju,jm,jl; + jl=0; + ju=n; + while (ju-jl > 1) { + jm=(ju+jl) >> 1; + if (x <= xx[jm]) jl=jm; + else ju=jm; + } + *j=jl; +} + + diff --git a/src/grib_iterator_class_gaussian_reduced.c b/src/grib_iterator_class_gaussian_reduced.c new file mode 100644 index 000000000..d0c34ed43 --- /dev/null +++ b/src/grib_iterator_class_gaussian_reduced.c @@ -0,0 +1,208 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = iterator + SUPER = grib_iterator_class_gen + IMPLEMENTS = destroy + IMPLEMENTS = init;next + MEMBERS = double *las + MEMBERS = double *los + MEMBERS = long nam + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "iterator.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_iterator_class*); + +static int init (grib_iterator* i,grib_handle*,grib_arguments*); +static int next (grib_iterator* i, double *lat, double *lon, double *val); +static int destroy (grib_iterator* i); + + +typedef struct grib_iterator_gaussian_reduced{ + grib_iterator it; +/* Members defined in gen */ + long carg; + const char* missingValue; +/* Members defined in gaussian_reduced */ + double *las; + double *los; + long nam; +} grib_iterator_gaussian_reduced; + +extern grib_iterator_class* grib_iterator_class_gen; + +static grib_iterator_class _grib_iterator_class_gaussian_reduced = { + &grib_iterator_class_gen, /* super */ + "gaussian_reduced", /* name */ + sizeof(grib_iterator_gaussian_reduced),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &next, /* Next Value */ + 0, /* Previous Value */ + 0, /* Reset the counter */ + 0, /* has next values */ +}; + +grib_iterator_class* grib_iterator_class_gaussian_reduced = &_grib_iterator_class_gaussian_reduced; + + +static void init_class(grib_iterator_class* c) +{ + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; +} +/* END_CLASS_IMP */ + +static int next(grib_iterator* i, double *lat, double *lon, double *val) +{ + + grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)i; + + if((long)i->e >= (long)(i->nv-1)) + return 0; + i->e++; + + *lat = self->las[i->e]; + *lon = self->los[i->e]; + *val = i->data[i->e]; + + return 1; +} + + +static int init(grib_iterator* iter,grib_handle* h,grib_arguments* args) +{ + int ret=GRIB_SUCCESS,j; + double lat_first=0,lon_first=0,lat_last=0,lon_last=0,d=0; + double* lats; + size_t plsize=0; + int l=0; + long* pl; + long nj=0,order=0,ilon_first,ilon_last,i; + long row_count=0; + grib_context* c=h->context; + grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)iter; + const char* slat_first = grib_arguments_get_name(h,args,self->carg++); + const char* slon_first = grib_arguments_get_name(h,args,self->carg++); + const char* slat_last = grib_arguments_get_name(h,args,self->carg++); + const char* slon_last = grib_arguments_get_name(h,args,self->carg++); + const char* sorder = grib_arguments_get_name(h,args,self->carg++); + const char* spl = grib_arguments_get_name(h,args,self->carg++); + const char* snj = grib_arguments_get_name(h,args,self->carg++); + + if((ret = grib_get_double_internal(h, slat_first,&lat_first)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, slon_first,&lon_first)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, slat_last,&lat_last)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, slon_last,&lon_last)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_long_internal(h, sorder,&order)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, snj,&nj)) != GRIB_SUCCESS) + return ret; + + lats=(double*)grib_context_malloc(h->context,sizeof(double)*order*2); + if((ret = grib_get_gaussian_latitudes(order, lats)) != GRIB_SUCCESS) + return ret; + + if((ret = grib_get_size(h,spl,&plsize)) != GRIB_SUCCESS) + return ret; + + pl=(long*)grib_context_malloc(c,sizeof(long)*plsize); + grib_get_long_array_internal(h,spl,pl, &plsize); + + self->las = grib_context_malloc(h->context,iter->nv*sizeof(double)); + self->los = grib_context_malloc(h->context,iter->nv*sizeof(double)); + + while (lon_last<0) lon_last+=360; + while (lon_first<0) lon_first+=360; + + d=fabs(lats[0]-lats[1]); + if ( (fabs(lat_first-lats[0]) >= d ) || + (fabs(lat_last+lats[0]) >= d ) || + lon_first != 0 || + fabs(lon_last - (360.0-90.0/order)) > 90.0/order + ) { + /*sub area*/ + /*find starting latitude */ + while (fabs(lat_first-lats[l]) > d ) {l++;} + iter->e=0; + for (j=0;jilon_last) ilon_first-=pl[j]; + for (i=ilon_first;i<=ilon_last;i++) { + self->los[iter->e]=((i)*360.0)/pl[j]; + self->las[iter->e]=lats[j+l]; + iter->e++; + } + } + } else { + /*global*/ + iter->e=0; + for (j=0;jlos[iter->e]=(i*360.0)/row_count; + self->las[iter->e]=lats[j]; + iter->e++; + } + } + } + + iter->e = -1; + grib_context_free(h->context,lats); + grib_context_free(h->context,pl); + + return ret; +} + +static int destroy(grib_iterator* i) +{ + grib_iterator_gaussian_reduced* self = (grib_iterator_gaussian_reduced*)i; + const grib_context *c = i->h->context; + + grib_context_free(c,self->las); + grib_context_free(c,self->los); + return 1; +} + diff --git a/src/grib_iterator_class_gen.c b/src/grib_iterator_class_gen.c new file mode 100644 index 000000000..4437d3eea --- /dev/null +++ b/src/grib_iterator_class_gen.c @@ -0,0 +1,130 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = iterator + IMPLEMENTS = destroy + IMPLEMENTS = has_next + IMPLEMENTS = init + IMPLEMENTS = reset + MEMBERS = long carg + MEMBERS = const char* missingValue; + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "iterator.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_iterator_class*); + +static int init (grib_iterator* i,grib_handle*,grib_arguments*); +static int destroy (grib_iterator* i); +static int reset (grib_iterator* i); +static long has_next (grib_iterator* i); + + +typedef struct grib_iterator_gen{ + grib_iterator it; +/* Members defined in gen */ + long carg; + const char* missingValue; +} grib_iterator_gen; + + +static grib_iterator_class _grib_iterator_class_gen = { + 0, /* super */ + "gen", /* name */ + sizeof(grib_iterator_gen),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + 0, /* Next Value */ + 0, /* Previous Value */ + &reset, /* Reset the counter */ + &has_next, /* has next values */ +}; + +grib_iterator_class* grib_iterator_class_gen = &_grib_iterator_class_gen; + + +static void init_class(grib_iterator_class* c) +{ +} +/* END_CLASS_IMP */ + +static int init(grib_iterator* i,grib_handle *h, grib_arguments* args) +{ + grib_iterator_gen* self = (grib_iterator_gen*) i; + size_t dli=0; + int ret = GRIB_SUCCESS; + const char* rawdat = NULL; + const char* snumberOfPoints=NULL; + long numberOfPoints=0; + self->carg = 1; + + snumberOfPoints = grib_arguments_get_name(h,args,self->carg++); + self->missingValue = grib_arguments_get_name(h,args,self->carg++); + rawdat = grib_arguments_get_name(h,args,self->carg++); + + i->h = h; /* We may not need to keep them */ + i->args = args; + if( (ret = grib_get_size(h,rawdat,&dli))!= GRIB_SUCCESS) return ret; + + if( (ret = grib_get_long_internal(h,snumberOfPoints,&numberOfPoints)) + != GRIB_SUCCESS) + return ret; + + if (numberOfPoints!=dli) { + grib_context_log(h->context,GRIB_LOG_ERROR,"%s != size(%s) (%ld!=%ld)", + snumberOfPoints,rawdat,numberOfPoints,dli); + return GRIB_WRONG_GRID; + } + i->nv = dli; + i->data = grib_context_malloc(h->context,(i->nv)*sizeof(double)); + + if( (ret = grib_get_double_array_internal(h,rawdat,i->data ,&(i->nv)))) + return ret; + + i->e = -1; + + return ret; +} + +static int reset(grib_iterator* i){ + i->e = -1; + return 0; +} + +static int destroy(grib_iterator* ei){ + const grib_context *c = ei->h->context; + grib_context_free(c,ei->data); + return 1; +} + + +static long has_next(grib_iterator* i){ + if(i->data == NULL) return 0; + return i->nv - i->e; +} diff --git a/src/grib_iterator_class_lambert_azimuthal_equal_area.c b/src/grib_iterator_class_lambert_azimuthal_equal_area.c new file mode 100644 index 000000000..38c859959 --- /dev/null +++ b/src/grib_iterator_class_lambert_azimuthal_equal_area.c @@ -0,0 +1,288 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = iterator + SUPER = grib_iterator_class_gen + IMPLEMENTS = destroy + IMPLEMENTS = init;next + MEMBERS = double *lats + MEMBERS = double *lons + MEMBERS = long nam + END_CLASS_DEF +*/ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "iterator.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_iterator_class*); + +static int init (grib_iterator* i,grib_handle*,grib_arguments*); +static int next (grib_iterator* i, double *lat, double *lon, double *val); +static int destroy (grib_iterator* i); + + +typedef struct grib_iterator_lambert_azimuthal_equal_area{ + grib_iterator it; +/* Members defined in gen */ + long carg; + const char* missingValue; +/* Members defined in lambert_azimuthal_equal_area */ + double *lats; + double *lons; + long nam; +} grib_iterator_lambert_azimuthal_equal_area; + +extern grib_iterator_class* grib_iterator_class_gen; + +static grib_iterator_class _grib_iterator_class_lambert_azimuthal_equal_area = { + &grib_iterator_class_gen, /* super */ + "lambert_azimuthal_equal_area", /* name */ + sizeof(grib_iterator_lambert_azimuthal_equal_area),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &next, /* Next Value */ + 0, /* Previous Value */ + 0, /* Reset the counter */ + 0, /* has next values */ +}; + +grib_iterator_class* grib_iterator_class_lambert_azimuthal_equal_area = &_grib_iterator_class_lambert_azimuthal_equal_area; + + +static void init_class(grib_iterator_class* c) +{ + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; +} +/* END_CLASS_IMP */ + +static int next(grib_iterator* i, double *lat, double *lon, double *val) +{ + + grib_iterator_lambert_azimuthal_equal_area* self = (grib_iterator_lambert_azimuthal_equal_area*)i; + + if((long)i->e >= (long)(i->nv-1)) + return 0; + i->e++; + + *lat = self->lats[i->e]; + *lon = self->lons[i->e]; + *val = i->data[i->e]; + + return 1; +} + + +static int init(grib_iterator* iter,grib_handle* h,grib_arguments* args) +{ + int ret=0; + double *lats,*lons; + double lonFirstInDegrees,latFirstInDegrees,lonFirst,latFirst,radius=0; + long nx,ny,standardParallel,centralLongitude; + double phi1,lambda0,xFirst,yFirst,x,y,Dx,Dy; + double kp,sinphi1,cosphi1; + long alternativeRowScanning,iScansNegatively; + long jScansPositively,jPointsAreConsecutive; + double sinphi,cosphi,cosdlambda,sindlambda; + double cosc,sinc; + long i,j; + + grib_iterator_lambert_azimuthal_equal_area* self = + (grib_iterator_lambert_azimuthal_equal_area*)iter; + + const char* sradius = grib_arguments_get_name(h,args,self->carg++); + const char* snx = grib_arguments_get_name(h,args,self->carg++); + const char* sny = grib_arguments_get_name(h,args,self->carg++); + const char* slatFirstInDegrees = grib_arguments_get_name(h,args,self->carg++); + const char* slonFirstInDegrees = grib_arguments_get_name(h,args,self->carg++); + const char* sstandardParallel = grib_arguments_get_name(h,args,self->carg++); + const char* scentralLongitude = grib_arguments_get_name(h,args,self->carg++); + const char* sDx = grib_arguments_get_name(h,args,self->carg++); + const char* sDy = grib_arguments_get_name(h,args,self->carg++); + const char* siScansNegatively = grib_arguments_get_name(h,args,self->carg++); + const char* sjScansPositively = grib_arguments_get_name(h,args,self->carg++); + const char* sjPointsAreConsecutive = grib_arguments_get_name(h,args,self->carg++); + const char* salternativeRowScanning = grib_arguments_get_name(h,args,self->carg++); + double c,rho; + double epsilon=1.0e-20; + double d2r=acos(0.0)/90.0; + + if((ret = grib_get_double_internal(h, sradius,&radius)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, snx,&nx)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, sny,&ny)) != GRIB_SUCCESS) + return ret; + + if (iter->nv!=nx*ny) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "Wrong number of points (%ld!=%ldx%ld)", + iter->nv,nx,ny); + return GRIB_WRONG_GRID; + } + if((ret = grib_get_double_internal(h, slatFirstInDegrees,&latFirstInDegrees)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, slonFirstInDegrees,&lonFirstInDegrees)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, sstandardParallel,&standardParallel)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, scentralLongitude,¢ralLongitude)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, sDx,&Dx)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, sDy,&Dy)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, + sjPointsAreConsecutive,&jPointsAreConsecutive)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, sjScansPositively,&jScansPositively)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, siScansNegatively,&iScansNegatively)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, + salternativeRowScanning,&alternativeRowScanning)) + != GRIB_SUCCESS) + return ret; + + lambda0=d2r*centralLongitude/1000000; + phi1=d2r*standardParallel/1000000; + latFirst=latFirstInDegrees*d2r; + lonFirst=lonFirstInDegrees*d2r; + + cosphi1=cos(phi1); + sinphi1=sin(phi1); + + Dx = iScansNegatively == 0 ? Dx/1000 : -Dx/1000; + Dy = jScansPositively == 1 ? Dy/1000 : -Dy/1000; + self->lats = grib_context_malloc(h->context,iter->nv*sizeof(double)); + if (!self->lats) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to allocate %ld bytes",iter->nv*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + self->lons = grib_context_malloc(h->context,iter->nv*sizeof(double)); + if (!self->lats) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to allocate %ld bytes",iter->nv*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + lats=self->lats; + lons=self->lons; + + /* compute xFirst,yFirst in metres */ + sinphi=sin(latFirst); + cosphi=cos(latFirst); + cosdlambda=cos(lonFirst-lambda0); + sindlambda=sin(lonFirst-lambda0); + kp=radius*sqrt(2.0/(1+sinphi1*sinphi+cosphi1*cosphi*cosdlambda)); + xFirst=kp*cosphi*sindlambda; + yFirst=kp*(cosphi1*sinphi-sinphi1*cosphi*cosdlambda); + + if (jPointsAreConsecutive) { + + x=xFirst; + for (i=0;iepsilon) { + c=2*asin(rho/(2.0*radius)); + cosc=cos(c); + sinc=sin(c); + *lats=asin(cosc*sinphi1+y*sinc*cosphi1/rho)/d2r; + *lons=(lambda0+atan2(x*sinc,rho*cosphi1*cosc-y*sinphi1*sinc))/d2r; + } else { + *lats=phi1/d2r; + *lons=lambda0/d2r; + } + if (*lons<0) *lons+=360; + lons++; + lats++; + + y+=Dy; + } + x+=Dx; + } + + } else { + + y=yFirst; + for (j=0;jepsilon) { + c=2*asin(rho/(2.0*radius)); + cosc=cos(c); + sinc=sin(c); + *lats=asin(cosc*sinphi1+y*sinc*cosphi1/rho)/d2r; + *lons=(lambda0+atan2(x*sinc,rho*cosphi1*cosc-y*sinphi1*sinc))/d2r; + } else { + *lats=phi1/d2r; + *lons=lambda0/d2r; + } + if (*lons<0) *lons+=360; + lons++; + lats++; + + x+=Dx; + } + y+=Dy; + } + + } + + iter->e = -1; + + return ret; +} + +static int destroy(grib_iterator* i) +{ + grib_iterator_lambert_azimuthal_equal_area* self = (grib_iterator_lambert_azimuthal_equal_area*)i; + const grib_context *c = i->h->context; + + grib_context_free(c,self->lats); + grib_context_free(c,self->lons); + return 1; +} + diff --git a/src/grib_iterator_class_lambert_conformal.c b/src/grib_iterator_class_lambert_conformal.c new file mode 100644 index 000000000..4b7811f7f --- /dev/null +++ b/src/grib_iterator_class_lambert_conformal.c @@ -0,0 +1,274 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = iterator + SUPER = grib_iterator_class_gen + IMPLEMENTS = destroy + IMPLEMENTS = init;next + MEMBERS = double *lats + MEMBERS = double *lons + MEMBERS = long nam + END_CLASS_DEF +*/ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "iterator.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_iterator_class*); + +static int init (grib_iterator* i,grib_handle*,grib_arguments*); +static int next (grib_iterator* i, double *lat, double *lon, double *val); +static int destroy (grib_iterator* i); + + +typedef struct grib_iterator_lambert_conformal{ + grib_iterator it; +/* Members defined in gen */ + long carg; + const char* missingValue; +/* Members defined in lambert_conformal */ + double *lats; + double *lons; + long nam; +} grib_iterator_lambert_conformal; + +extern grib_iterator_class* grib_iterator_class_gen; + +static grib_iterator_class _grib_iterator_class_lambert_conformal = { + &grib_iterator_class_gen, /* super */ + "lambert_conformal", /* name */ + sizeof(grib_iterator_lambert_conformal),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &next, /* Next Value */ + 0, /* Previous Value */ + 0, /* Reset the counter */ + 0, /* has next values */ +}; + +grib_iterator_class* grib_iterator_class_lambert_conformal = &_grib_iterator_class_lambert_conformal; + + +static void init_class(grib_iterator_class* c) +{ + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; +} +/* END_CLASS_IMP */ + +static int next(grib_iterator* i, double *lat, double *lon, double *val) +{ + + grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)i; + + if((long)i->e >= (long)(i->nv-1)) + return 0; + i->e++; + + *lat = self->lats[i->e]; + *lon = self->lons[i->e]; + *val = i->data[i->e]; + + return 1; +} + +#ifndef M_PI +#define M_PI 3.14159265358979323846 /* Whole pie */ +#endif + +#ifndef M_PI_2 +#define M_PI_2 1.57079632679489661923 /* Half a pie */ +#endif + +#ifndef M_PI_4 +#define M_PI_4 0.78539816339744830962 /* Quarter of a pie */ +#endif + +#define RAD2DEG 57.29577951308232087684 /* 180 over pi */ +#define DEG2RAD 0.01745329251994329576 /* pi over 180 */ + +static int init(grib_iterator* iter,grib_handle* h,grib_arguments* args) +{ + int i, j, ret=0; + double *lats, *lons; /* the lat/lon arrays to be populated */ + long nx,ny,iScansNegatively,jScansPositively,jPointsAreConsecutive,alternativeRowScanning; + double LoVInDegrees,LaDInDegrees,Latin1InDegrees,Latin2InDegrees,latFirstInDegrees, + lonFirstInDegrees, Dx, Dy, radius=0; + double latFirstInRadians, lonFirstInRadians, LoVInRadians, Latin1InRadians, Latin2InRadians, + LaDInRadians, lonDiff, lonDeg, latDeg; + double f, n, rho, rho0, angle, x0, y0, x, y, tmp, tmp2; + + grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)iter; + + const char* sradius = grib_arguments_get_name(h,args,self->carg++); + const char* snx = grib_arguments_get_name(h,args,self->carg++); + const char* sny = grib_arguments_get_name(h,args,self->carg++); + const char* sLoVInDegrees = grib_arguments_get_name(h,args,self->carg++); + const char* sLaDInDegrees = grib_arguments_get_name(h,args,self->carg++); + const char* sLatin1InDegrees = grib_arguments_get_name(h,args,self->carg++); + const char* sLatin2InDegrees = grib_arguments_get_name(h,args,self->carg++); + const char* slatFirstInDegrees = grib_arguments_get_name(h,args,self->carg++); + const char* slonFirstInDegrees = grib_arguments_get_name(h,args,self->carg++); + /* Dx and Dy are in Metres */ + const char* sDx = grib_arguments_get_name(h,args,self->carg++); + const char* sDy = grib_arguments_get_name(h,args,self->carg++); + const char* siScansNegatively = grib_arguments_get_name(h,args,self->carg++); + const char* sjScansPositively = grib_arguments_get_name(h,args,self->carg++); + const char* sjPointsAreConsecutive = grib_arguments_get_name(h,args,self->carg++); + const char* salternativeRowScanning = grib_arguments_get_name(h,args,self->carg++); + + if((ret = grib_get_long_internal(h, snx,&nx)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, sny,&ny)) != GRIB_SUCCESS) + return ret; + + if (iter->nv!=nx*ny) { + grib_context_log(h->context,GRIB_LOG_ERROR,"Wrong number of points (%ld!=%ldx%ld)",iter->nv,nx,ny); + return GRIB_WRONG_GRID; + } + if((ret = grib_get_double_internal(h, sradius,&radius)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, sLoVInDegrees, &LoVInDegrees))!=GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, sLaDInDegrees, &LaDInDegrees))!=GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, sLatin1InDegrees, &Latin1InDegrees))!=GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, sLatin2InDegrees, &Latin2InDegrees))!=GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, slatFirstInDegrees,&latFirstInDegrees)) !=GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, slonFirstInDegrees,&lonFirstInDegrees)) !=GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, sDx,&Dx)) !=GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, sDy,&Dy)) !=GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, sjPointsAreConsecutive,&jPointsAreConsecutive)) !=GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, sjScansPositively,&jScansPositively)) !=GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, siScansNegatively,&iScansNegatively)) !=GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, salternativeRowScanning,&alternativeRowScanning)) !=GRIB_SUCCESS) + return ret; + + /* See Wolfram MathWorld: http://mathworld.wolfram.com/LambertConformalConicProjection.html */ + latFirstInRadians = latFirstInDegrees * DEG2RAD; + lonFirstInRadians = lonFirstInDegrees * DEG2RAD; + Latin1InRadians = Latin1InDegrees * DEG2RAD; + Latin2InRadians = Latin2InDegrees * DEG2RAD; + LaDInRadians = LaDInDegrees * DEG2RAD; + LoVInRadians = LoVInDegrees * DEG2RAD; + + if ( fabs(Latin1InRadians - Latin2InRadians) < 1E-09 ) { + n = sin(Latin1InRadians); + } + else { + n = log(cos(Latin1InRadians)/cos(Latin2InRadians)) / + log(tan(M_PI_4 + Latin2InRadians/2.0) / tan(M_PI_4 + Latin1InRadians/2.0)); + } + + f = (cos(Latin1InRadians) * pow(tan(M_PI_4 + Latin1InRadians/2.0), n)) / n; + rho = radius * f * pow(tan(M_PI_4 + latFirstInRadians/2.0), -n); + rho0 = radius * f * pow(tan(M_PI_4 + LaDInRadians/2.0), -n); + if ( n < 0 ) /* adjustment for southern hemisphere */ + rho0 = -rho0; + lonDiff = lonFirstInRadians - LoVInRadians; + + /* Adjust longitude to range -180 to 180 */ + if (lonDiff > M_PI) lonDiff -= 2*M_PI; + if (lonDiff < -M_PI) lonDiff += 2*M_PI; + angle = n * lonDiff; + x0 = rho * sin(angle); + y0 = rho0 - rho * cos(angle); + Dx = iScansNegatively == 0 ? Dx : -Dx; + Dy = jScansPositively == 1 ? Dy : -Dy; + + /* No support (yet) for jPointsAreConsecutive */ + if (jPointsAreConsecutive) { + grib_context_log(h->context,GRIB_LOG_ERROR,"No support for: 'Adjacent points in j (y) direction being consecutive'"); + Assert(0); + } + + /* Allocate latitude and longitude arrays */ + self->lats = grib_context_malloc(h->context,iter->nv*sizeof(double)); + if (!self->lats) { + grib_context_log(h->context,GRIB_LOG_ERROR, "unable to allocate %ld bytes",iter->nv*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + self->lons = grib_context_malloc(h->context,iter->nv*sizeof(double)); + if (!self->lats) { + grib_context_log(h->context,GRIB_LOG_ERROR, "unable to allocate %ld bytes",iter->nv*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + lats=self->lats; + lons=self->lons; + + /* Populate our arrays */ + for (j = 0; j < ny; j++) { + y = y0 + j*Dy; + if ( n < 0 ) { /* adjustment for southern hemisphere */ + y = -y; + } + tmp = rho0 - y; + tmp2 = tmp*tmp; + for (i = 0; i < nx; i++) { + int index =i+j*nx; + x = x0 + i*Dx; + if ( n < 0 ) { /* adjustment for southern hemisphere */ + x = -x; + } + + angle = atan(x / tmp); + rho = sqrt(x*x + tmp2); + if (n <= 0) rho = -rho; + lonDeg = LoVInDegrees + (angle/n) * RAD2DEG; + latDeg = (2.0 * atan(pow(radius * f/rho, 1.0/n)) - M_PI_2) * RAD2DEG; + while ( lonDeg >= 360.0) lonDeg -= 360.0; + while ( lonDeg < 0.0) lonDeg += 360.0; + lons[index] = lonDeg; + lats[index] = latDeg; + } + } + + iter->e = -1; + + return ret; +} + +static int destroy(grib_iterator* i) +{ + grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)i; + const grib_context *c = i->h->context; + + grib_context_free(c,self->lats); + grib_context_free(c,self->lons); + return 1; +} + diff --git a/src/grib_iterator_class_latlon.c b/src/grib_iterator_class_latlon.c new file mode 100644 index 000000000..27dd68556 --- /dev/null +++ b/src/grib_iterator_class_latlon.c @@ -0,0 +1,115 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = iterator + SUPER = grib_iterator_class_regular + IMPLEMENTS = init + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "iterator.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_iterator_class*); + +static int init (grib_iterator* i,grib_handle*,grib_arguments*); + + +typedef struct grib_iterator_latlon{ + grib_iterator it; +/* Members defined in gen */ + long carg; + const char* missingValue; +/* Members defined in regular */ + double *las; + double *los; + long nap; + long nam; + long iScansNegatively; +/* Members defined in latlon */ +} grib_iterator_latlon; + +extern grib_iterator_class* grib_iterator_class_regular; + +static grib_iterator_class _grib_iterator_class_latlon = { + &grib_iterator_class_regular, /* super */ + "latlon", /* name */ + sizeof(grib_iterator_latlon),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + 0, /* destructor */ + 0, /* Next Value */ + 0, /* Previous Value */ + 0, /* Reset the counter */ + 0, /* has next values */ +}; + +grib_iterator_class* grib_iterator_class_latlon = &_grib_iterator_class_latlon; + + +static void init_class(grib_iterator_class* c) +{ + c->next = (*(c->super))->next; + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; +} +/* END_CLASS_IMP */ + + +static int init(grib_iterator* i,grib_handle* h,grib_arguments* args) +{ + grib_iterator_latlon* self = (grib_iterator_latlon*)i; + int ret = GRIB_SUCCESS; + double jdir; + double laf; + long jScansPositively; + + long lai; + + const char* latofirst = grib_arguments_get_name(h,args,self->carg++); + const char* jdirec = grib_arguments_get_name(h,args,self->carg++); + const char* s_jScansPositively = grib_arguments_get_name(h,args,self->carg++); + + if((ret = grib_get_double_internal(h,latofirst, &laf))) return ret; + if((ret = grib_get_double_internal(h,jdirec, &jdir))) return ret; + if((ret = grib_get_long_internal(h,s_jScansPositively,&jScansPositively))) + return ret; + + if (jScansPositively) jdir=-jdir; + + for( lai = 0; lai < self->nam; lai++ ) { + self->las[lai] = laf; + laf -= jdir ; + } + + i->e = -1; + return ret; +} diff --git a/src/grib_iterator_class_latlon_reduced.c b/src/grib_iterator_class_latlon_reduced.c new file mode 100644 index 000000000..5df22c590 --- /dev/null +++ b/src/grib_iterator_class_latlon_reduced.c @@ -0,0 +1,193 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = iterator + SUPER = grib_iterator_class_gen + IMPLEMENTS = destroy + IMPLEMENTS = init;next + MEMBERS = double *las + MEMBERS = double *los + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "iterator.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_iterator_class*); + +static int init (grib_iterator* i,grib_handle*,grib_arguments*); +static int next (grib_iterator* i, double *lat, double *lon, double *val); +static int destroy (grib_iterator* i); + + +typedef struct grib_iterator_latlon_reduced{ + grib_iterator it; +/* Members defined in gen */ + long carg; + const char* missingValue; +/* Members defined in latlon_reduced */ + double *las; + double *los; +} grib_iterator_latlon_reduced; + +extern grib_iterator_class* grib_iterator_class_gen; + +static grib_iterator_class _grib_iterator_class_latlon_reduced = { + &grib_iterator_class_gen, /* super */ + "latlon_reduced", /* name */ + sizeof(grib_iterator_latlon_reduced),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &next, /* Next Value */ + 0, /* Previous Value */ + 0, /* Reset the counter */ + 0, /* has next values */ +}; + +grib_iterator_class* grib_iterator_class_latlon_reduced = &_grib_iterator_class_latlon_reduced; + + +static void init_class(grib_iterator_class* c) +{ + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; +} +/* END_CLASS_IMP */ + +static int next(grib_iterator* i, double *lat, double *lon, double *val) +{ + grib_iterator_latlon_reduced* self = (grib_iterator_latlon_reduced*)i; + + if((long)i->e >= (long)(i->nv-1)) + return 0; + i->e++; + + *lat = self->las[i->e]; + *lon = self->los[i->e]; + *val = i->data[i->e]; + + return 1; +} + +static int init(grib_iterator* i,grib_handle* h,grib_arguments* args) +{ + grib_iterator_latlon_reduced* self = (grib_iterator_latlon_reduced*)i; + + int ret = GRIB_SUCCESS; + double laf; + double lal; + long nlats; + double lof,tlof; + double lol,dimin; + long *pl; + size_t plsize =0 ; + long k,j,ii; + long nlons,plmax; + double jdirinc = 0; + double idirinc = 0; + double dlon=0; + int islocal=0; + long nlons2 =0; /* adjusted num of longitudes */ + + const char* latofirst = grib_arguments_get_name(h,args,self->carg++); + const char* longoffirst = grib_arguments_get_name(h,args,self->carg++); + const char* latoflast = grib_arguments_get_name(h,args,self->carg++); + const char* longoflast = grib_arguments_get_name(h,args,self->carg++); + const char* nlats_name = grib_arguments_get_name(h,args,self->carg++); + const char* jdirec = grib_arguments_get_name(h,args,self->carg++); + const char* plac = grib_arguments_get_name(h,args,self->carg++); + + if(( ret = grib_get_double_internal(h,latofirst, &laf))) return ret; + if(( ret = grib_get_double_internal(h,longoffirst, &lof))) return ret; + + if(( ret = grib_get_double_internal(h,latoflast, &lal))) return ret; + if(( ret = grib_get_double_internal(h,longoflast, &lol))) return ret; + + if(( ret = grib_get_long_internal(h,nlats_name,&nlats))) return ret; + + if(( ret = grib_get_double_internal(h,jdirec,&jdirinc))) return ret; + + plsize = nlats; + pl = grib_context_malloc(h->context,plsize*sizeof(long)); + grib_get_long_array_internal(h,plac,pl, &plsize); + + self->las = grib_context_malloc(h->context,i->nv*sizeof(double)); + self->los = grib_context_malloc(h->context,i->nv*sizeof(double)); + + plmax=pl[0]; + for (j=0;jlal) jdirinc=-jdirinc; + k=0; + for (j=0;jlas[k]=laf; + self->los[k]=tlof; + tlof+=idirinc; + k++; + } + laf+=jdirinc; + } + + i->e = -1; + grib_context_free(h->context,pl); + + return ret; +} + +static int destroy(grib_iterator* i) +{ + grib_iterator_latlon_reduced* self = (grib_iterator_latlon_reduced*)i; + const grib_context *c = i->h->context; + + grib_context_free(c,self->las); + grib_context_free(c,self->los); + return 1; +} diff --git a/src/grib_iterator_class_polar_stereographic.c b/src/grib_iterator_class_polar_stereographic.c new file mode 100644 index 000000000..3d2bb4f1b --- /dev/null +++ b/src/grib_iterator_class_polar_stereographic.c @@ -0,0 +1,279 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = iterator + SUPER = grib_iterator_class_gen + IMPLEMENTS = destroy + IMPLEMENTS = init;next + MEMBERS = double *lats + MEMBERS = double *lons + MEMBERS = long nam + END_CLASS_DEF +*/ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "iterator.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_iterator_class*); + +static int init (grib_iterator* i,grib_handle*,grib_arguments*); +static int next (grib_iterator* i, double *lat, double *lon, double *val); +static int destroy (grib_iterator* i); + + +typedef struct grib_iterator_polar_stereographic{ + grib_iterator it; +/* Members defined in gen */ + long carg; + const char* missingValue; +/* Members defined in polar_stereographic */ + double *lats; + double *lons; + long nam; +} grib_iterator_polar_stereographic; + +extern grib_iterator_class* grib_iterator_class_gen; + +static grib_iterator_class _grib_iterator_class_polar_stereographic = { + &grib_iterator_class_gen, /* super */ + "polar_stereographic", /* name */ + sizeof(grib_iterator_polar_stereographic),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &next, /* Next Value */ + 0, /* Previous Value */ + 0, /* Reset the counter */ + 0, /* has next values */ +}; + +grib_iterator_class* grib_iterator_class_polar_stereographic = &_grib_iterator_class_polar_stereographic; + + +static void init_class(grib_iterator_class* c) +{ + c->previous = (*(c->super))->previous; + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; +} +/* END_CLASS_IMP */ + +static int next(grib_iterator* i, double *lat, double *lon, double *val) +{ + + grib_iterator_polar_stereographic* self = (grib_iterator_polar_stereographic*)i; + + if((long)i->e >= (long)(i->nv-1)) + return 0; + i->e++; + + *lat = self->lats[i->e]; + *lon = self->lons[i->e]; + *val = i->data[i->e]; + + return 1; +} + + +static int init(grib_iterator* iter,grib_handle* h,grib_arguments* args) +{ + int ret=0; + double *lats,*lons; + double lonFirstInDegrees,latFirstInDegrees,lonFirst,latFirst,radius=0; + long nx,ny,standardParallel,centralLongitude; + double phi,lambda0,xFirst,yFirst,x,y,Dx,Dy; + double kp,sinphi1,cosphi1,sinlambda0,coslambda0; + long alternativeRowScanning,iScansNegatively; + long jScansPositively,jPointsAreConsecutive; + double sinphi,cosphi,sinlambda,coslambda,cosdlambda,sindlambda; + double cosc,sinc; + long i,j; + + + grib_iterator_polar_stereographic* self = + (grib_iterator_polar_stereographic*)iter; + + const char* sradius = grib_arguments_get_name(h,args,self->carg++); + const char* snx = grib_arguments_get_name(h,args,self->carg++); + const char* sny = grib_arguments_get_name(h,args,self->carg++); + const char* slatFirstInDegrees = grib_arguments_get_name(h,args,self->carg++); + const char* slonFirstInDegrees = grib_arguments_get_name(h,args,self->carg++); + const char* sstandardParallel = grib_arguments_get_name(h,args,self->carg++); + const char* scentralLongitude = grib_arguments_get_name(h,args,self->carg++); + const char* sDx = grib_arguments_get_name(h,args,self->carg++); + const char* sDy = grib_arguments_get_name(h,args,self->carg++); + const char* siScansNegatively = grib_arguments_get_name(h,args,self->carg++); + const char* sjScansPositively = grib_arguments_get_name(h,args,self->carg++); + const char* sjPointsAreConsecutive = grib_arguments_get_name(h,args,self->carg++); + const char* salternativeRowScanning = grib_arguments_get_name(h,args,self->carg++); + double c,rho; + double d2r=acos(0.0)/90.0; + double pi4=acos(0.0)/2.0; + sinphi1 = cosphi1 = phi = 0.0; /*TODO initialize properly*/ + + if((ret = grib_get_double_internal(h, sradius,&radius)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, snx,&nx)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, sny,&ny)) != GRIB_SUCCESS) + return ret; + + if (iter->nv!=nx*ny) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "Wrong number of points (%ld!=%ldx%ld)", + iter->nv,nx,ny); + return GRIB_WRONG_GRID; + } + if((ret = grib_get_double_internal(h, slatFirstInDegrees,&latFirstInDegrees)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, slonFirstInDegrees,&lonFirstInDegrees)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, sstandardParallel,&standardParallel)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, scentralLongitude,¢ralLongitude)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, sDx,&Dx)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_double_internal(h, sDy,&Dy)) != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, + sjPointsAreConsecutive,&jPointsAreConsecutive)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, sjScansPositively,&jScansPositively)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, siScansNegatively,&iScansNegatively)) + != GRIB_SUCCESS) + return ret; + if((ret = grib_get_long_internal(h, + salternativeRowScanning,&alternativeRowScanning)) + != GRIB_SUCCESS) + return ret; + + lambda0=d2r*standardParallel; + latFirst=latFirstInDegrees*d2r; + lonFirst=lonFirstInDegrees*d2r; + + coslambda0=cos(lambda0); + sinlambda0=sin(lambda0); + + Dx = iScansNegatively == 0 ? Dx : -Dx; + Dy = jScansPositively == 1 ? Dy : -Dy; + self->lats = grib_context_malloc(h->context,iter->nv*sizeof(double)); + if (!self->lats) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to allocate %ld bytes",iter->nv*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + self->lons = grib_context_malloc(h->context,iter->nv*sizeof(double)); + if (!self->lats) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to allocate %ld bytes",iter->nv*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + lats=self->lats; + lons=self->lons; + + /* compute xFirst,yFirst in metres */ + sinphi=sin(latFirst); + cosphi=cos(latFirst); + sinlambda=sin(lonFirst); + coslambda=cos(lonFirst); + cosdlambda=cos(lonFirst-lambda0); + sindlambda=sin(lonFirst-lambda0); + kp=radius*2.0*tan(pi4-phi/2); + xFirst=kp*cosphi*sindlambda; + yFirst=-kp*cosphi*cosdlambda; + + if (jPointsAreConsecutive) { + + x=xFirst; + for (i=0;ie = -1; + + return ret; +} + +static int destroy(grib_iterator* i) +{ + grib_iterator_polar_stereographic* self = (grib_iterator_polar_stereographic*)i; + const grib_context *c = i->h->context; + + grib_context_free(c,self->lats); + grib_context_free(c,self->lons); + return 1; +} + diff --git a/src/grib_iterator_class_regular.c b/src/grib_iterator_class_regular.c new file mode 100644 index 000000000..cef16c533 --- /dev/null +++ b/src/grib_iterator_class_regular.c @@ -0,0 +1,185 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = iterator + SUPER = grib_iterator_class_gen + IMPLEMENTS = previous;next + IMPLEMENTS = init;destroy + MEMBERS = double *las + MEMBERS = double *los + MEMBERS = long nap + MEMBERS = long nam + MEMBERS = long iScansNegatively + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "iterator.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_iterator_class*); + +static int init (grib_iterator* i,grib_handle*,grib_arguments*); +static int next (grib_iterator* i, double *lat, double *lon, double *val); +static int previous (grib_iterator* ei, double *lat, double *lon, double *val); +static int destroy (grib_iterator* i); + + +typedef struct grib_iterator_regular{ + grib_iterator it; +/* Members defined in gen */ + long carg; + const char* missingValue; +/* Members defined in regular */ + double *las; + double *los; + long nap; + long nam; + long iScansNegatively; +} grib_iterator_regular; + +extern grib_iterator_class* grib_iterator_class_gen; + +static grib_iterator_class _grib_iterator_class_regular = { + &grib_iterator_class_gen, /* super */ + "regular", /* name */ + sizeof(grib_iterator_regular),/* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &next, /* Next Value */ + &previous, /* Previous Value */ + 0, /* Reset the counter */ + 0, /* has next values */ +}; + +grib_iterator_class* grib_iterator_class_regular = &_grib_iterator_class_regular; + + +static void init_class(grib_iterator_class* c) +{ + c->reset = (*(c->super))->reset; + c->has_next = (*(c->super))->has_next; +} +/* END_CLASS_IMP */ + + +static int next(grib_iterator* i, double *lat, double *lon, double *val){ + grib_iterator_regular* self = (grib_iterator_regular*)i; + + if((long)i->e >= (long)(i->nv-1)) return 0; + + i->e++; + + *lat = self->las[(long)floor(i->e/self->nap)]; + *lon = self->los[(long)i->e%self->nap]; + *val = i->data[i->e]; + + return 1; +} + +static int previous(grib_iterator* i, double *lat, double *lon, double *val){ + grib_iterator_regular* self = (grib_iterator_regular*)i; + + if(i->e < 0) return 0; + *lat = self->las[(long)floor(i->e/self->nap)]; + *lon = self->los[i->e%self->nap]; + *val = i->data[i->e]; + i->e--; + + return 1; +} + +static int destroy(grib_iterator* i){ + grib_iterator_regular* self = (grib_iterator_regular*)i; + const grib_context *c = i->h->context; + grib_context_free(c,self->las); + grib_context_free(c,self->los); + return GRIB_SUCCESS; +} + +static int init(grib_iterator* i,grib_handle* h,grib_arguments* args) +{ + grib_iterator_regular* self = (grib_iterator_regular*)i; + int ret = GRIB_SUCCESS; + + long nap; /* Ni */ + long nam; /* Nj */ + double idir, lof,lol; + long loi; + + const char* longoffirst = grib_arguments_get_name(h,args,self->carg++); + const char* idirec = grib_arguments_get_name(h,args,self->carg++); + const char* nalpar = grib_arguments_get_name(h,args,self->carg++); + const char* nalmer = grib_arguments_get_name(h,args,self->carg++); + const char* iScansNegatively = grib_arguments_get_name(h,args,self->carg++); + + if((ret = grib_get_double_internal(h,longoffirst, &lof))) return ret; + if((ret = grib_get_double_internal(h,"longitudeOfLastGridPointInDegrees", &lol))) return ret; + if((ret = grib_get_double_internal(h,idirec, &idir))) return ret; + if((ret = grib_get_long_internal(h,nalpar, &nap))) return ret; + if((ret = grib_get_long_internal(h,nalmer, &nam))) return ret; + if((ret = grib_get_long_internal(h,iScansNegatively,&self->iScansNegatively))) + return ret; + + /* Note: If first and last longitudes are equal I assume you wanna go round the globle */ + if (self->iScansNegatively) { + if (lof > lol){ + idir=(lof-lol)/(nap-1); + } + else { + idir=(lof+360.0-lol)/(nap-1); + } + } + else { + if (lol > lof){ + idir=(lol-lof)/(nap-1); + } + else { + idir=(lol+360.0-lof)/(nap-1); + } + } + + if (self->iScansNegatively) { + idir=-idir; + } else { + if (lof+(nap-2)*idir>360) lof-=360; + else if (lof+nap*idir>360) idir=360.0/(float)nap; + } + + self->nap = nap; + self->nam = nam; + + self->las = grib_context_malloc(h->context,nam*sizeof(double)); + self->los = grib_context_malloc(h->context,nap*sizeof(double)); + + for( loi = 0; loi < nap; loi++ ) { + self->los[loi] = lof; + lof += idir ; + } + + return ret; +} diff --git a/src/grib_iterator_factory.h b/src/grib_iterator_factory.h new file mode 100644 index 000000000..908dd4802 --- /dev/null +++ b/src/grib_iterator_factory.h @@ -0,0 +1,10 @@ +/* This file is automatically generated by ./make_class.pl, do not edit */ +{ "gaussian", &grib_iterator_class_gaussian, }, +{ "gaussian_reduced", &grib_iterator_class_gaussian_reduced, }, +{ "gen", &grib_iterator_class_gen, }, +{ "lambert_azimuthal_equal_area", &grib_iterator_class_lambert_azimuthal_equal_area, }, +{ "lambert_conformal", &grib_iterator_class_lambert_conformal, }, +{ "latlon", &grib_iterator_class_latlon, }, +{ "latlon_reduced", &grib_iterator_class_latlon_reduced, }, +{ "polar_stereographic", &grib_iterator_class_polar_stereographic, }, +{ "regular", &grib_iterator_class_regular, }, diff --git a/src/grib_itrie.c b/src/grib_itrie.c new file mode 100755 index 000000000..66c9c72be --- /dev/null +++ b/src/grib_itrie.c @@ -0,0 +1,384 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* Note: all non-alpha are mapped to 0 */ +static int mapping[] = { +0, /* 00 */ +0, /* 01 */ +0, /* 02 */ +0, /* 03 */ +0, /* 04 */ +0, /* 05 */ +0, /* 06 */ +0, /* 07 */ +0, /* 08 */ +0, /* 09 */ +0, /* 0a */ +0, /* 0b */ +0, /* 0c */ +0, /* 0d */ +0, /* 0e */ +0, /* 0f */ +0, /* 10 */ +0, /* 11 */ +0, /* 12 */ +0, /* 13 */ +0, /* 14 */ +0, /* 15 */ +0, /* 16 */ +0, /* 17 */ +0, /* 18 */ +0, /* 19 */ +0, /* 1a */ +0, /* 1b */ +0, /* 1c */ +0, /* 1d */ +0, /* 1e */ +0, /* 1f */ +0, /* 20 */ +0, /* 21 */ +0, /* 22 */ +0, /* 23 */ +0, /* 24 */ +0, /* 25 */ +0, /* 26 */ +0, /* 27 */ +0, /* 28 */ +0, /* 29 */ +0, /* 2a */ +0, /* 2b */ +0, /* 2c */ +0, /* 2d */ +38, /* 2e */ +39, /* 2f */ +1, /* 0 */ +2, /* 1 */ +3, /* 2 */ +4, /* 3 */ +5, /* 4 */ +6, /* 5 */ +7, /* 6 */ +8, /* 7 */ +9, /* 8 */ +10, /* 9 */ +0, /* 3a */ +0, /* 3b */ +0, /* 3c */ +0, /* 3d */ +0, /* 3e */ +0, /* 3f */ +0, /* 40 */ +11, /* A */ +12, /* B */ +13, /* C */ +14, /* D */ +15, /* E */ +16, /* F */ +17, /* G */ +18, /* H */ +19, /* I */ +20, /* J */ +21, /* K */ +22, /* L */ +23, /* M */ +24, /* N */ +25, /* O */ +26, /* P */ +27, /* Q */ +28, /* R */ +29, /* S */ +30, /* T */ +31, /* U */ +32, /* V */ +33, /* W */ +34, /* X */ +35, /* Y */ +36, /* Z */ +0, /* 5b */ +0, /* 5c */ +0, /* 5d */ +0, /* 5e */ +37, /* _ */ +0, /* 60 */ +11, /* a */ +12, /* b */ +13, /* c */ +14, /* d */ +15, /* e */ +16, /* f */ +17, /* g */ +18, /* h */ +19, /* i */ +20, /* j */ +21, /* k */ +22, /* l */ +23, /* m */ +24, /* n */ +25, /* o */ +26, /* p */ +27, /* q */ +28, /* r */ +29, /* s */ +30, /* t */ +31, /* u */ +32, /* v */ +33, /* w */ +34, /* x */ +35, /* y */ +36, /* z */ +0, /* 7b */ +0, /* 7c */ +0, /* 7d */ +0, /* 7e */ +0, /* 7f */ +0, /* 80 */ +0, /* 81 */ +0, /* 82 */ +0, /* 83 */ +0, /* 84 */ +0, /* 85 */ +0, /* 86 */ +0, /* 87 */ +0, /* 88 */ +0, /* 89 */ +0, /* 8a */ +0, /* 8b */ +0, /* 8c */ +0, /* 8d */ +0, /* 8e */ +0, /* 8f */ +0, /* 90 */ +0, /* 91 */ +0, /* 92 */ +0, /* 93 */ +0, /* 94 */ +0, /* 95 */ +0, /* 96 */ +0, /* 97 */ +0, /* 98 */ +0, /* 99 */ +0, /* 9a */ +0, /* 9b */ +0, /* 9c */ +0, /* 9d */ +0, /* 9e */ +0, /* 9f */ +0, /* a0 */ +0, /* a1 */ +0, /* a2 */ +0, /* a3 */ +0, /* a4 */ +0, /* a5 */ +0, /* a6 */ +0, /* a7 */ +0, /* a8 */ +0, /* a9 */ +0, /* aa */ +0, /* ab */ +0, /* ac */ +0, /* ad */ +0, /* ae */ +0, /* af */ +0, /* b0 */ +0, /* b1 */ +0, /* b2 */ +0, /* b3 */ +0, /* b4 */ +0, /* b5 */ +0, /* b6 */ +0, /* b7 */ +0, /* b8 */ +0, /* b9 */ +0, /* ba */ +0, /* bb */ +0, /* bc */ +0, /* bd */ +0, /* be */ +0, /* bf */ +0, /* c0 */ +0, /* c1 */ +0, /* c2 */ +0, /* c3 */ +0, /* c4 */ +0, /* c5 */ +0, /* c6 */ +0, /* c7 */ +0, /* c8 */ +0, /* c9 */ +0, /* ca */ +0, /* cb */ +0, /* cc */ +0, /* cd */ +0, /* ce */ +0, /* cf */ +0, /* d0 */ +0, /* d1 */ +0, /* d2 */ +0, /* d3 */ +0, /* d4 */ +0, /* d5 */ +0, /* d6 */ +0, /* d7 */ +0, /* d8 */ +0, /* d9 */ +0, /* da */ +0, /* db */ +0, /* dc */ +0, /* dd */ +0, /* de */ +0, /* df */ +0, /* e0 */ +0, /* e1 */ +0, /* e2 */ +0, /* e3 */ +0, /* e4 */ +0, /* e5 */ +0, /* e6 */ +0, /* e7 */ +0, /* e8 */ +0, /* e9 */ +0, /* ea */ +0, /* eb */ +0, /* ec */ +0, /* ed */ +0, /* ee */ +0, /* ef */ +0, /* f0 */ +0, /* f1 */ +0, /* f2 */ +0, /* f3 */ +0, /* f4 */ +0, /* f5 */ +0, /* f6 */ +0, /* f7 */ +0, /* f8 */ +0, /* f9 */ +0, /* fa */ +0, /* fb */ +0, /* fc */ +0, /* fd */ +0, /* fe */ +0, /* ff */ +}; + +#define SIZE 40 + +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + +static void init() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex,&attr); + pthread_mutexattr_destroy(&attr); + +} +#endif +struct grib_itrie { + grib_itrie* next[SIZE]; + grib_context *context; + int id; + int* count; +}; + + +grib_itrie *grib_itrie_new(grib_context* c,int* count) { + grib_itrie* t = grib_context_malloc_clear(c,sizeof(grib_itrie)); + t->context = c; + t->id=-1; + t->count=count; + return t; +} + +void grib_itrie_delete(grib_itrie *t) { + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&mutex) + + if(t) { + int i; + for(i = 0; i <= SIZE; i++) + if (t->next[i]) + grib_itrie_delete(t->next[i]); + + grib_context_free(t->context,t); + + } + + GRIB_MUTEX_UNLOCK(&mutex) +} + +int grib_itrie_get_id(grib_itrie* t,const char* key) +{ + const char *k=key; + grib_itrie* last=t; + + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&mutex) + + while(*k && t) t = t->next[mapping[(int)*k++]]; + + if(t != NULL && t->id != -1) { + GRIB_MUTEX_UNLOCK(&mutex) + return t->id; + } else { + int ret=grib_itrie_insert(last,key); + GRIB_MUTEX_UNLOCK(&mutex) + return ret; + } +} + +int grib_itrie_insert(grib_itrie* t,const char* key) +{ + const char *k = key; + grib_itrie *last = t; + int* count; + + GRIB_PTHREAD_ONCE(&once,&init) + + GRIB_MUTEX_LOCK(&mutex) + + count=t->count; + + while(*k && t) { + last = t; + t = t->next[mapping[(int)*k]]; + if(t) k++; + } + + if (*k!=0) { + t=last; + while(*k) { + int j = mapping[(int)*k++]; + t->next[j] = grib_itrie_new(t->context,count); + t = t->next[j]; + } + } + if (*(t->count) < MAX_NUM_CONCEPTS) { + t->id=*(t->count); + (*(t->count))++; + } else { + grib_context_log(t->context,GRIB_LOG_ERROR, + "grib_itrie_get_id: too many accessors, increase MAX_NUM_CONCEPTS\n"); + Assert(*(t->count) < MAX_NUM_CONCEPTS); + } + + GRIB_MUTEX_UNLOCK(&mutex) + + /*printf("grib_itrie_get_id: %s -> %d\n",key,t->id);*/ + + return t->id; +} + +int grib_itrie_get_size(grib_itrie* t) {return *(t->count);} + diff --git a/src/grib_itrie_keys.c b/src/grib_itrie_keys.c new file mode 100755 index 000000000..d5c248a29 --- /dev/null +++ b/src/grib_itrie_keys.c @@ -0,0 +1,394 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + +static int mapping[] = { +0, /* 00 */ +0, /* 01 */ +0, /* 02 */ +0, /* 03 */ +0, /* 04 */ +0, /* 05 */ +0, /* 06 */ +0, /* 07 */ +0, /* 08 */ +0, /* 09 */ +0, /* 0a */ +0, /* 0b */ +0, /* 0c */ +0, /* 0d */ +0, /* 0e */ +0, /* 0f */ +0, /* 10 */ +0, /* 11 */ +0, /* 12 */ +0, /* 13 */ +0, /* 14 */ +0, /* 15 */ +0, /* 16 */ +0, /* 17 */ +0, /* 18 */ +0, /* 19 */ +0, /* 1a */ +0, /* 1b */ +0, /* 1c */ +0, /* 1d */ +0, /* 1e */ +0, /* 1f */ +0, /* 20 */ +0, /* 21 */ +0, /* 22 */ +0, /* 23 */ +0, /* 24 */ +0, /* 25 */ +0, /* 26 */ +0, /* 27 */ +0, /* 28 */ +0, /* 29 */ +0, /* 2a */ +0, /* 2b */ +0, /* 2c */ +0, /* 2d */ +38, /* . */ +39, /* / */ +1, /* 0 */ +2, /* 1 */ +3, /* 2 */ +4, /* 3 */ +5, /* 4 */ +6, /* 5 */ +7, /* 6 */ +8, /* 7 */ +9, /* 8 */ +10, /* 9 */ +0, /* 3a */ +0, /* 3b */ +0, /* 3c */ +0, /* 3d */ +0, /* 3e */ +0, /* 3f */ +0, /* 40 */ +11, /* A */ +12, /* B */ +13, /* C */ +14, /* D */ +15, /* E */ +16, /* F */ +17, /* G */ +18, /* H */ +19, /* I */ +20, /* J */ +21, /* K */ +22, /* L */ +23, /* M */ +24, /* N */ +25, /* O */ +26, /* P */ +27, /* Q */ +28, /* R */ +29, /* S */ +30, /* T */ +31, /* U */ +32, /* V */ +33, /* W */ +34, /* X */ +35, /* Y */ +36, /* Z */ +0, /* 5b */ +0, /* 5c */ +0, /* 5d */ +0, /* 5e */ +37, /* _ */ +0, /* 60 */ +38, /* a */ +39, /* b */ +40, /* c */ +41, /* d */ +42, /* e */ +43, /* f */ +44, /* g */ +45, /* h */ +46, /* i */ +47, /* j */ +48, /* k */ +49, /* l */ +50, /* m */ +51, /* n */ +52, /* o */ +53, /* p */ +54, /* q */ +55, /* r */ +56, /* s */ +57, /* t */ +58, /* u */ +59, /* v */ +60, /* w */ +61, /* x */ +62, /* y */ +63, /* z */ +0, /* 7b */ +0, /* 7c */ +0, /* 7d */ +0, /* 7e */ +0, /* 7f */ +0, /* 80 */ +0, /* 81 */ +0, /* 82 */ +0, /* 83 */ +0, /* 84 */ +0, /* 85 */ +0, /* 86 */ +0, /* 87 */ +0, /* 88 */ +0, /* 89 */ +0, /* 8a */ +0, /* 8b */ +0, /* 8c */ +0, /* 8d */ +0, /* 8e */ +0, /* 8f */ +0, /* 90 */ +0, /* 91 */ +0, /* 92 */ +0, /* 93 */ +0, /* 94 */ +0, /* 95 */ +0, /* 96 */ +0, /* 97 */ +0, /* 98 */ +0, /* 99 */ +0, /* 9a */ +0, /* 9b */ +0, /* 9c */ +0, /* 9d */ +0, /* 9e */ +0, /* 9f */ +0, /* a0 */ +0, /* a1 */ +0, /* a2 */ +0, /* a3 */ +0, /* a4 */ +0, /* a5 */ +0, /* a6 */ +0, /* a7 */ +0, /* a8 */ +0, /* a9 */ +0, /* aa */ +0, /* ab */ +0, /* ac */ +0, /* ad */ +0, /* ae */ +0, /* af */ +0, /* b0 */ +0, /* b1 */ +0, /* b2 */ +0, /* b3 */ +0, /* b4 */ +0, /* b5 */ +0, /* b6 */ +0, /* b7 */ +0, /* b8 */ +0, /* b9 */ +0, /* ba */ +0, /* bb */ +0, /* bc */ +0, /* bd */ +0, /* be */ +0, /* bf */ +0, /* c0 */ +0, /* c1 */ +0, /* c2 */ +0, /* c3 */ +0, /* c4 */ +0, /* c5 */ +0, /* c6 */ +0, /* c7 */ +0, /* c8 */ +0, /* c9 */ +0, /* ca */ +0, /* cb */ +0, /* cc */ +0, /* cd */ +0, /* ce */ +0, /* cf */ +0, /* d0 */ +0, /* d1 */ +0, /* d2 */ +0, /* d3 */ +0, /* d4 */ +0, /* d5 */ +0, /* d6 */ +0, /* d7 */ +0, /* d8 */ +0, /* d9 */ +0, /* da */ +0, /* db */ +0, /* dc */ +0, /* dd */ +0, /* de */ +0, /* df */ +0, /* e0 */ +0, /* e1 */ +0, /* e2 */ +0, /* e3 */ +0, /* e4 */ +0, /* e5 */ +0, /* e6 */ +0, /* e7 */ +0, /* e8 */ +0, /* e9 */ +0, /* ea */ +0, /* eb */ +0, /* ec */ +0, /* ed */ +0, /* ee */ +0, /* ef */ +0, /* f0 */ +0, /* f1 */ +0, /* f2 */ +0, /* f3 */ +0, /* f4 */ +0, /* f5 */ +0, /* f6 */ +0, /* f7 */ +0, /* f8 */ +0, /* f9 */ +0, /* fa */ +0, /* fb */ +0, /* fc */ +0, /* fd */ +0, /* fe */ +0, /* ff */ +}; + +#define SIZE 64 + +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + +static void init() { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex,&attr); + pthread_mutexattr_destroy(&attr); + +} +#endif +struct grib_itrie { + grib_itrie* next[SIZE]; + grib_context *context; + int id; + int* count; +}; + + +grib_itrie *grib_hash_keys_new(grib_context* c,int* count) { + grib_itrie* t = grib_context_malloc_clear(c,sizeof(grib_itrie)); + t->context = c; + t->id=-1; + t->count=count; + return t; +} + +void grib_hash_keys_delete(grib_itrie *t) { + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&mutex) + + if(t) { + int i; + for(i = 0; i <= SIZE; i++) + if (t->next[i]) + grib_hash_keys_delete(t->next[i]); + + grib_context_free(t->context,t); + + } + + GRIB_MUTEX_UNLOCK(&mutex) +} + +int grib_hash_keys_get_id(grib_itrie* t,const char* key) +{ + const char *k=key; + grib_itrie* last=t; + + struct grib_keys_hash* hash=grib_keys_hash_get(key,strlen(key)); + + if (hash) { + /* printf("%s found %s (%d)\n",key,hash->name,hash->id); */ + return hash->id; + } + + /* printf("+++ \"%s\"\n",key); */ + + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&mutex) + + while(*k && t) t = t->next[mapping[(int)*k++]]; + + if(t != NULL && t->id != -1) { + GRIB_MUTEX_UNLOCK(&mutex) + return t->id+TOTAL_KEYWORDS+1; + } else { + int ret=grib_hash_keys_insert(last,key); + GRIB_MUTEX_UNLOCK(&mutex) + return ret+TOTAL_KEYWORDS+1; + } +} + +int grib_hash_keys_insert(grib_itrie* t,const char* key) +{ + const char *k = key; + grib_itrie *last = t; + int* count; + + GRIB_PTHREAD_ONCE(&once,&init) + + GRIB_MUTEX_LOCK(&mutex) + + count=t->count; + + while(*k && t) { + last = t; + t = t->next[mapping[(int)*k]]; + if(t) k++; + } + + if (*k!=0) { + t=last; + while(*k) { + int j = mapping[(int)*k++]; + t->next[j] = grib_hash_keys_new(t->context,count); + t = t->next[j]; + } + } + if (*(t->count)+TOTAL_KEYWORDS < ACCESSORS_ARRAY_SIZE) { + t->id=*(t->count); + (*(t->count))++; + } else { + grib_context_log(t->context,GRIB_LOG_ERROR, + "grib_hash_keys_get_id: too many accessors, increase ACCESSORS_ARRAY_SIZE\n"); + Assert(*(t->count)+TOTAL_KEYWORDS < ACCESSORS_ARRAY_SIZE); + } + + GRIB_MUTEX_UNLOCK(&mutex) + + /*printf("grib_hash_keys_get_id: %s -> %d\n",key,t->id);*/ + + return t->id; +} + +int grib_hash_keys_get_size(grib_itrie* t) {return *(t->count);} + diff --git a/src/grib_jasper_encoding.c b/src/grib_jasper_encoding.c new file mode 100644 index 000000000..6da8e3374 --- /dev/null +++ b/src/grib_jasper_encoding.c @@ -0,0 +1,203 @@ +#include "grib_api_internal.h" + +#if HAVE_LIBJASPER +#include "jasper/jasper.h" + +#define MAXOPTSSIZE 1024 + +int grib_jasper_decode(grib_context *c,unsigned char *buf, size_t *buflen, double *values, size_t *no_values) { + + /*jas_setdbglevel(99999);*/ + + jas_image_t *image = NULL; + jas_stream_t *jpeg = NULL; + int code = GRIB_SUCCESS; + jas_matrix_t *matrix = NULL; + jas_image_cmpt_t *p; + int i,j,k; + + jpeg = jas_stream_memopen((void*)buf,*buflen); + if(!jpeg) { + code = GRIB_DECODING_ERROR; + goto cleanup; + } + + image = jpc_decode(jpeg,NULL); + if(!image) { + code = GRIB_DECODING_ERROR; + goto cleanup; + } + + p = image->cmpts_[0]; + + if (image->numcmpts_ != 1 ) { + /* Image not gray scale */ + code = GRIB_DECODING_ERROR; + goto cleanup; + } + + matrix = jas_matrix_create(jas_image_height(image), jas_image_width(image)); + + if(!matrix) { + code = GRIB_DECODING_ERROR; + goto cleanup; + } + + jas_image_readcmpt(image,0,0,0,jas_image_width(image), jas_image_height(image),matrix); + + Assert(p->height_ * p->width_ == *no_values); + + + k=0; + for (i=0;iheight_;i++) + for (j=0;jwidth_;j++) { + values[k++] = matrix->rows_[i][j]; + } + +cleanup: + if(matrix) jas_matrix_destroy(matrix); + if(image) jas_image_destroy(image); + if(jpeg) jas_stream_close(jpeg); + + return code; +} + +int grib_jasper_encode(grib_context *c, j2k_encode_helper *helper) { + + int code = GRIB_SUCCESS; + int jaserr; + + char opts[MAXOPTSSIZE]; + double reference_value = helper->reference_value; + double decimal = helper->decimal; + double divisor = helper->divisor; + const double* values = helper->values; + long no_values = helper->no_values; + long bits8; + int i; + + size_t buflen = 0; + unsigned char *encoded = NULL; + unsigned char *p = NULL; + + + jas_image_t image = {0,}; + jas_stream_t *jpcstream = 0; + jas_stream_t *istream = 0; + jas_image_cmpt_t cmpt = {0,}; + jas_image_cmpt_t *pcmpt = 0; + + image.tlx_ = 0; + image.tly_ = 0; + image.brx_ = helper->width; + image.bry_ = helper->height; + image.numcmpts_ = 1; + image.maxcmpts_ = 1; + image.clrspc_ = JAS_CLRSPC_SGRAY; + image.cmprof_ = 0; + image.inmem_ = 1; + + cmpt.tlx_ = 0; + cmpt.tly_ = 0; + cmpt.hstep_ = 1; + cmpt.vstep_ = 1; + cmpt.width_ = helper->width; + cmpt.height_ = helper->height; + cmpt.type_ = JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_GRAY_Y); + cmpt.prec_ = helper->bits_per_value; + cmpt.sgnd_ = 0; + cmpt.cps_ = (helper->bits_per_value+7)/8; + + + /* Simple packing encoding */ + + + bits8 = (helper->bits_per_value+7)/8*8; + encoded = grib_context_malloc_clear(c,bits8/8*no_values); + + if(!encoded) { + code = GRIB_OUT_OF_MEMORY; + goto cleanup; + } + + buflen = 0; + p = encoded; + + for(i=0;i< no_values;i++){ + long blen = bits8; + unsigned long unsigned_val = (unsigned long)((((values[i]*decimal)-(reference_value))*divisor)+0.5); + while(blen >= 8) + { + blen -= 8; + *p = (unsigned_val >> blen); + p++; + buflen++; + } + } + + + /*jas_init();*/ + + opts[0] = 0; + + if( helper->compression != 0) + { + /* Lossy */ + snprintf(opts,MAXOPTSSIZE,"mode=real\nrate=%f",1.0/helper->compression); + } + + Assert(cmpt.width_ * cmpt.height_ * cmpt.cps_ == buflen); + + pcmpt = &cmpt; + image.cmpts_ = &pcmpt; + + istream = jas_stream_memopen((char *)encoded,buflen); + cmpt.stream_ = istream; + + jpcstream = jas_stream_memopen((char*)helper->jpeg_buffer,helper->buffer_size); + jaserr = jpc_encode(&image,jpcstream,opts); + + if(jaserr != 0) { + /* increase the number of guard bits */ + strcat(opts,"\nnumgbits=4"); + grib_context_log(c, GRIB_LOG_ERROR, "JASPER: error %d, increasing the number of guard bits", jaserr); + jaserr=jas_stream_close(istream); + istream = jas_stream_memopen((char *)encoded,buflen); + jaserr=jas_stream_close(jpcstream); + jpcstream = jas_stream_memopen((char*)helper->jpeg_buffer,helper->buffer_size); + jaserr = jpc_encode(&image,jpcstream,opts); + } + + if ( jaserr != 0 ) { + grib_context_log(c, GRIB_LOG_ERROR, "JASPER: error %d", jaserr); + code = GRIB_ENCODING_ERROR; + goto cleanup; + } + + helper->jpeg_length = jpcstream->rwcnt_; + jaserr=jas_stream_close(istream); istream = 0; + jaserr=jas_stream_close(jpcstream);jpcstream = 0; + +cleanup: + grib_context_free(c,encoded); + if(istream) jas_stream_close(istream); + if(jpcstream) jas_stream_close(jpcstream); + + return code; +} + +#else + +int grib_jasper_decode(grib_context *c, unsigned char *buf, size_t *buflen, double *val, size_t *n_vals) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_accessor_data_jpeg2000_packing : jasper jpeg support not enabled. Please rerun configure with --with-jasper-support"); + return GRIB_NOT_IMPLEMENTED; +} + +int grib_jasper_encode(grib_context *c, j2k_encode_helper *helper) { + grib_context_log(c, GRIB_LOG_ERROR, + "grib_accessor_data_jpeg2000_packing : jasper jpeg support not enabled. Please rerun configure with --with-jasper-support"); + return GRIB_NOT_IMPLEMENTED; +} + +#endif diff --git a/src/grib_keys_iterator.c b/src/grib_keys_iterator.c new file mode 100644 index 000000000..c62664eef --- /dev/null +++ b/src/grib_keys_iterator.c @@ -0,0 +1,219 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_keys_iterator + * + * Description: + * + * + * + * + */ + +#include "grib_api_internal.h" + +GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} + +struct grib_keys_iterator{ + grib_handle *handle; + unsigned long filter_flags; /** flags to filter out accessors */ + unsigned long accessor_flags; /** flags to filter out accessors */ + grib_accessor *current; + char *name_space; + int at_start; + int match; + grib_trie *seen; +}; + + +grib_keys_iterator* grib_keys_iterator_new(grib_handle* h,unsigned long filter_flags, char* name_space) { + + grib_keys_iterator* ki=NULL; + + if (!h) return NULL; + + ki= grib_context_malloc_clear(h->context,sizeof(grib_keys_iterator)); + if (!ki) return NULL; + + ki->filter_flags = filter_flags; + ki->handle = h; + ki->name_space = NULL; + + if (name_space != NULL) + ki->name_space = grib_context_strdup(h->context,name_space); + + ki->at_start = 1; + ki->match = 0; + + grib_keys_iterator_set_flags(ki,filter_flags); + + return ki; +} + +int grib_keys_iterator_set_flags(grib_keys_iterator* ki,unsigned long flags) { + int ret=0; + grib_handle* h; + + if (!ki) return GRIB_INTERNAL_ERROR; + + h=ki->handle; + + if(flags & GRIB_KEYS_ITERATOR_SKIP_DUPLICATES && ki->seen!=NULL ) + ki->seen = grib_trie_new(h->context); + + if(flags & GRIB_KEYS_ITERATOR_SKIP_FUNCTION) + ki->accessor_flags |= GRIB_ACCESSOR_FLAG_FUNCTION; + + if(flags & GRIB_KEYS_ITERATOR_SKIP_READ_ONLY) + ki->accessor_flags |= GRIB_ACCESSOR_FLAG_READ_ONLY; + + if(flags & GRIB_KEYS_ITERATOR_SKIP_EDITION_SPECIFIC) + ki->accessor_flags |= GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; + + return ret; +} + +static void mark_seen(grib_keys_iterator* ki,const char* name) +{ + grib_trie_insert(ki->seen,name,(void*)name); +} + +static int was_seen(grib_keys_iterator* ki,const char* name) +{ + return grib_trie_get(ki->seen,name) != NULL; +} + + +int grib_keys_iterator_rewind(grib_keys_iterator* ki) +{ + ki->at_start = 1; + return GRIB_SUCCESS; +} + +static int skip(grib_keys_iterator* kiter) { + + /* TODO: set the section to hidden, to speed up that */ + /* if(grib_get_sub_section(kiter->current)) */ + if(kiter->current->sub_section) + return 1; + + if(kiter->current->flags & GRIB_ACCESSOR_FLAG_HIDDEN) + return 1; + + if(kiter->current->flags & kiter->accessor_flags) + return 1; + + if((kiter->filter_flags & GRIB_KEYS_ITERATOR_SKIP_COMPUTED) && kiter->current->length == 0) + return 1; + + if((kiter->filter_flags & GRIB_KEYS_ITERATOR_SKIP_CODED) && kiter->current->length != 0) + return 1; + + if(kiter->name_space) + { + + kiter->match = 0; + + while(kiter->match < MAX_ACCESSOR_NAMES) + { + if(kiter->current->all_name_spaces[kiter->match] != NULL) + if(grib_inline_strcmp(kiter->current->all_name_spaces[kiter->match],kiter->name_space) == 0) + { + if(kiter->seen) + { + if(was_seen(kiter,kiter->current->all_names[kiter->match])) + return 1; + mark_seen(kiter,kiter->current->all_names[kiter->match]); + } + return 0; + } + + kiter->match++; + } + + return 1; + + } + + if(kiter->seen) + { + if(was_seen(kiter,kiter->current->name)) + return 1; + mark_seen(kiter,kiter->current->name); + } + + return 0; + +} + +int grib_keys_iterator_next(grib_keys_iterator* kiter){ + if(kiter->at_start) { + kiter->current = kiter->handle->root->block->first; + kiter->at_start = 0; + } + else + { + kiter->current = grib_next_accessor(kiter->current); + } + + while(kiter->current && skip(kiter)) + kiter->current = grib_next_accessor(kiter->current); + + return kiter->current != NULL; +} + + +const char* grib_keys_iterator_get_name(grib_keys_iterator* kiter) +{ + /* if(kiter->name_space) */ + return kiter->current->all_names[kiter->match]; +} + +grib_accessor* grib_keys_iterator_get_accessor(grib_keys_iterator* kiter) +{ + return kiter->current; +} + +int grib_keys_iterator_delete( grib_keys_iterator* kiter){ + if (kiter) { + if(kiter->seen) + grib_trie_delete(kiter->seen); + if (kiter->name_space) + grib_context_free(kiter->handle->context,kiter->name_space); + grib_context_free(kiter->handle->context,kiter); + } + return 0; +} + +int grib_keys_iterator_get_long(grib_keys_iterator* kiter,long* v,size_t* len) { + return grib_unpack_long( kiter->current,v,len); +} + +int grib_keys_iterator_get_double(grib_keys_iterator* kiter,double* v,size_t* len) { + return grib_unpack_double( kiter->current,v,len); +} + +int grib_keys_iterator_get_string(grib_keys_iterator* kiter,char* v,size_t* len) { + return grib_unpack_string( kiter->current,v,len); +} + +int grib_keys_iterator_get_bytes(grib_keys_iterator* kiter,unsigned char* v,size_t* len) { + return grib_unpack_bytes( kiter->current,v,len); +} + +int grib_keys_iterator_get_native_type(grib_keys_iterator* kiter) { + return grib_accessor_get_native_type(kiter->current); +} + diff --git a/src/grib_lex.c b/src/grib_lex.c new file mode 100644 index 000000000..a52b4ec0e --- /dev/null +++ b/src/grib_lex.c @@ -0,0 +1,2954 @@ + +#line 3 "lex.grib_yy.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define grib_yyconst const +#else +#define grib_yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (grib_yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((grib_yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE grib_yyrestart(grib_yyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(grib_yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct grib_yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int grib_yyleng; + +extern FILE *grib_yyin, *grib_yyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define grib_yyless(n) \ + do \ + { \ + /* Undo effects of setting up grib_yytext. */ \ + int grib_yyless_macro_arg = (n); \ + YY_LESS_LINENO(grib_yyless_macro_arg);\ + *grib_yy_cp = (grib_yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (grib_yy_c_buf_p) = grib_yy_cp = grib_yy_bp + grib_yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up grib_yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) grib_yyunput( c, (grib_yytext_ptr) ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t grib_yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct grib_yy_buffer_state + { + FILE *grib_yy_input_file; + + char *grib_yy_ch_buf; /* input buffer */ + char *grib_yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + grib_yy_size_t grib_yy_buf_size; + + /* Number of characters read into grib_yy_ch_buf, not including EOB + * characters. + */ + int grib_yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int grib_yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int grib_yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int grib_yy_at_bol; + + int grib_yy_bs_lineno; /**< The line count. */ + int grib_yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int grib_yy_fill_buffer; + + int grib_yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via grib_yyrestart()), so that the user can continue scanning by + * just pointing grib_yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t grib_yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t grib_yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * grib_yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (grib_yy_buffer_stack) \ + ? (grib_yy_buffer_stack)[(grib_yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (grib_yy_buffer_stack)[(grib_yy_buffer_stack_top)] + +/* grib_yy_hold_char holds the character lost when grib_yytext is formed. */ +static char grib_yy_hold_char; +static int grib_yy_n_chars; /* number of characters read into grib_yy_ch_buf */ +int grib_yyleng; + +/* Points to current character in buffer. */ +static char *grib_yy_c_buf_p = (char *) 0; +static int grib_yy_init = 0; /* whether we need to initialize */ +static int grib_yy_start = 0; /* start state number */ + +/* Flag which is used to allow grib_yywrap()'s to do buffer switches + * instead of setting up a fresh grib_yyin. A bit of a hack ... + */ +static int grib_yy_did_buffer_switch_on_eof; + +void grib_yyrestart (FILE *input_file ); +void grib_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE grib_yy_create_buffer (FILE *file,int size ); +void grib_yy_delete_buffer (YY_BUFFER_STATE b ); +void grib_yy_flush_buffer (YY_BUFFER_STATE b ); +void grib_yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void grib_yypop_buffer_state (void ); + +static void grib_yyensure_buffer_stack (void ); +static void grib_yy_load_buffer_state (void ); +static void grib_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER grib_yy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE grib_yy_scan_buffer (char *base,grib_yy_size_t size ); +YY_BUFFER_STATE grib_yy_scan_string (grib_yyconst char *grib_yy_str ); +YY_BUFFER_STATE grib_yy_scan_bytes (grib_yyconst char *bytes,int len ); + +void *grib_yyalloc (grib_yy_size_t ); +void *grib_yyrealloc (void *,grib_yy_size_t ); +void grib_yyfree (void * ); + +#define grib_yy_new_buffer grib_yy_create_buffer + +#define grib_yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + grib_yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + grib_yy_create_buffer(grib_yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->grib_yy_is_interactive = is_interactive; \ + } + +#define grib_yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + grib_yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + grib_yy_create_buffer(grib_yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->grib_yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->grib_yy_at_bol) + +/* Begin user sect3 */ + +typedef unsigned char YY_CHAR; + +FILE *grib_yyin = (FILE *) 0, *grib_yyout = (FILE *) 0; + +typedef int grib_yy_state_type; + +extern int grib_yylineno; + +int grib_yylineno = 1; + +extern char *grib_yytext; +#define grib_yytext_ptr grib_yytext + +static grib_yy_state_type grib_yy_get_previous_state (void ); +static grib_yy_state_type grib_yy_try_NUL_trans (grib_yy_state_type current_state ); +static int grib_yy_get_next_buffer (void ); +static void grib_yy_fatal_error (grib_yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up grib_yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (grib_yytext_ptr) = grib_yy_bp; \ + grib_yyleng = (size_t) (grib_yy_cp - grib_yy_bp); \ + (grib_yy_hold_char) = *grib_yy_cp; \ + *grib_yy_cp = '\0'; \ + (grib_yy_c_buf_p) = grib_yy_cp; + +#define YY_NUM_RULES 101 +#define YY_END_OF_BUFFER 102 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct grib_yy_trans_info + { + flex_int32_t grib_yy_verify; + flex_int32_t grib_yy_nxt; + }; +static grib_yyconst flex_int16_t grib_yy_accept[514] = + { 0, + 98, 98, 102, 100, 98, 99, 10, 90, 97, 100, + 100, 100, 93, 100, 100, 100, 92, 92, 92, 91, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 100, 16, 98, 4, 12, 96, 95, 0, 94, 93, + 0, 3, 5, 1, 2, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 18, + 92, 8, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 13, 92, 92, 92, 92, 92, 92, + + 92, 92, 92, 92, 92, 92, 92, 92, 92, 14, + 0, 94, 0, 0, 96, 92, 19, 92, 11, 92, + 92, 92, 6, 54, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 30, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 9, 92, 92, 42, + 92, 92, 92, 92, 92, 77, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 0, 95, + 0, 0, 94, 92, 92, 92, 92, 92, 23, 92, + 80, 92, 92, 92, 92, 92, 92, 69, 92, 20, + + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 55, 92, 92, 25, 92, 92, 92, 92, 38, 92, + 92, 92, 92, 92, 15, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 88, 92, 92, 92, 92, 92, + 92, 92, 79, 92, 92, 0, 94, 92, 45, 92, + 22, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 36, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 24, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 40, 92, 87, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 26, + + 85, 92, 86, 65, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 62, 92, 92, 92, 92, 71, 92, + 92, 92, 92, 92, 64, 92, 37, 92, 92, 58, + 92, 92, 92, 7, 92, 92, 92, 92, 92, 63, + 92, 92, 33, 92, 81, 92, 92, 92, 92, 92, + 73, 92, 92, 92, 83, 92, 92, 76, 82, 92, + 56, 92, 92, 92, 92, 92, 89, 92, 92, 92, + 92, 44, 53, 67, 70, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 29, 46, 92, 92, 92, + 92, 92, 48, 92, 92, 92, 92, 92, 31, 92, + + 52, 92, 92, 92, 75, 92, 92, 47, 92, 92, + 92, 92, 27, 92, 21, 92, 34, 92, 92, 92, + 92, 92, 92, 92, 32, 92, 51, 17, 39, 92, + 66, 92, 92, 92, 92, 49, 92, 92, 92, 74, + 92, 92, 92, 92, 92, 92, 92, 78, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 57, 92, 92, + 50, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 41, + 92, 92, 72, 92, 84, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 43, 28, 92, 68, + + 92, 92, 92, 35, 92, 60, 92, 92, 61, 92, + 92, 59, 0 + } ; + +static grib_yyconst flex_int32_t grib_yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 5, 6, 1, 1, 7, 8, 1, + 1, 1, 9, 1, 9, 10, 1, 11, 12, 11, + 11, 13, 11, 11, 11, 11, 11, 1, 1, 14, + 15, 16, 1, 1, 17, 17, 17, 17, 18, 17, + 19, 17, 20, 17, 17, 17, 21, 22, 17, 17, + 17, 17, 23, 17, 17, 17, 17, 17, 17, 17, + 1, 1, 1, 1, 24, 25, 26, 27, 28, 29, + + 30, 31, 32, 33, 34, 17, 35, 36, 37, 38, + 39, 40, 17, 41, 42, 43, 44, 45, 46, 47, + 48, 17, 1, 49, 1, 50, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static grib_yyconst flex_int32_t grib_yy_meta[51] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1 + } ; + +static grib_yyconst flex_int16_t grib_yy_base[516] = + { 0, + 0, 0, 364, 2099, 357, 2099, 342, 2099, 2099, 349, + 40, 43, 48, 47, 339, 320, 56, 59, 62, 2099, + 69, 74, 77, 80, 83, 59, 115, 120, 128, 62, + 123, 111, 112, 161, 149, 113, 150, 169, 200, 203, + 284, 2099, 330, 2099, 2099, 209, 212, 220, 234, 244, + 254, 2099, 2099, 2099, 2099, 0, 237, 247, 260, 264, + 267, 270, 273, 276, 281, 291, 125, 271, 305, 309, + 313, 318, 326, 329, 332, 303, 337, 340, 350, 359, + 362, 370, 373, 376, 380, 383, 386, 397, 389, 400, + 404, 413, 427, 407, 434, 437, 440, 446, 449, 456, + + 459, 466, 476, 481, 484, 152, 472, 479, 486, 2099, + 515, 518, 526, 521, 529, 532, 538, 541, 545, 548, + 551, 557, 560, 563, 568, 571, 577, 580, 588, 591, + 600, 603, 609, 612, 623, 619, 626, 629, 167, 633, + 639, 645, 655, 660, 665, 668, 671, 674, 677, 683, + 693, 699, 702, 708, 713, 718, 721, 724, 727, 732, + 739, 744, 750, 753, 758, 765, 772, 775, 782, 785, + 791, 794, 801, 806, 809, 812, 823, 826, 833, 836, + 842, 845, 849, 852, 855, 862, 865, 868, 871, 874, + 877, 880, 883, 891, 894, 900, 903, 914, 917, 920, + + 923, 927, 297, 284, 282, 930, 937, 944, 933, 950, + 954, 959, 967, 970, 973, 976, 980, 987, 990, 993, + 996, 1003, 1006, 1016, 1022, 1025, 1028, 1032, 1035, 1040, + 1043, 1046, 1049, 1059, 1070, 1073, 1079, 1082, 1085, 1088, + 1091, 1097, 1101, 1104, 1110, 1119, 1124, 1130, 1133, 1136, + 1142, 1145, 1148, 1151, 1155, 1158, 1161, 1168, 1178, 1171, + 1181, 1184, 1188, 270, 263, 271, 1192, 1200, 1204, 1208, + 1214, 267, 1220, 1223, 1230, 1234, 1237, 1240, 1247, 1250, + 1256, 1264, 1267, 1270, 1275, 1288, 1278, 1295, 1302, 1305, + 1308, 1312, 1316, 1324, 1327, 1338, 1343, 1348, 1351, 1354, + + 1357, 1364, 1367, 1373, 1379, 1382, 1385, 1388, 1395, 1399, + 1402, 1405, 1408, 1411, 1415, 264, 248, 226, 1423, 1427, + 1430, 1438, 1443, 221, 1448, 1451, 1454, 1459, 1462, 1465, + 1468, 1475, 1478, 1482, 1489, 1485, 1492, 1495, 1504, 1508, + 1513, 1516, 1520, 1526, 1532, 1541, 1544, 1547, 1550, 1553, + 1556, 1559, 1564, 1567, 1574, 1582, 1590, 1593, 1596, 1599, + 1602, 237, 225, 209, 1605, 1608, 1615, 1618, 201, 1624, + 1627, 1630, 1633, 1638, 1641, 1644, 1649, 1654, 1659, 1664, + 1669, 1672, 1675, 1683, 1690, 1693, 1696, 1703, 1699, 1708, + 1711, 1714, 1718, 1723, 1729, 213, 205, 196, 1732, 1735, + + 1738, 189, 1742, 1745, 1751, 1754, 1757, 1768, 1771, 1774, + 1777, 1782, 1785, 1790, 1793, 1804, 1809, 1812, 1815, 1823, + 1827, 181, 198, 188, 1830, 187, 1836, 1844, 1847, 1850, + 1857, 1860, 1863, 1866, 1869, 1876, 1879, 1882, 1885, 1889, + 1892, 164, 181, 188, 157, 1897, 1901, 1906, 1912, 1915, + 1921, 1927, 1932, 1935, 167, 158, 168, 0, 1938, 1948, + 1953, 1956, 1959, 1967, 1970, 1973, 163, 151, 141, 1978, + 1981, 1987, 1990, 2005, 2008, 2012, 141, 122, 118, 2015, + 2021, 2024, 2027, 2034, 2037, 2040, 105, 108, 91, 2043, + 2051, 2054, 2057, 91, 75, 85, 2060, 2065, 2068, 2071, + + 85, 81, 63, 2080, 63, 0, 51, 47, 0, 51, + 44, 0, 2099, 63, 62 + } ; + +static grib_yyconst flex_int16_t grib_yy_def[516] = + { 0, + 513, 1, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 514, 514, 514, 513, + 514, 514, 514, 514, 21, 21, 514, 514, 21, 21, + 514, 31, 31, 514, 31, 31, 31, 31, 514, 514, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 515, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 21, 21, 514, 514, + 514, 514, 514, 514, 514, 515, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + + 514, 514, 514, 514, 514, 31, 31, 31, 31, 513, + 513, 513, 513, 513, 513, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 515, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 513, 513, + 513, 513, 513, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + + 514, 514, 515, 515, 515, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 513, 513, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 515, 515, 515, 514, 514, 514, 514, + 514, 515, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 515, 515, 515, 514, 514, + 514, 514, 514, 515, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 515, 515, 515, 514, 514, 514, 514, 515, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 515, 515, 515, 514, 514, + + 514, 515, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 515, 515, 515, 514, 515, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 515, 515, 515, 515, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 515, 515, 515, 515, 514, 514, + 514, 514, 514, 514, 514, 514, 515, 515, 515, 514, + 514, 514, 514, 514, 514, 514, 515, 515, 515, 514, + 514, 514, 514, 514, 514, 514, 515, 515, 515, 514, + 514, 514, 514, 515, 515, 515, 514, 514, 514, 514, + + 515, 515, 515, 514, 515, 515, 515, 515, 515, 515, + 515, 515, 0, 513, 513 + } ; + +static grib_yyconst flex_int16_t grib_yy_nxt[2150] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 8, 11, 12, + 13, 13, 13, 14, 15, 16, 17, 17, 17, 17, + 18, 17, 17, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 17, 40, 17, 17, 41, 42, + 46, 46, 46, 47, 47, 47, 48, 49, 50, 50, + 50, 52, 53, 56, 57, 51, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 512, 511, 51, 58, 56, + 56, 56, 510, 509, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 508, 75, 59, 57, 57, 57, 57, + + 57, 57, 67, 84, 60, 507, 61, 64, 62, 69, + 63, 71, 65, 506, 505, 68, 503, 502, 72, 501, + 73, 66, 57, 70, 57, 56, 76, 56, 496, 74, + 56, 56, 56, 56, 56, 56, 57, 57, 57, 495, + 89, 91, 99, 494, 57, 57, 57, 489, 85, 90, + 92, 57, 86, 77, 78, 93, 87, 79, 80, 488, + 57, 88, 126, 57, 57, 81, 127, 57, 487, 82, + 83, 56, 56, 56, 96, 57, 479, 172, 57, 100, + 478, 57, 57, 101, 102, 173, 477, 97, 57, 98, + 57, 469, 103, 468, 57, 104, 467, 458, 105, 203, + + 457, 94, 57, 204, 456, 95, 455, 57, 205, 106, + 56, 56, 56, 56, 56, 56, 445, 48, 49, 46, + 46, 46, 47, 47, 47, 444, 51, 443, 442, 111, + 46, 46, 46, 426, 424, 108, 423, 107, 51, 422, + 402, 111, 398, 109, 112, 112, 112, 56, 56, 56, + 397, 113, 48, 49, 50, 50, 50, 56, 56, 56, + 396, 51, 114, 113, 115, 115, 115, 369, 364, 116, + 56, 56, 56, 51, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 363, + 117, 56, 56, 56, 362, 119, 324, 118, 318, 128, + + 121, 56, 56, 56, 317, 316, 57, 129, 130, 120, + 131, 266, 57, 265, 122, 56, 56, 56, 123, 56, + 56, 56, 264, 56, 56, 56, 139, 124, 56, 56, + 56, 43, 110, 125, 55, 132, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 133, 134, 56, 56, 56, + 56, 56, 56, 54, 136, 45, 44, 138, 43, 135, + 56, 56, 56, 513, 513, 140, 513, 513, 137, 56, + 56, 56, 56, 56, 56, 513, 141, 513, 513, 142, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 143, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 56, 144, 513, 513, 145, 146, 56, 56, 56, + 56, 56, 56, 513, 56, 56, 56, 56, 56, 56, + 147, 513, 513, 56, 56, 56, 513, 148, 154, 155, + 152, 153, 513, 513, 149, 150, 156, 56, 56, 56, + 513, 513, 151, 513, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 513, 513, 157, 56, 56, 56, 56, + 56, 56, 158, 159, 513, 160, 56, 56, 56, 56, + 56, 56, 513, 513, 163, 513, 56, 56, 56, 162, + 513, 161, 513, 165, 513, 164, 56, 56, 56, 513, + 167, 56, 56, 56, 56, 56, 56, 174, 166, 168, + + 513, 57, 513, 513, 57, 57, 513, 513, 176, 513, + 57, 57, 177, 175, 170, 57, 169, 57, 513, 178, + 171, 513, 513, 179, 57, 180, 180, 180, 112, 112, + 112, 115, 115, 115, 182, 181, 183, 183, 183, 115, + 115, 115, 56, 56, 56, 513, 513, 181, 56, 56, + 56, 56, 56, 56, 184, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 513, 513, 185, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 513, 186, 56, 56, + 56, 56, 56, 56, 187, 513, 188, 56, 56, 56, + 56, 56, 56, 513, 190, 513, 513, 189, 56, 56, + + 56, 56, 56, 56, 513, 513, 191, 513, 513, 192, + 56, 56, 56, 56, 56, 56, 513, 513, 194, 56, + 56, 56, 56, 56, 56, 513, 513, 193, 197, 56, + 56, 56, 195, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 513, 56, 56, 56, 513, 196, 198, 56, + 56, 56, 200, 513, 199, 56, 56, 56, 513, 513, + 202, 206, 513, 513, 201, 56, 56, 56, 513, 207, + 56, 56, 56, 513, 208, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 209, 513, 211, 56, 56, 56, 513, 212, 513, 513, + + 210, 513, 213, 56, 56, 56, 513, 513, 215, 56, + 56, 56, 56, 56, 56, 513, 214, 216, 56, 56, + 56, 513, 217, 56, 56, 56, 513, 219, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 218, 220, 56, 56, 56, 222, 513, 224, 223, 56, + 56, 56, 513, 221, 56, 56, 56, 513, 513, 225, + 56, 56, 56, 56, 56, 56, 513, 226, 56, 56, + 56, 513, 228, 513, 227, 56, 56, 56, 230, 513, + 513, 229, 56, 56, 56, 56, 56, 56, 233, 513, + 513, 231, 56, 56, 56, 56, 56, 56, 513, 513, + + 232, 56, 56, 56, 56, 56, 56, 513, 513, 234, + 513, 56, 56, 56, 235, 236, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 513, 513, 237, 513, 513, + 238, 239, 240, 56, 56, 56, 56, 56, 56, 513, + 513, 241, 242, 180, 180, 180, 180, 180, 180, 243, + 246, 513, 247, 247, 247, 183, 183, 183, 244, 183, + 183, 183, 56, 56, 56, 56, 56, 56, 245, 513, + 513, 248, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 249, 513, 251, 250, + + 253, 56, 56, 56, 56, 56, 56, 513, 252, 513, + 56, 56, 56, 56, 56, 56, 513, 513, 255, 513, + 256, 513, 254, 258, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 257, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 259, 56, 56, 56, + 260, 513, 513, 262, 56, 56, 56, 513, 513, 267, + 56, 56, 56, 261, 56, 272, 56, 513, 263, 56, + 56, 56, 268, 513, 269, 271, 270, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 513, + 56, 56, 56, 513, 273, 513, 275, 56, 56, 56, + + 56, 56, 56, 56, 56, 56, 56, 56, 56, 274, + 513, 513, 278, 56, 56, 56, 56, 56, 56, 276, + 277, 513, 513, 279, 513, 280, 56, 56, 56, 513, + 513, 282, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 281, 56, 56, 56, 56, 56, 56, 513, 283, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 513, 288, 513, 284, 285, 513, 513, 56, + 56, 56, 513, 513, 286, 513, 513, 287, 513, 290, + 56, 56, 56, 56, 56, 56, 291, 289, 292, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 56, 56, 56, 513, 513, 294, 56, 56, 56, + 293, 56, 56, 56, 56, 56, 56, 295, 513, 297, + 56, 56, 56, 513, 298, 513, 296, 513, 299, 247, + 247, 247, 513, 300, 247, 247, 247, 513, 513, 301, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 513, + 513, 302, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 303, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 513, 513, 306, 305, 56, 56, + 56, 56, 56, 56, 307, 513, 309, 304, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 308, 56, 56, + + 56, 310, 56, 56, 56, 513, 311, 513, 513, 313, + 56, 56, 56, 312, 56, 56, 56, 315, 56, 56, + 56, 513, 513, 314, 56, 56, 56, 513, 513, 319, + 56, 56, 56, 56, 56, 56, 322, 513, 320, 321, + 56, 56, 56, 513, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 513, 513, 325, 323, 56, 56, 56, + 56, 56, 56, 513, 328, 513, 56, 56, 56, 513, + 513, 329, 326, 327, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 513, 513, 56, 56, 56, 56, 56, + 56, 331, 513, 513, 330, 332, 513, 333, 56, 56, + + 56, 513, 513, 335, 336, 56, 56, 56, 513, 334, + 513, 337, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 338, 56, 56, 56, 513, 56, 56, 56, 513, + 513, 340, 513, 339, 56, 56, 56, 56, 56, 56, + 343, 513, 513, 341, 513, 513, 342, 344, 56, 56, + 56, 513, 346, 56, 56, 56, 345, 513, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 513, 347, 348, 349, 56, 56, 56, 56, 56, 56, + 513, 513, 351, 56, 56, 56, 513, 513, 350, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 513, 352, 513, 513, 56, 56, 56, 353, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 357, 56, 56, 56, 513, 513, + 355, 354, 356, 56, 56, 56, 358, 56, 56, 56, + 56, 56, 56, 513, 513, 360, 513, 359, 56, 56, + 56, 513, 365, 56, 56, 56, 513, 361, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 367, 366, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 368, 513, 513, 371, 56, 56, 56, 56, 56, + 56, 372, 56, 56, 56, 56, 56, 56, 370, 56, + + 56, 56, 56, 56, 56, 56, 56, 56, 513, 513, + 373, 513, 513, 375, 56, 56, 56, 376, 56, 56, + 56, 513, 374, 56, 56, 56, 56, 56, 56, 377, + 56, 56, 56, 379, 513, 378, 56, 56, 56, 513, + 513, 380, 56, 56, 56, 513, 382, 513, 513, 383, + 381, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 513, 385, 56, 56, 56, 56, 56, 56, + 513, 513, 388, 384, 56, 56, 56, 386, 513, 513, + 391, 387, 56, 56, 56, 389, 513, 392, 513, 390, + + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 513, 395, 394, 393, 56, 56, 56, 56, 56, + 56, 513, 513, 400, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 513, 399, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 513, 401, 56, + 56, 56, 513, 403, 56, 56, 56, 513, 404, 56, + 56, 56, 513, 405, 56, 56, 56, 513, 406, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 513, 407, + 513, 513, 410, 56, 56, 56, 408, 411, 513, 409, + + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 413, 56, 56, 56, 513, 412, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 414, 56, 56, + 56, 415, 416, 56, 56, 56, 513, 417, 418, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 419, 56, 56, 56, 56, 56, 56, 513, 513, + 420, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 421, 427, 513, 513, 428, 513, 513, 425, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 513, 429, 56, 56, 56, 56, 56, 56, 513, 430, + + 56, 56, 56, 56, 56, 56, 513, 513, 435, 513, + 433, 513, 513, 432, 56, 56, 56, 513, 431, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 513, 434, + 513, 513, 436, 56, 56, 56, 513, 56, 56, 56, + 56, 56, 56, 513, 513, 437, 56, 56, 56, 513, + 438, 513, 513, 439, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 513, 513, 440, 441, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 513, 446, 513, 447, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 448, 56, + + 56, 56, 56, 56, 56, 449, 450, 56, 56, 56, + 452, 56, 56, 56, 513, 453, 56, 56, 56, 513, + 451, 454, 56, 56, 56, 56, 56, 56, 513, 460, + 513, 56, 56, 56, 513, 513, 459, 56, 56, 56, + 513, 461, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 513, 513, 462, 463, 513, 464, 465, 56, 56, + 56, 513, 466, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 513, 470, 513, 513, 471, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 472, 513, 56, 56, + 56, 56, 56, 56, 513, 513, 473, 56, 56, 56, + + 56, 56, 56, 475, 513, 513, 476, 480, 513, 474, + 513, 513, 482, 513, 481, 56, 56, 56, 56, 56, + 56, 483, 56, 56, 56, 56, 56, 56, 513, 513, + 484, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 513, 513, 486, 485, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 513, 491, 490, 513, + 492, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 493, 497, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 500, 513, 498, 513, 513, 499, + 56, 56, 56, 513, 513, 513, 513, 504, 3, 513, + + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513 + } ; + +static grib_yyconst flex_int16_t grib_yy_chk[2150] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, + 13, 14, 14, 515, 514, 13, 17, 17, 17, 18, + 18, 18, 19, 19, 19, 511, 510, 13, 18, 21, + 21, 21, 508, 507, 22, 22, 22, 23, 23, 23, + 24, 24, 24, 505, 26, 19, 26, 30, 26, 30, + + 26, 30, 23, 30, 21, 503, 21, 22, 21, 24, + 21, 25, 22, 502, 501, 23, 496, 495, 25, 494, + 25, 22, 25, 24, 25, 27, 27, 27, 489, 25, + 28, 28, 28, 31, 31, 31, 32, 33, 36, 488, + 32, 33, 36, 487, 32, 33, 36, 479, 31, 32, + 33, 36, 31, 28, 29, 33, 31, 29, 29, 478, + 67, 31, 67, 29, 67, 29, 67, 29, 477, 29, + 29, 34, 34, 34, 35, 37, 469, 106, 35, 37, + 468, 106, 35, 37, 37, 106, 467, 35, 37, 35, + 106, 457, 37, 456, 38, 37, 455, 445, 38, 139, + + 444, 34, 38, 139, 443, 34, 442, 38, 139, 38, + 39, 39, 39, 40, 40, 40, 426, 46, 46, 46, + 46, 46, 47, 47, 47, 424, 46, 423, 422, 47, + 48, 48, 48, 402, 398, 40, 397, 39, 46, 396, + 369, 47, 364, 40, 49, 49, 49, 57, 57, 57, + 363, 49, 50, 50, 50, 50, 50, 58, 58, 58, + 362, 50, 51, 49, 51, 51, 51, 324, 318, 58, + 59, 59, 59, 50, 60, 60, 60, 61, 61, 61, + 62, 62, 62, 63, 63, 63, 64, 64, 64, 317, + 59, 65, 65, 65, 316, 61, 272, 60, 266, 68, + + 63, 66, 66, 66, 265, 264, 68, 68, 68, 62, + 68, 205, 68, 204, 63, 69, 69, 69, 64, 70, + 70, 70, 203, 71, 71, 71, 76, 65, 72, 72, + 72, 43, 41, 66, 16, 69, 73, 73, 73, 74, + 74, 74, 75, 75, 75, 70, 71, 77, 77, 77, + 78, 78, 78, 15, 73, 10, 7, 75, 5, 72, + 79, 79, 79, 3, 0, 77, 0, 0, 74, 80, + 80, 80, 81, 81, 81, 0, 78, 0, 0, 79, + 82, 82, 82, 83, 83, 83, 84, 84, 84, 81, + 85, 85, 85, 86, 86, 86, 87, 87, 87, 89, + + 89, 89, 83, 0, 0, 84, 85, 88, 88, 88, + 90, 90, 90, 0, 91, 91, 91, 94, 94, 94, + 86, 0, 0, 92, 92, 92, 0, 87, 90, 91, + 89, 89, 0, 0, 88, 88, 92, 93, 93, 93, + 0, 0, 88, 0, 95, 95, 95, 96, 96, 96, + 97, 97, 97, 0, 0, 92, 98, 98, 98, 99, + 99, 99, 93, 95, 0, 96, 100, 100, 100, 101, + 101, 101, 0, 0, 99, 0, 102, 102, 102, 98, + 0, 97, 0, 100, 0, 99, 103, 103, 103, 0, + 101, 104, 104, 104, 105, 105, 105, 107, 100, 102, + + 0, 107, 0, 0, 108, 107, 0, 0, 108, 0, + 107, 109, 108, 107, 104, 109, 103, 108, 0, 109, + 105, 0, 0, 111, 109, 111, 111, 111, 112, 112, + 112, 114, 114, 114, 113, 112, 113, 113, 113, 115, + 115, 115, 116, 116, 116, 0, 0, 112, 117, 117, + 117, 118, 118, 118, 116, 119, 119, 119, 120, 120, + 120, 121, 121, 121, 0, 0, 118, 122, 122, 122, + 123, 123, 123, 124, 124, 124, 0, 120, 125, 125, + 125, 126, 126, 126, 121, 0, 122, 127, 127, 127, + 128, 128, 128, 0, 126, 0, 0, 125, 129, 129, + + 129, 130, 130, 130, 0, 0, 127, 0, 0, 128, + 131, 131, 131, 132, 132, 132, 0, 0, 130, 133, + 133, 133, 134, 134, 134, 0, 0, 129, 132, 136, + 136, 136, 130, 135, 135, 135, 137, 137, 137, 138, + 138, 138, 0, 140, 140, 140, 0, 131, 133, 141, + 141, 141, 135, 0, 134, 142, 142, 142, 0, 0, + 138, 140, 0, 0, 137, 143, 143, 143, 0, 141, + 144, 144, 144, 0, 142, 145, 145, 145, 146, 146, + 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, + 143, 0, 145, 150, 150, 150, 0, 146, 0, 0, + + 144, 0, 147, 151, 151, 151, 0, 0, 149, 152, + 152, 152, 153, 153, 153, 0, 148, 150, 154, 154, + 154, 0, 151, 155, 155, 155, 0, 153, 156, 156, + 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, + 152, 154, 160, 160, 160, 156, 0, 157, 156, 161, + 161, 161, 0, 155, 162, 162, 162, 0, 0, 158, + 163, 163, 163, 164, 164, 164, 0, 159, 165, 165, + 165, 0, 161, 0, 160, 166, 166, 166, 163, 0, + 0, 162, 167, 167, 167, 168, 168, 168, 166, 0, + 0, 164, 169, 169, 169, 170, 170, 170, 0, 0, + + 165, 171, 171, 171, 172, 172, 172, 0, 0, 167, + 0, 173, 173, 173, 168, 169, 174, 174, 174, 175, + 175, 175, 176, 176, 176, 0, 0, 170, 0, 0, + 171, 172, 173, 177, 177, 177, 178, 178, 178, 0, + 0, 174, 175, 179, 179, 179, 180, 180, 180, 176, + 181, 0, 181, 181, 181, 182, 182, 182, 177, 183, + 183, 183, 184, 184, 184, 185, 185, 185, 178, 0, + 0, 184, 186, 186, 186, 187, 187, 187, 188, 188, + 188, 189, 189, 189, 190, 190, 190, 191, 191, 191, + 192, 192, 192, 193, 193, 193, 185, 0, 187, 186, + + 190, 194, 194, 194, 195, 195, 195, 0, 188, 0, + 196, 196, 196, 197, 197, 197, 0, 0, 193, 0, + 194, 0, 192, 196, 198, 198, 198, 199, 199, 199, + 200, 200, 200, 201, 201, 201, 195, 202, 202, 202, + 206, 206, 206, 209, 209, 209, 197, 207, 207, 207, + 199, 0, 0, 202, 208, 208, 208, 0, 0, 206, + 210, 210, 210, 201, 211, 211, 211, 0, 202, 212, + 212, 212, 207, 0, 208, 210, 209, 213, 213, 213, + 214, 214, 214, 215, 215, 215, 216, 216, 216, 0, + 217, 217, 217, 0, 212, 0, 215, 218, 218, 218, + + 219, 219, 219, 220, 220, 220, 221, 221, 221, 213, + 0, 0, 218, 222, 222, 222, 223, 223, 223, 216, + 217, 0, 0, 220, 0, 221, 224, 224, 224, 0, + 0, 223, 225, 225, 225, 226, 226, 226, 227, 227, + 227, 222, 228, 228, 228, 229, 229, 229, 0, 224, + 230, 230, 230, 231, 231, 231, 232, 232, 232, 233, + 233, 233, 0, 230, 0, 226, 227, 0, 0, 234, + 234, 234, 0, 0, 228, 0, 0, 229, 0, 232, + 235, 235, 235, 236, 236, 236, 233, 231, 234, 237, + 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, + + 240, 241, 241, 241, 0, 0, 237, 242, 242, 242, + 236, 243, 243, 243, 244, 244, 244, 238, 0, 240, + 245, 245, 245, 0, 241, 0, 239, 0, 242, 246, + 246, 246, 0, 244, 247, 247, 247, 0, 0, 245, + 248, 248, 248, 249, 249, 249, 250, 250, 250, 0, + 0, 248, 251, 251, 251, 252, 252, 252, 253, 253, + 253, 254, 254, 254, 250, 255, 255, 255, 256, 256, + 256, 257, 257, 257, 0, 0, 254, 253, 258, 258, + 258, 260, 260, 260, 255, 0, 257, 252, 259, 259, + 259, 261, 261, 261, 262, 262, 262, 256, 263, 263, + + 263, 257, 267, 267, 267, 0, 258, 0, 0, 260, + 268, 268, 268, 259, 269, 269, 269, 262, 270, 270, + 270, 0, 0, 261, 271, 271, 271, 0, 0, 267, + 273, 273, 273, 274, 274, 274, 270, 0, 268, 269, + 275, 275, 275, 0, 276, 276, 276, 277, 277, 277, + 278, 278, 278, 0, 0, 274, 271, 279, 279, 279, + 280, 280, 280, 0, 277, 0, 281, 281, 281, 0, + 0, 278, 275, 276, 282, 282, 282, 283, 283, 283, + 284, 284, 284, 0, 0, 285, 285, 285, 287, 287, + 287, 280, 0, 0, 279, 281, 0, 282, 286, 286, + + 286, 0, 0, 284, 285, 288, 288, 288, 0, 283, + 0, 285, 289, 289, 289, 290, 290, 290, 291, 291, + 291, 286, 292, 292, 292, 0, 293, 293, 293, 0, + 0, 289, 0, 288, 294, 294, 294, 295, 295, 295, + 292, 0, 0, 290, 0, 0, 291, 293, 296, 296, + 296, 0, 295, 297, 297, 297, 294, 0, 298, 298, + 298, 299, 299, 299, 300, 300, 300, 301, 301, 301, + 0, 296, 297, 298, 302, 302, 302, 303, 303, 303, + 0, 0, 302, 304, 304, 304, 0, 0, 299, 305, + 305, 305, 306, 306, 306, 307, 307, 307, 308, 308, + + 308, 0, 305, 0, 0, 309, 309, 309, 306, 310, + 310, 310, 311, 311, 311, 312, 312, 312, 313, 313, + 313, 314, 314, 314, 310, 315, 315, 315, 0, 0, + 308, 307, 309, 319, 319, 319, 311, 320, 320, 320, + 321, 321, 321, 0, 0, 313, 0, 312, 322, 322, + 322, 0, 320, 323, 323, 323, 0, 315, 325, 325, + 325, 326, 326, 326, 327, 327, 327, 322, 321, 328, + 328, 328, 329, 329, 329, 330, 330, 330, 331, 331, + 331, 323, 0, 0, 328, 332, 332, 332, 333, 333, + 333, 329, 334, 334, 334, 336, 336, 336, 326, 335, + + 335, 335, 337, 337, 337, 338, 338, 338, 0, 0, + 331, 0, 0, 333, 339, 339, 339, 335, 340, 340, + 340, 0, 332, 341, 341, 341, 342, 342, 342, 336, + 343, 343, 343, 338, 0, 337, 344, 344, 344, 0, + 0, 339, 345, 345, 345, 0, 342, 0, 0, 344, + 341, 346, 346, 346, 347, 347, 347, 348, 348, 348, + 349, 349, 349, 350, 350, 350, 351, 351, 351, 352, + 352, 352, 0, 347, 353, 353, 353, 354, 354, 354, + 0, 0, 350, 346, 355, 355, 355, 348, 0, 0, + 354, 349, 356, 356, 356, 352, 0, 355, 0, 353, + + 357, 357, 357, 358, 358, 358, 359, 359, 359, 360, + 360, 360, 361, 361, 361, 365, 365, 365, 366, 366, + 366, 0, 360, 357, 356, 367, 367, 367, 368, 368, + 368, 0, 0, 366, 370, 370, 370, 371, 371, 371, + 372, 372, 372, 373, 373, 373, 0, 365, 374, 374, + 374, 375, 375, 375, 376, 376, 376, 0, 368, 377, + 377, 377, 0, 370, 378, 378, 378, 0, 371, 379, + 379, 379, 0, 376, 380, 380, 380, 0, 377, 381, + 381, 381, 382, 382, 382, 383, 383, 383, 0, 378, + 0, 0, 381, 384, 384, 384, 379, 382, 0, 380, + + 385, 385, 385, 386, 386, 386, 387, 387, 387, 389, + 389, 389, 384, 388, 388, 388, 0, 383, 390, 390, + 390, 391, 391, 391, 392, 392, 392, 385, 393, 393, + 393, 388, 389, 394, 394, 394, 0, 390, 391, 395, + 395, 395, 399, 399, 399, 400, 400, 400, 401, 401, + 401, 392, 403, 403, 403, 404, 404, 404, 0, 0, + 394, 405, 405, 405, 406, 406, 406, 407, 407, 407, + 395, 403, 0, 0, 404, 0, 0, 400, 408, 408, + 408, 409, 409, 409, 410, 410, 410, 411, 411, 411, + 0, 406, 412, 412, 412, 413, 413, 413, 0, 407, + + 414, 414, 414, 415, 415, 415, 0, 0, 413, 0, + 411, 0, 0, 410, 416, 416, 416, 0, 409, 417, + 417, 417, 418, 418, 418, 419, 419, 419, 0, 412, + 0, 0, 414, 420, 420, 420, 0, 421, 421, 421, + 425, 425, 425, 0, 0, 416, 427, 427, 427, 0, + 418, 0, 0, 419, 428, 428, 428, 429, 429, 429, + 430, 430, 430, 0, 0, 420, 421, 431, 431, 431, + 432, 432, 432, 433, 433, 433, 434, 434, 434, 435, + 435, 435, 0, 430, 0, 432, 436, 436, 436, 437, + 437, 437, 438, 438, 438, 439, 439, 439, 433, 440, + + 440, 440, 441, 441, 441, 434, 435, 446, 446, 446, + 438, 447, 447, 447, 0, 439, 448, 448, 448, 0, + 437, 441, 449, 449, 449, 450, 450, 450, 0, 447, + 0, 451, 451, 451, 0, 0, 446, 452, 452, 452, + 0, 449, 453, 453, 453, 454, 454, 454, 459, 459, + 459, 0, 0, 450, 451, 0, 452, 453, 460, 460, + 460, 0, 454, 461, 461, 461, 462, 462, 462, 463, + 463, 463, 0, 459, 0, 0, 460, 464, 464, 464, + 465, 465, 465, 466, 466, 466, 462, 0, 470, 470, + 470, 471, 471, 471, 0, 0, 463, 472, 472, 472, + + 473, 473, 473, 465, 0, 0, 466, 470, 0, 464, + 0, 0, 472, 0, 471, 474, 474, 474, 475, 475, + 475, 473, 476, 476, 476, 480, 480, 480, 0, 0, + 474, 481, 481, 481, 482, 482, 482, 483, 483, 483, + 0, 0, 476, 475, 484, 484, 484, 485, 485, 485, + 486, 486, 486, 490, 490, 490, 0, 482, 481, 0, + 484, 491, 491, 491, 492, 492, 492, 493, 493, 493, + 497, 497, 497, 486, 490, 498, 498, 498, 499, 499, + 499, 500, 500, 500, 493, 0, 491, 0, 0, 492, + 504, 504, 504, 0, 0, 0, 0, 499, 513, 513, + + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513 + } ; + +static grib_yy_state_type grib_yy_last_accepting_state; +static char *grib_yy_last_accepting_cpos; + +extern int grib_yy_flex_debug; +int grib_yy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define grib_yymore() grib_yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *grib_yytext; +#line 1 "gribl.l" +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +#line 13 "gribl.l" +#include "grib_api_internal.h" +#include "grib_yacc.h" +#include + +int grib_yylineno; + +/* Keep -Wall quiet */ + + +/* + +This is needed for implementing "include", otherwise +flex buffer optimization break the includes. + +*/ + +#define YY_INPUT(buf,result,max_size) \ + { \ + int c = getc(grib_yyin); \ + result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \ + } + + +/* +#ifdef __GNUC__ +#ifdef FLEX_SCANNER +void grib_yyunput (int c,char *buf_ptr ); +void _grib_ignore_grib_yyunput_unused_error() { grib_yyunput(0,0); } +#endif +#endif +*/ + +#line 1133 "lex.grib_yy.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int grib_yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int grib_yylex_destroy (void ); + +int grib_yyget_debug (void ); + +void grib_yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE grib_yyget_extra (void ); + +void grib_yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *grib_yyget_in (void ); + +void grib_yyset_in (FILE * in_str ); + +FILE *grib_yyget_out (void ); + +void grib_yyset_out (FILE * out_str ); + +int grib_yyget_leng (void ); + +char *grib_yyget_text (void ); + +int grib_yyget_lineno (void ); + +void grib_yyset_lineno (int line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int grib_yywrap (void ); +#else +extern int grib_yywrap (void ); +#endif +#endif + + void grib_yyunput (int c,char *buf_ptr ); + +#ifndef grib_yytext_ptr +static void grib_yy_flex_strncpy (char *,grib_yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int grib_yy_flex_strlen (grib_yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int grib_yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO fwrite( grib_yytext, grib_yyleng, 1, grib_yyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->grib_yy_is_interactive ) \ + { \ + int c = '*'; \ + int n; \ + for ( n = 0; n < max_size && \ + (c = getc( grib_yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( grib_yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, grib_yyin))==0 && ferror(grib_yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(grib_yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "grib_yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef grib_yyterminate +#define grib_yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) grib_yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int grib_yylex (void); + +#define YY_DECL int grib_yylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after grib_yytext and grib_yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register grib_yy_state_type grib_yy_current_state; + register char *grib_yy_cp, *grib_yy_bp; + register int grib_yy_act; + +#line 59 "gribl.l" + + + +#line 1319 "lex.grib_yy.c" + + if ( !(grib_yy_init) ) + { + (grib_yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (grib_yy_start) ) + (grib_yy_start) = 1; /* first start state */ + + if ( ! grib_yyin ) + grib_yyin = stdin; + + if ( ! grib_yyout ) + grib_yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + grib_yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + grib_yy_create_buffer(grib_yyin,YY_BUF_SIZE ); + } + + grib_yy_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + grib_yy_cp = (grib_yy_c_buf_p); + + /* Support of grib_yytext. */ + *grib_yy_cp = (grib_yy_hold_char); + + /* grib_yy_bp points to the position in grib_yy_ch_buf of the start of + * the current run. + */ + grib_yy_bp = grib_yy_cp; + + grib_yy_current_state = (grib_yy_start); +grib_yy_match: + do + { + register YY_CHAR grib_yy_c = grib_yy_ec[YY_SC_TO_UI(*grib_yy_cp)]; + if ( grib_yy_accept[grib_yy_current_state] ) + { + (grib_yy_last_accepting_state) = grib_yy_current_state; + (grib_yy_last_accepting_cpos) = grib_yy_cp; + } + while ( grib_yy_chk[grib_yy_base[grib_yy_current_state] + grib_yy_c] != grib_yy_current_state ) + { + grib_yy_current_state = (int) grib_yy_def[grib_yy_current_state]; + if ( grib_yy_current_state >= 514 ) + grib_yy_c = grib_yy_meta[(unsigned int) grib_yy_c]; + } + grib_yy_current_state = grib_yy_nxt[grib_yy_base[grib_yy_current_state] + (unsigned int) grib_yy_c]; + ++grib_yy_cp; + } + while ( grib_yy_base[grib_yy_current_state] != 2099 ); + +grib_yy_find_action: + grib_yy_act = grib_yy_accept[grib_yy_current_state]; + if ( grib_yy_act == 0 ) + { /* have to back up */ + grib_yy_cp = (grib_yy_last_accepting_cpos); + grib_yy_current_state = (grib_yy_last_accepting_state); + grib_yy_act = grib_yy_accept[grib_yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( grib_yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *grib_yy_cp = (grib_yy_hold_char); + grib_yy_cp = (grib_yy_last_accepting_cpos); + grib_yy_current_state = (grib_yy_last_accepting_state); + goto grib_yy_find_action; + +case 1: +YY_RULE_SETUP +#line 62 "gribl.l" +return EQ ; + YY_BREAK +case 2: +YY_RULE_SETUP +#line 63 "gribl.l" +return GE ; + YY_BREAK +case 3: +YY_RULE_SETUP +#line 64 "gribl.l" +return LE ; + YY_BREAK +case 4: +YY_RULE_SETUP +#line 65 "gribl.l" +return NE ; + YY_BREAK +case 5: +YY_RULE_SETUP +#line 66 "gribl.l" +return NE ; + YY_BREAK +case 6: +YY_RULE_SETUP +#line 67 "gribl.l" +return BIT ; + YY_BREAK +case 7: +YY_RULE_SETUP +#line 68 "gribl.l" +return BITOFF ; + YY_BREAK +case 8: +YY_RULE_SETUP +#line 70 "gribl.l" +return IS ; + YY_BREAK +case 9: +YY_RULE_SETUP +#line 71 "gribl.l" +return NOT ; + YY_BREAK +case 10: +YY_RULE_SETUP +#line 72 "gribl.l" +return NOT ; + YY_BREAK +case 11: +YY_RULE_SETUP +#line 73 "gribl.l" +return AND ; + YY_BREAK +case 12: +YY_RULE_SETUP +#line 74 "gribl.l" +return AND ; + YY_BREAK +case 13: +YY_RULE_SETUP +#line 75 "gribl.l" +return OR ; + YY_BREAK +case 14: +YY_RULE_SETUP +#line 76 "gribl.l" +return OR ; + YY_BREAK +case 15: +YY_RULE_SETUP +#line 78 "gribl.l" +return NIL ; + YY_BREAK +case 16: +YY_RULE_SETUP +#line 79 "gribl.l" +return DUMMY ; + YY_BREAK +case 17: +YY_RULE_SETUP +#line 81 "gribl.l" +return LOWERCASE; + YY_BREAK +case 18: +YY_RULE_SETUP +#line 82 "gribl.l" +return IF ; + YY_BREAK +case 19: +YY_RULE_SETUP +#line 83 "gribl.l" +return IF_TRANSIENT ; + YY_BREAK +case 20: +YY_RULE_SETUP +#line 84 "gribl.l" +return ELSE ; + YY_BREAK +case 21: +YY_RULE_SETUP +#line 85 "gribl.l" +return UNSIGNED ; + YY_BREAK +case 22: +YY_RULE_SETUP +#line 86 "gribl.l" +return ASCII ; + YY_BREAK +case 23: +YY_RULE_SETUP +#line 87 "gribl.l" +return BYTE ; + YY_BREAK +case 24: +YY_RULE_SETUP +#line 88 "gribl.l" +return LABEL ; + YY_BREAK +case 25: +YY_RULE_SETUP +#line 89 "gribl.l" +return LIST ; + YY_BREAK +case 26: +YY_RULE_SETUP +#line 90 "gribl.l" +return WHILE ; + YY_BREAK +case 27: +YY_RULE_SETUP +#line 91 "gribl.l" +return TEMPLATE ; + YY_BREAK +case 28: +YY_RULE_SETUP +#line 92 "gribl.l" +return TEMPLATE_NOFAIL ; + YY_BREAK +case 29: +YY_RULE_SETUP +#line 93 "gribl.l" +return TRIGGER ; + YY_BREAK +case 30: +YY_RULE_SETUP +#line 94 "gribl.l" +return END ; + YY_BREAK +case 31: +YY_RULE_SETUP +#line 95 "gribl.l" +return IBMFLOAT ; + YY_BREAK +case 32: +YY_RULE_SETUP +#line 96 "gribl.l" +return FLOAT ; + YY_BREAK +case 33: +YY_RULE_SETUP +#line 97 "gribl.l" +return SIGNED ; + YY_BREAK +case 34: +YY_RULE_SETUP +#line 98 "gribl.l" +return CODETABLE; + YY_BREAK +case 35: +YY_RULE_SETUP +#line 99 "gribl.l" +return CODETABLE; + YY_BREAK +case 36: +YY_RULE_SETUP +#line 100 "gribl.l" +return FLAG ; + YY_BREAK +case 37: +YY_RULE_SETUP +#line 101 "gribl.l" +return LOOKUP ; + YY_BREAK +case 38: +YY_RULE_SETUP +#line 102 "gribl.l" +return META ; + YY_BREAK +case 39: +YY_RULE_SETUP +#line 103 "gribl.l" +return PADTOEVEN ; + YY_BREAK +case 40: +YY_RULE_SETUP +#line 104 "gribl.l" +return PADTO ; + YY_BREAK +case 41: +YY_RULE_SETUP +#line 105 "gribl.l" +return PADTOMULTIPLE ; + YY_BREAK +case 42: +YY_RULE_SETUP +#line 106 "gribl.l" +return PAD ; + YY_BREAK +case 43: +YY_RULE_SETUP +#line 107 "gribl.l" +return SECTION_PADDING ; + YY_BREAK +case 44: +YY_RULE_SETUP +#line 108 "gribl.l" +return MESSAGE ; + YY_BREAK +case 45: +YY_RULE_SETUP +#line 109 "gribl.l" +return ALIAS ; + YY_BREAK +case 46: +YY_RULE_SETUP +#line 110 "gribl.l" +return UNALIAS ; + YY_BREAK +case 47: +YY_RULE_SETUP +#line 111 "gribl.l" +return POS ; + YY_BREAK +case 48: +YY_RULE_SETUP +#line 112 "gribl.l" +return INTCONST ; + YY_BREAK +case 49: +YY_RULE_SETUP +#line 113 "gribl.l" +return TRANS ; + YY_BREAK +case 50: +YY_RULE_SETUP +#line 114 "gribl.l" +return STRING_TYPE ; + YY_BREAK +case 51: +YY_RULE_SETUP +#line 115 "gribl.l" +return LONG_TYPE ; + YY_BREAK +case 52: +YY_RULE_SETUP +#line 116 "gribl.l" +return ITERATOR ; + YY_BREAK +case 53: +YY_RULE_SETUP +#line 117 "gribl.l" +return NEAREST ; + YY_BREAK +case 54: +YY_RULE_SETUP +#line 118 "gribl.l" +return BOX ; + YY_BREAK +case 55: +YY_RULE_SETUP +#line 119 "gribl.l" +return KSEC ; + YY_BREAK +case 56: +YY_RULE_SETUP +#line 120 "gribl.l" +return FLAGBIT ; + YY_BREAK +case 57: +YY_RULE_SETUP +#line 121 "gribl.l" +return KSEC1EXPVER ; + YY_BREAK +case 58: +YY_RULE_SETUP +#line 122 "gribl.l" +return MODIFY ; + YY_BREAK +case 59: +YY_RULE_SETUP +#line 124 "gribl.l" +return G1_HALF_BYTE ; + YY_BREAK +case 60: +YY_RULE_SETUP +#line 125 "gribl.l" +return G1_MESSAGE_LENGTH ; + YY_BREAK +case 61: +YY_RULE_SETUP +#line 126 "gribl.l" +return G1_SECTION4_LENGTH ; + YY_BREAK +case 62: +YY_RULE_SETUP +#line 128 "gribl.l" +return EXPORT; + YY_BREAK +case 63: +YY_RULE_SETUP +#line 129 "gribl.l" +return REMOVE; + YY_BREAK +case 64: +YY_RULE_SETUP +#line 131 "gribl.l" +return SECTION_LENGTH ; + YY_BREAK +case 65: +YY_RULE_SETUP +#line 133 "gribl.l" +return ASSERT ; + YY_BREAK +case 66: +YY_RULE_SETUP +#line 135 "gribl.l" +return READ_ONLY; + YY_BREAK +case 67: +YY_RULE_SETUP +#line 136 "gribl.l" +return NO_COPY; + YY_BREAK +case 68: +YY_RULE_SETUP +#line 137 "gribl.l" +return EDITION_SPECIFIC; + YY_BREAK +case 69: +YY_RULE_SETUP +#line 138 "gribl.l" +return DUMP; + YY_BREAK +case 70: +YY_RULE_SETUP +#line 139 "gribl.l" +return NO_FAIL; + YY_BREAK +case 71: +YY_RULE_SETUP +#line 140 "gribl.l" +return HIDDEN; + YY_BREAK +case 72: +YY_RULE_SETUP +#line 141 "gribl.l" +return CAN_BE_MISSING; + YY_BREAK +case 73: +YY_RULE_SETUP +#line 142 "gribl.l" +return MISSING; + YY_BREAK +case 74: +YY_RULE_SETUP +#line 143 "gribl.l" +return CONSTRAINT; + YY_BREAK +case 75: +YY_RULE_SETUP +#line 144 "gribl.l" +return OVERRIDE; + YY_BREAK +case 76: +YY_RULE_SETUP +#line 145 "gribl.l" +return COPY_OK; + YY_BREAK +case 77: +YY_RULE_SETUP +#line 147 "gribl.l" +return SET; + YY_BREAK +case 78: +YY_RULE_SETUP +#line 148 "gribl.l" +return SET_NOFAIL; + YY_BREAK +case 79: +YY_RULE_SETUP +#line 149 "gribl.l" +return WHEN; + YY_BREAK +case 80: +YY_RULE_SETUP +#line 150 "gribl.l" +return CASE; + YY_BREAK +case 81: +YY_RULE_SETUP +#line 151 "gribl.l" +return SWITCH; + YY_BREAK +case 82: +YY_RULE_SETUP +#line 152 "gribl.l" +return DEFAULT; + YY_BREAK +case 83: +YY_RULE_SETUP +#line 153 "gribl.l" +return CONCEPT; + YY_BREAK +case 84: +YY_RULE_SETUP +#line 154 "gribl.l" +return CONCEPT_NOFAIL; + YY_BREAK +case 85: +YY_RULE_SETUP +#line 155 "gribl.l" +return WRITE; + YY_BREAK +case 86: +YY_RULE_SETUP +#line 156 "gribl.l" +return APPEND; + YY_BREAK +case 87: +YY_RULE_SETUP +#line 157 "gribl.l" +return PRINT; + YY_BREAK +case 88: +YY_RULE_SETUP +#line 158 "gribl.l" +return SKIP; + YY_BREAK +case 89: +YY_RULE_SETUP +#line 160 "gribl.l" +{ + int c,q; + while((c = input()) && isspace(c) && c != '\n') ; + q = c; /* the quote */ + + grib_yyleng = 0; + while((c = input()) && c != q && c != '\n') + { + if(c == '\\') grib_yytext[grib_yyleng++] = input(); + else grib_yytext[grib_yyleng++] = c; + } + + grib_yytext[grib_yyleng++] = 0; + + grib_parser_include(grib_yytext); + } + YY_BREAK +case 90: +YY_RULE_SETUP +#line 177 "gribl.l" +{ + int c,q = grib_yytext[0]; + + grib_yyleng = 0; + + while((c = input()) && c != q && c != '\n') + { + if(c == '\\') grib_yytext[grib_yyleng++] = input(); + else grib_yytext[grib_yyleng++] = c; + } + + grib_yytext[grib_yyleng++] = 0; + grib_yylval.str = strdup(grib_yytext); + return STRING; + } + YY_BREAK +case 91: +YY_RULE_SETUP +#line 193 "gribl.l" +{ + int c; + unsigned long val = 0; + + while((c = input()) && c != '`' && c != '\n') + { + val <<= 8; + val |= c; + } + grib_yylval.lval = val; + return INTEGER; + } + YY_BREAK +case 92: +YY_RULE_SETUP +#line 207 "gribl.l" +{ grib_yylval.str = strdup(grib_yytext); return IDENT; } + YY_BREAK +case 93: +YY_RULE_SETUP +#line 208 "gribl.l" +{ grib_yylval.lval = atol((const char *)grib_yytext); return INTEGER; } + YY_BREAK +case 94: +YY_RULE_SETUP +#line 209 "gribl.l" +{ grib_yylval.dval = atof((const char *)grib_yytext); return FLOAT; } + YY_BREAK +case 95: +YY_RULE_SETUP +#line 210 "gribl.l" +{ grib_yylval.dval = atof((const char *)grib_yytext); return FLOAT; } + YY_BREAK +case 96: +YY_RULE_SETUP +#line 211 "gribl.l" +{ grib_yylval.dval = atof((const char *)grib_yytext); return FLOAT; } + YY_BREAK +case 97: +YY_RULE_SETUP +#line 214 "gribl.l" +{ + int c; + while((c = input()) && (c != '\n')){} + + grib_yylineno++; + } + YY_BREAK +case 98: +YY_RULE_SETUP +#line 220 "gribl.l" +; + YY_BREAK +case 99: +/* rule 99 can match eol */ +YY_RULE_SETUP +#line 221 "gribl.l" +grib_yylineno++; + YY_BREAK +case 100: +YY_RULE_SETUP +#line 225 "gribl.l" +return *grib_yytext; + YY_BREAK +case 101: +YY_RULE_SETUP +#line 227 "gribl.l" +ECHO; + YY_BREAK +#line 1953 "lex.grib_yy.c" +case YY_STATE_EOF(INITIAL): + grib_yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int grib_yy_amount_of_matched_text = (int) (grib_yy_cp - (grib_yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *grib_yy_cp = (grib_yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->grib_yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed grib_yyin at a new source and called + * grib_yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (grib_yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->grib_yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->grib_yy_input_file = grib_yyin; + YY_CURRENT_BUFFER_LVALUE->grib_yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for grib_yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since grib_yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (grib_yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf[(grib_yy_n_chars)] ) + { /* This was really a NUL. */ + grib_yy_state_type grib_yy_next_state; + + (grib_yy_c_buf_p) = (grib_yytext_ptr) + grib_yy_amount_of_matched_text; + + grib_yy_current_state = grib_yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * grib_yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + grib_yy_next_state = grib_yy_try_NUL_trans( grib_yy_current_state ); + + grib_yy_bp = (grib_yytext_ptr) + YY_MORE_ADJ; + + if ( grib_yy_next_state ) + { + /* Consume the NUL. */ + grib_yy_cp = ++(grib_yy_c_buf_p); + grib_yy_current_state = grib_yy_next_state; + goto grib_yy_match; + } + + else + { + grib_yy_cp = (grib_yy_c_buf_p); + goto grib_yy_find_action; + } + } + + else switch ( grib_yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (grib_yy_did_buffer_switch_on_eof) = 0; + + if ( grib_yywrap( ) ) + { + /* Note: because we've taken care in + * grib_yy_get_next_buffer() to have set up + * grib_yytext, we can now set up + * grib_yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (grib_yy_c_buf_p) = (grib_yytext_ptr) + YY_MORE_ADJ; + + grib_yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (grib_yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (grib_yy_c_buf_p) = + (grib_yytext_ptr) + grib_yy_amount_of_matched_text; + + grib_yy_current_state = grib_yy_get_previous_state( ); + + grib_yy_cp = (grib_yy_c_buf_p); + grib_yy_bp = (grib_yytext_ptr) + YY_MORE_ADJ; + goto grib_yy_match; + + case EOB_ACT_LAST_MATCH: + (grib_yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf[(grib_yy_n_chars)]; + + grib_yy_current_state = grib_yy_get_previous_state( ); + + grib_yy_cp = (grib_yy_c_buf_p); + grib_yy_bp = (grib_yytext_ptr) + YY_MORE_ADJ; + goto grib_yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of grib_yylex */ + +/* grib_yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int grib_yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf; + register char *source = (grib_yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (grib_yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf[(grib_yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->grib_yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (grib_yy_c_buf_p) - (grib_yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((grib_yy_c_buf_p) - (grib_yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->grib_yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->grib_yy_n_chars = (grib_yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->grib_yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int grib_yy_c_buf_p_offset = + (int) ((grib_yy_c_buf_p) - b->grib_yy_ch_buf); + + if ( b->grib_yy_is_our_buffer ) + { + int new_size = b->grib_yy_buf_size * 2; + + if ( new_size <= 0 ) + b->grib_yy_buf_size += b->grib_yy_buf_size / 8; + else + b->grib_yy_buf_size *= 2; + + b->grib_yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + grib_yyrealloc((void *) b->grib_yy_ch_buf,b->grib_yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->grib_yy_ch_buf = 0; + + if ( ! b->grib_yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (grib_yy_c_buf_p) = &b->grib_yy_ch_buf[grib_yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->grib_yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf[number_to_move]), + (grib_yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->grib_yy_n_chars = (grib_yy_n_chars); + } + + if ( (grib_yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + grib_yyrestart(grib_yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->grib_yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((grib_yy_size_t) ((grib_yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->grib_yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + grib_yy_size_t new_size = (grib_yy_n_chars) + number_to_move + ((grib_yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf = (char *) grib_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in grib_yy_get_next_buffer()" ); + } + + (grib_yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf[(grib_yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf[(grib_yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (grib_yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf[0]; + + return ret_val; +} + +/* grib_yy_get_previous_state - get the state just before the EOB char was reached */ + + static grib_yy_state_type grib_yy_get_previous_state (void) +{ + register grib_yy_state_type grib_yy_current_state; + register char *grib_yy_cp; + + grib_yy_current_state = (grib_yy_start); + + for ( grib_yy_cp = (grib_yytext_ptr) + YY_MORE_ADJ; grib_yy_cp < (grib_yy_c_buf_p); ++grib_yy_cp ) + { + register YY_CHAR grib_yy_c = (*grib_yy_cp ? grib_yy_ec[YY_SC_TO_UI(*grib_yy_cp)] : 1); + if ( grib_yy_accept[grib_yy_current_state] ) + { + (grib_yy_last_accepting_state) = grib_yy_current_state; + (grib_yy_last_accepting_cpos) = grib_yy_cp; + } + while ( grib_yy_chk[grib_yy_base[grib_yy_current_state] + grib_yy_c] != grib_yy_current_state ) + { + grib_yy_current_state = (int) grib_yy_def[grib_yy_current_state]; + if ( grib_yy_current_state >= 514 ) + grib_yy_c = grib_yy_meta[(unsigned int) grib_yy_c]; + } + grib_yy_current_state = grib_yy_nxt[grib_yy_base[grib_yy_current_state] + (unsigned int) grib_yy_c]; + } + + return grib_yy_current_state; +} + +/* grib_yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = grib_yy_try_NUL_trans( current_state ); + */ + static grib_yy_state_type grib_yy_try_NUL_trans (grib_yy_state_type grib_yy_current_state ) +{ + register int grib_yy_is_jam; + register char *grib_yy_cp = (grib_yy_c_buf_p); + + register YY_CHAR grib_yy_c = 1; + if ( grib_yy_accept[grib_yy_current_state] ) + { + (grib_yy_last_accepting_state) = grib_yy_current_state; + (grib_yy_last_accepting_cpos) = grib_yy_cp; + } + while ( grib_yy_chk[grib_yy_base[grib_yy_current_state] + grib_yy_c] != grib_yy_current_state ) + { + grib_yy_current_state = (int) grib_yy_def[grib_yy_current_state]; + if ( grib_yy_current_state >= 514 ) + grib_yy_c = grib_yy_meta[(unsigned int) grib_yy_c]; + } + grib_yy_current_state = grib_yy_nxt[grib_yy_base[grib_yy_current_state] + (unsigned int) grib_yy_c]; + grib_yy_is_jam = (grib_yy_current_state == 513); + + return grib_yy_is_jam ? 0 : grib_yy_current_state; +} + + void grib_yyunput (int c, register char * grib_yy_bp ) +{ + register char *grib_yy_cp; + + grib_yy_cp = (grib_yy_c_buf_p); + + /* undo effects of setting up grib_yytext */ + *grib_yy_cp = (grib_yy_hold_char); + + if ( grib_yy_cp < YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = (grib_yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->grib_yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf ) + *--dest = *--source; + + grib_yy_cp += (int) (dest - source); + grib_yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->grib_yy_n_chars = + (grib_yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->grib_yy_buf_size; + + if ( grib_yy_cp < YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--grib_yy_cp = (char) c; + + (grib_yytext_ptr) = grib_yy_bp; + (grib_yy_hold_char) = *grib_yy_cp; + (grib_yy_c_buf_p) = grib_yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int grib_yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(grib_yy_c_buf_p) = (grib_yy_hold_char); + + if ( *(grib_yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* grib_yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (grib_yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->grib_yy_ch_buf[(grib_yy_n_chars)] ) + /* This was really a NUL. */ + *(grib_yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (grib_yy_c_buf_p) - (grib_yytext_ptr); + ++(grib_yy_c_buf_p); + + switch ( grib_yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because grib_yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + grib_yyrestart(grib_yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( grib_yywrap( ) ) + return EOF; + + if ( ! (grib_yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return grib_yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (grib_yy_c_buf_p) = (grib_yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (grib_yy_c_buf_p); /* cast for 8-bit char's */ + *(grib_yy_c_buf_p) = '\0'; /* preserve grib_yytext */ + (grib_yy_hold_char) = *++(grib_yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void grib_yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + grib_yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + grib_yy_create_buffer(grib_yyin,YY_BUF_SIZE ); + } + + grib_yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + grib_yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void grib_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * grib_yypop_buffer_state(); + * grib_yypush_buffer_state(new_buffer); + */ + grib_yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(grib_yy_c_buf_p) = (grib_yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->grib_yy_buf_pos = (grib_yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->grib_yy_n_chars = (grib_yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + grib_yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (grib_yywrap()) processing, but the only time this flag + * is looked at is after grib_yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (grib_yy_did_buffer_switch_on_eof) = 1; +} + +static void grib_yy_load_buffer_state (void) +{ + (grib_yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->grib_yy_n_chars; + (grib_yytext_ptr) = (grib_yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->grib_yy_buf_pos; + grib_yyin = YY_CURRENT_BUFFER_LVALUE->grib_yy_input_file; + (grib_yy_hold_char) = *(grib_yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE grib_yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) grib_yyalloc(sizeof( struct grib_yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in grib_yy_create_buffer()" ); + + b->grib_yy_buf_size = size; + + /* grib_yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->grib_yy_ch_buf = (char *) grib_yyalloc(b->grib_yy_buf_size + 2 ); + if ( ! b->grib_yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in grib_yy_create_buffer()" ); + + b->grib_yy_is_our_buffer = 1; + + grib_yy_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with grib_yy_create_buffer() + * + */ + void grib_yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->grib_yy_is_our_buffer ) + grib_yyfree((void *) b->grib_yy_ch_buf ); + + grib_yyfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a grib_yyrestart() or at EOF. + */ + static void grib_yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + grib_yy_flush_buffer(b ); + + b->grib_yy_input_file = file; + b->grib_yy_fill_buffer = 1; + + /* If b is the current buffer, then grib_yy_init_buffer was _probably_ + * called from grib_yyrestart() or through grib_yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->grib_yy_bs_lineno = 1; + b->grib_yy_bs_column = 0; + } + + b->grib_yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void grib_yy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->grib_yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->grib_yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->grib_yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->grib_yy_buf_pos = &b->grib_yy_ch_buf[0]; + + b->grib_yy_at_bol = 1; + b->grib_yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + grib_yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void grib_yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + grib_yyensure_buffer_stack(); + + /* This block is copied from grib_yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(grib_yy_c_buf_p) = (grib_yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->grib_yy_buf_pos = (grib_yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->grib_yy_n_chars = (grib_yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (grib_yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from grib_yy_switch_to_buffer. */ + grib_yy_load_buffer_state( ); + (grib_yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void grib_yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + grib_yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((grib_yy_buffer_stack_top) > 0) + --(grib_yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + grib_yy_load_buffer_state( ); + (grib_yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void grib_yyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(grib_yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (grib_yy_buffer_stack) = (struct grib_yy_buffer_state**)grib_yyalloc + (num_to_alloc * sizeof(struct grib_yy_buffer_state*) + ); + if ( ! (grib_yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in grib_yyensure_buffer_stack()" ); + + memset((grib_yy_buffer_stack), 0, num_to_alloc * sizeof(struct grib_yy_buffer_state*)); + + (grib_yy_buffer_stack_max) = num_to_alloc; + (grib_yy_buffer_stack_top) = 0; + return; + } + + if ((grib_yy_buffer_stack_top) >= ((grib_yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (grib_yy_buffer_stack_max) + grow_size; + (grib_yy_buffer_stack) = (struct grib_yy_buffer_state**)grib_yyrealloc + ((grib_yy_buffer_stack), + num_to_alloc * sizeof(struct grib_yy_buffer_state*) + ); + if ( ! (grib_yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in grib_yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((grib_yy_buffer_stack) + (grib_yy_buffer_stack_max), 0, grow_size * sizeof(struct grib_yy_buffer_state*)); + (grib_yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE grib_yy_scan_buffer (char * base, grib_yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) grib_yyalloc(sizeof( struct grib_yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in grib_yy_scan_buffer()" ); + + b->grib_yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->grib_yy_buf_pos = b->grib_yy_ch_buf = base; + b->grib_yy_is_our_buffer = 0; + b->grib_yy_input_file = 0; + b->grib_yy_n_chars = b->grib_yy_buf_size; + b->grib_yy_is_interactive = 0; + b->grib_yy_at_bol = 1; + b->grib_yy_fill_buffer = 0; + b->grib_yy_buffer_status = YY_BUFFER_NEW; + + grib_yy_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to grib_yylex() will + * scan from a @e copy of @a str. + * @param grib_yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * grib_yy_scan_bytes() instead. + */ +YY_BUFFER_STATE grib_yy_scan_string (grib_yyconst char * grib_yystr ) +{ + + return grib_yy_scan_bytes(grib_yystr,strlen(grib_yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to grib_yylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE grib_yy_scan_bytes (grib_yyconst char * grib_yybytes, int _grib_yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + grib_yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _grib_yybytes_len + 2; + buf = (char *) grib_yyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in grib_yy_scan_bytes()" ); + + for ( i = 0; i < _grib_yybytes_len; ++i ) + buf[i] = grib_yybytes[i]; + + buf[_grib_yybytes_len] = buf[_grib_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = grib_yy_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in grib_yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->grib_yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void grib_yy_fatal_error (grib_yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine grib_yyless() so it works in section 3 code. */ + +#undef grib_yyless +#define grib_yyless(n) \ + do \ + { \ + /* Undo effects of setting up grib_yytext. */ \ + int grib_yyless_macro_arg = (n); \ + YY_LESS_LINENO(grib_yyless_macro_arg);\ + grib_yytext[grib_yyleng] = (grib_yy_hold_char); \ + (grib_yy_c_buf_p) = grib_yytext + grib_yyless_macro_arg; \ + (grib_yy_hold_char) = *(grib_yy_c_buf_p); \ + *(grib_yy_c_buf_p) = '\0'; \ + grib_yyleng = grib_yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int grib_yyget_lineno (void) +{ + + return grib_yylineno; +} + +/** Get the input stream. + * + */ +FILE *grib_yyget_in (void) +{ + return grib_yyin; +} + +/** Get the output stream. + * + */ +FILE *grib_yyget_out (void) +{ + return grib_yyout; +} + +/** Get the length of the current token. + * + */ +int grib_yyget_leng (void) +{ + return grib_yyleng; +} + +/** Get the current token. + * + */ + +char *grib_yyget_text (void) +{ + return grib_yytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void grib_yyset_lineno (int line_number ) +{ + + grib_yylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see grib_yy_switch_to_buffer + */ +void grib_yyset_in (FILE * in_str ) +{ + grib_yyin = in_str ; +} + +void grib_yyset_out (FILE * out_str ) +{ + grib_yyout = out_str ; +} + +int grib_yyget_debug (void) +{ + return grib_yy_flex_debug; +} + +void grib_yyset_debug (int bdebug ) +{ + grib_yy_flex_debug = bdebug ; +} + +static int grib_yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from grib_yylex_destroy(), so don't allocate here. + */ + + (grib_yy_buffer_stack) = 0; + (grib_yy_buffer_stack_top) = 0; + (grib_yy_buffer_stack_max) = 0; + (grib_yy_c_buf_p) = (char *) 0; + (grib_yy_init) = 0; + (grib_yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + grib_yyin = stdin; + grib_yyout = stdout; +#else + grib_yyin = (FILE *) 0; + grib_yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * grib_yylex_init() + */ + return 0; +} + +/* grib_yylex_destroy is for both reentrant and non-reentrant scanners. */ +int grib_yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + grib_yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + grib_yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + grib_yyfree((grib_yy_buffer_stack) ); + (grib_yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * grib_yylex() is called, initialization will occur. */ + grib_yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef grib_yytext_ptr +static void grib_yy_flex_strncpy (char* s1, grib_yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int grib_yy_flex_strlen (grib_yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *grib_yyalloc (grib_yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *grib_yyrealloc (void * ptr, grib_yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void grib_yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see grib_yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "grib_yytables" + +#line 227 "gribl.l" + + + + diff --git a/src/grib_loader_from_array.c b/src/grib_loader_from_array.c new file mode 100644 index 000000000..a29a0f7ee --- /dev/null +++ b/src/grib_loader_from_array.c @@ -0,0 +1,232 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include + +int grib_lookup_long_from_array(grib_context* gc,grib_loader* loader,const char* name,long* lvalue) +{ + + char* strvalue=0; + size_t size=0; + char* pstr=NULL; + int retval; + grib_associative_array* ar; + grib_runtime_type* rt=grib_runtimetype_new(gc); + int type=0; + + ar=(grib_associative_array*)loader->data; + + if ((retval=grib_associative_array_get(ar,(char*)name,&rt)) != GRIB_ARRAY_SUCCESS) + return GRIB_NOT_FOUND; + + grib_runtimetype_get_type(rt,&type); + + switch (type) { + case GRIB_RUNTIMETYPE_LONG: + grib_runtimetype_get_long(rt,&lvalue,&size); + printf("lookup: getting long %ld\n",*lvalue); + break; + case GRIB_RUNTIMETYPE_CHAR: + *lvalue = 0; + grib_runtimetype_get_char(rt,&strvalue,&size); + printf("lookup: getting char %s\n",strvalue); + pstr=strvalue; + while(*pstr) + { + *lvalue <<= 8; + *lvalue |= *pstr++; + } + break; + default: + return GRIB_NOT_FOUND; + printf("lookup: wrong type (%d)\n",type); + break; + } + + return GRIB_SUCCESS; +} + +int grib_init_accessor_from_array(grib_loader* loader,grib_accessor* ga,grib_arguments* default_value) +{ + grib_handle* h = ga->parent->h; + int retval =GRIB_SUCCESS; + char* strvalue; + size_t len=0; + int type=0; + double* dvalue=0; + long* lvalue=0; + long lval=0; + double dval=0; + int i=0; + grib_associative_array* ar=NULL; + grib_runtime_type* value=NULL; + + ar=(grib_associative_array*)loader->data; + + grib_context_log(h->context,GRIB_LOG_DEBUG, "Initialize %s", ga->name); + + retval= grib_associative_array_get(ar,ga->name,&value); + + if((retval != GRIB_ARRAY_SUCCESS) && default_value) { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to default value", ga->name); + grib_pack_expression(ga,grib_arguments_get_expression(h,default_value,0)); + return GRIB_SUCCESS; + } + + if(ga->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s ignored (read only)", ga->name); + return GRIB_SUCCESS; + } + + if (retval != GRIB_ARRAY_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_DEBUG, + "Grib array error %d",retval); + if ((ga->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING)) { + grib_context_log(h->context,GRIB_LOG_DEBUG, + "Setting %s ignored (optional or can be missing)", ga->name); + return GRIB_SUCCESS; + } else { + grib_context_log(h->context,GRIB_LOG_ERROR, "%s required", ga->name); + return retval; + } + } + + if (value && grib_runtimetype_get_type(value,&type) == GRIB_RUNTIMETYPE_SUCCESS) { + if (type == GRIB_RUNTIMETYPE_CHAR ) { + grib_runtimetype_get_char(value,&strvalue,&len); + switch(grib_accessor_get_native_type(ga)) { + + case GRIB_TYPE_STRING: + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to string %s", + ga->name, strvalue); + grib_set_string_internal(h,ga->name,strvalue,&len); + break; + + case GRIB_TYPE_LONG: + if (!strcmp(strvalue,"MISSING")) lval=GRIB_MISSING_LONG; + else lval=atol(strvalue); + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to long %d", ga->name, lval); + grib_set_long_internal(h,ga->name,lval); + break; + + case GRIB_TYPE_DOUBLE: + if (!strcmp(strvalue,"MISSING")) dval=GRIB_MISSING_DOUBLE; + else if (sscanf(strvalue,"%lg",&dval)!=1) { + grib_context_log(h->context,GRIB_LOG_ERROR, "Unable to set %s wrong value format", ga->name); + } + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to double %lg (%s)", ga->name, dval,strvalue); + grib_set_double_internal(h,ga->name,dval); + break; + + case GRIB_TYPE_BYTES: + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to string %s", + ga->name, strvalue); + grib_set_bytes_internal(h,ga->name,(unsigned char*)strvalue,&len); + break; + + case GRIB_TYPE_LABEL: + break; + + default: + grib_context_log(h->context,GRIB_LOG_ERROR, "Setting %s, cannot establish type %d [%s]" + , ga->name,grib_accessor_get_native_type(ga),ga->creator->cclass->name); + break; + } + } else { + + if (grib_runtimetype_get_double(value,&dvalue,&len) == GRIB_RUNTIMETYPE_SUCCESS) { + switch(grib_accessor_get_native_type(ga)) { + + case GRIB_TYPE_LONG: + lvalue=(long*)malloc(sizeof(long)*len); + for (i=0;icontext,GRIB_LOG_DEBUG, "Setting long array %s",ga->name); + grib_set_long_array(h,ga->name,lvalue,len); + free(lvalue); + break; + + case GRIB_TYPE_DOUBLE: + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting double array %s",ga->name); + grib_set_double_array(h,ga->name,dvalue,len); + break; + + default: + grib_context_log(h->context,GRIB_LOG_ERROR, "Setting array %s, wrong type [%d]" + , ga->name,grib_accessor_get_native_type(ga)); + break; + } + + } else + grib_context_log(h->context,GRIB_LOG_ERROR, "Unable to set %s to double, wrong type (%d)", + ga->name,type); + } +#if 0 + switch(grib_accessor_get_native_type(ga)) + { + case GRIB_TYPE_STRING: + if (grib_runtimetype_get_char(value,&strvalue,&strvalue_size) == GRIB_RUNTIMETYPE_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to string %s", + ga->name, strvalue); + len=strlen(strvalue); + grib_set_string_internal(h,ga->name,strvalue,&len); + } else + grib_context_log(h->context,GRIB_LOG_ERROR, "Unable to set %s to string, wrong type", + ga->name); + break; + + case GRIB_TYPE_LONG: + if (grib_runtimetype_get_long(value,&lval,&len) == GRIB_RUNTIMETYPE_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to long %d", ga->name, lval); + grib_set_long_internal(h,ga->name,*lval); + } else + grib_context_log(h->context,GRIB_LOG_ERROR, "Unable to set %s to long, wrong type", + ga->name); + break; + + case GRIB_TYPE_DOUBLE: + if (grib_runtimetype_get_double(value,&dval,&len) == GRIB_RUNTIMETYPE_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to long %d", ga->name, dval); + grib_set_double_internal(h,ga->name,*dval); + } else + grib_context_log(h->context,GRIB_LOG_ERROR, "Unable to set %s to double, wrong type", + ga->name); + break; + + case GRIB_TYPE_BYTES: + if (grib_runtimetype_get_char(value,&strvalue,&len) == GRIB_RUNTIMETYPE_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to string %s", + ga->name, strvalue); + grib_set_bytes_internal(h,ga->name,(unsigned char*)strvalue,&len); + } else + grib_context_log(h->context,GRIB_LOG_ERROR, "Unable to set %s to string, wrong type", + ga->name); + break; + + case GRIB_TYPE_LABEL: + break; + + default: + grib_context_log(h->context,GRIB_LOG_ERROR, "Setting %s, cannot establish type %d [%s]" + , ga->name,grib_accessor_get_native_type(ga),ga->creator->cclass->name); + break; + } +#endif + + } + + return retval; + +} diff --git a/src/grib_loader_from_file.c b/src/grib_loader_from_file.c new file mode 100644 index 000000000..db58cdf4a --- /dev/null +++ b/src/grib_loader_from_file.c @@ -0,0 +1,165 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" +#include + +static int parse_in(grib_context* gc,FILE *in,const char* name,char** strvalue); + +int grib_lookup_long_from_file(grib_context* gc,grib_loader* loader,const char* name,long* value) +{ + FILE *in = (FILE*)loader->data; + char* strvalue=0; + int retval; + + if ((retval=parse_in(gc,in,name,&strvalue)) != GRIB_SUCCESS) + return retval; + + if(isdigit(*strvalue)) + { + *value = atol(strvalue); + grib_context_log(gc,GRIB_LOG_DEBUG, "One digit string %s converted to %ld (long)", strvalue, *value); + } + else + { + + *value = 0; + + while(*strvalue) + { + *value <<= 8; + *value |= *strvalue++; + } + grib_context_log(gc,GRIB_LOG_DEBUG, "Value %s converted to %ld (long)", strvalue, *value); + } + /* TO DO free strvalue */ + return retval; +} + +int grib_init_accessor_from_file(grib_loader* loader,grib_accessor* ga,grib_arguments* default_value) +{ + grib_handle* h = ga->parent->h; + + FILE *in = (FILE*)loader->data; + int retval =GRIB_SUCCESS; + char* strvalue=0; + size_t len=0; + long lval; + double dval; + + grib_context_log(h->context,GRIB_LOG_INFO, "Initialize %s", ga->name); + + if(default_value) + { + grib_context_log(h->context,GRIB_LOG_INFO, "Setting %s to default value", ga->name); + grib_pack_expression(ga,grib_arguments_get_expression(h,default_value,0)); + return GRIB_SUCCESS; + } + + if(ga->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + { + grib_context_log(h->context,GRIB_LOG_INFO, "Setting %s ignored (read only)", ga->name); + return GRIB_SUCCESS; + } + + if ((retval=parse_in(h->context,in,ga->name,&strvalue)) != GRIB_SUCCESS) + return retval; + + if (strvalue) { + len=strlen(strvalue); + + switch(grib_accessor_get_native_type(ga)) + { + case GRIB_TYPE_STRING: + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to string %s", ga->name, strvalue); + grib_set_string_internal(h,ga->name,strvalue,&len); + break; + + case GRIB_TYPE_LONG: + lval = strtol(strvalue,NULL,10); + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to long %d", ga->name, lval); + grib_set_long_internal(h,ga->name,lval); + break; + + case GRIB_TYPE_DOUBLE: + dval = atof(strvalue); + grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting %s to double %e", ga->name, dval); + grib_set_double_internal(h,ga->name,dval); + break; + + case GRIB_TYPE_BYTES: + len=strlen(strvalue); + grib_set_bytes_internal(h,ga->name,(unsigned char*)strvalue,&len); + break; + + case GRIB_TYPE_LABEL: + break; + + default: + grib_context_log(h->context,GRIB_LOG_ERROR, "Setting %s, cannot establish type %d [%s]" + , ga->name,grib_accessor_get_native_type(ga),ga->creator->cclass->name); + break; + } + + + } + /* TO DO free strvalue */ + return retval; + +} + +static int parse_in(grib_context* gc,FILE *in,const char* name,char** strvalue) { + + char line[1024]; + char *tok=NULL; + char escape[]="!!!"; + + printf("Please enter [%s]\n",name); + + if (!fgets(line,sizeof(line)-1,in)) { + grib_context_log(gc,GRIB_LOG_DEBUG, "End of file reached"); + return GRIB_END_OF_FILE; + } + + line[strlen(line)-1] = 0; + grib_context_log(gc,GRIB_LOG_DEBUG, "Parsing: \"%s\"",line); + + if (strncmp(line,escape,strlen(escape))==0) { + grib_context_log(gc,GRIB_LOG_DEBUG, "Escape %s matched",escape); + return GRIB_END_OF_FILE; + } + + if (*line) { + tok=strtok(line," ="); + } + + if (!tok || *tok == '#' || strcmp(tok,name)!=0) { + parse_in(gc,in,name,strvalue); + } + else + { + tok=strtok(NULL," =["); + + if (!tok) { + parse_in(gc,in,name,strvalue); + } else { + *strvalue=tok; + grib_context_log(gc,GRIB_LOG_DEBUG, "Value parsed as string: \"%s\"",tok); + } + + } + + return GRIB_SUCCESS; +} diff --git a/src/grib_loader_from_handle.c b/src/grib_loader_from_handle.c new file mode 100644 index 000000000..dc6c41ee6 --- /dev/null +++ b/src/grib_loader_from_handle.c @@ -0,0 +1,256 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +static int copy_values(grib_handle* h,grib_accessor* ga) +{ + int i,j,k; + /* printf("copy_values stack is %ld\n",(long)h->values_stack);*/ + for(j = 0; j < h->values_stack; j++) + { + for(i = 0; i < h->values_count[j]; i++) + { + for(k = 0; (k < MAX_ACCESSOR_NAMES) && (ga->all_names[k] != NULL); k++) + { + /*printf("copy_values: %s %s\n",h->values[j][i].name,ga->all_names[k]);*/ + if(strcmp(h->values[j][i].name,ga->all_names[k]) == 0) + { + size_t len = 1; + /*printf("SET VALUES %s\n",h->values[j][i].name);*/ + switch(h->values[j][i].type) + { + case GRIB_TYPE_LONG: + return grib_pack_long(ga,&h->values[j][i].long_value,&len); + break; + + case GRIB_TYPE_DOUBLE: + return grib_pack_double(ga,&h->values[j][i].double_value,&len); + break; + + case GRIB_TYPE_STRING: + len = strlen(h->values[j][i].string_value); + return grib_pack_string(ga,h->values[j][i].string_value,&len); + break; + } + } + } + } + } + + return GRIB_NOT_FOUND; +} + + +int grib_lookup_long_from_handle(grib_context* gc,grib_loader* loader,const char* name,long* value) +{ + grib_handle* h = (grib_handle*)loader->data; + grib_accessor *b = grib_find_accessor(h,name); + size_t len = 1; + if(b) return grib_unpack_long(b,value,&len); + + /* TODO: fix me. For now, we don't fail on a lookup. */ +#if 1 + *value = -1; + return GRIB_SUCCESS; +#else + return GRIB_NOT_FOUND; +#endif +} + +int grib_init_accessor_from_handle(grib_loader* loader,grib_accessor* ga,grib_arguments* default_value) +{ + grib_handle* h = (grib_handle*)loader->data; + int ret = GRIB_SUCCESS; + size_t len = 0; + char* sval = NULL; + unsigned char* uval = NULL; + long* lval = NULL; + double* dval = NULL; + static int first = 1; + static const char* missing = 0; + const char* name = NULL; + int k = 0; + grib_handle *g; + int e; + grib_context_log(h->context,GRIB_LOG_DEBUG, "XXXXX Copying %s", ga->name); + + if(default_value) + { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Copying: setting %s to default value", + ga->name); + grib_pack_expression(ga,grib_arguments_get_expression(h,default_value,0)); + } + + if( (ga->flags & GRIB_ACCESSOR_FLAG_NO_COPY) || + ((ga->flags & GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC) && + loader->changing_edition ) || + (ga->flags & GRIB_ACCESSOR_FLAG_FUNCTION) || + ( (ga->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) && + !(ga->flags & GRIB_ACCESSOR_FLAG_COPY_OK) ) ) + { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Copying %s ignored", ga->name); + return GRIB_SUCCESS; + } + +#if 0 + if(h->values) + if(copy_values(h,ga) == GRIB_SUCCESS) + { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Copying: setting %s to multi-set-value", ga->name); + return GRIB_SUCCESS; + } +#endif + +#if 0 + if(h->loader) + h->loader->init_accessor(h->loader,ga,default_value); +#else + /* COMEBACK here + this is needed if we reparse during reparse.... + */ + + g = h; + while(g) + { + if(g->values) { + if(copy_values(g,ga) == GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Copying: setting %s to multi-set-value", ga->name); + return GRIB_SUCCESS; + } + } + g = g->main; + } +#endif + + /* Check if the same name exists in the original message ... */ + k = 0; + while( (k < MAX_ACCESSOR_NAMES) && + ((name = ga->all_names[k]) != NULL) && + ((ret = grib_get_size(h,name,&len)) != GRIB_SUCCESS)) k++; + + if(ret != GRIB_SUCCESS) + { + name = ga->name; + + if(first) + { + missing = getenv("GRIB_PRINT_MISSING"); + first = 0; + } + + grib_context_log(h->context,GRIB_LOG_DEBUG, "Copying [%s] failed: %s", + name,grib_get_error_message(ret)); + + if(missing) + { + fprintf(stdout,"REPARSE: no value for %s",name); + if(default_value) + fprintf(stdout," (default value)"); + fprintf(stdout,"\n"); + } + + return GRIB_SUCCESS; + } + + /* we copy also virtual keys*/ + if(len == 0) { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Copying %s failed, length is 0", name); + return GRIB_SUCCESS; + } + + if((ga->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) && grib_is_missing(h,name,&e) && e == GRIB_SUCCESS && len == 1) + grib_pack_missing(ga); + + switch(grib_accessor_get_native_type(ga)) + { + case GRIB_TYPE_STRING: + + /* len = len > 1024 ? len : 1024; */ + grib_get_string_length(h,name,&len); + sval = grib_context_malloc(h->context,len); + ret = grib_get_string_internal(h,name,sval,&len); + if(ret == GRIB_SUCCESS) + { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Copying string %s to %s", sval, name); + ret = grib_pack_string(ga,sval,&len); + } + grib_context_free(h->context,sval); + + break; + + case GRIB_TYPE_LONG: + lval = grib_context_malloc(h->context,len*sizeof(long)); + ret = grib_get_long_array_internal(h,name,lval,&len); + if(ret == GRIB_SUCCESS) + { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Copying %d long(s) %d to %s", len, lval[0], name); + if(ga->same) + { + ret = grib_set_long_array(ga->parent->h,ga->name,lval,len); + + /* Allow for lists to be resized */ + if((ret == GRIB_WRONG_ARRAY_SIZE || ret == GRIB_ARRAY_TOO_SMALL) && loader->list_is_resized) + ret = GRIB_SUCCESS; + } + else + ret = grib_pack_long(ga,lval,&len); + } + + grib_context_free(h->context,lval); + + break; + + case GRIB_TYPE_DOUBLE: + dval = grib_context_malloc(h->context,len*sizeof(double)); + ret = grib_get_double_array_internal(h,name,dval,&len); + if(ret == GRIB_SUCCESS) + { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Copying %d double(s) %g to %s", len, dval[0], name); + if(ga->same) + { + ret = grib_set_double_array(ga->parent->h,ga->name,dval,len); + + /* Allow for lists to be resized */ + if((ret == GRIB_WRONG_ARRAY_SIZE || ret == GRIB_ARRAY_TOO_SMALL) && loader->list_is_resized) + ret = GRIB_SUCCESS; + } + else ret = grib_pack_double(ga,dval,&len); + } + + grib_context_free(h->context,dval); + break; + + case GRIB_TYPE_BYTES: + + uval = grib_context_malloc(h->context,len*sizeof(char)); + ret = grib_get_bytes_internal(h,name,uval,&len); + if(ret == GRIB_SUCCESS) + { + grib_context_log(h->context,GRIB_LOG_DEBUG, "Copying %d byte(s) to %s", len, name); + ret = grib_pack_bytes(ga,uval,&len); + } + + grib_context_free(h->context,uval); + + break; + + case GRIB_TYPE_LABEL: + break; + + default: + grib_context_log(h->context,GRIB_LOG_ERROR, "Copying %s, cannot establish type %d [%s]" + , name,grib_accessor_get_native_type(ga),ga->creator->cclass->name); + break; + } + + return ret; + +} diff --git a/src/grib_memory.c b/src/grib_memory.c new file mode 100755 index 000000000..4dfc52df0 --- /dev/null +++ b/src/grib_memory.c @@ -0,0 +1,372 @@ +#include "grib_api_internal.h" + +/* #define CHECK_FOR_LEAKS */ + +#if MANAGE_MEM + +#if GRIB_PTHREADS +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + +static void init() { + pthread_mutexattr_t attr; + + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex,&attr); + pthread_mutexattr_destroy(&attr); + +} +#endif + +union align { + double d; + int n; + void * p; + long l; +}; + +#define WORD sizeof(union align) + +static size_t page_size = 0; + +typedef struct { + int pages; /* Number of pages to allocate */ + int clear; /* clear newly allocated memory */ + int first; /* Allocate in first only */ + void *priv; +} mempool; + + +typedef struct memblk { + struct memblk *next; + long cnt; + size_t left; + size_t size; + char buffer[WORD]; +} memblk; + +static memblk *reserve = NULL; + +/* + typedef struct memprocs { + struct memprocs *next; + memproc proc; + void *data; + } memprocs; + + static memprocs *mprocs = NULL; + */ + +#define HEADER_SIZE (sizeof(memblk) - WORD) + +static mempool _transient_mem = { + 10, + 0, + 1, +}; + +static mempool *transient_mem = &_transient_mem; + +static mempool _permanent_mem = { + 10, + 0, + 1, +}; + +static mempool *permanent_mem = &_permanent_mem; + +static void *fast_new(size_t s,mempool *pool) +{ + char *p; + memblk *m; + + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&mutex) + + m = (memblk*)pool->priv; + + /* align */ + + s = ((s+WORD-1)/WORD)*WORD; + + if(pool->first) + { + if(m && (m->left < s)) + m = NULL; + } + + while(m && (m->left < s)) + m = m->next; + + if(m == NULL) + { + memblk *p; + size_t size; + if(!page_size) page_size = getpagesize(); + + size = page_size*pool->pages; + + if(s > size - HEADER_SIZE) + { + /* marslog(LOG_WARN,"Object of %d bytes is too big for grib_fast_new",s); */ + /* marslog(LOG_WARN,"Block size if %d bytes", size - HEADER_SIZE); */ + size = ((s + HEADER_SIZE + (page_size-1)) / page_size) * page_size; + } + + p = (memblk*)(pool->clear?calloc(size,1):malloc(size)); + if(!p) { + GRIB_MUTEX_UNLOCK(&mutex) + return NULL; + } + + p->next = (memblk*)pool->priv; + p->cnt = 0; + p->size = p->left = size-HEADER_SIZE; + m = p; + pool->priv = (void*)p; + } + + p = &m->buffer[m->size - m->left]; + m->left -= s; + m->cnt++; + + GRIB_MUTEX_UNLOCK(&mutex) + + return p; +} + + + +static void fast_delete(void *p,mempool *pool) +{ + memblk *m ; + memblk *n = NULL; + + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&mutex) + + m = (memblk*)pool->priv; + + while(m) + { + if( ((char*)p >= (char*)&m->buffer[0]) && + ((char*)p < (char*)&m->buffer[m->size])) + { + m->cnt--; + if(m->cnt == 0) + { + if(n) n->next = m->next; + else pool->priv = (void*)m->next; + free((void*)m); + } + GRIB_MUTEX_UNLOCK(&mutex) + return; + } + + n = m; + m = m->next; + } + Assert(1==0); +} + +static void *fast_realloc(void *p,size_t s,mempool *pool) +{ + void *q; + + /* I'll come back here later... */ + + if((q = fast_new(s,pool)) == NULL) return NULL; + memcpy(q,p,s); + + fast_delete(p,pool); + + return q; +} + +#if 0 +/* + void fast_memory_info(const char *title,mempool *pool) + { + memblk *m = (memblk*)pool->priv; + int count = 0; + int size = 0; + while(m) + { + count++; + size += m->size; + m = m->next; + } + marslog(LOG_INFO,"%s : %sbytes %d blocks", + title, + bytename(size),count); + } + + void memory_info() + { + memblk *r = reserve; + long size = 0; + while(r) + { + marslog(LOG_INFO,"Large buffer: %sbytes %s", + bytename(r->size),r->cnt?"in use":"free"); + size += r->size; + r = r->next; + } + + marslog(LOG_INFO,"Total large : %sbytes",bytename(size)); + fast_memory_info("Transient memory",transient_mem); + fast_memory_info("Permanent memory",permanent_mem); + } + */ +#endif + +void *grib_transient_malloc(const grib_context* c,size_t s) +{ + return fast_new(s,transient_mem); +} + +void *grib_transient_realloc(const grib_context* c,void *p,size_t s) +{ + return fast_realloc(p,s,transient_mem); +} + +void grib_transient_free(const grib_context* c,void* p) +{ + fast_delete(p,transient_mem); +} + +void *grib_permanent_malloc(const grib_context* c,size_t s) +{ + return fast_new(s,permanent_mem); +} + +void *grib_permanent_realloc(const grib_context* c,void *p,size_t s) +{ + return fast_realloc(p,s,permanent_mem); +} + +void grib_permanent_free(const grib_context* c,void* p) +{ + fast_delete(p,permanent_mem); +} + +void *grib_buffer_malloc(const grib_context* c,size_t s) +{ + memblk *r; + + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&mutex) + + s = ((s+WORD-1)/WORD)*WORD; + r = reserve; + while(r) + { + if(r->cnt == 0 && r->size == s) + break; + r = r->next; + } + + if(r) + { + /* marslog(LOG_DBUG,"Reusing %ld bytes %d",s,r->size); */ + } + else + { + size_t size = s + HEADER_SIZE; + /* marslog(LOG_DBUG,"Allocating %d (%d)bytes",s,size); */ + r = (memblk*)malloc(size); + if(!r) return NULL; + r->next = reserve; + reserve = r; + } + r->size = s; + r->cnt = 1; + + GRIB_MUTEX_UNLOCK(&mutex) + + return &r->buffer[0]; + +} + +void grib_buffer_free(const grib_context* c,void *p) +{ + memblk *r; + memblk *s; + + GRIB_PTHREAD_ONCE(&once,&init) + GRIB_MUTEX_LOCK(&mutex) + + r = (memblk*)(((char*)p) - HEADER_SIZE); + s = reserve; + while(s && (s!=r)) s = s->next; + if(s == NULL) + ; /* marslog(LOG_WARN,"release_mem: invalid pointer"); */ + else + { + s->cnt = 0; + } + + GRIB_MUTEX_UNLOCK(&mutex) +} + +void *grib_buffer_realloc(const grib_context* c,void *p,size_t s) +{ + memblk *r = (memblk*)(((char*)p) - HEADER_SIZE); + void * n = grib_buffer_malloc(c,s); + memcpy(n,p,r->size < s? r->size:s); + grib_buffer_free(c,p); + return n; +} + +/* + + int purge_mem(void) + { + memblk *p = reserve; + memblk *q = NULL; + while(p) + { + if(p->cnt == 0) + { + if(q) q->next = p->next; + else reserve = p->next; + free(p); + return 1; + } + q = p; + p = p->next; + } + return 0; + } + + void install_memory_proc(memproc proc,void *data) + { + memprocs *p = NEW_CLEAR(memprocs); + p->proc = proc; + p->data = data; + p->next = mprocs; + mprocs = p; + } + + void remove_memory_proc(memproc proc,void *data) + { + memprocs *p = mprocs; + memprocs *q = NULL; + + while(p) + { + if(p->proc == proc && p->data == data) + { + if(q) q->next = p->next; else mprocs = p->next; + FREE(p); + return; + } + q = p; + p = p->next; + } + marslog(LOG_WARN,"remove_memory_proc: cannot find proc"); + } + */ + +#endif diff --git a/src/grib_nearest.c b/src/grib_nearest.c new file mode 100644 index 000000000..4874c79b6 --- /dev/null +++ b/src/grib_nearest.c @@ -0,0 +1,197 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/** +* Author: Enrico Fucile +* date: 31/10/2007 +* +*/ + +#include "grib_api_internal.h" + + +int grib_nearest_find(grib_nearest *nearest,grib_handle* h,double inlat,double inlon, + unsigned long flags,double* outlats,double* outlons, + double* values,double* distances, int* indexes, size_t *len) +{ + grib_nearest_class *c = nearest->cclass; + while(c) + { + grib_nearest_class *s = c->super ? *(c->super) : NULL; + if(c->find) { + int ret=c->find(nearest,h,inlat,inlon,flags,outlats,outlons,values,distances,indexes,len); + if (ret!=GRIB_SUCCESS) { + if (inlon>0) inlon-=360; + else inlon+=360; + ret=c->find(nearest,h,inlat,inlon,flags,outlats,outlons,values,distances,indexes,len); + } + return ret; + } + c = s; + } + Assert(0); + return 0; +} + + +/* For this one, ALL init are called */ + +static int init_nearest(grib_nearest_class* c,grib_nearest* i, grib_handle *h, grib_arguments* args) +{ + + if(c) { + int ret = GRIB_SUCCESS; + grib_nearest_class *s = c->super ? *(c->super) : NULL; + if(!c->inited) + { + if(c->init_class) c->init_class(c); + c->inited = 1; + } + if(s) ret = init_nearest(s,i,h,args); + + if(ret != GRIB_SUCCESS) return ret; + + if(c->init) return c->init(i,h, args); + } + return GRIB_INTERNAL_ERROR; +} + +int grib_nearest_init(grib_nearest* i, grib_handle *h, grib_arguments* args) +{ + return init_nearest(i->cclass,i,h,args); +} + +/* For this one, ALL destroy are called */ + +int grib_nearest_delete(grib_nearest *i) +{ + grib_nearest_class *c = i->cclass; + while(c) + { + grib_nearest_class *s = c->super ? *(c->super) : NULL; + if(c->destroy) c->destroy(i); + c = s; + } + return 0; +} + + +void grib_binary_search(double xx[], const unsigned long n, double x, + int *ju,int *jl) +{ + size_t jm=0; + int ascending=0; + *jl=0; + *ju=n; + ascending=(xx[n] >= xx[0]); + while (*ju-*jl > 1) { + jm=(*ju+*jl) >> 1; + if ((x >= xx[jm]) == ascending) *jl=jm; + else *ju=jm; + } +} + +#define RADIAN(x) ((x) * acos(0.0) / 90.0) + +double grib_nearest_distance(double radius,double lon1, double lat1, double lon2, double lat2){ + double rlat1=RADIAN(lat1); + double rlat2=RADIAN(lat2); + double rlon1=lon1; + double rlon2=lon2; + double a; + + if (rlon1 >=360) rlon1-=360.0; + rlon1=RADIAN(rlon1); + if (rlon2 >=360) rlon2-=360.0; + rlon2=RADIAN(rlon2); + + a = sin(rlat1)*sin(rlat2)+ cos(rlat1)*cos(rlat2)*cos(rlon2-rlon1); + + if (a > 1 || a < -1 ) a=(int)a; + + return radius*acos(a); +} + +int grib_nearest_find_multiple(grib_handle* h,int is_lsm, + double* inlats,double* inlons,long npoints, + double* outlats,double* outlons, + double* values,double* distances, int* indexes) +{ + grib_nearest* nearest=0; + double* pdistances=distances; + double* poutlats=outlats; + double* poutlons=outlons; + double* pvalues=values; + int* pindexes=indexes; + int idx=0,ii=0; + double max,min; + double qdistances[4]={0,}; + double qoutlats[4]={0,}; + double qoutlons[4]={0,}; + double qvalues[4]={0,}; + int qindexes[4]={0,}; + int ret=0; + long i=0; + size_t len=4; + int flags=GRIB_NEAREST_SAME_GRID | GRIB_NEAREST_SAME_DATA; + + nearest=grib_nearest_new(h,&ret); + if (ret!=GRIB_SUCCESS) return ret; + + if (is_lsm) { + int noland=1; + for (i=0;i= 0.5) noland=0; + } + min=max; + for (ii=0;ii<4;ii++) { + if ((min >= qdistances[ii]) && ( noland || (qvalues[ii] >= 0.5)) ) { + min = qdistances[ii]; + idx=ii; + } + } + *poutlats=qoutlats[idx];poutlats++; + *poutlons=qoutlons[idx];poutlons++; + *pvalues=qvalues[idx];pvalues++; + *pdistances=qdistances[idx];pdistances++; + *pindexes=qindexes[idx];pindexes++; + + } + } else { + for (i=0;i= qdistances[ii])) { + min = qdistances[ii]; + idx=ii; + } + } + *poutlats=qoutlats[idx];poutlats++; + *poutlons=qoutlons[idx];poutlons++; + *pvalues=qvalues[idx];pvalues++; + *pdistances=qdistances[idx];pdistances++; + *pindexes=qindexes[idx];pindexes++; + } + } + + grib_nearest_delete(nearest); + + return ret; +} + + + diff --git a/src/grib_nearest_class.c b/src/grib_nearest_class.c new file mode 100644 index 000000000..70205bbae --- /dev/null +++ b/src/grib_nearest_class.c @@ -0,0 +1,58 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + */ + + +#include "grib_api_internal.h" + +#define NUMBER(x) (sizeof(x)/sizeof(x[0])) + +/* This file is generated my ./make_class.pl */ +#include "grib_nearest_class.h" + +struct table_entry +{ + char *type; + grib_nearest_class **cclass; +}; + +static struct table_entry table[] = +{ + /* This file is generated my ./make_class.pl */ +#include "grib_nearest_factory.h" +}; + +grib_nearest* grib_nearest_factory( grib_handle* h, grib_arguments* args) +{ + int i; + int ret = GRIB_SUCCESS; + char* type = (char*)grib_arguments_get_name(h,args,0); + + for(i = 0; i < NUMBER(table) ; i++) + if(strcmp(type,table[i].type) == 0) + { + grib_nearest_class* c = *(table[i].cclass); + grib_nearest* it = (grib_nearest*) grib_context_malloc_clear(h->context,c->size); + it->cclass = c; + ret = GRIB_SUCCESS; + ret = grib_nearest_init(it,h,args); + if(ret == GRIB_SUCCESS) return it; + grib_context_log(h->context,GRIB_LOG_ERROR,"grib_nearest_factory: error %d instantiating nearest %s", ret, table[i].type); + grib_nearest_delete(it); + return NULL; + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"grib_nearest_factory : Unknown type : %s for nearest", type); + + return NULL; +} diff --git a/src/grib_nearest_class.h b/src/grib_nearest_class.h new file mode 100644 index 000000000..d09e47ddc --- /dev/null +++ b/src/grib_nearest_class.h @@ -0,0 +1,6 @@ +/* This file is automatically generated by ./make_class.pl, do not edit */ +extern grib_nearest_class* grib_nearest_class_gen; +extern grib_nearest_class* grib_nearest_class_latlon_reduced; +extern grib_nearest_class* grib_nearest_class_reduced; +extern grib_nearest_class* grib_nearest_class_regular; +extern grib_nearest_class* grib_nearest_class_sh; diff --git a/src/grib_nearest_class_gen.c b/src/grib_nearest_class_gen.c new file mode 100644 index 000000000..18eccf236 --- /dev/null +++ b/src/grib_nearest_class_gen.c @@ -0,0 +1,109 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * + * + */ + + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = nearest + IMPLEMENTS = destroy + IMPLEMENTS = find + IMPLEMENTS = init + MEMBERS = const char* values_key + MEMBERS = const char* radius + MEMBERS = int cargs + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "nearest.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_nearest_class*); + +static int init (grib_nearest* nearest,grib_handle* h,grib_arguments* args); +static int find(grib_nearest* nearest, grib_handle* h,double inlat, double inlon, unsigned long flags, double* outlats,double* outlons, double *values,double *distances, int *indexes,size_t *len); +static int destroy (grib_nearest* nearest); + +typedef struct grib_nearest_gen{ + grib_nearest nearest; +/* Members defined in gen */ + const char* values_key; + const char* radius; + int cargs; +} grib_nearest_gen; + + +static grib_nearest_class _grib_nearest_class_gen = { + 0, /* super */ + "gen", /* name */ + sizeof(grib_nearest_gen), /* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &find, /* find nearest */ +}; + +grib_nearest_class* grib_nearest_class_gen = &_grib_nearest_class_gen; + + +static void init_class(grib_nearest_class* c) +{ +} +/* END_CLASS_IMP */ + +static int init(grib_nearest* nearest,grib_handle* h,grib_arguments* args) +{ + grib_nearest_gen* self = (grib_nearest_gen*) nearest; + int ret = GRIB_SUCCESS; + + self->cargs = 1; + + self->values_key = grib_arguments_get_name(h,args,self->cargs++); + self->radius = grib_arguments_get_name(h,args,self->cargs++); + nearest->values=NULL; + + nearest->context=h->context; + + return ret; +} + +static int destroy(grib_nearest* nearest) { + if (nearest->values) grib_context_free(nearest->context,nearest->values); + grib_context_free(nearest->context,nearest); + return GRIB_SUCCESS; +} + +static int find(grib_nearest* nearest, grib_handle* h, + double inlat, double inlon,unsigned long flags, + double* outlats,double* outlons, double *values, + double *distances,int *indexes, size_t *len) { + + return GRIB_NOT_IMPLEMENTED; +} + diff --git a/src/grib_nearest_class_latlon_reduced.c b/src/grib_nearest_class_latlon_reduced.c new file mode 100644 index 000000000..481a5fedd --- /dev/null +++ b/src/grib_nearest_class_latlon_reduced.c @@ -0,0 +1,355 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +/* + * + * + * + */ + + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = nearest + SUPER = grib_nearest_class_gen + IMPLEMENTS = init;destroy;find + MEMBERS = double* lats + MEMBERS = int lats_count + MEMBERS = double* lons + MEMBERS = double* distances + MEMBERS = int* k + MEMBERS = int* j + MEMBERS = const char* Nj + MEMBERS = const char* pl + MEMBERS = const char* lonFirst + MEMBERS = const char* lonLast + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "nearest.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_nearest_class*); + +static int init (grib_nearest* nearest,grib_handle* h,grib_arguments* args); +static int find(grib_nearest* nearest, grib_handle* h,double inlat, double inlon, unsigned long flags, double* outlats,double* outlons, double *values,double *distances, int *indexes,size_t *len); +static int destroy (grib_nearest* nearest); + +typedef struct grib_nearest_latlon_reduced{ + grib_nearest nearest; +/* Members defined in gen */ + const char* values_key; + const char* radius; + int cargs; +/* Members defined in latlon_reduced */ + double* lats; + int lats_count; + double* lons; + double* distances; + int* k; + int* j; + const char* Nj; + const char* pl; + const char* lonFirst; + const char* lonLast; +} grib_nearest_latlon_reduced; + +extern grib_nearest_class* grib_nearest_class_gen; + +static grib_nearest_class _grib_nearest_class_latlon_reduced = { + &grib_nearest_class_gen, /* super */ + "latlon_reduced", /* name */ + sizeof(grib_nearest_latlon_reduced), /* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &find, /* find nearest */ +}; + +grib_nearest_class* grib_nearest_class_latlon_reduced = &_grib_nearest_class_latlon_reduced; + + +static void init_class(grib_nearest_class* c) +{ +} +/* END_CLASS_IMP */ + +static int init(grib_nearest* nearest,grib_handle* h,grib_arguments* args) +{ + grib_nearest_latlon_reduced* self = (grib_nearest_latlon_reduced*) nearest; + self->Nj = grib_arguments_get_name(h,args,self->cargs++); + self->pl = grib_arguments_get_name(h,args,self->cargs++); + self->lonFirst = grib_arguments_get_name(h,args,self->cargs++); + self->lonLast = grib_arguments_get_name(h,args,self->cargs++); + self->j=(int*)grib_context_malloc(h->context,2*sizeof(int)); + if (!self->j) return GRIB_OUT_OF_MEMORY; + self->k=(int*)grib_context_malloc( nearest->context,4*sizeof(int)); + if (!self->k) return GRIB_OUT_OF_MEMORY; + + return 0; + +} + +static int find(grib_nearest* nearest, grib_handle* h, + double inlat, double inlon,unsigned long flags, + double* outlats,double* outlons, double *values, + double *distances,int *indexes, size_t *len) { + grib_nearest_latlon_reduced* self = (grib_nearest_latlon_reduced*) nearest; + int ret=0,kk=0,ii=0,jj=0; + int j=0; + long* pla=NULL; + long* pl=NULL; + size_t nvalues=0; + grib_iterator* iter=NULL; + double lat=0,lon=0; + long iradius; + double radius; + int ilat=0,ilon=0; + + if( (ret = grib_get_size(h,self->values_key,&nvalues))!= GRIB_SUCCESS) + return ret; + nearest->values_count = nvalues; + + if (grib_is_missing(h,self->radius,&ret)) { + grib_context_log(h->context, GRIB_LOG_DEBUG,"Key '%s' is missing", self->radius); + return ret ? ret : GRIB_GEOCALCULUS_PROBLEM; + } + + if( (ret = grib_get_long(h,self->radius,&iradius))!= GRIB_SUCCESS) + return ret; + radius=((double)iradius)/1000.0; + + if (!nearest->h || (flags & GRIB_NEAREST_SAME_GRID)==0) { + double dummy=0; + double olat=1.e10; + long n=0; + + ilat=0,ilon=0; + if (grib_is_missing(h,self->Nj,&ret)) { + grib_context_log(h->context, GRIB_LOG_DEBUG,"Key '%s' is missing", self->Nj); + return ret ? ret : GRIB_GEOCALCULUS_PROBLEM; + } + + if( (ret = grib_get_long(h,self->Nj,&n))!= GRIB_SUCCESS) + return ret; + self->lats_count=n; + + if (self->lats) grib_context_free(nearest->context,self->lats); + self->lats=grib_context_malloc( nearest->context, + self->lats_count* sizeof(double)); + if (!self->lats) return GRIB_OUT_OF_MEMORY; + + if (self->lons) grib_context_free(nearest->context,self->lons); + self->lons=grib_context_malloc( nearest->context, + nearest->values_count*sizeof(double)); + if (!self->lons) return GRIB_OUT_OF_MEMORY; + + iter=grib_iterator_new(h,0,&ret); + while(grib_iterator_next(iter,&lat,&lon,&dummy)) { + if (olat!=lat) { + self->lats[ilat++]=lat; + olat=lat; + } + self->lons[ilon++]=lon; + } + self->lats_count=ilat; + grib_iterator_delete(iter); + + } + nearest->h=h; + + if (!self->distances || (flags & GRIB_NEAREST_SAME_POINT)==0 + || (flags & GRIB_NEAREST_SAME_GRID)==0) { + double* lons=NULL; + int nlon=0; + size_t plsize=0; + long nplm1=0; + int nearest_lons_found=0; + double lon_first,lon_last; + int islocal=0; + long plmax; + double dimin; + + if ((ret=grib_get_double(h,self->lonFirst,&lon_first))!=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "grib_nearest_latlon_reduced.find(): unable to get %s %s\n",self->lonFirst, + grib_get_error_message(ret)); + return ret; + } + if ((ret=grib_get_double(h,self->lonLast,&lon_last))!=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "grib_nearest_latlon_reduced.find(): unable to get %s %s\n",self->lonLast, + grib_get_error_message(ret)); + return ret; + } + + plsize=self->lats_count; + if( (ret=grib_get_size(h,self->pl,&plsize))!= GRIB_SUCCESS) + return ret; + pla=grib_context_malloc(h->context,plsize*sizeof(long)); + if (!pla) return GRIB_OUT_OF_MEMORY; + if( (ret=grib_get_long_array(h,self->pl,pla,&plsize))!= GRIB_SUCCESS) + return ret; + + pl=pla; + while ((*pl)==0) {pl++;} + + plmax=pla[0]; + for (j=0;j360) inlon-=360; + + ilat=self->lats_count; + if (self->lats[ilat-1] > self->lats[0]) { + if (inlat < self->lats[0] || inlat > self->lats[ilat-1]) + return GRIB_OUT_OF_AREA; + } else { + if (inlat > self->lats[0] || inlat < self->lats[ilat-1]) + return GRIB_OUT_OF_AREA; + } + + if (!self->distances) + self->distances=(double*)grib_context_malloc( nearest->context,4*sizeof(double)); + if (!self->distances) return GRIB_OUT_OF_MEMORY; + + grib_binary_search(self->lats,ilat-1,inlat, + &(self->j[0]),&(self->j[1])); + + nlon=0; + for (jj=0;jjj[0];jj++) nlon+=pl[jj]; + nplm1=pl[self->j[0]]-1; + + lons=self->lons+nlon; + + nearest_lons_found=0; + if (lons[nplm1]>lons[0]) { + if (inlon< lons[0] || inlon > lons[nplm1]) { + if (lons[nplm1]-lons[0]-360 <= + lons[nplm1]-lons[nplm1-1]) { + self->k[0]=0; + self->k[1]=nplm1; + nearest_lons_found=1; + } else return GRIB_OUT_OF_AREA; + } + } else { + if (inlon >lons[0] || inlon< lons[nplm1]) { + if (lons[0]-lons[nplm1]-360 <= + lons[0]-lons[1]) { + self->k[0]=0; + self->k[1]=nplm1; + nearest_lons_found=1; + } else return GRIB_OUT_OF_AREA; + } + } + + if (!nearest_lons_found) { + grib_binary_search(lons,pl[self->j[0]]-1,inlon, + &(self->k[0]),&(self->k[1])); + } + self->k[0]+=nlon; + self->k[1]+=nlon; + + nlon=0; + for (jj=0;jjj[1];jj++) nlon+=pl[jj]; + nplm1=pl[self->j[1]]-1; + + lons=self->lons+nlon; + + nearest_lons_found=0; + if (lons[nplm1]>lons[0]) { + if (inlonlons[nplm1]) { + if (lons[nplm1]-lons[0]-360 <= + lons[nplm1]-lons[nplm1-1]) { + self->k[2]=0; + self->k[3]=nplm1; + nearest_lons_found=1; + } else return GRIB_OUT_OF_AREA; + } + } else { + if (inlon>lons[0] || inlonk[2]=0; + self->k[3]=nplm1; + nearest_lons_found=1; + } else return GRIB_OUT_OF_AREA; + } + } + + if (!nearest_lons_found) { + grib_binary_search(lons,pl[self->j[1]]-1,inlon, + &(self->k[2]),&(self->k[3])); + } + + self->k[2]+=nlon; + self->k[3]+=nlon; + + kk=0; + for (jj=0;jj<2;jj++) { + for (ii=0;ii<2;ii++) { + self->distances[kk]=grib_nearest_distance(radius,inlon,inlat, + self->lons[self->k[kk]],self->lats[self->j[jj]]); + kk++; + } + } + + grib_context_free(h->context,pla); + } + + kk=0; + for (jj=0;jj<2;jj++) { + for (ii=0;ii<2;ii++) { + distances[kk]=self->distances[kk]; + outlats[kk]=self->lats[self->j[jj]]; + outlons[kk]=self->lons[self->k[kk]]; + grib_get_double_element_internal(h,self->values_key,self->k[kk],&(values[kk])); + indexes[kk]=self->k[kk]; + kk++; + } + } + + return GRIB_SUCCESS; +} + + +static int destroy(grib_nearest* nearest) { + grib_nearest_latlon_reduced* self = (grib_nearest_latlon_reduced*) nearest; + if (self->lats) grib_context_free(nearest->context,self->lats); + if (self->lons) grib_context_free(nearest->context,self->lons); + if (self->j) grib_context_free(nearest->context,self->j); + if (self->k) grib_context_free(nearest->context,self->k); + if (self->distances) grib_context_free(nearest->context,self->distances); + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_nearest_class_reduced.c b/src/grib_nearest_class_reduced.c new file mode 100644 index 000000000..6c2aab3bd --- /dev/null +++ b/src/grib_nearest_class_reduced.c @@ -0,0 +1,511 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +/* + * + * + * + */ + + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = nearest + SUPER = grib_nearest_class_gen + IMPLEMENTS = init;destroy;find + MEMBERS = double* lats + MEMBERS = int lats_count + MEMBERS = double* lons + MEMBERS = double* distances + MEMBERS = int* k + MEMBERS = int* j + MEMBERS = const char* Nj + MEMBERS = const char* pl + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "nearest.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_nearest_class*); + +static int init (grib_nearest* nearest,grib_handle* h,grib_arguments* args); +static int find(grib_nearest* nearest, grib_handle* h,double inlat, double inlon, unsigned long flags, double* outlats,double* outlons, double *values,double *distances, int *indexes,size_t *len); +static int destroy (grib_nearest* nearest); + +typedef struct grib_nearest_reduced{ + grib_nearest nearest; +/* Members defined in gen */ + const char* values_key; + const char* radius; + int cargs; +/* Members defined in reduced */ + double* lats; + int lats_count; + double* lons; + double* distances; + int* k; + int* j; + const char* Nj; + const char* pl; +} grib_nearest_reduced; + +extern grib_nearest_class* grib_nearest_class_gen; + +static grib_nearest_class _grib_nearest_class_reduced = { + &grib_nearest_class_gen, /* super */ + "reduced", /* name */ + sizeof(grib_nearest_reduced), /* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &find, /* find nearest */ +}; + +grib_nearest_class* grib_nearest_class_reduced = &_grib_nearest_class_reduced; + + +static void init_class(grib_nearest_class* c) +{ +} +/* END_CLASS_IMP */ + +static int init(grib_nearest* nearest,grib_handle* h,grib_arguments* args) +{ + grib_nearest_reduced* self = (grib_nearest_reduced*) nearest; + self->Nj = grib_arguments_get_name(h,args,self->cargs++); + self->pl = grib_arguments_get_name(h,args,self->cargs++); + self->j=(int*)grib_context_malloc(h->context,2*sizeof(int)); + if (!self->j) return GRIB_OUT_OF_MEMORY; + self->k=(int*)grib_context_malloc( nearest->context,4*sizeof(int)); + if (!self->k) return GRIB_OUT_OF_MEMORY; + + return 0; + +} + +#if 1 +static int find(grib_nearest* nearest, grib_handle* h, + double inlat, double inlon,unsigned long flags, + double* outlats,double* outlons, double *values, + double *distances,int *indexes, size_t *len) { + grib_nearest_reduced* self = (grib_nearest_reduced*) nearest; + int ret=0,kk=0,ii=0,jj=0; + long* pla=NULL; + long* pl=NULL; + size_t nvalues=0; + grib_iterator* iter=NULL; + double lat=0,lon=0; + long iradius; + double radius; + int ilat=0,ilon=0; + + + if( (ret = grib_get_size(h,self->values_key,&nvalues))!= GRIB_SUCCESS) + return ret; + nearest->values_count = nvalues; + + if (grib_is_missing(h,self->radius,&ret)) { + grib_context_log(h->context, GRIB_LOG_DEBUG,"Key '%s' is missing", self->radius); + return ret ? ret : GRIB_GEOCALCULUS_PROBLEM; + } + + if( (ret = grib_get_long(h,self->radius,&iradius))!= GRIB_SUCCESS) + return ret; + radius=((double)iradius)/1000.0; + + if (!nearest->h || (flags & GRIB_NEAREST_SAME_GRID)==0) { + double dummy=0; + double olat=1.e10; + long n=0; + + ilat=0,ilon=0; + if (grib_is_missing(h,self->Nj,&ret)) { + grib_context_log(h->context, GRIB_LOG_DEBUG,"Key '%s' is missing", self->Nj); + return ret ? ret : GRIB_GEOCALCULUS_PROBLEM; + } + + if( (ret = grib_get_long(h,self->Nj,&n))!= GRIB_SUCCESS) + return ret; + self->lats_count=n; + + if (self->lats) grib_context_free(nearest->context,self->lats); + self->lats=grib_context_malloc( nearest->context, + self->lats_count* sizeof(double)); + if (!self->lats) return GRIB_OUT_OF_MEMORY; + + if (self->lons) grib_context_free(nearest->context,self->lons); + self->lons=grib_context_malloc( nearest->context, + nearest->values_count*sizeof(double)); + if (!self->lons) return GRIB_OUT_OF_MEMORY; + + iter=grib_iterator_new(h,0,&ret); + while(grib_iterator_next(iter,&lat,&lon,&dummy)) { + if (olat!=lat) { + self->lats[ilat++]=lat; + olat=lat; + } + self->lons[ilon++]=lon; + } + self->lats_count=ilat; + grib_iterator_delete(iter); + + } + nearest->h=h; + + if (!self->distances || (flags & GRIB_NEAREST_SAME_POINT)==0 + || (flags & GRIB_NEAREST_SAME_GRID)==0) { + double* lons=NULL; + int nlon=0; + size_t plsize=0; + long nplm1=0; + int nearest_lons_found=0; + long global=0; + double lon_first,lon_last; + long row_count,ilon_first,ilon_last; + + /*TODO global from the def file*/ + global=1; + grib_get_long(h,"global",&global); + + if (!global) { + /*TODO longitudeOfFirstGridPointInDegrees from the def file*/ + if ((ret=grib_get_double(h,"longitudeOfFirstGridPointInDegrees",&lon_first))!=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "grib_nearest_reduced.find(): unable to get longitudeOfFirstGridPointInDegrees %s\n", + grib_get_error_message(ret)); + return ret; + } + /*TODO longitudeOfLastGridPointInDegrees from the def file*/ + if ((ret=grib_get_double(h,"longitudeOfLastGridPointInDegrees",&lon_last))!=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "grib_nearest_reduced.find(): unable to get longitudeOfLastGridPointInDegrees %s\n", + grib_get_error_message(ret)); + return ret; + } + /* if (lon_last<0) lon_last+=360; */ + /* if (lon_first<0) lon_first+=360; */ + } else { + while (inlon<0) inlon+=360; + while (inlon>360) inlon-=360; + } + + ilat=self->lats_count; + if (self->lats[ilat-1] > self->lats[0]) { + if (inlat < self->lats[0] || inlat > self->lats[ilat-1]) + return GRIB_OUT_OF_AREA; + } else { + if (inlat > self->lats[0] || inlat < self->lats[ilat-1]) + return GRIB_OUT_OF_AREA; + } + + if (!self->distances) + self->distances=(double*)grib_context_malloc( nearest->context,4*sizeof(double)); + if (!self->distances) return GRIB_OUT_OF_MEMORY; + + grib_binary_search(self->lats,ilat-1,inlat, + &(self->j[0]),&(self->j[1])); + + plsize=self->lats_count; + if( (ret=grib_get_size(h,self->pl,&plsize))!= GRIB_SUCCESS) + return ret; + pla=grib_context_malloc(h->context,plsize*sizeof(long)); + if (!pla) return GRIB_OUT_OF_MEMORY; + if( (ret=grib_get_long_array(h,self->pl,pla,&plsize))!= GRIB_SUCCESS) + return ret; + + pl=pla; + while ((*pl)==0) {pl++;} + + nlon=0; + if (global) { + for (jj=0;jjj[0];jj++) nlon+=pl[jj]; + nplm1=pl[self->j[0]]-1; + } else { + nlon=0; + for (jj=0;jjj[0];jj++) { + row_count=0;ilon_first=0;ilon_last=0; + grib_get_reduced_row(pl[jj],lon_first,lon_last,&row_count,&ilon_first,&ilon_last); + nlon+=row_count; + } + row_count=0;ilon_first=0;ilon_last=0; + grib_get_reduced_row(pl[self->j[0]],lon_first,lon_last,&row_count,&ilon_first,&ilon_last); + nplm1=row_count-1; + } + lons=self->lons+nlon; + + nearest_lons_found=0; + if (lons[nplm1]>lons[0]) { + if (inlon< lons[0] || inlon > lons[nplm1]) { + if (lons[nplm1]-lons[0]-360 <= + lons[nplm1]-lons[nplm1-1]) { + self->k[0]=0; + self->k[1]=nplm1; + nearest_lons_found=1; + } else return GRIB_OUT_OF_AREA; + } + } else { + if (inlon >lons[0] || inlon< lons[nplm1]) { + if (lons[0]-lons[nplm1]-360 <= + lons[0]-lons[1]) { + self->k[0]=0; + self->k[1]=nplm1; + nearest_lons_found=1; + } else return GRIB_OUT_OF_AREA; + } + } + + if (!nearest_lons_found) { + if (!global) { + row_count=0;ilon_first=0;ilon_last=0; + grib_get_reduced_row(pl[self->j[0]],lon_first,lon_last,&row_count,&ilon_first,&ilon_last); + } else { + row_count=pl[self->j[0]]; + } + + grib_binary_search(lons,row_count-1,inlon, + &(self->k[0]),&(self->k[1])); + } + self->k[0]+=nlon; + self->k[1]+=nlon; + + nlon=0; + if (global) { + for (jj=0;jjj[1];jj++) nlon+=pl[jj]; + nplm1=pl[self->j[1]]-1; + } else { + long row_count,ilon_first,ilon_last; + for (jj=0;jjj[1];jj++) { + row_count=0;ilon_first=0;ilon_last=0; + grib_get_reduced_row(pl[jj],lon_first,lon_last,&row_count,&ilon_first,&ilon_last); + nlon+=row_count; + } + row_count=0;ilon_first=0;ilon_last=0; + grib_get_reduced_row(pl[self->j[1]],lon_first,lon_last,&nplm1,&ilon_first,&ilon_last); + nplm1--; + } + lons=self->lons+nlon; + + nearest_lons_found=0; + if (lons[nplm1]>lons[0]) { + if (inlonlons[nplm1]) { + if (lons[nplm1]-lons[0]-360 <= + lons[nplm1]-lons[nplm1-1]) { + self->k[2]=0; + self->k[3]=nplm1; + nearest_lons_found=1; + } else return GRIB_OUT_OF_AREA; + } + } else { + if (inlon>lons[0] || inlonk[2]=0; + self->k[3]=nplm1; + nearest_lons_found=1; + } else return GRIB_OUT_OF_AREA; + } + } + + if (!nearest_lons_found) { + if (!global) { + row_count=0;ilon_first=0;ilon_last=0; + grib_get_reduced_row(pl[self->j[1]],lon_first,lon_last,&row_count,&ilon_first,&ilon_last); + } else { + row_count=pl[self->j[1]]; + } + + grib_binary_search(lons,row_count-1,inlon, + &(self->k[2]),&(self->k[3])); + } + + self->k[2]+=nlon; + self->k[3]+=nlon; + + kk=0; + for (jj=0;jj<2;jj++) { + for (ii=0;ii<2;ii++) { + self->distances[kk]=grib_nearest_distance(radius,inlon,inlat, + self->lons[self->k[kk]],self->lats[self->j[jj]]); + kk++; + } + } + + grib_context_free(h->context,pla); + } + + kk=0; + for (jj=0;jj<2;jj++) { + for (ii=0;ii<2;ii++) { + distances[kk]=self->distances[kk]; + outlats[kk]=self->lats[self->j[jj]]; + outlons[kk]=self->lons[self->k[kk]]; + grib_get_double_element_internal(h,self->values_key,self->k[kk],&(values[kk])); + indexes[kk]=self->k[kk]; + kk++; + } + } + + return GRIB_SUCCESS; +} +#else +static int find(grib_nearest* nearest, grib_handle* h, + double inlat, double inlon,unsigned long flags, + double* outlats,double* outlons, double *values, + double *distances,double *distances,int *indexes,size_t *len) { + grib_nearest_reduced* self = (grib_nearest_reduced*) nearest; + int ret=0,kk=0,ii=0,jj=0; + double* pl=NULL; + int ilat; + size_t nvalues=0; + if (!nearest->h || (flags & GRIB_NEAREST_SAME_DATA)==0 || nearest->h!=h) { + grib_iterator* iter=NULL; + double lat=0,lon=0; + + if( (ret = grib_get_size(h,self->values_key,&nvalues))!= GRIB_SUCCESS) + return ret; + nearest->values_count = nvalues; + if (nearest->values) grib_context_free(nearest->context,nearest->values); + nearest->values = grib_context_malloc(h->context,nvalues*sizeof(double)); + if (!nearest->values) return GRIB_OUT_OF_MEMORY; + + ret=grib_get_double_array_internal( h,self->values_key, + nearest->values,&(nearest->values_count)); + if (ret!=GRIB_SUCCESS) grib_context_log(nearest->context,GRIB_LOG_ERROR, + "nearest: unable to get values array"); + + if (!nearest->h || (flags & GRIB_NEAREST_SAME_GRID)==0) { + double dummy=0; + double olat=1.e10; + ilat=0,ilon=0; + long n=0; + + if (grib_is_missing(h,self->Nj,&ret)) { + grib_context_log(h->context, GRIB_LOG_DEBUG,"Key '%s' is missing", self->Nj); + return ret ? ret : GRIB_GEOCALCULUS_PROBLEM; + } + + if( (ret = grib_get_long(h,self->Nj,&n))!= GRIB_SUCCESS) + return ret; + self->lats_count=n; + + if (self->lats) grib_context_free(nearest->context,self->lats); + self->lats=grib_context_malloc( nearest->context, + self->lats_count* sizeof(double)); + if (!self->lats) return GRIB_OUT_OF_MEMORY; + + if (self->lons) grib_context_free(nearest->context,self->lons); + self->lons=grib_context_malloc( nearest->context, + nearest->values_count*sizeof(double)); + if (!self->lons) return GRIB_OUT_OF_MEMORY; + + iter=grib_iterator_new(h,0,&ret); + while(grib_iterator_next(iter,&lat,&lon,&dummy)) { + if (olat!=lat) {self->lats[ilat++]=lat;olat=lat;} + self->lons[ilon++]=lon; + } + grib_iterator_delete(iter); + } + nearest->h=h; + + } + + if (!self->distances || (flags & GRIB_NEAREST_SAME_POINT)==0 + || (flags & GRIB_NEAREST_SAME_GRID)==0) { + double* lons=NULL; + int nlon=0; + int plsize=0; + + self->distances=(double*)grib_context_malloc( nearest->context,4*sizeof(double)); + if (!self->distances) return GRIB_OUT_OF_MEMORY; + + grib_binary_search(self->lats,self->lats_count-1,inlat, + &(self->j[0]),&(self->j[1])); + + plsize=self->lats_count; + pl=(double*)grib_context_malloc(h->context,plsize*sizeof(double)); + if (!pl) return GRIB_OUT_OF_MEMORY; + if( (ret=grib_get_double_array(h,"pl",pl,&plsize))!= GRIB_SUCCESS) + return ret; + + nlon=0; + for (jj=0;jjj[0];jj++) { + nlon+=pl[jj]; + } + lons=self->lons+nlon; + grib_binary_search(lons,pl[self->j[0]]-1,inlon, + &(self->k[0]),&(self->k[1])); + self->k[0]+=nlon; + self->k[1]+=nlon; + + nlon=0; + for (jj=0;jjj[1];jj++) { + nlon+=pl[jj]; + } + lons=self->lons+nlon; + grib_binary_search(lons,pl[self->j[1]]-1,inlon, + &(self->k[2]),&(self->k[3])); + self->k[2]+=nlon; + self->k[3]+=nlon; + + kk=0; + for (ii=0;ii<2;ii++) { + for (jj=0;jj<2;jj++) { + self->distances[kk]=grib_nearest_distance(radius,inlon,inlat, + self->lons[self->k[kk]],self->lats[self->j[jj]]); + kk++; + } + } + + grib_context_free(h->context,pl); + } + + kk=0; + for (ii=0;ii<2;ii++) { + for (jj=0;jj<2;jj++) { + distances[kk]=self->distances[kk]; + outlats[kk]=self->lats[self->j[jj]]; + outlons[kk]=self->lons[self->k[kk]]; + values[kk]=nearest->values[self->k[kk]]; + indexes[kk]=self->k[kk]; + kk++; + } + } + + return GRIB_SUCCESS; +} +#endif + + +static int destroy(grib_nearest* nearest) { + grib_nearest_reduced* self = (grib_nearest_reduced*) nearest; + if (self->lats) grib_context_free(nearest->context,self->lats); + if (self->lons) grib_context_free(nearest->context,self->lons); + if (self->j) grib_context_free(nearest->context,self->j); + if (self->k) grib_context_free(nearest->context,self->k); + if (self->distances) grib_context_free(nearest->context,self->distances); + + return GRIB_SUCCESS; +} + + diff --git a/src/grib_nearest_class_regular.c b/src/grib_nearest_class_regular.c new file mode 100644 index 000000000..39f8d8015 --- /dev/null +++ b/src/grib_nearest_class_regular.c @@ -0,0 +1,393 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * + * + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = nearest + SUPER = grib_nearest_class_gen + IMPLEMENTS = init + IMPLEMENTS = find;destroy + MEMBERS = double* lats + MEMBERS = int lats_count + MEMBERS = double* lons + MEMBERS = int lons_count + MEMBERS = double* distances + MEMBERS = int* k + MEMBERS = int* i + MEMBERS = int* j + MEMBERS = const char* Ni + MEMBERS = const char* Nj + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "nearest.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_nearest_class*); + +static int init (grib_nearest* nearest,grib_handle* h,grib_arguments* args); +static int find(grib_nearest* nearest, grib_handle* h,double inlat, double inlon, unsigned long flags, double* outlats,double* outlons, double *values,double *distances, int *indexes,size_t *len); +static int destroy (grib_nearest* nearest); + +typedef struct grib_nearest_regular{ + grib_nearest nearest; +/* Members defined in gen */ + const char* values_key; + const char* radius; + int cargs; +/* Members defined in regular */ + double* lats; + int lats_count; + double* lons; + int lons_count; + double* distances; + int* k; + int* i; + int* j; + const char* Ni; + const char* Nj; +} grib_nearest_regular; + +extern grib_nearest_class* grib_nearest_class_gen; + +static grib_nearest_class _grib_nearest_class_regular = { + &grib_nearest_class_gen, /* super */ + "regular", /* name */ + sizeof(grib_nearest_regular), /* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &find, /* find nearest */ +}; + +grib_nearest_class* grib_nearest_class_regular = &_grib_nearest_class_regular; + + +static void init_class(grib_nearest_class* c) +{ +} +/* END_CLASS_IMP */ + + +static int init(grib_nearest* nearest,grib_handle* h,grib_arguments* args) +{ + grib_nearest_regular* self = (grib_nearest_regular*) nearest; + self->Ni = grib_arguments_get_name(h,args,self->cargs++); + self->Nj = grib_arguments_get_name(h,args,self->cargs++); + self->i=(int*)grib_context_malloc(h->context,2*sizeof(int)); + self->j=(int*)grib_context_malloc(h->context,2*sizeof(int)); + return 0; +} + +#if 0 +static int find(grib_nearest* nearest, grib_handle* h, + double inlat, double inlon,unsigned long flags, + double* outlats,double* outlons, + double *values,double *distances,int* indexes, size_t *len) { + grib_nearest_regular* self = (grib_nearest_regular*) nearest; + int ret=0,kk=0,ii=0,jj=0; + size_t nvalues=0; + + long iradius; + double radius; + + if( (ret = grib_get_long(h,self->radius,&iradius))!= GRIB_SUCCESS) + return ret; + radius=((double)iradius)/1000.0; + + if (!nearest->h || (flags & GRIB_NEAREST_SAME_DATA)==0 || nearest->h!=h) { + grib_iterator* iter=NULL; + double lat=0,lon=0; + + if( (ret = grib_get_size(h,self->values_key,&nvalues))!= GRIB_SUCCESS) + return ret; + nearest->values_count = nvalues; + if (nearest->values) grib_context_free(nearest->context,nearest->values); + nearest->values = grib_context_malloc(h->context,nvalues*sizeof(double)); + if (!nearest->values) return GRIB_OUT_OF_MEMORY; + + ret=grib_get_double_array_internal( h,self->values_key, + nearest->values,&(nearest->values_count)); + if (ret!=GRIB_SUCCESS) grib_context_log(nearest->context,GRIB_LOG_ERROR, + "nearest: unable to get values array"); + + if (!nearest->h || (flags & GRIB_NEAREST_SAME_GRID)==0) { + double dummy=0; + double olat=1.e10, olon=1.e10; + int ilat=0,ilon=0; + long n=0; + + if( (ret = grib_get_long(h,self->Ni,&n))!= GRIB_SUCCESS) + return ret; + self->lons_count=n; + + if( (ret = grib_get_long(h,self->Nj,&n))!= GRIB_SUCCESS) + return ret; + self->lats_count=n; + + if (self->lats) grib_context_free(nearest->context,self->lats); + self->lats=grib_context_malloc( nearest->context, + self->lats_count* sizeof(double)); + if (!self->lats) return GRIB_OUT_OF_MEMORY; + + if (self->lons) grib_context_free(nearest->context,self->lons); + self->lons=grib_context_malloc( nearest->context, + self->lons_count*sizeof(double)); + if (!self->lons) return GRIB_OUT_OF_MEMORY; + + iter=grib_iterator_new(h,0,&ret); + while(grib_iterator_next(iter,&lat,&lon,&dummy)) { + if (olat != lat) { + self->lats[ilat++]=lat; + olat=lat; + } + if (ilonlons_count && olon != lon) { + self->lons[ilon++]=lon; + olon=lon; + } + } + grib_iterator_delete(iter); + + } + nearest->h=h; + + } + + if (!self->distances || (flags & GRIB_NEAREST_SAME_POINT)==0 + || (flags & GRIB_NEAREST_SAME_GRID)==0) { + + grib_binary_search(self->lats,self->lats_count-1,inlat, + &(self->j[0]),&(self->j[1])); + grib_binary_search(self->lons,self->lons_count-1,inlon, + &(self->i[0]),&(self->i[1])); + if (!self->distances) + self->distances=(double*)grib_context_malloc( nearest->context,4*sizeof(double)); + if (!self->k) + self->k=(int*)grib_context_malloc( nearest->context,4*sizeof(int)); + kk=0; + for (ii=0;ii<2;ii++) { + for (jj=0;jj<2;jj++) { + self->k[kk]=self->i[ii]+self->lons_count*self->j[jj]-1; + self->distances[kk]=grib_nearest_distance(radius,inlon,inlat, + self->lons[self->i[ii]],self->lats[self->j[jj]]); + kk++; + } + } + } + + kk=0; + for (ii=0;ii<2;ii++) { + for (jj=0;jj<2;jj++) { + distances[kk]=self->distances[kk]; + outlats[kk]=self->lats[self->j[jj]]; + outlons[kk]=self->lons[self->i[ii]]; + values[kk]=nearest->values[self->k[kk]]; + indexes[kk]=self->k[kk]; + kk++; + } + } + + return GRIB_SUCCESS; +} +#else +static int find(grib_nearest* nearest, grib_handle* h, + double inlat, double inlon,unsigned long flags, + double* outlats,double* outlons, + double *values,double *distances,int* indexes, size_t *len) { + grib_nearest_regular* self = (grib_nearest_regular*) nearest; + int ret=0,kk=0,ii=0,jj=0; + size_t nvalues=0; + long iradius; + double radius; + + grib_iterator* iter=NULL; + double lat=0,lon=0; + + while (inlon<0) inlon+=360; + while (inlon>360) inlon-=360; + + if( (ret = grib_get_size(h,self->values_key,&nvalues))!= GRIB_SUCCESS) + return ret; + nearest->values_count = nvalues; + + if (grib_is_missing(h,self->radius,&ret)) { + grib_context_log(h->context, GRIB_LOG_DEBUG,"Key '%s' is missing", self->radius); + return ret ? ret : GRIB_GEOCALCULUS_PROBLEM; + } + + if( (ret = grib_get_long(h,self->radius,&iradius))!= GRIB_SUCCESS) + return ret; + radius=((double)iradius)/1000.0; + + if (!nearest->h || (flags & GRIB_NEAREST_SAME_GRID)==0) { + double dummy=0; + double olat=1.e10, olon=1.e10; + int ilat=0,ilon=0; + long n=0; + + if (grib_is_missing(h,self->Ni,&ret)) { + grib_context_log(h->context, GRIB_LOG_DEBUG,"Key '%s' is missing", self->Ni); + return ret ? ret : GRIB_GEOCALCULUS_PROBLEM; + } + + if (grib_is_missing(h,self->Nj,&ret)) { + grib_context_log(h->context, GRIB_LOG_DEBUG,"Key '%s' is missing", self->Nj); + return ret ? ret : GRIB_GEOCALCULUS_PROBLEM; + } + + if ((ret = grib_get_long(h,self->Ni,&n))!= GRIB_SUCCESS) + return ret; + self->lons_count=n; + + if ((ret = grib_get_long(h,self->Nj,&n))!= GRIB_SUCCESS) + return ret; + self->lats_count=n; + + if (self->lats) grib_context_free(nearest->context,self->lats); + self->lats=grib_context_malloc( nearest->context, + self->lats_count* sizeof(double)); + if (!self->lats) return GRIB_OUT_OF_MEMORY; + + if (self->lons) grib_context_free(nearest->context,self->lons); + self->lons=grib_context_malloc( nearest->context, + self->lons_count*sizeof(double)); + if (!self->lons) return GRIB_OUT_OF_MEMORY; + + iter=grib_iterator_new(h,0,&ret); + while(grib_iterator_next(iter,&lat,&lon,&dummy)) { + if (olat != lat) { + self->lats[ilat++]=lat; + olat=lat; + } + if (ilonlons_count && olon != lon) { + self->lons[ilon++]=lon ; + olon=lon; + } + } + grib_iterator_delete(iter); + + } + nearest->h=h; + + if (!self->distances || (flags & GRIB_NEAREST_SAME_POINT)==0 + || (flags & GRIB_NEAREST_SAME_GRID)==0) { + int nearest_lons_found=0; + + if (self->lats[self->lats_count-1] > self->lats[0]) { + if (inlatlats[0] || inlat>self->lats[self->lats_count-1]) + return GRIB_OUT_OF_AREA; + } else { + if (inlat > self->lats[0] || inlat < self->lats[self->lats_count-1]) + return GRIB_OUT_OF_AREA; + } + + if (self->lons[self->lons_count-1] > self->lons[0]) { + if (inlonlons[0] || inlon>self->lons[self->lons_count-1]) { + /* try to scale*/ + if (inlon>0) inlon-=360; + else inlon+=360; + + if (inlonlons[0] || inlon>self->lons[self->lons_count-1]) { + if ( self->lons[0]+360-self->lons[self->lons_count-1]<= + self->lons[1]-self->lons[0]) { + /*it's a global field in longitude*/ + self->i[0]=0; + self->i[1]=self->lons_count-1; + nearest_lons_found=1; + } else + return GRIB_OUT_OF_AREA; + } + } + } else { + if (inlon>self->lons[0] || inlonlons[self->lons_count-1]) { + /* try to scale*/ + if (inlon>0) inlon-=360; + else inlon+=360; + if (self->lons[0]-self->lons[self->lons_count-1]-360 <= + self->lons[0]-self->lons[1]) { + /*it's a global field in longitude*/ + self->i[0]=0; + self->i[1]=self->lons_count-1; + nearest_lons_found=1; + } else if (inlon>self->lons[0] || inlonlons[self->lons_count-1]) + return GRIB_OUT_OF_AREA; + } + } + + grib_binary_search(self->lats,self->lats_count-1,inlat, + &(self->j[0]),&(self->j[1])); + + if (!nearest_lons_found) + grib_binary_search(self->lons,self->lons_count-1,inlon, + &(self->i[0]),&(self->i[1])); + + if (!self->distances) + self->distances=(double*)grib_context_malloc( nearest->context,4*sizeof(double)); + if (!self->k) + self->k=(int*)grib_context_malloc( nearest->context,4*sizeof(int)); + kk=0; + for (jj=0;jj<2;jj++) { + for (ii=0;ii<2;ii++) { + self->k[kk]=self->i[ii]+self->lons_count*self->j[jj]; + self->distances[kk]=grib_nearest_distance(radius,inlon,inlat, + self->lons[self->i[ii]],self->lats[self->j[jj]]); + kk++; + } + } + } + + kk=0; + for (jj=0;jj<2;jj++) { + for (ii=0;ii<2;ii++) { + distances[kk]=self->distances[kk]; + outlats[kk]=self->lats[self->j[jj]]; + outlons[kk]=self->lons[self->i[ii]]; + grib_get_double_element_internal(h,self->values_key,self->k[kk],&(values[kk])); + indexes[kk]=self->k[kk]; + kk++; + } + } + + return GRIB_SUCCESS; +} +#endif + + +static int destroy(grib_nearest* nearest) { + grib_nearest_regular* self = (grib_nearest_regular*) nearest; + if (self->lats) grib_context_free(nearest->context,self->lats); + if (self->lons) grib_context_free(nearest->context,self->lons); + if (self->i) grib_context_free(nearest->context,self->i); + if (self->j) grib_context_free(nearest->context,self->j); + if (self->k) grib_context_free(nearest->context,self->k); + if (self->distances) grib_context_free(nearest->context,self->distances); + return GRIB_SUCCESS; +} + diff --git a/src/grib_nearest_class_sh.c b/src/grib_nearest_class_sh.c new file mode 100644 index 000000000..7030ff1f3 --- /dev/null +++ b/src/grib_nearest_class_sh.c @@ -0,0 +1,291 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * + * + * + */ + +#include "grib_api_internal.h" + +/* + This is used by make_class.pl + + START_CLASS_DEF + CLASS = nearest + SUPER = grib_nearest_class_gen + IMPLEMENTS = init + IMPLEMENTS = find;destroy + MEMBERS = const char* J + MEMBERS = const char* K + MEMBERS = const char* M + END_CLASS_DEF + + */ + +/* START_CLASS_IMP */ + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "nearest.class" and rerun ./make_class.pl + +*/ + + +static void init_class (grib_nearest_class*); + +static int init (grib_nearest* nearest,grib_handle* h,grib_arguments* args); +static int find(grib_nearest* nearest, grib_handle* h,double inlat, double inlon, unsigned long flags, double* outlats,double* outlons, double *values,double *distances, int *indexes,size_t *len); +static int destroy (grib_nearest* nearest); + +typedef struct grib_nearest_sh{ + grib_nearest nearest; +/* Members defined in gen */ + const char* values_key; + const char* radius; + int cargs; +/* Members defined in sh */ + const char* J; + const char* K; + const char* M; +} grib_nearest_sh; + +extern grib_nearest_class* grib_nearest_class_gen; + +static grib_nearest_class _grib_nearest_class_sh = { + &grib_nearest_class_gen, /* super */ + "sh", /* name */ + sizeof(grib_nearest_sh), /* size of instance */ + 0, /* inited */ + &init_class, /* init_class */ + &init, /* constructor */ + &destroy, /* destructor */ + &find, /* find nearest */ +}; + +grib_nearest_class* grib_nearest_class_sh = &_grib_nearest_class_sh; + + +static void init_class(grib_nearest_class* c) +{ +} +/* END_CLASS_IMP */ + +#define LEGENDRE_SIZE(L) (L+1)*(L+2)/2 + +static void grib_trigs(int m,double lambda,double* c,double* s); +static void grib_invtrans_legendre(int L,double x, + double* RI,double* TR,double* TI); +static double grib_invtrans_trig(int L,double* TR,double* TI, + double *c,double *s); +static double grib_invtrans(grib_context *c,int L,double latdeg,double londeg,double* values); + +static int init(grib_nearest* nearest,grib_handle* h,grib_arguments* args) +{ + grib_nearest_sh* self = (grib_nearest_sh*) nearest; + self->J = grib_arguments_get_name(h,args,self->cargs++); + self->K = grib_arguments_get_name(h,args,self->cargs++); + self->M = grib_arguments_get_name(h,args,self->cargs++); + return 0; +} + +static int find(grib_nearest* nearest, grib_handle* h, + double inlat, double inlon,unsigned long flags, + double* outlats,double* outlons, + double *outvalues,double *distances,int* indexes, size_t *len) { + grib_nearest_sh* self = (grib_nearest_sh*) nearest; + long J,K,M; + double *values; + int size,i,ret; + size_t vsize=0; + double val; + + if( (ret = grib_get_long(h,self->J,&J))!= GRIB_SUCCESS) + return ret; + if( (ret = grib_get_long(h,self->K,&K))!= GRIB_SUCCESS) + return ret; + if( (ret = grib_get_long(h,self->M,&M))!= GRIB_SUCCESS) + return ret; + + size=2*LEGENDRE_SIZE(J); + vsize=size; + values=(double*)grib_context_malloc_clear(h->context,sizeof(double)*size); + if (!values) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "nearest_sh: unable to allocate %d bytes", + sizeof(double)*size); + return GRIB_OUT_OF_MEMORY; + } + + if( (ret = grib_get_double_array(h,self->values_key,values,&vsize)) + != GRIB_SUCCESS) + return ret; + + Assert(vsize==size); + + val=grib_invtrans(h->context,J,inlat,inlon,values); + + grib_context_free(h->context,values); + + for (i=0;i<4;i++) { + outlats[i]=inlat; + outlons[i]=inlon; + outvalues[i]=val; + indexes[i]=-1; + } + + return GRIB_SUCCESS; +} + +static int destroy(grib_nearest* nearest) { + return GRIB_SUCCESS; +} + + +static void grib_trigs(int m,double lambda,double* c,double* s) { + int i; + double a,b; + + b=sin(lambda); + a=1-2*sin(lambda/2.0)*sin(lambda/2.0); + c[0]=1.0; s[0]=0.0; + + for (i=1;i<=m;i++) { + c[i]=a*c[i-1]-b*s[i-1]; + s[i]=a*s[i-1]+b*c[i-1]; + } + +} + +static double grib_invtrans_trig(int L,double* TR,double* TI,double *c,double *s) { + double ret=0; + int m=0; + + for (m=1;m<=L;m++) { + ret+= TR[m] * c[m]; + printf("++ %d ++ %.20e %g %g\n",m,ret,TR[m],c[m]); + ret-= TI[m] * s[m]; + printf("+- %d ++ %.20e %g %g\n",m,ret,TI[m],s[m]); + } + ret=2*ret+TR[0]; + + return ret; +} + +static void grib_invtrans_legendre(int L,double x, + double* RI,double* TR,double* TI) { + int l,m; + double y2; + double f,of,fx,p0; + double *pP,*oP,*pRI; + + if (abs(x) > 1.0) { + printf("grib_legendreP: invalid x=%g must be abs(x)>0\n",x); + exit(1); + } + if (L<0) { + printf("grib_legendreP: invalid L=%d must be >0\n",L); + exit(1); + } + + pP=(double*)malloc(sizeof(double)*(L+1)); + if (!pP) { + printf("unable to allocate %d bytes\n",(int)sizeof(double)*(L+1)); + exit(1); + } + + y2=(1.0-x*x); fx=1; p0=1; oP=pP; pRI=RI; + for (m=0;mvalues; + long no_values = helper->no_values; + double reference_value = helper->reference_value; + double divisor = helper->divisor; + double decimal = helper->decimal; + int* data; + + opj_cparameters_t parameters = {0,}; /* compression parameters */ + opj_event_mgr_t event_mgr = {0,}; /* event manager */ + opj_image_t *image = NULL; + opj_image_cmptparm_t cmptparm = {0,}; + opj_cio_t *cio = NULL; + opj_cinfo_t* cinfo = NULL; + + + /* set encoding parameters to default values */ + opj_set_default_encoder_parameters(¶meters); + + parameters.tcp_numlayers = 1; + parameters.cp_disto_alloc = 1; + parameters.tcp_rates[0] = helper->compression; + + /* initialize image component */ + cmptparm.prec = helper->bits_per_value; + cmptparm.bpp = helper->bits_per_value; /* Not sure about this one and the previous. What is the difference? */ + cmptparm.sgnd = 0; + cmptparm.dx = 1; + cmptparm.dy = 1; + cmptparm.w = helper->width; + cmptparm.h = helper->height; + + /* create the image */ + image = opj_image_create(numcomps, &cmptparm, CLRSPC_GRAY); + + if(!image) { + err = GRIB_ENCODING_ERROR; + goto cleanup; + } + + image->x0 = 0; + image->y0 = 0; + image->x1 = helper->width; + image->y1 = helper->height; + + Assert(cmptparm.prec <= sizeof(image->comps[0].data[0])*8 - 1); /* BR: -1 because I don't know what happens if the sign bit is set */ + + Assert(helper->no_values == image->comps[0].h * image->comps[0].w); + + /* Simple packing */ + data = image->comps[0].data; + for(i=0;i< no_values;i++){ + unsigned long unsigned_val = (unsigned long)((((values[i]*decimal)-(reference_value))*divisor)+0.5); + data[i] = unsigned_val; + } + + /* get a J2K compressor handle */ + cinfo = opj_create_compress(CODEC_J2K); + + /* catch events using our callbacks and give a local context */ + event_mgr.error_handler = openjpeg_error; + event_mgr.info_handler = openjpeg_info; + event_mgr.warning_handler = openjpeg_warning; + opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, c); + + /* setup the encoder parameters using the current image and user parameters */ + opj_setup_encoder(cinfo, ¶meters, image); + + /* open a byte stream for writing */ + /* allocate memory for all tiles */ + cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0); + + /* encode image */ + if (!opj_encode(cinfo, cio, image, NULL)) { + err = GRIB_ENCODING_ERROR; + goto cleanup; + } + + helper->jpeg_length = cio_tell(cio); + memcpy(helper->jpeg_buffer,cio->buffer,helper->jpeg_length); + +cleanup: + if (cio) opj_cio_close(cio); + if (cinfo) opj_destroy_compress(cinfo); + if (image) opj_image_destroy(image); + + return err; +} + + +int grib_openjpeg_decode(grib_context *c, unsigned char *buf, size_t *buflen, double *val, size_t *n_vals) { + + int err = GRIB_SUCCESS; + int i; + unsigned long mask; + int *data; + size_t count; + + opj_dparameters_t parameters = {0,}; /* decompression parameters */ + opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */ + opj_event_mgr_t event_mgr = {0,}; /* event manager */ + opj_cio_t *cio = NULL; + opj_image_t *image = NULL; + opj_image_comp_t comp = {0,}; + + + /* set decoding parameters to default values */ + opj_set_default_decoder_parameters(¶meters); + + /* JPEG-2000 codestream */ + + /* get a decoder handle */ + dinfo = opj_create_decompress(CODEC_J2K); + + /* catch events using our callbacks and give a local context */ + event_mgr.error_handler = openjpeg_error; + event_mgr.info_handler = openjpeg_info; + event_mgr.warning_handler = openjpeg_warning; + + opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, c); + + /* setup the decoder decoding parameters using user parameters */ + opj_setup_decoder(dinfo, ¶meters); + + /* open a byte stream */ + cio = opj_cio_open((opj_common_ptr)dinfo, buf, *buflen); + + image = opj_decode(dinfo, cio); + + if(!image) { + grib_context_log(c, GRIB_LOG_ERROR, "OPENJPEG: failed to decode image"); + err = GRIB_DECODING_ERROR; + goto cleanup; + } + + if ( !(*n_vals <= image->comps[0].w * image->comps[0].h) ) { + err = GRIB_DECODING_ERROR; + goto cleanup; + } + + if ( (image->numcomps != 1) || !(image->x1 * image->y1) ) { + err = GRIB_DECODING_ERROR; + goto cleanup; + } + + Assert(image->comps[0].sgnd == 0); + Assert(comp.prec <= sizeof(image->comps[0].data[0])*8 - 1); /* BR: -1 because I don't know what happens if the sign bit is set */ + + Assert(image->comps[0].prec < sizeof(mask)*8-1); + + data = image->comps[0].data; + mask = (1 << image->comps[0].prec) - 1; + + count = image->comps[0].w * image->comps[0].h; + + for(i = 0; i -1) + { + if(uname[i] == ':') { + type=grib_type_to_int(uname[i+1]); + i++; + } else if(uname[i] == ']') + { + loc[mode] = 0; + mode = -1; + a = grib_find_accessor(h,loc); + if(!a){ + if (!fail) { + sprintf(val,"undef"); + } else { + grib_context_log(h->context, GRIB_LOG_WARNING,"grib_recompose_name: Problem to recompose filename with : %s ( %s no accessor found)", uname,loc); + return GRIB_NOT_FOUND; + } + } else { + switch (type) { + case GRIB_TYPE_STRING: + replen = sizeof(val)/sizeof(*val); + ret = grib_unpack_string(a,val,&replen); + break; + case GRIB_TYPE_DOUBLE: + replen=1; + ret = grib_unpack_double(a,&dval,&replen); + sprintf(val,"%g",dval); + break; + case GRIB_TYPE_LONG: + replen=1; + ret = grib_unpack_long(a,&lval,&replen); + sprintf(val,"%d",(int)lval); + break; + default: + grib_context_log(h->context, GRIB_LOG_WARNING,"grib_recompose_name: Problem to recompose filename with : %s, invalid type %d", loc,type); + } + + grib_dependency_add(observer,a); + + if((ret != GRIB_SUCCESS)) + { + grib_context_log(h->context, GRIB_LOG_ERROR,"grib_recompose_name: Could not recompose filename : %s", uname); + return ret; + } + } + { + char* pc=fname; + while (*pc != '\0') pc++; + strcpy(pc,val); + } + /* sprintf(fname,"%s%s",fname,val); */ + + loc[0] = 0 ; + + } + else + loc[mode++]=uname[i]; + } + else if(uname[i]=='[') + mode = 0; + else { + int llen=strlen(fname); + fname[llen]=uname[i]; + fname[llen+1]='\0'; + /* sprintf(fname,"%s%c",fname, uname[i]); */ + type=GRIB_TYPE_STRING; + } + + } + /*fprintf(stdout,"parsed > %s\n",fname);*/ + return GRIB_SUCCESS; +} + +int grib_recompose_print(grib_handle* h, grib_accessor *observer, const char* uname, char* fname,int fail,FILE* out) +{ + grib_accessor* a; + char loc[1024]; + int i = 0; + int ret=0; + int maxcolsd=8; + int maxcols; + int mode = -1; + char val[1024]; + char* sval=NULL; + char* p=NULL; + char* pp=NULL; + size_t size=0; + double* dval=0; + long* lval=0; + char double_format[]="%g"; /* default format for printing double keys */ + char long_format[]="%ld"; /* default format for printing integer keys */ + char buff[10]={0,}; + char sbuf[200]={0,}; + char buff1[1024]={0,}; + char* format=NULL; + int type=-1; + int newline=1; + size_t replen = 0; + int l; + char* separator=NULL; + char default_separator[]=" "; + + maxcols=maxcolsd; + + loc[0] = 0 ; + fname[0] = 0 ; + for(i=0;i -1) + { + switch (uname[i]) { + case ':': + type=grib_type_to_int(uname[i+1]); + i++; + break; + case '\'': + pp=(char*)(uname+i+1); + while(*pp!='%' && *pp!='!' && *pp!=']' && *pp!=':' && *pp!='\'') pp++; + l=pp-uname-i; + if (*pp == '\'') separator=strncpy(buff1,uname+i+1,l-1); + i+=l; + break; + case '%': + pp=(char*)(uname+i+1); + while(*pp!='%' && *pp!='!' && *pp!=']' && *pp!=':' && *pp!='\'') pp++; + l=pp-uname-i; + format=strncpy(buff,uname+i,l); + i+=l-1; + break; + case '!': + pp=(char*)uname; + maxcols=strtol(uname+i+1,&pp,10); + if (maxcols==0) maxcols=maxcolsd; + while(pp && *pp!='%' && *pp!='!' && *pp!=']' && *pp!=':' && *pp!='\'' ) pp++; + i+=pp-uname-i-1; + break; + case ']': + loc[mode] = 0; + mode = -1; + a = grib_find_accessor(h,loc); + if(!a){ + if (!fail) { + fprintf(out,"undef"); + ret=GRIB_NOT_FOUND; + } else { + grib_context_log(h->context, GRIB_LOG_WARNING,"grib_recompose_print: Problem to recompose print with : %s, no accessor found", loc); + return GRIB_NOT_FOUND; + } + } else { + if (type==-1) type=grib_accessor_get_native_type(a); + switch (type) { + case GRIB_TYPE_STRING: + replen=200; + ret = grib_get_string_internal(a->parent->h,a->name,sbuf,&replen); + fprintf(out,"%s",sbuf); + break; + case GRIB_TYPE_DOUBLE: + if (!format) format=double_format; + if (!separator) separator=default_separator; + ret=_grib_get_size(h,a,&size); + dval=(double*)grib_context_malloc_clear(h->context,sizeof(double)*size); + replen=0; + ret=_grib_get_double_array_internal(h,a,dval,size,&replen); + if (replen==1) fprintf(out,format,dval[0]); + else { + int i=0; + int cols=0; + for (i=0;i=maxcols) { + fprintf(out,"\n"); + newline=1; + cols=0; + } + } + } + grib_context_free( h->context,dval); + break; + case GRIB_TYPE_LONG: + if (!format) format=long_format; + if (!separator) separator=default_separator; + ret=_grib_get_size(h,a,&size); + lval=(long*)grib_context_malloc_clear(h->context,sizeof(long)*size); + replen=0; + ret=_grib_get_long_array_internal(h,a,lval,size,&replen); + if (replen==1) fprintf(out, format, lval[0]); + else { + int i=0; + int cols=0; + for (i=0;i=maxcols) { + fprintf(out,"\n"); + newline=1; + cols=0; + } + } + } + grib_context_free( h->context,lval); + break; + case GRIB_TYPE_BYTES: + replen=a->length; + sval=(char*)grib_context_malloc( h->context,replen*sizeof(char)); + ret = grib_unpack_string(a,sval,&replen); + p=sval; + while ((replen--) > 0) fprintf(out,"%c",*(p++)); + grib_context_free(h->context,sval); + newline=0; + break; + default: + grib_context_log(h->context, GRIB_LOG_WARNING,"grib_recompose_print: Problem to recompose print with : %s, invalid type %d", loc,type); + } + separator=NULL; + format=NULL; + + if((ret != GRIB_SUCCESS)) + { + /* + grib_context_log(h->context, GRIB_LOG_ERROR,"grib_recompose_print: Could not recompose print : %s", uname); + */ + return ret; + } + } + { + char* pc=fname; + while (*pc != '\0') pc++; + strcpy(pc,val); + } + + loc[0] = 0 ; + break; + default: + loc[mode++]=uname[i]; + } + } else if(uname[i]=='[') { + mode = 0; + } else { + fprintf(out,"%c",uname[i]); + type=-1; + } + + } + if (newline) fprintf(out,"\n"); + + return ret; +} + + +grib_action_file* grib_find_action_file(const char* fname , grib_action_file_list* afl) +{ + grib_action_file* act = afl->first; + while(act) + { + if(strcmp(act->filename,fname)==0) + return act; + act = act->next; + } + return 0; +} + +void grib_push_action_file(grib_action_file* af, grib_action_file_list* afl) +{ + if (!afl->first) + afl->first = afl->last = af; + else + afl->last->next = af; + afl->last = af; +} + +#define MAXINCLUDE 10 + +typedef struct { + char *name; + FILE *file; + char *io_buffer; + int line; +} context; + +static context stack[MAXINCLUDE]; +static int top = 0; +extern FILE *grib_yyin; +extern int grib_yylineno; +extern void grib_yyrestart(FILE*); +static int error = 0; + +int grib_yywrap() +{ + /* int i; */ + top--; + + /* for(i = 0; i < top ; i++) printf(" "); */ + /* printf("CLOSE %s\n",parse_file); */ + + fclose(stack[top].file); + /* if (stack[top].io_buffer) free(stack[top].io_buffer); */ + + grib_yylineno = stack[top].line; + + + if(top) + { + parse_file = stack[top-1].name; + grib_yyin = stack[top-1].file; + Assert(parse_file); + Assert(grib_yyin); + /* grib_yyrestart(grib_yyin); */ + + /* for(i = 0; i < top ; i++) printf(" "); */ + /* printf("BACK TO %s\n",parse_file); */ + + grib_context_free(grib_parser_context,stack[top].name); + return 0; + } + else { + grib_context_free(grib_parser_context,stack[top].name); + parse_file = 0; + grib_yyin = NULL; + return 1; + + } + + +} + +int grib_yyerror(const char* msg) +{ + grib_context_log(grib_parser_context, GRIB_LOG_ERROR, + "grib_parser: %s at line %d of %s", msg, grib_yylineno + 1,parse_file); + error = 1; + return 1; +} + + +void grib_parser_include(const char* fname) +{ + FILE *f ; + char path[1204]; + char* io_buffer=0; + /* int i; */ + Assert(top < MAXINCLUDE); + Assert(fname); + + if(parse_file == 0) + { + parse_file = fname; + Assert(top == 0); + } + else + { + const char *p = parse_file; + const char *q = NULL; + + while(*p) { + if(*p == '/') q = p; + p++; + } + + Assert(q); + q++; + + strncpy(path,parse_file,q-parse_file); + path[q-parse_file] = 0; + strcat(path,fname); + + Assert(*fname != '/'); + + parse_file = path; + } + + f = fopen(parse_file,"r"); + /* for(i = 0; i < top ; i++) printf(" "); */ + /* printf("PARSING %s\n",parse_file); */ + + if(f == NULL) + { + char buffer[1024]; + grib_context_log(grib_parser_context, (GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),"grib_parser_include: cannot open: '%s'", parse_file); + sprintf(buffer,"Cannot include file: '%s'",parse_file); + grib_yyerror(buffer); + } + else + { + /* + c=grib_context_get_default(); + if (c->io_buffer_size) { + if (posix_memalign(&(io_buffer),sysconf(_SC_PAGESIZE),c->io_buffer_size) ) { + grib_context_log(c,GRIB_LOG_FATAL,"grib_parser_include: posix_memalign unable to allocate io_buffer\n"); + } + setvbuf(f,io_buffer,_IOFBF,c->io_buffer_size); + } + */ + + grib_yyin = f; + stack[top].file = f; + stack[top].io_buffer = io_buffer; + stack[top].name = grib_context_strdup(grib_parser_context,parse_file); + parse_file = stack[top].name; + stack[top].line = grib_yylineno; + grib_yylineno = 0; + top++; + /* grib_yyrestart(f); */ + } +} + + +extern int grib_yyparse(void); + +static int parse(grib_context* gc,const char* filename) +{ + int err = 0; + + gc = gc ? gc : grib_context_get_default(); + +#ifdef YYDEBUG + extern int grib_yydebug; + grib_yydebug = getenv("YYDEBUG") != NULL; +#endif + + + grib_yyin = NULL; + top = 0; + parse_file = 0; + grib_parser_include(filename); + err = grib_yyparse(); + parse_file = 0; + + if (err) grib_context_log(gc,GRIB_LOG_ERROR,"Parsing error %d > %s\n",err, filename); + + + return err; +} + +static grib_action* grib_parse_stream(grib_context* gc, const char* filename) +{ + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex_stream); + + grib_parser_all_actions = 0; + + if (parse(gc,filename) == 0) { + if (grib_parser_all_actions) { + GRIB_MUTEX_UNLOCK(&mutex_stream) + return grib_parser_all_actions; + } else { + grib_action* ret=grib_action_create_noop(gc,filename); + GRIB_MUTEX_UNLOCK(&mutex_stream) + return ret; + } + } else { + GRIB_MUTEX_UNLOCK(&mutex_stream); + return NULL; + } +} + +grib_concept_value* grib_parse_concept_file( grib_context* gc,const char* filename) +{ + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex_concept); + + gc = gc ? gc : grib_context_get_default(); + grib_parser_context = gc; + + if(parse(gc,filename) == 0) { + GRIB_MUTEX_UNLOCK(&mutex_concept); + return grib_parser_concept; + } else { + GRIB_MUTEX_UNLOCK(&mutex_concept); + return NULL; + } +} + +grib_rule* grib_parse_rules_file( grib_context* gc,const char* filename) +{ + if (!gc) gc=grib_context_get_default(); + + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex_rules); + + gc = gc ? gc : grib_context_get_default(); + grib_parser_context = gc; + + if(parse(gc,filename) == 0) { + GRIB_MUTEX_UNLOCK(&mutex_rules); + return grib_parser_rules; + } else { + GRIB_MUTEX_UNLOCK(&mutex_rules); + return NULL; + } +} + +grib_action* grib_parse_file( grib_context* gc,const char* filename) +{ + grib_action_file* af; + + GRIB_PTHREAD_ONCE(&once,&init); + GRIB_MUTEX_LOCK(&mutex_file); + + af =0; + + gc = gc ? gc : grib_context_get_default(); + + grib_parser_context = gc; + + if(!gc->grib_reader) + gc->grib_reader =(grib_action_file_list*)grib_context_malloc_clear_persistent(gc,sizeof(grib_action_file_list)); + else { + af = grib_find_action_file(filename, gc->grib_reader); + } + + if(!af) + { + grib_action *a; + grib_context_log(gc,GRIB_LOG_DEBUG,"Loading %s",filename); + + a = grib_parse_stream(gc,filename); + + if(error) + { +#if 1 + grib_free_action(gc,a); + GRIB_MUTEX_UNLOCK(&mutex_file); + return NULL; +#endif + a = NULL; + } + + af =(grib_action_file*)grib_context_malloc_clear_persistent(gc,sizeof(grib_action_file)); + + af->root = a; + + af->filename=grib_context_strdup_persistent(gc,filename); + grib_push_action_file(af,gc->grib_reader); + } + else grib_context_log(gc,GRIB_LOG_DEBUG,"Using cached version of %s",filename); + + GRIB_MUTEX_UNLOCK(&mutex_file); + return af->root; +} + +int grib_type_to_int(char id) { + switch (id) { + case 'd': + return GRIB_TYPE_DOUBLE; + break; + case 'f': + return GRIB_TYPE_DOUBLE; + break; + case 'l': + return GRIB_TYPE_LONG; + break; + case 'i': + return GRIB_TYPE_LONG; + break; + case 's': + return GRIB_TYPE_STRING; + break; + } + return GRIB_TYPE_UNDEFINED; +} + diff --git a/src/grib_query.c b/src/grib_query.c new file mode 100644 index 000000000..741f26270 --- /dev/null +++ b/src/grib_query.c @@ -0,0 +1,249 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile + * Jean Baptiste Filippi - 01.11.2005 * + * * + ***************************************************************************/ +#include "grib_api_internal.h" + +#if 0 +GRIB_INLINE static int strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} +#endif + + +static int matching(grib_accessor* a,const char* name,const char* name_space) +{ + int i = 0; + while(i < MAX_ACCESSOR_NAMES) + { + if(a->all_names[i] == 0) return 0; + + if((strcmp(name,a->all_names[i]) == 0) && + ((name_space == NULL) || (a->all_name_spaces[i] != NULL && + strcmp(a->all_name_spaces[i],name_space) == 0)) + ) + return 1; + i++; + } + return 0; +} + + +static grib_accessor* search(grib_section* s,const char* name,const char* name_space) +{ + + grib_accessor* match = NULL; + + + grib_accessor* a = s ? s->block->first : NULL; + grib_accessor* b=NULL; + + if(!a || !s) return NULL; + + while(a) + { + grib_section* sub = a->sub_section; + + if(matching(a,name,name_space)) + match = a; + + if((b = search(sub,name,name_space)) != NULL) + match = b; + + a = a->next; + } + + return match; +} + +static void visit(grib_section* s,const char* name,const char* name_space, + search_all_callback_proc callback,void *data,int* count) +{ + + grib_accessor* a = s ? s->block->first : NULL; + + if(!s) return ; + + while(a) + { + grib_section* sub = a->sub_section; + + if(matching(a,name,name_space)) + { + callback(a,data); + (*count)++; + } + + visit(sub,name,name_space,callback,data,count); + + a = a->next; + } + +} + +static void rebuild_hash_keys (grib_handle* h,grib_section* s) +{ + grib_accessor* a = s ? s->block->first : NULL; + + while(a) + { + grib_section* sub = a->sub_section; + int i=0; + int id=-1; + const char *p; + Assert(h == a->parent->h); + + while(iall_names[i]) != NULL)) { + if(*p != '_') { + id=grib_hash_keys_get_id(a->parent->h->context->keys,p); + + if (a->same != a && i==0) { + a->same=a->parent->h->accessors[id]; + a->parent->h->accessors[id]=a; + Assert(a->same != a); + } + + } + i++; + } + rebuild_hash_keys(h,sub); + a = a->next; + } +} + +static grib_accessor* search_and_cache(grib_handle* h, const char* name,const char *namespace) +{ + if(h->use_trie) + { + grib_accessor* a = NULL; + int id=-1; + + if (h->trie_invalid && h->kid == NULL) + { + int i=0; + for (i=0;iaccessors[i]=NULL; + + if (h->root) + rebuild_hash_keys(h,h->root); + + h->trie_invalid=0; + id = grib_hash_keys_get_id(h->context->keys,name); + + } + else + { + id = grib_hash_keys_get_id(h->context->keys,name); + + if ((a=h->accessors[id])!=NULL && (namespace==NULL || matching(a,name,namespace))) + return a; + } + + a = search(h->root,name,namespace); + h->accessors[id] = a; + + return a; + } + else { + return search(h->root,name,namespace); + } + +} + +/* Only look in trie */ +grib_accessor* grib_find_accessor_fast(grib_handle* h, const char* name) +{ + grib_accessor* a = NULL; + char* p=NULL; + char* basename=NULL; + char name_space[1024]; + int i=0,len=0; + + p=(char*)name; + + /* Assert(name); */ + /*Assert(h->use_trie && !h->trie_invalid);*/ + + while ( *p != '.' && *p != '\0' ) p++; + if ( *p == '.' ) { + basename=p+1; + p--; + i=0; + len=p-name+1; + + for ( i=0;iaccessors[grib_hash_keys_get_id(h->context->keys,name)]; + if(a && !matching(a,name,name_space)) + a = NULL; + + } else { + a = h->accessors[grib_hash_keys_get_id(h->context->keys,name)]; + } + + if(a == NULL && h->main) + a = grib_find_accessor_fast(h->main,name); + + return a; +} + +grib_accessor* grib_find_accessor(grib_handle* h, const char* name) +{ + grib_accessor* a = NULL; + char* p=NULL; + char* basename=NULL; + char name_space[1024]; + int i=0,len=0; + + p=(char*)name; + Assert(name); + + while ( *p != '.' && *p != '\0' ) p++; + if ( *p == '.' ) { + basename=p+1; + p--; + i=0; + len=p-name+1; + + for ( i=0;imain) + a = grib_find_accessor(h->main,name); + + return a; +} + +int grib_find_all_accessors(grib_handle* h, const char* name,search_all_callback_proc callback,void *data) +{ + int count = 0; + visit(h->root,name,NULL,callback,data,&count); + /* if(count == 0) */ + if(h->main) + count += grib_find_all_accessors(h->main,name,callback,data); + return count; +} + + + diff --git a/src/grib_rules.c b/src/grib_rules.c new file mode 100644 index 000000000..455d6369d --- /dev/null +++ b/src/grib_rules.c @@ -0,0 +1,41 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +grib_rule_entry *grib_new_rule_entry(grib_context* c,const char* name,grib_expression* expression) +{ + grib_rule_entry* e = grib_context_malloc_clear_persistent(c,sizeof(grib_rule_entry)); + e->name = grib_context_strdup_persistent(c,name); + e->value = expression; + return e; +} + +#if 0 +/* new GCC compiler v4.5.0 complains function is defined but not used*/ +static void grib_rule_entry_delete(grib_context* c,grib_rule_entry* e) +{ + if(e) + { + grib_context_free_persistent(c,e->name); + grib_rule_entry_delete(c,e->next); + grib_context_free_persistent(c,e); + + } +} +#endif + +grib_rule* grib_new_rule(grib_context* c,grib_expression* condition,grib_rule_entry* entries) +{ + grib_rule* r = grib_context_malloc_clear_persistent(c,sizeof(grib_rule)); + r->condition = condition; + r->entries = entries; + return r; +} diff --git a/src/grib_scaling.c b/src/grib_scaling.c new file mode 100644 index 000000000..62da6d271 --- /dev/null +++ b/src/grib_scaling.c @@ -0,0 +1,171 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/************************************** + * Enrico Fucile + **************************************/ + + +#include "grib_api_internal.h" + +#define GRIB_EPSILON 10E-12 + +double grib_power(long s,long n) +{ + double divisor = 1.0; + while(s < 0) + { + divisor /= n; + s++; + } + while(s > 0) + { + divisor *= n; + s--; + } + return divisor; +} + +long grib_get_binary_scale_fact(double max, double min, long bpval,int *ret) +{ + + double range = max - min; + double zs = 1; + long scale = 0; + const long last = 127; /* Depends on edition, should be parameter */ + + unsigned long maxint = grib_power(bpval,2) - 1; + double dmaxint=(double)maxint; + + *ret=0; + + Assert (bpval >= 1); +/* + printf("---- Maxint %ld range=%g\n",maxint,range); +*/ + if(range == 0) + return 0; + + /* range -= 1e-10; */ + while( (range * zs) <= dmaxint) { + scale--; + zs *= 2; + } + + while( (range * zs ) > dmaxint) { + scale++; + zs /= 2; + } + + while( (unsigned long)(range * zs + 0.5) <= maxint) { + scale--; + zs *= 2; + } + + while( (unsigned long)(range * zs + 0.5) > maxint) { + scale++; + zs /= 2; + } + + if (scale < -last) { + *ret=GRIB_UNDERFLOW; + /*printf("grib_get_binary_scale_fact: max=%g min=%g\n",max,min);*/ + scale = -last; + } + Assert(scale <= last); + + return scale; + +} + +long grib_get_bits_per_value(double max, double min, long binary_scale_factor) +{ + + double range = max - min; + double zs = 1; + long scale = 0; + const long last = 127; /* Depends on edition, should be parameter */ + + unsigned long maxint = grib_power(binary_scale_factor,2) - 1; + double dmaxint=(double)maxint; + + if (maxint==0) maxint=1; + +/* + printf("---- Maxint %ld range=%g\n",maxint,range); +*/ + if(range == 0) + return 0; + + /* range -= 1e-10; */ + while( (range * zs) <= dmaxint) { scale--;zs *= 2;} + + while( (range * zs ) > dmaxint) {scale++;zs /= 2;} + + while( (unsigned long)(range * zs + 0.5) <= maxint) { + scale--; + zs *= 2; + } + + while( (unsigned long)(range * zs + 0.5) > maxint) { + scale++; + zs /= 2; + } + + Assert(scale >= -last && scale <= last); + /* printf("---- scale=%ld\n",scale);*/ + + return scale; + +} + +long grib_get_decimal_scale_fact(double max, double min, long bpval,long binary_scale) +{ + double range = max - min; + double zs = 1; + long scale = 0; + const long last = 127; /* Depends on edition, should be parameter */ + + unsigned long maxint = grib_power(bpval,2) - 1; + double dmaxint=(double)maxint; + + range*=grib_power(-binary_scale,2); + + Assert (bpval >= 1); + if(range == 0) + return 0; + + while( (range * zs ) > dmaxint) { + scale--; + zs /= 10; + } + while( (range * zs) <= dmaxint) { + scale++; + zs *= 10; + } + + while( (unsigned long)(range * zs + 0.5) > maxint) { + scale--; + zs /= 10; + } + while( (unsigned long)(range * zs + 0.5) <= maxint) { + scale++; + zs *= 10; + } + + /* printf("grib_api: decimal_scale_fact=%ld max=%g min=%g bits_per_value=%ld binary_scale=%ld\n",scale,max,min,bpval,binary_scale); */ + + Assert(scale >= -last && scale <= last); + + return scale; +} + + + diff --git a/src/grib_templates.c b/src/grib_templates.c new file mode 100644 index 000000000..860c20c8d --- /dev/null +++ b/src/grib_templates.c @@ -0,0 +1,131 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +#if HAVE_UNISTD_H +# include +#endif + +typedef struct grib_templates { + const char* name; + const unsigned char* data; + size_t size; +} grib_templates; + +#if 1 +#include "grib_templates.h" + +#define NUMBER(x) (sizeof(x)/sizeof(x[0])) + +grib_handle* grib_internal_template(grib_context* c,const char* name) +{ + int i; + for(i = 0; i < NUMBER(templates); i++) + if(strcmp(name,templates[i].name) == 0) + return grib_handle_new_from_message_copy(c,templates[i].data,templates[i].size); + return NULL; +} +#else +grib_handle* grib_internal_template(grib_context* c,const char* name) +{ + return NULL; +} +#endif + +static grib_handle* try_template(grib_context* c,const char* dir,const char* name) +{ + char path[1024]; + grib_handle *g = NULL; + int err = 0; + + sprintf(path,"%s/%s.tmpl",dir,name); + + if(access(path,F_OK) == 0) + { + FILE* f = fopen(path,"r"); + if(!f) + { + grib_context_log(c,GRIB_LOG_PERROR,"cannot open %s",path); + return NULL; + } + g = grib_handle_new_from_file(c,f,&err); + fclose(f); + } + + return g; +} + +static char* try_template_path(grib_context* c,const char* dir,const char* name) +{ + char path[1024]; + + sprintf(path,"%s/%s.tmpl",dir,name); + + if(access(path,R_OK) == 0) + { + return grib_context_strdup(c,path); + } + + return NULL; +} + +grib_handle* grib_external_template(grib_context* c,const char* name) +{ + const char *base = c->grib_samples_path; + char buffer[1024]; + char *p = buffer; + grib_handle *g = NULL; + /* printf("GRIB_TEMPLATES_PATH=%s\n",base); */ + + if(!base) return NULL; + + while(*base) + { + if(*base == ':') + { + *p = 0; + g = try_template(c,buffer,name); + if(g) return g; + p = buffer; + base++; /*advance past delimiter*/ + } + *p++ = *base++; + } + + *p = 0; + return g = try_template(c,buffer,name); +} + +char* grib_external_template_path(grib_context* c,const char* name) +{ + const char *base = c->grib_samples_path; + char buffer[1024]; + char *p = buffer; + char *g = NULL; + + if(!base) return NULL; + + while(*base) + { + if(*base == ':') + { + *p = 0; + g = try_template_path(c,buffer,name); + if(g) return g; + p = buffer; + base++; + } + *p++ = *base++; + } + + *p = 0; + return g = try_template_path(c,buffer,name); +} diff --git a/src/grib_templates.h b/src/grib_templates.h new file mode 100644 index 000000000..03851aefb --- /dev/null +++ b/src/grib_templates.h @@ -0,0 +1,77 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* This file is automatically generated by ./grib2c.pl, do not edit */ + + +/* + ../templates/GRIB1.grib +*/ + +unsigned char _grib_template_GRIB1[] = { + + 0x47, 0x52, 0x49, 0x42, 0x00, 0x00, 0x6b, 0x01, + 0x00, 0x00, 0x34, 0x80, 0x62, 0x7f, 0xff, 0x80, + 0x81, 0x64, 0x01, 0xf4, 0x06, 0x03, 0x10, 0x0c, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x02, 0x04, 0x01, 0x30, 0x30, 0x30, + 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0xff, 0x00, 0x01, 0x68, 0x00, 0xb5, 0x01, 0x5f, + 0x90, 0x00, 0x00, 0x00, 0x80, 0x81, 0x5f, 0x90, + 0x05, 0x7a, 0x58, 0x03, 0xe8, 0x03, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, + 0x80, 0x02, 0x44, 0xb9, 0x7d, 0x6e, 0x10, 0x37, + 0x37, 0x37, 0x37, + +}; + + + +/* + ../templates/GRIB2.grib +*/ + +unsigned char _grib_template_GRIB2[] = { + + 0x47, 0x52, 0x49, 0x42, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xb8, + 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x62, 0x00, + 0x00, 0x03, 0x00, 0x01, 0x07, 0xd6, 0x03, 0x10, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x02, 0x00, 0x00, 0x00, 0x48, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x01, 0x68, 0x00, 0x00, 0x00, 0xb5, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x05, 0x5d, 0x4a, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x85, 0x5d, 0x4a, 0x80, 0x15, 0x65, 0xe7, + 0xc0, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x22, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0xc3, 0x50, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x15, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, + 0x39, 0x7d, 0x6e, 0x80, 0x02, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0xff, 0x00, + 0x00, 0x00, 0x05, 0x07, 0x37, 0x37, 0x37, 0x37, + +}; + + + +static grib_templates templates[] = { + {"GRIB1", _grib_template_GRIB1, 107, }, + {"GRIB2", _grib_template_GRIB2, 184, }, +}; + diff --git a/src/grib_timer.c b/src/grib_timer.c new file mode 100644 index 000000000..3cfb51003 --- /dev/null +++ b/src/grib_timer.c @@ -0,0 +1,365 @@ +#include "grib_api_internal.h" +#include +#include +#include + +#if GRIB_TIMER + +static grib_timer *timers = NULL; +int false=0; +int true=1; +#define long64 long + +#define ROUND(a) ((long)((a)+0.5)) + +double proc_cpu() +{ + struct rusage rup; + + if(getrusage(RUSAGE_SELF,&rup) != -1) + { + return (rup.ru_utime.tv_sec + rup.ru_utime.tv_usec / 1000000.0 + + rup.ru_stime.tv_sec + rup.ru_stime.tv_usec / 1000000.0); + } + return clock()/(double)CLOCKS_PER_SEC; +} + +static char *timetext(char *pfx,double ds,char *text) +{ + long s = ROUND(ds); + long x = s; + long n; + char sec[20]; + char min[20]; + char hou[20]; + char day[20]; + + *text = *sec = *min = *hou = *day = 0; + if(s) + { + + if((n = x % 60) != 0) sprintf(sec,"%ld sec ",n); + x /= 60; + if((n = x % 60) != 0) sprintf(min,"%ld min ",n); + x /= 60; + if((n = x % 24) != 0) sprintf(hou,"%ld hour ",n); + x /= 24; + if((n = x) != 0) sprintf(day,"%ld day ",n); + + sprintf(text,"%s%s%s%s%s",pfx,day,hou,min,sec); + } + + return text; + +} + +char *timename(double t) +{ + static char buf[80]; + return timetext("",t,buf); +} + +grib_timer *grib_get_timer(grib_context* c,const char* name, const char *statname, int elapsed) +{ + grib_timer *t = timers; + if (!c) c=grib_context_get_default( ); + + while(t) + { + if(strcmp(name,t->name_) == 0) + return t; + t = t->next_; + } + + t = grib_context_malloc_clear(c,sizeof(grib_timer)); + t->name_ = (char*) name; + t->context =c; + t->active_ = false; + t->count_ = 0; + t->timer_ = 0; + t->total_ = 0; + + t->elapsed_ = elapsed; /* Whether to print CPU usage */ + t->cpu_ = 0; + t->total_cpu_ = 0; + + t->statname_ = 0; + if(statname) + t->statname_ = (char*)statname; + + t->next_ = timers; + timers = t; + + return t; +} + +int grib_timer_start(grib_timer* t) +{ + int e = gettimeofday(&t->start_,NULL); + if(e != 0) + grib_context_log(t->context,GRIB_LOG_WARNING|GRIB_LOG_PERROR,"Error starting timer '%s'",t->name_?t->name_:"unnamed"); + t->active_ = true; + t->cpu_ = proc_cpu(); + return e; +} + +int grib_timer_stop(grib_timer* t, long total) +{ + + struct timeval stop, diff; + int e = gettimeofday(&stop,NULL); + double c = proc_cpu(); + + if(e != 0) + grib_context_log(t->context,GRIB_LOG_WARNING|GRIB_LOG_PERROR,"Error stopping timer '%s'",t->name_?t->name_:"unnamed"); + + if(!t->active_) + { + grib_context_log(t->context,GRIB_LOG_WARNING,"Stopping non-started timer '%s'",t->name_?t->name_:"unnamed"); + return 1; + } + + diff.tv_sec = stop.tv_sec - t->start_.tv_sec; + diff.tv_usec = stop.tv_usec - t->start_.tv_usec; + if (diff.tv_usec < 0) + { + diff.tv_sec--; + diff.tv_usec += 1000000; + } + + t->timer_ += (double)diff.tv_sec + ((double)diff.tv_usec / 1000000.); + t->total_ += total; + t->total_cpu_ += (c - t->cpu_); + + t->active_=false; + t->count_++; + + return e; +} + +double grib_timer_value(grib_timer *t) +{ + return t->timer_; +} + +const char *bytename(double bytes) +{ + static char *names[] = { + "","K","M","G","T" }; + double x = bytes; + int n = 0; + static char buf[20]; + + while(x>=1024.0) + { + x /= 1024.0; + n++; + } + + sprintf(buf,"%.2f %s",x,names[n]); + + return buf; +} + +void grib_timer_print(grib_timer* t) +{ + char cpu[1024] = ""; + char *name = t->name_?t->name_:""; + if(t->timer_>=1) { + if(! t->elapsed_ && t->total_cpu_ >= 1.0) + sprintf(cpu,"cpu: %s",timename(t->total_cpu_)); + + if(t->total_ != 0) + { + double rate = (double)t->total_/t->timer_; + char bytes[80]; + sprintf(bytes,"%sbyte(s)",bytename(t->total_)); + grib_context_print(t->context,stdout," %s: %s in %s [%sbyte/sec] %s\n", + name,bytes,timename(t->timer_),bytename(rate),cpu); + } + else { + char* ctimename=timename(t->timer_); + grib_context_print(t->context,stdout," %s: wall: %s%s\n",name,ctimename,cpu); + } +/* + if(t->statname_) + log_statistics(t->statname_,"%ld",(long)t->timer_); + */ + } +} + +void grib_timer_partial_rate(grib_timer *t, double start, long total) +{ + double ptime = t->timer_ - start; + long ptotal = total; + char *name = t->name_?t->name_:""; + if(ptime>=1) + { + double rate = (double)ptotal/ptime; + char bytes[80]; + sprintf(bytes,"%sbyte(s)",bytename(ptotal)); + grib_context_log(t->context,GRIB_LOG_INFO," %s: %s in %s [%sbyte/sec]", + name,bytes,timename(ptime),bytename(rate)); + } +} + +void grib_print_all_timers() +{ + grib_timer *t = timers; + while(t) + { + grib_timer_print(t); + t = t->next_; + } +} + +void grib_reset_all_timers() +{ + grib_timer *t = timers; + while(t) + { + t->count_ = 0; + t->timer_ = 0; + t->active_ = 0; + t->total_ = 0; + t->total_cpu_ = 0; + t = t->next_; + } +} + + +/************************************************* +* Timed functions +**************************************************/ +/* +int timed_fread(char *buffer, int n, int length, FILE *f, grib_timer *t) +{ + int r = 0; + long total = 0; + timer_start(t); + if((r = fread(buffer,n,length,f)) > 0) + total = r*n; + + timer_stop(t,total); + + return r; +} + + +int timed_wind_next(wind* w, FILE *f, char *buffer, long *length, grib_timer *t) +{ + int r = 0; + long64 total = 0; + timer_start(t); + if((r = wind_next(w,f,buffer,length)) == 0) + total = *length; + + timer_stop(t,total); + + return r; +} + +int timed_fwrite(char *buffer, int n, int length, FILE *f, grib_timer *t) +{ + int r = 0; + long64 total = 0; + timer_start(t); + if((r = fwrite(buffer,n,length,f)) > 0) + total = r*n; + timer_stop(t,total); + + return r; +} + +int timed_fclose(FILE *f, grib_timer *t) +{ + int r = 0; + timer_start(t); + r = fclose(f); + timer_stop(t,0); + + return r; +} + +int timed_writetcp(void *data, char *buffer, int n, grib_timer *t) +{ + int r = 0; + long64 total = 0; + timer_start(t); + if((r = writetcp(data,buffer,n)) > 0) + total = r; + timer_stop(t,total); + + return r; +} + +int timed_readtcp(void *data, char *buffer, int n, grib_timer *t) +{ + int r = 0; + long64 total = 0; + timer_start(t); + if((r = readtcp(data,buffer,n)) > 0) + total = r; + timer_stop(t,total); + return r; +} + +int timed_readany(FILE *f, char *buffer, long *length, grib_timer *t) +{ + int e; + long original = *length; + long64 total = 0; + timer_start(t); + if(((e = _readany(f,buffer,length)) == NOERR) || (e == BUF_TO_SMALL)) + total = (e == BUF_TO_SMALL)?original:*length; + timer_stop(t,total); + + if(e != NOERR && e != BUF_TO_SMALL && e != EOF) + { + if(e == NOT_FOUND_7777) + marslog(LOG_WARN,"Group 7777 not found by readany",e); + else + marslog(LOG_WARN,"Error %d returned by readany",e); + } + + return e; +} +*/ + +#else + +grib_timer *grib_get_timer(grib_context* c,const char* name, const char *statname, int elapsed) +{ +if (!c) c=grib_context_get_default(); +grib_context_log(c,GRIB_LOG_FATAL,"grib_get_timer function not available"); +return NULL; +} + +int grib_timer_start(grib_timer* t) +{ +return 0; +} + +int grib_timer_stop(grib_timer* t, long total) +{return 0;} + +double grib_timer_value(grib_timer *t) +{ +return 0; +} + +void grib_timer_print(grib_timer* t) +{return;} + + +void grib_timer_partial_rate(grib_timer *t, double start, long total) +{ return; } + +void grib_print_all_timers() +{return;} + +void grib_reset_all_timers() +{return;} + + +#endif diff --git a/src/grib_timer.c_off b/src/grib_timer.c_off new file mode 100644 index 000000000..3f28bda00 --- /dev/null +++ b/src/grib_timer.c_off @@ -0,0 +1,336 @@ +#include "grib_api_internal.h" +#include +#include +#include + + +static grib_timer *timers = NULL; +int false=0; +int true=1; +#define long64 long + +#define ROUND(a) ((long)((a)+0.5)) + +double proc_cpu() +{ + struct rusage rup; + + if(getrusage(RUSAGE_SELF,&rup) != -1) + { + return (rup.ru_utime.tv_sec + rup.ru_utime.tv_usec / 1000000.0 + + rup.ru_stime.tv_sec + rup.ru_stime.tv_usec / 1000000.0); + } + return clock()/(double)CLOCKS_PER_SEC; +} + +static char *timetext(char *pfx,double ds,char *text) +{ + long s = ROUND(ds); + long x = s; + long n; + char sec[20]; + char min[20]; + char hou[20]; + char day[20]; + + *text = *sec = *min = *hou = *day = 0; + if(s) + { + + if((n = x % 60) != 0) sprintf(sec,"%ld sec ",n); + x /= 60; + if((n = x % 60) != 0) sprintf(min,"%ld min ",n); + x /= 60; + if((n = x % 24) != 0) sprintf(hou,"%ld hour ",n); + x /= 24; + if((n = x) != 0) sprintf(day,"%ld day ",n); + + sprintf(text,"%s%s%s%s%s",pfx,day,hou,min,sec); + } + + return text; + +} + +char *timename(double t) +{ + static char buf[80]; + return timetext("",t,buf); +} + +grib_timer *grib_get_timer(grib_context* c,const char* name, const char *statname, int elapsed) +{ + grib_timer *t = timers; + if (!c) c=grib_context_get_default( ); + + while(t) + { + if(strcmp(name,t->name_) == 0) + return t; + t = t->next_; + } + + t = grib_context_malloc_clear(c,sizeof(grib_timer)); + t->name_ = (char*) name; + t->context =c; + t->active_ = false; + t->count_ = 0; + t->timer_ = 0; + t->total_ = 0; + + t->elapsed_ = elapsed; /* Whether to print CPU usage */ + t->cpu_ = 0; + t->total_cpu_ = 0; + + t->statname_ = 0; + if(statname) + t->statname_ = (char*)statname; + + t->next_ = timers; + timers = t; + + return t; +} + +int grib_timer_start(grib_timer* t) +{ + +#ifndef NOTIMER + int e = gettimeofday(&t->start_,NULL); + if(e != 0) + grib_context_log(t->context,GRIB_LOG_WARNING|GRIB_LOG_PERROR,"Error starting timer '%s'",t->name_?t->name_:"unnamed"); + t->active_ = true; + t->cpu_ = proc_cpu(); + return e; +#else + return 0; +#endif +} + +int grib_timer_stop(grib_timer* t, long total) +{ + +#ifndef NOTIMER + struct timeval stop, diff; + int e = gettimeofday(&stop,NULL); + double c = proc_cpu(); + + if(e != 0) + grib_context_log(t->context,GRIB_LOG_WARNING|GRIB_LOG_PERROR,"Error stopping timer '%s'",t->name_?t->name_:"unnamed"); + + if(!t->active_) + { + grib_context_log(t->context,GRIB_LOG_WARNING,"Stopping non-started timer '%s'",t->name_?t->name_:"unnamed"); + return 1; + } + + diff.tv_sec = stop.tv_sec - t->start_.tv_sec; + diff.tv_usec = stop.tv_usec - t->start_.tv_usec; + if (diff.tv_usec < 0) + { + diff.tv_sec--; + diff.tv_usec += 1000000; + } + + t->timer_ += (double)diff.tv_sec + ((double)diff.tv_usec / 1000000.); + t->total_ += total; + t->total_cpu_ += (c - t->cpu_); + + t->active_=false; + t->count_++; + + return e; + +#else + return 0; +#endif +} + +double grib_timer_value(grib_timer *t) +{ + return t->timer_; +} + +const char *bytename(double bytes) +{ + static char *names[] = { + "","K","M","G","T" }; + double x = bytes; + int n = 0; + static char buf[20]; + + while(x>=1024.0) + { + x /= 1024.0; + n++; + } + + sprintf(buf,"%.2f %s",x,names[n]); + + return buf; +} + +void grib_timer_print(grib_timer* t) +{ + char cpu[1024] = ""; + char *name = t->name_?t->name_:""; + if(t->timer_>=1) { + if(! t->elapsed_ && t->total_cpu_ >= 1.0) + sprintf(cpu,"cpu: %s",timename(t->total_cpu_)); + + if(t->total_ != 0) + { + double rate = (double)t->total_/t->timer_; + char bytes[80]; + sprintf(bytes,"%sbyte(s)",bytename(t->total_)); + grib_context_print(t->context,stdout," %s: %s in %s [%sbyte/sec] %s\n", + name,bytes,timename(t->timer_),bytename(rate),cpu); + } + else { + char* ctimename=timename(t->timer_); + grib_context_print(t->context,stdout," %s: wall: %s%s\n",name,ctimename,cpu); + } +/* + if(t->statname_) + log_statistics(t->statname_,"%ld",(long)t->timer_); + */ + } +} + +void grib_timer_partial_rate(grib_timer *t, double start, long total) +{ + double ptime = t->timer_ - start; + long ptotal = total; + char *name = t->name_?t->name_:""; + if(ptime>=1) + { + double rate = (double)ptotal/ptime; + char bytes[80]; + sprintf(bytes,"%sbyte(s)",bytename(ptotal)); + grib_context_log(t->context,GRIB_LOG_INFO," %s: %s in %s [%sbyte/sec]", + name,bytes,timename(ptime),bytename(rate)); + } +} + +void grib_print_all_timers() +{ + grib_timer *t = timers; + while(t) + { + grib_timer_print(t); + t = t->next_; + } +} + +void grib_reset_all_timers() +{ + grib_timer *t = timers; + while(t) + { + t->count_ = 0; + t->timer_ = 0; + t->active_ = 0; + t->total_ = 0; + t->total_cpu_ = 0; + t = t->next_; + } +} + + +/************************************************* +* Timed functions +**************************************************/ +/* +int timed_fread(char *buffer, int n, int length, FILE *f, grib_timer *t) +{ + int r = 0; + long total = 0; + timer_start(t); + if((r = fread(buffer,n,length,f)) > 0) + total = r*n; + + timer_stop(t,total); + + return r; +} + + +int timed_wind_next(wind* w, FILE *f, char *buffer, long *length, grib_timer *t) +{ + int r = 0; + long64 total = 0; + timer_start(t); + if((r = wind_next(w,f,buffer,length)) == 0) + total = *length; + + timer_stop(t,total); + + return r; +} + +int timed_fwrite(char *buffer, int n, int length, FILE *f, grib_timer *t) +{ + int r = 0; + long64 total = 0; + timer_start(t); + if((r = fwrite(buffer,n,length,f)) > 0) + total = r*n; + timer_stop(t,total); + + return r; +} + +int timed_fclose(FILE *f, grib_timer *t) +{ + int r = 0; + timer_start(t); + r = fclose(f); + timer_stop(t,0); + + return r; +} + +int timed_writetcp(void *data, char *buffer, int n, grib_timer *t) +{ + int r = 0; + long64 total = 0; + timer_start(t); + if((r = writetcp(data,buffer,n)) > 0) + total = r; + timer_stop(t,total); + + return r; +} + +int timed_readtcp(void *data, char *buffer, int n, grib_timer *t) +{ + int r = 0; + long64 total = 0; + timer_start(t); + if((r = readtcp(data,buffer,n)) > 0) + total = r; + timer_stop(t,total); + return r; +} + +int timed_readany(FILE *f, char *buffer, long *length, grib_timer *t) +{ + int e; + long original = *length; + long64 total = 0; + timer_start(t); + if(((e = _readany(f,buffer,length)) == NOERR) || (e == BUF_TO_SMALL)) + total = (e == BUF_TO_SMALL)?original:*length; + timer_stop(t,total); + + if(e != NOERR && e != BUF_TO_SMALL && e != EOF) + { + if(e == NOT_FOUND_7777) + marslog(LOG_WARN,"Group 7777 not found by readany",e); + else + marslog(LOG_WARN,"Error %d returned by readany",e); + } + + return e; +} +*/ diff --git a/src/grib_trie.c b/src/grib_trie.c new file mode 100755 index 000000000..9389aed70 --- /dev/null +++ b/src/grib_trie.c @@ -0,0 +1,406 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* Note: all non-alpha are mapped to 0 */ +static int mapping[] = { +0, /* 00 */ +0, /* 01 */ +0, /* 02 */ +0, /* 03 */ +0, /* 04 */ +0, /* 05 */ +0, /* 06 */ +0, /* 07 */ +0, /* 08 */ +0, /* 09 */ +0, /* 0a */ +0, /* 0b */ +0, /* 0c */ +0, /* 0d */ +0, /* 0e */ +0, /* 0f */ +0, /* 10 */ +0, /* 11 */ +0, /* 12 */ +0, /* 13 */ +0, /* 14 */ +0, /* 15 */ +0, /* 16 */ +0, /* 17 */ +0, /* 18 */ +0, /* 19 */ +0, /* 1a */ +0, /* 1b */ +0, /* 1c */ +0, /* 1d */ +0, /* 1e */ +0, /* 1f */ +0, /* 20 */ +0, /* 21 */ +0, /* 22 */ +0, /* 23 */ +0, /* 24 */ +0, /* 25 */ +0, /* 26 */ +0, /* 27 */ +0, /* 28 */ +0, /* 29 */ +0, /* 2a */ +0, /* 2b */ +0, /* 2c */ +0, /* 2d */ +0, /* 2e */ +0, /* 2f */ +1, /* 0 */ +2, /* 1 */ +3, /* 2 */ +4, /* 3 */ +5, /* 4 */ +6, /* 5 */ +7, /* 6 */ +8, /* 7 */ +9, /* 8 */ +10, /* 9 */ +0, /* 3a */ +0, /* 3b */ +0, /* 3c */ +0, /* 3d */ +0, /* 3e */ +0, /* 3f */ +0, /* 40 */ +11, /* A */ +12, /* B */ +13, /* C */ +14, /* D */ +15, /* E */ +16, /* F */ +17, /* G */ +18, /* H */ +19, /* I */ +20, /* J */ +21, /* K */ +22, /* L */ +23, /* M */ +24, /* N */ +25, /* O */ +26, /* P */ +27, /* Q */ +28, /* R */ +29, /* S */ +30, /* T */ +31, /* U */ +32, /* V */ +33, /* W */ +34, /* X */ +35, /* Y */ +36, /* Z */ +0, /* 5b */ +0, /* 5c */ +0, /* 5d */ +0, /* 5e */ +37, /* _ */ +0, /* 60 */ +11, /* a */ +12, /* b */ +13, /* c */ +14, /* d */ +15, /* e */ +16, /* f */ +17, /* g */ +18, /* h */ +19, /* i */ +20, /* j */ +21, /* k */ +22, /* l */ +23, /* m */ +24, /* n */ +25, /* o */ +26, /* p */ +27, /* q */ +28, /* r */ +29, /* s */ +30, /* t */ +31, /* u */ +32, /* v */ +33, /* w */ +34, /* x */ +35, /* y */ +36, /* z */ +0, /* 7b */ +0, /* 7c */ +0, /* 7d */ +0, /* 7e */ +0, /* 7f */ +0, /* 80 */ +0, /* 81 */ +0, /* 82 */ +0, /* 83 */ +0, /* 84 */ +0, /* 85 */ +0, /* 86 */ +0, /* 87 */ +0, /* 88 */ +0, /* 89 */ +0, /* 8a */ +0, /* 8b */ +0, /* 8c */ +0, /* 8d */ +0, /* 8e */ +0, /* 8f */ +0, /* 90 */ +0, /* 91 */ +0, /* 92 */ +0, /* 93 */ +0, /* 94 */ +0, /* 95 */ +0, /* 96 */ +0, /* 97 */ +0, /* 98 */ +0, /* 99 */ +0, /* 9a */ +0, /* 9b */ +0, /* 9c */ +0, /* 9d */ +0, /* 9e */ +0, /* 9f */ +0, /* a0 */ +0, /* a1 */ +0, /* a2 */ +0, /* a3 */ +0, /* a4 */ +0, /* a5 */ +0, /* a6 */ +0, /* a7 */ +0, /* a8 */ +0, /* a9 */ +0, /* aa */ +0, /* ab */ +0, /* ac */ +0, /* ad */ +0, /* ae */ +0, /* af */ +0, /* b0 */ +0, /* b1 */ +0, /* b2 */ +0, /* b3 */ +0, /* b4 */ +0, /* b5 */ +0, /* b6 */ +0, /* b7 */ +0, /* b8 */ +0, /* b9 */ +0, /* ba */ +0, /* bb */ +0, /* bc */ +0, /* bd */ +0, /* be */ +0, /* bf */ +0, /* c0 */ +0, /* c1 */ +0, /* c2 */ +0, /* c3 */ +0, /* c4 */ +0, /* c5 */ +0, /* c6 */ +0, /* c7 */ +0, /* c8 */ +0, /* c9 */ +0, /* ca */ +0, /* cb */ +0, /* cc */ +0, /* cd */ +0, /* ce */ +0, /* cf */ +0, /* d0 */ +0, /* d1 */ +0, /* d2 */ +0, /* d3 */ +0, /* d4 */ +0, /* d5 */ +0, /* d6 */ +0, /* d7 */ +0, /* d8 */ +0, /* d9 */ +0, /* da */ +0, /* db */ +0, /* dc */ +0, /* dd */ +0, /* de */ +0, /* df */ +0, /* e0 */ +0, /* e1 */ +0, /* e2 */ +0, /* e3 */ +0, /* e4 */ +0, /* e5 */ +0, /* e6 */ +0, /* e7 */ +0, /* e8 */ +0, /* e9 */ +0, /* ea */ +0, /* eb */ +0, /* ec */ +0, /* ed */ +0, /* ee */ +0, /* ef */ +0, /* f0 */ +0, /* f1 */ +0, /* f2 */ +0, /* f3 */ +0, /* f4 */ +0, /* f5 */ +0, /* f6 */ +0, /* f7 */ +0, /* f8 */ +0, /* f9 */ +0, /* fa */ +0, /* fb */ +0, /* fc */ +0, /* fd */ +0, /* fe */ +0, /* ff */ +}; + +#define SIZE 38 + +struct grib_trie { + grib_trie* next[SIZE]; + grib_context *context; + int first; + int last; + void* data; +}; + +grib_trie *grib_trie_new(grib_context* c) { +#ifdef RECYCLE_TRIE + grib_trie* t = grib_context_malloc_clear_persistent(c,sizeof(grib_trie)); +#else + grib_trie* t = grib_context_malloc_clear(c,sizeof(grib_trie)); +#endif + t->context = c; + t->first=SIZE; + t->last=-1; + return t; +} + +void grib_trie_delete(grib_trie *t) { + if(t) { + int i; + for(i = t->first; i <= t->last; i++) + if (t->next[i]) + grib_trie_delete(t->next[i]); +#ifdef RECYCLE_TRIE + grib_context_free_persistent(t->context,t); +#else + grib_context_free(t->context,t); +#endif + } +} + +void grib_trie_clear(grib_trie *t) { + if(t) { + int i; + t->data=NULL; + for(i = t->first; i <= t->last; i++) + if (t->next[i]) + grib_trie_clear(t->next[i]); + } +} + +void* grib_trie_insert(grib_trie* t,const char* key,void* data) +{ + grib_trie *last = t; + const char *k = key; + void* old = NULL; + + while(*k && t) { + last = t; + t = t->next[mapping[(int)*k]]; + if(t) k++; + } + + if(*k == 0) { + old = t->data; + t->data=data; + } else { + t = last; + while(*k) { + int j = mapping[(int)*k++]; + if(j < t->first) t->first = j; + if(j > t->last) t->last = j; + t = t->next[j] =grib_trie_new(t->context); + } + old = t->data; + t->data=data; + } + return data == old ? NULL : old; +} + +void* grib_trie_insert_no_replace(grib_trie* t,const char* key,void* data) +{ + grib_trie *last = t; + const char *k = key; + + while(*k && t) { + last = t; + t = t->next[mapping[(int)*k]]; + if(t) k++; + } + + if(*k != 0) { + t = last; + while(*k) { + int j = mapping[(int)*k++]; + if(j < t->first) t->first = j; + if(j > t->last) t->last = j; + t = t->next[j] =grib_trie_new(t->context); + } + } + + if (!t->data) t->data=data; + + return t->data; +} + +void *grib_trie_get(grib_trie* t,const char* key) +{ + const char *k = key; + + while(*k && t) + t = t->next[mapping[(int)*k++]]; + + if(*k == 0 && t != NULL && t->data!=NULL) + return t->data; + + return NULL; +} + +/* +To be rewritten. +void grib_trie_remove(grib_trie* trie,const char* key) +{ + const char *k = key; + grib_trie_internal *t=trie->trie; + + grib_context *c = trie->context; + + while(*k && t) + t = t->next[mapping[(int)*k++]]; + + if(*k == 0 && t != NULL) + t->data->data = NULL; + else + grib_context_log(c,GRIB_LOG_WARNING,"grib_trie_remove: key not found [%s]",key); + +} +*/ + diff --git a/src/grib_util.c b/src/grib_util.c new file mode 100644 index 000000000..882dc6183 --- /dev/null +++ b/src/grib_util.c @@ -0,0 +1,1237 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/*************************************************************************** + * Enrico Fucile + * * + ***************************************************************************/ +#include "grib_api_internal.h" + + +static void set_total_length(unsigned char* buffer,long *section_length,long *section_offset,int edition,size_t totalLength) { + long off; + switch (edition) { + case 1: + if(totalLength < 0x800000 ) { + off=32; + grib_encode_unsigned_long(buffer, (unsigned long)totalLength , &off, 24); + } else { + long s4len,t120; + totalLength -= 4; + t120 = (totalLength+119)/120; + s4len = t120*120 - totalLength; + totalLength = 0x800000 | t120; + off=32; + grib_encode_unsigned_long(buffer, (unsigned long)totalLength , &off, 24); + off=section_offset[4]*8; + grib_encode_unsigned_long(buffer, (unsigned long)s4len , &off, 24); + } + break; + case 2: + off=64; + grib_encode_unsigned_long(buffer, (unsigned long)totalLength , &off, 64); + break; + } + +} + +static grib_handle* grib_sections_copy_internal(grib_handle* hfrom,grib_handle* hto,int sections[],int *err) { + int i; + size_t totalLength=0; + unsigned char* buffer; + unsigned char *p; + long edition=0; + long section_length[MAX_NUM_SECTIONS]={0,}; + long section_offset[MAX_NUM_SECTIONS]={0,}; + long off=0; + grib_handle* h; + char section_length_str[]="section0Length"; + char section_offset_str[]="offsetSection0"; + long length,offset; + + *err=grib_get_long(hfrom,"edition",&edition); + if (*err) return NULL; + + for (i=0;i<=hfrom->sections_count;i++) { + + if (sections[i]) {h=hfrom;} + else {h=hto;} + + sprintf(section_length_str,"section%dLength",i); + if (grib_get_long(h,section_length_str,&length)) continue; + section_length[i]=length; + + sprintf(section_offset_str,"offsetSection%d",i); + if (grib_get_long(h,section_offset_str,&offset)) continue; + section_offset[i]=offset; + + totalLength+=section_length[i]; + + } + + buffer=grib_context_malloc_clear(hfrom->context,totalLength*sizeof(char)); + + p=buffer; + off=0; + for (i=0;i<=hfrom->sections_count;i++) { + grib_handle* h; + if (sections[i]) h=hfrom; + else h=hto; + p=memcpy(p,h->buffer->data+section_offset[i],section_length[i]); + section_offset[i]=off; + off+=section_length[i]; + p+=section_length[i]; + } + + /* copy section 3 present flag*/ + if (edition==1) { + const void* buffer_to=NULL; + size_t size_to=0; + grib_get_message(hto,&buffer_to,&size_to); + memcpy(buffer+15,((unsigned char*)buffer_to)+15,1); + } + + set_total_length(buffer,section_length,section_offset,edition,totalLength); + + h=grib_handle_new_from_message(hfrom->context,buffer,totalLength); + + /*to allow free of buffer*/ + h->buffer->property = GRIB_MY_BUFFER; + + switch (edition) { + case 1: + if (sections[1] && sections[2]) break; + + if (sections[1]) { + long PVPresent; + grib_get_long(hfrom,"PVPresent",&PVPresent); + if (PVPresent) { + double *pv; + long numberOfVerticalCoordinateValues; + size_t size=0; + + grib_get_long(hfrom,"numberOfVerticalCoordinateValues",&numberOfVerticalCoordinateValues); + size=numberOfVerticalCoordinateValues; + pv=grib_context_malloc_clear(hfrom->context,numberOfVerticalCoordinateValues*sizeof(double)); + grib_get_double_array(hfrom,"pv",pv,&size); + grib_set_long(h,"PVPresent",1); + grib_set_double_array(h,"pv",pv,size); + + grib_context_free(hfrom->context,pv); + + } else { + grib_set_long(h,"PVPresent",0); + } + } + if (sections[2]) { + long PVPresent; + grib_get_long(hto,"PVPresent",&PVPresent); + if (PVPresent) { + double *pv; + long numberOfVerticalCoordinateValues; + size_t size=0; + + grib_get_long(hto,"numberOfVerticalCoordinateValues",&numberOfVerticalCoordinateValues); + size=numberOfVerticalCoordinateValues; + pv=grib_context_malloc_clear(hto->context,numberOfVerticalCoordinateValues*sizeof(double)); + grib_get_double_array(hto,"pv",pv,&size); + grib_set_long(h,"PVPresent",1); + grib_set_double_array(h,"pv",pv,size); + + grib_context_free(hto->context,pv); + + } else { + grib_set_long(h,"PVPresent",0); + } + } + break; + case 2: + if (sections[1]) { + long discipline; + grib_get_long(hfrom,"discipline",&discipline); + grib_set_long(h,"discipline",discipline); + } + break; + } + + return h; +} + +grib_handle* grib_util_sections_copy(grib_handle* hfrom,grib_handle* hto,int what,int *err) { + long edition_from=0; + long edition_to=0; + long localDefinitionNumber=-1; + int sections_to_copy[MAX_NUM_SECTIONS]={0,}; + + *err=grib_get_long(hfrom,"edition",&edition_from); + if (*err) return NULL; + *err=grib_get_long(hto,"edition",&edition_to); + if (*err) return NULL; + + if (edition_to != 1 && edition_to != 2 ) { + *err=GRIB_NOT_IMPLEMENTED; + return NULL; + } + + if (edition_from!=edition_to) { + *err=GRIB_DIFFERENT_EDITION; + return NULL; + } + + if (what & GRIB_SECTION_GRID) { + switch (edition_from) { + case 1: + sections_to_copy[2]=1; + break; + case 2: + sections_to_copy[3]=1; + break; + } + } + + if (what & GRIB_SECTION_DATA) { + switch (edition_from) { + case 1: + sections_to_copy[3]=1; + sections_to_copy[4]=1; + break; + case 2: + sections_to_copy[5]=1; + sections_to_copy[6]=1; + sections_to_copy[7]=1; + break; + } + } + + if (what & GRIB_SECTION_LOCAL) { + switch (edition_from) { + case 1: + sections_to_copy[1]=1; + break; + case 2: + sections_to_copy[2]=1; + break; + } + } + + if (what & GRIB_SECTION_PRODUCT) { + switch (edition_from) { + case 1: + grib_get_long(hfrom,"localDefinitionNumber",&localDefinitionNumber); + if (localDefinitionNumber==13) { + sections_to_copy[4]=1; + } + sections_to_copy[1]=1; + break; + case 2: + sections_to_copy[1]=1; + sections_to_copy[4]=1; + break; + } + } + + if (what & GRIB_SECTION_BITMAP) { + switch (edition_from) { + case 1: + sections_to_copy[3]=1; + break; + case 2: + sections_to_copy[6]=1; + break; + } + } + + return grib_sections_copy_internal(hfrom,hto,sections_to_copy,err); + +} + +static grib_trie* init_list(const char* name); +static grib_trie* param_id_list = NULL; +static grib_trie* mars_param_list = NULL; +/* TODO thread safe */ +grib_string_list* grib_util_get_param_id(const char* mars_param) { + if (!mars_param_list && (mars_param_list=init_list("mars_param.table"))==NULL) return NULL; + return grib_trie_get(mars_param_list,mars_param); +} + +grib_string_list* grib_util_get_mars_param(const char* param_id) { + if (!param_id_list && (param_id_list=init_list("param_id.table"))==NULL) return NULL; + return grib_trie_get(param_id_list,param_id); +} + +static grib_trie* init_list(const char* name) { + char *full_path=0; + FILE* fh; + char s[100]; + char param[100]; + grib_string_list* list=0; + grib_string_list* next=0; + grib_trie* trie_list; + grib_context* c=grib_context_get_default(); + full_path=grib_context_full_path(c,name); + + fh=fopen(full_path,"r"); + if (!fh) { + grib_context_log(c,GRIB_LOG_PERROR,"unable to read %s",full_path); + return NULL; + } + + list=grib_context_malloc_clear(c,sizeof(grib_string_list)); + trie_list=grib_trie_new(c); + if (fscanf(fh,"%s",param)==EOF) return NULL; + while (fscanf(fh,"%s",s)!=EOF) { + if (!strcmp(s,"|")) { + grib_trie_insert(trie_list, param,list); + if (fscanf(fh,"%s",param)==EOF) return trie_list; + list=NULL; + } else { + if (!list) { + list=grib_context_malloc_clear(c,sizeof(grib_string_list)); + list->value=grib_context_strdup(c,s); + } else { + next=list; + while(next->next) next=next->next; + next->next=grib_context_malloc_clear(c,sizeof(grib_string_list)); + next->next->value=grib_context_strdup(c,s); + } + } + } + + fclose(fh); + + return 0; +} + +static void print_values(grib_context* c,const grib_util_grid_spec* spec,const double* data_values,size_t data_values_count,const grib_values *values,int count) { + int i; + printf("GRIB_API DEBUG grib_util grib_set_values: setting %d values \n",count); + + for(i = 0; i < count ; i++) + { + switch(values[i].type) + { + case GRIB_TYPE_LONG: printf("GRIB_API DEBUG grib_util: => %s = %ld;\n" + ,values[i].name,(long)values[i].long_value); break; + case GRIB_TYPE_DOUBLE: printf("GRIB_API DEBUG grib_util: => %s = %.16e;\n" + ,values[i].name,values[i].double_value); break; + case GRIB_TYPE_STRING: printf("GRIB_API DEBUG grib_util: => %s = \"%s\";\n" + ,values[i].name,values[i].string_value); break; + } + } + + if(spec->bitmapPresent) { + int missing = 0; + double min = 1e100; + for(i = 0; i < data_values_count ; i++) + { + double d = data_values[i] - spec->missingValue; + if(d < 0) d = -d; + + if(d < min) { + min = d; + } + + if(data_values[i] == spec->missingValue) + missing++; + + + } + + } +} + +#define ISECTION_2 3000 +#define ISECTION_4 512 + +grib_handle* grib_util_set_spec(grib_handle* h, + const grib_util_grid_spec *spec, + const grib_util_packing_spec *packing_spec, + int flags, + const double* data_values, + size_t data_values_count, + int* err) +{ + +#define SET_LONG_VALUE(n,v) do { Assert(count<1024); values[count].name = n; values[count].type = GRIB_TYPE_LONG; values[count].long_value = v; count++; } while(0) +#define SET_DOUBLE_VALUE(n,v) do { Assert(count<1024); values[count].name = n; values[count].type = GRIB_TYPE_DOUBLE; values[count].double_value = v; count++; } while(0) +#define SET_STRING_VALUE(n,v) do { Assert(count<1024); values[count].name = n; values[count].type = GRIB_TYPE_STRING; values[count].string_value = v; count++; } while(0) + +#define COPY_SPEC_LONG(x) do { Assert(count<1024); values[count].name = #x; values[count].type = GRIB_TYPE_LONG; values[count].long_value = spec->x; count++; } while(0) +#define COPY_SPEC_DOUBLE(x) do { Assert(count<1024); values[count].name = #x; values[count].type = GRIB_TYPE_DOUBLE; values[count].double_value = spec->x; count++; } while(0) + + grib_values values[1024]={{0,},}; + size_t count = 0; + int i; + long editionNumber; + grib_handle* outh = NULL; + grib_handle* tmp = NULL; + const char* grid_type = NULL; + char name[1024]; + char input_grid_type[100]; + char input_packing_type[100]; + long input_bits_per_value=0; + long input_decimal_scale_factor=0; + size_t len=100; + size_t input_grid_type_len=100; + double laplacianOperator; + int packingTypeIsSet=0; + int setSecondOrder=0; + size_t slen=17; + + static grib_util_packing_spec default_packing_spec = {0, }; + + if(!packing_spec) { + packing_spec = &default_packing_spec; + } + + /* Get edition number from input handle */ + if((*err = grib_get_long(h,"edition",&editionNumber)) != 0) + { + grib_context* c=grib_context_get_default(); + if (c->write_on_fail) + grib_write_message(h,"error.grib","w"); + return NULL; + } + + if (packing_spec->deleteLocalDefinition) { + /* TODO: not working for grib2 */ + SET_LONG_VALUE("deleteLocalDefinition",1); + } + + len=100; + grib_get_string(h,"packingType",input_packing_type,&len); + grib_get_long(h,"bitsPerValue",&input_bits_per_value); + grib_get_long(h,"decimalScaleFactor",&input_decimal_scale_factor); + if (h->context->debug==-1) { + printf("GRIB_API DEBUG grib_util: input_packing_type = %s\n",input_packing_type); + printf("GRIB_API DEBUG grib_util: input_bits_per_value = %ld\n",input_bits_per_value); + printf("GRIB_API DEBUG grib_util: input_decimal_scale_factor = %ld\n",input_decimal_scale_factor); + } + + if (flags & GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING) { + if (packing_spec->packing == GRIB_UTIL_PACKING_USE_PROVIDED && + strcmp(input_packing_type,"grid_simple_matrix")) { + switch (packing_spec->packing_type) { + case GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX: + if (strcmp(input_packing_type,"spectral_complex") && !strcmp(input_packing_type,"spectral_simple")) + SET_STRING_VALUE("packingType","spectral_complex"); + break; + case GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE: + if (strcmp(input_packing_type,"spectral_simple") && !strcmp(input_packing_type,"spectral_complex")) + SET_STRING_VALUE("packingType","spectral_simple"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE: + if (strcmp(input_packing_type,"grid_simple") && !strcmp(input_packing_type,"grid_complex") ) + SET_STRING_VALUE("packingType","grid_simple"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE_MATRIX: + SET_STRING_VALUE("packingType","grid_simple_matrix"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_COMPLEX: + if (strcmp(input_packing_type,"grid_complex") && !strcmp(input_packing_type,"grid_simple")) + SET_STRING_VALUE("packingType","grid_complex"); + break; + case GRIB_UTIL_PACKING_TYPE_JPEG: + if (strcmp(input_packing_type,"grid_jpeg") && !strcmp(input_packing_type,"grid_simple")) + SET_STRING_VALUE("packingType","grid_jpeg"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER: + /* we delay the set of grid_second_order because we don't want + to do it on a field with bitsPerValue=0 */ + setSecondOrder=1; + break; + default : + printf("invalid packing_spec->packing_type = %ld\n",(long)packing_spec->packing_type); + abort(); + } + packingTypeIsSet=1; + } + switch(packing_spec->accuracy) { + + case GRIB_UTIL_ACCURACY_SAME_BITS_PER_VALUES_AS_INPUT: + break; + + case GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES: + if (input_bits_per_value!=packing_spec->bitsPerValue) + SET_LONG_VALUE("bitsPerValue", packing_spec->bitsPerValue); + break; + + case GRIB_UTIL_ACCURACY_SAME_DECIMAL_SCALE_FACTOR_AS_INPUT: + break; + + case GRIB_UTIL_ACCURACY_USE_PROVIDED_DECIMAL_SCALE_FACTOR: + if (input_decimal_scale_factor!=packing_spec->decimalScaleFactor) + SET_LONG_VALUE("decimalScaleFactor", packing_spec->decimalScaleFactor); + break; + + default: + printf("invalid packing_spec->accuracy = %ld\n",(long)packing_spec->accuracy); + abort(); + } + + /*nothing to be changed*/ + if (count==0) { + *err = -1; + return h; + } + + if (h->context->debug==-1) + print_values(h->context,spec,data_values,data_values_count,values,count); + + if((*err = grib_set_values(h,values,count)) != 0) + { + fprintf(stderr,"GRIB_UTIL_SET_SPEC: Cannot set values %s\n",grib_get_error_message(*err)); + + for(i = 0; i < count; i++) + if(values[i].error) + fprintf(stderr," %s %s\n",values[i].name,grib_get_error_message(values[i].error)); + goto cleanup; + } + if (h->context->debug==-1) { + int j=0; + printf("GRIB_API DEBUG grib_util: grib_set_double_array\n"); + for (j=0;j<20;j++) printf("GRIB_API DEBUG grib_util %g\n",data_values[j]); + printf("GRIB_API DEBUG grib_util: data_values_count=%d \n",(int)data_values_count); + } + + if((*err = grib_set_double_array(h,"values",data_values,data_values_count)) != 0) + { + goto cleanup; + } + if (h->context->debug==-1) + printf("GRIB_API DEBUG grib_util: done grib_set_double_array \n"); + + + /* convert to second_order if not constant field */ + if (setSecondOrder ) { + size_t slen=17; + int ii=0; + int constant=1; + double missingValue=0; + double value=missingValue; + + grib_get_double(h,"missingValue",&missingValue); + for (ii=0;ii65534 && h->context->no_spd ) { + slen=24; + grib_set_string(h,"packingType","grid_second_order_no_SPD",&slen); + grib_handle_delete(htmp); + } else { + grib_handle_delete(h); + h=htmp; + } + } else { + slen=17; + grib_set_string(h,"packingType","grid_second_order",&slen); + grib_set_double_array(h,"values",data_values,data_values_count); + } + } else { + if (h->context->gribex_mode_on) { + h->context->gribex_mode_on=0; + grib_set_double_array(h,"values",data_values,data_values_count); + h->context->gribex_mode_on=1; + } + } + } + + return h; + } + + + switch(spec->grid_type) { + + case GRIB_UTIL_GRID_SPEC_REGULAR_LL: + grid_type = "regular_ll"; + break; + + case GRIB_UTIL_GRID_SPEC_ROTATED_LL: + grid_type = "rotated_ll"; + break; + + case GRIB_UTIL_GRID_SPEC_REGULAR_GG: + grid_type = "regular_gg"; + break; + + case GRIB_UTIL_GRID_SPEC_ROTATED_GG: + grid_type = "rotated_gg"; + break; + + case GRIB_UTIL_GRID_SPEC_REDUCED_LL: + grid_type = "reduced_ll"; + break; + + case GRIB_UTIL_GRID_SPEC_POLAR_STEREOGRAPHIC: + grid_type = "polar_stereographic"; + break; + + case GRIB_UTIL_GRID_SPEC_REDUCED_GG: + grid_type = "reduced_gg"; + break; + + case GRIB_UTIL_GRID_SPEC_SH: + grid_type = "sh"; + break; + + default: + *err = GRIB_NOT_IMPLEMENTED; + return NULL; + + } + + SET_STRING_VALUE("gridType", grid_type); + + /* The "pl" is given from the template, but "section_copy" will take care of setting the right headers */ + + { + char levtype[80]; + size_t n = sizeof(levtype); + Assert(grib_get_string(h,"levelType",levtype,&n) == 0); + switch (spec->grid_type) { + case GRIB_UTIL_GRID_SPEC_REDUCED_GG: + sprintf(name, "%s_pl_%ld_grib%ld", grid_type,spec->N, editionNumber); + break; + default : + sprintf(name, "%s_pl_grib%ld", grid_type, editionNumber); + } + } + + /* TODO: recycle tmp handle */ + tmp = grib_handle_new_from_samples(NULL, name); + if(!tmp) { + *err = GRIB_INVALID_FILE; + return NULL; + } + + /* Set grid */ + switch(spec->grid_type) { + case GRIB_UTIL_GRID_SPEC_REGULAR_LL: + case GRIB_UTIL_GRID_SPEC_ROTATED_LL: + + COPY_SPEC_LONG (bitmapPresent); + if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); + + SET_LONG_VALUE ("ijDirectionIncrementGiven", 1); + + /* default iScansNegatively=0 jScansPositively=0 is ok */ + COPY_SPEC_LONG(iScansNegatively); + COPY_SPEC_LONG(jScansPositively); + + COPY_SPEC_LONG(Ni); + COPY_SPEC_LONG(Nj); + + COPY_SPEC_DOUBLE(iDirectionIncrementInDegrees); + COPY_SPEC_DOUBLE(jDirectionIncrementInDegrees); + + COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees); + COPY_SPEC_DOUBLE(longitudeOfLastGridPointInDegrees); + + COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees); + COPY_SPEC_DOUBLE(latitudeOfLastGridPointInDegrees); + + break; + + case GRIB_UTIL_GRID_SPEC_REGULAR_GG: + case GRIB_UTIL_GRID_SPEC_ROTATED_GG: + + COPY_SPEC_LONG (bitmapPresent); + if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); + SET_LONG_VALUE("ijDirectionIncrementGiven", 1); + + /* TODO: add Assert */ + + COPY_SPEC_LONG(Ni); + COPY_SPEC_DOUBLE(iDirectionIncrementInDegrees); + + COPY_SPEC_LONG(Nj); + COPY_SPEC_LONG(N); + + /* TODO: Compute here ... */ + COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees); + COPY_SPEC_DOUBLE(longitudeOfLastGridPointInDegrees); + + COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees); + COPY_SPEC_DOUBLE(latitudeOfLastGridPointInDegrees); + break; + + + case GRIB_UTIL_GRID_SPEC_REDUCED_LL: + COPY_SPEC_LONG (bitmapPresent); + if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); + SET_LONG_VALUE("ijDirectionIncrementGiven", 0); + + COPY_SPEC_LONG(Nj); + + COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees); + COPY_SPEC_DOUBLE(longitudeOfLastGridPointInDegrees); + + COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees); + COPY_SPEC_DOUBLE(latitudeOfLastGridPointInDegrees); + break; + + case GRIB_UTIL_GRID_SPEC_POLAR_STEREOGRAPHIC: + COPY_SPEC_LONG (bitmapPresent); + if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); + + COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees); + COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees); + COPY_SPEC_LONG(Ni); + COPY_SPEC_LONG(Nj); + + /* default iScansNegatively=0 jScansPositively=0 is ok */ + COPY_SPEC_LONG(iScansNegatively); + COPY_SPEC_LONG(jScansPositively); + + COPY_SPEC_DOUBLE(orientationOfTheGridInDegrees); + + COPY_SPEC_LONG(DxInMetres); + COPY_SPEC_LONG(DyInMetres); + + break; + + case GRIB_UTIL_GRID_SPEC_REDUCED_GG: + COPY_SPEC_LONG (bitmapPresent); + if (spec->missingValue) COPY_SPEC_DOUBLE(missingValue); + SET_LONG_VALUE("ijDirectionIncrementGiven", 0); + + COPY_SPEC_LONG(Nj); + COPY_SPEC_LONG(N); + + COPY_SPEC_DOUBLE(longitudeOfFirstGridPointInDegrees); + COPY_SPEC_DOUBLE(longitudeOfLastGridPointInDegrees); + + COPY_SPEC_DOUBLE(latitudeOfFirstGridPointInDegrees); + COPY_SPEC_DOUBLE(latitudeOfLastGridPointInDegrees); + + break; + + case GRIB_UTIL_GRID_SPEC_SH: + *err=grib_get_string(h,"gridType",input_grid_type,&input_grid_type_len); + + SET_LONG_VALUE("J", spec->truncation); + SET_LONG_VALUE("K", spec->truncation); + SET_LONG_VALUE("M", spec->truncation); + + if(packing_spec->packing_type == GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX) + { + SET_STRING_VALUE("packingType", "spectral_complex"); + packingTypeIsSet=1; + SET_LONG_VALUE("JS", 20); + SET_LONG_VALUE("KS", 20); + SET_LONG_VALUE("MS", 20); + if (packing_spec->packing == GRIB_UTIL_PACKING_USE_PROVIDED && editionNumber==2 ) { + SET_LONG_VALUE("computeLaplacianOperator", 1); + } else if ((!(*err) && strcmp(input_grid_type,"sh")) || packing_spec->computeLaplacianOperator ) { + SET_LONG_VALUE("computeLaplacianOperator", 1); + if (packing_spec->truncateLaplacian) + SET_LONG_VALUE("truncateLaplacian",1); + } else { + SET_LONG_VALUE("computeLaplacianOperator", 0); + *err=grib_get_double(h,"laplacianOperator",&laplacianOperator); + if (packing_spec->truncateLaplacian) SET_LONG_VALUE("truncateLaplacian",1); + SET_DOUBLE_VALUE("laplacianOperator", packing_spec->laplacianOperator); + if (laplacianOperator) { + SET_DOUBLE_VALUE("laplacianOperator", laplacianOperator); + } + } + + } + + break; + } + + + /* Set rotation */ + + switch(spec->grid_type) { + case GRIB_UTIL_GRID_SPEC_ROTATED_LL: + case GRIB_UTIL_GRID_SPEC_ROTATED_GG: + COPY_SPEC_LONG(uvRelativeToGrid); + COPY_SPEC_DOUBLE(latitudeOfSouthernPoleInDegrees); + COPY_SPEC_DOUBLE(longitudeOfSouthernPoleInDegrees); + break; + } + + /* process packing options */ + if (!packingTypeIsSet && + packing_spec->packing == GRIB_UTIL_PACKING_USE_PROVIDED && + strcmp(input_packing_type,"grid_simple_matrix")) { + + switch (packing_spec->packing_type) { + case GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX: + if (strcmp(input_packing_type,"spectral_complex") && !strcmp(input_packing_type,"spectral_simple")) + SET_STRING_VALUE("packingType","spectral_complex"); + break; + case GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE: + if (strcmp(input_packing_type,"spectral_simple") && !strcmp(input_packing_type,"spectral_complex")) + SET_STRING_VALUE("packingType","spectral_simple"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE: + if (strcmp(input_packing_type,"grid_simple") && !strcmp(input_packing_type,"grid_complex")) + SET_STRING_VALUE("packingType","grid_simple"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_COMPLEX: + if (strcmp(input_packing_type,"grid_complex") && !strcmp(input_packing_type,"grid_simple")) + SET_STRING_VALUE("packingType","grid_complex"); + break; + case GRIB_UTIL_PACKING_TYPE_JPEG: + if (strcmp(input_packing_type,"grid_jpeg") && !strcmp(input_packing_type,"grid_simple")) + SET_STRING_VALUE("packingType","grid_jpeg"); + break; + case GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER: + /* we delay the set of grid_second_order because we don't want + to do it on a field with bitsPerValue=0 */ + setSecondOrder=1; + break; + default : + printf("invalid packing_spec->packing_type = %ld\n",(long)packing_spec->packing_type); + abort(); + } + } + if (!strcmp(input_packing_type,"grid_simple_matrix")) { + long numberOfDirections,numberOfFrequencies; + int ret; + if (h->context->keep_matrix) { + SET_STRING_VALUE("packingType","grid_simple_matrix"); + ret=grib_get_long(h,"numberOfDirections",&numberOfDirections); + if (!ret) { + ret=grib_get_long(h,"numberOfDirections",&numberOfDirections); + SET_LONG_VALUE("NC1",numberOfDirections); + ret=grib_get_long(h,"numberOfFrequencies",&numberOfFrequencies); + SET_LONG_VALUE("NC2",numberOfFrequencies); + SET_LONG_VALUE("physicalFlag1",1); + SET_LONG_VALUE("physicalFlag2",2); + SET_LONG_VALUE("NR",1); + SET_LONG_VALUE("NC",1); + } + } else { + SET_STRING_VALUE("packingType","grid_simple"); + } + } + + + switch(packing_spec->accuracy) { + + case GRIB_UTIL_ACCURACY_SAME_BITS_PER_VALUES_AS_INPUT: + { + long bitsPerValue = 0; + Assert(grib_get_long(h, "bitsPerValue", &bitsPerValue) == 0); + SET_LONG_VALUE("bitsPerValue", bitsPerValue); + } + break; + + case GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES: + SET_LONG_VALUE("bitsPerValue", packing_spec->bitsPerValue); + break; + + case GRIB_UTIL_ACCURACY_SAME_DECIMAL_SCALE_FACTOR_AS_INPUT: + { + long decimalScaleFactor = 0; + Assert(grib_get_long(h, "decimalScaleFactor", &decimalScaleFactor) == 0); + SET_LONG_VALUE("decimalScaleFactor", decimalScaleFactor); + } + break; + + case GRIB_UTIL_ACCURACY_USE_PROVIDED_DECIMAL_SCALE_FACTOR: + SET_LONG_VALUE("decimalScaleFactor", packing_spec->decimalScaleFactor); + break; + + default: + printf("invalid packing_spec->accuracy = %ld\n",(long)packing_spec->accuracy); + abort(); + } + + if(packing_spec->extra_settings_count) { + for(i = 0; i < packing_spec->extra_settings_count; i++) { + Assert(count < 1024); + values[count++] = packing_spec->extra_settings[i]; + } + } + /* grib_write_message(h,"input.grib","w"); */ + /* grib_write_message(tmp,"geo.grib","w"); */ + if((outh = grib_util_sections_copy(h, tmp, GRIB_SECTION_PRODUCT | GRIB_SECTION_LOCAL,err)) == NULL) + { + goto cleanup; + } + + grib_handle_delete(tmp); + Assert(*err == 0); + + if (h->context->debug==-1) + print_values(h->context,spec,data_values,data_values_count,values,count); + + if((*err = grib_set_values(outh,values,count)) != 0) + { + fprintf(stderr,"SET_GRID_DATA_DESCRIPTION: Cannot set values %s\n",grib_get_error_message(*err)); + + for(i = 0; i < count; i++) + if(values[i].error) + fprintf(stderr," %s %s\n",values[i].name,grib_get_error_message(values[i].error)); + goto cleanup; + } + if (spec->pl_size!=0 && spec->grid_type==GRIB_UTIL_GRID_SPEC_REDUCED_GG) { + *err=grib_set_long_array(outh,"pl",spec->pl,spec->pl_size); + if (*err) { + fprintf(stderr,"SET_GRID_DATA_DESCRIPTION: Cannot set pl %s\n",grib_get_error_message(*err)); + goto cleanup; + } + } + + if((*err = grib_set_double_array(outh,"values",data_values,data_values_count)) != 0) + { + FILE* ferror; + long i,count; + grib_context* c=grib_context_get_default(); + + ferror=fopen("error.data","w"); + count=0; + fprintf(ferror,"# data_values_count=%ld\n",(long)data_values_count); + fprintf(ferror,"set values={ "); + for (i=0;i10) {fprintf(ferror,"\n");count=0;} + count++; + } + fprintf(ferror,"%g }",data_values[data_values_count-1]); + fclose(ferror); + if (c->write_on_fail) + grib_write_message(outh,"error.grib","w"); + goto cleanup; + } + /* grib_write_message(outh,"h.grib","w"); */ + /* if the field is empty GRIBEX is packing as simple*/ + /* + if (!strcmp(input_packing_type,"grid_simple_matrix")) { + long numberOfValues; + grib_get_long(outh,"numberOfValues",&numberOfValues); + if (numberOfValues==0) { + slen=11; + grib_set_string(outh,"packingType","grid_simple",&slen); + } + } + */ + + /* convert to second_order if not constant field */ + if (setSecondOrder ) { + int ii=0; + int constant=1; + double missingValue=0; + double value=missingValue; + + grib_get_double(outh,"missingValue",&missingValue); + for (ii=0;ii65534 && outh->context->no_spd) { + slen=24; + grib_set_string(outh,"packingType","grid_second_order_no_SPD",&slen); + grib_handle_delete(htmp); + } else { + grib_handle_delete(outh); + outh=htmp; + } + } else { + slen=17; + grib_set_string(outh,"packingType","grid_second_order",&slen); + grib_set_double_array(outh,"values",data_values,data_values_count); + } + } else { + if (outh->context->gribex_mode_on) { + outh->context->gribex_mode_on=0; + grib_set_double_array(outh,"values",data_values,data_values_count); + outh->context->gribex_mode_on=1; + } + } + } + + if(packing_spec->editionNumber && packing_spec->editionNumber!=editionNumber) + grib_set_long(outh,"edition", packing_spec->editionNumber); + + if (h->context->debug==-1) + printf("GRIB_API DEBUG: grib_util_set_spec end\n"); + + return outh; + +cleanup: + if(outh) grib_handle_delete(outh); + return NULL; +} + + +int grib_moments(grib_handle* h,double east,double north,double west,double south,int order,double* moments,long *count) { + grib_iterator* iter=NULL; + int ret=0,i,j,l; + size_t n=0,numberOfPoints=0; + double *lat,*lon,*values; + double vlat,vlon,val; + double dx,dy,ddx,ddy; + double mass,centroidX,centroidY; + double missingValue; + grib_context* c=grib_context_get_default(); + + ret=grib_get_size(h,"values",&n); + if (ret) return ret; + + lat=grib_context_malloc_clear(c,sizeof(double)*n); + lon=grib_context_malloc_clear(c,sizeof(double)*n); + values=grib_context_malloc_clear(c,sizeof(double)*n); + + iter=grib_iterator_new(h,0,&ret); + numberOfPoints=0; + while(grib_iterator_next(iter,&vlat,&vlon,&val)) { + if (vlon>=east && vlon<=west && vlat>=south && vlat<=north) { + lat[numberOfPoints]=vlat; + lon[numberOfPoints]=vlon; + values[numberOfPoints]=val; + numberOfPoints++; + } + } + grib_iterator_delete(iter); + + ret=grib_get_double(h,"missingValue",&missingValue); + + centroidX=0; + centroidY=0; + mass=0; + *count=0; + for (i=0;i1) { + moments[j*order+l]=pow(fabs(moments[j*order+l]),1.0/(j+l)) / *count ; + } else { + moments[j*order+l]/=*count ; + } + } + } + + grib_context_free(c,lat); + grib_context_free(c,lon); + grib_context_free(c,values); + + return ret; +} + +/* Helper function for 'parse_keyval_string' */ +static void set_value(grib_values* value,char* str,int equal) +{ + char *p=0,*q=0,*s=0; + char buf[1000]={0,}; + grib_context* c=grib_context_get_default(); + + value->equal=equal; + q=str; + + while (*q != '/' && *q!=0 ) q++; + if (*q=='/') { + s=grib_context_strdup(c,q+1); + value->next=grib_context_malloc_clear(c,sizeof(grib_values)); + value->next->type=value->type; + value->next->name=grib_context_strdup(c,value->name); + set_value(value->next,s,equal); + grib_context_free(c,s); + } + + memcpy(buf,str,q-str); + + switch (value->type) { + case GRIB_TYPE_DOUBLE: + value->double_value = strtod(buf,&p); + if(*p != 0) value->has_value=1; + else if (!strcmp(str,"missing") || + !strcmp(str,"MISSING") || + !strcmp(str,"Missing") ) { + value->type=GRIB_TYPE_MISSING; + value->has_value=1; + } + break; + case GRIB_TYPE_LONG: + value->long_value = strtol(buf,&p,10); + if(*p != 0) value->has_value=1; + else if (!strcmp(buf,"missing") || + !strcmp(buf,"MISSING") || + !strcmp(buf,"Missing") ) { + value->type=GRIB_TYPE_MISSING; + value->has_value=1; + } + break; + case GRIB_TYPE_STRING: + if ( !strcmp(buf,"missing") || + !strcmp(buf,"MISSING") || + !strcmp(buf,"Missing") ) { + value->type=GRIB_TYPE_MISSING; + value->has_value=1; + } else { + value->string_value = grib_context_strdup(c,buf); + value->has_value=1; + } + break; + case GRIB_TYPE_UNDEFINED: + value->long_value = strtol(buf,&p,10); + if(*p == 0) { + value->type = GRIB_TYPE_LONG; + value->has_value=1; + } else { + value->double_value = strtod(buf,&p); + if(*p == 0) { + value->type = GRIB_TYPE_DOUBLE; + value->has_value=1; + } else if ( !strcmp(buf,"missing") || + !strcmp(buf,"MISSING") || + !strcmp(buf,"Missing") ) { + value->type=GRIB_TYPE_MISSING; + value->has_value=1; + } else { + value->string_value = grib_context_strdup(c,buf); + value->type = GRIB_TYPE_STRING; + value->has_value=1; + } + } + break; + } +} + +/* + 'grib_tool' Optional tool name which is printed on error. Can be NULL + 'arg' The string to be parsed e.g. key1=value1,key2!=value2 etc + 'values_required' If true then each key must have a value after it + 'default_type' The default type e.g. GRIB_TYPE_UNDEFINED or GRIB_TYPE_DOUBLE + 'values' The array we populate and return + 'count' The number of elements +*/ +int parse_keyval_string(char* grib_tool, char* arg, int values_required, int default_type, grib_values values[], int* count) +{ + char* p; + int i=0; + if (arg == NULL) { + *count=0; + return GRIB_SUCCESS; + } + p=strtok(arg,","); + while (p != NULL) { + values[i].name=(char*)calloc(1,strlen(p)+1); + strcpy((char*)values[i].name,p); + p=strtok(NULL,","); + i++; + if (i > *count) return GRIB_ARRAY_TOO_SMALL; + } + *count=i; + + for (i=0;i<*count;i++) { + int equal=1; + char* value=NULL; + if (values_required) { + /* Can be either k=v or k!=v */ + p=(char*)values[i].name; + while( *p != '=' && *p != '!' && *p != '\0') p++; + if (*p == '=') { + *p='\0'; + p++; + value=p; + equal=1; + } else if (*p == '!' && *(++p) == '=' ) { + *p='\0'; + *(p-1)='\0'; + p++; + value=p; + equal=0; + } else { + return GRIB_INVALID_ARGUMENT; + } + } + p=(char*)values[i].name; + while(*p != ':' && *p != '\0') p++; + if ( *p == ':' ) { + values[i].type = grib_type_to_int(*(p+1)); + if (*(p+1)=='n') values[i].type = GRIB_NAMESPACE; + *p='\0'; + p++; + } else { + values[i].type = default_type; + } + if (values_required) { + if (strlen(value)==0) { + if (grib_tool) + printf("%s error: no value provided for key \"%s\"\n", grib_tool, values[i].name); + else + printf("Error: no value provided for key \"%s\"\n", values[i].name); + exit(GRIB_INVALID_ARGUMENT); + } + set_value(&values[i],value,equal); + } + } + return GRIB_SUCCESS; +} + diff --git a/src/grib_value.c b/src/grib_value.c new file mode 100644 index 000000000..e9ca46b2d --- /dev/null +++ b/src/grib_value.c @@ -0,0 +1,1359 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +/*************************************************************************** + * Jean Baptiste Filippi - 01.11.2005 + * Enrico Fucile * + ***************************************************************************/ +#include "grib_api_internal.h" + +GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} + +#define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; + +int grib_set_expression(grib_handle* h, const char* name,grib_expression* e) { + grib_accessor* a = grib_find_accessor(h, name); + int ret = GRIB_SUCCESS; + + if(a){ + + if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return GRIB_READ_ONLY; + + ret = grib_pack_expression(a, e); + if(ret == GRIB_SUCCESS){ + return grib_dependency_notify_change(a); + } + return ret; + } + return GRIB_NOT_FOUND; +} + +int grib_set_expression_internal(grib_handle* h, const char* name,grib_expression* e) { + grib_accessor* a = grib_find_accessor(h, name); + + int ret = GRIB_SUCCESS; + if(a){ + ret = grib_pack_expression(a, e); + if(ret == GRIB_SUCCESS){ + return grib_dependency_notify_change(a); + } + return ret; + } + return GRIB_NOT_FOUND; +} + +int grib_set_long_internal(grib_handle* h, const char* name, long val) { + grib_context* c=h->context; + int ret = GRIB_SUCCESS; + grib_accessor* a =NULL; + size_t l = 1; + + a = grib_find_accessor(h, name); + + if (h->context->debug==-1) + printf("GRIB_API DEBUG grib_set_long %s=%ld\n",name,(long)val); + + if(a){ + ret = grib_pack_long(a, &val, &l); + if(ret == GRIB_SUCCESS){ + return grib_dependency_notify_change(a); + } + + grib_context_log(c,GRIB_LOG_ERROR,"unable to set %s=%ld as long (%s)", + name,val,grib_get_error_message(ret)); + return ret; + } + + grib_context_log(c,GRIB_LOG_ERROR,"unable to find accessor %s",name); + return GRIB_NOT_FOUND; +} + +int grib_set_long(grib_handle* h, const char* name, long val) { + int ret = GRIB_SUCCESS; + grib_accessor* a =NULL; + size_t l = 1; + + a = grib_find_accessor(h, name); + + if (h->context->debug==-1) + printf("GRIB_API DEBUG grib_set_long %s=%ld\n",name,(long)val); + + if(a){ + if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return GRIB_READ_ONLY; + + ret = grib_pack_long(a, &val, &l); + if(ret == GRIB_SUCCESS) + return grib_dependency_notify_change(a); + + return ret; + } + return GRIB_NOT_FOUND; +} + +int grib_set_double_internal(grib_handle* h, const char* name, double val) { + int ret = GRIB_SUCCESS; + grib_accessor* a =NULL; + size_t l = 1; + + a = grib_find_accessor(h, name); + + if (h->context->debug==-1) + printf("GRIB_API DEBUG grib_set_double %s=%g\n",name,val); + + if(a){ + ret = grib_pack_double(a, &val, &l); + if(ret == GRIB_SUCCESS){ + return grib_dependency_notify_change(a); + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set %s=%g as double (%s)", + name,val,grib_get_error_message(ret)); + return ret; + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find accessor %s",name); + return GRIB_NOT_FOUND; +} + +typedef struct grib_key_err grib_key_err; +struct grib_key_err { + char* name; + int err; + grib_key_err* next; +}; + +int grib_copy_namespace(grib_handle* dest, const char* name, grib_handle* src) { + int *err=0; + int type; + size_t len; + char *sval = NULL; + unsigned char *uval = NULL; + double *dval = NULL; + long *lval = NULL; + grib_key_err* key_err=NULL; + grib_key_err* first=NULL; + int todo=1,count=0; + + + grib_keys_iterator* iter=NULL; + + if (!dest || !src) return GRIB_NULL_HANDLE; + + iter=grib_keys_iterator_new(src,0,(char*)name); + + if (!iter) { + grib_context_log(src->context,GRIB_LOG_ERROR,"grib_copy_namespace: unable to get iterator for %s",name ); + return GRIB_INTERNAL_ERROR; + } + + while(grib_keys_iterator_next(iter)) { + grib_key_err* k=grib_context_malloc_clear(src->context,sizeof(grib_key_err)); + k->err=GRIB_NOT_FOUND; + k->name=grib_context_strdup(src->context,grib_keys_iterator_get_name(iter)); + if (key_err==NULL) { + key_err=k; + first=k; + } else { + key_err->next=k; + key_err=key_err->next; + } + } + + count=0; + todo=1; + while (todo && count<4) { + grib_accessor* a=NULL; + key_err=first; + while(key_err) { + char* key=key_err->name; + err=&(key_err->err); + + if (*err==GRIB_SUCCESS) { + key_err=key_err->next; + continue; + } + + if ((a=grib_find_accessor(dest,key))==NULL) { + key_err->err=GRIB_NOT_FOUND; + key_err=key_err->next; + continue; + } + + if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) { + key_err->err=GRIB_SUCCESS; + key_err=key_err->next; + continue; + } + + if ( grib_is_missing(src,key,err) && *err == 0 && (*err=grib_set_missing(dest,key))) { + if ( *err!=GRIB_SUCCESS && *err!=GRIB_NOT_FOUND) return *err; + key_err=key_err->next; + continue; + } + + if ((*err=grib_get_native_type(dest,key,&type))!=GRIB_SUCCESS) { + if ( *err!=GRIB_SUCCESS && *err!=GRIB_NOT_FOUND) return *err; + key_err=key_err->next; + continue; + } + + if((*err = grib_get_size(src,key,&len)) != GRIB_SUCCESS) return *err; + + switch (type) { + case GRIB_TYPE_STRING: + len=512; + sval = grib_context_malloc(src->context,len*sizeof(char)); + + if((*err = grib_get_string(src,key,sval,&len)) != GRIB_SUCCESS) + return *err; + + if((*err = grib_set_string(dest,key,sval,&len)) != GRIB_SUCCESS) + return *err; + + grib_context_free(src->context,sval); + break; + + case GRIB_TYPE_LONG: + lval = grib_context_malloc(src->context,len*sizeof(long)); + + if((*err = grib_get_long_array(src,key,lval,&len)) != GRIB_SUCCESS) + return *err; + + if((*err = grib_set_long_array(dest,key,lval,len)) != GRIB_SUCCESS) + return *err; + + grib_context_free(src->context,lval); + break; + + case GRIB_TYPE_DOUBLE: + dval = grib_context_malloc(src->context,len*sizeof(double)); + + if((*err = grib_get_double_array(src,key,dval,&len)) != GRIB_SUCCESS) + return *err; + + if((*err = grib_set_double_array(dest,key,dval,len)) != GRIB_SUCCESS) + return *err; + + break; + + case GRIB_TYPE_BYTES: + if (len==0) len=512; + uval = grib_context_malloc(src->context,len*sizeof(unsigned char)); + + if((*err = grib_get_bytes(src,key,uval,&len)) != GRIB_SUCCESS) + return *err; + + if((*err = grib_get_bytes(dest,key,uval,&len)) != GRIB_SUCCESS) + return *err; + + grib_context_free(src->context,uval); + + break; + + default: + break; + } + key_err=key_err->next; + + } + count++; + key_err=first; + todo=0; + while(key_err) { + if (key_err->err==GRIB_NOT_FOUND) { + todo=1; + break; + } + key_err=key_err->next; + } + } + grib_keys_iterator_delete(iter); + key_err=first; + while (key_err) { + grib_key_err* next=key_err->next; + grib_context_free(src->context,key_err->name); + grib_context_free(src->context,key_err); + key_err=next; + } + + return *err; +} + + +int grib_set_double(grib_handle* h, const char* name, double val) { + int ret = GRIB_SUCCESS; + grib_accessor* a =NULL; + size_t l = 1; + + a = grib_find_accessor(h, name); + + if (h->context->debug==-1) + printf("GRIB_API DEBUG grib_set_double %s=%g\n",name,val); + + if(a){ + + if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return GRIB_READ_ONLY; + + ret = grib_pack_double(a, &val, &l); + if(ret == GRIB_SUCCESS) + return grib_dependency_notify_change(a); + + return ret; + } + return GRIB_NOT_FOUND; +} + +int grib_set_string_internal(grib_handle* h, const char* name, + const char* val, size_t *length) +{ + int ret = GRIB_SUCCESS; + grib_accessor* a =NULL; + + a = grib_find_accessor(h, name); + + if (h->context->debug==-1) + printf("GRIB_API DEBUG grib_set_string %s=%s\n",name,val); + + if(a){ + ret = grib_pack_string(a, val, length); + if(ret == GRIB_SUCCESS){ + return grib_dependency_notify_change(a); + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set %s=%s as string (%s)", + name,val,grib_get_error_message(ret)); + return ret; + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find accessor %s",name); + return GRIB_NOT_FOUND; +} + +int grib_set_string(grib_handle* h, const char* name, const char* val, size_t *length) +{ + int ret=0; + grib_accessor* a; + +#if 1 + /*second order doesn't have a proper representation for constant fields + the best is not to do the change of packing type if bitsPerValue=0 + */ + if (!grib_inline_strcmp(name,"packingType") && !grib_inline_strcmp(val,"grid_second_order")) { + long bitsPerValue=0; + grib_get_long(h,"bitsPerValue",&bitsPerValue); + if (bitsPerValue==0) return 0; + } +#endif + + a = grib_find_accessor(h, name); + + if (h->context->debug==-1) + printf("GRIB_API DEBUG grib_set_string %s=%s\n",name,val); + + if(a) + { + if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return GRIB_READ_ONLY; + + ret=grib_pack_string(a, val, length); + if(ret == GRIB_SUCCESS){ + return grib_dependency_notify_change(a); + } + return ret; + } + return GRIB_NOT_FOUND; +} + +int grib_set_bytes_internal(grib_handle* h, const char* name, const unsigned char* val, size_t *length) +{ + int ret = GRIB_SUCCESS; + grib_accessor* a =NULL; + + a = grib_find_accessor(h, name); + + if(a){ + ret = grib_pack_bytes(a, val, length); + if(ret == GRIB_SUCCESS){ + return grib_dependency_notify_change(a); + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set %s=%ld as bytes (%s)", + name,val,grib_get_error_message(ret)); + return ret; + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find accessor %s",name); + return GRIB_NOT_FOUND; +} + +int grib_set_bytes(grib_handle* h, const char* name, const unsigned char* val, size_t *length) +{ + int ret=0; + grib_accessor* a = grib_find_accessor(h, name); + + if(a) + { + /* if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) */ + /* return GRIB_READ_ONLY; */ + + ret=grib_pack_bytes(a, val, length); + if(ret == GRIB_SUCCESS){ + return grib_dependency_notify_change(a); + } + return ret; + } + return GRIB_NOT_FOUND; +} + +int grib_clear(grib_handle* h, const char* name) +{ + int ret=0; + grib_accessor* a =NULL; + + a = grib_find_accessor(h, name); + + if(a) { + if (a->length ==0) return 0; + if ((ret=grib_pack_zero(a)) != GRIB_SUCCESS) + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to clear %s (%s)", + name,grib_get_error_message(ret)); + return ret; + } + + /*grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find accessor %s",name);*/ + return GRIB_NOT_FOUND; +} + +int grib_set_missing_internal(grib_handle* h, const char* name) { + int ret=0; + grib_accessor* a =NULL; + + a = grib_find_accessor(h, name); + + if(a) { + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { + ret=grib_pack_missing(a); + if(ret == GRIB_SUCCESS) + return grib_dependency_notify_change(a); + } else + ret=GRIB_VALUE_CANNOT_BE_MISSING; + + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set %s=missing (%s)", + name,grib_get_error_message(ret)); + return ret; + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find accessor %s",name); + return GRIB_NOT_FOUND; +} + +int grib_set_missing(grib_handle* h, const char* name) +{ + int ret=0; + grib_accessor* a =NULL; + + a = grib_find_accessor(h, name); + + if(a) { + if(a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) + return GRIB_READ_ONLY; + + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) { + ret=grib_pack_missing(a); + if(ret == GRIB_SUCCESS) + return grib_dependency_notify_change(a); + } else ret=GRIB_VALUE_CANNOT_BE_MISSING; + + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set %s=missing (%s)", + name,grib_get_error_message(ret)); + return ret; + } + + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to find accessor %s",name); + return GRIB_NOT_FOUND; +} + +int grib_is_missing(grib_handle* h, const char* name,int* err) +{ + grib_accessor* a = grib_find_accessor(h, name); + *err=GRIB_SUCCESS; + + if(a) { + if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) + return grib_is_missing_internal(a); + else + return 0; + } + else { + *err=GRIB_NOT_FOUND; + return 1; + } +} + +/* Return true if the given key exists (is defined) in our grib message */ +int grib_is_defined(grib_handle* h, const char* name) +{ + grib_accessor* a = grib_find_accessor(h, name); + return (a ? 1 : 0); +} + +int grib_set_flag(grib_handle *h,const char* name,unsigned long flag) { + grib_accessor* a=grib_find_accessor(h,name); + + if (!a) return GRIB_NOT_FOUND; + + a->flags|=flag; + + return GRIB_SUCCESS; +} + +static int _grib_set_double_array_internal(grib_handle* h,grib_accessor* a, + const double* val, size_t buffer_len,size_t *encoded_length,int check) +{ + if(a) { + int err = _grib_set_double_array_internal(h,a->same,val,buffer_len,encoded_length,check); + + if(check && (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + return GRIB_READ_ONLY; + + if(err == GRIB_SUCCESS) + { + size_t len = buffer_len - *encoded_length; + if(len) { + err = grib_pack_double(a, val + *encoded_length, &len); + *encoded_length += len; + if(err == GRIB_SUCCESS){ + return grib_dependency_notify_change(a); + } + } + else { + grib_get_size(h,a->name,encoded_length); + err = GRIB_WRONG_ARRAY_SIZE; + } + } + + return err; + + } + else { + return GRIB_SUCCESS; + } +} + +static int _grib_set_double_array(grib_handle* h, const char* name, + const double* val, size_t length,int check) +{ + size_t encoded = 0; + grib_accessor* a = grib_find_accessor(h, name); + int err=0; + + err = a ?_grib_set_double_array_internal(h,a,val,length,&encoded,check) : GRIB_NOT_FOUND ; + + if(err == GRIB_SUCCESS && length > encoded) + err = GRIB_ARRAY_TOO_SMALL; + + if(err == GRIB_SUCCESS) + return grib_dependency_notify_change(a); + + return err; +} + +int grib_set_double_array_internal(grib_handle* h, const char* name, const double* val, size_t length) +{ + int ret=0; + + if (h->context->debug==-1) + printf("GRIB_API DEBUG grib_set_double_array %ld values\n",(long)length); + + if (length==0) { + grib_accessor* a = grib_find_accessor(h, name); + ret=grib_pack_double(a, val , &length); + } else { + ret=_grib_set_double_array(h,name,val,length,0); + } + + if (ret!=GRIB_SUCCESS) + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set double array %s (%s)", + name,grib_get_error_message(ret)); + return ret; +} + +int grib_set_double_array(grib_handle* h, const char* name, const double* val, size_t length) +{ + double v=val[0]; + int constant,i; + + if (h->context->debug==-1) + printf("GRIB_API DEBUG grib_set_double_array %ld values\n",(long)length); + + if (length==0) { + grib_accessor* a = grib_find_accessor(h, name); + return grib_pack_double(a, val , &length); + } + + /*second order doesn't have a proper representation for constant fields + the best is not to do the change of packing type if the field is constant + */ + if (!strcmp(name,"values") || !strcmp(name,"codedValues")) { + double missingValue; + int ret=0; + + ret=grib_get_double(h,"missingValue",&missingValue); + if (ret) missingValue=9999; + + v=missingValue; + constant=1; + for (i=0;icontext->debug == -1) + printf("GRIB_API DEBUG grib_set_double_array forcing grid_simple\n"); + grib_set_string(h,"packingType","grid_simple",&slen); + } + } + } + + return _grib_set_double_array(h,name,val,length,1); +} + +static int _grib_set_long_array_internal(grib_handle* h,grib_accessor* a,const long* val, size_t buffer_len,size_t *encoded_length,int check) +{ + if(a) { + int err = _grib_set_long_array_internal(h,a->same,val,buffer_len,encoded_length,check); + + if(check && (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)) + return GRIB_READ_ONLY; + + if(err == GRIB_SUCCESS) + { + size_t len = buffer_len - *encoded_length; + if(len) { + err = grib_pack_long(a, val + *encoded_length, &len); + *encoded_length += len; + } + else { + grib_get_size(h,a->name,encoded_length); + err = GRIB_WRONG_ARRAY_SIZE; + } + } + + return err; + + } + else { + return GRIB_SUCCESS; + } +} + +static int _grib_set_long_array(grib_handle* h, const char* name, const long* val, size_t length,int check) +{ + size_t encoded = 0; + grib_accessor* a = grib_find_accessor(h, name); + int err = a ?_grib_set_long_array_internal(h,a,val,length,&encoded,check) : GRIB_NOT_FOUND ; + + if(err == GRIB_SUCCESS && length > encoded) + err = GRIB_ARRAY_TOO_SMALL; + + if(err == GRIB_SUCCESS) + return grib_dependency_notify_change(a); + + return err; +} + +int grib_set_long_array_internal(grib_handle* h, const char* name, const long* val, size_t length) +{ + int ret=_grib_set_long_array(h,name,val,length,0); + if (ret!=GRIB_SUCCESS) + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set long array %s (%s)", + name,grib_get_error_message(ret)); + return ret; +} + +int grib_set_long_array(grib_handle* h, const char* name, const long* val, size_t length) +{ + return _grib_set_long_array(h,name,val,length,1); +} + +int grib_get_long_internal(grib_handle* h, const char* name, long* val) +{ + int ret = grib_get_long(h,name,val); + + if(ret!=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to get %s as long (%s)", + name, grib_get_error_message(ret)); + } + + return ret; +} + +int grib_get_long(grib_handle* h, const char* name, long* val) +{ + grib_accessor* act = NULL; + size_t l = 1; + int ret=0; + + act = grib_find_accessor(h, name); + + ret = act ? grib_unpack_long(act, val, &l) : GRIB_NOT_FOUND; + + return ret; +} + +int grib_get_double_internal(grib_handle* h, const char* name, double* val) +{ + int ret = grib_get_double(h,name,val); + + if(ret!=GRIB_SUCCESS) + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to get %s as double (%s)", + name, grib_get_error_message(ret)); + + return ret; +} + +int grib_get_double(grib_handle* h, const char* name, double* val) +{ + grib_accessor* act = grib_find_accessor(h, name); + size_t l = 1; + + if(act) + return grib_unpack_double(act, val, &l); + + return GRIB_NOT_FOUND; +} + +int grib_get_double_element_internal(grib_handle* h, const char* name, int i,double* val) +{ + int ret = grib_get_double_element(h,name,i,val); + + if(ret!=GRIB_SUCCESS) + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to get %s as double element (%s)", + name, grib_get_error_message(ret)); + + return ret; +} + +int grib_get_double_element(grib_handle* h, const char* name, int i, double* val) +{ + grib_accessor* act = grib_find_accessor(h, name); + + if(act) + return grib_unpack_double_element(act, i,val); + + return GRIB_NOT_FOUND; +} + +int grib_points_get_values(grib_handle* h, grib_points* points, double* val) +{ + int i,ret; + grib_accessor* a=NULL; + + a=grib_find_accessor(h,"values"); + + for (i=0;in_groups;i++) { + ret=grib_unpack_double_subarray(a,val,points->group_start[i],points->group_len[i]); + if (ret) return ret; + val+=points->group_len[i]; + } + return 0; +} + +int grib_get_double_elements(grib_handle* h, const char* name, int* i, long len,double* val) +{ + double* values=0; + int ret=0; + size_t size=0; + int j=0; + grib_accessor* act =NULL; + + + act= grib_find_accessor(h, name); + + ret=_grib_get_size(h,act,&size); + + if (ret!=GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"grib_get_double_elements: cannot get size of %s\n",name); + return ret; + } + + values=grib_context_malloc( h->context,size * sizeof(double)); + + if (!values) { + grib_context_log(h->context,GRIB_LOG_ERROR,"grib_get_double_elements: unable to allocate %ld bytes\n", + size*sizeof(double)); + return GRIB_OUT_OF_MEMORY; + } + + ret = grib_unpack_double(act, values, &size); + + for (j=0;jcontext,values); + + return GRIB_SUCCESS; +} + +int grib_get_string_internal(grib_handle* h, const char* name, char* val, size_t *length) +{ + int ret = grib_get_string(h,name,val,length); + + if(ret!=GRIB_SUCCESS) + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to get %s as string (%s)", + name, grib_get_error_message(ret)); + + return ret; +} + + +int grib_get_string(grib_handle* h, const char* name, char* val, size_t *length) +{ + grib_accessor* act = grib_find_accessor(h, name); + if(act) + return grib_unpack_string(act, val, length); + return GRIB_NOT_FOUND; +} + + +int grib_get_bytes_internal(grib_handle* h, const char* name, unsigned char* val, size_t *length) +{ + int ret = grib_get_bytes(h,name,val,length); + + if(ret!=GRIB_SUCCESS) + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to get %s as bytes (%s)", + name, grib_get_error_message(ret)); + + return ret; +} + +int grib_get_bytes(grib_handle* h, const char* name, unsigned char* val, size_t *length) +{ + int err=0; + grib_accessor* act = grib_find_accessor(h, name); + err = act? grib_unpack_bytes(act, val, length) : GRIB_NOT_FOUND; + if(err) grib_context_log(h->context,GRIB_LOG_ERROR, + "grib_get_bytes_internal %s failed %s", name, grib_get_error_message(err)); + return err; +} + +int grib_get_native_type(grib_handle* h, const char* name,int* type) +{ + grib_accessor* act = grib_find_accessor(h, name); + *type = GRIB_TYPE_UNDEFINED; + + if(act) { + *type = grib_accessor_get_native_type(act); + return GRIB_SUCCESS; + } + return GRIB_NOT_FOUND; +} + +const char* grib_get_accessor_class_name(grib_handle* h, const char* name) +{ + grib_accessor* act = grib_find_accessor(h, name); + return act?act->cclass->name:NULL; +} + +int _grib_get_double_array_internal(grib_handle* h,grib_accessor* a,double* val, size_t buffer_len,size_t *decoded_length) +{ + if(a) { + int err = _grib_get_double_array_internal(h,a->same,val,buffer_len,decoded_length); + + if(err == GRIB_SUCCESS) + { + size_t len = buffer_len - *decoded_length; + err = grib_unpack_double(a, val + *decoded_length, &len); + *decoded_length += len; + } + + return err; + + } + else { + return GRIB_SUCCESS; + } +} + +int grib_get_double_array_internal(grib_handle* h, const char* name, double* val, size_t *length) +{ + int ret = grib_get_double_array(h,name,val,length); + + if(ret!=GRIB_SUCCESS) + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to get %s as double array (%s)", + name, grib_get_error_message(ret)); + + return ret; +} + +int grib_get_double_array(grib_handle* h, const char* name, double* val, size_t *length) +{ + size_t len = *length; + grib_accessor* a = grib_find_accessor(h, name); + if(!a) return GRIB_NOT_FOUND; + + *length = 0; + return _grib_get_double_array_internal(h,a,val,len,length); +} + + +int grib_get_string_length(grib_handle* h, const char* name,size_t* size) +{ + grib_accessor* a = grib_find_accessor(h, name); + size_t s=0; + if(!a) return GRIB_NOT_FOUND; + + *size = 0; + while(a) { + s = grib_string_length(a); + if (s > *size) *size=s; + a = a->same; + } + (*size)+=1; + + return GRIB_SUCCESS; +} + +int grib_get_size(grib_handle* h, const char* name,size_t* size) +{ + grib_accessor* a = grib_find_accessor(h, name); + if(!a) return GRIB_NOT_FOUND; + + *size = 0; + while(a) { + *size += grib_value_count(a); + a = a->same; + } + return GRIB_SUCCESS; +} + +int grib_get_count(grib_handle* h, const char* name,size_t* size) +{ + grib_accessor* a = grib_find_accessor(h, name); + if(!a) return GRIB_NOT_FOUND; + + *size = 0; + while(a) { + (*size)++; + a = a->same; + } + return GRIB_SUCCESS; +} + + +int _grib_get_size(grib_handle* h, grib_accessor* a,size_t* size) +{ + if(!a) return GRIB_NOT_FOUND; + + *size = 0; + while(a) { + *size += grib_value_count(a); + a = a->same; + } + return GRIB_SUCCESS; +} + +int grib_get_offset(grib_handle* h, const char* key,size_t* val) +{ + grib_accessor* act = grib_find_accessor(h, key); + if(act) { + *val = (size_t)grib_byte_offset(act); + return GRIB_SUCCESS; + } + return GRIB_NOT_FOUND; +} + + +int _grib_get_long_array_internal(grib_handle* h,grib_accessor* a,long* val, size_t buffer_len,size_t *decoded_length) +{ + if(a) { + int err = _grib_get_long_array_internal(h,a->same,val,buffer_len,decoded_length); + + if(err == GRIB_SUCCESS) + { + size_t len = buffer_len - *decoded_length; + err = grib_unpack_long(a, val + *decoded_length, &len); + *decoded_length += len; + } + + return err; + + } else { + return GRIB_SUCCESS; + } +} + +int grib_get_long_array_internal(grib_handle* h, const char* name, long* val, size_t *length) +{ + int ret = grib_get_long_array(h,name,val,length); + + if(ret!=GRIB_SUCCESS) + grib_context_log(h->context,GRIB_LOG_ERROR, + "unable to get %s as long array (%s)", + name, grib_get_error_message(ret)); + + return ret; +} + +int grib_get_long_array(grib_handle* h, const char* name, long* val, size_t *length) +{ + size_t len = *length; + grib_accessor* a = grib_find_accessor(h, name); + if(!a) return GRIB_NOT_FOUND; + + *length = 0; + return _grib_get_long_array_internal(h,a,val,len,length); +} + +static void grib_clean_key_value(grib_context* c,grib_key_value_list* kv) { + if (kv->long_value) grib_context_free(c,kv->long_value); + kv->long_value=NULL; + if (kv->double_value) grib_context_free(c,kv->double_value); + kv->double_value=NULL; + if (kv->string_value) grib_context_free(c,kv->string_value); + kv->string_value=NULL; + if (kv->namespace_value) grib_key_value_list_delete(c,kv->namespace_value); + kv->namespace_value=NULL; + kv->error=0; + kv->has_value=0; + kv->size=0; +} + +static int grib_get_key_value(grib_handle* h,grib_key_value_list* kv) { + int ret=0; + size_t size=0; + grib_keys_iterator* iter=NULL; + grib_key_value_list* list=NULL; + + if (kv->has_value) grib_clean_key_value(h->context,kv); + + ret=grib_get_size(h,kv->name,&size); + if (ret) { + kv->error=ret; + return ret; + } + if (size==0) size=512; + + switch (kv->type) { + case GRIB_TYPE_LONG: + kv->long_value=grib_context_malloc_clear(h->context,size*sizeof(long)); + ret=grib_get_long_array(h,kv->name,kv->long_value,&size); + kv->error=ret; + break; + case GRIB_TYPE_DOUBLE: + kv->double_value=grib_context_malloc_clear(h->context,size*sizeof(double)); + ret=grib_get_double_array(h,kv->name,kv->double_value,&size); + kv->error=ret; + break; + case GRIB_TYPE_STRING: + grib_get_string_length(h,kv->name,&size); + kv->string_value=grib_context_malloc_clear(h->context,size*sizeof(char)); + ret=grib_get_string(h,kv->name,kv->string_value,&size); + kv->error=ret; + break; + case GRIB_TYPE_BYTES: + kv->string_value=grib_context_malloc_clear(h->context,size*sizeof(char)); + ret=grib_get_bytes(h,kv->name,(unsigned char*)kv->string_value,&size); + kv->error=ret; + break; + case GRIB_NAMESPACE: + iter=grib_keys_iterator_new(h,0,(char*)kv->name); + list=grib_context_malloc_clear(h->context,sizeof(grib_key_value_list)); + kv->namespace_value=list; + while(grib_keys_iterator_next(iter)) + { + list->name=grib_keys_iterator_get_name(iter); + ret=grib_get_native_type(h,list->name,&(list->type)); + ret=grib_get_key_value(h,list); + list->next=grib_context_malloc_clear(h->context,sizeof(grib_key_value_list)); + list=list->next; + } + grib_keys_iterator_delete(iter); + break; + + default: + ret=grib_get_native_type(h,kv->name,&(kv->type)); + ret=grib_get_key_value(h,kv); + break; + } + kv->has_value=1; + return ret; +} + +grib_key_value_list* grib_key_value_list_clone(grib_context* c,grib_key_value_list* list) { + grib_key_value_list* next=list; + grib_key_value_list* clone=grib_context_malloc_clear(c,sizeof(grib_key_value_list)); + grib_key_value_list* p=clone; + + while (next && next->name) { + p->name=grib_context_strdup(c,next->name); + p->type=next->type; + next=next->next; + } + return clone; +} + +void grib_key_value_list_delete(grib_context* c,grib_key_value_list* kvl) { + grib_key_value_list* next=kvl; + grib_key_value_list* p=NULL; + while (next) { + p=next->next; + if (next->type == GRIB_NAMESPACE) + grib_key_value_list_delete(c,next->namespace_value); + + grib_clean_key_value(c,next); + grib_context_free(c,next); + next=p; + } +} + +int grib_get_key_value_list(grib_handle* h,grib_key_value_list* list) { + int ret=0; + grib_key_value_list* kvl=list; + while (kvl) { + ret=grib_get_key_value(h,kvl); + kvl=kvl->next; + } + return ret; +} + +int grib_get_values(grib_handle* h,grib_values* args,size_t count) { + int ret=0; + int i=0; + + for (i=0; ivalues_stack++; + + Assert(h->values_stack < MAX_SET_VALUES - 1); + + h->values[stack] = args; + h->values_count[stack] = count; + + for(i = 0; i < count ; i++) + args[i].error = GRIB_NOT_FOUND; + + while(more) + { + more = 0; + for(i = 0; i < count ; i++) + { + if(args[i].error != GRIB_NOT_FOUND) + continue; + + switch(args[i].type) + { + case GRIB_TYPE_LONG: + error = grib_set_long(h,args[i].name,args[i].long_value); + args[i].error=error; + if(args[i].error == GRIB_SUCCESS) more = 1; + break; + + case GRIB_TYPE_DOUBLE: + args[i].error = grib_set_double(h,args[i].name,args[i].double_value); + if(args[i].error == GRIB_SUCCESS) more = 1; + break; + + case GRIB_TYPE_STRING: + len = strlen(args[i].string_value); + args[i].error = grib_set_string(h,args[i].name,args[i].string_value,&len); + if(args[i].error == GRIB_SUCCESS) more = 1; + break; + + case GRIB_TYPE_MISSING: + args[i].error = grib_set_missing(h,args[i].name); + if(args[i].error == GRIB_SUCCESS) more = 1; + break; + + default: + grib_context_log(h->context,GRIB_LOG_ERROR, "grib_set_values[%d] %s invalid type %d", i, args[i].name, args[i].type); + args[i].error = GRIB_INVALID_ARGUMENT; + break; + } + /*if (args[i].error != GRIB_SUCCESS) + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set %s (%s)", + args[i].name,grib_get_error_message(args[i].error)); */ + } + } + + + h->values[stack] = NULL; + h->values_count[stack] = 0; + + h->values_stack--; + + for(i = 0; i < count ; i++) { + if(args[i].error != GRIB_SUCCESS) + { + grib_context_log(h->context,GRIB_LOG_ERROR, + "grib_set_values[%d] %s (%d) failed: %s", i, args[i].name, args[i].type, + grib_get_error_message(args[i].error)); + err= err==GRIB_SUCCESS ? args[i].error : err; + } + } + + return err; +} + +int grib_get_nearest_smaller_value(grib_handle* h, const char* name, + double val,double* nearest) +{ + grib_accessor* act = grib_find_accessor(h, name); + Assert(act); + return grib_nearest_smaller_value(act,val,nearest); +} + +void grib_print_values(grib_values* values,int count) +{ + int i; + for(i = 0; i < count ; i++) + { + printf("%s = ",values[i].name); + switch(values[i].type) + { + case GRIB_TYPE_LONG: printf("%ld",values[i].long_value); break; + case GRIB_TYPE_DOUBLE: printf("%g",values[i].double_value); break; + case GRIB_TYPE_STRING: printf("%s",values[i].string_value); break; + } + printf("\n"); + } +} + +int grib_values_check(grib_handle* h, grib_values* values, int count) { + int i=0; + long long_value; + double double_value; + unsigned char ubuff[1024]={0,}; + char buff[1024]={0,}; + size_t len=1024; + + for (i=0; i. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with grib_yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.4.1" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ +#line 10 "griby.y" + + +#include "grib_api_internal.h" +/* #include "grib_parser.h" */ + +extern int grib_yylex(); +extern int grib_yyerror(const char*); + +extern grib_action* grib_parser_all_actions; +extern grib_concept_value* grib_parser_concept; +extern grib_context* grib_parser_context; +extern grib_rule* grib_parser_rules; + +static grib_concept_value* reverse(grib_concept_value* r); +static grib_concept_value *reverse_concept(grib_concept_value *r,grib_concept_value *s); + +/* typedef int (*testp_proc)(long,long); */ +/* typedef long (*grib_op_proc)(long,long); */ + + + + +/* Line 189 of yacc.c */ +#line 96 "y.tab.c" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum grib_yytokentype { + LOWERCASE = 258, + IF = 259, + IF_TRANSIENT = 260, + ELSE = 261, + END = 262, + UNSIGNED = 263, + TEMPLATE = 264, + TEMPLATE_NOFAIL = 265, + TRIGGER = 266, + ASCII = 267, + KSEC1EXPVER = 268, + LABEL = 269, + LIST = 270, + WHILE = 271, + IBMFLOAT = 272, + SIGNED = 273, + BYTE = 274, + CODETABLE = 275, + COMPLEX_CODETABLE = 276, + LOOKUP = 277, + ALIAS = 278, + UNALIAS = 279, + META = 280, + POS = 281, + INTCONST = 282, + TRANS = 283, + FLAGBIT = 284, + CONCEPT = 285, + CONCEPT_NOFAIL = 286, + NIL = 287, + DUMMY = 288, + MODIFY = 289, + READ_ONLY = 290, + STRING_TYPE = 291, + LONG_TYPE = 292, + NO_COPY = 293, + DUMP = 294, + NO_FAIL = 295, + EDITION_SPECIFIC = 296, + OVERRIDE = 297, + HIDDEN = 298, + CAN_BE_MISSING = 299, + MISSING = 300, + CONSTRAINT = 301, + COPY_OK = 302, + WHEN = 303, + SET = 304, + SET_NOFAIL = 305, + WRITE = 306, + APPEND = 307, + PRINT = 308, + EXPORT = 309, + REMOVE = 310, + SKIP = 311, + PAD = 312, + SECTION_PADDING = 313, + MESSAGE = 314, + PADTO = 315, + PADTOEVEN = 316, + PADTOMULTIPLE = 317, + G1_HALF_BYTE = 318, + G1_MESSAGE_LENGTH = 319, + G1_SECTION4_LENGTH = 320, + SECTION_LENGTH = 321, + FLAG = 322, + ITERATOR = 323, + NEAREST = 324, + BOX = 325, + KSEC = 326, + ASSERT = 327, + CASE = 328, + SWITCH = 329, + DEFAULT = 330, + EQ = 331, + NE = 332, + GE = 333, + LE = 334, + BIT = 335, + BITOFF = 336, + AND = 337, + OR = 338, + NOT = 339, + IS = 340, + IDENT = 341, + STRING = 342, + INTEGER = 343, + FLOAT = 344 + }; +#endif +/* Tokens. */ +#define LOWERCASE 258 +#define IF 259 +#define IF_TRANSIENT 260 +#define ELSE 261 +#define END 262 +#define UNSIGNED 263 +#define TEMPLATE 264 +#define TEMPLATE_NOFAIL 265 +#define TRIGGER 266 +#define ASCII 267 +#define KSEC1EXPVER 268 +#define LABEL 269 +#define LIST 270 +#define WHILE 271 +#define IBMFLOAT 272 +#define SIGNED 273 +#define BYTE 274 +#define CODETABLE 275 +#define COMPLEX_CODETABLE 276 +#define LOOKUP 277 +#define ALIAS 278 +#define UNALIAS 279 +#define META 280 +#define POS 281 +#define INTCONST 282 +#define TRANS 283 +#define FLAGBIT 284 +#define CONCEPT 285 +#define CONCEPT_NOFAIL 286 +#define NIL 287 +#define DUMMY 288 +#define MODIFY 289 +#define READ_ONLY 290 +#define STRING_TYPE 291 +#define LONG_TYPE 292 +#define NO_COPY 293 +#define DUMP 294 +#define NO_FAIL 295 +#define EDITION_SPECIFIC 296 +#define OVERRIDE 297 +#define HIDDEN 298 +#define CAN_BE_MISSING 299 +#define MISSING 300 +#define CONSTRAINT 301 +#define COPY_OK 302 +#define WHEN 303 +#define SET 304 +#define SET_NOFAIL 305 +#define WRITE 306 +#define APPEND 307 +#define PRINT 308 +#define EXPORT 309 +#define REMOVE 310 +#define SKIP 311 +#define PAD 312 +#define SECTION_PADDING 313 +#define MESSAGE 314 +#define PADTO 315 +#define PADTOEVEN 316 +#define PADTOMULTIPLE 317 +#define G1_HALF_BYTE 318 +#define G1_MESSAGE_LENGTH 319 +#define G1_SECTION4_LENGTH 320 +#define SECTION_LENGTH 321 +#define FLAG 322 +#define ITERATOR 323 +#define NEAREST 324 +#define BOX 325 +#define KSEC 326 +#define ASSERT 327 +#define CASE 328 +#define SWITCH 329 +#define DEFAULT 330 +#define EQ 331 +#define NE 332 +#define GE 333 +#define LE 334 +#define BIT 335 +#define BITOFF 336 +#define AND 337 +#define OR 338 +#define NOT 339 +#define IS 340 +#define IDENT 341 +#define STRING 342 +#define INTEGER 343 +#define FLOAT 344 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ + +/* Line 214 of yacc.c */ +#line 32 "griby.y" + + char *str; + long lval; + double dval; + grib_darray *dvalue; + grib_iarray *ivalue; + grib_action *act; + grib_arguments *explist; + grib_expression *exp; + grib_concept_condition *concept_condition; + grib_concept_value *concept_value; + grib_case *case_value; + grib_rule *rules; + grib_rule_entry *rule_entry; + + + +/* Line 214 of yacc.c */ +#line 328 "y.tab.c" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define grib_yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif + + +/* Copy the second part of user declarations. */ + + +/* Line 264 of yacc.c */ +#line 340 "y.tab.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 grib_yytype_uint8; +#else +typedef unsigned char grib_yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 grib_yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char grib_yytype_int8; +#else +typedef short int grib_yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 grib_yytype_uint16; +#else +typedef unsigned short int grib_yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 grib_yytype_int16; +#else +typedef short int grib_yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int grib_yyi) +#else +static int +YYID (grib_yyi) + int grib_yyi; +#endif +{ + return grib_yyi; +} +#endif + +#if ! defined grib_yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined grib_yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined grib_yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union grib_yyalloc +{ + grib_yytype_int16 grib_yyss_alloc; + YYSTYPE grib_yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union grib_yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (grib_yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T grib_yyi; \ + for (grib_yyi = 0; grib_yyi < (Count); grib_yyi++) \ + (To)[grib_yyi] = (From)[grib_yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T grib_yynewbytes; \ + YYCOPY (&grib_yyptr->Stack_alloc, Stack, grib_yysize); \ + Stack = &grib_yyptr->Stack_alloc; \ + grib_yynewbytes = grib_yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + grib_yyptr += grib_yynewbytes / sizeof (*grib_yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 162 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 1355 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 109 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 45 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 215 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 680 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 344 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? grib_yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const grib_yytype_uint8 grib_yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 105, 2, 2, + 94, 95, 103, 106, 90, 101, 96, 104, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 100, 91, + 108, 97, 107, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 92, 2, 93, 102, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 98, 2, 99, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const grib_yytype_uint16 grib_yyprhs[] = +{ + 0, 0, 3, 5, 7, 9, 11, 13, 14, 16, + 20, 22, 26, 28, 31, 35, 38, 41, 43, 45, + 47, 49, 51, 53, 55, 57, 60, 62, 64, 66, + 70, 72, 80, 91, 99, 110, 118, 126, 134, 145, + 153, 161, 172, 180, 191, 200, 213, 224, 233, 244, + 253, 263, 271, 274, 277, 282, 289, 297, 300, 306, + 312, 317, 324, 332, 335, 341, 350, 359, 363, 369, + 375, 381, 387, 394, 398, 402, 406, 412, 415, 423, + 428, 437, 448, 454, 460, 466, 472, 475, 480, 484, + 489, 494, 501, 506, 509, 511, 517, 522, 525, 527, + 533, 538, 541, 547, 549, 557, 569, 577, 589, 596, + 604, 616, 621, 626, 629, 633, 635, 638, 640, 643, + 645, 649, 651, 653, 655, 657, 659, 661, 663, 665, + 667, 669, 671, 673, 675, 677, 686, 694, 702, 709, + 719, 732, 747, 758, 773, 786, 795, 807, 814, 824, + 837, 848, 863, 876, 885, 897, 899, 902, 904, 907, + 912, 923, 933, 941, 947, 953, 959, 965, 967, 970, + 975, 977, 979, 981, 983, 985, 987, 989, 993, 996, + 1000, 1005, 1009, 1011, 1015, 1019, 1023, 1027, 1031, 1033, + 1037, 1041, 1043, 1047, 1051, 1055, 1059, 1063, 1067, 1071, + 1074, 1076, 1080, 1082, 1086, 1088, 1090, 1092, 1094, 1099, + 1102, 1104, 1107, 1109, 1117, 1119 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const grib_yytype_int16 grib_yyrhs[] = +{ + 110, 0, -1, 111, -1, 132, -1, 113, -1, 153, + -1, 1, -1, -1, 89, -1, 112, 90, 89, -1, + 88, -1, 112, 90, 88, -1, 114, -1, 114, 113, + -1, 114, 91, 113, -1, 114, 91, -1, 119, 91, + -1, 120, -1, 128, -1, 129, -1, 130, -1, 131, + -1, 121, -1, 135, -1, 91, -1, 115, 91, -1, + 111, -1, 117, -1, 118, -1, 118, 90, 117, -1, + 147, -1, 8, 92, 88, 93, 86, 124, 125, -1, + 8, 92, 88, 93, 86, 92, 116, 93, 124, 125, + -1, 8, 94, 88, 95, 86, 124, 125, -1, 8, + 94, 88, 95, 86, 92, 116, 93, 124, 125, -1, + 12, 92, 88, 93, 86, 124, 125, -1, 12, 92, + 88, 93, 87, 124, 125, -1, 19, 92, 88, 93, + 86, 124, 125, -1, 19, 92, 88, 93, 86, 92, + 116, 93, 124, 125, -1, 13, 92, 88, 93, 86, + 124, 125, -1, 18, 92, 88, 93, 86, 124, 125, + -1, 18, 92, 88, 93, 86, 92, 116, 93, 124, + 125, -1, 18, 94, 88, 95, 86, 124, 125, -1, + 18, 94, 88, 95, 86, 92, 116, 93, 124, 125, + -1, 20, 92, 88, 93, 86, 118, 124, 125, -1, + 20, 92, 88, 93, 86, 118, 124, 49, 94, 86, + 95, 125, -1, 20, 92, 88, 93, 86, 94, 116, + 95, 124, 125, -1, 21, 92, 88, 93, 86, 118, + 124, 125, -1, 21, 92, 88, 93, 86, 94, 116, + 95, 124, 125, -1, 67, 92, 88, 93, 86, 118, + 124, 125, -1, 22, 92, 88, 93, 86, 94, 116, + 95, 125, -1, 29, 86, 94, 116, 95, 124, 125, + -1, 14, 86, -1, 14, 87, -1, 17, 86, 124, + 125, -1, 17, 86, 96, 86, 124, 125, -1, 17, + 86, 92, 118, 93, 124, 125, -1, 26, 86, -1, + 27, 86, 97, 118, 125, -1, 28, 86, 97, 118, + 125, -1, 89, 86, 124, 125, -1, 89, 86, 96, + 86, 124, 125, -1, 89, 86, 92, 118, 93, 124, + 125, -1, 63, 86, -1, 66, 92, 88, 93, 86, + -1, 64, 92, 88, 93, 86, 94, 116, 95, -1, + 65, 92, 88, 93, 86, 94, 116, 95, -1, 71, + 86, 118, -1, 57, 86, 94, 116, 95, -1, 60, + 86, 94, 116, 95, -1, 61, 86, 94, 116, 95, + -1, 62, 86, 94, 116, 95, -1, 59, 92, 88, + 93, 86, 125, -1, 58, 86, 125, -1, 9, 86, + 87, -1, 10, 86, 87, -1, 23, 86, 97, 86, + 125, -1, 24, 86, -1, 23, 86, 96, 86, 97, + 86, 125, -1, 24, 86, 96, 86, -1, 25, 86, + 86, 94, 116, 95, 124, 125, -1, 25, 86, 96, + 86, 86, 94, 116, 95, 124, 125, -1, 68, 86, + 94, 116, 95, -1, 69, 86, 94, 116, 95, -1, + 70, 86, 94, 116, 95, -1, 54, 86, 94, 116, + 95, -1, 55, 116, -1, 72, 94, 147, 95, -1, + 34, 86, 125, -1, 49, 86, 97, 45, -1, 49, + 86, 97, 147, -1, 49, 86, 97, 98, 112, 99, + -1, 50, 86, 97, 147, -1, 51, 87, -1, 51, + -1, 51, 94, 88, 95, 87, -1, 51, 94, 88, + 95, -1, 52, 87, -1, 52, -1, 52, 94, 88, + 95, 87, -1, 52, 94, 88, 95, -1, 53, 87, + -1, 53, 94, 87, 95, 87, -1, 53, -1, 4, + 94, 147, 95, 98, 113, 99, -1, 4, 94, 147, + 95, 98, 113, 99, 6, 98, 113, 99, -1, 5, + 94, 147, 95, 98, 113, 99, -1, 5, 94, 147, + 95, 98, 113, 99, 6, 98, 113, 99, -1, 48, + 94, 147, 95, 122, 115, -1, 48, 94, 147, 95, + 98, 123, 99, -1, 48, 94, 147, 95, 98, 123, + 99, 6, 98, 123, 99, -1, 49, 86, 97, 147, + -1, 50, 86, 97, 147, -1, 122, 115, -1, 123, + 122, 115, -1, 111, -1, 97, 116, -1, 111, -1, + 100, 126, -1, 127, -1, 126, 90, 127, -1, 35, + -1, 3, -1, 39, -1, 38, -1, 40, -1, 43, + -1, 41, -1, 44, -1, 46, -1, 42, -1, 47, + -1, 28, -1, 36, -1, 37, -1, 86, 15, 94, + 147, 95, 98, 113, 99, -1, 16, 94, 147, 95, + 98, 113, 99, -1, 11, 94, 116, 95, 98, 113, + 99, -1, 30, 86, 98, 132, 99, 125, -1, 30, + 86, 94, 86, 95, 98, 132, 99, 125, -1, 30, + 86, 94, 86, 90, 87, 90, 86, 90, 86, 95, + 125, -1, 30, 86, 94, 86, 90, 87, 90, 86, + 90, 86, 90, 86, 95, 125, -1, 30, 86, 94, + 86, 90, 87, 90, 86, 95, 125, -1, 30, 86, + 96, 86, 94, 86, 90, 87, 90, 86, 90, 86, + 95, 125, -1, 30, 86, 96, 86, 94, 86, 90, + 87, 90, 86, 95, 125, -1, 30, 86, 96, 86, + 98, 132, 99, 125, -1, 30, 86, 96, 86, 94, + 86, 95, 98, 132, 99, 125, -1, 31, 86, 98, + 132, 99, 125, -1, 31, 86, 94, 86, 95, 98, + 132, 99, 125, -1, 31, 86, 94, 86, 90, 87, + 90, 86, 90, 86, 95, 125, -1, 31, 86, 94, + 86, 90, 87, 90, 86, 95, 125, -1, 31, 86, + 96, 86, 94, 86, 90, 87, 90, 86, 90, 86, + 95, 125, -1, 31, 86, 96, 86, 94, 86, 90, + 87, 90, 86, 95, 125, -1, 31, 86, 96, 86, + 98, 132, 99, 125, -1, 31, 86, 96, 86, 94, + 86, 95, 98, 132, 99, 125, -1, 136, -1, 132, + 136, -1, 134, -1, 133, 134, -1, 73, 117, 100, + 113, -1, 74, 94, 116, 95, 98, 133, 75, 100, + 113, 99, -1, 74, 94, 116, 95, 98, 133, 75, + 100, 99, -1, 74, 94, 116, 95, 98, 133, 99, + -1, 87, 97, 98, 137, 99, -1, 86, 97, 98, + 137, 99, -1, 88, 97, 98, 137, 99, -1, 89, + 97, 98, 137, 99, -1, 138, -1, 138, 137, -1, + 86, 97, 147, 91, -1, 86, -1, 87, -1, 139, + -1, 88, -1, 89, -1, 32, -1, 33, -1, 94, + 147, 95, -1, 101, 140, -1, 86, 94, 95, -1, + 86, 94, 116, 95, -1, 140, 102, 141, -1, 140, + -1, 142, 103, 141, -1, 142, 104, 141, -1, 142, + 105, 141, -1, 142, 80, 141, -1, 142, 81, 141, + -1, 141, -1, 143, 106, 142, -1, 143, 101, 142, + -1, 142, -1, 144, 107, 143, -1, 144, 76, 143, + -1, 144, 108, 143, -1, 144, 78, 143, -1, 144, + 79, 143, -1, 144, 77, 143, -1, 139, 85, 139, + -1, 84, 144, -1, 143, -1, 145, 82, 144, -1, + 144, -1, 146, 83, 145, -1, 145, -1, 146, -1, + 151, -1, 152, -1, 86, 97, 147, 91, -1, 56, + 91, -1, 149, -1, 149, 150, -1, 149, -1, 4, + 94, 147, 95, 98, 150, 99, -1, 148, -1, 148, + 153, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const grib_yytype_uint16 grib_yyrline[] = +{ + 0, 204, 204, 205, 206, 207, 209, 212, 215, 216, + 217, 218, 220, 221, 222, 223, 226, 227, 228, 229, + 230, 231, 232, 233, 237, 238, 241, 242, 245, 246, + 249, 253, 256, 259, 262, 265, 269, 272, 275, 278, + 281, 284, 287, 290, 293, 296, 300, 303, 306, 309, + 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, + 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, + 372, 375, 378, 381, 383, 385, 388, 391, 394, 398, + 402, 405, 408, 420, 432, 444, 447, 450, 453, 456, + 457, 458, 460, 463, 464, 465, 466, 467, 468, 469, + 470, 472, 473, 474, 478, 479, 480, 481, 485, 486, + 487, 490, 491, 494, 495, 499, 500, 503, 504, 507, + 508, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 527, 530, 533, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 549, 550, 551, 552, 556, 557, 560, 561, 564, + 568, 569, 570, 573, 575, 577, 579, 583, 584, 587, + 590, 591, 594, 595, 596, 598, 599, 600, 601, 602, + 603, 607, 608, 611, 612, 613, 614, 615, 616, 619, + 620, 621, 624, 626, 627, 628, 629, 630, 631, 636, + 637, 640, 641, 644, 645, 648, 654, 655, 658, 659, + 662, 663, 666, 670, 673, 674 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const grib_yytname[] = +{ + "$end", "error", "$undefined", "LOWERCASE", "IF", "IF_TRANSIENT", + "ELSE", "END", "UNSIGNED", "TEMPLATE", "TEMPLATE_NOFAIL", "TRIGGER", + "ASCII", "KSEC1EXPVER", "LABEL", "LIST", "WHILE", "IBMFLOAT", "SIGNED", + "BYTE", "CODETABLE", "COMPLEX_CODETABLE", "LOOKUP", "ALIAS", "UNALIAS", + "META", "POS", "INTCONST", "TRANS", "FLAGBIT", "CONCEPT", + "CONCEPT_NOFAIL", "NIL", "DUMMY", "MODIFY", "READ_ONLY", "STRING_TYPE", + "LONG_TYPE", "NO_COPY", "DUMP", "NO_FAIL", "EDITION_SPECIFIC", + "OVERRIDE", "HIDDEN", "CAN_BE_MISSING", "MISSING", "CONSTRAINT", + "COPY_OK", "WHEN", "SET", "SET_NOFAIL", "WRITE", "APPEND", "PRINT", + "EXPORT", "REMOVE", "SKIP", "PAD", "SECTION_PADDING", "MESSAGE", "PADTO", + "PADTOEVEN", "PADTOMULTIPLE", "G1_HALF_BYTE", "G1_MESSAGE_LENGTH", + "G1_SECTION4_LENGTH", "SECTION_LENGTH", "FLAG", "ITERATOR", "NEAREST", + "BOX", "KSEC", "ASSERT", "CASE", "SWITCH", "DEFAULT", "EQ", "NE", "GE", + "LE", "BIT", "BITOFF", "AND", "OR", "NOT", "IS", "IDENT", "STRING", + "INTEGER", "FLOAT", "','", "';'", "'['", "']'", "'('", "')'", "'.'", + "'='", "'{'", "'}'", "':'", "'-'", "'^'", "'*'", "'/'", "'%'", "'+'", + "'>'", "'<'", "$accept", "all", "empty", "dvalues", "instructions", + "instruction", "semi", "argument_list", "arguments", "argument", + "simple", "if_block", "when_block", "set", "set_list", "default", + "flags", "flag_list", "flag", "list_block", "while_block", + "trigger_block", "concept_block", "concept_list", "case_list", + "case_value", "switch_block", "concept_value", "concept_conditions", + "concept_condition", "string_or_ident", "atom", "power", "factor", + "term", "condition", "conjonction", "disjonction", "expression", "rule", + "rule_entry", "rule_entries", "fact", "conditional_rule", "rules", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const grib_yytype_uint16 grib_yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 44, 59, 91, 93, 40, 41, 46, 61, 123, 125, + 58, 45, 94, 42, 47, 37, 43, 62, 60 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const grib_yytype_uint8 grib_yyr1[] = +{ + 0, 109, 110, 110, 110, 110, 110, 111, 112, 112, + 112, 112, 113, 113, 113, 113, 114, 114, 114, 114, + 114, 114, 114, 114, 115, 115, 116, 116, 117, 117, + 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 120, 120, 120, 120, 121, 121, + 121, 122, 122, 123, 123, 124, 124, 125, 125, 126, + 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 128, 129, 130, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 132, 132, 133, 133, 134, + 135, 135, 135, 136, 136, 136, 136, 137, 137, 138, + 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 141, 141, 142, 142, 142, 142, 142, 142, 143, + 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 145, 145, 146, 146, 147, 148, 148, 149, 149, + 150, 150, 151, 152, 153, 153 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const grib_yytype_uint8 grib_yyr2[] = +{ + 0, 2, 1, 1, 1, 1, 1, 0, 1, 3, + 1, 3, 1, 2, 3, 2, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, + 1, 7, 10, 7, 10, 7, 7, 7, 10, 7, + 7, 10, 7, 10, 8, 12, 10, 8, 10, 8, + 9, 7, 2, 2, 4, 6, 7, 2, 5, 5, + 4, 6, 7, 2, 5, 8, 8, 3, 5, 5, + 5, 5, 6, 3, 3, 3, 5, 2, 7, 4, + 8, 10, 5, 5, 5, 5, 2, 4, 3, 4, + 4, 6, 4, 2, 1, 5, 4, 2, 1, 5, + 4, 2, 5, 1, 7, 11, 7, 11, 6, 7, + 11, 4, 4, 2, 3, 1, 2, 1, 2, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 8, 7, 7, 6, 9, + 12, 14, 10, 14, 12, 8, 11, 6, 9, 12, + 10, 14, 12, 8, 11, 1, 2, 1, 2, 4, + 10, 9, 7, 5, 5, 5, 5, 1, 2, 4, + 1, 1, 1, 1, 1, 1, 1, 3, 2, 3, + 4, 3, 1, 3, 3, 3, 3, 3, 1, 3, + 3, 1, 3, 3, 3, 3, 3, 3, 3, 2, + 1, 3, 1, 3, 1, 1, 1, 1, 4, 2, + 1, 2, 1, 7, 1, 2 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const grib_yytype_uint8 grib_yydefact[] = +{ + 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 94, 98, 103, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 4, 12, 0, 17, 22, 18, 19, 20, 21, 3, + 23, 155, 214, 212, 206, 207, 5, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 52, 53, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 77, 0, 57, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 93, + 0, 97, 0, 101, 0, 0, 175, 176, 0, 170, + 171, 173, 174, 0, 0, 26, 86, 27, 28, 172, + 182, 188, 191, 200, 202, 204, 205, 30, 209, 0, + 7, 0, 0, 0, 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 7, 0, 1, 0, 0, 0, 15, 13, 16, 0, + 0, 156, 0, 0, 215, 0, 0, 0, 0, 74, + 75, 0, 0, 0, 0, 0, 0, 7, 115, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 117, 88, 0, 0, 0, 0, 0, 0, 7, + 199, 0, 0, 172, 178, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 73, 0, 7, 7, 7, 0, + 0, 0, 0, 7, 7, 7, 67, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 116, 54, 0, 0, 0, 0, 0, + 0, 0, 7, 79, 7, 0, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 122, 132, 121, 133, 134, + 124, 123, 125, 127, 130, 126, 128, 129, 131, 118, + 119, 0, 89, 0, 90, 92, 96, 100, 0, 0, + 179, 0, 177, 29, 170, 198, 181, 186, 187, 183, + 184, 185, 190, 189, 193, 197, 195, 196, 192, 194, + 201, 203, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 0, 0, 0, 0, 167, + 208, 0, 0, 0, 7, 60, 0, 0, 0, 0, + 0, 7, 7, 0, 7, 7, 7, 0, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 76, 0, 0, + 58, 59, 7, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 10, 8, + 0, 95, 99, 102, 85, 180, 68, 7, 69, 70, + 71, 0, 0, 64, 0, 82, 83, 84, 0, 0, + 0, 164, 168, 163, 165, 7, 7, 166, 0, 0, + 0, 0, 210, 0, 0, 7, 7, 7, 7, 0, + 7, 7, 7, 0, 7, 55, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 138, 0, 0, 0, 0, + 147, 120, 0, 0, 0, 0, 24, 108, 0, 91, + 72, 7, 7, 7, 0, 0, 157, 0, 0, 7, + 61, 0, 0, 104, 211, 213, 106, 0, 31, 0, + 33, 137, 35, 36, 39, 136, 56, 0, 40, 0, + 42, 0, 37, 0, 30, 7, 0, 7, 0, 78, + 7, 0, 51, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 7, 0, 0, 113, 109, 0, 25, 11, + 9, 0, 0, 7, 0, 0, 162, 158, 0, 169, + 62, 0, 0, 7, 7, 7, 7, 7, 7, 0, + 44, 7, 47, 7, 80, 7, 0, 7, 0, 0, + 145, 0, 7, 0, 0, 153, 111, 112, 0, 114, + 65, 66, 49, 0, 0, 135, 0, 0, 7, 7, + 7, 7, 7, 7, 0, 7, 50, 7, 0, 7, + 139, 0, 0, 0, 7, 148, 0, 0, 0, 159, + 161, 0, 0, 0, 32, 34, 41, 43, 38, 46, + 0, 48, 81, 0, 142, 0, 7, 0, 150, 0, + 7, 0, 160, 105, 107, 7, 0, 7, 0, 7, + 146, 7, 0, 7, 154, 110, 45, 0, 140, 0, + 144, 149, 0, 152, 7, 7, 7, 141, 143, 151 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const grib_yytype_int16 grib_yydefgoto[] = +{ + -1, 58, 211, 420, 451, 61, 497, 126, 127, 128, + 62, 63, 64, 494, 495, 189, 212, 319, 320, 65, + 66, 67, 68, 69, 505, 506, 70, 71, 368, 369, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 72, + 452, 453, 74, 75, 76 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -476 +static const grib_yytype_int16 grib_yypact[] = +{ + 1009, -476, -61, -44, 115, -22, -8, -9, -32, 12, + 92, 13, 36, 202, 58, 62, 73, 93, 75, 85, + 106, 109, 130, 137, 141, 144, 184, 196, 107, 205, + 211, -63, -21, -19, 213, 148, 218, 238, 248, 147, + 253, 266, 269, 281, 278, 290, 294, 298, 293, 308, + 315, 316, 309, 310, -11, 319, 320, -45, 407, -476, + -476, 1095, 328, -476, -476, -476, -476, -476, -476, 289, + -476, -476, 6, -476, -476, -476, -476, 148, 148, 332, + 333, 335, 336, 148, 337, 338, -476, -476, 148, -3, + 339, 340, 342, 343, 344, 345, 215, 341, -37, -476, + 346, 348, 347, 192, 206, 334, 148, 349, 350, -476, + 351, -476, 352, -476, 355, 356, -476, -476, 148, 357, + -476, -476, -476, 148, 110, -476, -476, -476, 363, 353, + 354, -476, 79, 2, 37, 372, 374, -476, -476, 361, + 334, 370, 365, 366, 367, -476, 375, 377, 384, 388, + 396, 397, 398, 148, 148, 148, 399, 11, 400, 401, + 14, 402, -476, 403, 420, 408, 1266, -476, -476, 404, + 405, -476, 409, 414, -476, 411, 417, 421, 418, -476, + -476, 423, 424, 426, 425, 148, 410, 148, -476, 334, + 428, 427, 430, 431, 432, 433, 429, 441, 442, 435, + 444, 148, 148, 148, 445, 446, 289, 447, 448, 289, + 307, -476, -476, 440, -17, 148, 443, 449, 450, 148, + 37, 69, 451, -476, -476, 148, 228, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 148, 148, 148, -476, 454, 148, 148, 148, 455, + 456, 457, 458, 148, 148, 148, -476, 459, 460, 148, + 453, 413, 453, 453, 148, 466, 334, 453, 148, -476, + 438, 148, 148, 439, 462, 467, 470, 463, 235, 471, + 465, 472, 419, -476, -476, 480, 482, 483, 484, 485, + 486, 461, 334, -476, 148, 487, 334, 334, 479, 28, + -62, -41, 29, 27, 101, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, 452, + -476, -15, -476, 242, -476, -476, 488, 489, 491, 492, + -476, 494, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, 79, 79, 2, 2, 2, 2, 2, 2, + 37, 372, 495, 500, 496, 498, 499, 509, 510, 511, + 513, 505, 506, 507, -476, 517, 516, 508, 518, 453, + -476, 519, 521, 529, 419, -476, 525, 531, 532, 1183, + 1266, 54, 55, 1266, 419, 419, 419, 1266, 419, 334, + 76, 77, 80, 219, 239, 534, 544, -476, 536, 539, + -476, -476, 419, 547, 537, 550, 289, 334, 551, 541, + 554, 289, 334, 307, 556, 558, 287, 546, -476, -476, + -34, -476, -476, -476, -476, -476, -476, 334, -476, -476, + -476, 552, 553, -476, 148, -476, -476, -476, 572, 555, + 148, -476, -476, -476, -476, 419, 334, -476, 557, 559, + -10, 549, -35, 560, 561, 148, 334, 148, 334, 563, + 334, 334, 334, 564, 334, -476, 148, 334, 148, 334, + 148, 334, 148, 419, 148, 419, 148, 334, 419, 148, + 334, 562, 289, 96, 126, -476, 566, 289, 113, 132, + -476, -476, 567, 569, 546, -23, -476, 576, 284, -476, + -476, 148, 148, 419, 148, -36, -476, 1266, 580, 334, + -476, 1266, -35, 643, -476, -476, 644, 565, -476, 579, + -476, -476, -476, -476, -476, -476, -476, 581, -476, 585, + -476, 586, -476, 578, 451, -26, 587, 334, 588, -476, + 334, 589, -476, 568, 170, 593, 583, 334, 599, 177, + 601, 592, 334, 148, 148, 576, 645, 546, -476, -476, + -476, 591, 596, 334, 395, 594, -476, -476, 597, -476, + -476, 595, 600, 419, 419, 419, 419, 419, 419, 603, + -476, 419, -476, 334, -476, 419, 134, 334, 605, 289, + -476, 143, 334, 610, 289, -476, -476, -476, 604, 576, + -476, -476, -476, 1266, 917, -476, 1266, 1266, 334, 334, + 334, 334, 334, 334, 615, 334, -476, 334, 617, 334, + -476, 619, 230, 620, 334, -476, 621, 270, 287, -476, + -476, 609, 611, 612, -476, -476, -476, -476, -476, -476, + 614, -476, -476, 150, -476, 153, 334, 618, -476, 178, + 334, -20, -476, -476, -476, 334, 626, 334, 628, 334, + -476, 334, 631, 334, -476, -476, -476, 623, -476, 624, + -476, -476, 625, -476, 334, 334, 334, -476, -476, -476 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const grib_yytype_int16 grib_yypgoto[] = +{ + -476, -476, 7, -476, 0, -476, -475, 422, -224, -147, + -476, -476, -476, -319, -192, -107, 152, -476, 127, -476, + -476, -476, -476, -189, -476, 38, -476, -60, -249, -476, + -99, 598, 133, 151, 175, -115, 481, -476, -66, -476, + 8, 272, -476, -476, 649 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -8 +static const grib_yytype_int16 grib_yytable[] = +{ + 60, 333, 417, 220, 156, 156, 256, 59, 73, 171, + 172, 175, 176, 371, 372, 116, 117, 301, 376, 555, + 304, 36, 184, 579, 109, 223, 414, 415, 322, 414, + 415, 110, 405, 77, 414, 415, 406, 504, 281, 565, + 213, 160, 125, 116, 117, 169, 55, 56, 170, 199, + 78, 173, 161, 266, 296, 297, 498, 222, 407, 200, + 84, 167, 36, 566, 81, 499, 111, 118, 113, 119, + 120, 121, 122, 112, 210, 114, 556, 123, 82, 665, + 73, 323, 599, 416, 124, 83, 157, 272, 257, 185, + 125, 261, 173, 186, 187, 118, 188, 119, 120, 121, + 122, 116, 117, 233, 85, 123, 264, 88, 234, 260, + 265, 187, 124, 235, 236, 237, 238, 373, 403, 408, + 442, 410, 89, 404, 409, 411, 350, 335, 223, 223, + 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 116, 117, 239, 240, 455, 457, 324, 325, + 92, 187, 187, 118, 93, 119, 120, 121, 122, 228, + 229, 96, 125, 123, 330, 94, 269, 188, 466, 468, + 124, 97, 470, 187, 187, 389, 557, 187, 86, 87, + 116, 117, 230, 231, 232, 95, 545, 169, 55, 56, + 170, 546, 98, 366, 125, 99, 119, 120, 121, 122, + 412, 106, 377, 550, 123, 378, 261, 79, 551, 80, + 125, 124, 169, 55, 56, 170, 100, 484, 169, 55, + 56, 170, 489, 101, 618, 547, 125, 102, 125, 619, + 103, 552, 118, 623, 119, 120, 121, 122, 624, 141, + 656, 171, 123, 658, 171, 657, 473, 475, 659, 124, + 125, 116, 117, 125, 125, 125, 169, 55, 56, 170, + 125, 125, 125, 169, 55, 56, 170, 446, 662, 587, + 104, 116, 117, 663, 456, 458, 592, 460, 461, 462, + 564, 464, 105, 467, 469, 471, 204, 503, 205, 188, + 206, 107, 244, 544, 90, 480, 91, 108, 549, 115, + 207, 125, 208, 118, 209, 119, 120, 121, 122, 138, + 305, 196, 197, 472, 334, 120, 169, 55, 56, 170, + 124, 384, 385, 118, 139, 119, 120, 121, 122, 646, + 418, 419, 557, 474, 140, 306, 414, 415, 509, 142, + 124, 284, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 143, 317, 318, 144, 169, 55, 56, 170, + 336, 337, 338, 339, 340, 341, 535, 145, 537, 650, + 146, 540, 559, 560, 508, 169, 55, 56, 170, 150, + 454, 188, 147, 459, 342, 343, 148, 463, 188, 188, + 149, 188, 188, 188, 151, 188, 563, 188, 188, 188, + 622, 152, 153, 154, 155, 627, 534, 162, 534, 188, + 344, 345, 346, 347, 348, 349, 158, 159, 375, 168, + 177, 178, 179, 180, 171, 182, 183, 190, 191, 171, + 192, 193, 194, 195, 210, 156, 651, 198, 226, 216, + 217, 203, 218, 201, 397, 202, 214, 215, 400, 401, + 219, 221, 188, 225, 241, 243, 227, 242, 245, 246, + 247, 248, 125, 249, 125, 250, 608, 609, 610, 611, + 612, 613, 251, 125, 615, 125, 252, 125, 617, 125, + 188, 125, 188, 125, 171, 188, 125, 596, 597, 171, + 253, 254, 255, 259, 160, 603, 282, 268, 262, 263, + 267, 270, 161, 271, 370, 181, 273, 568, 125, 125, + 188, 272, 274, 276, 275, 291, 187, 278, 277, 279, + 280, 285, 286, 287, 288, 289, 290, 292, 293, 294, + 295, 299, 300, 302, 303, 321, 260, 379, 326, 367, + 491, 465, 413, 567, 327, 328, 332, 353, 357, 358, + 359, 360, 374, 381, 364, 365, 382, 386, 396, 485, + 380, 383, 171, 387, 490, 388, 390, 171, 391, 392, + 393, 394, 395, 399, 402, 421, 422, 258, 423, 500, + 188, 188, 188, 188, 188, 188, 427, 424, 188, 425, + 426, 428, 188, 429, 430, 431, 432, 433, 510, 434, + 435, 436, 437, 629, 631, 440, 632, 633, 518, 283, + 520, 439, 522, 523, 524, 438, 526, 441, 443, 528, + 444, 530, 445, 532, 447, 298, 448, 449, 476, 539, + 477, 478, 542, 479, 481, 482, 483, 496, 486, 487, + 488, 329, 492, 331, 493, 504, 501, 502, 513, 571, + 572, 598, 543, 507, 586, 511, 548, 512, 573, 515, + 516, 570, 521, 525, 553, 352, 554, 558, 354, 355, + 356, 569, 574, 578, 575, 361, 362, 363, 576, 577, + 588, 589, 581, 583, 585, 591, 600, 580, 593, 582, + 594, 601, 584, 606, 604, 621, 605, 614, 607, 590, + 626, 640, 628, 643, 595, 645, 647, 649, 652, 655, + 653, 654, 667, 661, 669, 602, 398, 672, 674, 675, + 676, 174, 224, 351, 514, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 616, 0, 0, 0, 620, + 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 634, 635, 636, 637, 638, 639, 0, 641, 0, 642, + 0, 644, 0, 0, 0, 0, 648, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, + 0, 0, 664, 0, 0, 0, 0, 666, 0, 668, + 0, 670, 0, 671, 0, 673, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 677, 678, 679, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 517, 0, 519, + 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, + 529, 0, 531, 0, 533, 0, 536, 0, 538, 0, + 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 163, 3, 561, 562, 4, 5, 6, 7, 8, + 9, 10, 0, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 0, + 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 28, 29, 30, 31, 32, + 33, 34, 35, 0, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 164, 0, 0, 165, 0, 0, -7, + 1, 0, 0, 2, 3, 0, 630, 4, 5, 6, + 7, 8, 9, 10, 0, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 0, 0, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 0, 53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 54, 55, 56, 57, 163, + 3, 0, 0, 4, 5, 6, 7, 8, 9, 10, + 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 28, 29, 30, 31, 32, 33, 34, + 35, 0, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 0, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 164, 0, 0, 165, 0, 166, 163, 3, 0, + 0, 4, 5, 6, 7, 8, 9, 10, 0, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 0, 53, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 450, + 163, 3, 165, 0, 4, 5, 6, 7, 8, 9, + 10, 0, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 0, 0, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 29, 30, 31, 32, 33, + 34, 35, 0, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 0, + 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 164, 0, 0, 165 +}; + +static const grib_yytype_int16 grib_yycheck[] = +{ + 0, 225, 321, 118, 15, 15, 153, 0, 0, 69, + 4, 77, 78, 262, 263, 32, 33, 206, 267, 494, + 209, 56, 88, 49, 87, 124, 49, 50, 45, 49, + 50, 94, 94, 94, 49, 50, 98, 73, 185, 75, + 106, 86, 35, 32, 33, 86, 87, 88, 89, 86, + 94, 86, 97, 160, 201, 202, 90, 123, 99, 96, + 92, 61, 56, 99, 86, 99, 87, 84, 87, 86, + 87, 88, 89, 94, 100, 94, 99, 94, 86, 99, + 72, 98, 557, 98, 101, 94, 97, 97, 154, 92, + 83, 157, 86, 96, 97, 84, 89, 86, 87, 88, + 89, 32, 33, 101, 92, 94, 92, 94, 106, 98, + 96, 97, 101, 76, 77, 78, 79, 264, 90, 90, + 369, 94, 86, 95, 95, 98, 241, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 32, 33, 107, 108, 92, 92, 214, 215, + 92, 97, 97, 84, 92, 86, 87, 88, 89, 80, + 81, 86, 155, 94, 95, 92, 166, 160, 92, 92, + 101, 86, 92, 97, 97, 282, 495, 97, 86, 87, + 32, 33, 103, 104, 105, 92, 90, 86, 87, 88, + 89, 95, 86, 259, 187, 86, 86, 87, 88, 89, + 99, 94, 268, 90, 94, 271, 272, 92, 95, 94, + 203, 101, 86, 87, 88, 89, 86, 406, 86, 87, + 88, 89, 411, 86, 90, 99, 219, 86, 221, 95, + 86, 99, 84, 90, 86, 87, 88, 89, 95, 92, + 90, 301, 94, 90, 304, 95, 393, 394, 95, 101, + 243, 32, 33, 246, 247, 248, 86, 87, 88, 89, + 253, 254, 255, 86, 87, 88, 89, 374, 90, 99, + 86, 32, 33, 95, 381, 382, 99, 384, 385, 386, + 504, 388, 86, 390, 391, 392, 94, 434, 96, 282, + 98, 86, 140, 482, 92, 402, 94, 86, 487, 86, + 94, 294, 96, 84, 98, 86, 87, 88, 89, 91, + 3, 96, 97, 94, 86, 87, 86, 87, 88, 89, + 101, 86, 87, 84, 86, 86, 87, 88, 89, 99, + 88, 89, 651, 94, 86, 28, 49, 50, 445, 86, + 101, 189, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 86, 46, 47, 86, 86, 87, 88, 89, + 227, 228, 229, 230, 231, 232, 473, 86, 475, 99, + 92, 478, 88, 89, 440, 86, 87, 88, 89, 86, + 380, 374, 92, 383, 233, 234, 92, 387, 381, 382, + 92, 384, 385, 386, 86, 388, 503, 390, 391, 392, + 589, 86, 86, 94, 94, 594, 472, 0, 474, 402, + 235, 236, 237, 238, 239, 240, 97, 97, 266, 91, + 88, 88, 87, 87, 484, 88, 88, 88, 88, 489, + 88, 88, 88, 88, 100, 15, 628, 96, 85, 88, + 88, 94, 87, 97, 292, 97, 97, 97, 296, 297, + 94, 94, 445, 90, 82, 94, 102, 83, 88, 94, + 94, 94, 455, 88, 457, 88, 573, 574, 575, 576, + 577, 578, 88, 466, 581, 468, 88, 470, 585, 472, + 473, 474, 475, 476, 544, 478, 479, 553, 554, 549, + 94, 94, 94, 94, 86, 100, 86, 94, 98, 98, + 98, 97, 97, 94, 91, 83, 95, 507, 501, 502, + 503, 97, 95, 95, 93, 86, 97, 93, 95, 93, + 95, 93, 95, 93, 93, 93, 93, 86, 86, 94, + 86, 86, 86, 86, 86, 95, 98, 98, 95, 86, + 413, 389, 90, 505, 95, 95, 95, 93, 93, 93, + 93, 93, 86, 86, 95, 95, 86, 86, 97, 407, + 98, 98, 622, 98, 412, 93, 86, 627, 86, 86, + 86, 86, 86, 86, 95, 87, 87, 155, 87, 427, + 573, 574, 575, 576, 577, 578, 86, 95, 581, 95, + 95, 95, 585, 95, 95, 86, 86, 86, 446, 86, + 95, 95, 95, 603, 604, 97, 606, 607, 456, 187, + 458, 95, 460, 461, 462, 98, 464, 99, 99, 467, + 99, 469, 93, 471, 99, 203, 95, 95, 94, 477, + 86, 95, 480, 94, 87, 98, 86, 91, 87, 98, + 86, 219, 86, 221, 86, 73, 94, 94, 99, 6, + 6, 6, 90, 98, 86, 98, 90, 98, 93, 99, + 99, 509, 99, 99, 97, 243, 97, 91, 246, 247, + 248, 91, 93, 95, 93, 253, 254, 255, 93, 93, + 87, 98, 95, 95, 95, 86, 95, 535, 87, 537, + 98, 95, 540, 98, 100, 90, 99, 94, 98, 547, + 90, 86, 98, 86, 552, 86, 86, 86, 99, 95, + 99, 99, 86, 95, 86, 563, 294, 86, 95, 95, + 95, 72, 124, 242, 452, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 583, -1, -1, -1, 587, + -1, -1, -1, -1, 592, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 608, 609, 610, 611, 612, 613, -1, 615, -1, 617, + -1, 619, -1, -1, -1, -1, 624, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 646, -1, + -1, -1, 650, -1, -1, -1, -1, 655, -1, 657, + -1, 659, -1, 661, -1, 663, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 674, 675, 676, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 455, -1, 457, + -1, -1, -1, -1, -1, -1, -1, -1, 466, -1, + 468, -1, 470, -1, 472, -1, 474, -1, 476, -1, + -1, 479, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4, 5, 501, 502, 8, 9, 10, 11, 12, + 13, 14, -1, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, + -1, 34, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 86, -1, -1, 89, -1, -1, 0, + 1, -1, -1, 4, 5, -1, 99, 8, 9, 10, + 11, 12, 13, 14, -1, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, -1, -1, 34, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, -1, 74, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 86, 87, 88, 89, 4, + 5, -1, -1, 8, 9, 10, 11, 12, 13, 14, + -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, -1, -1, 34, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, -1, 74, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 86, -1, -1, 89, -1, 91, 4, 5, -1, + -1, 8, 9, 10, 11, 12, 13, 14, -1, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, -1, -1, 34, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, -1, 74, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, + 4, 5, 89, -1, 8, 9, 10, 11, 12, 13, + 14, -1, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, + 34, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, -1, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, -1, + 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 86, -1, -1, 89 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const grib_yytype_uint8 grib_yystos[] = +{ + 0, 1, 4, 5, 8, 9, 10, 11, 12, 13, + 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 34, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 74, 86, 87, 88, 89, 110, 111, + 113, 114, 119, 120, 121, 128, 129, 130, 131, 132, + 135, 136, 148, 149, 151, 152, 153, 94, 94, 92, + 94, 86, 86, 94, 92, 92, 86, 87, 94, 86, + 92, 94, 92, 92, 92, 92, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 94, 86, 86, 87, + 94, 87, 94, 87, 94, 86, 32, 33, 84, 86, + 87, 88, 89, 94, 101, 111, 116, 117, 118, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 91, 86, + 86, 92, 86, 86, 86, 86, 92, 92, 92, 92, + 86, 86, 86, 86, 94, 94, 15, 97, 97, 97, + 86, 97, 0, 4, 86, 89, 91, 113, 91, 86, + 89, 136, 4, 86, 153, 147, 147, 88, 88, 87, + 87, 116, 88, 88, 147, 92, 96, 97, 111, 124, + 88, 88, 88, 88, 88, 88, 96, 97, 96, 86, + 96, 97, 97, 94, 94, 96, 98, 94, 96, 98, + 100, 111, 125, 147, 97, 97, 88, 88, 87, 94, + 144, 94, 147, 139, 140, 90, 85, 102, 80, 81, + 103, 104, 105, 101, 106, 76, 77, 78, 79, 107, + 108, 82, 83, 94, 125, 88, 94, 94, 94, 88, + 88, 88, 88, 94, 94, 94, 118, 147, 116, 94, + 98, 147, 98, 98, 92, 96, 124, 98, 94, 113, + 97, 94, 97, 95, 95, 93, 95, 95, 93, 93, + 95, 118, 86, 116, 125, 93, 95, 93, 93, 93, + 93, 86, 86, 86, 94, 86, 118, 118, 116, 86, + 86, 132, 86, 86, 132, 3, 28, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 46, 47, 126, + 127, 95, 45, 98, 147, 147, 95, 95, 95, 116, + 95, 116, 95, 117, 86, 139, 141, 141, 141, 141, + 141, 141, 142, 142, 143, 143, 143, 143, 143, 143, + 144, 145, 116, 93, 116, 116, 116, 93, 93, 93, + 93, 116, 116, 116, 95, 95, 147, 86, 137, 138, + 91, 137, 137, 118, 86, 125, 137, 147, 147, 98, + 98, 86, 86, 98, 86, 87, 86, 98, 93, 124, + 86, 86, 86, 86, 86, 86, 97, 125, 116, 86, + 125, 125, 95, 90, 95, 94, 98, 99, 90, 95, + 94, 98, 99, 90, 49, 50, 98, 122, 88, 89, + 112, 87, 87, 87, 95, 95, 95, 86, 95, 95, + 95, 86, 86, 86, 86, 95, 95, 95, 98, 95, + 97, 99, 137, 99, 99, 93, 124, 99, 95, 95, + 86, 113, 149, 150, 113, 92, 124, 92, 124, 113, + 124, 124, 124, 113, 124, 125, 92, 124, 92, 124, + 92, 124, 94, 118, 94, 118, 94, 86, 95, 94, + 124, 87, 98, 86, 132, 125, 87, 98, 86, 132, + 125, 127, 86, 86, 122, 123, 91, 115, 90, 99, + 125, 94, 94, 118, 73, 133, 134, 98, 147, 124, + 125, 98, 98, 99, 150, 99, 99, 116, 125, 116, + 125, 99, 125, 125, 125, 99, 125, 116, 125, 116, + 125, 116, 125, 116, 147, 124, 116, 124, 116, 125, + 124, 116, 125, 90, 132, 90, 95, 99, 90, 132, + 90, 95, 99, 97, 97, 115, 99, 122, 91, 88, + 89, 116, 116, 124, 117, 75, 99, 134, 113, 91, + 125, 6, 6, 93, 93, 93, 93, 93, 95, 49, + 125, 95, 125, 95, 125, 95, 86, 99, 87, 98, + 125, 86, 99, 87, 98, 125, 147, 147, 6, 115, + 95, 95, 125, 100, 100, 99, 98, 98, 124, 124, + 124, 124, 124, 124, 94, 124, 125, 124, 90, 95, + 125, 90, 132, 90, 95, 125, 90, 132, 98, 113, + 99, 113, 113, 113, 125, 125, 125, 125, 125, 125, + 86, 125, 125, 86, 125, 86, 99, 86, 125, 86, + 99, 123, 99, 99, 99, 95, 90, 95, 90, 95, + 125, 95, 90, 95, 125, 99, 125, 86, 125, 86, + 125, 125, 86, 125, 95, 95, 95, 125, 125, 125 +}; + +#define grib_yyerrok (grib_yyerrstatus = 0) +#define grib_yyclearin (grib_yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto grib_yyacceptlab +#define YYABORT goto grib_yyabortlab +#define YYERROR goto grib_yyerrorlab + + +/* Like YYERROR except do call grib_yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto grib_yyerrlab + +#define YYRECOVERING() (!!grib_yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (grib_yychar == YYEMPTY && grib_yylen == 1) \ + { \ + grib_yychar = (Token); \ + grib_yylval = (Value); \ + grib_yytoken = YYTRANSLATE (grib_yychar); \ + YYPOPSTACK (1); \ + goto grib_yybackup; \ + } \ + else \ + { \ + grib_yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `grib_yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX grib_yylex (YYLEX_PARAM) +#else +# define YYLEX grib_yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (grib_yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (grib_yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + grib_yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +grib_yy_symbol_value_print (FILE *grib_yyoutput, int grib_yytype, YYSTYPE const * const grib_yyvaluep) +#else +static void +grib_yy_symbol_value_print (grib_yyoutput, grib_yytype, grib_yyvaluep) + FILE *grib_yyoutput; + int grib_yytype; + YYSTYPE const * const grib_yyvaluep; +#endif +{ + if (!grib_yyvaluep) + return; +# ifdef YYPRINT + if (grib_yytype < YYNTOKENS) + YYPRINT (grib_yyoutput, grib_yytoknum[grib_yytype], *grib_yyvaluep); +# else + YYUSE (grib_yyoutput); +# endif + switch (grib_yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +grib_yy_symbol_print (FILE *grib_yyoutput, int grib_yytype, YYSTYPE const * const grib_yyvaluep) +#else +static void +grib_yy_symbol_print (grib_yyoutput, grib_yytype, grib_yyvaluep) + FILE *grib_yyoutput; + int grib_yytype; + YYSTYPE const * const grib_yyvaluep; +#endif +{ + if (grib_yytype < YYNTOKENS) + YYFPRINTF (grib_yyoutput, "token %s (", grib_yytname[grib_yytype]); + else + YYFPRINTF (grib_yyoutput, "nterm %s (", grib_yytname[grib_yytype]); + + grib_yy_symbol_value_print (grib_yyoutput, grib_yytype, grib_yyvaluep); + YYFPRINTF (grib_yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| grib_yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +grib_yy_stack_print (grib_yytype_int16 *grib_yybottom, grib_yytype_int16 *grib_yytop) +#else +static void +grib_yy_stack_print (grib_yybottom, grib_yytop) + grib_yytype_int16 *grib_yybottom; + grib_yytype_int16 *grib_yytop; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; grib_yybottom <= grib_yytop; grib_yybottom++) + { + int grib_yybot = *grib_yybottom; + YYFPRINTF (stderr, " %d", grib_yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (grib_yydebug) \ + grib_yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +grib_yy_reduce_print (YYSTYPE *grib_yyvsp, int grib_yyrule) +#else +static void +grib_yy_reduce_print (grib_yyvsp, grib_yyrule) + YYSTYPE *grib_yyvsp; + int grib_yyrule; +#endif +{ + int grib_yynrhs = grib_yyr2[grib_yyrule]; + int grib_yyi; + unsigned long int grib_yylno = grib_yyrline[grib_yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + grib_yyrule - 1, grib_yylno); + /* The symbols being reduced. */ + for (grib_yyi = 0; grib_yyi < grib_yynrhs; grib_yyi++) + { + YYFPRINTF (stderr, " $%d = ", grib_yyi + 1); + grib_yy_symbol_print (stderr, grib_yyrhs[grib_yyprhs[grib_yyrule] + grib_yyi], + &(grib_yyvsp[(grib_yyi + 1) - (grib_yynrhs)]) + ); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (grib_yydebug) \ + grib_yy_reduce_print (grib_yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int grib_yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef grib_yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define grib_yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +grib_yystrlen (const char *grib_yystr) +#else +static YYSIZE_T +grib_yystrlen (grib_yystr) + const char *grib_yystr; +#endif +{ + YYSIZE_T grib_yylen; + for (grib_yylen = 0; grib_yystr[grib_yylen]; grib_yylen++) + continue; + return grib_yylen; +} +# endif +# endif + +# ifndef grib_yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define grib_yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +grib_yystpcpy (char *grib_yydest, const char *grib_yysrc) +#else +static char * +grib_yystpcpy (grib_yydest, grib_yysrc) + char *grib_yydest; + const char *grib_yysrc; +#endif +{ + char *grib_yyd = grib_yydest; + const char *grib_yys = grib_yysrc; + + while ((*grib_yyd++ = *grib_yys++) != '\0') + continue; + + return grib_yyd - 1; +} +# endif +# endif + +# ifndef grib_yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for grib_yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from grib_yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +grib_yytnamerr (char *grib_yyres, const char *grib_yystr) +{ + if (*grib_yystr == '"') + { + YYSIZE_T grib_yyn = 0; + char const *grib_yyp = grib_yystr; + + for (;;) + switch (*++grib_yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++grib_yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (grib_yyres) + grib_yyres[grib_yyn] = *grib_yyp; + grib_yyn++; + break; + + case '"': + if (grib_yyres) + grib_yyres[grib_yyn] = '\0'; + return grib_yyn; + } + do_not_strip_quotes: ; + } + + if (! grib_yyres) + return grib_yystrlen (grib_yystr); + + return grib_yystpcpy (grib_yyres, grib_yystr) - grib_yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +grib_yysyntax_error (char *grib_yyresult, int grib_yystate, int grib_yychar) +{ + int grib_yyn = grib_yypact[grib_yystate]; + + if (! (YYPACT_NINF < grib_yyn && grib_yyn <= YYLAST)) + return 0; + else + { + int grib_yytype = YYTRANSLATE (grib_yychar); + YYSIZE_T grib_yysize0 = grib_yytnamerr (0, grib_yytname[grib_yytype]); + YYSIZE_T grib_yysize = grib_yysize0; + YYSIZE_T grib_yysize1; + int grib_yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *grib_yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int grib_yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *grib_yyfmt; + char const *grib_yyf; + static char const grib_yyunexpected[] = "syntax error, unexpected %s"; + static char const grib_yyexpecting[] = ", expecting %s"; + static char const grib_yyor[] = " or %s"; + char grib_yyformat[sizeof grib_yyunexpected + + sizeof grib_yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof grib_yyor - 1))]; + char const *grib_yyprefix = grib_yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int grib_yyxbegin = grib_yyn < 0 ? -grib_yyn : 0; + + /* Stay within bounds of both grib_yycheck and grib_yytname. */ + int grib_yychecklim = YYLAST - grib_yyn + 1; + int grib_yyxend = grib_yychecklim < YYNTOKENS ? grib_yychecklim : YYNTOKENS; + int grib_yycount = 1; + + grib_yyarg[0] = grib_yytname[grib_yytype]; + grib_yyfmt = grib_yystpcpy (grib_yyformat, grib_yyunexpected); + + for (grib_yyx = grib_yyxbegin; grib_yyx < grib_yyxend; ++grib_yyx) + if (grib_yycheck[grib_yyx + grib_yyn] == grib_yyx && grib_yyx != YYTERROR) + { + if (grib_yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + grib_yycount = 1; + grib_yysize = grib_yysize0; + grib_yyformat[sizeof grib_yyunexpected - 1] = '\0'; + break; + } + grib_yyarg[grib_yycount++] = grib_yytname[grib_yyx]; + grib_yysize1 = grib_yysize + grib_yytnamerr (0, grib_yytname[grib_yyx]); + grib_yysize_overflow |= (grib_yysize1 < grib_yysize); + grib_yysize = grib_yysize1; + grib_yyfmt = grib_yystpcpy (grib_yyfmt, grib_yyprefix); + grib_yyprefix = grib_yyor; + } + + grib_yyf = YY_(grib_yyformat); + grib_yysize1 = grib_yysize + grib_yystrlen (grib_yyf); + grib_yysize_overflow |= (grib_yysize1 < grib_yysize); + grib_yysize = grib_yysize1; + + if (grib_yysize_overflow) + return YYSIZE_MAXIMUM; + + if (grib_yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *grib_yyp = grib_yyresult; + int grib_yyi = 0; + while ((*grib_yyp = *grib_yyf) != '\0') + { + if (*grib_yyp == '%' && grib_yyf[1] == 's' && grib_yyi < grib_yycount) + { + grib_yyp += grib_yytnamerr (grib_yyp, grib_yyarg[grib_yyi++]); + grib_yyf += 2; + } + else + { + grib_yyp++; + grib_yyf++; + } + } + } + return grib_yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +grib_yydestruct (const char *grib_yymsg, int grib_yytype, YYSTYPE *grib_yyvaluep) +#else +static void +grib_yydestruct (grib_yymsg, grib_yytype, grib_yyvaluep) + const char *grib_yymsg; + int grib_yytype; + YYSTYPE *grib_yyvaluep; +#endif +{ + YYUSE (grib_yyvaluep); + + if (!grib_yymsg) + grib_yymsg = "Deleting"; + YY_SYMBOL_PRINT (grib_yymsg, grib_yytype, grib_yyvaluep, grib_yylocationp); + + switch (grib_yytype) + { + + default: + break; + } +} + +/* Prevent warnings from -Wmissing-prototypes. */ +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int grib_yyparse (void *YYPARSE_PARAM); +#else +int grib_yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int grib_yyparse (void); +#else +int grib_yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + +/* The lookahead symbol. */ +int grib_yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE grib_yylval; + +/* Number of syntax errors so far. */ +int grib_yynerrs; + + + +/*-------------------------. +| grib_yyparse or grib_yypush_parse. | +`-------------------------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +grib_yyparse (void *YYPARSE_PARAM) +#else +int +grib_yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +grib_yyparse (void) +#else +int +grib_yyparse () + +#endif +#endif +{ + + + int grib_yystate; + /* Number of tokens to shift before error messages enabled. */ + int grib_yyerrstatus; + + /* The stacks and their tools: + `grib_yyss': related to states. + `grib_yyvs': related to semantic values. + + Refer to the stacks thru separate pointers, to allow grib_yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + grib_yytype_int16 grib_yyssa[YYINITDEPTH]; + grib_yytype_int16 *grib_yyss; + grib_yytype_int16 *grib_yyssp; + + /* The semantic value stack. */ + YYSTYPE grib_yyvsa[YYINITDEPTH]; + YYSTYPE *grib_yyvs; + YYSTYPE *grib_yyvsp; + + YYSIZE_T grib_yystacksize; + + int grib_yyn; + int grib_yyresult; + /* Lookahead token as an internal (translated) token number. */ + int grib_yytoken; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE grib_yyval; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char grib_yymsgbuf[128]; + char *grib_yymsg = grib_yymsgbuf; + YYSIZE_T grib_yymsg_alloc = sizeof grib_yymsgbuf; +#endif + +#define YYPOPSTACK(N) (grib_yyvsp -= (N), grib_yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int grib_yylen = 0; + + grib_yytoken = 0; + grib_yyss = grib_yyssa; + grib_yyvs = grib_yyvsa; + grib_yystacksize = YYINITDEPTH; + + YYDPRINTF ((stderr, "Starting parse\n")); + + grib_yystate = 0; + grib_yyerrstatus = 0; + grib_yynerrs = 0; + grib_yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + grib_yyssp = grib_yyss; + grib_yyvsp = grib_yyvs; + + goto grib_yysetstate; + +/*------------------------------------------------------------. +| grib_yynewstate -- Push a new state, which is found in grib_yystate. | +`------------------------------------------------------------*/ + grib_yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + grib_yyssp++; + + grib_yysetstate: + *grib_yyssp = grib_yystate; + + if (grib_yyss + grib_yystacksize - 1 <= grib_yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T grib_yysize = grib_yyssp - grib_yyss + 1; + +#ifdef grib_yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *grib_yyvs1 = grib_yyvs; + grib_yytype_int16 *grib_yyss1 = grib_yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if grib_yyoverflow is a macro. */ + grib_yyoverflow (YY_("memory exhausted"), + &grib_yyss1, grib_yysize * sizeof (*grib_yyssp), + &grib_yyvs1, grib_yysize * sizeof (*grib_yyvsp), + &grib_yystacksize); + + grib_yyss = grib_yyss1; + grib_yyvs = grib_yyvs1; + } +#else /* no grib_yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto grib_yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= grib_yystacksize) + goto grib_yyexhaustedlab; + grib_yystacksize *= 2; + if (YYMAXDEPTH < grib_yystacksize) + grib_yystacksize = YYMAXDEPTH; + + { + grib_yytype_int16 *grib_yyss1 = grib_yyss; + union grib_yyalloc *grib_yyptr = + (union grib_yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (grib_yystacksize)); + if (! grib_yyptr) + goto grib_yyexhaustedlab; + YYSTACK_RELOCATE (grib_yyss_alloc, grib_yyss); + YYSTACK_RELOCATE (grib_yyvs_alloc, grib_yyvs); +# undef YYSTACK_RELOCATE + if (grib_yyss1 != grib_yyssa) + YYSTACK_FREE (grib_yyss1); + } +# endif +#endif /* no grib_yyoverflow */ + + grib_yyssp = grib_yyss + grib_yysize - 1; + grib_yyvsp = grib_yyvs + grib_yysize - 1; + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) grib_yystacksize)); + + if (grib_yyss + grib_yystacksize - 1 <= grib_yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", grib_yystate)); + + if (grib_yystate == YYFINAL) + YYACCEPT; + + goto grib_yybackup; + +/*-----------. +| grib_yybackup. | +`-----------*/ +grib_yybackup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + grib_yyn = grib_yypact[grib_yystate]; + if (grib_yyn == YYPACT_NINF) + goto grib_yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (grib_yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + grib_yychar = YYLEX; + } + + if (grib_yychar <= YYEOF) + { + grib_yychar = grib_yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + grib_yytoken = YYTRANSLATE (grib_yychar); + YY_SYMBOL_PRINT ("Next token is", grib_yytoken, &grib_yylval, &grib_yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + grib_yyn += grib_yytoken; + if (grib_yyn < 0 || YYLAST < grib_yyn || grib_yycheck[grib_yyn] != grib_yytoken) + goto grib_yydefault; + grib_yyn = grib_yytable[grib_yyn]; + if (grib_yyn <= 0) + { + if (grib_yyn == 0 || grib_yyn == YYTABLE_NINF) + goto grib_yyerrlab; + grib_yyn = -grib_yyn; + goto grib_yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (grib_yyerrstatus) + grib_yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", grib_yytoken, &grib_yylval, &grib_yylloc); + + /* Discard the shifted token. */ + grib_yychar = YYEMPTY; + + grib_yystate = grib_yyn; + *++grib_yyvsp = grib_yylval; + + goto grib_yynewstate; + + +/*-----------------------------------------------------------. +| grib_yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +grib_yydefault: + grib_yyn = grib_yydefact[grib_yystate]; + if (grib_yyn == 0) + goto grib_yyerrlab; + goto grib_yyreduce; + + +/*-----------------------------. +| grib_yyreduce -- Do a reduction. | +`-----------------------------*/ +grib_yyreduce: + /* grib_yyn is the number of a rule to reduce with. */ + grib_yylen = grib_yyr2[grib_yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + grib_yyval = grib_yyvsp[1-grib_yylen]; + + + YY_REDUCE_PRINT (grib_yyn); + switch (grib_yyn) + { + case 2: + +/* Line 1455 of yacc.c */ +#line 204 "griby.y" + { grib_parser_all_actions = 0;grib_parser_concept=0; grib_parser_rules=0; } + break; + + case 3: + +/* Line 1455 of yacc.c */ +#line 205 "griby.y" + { grib_parser_concept = reverse((grib_yyvsp[(1) - (1)].concept_value)); } + break; + + case 4: + +/* Line 1455 of yacc.c */ +#line 206 "griby.y" + { grib_parser_all_actions = (grib_yyvsp[(1) - (1)].act); } + break; + + case 5: + +/* Line 1455 of yacc.c */ +#line 207 "griby.y" + { grib_parser_rules = (grib_yyvsp[(1) - (1)].rules); } + break; + + case 6: + +/* Line 1455 of yacc.c */ +#line 209 "griby.y" + { grib_parser_all_actions = 0; grib_parser_concept=0; grib_parser_rules=0; } + break; + + case 8: + +/* Line 1455 of yacc.c */ +#line 215 "griby.y" + { (grib_yyval.dvalue)=grib_darray_push(0,0,(grib_yyvsp[(1) - (1)].dval));} + break; + + case 9: + +/* Line 1455 of yacc.c */ +#line 216 "griby.y" + { (grib_yyval.dvalue)=grib_darray_push(0,(grib_yyvsp[(1) - (3)].dvalue),(grib_yyvsp[(3) - (3)].dval));} + break; + + case 10: + +/* Line 1455 of yacc.c */ +#line 217 "griby.y" + { (grib_yyval.dvalue)=grib_darray_push(0,0,(grib_yyvsp[(1) - (1)].lval));} + break; + + case 11: + +/* Line 1455 of yacc.c */ +#line 218 "griby.y" + { (grib_yyval.dvalue)=grib_darray_push(0,(grib_yyvsp[(1) - (3)].dvalue),(grib_yyvsp[(3) - (3)].lval));} + break; + + case 13: + +/* Line 1455 of yacc.c */ +#line 221 "griby.y" + { (grib_yyvsp[(1) - (2)].act)->next = (grib_yyvsp[(2) - (2)].act); (grib_yyval.act) = (grib_yyvsp[(1) - (2)].act); } + break; + + case 14: + +/* Line 1455 of yacc.c */ +#line 222 "griby.y" + { (grib_yyvsp[(1) - (3)].act)->next = (grib_yyvsp[(3) - (3)].act); (grib_yyval.act) = (grib_yyvsp[(1) - (3)].act); } + break; + + case 15: + +/* Line 1455 of yacc.c */ +#line 223 "griby.y" + { (grib_yyval.act) = (grib_yyvsp[(1) - (2)].act);} + break; + + case 26: + +/* Line 1455 of yacc.c */ +#line 241 "griby.y" + { (grib_yyval.explist) = 0; } + break; + + case 29: + +/* Line 1455 of yacc.c */ +#line 246 "griby.y" + { (grib_yyvsp[(1) - (3)].explist)->next = (grib_yyvsp[(3) - (3)].explist); (grib_yyval.explist) = (grib_yyvsp[(1) - (3)].explist); } + break; + + case 30: + +/* Line 1455 of yacc.c */ +#line 249 "griby.y" + { (grib_yyval.explist) = grib_arguments_new(grib_parser_context,(grib_yyvsp[(1) - (1)].exp),NULL); } + break; + + case 31: + +/* Line 1455 of yacc.c */ +#line 254 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"unsigned",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL); free((grib_yyvsp[(5) - (7)].str)); } + break; + + case 32: + +/* Line 1455 of yacc.c */ +#line 257 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"unsigned",(grib_yyvsp[(3) - (10)].lval),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL); free((grib_yyvsp[(5) - (10)].str)); } + break; + + case 33: + +/* Line 1455 of yacc.c */ +#line 260 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"unsigned_bits",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL); free((grib_yyvsp[(5) - (7)].str)); } + break; + + case 34: + +/* Line 1455 of yacc.c */ +#line 263 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"unsigned_bits",(grib_yyvsp[(3) - (10)].lval),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL); free((grib_yyvsp[(5) - (10)].str)); } + break; + + case 35: + +/* Line 1455 of yacc.c */ +#line 266 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"ascii",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL); free((grib_yyvsp[(5) - (7)].str)); } + break; + + case 36: + +/* Line 1455 of yacc.c */ +#line 270 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"ascii",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL); free((grib_yyvsp[(5) - (7)].str)); } + break; + + case 37: + +/* Line 1455 of yacc.c */ +#line 273 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"bytes",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL); free((grib_yyvsp[(5) - (7)].str)); } + break; + + case 38: + +/* Line 1455 of yacc.c */ +#line 276 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"bytes",(grib_yyvsp[(3) - (10)].lval),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL); free((grib_yyvsp[(5) - (10)].str)); } + break; + + case 39: + +/* Line 1455 of yacc.c */ +#line 279 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"ksec1expver",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL); free((grib_yyvsp[(5) - (7)].str)); } + break; + + case 40: + +/* Line 1455 of yacc.c */ +#line 282 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"signed",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL); free((grib_yyvsp[(5) - (7)].str)); } + break; + + case 41: + +/* Line 1455 of yacc.c */ +#line 285 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"signed",(grib_yyvsp[(3) - (10)].lval),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL); free((grib_yyvsp[(5) - (10)].str)); } + break; + + case 42: + +/* Line 1455 of yacc.c */ +#line 288 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"signed_bits",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL); free((grib_yyvsp[(5) - (7)].str)); } + break; + + case 43: + +/* Line 1455 of yacc.c */ +#line 291 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"signed_bits",(grib_yyvsp[(3) - (10)].lval),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL); free((grib_yyvsp[(5) - (10)].str)); } + break; + + case 44: + +/* Line 1455 of yacc.c */ +#line 294 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (8)].str),"codetable",(grib_yyvsp[(3) - (8)].lval), (grib_yyvsp[(6) - (8)].explist),(grib_yyvsp[(7) - (8)].explist),(grib_yyvsp[(8) - (8)].lval),NULL,NULL); free((grib_yyvsp[(5) - (8)].str)); } + break; + + case 45: + +/* Line 1455 of yacc.c */ +#line 297 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (12)].str),"codetable",(grib_yyvsp[(3) - (12)].lval), (grib_yyvsp[(6) - (12)].explist),(grib_yyvsp[(7) - (12)].explist),(grib_yyvsp[(12) - (12)].lval),NULL,(grib_yyvsp[(10) - (12)].str)); + free((grib_yyvsp[(5) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); } + break; + + case 46: + +/* Line 1455 of yacc.c */ +#line 301 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"codetable",(grib_yyvsp[(3) - (10)].lval), (grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL); free((grib_yyvsp[(5) - (10)].str)); } + break; + + case 47: + +/* Line 1455 of yacc.c */ +#line 304 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (8)].str),"complex_codetable",(grib_yyvsp[(3) - (8)].lval), (grib_yyvsp[(6) - (8)].explist),(grib_yyvsp[(7) - (8)].explist),(grib_yyvsp[(8) - (8)].lval),NULL,NULL); free((grib_yyvsp[(5) - (8)].str)); } + break; + + case 48: + +/* Line 1455 of yacc.c */ +#line 307 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"complex_codetable",(grib_yyvsp[(3) - (10)].lval), (grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL); free((grib_yyvsp[(5) - (10)].str)); } + break; + + case 49: + +/* Line 1455 of yacc.c */ +#line 310 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (8)].str),"codeflag",(grib_yyvsp[(3) - (8)].lval), (grib_yyvsp[(6) - (8)].explist),(grib_yyvsp[(7) - (8)].explist),(grib_yyvsp[(8) - (8)].lval),NULL,NULL); free((grib_yyvsp[(5) - (8)].str)); } + break; + + case 50: + +/* Line 1455 of yacc.c */ +#line 313 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (9)].str),"lookup",(grib_yyvsp[(3) - (9)].lval),(grib_yyvsp[(7) - (9)].explist),NULL,(grib_yyvsp[(9) - (9)].lval),NULL,NULL); free((grib_yyvsp[(5) - (9)].str)); } + break; + + case 51: + +/* Line 1455 of yacc.c */ +#line 316 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (7)].str),"bit",0,(grib_yyvsp[(4) - (7)].explist),(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL); free((grib_yyvsp[(2) - (7)].str)); } + break; + + case 52: + +/* Line 1455 of yacc.c */ +#line 319 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (2)].str),"label",0,NULL,NULL,0,NULL,NULL); free((grib_yyvsp[(2) - (2)].str)); } + break; + + case 53: + +/* Line 1455 of yacc.c */ +#line 322 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (2)].str),"label",0,NULL,NULL,0,NULL,NULL); free((grib_yyvsp[(2) - (2)].str)); } + break; + + case 54: + +/* Line 1455 of yacc.c */ +#line 325 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"ibmfloat",4,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str)); } + break; + + case 55: + +/* Line 1455 of yacc.c */ +#line 328 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(4) - (6)].str),"ibmfloat",4,NULL,(grib_yyvsp[(5) - (6)].explist),(grib_yyvsp[(6) - (6)].lval),(grib_yyvsp[(2) - (6)].str),NULL);free((grib_yyvsp[(4) - (6)].str)); free((grib_yyvsp[(2) - (6)].str)); } + break; + + case 56: + +/* Line 1455 of yacc.c */ +#line 331 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (7)].str),"ibmfloat",4,(grib_yyvsp[(4) - (7)].explist),(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);free((grib_yyvsp[(2) - (7)].str)); } + break; + + case 57: + +/* Line 1455 of yacc.c */ +#line 334 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (2)].str),"position",0,NULL,NULL,0,NULL,NULL); free((grib_yyvsp[(2) - (2)].str)); } + break; + + case 58: + +/* Line 1455 of yacc.c */ +#line 337 "griby.y" + { (grib_yyval.act) = grib_action_create_variable(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"constant",0,(grib_yyvsp[(4) - (5)].explist),NULL,(grib_yyvsp[(5) - (5)].lval),NULL);free((grib_yyvsp[(2) - (5)].str)); } + break; + + case 59: + +/* Line 1455 of yacc.c */ +#line 340 "griby.y" + { (grib_yyval.act) = grib_action_create_variable(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"transient",0,(grib_yyvsp[(4) - (5)].explist),(grib_yyvsp[(4) - (5)].explist),(grib_yyvsp[(5) - (5)].lval),NULL); free((grib_yyvsp[(2) - (5)].str)); } + break; + + case 60: + +/* Line 1455 of yacc.c */ +#line 343 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"ieeefloat",4,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL); free((grib_yyvsp[(2) - (4)].str)); } + break; + + case 61: + +/* Line 1455 of yacc.c */ +#line 346 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(4) - (6)].str),"ieeefloat",4,NULL,(grib_yyvsp[(5) - (6)].explist),(grib_yyvsp[(6) - (6)].lval),(grib_yyvsp[(2) - (6)].str),NULL); free((grib_yyvsp[(4) - (6)].str));free((grib_yyvsp[(2) - (6)].str));} + break; + + case 62: + +/* Line 1455 of yacc.c */ +#line 349 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (7)].str),"ieeefloat",4,(grib_yyvsp[(4) - (7)].explist),(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);free((grib_yyvsp[(2) - (7)].str)); } + break; + + case 63: + +/* Line 1455 of yacc.c */ +#line 352 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (2)].str),"g1_half_byte_codeflag",0,NULL,NULL,0,NULL,NULL);free((grib_yyvsp[(2) - (2)].str)); } + break; + + case 64: + +/* Line 1455 of yacc.c */ +#line 355 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (5)].str),"section_length",(grib_yyvsp[(3) - (5)].lval),NULL,NULL,0,NULL,NULL);free((grib_yyvsp[(5) - (5)].str)); } + break; + + case 65: + +/* Line 1455 of yacc.c */ +#line 358 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (8)].str),"g1_message_length",(grib_yyvsp[(3) - (8)].lval),(grib_yyvsp[(7) - (8)].explist),NULL,0,NULL,NULL);free((grib_yyvsp[(5) - (8)].str)); } + break; + + case 66: + +/* Line 1455 of yacc.c */ +#line 361 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (8)].str),"g1_section4_length",(grib_yyvsp[(3) - (8)].lval),(grib_yyvsp[(7) - (8)].explist),NULL,0,NULL,NULL);free((grib_yyvsp[(5) - (8)].str)); } + break; + + case 67: + +/* Line 1455 of yacc.c */ +#line 364 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (3)].str),"ksec",0,(grib_yyvsp[(3) - (3)].explist),NULL,0,NULL,NULL);free((grib_yyvsp[(2) - (3)].str)); } + break; + + case 68: + +/* Line 1455 of yacc.c */ +#line 367 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"pad",0,(grib_yyvsp[(4) - (5)].explist),0,0,NULL,NULL); free((grib_yyvsp[(2) - (5)].str)); } + break; + + case 69: + +/* Line 1455 of yacc.c */ +#line 370 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"padto",0,(grib_yyvsp[(4) - (5)].explist),0,0,NULL,NULL); free((grib_yyvsp[(2) - (5)].str)); } + break; + + case 70: + +/* Line 1455 of yacc.c */ +#line 373 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"padtoeven",0,(grib_yyvsp[(4) - (5)].explist),0,0,NULL,NULL); free((grib_yyvsp[(2) - (5)].str)); } + break; + + case 71: + +/* Line 1455 of yacc.c */ +#line 376 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"padtomultiple",0,(grib_yyvsp[(4) - (5)].explist),0,0,NULL,NULL); free((grib_yyvsp[(2) - (5)].str)); } + break; + + case 72: + +/* Line 1455 of yacc.c */ +#line 379 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (6)].str),"message",(grib_yyvsp[(3) - (6)].lval),0,0,(grib_yyvsp[(6) - (6)].lval),NULL,NULL); free((grib_yyvsp[(5) - (6)].str)); } + break; + + case 73: + +/* Line 1455 of yacc.c */ +#line 382 "griby.y" + { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (3)].str),"section_padding",0,0,0,(grib_yyvsp[(3) - (3)].lval),NULL,NULL); free((grib_yyvsp[(2) - (3)].str)); } + break; + + case 74: + +/* Line 1455 of yacc.c */ +#line 384 "griby.y" + { (grib_yyval.act) = grib_action_create_template(grib_parser_context,0,(grib_yyvsp[(2) - (3)].str),(grib_yyvsp[(3) - (3)].str)); free((grib_yyvsp[(2) - (3)].str)); free((grib_yyvsp[(3) - (3)].str));} + break; + + case 75: + +/* Line 1455 of yacc.c */ +#line 386 "griby.y" + { (grib_yyval.act) = grib_action_create_template(grib_parser_context,1,(grib_yyvsp[(2) - (3)].str),(grib_yyvsp[(3) - (3)].str)); free((grib_yyvsp[(2) - (3)].str)); free((grib_yyvsp[(3) - (3)].str));} + break; + + case 76: + +/* Line 1455 of yacc.c */ +#line 389 "griby.y" + { (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[(2) - (5)].str),(grib_yyvsp[(4) - (5)].str),NULL,(grib_yyvsp[(5) - (5)].lval)); free((grib_yyvsp[(2) - (5)].str)); free((grib_yyvsp[(4) - (5)].str)); } + break; + + case 77: + +/* Line 1455 of yacc.c */ +#line 392 "griby.y" + { (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[(2) - (2)].str),NULL,NULL,0); free((grib_yyvsp[(2) - (2)].str)); } + break; + + case 78: + +/* Line 1455 of yacc.c */ +#line 395 "griby.y" + { + (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[(4) - (7)].str),(grib_yyvsp[(6) - (7)].str),(grib_yyvsp[(2) - (7)].str),(grib_yyvsp[(7) - (7)].lval)); free((grib_yyvsp[(2) - (7)].str)); free((grib_yyvsp[(4) - (7)].str)); free((grib_yyvsp[(6) - (7)].str)); + } + break; + + case 79: + +/* Line 1455 of yacc.c */ +#line 399 "griby.y" + { + (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[(4) - (4)].str),NULL,(grib_yyvsp[(2) - (4)].str),0); free((grib_yyvsp[(2) - (4)].str)); free((grib_yyvsp[(4) - (4)].str)); + } + break; + + case 80: + +/* Line 1455 of yacc.c */ +#line 403 "griby.y" + { (grib_yyval.act) = grib_action_create_meta(grib_parser_context,(grib_yyvsp[(2) - (8)].str),(grib_yyvsp[(3) - (8)].str),(grib_yyvsp[(5) - (8)].explist),(grib_yyvsp[(7) - (8)].explist),(grib_yyvsp[(8) - (8)].lval),NULL); free((grib_yyvsp[(2) - (8)].str));free((grib_yyvsp[(3) - (8)].str));} + break; + + case 81: + +/* Line 1455 of yacc.c */ +#line 406 "griby.y" + { (grib_yyval.act) = grib_action_create_meta(grib_parser_context,(grib_yyvsp[(4) - (10)].str),(grib_yyvsp[(5) - (10)].str),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),(grib_yyvsp[(2) - (10)].str)); free((grib_yyvsp[(4) - (10)].str));free((grib_yyvsp[(5) - (10)].str));free((grib_yyvsp[(2) - (10)].str));} + break; + + case 82: + +/* Line 1455 of yacc.c */ +#line 409 "griby.y" + { + grib_arguments* a = grib_arguments_new( + grib_parser_context, + new_accessor_expression(grib_parser_context,(grib_yyvsp[(2) - (5)].str)), + NULL + ); + a->next=(grib_yyvsp[(4) - (5)].explist); + (grib_yyval.act) = grib_action_create_meta(grib_parser_context, + "ITERATOR","iterator",a,NULL, + GRIB_ACCESSOR_FLAG_HIDDEN|GRIB_ACCESSOR_FLAG_READ_ONLY,NULL); free((grib_yyvsp[(2) - (5)].str)); + } + break; + + case 83: + +/* Line 1455 of yacc.c */ +#line 421 "griby.y" + { + grib_arguments* a = grib_arguments_new( + grib_parser_context, + new_accessor_expression(grib_parser_context,(grib_yyvsp[(2) - (5)].str)), + NULL + ); + a->next=(grib_yyvsp[(4) - (5)].explist); + (grib_yyval.act) = grib_action_create_meta(grib_parser_context, + "NEAREST","nearest",a,NULL, + GRIB_ACCESSOR_FLAG_HIDDEN|GRIB_ACCESSOR_FLAG_READ_ONLY,NULL); free((grib_yyvsp[(2) - (5)].str)); + } + break; + + case 84: + +/* Line 1455 of yacc.c */ +#line 433 "griby.y" + { + grib_arguments* a = grib_arguments_new( + grib_parser_context, + new_accessor_expression(grib_parser_context,(grib_yyvsp[(2) - (5)].str)), + NULL + ); + a->next=(grib_yyvsp[(4) - (5)].explist); + (grib_yyval.act) = grib_action_create_meta(grib_parser_context, + "BOX","box",a,NULL, + GRIB_ACCESSOR_FLAG_HIDDEN|GRIB_ACCESSOR_FLAG_READ_ONLY,NULL); free((grib_yyvsp[(2) - (5)].str)); + } + break; + + case 85: + +/* Line 1455 of yacc.c */ +#line 445 "griby.y" + { (grib_yyval.act) = grib_action_create_put(grib_parser_context,(grib_yyvsp[(2) - (5)].str),(grib_yyvsp[(4) - (5)].explist));free((grib_yyvsp[(2) - (5)].str));} + break; + + case 86: + +/* Line 1455 of yacc.c */ +#line 448 "griby.y" + { (grib_yyval.act) = grib_action_create_remove(grib_parser_context,(grib_yyvsp[(2) - (2)].explist));} + break; + + case 87: + +/* Line 1455 of yacc.c */ +#line 451 "griby.y" + { (grib_yyval.act) = grib_action_create_assert(grib_parser_context,(grib_yyvsp[(3) - (4)].exp));} + break; + + case 88: + +/* Line 1455 of yacc.c */ +#line 454 "griby.y" + { (grib_yyval.act) = grib_action_create_modify(grib_parser_context,(grib_yyvsp[(2) - (3)].str),(grib_yyvsp[(3) - (3)].lval)); free((grib_yyvsp[(2) - (3)].str));} + break; + + case 89: + +/* Line 1455 of yacc.c */ +#line 456 "griby.y" + { (grib_yyval.act) = grib_action_create_set_missing(grib_parser_context,(grib_yyvsp[(2) - (4)].str)); free((grib_yyvsp[(2) - (4)].str)); } + break; + + case 90: + +/* Line 1455 of yacc.c */ +#line 457 "griby.y" + { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[(2) - (4)].str),(grib_yyvsp[(4) - (4)].exp),0); free((grib_yyvsp[(2) - (4)].str)); } + break; + + case 91: + +/* Line 1455 of yacc.c */ +#line 458 "griby.y" + { (grib_yyval.act) = grib_action_create_set_darray(grib_parser_context,(grib_yyvsp[(2) - (6)].str),(grib_yyvsp[(5) - (6)].dvalue)); free((grib_yyvsp[(2) - (6)].str)); } + break; + + case 92: + +/* Line 1455 of yacc.c */ +#line 460 "griby.y" + { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[(2) - (4)].str),(grib_yyvsp[(4) - (4)].exp),1); free((grib_yyvsp[(2) - (4)].str)); } + break; + + case 93: + +/* Line 1455 of yacc.c */ +#line 463 "griby.y" + { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[(2) - (2)].str),0,0); free((grib_yyvsp[(2) - (2)].str));} + break; + + case 94: + +/* Line 1455 of yacc.c */ +#line 464 "griby.y" + { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",0,0); } + break; + + case 95: + +/* Line 1455 of yacc.c */ +#line 465 "griby.y" + { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[(5) - (5)].str),0,(grib_yyvsp[(3) - (5)].lval)); free((grib_yyvsp[(5) - (5)].str));} + break; + + case 96: + +/* Line 1455 of yacc.c */ +#line 466 "griby.y" + { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",0,(grib_yyvsp[(3) - (4)].lval)); } + break; + + case 97: + +/* Line 1455 of yacc.c */ +#line 467 "griby.y" + { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[(2) - (2)].str),1,0); free((grib_yyvsp[(2) - (2)].str));} + break; + + case 98: + +/* Line 1455 of yacc.c */ +#line 468 "griby.y" + { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",1,0); } + break; + + case 99: + +/* Line 1455 of yacc.c */ +#line 469 "griby.y" + { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[(5) - (5)].str),1,(grib_yyvsp[(3) - (5)].lval)); free((grib_yyvsp[(5) - (5)].str));} + break; + + case 100: + +/* Line 1455 of yacc.c */ +#line 470 "griby.y" + { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",1,(grib_yyvsp[(3) - (4)].lval)); } + break; + + case 101: + +/* Line 1455 of yacc.c */ +#line 472 "griby.y" + { (grib_yyval.act) = grib_action_create_print(grib_parser_context,(grib_yyvsp[(2) - (2)].str),0); free((grib_yyvsp[(2) - (2)].str)); } + break; + + case 102: + +/* Line 1455 of yacc.c */ +#line 473 "griby.y" + { (grib_yyval.act) = grib_action_create_print(grib_parser_context,(grib_yyvsp[(5) - (5)].str),(grib_yyvsp[(3) - (5)].str)); free((grib_yyvsp[(5) - (5)].str)); free((grib_yyvsp[(3) - (5)].str));} + break; + + case 103: + +/* Line 1455 of yacc.c */ +#line 474 "griby.y" + { (grib_yyval.act) = grib_action_create_print(grib_parser_context,"",0); } + break; + + case 104: + +/* Line 1455 of yacc.c */ +#line 478 "griby.y" + { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].act),0,0); } + break; + + case 105: + +/* Line 1455 of yacc.c */ +#line 479 "griby.y" + { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (11)].exp),(grib_yyvsp[(6) - (11)].act),(grib_yyvsp[(10) - (11)].act),0); } + break; + + case 106: + +/* Line 1455 of yacc.c */ +#line 480 "griby.y" + { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].act),0,1); } + break; + + case 107: + +/* Line 1455 of yacc.c */ +#line 481 "griby.y" + { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (11)].exp),(grib_yyvsp[(6) - (11)].act),(grib_yyvsp[(10) - (11)].act),1); } + break; + + case 108: + +/* Line 1455 of yacc.c */ +#line 485 "griby.y" + { (grib_yyval.act) = grib_action_create_when(grib_parser_context,(grib_yyvsp[(3) - (6)].exp),(grib_yyvsp[(5) - (6)].act),NULL); } + break; + + case 109: + +/* Line 1455 of yacc.c */ +#line 486 "griby.y" + { (grib_yyval.act) = grib_action_create_when(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].act),NULL); } + break; + + case 110: + +/* Line 1455 of yacc.c */ +#line 487 "griby.y" + { (grib_yyval.act) = grib_action_create_when(grib_parser_context,(grib_yyvsp[(3) - (11)].exp),(grib_yyvsp[(6) - (11)].act),(grib_yyvsp[(10) - (11)].act)); } + break; + + case 111: + +/* Line 1455 of yacc.c */ +#line 490 "griby.y" + { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[(2) - (4)].str),(grib_yyvsp[(4) - (4)].exp),0); free((grib_yyvsp[(2) - (4)].str)); } + break; + + case 112: + +/* Line 1455 of yacc.c */ +#line 491 "griby.y" + { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[(2) - (4)].str),(grib_yyvsp[(4) - (4)].exp),1); free((grib_yyvsp[(2) - (4)].str)); } + break; + + case 114: + +/* Line 1455 of yacc.c */ +#line 495 "griby.y" + { (grib_yyvsp[(1) - (3)].act)->next = (grib_yyvsp[(2) - (3)].act); (grib_yyval.act) = (grib_yyvsp[(1) - (3)].act); } + break; + + case 115: + +/* Line 1455 of yacc.c */ +#line 499 "griby.y" + { (grib_yyval.explist) = NULL ;} + break; + + case 116: + +/* Line 1455 of yacc.c */ +#line 500 "griby.y" + { (grib_yyval.explist) = (grib_yyvsp[(2) - (2)].explist) ;} + break; + + case 117: + +/* Line 1455 of yacc.c */ +#line 503 "griby.y" + { (grib_yyval.lval) = 0 ; } + break; + + case 118: + +/* Line 1455 of yacc.c */ +#line 504 "griby.y" + { (grib_yyval.lval) = (grib_yyvsp[(2) - (2)].lval); } + break; + + case 120: + +/* Line 1455 of yacc.c */ +#line 508 "griby.y" + { (grib_yyval.lval) = (grib_yyvsp[(1) - (3)].lval) | (grib_yyvsp[(3) - (3)].lval); } + break; + + case 121: + +/* Line 1455 of yacc.c */ +#line 511 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_READ_ONLY; } + break; + + case 122: + +/* Line 1455 of yacc.c */ +#line 512 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_LOWERCASE; } + break; + + case 123: + +/* Line 1455 of yacc.c */ +#line 513 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_DUMP; } + break; + + case 124: + +/* Line 1455 of yacc.c */ +#line 514 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_NO_COPY; } + break; + + case 125: + +/* Line 1455 of yacc.c */ +#line 515 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_NO_FAIL; } + break; + + case 126: + +/* Line 1455 of yacc.c */ +#line 516 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_HIDDEN; } + break; + + case 127: + +/* Line 1455 of yacc.c */ +#line 517 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; } + break; + + case 128: + +/* Line 1455 of yacc.c */ +#line 518 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_CAN_BE_MISSING; } + break; + + case 129: + +/* Line 1455 of yacc.c */ +#line 519 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_CONSTRAINT; } + break; + + case 130: + +/* Line 1455 of yacc.c */ +#line 520 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_OVERRIDE; } + break; + + case 131: + +/* Line 1455 of yacc.c */ +#line 521 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_COPY_OK; } + break; + + case 132: + +/* Line 1455 of yacc.c */ +#line 522 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_TRANSIENT; } + break; + + case 133: + +/* Line 1455 of yacc.c */ +#line 523 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_STRING_TYPE; } + break; + + case 134: + +/* Line 1455 of yacc.c */ +#line 524 "griby.y" + { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_LONG_TYPE; } + break; + + case 135: + +/* Line 1455 of yacc.c */ +#line 527 "griby.y" + { (grib_yyval.act) = grib_action_create_list(grib_parser_context,(grib_yyvsp[(1) - (8)].str),(grib_yyvsp[(4) - (8)].exp),(grib_yyvsp[(7) - (8)].act)); free((grib_yyvsp[(1) - (8)].str)); } + break; + + case 136: + +/* Line 1455 of yacc.c */ +#line 530 "griby.y" + { (grib_yyval.act) = grib_action_create_while(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].act)); } + break; + + case 137: + +/* Line 1455 of yacc.c */ +#line 533 "griby.y" + { (grib_yyval.act) = grib_action_create_trigger(grib_parser_context,(grib_yyvsp[(3) - (7)].explist),(grib_yyvsp[(6) - (7)].act)); } + break; + + case 138: + +/* Line 1455 of yacc.c */ +#line 536 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (6)].str),(grib_yyvsp[(4) - (6)].concept_value),0,0,0,0,0,0,(grib_yyvsp[(6) - (6)].lval),0); free((grib_yyvsp[(2) - (6)].str)); } + break; + + case 139: + +/* Line 1455 of yacc.c */ +#line 537 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (9)].str),(grib_yyvsp[(7) - (9)].concept_value),0,0,(grib_yyvsp[(4) - (9)].str),0,0,0,(grib_yyvsp[(9) - (9)].lval),0); free((grib_yyvsp[(2) - (9)].str));free((grib_yyvsp[(4) - (9)].str)); } + break; + + case 140: + +/* Line 1455 of yacc.c */ +#line 538 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (12)].str),0,(grib_yyvsp[(6) - (12)].str),0,(grib_yyvsp[(4) - (12)].str),(grib_yyvsp[(8) - (12)].str),(grib_yyvsp[(10) - (12)].str),0,(grib_yyvsp[(12) - (12)].lval),0); free((grib_yyvsp[(2) - (12)].str));free((grib_yyvsp[(6) - (12)].str));free((grib_yyvsp[(4) - (12)].str));free((grib_yyvsp[(8) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); } + break; + + case 141: + +/* Line 1455 of yacc.c */ +#line 539 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (14)].str),0,(grib_yyvsp[(6) - (14)].str),0,(grib_yyvsp[(4) - (14)].str),(grib_yyvsp[(8) - (14)].str),(grib_yyvsp[(10) - (14)].str),(grib_yyvsp[(12) - (14)].str),(grib_yyvsp[(14) - (14)].lval),0); free((grib_yyvsp[(2) - (14)].str));free((grib_yyvsp[(6) - (14)].str));free((grib_yyvsp[(4) - (14)].str));free((grib_yyvsp[(8) - (14)].str));free((grib_yyvsp[(10) - (14)].str));free((grib_yyvsp[(12) - (14)].str)); } + break; + + case 142: + +/* Line 1455 of yacc.c */ +#line 540 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (10)].str),0,(grib_yyvsp[(6) - (10)].str),0,(grib_yyvsp[(4) - (10)].str),(grib_yyvsp[(8) - (10)].str),0,0,(grib_yyvsp[(10) - (10)].lval),0); free((grib_yyvsp[(2) - (10)].str));free((grib_yyvsp[(6) - (10)].str));free((grib_yyvsp[(4) - (10)].str));free((grib_yyvsp[(8) - (10)].str)); } + break; + + case 143: + +/* Line 1455 of yacc.c */ +#line 541 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (14)].str),0,(grib_yyvsp[(8) - (14)].str),(grib_yyvsp[(2) - (14)].str),(grib_yyvsp[(6) - (14)].str),(grib_yyvsp[(10) - (14)].str),(grib_yyvsp[(12) - (14)].str),0,(grib_yyvsp[(14) - (14)].lval),0); free((grib_yyvsp[(4) - (14)].str));free((grib_yyvsp[(8) - (14)].str));free((grib_yyvsp[(6) - (14)].str));free((grib_yyvsp[(10) - (14)].str)); free((grib_yyvsp[(2) - (14)].str));} + break; + + case 144: + +/* Line 1455 of yacc.c */ +#line 542 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (12)].str),0,(grib_yyvsp[(8) - (12)].str),(grib_yyvsp[(2) - (12)].str),(grib_yyvsp[(6) - (12)].str),(grib_yyvsp[(10) - (12)].str),0,0,(grib_yyvsp[(12) - (12)].lval),0); free((grib_yyvsp[(4) - (12)].str));free((grib_yyvsp[(8) - (12)].str));free((grib_yyvsp[(6) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); free((grib_yyvsp[(2) - (12)].str));} + break; + + case 145: + +/* Line 1455 of yacc.c */ +#line 543 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (8)].str),(grib_yyvsp[(6) - (8)].concept_value),0,(grib_yyvsp[(2) - (8)].str),0,0,0,0,(grib_yyvsp[(8) - (8)].lval),0); free((grib_yyvsp[(2) - (8)].str));free((grib_yyvsp[(4) - (8)].str)); } + break; + + case 146: + +/* Line 1455 of yacc.c */ +#line 544 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (11)].str),(grib_yyvsp[(9) - (11)].concept_value),0,(grib_yyvsp[(2) - (11)].str),(grib_yyvsp[(6) - (11)].str),0,0,0,(grib_yyvsp[(11) - (11)].lval),0); free((grib_yyvsp[(2) - (11)].str));free((grib_yyvsp[(4) - (11)].str));free((grib_yyvsp[(6) - (11)].str)); } + break; + + case 147: + +/* Line 1455 of yacc.c */ +#line 545 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (6)].str),(grib_yyvsp[(4) - (6)].concept_value),0,0,0,0,0,0,(grib_yyvsp[(6) - (6)].lval),1); free((grib_yyvsp[(2) - (6)].str)); } + break; + + case 148: + +/* Line 1455 of yacc.c */ +#line 546 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (9)].str),(grib_yyvsp[(7) - (9)].concept_value),0,0,(grib_yyvsp[(4) - (9)].str),0,0,0,(grib_yyvsp[(9) - (9)].lval),1); free((grib_yyvsp[(2) - (9)].str));free((grib_yyvsp[(4) - (9)].str)); } + break; + + case 149: + +/* Line 1455 of yacc.c */ +#line 547 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (12)].str),0,(grib_yyvsp[(6) - (12)].str),0,(grib_yyvsp[(4) - (12)].str),(grib_yyvsp[(8) - (12)].str),(grib_yyvsp[(10) - (12)].str),0,(grib_yyvsp[(12) - (12)].lval),1); free((grib_yyvsp[(2) - (12)].str));free((grib_yyvsp[(6) - (12)].str));free((grib_yyvsp[(4) - (12)].str));free((grib_yyvsp[(8) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); } + break; + + case 150: + +/* Line 1455 of yacc.c */ +#line 548 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (10)].str),0,(grib_yyvsp[(6) - (10)].str),0,(grib_yyvsp[(4) - (10)].str),(grib_yyvsp[(8) - (10)].str),0,0,(grib_yyvsp[(10) - (10)].lval),1); free((grib_yyvsp[(2) - (10)].str));free((grib_yyvsp[(6) - (10)].str));free((grib_yyvsp[(4) - (10)].str));free((grib_yyvsp[(8) - (10)].str)); } + break; + + case 151: + +/* Line 1455 of yacc.c */ +#line 549 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (14)].str),0,(grib_yyvsp[(8) - (14)].str),(grib_yyvsp[(2) - (14)].str),(grib_yyvsp[(6) - (14)].str),(grib_yyvsp[(10) - (14)].str),(grib_yyvsp[(12) - (14)].str),0,(grib_yyvsp[(14) - (14)].lval),1); free((grib_yyvsp[(4) - (14)].str));free((grib_yyvsp[(8) - (14)].str));free((grib_yyvsp[(6) - (14)].str));free((grib_yyvsp[(10) - (14)].str));free((grib_yyvsp[(12) - (14)].str)); free((grib_yyvsp[(2) - (14)].str));} + break; + + case 152: + +/* Line 1455 of yacc.c */ +#line 550 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (12)].str),0,(grib_yyvsp[(8) - (12)].str),(grib_yyvsp[(2) - (12)].str),(grib_yyvsp[(6) - (12)].str),(grib_yyvsp[(10) - (12)].str),0,0,(grib_yyvsp[(12) - (12)].lval),1); free((grib_yyvsp[(4) - (12)].str));free((grib_yyvsp[(8) - (12)].str));free((grib_yyvsp[(6) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); free((grib_yyvsp[(2) - (12)].str));} + break; + + case 153: + +/* Line 1455 of yacc.c */ +#line 551 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (8)].str),(grib_yyvsp[(6) - (8)].concept_value),0,(grib_yyvsp[(2) - (8)].str),0,0,0,0,(grib_yyvsp[(8) - (8)].lval),1); free((grib_yyvsp[(2) - (8)].str));free((grib_yyvsp[(4) - (8)].str)); } + break; + + case 154: + +/* Line 1455 of yacc.c */ +#line 552 "griby.y" + { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (11)].str),(grib_yyvsp[(9) - (11)].concept_value),0,(grib_yyvsp[(2) - (11)].str),(grib_yyvsp[(6) - (11)].str),0,0,0,(grib_yyvsp[(11) - (11)].lval),1); free((grib_yyvsp[(2) - (11)].str));free((grib_yyvsp[(4) - (11)].str));free((grib_yyvsp[(6) - (11)].str)); } + break; + + case 156: + +/* Line 1455 of yacc.c */ +#line 557 "griby.y" + { (grib_yyval.concept_value) = (grib_yyvsp[(2) - (2)].concept_value); (grib_yyvsp[(2) - (2)].concept_value)->next = (grib_yyvsp[(1) - (2)].concept_value); } + break; + + case 158: + +/* Line 1455 of yacc.c */ +#line 561 "griby.y" + { (grib_yyval.case_value) = (grib_yyvsp[(2) - (2)].case_value); (grib_yyvsp[(2) - (2)].case_value)->next = (grib_yyvsp[(1) - (2)].case_value); } + break; + + case 159: + +/* Line 1455 of yacc.c */ +#line 564 "griby.y" + { (grib_yyval.case_value) = grib_case_new(grib_parser_context,(grib_yyvsp[(2) - (4)].explist),(grib_yyvsp[(4) - (4)].act)); } + break; + + case 160: + +/* Line 1455 of yacc.c */ +#line 568 "griby.y" + { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[(3) - (10)].explist),(grib_yyvsp[(6) - (10)].case_value),(grib_yyvsp[(9) - (10)].act)); } + break; + + case 161: + +/* Line 1455 of yacc.c */ +#line 569 "griby.y" + { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[(3) - (9)].explist),(grib_yyvsp[(6) - (9)].case_value),grib_action_create_noop(grib_parser_context,"continue")); } + break; + + case 162: + +/* Line 1455 of yacc.c */ +#line 570 "griby.y" + { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[(3) - (7)].explist),(grib_yyvsp[(6) - (7)].case_value),0); } + break; + + case 163: + +/* Line 1455 of yacc.c */ +#line 573 "griby.y" + { + (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,(grib_yyvsp[(1) - (5)].str),(grib_yyvsp[(4) - (5)].concept_condition)); free((grib_yyvsp[(1) - (5)].str));} + break; + + case 164: + +/* Line 1455 of yacc.c */ +#line 575 "griby.y" + { + (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,(grib_yyvsp[(1) - (5)].str),(grib_yyvsp[(4) - (5)].concept_condition)); free((grib_yyvsp[(1) - (5)].str));} + break; + + case 165: + +/* Line 1455 of yacc.c */ +#line 577 "griby.y" + { + char buf[80]; sprintf(buf,"%ld",(long)(grib_yyvsp[(1) - (5)].lval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[(4) - (5)].concept_condition));} + break; + + case 166: + +/* Line 1455 of yacc.c */ +#line 579 "griby.y" + { + char buf[80]; sprintf(buf,"%g",(double)(grib_yyvsp[(1) - (5)].dval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[(4) - (5)].concept_condition));} + break; + + case 168: + +/* Line 1455 of yacc.c */ +#line 584 "griby.y" + { (grib_yyvsp[(1) - (2)].concept_condition)->next = (grib_yyvsp[(2) - (2)].concept_condition); (grib_yyval.concept_condition) = (grib_yyvsp[(1) - (2)].concept_condition); } + break; + + case 169: + +/* Line 1455 of yacc.c */ +#line 587 "griby.y" + { (grib_yyval.concept_condition) = grib_concept_condition_new(grib_parser_context,(grib_yyvsp[(1) - (4)].str),(grib_yyvsp[(3) - (4)].exp)); free((grib_yyvsp[(1) - (4)].str)); } + break; + + case 170: + +/* Line 1455 of yacc.c */ +#line 590 "griby.y" + { (grib_yyval.exp) = new_accessor_expression(grib_parser_context,(grib_yyvsp[(1) - (1)].str)); free((grib_yyvsp[(1) - (1)].str)); } + break; + + case 171: + +/* Line 1455 of yacc.c */ +#line 591 "griby.y" + { (grib_yyval.exp) = new_string_expression(grib_parser_context,(grib_yyvsp[(1) - (1)].str)); free((grib_yyvsp[(1) - (1)].str)); } + break; + + case 173: + +/* Line 1455 of yacc.c */ +#line 595 "griby.y" + { (grib_yyval.exp) = new_long_expression(grib_parser_context,(grib_yyvsp[(1) - (1)].lval)); } + break; + + case 174: + +/* Line 1455 of yacc.c */ +#line 596 "griby.y" + { (grib_yyval.exp) = new_double_expression(grib_parser_context,(grib_yyvsp[(1) - (1)].dval)); /* TODO: change to new_float_expression*/} + break; + + case 175: + +/* Line 1455 of yacc.c */ +#line 598 "griby.y" + { (grib_yyval.exp) = NULL; } + break; + + case 176: + +/* Line 1455 of yacc.c */ +#line 599 "griby.y" + { (grib_yyval.exp) = new_true_expression(grib_parser_context); } + break; + + case 177: + +/* Line 1455 of yacc.c */ +#line 600 "griby.y" + { (grib_yyval.exp) = (grib_yyvsp[(2) - (3)].exp); } + break; + + case 178: + +/* Line 1455 of yacc.c */ +#line 601 "griby.y" + { (grib_yyval.exp) = new_unop_expression(grib_parser_context,&grib_op_neg,&grib_op_neg_d,(grib_yyvsp[(2) - (2)].exp)); } + break; + + case 179: + +/* Line 1455 of yacc.c */ +#line 602 "griby.y" + { (grib_yyval.exp) = new_func_expression(grib_parser_context,(grib_yyvsp[(1) - (3)].str),NULL); free((grib_yyvsp[(1) - (3)].str));} + break; + + case 180: + +/* Line 1455 of yacc.c */ +#line 603 "griby.y" + { (grib_yyval.exp) = new_func_expression(grib_parser_context,(grib_yyvsp[(1) - (4)].str),(grib_yyvsp[(3) - (4)].explist)); free((grib_yyvsp[(1) - (4)].str));} + break; + + case 181: + +/* Line 1455 of yacc.c */ +#line 607 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_pow,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 183: + +/* Line 1455 of yacc.c */ +#line 611 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_mul,&grib_op_mul_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 184: + +/* Line 1455 of yacc.c */ +#line 612 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_div,&grib_op_div_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 185: + +/* Line 1455 of yacc.c */ +#line 613 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_modulo,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 186: + +/* Line 1455 of yacc.c */ +#line 614 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_bit,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 187: + +/* Line 1455 of yacc.c */ +#line 615 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_bitoff,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 189: + +/* Line 1455 of yacc.c */ +#line 619 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_add,&grib_op_add_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 190: + +/* Line 1455 of yacc.c */ +#line 620 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_sub,&grib_op_sub_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 192: + +/* Line 1455 of yacc.c */ +#line 624 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_gt,&grib_op_gt_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 193: + +/* Line 1455 of yacc.c */ +#line 626 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_eq,&grib_op_eq_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 194: + +/* Line 1455 of yacc.c */ +#line 627 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_lt,&grib_op_lt_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 195: + +/* Line 1455 of yacc.c */ +#line 628 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_ge,&grib_op_ge_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 196: + +/* Line 1455 of yacc.c */ +#line 629 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_le,&grib_op_le_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 197: + +/* Line 1455 of yacc.c */ +#line 630 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_ne,&grib_op_ne_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 198: + +/* Line 1455 of yacc.c */ +#line 631 "griby.y" + { (grib_yyval.exp) = new_string_compare_expression(grib_parser_context,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 199: + +/* Line 1455 of yacc.c */ +#line 636 "griby.y" + { (grib_yyval.exp) = new_unop_expression(grib_parser_context,&grib_op_not,NULL,(grib_yyvsp[(2) - (2)].exp)); } + break; + + case 201: + +/* Line 1455 of yacc.c */ +#line 640 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_and,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); } + break; + + case 203: + +/* Line 1455 of yacc.c */ +#line 644 "griby.y" + { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_or,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp));} + break; + + case 208: + +/* Line 1455 of yacc.c */ +#line 658 "griby.y" + { (grib_yyval.rule_entry) = grib_new_rule_entry(grib_parser_context,(grib_yyvsp[(1) - (4)].str),(grib_yyvsp[(3) - (4)].exp)); free((grib_yyvsp[(1) - (4)].str)); } + break; + + case 209: + +/* Line 1455 of yacc.c */ +#line 659 "griby.y" + { (grib_yyval.rule_entry) = grib_new_rule_entry(grib_parser_context,"skip",0);} + break; + + case 211: + +/* Line 1455 of yacc.c */ +#line 663 "griby.y" + { (grib_yyvsp[(1) - (2)].rule_entry)->next = (grib_yyvsp[(2) - (2)].rule_entry); (grib_yyval.rule_entry) = (grib_yyvsp[(1) - (2)].rule_entry); } + break; + + case 212: + +/* Line 1455 of yacc.c */ +#line 666 "griby.y" + { (grib_yyval.rules) = grib_new_rule(grib_parser_context,NULL,(grib_yyvsp[(1) - (1)].rule_entry)); } + break; + + case 213: + +/* Line 1455 of yacc.c */ +#line 670 "griby.y" + { (grib_yyval.rules) = grib_new_rule(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].rule_entry)); } + break; + + case 215: + +/* Line 1455 of yacc.c */ +#line 674 "griby.y" + { (grib_yyvsp[(1) - (2)].rules)->next = (grib_yyvsp[(2) - (2)].rules); (grib_yyval.rules) = (grib_yyvsp[(1) - (2)].rules); } + break; + + + +/* Line 1455 of yacc.c */ +#line 3554 "y.tab.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", grib_yyr1[grib_yyn], &grib_yyval, &grib_yyloc); + + YYPOPSTACK (grib_yylen); + grib_yylen = 0; + YY_STACK_PRINT (grib_yyss, grib_yyssp); + + *++grib_yyvsp = grib_yyval; + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + grib_yyn = grib_yyr1[grib_yyn]; + + grib_yystate = grib_yypgoto[grib_yyn - YYNTOKENS] + *grib_yyssp; + if (0 <= grib_yystate && grib_yystate <= YYLAST && grib_yycheck[grib_yystate] == *grib_yyssp) + grib_yystate = grib_yytable[grib_yystate]; + else + grib_yystate = grib_yydefgoto[grib_yyn - YYNTOKENS]; + + goto grib_yynewstate; + + +/*------------------------------------. +| grib_yyerrlab -- here on detecting error | +`------------------------------------*/ +grib_yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!grib_yyerrstatus) + { + ++grib_yynerrs; +#if ! YYERROR_VERBOSE + grib_yyerror (YY_("syntax error")); +#else + { + YYSIZE_T grib_yysize = grib_yysyntax_error (0, grib_yystate, grib_yychar); + if (grib_yymsg_alloc < grib_yysize && grib_yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T grib_yyalloc = 2 * grib_yysize; + if (! (grib_yysize <= grib_yyalloc && grib_yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + grib_yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (grib_yymsg != grib_yymsgbuf) + YYSTACK_FREE (grib_yymsg); + grib_yymsg = (char *) YYSTACK_ALLOC (grib_yyalloc); + if (grib_yymsg) + grib_yymsg_alloc = grib_yyalloc; + else + { + grib_yymsg = grib_yymsgbuf; + grib_yymsg_alloc = sizeof grib_yymsgbuf; + } + } + + if (0 < grib_yysize && grib_yysize <= grib_yymsg_alloc) + { + (void) grib_yysyntax_error (grib_yymsg, grib_yystate, grib_yychar); + grib_yyerror (grib_yymsg); + } + else + { + grib_yyerror (YY_("syntax error")); + if (grib_yysize != 0) + goto grib_yyexhaustedlab; + } + } +#endif + } + + + + if (grib_yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (grib_yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (grib_yychar == YYEOF) + YYABORT; + } + else + { + grib_yydestruct ("Error: discarding", + grib_yytoken, &grib_yylval); + grib_yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto grib_yyerrlab1; + + +/*---------------------------------------------------. +| grib_yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +grib_yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label grib_yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto grib_yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (grib_yylen); + grib_yylen = 0; + YY_STACK_PRINT (grib_yyss, grib_yyssp); + grib_yystate = *grib_yyssp; + goto grib_yyerrlab1; + + +/*-------------------------------------------------------------. +| grib_yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +grib_yyerrlab1: + grib_yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + grib_yyn = grib_yypact[grib_yystate]; + if (grib_yyn != YYPACT_NINF) + { + grib_yyn += YYTERROR; + if (0 <= grib_yyn && grib_yyn <= YYLAST && grib_yycheck[grib_yyn] == YYTERROR) + { + grib_yyn = grib_yytable[grib_yyn]; + if (0 < grib_yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (grib_yyssp == grib_yyss) + YYABORT; + + + grib_yydestruct ("Error: popping", + grib_yystos[grib_yystate], grib_yyvsp); + YYPOPSTACK (1); + grib_yystate = *grib_yyssp; + YY_STACK_PRINT (grib_yyss, grib_yyssp); + } + + *++grib_yyvsp = grib_yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", grib_yystos[grib_yyn], grib_yyvsp, grib_yylsp); + + grib_yystate = grib_yyn; + goto grib_yynewstate; + + +/*-------------------------------------. +| grib_yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +grib_yyacceptlab: + grib_yyresult = 0; + goto grib_yyreturn; + +/*-----------------------------------. +| grib_yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +grib_yyabortlab: + grib_yyresult = 1; + goto grib_yyreturn; + +#if !defined(grib_yyoverflow) || YYERROR_VERBOSE +/*-------------------------------------------------. +| grib_yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +grib_yyexhaustedlab: + grib_yyerror (YY_("memory exhausted")); + grib_yyresult = 2; + /* Fall through. */ +#endif + +grib_yyreturn: + if (grib_yychar != YYEMPTY) + grib_yydestruct ("Cleanup: discarding lookahead", + grib_yytoken, &grib_yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (grib_yylen); + YY_STACK_PRINT (grib_yyss, grib_yyssp); + while (grib_yyssp != grib_yyss) + { + grib_yydestruct ("Cleanup: popping", + grib_yystos[*grib_yyssp], grib_yyvsp); + YYPOPSTACK (1); + } +#ifndef grib_yyoverflow + if (grib_yyss != grib_yyssa) + YYSTACK_FREE (grib_yyss); +#endif +#if YYERROR_VERBOSE + if (grib_yymsg != grib_yymsgbuf) + YYSTACK_FREE (grib_yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (grib_yyresult); +} + + + +/* Line 1675 of yacc.c */ +#line 678 "griby.y" + + +static grib_concept_value *reverse_concept(grib_concept_value *r,grib_concept_value *s) +{ + grib_concept_value *v; + + if(r == NULL) return s; + + v = r->next; + r->next = s; + return reverse_concept(v,r); +} + + +static grib_concept_value* reverse(grib_concept_value* r) +{ + return reverse_concept(r,NULL); +} + + + + diff --git a/src/grib_yacc.h b/src/grib_yacc.h new file mode 100644 index 000000000..48f35abd7 --- /dev/null +++ b/src/grib_yacc.h @@ -0,0 +1,256 @@ + +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum grib_yytokentype { + LOWERCASE = 258, + IF = 259, + IF_TRANSIENT = 260, + ELSE = 261, + END = 262, + UNSIGNED = 263, + TEMPLATE = 264, + TEMPLATE_NOFAIL = 265, + TRIGGER = 266, + ASCII = 267, + KSEC1EXPVER = 268, + LABEL = 269, + LIST = 270, + WHILE = 271, + IBMFLOAT = 272, + SIGNED = 273, + BYTE = 274, + CODETABLE = 275, + COMPLEX_CODETABLE = 276, + LOOKUP = 277, + ALIAS = 278, + UNALIAS = 279, + META = 280, + POS = 281, + INTCONST = 282, + TRANS = 283, + FLAGBIT = 284, + CONCEPT = 285, + CONCEPT_NOFAIL = 286, + NIL = 287, + DUMMY = 288, + MODIFY = 289, + READ_ONLY = 290, + STRING_TYPE = 291, + LONG_TYPE = 292, + NO_COPY = 293, + DUMP = 294, + NO_FAIL = 295, + EDITION_SPECIFIC = 296, + OVERRIDE = 297, + HIDDEN = 298, + CAN_BE_MISSING = 299, + MISSING = 300, + CONSTRAINT = 301, + COPY_OK = 302, + WHEN = 303, + SET = 304, + SET_NOFAIL = 305, + WRITE = 306, + APPEND = 307, + PRINT = 308, + EXPORT = 309, + REMOVE = 310, + SKIP = 311, + PAD = 312, + SECTION_PADDING = 313, + MESSAGE = 314, + PADTO = 315, + PADTOEVEN = 316, + PADTOMULTIPLE = 317, + G1_HALF_BYTE = 318, + G1_MESSAGE_LENGTH = 319, + G1_SECTION4_LENGTH = 320, + SECTION_LENGTH = 321, + FLAG = 322, + ITERATOR = 323, + NEAREST = 324, + BOX = 325, + KSEC = 326, + ASSERT = 327, + CASE = 328, + SWITCH = 329, + DEFAULT = 330, + EQ = 331, + NE = 332, + GE = 333, + LE = 334, + BIT = 335, + BITOFF = 336, + AND = 337, + OR = 338, + NOT = 339, + IS = 340, + IDENT = 341, + STRING = 342, + INTEGER = 343, + FLOAT = 344 + }; +#endif +/* Tokens. */ +#define LOWERCASE 258 +#define IF 259 +#define IF_TRANSIENT 260 +#define ELSE 261 +#define END 262 +#define UNSIGNED 263 +#define TEMPLATE 264 +#define TEMPLATE_NOFAIL 265 +#define TRIGGER 266 +#define ASCII 267 +#define KSEC1EXPVER 268 +#define LABEL 269 +#define LIST 270 +#define WHILE 271 +#define IBMFLOAT 272 +#define SIGNED 273 +#define BYTE 274 +#define CODETABLE 275 +#define COMPLEX_CODETABLE 276 +#define LOOKUP 277 +#define ALIAS 278 +#define UNALIAS 279 +#define META 280 +#define POS 281 +#define INTCONST 282 +#define TRANS 283 +#define FLAGBIT 284 +#define CONCEPT 285 +#define CONCEPT_NOFAIL 286 +#define NIL 287 +#define DUMMY 288 +#define MODIFY 289 +#define READ_ONLY 290 +#define STRING_TYPE 291 +#define LONG_TYPE 292 +#define NO_COPY 293 +#define DUMP 294 +#define NO_FAIL 295 +#define EDITION_SPECIFIC 296 +#define OVERRIDE 297 +#define HIDDEN 298 +#define CAN_BE_MISSING 299 +#define MISSING 300 +#define CONSTRAINT 301 +#define COPY_OK 302 +#define WHEN 303 +#define SET 304 +#define SET_NOFAIL 305 +#define WRITE 306 +#define APPEND 307 +#define PRINT 308 +#define EXPORT 309 +#define REMOVE 310 +#define SKIP 311 +#define PAD 312 +#define SECTION_PADDING 313 +#define MESSAGE 314 +#define PADTO 315 +#define PADTOEVEN 316 +#define PADTOMULTIPLE 317 +#define G1_HALF_BYTE 318 +#define G1_MESSAGE_LENGTH 319 +#define G1_SECTION4_LENGTH 320 +#define SECTION_LENGTH 321 +#define FLAG 322 +#define ITERATOR 323 +#define NEAREST 324 +#define BOX 325 +#define KSEC 326 +#define ASSERT 327 +#define CASE 328 +#define SWITCH 329 +#define DEFAULT 330 +#define EQ 331 +#define NE 332 +#define GE 333 +#define LE 334 +#define BIT 335 +#define BITOFF 336 +#define AND 337 +#define OR 338 +#define NOT 339 +#define IS 340 +#define IDENT 341 +#define STRING 342 +#define INTEGER 343 +#define FLOAT 344 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ + +/* Line 1676 of yacc.c */ +#line 32 "griby.y" + + char *str; + long lval; + double dval; + grib_darray *dvalue; + grib_iarray *ivalue; + grib_action *act; + grib_arguments *explist; + grib_expression *exp; + grib_concept_condition *concept_condition; + grib_concept_value *concept_value; + grib_case *case_value; + grib_rule *rules; + grib_rule_entry *rule_entry; + + + +/* Line 1676 of yacc.c */ +#line 248 "y.tab.h" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define grib_yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif + +extern YYSTYPE grib_yylval; + + diff --git a/src/gribl.l b/src/gribl.l new file mode 100644 index 000000000..045b99fc4 --- /dev/null +++ b/src/gribl.l @@ -0,0 +1,224 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + + +%{ +#include "grib_api_internal.h" +#include "grib_yacc.h" +#include + +int yylineno; + +/* Keep -Wall quiet */ + + +/* + +This is needed for implementing "include", otherwise +flex buffer optimization break the includes. + +*/ + +#define YY_INPUT(buf,result,max_size) \ + { \ + int c = fgetc(yyin); \ + result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \ + } + + +/* +#ifdef __GNUC__ +#ifdef FLEX_SCANNER +static void yyunput (int c,char *buf_ptr ); +void _grib_ignore_yyunput_unused_error() { yyunput(0,0); } +#endif +#endif +*/ + +%} + + +SIGN [\-\+] +E [eE] +DIGIT [0-9] +SIGNED {SIGN}?{DIGIT}+ +NUMB {DIGIT}+ +EXP {E}{SIGNED} +IDENT [_A-Za-z]+[_0-9A-Za-z]* +FLOAT {SIGN}?{DIGIT}+\.{DIGIT}+{EXP}? + +%% + + +"==" return EQ ; +">=" return GE ; +"<=" return LE ; +"!=" return NE ; +"<>" return NE ; +"bit" return BIT ; +"notbit" return BITOFF ; + +"is" return IS ; +"not" return NOT ; +"!" return NOT ; +"and" return AND ; +"&&" return AND ; +"or" return OR ; +"||" return OR ; + +"null" return NIL ; +"~" return DUMMY ; + +"lowercase" return LOWERCASE; +"if" return IF ; +"_if" return IF_TRANSIENT ; +"else" return ELSE ; +"unsigned" return UNSIGNED ; +"ascii" return ASCII ; +"byte" return BYTE ; +"label" return LABEL ; +"list" return LIST ; +"while" return WHILE ; +"template" return TEMPLATE ; +"template_nofail" return TEMPLATE_NOFAIL ; +"trigger" return TRIGGER ; +"end" return END ; +"ibmfloat" return IBMFLOAT ; +"ieeefloat" return FLOAT ; +"signed" return SIGNED ; +"codetable" return CODETABLE; +"complex_codetable" return CODETABLE; +"flags" return FLAG ; +"lookup" return LOOKUP ; +"meta" return META ; +"padtoeven" return PADTOEVEN ; +"padto" return PADTO ; +"padtomultiple" return PADTOMULTIPLE ; +"pad" return PAD ; +"section_padding" return SECTION_PADDING ; +"message" return MESSAGE ; +"alias" return ALIAS ; +"unalias" return UNALIAS ; +"position" return POS ; +"constant" return INTCONST ; +"transient" return TRANS ; +"string_type" return STRING_TYPE ; +"long_type" return LONG_TYPE ; +"iterator" return ITERATOR ; +"nearest" return NEAREST ; +"box" return BOX ; +"ksec" return KSEC ; +"flagbit" return FLAGBIT ; +"ksec1expver" return KSEC1EXPVER ; +"modify" return MODIFY ; + +"g1_half_byte_codeflag" return G1_HALF_BYTE ; +"g1_message_length" return G1_MESSAGE_LENGTH ; +"g1_section4_length" return G1_SECTION4_LENGTH ; + +"export" return EXPORT; +"remove" return REMOVE; + +"length" return SECTION_LENGTH ; + +"assert" return ASSERT ; + +"read_only" return READ_ONLY; +"no_copy" return NO_COPY; +"edition_specific" return EDITION_SPECIFIC; +"dump" return DUMP; +"no_fail" return NO_FAIL; +"hidden" return HIDDEN; +"can_be_missing" return CAN_BE_MISSING; +"MISSING" return MISSING; +"constraint" return CONSTRAINT; +"override" return OVERRIDE; +"copy_ok" return COPY_OK; + +"set" return SET; +"set_nofail" return SET_NOFAIL; +"when" return WHEN; +"case" return CASE; +"switch" return SWITCH; +"default" return DEFAULT; +"concept" return CONCEPT; +"concept_nofail" return CONCEPT_NOFAIL; +"write" return WRITE; +"append" return APPEND; +"print" return PRINT; +"skip" return SKIP; + +"include" { + int c,q; + while((c = input()) && isspace(c) && c != '\n') ; + q = c; /* the quote */ + + yyleng = 0; + while((c = input()) && c != q && c != '\n') + { + if(c == '\\') yytext[yyleng++] = input(); + else yytext[yyleng++] = c; + } + + yytext[yyleng++] = 0; + + grib_parser_include(yytext); + } + +\"|\' { + int c,q = yytext[0]; + + yyleng = 0; + + while((c = input()) && c != q && c != '\n') + { + if(c == '\\') yytext[yyleng++] = input(); + else yytext[yyleng++] = c; + } + + yytext[yyleng++] = 0; + yylval.str = strdup(yytext); + return STRING; + } + +` { + int c; + unsigned long val = 0; + + while((c = input()) && c != '`' && c != '\n') + { + val <<= 8; + val |= c; + } + yylval.lval = val; + return INTEGER; + } + + +{IDENT} { yylval.str = strdup(yytext); return IDENT; } +{NUMB} { yylval.lval = atol((const char *)yytext); return INTEGER; } +{FLOAT} { yylval.dval = atof((const char *)yytext); return FLOAT; } + + +\# { + int c; + while((c = input()) && (c != '\n')){} + + yylineno++; + } +[ \t\r]* ; +\n yylineno++; + + + +. return *yytext; + +%% + diff --git a/src/griby.y b/src/griby.y new file mode 100644 index 000000000..7e31e5ec7 --- /dev/null +++ b/src/griby.y @@ -0,0 +1,700 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + + +%{ + +#include "grib_api_internal.h" +/* #include "grib_parser.h" */ + +extern int yylex(); +extern int yyerror(const char*); + +extern grib_action* grib_parser_all_actions; +extern grib_concept_value* grib_parser_concept; +extern grib_context* grib_parser_context; +extern grib_rule* grib_parser_rules; + +static grib_concept_value* reverse(grib_concept_value* r); +static grib_concept_value *reverse_concept(grib_concept_value *r,grib_concept_value *s); + +/* typedef int (*testp_proc)(long,long); */ +/* typedef long (*grib_op_proc)(long,long); */ + + +%} + +%union { + char *str; + long lval; + double dval; + grib_darray *dvalue; + grib_iarray *ivalue; + grib_action *act; + grib_arguments *explist; + grib_expression *exp; + grib_concept_condition *concept_condition; + grib_concept_value *concept_value; + grib_case *case_value; + grib_rule *rules; + grib_rule_entry *rule_entry; +}; + +%start all + +%token LOWERCASE +%token IF +%token IF_TRANSIENT +%token ELSE +%token END +%token UNSIGNED +%token TEMPLATE +%token TEMPLATE_NOFAIL +%token TRIGGER +%token ASCII +%token KSEC1EXPVER +%token LABEL +%token LIST +%token WHILE +%token IBMFLOAT +%token SIGNED +%token BYTE +%token CODETABLE +%token COMPLEX_CODETABLE +%token LOOKUP +%token ALIAS +%token UNALIAS +%token META +%token POS +%token INTCONST +%token TRANS +%token FLAGBIT +%token CONCEPT +%token CONCEPT_NOFAIL +%token NIL +%token DUMMY + +%token MODIFY + +%token READ_ONLY +%token STRING_TYPE +%token LONG_TYPE +%token NO_COPY +%token DUMP +%token NO_FAIL +%token EDITION_SPECIFIC +%token OVERRIDE +%token HIDDEN +%token CAN_BE_MISSING +%token MISSING +%token CONSTRAINT +%token COPY_OK + +%token WHEN +%token SET +%token SET_NOFAIL +%token WRITE +%token APPEND +%token PRINT + +%token EXPORT +%token REMOVE +%token SKIP + +%token PAD +%token SECTION_PADDING +%token MESSAGE +%token PADTO +%token PADTOEVEN +%token PADTOMULTIPLE +%token G1_HALF_BYTE +%token G1_MESSAGE_LENGTH +%token G1_SECTION4_LENGTH +%token SECTION_LENGTH +%token FLAG +%token ITERATOR +%token NEAREST +%token BOX +%token KSEC +%token ASSERT + +%token CASE +%token SWITCH +%token DEFAULT + +%token EQ +%token NE +%token GE +%token LE +%token BIT +%token BITOFF + +%token AND +%token OR +%token NOT + +%token IS + +%token IDENT +%token STRING + +%token INTEGER +%token FLOAT + +%type dvalues + +%type instructions +%type instruction +%type simple +%type if_block +%type switch_block +%type list_block +%type while_block +%type when_block +%type trigger_block +%type concept_block +%type set +%type set_list + +%type argument +%type arguments +%type argument_list +%type default + + +%type expression +%type atom +%type condition +%type factor +%type term +%type power +%type conjonction +%type disjonction +%type string_or_ident + +%type flag +%type flags +%type flag_list + +%type concept_condition +%type concept_conditions + +%type concept_value +%type concept_list + +%type case_value +%type case_list + +%type rule_entry +%type rule_entries + +%type rules +%type rule +%type fact; +%type conditional_rule; + + +%% + +all : empty { grib_parser_all_actions = 0;grib_parser_concept=0; grib_parser_rules=0; } + | concept_list { grib_parser_concept = reverse($1); } + | instructions { grib_parser_all_actions = $1; } + | rules { grib_parser_rules = $1; } + /* memory leak here */ + | error { grib_parser_all_actions = 0; grib_parser_concept=0; grib_parser_rules=0; } + ; + +empty:; + + +dvalues : FLOAT { $$=grib_darray_push(0,0,$1);} + | dvalues ',' FLOAT { $$=grib_darray_push(0,$1,$3);} + | INTEGER { $$=grib_darray_push(0,0,$1);} + | dvalues ',' INTEGER { $$=grib_darray_push(0,$1,$3);} + +instructions : instruction + | instruction instructions { $1->next = $2; $$ = $1; } + | instruction ';' instructions { $1->next = $3; $$ = $1; } + | instruction ';' { $$ = $1;} + ; + +instruction: simple ';' + | if_block + | list_block + | while_block + | trigger_block + | concept_block + | when_block + | switch_block + + ; + + semi: ';' + | semi ';' + + +argument_list: empty { $$ = 0; } + | arguments + ; + +arguments : argument + | argument ',' arguments { $1->next = $3; $$ = $1; } + ; + +argument : expression { $$ = grib_arguments_new(grib_parser_context,$1,NULL); } + ; + + +simple : UNSIGNED '[' INTEGER ']' IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"unsigned",$3,NULL,$6,$7,NULL,NULL); free($5); } + + | UNSIGNED '[' INTEGER ']' IDENT '[' argument_list ']' default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"unsigned",$3,$7,$9,$10,NULL,NULL); free($5); } + + | UNSIGNED '(' INTEGER ')' IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"unsigned_bits",$3,NULL,$6,$7,NULL,NULL); free($5); } + + | UNSIGNED '(' INTEGER ')' IDENT '[' argument_list ']' default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"unsigned_bits",$3,$7,$9,$10,NULL,NULL); free($5); } + + | ASCII '[' INTEGER ']' IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"ascii",$3,NULL,$6,$7,NULL,NULL); free($5); } + + /* Special case for '7777' */ + | ASCII '[' INTEGER ']' STRING default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"ascii",$3,NULL,$6,$7,NULL,NULL); free($5); } + + | BYTE '[' INTEGER ']' IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"bytes",$3,NULL,$6,$7,NULL,NULL); free($5); } + + | BYTE '[' INTEGER ']' IDENT '[' argument_list ']' default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"bytes",$3,$7,$9,$10,NULL,NULL); free($5); } + + | KSEC1EXPVER '[' INTEGER ']' IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"ksec1expver",$3,NULL,$6,$7,NULL,NULL); free($5); } + + | SIGNED '[' INTEGER ']' IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"signed",$3,NULL,$6,$7,NULL,NULL); free($5); } + + | SIGNED '[' INTEGER ']' IDENT '[' argument_list ']' default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"signed",$3,$7,$9,$10,NULL,NULL); free($5); } + + | SIGNED '(' INTEGER ')' IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"signed_bits",$3,NULL,$6,$7,NULL,NULL); free($5); } + + | SIGNED '(' INTEGER ')' IDENT '[' argument_list ']' default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"signed_bits",$3,$7,$9,$10,NULL,NULL); free($5); } + + | CODETABLE '[' INTEGER ']' IDENT argument default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"codetable",$3, $6,$7,$8,NULL,NULL); free($5); } + + | CODETABLE '[' INTEGER ']' IDENT argument default SET '(' IDENT ')' flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"codetable",$3, $6,$7,$12,NULL,$10); + free($5);free($10); } + + | CODETABLE '[' INTEGER ']' IDENT '(' argument_list ')' default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"codetable",$3, $7,$9,$10,NULL,NULL); free($5); } + + | COMPLEX_CODETABLE '[' INTEGER ']' IDENT argument default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"complex_codetable",$3, $6,$7,$8,NULL,NULL); free($5); } + + | COMPLEX_CODETABLE '[' INTEGER ']' IDENT '(' argument_list ')' default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"complex_codetable",$3, $7,$9,$10,NULL,NULL); free($5); } + + | FLAG '[' INTEGER ']' IDENT argument default flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"codeflag",$3, $6,$7,$8,NULL,NULL); free($5); } + + | LOOKUP '[' INTEGER ']' IDENT '(' argument_list ')' flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"lookup",$3,$7,NULL,$9,NULL,NULL); free($5); } + + | FLAGBIT IDENT '(' argument_list ')' default flags + { $$ = grib_action_create_gen(grib_parser_context,$2,"bit",0,$4,$6,$7,NULL,NULL); free($2); } + + | LABEL IDENT + { $$ = grib_action_create_gen(grib_parser_context,$2,"label",0,NULL,NULL,0,NULL,NULL); free($2); } + + | LABEL STRING + { $$ = grib_action_create_gen(grib_parser_context,$2,"label",0,NULL,NULL,0,NULL,NULL); free($2); } + + | IBMFLOAT IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$2,"ibmfloat",4,NULL,$3,$4,NULL,NULL);free($2); } + + | IBMFLOAT IDENT '.' IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$4,"ibmfloat",4,NULL,$5,$6,$2,NULL);free($4); free($2); } + + | IBMFLOAT IDENT '[' argument ']' default flags + { $$ = grib_action_create_gen(grib_parser_context,$2,"ibmfloat",4,$4,$6,$7,NULL,NULL);free($2); } + + | POS IDENT + { $$ = grib_action_create_gen(grib_parser_context,$2,"position",0,NULL,NULL,0,NULL,NULL); free($2); } + + | INTCONST IDENT '=' argument flags + { $$ = grib_action_create_variable(grib_parser_context,$2,"constant",0,$4,NULL,$5,NULL);free($2); } + + | TRANS IDENT '=' argument flags + { $$ = grib_action_create_variable(grib_parser_context,$2,"transient",0,$4,$4,$5,NULL); free($2); } + + | FLOAT IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$2,"ieeefloat",4,NULL,$3,$4,NULL,NULL); free($2); } + + | FLOAT IDENT '.' IDENT default flags + { $$ = grib_action_create_gen(grib_parser_context,$4,"ieeefloat",4,NULL,$5,$6,$2,NULL); free($4);free($2);} + + | FLOAT IDENT '[' argument ']' default flags + { $$ = grib_action_create_gen(grib_parser_context,$2,"ieeefloat",4,$4,$6,$7,NULL,NULL);free($2); } + + | G1_HALF_BYTE IDENT + { $$ = grib_action_create_gen(grib_parser_context,$2,"g1_half_byte_codeflag",0,NULL,NULL,0,NULL,NULL);free($2); } + + | SECTION_LENGTH '[' INTEGER ']' IDENT + { $$ = grib_action_create_gen(grib_parser_context,$5,"section_length",$3,NULL,NULL,0,NULL,NULL);free($5); } + + | G1_MESSAGE_LENGTH '[' INTEGER ']' IDENT '(' argument_list ')' + { $$ = grib_action_create_gen(grib_parser_context,$5,"g1_message_length",$3,$7,NULL,0,NULL,NULL);free($5); } + + | G1_SECTION4_LENGTH '[' INTEGER ']' IDENT '(' argument_list ')' + { $$ = grib_action_create_gen(grib_parser_context,$5,"g1_section4_length",$3,$7,NULL,0,NULL,NULL);free($5); } + + | KSEC IDENT argument + { $$ = grib_action_create_gen(grib_parser_context,$2,"ksec",0,$3,NULL,0,NULL,NULL);free($2); } + + | PAD IDENT '(' argument_list ')' + { $$ = grib_action_create_gen(grib_parser_context,$2,"pad",0,$4,0,0,NULL,NULL); free($2); } + + | PADTO IDENT '(' argument_list ')' + { $$ = grib_action_create_gen(grib_parser_context,$2,"padto",0,$4,0,0,NULL,NULL); free($2); } + + | PADTOEVEN IDENT '(' argument_list ')' + { $$ = grib_action_create_gen(grib_parser_context,$2,"padtoeven",0,$4,0,0,NULL,NULL); free($2); } + + | PADTOMULTIPLE IDENT '(' argument_list ')' + { $$ = grib_action_create_gen(grib_parser_context,$2,"padtomultiple",0,$4,0,0,NULL,NULL); free($2); } + + | MESSAGE '[' INTEGER ']' IDENT flags + { $$ = grib_action_create_gen(grib_parser_context,$5,"message",$3,0,0,$6,NULL,NULL); free($5); } + + | SECTION_PADDING IDENT flags + { $$ = grib_action_create_gen(grib_parser_context,$2,"section_padding",0,0,0,$3,NULL,NULL); free($2); } + | TEMPLATE IDENT STRING + { $$ = grib_action_create_template(grib_parser_context,0,$2,$3); free($2); free($3);} + | TEMPLATE_NOFAIL IDENT STRING + { $$ = grib_action_create_template(grib_parser_context,1,$2,$3); free($2); free($3);} + + | ALIAS IDENT '=' IDENT flags + { $$ = grib_action_create_alias(grib_parser_context,$2,$4,NULL,$5); free($2); free($4); } + + | UNALIAS IDENT + { $$ = grib_action_create_alias(grib_parser_context,$2,NULL,NULL,0); free($2); } + + | ALIAS IDENT '.' IDENT '=' IDENT flags + { + $$ = grib_action_create_alias(grib_parser_context,$4,$6,$2,$7); free($2); free($4); free($6); + } + | UNALIAS IDENT '.' IDENT + { + $$ = grib_action_create_alias(grib_parser_context,$4,NULL,$2,0); free($2); free($4); + } + | META IDENT IDENT '(' argument_list ')' default flags + { $$ = grib_action_create_meta(grib_parser_context,$2,$3,$5,$7,$8,NULL); free($2);free($3);} + + | META IDENT '.' IDENT IDENT '(' argument_list ')' default flags + { $$ = grib_action_create_meta(grib_parser_context,$4,$5,$7,$9,$10,$2); free($4);free($5);free($2);} + + | ITERATOR IDENT '(' argument_list ')' + { + grib_arguments* a = grib_arguments_new( + grib_parser_context, + new_accessor_expression(grib_parser_context,$2), + NULL + ); + a->next=$4; + $$ = grib_action_create_meta(grib_parser_context, + "ITERATOR","iterator",a,NULL, + GRIB_ACCESSOR_FLAG_HIDDEN|GRIB_ACCESSOR_FLAG_READ_ONLY,NULL); free($2); + } + | NEAREST IDENT '(' argument_list ')' + { + grib_arguments* a = grib_arguments_new( + grib_parser_context, + new_accessor_expression(grib_parser_context,$2), + NULL + ); + a->next=$4; + $$ = grib_action_create_meta(grib_parser_context, + "NEAREST","nearest",a,NULL, + GRIB_ACCESSOR_FLAG_HIDDEN|GRIB_ACCESSOR_FLAG_READ_ONLY,NULL); free($2); + } + | BOX IDENT '(' argument_list ')' + { + grib_arguments* a = grib_arguments_new( + grib_parser_context, + new_accessor_expression(grib_parser_context,$2), + NULL + ); + a->next=$4; + $$ = grib_action_create_meta(grib_parser_context, + "BOX","box",a,NULL, + GRIB_ACCESSOR_FLAG_HIDDEN|GRIB_ACCESSOR_FLAG_READ_ONLY,NULL); free($2); + } + | EXPORT IDENT '(' argument_list ')' + { $$ = grib_action_create_put(grib_parser_context,$2,$4);free($2);} + + | REMOVE argument_list + { $$ = grib_action_create_remove(grib_parser_context,$2);} + + | ASSERT '(' expression ')' + { $$ = grib_action_create_assert(grib_parser_context,$3);} + + | MODIFY IDENT flags + { $$ = grib_action_create_modify(grib_parser_context,$2,$3); free($2);} + + | SET IDENT '=' MISSING { $$ = grib_action_create_set_missing(grib_parser_context,$2); free($2); } + | SET IDENT '=' expression { $$ = grib_action_create_set(grib_parser_context,$2,$4,0); free($2); } + | SET IDENT '=' '{' dvalues '}' { $$ = grib_action_create_set_darray(grib_parser_context,$2,$5); free($2); } + + | SET_NOFAIL IDENT '=' expression { $$ = grib_action_create_set(grib_parser_context,$2,$4,1); free($2); } + + + | WRITE STRING { $$ = grib_action_create_write(grib_parser_context,$2,0,0); free($2);} + | WRITE { $$ = grib_action_create_write(grib_parser_context,"",0,0); } + | WRITE '(' INTEGER ')' STRING { $$ = grib_action_create_write(grib_parser_context,$5,0,$3); free($5);} + | WRITE '(' INTEGER ')' { $$ = grib_action_create_write(grib_parser_context,"",0,$3); } + | APPEND STRING { $$ = grib_action_create_write(grib_parser_context,$2,1,0); free($2);} + | APPEND { $$ = grib_action_create_write(grib_parser_context,"",1,0); } + | APPEND '(' INTEGER ')' STRING { $$ = grib_action_create_write(grib_parser_context,$5,1,$3); free($5);} + | APPEND '(' INTEGER ')' { $$ = grib_action_create_write(grib_parser_context,"",1,$3); } + + | PRINT STRING { $$ = grib_action_create_print(grib_parser_context,$2,0); free($2); } + | PRINT '(' STRING ')' STRING { $$ = grib_action_create_print(grib_parser_context,$5,$3); free($5); free($3);} + | PRINT { $$ = grib_action_create_print(grib_parser_context,"",0); } + ; + +if_block : + IF '(' expression ')' '{' instructions '}' { $$ = grib_action_create_if(grib_parser_context,$3,$6,0,0); } +| IF '(' expression ')' '{' instructions '}' ELSE '{' instructions '}' { $$ = grib_action_create_if(grib_parser_context,$3,$6,$10,0); } +| IF_TRANSIENT '(' expression ')' '{' instructions '}' { $$ = grib_action_create_if(grib_parser_context,$3,$6,0,1); } +| IF_TRANSIENT '(' expression ')' '{' instructions '}' ELSE '{' instructions '}' { $$ = grib_action_create_if(grib_parser_context,$3,$6,$10,1); } + ; + +when_block : + WHEN '(' expression ')' set semi { $$ = grib_action_create_when(grib_parser_context,$3,$5,NULL); } + | WHEN '(' expression ')' '{' set_list '}' { $$ = grib_action_create_when(grib_parser_context,$3,$6,NULL); } + | WHEN '(' expression ')' '{' set_list '}' ELSE '{' set_list '}' { $$ = grib_action_create_when(grib_parser_context,$3,$6,$10); } + ; + +set : SET IDENT '=' expression { $$ = grib_action_create_set(grib_parser_context,$2,$4,0); free($2); } + | SET_NOFAIL IDENT '=' expression { $$ = grib_action_create_set(grib_parser_context,$2,$4,1); free($2); } + ; + +set_list : set semi + | set_list set semi { $1->next = $2; $$ = $1; } + ; + + +default : empty { $$ = NULL ;} + | '=' argument_list { $$ = $2 ;} + ; + +flags : empty { $$ = 0 ; } + | ':' flag_list { $$ = $2; } + ; + +flag_list : flag + | flag_list ',' flag { $$ = $1 | $3; } + ; + +flag: READ_ONLY { $$ = GRIB_ACCESSOR_FLAG_READ_ONLY; } + | LOWERCASE { $$ = GRIB_ACCESSOR_FLAG_LOWERCASE; } + | DUMP { $$ = GRIB_ACCESSOR_FLAG_DUMP; } + | NO_COPY { $$ = GRIB_ACCESSOR_FLAG_NO_COPY; } + | NO_FAIL { $$ = GRIB_ACCESSOR_FLAG_NO_FAIL; } + | HIDDEN { $$ = GRIB_ACCESSOR_FLAG_HIDDEN; } + | EDITION_SPECIFIC { $$ = GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; } + | CAN_BE_MISSING { $$ = GRIB_ACCESSOR_FLAG_CAN_BE_MISSING; } + | CONSTRAINT { $$ = GRIB_ACCESSOR_FLAG_CONSTRAINT; } + | OVERRIDE { $$ = GRIB_ACCESSOR_FLAG_OVERRIDE; } + | COPY_OK { $$ = GRIB_ACCESSOR_FLAG_COPY_OK; } + | TRANS { $$ = GRIB_ACCESSOR_FLAG_TRANSIENT; } + | STRING_TYPE { $$ = GRIB_ACCESSOR_FLAG_STRING_TYPE; } + | LONG_TYPE { $$ = GRIB_ACCESSOR_FLAG_LONG_TYPE; } + ; + +list_block : IDENT LIST '(' expression ')' '{' instructions '}' { $$ = grib_action_create_list(grib_parser_context,$1,$4,$7); free($1); } + ; + +while_block : WHILE '(' expression ')' '{' instructions '}' { $$ = grib_action_create_while(grib_parser_context,$3,$6); } + ; + +trigger_block : TRIGGER '(' argument_list ')' '{' instructions '}' { $$ = grib_action_create_trigger(grib_parser_context,$3,$6); } + ; + +concept_block : CONCEPT IDENT '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$2,$4,0,0,0,0,0,0,$6,0); free($2); } + | CONCEPT IDENT '(' IDENT ')' '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$2,$7,0,0,$4,0,0,0,$9,0); free($2);free($4); } + | CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,$10,0,$12,0); free($2);free($6);free($4);free($8);free($10); } + | CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,$10,$12,$14,0); free($2);free($6);free($4);free($8);free($10);free($12); } + | CONCEPT IDENT '(' IDENT ',' STRING ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,0,0,$10,0); free($2);free($6);free($4);free($8); } + | CONCEPT IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$4,0,$8,$2,$6,$10,$12,0,$14,0); free($4);free($8);free($6);free($10); free($2);} + | CONCEPT IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$4,0,$8,$2,$6,$10,0,0,$12,0); free($4);free($8);free($6);free($10); free($2);} + | CONCEPT IDENT '.' IDENT '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$4,$6,0,$2,0,0,0,0,$8,0); free($2);free($4); } + | CONCEPT IDENT '.' IDENT '(' IDENT ')' '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$4,$9,0,$2,$6,0,0,0,$11,0); free($2);free($4);free($6); } + |CONCEPT_NOFAIL IDENT '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$2,$4,0,0,0,0,0,0,$6,1); free($2); } + | CONCEPT_NOFAIL IDENT '(' IDENT ')' '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$2,$7,0,0,$4,0,0,0,$9,1); free($2);free($4); } + | CONCEPT_NOFAIL IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,$10,0,$12,1); free($2);free($6);free($4);free($8);free($10); } + | CONCEPT_NOFAIL IDENT '(' IDENT ',' STRING ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$2,0,$6,0,$4,$8,0,0,$10,1); free($2);free($6);free($4);free($8); } + | CONCEPT_NOFAIL IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$4,0,$8,$2,$6,$10,$12,0,$14,1); free($4);free($8);free($6);free($10);free($12); free($2);} + | CONCEPT_NOFAIL IDENT '.' IDENT '(' IDENT ',' STRING ',' IDENT ')' flags { $$ = grib_action_create_concept(grib_parser_context,$4,0,$8,$2,$6,$10,0,0,$12,1); free($4);free($8);free($6);free($10); free($2);} + | CONCEPT_NOFAIL IDENT '.' IDENT '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$4,$6,0,$2,0,0,0,0,$8,1); free($2);free($4); } + | CONCEPT_NOFAIL IDENT '.' IDENT '(' IDENT ')' '{' concept_list '}' flags { $$ = grib_action_create_concept(grib_parser_context,$4,$9,0,$2,$6,0,0,0,$11,1); free($2);free($4);free($6); } + + ; + +concept_list : concept_value + | concept_list concept_value { $$ = $2; $2->next = $1; } + ; + +case_list : case_value + | case_list case_value { $$ = $2; $2->next = $1; } + ; + +case_value : CASE arguments ':' instructions { $$ = grib_case_new(grib_parser_context,$2,$4); } + ; + +switch_block : + SWITCH '(' argument_list ')' '{' case_list DEFAULT ':' instructions '}' { $$ = grib_action_create_switch(grib_parser_context,$3,$6,$9); } + | SWITCH '(' argument_list ')' '{' case_list DEFAULT ':' '}' { $$ = grib_action_create_switch(grib_parser_context,$3,$6,grib_action_create_noop(grib_parser_context,"continue")); } + | SWITCH '(' argument_list ')' '{' case_list '}' { $$ = grib_action_create_switch(grib_parser_context,$3,$6,0); } + ; + + concept_value : STRING '=' '{' concept_conditions '}' { + $$ = grib_concept_value_new(grib_parser_context,$1,$4); free($1);} + | IDENT '=' '{' concept_conditions '}' { + $$ = grib_concept_value_new(grib_parser_context,$1,$4); free($1);} + | INTEGER '=' '{' concept_conditions '}' { + char buf[80]; sprintf(buf,"%ld",(long)$1); $$ = grib_concept_value_new(grib_parser_context,buf,$4);} + | FLOAT '=' '{' concept_conditions '}' { + char buf[80]; sprintf(buf,"%g",(double)$1); $$ = grib_concept_value_new(grib_parser_context,buf,$4);} + ; + +concept_conditions : concept_condition + | concept_condition concept_conditions { $1->next = $2; $$ = $1; } + ; + +concept_condition : IDENT '=' expression ';' { $$ = grib_concept_condition_new(grib_parser_context,$1,$3); free($1); } + + +string_or_ident : IDENT { $$ = new_accessor_expression(grib_parser_context,$1); free($1); } + | STRING { $$ = new_string_expression(grib_parser_context,$1); free($1); } + ; + +atom : string_or_ident + | INTEGER { $$ = new_long_expression(grib_parser_context,$1); } + | FLOAT { $$ = new_double_expression(grib_parser_context,$1); /* TODO: change to new_float_expression*/} + + | NIL { $$ = NULL; } + | DUMMY { $$ = new_true_expression(grib_parser_context); } + | '(' expression ')' { $$ = $2; } + | '-' atom { $$ = new_unop_expression(grib_parser_context,&grib_op_neg,&grib_op_neg_d,$2); } + | IDENT '(' ')' { $$ = new_func_expression(grib_parser_context,$1,NULL); free($1);} + | IDENT '(' argument_list ')' { $$ = new_func_expression(grib_parser_context,$1,$3); free($1);} + ; + + +power : atom '^' power { $$ = new_binop_expression(grib_parser_context,&grib_op_pow,NULL,$1,$3); } + | atom + ; + +factor : factor '*' power { $$ = new_binop_expression(grib_parser_context,&grib_op_mul,&grib_op_mul_d,$1,$3); } + | factor '/' power { $$ = new_binop_expression(grib_parser_context,&grib_op_div,&grib_op_div_d,$1,$3); } + | factor '%' power { $$ = new_binop_expression(grib_parser_context,&grib_op_modulo,NULL,$1,$3); } + | factor BIT power { $$ = new_binop_expression(grib_parser_context,&grib_op_bit,NULL,$1,$3); } + | factor BITOFF power { $$ = new_binop_expression(grib_parser_context,&grib_op_bitoff,NULL,$1,$3); } + | power + ; + +term : term '+' factor { $$ = new_binop_expression(grib_parser_context,&grib_op_add,&grib_op_add_d,$1,$3); } + | term '-' factor { $$ = new_binop_expression(grib_parser_context,&grib_op_sub,&grib_op_sub_d,$1,$3); } + | factor + ; + +condition : condition '>' term { $$ = new_binop_expression(grib_parser_context,&grib_op_gt,&grib_op_gt_d,$1,$3); } + /* | condition '=' term { $$ = new_binop_expression(grib_parser_context,&grib_op_eq,$1,$3); } */ + | condition EQ term { $$ = new_binop_expression(grib_parser_context,&grib_op_eq,&grib_op_eq_d,$1,$3); } + | condition '<' term { $$ = new_binop_expression(grib_parser_context,&grib_op_lt,&grib_op_lt_d,$1,$3); } + | condition GE term { $$ = new_binop_expression(grib_parser_context,&grib_op_ge,&grib_op_ge_d,$1,$3); } + | condition LE term { $$ = new_binop_expression(grib_parser_context,&grib_op_le,&grib_op_le_d,$1,$3); } + | condition NE term { $$ = new_binop_expression(grib_parser_context,&grib_op_ne,&grib_op_ne_d,$1,$3); } + | string_or_ident IS string_or_ident { $$ = new_string_compare_expression(grib_parser_context,$1,$3); } +/* + | condition IN term { $$ = new_binop_expression(grib_parser_context,grib_op_pow,$1,$3); } + | condition MATCH term { $$ = new_binop_expression(grib_parser_context,grib_op_pow,$1,$3); } +*/ + | NOT condition { $$ = new_unop_expression(grib_parser_context,&grib_op_not,NULL,$2); } + | term + ; + +conjonction : conjonction AND condition { $$ = new_binop_expression(grib_parser_context,&grib_op_and,NULL,$1,$3); } + | condition + ; + +disjonction : disjonction OR conjonction { $$ = new_binop_expression(grib_parser_context,&grib_op_or,NULL,$1,$3);} + | conjonction + ; + +expression : disjonction + ; + + +/* */ + +rule : fact + | conditional_rule + ; + +rule_entry : IDENT '=' expression ';' { $$ = grib_new_rule_entry(grib_parser_context,$1,$3); free($1); } + | SKIP ';' { $$ = grib_new_rule_entry(grib_parser_context,"skip",0);} + ; + +rule_entries : rule_entry + | rule_entry rule_entries { $1->next = $2; $$ = $1; } + ; + +fact: rule_entry { $$ = grib_new_rule(grib_parser_context,NULL,$1); } + ; + + +conditional_rule: IF '(' expression ')' '{' rule_entries '}' { $$ = grib_new_rule(grib_parser_context,$3,$6); } + ; + +rules : rule + | rule rules { $1->next = $2; $$ = $1; } + ; + + +%% + +static grib_concept_value *reverse_concept(grib_concept_value *r,grib_concept_value *s) +{ + grib_concept_value *v; + + if(r == NULL) return s; + + v = r->next; + r->next = s; + return reverse_concept(v,r); +} + + +static grib_concept_value* reverse(grib_concept_value* r) +{ + return reverse_concept(r,NULL); +} + + + diff --git a/src/hash.c b/src/hash.c new file mode 100755 index 000000000..37aa3a1da --- /dev/null +++ b/src/hash.c @@ -0,0 +1,127 @@ +#include +#include "mars.h" + +#define SIZE ((int)4097) + +typedef struct hashrec { + struct hashrec *next; + char *name; + int cnt; +} hashrec; + +static hashrec *table[SIZE] = { + NULL, }; + + +static int hash(const char *name) +{ + int n = 0; + + while(*name) + n += (*name++ - 'A') + (n << 5); + +#ifdef CRAY + if(n<0) n = -n; +#else + if(n<0) { + int m = -n/SIZE; + n += (m+1)*SIZE; + } +#endif + return n % SIZE; +} + +void hash_stat() +{ + int i; + int a=0,b=0,c=0; + hashrec *h; + + printf("Table size is %d. ",SIZE); + + for(i=0;icnt; h = h->next; }; + } + + printf("Used: %d, Total: %d, Strings: %d\n",a,b,c); +} + +char *strcache(const char *name) +{ + hashrec *h; + int n; + + if(name == NULL) return NULL; + + n = hash(name); + h = table[n]; + + while(h) + { + if(EQ(h->name,name)) + { + h->cnt++; + return h->name; + } + h = h->next; + } + + h = NEW(hashrec); + h->name = NEW_STRING(name); + h->next = table[n]; + h->cnt = 1; + table[n] = h; + + return h->name; +} + +void strfree(char *name) +{ + + hashrec *h; + hashrec *p = NULL; + int n; + + if(name == NULL) return; + + n = hash(name); + h = table[n]; + + while(h) + { + if(h->name == name) + { + h->cnt--; + break; + } + p = h; + h = h->next; + } + + if(h == NULL) + { + marslog(LOG_WARN,"%s was not in hash table",name); + abort(); + printf("n=%d\n",n); + h = table[n]; + while(h) + { + printf("%s %d\n",h->name,h->cnt); + h = h->next; + } + return; + } + + if(h->cnt == 0) + { + if(p) p->next = h->next; + else table[n] = h->next; + FREE(h->name); + FREE(h); + } +} + + diff --git a/src/jgribapi_GribFile.h b/src/jgribapi_GribFile.h new file mode 100644 index 000000000..1dc293113 --- /dev/null +++ b/src/jgribapi_GribFile.h @@ -0,0 +1,71 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class jgribapi_GribFile */ + +#ifndef _Included_jgribapi_GribFile +#define _Included_jgribapi_GribFile +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: jgribapi_GribFile + * Method: gribGetNextHandle + * Signature: (J)Ljgribapi/GribHandle; + */ +JNIEXPORT jobject JNICALL Java_jgribapi_GribFile_gribGetNextHandle + (JNIEnv *, jobject, jlong); + +/* + * Class: jgribapi_GribFile + * Method: gribEOFReached + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_jgribapi_GribFile_gribEOFReached + (JNIEnv *, jobject, jlong); + +/* + * Class: jgribapi_GribFile + * Method: gribGetGribFile + * Signature: (Ljava/lang/String;)J + */ +JNIEXPORT jlong JNICALL Java_jgribapi_GribFile_gribGetGribFile + (JNIEnv *, jobject, jstring); + +/* + * Class: jgribapi_GribFile + * Method: gribCloseFile + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_jgribapi_GribFile_gribCloseFile + (JNIEnv *, jobject, jlong); + +/* + * Class: jgribapi_GribFile + * Method: gribNewFile + * Signature: (Ljava/lang/String;)J + */ +JNIEXPORT jlong JNICALL Java_jgribapi_GribFile_gribNewFile + (JNIEnv *, jobject, jstring); + +/* + * Class: jgribapi_GribFile + * Method: gribWriteHandle + * Signature: (JJ)V + */ +JNIEXPORT void JNICALL Java_jgribapi_GribFile_gribWriteHandle + (JNIEnv *, jobject, jlong, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/jgribapi_GribHandle.h b/src/jgribapi_GribHandle.h new file mode 100644 index 000000000..e724e5af4 --- /dev/null +++ b/src/jgribapi_GribHandle.h @@ -0,0 +1,175 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class jgribapi_GribHandle */ + +#ifndef _Included_jgribapi_GribHandle +#define _Included_jgribapi_GribHandle +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: jgribapi_GribHandle + * Method: getIteratorID + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_jgribapi_GribHandle_getIteratorID + (JNIEnv *, jobject, jlong); + +/* + * Class: jgribapi_GribHandle + * Method: gribGetString + * Signature: (JLjava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_jgribapi_GribHandle_gribGetString + (JNIEnv *, jobject, jlong, jstring); + +/* + * Class: jgribapi_GribHandle + * Method: gribGetLong + * Signature: (JLjava/lang/String;)J + */ +JNIEXPORT jlong JNICALL Java_jgribapi_GribHandle_gribGetLong + (JNIEnv *, jobject, jlong, jstring); + +/* + * Class: jgribapi_GribHandle + * Method: gribGetDouble + * Signature: (JLjava/lang/String;)D + */ +JNIEXPORT jdouble JNICALL Java_jgribapi_GribHandle_gribGetDouble + (JNIEnv *, jobject, jlong, jstring); + +/* + * Class: jgribapi_GribHandle + * Method: gribGetLongArray + * Signature: (JLjava/lang/String;)[J + */ +JNIEXPORT jlongArray JNICALL Java_jgribapi_GribHandle_gribGetLongArray + (JNIEnv *, jobject, jlong, jstring); + +/* + * Class: jgribapi_GribHandle + * Method: gribGetDoubleArray + * Signature: (JLjava/lang/String;)[D + */ +JNIEXPORT jdoubleArray JNICALL Java_jgribapi_GribHandle_gribGetDoubleArray + (JNIEnv *, jobject, jlong, jstring); + +/* + * Class: jgribapi_GribHandle + * Method: gribSetString + * Signature: (JLjava/lang/String;Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_jgribapi_GribHandle_gribSetString + (JNIEnv *, jobject, jlong, jstring, jstring); + +/* + * Class: jgribapi_GribHandle + * Method: gribCreateNext + * Signature: (J)Ljgribapi/GribKey; + */ +JNIEXPORT jobject JNICALL Java_jgribapi_GribHandle_gribCreateNext + (JNIEnv *, jobject, jlong); + +/* + * Class: jgribapi_GribHandle + * Method: gribSetSearch + * Signature: (JLjava/lang/String;)J + */ +JNIEXPORT jlong JNICALL Java_jgribapi_GribHandle_gribSetSearch + (JNIEnv *, jobject, jlong, jstring); + +/* + * Class: jgribapi_GribHandle + * Method: gribSetLong + * Signature: (JLjava/lang/String;J)I + */ +JNIEXPORT jint JNICALL Java_jgribapi_GribHandle_gribSetLong + (JNIEnv *, jobject, jlong, jstring, jlong); + +/* + * Class: jgribapi_GribHandle + * Method: gribSetDouble + * Signature: (JLjava/lang/String;D)I + */ +JNIEXPORT jint JNICALL Java_jgribapi_GribHandle_gribSetDouble + (JNIEnv *, jobject, jlong, jstring, jdouble); + +/* + * Class: jgribapi_GribHandle + * Method: gribSetLongArray + * Signature: (JLjava/lang/String;[J)I + */ +JNIEXPORT jint JNICALL Java_jgribapi_GribHandle_gribSetLongArray + (JNIEnv *, jobject, jlong, jstring, jlongArray); + +/* + * Class: jgribapi_GribHandle + * Method: gribSetDoubleArray + * Signature: (JLjava/lang/String;[D)I + */ +JNIEXPORT jint JNICALL Java_jgribapi_GribHandle_gribSetDoubleArray + (JNIEnv *, jobject, jlong, jstring, jdoubleArray); + +/* + * Class: jgribapi_GribHandle + * Method: gribGetXml + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_jgribapi_GribHandle_gribGetXml__J + (JNIEnv *, jobject, jlong); + +/* + * Class: jgribapi_GribHandle + * Method: gribGetXml + * Signature: (JLjava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_jgribapi_GribHandle_gribGetXml__JLjava_lang_String_2 + (JNIEnv *, jobject, jlong, jstring); + +/* + * Class: jgribapi_GribHandle + * Method: gribGetAscii + * Signature: (JLjava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_jgribapi_GribHandle_gribGetAscii + (JNIEnv *, jobject, jlong, jstring); + +/* + * Class: jgribapi_GribHandle + * Method: gribGetBytes + * Signature: (JLjava/lang/String;)[B + */ +JNIEXPORT jbyteArray JNICALL Java_jgribapi_GribHandle_gribGetBytes + (JNIEnv *, jobject, jlong, jstring); + +/* + * Class: jgribapi_GribHandle + * Method: gribDeleteHandle + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_jgribapi_GribHandle_gribDeleteHandle + (JNIEnv *, jobject, jlong); + +/* + * Class: jgribapi_GribHandle + * Method: gribResetHandle + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_jgribapi_GribHandle_gribResetHandle + (JNIEnv *, jobject, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/jgribapi_GribIterator.h b/src/jgribapi_GribIterator.h new file mode 100644 index 000000000..0e73a3978 --- /dev/null +++ b/src/jgribapi_GribIterator.h @@ -0,0 +1,39 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class jgribapi_GribIterator */ + +#ifndef _Included_jgribapi_GribIterator +#define _Included_jgribapi_GribIterator +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: jgribapi_GribIterator + * Method: gribIteratorGetNext + * Signature: (J)Ljgribapi/GribPoint; + */ +JNIEXPORT jobject JNICALL Java_jgribapi_GribIterator_gribIteratorGetNext + (JNIEnv *, jobject, jlong); + +/* + * Class: jgribapi_GribIterator + * Method: gribIteratorHasNext + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_jgribapi_GribIterator_gribIteratorHasNext + (JNIEnv *, jobject, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/latlon.req b/src/latlon.req new file mode 100644 index 000000000..bf3968bfa --- /dev/null +++ b/src/latlon.req @@ -0,0 +1 @@ +ret,padding=0,level=500,grid=2/2,area=2/0/0/2,target=latlon.grib diff --git a/src/make_accessor_class_hash.ksh b/src/make_accessor_class_hash.ksh new file mode 100755 index 000000000..32c217777 --- /dev/null +++ b/src/make_accessor_class_hash.ksh @@ -0,0 +1,18 @@ +#!/usr/bin/ksh + +cat > accessor_class_list.gperf <> accessor_class_list.gperf + +p4 edit grib_accessor_classes_hash.c + +gperf -W classes -t -G -H grib_accessor_classes_get_id -N grib_accessor_classes_hash -m 1 -j 1 accessor_class_list.gperf | sed s/__inline//g | sed s/inline//g > grib_accessor_classes_hash.c + diff --git a/src/make_class.pl b/src/make_class.pl new file mode 100755 index 000000000..820563287 --- /dev/null +++ b/src/make_class.pl @@ -0,0 +1,389 @@ +#!/usr/bin/perl +use strict; +use Data::Dumper; +use Switch; + + +my $name; + +foreach $name ( @ARGV ) +{ + next unless($name =~ /\.c$/); + print "$name\n"; + + open(IN,"<$name") or die "$name: $!"; + open(OUT,">$name.tmp") or die "$name.tmp: $!"; + my $class; + my $tmp; + my $out = 1; + my $doit = 0; + + while() + { + if(/^\s*START_CLASS_DEF/) + { + $tmp = { NAME => $name }; + $tmp->{NAME} =~ s/\..*//; + $tmp->{NAME} =~ s/.*_class_//; + } + + if(/^\s*END_CLASS_DEF/) + { + $class = $tmp; + $tmp = undef; + } + + if(/^\s*([A-Z]+)\s*=\s*(.*)/ && $tmp) + { + if(exists $tmp->{$1}) + { + $tmp->{$1} = join(";",$tmp->{$1},$2) + } + else + { + $tmp->{$1} = $2; + } + } + + if(/^\/\*\s*START_CLASS_IMP/) + { + print OUT $_; + $out = 0; + output($name,$class); + } + + if(/^\/\*\s*END_CLASS_IMP/) + { + $out = 1; + $doit=1; + } + + print OUT $_ if($out); + + } + + close(OUT) or die "$name.tmp: $!"; + + if($doit) + { + use File::Copy qw(cp); + use File::Compare qw(compare_text compare); + + if(compare_text("$name.tmp",$name)) + { + print "UPDATING file $name\n"; + system("p4 edit $name") unless(-w $name); + cp($name,"$name.old") or die "cp($name,$name.old): $!"; + cp("$name.tmp",$name) or die "cp($name.tmp,$name): $!"; + } + } + else + { + print "IGNORING file $name\n"; + } + + unlink("$name.tmp"); + +} + +sub cleanup { + my ($x) = @_; + $x =~ s/^\s*//; + $x =~ s/\s*$//; + return $x; +} + +sub super_members { + my ($super,$list) = @_; + $super = cleanup($super); + my $s = parse_super($super); + + my $class = cleanup($s->{NAME}); + + my @members = map { cleanup($_);} split(";",$s->{MEMBERS}); + unshift @members, "/* Members defined in $class */"; + + unshift @{$list}, @members; + + super_members($s->{SUPER},$list) if($s->{SUPER}); +} + +sub output { + my ($file,$args) = @_; + local $_; + + my %delegates; + + my $class = cleanup($args->{CLASS}); + + my $name = cleanup($args->{NAME}); + my @members = map { cleanup($_);} split(";",$args->{MEMBERS}); + unshift @members, "/* Members defined in $name */"; + + my @implements = map { cleanup($_);} split(";",$args->{IMPLEMENTS}); + + + push @implements, "init_class"; + + my %implements; + @implements{@implements} = (1)x@implements; + + my @inherits = map { cleanup($_);} split(";",$args->{INHERITS}); + my %inherits; + @inherits{@inherits} = (1)x@inherits; + + super_members($args->{SUPER},\@members) if($args->{SUPER}); + + print OUT <<"EOF"; + +/* + +Don't edit anything between START_CLASS_IMP and END_CLASS_IMP +Instead edit values between START_CLASS_DEF and END_CLASS_DEF +or edit "$class.class" and rerun $0 + +*/ + +EOF + + my @procs; + + open(CLASS,"<$class.class") or die "$class.class: $!"; + + while() + { + if(/^(static\s+\w+\s*\*?\s*(\w+)\s*\(.*);/) + { + if(exists $args->{DELEGATE}) + { + $delegates{$2} = $1 unless($implements{$2}); + $implements{$2} = 1; + } + next unless($implements{$2}); + } + + if(/&SUPER/) + { + s/&SUPER/0/ unless($args->{SUPER}); + s/&SUPER/&grib_SUPER/ unless($args->{SUPER} =~ /^grib_/); + } + + if(/extern.*SUPER/) + { + next unless($args->{SUPER}); + s/extern(.*)SUPER/extern${1}grib_SUPER/ unless($args->{SUPER} =~ /^grib_/); + } + + if(/&\s*([a-z_]+)\s*,/) + { + push @procs, $1 unless($1 eq "SUPER"); + s/&\s*\w+/0/ unless($implements{$1}); + s/&\s*\w+/&SUPER.$1/ if($inherits{$1}); + } + + if(/MEMBERS/) + { + foreach my $m ( @members ) + { + if($m =~ /\/\*/) + { + print OUT "$m\n"; + } + else + { + print OUT "\t$m;\n"; + } + } + next; + } + + s/([A-Z]+)/exists $args->{$1}?cleanup($args->{$1}):$1/eg; + + if(/^ADD_TO_FILE\s+([\w\.]*)\s+(.*)/) + { + chomp; + my %text; + my $file = $1; + my $more = $2; + + $text{$more}++; + + if(-f $file) + { + local $_; + system("p4 edit $file") unless(-w $file); + open(F,"<$file") or die "$file: $!"; + + while() + { + chomp; + next unless($_); + $text{$_}++ unless(/^\/\*/); + } + + close(F); + } + + open(F,">$file") or die "$file: $!"; + print F "/* This file is automatically generated by $0, do not edit */\n"; + foreach my $t ( sort keys %text ) + { + print F $t,"\n"; + } + close(F) or die "$file: $!"; + + next; + + } + + if(/^INIT/) + { + next unless($args->{SUPER}); + + foreach my $c ( grep { !$implements{$_} } grep { ! /\binit\b|\bdestroy\b|\bpost_init\b/ } @procs ) + { + print OUT "\tc->$c\t=\t(*(c->super))->$c;\n"; + } + next; + } + + print OUT $_; + } + + foreach my $proc ( grep { /clone/ } @procs ) { + my $done=0; + print OUT "static grib_$class* clone(grib_$class* s) {\n"; + print OUT "\tgrib_${class}_$name* c=grib_context_alloc_clear(a->parent->h,sizeof(grib_${class}_$name));\n"; + foreach my $m ( @members ) { + if ( $m =~ /\/\*/ ) {next;} + print OUT "\n\tgrib_${class}_$name* self=(grib_${class}_$name*)s;\n\n" unless ($done); + $done=1; + my $is_pointer=0; + my @ma=split(/ /,$m); + my $mname=pop @ma; + if ($mname=~ /\*/) { $is_pointer=1; $mname =~ s/\*//; } + my $mtype=pop @ma; + if ($mtype=~ /\*/) { $is_pointer=1; $mtype =~ s/\*//; } + + if ($is_pointer) { + switch ($mtype) { + case "char" { + print OUT "\tif (self->$mname) \n\t\tc->$mname=grib_context_strdup(a->parent->h,self->$mname);\n\n"; + } + case /double|long|int|float/ { + print OUT "\tif (self->".$mname."_size) {\n"; + print OUT "\tint i=0;\n"; + print OUT "\tc->$mname=grib_context_alloc_clear(a->parent->h,self->".$mname."_size*sizeof($mtype));"; + print OUT "\tfor (i=0;i${mname}_size;i++) c->".$mname."[i]=self->".$mname."[i];"; + print OUT "}\n"; + } + } + } else { print OUT "\tc->$mname=self->$mname;\n\n"; } + } + print OUT "\treturn (grib_$class*)c;\n}\n\n" + } + + delete $delegates{init}; + delete $delegates{post_init}; + delete $delegates{destroy}; + + if(%delegates) + { + print OUT "\n/* Start delegate methods */ \n"; + + print OUT "\nstatic grib_accessor_class* $args->{DELEGATE}(accessor*);\n\n"; + + foreach my $d ( sort keys %delegates ) + { + $delegates{$d} =~ /static\s+(.*)\s+(\w+)\s*\((.*)\)/; + my $return = $1 eq "void" ? "" : "return "; + my $ret = $1; + + my @args = map { s/^ +//; s/ +$//; $_; } split(",",$3); + + my $i = 0; + my @types; + local $" = " "; + + foreach my $a ( @args ) + { + my @x = split(" ",$a); + + $a = $x[-1]; + if(@x == 1 || $a =~ /\*$/) + { + $a = "arg" . $i++ ; + push @x,$a; + } + push @types, join(" ",@x); + $a =~ s/^\*//; + } + + local $" = ","; + + print OUT <<"EOF"; + +static $ret $d(@types) +{ + ${return}target($args[0])->$d(@args); +} +EOF + } + + print OUT "\n/* End delegate methods */ \n"; + } + + close(CLASS); +} + + +sub parse_super { + + my ($name) = @_; + + local $_; + + # Make sure it's up-to-date + system($0,"$name.c"); + + open(S,"<$name.c") or die "$name.c: $!"; + +# print "SUPER: $name\n"; + + my $class; + my $tmp; + + while() + { + if(/^\s*START_CLASS_DEF/) + { + $tmp = { NAME => $name }; + $tmp->{NAME} =~ s/\..*//; + $tmp->{NAME} =~ s/.*_class_//; + } + + if(/^\s*END_CLASS_DEF/) + { + $class = $tmp; + last; + } + + if(/^\s*([A-Z]+)\s*=\s*(.*)/ && $tmp) + { + if(exists $tmp->{$1}) + { + $tmp->{$1} = join(";",$tmp->{$1},$2) + } + else + { + $tmp->{$1} = $2; + } + } + + } + + close(S); + + return $tmp; + +} diff --git a/src/make_hash_keys.ksh b/src/make_hash_keys.ksh new file mode 100755 index 000000000..f9503c43e --- /dev/null +++ b/src/make_hash_keys.ksh @@ -0,0 +1,15 @@ +#!/usr/bin/ksh +set -x + +cd ../tests + +./list_all_keys.ksh + +cd ../src + +p4 edit keys grib_hash_keys.c + +gperf -I -t -G -H hash_keys -N grib_keys_hash_get -m 3 ../tests/keys | sed s/__inline//g | sed s/inline//g > grib_hash_keys.c + +cat grib_itrie_keys.c >> grib_hash_keys.c + diff --git a/src/make_table.pl b/src/make_table.pl new file mode 100755 index 000000000..6e903179c --- /dev/null +++ b/src/make_table.pl @@ -0,0 +1,145 @@ +#!/usr/local/bin/perl56 +use DBI; +use strict; +use Data::Dumper; + +sub usage +{ + $0 =~ s#.*/##; + my $s = " " x length($0); +print STDERR <] | [--list ] + +EOF +} + + + if( $#ARGV < 0 ) + { + &usage; + exit(1); + } + +my $db = DBI->connect("dbi:Pg(RaiseError=>1,Taint=>0,AutoCommit=>1):dbname=metdb_test;host=datasvc;user=max","",""); + +# Existing local Grib tables in database +# my $table = "grib_versions"; +# my $what = "grib_code"; +# my $where = "mars_abbreviation='98'"; + + my $table = "grib_parameters"; + my $what = "grib_code_table"; + my $where = "grib_originating_centre='98'"; + + my $d=$db->prepare("select distinct $what from $table where $where order by $what"); + $d->execute(); + my @tables; + while( my (@x) = $d->fetchrow_array ) + { + push @tables, $x[0] ; + } + +#Deal with option + +my @versions; + +SWITCH: +{ +if ($ARGV[0] =~ /^[-+].+/) +{ + if ($ARGV[0] eq "-a" || $ARGV[0] eq "--alltables") + { + @versions = @tables; + last SWITCH; + } + if ($ARGV[0] eq "-l" || $ARGV[0] eq "--list") + { + shift @ARGV; + if( $#ARGV < 0 ) + { + print STDERR "Specify list of Grib tables\n"; + exit(1); + } + foreach my $x (@ARGV) + { + my $ok=1; + push @versions, $x ; + foreach my $y (@tables) + { + $ok=0 if($x==$y); + } + if($ok) + { + print STDERR "\n"; + print STDERR "Unrecognized Grib table: $x\n"; + exit(1); + } + } + last SWITCH; + } + if ($ARGV[0] eq "-h" || $ARGV[0] eq "--help") + { + &usage; + $db->disconnect(); + exit; + } + print STDERR "Unrecognized option: $ARGV[0]\n"; + &usage; + $db->disconnect(); + exit(1); +} +else { + print STDERR "Unrecognized option: $ARGV[0]\n"; + &usage; + $db->disconnect(); + exit; +} +} + + + $table = "grib_parameters"; + $what = "grib_parameter, mars_abbreviation, long_name, unit, comment"; + +foreach my $version (@versions) +{ + my $where = "where grib_originating_centre='98' and grib_code_table='$version'"; + my $s=$db->prepare("select $what from $table $where order by $what"); + + $s->execute; + + my $out="local_table_2_version_$version"; + open(G,">$out") or die "can not write to $out"; + + while(my (@x) = $s->fetchrow_array) + { + + my $param = '0' x 3; + my $offset = length($param) - length($x[0]); + substr($param, $offset, length($x[0])) = $x[0]; + + $offset = 1; + $x[1] = 'None' unless( $x[1] ); + my $abbr = ' ' x 6; + substr($abbr, $offset, length($x[1])) = $x[1]; + + my $long = ' ' x 70; + substr($long, $offset, length($x[2])) = $x[2]; + + $x[3] = '-' unless( $x[3] ); + my $unit = ' ' x 30; + substr($unit, $offset, length($x[3])) = $x[3]; + + printf G "%s %s %s %s \n",$param,$abbr,$long,$unit; + + } +} + +close(G); + +$db->disconnect(); diff --git a/src/md5.c b/src/md5.c new file mode 100644 index 000000000..091363df6 --- /dev/null +++ b/src/md5.c @@ -0,0 +1,296 @@ + +#include "md5.h" + +#include +#include +#include +#include + +static unsigned long r[] = { + 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, + 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, + 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, + 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}; + +static unsigned long k[] = { + 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, + 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, + 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, + 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, + 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, + 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, + 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, + 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391}; + +#if 0 +static const unsigned long t = 32; + +static unsigned long rotate(unsigned long x,unsigned long c) { return (x << c) | (x >> (t-c)); } + + +static unsigned long F(unsigned long x,unsigned long y,unsigned long z) { return (x&y)|((~x)&z); } +static unsigned long G(unsigned long x,unsigned long y,unsigned long z) { return (x&z)|(y&(~z)); } +static unsigned long H(unsigned long x,unsigned long y,unsigned long z) { return x^y^z; } +static unsigned long I(unsigned long x,unsigned long y,unsigned long z) { return y^(x|(~z)); } +#endif + + +#define ROT(x,c) ((x << c) | (x >> (32-c))) + +#define _F(x,y,z) ((x&y)|((~x)&z)) +#define _G(x,y,z) ((x&z)|(y&(~z))) +#define _H(x,y,z) (x^y^z) +#define _I(x,y,z) (y^(x|(~z))) + +#define F_(A,B,C,D,g,i) A += _F(B,C,D)+w[g]+k[i]; A &= 0xffffffff; A = ROT(A, r[i]); A+=B; +#define G_(A,B,C,D,g,i) A += _G(B,C,D)+w[g]+k[i]; A &= 0xffffffff; A = ROT(A, r[i]); A+=B; +#define H_(A,B,C,D,g,i) A += _H(B,C,D)+w[g]+k[i]; A &= 0xffffffff; A = ROT(A, r[i]); A+=B; +#define I_(A,B,C,D,g,i) A += _I(B,C,D)+w[g]+k[i]; A &= 0xffffffff; A = ROT(A, r[i]); A+=B; + +static void grib_md5_flush(grib_md5_state* s) +{ + + +#if 1 + unsigned long a = s->h0; + unsigned long b = s->h1; + unsigned long c = s->h2; + unsigned long d = s->h3; + unsigned long *w = &s->words[0]; + + F_(a,b,c,d, 0, 0); + F_(d,a,b,c, 1, 1); + F_(c,d,a,b, 2, 2); + F_(b,c,d,a, 3, 3); + + F_(a,b,c,d, 4, 4); + F_(d,a,b,c, 5, 5); + F_(c,d,a,b, 6, 6); + F_(b,c,d,a, 7, 7); + + F_(a,b,c,d, 8, 8); + F_(d,a,b,c, 9, 9); + F_(c,d,a,b,10,10); + F_(b,c,d,a,11,11); + + F_(a,b,c,d,12,12); + F_(d,a,b,c,13,13); + F_(c,d,a,b,14,14); + F_(b,c,d,a,15,15); + + G_(a,b,c,d, 1,16); + G_(d,a,b,c, 6,17); + G_(c,d,a,b,11,18); + G_(b,c,d,a, 0,19); + + G_(a,b,c,d, 5,20); + G_(d,a,b,c,10,21); + G_(c,d,a,b,15,22); + G_(b,c,d,a, 4,23); + + G_(a,b,c,d, 9,24); + G_(d,a,b,c,14,25); + G_(c,d,a,b, 3,26); + G_(b,c,d,a, 8,27); + + G_(a,b,c,d,13,28); + G_(d,a,b,c, 2,29); + G_(c,d,a,b, 7,30); + G_(b,c,d,a,12,31); + + H_(a,b,c,d, 5,32); + H_(d,a,b,c, 8,33); + H_(c,d,a,b,11,34); + H_(b,c,d,a,14,35); + + H_(a,b,c,d, 1,36); + H_(d,a,b,c, 4,37); + H_(c,d,a,b, 7,38); + H_(b,c,d,a,10,39); + + H_(a,b,c,d,13,40); + H_(d,a,b,c, 0,41); + H_(c,d,a,b, 3,42); + H_(b,c,d,a, 6,43); + + H_(a,b,c,d, 9,44); + H_(d,a,b,c,12,45); + H_(c,d,a,b,15,46); + H_(b,c,d,a, 2,47); + + I_(a,b,c,d, 0,48); + I_(d,a,b,c, 7,49); + I_(c,d,a,b,14,50); + I_(b,c,d,a, 5,51); + + I_(a,b,c,d,12,52); + I_(d,a,b,c, 3,53); + I_(c,d,a,b,10,54); + I_(b,c,d,a, 1,55); + + I_(a,b,c,d, 8,56); + I_(d,a,b,c,15,57); + I_(c,d,a,b, 6,58); + I_(b,c,d,a,13,59); + + I_(a,b,c,d, 4,60); + I_(d,a,b,c,11,61); + I_(c,d,a,b, 2,62); + I_(b,c,d,a, 9,63); + +#else + unsigned long i, g; + unsigned long a = s->h0; + unsigned long b = s->h1; + unsigned long c = s->h2; + unsigned long d = s->h3; + unsigned long f; + unsigned long temp; + unsigned long *w = &s->words[0]; + unsigned long h; + for(i=0; i< 16; i++) { + f = F(b,c,d); + g = i; + temp = d; + d = c; + c = b; + h = a + f + k[i] + w[g]; + b = b + rotate(h , r[i]); + a = temp; + } + + for(i=16; i< 32; i++) { + f = G(b,c,d); + g = (5*i + 1) % 16; + temp = d; + d = c; + c = b; + h = a + f + k[i] + w[g]; + b = b + rotate(h , r[i]); + a = temp; + } + for(i=32; i< 48; i++) { + f = H(b,c,d); + g = (3*i + 5) % 16; + temp = d; + d = c; + c = b; + h = a + f + k[i] + w[g]; + b = b + rotate(h , r[i]); + a = temp; + } + for(i=48; i< 64; i++) { + f = I(b,c,d); + g = (7*i) % 16; + temp = d; + d = c; + c = b; + h = a + f + k[i] + w[g]; + b = b + rotate(h, r[i]); + a = temp; + } + +#endif + + s->h0 += a; + s->h1 += b; + s->h2 += c; + s->h3 += d; + + s->word_count = 0; +} + +void grib_md5_init(grib_md5_state* s) { + memset(s,0,sizeof(grib_md5_state)); + s->h0 = 0x67452301; + s->h1 = 0xefcdab89; + s->h2 = 0x98badcfe; + s->h3 = 0x10325476; + +} + +void grib_md5_add(grib_md5_state* s,const void* data,size_t len) { + + unsigned char* p = (unsigned char*)data; + s->size += len; + + while(len-- > 0) { + s->bytes[s->byte_count++] = *p++; + + if(s->byte_count == 4) { + s->words[s->word_count++] = (s->bytes[3]<<24)|(s->bytes[2]<<16)|(s->bytes[1]<<8)|(s->bytes[0]); + s->byte_count = 0; + + if(s->word_count == 16) + grib_md5_flush(s); + } + + } +} + +void grib_md5_end(grib_md5_state* s, char *digest) +{ + uint64_t h = 8; + uint64_t bits, leng = s->size * h; + unsigned char c = 0x80; + int i; + + + grib_md5_add(s,&c,1); + + bits = s->size * h; + c = 0; + while( (bits % 512) != 448) + { + grib_md5_add(s,&c,1); + bits = s->size * h; + } + + + for(i = 0; i < 8 ; i++) { + c = leng & 0xff; + leng >>= 8; + grib_md5_add(s,&c,1); + } + +#define U(x) ((unsigned int)(x)) + + sprintf(digest, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + U(s->h0 & 0xff), U((s->h0 >> 8) & 0xff), U((s->h0 >> 16) & 0xff), U((s->h0 >> 24) & 0xff), + U(s->h1 & 0xff), U((s->h1 >> 8) & 0xff), U((s->h1 >> 16) & 0xff), U((s->h1 >> 24) & 0xff), + U(s->h2 & 0xff), U((s->h2 >> 8) & 0xff), U((s->h2 >> 16) & 0xff), U((s->h2 >> 24) & 0xff), + U(s->h3 & 0xff), U((s->h3 >> 8) & 0xff), U((s->h3 >> 16) & 0xff), U((s->h3 >> 24) & 0xff)); +} + +#if 0 + +main(int argc, char **argv) +{ + char digest[1024]; + + const char* p = "The quick brown fox jumps over the lazy dog"; + grib_md5_state s; + grib_md5_init(&s); + if(argc>1) { + char buffer[10240]; + long len = 0; + FILE* f = fopen64(argv[1],"r"); + if(!f) { + perror(argv[1]); + exit(1); + } + while((len = fread(buffer, 1, sizeof(buffer), f)) > 0) { + grib_md5_add(&s,buffer,len); + } + fclose(f); + } + else + { + grib_md5_add(&s,p,strlen(p)); + } + grib_md5_end(&s, digest); + + printf("%s\n",digest); +} + +#endif diff --git a/src/md5.h b/src/md5.h new file mode 100644 index 000000000..e75359754 --- /dev/null +++ b/src/md5.h @@ -0,0 +1,31 @@ + +#ifndef md5_H +#define md5_H + +#include +#include + + +typedef struct grib_md5_state { + uint64_t size; + + unsigned long words[64]; + unsigned long word_count; + + unsigned char bytes[4]; + unsigned long byte_count; + + unsigned long h0; + unsigned long h1; + unsigned long h2; + unsigned long h3; + +} grib_md5_state; + +void grib_md5_init(grib_md5_state* s); +void grib_md5_add(grib_md5_state* s,const void* data,size_t len); +void grib_md5_end(grib_md5_state* s, char *digest); + + + +#endif diff --git a/src/spectral.req b/src/spectral.req new file mode 100644 index 000000000..982ce8868 --- /dev/null +++ b/src/spectral.req @@ -0,0 +1 @@ +ret,padding=0,level=500,resol=21,target=spectral.grib diff --git a/templates/GRIB1 b/templates/GRIB1 new file mode 100644 index 000000000..e69de29bb diff --git a/templates/GRIB1.tmpl b/templates/GRIB1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..b82d308d8cbab22ca6b124680d23acccf31bce46 GIT binary patch literal 107 zcmZ<{@^oTg$Yx|;ygeBkR&UJ@L&cKj30mm1H*q*02C1b zVtJSp^W=6AlfeK)FrGZzz#!KG!9cze3rG|Q{x<*#Mi7e;$v7Zaloeu;eFFnS0~bgE P5U{cR2a>Gp=0E@dB;hbX literal 0 HcmV?d00001 diff --git a/templates/Makefile.am b/templates/Makefile.am new file mode 100644 index 000000000..b7ccab172 --- /dev/null +++ b/templates/Makefile.am @@ -0,0 +1,27 @@ + +templatesdir = $(datadir)/grib_api/templates + +dist_templates_DATA = \ + GRIB1.tmpl \ + GRIB2.tmpl \ + reduced_gg_ml_grib1.tmpl \ + reduced_gg_ml_grib2.tmpl \ + reduced_gg_pl_grib1.tmpl \ + reduced_gg_pl_grib2.tmpl \ + reduced_gg_sfc_grib1.tmpl \ + reduced_gg_sfc_grib2.tmpl \ + reduced_gg_sfc_jpeg_grib2.tmpl \ + reduced_ll_sfc_grib1.tmpl \ + reduced_ll_sfc_grib2.tmpl \ + regular_gg_ml_grib1.tmpl \ + regular_gg_ml_grib2.tmpl \ + regular_gg_pl_grib1.tmpl \ + regular_gg_pl_grib2.tmpl \ + regular_ll_pl_grib1.tmpl \ + regular_ll_pl_grib2.tmpl \ + regular_ll_sfc_grib1.tmpl \ + regular_ll_sfc_grib2.tmpl \ + sh_ml_grib1.tmpl \ + sh_ml_grib2.tmpl \ + sh_pl_grib1.tmpl \ + sh_pl_grib2.tmpl diff --git a/templates/dummy.am b/templates/dummy.am new file mode 100644 index 000000000..e69de29bb diff --git a/templates/ifs_templates/grib1/gg_ml.tmpl b/templates/ifs_templates/grib1/gg_ml.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..312ae869e94612f2789465cd2c496be543b7531f GIT binary patch literal 27596 zcmc$_WqTV*)GcbZuv^W{Evdz_%oxXZ7$?lk%*@GznI_E4JYi;r33D=Gh6%&1_uO;N zAGjZ``>`zWqwcP%z4lsb?5!|INBBk-ua&&;{W~g ze;=cxW8$L2;c(Lbyc4^ByAt>NcT}V3+CTp1_2Ak+;(NRTZ-oEn)&Ke_E=PHb7u(ps zc#ov##m|oHQ$VzSP@sHxQ;@t*DJbuKSu5Mw!`o9V%6!b4#e6~^H&bTXu7apH4e9=`a zam3=$5sQl1j zMHSASE~R&n%qXhVFt(`T7*kP&GWCkeO+8jrro*M8lDEqj6+W9$ zl)qqlQ7$s6D6`DcqSWdcMM?QhiUO3c$aqq@NZ*rLBrhpm#4q<2(HCA85y3M>$kFt| zXP-M1?pEs*PASYQ>^N>s;UDav!t@VJp&p-DNZ9HXEV7CPX{j}ew@y8pcaHwwv-Q6R z{r~4b*=3|q&a>usax<&U%^kJ(cph5vS)TT`US9Drz4JQut(3PlT&@_>r)n|gQORP? z=zGPIvu_tG0gWqG=Rx0M-NSORsZCZF+y25`>|w_Hd?b5OKEC#1K0S%e=U*n}D@Xh0 zyIsrk19-*!@j8KdPa=%6|O)Vvz`7k^&Jzkc;${ypVu{-b}e{O2$H z`EOcu%l}Zqng40TqWrI^X#V%E|K?5_ zQRSj4N7adH6xA%MT~x3CbqtCc5j7DU3;yr1CF=hi`=kE99slQhw*24kUhu!pH6m)z z|2}&=a3zhv6;%dTR{DQkV+35S0j`<>SKsoqX^^F0?PJOjC>@v>I2L#ucoTRMI2D*2 z$noFs5Auh6cYTw6&3x^BoBV=*g8xHsPVjxGPH0|eRp?|`5BCZW4?9EoL7V@lzp?MT zue!INXRoKeXSH{=?|C3Pa5h*Wyehl{{H_eI3y%sn3m-^Y7HJUa67eLRO{x*z9gYru z4lMBx@xAiR^#1S$JnKE(JgBkE*yw5L?ci(SZyi`3d>XnMZXQ{hEJQ9wLP>X$-bI+m zAIbKVs1#>%l}L%Cs^NB_t)a@nCxNH_LB5XOXWmhsQ^oKkv} zZ`{Y+p9>N+`C+cbC&CryT9vSXLW6bdRbklW$K)M(`EBK49pI`4Yv%h z3+)ce5qsoZ#GAA=5=@cOQqvoy{+GHVt$Et>^kErB#`jDyV^(JWY-{%79Cyz8>{nU2 z8T&FiWlT(8n7So-aO6&M!{p55uE|Xz10(5?!X#(#LSU8uj4$3h-dodC$=%l3##PyU z%g8ox*T4D}b*r*K$yOU`^R-R-bXNo8m#?4yMJOEZ6*>~i550+4ljkQ7Om;**MP4VL zNPUsMIXx%MmRdQ@nKnDUN=E(6NapLz_L)M~rrfx^wt0Wu8awE3P$QUcML>*DC#lHc(Ae z;^kqAS1X~fbzXA!@l^CR_smJ zGc`ZWoccMfc1Co@)y&;lwX@``$2nbdSL98~>y-OG=U6tM`84xFW{32eDa(@WNyow$ zk_IKY!c{|qgRcXveMkJ?0!so@0)Br+%ipuL#Z$4GATNe4+I4>&ShuPHUvxOI@GlNX<Q zc1EUkNIRU?Gks2GcIKaJ>h_T+oRzL9>>KQR~%%?Paok-j#(K50SH>ZHX<`;xJg zlc}fEa#MGumQU-E-Y{)q>X_8VX-Cq3XH3dCoOw38Sa$C$cjl(7(>d|E6Y|#N-Oihs zHz4;{PVMYUIbzPV?3B#dv`F&Cq}<^3Ko|cz|FM88Fv(AWS-$V->v`b4;``%C*-s-Iw5f z?wjt9`1b}n1ug{#2A2o_3rpb_;gX>n;n87h=vI;xxt7u|H6dksYTI-!JwMHsl9${u zwQ+j!jGLM3v!>-FW}nPzmq})h$j-}cn764|O0oLIs^%TZ^<`hmK9Lifbw1wxlr{KuIj=;LWfWYq%9^M==BA1e@rkc{Oraey?9XXcdiL_63r(H;YmoYx8 zUUr-8l&mV56*5m{SIb?U_aX0h-sZfEc{6fr<-UUUzLn zcK>Z8dWL(OdOLaEd5?qhtO!_qAYmg&AXhd@8EKxiGWl-bEdOU;cTdFiO)sl7 zk_*(@+I2mwe{%li%5`VE#yB^*+Zh#&N4|J}X10o*v1L3{7EE-lX(SNlY=P z^i3^D8=BrDBR2C(_QRYh*_*SHGnZuLX0^|%k!{I(p4Bn)c4lhElk~#K$`Bp+%fH&c zGvMt$!wAR zPtIE~(}w|nNXY1vJ}0eH8lK!Q*xZ}yS>SErZQ!lq`Qd5rnc($#=X>{hV?A3vd%Xj_ zbv+l2twwLxAs6i~@9OR>>+-mkxa%4Lx638EvfT?^{au2482EgUd#Ul>lj|4!~NZ8;4bO>so&PVsfU&E>STSBbDitHr?Ibu&*AOr^?HNe0#A3NuhHGuYoxmV zamBbsIS=ZXdPI%Zit7d1IQ6Cq%coV+ScmikS~Hdu6W9dYwHdJ0pw97@J-q zolI+x;)v`@Iv+~&PBW4W&4@M1xDUBrxkdnf;BfD7-vrDy;C^nT7_U7`jFLv7t5Bb% z7wAqsUB{f!&br_zt#8v+eTa*29(N9KHFpUBrG~q=yRRC$@!ienD_wC$c@OWYVyti- z(|2gS)#b`vaBrJko!mD)uwMuofnmPco(4u21X2Q3{nY}gq2zF}@X(|( zNqv)cM|wtfBtK7$qz+5Qv?_Z`C6@>nd>Pxr@0rI4irRyRw|5tI&B! z*VMJ@Us_4^mKM;h+9Iun+Ep2(98|aI0e!CCKwqdoawa)fyB4}jxD(xV+zs`Y+Edp| zPb<$i4+Y}M@BB+|sZY?K>3``d&WO9Zr=-7B@MCZb$m^?p&A^&!YRm_*u)_Vfd%b&( zr=@4BdyvcG9HEVoTZuQMmeK=pu~3{J$u|&&NRyQl$^oUPHp)5IUBzhRiT7Og7WkU^ z`}ob?CcYtoQb8{8D%dGBHS|8bDSR#IS!7qFO~ezSlb(ae0V(Fx6Y2i+Zy6Iaeq~fh z>zZm$xsp6QX-`sa(#FV)2p7umwerLQK6_5zqc&0mS&_VAE4~9afx9neDfP64`d9t8 z_C@=t4OBL(RlzF8 z*+)O=eDA90tmvBQKH!Si1+9lxr10W)iIs*39%F|4RsEl4e6n8;Ta*pZ}FtKqnuu?y;4y;!Y}8u_&@mp z{6IE|Zb@CI`?JUR^HO!?Pc@`=Q}Y#GdLvbrHpx@ufznjDw(_sCSE;L3P|v7crZq>?Yl8%5_XzZNq{GiQOXX~nSymO^4eXyvt_lW}+Rczyo{&xYrOrv}IQ2YB;5v~j~VPVb`~P=6@Dm1t$UdPl9Nlu?RQ zMLnu?mc~h|<#bVIUo(f<`rLTFl3*3K@~egEYMyhkYXQhZWj#smE1r(t{@z4)N&TGD z;~we0;{I(sG%k3`0xlnGobqh)mGN5wQ9*MsE0`S)B&|zo7l}zJo?bh%SjO74v#Ev2 zbogHIM8MnMsioUK7uq(0G~=#TUz8m7{SMPwYklYJ-H zr1|nJ>8cD%9fbw_Zy{djAm)nEQU}E@-%yg(lFGmGQ)!a8OQ^+l;?D7P`Tjzt*j%bE zBg$#@t2#hKv?b~*trvK7Dj&5)PR=>ZWpZ~l%DPTDU%58Bs_1Rh0V=F^)OWbwd+Pc; zfmVTwf#UvrU!n2J6>yf<9;v0kn9Y?q;hb1k!o_96PO+hMKnW{drDhA!`a6xr&IthX`?#7qr|ADUkGl}pK4)|AY@Q2u z*Ebk%*Faq02T=dj!i&R0!Vi+?r43E%m2xO~cjRDrY_P!l!y|eHui|Oy8SKS9W|v8+ zC)JmJiXnCtIf$5wPawV%Ly0CtNp!1Y1GCwHC9*mZF7k$`kw?ek{LF7$u&P8!6+|ZR#*}pVnQQpwHGb)Fo;I z?U=K(^O*0BgVhcK`(u^iih zJVhGVAK4DW)seASH>?Eq4Yy#+$q19htfp_%lPEt`m2DvOmdZ(#@J(DUZWk@WVz4GF z2#tkGqA1#gt-@boWoeQ8NbRT2)LQ7eCizGT(7>6Y(gjg81EAfNT~wJu4WMGF7=y!%Vr8y z#5~SN52OF4pHT(mKANPSlBcMqOn1JFm?4)^ZaB*tJ6#SnADpeMJVM5W7yMM2SI$WR z5ffKQU*r{vtoG2&F2(iCbqTPKazKMG^p*)lC)G}x6!|0kZ}50vjlZ66i?_(5c^-JW zxktE?TvOd`oF$cCLRqc`vxJE-ar7zT1~CiUMWmpeVFv1DeQ4=qonoH^eTACA_u%*N zKgclRZ|XUi-)-bm@;K9#?7329S{CQ!6*jaogHWNwlj*_N! zR7YwL0TY?!Vw{ciOHPZ^rWaRVtGQ~5+D9F$JXJ=?bLBi~xfCyENik|g?X7c?>x!$E zb3bqwzJdIN36r=(Tm!ZiQ^+bT%yghvQwTYQYR}lXUEF>8Ke9fBQ7lo9*hC(ubn+1S zp8m>q;VwvJlwNvoS4*|8G#scGMZ|?9ZarIqe<}OLe|UsTSF8 z`D|;t3H6eEOVq;G;K%S}ychNhZ;76R2f-B7&^p_E-8|o-Ta&D~O|Uh!ZLn{E+oPB9 zDTJLkO@1cs5z}Z3+mOp)C$ew3U3@;T^QtgV_$4HBPq~GBHKDEekCZPZNrLoPd80m7 z7pr%G5Ac_MS|_w>+7-Q-UPjxZM&z4vjJ!yR$S>sI@=j^K#7pm_b&@ES6aSHaDN~dO z>LN9$6oOCdNKd7O(h@PuePquu@0kdlP0wQ{GBv0lWRTcEE~d)R^_Z7TPig>B8z55# zz8YJHHzVEDFlsjyPZgt%P>?KZR_p)t7PMRXrMrMc z-L2KvnrJPxy6QmrjBtZFOT5ANV)M{ys0|&A?Zdib=~yR(h6lh0;rjMNwoLPTQzetz zlx=QoE;9GGK-T-vRb(IrV;AsUSQ2_1Ur072Us2;3ft}8^;p+0eMP3Z?ec0Y?4bIC? z6=^VL2W3e9poZ1qYEumdPGCs6C%;q>Eus(AqqNC@Q#F((i|3_W@n3)<+oT>6EzOfV zD;MRX(%FnM3{&o9uc#N z$K)5XJ;CBSwgF2=vk*VpfjC9Ypng+@AS0ZhKC^lB7v`IAR?HLINKxW($s~+o3b-}k zTc_|*d^VTQTxSt(hJXs`LRXMwOG&+yRJDuNQERNe)B>8OHE_-Zif{~2Z*5%%oo?-< z{@vMAm$XA5e=m|Z$`_TAN`~^Mv_iCS?dj2EaWLZ!6m@(+)?zO(2EiQ=oCS|{Bsl(X zBto&4`KEAUnZ)NNXW|;uQ1d-oJXGKqhxWi95mscI;}iM}YlRx<2O^#7M&~ibxQ6^B zKAWw;3}7YB&UY1}g^HqCGURQ_Q?-`*NP7>IN1WV5+9;#SOKqHXRI97}r{L0gQ5D*Y z)#RXDLoO!`6JN+FYO1nPsROXXr!)j^?H=(p*NNUt6;iY4?<~ULtC7 z-biH<0jw0d9;=D7cpZE)UVwE$*CKNqHyr~J8GB0hrRtKSh^@pwWG6C2RHmYsDICN7 zfR!%N{~c9*$xVp788#7&7eOeIVoEU@(}G|C|%`|#TYi7rF?VzQ&N zeHIi%qOixrOll1Mo7qYKM^|QAvhVqJd@sQH>+(ItrXXvuszocOQyMH!7mtZ2q%^rT z;Pp?`M)GrMhFD){!5}L;aw2aswE*M6xmY7g>s!ga3)`#US)A^g6Z*n}t0)FbvL@MzM2QmEb#yP<7Ns1QU^|=%mw~PTjP7f1VNp&0m{*%ym_C{7n!j3~*{8u> z93QbAWSHzuG{VaxL+!k^uI(879eIegAu!?=v7hKdB{P5XvHWyy1J{C&7S>C+^hEBY z%u+w8KjizOBzmNE@@T-+qvThTB5dc6^F`cUt}EA(Z@@3*KZwPob;?)0jI+45QF$gc z72|~m0>v-oiZcRznXXM8qr20U=^XkXU6Yzh_8>YChse?7L-Gh2hrLCwVaeEG>?zg) zDGS$x`oPVQVd!VPJ9&VX$qz&to(1Bzy2I-@j2yZb`z&~3MBr%RUOMhkRvHST0;@`qi?mBmkzbw9!6Qu8QFEvBEqknPE0sd`! zXM%QB*)7eLB2q^wPx49UrJ2G3KFp4y-jer07A_(Qq7I&bwnJv25%dpa0McqBVXC8|GMM-)fr%#X6=SeXQ8_Q$-24R?ZM*6B;)rRXEwSScw;&=W!cZS=}o#11+=iCT(Boj>| z^xsT1rZh8)X;06kRca}f1V(8Z7`HrP1YR18MYmuNh%_P|>xsNV@(>PLgzg9LjG>y+ z5>=nLjWej^NQHaBJsdvd3FgP^Qt3=5`WN+(@{oU$xnwEIPoH3-sXasktR-3#8HJX? z4YC~hlWxo=v463}>1T8W#?Gb)Ua1d=RRQ3lLvQ4~?<}Sjs$-Ot+5dL0QuK(*HIlljZBkSzL)a_~7F$Xim3XzPnytK+>k7NLP3%(k2Iu0^xt)Ax{u94Y z$PqsS=K4%cSJ$X_l_}Ce;TB)O?d6{FWIW?oT(MW2vE3 zcWM?@g&a+E#Y^#WZk)vX;YabS_%-|@F@n59l_6ogH@e)h8F~b%P!2o= zd5g|fw@8aE_`B?KI*Y=of9P}6R|*vd*Mj@NPZSyor}=;RF=C7~Rz_sE%u0u)TH?RL zUcL=inmxqT;+F|$#6N{E{4(wfdy@%+m4ATh1o&QO`WSPPsY&f42a^o(H_?^&Kn@`f zl1quN#3OPgMUh$fExaU{fi1)xd=Zw3EtW&JyoB4Nz}vQ94p}zxV+;e`WCxSPGCARpXrul2{M(kGN5BeYOXBTb^xC>2sqBLw)$TuCrTgFp_ME?fibuDpox zSNS9sr|Zx|={!L#d|E%OVh;GF95;e)&^dHP} zwj%R}8Ou27Tl9NoI$&Zyg`2`+-p9;iZm|f<0FRKnsPy)iK;U3%m5~XS;DgHIJPWc zA+rFNugm?#o#zH{6}XO^jeW|^W%twF$*W{6Nl**u_tbS#A+oVOSaGZ|b`5Weuf!gJ zHPi$=ehIDikgA^zPFG0?dEYpg8N_Qd-5G9F|lt{PY z%FE@nc-2t;Qz6Z&394IuC0~&y3UftD>LuliBZR&@z)ofc)r~wuL39Ob8qpGah{4Ek z2M(=+QUGs12`#nlw5@>$A}mtLaljFW>UaeG$MFz}0o$1z>2Tsfl65JCdG+Igq?gmOVY9AQgRJdm#Ri@ zHs$xCDoS&8gVJ||lfXNaXBOANzdybtN1jsjk_iirWZ#!(xoOVli~ zH$DN?(Ycs}mBbrjcZrtN1o|*JfrueXQySBT%jHK%ZImDC-^zEjmsUrO*JRbH7E=dF zEyWz^m$Xyt$vB_I~IWK)(PKC^d#F*KR{NfLER<>;J@*2cquZ5xyC00 zHVM<4nPc27ahP;h+A91IyuxSU9rv5rNSz=H2o?WK><5~-DZsJ^LS4bf9b!K-IMs-J z1Mp@lbB|-WjocporI;?!atk?6Tq4>R&3G7(^K4F1ii%i16bIz8}9v{6{t;HNbCw)0xyi zK*^M0{-%%7Tba+?9l4m+RJ)*MYYA#=rL0yJJm040D|e+Ma(AG^bGfV3UScyrV@t6a z=xJm=!1u-QQTtUpW$$O7W@l`zY_M&O^_+FG<+16l>7!+zeWX3c($4(ReAc|qYPa`* zJ3E#+CPE8spX}42FZLgni)PVs)4m=4ejHne!bm-28Nq@(9#5ZP66n@+S7tUhm#@bi;b`s) zKY?$^{$#W0R)E#l!kZGysj76C>C4sUXYm-bjJ^VRr$EuvW_kfQ-*6_M-p?H2o{QDx zs?sNErcB9gQ@8 z-Kkg93F0IEgcRv^Y+vdlz7@X!Vl@k7`3J-dd?hh}rG!&#JuqjRf$mCXc5|oXO8PD5 zEd9RTM4hTt&_$=Aj{(}SfhMUb@;K4pTy$mXI&}~?q1};cU?hh^m290YoTakWZS8Np zX0ux70T1lA`KM`_shU|b*S5Sd7nu&3hnkw0D_CQ#Q*CAJEJQ&X=A@?||B9t8|q|OU1;$rJZsgxw>3Q z{zqx9ERseGd3-6pA;6{c0LA7ACUK73T=mJ1#aPbAw4!H`wMm0~0(|{%oIw9Ut|oVr z8vtj#!IY-%16F#K%aa1!S0+fkr`j=j>^**-?9v`NV?d4ask4jTQ_FGEx~wi&j*Hr>)Aak;6y=?~Lf@R(_u zmbfo5oH#16UZQ3?Y3XaZV)<@~wYY74p%(Thwh~ssCfFxHCYXa8*)~`f+GaR5V+--i zL=*BVb(kEC2M~{gf;!mO+Be%zKmn)#HbG~gNpKsuJZy#f*!Mw_{UONe*TD?LBcmJ- z9aoWASW8l&Nx(n+)Og?_?gcD;AxY9r=yWol{0+vu3ss5QLPe++G(}Y-=K?3-ILK)k z_%bXLErvIyU-J8aPyaV?jhX@1eX-O;%oBb}bELgeEqS|gS^cejQdh{Uf#%+*(#i~J z6JUs%{90Y9_LL#es8`E)= z1H|4{W*YxkMCH2bN4>6o)L92~G1X9Os@0WF&V|M_*L%G{EhViGShh33H3B~f*kpaj zOyHVl+xI{r+jkpct7E%k`)LnY9++mC&ssKHW}E&qH#C`_{L7gy@It`rTRACrfmo7~QnJhM&9m2c;xo8O4j(N%~!+#Prh`V$r4&|!~ujC-8 z6}{4U{iOB*Fri+uMb6W2xNEzn>xJrk*()~YuF~m5b#$R)C;SP{vG0Z&Lu+7%{i1!S z{ZGga6Yy|*uJwTRm+gw}gyomjZiUQ`Og9ooB#ca0ny@xuqv^2akhO)ahrJ)rY5k#6 z){&Mu)~5DB_D%qu8raU-_d*S!f8ps!zGDSa3YiF>hZRV)m9$NOMu534W!q_eVr^}0 zVjBwWcSJcb=pZz}{?;CAyJ1~vjj}ATbg=xk=Q(C#Rfz9Yf1)?e<8N>l{lk%jltcf) zb`$rgJ4|h6E!~=mCn8jL`futcwG*ILAN&`#0;_;s#8;BVsfWyRt_kods&V&(?t+6q zz<1+La+^W5NK?k^``iV_Dc1y$8xOkf7>C^VoJ-Vc@<&BdO3F8-SbjaosIQr9`V?6} zzGh2uAGkVn1M)6oaBX;)-3r|4S;PZ!74sO3WiDO@??C~s!F3P@$S1UAng_(!8|ADz zSm`Bsp^zQQ%m^_T8ZTgzjF=FAX6KsGxtcmZ@7ngYLoHrm_Ti|iMm`p`AUZ{&xg zH0**;I&Q<~A?=5?l!pQ-XOgXdozND`Q=2EwVJSM%ymg=YlzV zV!mYoMI-RpT)S*P233N7fVjGEL#^Gc8?Cr?j`fA*GsxmUZ1HxpZGg>dXQ62j3K?(# zTnL@FYnBdXzd6x#-u%|~0ceb|SSR8;nGYO*=Qt0d^$wyrzBu}0b%;)MG~Jb2Mez6v z+QgIqii)H*0!Pye{I&L=ir52djrSq0QY-1Y)M2KMfD4QG5$p=K2&m=)9u~K%D_!@E zZ^j5vU2W>2z2%K(&JF5+>T|7xT2(glioWIQk$OUu#wn@~dzoXH zeRLD@D82_5KqL}mWvm}sh}WSebCtw}%1xb9J1N7}vg%lMl$0%gkYVMse$tiZTIHJK zysB|h3VW0|ip0U~9JHgoBOa~>kAXipdO0@2wV^eRCulWf36g~+;@z>;NL?u2+R@ZD z;YZ>Rb2am@#1-*B67D88HVrrRHC;7VvwXKLxBs%=v=6j5w;ixvwInB+6Hc3P>kiuq zTSe=AtJ!?iGSgDh%$hlKKeKA?XGym{wj=gGZG^RxZHqn4ULR@;S90XSx9n*aOX94A zzv2&>Le`6b_ijZF0q6P%ahtT@{gAEjPiPlh4_=FGz$mOQdLPr!LUb8k7sP{)dP8+1 zH0&`p8o7&5z^!kKyu(uPv1DDUCB2I)&aGw(=yOa(wk)WYy%#&l+q5sv6V8A1O)kib z`E$L$+^zL!t*35P%~ECl6;NCRbDFQfEoSR+@oZ1J7QnVIL_gr{FQ<75q85`=v4vTud%keKf8kzz{tT(N*p)!D%6gvJzXJEJSw{-`(zmrXaQ&9$6jwwhMTm&t3XvjFUFM1xGg7442W|u^QXi3_=x&@Nb`ZPKnQ&96ggwf-#8S;-PrQ+k952P! zi2o43#T2xhv|n*t!{V?{nA0%|a#;48`p2(}ITAY{{$)a~_(O5`;{tKIkkBOYgyjPy zJ4{Fh@~5K@#Mp34k*Ss0WR11Af?h(CY#*!_tYd6D?1SM_a1D4M+#Grc^@qlT%H~z; zZ(B1MMSb`nayC_;YCv8fYT)a!4>(3x>CRjy(6O>x59#Z*bFQui>t1J+aNlv|xk@>Q ztLs38y`LlsgM@jajsMC$;F39o>%uOe9s<8vCRzZm`ZeAi4Z`dn9JYO^-PmcO~Ia+>f}@absg|$2^YN8+$uppSg-9#eBtd z)4a;s&vqH=0cC=2h0=~@STr8N`k*zS(&lUNhp_G0QCulz4^@MFhhN0Xp@%@F^axoFt%=TKrgB4=@ziCyIGx1I z<8R1gwM&}mo<{x7x^ z*$MA~B2YiLA+j3(K&-;Q5`T~th~Ibv;PFg%^l{7vJpHuorUfGA?|2wmDoRHug0E;8=IJ6US%Q7T}%f+m3^J9 zv3;uTzP&b-32Lgh@eC~9@!WpJVor3$Pl+8Hy(}s(YHdu26_7cTL9|I=EvNLof=;~VPB$b8gAKVd1yImwF7NZ+q5fwWBgImS@S*X z3}}I)qvHl(z+>%G;gXJ_NCL>33O$RPBY8mm@2+!@XQ&Z0B#*^C*;PW{t@c*OX_vK9 z(suEqG*77@7UOqwo!G@(9*;6VXpRiy3}D9T%nkY_F_k#OL^Hpbk<50^!D(E&utly4 z@@|nlL^+~9b53+mbZs*R`|5b_``QI3Cn4cX?`x+?J|IlwJoG=HQdgcDNN)uS#!mc) zokQQF3(%XyS#lmx74snP&`ivXyaLg27oH0Rfx7)|%eA7mjkXwzVA*f&Wq;)ukF6lG zL4~LkS%kN7WZ3g9%gx6vEzD_&{`jbvPqA9u??gReQDVe=#PX+kg+;N{wL;b>Hk);s zZ45jB?T7Cp=MvAbf8e3k8|Ku+rU@tFZbg5NMxsZ@_DX09xKMXfkHiIu{mkWUW$okb zgRB)2zrSH! za5MlK`+&U(G#fq*&2hBC?vOUdDhyI$)!XjIzEtCo>!Z=%ljH8`oBG>Psvk%dE$K-*rk!{>lR1}{tWjI<$CKl_W)J!Q6l*6!UpMzu!bAS{mHH1^EfND zhbm8AAno{8;QZG?l99{k7_2wC5;=h8IPN*7BGmvxGQ({hI+SboLUHgGz%p(TQ$dwA zlPXK%Xmj{D)Cb}q!*aqjFL83h=J-1CBS0^Y*AlYiTf&yQmLEVZ%huD@@)pUO3IC1z z$krgAHO54T9WG;gZ|P(@khnU5jV&M3Bj!R}Y+TDYS9~xLF}1VwwO0i-whs0jTbj8} zqAzY682OZ#nQ;YiJ!2g)yW-l%LkU$A4qiCv&G zz>1Vc`d~Bg%0vUui*pOViBHA8kOAQ6 zEkkxW>`*C-VESx{wKld6wzRP2*q7N4TYp;r1g`1@OFgS<#TtZ3oP+O>+_f4~ol*^Tid9EgpS4hL3x0+Gd?>uM91MiyT%*8#vl-w=_)L zn#d-!OH57Z7iW(d6>~B6c6?sKiNve%XX0zd_lxfwKf`p=wgIjSe}{WIHX&<~k!VT$ z9!`LMqywP#F_FC|aY{2M>{}Ly^RD#n@qsQfqow<>>zOgea|-OVsihADeHckfZTY(r z3%vU-VhPEjWGjuuXF@%(hqy&3#{K3)!YkptbX=_r{Qi;7B=>aViO(50>TmD)(`|BA zFeZ41d&hc<`F8ow`wx5Xx@xE$q)ozHp}trk1?1=QM3H4rvvzhMt20}vQUr;cu=Su* z;3QTbb7SrCxA;rEi0Djg#&w(`nq!v{KU@q{cb6ei$Q&%4$fHWI1d~YHC@YqSOhTfd zeYRef73No#Bb{f_Y$g^0%qFO(Y(cUE%9n%6H5mu3&D{7j?vh5N}wU)8)+e*6GsW1Y(#(N zo64!`b!Rp2y$}(|@a^}fcn^ZT5t$yR=Z&v|ube?>iqb{-srA$Ds~eOd@=(x6G)Ot2 z=E<#O8SDorCwqh%{2F16&{1xnj#vNDUmDpy*%#v*5adEpfzIB&t}ZUC5#_b`dV|q# z<6U7SIs0qz@*b(0SWEgtvI6&fI!n_dK^-oNoB`@M*NIY~GPfV=f>$R>;7_rYSP|9= z+k4Qua&|kw79Gc>&V?SW+VvR9hFb}Xz zf-b@H9gQ8s9V1`}QsDwn7uZd-K;z*?P#yRp=;3S%9J8KCJA2qV!7kaJT7O$wng2B- zi6;`%5|R_Lnh&p1<$2RjCyYyYY9)F{28 zHc@^6cxozeHyR12<#F0bSCmo4H`HI?-Ra*RY8OoM4R^2Cf9W+`!@axx|M;^!&0X{L z*;+^CiTt13O%BP6#lP9R)ETll(HuXCbJ%>mH|Y5qi@iqAV*z3p`5fPip1`89AD~0C z1HhpoGzG1QZUNQOb&mPSeY7~b0^NakrCF8(JxDF7{@8QJ9cY@}102->X2V_yUV-Fb zlhEdle7KY28L|nT1yJl0J{B#7j7K-%XUJvbUL1E^fSTEgSt)CtrLB3txxoC;vc2Ra>hoN;j40P|eJSWHiP4%%r-YiI z6Jsskl|LdUYP(!EqrA785AwzOlY@6Ab*R1;<@JvX??U9trF7f5>0(uPr^+x<}vJ1)K9g($; z9>^Qe5%vaqi>*N+ghNjfGGKFWm{!zACYD@Ftf<>NQY_ z!Nyp3cQat41_MTo7_m{KyJ0ja4blim2#R>Uc6VPz#l#M*t6r~NSFi2w{Mg^{VrToF z^PK1Tyx-;~%L5QKSn+63VXn1$1k(_1^%dAjJBjTD*lwG5kiC!=%UkAG z7R4{5f&HWb)b|x;$IT@3Uo5aNLoYgL=>$oE%|+CqYcOZ<6C^zuPWpmZqU5$utlwE4 zu^P0I+Vok|t^1*o&@T{@`KZM;$WO?1NREvf%+lw;KOxn~Ns!nz!&32ZY(J_EOxGR} zNTh1AiTaW8nYo@*!1v<#F-z#501?zkKS#d^SSd8Qlo&k&io1L{TPlvSH(rL$&7qDnbFC9 z$z9F9L5Bk}fNo}gZ{oM@q z9y(}K1oMRNgFm#r3U!A>Tl>N_h*w}1TWIsbYBj_FbwF&z+G0lafOzBK!2R8BVr$-w_!4g zYMLE$gzdv#49?mLjwO2;LmCFp zKs()z)=R4)*AP4LUvOmfJ=8ADY+OG{K$TIwC=s-NMlWDU5zJzaiTj!x!Me`0Va9OC zJOfY2GNb+g3dd4 z5l0aSyHvYa_$2(R?G*G1EZA-e^$PUIVXz<8mm$lnXAo;Ze%c%Fg+6VofIjuW-de_5$*l$~Zh=1OpI}nVub_Z9vV z>4)tHNoEy(GuDLU+FZ2wWT6J17z(}xBrcw#pJ5TW*F+&8c;bi&loeDyWe(vjK}EKu zN3v_VFSrzzj-JjiXS=W-F<&xTXgVsCq9mOoHj{!$aFT?GA%xx&wNKehW0u^#1!+K6mL?nh-Jf47rDcR_i!-iRTL0S_hQ;pW?c$sahy_rn(0 zz^!X6uUYMeX+Xw#!UAO;Wffw%1qxqJ_M)OsWC(uBUQ-eY8L-*V6K{If_2={2c+q*zOc@RWvJVk>N5Vsj9Uv*Tk=<#7Od@j`?IuM--cNhN zsSzOf{pW94uSIoJC8gVyS5q7|2sYNrl7)LN%@kgFzus&rzwUZK!Wp5nx?j z5K3^H@k+u2z?gLt9^ih0-1QrLJbsGE1lih$q)9T1T1+dT`!kx@liZ8EMch$N5r@mk z=ZM)ZObs2JI<&ov+pL~weUgs4x|yOu!Goo zLNY8}Y$~89Y&O_fg6Wsk>L06dh~B0hIs$t0Y`ed}z5P6zk4{HygQeND+kAu7!Chgm zpls`4Yc2F6JQCqxy8+M{yI|iCZYU;Z5`T@!6Ap+UiQn-bvQE=|Xm4mAsE#xZ<1H{q zu*k9ah1e@-a|8+zi6}xJCrSz9gdYSc?k?eX@)@d0^Y z3%ERIRw$sM$5?t+6~l#QK?$O!P~AvfU>;ThX7w;|w!z`M>=xNg!vC=yv6G?@*fsds znAK=kY$ND%!tj+KiR6U42-3i-aG#02r1z9XoKWK~Xu-!}ac97;VFk^))B{&I1Fvyc~nz%E7%B*003b7PBs~x$G2nCi@rbHRBOIoZil8 zWn5+42Sx-VeJ|rCa3W|p?Yz@GfP%9lm_O+TGL3MP^auG7DTz2q#1Z?+lT;xsmD)ni zBdjCTk(w#_epxKav*4x0mXVQ8BWSLC~+!j@deh2c= z9;gzKp!7r^#%{oOg4LQ2<_ZqHkn`F(c??@&U3d z`50g}E(1dh2Ap^QkQ&KC;-C0-d@S|}+5;0y*aN7O24W21Fs>CvNB+d@zZ&5vUBrX)rU@+U>;oQAVf;;xRN4{vT{N)C$=RI94p78$U^C#0{dU zm~zx1^jRzpeGWH_!C?ofX6$f4FOLa+3I7p)1ooa({xRNd{**M{9?vacu<3ogy&N#& zr*2`cWt^iIu&23t?os9z+8-c;Gfe$P7jTAn_c;S>YgRM+Eb|#{4f!Uegs~O4d%_sE zDF2d@Nt;OzK~~})LOzK`yhpSp-Xr{m+zE97-IfyT50E6wtyXn5A+|OMFN8IG1L6V( zj=hePfZAV7lhSo`A!9u&lHJPw%8BQ^F4)`?E`A>dG|XF9Xs?6vFx zmI|!@7j7@VgujuG<)$$%Q6JG>Gcjy2>kz1bI{;}cWQ8*pfID9(`5Eylt&g#T;!jSa zX=$HnQnH@7fY1&S%2VX^ayhwxa1x!4;$fRXS3^N+A}NT)#7cA_(gTe{Z9$Ul zVh~CU9-l-SCdC7eydV1lIfUE{`m{SqiwUKq5Mnv59pt2XXkV$b0c~i+qbc|4(JT|6 zDxDVF3Xx)adA@YE*hU6*h;rJ`JHcq+zZILbyjL#^(~Ei6z8uATjuibOpD_4htQI zxzX?Co4Sx0^G>-oP>AhH=Zm>ARVqBA66im-vV_^WSq*I1+XvdkVODu-r+m zhINtgC*uoahBivuPgzH9X1D><$248Te84VaexaTx%Sl%VJManQ3`#hKN#6{purT6r z3>Po4{W8D_wi@sRw3 z@{=s1v8W4a9DXRbhuOuZG1KTpwBvMt0a5-@CKbv>znl$9ol}%+hbz_Tg)mygayTNc zm-1b;atie!Ez|zBf*|E{+E{^tOaYvi%)2WH7Cz^$*PcE4}cA51M56vIsG$mLG9!`;qMUa1?;wnf1c0f{}eWf zUP@rn1G4{QDshakP81^S5f%s^iumG%qF(|6SHyb4a%8qM4fF@}L!2$VaIP~4!=1~! z&Arb&N&N{@TWbN~Xr#@ho(H?rBX$S_MQSIQ5ynZmR0`uZ=;vin4v|*@!-AHu3cru| z8|6H$lr~9QKs^m?CKD`c_A2TeK%u{*my&l=2LzA#1i=AumguyoLikY>!ox6%Sy7@( z(r%erJX^lleYM9s)n%Vt%}=Ls$z#{wywe@J6<7TC$eo#?@+zfFjuQI|%mkwnp}bUb zN9Zg%E8+5#yd{Do!jrs%!0+*da+EZetfb#&<2WW}0hvTNNtgs?jXdI4${uPGDIK%f zuG;qh+}f1&J82kw$4mA%QiMfM!09g?y+ErFLH<|xZxLQONo)9h(ObL7h z_W=PP%zn)d2A+Z0ygB^uq67(5vQBIg&yvU`I>~$4ae1l3euo)*qV%KemUNA5h1^2! zYyVodS)vzld7FXbW)6Fb^@ej=lqJa*ofMLUn?yd~uNqj5j5)MDv}=HIE(UwdRbZs5 zWWQ%^W3*6n$OGgVx{&i5XAQVx(|X#22NPr6TcKk-1PTcp_8?#`tc0EB+C|L7_mnPdrNsm8DDX z%e>`w^8F5YhjWgD3O@zc0qGFzxZ5Gek*;7UqZQAc{%}YICO97y#OLw-<#UmKxy0IJcP2w2QP*MlI)e&Nt>Y z#{c*Fo9sdEO=ZB*MoO29JXk0ANa9hkzIv_ll;mq)Q1aQ$}{z>*TMlk(6 zV}@l-yH2sf{btt#=ONZ2zQYfK$-0AG1(Jhu#-Oo1cneY=-HdsZQz&qhxZ1CDK-fQ) zdW%~ZLjCw4iFr+Gj9{MSyTYW;> zryB7L@cW?2R?l{;_2#*scGWm(9U;mr#V3c&ZedE5(2^tI-QXYMZxMIPyQJs%VVr5M zBQKOyNmr8};y(idG7D>qd4{S%b|7{jYLTnZ|KM#1FUV^cMVzAomLyqj27Ghw4qxTV zWq-)#11F)abfe^nG)zX5rO1A_UoYS3s8Fb#m%46nuW>)@{;zwwhn4#Ww^i;A?tgov zdvv;Uop&gMx?v!H^_=4 z!;KrK@t#$td%Z{4K9`T<`eH z@v$RYzS91H9BKbn`dIvr^oG-nTc?Lc_1Yck3Z6^V22URi)7RviH?THpyV1?i9c2|ao^>$GB`z=~JZxh; zEXX5_8j_-8=w|}wdgXg*Lfo{gLM=6g-ur!wE|acn1Cjz4s=m1Fbsn=9OB@{=T?L9J zxlW1~?~~hrU3Q)LtgwZ5hqaH{$$-<{Y2PUq2uj>y!V^jh{Sr43xJnV?QTtLSH>ZnE z@xUj?QM>}r=L^?nmmSU9RGr-O%D^`E=B%V*_`(?`Wx*U#$NUX@;WHN^w1VtM?gg1ZDNa+H;>zHSR# z#V&m1MMb<~O!=?#3Fk;>sM`bxxI_<^){Te>b`%jb?1ldY#vth>8W8+QdI| zaf$Qwv0;8ue;SfQZw43w-J@R{9vb%Q9*1UXC7wB6pLOHm6~0;C(;l}JflgOlPI;8M zNTz?*sAq?0eJS!(SU16|_3YJNU595N4|j)cqDt2zwCrQg^(j*yRR8dH@;apn(oTmfqnD<=Ew8P1&&r5+ZoFD> zxum4zOqL+(PWVimdyFail>T`%HQgd9+t?cSBBnX4FkqjyDSSMlG2m;U%5O&X+|yQV zQ1A1EsE)a9Q66<0cC}PCDAqVu%RkHUl2Oq^$z9nlsg-E6ut0D{{84^b-XrgDDpa~S zdpM6e2e>S9{ZEBg|Esy-SEwmhyQ$x5j`_awtMohVcQ9~W5J^kdZqQx~Iu(=`_$4qf zFgM^_0L_1mpT-a1%$jn|Cf^*NA7I7)4tN#N;lI@PtftEMl5rV z@}FfbN&Av=F6m>mYd9~Q7}*+0)o%~4@!R3s?!))`sR2q#@SU|)=Xkn#`nv5@?pH1Y z-pXyt<*t^_@8!*sQ!aE0W1#c=Jn6@OlXE4iZ3(w?_w^4zklM9@cYSyIBzU=aN<4&~mg-$zcRijcnU0r~POb#EB`%)Ib*>N( zwYtg+=T+^)^egl)@}JV02mT0n8Ys|?hcH4Br zOxT;y9q$lV6l09bj;9$*!4xH7gNJbh*I z(G*Df(bU1XifDFJYUI;!W8`r7&7fOhE};q9k6J;%fZs*`Y3*XIRCC({r^2f)t9N@B zd0bRkdT#U{)Ifb9KEZwsT7%zSe@<|!Zb9gd&`-K2VfP{qMe_8|4R7_3NV*;#`7PpT z#L0--a8{UeXlwAV5O-Z?xF&osqCMhl_@3~d$Oio>{Vn}t!~Q6=!N#D97RUXa7?vE6 zYD{lV`<^_JC^v44*Cf7AY)bS`Oisv1Af?2oFHhT%azC*w4r4G2PYOK{IwwRQa!)s* zFN=O*)FyD!F6AGnxLKFGWKFBE^g!19y478C>ZsL%rK#on>d!1aTeqezz*JY1m2Z}J zImbQaRm#gm*SKLL+Bh6@FJh;@B=SXAYDjsAoh~o@Q5Zt&=KIv&DWE8@*nfd$#IM!& zr{5DZN%+x zvTj0W3Y(5h(KmwkI?J#jnis>2$tvnw}gtM z;*^QhjMVVdsI;n#$gJR;fAby`colGRO*xpH;HUC z^ls|lHjOse)*vce%I}nw6)N-A=kv36rfZVm364gTk!AFZ6GnZHm<+23-=TkPIHg~p zdlZ7vEe!hLyTR{`&dJalQ4{(tqEmk|;zeYdgO6pG8mv$-RM3yV4vSeAK*#~oa^C}Cp zg)fS?6)!BbESSijlXD>NRiU8ZY5^@5o$)eNl(Z+2V%!(|J+3oBniQK7l15K`lS)sY z%(+|iM}@3*ans6{+09nV3VQ7Z%KB$@ylubJy|vGN$alrwUR2kE_Mt|Hy7~22mOig6 zF1u5LEU?V1NHNP=mO7BMA>op-B&OYPGU`O^tmt)-kHhAMvvf=Rb_FIH9vBTV$mqye zykWp_Ki)p|LykTxBVC&@EA#hEQ|fdIE*YJuNT^OIiYLTH#S}yzikXZpi_3`*NTQ@n zr|rx5l5Lh#ncI~cm%BIbMZQgePf?UDbuMWm)DxFfRXLh+^JZngDbQtjrkzSPCPo_F;yjJmIC+$rJ|${-_^04!`oefs zVtD)+V^Um0-0sw#9Psq>F^66x1^3CKM$v;yfQ*+ZZvpRB~n<&e?XFlpZ-6s&XXW-W!RW13dnQ)>9zEfZRnSloLtg@h6f;Q%)wiq<#nM{6}VR4m-~#=TPqF{PM!VqW31p@}HH& zvfE|!lKlm|?8O4YhypfNWfdnU&|=Uh%<*7=N=nb7R6{JBNrrT&#K>bADFc3JjL4)hIMt;CJ~7<<0@ z$y&SL1J;aE*{s``SuYnJ8Jt*yIOxvY4!z$&*e+cSMU!!36pYi@=^jwvTF zKcQrCNq*tF{GP&i(~Yv}C1DK~OMX^6x*xh1rM_c^=s z@dYEL3o6Cs>q-WSRV8KRt~Ixt-ZY)9v#j1&y1Ll4IHic1KbYT8L@~ij97`}oOA1#O z&nm7eE-<|w|bK>6#(>Q;`r*EQrZ^!-C(&m^(Zr#1w*)`LZ4@(LQmlo|d@yjk( zqpO>$p%tGhVk)PX{M}sMTG9B&lAdz6Qoqs%WdWr)lYPmmvYlm1OYMrk7rU4uNiH`nE6()(>e$+$YD-(jXu4CktNMHSr}Elz|H}F$*XuItikBqSJg7gr z>_p4?+7mVWs<+i0HODIsmXBA}RCJVim1dUomYgj;Sf(p8EAcCyDmqd4)D%=MtJ+#~ zXsM}z(tNA!Mt5sp-5_k_{@A0{&f})>ujB5k97aA5y&T@g0+_q`34_`DnGiPS7~rQqvaKdAv8L|NhYYm7!zbR$H!aSS=WvHiz1i8#`KFw8wVjw_a>DcK+G`+Oxsib6nnOUVx^};2BdQEd%+f+Ay`JsXThQ6*mHTGeZZfxVIaD+Lm8HyO# z-S@b6QCC8{-!gXV{bkMV-Cez1n>y?|Nj>wsvfFA}9<_Qd+tD(wzNap=PP{at=6rQR z#ryKhRo+Vr>r0!kts6VG^=#=68Z->2tyGWMjnP(4kLZR)L!~RO_RsF!+TGVB>TK$C z=sebSs;j@NxF@N%s@t)H)n46!Z&S1^Y`WPvSofw@SF5VCX>e_}Y>jI>(>c_W+LyCp z+0f<@$jaE2cSe2<2M!LcnBAYW{7i3lPe^xpH?G^IdujLIJ(WGHdggbFyKo&oZTZU@ zT3wr}>u=SQ8dOcXmIrNDI`8+a?(-P9I(Tt-!SKo9AHz|DZ&$GTb}o(kdT(7ocXLB@*80m1T(y^nj*;5SZn`*;25 jy4-cP>vgxHdwY*h&)42V%bWY$`gZmm=nJ1^4}Sg!XuYMS literal 0 HcmV?d00001 diff --git a/templates/ifs_templates/grib1/gg_sfc.tmpl b/templates/ifs_templates/grib1/gg_sfc.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..4f8371064cbadc574de319a6c9e6418c55e59124 GIT binary patch literal 26860 zcmbrkg;yJ0)Hh1q^{KnNySux$&{EvB#T}9mf_pp=h}*bDplE?oye`z;-P?QK_q+G| z2X1E(%B-%L({uLz*=FaF-COLuUw5&yTbAgW_%Bfd{?@DesQz}~`~UnI{(rvx-_I^x zx_0lfXwjm@|9j`Y-Q@27{@FQqvH$%)KPTD$?h*b5+*tH~{{1k!(RS19X4%cRTVl5k zT)XV{+8wfUuyeL^xAV7){NF3lF2ybfT=M^W5qAIIRblu4@B06qL;T-o%m4RXDRznf z@7w*sN}R!p4uO^J`rkD!0jr$_Rz2Eon4Q<<-idv-w59eP?0(q&na2qCTKB=O-(221 z|8d^!+~0Ym^H%3@=Z`LPoNqd7T^wEaxJ7vp-cNl5zV^Pf?`*G5cdl!o^H-<0P9L2o zI?s0g&v~?SH|J~@vCBV~QO-|X|8pPYIm7FVPqyEG-rs%d{nGri0xbSr{O))Kxx;SD zT}3W^osBMsU3kuQ&YPTfIv;g*b>8B1-F1oE2G{9MKb^ZfJ#(4h^3bKteT!$CSE$bf zuM-|4J*W8F1wIV)3{3Z5;%D<+=JCzF-eb9Yl3SU_I*&{4>s<#p4{+*zHqvQ<)7Z27 z9ltm|aDMM}%F*W7$8qtQ?4vcOpE^OVGIy=l65kU(X}FU|vbFRlr53}cF*Xu4%T>_kZ99zyjJR?2x!O`>V7iZWxZ~v7u1!o?d z$v7Ezy6w=Gvv|Ej$bk^;x|5@VfV<(BrY?oLUd&lukxo2kjef8*m zBJDuR_N2X;r!e;%pIUFpxrd?Q;bYIIo_ilU^Zf7d<>7R=TTFIzXt+KwDPUs2lE7g; zM$Zg)iMyBQLoeJb(zC_A&|`|H(fya3$dz{8?z+VFn;YbI%RS5ele@oLo7*-wlj|#& z365QlZ#Wg_d%#EM)p7jBq5Qpvcerf(yMM0Re%~T@lW%@F5<|wlixtK6h`t`PFJ^VL zd(83xB4lF3*z+|JYeQ(?RIhlKXm<}cm1~5X;p_+JT940O&fZ%+4!KYEPy;Oeb0$bbVzueh(%{beGZR^tc;o-^)vQvLTLP`1Vw14k3P`R`$glTVONEO)cpI@d`)JG>YAm1@p4HmF+Us{B)1!~iB=2>BU4zVLM%mvxImp4)haVoq60x6hpQPN%7@sN3 z>X&sn_b1OSEjr~l_gnH+Rz!SR96x?(bY1-VgfR(q>;c?3-hkwJ9J{1Xk#?ac*qKrH z0?Bj6^YMZ6&c616y-uZ|7aF2U#8~h#p{|ht(rv%u7IzyiY zMusJa{SHqFUJ|rFV4d$&SC0r`_$AlwPB+eG*>`mubre5~ozlA2pYiaS8aO}r<+;_a zg=gKIpE>&{mL|nUHM5aqJI+zgr_{q4cXI~j_RagtJD52$lTPoG-Zgb?@?2I{+9ocY zay*fp^pzvvbxB!}YM1sotsprh=@*Q1P@tE` z#(+?tJnt)>oo+i_ulkP+I^$3IuJt7YD*_%w<|ZtRv#@It(&Ki~Pol7Ip-{X$=QtaJT(_OuU_6dJ=%NJy&Y zj86Up_S-#meA@A>XL+ackII5_vhyg`vNSZcCiPOXAbVie)bvPh1MfgeWws*ABg;Pf zc>3Jz#LT2*CzcQEUQ!tQMB<@%BHAaaf5ey2BcWQaFWy(q`S{Na(0hgkHwGPcz3;ft z>8l6NofXt0WOhhncuvTg1S07k*OBAE*_yoTfBGT(PP|{3F@eXv7b%a>2erC?e<~Yyv(Vo8*QW<_Oa!w2{9!++R4NeM3Fhq}!dKtf+JuLB75)w_NY)t>+noWWNU5)iW^Miu=jwx9c)h|0v^jL}&KvNvXL z$QqipCTD1_LtcLF{ahtKt#De_!8Db0z5Ktdo5|A(c4cE}mFYWkwb^9m_UwS%&b$eE z$8%frxP|XTKE=yR9hIX?3ySv0Iwf)WooVM%%Qz)0nsqx#6>p6{9eXb_HmozGXJ}%? zfS7K9w)20^yMzV$9}avMH7&|F^njwZO0$gFOVXWFaQ=nTAoUV)t*TBD zP&&D|R}oA6ub@8nbyjiuWbSG1j|9gEeq>wpmvh;HQ^M~@&y1WJelT)vM9=uWF~=kS z#Ae4-1!hO5M*WPj#@vl5k1@x*h^>iji9eMf=k(*0aQCEKO>Ii8Pd%45J;gbBU|eEM zc>L|uSt&@yOWtc%VBBc`7l9_1QkSn@GrbP_dHTKe+vNQ%Fg;*vu1|SJ(p%PHj+E<`@`-mVeR)Po=D@5WIsAfQg01`u;_ZT=g{6gEW#a{dWK5oY_Qza7 z{_iYqMz6d*InVOlax`fnsW(zDrq&35s8(w?XkKXYwbM28HG9;Tl`rI%<@=;f{K(v@ z^mpmq+ZReG97sQ?q`{SJu z`1;)NfUbTC{?-6>z;eHz0Z?Gq^Vh=mM!+$r*%FR{^NsU{!mr}L6TFkm5DgO43BrZnCBFr`3((wY#rGtea+wTOmMw2a-iy4>jAfbJ?E3uY zS=Bjm)oRTY%_|LG4{K#6kuliNMVX_xU7{&!5&V{A=Dgsxu@A+O;R{2}QC=aVqtm0l zpSv2qJbGGGX!P9pv$0jN-(snNg7aYs0i}UNrAl>h9DBY1cC+WVx_oIWfFzta#Rbo{D`mksUoK(iq+AoOg6w zbg$67@S4!nkfd{+=Sza;hIS9OgbLzbB>&-bCLWKy#Ij2s&YJ{k$tBg4wlc#hV|Yed zW>wb0oNI+A3hxM6vVMF^X-uiV;);QH2bQg4)jT&LC0sDDEW~Sh%>zyZC8#YJ6pKY?h{= zC_9ap%WY0z5`KjWqdz1BC(sFa(jIPDA}fIvr%d>ev_I)3Yi8mC)@fEaYY^L>Go4kD zbd5ccb)ADGA48>u$Ze&F(=j~ z`X|J*TT;8Hd1VaE49{@Q49MJ=Ez7FNhI5>AY6@QQy+l)lPen3elk7?`GuCUmwH^~E&|4Yu|ba31`dpPzSZ_d@^0m-A1#oYc}FRngi7Oy*x zpL#ttENx4AbH-5co*7xO+41S|sX4r1DTk99Qbu#+$swtEX-m`kag9l~SW9eN?8)do z@k3*7ME8q47PBnIE7`=`l?JEu=j$?*NgvoHye+BIGW+Gs$?cN!IL9Y9EGH(%ns+0A zMgA_q4zZVbw1^b%mvGQxOohxqc9|B7{c@5-EJF;GZSoR+*4nEw6tjvW#5U1#QISw1 z)=OT9FBV);7!0#?R}Ae2n|_)0ho(~TR{K=-Mfps)t7NXS-mrjkS~N}eDYGQ(PtKcy z&$&K1{c_P9HB+c<*1?!%H!%5fuvYictuhs z_7gjaH%N~cTrZSqwj0W%P2zd5ACwL)hHKILn!Ct7<1zl;{640y`knGFGMrn^`!0oY z9~3MpED~-PUF4riugQFqdM$SsKT8mme=D2J(eQ4jjLUqN>z~z^H-PQWZe@K)vQPTL z8p_ruA51Re7`P)+j&RYG3|>-70(Wm}w^T_Qn%ZY(+8!Z=}S|Wr1NuM@h=G%@|P5L6fWVr6{ZNY z1=j_L;7H+j!7WLnL?Rh4t1gl%w~(W84zWSyS?UXIFiPMr>fd^WTLOsQadH*g%DMMwC zi*AUYWW43Smd6VB2{#u0&YqIrE^n3ekzm=eS%0&Q89lP5=l;!lkW-yf$aUwWvL12D zI0HD(laHq?1HO};vWw@E!bzQ&mXy(uyD;}QP*2?4mfXX+b8>@nJ90PXe9L*7Q57!&++kU>vM=R&=Qw8H%gIV_ zOr4yLq~FMxkXp?_v*JXXvX|$#WQ@+N&m{{s<|pN{Gph50g~{SX$z91dVY6_cKpChQx%jB)xFYosBGGiiV-DS3l;n+ zf@XfPz)SEnQJ(lSyeSvU|83lA$z^VkGZ+PFK-HR@Jd0#x%9w-?tQ*Bu()04}if$#_ zgdUl^g4&|R;v>a$H1WEZ5#q-2fl4eP#BuuhU z+$M3C?gV}%O*~z^Ldq?Qk!2S

                ZR<2P-N@n7kkl3Hbw{=PCz=coDvZ`GeveJYJ8 z<;or_{3Mfe52SvN*^xLuwoA^p{G5Ui(_!=bGPxzxa+oSNG(s~dr+6d8rX@;2t0`B4Qw^9}jM znZ6k{nZGh$XZ}u)$PlEx&sd+4lu?~|IkP7BSK(g46#-v(LDUs=&rrTSe*u3e;H&b& z&HO?9<$`5`tNd#I+(I_LAHP%3i$6~!5{=E+!+xD{D!H7Ml3J0>us%gl8RCM8l0->A zDb4ShKcR4zV84hjbQ3*L*sC-1JMugWdzLIwG^>wjT$FcNv30nkYL6dNLexACQW=zRL@oxUgg6Sen zzDlyaP|ZgRLj~PI9mNTt!W{m>{FAu{^8B+~fg)Iwvo-5>4m&Thz?r{N*j4N!St)jx ztd#5#{}HE&MhbldErM@?I^j;iTj3gEiO60QC-M_b5|#?L3)_YL1kZ*0h4$hK@fP8O z0!!|+*vFhZDfaA+q^eX1xUmJs%T=3Y!v)i% zmleUK!&Dzs0`)w_pOR9!wy3j+kzJDwFZP!9lrEE{7LAm}$@a)D6gd>VEl!u$maHi4 zQ*yi{tK@IV0fhm&122R-wcg4&&3=tW3CWGhyJ~0EP1SzYN%au*Hq|s$CNx($Qms=B zD47P{F-_BeJ(Ay$-&f1|AtjZhKW-*=lm}q%i8g~Uqj&UfZs7Sx=gwr9IE8)(g54wg zL@$Y(o4-VGzM#0EE$zMFbIu=robb1(Yw38oQ(?XEePMm!@BGuE>Eh+0fua)8Grp&w zk0h+fStbb86gm_h6i}k6vd|)4(ZS+zMSo=vWb0&dX}Ba^{9Ce6 zvQyFzFky*!f#js*tpt+nl5`iJ7i|#_7GIJK6Auvml32yR#O}gRg>CtAejfLB?(YIV z`v_-S(u_p61cJZ@^eXm0@5s3)t8(t=`K;rZ!4b2f0k&~vr2f1NX2JmO6iRf z$KuPf&Z4CSpPU< zlGW^=83w@&^*L#%YJZ7H(ObTv=!~$Bps+wG9U+;SZx;U*o|io-9V~Z|?kYY}JV)j$ z`6N;ZCBh*hJIPCFYSG@JXYv$9s)AqQC!bin4b;>z*%aAyDK7Juev*!r2&J%8Bt0yh zE1fR6B=HoFkqD%%QjKJ+q^oSCY#ca|a`77e5B^eqxBP5*pvadyk+(eV0!NW)Vo2$~QcCVx%oJTN_K{yI{i)D^ z)zHcmWq=~LG^cdBqPudaimmKWPFADp6xBh6NcmR9XdAVEF>eJTyJ-kQ!r?!#n_<23 zvawxrSXHB*q`IcED!o*z)J@tt?Pu*8!#+*1-i(d0uBj9fM(zX5THU+aP_qLcUBwvV zQ4zKo>R0xrVT>sw+Lyb97n@$fE=x#bhsB0QY)y%a9US+C3ndatx#+Xa##(ypaz<@bt1WFMuC@_nUmO0Oy&E3*}y zN^j+6(BajkJ|%u7tBWd&mleG(PAfVhwaFr+agr61mD2uFM7CMBRAwj|T(q^wy=Yg_ zZJD!lxpbxUvDhZODcm9ICpsjqm2<`R+;yqJIpxCJ^6#3j`ss$#hHTv_O_PUZtFpb*06M>7_SIU#h&oE}7LO>g_7MDqU5qUa$P8 zC{^Fmz197vj!clZI~@$m#|40)Yl?64rZEkCrhDoFC zBNUNRUIELVbu~6VJUD)MA}{`HYA@YiO^PZ)=3lx*(MP&iX(vAkH19WYYROHxv(l!f z0Zw&l`hvCQDlV2@D=krUQ>qn&>X2%qYPss7TB*LIg)}2oBSBBzR(2|nD_HUzd84AY za+0E~BvvjfnOL%}WSqQFE|IU6$CezFn@e0vn9?nBUU7`0i z1LZ%^cIqzH7kySk)i%^CtLI-yZe4Q4vjc7a(K_k!hB86H->~gT2aHA3+pO=d@zfsCL~3WLC#sgIo~w6iLN$8zOU*pZ zJoQDjMSVg2MfFfstQw${sa~rPrBrdcbh-Sae0y`H%cB9W|gEB z?#z6Y(JBux4A;Fk6`5?t2;)3sPs2mwAY;1LuUKm+)(2{5XxxC_n5FKe)@t0ey|i_@ zvAU@`FI|S}73hUd9ZP>*zf&jBzScGBSh{z*-MYit}}nAA-nRdjkc92`xZYl=aet86;j=qEtU=D8cIMsF`LbP=G6=znNO%L7%LW3 zhgOOk4>z}2eak?wUQtk!-9%P@sPB4lcn5N|q3v<&@TMEhb6TG^iR-E>zM-Rv*iuF` zTNABZrS8cu5JgF7=_=rie@L2(kfJ8p9C@9zRpwt}P`xpZG(0fPFxi{frZ=WCQ@v@5 zX_aY;Zk%DWVVb_sm}JBZcMXa9Qo|6#0@FD(zgoO()iQY9DLFn!BnG%0|T%1>nMx9&$zTt>PU;mx|WQ8jF&Py2{o` zPULsdm>5tJty-s)6_}Jj3A8eSUyRA*sn6*Cv z;!M*I*Ei`N=%%W&)lJ56#ydv2$==xCILhd#pRHf4o2#S1`!8#pG=DVq!2d7ROArD* zMp-Srz}~*HeXRIV>1VAl$_#xBHP&8MR+)R5XPLeAo2|$i#rRo{md&ybzHktFYALV2 zP$jE5d{KUJNAv3%Kg)1ya!r*j$QD|;!$3`TLGDi z=y8T>)fe;+y;ieFe@b0kx>DOsx<=Yh;tUYrlS-yIr4BSw@JDnG>WHKxU*Qf&0tJtP&YUc_JB=r0lWxugFGP_K zObMnnM#8w+5T!5CDRmchDVj2EiN-_aqGT%>rL!WUbbje%#l+Gd^2Xw6MKg*{7eyES zEY@gLnmEa4=`usNl6Lq7c=A!m89D=Ph8MwkrY(jW$6umrV`5E;Tk<8@4petTxu> z)+RAeh>->lYcl-VFcrx%O4X&tk=jf8QhkP|M0Z#hhH}ZxSU>Cpb`0x+I$-P3e&{yr zAo?C1h2~?!(G6%6=7B9iKVs*x?pQRo7FD6~*a$QjbwQKS=jl?kcQxPCJ5_U3E0u4QSxQPZMKurbMT|nEa4xAS zO;oH^gc*ZP?&1*1XxV%vA8A2uBU|BHuq*rk79*>m?$9yhIASsVH3dQ^p(Lo&^wiV@ zO);sBtKt3VHxxmB!C&Bd*cYyZCqWBL7Sk@{X5)B+zu|#?ug+h;PQOt1KywOu3A2f7 zX7vSQRdV&o$}UwQH9cx4H{>?>*8FPmZJO5nqqdgRR4lBhtoUSODqN}zwTl``>Is_L zAgGD1ryKQ+r7cX`(zf6>-zy~@jMdG;SSFi?(w_9KrqsGkjpG{MUyi$c`|{2DH+8Y* zV#_?sM}1J;G9r@9Dw{wA5ob{y>Ir=_X-(1aFZ2R_of=DYC-&kfxtAy*HWF51DLxK& z!&!J3?u2QHp2QxU!lUu$cm**Y*WqjNS=eVR8GC{4L~mnm*fCUziqJdQar7qKfNX>J zBg0`HwAd&yAiVvj^OIk|!C71$I z@6#+bo`jDnMi&Xi-?hWgFSr(ei;suqsUi_0@&R56`5RBeSCL+@6SM=0fV&~SXd2W9 z=0lgz%cvZcqF2x!NCXm&X(qJl;IC&DLZx&nR2e zw6$V=)6UCFo6fczZnn0hv@EcNSVvhX%S7frBQfWg7gSxobn5blW_`oYi}|%hW|pOo zwTEqpwZ36*?Z!%H+gxfqrNrY27FA9T$Nv$-iFec>dI2?sJVho@Bo#v5BQ*p@)DyX6 z1Q|;nBR3Ixav<@CTu+7)Im8#@EI6w?`~lvC7vtOUG1zu&E0&M6qf^ly&_m=cngt6{ z7%4*bLMt*Cm^PU9=^2nMYIWCjd$fU?P_7MB? zn~oss3@eqL(nOF=tsw4Fj`$UT_Z9dLRETC^$FVV(142PFP4nT`hz@Q<2V!fmW_&Eh z#r9$()`{&wFk~un26_wqhERjrP;FSJe_@F zRSmx(t*J+|LyNwnyb0;}uXSnL*H&B0y{798p|#kh>6f0hEbN$fWkg40M{wEO@@35U z25aNOOFu83s=HJB(EP!IT1Q(cYaeqN{ha#Dd@fsi`B`IdgWKh@iemF~OM~UP6}Dcm z=^KvKZL3162G^}%JgFJf4EhM&i&{q((%sD>ax*=cilsVeXBwirPry}BpmT|*n3Qm&Bc~sS`K*mleVk2P?xFyWBddC59=I; zCm}rJX^m7g3u%YBu$y)xz8>pCM3GK}jXX=-Ax7azSPz&&w_;jyE7hHvK#sz*u_jE4 zyJI_$cgQMO1q!fA{Xl^#HDfNkuX3u=RbQ?aSIMg-^&?wq z+orcYZob-*(B7>hxZ_#J&-QoiVB~(uyDq!lp^4YVzvkF+tK&o4?V5t}8_fsnUF+}G z+%C&DSDB}q*PB}`7Hg`dgLyzdq5m?=EgR|{H^tU(wH>l3ELmXxUs&hc>}&<)=dDq7 z&nxvc8*6qDW)h;k>2mrJV=^b0n;9QEfF4XQqqVdK+@DRG=}0PsnoV7xWYm7}wU;_d zWm22SXOu5>5S)X8=pYh^)p#d<4PT31!nUA4(N?T0mX2j%@37a{0(3nRh71QgaTJn3 z)evTiGDaGdhJAo_x&j<-*L&)#baV8pbSm8^!ye-TlN8zjKSbA~A!s?;iZ3AKqzLp} zK0a7oZs-D$#y)rk0TUF{jgF&NlG})C{4o(m>ga*=PwF8xgJ>g`;ctnd_#t#G`~;Z~ z^uY|s#pG-prT=SOVd`c4W#Air7^?K`h6j~Sb!4Tss(byQ`s{_Nz==)?`~%@ z=D*Y>dLQ$MQJGV%nbtQzBQ?`qsS7lVuBOYFX-pRVk}9XJ(k^rl>IXfQN~HRdXF%61 zqvla6s+ycfvdK_#Bk_z_0~lckei2=aJi~Tj)9_Jv47Lh=hdx0)kQ)deDS)-mYrvl) zfNr^D@-qdRa!qcgZ^psKxyEazAXA1Z5$KyBq!ZnPzQ-5hJ24vHPO!(`RJ&6ni{|9?>FJ?B~kGM)k5juPnhGV|SHJF0m!kb}F zh+~>#>Ia2GyP-eOKvSNn0`89gt1{Jgsoh)ms$pwm)TNKDpDxa7?%LeFv9PYC$-8A? z+r)PC%Gmb(Z5=HkP2p|RJ2thyygIV2xkW)x8ttWbW%;&d>r;z;S*;DTd}LlRKba?H zwmHDE%sSJ$&icak*7m_#e&L6u0%+OYR;@L|*576=qstx2#@V*nItZ2Zg=GtL(tN}+ z(6Yrg!TQl!VDT`2qYLSS%yecX^@f&Hf9XJa2sIy^l9}1e45eG>BUB^dLqb$2C84|0 z$_ON-BdvfVAy;S^ z+yj0Lt~W>r`U%Yhm~O@g;&p@v{szBJx|21;L#i7sXI9ZW=t8E`%%iW66PWQ(0wg3~ zfDRu`{QwovpPWS9qR)d`*<^NRNO}M{m+X$WU|)Ox$lzhywn ztojkHMXd{(dpE|{{jQ6t+h?tyUex`xZK&RGA*RAmebTzql5IZ6=q#HUy;)+uY?WI5 ztctR+wz;^nYH!(S>v*%=vd(hc5@WTqd07)|cgxysgU$JtpG=zB*|OI%lrdX3S)Faq z%68KfGnUDrhca^dEqN7SP%SftK0)PEx9I?88>40pGQF5Zw2F>pBI)C_BfXE#rW^n+ z?We|*VPq>Yh%gc#0i!$Og}6O-7jwdLFh~3*z7%T*>`;i!2WJ5xZ;)2>D5^y{Xeizn ze}vcKu{e)#BT|VOq?Br;JE;A{ZBYB$=!H~Q`h$5C^O(6oO{ad6{gi$21S*#Hrs{Ex zek>Ubbt0n(q2ViilKw&MAa9b61RFnqj|c3-0&02y7KFuM)3GCH2>cnMOzTaVrn9Em zNHlrPl4zS++10YvcCN}?yRxdd!smix)%Ne$Wne{9 zZN}w+HQTJKt=G(N@h|47X8)>-7XvH^z?YZiEevJmS?Vk|Ecw>2=A&ghY=~{OZKqXR zAvP~#Ld?&Zzw~GttlZkw>c|9Ixt1o2t9i7!pE=uHZbq$JEx)X1Eqvl8=|(hA?o=}! zMkP__C@-4Lz;qLBWoFXH=*e^<<3hcpSDODZ8sHSs z*}B*Jm32_tn3d*MP`{&rzKpjnu!hjzm{HdA)?JokmJOD2Qp^azoebs;{gM1k=P*C4 zJAhW6WZDnRz*7qtB2IWGnTMzE6#1+?b`HO9s;S=~Fah zK5psB;Pg}`iT+Km1Sd3~Or$F4zNC!ur*`2&GJ=>)iK*4ZbK)uSmx#nZ<5oP32qaG8 zMywi3#4PA`I|gITnE}9 zkJw6h5K%-reifHvD0&5Buxl8E$CAS-$V^xtSPwA@^Odqp3t26xSY{R5BCXHNHp@0k zk+m1~nh7t9w^h>7MlURhkXzDitlGlLcH7GG{?=dAHD+9yv?i0fL^YW8bccDH1+{3c zU95YlFj@iFbhbrgiL^v8DAh@|(Az10`W3yAIY3E>VfZ)lf$;(Qk$P#)pa+C5z6`YAPs*+&M6XsT=kXjlr%F3=s?1VJJQfxP(l6684yw3$VqFoI%V& z8CAj)w^z$)3~Q9=av^f7S_%zSQxYQKS>Cfmt}_#ONTc?{3OGz3ibAZMU| z;2^a?FF{vg^L2lfW0doCufQ8eqWS0;w2|14hvWAE>K(-UBYwyjs2I^9_lTXuE+T|n zMqZ$%(*ma5Oj%9=-DtBcwtlv8t(VL)pa6fHy8x^mY0`j};)*#Z>IGcyGg=nivlbG4ZU^^$3RWmQ`@TAo;^Se{r;GS6r| zI0H~O0IB!m3St)4NWRDm>Y6~*p9tGwb&ADG?s+Mh~EIrYogfXAtIWDfT!yX z-cSP^_H_)#5WFjK5U(MY60^}qXf7UuIAE=qv;1JmO4A+_4`e+;__1axI-S@AZ%39R zld(F2OAR2xz;kfifGtB_qhUlh;tb(~#XvvtX+%6&?>gFrIYx<+v4bP=2jd9q1vI*@=ZX^%V7bu(>Lw=_YQa6|v48jD_>2wdG8ofyha8EGt z-AWfzBbc|$TgpcDp?=f-seGb4ehPSLE73sQCph3FZUa5?giIrz;(duO_&uxyn+j5j zO~evHjt?O!aTNc7$Kb~>0;C&X$S3$wOpkNG-9mg2`UZ)CE${}AJ4GPRK%O%a@;3w< zmKdAR$;1JZP0pBB8x5ui=r9y$Tmgq8Ft!IIM105}*@}&!CQx?7dwe6&AMe2Xp@~Eg zIg1`g38*zdSrrl%A|7Z3J^_YdNX${lPoB^0)V%iuLbrau9x6?D}rQ{zv9PIof>N9nWdP>it9EfIs z+DcMR1d!8+bh4OCB4hAZz$ZK;U5Q*`5va*`1WkSi_1%R4m53t%_xZq}Rvo;ZO;ux_H^ni}2!>0IEEto=|^@0vx4RQtQd# z^l!jI3B*Y>2A@Inz{gU@)E&?w!UX(m05OV6NAfAXX(YS_{z`tO7t#0VtCRzMiLo>H zr|!{C0QG~JH58k^OZ@}f@POG&kEcqhG9rY~VFKb6aG_g>dsHLUlh_J$los%@2+t>e zk}{&5SU~wu8_3x}rKrix z!*d8{@;yBOBwfjL4ZRQVgMP&O5sQhJz)Q9{0;Vl z=OQJrH*gry_*!B!W{+gRtKk>ec61)LlnBIIk)MznsGy$YZ{`H>G$VjtSxnuhUV+|^ zA|0rmba$qjabWg>`Z`CsFpJD;`ajYG>xK13-y3Vt8-Ra5;3{+&Zn7W*o0&-Vv_()U z^iq1Dc`MV*K)?k#F?K-ZyrosddEm>hnzxy!T9#QX=0)Z*<_-O4SAAi z!U=o};FWdQd5~qCLi(7dYX%6mY4eeCxXu(0DdF*O0t%sr;O8LKC^qeZ)*$&=2A5&v8_OcN!OW-}z-fM=QTiogW1N@~0M#M-1Kov|QY`Wxl}gz& z6Pfpvqh$~CgQ;TNfPT)Q7E*_)c#@!`AXVs2$w*JKg!n^6Q6H&`^eOB+e#evp&B6BJ zd8CA%P7eb9_9%F29V4Q?6Q%eVQiriHHdRQyq9f^z_;GwQDFUmXOil#ZLtl!bQ0fZx zoq0`ZfX>P!@0$lxo4}oIK-&(aT`4`i0%S-bbUm%3+W_xhq-K#Lh;TBHw2%z|qx<1+ z0B3W7R(AlY>S{tjq=GJ3js@Wpa3ww!Psbl%c~~Z>>VC*{)k2=y@=$)U=joE zgU_KovGvGa_z<*8uP_>*BTyo88huG@vlP&0O)%zeNF?up*@lfC0eEUAd6k?={v)G+ zmSd66iB-g5z)D{L?!^=Lfl^#S&7__I4t_`H)1k}|Jcznveua0X`Vhm(Y9j^J!Yiq8 z>LH`00?bE%t8J$9sRztNz#$5HKHvbp`KXx#l1z%u07!8VxFZ(10bfb&1O3Y()|0Qv zQDg(*L_8&T1La==@|BlV0qsh!rDjn^^f>6mQ{;7^KqrB`GlDt*RH1@|$%BNwaVgN} zy(l#`j$)`#@-{Vqo42PaV>xgf}HnJah%V2Ub@tK$cn0X1<0~yfkXYfK|I=&xUf)B!0pnuT_tQ=#3 zd5RBGgY<@nL-mjY!YzReM(Wi(N>xL{u2SBc-rKTF_BtWBaL?+n) z!Nvm94w9nzR66j-WuyV$gB1XO&_*mG{0RfO1TV&X5EZ%z>3}j31u=x!PFw|gqKZOM z15$x%$rDTjuEh$-o3sb^RMP`qhD4DG^eXck%Nz3ps}Hk-nhR>}9;jOdeFB_WE3=Z> zL9d}E(p|_ZYB`yVw_`VP37G}X`3_*BgJcfqh<5T0!6G#z7pNN}?Lj}F0_pdlt9Da< zU^mmq<48ZOoOn+*QGJnH7z_6T%oqbu9l>{knG8hMQj0+so&=dhxOoI{Q#*kQeM4Tw zJkIU%>w{Kx+>K>FHt6i#>rF72vz@ z9heX#L>$1nQCJL`gcKnA5fn@kAY>PO461?TkizuB^vu|3oT>g)s!u(xn6J-+t{@`Z z9S=r%&;ghR6JiR=K;7~Gh`IPs{I_NTa-4ifJt6MmDk2qSgIw?nb^&A(AwUN&0Q1xw ztO`C2PlM;d$DwFA5Pc64t2``?JYC~OMUxxx&%``{2luEB{4ufyOgdb#+4MVG1RZI9 zWSwSZ6N8zx)OIqLbS95e>zToTYfpn(K25jM7pVaJ7O|V8u(!x!tS_bp{k4W5f#UE2 z&cA`ciLY1*IR;?)J98hVh)HBdfdorM-6xJSbFfFS3ThzBh&b8<9gN<=&*D??`($t8 zJ~LJ6r{`Z9Hh zd`vo$S!gqUmdK#4kON3FxsV)2bQ10$GhL0H!B(PDtSfpPorXLCiFE;d9-aebKyId& z#xI8Nh8Cm3c*{r|1p0h^mCC|RO8Ly1FLg$J@lU|j4MLAY&e%;j0r`zD1!(+jOaXi8r_MWLj94`a8G19+J=A$HQWbML-nTDCIu7&KZNf=bCH#o zSrtcYxcMf{21xEhUBv^*HI~KXH6#mujd?Iz&3CMQtMnkJKTPZ;CsY4`Q>;TU+kphrG{{;Ie z!WZLR@kY`fB%&+8v-VLoh6|=_d+?j&W}=ROs9N#|ag}&Qdg4>Ca!`fu$%VvKd;pju zw}JgXi@rt^k;{k+@(>vUPlHs@I#a1>f@z0wxPjCsfVt#o{VM%2{SsZX&Oz&=*-_#f zH7+Y($p+cdK-RP7gnvQ*kO}dyIU&EU$J&dkL{w| zX%10OJ}}$N9@a3X)}W$iQ&;FsppM6q0R)8ez&zZBHGo-cPpl_$7%1m0NFBNt?}qQi zUGPLy0A}O~Sa0kv_7N+_jv`IuQEE6NH|xx$v?GO(Yp5K=0dF89usl+V?lWwLf6)q^ zJ(z31Mlq0uYz1!Q6V8D16oAth2D&^K;Mfu}$gmXTEuFYO;tR6pYGMgF3rs@Bkx5hr zK$}kB80G>+be7B|e8IGE2vcP|-?XH5y{19CTk}LC(oWO$S8x-2Q|ZDd+Q;Z)Fi$U`#l$yk zIPgeAkx10bI0^cHD!K}&sJ1q0zGn*}q5_JF7$}Mgf(nSDqJV^y2#O+Nfr#XEcX#*9 zz0*M|Vm%e(+1=Rr#+KmV-7S~CnY_uO;7I^WrQL*L&4POP(9Ubbd?i#$=j2i}w3 zaPL>o9dHtJ&V9o*%{|W9>G{6mOag{nj^f&f&IMlrg@{>BY;Px zJN)c-?cwhA-cddu*s=7u+^$KkdiQ+K0{0ttgDcXtrukjVuGUrU>p>^>Npqi;!~-9F zS3J*r>svy+phMj1*Ph(2fEbz$x+XdvIuMRjdyZ|Al?6`iHE<}zwlrAATB;!l#Iw{x zddno~I|`qngrnT{mR3*!r2DQmcQ>E+cH8n?U5+H*k9#=MAKRleG(tp z<#F|KL!M06L04Z#uan`(w12Q3fXZ!N>m@kQ@&TG zYuVhE*fkw|-$_uxC|eaRo1nujA6nbmHn$mCJ~uOboxVBV`5vuD>Y;f)c%obZjzs%O z8w~%nuC)>zey%KMqT{mD&+*V1>0Ip^;M@XyZi#D-`+^S%P!Fp;|FoQFo8$Z8Sml}H zscUw*G``(!kk8vJ^^S4mz$5>^7xspE!#uw{xgL#oh-;-gzKX#w; zjPxMA>)g5SCT~Y`gYN^#qc1`4kP345-sU6C+du_>1FU0_x6&8mdFXlKsqv2X4FD%K z4WNI3@~#EZc&Gc7Tj#p$>;#ry=LoTVwcP>8xkiWsRY1cnM=X%}x=CUxG7C%}0j3e5 z4#wp&xt3_piWXGsX6_pVvZXm!fqo9a$u=)lE8)xYxSWQfmn_$&3-|QQZsM&4t(CaiFX}ymBGuQ4*NF`+0$&l1LmmR z{njS{yXDEvD)%EtrK<$?0yN+k_d0ixdxU!i@Mf($0>tT??hp_!Cc3yDp{Lrt+m#0p zSpFW0cb_lAJ=VqYto2Oy@ZDRzd7v|J3Dl5F+$&vs-MhgYymWQD!d(A>F~_;Sg7;o~ zQ^5K0Y*(5a=^XED1J)t6f3uyi5v-}O64F6?Er|dFybdZgNeo;=r~Vkg;a^hRZG46| z*|;ti*il?)UhgUJesWE5*EsXs8$nm~d0PPJK)h|~52A9r_o&w&%>E$HM7JEE^VT~a zILv^*+F`p5D{SMe|Jb(J7QrddBy)%{T9>x}&x29NMj!1wys7gn*v;*>Hn!+}b3u>w zlIN(`)m#ox80pRHy<2^kd;)i?Z=h!hKs!xzdtGB3832=c(H>=8V;^AqZl7i=xBj%2 z!fI%l%zR%UZsAHWN&HP)lh7Rz;0o$-}!M8}3s^>KEWv^CL-a${}u=3@Xez;Um4zi@YZ zUN@Us_WH6ttGq~8xvRv@cWK?(V26_87-0X`vBmb=KEbN7y|QxPn-C8YnOn^t%>7LY z^9)lGz~yfrZbPt-iXSLxQ<-oa;~ zGw=;-fN{Mu31q4gSD^C`fTwJIF8wJ90bQO`v?1B+XQF5 zW4+yH_u3q`#a6U+H1rz|vs!G+ZNF`=?M8crW3mlvH`q@));ieEd-nUbI@>|Vc-vd& zA{Wbc!@eBMOeg#idTaS@p;>Y)v6d+FYx8PTnemCSzu|>GMn~7`@Xgd(`CyIE5bZec z&i63vBWzZ%OPbm`wKWdZ!gqZ8y|;WN9*sK(bQ9}c(N4YN8L-YShsZI{vD6-9y<|V+ z{0X?Y4fYn;0=eL?fa|^tGMi|IcBkgZp|GFr? ztpH(1cb^53#@{u?73X+pvjOz3&F+K0!Ph|4WI?^qG4ov$!PH^S0f^&NeUG7!Ua9>K z(D;@5UxpOpb+g1W&q{>TO)~Qr(-iY%>klX%vY6dqU0!)UxT_sBo7@y?qFQN?zvc{d z2w;qlfXbuCPPKlu4uRLf2O+!lx;5OI0BazWB^DlPdjU7v=GlU5KIjO6H+%}^#to6S8nQ@zElk2hbFK4rzX@?yw=Md*`SB~?xSjLy;%22mj=wmN&7eZ6nlT5P4L}( z$=u&O)pWsBXfC$oTB@K@_^VX~tos)H3F-t`^h)TnIo_OR>fcU1Hsnz7{->>0&wS?( z*AB;eU_Tu;k&R<#+oJ3;dywszJ zu|aH*8@dgp2FN(eIM(>hG}Uz1yb9DNc!*)iFbhG2SO`n4!%XkZea){e>!3?8%bH?Y zXL(>bU>;^#V9YVl4Z93h{S(~_om)3YGfNfwICeQN zyB4{ZIL=4-3LAxLpM1+1=-oqJih;@uD#P+8(*IEt#g36(M zh-&=L_}nl;o31*lX;ptv{j15)akK)>NX;q@SM#@KygEj`NKFN-$!&l^Wzf(RSLDY` zI4IPdV$zu#&6~}1bE?6m7Hf7JO7!J`SCk@tYuayqW+^qj0o)-X9AsjevRMPGb*Xx)f@k0k&qC`lqHw-LAf<_Ncw;FjXCG z$*ur4#HWh3O6SS18K&v)81`9qSgzU50XD}7`yPN({A80^4c6aKi2j;3U*oU7u4z~Q zQh!msQeDyv)+B3aU>q3j7+r|5M29sUGZ#QgD9hxrRKQWr{?31$BSA!VLlE2#dJ2y; zKQ%|1_d}5umFcJD4`@4d9wJz-0_^)_kP)xw59|0Ex$?Dgf)b^!)?}$O6&DqOidy+E z#Y1_y@_=fXJXf(z=94!ng{G~2XThx&1k$ScIy0Tdw%UOavM|X3p1@(d)u}5~%_=m30_}o+hTdkL% zYIvu0q_xe8fM=LD87^w-l?#;bl#3K(#ZJXC`BZtHJV3rlu2W_zMT)-a2<1ifIyFJt z$CPAwY+h!j+GLJs+jiLBG8D#|Z$mleMq{?=sd=Qa*yv|GW^@|z4V9*urX8ktra>9Tbr)!QsERwWNqrx>M%_`;1V7LtltzZYzU-F+ev`w^1LV|7`dSxSFeVtsvv|0Suu%@;UNS`C8c*S+mToh?gIc=gK`& z60L}~k2{R}Rj`D+UWAgq)(tk?F=ZK}O|J}(jMGiKp=_wX1vZIwlT>r$3YkSZPy$Qt zNzRJ@5jTrIii#vVWVObSBoisuIRGqHN)A?zSgBXrfSE?h_v%vb=RQ(m13YH>Sb5!$2F9UpE ziIJuASEb6l+(M;HU84D_j!;cdl`7ig%jE*8O*Ti~BrlQARg@__3Zr7P;;tf9u9j!Y zuc*Q_AGApAN5x=mtmY4OmbOb*r0vxBYyMW>P<)XOlsF_yrN4nDN2BzLC`-f>4-mEB zV+m_%pO_5x2}P=Eswz#h$?#U!Ylzoo>HgH7xAZfv*36VYlw1PCaDJvA4rC6m}Gf6vKeO`T2dsdSrchFwQ z-YW+xM<{EQB*iWHRi#})0X+E}X} zBaV}9QXf}e)HbNg)m5t3sv(-e+C|b;B7{)NZ{}^{)$rWhV%86K31G*G{zh_4gcUv%925A&z0z&6J@Q_~CzV8=$4QkYNQ%WPCC8)$*-qI= zX_Jg1PmoQO50e#2tHtjmPsKMRUnQr+ZK7Aabip*CRd`tRRPtTgF0T?>6+h)lxmCVd zUMI_zkCr(lL85#iPFO6wAS?sAG*1Mh1X-dyu}B<+fe2G*&lwf`X2BPppU6+0r<$cP zDRX6aB;O8O%i?M-rg7%B?l{ty|l)a9V0~GWSoF2|Z&M|%` zXD7Ena9(^t`doNdxI$-=K=WoeEyN%};(Ub;f^ zOd1d7$052Wcqc*#uJJ>7yLn3l2tmFuMv@?X$nyzz3Vgz6!q5DR{AfWi{~J&;+ARr? zc%^E|E2&ESU6d&f7e|U-iNXa0?htMwuU-%*3>GaG(N6(yZ7=4&~5?C-o1u}6+mX2_LNtfWLZ zjkkj1$BE`1WDRFTQsb#q`UdJDpmnvGl0czSzcSOAYnW$P80G}VH`Yp)oB4^E%ihhq z$!p_6yjwgczlhV$e#zR*c)_Tm-=p*CBt`<`4*ff$lkuFRskr~}Lb#WB{=5|aY~DHUS^jcbwP6+RTb z6!r)mqCbTBf(5)NRv~K}_au+aKLO_Xn(&7(QM5^f6$Oe$ihQD7LW*!Szna_3Z2>++ z<~H$Ccy0V{K^MQ9UrgJF+k=slliBlGiR|?(0xLooB%Lddk$n-1xM+ilvDJyVCq47AG(u%hVg}EV0>mBVjpF! zr>&q4qnx00QTJ2dQ14Uav<(8fpeNAZAqCT}P=fqR&{h&PDa0qlAnZTh~m+he zcL?rt&Tu`PnVic&Z7Gb>MRE|{6Z+#H6V4En`0x1TI3v(jdx5)5$R}JRTmZUju_U05 zMJc9ypa#=QX+z0AvOjqsX*1~pSw-qgo=M6f*~r&{HqTHho$?YWHJzfkDXkO>?I2Kp zf|*Iwhtw3xzm!b!MDk98jMPJW#YAypcpG_#criR0KaUG@^?y4E0^9* zpT-zMIY{HuZZRLRF0*1-Ijnn(LdGxJCyI~MNhA}>@#VNIYzIz>{R905`!@#0=3;(h zg3u0Zf6Q^rVVs#5MQkH(A{@Y5Z~{UnF@VS;4JFcuY66D1g_KA7PM%CMl24OcDci}9 z$sA%5v735`-k-XF97&l)`a)C@ariyNBea)Hf0l|~zjz4ugZ_90or?p^_8FZe=4tb`r1;GqJ4EtQzpUN8DX(DJzMlq^zX; z!}!TDadq5nTn!h+!}C7!>bYKS40jGkz@c-Na01xZ!2EyX%x6p4xs=(2aGH(Qhtf#R zqm7`SXGSxM=*#IB=qqW_)By4-QePsDun_OTO~RZ-UqZ7nOHc)cSwuZemoi~iU&eFh2KG<( zHr9N`4~CSvlc``7(pS*jwEyTt#%x+P4Nt#9zrj4t3Z*AeMv%6W4Rk%Q`Q4m!_8E>6 zSk7qfC~)@<4u^A-gJM5nCj)KTeaxeb4>T;vgKMI?$^VhFX(g1q^cea=Y7Y%T^`o)L zFG(W_JwSzaAx?y|V^QcEsB7p<)D=`R($Gk2x{5r7`iSnv)L}KLJy)*sn;nn)J$qTt%SA|Sk5K-16nirKKU|5O4&~wKu9A#B+Dt|DaE8(ay%KP zHc-s8D9QlhInqpu3F!O@S=*V9*o)an_766Tjb|@lpJlIRJz+&KlNmc0%PHX`Iq@sd zh$WI26TgvS$=y^o$x8Z3Y9J9w^@OYV!FU*VAGZ%n!Cu5}M(;yWkZvRz8G|TpT!jcj z-bXLQSg|Eo2lhEO7PAOD4lBn#z$RgF*p-+=7y+gY{R90JZN$`Lr(l`5Y}^d&3#<~W zz%~K@IYOdQc+{QL_q2RkUs^i#9JP$fq*^H7$eW2wqJcDww2SzPq$E!OUgAeg#jEi= zR5xlE`fpqZkwnZQG!rTa9fTb~?{FM3mQaenM?6GbPCrL`ML$f}(AkVI=1j&#W-vnx z^kMJQYiT_+h<2Zlj{l9HjAh~bV=&kr{4@Ml;$-4M0*jD~@5bZseZd$dxXZW&SQmB_ zb_|A&I)h*|}FfWYDl^j&Np3=Ojs{T<82S#c|H4BQFaFW?nQd>2qL_27Qua&TfC z3)t00>^B@0{}rP^C!j(aXEhiaTbk}6m>3^E3Y&^U;YE0u7!Q1F7k(@@5xtkSYU%3Tn#oIHxWCp$%WXCpN%D9H{$zYkKod< z@3G<7vDgCaQ(Ox61Lglm26G7g7`+Bvg!+UEL!7N2Qop2bQQh!;^nI=MrZY z#ZoX0glznCVi)-kbrdC)^prf2LLtYJ29TKe#h6^=7<4Qq2b+PY*f+3pVoeV6Jh_Lq~^+nEZxZH52@oM9Xrd>!SDjC&?bRkwC=Oa6i zPnxFg-B9^g<@(A8yZKeOs<&6$st#1$t1PG*yXS0uHDWx_BEE#ZhntVY-_xMCSm6xUsjym*t=uLt|7Zi>w=L=qy`la zX6yiJ8?qM#A^$?HYUthlt}?$)R?FYpTT7_lfeb+WZrWKdt&OhQRlau9v)!3{da75| zWbI3=qu0e&Z>>^QbyeNkT~-ygo=E5YRdNxueiOfd!slnuFzUMV#9$A(&F1C zS4;P8RBcY*erLzRiiQg6w%yw@tG3rqLk&cK#`I!`V%(U2vD<-1RHMx3=Ro8APuwE{ z9bbb3%I~O?i2jW!h}oD0=-!gAWkKctY#+L#Xlr_T@vemG2B4mO2$|W`)^MtR-M*XE zwFNiImX&w!`dF>0$!qAS5867t47Z(M%E_-?!(Rs%ek;u@o43!tZ+um1Nom3CtYK@O zuRfn}Gx_bZ^C`rotT=8=Z_Kl(^|7MW0cjU<@f(5*w-h~H|9!)uqQ8rKH;^`rDMoC5 zyaz(M(ShiN=qKp4$fM|Llm;~d<%je`oyQEo{)K&sorHeelvsyv?28CTJg@D)C9h=q z#-NRtO9z+U+Ono1VHdgjpXy25vr6t4NY~|Omu)p{Kd_y>EobZDaz)Xg5>?^u+~5R5 z{EPXY7KW`jQ=YI>zvX$x*A#i;!?-&!LuSN9@FOc`Bt%S|GCLeOg&2M;>Q_QRLhq{V zk|706dHV~G=bb5-SoFHYxmDIEL0m-%k#~?cQ2mhUO;?+0kdu(LsMqN2$dbxCn}%*K zuO3q$xAS93pWLwp**VC}nv5UmoHd(Pe_f+pvnfrTot(dCgS(WPb#l$2OkuXWC?yNI z2C*bO=GL6|)7djQ$&}J1o0nxoFO84Op0glAIqAoQJ|RINqs9jYdB;Bvy%|CSlvr;ZP2j%*Cc8N1SNrT;4b#bZLpj|%opD2VXR zu2{ICU~fTL!Jw?{HN&$S*BvYRuX1#?s)|~fy>n;f+O5MY^0(dJiY&L3S&A6>bBjU? zqc-l{@-20K20i0hHZAK{+Vkc5q@$@*7C*?CwmNKa&xB8*{E+?=E=}A!{_WWDe%#S* zlj!l268A10m6RK$4?R7)c69ML+^9&uKSs?PJ7L`QaSJD|SZK`InfEMvV(N;O)ob^q zomuy^6thdPk&*voU3>1%lEBUX6)#LPth%$ZE#-Y0dM!RGJ=vCAoN_-YJ~=W5kvczq z{)|2meq*KM1_oD8kOwCOl#Na8(`VGhNw1^c%-uh$W$Lc62_yLdp8~rBmIWRQk_Gn( z*&N&z>X=7Q?@n!A^(?Jlx^zuw+Vs`zyiX;2^U5-8>7&yE)72TnQobY%Uvz2J_!U%c)(suyFCBBo zf1TgP(N}_#CcKY$IcIj<%ACsF&{c(NqO$(X9Gdw!e{9L@0yt~*%B}IX*v19>6O{{x z&hw945%neh*}`9Qtm) z=P|7-<`x@^Rrx!!F6VaTm#^!}othcF!W^}4?v}V)OFt}O&bzrFa@w|t0kft@W(5Bn zQ#p`Oh7*H*C|?+9+QPH}Q2!XeoK~?b5r&%>33>@zIXS z|3p5Fj)`H+Ulp}+*5v7@r|k|;ADb409X~j5>xg?p?+sc$VCv8(K^%Fe`FZiBwo%1>O z=ef^)u5&;4^E~%+7f3jCzh~`_`1z$*X{-KKRbAxw$TtEagZ)mKua0y77yjq|$Rqv% zkEEuiUj2%B)NkxUnji4h`H27jsQj;oyjZ`aJm9DI^4wRq^XBTx=;ti!^b3Fc3;h~( zfet0@&~5+zJiYbUMxXtDDkJpoBaDd0uQH;OzF=H53mI4b@F?T@+i?tVvY)}nR1Agl zZARhK3Py$Ugz;_qJ;wLvNXB@;663?odB$fY7nz~fLS|Uz2h8x86=uXUiOk5%-!Y?1 ziKCdd8}ll2FP$@sL533jzIZ=QXfd4ux<=5<*X^D3xiKKJAmX5uFz zX8bR2Fk^f2n9)B>Vn%+r!#tPr8|K;ROvb1Gurns&aK;-98l(8N0fsoLijn!Zrx@}7 z_6^3lV1nNL%@}&dbtKPneVX>$$p6<{|I79N--H~_GtcLKYFNE_L-M_wuXtu?VXRMS z7xxHS-m7ULB$k(I5=$)(Jh3Rte*@Pd0&xH%XYpoxF*&`Z|?z{|gz2`t_y%Z#V zAq0(S9I*KJk>K6-AA>I$`QU5GTCnvG_rNY=68P?D066TK0pBb6H}F3u9|M2giGT}V zehB{lcOQdm7rp@hy!ZsT{aG^j7o!XOTmB{R;N@=ci|b+FKTG}&etF{pcv6!D{!2fU z7kcX6_!Mu|ng57zQ=vh%0e=n;52uf5FMQ?p_w(NV&R3YHNFDfEj;_1%6@tG^YWWJi zF+;~+Bl5oXE2LfsSo&H{k52tsMiV_>A$SA(+1LEp^-Ev#>t{2*#;ADv*BEy8KfXq> zFzPD=o?*THH6~yFdVm6kn}7bg{rV#vU*TkoI{qsJzt>y}_>6kspDWv5Q|uk@)u;Xr z7O6YHm_MT4AAavFcqi`A`}9xhyg6;H;Q1FJ@R^!isu2ExH=>(K{X$#@ye<5l_w4un z1fG5Ko8Z%|AYg9n??Cj;cf8@>U8Z*4OQ7Dq{%7ia{64_FeF%8bTp;BW7sY?%V=Db* zjVcYA_Ea=J3beWhfoI;>1uj4S2^AS$iFrxOd7x~~z@JgBiWZ2rgStAT!=;Czk9l+cTn}c2PEko{zBlUpgg4dxL*V;W z5n$X$q2APlRqusN4wzP*1~k2md#}F6I_>8d!SL@?g5f`VjH3Pa3u^B3UxShVyiTcB zeoARxcT+FZDd0)rEsFo+B_Qh2OTdq=cLA)A4ym~MA5ev+VBqXDN#(_+-u$m`v;%Dm z%e0*EB#Lv=Fd5nWJNlEeuK?#&A`rINsTAQ`RKophK*zD#`^2XUOO4144g8uoIAH&psDRobSeZqm*J+JAgT)zbDn(u95>ham&>!8d?`AG|;b zzq~=a-;fAI1Y8Hm`@7WH@E0khb_aN7|4R=^gi>+A-L!i3U*2zD{nzBv@1=raKVJmX zc`-m(`R~0?Oay~xzc~h!f2sk(n~wmX@@X*6b(MO0E{7Ui`#n$|8Ug6P_$jr~W&{r8 zj{}p>@u`d7ou|%TtER4DWkA}+RO;2_bXxh|hX4w1Qr65JprYzYKw$Z!XJh<|=Z%-n z17U;LX@7dBgC0qJbMkqlgVOG#QX;{J;8VZ4PCXD-Qfc3c1H-5`Z}{(i<$da45fG*S z8+akBl%l=*IrXcPW9t0-Kc((2_5kl#J_VBMEYwHs;}r2@9~H&?fFduyMT`DRIZzYW z4P?)31JCDAQ2Dtz0Q>|S$ap+}LQWo;yu|*H{*2E9hW;_c8*%M@sz%fd)C}zdzvaE_ z3413I*joEJ5FtFF5?;JWMVI`7_STOa6gvc=w7+zDw$*_%4g*t(m_8_cJRg`9p`NSNR&i(7Z!2FDu^vpkJSNzwZ0q$eVWHH+T1GAKYJ} ze0K`LsIf@Os6I>0(&S)d{SlS%`LC(>DieY7cg};M`w76CkEc_w4*>whejK><>n)0P z@kuH&^Viht@2`9QtKbmGiBSRPTP@TRYwrQrOS;Lk@gLD+k1kOL?F<$6(Z2&tZ$dym z{U#OP(M01aCaE`CCDhgbTnEEAd%*SHVQ(1pIZ#EvLp^8r1Fl59N~N3s)5Fjz0LT4C z+T!^8wBP^u|4?t=KA|KXn}AS>zW+o0t;r|GynbuMC(<`yK_>ehw%Geg$y;iUZ*OH{S13 z|8nx#P0-_h`bWUb!?!%HhVRm<-~AK_wPKV=`d8q>@>L4W$Om}PRhq2kODgxZKq@Kj zV_K7^lDd@FJsExNmw9~JFz|u#9B`G3QvCs+0~zZ!Ad4_lF;fA+rF)-vF5OpA%!OzG zgld7CIt_IbyEOS!<2ic7l}@1R(H!7z=IOtAj;RwW8F=!OKLO91KB4GO{)6_n?c0E@ zERL$$!6u){|A1cb_NP?*%y%fB%}$;B_On1(OEVSw&!;K-qmKX=h);k!KaHI{f5S+R ze(wVHlb}bbj(>=#qNYtxB>|ebJ)MAdwv)}j`{o>@aw0=`N09(&dSyvXQ?0e&R z?cZIUd^*?RS@?1WASz_tQ5vNFDB2ks9BE-Ie zDzsD*32&=mX{fY?w~85!NBD?7MxjF2v39vj)o5)o4_WAi^*K}@- zB-uKZ%B#%aH5k0g4XH=_K%Hc6S4VNnSh((tnyx2MTwY34DK^Ek2!w?zSt2kq8je8( z^g7t*@VnC_ZxxJNoj4A!VP(iMu`P?|p_-<`==@D|TXl>y;V!HN8&y?lHt~1`6PZ@w zr>Rqic1smVZm6bU9FDh)vnwqNsUnmk(3s*P1`!MTNv+I97W zc+;3v?38SZ))eik1M!9`*FvcL#B;=)2@%%H+K^sj9KR1)Hqq5%MmCJX+JY+iE;A0U zH7znKZS~q+)(ApZ@8~k{17sgni325JCKhhQI~4P>7^$8w(%Up)DpC`rT*oG~S){*Y z2r+BdNuSCm^HXVI5wV61Nh_?|ia|0?aEz|F9S zv}mB*rHgd>Ji3XRrkYBnT5!l0&L)<*0U4IMCxeUqD?An#SoX#BBM<3of54~aI_88wbsZS}=8p$kja9poRlI}K}Mhp|r@ z1I391Xo_k}xhzT(bx8e*Rj5rig5szi8AJz)gNRZ*TpXliW7RB2p%0zNWZ$ZRHw+81 zW28-!D`Ig@;9+D%KCcgvC!x`rW7)d8ReBnwr!o@@kT=8Wn7?WY&*C+(do+lNEeVn~ zO2bWM=4SpeZr5@P*EK_m8N`RLDWkK7phM-1^#KROag0v%ieqwVcM*QFFj3ph2H|B} zB>IpuL&COnU4|kQ3f63)e(dPNUSS_Jfs@h-7?O19M(qnCuW1GgG>z&A!Llg`X%f1u zY05FH_WC* zQ?Drn0%c9wD(RRKQ7z*$*cv|!Yc-GSLlr?XkJxAEhYw`odb>7FBgm=Kglo=7_xR(M z>|!GTb5mvUqIkrt_P0c78&r05Pqt!&)m%m`)@OIB12kG>GY2YJG4umz@@D8*=rDPW z``lp*sZJ3rpw*gAWeet~EK?W-^@@0ffY*he$Y)gBWT&81QCgx^4l^>Kd6`|&D-0@P zyI@ujFTKd9JCX)zI+wkGl#}6cD~iU(&}|CK!li zShXX5AWbDmIHB054$bT)REi97SDuLIbtEYp^9QACjyUC}dG?l%BQgeH9V!snhoXrC zb+U0!0J4LTJ!J<%z_s!-woTPEoPg~r1ah)q3~N?d(KEVcblx^y+;C&m=;Zq;lXIq( zGdO(Hk6UdTGjx(Q*diXuc_?d^McL^@g~2K9Ql3caZ7E8^JiuRO?V~ZKc65e2u1i*+ zx_;I?zh4?lj1dk4T;gZ;W2Y63TPKl74x&pe3U;_esi(6WKxs}5p!JDt1? zIHIuCGM_ocZaKC9!F=A|09_bzE zsN7$(M()62h8F&)^32@;a+Q0-+^zBt_lb?E6374{*Nq||p zXNcCb3MRNmgx*L)Hn0P|9<9?SnCFa9XfE8Z9Yr(LG;&6Jpl`RgOQ*<2bpU-^JPRjT zXK;jHFIv{uAsf0tGFJ-Y73w2|hU;~U z9hv9YhzI%uv`Ri~&4nLAeVX`ux28IbG3$jgS{bz&^l~miCg&^6bXpP?u)Vu!~j_kTncXL+a#R+A1<0izWzp z8WGJWRb}?LTM>dYqA{`(374k`9l|n>Pnu1X@frY|x!W}+jKfL`E1i(}OmerfTYhv4 z!2@q@7?|P_*&b1UIxFbqgT;|}H#x1D#2fGdo{s~S2b%GMMl4l(V6IVbWFc_3jmQF_ zRb`l^Lf3IUPMa%D&y zy17<5%1!3kjN_G^@KjzhgN;6{IFkDKUQKg(up*9kLWa^IG75qLt-3~$Ywd<|1&Lz1 zyhiLKb47!aP&f|tbGXf;g{jz*(k8bHx72$gDX=TlFE>7(c||BL<}Ha0_chxm8?& zX36~Yk#~lzTa5Hfx8D9DUEW%N%9f=YI$S)Cie#iXOxIYXm2TqGw|ec{{CQ$ewooub zrkRJ-qx@LGfN6)fjUN^#^7~AQ_C7-*5w2SYZL)f6pP;(1S?wtliMIKv;#g)R7K`+2 z>9W+D0w*D}feDI9gsa}s99tlA!?VTdZi#C&JqxKZ zNPtRv!@I-#yEkS ztde<{jY6kBLYARBxiuj5$-u%5=_1X;98=F0M+iy_9!O6N^~Mc!Ul_n1lkYn#iX$`! zN*mt83syZ~vAOZZN4LAJe)ORHM)cU6qFhtgi9y9+ajkWLYTR*TROPQGJ$%9HK%__Xw^1jg<_80Ewmd_aGRt8)=GATJ^19k33v)vE{eIe zQcx@M6vj*Za|d+-_J+|YO~;3AE+pwjkD|A{8f)ex70e@Rw}Uj5P^8pRM4h+1!0l(Bf(t|>~#!ndR4yg(wY1t!kNqJdmE#8&cM^;p> zn1V%HnjNk4ej9Sc7*y12tZ=s~Nm~u4fh==u1xpbJY4uIyQ27LRA52lqmk~v2c$4NR zD*~@HkL0JaBGrDnUM*3;AHA)Mn8EwcgVJ_kCgas z+O32%UfHjV63;7Vt!tW->_l0+ZB$L76AZ0@RErAJ^F?r@rai3zUAk9Kv|P#7hBY)9 z!x$T;A;l;u(!1yZKz7wkZM^P)IVhU5#9Ed#!>plHmuB_FZG>Rx@j%sTsa}x`tlv3Q zxzx_ANC69;F%I7CMi&cwstxVDaU3SF5ig|f-O_^wyy$J7EBkc2eq|lE9k>0xT{OXiJ zYxOG!G}?2ZaN<>uI*H3-J9sU2i6ej=c&${$awOaB!ajJ6XuE|}(Q;a^##J2Hhs6`3 z&}^47yDdT$QGlAuEaTFh+(@n@zv_NyAwsqy0oaOqR2qi1OP$(aMU*;GylXBsKwvu7 zsISA?(E#QWZ_PEp3Ccbx>L}t~td^@@8itILKKq^}OBfEN%JwuqWHE=pR}6EOI@vz2 zlo4p?zi-W5`If|f@=_)H2z*d9sdVY)YqAsAKyBTkg2-v+N^WH-H&kodh|`QQxppeQ z;mVP#%(Ci&@nf+AX(ULik2Nmc5ZQIFrN)|gK2kUG@4DM-QMN}J$~j2+X#T~O32-4aa}HQb8k zB=Q1`fv28}l608DjSIpCB3!as&;Z3MM%4Sfc680*PqYXgXhkq1NhnT&M{|x*f7!mUL$FVd5_W~kosMp&4aj*{OQ3xq;Qp$trH< zWu#~5&KS4zd$>{3PFJWB2O3fHJ-4zmcY)V_4%CE24|V(p`ia-vURv-IwK%`7hYGiU|!CO ze8rSR(8(cLt=gYVkxWS&4Waf(6yhxF(sfIUBYTZCfg3H^s`kMf&-V*!Zq2!uFgUBs zymgO_IdUh>hefAZG1Of!RD_rBGly8=n&g+_j7}gZb3;9MFRal0%>K=`H)0B+a*W1E zdlGL9PgEz#AL!~?9!_I+lq!r36m~6 zBhA7p@2T>VMX@T0AwnLmb=%mo4TaUZB&3L?Uj^x2q#?&r7@LeELrQxGPdV z&hbFW3XdU1v#9iw)~V)-q9ps$WpSOkj@-Kz;_kZ((xQ;~7t_fsZnkz83DLvYA%3Vm z);!=Zxf7J5P-%X)%PLyPq)Uv-n35XpLGCa)SGvjDdIGoB^|DyLhGZUyL9C&)?9Ng;H+!|Fvh*Z(B;6*E6uAuObE{zG zxBDt8GNLj=-7)2H>~t{v)}(6==wi9#K}Egg!@{X&JOuJu5Hy<|N<-AH8?BO^vO2UXrN6l9l~idhwgPXlprY~H?ricx zRo&7X6^Sv*31rvYjy*I57KI5L2RXtEV+(jHa1nX8>s?(?&d zbj>a_ZbK^~xvPft8n-N-&AhLbhYF($M$DDYX~PgWaC72TTqD9-jB7jHiHL-HU=lw{ z4ijWovP|PwLsh%{V7`?@v+UfQDo7RdE5=kd&55j;)rtBe;pn7x--6ce zy)>72*)mmjMn1(!#uD*(;Yzt#5+$xwwFyFy5J^yBqa~SdXS5*;FZg69oUlSGvZm=W z)T5K4V{5CHB^wY}?*^&R^ED;x=400ORew2ITc_*1)RjN0Gny-k>Dso8c*(MP777y& z=gegf7Pk^f;9*IfF%k_>gmZR9Oj(w;UehH5v1Vn0^1)qL+QO+U@>kV!1KCl99%z`S z7q7B+SheJXS3GGg*~4Xh_eWCwu5Bnbi=6x!VX&5zd%4s3iK3>ABi4})6gZJ^!6NtQ z{*pKuMR?h8D!eb*R|e{8Ag7vC80D~Gg&z$0EETu>vdUOXih438zeVpotyx!|R#W3N z%jy^?U0-K*T(07}U-5G1AM=%uR_$F`rnSEbD@g@SnT>;@imLvE7IYmC#vhQOVjpu> zYUAk(#!Vf2WXIH6OYe;Ens0PL(~cQUVugdBW^0q}3Hzifcbn9K*jX-Zpw1;-yfJwv zxERUtPYtrt3u~FRHy&z-UkXt_gy{JWU67lsti2J-2VGqiprn=IK=v9Ju!mWDuZ)>e zo{z0OcH^kS&~jQajY0k3(-CJ4myh7MHdq}lU*xZ2d$;|rH|2<`xizgc-}4o=_7_L& z?kGPIa(h7!UOL8mWCVLp(JbvOoK`QZ4rGG-fr?PrhX#w|u~{Wk7s+1G%oW1eF3X9g zJ42OGsUGvJaYLD!wV!wV$~@MS5}rkrJBvnGtK2X?h&BXs9NZ6rl^)n4G1Fm2PLm>)RAQV8*zQqKX~NSuo99 zdMQHYf8NL&cy&{n9v%JEmV>bG6$q{^S@#Nhuyq4u-xOA`64X(OaFaJLK`^5;%glmo z$fwURC3Bm_s?rl}9Ahsp)Y*2so4ucuR@i$d;STpQEp5~7sdl7>XGQQ?g|YYokzhJe z>={GleF}m*C@>bzlaUJYw9?Qj+JjSdBZeI`;`uTKT0LkOxSSXdRW7v-#8#a1)y7qo zX7q|f(KvOVK1!B|Gzj(lHQR_Gj+JVjEN0``a6g|!<1HZ?r(l?wfiYiv;7mThoe#Y< zt_@5kuWvIw!fJaBpodztNlK7IqDjg+*NHQNpCoL%n{8R6)iB{#w#o+Ri#eS|=3H9jUNUd8zFN5Z(llX?d3$>48szNX4nbILFIjQ z!!heZP^-nAxSL$XMY1!3#?u_cgFLWAvr9!zc*|ffK9=vLrRv%$Kr)D)&Tdi*hzxib zN+y|DG`uF*GJ&_ZuqJ5S)N4yI_i*USq0&QTeeRTO%h7jdQ!^(Wk(p^7LMC=7Nr8{- zxEirclE<8O(;4%G>F;#g^oVg~Alvj|w;gU@ObB&|@F zsjVaninjRU)$C+@nz=_p7$>z0H;?t3`YBNj>(I_rBm6kMTV5&m)1)g8;SO!7`h=OT z*+g4}c&R}4Kq)7jzW3F29akOKsH#!NQB|X=s;WjEwYSt5V~iSOOvYp)A|fIpA|i>1{7*y@ z5fKp)5kV${F(zY-G1;3=Rh?ATaa0{u$LqT4I`cY?*LCK&?rZu!&wbZ^p8Z+h_51$T zTF|t0=&Flas405|F48a!`xS=d}@w;e%0r?>F4M7neQ3p%Wz77@5e7W3FRKX zB$%@ezvSeb65@z>3c}ZZs;twx5dFDmXOM-8;C;UQ0%}*~0zj;mbi+(rw z?k^e<_V5>dwLbVI9S<0Ozv!@6YkuL|uD|#ofsfZO`s_b{`I1wmqe+FN>|0V4E11Z^f?P3aXco1wazyW?|I$`uVYw~vs z9bjO=HJ~fOCCzZV3$z zT>B1ur*axT6E+7-b$EjB-Q+;$qDFw0_aDLj!tbHHbN>otFUsJv)vv>Tc{kxRwPyJ2 zheT-j!apG8pf7wzmIb`~bbC^q6P8l2TMm6R{df3-`{Cf1-ACZt(NjS7Rt@<6Tr$8Z z@c={0Q^A10{R`-S=6m?{PBwgIG8lUMKjYyyUaf@MtQhdOjCbIWA6&uw)P6Xk_(Q1U zVLy1*hYd%#96;EJWBA_0o z=W-*QTyPdhT8M&U(w=~R-{ycms&|3G)C?f%<8ENSI2QWylVzwg`Y|9pItRY>oi8+6 z`vCgeh81}9l@olkXBR$Ou9_SOd_Cn&0t$-yO#qy_`p-aD-80btFZG;<$qz>UJo(1TCUoPY zd;q-g1Pt>YgGvK`2m4)~g^oT}z+u8aLW)fXaG~tn>9hI-es?h*d~NJE0OwEf5F+Jf z^3vP6(8YpXp!u}VK}HM|mAntJJ0ajd%6cFyQjvz_&7rfuO8cfX$Y_LsipBpzpN-;HOJ!NPI^H z=~90Oy~TeY=$Z6~22FQT0NuruP!A(OVC(`s$`R1s(g(lx`*(nlhC0w!CkJYtEWq8$eT3KS1BCI9((DnsN#C7BqnM1J1Ou;mE=(P|Oowh!}PWLW$}j?!`5r z*5&6ETGE;U`{6sVuYWM07+wK*Xa5Co6rd;1zg3ygx^7-wQ@K0z^a`~@-TN5 zoO-Y52++ zvr~}APrqkDI?E0B7upbah#hj7v&pAJgUvXfS3IUpU|}j|qc@E15BzWK=@+z&?gO!0 zvD^gH+^Oc@Z=jBPK&s0R1}>*RS7g<&o@R?tMzc8KNs`1+gQ6dFgxJ`cj8BHUjCb^s zBPmi9Craa4?mCsyT4A%dJx1>?i~Qtd0M)vL8zv7oyR}6%2G{zv=5gmA(6kFRl)=T@ zJ58}{YM->-nDSifcoHYXqd_vIBT{mF;~9ZP#W+yNz5K1q^IuP^P=csjAGO)Msh$h7 zH{|A~X>;E?KzVbVrioElzD;J!XLWqsF6gdI?Y35Ie=-_5^}iUBnDiV(+JML76UJ6M zmzyYNvD1s^`js?{EUn7}w|+gBdGznQAc$3IqW*$3S|W8d*5TDouZ(d zpL1AYeHvRH3wYfm*fv<=izjV9W%@p?nB|y}&i2!#{`cd!wz8A2Y#38QTGEaH*+4$8 zWv%_3`_PUV8_O8kP;qX=)L|9WPsGZZ3a`OnHXF4wrIAM8auhlWl-jt$7z(m|ef^HscbrNv5CLw zkj-RgP#5pc(DFWZVPUGsxI^pJ>o9+et&*8$|2Gq4UQB)~|zS_9e>y!7cUta@M(`otuv0FN3#B3R&goSV1US;rUu@&YI=H%=4G=2oeDfD_sZgQzk z#6KsUG3Q?H> zDq#&rH(bg1)C}!&$GR5N=jpf!qHHTO5;OZfVRQtE%yqMP{lOh+FW5HQfAG_p%eQA( zcjDXCs97PpcjL+?n@yM}tP5f*_qsAJSjwZyo@d&G3+VkipVqC8^_Cc_4_%kB%}LHN zB&U5!W8#@h;s|V#Qr~I3;S^*jm&Sc=d-uB7vWgOGqj1>P(KbYJ62sC%9g}`+WUMuy z#R)eL(%6rcqF~fX?eySCJL?v?XtxCgZ+@O$ByCKsG373SPBJYkyxn^GMcnK2={lyT zDLjV`^t(-Y4ziW}C@@#ncSO_6gRV!F#>&lC(6?+7AuTxHP|W2laQa9l(KL0USIN-S z`(D|Qq}@C&Ke(~SHkFU)vMNyD%yE-yg$z>_x{Rit70DWOE!ln2TN$Dw6rB=K5mw{d z9L;bWUA?uV4wQ%G1Qc`H)gmPkQx0pDzKNWbHGx;veNTrR#SSxELxN8 z;J|oyY7{Y|g}bS~i(?wU9bI}Zbv-++i6f`S5YKA4;ng07L@TLst39X9qeUpm9^9#C z6eBx43jG;Qt*wU8luh#%THDu!EIo~$&}ZQ!$c)$1r?+X|`Fx)K=|SfTcDCQ`o=oqa zj^mQ5Jx64zGWPgrNSkL}T&a93x`iXp_d=62B*RrpOFTGMQQl>S4AH9(ryJ|>b88CiQwoM@YIAPuaT zWiCn*C`WCK8=Ubq3|_zxU<91f0LEB5tt*P^)$J{v~vK8H&!KWO7$PeU(P z&-4g6W@fS~-3ZS`k~7KUB;_~pvW-%bc;hR_GJAg${+>%b406mhrX6tOUg?uL^r#Z`SfHViC>ZGJli9?{HYT( zKaRa~=rbSuW`phAF>*f@r(L{;lZ=ur41SlG659^rWQOBhlHx`AHgAbHBnW*N-MZSP zviRw9wK565FhTBZ4`vN>kWVRceS?#mc5fy(w$@6YHAS}s6eO!o;Ak_we>H93yIHcE znNzr>NKkGt!={c$v($bXqn;q2|BS0}QtVZE=5$Jamr6L?d{itip_BA<8f~l6K9*VK z`cqz$Tlb+LymwZiVu)LFDx;|(^qoeBWQpX#GLVi)E4&&5O zyBW2(;Vnb5jKEzMc$Wo`MY_8&v^4WjqenHSJ-jZknZ?TE)3hsBrbKGSikW_WzR*YYEX{`X$F9!h zF%k_V3BK1)8z+pqkw0KG9w05W6@FC7YURi^x4IXdsj96Eb8jxQ@6t(4NT!z{>55xD zqC+Jck!58VR*02gULs8fBQ1F>Q?L8lv!)%(#&B#ESwpt1G#_H72Yrc~W3il2^(ZrN zaDg_{&LVQ_?Btb39Vw>PTenOfpvz2w;&CIgK2C{z@SI||x)*3VY`4%fGB(g0Zpf02 z$+zukN_TimnxpsCV#Gt`=#u;=aTG3pu08tcc9YhUMj;G@RnK;;qa%m1M_}2sbe%ME zUzr?6oRA4EyN(6cx-rHQuU+q>Q4tl!TTV1qibxBgouKFIqgy<=s1n-P#OSy&iIO{K zQ_i()nYPQa#lp%yroCFmp(!IN&jvG_adp;45{2BlTq7-uCj`olnQlUxa)!5@HKK6H zx4TBKklU2Vr5j0U@mDN82ok?0pqx~5R6BiL$%-c1E7Pxr*75UPMf#6?gzWQpMc~!F z#;tlIC#oqD&8-`5iphE*T)(;3r>coiB{U*?{l9!hIxLHB^O79W@V6O_^zsBu94f16 zg@r|qmTE;=oawRzMtJdDqqk*+c*2~rVwKXqbRJ2(hMueUrg&b<=g6)Osq;QPQ6aN+ zTAK*dmdTv1$2L6YzVSRfmCE*X)?8g@#p6{FmvFXQhr3iqAaLkY@J z@eCW?f@s3g_et?K2bWm2Mv`lzZw-^|xeTmf!-q2t{&~CRL=;(=P{$q|}Lyd2_OPgr8$D^;p$Gb>`x24Y$oCamXB! zBLdr!M|W@Vss*(aQBa+Uhb+w#Gx!I0Gf}~Jcbft^v6?*PagF_vS(@8wPnkAQ(bCK7 zlv&K2mS1X?gfqwWT+AkSz&7+OvP*w2(L%t@w(d|Dg=liJD(%+(;QqHp>*`&^9ba+M z9cR%q$|em-7c%w9Y*9iLs$+cl(# zjeVOVuvf(=rP`cOdktblg%s#22fr11I=C8I2YpA7&lN zlle$)zF@H$rPJw+7lv!;`3vgBhBO6AAKN%$IJg>7H-0OqjMflPND-IEb?qvGdS}QQTd+8`lEz8B;oa!@iMbSGqV_&-x69Ded>us;YEbvmO-WUuO_oYo z?PgbGD_uQrdtSm3WtP*ML-I$A93Gvj)F(c`nO$pSZ5zfpnrH23)A8vp6R#Q5swGpy zWA|bt;*JpF;pr}5INuY?VWf7f-FK}Uv%X-Wt$t;CDuTN+>?RwbkB%R;9Eygdsnr?f z=wh9iUp+M8RC}4d``{dKWYf?z_nFX3wwWaF)4maqwNeJXm7 zGh3ppHQ(N)Y*xCPrP;gvNyd4#UzOoUbN8%rU$tjJUybctR&Mtrg<1BQj)Z>ejAvs~ zy@xcKx?P!wLCC2{`RPBpvSo!fqtGF><%tp$-PxPX!;dU>ihtzvfW6jEucqf+QjIG! zv}4XnC3qGLT+`Rh60sWnFwRbQ(iDtd4`z5Br7jV>S?8g&7CAeE&B^LTDoUM+dO=22 ztgFyM_w;AgDw%6}-c>*D(De~km|T3zOqFt?I43fyg(IYVK0e0aB(a7#yDe+HlL~U> zlrc~jsh6=S9k^OcI$rAX*+Hk1%hiWgCR^4ULrls6)c8yby=hFb`7rKbd{2(bpbDXc z&^fF)-ij)qk?#mL?ZKcztX{Q@;`4cd9Ig@394sTt;;H;XDKE~zYST~+9107MUMM7# zY+l(Ly}&~9nj`y%^Uw@Z8dgttKUslnGI zh=qNt*9i(WSE<1bsv2;5X{UzDVZV_1b$NDWx5}AtyRk0wmUkP9Ka{gmIVz58j>{hE zw~NuAMKk49p|{m_>)j4oEc(c15}}85cktXi3G$9ckFBRktZE~hHnvX+Z6wl1s;0?w zJ(_5jjoMvC23kWFbi#zk*#!IjMWU}h@cY&zxSD%>+s9>NLXZ_0v^$i66?cZahexjpccKvo8B zI)C0EuBRBy!U&Up|4?7PX+ahyFt;6+p_z8n`qhXsQo}&Q92Z@U|ME~X`|U(V=pW{b z8&$0`$AU%M=vkR;9D9o z{7g!O0GXF4+A*2+Aw<8SKtaZIykes}h68F@EeQiimY>?!vP10S?N-@&n+1e!Jw2J> ztT-k|)od$O#>G->?+hlPXZIn3YlQ+S8Le*N2s1X_zjVHMg^Mg^=w>wo?CI7(E=N40 z3dbcW+<8Kct#!l@Aexo0Se%*+j>fQ4f|ZAnXB$I`cOF{U$m*jBt!zVy9ADIM>vK#d z3%i3P2)ZX!Z}1X}=NgcmrWztMnl>a=vy6I=#vlz|Hr;Bq9*6?uI72$c^$QG{!61}p zbjDGMb?$;`YIF;Ws}$uKa3v_gToY1>=lk_6tCpL2s3?HSPi~0QkbZrvHIF`1ja#v%&wd71L;m4xs+TJMcu&qvG}E~ zy!F-~{04ieUR-7=MWm;SRV)vFYEwLIK$@#x>qvXFZ7?=^Yi89drfbt?^+cmP$8N<_ zVwlplk)pKE$W*hDjAB=FJBDkW^%jNr@f5<+>=fly_=~j`*TQGDdllLqHPZ5cULJ2z z_9(UKR79y)>oy^h6If7W=n~ zR*C9LRp|&RtcW6P--n zT211SDwKRObEg1BPetW5M{r+MFV(E%r%lgF;yO$wac`<7Nth%UDB*WHi*xl3w1MMS zP1nTsCrZ-Ck+hIjF*~a=qa&m~!w`2ZtbGojsTw9drzO%jWRhZubV%8(TeW$yrpwt+ zRp;mUgqloip3tO>Yr_k;{i&*iVt2#LZ5LriZCgZET91ASo_6CsBe*dLIy zpnlP9OMl*XfH`c*pt~sDn}T`agD#SpI_@J*K0+Fl7u3H=iR#K|%aUbu__q#g5PVm) zS?R`=cgxxxI)C+)4og)Rj8(_W!IrpMf|#%J6J*n!>e;p-L2l)&&W-O=9wDA@48&p$ zFT@~yul=~`WMF{Asljl95Mv@DHJk6nb}_oPCh)UIhXfvKYu^r@WXrEPsPSWka?EO0 zOD-wI=3BLOU)87-o0{Y5bIZM$nno<&wcLk$VAENf^q(}7Ezz{y_Wef#dLNx!mzL>LdqU?(hjiPuhtheOZ~sO^ zI%!2at|YQN*@!ESyK7}unz1a3jV?Zs+N(WoE;Qyg=$P)GYR3A?Fx4^Fgb$99`o`$y zIrI#7f<&%QKZu)%T(+H8Ll+C{hxIb){P|t}G5-UCk1B z+~x?##4MwuB}|LK3oxVovT1;vXxXJfX|oim1Yl?Mv*?v7SljPrbHUX+UTa8FFj z4w#k~88B`#GM016n!8!3EGYWKEJ!O(y5gRL_(~3jE|t#Mo=&^j-D3 z#@HNRtL@tt#PibWf!z^;+1B8cDBFxGTbB z5^p@?&TtSTZg}zoUtJbEsxz{eb33zH-Qpt1sSRK!$lUr;%kfq5RPDpn%814g!BD^O za^{G9c#Ik}8Z?NpjCZ9yS&}D}t9S{wb`^%pxh7Y9h?&q7D$8o0BB{EtlAv0Drf>Oy zd?}yGBia0$26*1&1o{cdfC$C%`DzX@m? z&JGEZb6Cp{(kSh0!q!nA|(Grz(jgtz8UOV|xW7RyR7xnSy zY-6`}RM}W!Zfbqp=h>`9t_#D)JZbi1CiAje40p^p7lEP42Y0|vt4G-OSVNsKWrdv7 zl6hmke5}j|X}4FSn`r)lO^4ubH6WFm<~`JLHQ13nh9l+= z1vA`;F6x6O97~_U9+RQ-M}zv}WGJ1jc2t)piWP2-Z+5Gjr<)kn*}d6Ums_a1>|r*| zMj+O2lOi42HacdZs&B^YwzUZ%byQPW2GbBTUq=-Y`&}wMy1Yh`E5LSnt7pHAJi*bj zqZDpj;z-cvedYP`eO9(~UXj(2Rtt)qxA9g(`H>bca@A-JNP~_>(Ps4^$?*eXrN-gK z7K(jk8G63N)Zic_akE>vOnwEfjZvbeZ&_q0n5{JHJ7CRFwV7>UMQG<}a{eM+IbcDD zn(bwy)?~h?7TbX#xqnXKZ_#5VPU#EH4r{5}QGvX>#z^N{diI`ZRe0f;#iPlM@mxa{ zdn>hEkD3LpyJfg4igqw!sEQ>z`Ek5)tt3-;-|D8f&+z!g=QE0I3Vfj~U8|IDcCH EFW=h0;{X5v literal 0 HcmV?d00001 diff --git a/templates/ifs_templates/grib1_mlgrib2/gg_ml.tmpl b/templates/ifs_templates/grib1_mlgrib2/gg_ml.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..10c5994320d1e0031635dda746b7d3262952f0df GIT binary patch literal 27684 zcmd42Re0N27X=zNOR~j`wq729IUTf{GQdP?2|Nb2n6ZOAWI}QAUM@Kb@ii(elHe8LPtpDeMD0@s) zG}vO|qQl{EVpLSLF%}$2x)&22r6>IUf4{)NM*scke@Eg=75#5NY8cqTYmGbp--qB> zI4TN@qNB7ZJt`0tiOL3B>8Ns1m80r_zik%PE~?l6wxXyJQ4_(o@c-GiME&2}{;2UiHI-xs=r^+DpkdWY&fc`UoG)nGRV^4&wN}BTz3BxDKi@0Z@U2+EfxX)c zF6Eprc-(e>!Pm4_h4B}Q3gP?dg-l_wLhbv=!qB&Og;|+P3kz4wEUc3Jtg!xmYhi2e z{=#mx(hCQ=iWLssQ><{*?1_cr1*C9t#=F94_o>2J24mrz1v3lh%|BT<|J#+q1xqUz zE|}V>aQ@ze!g&NzID7K;!Wo|Ng_CbDFC4dXX5olS;le@1{e|5MOBObFO)acm?OtI) z^vJ^GdTR^SdBqAHpB@#)Oo}UboKd;p=!8ZEt9rC57@xSkp!Jsy1=&iS0<=VK$-8W= zl8aNKN;W**tR#YQB~~`MS3` z+bzSi_jtzSw9=XIflir2h!2@}KF`le375+nb8%+YId3={GZbZ)f7>m4G|yyjJ^VTQ zMWbRlSd%q5=`Y)WVzR*%p@< z*?T-Mt808-iG!xRa`S8CRrz@#ulCi4d5z?6dCmVu^V+=h=XGq+Ew5{VGq1;p#d*C` z9C>}a{*%`~L(Us8)SEZ3*@nEL|BW;r{~r)UMU@CVA&bmWQOJLvCM19eZ+XNJC>@v> zI2L#kcpG>cI2D*2$oAjx7x_cJyS~Z3X1?~mO@7`#!T&KhH~1k`Cp15_I&?Cug?ojE zhn=BfL973#zp?MTue!INXRoKeXN`A_??oUwa5h*WygIxC{HzME5045r3m-^a9%&Hi z67eLSO{@{#9gYru2`u#w_PzGa^8WA!Jb!w+c^vw3eWRzPw}Y>Rzja_m@LA|;xOrq* z5+Au32_@c1d>^4BeO9WE=iQfI5t{%Y?_Sp4Zy5D`oUDaiBHgJv6b384)Q~X^5{|3Xs_+W{U z7G9b7GqOFULCUdIYijkB(aEKgy(yhjFQ+w2+nzQqby!N7q^XJHLpMWx!*Xa(aAjbZ z|E{l@e$1WdZmh@a)%0DSIK7!WsC`l+>c7t4?hT%*zU9GniBRH$NP5Jb_*deY$jqc| z$xBktr_M+@pRy)3I^}Xo>*OQJ?@||~i|G^6m!|hlTb8;urAN~A#Pi`kVQ2VC_)fTL zcyYK>aDO1lS6_eUe(OHw9_KFUy5LTCA9t5^4RAJ4hboHFP9vQs-D#eE{v#nncxPgh z#CC~yBON14B7GvYlknu7sln6@sZCQ(rwmN3mo^|BPyL>{I=y*Di%d&qpNzNZm(wk2 z)|8q_ha!C=R78oG6E8*r5g$17zCb7MJI?_R@80FoowHr1-2GjToYmEp%4KDdnxV1U zO_$a4Ffb?hF5EJ_KD0Y5MQo9C5pUwwNHAGUO-XB%@=wZ+)aI!#(uSt%>EAPi^w}Bx zvn*LlvfbH#X1&hLN#B>=DScwvqLeL3gCcj58YX2Vbxmp#85l{6lt^?2F9cTm&-miK zb3M|wC|l))a+cCiU7&8#rn?&GzkL1tFGJyQuh5ZDvC!Ly zC22v@z$7H{Ir1jyM9Ryw&1u=G)|ASr&eS<+RnqHcL^9rFw9nu(H|50Tw#{vv(=zK; zW_)_-^kV6|)7Gc7Nis&#k_<^|QpL#2!~x;Dq4FVfuz#>Zu(-dgPw;j2F84fkUvaGk z^YT?UyH;x_)PagYj+chYUbR45=e*?Z|Xc(`;Pek4J-{z3HbemV6=*PHP3#}O7~e^*ZOGw=G)A>4rQ~SovJA_6vszcRQWG&p1k`9f*oH<9~boz_Ucm-1&S zl9H1=Hl=B5)6`2~?Tk$Aka{?^XWHD1tc=&0F`3rP&RHqh4|2ZciaG!0JkM2g*sROh zp6uS4-_stZ*du!rq0sN(?cmbjm|$BFG3$Jfyi>d;-)8@Zz=q(uARQP7VwCoj(C2~Z zspjsjU)Ia%zxAQ6iY{H-s7=!vD^um`N``Vp>*}tmfAJLahJ7Rbf`4K#9GV$g1tNW2 z_|L?JiE9#lTW6cPR&W#l~O*nM_R+wi78`J8mAsf`<*^1{cy(Fth}t=neL2D znWwYkb0*}j&ApvFF?T@Duk6}cm9mBGX<5k`v8j=yjfpwI>wzx*_x@u6S74H#1hahK z)7SIBd&T!FP(4^X_%Xx;NBakRd3}MqhP%L%q(9YD^gVhby`AfXJI1X!i=6$Pgw{z- z0x_~iJLTHzneI#QzVJ==NBnyOodTDF1A{Aq|AfWx%Wz@nMtF4C61tTrMy@6IOG!wc zp3*jrO)HjaP0mf~n9?|{c>2wZKQpIg8?sJjw#y(gMr7sYG|b(Umz-BWuWIg*9ADO@ ztP|O>ndj4or4cFnlGcXz1djOL`*M9V0wsb){?%Z_&Uoi|UVD9>0p9-p#erMFwV?~4 zI)QrL`+7(BbN2~-i?@S*N#Eg_;~C@L>uT!ir|kr>T~S*M?xUyX)$Ti2y87t<_y+ki z{BQlE{G{LGJMAA8$PX+J<%csupMxU61*`lj#p~jZLStMo4GnUk2ue`GF<)jJkLWf z<9+YD39??Q@0s_wceF3cza)qUZGj%XFTRGpm%h*bl7Y^_ZJ{P%C9!lQFKJ)Ol9c0# zc=$m0U}D{*O{qv)RGOYPE&WwSjf^_!|EAZ@5HqV}8*^OQAG052|H@IbmuB_JoSbpbNiG|S3M~d1_^{`*r&%ixHB+gH=edM10ed2_w> zy|ui3y$!w7z1zJbJxBFHy3sAT%Xun!o_MBtP;V=L1K()xP|q26DRqjpN0Q}iWr1=| z8KC932D|IJz3$q&F+W_Sv#`zti@ULvmF3Ks{w>CW^Bl~keQa{&U~CcC`F5O2~Q3#4E7Fo@>TYn^*r^) z`4arWfEbt*sODehyXf8Q`3bh)o*dn!kJS(By*&jUx1Qpz=VshKcRl@%r-Nq^$mF|y zv;ALu-8~W4zgk(jk(960R! z?H%J@>7M85n-Y1@)-qv6ZxA#5sHS${k=UV8^_FVE-_Bi$8?n2iU_h$D* zeU8WA?(WWVcLuq=pB|%U=#YL>f9P51yY8>-8R`x=$Eu&ydCrc`^UiLrKU@=?v^LG@ z*N!o^x)*Wp*ub*K$8}tCig%=Uv(C95xPH5J_jkR4yU_VlyRH7K9G1r`leJCG^{)G##=Zg{;_d47dV}74 zPj|hq-d*3Tr?~!h#kfW}4{E4#M2S|5Yx(Lp<)#8lrxn7P=lta|y8Q0t-kbhQfq4P5 ze|O;D!1>_haKA`q0$W8EZ1% zWX;V=&!p4GrWK?SsST2m$gafmp;YfQJyBQnSiOwLpwywAos|=G4+O)EVup3%1hQHcin6yKv`m=Kxo87Y|TsxO=<%s;=qZ-L$sK z6{nZ?aGomqO4l)MhuT|NA>Re}w%OImebWQ``Jf&c>YL+fpm))~=!4uF-80=w-0SqN zdP8@j>!Ax%&&%7S({d&Gi*!gNg$2SYk&;(vGqrl^KhBVQowuRygMXUuqpv|AIZ)MK zEszpQ3g?A~B$i3+o47mDGqNM;MM@-PXo^31MRGItf<^=OIm1)+sa8Lgkhk&@Ad=wT9AFE|L!_+q8f-Pivqp(jGe#ooif++y!of zyNi4<7)=iR8xHc zh=rBzzubSi=XzRtwz`X4X6FcXjMPfFA+{7B2ut|l+(@ngKUkbBpO6p8J=IapdG0ED zBTu~NvNzw?%-_dv@;31e4wMSAf!D!Kp{bz{;Z5OdiO(auB5fj`2$lE(ybnk=rJP9f zr~R8gG5uG1h19Mow&W{G!xQ%;<|J;6%#5(1bYCk^Ea0=}v^`2AnU`eIE41P|uoKw( zLZ)0#U8H@}eyd;ApXxw)vr-kTVpMt~|DhDfTjc|)Sy?A9l8TE_A|bw)PAG9oro2Px ztZq_&YfoJ{uAc5_ceXZA`RpX!1N0;v(R=CnZnMkcDsuI3Lh2{2$SrsV`mP1{gd-py z~QuN*FmT)X`)3+ z)sDHgxXS=0)Iv}4toBv*MS0e`r@GI0eE@F{`cC@}`m6bk{?UP?z|-LE5F5%0;lY)m zw8T1*_K_P&k5ihajZ6QWk(fR+&6m6>QX~8$TsG7>cs8Vk{teFz@qV)>*&XHds_o^9 z!Vzu-m&py|2582EuIq|JnUECy1kp_xWrP}f%d9Peo zsi2%ux=4?On|vZyi#PI_{5la5KS-5iQrW7OQAN!TVxh5fvh$<5K$)W{&hgGw&c&{m z?%l4vu2i?t-PhGYTd0;-gHGDr&Exew3Z4zm4Nnb@^AGUmdMN#dYn;|cJ)r!Mf6LMG zbmfjxPc9>uRAl9-+*uqau94CNiFrdGX6m!!xk|i+-^#7wrz^S6C9Z`a50&*Ky03UT zdi#3~?n3RH)8iiLzT*C^Kh!UH$^tGQtDo|0@|E$M15rU!Ff*7H4kWHmY!``1E}m99 zBQJej>e-YMNmTe=@I=7l&-ESiy#?d`&NovZ=q#mnSL(>JFr2ADRU|)CpQ%sOB?=}} z@x??OwUc?zTg3&^Z1JiDiyire+;2Xf?;zv|(P9VLCf$&eltTHD^h}&2?BZ*&o!E0+ zU9LZ$Av71OOLqCR@=Y0_+SR4XYqb}6cgmmC#ZJ~a)Ma#c)yuk0IbXXryQ*kylmQB? zbkugZKX~f;Jb_k$i-F?)V!jgkYgfQoUVW^T0%JB$WchPKT@e$O^E-ux;sH4y8!rkAdgLt2I%k98#^Ze%YSqe?L6+X zyY@MogT47K%w1ony^G{3(Q()kG0K6`O#6$A{oe@IuE{WP@WH-jf_oDfCHp2(y~4$u(me zG3A-QOigAiXA~Yt6{P-BE$M_bUTiI72`vRP*ObG#x!hQ8A3sVsB{h=ADch8x%09Kb zIzgMGr7KI72I?_qXXkU*2shy#?REgxI#}JTRFLLKtK|n;HTO8Zp-1uV@+NzN`V2kb zx}inOKcy3*LoAYW#r@nbb|>?c8P05F$8p_+wc;HxYjJEzb|`(AvQWjyYh((wof*d^ z2&JS6@-AmNeUy8ji*`MCZ`W|`oN`ebt}N7?N(p(AGEYrZH>fVPtVRJuNOmr9TRe-s zJABprS3(aH$3{|tYE&Wv1m860R0y;qbrCAok_2uZc~#;KUtM&!1or*i6sB8 zutL}_nE54OO;+F=^OXcau<~2^8A4@ovGiE!r_54YXxp8*^QyCimZF)o1J3Qv+5kV7 zIZaNh`cru;&ygOB1!6I2loE7WTwC-sZ?xyT-pl#SIl}p;@=~<&ow#G1k3S%$@C37l zwv%_s-_$!MgRdgwvOa1k^%wP=%qR9y1o@0OMK-0ob7h2dsg!)fSytcaLX=|QY-Obp z62`yerb?WAP7DaBuv+{ot&}CDhh}oguIH{xfPIt$8hnwrOei|BcH*SSAK^#ATcsKlz;JM*&6gxIzq=$r|=v2Y;+f%?C1>BP%q0vb0^Cb z+a%~4)C|4{e}MnC55@l?Ux4}DMm!^q(_Oi)LSybDm&e!U2k|BN@4`1Bo}0p*=QjwQ zh37&ufe`Mr1}srk=ZWV*+{$OG&`+YapjGYqa-VRl(F(Nd6YCy$`x0L@j|8; zqf}JiIVZWUxN14~19#zHke^U~5_^bkz|^8kFfs$v9jG;=otQ$lr>*QR_CECwQJ+Lf z2Cs*2B94<9aftXpePga4X$?oR76u8l&xVE%q!6_=AfAH~gD?8+_%xpMkH?M1QBB*4w+syE;1` zyL`@*&VQWml-t4rrZv@sd_}y&Yhi1#V^|W_3;l()bew~WU=nI*nPa+cT42^Ji5ASt zTbo)p*fzlJ9hb2wxD7u|e8KPG(Gr^pYK#Y#{v0gl!YpNWgar9znf#GIo)&=D$&nom!pYmh&PAijZELYATG z(XZ&9(inNPM!7gwk~UXur4|7uBD#ipx_cXWdh2%p#twD+ z-DdY|w*>g=F6W<`Tdl7)QCq5Ym4VV3{sw&(e~ax!=R2x7td2qGKD0ZUhIX=3@BsKA zT;F!cnqm52tYmZ>vrLUmB~AU!kmWvf)jkk~(F@ovG|_P!TSPP@UX$Z#o|(?JVe4|e z1x^TYeVE=%4c5y|6(}%f2PH`QsDzc_N>ddBPGCsBC%uyGYD62NMX8ekr)nrp7S4+~ z!Xtnp+r%CsCC-;R%NM1i;$PAN={-PRhvF4K^F7(^OcVMI^PQc;ET+@R$K+xvlb*}W zqHmHt@Gu^QKgQ?aPl&HXdz`^EbOV~^$h7+%9q?1+O!7Bb0%U{}l7VZImv`g>t$)Ok63L+4j_EqBxjw#Nj|b+Sj2k zQQD3n5S$5*MG}xd5CarzUSJFx${1c4orbl>A*OrQcqktk=jeew#x3@3$Y;lMw3S15 ze8khpZd5Lv$2R09aal|SdH^G`Hm)ll%~upmqAqQdpDDGJ$La^5JmRD#;zr3Kzf#Ak zN7cIWKQbns7Zkp|P)!O-HKcOlP~oMNtfa^r+xqei`_&E>{A>Q&?Sy5_L1;%=q)rK8V@gnkJ((N&W6N<%Z5#c8^!|TM>A~s28}{Q z`#$V8PB@l3`l1rj*)|&r+N01X_$+b^^_$*F{Xlb(uUzY$kRS zCx`)l4YPn;M_!;>P*IePTuc6-G-3l7Hv`d_m_d}n=VHUqy(r|E;kb^jMrWgy9et5? zaAPEBZ|#_bttRFWz3^Bp1B<~ZY${%w5Q!#4Z8AvrVM%5>)rCwUUXn2RihM`zAX|`y zYBb;p4+CuU64=c4kAo+#~Weg?L%ywrLOfD{N4T#ZG)ruEqp)Tg-oLV;$pe! z>;|?47tQ}EV&YS&lRR7bto)Gf3!>l=*Gr=TQ;(8fi!#5RJIPGpw*i?w;AMhl%j4e*{)MctRd5r2#Ri?73gH%m&D$xV)fFB}86Ay_a zL>&6gaScsE52Me}7WT4mO{fpt%s$ld1?x^6pd{iWo{D9HxUG(Ok;C@GXnDLm`I!Dr z-yoL}afC_?Ckly+RCDSWxrjJUJO%u-1y11O$g|Wpx*oHiJ0SeUA7!tz*SO2VdnrNu zF7;B<)jQf(=Um|5ws$6|SLNN}JTW466mvzNcwU^vAK=2wDDoX~A7tT@1di9i5*+R9 zvmFt~ANC3MWsY$Uuf3Z6rh`BhK=o`Dz=$3{7~VH_)Wg54%arSkK`J{ckViS zhTYDd;9}Vq>}Ea544+U5{KrtRTLUI(`Z-f!ol@_QlA2yUng6_3ROJ12!E! z=6L96Wbc7YLu$Z1p$gU$mRT0k%0fj*LwhgBYxGadkL|?@9Hrq$PG{l3W<1lKWBA=-MCuEa)FxRG)A`N(AfctWQI1!tDp~RysV={Z z-NY|XXcXX3KCBisPC9`gq? znAt|3r4Cbdss2<0DwZ5Vb|+_(Rfy4eSF8Y?ftA5Ca18UIyDX6P}bK-usV`v-I(ZpU{JEXfly@PF{q_)KC5$xt?`J}F|dy$~Vb>&P9) zZ%oGfQ03@5v_@7WQ^^<9Dz?3_PwFpER@x|MR8(uLnUn$Y2stQS0Sae_f{Ts#-U21G z;O;Ujs7w+g|EA87TZxW@6`zE$_Ga)zcs4u@+5wleFG1aoJN5ul0h#QG0^_>P-WP6a zYis$#{J@$A<-n7WX^vzpgy*A85FBa?ZL!xvzk)m5;8<+$3h#!Fz)$R}Fo>81m|9C( zpkFZ;*h_qCVVPJ>goTO1Kp`Sj7Mh4X#ZlrdDI|^*MsokK)tDvBZMFsbk(=srCW?&0`2V0D0*mI#hwrtxDxC8Rm zk?yz)nA%@h4nCPYMIIw-kZHtg;saTqc!k$P3E0UCnnGx=`U1EqJT&t zEp$n4o!DGnq3!@aYY=e8oyrz@jC5FPBn}d0i=;S$AI%=*`f*3u+0-WdEdGM50bGb6 zu@LNI=y2p1v;}$yuZ6xt2arpS=Z}2kq|>KYSUvkK))PqBq4;8|YN}3DcE%zzkt|_B*$c zza)GSRtW-Fztgyu{3M|wzfWNJCtL+)INh86%9^+pf=}4TpW|wAJ$Rl!A?y%N3p5|# zDzk-Pj*37Ina*DW?5@0ka#y)T2BYdwL#RDeM`{vvnSMiGp@QUbDw&!^U84hZUwSMx zi#Q5&&kd>r4 zt_xV=c)%4vIbJx(r?S(z{oHD%ELj29NDsp^Ch`E$72kn%cJOeaZ56;4Biss_hDeT) z=os`5M}7NT#{;|*aTafk-f@s{7pM?UK?d35?M;Dt|AkzF{NvHNdPaZex(MTdJJd?hz??K? zgFq8irQ_)VbUMA1VVH4DS-?VO11?{eoxz@G2e1{`j;xh=#?E8*Q{9QHL@a@m3#kv} zbwb9o&^>5zv@v=OYl^KxAAmK~1U*T}jVT ztAzA-v_dzd@6mX>0()$?ZC=YiHV7VT&v&p6#(n}hgnYMObQDJq;X5gWK25)-2UG8; zt5k8aIKCCTK{%-r^k>$?HU_LXojyRWB0iGuDIYa~-pdp)ub5^`fStlK!W(Iz9G1F? zal#RPCl}8UR4lQKSWDI=t5MsyD1I4toomfAyviM922qX4SyTxMxHe2{_AQso4Fs7x zPDmGK2#JCT%=T{J+;rnneh~M98_2$5?$HOSALK>i5|K?*BKi|Ah}QTSd>P0RLopcZ zLm=c)z^hi%F#y+CawB<(oK5t`CO9<5JXAyrv4-efyd^n-I!sK!V~EnEO1EKixDjF- z`G@kC{9Wm#)=}bBNpUK9N|D%7$QFNzJB6OyGkO)-7OeLs*k+*rV;#Fu&QWB~fa}^m zTlZNd>s;$u>wBx$^1(LTy3XpeHHB6o$xt=RLTj}3y=@enYR4R((H)L!fbkEr&4()5 z7F*BTu0w|q%ARSjf&}4t$O!uztSzBX>lowkS0=63n^DvD%b=!KZd_4){-@a zmEBSff0td)vdndQC{5F~=)24|CP0(aKDvnBO^ehaY6>M&L8>|Vh|I!^aGlsiwILtl zeoV&pW7qJ1h-QQe`0Z~hgZvvPnKJZW)G=x+{e`_F<*7~83u=~{ptP3Ds#U@MHm#U^ zS3Dwh2Rb~5y-M!IH{%q#44vsXZC?QJeF=QjcGX7O`q`%0XlpAgY+Y+PXPIn%Vti-( zWZq{RX^SzpGkr3hHLbVUY(3!4$Z}*Nw8;9|HXZtE`(eIl63jPk+u_eh6}T=m4!Q_e zvhT#ZQ91Mr`U`{5%P1$_+~I`J0@kn;DG#vgl%tE|l4C7e7F&-UN7p-Gdp-MdoB?+{ zo;pJ(P_3!1^c;2`SC2iyQtVf50@slF$z)Qk0IRQsHN{tuRjDxDm#xpu=1_V$bp`NF zo}|dl)IxB+;dC)-KYfIKAyk*Dil4<<5-GKjN=r-Rk#bq7CCDQVAx8{KsxX#IXIHSZ z*egI^q_DXF7c;n$z<;U7<4i2ooqSE6z&~M634vpYk7@!RssG^cAjT3a%MO7xRlLs-Q zqr1Ht7|9_}C2MChYp!f@Tl!nBSuK|Nzytej`e|HltY#8Twasr$C5?wnLyS#K6)drq zsn#;K^42Amd$x4jYn#u~+BD77)LI)#gG|s|=!Na0tsCM)$Kv2BnQZ0*y@`y$ssc{b z1!(0D0O4HFOZY6Z0GW=I0)E9{dknl4x&wVe5*&@t19%C51N-nhfc^ENNr2y5nU0K$ z5ty;mYrqD#lOjp!+b#e^s64jRSkTdWFK(98U`g6RnKzu5` z2Wq3O+*KMa<_Uj^JEcBSb*Yl{x7=J_ERN=Lxl&w1fJ^5Aip}MX!d$7j;**{Tv8<17 zMa?E^6FTt}`1=2{JoN{$hS*JP0G#m#U7EZPSm{+ZR}8S<=pgxlY)9uZ_qh3zOMUE& z0X52J&MsO{HQPyPX6>wtbavIQDLuuG+zuvznn0!ECG2;R0d^zY4RFevrnjc0=4?x6 zt8VRU)yzE%D~#ohe;DV1_YC7S!#+dUFv?KRpc+q_`FfbwA@bOxFPw}H#U z7O0PHA0*lyf~Hz|t2H1l5E}BZ?8f!I*a; zE0J5s2-$)n$!f$r-~=28IV~Mqj%GOWu*TFYZXfXJ{{pU2GvK-}5t|6P{7-SNxL2$t zZI>@AztzvmN@)$y+#3~2o+)ku3{jQdD65p75+oeut1u#PFBP&LS&NzpG(F#tRm)e)6sSD>m(5__1=R6ec�F zv_W~a6m}U~?{LB2p+~lJ5DE>1oVJfpKd3W^oh(}i$P2xIUP5uUAGX6F>->NQL;Y;y zY;iUi*6mwCMmR_Qfse$}a12+mijLQgmsm31AKyUEqeg+s#B=f(5g?9|gUEbx1-XN$ zj4#HL9Y4`TbU(gYzlwZW{)Q06uj5AwYXL)_=G^Aq?Od)hY9(i! z3w0J#cT2ma1o@#dOTHITCP5_-6SkKz_LJgru@N|1IWTm~7eIk4w zmLb7fXq^C!0CQc+y3_L1(%RC*It1E}L?I}25E@{6XN$Gou&lB~nHQQnn19=Hky&UJ z{5#nn?~QTTTa0o1fh5|?IsQg>2#FY+e26QEWf>=(Kct$<#{ zRuRR?hx7`z3GgYZvG@4yJi;B|y0ItO&7fMO%Hy?t?tJ}}YXZoP2VHmcL+*RdrOGtv zlPt=G(oHdz`x9i;H*^+tipVG4Foo<#whq;RxJ&D78xCf+0(W{g{(x9bKLKNzgO$O0 zkbrBj9ryv#33a*Z0rB-#KC29pdx;@ohZ3u;bd7V(&^$_OX$;?-9*pz$%?JuFgf2r< z;Fr)wTU%R6+XbjTbPf4!|ACZ-UGPcdHhdmZZMoL!rcQ=c2_F*5#s8DwN{AQ}OoKoJ zL7ugYWu2v@xsfH>ddW5q%-K`ZEi)(@fn)P*lI<8&3Hkxz>b})s>1Nqz!7OtvFU?;- z7XM+5x0$R1tX>-fO@kbe4(G!qpz}7>+`;5G8I0#m@2nqz#u$rs!oL&6fCKOX<3P0D zv8%{eq(52*??gpYUCGrrhpnWHbOBIQ1i2A7nqJ_qwFgzi9%yT<4}O(gMb#w_({*@^ zU(AhQRx%}lYR>0iVXLyrbzlEi9|5YXO+A#iy#Cy|LHS2{p%y4rB@?%Vz5u+O|CD$X z`H-qh-)98!DP9^Q$v(_wmZtYnO^Bn|9*hT(h!d63evT4Y9da^TNmwM`)L5mHJX|TO zj8#U7S;9vNmcM8xU8%0suDQ;uDk~;4NAaWfIJg}`A?=ZPxEeeL{)qHKHo~=`wa8OP zHTzO~CThUCqigJSp?FJ2W7~uuh99PCrlE$F@jnvo8X6mi8~YlsnyQ(2hf z+L~JrSgx9r45ozBCd{(Kdcs=Ka^GSy9W~D~7n&FoYwBlGO#RGhmM1p5ZI~6ebh2)- zrP}I4ZQ)8t4t&d&YBn2YC(MXHWDHp@0^YmTeh4_%NATN(8S7`?3jc(5!S&#E_6;bB z_I2DxRYwWOa;z?h2Os&C?1ro86LhrwuAKyKeOvo`G#ML9)FoR|yV&CF8YZ7QM^|LZ zf@;|Zp_8;t{pvj7{9D`Pg1o3d$NS6OT8mbDY8J&LR_0y<#f8(SxeDwOrXCy5^rUJ5 zZ2OA$1J3>miX$O%2{9F2JrbDNw|6(=rDt19(XZdKBFldFXie;MV zaDp0FB0k#i*0kMt#9%k{OE_rY6CTG8iC=DvGiR9lSO!@3S}c})%YJK-4TGA(`@#8Y z!|$P11!3EhUTB)3rG>4!`istR$Ecum!0;=%f_ zFaA&lYj3paD&{N!YTzdCF;A>(kaM1MvRYR{_~)F+GA--ORV{VkMxY|~$v(uf8)NYu_-@B6 zxG7X%i?S>=S2NoTHxiQK#rPWWALF+egXWXAE66o84*iTekx>w0-f!$5zdq(j?11=J z3AN%6#odn!#Kp(0iR&GYC8QgxnK84?w8Zq=THkujmT4<)n*i6ck3>(PS@t{|X=LLv zqZdYfjG7TWF>XRa6T=DfM@T}9_H_F&qz^<}F>^^{E0fU@Yik9)f+kr%S}s_|Sa;Y4 z!KL6D@IbgZ^bqO~jR%#@tCru^X0XHI!-|MGWPP#$aRIM^{fU0WP~1XwW;=n7mEBrM z`%^vV>Z&vD^?HH(jw{zy$~jzF4=U{aM1e2j=L=Tu8~cDwVr8}qvyglU{ALMn0lexr zSa&RJe+HLx80ewwergLo4EN#h=vLfXsf6qlN{c=@MJwlQDK`=Osx|al-XFfF0Xa~? zTg_EgPUT;45_ONj(am-@a?&1$41m+E|AGuT0C4xuXg->Yj>7&WCK3~IpQA3a&u)N^ zTbBVo6f)K~95*~LTsGD=#+ee$!);$3+i{YpPO#`IBw*=b$cURBb2RQs!lAeyai!zN z#@>#360i=0%|2wj3+_Ih+A3U z_ISM>M0dEWfL@VF+EDq2)Jf_u?%;!bN8u0QPp&U(XWBEP*i!T!vIg-UyNH%^90HZn zBSbkzO~-tCDm$1SPhO^qQ;GC^?uIm0&5$JFG{Ah+`AM6ogq)>3TRa!MHv%<6C4*kQ zyS!Sku-obC#AIx!V;UNRJwlh+cfxz12-FX5XkUYU#8+eA@IQzO_;0KM@OY*peULeT zr=PaoG&@W^%)J4&%r|tcGwO)=~=XITv9&c*|#B(urf-OL#88jl%fCU_DO;#S2Li@6g!HNJYnK7(W&Zr*2p zXg+GO0c}#-xGR2R{88gs(>=>fXd%)Oxd9mPSld*%5E)`m09jL}X0vle52*j$bryMs z=s{idnB9|I1=?<tdQw1Gfty#P_OW* z_!&By{zZ?Zx3dVVvT6JlsVd03C8fdg5#_maqI;rin?A@_$9vz`E;u>S9?tN-aT=uq z{6yA6{S7L0<;j86R-j;P_&?}5#|Otk$4&e!F(0prdhG8V8K}wr8brrkcpel4>h`xa z$KtSVw8ofu^L|S&+iPSzx)RR<6{1o^NvsW$ZYyS9VLEPZVM;al)bbPG8ev#S<0JeN-p?J71ZBP2Lvw*{p?h+!^2-zNL%~xTIlgXz&|ZwukdTxk?b&bC6~)u$US6v;sRmAwgTtBjy=hK*)ay~?O0_$;K)YqAye(u07Ejt zZ4nL1v3a35cne?|xA3W;%9=rzB``;G_&C%DVj&%*td>iQL&aUfD83``h-5Hgr^LJ5A?7KY&!jV5m;o%r-sgIW;IR)m z3ph<*v~liX`b+nA=U%P7I@I;fU)j%kH~Pi}j)m}0E&p@(MXkErQXB!ixbET@)ul+n z8E!SVlE2DlG5slwn2zrPodFhmX?q`ZCRQ150D5t5VK=d<=yz-rmSaBzUqgJzRrmx_ z9Xa4=hBYVlQlrV6RDcKoM{l`(7h;1-nR(+EbF8JYWstdrHQTn_cG&XMG7Pw?7tHl6 ziuIVaho!tV4T?tNhjo@ zvaK?-7%quekT!6%&1Ph5xTlzlFm zhUbz63{D#;D``Ph|@SEj1qk;iTzQtl;GGX_kQv7>2=@tWbPp^3Qzlxaup{gKh= zc9N$c{9nRMyugp*8qtXQ!Znprl>Pxc-J&qic;oSwJ73chkWuF7&3 z`KQ`Xy{~ML2TMahA5oEfLdlg{NfLM-pq%94YjA7%wR}gZfihnCTYIHv`6OSAZ$OX@ zMFl#0_qw{cEP9mJ?CT9izm0dLp6Kka#!Gv|YC>9S}$P;uBpz2aMQy{Sc{ zliURAlRMZ<{+&Ed{pqak9UT4?x(c4f9OZ51`R;k@nE;-NEAFYP`?L)}OVRQiRZ-r9 z=ZrJ7c<{u)3-upmz7nNXR3}Og08dQ;?nWd2v@}i~>59_J_=foNy*vHeL+yfzzTxga zwO?8d*KqG{|KI*hPjlA-ZI0Seek%PVb(2EU65%iAE_sG%jyK0nVl27<>kWFo#-eW= z=g|PZi+F+Ub(}z>(I22gvjf1Pl8$6YMaLFUEnSZ+u-|tScdT^mz`9Zl!-5{9mSlhQ z1#$z`HBP z#_{EZFLDiSpsTZ|Rj5>WMZgMrRtI{MyrSo(r>%a{RTFfj#Y_D_^?Z}~R5&h7lB;U- zUAOco*Klna=q!m*n~SITnxGS79oLmRA{o?OE~{SNTg?agV*N?MM!{BrG~aQ3f%CVk zx2MS8A|QM2xk73mHAbxjdiC!s-PCM(H@qB#VaOuU|sck?YegT&X4^KFLt)?InQ~X&-;xiKw#jxwwoX&wy!}V>^1BSY$Md# z76YBMBZ6w~H7d=18|pX2dgv3#wDrisPhh{dwlrHGfM~#q$AAiRt<6hFzHK{5oHg67 zu!Y-RhM%;T+MS2*hQ5XDg|t}Tw7k3^VLlz~Cyk)Kue3OBA)Whto|Oe=!9i0!7lI0{uzPI#*7}IeAXEnJvt`)!!=hkcAY{uCtE-TokZX`!s0Pf^ zXCXeKG^h!X*tNjX2nbw1x(!U%9umpq8j6|rf%%!Wo?9sJ=K8Zr86N==w1jb%aRIPW z7)lu_nz)DXi(rAjfIWmw#9t<(X^)sAObpFH8>hEZkOX(^J}d_Vre0Vwp_W$2a09FZ zpLvb-6V&^$+yI`MhvHC}1q=$alkQHAyKzdOUQ7719laLfO>=4 zj8xl=!tTL?5ze5q>j;-YYry^80{#v*2rY(tA@(62*j<5nKw@nD5L)C*FpDjMKDSv7 zF~S^?TXA-{Q9K=LdaBqFfZpKTniFWN*v{A}La z)Il!7kJw*DOv4{R|F!i4H;gu$dN6r7ykPx8+WZ$5A1n&zh0dFrzsFK#z1(&IsM$g7 z2k46{6h3o5JBpD*7UE|jQ{X``2l!>=9Mox)4s{FVY`*|H+wz^|cgP{=I4lM}Y?p5j z=I2;F&KgI=jo@#9Y#Iso0J9C7MbgmiSt~fcoQ2@5t>jvBra)r51<=z&v>@6}%1>ZY z2q%q`;>a+f9bSYvgVA7*6S(AI@C>vw?CHJqT1qXclkf#k!Q4gf!p_9^lZ7-n&6^rY z?`QS`h7`#v;hK4`c#-UDEGR3MOW_;&BDMwX2Vf}hq$$cA8j5lW^eVDRW^xrtjDLfz zMh77?5qA)K>@Og*z{Dfo&fSh{Ux7S|MB1m>#~~&VU+pGgm*FAyljxVAKMsfgu)PFX zYCDZw1M<^81aHh=c52vtSQO-f%>>Aj71;=FQ(;ap8RU(1oQ=X}!0IOGll}=N#Z23N z=rPzYyK=iEST76*4Y5T-opToBsvL!kHW|>m3Tjp;cNk%nh)hX zAXJ~yr|J8cc^o!x8#j`@i49|a14R9M?rs*5&Y;bq*3l#k6eELroic;cO8H3HMII!k zz`f_P&83ArBagx-j1MeRptp?mzI!?hseJZ^=yjJ652-U4PWLy&REc5rKZ zZnqhMMyL^o5kz8kYa^_nOi>?EzL7i$5^Nn}-1al%Gi)}JgDuBHK=vV$;6!{t zwFe}{Hi`#*kVRrGrQe`xDf{VZxdHt< z`T_n3X&qrNx(+dj*nu*kl=cuiFG!}fE3^`J0=fZe4W?f*n}2P_AO>hVYz64ebL{^H z_x5ub0VV^v4W15dhkk?CBi!IGVI12KTOI5JA`0nfw*k-@yWroD?r0Wvf^e0^7Y#@r zO5O?{u>WHC(qGfx)12s9<{My;U{m4<^Kq9kmPj-*3R#RfPLdJFh(Cxj{2k)&l+!d7 z?J#W<{T~j77XwbkAGEzx6QhHN5%Tyh>@Yw>kFpKyYNjjQiW*EyrMZ*4z&xxH%TaB!d`|(;?@vmVpn6_a7#d+6HcfCNhD|d1&{__h5tG~OmBh94tP_`5OaBcWrVl>&0%qGvm!7!h&Kad58F8d_Z6eb8A zfLj2FyEAwmddhyg{UquVIumsWzRq?gJjL!Ns9=+Ak&t-s9gl^N!I!}s0kM#Xvcz5? zco59^aI`Dv-=#xO*v+tChD<`%fJ{z;{V@~^c?Ud8{;(FiVfz=D?I6u#WW|YAO7T*v zaF8$KHu0tbm08LDz(sJAxlN3(q+bLDK}eh?6yfgU`pIbO9LhqHE#8^_vRD_` z3)vSrJWeVni}Q>9iusTc!Dwf;GOsZ20V9Hmv6p!RI1#kmcK%;{fP!-(Sw9&@3Y~a^ z{0HSBIhiy;!jt+b6EqP$jn+cRC$1yblbfk?X=f;x@IeG$LNBfqQ-+aXM=^FNBBp`x z4{-+ZI58d@iXtJ`W0v4#XeLsQnvbqS|AtDigF`8Bh23uCHPE-J05$DFdlue}a*NVH zU?Z<09>8D0KHE=V;dm=t7A{U?{(V57$R-g}I&fxHvv-n{w9yds{;6wm=c~tmI^snRtu=k`1 zj`42^CS?f@1YRMN!|3Dh<$@7EZ3}BH^DLu~GsQFTjIyk0@6V50!XOJ`oBJ*2;4VL1}^Ay5H#0Mb~* zj$qCMcfK&nQ_>ZBA9DvafRawv(Ld8=6a#4NvKkhkd2(=mXX?Kzr63fV;qzZgH z$Vv6kztUy`+R#M6Q13Bf*k%DuHYKqWp(GB90@+LnR1R~DcHYlF!E6+~5iaK$g~=jU zwveV3JydYyYHko62i#$1mMiy|s6yz?dCwl?>Nvr4D%B3;LR5@&b_T11wu8Kac$Zj0 z$Roy(N=e^9V(=;XGJb(Q4mJ#PgW+uFfK&*|2CxryIrh1T#mH;e+4w0Uo!CH)V4mk( z;HB^;c{8}loIBhG-hMuY`;|S)JkQ8rG_f){+j$ILH+P7$fos7F=T(5yce5Z>I3d0! z^%ZXxyyK;ErJN<4N#N$e@g{g$_66pj%rDGo`UrhLbseRd=?+XEQw%NZKBt`Zg?5gj zAYUf#AS6;UsS#8bV>6(_!b!)mOk6cdL4nXx=m)6fG#0rKFr5V4T5J>gGS-E7h2ljC zBwZ&T106&GWj63-SO8nb1IiETPl}w*rp>2w1!24%Ru_lPN@o<)k23;(A5h9azb<&D2%oSCke8f_)Ki$rhA3gk(ZGaX+ZJo5?cDL8>ju0ppBl13Xa(%)%xI zBqv)Sb+AgrFi24C!X6|95jDghN+aVMr-IKFv~qXzjL*OY zwUhf;utT^Pu-jt6IRQ`bQ`97WA%)8h$Un)|l2}o_I8@XlDil2s3ncT!zl21dnEjaT z#A;_58TT27xLf!UJQpsOH=BQpcaL?F_7kMG)&j!OM4wGN2X?22oKPm3+)lJ0j*;_d zROT(v&&#A9qO1aj1s!n}VIS!?>N$EDeS$uZ_7||3jI(Vyt7x+Th5nXNM%hgp5IzzR zg$E?r;=ja|q7ULwK9*U+juu~(b;~u9nTmxTt3BVUFZt$ae>#szAG!VJli}E{yd1Dc z;lc`2RIB6)v?M@iAsms46lK!eA{X%)DUYw>FA^RRo#Y<`evil0qvY8X72_5M&o#3O zDP-bF;sh{j}`T0$ci}A zudpk4DS{WG)nc0HglLg)Qs^tZ2MG8O&MQs`@C?l4&k}qWCrWA3brQ2=hEyTdOW(0WFO==WozWi6;=vAhgb5=QiGVs-wYf#vpAFN*WACv+0p{>NfBAJN$d;$ zs*$~fIg7rBeibmzC18)a0*q8uoOkSP%obWMWq>lx5OIIwt^s#!I(0YY39#1W)9Zm< zYbVQs^%V3re(;7xC8BUHk*60d;ohOkKJT5EN0XLpOk)$kjTn2nTb7X1q zWZB=q0pH>1~IZvK7+pvPTZiQVZcpK8LdqxOSd#{dgAKOThSaO^^oM zQUd}w_a@7Qet{mwtmFR9{l>b={Qq8mgEPpx!O!A3@*sjN@sM<%151IEp8|%$DA_Wx zC;Nl|CEF_f>K^DZ=G^7p>}qzdSKd{mNSY--WErwaRg3!v_f0-aLI&fYhIzhX2{f=J z)!siW85cR~K@5K4v`*@)QmQ81`aP%IJymC2eUvMm|8m6224omVvhtcf>(3S$DLrL~+qBSPZU* zU`6g@Sg?+Ai-b;6H;0vuNQXxP7amAlK3+m!oSH%pfp&cljvS+#?&gHW0-vvQa#yCVBf!E)Z@@Lcpv zfZ%QC9tAea$D$VDUGXK!4^gMsOM(~na&IzEGamD-g(M+L=pdXg-Xm+1j!UwoJ&rvt z2i>MzFsi4@R@Jc6v}C_Sv9r?gr`pLQUJdoysfM}#r#vrraI|x*Rr;vW+Kc}0beYj> zVsiarHKUnDq1Bm;u#chLniH}<^$M>*|M%J)%}nw-gqEs}0Um+Y({oIAyH;)k)T7#hk0!e>B0X5;LzPtmog4&)AG9cmTkUjmf) zoU(>l%snb(OH&jUz&GdN_*Jn?{)c=na1z?dHcB7M!sT>%s{D6{^@^QNN~OkSvD*fZ zT93mX|9ND1+IYNoU*+NG@sDSQXQv0xWruRB(~xt%v%lkVhg|s;`R@u3=WVV{svC+p zIZj3frpHwxD{+Bzg>09@26?e`So&QyDmfuI%Qf+ih<`aaI$m>fa=h*|>WOr~Knal0O7toNd8zWKfJC+NHV4ru=N+#mG8H^%3n`-q#+<4={h65*ru zJmZLw4m&`lY%x+UcaC!0C0z*i#WvtEYT}zY{cI&Y1kB8ykcWxC@Z;DNbUNwdpQRjbYpzSND%VNlutyQ=e8wH_>8Boc zU8}sOa#IaDo8;coe-t%N>z#f%J#ykGRyrI|pd8-F9!dU{U3Z>#@ATBFUwOdXz;mhI z;N`1j`I-Ha{UF*Zf06GQuTx&%{ak!4HNBeeenSCd?M0tc>L2c%ZeFfeT|cPr1l2`v zH@O?Tqiy2HvJYmv#s|elgl|lM2YZIoLR0lj!*tMW?*eaasJm`en6b;50J zU~H%dV505w-Adv-hz&nFxjl{X6wMQH5Vf zd`xX&T;wGIS1D35;!x)7?tH;H0r=#&%9r5zeD2oly2E9oDnq#+*aE#={9W~~x7=zx zOd7M+0=zGt_KTm)PwE@$!|*Bc4e)vGqtaaQa`e=wKY3WXepXF8e^9P<`>dJiUFA*C zP(3kfw&!nZglmv8S5@Wa=RVI(;wn&GP$noxRsXr1aEWq(x&P3-^}X*e^)Jv?`N8~c z{7(da40;km2%fFW&>aap6L2eFdGJh~bKsW%ufUj~{(vgKH{Ld$TRpSYXVr-sZr~Ne zcawYaNap73SNY9J=s2LMP5LtrpETDH7w#YZr!gh$MxZgsBj%OyfpM??QCOBv>XqyL zSw9w0>6h&@<#|&XN! z?hV)W1Uv}%9_SjdCBPK$J^<(U)NiYQgx?G8Cf{M737-fbM@^%rnFw;f$kWct*6XOo-b<>!pjLavXfWRWz7XHfem4R<19U;r!K;IP zLJsSV;dc5U{cjP(@cZE}^hZJsA-jX8!zA2TOJGAVa`b-*U}C%?}@E?^D`f z-Bg4sW^wwPinCK9Gm*Q$uAt&&;>)B@ zrO0}Hm1~Bd@sKGd=YHmtDJI#X;A!@v^e?GrlRw0`Merj?QLRxl!}f?;{~dnqz5?%` zTA-u^-&s3Nu9v%)pZiYLe$`Uot=y(s=4S2kPSGqqB^Nu*P(qzro!+Q&T@yTH9+%yB zs{_3bdau{64!9ab^uMjeY5xe=r9y!Tx~;+Cx+Ous2M&SPd+>eSpeqc`)!T&UN5Ud^M5Y>| zq6?zW$C!)`QB~1%qdTL;vAJ;xv51&=v9!2-@r|+Mn3u6HW1FL6BP+tT=w1dc4!9IJ zKk$0c`{41gpzv2wf$R^UJ@b-Avk6_`2%8c}t2%Cab)z=ybto z?%}MZi9cd;V{_tHChbn#9Gw!H6MQwOJWv_3F4*4}rCS?x$8V=^qPMG;)KlbTt=Z*$ z$Mdm@<#bWy>_&87p(*;2NP}TZ%>DQirs0J7iF*^f6CC4fn33O9g!qbGyre>2iVNufeq?Dxi z#K`!^F|Q)Oh1CU*1#i<;>Q;y7^qrCU24?iZ1WmSE*+lJ|@}8R5`gg?xIk!p#4Jmcj zm2M^1^IL15R0UL&RK*oWWUNd%nhMD{nl>0;8N-QAi+U1aiW-i%5qvY;H7rs0K_?6x z@V^i+rCX?zX>WPr)dck=&2FD!&kJg6uZ=!~T9_ZiH^jeDXY}72zzs>$&kNfT_EG;h z{BGo-D8AvD@r?lz#V{bEzC|95JQ-OR!47u`YYq7o>Y?w9&_)bKwnv_c*b~tc)o3_n zxM_G~+#iiGLXGMeN&G)a;VFS>ri|wF?rlf$Rl*G(La%w`xvh*FP z_maxvu||uCn7V zoK~@~;q>A&^=s+_&Gp6E1s3_2ay?RCroKpWiyt;&OvABvBX=4~qn?MSg;s>x>+>TX zh9h;m5M#xF%M@bfPdpY}%Q~ zNr_6QWd`Rg%=5@Olkp+#Me2n#MVe&5`QMWp9c< zsv#aJt&WfUPwV^kZuB1`mPA#*|xhJOiv5;mYa5u6viDPXnV zs(^~%rjSCNP0)Dgx9~NQ>my$nKbRcjd8Ty z-prR-McJQot+V^Hn$n*nKT1T#uaDguvn^H<`ys9;mLB^gfuA}fb6sA9Sypqe(Xxr( zP+M=)Y0>qnJ!h$V%inF*9WC93y_-6CO(TtVwa7}>ireMoMXLPu1%m9I8QNq-qLT@2 zVw=3;MbY0QC&DWub{Jk6PZ{RvABJM}^Ml{}ZSa4scQ*D$)`oqH>@=K=d>)lxj7^ZH z<)vIswNH7OTAP7Ook*r9Y>J;7cRubyoMkL8dYwTS`8w)T^sJbMnD?>AP4dK5$=#{@ z(l2J7$aVu&mOOhT=U{GcepR8a=y}PulKDl}h2sUYau4LcED{!8DWvCNGGC;LllLT1 zP5a`$$9E>mlH*cC(-~>6(-;{Oxp#{HsFc?&Y+Bhev)N{8VXyr_dH;-#H|@8(xAr*< z`7Phui|)GLKD5NKes06%#m}lr%5RsV3azs$Q!TQWrVS)-NW5q&jcqrcj6M-JBW7LH zqwv`gZ2cntT|r64`zB*7Dkdt9U>q>sOK?bgpKHj@%+O`d$of6YoHmt;Pr)Q96KfKS z6NvHAv4t^*VkhFt<8u=Nlc}jw>H9Lj0y*W#m8IrL+ z9h>qw>3QOgglh?niOUi$Cmc>@rz^5ua-Qc7=hfvuF1S|su$Wi0q1eKVEd5k&Q~tbS zW7%EvEAv^ib&)(bD+7|8p76^QZvqm*6l2EwoDKO|#U*9GY921B>L}{w_jvb*5A#;S zhw&?@qs8OwvEN5VR+t8>mp3lE*f!KuSl?fDtKwAoCG*yT)p_(x-;`B}NeP&Qp!n+8 zx2BHxO)=E?JIUhIg4B-WeW}gq?Ci${*utMhq`Zp4=Hk@_zY4At^ydAYeKo@=<*yW4 z%8iukDL+%A((*F0vO990=35n@3iFC4z?eL`q_nuYMt&h>#kfjXMj6&d*${~;mFNZd&XD&9y9K~ zI(>vZ_;Y}<>|59EHbrw)lW4K3y1M*G;f-ur+QpQn)Dy{L2`5rUQcotkrhNzN{6|(u zE+-$FdnoU7K}FGE@jJ6q#m_2I`K@wB>Hb1~&ce*Hj3*fnGIBDlvU+pM^Q8Ik{3C_l z#kk^=#c$0_v%Z8>;%xq2R#f)AY}_1LxFjzyXFAs*_iS!a_PNX#S+Jb0g4xAmWdT*s z>$kSHc3JmM4D=1#ti+G}7=5<-@ml-e1J{g>eq0$pd>E*{s{4YwYnSHNudTmYwX|fU z&?c`a$17tj(>-q>dv>N{t~ocTAhC2|X+hDtf}WxT^Y!wnMd6KBi+)zUuUt_4AipqQ zm3t&RBF876S%@pjDSA~TEy^lRC_Y{C(A;9KFjtjEmRXrci(?Dk=FQ61X7A76Q(SD0 zFD)v|sDM?o7KJq|XpwdF^)Be&KQw-pTvehMS zC8@=Qss?UR1QQWJXDKNul{oS#_DLw63JTD7>IQKP7KG_s@Jm(UAE{ z`J<{Yi>@?;GeoJIDVUH;)Nc`1Xx=@9ntPTGkx9 zgjavJZf5ON)q~QaqQ%9#&4ThvHJF;F8d&AW%Gj!@MgKHcv{o+pV^L3qdzpXP{qn#v zyxF02Rr${H#bx#--%DK0k)>f}mSvC1K9zZyD~iJl{R`ZRmXtg)SC(d$%`CU6cCGu; zWY_wrQ`B>}-){N(;gAv5s^e>f<5$+^ueDlpV)fjWkmaX)e|2o_P`9NoWj5We-&OOy z;$uZ!ML<=_w8==BliU;qou#ljX5xwWTM_f0f)e%S%hjE>?`x80v*frdn#-;yaJ`=Jwwk zn!7S=^xJCd)s3r#qjOed4wnwg2St59m)Uo5+R3eTP1FYe2HPbaEzjHIItp4Zw3<5q z?EKz(rfFN#tmf5CllANBW-acoy;yCoJWzh9G{#(7I=9@S3R*LNk+4DA+}1YPEm(GF z;M368m8VAEuhNfh91*Qx4Qq!Y2X^;8>Rr&4*zUiS(|T`db9;AJZ`Y;{`%ZGt+^(Fq z+Lni{UQ2hh%xUPUPpg+Kj;uXblUVt#;!?HG;-ZGKCS2>rj%__#`hy3J!|5wEqxPfp zl~XJ9!{VW`k@Z1bvkw)>pIod-&N9++*{r4)WL4A=^(TzTjn?2STb1u zx=vrGu7@_dHCwmFx1H`B>PhR%UA}Z^^9snyxRtk8{2C4#99llJKY7{d-khG$?uu@F zw`=#}?tgl!dRFz!?Ur=mJAB&;mNvG!HPtlSY#=wPoAfRB+b(zB>sj6BIdEn0!tlJ| zlfyrTqX*wCXZP(~7S-#}lhpmNyRzFB{9g^7*E&wN|7Z_x%WSi6``&S-+p^cUuW_Jz z`QL-grB_HZe{oO9^am?y@!@H_qq4&>^smG;Q)UA E2g9(@%>V!Z literal 0 HcmV?d00001 diff --git a/templates/ifs_templates/grib1_mlgrib2/gg_sfc.tmpl b/templates/ifs_templates/grib1_mlgrib2/gg_sfc.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..4f8371064cbadc574de319a6c9e6418c55e59124 GIT binary patch literal 26860 zcmbrkg;yJ0)Hh1q^{KnNySux$&{EvB#T}9mf_pp=h}*bDplE?oye`z;-P?QK_q+G| z2X1E(%B-%L({uLz*=FaF-COLuUw5&yTbAgW_%Bfd{?@DesQz}~`~UnI{(rvx-_I^x zx_0lfXwjm@|9j`Y-Q@27{@FQqvH$%)KPTD$?h*b5+*tH~{{1k!(RS19X4%cRTVl5k zT)XV{+8wfUuyeL^xAV7){NF3lF2ybfT=M^W5qAIIRblu4@B06qL;T-o%m4RXDRznf z@7w*sN}R!p4uO^J`rkD!0jr$_Rz2Eon4Q<<-idv-w59eP?0(q&na2qCTKB=O-(221 z|8d^!+~0Ym^H%3@=Z`LPoNqd7T^wEaxJ7vp-cNl5zV^Pf?`*G5cdl!o^H-<0P9L2o zI?s0g&v~?SH|J~@vCBV~QO-|X|8pPYIm7FVPqyEG-rs%d{nGri0xbSr{O))Kxx;SD zT}3W^osBMsU3kuQ&YPTfIv;g*b>8B1-F1oE2G{9MKb^ZfJ#(4h^3bKteT!$CSE$bf zuM-|4J*W8F1wIV)3{3Z5;%D<+=JCzF-eb9Yl3SU_I*&{4>s<#p4{+*zHqvQ<)7Z27 z9ltm|aDMM}%F*W7$8qtQ?4vcOpE^OVGIy=l65kU(X}FU|vbFRlr53}cF*Xu4%T>_kZ99zyjJR?2x!O`>V7iZWxZ~v7u1!o?d z$v7Ezy6w=Gvv|Ej$bk^;x|5@VfV<(BrY?oLUd&lukxo2kjef8*m zBJDuR_N2X;r!e;%pIUFpxrd?Q;bYIIo_ilU^Zf7d<>7R=TTFIzXt+KwDPUs2lE7g; zM$Zg)iMyBQLoeJb(zC_A&|`|H(fya3$dz{8?z+VFn;YbI%RS5ele@oLo7*-wlj|#& z365QlZ#Wg_d%#EM)p7jBq5Qpvcerf(yMM0Re%~T@lW%@F5<|wlixtK6h`t`PFJ^VL zd(83xB4lF3*z+|JYeQ(?RIhlKXm<}cm1~5X;p_+JT940O&fZ%+4!KYEPy;Oeb0$bbVzueh(%{beGZR^tc;o-^)vQvLTLP`1Vw14k3P`R`$glTVONEO)cpI@d`)JG>YAm1@p4HmF+Us{B)1!~iB=2>BU4zVLM%mvxImp4)haVoq60x6hpQPN%7@sN3 z>X&sn_b1OSEjr~l_gnH+Rz!SR96x?(bY1-VgfR(q>;c?3-hkwJ9J{1Xk#?ac*qKrH z0?Bj6^YMZ6&c616y-uZ|7aF2U#8~h#p{|ht(rv%u7IzyiY zMusJa{SHqFUJ|rFV4d$&SC0r`_$AlwPB+eG*>`mubre5~ozlA2pYiaS8aO}r<+;_a zg=gKIpE>&{mL|nUHM5aqJI+zgr_{q4cXI~j_RagtJD52$lTPoG-Zgb?@?2I{+9ocY zay*fp^pzvvbxB!}YM1sotsprh=@*Q1P@tE` z#(+?tJnt)>oo+i_ulkP+I^$3IuJt7YD*_%w<|ZtRv#@It(&Ki~Pol7Ip-{X$=QtaJT(_OuU_6dJ=%NJy&Y zj86Up_S-#meA@A>XL+ackII5_vhyg`vNSZcCiPOXAbVie)bvPh1MfgeWws*ABg;Pf zc>3Jz#LT2*CzcQEUQ!tQMB<@%BHAaaf5ey2BcWQaFWy(q`S{Na(0hgkHwGPcz3;ft z>8l6NofXt0WOhhncuvTg1S07k*OBAE*_yoTfBGT(PP|{3F@eXv7b%a>2erC?e<~Yyv(Vo8*QW<_Oa!w2{9!++R4NeM3Fhq}!dKtf+JuLB75)w_NY)t>+noWWNU5)iW^Miu=jwx9c)h|0v^jL}&KvNvXL z$QqipCTD1_LtcLF{ahtKt#De_!8Db0z5Ktdo5|A(c4cE}mFYWkwb^9m_UwS%&b$eE z$8%frxP|XTKE=yR9hIX?3ySv0Iwf)WooVM%%Qz)0nsqx#6>p6{9eXb_HmozGXJ}%? zfS7K9w)20^yMzV$9}avMH7&|F^njwZO0$gFOVXWFaQ=nTAoUV)t*TBD zP&&D|R}oA6ub@8nbyjiuWbSG1j|9gEeq>wpmvh;HQ^M~@&y1WJelT)vM9=uWF~=kS z#Ae4-1!hO5M*WPj#@vl5k1@x*h^>iji9eMf=k(*0aQCEKO>Ii8Pd%45J;gbBU|eEM zc>L|uSt&@yOWtc%VBBc`7l9_1QkSn@GrbP_dHTKe+vNQ%Fg;*vu1|SJ(p%PHj+E<`@`-mVeR)Po=D@5WIsAfQg01`u;_ZT=g{6gEW#a{dWK5oY_Qza7 z{_iYqMz6d*InVOlax`fnsW(zDrq&35s8(w?XkKXYwbM28HG9;Tl`rI%<@=;f{K(v@ z^mpmq+ZReG97sQ?q`{SJu z`1;)NfUbTC{?-6>z;eHz0Z?Gq^Vh=mM!+$r*%FR{^NsU{!mr}L6TFkm5DgO43BrZnCBFr`3((wY#rGtea+wTOmMw2a-iy4>jAfbJ?E3uY zS=Bjm)oRTY%_|LG4{K#6kuliNMVX_xU7{&!5&V{A=Dgsxu@A+O;R{2}QC=aVqtm0l zpSv2qJbGGGX!P9pv$0jN-(snNg7aYs0i}UNrAl>h9DBY1cC+WVx_oIWfFzta#Rbo{D`mksUoK(iq+AoOg6w zbg$67@S4!nkfd{+=Sza;hIS9OgbLzbB>&-bCLWKy#Ij2s&YJ{k$tBg4wlc#hV|Yed zW>wb0oNI+A3hxM6vVMF^X-uiV;);QH2bQg4)jT&LC0sDDEW~Sh%>zyZC8#YJ6pKY?h{= zC_9ap%WY0z5`KjWqdz1BC(sFa(jIPDA}fIvr%d>ev_I)3Yi8mC)@fEaYY^L>Go4kD zbd5ccb)ADGA48>u$Ze&F(=j~ z`X|J*TT;8Hd1VaE49{@Q49MJ=Ez7FNhI5>AY6@QQy+l)lPen3elk7?`GuCUmwH^~E&|4Yu|ba31`dpPzSZ_d@^0m-A1#oYc}FRngi7Oy*x zpL#ttENx4AbH-5co*7xO+41S|sX4r1DTk99Qbu#+$swtEX-m`kag9l~SW9eN?8)do z@k3*7ME8q47PBnIE7`=`l?JEu=j$?*NgvoHye+BIGW+Gs$?cN!IL9Y9EGH(%ns+0A zMgA_q4zZVbw1^b%mvGQxOohxqc9|B7{c@5-EJF;GZSoR+*4nEw6tjvW#5U1#QISw1 z)=OT9FBV);7!0#?R}Ae2n|_)0ho(~TR{K=-Mfps)t7NXS-mrjkS~N}eDYGQ(PtKcy z&$&K1{c_P9HB+c<*1?!%H!%5fuvYictuhs z_7gjaH%N~cTrZSqwj0W%P2zd5ACwL)hHKILn!Ct7<1zl;{640y`knGFGMrn^`!0oY z9~3MpED~-PUF4riugQFqdM$SsKT8mme=D2J(eQ4jjLUqN>z~z^H-PQWZe@K)vQPTL z8p_ruA51Re7`P)+j&RYG3|>-70(Wm}w^T_Qn%ZY(+8!Z=}S|Wr1NuM@h=G%@|P5L6fWVr6{ZNY z1=j_L;7H+j!7WLnL?Rh4t1gl%w~(W84zWSyS?UXIFiPMr>fd^WTLOsQadH*g%DMMwC zi*AUYWW43Smd6VB2{#u0&YqIrE^n3ekzm=eS%0&Q89lP5=l;!lkW-yf$aUwWvL12D zI0HD(laHq?1HO};vWw@E!bzQ&mXy(uyD;}QP*2?4mfXX+b8>@nJ90PXe9L*7Q57!&++kU>vM=R&=Qw8H%gIV_ zOr4yLq~FMxkXp?_v*JXXvX|$#WQ@+N&m{{s<|pN{Gph50g~{SX$z91dVY6_cKpChQx%jB)xFYosBGGiiV-DS3l;n+ zf@XfPz)SEnQJ(lSyeSvU|83lA$z^VkGZ+PFK-HR@Jd0#x%9w-?tQ*Bu()04}if$#_ zgdUl^g4&|R;v>a$H1WEZ5#q-2fl4eP#BuuhU z+$M3C?gV}%O*~z^Ldq?Qk!2S
                  ZR<2P-N@n7kkl3Hbw{=PCz=coDvZ`GeveJYJ8 z<;or_{3Mfe52SvN*^xLuwoA^p{G5Ui(_!=bGPxzxa+oSNG(s~dr+6d8rX@;2t0`B4Qw^9}jM znZ6k{nZGh$XZ}u)$PlEx&sd+4lu?~|IkP7BSK(g46#-v(LDUs=&rrTSe*u3e;H&b& z&HO?9<$`5`tNd#I+(I_LAHP%3i$6~!5{=E+!+xD{D!H7Ml3J0>us%gl8RCM8l0->A zDb4ShKcR4zV84hjbQ3*L*sC-1JMugWdzLIwG^>wjT$FcNv30nkYL6dNLexACQW=zRL@oxUgg6Sen zzDlyaP|ZgRLj~PI9mNTt!W{m>{FAu{^8B+~fg)Iwvo-5>4m&Thz?r{N*j4N!St)jx ztd#5#{}HE&MhbldErM@?I^j;iTj3gEiO60QC-M_b5|#?L3)_YL1kZ*0h4$hK@fP8O z0!!|+*vFhZDfaA+q^eX1xUmJs%T=3Y!v)i% zmleUK!&Dzs0`)w_pOR9!wy3j+kzJDwFZP!9lrEE{7LAm}$@a)D6gd>VEl!u$maHi4 zQ*yi{tK@IV0fhm&122R-wcg4&&3=tW3CWGhyJ~0EP1SzYN%au*Hq|s$CNx($Qms=B zD47P{F-_BeJ(Ay$-&f1|AtjZhKW-*=lm}q%i8g~Uqj&UfZs7Sx=gwr9IE8)(g54wg zL@$Y(o4-VGzM#0EE$zMFbIu=robb1(Yw38oQ(?XEePMm!@BGuE>Eh+0fua)8Grp&w zk0h+fStbb86gm_h6i}k6vd|)4(ZS+zMSo=vWb0&dX}Ba^{9Ce6 zvQyFzFky*!f#js*tpt+nl5`iJ7i|#_7GIJK6Auvml32yR#O}gRg>CtAejfLB?(YIV z`v_-S(u_p61cJZ@^eXm0@5s3)t8(t=`K;rZ!4b2f0k&~vr2f1NX2JmO6iRf z$KuPf&Z4CSpPU< zlGW^=83w@&^*L#%YJZ7H(ObTv=!~$Bps+wG9U+;SZx;U*o|io-9V~Z|?kYY}JV)j$ z`6N;ZCBh*hJIPCFYSG@JXYv$9s)AqQC!bin4b;>z*%aAyDK7Juev*!r2&J%8Bt0yh zE1fR6B=HoFkqD%%QjKJ+q^oSCY#ca|a`77e5B^eqxBP5*pvadyk+(eV0!NW)Vo2$~QcCVx%oJTN_K{yI{i)D^ z)zHcmWq=~LG^cdBqPudaimmKWPFADp6xBh6NcmR9XdAVEF>eJTyJ-kQ!r?!#n_<23 zvawxrSXHB*q`IcED!o*z)J@tt?Pu*8!#+*1-i(d0uBj9fM(zX5THU+aP_qLcUBwvV zQ4zKo>R0xrVT>sw+Lyb97n@$fE=x#bhsB0QY)y%a9US+C3ndatx#+Xa##(ypaz<@bt1WFMuC@_nUmO0Oy&E3*}y zN^j+6(BajkJ|%u7tBWd&mleG(PAfVhwaFr+agr61mD2uFM7CMBRAwj|T(q^wy=Yg_ zZJD!lxpbxUvDhZODcm9ICpsjqm2<`R+;yqJIpxCJ^6#3j`ss$#hHTv_O_PUZtFpb*06M>7_SIU#h&oE}7LO>g_7MDqU5qUa$P8 zC{^Fmz197vj!clZI~@$m#|40)Yl?64rZEkCrhDoFC zBNUNRUIELVbu~6VJUD)MA}{`HYA@YiO^PZ)=3lx*(MP&iX(vAkH19WYYROHxv(l!f z0Zw&l`hvCQDlV2@D=krUQ>qn&>X2%qYPss7TB*LIg)}2oBSBBzR(2|nD_HUzd84AY za+0E~BvvjfnOL%}WSqQFE|IU6$CezFn@e0vn9?nBUU7`0i z1LZ%^cIqzH7kySk)i%^CtLI-yZe4Q4vjc7a(K_k!hB86H->~gT2aHA3+pO=d@zfsCL~3WLC#sgIo~w6iLN$8zOU*pZ zJoQDjMSVg2MfFfstQw${sa~rPrBrdcbh-Sae0y`H%cB9W|gEB z?#z6Y(JBux4A;Fk6`5?t2;)3sPs2mwAY;1LuUKm+)(2{5XxxC_n5FKe)@t0ey|i_@ zvAU@`FI|S}73hUd9ZP>*zf&jBzScGBSh{z*-MYit}}nAA-nRdjkc92`xZYl=aet86;j=qEtU=D8cIMsF`LbP=G6=znNO%L7%LW3 zhgOOk4>z}2eak?wUQtk!-9%P@sPB4lcn5N|q3v<&@TMEhb6TG^iR-E>zM-Rv*iuF` zTNABZrS8cu5JgF7=_=rie@L2(kfJ8p9C@9zRpwt}P`xpZG(0fPFxi{frZ=WCQ@v@5 zX_aY;Zk%DWVVb_sm}JBZcMXa9Qo|6#0@FD(zgoO()iQY9DLFn!BnG%0|T%1>nMx9&$zTt>PU;mx|WQ8jF&Py2{o` zPULsdm>5tJty-s)6_}Jj3A8eSUyRA*sn6*Cv z;!M*I*Ei`N=%%W&)lJ56#ydv2$==xCILhd#pRHf4o2#S1`!8#pG=DVq!2d7ROArD* zMp-Srz}~*HeXRIV>1VAl$_#xBHP&8MR+)R5XPLeAo2|$i#rRo{md&ybzHktFYALV2 zP$jE5d{KUJNAv3%Kg)1ya!r*j$QD|;!$3`TLGDi z=y8T>)fe;+y;ieFe@b0kx>DOsx<=Yh;tUYrlS-yIr4BSw@JDnG>WHKxU*Qf&0tJtP&YUc_JB=r0lWxugFGP_K zObMnnM#8w+5T!5CDRmchDVj2EiN-_aqGT%>rL!WUbbje%#l+Gd^2Xw6MKg*{7eyES zEY@gLnmEa4=`usNl6Lq7c=A!m89D=Ph8MwkrY(jW$6umrV`5E;Tk<8@4petTxu> z)+RAeh>->lYcl-VFcrx%O4X&tk=jf8QhkP|M0Z#hhH}ZxSU>Cpb`0x+I$-P3e&{yr zAo?C1h2~?!(G6%6=7B9iKVs*x?pQRo7FD6~*a$QjbwQKS=jl?kcQxPCJ5_U3E0u4QSxQPZMKurbMT|nEa4xAS zO;oH^gc*ZP?&1*1XxV%vA8A2uBU|BHuq*rk79*>m?$9yhIASsVH3dQ^p(Lo&^wiV@ zO);sBtKt3VHxxmB!C&Bd*cYyZCqWBL7Sk@{X5)B+zu|#?ug+h;PQOt1KywOu3A2f7 zX7vSQRdV&o$}UwQH9cx4H{>?>*8FPmZJO5nqqdgRR4lBhtoUSODqN}zwTl``>Is_L zAgGD1ryKQ+r7cX`(zf6>-zy~@jMdG;SSFi?(w_9KrqsGkjpG{MUyi$c`|{2DH+8Y* zV#_?sM}1J;G9r@9Dw{wA5ob{y>Ir=_X-(1aFZ2R_of=DYC-&kfxtAy*HWF51DLxK& z!&!J3?u2QHp2QxU!lUu$cm**Y*WqjNS=eVR8GC{4L~mnm*fCUziqJdQar7qKfNX>J zBg0`HwAd&yAiVvj^OIk|!C71$I z@6#+bo`jDnMi&Xi-?hWgFSr(ei;suqsUi_0@&R56`5RBeSCL+@6SM=0fV&~SXd2W9 z=0lgz%cvZcqF2x!NCXm&X(qJl;IC&DLZx&nR2e zw6$V=)6UCFo6fczZnn0hv@EcNSVvhX%S7frBQfWg7gSxobn5blW_`oYi}|%hW|pOo zwTEqpwZ36*?Z!%H+gxfqrNrY27FA9T$Nv$-iFec>dI2?sJVho@Bo#v5BQ*p@)DyX6 z1Q|;nBR3Ixav<@CTu+7)Im8#@EI6w?`~lvC7vtOUG1zu&E0&M6qf^ly&_m=cngt6{ z7%4*bLMt*Cm^PU9=^2nMYIWCjd$fU?P_7MB? zn~oss3@eqL(nOF=tsw4Fj`$UT_Z9dLRETC^$FVV(142PFP4nT`hz@Q<2V!fmW_&Eh z#r9$()`{&wFk~un26_wqhERjrP;FSJe_@F zRSmx(t*J+|LyNwnyb0;}uXSnL*H&B0y{798p|#kh>6f0hEbN$fWkg40M{wEO@@35U z25aNOOFu83s=HJB(EP!IT1Q(cYaeqN{ha#Dd@fsi`B`IdgWKh@iemF~OM~UP6}Dcm z=^KvKZL3162G^}%JgFJf4EhM&i&{q((%sD>ax*=cilsVeXBwirPry}BpmT|*n3Qm&Bc~sS`K*mleVk2P?xFyWBddC59=I; zCm}rJX^m7g3u%YBu$y)xz8>pCM3GK}jXX=-Ax7azSPz&&w_;jyE7hHvK#sz*u_jE4 zyJI_$cgQMO1q!fA{Xl^#HDfNkuX3u=RbQ?aSIMg-^&?wq z+orcYZob-*(B7>hxZ_#J&-QoiVB~(uyDq!lp^4YVzvkF+tK&o4?V5t}8_fsnUF+}G z+%C&DSDB}q*PB}`7Hg`dgLyzdq5m?=EgR|{H^tU(wH>l3ELmXxUs&hc>}&<)=dDq7 z&nxvc8*6qDW)h;k>2mrJV=^b0n;9QEfF4XQqqVdK+@DRG=}0PsnoV7xWYm7}wU;_d zWm22SXOu5>5S)X8=pYh^)p#d<4PT31!nUA4(N?T0mX2j%@37a{0(3nRh71QgaTJn3 z)evTiGDaGdhJAo_x&j<-*L&)#baV8pbSm8^!ye-TlN8zjKSbA~A!s?;iZ3AKqzLp} zK0a7oZs-D$#y)rk0TUF{jgF&NlG})C{4o(m>ga*=PwF8xgJ>g`;ctnd_#t#G`~;Z~ z^uY|s#pG-prT=SOVd`c4W#Air7^?K`h6j~Sb!4Tss(byQ`s{_Nz==)?`~%@ z=D*Y>dLQ$MQJGV%nbtQzBQ?`qsS7lVuBOYFX-pRVk}9XJ(k^rl>IXfQN~HRdXF%61 zqvla6s+ycfvdK_#Bk_z_0~lckei2=aJi~Tj)9_Jv47Lh=hdx0)kQ)deDS)-mYrvl) zfNr^D@-qdRa!qcgZ^psKxyEazAXA1Z5$KyBq!ZnPzQ-5hJ24vHPO!(`RJ&6ni{|9?>FJ?B~kGM)k5juPnhGV|SHJF0m!kb}F zh+~>#>Ia2GyP-eOKvSNn0`89gt1{Jgsoh)ms$pwm)TNKDpDxa7?%LeFv9PYC$-8A? z+r)PC%Gmb(Z5=HkP2p|RJ2thyygIV2xkW)x8ttWbW%;&d>r;z;S*;DTd}LlRKba?H zwmHDE%sSJ$&icak*7m_#e&L6u0%+OYR;@L|*576=qstx2#@V*nItZ2Zg=GtL(tN}+ z(6Yrg!TQl!VDT`2qYLSS%yecX^@f&Hf9XJa2sIy^l9}1e45eG>BUB^dLqb$2C84|0 z$_ON-BdvfVAy;S^ z+yj0Lt~W>r`U%Yhm~O@g;&p@v{szBJx|21;L#i7sXI9ZW=t8E`%%iW66PWQ(0wg3~ zfDRu`{QwovpPWS9qR)d`*<^NRNO}M{m+X$WU|)Ox$lzhywn ztojkHMXd{(dpE|{{jQ6t+h?tyUex`xZK&RGA*RAmebTzql5IZ6=q#HUy;)+uY?WI5 ztctR+wz;^nYH!(S>v*%=vd(hc5@WTqd07)|cgxysgU$JtpG=zB*|OI%lrdX3S)Faq z%68KfGnUDrhca^dEqN7SP%SftK0)PEx9I?88>40pGQF5Zw2F>pBI)C_BfXE#rW^n+ z?We|*VPq>Yh%gc#0i!$Og}6O-7jwdLFh~3*z7%T*>`;i!2WJ5xZ;)2>D5^y{Xeizn ze}vcKu{e)#BT|VOq?Br;JE;A{ZBYB$=!H~Q`h$5C^O(6oO{ad6{gi$21S*#Hrs{Ex zek>Ubbt0n(q2ViilKw&MAa9b61RFnqj|c3-0&02y7KFuM)3GCH2>cnMOzTaVrn9Em zNHlrPl4zS++10YvcCN}?yRxdd!smix)%Ne$Wne{9 zZN}w+HQTJKt=G(N@h|47X8)>-7XvH^z?YZiEevJmS?Vk|Ecw>2=A&ghY=~{OZKqXR zAvP~#Ld?&Zzw~GttlZkw>c|9Ixt1o2t9i7!pE=uHZbq$JEx)X1Eqvl8=|(hA?o=}! zMkP__C@-4Lz;qLBWoFXH=*e^<<3hcpSDODZ8sHSs z*}B*Jm32_tn3d*MP`{&rzKpjnu!hjzm{HdA)?JokmJOD2Qp^azoebs;{gM1k=P*C4 zJAhW6WZDnRz*7qtB2IWGnTMzE6#1+?b`HO9s;S=~Fah zK5psB;Pg}`iT+Km1Sd3~Or$F4zNC!ur*`2&GJ=>)iK*4ZbK)uSmx#nZ<5oP32qaG8 zMywi3#4PA`I|gITnE}9 zkJw6h5K%-reifHvD0&5Buxl8E$CAS-$V^xtSPwA@^Odqp3t26xSY{R5BCXHNHp@0k zk+m1~nh7t9w^h>7MlURhkXzDitlGlLcH7GG{?=dAHD+9yv?i0fL^YW8bccDH1+{3c zU95YlFj@iFbhbrgiL^v8DAh@|(Az10`W3yAIY3E>VfZ)lf$;(Qk$P#)pa+C5z6`YAPs*+&M6XsT=kXjlr%F3=s?1VJJQfxP(l6684yw3$VqFoI%V& z8CAj)w^z$)3~Q9=av^f7S_%zSQxYQKS>Cfmt}_#ONTc?{3OGz3ibAZMU| z;2^a?FF{vg^L2lfW0doCufQ8eqWS0;w2|14hvWAE>K(-UBYwyjs2I^9_lTXuE+T|n zMqZ$%(*ma5Oj%9=-DtBcwtlv8t(VL)pa6fHy8x^mY0`j};)*#Z>IGcyGg=nivlbG4ZU^^$3RWmQ`@TAo;^Se{r;GS6r| zI0H~O0IB!m3St)4NWRDm>Y6~*p9tGwb&ADG?s+Mh~EIrYogfXAtIWDfT!yX z-cSP^_H_)#5WFjK5U(MY60^}qXf7UuIAE=qv;1JmO4A+_4`e+;__1axI-S@AZ%39R zld(F2OAR2xz;kfifGtB_qhUlh;tb(~#XvvtX+%6&?>gFrIYx<+v4bP=2jd9q1vI*@=ZX^%V7bu(>Lw=_YQa6|v48jD_>2wdG8ofyha8EGt z-AWfzBbc|$TgpcDp?=f-seGb4ehPSLE73sQCph3FZUa5?giIrz;(duO_&uxyn+j5j zO~evHjt?O!aTNc7$Kb~>0;C&X$S3$wOpkNG-9mg2`UZ)CE${}AJ4GPRK%O%a@;3w< zmKdAR$;1JZP0pBB8x5ui=r9y$Tmgq8Ft!IIM105}*@}&!CQx?7dwe6&AMe2Xp@~Eg zIg1`g38*zdSrrl%A|7Z3J^_YdNX${lPoB^0)V%iuLbrau9x6?D}rQ{zv9PIof>N9nWdP>it9EfIs z+DcMR1d!8+bh4OCB4hAZz$ZK;U5Q*`5va*`1WkSi_1%R4m53t%_xZq}Rvo;ZO;ux_H^ni}2!>0IEEto=|^@0vx4RQtQd# z^l!jI3B*Y>2A@Inz{gU@)E&?w!UX(m05OV6NAfAXX(YS_{z`tO7t#0VtCRzMiLo>H zr|!{C0QG~JH58k^OZ@}f@POG&kEcqhG9rY~VFKb6aG_g>dsHLUlh_J$los%@2+t>e zk}{&5SU~wu8_3x}rKrix z!*d8{@;yBOBwfjL4ZRQVgMP&O5sQhJz)Q9{0;Vl z=OQJrH*gry_*!B!W{+gRtKk>ec61)LlnBIIk)MznsGy$YZ{`H>G$VjtSxnuhUV+|^ zA|0rmba$qjabWg>`Z`CsFpJD;`ajYG>xK13-y3Vt8-Ra5;3{+&Zn7W*o0&-Vv_()U z^iq1Dc`MV*K)?k#F?K-ZyrosddEm>hnzxy!T9#QX=0)Z*<_-O4SAAi z!U=o};FWdQd5~qCLi(7dYX%6mY4eeCxXu(0DdF*O0t%sr;O8LKC^qeZ)*$&=2A5&v8_OcN!OW-}z-fM=QTiogW1N@~0M#M-1Kov|QY`Wxl}gz& z6Pfpvqh$~CgQ;TNfPT)Q7E*_)c#@!`AXVs2$w*JKg!n^6Q6H&`^eOB+e#evp&B6BJ zd8CA%P7eb9_9%F29V4Q?6Q%eVQiriHHdRQyq9f^z_;GwQDFUmXOil#ZLtl!bQ0fZx zoq0`ZfX>P!@0$lxo4}oIK-&(aT`4`i0%S-bbUm%3+W_xhq-K#Lh;TBHw2%z|qx<1+ z0B3W7R(AlY>S{tjq=GJ3js@Wpa3ww!Psbl%c~~Z>>VC*{)k2=y@=$)U=joE zgU_KovGvGa_z<*8uP_>*BTyo88huG@vlP&0O)%zeNF?up*@lfC0eEUAd6k?={v)G+ zmSd66iB-g5z)D{L?!^=Lfl^#S&7__I4t_`H)1k}|Jcznveua0X`Vhm(Y9j^J!Yiq8 z>LH`00?bE%t8J$9sRztNz#$5HKHvbp`KXx#l1z%u07!8VxFZ(10bfb&1O3Y()|0Qv zQDg(*L_8&T1La==@|BlV0qsh!rDjn^^f>6mQ{;7^KqrB`GlDt*RH1@|$%BNwaVgN} zy(l#`j$)`#@-{Vqo42PaV>xgf}HnJah%V2Ub@tK$cn0X1<0~yfkXYfK|I=&xUf)B!0pnuT_tQ=#3 zd5RBGgY<@nL-mjY!YzReM(Wi(N>xL{u2SBc-rKTF_BtWBaL?+n) z!Nvm94w9nzR66j-WuyV$gB1XO&_*mG{0RfO1TV&X5EZ%z>3}j31u=x!PFw|gqKZOM z15$x%$rDTjuEh$-o3sb^RMP`qhD4DG^eXck%Nz3ps}Hk-nhR>}9;jOdeFB_WE3=Z> zL9d}E(p|_ZYB`yVw_`VP37G}X`3_*BgJcfqh<5T0!6G#z7pNN}?Lj}F0_pdlt9Da< zU^mmq<48ZOoOn+*QGJnH7z_6T%oqbu9l>{knG8hMQj0+so&=dhxOoI{Q#*kQeM4Tw zJkIU%>w{Kx+>K>FHt6i#>rF72vz@ z9heX#L>$1nQCJL`gcKnA5fn@kAY>PO461?TkizuB^vu|3oT>g)s!u(xn6J-+t{@`Z z9S=r%&;ghR6JiR=K;7~Gh`IPs{I_NTa-4ifJt6MmDk2qSgIw?nb^&A(AwUN&0Q1xw ztO`C2PlM;d$DwFA5Pc64t2``?JYC~OMUxxx&%``{2luEB{4ufyOgdb#+4MVG1RZI9 zWSwSZ6N8zx)OIqLbS95e>zToTYfpn(K25jM7pVaJ7O|V8u(!x!tS_bp{k4W5f#UE2 z&cA`ciLY1*IR;?)J98hVh)HBdfdorM-6xJSbFfFS3ThzBh&b8<9gN<=&*D??`($t8 zJ~LJ6r{`Z9Hh zd`vo$S!gqUmdK#4kON3FxsV)2bQ10$GhL0H!B(PDtSfpPorXLCiFE;d9-aebKyId& z#xI8Nh8Cm3c*{r|1p0h^mCC|RO8Ly1FLg$J@lU|j4MLAY&e%;j0r`zD1!(+jOaXi8r_MWLj94`a8G19+J=A$HQWbML-nTDCIu7&KZNf=bCH#o zSrtcYxcMf{21xEhUBv^*HI~KXH6#mujd?Iz&3CMQtMnkJKTPZ;CsY4`Q>;TU+kphrG{{;Ie z!WZLR@kY`fB%&+8v-VLoh6|=_d+?j&W}=ROs9N#|ag}&Qdg4>Ca!`fu$%VvKd;pju zw}JgXi@rt^k;{k+@(>vUPlHs@I#a1>f@z0wxPjCsfVt#o{VM%2{SsZX&Oz&=*-_#f zH7+Y($p+cdK-RP7gnvQ*kO}dyIU&EU$J&dkL{w| zX%10OJ}}$N9@a3X)}W$iQ&;FsppM6q0R)8ez&zZBHGo-cPpl_$7%1m0NFBNt?}qQi zUGPLy0A}O~Sa0kv_7N+_jv`IuQEE6NH|xx$v?GO(Yp5K=0dF89usl+V?lWwLf6)q^ zJ(z31Mlq0uYz1!Q6V8D16oAth2D&^K;Mfu}$gmXTEuFYO;tR6pYGMgF3rs@Bkx5hr zK$}kB80G>+be7B|e8IGE2vcP|-?XH5y{19CTk}LC(oWO$S8x-2Q|ZDd+Q;Z)Fi$U`#l$yk zIPgeAkx10bI0^cHD!K}&sJ1q0zGn*}q5_JF7$}Mgf(nSDqJV^y2#O+Nfr#XEcX#*9 zz0*M|Vm%e(+1=Rr#+KmV-7S~CnY_uO;7I^WrQL*L&4POP(9Ubbd?i#$=j2i}w3 zaPL>o9dHtJ&V9o*%{|W9>G{6mOag{nj^f&f&IMlrg@{>BY;Px zJN)c-?cwhA-cddu*s=7u+^$KkdiQ+K0{0ttgDcXtrukjVuGUrU>p>^>Npqi;!~-9F zS3J*r>svy+phMj1*Ph(2fEbz$x+XdvIuMRjdyZ|Al?6`iHE<}zwlrAATB;!l#Iw{x zddno~I|`qngrnT{mR3*!r2DQmcQ>E+cH8n?U5+H*k9#=MAKRleG(tp z<#F|KL!M06L04Z#uan`(w12Q3fXZ!N>m@kQ@&TG zYuVhE*fkw|-$_uxC|eaRo1nujA6nbmHn$mCJ~uOboxVBV`5vuD>Y;f)c%obZjzs%O z8w~%nuC)>zey%KMqT{mD&+*V1>0Ip^;M@XyZi#D-`+^S%P!Fp;|FoQFo8$Z8Sml}H zscUw*G``(!kk8vJ^^S4mz$5>^7xspE!#uw{xgL#oh-;-gzKX#w; zjPxMA>)g5SCT~Y`gYN^#qc1`4kP345-sU6C+du_>1FU0_x6&8mdFXlKsqv2X4FD%K z4WNI3@~#EZc&Gc7Tj#p$>;#ry=LoTVwcP>8xkiWsRY1cnM=X%}x=CUxG7C%}0j3e5 z4#wp&xt3_piWXGsX6_pVvZXm!fqo9a$u=)lE8)xYxSWQfmn_$&3-|QQZsM&4t(CaiFX}ymBGuQ4*NF`+0$&l1LmmR z{njS{yXDEvD)%EtrK<$?0yN+k_d0ixdxU!i@Mf($0>tT??hp_!Cc3yDp{Lrt+m#0p zSpFW0cb_lAJ=VqYto2Oy@ZDRzd7v|J3Dl5F+$&vs-MhgYymWQD!d(A>F~_;Sg7;o~ zQ^5K0Y*(5a=^XED1J)t6f3uyi5v-}O64F6?Er|dFybdZgNeo;=r~Vkg;a^hRZG46| z*|;ti*il?)UhgUJesWE5*EsXs8$nm~d0PPJK)h|~52A9r_o&w&%>E$HM7JEE^VT~a zILv^*+F`p5D{SMe|Jb(J7QrddBy)%{T9>x}&x29NMj!1wys7gn*v;*>Hn!+}b3u>w zlIN(`)m#ox80pRHy<2^kd;)i?Z=h!hKs!xzdtGB3832=c(H>=8V;^AqZl7i=xBj%2 z!fI%l%zR%UZsAHWN&HP)lh7Rz;0o$-}!M8}3s^>KEWv^CL-a${}u=3@Xez;Um4zi@YZ zUN@Us_WH6ttGq~8xvRv@cWK?(V26_87-0X`vBmb=KEbN7y|QxPn-C8YnOn^t%>7LY z^9)lGz~yfrZbPt-iXSLxQ<-oa;~ zGw=;-fN{Mu31q4gSD^C`fTwJIF8wJ90bQO`v?1B+XQF5 zW4+yH_u3q`#a6U+H1rz|vs!G+ZNF`=?M8crW3mlvH`q@));ieEd-nUbI@>|Vc-vd& zA{Wbc!@eBMOeg#idTaS@p;>Y)v6d+FYx8PTnemCSzu|>GMn~7`@Xgd(`CyIE5bZec z&i63vBWzZ%OPbm`wKWdZ!gqZ8y|;WN9*sK(bQ9}c(N4YN8L-YShsZI{vD6-9y<|V+ z{0X?Y4fYn;0=eL?fa|^tGMi|IcBkgZp|GFr? ztpH(1cb^53#@{u?73X+pvjOz3&F+K0!Ph|4WI?^qG4ov$!PH^S0f^&NeUG7!Ua9>K z(D;@5UxpOpb+g1W&q{>TO)~Qr(-iY%>klX%vY6dqU0!)UxT_sBo7@y?qFQN?zvc{d z2w;qlfXbuCPPKlu4uRLf2O+!lx;5OI0BazWB^DlPdjU7v=GlU5KIjO6H+%}^#to6S8nQ@zElk2hbFK4rzX@?yw=Md*`SB~?xSjLy;%22mj=wmN&7eZ6nlT5P4L}( z$=u&O)pWsBXfC$oTB@K@_^VX~tos)H3F-t`^h)TnIo_OR>fcU1Hsnz7{->>0&wS?( z*AB;eU_Tu;k&R<#+oJ3;dywszJ zu|aH*8@dgp2FN(eIM(>hG}Uz1yb9DNc!*)iFbhG2SO`n4!%XkZea){e>!3?8%bH?Y zXL(>bU>;^#V9YVl4Z93h{S(~_om)3YGfNfwICeQN zyB4{ZIL=4-3LAxLpM1+1=-oqJih;@uD#P+8(*IEt#g36(M zh-&=L_}nl;o31*lX;ptv{j15)akK)>NX;q@SM#@KygEj`NKFN-$!&l^Wzf(RSLDY` zI4IPdV$zu#&6~}1bE?6m7Hf7JO7!J`SCk@tYuayqW+^qj0o)-X9AsjevRMPGb*Xx)f@k0k&qC`lqHw-LAf<_Ncw;FjXCG z$*ur4#HWh3O6SS18K&v)81`9qSgzU50XD}7`yPN({A80^4c6aKi2j;3U*oU7u4z~Q zQh!msQeDyv)+B3aU>q3j7+r|5M29sUGZ#QgD9hxrRKQWr{?31$BSA!VLlE2#dJ2y; zKQ%|1_d}5umFcJD4`@4d9wJz-0_^)_kP)xw59|0Ex$?Dgf)b^!)?}$O6&DqOidy+E z#Y1_y@_=fXJXf(z=94!ng{G~2XThx&1k$ScIy0Tdw%UOavM|X3p1@(d)u}5~%_=m30_}o+hTdkL% zYIvu0q_xe8fM=LD87^w-l?#;bl#3K(#ZJXC`BZtHJV3rlu2W_zMT)-a2<1ifIyFJt z$CPAwY+h!j+GLJs+jiLBG8D#|Z$mleMq{?=sd=Qa*yv|GW^@|z4V9*urX8ktra>9Tbr)!QsERwWNqrx>M%_`;1V7LtltzZYzU-F+ev`w^1LV|7`dSxSFeVtsvv|0Suu%@;UNS`C8c*S+mToh?gIc=gK`& z60L}~k2{R}Rj`D+UWAgq)(tk?F=ZK}O|J}(jMGiKp=_wX1vZIwlT>r$3YkSZPy$Qt zNzRJ@5jTrIii#vVWVObSBoisuIRGqHN)A?zSgBXrfSE?h_v%vb=RQ(m13YH>Sb5!$2F9UpE ziIJuASEb6l+(M;HU84D_j!;cdl`7ig%jE*8O*Ti~BrlQARg@__3Zr7P;;tf9u9j!Y zuc*Q_AGApAN5x=mtmY4OmbOb*r0vxBYyMW>P<)XOlsF_yrN4nDN2BzLC`-f>4-mEB zV+m_%pO_5x2}P=Eswz#h$?#U!Ylzoo>HgH7xAZfv*36VYlw1PCaDJvA4rC6m}Gf6vKeO`T2dsdSrchFwQ z-YW+xM<{EQB*iWHRi#})0X+E}X} zBaV}9QXf}e)HbNg)m5t3sv(-e+C|b;B7{)NZ{}^{)$rWhV%86K31G*G{zh_4gcUv%925A&z0z&6J@Q_~CzV8=$4QkYNQ%WPCC8)$*-qI= zX_Jg1PmoQO50e#2tHtjmPsKMRUnQr+ZK7Aabip*CRd`tRRPtTgF0T?>6+h)lxmCVd zUMI_zkCr(lL85#iPFO6wAS?sAG*1Mh1X-dyu}B<+fe2G*&lwf`X2BPppU6+0r<$cP zDRX6aB;O8O%i?M-rg7%B?l{ty|l)a9V0~GWSoF2|Z&M|%` zXD7Ena9(^t`doNdxI$-=K=WoeEyN%};(Ub;f^ zOd1d7$052Wcqc*#uJJ>7yLn3l2tmFuMv@?X$nyzz3Vgz6!q5DR{AfWi{~J&;+ARr? zc%^E|E2&ESU6d&f7e|U-iNXa0?htMwuU-%*3>GaG(N6(yZ7=4&~5?C-o1u}6+mX2_LNtfWLZ zjkkj1$BE`1WDRFTQsb#q`UdJDpmnvGl0czSzcSOAYnW$P80G}VH`Yp)oB4^E%ihhq z$!p_6yjwgczlhV$e#zR*c)_Tm-=p*CBt`<`4*ff$lkuFRskr~}Lb#WB{=5|aY~DHUS^jcbwP6+RTb z6!r)mqCbTBf(5)NRv~K}_au+aKLO_Xn(&7(QM5^f6$Oe$ihQD7LW*!Szna_3Z2>++ z<~H$Ccy0V{K^MQ9UrgJF+k=slliBlGiR|?(0xLooB%Lddk$n-1xM+ilvDJyVCq47AG(u%hVg}EV0>mBVjpF! zr>&q4qnx00QTJ2dQ14Uav<(8fpeNAZAqCT}P=fqR&{h&PDa0qlAnZTh~m+he zcL?rt&Tu`PnVic&Z7Gb>MRE|{6Z+#H6V4En`0x1TI3v(jdx5)5$R}JRTmZUju_U05 zMJc9ypa#=QX+z0AvOjqsX*1~pSw-qgo=M6f*~r&{HqTHho$?YWHJzfkDXkO>?I2Kp zf|*Iwhtw3xzm!b!MDk98jMPJW#YAypcpG_#criR0KaUG@^?y4E0^9* zpT-zMIY{HuZZRLRF0*1-Ijnn(LdGxJCyI~MNhA}>@#VNIYzIz>{R905`!@#0=3;(h zg3u0Zf6Q^rVVs#5MQkH(A{@Y5Z~{UnF@VS;4JFcuY66D1g_KA7PM%CMl24OcDci}9 z$sA%5v735`-k-XF97&l)`a)C@ariyNBea)Hf0l|~zjz4ugZ_90or?p^_8FZe=4tb`r1;GqJ4EtQzpUN8DX(DJzMlq^zX; z!}!TDadq5nTn!h+!}C7!>bYKS40jGkz@c-Na01xZ!2EyX%x6p4xs=(2aGH(Qhtf#R zqm7`SXGSxM=*#IB=qqW_)By4-QePsDun_OTO~RZ-UqZ7nOHc)cSwuZemoi~iU&eFh2KG<( zHr9N`4~CSvlc``7(pS*jwEyTt#%x+P4Nt#9zrj4t3Z*AeMv%6W4Rk%Q`Q4m!_8E>6 zSk7qfC~)@<4u^A-gJM5nCj)KTeaxeb4>T;vgKMI?$^VhFX(g1q^cea=Y7Y%T^`o)L zFG(W_JwSzaAx?y|V^QcEsB7p<)D=`R($Gk2x{5r7`iSnv)L}KLJy)*sn;nn)J$qTt%SA|Sk5K-16nirKKU|5O4&~wKu9A#B+Dt|DaE8(ay%KP zHc-s8D9QlhInqpu3F!O@S=*V9*o)an_766Tjb|@lpJlIRJz+&KlNmc0%PHX`Iq@sd zh$WI26TgvS$=y^o$x8Z3Y9J9w^@OYV!FU*VAGZ%n!Cu5}M(;yWkZvRz8G|TpT!jcj z-bXLQSg|Eo2lhEO7PAOD4lBn#z$RgF*p-+=7y+gY{R90JZN$`Lr(l`5Y}^d&3#<~W zz%~K@IYOdQc+{QL_q2RkUs^i#9JP$fq*^H7$eW2wqJcDww2SzPq$E!OUgAeg#jEi= zR5xlE`fpqZkwnZQG!rTa9fTb~?{FM3mQaenM?6GbPCrL`ML$f}(AkVI=1j&#W-vnx z^kMJQYiT_+h<2Zlj{l9HjAh~bV=&kr{4@Ml;$-4M0*jD~@5bZseZd$dxXZW&SQmB_ zb_|A&I)h*|}FfWYDl^j&Np3=Ojs{T<82S#c|H4BQFaFW?nQd>2qL_27Qua&TfC z3)t00>^B@0{}rP^C!j(aXEhiaTbk}6m>3^E3Y&^U;YE0u7!Q1F7k(@@5xtkSYU%3Tn#oIHxWCp$%WXCpN%D9H{$zYkKod< z@3G<7vDgCaQ(Ox61Lglm26G7g7`+Bvg!+UEL!7N2Qop2bQQh!;^nI=MrZY z#ZoX0glznCVi)-kbrdC)^prf2LLtYJ29TKe#h6^=7<4Qq2b+PY*f+3pVoeV6Jh_Lq~^+nEZxZH52@oM9Xrd>!SDjC&?bRkwC=Oa6i zPnxFg-B9^g<@(A8yZKeOs<&6$st#1$t1PG*yXS0uHDWx_BEE#ZhntVY-_xMCSm6xUsjym*t=uLt|7Zi>w=L=qy`la zX6yiJ8?qM#A^$?HYUthlt}?$)R?FYpTT7_lfeb+WZrWKdt&OhQRlau9v)!3{da75| zWbI3=qu0e&Z>>^QbyeNkT~-ygo=E5YRdNxueiOfd!slnuFzUMV#9$A(&F1C zS4;P8RBcY*erLzRiiQg6w%yw@tG3rqLk&cK#`I!`V%(U2vD<-1RHMx3=Ro8APuwE{ z9bbb3%I~O?i2jW!h}oD0=-!gAWkKctY#+L#Xlr_T@vemG2B4mO2$|W`)^MtR-M*XE zwFNiImX&w!`dF>0$!qAS5867t47Z(M%E_-?!(Rs%ek;u@o43!tZ+um1Nom3CtYK@O zuRfn}Gx_bZ^C`rotT=8=Z_Kl(^|7MW0cjU<@f(5*w-h~H|9!)uqQ8rKH;^`rDMoC5 zyaz(M(ShiN=qKp4$fM|Llm;~d<%je`oyQEo{)K&sorHeelvsyv?28CTJg@D)C9h=q z#-NRtO9z+U+Ono1VHdgjpXy25vr6t4NY~|Omu)p{Kd_y>EobZDaz)Xg5>?^u+~5R5 z{EPXY7KW`jQ=YI>zvX$x*A#i;!?-&!LuSN9@FOc`Bt%S|GCLeOg&2M;>Q_QRLhq{V zk|706dHV~G=bb5-SoFHYxmDIEL0m-%k#~?cQ2mhUO;?+0kdu(LsMqN2$dbxCn}%*K zuO3q$xAS93pWLwp**VC}nv5UmoHd(Pe_f+pvnfrTot(dCgS(WPb#l$2OkuXWC?yNI z2C*bO=GL6|)7djQ$&}J1o0nxoFO84Op0glAIqAoQJ|RINqs9jYdB;Bvy%|CSlvr;ZP2j%*Cc8N1SNrT;4b#bZLpj|%opD2VXR zu2{ICU~fTL!Jw?{HN&$S*BvYRuX1#?s)|~fy>n;f+O5MY^0(dJiY&L3S&A6>bBjU? zqc-l{@-20K20i0hHZAK{+Vkc5q@$@*7C*?CwmNKa&xB8*{E+?=E=}A!{_WWDe%#S* zlj!l268A10m6RK$4?R7)c69ML+^9&uKSs?PJ7L`QaSJD|SZK`InfEMvV(N;O)ob^q zomuy^6thdPk&*voU3>1%lEBUX6)#LPth%$ZE#-Y0dM!RGJ=vCAoN_-YJ~=W5kvczq z{)|2meq*KM1_oD8kOwCOl#Na8(`VGhNw1^c%-uh$W$Lc62_yLdp8~rBmIWRQk_Gn( z*&N&z>X=7Q?@n!A^(?Jlx^zuw+Vs`zyiX;2^U5-8>7&yE)72TnQobY%Uvz2J_!U%c)(suyFCBBo zf1TgP(N}_#CcKY$IcIj<%ACsF&{c(NqO$(X9Gdw!e{9L@0yt~*%B}IX*v19>6O{{x z&hw945%neh*}`9Qtm) z=P|7-<`x@^Rrx!!F6VaTm#^!}othcF!W^}4?v}V)OFt}O&bzrFa@w|t0kft@W(5Bn zQ#p`Oh7*H*C|?+9+QPH}Q2!XeoK~?b5r&%>33>@zIXS z|3p5Fj)`H+Ulp}+*5v7@r|k|;ADb409X~j5>xg?p?+sc$VCv8(K^n{p{dE~UB1MM}3^N-1|sDN-)JS>Mn5KfLFB&iT&s zoacOJK4;F4=R8HSV)j>GQ9>wRr|Q!73+M^8a6X=phQ_;gC?uWKcn&d{z6^S6>A+6iUg1>Y<<%Ob;Ge z6v`m0=9fpTedB6@sIjWxLvb|w(ch44(OEsaQ?btey;EBlcjhRBew_m;V( z70+>R%Tez4XQ%oDyP#$^5-iD>1wAMgd?k$q*85oC>s_s2OHwr0cI6O!`-^z+2akq> zKYXtfe7DCB_I$YpzSl1S-)nb)Ju_k8yK&KASKB1`&I>JI+vfw|n^T?OYoBFDlt{WlreKVKe#{14z#(d*4<4^iV=A+N-GZVYInYmIbQ>22J z_TSbs>vv?#w`(()KZzY+e(dgHE}Ghy|23A){M#iw|6z+T|M5&ie%$A`@{=tY`7ca_ z=I6{T;<)&WpZ@HmHZ1r|c`B)q68m+gJhb%S zw}gcS7eeZVM+>Qj3lI9t-p+rpk|?YRJ^BDY*(vxM^BEcK4`kopU)y?sGauE>KS1*Q zvEi>}iEH+2c~n~c0GVdX;sf-3@5%J9(ePy61DyWtbFQzkwI%)ml6^h750HMEd-4E* z?EbHL0sl?^1DS-wzP2Z8U;Uad|Jk-m2H#?0+}zlkSz;Z`aICA$z$aA3@#*X*-+A{* z<^lK6_jxsI#%Vwq`w;}=?7|kg_5t7bvzTPx6=@aY+v4B(n*SQkXdXlvfouswH2HV> z7k>%&^=~fw9MfsOZ(sVOuK>RTwEy{#!9oFm{_Zl__3&L%{?A(S@ag8MFB8KUao!R7 z*?TS^^>X+0?2m2JPul=sC~jc7C-t!z&zIr8m9=!Hy_5Gz;>VBAjQ=u{8UGNAG5#`d z=A-YOGBf|Jo!RjF>>0yv>!&}wwa$2L;)MAWyOHtUo7uiUhp~Jv`>z>YPsTGo`1vUL z+xJD})SYv{Hz)&ssd3PMf3eor$ysIq@b}4g+_BTYexs7{gfo=9c@YJE^Abq2x_U_y zw;D(t<^d^hP^PJO9wQ^Vw}Efb!I|=obS6<4O}?Oy^)3HpYo=hToAF$29P=9xYlij1 z%9+s5QH4;k-w^2nR{J3i50e$DvR?*~cW#|H8jDf_-h z*`Ls-ZZ?uXR1MRYpGjxDc&Qh7^CyR7L`FNgwiHiqxkw@FSi}{@qg{;nl>p5l86@BO z-*{4d{~RbbeL>&5U&|a^*&wel)nr2KA|vrk=X*~;Fn;BtGD8JhB%TZVvficwG5^!f zXnlf8`)QQJSNC2#`9Ik+r02u~{PM4BzA)zD)PN8M${vS-g?Kk3^Zi%I_fFmPN1D^= zqZbB&PrtD--Pj*ae)RY{{i~nsPR&jxli@jy^a$Nwr+>WiENTC+it+YHFH@RXNq=i| z!T0VK!D!UX0{>W?#tTxJ#d_y3H;mN3_eq*h2d2`&R~C6 zNJf>jreE)lCWYo*fY&_h`$lFi?H^zC0iz!*lB?zGz?YOPp!>6#Y17n;(@))gmj3qD zLAw4&-GHQIznSO-dTkNR&@Z;g zs+Y!n-1D>PgU1`mzkR@CTqyZ(Amc*6Pu?{}eynPrUP+^pv+}Gff4aHO2o3K8N}n49 z7;%SWQ>7OeOlt+u+-UNnvk>y#PrnZ|)Uy~3CobQ=_JsRFC2fq*(IbXf@WID#KgMF% zwthw*d*zT!2yLGJ!@CRgZ+_?^TN8udS+zTD*ZmK0@cey7_{XK>KhqaU^}kc;oA01x z*Y3*nHy8fKc;s>o`7b+L(`lMFfrekO$wt}4^k=y*(cfgn`#$}%iy^#mL@&Ct=Hp*4 zW&FqNEV($7;)9q<#=LTwRQ){DN3Tf-{=ud(Ui(otH9zBO~3cZI`Gr5yX2EkwE}Ovc24?#**e|v?j$4nZ3t+p zuOegIEL!`|>wQmk$jGAaG&0)6wE)t!;A^wm7!>w(^3o&)$h2pY(jTWzHOx-{Uwk8x z4o`hb$3FT`-?y)wlkZp&7eovi!YB=9F!<5b^| z63L$*h0q4#*U6T&5g&8EX&T;oh75dEcfY?X{{sI_yfDc_tG#(f9hA& zz;-l3{^3t6zJ%{z1TMUQGO}JQAeRc7fs6myOn<8PGqU;1crrXM5qR}&gYWv={S55y z{{nQqWdeToct3FdSs(dX=o;C;kTD*4d6x{C8JxaxtBS$Nd6#_k@c{61tO!X1FYVY)Max(DrKf0&l zo~|Tc@23K_KZpdby;)CQGqsaw!P5Y}``3)*hv~q5XC3*QTPMDnPcrGB zBCiWS2P!Tod@n^j>`VNIg#6D7iy!~uY!dkX8ySo+%tb~&`wZ|7^h0`vwF?+r%^-+}55xkTaV#JSwy}c!N`tzhNGu>dzyh+|Aa9V98^8ii zN$_1kS+N?l4eBHbK~8^=r$wIuhwB`$3+j{hiW~7fycX`jH{mYHxim`-tJAgFTD8<) zREt*1;^93VERUAA3pO!}_ zBM6>RtDV*437XBbnjQI!VO^JD>(V9gt3ccsremAbD6Xtj*Q)MG7ZC`H)qoP#G&^_%L(u#Yqc5FghtG|b*syN79 zEiPxNyA8YAaAHS0594rZ$rP_zKa5718mn6PIg(Y~uC!4yre!JX?L+es_6qQC$8H)BRhqNB)iRM6mpxVc?&^^&M z)}h~0K^S7JxAY(qZWMZ~J~D5~!mt$;B#IH$5Tn{Y&4gh>;@6C55|qPcR6Ju2t*BO} zLTaKG?I&vaJ?bt~h$P*;L9FT~^+)I_0YU*7wT=@M;TYPYvPl!HeezCxLAxz9;X{a< z*f4u#n+7(wA3|}D640IzJ6IkPYdh8un)}9hq7sjRE$mD!Y4zF<2_0+Jj_w>(6>33V#QQ5-cPBj|8>gt`)sl}2cISRLpp^`qov-qm_|$GoCA zLpt?<1S~#>$B+%>vMEZLfhOwD6x+HEd2p5nWeygqY=d*L5bZop6*Tku^@x=xi;%a- zW35%THsKlWH1JEe^`oi<#E)-j5~-umiDtpRUd+OAjIAD!CIQSFh%i%}Zs_B&;D93@ zyZvFo+=uO)bFAcUSjEhcn~6SLS79+vR>nab44<1UBJSv6GpWtV2wap#U48k zUO=g;DY?@u686co8jseY?G;a;Z7>U4MqSXD>I6-Zw#(NnnYw;45AQYAY0q>_#Lvsd z?Z!QeO9yLQGMB}r>?|0CO&C*7ElRMQX?7IV*El9mVTz4stAr;t3)-m?O2Lt`%@n6p zRI^DWZy#cvLhblJAL-{$%Ht0<3vd&tL z_+ur6E=#n6*6DjR?HENBTos#j-e7FC@vO}wbhQ|4eURgS`hdrGrZ5PpxnW=bj{3z3pB z?Y?wfo~P zU8dzw#NtIFhnj9g4L2ym9QU+$;WX?(B~lValUSS9j)ocA&}GNn^5!cO7PpY1$)w-a zEZ{JM!mqPVntO~lzbF=9+Fi*$J;*}>fna)EfNnquqG?iuQ(iNuO- zQ0x-y+ZIfXe3>Fd+^1ZG9K=Xzq9E-Gqz`p^bvZ><#Sjs$(V}_A9(<5z&_(e2+-^Z0 z99P;=vV3`-!#8)Sc}ka}hG#R^DQci(W3+iw3@JBN;iWJdCu=dRz(dwU)wrcYb82#- z6Uq?%7O@Yife4c30g|hdgi*Sa0 z0Y`*Ql7OiZ*)fI_fE>oFb*BguHyKxn9d(Udq=~?Hgwd*MeXKeYk5UuD4Pw9+uWwec zk>z5Cdfjx4)+)#B0DK=B)TeU2`YM%2=d}0p4}#}E3kq-Vfpf*N$GqR!bSW)Z!rPWcHE1xifw z&R+2*94j6&CZUbkmZp)|6eT0A+Pm^G)f~P9_3B5=2WX8Nvd7>#NTagXP)np@iE6bn zN1Z4nv{lZOt8t<*$s|#O#45AIE^$?{Urtk337YdAwm#3KI0dULt#L!Pu*^P9pYrr7 zf`>D9%pB>s;!xcb+!aj9k@9%FkGQL!!<+G8fxj5K8E(UiTCi-xv8`UWLq*^|hnmWQ zHZ?IN)yD2iDF#56z$S5AmBMR<>WMi`jDqi6K-$G_n@77O&4N)ir07=JP%YwD0Jzq+ zZEKKE@G}Jt%T!GdJYSGm$V2Z}pUVBhS$*5hNL7m9oQP&aL;?io8+7$5z}^P|qI4-+ zSub@HfMi4#4X2GRPLXFkzd9`UD_EsF@>S*xXHvIV9w(|ST9==jn=Cu%kvNn$sXTI5m&fUk zH4eOA5UE`UdHmG!(`$Wp3Oj<^f}Yv3G+VkxDN8j{-e4aFLlk`_q@haR$C%d+Sy~j$ z!dzptd)XdY(#;PjM7j-d$#h?B&^avCswH-x*lEtf9kOcJAUhEE<8!x2cs@T+mUMNa zs6jGQnkowcMvNlfj>RI+#m5{TB;!iIYT#xa)>fQRw2W+Bi_q6V@p4z08V!Ni#95hz zx2;HYXJ|bf9-3KKX<2}}iF1CYRc5IbS-=tJ{n8j!4LHaf~Q*ld-7RVwvtIzOG9sU zs?H^L%}NO@iqQx3`$b;;h9)+68@U(sNKBbi9F?p#4ij$ywd1j$wRAud_FeNyWcPzk#( zPj(>m>QjZYJoI{ZS+cI5dWbuX&4xVraj8>J5l4EXYGVi{ZCok4SykD9_g)?(s%ti^ zk&<2gzQKK`6FDs$Q8nr9aGy5APzUF*KwEM(s7iqhrdDF~CdofyWvP~{)MYt%tNxT4 zhu7G~x!GX6j$#}zfaYrXuy9`;ZP`Q(@+s}PC0xprk$9+^V`5q;$}aw>W6u;X^D~@w zwLDcbq)Cu2YZmQW`g2;kqRTO%BT%x?AR=^<(p;_tZqaw;G^1;`n$+zt(hM=pt(KU= z9qXuSf{>Uz?9hB#?LtGU@t89rSt>~`S<{b!quCz)=Bs;%y3mA&Yd0%Rs?7ZD>nB=| z&P|OMf$)N55^wW!Bceq$QCC}c`WBdH3`5iTHalAPnD z?hG4L9bD@om}sp`mvxu%pQ}@9Z;wG1*`V{Vges1OvK5DVKe9?!;~VCsl19ampt3OB zJaoqnY&;=zp5LzFowC-;<}@DTay>1Lm*3F1s#4S2__C{1&5m}<5Et|qGaKf)%`cvM zs!BFJFn%U=AuVdc?gyvjI})cc7fF$A<2+nqy06(L)cCw6rP$3ms_Hel1bs!_7PmRc zK#Eo^G)s(N*TlL(EvN#}n_-F^&@1=5){xA?G&t3>EV~O?1Z)n1HP~|T);t97tErKl zU#S8^^feYOp7X+>BjQG^dW+-ckLse`_e5D(N@Xj&lecd@zQK}o$af`kWzAO;i_-<6 zmhj-nCCIw1v6dBavpQC`S=0c-7pPJ?6QxdAxkc3NIv`u4S*UPoa_&S*(TdA4R$IGjFz zZCHFR-BlkMd71@YJJM>{GWgXjgB_|x2c6aY3BJKNSGljq=4G2^ZOvd?F}1u+ke8ch z472QU`}qm-9#6Ce&u>9(x4fDjU`5b%3nh-_1RP0cYEs^qlcs+wT@v0ks2R<{nJ2uv zwPQEWBrr4nT6|0WrJ1DtvK?=PD2qt7HM^_y_eDb&Gwoybck@DX58!Q8J2qRqq1>=$ zsM*A*qCpozWXa~`E#_!vJPH*DjJd`&)v2@Ip2kmotK8h^;eg?YZy$evhCjD zVJ=|Kc2XAfilM%u(K7tz5oZ*P)o0#LvAFXiF7N1;ZpD;(zkS5$d@HFafo`$HJ2M26 zc)Bh_xo&I%XNp^Hw&`ZmPYU~LBXpG);|lf_sp<|@vZPAluq>JHD;;H{gp9*hgvqH` z%`I&~rX*P_Gsh`o4PFONv7@q^-M2D}&xISV@Y)ep{PTB9dn!kYf#SicQ}+VyFYMHJ zmDWSM9H$JGW>us)TAu5Eez+pJHjfoqpw*t&$5qIrZCs}=4xhPwfG+3mbEiD<%BkWR zC{s0KPSUSxDDp<_QdxrRNFI30)am=^E z-imsxH`nCxR}9=-(^K}Vkv`G+Flt^)F3!u2hS+G0e6)Si`tdxb|y~K@ocLW zFKW;YsvNLI3ROcgYJQ{1rDn-oC0Tg1aQoT_Y%kfh@}67Pwsqy|H=o~-_S6jN;)-e1 z5L45e9`@unhi+!Qjl9sxRM)MS^vWq(l+nu0ywz|Ee4++gZcWwZrFx(=#KqdL0FBG? z3}PO^^$B`sX{P0#^b~2pj(7%B4ALjhmFzm<@>FJ?w9_%A^B8)Fo@AM_stJ^>=_X9+ z`5s;3>ui8^Ii)`ATD7e6QjNZ{B}_0u>rh5nLW&^1zc9xty474%OOG_lUa7qS7macn z2-^?b;<=|c@wpFj@x1I&++8x9zpk#SSl3kICniGQqr5AEH}EtgN*tgop&2gY+9B3YTojDB~MRr9^U z>gv3N%hBGXn<>0pR_xU|&r*Ib=ut+L4cr_P&wqPHjl3BFEoQ`)r`2WIV~INbT4^)J zBa%en+FtF6wAGp|Ug2e$vP|Pdrk5z1=gD-3*HhKIqQv}uV_QX!fJ%pmmQs$Y?WNYs zDNR64&l986j#uVgwu=YMPBgSKO6R%KA=|HNL~FB#%4=WGmN#G<@Gc0IO zKpbO~&TES*775m0+tE|7UU#~+MKgs%Gb0_XQiTQhte!Q)u9gfhXnOcH3rdT3{2n7*6O|>QO*XG*zh9%9Bkc#B$ z51=UrS{={dG;h~?6{$SV9fLAjoLDq&t8w2okFtgt&TwSOz`fX{_^vI{*u$ep zdTxz+HaITsmZ38^v)ftCxxtvMIpq0H6ZJjd7K=7XZv{GD6B*JkI|`!-mZ{N{t2oT@ zNCPGFRbk5c;!G?ZPZe+6w8;{rHQG*56cQziC~Yap6gmq#k(F2ciu2-_QaiGx?=?4} zbCNTAhXGU!i|jWdwCJ<-6}+}HaPQ?1CDG7m?0LSIyJ)o7s>|7i&b(Avz_tj*NXO_) zw2|@-bq4FCqR|qMhN@zV47X!?$w_y#TVrpnOOHy4sl-7=J5p{h;ZQ+ihy&>ky9+~MkI*pEg^Q?W%2#~9CB(Jz(4*a7H9bKTLJ zgzOpHqGd;uO+6|&dwm(}&x)n0Z@SCI!A<_5rKLn9^mDpzpYS(CvDUVVEi46It1?MV z+I6j8xsAK6Gq_(FKz7uA6%*Q!jT)m=j%>D|_6^j1OreOHe|m%t#vRb%ch}VWSuNC) z2HY@Fn1GzPy9#0MuD;*ZfJW<+2?@G_O)5csvV1Qu)zqo-=Py`}P*k;#xr^>{)^5is zLY}n59u|o%uGtTZ`mt>@$Z5%i6qj4`)snEI+^Y9DlsZh;Y$8d7>)Bc8(+RD5E zX*8Om8#E;-(vfDdNx0=0H>ZHvwz+a1PJ@Sp1e#hBrFV+?-eyCFlvDkjhjO{3@B9Vg5Xciy0tY%%LO@awx(!|YXhPnoUUqs+)| zQ4GD|;+!J0>OM&X6tBz`XXxyvMX5s=1D{zSTd3eje%C%woWO{|(#jTiX_*l>2OGzd zw#6)i0e9nGViT7r!bB}WA7lnuFG=K8O5E_S*;#(3Jj}^9c2={92zD;7RVPyC!DCP+ z!NC&YEzz!(b!``Gg{G_njx1Y$FW+N4+@TwxFa23h1BgM;C8$~m^HD|0eSzfPNfcjvn8dmn>i~2NK2h?lr zte`@PB_VhnFVmT0>zAo5bA}bhndzQsUQ!R9I5|2*m}2rOYm^jyuI2>pHdN})Il20K zXuBA%6e-pg?hgy2NnuY^#oa^P|>{U0K(xat4^ literal 0 HcmV?d00001 diff --git a/templates/ifs_templates/grib1_mlgrib2/sh_sfc.tmpl b/templates/ifs_templates/grib1_mlgrib2/sh_sfc.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..957d49f917675e88ce1bda947a5923f8b5f3cac7 GIT binary patch literal 9358 zcmYM24>)7jzW3F29akOKsH#!NQB|X=s;WjEwYSt5V~iSOOvYp)A|fIpA|i>1{7*y@ z5fKp)5kV${F(zY-G1;3=Rh?ATaa0{u$LqT4I`cY?*LCK&?rZu!&wbZ^p8Z+h_51$T zTF|t0=&Flas405|F48a!`xS=d}@w;e%0r?>F4M7neQ3p%Wz77@5e7W3FRKX zB$%@ezvSeb65@z>3c}ZZs;twx5dFDmXOM-8;C;UQ0%}*~0zj;mbi+(rw z?k^e<_V5>dwLbVI9S<0Ozv!@6YkuL|uD|#ofsfZO`s_b{`I1wmqe+FN>|0V4E11Z^f?P3aXco1wazyW?|I$`uVYw~vs z9bjO=HJ~fOCCzZV3$z zT>B1ur*axT6E+7-b$EjB-Q+;$qDFw0_aDLj!tbHHbN>otFUsJv)vv>Tc{kxRwPyJ2 zheT-j!apG8pf7wzmIb`~bbC^q6P8l2TMm6R{df3-`{Cf1-ACZt(NjS7Rt@<6Tr$8Z z@c={0Q^A10{R`-S=6m?{PBwgIG8lUMKjYyyUaf@MtQhdOjCbIWA6&uw)P6Xk_(Q1U zVLy1*hYd%#96;EJWBA_0o z=W-*QTyPdhT8M&U(w=~R-{ycms&|3G)C?f%<8ENSI2QWylVzwg`Y|9pItRY>oi8+6 z`vCgeh81}9l@olkXBR$Ou9_SOd_Cn&0t$-yO#qy_`p-aD-80btFZG;<$qz>UJo(1TCUoPY zd;q-g1Pt>YgGvK`2m4)~g^oT}z+u8aLW)fXaG~tn>9hI-es?h*d~NJE0OwEf5F+Jf z^3vP6(8YpXp!u}VK}HM|mAntJJ0ajd%6cFyQjvz_&7rfuO8cfX$Y_LsipBpzpN-;HOJ!NPI^H z=~90Oy~TeY=$Z6~22FQT0NuruP!A(OVC(`s$`R1s(g(lx`*(nlhC0w!CkJYtEWq8$eT3KS1BCI9((DnsN#C7BqnM1J1Ou;mE=(P|Oowh!}PWLW$}j?!`5r z*5&6ETGE;U`{6sVuYWM07+wK*Xa5Co6rd;1zg3ygx^7-wQ@K0z^a`~@-TN5 zoO-Y52++ zvr~}APrqkDI?E0B7upbah#hj7v&pAJgUvXfS3IUpU|}j|qc@E15BzWK=@+z&?gO!0 zvD^gH+^Oc@Z=jBPK&s0R1}>*RS7g<&o@R?tMzc8KNs`1+gQ6dFgxJ`cj8BHUjCb^s zBPmi9Craa4?mCsyT4A%dJx1>?i~Qtd0M)vL8zv7oyR}6%2G{zv=5gmA(6kFRl)=T@ zJ58}{YM->-nDSifcoHYXqd_vIBT{mF;~9ZP#W+yNz5K1q^IuP^P=csjAGO)Msh$h7 zH{|A~X>;E?KzVbVrioElzD;J!XLWqsF6gdI?Y35Ie=-_5^}iUBnDiV(+JML76UJ6M zmzyYNvD1s^`js?{EUn7}w|+gBdGznQAc$3IqW*$3S|W8d*5TDouZ(d zpL1AYeHvRH3wYfm*fv<=izjV9W%@p?nB|y}&i2!#{`cd!wz8A2Y#38QTGEaH*+4$8 zWv%_3`_PUV8_O8kP;qX=)L|9WPsGZZ3a`OnHXF4wrIAM8auhlWl-jt$7z(m|ef^HscbrNv5CLw zkj-RgP#5pc(DFWZVPUGsxI^pJ>o9+et&*8$|2Gq4UQB)~|zS_9e>y!7cUta@M(`otuv0FN3#B3R&goSV1US;rUu@&YI=H%=4G=2oeDfD_sZgQzk z#6KsUG3Q?H> zDq#&rH(bg1)C}!&$GR5N=jpf!qHHTO5;OZfVRQtE%yqMP{lOh+FW5HQfAG_p%eQA( zcjDXCs97PpcjL+?n@yM}tP5f*_qsAJSjwZyo@d&G3+VkipVqC8^_Cc_4_%kB%}LHN zB&U5!W8#@h;s|V#Qr~I3;S^*jm&Sc=d-uB7vWgOGqj1>P(KbYJ62sC%9g}`+WUMuy z#R)eL(%6rcqF~fX?eySCJL?v?XtxCgZ+@O$ByCKsG373SPBJYkyxn^GMcnK2={lyT zDLjV`^t(-Y4ziW}C@@#ncSO_6gRV!F#>&lC(6?+7AuTxHP|W2laQa9l(KL0USIN-S z`(D|Qq}@C&Ke(~SHkFU)vMNyD%yE-yg$z>_x{Rit70DWOE!ln2TN$Dw6rB=K5mw{d z9L;bWUA?uV4wQ%G1Qc`H)gmPkQx0pDzKNWbHGx;veNTrR#SSxELxN8 z;J|oyY7{Y|g}bS~i(?wU9bI}Zbv-++i6f`S5YKA4;ng07L@TLst39X9qeUpm9^9#C z6eBx43jG;Qt*wU8luh#%THDu!EIo~$&}ZQ!$c)$1r?+X|`Fx)K=|SfTcDCQ`o=oqa zj^mQ5Jx64zGWPgrNSkL}T&a93x`iXp_d=62B*RrpOFTGMQQl>S4AH9(ryJ|>b88CiQwoM@YIAPuaT zWiCn*C`WCK8=Ubq3|_zxU<91f0LEB5tt*P^)$J{v~vK8H&!KWO7$PeU(P z&-4g6W@fS~-3ZS`k~7KUB;_~pvW-%bc;hR_GJAg${+>%b406mhrX6tOUg?uL^r#Z`SfHViC>ZGJli9?{HYT( zKaRa~=rbSuW`phAF>*f@r(L{;lZ=ur41SlG659^rWQOBhlHx`AHgAbHBnW*N-MZSP zviRw9wK565FhTBZ4`vN>kWVRceS?#mc5fy(w$@6YHAS}s6eO!o;Ak_we>H93yIHcE znNzr>NKkGt!={c$v($bXqn;q2|BS0}QtVZE=5$Jamr6L?d{itip_BA<8f~l6K9*VK z`cqz$Tlb+LymwZiVu)LFDx;|(^qoeBWQpX#GLVi)E4&&5O zyBW2(;Vnb5jKEzMc$Wo`MY_8&v^4WjqenHSJ-jZknZ?TE)3hsBrbKGSikW_WzR*YYEX{`X$F9!h zF%k_V3BK1)8z+pqkw0KG9w05W6@FC7YURi^x4IXdsj96Eb8jxQ@6t(4NT!z{>55xD zqC+Jck!58VR*02gULs8fBQ1F>Q?L8lv!)%(#&B#ESwpt1G#_H72Yrc~W3il2^(ZrN zaDg_{&LVQ_?Btb39Vw>PTenOfpvz2w;&CIgK2C{z@SI||x)*3VY`4%fGB(g0Zpf02 z$+zukN_TimnxpsCV#Gt`=#u;=aTG3pu08tcc9YhUMj;G@RnK;;qa%m1M_}2sbe%ME zUzr?6oRA4EyN(6cx-rHQuU+q>Q4tl!TTV1qibxBgouKFIqgy<=s1n-P#OSy&iIO{K zQ_i()nYPQa#lp%yroCFmp(!IN&jvG_adp;45{2BlTq7-uCj`olnQlUxa)!5@HKK6H zx4TBKklU2Vr5j0U@mDN82ok?0pqx~5R6BiL$%-c1E7Pxr*75UPMf#6?gzWQpMc~!F z#;tlIC#oqD&8-`5iphE*T)(;3r>coiB{U*?{l9!hIxLHB^O79W@V6O_^zsBu94f16 zg@r|qmTE;=oawRzMtJdDqqk*+c*2~rVwKXqbRJ2(hMueUrg&b<=g6)Osq;QPQ6aN+ zTAK*dmdTv1$2L6YzVSRfmCE*X)?8g@#p6{FmvFXQhr3iqAaLkY@J z@eCW?f@s3g_et?K2bWm2Mv`lzZw-^|xeTmf!-q2t{&~CRL=;(=P{$q|}Lyd2_OPgr8$D^;p$Gb>`x24Y$oCamXB! zBLdr!M|W@Vss*(aQBa+Uhb+w#Gx!I0Gf}~Jcbft^v6?*PagF_vS(@8wPnkAQ(bCK7 zlv&K2mS1X?gfqwWT+AkSz&7+OvP*w2(L%t@w(d|Dg=liJD(%+(;QqHp>*`&^9ba+M z9cR%q$|em-7c%w9Y*9iLs$+cl(# zjeVOVuvf(=rP`cOdktblg%s#22fr11I=C8I2YpA7&lN zlle$)zF@H$rPJw+7lv!;`3vgBhBO6AAKN%$IJg>7H-0OqjMflPND-IEb?qvGdS}QQTd+8`lEz8B;oa!@iMbSGqV_&-x69Ded>us;YEbvmO-WUuO_oYo z?PgbGD_uQrdtSm3WtP*ML-I$A93Gvj)F(c`nO$pSZ5zfpnrH23)A8vp6R#Q5swGpy zWA|bt;*JpF;pr}5INuY?VWf7f-FK}Uv%X-Wt$t;CDuTN+>?RwbkB%R;9Eygdsnr?f z=wh9iUp+M8RC}4d``{dKWYf?z_nFX3wwWaF)4maqwNeJXm7 zGh3ppHQ(N)Y*xCPrP;gvNyd4#UzOoUbN8%rU$tjJUybctR&Mtrg<1BQj)Z>ejAvs~ zy@xcKx?P!wLCC2{`RPBpvSo!fqtGF><%tp$-PxPX!;dU>ihtzvfW6jEucqf+QjIG! zv}4XnC3qGLT+`Rh60sWnFwRbQ(iDtd4`z5Br7jV>S?8g&7CAeE&B^LTDoUM+dO=22 ztgFyM_w;AgDw%6}-c>*D(De~km|T3zOqFt?I43fyg(IYVK0e0aB(a7#yDe+HlL~U> zlrc~jsh6=S9k^OcI$rAX*+Hk1%hiWgCR^4ULrls6)c8yby=hFb`7rKbd{2(bpbDXc z&^fF)-ij)qk?#mL?ZKcztX{Q@;`4cd9Ig@394sTt;;H;XDKE~zYST~+9107MUMM7# zY+l(Ly}&~9nj`y%^Uw@Z8dgttKUslnGI zh=qNt*9i(WSE<1bsv2;5X{UzDVZV_1b$NDWx5}AtyRk0wmUkP9Ka{gmIVz58j>{hE zw~NuAMKk49p|{m_>)j4oEc(c15}}85cktXi3G$9ckFBRktZE~hHnvX+Z6wl1s;0?w zJ(_5jjoMvC23kWFbi#zk*#!IjMWU}h@cY&zxSD%>+s9>NLXZ_0v^$i66?cZahexjpccKvo8B zI)C0EuBRBy!U&Up|4?7PX+ahyFt;6+p_z8n`qhXsQo}&Q92Z@U|ME~X`|U(V=pW{b z8&$0`$AU%M=vkR;9D9o z{7g!O0GXF4+A*2+Aw<8SKtaZIykes}h68F@EeQiimY>?!vP10S?N-@&n+1e!Jw2J> ztT-k|)od$O#>G->?+hlPXZIn3YlQ+S8Le*N2s1X_zjVHMg^Mg^=w>wo?CI7(E=N40 z3dbcW+<8Kct#!l@Aexo0Se%*+j>fQ4f|ZAnXB$I`cOF{U$m*jBt!zVy9ADIM>vK#d z3%i3P2)ZX!Z}1X}=NgcmrWztMnl>a=vy6I=#vlz|Hr;Bq9*6?uI72$c^$QG{!61}p zbjDGMb?$;`YIF;Ws}$uKa3v_gToY1>=lk_6tCpL2s3?HSPi~0QkbZrvHIF`1ja#v%&wd71L;m4xs+TJMcu&qvG}E~ zy!F-~{04ieUR-7=MWm;SRV)vFYEwLIK$@#x>qvXFZ7?=^Yi89drfbt?^+cmP$8N<_ zVwlplk)pKE$W*hDjAB=FJBDkW^%jNr@f5<+>=fly_=~j`*TQGDdllLqHPZ5cULJ2z z_9(UKR79y)>oy^h6If7W=n~ zR*C9LRp|&RtcW6P--n zT211SDwKRObEg1BPetW5M{r+MFV(E%r%lgF;yO$wac`<7Nth%UDB*WHi*xl3w1MMS zP1nTsCrZ-Ck+hIjF*~a=qa&m~!w`2ZtbGojsTw9drzO%jWRhZubV%8(TeW$yrpwt+ zRp;mUgqloip3tO>Yr_k;{i&*iVt2#LZ5LriZCgZET91ASo_6CsBe*dLIy zpnlP9OMl*XfH`c*pt~sDn}T`agD#SpI_@J*K0+Fl7u3H=iR#K|%aUbu__q#g5PVm) zS?R`=cgxxxI)C+)4og)Rj8(_W!IrpMf|#%J6J*n!>e;p-L2l)&&W-O=9wDA@48&p$ zFT@~yul=~`WMF{Asljl95Mv@DHJk6nb}_oPCh)UIhXfvKYu^r@WXrEPsPSWka?EO0 zOD-wI=3BLOU)87-o0{Y5bIZM$nno<&wcLk$VAENf^q(}7Ezz{y_Wef#dLNx!mzL>LdqU?(hjiPuhtheOZ~sO^ zI%!2at|YQN*@!ESyK7}unz1a3jV?Zs+N(WoE;Qyg=$P)GYR3A?Fx4^Fgb$99`o`$y zIrI#7f<&%QKZu)%T(+H8Ll+C{hxIb){P|t}G5-UCk1B z+~x?##4MwuB}|LK3oxVovT1;vXxXJfX|oim1Yl?Mv*?v7SljPrbHUX+UTa8FFj z4w#k~88B`#GM016n!8!3EGYWKEJ!O(y5gRL_(~3jE|t#Mo=&^j-D3 z#@HNRtL@tt#PibWf!z^;+1B8cDBFxGTbB z5^p@?&TtSTZg}zoUtJbEsxz{eb33zH-Qpt1sSRK!$lUr;%kfq5RPDpn%814g!BD^O za^{G9c#Ik}8Z?NpjCZ9yS&}D}t9S{wb`^%pxh7Y9h?&q7D$8o0BB{EtlAv0Drf>Oy zd?}yGBia0$26*1&1o{cdfC$C%`DzX@m? z&JGEZb6Cp{(kSh0!q!nA|(Grz(jgtz8UOV|xW7RyR7xnSy zY-6`}RM}W!Zfbqp=h>`9t_#D)JZbi1CiAje40p^p7lEP42Y0|vt4G-OSVNsKWrdv7 zl6hmke5}j|X}4FSn`r)lO^4ubH6WFm<~`JLHQ13nh9l+= z1vA`;F6x6O97~_U9+RQ-M}zv}WGJ1jc2t)piWP2-Z+5Gjr<)kn*}d6Ums_a1>|r*| zMj+O2lOi42HacdZs&B^YwzUZ%byQPW2GbBTUq=-Y`&}wMy1Yh`E5LSnt7pHAJi*bj zqZDpj;z-cvedYP`eO9(~UXj(2Rtt)qxA9g(`H>bca@A-JNP~_>(Ps4^$?*eXrN-gK z7K(jk8G63N)Zic_akE>vOnwEfjZvbeZ&_q0n5{JHJ7CRFwV7>UMQG<}a{eM+IbcDD zn(bwy)?~h?7TbX#xqnXKZ_#5VPU#EH4r{5}QGvX>#z^N{diI`ZRe0f;#iPlM@mxa{ zdn>hEkD3LpyJfg4igqw!sEQ>z`Ek5)tt3-;-|D8f&+z!g=QE0I3Vfj~U8|IDcCH EFW=h0;{X5v literal 0 HcmV?d00001 diff --git a/templates/make_ifs_templates.sh b/templates/make_ifs_templates.sh new file mode 100755 index 000000000..62c00102d --- /dev/null +++ b/templates/make_ifs_templates.sh @@ -0,0 +1,108 @@ +#!/bin/ksh + +set -eu + +templates_dir=ifs_templates +date=-1 +bitsPerValue=16 +editionNumber=1 +set -A gg_resols 48 512 400 +set -A sh_resols 63 799 511 + + +[[ -d $templates_dir ]] || mkdir -p $templates_dir +cd $templates_dir + +cat > ifs_templates.filter << EOF +transient nlev=0; +if ( bitsPerValue != $bitsPerValue ) { set bitsPerValue = $bitsPerValue; } + +if ( levtype is "ml" ) { + set nlev = numberOfVerticalCoordinateValues / 2 - 1; + if ( gridType is "sh" ) { + if ( editionNumber != $editionNumber ) { set editionNumber = $editionNumber; } + print "[gridType]_[levtype]_T[pentagonalResolutionParameterJ]_L[nlev]_[bitsPerValue].grib[editionNumber]"; + write "[gridType]_[levtype]_T[pentagonalResolutionParameterJ]_L[nlev]_[bitsPerValue].grib[editionNumber]"; + } + if ( gridType is "reduced_gg" ) { + if ( editionNumber != $editionNumber ) { set editionNumber = $editionNumber; } + print "gg_[levtype]_N[numberOfParallelsBetweenAPoleAndTheEquator]_L[nlev]_[bitsPerValue].grib[editionNumber]"; + write "gg_[levtype]_N[numberOfParallelsBetweenAPoleAndTheEquator]_L[nlev]_[bitsPerValue].grib[editionNumber]"; + } +} + +if ( levtype is "pl" ) { + if ( gridType is "sh" ) { + if ( editionNumber != $editionNumber ) { set editionNumber = $editionNumber; } + print "[gridType]_[levtype]_T[pentagonalResolutionParameterJ]_[bitsPerValue].grib[editionNumber]"; + write "[gridType]_[levtype]_T[pentagonalResolutionParameterJ]_[bitsPerValue].grib[editionNumber]"; + } + if ( gridType is "reduced_gg" ) { + if ( editionNumber != $editionNumber ) { set editionNumber = $editionNumber; } + print "gg_[levtype]_N[numberOfParallelsBetweenAPoleAndTheEquator]_[bitsPerValue].grib[editionNumber]"; + write "gg_[levtype]_N[numberOfParallelsBetweenAPoleAndTheEquator]_[bitsPerValue].grib[editionNumber]"; + } +} + +if ( levtype is "sfc" ) { + if ( gridType is "reduced_gg" ) { + if ( editionNumber != $editionNumber ) { set editionNumber = $editionNumber; } + print "gg_[levtype]_N[numberOfParallelsBetweenAPoleAndTheEquator]_[bitsPerValue].grib[editionNumber]"; + write "gg_[levtype]_N[numberOfParallelsBetweenAPoleAndTheEquator]_[bitsPerValue].grib[editionNumber]"; + } +} + + +EOF + +function do_templates +{ + target=x.grib + + for ret in ${rets[@]} + do + + rm -f $target || true + mars << EOF + $ret, + target=$target +EOF + + grib_filter ifs_templates.filter $target + done + +} + + +for resol in ${sh_resols[@]} +do + + base_retrieve="retrieve,resol=$resol,date=$date" + + set -A rets \ + "${base_retrieve},param=t,levtype=pl,level=1000" \ + "${base_retrieve},param=t,levtype=ml,levelist=1" + + do_templates + +done + +for resol in ${gg_resols[@]} +do + + base_retrieve="retrieve,gaussian=reduced,grid=$resol,date=$date" + + set -A rets \ + "${base_retrieve},param=q,levtype=pl,level=1000" \ + "${base_retrieve},param=t,levtype=ml,levelist=1,gaussian=reduced" \ + "${base_retrieve},param=2t,levtype=sfc" + + do_templates + +done + +rm -f ifs_templates.filter $target || true + +ls -l + +grib_ls * diff --git a/templates/reduced_gg_ml_grib1.tmpl b/templates/reduced_gg_ml_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..6e022a51157c0b53eb47cb236a8585590a3c92c1 GIT binary patch literal 972 zcmc&x`%BYN6u)y?MrLZ8E*t9dJzrb8HedUmeedxxUo#~mH8W9rXc}4J6IKd6Y?LGt zK`B;)Q-=v}E#J<9a2+FrgqW<}R!<(!#FQtK$>c`K*SAVcmzN3fcBzc|&^nPOIWaEz7A&anQ^By5ayn$3Oa$JYGLWxKD-sMTBxwcQ}6 zV(9{PKA@vsBYdi;-AbY37LDDVMpKT~(wr?Rv~%Hl;&GbF(|MZql6*!~S zp&YbPzC?k;2eftcK#_6??f18#xTz2w*L+3Eu{v~~k3+Yri|DByL$9S$^zCg#dE+Mx zFa)9U2p@x@nlaSY5}8*Qkxi>Z?1{vPjpnEo&tufL^B7ZJfw6tv7}uADy3#4s4S1mL zwF-56`50GejiiO&`o1ih zu`W(zHcx~zuDnskKX`-*votWtV-@!V#9t2GTAgZzl@w6Ny zoh9Jz)&M?&IPk9-grJsvz#jF4sOLgRJeLTmk93f|O$+(MA}G4j1m)SWVDQd>nvpW7 z%a%gp15>!y-UW{f%-}`GI(Ty}2?iGXVR&d9MkNa{@op1*nev92>|-z+<_bSf*TaIs z27VRH!D65UmMWyMoY}0g;+8BRTZjwsAUNk$sE&3CduVkxI#VoH?B?@ i=QBAcqhCDd9LXhwa7jK~q6?QSAjHC)kd>DZC5J!z^$`C6 literal 0 HcmV?d00001 diff --git a/templates/reduced_gg_ml_grib2.tmpl b/templates/reduced_gg_ml_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..ea50a45a642242daa7441ac6ccc0329925f0cece GIT binary patch literal 1048 zcmZ<{@^t$DpMi-13|J(9lqe%Z5(5JZ10(x&W^o>%07#M*M4Vs-65@}T7#TDe{$m25 zqyrFxrC4n?9RRTzT7e8vFUJKSIG=mDz1YHIr1{nZcdB(& zK9}HX#d6Ix@Yw~|>|$lt=HLj|iTf;E7kqo*y5XmT>%o0HTrb;RaDAG6!1afDh8ydp z1~>kP7H(2*4sI&HJKXetesHt4TH@xme1=<)$qTpG13Ye-S_j-pA}rkM)g0Vf_ByzA z&YIxXCnw-G$?}8S)Q1voGub)ZX3wADHh11Bw|PIWxy@e^;5L6sf!n-&Y;JSK1l(p# z+Tk``v(IhP-DPgQyJonxUp8=SbkuPxadUA?Rh!}#8uGx+m9fLkBxa49@>~Zup)XI| zm?pBgKD7*RJ=UM#y0R?8wa;*eYv%VnR~w}$S7B#6m;2HYE{jYVT;k89xCn^IIIl>0 z;H<fX0`)}{vD*4>w8SfAH2un}Qzu@~Ns*c;e=}0LwCnFi10~FlaF7G8i$~FgP%HFnBWrFhl`i0z(Qz4iHv= wVFLqc5TXmDKLuzK$h-ic$sRx(Y=AcD0&P?Q+APArz{A17;3xocj5!bh0DhS%761SM literal 0 HcmV?d00001 diff --git a/templates/reduced_gg_pl_grib2.tmpl b/templates/reduced_gg_pl_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..f25ecae223fed23a377298e78d64765d48037558 GIT binary patch literal 312 zcmZ<{@^t$DpMi-13>Yndlqe%Z5(5JZ10(x&c2*vs07#M*M4Vs-65@}T7#TDe{$m25 zqyrFxrC4n?9RRTzT7e8vFUJKSIG=mDz1YHIr1{kj2g{&cgttK|qv&feFHbkc^B>EQ|&Q28Lkn0tQ8v z|Nj{r7{e_<{Kjw#)?yc+fC5;SL4-k?L4`qsL6^aZ!G^(s!Gpn@A%GzY2oo4m7;=EH x0t_1%NP`evApI#olR)ML08RD)+F%2;Nf&6N3eaW|1_mAu1_nm~kYmh&001EnCw>3` literal 0 HcmV?d00001 diff --git a/templates/reduced_gg_sfc_grib2.tmpl b/templates/reduced_gg_sfc_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..989f2d0cd5914ccd10eef61bde92f280e786cb5b GIT binary patch literal 312 zcmZ<{@^t$DpMi-13>Yndlqe%Z5(5JZ10(x&W^o>%07#M*M4Vs-65@}T7#TDe{$m25 zqyrFxrC4n?9RRTzT7e8vFUJKSIG=mDz1YHIr1{c5@&A08k1~?EnA( literal 0 HcmV?d00001 diff --git a/templates/reduced_gg_sfc_jpeg_grib2.tmpl b/templates/reduced_gg_sfc_jpeg_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..7550f4ea146a9fbfdfecd139a092fb9d256ef881 GIT binary patch literal 501 zcmb7AyG{a85IuL0=d!4F|Cn}kCW1`_ST_BAd@~lwA9%{^J;RGHoC|&rtqlB?U_@De{ zX}-@&TF+zU7CY3~smP9bc24srwrr9@B9c+fEQ~`l>*$~;G-v9BwZT~4$)xf$C8u(R z9rZBiuYy`jwplkud~CxU1pVG<5bV3{-q7m@?s-2L-VW~FN~v0|l*-b9uG+w{xp}$7 wX8j=yqs1f7SdDueGT@4XFaq4v{K(6fG#hAhJpvWUnsEFv+4h%6!@A|fIpn@EHYvPJlyeMiB4jHS2u-t#bbE_d$z z{XXY==G&IM+}nBX!0rwPtq6Ecmf^xJS*QR4VmN^-4{xeQn#@ z{?@NQ;@3NOuRr>tYn~T=+`IpOp7dME25s2NHfAqu(xz?J7Hrv8?T!6wn{K|(>->N> zc+!vgNl*D{PkY9j{d;fqE1vas&w1WEy~_*!z`Omi_xV#V`JfMb*~h%%6F%iLKJSaZ z;%mO{8~)z6A|es>aWEPp8AszpG{&ho8|lbIb6kp+Xp5_njgH7gK5oXXxE+Of5XI<; z-sp>gD8;iFijgSCXjEc6CSxjI##}7KQmn*kypHwQhz_czFWmbl*m?z^A+@1;WzJ&JU>PoDyvy6DwOw>RHM+LZ z_cEO?(mO-b&36*W1pwk?{W5h zl>HxJ4xTX&1I$G)^HF3@3e3wb<|fblbTCI(nWq-!s+svpGiRrmw-d}=lKDHx93~=s zi@DrjKG&GjMdo#ext(Bs$C%?`=DEaN_c7ny%z1%%?_}e04JJ>H2?qr literal 0 HcmV?d00001 diff --git a/templates/reduced_ll_sfc_grib2.tmpl b/templates/reduced_ll_sfc_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..d2af2260177b88e318e87fb9ee716ac8f094cf7a GIT binary patch literal 40357 zcmeIyQAkvI6bA7BIp0iKh=gP-JC^5+WudA`&7IK1fCQpnZ2-c7qL;pqJpg2gd8%nLGdg z?|kQ;YC4_T-rnn>bo}ur|5RDH96~JE?pOGsoNq)I<9vzLgD=HOH@>m`-y;Nj&nu-% z@r#W&qw{^g@uceNqeArY5brt}z4^7rK*)umFcR`%JUkD@Fdb&YLRb!~;ca*qHZ9mL zE4NCkwuBwBqgH1>TGCS1U}vq_&ReUsS=utzVV#z>+ty=ut>5lj&W3En@-}V-o3tsL zv3Xmx6aegeN`a4SvR(yu~kgtG9dFGk)D~c$a7W zws(84_j$h$dd?sEu#bA)$GqSZUi2w{>2to|OTOZ({>ImR!$0_@Zy|;<>_r7CaR3LA zKn)J#C~8rMV>p2%P9lY$(TFoRhi0_kJT9RXZD>atSCGLqbl?|sq6=C4id(pYZuFoR zchQG?7{GlD;sJ8_3qyE}VT@oDPmsq`jA0zlP+&dB1SV0$3)U2-@sc%zS=JnD9t*5R z)>5gKv5b{cy+%~4|I`}(um1h)&Ubh26Wwv=-qEi_zcyd`?f-E_G{pDdj^>D58E4E@q{Y@_ET zy0*~w9Gx5KouYe^{>RvdTK3~G`;uUP4zN!Z>{l6LzQz81U?11n&sFwyiT#~ppQqUG z3HE)A{U2ox9x@Mu%tasb(aoG>nU@>PO@{etXO1o~Pfg5K1M`(+&gz-BBg|cb`PkWZ#h%ToUK{T*ta-pVt?Od`#Mje=SHy49vu9)Djq#jLip)s zbg}fT3BT{z^`+;_XJ6E*1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU z0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb z1SB8<2}nQ!5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ! z5|DrdBp?9^NI(J-kbndvAOQ(TKmrnwfCMBU0SQPz0uqpb1SB8<2}nQ!5|DrdBp?9^ cNI(J-kbndvAOQ(TKmy;VKp}(>-+i3NCkm~t^8f$< literal 0 HcmV?d00001 diff --git a/templates/regular_gg_ml_grib1.tmpl b/templates/regular_gg_ml_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..e4dfc8ce441e838f03ad9b3d76f9809af0c23199 GIT binary patch literal 844 zcmc(c|1Z>W9LGQBh)P0^qZ@a=JKyf&x;t{8*L~hEbiUjbi-lAcC89aCeA}+r`l4Gb zyS27r)J$blQ%R+!4V5pUWwx#vqxsTUrdT1;|Ip)y*X#Lwy?%Q>BjZ#I#g1W7RIn~h zx2n5viej0w9W1G}%Q_s2GTBfYlf^PIWr;*0@w#PGEdo3A#h8qcB2rf(?7uR*s(HF{Q7ppRk{eOHPxptk|V4HFow z4?*c^HikqsVVJ!Y(r+t}Nv%Qb*^80eEl|Z<#HhKe7*kq?v3=dB?n_5a@ib}%yixN` zhML1{RF_*|tSSYgt2$AYGl&t!7$lQ75NZqblB)m@Yvkf9jT(BHuqy}#~5_m^_y z-%%p3UWnZO8RP`?piPIAO#aLvFIpN2Iw;gghg<3Cq|qY!jEGNHrQN4nroHGf*>|uBtp&Tr0pM0T0dGbOf{r5a z@~j7cJ2eCu1|g*RC@^_G5cQe^@mJy@<(URDcBvqDm;Te0l?_0G5yVOX5l}-xEC&XL z6%KVrzc{=}zT)WDQRTSWU%-j|{2nL2KP^r(LT@1K~nYC$;%eJR>F4xSqx%}Au$Ccly)>Zjjf~ytFHP^sr z7hJQ8m0g>IBU~r$vv6JT?SbotpAN1E_w8`KYG6)BpLw&Dv^-o7?gkZb2q5++q*#xMgY`a4U(haI05yaBJD?;MO^7f?J=QfZHU? z4{lQ*O1RBr=Wv@ne}>!Kd8gdw{k-Nje@TGb{3!))^Y*d1%@q@Hn>A^N+jPx7w@G)G zx%KXv;nsfHz^&0y$F0Q8#Vu8Bid$&N121$m06cGQjm% ze}e1EvJBTg!yT@f-}78;l%iaPo$XxiOGmgYGG%ayKa=7jAR^Ll5V-L17(NYk>{+{R*WwC{wybup{G^C3=q?|EVNL4PmWM_zwypP=~D zKJ|*Qeb#Fo`~0*L`(jsB`?B^$_LZhW_SMB-?Q1O+?dw{!?CVoD*f)SfT9g%%6`)*D R=3-!AWBU&zS=r5j001oxAv6F0 literal 0 HcmV?d00001 diff --git a/templates/regular_gg_pl_grib1.tmpl b/templates/regular_gg_pl_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..9a24cbf1382e28d882b5c8eab2db616d2abae736 GIT binary patch literal 108 zcmZ<{@^oTg$YEq)Flk6?_}|c!!u*1rS)7LfC;|ea3=B*V7KCJEWMW}7FfcF#a}^l= nvoJI;I537=0Qn7#;TEjLE?j>Z6d;NjcsLjs90foeb07c!d58|K literal 0 HcmV?d00001 diff --git a/templates/regular_gg_pl_grib2.tmpl b/templates/regular_gg_pl_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..00ac24c1b87792bc7ec1f87dfb725c71b25239f2 GIT binary patch literal 184 zcmZ<{@^t$DpMi-10(Jl?QAUO&1_l-eM)vE>;ygeBkR&UJ@L&cK3P8-D!SEjy0L2=B z*a3*aQmi(c4uIGOtw4sTm*WBktv4P(z5+;4i3LOg!T$yz!3bid0O_^`5Ho>XQC5gj U`v#CC)Ol=d|AA~)c5@&A0L6qXlmGw# literal 0 HcmV?d00001 diff --git a/templates/regular_ll_pl_grib1.tmpl b/templates/regular_ll_pl_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..a6f481aa66fe733f993e3bddc718028ba19ee7fe GIT binary patch literal 108 zcmZ<{@^oTg$YEq)Flk6?_}{QRg*k|wS)7LfC;|ea5DHE*GBU9+8W=)QCfLK7l!_mOyC;(!a0|5X;R}M-5 literal 0 HcmV?d00001 diff --git a/templates/regular_ll_pl_grib2.tmpl b/templates/regular_ll_pl_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..f393c1a42beb22772cccc98789d639077b7302cb GIT binary patch literal 184 zcmZ<{@^t$DpMi-10(Jl?QAUO&1_l-eM)vE>;ygeBkR&UJ@L&cKj30mm1H*q*02C1b zVtJSp^W=6AlfeK)FrGZzz#!KG!9cze3rG|Q{x<*#Mi46nNc(U=%mi{pSs@nLH!v_X SaDfy60UO(YAj!&Z4g>&Y*em@2 literal 0 HcmV?d00001 diff --git a/templates/regular_ll_sfc_grib1.tmpl b/templates/regular_ll_sfc_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..e87fb114e4e9230a3b15aaadf2cfb02f4cc86598 GIT binary patch literal 108 zcmZ<{@^oTg$YEq)Flk6?_}{P`$YN&}=V1WSARr2%;3Oj>6APn(fq@}dM1kQy1A_pA hJj1I5Ain`5R%*b0f&BuA1q3`C4P1@_AeK20000A)4Uzx= literal 0 HcmV?d00001 diff --git a/templates/regular_ll_sfc_grib2.tmpl b/templates/regular_ll_sfc_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..c17ea573be607939e2db1a44c128f0c2fa685235 GIT binary patch literal 184 zcmZ<{@^t$DpMi-10(Jl?QAUO&1_l-eM)vE>;ygeBkR&UJ@L&cKj30mm1H*q*02C1b zVtJSp^W=6AlfeK)FrGZzz#!KG!9cze3rG|Q{x<*#Mi46<$v7Zaloeu;eFFnS0~bgE P5U{cR2a>Gp=0E@dH~}!G literal 0 HcmV?d00001 diff --git a/templates/sh_ml_grib1.tmpl b/templates/sh_ml_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..4e2275502dd1bae5117f38a0e2a80a40aa00acb3 GIT binary patch literal 10200 zcmc(lk5?Plo#+Xngr$@aOb8(uV~jDzvMhvt|Ckxgj7Bq~(P$)%ej?N?9Hct;KJo+j1?0^cFESQ3k9@c`i~Qx8V`xmtc{En~Ycwu-35`FJfhI^l zMibACp-FF5p-001iXN@(MUUO1(exj-q9=h>^wj-olt1%RH0!5psOVJ%DlLB)RglA| zIzAc&f76P>o?aCFEsp9QjX;T{dnmcxj8ZSvqlVv2qxA0zQDgOAP~+_k)ObsV8uK1T z=~p691K~#X?Y~BevX4;g6ADE>>qMd64pjZv4^cVsZ>ZQRL$e?sdise|XvUuzH0_si zG^JmICjBH6P55vVeVqSW^sy-^^4V8q$aty?c?|)Oi?0qMro>uA`o)t-+IJp79*=Uv zecw%nC1RWAY4H^ByM+HcTmQrL|K9{9apa8Zv%+Py-2AWVmjgF}SnM<4*tQ$cyz(4y z@p&WgjzAAScEtid`6moK{?H1Tt^5SkM!yQWR-Xr-6{LXezMp|N{&E8RRJH>>rtE{_ z-ntDX{4fzp+RTEEPCXBuNdF0RI*x|2J3fLGBl!?qaS|efk3*Iw3*>&+2o(tl=;9v| zpy#^Yf?g^zK(F$AP{$`PK)pqo&`(FhpzDE~(0k8(2l~~-KS2M{V}ovg^C9$yk3WT0 zj(!dOY3>lT@fRNSc~K?wh4whK`~5!XYjG^}w`abDzL6h=?$>8Re=iu;#2mOcjUTKH z|5a?RJtnf@JCSj5aqzpz8xP#BInI6kEgj0>0|rZ5CEv=Atw_I>8{RzgfZX4H`^2}h zWqalU!K1~0_*PC?1|ASP4CQ~z#{xfnKyXsbJ|OpeqUu}zJn7K4Jo$#`0l^Qy5PZvz zK6w9I%6~NZfLuzQ?g3%#Q~&jV(9!3A3iS{6LFtbcL)x&6pe}d_`peD-T+o^ZNqA1E zTK7Sazgi9XL(V}@2!9(q{!2md*w?ReAMZaIOlx>081q>U`09mY;CRh@!Pw`&1}&R^ z1krH{JQ)!LKl=R7TvCPwy!7WEfN4Fwpe<<>~Z!s3Z^IQe%%DCrK#RlxhfCnWj7#|O58|MW&E)RFGze$%xN z$-k66f`DKQD(*e((sK^!Q23V8SomP&_#S#((p7?l4~t9=rZF z@P}asCx5*XlnK^A(eFnBZ@oovF`<=Q_K76!$kShdF-P9z;$uGpi`f%g=k+A;vGU{z zsQ1N*RN`px(D96*Y+nUE7W)c!c^oBMYvgtAWcfPB`;Hj6{OURIXh{L*biNP%+uLt)FWJs;V)-o) z{aykmf4dm?`C=%T@!HQg@Pof_uHUOc`QvYJsRk9O`whS)wG?rQclg{Bb^~|hm5X5f z?PuVmUxQ5#M{~!nJ_jBu{1m+VCl}|gx(&W`>9K%$d6fhHmj`T|T?52qE9e#e3zzzX z*+A^%Gr%`Hg`6xegnR#+EzNU56@2OkLGT~HyAV9mULK5Vso?yF!l0NtFLHOjQgDYG z{~mne*B=7-XgHVdtpW>w_!PI=+5u*}{uLaNMRM=_nBh(z`ieUtSmu6u?`!b*fSyzR za}HQ=_|Keq-^C?uPH<^r3}mN{fZ30p&{!WP;4?3yAeFWPzMlLO=+MA%?yJwg2IWV1 zobuBdPWWE~VDnrbXn*Y&+^bLZb1GLI_)e!efK0vsR{Y1yT*7bKxx!2t_jRr@;OkIu zf4aOG_%X1;z5DAA1BC`Zqn#hzL*9ZhKXXv>Ae*BBipoDktag7r-Alq2L zz4&S~=>K9LoK=i-isyY`W#}7$*uP{2fbaYfyacv!_P4yCsGj1q&!=+q-)tNd`9Wa% zyI*n*|MDX+?v<&)A4*<$|L5%wPdtfV3!Xql+$XbMc;_vSeQy#x+4EgcSy&lR|NRme`|_W`)Q3&n$v?WmfBLjH@Y2ZW z#8X$R;q>9Bz__nYayLXV+_Mj>IomtYfy>W)zOtLKk_+OJ-p5pe)ci=)jK~2-`!mT zuk7W6w%y+VS1aG+j=4VvEgyZv9j?2;Js0qCG2eS4@a`k8gGahP;mpQJ@a&3sBKcom z(fn%TufR7WdEiuAKJdjY92`{+a$lZ{=ki|-2Q9}=1)hCnflEEQ4gQ2p0B!NrT-xJb zf+s*N7ym``#L3rk-(NF)%$+`5%hlz6#d%(#xy0cZF#Fy2z*o2IV9uZC!0)S1gSHdz zab)AO9D3nD!L)w;#F=|yIB9>4d;RF+;M=bkfb{oDIc3>L+;ZGH@WvxQ<9Metxi-Yc zC3Jd#V_E+`k;wK>=-V}5zWfq+_LB%M&XC0Ya54={{N`OQ=J+qcQtO*sYP|x651oUS zdq3npjkpZv?Iv=jjf-5?n*$uRGXbj7PCy^jzButj>$BiekAKc3*8GA~KmV|X z3m=}azn%~nzTOKOzrO~jee^5%sZa9ZW53Luc=GV4$PL1;DIokz65-dn4r(gl*I|TT zU46jN1G$6nLtTU)J7_x=P54z_!vE}nuJ;zW9un<*3d+ALoil{m`Bz9O*)MbVeT{zs#?6_7T zNWTn)obs!2bkvXp6^UmQej>^+>zTIQfg+3&al64q?UDRb5fG#7q~LQ^`a$)5SJSB} zW|S8T-Zou9SM~G8O>3R8%Y^0a(zLCbD8_r(wbS)@F&QfE&)(%<)1VnHB%CRAreODN znb>@;0^iN8b54^bc@f%3oK{U?CAxJaiP^A(5*@&_L2>Ze?KYm3#ZSuEBfjb@shExK{-RVrRqOY<~SGRERK*5DjMR`vZ-nv5Zqp&C=W zGL-MvwjkrD=FvT(Ufl_aU=mL`z2@EFGa8?}9$BmH%_zoi=~|SDFkp<(&Ex$<(A1ri zDzOSG4o);BYh$F>$p&KyQf3&^u~2D#ob#SymyRNXo*_0F z9Tx8^?t}O8Ql;gFHFQ!_;k;H>01w*x3nQ5{tc7jX(76~nB%e0BbbNgj?(jxI3{_EB zWvDc6(>q|1&W~OLgbqIIzR;O3(To{aRYUR)+Kt`F8>1r5kLw1^0^xOQl*O&N>h2+$ zi$gAT%I3|jz`;CXd`xgEo$`|{h(b4t)LGvoSmxM zvQBxLp|Q|SW-v)eB$A*FrFkw1xXVP!`mAZHGUC3OQl(G@CNq8wm{ZQ>U&UIn8Xdz= zfr_CG`A(4wZm^CJdwKD$8)gwz$GELyOsZkmdEJnNPMZR%OwByru8B~lDsE+6V;V9C zj196bXv5(%G;3C%5O_&cM#6NXeovPK^k7}qOf5;Y7~MJ#MTtp6V>X8D;4$9foPa5s zxJ?M1874>eynZ)=!tS$~LQMqY>Z9%@|y(MA1L7p0UdrXK6MpqiM9?=0-4>pIt`Pu>Bbk)-`P! z9%kBc?1-CkmU2ta*3zSP4=B;zQu0i(s#172x8zK#p~ly&h;{A*xNQ*WQ_jj8&{|+e z4;Z2i>oPOdm)%Bn6by(2P#K(XHpb4FqTI8Ee4|KR=3BSdK`VM2Nr^fPLlQoa2wYcJ z^Bs=xW68P+G!jYy7w9nRhV+g(MKwScX+xPQh{vWNZO88xbwU+YDk9C-uF3G-vX?NW zraQT2YD+jxEEY|=TYM!Z!&EtV0aGTNR&ZDC7N))1y0GrHx)c%=rHU)2kBl{#9pXWtO7QG*0UMCvwk ztDs?QJGac{g_o#gYL^(3xwEU)w?)?k%e3OmO{zAdBdwk2bd2d%3Onc#XY*OidCkqb zBB)t1+E#5SanE@|%qd2fxenjA*)(&~fV|6oA1E<|7@FOg?i+fD^s=#XfrCbysE z;Z-A~YQq|2_wWeqvY2)PaIqS9#2EJR`^Z{WJkw0?6G=)l7Ngse!-`mXQ7gh?*r15i zj#yI#Da16hrd=alAV$C%$Jr>d$xu?3ZrYL3>cs3VODiKHI*WUh9l8pQPf_bm)Cb(j z)?#ry)rF_fW2L&}d6S|JxXoiAt+!-QVD2tegVi@-S8D;R4oGlbv3qVw&5;q zoHUZI<6-Ee4Fj&YMF+DJZMmXd*Qa{x)y0NPT4qXzhpiJzuR@0IxoeODDMR>h9tcpC zC)T~i(Bc^duG0HWW->&akQ*-BM8cFe`FHbs&jx`Ia+4`x2C!MC2JdmKsjnakqV8N! zFziazjfpzoPR3`unT=Z0_4TyPc-Oi^?a6ylv%Q~bG=!U3vXd>=Wh$?ouA?WF{jyn= z0EX-~YDrc?RnVyvH}H6- zTPn#3&z9*b!4`2HIiov1|=F<5|0y0u%{I90i68WLb7P_MNJqRAdSUN>ZeancZ?8Dn_uN5aWnQI<2{nf67EB@hI?N@Dwe%gEkwIm|7=o%;cAspc=dL)HdA$DNNn!5POXw25x3!oY7b$DPUy$c;yh?tGs6_P;MKS z<)$kLmMhAfvV@BowaIkBi7DJcL}T-WM|O`M zD=)=+viArmr&)!aO#;T9*Vs5?ucrX5g{b@}DP^RMd|tXaQQZwLT1H($ONF;fjGnv+ zN99cC3`x?-6nC@u;FGBWpoQqwl_>d0l0H=$rYoh_)M2_v-Cd)IP#`^U6h5n6H2Q7r z3RoG>tdN*=m~F`|U=?s<_OM|bR|t!g^>!D&g?i);dfU2gk25ctrqn(qfVznpuu5C2 znr3@M-O4&LjBO(0eC48LTL{ua!ThU=tE|J-Z=aFh1h1RcPPJe=SP{CdDd%?_8Oa`^ zi_z-h`f`}5F7!~<42H(SW0;Se!uV{Ba|TUf=COTci|(GqW23!*y|r-UZ2#FBQ-u~% zPAU5+H?_+~s`~9K?tQ}oQ4KnD-HI+{kMX*4jk+o;z?U_hmK|ZT;Dg{{)La~IE6s`>CH(F)y`3S_~8wH%0`Y>Lw=mrT^|Xk-R;b8=_SZ{{Qr%Yr#$r;D$L@#5S@ zy7g%5*>L)vH%h(nv`t^{RuxKgm7-PaoXSfFn9!06!$y7ub3cC%y{m0}dIT77VMv?P zrmv#!V(E@3IGt*fG8B_Fh8IEm?sOxrC*jWACUjeuBqL2FCXWHOkCpENb*c?d2)tgg zinVGgv^R7$%0ZLI6%fae11UG;1(2tp`+S+TAT2}ENww26iiCU{dK;JrsURPEZ zwish=cQRMaB9}xmQ{vBQFQv0ovhmEB(rIsyG4;}1aHZ+1wH_Fg1;~>zZ zPU2-)(oZaEhE#Wvfb^cVO|@s-fyRqg(!<%^Q$2$2GxP3wWvKlwJ%&f-lryPjlHfV; z(<*JkF|Tgpbh&WSd>`##=BZRqyL%0m5P`FmCdN9OGn{kBOsi`!zqpH9pvsCWb5VF) zIh1a5&t|b$E8DpFZlm4nDo@7j$A$;e}r;_9`#-O27UCp#v)}U=<~x*%qC-py?8p z>#nM+b9W$L&Zwg)?*@gM7NrgJj?`nBJOdylFl1m9SIjkq{aG3ET7_BKr|3V}7ruGw^=j`wVv)oMuq9xl)NdM&^~lRW?=}CQO0kwR67<-Gf!TDycg2xbuvOS zV(d77C$ZGeRI8rYz@`}Cy7Uv|qmRkRAFYFl(wXWIC2 zRIPrB8F#Pi=hZTPXx1&MLhH>b2fH*jsG3d4TV}$|(PkGx9=V+pW(zUT38Hexkcs?m zyt$xB6KB9Zk-{ZW#TnTpxG2FCEOnq^2N9oy2kV6TaxtsPcx=iz<4T014_3?2v~ABg zS_PZoQQU*r*TPTluBLnAC zN9V*9;JRs47me@aw5xa67+pDK)3jReosPiz(lET9?KI9pZes;5bSxs_)=4nc+O_s zAe%0esFOt@j7YL-ND<$KTC%UG_rMxxK~qOhQwx^poC>7oJfFP%91ScLCnXk}njS66 zX*in9uLAZ;Q)Rp6RYR(|L%w%>m-b$iP%53DY$|L{y`DXrF4K{UD^D$ycjb3qtfnF* zbJ#W-DHxUYJ4ej*IlSym0)>U_ARQr114DBA1&ZuejhUaR@@Q8PL7~9hj8C4d(rigQ za+z8HP95Zfi@g=5Dsv?pWe~dhRn>X1Y`rz)T&dmf7^mHo&^E70H^nNV6?obhuat^9 zhn_Dz8ze*MH65R>pf@iK8k2GSREeomSeoh0n#!(v27@HvoHotSd$vA>!5U3G7Qlp9 zP}hW4p00Jy7~S9in~@y>MxSP7X)2kloo$t`(Sy=h-4cIX-2o(MTkyETaL8urvJ56g z$Xi7BPPGfY9)QPGloMs1o2AQgiNPjHD4LKbTUyemGYVueKuU4Nx!y~?=Mq%qcyiuN z+FdYR*yp^>tSUFvbJqUC&eSCXoi(o6!wOVeSQD{j5M~!UI-FfNk8A>G$U*hEWmV*7 zdj)QHl_m{}(?n4{c+k0PS-L=LT3vfNe$1s@XLe8Q6gG+y=v}o+J(qD^A;atQ+Rejk zK-XCS({(0+x5Ru4XfkbyTJ-hkJ<&>Tn5~GWoD;4+Xu!LxO_UwP3AUtD_YGCX+v3Lj zQb&ZjvtY_piI*$qb=60F=m5xg{7>@>BhQy&tIzj{yv}7;#pyLPifG77fO{Rdt5`nZ zqoro{zJ!;5E!%xIl$kzW;rO#-<57O#aq2)i^_&fVuRPYyYY7zDcgvEk zi|IqooIwZ?J1}-w+qW%yTSo>!;-?Rv2f0QUVW}e)uC|!rJ`cr9+Q+q=A^mUa~*l<1=n?L zXJ>?qJ_;EqaVSEKle}FFO1W;r3EEhOOdn(&YoCrizwRk08^oK`BVdQSR2g18;@Q#+ ztK8agJ%BFNr6g=(xA$lZrit&ZG!Lw^~Lx-Ha;+i)n+eqmH9%AaEz3U?Jd z#yN=2;maco#oF?$p0las_}Pg|H_C77yX2ItCwV8k?^LEL(ztT&t|{=3TjW)1Gw3K7 z;g_H7Lq_s=hWOk$rd+pbh?7+5?+YP!&H11at6FkI`F!qK$9x9nbe!xulUTH1$u#$B z_|{I*hvDYo+3*22?y097e#^4a3!Gi-!%fS9vKDprcF=~a0%Y$NX=Yfg1a(%^Ad z6}qd)pe5pc@-|;^G1E|nZRK~sVMRCmEBFRmS`wcgnHvi-E{8INS~yYdt|dnEqUl*j zt(B%T%@Mg%KCGa}vQ|FCbh;bZ(w9T>)-KFgU|`dIPrZ)Mcm~Z4UKE|cb|vwqA^G-G z{rHF`kU!}jH(+$?#YjUG?6VGu+pvIn$q^x{xirfwK9_Er!tv~g3lm4j^R9_YEeUxQ z=2$uGzT)dF@z-Yj(}E;|xJ9p7uOF=RRhCVXp?I#g(|eLwea*pX|Bh3F7aN<=C7D<4 zAn#;Nu?G>Pu?bR#UcSJ3hJ#jm-=fm4hPO(4GAG#hKh3$cxXc(+EIQ7>~YJG0-7gX z%-OxNBK75&-O=W1M+X#uMLDxrnJc-X!WJ*-1-$Vopzx&EH2uW1cm*3)6&Y@4Z$OZy z$g^k$E>4+Ctov}8*O#42R;xBlEojiwr>Z4T=+?RMbP2g?xe0e+tkryEUdNLsOEwug zcQ9$aU>cY(F9?&Z>rk|9K@}#M0tV6M!)?l?lz;-`Z&|O?tA?uFOk<}l=;*{L2xTG- z3z8ecyLhE(HJz3W=6FC=NgW9hHTaabE~6p82?#Z=*bA`cJQmrfZ^*iBscDRs2W6VB zpPclxiTd5GOr<0pPD28!Xnjp~WWug1r8o);qmnJOtdX20iyv)Lv4^AO)nKtcTwHQ; z9hn!j7#CGOEJ|VKujN)s>NG93QiQeDX_u8QabMo1U1&*!gqB&|lyKadC^Rbq2N}Rx zpvBr^sWhzehpG7F&{J(O_eH$S>*o8GD|vPHGNhJXSDT;SC`!}WtgWO#c`d=5U#A>F zSyupyWcHvWz~ySDXUu($CPf>IOWQ1%ebm;cZ^`H?Oe2 zT{@8L+s>LsI-MRdCMzd4d6W6wtOE>J1q}+k$T7@Hc=roZWkGS55~Er)J=rOm6f2*M zviI_CJy)ebFY_erxqP4+Su-{(=71UVjI%_-(+wCy;eIN?o=R38L`*Htau4H}1>>K& zWf0Iy?%1LQb+0u7C>HktT{#1aA#}@7>WDhhZmUt;;ZGq;rxob5H$hw}-ofbffKEas zsP>o}_LaOTG{&SlUxpVEcaW%K8Ds;~n=oFs2gRc;d?x4qk&4T^jzqr881M3Ehs(AU zMOeRQhiU+1+6K>nIYqmF&g?6dB-pxni`phZBYKz2U^6tU&Kp91RB|Y6`Op@0^eN?PtLm$OoP&VkG^cel-GlK$=en}V2qNM0)AstK_ zac-JR4_4ArCPhC5G(ubOrXch9qAt`ts)%y(?OVA$igoz}ma0rdq9t?Mpv9JJGtUAo O(u4Bg-<$t8<$nYJ1zuPH literal 0 HcmV?d00001 diff --git a/templates/sh_ml_grib2.tmpl b/templates/sh_ml_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..dbab696b71ced05fe49499dc6a69a5781cbc3718 GIT binary patch literal 10134 zcmd6M{aYK?mA^s=rj!s$D4~QBf(gc0mW7anUS>w4x6#aKG#W{xSA-BCWEo>3V=5Du z5Xw?QC?%8-q7X_cp~P_rB`l!?Ml2 z{6xgUCxUmvvj2x!kB5b`#!fO=tgmWM#A6Rro`-_<)gyYCf?2GaaLs4;;ho|oIoWta z{((MLaq4qMK_1sDg60*)AIe?IgyS+L@h(^S>W4kbp-YX*KUr_9p8P4Gx=rx)C6N%*qbu(_zdeC@RQpG-FOk0wRxo`ZGu z(3i0Kmy=`a--3(kKVP0wALjayC+^fDPyI=RBq1=8{=bdLg)jFIsiY4<-U}i|{uYuy z6^&fVnnEgVBIK0}7^x4z$ZMUgNJ~mA(k9+R-uzP{^7g4nCgtBR}b* zke{^sk?zR|DamL@%=9{@oGF|0!1kX%6+%N=Ws`XKkup0ZUad z?@`6ZCo69jtt->Mo}#e*&IaGP+$_~6KJxuTfB*kL{5Hsyd#U8Es06PRe{J%%xGfiz zJoQVzE~HoApTS>K>V!|X!>>%@bSz6u4z#)6wtCKy+E|Mku`^&OaZjQYig2payI`v^^+{qi9K-ixshkqP@+@+18( ze@J`r00}!&(48>F`Y^ z+@G3!YLg$b9)D{xE{Pp_6<-0LymA@@Y9>N&{P8yM-XErc*Q$a*`e_zu`r8*1e^La2 z|M)xwh`Uh>42a7BDcKx)%K3&gIxmX(K?F5Hil3Lf{=p0|_qb!?CwEtXxi5K4(;M5s z$6tI1P_>=l7iko8@B4?LPyRVF^kJ_5U!M4Bm@FY95W+f-p^Hl^(t4kN@|lktna_WD z2>fnG1o$Fr!P#5X`Q+0T z=Hl;~8T-dwOvRIHKw8ldK%Qe5cg>LW+2{KwKILvPtbZGl@^AJrR$ltV=ijXberS0O zkjH;Ec|LCmYIy1h{ODy?sK4hX#E$S!Uid*G@X~`FC_D!MskjK}hfl4AdaA~xLDgZX z=k40iZ?B|+FTU~A#K$I^^t0`CaM%(n{l(u7C;oEvHV`v6Bef6N81I!u!2M|uFj*ES z&VNWu)IQzA5MBO>|J4Vjwg0$1G4vJ+EZ!tTiNnd#AJpzKtAp1V-zjP6?X&P?@!lTT z*lwHH6~dtXOc!+ipO!+iF=OCI|2)J5UIM_kemn*?zKViZK3oEgVgCip{0$D>{cWri z{LLQoL1ZuRO~>;8SMtT59MAJGVijlaaoC92;`>|7+-3KpA@T{W0(* zw?)Ntr`FK|Pt z*Kn{moy&Z4+y_M+xtX`EY@oXc1?Nw}A{mmD$ON1YbRU81np&WMW5i7@C9{B|j>QX1?{kb>P=& z!cb9b2cRph1o@(LKRE*F}tWHV8&9^#VUXQyzNq z**@lKX(T8J8pmI4JOcjwR@}ra(ZkHq{?JSL`ti@$m7$XBI}^`A>ml*4elz}S;!xTY zxdNQ2@GvcF-;lf;bBB2cSOu-W_zU>i=To7`=^Ehu*xSrk&n5zY{o)X$Bn)%uuZ_Ug z6N*pXvNw)bJyQ>CypqoR+%W|hzrkgi4phvK4+fapZ#GR3U;le3;;px(eJ<{Vz4YaY z_E&S6bI*P{`R&-nQ2yt@_}|qQH=KP;;P8vanpxZa?cn;_;DDMtYtL)cqww`rapKNW_n2 zwj*vZAC@MM?|#t~`p!ph0YiJGO#OHFnX&dgruKZiwD>oF1)dm)p4jPR0nN}3&|Q8c z{l)km^IB~j@Ut}slkWHoh&kXfUluMhzy9qYc>Uv_gW`iV;P3aRfe-)MCe5szV4l3j z0PnrmKe6+)kNNNFnTcB8*o64hJJRFjEvBzK9{AN%DWm7UDgD{Rp7iCB0uX5{lwO-d zL7{XY^qq?d%%@4wKtEy`|IcTJn8;VBz%z6rFu*=!Vy#O+@;~Aye$nM-ng^>VrtjQj z_yJZZEdPI)P(s(l?`mrSa&rfKa@Pv{;`5u}Deycnpbs!_#%?o>|27K5{fN!<8ZrSD zdoT3t^WOxs-|+xlNh{2i2_oc*-;zFm>H~&5ax)aCv`oxQ?@6L(=NVqMmia1l3z)9h z0Dd(dJJIV~4}D`MUHbdK-k$j0`7L1O1B8i+-2(pj=J&)5?Ftn~UI+eVhtIsbbeBO| zg3Q~0t_S?BUE=qiKE*s&^**rw*bMWj%r)`bzmGBB*@>3^G}sf0&s~||4)*{*d1@Yb zN#X&3H!^^$cWLJAkxDs+1>_zqKqX@Vwc~`-uz&`^0$}wChMnjgSOD(C0?0|;=@={k zxUs-@PU^bnuz=Er1%x~-aQ>uBc~V!HbW-lZ0^g3p0*UlVd+v$dMlA4B4Hhu)v4G+( z7D#oT*lEWCf?h0OYQh5aNuS^(7Pt_H1+Wvl{F6QeCw4UVPi(E9@bpQYN-W?#u>p2t zx2YpFLP=DHSZ&m1-gs&D6eQ1BSJCVb-|-h^j_)$*@S4&n&soQs4hX^>D{tkMpE4;)SBW~otjoa~O_hH68*tlu%$={pTb z!2wBHsxcqhO>dsBM}2shpfBfub4#wubSNXJGJ7iWz>2B&@K(*1k^1`=G?OC2&)H!FkgYA zspmJ{`y5JMw+9TueJ`gNPC8F_{M zR=GzpVC^f3qSBETx>-)K4SaacJk2 zV4+YxuHOI##T}#*87mkkA}=$Vej}GRY>qZL6H2+W#1vMcXa*wVITDJ#*JEEXCUDsIR#51X6Wt1{e9Y(Sp zLfHWoCF(V&1LfEQBLSom9)l6R1uaRJ3U4BqQo*ik`(W6a1W z>L{mqoJ!Lj*oSq=s(HgCkR@M6+vSncG|61{Evg}_U*90=gtu))x@P%0%u=lJ%W(zS zs6EmoL)}QHIZKUWEqbTMMGyj9*O-GS_t99lFK^NigWbV+_Dq8c~4e zZ>U`=TKIt?XEN5F{vt z&S+vVk$4=tgHPJMc%nIgcTz%r2Hj8IMe5OcWwYWw9zae!kH&#s`H`RqOBS!12365Y z1;)!CP~FvV5ge(rRKuvXBm17C52H;m60MylYKYtAu5(UtCcG?#zE#e4ir3T;s#+zb z9xGhs9qBvm@up_oT~#_6usD^7f|FBD)X;sIk>*WxIvQ@+x9tm>^49XpifhSHt4k(S z&q>*aIG{{%kY9SCRaaBgEQzxpL#Smy*(+TXH>hf%eJ!Mm(QS#0L~l+T(c$UmbK!DD zVsWgMGDJHUOE`KySYEVct%KLK7M$RB=mv!xCZtm93EB#8~b< zV=B;(d(~moEX<};m2EHF_XgpLDga9_YL{mg%~?ySGQ+)mBeBby$5y>F4hMZRe}*1$ zAE^h`X@)fWtQNL0+IXVZP$vzdxK^TZDYA^q!uwLMd=tx(HlnTCd4UMSr7_k_Vi#G< zrFG%zalKRQLo4N|_@%Sw_=S*Ar7!{ku#?n zyu-i6y-P|i+$L%>JJQ>+plw{UUeZC1*qe(H`zI zvB;NlC&iuC2T-YwrE7L(Imfgx?xy3!TpOusz5vLocsKPh(1tXK4$(;UT>)u_6h08O z#p;gH2g=Rt1ge=l#*(E*Bv!L4R!HK=RW%=prKk9~dc>T@O~vM^P4y=3kRg~tZYz$) zn{=h+8HW8_5=_e3HMLTFEa>Z&c4#W(MUq-)l6KOWV)h9Vh)y(>953t9ap@87f@(WA zQ<)QfVKeVnr7)~IilL|x^T?G0HY2MNR@nBn%7JheN|=3W$|WLhER=rIYjm>(h9 zQHD!zbM6=R6i-1ce1|Hf`jJJd2JNf>e>^c8{9Ql;{m^69_AvY zaF5vwlXy3ppc%9%P+Z57k5l{PO>s)T4U5!=Yg#eCY|flux&c^-Ot_3+55}pZqzVZH z+LXtTL*r52_fMJ~+GZ+XbrLL>LKE#CFlOciwS;I9ODLT-#3;JdS>|ZrgOnk%RCENa z+T+kI*F9C7$Snn^Fnxq(#lYg!Ar4WTsrU4PI9d&5CX=|8r5Uw$I@y|717Wum9;#yv zscMlzDDY@&Wp|W~hB|Ggd{dpNjL_J0Fyc}48r;O5ekJn&I5yllbi0;uo#U6iNwn+sN`v z0X(PQa6^gY^Rs465&TAV3h6mBi`uXlWEpdb4#{zU8QPt5gu!{u08*R`G4@+@yuQcf zQPsjkVRSB`C-oe5hA|23lC7FX9XwNoyHlV#ds`8mH=j2s%)nEf&4QC56CS7q>(P`- zIm%>hT5h; z=ceQ)ZFBTl7sR(^!-masEyzCNRqe_BoQ~&4at2ACs@hlYS5Va@E~1)3RB?)NqzIoy zICPDDL6uA`BgfJf&7sLEL*wPd8Yueiogp@yZi(q6(z9MDlfpLN}NtXsjVWj0Nh zq*L0hAC_(sH$@)wt~_Yk=cP#QxbMP#6Td*@94K$~+T5vhmByLBT3iWo6gyZed?%MH zn(}Ps!5CqYoCh2te!H!a8qn0)cVzv~Nu-F(BUE5~b+UTIvfcodM)Y3I4ViV)g0M7%`u)R_pvnb;w@E;DhU&5 z!}SZQ4kS)!F$~MvEJ55yqzjkRm$V9iD-`7?5jW(iwur(7=@>nTZ&>%UGbFPLkKSXM ztr*XX)7M>zQ-vwJss;o*d5PFv?vg&};Aj=7FTas&eZI9gf;@CbgWH!Z+IlBYBGgp! zH_S_bo1CP=N-K2Rg%#9;!Xwpvb>pQGsNaDo+w2x?6?q@Yuth5}h_+mcpt8qNFMRCG z(4$&h5zKE=?P-!lxS`bG(kZOt{sX8E*mkiLTNN8ftGq%zrm2w*7+j7?K`h>%IwtnO zE>G9xa4 zL8InIeYt4caMx98nZ_1XJ*GW4%}p6Ib(Lh3EP&FY2rNV0s%g^RG$r7aVF&LA=k2M| zLD?R3sO6*=>Cz1xA|ba)7oW@HZdlg9JxPFMOM6UVIs)o1Vf*l^0gUoDT-+5dDA#1u zwBNs!KV~V@gp*;q`WI?M_sHdvHcyygTYFQQc_xKkOTp0v$2wMY*?2Bl9IKzw1;J{n z&9s%ft{W3j_$Jw59u{-NLX4J_%8ZtntQC1D&#$=&R_E`-MR}vPrh+j-WmwH^Aop`! zrkM+nvQz=tWVdL?y9l?Q4=P7_8S2!6 zSqslPct&KRFuq>IX);yYRtyW@x&gbdWRP2Uq;N#vars_cuZ$;f+QV>m8Vx1D3CNJx zLd{S`_EB#s;58q@vq-=ckNeR>^N#L5b;l_|-P%NMK$eJho4Z8uzBy%=Gnzoa6!u+F zig-?BRJ%%Ab2|m;%3W~T?7#=<8`-mlO^!s{OLhTWni-8BHIg^nzJhQLw}`?$+0*&8 zL|AU8gR?bs zqq+g+k(;sx`Ta{X@<92Veb&1Hr>R>sRTtVg@kFh5mSUV++GSA03Co_#m8ji$ep#p7 z0$0>%R}^oJUvWWnRpCuEOqJPG z;U^KFkgd@0w0;3C&-})$e!-EXh&kCU!_xO$jH*guRE(l7<$;Q$SP|8O?b;?%LH5F4 zYC}|i;TGSo8#cJ*fr7!D?kgT63bqg~a61#_5YI0ODr8%RQB4fGpVtoV)3F*qVUf3* z56?#;z3B*APY3mjuv1@w@@%Wh2=k00(tbzZi1Z2Ch(3&$eXIBZ6`mK!qfR5H`V(L8 z3AT-y^i3!e-a7)e&@JLnz zugL4jd1A#BlUJdvxy-@uyhK84zT_mIq3J1aUc>V#oGR$3EKPJ^+|Z>NJH$sX9FXo8 zg#@4p;7ujXX~Q{-86piXx$*3Zzq7FG#cCo-xPx8$&t?o@H5{VThB&NYM0gb{P?UQFXbjcnW8cn;H&TLGD}~(5Im2xl%)r zSC-|@p3SMchQLDEk~&@2Q(T`)A&mw$4Iw;aO4Ec^p0Bkp=$*2DIx{Cy7IU5!r2`^S zJKZYYBnNWiG;16N?0^#0Eogj61Z**Mng)_1#V!29bL~903u03heyrSeyX>x5sI%}B zz0=|pQ%lBtrbiSDrTQu^_FV0`mE=5&g_>o@)OAe5CE4lhb1DkzM$PWL{Dmh9tBxv;JQnVb5N6Em*1kTR~_=#^TRD( zlCV!Zj^KXxfjUWa5+_)a&ppsp>F)>{3(IVg#-L}`P>K4b%bM!vid6kF$`!c8DT%sV zhHQMdoA0*YbyS?+R7GPA1&N9t8|v_h`-{k2BmF?gF1(fFEDodQFQSSJC?c-HKA(9P ztuJF)!|jWOMq9vnqhJ$dnJ1m1Q&sppZ<7n3wJGMYWL3~MiyUNcs3L4dn)cFTq#QYU zm6dI>Z}D&C5|U9eOOuYTtE&n~i$7l|PbofzZsgp9r)5c;U}?0nwrIn$2#uqFek;Aw zj2iiH=Zn<2Rcm7Ti1ERdI!-q_lrxmwfNU#Qd?bJ?x1CuaMR_gD*SqsM-uucMMU$c# z2o=w$1r~E!c7@6!YSKlM zJ8Y>*gJ;Gtg*HXK10)qp6^`1|UgwMi@TjtlDZ z`9O!<29@!BMMqR}9-f!(pf7e5WO#-(ZN&?`)gnUKUuu(t>1Wsn2%I`>KrvEZuAD!) zb*#M(1|ajw^S|BLzE-m68F{TXkR@@>}dfd69Tefdn{t9Lhgdq?v8` z^}4=tROK`guk0zpu=XpXx%|QX`qwwo^=q zx>NRZde3D6QTp|Z_YITZ+r@91n`Ji72*+RCs~jm{>k{&pD8FVy7cZ>RKH$O5n#)sq zq-xC;T~y>;v@K^McH7y`3rXG;QVw_?AGfvqF_J zP=JFo!XD`uZUc&pEVPdrLi@CP;@X$T^+3@^ewV8!tMYnsZX`WUmdU;Fw0G9frqr8!MMuQg&(Hpbyl2d~>y+`>^)s++B9tEr}aEnQ`;SL;sCe8=~~0v##s z$Cj*7l6CJbEl{vPH?mJ|&558eUBNi2R0onwQYbja?{K&;X6ee2-NFtmb28<1Em1-I}5GEJ~#e2{8p(FCi!Wk!{L&&rjqjb@VBJ-f24Vg5q*&_Kh zR~Om7iy4+#6wQgeGW|SLa7$2TN-U@_#)%cq8%4p=KyBvtSA>z+9Jy&8KH2H3OglJ5 zupMpZkA!jBnv=i%dv+n}(>JTuL~hWA-^-q*Pa+)E67QZe8EkcRxdzH8^Fe)Q&SX=& zapyH7io6mFEnly(E*sMvi{EYM)@VDaDP$dLu{I)m=n^u^&nTVFi7-!*@vkJ|wHH@} zqq(D4ui!qyC#PjY$|zUh{PMNn1%B+zYc5>0JqUFMlg30Siin;cBIZ{k-eM;x-dbvs*~?H>nhm6ZkU8ng{R(JbG5G~^V^e` zZ?agpLsxMz5)EtURdx99$-12)rH5qauI3%wSkEmgFgjz5)wT|JQo+w#M9Lj06&02Q zVGra^NR{!(Vxq5+G zOa;$fWHN;KhUvDV6QRw<=aw~Waf)z#TBdA4lz>%Klx{^h#=DPJ8a6UW;Xs~C29(y}Fjj-ky6Z9< z3Y(xX{kqkIG#AjyV{%N?Wl2k?)NDA*Fno5#)yD60wo;YC3`M$f5{S{(Wb)(&uoh}Dx0ot*8=N5`AtmfwTkHcqJ8RhZz;vUa z&RVXlCAUE1rEPDz#$s;8xzbyS#=<)3h>CVhB2m;4oD4Y}&E$fy*VZIyqtVpJ+BPfT>?bp$9C8=g~9p0k~X_da--T=+l{a1J#qr zlpnzfsum8F_u#pT>j$1 znzJHp(7+k7+MR0yT)uWq6GN+T{v{qcl{{kKF_xX|q-9j9b{1-ccNII_tQS@_Va8EO iw4Gz!&F_|MiKme?X_7KVxTKykS@JE$MW`kBg#Hiu;GoC= literal 0 HcmV?d00001 diff --git a/templates/sh_pl_grib1.tmpl b/templates/sh_pl_grib1.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..684e4bf42ec789b8e03818bd3da5287f42495ae9 GIT binary patch literal 9360 zcmYM&cT^KuxBzghYZnCs6a@<^iVD)}OlT>D^xl(6?}Q|f5J*A^y(ow%P03kSJ%2e-FMD=_nw*Gcfa}O-v92IJ7@|v&1**e057j-m&EnmRU#eqBB7Hz{u>8=@&75v{PyOjNJ9Udp8|KhhyFLd__p__ zpzGDB{|wkb{wXkH1^Yj1=IZ}5pkdcfLDWvmPvPlN7k&yHNU!=S64_SqpWYhgPvJX5 zfBR{F{rpou1=qiiK=zWqflt1FLU!^bAg1mrh?%q=wBDM4(q3m}+2($-W7CsOu z8F3tJCQA@}<$2J%ZZCovU;-C}d;;S~tH8+H+u^6_fq>5n7!0Hkz_}4PWXiQ%B=bf& z5-_FffNNVT;uEQae{1~(nNXbs`0sxVI65NW`j|3gR&Ny?^3Q3|Tcv|HJlG8{Pc);J z&fd}QjhX_6CB8zMQc94b^S;QkA_z&|ItHOkTLe!3o`?`mZUc>DWk~uM4(M6C7x6zH z0fI6e0^qPnsJ9s$U&uxxR?kMJEL{vAOPCD&EqM#z)|CU@U+|ze`7JQZrG@v+UJg#Z zI~<(+dn#PF$p`jt<-qRtd@%eRA5OoXjQ9|S!Uv?tfva0O;NB^-`faO1`U7TW!r9^g zMBKCvOnzzy{nq${<7MwaaN|W#IqY9hrV0mbrf1-MzXhOlcLWkJOaW#pt{@W@#v_4S zg25Ty_Ya)!r2y@}z`%`-eejO^I52D|3-R&oO?~yj1|OPDhY#LvhbKQ9jD$l^;N`m) z!_k|@!_SvA1GqtnNNDCo*t~8$ke+Yqx4-N`&hBNyCu5c(q`M&KZYx7V*hIuPA`Oha zv*B=2>&^15qzpS0-0q07mSUjBGcS32wZxN1h*6* zbl(X0&Yf+@#DzYfe>(-3vSBj3aZoujgG@tN zveuw7XKhAieOZjeE_@Bt?t{RIr`^b;WCz@ol8(f__W`GM79o)Xa*=Tp$%wz?1QNwQ zf&~Ay6PZ0X7V)0B5%HN^1wW;a1A~W|U}IeX5DtZbKHV>Xh1qY69nG1*KjzQ+`I)_YXU;@G4 z9>8xm--co9WiSXE08Sqmj?4yJ;P_|{+?C-0uvKEjyDS=xLfrxVt8~D=(Y=87)g7Q_ z$Tu+LLIrwDk?@2%_p$d7q)F0)K$wLBC&Vv!Cb}%?0 z6bvaCfCQe(1wnl!?7y7_PFh(F=iILc%Fiu?wX^WxB$6*YYw{v+qIoOuWmYE`G;0p9 z$-WKrJ4FOGPB{byY*+)pCI7&^qi@2&A9evBp8So9dN>fAiqXIm)!kr->?Rmy35HwS zHp8!G*ukkAQNZ~N5aQc&9KJO~4XlgLMSKnphACz;{C;de>Pz$sxG$pwSaxIs5>zn& zIKHV1-u-$ooV%_I?m5v9EQV(GXVKP!xJ8SACs!{5AC*JE$rUN^DH%kN5%mM&`i5N)rseTL({lCjfHt_QCL%^Ki|TiSWwc$$&gN z12uKJ0u|^rABf+14LJUGA2>mSf|mvzfw#{Z2>RcS0zT)3voOBg%^$!Bpb=v#K?a-pA=}X~AY9Me7v><`v74RkVCjkEE zFgSVMJNWgpZAj4Vp`ib!Hux*12c9ryGQ2^U2JaZuhl~@7VDEER0U$z!e7M^Oe#klp zcbyptoILn1{3Of?{JEBSaVhmkGqqdG6fR_;IfV&0VOx#1Y`kF>Rk`F?hS|i zc0WM{v=2l1E(`^nZw0{0&S9X>G5`<+jRQVEMgiY1Wdp~1?C`zJO4v>2!HgU)WP)cD zj1Ld)pHb=V589Fk7&rY5JBq)+_kAD3A(05^`;-Gj2}U46hBLs_C3oRybU83{NMC;@ zaV4s@>O3-zya#slUPJuen1E@NcktGWV-W943|OF!1ByLo`vW^}f)BpN!oOdl0D}4> za5sD&2%TODua@Zn=HXy?-u*HC)3Lp9+{PI|Npc@BsdWM{zjq{R=C=@3z|n26aNtGQ zZ)rSoz%#Lb+OpsJ=SnVuE7vnL4hYr}A-L%`2o91%aP<@j77T;n)uVr0#~^so8wg$l zL$Gx^1T)@2aC$cct0Ey7RSUr#iy^pi7X(+?AUNVW1ha!7I8Fw^;tU8jjQkN#g5bg* z?|XScu)>wfME5Hdcs!-j@|hq zp9I0QgAg2f2ZFOy!rAXZl$Ky}oC$^mor6uH#iHs+U$f2es7Rlr-~wB~y-uk?48drRoN8yITW$>ynIz_{7kqMvVG#(Z6QGHX@M zUgHwg1nTmH3^$XRknw;KQ8G}x-3N-9QnFlhnlrI$J^$CzK`HCaep!@kJWHx}tCF$r ztwieXp5Jrcv%j;NN@6raP&$dGE0^AA-p60PhjCwQK5cN^lC;blJjA+>+D z==GeOnLl<{i1kUqqwT3&S-mQIZO>BLdxcF*sZk`TlWX(V%FY^ti@UID{(A?lp@GmR zIjC5!cwp#vw5IPeD(k(B%E&GrdF z+OOEsBzxy@+uo+%&dSRSQ6$>V$xb{Y$cUv zao07l%kW=GCp<2+M*#FQcQ$fwp*n)$hS3Zik*rrVo^13Pb z6iDr5kHf{sUvBbRR8XYKL6_dDn`%f&+Xlsv$2&js0$M~UROfR|`hs%`Mny>N^q`YP z8uPOJ**H4{F;3);ver@0(i=7L39UTeq`zX?t)n> z%rU)K&e^mNRKlhsGEr8r^>n>))v>AjtA}_#wgh8?JR_Emmx`PVCvVQ@^3L+FPFUH| z+GcQS#Pf15w zE0b6%jy#&xhO(jh^oOb*@iVo9ZSk&^HP6*c8gevwhezjLTf!%X6g10BhRm`Q#S;No zStioS=O`mg23iAqUm?OPH!O{x(Q_w%h{%__rhHdxm=%i&hdfJ{mHLIh)w?QFp`M8^ z?a4R`S-W5#`i7?r+iH}t2Xv$Civ>d!e{vo`p%{JS_Zb+~8qTPgS?cv>>fFsJBKZM6 zG4*leQSmykidY=CO!)&V}_~tl3FTi#Wm)Ln>NIp)7?>)He45G#$@P~ zt`^I2VQOJz*=e#D(M&!qO^<9dg6IhHc}a-sdR-uXVpV6y4DFZDwn{7hl{zb?v>@L8 zG`ly2u3BL{6Zmpvd)#+)1AV>^A^VA9Invl*q7ofYg0XAIn_1o&PC92 z+!J0><=>d)Ma)WZYo+XdNnlw<+fD7Hrt-Y1B9-FzTB9KCAhxj5l56oz)au z1kJCxe0090d(kb+Owvqa5cF?pNzw6&ccmP5OI;N4R2^Tnp^l+_+8AyDwX2kL(({ZI zn$etWLcmsswzjzFHFr9excZrSz3PByUDrkTq64zI1`Wp*|>0b;a4_+z?(uL-UsH=D+nEYmt^cW0>^v!o4^w2IZWb zjuwVU@(h>cN7=X00?t&z3Cf-H)2hjZX0$IfMAZuA@vm_MRO5)Hip{h^L}JD^QX69k ze-MpMPV+1=MzS76R~LPwbTJ~;w92C`r}bkhhIl1DXMw|mgY1>%L>z}A!SF^4>f51 zQf{I?iQGXcm)hA+m;*@LSzdYj^UVd!_NIcJW{+mJ9GTtC8bNqV^%yP|KXj;VA_t|p zSyo$pDSu|sI@N1+wo&Lr>mHM~*L7>d%i}3ydrT%zjep+in$CRUQlHFOMfYkJTMwuH zMkN!5Fd1`Ow6%++s6*`U#b=sW84$tjyjGcko2_qZ%`N&aT%o(!uu8cb3}Nr)mZ<*K zRWie6barQchU1R%2H4CRYDu;%6RgiaOE05e*cKs7}M#URj zv}$zTAO^nVPw5_8x^O(!kIP8`aaZMc3s;m+r<5!?1S!k^)yA0zS(5TswtOjHwZvA{ z(y29{a;7PyvI@#tib;4yb&7US$xgs`yh(9Wqs`Abf6=aiD{633U!9BJA(*fBrarVY z)#qfdIKNqgY5x>>G7Tz#lVx42{Nnb?O)cpbPg6cajk9cvK7l8Z>7;?Oir8CQNtTGzynv%P{X2bU{}$zM3ryc9|bXO=OHt!=Sd|y%Gn|`mwp} zZ0REcS%6<~M2?#&lO2rxY&)vD%O4;MH2)%9ZM3r@C6ftK*CWBxl8OXcSrB?t(K&UU z@qs&9GFco|`AXL3%D~QEF^xa_*Mgbd4b3X1fy;8Eo!zUGZIOVl4Rp=>;zoIv#N(XEOmMN?p(@MlyFh;xheZ ze-)^KDH_R~76L@JqL`fJ(8(eL4#&IBY$t|hnyYVU$sS$eoCa!??J$vnsZkc_5?uGoOBw#z zc&3WaB1%ZZwKmoZ<9g9W%@;wV^a*b>b#G=i&ya9Tk;&+GI|X=saciJ>B#kY(6_3r% z%F3t2#+GqMNmtSbL#x3rvo^A0GydS3Y`Dc)lCk{byjQ4|sWYQ{j0Z5kkuOMBbB|RP zG90cb!|!TCMCAN-fnp&M6eS!=kx)NtcLED_3v$ob_ufhL4M96Bk#P`107nEhOS z!ZJ_Gq>&^?xtma_u8_(E9m6Ws*XzBM7WF7f7v&GdRb_l;J$JHhh+x0&4)ePB3suPc zq#!63ORs0WWqefFX=&UA&;?6;Z9GBl@tV2k4Khljw!Z=$d)P6Y@*aO`;yt zU~?~Tlw4gBQlLummVKjj7j%MOs(vNpmWJ?`anqZlc~!FeRbw@m9qu%>J_dJy<#vgA z2MV<{80HJ|eaa3T2J>80Vm>C@=2%ij!p-AQMTOZ_vH9q=D4HB)huw1qQnmHB=YKUs(-S9n0bO!U4erFdC+ zd(k`7@VYnZ5U7MMG;YqWqovTg<5#mDYad(l(bu`VO{E#p&X;sE>I%9OTCDAk5OXUz zrMb1j>C#(e&WigomEk&mkA9`4RO;>is}^#H5=*O>F%Wu~;Cn_uo+R>psTY^y2+46o zvI}>kpBX9{XMh9RL}9X-vZqYN9~549&rN8{pG19!CJ`Ovc3~@Z94|P{m2)q%UGiJTq2}j|)0+L< zzM}I?b?i(dhO&&Hp+r~rM%+bd^x zSh)wpe-ylpAv!zxjd2Y*v4s)Z`I2}9gF_XiHu5sjF>unIjzK$`s%m_v~Gb2Z!k1@vMlXcNDxr{FR zU3o~*uY?((@NdkOpp)!*xeK%N<~-4?#r9MBRE@xfjJeX9qFBS-ydFCex7@|leJ7s9 z@}h5;fSf4pH0G1S3KeOwOq!PN zBi#F?pWK0zuiS8ZYr$r8m3u5}Q2HcEAtQpkmJwl1vfNPYqTW|r&eMCaq{4DJPm%k! zq+C3Z*+fkBkfg`*{hfSbDs8snZ|ywua*;LdoW6bDLv1V6q^T)fZ1^Bls+E;b(zfE- zI4x*D-u|+>N|KgRs%l+Cy`>pLZB+kL_A95UT2ADaBW!bXi57;UD)yNE&i`7_nHSxB zM0=$=O6O6XC_jpJ@}_Bb7Zq4rT6Y?8;w1(53Kme00q4wjofzh{8XwxJyuWn2G=G=8 z)hyRrrDBbQk(;-XSXVcOHQd5iw3scn2e@A5I`>=Kkf7^^@tGIVgX5Ex_fsEp)1CK3 zb+~KV4>>vd+2B4@3i{Ig@c?tC$+jpVK>-&SC0BXW+F~fG=%%YJ-$K&4|8XIbB~>60wv5n8eUkgJoXFg6ytO7!w5eNU4wITE_gHVnL%OW= zMvId#~DN6vC^yosD$7_B@Ys$Pufn^j+_-Gxz@Y}p$DNj)24@M@)8 z*1JNgHbq*|@X{HZ|HV-(4HR`X-xXc3pD@pL?qx5eMex|zOYxJL;+*@cGx;wB>vMM~ zVb@oQG5=Q;pnaKzcVHE_)$1kWlZOcp6mXbTW&`8HlV8?5Gco`bNP*l7!VNl$NY`r0u)2FD)d!?Dlrsw`9ZdbF^L(8{XqjGtu z0rn-FIdrYmns_Papt?tY0Og&osC`XHFKnm7g+Z*6@>$$2&1ursqF->Uga@lmr*5!h zr)U(`oMzpo+I8vtrj6_qg-+a53#5CdKB%qBE0rcF{&0BM#XJwl5^t5MsjpQhd92!6 zIoBqogy%0%{aqNAFELFJ4|h6*cFjE2_1dIGU77{$_lYg02f~R`LS~Y(K)G3VSe34y zC5h&IR$7gLyb5*XvMprij(R{qeU@G9-Igday)BzhGZ4+poAQ8l~kWi8N@*4A&H3&$5?F4@YL3 zgk#xHD|D+aP}@mD<#WMmX;u1()MD~*jzRX)@Udnt(_OY%+U6Rd8>nta?-y*46sh0M z2(rg2)+;v3JiOI4J9Hd}kD@l4;0(ajF@IrTc;C=GmWug2%iDfc(5R4;FEPx-Qchds z9Sux)qtK+~o93|h63ZKURWD7W^5+RTBAeuQo|4idX`>zEan*-Qub8J9XzI88AmjL) zHyXC-MP*Gk%l$=O>}p~}u>Q>Zn0(2;O!!LCh9wlm^KjXp%E`%3_#E*^QKx*p;stHJ zI)MG0>r4}gLtGrtm*Giz4OPcU3U`RlIM-eL1gy+O$ z^)uos<{hP459IE#-X&4vmJ+j~pGJpq+jS*!x#OL9mzly+$!?@xWIPow!QW)G<6GiP zIYWsP>FKHu@^wO`bcA%j?qBgF{x-ulmM`TW%^URsr9)@SOcI6W#<0^!`&{jWKGlYgnnD-UDo1BLaE9aCOz}X;HJ5~(vO$+ zk)27K8VGD}B9_>v-LDy-8BrP`h`|J#sSGFik$}q#T9BwJqb28B%{+0|k8?dYKgF}l8E6ZUs6r( zZTn`+eRH*3pp;>TOKTYqm@}gWnkbqoA<CoP-AYhlo3j&?&8(9N2PF>N z@4Caf6L|&305qKEOG_7et7>d-Kvh0cGLZd`WjgPcydnEfzTA;WO|d>w>2-~Hs;CCj zmAIA6R;__~l(~*-5Z)Jb*evAU@B;H|?rSYihARX!)h(J|pX6s*KDv)CiN)ANNO5Dz zRBmeYL3KFifjva?dtLOBH+eQ~c=gRJha$RkG&M&2HYY_et!RPNBTV7{Y5&Z#bnB-n|@tl=qAvj4n)3DERYGyA@j^{z0)^Ca- z+78!k_OKkCbhh5C4U5L>t|)U*t8><6^ols?t;HF#H=Zp^(Ybc%gRHPTWy~1N$VzUVoSwC>X9x;%?*=xgSuUlgP}ER)%bkD8U|`-Gw`d@!{@f&PxBYXH*v0IJe?` zc}`R(=26}J)TO)_%phQ3?w{y8ESkMSu_X75b7{6la##F|c|LnYO@Y&bUrTWtJBy9U zL#?ZG50Yn=wk1ZpKBc$CAF(WqzFilHJ}f+D8|8#m^DL{(zCym1E*_-ys9d^j$_F`Z z@m;cxPI8D5SBPut(Kd7z2)i?Wx!-xTc>Yx#1e$dMW>_ zM$7Fk=^$P;=u*O}F}xMDFj6IFEnjDOm=l=Sp#zxjlvzqF*O$4Y>ji#$=KG>@H(C6F z4^n3{_bd7|nf4y~!_sJpLcwJ}Grs5eQ_|goi6Pk^L^p{q`S-=|&8KbGSy$Mv%D>6- z1!L(`n>+;#7jlt@ezTM^Cs>`^YZ#1lVBxq literal 0 HcmV?d00001 diff --git a/templates/sh_pl_grib2.tmpl b/templates/sh_pl_grib2.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..ffb2f9d89058321791bdafe93161213696736448 GIT binary patch literal 9398 zcmYkBXIK;4)4)N+f(^SUDtb{tQ9(dJvZ0egNbkM(Mo2;u0tqdIj#5ObV!@7A(W{b8 zu=n1*c2TjHt6uBn#s8;w_L=$3oINwM`#k5vIlC}CB57d2YlzqXBxwI2rg(ety}X8b zd5^d`blRA~f!{ZMew%=ygT^mm&@3O+`2VL~Uh{?xhQDRNK4`pud%{6F)(!km2E#vm z{+Aqa7?wB6K6=pi8a)i_HTi#+m-mI=DZ_^kczFfQ9g$o!tN(WePa8Y%HxHwLoZoa$ zHtK)VbMe-J--LGkc=(%c$*?WI32^;}|E7oVVf$~!d%gYr0$#vzzVkOB6Y~cjYA_zX zSpA!E$8vjr6I!Tz`J1jW7vaANK$A;<)19Uc_)V~o{=a@8clclbi~BKWelvd2=P*wk z?pM5Y;G1U!lMh`ra~HHGnh1U43Uxo5XoQ|v(+Bac>W}vi9pV|{dpdqHj_+POp#vyV z-E!9q>4QQF`=H#YjZj$LIZ&4DAJ^*h6*#k63k^LS41PK4beHe*1$#ez?eW^v2(B$p z0HYg6fZe!Tap1cc$hVbTa9mW8d-kp%*U$%%Kw-KR4DCAz&RD4jzI-RSh{k4U(5nNU zNkD=7M@O*7KUd(^9gA^qOq~ZE|FhrSx<&|nIQxv-5zrk!d`l1LM%bbDGk4s%AwllR ziI;%dJEz=9HS54nt{M;?I}6bBKS1gUzQDX6D4?L)37PG^8-xTmK}Qq?0dM`^gJXA1 z>Tw;p1bVk*Ln9LPu97__ut^&RLWR9Ol-;f1;@Jzq6K-Eu>$SbEh9hC_qYLrStWEvE z&aeYO?XntZK4UZV(uAMTGgqk4k58{bV~8&3X&o2rO^$(3N3@bca{317{pu?ZO{`gNph( zNZoL~d&)GF>jgdt;&|H!p1L#D71DhGOpjXQUVp?M@7-MF_7*|F^#y)V2EO0D^}-2Y zXEqfms{IPJjAptEVk@BZlPHimW)+C43j_bY`5sEWjB@)9{|U7bT;R{Wy3a#i0 z1|wbH0VhuD9zoJVXB^t$9)s-#xexb%mungU*W;SF&)j}+$p`gCzPwo_-W1#bj6YQCab!SMXg9EL*-GMu9 zf%#EVu<Nb_p0BuMPqVZfN>#}=~AF_uL&Rp zTy`M`?7;c?S}^(UD&YQ$TDPnd?gm<=E>52 zAeV(33a&UG45VVM0Kfd6>x{zfBBtg7L5lC-g$W0sKHd+Zi+pbZRTsm6GW|m+rKb;+ zOR^wuZoGs>9D)Gtw|YVMx<&wlcmyPEp9iiv?*)uWa06nWE-D4y*w?uNj48m?O->+ZVH@x$77Hx3>;ZQ1O~8`b z$AIIaFd)9*UvTl*dp!gDdI4kqCm^J5?aJH5cY3ap{Gi@z^w9a&tl;$KE>In0fezm{ z48UCxfSaIjknJM}LSiz(HorjE#{Le_Fn)TR3icX|Oep~TPwW8uVnzapUF~4(yJ4;; z1Sq)h%wb@nU;!w)s*TIqu^o`!yb744KEUhPeo*pxGf-~76#J{?0Hk%H6Y?kiKcM3s zJgzRl=^{)g0+7)eJwFE5M*dU0Ys6_2r0KZ{jQ?>N9DQR3ICsu0$hih5)*`fcW47_R>d!(*jO_5etU^?r)9IX#)YS)(KF^mB(R_yN8DZ{DT=F`t7ts$ELKz z9W8LWhRdvR-|im(ybccqLfR}YiFrKW9IbSvqJ#iE!2q5e>je_^-+=gkj{`3>HK69@ z9`M=MFaXrw0P2e?P&4>yTiDyMk>_x_SjHY zk3Aalh}G}<`s)iQnEc%3bT{hk&yxzFhCsUG?)L76tlSX_`R|e(vi_g_F1OF-o*f5!T{Ab` zb3L912gjZ`3>h{tOJNmwR2YG$_Ah}aKrHZ-%@%mrBL$v~V+Zw=z_aSTz_ZyS@EHFP zc*q|Gp5zXJM;0#dBvuGKt*Zr|ngaq)safC&yDjk0<_J8|B7ujOBJgNN5Bf6&o}9sa zFE4>dbXMRQ=@^`wKj>ErJoa*dhyQf2W}m>5G1zx*h`ZSU%ly}avX&cIW zwDq#7gr?Y(dp|Fod^vk|1h!K@;~peMb8>)~3Rtz&8DqG<-UWDwOBTAc)UK z4B=qs(TvZu0cveQl)@)b#aFavl4|rW*2djmP}j@{Y*meLNx&w0@Qu<~!7D{n;!ZuQ zqOWElgPd}4wb&L*^%u&EuNOxoeil7bJyz_GPcHvgzqx4@H^Tg=I(jWiG>PR?akoLO zre`cjm{uyFev>eXhn(xnHl%OqTtoaUG4t@{l2|#UB5RB2qIOPRJ3`L-Y$aA#qr3S> zBu$b&&0%X}@&T>1%1bK^_ZR$^b6?p@JH@LtoZzj4Ph0}6Sk0G1S`%!|FRd;WNbPL7 zVNT-rEMhc&NPdu(l^Q5nX}%;nXMJG*!^+YhQ%-N#OYjqEx!0>Z61)?l8`kACVvExl zTdQeBsGry~4lO-VctcAiJ0Sjs>2WgDp7btBU2P_Ryz*F;dzFE;H|2cZQtpfTRN?NF z7X`ec<3ZjCwq}dGJm6jIEz5Q71>Bvbb)xyGY3UD_+%q^V;i*G>qYZJ|E*(3nBnP7I zQeXGI&Y%e%)fD?*qm9|Ez-a&-`o8&o;T_xqMYCkTWH)X{Ng4JA>{m=;_9}7ZY!o1n zds(89F)`O`y;hlWWf`!-`;~JwK++yTG;X5pJ9ByiH!-p8l_GiBB?-ACu;Pz^v$+cW z+U#JYMIa!b$sA*>BwQrbC}MD6Li3klM1aG$X`+y8TRy8Ro58%ux;b@yYh$y< zrr<5fyxtPGvKIbQb`VjIP%Xa4CMDj_%Uk*t{Uw%fnnuEMjETF1IBtUO7w|Xp8_O9- zmC?nK)aFEUVz>HO=`&WUa+o>BzP|jGyuLa^k#&4*=B;`bCeTzT(rHqQ07*YP!CAyr zi5E%3bQ)qc&6U&3EY_@v3F>^9?ZchS*j#*|F~o>~hYB2P))r0){h+oxp@PmCZ!8d` z0jFH%g57ZxAsV$Jns-N{Wi@-anq0_jMAl^RYIj6kQazLwR^R5NMy05w_6Eag z4m8JEbROr0(c{hwlf#>}39vBSWqzRScBMaRMrm7Xkn+d;W~UMLR-P7BXo|7CNZ$^S zWb3pSR(y&z6_(+H?g{v zr-+`s82T~D@Hm7%kJiZ!OS@ELNw#r@EmrH61Dl77G-!c9`U^c$gZ-I%{;YR?P>+kbIJ;kE6`m&3YZVAo)yE z8E#GL5*dthEDl1bLIh+sgkBQT1lG7qA#bzuGTr(;#2Jm>8ZgF(6qn+A#R0-GnSfkp zhm)+u3DoiOiG|D9R{0Sj)E;dXGXj~h)pfh~>OZOJ##|*WXr%D^@*X4to@kqu4C4gy zvozPlCut90Z2DaE8T`ZK^Rihvde~%vkE~IU#k$3qE}MWUlynh?VlXLtu+3y2)=(k| zm*l9|hEw|@%W{9=+sWZ_qVr_KdG$E##=K%IC+bAl}i&jo{DZ?^DjEcBt!BcHM2LDe@d*TB0bW%zE7Fr1UCbYK$gL3}>Q6 za+~rNx;eeAz&DhE)g_O%QlT)^6)|LR|1qU?J~pDv7eTaXB1JjLgutSc@}~+IYYk(i zIu6&0FBV#8{SWltBaA>aPJ+;csTr0k=PE=8L zEqg)kR@pmwx|U;ush(r^R(2>ui(~NPJ9Roo`LwK! zP{@lLlohLmiN|OIc^7J_DFU?KcFUQ93|7}RX66oX)~W7QZ;&2L2&5fk6v+NlIVqtc z60I#e#rjZsC!vly+yF7GWpB&ANGc-TqQ8?i^H*boWlxf~md{6kIvo5W>JTK2hZbxz z3U?~AR_~0~J}AR;M`{?%E0!1_%5LNxsh=MqmZxB!Abm4Px_`)f)%~=TlK19F+1RY1 zWK_Xj;URM}XCh(>gAODhZ;Bt~tSkNlUr>KcAT9n+8Lb~`h|6Bz@S}J`y}7iZO{qU; zOOgmhCHO6P9p{GZ9Px;h7K>_q59AXf^{?pv5N{={D@O_^tL&^+_ENbY;i-ipza)A~ z|I0Xs_^-*4s*%Oh(~MiBKk~gYp#>ehdD54O6AXJI&mhjAf9gXZ+Y$E@A24p=hetjs z-b>Nv`lAj&iKVYNJKz_AU%a6lq20)xp=ToZ^NE5m)#u8|v4=3Lv(Cd7YpaEEbun~( z=_K~S_C~VKg}l#D&G#o z7y}k&756%qjYV>~_J;l%IOTvIF|(5i`hRli-PaP+lv&iH8xHv~=M! zG>(m0c0!C?AQBx}@!fn<_K4*z^4E_LZq!<+;rv->q5T>AML|g{u_yqxEBBJTQrnjw z$)ClGaK06F+fxw1>*le7H<=c6RM*KUhEuT{7^&tsPG(YQ$9jIfgM~FY=<;iHf%K_Z zEq$8%7B1ush^*vEI;&-~WJN|{$}`POdXnCcl9rhw-%99YOp87#G-29^i-0kj7G5^> zD|Uc=HExP9biUn?gmn~+hw_S8JOs{-ea)ONI30E(qYItLg)VF4^`;)QMyE~_{bQ2H z&sOjkHJ}AJVRw(9c zwOK1@uasHhDWaT`#T9c>_gN*Y+o;EMR|^iQRxYY0M3|3b$nbKhNfm289+XI>dGTbYJ8s}kTpthR(z%CU>zp?mH3Qd ziIPIZ@=r2$B|`0i&R7-MC{$Oey`%>D7<@baZ^=z*OllQlmdb|>svc5q^L`LGly4HW zWVP^i+6VGiiG`RX-%1&v%+VUTk5&iDh8G;me#}c_@+!2J2HO0DJa_~NLAjB=kNbgB zBb<(%Y?=u@>EJ>%<<-#rMLQXvD`81;2N=6^I}v)#(a$}~9By2Ry|28XTw?iyp*0zV z6!f66`Yh8lEsYWxHS8#q}PhIVZ>Zw_P-gG{6F!@l8xd$Oh9l3LCk!OkjQPJ z|7sp5bLF_y8~m3{US(&7Ag7%fP`56kQFlTevc^q%UKU5nSxZtZ(Vh`s6Yk=6>W1mJ zGslSK1%W16oS*0yvBT7s@S}7SI5$qb2C9x=-d-4~^)G6%g&KoOPA(*mj?<8NE~ffdL>SQHRv)4TVC#{C_G0`SUS_Woya3q!9K%%JeLL_~$||2HhH%VGXC{ z9E82pILQ~{-O81m!wwT69|KPdx?282yEJ1gmnNn=xgyk`7aLmQlK1Pjo&k zgOLWdZgTi?!_-ru7xd#&3H%VjQ%Y^V+pAauZ{wXn z--A7kaL6pcT+|WH?fk{D&Dk>vA7NOG71zRPBurq=NwQ}=PHo};m2#}^75TgZWOV0V zrpQ+;(8BR+(F%NI+4itIq}Z~jhI7h~w$~kYey4310bxE)Bw3fTSj8wAguB-n+-hXF zd4HQeL}6@gteWWRj1@Uy%BB2d^Hlk`m3+rn%9E%%;u6MbmX>99KF;&0S*uo> zS0djRJcT2KC9&(UBPoy&jC}%bQap}@z%QgAV|6#( zoj~-1yy5(cp<>z=?02@yX3%G6>I+{wh=kGRA)@Px=H|{SJg?hJ(Q58DRWhx%nN;6= zQ1~t1AODjPYH2ie!AkSTQ->zc#yG$@MI?1A)yc7BeN89}0?j zLnyTvr~@lJl|9YI!a#|^l26Jd`X;V1>5{r-$x~&cpjJ_yvs&|oBb7^?{Yif!o9PX( zDNL}a(uq~#3uTR~2=^7^2sQG5i#E|~%fuK)aW73@SD^F=B1#VFK4t$jwPi)tolxE= zi%>aaXNph4Y|MGegSjSSL*srel2>nfY+6P*6@N+p$Ofm(E1yI>m-Ub8fZ|iZ2St7wep2pIpeXe zkMsw#iM5&D6}g?zOlyG$q>IpPg#OI0#Td$7?fuRE++7`9eTYy$tJ8QdMxaVdt})nH zLWV%~n#X~a>8EMmaSR+v{!PSVjY<|&SwoGkTn`Oq;#iGFQ^sfFq|~#^Hgk^&fcz2Y zYRa!{xF+9r3S-LGr?sjlh--1_IgwH~w`_H>t)Vp+C31?h*Hj<&1u@t%tUp7{;U_uEorv@G_prE@Z!EZ_C^#_1J&% zwb`3w@ya)8C@VtpK)#JX5i*kFHqj}idJXPYZW|}QdKqnsag!uQJ>NV@eNpki8dKn7 z#Alz8%(1>hg%-i$;dmLdh!YU)o37Sm(z_+4S#K2!Xr#=)cr9|Oe0cGn#)wR2qPL}< zzKEn08dqM+I3n*bLYsp!^8l8SV+Z92S?GJ*_e{(>>7GRmtoKg&&ajYN#QM%H5r>CNE}6(00^ zi6SXmw}{q*DX!iwd!rkZy@W&On)yeWQhX=BnRtrHkRLC+p`WKA%0I9Iv=cMlD`>jc z&hm6>{tt1Uy_OtCy_@wFa?P@q^H$P~KTwoP_7Xc*`b&hibX%A@){b15z#|B^m=MoPme~H;Z zc_@{u<1-H#A7Kg6YcOe%FCs%2Evf>s*!q!oK#!-&M0cQ9$uD^IsC(oVR712bV>o68 zDOvVKyp5`?zhKn`BIUI9r}H)^H%pN2bVljUSg2 z#6Jz&Mek5dVR!S3SYcUDsXh4Jl;x&z{AhADV?ZYRUnw54jVenWl-qPwhyzMQ#5 ze#|sR)04fMenRve^JL@6xDM$lM>_4f;tGG1sU5w=v^i<4>>4>&ha zFS0LD+66-VE8Fq(2${riYUM6Q2x1oY+q~~3)q>KjDcB8y4O!ldqnnA3G zFp6;wldVtF*X2Gk9m&3H|5;$jyTf4RpEq8x)UR&b_`+t(OEqs&1~Xvnqo{zmQEUoD zp;U%7QCKpwY)k|@yIlEMj1#@r`k8K~ZZo|AE{YHHYk|`VB|n5yRF)c81-?A zKYNrkj11h=5D zd1a*iTXJ*E3B&Tp2bKP?>EI=C(#oW}W zfRHjca~&}R>!fdCsSHmu{IgnB@sy9!G%12HnX<3_HEM6_=iK6a9PbM&fe=gqCEbct zODE}RVI*H7VbES`Khvk-lk + +#include "grib_api_internal.h" +#include "netcdf.h" +#include "test.h" + +void handle_error(int err,const char* caller); +void preproc(double* values,double bias,int lenght,int mode); + +int main(int argc, char *argv[]) +{ + FILE *f; + FILE *fl; + int i,ii,jj; + grib_context* gc; + grib_handle* gh; + double* grib_values; + double* nc_values; + size_t *pstart,*pcount; + int dimids[NC_MAX_VAR_DIMS]; + int varid,ndims; + char varname[NC_MAX_NAME+1]; + int dimlen,length; + int* dimlens; + int err,ncid,natts; + nc_type vartype; + double nc_vmax,nc_vmin,val; + int nc_imax,nc_imin; + double grib_vmax,grib_vmin; + int grib_imax,grib_imin; + int latid,lonid; + size_t size = 0; + const void* buffer = NULL; + int ret=0; + double max_error=0; + int id_max_error=0; +#if 0 + double R,xscale,scaled_vmax; + int D; +#endif + int numberOfFigures; + double referenceValue; + long decimalScaleFactor,numberOfBitsContainingEachPackedValue,binaryScaleFactor; + long typeOfPreProcessing; + double preProcessingParameter; + + /* ---------- Variables ------------*/ + varid=5; + latid=2; + lonid=3; + numberOfFigures=4; + /*---------------------------------*/ + + gc = grib_context_get_default(); + + gh=grib_handle_new_from_template(NULL,"GRIB1"); + + if (!gh) { + printf("Error: unable to create grib_handle\n"); + exit(1); + } + + grib_set_long(gh,"editionNumber",2); + grib_set_long(gh,"gridDefinitionTemplateNumber",61); + + err = nc_open("nc_data", NC_NOWRITE, &ncid); + handle_error(err,"nc_open"); + + err=nc_inq_var(ncid,varid,varname,&vartype,&ndims,dimids,&natts); + handle_error(err,"nc_inq_var"); + + pstart=(size_t*)malloc(ndims*sizeof(size_t)); + pcount=(size_t*)malloc(ndims*sizeof(size_t)); + dimlens=(int*)malloc(ndims*sizeof(int)); + + length=1; + for (i=0;inc_vmax) { + nc_vmax=val; + nc_imax=i; + } + if (valgrib_vmax) { + grib_vmax=val; + grib_imax=i; + } + if (val +#include +#include +#include +#include "grib_api.h" +#include + +#include +#include +#include +#include +#include +#include + +#include +#include "test.h" + +#if 0 +double maxRelativeError = 1e-4; /*1e-7;*/ +double maxAbsoluteError = 1e-50; +#else +const double maxRelativeError = 1e-7; /*1e-7;*/ +const double maxAbsoluteError = 0; +#endif + + +#define ISECTION_0 2 +#define ISECTION_1 1024 /* beware of for ocean data */ +#define ISECTION_2 3000 +#define ISECTION_3 2 +#define ISECTION_4 512 + +#define RSECTION_2 512 +#define RSECTION_3 2 +#define RSECTION_4 1 + + +struct { int code; char *message; } gribex_errors[] = { + {201 ," An invalid coding/decoding option was requested.",}, + {202 ,"The number of bits per data value exceeds a word length.",}, + {203 ,"Missing data indicated and data field contains non-zero values.",}, + {204 ,"Number of bits per data value is invalid.",}, + {205 ,"Number of bits per data value is same as the number of bits per computer word.",}, + {301 ,"Error in encoding or decoding the letters GRIB.",}, + {302 ,"Error decoding the length of the GRIB message.",}, + {303 ,"Error encoding or decoding the GRIB edition number.",}, + {304 ,"Error decoding octets 22 and 23, experimental edition check.",}, + {305 ,"Input data is not GRIB or pseudo-GRIB.",}, + {401 ,"Error encoding or decoding the length of section 1.",}, + {402 ,"Error encoding or decoding the parameter version number.",}, + {403 ,"Error encoding or decoding six header fields in section 1, from 'identification of centre' to 'indicator of type of level'.",}, + {404 ,"Error encoding or decoding height, pressure, etc of levels.",}, + {405 ,"Error encoding or decoding six fields in section 1, from 'year of century' to 'indicator of unit of time range'.",}, + {406 ,"Error encoding or decoding period of time.",}, + {407 ,"Error encoding or decoding time range indicator.",}, + {408 ,"Error encoding or decoding number averaged.",}, + {409 ,"Error encoding or decoding number missing from averages etc.",}, + {410 ,"Error encoding or decoding century of data or reserved field.",}, + {411 ,"Error encoding or decoding units decimal scale factor.",}, + {412 ,"Error encoding or decoding ECMWF local data.",}, + {413 ,"Grib edition not handled.",}, + {499 ,"Error found when checking values for section 1 against expected valid GRIB values.",}, + {501 ,"Error encoding or decoding length of section 2.",}, + {502 ,"Error encoding or decoding number of vertical coordinate parameters.",}, + {503 ,"Error encoding or decoding location of list of vertical coordinate parameters or list of numbers of points.",}, + {504 ,"Error encoding or decoding data representation type.",}, + {505 ,"Error encoding or decoding number of points along a parallel or meridian.",}, + {506 ,"Error encoding or decoding latitude or longitude of the first grid point.",}, + {507 ,"Error encoding or decoding the components flag.",}, + {508 ,"Error encoding or decoding latitude or longitude of the last grid point.",}, + {509 ,"Error encoding or decoding the i direction increment.",}, + {510 ,"Error encoding or decoding the number of parallels between the pole and the Equator.",}, + {511 ,"Error encoding or decoding scanning mode flags.",}, + {513 ,"Error encoding or decoding the j direction increment.",}, + {514 ,"Error encoding or decoding J,K,M pentagonal resolution parameters.",}, + {515 ,"Error encoding or decoding representation type or mode.",}, + {517 ,"Error encoding or decoding latitude or longitude of southern pole.",}, + {518 ,"Error encoding or decoding angle of rotation.",}, + {519 ,"Error encoding or decoding latitude or longitude of pole of stretching.",}, + {520 ,"Error encoding or decoding stretching factor.",}, + {521 ,"Error encoding or decoding vertical coordinate parameters.",}, + {522 ,"Error encoding or decoding list of numbers of points.",}, + {523 ,"Error encoding or decoding number of points along X or Y axis.",}, + {524 ,"Error encoding or decoding X or Y axis grid lengths.",}, + {525 ,"Error encoding or decoding the projection centre flag.",}, + {526 ,"Error encoding or decoding the latitude or longitude of sub-satellite point.",}, + {527 ,"Error encoding or decoding the diameter of the Earth in X or Y direction.",}, + {528 ,"Error encoding or decoding the X or Y coordinate of the sub-satellite point.",}, + {529 ,"Error encoding or decoding the orientation of the grid or camera angle.",}, + {530 ,"Error encoding or decoding the X or Y coordinate of the origin of sector.",}, + {531 ,"Error inserting/extracting Latin1 or Latin2 of secants points.",}, + {532 ,"Error inserting/extracting latitude/longitude of southern pole.",}, + {540 ,"Error encoding gaussian grid section 2.",}, + {541 ,"Error decoding gaussian grid section 2.",}, + {542 ,"Error encoding lat/long grid section 2.",}, + {543 ,"Error decoding lat/long grid section .",}, + {544 ,"Error encoding spectral section 2.",}, + {545 ,"Error decoding spectral section 2.",}, + {546 ,"Error encoding space view section 2, or error encoding ECMWF ocean section 2.",}, + {547 ,"Error decoding space view section 2, or error decoding ECMWF ocean section 2.",}, + {598 ,"Representation type not handled.",}, + {599 ,"Error found when checking values for section 2 against expected valid GRIB values.",}, + {601 ,"Error encoding or decoding length of section 3.",}, + {602 ,"Error encoding or decoding the number of unused bits at the end of section 3.",}, + {603 ,"Error encoding or decoding the bitmap reference table.",}, + {604 ,"Error encoding or decoding the primary bitmap.",}, + {605 ,"Unable to convert quasi-regular (reduced) gaussian grid with a bitmap.",}, + {699 ,"Error found when checking values for section 3 against expected valid GRIB values.",}, + {701 ,"Error encoding or decoding the length of section 4.",}, + {703 ,"Second-order packing implies additional flags.",}, + {704 ,"Function A or B invalid for second-order packed field (grid-point).",}, + {705 ,"Only simple packing handled for grid data.",}, + {706 ,"Error in decoding the section 4 flag field.",}, + {707 ,"Error encoding or decoding the field scale factor.",}, + {708 ,"Error encoding or decoding the field reference value.",}, + {709 ,"Error encoding or decoding the number of bits per data value.",}, + {710 ,"Output array too small.",}, + {711 ,"Error encoding or decoding a REAL coefficient.",}, + {712 ,"Error encoding or decoding data values.",}, + {713 ,"Error encoding or decoding the 'flag and unused bits' field.",}, + {714 ,"Decoding option is 'X' and number of values is illegal.",}, + {715 ,"Decoding option is 'X' and scanning mode is not north to south and west to east.",}, + {716 ,"Decoding option is 'X' and field is not a gaussian or latitude/longitude grid.",}, + {717 ,"Decoding option is 'X' and a bitmap is encountered.",}, + {720 ,"Error encoding or decoding the octet number at which packed data begins.",}, + {721 ,"Error encoding or decoding the 'extended flag' field.",}, + {722 ,"Error encoding or decoding the first or second dimension of a matrix.",}, + {723 ,"Error encoding or decoding six fields, from first dimension coordinate value onwards.",}, + {724 ,"Error encoding or decoding first or second dimension coefficients.",}, + {725 ,"Error encoding a secondary bitmap.",}, + {726 ,"Output array is not big enough to allow expansion using bitmap(s), or constant (0-bit) field without section 2 not supported.",}, + {727 ,"Invalid predefined bitmap number given, or constant (0-bit) spectral field not supported.",}, + {728 ,"Open of predefined bitmap failed, or constant (0-bit) field function G or B not supported.",}, + {729 ,"Problem reading a predefined bitmap size, or output array is not big enough to allow expansion using bitmaps.",}, + {730 ,"Problem allocating memory for a predefined bitmap.",}, + {731 ,"Problem reading the number of non-missing points in a predefined bitmap.",}, + {732 ,"Problem reading a predefined bitmap.",}, + {733 ,"Problem closing a predefined bitmap file.",}, + {734 ,"Error inserting padding zeroes at end of section 4.",}, + {796 ,"Error extracting pointer to packed data.",}, + {797 ,"Error extracting sub-set truncation or constant (0-bit) field function G or B not supported.",}, + {798 ,"Function is X but no section 2 included.",}, + {799 ,"Error found when checking values for section 4 against expected valid GRIB values.",}, + {800 ,"Error encoding or decoding the 7777 group.",}, + {801 ,"Error inserting or extracting the 7777 group.",}, + {802 ,"Error encoding or decoding the length of the GRIB message.",}, + {805 ,"End of message 7777 group not found.",}, + {806 ,"Error in decoding a primary or secondary bitmap.",}, + {807 ,"Inconsistent values specified for complex packing in KSEC2(6) and KSEC4(4).",}, + {808 ,"Error converting quasi-regular (reduced) gaussian grid to regular.",}, + {809 ,"Error padding unused part of GRIB to zero.",}, + {810 ,"Error inserting dummy zero, or error padding GRIB to multiple of 120.",}, + {811 ,"Unable to handle secondary bitmaps for J option.",}, +}; + +extern double grib_power(long,long); + + +double bucket_size(grib_handle* g) +{ + long bits;long binary_scale_factor;long decimal_scale_factor; + unsigned long zero = 0; + unsigned long one = 1; + double z,o,s,d,reference_value; + int err=0; + + err=grib_get_double(g,"referenceValue",&reference_value); + if (err!=GRIB_SUCCESS) return 0.0; + + grib_get_long(g,"binaryScaleFactor",&binary_scale_factor); + if (err!=GRIB_SUCCESS) return 0.0; + + grib_get_long(g,"numberOfBitsContainingEachPackedValue",&bits); + if (err!=GRIB_SUCCESS) return 0.0; + + grib_get_long(g,"decimalScaleFactor",&decimal_scale_factor); + if (err!=GRIB_SUCCESS) return 0.0; + + s = grib_power(binary_scale_factor,2); + d = grib_power(-decimal_scale_factor,10) ; + + z = (double) (((zero*s)+reference_value)*d); + o = (double) (((one *s)+reference_value)*d); + + return o-z; +} + + +static double err(double A, double B) +{ + double relativeError; + + if(fabs(A) <= maxAbsoluteError || fabs(B) <= maxAbsoluteError) + relativeError = fabs(A-B); + else if (fabs(B) > fabs(A)) + relativeError = fabs((A - B) / B); + else + relativeError = fabs((A - B) / A); + + return relativeError; +} + + + + +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) + +extern void grsrnd_(long*); +extern void gribex_(long*, long*, long*, double*, long*, double*, long*, double*, + long*, char *, long*, long*, const char*, long*,long ); + +static int cgribex( + long miss, + + long ksec0[],long ksec1[], + long ksec2[],double rsec2[], + long ksec3[],double rsec3[], + long ksec4[],double rsec4[], + long sec4len, + + char *buffer, + long *buflen, + char *op) +{ + long ret = 1; + long in_bufsize = (*buflen) / sizeof(long); + long out_bufsize = in_bufsize; + long round = 0; + + rsec3[1] = miss, + ksec3[1] = miss, + + grsrnd_(&round); /* no rounding !!! */ + + gribex_(ksec0, ksec1, ksec2, rsec2, ksec3, rsec3, ksec4, rsec4, + &sec4len, buffer, &in_bufsize, &out_bufsize, op, &ret,1 ); + + *buflen = out_bufsize * sizeof(long); + + return ret; +} + +static double proc_cpu() +{ + struct rusage rup; + + if(getrusage(RUSAGE_SELF,&rup) != -1) + { + return (rup.ru_utime.tv_sec + rup.ru_utime.tv_usec / 1000000.0 + + rup.ru_stime.tv_sec + rup.ru_stime.tv_usec / 1000000.0); + } + return clock()/(double)CLOCKS_PER_SEC; +} + +int compare_values(double* v1,double* v2,int count,const char *what) +{ + int i,j=0; + double maxError = 0; + for(i = 0; i < count ;i++) + { + double e = err(v1[i],v2[i]); + if(e > maxError) + { + j = i; + maxError = e; + } + } + fprintf(stdout,"value no %d out of %d %s v1=%g v2=%g abs=%.30e rel=%g\n",j,count,what,v1[j], v2[j],v1[j]-v2[j],maxError); + if(maxError > maxRelativeError) + { + fprintf(stderr,"value no %d out of %d %s v1=%g v2=%g abs=%g rel=%g\n",j,count,what,v1[j], v2[j],v1[j]-v2[j],maxError); + return 1; + } + + return 0; +} + +void get_max_relative_error(double* v1,double* v2,int count,double* maxError,int* id) { + int i; + *id=0; + *maxError = 0; + for(i = 0; i < count ;i++) { + double e = err(v1[i],v2[i]); + if(e > *maxError) + { + *id = i; + *maxError = e; + } + } +} + +int compare_with_gribex(grib_handle* g) +{ + + long ed = 0; + int err = 0; + long missing = 0; + long is_int; + long miss; + int i; + size_t count; + long sec4len; + long len; + double now,gtime,atime; + size_t size; + const void *buffer; +long ksec0[ISECTION_0]; +long ksec1[ISECTION_1]; +long ksec2[ISECTION_2]; +long ksec3[ISECTION_3]; +long ksec4[ISECTION_4]; + +double rsec2[RSECTION_2]; +double rsec3[RSECTION_3]; +double *rsec4; +double *values; + + + if((err = grib_get_long(g,"editionNumber",&ed))) + { + fprintf(stderr,"Cannot get editionNumber %d\n",err); + return err; + } + + if(ed > 1) + return 0; + + + if((err = grib_get_long(g,"missingValue",&miss))) + { + fprintf(stderr,"Cannot get missingValue %d\n",err); + return err; + } + + if((err = grib_get_long(g,"integerPointValues",&is_int))) + { + fprintf(stderr,"Cannot get integerPointValues %d\n",err); + return err; + } + + if((err = grib_get_size(g,"values",&count))) + { + fprintf(stderr,"Cannot get number of values %d\n",err); + return err; + } + + printf("Number of values %ld\n",(long)count); + + /* printf("number of values is %d\n",count); */ + + rsec4 = (double*)malloc(sizeof(double)*(count+100000)); + values = (double*)malloc(sizeof(double)*(count+100000)); + + sec4len = count +100000; + if((err = grib_get_message(g,&buffer,&size))) + { + fprintf(stderr,"Cannot get message %d\n",err); + goto foo; + } + len = size; + + now = proc_cpu(); + err = cgribex( + miss, + ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, + ksec4,rsec4,sec4len, + (char*)buffer,&len,"D"); + + gtime = proc_cpu() - now; + + if(err > 0) + { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + fprintf(stderr,"Count api=%ld gribex=%ld\n", (long)count,(long)ksec4[0]); + + goto foo; + } + + if(ksec4[0] == 0){ + fprintf(stderr,"No GRIB processed - no values in KSEC4\n"); + goto foo; + } + + + now = proc_cpu(); + if((err = grib_get_double_array(g,"values",values,&count))) + { + fprintf(stderr,"Cannot get values %d (%s) count=%ld\n",err,grib_get_error_message(err),(long)count); + return err; + } + atime = proc_cpu() - now; + + if( ksec4[0] < 0) + { + missing = 1; + ksec4[0] = -ksec4[0]; + } + + if(count != ksec4[0]) + { + fprintf(stderr,"Count mismatch api=%ld gribex=%ld\n", + (long)count,ksec4[0]); + err = 1; + goto foo; + } + +#if 0 + printf("Values: %d gribex: %g api:%g\n",count,gtime,atime); + + if(atime > gtime*1.1) + { + fprintf(stderr,"Too slow: gribex: %g api:%g\n",gtime,atime); + exit(1); + } +#endif + + if(missing) + { + for(i = 0; i < count ;i++) + { + if(values[i] != miss) + { + fprintf(stderr,"Missing field: value %g not set to %ld\n",values[i],miss); + err = 1; + goto foo; + + } + } + } + else if(is_int) + { + long long* lval = (long long*)rsec4; + for(i = 0; i < count ;i++) + rsec4[i] = lval[i]; + + if(compare_values(rsec4,values,count,"gribex")) + { + err = 1; + goto foo; + } + } + else + { + if(compare_values(rsec4,values,count,"gribex")) + { + err = 1; + goto foo; + } + + } + +foo: + free(rsec4); + free(values); + + return err; +} + +int compare_two_gribex(grib_handle* g) +{ + + long ed = 0; + int err = 0; + long is_int; + long miss; + int i; + size_t count; + long sec4len; + long len; + size_t size; + const void *buffer; +long ksec0[ISECTION_0]; +long ksec1[ISECTION_1]; +long ksec2[ISECTION_2]; +long ksec3[ISECTION_3]; +long ksec4[ISECTION_4]; + +double rsec2[RSECTION_2]; +double rsec3[RSECTION_3]; +double *rsec4_1 =0 ; +double *rsec4_2 =0 ; +double *rsec4_3 =0 ; +char *b; + + + if((err = grib_get_long(g,"editionNumber",&ed))) + { + fprintf(stderr,"Cannot get editionNumber %d\n",err); + return err; + } + + if(ed > 1) + return 0; + + + if((err = grib_get_long(g,"missingValue",&miss))) + { + fprintf(stderr,"Cannot get missingValue %d\n",err); + return err; + } + + if((err = grib_get_long(g,"integerPointValues",&is_int))) + { + fprintf(stderr,"Cannot get integerPointValues %d\n",err); + return err; + } + + if(is_int) + return 0; + + if((err = grib_get_size(g,"values",&count))) + { + fprintf(stderr,"Cannot get number of values %d\n",err); + return err; + } + + printf("Number of values %ld\n",(long)count); + + /* printf("number of values is %d\n",count); */ + + rsec4_1 = (double*)malloc(sizeof(double)*(count+100000)); + rsec4_2 = (double*)malloc(sizeof(double)*(count+100000)); + rsec4_3 = (double*)malloc(sizeof(double)*(count+100000)); + b = (char*)malloc(sizeof(char)*(count+100000)); + + sec4len = count +100000; + if((err = grib_get_message(g,&buffer,&size))) + { + fprintf(stderr,"Cannot get message %d\n",err); + goto foo; + } + len = size; + + err = cgribex( + miss, + ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, + ksec4,rsec4_1,sec4len, + (char*)buffer,&len,"D"); + + + if(err > 0) + { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + fprintf(stderr,"Count api=%ld gribex=%ld\n", (long)count,ksec4[0]); + + goto foo; + } + + memcpy(rsec4_3,rsec4_1,sizeof(double)*(count+100000)); + + if(ksec4[0] == 0){ + fprintf(stderr,"No GRIB processed - no values in KSEC4\n"); + goto foo; + } + + if( ksec4[0] < 0) + goto foo; + + if(count != ksec4[0]) + { + fprintf(stderr,"Count mismatch api=%ld gribex=%ld\n", + (long)count,ksec4[0]); + err = 1; + goto foo; + } + + len = count +100000; + err = cgribex( + miss, + ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, + ksec4,rsec4_1,sec4len, + (char*)b,&len,"C"); + + + if(err > 0) + { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + fprintf(stderr,"Count api=%ld gribex=%ld\n", (long)count,ksec4[0]); + + goto foo; + } + + sec4len = count +100000; + err = cgribex( + miss, + ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, + ksec4,rsec4_2,sec4len, + (char*)buffer,&len,"D"); + + + if(err > 0) + { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + fprintf(stderr,"Count api=%ld gribex=%ld\n", (long)count,ksec4[0]); + + goto foo; + } + + if(compare_values(rsec4_3,rsec4_2,count,"gribex2")) + { + err = 1; + goto foo; + } + +foo: + free(rsec4_1); + free(rsec4_2); + free(rsec4_3); + free(b); + + return err; +} + +int compare_lists(grib_handle* g,grib_handle *h,const char* what) +{ + int err; + size_t count = 0; + size_t ncount = 0; + double *values1; + double *values2; + + int e1 = grib_get_size(g,what,&count); + int e2 = grib_get_size(h,what,&ncount); + + + if(e1 == GRIB_NOT_FOUND && e2 == GRIB_NOT_FOUND) + return 0; + + if(e1) + { + fprintf(stderr,"Cannot get number of '%s' %d\n",what,e1); + return 1; + } + + if(e2) + { + fprintf(stderr,"Cannot get number of '%s' %d\n",what,e2); + return 1; + } + + if(ncount != count) + { + fprintf(stderr,"'%s' count mismatch %ld -> %ld\n",what,(long)count,(long)ncount); + return 1; + } + + values1 = (double*)malloc(sizeof(double)*(count)); + values2 = (double*)malloc(sizeof(double)*(count)); + + + ncount = count; + if((err = grib_get_double_array(g,what,values1,&count))) + { + fprintf(stderr,"Cannot get %s1 %d (%s) count=%ld\n",what,err,grib_get_error_message(err),(long)count); + goto foo; + } + + if(ncount != count) + { + fprintf(stderr,"%s count changes %ld -> %ld\n",what,(long)count,(long)ncount); + err = 1; + goto foo; + } + + + ncount = count; + if((err = grib_get_double_array(h,what,values2,&count))) + { + fprintf(stderr,"Cannot get %s2 %d (%s) count=%ld\n",what,err,grib_get_error_message(err),(long)ncount); + goto foo; + } + + if(ncount != count) + { + fprintf(stderr,"%s count changes %ld -> %ld\n",what,(long)count,(long)ncount); + err = 1; + goto foo; + } + + err = compare_values(values1,values2,count,what); + +foo: + free(values2); + free(values1); + + return err; +} + +int compare_with_handle(grib_handle* g,grib_handle *h) +{ + + double s1,d1,r1,l1; + double s2,d2,r2,l2; + + + l1 = s1 = r1 = d1 = 1e-100; + grib_get_double(g,"binaryScaleFactor",&s1); + grib_get_double(g,"referenceValue",&r1); + grib_get_double(g,"decimalScaleFactor",&d1); + grib_get_double(g,"laplacianOperator",&l1); + + + l2 = s2 = r2 = d2 = 1e-100; + grib_get_double(h,"binaryScaleFactor",&s2); + grib_get_double(h,"referenceValue",&r2); + grib_get_double(h,"decimalScaleFactor",&d2); + grib_get_double(g,"laplacianOperator",&l2); + + if(s1 != s2) + { + fprintf(stderr, + "Scale factor 1 = %g " + "Scale factor 2 = %g diff=%g" + "\n" ,s1,s2,s1-s2); + } + + if(d1 != d2) + { + fprintf(stderr, + "Decimal Scale factor 1 = %g " + "Decimal Scale factor 2 = %g diff=%g" + "\n" ,d1,d2,d1-d2); + } + + if(r1 != r2) + { + fprintf(stderr, + "Ref. value 1 = %g " + "Ref. value 2 = %g diff=%g" + "\n" ,r1,r2,r1-r2); + } + + if(l1 != l2) + { + fprintf(stderr, + "Laplacian 1 = %g " + "Laplacian 2 = %g diff=%g" + "\n" ,l1,l2,l1-l2); + } + + + + if(compare_lists(g,h,"values")) + return 1; + + if(compare_lists(g,h,"pv")) + return 1; + + if(compare_lists(g,h,"pl")) + return 1; + + return 0; + +} + +int save_message(grib_handle* h,const char* path) +{ + FILE* out = fopen(path,"w"); + const void *p; + size_t len; + + if(!out) { + perror(path); + return -1; + } + + printf("save to %s\n",path); + + grib_get_message(h,&p,&len); + + if(fwrite(p,1,len,out) != len) + { + perror(path); + fclose(out); + return -1; + } + + if(fclose(out)) + { + perror(path); + return -1; + } + + return 0; +} + + +const char* problem(const char* path,const char* name,int field) +{ + static char buf[1024]; + const char *p = path; + const char *q = path; + + while(*p) + { + if(*p == '/') q=p+1; + p++; + } + + sprintf(buf,"/vol/dataserv/grib_samples/problems/%s_%s_%d.grib",q,name,field); + return buf; +} diff --git a/tests.ecmwf/compatibility.c b/tests.ecmwf/compatibility.c new file mode 100644 index 000000000..21a09c2df --- /dev/null +++ b/tests.ecmwf/compatibility.c @@ -0,0 +1,57 @@ +#include "test.h" + +char buffer[1024*1024*80]; + +int main(int argc,char** argv) +{ + long length = 0; + FILE *f; + grib_handle *g = 0; + grib_handle *h = 0; + int err; + int cnt = 0; + + f = fopen(argc > 1 ? argv[1]: "data" ,"r"); + if(!f) + { + perror(argc > 1 ? argv[1]: "data"); + exit(10); + } + + length = sizeof(buffer); + while((err = readany(f,buffer,&length)) == 0) + { + + g = grib_handle_new_from_message(0,buffer,length); + h = grib_handle_clone(g); + + if(compare_with_gribex(h)) + exit(1); + + if(compare_with_handle(g,h)) + exit(1); + + + cnt++; + grib_handle_delete(g); + grib_handle_delete(h); + + + length = sizeof(buffer); + } + + if(err != -1) + { + fprintf(stderr,"readany error %d\n",err); + exit(17); + } + + if(cnt == 0) + { + fprintf(stderr,"No GRIB processed\n"); + exit(18); + } + + + exit(0); +} diff --git a/tests.ecmwf/compatibility.test b/tests.ecmwf/compatibility.test new file mode 100755 index 000000000..391d6a3a0 --- /dev/null +++ b/tests.ecmwf/compatibility.test @@ -0,0 +1,5 @@ +#!/bin/ksh +exit +bin=$(echo $0|sed s/\.test$//) +export MARS_MISSING_VALUE=9999 +$bin $@ diff --git a/tests.ecmwf/compatibility_ex.c b/tests.ecmwf/compatibility_ex.c new file mode 100644 index 000000000..5a63b0a74 --- /dev/null +++ b/tests.ecmwf/compatibility_ex.c @@ -0,0 +1,78 @@ +#include "test.h" + +char buffer[1024*1024*80]; + +int main(int argc,char** argv) +{ + FILE *f; + FILE* of; + grib_handle *h = 0; + grib_context *gc = 0; + int err; + int option_flags =0; + char* ofname; + char* fname; + char* mode="serialize"; + char* values_format="10%g"; + option_flags |= GRIB_DUMP_FLAG_VALUES; + + fname = argc > 1 ? argv[1]: "data" ; + ofname=(char*)malloc(sizeof(char)*(strlen(fname)+6)); + sprintf(ofname,"%s.dump",fname); + + f = fopen(fname ,"r"); + if(!f) { + perror(fname); + exit(10); + } + + if ((h = grib_handle_new_from_file(0,f,&err)) == NULL) { + fclose( f); + exit(1); + } + + of = fopen(ofname ,"w"); + if(!of) { + perror(ofname); + exit(10); + } + + grib_dump_content(h,of,mode,option_flags,values_format); + + grib_handle_delete(h); + + if(fclose(of)) { + perror(ofname); + exit(1); + } + + of = fopen(ofname ,"r"); + if(!of) { + perror(ofname); + exit(10); + } + + gc = grib_context_get_default(); + h=grib_handle_new(gc); + if (!h) { + printf("Error: unable to create handle\n"); + exit(1); + } + + GRIB_CHECK(grib_load_from_text_file(h,of),ofname); + + if(fclose(of)) { + perror(ofname); + exit(1); + } + + /* unlink(ofname);*/ + + if(compare_with_gribex(h)) + exit(1); + + grib_handle_delete(h); + + fclose( f); + exit(0); +} diff --git a/tests.ecmwf/concept b/tests.ecmwf/concept new file mode 100755 index 000000000..2c6104f92 --- /dev/null +++ b/tests.ecmwf/concept @@ -0,0 +1,33 @@ +#!/usr/bin/ksh +set -e +#exit +rm -f $1.out || true + +#GRIB_TOOLS_DIR=/usr/local/lib/metaps/bin +#GRIB_TOOLS_DIR=/marsdev/data/max/grib_api/tools +GRIB_TOOLS_DIR=/tmp/mac/p4/grib_api/main/tools +GRIBEX_DIR=/usr/local/lib/metaps/bin +EMOS_BIN=~emos/bin/$ARCH + +packingType=`$GRIB_TOOLS_DIR/grib_ls -f -p packingType $1` + +echo "packingType = "$packingType + +if [[ ${packingType} == *unknown ]] + then + echo "$1: packingType unknown" + $GRIB_TOOLS_DIR/grib_debug $1 + exit 1 +fi + +gridType=`$GRIB_TOOLS_DIR/grib_get -p gridType $1` + +echo "gridType = "$gridType + +if [[ ${gridType} == *unknown ]] + then + echo "$1: gridType unknown" + $GRIB_TOOLS_DIR/grib_debug $1 + exit 1 +fi + diff --git a/tests.ecmwf/concept.test b/tests.ecmwf/concept.test new file mode 100755 index 000000000..63ca8f15f --- /dev/null +++ b/tests.ecmwf/concept.test @@ -0,0 +1,5 @@ +#!/bin/ksh +#exit +bin=$(echo $0|sed s/\.test$//) +export MARS_MISSING_VALUE=9999 +$bin $@ diff --git a/tests.ecmwf/deserialize.c b/tests.ecmwf/deserialize.c new file mode 100644 index 000000000..9d79757a5 --- /dev/null +++ b/tests.ecmwf/deserialize.c @@ -0,0 +1,52 @@ +#include + +#include "grib_api_internal.h" + +int main(int argc, char *argv[]) +{ +#if 1 + FILE *f; + int ret=0; + int i; + grib_associative_array* ar; + grib_context* gc; + grib_handle* gh; + + + + gc = grib_context_get_default(); + ar=grib_associative_array_new(gc); + if (argc > 1) { + for (i=1;i /dev/null diff --git a/tests.ecmwf/filter b/tests.ecmwf/filter new file mode 100755 index 000000000..c4b79cac2 --- /dev/null +++ b/tests.ecmwf/filter @@ -0,0 +1,9 @@ +#!/usr/bin/ksh +set -ex +#exit + +#GRIB_TOOLS_DIR=/usr/local/lib/metaps/bin +#GRIB_TOOLS_DIR=/marsdev/data/max/grib_api/tools +GRIB_TOOLS_DIR=/tmp/mac/p4/grib_api/main/tools + +$GRIB_TOOLS_DIR/grib_debug $1 > /dev/null diff --git a/tests.ecmwf/filter.test b/tests.ecmwf/filter.test new file mode 100755 index 000000000..63ca8f15f --- /dev/null +++ b/tests.ecmwf/filter.test @@ -0,0 +1,5 @@ +#!/bin/ksh +#exit +bin=$(echo $0|sed s/\.test$//) +export MARS_MISSING_VALUE=9999 +$bin $@ diff --git a/tests.ecmwf/grib1to2.c b/tests.ecmwf/grib1to2.c new file mode 100644 index 000000000..255825ea7 --- /dev/null +++ b/tests.ecmwf/grib1to2.c @@ -0,0 +1,98 @@ +#include "test.h" + +char buffer[1024*1024*80]; + +int main(int argc,char** argv) +{ + long length = 0; + FILE *f; + grib_handle *g = 0; + grib_handle *h = 0; + int err; + int cnt = 0; + extern const char* grib_get_accessor_class_name(grib_handle* , const char* ); + int sample = getenv("SAMPLE") != NULL; + + f = fopen(argc > 1 ? argv[1]: "data" ,"r"); + if(!f) + { + perror(argc > 1 ? argv[1]: "data"); + exit(10); + } + + length = sizeof(buffer); + while((err = readany(f,buffer,&length)) == 0) + { + const char *result_class_name; + if(strncmp(buffer,"GRIB",4) != 0) + { + cnt++; + length = sizeof(buffer); + continue; + } + + g = grib_handle_new_from_message(0,buffer,length); + + if(sample) save_message(g,"grib1to2.orig"); + + h = grib_handle_clone(g); + + result_class_name = grib_get_accessor_class_name(g,"codedValues"); + if(!result_class_name) + result_class_name = grib_get_accessor_class_name(g,"values"); + + fprintf(stderr,"Value class is %s\n",result_class_name?result_class_name:"NONE"); + +#if 0 + if(result_class_name && (strcmp(result_class_name,"data_2order_packing") == 0 || + + strcmp(result_class_name,"data_g22order_packing") == 0) + + ) + { + cnt++; + printf("Field %d ignored\n",cnt); + grib_handle_delete(g); + length = sizeof(buffer); + continue; + } +#endif + + grib_set_long(h,"editionNumber",2); + + if(sample) save_message(h,"grib1to2.data"); + + if(compare_with_handle(g,h)) + exit(99); + + +#if 0 + grib_set_long(g,"editionNumber",1); + + if(compare_with_gribex(g)) + exit(99); +#endif + + cnt++; + grib_handle_delete(g); + grib_handle_delete(h); + + + length = sizeof(buffer); + } + + if(err != -1) + { + fprintf(stderr,"readany error %d\n",err); + exit(17); + } + + if(cnt == 0) + { + fprintf(stderr,"No GRIB processed\n"); + exit(18); + } + + + exit(0); +} diff --git a/tests.ecmwf/grib1to2.test b/tests.ecmwf/grib1to2.test new file mode 100755 index 000000000..63ca8f15f --- /dev/null +++ b/tests.ecmwf/grib1to2.test @@ -0,0 +1,5 @@ +#!/bin/ksh +#exit +bin=$(echo $0|sed s/\.test$//) +export MARS_MISSING_VALUE=9999 +$bin $@ diff --git a/tests.ecmwf/grib_ls b/tests.ecmwf/grib_ls new file mode 100755 index 000000000..68776c98d --- /dev/null +++ b/tests.ecmwf/grib_ls @@ -0,0 +1,19 @@ +#!/usr/bin/ksh +#set -e +#exit +rm -f $1.out || true + +#GRIB_TOOLS_DIR=/usr/local/lib/metaps/bin +#GRIB_TOOLS_DIR=/marsdev/data/max/grib_api/tools +GRIB_TOOLS_DIR=/tmp/mac/p4/grib_api/main/tools +GRIBEX_DIR=/usr/local/lib/metaps/bin +EMOS_BIN=~emos/bin/$ARCH + +$GRIB_TOOLS_DIR/grib_ls $1 +if [[ $? -ne 0 ]] +then + $GRIB_TOOLS_DIR/grib_debug $1 + exit 1 +fi + +rm -f $1.out || true diff --git a/tests.ecmwf/grib_ls.test b/tests.ecmwf/grib_ls.test new file mode 100755 index 000000000..63ca8f15f --- /dev/null +++ b/tests.ecmwf/grib_ls.test @@ -0,0 +1,5 @@ +#!/bin/ksh +#exit +bin=$(echo $0|sed s/\.test$//) +export MARS_MISSING_VALUE=9999 +$bin $@ diff --git a/tests.ecmwf/gribex b/tests.ecmwf/gribex new file mode 100755 index 000000000..e170617b4 --- /dev/null +++ b/tests.ecmwf/gribex @@ -0,0 +1,26 @@ +#!/usr/bin/ksh +set -e +#set -x +rm -f $1.dump $1.gen $1.gen.dump || true + +#GRIB_TOOLS_DIR=/usr/local/lib/metaps/bin +#GRIB_TOOLS_DIR=/marsdev/data/max/grib_api/tools +GRIB_TOOLS_DIR=/tmp/mac/p4/grib_api/main/tools +GRIBEX_DIR=/usr/local/lib/metaps/bin +EMOS_BIN=~emos/bin/$ARCH + +$GRIB_TOOLS_DIR/grib_dump -v -f "10%.25f" $1 > $1.dump + +$GRIB_TOOLS_DIR/grib_gen $1.dump $1.gen + +# gribex compare +$EMOS_BIN/compareGribFiles -fail $1 $1.gen + +# gribex test +$GRIBEX_DIR/pgrib.mars $1.gen + +# dump diff test +$GRIB_TOOLS_DIR/grib_dump -v -f "10%.25f" $1.gen > $1.gen.dump +diff $1.gen.dump $1.dump + +rm -f $1.dump $1.gen $1.gen.dump || true diff --git a/tests.ecmwf/gribex.test b/tests.ecmwf/gribex.test new file mode 100755 index 000000000..391d6a3a0 --- /dev/null +++ b/tests.ecmwf/gribex.test @@ -0,0 +1,5 @@ +#!/bin/ksh +exit +bin=$(echo $0|sed s/\.test$//) +export MARS_MISSING_VALUE=9999 +$bin $@ diff --git a/tests.ecmwf/memory.c b/tests.ecmwf/memory.c new file mode 100644 index 000000000..6a68e8f44 --- /dev/null +++ b/tests.ecmwf/memory.c @@ -0,0 +1,223 @@ +#include "test.h" + +char buffer[1024*1024*10]; +double values[1024*1024*10]; + +long cnt = 0; +long ff = 0; +long m = 0; + +void* foo[1000000] = {0,}; + +static void default_free(const grib_context* c, void* p) { + +#if 0 + int i, found = 0; + + for(i = 0; i < m; i++) + if(foo[i] == p) + { + foo[i] = 0; + found = 1; + } + + if(!found) marslog(LOG_EXIT,"Wrong free called %p",p); +#endif + + ff++; + cnt--; + free(p); +} + +static void* default_malloc(const grib_context* c, size_t size) { + cnt++; +#if 0 + if(m == NUMBER(foo)) marslog(LOG_EXIT,"Too many malloc"); + return foo[m++] = malloc(size); +#else + return malloc(size); +#endif +} + + +int main(int argc,char** argv) +{ + long length = 0; + FILE *f; + grib_handle *g = 0; + int e; + grib_iterator* i; + double lat,lon,val; + int n; + size_t count; + size_t fields1 = 0; + size_t fields2 = 0; + grib_handle* p; + FILE* dev_null = fopen("/dev/null","w"); + + grib_context *c = grib_context_new(0); + + + f = fopen(argc > 1 ? argv[1]: "data" ,"r"); + if(!f) + { + perror(argc > 1 ? argv[1]: "data"); + exit(1); + } + + length = sizeof(buffer); + + grib_context_set_memory_proc(c,default_malloc,default_free); + grib_context_set_persistent_memory_proc(c,default_malloc,default_free); + + while( (e = readany(f,buffer,&length)) == 0) + { + + /* alarm(60); */ + fields1++; + + if(fields1 != 1) + { + length = sizeof(buffer); + alarm(0); + continue; + } + + g = grib_handle_new_from_message(c,buffer,length); + p = grib_handle_new_from_message_copy(c,buffer,length); + + grib_dump_content(g,dev_null,NULL,0,NULL); + + i = grib_iterator_new(g); + + if(i != NULL) + { + + n = 0; + while(grib_iterator_next(i,&lat,&lon,&val)) + { + n++; + } + + + grib_iterator_delete(i); + + /* printf("n = %d\n",n); if(n != size) exit(1); */ + + } + + count = 0; + if(grib_get_size(g,"values",&count) == 0 && count != 0) + { + double *values = (double*)malloc(sizeof(double)*count); + int err; + + if((err = grib_get_double_array(g,"values",values,&count))) + { + fprintf(stderr,"Cannot get values %d (%s) count=%d\n",err,grib_get_error_message(err),count); + } + free(values); + } + + + { + grib_handle *h = grib_handle_clone(g); + grib_keyset* ks = grib_new_keyset(h,"mars.*"); + char name[80]; + size_t len = sizeof(name); + int err; + + while(grib_keyset_next(ks,name,&len)) + { + double d; long l; char c[1024]; unsigned char b[1024]; + printf("%s\n",name); + + if((err = grib_get_double(h,name,&d))) + fprintf(stderr,"Cannot get %s as double %d (%s)\n",name,err, + grib_get_error_message(err)); + + if((err = grib_get_long(h,name,&l))) + fprintf(stderr,"Cannot get %s as long %d (%s)\n",name,err, + grib_get_error_message(err)); + + len = sizeof(c); + if((err = grib_get_string(h,name,c,&len))) + fprintf(stderr,"Cannot get %s as string %d (%s)\n",name,err, + grib_get_error_message(err)); + + len = sizeof(b); + if((err = grib_get_bytes(h,name,b,&len))) + fprintf(stderr,"Cannot get %s as bytes %d (%s)\n",name,err, + grib_get_error_message(err)); + + + len = sizeof(name); + } + + grib_keyset_delete(ks); + grib_handle_delete(h); + + } + + + grib_handle_delete(g); + grib_handle_delete(p); + + + length = sizeof(buffer); + } + + + + rewind(f); + while((g = grib_handle_new_from_file(c,f,&e))) + { + +int i; + + fields2++; + + + for(i=1;i<10;i++) + grib_set_long(g,"localDefinitionNumber",i); + + grib_handle_delete(g); + } + + if(e) { + fprintf(stderr,"grib_handle_new_from_file error %s\n",grib_get_error_message(e)); + exit(1);} + + if(fields1 != fields2) + { + fprintf(stderr,"readany/grib_handle_new_from_file mismatch %d %d\n",fields1,fields2); + exit(1); + } + + grib_handle_delete(grib_handle_new_from_template(c,"latlon")); + + rewind(f); + + + + grib_context_delete(c); + + if(cnt != 0) + { + fprintf(stderr,"Malloc/free mismatch %ld\n",cnt); + exit(1); + } + + fclose(f); + + if(e != -1) + { + fprintf(stderr,"readany error %d\n",e); + exit(1); + } + + fclose(dev_null); + + exit(cnt); + +} diff --git a/tests.ecmwf/memory.test b/tests.ecmwf/memory.test new file mode 100755 index 000000000..59b4e0e9a --- /dev/null +++ b/tests.ecmwf/memory.test @@ -0,0 +1,14 @@ +#!/bin/ksh +exit +nice valgrind --num-callers=999999 --leak-check=full --leak-resolution=high -v ./memory $@ 2> mem +status=$? + +grep "blocks are definitely lost" mem && status=1 +grep "ERROR SUMMARY" mem | grep -v ": 0 errors" && status=1 +if [[ $status -ne 0 ]] +then + cat mem + exit 1 +else + echo OK +fi diff --git a/tests.ecmwf/packing.c b/tests.ecmwf/packing.c new file mode 100644 index 000000000..92d2017ff --- /dev/null +++ b/tests.ecmwf/packing.c @@ -0,0 +1,162 @@ +#include "test.h" + + +char buffer[1024*1024*80]; + + +int main(int argc,char** argv) +{ + long length = 0; + FILE *f; + grib_handle *g = 0; + grib_handle *h = 0; + int err; + size_t count; + size_t ncount; + size_t message_count = 0; + int cnt = 0; + double *values; + int sample = getenv("SAMPLE") != NULL; + int bad = 0; + + extern const char* grib_get_accessor_class_name(grib_handle* , const char* ); + + /* grib_context_set_log_mode(0,GRIB_LOG_DEBUG); */ + + char *path = argc > 1 ? argv[1]: "data"; + + f = fopen(path ,"r"); + if(!f) + { + perror(path); + exit(10); + } + + length = sizeof(buffer); + + + while((err = readany(f,buffer,&length)) == 0) + { + const char* result_class_name = NULL; + + if(strncmp(buffer,"GRIB",4) != 0) + { + cnt++; + length = sizeof(buffer); + continue; + } + + + g = grib_handle_new_from_message(0,buffer,length); + + if(!g) + { + fprintf(stderr,"Cannot get handle : %ld - messages %d\n",length, message_count); + exit(11); + } + result_class_name = grib_get_accessor_class_name(g,"codedValues"); + if(!result_class_name) + result_class_name = grib_get_accessor_class_name(g,"values"); + + fprintf(stderr,"Value class is %s\n",result_class_name?result_class_name:"NONE"); + +#if 0 + if(result_class_name && (strcmp(result_class_name,"data_2order_packing") == 0 || + + strcmp(result_class_name,"data_g22order_packing") == 0) + + ) + { + cnt++; + printf("Field %d ignored\n",cnt); + grib_handle_delete(g); + length = sizeof(buffer); + message_count++; + continue; + } +#endif + + if(sample) save_message(g,"packing.orig"); + + h = grib_handle_clone(g); + if(!h) + { + fprintf(stderr,"Cannot clone handle : %ld - messages %d\n",length, message_count); + exit(11); + } + + if((err = grib_get_size(g,"values",&count))) + { + fprintf(stderr,"Cannot get number of values %d - messages %d\n",err, message_count); + exit(11); + } + + + values = (double*)malloc(sizeof(double)*(count)); + ncount = count; + + if((err = grib_get_double_array(g,"values",values,&ncount))) + { + fprintf(stderr,"Cannot get original values %d (%s) count=%d - messages %d\n",err,grib_get_error_message(err),count, message_count); + exit(15); + } + + if(count != ncount) + { + fprintf(stderr,"count changed %d %d - messages %d\n",count,ncount, message_count); + exit(15); + } + + if((err = grib_set_double_array(h,"values",values,count))) + { + fprintf(stderr,"Cannot set values %d (%s) count=%d- messages %d\n",err,grib_get_error_message(err),count, message_count); + exit(15); + } + free(values); + + if(sample) save_message(h,"packing.grib"); + /* grib_dump_content(h,stdout,NULL,0,NULL); */ + + if(compare_with_gribex(h)){ + fprintf(stderr,"messages %d\n",message_count); + compare_two_gribex(g); + compare_with_gribex(g); + /* save_message(g,problem(get_current_dir_name(),"packing_orig",message_count)); */ + /* save_message(h,problem(get_current_dir_name(),"packing_api",message_count)); */ + exit(15); + } + + if(compare_with_handle(g,h)){ + fprintf(stderr,"messages %d\n",message_count); + compare_two_gribex(g); + compare_with_gribex(g); + compare_with_gribex(h); + /* save_message(g,problem(get_current_dir_name(),"packing_orig",message_count)); */ + /* save_message(h,problem(get_current_dir_name(),"packing_api",message_count)); */ + exit(15); + } + + grib_handle_delete(g); + grib_handle_delete(h); + + + length = sizeof(buffer); + message_count++; + } + + + if(err != -1) + { + fprintf(stderr,"readany error %d\n",err); + exit(17); + } + + if(message_count == 0 && cnt == 0) + { + fprintf(stderr,"No GRIB processed\n"); + exit(18); + } + + + exit(bad?1:0); +} diff --git a/tests.ecmwf/packing.test b/tests.ecmwf/packing.test new file mode 100755 index 000000000..391d6a3a0 --- /dev/null +++ b/tests.ecmwf/packing.test @@ -0,0 +1,5 @@ +#!/bin/ksh +exit +bin=$(echo $0|sed s/\.test$//) +export MARS_MISSING_VALUE=9999 +$bin $@ diff --git a/tests.ecmwf/request.c b/tests.ecmwf/request.c new file mode 100644 index 000000000..fbb4f8bcb --- /dev/null +++ b/tests.ecmwf/request.c @@ -0,0 +1,223 @@ +#include "test.h" +/* #include */ + +char buffer[1024*1024*10]; + +char* check[] = { + + "class", + "type", + "stream", + + "expver", + "date", + "time", + "levelist", + "channel", + + "diagnostic", + "iteration", + "method", + "system", + "number", + "frequency", + "direction", + "origin", + "refdate", + "reference", + "fcmonth", + "leadtime", + "opttime", + "ident", + "instrument", + "obstype", + "levtype", + + "fcperiod", + "param", + "domain", + "quantile", + + /* complicated: ocean data, def 4 */ + "product", + "section", + "latitude", + "longitude", + "range", + "step", + +}; + +char* warn[] = { + "warn", +}; + +int main(int argc,char** argv) +{ + size_t length = 0; + FILE *f; + grib_handle *g = 0; + int e; + grib_keyset* ks; + char name[80]; + size_t len = sizeof(name); + + + /* marsinit(&argc,argv,0,0,0); */ + + f = fopen(argc > 1 ? argv[1]: "data" ,"r"); + if(!f) + { + perror(argc > 1 ? argv[1]: "data"); + exit(1); + } + + length = sizeof(buffer); + + + while((e = grib_read_any(0,f,buffer,&length)) == 0) + { + /* request *r = empty_request(0); */ + /* parameter *p; */ + /* grib_to_request(r,buffer,length); */ + /* print_all_requests(r); */ + + g = grib_handle_new_from_message(0,buffer,length); + + printf("------------\n"); + ks = grib_new_keyset(g,"mars.*"); + + while(grib_keyset_next(ks,name,&len)) + { + char c[1024]; + len = sizeof(c); + + + if((e = grib_get_string(g,name,c,&len))) + fprintf(stderr,"Cannot get %s as string %d (%s)\n",name,e, + grib_get_error_message(e)); + + printf("MARS -> %s ... %s\n",name,c); + + len = sizeof(name); + } + + /* print_one_request(r); */ + + grib_keyset_delete(ks); + + + +#if 0 + p = r->params; + while(p) + { + if(*p->name != '_') + { + char name[80]; + char value[80]; + char *q = name; + char gvalue[80] = {0,}; + char nam[80] = {0,}; + size_t s = sizeof(gvalue); + int e; + int j; + int nerr = 0; + strcpy(name,p->name); + while(*q) { if(isupper(*q)) *q = tolower(*q); q++; } + + strcpy(value,p->values->name); + q = value; + while(*q) { if(isupper(*q)) *q = tolower(*q); q++; } + + if(strcmp(name,"stream") == 0 && strcmp(value,"da") == 0) + strcpy(value,"oper"); + + if(strcmp(name,"stream") == 0 && strcmp(value,"ef") == 0) + strcpy(value,"enfo"); + + if(strcmp(name,"stream") == 0 && strcmp(value,"sd") == 0) + strcpy(value,"supd"); + + if(strcmp(name,"stream") == 0 && strcmp(value,"wv") == 0) + strcpy(value,"wave"); + + if(strcmp(name,"stream") == 0 && strcmp(value,"mo") == 0) + strcpy(value,"mnth"); + + if(strcmp(name,"stream") == 0 && strcmp(value,"ch") == 0) + strcpy(value,"cher"); + + if(strcmp(name,"stream") == 0 && strcmp(value,"sf") == 0) + strcpy(value,"sens"); + + if(strcmp(name,"stream") == 0 && strcmp(value,"tg") == 0) + strcpy(value,"toga"); + + if(strcmp(name,"stream") == 0 && strcmp(value,"mv") == 0) + strcpy(value,"msdc"); + + for(j = 0; j < NUMBER(check) ; j++) + { + + if(EQ(name,check[j])) + { + sprintf(nam,"mars.%s",name); + e = grib_get_string(g,nam,gvalue,&s); + printf("%s api=[%s] mars=[%s]\n",nam,gvalue,value); + + + if(!EQ(value,gvalue)) + { + fprintf(stderr,"mismatch %s api=[%s] mars=[%s]\n",name,gvalue,value); + ; + nerr++; + } + } + } + + if(nerr) + exit(1); + + for(j = 0; j < NUMBER(warn) ; j++) + { + + if(EQ(name,warn[j])) + { + sprintf(nam,"mars.%s",name); + e = grib_get_string(g,nam,gvalue,&s); + printf("%s api=[%s] mars=[%s]\n",nam,gvalue,value); + + + if(!EQ(value,gvalue)) + { + fprintf(stderr,"mismatch %s api=[%s] mars=[%s]\n",name,gvalue,value); + } + } + } + + + } + p = p->next; + } + + + free_all_requests(r); +#endif + + + + grib_handle_delete(g); + + + length = sizeof(buffer); + } + + if(e != -1) + { + fprintf(stderr,"readany error %d\n",e); + exit(1); + } + + exit(0); +} diff --git a/tests.ecmwf/sample.c b/tests.ecmwf/sample.c new file mode 100644 index 000000000..669e92bf3 --- /dev/null +++ b/tests.ecmwf/sample.c @@ -0,0 +1,169 @@ +#include +#include +#include "grib_api.h" + +char buffer[1024*1024*20]; + +static char* names[] = { + "localDefinitionNumber", + "identificationOfOriginatingGeneratingCenter", + "subCenterIdentification", + "stream", + "type", + "localFlag", + "section1.flag", + "resolutionAndComponentFlags", + "section4.flag", + "numberOfPointsAlongAParallel", + "dataRepresentationType", + "pvlLocation", + "flagShowingPostAuxiliaryArrayInUse", + "resolutionAndComponentFlags", + "numberOfLocalDefinitions", + "timeRangeIndicator", + "indicatorOfUnitOfTimeRange", + "indicatorOfTypeOfLevel", + "flagShowingPostAuxiliaryArrayInUse", + "spaceUnitFlag", + "timeUnitFlag", + "mixedCoordinateFieldFlag", + "coordinate1Flag", + "averagingFlag", + "coordinate2Flag", + "coordinate3Flag", + "coordinate4Flag", + "flagForIrregularGridCoordinateList", + "flagForNormalOrStaggeredGrid", + "flagForAnyFurtherInformation", +}; + +char *dir = "/vol/dataserv/grib_samples/incoming/"; + +main(int argc,char** argv) +{ + long length = 0; + FILE *f; + grib_handle *g = 0; + int e; + size_t size; + char ext[5] = {0,}; + + f = fopen(argc > 1 ? argv[1]: "data" ,"r"); + if(!f) + { + perror(argc > 1 ? argv[1]: "data"); + exit(1); + } + + length = sizeof(buffer); + + + while( (e = readany(f,buffer,&length)) == 0) + { + char fname[1024]; + int i; + + g = grib_handle_new_from_message(0,buffer,length); + + strncpy(ext,buffer,4); + ext[0] = tolower(ext[0]); + ext[1] = tolower(ext[1]); + ext[2] = tolower(ext[2]); + ext[3] = tolower(ext[3]); + + + strcpy(fname,"./"); + strcpy(fname,"/vol/dataserv/grib_samples/brute_force/"); +#if 1 + for(i = 0; i < sizeof(names)/sizeof(names[0]); i++) + { + char val[1024]; + size_t size = sizeof(val); + e = grib_get_string(g,names[i],val,&size); + if(e) + strcat(fname,"na"); + else + strcat(fname,val); + strcat(fname,"_"); + } + + strcat(fname,"."); + strcat(fname,ext); + + if(access(fname,F_OK) != 0) + { + FILE* out = fopen(fname,"w"); + if(!out) { + perror(fname); + exit(1); + } + + if(fwrite(buffer,1,length,out) != length) + { + perror(fname); + exit(1); + } + + if(fclose(out)) + { + perror(fname); + exit(1); + } + } +#else + + for(i = 0; i < sizeof(names)/sizeof(names[0]); i++) + { + char val[1024]; + size_t size = sizeof(val); + e = grib_get_string(g,names[i],val,&size); + if(e == 0) + { + sprintf(fname,"%s/%s=%s.%s", + dir, + names[i], + val, + ext); + + if(access(fname,F_OK) != 0) + { + FILE* out = fopen(fname,"w"); + if(!out) { + perror(fname); + exit(1); + } + + if(fwrite(buffer,1,length,out) != length) + { + perror(fname); + exit(1); + } + + if(fclose(out)) + { + perror(fname); + exit(1); + } + } + + } + } +#endif + + /* grib_iterator_delete(i); */ + + grib_handle_delete(g); + + + length = sizeof(buffer); + } + + if(e != -1) + { + fprintf(stderr,"readany error %d\n",e); + exit(1); + } + + + exit(0); +} diff --git a/tests.ecmwf/sample1.c b/tests.ecmwf/sample1.c new file mode 100644 index 000000000..0e19e4e0b --- /dev/null +++ b/tests.ecmwf/sample1.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include + +#include "grib_api.h" + +int main(int argc, char *argv[]) +{ + int ret=0; + + grib_handle* h; + double missing=99999; + double* values; + long numberOfPointsAlongAParallel,numberOfPointsAlongAMeridian,numberOfPoints,i,j,k; + int option_flags; + + h = grib_handle_new_from_template(0,"bitmap"); + if(!h) { + printf("ERROR: Unable to create grib handle\n"); + exit(1); + } + + grib_set_double(h,"latitudeOfFirstGridPointInDegrees",10); + grib_set_double(h,"longitudeOfFirstGridPointInDegrees",-10); + + grib_set_double(h,"latitudeOfLastGridPointInDegrees",-10); + grib_set_double(h,"longitudeOfLastGridPointInDegrees",10); + + grib_set_double(h,"jDirectionIncrementInDegrees",0.5); + grib_set_double(h,"iDirectionIncrementInDegrees",0.5); + + grib_get_long( h,"numberOfPointsAlongAParallel",&numberOfPointsAlongAParallel); + grib_get_long( h,"numberOfPointsAlongAMeridian",&numberOfPointsAlongAMeridian); + + numberOfPoints=numberOfPointsAlongAMeridian*numberOfPointsAlongAMeridian; + values=(double*)malloc(numberOfPoints*sizeof(double)); + + grib_set_double( h,"missingValue",missing); + + for (j=0;j 1 ? argv[1]: "data" ,"r"); + if(!f) + { + perror(argc > 1 ? argv[1]: "data"); + exit(1); + } + +#ifdef READ_ANY + printf("#---- readany used ----\n"); + while((e = readany(f,buffer,&length)) != -1) +#endif +#ifdef GRIB_READ_ANY + printf("#---- grib_read_any used ----\n"); + while((e = grib_read_any(gc,f,buffer,&length)) != GRIB_END_OF_FILE) +#endif +#ifdef GRIB_READ_ANY_ALLOC + printf("#---- grib_read_any_alloc used ----\n"); + while((e = grib_read_any_alloc(gc,f,&buffer,&length)) != GRIB_END_OF_FILE) +#endif + { + + if(e != 0 ) + { + printf("grib_read_any error %d\n",e); + exit(e); + } + + + g = grib_handle_new_from_message(0,buffer,length); + + grib_dump_content(g,stdout,"serialize",0,NULL); + + grib_handle_delete(g); + + } + + + exit(0); +} diff --git a/tests.ecmwf/set b/tests.ecmwf/set new file mode 100755 index 000000000..0e1ec9b7f --- /dev/null +++ b/tests.ecmwf/set @@ -0,0 +1,14 @@ +#!/usr/bin/ksh +set -e +#exit +rm -f $1.out || true + +#GRIB_TOOLS_DIR=/usr/local/lib/metaps/bin +#GRIB_TOOLS_DIR=/marsdev/data/max/grib_api/tools +GRIB_TOOLS_DIR=/tmp/mac/p4/grib_api/main/tools +GRIBEX_DIR=/usr/local/lib/metaps/bin +EMOS_BIN=~emos/bin/$ARCH + +$GRIB_TOOLS_DIR/grib_set -q -s centre=80 $1 $1.out + +rm -f $1.out || true diff --git a/tests.ecmwf/set.test b/tests.ecmwf/set.test new file mode 100755 index 000000000..63ca8f15f --- /dev/null +++ b/tests.ecmwf/set.test @@ -0,0 +1,5 @@ +#!/bin/ksh +#exit +bin=$(echo $0|sed s/\.test$//) +export MARS_MISSING_VALUE=9999 +$bin $@ diff --git a/tests.ecmwf/set1to2 b/tests.ecmwf/set1to2 new file mode 100755 index 000000000..efb5c15b6 --- /dev/null +++ b/tests.ecmwf/set1to2 @@ -0,0 +1,14 @@ +#!/usr/bin/ksh +set -e +#exit +rm -f $1.out || true + +#GRIB_TOOLS_DIR=/usr/local/lib/metaps/bin +#GRIB_TOOLS_DIR=/marsdev/data/max/grib_api/tools +GRIB_TOOLS_DIR=/tmp/mac/p4/grib_api/main/tools +GRIBEX_DIR=/usr/local/lib/metaps/bin +EMOS_BIN=~emos/bin/$ARCH + +$GRIB_TOOLS_DIR/grib_set -q -s editionNumber=2 $1 $1.out + +rm -f $1.out || true diff --git a/tests.ecmwf/set1to2.test b/tests.ecmwf/set1to2.test new file mode 100755 index 000000000..63ca8f15f --- /dev/null +++ b/tests.ecmwf/set1to2.test @@ -0,0 +1,5 @@ +#!/bin/ksh +#exit +bin=$(echo $0|sed s/\.test$//) +export MARS_MISSING_VALUE=9999 +$bin $@ diff --git a/tests.ecmwf/skip.t b/tests.ecmwf/skip.t new file mode 100644 index 000000000..65894464a --- /dev/null +++ b/tests.ecmwf/skip.t @@ -0,0 +1,4 @@ +/vol/dataserv/grib_samples/brute_force/6_na_na_oper_an_na_128_0_na_65535_GG_33_na_0_na_0_1_sfc_na_na_na_na_na_na_na_na_na_na_na_na_.grib +/vol/dataserv/grib_samples/brute_force/191_na_na_oper_fc_na_128_0_na_385_na_43_na_0_na_0_1_sfc_na_na_na_na_na_na_na_na_na_na_na_na_.grib +/vol/dataserv/grib_samples/brute_force/6_na_na_toga_an_na_128_128_na_144_LL_255_na_128_na_0_1_sfc_na_na_na_na_na_na_na_na_na_na_na_na_.grib +/vol/dataserv/grib_samples/brute_force/6_na_na_mnth_an_na_128_0_na_65535_GG_33_na_0_na_123_1_sfc_na_na_na_na_na_na_na_na_na_na_na_na_.grib diff --git a/tests.ecmwf/test.h b/tests.ecmwf/test.h new file mode 100644 index 000000000..6d5705efa --- /dev/null +++ b/tests.ecmwf/test.h @@ -0,0 +1,20 @@ +#include +#include +#include "grib_api.h" +#include +#include +#include + + +double bucket_size(grib_handle* g); +int compare_values(double *v1, double *v2, int count,const char *what); +int compare_with_gribex(grib_handle *g); +int compare_two_gribex(grib_handle *g); +int compare_with_handle(grib_handle *g, grib_handle *h); +int save_message(grib_handle* h,const char* path); +const char* problem(const char* path,const char*name, int); +void get_max_relative_error(double* v1,double* v2,int count,double* maxError,int* id); + +extern long readany(FILE*,char*,long*); +extern char *get_current_dir_name(void); + diff --git a/tests.ecmwf/test.ksh b/tests.ecmwf/test.ksh new file mode 100755 index 000000000..03c1d6e3e --- /dev/null +++ b/tests.ecmwf/test.ksh @@ -0,0 +1,51 @@ +#!/bin/ksh +set -ea + +if [[ "$@" = "-k" ]] +then + set +e + rm -f fail.t pass.t +fi +rm -f fail.grib || true + +set -u + +SAMPLES=/vol/dataserv/grib_samples/brute_force + + +find $SAMPLES -type f \( -name '*.g???' -o -name '*.GB' \) -print > all_gribs +touch pass.t skip.t +/home/ma/mab/bin/filediff all_gribs pass.t > tmp +/home/ma/mab/bin/filediff tmp skip.t > todo + +while true +do + read file || break + + echo + echo $file + echo + + ok=1 + for t in `cat tests| grep -v "#" ` + do + echo $t + ln -sf $file data + ./$t $file + if [[ $? -ne 0 ]] + then + ok=0 + fi + done + if [[ $ok -eq 0 ]] + then + echo $file >> fail.t + ln -s $file fail.grib + exit + else + echo $file >> pass.t + fi + + +done < todo + diff --git a/tests.ecmwf/tests b/tests.ecmwf/tests new file mode 100644 index 000000000..3326047bf --- /dev/null +++ b/tests.ecmwf/tests @@ -0,0 +1,5 @@ +#grib_ls.test +#concept.test +#set1to2.test +set.test +dump.test diff --git a/tests.ecmwf/values.c b/tests.ecmwf/values.c new file mode 100644 index 000000000..0bf0ede73 --- /dev/null +++ b/tests.ecmwf/values.c @@ -0,0 +1,95 @@ +#include "test.h" + +char buffer[1024*1024*80]; + +int main(int argc,char** argv) +{ + long length = 0; + FILE *f; + grib_handle *g = 0; + int err; + int cnt = 0; + int sample = getenv("SAMPLE") != NULL; + extern const char* grib_get_accessor_class_name(grib_handle* , const char* ); + + char *path = argc > 1 ? argv[1]: "data"; + + f = fopen(path ,"r"); + if(!f) + { + perror(path); + exit(10); + } + + + length = sizeof(buffer); + + + while((err = readany(f,buffer,&length)) == 0) + { + const char* result_class_name; + size_t off = 0; + + if(strncmp(buffer,"GRIB",4) != 0) + { + cnt++; + length = sizeof(buffer); + continue; + } + + g = grib_handle_new_from_message(0,buffer,length); + + result_class_name = grib_get_accessor_class_name(g,"codedValues"); + if(!result_class_name) + result_class_name = grib_get_accessor_class_name(g,"values"); + + fprintf(stderr,"Value class is %s\n",result_class_name?result_class_name:"NONE"); + + if(result_class_name && (strcmp(result_class_name,"data_2order_packing") == 0 || + + strcmp(result_class_name,"data_g22order_packing") == 0) + + ) + { + cnt++; + printf("Field %d ignored\n",cnt); + grib_handle_delete(g); + length = sizeof(buffer); + continue; + } + + if((err = grib_get_offset(g,"endOfHeadersMaker",&off))) + { + fprintf(stderr,"Cannot get values endOfHeadersMaker %d\n",err); + exit(11); + } + + + if(sample) save_message(g,"values.grib"); + + if(compare_with_gribex(g)) + exit(11); + + + cnt++; + printf("Field %d OK\n",cnt); + grib_handle_delete(g); + + length = sizeof(buffer); + } + + if(err != -1) + { + fprintf(stderr,"readany error %d\n",err); + exit(17); + } + + if(cnt == 0) + { + fprintf(stderr,"No GRIB processed\n"); + exit(18); + } + + + exit(0); +} diff --git a/tests.ecmwf/values.test b/tests.ecmwf/values.test new file mode 100755 index 000000000..63ca8f15f --- /dev/null +++ b/tests.ecmwf/values.test @@ -0,0 +1,5 @@ +#!/bin/ksh +#exit +bin=$(echo $0|sed s/\.test$//) +export MARS_MISSING_VALUE=9999 +$bin $@ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100755 index 000000000..f885ca3cb --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,40 @@ + + TESTS = definitions.sh \ + ieee.sh grib1to2.sh \ + grib2to1.sh badgrib.sh ls.sh convert.sh filter.sh \ + multi.sh budg.sh gridType.sh concept.sh decimalPrecision.sh \ + bitsPerValue.sh get_fail.sh missing.sh \ + local.sh step.sh set.sh iterator.sh \ + compare.sh level.sh index.sh \ + bitmap.sh list.sh second_order.sh \ + multi_from_message.sh change_scanning.sh \ + julian.sh statistics.sh tigge.sh tigge_conversions.sh \ + read_any.sh padding.sh lamb_az_eq_area.sh grib_to_netcdf.sh debug.sh $(JPEG_TEST) + + noinst_PROGRAMS = packing_check gauss_sub read_any double_cmp packing pack_unpack \ + multi_from_message julian read_index index gribex_perf\ + jpeg_perf so_perf png_perf bpv_limit laplacian + + multi_from_message_SOURCES = multi_from_message.c + laplacian_SOURCES = laplacian.c + packing_SOURCES = packing.c + packing_check_SOURCES = packing_check.c + list_keys_SOURCES = list_keys.c + read_any_SOURCES = read_any.c + double_cmp_SOURCES = double_cmp.c + pack_unpack_SOURCES = pack_unpack.c + julian_SOURCES = julian.c + index_SOURCES = index.c + read_index_SOURCES = read_index.c + jpeg_perf_SOURCES = jpeg_perf.c + so_perf_SOURCES = so_perf.c + png_perf_SOURCES = png_perf.c + gribex_perf_SOURCES = gribex_perf.c + gribex_perf_SOURCES = gauss_sub.c + + LDADD = $(top_builddir)/src/libgrib_api.la $(EMOS_LIB) + + INCLUDES = -I$(top_builddir)/src + + EXTRA_DIST = $(TESTS) mf.rules filter_rules include.sh lamb_az_eq_area.ref + diff --git a/tests/badgrib.sh b/tests/badgrib.sh new file mode 100755 index 000000000..955f7a035 --- /dev/null +++ b/tests/badgrib.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +${tools_dir}grib_ls -7 ${data_dir}/bad.grib 2> $REDIRECT > $REDIRECT + diff --git a/tests/bitmap.sh b/tests/bitmap.sh new file mode 100755 index 000000000..3e3d9bb5a --- /dev/null +++ b/tests/bitmap.sh @@ -0,0 +1,63 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +grib1=${data_dir}/regular_latlon_surface.grib1 +grib2=${data_dir}/regular_latlon_surface.grib2 +infile=${data_dir}/reduced_gaussian_model_level.grib1 +outfile=${data_dir}/with_bitmap.grib1 +outfile1=${data_dir}/without_bitmap.grib1 + +rm -f $outfile || true + +${tools_dir}grib_set -s bitmapPresent=1 $infile $outfile >$REDIRECT + +${tools_dir}grib_dump -O $infile | grep -v FILE > $infile.dump +${tools_dir}grib_dump -O $outfile | grep -v FILE > $outfile.dump + +diff $outfile.dump ${data_dir}/bitmap.diff +diff $infile.dump ${data_dir}/no_bitmap.diff + +rm -f $infile.dump $outfile.dump || true + +${tools_dir}grib_set -s bitmapPresent=0 $outfile $outfile1 >$REDIRECT + +${tools_dir}grib_dump -O $outfile1 | grep -v FILE > $outfile1.dump +${tools_dir}grib_dump -O $outfile | grep -v FILE> $outfile.dump + +diff $outfile1.dump ${data_dir}/no_bitmap.diff + +rm -f $outfile1 $outfile1.dump $outfile $outfile.dump || true + +cat > bitmap.rules< out.grib1.data +${tools_dir}grib_get_data -m missing out.grib2 > out.grib2.data + +diff out.grib1.data out.grib2.data + +rm -f out.grib1.data out.grib2.data out.grib1 out.grib2 bitmap.rules + + diff --git a/tests/bits.c b/tests/bits.c new file mode 100755 index 000000000..d9d121899 --- /dev/null +++ b/tests/bits.c @@ -0,0 +1,322 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include +#include + + +#include "grib_api_internal.h" + +#define NO_PRINT 1 +#define PRINT_ALL (1<<1) +#define PRINT_ROUND_ERRORS (1<<2) +#define PRINT_TRUNCATION (1<<3) +#define NO_NEAREST_SMALLER_IBM_FLOAT (1<<4) + +void test_bits(double x,unsigned long mode) { + double y=0,z=0,w=0,t=0; + double dy=0,dz=0,dw=0,dt=0; + unsigned long i=0,j=0,k=0,l=0; + + i=grib_ibm_to_long(x); + y=grib_long_to_ibm(i); + dy=y-x; + + z=grib_long_to_ibm(j); + dz=z-x; + + k=grib_ibm_nearest_smaller_to_long(x); + w=grib_long_to_ibm(k); + dw=w-x; + + if ( !(mode & NO_NEAREST_SMALLER_IBM_FLOAT) ) { + t=grib_nearest_smaller_ibm_float(x); + l=grib_ibm_to_long(y); + dt=t-x; + } + + if (mode & PRINT_ALL) { + printf("x=%.20e \n",x); + printf("grib_ibm_to_long %lu (0x%lx) -> %.20e diff=%.20e\n",i,i,y,dy); + printf("grib_nearest_smaller_ibm_float %lu (0x%lx) -> %.20e diff=%.20e\n",l,l,t,dt); + printf("grib_ibm_nearest_smaller_to_long %lu (0x%lx) -> %.20e diff=%.20e\n",k,k,w,dw); + } + + if (fabs(dz) < fabs(dy) && ( (mode & PRINT_ROUND_ERRORS )| (mode & PRINT_ALL ) )) { + printf("!!!!!!!!!!-------------- Rounding error \n"); + printf("x=%.20e \n",x); + printf("grib_ibm_to_long %lu (0x%lx) -> %.20e diff=%.20e\n",i,i,y,dy); + printf("grib_ibm_to_long_trunc %lu (0x%lx) -> %.20e diff=%.20e\n",j,j,z,dz); + printf("grib_nearest_smaller_ibm_float %lu (0x%lx) -> %.20e diff=%.20e\n",l,l,t,dt); + printf("grib_ibm_nearest_smaller_to_long %lu (0x%lx) -> %.20e diff=%.20e\n",k,k,w,dw); + } + + if (( w != t) && ( (mode & PRINT_TRUNCATION ) | ( mode & PRINT_ALL ) ) ) { + printf("!!!!!!!!!!--------------- Different nearest smaller \n"); + printf("x=%.20e \n",x); + printf("grib_ibm_to_long %lu (0x%lx) -> %.20e diff=%.20e\n",i,i,y,dy); + printf("grib_ibm_to_long_trunc %lu (0x%lx) -> %.20e diff=%.20e\n",j,j,z,dz); + printf("grib_nearest_smaller_ibm_float %lu (0x%lx) -> %.20e diff=%.20e\n",l,l,t,dt); + printf("grib_ibm_nearest_smaller_to_long %lu (0x%lx) -> %.20e diff=%.20e\n",k,k,w,dw); + } +} + +void print_machine_parameters() { + int ibeta=0, it=0, irnd=0, ngrd=0, machep=0, negep=0, iexp=0, minexp=0, maxexp=0; + float eps=0, epsneg=0, xmin=0, xmax=0; + + printf("-- Machine parameters ---\n"); + printf("ibeta=%d\n",ibeta); + printf("it=%d\n",it); + printf("irnd=%d\n",irnd); + printf("ngrd=%d\n",ngrd); + printf("machep=%d\n",machep); + printf("negep=%d\n",negep); + printf("iexp=%d\n",iexp); + printf("minexp=%d\n",minexp); + printf("maxexp=%d\n",maxexp); + printf("eps=%g\n",eps); + printf("epsneg=%g\n",epsneg); + printf("xmin=%.20e\n",xmin); + printf("xmax=%.20e\n",xmax); + printf("-------------------------\n\n"); + +} + +int main(int argc, char *argv[]) +{ + double x,y,z,w,d,eps,epst,epsh; + double dt=0; + unsigned long i,j,n,nc,c,m; + unsigned long seed=123; + unsigned char ibm[4]; + float xf=0; + int r; + unsigned long iminp=0x00100000, imaxp=0x7fffffff; + unsigned long iminn=0x80100000, imaxn=0xffffffff; + double dminp=0,dmaxp=0,dminn=0,dmaxn=0; + double dminpn=0,dmaxpp=0,dminnn=0,dmaxnp=0; + unsigned long A; + long e; + int k,cc; + + dminp=grib_long_to_ibm(iminp); + dminpn=grib_long_to_ibm(iminp+1); + dmaxp=grib_long_to_ibm(imaxp); + dmaxpp=grib_long_to_ibm(imaxp-1); + dminn=grib_long_to_ibm(iminn); + dminnn=grib_long_to_ibm(iminn+1); + dmaxn=grib_long_to_ibm(imaxn); + dmaxnp=grib_long_to_ibm(imaxn-1); + + x=-1.33642013258103330000e-83; + i=grib_ibm_to_long(x); + j=grib_ibm_nearest_smaller_to_long(x); + printf("grib_ibm_to_long(%.20e)=0x%lX grib_long_to_ibm(0x%lX)=%.20e grib_ibm_nearest_smaller_to_long(%.20e)=0x%lX\n", + x,i,i,grib_long_to_ibm(i),x,j); + printf("grib_long_to_ibm(grib_ibm_nearest_smaller_to_long(%.20e))=%.20e\n",x,grib_long_to_ibm(j)); + exit(0); + +/* + if (argc > 1 ) { + x=atof(argv[1]); + test_bits(x,PRINT_ALL); + printf("-----------------\n"); + exit(0); + } + */ + +/* + i=0x49800000; + x=grib_long_to_ibm(i); + j=grib_ibm_to_long(x); + printf(" grib_long_to_ibm(0x%lX)=%.8e grib_ibm_to_long(grib_long_to_ibm(0x%lX))=0x%lX\n",i,x,i,j); + exit(0); +*/ + + printf("-------------------------------- ibm float -------------------------------\n"); + printf("Min positive 0x%lX -> %.8e ",iminp,dminp); + printf("-- next 0x%lX -> %.8e diff=%.3e\n",iminp+1,dminpn,dminp-dminpn); + printf("Max positive 0x%lX -> %.8e ",imaxp,dmaxp); + printf("-- prev 0x%lX -> %.8e diff= %.3e\n",imaxp-1,dmaxpp,dmaxp-dmaxpp); + printf("Min negative 0x%lX -> %.8e ",iminn,dminn); + printf("-- next 0x%lX -> %.8e diff= %.3e\n",iminn+1,dminnn,dminn-dminnn); + printf("Max negative 0x%lX -> %.8e ",imaxn,dmaxn); + printf("-- prev 0x%lX -> %.8e diff=%.3e\n",imaxn-1,dmaxnp,dmaxn-dmaxnp); + printf("%lu negative values, %lu positive values\n",(imaxn-iminn),(imaxp-iminp)); + printf("--------------------------------------------------------------------------\n"); + fflush(stdout); +#if 0 + if (0) { + printf("---- Test --------- ibm_to_long(long_to_ibm()) ---------------------------\n"); + nc=((imaxn-iminp))/100; + c=0; + for (i=iminp;i=nc) { printf("%d - %lu 0x%lX\n",cc,i-iminp,i);fflush(stdout); c=0;cc++; } + + A = (i & 0x7f000000) >> 24; + e = A-70; + eps=1; + m = (i & 0xffffff); + /* printf("---m=0x%lX\n",m); */ + + eps=grib_ibm_table_e(A); + + epsh=eps/2; + epst=eps/3; + + y=grib_long_to_ibm(i); + if (grib_ibm_to_long(y) != i) { + printf("------ grib_long_to_ibm(grib_ibm_to_long()) Failure -----------------\n"); + printf("i=0x%lX\n",i); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i,grib_long_to_ibm(i)); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i-1,grib_long_to_ibm(i-1)); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i+1,grib_long_to_ibm(i+1)); + printf("eps=%.20e\n",eps); + printf("y=%.20e grib_ibm_to_long(y)=0x%lX grib_long_to_ibm(grib_ibm_to_long(y))=%.20e\n",y,j,z); + printf("fabs(grib_long_to_ibm(grib_ibm_to_long(y))-y)=%.20e \n",d); + printf("--------------------------------------------------------\n"); + fflush(stdout); + exit(1); + } + + for (k=1;k<3;k++) { + if (i == 0x7FFFFFFF) continue; + if (y>0) y+=epst; + else y-=epst; + + /* rounding test */ + j=grib_ibm_to_long(y); + z=grib_long_to_ibm(j); + d=fabs(z-y); + if ( d > epsh ) { + printf("---------------- Rounding Failure ----------------------\n"); + printf("i=0x%lX\n",i); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i,grib_long_to_ibm(i)); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i-1,grib_long_to_ibm(i-1)); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i+1,grib_long_to_ibm(i+1)); + printf("eps=%.20e\n",eps); + printf("y=%.20e grib_ibm_to_long(y)=0x%lX grib_long_to_ibm(grib_ibm_to_long(y))=%.20e\n",y,j,z); + printf("fabs(grib_long_to_ibm(grib_ibm_to_long(y))-y)=%.20e \n",d); + printf("--------------------------------------------------------\n"); + fflush(stdout); + exit(1); + } + + /* nearest smaller test */ + j=grib_ibm_nearest_smaller_to_long(y); + z=grib_long_to_ibm(j); + d=z-y; + if ( d > 0 ) { + printf("---------------- Nearest smaller Failure ---------------\n"); + printf("i=0x%lX\n",i); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i-1,grib_long_to_ibm(i-1)); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i,grib_long_to_ibm(i)); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i+1,grib_long_to_ibm(i+1)); + printf("eps=%.20e d=%.20e\n",eps,d); + printf(" y=%.20e grib_ibm_nearest_smaller_to_long(y)=0x%lX\n",y,j); + printf("grib_long_to_ibm(0x%lX)=%.20e\n",j,z); + printf("--------------------------------------------------------\n"); + fflush(stdout); + exit(1); + } + if ( abs(d) > eps ) { + printf("---------------- Nearest smaller warning ---------------\n"); + printf("i=0x%lX\n",i); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i-1,grib_long_to_ibm(i-1)); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i,grib_long_to_ibm(i)); + printf("grib_long_to_ibm(0x%lX)=%.20e \n", i+1,grib_long_to_ibm(i+1)); + printf("eps=%.20e d=%.20e\n",eps,d); + printf(" y=%.20e grib_ibm_nearest_smaller_to_long(y)=0x%lX\n",y,j); + printf("grib_long_to_ibm(0x%lX)=%.20e\n",j,z); + printf("--------------------------------------------------------\n"); + fflush(stdout); + } + } + + c++; + } + printf("\n--- test finished ---------------------------------\n"); + + return 0; +} diff --git a/tests/bitsPerValue.sh b/tests/bitsPerValue.sh new file mode 100755 index 000000000..8c87fc1d2 --- /dev/null +++ b/tests/bitsPerValue.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +files="regular_latlon_surface.grib2 \ + regular_latlon_surface.grib1" + +for file in `echo $files`; do + + infile=${data_dir}/$file + outfile1=${infile}_bitsPerValue_1 + outfile2=${infile}_bitsPerValue_2 + + ${tools_dir}grib_set -r -s bitsPerValue=10 $infile $outfile1 + + ${tools_dir}grib_set -s setBitsPerValue=10 $infile $outfile2 + + ${tools_dir}grib_compare $outfile1 $outfile2 + + rm -f $outfile1 $outfile2 || true + +done + +# Extra test for grid_complex_spatial_differencing +${tools_dir}grib_get -p decimalScaleFactor,bitsPerValue ${data_dir}/gfs.c255.grib2 > /dev/null + diff --git a/tests/bpv_limit.c b/tests/bpv_limit.c new file mode 100644 index 000000000..50e8662ef --- /dev/null +++ b/tests/bpv_limit.c @@ -0,0 +1,129 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * ===================================================================================== + * + * Filename: bpv_limit.c + * + * Description: test setting the number of bpv before decoding and then encoding; + * setting the wrong number of bpv should result in an exception + * + * Version: 1.0 + * Created: 30/03/10 16:07:51 + * Revision: none + * Compiler: gcc + * + * Author: Cristian Codorean (mow), mow@ecmwf.int + * Company: ECMWF + * + * ===================================================================================== + */ +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s filein\n",prog); + exit(1); +} + + +int main(int argc, char** argv) { + int err = 0; + size_t values_len=0; + double *values = NULL; + char error_msg[100] ; + + size_t slong = sizeof(long) * 8 ; + + int i; + + FILE* in = NULL; + char* filename ; + + grib_handle *h = NULL; + + if (argc<2) usage(argv[0]); + filename=argv[1]; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* create new handle from a message in a file*/ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",filename); + } + + for (i=0;i<255;i++) { + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + err = grib_get_double_array(h,"values",values,&values_len); + + GRIB_CHECK(grib_set_long(h,"bitsPerValue",i),0); + + err = grib_set_double_array(h,"values",values,values_len); + + free(values); + values = 0; + + /* + * check if encoding of the data fails when the number of bpv + * is not supported; bpv allowed on decoding is bpv < size of long + */ + + if (i < slong && err == 0) { + /* do nothing */ + } else if (i >= slong && err == GRIB_INVALID_BPV) { + /* do nothing */ + } else { + sprintf(error_msg,"Error decoding when bpv=%d. Error message:%s",i,grib_get_error_message(err)); + perror(error_msg); + exit(1); + } + + values = malloc(values_len*sizeof(double)); + err = grib_get_double_array(h,"values",values,&values_len); + + /* + * check if decoding of the data fails when the number of bpv + * is not supported; bpv allowed on decoding is bpv <= size of long + */ + + if (i <= slong && err == 0) { + /* do nothing */ + } else if (i > slong && err == GRIB_INVALID_BPV) { + /* do nothing */ + } else { + sprintf(error_msg,"Error decoding when bpv=%d. Error message:%s",i,grib_get_error_message(err)); + perror(error_msg); + exit(1); + } + + free(values); + values = 0; + } + + grib_handle_delete(h); + h=0; + + fclose(in); + + return 0; +} diff --git a/tests/bpv_limit.sh b/tests/bpv_limit.sh new file mode 100755 index 000000000..d768e6ffb --- /dev/null +++ b/tests/bpv_limit.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# Test limitations in number of bits per value we can decode/encode are +# working. Grib API can currently decode message with a bpv <= sizeof(long) +# and encode messages with bpv < sizeof(long). Attempt to do otherwise will +# result in an error. Packing type this is valid for is simple packing. + +. ./include.sh + +REDIRECT=/dev/null + +for file in ${data_dir}/regular_latlon_surface.grib?; do + ./bpv_limit $file 2> $REDIRECT > $REDIRECT +done diff --git a/tests/budg.sh b/tests/budg.sh new file mode 100755 index 000000000..a1f33dcff --- /dev/null +++ b/tests/budg.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +${tools_dir}grib_ls ${data_dir}/budg > $REDIRECT + diff --git a/tests/change_packing.sh b/tests/change_packing.sh new file mode 100755 index 000000000..de559d8f9 --- /dev/null +++ b/tests/change_packing.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +# --- check nothing bombs when changing packing +# --- for now limited to just a few packing schemes + +. ./include.sh + +#set -x + +grib1=${data_dir}/reduced_latlon_surface_constant.grib1 +grib2=${data_dir}/reduced_latlon_surface_constant.grib2 + +packing1=" + grid_ieee + grid_simple + grid_simple_matrix" + +packing2=" + grid_ieee + grid_jpeg + grid_simple + grid_simple_log_preprocessing + grid_simple_matrix" + +temp=temp.grib_ +rm -f $temp || true + +# --- test changing the packing +# arg 1 : input grib file +# arg 2-n : packing types to test +function test_packing() { + grib=$1 + + if [ ! -f $grib ]; then + echo "Input data missing" + exit 1 + fi + + shift + while [ $# -gt 0 ]; do + packing=$1 + + ${tools_dir}/grib_set -r -s packingType=$packing $grib $temp + result=`${tools_dir}/grib_get -p packingType $temp` + + if [ "$result" != "$packing" ]; then + echo "Setting packing did not go right" + exit 1 + fi + + shift + done + + rm -f $temp || true +} + +test_packing $grib1 $packing1 +test_packing $grib2 $packing2 diff --git a/tests/change_scanning.sh b/tests/change_scanning.sh new file mode 100755 index 000000000..d2081ddf8 --- /dev/null +++ b/tests/change_scanning.sh @@ -0,0 +1,78 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.sh +#set -x + +editions="1 2" +gridTypes="regular_ll rotated_ll" +outfile=out.grib +Ni_list="5 8" +Nj_list="7 4" + +file=${data_dir}/regular_latlon_surface.grib1 + +for edition in `echo ${editions}`; do + for gridType in `echo $gridTypes`; do + for Ni in `echo ${Ni_list}`; do + for Nj in `echo ${Nj_list}`; do + + #echo $gridType Ni=$Ni Nj=$Nj + + N=`expr $Ni \* $Nj` + cat > ${data_dir}/change_scanning_${gridType}.filter <> ${data_dir}/change_scanning_${gridType}.filter < ${data_dir}/scan_x_${gridType}_${Ni}_${Nj}.dump + diff ${data_dir}/scan_x_${gridType}_${Ni}_${Nj}.dump ${data_dir}/scan_x_${gridType}_${Ni}_${Nj}_good.dump + rm -f ${data_dir}/scan_x_${gridType}_${Ni}_${Nj}.dump + + ${tools_dir}grib_set -s swapScanningY=1 ${data_dir}/scan1.grib ${data_dir}/scan.grib + ${tools_dir}grib_get_data -F "%g" ${data_dir}/scan.grib > ${data_dir}/scan_y_${gridType}_${Ni}_${Nj}.dump + diff ${data_dir}/scan_y_${gridType}_${Ni}_${Nj}.dump ${data_dir}/scan_y_${gridType}_${Ni}_${Nj}_good.dump + rm -f ${data_dir}/scan_y_${gridType}_${Ni}_${Nj}.dump + + done + done + done +done + +rm -f ${data_dir}/scan1.grib ${data_dir}/scan.grib + diff --git a/tests/compare.sh b/tests/compare.sh new file mode 100755 index 000000000..f482127db --- /dev/null +++ b/tests/compare.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +infile="${data_dir}/regular_latlon_surface.grib1" +outfile=${infile}.1 + +rm -f $outfile || true + +${tools_dir}grib_set -s shortName=2d $infile $outfile + +${tools_dir}grib_compare -b indicatorOfParameter,paramId,shortName $infile $outfile > $REDIRECT + diff --git a/tests/concept.sh b/tests/concept.sh new file mode 100755 index 000000000..b8c8cdb2f --- /dev/null +++ b/tests/concept.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.sh + +data="${data_dir}/*grib1 ${data_dir}/*grib2" +tmp="tmp.out" + +for d in $data +do + +set -e +${tools_dir}grib_ls -p gridType,packingType -w dataRepresentationType!=192 $d > $tmp + +set +e +grep unknown $tmp + +if [ $? -eq 0 ] +then + false + exit +fi + +rm -f $tmp | true + +done + diff --git a/tests/convert.sh b/tests/convert.sh new file mode 100755 index 000000000..6d6ce1d5b --- /dev/null +++ b/tests/convert.sh @@ -0,0 +1,49 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +cat > rules< $REDIRECT > $REDIRECT +${tools_dir}grib_compare -f ${data_dir}/lfpw.grib2 $tmpdata + +rm -f $tmpdata || true + diff --git a/tests/debug.sh b/tests/debug.sh new file mode 100755 index 000000000..ec80c09b8 --- /dev/null +++ b/tests/debug.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +for file in ${data_dir}/*.grib2 ${data_dir}/*.grib1 +do +${tools_dir}grib_dump -O $file 2> $REDIRECT > $REDIRECT +done + diff --git a/tests/decimalPrecision.sh b/tests/decimalPrecision.sh new file mode 100755 index 000000000..c8d9a0daf --- /dev/null +++ b/tests/decimalPrecision.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + + +. ./include.sh + +REDIRECT=/dev/null + +files="regular_latlon_surface.grib2 \ + regular_latlon_surface.grib1" + +for file in `echo $files` +do + +infile=${data_dir}/$file +outfile1=${infile}_decimalPrecision_1 +outfile2=${infile}_decimalPrecision_2 + +${tools_dir}grib_set -r -s decimalScaleFactor=1,bitsPerValue=0 $infile $outfile1 + +${tools_dir}grib_compare -b totalLength,section4Length,section7Length,dataLength,decimalScaleFactor,binaryScaleFactor,referenceValue,bitsPerValue $infile $outfile1 > $REDIRECT + +${tools_dir}grib_set -s changeDecimalPrecision=1 $infile $outfile2 + +${tools_dir}grib_compare -b totalLength,section4Length,section7Length,dataLength,decimalScaleFactor,binaryScaleFactor,referenceValue,bitsPerValue $infile $outfile2 > $REDIRECT + +${tools_dir}grib_compare $outfile1 $outfile2 + +rm -f $outfile1 $outfile2 || true + +done + diff --git a/tests/decode.c b/tests/decode.c new file mode 100755 index 000000000..3499d9be3 --- /dev/null +++ b/tests/decode.c @@ -0,0 +1,10 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + diff --git a/tests/definitions.sh b/tests/definitions.sh new file mode 100755 index 000000000..3c6b07704 --- /dev/null +++ b/tests/definitions.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +[ -z "$GRIB_DEFINITION_PATH" ] | GRIB_DEFINITION_PATH=`${tools_dir}grib_info -d` + +for file in `find $GRIB_DEFINITION_PATH -name '*.def' -print` +do + ${tools_dir}parser $file > $REDIRECT +done + diff --git a/tests/double_cmp.c b/tests/double_cmp.c new file mode 100644 index 000000000..8619f3a65 --- /dev/null +++ b/tests/double_cmp.c @@ -0,0 +1,81 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: double_cmp + * + * Description: compare values retrieved with grib_get_double_array and + * grib_get_double_element + * + * Author: Cristian D. Codorean + * + */ +#include +#include + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s filename\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + int err = 0,i; + double *values = NULL; + size_t values_len= 0; + double element_value=0; + + FILE* in = NULL; + char* filename ; + grib_handle *h = NULL; + + if (argc<2) usage(argv[0]); + filename=argv[1]; + + in = fopen(filename,"r"); + if(!in) { + printf("ERROR: unable to open file %s\n",filename); + return 1; + } + + /* create new handle from a message in a file*/ + h = grib_handle_new_from_file(0,in,&err); + if (h == NULL) { + printf("Error: unable to create handle from file %s\n",filename); + } + + + /* get the size of the values array*/ + GRIB_CHECK(grib_get_size(h,"values",&values_len),0); + + values = malloc(values_len*sizeof(double)); + + /* get data values*/ + GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0); + + if (values_len < 100) exit(1); + + for (i = 0; i < 100; i++) { + /* get double element */ + GRIB_CHECK(grib_get_double_element(h,"values",i,&element_value),0); + + if (element_value != values[i]) { + exit(1); + } + } + + free(values); + + grib_handle_delete(h); + + fclose(in); + return 0; +} diff --git a/tests/double_cmp.sh b/tests/double_cmp.sh new file mode 100755 index 000000000..440f2c894 --- /dev/null +++ b/tests/double_cmp.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# --- test on the grid_ieee type of packing +# --- check if retrieving data through grib_get_double_array and +# --- grib_get_double_element provides the same result + +. ./include.sh + +infile=${data_dir}/grid_ieee.grib + +if [ ! -f ${infile} ] +then + echo no data to test + exit 1 +fi + +${test_dir}/double_cmp ${infile} diff --git a/tests/filter.sh b/tests/filter.sh new file mode 100755 index 000000000..9e166a57f --- /dev/null +++ b/tests/filter.sh @@ -0,0 +1,62 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.sh + +REDIRECT=/dev/null + +if [ -f ${data_dir}/geavg.t12z.pgrbaf108 ] +then + tmpdata=grib_api.grib + rm -f $tmpdata || true + ${tools_dir}grib_filter ${data_dir}/filter_rules ${data_dir}/geavg.t12z.pgrbaf108 > $REDIRECT + rm -f $tmpdata +fi + +cat >${data_dir}/f.rules < $REDIRECT > $REDIRECT + +rm -f ${data_dir}/split/* + +# Test with nonexistent keys. Note spelling of centre! +####################################################### +cat >${data_dir}/nonexkey.rules < $REDIRECT > $REDIRECT +if [ $? -eq 0 ]; then + echo "grib_filter should have failed if key not found" >&2 + exit 1 +fi +set -e +# Now repeat with -f option (do not exit on error) +${tools_dir}grib_filter -f ${data_dir}/nonexkey.rules ${data_dir}/tigge_pf_ecmwf.grib2 2> $REDIRECT > $REDIRECT + +rm -f ${data_dir}/nonexkey.rules + +# GRIB-308 format specifier for integer keys +############################################## +cat > ${data_dir}/formatint.rules < $tmpfiles + +diff $tmpfiles $path/$tmpfiles + +result=$? + +exit $result + diff --git a/tests/gauss_sub.c b/tests/gauss_sub.c new file mode 100644 index 000000000..97bb17106 --- /dev/null +++ b/tests/gauss_sub.c @@ -0,0 +1,138 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api.h" +#include "math.h" + +static void usage(char* prog) { + printf("usage: %s file1.grib file2.grib\n",prog); + exit(1); +} + +int main(int argc, char* argv[]) { + grib_handle *h1,*h2; + int ret=0; + FILE *f1,*f2; + char* infile1; + char* infile2; + double *v1,*v2,*v,*gv; + double *lon1,*lon2,*lon,*glon; + double *lat1,*lat2,*lat,*glat; + size_t size1,size2,size,gsize; + double err1,err2,err; + int i,j; + grib_context* c; + grib_iterator *iter1,*iter2; + + c=grib_context_get_default(); + + if (argc < 3) usage(argv[0]); + + infile1=argv[1]; + infile2=argv[2]; + + f1=fopen(infile1,"r"); + if (!f1) { + perror(infile1); + exit(1); + } + + f2=fopen(infile2,"r"); + if (!f2) { + perror(infile2); + exit(1); + } + + while ((h1=grib_handle_new_from_file(0,f1,&ret))!=NULL) { + if ((h2=grib_handle_new_from_file(c,f2,&ret))==NULL) { + printf("unable to create handle from file %s\n",infile2); + GRIB_CHECK(ret,0); + exit(1); + } + GRIB_CHECK(grib_get_size(h1,"values",&size1),0); + v1=malloc(size1*sizeof(double)); + if (!v1) {printf("unable to allocate v1\n");exit(1);} + lat1=malloc(size1*sizeof(double)); + if (!lat1) {printf("unable to allocate lat1\n");exit(1);} + lon1=malloc(size1*sizeof(double)); + if (!lon1) {printf("unable to allocate lon1\n");exit(1);} + GRIB_CHECK(grib_get_double(h1,"packingError",&err1),0); + + iter1=grib_iterator_new(h1,0,&ret); + GRIB_CHECK(ret,0); + + GRIB_CHECK(grib_get_size(h2,"values",&size2),0); + v2=malloc(size2*sizeof(double)); + if (!v2) {printf("unable to allocate v2\n");exit(1);} + lat2=malloc(size2*sizeof(double)); + if (!lat2) {printf("unable to allocate lat2\n");exit(1);} + lon2=malloc(size2*sizeof(double)); + if (!lon2) {printf("unable to allocate lon2\n");exit(1);} + GRIB_CHECK(grib_get_double(h2,"packingError",&err2),0); + + iter2=grib_iterator_new(h2,0,&ret); + GRIB_CHECK(ret,0); + + lat=lat1; lon=lon1; v=v1; + while(grib_iterator_next(iter1,lat,lon,v)) { + lat++; + if (*lon < 0 ) *lon+=360; + lon++; + v++; + } + lat=lat2; lon=lon2; v=v2; + while(grib_iterator_next(iter2,lat,lon,v)) { + lat++; + if (*lon < 0 ) *lon+=360; + lon++; + v++; + } + + if (size1 > size2) { + lat=lat2;lon=lon2;v=v2; + size=size2; + glat=lat1;glon=lon1;gv=v1; + gsize=size1; + } else { + lat=lat1;lon=lon1;v=v1; + size=size1; + glat=lat2;glon=lon2;gv=v2; + gsize=size2; + } + if (err1>err2) err=err1; + else err=err2; + + j=0; + for (i=0;ierr) { + ret=1; + printf("lat=%g lon=%g sub area value=%g global value=%g\n", + lat[i],lon[i],v[i],gv[j]); + } + + } + free(v);free(gv);free(lat);free(glat);free(lon);free(glon); + + } + + fclose(f1); + fclose(f2); + + return ret; +} diff --git a/tests/get_fail.sh b/tests/get_fail.sh new file mode 100755 index 000000000..e00f39daa --- /dev/null +++ b/tests/get_fail.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +set +e + +${tools_dir}grib_get -p gribname ${data_dir}/regular_latlon_surface.grib1 2> $REDIRECT > $REDIRECT + +if [ $? -eq 0 ] + then + exit 1; +fi + + diff --git a/tests/grib1to2.sh b/tests/grib1to2.sh new file mode 100755 index 000000000..d596aa406 --- /dev/null +++ b/tests/grib1to2.sh @@ -0,0 +1,66 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +files="constant_field\ + reduced_gaussian_pressure_level_constant \ + reduced_latlon_surface_constant \ + regular_gaussian_pressure_level_constant \ + regular_latlon_surface_constant \ + reduced_latlon_surface \ + reduced_gaussian_pressure_level \ + reduced_gaussian_sub_area \ + regular_gaussian_pressure_level \ + regular_latlon_surface \ + reduced_gaussian_model_level \ + regular_gaussian_model_level \ + reduced_gaussian_surface \ + regular_gaussian_surface \ + spherical_pressure_level \ + spherical_model_level " + +for f in `echo $files` +do + +file=${data_dir}/$f + +rm -f ${file}.grib2 || true + +${tools_dir}grib_set -s editionNumber=2 ${file}.grib1 ${file}.grib2 2> $REDIRECT > $REDIRECT + + +grib1Statistics=`${tools_dir}grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${file}.grib1` +grib2Statistics=`${tools_dir}grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${file}.grib2` + +if [ "$grib1Statistics" != "$grib2Statistics" ] +then + exit 1 +fi + +#${tools_dir}grib_compare -A1.0e-8 -c values ${file}.grib1 ${file}.grib2 2> /dev/null > /dev/null +${tools_dir}grib_compare -P -c values ${file}.grib1 ${file}.grib2 2> $REDIRECT > $REDIRECT + +done + +#sed "s:toolsdir:${tools_dir}:" ${tools_dir}grib1to2.txt > ${tools_dir}grib1to2.test +#chmod +x ${tools_dir}grib1to2.test +#${tools_dir}grib1to2.test -f ${data_dir}/test.grib1 ${data_dir}/test.grib2 +#${tools_dir}grib_get -p typeOfProcessedData:s,type:s ${data_dir}/test.grib2 > ${data_dir}/typeOfProcessedData.log + +#diff ${data_dir}/typeOfProcessedData.log ${data_dir}/typeOfProcessedData.ok + +#${tools_dir}grib_compare -Pe ${data_dir}/test.grib1 ${data_dir}/test.grib2 + +#rm -f ${data_dir}/test.grib2 + diff --git a/tests/grib2to1.sh b/tests/grib2to1.sh new file mode 100755 index 000000000..4da19f449 --- /dev/null +++ b/tests/grib2to1.sh @@ -0,0 +1,56 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +files="constant_field\ + reduced_gaussian_pressure_level_constant \ + reduced_latlon_surface_constant \ + regular_gaussian_pressure_level_constant \ + regular_latlon_surface_constant \ + reduced_latlon_surface \ + reduced_gaussian_pressure_level \ + reduced_gaussian_sub_area \ + regular_gaussian_pressure_level \ + regular_latlon_surface \ + reduced_gaussian_model_level \ + regular_gaussian_model_level \ + reduced_gaussian_surface \ + regular_gaussian_surface \ + spherical_pressure_level \ + spherical_model_level " + +for f in `echo $files` +do + +file=${data_dir}/$f + +rm -f ${file}.grib1_ || true + +${tools_dir}grib_set -s editionNumber=1 ${file}.grib2 ${file}.grib1_ 2> $REDIRECT > $REDIRECT + + +grib1Statistics=`${tools_dir}grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${file}.grib1_` +grib2Statistics=`${tools_dir}grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${file}.grib2` + +if [ "$grib1Statistics" != "$grib2Statistics" ] +then + exit 1 +fi + +#${tools_dir}grib_compare -A1.0e-8 -c values ${file}.grib1_ ${file}.grib2 2> /dev/null > /dev/null + +rm -f ${file}.grib1_ || true + +done + diff --git a/tests/grib_to_netcdf.sh b/tests/grib_to_netcdf.sh new file mode 100755 index 000000000..015e7f849 --- /dev/null +++ b/tests/grib_to_netcdf.sh @@ -0,0 +1,68 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh +#set -x + +# First decide if we have NetCDF enabled from configure. +# Temporarily turn off the '-e' flag for set so we dont exit on error +set +e +tmp_out=tmp_msg.out +skip_test=0 +rm -f $tmp_out | true +# Invoke the grib_to_netcdf command with no options. If NetCDF was enabled +# we get a usage message otherwise we get a specific message. Note: In both cases +# the command fails. +${tools_dir}grib_to_netcdf > $tmp_out +grep 'GRIB API was not compiled with NETCDF enabled' $tmp_out > /dev/null +if [ $? -eq 0 ]; then + # Message was found + skip_test=1 +fi +# Restore the set -e so any error causes us to exit +set -e +rm -f $tmp_out | true +if [ $skip_test -eq 1 ]; then + echo "NetCDF was not enabled. Skipping this test." + exit 0 +fi +echo "NetCDF was enabled." + +grib_files="tigge_pf_ecmwf.grib2 \ +set.grib2 set.grib1 \ +regular_latlon_surface.grib1.1 \ +regular_latlon_surface.grib2 \ +regular_latlon_surface.grib1 \ +regular_gaussian_model_level.grib1 \ +regular_gaussian_model_level.grib2 \ +regular_gaussian_pressure_level.grib1 \ +regular_gaussian_pressure_level.grib2 \ +regular_gaussian_surface.grib1 \ +regular_gaussian_surface.grib2 \ +lfpw.grib2 \ +missing.grib2" + +ncf_types="NC_BYTE NC_SHORT NC_INT NC_FLOAT NC_DOUBLE" + +tmp_netcdf=tmp.ncf + +# Go thru all the specified GRIB files and convert them to NetCDF +for dt in $ncf_types +do + for f in $grib_files + do + rm -f $tmp_netcdf | true + #echo Doing $f with $dt... + if [ -f "${data_dir}/$f" ]; then + ${tools_dir}grib_to_netcdf -D $dt -o $tmp_netcdf ${data_dir}/$f >/dev/null + fi + done +done +rm -f $tmp_netcdf | true + diff --git a/tests/gribex_perf.c b/tests/gribex_perf.c new file mode 100644 index 000000000..d0733c67b --- /dev/null +++ b/tests/gribex_perf.c @@ -0,0 +1,442 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +#define flong int + +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) + +#define BUFF_SIZE 50000000 + +#ifdef HAVE_LIBEMOS +#if GRIB_TIMER +#define TEST_OK +#endif +#endif + +#ifdef TEST_OK + +extern void grsrnd_(flong*); +extern void gribex_(flong*, flong*, flong*, double*, flong*, double*, flong*, double*, + flong*, char *, flong*, flong*, const char*, flong*,flong ); + +static int cgribex( + flong miss, + + flong ksec0[],flong ksec1[], + flong ksec2[],double rsec2[], + flong ksec3[],double rsec3[], + flong ksec4[],double rsec4[], + flong sec4len, + + char *buffer, + flong *buflen, + char *op) +{ + flong ret = 1; + flong in_bufsize = (*buflen) / sizeof(flong); + flong out_bufsize = in_bufsize; + flong round = 0; + + rsec3[1] = miss, + ksec3[1] = miss, + + grsrnd_(&round); /* no rounding !!! */ + + gribex_(ksec0, ksec1, ksec2, rsec2, ksec3, rsec3, ksec4, rsec4, + &sec4len, buffer, &in_bufsize, &out_bufsize, op, &ret,1 ); + + *buflen = out_bufsize * sizeof(flong); + + return ret; +} + +struct { int code; char *message; } gribex_errors[] = { + {201 ," An invalid coding/decoding option was requested.",}, + {202 ,"The number of bits per data value exceeds a word length.",}, + {203 ,"Missing data indicated and data field contains non-zero values.",}, + {204 ,"Number of bits per data value is invalid.",}, + {205 ,"Number of bits per data value is same as the number of bits per computer word.",}, + {301 ,"Error in encoding or decoding the letters GRIB.",}, + {302 ,"Error decoding the length of the GRIB message.",}, + {303 ,"Error encoding or decoding the GRIB edition number.",}, + {304 ,"Error decoding octets 22 and 23, experimental edition check.",}, + {305 ,"Input data is not GRIB or pseudo-GRIB.",}, + {401 ,"Error encoding or decoding the length of section 1.",}, + {402 ,"Error encoding or decoding the parameter version number.",}, + {403 ,"Error encoding or decoding six header fields in section 1, from 'identification of centre' to 'indicator of type of level'.",}, + {404 ,"Error encoding or decoding height, pressure, etc of levels.",}, + {405 ,"Error encoding or decoding six fields in section 1, from 'year of century' to 'indicator of unit of time range'.",}, + {406 ,"Error encoding or decoding period of time.",}, + {407 ,"Error encoding or decoding time range indicator.",}, + {408 ,"Error encoding or decoding number averaged.",}, + {409 ,"Error encoding or decoding number missing from averages etc.",}, + {410 ,"Error encoding or decoding century of data or reserved field.",}, + {411 ,"Error encoding or decoding units decimal scale factor.",}, + {412 ,"Error encoding or decoding ECMWF local data.",}, + {413 ,"Grib edition not handled.",}, + {499 ,"Error found when checking values for section 1 against expected valid GRIB values.",}, + {501 ,"Error encoding or decoding length of section 2.",}, + {502 ,"Error encoding or decoding number of vertical coordinate parameters.",}, + {503 ,"Error encoding or decoding location of list of vertical coordinate parameters or list of numbers of points.",}, + {504 ,"Error encoding or decoding data representation type.",}, + {505 ,"Error encoding or decoding number of points aflong a parallel or meridian.",}, + {505 ,"Error encoding or decoding number of points aflong a parallel or meridian.",}, + {506 ,"Error encoding or decoding latitude or flongitude of the first grid point.",}, + {507 ,"Error encoding or decoding the components flag.",}, + {508 ,"Error encoding or decoding latitude or flongitude of the last grid point.",}, + {509 ,"Error encoding or decoding the i direction increment.",}, + {510 ,"Error encoding or decoding the number of parallels between the pole and the Equator.",}, + {511 ,"Error encoding or decoding scanning mode flags.",}, + {513 ,"Error encoding or decoding the j direction increment.",}, + {514 ,"Error encoding or decoding J,K,M pentagonal resolution parameters.",}, + {515 ,"Error encoding or decoding representation type or mode.",}, + {517 ,"Error encoding or decoding latitude or flongitude of southern pole.",}, + {518 ,"Error encoding or decoding angle of rotation.",}, + {519 ,"Error encoding or decoding latitude or flongitude of pole of stretching.",}, + {520 ,"Error encoding or decoding stretching factor.",}, + {521 ,"Error encoding or decoding vertical coordinate parameters.",}, + {522 ,"Error encoding or decoding list of numbers of points.",}, + {523 ,"Error encoding or decoding number of points aflong X or Y axis.",}, + {524 ,"Error encoding or decoding X or Y axis grid lengths.",}, + {525 ,"Error encoding or decoding the projection centre flag.",}, + {526 ,"Error encoding or decoding the latitude or flongitude of sub-satellite point.",}, + {527 ,"Error encoding or decoding the diameter of the Earth in X or Y direction.",}, + {528 ,"Error encoding or decoding the X or Y coordinate of the sub-satellite point.",}, + {529 ,"Error encoding or decoding the orientation of the grid or camera angle.",}, + {530 ,"Error encoding or decoding the X or Y coordinate of the origin of sector.",}, + {531 ,"Error inserting/extracting Latin1 or Latin2 of secants points.",}, + {532 ,"Error inserting/extracting latitude/flongitude of southern pole.",}, + {540 ,"Error encoding gaussian grid section 2.",}, + {541 ,"Error decoding gaussian grid section 2.",}, + {542 ,"Error encoding lat/flong grid section 2.",}, + {543 ,"Error decoding lat/flong grid section .",}, + {544 ,"Error encoding spectral section 2.",}, + {545 ,"Error decoding spectral section 2.",}, + {546 ,"Error encoding space view section 2, or error encoding ECMWF ocean section 2.",}, + {547 ,"Error decoding space view section 2, or error decoding ECMWF ocean section 2.",}, + {598 ,"Representation type not handled.",}, + {598 ,"Representation type not handled.",}, + {599 ,"Error found when checking values for section 2 against expected valid GRIB values.",}, + {601 ,"Error encoding or decoding length of section 3.",}, + {602 ,"Error encoding or decoding the number of unused bits at the end of section 3.",}, + {603 ,"Error encoding or decoding the bitmap reference table.",}, + {604 ,"Error encoding or decoding the primary bitmap.",}, + {605 ,"Unable to convert quasi-regular (reduced) gaussian grid with a bitmap.",}, + {699 ,"Error found when checking values for section 3 against expected valid GRIB values.",}, + {701 ,"Error encoding or decoding the length of section 4.",}, + {703 ,"Second-order packing implies additional flags.",}, + {704 ,"Function A or B invalid for second-order packed field (grid-point).",}, + {705 ,"Only simple packing handled for grid data.",}, + {706 ,"Error in decoding the section 4 flag field.",}, + {707 ,"Error encoding or decoding the field scale factor.",}, + {708 ,"Error encoding or decoding the field reference value.",}, + {709 ,"Error encoding or decoding the number of bits per data value.",}, + {710 ,"Output array too small.",}, + {711 ,"Error encoding or decoding a REAL coefficient.",}, + {712 ,"Error encoding or decoding data values.",}, + {713 ,"Error encoding or decoding the 'flag and unused bits' field.",}, + {714 ,"Decoding option is 'X' and number of values is illegal.",}, + {715 ,"Decoding option is 'X' and scanning mode is not north to south and west to east.",}, + {716 ,"Decoding option is 'X' and field is not a gaussian or latitude/flongitude grid.",}, + {717 ,"Decoding option is 'X' and a bitmap is encountered.",}, + {720 ,"Error encoding or decoding the octet number at which packed data begins.",}, + {721 ,"Error encoding or decoding the 'extended flag' field.",}, + {722 ,"Error encoding or decoding the first or second dimension of a matrix.",}, + {723 ,"Error encoding or decoding six fields, from first dimension coordinate value onwards.",}, + {724 ,"Error encoding or decoding first or second dimension coefficients.",}, + {725 ,"Error encoding a secondary bitmap.",}, + {726 ,"Output array is not big enough to allow expansion using bitmap(s), or constant (0-bit) field without section 2 not supported.",}, + {727 ,"Invalid predefined bitmap number given, or constant (0-bit) spectral field not supported.",}, + {728 ,"Open of predefined bitmap failed, or constant (0-bit) field function G or B not supported.",}, + {729 ,"Problem reading a predefined bitmap size, or output array is not big enough to allow expansion using bitmaps.",}, + {730 ,"Problem allocating memory for a predefined bitmap.",}, + {731 ,"Problem reading the number of non-missing points in a predefined bitmap.",}, + {732 ,"Problem reading a predefined bitmap.",}, + {733 ,"Problem closing a predefined bitmap file.",}, + {734 ,"Error inserting padding zeroes at end of section 4.",}, + {796 ,"Error extracting pointer to packed data.",}, + {797 ,"Error extracting sub-set truncation or constant (0-bit) field function G or B not supported.",}, + {798 ,"Function is X but no section 2 included.",}, + {799 ,"Error found when checking values for section 4 against expected valid GRIB values.",}, + {800 ,"Error encoding or decoding the 7777 group.",}, + {801 ,"Error inserting or extracting the 7777 group.",}, + {802 ,"Error encoding or decoding the length of the GRIB message.",}, + {805 ,"End of message 7777 group not found.",}, + {806 ,"Error in decoding a primary or secondary bitmap.",}, + {807 ,"Inconsistent values specified for complex packing in KSEC2(6) and KSEC4(4).",}, + {808 ,"Error converting quasi-regular (reduced) gaussian grid to regular.",}, + {809 ,"Error padding unused part of GRIB to zero.",}, + {810 ,"Error inserting dummy zero, or error padding GRIB to multiple of 120.",}, + {811 ,"Unable to handle secondary bitmaps for J option.",}, +}; +void gribex_check(int err) { + int i=0; + if(err > 0) { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + exit(err); + } +} + +#define ISECTION_0 2 +#define ISECTION_1 1024 /* beware of for ocean data */ +#define ISECTION_2 3000 +#define ISECTION_3 2 +#define ISECTION_4 512 + +#define RSECTION_2 512 +#define RSECTION_3 2 +#define RSECTION_4 1 + +#define STRMAXLEN 300 + + + + +void usage(char* prog) { + printf("usage: %s [-a outfile | -w outfile ] grib_file repetitions bitsPerValue\n",prog); + exit(1); +} + +size_t grib_handle_write(grib_handle* h,char* filename) { + FILE* of=NULL; + const void *buffer; size_t size; + + of = fopen(filename,"w"); + if(!of) { + perror(filename); + exit(1); + } + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + if(fwrite(buffer,1,size,of) != size) { + perror(filename); + exit(1); + } + fclose(of); + + return size; + +} + +static void print_timer(grib_timer* t,int repeat) { + printf("%s : %g cpu\n",t->name_,t->timer_/repeat); +} + +int main(int argc, char* argv[]) { + grib_handle *h=NULL; + grib_context* c=NULL; + FILE* fin=NULL; + FILE* fout=NULL; + char* finname; + char* ofilename; + char defofilename[]="gribex_perf.out"; + double *values=NULL; + double gvalues[1000000]={0,}; + int append=0; + size_t nvalues=0; + int count,e=0; + int repeatso=1; + int repeatsimple=1; + grib_timer *tega,*tdga,*tegx,*tdgx; + char packingType[50]={0,}; + size_t len=50; + char param[50]={0,}; + char gridType[50]={0,}; + char outfilename[255]={0,}; + long bitsPerValue=0; + int iarg=1; + char grid[20]={0,}; + char shortName[20]={0,}; + long level; + char levelType[20]={0,}; + char buffer[BUFF_SIZE]={0,}; + char buf[BUFF_SIZE]={0,}; + size_t length; + int sec4len; + flong ksec0[ISECTION_0]; + flong ksec1[ISECTION_1]; + flong ksec2[ISECTION_2]; + flong ksec3[ISECTION_3]; + flong ksec4[ISECTION_4]; + flong miss=0; + const void *msg; + flong gribex_msg_len=0; + + + double rsec2[RSECTION_2]; + double rsec3[RSECTION_3]; + + tega=grib_get_timer(0,"encoding grib_api", 0, 0); + tdga=grib_get_timer(0,"decoding grib_api", 0, 0); + tegx=grib_get_timer(0,"encoding gribex", 0, 0); + tdgx=grib_get_timer(0,"decoding gribex", 0, 0); + + if (argc != 4 && argc != 6 ) usage(argv[0]); + if (!strcmp(argv[iarg],"-w")) { + append=0; + iarg++; + ofilename=argv[iarg]; + iarg++; + } else if (!strcmp(argv[iarg],"-a")) { + append=1; + iarg++; + ofilename=argv[iarg]; + iarg++; + } else { + append=0; + ofilename=defofilename; + } + finname=argv[iarg++]; + repeatsimple=atoi(argv[iarg++]); + bitsPerValue=atoi(argv[iarg++]); + + fin = fopen(finname,"r"); + if(!fin) {perror(finname);exit(1);} + + c=grib_context_get_default(); + length=BUFF_SIZE; + GRIB_CHECK(grib_read_any_from_file(c,fin,buffer,&length),0); + fclose(fin); + + + if (append) + fout = fopen(ofilename,"a"); + else + fout = fopen(ofilename,"w"); + + if(!fout) {perror(ofilename);exit(1);} + + c=grib_context_get_default(); + e=0; + h=grib_handle_new_from_message_copy(c,buffer,length); + + GRIB_CHECK(e,0); + + len=50; + grib_get_string(h,"shortName",param,&len); + + len=20; + grib_get_string(h,"levelType",levelType,&len); + + if (!strcmp(levelType,"pl")) { + GRIB_CHECK(grib_get_long(h,"level",&level),0); + sprintf(shortName,"%s%ld",param,level); + } else { + sprintf(shortName,"%s",param); + } + + GRIB_CHECK(grib_get_size(h,"values",&nvalues),0); + values=(double*)grib_context_malloc_clear(c,sizeof(double)*nvalues); + if (!values) { printf("%s: memory allocation error\n",argv[0]); exit(1); } + + len=50; + grib_get_string(h,"gridType",gridType,&len); + + len=50; + grib_get_string(h,"packingType",packingType,&len); + + GRIB_CHECK(grib_get_double_array(h,"values",values,&nvalues),0); + grib_set_long(h,"bitsPerValue",bitsPerValue); + GRIB_CHECK(grib_set_double_array(h,"values",values,nvalues),0); + + printf("--------------------------------\n"); + printf("- %s - gridType=%s packingType=%s numberOfValues=%ld bitsPerValue=%ld\n", + param,gridType,packingType,(long)nvalues,bitsPerValue); + + if (!strcmp(gridType,"reduced_gg") || !strcmp(gridType,"regular_gg")) { + long N; + grib_get_long(h,"N",&N); + printf(" N=%ld\n",N); + sprintf(grid,"%ld",N); + } + if (!strcmp(gridType,"regular_ll")) { + double Di,Dj; + grib_get_double(h,"DiInDegrees",&Di); + grib_get_double(h,"DjInDegrees",&Dj); + printf(" Di=%g Dj=%g\n",Di,Dj); + sprintf(grid,"%g/%g",Di,Dj); + } + if (!strcmp(gridType,"sh")) { + long J; + grib_get_long(h,"J",&J); + printf(" T%ld\n",J); + sprintf(grid,"T%ld",J); + } + + if (!append) + fprintf(fout, + "shortName gridType numberOfValues bitsPerValue grid encodeso encodeSimple decodeso decodeSimple\n"); + + sec4len=nvalues+100000; + + /* decode values grib_api */ + grib_timer_start(tdga); + for (count=0;counttimer_/repeatso,tega->timer_/repeatsimple,tdgx->timer_/repeatso,tdga->timer_/repeatsimple); + + fclose(fout); + return 0; +} +#else + +int main(int argc,char* argv[]) { +return 0; +} + +#endif + diff --git a/tests/gridType.sh b/tests/gridType.sh new file mode 100755 index 000000000..242e76e60 --- /dev/null +++ b/tests/gridType.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +tmpdata=grib_api.grib + +rm -f $tmpdata || true + +${tools_dir}grib_set -s gridType=regular_gg ${data_dir}/reduced_latlon_surface.grib1 ${tmpdata} > $REDIRECT + +gridType=`${tools_dir}grib_get -p gridType $tmpdata` +if [ $gridType != "regular_gg" ] +then + echo "Unable to change from reduced_latlon to regular_gg" + echo $gridType + exit 1 +fi + +rm -f $tmpdata || true + +${tools_dir}grib_set -s gridType=reduced_gg ${data_dir}/regular_gaussian_pressure_level.grib1 ${tmpdata} > $REDIRECT + +gridType=`${tools_dir}grib_get -p gridType $tmpdata` +if [ $gridType != "reduced_gg" ] +then + echo "Unable to change from regular_gg to reduced_gg" + echo $gridType + exit 1 +fi + +rm -f $tmpdata || true + diff --git a/tests/ibm.c b/tests/ibm.c new file mode 100755 index 000000000..e7e9f6c80 --- /dev/null +++ b/tests/ibm.c @@ -0,0 +1,37 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include + + +#include "grib_api_internal.h" + +int main(int argc, char *argv[]) +{ + unsigned long i = 0; + + assert(grib_ibm_to_long(grib_long_to_ibm(i)) == i); + + for(i = 1; i < 0x7fffffff; i++) + { + unsigned long j = i | 0x80000000; + if(grib_ibm_to_long(grib_long_to_ibm(i)) != i) + { + printf("i=%ld i=%lx e=%g x=%lx\n",i,i,grib_long_to_ibm(i),grib_ibm_to_long(grib_long_to_ibm(i))); + assert(grib_ibm_to_long(grib_long_to_ibm(i)) == i); + } + assert(grib_ibm_to_long(grib_long_to_ibm(j)) == j); + if((i%100000) == 0) + printf("i = %08lx %08lx %g %g\n",i,j,grib_long_to_ibm(i),grib_long_to_ibm(j)); + } + + return 0; +} diff --git a/tests/ieee.c b/tests/ieee.c new file mode 100755 index 000000000..3580d254a --- /dev/null +++ b/tests/ieee.c @@ -0,0 +1,80 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include + +#include "grib_api_internal.h" + +double min = -1.0000000001; +double max = -1.00000000001; +double scale ; + +double p(double ref1,double ref2) +{ + double scale = (max-ref1) / 65535; + + + unsigned long pack = (unsigned long)(((max - ref1)/scale)+0.5); + double unpack = pack*scale + ref2; + + printf(" max: %04X %0.20f %0.20f\n",pack,unpack,max-unpack); + + pack = (unsigned long)(((min- ref1)/scale)+0.5); + unpack = pack*scale + ref2; + printf(" min: %04X %0.20f %0.20f\n",pack,unpack,min-unpack); + printf("\n"); + + return unpack; +} + + +int main(int argc, char *argv[]) +{ +#if 1 + unsigned long i = 0; + + assert(grib_ieee_to_long(grib_long_to_ieee(i)) == i); + + for(i = 1; i < 0x7fffffff; i++) + { + unsigned long j = i | 0x80000000; + if(grib_ieee_to_long(grib_long_to_ieee(i)) != i) + { + printf("i=%ld i=%lx e=%g x=%lx\n",i,i,grib_long_to_ieee(i),grib_ieee_to_long(grib_long_to_ieee(i))); + assert(grib_ieee_to_long(grib_long_to_ieee(i)) == i); + } + assert(grib_ieee_to_long(grib_long_to_ieee(j)) == j); + if((i%100000) == 0) + printf("i = %08lx %08lx %g %g\n",i,j,grib_long_to_ieee(i),grib_long_to_ieee(j)); + } + +#else + + + double ref1 = grib_long_to_ieee(grib_ieee_to_long(min)); + double ref2 = grib_nearest_smaller_ieee_float(min); + + + double a = p(min,ref1); + double b = p(min,ref2); + double c = p(ref1,ref1); + double d = p(ref2,ref2); + + +assert(min w.filter < r.filter < $outsimple.txt +diff $outsimple.txt ${data_dir}/ieee_test.good + +# Disabled for now. See GRIB-2 and GRIB-80 +#GRIB_IEEE_PACKING=32 +#export GRIB_IEEE_PACKING +#${tools_dir}grib_filter -o $out32 w.filter $infile +#${tools_dir}grib_filter r.filter $out32 > $out32.txt +#diff $out32.txt ${data_dir}/ieee_test.good + +#GRIB_IEEE_PACKING=64 +#export GRIB_IEEE_PACKING +#${tools_dir}grib_filter -o $out64 w.filter $infile +#${tools_dir}grib_filter r.filter $out64 > $out64.txt +#diff $out64.txt ${data_dir}/ieee_test.good + +rm -f $outsimple $out32 $out64 $out32.txt $out64.txt +rm -f ${data_dir}/$outsimple.txt ${data_dir}/$out32.txt ${data_dir}/$out64.txt +rm -f w.filter + +${tools_dir}grib_filter r.filter $shdata > $shdata.txt +diff $shdata.txt $shdata.good + +GRIB_IEEE_PACKING=32 +export GRIB_IEEE_PACKING +#${tools_dir}grib_copy -r $shdata ${shdata}_32 +#${tools_dir}grib_filter r.filter ${shdata}_32 > ${shdata}_32.txt +#diff ${shdata}_32.txt ${shdata}_32.good + +GRIB_IEEE_PACKING=64 +export GRIB_IEEE_PACKING +#${tools_dir}grib_copy -r $shdata ${shdata}_64 +#${tools_dir}grib_filter r.filter ${shdata}_64 > ${shdata}_64.txt +#diff ${shdata}_64.txt ${shdata}.good + +rm -f r.filter ${shdata}_64.txt ${shdata}_32.txt + diff --git a/tests/include.sh b/tests/include.sh new file mode 100644 index 000000000..38a3a95cd --- /dev/null +++ b/tests/include.sh @@ -0,0 +1,54 @@ +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +set -ea + +echo +echo "TEST: $0" + +data_dir="" + +# save current working dir +save=`pwd` + +if [ -z "${data_dir}" ] +then + cd ../ + cpath=`pwd` + GRIB_DEFINITION_PATH=$cpath/definitions + export GRIB_DEFINITION_PATH + GRIB_SAMPLES_PATH=$cpath/samples + export GRIB_SAMPLES_PATH + tools_dir=$cpath/tools/ + tigge_dir=$cpath/tigge/ + data_dir=$cpath/data + test_dir=$cpath/tests + def_dir=$cpath/definitions +else + tools_dir="" + tigge_dir="" +fi + +if [ -z "${GRIB_API_INCLUDE}" ] +then + GRIB_API_INCLUDE=`pwd`/src +fi + +if [ -z "${GRIB_API_LIB}" ] +then + GRIB_API_LIB=`pwd`/src +fi + +#${tools_dir}grib_info + +# go back to current working dir +cd $save + +set -u + diff --git a/tests/index.c b/tests/index.c new file mode 100644 index 000000000..d4dd8a3bd --- /dev/null +++ b/tests/index.c @@ -0,0 +1,140 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s infile\n",prog); + exit(1); +} + +int main(int argc,char* argv[]) { + + grib_index* index=NULL; + grib_handle* h=NULL; + char* infile=NULL; + char* outfile=NULL; + long *step,*level,*number; + char** shortName=NULL; + int i,j,k,l,iii; + size_t stepSize,levelSize,shortNameSize,numberSize; + long ostep,olevel,onumber; + char oshortName[200]; + size_t lenshortName=200; + int ret=0,count=0; + + if (argc != 2) usage(argv[0]); + infile=argv[1]; + outfile=argv[2]; + + printf("indexing...\n"); + + for (iii=0;iii<1;iii++) { + /* Create an index given set of keys*/ + index=grib_index_new(0,"shortName,level,number,step",&ret); + if (ret) {printf("error: %s\n",grib_get_error_message(ret)); exit(ret);} + + /* Indexes a file */ + ret=grib_index_add_file(index,infile); + if (ret) {printf("error: %s\n",grib_get_error_message(ret)); exit(ret);} + printf("end indexing...\n"); + + /* get the number of distinct values of "step" in the index */ + GRIB_CHECK(grib_index_get_size(index,"step",&stepSize),0); + step=malloc(sizeof(long)*stepSize); + if (!step) exit(1); + /* get the list of distinct steps from the index */ + /* the list is in ascending order */ + GRIB_CHECK(grib_index_get_long(index,"step",step,&stepSize),0); + printf("stepSize=%ld\n",(long)stepSize); + for (i=0;i index.out + +diff index.out ${data_dir}/index.ok + +${test_dir}/read_index ${infile} > index.out + +diff index.out ${data_dir}/index.ok + +rm -f index.out + diff --git a/tests/index_orderby.c b/tests/index_orderby.c new file mode 100644 index 000000000..ce309c65f --- /dev/null +++ b/tests/index_orderby.c @@ -0,0 +1,67 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s infile\n",prog); + exit(1); +} + +int main(int argc,char* argv[]) { + + grib_index* index=NULL; + grib_handle* h=NULL; + char* infile=NULL; + int i,j,k,l; + long ostep,olevel,onumber; + char oshortName[200]; + size_t lenshortName=200; + int ret=0,count=0; + + if (argc != 2) usage(argv[0]); + infile=argv[1]; + outfile=argv[2]; + + printf("indexing...\n"); + /* Create an index from a grib file with a given set of keys*/ + index=grib_index_new_from_file(0,infile,"shortName,level,number,step",&ret); + if (ret) {printf("error: %s\n",grib_get_error_message(ret)); exit(ret);} + printf("end indexing...\n"); + + /* ask the index to order the fields thorough some keys*/ + ret=grib_index_orderby(index,"level,shortName,number:desc,step:asc"); + if (ret!=GRIB_SUCCESS) exit(1); + + count=0; + /* loop through all the fields in the asked order*/ + while ((h=grib_handle_new_from_index(index,&ret))!=NULL){ + count++; + if (ret) {printf("error: %d\n",ret); exit(ret);} + lenshortName=200; + grib_get_string(h,"shortName",oshortName,&lenshortName); + grib_get_long(h,"level",&olevel); + grib_get_long(h,"number",&onumber); + grib_get_long(h,"step",&ostep); + printf("shortName=%s ",oshortName); + printf("level=%ld ",olevel); + printf("number=%ld ",onumber); + printf("step=%ld \n",ostep); + grib_handle_delete(h); + } + if (ret!=GRIB_END_OF_INDEX) { + printf("error: %s\n",grib_get_error_message(ret)); + exit(ret); + } + printf(" %d messages selected\n",count); + + return 0; +} + diff --git a/tests/iterator.sh b/tests/iterator.sh new file mode 100755 index 000000000..a3d40ebaa --- /dev/null +++ b/tests/iterator.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +files="reduced_latlon_surface.grib1 \ + reduced_gaussian_pressure_level.grib1 \ + regular_gaussian_pressure_level.grib1 \ + reduced_gaussian_sub_area.grib1 \ + regular_latlon_surface.grib1 \ + reduced_latlon_surface.grib2 \ + reduced_gaussian_pressure_level.grib2 \ + regular_gaussian_pressure_level.grib2 \ + reduced_gaussian_sub_area.grib2 \ + regular_latlon_surface.grib2" + +for f in `echo $files` +do + +file=${data_dir}/$f + +iterator_count=`${tools_dir}grib_get_data -m 9999:missing -f -p centre -F "%g" -w count=1 $file | grep -v Lat |wc -l ` +numberOfPoints=`${tools_dir}grib_get -w count=1 -p numberOfPoints $file` + +[ $numberOfPoints = ${iterator_count} ] + +done + diff --git a/tests/jpeg.sh b/tests/jpeg.sh new file mode 100755 index 000000000..0ec2091b8 --- /dev/null +++ b/tests/jpeg.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +infile=${data_dir}/jpeg.grib2 + +rm -f $infile.1 $infile.2 || true + +${tools_dir}grib_set -s packingType=grid_simple $infile $infile.1 +${tools_dir}grib_compare -P -b totalLength,section5Length,section7Length,dataRepresentationTemplateNumber,typeOfPacking,typeOfCompressionUsed,targetCompressionRatio $infile $infile.1 > $REDIRECT +${tools_dir}grib_set -s packingType=grid_jpeg $infile.1 $infile.2 +${tools_dir}grib_compare -P -b totalLength,section5Length,section7Length,dataRepresentationTemplateNumber,typeOfPacking $infile.1 $infile.2 > $REDIRECT + +templateNumber=`${tools_dir}grib_get -p dataRepresentationTemplateNumber $infile.2` + +if [ $templateNumber -ne 40 ] +then + echo dataRepresentationTemplateNumber=$templateNumber + exit 1 +fi + +rm -f $infile.1 $infile.2 || true + +infile=${data_dir}/reduced_latlon_surface.grib2 + +${tools_dir}grib_set -s packingType=grid_jpeg $infile $infile.1 +${tools_dir}grib_compare -P -b totalLength,section5Length,section7Length,dataRepresentationTemplateNumber,typeOfPacking $infile $infile.1 > $REDIRECT +${tools_dir}grib_set -s packingType=grid_simple $infile.1 $infile.2 +${tools_dir}grib_compare -P -b totalLength,section5Length,section7Length,dataRepresentationTemplateNumber,typeOfPacking,typeOfCompressionUsed,targetCompressionRatio $infile.1 $infile.2 > $REDIRECT + +rm -f $infile.1 $infile.2 || true diff --git a/tests/jpeg_perf.c b/tests/jpeg_perf.c new file mode 100644 index 000000000..830667fd3 --- /dev/null +++ b/tests/jpeg_perf.c @@ -0,0 +1,247 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +#if GRIB_TIMER + +void usage(char* prog) { + printf("usage: %s [-a outfile | -w outfile ] grib_file repetitions bitsPerValue\n",prog); + exit(1); +} + +size_t grib_handle_write(grib_handle* h,char* filename) { + FILE* of=NULL; + const void *buffer; size_t size; + + of = fopen(filename,"w"); + if(!of) { + perror(filename); + exit(1); + } + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + if(fwrite(buffer,1,size,of) != size) { + perror(filename); + exit(1); + } + fclose(of); + + return size; + +} + +static void print_timer(grib_timer* t,int repeat) { + printf("%s : %g cpu\n",t->name_,t->timer_/repeat); +} + +int main(int argc, char* argv[]) { + grib_handle *h=NULL; + grib_context* c=NULL; + FILE* fin=NULL; + FILE* fout=NULL; + char* finname; + char* ofilename; + char defofilename[]="jpeg_perf.out"; + double *values=NULL; + int append=0; + size_t nvalues=0; + int count,e=0; + int repeatjpeg=1; + int repeatsimple=1; + grib_timer *tes,*tds,*tej,*tdj; + char grid_jpeg[]="grid_jpeg"; + size_t grid_jpeg_l=strlen(grid_jpeg); + char grid_simple[]="grid_simple"; + size_t grid_simple_l=strlen(grid_simple); + char packingType[50]={0,}; + size_t len=50; + char param[50]={0,}; + char gridType[50]={0,}; + char outfilename[255]={0,}; + size_t filesize_jpeg=0; + size_t filesize_simple=0; + double perc=0; + long bitsPerValue=0; + int iarg=1; + char grid[20]={0,}; + char shortName[20]={0,}; + long level; + char levelType[20]={0,}; + + tes=grib_get_timer(0,"encoding simple", 0, 0); + tds=grib_get_timer(0,"decoding simple", 0, 0); + tej=grib_get_timer(0,"encoding jpeg", 0, 0); + tdj=grib_get_timer(0,"decoding jpeg", 0, 0); + + if (argc != 4 && argc != 6 ) usage(argv[0]); + if (!strcmp(argv[iarg],"-w")) { + append=0; + iarg++; + ofilename=argv[iarg]; + iarg++; + } else if (!strcmp(argv[iarg],"-a")) { + append=1; + iarg++; + ofilename=argv[iarg]; + iarg++; + } else { + append=0; + ofilename=defofilename; + } + finname=argv[iarg++]; + repeatsimple=atoi(argv[iarg++]); + bitsPerValue=atoi(argv[iarg++]); + + fin = fopen(finname,"r"); + if(!fin) {perror(finname);exit(1);} + + if (append) + fout = fopen(ofilename,"a"); + else + fout = fopen(ofilename,"w"); + + if(!fout) {perror(ofilename);exit(1);} + + c=grib_context_get_default(); + e=0; + h=grib_handle_new_from_file(c,fin,&e); + fclose(fin); + + GRIB_CHECK(e,0); + + len=50; + grib_get_string(h,"shortName",param,&len); + + len=20; + grib_get_string(h,"levelType",levelType,&len); + + if (!strcmp(levelType,"pl")) { + GRIB_CHECK(grib_get_long(h,"level",&level),0); + sprintf(shortName,"%s%ld",param,level); + } else { + sprintf(shortName,"%s",param); + } + + + grib_set_long(h,"editionNumber",2); + GRIB_CHECK(grib_get_size(h,"values",&nvalues),0); + values=(double*)grib_context_malloc(c,sizeof(double)*nvalues); + if (!values) { printf("%s: memory allocation error\n",argv[0]); exit(1); } + + len=50; + grib_get_string(h,"gridType",gridType,&len); + + len=50; + grib_get_string(h,"packingType",packingType,&len); + + GRIB_CHECK(grib_get_double_array(h,"values",values,&nvalues),0); + grib_set_long(h,"bitsPerValue",bitsPerValue); + GRIB_CHECK(grib_set_double_array(h,"values",values,nvalues),0); + + printf("--------------------------------\n"); + printf("- %s - gridType=%s packingType=%s numberOfValues=%ld bitsPerValue=%ld\n", + param,gridType,packingType,(long)nvalues,bitsPerValue); + + if (!strcmp(packingType,"spectral_complex") || !strcmp(packingType,"spectral_simple")) { + printf("unable to process spectral data\n"); + exit(1); + } + + if (!strcmp(gridType,"reduced_gg") || !strcmp(gridType,"regular_gg")) { + long N; + grib_get_long(h,"N",&N); + printf(" N=%ld\n",N); + sprintf(grid,"%ld",N); + } + if (!strcmp(gridType,"regular_ll")) { + double Di,Dj; + grib_get_double(h,"DiInDegrees",&Di); + grib_get_double(h,"DjInDegrees",&Dj); + printf(" Di=%g Dj=%g\n",Di,Dj); + sprintf(grid,"%g/%g",Di,Dj); + } + + + if (!append) + fprintf(fout, + "shortName gridType numberOfValues bitsPerValue grid sizeSimple sizeJpeg encodeJpeg encodeSimple decodeJpeg decodeSimple\n"); + + /* decode values grid_simple */ + if (strcmp(packingType,grid_simple)) + grib_set_string(h,"packingType",grid_simple,&grid_simple_l); + /* printf("decoding simple\n"); */ + grib_timer_start(tds); + for (count=0;counttimer_/repeatjpeg,tes->timer_/repeatsimple,tdj->timer_/repeatjpeg,tds->timer_/repeatsimple); + + return 0; +} +#else + +int main(int argc,char* argv[]) { +return 0; +} + +#endif + diff --git a/tests/julian.c b/tests/julian.c new file mode 100644 index 000000000..44a0de2b6 --- /dev/null +++ b/tests/julian.c @@ -0,0 +1,158 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api.h" +#include + +#define EPSILON 1e-12 +#define DBL_EQUAL(a,b) (fabs((a)-(b))<=(EPSILON)*fabs((a))) + +#define BOOL int +#define TRUE 1 +#define FALSE 0 + +BOOL Check( + const long year1, const long month1, const long day1, const long hour1, const long min1, const long sec1, + const long year2, const long month2, const long day2, const long hour2, const long min2, const long sec2) +{ + if (year1 != year2 || month1 != month2 || day1 != day2 || hour1 != hour2 || min1 != min2 || sec1 != sec2) { + return FALSE; + } + return TRUE; +} + +void TestDateTime(const long year, const long month, const long day, const long hour, const long min, const long sec) +{ + double jd = 0.0; + long year1, month1, day1, hour1, min1, sec1; /*generated ones*/ + long jdlong1, jdlong2, date; + + /* Convert the input values to a double */ + grib_datetime_to_julian(year,month,day,hour,min,sec, &jd); + + /* Convert the double back to the input values and compare */ + grib_julian_to_datetime(jd, &year1,&month1,&day1,&hour1,&min1,&sec1); + + if (!Check(year,month,day,hour,min,sec, year1,month1,day1,hour1,min1,sec1)) { + fprintf(stderr, "Failed julian<->datetime\nInput: year=%ld mon=%ld day=%ld time=%ld:%ld:%ld\n" + "Output: year=%ld mon=%ld day=%ld time=%ld:%ld:%ld\n", + year, month, day, hour, min, sec, + year1,month1,day1,hour1,min1,sec1); + exit (1); + } + + /* Now test the conversion from long -> long */ + jdlong1=(long)(jd+0.5); /* round up */ + date=grib_julian_to_date(jdlong1); + jdlong2=grib_date_to_julian(date); + if ( jdlong1 != jdlong2 ) { + fprintf(stderr, "Failed julian<->date\nInput: year=%ld mon=%ld day=%ld time=%ld:%ld:%ld\n", + year, month, day, hour, min, sec); + exit (1); + } +} + + +void Test1() +{ + long year, month, day, hour, min, sec; + double jd; + + /* Test a specific date */ + year = 1957; + month = 10; + day = 4; + hour = 19; + min = 26; + sec = 24; + + grib_datetime_to_julian(year, month, day, hour,min, sec, &jd); + assert( DBL_EQUAL(jd, 2436116.31) ); + printf("%ld %ld %ld %ld:%ld:%ld -> %f\n",year,month,day,hour,min,sec,jd); + + grib_julian_to_datetime(jd, &year, &month, &day, &hour,&min, &sec); + assert( year == 1957 ); + assert( month == 10 ); + assert( day == 4 ); + assert( hour == 19 ); + assert( min == 26 ); + assert( sec == 24 ); + printf("%ld %ld %ld %ld:%ld:%ld -> %f\n",year,month,day,hour,min,sec,jd); +} + +void Test2() +{ + long year, month, day, hour, minute, second; + int i,last; + double jd; + long jdl,date; + /* Test specific julian values */ + double jds[]={ + 2451545.0, + 2446822.5, + 2446966.0, + 2447187.5, + 2447332.0, + 2415020.5, + 2305447.5, + 2305812.5, + 2205512.5, + 2026871.8, + 0.0}; + + last=sizeof(jds)/sizeof(double); + + printf("\n"); + for (i=0;i %f\n",year,month,day,hour,minute,second,jd); + grib_datetime_to_julian(year,month,day,hour,minute,second,&jd); + printf("- %ld %ld %ld %ld:%ld:%ld -> %f\n",year,month,day,hour,minute,second,jd); + + if ( !DBL_EQUAL(jd, jds[i]) ) { + fprintf(stderr, "i=%d: Got: %f, expected: %f\n", i, jd, jds[i]); + assert(0); + } + + jdl=(long)(jd+0.5); + date=grib_julian_to_date(jdl); + printf("+ %ld -> %ld\n",date,jdl); + jdl=grib_date_to_julian(date); + printf("- %ld -> %ld\n",date,jdl); + printf("\n"); + } +} + +void Test3() +{ + long iyear, imnth, iday, ihr, imin, isec; + for (iyear=1950; iyear<=2015; iyear+=5) { + for (imnth=1; imnth<=12; imnth+=1) { + for (iday=1; iday<=28; iday+=1) { + for (ihr=1; ihr<=23; ihr+=2) { + for (imin=1; imin<=59; imin+=3) { + for(isec=1; isec<=59; isec+=5) { + TestDateTime(iyear, imnth, iday, ihr, imin, isec); + } + } + } + } + } + } +} + +int main(int argc,char* argv[]) +{ + Test1(); + Test2(); + Test3(); + return 0; +} diff --git a/tests/julian.sh b/tests/julian.sh new file mode 100755 index 000000000..870ea5709 --- /dev/null +++ b/tests/julian.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh +${test_dir}/julian > ${data_dir}/julian.out + +diff ${data_dir}/julian.out ${data_dir}/julian.out.good + +rm -f ${data_dir}/julian.out | true diff --git a/tests/keys b/tests/keys new file mode 100644 index 000000000..f8742cd5c --- /dev/null +++ b/tests/keys @@ -0,0 +1,1439 @@ +%{ +#include "grib_api_internal.h" +%} +struct grib_keys_hash { char* name; int id;}; +%% +************_ENSEMBLE_**************,1 +************_EXPERIMENT_************,2 +************_PRODUCT_***************,3 +*********_EXTRA_DATA_***************,4 +7777,5 +At_least__Or_Distribut_Proportion_Of,6 +BOX,7 +BUDG,8 +BUFR,9 +BUFRstr,10 +CDF,11 +CDFstr,12 +DELETE,13 +Date_E2,14 +Date_E3,15 +Date_E4,16 +Di,17 +DiGiven,18 +DiInDegrees,19 +DiInMetres,20 +Dj,21 +DjGiven,22 +DjInDegrees,23 +DjInMetres,24 +Dstart,25 +Dx,26 +DxInDegrees,27 +DxInMetres,28 +Dy,29 +DyInDegrees,30 +DyInMetres,31 +ECMWF,32 +ECMWF_s,33 +Ensemble_Combinat_Number_0_none_E2,34 +Ensemble_Combinat_Number_0_none_E3,35 +Ensemble_Combinat_Number_0_none_E4,36 +Ensemble_Combination_Number,37 +Ensemble_Identifier,38 +Ensemble_Identifier_E2,39 +Ensemble_Identifier_E3,40 +Ensemble_Identifier_E4,41 +Experiment_Identifier,42 +Extra_Data_FreeFormat_0_none,43 +FirstLatitude,44 +GDSPresent,45 +GRIB,46 +GRIBEXSection1Problem,47 +GRIBEXShBugPresent,48 +GRIBEditionNumber,49 +GRIB_DEPTH,50 +GRIB_LATITUDE,51 +GRIB_LONGITUDE,52 +Hour_E2,53 +Hour_E3,54 +Hour_E4,55 +ICEFieldsUsed,56 +IDSAT,57 +ITERATOR,58 +J,59 +JS,60 +K,61 +KS,62 +LATITUDE,63 +LATITUDE1,64 +LATITUDE2,65 +LBC_Initial_Conditions,66 +LONGITUDE,67 +LONGITUDE1,68 +LONGITUDE2,69 +La1,70 +La1InDegrees,71 +La2,72 +LaD,73 +LaDInDegrees,74 +Lap,75 +Lar1,76 +Lar1InDegrees,77 +Lar2,78 +Lar2InDegrees,79 +Latin,80 +Latin1,81 +Latin1InDegrees,82 +Latin2,83 +Latin2InDegrees,84 +Less_Than_Or_To_Overall_Distribution,85 +Lo1,86 +Lo1InDegrees,87 +Lo2,88 +LoV,89 +LoVInDegrees,90 +Local_Number_Members_Missing,91 +Local_Number_Members_Missing_E2,92 +Local_Number_Members_Missing_E3,93 +Local_Number_Members_Missing_E4,94 +Local_Number_Members_Possible,95 +Local_Number_Members_Possible_E2,96 +Local_Number_Members_Possible_E3,97 +Local_Number_Members_Possible_E4,98 +Local_Number_Members_Used,99 +Local_Number_Members_Used_E2,100 +Local_Number_Members_Used_E3,101 +Local_Number_Members_Used_E4,102 +Lor1,103 +Lor1InDegrees,104 +Lor2,105 +Lor2InDegrees,106 +M,107 +MS,108 +Minute_E2,109 +Minute_E3,110 +Minute_E4,111 +Missing_Model_LBC,112 +Missing_Model_LBC_E2,113 +Missing_Model_LBC_E3,114 +Missing_Model_LBC_E4,115 +Model_Additional_Information,116 +Model_Identifier,117 +Model_LBC_Member_Identifier,118 +N,119 +N1,120 +N2,121 +NB,122 +NC,123 +NC1,124 +NC2,125 +NEAREST,126 +NG,127 +NH,128 +NINT_LOG10_RITZ,129 +NINT_RITZ_EXP,130 +NL,131 +NR,132 +NRj,133 +NT,134 +NV,135 +Nassigned,136 +Nb,137 +Nf,138 +Ni,139 +Nj,140 +Nr,141 +NrInRadiusOfEarth,142 +Number_Combination_Ensembles_1_none,143 +Nx,144 +Ny,145 +Original_CodeTable_2_Version_Number,146 +Original_Parameter_Iden_CodeTable2,147 +Original_Parameter_Identifier,148 +P,149 +P1,150 +P2,151 +PLPresent,152 +PUnset,153 +PVPresent,154 +P_INST,155 +P_TACC,156 +P_TAVG,157 +Product_Identifier,158 +SPD,159 +SecondLatitude,160 +Show_Combination_Ensem_E2_0_no_1_yes,161 +Show_Combination_Ensem_E3_0_no_1_yes,162 +Show_Combination_Ensem_E4_0_no_1_yes,163 +Sub-Experiment_Identifier,164 +TIDE,165 +TS,166 +TScalc,167 +TYPE_AN,168 +TYPE_CF,169 +TYPE_FC,170 +TYPE_FF,171 +TYPE_FX,172 +TYPE_OF,173 +TYPE_OR,174 +TYPE_PF,175 +Threshold_Or_Distribution_0_no_1_yes,176 +Threshold_Or_Distribution_Units,177 +Time_Range_One_E2,178 +Time_Range_One_E3,179 +Time_Range_One_E4,180 +Time_Range_Two_E2,181 +Time_Range_Two_E3,182 +Time_Range_Two_E4,183 +Total_Number_Members_Missing,184 +Total_Number_Members_Possible,185 +Total_Number_Members_Used,186 +Used_Model_LBC,187 +Used_Model_LBC_E2,188 +Used_Model_LBC_E3,189 +Used_Model_LBC_E4,190 +WMO,191 +Xo,192 +Xp,193 +XpInGridLengths,194 +Yo,195 +Yp,196 +YpInGridLengths,197 +_T,198 +_TS,199 +_numberOfValues,200 +accumulationInterval,201 +accuracyMultipliedByFactor,202 +addExtraLocalSection,203 +additionalFlagPresent,204 +aerosolType,205 +alternativeRowScanning,206 +altitudeOfTheCameraFromTheEarthSCenterMeasuredInUnitsOfTheEarth,207 +analysisOffsets,208 +angleDivisor,209 +angleMultiplier,210 +angleOfRotation,211 +angleOfRotationInDegrees,212 +angleOfRotationOfProjection,213 +applicationIdentifier,214 +auxiliary,215 +average,216 +averaging1Flag,217 +averaging2Flag,218 +averagingPeriod,219 +avg,220 +backgroundGeneratingProcessIdentifier,221 +backgroundProcess,222 +band,223 +baseDateEPS,224 +baseDateOfThisLeg,225 +baseTimeEPS,226 +baseTimeOfThisLeg,227 +basicAngleOfTheInitialProductionDomain,228 +binaryScaleFactor,229 +bitMapIndicator,230 +bitmap,231 +bitmapPresent,232 +bitmapSectionPresent,233 +bitsPerValue,234 +bitsPerValueAndRepack,235 +bottomLevel,236 +boustrophedonic,237 +boustrophedonicOrdering,238 +categories,239 +categoryType,240 +ccccIdentifiers,241 +centralClusterDefinition,242 +centralLongitude,243 +centralLongitudeInMicrodegrees,244 +centre,245 +centreForLocal,246 +centreForTable2,247 +centuryOfAnalysis,248 +centuryOfReference,249 +centuryOfReferenceTimeOfData,250 +changeDecimalPrecision,251 +changingPrecision,252 +channel,253 +channelNumber,254 +char,255 +charValues,256 +class,257 +classOfAnalysis,258 +climateDateFrom,259 +climateDateTo,260 +climatologicalRegime,261 +clusterIdentifier,262 +clusterMember1,263 +clusterMember10,264 +clusterMember2,265 +clusterMember3,266 +clusterMember4,267 +clusterMember5,268 +clusterMember6,269 +clusterMember7,270 +clusterMember8,271 +clusterMember9,272 +clusterNumber,273 +clusterSize,274 +clusteringDomain,275 +clusteringMethod,276 +clutterFilterIndicator,277 +codeFigure,278 +codeType,279 +codedNumberOfFirstOrderPackedValues,280 +codedNumberOfGroups,281 +codedValues,282 +coefsFirst,283 +coefsSecond,284 +commonBlock,285 +complexPacking,286 +componentIndex,287 +computeLaplacianOperator,288 +computeStatistics,289 +conceptDir,290 +conceptsLocalDirAll,291 +conceptsLocalDirECMF,292 +conceptsMasterDir,293 +consensus,294 +consensusCount,295 +const,296 +constantAntennaElevationAngle,297 +constituentType,298 +controlForecastCluster,299 +coordAveraging0,300 +coordAveraging1,301 +coordAveraging2,302 +coordAveraging3,303 +coordAveragingTims,304 +coordinate1End,305 +coordinate1Flag,306 +coordinate1Start,307 +coordinate2End,308 +coordinate2Flag,309 +coordinate2Start,310 +coordinate3Flag,311 +coordinate3OfFirstGridPoint,312 +coordinate3OfLastGridPoint,313 +coordinate4Flag,314 +coordinate4OfFirstGridPoint,315 +coordinate4OfLastGridPoint,316 +coordinateFlag1,317 +coordinateFlag2,318 +coordinateIndexNumber,319 +core,320 +corr1Data,321 +corr2Data,322 +corr3Data,323 +corr4Data,324 +correction1,325 +correction1Part,326 +correction2,327 +correction2Part,328 +correction3,329 +correction3Part,330 +correction4,331 +correction4Part,332 +count,333 +countOfGroupLengths,334 +countOfICEFieldsUsed,335 +countTotal,336 +dataCategory,337 +dataDate,338 +dataFlag,339 +dataLength,340 +dataOrigin,341 +dataRepresentation,342 +dataRepresentationTemplateNumber,343 +dataRepresentationType,344 +dataSelection,345 +dataStream,346 +dataSubCategory,347 +dataTime,348 +dataType,349 +dataValues,350 +date,351 +dateOfAnalysis,352 +dateOfForecastRun,353 +dateOfIceFieldUsed,354 +dateOfReference,355 +dateOfSSTFieldUsed,356 +dateSSTFieldUsed,357 +datumSize,358 +day,359 +dayOfAnalysis,360 +dayOfEndOfOverallTimeInterval,361 +dayOfReference,362 +dayOfTheYearDate,363 +decimalPrecision,364 +decimalScaleFactor,365 +defaultName,366 +defaultParameter,367 +defaultShortName,368 +definitionFilesVersion,369 +deleteExtraLocalSection,370 +deleteLocalDefinition,371 +derivedForecast,372 +diagnostic,373 +diagnosticNumber,374 +dimension,375 +dimensionCategory,376 +dimensionNumber,377 +dimensionTableNumber,378 +dimensionType,379 +direction,380 +directionNumber,381 +directionScalingFactor,382 +dirty_statistics,383 +disableGrib1LocalSection,384 +discipline,385 +distanceFromTubeToEnsembleMean,386 +distinctLatitudes,387 +distinctLongitudes,388 +domain,389 +dummy,390 +dummy1,391 +dummy2,392 +dummyc,393 +dx,394 +dy,395 +earthIsOblate,396 +eastLongitudeOfCluster,397 +eastLongitudeOfDomainOfTubing,398 +easternLongitudeOfClusterDomain,399 +easternLongitudeOfDomain,400 +ed,401 +edition,402 +editionNumber,403 +efiOrder,404 +eight,405 +eleven,406 +endGridDefinition,407 +endMark,408 +endOfHeadersMaker,409 +endOfInterval,410 +endOfProduct,411 +endOfRange,412 +endStep,413 +endStepInHours,414 +endTimeStep,415 +energyNorm,416 +enorm,417 +ensembleForecastNumbers,418 +ensembleForecastNumbersList,419 +ensembleSize,420 +ensembleStandardDeviation,421 +eps,422 +epsContinous,423 +epsPoint,424 +epsStatistics,425 +epsStatisticsContinous,426 +epsStatisticsPoint,427 +error,428 +expandBy,429 +experimentVersionNumber,430 +experimentVersionNumberOfAnalysis,431 +expver,432 +extendedFlag,433 +extraDimensionPresent,434 +extraLocalSectionNumber,435 +extraLocalSectionPresent,436 +extraValues,437 +false,438 +fcmonth,439 +fcperiod,440 +fgDate,441 +fgTime,442 +file,443 +firstDimension,444 +firstDimensionCoordinateValueDefinition,445 +firstDimensionPhysicalSignificance,446 +firstLatitude,447 +firstLatitudeInDegrees,448 +firstMonthUsedToBuildClimateMonth1,449 +firstMonthUsedToBuildClimateMonth2,450 +firstOrderValues,451 +flag,452 +flagForAnyFurtherInformation,453 +flagForIrregularGridCoordinateList,454 +flagForNormalOrStaggeredGrid,455 +flagShowingPostAuxiliaryArrayInUse,456 +flags,457 +floatVal,458 +forecastLeadTime,459 +forecastMonth,460 +forecastOrSingularVectorNumber,461 +forecastPeriod,462 +forecastPeriodFrom,463 +forecastPeriodTo,464 +forecastProbabilityNumber,465 +forecastSteps,466 +forecastTime,467 +forecastperiod,468 +formatVersionMajorNumber,469 +formatVersionMinorNumber,470 +freeFormData,471 +frequency,472 +frequencyNumber,473 +frequencyScalingFactor,474 +functionCode,475 +g2grid,476 +generalExtended2ordr,477 +generatingProcessIdentificationNumber,478 +generatingProcessIdentifier,479 +getNumberOfValues,480 +global,481 +globalDomain,482 +grib1divider,483 +grib2LocalSectionNumber,484 +grib2LocalSectionPresent,485 +grib2divider,486 +gribMasterTablesVersionNumber,487 +gribTablesVersionNo,488 +grid,489 +gridCoordinate,490 +gridDefinition,491 +gridDefinitionSection,492 +gridDefinitionTemplateNumber,493 +gridDescriptionSectionPresent,494 +gridPointPosition,495 +gridType,496 +groupLengths,497 +groupSplitting,498 +groupWidth,499 +groupWidths,500 +gts_CCCC,501 +gts_TTAAii,502 +gts_ddhh00,503 +gts_header,504 +halfByte,505 +hdate,506 +headersOnly,507 +heightOrPressureOfLevel,508 +heightPressureEtcOfLevels,509 +hideThis,510 +horizontalCoordinateDefinition,511 +horizontalCoordinateSupplement,512 +horizontalDimensionProcessed,513 +hour,514 +hourOfAnalysis,515 +hourOfEndOfOverallTimeInterval,516 +hourOfReference,517 +hoursAfterDataCutoff,518 +hoursAfterReferenceTimeOfDataCutoff,519 +hundred,520 +iDirectionIncrement,521 +iDirectionIncrementGiven,522 +iDirectionIncrementInDegrees,523 +iIncrement,524 +iScansNegatively,525 +iScansPositively,526 +ident,527 +identificationNumber,528 +identificationOfOriginatingGeneratingCentre,529 +identifier,530 +ieeeFloats,531 +ifsParam,532 +ijDirectionIncrementGiven,533 +incrementOfLengths,534 +indicatorOfParameter,535 +indicatorOfTypeOfLevel,536 +indicatorOfUnitForTimeIncrement,537 +indicatorOfUnitForTimeRange,538 +indicatorOfUnitOfTimeRange,539 +instrument,540 +instrumentIdentifier,541 +instrumentType,542 +integerPointValues,543 +integerScalingFactorAppliedToDirections,544 +integerScalingFactorAppliedToFrequencies,545 +integerValues,546 +interpretationOfNumberOfPoints,547 +intervalBetweenTimes,548 +isAccumulation,549 +isConstant,550 +isEPS,551 +isEps,552 +isSatellite,553 +isSens,554 +isectionNumber2,555 +isectionNumber3,556 +isectionNumber4,557 +iteration,558 +iterationNumber,559 +jDirectionIncrement,560 +jDirectionIncrementGiven,561 +jDirectionIncrementInDegrees,562 +jIncrement,563 +jPointsAreConsecutive,564 +jScansPositively,565 +julianDay,566 +keyData,567 +keyMore,568 +keySubtype,569 +keyType,570 +kindOfProduct,571 +kurt,572 +kurtosis,573 +laplacianOperator,574 +laplacianOperatorIsSet,575 +laplacianScalingFactor,576 +laplacianScalingFactorUnset,577 +lastMonthUsedToBuildClimateMonth1,578 +lastMonthUsedToBuildClimateMonth2,579 +latLonValues,580 +latitude,581 +latitudeFirstInDegrees,582 +latitudeLastInDegrees,583 +latitudeLongitudeValues,584 +latitudeOfCenterPoint,585 +latitudeOfCentralPointInClusterDomain,586 +latitudeOfFirstGridPoint,587 +latitudeOfFirstGridPointInDegrees,588 +latitudeOfIcosahedronPole,589 +latitudeOfLastGridPoint,590 +latitudeOfLastGridPointInDegrees,591 +latitudeOfNorthWestCornerOfArea,592 +latitudeOfSouthEastCornerOfArea,593 +latitudeOfSouthernPole,594 +latitudeOfSouthernPoleInDegrees,595 +latitudeOfStretchingPole,596 +latitudeOfStretchingPoleInDegrees,597 +latitudeOfSubSatellitePoint,598 +latitudeOfSubSatellitePointInDegrees,599 +latitudeOfTangencyPoint,600 +latitudeOfThePoleOfStretching,601 +latitudeOfThePolePoint,602 +latitudeOfTheSouthernPoleOfProjection,603 +latitudeWhereDxAndDyAreSpecified,604 +latitudeWhereDxAndDyAreSpecifiedInDegrees,605 +latitudes,606 +latitudinalDirectionGridLength,607 +leadtime,608 +legBaseDate,609 +legBaseTime,610 +legNumber,611 +lengthOfHeaders,612 +lengthOfTimeRange,613 +lev,614 +level,615 +levelIndicator,616 +levelType,617 +levelist,618 +levels,619 +levtype,620 +libraryVersion,621 +listMembersMissing,622 +listMembersMissing2,623 +listMembersMissing3,624 +listMembersMissing4,625 +listMembersUsed,626 +listMembersUsed2,627 +listMembersUsed3,628 +listMembersUsed4,629 +listOfContributingSpectralBands,630 +listOfEnsembleForecastNumbers,631 +listOfModelIdentifiers,632 +listOfParametersUsedForClustering,633 +listOfScaledFrequencies,634 +local,635 +localDecimalScaleFactor,636 +localDefNumberOne,637 +localDefNumberTwo,638 +localDefinition,639 +localDefinitionNumber,640 +localDir,641 +localExtensionPadding,642 +localFlag,643 +localSection,644 +localTablesVersion,645 +localTablesVersionNumber,646 +localUsePresent,647 +local_padding,648 +local_use,649 +longitude,650 +longitudeFirstInDegrees,651 +longitudeLastInDegrees,652 +longitudeOfCenterPoint,653 +longitudeOfCentralPointInClusterDomain,654 +longitudeOfFirstDiamondCenterLine,655 +longitudeOfFirstDiamondCenterLineInDegrees,656 +longitudeOfFirstGridPoint,657 +longitudeOfFirstGridPointInDegrees,658 +longitudeOfIcosahedronPole,659 +longitudeOfLastGridPoint,660 +longitudeOfLastGridPointInDegrees,661 +longitudeOfNorthWestCornerOfArea,662 +longitudeOfSouthEastCornerOfArea,663 +longitudeOfSouthernPole,664 +longitudeOfSouthernPoleInDegrees,665 +longitudeOfStretchingPole,666 +longitudeOfStretchingPoleInDegrees,667 +longitudeOfSubSatellitePoint,668 +longitudeOfSubSatellitePointInDegrees,669 +longitudeOfTangencyPoint,670 +longitudeOfThePoleOfStretching,671 +longitudeOfThePolePoint,672 +longitudeOfThePolePointInDegrees,673 +longitudeOfTheSouthernPoleOfProjection,674 +longitudes,675 +longitudinalDirectionGridLength,676 +lowerLimit,677 +lowerThreshold,678 +lowerThresholdValue,679 +mAngleMultiplier,680 +mBasicAngle,681 +mars,682 +marsClass,683 +marsDir,684 +marsDomain,685 +marsEndStep,686 +marsExpver,687 +marsForecastMonth,688 +marsGrid,689 +marsIdent,690 +marsKeywords,691 +marsKeywords1,692 +marsLatitude,693 +marsLevel,694 +marsLevelist,695 +marsLongitude,696 +marsModel,697 +marsParam,698 +marsQuantile,699 +marsRange,700 +marsStartStep,701 +marsStep,702 +marsStream,703 +marsType,704 +mars_labeling,705 +mask,706 +masterDir,707 +masterTableNumber,708 +masterTablesVersionNumber,709 +matrixBitmapsPresent,710 +matrixOfValues,711 +max,712 +maximum,713 +md5Headers,714 +md5Section1,715 +md5Section2,716 +md5Section3,717 +md5Section4,718 +md5Section5,719 +md5Section6,720 +md5Section7,721 +meaningOfVerticalCoordinate,722 +messageLength,723 +method,724 +methodNumber,725 +million,726 +min,727 +minimum,728 +minute,729 +minuteOfAnalysis,730 +minuteOfEndOfOverallTimeInterval,731 +minuteOfReference,732 +minutesAfterDataCutoff,733 +minutesAfterReferenceTimeOfDataCutoff,734 +missingDataFlag,735 +missingValue,736 +missingValueManagement,737 +mixedCoordinateDefinition,738 +mixedCoordinateFieldFlag,739 +model,740 +modelErrorType,741 +modelIdentifier,742 +month,743 +monthOfAnalysis,744 +monthOfEndOfOverallTimeInterval,745 +monthOfReference,746 +monthlyVerificationDate,747 +multiplicationFactorForLatLong,748 +mybits,749 +n,750 +n2,751 +n3,752 +name,753 +nameECMF,754 +nameOfFirstFixedSurface,755 +nameOfSecondFixedSurface,756 +names,757 +nd,758 +neitherPresent,759 +normAtFinalTime,760 +normAtInitialTime,761 +northLatitudeOfCluster,762 +northLatitudeOfDomainOfTubing,763 +northWestLatitudeOfLPOArea,764 +northWestLatitudeOfVerficationArea,765 +northWestLongitudeOfLPOArea,766 +northWestLongitudeOfVerficationArea,767 +northernLatitudeOfClusterDomain,768 +northernLatitudeOfDomain,769 +nt,770 +number,771 +numberInHorizontalCoordinates,772 +numberInMixedCoordinateDefinition,773 +numberInTheAuxiliaryArray,774 +numberInTheGridCoordinateList,775 +numberIncludedInAverage,776 +numberMissingFromAveragesOrAccumulations,777 +numberOfAnalysis,778 +numberOfBits,779 +numberOfBitsContainingEachPackedValue,780 +numberOfBytesInLocalDefinition,781 +numberOfBytesOfFreeFormatData,782 +numberOfBytesPerInteger,783 +numberOfCategories,784 +numberOfCharacters,785 +numberOfChars,786 +numberOfClusterHighResolution,787 +numberOfClusterLowResolution,788 +numberOfClusters,789 +numberOfCodedValues,790 +numberOfCoefficientsOrValuesUsedToSpecifyFirstDimensionCoordinateFunction,791 +numberOfCoefficientsOrValuesUsedToSpecifySecondDimensionCoordinateFunction,792 +numberOfColumns,793 +numberOfComponents,794 +numberOfContributingSpectralBands,795 +numberOfControlForecastTube,796 +numberOfCoordinatesValues,797 +numberOfDataBinsAlongRadials,798 +numberOfDataMatrices,799 +numberOfDataPoints,800 +numberOfDataSubsets,801 +numberOfDataValues,802 +numberOfDiamonds,803 +numberOfDirections,804 +numberOfEffectiveValues,805 +numberOfFloats,806 +numberOfForcasts,807 +numberOfForecastsInCluster,808 +numberOfForecastsInEnsemble,809 +numberOfForecastsInTheCluster,810 +numberOfForecastsInTube,811 +numberOfFrequencies,812 +numberOfGroups,813 +numberOfHorizontalPoints,814 +numberOfIntegers,815 +numberOfInts,816 +numberOfIterations,817 +numberOfLocalDefinitions,818 +numberOfLogicals,819 +numberOfMembersInCluster,820 +numberOfMissing,821 +numberOfMissingInStatisticalProcess,822 +numberOfMissingValues,823 +numberOfModels,824 +numberOfObservations,825 +numberOfOctectsForNumberOfPoints,826 +numberOfOctetsExtraDescriptors,827 +numberOfOctetsSPD,828 +numberOfOperationalForecastTube,829 +numberOfPackedValues,830 +numberOfParallelsBetweenAPoleAndTheEquator,831 +numberOfParametersUsedForClustering,832 +numberOfPoints,833 +numberOfPointsAlongAMeridian,834 +numberOfPointsAlongAParallel,835 +numberOfPointsAlongFirstAxis,836 +numberOfPointsAlongSecondAxis,837 +numberOfPointsAlongTheXAxis,838 +numberOfPointsAlongTheYAxis,839 +numberOfPointsAlongXAxis,840 +numberOfPointsAlongYAxis,841 +numberOfPointsUsed,842 +numberOfPressureLevelsUsedForClustering,843 +numberOfRadarSitesUsed,844 +numberOfRadials,845 +numberOfRemaininChars,846 +numberOfRepresentativeMember,847 +numberOfReservedBytes,848 +numberOfRows,849 +numberOfSecondOrderPackedValues,850 +numberOfSection,851 +numberOfSingularVectorsComputed,852 +numberOfSingularVectorsEvolved,853 +numberOfStepsUsedForClustering,854 +numberOfTimeRange,855 +numberOfTimeSteps,856 +numberOfUnusedBitsAtEndOfSection3,857 +numberOfValues,858 +numberOfVerticalCoordinateValues,859 +numberOfVerticalPoints,860 +numberingOrderOfDiamonds,861 +observationDiagnostic,862 +observationGeneratingProcessIdentifier,863 +observationType,864 +obstype,865 +oceanAtmosphereCoupling,866 +oceanStream,867 +octetAtWichPackedDataBegins,868 +offset,869 +offsetAfterBitmap,870 +offsetAfterCentreLocalSection,871 +offsetAfterData,872 +offsetAfterLocalSection,873 +offsetAfterPadding,874 +offsetBBitmap,875 +offsetBSection5,876 +offsetBSection6,877 +offsetBeforeBitmap,878 +offsetBeforeData,879 +offsetBeforePL,880 +offsetBeforePV,881 +offsetFreeFormData,882 +offsetFromOriginToInnerBound,883 +offsetFromReferenceOfFirstTime,884 +offsetICEFieldsUsed,885 +offsetSection0,886 +offsetSection1,887 +offsetSection2,888 +offsetSection3,889 +offsetSection4,890 +offsetSection5,891 +offsetSection6,892 +offsetSection7,893 +offsetSection8,894 +offsetValuesBy,895 +one,896 +oneConstant,897 +oneMillionConstant,898 +oneThousand,899 +oper,900 +operStream,901 +operatingMode,902 +operationalForecastCluster,903 +optimisationTime,904 +optionalData,905 +opttime,906 +orderOfSPD,907 +orderOfSpatialDifferencing,908 +orientationOfTheGrid,909 +orientationOfTheGridInDegrees,910 +origin,911 +originalParameterNumber,912 +originalParameterTableNumber,913 +originalSubCentreIdentifier,914 +originatingCentre,915 +originatingCentreOfAnalysis,916 +originatingCentrer,917 +originatingSubCentreSubCenter,918 +packedValues,919 +packingError,920 +packingType,921 +padding,922 +padding_grid0_1,923 +padding_grid1_1,924 +padding_grid1_2,925 +padding_grid3_1,926 +padding_grid4_1,927 +padding_grid50_1,928 +padding_grid5_1,929 +padding_grid90_1,930 +padding_loc10_1,931 +padding_loc13_1,932 +padding_loc13_2,933 +padding_loc13_3,934 +padding_loc13_4,935 +padding_loc14_1,936 +padding_loc14_2,937 +padding_loc15_1,938 +padding_loc16_1,939 +padding_loc17_2,940 +padding_loc18_1,941 +padding_loc18_2,942 +padding_loc190_1,943 +padding_loc191_1,944 +padding_loc191_2,945 +padding_loc191_3,946 +padding_loc192_1,947 +padding_loc19_2,948 +padding_loc20_1,949 +padding_loc21_1,950 +padding_loc23_1,951 +padding_loc244_1,952 +padding_loc244_2,953 +padding_loc244_3,954 +padding_loc245_1,955 +padding_loc245_2,956 +padding_loc26_1,957 +padding_loc27_1,958 +padding_loc27_2,959 +padding_loc28_1,960 +padding_loc29_1,961 +padding_loc29_2,962 +padding_loc29_3,963 +padding_loc2_1,964 +padding_loc2_2,965 +padding_loc30_1,966 +padding_loc30_2,967 +padding_loc3_1,968 +padding_loc4_2,969 +padding_loc50_1,970 +padding_loc5_1,971 +padding_loc6_1,972 +padding_loc7_1,973 +padding_loc9_1,974 +padding_loc9_2,975 +padding_local11_1,976 +padding_local1_1,977 +padding_local1_31,978 +padding_local_35,979 +padding_local_7_1,980 +padding_sec1_loc,981 +padding_sec2_1,982 +padding_sec2_2,983 +padding_sec2_3,984 +padding_sec3_1,985 +padding_sec4_1,986 +param,987 +paramId,988 +paramIdECMF,989 +parameter,990 +parameterCategory,991 +parameterCode,992 +parameterIndicator,993 +parameterName,994 +parameterNumber,995 +parameterUnits,996 +parameters,997 +parametersVersion,998 +patch_precip_fp,999 +pentagonalResolutionParameterJ,1000 +pentagonalResolutionParameterK,1001 +pentagonalResolutionParameterM,1002 +percentileValue,1003 +periodOfTime,1004 +periodOfTimeIntervals,1005 +perturbationNumber,1006 +perturbedType,1007 +phase,1008 +physicalFlag1,1009 +physicalFlag2,1010 +physicalMeaningOfVerticalCoordinate,1011 +pl,1012 +platform,1013 +plusOneinOrdersOfSPD,1014 +points,1015 +postAuxiliary,1016 +postAuxiliaryArrayPresent,1017 +powerOfTenUsedToScaleClimateWeight,1018 +preBitmapValues,1019 +preProcessing,1020 +preProcessingParameter,1021 +precision,1022 +precisionOfTheUnpackedSubset,1023 +predefined_grid,1024 +predefined_grid_values,1025 +present,1026 +pressureLevel,1027 +pressureUnits,1028 +primaryBitmap,1029 +primaryMissingValue,1030 +probContinous,1031 +probPoint,1032 +probProductDefinition,1033 +probabilityType,1034 +probabilityTypeName,1035 +process,1036 +product,1037 +productDefinition,1038 +productDefinitionTemplateNumber,1039 +productDefinitionTemplateNumberInternal,1040 +productIdentifier,1041 +productType,1042 +productionStatusOfProcessedData,1043 +projectionCenterFlag,1044 +projectionCentreFlag,1045 +pv,1046 +pvlLocation,1047 +qc,1048 +qualityControlIndicator,1049 +quantile,1050 +radialAngularSpacing,1051 +radius,1052 +radiusInMetres,1053 +radiusOfCentralCluster,1054 +radiusOfClusterDomain,1055 +radiusOfTheEarth,1056 +range,1057 +rangeBinSpacing,1058 +rdb_key,1059 +rdbtime,1060 +rdbtimeDay,1061 +rdbtimeHour,1062 +rdbtimeMinute,1063 +rdbtimeSecond,1064 +realPart,1065 +realPartOf00,1066 +rectime,1067 +rectimeDay,1068 +rectimeHour,1069 +rectimeMinute,1070 +rectimeSecond,1071 +reducedGrid,1072 +refdate,1073 +reference,1074 +referenceDate,1075 +referenceOfLengths,1076 +referenceOfWidths,1077 +referenceReflectivityForEchoTop,1078 +referenceStep,1079 +referenceValue,1080 +referenceValueError,1081 +reflectivityCalibrationConstant,1082 +reportType,1083 +representationMode,1084 +representationType,1085 +representativeMember,1086 +reserved,1087 +reserved1,1088 +reservedNeedNotBePresent,1089 +reservedOctet,1090 +resolutionAndComponentFlag,1091 +resolutionAndComponentFlags,1092 +resolutionAndComponentFlags1,1093 +resolutionAndComponentFlags2,1094 +resolutionAndComponentFlags3,1095 +resolutionAndComponentFlags4,1096 +resolutionAndComponentFlags6,1097 +resolutionAndComponentFlags7,1098 +resolutionAndComponentFlags8,1099 +roundedMarsLatitude,1100 +roundedMarsLevelist,1101 +roundedMarsLongitude,1102 +satelliteIdentifier,1103 +satelliteNumber,1104 +satelliteSeries,1105 +scaleFactorOfCentralWaveNumber,1106 +scaleFactorOfDistanceFromEnsembleMean,1107 +scaleFactorOfEarthMajorAxis,1108 +scaleFactorOfEarthMinorAxis,1109 +scaleFactorOfFirstFixedSurface,1110 +scaleFactorOfFirstSize,1111 +scaleFactorOfFirstWavelength,1112 +scaleFactorOfLowerLimit,1113 +scaleFactorOfMajorAxisOfOblateSpheroidEarth,1114 +scaleFactorOfMinorAxisOfOblateSpheroidEarth,1115 +scaleFactorOfRadiusOfSphericalEarth,1116 +scaleFactorOfSecondFixedSurface,1117 +scaleFactorOfSecondSize,1118 +scaleFactorOfSecondWavelength,1119 +scaleFactorOfStandardDeviation,1120 +scaleFactorOfStandardDeviationInTheCluster,1121 +scaleFactorOfUpperLimit,1122 +scaleValuesBy,1123 +scaledDirections,1124 +scaledFrequencies,1125 +scaledValueOfCentralWaveNumber,1126 +scaledValueOfDistanceFromEnsembleMean,1127 +scaledValueOfEarthMajorAxis,1128 +scaledValueOfEarthMinorAxis,1129 +scaledValueOfFirstFixedSurface,1130 +scaledValueOfFirstSize,1131 +scaledValueOfFirstWavelength,1132 +scaledValueOfLowerLimit,1133 +scaledValueOfMajorAxisOfOblateSpheroidEarth,1134 +scaledValueOfRadiusOfSphericalEarth,1135 +scaledValueOfSecondFixedSurface,1136 +scaledValueOfSecondSize,1137 +scaledValueOfSecondWavelength,1138 +scaledValueOfStandardDeviation,1139 +scaledValueOfStandardDeviationInTheCluster,1140 +scaledValueOfUpperLimit,1141 +scalingFactorForFrequencies,1142 +scanPosition,1143 +scanningMode,1144 +scanningMode4,1145 +scanningMode5,1146 +scanningMode6,1147 +scanningMode7,1148 +scanningMode8,1149 +scanningModeForOneDiamond,1150 +sd,1151 +second,1152 +secondDimension,1153 +secondDimensionCoordinateValueDefinition,1154 +secondDimensionPhysicalSignificance,1155 +secondLatitude,1156 +secondLatitudeInDegrees,1157 +secondOfEndOfOverallTimeInterval,1158 +secondOrderOfDifferentWidth,1159 +secondOrderValuesDifferentWidths,1160 +secondaryBitMap,1161 +secondaryBitmap,1162 +secondaryBitmapPresent,1163 +secondaryBitmaps,1164 +secondaryBitmapsCount,1165 +secondaryBitmapsSize,1166 +secondaryMissingValue,1167 +secondsOfAnalysis,1168 +secondsOfReference,1169 +section,1170 +section0Length,1171 +section0Pointer,1172 +section1,1173 +section1Flags,1174 +section1Length,1175 +section1Padding,1176 +section1Pointer,1177 +section2Length,1178 +section2Padding,1179 +section2Pointer,1180 +section2Present,1181 +section2Used,1182 +section3,1183 +section3Flags,1184 +section3Length,1185 +section3Padding,1186 +section3Pointer,1187 +section4,1188 +section4Length,1189 +section4Padding,1190 +section4Pointer,1191 +section5,1192 +section5Length,1193 +section5Pointer,1194 +section6,1195 +section6Length,1196 +section7,1197 +section7Length,1198 +section8,1199 +section8Length,1200 +section8Pointer,1201 +sectionLengthLimitForEnsembles,1202 +sectionLengthLimitForProbability,1203 +sectionNumber,1204 +sectionPosition,1205 +section_1,1206 +section_2,1207 +section_3,1208 +section_4,1209 +section_5,1210 +section_6,1211 +section_7,1212 +section_8,1213 +selectStepTemplateInstant,1214 +selectStepTemplateInterval,1215 +sensitiveAreaDomain,1216 +setBitsPerValue,1217 +setDecimalPrecision,1218 +setLocalDefinition,1219 +shapeOfTheEarth,1220 +shapeOfVerificationArea,1221 +shortName,1222 +shortNameECMF,1223 +short_name,1224 +significanceOfReferenceTime,1225 +siteElevation,1226 +siteId,1227 +siteLatitude,1228 +siteLongitude,1229 +sizeOfPostAuxiliaryArray,1230 +sizeOfPostAuxiliaryArrayPlusOne,1231 +skew,1232 +skewness,1233 +sourceOfGridDefinition,1234 +southEastLatitudeOfLPOArea,1235 +southEastLatitudeOfVerficationArea,1236 +southEastLongitudeOfLPOArea,1237 +southEastLongitudeOfVerficationArea,1238 +southLatitudeOfCluster,1239 +southLatitudeOfDomainOfTubing,1240 +southernLatitudeOfClusterDomain,1241 +southernLatitudeOfDomain,1242 +spaceUnitFlag,1243 +spacingOfBinsAlongRadials,1244 +spare,1245 +spare2,1246 +spatialProcessing,1247 +spatialSmoothingOfProduct,1248 +spectralDataRepresentationMode,1249 +spectralDataRepresentationType,1250 +spectralMode,1251 +spectralType,1252 +sphericalHarmonics,1253 +standardDeviation,1254 +standardParallel,1255 +standardParallelInMicrodegrees,1256 +startOfHeaders,1257 +startOfRange,1258 +startStep,1259 +startStepInHours,1260 +startTimeStep,1261 +statisticalProcess,1262 +statisticalProcessesList,1263 +statistics,1264 +step,1265 +stepForClustering,1266 +stepInHours,1267 +stepRange,1268 +stepRangeInHours,1269 +stepType,1270 +stepTypeInternal,1271 +stepUnits,1272 +stepZero,1273 +stream,1274 +streamOfAnalysis,1275 +stretchingFactor,1276 +stretchingFactorScaled,1277 +stuff,1278 +subCentre,1279 +subDefinitions,1280 +subLocalDefinition1,1281 +subLocalDefinition2,1282 +subLocalDefinitionLength,1283 +subLocalDefinitionNumber,1284 +subLocalDefinitions,1285 +subSetJ,1286 +subSetK,1287 +subSetM,1288 +subcentreOfAnalysis,1289 +subdivisionsOfBasicAngle,1290 +suiteName,1291 +swapScanningLat,1292 +swapScanningLon,1293 +swapScanningX,1294 +swapScanningY,1295 +system,1296 +systemNumber,1297 +table2Version,1298 +tableCode,1299 +tableReference,1300 +tablesVersion,1301 +targetCompressionRatio,1302 +thisExperimentVersionNumber,1303 +thisMarsClass,1304 +thisMarsStream,1305 +thisMarsType,1306 +thousand,1307 +three,1308 +thresholdIndicator,1309 +tiggeCentre,1310 +tiggeLAMName,1311 +tiggeLocalVersion,1312 +tiggeModel,1313 +tiggeSection,1314 +tigge_name,1315 +tigge_short_name,1316 +time,1317 +timeCoordinateDefinition,1318 +timeIncrement,1319 +timeIncrementBetweenSuccessiveFields,1320 +timeOfAnalysis,1321 +timeOfReference,1322 +timeRangeIndicator,1323 +timeRangeIndicatorFromStepRange,1324 +timeUnitFlag,1325 +topLevel,1326 +total,1327 +totalInitialConditions,1328 +totalLength,1329 +totalNumber,1330 +totalNumberOfClusters,1331 +totalNumberOfDirections,1332 +totalNumberOfForecastProbabilities,1333 +totalNumberOfFrequencies,1334 +totalNumberOfGridPoints,1335 +totalNumberOfIterations,1336 +totalNumberOfTubes,1337 +totalNumberOfdimensions,1338 +treatmentOfMissingData,1339 +trueLengthOfLastGroup,1340 +truncateDegrees,1341 +truncateLaplacian,1342 +tsectionNumber3,1343 +tsectionNumber4,1344 +tsectionNumber5,1345 +tubeDomain,1346 +tubeNumber,1347 +two,1348 +twoOrdersOfSPD,1349 +type,1350 +typeOfAnalysis,1351 +typeOfAuxiliaryInformation,1352 +typeOfCompressionUsed,1353 +typeOfEnsembleForecast,1354 +typeOfFirstFixedSurface,1355 +typeOfGeneratingProcess,1356 +typeOfGrid,1357 +typeOfHorizontalLine,1358 +typeOfIntervalForFirstAndSecondSize,1359 +typeOfIntervalForFirstAndSecondWavelength,1360 +typeOfLevel,1361 +typeOfOriginalFieldValues,1362 +typeOfPacking,1363 +typeOfPreProcessing,1364 +typeOfProcessedData,1365 +typeOfSSTFieldUsed,1366 +typeOfSecondFixedSurface,1367 +typeOfSizeInterval,1368 +typeOfStatisticalProcessing,1369 +typeOfTimeIncrement,1370 +typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing,1371 +typeOfWavelengthInterval,1372 +unitOfOffsetFromReferenceTime,1373 +unitOfTime,1374 +unitOfTimeIncrement,1375 +unitOfTimeRange,1376 +units,1377 +unitsBias,1378 +unitsDecimalScaleFactor,1379 +unitsECMF,1380 +unitsFactor,1381 +unitsOfFirstFixedSurface,1382 +unitsOfSecondFixedSurface,1383 +unknown,1384 +unpackedError,1385 +unpackedSubsetPrecision,1386 +unpackedValues,1387 +unsignedIntegers,1388 +unusedBitsInBitmap,1389 +updateSequenceNumber,1390 +upperLimit,1391 +upperThreshold,1392 +upperThresholdValue,1393 +uvRelativeToGrid,1394 +validityDate,1395 +validityTime,1396 +values,1397 +varno,1398 +verificationDate,1399 +verifyingMonth,1400 +versionNumberOfGribLocalTables,1401 +verticalCoordinate,1402 +verticalCoordinateDefinition,1403 +waveDomain,1404 +weightAppliedToClimateMonth1,1405 +westLongitudeOfCluster,1406 +westLongitudeOfDomainOfTubing,1407 +westernLongitudeOfClusterDomain,1408 +westernLongitudeOfDomain,1409 +widthOfFirstOrderValues,1410 +widthOfLengths,1411 +widthOfSPD,1412 +widthOfWidths,1413 +wrongPadding,1414 +xCoordinateOfOriginOfSectorImage,1415 +xCoordinateOfSubSatellitePoint,1416 +xDirectionGridLength,1417 +xDirectionGridLengthInMetres,1418 +xDirectionGridLengthInMillimetres,1419 +xFirst,1420 +xLast,1421 +yCoordinateOfOriginOfSectorImage,1422 +yCoordinateOfSubSatellitePoint,1423 +yDirectionGridLength,1424 +yDirectionGridLengthInMetres,1425 +yDirectionGridLengthInMillimetres,1426 +yFirst,1427 +yLast,1428 +year,1429 +yearOfAnalysis,1430 +yearOfCentury,1431 +yearOfEndOfOverallTimeInterval,1432 +yearOfReference,1433 +zero,1434 diff --git a/tests/lamb_az_eq_area.ref b/tests/lamb_az_eq_area.ref new file mode 100644 index 000000000..d1082d08c --- /dev/null +++ b/tests/lamb_az_eq_area.ref @@ -0,0 +1,101 @@ +Latitude, Longitude, Value + 67.575 326.506 2.0000000000e+00 + 67.601 326.601 2.0000000000e+00 + 67.626 326.696 2.0000000000e+00 + 67.652 326.791 2.0000000000e+00 + 67.677 326.887 2.0000000000e+00 + 67.702 326.982 2.0000000000e+00 + 67.728 327.078 2.0000000000e+00 + 67.753 327.175 2.0000000000e+00 + 67.778 327.271 2.0000000000e+00 + 67.803 327.367 2.0000000000e+00 + 67.539 326.580 2.0000000000e+00 + 67.565 326.675 2.0000000000e+00 + 67.590 326.770 2.0000000000e+00 + 67.616 326.865 2.0000000000e+00 + 67.641 326.961 2.0000000000e+00 + 67.666 327.057 2.0000000000e+00 + 67.692 327.152 2.0000000000e+00 + 67.717 327.249 2.0000000000e+00 + 67.742 327.345 2.0000000000e+00 + 67.767 327.441 2.0000000000e+00 + 67.504 326.654 2.0000000000e+00 + 67.529 326.749 2.0000000000e+00 + 67.555 326.844 2.0000000000e+00 + 67.580 326.939 2.0000000000e+00 + 67.605 327.035 2.0000000000e+00 + 67.630 327.130 2.0000000000e+00 + 67.656 327.226 2.0000000000e+00 + 67.681 327.322 2.0000000000e+00 + 67.706 327.418 2.0000000000e+00 + 67.731 327.515 2.0000000000e+00 + 67.468 326.728 2.0000000000e+00 + 67.493 326.823 2.0000000000e+00 + 67.519 326.918 2.0000000000e+00 + 67.544 327.013 2.0000000000e+00 + 67.569 327.108 2.0000000000e+00 + 67.595 327.204 2.0000000000e+00 + 67.620 327.300 2.0000000000e+00 + 67.645 327.396 2.0000000000e+00 + 67.670 327.492 2.0000000000e+00 + 67.695 327.588 2.0000000000e+00 + 67.432 326.802 2.0000000000e+00 + 67.458 326.896 2.0000000000e+00 + 67.483 326.991 2.0000000000e+00 + 67.508 327.087 2.0000000000e+00 + 67.533 327.182 2.0000000000e+00 + 67.559 327.277 2.0000000000e+00 + 67.584 327.373 2.0000000000e+00 + 67.609 327.469 2.0000000000e+00 + 67.634 327.565 2.0000000000e+00 + 67.659 327.661 2.0000000000e+00 + 67.396 326.875 2.0000000000e+00 + 67.422 326.970 2.0000000000e+00 + 67.447 327.065 2.0000000000e+00 + 67.472 327.160 2.0000000000e+00 + 67.497 327.255 2.0000000000e+00 + 67.523 327.350 2.0000000000e+00 + 67.548 327.446 2.0000000000e+00 + 67.573 327.542 2.0000000000e+00 + 67.598 327.638 2.0000000000e+00 + 67.623 327.734 2.0000000000e+00 + 67.361 326.948 2.0000000000e+00 + 67.386 327.043 2.0000000000e+00 + 67.411 327.138 2.0000000000e+00 + 67.436 327.233 2.0000000000e+00 + 67.461 327.328 2.0000000000e+00 + 67.487 327.423 2.0000000000e+00 + 67.512 327.519 2.0000000000e+00 + 67.537 327.615 2.0000000000e+00 + 67.562 327.711 2.0000000000e+00 + 67.586 327.807 2.0000000000e+00 + 67.325 327.021 2.0000000000e+00 + 67.350 327.116 2.0000000000e+00 + 67.375 327.210 2.0000000000e+00 + 67.400 327.305 2.0000000000e+00 + 67.425 327.401 2.0000000000e+00 + 67.450 327.496 2.0000000000e+00 + 67.475 327.592 2.0000000000e+00 + 67.500 327.687 2.0000000000e+00 + 67.525 327.783 2.0000000000e+00 + 67.550 327.879 2.0000000000e+00 + 67.289 327.094 2.0000000000e+00 + 67.314 327.188 2.0000000000e+00 + 67.339 327.283 2.0000000000e+00 + 67.364 327.378 2.0000000000e+00 + 67.389 327.473 2.0000000000e+00 + 67.414 327.568 2.0000000000e+00 + 67.439 327.664 2.0000000000e+00 + 67.464 327.760 2.0000000000e+00 + 67.489 327.855 2.0000000000e+00 + 67.514 327.951 2.0000000000e+00 + 67.253 327.166 2.0000000000e+00 + 67.278 327.261 2.0000000000e+00 + 67.303 327.355 2.0000000000e+00 + 67.328 327.450 2.0000000000e+00 + 67.353 327.545 2.0000000000e+00 + 67.378 327.641 2.0000000000e+00 + 67.403 327.736 2.0000000000e+00 + 67.428 327.832 2.0000000000e+00 + 67.453 327.927 2.0000000000e+00 + 67.478 328.023 2.0000000000e+00 diff --git a/tests/lamb_az_eq_area.sh b/tests/lamb_az_eq_area.sh new file mode 100755 index 000000000..1e0f8bb6e --- /dev/null +++ b/tests/lamb_az_eq_area.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + +. ./include.sh +#set -x + +GRIB_INFILE=${data_dir}/regular_gaussian_pressure_level_constant.grib2 +REF_FILE=lamb_az_eq_area.ref + +# Temporary files created for this test +FILTER_FILE=lamb_az_eq_area.filter +GRIB_OUTFILE=lamb_az_eq_area.grib2 +DATA_OUTFILE=lamb_data.txt +rm -f $FILTER_FILE $GRIB_OUTFILE $DATA_OUTFILE + +# Create a filter +cat > $FILTER_FILE<&2 + exit 1 +fi +# Now get the data from the newly created GRIB file +${tools_dir}grib_get_data $GRIB_OUTFILE > $DATA_OUTFILE + +# Compare output with reference. If the diff fails, script will immediately exit with status 1 +diff $DATA_OUTFILE $REF_FILE + +# Clean up +rm -f $FILTER_FILE $GRIB_OUTFILE $DATA_OUTFILE + diff --git a/tests/laplacian.c b/tests/laplacian.c new file mode 100644 index 000000000..95d53eaab --- /dev/null +++ b/tests/laplacian.c @@ -0,0 +1,287 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +#define flong int + +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) + +#define BUFF_SIZE 50000000 + +#ifdef HAVE_LIBEMOS +#if GRIB_TIMER +#define TEST_OK +#endif +#endif + +#ifdef TEST_OK + +extern void grsmkp_(flong*); +extern void grsrnd_(flong*); +extern void gribex_(flong*, flong*, flong*, double*, flong*, double*, flong*, double*, + flong*, char *, flong*, flong*, const char*, flong*,flong ); + +static int cgribex( + flong miss, + + flong ksec0[],flong ksec1[], + flong ksec2[],double rsec2[], + flong ksec3[],double rsec3[], + flong ksec4[],double rsec4[], + flong sec4len, + + char *buffer, + flong *buflen, + char *op) +{ + flong ret = 1; + flong in_bufsize = (*buflen) / sizeof(flong); + flong out_bufsize = in_bufsize; + flong round = 0; + + rsec3[1] = miss, + ksec3[1] = miss, + + grsrnd_(&round); /* no rounding !!! */ + + gribex_(ksec0, ksec1, ksec2, rsec2, ksec3, rsec3, ksec4, rsec4, + &sec4len, buffer, &in_bufsize, &out_bufsize, op, &ret,1 ); + + *buflen = out_bufsize * sizeof(flong); + + return ret; +} + +struct { int code; char *message; } gribex_errors[] = { + {201 ," An invalid coding/decoding option was requested.",}, + {202 ,"The number of bits per data value exceeds a word length.",}, + {203 ,"Missing data indicated and data field contains non-zero values.",}, + {204 ,"Number of bits per data value is invalid.",}, + {205 ,"Number of bits per data value is same as the number of bits per computer word.",}, + {301 ,"Error in encoding or decoding the letters GRIB.",}, + {302 ,"Error decoding the length of the GRIB message.",}, + {303 ,"Error encoding or decoding the GRIB edition number.",}, + {304 ,"Error decoding octets 22 and 23, experimental edition check.",}, + {305 ,"Input data is not GRIB or pseudo-GRIB.",}, + {401 ,"Error encoding or decoding the length of section 1.",}, + {402 ,"Error encoding or decoding the parameter version number.",}, + {403 ,"Error encoding or decoding six header fields in section 1, from 'identification of centre' to 'indicator of type of level'.",}, + {404 ,"Error encoding or decoding height, pressure, etc of levels.",}, + {405 ,"Error encoding or decoding six fields in section 1, from 'year of century' to 'indicator of unit of time range'.",}, + {406 ,"Error encoding or decoding period of time.",}, + {407 ,"Error encoding or decoding time range indicator.",}, + {408 ,"Error encoding or decoding number averaged.",}, + {409 ,"Error encoding or decoding number missing from averages etc.",}, + {410 ,"Error encoding or decoding century of data or reserved field.",}, + {411 ,"Error encoding or decoding units decimal scale factor.",}, + {412 ,"Error encoding or decoding ECMWF local data.",}, + {413 ,"Grib edition not handled.",}, + {499 ,"Error found when checking values for section 1 against expected valid GRIB values.",}, + {501 ,"Error encoding or decoding length of section 2.",}, + {502 ,"Error encoding or decoding number of vertical coordinate parameters.",}, + {503 ,"Error encoding or decoding location of list of vertical coordinate parameters or list of numbers of points.",}, + {504 ,"Error encoding or decoding data representation type.",}, + {505 ,"Error encoding or decoding number of points aflong a parallel or meridian.",}, + {505 ,"Error encoding or decoding number of points aflong a parallel or meridian.",}, + {506 ,"Error encoding or decoding latitude or flongitude of the first grid point.",}, + {507 ,"Error encoding or decoding the components flag.",}, + {508 ,"Error encoding or decoding latitude or flongitude of the last grid point.",}, + {509 ,"Error encoding or decoding the i direction increment.",}, + {510 ,"Error encoding or decoding the number of parallels between the pole and the Equator.",}, + {511 ,"Error encoding or decoding scanning mode flags.",}, + {513 ,"Error encoding or decoding the j direction increment.",}, + {514 ,"Error encoding or decoding J,K,M pentagonal resolution parameters.",}, + {515 ,"Error encoding or decoding representation type or mode.",}, + {517 ,"Error encoding or decoding latitude or flongitude of southern pole.",}, + {518 ,"Error encoding or decoding angle of rotation.",}, + {519 ,"Error encoding or decoding latitude or flongitude of pole of stretching.",}, + {520 ,"Error encoding or decoding stretching factor.",}, + {521 ,"Error encoding or decoding vertical coordinate parameters.",}, + {522 ,"Error encoding or decoding list of numbers of points.",}, + {523 ,"Error encoding or decoding number of points aflong X or Y axis.",}, + {524 ,"Error encoding or decoding X or Y axis grid lengths.",}, + {525 ,"Error encoding or decoding the projection centre flag.",}, + {526 ,"Error encoding or decoding the latitude or flongitude of sub-satellite point.",}, + {527 ,"Error encoding or decoding the diameter of the Earth in X or Y direction.",}, + {528 ,"Error encoding or decoding the X or Y coordinate of the sub-satellite point.",}, + {529 ,"Error encoding or decoding the orientation of the grid or camera angle.",}, + {530 ,"Error encoding or decoding the X or Y coordinate of the origin of sector.",}, + {531 ,"Error inserting/extracting Latin1 or Latin2 of secants points.",}, + {532 ,"Error inserting/extracting latitude/flongitude of southern pole.",}, + {540 ,"Error encoding gaussian grid section 2.",}, + {541 ,"Error decoding gaussian grid section 2.",}, + {542 ,"Error encoding lat/flong grid section 2.",}, + {543 ,"Error decoding lat/flong grid section .",}, + {544 ,"Error encoding spectral section 2.",}, + {545 ,"Error decoding spectral section 2.",}, + {546 ,"Error encoding space view section 2, or error encoding ECMWF ocean section 2.",}, + {547 ,"Error decoding space view section 2, or error decoding ECMWF ocean section 2.",}, + {598 ,"Representation type not handled.",}, + {598 ,"Representation type not handled.",}, + {599 ,"Error found when checking values for section 2 against expected valid GRIB values.",}, + {601 ,"Error encoding or decoding length of section 3.",}, + {602 ,"Error encoding or decoding the number of unused bits at the end of section 3.",}, + {603 ,"Error encoding or decoding the bitmap reference table.",}, + {604 ,"Error encoding or decoding the primary bitmap.",}, + {605 ,"Unable to convert quasi-regular (reduced) gaussian grid with a bitmap.",}, + {699 ,"Error found when checking values for section 3 against expected valid GRIB values.",}, + {701 ,"Error encoding or decoding the length of section 4.",}, + {703 ,"Second-order packing implies additional flags.",}, + {704 ,"Function A or B invalid for second-order packed field (grid-point).",}, + {705 ,"Only simple packing handled for grid data.",}, + {706 ,"Error in decoding the section 4 flag field.",}, + {707 ,"Error encoding or decoding the field scale factor.",}, + {708 ,"Error encoding or decoding the field reference value.",}, + {709 ,"Error encoding or decoding the number of bits per data value.",}, + {710 ,"Output array too small.",}, + {711 ,"Error encoding or decoding a REAL coefficient.",}, + {712 ,"Error encoding or decoding data values.",}, + {713 ,"Error encoding or decoding the 'flag and unused bits' field.",}, + {714 ,"Decoding option is 'X' and number of values is illegal.",}, + {715 ,"Decoding option is 'X' and scanning mode is not north to south and west to east.",}, + {716 ,"Decoding option is 'X' and field is not a gaussian or latitude/flongitude grid.",}, + {717 ,"Decoding option is 'X' and a bitmap is encountered.",}, + {720 ,"Error encoding or decoding the octet number at which packed data begins.",}, + {721 ,"Error encoding or decoding the 'extended flag' field.",}, + {722 ,"Error encoding or decoding the first or second dimension of a matrix.",}, + {723 ,"Error encoding or decoding six fields, from first dimension coordinate value onwards.",}, + {724 ,"Error encoding or decoding first or second dimension coefficients.",}, + {725 ,"Error encoding a secondary bitmap.",}, + {726 ,"Output array is not big enough to allow expansion using bitmap(s), or constant (0-bit) field without section 2 not supported.",}, + {727 ,"Invalid predefined bitmap number given, or constant (0-bit) spectral field not supported.",}, + {728 ,"Open of predefined bitmap failed, or constant (0-bit) field function G or B not supported.",}, + {729 ,"Problem reading a predefined bitmap size, or output array is not big enough to allow expansion using bitmaps.",}, + {730 ,"Problem allocating memory for a predefined bitmap.",}, + {731 ,"Problem reading the number of non-missing points in a predefined bitmap.",}, + {732 ,"Problem reading a predefined bitmap.",}, + {733 ,"Problem closing a predefined bitmap file.",}, + {734 ,"Error inserting padding zeroes at end of section 4.",}, + {796 ,"Error extracting pointer to packed data.",}, + {797 ,"Error extracting sub-set truncation or constant (0-bit) field function G or B not supported.",}, + {798 ,"Function is X but no section 2 included.",}, + {799 ,"Error found when checking values for section 4 against expected valid GRIB values.",}, + {800 ,"Error encoding or decoding the 7777 group.",}, + {801 ,"Error inserting or extracting the 7777 group.",}, + {802 ,"Error encoding or decoding the length of the GRIB message.",}, + {805 ,"End of message 7777 group not found.",}, + {806 ,"Error in decoding a primary or secondary bitmap.",}, + {807 ,"Inconsistent values specified for complex packing in KSEC2(6) and KSEC4(4).",}, + {808 ,"Error converting quasi-regular (reduced) gaussian grid to regular.",}, + {809 ,"Error padding unused part of GRIB to zero.",}, + {810 ,"Error inserting dummy zero, or error padding GRIB to multiple of 120.",}, + {811 ,"Unable to handle secondary bitmaps for J option.",}, +}; +void gribex_check(int err) { + int i=0; + if(err > 0) { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + exit(err); + } +} + +#define ISECTION_0 2 +#define ISECTION_1 1024 /* beware of for ocean data */ +#define ISECTION_2 3000 +#define ISECTION_3 2 +#define ISECTION_4 512 + +#define RSECTION_2 512 +#define RSECTION_3 2 +#define RSECTION_4 1 + +#define STRMAXLEN 300 + +int main(int argc, char* argv[]) { + grib_handle *h=NULL; + grib_context* c=NULL; + FILE* fin=NULL; + double *values=NULL; + char buffer[BUFF_SIZE]={0,}; + char buf[BUFF_SIZE]={0,}; + size_t length; + int sec4len; + flong ksec0[ISECTION_0]; + flong ksec1[ISECTION_1]; + flong ksec2[ISECTION_2]; + flong ksec3[ISECTION_3]; + flong ksec4[ISECTION_4]; + flong miss=0; + const void *msg; + flong gribex_msg_len=0; + double rsec2[RSECTION_2]; + double rsec3[RSECTION_3]; + size_t nvalues=0; + double* gvalues; + FILE* fout; + int one=1; + + char finname[]="sh.grib"; + + fin = fopen(finname,"r"); + if(!fin) {perror(finname);exit(1);} + + c=grib_context_get_default(); + + length=BUFF_SIZE; + GRIB_CHECK(grib_read_any_from_file(c,fin,buffer,&length),0); + fclose(fin); + + h=grib_handle_new_from_message_copy(c,buffer,length); + + GRIB_CHECK(grib_get_size(h,"values",&nvalues),0); + values=(double*)grib_context_malloc_clear(c,sizeof(double)*nvalues); + gvalues=(double*)grib_context_malloc_clear(c,sizeof(double)*nvalues); + if (!values) { printf("%s: memory allocation error\n",argv[0]); exit(1); } + if (!gvalues) { printf("%s: memory allocation error\n",argv[0]); exit(1); } + + GRIB_CHECK(grib_get_double_array(h,"values",values,&nvalues),0); + GRIB_CHECK(grib_set_long(h,"computeLaplacianOperator",1),0); + GRIB_CHECK(grib_set_double_array(h,"values",values,nvalues),0); + grib_write_message(h,"out_grib_api.grib","w"); + + sec4len=nvalues+100000; + + /* decode with gribex*/ + msg=(char*)buffer; + gribex_msg_len=length; + sec4len=nvalues+100000; + gribex_check(cgribex( miss, ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, + ksec4,gvalues,sec4len, (char*)msg,&gribex_msg_len,"D")); + + /* encode values with gribex*/ + gribex_msg_len=BUFF_SIZE; + grsmkp_(&one); + gribex_check(cgribex( miss, ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, + ksec4,gvalues,nvalues, buf,&gribex_msg_len,"C")); + + + fout=fopen("out_gribex.grib","w"); + if (!fout) {perror("out_gribex.grib");exit(1);} + if (fwrite(buf,1,gribex_msg_len,fout)!=gribex_msg_len) { + perror("out_gribex.grib"); exit(1); + } + fclose(fout); + + return 0; +} +#else + +int main(int argc,char* argv[]) { +return 0; +} + +#endif + diff --git a/tests/largefile.c b/tests/largefile.c new file mode 100644 index 000000000..091ec5717 --- /dev/null +++ b/tests/largefile.c @@ -0,0 +1,71 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "config.h" +/* #include */ +/* #include */ +/* #include */ +/* #include */ +/* #include */ +/* #include */ +#include "grib_api_internal.h" +#include + +void usage(char* prog) { + printf("usage: %s filename\n",prog); + exit(1); +} + +int main(int argc,char* argv[]) { + off_t offsetin=0,offsetout=0; + off_t size=100000000; + size_t rsizein=10,rsizeout=0; + double doff=0; + FILE* f=0; + char str[10]; + int i; + + if (argc != 2) usage(argv[0]); + + printf("sizeof(off_t)=%d sizeof(long)=%d\n",sizeof(off_t),sizeof(long)); + + f=fopen(argv[1],"r"); + if (!f) { + printf("%s\n",strerror(errno)); + exit(errno); + } + + offsetin=size; + for (i=0;i<100000;i++) { + printf("i=%d ",i); + if (fseeko(f,offsetin,SEEK_SET) ) { + printf("fseeko error\n"); + printf("- %d - %s\n",errno,strerror(errno)); + exit(1); + } + rsizeout=fread(str,1,rsizein,f); + if (rsizeout != rsizein ) { + printf("rsizein=%d rsizeout=%d\n",rsizein,rsizeout); + printf("end of file\n"); + exit(1); + } + offsetout=ftello(f); + doff=(double)offsetout; + printf("%20.0f \n",doff); + if (offsetout != offsetin+rsizeout) { + printf("offset error: offsetout=%jd offsetin=%jd\n",offsetout,offsetin+rsizeout); + exit(1); + } + offsetin=offsetout+size; + } + + fclose(f); + return 0; +} diff --git a/tests/level.sh b/tests/level.sh new file mode 100755 index 000000000..5ed0b9a95 --- /dev/null +++ b/tests/level.sh @@ -0,0 +1,63 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh +#set -x + +outfile=out.grib + +file=${data_dir}/regular_gaussian_pressure_level.grib1 + +cat >good<level.filter< test.dump +diff good test.dump + +rm -f level.filter good test.dump + + diff --git a/tests/list.sh b/tests/list.sh new file mode 100755 index 000000000..21cb415aa --- /dev/null +++ b/tests/list.sh @@ -0,0 +1,53 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.sh + +cat > list.filter <list.filter<list.ref<> tmp$$ +done +p4 edit keys +cat >keys <> keys +#cat tmp$$ | sort | uniq >> keys +rm -f tmp$$ + diff --git a/tests/local.sh b/tests/local.sh new file mode 100755 index 000000000..deb83b5b8 --- /dev/null +++ b/tests/local.sh @@ -0,0 +1,95 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh +#set -x + +REDIRECT=/dev/null + +cd ${data_dir} +rm -f local.log | true + +# GRIB2 definitions for chemicals and aerosols for MACC +sample_g2=$GRIB_SAMPLES_PATH/GRIB2.tmpl + +#${tools_dir}grib_set -s paramId=210005 $sample_g2 macc.grb2 +#result=`${tools_dir}grib_get -p discipline,parameterCategory,parameterNumber,shortName,units,aerosolType,name macc.grb2` +#[ "$result" = '0 20 2 aermr05 kg kg**-1 62001 Dust Aerosol (0.55 - 0.9 um) Mixing Ratio' ] +#[ `${tools_dir}grib_get -p productDefinitionTemplateNumber macc.grb2` = '44' ] + +#${tools_dir}grib_set -s paramId=210001 $sample_g2 macc.grb2 +#result=`${tools_dir}grib_get -p discipline,parameterCategory,parameterNumber,shortName,units,aerosolType,name macc.grb2` +#[ "$result" = '0 20 2 aermr01 kg kg**-1 62008 Sea Salt Aerosol (0.03 - 0.5 um) Mixing Ratio' ] + +#${tools_dir}grib_set -s paramId=210007 $sample_g2 macc.grb2 +#result=`${tools_dir}grib_get -p discipline,parameterCategory,parameterNumber,shortName,typeOfSizeInterval,aerosolType,name macc.grb2` +#[ "$result" = '0 20 2 aermr07 255 62016 Hydrophobic Organic Matter Aerosol Mixing Ratio' ] + +#${tools_dir}grib_set -s paramId=210061 $sample_g2 macc.grb2 +#result=`${tools_dir}grib_get -p discipline,parameterCategory,parameterNumber,shortName,productDefinitionTemplateNumber,constituentType,name macc.grb2` +#[ "$result" = '0 20 2 co2 40 3 Carbon Dioxide' ] + +#${tools_dir}grib_set -s paramId=210062 $sample_g2 macc.grb2 +#result=`${tools_dir}grib_get -p discipline,parameterCategory,parameterNumber,shortName,productDefinitionTemplateNumber,constituentType,name macc.grb2` +#[ "$result" = '0 20 2 ch4 40 2 Methane' ] + +#rm -f macc.grb2 | true + + +${tools_dir}grib_set -s edition=2,setLocalDefinition=1 reduced_gaussian_model_level.grib1 loc.grib2 +${tools_dir}grib_set -s setLocalDefinition=1 reduced_gaussian_model_level.grib1 loc.grib1 + +#conversion 1->2 +for localDefinitionNumber in 1 15 26 30 +do + ${tools_dir}grib_set -s localDefinitionNumber=$localDefinitionNumber,perturbationNumber=2,numberOfForecastsInEnsemble=50 loc.grib1 eps.grib1 + ${tools_dir}grib_set -s edition=2 eps.grib1 eps.grib2 + + ${tools_dir}grib_get -p localDefinitionNumber,perturbationNumber,numberOfForecastsInEnsemble,productDefinitionTemplateNumber eps.grib2 >> local.log + ${tools_dir}grib_compare -e -b param eps.grib1 eps.grib2 + + ${tools_dir}grib_set -s localDefinitionNumber=$localDefinitionNumber,numberOfForecastsInEnsemble=0 loc.grib1 eps.grib1 + ${tools_dir}grib_set -s edition=2 eps.grib1 eps.grib2 + + ${tools_dir}grib_get -f -p localDefinitionNumber,perturbationNumber,productDefinitionTemplateNumber eps.grib2 >> local.log + ${tools_dir}grib_compare -e -b param eps.grib1 eps.grib2 +done + +#local -> local +for localStart in 1 7 9 20 25 26 30 +do + ${tools_dir}grib_set -s localDefinitionNumber=$localStart loc.grib1 loc1.grib1 + ${tools_dir}grib_set -s edition=2 loc1.grib1 loc1.grib2 + ${tools_dir}grib_get -p localDefinitionNumber loc1.grib1 >> local.log + ${tools_dir}grib_get -p localDefinitionNumber loc1.grib2 >> local.log + + for localEps in 1 15 26 30 + do + ${tools_dir}grib_set -s localDefinitionNumber=$localEps,eps=1,perturbationNumber=2,numberOfForecastsInEnsemble=50 loc1.grib2 eps.grib2 + ${tools_dir}grib_get -p localDefinitionNumber,perturbationNumber,numberOfForecastsInEnsemble,productDefinitionTemplateNumber eps.grib2 >> local.log + done +done + +#special types/streams +${tools_dir}grib_set -s localDefinitionNumber=1,numberOfForecastsInEnsemble=0 loc.grib1 loc1.grib1 +${tools_dir}grib_set -s edition=2 loc1.grib1 loc1.grib2 +${tools_dir}grib_get -f -p localDefinitionNumber,perturbationNumber loc1.grib2 >> local.log +${tools_dir}grib_set -s type=em loc1.grib2 eps.grib2 +${tools_dir}grib_get -p localDefinitionNumber,productDefinitionTemplateNumber,derivedForecast eps.grib2 >> local.log +${tools_dir}grib_set -s type=es loc1.grib2 eps.grib2 +${tools_dir}grib_get -p localDefinitionNumber,productDefinitionTemplateNumber,derivedForecast eps.grib2 >> local.log +${tools_dir}grib_set -s stream=enda loc1.grib2 eps.grib2 #2> $REDIRECT +${tools_dir}grib_get -p localDefinitionNumber,productDefinitionTemplateNumber eps.grib2 >> local.log + +diff local.log local.good.log + +rm -f local.log loc.grib1 loc.grib2 loc1.grib1 loc1.grib2 eps.grib1 eps.grib2 + diff --git a/tests/ls.sh b/tests/ls.sh new file mode 100755 index 000000000..449e54b36 --- /dev/null +++ b/tests/ls.sh @@ -0,0 +1,76 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +rm -f log | true +workdir=`pwd` + +cd ${data_dir} +infile=regular_gaussian_model_level.grib1 + +${tools_dir}grib_ls -P count $infile > log +${tools_dir}grib_ls -p count,step $infile >> log +${tools_dir}grib_ls $infile >> log +${tools_dir}grib_ls -l 0,0,1 $infile >> log +${tools_dir}grib_get -l 0,0,1 $infile >> log +${tools_dir}grib_get -p count,step $infile >> log +${tools_dir}grib_get -P count $infile >> log + +files=" reduced_gaussian_lsm.grib1 +reduced_gaussian_model_level.grib1 +reduced_gaussian_model_level.grib2 +reduced_gaussian_pressure_level.grib1 +reduced_gaussian_pressure_level.grib2 +reduced_gaussian_pressure_level_constant.grib1 +reduced_gaussian_pressure_level_constant.grib2 +reduced_gaussian_sub_area.grib1 +reduced_gaussian_sub_area.grib2 +reduced_gaussian_surface.grib1 +reduced_gaussian_surface.grib2 +reduced_latlon_surface.grib1 +reduced_latlon_surface.grib2 +regular_gaussian_model_level.grib1 +regular_gaussian_model_level.grib2 +regular_gaussian_pressure_level.grib1 +regular_gaussian_pressure_level.grib2 +regular_gaussian_pressure_level_constant.grib1 +regular_gaussian_pressure_level_constant.grib2 +regular_gaussian_surface.grib1 +regular_gaussian_surface.grib2 +regular_latlon_surface.grib1 +regular_latlon_surface.grib2 +" + +for file in $files +do + echo $file >> log + ${tools_dir}grib_ls -l 40,28 $file | grep index | awk '{print $4;}' >> log +done + +diff log ls.log +rm -f log + +# Test for bug GRIB-56 +${tools_dir}grib_set -s typeOfLevel=depthBelowLandLayer,topLevel=missing regular_latlon_surface.grib1 tmp_rlls.grib1 +${tools_dir}grib_ls -plevels tmp_rlls.grib1 | grep MISSING>/dev/null + +${tools_dir}grib_set -s typeOfLevel=depthBelowLandLayer,bottomLevel=missing regular_latlon_surface.grib1 tmp_rlls.grib1 +${tools_dir}grib_ls -plevels tmp_rlls.grib1 | grep MISSING>/dev/null +rm -f tmp_rlls.grib1 | true + +# GRIB-305. GRIB edition 1 file with one large message +if [ -f "sst_globus0083.grib" ]; then + ${tools_dir}grib_ls sst_globus0083.grib > /dev/null +fi + +cd $workdir + diff --git a/tests/make_hash.ksh b/tests/make_hash.ksh new file mode 100644 index 000000000..c922fa9f3 --- /dev/null +++ b/tests/make_hash.ksh @@ -0,0 +1,11 @@ +#!/usr/bin/ksh +set -x + +./list_all_keys.ksh + +p4 edit keys ../src/grib_hash_keys.c + +gperf -I -t -G -H hash_keys -N grib_keys_hash_get -m 3 keys > ../src/grib_hash_keys.c + +cat ../src/grib_itrie_keys.c >> ../src/grib_hash_keys.c + diff --git a/tests/mf.rules b/tests/mf.rules new file mode 100644 index 000000000..d0696ccea --- /dev/null +++ b/tests/mf.rules @@ -0,0 +1,125 @@ +# GRIB edition 2 +editionNumber = 2; + +# TIGGE prod = 4, test = 5 + +productionStatusOfProcessedData = 5; + +# JPEG-2000 packing +#typeOfPacking = "grid_jpeg"; +typeOfPacking = "grid_simple"; + +# Shape of the Earth +shapeOfTheEarth = 6; + + +typeOfGeneratingProcess = 4; # CF of PF +numberOfForecastsInEnsemble = 11; # 10 Members + 1 Control +#productDefinitionTemplateNumber = 1; + + +if( subCentre == 100 || subCentre == 0) +{ + # Control + typeOfProcessedData = 3; + typeOfEnsembleForecast = 1; # Low-res control forecast + + + number = 0; + +} + +if( subCentre != 100 && subCentre != 0) +{ + typeOfProcessedData = 4; +# typeOfEnsembleForecast = 2; # Negatively perturbed forecast + typeOfEnsembleForecast = 3; # Positively perturbed forecast + + number = subCentre - 100; +} + + +# typeOfEnsembleForecast = ?; + + +# Pressure level + +# Temperature +if( indicatorOfParameter == 11 && indicatorOfTypeOfLevel == 100) { productDefinitionTemplateNumber=1;tigge_short_name = 't'; } + +# Geopotential +if( indicatorOfParameter == 6 ) { productDefinitionTemplateNumber=1;tigge_short_name = 'gh'; } + +# U-component +if( indicatorOfParameter == 33 && indicatorOfTypeOfLevel == 100) { productDefinitionTemplateNumber=1;tigge_short_name = 'u'; } +if( indicatorOfParameter == 34 && indicatorOfTypeOfLevel == 100) { productDefinitionTemplateNumber=1;tigge_short_name = 'v'; } + +# Specific humidity +if( indicatorOfParameter == 51) { productDefinitionTemplateNumber=1;tigge_short_name = 'q'; } + + +# Single level +# Orography + +if( indicatorOfParameter == 8) { productDefinitionTemplateNumber=1;tigge_short_name = 'orog'; } + +# Wind +if( indicatorOfParameter == 33 && indicatorOfTypeOfLevel == 105) { productDefinitionTemplateNumber=1;tigge_short_name = '10u'; } +if( indicatorOfParameter == 34 && indicatorOfTypeOfLevel == 105) { productDefinitionTemplateNumber=1;tigge_short_name = '10v'; } + + +# Dew point +if( indicatorOfParameter == 17) { + productDefinitionTemplateNumber = 1; + tigge_short_name = '2d'; + typeOfFirstFixedSurface = 103; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 2; +} + +# 2Meter temp. +if( indicatorOfParameter == 11 && indicatorOfTypeOfLevel == 105) +{ + productDefinitionTemplateNumber = 1; + tigge_short_name = '2t'; + typeOfFirstFixedSurface = 103; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 2; +} + +# Cape +if( indicatorOfParameter == 160) { productDefinitionTemplateNumber=1;tigge_short_name = 'cape'; } + +# Mean sea level pressure +if( indicatorOfParameter == 2) { productDefinitionTemplateNumber=1;tigge_short_name = 'msl'; } + +# Potential temperature +if( indicatorOfParameter == 13) { productDefinitionTemplateNumber=1;tigge_short_name = 'pt'; } + +# Snow depth +if( indicatorOfParameter == 65) { productDefinitionTemplateNumber=1;tigge_short_name = 'sd'; } + +# Snow fall +if( indicatorOfParameter == 99) { + productDefinitionTemplateNumber = 11; + tigge_short_name = 'sf'; +} + + + +if(indicatorOfParameter == 11 && indicatorOfTypeOfLevel == 1) { productDefinitionTemplateNumber=1;tigge_short_name = 'skt'; } +if(indicatorOfParameter == 121) { productDefinitionTemplateNumber = 11;tigge_short_name = 'slhf'; } +if(indicatorOfParameter == 1) { productDefinitionTemplateNumber=1;tigge_short_name = 'sp'; } +if(indicatorOfParameter == 122) { productDefinitionTemplateNumber = 11;tigge_short_name = 'sshf'; } +if(indicatorOfParameter == 111) { productDefinitionTemplateNumber = 11;tigge_short_name = 'ssr'; } +if(indicatorOfParameter == 11 && indicatorOfTypeOfLevel == 111) { productDefinitionTemplateNumber=1;tigge_short_name = 'st'; } +if(indicatorOfParameter == 112) { productDefinitionTemplateNumber = 11;tigge_short_name = 'str'; } +if(indicatorOfParameter == 71) { productDefinitionTemplateNumber=1;tigge_short_name = 'tcc'; } +if(indicatorOfParameter == 61) { productDefinitionTemplateNumber = 11;tigge_short_name = 'tp'; } +if(indicatorOfParameter == 114) { productDefinitionTemplateNumber = 11;tigge_short_name = 'ttr'; } +if(indicatorOfParameter == 167) { productDefinitionTemplateNumber = 1;tigge_short_name = 'tcw'; } + +if( indicatorOfParameter == 33 && indicatorOfTypeOfLevel == 117) +{ scaleFactorOfFirstFixedSurface=6;scaledValueOfFirstFixedSurface=2;typeOfFirstFixedSurface=109;productDefinitionTemplateNumber=1;tigge_short_name = 'u'; } + +if( indicatorOfParameter == 34 && indicatorOfTypeOfLevel == 117) { scaleFactorOfFirstFixedSurface=6;scaledValueOfFirstFixedSurface=2;typeOfFirstFixedSurface=109;productDefinitionTemplateNumber=1;tigge_short_name = 'v'; } diff --git a/tests/migration_ml.sh b/tests/migration_ml.sh new file mode 100755 index 000000000..03a2dd36f --- /dev/null +++ b/tests/migration_ml.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +# --- setup the environment +. ./include.sh + +src=${data_dir}/essential_ml/grib1_ecmwf +dest=${data_dir}/essential_ml/grib2_ecmwf + +if [ ! -d $src ]; then + echo "Data source folder does not exist: '$src'" + exit 1 +fi + +mkdir -p $dest + +# --- convert to grib 2 + +for file in `ls $src/*.grib`; do + f=`basename $file` + ${tools_dir}/grib_set -s edition=2 $file $dest/$f + + if [ ! $? == 0 ]; then + echo "FAIL" + exit 1 + fi +done + +# --- compare the results + +set +e # don't fail on error for now +for file in `ls $src/*.grib`; do + name=`basename $file` + echo "Comparing $name" + ${tools_dir}/grib_compare -c mars:n,name,shortName $src/$name $dest/$name +done +set -e diff --git a/tests/missing.sh b/tests/missing.sh new file mode 100755 index 000000000..26beb38d8 --- /dev/null +++ b/tests/missing.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +infile="${data_dir}/missing.grib2" +outfile="${data_dir}/missing_new.grib2" + +scaleFactorOfSecondFixedSurface=`${tools_dir}grib_get -w count=1 -p scaleFactorOfSecondFixedSurface $infile` +[ "$scaleFactorOfSecondFixedSurface" = "0" ] + +scaledValueOfSecondFixedSurface=`${tools_dir}grib_get -w count=1 -p scaledValueOfSecondFixedSurface $infile` +[ "$scaledValueOfSecondFixedSurface" = "0" ] + +${tools_dir}grib_set -s scaleFactorOfSecondFixedSurface=missing,scaledValueOfSecondFixedSurface=missing $infile $outfile + +scaleFactorOfSecondFixedSurface=`${tools_dir}grib_get -w count=1 -p scaleFactorOfSecondFixedSurface $outfile` +[ "$scaleFactorOfSecondFixedSurface" = "MISSING" ] + +scaledValueOfSecondFixedSurface=`${tools_dir}grib_get -w count=1 -p scaledValueOfSecondFixedSurface $outfile` +[ "$scaledValueOfSecondFixedSurface" = "MISSING" ] + +set +e + +${tools_dir}grib_set -s centre=missing $infile $outfile 2> $REDIRECT > $REDIRECT + +[ $? -ne 0 ] + +rm -f $outfile + diff --git a/tests/multi.sh b/tests/multi.sh new file mode 100755 index 000000000..a604327dd --- /dev/null +++ b/tests/multi.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +if [ ! -f ${data_dir}/multi.grib2 ] +then + echo no data to test + exit 0 +fi + +tmpdata=grib_api.grib + +rm -f $tmpdata || true + +parameterNumber=`${tools_dir}grib_get -p parameterNumber -w parameterCategory=2,parameterNumber=3 ${data_dir}/multi.grib2` +if [ -z "$parameterNumber" ] +then + echo ---------- grib_get failure + exit 1 +fi + +${tools_dir}grib_copy -w parameterCategory=2,parameterNumber=3 ${data_dir}/multi.grib2 $tmpdata.1 +${tools_dir}grib_cmp ${data_dir}/v.grib2 $tmpdata.1 + +cat > $tmpdata.rules < +#include +#include + +void usage(char* prog) {printf("usage: %s [-m] file.grib\n",prog);exit(1);} + +int main(int argc,char* argv[]) { + struct stat finfo; + char shortName[20]={0,}; + size_t len=20; + grib_handle* h=NULL; + size_t fsize; + unsigned char* data=NULL; + unsigned char* p=NULL; + void* pdata=NULL; + int error=0; + int count=0; + char* filename=NULL; + FILE* f=NULL; + long level=0; + grib_context* c=grib_context_get_default(); + + if (argc==3 && !strcmp(argv[1],"-m")) { + grib_multi_support_on(0); + filename=argv[2]; + } + else if (argc==2) filename=argv[1]; + else usage(argv[0]); + + f=fopen(filename,"r"); + if (!f) {perror(filename);exit(1);} + + fstat(fileno((FILE*)f),&finfo); + fsize=finfo.st_size; + + data=(unsigned char*)malloc(fsize); + p=data; + + if (!data) { + fprintf(stderr,"unable to allocate %ld bytes\n",(long)fsize); + exit(1); + } + + + if( fread(data, 1, fsize, f) != fsize) { + perror(filename); + exit(1); + } + fclose(f); + pdata=&data; + + while ((h=grib_handle_new_from_multi_message(c,pdata,&fsize,&error))!=NULL) { + count++; + len=20; + GRIB_CHECK(grib_get_string(h,"shortName",shortName,&len),"shortName"); + GRIB_CHECK(grib_get_long(h,"level",&level),"level"); + printf("%d %s %ld\n",count,shortName,level); + grib_handle_delete(h); + } + + free(p); + + return 0; +} diff --git a/tests/multi_from_message.sh b/tests/multi_from_message.sh new file mode 100755 index 000000000..3677c0bfb --- /dev/null +++ b/tests/multi_from_message.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +out1=${data_dir}/multi1.out +out2=${data_dir}/multi2.out + +for infile in ${data_dir}/multi.grib2 ${data_dir}/reduced_gaussian_model_level.grib1 +do + +if [ ! -f ${infile} ] +then + echo no data to test + exit 0 +fi + +${test_dir}/multi_from_message -m $infile > $out1 +${tools_dir}grib_get -p count,shortName,level $infile > $out2 + +diff $out1 $out2 + +${test_dir}/multi_from_message $infile > $out1 +${tools_dir}grib_get -M -p count,shortName,level $infile > $out2 + +diff $out1 $out2 + +rm -f $out1 $out2 | true + +done diff --git a/tests/pack_unpack.c b/tests/pack_unpack.c new file mode 100644 index 000000000..daa9a2887 --- /dev/null +++ b/tests/pack_unpack.c @@ -0,0 +1,276 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +#define flong int + +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) + +#ifdef HAVE_LIBEMOS + +extern void grsrnd_(flong*); +extern void gribex_(flong*, flong*, flong*, double*, flong*, double*, flong*, double*, + flong*, char *, flong*, flong*, const char*, flong*,flong ); + +static int cgribex( + flong miss, + + flong ksec0[],flong ksec1[], + flong ksec2[],double rsec2[], + flong ksec3[],double rsec3[], + flong ksec4[],double rsec4[], + flong sec4len, + + char *buffer, + flong *buflen, + char *op) +{ + flong ret = 1; + flong in_bufsize = (*buflen) / sizeof(flong); + flong out_bufsize = in_bufsize; + flong round = 0; + + rsec3[1] = miss, + ksec3[1] = miss, + + grsrnd_(&round); /* no rounding !!! */ + + gribex_(ksec0, ksec1, ksec2, rsec2, ksec3, rsec3, ksec4, rsec4, + &sec4len, buffer, &in_bufsize, &out_bufsize, op, &ret,1 ); + + *buflen = out_bufsize * sizeof(flong); + + return ret; +} + +struct { int code; char *message; } gribex_errors[] = { + {201 ," An invalid coding/decoding option was requested.",}, + {202 ,"The number of bits per data value exceeds a word length.",}, + {203 ,"Missing data indicated and data field contains non-zero values.",}, + {204 ,"Number of bits per data value is invalid.",}, + {205 ,"Number of bits per data value is same as the number of bits per computer word.",}, + {301 ,"Error in encoding or decoding the letters GRIB.",}, + {302 ,"Error decoding the length of the GRIB message.",}, + {303 ,"Error encoding or decoding the GRIB edition number.",}, + {304 ,"Error decoding octets 22 and 23, experimental edition check.",}, + {305 ,"Input data is not GRIB or pseudo-GRIB.",}, + {401 ,"Error encoding or decoding the length of section 1.",}, + {402 ,"Error encoding or decoding the parameter version number.",}, + {403 ,"Error encoding or decoding six header fields in section 1, from 'identification of centre' to 'indicator of type of level'.",}, + {404 ,"Error encoding or decoding height, pressure, etc of levels.",}, + {405 ,"Error encoding or decoding six fields in section 1, from 'year of century' to 'indicator of unit of time range'.",}, + {406 ,"Error encoding or decoding period of time.",}, + {407 ,"Error encoding or decoding time range indicator.",}, + {408 ,"Error encoding or decoding number averaged.",}, + {409 ,"Error encoding or decoding number missing from averages etc.",}, + {410 ,"Error encoding or decoding century of data or reserved field.",}, + {411 ,"Error encoding or decoding units decimal scale factor.",}, + {412 ,"Error encoding or decoding ECMWF local data.",}, + {413 ,"Grib edition not handled.",}, + {499 ,"Error found when checking values for section 1 against expected valid GRIB values.",}, + {501 ,"Error encoding or decoding length of section 2.",}, + {502 ,"Error encoding or decoding number of vertical coordinate parameters.",}, + {503 ,"Error encoding or decoding location of list of vertical coordinate parameters or list of numbers of points.",}, + {504 ,"Error encoding or decoding data representation type.",}, + {505 ,"Error encoding or decoding number of points aflong a parallel or meridian.",}, + {505 ,"Error encoding or decoding number of points aflong a parallel or meridian.",}, + {506 ,"Error encoding or decoding latitude or flongitude of the first grid point.",}, + {507 ,"Error encoding or decoding the components flag.",}, + {508 ,"Error encoding or decoding latitude or flongitude of the last grid point.",}, + {509 ,"Error encoding or decoding the i direction increment.",}, + {510 ,"Error encoding or decoding the number of parallels between the pole and the Equator.",}, + {511 ,"Error encoding or decoding scanning mode flags.",}, + {513 ,"Error encoding or decoding the j direction increment.",}, + {514 ,"Error encoding or decoding J,K,M pentagonal resolution parameters.",}, + {515 ,"Error encoding or decoding representation type or mode.",}, + {517 ,"Error encoding or decoding latitude or flongitude of southern pole.",}, + {518 ,"Error encoding or decoding angle of rotation.",}, + {519 ,"Error encoding or decoding latitude or flongitude of pole of stretching.",}, + {520 ,"Error encoding or decoding stretching factor.",}, + {521 ,"Error encoding or decoding vertical coordinate parameters.",}, + {522 ,"Error encoding or decoding list of numbers of points.",}, + {523 ,"Error encoding or decoding number of points aflong X or Y axis.",}, + {524 ,"Error encoding or decoding X or Y axis grid lengths.",}, + {525 ,"Error encoding or decoding the projection centre flag.",}, + {526 ,"Error encoding or decoding the latitude or flongitude of sub-satellite point.",}, + {527 ,"Error encoding or decoding the diameter of the Earth in X or Y direction.",}, + {528 ,"Error encoding or decoding the X or Y coordinate of the sub-satellite point.",}, + {529 ,"Error encoding or decoding the orientation of the grid or camera angle.",}, + {530 ,"Error encoding or decoding the X or Y coordinate of the origin of sector.",}, + {531 ,"Error inserting/extracting Latin1 or Latin2 of secants points.",}, + {532 ,"Error inserting/extracting latitude/flongitude of southern pole.",}, + {540 ,"Error encoding gaussian grid section 2.",}, + {541 ,"Error decoding gaussian grid section 2.",}, + {542 ,"Error encoding lat/flong grid section 2.",}, + {543 ,"Error decoding lat/flong grid section .",}, + {544 ,"Error encoding spectral section 2.",}, + {545 ,"Error decoding spectral section 2.",}, + {546 ,"Error encoding space view section 2, or error encoding ECMWF ocean section 2.",}, + {547 ,"Error decoding space view section 2, or error decoding ECMWF ocean section 2.",}, + {598 ,"Representation type not handled.",}, + {598 ,"Representation type not handled.",}, + {599 ,"Error found when checking values for section 2 against expected valid GRIB values.",}, + {601 ,"Error encoding or decoding length of section 3.",}, + {602 ,"Error encoding or decoding the number of unused bits at the end of section 3.",}, + {603 ,"Error encoding or decoding the bitmap reference table.",}, + {604 ,"Error encoding or decoding the primary bitmap.",}, + {605 ,"Unable to convert quasi-regular (reduced) gaussian grid with a bitmap.",}, + {699 ,"Error found when checking values for section 3 against expected valid GRIB values.",}, + {701 ,"Error encoding or decoding the length of section 4.",}, + {703 ,"Second-order packing implies additional flags.",}, + {704 ,"Function A or B invalid for second-order packed field (grid-point).",}, + {705 ,"Only simple packing handled for grid data.",}, + {706 ,"Error in decoding the section 4 flag field.",}, + {707 ,"Error encoding or decoding the field scale factor.",}, + {708 ,"Error encoding or decoding the field reference value.",}, + {709 ,"Error encoding or decoding the number of bits per data value.",}, + {710 ,"Output array too small.",}, + {711 ,"Error encoding or decoding a REAL coefficient.",}, + {712 ,"Error encoding or decoding data values.",}, + {713 ,"Error encoding or decoding the 'flag and unused bits' field.",}, + {714 ,"Decoding option is 'X' and number of values is illegal.",}, + {715 ,"Decoding option is 'X' and scanning mode is not north to south and west to east.",}, + {716 ,"Decoding option is 'X' and field is not a gaussian or latitude/flongitude grid.",}, + {717 ,"Decoding option is 'X' and a bitmap is encountered.",}, + {720 ,"Error encoding or decoding the octet number at which packed data begins.",}, + {721 ,"Error encoding or decoding the 'extended flag' field.",}, + {722 ,"Error encoding or decoding the first or second dimension of a matrix.",}, + {723 ,"Error encoding or decoding six fields, from first dimension coordinate value onwards.",}, + {724 ,"Error encoding or decoding first or second dimension coefficients.",}, + {725 ,"Error encoding a secondary bitmap.",}, + {726 ,"Output array is not big enough to allow expansion using bitmap(s), or constant (0-bit) field without section 2 not supported.",}, + {727 ,"Invalid predefined bitmap number given, or constant (0-bit) spectral field not supported.",}, + {728 ,"Open of predefined bitmap failed, or constant (0-bit) field function G or B not supported.",}, + {729 ,"Problem reading a predefined bitmap size, or output array is not big enough to allow expansion using bitmaps.",}, + {730 ,"Problem allocating memory for a predefined bitmap.",}, + {731 ,"Problem reading the number of non-missing points in a predefined bitmap.",}, + {732 ,"Problem reading a predefined bitmap.",}, + {733 ,"Problem closing a predefined bitmap file.",}, + {734 ,"Error inserting padding zeroes at end of section 4.",}, + {796 ,"Error extracting pointer to packed data.",}, + {797 ,"Error extracting sub-set truncation or constant (0-bit) field function G or B not supported.",}, + {798 ,"Function is X but no section 2 included.",}, + {799 ,"Error found when checking values for section 4 against expected valid GRIB values.",}, + {800 ,"Error encoding or decoding the 7777 group.",}, + {801 ,"Error inserting or extracting the 7777 group.",}, + {802 ,"Error encoding or decoding the length of the GRIB message.",}, + {805 ,"End of message 7777 group not found.",}, + {806 ,"Error in decoding a primary or secondary bitmap.",}, + {807 ,"Inconsistent values specified for complex packing in KSEC2(6) and KSEC4(4).",}, + {808 ,"Error converting quasi-regular (reduced) gaussian grid to regular.",}, + {809 ,"Error padding unused part of GRIB to zero.",}, + {810 ,"Error inserting dummy zero, or error padding GRIB to multiple of 120.",}, + {811 ,"Unable to handle secondary bitmaps for J option.",}, +}; + +void gribex_check(int err) { + int i=0; + if(err > 0) { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + exit(err); + } +} + +void usage(char* prog) { + printf("usage: %s grib_file\n",prog); + exit(1); +} + +#define ISECTION_0 2 +#define ISECTION_1 1024 /* beware of for ocean data */ +#define ISECTION_2 3000 +#define ISECTION_3 2 +#define ISECTION_4 512 + +#define RSECTION_2 512 +#define RSECTION_3 2 +#define RSECTION_4 1 + +#define STRMAXLEN 300 + +int main(int argc, char* argv[]) { + flong ksec0[ISECTION_0]; + flong ksec1[ISECTION_1]; + flong ksec2[ISECTION_2]; + flong ksec3[ISECTION_3]; + flong ksec4[ISECTION_4]; + + double rsec2[RSECTION_2]; + double rsec3[RSECTION_3]; + flong sec4len; + flong miss=0; + const void *msg; + flong gribex_msg_len=0; + grib_handle *h=NULL; + grib_context* c=NULL; + FILE* fin=NULL; + char* finname; + double *values=NULL; + double *values_gribex=NULL; + size_t nvalues=0; + int maxnvalues; + unsigned char buffer[5000000]; + size_t length = sizeof(buffer); + int i=338; + + if (argc != 2) usage(argv[0]); + finname=argv[1]; + + fin = fopen(finname,"r"); + if(!fin) {perror(finname);exit(1);} + + c=grib_context_get_default(); + GRIB_CHECK(grib_read_any_from_file(c,fin,buffer,&length),0); + fclose(fin); + + maxnvalues=1000000; + h=grib_handle_new_from_message_copy(c,buffer,length); + + /* decode with gribex */ + msg=(char*)buffer; + sec4len=maxnvalues+100000; + values_gribex = (double*)grib_context_malloc(c,sizeof(double)*(sec4len)); + + printf("decoding with gribex\n"); + gribex_msg_len=length; + gribex_check(cgribex( miss, ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, + ksec4,values_gribex,sec4len, (char*)msg,&gribex_msg_len,"D")); + + printf("gribex v[%d]=%.20e\n",i,values_gribex[i]); + printf("ksec1[1]=%d\n",ksec1[1]); + + /* decode values with grib_api*/ + GRIB_CHECK(grib_get_size(h,"values",&nvalues),0); + values=(double*)grib_context_malloc(c,sizeof(double)*nvalues); + if (!values) { printf("%s: memory allocation error\n",argv[0]); exit(1); } + if (maxnvalues + +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) + +#ifdef HAVE_LIBEMOS +#define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; + +void grib_sort(double* arr,int* index, int beg, int end,int buildindex) { + double temp; + if (buildindex) { + int i; + for (i=beg;i<=end;i++) index[i]=i; + } + if (end > beg) { + double piv = arr[beg]; + int l = beg + 1, r = end; + while (l < r) { + if (arr[l] <= piv) l++; + else if(arr[r] >= piv) r--; + else { + SWAP(arr[l],arr[r]) + SWAP(index[l],index[r]) + } + } + if(arr[l] < piv) { + SWAP(arr[l],arr[beg]) + SWAP(index[l],index[beg]) + l--; + } + else { + l--; + SWAP(arr[l],arr[beg]) + SWAP(index[l],index[beg]) + } + + grib_sort(arr,index, beg, l,0); + grib_sort(arr,index, r, end,0); + } +} + +extern void grsrnd_(long*); +extern void gribex_(long*, long*, long*, double*, long*, double*, long*, double*, + long*, char *, long*, long*, const char*, long*,long ); + +static int cgribex( + long miss, + + long ksec0[],long ksec1[], + long ksec2[],double rsec2[], + long ksec3[],double rsec3[], + long ksec4[],double rsec4[], + long sec4len, + + char *buffer, + long *buflen, + char *op) +{ + long ret = 1; + long in_bufsize = (*buflen) / sizeof(long); + long out_bufsize = in_bufsize; + long round = 0; + + rsec3[1] = miss, + ksec3[1] = miss, + + grsrnd_(&round); /* no rounding !!! */ + + gribex_(ksec0, ksec1, ksec2, rsec2, ksec3, rsec3, ksec4, rsec4, + &sec4len, buffer, &in_bufsize, &out_bufsize, op, &ret,1 ); + + *buflen = out_bufsize * sizeof(long); + + return ret; +} + +struct { int code; char *message; } gribex_errors[] = { + {201 ," An invalid coding/decoding option was requested.",}, + {202 ,"The number of bits per data value exceeds a word length.",}, + {203 ,"Missing data indicated and data field contains non-zero values.",}, + {204 ,"Number of bits per data value is invalid.",}, + {205 ,"Number of bits per data value is same as the number of bits per computer word.",}, + {301 ,"Error in encoding or decoding the letters GRIB.",}, + {302 ,"Error decoding the length of the GRIB message.",}, + {303 ,"Error encoding or decoding the GRIB edition number.",}, + {304 ,"Error decoding octets 22 and 23, experimental edition check.",}, + {305 ,"Input data is not GRIB or pseudo-GRIB.",}, + {401 ,"Error encoding or decoding the length of section 1.",}, + {402 ,"Error encoding or decoding the parameter version number.",}, + {403 ,"Error encoding or decoding six header fields in section 1, from 'identification of centre' to 'indicator of type of level'.",}, + {404 ,"Error encoding or decoding height, pressure, etc of levels.",}, + {405 ,"Error encoding or decoding six fields in section 1, from 'year of century' to 'indicator of unit of time range'.",}, + {406 ,"Error encoding or decoding period of time.",}, + {407 ,"Error encoding or decoding time range indicator.",}, + {408 ,"Error encoding or decoding number averaged.",}, + {409 ,"Error encoding or decoding number missing from averages etc.",}, + {410 ,"Error encoding or decoding century of data or reserved field.",}, + {411 ,"Error encoding or decoding units decimal scale factor.",}, + {412 ,"Error encoding or decoding ECMWF local data.",}, + {413 ,"Grib edition not handled.",}, + {499 ,"Error found when checking values for section 1 against expected valid GRIB values.",}, + {501 ,"Error encoding or decoding length of section 2.",}, + {502 ,"Error encoding or decoding number of vertical coordinate parameters.",}, + {503 ,"Error encoding or decoding location of list of vertical coordinate parameters or list of numbers of points.",}, + {504 ,"Error encoding or decoding data representation type.",}, + {505 ,"Error encoding or decoding number of points along a parallel or meridian.",}, + {505 ,"Error encoding or decoding number of points along a parallel or meridian.",}, + {506 ,"Error encoding or decoding latitude or longitude of the first grid point.",}, + {507 ,"Error encoding or decoding the components flag.",}, + {508 ,"Error encoding or decoding latitude or longitude of the last grid point.",}, + {509 ,"Error encoding or decoding the i direction increment.",}, + {510 ,"Error encoding or decoding the number of parallels between the pole and the Equator.",}, + {511 ,"Error encoding or decoding scanning mode flags.",}, + {513 ,"Error encoding or decoding the j direction increment.",}, + {514 ,"Error encoding or decoding J,K,M pentagonal resolution parameters.",}, + {515 ,"Error encoding or decoding representation type or mode.",}, + {517 ,"Error encoding or decoding latitude or longitude of southern pole.",}, + {518 ,"Error encoding or decoding angle of rotation.",}, + {519 ,"Error encoding or decoding latitude or longitude of pole of stretching.",}, + {520 ,"Error encoding or decoding stretching factor.",}, + {521 ,"Error encoding or decoding vertical coordinate parameters.",}, + {522 ,"Error encoding or decoding list of numbers of points.",}, + {523 ,"Error encoding or decoding number of points along X or Y axis.",}, + {524 ,"Error encoding or decoding X or Y axis grid lengths.",}, + {525 ,"Error encoding or decoding the projection centre flag.",}, + {526 ,"Error encoding or decoding the latitude or longitude of sub-satellite point.",}, + {527 ,"Error encoding or decoding the diameter of the Earth in X or Y direction.",}, + {528 ,"Error encoding or decoding the X or Y coordinate of the sub-satellite point.",}, + {529 ,"Error encoding or decoding the orientation of the grid or camera angle.",}, + {530 ,"Error encoding or decoding the X or Y coordinate of the origin of sector.",}, + {531 ,"Error inserting/extracting Latin1 or Latin2 of secants points.",}, + {532 ,"Error inserting/extracting latitude/longitude of southern pole.",}, + {540 ,"Error encoding gaussian grid section 2.",}, + {541 ,"Error decoding gaussian grid section 2.",}, + {542 ,"Error encoding lat/long grid section 2.",}, + {543 ,"Error decoding lat/long grid section .",}, + {544 ,"Error encoding spectral section 2.",}, + {545 ,"Error decoding spectral section 2.",}, + {546 ,"Error encoding space view section 2, or error encoding ECMWF ocean section 2.",}, + {547 ,"Error decoding space view section 2, or error decoding ECMWF ocean section 2.",}, + {598 ,"Representation type not handled.",}, + {598 ,"Representation type not handled.",}, + {599 ,"Error found when checking values for section 2 against expected valid GRIB values.",}, + {601 ,"Error encoding or decoding length of section 3.",}, + {602 ,"Error encoding or decoding the number of unused bits at the end of section 3.",}, + {603 ,"Error encoding or decoding the bitmap reference table.",}, + {604 ,"Error encoding or decoding the primary bitmap.",}, + {605 ,"Unable to convert quasi-regular (reduced) gaussian grid with a bitmap.",}, + {699 ,"Error found when checking values for section 3 against expected valid GRIB values.",}, + {701 ,"Error encoding or decoding the length of section 4.",}, + {703 ,"Second-order packing implies additional flags.",}, + {704 ,"Function A or B invalid for second-order packed field (grid-point).",}, + {705 ,"Only simple packing handled for grid data.",}, + {706 ,"Error in decoding the section 4 flag field.",}, + {707 ,"Error encoding or decoding the field scale factor.",}, + {708 ,"Error encoding or decoding the field reference value.",}, + {709 ,"Error encoding or decoding the number of bits per data value.",}, + {710 ,"Output array too small.",}, + {711 ,"Error encoding or decoding a REAL coefficient.",}, + {712 ,"Error encoding or decoding data values.",}, + {713 ,"Error encoding or decoding the 'flag and unused bits' field.",}, + {714 ,"Decoding option is 'X' and number of values is illegal.",}, + {715 ,"Decoding option is 'X' and scanning mode is not north to south and west to east.",}, + {716 ,"Decoding option is 'X' and field is not a gaussian or latitude/longitude grid.",}, + {717 ,"Decoding option is 'X' and a bitmap is encountered.",}, + {720 ,"Error encoding or decoding the octet number at which packed data begins.",}, + {721 ,"Error encoding or decoding the 'extended flag' field.",}, + {722 ,"Error encoding or decoding the first or second dimension of a matrix.",}, + {723 ,"Error encoding or decoding six fields, from first dimension coordinate value onwards.",}, + {724 ,"Error encoding or decoding first or second dimension coefficients.",}, + {725 ,"Error encoding a secondary bitmap.",}, + {726 ,"Output array is not big enough to allow expansion using bitmap(s), or constant (0-bit) field without section 2 not supported.",}, + {727 ,"Invalid predefined bitmap number given, or constant (0-bit) spectral field not supported.",}, + {728 ,"Open of predefined bitmap failed, or constant (0-bit) field function G or B not supported.",}, + {729 ,"Problem reading a predefined bitmap size, or output array is not big enough to allow expansion using bitmaps.",}, + {730 ,"Problem allocating memory for a predefined bitmap.",}, + {731 ,"Problem reading the number of non-missing points in a predefined bitmap.",}, + {732 ,"Problem reading a predefined bitmap.",}, + {733 ,"Problem closing a predefined bitmap file.",}, + {734 ,"Error inserting padding zeroes at end of section 4.",}, + {796 ,"Error extracting pointer to packed data.",}, + {797 ,"Error extracting sub-set truncation or constant (0-bit) field function G or B not supported.",}, + {798 ,"Function is X but no section 2 included.",}, + {799 ,"Error found when checking values for section 4 against expected valid GRIB values.",}, + {800 ,"Error encoding or decoding the 7777 group.",}, + {801 ,"Error inserting or extracting the 7777 group.",}, + {802 ,"Error encoding or decoding the length of the GRIB message.",}, + {805 ,"End of message 7777 group not found.",}, + {806 ,"Error in decoding a primary or secondary bitmap.",}, + {807 ,"Inconsistent values specified for complex packing in KSEC2(6) and KSEC4(4).",}, + {808 ,"Error converting quasi-regular (reduced) gaussian grid to regular.",}, + {809 ,"Error padding unused part of GRIB to zero.",}, + {810 ,"Error inserting dummy zero, or error padding GRIB to multiple of 120.",}, + {811 ,"Unable to handle secondary bitmaps for J option.",}, +}; + +void gribex_check(int err) { + int i=0; + if(err > 0) { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + exit(err); + } +} + +int statistics(grib_context* c, double err_threshold,double* values, + double* oldvalues,double* grib_values,double* gribex_values, + int nvalues,int count,int dosort,int gribex_grib_compare) { + double vmax,vmin, grib_vmax, grib_vmin, gribex_vmax, gribex_vmin; + double vabsmin,vabs,grib_errmax,gribex_errmax,gribex_grib_errmax,ovmax,ovmin; + double grib_vabsmin,gribex_vabsmin,grib_vabs,gribex_vabs; + double *grib_err,*gribex_err,*gribex_grib_err; + int i,imax,imin,grib_ierrmax,gribex_ierrmax,gribex_grib_ierrmax; + int ret=0; + double error=0; + + vmax=values[0]; vmin=values[0]; vabsmin=values[0]; + imax=0; imin=0; + grib_vmax=grib_values[0]; grib_vmin=grib_values[0]; + gribex_vmax=gribex_values[0]; gribex_vmin=gribex_values[0]; + ovmax=oldvalues[0]; ovmin=oldvalues[0]; + gribex_vabsmin=gribex_values[0]; + grib_vabsmin=grib_values[0]; + vabsmin=values[0]; + + grib_err=(double*)grib_context_malloc(c,sizeof(double)*nvalues); + gribex_err=(double*)grib_context_malloc(c,sizeof(double)*nvalues); + gribex_grib_err=(double*)grib_context_malloc(c,sizeof(double)*nvalues); + + grib_errmax=fabs((grib_values[0]-values[0])/values[0]); + gribex_errmax=fabs((gribex_values[0]-values[0])/values[0]); + gribex_grib_errmax=fabs((gribex_values[0]-grib_values[0])/grib_values[0]); + grib_ierrmax=0; + gribex_ierrmax=0; + gribex_grib_ierrmax=0; + + for (i=0; i values[i]) {vmin=values[i];imin=i;} + if (ovmax < oldvalues[i]) ovmax=oldvalues[i]; + if (ovmin > oldvalues[i]) ovmin=oldvalues[i]; + if (vabs != 0 && vabsmin > vabs) vabsmin=vabs; + if (grib_vabs != 0 && grib_vabsmin > grib_vabs) grib_vabsmin=grib_vabs; + if (gribex_vabs != 0 && gribex_vabsmin > gribex_vabs) gribex_vabsmin=gribex_vabs; + if (grib_vmax < grib_values[i]) grib_vmax=grib_values[i]; + if (grib_vmin > grib_values[i]) grib_vmin=grib_values[i]; + if (gribex_vmax < gribex_values[i]) gribex_vmax=gribex_values[i]; + if (gribex_vmin > gribex_values[i]) gribex_vmin=gribex_values[i]; + } + if ( (!gribex_grib_compare && (gribex_errmax > err_threshold || grib_errmax > err_threshold)) || gribex_grib_errmax > err_threshold ) { + int* index; + ret=1; + index=(int*)grib_context_malloc(c,sizeof(int)*nvalues); + if (!index) {printf("memory allocation problems"); exit(1);} + + printf("--------- %d ---------\n",count); + if (gribex_errmax > err_threshold) { + printf(" gribex_errmax=%.5e gribex_ierrmax=%d\n",gribex_errmax,gribex_ierrmax); + printf("v[%d]=%.15e (gribex)\n",gribex_ierrmax,gribex_values[gribex_ierrmax]); + printf("v[%d]=%.15e (grib_api)\n",gribex_ierrmax,grib_values[gribex_ierrmax]); + printf("v[%d]=%.15e \n",gribex_ierrmax,values[gribex_ierrmax]); + } + if (grib_errmax > err_threshold) { + printf(" grib_errmax=%.5e grib_ierrmax=%d\n",grib_errmax,grib_ierrmax); + printf("v[%d]=%.15e (grib_api)\n",grib_ierrmax,grib_values[grib_ierrmax]); + printf("v[%d]=%.15e (gribex)\n",grib_ierrmax,gribex_values[grib_ierrmax]); + printf("v[%d]=%.15e \n",grib_ierrmax,values[grib_ierrmax]); + } + if (gribex_grib_errmax > err_threshold) { + printf(" gribex_grib_errmax=%.5e gribex_grib_ierrmax=%d\n",gribex_grib_errmax,gribex_grib_ierrmax); + if (values[gribex_grib_ierrmax]!=0) + error=(gribex_values[gribex_grib_ierrmax]-values[gribex_grib_ierrmax])/values[gribex_grib_ierrmax]; + printf("v[%d]=%.15e err=%.15e (gribex)\n",gribex_grib_ierrmax,gribex_values[gribex_grib_ierrmax],error); + if (values[gribex_grib_ierrmax]!=0) + error=(grib_values[gribex_grib_ierrmax]-values[gribex_grib_ierrmax])/values[gribex_grib_ierrmax]; + printf("v[%d]=%.15e err=%.15e (grib_api)\n",gribex_grib_ierrmax,grib_values[gribex_grib_ierrmax],error); + printf("v[%d]=%.15e \n",gribex_grib_ierrmax,values[gribex_grib_ierrmax]); + } + printf(" ovmax=%.15e ovmin=%.15e\n",ovmax,ovmin); + printf(" vmax=%.15e vmin=%.15e vabsmin=%.15e imax=%d imin=%d\n", + vmax,vmin,vabsmin,imax,imin); + printf(" vmax=%.15e vmin=%.15e vabsmin=%.15e (grib_api)\n", + grib_vmax,grib_vmin,grib_vabsmin); + printf(" vmax=%.15e vmin=%.15e vabsmin=%.15e (gribex)\n", + gribex_vmax,gribex_vmin,gribex_vabsmin); + printf("v[imax]=%.15e v[imin]=%.15e (grib_api)\n",grib_values[imax],grib_values[imin]); + printf("v[imax]=%.15e v[imin]=%.15e (gribex)\n",gribex_values[imax],gribex_values[imin]); + printf("i index oldv v gribex grib_api gribex_err grib_err\n"); + + if(dosort) { + grib_sort(values,index, 0, nvalues-1,1); + for (i=0; i 0) { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + exit(err); + } +} + +#define ISECTION_0 2 +#define ISECTION_1 1024 /* beware of for ocean data */ +#define ISECTION_2 3000 +#define ISECTION_3 2 +#define ISECTION_4 512 + +#define RSECTION_2 512 +#define RSECTION_3 2 +#define RSECTION_4 1 + +#define STRMAXLEN 300 + + + + +void usage(char* prog) { + printf("usage: %s [-a outfile | -w outfile ] grib_file repetitions bitsPerValue\n",prog); + exit(1); +} + +int main(int argc, char* argv[]) { + grib_handle *h=NULL; + grib_context* c=NULL; + unsigned char buffer[BUFF_SIZE]; + long i; + FILE* fin=NULL; + char* finname; + double *values=NULL; + double gvalues[10000000]={0,}; + size_t nvalues=0; + int count,e=0; + size_t length; + int sec4len; + flong ksec0[ISECTION_0]; + flong ksec1[ISECTION_1]; + flong ksec2[ISECTION_2]; + flong ksec3[ISECTION_3]; + flong ksec4[ISECTION_4]; + flong miss=9999; + const void *msg; + flong gribex_msg_len=0; + + + double rsec2[RSECTION_2]; + double rsec3[RSECTION_3]; + + + if (argc != 2 ) usage(argv[0]); + finname=argv[1]; + + fin = fopen(finname,"r"); + if(!fin) {perror(finname);exit(1);} + + c=grib_context_get_default(); + length=BUFF_SIZE; + count=0; + /* GRIB_CHECK(grib_read_any_from_file(c,fin,buffer,&length),0); */ + while (grib_read_any_from_file(c,fin,buffer,&length)==GRIB_SUCCESS) { + + e=0; + printf("%d\n",++count); + h=grib_handle_new_from_message_copy(c,buffer,length); + GRIB_CHECK(e,0); + + GRIB_CHECK(grib_get_size(h,"values",&nvalues),0); + values=(double*)grib_context_malloc_clear(c,sizeof(double)*nvalues); + if (!values) { printf("%s: memory allocation error\n",argv[0]); exit(1); } + + /* decode values grib_api */ + GRIB_CHECK(grib_get_double_array(h,"values",values,&nvalues),0); + + sec4len=nvalues+100000; + + /* decode with gribex*/ + msg=(char*)buffer; + gribex_msg_len=length; + sec4len=nvalues+100000; + gribex_check(cgribex( miss, ksec0,ksec1,ksec2,rsec2,ksec3,rsec3, + ksec4,gvalues,sec4len, (char*)msg,&gribex_msg_len,"D")); + + + for (i=0;i $$_f < $l2" + ${tools_dir}grib_set -s localDefinitionNumber=$l2 locx.grib1 locy.grib1 + ${tools_dir}grib_filter $$_f locy.grib1 + done +done + +rm -f $$_f locx.grib1 locy.grib1 diff --git a/tests/png_perf.c b/tests/png_perf.c new file mode 100644 index 000000000..c2b8ed42d --- /dev/null +++ b/tests/png_perf.c @@ -0,0 +1,247 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +#if GRIB_TIMER + +void usage(char* prog) { + printf("usage: %s [-a outfile | -w outfile ] grib_file repetitions bitsPerValue\n",prog); + exit(1); +} + +size_t grib_handle_write(grib_handle* h,char* filename) { + FILE* of=NULL; + const void *buffer; size_t size; + + of = fopen(filename,"w"); + if(!of) { + perror(filename); + exit(1); + } + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + if(fwrite(buffer,1,size,of) != size) { + perror(filename); + exit(1); + } + fclose(of); + + return size; + +} + +static void print_timer(grib_timer* t,int repeat) { + printf("%s : %g cpu\n",t->name_,t->timer_/repeat); +} + +int main(int argc, char* argv[]) { + grib_handle *h=NULL; + grib_context* c=NULL; + FILE* fin=NULL; + FILE* fout=NULL; + char* finname; + char* ofilename; + char defofilename[]="png_perf.out"; + double *values=NULL; + int append=0; + size_t nvalues=0; + int count,e=0; + int repeatpng=1; + int repeatsimple=1; + grib_timer *tes,*tds,*tej,*tdj; + char grid_png[]="grid_png"; + size_t grid_png_l=strlen(grid_png); + char grid_simple[]="grid_simple"; + size_t grid_simple_l=strlen(grid_simple); + char packingType[50]={0,}; + size_t len=50; + char param[50]={0,}; + char gridType[50]={0,}; + char outfilename[255]={0,}; + size_t filesize_png=0; + size_t filesize_simple=0; + double perc=0; + long bitsPerValue=0; + int iarg=1; + char grid[20]={0,}; + char shortName[20]={0,}; + long level; + char levelType[20]={0,}; + + tes=grib_get_timer(0,"encoding simple", 0, 0); + tds=grib_get_timer(0,"decoding simple", 0, 0); + tej=grib_get_timer(0,"encoding png", 0, 0); + tdj=grib_get_timer(0,"decoding png", 0, 0); + + if (argc != 4 && argc != 6 ) usage(argv[0]); + if (!strcmp(argv[iarg],"-w")) { + append=0; + iarg++; + ofilename=argv[iarg]; + iarg++; + } else if (!strcmp(argv[iarg],"-a")) { + append=1; + iarg++; + ofilename=argv[iarg]; + iarg++; + } else { + append=0; + ofilename=defofilename; + } + finname=argv[iarg++]; + repeatsimple=atoi(argv[iarg++]); + bitsPerValue=atoi(argv[iarg++]); + + fin = fopen(finname,"r"); + if(!fin) {perror(finname);exit(1);} + + if (append) + fout = fopen(ofilename,"a"); + else + fout = fopen(ofilename,"w"); + + if(!fout) {perror(ofilename);exit(1);} + + c=grib_context_get_default(); + e=0; + h=grib_handle_new_from_file(c,fin,&e); + fclose(fin); + + GRIB_CHECK(e,0); + + len=50; + grib_get_string(h,"shortName",param,&len); + + len=20; + grib_get_string(h,"levelType",levelType,&len); + + if (!strcmp(levelType,"pl")) { + GRIB_CHECK(grib_get_long(h,"level",&level),0); + sprintf(shortName,"%s%ld",param,level); + } else { + sprintf(shortName,"%s",param); + } + + + grib_set_long(h,"editionNumber",2); + GRIB_CHECK(grib_get_size(h,"values",&nvalues),0); + values=(double*)grib_context_malloc(c,sizeof(double)*nvalues); + if (!values) { printf("%s: memory allocation error\n",argv[0]); exit(1); } + + len=50; + grib_get_string(h,"gridType",gridType,&len); + + len=50; + grib_get_string(h,"packingType",packingType,&len); + + GRIB_CHECK(grib_get_double_array(h,"values",values,&nvalues),0); + grib_set_long(h,"bitsPerValue",bitsPerValue); + GRIB_CHECK(grib_set_double_array(h,"values",values,nvalues),0); + + printf("--------------------------------\n"); + printf("- %s - gridType=%s packingType=%s numberOfValues=%ld bitsPerValue=%ld\n", + param,gridType,packingType,(long)nvalues,bitsPerValue); + + if (!strcmp(packingType,"spectral_complex") || !strcmp(packingType,"spectral_simple")) { + printf("unable to process spectral data\n"); + exit(1); + } + + if (!strcmp(gridType,"reduced_gg") || !strcmp(gridType,"regular_gg")) { + long N; + grib_get_long(h,"N",&N); + printf(" N=%ld\n",N); + sprintf(grid,"%ld",N); + } + if (!strcmp(gridType,"regular_ll")) { + double Di,Dj; + grib_get_double(h,"DiInDegrees",&Di); + grib_get_double(h,"DjInDegrees",&Dj); + printf(" Di=%g Dj=%g\n",Di,Dj); + sprintf(grid,"%g/%g",Di,Dj); + } + + + if (!append) + fprintf(fout, + "shortName gridType numberOfValues bitsPerValue grid sizeSimple sizepng encodepng encodeSimple decodepng decodeSimple\n"); + + /* decode values grid_simple */ + if (strcmp(packingType,grid_simple)) + grib_set_string(h,"packingType",grid_simple,&grid_simple_l); + /* printf("decoding simple\n"); */ + grib_timer_start(tds); + for (count=0;counttimer_/repeatpng,tes->timer_/repeatsimple,tdj->timer_/repeatpng,tds->timer_/repeatsimple); + + return 0; +} +#else + +int main(int argc,char* argv[]) { +return 0; +} + +#endif + diff --git a/tests/read_any.c b/tests/read_any.c new file mode 100644 index 000000000..b21561759 --- /dev/null +++ b/tests/read_any.c @@ -0,0 +1,79 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +#include "grib_api_internal.h" + +void usage(char* prog) { + printf("usage: %s infile\n",prog); + exit(1); +} + +static unsigned char buffer[50000000]; + +int main(int argc,char* argv[]) { + + char* filename; + FILE* f; + grib_handle* h=NULL; + grib_context* c; + size_t size=0; + int ret=0; + size_t bufsize=sizeof(buffer); + long count,step,edition,totalLength; + char gridType[50],levelType[50],level[50],shortName[50]; + size_t gridTypelen=sizeof(gridType); + size_t levelTypelen=sizeof(levelType); + size_t levellen=sizeof(level); + size_t shortNamelen=sizeof(shortName); + size_t len; + + if (argc!=2) usage(argv[0]); + filename=argv[1]; + + f=fopen(filename,"r"); + if (!f) { + perror(filename); + exit(1); + } + c=grib_context_get_default(); + + size=bufsize; + count=1; + while ((ret=grib_read_any_from_file(c,f,buffer,&size))==GRIB_SUCCESS) { + if (1) { + h=grib_handle_new_from_message_copy(c,buffer,size); + if (!h) { + printf("unable to new from message\n"); + exit(1); + } else { + grib_get_long(h,"edition",&edition); + grib_get_long(h,"step",&step); + grib_get_long(h,"totalLength",&totalLength); + len=gridTypelen; + grib_get_string(h,"gridType",gridType,&len); + len=levelTypelen; + GRIB_CHECK(grib_get_string(h,"levelType",levelType,&len),0); + len=levellen; + grib_get_string(h,"level",level,&len); + len=shortNamelen; + grib_get_string(h,"shortName",shortName,&len); + printf("- %3ld -\t ed=%ld\t size=%8ld totalLength=%8ld \t %s\t %s\t %s\t level=%s\t step=%ld\n", + count, edition, (long)size, totalLength, shortName, gridType, levelType, level, step); + grib_handle_delete(h); + } + } else { + printf("MESSAGE #%ld\n",count); + } + size=bufsize; + count++; + } + + return 0; + +} diff --git a/tests/read_any.sh b/tests/read_any.sh new file mode 100755 index 000000000..37167702c --- /dev/null +++ b/tests/read_any.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.sh + +infile=${data_dir}/mixed.grib +outfile=${data_dir}/read_any.out + +if [ ! -f ${infile} ] +then + echo no data to test + exit 0 +fi + +$test_dir/read_any $infile > ${outfile} + +diff ${outfile} ${data_dir}/read_any.ok + +rm -f ${outfile} + +count=`${tools_dir}/grib_count ${data_dir}/pad.grib` + +if [ $count != 6 ] +then + echo grib_io problem + exit 1 +fi + diff --git a/tests/read_index.c b/tests/read_index.c new file mode 100644 index 000000000..60cebdf05 --- /dev/null +++ b/tests/read_index.c @@ -0,0 +1,132 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s infile\n",prog); + exit(1); +} + +int main(int argc,char* argv[]) { + + grib_index* index=NULL; + grib_handle* h=NULL; + char* infile=NULL; + char* outfile=NULL; + long *step,*level,*number; + char** shortName=NULL; + int i,j,k,l; + size_t stepSize,levelSize,shortNameSize,numberSize; + long ostep,olevel,onumber; + char oshortName[200]; + size_t lenshortName=200; + int ret=0,count=0; + + if (argc != 2) usage(argv[0]); + infile=argv[1]; + outfile=argv[2]; + + printf("indexing...\n"); + + index=grib_index_read(0,"out.gribidx",&ret); + GRIB_CHECK(ret,0); + + printf("end indexing...\n"); + + /* get the number of distinct values of "step" in the index */ + GRIB_CHECK(grib_index_get_size(index,"step",&stepSize),0); + step=malloc(sizeof(long)*stepSize); + if (!step) exit(1); + /* get the list of distinct steps from the index */ + /* the list is in ascending order */ + GRIB_CHECK(grib_index_get_long(index,"step",step,&stepSize),0); + printf("stepSize=%ld\n",(long)stepSize); + for (i=0;i $simple.data + + for f in $files + do + ${tools_dir}grib_filter test.filter $f > $f.data + diff $simple.data $f.data > /dev/null + ${tools_dir}grib_compare -cvalues $f $simple + echo $f decoding test passed > $REDIRECT + + exclude=`echo $f | awk " /$no_packing/ {print \"found\";} "` + if [ -z "$exclude" ] && [ $encoding != 0 ] + then + rm -f $f.copied + ${tools_dir}grib_copy -r $f $f.copied + ${tools_dir}grib_filter test.filter $f.copied > $f.copied.data + diff $simple.data $f.copied.data > /dev/null + ${tools_dir}grib_compare -cvalues $f.copied $simple + echo $f encoding test passed > $REDIRECT + echo > $REDIRECT + fi + + done + rm -f *.data *.copied +} + + +cat > test.filter< $REDIRECT + + diff --git a/tests/set.sh b/tests/set.sh new file mode 100755 index 000000000..63f1c52e7 --- /dev/null +++ b/tests/set.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +infile=${data_dir}/regular_gaussian_surface.grib1 +outfile=${data_dir}/set.grib1 + +rm -f $outfile || true + +${tools_dir}grib_set -v -p levtype,centre,levtype:l,centre:l -s levtype=pl,centre=80 $infile $outfile >$REDIRECT + +levtype=`${tools_dir}grib_get -p levtype $outfile` +[ $levtype = "pl" ] + +centre=`${tools_dir}grib_get -p centre $outfile` +[ $centre = "cnmc" ] + +levtype=`${tools_dir}grib_get -p levtype:l $outfile` +[ $levtype -eq 100 ] + +centre=`${tools_dir}grib_get -p centre:l $outfile` +[ $centre -eq 80 ] + +infile=${data_dir}/regular_gaussian_surface.grib2 +outfile=${data_dir}/set.grib2 + +rm -f $outfile || true + +${tools_dir}grib_set -v -p levtype:l,centre:s -s levtype:l=100,centre:s=cnmc $infile $outfile >$REDIRECT + +levtype=`${tools_dir}grib_get -p levtype $outfile` +[ $levtype = "pl" ] + +centre=`${tools_dir}grib_get -p centre $outfile` +[ $centre = "cnmc" ] + +levtype=`${tools_dir}grib_get -p levtype:l $outfile` +[ $levtype -eq 100 ] + +centre=`${tools_dir}grib_get -p centre:l $outfile` +[ $centre -eq 80 ] + +set +e + +${tools_dir}grib_set -p levtype $infile $outfile 2> $REDIRECT > $REDIRECT + +[ $? -ne 0 ] + + diff --git a/tests/so_perf.c b/tests/so_perf.c new file mode 100644 index 000000000..820a9a7d4 --- /dev/null +++ b/tests/so_perf.c @@ -0,0 +1,505 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +#define flong int + +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) + +#define BUFF_SIZE 10000000 + +#ifdef HAVE_LIBEMOS +#if GRIB_TIMER +#define TEST_OK +#endif +#endif + +#ifdef TEST_OK + +extern void grsrnd_(flong*); +extern void gribex_(flong*, flong*, flong*, double*, flong*, double*, flong*, double*, + flong*, char *, flong*, flong*, const char*, flong*,flong ); + +static int cgribex( + flong miss, + + flong ksec0[],flong ksec1[], + flong ksec2[],double rsec2[], + flong ksec3[],double rsec3[], + flong ksec4[],double rsec4[], + flong sec4len, + + char *buffer, + flong *buflen, + char *op) +{ + flong ret = 1; + flong in_bufsize = (*buflen) / sizeof(flong); + flong out_bufsize = in_bufsize; + flong round = 0; + + rsec3[1] = miss, + ksec3[1] = miss, + + grsrnd_(&round); /* no rounding !!! */ + + gribex_(ksec0, ksec1, ksec2, rsec2, ksec3, rsec3, ksec4, rsec4, + &sec4len, buffer, &in_bufsize, &out_bufsize, op, &ret,1 ); + + *buflen = out_bufsize * sizeof(flong); + + return ret; +} + +struct { int code; char *message; } gribex_errors[] = { + {201 ," An invalid coding/decoding option was requested.",}, + {202 ,"The number of bits per data value exceeds a word length.",}, + {203 ,"Missing data indicated and data field contains non-zero values.",}, + {204 ,"Number of bits per data value is invalid.",}, + {205 ,"Number of bits per data value is same as the number of bits per computer word.",}, + {301 ,"Error in encoding or decoding the letters GRIB.",}, + {302 ,"Error decoding the length of the GRIB message.",}, + {303 ,"Error encoding or decoding the GRIB edition number.",}, + {304 ,"Error decoding octets 22 and 23, experimental edition check.",}, + {305 ,"Input data is not GRIB or pseudo-GRIB.",}, + {401 ,"Error encoding or decoding the length of section 1.",}, + {402 ,"Error encoding or decoding the parameter version number.",}, + {403 ,"Error encoding or decoding six header fields in section 1, from 'identification of centre' to 'indicator of type of level'.",}, + {404 ,"Error encoding or decoding height, pressure, etc of levels.",}, + {405 ,"Error encoding or decoding six fields in section 1, from 'year of century' to 'indicator of unit of time range'.",}, + {406 ,"Error encoding or decoding period of time.",}, + {407 ,"Error encoding or decoding time range indicator.",}, + {408 ,"Error encoding or decoding number averaged.",}, + {409 ,"Error encoding or decoding number missing from averages etc.",}, + {410 ,"Error encoding or decoding century of data or reserved field.",}, + {411 ,"Error encoding or decoding units decimal scale factor.",}, + {412 ,"Error encoding or decoding ECMWF local data.",}, + {413 ,"Grib edition not handled.",}, + {499 ,"Error found when checking values for section 1 against expected valid GRIB values.",}, + {501 ,"Error encoding or decoding length of section 2.",}, + {502 ,"Error encoding or decoding number of vertical coordinate parameters.",}, + {503 ,"Error encoding or decoding location of list of vertical coordinate parameters or list of numbers of points.",}, + {504 ,"Error encoding or decoding data representation type.",}, + {505 ,"Error encoding or decoding number of points aflong a parallel or meridian.",}, + {505 ,"Error encoding or decoding number of points aflong a parallel or meridian.",}, + {506 ,"Error encoding or decoding latitude or flongitude of the first grid point.",}, + {507 ,"Error encoding or decoding the components flag.",}, + {508 ,"Error encoding or decoding latitude or flongitude of the last grid point.",}, + {509 ,"Error encoding or decoding the i direction increment.",}, + {510 ,"Error encoding or decoding the number of parallels between the pole and the Equator.",}, + {511 ,"Error encoding or decoding scanning mode flags.",}, + {513 ,"Error encoding or decoding the j direction increment.",}, + {514 ,"Error encoding or decoding J,K,M pentagonal resolution parameters.",}, + {515 ,"Error encoding or decoding representation type or mode.",}, + {517 ,"Error encoding or decoding latitude or flongitude of southern pole.",}, + {518 ,"Error encoding or decoding angle of rotation.",}, + {519 ,"Error encoding or decoding latitude or flongitude of pole of stretching.",}, + {520 ,"Error encoding or decoding stretching factor.",}, + {521 ,"Error encoding or decoding vertical coordinate parameters.",}, + {522 ,"Error encoding or decoding list of numbers of points.",}, + {523 ,"Error encoding or decoding number of points aflong X or Y axis.",}, + {524 ,"Error encoding or decoding X or Y axis grid lengths.",}, + {525 ,"Error encoding or decoding the projection centre flag.",}, + {526 ,"Error encoding or decoding the latitude or flongitude of sub-satellite point.",}, + {527 ,"Error encoding or decoding the diameter of the Earth in X or Y direction.",}, + {528 ,"Error encoding or decoding the X or Y coordinate of the sub-satellite point.",}, + {529 ,"Error encoding or decoding the orientation of the grid or camera angle.",}, + {530 ,"Error encoding or decoding the X or Y coordinate of the origin of sector.",}, + {531 ,"Error inserting/extracting Latin1 or Latin2 of secants points.",}, + {532 ,"Error inserting/extracting latitude/flongitude of southern pole.",}, + {540 ,"Error encoding gaussian grid section 2.",}, + {541 ,"Error decoding gaussian grid section 2.",}, + {542 ,"Error encoding lat/flong grid section 2.",}, + {543 ,"Error decoding lat/flong grid section .",}, + {544 ,"Error encoding spectral section 2.",}, + {545 ,"Error decoding spectral section 2.",}, + {546 ,"Error encoding space view section 2, or error encoding ECMWF ocean section 2.",}, + {547 ,"Error decoding space view section 2, or error decoding ECMWF ocean section 2.",}, + {598 ,"Representation type not handled.",}, + {598 ,"Representation type not handled.",}, + {599 ,"Error found when checking values for section 2 against expected valid GRIB values.",}, + {601 ,"Error encoding or decoding length of section 3.",}, + {602 ,"Error encoding or decoding the number of unused bits at the end of section 3.",}, + {603 ,"Error encoding or decoding the bitmap reference table.",}, + {604 ,"Error encoding or decoding the primary bitmap.",}, + {605 ,"Unable to convert quasi-regular (reduced) gaussian grid with a bitmap.",}, + {699 ,"Error found when checking values for section 3 against expected valid GRIB values.",}, + {701 ,"Error encoding or decoding the length of section 4.",}, + {703 ,"Second-order packing implies additional flags.",}, + {704 ,"Function A or B invalid for second-order packed field (grid-point).",}, + {705 ,"Only simple packing handled for grid data.",}, + {706 ,"Error in decoding the section 4 flag field.",}, + {707 ,"Error encoding or decoding the field scale factor.",}, + {708 ,"Error encoding or decoding the field reference value.",}, + {709 ,"Error encoding or decoding the number of bits per data value.",}, + {710 ,"Output array too small.",}, + {711 ,"Error encoding or decoding a REAL coefficient.",}, + {712 ,"Error encoding or decoding data values.",}, + {713 ,"Error encoding or decoding the 'flag and unused bits' field.",}, + {714 ,"Decoding option is 'X' and number of values is illegal.",}, + {715 ,"Decoding option is 'X' and scanning mode is not north to south and west to east.",}, + {716 ,"Decoding option is 'X' and field is not a gaussian or latitude/flongitude grid.",}, + {717 ,"Decoding option is 'X' and a bitmap is encountered.",}, + {720 ,"Error encoding or decoding the octet number at which packed data begins.",}, + {721 ,"Error encoding or decoding the 'extended flag' field.",}, + {722 ,"Error encoding or decoding the first or second dimension of a matrix.",}, + {723 ,"Error encoding or decoding six fields, from first dimension coordinate value onwards.",}, + {724 ,"Error encoding or decoding first or second dimension coefficients.",}, + {725 ,"Error encoding a secondary bitmap.",}, + {726 ,"Output array is not big enough to allow expansion using bitmap(s), or constant (0-bit) field without section 2 not supported.",}, + {727 ,"Invalid predefined bitmap number given, or constant (0-bit) spectral field not supported.",}, + {728 ,"Open of predefined bitmap failed, or constant (0-bit) field function G or B not supported.",}, + {729 ,"Problem reading a predefined bitmap size, or output array is not big enough to allow expansion using bitmaps.",}, + {730 ,"Problem allocating memory for a predefined bitmap.",}, + {731 ,"Problem reading the number of non-missing points in a predefined bitmap.",}, + {732 ,"Problem reading a predefined bitmap.",}, + {733 ,"Problem closing a predefined bitmap file.",}, + {734 ,"Error inserting padding zeroes at end of section 4.",}, + {796 ,"Error extracting pointer to packed data.",}, + {797 ,"Error extracting sub-set truncation or constant (0-bit) field function G or B not supported.",}, + {798 ,"Function is X but no section 2 included.",}, + {799 ,"Error found when checking values for section 4 against expected valid GRIB values.",}, + {800 ,"Error encoding or decoding the 7777 group.",}, + {801 ,"Error inserting or extracting the 7777 group.",}, + {802 ,"Error encoding or decoding the length of the GRIB message.",}, + {805 ,"End of message 7777 group not found.",}, + {806 ,"Error in decoding a primary or secondary bitmap.",}, + {807 ,"Inconsistent values specified for complex packing in KSEC2(6) and KSEC4(4).",}, + {808 ,"Error converting quasi-regular (reduced) gaussian grid to regular.",}, + {809 ,"Error padding unused part of GRIB to zero.",}, + {810 ,"Error inserting dummy zero, or error padding GRIB to multiple of 120.",}, + {811 ,"Unable to handle secondary bitmaps for J option.",}, +}; +void gribex_check(int err) { + int i=0; + if(err > 0) { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + exit(err); + } +} + +#define ISECTION_0 2 +#define ISECTION_1 1024 /* beware of for ocean data */ +#define ISECTION_2 3000 +#define ISECTION_3 2 +#define ISECTION_4 512 + +#define RSECTION_2 512 +#define RSECTION_3 2 +#define RSECTION_4 1 + +#define STRMAXLEN 300 + + + + +void usage(char* prog) { + printf("usage: %s [-a outfile | -w outfile ] grib_file repetitions bitsPerValue\n",prog); + exit(1); +} + +size_t grib_handle_write(grib_handle* h,char* filename) { + FILE* of=NULL; + const void *buffer; size_t size; + + of = fopen(filename,"w"); + if(!of) { + perror(filename); + exit(1); + } + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + if(fwrite(buffer,1,size,of) != size) { + perror(filename); + exit(1); + } + fclose(of); + + return size; + +} + +static void print_timer(grib_timer* t,int repeat) { + printf("%s : %g cpu\n",t->name_,t->timer_/repeat); +} + +int main(int argc, char* argv[]) { + int i; + grib_handle *h=NULL; + grib_handle *hso=NULL; + grib_context* c=NULL; + FILE* fin=NULL; + FILE* fout=NULL; + char* finname; + char* ofilename; + char defofilename[]="so_perf.out"; + double *values=NULL; + double gvalues[1000000]={0,}; + double sovalues[1000000]={0,}; + int append=0; + size_t nvalues=0; + int count,e=0; + int repeatso=1; + int repeatsimple=1; + grib_timer *tes,*tds,*teso,*tdso; + char grid_simple[]="grid_simple"; + size_t grid_simple_l=strlen(grid_simple); + char packingType[50]={0,}; + size_t len=50; + char param[50]={0,}; + char gridType[50]={0,}; + char outfilename[255]={0,}; + size_t filesize_so=0; + size_t filesize_simple=0; + double perc=0; + long bitsPerValue=0; + int iarg=1; + char grid[20]={0,}; + char shortName[20]={0,}; + long level; + char levelType[20]={0,}; + char buffer[BUFF_SIZE]={0,}; + char buf[BUFF_SIZE]={0,}; + size_t length; + int sec4len; + flong ksec0[ISECTION_0]; + flong ksec1[ISECTION_1]; + flong ksec2[ISECTION_2]; + flong ksec3[ISECTION_3]; + flong ksec4[ISECTION_4]; + flong miss=0; + const void *msg; + flong gribex_msg_len=0; + double packingError=0; + + + double rsec2[RSECTION_2]; + double rsec3[RSECTION_3]; + + tes=grib_get_timer(0,"encoding simple", 0, 0); + tds=grib_get_timer(0,"decoding simple", 0, 0); + teso=grib_get_timer(0,"encoding so", 0, 0); + tdso=grib_get_timer(0,"decoding so", 0, 0); + + if (argc != 4 && argc != 6 ) usage(argv[0]); + if (!strcmp(argv[iarg],"-w")) { + append=0; + iarg++; + ofilename=argv[iarg]; + iarg++; + } else if (!strcmp(argv[iarg],"-a")) { + append=1; + iarg++; + ofilename=argv[iarg]; + iarg++; + } else { + append=0; + ofilename=defofilename; + } + finname=argv[iarg++]; + repeatsimple=atoi(argv[iarg++]); + bitsPerValue=atoi(argv[iarg++]); + + fin = fopen(finname,"r"); + if(!fin) {perror(finname);exit(1);} + + c=grib_context_get_default(); + length=BUFF_SIZE; + GRIB_CHECK(grib_read_any_from_file(c,fin,buffer,&length),0); + fclose(fin); + + + if (append) + fout = fopen(ofilename,"a"); + else + fout = fopen(ofilename,"w"); + + if(!fout) {perror(ofilename);exit(1);} + + c=grib_context_get_default(); + e=0; + h=grib_handle_new_from_message_copy(c,buffer,length); + + GRIB_CHECK(e,0); + + len=50; + grib_get_string(h,"shortName",param,&len); + + len=20; + grib_get_string(h,"levelType",levelType,&len); + + if (!strcmp(levelType,"pl")) { + GRIB_CHECK(grib_get_long(h,"level",&level),0); + sprintf(shortName,"%s%ld",param,level); + } else { + sprintf(shortName,"%s",param); + } + + /* grib_set_long(h,"editionNumber",2); */ + GRIB_CHECK(grib_get_size(h,"values",&nvalues),0); + values=(double*)grib_context_malloc_clear(c,sizeof(double)*nvalues); + if (!values) { printf("%s: memory allocation error\n",argv[0]); exit(1); } + + len=50; + grib_get_string(h,"gridType",gridType,&len); + + len=50; + grib_get_string(h,"packingType",packingType,&len); + + GRIB_CHECK(grib_get_double_array(h,"values",values,&nvalues),0); + grib_set_long(h,"bitsPerValue",bitsPerValue); + GRIB_CHECK(grib_set_double_array(h,"values",values,nvalues),0); + GRIB_CHECK(grib_get_double(h,"packingError",&packingError),0); + + printf("--------------------------------\n"); + printf("- %s - gridType=%s packingType=%s numberOfValues=%ld bitsPerValue=%ld\n", + param,gridType,packingType,(long)nvalues,bitsPerValue); + + if (!strcmp(packingType,"spectral_complex") || !strcmp(packingType,"spectral_simple")) { + printf("unable to process spectral data\n"); + exit(1); + } + + if (!strcmp(gridType,"reduced_gg") || !strcmp(gridType,"regular_gg")) { + long N; + grib_get_long(h,"N",&N); + printf(" N=%ld\n",N); + sprintf(grid,"%ld",N); + } + if (!strcmp(gridType,"regular_ll")) { + double Di,Dj; + grib_get_double(h,"DiInDegrees",&Di); + grib_get_double(h,"DjInDegrees",&Dj); + printf(" Di=%g Dj=%g\n",Di,Dj); + sprintf(grid,"%g/%g",Di,Dj); + } + + + if (!append) + fprintf(fout, + "shortName gridType numberOfValues bitsPerValue grid sizeSimple sizeso encodeso encodeSimple decodeso decodeSimple\n"); + + sec4len=nvalues+100000; + + /* decode values grid_simple */ + if (strcmp(packingType,grid_simple)) + grib_set_string(h,"packingType",grid_simple,&grid_simple_l); + grib_timer_start(tds); + for (count=0;countpackingError) { + printf("++++++++ Wrong coding\n"); + printf("packingError=%g gvalues[%d]=%.20e values[%d]=%.20e abs. err=%g \n",packingError,i, + gvalues[i],i,values[i],gvalues[i]-values[i]); + } + } + + for (i=0;ipackingError) { + printf("++++++++ Wrong coding\n"); + printf("packingError=%g gvalues[%d]=%.20e sovalues[%d]=%.20e abs. err=%g \n",packingError,i, + gvalues[i],i,sovalues[i],gvalues[i]-sovalues[i]); + } + } + + grib_handle_delete(hso); + grib_context_free(c,values); + + print_timer(teso,repeatso); + print_timer(tdso,repeatso); + print_timer(tes,repeatsimple); + print_timer(tds,repeatsimple); + + fprintf(fout,"%s %s %ld %ld %s %ld %ld %g %g %g %g\n", + shortName,gridType,(long)nvalues,bitsPerValue, + grid,(long)filesize_simple,(long)filesize_so,teso->timer_/repeatso,tes->timer_/repeatsimple,tdso->timer_/repeatso,tds->timer_/repeatsimple); + + fclose(fout); + return 0; +} +#else + +int main(int argc,char* argv[]) { +return 0; +} + +#endif + diff --git a/tests/statistics.sh b/tests/statistics.sh new file mode 100755 index 000000000..3c23495d0 --- /dev/null +++ b/tests/statistics.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +files="regular_latlon_surface.grib2 regular_latlon_surface.grib1" + +for file in $files +do + +cat >statistics.filter< statistics.out + +diff statistics.out ${data_dir}/statistics.out.good + +done + + diff --git a/tests/step.sh b/tests/step.sh new file mode 100755 index 000000000..c6994aca2 --- /dev/null +++ b/tests/step.sh @@ -0,0 +1,76 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.sh + +REDIRECT=/dev/null + +rm -f ${data_dir}/log | true +for i in 0 10 +do + for s in 0 1200 600 6000 + do + for key in stepRange:s startStep endStep + do + rm -f ${data_dir}/out.grib | true + ${tools_dir}grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib +# echo grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib +# grib_get -p step,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib + ${tools_dir}grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib >> ${data_dir}/log + done + done +done + +i=5 +key=stepRange:s +for s in "0-24" "600-1200" "24-48" "36-66" +do + ${tools_dir}grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib +# echo grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib +# grib_ls -p step,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib + ${tools_dir}grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib >> ${data_dir}/log +done + +rm -f ${data_dir}/out.grib | true + +# test added for ifs stepType=max,min +${tools_dir}grib_set -s stepType=max,startStep=3,endStep=6 ${data_dir}/reduced_gaussian_model_level.grib1 ${data_dir}/out.grib +${tools_dir}grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l ${data_dir}/reduced_gaussian_model_level.grib1 ${data_dir}/out.grib >> ${data_dir}/log + +rm -f ${data_dir}/out.grib | true + +diff ${data_dir}/log ${data_dir}/step.log + +(${tools_dir}grib_filter ${data_dir}/step_grib1.filter ${data_dir}/timeRangeIndicator_0.grib > ${data_dir}/log) 2>$REDIRECT + +diff ${data_dir}/log ${data_dir}/step_grib1.log + +rm -f ${data_dir}/log | true + +# GRIB-180 +# Set PDT 4.8 where you can find the EndOfOverallTimeInterval keys +grib2File=${data_dir}/reduced_latlon_surface_constant.grib2 +${tools_dir}grib_set -sproductDefinitionTemplateNumber=8 $grib2File ${grib2File}.p8tmp + +# 78 hours is 3 days and 6 hours +${tools_dir}grib_set -s step=78 $grib2File.p8tmp ${grib2File}.tmp +set `${tools_dir}grib_get -p hourOfEndOfOverallTimeInterval,dayOfEndOfOverallTimeInterval ${grib2File}.tmp` +hourEnd=$1; dayEnd=$2 +[ "$hourEnd" = "18" ] +[ "$dayEnd" = "8" ] + +${tools_dir}grib_set -s step=12 $grib2File.p8tmp ${grib2File}.tmp +set `${tools_dir}grib_get -p hourOfEndOfOverallTimeInterval,dayOfEndOfOverallTimeInterval ${grib2File}.tmp` +hourEnd=$1; dayEnd=$2 +[ "$hourEnd" = "0" ] +[ "$dayEnd" = "6" ] + +rm -f $grib2File.p8tmp ${grib2File}.tmp | true + diff --git a/tests/tigge.sh b/tests/tigge.sh new file mode 100755 index 000000000..95b3e8caa --- /dev/null +++ b/tests/tigge.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +. ./include.sh + +REDIRECT=/dev/null + +#set -eax + +dir="${data_dir}/tigge/" + +# check tigge global +for file in `ls ${dir}/tigge_*.grib` +do + ${tigge_dir}tigge_check ${file} 2> $REDIRECT > $REDIRECT +done + +# check tigge-lam +for file in `ls ${dir}/tiggelam_*.grib` +do + ${tigge_dir}tigge_check -l ${file} 2> $REDIRECT > $REDIRECT +done + + +# Now test non-TIGGE files too. We now expect tigge_check to fail! +set +e +# All the grib files in the samples are non-TIGGE +for file in `ls ${GRIB_SAMPLES_PATH}/*.tmpl` +do + ${tigge_dir}tigge_check ${file} 2> $REDIRECT > $REDIRECT + if [ $? -eq 0 ]; then + # should have failed and returned a non-zero exit code + exit 1 + fi +done + diff --git a/tests/tigge_conversions.sh b/tests/tigge_conversions.sh new file mode 100755 index 000000000..a4bc2300a --- /dev/null +++ b/tests/tigge_conversions.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + +# --- test grib edition 2 to 1 conversions with tigge data +# --- using the new features of grib_compare that allows +# --- namespace comparison + +. ./include.sh + +REDIRECT=/dev/null + +#set -eax + +dir="${data_dir}/tigge/" +temp1="temp.grib1_" +temp2="temp.grib2_" + +# --- Do I want to exclude any file pattern from the comparison ? +exclusion_pattern="tcw|ssr|str|skt|cap|ci|ttr" + +for file in `ls ${dir}/tigge_*.grib` +do + +exclude=`echo $file | awk " /$exclusion_pattern/ {print \"found\";} "` + +if [ -z "$exclude" ]; then + + rm -f ${temp1} ${temp2} || true + + # 1 to 2 conversion check + ${tools_dir}grib_set -s editionNumber=1 ${file} ${temp1} 2> $REDIRECT > $REDIRECT + ${tools_dir}grib_compare -P -c data:n,geography:n ${temp1} ${file} 2> $REDIRECT > $REDIRECT + + # 2 to 1 conversion check + ${tools_dir}grib_set -s editionNumber=2 ${temp1} ${temp2} 2> $REDIRECT > $REDIRECT + ${tools_dir}grib_compare -P -c shortName,data:n,geography:n ${temp2} ${file} 2> $REDIRECT > $REDIRECT +fi +done + +rm -f ${temp1} ${temp2} || true diff --git a/tests/timing.c b/tests/timing.c new file mode 100644 index 000000000..fe65b35e2 --- /dev/null +++ b/tests/timing.c @@ -0,0 +1,325 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include + +#define flong int + +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) + +#ifdef HAVE_LIBEMOS +#if GRIB_TIMER + +extern void grsrnd_(flong*); +extern void gribex_(flong*, flong*, flong*, double*, flong*, double*, flong*, double*, + flong*, char *, flong*, flong*, const char*, flong*,flong ); + +static int cgribex( + flong miss, + + flong ksec0[],flong ksec1[], + flong ksec2[],double rsec2[], + flong ksec3[],double rsec3[], + flong ksec4[],double rsec4[], + flong sec4len, + + char *buffer, + flong *buflen, + char *op) +{ + flong ret = 1; + flong in_bufsize = (*buflen) / sizeof(flong); + flong out_bufsize = in_bufsize; + flong round = 0; + + rsec3[1] = miss, + ksec3[1] = miss, + + grsrnd_(&round); /* no rounding !!! */ + + gribex_(ksec0, ksec1, ksec2, rsec2, ksec3, rsec3, ksec4, rsec4, + &sec4len, buffer, &in_bufsize, &out_bufsize, op, &ret,1 ); + + *buflen = out_bufsize * sizeof(flong); + + return ret; +} + +struct { int code; char *message; } gribex_errors[] = { + {201 ," An invalid coding/decoding option was requested.",}, + {202 ,"The number of bits per data value exceeds a word length.",}, + {203 ,"Missing data indicated and data field contains non-zero values.",}, + {204 ,"Number of bits per data value is invalid.",}, + {205 ,"Number of bits per data value is same as the number of bits per computer word.",}, + {301 ,"Error in encoding or decoding the letters GRIB.",}, + {302 ,"Error decoding the length of the GRIB message.",}, + {303 ,"Error encoding or decoding the GRIB edition number.",}, + {304 ,"Error decoding octets 22 and 23, experimental edition check.",}, + {305 ,"Input data is not GRIB or pseudo-GRIB.",}, + {401 ,"Error encoding or decoding the length of section 1.",}, + {402 ,"Error encoding or decoding the parameter version number.",}, + {403 ,"Error encoding or decoding six header fields in section 1, from 'identification of centre' to 'indicator of type of level'.",}, + {404 ,"Error encoding or decoding height, pressure, etc of levels.",}, + {405 ,"Error encoding or decoding six fields in section 1, from 'year of century' to 'indicator of unit of time range'.",}, + {406 ,"Error encoding or decoding period of time.",}, + {407 ,"Error encoding or decoding time range indicator.",}, + {408 ,"Error encoding or decoding number averaged.",}, + {409 ,"Error encoding or decoding number missing from averages etc.",}, + {410 ,"Error encoding or decoding century of data or reserved field.",}, + {411 ,"Error encoding or decoding units decimal scale factor.",}, + {412 ,"Error encoding or decoding ECMWF local data.",}, + {413 ,"Grib edition not handled.",}, + {499 ,"Error found when checking values for section 1 against expected valid GRIB values.",}, + {501 ,"Error encoding or decoding length of section 2.",}, + {502 ,"Error encoding or decoding number of vertical coordinate parameters.",}, + {503 ,"Error encoding or decoding location of list of vertical coordinate parameters or list of numbers of points.",}, + {504 ,"Error encoding or decoding data representation type.",}, + {505 ,"Error encoding or decoding number of points aflong a parallel or meridian.",}, + {505 ,"Error encoding or decoding number of points aflong a parallel or meridian.",}, + {506 ,"Error encoding or decoding latitude or flongitude of the first grid point.",}, + {507 ,"Error encoding or decoding the components flag.",}, + {508 ,"Error encoding or decoding latitude or flongitude of the last grid point.",}, + {509 ,"Error encoding or decoding the i direction increment.",}, + {510 ,"Error encoding or decoding the number of parallels between the pole and the Equator.",}, + {511 ,"Error encoding or decoding scanning mode flags.",}, + {513 ,"Error encoding or decoding the j direction increment.",}, + {514 ,"Error encoding or decoding J,K,M pentagonal resolution parameters.",}, + {515 ,"Error encoding or decoding representation type or mode.",}, + {517 ,"Error encoding or decoding latitude or flongitude of southern pole.",}, + {518 ,"Error encoding or decoding angle of rotation.",}, + {519 ,"Error encoding or decoding latitude or flongitude of pole of stretching.",}, + {520 ,"Error encoding or decoding stretching factor.",}, + {521 ,"Error encoding or decoding vertical coordinate parameters.",}, + {522 ,"Error encoding or decoding list of numbers of points.",}, + {523 ,"Error encoding or decoding number of points aflong X or Y axis.",}, + {524 ,"Error encoding or decoding X or Y axis grid lengths.",}, + {525 ,"Error encoding or decoding the projection centre flag.",}, + {526 ,"Error encoding or decoding the latitude or flongitude of sub-satellite point.",}, + {527 ,"Error encoding or decoding the diameter of the Earth in X or Y direction.",}, + {528 ,"Error encoding or decoding the X or Y coordinate of the sub-satellite point.",}, + {529 ,"Error encoding or decoding the orientation of the grid or camera angle.",}, + {530 ,"Error encoding or decoding the X or Y coordinate of the origin of sector.",}, + {531 ,"Error inserting/extracting Latin1 or Latin2 of secants points.",}, + {532 ,"Error inserting/extracting latitude/flongitude of southern pole.",}, + {540 ,"Error encoding gaussian grid section 2.",}, + {541 ,"Error decoding gaussian grid section 2.",}, + {542 ,"Error encoding lat/flong grid section 2.",}, + {543 ,"Error decoding lat/flong grid section .",}, + {544 ,"Error encoding spectral section 2.",}, + {545 ,"Error decoding spectral section 2.",}, + {546 ,"Error encoding space view section 2, or error encoding ECMWF ocean section 2.",}, + {547 ,"Error decoding space view section 2, or error decoding ECMWF ocean section 2.",}, + {598 ,"Representation type not handled.",}, + {598 ,"Representation type not handled.",}, + {599 ,"Error found when checking values for section 2 against expected valid GRIB values.",}, + {601 ,"Error encoding or decoding length of section 3.",}, + {602 ,"Error encoding or decoding the number of unused bits at the end of section 3.",}, + {603 ,"Error encoding or decoding the bitmap reference table.",}, + {604 ,"Error encoding or decoding the primary bitmap.",}, + {605 ,"Unable to convert quasi-regular (reduced) gaussian grid with a bitmap.",}, + {699 ,"Error found when checking values for section 3 against expected valid GRIB values.",}, + {701 ,"Error encoding or decoding the length of section 4.",}, + {703 ,"Second-order packing implies additional flags.",}, + {704 ,"Function A or B invalid for second-order packed field (grid-point).",}, + {705 ,"Only simple packing handled for grid data.",}, + {706 ,"Error in decoding the section 4 flag field.",}, + {707 ,"Error encoding or decoding the field scale factor.",}, + {708 ,"Error encoding or decoding the field reference value.",}, + {709 ,"Error encoding or decoding the number of bits per data value.",}, + {710 ,"Output array too small.",}, + {711 ,"Error encoding or decoding a REAL coefficient.",}, + {712 ,"Error encoding or decoding data values.",}, + {713 ,"Error encoding or decoding the 'flag and unused bits' field.",}, + {714 ,"Decoding option is 'X' and number of values is illegal.",}, + {715 ,"Decoding option is 'X' and scanning mode is not north to south and west to east.",}, + {716 ,"Decoding option is 'X' and field is not a gaussian or latitude/flongitude grid.",}, + {717 ,"Decoding option is 'X' and a bitmap is encountered.",}, + {720 ,"Error encoding or decoding the octet number at which packed data begins.",}, + {721 ,"Error encoding or decoding the 'extended flag' field.",}, + {722 ,"Error encoding or decoding the first or second dimension of a matrix.",}, + {723 ,"Error encoding or decoding six fields, from first dimension coordinate value onwards.",}, + {724 ,"Error encoding or decoding first or second dimension coefficients.",}, + {725 ,"Error encoding a secondary bitmap.",}, + {726 ,"Output array is not big enough to allow expansion using bitmap(s), or constant (0-bit) field without section 2 not supported.",}, + {727 ,"Invalid predefined bitmap number given, or constant (0-bit) spectral field not supported.",}, + {728 ,"Open of predefined bitmap failed, or constant (0-bit) field function G or B not supported.",}, + {729 ,"Problem reading a predefined bitmap size, or output array is not big enough to allow expansion using bitmaps.",}, + {730 ,"Problem allocating memory for a predefined bitmap.",}, + {731 ,"Problem reading the number of non-missing points in a predefined bitmap.",}, + {732 ,"Problem reading a predefined bitmap.",}, + {733 ,"Problem closing a predefined bitmap file.",}, + {734 ,"Error inserting padding zeroes at end of section 4.",}, + {796 ,"Error extracting pointer to packed data.",}, + {797 ,"Error extracting sub-set truncation or constant (0-bit) field function G or B not supported.",}, + {798 ,"Function is X but no section 2 included.",}, + {799 ,"Error found when checking values for section 4 against expected valid GRIB values.",}, + {800 ,"Error encoding or decoding the 7777 group.",}, + {801 ,"Error inserting or extracting the 7777 group.",}, + {802 ,"Error encoding or decoding the length of the GRIB message.",}, + {805 ,"End of message 7777 group not found.",}, + {806 ,"Error in decoding a primary or secondary bitmap.",}, + {807 ,"Inconsistent values specified for complex packing in KSEC2(6) and KSEC4(4).",}, + {808 ,"Error converting quasi-regular (reduced) gaussian grid to regular.",}, + {809 ,"Error padding unused part of GRIB to zero.",}, + {810 ,"Error inserting dummy zero, or error padding GRIB to multiple of 120.",}, + {811 ,"Unable to handle secondary bitmaps for J option.",}, +}; + +void gribex_check(int err) { + int i=0; + if(err > 0) { + char *e = "unknown"; + for(i = 0; i < NUMBER(gribex_errors); i++) + if(gribex_errors[i].code == err) + e = gribex_errors[i].message; + + fprintf(stderr,"GRIBEX error %d: %s\n",err,e); + exit(err); + } +} + +void usage(char* prog) { + printf("usage: %s grib_file\n",prog); + exit(1); +} + +#define ISECTION_0 2 +#define ISECTION_1 1024 /* beware of for ocean data */ +#define ISECTION_2 3000 +#define ISECTION_3 2 +#define ISECTION_4 512 + +#define RSECTION_2 512 +#define RSECTION_3 2 +#define RSECTION_4 1 + +#define STRMAXLEN 300 + +int main(int argc, char* argv[]) { + flong ksec0[ISECTION_0]; + flong ksec1[ISECTION_1]; + flong ksec2[ISECTION_2]; + flong ksec3[ISECTION_3]; + flong ksec4[ISECTION_4]; + + double rsec2[RSECTION_2]; + double rsec3[RSECTION_3]; + flong sec4len; + flong miss=0; + const void *msg; + flong gribex_msg_len=0; + grib_handle *h=NULL; + grib_context* c=NULL; + FILE* fin=NULL; + /*char finname[]="/marsdev/data/p4/grib_api/main/data/exp/performance/sh.grib";*/ + char* finname; + double *values=NULL; + size_t nvalues=0; + int count,e=0; + int maxnvalues; + unsigned char buffer[50000000]; + size_t length = sizeof(buffer); + int repeat=300; + grib_timer *taen,*tade,*tgen,*tgde; + + taen=grib_get_timer(0,"grib_api encoding", 0, 0); + tgen=grib_get_timer(0,"gribex encoding", 0, 0); + tade=grib_get_timer(0,"grib_api decoding", 0, 0); + tgde=grib_get_timer(0,"gribex decoding", 0, 0); + + if (argc != 2) usage(argv[0]); + finname=argv[1]; + + fin = fopen(finname,"r"); + if(!fin) {perror(finname);exit(1);} + + c=grib_context_get_default(); + GRIB_CHECK(grib_read_any_from_file(c,fin,buffer,&length),0); + fclose(fin); + + /* unpack all data with grib_api */ + maxnvalues=0; + h=grib_handle_new_from_message_copy(c,buffer,length); + GRIB_CHECK(e,0); + + /* decode values with grib_api*/ + GRIB_CHECK(grib_get_size(h,"values",&nvalues),0); + values=(double*)grib_context_malloc(c,sizeof(double)*nvalues); + if (!values) { printf("%s: memory allocation error\n",argv[0]); exit(1); } + if (maxnvalues /dev/null diff --git a/tests/tiny.sh b/tests/tiny.sh new file mode 100755 index 000000000..5c0aab586 --- /dev/null +++ b/tests/tiny.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# + + +. ./include.sh + +REDIRECT=/dev/null + +cat >${data_dir}/f.rules < $REDIRECT > $REDIRECT + diff --git a/tests/values_to_ascii.c b/tests/values_to_ascii.c new file mode 100755 index 000000000..da6f14759 --- /dev/null +++ b/tests/values_to_ascii.c @@ -0,0 +1,84 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include +#include + +#include "grib_api.h" + +int main(int argc, char** argv) { + int err = 0; + double *values = NULL; + char format[1024]; + size_t values_len= 0; + + size_t i = 0; + + long ni; + double a; + long d; + FILE* in = NULL; + + grib_handle *h = NULL; + + + if(argc > 1) + in = fopen(argv[1],"r"); + else{ + printf("usage : gribvals filename [format]\n"); + exit(1); + } + if(!in){ + printf("error file not found"); + return 1; + } + + if(argc > 2) + strcpy(format,argv[2]); + else + strcpy(format,"%g "); + + + h = grib_handle_new_from_file(0,in); + while(h){ + + if((err = grib_get_long(h,"ni",&ni)) != GRIB_SUCCESS) + printf("error %d : %s",err,grib_get_error_message(err)); + + if((err = grib_get_size(h,"values",&values_len)) != GRIB_SUCCESS){ + printf("error %d : %s",err,grib_get_error_message(err)); + return 1; + } + + values = malloc(values_len*sizeof(double)); + + if((err = grib_get_double_array(h,"values",values,&values_len)) != GRIB_SUCCESS) + printf("error %d : %s",err,grib_get_error_message(err)); + + for(i = 0; i < values_len; i++){ + if(i!=0 && (i%ni == 0))printf("\n"); + printf(format,values[i]); + } + printf("\n"); + fprintf(stderr,"%d values\n",i); + free(values); + + grib_handle_delete(h); + + h = grib_handle_new_from_file(0,in); + + if(h) + printf("************************************************************\n"); + + } + fclose(in); + return 0; +} diff --git a/tigge/CMakeLists.txt b/tigge/CMakeLists.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tigge/Makefile.am b/tigge/Makefile.am new file mode 100755 index 000000000..7bf10f591 --- /dev/null +++ b/tigge/Makefile.am @@ -0,0 +1,16 @@ + +AM_CFLAGS = @WARN_PEDANTIC@ @WERROR@ + +bin_PROGRAMS = tigge_check tigge_name tigge_accumulations tigge_split + +tigge_check_SOURCES = tigge_check.c \ + tigge_check.h + +tigge_name_SOURCES = tigge_name.c +tigge_split_SOURCES = tigge_split.c +tigge_accumulations_SOURCES = tigge_accumulations.c + +INCLUDES = -I$(top_builddir)/src + +LDADD = $(top_builddir)/src/libgrib_api.la +DEPENDENCIES = $(LDADD) diff --git a/tigge/jma.pl b/tigge/jma.pl new file mode 100755 index 000000000..a5e317b9a --- /dev/null +++ b/tigge/jma.pl @@ -0,0 +1,108 @@ +#!/usr/bin/perl -I../perl/GRIB-API/blib/lib -I../perl/GRIB-API/blib/arch +# Copyright 2005-2012 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by +# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. +# +#!/usr/bin/perl -I/usr/local/lib/metaps/lib/grib_api/current/perl + +use lib qw(/home/ma/mab/grib/api/lib); + +use GRIB::API; +use strict; + +my %DEFAULTS = ( + # productionStatusOfProcessedData => 5, + ); + +my @RULES = ( + + + +# Dew point + [ + # condition + { discipline=>0, parameterCategory=>0, parameterNumber=>6, + typeOfFirstFixedSurface => 1, + }, + # action + { tigge_short_name => "2d", typeOfFirstFixedSurface=>103, + scaleFactorOfFirstFixedSurface=>0, + scaledValueOfFirstFixedSurface=>2 }, + ], + +# Total precip. + [ + # condition + { discipline=>0, parameterCategory=>1, parameterNumber=>8, + }, + # action + { tigge_short_name => "tp",} + ], + +# Mean sea level pressure + + [ + # condition + { discipline=>0, parameterCategory=>3, parameterNumber=>1, + }, + # action + { tigge_short_name => "msl",} + ], + +# Total cloud cover + + [ + # condition + { discipline=>0, parameterCategory=>6, parameterNumber=>1, + }, + # action + { tigge_short_name => "tcc",} + ], + + + + +); + +@RULES = (); + +@ARGV = qw(ncep s) unless(@ARGV); +$ARGV[1] = "s" unless($ARGV[1]); + +open(IN,"<$ARGV[0]") or die "$ARGV[0]: $!"; +open(OUT,">$ARGV[1]") or die "$ARGV[1]: $!"; + +while(my $g = GRIB::API->new(\*IN)) +{ +# Initialise using default + + $g->set_values(\%DEFAULTS); + +# Apply rules + + foreach my $r ( @RULES ) + { + $g->set_values($r->[1]) if(match($g,$r->[0])); + } + + + $g->Write(\*OUT) or die "$ARGV[1]: $!"; +} + +close(OUT) or die "$ARGV[1]: $!"; +#system("./tigge_check $ARGV[1] && mv $ARGV[0] done/"); + +# Checks if a handle matches a rule condition +sub match { + my ($h,$cond) = @_; + foreach my $c ( keys %{$cond} ) + { + return 0 unless($h->get_long($c) eq $cond->{$c}); + } + return 1; +} + diff --git a/tigge/kma.pl b/tigge/kma.pl new file mode 100755 index 000000000..35b84feb2 --- /dev/null +++ b/tigge/kma.pl @@ -0,0 +1,106 @@ +#!/usr/bin/perl -I/marsdev/data/p4/linux/amd64/grib_api/main/perl/GRIB-API/blib/lib -I/marsdev/data/p4/linux/amd64/grib_api/main/perl/GRIB-API/blib/arch + + +use lib qw(/home/ma/mab/grib/api/lib); + +use GRIB::API; +use strict; + +my %DEFAULTS = ( + gribMasterTablesVersionNumber => 5, + subdivisionsOfBasicAngle => undef, + ); + +my @RULES = ( + + + +# Dew point ? + [ + # condition + { discipline=>0, parameterCategory=>0, parameterNumber=>7, typeOfFirstFixedSurface => 103 }, + # action + { tigge_short_name => "2d" }, ], + + +# Mean sea level + [ + # condition + { discipline=>0, parameterCategory=>3, parameterNumber=>1, + typeOfFirstFixedSurface => 101 }, + # action + { tigge_short_name => "msl", }, ], + +# Total precip. + [ + # condition + { discipline=>0, parameterCategory=>1, parameterNumber=>8, }, + # action + { productDefinitionTemplateNumber => 11, tigge_short_name => "tp", marsStartStep=>0}, ], + + +# Single levels + [ + # condition + { typeOfSecondFixedSurface => 255 } , + # action + { scaleFactorOfSecondFixedSurface => undef, + scaledValueOfSecondFixedSurface => undef } ], + [ + # condition + { typeOfSecondFixedSurface => 8 } , + # action + { scaleFactorOfSecondFixedSurface => undef, + scaledValueOfSecondFixedSurface => undef } ], + [ + # condition + { typeOfFirstFixedSurface => 1 } , + # action + { scaleFactorOfFirstFixedSurface => undef, + scaledValueOfFirstFixedSurface => undef } ], + + [ + # condition + { typeOfFirstFixedSurface => 101 } , + # action + { scaleFactorOfFirstFixedSurface => undef, + scaledValueOfFirstFixedSurface => undef } ], + +); + +@ARGV = qw(ncep s) unless(@ARGV); +$ARGV[1] = "s" unless($ARGV[1]); + +open(IN,"<$ARGV[0]") or die "$ARGV[0]: $!"; +open(OUT,">$ARGV[1]") or die "$ARGV[1]: $!"; + +while(my $g = GRIB::API->new(\*IN)) +{ +# Initialise using default + + $g->set_values(\%DEFAULTS); + +# Apply rules + + foreach my $r ( @RULES ) + { + $g->set_values($r->[1]) if(match($g,$r->[0])); + } + + + $g->Write(\*OUT) or die "$ARGV[1]: $!"; +} + +close(OUT) or die "$ARGV[1]: $!"; +system("./tigge_check -b bad $ARGV[1] && mv $ARGV[0] done/"); + +# Checks if a handle matches a rule condition +sub match { + my ($h,$cond) = @_; + foreach my $c ( keys %{$cond} ) + { + return 0 unless($h->get_long($c) eq $cond->{$c}); + } + return 1; +} + diff --git a/tigge/ncep.pl b/tigge/ncep.pl new file mode 100755 index 000000000..00bd11c14 --- /dev/null +++ b/tigge/ncep.pl @@ -0,0 +1,166 @@ +#!/usr/bin/perl -I/var/tmp/mab/p4/grib_api/main/perl/GRIB-API/blib/lib -I/var/tmp/mab/p4/grib_api/main/perl/GRIB-API/blib/arch +use lib qw(/bison/user/schuster/grib_api-0.9.5/perl/GRIB-API/lib); +use lib qw(/bison/user/schuster/grib_api-0.9.5/perl/GRIB-API/blib/lib); +use lib qw(/bison/user/schuster/grib_api-0.9.5/perl/GRIB-API/blib/arch); +use GRIB::API; +use strict; + +my %DEFAULTS = ( +# reserved => undef, + gribMasterTablesVersionNumber => 5, + versionNumberOfGribLocalTables => 0, + productionStatusOfProcessedData => 4, + subdivisionsOfBasicAngle => undef, + + +# Special case + numberOfForecastsInEnsemble => 21, + + ); + +my @RULES = ( + + + +# Minimum temperature + [ + # condition + { discipline=>0, parameterCategory=>0, parameterNumber=>5, + typeOfFirstFixedSurface => 103 }, + # action + { tigge_short_name => "mn2t6" }, ], + +# Maximum temperature + [ + # condition + { discipline=>0, parameterCategory=>0, parameterNumber=>4, + typeOfFirstFixedSurface => 103 }, + # action + { tigge_short_name => "mx2t6" }, ], + +# Cloud cover ? + [ + # condition + { discipline=>0, parameterCategory=>6, parameterNumber=>1, + typeOfFirstFixedSurface => 200 }, + # action + { tigge_short_name => "tcc", + productDefinitionTemplateNumber=>1 }, ], + +# Mean sea level + [ + # condition + { discipline=>0, parameterCategory=>3, parameterNumber=>1, + typeOfFirstFixedSurface => 101 }, + # action + { tigge_short_name => "msl", }, ], + +# CAPE + [ + # condition + { discipline=>0, parameterCategory=>7, parameterNumber=>6, + typeOfFirstFixedSurface => 108 }, + # action + { tigge_short_name => "cape", + }, ], + +# Convective inhibition + [ + # condition + { discipline=>0, parameterCategory=>7, parameterNumber=>7, + typeOfFirstFixedSurface => 1 }, + # action + { tigge_short_name => "ci", + }, ], + +# Skin temperature + [ + # condition + { discipline=>0, parameterCategory=>0, parameterNumber=>0, + typeOfFirstFixedSurface => 1 }, + # action + { tigge_short_name => "skt", + }, ], + +# Snow depth + [ + # condition + { discipline=>0, parameterCategory=>1, parameterNumber=>13, + typeOfFirstFixedSurface => 1 }, + # action + { tigge_short_name => "sd", + }, ], + +# Total precipitation + [ + # condition + { discipline=>0, parameterCategory=>1, parameterNumber=>8, + typeOfFirstFixedSurface => 1 }, + # action + { tigge_short_name => "tp" }, ], + + +# Single levels + [ + # condition + { typeOfSecondFixedSurface => 255 } , + # action + { scaleFactorOfSecondFixedSurface => undef, + scaledValueOfSecondFixedSurface => undef } ], + [ + # condition + { typeOfSecondFixedSurface => 8 } , + # action + { scaleFactorOfSecondFixedSurface => undef, + scaledValueOfSecondFixedSurface => undef } ], + [ + # condition + { typeOfFirstFixedSurface => 1 } , + # action + { scaleFactorOfFirstFixedSurface => undef, + scaledValueOfFirstFixedSurface => undef } ], + + [ + # condition + { typeOfFirstFixedSurface => 101 } , + # action + { scaleFactorOfFirstFixedSurface => undef, + scaledValueOfFirstFixedSurface => undef } ], + +); + + +die "usage: $0 in out" unless(@ARGV == 2); + +open(IN,"<$ARGV[0]") or die "$ARGV[0]: $!"; +open(OUT,">$ARGV[1]") or die "$ARGV[1]: $!"; + +while(my $g = GRIB::API->new(\*IN)) +{ +# Initialise using default + + $g->set_values(\%DEFAULTS); + +# Apply rules + + foreach my $r ( @RULES ) + { + $g->set_values($r->[1]) if(match($g,$r->[0])); + } + + $g->Write(\*OUT) or die "$ARGV[1]: $!"; +} + +close(OUT) or die "$ARGV[1]: $!"; +#system("./tigge_check $ARGV[1] && mv $ARGV[0] done/"); + +# Checks if a handle matches a rule condition +sub match { + my ($h,$cond) = @_; + foreach my $c ( keys %{$cond} ) + { + return 0 unless($h->get_long($c) eq $cond->{$c}); + } + return 1; +} + diff --git a/tigge/ncep.rules b/tigge/ncep.rules new file mode 100755 index 000000000..609ad309a --- /dev/null +++ b/tigge/ncep.rules @@ -0,0 +1,66 @@ +productionStatusOfProcessedData = 4; +subdivisionsOfBasicAngle = missing(); +versionNumberOfGribLocalTables = 0; +gribMasterTablesVersionNumber = 5; +numberOfForecastsInEnsemble = 21; +if(parameterCategory == 0 && parameterNumber == 5 && typeOfFirstFixedSurface == 103 && discipline == 0) +{ + tigge_short_name = 'mn2t6'; +} +if(parameterCategory == 0 && parameterNumber == 4 && typeOfFirstFixedSurface == 103 && discipline == 0) +{ + tigge_short_name = 'mx2t6'; +} +if(parameterCategory == 6 && parameterNumber == 1 && typeOfFirstFixedSurface == 200 && discipline == 0) +{ + productDefinitionTemplateNumber = 1; + tigge_short_name = 'tcc'; +} +if(parameterCategory == 3 && parameterNumber == 1 && typeOfFirstFixedSurface == 101 && discipline == 0) +{ + tigge_short_name = 'msl'; +} +if(parameterCategory == 7 && parameterNumber == 6 && typeOfFirstFixedSurface == 108 && discipline == 0) +{ + tigge_short_name = 'cape'; + scaledValueOfSecondFixedSurface = missing(); + scaleFactorOfSecondFixedSurface = missing(); + scaledValueOfFirstFixedSurface = missing(); + scaleFactorOfFirstFixedSurface = missing(); +} +if(parameterCategory == 7 && parameterNumber == 7 && typeOfFirstFixedSurface == 1 && discipline == 0) +{ + tigge_short_name = 'ci'; +} +if(parameterCategory == 0 && parameterNumber == 0 && typeOfFirstFixedSurface == 1 && discipline == 0) +{ + tigge_short_name = 'skt'; +} +if(parameterCategory == 1 && parameterNumber == 13 && typeOfFirstFixedSurface == 1 && discipline == 0) +{ + tigge_short_name = 'sd'; +} +if(parameterCategory == 1 && parameterNumber == 8 && typeOfFirstFixedSurface == 1 && discipline == 0) +{ + tigge_short_name = 'tp'; +} +if(typeOfSecondFixedSurface == 255) +{ + scaledValueOfSecondFixedSurface = missing(); + scaleFactorOfSecondFixedSurface = missing(); +} +if(typeOfSecondFixedSurface == 8) +{ + scaledValueOfSecondFixedSurface = missing(); + scaleFactorOfSecondFixedSurface = missing(); +} +if(typeOfFirstFixedSurface == 1) +{ + scaledValueOfFirstFixedSurface = missing(); + scaleFactorOfFirstFixedSurface = missing(); +} +if(typeOfFirstFixedSurface == 101) +{ + scaledValueOfFirstFixedSurface = missing(); + scaleFactorOfFirstFixedSurface = missing(); +} diff --git a/tigge/reprocess_ncep.ksh b/tigge/reprocess_ncep.ksh new file mode 100755 index 000000000..f0cddda1a --- /dev/null +++ b/tigge/reprocess_ncep.ksh @@ -0,0 +1,211 @@ +#!/bin/ksh + +set -e # Stop on error +set -u # Catche undefined variable +set +x # Trace + +# During development + +PATH=$PATH:/var/tmp/mab/p4/grib_api/main/tigge:/var/tmp/mab/p4/grib_api/main/tools +RULES=/var/tmp/mab/p4/grib_api/main/tigge/ncep.rules + +# Cycle should be an argument + +cycle=2007051300 + +# This should match the value of productionStatusOfProcessedData in $RULES (prod=4, test=5) +prod=prod + +# Where the tar files are +datadir=`pwd`/data + +# Point to some work directory +workdir=`pwd`/work + +# Where the z_c_tigge... goes +output=`pwd`/output + + +cd $workdir + +# Extract cf and pf data from tar files +echo $(date +'%F %X') Extract from tar files + +if [[ ! -f done.$cycle.step0 ]] +then + rm -f done.$cycle.step[1-9] + rm -fr tmp.data.$cycle + mkdir tmp.data.$cycle + for n in a c + do + cd tmp.data.$cycle + tar xf $datadir/$cycle.pgrb2$n.tar + cd $workdir + done + + echo $(date +'%F %X') Find CF and PF data + + find tmp.data.$cycle -type f | egrep '/ge[pc][0-9]+\.t[0-9]+z\.pgrb2[a-z]+[0-9]+$' | xargs cat > tmp.all.$cycle + rm -fr tmp.data.$cycle + touch done.$cycle.step0 +fi + +# Split in TP, TCC and "other" +# TCC will be discarded +# TP split into individual files + +echo $(date +'%F %X') Sort fields + +if [[ ! -f done.$cycle.step1 ]] +then + rm -f done.$cycle.step[2-9] + + rm -f tmp.data.$cycle.* + + cat > tmp.$cycle.filter <<@ + + if(discipline==0 && parameterCategory == 6 && parameterNumber == 1 && typeOfFirstFixedSurface == 200) + { + # Ignore TCC for now + write "tmp.data.$cycle.discarded_tcc"; + } + else { + if(discipline==0 && parameterCategory == 1 && parameterNumber == 8 && typeOfFirstFixedSurface == 1) + { + if(marsEndStep - marsStartStep == 6) + { + write "tmp.data.$cycle.tp.[step].[number]"; + } + else + { + write "tmp.data.$cycle.discarded_tp"; + } + } + else { + write "tmp.data.$cycle.other"; + } + } + +@ + + grib_filter tmp.$cycle.filter tmp.all.$cycle + + touch done.$cycle.step1 + + rm -f tmp.$cycle.filter tmp.all.$cycle + rm -f tmp.data.$cycle.discarded_tcc tmp.data.$cycle.discarded_tp +fi + +# Create accumulations from TP + +echo $(date +'%F %X') Compute accumulations + +if [[ ! -f done.$cycle.step2 ]] +then + rm -f done.$cycle.step[3-9] + + # Get the greatest ensemble number and the greatest step + + set $(ls -1 tmp.data.$cycle.tp.* | awk -F. ' + BEGIN { s= 0; e = 0; } + { + if($5>s) { s=$5;} + if($6>e) { e=$6;} + } + END { printf("%d %d\n",s,e); } + ') + + last_s=$1 + last_e=$2 + + # Compute accumulations + + e=0 + while [[ $e -le $last_e ]] + do + rm -f tmp.data.$cycle.precip.$e + s=6 + while [[ $s -le $last_s ]] + do + touch tmp.data.$cycle.tp.$s.$e + cat tmp.data.$cycle.tp.$s.$e >> tmp.data.$cycle.precip.$e + s=$((s+6)) + done + set +e + tigge_accumulations tmp.data.$cycle.precip.$e tmp.data.$cycle.precip.$e.accumulated + set -e + rm tmp.data.$cycle.precip.$e + e=$((e+1)) + done + + cat tmp.data.$cycle.precip.*.accumulated > tmp.data.$cycle.precip_accumulated + + # Cleanup + + rm -f tmp.data.$cycle.precip.*.accumulated + rm -f tmp.data.$cycle.tp.* + + touch done.$cycle.step2 +fi + +# Run grib_conver to convert to TIGGE complient fields +echo $(date +'%F %X') Patch headers + +if [[ ! -f done.$cycle.step3 ]] +then + rm -f done.$cycle.step[4-9] + + for n in tmp.data.$cycle.precip_accumulated tmp.data.$cycle.other + do + grib_convert $RULES $n $n.tigge + done + + rm -f tmp.data.$cycle.precip_accumulated tmp.data.$cycle.other + touch done.$cycle.step3 +fi + +# Run tigge_check to weed out the unwanted fields + +echo $(date +'%F %X') Remove unwanted fields + +if [[ ! -f done.$cycle.step4 ]] +then + rm -f done.$cycle.step[5-9] + + # -z means return 'zero' to the shell even if some fields are not TIGGE complient + tigge_check -z -g tmp.data.$cycle.good tmp.data.$cycle.precip_accumulated.tigge tmp.data.$cycle.other.tigge > /dev/null + + rm -f tmp.data.$cycle.precip_accumulated.tigge tmp.data.$cycle.other.tigge + + touch done.$cycle.step4 +fi + +# Split into individual fields and create manifest + +echo $(date +'%F %X') Create TIGGE files + +if [[ ! -f done.$cycle.step5 ]] +then + rm -f done.$cycle.step[6-9] + + rm -fr $output/z_tigge_c_kwbc_${cycle}0000_glob_$prod + mkdir $output/z_tigge_c_kwbc_${cycle}0000_glob_$prod + cd $output/z_tigge_c_kwbc_${cycle}0000_glob_$prod + + # -p means 'print' names. Switch off if the manifest is done by another script + # -u means 'unique', checks that there are not two fields with the same name. Switch off once script is debugged + + #tigge_split -p -u $workdir/tmp.data.$cycle.good > $output/z_tigge_c_kwbc_${cycle}0000_glob_$prod.manifest + tigge_split -p $workdir/tmp.data.$cycle.good > $output/z_tigge_c_kwbc_${cycle}0000_glob_$prod.manifest + + cd $workdir + rm -f tmp.data.$cycle.good + rm -f tmp.data.$cycle.* + touch done.$cycle.step5 +fi + +# Remove check points +rm -f done.$cycle.step* + +n=$(wc -l $output/z_tigge_c_kwbc_${cycle}0000_glob_$prod.manifest | awk '{print $1;}') +echo $(date +'%F %X') Recovered $n fields diff --git a/tigge/tigge_accumulations.c b/tigge/tigge_accumulations.c new file mode 100755 index 000000000..935330c84 --- /dev/null +++ b/tigge/tigge_accumulations.c @@ -0,0 +1,277 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "config.h" + +#include +#include +#include + +#include "grib_api.h" + +#define NUMBER(x) (sizeof(x)/sizeof(x[0])) + +const char* checks[] = { + /* Section 1 */ + "identificationOfOriginatingGeneratingCentre", + "identificationOfOriginatingGeneratingSubCentre", + "gribMasterTablesVersionNumber", + "versionNumberOfGribLocalTables", + "significanceOfReferenceTime", + "year", + "month", + "day", + "hour", + "minute", + "second", + "productionStatusOfProcessedData", + "typeOfProcessedData", + + /*Section3*/ + "sourceOfGridDefinition", + "numberOfDataPoints", + "numberOfOctetsForOptionalListOfNumbersDefiningNumberOfPoints", + "interpretationOfListOfNumbersDefiningNumberOfPoints", + "gridDefinitionTemplateNumber", + "shapeOfTheEarth", + "scaleFactorOfRadiusOfSphericalEarth", + "scaledValueOfRadiusOfSphericalEarth", + "scaleFactorOfMajorAxisOfOblateSpheroidEarth", + "scaledValueOfMajorAxisOfOblateSpheroidEarth", + "scaleFactorOfMinorAxisOfOblateSpheroidEarth", + "scaledValueOfMinorAxisOfOblateSpheroidEarth", + "numberOfPointsAlongAParallel", + "numberOfPointsAlongAMeridian", + "basicAngleOfTheInitialProductionDomain", + "subdivisionsOfBasicAngle", + "latitudeOfFirstGridPoint", + "longitudeOfFirstGridPoint", + "resolutionAndComponentFlags", + "latitudeOfLastGridPoint", + "longitudeOfLastGridPoint", + "iDirectionIncrement", + "jDirectionIncrement", + "scanningMode", + + /*Section4*/ + + "numberOfSection", + "numberOfCoordinatesValues", + "productDefinitionTemplateNumber", + "parameterCategory", + "parameterNumber", + "typeOfGeneratingProcess", + "backgroundGeneratingProcessIdentifier", + "generatingProcessIdentifier", + "hoursAfterReferenceTimeOfDataCutoff", + "minutesAfterReferenceTimeOfDataCutoff", +/* "indicatorOfUnitOfTimeRange",*/ + + /* "forecastTime", */ + + "typeOfFirstFixedSurface", + "scaleFactorOfFirstFixedSurface", + "scaledValueOfFirstFixedSurface", + "typeOfSecondFixedSurface", + "scaleFactorOfSecondFixedSurface", + "scaledValueOfSecondFixedSurface", + "typeOfEnsembleForecast", + "perturbationNumber", + "numberOfForecastsInEnsemble", + + /* + "yearOfEndOfOverallTimeInterval", + "monthOfEndOfOverallTimeInterval", + "dayOfEndOfOverallTimeInterval", + "hourOfEndOfOverallTimeInterval", + "minuteOfEndOfOverallTimeInterval", + "secondOfEndOfOverallTimeInterval", + */ + + "numberOfTimeRangeSpecificationsDescribingTheTimeIntervalsUsedToCalculateTheStatisticallyProcessedField", + "totalNumberOfDataValuesMissingInStatisticalProcess", + "typeOfStatisticalProcessing", + "typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing", + /* "indicatorOfUnitOfTimeForTimeRangeOverWhichStatisticalProcessingIsDone", */ + /* + "lengthOfTheTimeRangeOverWhichStatisticalProcessingIsDone", + */ + "indicatorOfUnitOfTimeForTheIncrementBetweenTheSuccessiveFieldsUsed", + "timeIncrementBetweenSuccessiveFields", + +}; + + +long check_values[NUMBER(checks)]; + + + +void usage(const char *prog) +{ + fprintf(stderr,"%s: in1 [in2 ... ] out\n",prog); + exit(1); +} + + +void init_checks(grib_handle* h) +{ + int i; + for(i = 0; i < NUMBER(checks); i++) + GRIB_CHECK(grib_get_long(h,checks[i],&check_values[i]),checks[i]); +} + +void do_checks(grib_handle* h) +{ + int i; + long val; + for(i = 0; i < NUMBER(checks); i++) + { + GRIB_CHECK(grib_get_long(h,checks[i],&val),checks[i]); + if(val != check_values[i]) + { + printf("Value mismatch for %s: %ld and %ld\n",checks[i],check_values[i],val); + exit(1); + } + } +} + + +void output_field(grib_handle* h,FILE* f,long bits,double* values,size_t size,const char* out) +{ + const void *buffer; + + GRIB_CHECK(grib_set_long(h,"numberOfBitsContainingEachPackedValue",bits),"numberOfBitsContainingEachPackedValue"); + GRIB_CHECK(grib_set_double_array(h,"values",values,size),NULL); + GRIB_CHECK(grib_get_message(h,&buffer,&size),NULL); + + if(fwrite(buffer,1,size,f) != size) + { + perror(out); + exit(1); + } +} + + +int main(int argc, const char *argv[]) +{ + int i,j; + FILE *in,*out; + int e; + grib_handle *result = NULL,*h; + double* values = NULL; + double *tmp = NULL; + size_t size,count; + + long step = 0; + long startStep = 0; + long endStep = 0; + long bits = 0; + + if(argc < 3) usage(argv[0]); + + out = fopen(argv[argc-1],"w"); + if(!out) { + perror(argv[argc-1]); + exit(1); + } + + + for(i = 1; i < argc-1; i++) + { + in = fopen(argv[i],"r"); + if(!in) { + perror(argv[i]); + exit(1); + } + + while( (h = grib_handle_new_from_file(NULL,in,&e)) != NULL ) + { + long b = 0; + + GRIB_CHECK(grib_get_long(h,"startStep",&startStep),"startStep"); + GRIB_CHECK(grib_get_long(h,"endStep",&endStep),"endStep"); + GRIB_CHECK(grib_get_long(h,"numberOfBitsContainingEachPackedValue",&b),"numberOfBitsContainingEachPackedValue"); + + if(b > bits) bits = b; + + if(result == NULL) + { + grib_handle *g = grib_handle_clone(h); + result = h; + + assert(g); + + init_checks(g); + + GRIB_CHECK(grib_get_size(g,"values",&size),argv[i]); + + values = (double*)calloc(size,sizeof(double)); + assert(values); + + tmp = (double*)calloc(size,sizeof(double)); + assert(tmp); + + + assert(startStep == 0); + + GRIB_CHECK(grib_set_long(g,"startStep",0),"startStep"); + GRIB_CHECK(grib_set_long(g,"endStep",0),"endStep"); + + output_field(g,out,0,values,size,argv[argc-1]); + + grib_handle_delete(g); + + } + else + do_checks(h); + + GRIB_CHECK(grib_get_size(h,"values",&count),argv[i]); + assert(count == size); + + GRIB_CHECK(grib_get_double_array(h,"values",tmp,&count),argv[i]); + assert(count == size); + + for(j = 0; j < count; j++) + values[j] += tmp[j]; + + + if(startStep != step) + { + printf("Fields not in step order: step=%ld previous=%ld\n",startStep,step); + exit(1); + } + + assert(endStep - startStep == 6); + step = endStep; + + GRIB_CHECK(grib_set_long(result,"startStep",0), "startStep"); + GRIB_CHECK(grib_set_long(result,"endStep",step),"endStep"); + + output_field(result,out,bits,values,size,argv[argc-1]); + + if(h != result) + grib_handle_delete(h); + } + + GRIB_CHECK(e,argv[argc-2]); + } + + if(result) + grib_handle_delete(result); + + if(fclose(out)) + { + perror(argv[argc-1]); + exit(1); + } + + + return 0; +} diff --git a/tigge/tigge_check.c b/tigge/tigge_check.c new file mode 100755 index 000000000..43e47a2b0 --- /dev/null +++ b/tigge/tigge_check.c @@ -0,0 +1,1090 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#define CHECK(a) check(#a,a) +#define WARN(a) warn(#a,a) +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) + +typedef struct pair { + const char* key; + long value; +} pair; + +typedef struct parameter parameter; + +typedef void (*check_proc)(grib_handle*,const parameter*,double min,double max); + +struct parameter { + const char* name; + double min1; + double min2; + double max1; + double max2; + pair pairs[15]; + check_proc checks[4]; +}; + +static void point_in_time(grib_handle*,const parameter*,double,double); +static void statistical_process(grib_handle*,const parameter*,double,double); +static void six_hourly(grib_handle*,const parameter*,double,double); +static void three_hourly(grib_handle* h,const parameter* p,double min,double max); +static void from_start(grib_handle*,const parameter*,double,double); +static void given_level(grib_handle*,const parameter*,double,double); +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 pressure_level(grib_handle*,const parameter*,double,double); +static void potential_temperature_level(grib_handle*,const parameter*,double,double); +static void potential_vorticity_level(grib_handle*,const parameter*,double,double); + +/* +TODO: +- Shape of the earth +- Levels +*/ + +#include "tigge_check.h" + + +int error = 0; +const char* file = 0; +int field = 0; +int warning = 0; +int valueflg = 0; +const char* param = "unknown"; +int warnflg = 0; +int zeroflg = 0; +int is_lam =0; + +const char* good = NULL; +const char* bad = NULL; + +FILE* fgood = NULL; +FILE* fbad = NULL; + +void check(const char* name,int a) +{ + if(!a) { + printf("%s, field %d [%s]: %s failed\n",file,field,param,name); + error++; + } +} + + +void warn(const char* name,int a) +{ + if(!a) { + printf("%s, field %d [%s]: %s failed\n",file,field,param,name); + warning++; + } +} + +void save(grib_handle* h, const char *name,FILE* f) +{ + size_t size; + const void *buffer; + int e; + + if(!f) return; + + if((e = grib_get_message(h,&buffer,&size)) != GRIB_SUCCESS) + { + printf("%s, field %d [%s]: cannot get message: %s\n",file,field,param,grib_get_error_message(e)); + exit(1); + } + + if(fwrite(buffer,1,size,f) != size) + { + perror(name); + exit(1); + } +} + +long get(grib_handle *h,const char* what) +{ + int e; long val; + if((e = grib_get_long(h,what,&val)) != GRIB_SUCCESS) + { + printf("%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e)); + error++; + val = -1; + } + return val; +} + +double dget(grib_handle *h,const char* what) +{ + int e; double val; + if((e = grib_get_double(h,what,&val)) != GRIB_SUCCESS) + { + printf("%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e)); + error++; + val = -1; + } + return val; +} + +int missing(grib_handle *h,const char* what) +{ + int err=0; + return grib_is_missing(h,what,&err); +} + +int eq(grib_handle *h,const char* what,long value) +{ + return get(h,what) == value; +} + +int ne(grib_handle *h,const char* what,long value) +{ + return get(h,what) != value; +} + +int ge(grib_handle *h,const char* what,long value) +{ + return get(h,what) >= value; +} + +int le(grib_handle *h,const char* what,long value) +{ + return get(h,what) <= value; +} + +void gaussian_grid(grib_handle* h) +{ + long n = get(h,"numberOfParallelsBetweenAPoleAndTheEquator"); + static double* values = NULL; + static long last_n = 0; + double north = dget(h,"latitudeOfFirstGridPointInDegrees"); + double south = dget(h,"latitudeOfLastGridPointInDegrees"); + + double west = dget(h,"longitudeOfFirstGridPointInDegrees"); + double east = dget(h,"longitudeOfLastGridPointInDegrees"); + + int e; + + if(n != last_n) + { + + if(values) free(values); + + values = (double*)malloc(2*sizeof(double)*n); + if(!values) + { + printf("%s, field %d [%s]: failed to allocate %ld bytes\n",file,field,param,2*(long)sizeof(double)*(n)); + error++; + return; + } + + if((e = grib_get_gaussian_latitudes(n,values)) != GRIB_SUCCESS) + { + printf("%s, field %d [%s]: cannot get gaussian latitudes for N%ld: %s\n",file,field,param,n,grib_get_error_message(e)); + error++; + free(values); + last_n = 0; + return; + } + + last_n = n; + } + + values[0] = rint(values[0]*1e6)/1e6; + + if(north != values[0] || south != -values[0]) + printf("N=%ld n=%f s=%f v=%f n-v=%0.30f s-v=%0.30f\n",n,north,south,values[0],north-values[0],south+values[0]); + + CHECK(north == values[0]); + CHECK(south == -values[0]); + + if(missing(h,"numberOfPointsAlongAParallel")) + { + double ee = 360.0 - 360.0/(4.0*n); + CHECK(west == 0.0); + + if(ee != east) + printf("east %g %g %g\n",east,ee,ee-east); + + CHECK(east == ee); + CHECK(fabs(east-ee) < 1e-10); + } + else + { + long west = get(h,"longitudeOfFirstGridPoint"); + long east = get(h,"longitudeOfLastGridPoint"); + long parallel = get(h,"numberOfPointsAlongAParallel"); + long we = get(h,"iDirectionIncrement"); + double dwest = dget(h,"longitudeOfFirstGridPointInDegrees"); + double deast = dget(h,"longitudeOfLastGridPointInDegrees"); + double dwe = dget(h,"iDirectionIncrementInDegrees"); + /*printf("parallel=%ld east=%ld west=%ld we=%ld\n",parallel,east,west,we);*/ + + CHECK(parallel == (east-west)/we + 1); + CHECK(fabs((deast-dwest)/dwe + 1 - parallel) < 1e-10); + CHECK(!get(h,"PLPresent")); + } + + + CHECK(ne(h,"Nj",0)); + + + if(get(h,"PLPresent")) { + size_t count; + int e = grib_get_size(h,"pl",&count); + double *pl; + int i; + long total; + long numberOfValues = get(h,"numberOfValues"); + long numberOfDataPoints = get(h,"numberOfDataPoints"); + int nPl; + + if(e) { + printf("%s, field %d [%s]: cannot number of pl: %s\n",file,field,param,grib_get_error_message(e)); + error++; + return; + } + + pl = (double*)malloc(sizeof(double)*(count)); + CHECK(pl != NULL); + + nPl = count; + if((e = grib_get_double_array(h,"pl",pl,&count))) + { + printf("%s, field %d [%s]: cannot get pl: %s\n",file,field,param,grib_get_error_message(e)); + free(pl); + error++; + return; + + } + if(nPl != count) + printf("nPl=%ld count=%ld\n",(long)nPl,(long)count); + + CHECK(nPl == count); + CHECK(nPl == 2*n); + + + total = 0; + for(i = 0 ; i < count; i++) + total += pl[i]; + + free(pl); + + if(numberOfDataPoints != total) + printf("GAUSS numberOfValues=%ld numberOfDataPoints=%ld sum(pl)=%ld\n", + numberOfValues, + numberOfDataPoints, + total); + + CHECK(numberOfDataPoints == total); + + CHECK(missing(h,"iDirectionIncrement")); + CHECK(missing(h,"iDirectionIncrementInDegrees")); + + CHECK(eq(h,"iDirectionIncrementGiven",0)); + CHECK(eq(h,"jDirectionIncrementGiven",1)); + + } + + CHECK(eq(h,"resolutionAndComponentFlags1",0)); + CHECK(eq(h,"resolutionAndComponentFlags2",0)); + CHECK(eq(h,"resolutionAndComponentFlags6",0)); + CHECK(eq(h,"resolutionAndComponentFlags7",0)); + CHECK(eq(h,"resolutionAndComponentFlags8",0)); + +} + +static void check_range(grib_handle* h,const parameter* p,double min,double max) +{ + if(!valueflg) + return; + + if(min < p->min1 || min > p->min2) + { + printf("warning: %s, field %d [%s]: %s minimum value %g is not in [%g,%g]\n",file,field,param, + p->name, + min,p->min1,p->min2); + printf(" => [%g,%g]\n",min < p->min1 ? min : p->min1, min > p->min2 ? min : p->min2); + + warning++; + } + + if(max < p->max1 || max > p->max2 ) + { + printf("warning: %s, field %d [%s]: %s maximum value %g is not in [%g,%g]\n",file,field,param, + p->name, + max,p->max1,p->max2); + printf(" => [%g,%g]\n",max < p->max1 ? max : p->max1, max > p->max2 ? max : p->max2); + warning++; + } + +} + + +static void point_in_time(grib_handle* h,const parameter* p,double min,double max) +{ + switch(get(h,"typeOfProcessedData")) + { + case 2: /* Analysis and forecast products */ + CHECK(eq(h,"productDefinitionTemplateNumber",0)); + break; + + case 3: /* Control forecast products */ + CHECK(eq(h,"productDefinitionTemplateNumber",1)); + CHECK(eq(h,"perturbationNumber",0)); + CHECK(ne(h,"numberOfForecastsInEnsemble",0)); + break; + + case 4: /* Perturbed forecast products */ + CHECK(eq(h,"productDefinitionTemplateNumber",1)); + if (is_lam) { + CHECK(le(h,"perturbationNumber",get(h,"numberOfForecastsInEnsemble"))); + } else { + CHECK(le(h,"perturbationNumber",get(h,"numberOfForecastsInEnsemble")-1)); + } + break; + + default: + printf("Unsupported typeOfProcessedData %ld\n",get(h,"typeOfProcessedData")); + CHECK(0); + break; + } + + if(get(h,"indicatorOfUnitOfTimeRange") == 11 || is_lam ) /* six hours */ + { + /* Six hourly is OK */ + ; + } + else + { + CHECK(eq(h,"indicatorOfUnitOfTimeRange",1));/* Hours */ + CHECK((get(h,"forecastTime") % 6) == 0); /* Every six hours */ + } + + check_range(h,p,min,max); + +} + +static void pressure_level(grib_handle* h,const parameter* p,double min,double max) +{ + long level = get(h,"level"); + + switch(level) + { + case 1000: + case 200: + case 250: + case 300: + case 500: + case 700: + case 850: + case 925: + case 50: + break; + default: + printf("%s, field %d [%s]: invalid pressure level %ld\n",file,field,param,level); + error++; + break; + } +} + +static void potential_vorticity_level(grib_handle* h,const parameter* p,double min,double max) +{ + long level = get(h,"level"); + + switch(level) + { + case 2: + break; + default: + printf("%s, field %d [%s]: invalid potential vorticity level %ld\n",file,field,param,level); + error++; + break; + } + +} + +static void potential_temperature_level(grib_handle* h,const parameter* p,double min,double max) +{ + long level = get(h,"level"); + + switch(level) + { + case 320: + break; + default: + printf("%s, field %d [%s]: invalid potential temperature level %ld\n",file,field,param,level); + error++; + break; + } +} + +static void statistical_process(grib_handle* h,const parameter* p,double min,double max) +{ + switch(get(h,"typeOfProcessedData")) + { + case 2: /* Analysis and forecast products */ + CHECK(eq(h,"productDefinitionTemplateNumber",8)); + break; + + case 3: /* Control forecast products */ + CHECK(eq(h,"productDefinitionTemplateNumber",11)); + break; + + case 4: /* Perturbed forecast products */ + CHECK(eq(h,"productDefinitionTemplateNumber",11)); + break; + + default: + printf("Unsupported typeOfProcessedData %ld\n",get(h,"typeOfProcessedData")); + error++; + return; + break; + } + + if (!is_lam) + { + if(get(h,"indicatorOfUnitOfTimeRange") == 11) /* six hours */ + { + /* Six hourly is OK */ + ; + } + else + { + CHECK(eq(h,"indicatorOfUnitOfTimeRange",1));/* Hours */ + CHECK((get(h,"forecastTime") % 6) == 0); /* Every six hours */ + } + } + else + { + if(get(h,"indicatorOfUnitOfTimeRange") == 10 ) /* three hours */ + { + /* Three hourly is OK */ + ; + } + else + { + CHECK(eq(h,"indicatorOfUnitOfTimeRange",1));/* Hours */ + CHECK((get(h,"forecastTime") % 3) == 0); /* Every three hours */ + } + } + + CHECK(eq(h,"numberOfTimeRange",1)); + CHECK(eq(h,"numberOfMissingInStatisticalProcess",0)); + CHECK(eq(h,"typeOfTimeIncrement",2)); + /*CHECK(eq(h,"indicatorOfUnitOfTimeForTheIncrementBetweenTheSuccessiveFieldsUsed",255));*/ + + CHECK(eq(h,"timeIncrementBetweenSuccessiveFields",0)); + + { + CHECK(eq(h,"minuteOfEndOfOverallTimeInterval",0)); + CHECK(eq(h,"secondOfEndOfOverallTimeInterval",0)); + + if (!is_lam) + { + CHECK((get(h,"endStep") % 6) == 0); /* Every six hours */ + } + else + { + CHECK((get(h,"endStep") % 3) == 0); /* Every three hours */ + } + CHECK(get(h,"endStep") <= 24*30); + } + + + if(get(h,"indicatorOfUnitForTimeRange") == 11) + { + /* Six hourly is OK */ + CHECK(get(h,"lengthOfTimeRange")*6 + get(h,"startStep") == get(h,"endStep")); + } + else if(get(h,"indicatorOfUnitForTimeRange") == 10) + { + /* Three hourly is OK */ + CHECK(get(h,"lengthOfTimeRange")*3 + get(h,"startStep") == get(h,"endStep")); + } + else + { + CHECK(eq(h,"indicatorOfUnitForTimeRange",1)); /* Hours */ + CHECK(get(h,"lengthOfTimeRange") + get(h,"startStep") == get(h,"endStep")); + } +} + +static void has_bitmap(grib_handle* h,const parameter* p,double min,double max) +{ + /* printf("bitMapIndicator %ld\n",get(h,"bitMapIndicator")); */ + CHECK(eq(h,"bitMapIndicator",0)); +} + +static void six_hourly(grib_handle* h,const parameter* p,double min,double max) +{ + statistical_process(h,p,min,max); + + if(get(h,"indicatorOfUnitForTimeRange") == 11) + CHECK(eq(h,"lengthOfTimeRange",1)); + else + CHECK(eq(h,"lengthOfTimeRange",6)); + + CHECK(get(h,"endStep") == get(h,"startStep") + 6); + check_range(h,p,min,max); +} + +static void three_hourly(grib_handle* h,const parameter* p,double min,double max) +{ + statistical_process(h,p,min,max); + + if(get(h,"indicatorOfUnitForTimeRange") == 11) + CHECK(eq(h,"lengthOfTimeRange",1)); + else + CHECK(eq(h,"lengthOfTimeRange",3)); + + CHECK(get(h,"endStep") == get(h,"startStep") + 3); + check_range(h,p,min,max); +} + +static void from_start(grib_handle* h,const parameter* p,double min,double max) +{ + long step = get(h,"endStep"); + statistical_process(h,p,min,max); + CHECK(eq(h,"startStep",0)); + + if(step == 0) + CHECK(min == 0 && max == 0); + else + { + check_range(h,p,min/step,max/step); + } +} + +static void given_level(grib_handle* h,const parameter* p,double min,double max) +{ + CHECK(ne(h,"typeOfFirstFixedSurface",255)); + CHECK(!missing(h,"scaleFactorOfFirstFixedSurface")); + CHECK(!missing(h,"scaledValueOfFirstFixedSurface")); + + CHECK(eq(h,"typeOfSecondFixedSurface",255)); + CHECK(missing(h,"scaleFactorOfSecondFixedSurface")); + CHECK(missing(h,"scaleFactorOfSecondFixedSurface")); +} + +static void predefined_level(grib_handle* h,const parameter* p,double min,double max) +{ + CHECK(ne(h,"typeOfFirstFixedSurface",255)); + CHECK(missing(h,"scaleFactorOfFirstFixedSurface")); + CHECK(missing(h,"scaledValueOfFirstFixedSurface")); + + CHECK(eq(h,"typeOfSecondFixedSurface",255)); + CHECK(missing(h,"scaleFactorOfSecondFixedSurface")); + CHECK(missing(h,"scaleFactorOfSecondFixedSurface")); +} + +static void predefined_thickness(grib_handle* h,const parameter* p,double min,double max) +{ + CHECK(ne(h,"typeOfFirstFixedSurface",255)); + CHECK(missing(h,"scaleFactorOfFirstFixedSurface")); + CHECK(missing(h,"scaledValueOfFirstFixedSurface")); + + CHECK(ne(h,"typeOfSecondFixedSurface",255)); + CHECK(missing(h,"scaleFactorOfSecondFixedSurface")); + CHECK(missing(h,"scaleFactorOfSecondFixedSurface")); +} + +static void given_thickness(grib_handle* h,const parameter* p,double min,double max) +{ + CHECK(ne(h,"typeOfFirstFixedSurface",255)); + CHECK(!missing(h,"scaleFactorOfFirstFixedSurface")); + CHECK(!missing(h,"scaledValueOfFirstFixedSurface")); + + CHECK(ne(h,"typeOfSecondFixedSurface",255)); + CHECK(!missing(h,"scaleFactorOfSecondFixedSurface")); + CHECK(!missing(h,"scaleFactorOfSecondFixedSurface")); +} + +void latlon_grid(grib_handle* h) +{ + long data_points = get(h,"numberOfDataPoints"); + long meridian = get(h,"numberOfPointsAlongAMeridian"); + long parallel = get(h,"numberOfPointsAlongAParallel"); + + long north = get(h,"latitudeOfFirstGridPoint"); + long south = get(h,"latitudeOfLastGridPoint"); + long west = get(h,"longitudeOfFirstGridPoint"); + long east = get(h,"longitudeOfLastGridPoint"); + + long ns = get(h,"jDirectionIncrement"); + long we = get(h,"iDirectionIncrement"); + + double dnorth = dget(h,"latitudeOfFirstGridPointInDegrees"); + double dsouth = dget(h,"latitudeOfLastGridPointInDegrees"); + double dwest = dget(h,"longitudeOfFirstGridPointInDegrees"); + double deast = dget(h,"longitudeOfLastGridPointInDegrees"); + + double dns = dget(h,"jDirectionIncrementInDegrees"); + double dwe = dget(h,"iDirectionIncrementInDegrees"); + + if(eq(h,"basicAngleOfTheInitialProductionDomain",0)) + { + CHECK(missing(h,"subdivisionsOfBasicAngle")); + } + else + { + /* long basic = get(h,"basicAngleOfTheInitialProductionDomain"); */ + /* long division = get(h,"subdivisionsOfBasicAngle"); */ + + CHECK(!missing(h,"subdivisionsOfBasicAngle")); + CHECK(!eq(h,"subdivisionsOfBasicAngle",0)); + } + + if(missing(h,"subdivisionsOfBasicAngle")) + { + CHECK(eq(h,"basicAngleOfTheInitialProductionDomain",0)); + } + + CHECK(meridian*parallel == data_points); + + CHECK(eq(h,"resolutionAndComponentFlags1",0)); + CHECK(eq(h,"resolutionAndComponentFlags2",0)); + CHECK(eq(h,"resolutionAndComponentFlags6",0)); + CHECK(eq(h,"resolutionAndComponentFlags7",0)); + CHECK(eq(h,"resolutionAndComponentFlags8",0)); + + CHECK(eq(h,"iDirectionIncrementGiven",1)); + CHECK(eq(h,"jDirectionIncrementGiven",1)); + + CHECK(eq(h,"numberOfOctectsForNumberOfPoints",0)); + CHECK(eq(h,"interpretationOfNumberOfPoints",0)); + + if(get(h,"iScansNegatively")) + { + long tmp = east; + double dtmp = deast; + + east = west; + west = tmp; + + deast = dwest; + dwest = dtmp; + } + + if(get(h,"jScansPositively")) + { + long tmp = north; + double dtmp = dnorth; + + north = south; + south = tmp; + + dnorth = dsouth; + dsouth = dtmp; + } + + if (!is_lam) CHECK(north > south); + if (!is_lam) CHECK(east > west); + + /* GRIB2 requires longitudes are always positive */ + CHECK(east >= 0); + CHECK(west >= 0); + + /* Check that the grid is symetrical */ + if (!is_lam) CHECK(north == -south); + if (!is_lam) CHECK(dnorth == -dsouth); + + /* + printf("meridian=%ld north=%ld south=%ld ns=%ld \n",meridian,north,south,ns); + printf("meridian=%ld north=%f south=%f ns=%f \n",meridian,dnorth,dsouth,dns); + printf("parallel=%ld east=%ld west=%ld we=%ld \n",parallel,east,west,we); + printf("parallel=%ld east=%f west=%f we=%f \n",parallel,deast,dwest,dwe); + */ + + if (!is_lam) CHECK(parallel == (east-west)/we + 1); + if (!is_lam) CHECK(fabs((deast-dwest)/dwe + 1 - parallel) < 1e-10); + + if (!is_lam) CHECK(meridian == (north-south)/ns + 1); + if (!is_lam) CHECK(fabs((dnorth-dsouth)/dns + 1 - meridian) < 1e-10 ); + + /* Check that the field is global */ + if (!is_lam) { + double area = (dnorth-dsouth) * (deast-dwest); + double globe = 360.0*180.0; + CHECK(area <= globe); + CHECK(area >= globe*0.95); + } + +} + +#define X(x) printf("%s=%ld ",#x,get(h,#x)) + +void check_parameter(grib_handle* h,double min,double max) +{ + int i; + int best = -1; + int match = -1; + + for(i = 0; i < NUMBER(parameters); i++) + { + int j = 0; + int matches = 0; + while(parameters[i].pairs[j].key != NULL) + { + long val = -1; + if(grib_get_long(h,parameters[i].pairs[j].key,&val) == GRIB_SUCCESS) + if(parameters[i].pairs[j].value == val) + matches++; + /* printf("%s %ld val -> %ld\n",parameters[i].pairs[j].key,parameters[i].pairs[j].value,val); */ + j++; + } + + if(matches == j && matches > best) + { + best = matches; + match = i; + } + } + + if(match >= 0) + { + + param = parameters[match].name; + i = 0; + while(parameters[match].checks[i]) + (*parameters[match].checks[i++])(h,¶meters[match],min,max); + + } + else + { + printf("%s, field %d [%s]: cannot match parameter\n",file,field,param); + X(discipline); + X(parameterCategory); + X(parameterNumber); + X(scaleFactorOfFirstFixedSurface); + X(scaleFactorOfSecondFixedSurface); + X(scaledValueOfFirstFixedSurface); + X(scaledValueOfSecondFixedSurface); + X(typeOfFirstFixedSurface); + X(typeOfSecondFixedSurface); + printf("\n"); + error++; + } +} + +void verify(grib_handle* h) +{ + double min = 0,max = 0; + + CHECK(eq(h,"editionNumber",2)); + CHECK(missing(h,"reserved") || eq(h,"reserved",0)); + + /* Section 1 */ + + CHECK(ge(h,"gribMasterTablesVersionNumber",4)); + CHECK(eq(h,"versionNumberOfGribLocalTables",0)); /* Local tables not used */ + + CHECK(eq(h,"significanceOfReferenceTime",1)); /* Start of forecast */ + + /* Check if the date is OK */ + { + long date = get(h,"date"); + /* CHECK(date > 20060101); */ + + CHECK( (date / 10000) == get(h,"year")); + CHECK( ((date % 10000) / 100) == get(h,"month")); + CHECK( ((date % 100)) == get(h,"day")); + } + + /* Only 00, 06 12 and 18 Cycle OK */ + CHECK(eq(h,"hour",0) || eq(h,"hour",6) || eq(h,"hour",12) || eq(h,"hour",18)); + CHECK(eq(h,"minute",0)); + CHECK(eq(h,"second",0)); + + CHECK(eq(h,"productionStatusOfProcessedData",4)||eq(h,"productionStatusOfProcessedData",5)); /* TIGGE Operational */ + + if (!is_lam){ + CHECK((get(h,"step") % 6) == 0); + } + else + { + CHECK((get(h,"step") % 3) == 0); + } + CHECK(ge(h,"startStep",0)); + CHECK(le(h,"endStep",30*24)); + + /* 2 = analysis or forecast , 3 = control forecast, 4 = perturbed forecast */ + CHECK(eq(h,"typeOfProcessedData",2)||eq(h,"typeOfProcessedData",3)||eq(h,"typeOfProcessedData",4)); + + /* TODO: validate local usage. Empty for now */ + /* CHECK(eq(h,"section2.sectionLength",5)); */ + + /* Section 3 */ + + CHECK(eq(h,"sourceOfGridDefinition",0)); /* Specified in Code table 3.1 */ + + switch(get(h,"gridDefinitionTemplateNumber")) + { + case 0: + case 1: /*rotated latlon*/ + latlon_grid(h); + break; + + case 40: + gaussian_grid(h); + break; + + + default: + printf("%s, field %d [%s]: Unsupported gridDefinitionTemplateNumber %ld\n", + file,field,param, + get(h,"gridDefinitionTemplateNumber")); + error++; + return; + break; + } + + /* If there is no bitmap, this should be true */ + /* CHECK(eq(h,"bitMapIndicator",255));*/ + + if(eq(h,"bitMapIndicator",255)) + CHECK(get(h,"numberOfValues") == get(h,"numberOfDataPoints")); + else + CHECK(get(h,"numberOfValues") <= get(h,"numberOfDataPoints")); + + /* Check values */ + CHECK(eq(h,"typeOfOriginalFieldValues",0)); /* Floating point */ + + if (valueflg) + { + + size_t count, n; + int e = grib_get_size(h,"values",&count); + double *values; + int i; + int bitmap = !eq(h,"bitMapIndicator",255); + + if(e) { + printf("%s, field %d [%s]: cannot number of values: %s\n",file,field,param,grib_get_error_message(e)); + error++; + return; + } + + values = (double*)malloc(sizeof(double)*(count)); + if(!values) + { + printf("%s, field %d [%s]: failed to allocate %ld bytes\n",file,field,param,(long)sizeof(double)*(count)); + error++; + return; + } + + CHECK(eq(h,"numberOfDataPoints",count)); + + n = count; + if((e = grib_get_double_array(h,"values",values,&count))) + { + printf("%s, field %d [%s]: cannot get values: %s\n",file,field,param,grib_get_error_message(e)); + free(values); + error++; + return; + } + + if(n != count) + { + printf("%s, field %d [%s]: value count changed %ld -> %ld\n",file,field,param,(long)count,(long)n); + free(values); + error++; + return; + } + + if(bitmap) + { + double missing = dget(h,"missingValue"); + + min = max = missing; + + for(i = 0; i < count ; i++) + { + if((min == missing) || ((values[i] != missing) && (min>values[i]))) min = values[i]; + if((max == missing) || ((values[i] != missing) && (maxvalues[i]) min = values[i]; + if(maxd_name[0] == '.') continue; + sprintf(tmp,"%s/%s",name,e->d_name); + scan(tmp); + } + + closedir(dir); + } + else + validate(name); +} + +void usage() +{ + printf("tigge_check [-w] [-v] [-z] [-g good] [-b bad] files ....\n"); + printf(" -l: check local area model fields\n"); + printf(" -v: check value ranges\n"); + printf(" -w: warning are treated as errors\n"); + printf(" -g: write good gribs\n"); + printf(" -b: write bad gribs\n"); + printf(" -z: return 0 to calling shell\n"); + exit(1); +} + +int main(int argc,const char** argv) +{ + int i; + int err = 0; + + for(i = 1; i < argc; i++) + { + if(argv[i][0] == '-') + { + switch(argv[i][1]) + { + case 'w': + warnflg++; + break; + + case 'z': + zeroflg++; + break; + + case 'v': + valueflg++; + break; + + case 'g': + if(++i == argc) usage(); + good = argv[i]; + fgood = fopen(good,"w"); + if(!fgood) { perror(good); exit(1); } + break; + + case 'b': + if(++i == argc) usage(); + bad = argv[i]; + fbad = fopen(bad,"w"); + if(!fbad) { perror(bad); exit(1); } + break; + + case 'l': + is_lam=1; + break; + + default: + usage(); + break; + } + } + else + { + break; + } + } + + if(i == argc) + usage(); + + for(; i < argc; i++) + { + error = 0; + scan(argv[i]); + if(error) err = 1; + if(warning && warnflg) err = 1; + } + + + if(fgood && fclose(fgood)) { perror(good); exit(1); } + if(fbad && fclose(fbad )) { perror(bad ); exit(1); } + + return zeroflg ? 0: err; +} diff --git a/tigge/tigge_check.h b/tigge/tigge_check.h new file mode 100644 index 000000000..37deaf8c2 --- /dev/null +++ b/tigge/tigge_check.h @@ -0,0 +1,677 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ +parameter parameters[] = { + { + "10_meter_u_velocity_sfc", + -80, + -20, + 20, + 80, + { + {"discipline", 0}, + {"parameterCategory", 2}, + {"parameterNumber", 2}, + {"scaleFactorOfFirstFixedSurface", 0}, + {"scaledValueOfFirstFixedSurface", 10}, + {"typeOfFirstFixedSurface", 103}, + {NULL, }, + }, + {&point_in_time, &given_level}, + }, + + { + "10_meter_v_velocity_sfc", + -80, + -20, + 20, + 80, + { + {"discipline", 0}, + {"parameterCategory", 2}, + {"parameterNumber", 3}, + {"scaleFactorOfFirstFixedSurface", 0}, + {"scaledValueOfFirstFixedSurface", 10}, + {"typeOfFirstFixedSurface", 103}, + {NULL, }, + }, + {&point_in_time, &given_level}, + }, + + { + "convective_available_potential_energy_sfc", + 0, + 0, + 0, + 17000, + { + {"discipline", 0}, + {"parameterCategory", 7}, + {"parameterNumber", 6}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfSecondFixedSurface", 8}, + {NULL, }, + }, + {&point_in_time, &predefined_thickness}, + }, + + { + "convective_inhibition_sfc", + -1500, + -1500, + 0, + 0, + { + {"discipline", 0}, + {"parameterCategory", 7}, + {"parameterNumber", 7}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfSecondFixedSurface", 8}, + {NULL, }, + }, + {&point_in_time, &predefined_thickness}, + }, + + { + "field_capacity_sfc", + 1e99, + -1e99, + 99, + -99, + { + {"discipline", 2}, + {"parameterCategory", 3}, + {"parameterNumber", 12}, + {"scaleFactorOfFirstFixedSurface", 0}, + {"scaleFactorOfSecondFixedSurface", 1}, + {"scaledValueOfFirstFixedSurface", 0}, + {"scaledValueOfSecondFixedSurface", 2}, + {"typeOfFirstFixedSurface", 106}, + {"typeOfSecondFixedSurface", 106}, + {NULL, }, + }, + {&point_in_time, &given_thickness, &has_bitmap}, + }, + + { + "geopotential_height_pl", + -810, + 20000, + 320, + 22000, + { + {"discipline", 0}, + {"parameterCategory", 3}, + {"parameterNumber", 5}, + {"typeOfFirstFixedSurface", 100}, + {NULL, }, + }, + {&point_in_time, &given_level, &pressure_level}, + }, + + { + "land_sea_mask_sfc", + 0, + 0, + 1, + 1, + { + {"discipline", 2}, + {"parameterCategory", 0}, + {"parameterNumber", 0}, + {"typeOfFirstFixedSurface", 1}, + {NULL, }, + }, + {&point_in_time, &predefined_level}, + }, + + { + "mean_sea_level_pressure_sfc", + 91000, + 95000, + 104000, + 107000, + { + {"discipline", 0}, + {"parameterCategory", 3}, + {"parameterNumber", 0}, + {"typeOfFirstFixedSurface", 101}, + {NULL, }, + }, + {&point_in_time, &predefined_level}, + }, + + { + "orography_sfc", + -1300, + -109, + 5600, + 56000, + { + {"discipline", 0}, + {"parameterCategory", 3}, + {"parameterNumber", 5}, + {"typeOfFirstFixedSurface", 1}, + {NULL, }, + }, + {&point_in_time, &predefined_level}, + }, + + { + "potential_temperature_pv", + 220, + 265, + 380, + 1200, + { + {"discipline", 0}, + {"parameterCategory", 0}, + {"parameterNumber", 2}, + {"typeOfFirstFixedSurface", 109}, + {NULL, }, + }, + {&point_in_time, &given_level, &potential_vorticity_level}, + }, + + { + "potential_vorticity_pt", + -0.005, + -1e-6, + 1e-6, + 0.002, + { + {"discipline", 0}, + {"parameterCategory", 2}, + {"parameterNumber", 14}, + {"scaleFactorOfFirstFixedSurface", 0}, + {"scaledValueOfFirstFixedSurface", 320}, + {"typeOfFirstFixedSurface", 107}, + {NULL, }, + }, + {&point_in_time, &given_level, &potential_temperature_level}, + }, + + { + "skin_temperature_sfc", + 180, + 210, + 320, + 355, + { + {"discipline", 0}, + {"parameterCategory", 0}, + {"parameterNumber", 17}, + {"typeOfFirstFixedSurface", 1}, + {NULL, }, + }, + {&point_in_time, &predefined_level}, + }, + + { + "snow_depth_water_equivalent_sfc", + -4e-19, + 0, + 12000, + 15000, + { + {"discipline", 0}, + {"parameterCategory", 1}, + {"parameterNumber", 60}, + {"typeOfFirstFixedSurface", 1}, + {NULL, }, + }, + {&point_in_time, &predefined_level}, + }, + + { + "snow_fall_water_equivalent_sfc", + -1e-9, + -1e-9, + 3.5, + 3.5, + { + {"discipline", 0}, + {"parameterCategory", 1}, + {"parameterNumber", 53}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfStatisticalProcessing", 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + + { + "soil_moisture_sfc", + -1e-18, + 0, + 450, + 500, + { + {"discipline", 2}, + {"parameterCategory", 0}, + {"parameterNumber", 22}, + {"scaleFactorOfFirstFixedSurface", 0}, + {"scaleFactorOfSecondFixedSurface", 1}, + {"scaledValueOfFirstFixedSurface", 0}, + {"scaledValueOfSecondFixedSurface", 2}, + {"typeOfFirstFixedSurface", 106}, + {"typeOfSecondFixedSurface", 106}, + {NULL, }, + }, + {&point_in_time, &given_thickness, &has_bitmap}, + }, + + { + "soil_temperature_sfc", + 200, + 230, + 310, + 350, + { + {"discipline", 2}, + {"parameterCategory", 0}, + {"parameterNumber", 2}, + {"scaleFactorOfFirstFixedSurface", 0}, + {"scaleFactorOfSecondFixedSurface", 1}, + {"scaledValueOfFirstFixedSurface", 0}, + {"scaledValueOfSecondFixedSurface", 2}, + {"typeOfFirstFixedSurface", 106}, + {"typeOfSecondFixedSurface", 106}, + {NULL, }, + }, + {&point_in_time, &given_thickness}, + }, + + { + "specific_humidity_pl", + -1e-2, + 1e-4, + 0.0001, + 0.050, + { + {"discipline", 0}, + {"parameterCategory", 1}, + {"parameterNumber", 0}, + {"typeOfFirstFixedSurface", 100}, + {NULL, }, + }, + {&point_in_time, &given_level, &pressure_level}, + }, + + { + "sunshine_duration_sfc", + 0, + 0, + 3600.00000001, + 3600.00000001, + { + {"discipline", 0}, + {"parameterCategory", 6}, + {"parameterNumber", 24}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfStatisticalProcessing", 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + + { + "surface_air_dew_point_temperature_sfc", + 130, + 230, + 280, + 320, + { + {"discipline", 0}, + {"parameterCategory", 0}, + {"parameterNumber", 6}, + {"typeOfFirstFixedSurface", 103}, + {NULL, }, + }, + {&point_in_time, &given_level}, + }, + + { + "surface_air_maximum_temperature_sfc", + 190, + 230, + 310, + 330, + { + {"discipline", 0}, + {"parameterCategory", 0}, + {"parameterNumber", 0}, + {"typeOfFirstFixedSurface", 103}, + {"typeOfStatisticalProcessing", 2}, + {NULL, }, + }, + {&six_hourly, &given_level}, + }, + + { + "surface_air_minimum_temperature_sfc", + 190, + 230, + 310, + 320, + { + {"discipline", 0}, + {"parameterCategory", 0}, + {"parameterNumber", 0}, + {"typeOfFirstFixedSurface", 103}, + {"typeOfStatisticalProcessing", 3}, + {NULL, }, + }, + {&six_hourly, &given_level}, + }, + + { + "surface_air_temperature_sfc", + 190, + 230, + 300, + 350, + { + {"discipline", 0}, + {"parameterCategory", 0}, + {"parameterNumber", 0}, + {"typeOfFirstFixedSurface", 103}, + {NULL, }, + }, + {&point_in_time, &given_level}, + }, + + { + "surface_pressure_sfc", + 48000, + 50500, + 103000, + 110000, + { + {"discipline", 0}, + {"parameterCategory", 3}, + {"parameterNumber", 0}, + {"typeOfFirstFixedSurface", 1}, + {NULL, }, + }, + {&point_in_time, &predefined_level}, + }, + + { + "temperature_pl", + 185, + 250, + 230, + 330, + { + {"discipline", 0}, + {"parameterCategory", 0}, + {"parameterNumber", 0}, + {"typeOfFirstFixedSurface", 100}, + {NULL, }, + }, + {&point_in_time, &given_level, &pressure_level}, + }, + + { + "time_integrated_outgoing_long_wave_radiation_sfc", + -1.5e+6, + -1.5e+6, + -300000, + -300000, + { + {"discipline", 0}, + {"parameterCategory", 5}, + {"parameterNumber", 5}, + {"typeOfFirstFixedSurface", 8}, + {"typeOfStatisticalProcessing", 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + + { + "time_integrated_surface_latent_heat_flux_sfc", + -4e+6, + -4e+6, + 700000, + 700000, + { + {"discipline", 0}, + {"parameterCategory", 0}, + {"parameterNumber", 10}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfStatisticalProcessing", 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + + { + "time_integrated_surface_net_solar_radiation_sfc", + 0, + 0, + 4e+6, + 4e+6, + { + {"discipline", 0}, + {"parameterCategory", 4}, + {"parameterNumber", 9}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfStatisticalProcessing", 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + + { + "time_integrated_surface_net_thermal_radiation_sfc", + -1.1e+6, + -1.1e+6, + 700000, + 700000, + { + {"discipline", 0}, + {"parameterCategory", 5}, + {"parameterNumber", 5}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfStatisticalProcessing", 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + + { + "time_integrated_surface_sensible_heat_flux_sfc", + -3e+6, + -3e+6, + 1.5e+6, + 1.5e+6, + { + {"discipline", 0}, + {"parameterCategory", 0}, + {"parameterNumber", 11}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfStatisticalProcessing", 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + + { + "total_cloud_cover_sfc", + 0, + 1e-10, + 100, + 100.00001, + { + {"discipline", 0}, + {"parameterCategory", 6}, + {"parameterNumber", 1}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfSecondFixedSurface", 8}, + {NULL, }, + }, + {&point_in_time, &predefined_thickness}, + }, + + { + "total_column_water_sfc", + 0.1, + 0.21, + 75, + 150, + { + {"discipline", 0}, + {"parameterCategory", 1}, + {"parameterNumber", 51}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfSecondFixedSurface", 8}, + {NULL, }, + }, + {&point_in_time, &predefined_thickness}, + }, + + { + "total_precipitation_sfc", + -1e-8, + -1e-8, + 45, + 45, + { + {"discipline", 0}, + {"parameterCategory", 1}, + {"parameterNumber", 52}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfStatisticalProcessing", 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + + { + "large_scale_precipitation_sfc", + -1e-8, + -1e-8, + 45, + 45, + { + {"discipline", 0}, + {"parameterCategory", 1}, + {"parameterNumber", 54}, + {"typeOfFirstFixedSurface", 1}, + {"typeOfStatisticalProcessing", 1}, + {NULL, }, + }, + {&from_start, &predefined_level}, + }, + + { + "u_velocity_pl", + -120, + -20, + 20, + 120, + { + {"discipline", 0}, + {"parameterCategory", 2}, + {"parameterNumber", 2}, + {"typeOfFirstFixedSurface", 100}, + {NULL, }, + }, + {&point_in_time, &given_level, &pressure_level}, + }, + + { + "u_velocity_pv", + -120, + -30, + 70, + 120, + { + {"discipline", 0}, + {"parameterCategory", 2}, + {"parameterNumber", 2}, + {"typeOfFirstFixedSurface", 109}, + {NULL, }, + }, + {&point_in_time, &given_level, &potential_vorticity_level}, + }, + + { + "v_velocity_pl", + -120, + -20, + 20, + 120, + { + {"discipline", 0}, + {"parameterCategory", 2}, + {"parameterNumber", 3}, + {"typeOfFirstFixedSurface", 100}, + {NULL, }, + }, + {&point_in_time, &given_level, &pressure_level}, + }, + + { + "v_velocity_pv", + -120, + -50, + 55, + 120, + { + {"discipline", 0}, + {"parameterCategory", 2}, + {"parameterNumber", 3}, + {"typeOfFirstFixedSurface", 109}, + {NULL, }, + }, + {&point_in_time, &given_level, &potential_vorticity_level}, + }, + + { + "wilting_point_sfc", + 1e99, + -1e99, + 99, + -99, + { + {"discipline", 2}, + {"parameterCategory", 0}, + {"parameterNumber", 26}, + {"scaleFactorOfFirstFixedSurface", 0}, + {"scaleFactorOfSecondFixedSurface", 1}, + {"scaledValueOfFirstFixedSurface", 0}, + {"scaledValueOfSecondFixedSurface", 2}, + {"typeOfFirstFixedSurface", 106}, + {"typeOfSecondFixedSurface", 106}, + {NULL, }, + }, + {&point_in_time, &given_thickness, &has_bitmap}, + }, + { + "maximum_wind_gust", + -80, + -20, + 20, + 80, + { + {"discipline", 0}, + {"parameterCategory", 2}, + {"parameterNumber", 22}, + {"scaleFactorOfFirstFixedSurface", 0}, + {"scaledValueOfFirstFixedSurface", 10}, + {"typeOfFirstFixedSurface", 103}, + {NULL, }, + }, + {&three_hourly, &given_level}, + }, + +}; diff --git a/tigge/tigge_name.c b/tigge/tigge_name.c new file mode 100755 index 000000000..e9f660aa5 --- /dev/null +++ b/tigge/tigge_name.c @@ -0,0 +1,267 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include + + +#define CHECK(a) check(#a,a) +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) + + +int error = 0; +const char* file = 0; +int field = 0; +const char* param = "unknown"; +int list_mode = 0; +int compare_mode = 0; + +void check(const char* name,int a) +{ + if(!a) { + printf("%s, field %d [%s]: %s failed\n",file,field,param,name); + error++; + } +} + + + + +long get(grib_handle *h,const char* what) +{ + int e; long val; + if((e = grib_get_long(h,what,&val)) != GRIB_SUCCESS) + { + printf("%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e)); + error++; + val = -1; + } + return val; +} + +char* sget(grib_handle *h,const char* what,char* val,size_t size) +{ + int e; + if((e = grib_get_string(h,what,val,&size)) != GRIB_SUCCESS) + { + printf("%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e)); + error++; + } + return val; +} + + +double dget(grib_handle *h,const char* what) +{ + int e; double val; + if((e = grib_get_double(h,what,&val)) != GRIB_SUCCESS) + { + printf("%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e)); + error++; + val = -1; + } + return val; +} + +int missing(grib_handle *h,const char* what) +{ + int err=0; + return grib_is_missing(h,what,&err); +} + +int eq(grib_handle *h,const char* what,long value) +{ + return get(h,what) == value; +} + +int ne(grib_handle *h,const char* what,long value) +{ + return get(h,what) != value; +} + +int ge(grib_handle *h,const char* what,long value) +{ + return get(h,what) >= value; +} + + +/* + */ + +void verify(grib_handle *h,const char* full,const char* base) +{ + char wmo_name[1024]; + char origin[80]; + char model[80]; + char expver[80]; + char levtype[80]; + char type[80]; + char tigge_name[80]; + + long level = 0; + long number = 0; + + sget(h,"type",type,sizeof(type)); + sget(h,"levtype",levtype,sizeof(levtype)); + + if(strcmp(type,"fc") != 0) + number = get(h,"number"); + + if(strcmp(levtype,"sfc") == 0) + strcpy(levtype,"sl"); + else + level = get(h,"level"); + + sprintf(wmo_name,"z_tigge_c_%s_%08ld%04ld00_%s_%s_%s_%s_%04ld_%03ld_%04ld_%s.grib", + sget(h,"origin",origin,sizeof(origin)), + compare_mode?0:get(h,"date"), + compare_mode?0:get(h,"time"), + sget(h,"model",model,sizeof(model)), + compare_mode?"xxxx":sget(h,"expver",expver,sizeof(expver)), + type, + levtype, + get(h,"step"), + number, + level, + sget(h,"tigge_short_name",tigge_name,sizeof(tigge_name)) + + ); + + + if(list_mode) + { + printf("%s\n",wmo_name); + } + else if(strcmp(base,wmo_name) != 0) { + printf("WRONG FILE NAME: %s\nCORRECT FILE NAME: %s\n\n",base,wmo_name); + error++; + } + +} + +void validate(const char* path) +{ + FILE *f = fopen(path,"r"); + grib_handle *h = 0; + int err; + int count = 0; + const char* base = path; + const char* p = path; + + file = path; + field = 0; + + while(*p) { + if(*p == '/') base = p+1; + p++; + } + + if(!f) { + printf("%s: %s\n",path,strerror(errno)); + error++; + return; + } + + while( (h= grib_handle_new_from_file(0,f,&err)) != NULL) + { + ++field; + verify(h,path,base); + grib_handle_delete(h); + count++; + param = "unknown"; + } + fclose(f); + + if(err) { + printf("%s: grib_handle_new_from_file: %s\n",path,grib_get_error_message(err)); + error++; + return; + } + + if(count == 0) { + printf("%s does not contain any GRIBs\n",path); + error++; + return; + } + +} + +void usage() +{ + printf("tigge_name [-l] [-c] files ....\n"); + exit(1); +} + +void scan(const char* name) +{ + DIR *dir; + if((dir = opendir(name)) != NULL) + { + struct dirent* e; + char tmp[1024]; + while( (e = readdir(dir)) != NULL) + { + if(e->d_name[0] == '.') continue; + sprintf(tmp,"%s/%s",name,e->d_name); + scan(tmp); + } + + closedir(dir); + } + else + validate(name); +} + +int main(int argc,const char** argv) +{ + int i = 1; + int err = 0; + + if(argc == 1) + usage(); + + for(; i < argc; i++) + { + error = 0; + + if(argv[i][0] == '-') + { + switch(argv[i][1]) + { + case 'l': + list_mode = 1; + break; + + case 'c': + list_mode = 1; + compare_mode = 1; + break; + + default: + usage(); + break; + } + } + else scan(argv[i]); + + if(error) err = 1; + } + + + return err; +} diff --git a/tigge/tigge_split.c b/tigge/tigge_split.c new file mode 100755 index 000000000..32f9c6d08 --- /dev/null +++ b/tigge/tigge_split.c @@ -0,0 +1,254 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define CHECK(a) check(#a,a) +#define NUMBER(a) (sizeof(a)/sizeof(a[0])) + + +const char* file = 0; +int field = 0; +const char* param = "unknown"; + +int print_names = 0; +int unique = 0; + +void check(const char* name,int a) +{ + if(!a) { + fprintf(stderr,"%s, field %d [%s]: %s failed\n",file,field,param,name); + exit(1); + } +} + + + + +long get(grib_handle *h,const char* what) +{ + int e; long val; + if((e = grib_get_long(h,what,&val)) != GRIB_SUCCESS) + { + fprintf(stderr,"%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e)); + exit(1); + val = -1; + } + return val; +} + +char* sget(grib_handle *h,const char* what,char* val,size_t size) +{ + int e; + if((e = grib_get_string(h,what,val,&size)) != GRIB_SUCCESS) + { + fprintf(stderr,"%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e)); + exit(1); + } + return val; +} + + +double dget(grib_handle *h,const char* what) +{ + int e; double val; + if((e = grib_get_double(h,what,&val)) != GRIB_SUCCESS) + { + fprintf(stderr,"%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e)); + exit(1); + val = -1; + } + return val; +} + +int missing(grib_handle *h,const char* what) +{ + int err=0; + return grib_is_missing(h,what,&err); +} + +int eq(grib_handle *h,const char* what,long value) +{ + return get(h,what) == value; +} + +int ne(grib_handle *h,const char* what,long value) +{ + return get(h,what) != value; +} + +int ge(grib_handle *h,const char* what,long value) +{ + return get(h,what) >= value; +} + + +/* + */ + +void split(grib_handle *h) +{ + char wmo_name[1024]; + char origin[80]; + char model[80]; + char expver[80]; + char levtype[80]; + char type[80]; + char tigge_name[80]; + + long level = 0; + long number = 0; + + size_t size; + const void* buffer; + FILE *f; + + sget(h,"type",type,sizeof(type)); + sget(h,"levtype",levtype,sizeof(levtype)); + + if(strcmp(type,"fc") != 0) + number = get(h,"number"); + + if(strcmp(levtype,"sfc") == 0) + strcpy(levtype,"sl"); + else + level = get(h,"level"); + + sprintf(wmo_name,"z_tigge_c_%s_%08ld%04ld00_%s_%s_%s_%s_%04ld_%03ld_%04ld_%s.grib", + sget(h,"origin",origin,sizeof(origin)), + get(h,"date"), + get(h,"time"), + sget(h,"model",model,sizeof(model)), + sget(h,"expver",expver,sizeof(expver)), + type, + levtype, + get(h,"endStep"), + number, + level, + sget(h,"tigge_short_name",tigge_name,sizeof(tigge_name)) + + ); + + if(print_names) printf("%s\n",wmo_name); + + if(unique) + { + if(access(wmo_name,F_OK) == 0) + { + fprintf(stderr,"tigge_split: %s already exists\n",wmo_name); + exit(1); + } + } + + f = fopen(wmo_name,"w"); + if(!f) { perror(wmo_name); exit(1); } + + CHECK(grib_get_message(h,&buffer,&size) == 0); + + if(fwrite(buffer,1,size,f) != size) { + perror(wmo_name); + exit(1); + } + + if(fclose(f)) { perror(wmo_name); exit(1); } + + + +} + +void validate(const char* path) +{ + FILE *f = fopen(path,"r"); + grib_handle *h = 0; + int err; + int count = 0; + + if(!f) { + fprintf(stderr,"%s: %s\n",path,strerror(errno)); + exit(1); + } + + while( (h= grib_handle_new_from_file(0,f,&err)) != NULL) + { + ++field; + split(h); + grib_handle_delete(h); + count++; + param = "unknown"; + } + fclose(f); + + if(err) { + fprintf(stderr,"%s: grib_handle_new_from_file: %s\n",path,grib_get_error_message(err)); + exit(1); + } + + if(count == 0) { + fprintf(stderr,"%s does not contain any GRIBs\n",path); + exit(1); + } + +} + +void usage() +{ + printf("tigge_split [-p] files ....\n"); + printf(" -p: print names of files created\n"); + exit(1); +} + +int main(int argc,const char** argv) +{ + int i = 1; + + for(i = 1; i < argc; i++) + { + if(argv[i][0] == '-') + { + switch(argv[i][1]) + { + case 'p': + print_names++; + break; + + case 'u': + unique++; + break; + + default: + usage(); + break; + } + } + else + { + break; + } + } + + if(i == argc) + usage(); + + for(; i < argc; i++) + validate(argv[i]); + + return 0; +} diff --git a/tigge/tools/convert.pm b/tigge/tools/convert.pm new file mode 100755 index 000000000..ab4fa7fbe --- /dev/null +++ b/tigge/tools/convert.pm @@ -0,0 +1,113 @@ +package tigge::tools::convert; +use Exporter; +use base qw(Exporter); +@EXPORT=qw(TiggeNameToGrib1 TiggeAbbreviationToGrib1 Grib1ToGrib2 Grib1ToNewId); + + +use DBI; + +use strict; + +sub TiggeNameToGrib1 { + my ( $self ) = @_; + + my $DHB1 = DBI->connect("dbi:Pg(RaiseError=>1):dbname=tigge_prod;host=datasvc","max", ""); + + my $prepare = "select grib1_numbers, name, levtype from parameters"; + my $sth = $DHB1->prepare( $prepare ); + $sth->execute(); + + my %result; + + while( my ( $grib1, $name, $levtype ) = $sth->fetchrow_array() ) { + $result{ $grib1 . "_" . $levtype } = lc $name; + } + + return \%result +} + + +sub TiggeAbbreviationToGrib1 { + my ( $self ) = @_; + + my $DHB1 = DBI->connect("dbi:Pg(RaiseError=>1):dbname=tigge_prod;host=datasvc","max", ""); + + my $prepare = "select grib1_numbers, abbreviation, levtype from parameters"; + my $sth = $DHB1->prepare( $prepare ); + $sth->execute(); + + my %result; + + while( my ( $grib1, $abbreviation, $levtype ) = $sth->fetchrow_array() ) { + $result{ $grib1 . "_" . $levtype } = lc $abbreviation; + } + + return \%result +} + + +sub Grib1ToGrib2 { + my ( $self ) = @_; + + my $DHB1 = DBI->connect("dbi:Pg(RaiseError=>1):dbname=tigge_prod;host=datasvc","max", ""); + + my $prepare = "select grib1_numbers from parameters"; + my $sth1 = $DHB1->prepare( $prepare ); + $sth1->execute(); + + my %result; + + while( my ( $grib1 ) = $sth1->fetchrow_array() ){ + + my $DHB2 = DBI->connect("dbi:Pg(RaiseError=>1):dbname=metdb_test;host=datasvc","max", ""); + + my $prepare = "select distinct levtype from grib2_test where param_id=?"; + my $sth2 = $DHB2->prepare( $prepare ); + $sth2->execute( $grib1 ); + + while( my ( $levtype ) = $sth2->fetchrow_array() ){ + + my $prepare = "select keyword, value from grib2_test where param_id=? and levtype=?"; + my $sth2 = $DHB2->prepare( $prepare ); + $sth2->execute( $grib1, $levtype ); + + my %key_value; + + while( my ( $key, $value ) = $sth2->fetchrow_array() ){ + + $key_value{ $key } = $value if( $value ne "255" and $value ne "pressure level [Pa]" ) + } + + $result{ $grib1 . "_" . $levtype } = \%key_value + } + } + + return \%result +} + + +sub Grib1ToNewId { + my ( $self ) = @_; + + my $DHB1 = DBI->connect("dbi:Pg(RaiseError=>1):dbname=tigge_prod;host=datasvc","max", ""); + + my $prepare = "select grib1_numbers from parameters"; + my $sth1 = $DHB1->prepare( $prepare ); + $sth1->execute(); + + my %result; + + while( my ( $NewId ) = $sth1->fetchrow_array() ){ + + my $grib1 = $NewId; + $grib1 =~ s/^(\d\d\d)(\d\d\d)\Z/\2.\1/; + $grib1 =~ s/^(\d{1,3})\Z/\1.128/; + + $grib1 =~ s/^0*//; + $result{ $grib1 } = $NewId + 0; + } + + return \%result +} + +1; diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt new file mode 100644 index 000000000..c53a4c887 --- /dev/null +++ b/tools/CMakeLists.txt @@ -0,0 +1,35 @@ +# tools library + +ecbuild_add_library( TARGET grib_tools + TYPE STATIC + SOURCES grib_tools.c grib_options.c grib_tools.h + LIBS grib_api ) + +# tools binaries + +list( APPEND grib_tools_bins + grib_keys grib_histogram grib_error grib_add big2gribex + grib_debug grib_info grib_filter grib_ls grib_dump + grib2ppm grib_set grib_get grib_get_data grib_copy grib_repair + grib_packing grib_cmp grib_convert grib_distance grib_corruption_check + grib_compare parser grib_count grib_index_build + gg_sub_area_check grib_moments grib_to_netcdf ) + +foreach( tool ${grib_tools_bins} ) + + # here we use the fact that each tool has only one C file that matches its name + ecbuild_add_executable( TARGET ${tool} + SOURCES ${tool}.c + LIBS grib_tools ) + +endforeach() + + ecbuild_add_executable( TARGET grib_list_keys + SOURCES list_keys.c + LIBS grib_tools ) + + +# missing noinst_PROGRAMS + +# missing grib1to2 + diff --git a/tools/Makefile.am b/tools/Makefile.am new file mode 100644 index 000000000..5691ca5dc --- /dev/null +++ b/tools/Makefile.am @@ -0,0 +1,78 @@ + +AM_CFLAGS = @WARN_PEDANTIC@ @WERROR@ -DYYDEBUG + +AM_YFLAGS = -d + +noinst_LTLIBRARIES = libgrib_tools.la + +libgrib_tools_la_SOURCES = grib_tools.c \ + grib_options.c + + +bin_PROGRAMS = grib_keys grib_histogram grib_error grib_add big2gribex \ + grib_debug grib_info grib_filter grib_ls grib_dump \ + grib2ppm grib_set grib_get grib_get_data grib_copy grib_repair \ + grib_packing grib_cmp grib_convert grib_distance grib_corruption_check\ + grib_compare grib_list_keys parser grib_count grib_index_build grib1to2 \ + gg_sub_area_check grib_moments grib_to_netcdf + +noinst_PROGRAMS = gaussian grib_diff mars_request xref all_keys #compile #dumpload grib_compare_old + +#test_SOURCES = test.c + +#dumpload_SOURCES = dumpload.c loady.y loadl.l load.c dump.c load.h + +grib_corruption_check_SOURCES = grib_corruption_check.c +grib_moments_SOURCES = grib_moments.c +grib_to_netcdf_SOURCES = grib_to_netcdf.c +grib_dump_SOURCES = grib_dump.c +grib_count_SOURCES = grib_count.c +grib_cmp_SOURCES = grib_cmp.c +grib_packing_SOURCES = grib_packing.c +grib_histogram_SOURCES = grib_histogram.c +grib_distance_SOURCES = grib_distance.c +grib_debug_SOURCES = grib_debug.c +parser_SOURCES = parser.c +grib_list_keys_SOURCES = list_keys.c +all_keys_SOURCES = all_keys.c +grib2ppm_SOURCES = grib2ppm.c +grib_info_SOURCES = grib_info.c +grib_keys_SOURCES = grib_keys.c + +grib_ls_SOURCES = grib_ls.c +grib_copy_SOURCES = grib_copy.c +grib_repair_SOURCES = grib_repair.c +grib_convert_SOURCES = grib_convert.c +grib_filter_SOURCES = grib_filter.c +grib_set_SOURCES = grib_set.c +grib_index_build_SOURCES = grib_index_build.c +grib_get_SOURCES = grib_get.c +grib_get_data_SOURCES = grib_get_data.c + +grib_add_SOURCES = grib_add.c +grib_error_SOURCES = grib_error.c +grib_diff_SOURCES = grib_diff.c +grib_compare_SOURCES = grib_compare.c +big2gribex_SOURCES = big2gribex.c +mars_request_SOURCES = mars_request.c +xref_SOURCES = xref.c +#compile_SOURCES = compile.c +gaussian_SOURCES = gaussian.c +gg_sub_area_check_SOURCES = gg_sub_area_check.c +grib1to2_SOURCES = grib1to2.txt + +INCLUDES = -I$(top_builddir)/src + +LDADD = libgrib_tools.la $(top_builddir)/src/libgrib_api.la +DEPENDENCIES = $(LDADD) + +## Make sure these will be cleaned even when they're not built by +## default. +CLEANFILES = libgrib_tools.la + +grib1to2$(EXEEXT): grib1to2.txt + rm -f grib1to2 + sed "s:toolsdir:$(bindir):" grib1to2.txt > grib1to2 + chmod +x grib1to2 + +noinst_HEADERS = grib_tools.h diff --git a/tools/all_keys.c b/tools/all_keys.c new file mode 100755 index 000000000..f5abda411 --- /dev/null +++ b/tools/all_keys.c @@ -0,0 +1,36 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +int main(int argc, char *argv[]) +{ + int i = 0; + int fail = 0; + + grib_context* c = grib_context_get_default(); + grib_action* a=NULL; + + for(i = 1; i < argc; i++){ + a=grib_parse_file(c,argv[i]); + if (!a) + { + fail++; + printf("FAILED\n"); + exit(1); + } + + while (a) { + if (*(a->name) != '_') printf("%s\n",a->name); + a=a->next; + } + } + return fail; +} diff --git a/tools/big2gribex.c b/tools/big2gribex.c new file mode 100644 index 000000000..6f34d9a06 --- /dev/null +++ b/tools/big2gribex.c @@ -0,0 +1,83 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: big2gribex + * + * Description: + * + * + * + * + */ + +#include +#include +#include + +#include "grib_api.h" +void usage(char*); + +int main(int argc, char *argv[]) +{ + grib_handle* h = NULL; + FILE* inf = NULL; + FILE* ouf = NULL; + char* infile=0; + char* oufile=0; + int err = 0; + size_t size; + const void* buffer=NULL; + + if (argc < 3) usage(argv[0]); + infile=argv[1]; + oufile=argv[2]; + + inf = fopen(infile,"r"); + if(!inf) { + perror(infile); + exit(1); + } + + ouf = fopen(oufile,"w"); + if(!ouf) { + perror(oufile); + exit(1); + } + + while((h = grib_handle_new_from_file(0,inf,&err)) != NULL) { + grib_update_sections_lengths(h); + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + if(fwrite(buffer,1,size,ouf) != size) { + perror(oufile); + exit(1); + } + } + + grib_handle_delete(h); + + if(fclose(inf)) { + perror(infile); + exit(1); + } + + if(fclose(ouf)) { + perror(oufile); + exit(1); + } + + + return 0; +} + +void usage(char* progname) { + printf("\nUsage: %s grib_in grib_out\n",progname); + exit(1); +} diff --git a/tools/compile.c b/tools/compile.c new file mode 100755 index 000000000..01a52523b --- /dev/null +++ b/tools/compile.c @@ -0,0 +1,113 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include + +#include "grib_api_internal.h" + +typedef struct list { + char path[1024]; + char name[1024]; + struct list* next; +} list; + +int main(int argc, char *argv[]) +{ + int i = 0; + int j = 0; + int fail = 0; + grib_compiler compiler = {0,}; + + grib_context* c = grib_context_get_default(); + grib_action *a; + + list *first = NULL; + list *l = NULL; + + compiler.out = stdout; + compiler.max = 4096; + + printf("#include \"grib_api_internal.h\"\n\n"); + for(i = 1; i < argc; i++){ + + char name[1024]; + const char* p = argv[i]; + const char* path; + while(*p && strncmp(p,"definitions",strlen("definitions"))) p++; + path = p; + + if(!p) { + fprintf(stderr,"Invalid name %s\n",argv[i]); + exit(1); + } + + strcpy(name,"grib_"); + j = strlen(name); + while(*p) { + if(isalnum(*p)) { + name[j++] = *p; + } + else { + name[j++] = '_'; + } + p++; + } + name[j++] = 0; + + printf("static grib_action* %s(grib_context *ctx) {\n",name); + printf("grib_action* a[%d] = {0,};\n\n",compiler.max); + printf("grib_action* b[%d] = {0,};\n\n",compiler.max); + + compiler.cnt = 0; + + printf("/* %s */\n", path); + if(!(a = grib_parse_file(c,argv[i]))) + { + fail++; + exit(1); + } + else + { + grib_compile_action_branch(a,&compiler,NULL); + + } + printf("return a[0];\n"); + printf("}\n"); + + l = calloc(sizeof(list),1); + l->next = first; + + strcpy(l->name,name); + strcpy(l->path,path); + first = l; + + + } + + printf("void grib_load_compiled_definitions(grib_context* ctx){\n"); + printf("grib_action_file* af;\n"); + printf("ctx = ctx ? ctx : grib_context_get_default();\n\n"); + printf("if(!ctx->grib_reader)\n"); + printf(" ctx->grib_reader =(grib_action_file_list*)grib_context_malloc_clear_persistent(ctx,sizeof(grib_action_file_list));"); + + while(l) { + printf("af =(grib_action_file*)grib_context_malloc_clear_persistent(ctx,sizeof(grib_action_file));\n"); + printf("af->root = %s(ctx);\n",l->name); + printf("af->filename = grib_context_strdup_persistent(ctx,\"COMPILED/%s\");\n",l->path); + printf("grib_push_action_file(af,ctx->grib_reader);\n\n"); + + l = l->next; + } + printf("}\n"); + + printf("int main(int argc,char* argv[]) {grib_load_compiled_definitions(0);return 0 ;}\n"); + + return fail; +} diff --git a/tools/dump.c b/tools/dump.c new file mode 100644 index 000000000..c44c4ea2a --- /dev/null +++ b/tools/dump.c @@ -0,0 +1,245 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include +#include +#include +#include + + + +int dump_values(FILE* out,grib_handle* h,const char *name,int missingOK) +{ + size_t len = 0; + int err; + int type; + + char *sval = NULL; + unsigned char *uval = NULL; + double *dval = NULL; + long *lval = NULL; + + + int i; + + if((err = grib_get_type(h,name,&type)) != GRIB_SUCCESS) + { + printf("# Oops... cannot get type of [%s]: %s\n",name, + grib_get_error_message(err)); + return err; + } + + if((err = grib_get_size(h,name,&len)) != GRIB_SUCCESS) + { + printf("# Oops... cannot get size of [%s]: %s\n",name, + grib_get_error_message(err)); + return err; + } + + switch(type) + { + case GRIB_TYPE_STRING: + + sval = grib_context_malloc(h->context,len*sizeof(char)); + + if((err = grib_get_string(h,name,sval,&len)) != GRIB_SUCCESS) + { + printf("# Oops... cannot get string value of [%s]: %s\n", + name,grib_get_error_message(err)); + } + else + { + fprintf(out,"%s='%s';\n",name,sval); + } + + grib_context_free(h->context,sval); + + if(err) return err; + + break; + + case GRIB_TYPE_LONG: + lval = grib_context_malloc(h->context,len*sizeof(long)); + + if((err = grib_get_long_array(h,name,lval,&len)) != GRIB_SUCCESS) + { + printf("# Oops... cannot get long value of [%s]: %s\n", + name,grib_get_error_message(err)); + } + else + { + if(len == 1) + { + if(missingOK && lval[0] == GRIB_MISSING_LONG) + fprintf(out,"%s = missing;\n",name); + else + fprintf(out,"%s = %ld;\n",name,lval[0]); + } + else { + fprintf(out,"%s = {", name); + if(len >= 10) fprintf(out," # %ld\n",(long)len); + for(i = 0; i < len; i++){ + fprintf(out,"%ld, ",lval[i]); + if((i+1)%10 == 0) + fprintf(out,"\n"); + } + fprintf(out,"};\n"); + } + } + + grib_context_free(h->context,lval); + + if(err) return err; + break; + + case GRIB_TYPE_DOUBLE: + dval = grib_context_malloc(h->context,len*sizeof(double)); + + if((err = grib_get_double_array(h,name,dval,&len)) != GRIB_SUCCESS) + { + printf("# Oops... cannot get double value of [%s]: %s\n", + name,grib_get_error_message(err)); + } + else + { + if(len == 1) + { + if(missingOK && dval[0] == GRIB_MISSING_DOUBLE) + fprintf(out,"%s = missing;\n",name); + else { + fprintf(out,"%s = %g;\n",name,dval[0]); + } + } + else { + fprintf(out,"%s = { \n",name); + if(len >= 10) fprintf(out," # %ld\n",(long)len); + for(i = 0; i < len; i++) + { + fprintf(out,"%f, ",dval[i]); + if((i+1)%10 == 0) + fprintf(out,"\n"); + } + fprintf(out,"};\n"); + } + } + + grib_context_free(h->context,dval); + + if(err) return err; + break; + + case GRIB_TYPE_BYTES: + uval = grib_context_malloc(h->context,len*sizeof(unsigned char)); + + if((err = grib_get_bytes(h,name,uval,&len)) != GRIB_SUCCESS) + { + printf("# Oops... cannot get bytes value of [%s]: %s\n", + name,grib_get_error_message(err)); + } + else + { + fprintf(out,"%s = { \n",name); + if(len >= 10) fprintf(out," # %ld\n",(long)len); + for(i = 0; i < len; i++) + { + fprintf(out,"%02x, ",uval[i]); + if((i+1)%10 == 0) + fprintf(out,"\n"); + } + fprintf(out,"};\n"); + + } + + grib_context_free(h->context,uval); + + if(err) return err; + + break; + + case GRIB_TYPE_LABEL: + break; + + case GRIB_TYPE_SECTION: + break; + + default: + printf("Cannot compare [%s], unsupported type %d\n",name,type); + return GRIB_UNABLE_TO_COMPARE_ACCESSORS; + break; + } + + return GRIB_SUCCESS; + +} + +static int dump_handle(FILE* out,grib_handle* h) +{ + grib_keys_iterator* iter = grib_keys_iterator_new(h, + GRIB_KEYS_ITERATOR_SKIP_READ_ONLY|GRIB_KEYS_ITERATOR_SKIP_DUPLICATES,NULL); + + while(grib_keys_iterator_next(iter)) + { + grib_accessor* a = grib_keys_iterator_get_accessor(iter); + dump_values(out,h,grib_keys_iterator_get_name(iter), + a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING); + } + + grib_keys_iterator_delete(iter); + + return 0; +} + +int dump_file(const char* file,const char* out) +{ + FILE *f = fopen(file,"r"); + FILE *o = fopen(out,"w"); + int e = 0; + grib_handle *h; + const void* b; + size_t s; + int count = 0; + char identifier[10]; + size_t size = sizeof(identifier); + + if(!f) { + perror(file); + exit(1); + } + + h = grib_handle_new_from_file(NULL,f,&e); + + while(h) + { + GRIB_CHECK(grib_get_message(h,&b,&s),file); + GRIB_CHECK(grib_get_string(h,"identifier",identifier,&size),file); + + ++count; + + + + fprintf(o,"%s { # %d\n",identifier,count); + dump_handle(o,h); + fprintf(o,"};\n"); + + grib_handle_delete(h); + + e = 0; + + h = grib_handle_new_from_file(NULL,f,&e); + } + + + GRIB_CHECK(e,file); + + return 0; + +} + diff --git a/tools/dumpload.c b/tools/dumpload.c new file mode 100644 index 000000000..22efd59b3 --- /dev/null +++ b/tools/dumpload.c @@ -0,0 +1,58 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include +#include +#include +#include "load.h" + +char *prog; + +void usage(const char *prog) +{ + fprintf(stderr,"%s: [-l] in out\n",prog); + exit(1); +} + +int main(int argc, char *argv[]) +{ + extern char *optarg; + extern int optind, opterr, optopt; + int c; + int lflag = 0; + prog = argv[0]; + + setbuf(stdout,0); + + while((c = getopt(argc, argv,"l")) != EOF) { + switch(c) { + case 'l': + lflag++; + break; + + default: + usage(prog); + break; + } + } + + if(argc-optind < 2) usage(prog); + + + if(lflag) + return load_file(argv[argc-2],argv[argc-1]); + else + return dump_file(argv[argc-2],argv[argc-1]); + + return 0; + +} + diff --git a/tools/filter_rules b/tools/filter_rules new file mode 100644 index 000000000..e3b0f434e --- /dev/null +++ b/tools/filter_rules @@ -0,0 +1,130 @@ +# Geopotential height +if ( ( level == 500 || level == 1000 ) && indicatorOfParameter == 7 ) { + print "found indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]"; + transient oldtype = type ; + set identificationOfOriginatingGeneratingSubCentre = "ecmf" ; + set gribTablesVersionNo = 128; + set indicatorOfParameter = 129 ; + set localDefinitionNumber = 1 ; + set marsClass="od"; + set marsStream="kwbc"; + # Negatively/Positively Perturbed Forecast + if ( oldtype == 2 || oldtype == 3 ) { + set marsType="pf"; + set experimentVersionNumber="4001"; + } + # Control Forecast + if ( oldtype == 1 ) { + set marsType="cf"; + set experimentVersionNumber="0001"; + } + set numberOfForecastsInEnsemble=11; + write; + write "[indicatorOfParameter].grib"; + print "indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]"; + print; +} + +# U wind +if ( level == 250 && indicatorOfParameter == 33 ) { + print "found indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]"; + transient oldtype = type ; + set identificationOfOriginatingGeneratingSubCentre=98; + set gribTablesVersionNo = 128; + set indicatorOfParameter = 131 ; + set localDefinitionNumber=1; + set marsClass="od"; + set marsStream="kwbc"; + # Negatively/Positively Perturbed Forecast + if ( oldtype == 2 || oldtype == 3 ) { + set marsType="pf"; + set experimentVersionNumber="4001"; + } + # Control Forecast + if ( oldtype == 1 ) { + set marsType="cf"; + set experimentVersionNumber="0001"; + } + set numberOfForecastsInEnsemble=11; + write ; + print "indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]"; + print; +} + +# V wind +if ( level == 250 && indicatorOfParameter == 34 ) { + print "found indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]"; + transient oldtype = type ; + set identificationOfOriginatingGeneratingSubCentre=98; + set gribTablesVersionNo = 128; + set indicatorOfParameter = 132; + set localDefinitionNumber=1; + set marsClass="od"; + set marsStream="kwbc"; + # Negatively/Positively Perturbed Forecast + if ( oldtype == 2 || oldtype == 3 ) { + set marsType="pf"; + set experimentVersionNumber="4001"; + } + # Control Forecast + if ( oldtype == 1 ) { + set marsType="cf"; + set experimentVersionNumber="0001"; + } + set numberOfForecastsInEnsemble=11; + write ; + print "indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]"; + print; +} + +# Relative humidity +if ( level == 700 && indicatorOfParameter == 52 ) { + print "found indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]"; + transient oldtype = type ; + set identificationOfOriginatingGeneratingSubCentre = 98; + set gribTablesVersionNo = 128; + set indicatorOfParameter = 157 ; + set localDefinitionNumber=1; + set marsClass="od"; + set marsStream="kwbc"; + # Negatively/Positively Perturbed Forecast + if ( oldtype == 2 || oldtype == 3 ) { + set marsType="pf"; + set experimentVersionNumber="4001"; + } + # Control Forecast + if ( oldtype == 1 ) { + set marsType="cf"; + set experimentVersionNumber="0001"; + } + set numberOfForecastsInEnsemble=11; + write; + print "indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]"; + print; +} + +# Temperature +if ( level == 850 && indicatorOfParameter == 11 ) { + print "found indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]"; + transient oldtype = type ; + set identificationOfOriginatingGeneratingSubCentre=98; + set gribTablesVersionNo = 128; + set indicatorOfParameter = 130; + set localDefinitionNumber=1; + set marsClass="od"; + set marsStream="kwbc"; + # Negatively/Positively Perturbed Forecast + if ( oldtype == 2 || oldtype == 3 ) { + set marsType="pf"; + set experimentVersionNumber="4001"; + } + # Control Forecast + if ( oldtype == 1 ) { + set marsType="cf"; + set experimentVersionNumber="0001"; + } + set numberOfForecastsInEnsemble=11; + write; + print "indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]"; + print; +} diff --git a/tools/gaussian.c b/tools/gaussian.c new file mode 100644 index 000000000..b292171fd --- /dev/null +++ b/tools/gaussian.c @@ -0,0 +1,43 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include +#include + +#include "grib_api.h" + +void usage(const char *prog) +{ + fprintf(stderr,"%s: N\n",prog); + exit(1); +} +int main(int argc, const char *argv[]) +{ + double *latitudes; + int count = 0; + int n,i; + + + if(argc != 2) usage(argv[0]); + + n = atol(argv[1]); + count = n*2; + + latitudes = (double*)malloc(count*sizeof(double)); + assert(latitudes); + + assert(grib_get_gaussian_latitudes(n,latitudes) == 0); + + for(i = 0; i < count ; i++) + printf("%g\n",latitudes[i]); + + return 0; +} diff --git a/tools/gg_sub_area_check.c b/tools/gg_sub_area_check.c new file mode 100644 index 000000000..d10978140 --- /dev/null +++ b/tools/gg_sub_area_check.c @@ -0,0 +1,131 @@ +#include "grib_api.h" +#include "math.h" + +static void usage(char* prog) { + printf("usage: %s file1.grib file2.grib\n",prog); + printf("Input files must be gaussian reduced global and sub-area.\n"); + printf("Performs consistency check between global and sub-area.\n"); + + exit(1); +} + +int main(int argc, char* argv[]) { + grib_handle *h1,*h2; + int ret=0; + FILE *f1,*f2; + char* infile1; + char* infile2; + double *v1,*v2,*v,*gv; + double *lon1,*lon2,*lon,*glon; + double *lat1,*lat2,*lat,*glat; + size_t size1,size2,size,gsize; + double err1,err2,err; + int i,j; + grib_context* c; + grib_iterator *iter1,*iter2; + + c=grib_context_get_default(); + + if (argc < 3) usage(argv[0]); + + infile1=argv[1]; + infile2=argv[2]; + + f1=fopen(infile1,"r"); + if (!f1) { + perror(infile1); + exit(1); + } + + f2=fopen(infile2,"r"); + if (!f2) { + perror(infile2); + exit(1); + } + + while ((h1=grib_handle_new_from_file(0,f1,&ret))!=NULL) { + if ((h2=grib_handle_new_from_file(c,f2,&ret))==NULL) { + printf("unable to create handle from file %s\n",infile2); + GRIB_CHECK(ret,0); + exit(1); + } + GRIB_CHECK(grib_get_size(h1,"values",&size1),0); + v1=malloc(size1*sizeof(double)); + if (!v1) {printf("unable to allocate v1\n");exit(1);} + lat1=malloc(size1*sizeof(double)); + if (!lat1) {printf("unable to allocate lat1\n");exit(1);} + lon1=malloc(size1*sizeof(double)); + if (!lon1) {printf("unable to allocate lon1\n");exit(1);} + GRIB_CHECK(grib_get_double(h1,"packingError",&err1),0); + + iter1=grib_iterator_new(h1,0,&ret); + GRIB_CHECK(ret,0); + + GRIB_CHECK(grib_get_size(h2,"values",&size2),0); + v2=malloc(size2*sizeof(double)); + if (!v2) {printf("unable to allocate v2\n");exit(1);} + lat2=malloc(size2*sizeof(double)); + if (!lat2) {printf("unable to allocate lat2\n");exit(1);} + lon2=malloc(size2*sizeof(double)); + if (!lon2) {printf("unable to allocate lon2\n");exit(1);} + GRIB_CHECK(grib_get_double(h2,"packingError",&err2),0); + + iter2=grib_iterator_new(h2,0,&ret); + GRIB_CHECK(ret,0); + + lat=lat1; lon=lon1; v=v1; + while(grib_iterator_next(iter1,lat,lon,v)) { + lat++; + if (*lon < 0 ) *lon+=360; + lon++; + v++; + } + lat=lat2; lon=lon2; v=v2; + while(grib_iterator_next(iter2,lat,lon,v)) { + lat++; + if (*lon < 0 ) *lon+=360; + lon++; + v++; + } + + if (size1 > size2) { + lat=lat2;lon=lon2;v=v2; + size=size2; + glat=lat1;glon=lon1;gv=v1; + gsize=size1; + } else { + lat=lat1;lon=lon1;v=v1; + size=size1; + glat=lat2;glon=lon2;gv=v2; + gsize=size2; + } + if (err1>err2) err=err1; + else err=err2; + + j=0; + for (i=0;ierr) { + ret=1; + printf("lat=%g lon=%g sub area value=%g global value=%g\n", + lat[i],lon[i],v[i],gv[j]); + } + + } + free(v);free(gv);free(lat);free(glat);free(lon);free(glon); + + } + + fclose(f1); + fclose(f2); + + return ret; +} diff --git a/tools/grib1to2 b/tools/grib1to2 new file mode 100755 index 000000000..3d8df4aee --- /dev/null +++ b/tools/grib1to2 @@ -0,0 +1,59 @@ +#!/bin/sh +set -e + +if [ $# -lt 2 ] +then + echo "usage: $0 [-f] in.grib1 out.grib2" + echo "-f convert to grib2 only typeOfLevel='hybrid' and copy other level types as grib1" + exit 1 +fi + +grib_filter=/var/tmp/masn/p4/grib_api/main/bin/grib_filter +rules_filter=rules.filter$$ + +force=0 +out=$2 +in=$1 +while getopts fd:D:t:b:w:e:r:s:n:p: options +do + case $options in + f) force=1 + out=$3 + in=$2 + ;; + esac +done + + +if [ $force = 1 ] +then + + cat >> $rules_filter <> $rules_filter <> $rules_filter <> $rules_filter < +#include + +#include "grib_api.h" + +int main(int argc, char *argv[]) +{ + grib_handle* h = NULL; + FILE* f = NULL; + int i = 0; + int err = 0; + char *mode = "file"; + + for(i = 1; i < argc; i++) + { + + if(argv[i][0] == '-') + { + mode = argv[i]+1; + continue; + } + + f = fopen(argv[i],"r"); + if(!f) { + perror(argv[i]); + exit(1); + } + + while((h = grib_handle_new_from_file(0,f,&err)) != NULL) + { + long width; + long height; + double max, min; + double *values = NULL; + size_t count; + int i; + + GRIB_CHECK(grib_get_size(h,"values",&count),0); + values = (double *)malloc(sizeof(double)*count); + + GRIB_CHECK(grib_get_long(h,"Ni",&width),0); + GRIB_CHECK(grib_get_long(h,"Nj",&height),0); + GRIB_CHECK(grib_get_double_array(h,"values",values,&count),0); + + max=values[0]; + min=values[0]; + for (i=1; imax) + max = values[i]; + if(values[i] +#include + +#include "grib_api_internal.h" + + +int main(int argc, char *argv[]) +{ + grib_handle* h = NULL; + FILE* f = NULL; + int i = 0; + int err = 0; + char *mode = "file"; + char name[80]; + char value[80]; + + + for(i = 1; i < argc; i++) + { + + if(argv[i][0] == '-') + { + mode = argv[i]+1; + continue; + } + + f = fopen(argv[i],"r"); + if(!f) { + perror(argv[i]); + exit(1); + } + + while((h = grib_handle_new_from_file(0,f,&err)) != NULL) + { + + grib_keys_iterator* ks = grib_keys_iterator_new(h,GRIB_KEYS_ITERATOR_ALL_KEYS,"mars"); + while(grib_keys_iterator_next(ks)) + { + size_t len = sizeof(value); + char tmp[100]; + + strcpy(name,grib_keys_iterator_get_name(ks)); + + sprintf(tmp,"mars.%s",name); + + if((err = grib_keys_iterator_get_string(ks,value,&len)) != GRIB_SUCCESS) + /* if(err = grib_get_string(h,tmp,value,&len)) */ + { + fprintf(stderr,"Cannot get %s as string %d (%s)\n",name,err, + grib_get_error_message(err)); + exit(err); + } + + printf("%s=%s\n",name,value); + } + grib_keys_iterator_delete(ks); + printf("\n"); + + + + grib_handle_delete(h); + } + fclose(f); + if(err) + { + fprintf(stderr,"%s\n",grib_get_error_message(err)); + exit(1); + } + } + return 0; +} diff --git a/tools/grib_add.c b/tools/grib_add.c new file mode 100644 index 000000000..4557b8fde --- /dev/null +++ b/tools/grib_add.c @@ -0,0 +1,111 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include +#include + +#include "grib_api.h" + +void usage(const char *prog) +{ + fprintf(stderr,"%s: in1 [in2 ... ] out\n",prog); + exit(1); +} + +grib_values values[10240]; + +int main(int argc, const char *argv[]) +{ + int i,j; + FILE *in,*out; + int e; + grib_handle *result = NULL,*h; + double* values = NULL; + double *tmp = NULL; + size_t size,count; + + if(argc < 3) usage(argv[0]); + + + out = fopen(argv[argc-1],"w"); + if(!out) { + perror(argv[argc-1]); + exit(1); + } + + + for(i = 1; i < argc-1; i++) + { + in = fopen(argv[i],"r"); + if(!in) { + perror(argv[i]); + exit(1); + } + + while( (h = grib_handle_new_from_file(NULL,in,&e)) != NULL ) + { + + if(result == NULL) + { + + GRIB_CHECK(grib_get_size(h,"values",&size),argv[i]); + + values = (double*)calloc(size,sizeof(double)); + assert(values); + + tmp = (double*)calloc(size,sizeof(double)); + assert(tmp); + + result = h; + } + + GRIB_CHECK(grib_get_size(h,"values",&count),argv[i]); + assert(count == size); + + GRIB_CHECK(grib_get_double_array(h,"values",tmp,&count),argv[i]); + assert(count == size); + + for(j = 0; j < count; j++) + values[j] += tmp[j]; + + + if(h != result) + grib_handle_delete(h); + } + + GRIB_CHECK(e,argv[argc-2]); + } + + if(result) + { + const void *buffer; + GRIB_CHECK(grib_set_double_array(result,"values",values,size),argv[i]); + GRIB_CHECK(grib_get_message(result,&buffer,&size),argv[0]); + + if(fwrite(buffer,1,size,out) != size) + { + perror(argv[argc-1]); + exit(1); + } + + grib_handle_delete(result); + } + + + if(fclose(out)) + { + perror(argv[argc-1]); + exit(1); + } + + + return 0; +} diff --git a/tools/grib_cmp.c b/tools/grib_cmp.c new file mode 100644 index 000000000..380e51f04 --- /dev/null +++ b/tools/grib_cmp.c @@ -0,0 +1,108 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_cmp + * + * Description: Binary comparison between two files + * + * + * + * + */ +#include "grib_api_internal.h" + +void usage(char* progname) { + printf("\nUsage: %s file file\n",progname); + exit(1); +} + +extern int errno; + +int main(int argc, char *argv[]) { + int err=0,count=0,ret1=0,ret2=0; + char *file1=NULL,*file2=NULL; + FILE *f1 = NULL; + FILE *f2 = NULL; + unsigned char buff1[1000000]; + unsigned char buff2[1000000]; + grib_context* c; + size_t size1,size2; + + + + if (argc != 3) usage(argv[0]); + file1=argv[1]; + file2=argv[2]; + + f1 = fopen(file1,"r"); + if(!f1) {perror(file1); exit(1);} + + f2 = fopen(file2,"r"); + if(!f2) {perror(file2);exit(1);} + + count=1; + c=grib_context_get_default(); + size1=sizeof(buff1); + size2=sizeof(buff2); + while (((ret1=grib_read_any_from_file(c,f1,buff1,&size1))==GRIB_SUCCESS) & + ((ret2=grib_read_any_from_file(c,f2,buff2,&size2))==GRIB_SUCCESS) ) { + if (size1!=size2 || memcmp(buff1,buff2,size1)) { + printf("message %d are different\n",count); + break; + } + size1=sizeof(buff1); + size2=sizeof(buff2); + count++; + } + +/* old cmp + count=1; + while (!feof(f1) && !feof(f2)) { + if (fread(&a,1,1,f1) != 1 && !feof(f1)) { + printf("%s error: %s\n",file1,strerror(errno)); + exit(1); + } + if (fread(&b,1,1,f2)!=1 && !feof(f2)) { + printf("%s error: %s\n",file2,strerror(errno)); + exit(1); + } + if (a != b) { + printf("%s differs from %s at byte %d (0x%.2X != 0x%.2X) \n",file1,file2,count,a,b); + return 1; + } + count++; + } +*/ + + fclose(f1); + fclose(f2); + + if (!ret1 && ret2==GRIB_END_OF_FILE) { + printf("%s bigger than %s\n",file1,file2); + return 1; + } + if (!ret2 && ret1==GRIB_END_OF_FILE) { + printf("%s bigger than %s\n",file2,file1); + return 1; + } + if (ret2!=GRIB_END_OF_FILE && ret2 ) { + printf("%s message %d: %s\n",file1,count,grib_get_error_message(ret2)); + err++; + } + + if (ret1!=GRIB_END_OF_FILE && ret1) { + printf("%s message %d: %s\n",file1,count,grib_get_error_message(ret1)); + err++; + } + + return err; +} + diff --git a/tools/grib_compare.c b/tools/grib_compare.c new file mode 100644 index 000000000..46be81fbb --- /dev/null +++ b/tools/grib_compare.c @@ -0,0 +1,1050 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_tools.h" + + +GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} + +GRIB_INLINE static int grib_inline_rstrcmp(const char* a,const char* b) { + char* p=(char*)a; + char* q=(char*)b; + while (*p != 0) p++; + while (*q != 0) q++; + q--;p--; + if (*q != *p) return 1; + while((p!=a && q!=b) && *(p) == *(q) ) {p--;q--;} + return (q==b) ? 0 : 1; +} + +typedef double (*compare_double_proc) (double*,double*,double*); + +typedef struct grib_error grib_error; +struct grib_error { + char* key; + int count; + grib_error* next; +}; + +grib_error* error_summary; + +compare_double_proc compare_double; +double global_tolerance=0; +int packingCompare=0; +grib_string_list* blacklist=0; +int compareAbsolute=1; + +static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options* options); +static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_handle *h2,const char *name,int type); +int error=0; +int count=0; +int lastPrint=0; +int force=0; +double maxAbsoluteError = 1e-19; +int onlyListed=1; +int headerMode=0; +int morein1=0; +int morein2=0; +int listFromCommandLine; +int verbose=0; +int tolerance_factor=1; + +GRIB_INLINE static double compare_double_absolute(double *a,double *b,double *err) { + double ret=0; + double d=fabs(*a-*b); + if (d > *err) { + ret=d; + } + return ret; + /* return fabs(*a-*b) > *err ? fabs(*a-*b) : 0; */ +} + +static double compare_double_relative(double *a,double *b,double *err) { + double relativeError; + + if(fabs(*a) <= maxAbsoluteError || fabs(*b) <= maxAbsoluteError) + relativeError = fabs(*a-*b); + else if (fabs(*b) > fabs(*a)) + relativeError = fabs((*a-*b) / *b); + else + relativeError = fabs((*a-*b) / *a); + + return relativeError > *err ? relativeError : 0; +} + +static int blacklisted(const char* name) { + grib_string_list* b=blacklist; + while (b) { + if (!strcmp(name,b->value)) + return 1; + b=b->next; + } + return 0; +} + +static double relative_error(double a,double b,double err) { + double relativeError; + double maxAbsoluteError = 1e-19; + + if(fabs(a) <= maxAbsoluteError || fabs(b) <= maxAbsoluteError) + relativeError = fabs(a-b); + else if (fabs(b) > fabs(a)) + relativeError = fabs((a-b) / b); + else + relativeError = fabs((a-b) / a); + + return relativeError ; +} + + +grib_option grib_options[]={ + /* {id, args, help}, on, command_line, value*/ + {"r",0,"Compare files in which the messages are not in the same order. This option is time expensive.\n",0,1,0}, + {"b:",0,0,0,1,0}, + {"e",0,"Edition independent compare. It is used to compare grib edition 1 and 2.\n",0,1,0}, + {"c:",0,0,0,1,0}, + {"S:","start","First field to be processed.\n",0,1,0}, + {"E:","end","Last field to be processed.\n",0,1,0}, + {"a",0,"-c option modifier. The keys listed with the option -c will be added to the list of keys compared without -c.\n" + ,0,1,0}, + {"H",0,"Compare only message headers. Bit-by-bit compare on. Incompatible with -c option.\n",0,1,0}, + {"R:",0,0,0,1,0}, + {"A:",0,0,0,1,0}, + {"P",0,"Compare data values using the packing error as tolerance.\n",0,1,0}, + {"T:","factor","Compare data values using factor multiplied by the tolerance specified in options -P -R -A.\n",0,1,0}, + {"w:",0,0,0,1,0}, + {"f",0,0,0,1,0}, + {"F",0,0,1,0,0}, + {"q",0,0,1,0,0}, + {"M",0,0,1,0,0}, + {"I",0,0,1,0,0}, + {"V",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"v",0,0,0,1,0} +}; + +grib_handle* h1=NULL; +int counter=0; +int theStart=-1; +int theEnd=-1; + +char* grib_tool_description= + "Compare grib messages contained in two files." + "\n\tIf some differences are found it fails returning an error code." + "\n\tFloating point values are compared exactly by default, different tolerance can be defined see -P -A -R." + "\n\tDefault behaviour: absolute error=0, bit-by-bit compare, same order in files."; + +char* grib_tool_name="grib_compare"; +char* grib_tool_usage="[options] " + "grib_file grib_file"; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); + +int main(int argc, char *argv[]) { return grib_tool(argc,argv);} + +int grib_tool_before_getopt(grib_runtime_options* options) { + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { + int ret=0,i; + int nfiles=1; + char orderby[]="md5Headers"; + grib_context* context=grib_context_get_default(); + + options->strict=1; + if (grib_options_on("S:")) + theStart=atoi(grib_options_get_option("S:")); + + if (grib_options_on("E:")) + theEnd=atoi(grib_options_get_option("E:")); + + if (grib_options_on("f")) force=1; + else force=0; + + verbose = grib_options_on("v"); + + listFromCommandLine=0; + if (grib_options_on("c:") || grib_options_on("e")) + listFromCommandLine=1; + + if (grib_options_on("a")) onlyListed=0; + else onlyListed=1; + + if (grib_options_on("H")) headerMode=1; + else headerMode=0; + + if (grib_options_on("H") && grib_options_on("c:")) { + printf("Error: -H and -c options are incompatible. Choose one of the two please.\n"); + exit(1); + } + if (grib_options_on("a") && !grib_options_on("c:")) { + printf("Error: -a option requires -c option. Please define a list of keys with the -c option.\n"); + exit(1); + } + + if (grib_options_on("b:")) { + grib_string_list *next=0; + int i=0; + blacklist=grib_context_malloc_clear(context,sizeof(grib_string_list)); + blacklist->value=grib_context_strdup(context,options->set_values[0].name); + next=blacklist; + for (i=1;iset_values_count;i++) { + next->next=grib_context_malloc_clear(context,sizeof(grib_string_list)); + next->next->value=grib_context_strdup(context,options->set_values[i].name); + next=next->next; + } + context->blacklist=blacklist; + } + + if (grib_options_on("r")) { + char* filename[1]; + filename[0]=options->infile_extra->name; + options->random=1; + options->orderby=strdup(orderby); + options->idx=grib_fieldset_new_from_files(context,filename, + nfiles,0,0,0,orderby,&ret); + if (ret) { + printf("unable to create index for input file %s (%s)", + options->infile_extra->name,grib_get_error_message(ret)); + exit(ret); + } + } else { + options->random=0; + options->infile_extra->file=fopen(options->infile_extra->name,"r"); + + if (!options->infile_extra->file) { + perror(options->infile_extra->name); + exit(1); + } + } + + global_tolerance=0; + compare_double= &compare_double_absolute; + if (grib_options_on("R:")) { + global_tolerance=0; + for (i=0;itolerance_count;i++) { + if (!strcmp((options->tolerance[i]).name,"all")) { + global_tolerance=(options->tolerance[i]).double_value; + break; + } + if (!strcmp((options->tolerance[i]).name,"global")) { + global_tolerance=(options->tolerance[i]).double_value; + break; + } + } + compare_double= &compare_double_relative; + compareAbsolute=0; + } + if (grib_options_on("A:")){ + if (grib_options_on("R:")) { + maxAbsoluteError = atof(grib_options_get_option("A:")); + } else { + compare_double= &compare_double_absolute; + global_tolerance = atof(grib_options_get_option("A:")); + } + } + if (grib_options_on("P")) { + packingCompare=1; + compare_double= &compare_double_absolute; + } + + if (grib_options_on("T:")) + tolerance_factor=atof(grib_options_get_option("T:")); + + + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; +} +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + return 0; +} + +static void printInfo(grib_handle* h) { + char shortName[254]={0,}; + char levelType[254]={0,}; + char level[254]={0,}; + char paramId[254]={0,}; + char packingType[254]={0,}; + char gridType[254]={0,}; + char identifier[254]={0,}; + size_t len=254; + char stepRange[254]={0,}; + if (lastPrint==count) return; + + len=254; + grib_get_string(h,"shortName",shortName,&len); + len=254; + grib_get_string(h,"stepRange",stepRange,&len); + len=254; + grib_get_string(h,"levelType",levelType,&len); + len=254; + grib_get_string(h,"level",level,&len); + len=254; + grib_get_string(h,"paramId",paramId,&len); + len=254; + grib_get_string(h,"packingType",packingType,&len); + len=254; + grib_get_string(h,"gridType",gridType,&len); + len=254; + grib_get_string(h,"identifier",identifier,&len); + + printf("\n-- %s #%d -- shortName=%s paramId=%s stepRange=%s levelType=%s level=%s packingType=%s gridType=%s --\n", + identifier,count,shortName,paramId,stepRange,levelType,level,packingType,gridType); + lastPrint=count; + +} + +static void print_index_key_values(grib_index* index,int counter) { + grib_index_key* keys=index->keys; + printf("== %d == ",counter); + while (keys) { + printf("%s=%s ",keys->name,keys->value); + keys=keys->next; + } + printf("\n"); +} +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + int err=0; + count++; + + if (options->through_index) { + grib_index* idx1=options->index1; + verbose=0; + counter++; + + if ( theStart>0 && counter < theStart ) return 0; + if ( theEnd>0 && counter > theEnd ) { + options->stop=1; + return 0; + } + + grib_index_search_same(idx1,h); + h1=grib_handle_new_from_index(idx1,&err); + if (options->verbose) { + off_t offset=0; + char* filename=grib_get_field_file(options->index2,&offset); + printf("file1=\"%s\" ",filename); + filename=grib_get_field_file(options->index1,&offset); + printf("file2=\"%s\" \n",filename); + print_index_key_values(options->index1,counter); + } + + if (!h1) { + if (!options->verbose) + print_index_key_values(idx1,counter); + printf("====== NOT FOUND in %s\n",options->infile->name); + } + + if (!h1 || err!= GRIB_SUCCESS ) { + morein1++; + if (h1) grib_handle_delete(h1); + return 0; + } + + if(compare_handles(h,h1,options)) { + error++; + if (!force) exit(1); + } + + grib_handle_delete(h1); + + return 0; + + } else if (options->random) + h1 = grib_fieldset_next_handle(options->idx,&err); + else + h1=grib_handle_new_from_file(h->context,options->infile_extra->file,&err); + + if (!h1 || err!= GRIB_SUCCESS ) { + morein2++; + if (h1) grib_handle_delete(h1); + return 0; + } + + if(compare_handles(h1,h,options)) { + error++; + if (!force) exit(1); + } + + grib_handle_delete(h1); + + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + int err=0; + if (!options->through_index && !options->random) { + h1=grib_handle_new_from_file(h->context,options->infile_extra->file,&err); + + if (!h1 || err!= GRIB_SUCCESS) + morein2++; + + grib_handle_delete(h1); + + + } + + grib_handle_delete(h); + count++; + + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) { + grib_error* e=error_summary; + int err=0; + grib_context* c=grib_context_get_default(); + error+=morein1+morein2; + + /*if (grib_options_on("w:")) return 0;*/ + + if (error) { + printf("\n## ERRORS SUMMARY #######\n"); + } + while ((h1=grib_handle_new_from_file(c,options->infile_extra->file,&err))) { + morein1++; + if (h1) grib_handle_delete(h1); + } + if (morein1>0) { + printf("##\n## Different number of messages \n"); + printf("## %d more messages in %s than in %s\n",morein1, + options->infile_extra->name,options->infile->name); + } + + if (morein2>0) { + printf("##\n## Different number of messages \n"); + printf("## %d more messages in %s than in %s\n",morein2, + options->infile->name,options->infile_extra->name); + } + + if (error) { + printf("##\n## Summary of different key values \n"); + while (e) { + printf ("## %s ( %d different )\n",e->key,e->count); + e=e->next; + } + + printf("##\n## %d different messages out of %d\n\n",error,count); + } + if (options->through_index) { + grib_index_delete(options->index1); + grib_index_delete(options->index2); + } + + + if (error !=0) exit(1); + return 0; +} + +static void save_error(grib_context* c,const char* key) { + grib_error* e=0; + grib_error* next=0; + int saved=0; + + if (!error_summary) { + error_summary=grib_context_malloc_clear(c,sizeof(grib_error)); + error_summary->count=1; + error_summary->key=grib_context_strdup(c,key); + return; + } + + e=error_summary; + next=e; + + while (next) { + if (!strcmp(next->key,key)) { + next->count++; + saved=1; + break; + } + e=next; + next=next->next; + } + + if (!saved) { + e->next=grib_context_malloc_clear(c,sizeof(grib_error)); + e->next->count=1; + e->next->key=grib_context_strdup(c,key); + } +} + +static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_handle *h2,const char *name,int type) { + size_t len1 = 0; + size_t len2 = 0; + int err=0,i=0; + int err1; + int err2; + int type1,type2; + int countdiff; + int isangle=0; + int isMissing1,isMissing2; + + char *sval1 = NULL,*sval2 = NULL; + unsigned char *uval1 = NULL,*uval2 = NULL; + double *dval1 = NULL, *dval2 = NULL; + long *lval1 = NULL, *lval2 = NULL; + int failed=0; + double maxdiff=0; + double packingError1=0,packingError2=0; + double value_tolerance=0; + grib_context* c=h1->context; + + type1=type; + type2=type; + if (verbose) printf(" comparing %s",name); + + if( type1==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(h1,name,&type1)) != GRIB_SUCCESS) + { + printInfo(h1); + printf("Oops... cannot get type of [%s] in 1st field: %s\n",name,grib_get_error_message(err)); + save_error(c,name); + return err; + } + + if(type2==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(h2,name,&type2)) != GRIB_SUCCESS) + { + if(err == GRIB_NOT_FOUND) + { + printInfo(h1); + printf("[%s] not found in 2nd field\n",name); + save_error(c,name); + return err; + } + printInfo(h1); + printf("Oops... cannot get type of [%s] in 2nd field: %s\n",name,grib_get_error_message(err)); + save_error(c,name); + return err; + } + + /* + if(type1 != type2) + { + printInfo(h1); + printf("Warning, [%s] has different types: 1st field: [%s], 2nd field: [%s]\n", + name,grib_get_type_name(type1),grib_get_type_name(type2)); + return GRIB_TYPE_MISMATCH; + } + */ + + if(type1 == GRIB_TYPE_LABEL) + return err; + + if(type1 == GRIB_TYPE_SECTION) + return err; + + + if((err = grib_get_size(h1,name,&len1)) != GRIB_SUCCESS) + { + printInfo(h1); + printf("Oops... cannot get size of [%s] in 1st field: %s\n",name,grib_get_error_message(err)); + save_error(c,name); + return err; + } + + if((err = grib_get_size(h2,name,&len2)) != GRIB_SUCCESS) + { + if(err == GRIB_NOT_FOUND) + { + printInfo(h1); + printf("[%s] not found in 2nd field\n",name); + save_error(c,name); + return err; + } + + printInfo(h1); + printf("Oops... cannot get size of [%s] in 2nd field: %s\n",name,grib_get_error_message(err)); + save_error(c,name); + return err; + } + + /* + if(len1 != len2 && type1 != GRIB_TYPE_STRING) + { + printInfo(h1); + printf("[%s] has different size: 1st field: %ld, 2nd field: %ld\n",name,(long)len1,(long)len2); + save_error(c,name); + return GRIB_COUNT_MISMATCH; + } + */ + + isMissing1= ( (grib_is_missing(h1,name,&err1)==1) && (err1 == 0) ) ? 1 : 0; + isMissing2= ( (grib_is_missing(h2,name,&err2)==1) && (err2 == 0) ) ? 1 : 0; + + if ((isMissing1==1) && (isMissing2==1)) { + if (verbose) printf(" is set to missing in both fields\n"); + return GRIB_SUCCESS; + } + + if (isMissing1==1) { + if (verbose) printf(" is set to missing in 1st field\n"); + printInfo(h1); + printf("%s is set to missing in 1st field is not missing in 2nd field\n",name); + err1 = GRIB_VALUE_MISMATCH; + save_error(c,name); + return GRIB_VALUE_MISMATCH; + } + + if (isMissing2==1) { + if (verbose) printf(" is set to missing in 1st field\n"); + printInfo(h1); + printf("%s is set to missing in 2nd field is not missing in 1st field\n",name); + err1 = GRIB_VALUE_MISMATCH; + save_error(c,name); + return GRIB_VALUE_MISMATCH; + } + + switch(type1) + { + case GRIB_TYPE_STRING: + if (verbose) printf(" as string\n"); + grib_get_string_length(h1,name,&len1); + grib_get_string_length(h2,name,&len2); + sval1 = grib_context_malloc(h1->context,len1*sizeof(char)); + sval2 = grib_context_malloc(h2->context,len2*sizeof(char)); + + if((err1 = grib_get_string(h1,name,sval1,&len1)) != GRIB_SUCCESS) + { + printInfo(h1); + printf("Oops... cannot get string value of [%s] in 1st field: %s\n", + name,grib_get_error_message(err1)); + save_error(c,name); + } + + if((err2 = grib_get_string(h2,name,sval2,&len2)) != GRIB_SUCCESS) + { + printInfo(h1); + printf("Oops... cannot get string value of [%s] in 2nd field: %s\n", + name,grib_get_error_message(err2)); + save_error(c,name); + } + + if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS) + { + if(grib_inline_strcmp(sval1,sval2) != 0) + { + printInfo(h1); + printf("string [%s]: [%s] != [%s]\n", + name,sval1,sval2); + err1 = GRIB_VALUE_MISMATCH; + save_error(c,name); + } + } + + grib_context_free(h1->context,sval1); + grib_context_free(h2->context,sval2); + + if(err1) return err1; + if(err2) return err2; + + break; + + case GRIB_TYPE_LONG: + if (verbose) printf(" as long\n"); + + lval1 = grib_context_malloc(h1->context,len1*sizeof(long)); + lval2 = grib_context_malloc(h2->context,len2*sizeof(long)); + + if((err1 = grib_get_long_array(h1,name,lval1,&len1)) != GRIB_SUCCESS) + { + printInfo(h1); + printf("Oops... cannot get long value of [%s] in 1st field: %s\n", + name,grib_get_error_message(err1)); + save_error(c,name); + } + + if((err2 = grib_get_long_array(h2,name,lval2,&len2)) != GRIB_SUCCESS) + { + printInfo(h1); + printf("Oops... cannot get long value of [%s] in 2nd field: %s\n", + name,grib_get_error_message(err2)); + save_error(c,name); + } + + + if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS) + { + int i; + countdiff=0; + for(i = 0; i < len1; i++) + if(lval1[i] != lval2[i]) countdiff++; + + if (countdiff) { + printInfo(h1); + save_error(c,name); + err1 = GRIB_VALUE_MISMATCH; + if(len1 == 1) + printf("long [%s]: [%ld] != [%ld]\n", + name,*lval1,*lval2); + else + printf("long [%s] %d out of %ld different\n", + name,countdiff,(long)len1); + } + } + + + grib_context_free(h1->context,lval1); + grib_context_free(h2->context,lval2); + + if(err1) return err1; + if(err2) return err2; + break; + + case GRIB_TYPE_DOUBLE: + if (verbose) printf(" as double"); + dval1 = grib_context_malloc(h1->context,len1*sizeof(double)); + dval2 = grib_context_malloc(h2->context,len2*sizeof(double)); + + isangle=0; + value_tolerance=global_tolerance; + if (!grib_inline_strcmp(name,"packedValues") || !grib_inline_strcmp(name,"values") + || !grib_inline_strcmp(name,"codedValues")) { + packingError1=0; + packingError2=0; + err1=grib_get_double(h1,"packingError",&packingError1); + err2=grib_get_double(h2,"packingError",&packingError2); + if (packingCompare) + value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2; + } else if (!grib_inline_strcmp(name,"unpackedValues") ) { + packingError1=0; + packingError2=0; + err1=grib_get_double(h1,"unpackedError",&packingError1); + err2=grib_get_double(h2,"unpackedError",&packingError2); + if (packingCompare) + value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2; + } else if ( !grib_inline_rstrcmp(name,"InDegrees")) { + packingError1=0.0005; + packingError2=0.0005; + isangle=1; + value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2; + } else if (!grib_inline_strcmp(name,"referenceValue") ) { + packingError1=0; + packingError2=0; + err1=grib_get_double(h1,"referenceValueError",&packingError1); + err2=grib_get_double(h2,"referenceValueError",&packingError2); + value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2; + } + + if (!compareAbsolute) { + for (i=0;itolerance_count;i++) { + if (!strcmp((options->tolerance[i]).name,name)) { + value_tolerance=(options->tolerance[i]).double_value; + break; + } + } + } + + if((err1 = grib_get_double_array(h1,name,dval1,&len1)) != GRIB_SUCCESS) + { + printInfo(h1); + printf("Oops... cannot get double value of [%s] in 1st field: %s\n", + name,grib_get_error_message(err1)); + save_error(c,name); + } + + if((err2 = grib_get_double_array(h2,name,dval2,&len2)) != GRIB_SUCCESS) + { + printInfo(h1); + printf("Oops... cannot get double value of [%s] in 2nd field: %s\n", + name,grib_get_error_message(err2)); + save_error(c,name); + } + + if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1!=len2) + { + printInfo(h1); + printf("Different size for \"%s\" [%ld] [%ld]\n",name,(long)len1,(long)len2); + save_error(c,name); + } + if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1==len2) + { + int i,imaxdiff; + double diff; + double *pv1,*pv2,dnew1,dnew2; + maxdiff=0; + imaxdiff=0; + countdiff=0; + pv1=dval1; + pv2=dval2; + if (isangle) { + dnew1=*dval1; dnew2=*dval2; + pv1=&dnew1; pv2=&dnew2; + if (*dval1 < 0 ) dnew1 += 360.0 ; + if (*dval2 < 0 ) dnew2 += 360.0 ; + if (*dval1 > 360 ) dnew1 -= 360.0 ; + if (*dval2 > 360 ) dnew2 -= 360.0 ; + } + value_tolerance*=tolerance_factor; + if (verbose) printf(" (%d values) tolerance=%g\n",(int)len1,value_tolerance); + for(i = 0; i < len1; i++) { + if((diff=compare_double(pv1++,pv2++,&value_tolerance))!=0) { + failed=1; + countdiff++; + if (maxdiff < diff) {maxdiff=diff;imaxdiff=i;} + err1 = GRIB_VALUE_MISMATCH; + } + } + + if (countdiff) { + printInfo(h1); + save_error(c,name); + if (len1>1) { + printf("double [%s]: %d out of %ld different\n",name,countdiff,(long)len1); + if (compareAbsolute) printf(" max"); + printf(" absolute diff. = %.16e,",fabs(dval1[imaxdiff]-dval2[imaxdiff])); + if (!compareAbsolute) printf(" max"); + printf(" relative diff. = %g",relative_error(dval1[imaxdiff],dval2[imaxdiff],value_tolerance)); + printf("\n\tmax diff. element %d: %.20e %.20e", + imaxdiff,dval1[imaxdiff],dval2[imaxdiff]); + printf("\n\ttolerance=%.16e",value_tolerance); + if (packingError2!=0 || packingError1!=0) + printf(" packingError: [%g] [%g]",packingError1,packingError2); + + + if (!grib_inline_strcmp(name,"packedValues") || !grib_inline_strcmp(name,"values") + || !grib_inline_strcmp(name,"codedValues")) { + double max1,min1,max2,min2; + grib_get_double(h1,"max",&max1); + grib_get_double(h1,"min",&min1); + grib_get_double(h2,"max",&max2); + grib_get_double(h2,"min",&min2); + printf("\n\tvalues max= [%g] [%g] min= [%g] [%g]",max1,max2,min1,min2); + } + printf("\n"); + } else { + printf("double [%s]: [%.20e] != [%.20e]\n", + name,dval1[0],dval2[0]); + printf("\tabsolute diff. = %g,",fabs(dval1[0]-dval2[0])); + printf(" relative diff. = %g\n",relative_error(dval1[0],dval2[0],value_tolerance)); + printf("\ttolerance=%g\n",value_tolerance); + } + } + } + + grib_context_free(h1->context,dval1); + grib_context_free(h2->context,dval2); + + if(err1) return err1; + if(err2) return err2; + break; + + case GRIB_TYPE_BYTES: + if (verbose) printf(" as bytes\n"); + if (len1<2) len1=512; + if (len2<2) len2=512; + uval1 = grib_context_malloc(h1->context,len1*sizeof(unsigned char)); + uval2 = grib_context_malloc(h2->context,len2*sizeof(unsigned char)); + + if((err1 = grib_get_bytes(h1,name,uval1,&len1)) != GRIB_SUCCESS) + { + printInfo(h1); + save_error(c,name); + printf("Oops... cannot get bytes value of [%s] in 1st field: %s\n", + name,grib_get_error_message(err1)); + } + + if((err2 = grib_get_bytes(h2,name,uval2,&len2)) != GRIB_SUCCESS) + { + printInfo(h1); + save_error(c,name); + printf("Oops... cannot get bytes value of [%s] in 2nd field: %s\n", + name,grib_get_error_message(err2)); + } + + if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS) + { + if(memcmp(uval1,uval2,len1) != 0) + { + int i; + for(i = 0; i < len1; i++) + if(uval1[i] != uval2[i]) + { + printInfo(h1); + save_error(c,name); + if(len1 == 1) + printf("[%s] byte values are different: [%02x] and [%02x]\n", + name,uval1[i],uval2[i]); + else + printf("[%s] byte value %d of %ld are different: [%02x] and [%02x]\n", + name,i,(long)len1,uval1[i],uval2[i]); + + err1 = GRIB_VALUE_MISMATCH; + break; + } + err1 = GRIB_VALUE_MISMATCH; + } + } + + grib_context_free(h1->context,uval1); + grib_context_free(h2->context,uval2); + + if(err1) return err1; + if(err2) return err2; + break; + + case GRIB_TYPE_LABEL: + if (verbose) printf(" as label\n"); + break; + + default: + if (verbose) printf("\n"); + printInfo(h1); + save_error(c,name); + printf("Cannot compare [%s], unsupported type %d\n",name,type1); + return GRIB_UNABLE_TO_COMPARE_ACCESSORS; + break; + } + + return GRIB_SUCCESS; + +} + + +static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options* options) +{ + int err = 0; + int i=0; + const char* name=NULL; + grib_keys_iterator* iter = NULL; + + /* mask only if no -c option or headerMode (-H)*/ + if (blacklist && ( !listFromCommandLine || headerMode )) { + grib_string_list* nextb=blacklist; + while (nextb) { + grib_clear(h1,nextb->value); + grib_clear(h2,nextb->value); + nextb=nextb->next; + } + } + + if (headerMode) { + const void *msg1=NULL,*msg2=NULL; + size_t size1=0,size2=0; + grib_handle *h11, *h22; + GRIB_CHECK_NOLINE(grib_get_message_headers(h1,&msg1,&size1),0); + GRIB_CHECK_NOLINE(grib_get_message_headers(h2,&msg2,&size2),0); + if (size1==size2 && !memcmp(msg1,msg2,size1)) + return 0; + + err=0; + h11=grib_handle_new_from_partial_message(h1->context,(void*)msg1,size1); + h22=grib_handle_new_from_partial_message(h1->context,(void*)msg2,size2); + + iter=grib_keys_iterator_new(h11, + GRIB_KEYS_ITERATOR_SKIP_COMPUTED,NULL); + + if (!iter) { + printf("ERROR: unable to get iterator\n"); + exit(1); + } + + while(grib_keys_iterator_next(iter)) + { + name=grib_keys_iterator_get_name(iter); + /*printf("----- comparing %s\n",name);*/ + + if (blacklisted(name)) continue; + if(compare_values(options,h11,h22,name,GRIB_TYPE_UNDEFINED)) err++; + } + + grib_keys_iterator_delete(iter); + grib_handle_delete(h11); + grib_handle_delete(h22); + return err; + } + + if ( listFromCommandLine && onlyListed ) { + for (i=0; i< options->compare_count; i++) { + if (blacklisted((char*)options->compare[i].name)) continue; + if (options->compare[i].type == GRIB_NAMESPACE) { + iter=grib_keys_iterator_new(h1,0,(char*)options->compare[i].name); + if (!iter) { + printf("ERROR: unable to get iterator\n"); + exit(1); + } + while(grib_keys_iterator_next(iter)) + { + name=grib_keys_iterator_get_name(iter); + /*printf("----- comparing %s\n",name);*/ + + if (blacklisted(name)) continue; + if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED)) err++; + } + grib_keys_iterator_delete(iter); + } else { + if( compare_values(options,h1,h2,options->compare[i].name,options->compare[i].type)) + err++; + } + } + } else { + const void *msg1=NULL,*msg2=NULL; + size_t size1=0,size2=0; + GRIB_CHECK_NOLINE(grib_get_message(h1,&msg1,&size1),0); + GRIB_CHECK_NOLINE(grib_get_message(h2,&msg2,&size2),0); + if (size1==size2 && !memcmp(msg1,msg2,size1)) + return 0; + + iter=grib_keys_iterator_new(h1,GRIB_KEYS_ITERATOR_SKIP_COMPUTED,NULL); + + if (!iter) { + printf("ERROR: unable to get iterator\n"); + exit(1); + } + + while(grib_keys_iterator_next(iter)) + { + name=grib_keys_iterator_get_name(iter); + /*printf("----- comparing %s\n",name);*/ + + if (blacklisted(name)) continue; + if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED)) err++; + } + + grib_keys_iterator_delete(iter); + + if ( listFromCommandLine ) { + for (i=0; i< options->compare_count; i++) { + if (blacklisted(name)) continue; + if (options->compare[i].type == GRIB_NAMESPACE) { + iter=grib_keys_iterator_new(h1,0,(char*)options->compare[i].name); + if (!iter) { + printf("ERROR: unable to get iterator for %s\n",options->compare[i].name ); + exit(1); + } + while(grib_keys_iterator_next(iter)) + { + name=grib_keys_iterator_get_name(iter); + /*printf("----- comparing %s\n",name);*/ + + if (blacklisted(name)) continue; + if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED)) err++; + } + grib_keys_iterator_delete(iter); + } else { + if( compare_values(options,h1,h2,options->compare[i].name,options->compare[i].type)) + err++; + } + } + } + + } + return err; +} diff --git a/tools/grib_compare.sh b/tools/grib_compare.sh new file mode 100755 index 000000000..d0d0af89f --- /dev/null +++ b/tools/grib_compare.sh @@ -0,0 +1,280 @@ +#!/bin/sh +set -e +dir=$PWD +toolsDir=../tools/ +dataDir=../data/ +cd $dataDir + +echo "-# The default behaviour for grib_compare without any option is to perform a bit by bit comparison of the two messages. If the messages +are found to be bitwise different then grib_compare switches to a \"key based\" mode to find out which coded keys are different. + To see how grib_compare works we first set the shortName=2d (2 metre dew point temperature) in the file + regular_latlon_surface.grib1\\n +\\verbatim +>grib_set -s shortName=2d regular_latlon_surface.grib1 2d.grib1 +\\endverbatim" + +rm -f 2d.grib1 | true +$toolsDir/grib_set -s shortName=2d regular_latlon_surface.grib1 2d.grib1 +echo "Then we can compare the two fields with grib_compare.\\n" +echo "\\verbatim +>grib_compare regular_latlon_surface.grib1 2d.grib1" +set +e +$toolsDir/grib_compare regular_latlon_surface.grib1 2d.grib1 +set -e +echo "\\endverbatim +In the output we see that the only \"coded\" key with different values in the two messages is indicatorOfParameter which is the +relevant key for the parameter information. +The comparison can be forced to be successful listing the keys with different values in the -b option." + +echo "\\verbatim +>grib_compare -b indicatorOfParameter regular_latlon_surface.grib1 2d.grib1" +set +e +$toolsDir/grib_compare -b indicatorOfParameter regular_latlon_surface.grib1 2d.grib1 +set -e +echo "\\endverbatim +\n\n" + +echo "-# Two grib messages can be very different because they have different edition, but they can contain the same +identical information in the header and the same data. To see how grib_compare can help in comparing messages with different edition we +do +\\verbatim +>grib_set edition=2 reduced_gaussian_model_level.grib1 reduced_gaussian_model_level.grib2 +\\endverbatim" + +rm -f regular_latlon_surface.grib2 | true +$toolsDir/grib_set -s edition=2 reduced_gaussian_model_level.grib1 reduced_gaussian_model_level.grib2 + +echo "Then we compare the two fields with grib_compare.\\n" +echo "\\verbatim +>grib_compare reduced_gaussian_model_level.grib1 reduced_gaussian_model_level.grib2" +set +e +$toolsDir/grib_compare reduced_gaussian_model_level.grib1 reduced_gaussian_model_level.grib2 +set -e + +echo "\\endverbatim +It is clear that the two messages are coded in a very different way. If we now add the -e option, the tool will compare only the +higher level information common between the two messages." + +echo "\\verbatim +>grib_compare -e reduced_gaussian_model_level.grib1 reduced_gaussian_model_level.grib2" +set +e +$toolsDir/grib_compare -e reduced_gaussian_model_level.grib1 reduced_gaussian_model_level.grib2 +set -e + +echo "\\endverbatim +The comparison is successful because the two messages contain the same information coded in two different ways. +We can display the list of keys used by grib_compare adding the option -v (verbose)." + + +echo "\\verbatim +>grib_compare -ve reduced_gaussian_model_level.grib1 reduced_gaussian_model_level.grib2" +set +e +$toolsDir/grib_compare -ve reduced_gaussian_model_level.grib1 reduced_gaussian_model_level.grib2 +set -e + +echo "\\endverbatim +For each key the type used in the comparison is reported and for the floating point keys also the tolerance used +is printed. +\n\n" + +echo "-# Some options are provided to compare only a set of keys in the messages. The option -H is used to compare only the headers +coded in the message, it doesn't compare the data values. +The option \"-c key1:[l/d/s/n],key2:[l/d/s/n],... \" can be used to +compare a set of keys or namespaces. The letter after the colon is optional and it is used to force the +type used in the comparison which is otherwise assumed to be the native type of the key. +The possible types are: + - :l -> integer (C type long) + - :d -> floating point (C type double) + - :s -> string + - :n -> namespace. + . +When the type \"n\" is used all the set of keys belonging to the specified namespace +are compared assuming their own native type. +To illustrate how these options work we change the values coded in +a message using grib_filter with the following rules file (see \ref grib_filter). " +echo "\\verbatim +set bitsPerValue=10; +set values={1,2.5,3,4,5,6,70}; +write \"first.grib1\"; +set values={1,2.5,5,4,5,6,70}; +write \"second.grib1\"; +\\endverbatim" + +cat > x.rules <grib_compare -H first.grib1 second.grib1" +set +e +$toolsDir/grib_compare -H first.grib1 second.grib1 +set -e + +echo "\\endverbatim +The comparison is successful because the data are not compared. +To compare only the data we have to compare the \"data namespace\"." +echo "\\verbatim +>grib_compare -c data:n first.grib1 second.grib1" +set +e +$toolsDir/grib_compare -c data:n first.grib1 second.grib1 +set -e + +echo "\\endverbatim +The comparison is showing that one of seven values is different in a comparison +with the (default) absolute tolerance=0. We can change the tolerance with the -A option:" + +echo "\\verbatim +>grib_compare -A 2 -c data:n first.grib1 second.grib1" +set +e +$toolsDir/grib_compare -A 2 -c data:n first.grib1 second.grib1 +set -e + +echo "\\endverbatim +and we see that the comparison is successful if the absolute tolerance is set to 2. +We can also set the relative tolerance for each key with the option -R:" +echo "\\verbatim +>grib_compare -R packedValues=0.4 -c data:n first.grib1 second.grib1" +set +e +$toolsDir/grib_compare -R packedValues=0.4 -c data:n first.grib1 second.grib1 +set -e + +echo "\\endverbatim +and we get again a successful comparison because the relative tolerance is bigger than the +relative absolute difference of two corresponding values. +Another possible choice for the tolerance is to be equal to the packingError, +which is the error due to the packing algorithm. If we change the decimalPrecision of +a packed field we introduce a packing error sometimes bigger than the original +packing error." + +echo "\\verbatim +>grib_set -s changeDecimalPrecision=0 first.grib1 third.grib1" +set +e +$toolsDir/grib_set -s changeDecimalPrecision=0 first.grib1 third.grib1 +set -e + +echo "\\endverbatim +and we compare the two fields using the -P option (tolerance=packingError)." +echo "\\verbatim +>grib_compare -P -c data:n first.grib1 third.grib1" +set +e +$toolsDir/grib_compare -P -c data:n first.grib1 third.grib1 +set -e + +echo "\\endverbatim +the comparison is successful because their difference is within the biggest of +the two packing error. With the option -P the comparison is failing only +if the original data coded are different, not if the packing precision is +changed. If we try again to compare the fields without the -P option:" +echo "\\verbatim +>grib_compare -c data:n first.grib1 third.grib1" +set +e +$toolsDir/grib_compare -c data:n first.grib1 third.grib1 +set -e + +echo "\\endverbatim +we see that some values are different and that the maximum absolute differenc +is close to the biggest packing error (max diff=0.48 packingError=0.5). +The packing error was chosen to be 0.5 by setting decimalPrecision to 0 which +means that we don't need to preserve any decimal figure.\n\n" + +echo "-# When we already know that the fields are not numerically identical, but have +similar statistical characteristics we can compare their statistics namespaces:" + +echo "\\verbatim +>grib_compare -c statistics:n first.grib1 third.grib1" +set +e +$toolsDir/grib_compare -c statistics:n first.grib1 third.grib1 +set -e + +echo "\\endverbatim +and we see that maximum, minimum, average, standard deviation, skewness and kurtosis are compared. +While the values are different by 0.48 the statistics comparison shows that the difference in +the statistical values is never bigger than 0.052" + +echo "\\verbatim +>grib_compare -A 0.052 -c statistics:n first.grib1 third.grib1" +set +e +$toolsDir/grib_compare -A 0.052 -c statistics:n first.grib1 third.grib1 +set -e + +echo "\\endverbatim +The statistics namespace is available also for spherical harmonics data and provides +information about the field in the geographic space computing them in the spectral space for +performance reasons. +\n\n" + +echo "-# When a file contains several fields and some keys are different, it is useful to have a summary +report of the keys found different in the messages. This can be obtained with the option -f. +We change few keys in a file:" + +echo "\\verbatim +>grib_set -w typeOfLevel=surface -s step=48 tigge_pf_ecmwf.grib2 out.grib2" +set +e +$toolsDir/grib_set -w typeOfLevel=surface -s step=48 tigge_pf_ecmwf.grib2 out.grib2 +set -e + +echo "\\endverbatim +and comparing with the -f option:" + +echo "\\verbatim +>grib_compare -f tigge_pf_ecmwf.grib2 out.grib2" +set +e +$toolsDir/grib_compare -f tigge_pf_ecmwf.grib2 out.grib2 | head -11 +echo "... output deleted " +$toolsDir/grib_compare -f tigge_pf_ecmwf.grib2 out.grib2 | tail -10 +set -e + +echo "\\endverbatim +we get a list of all the different messages in the files and a summary report +of the different keys. +\n\n" +rm -f out.grib2 + +echo "-# We can change the order of the messages in a file using grib_copy with the +-B option:" + +echo "\\verbatim +>grib_copy -B typeOfLevel tigge_pf_ecmwf.grib2 out.grib2" +set +e +$toolsDir/grib_copy -B typeOfLevel tigge_pf_ecmwf.grib2 out.grib2 +set -e + +echo "\\endverbatim +If we now compare the two files:" + +echo "\\verbatim +>grib_compare -f tigge_pf_ecmwf.grib2 out.grib2" +set +e +$toolsDir/grib_compare -f tigge_pf_ecmwf.grib2 out.grib2 | head -20 +echo "... very long output " +set -e + +echo "\\endverbatim +the comparison is failing because of the different order of the messages. +We can use the -r option to compare the files assuming that the messages are not in the +same order:" + +echo "\\verbatim +>grib_compare -r tigge_pf_ecmwf.grib2 out.grib2" +set +e +$toolsDir/grib_compare -r tigge_pf_ecmwf.grib2 out.grib2 +set -e + +echo "\\endverbatim +and we have a successful comparison because for each message in the first file an identical +message is found in the second file. This option should be used carefully as it is +very time expensive. + +\n\n" + +rm -f first.grib1 second.grib1 third.grib1 out.grib2 + +cd $dir + diff --git a/tools/grib_convert.c b/tools/grib_convert.c new file mode 100644 index 000000000..23b711197 --- /dev/null +++ b/tools/grib_convert.c @@ -0,0 +1,206 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_convert + * + * + * + */ + +#include "grib_tools.h" + + +grib_option grib_options[]={ + /* {id, args, help}, on, command_line, value*/ + {"f",0,0,0,1,0}, + {"F",0,0,1,0,0}, + {"q",0,0,1,0,0}, + {"M",0,0,0,1,0}, + {"U",0,0,1,0,0}, + {"I",0,0,1,0,0}, + {"g",0,0,0,1,0}, + {"G",0,0,0,1,0}, + {"T",0,0,0,1,0}, + {"V",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"v",0,0,0,1,0} +}; + +char* grib_tool_description= +"It converts grib messages applying the rules from a conversion_rules file." +"\n\tThe rules are of the type \"keyname = value;\" and if blocks are allowed as" +"\n\tif ( keyname1 == value1 || keyname2 != value2 && keyname3 == value3 ) {" +"\n\t keyname4 = value4;" +"\n\t}"; +char* grib_tool_name="grib_convert"; +char* grib_tool_usage="[options] conversion_rules " +"grib_file grib_file ... output_grib_file"; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); + +int main(int argc, char *argv[]) { return grib_tool(argc,argv);} + +int grib_tool_before_getopt(grib_runtime_options* options) { + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { + int set=0; + grib_rule* r=NULL; + + options->rules = grib_parse_rules_file(NULL,options->infile_extra->name); + + if(!options->rules) { + printf("Unable to build rules from %s\n",options->infile_extra->name); + exit(1); + } + r = options->rules; + set = 0; + while(r) { + if(!r->condition) { + grib_rule_entry* e = r->entries; + while(e) { + Assert(set < (sizeof(options->set_values)/sizeof(options->set_values[0]))); + options->set_values[set].name = e->name; + GRIB_CHECK_NOLINE(grib_expression_set_value(NULL,e->value,&(options->set_values[set])),NULL); + set++; + e = e->next; + } + } + r = r->next; + } + options->set_values_count=set; + + if(options->verbose) + { + printf("Fixed rules:\n"); + printf("------------\n"); + grib_print_values(options->set_values, + options->set_values_count); + printf("\n"); + } +/* + if (options->outfile && options->outfile->name) { + options->outfile->file = fopen(options->outfile->name,"w"); + if(!options->outfile->file) { + perror(options->outfile->name); + exit(1); + } + } +*/ + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; +} + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + grib_rule* r = options->rules; + int i; + int err=0; + double scale = 1; + double offset = 0; + + int set = options->set_values_count; + + while(r) { + if(r->condition) { + long ok = 0; + GRIB_CHECK_NOLINE(grib_expression_evaluate_long(h,r->condition,&ok),NULL); + if(ok) { + grib_rule_entry* e = r->entries; + while(e) { + if (!strcmp(e->name,"skip")) return 0; + Assert(set < (sizeof(options->set_values)/sizeof(options->set_values[0]))); + options->set_values[set].name = e->name; + options->set_values[set].error=grib_expression_set_value(h, + e->value,&(options->set_values[set])); + set++; + e = e->next; + } + + } + } + r = r->next; + } + + if(options->verbose) + { + printf("Applying %d:\n",options->infile->handle_count); + grib_print_values(options->set_values, set); + printf("\n"); + } + + err=grib_set_values(h,options->set_values, set); + + if( err != GRIB_SUCCESS) { + for(i = 0; i < options->set_values_count ; i++) { + if(options->set_values[i].error != GRIB_SUCCESS && options->fail) + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to set key \"%s\" (%s)", + options->set_values[i].name,grib_get_error_message( options->set_values[i].error)); + } + grib_context_log(h->context,GRIB_LOG_ERROR,"error processing message %d\n",options->infile->handle_count); + if (options->fail) exit(err); + } + + grib_get_double(h,"scaleValuesBy",&scale); + grib_get_double(h,"offsetValuesBy",&offset); + + if(scale != 1 || offset != 0) + { + double *v; + size_t size; + int i; + + GRIB_CHECK_NOLINE(grib_get_size(h,"values",&size),0); + + v = (double*)calloc(size,sizeof(double)); + if(!v) { + fprintf(stderr,"failed to allocate %ld bytes\n",(long)(size*sizeof(double))); + exit(1); + } + + GRIB_CHECK_NOLINE(grib_get_double_array(h,"values",v,&size),0); + + if(options->verbose) + { + printf("Applying scale=%g/offset=%g\n",scale,offset); + } + + for(i = 0; i< size; i++) + v[i] = v[i] * scale + offset; + + GRIB_CHECK_NOLINE(grib_set_double_array(h,"values",v,size),0); + free(v); + } + + grib_tools_write_message(options,h); + + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) { + return 0; +} diff --git a/tools/grib_convert.dox b/tools/grib_convert.dox new file mode 100644 index 000000000..36e3b1d91 --- /dev/null +++ b/tools/grib_convert.dox @@ -0,0 +1,38 @@ +/*! \page grib_convert grib_convert +\section DESCRIPTION + It converts grib messages applying the rules from a conversion_rules file. + The rules are of the type "keyname = value;" and if blocks are allowed as + if ( keyname1 == value1 || keyname2 != value2 && keyname3 == value3 ) { + keyname4 = value4; + } + +\section USAGE + grib_convert + [options] conversion_rules grib_file grib_file ... output_grib_file + +\section OPTIONS +-f \n Force. Force the execution not to fail on error. + \n \n -M \n Multi-grib support off. Turn off support for multiple fields in single grib message + \n \n -g \n Copy GTS header. + \n \n -G \n GRIBEX compatibility mode. + \n \n -V \n Version. + \n \n -7 \n Does not fail when the message has wrong length + \n \n -v \n Verbose. + \n \n +\section grib_convert_examples grib_convert examples +The following grib_convert rules convert all the grib messages +contained in the input files in grib edition 2 and if a 2 metre +temperature is found also the keys contained in the culy bracket are +changed.\n +\code +editionNumber = 2; +if( indicatorOfParameter == 11 && indicatorOfTypeOfLevel == 105) +{ + productDefinitionTemplateNumber = 1; + typeOfFirstFixedSurface = 103; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 2; +} +\endcode + +*/ diff --git a/tools/grib_convert.sh b/tools/grib_convert.sh new file mode 100755 index 000000000..fdf5f4293 --- /dev/null +++ b/tools/grib_convert.sh @@ -0,0 +1,18 @@ +#!/bin/sh +set -e + +echo The following grib_convert rules convert all the grib messages +echo contained in the input files in grib edition 2 and if a 2 metre +echo temperature is found also the keys contained in the culy bracket are +echo changed.\\n +echo "\code " +echo "editionNumber = 2;" +echo "if( indicatorOfParameter == 11 && indicatorOfTypeOfLevel == 105)" +echo "{" +echo " productDefinitionTemplateNumber = 1;" +echo " typeOfFirstFixedSurface = 103;" +echo " scaleFactorOfFirstFixedSurface = 0;" +echo " scaledValueOfFirstFixedSurface = 2;" +echo "}" +echo "\endcode" +echo diff --git a/tools/grib_copy.c b/tools/grib_copy.c new file mode 100644 index 000000000..7169866bb --- /dev/null +++ b/tools/grib_copy.c @@ -0,0 +1,125 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_copy + * + * + * + */ + +#include "grib_tools.h" + +char* grib_tool_description="Copies the content of grib files printing" + " values of some keys."; +char* grib_tool_name="grib_copy"; +char* grib_tool_usage="[options] grib_file grib_file ... output_grib_file"; + +grib_option grib_options[]={ +/* {id, args, help}, on, command_line, value */ + {"f",0,0,0,1,0}, + {"c",0,0,1,0,0}, + {"r",0,0,0,1,0}, + {"q",0,0,1,0,0}, + {"p:",0,0,1,1,0}, + {"P:",0,0,0,1,0}, + {"w:","key[:{s/d/l}]=value,key[:{s/d/l}]=value,...","\n\t\tWhere clause." + "\n\t\tOnly grib messages matching the key/value constraints are " + "copied to the\n\t\toutput_grib_file.\n\t\tFor each key a string (key:s) or a " + "double (key:d) or a long (key:l)\n\t\ttype can be defined. Default type " + "is string.\n",0,1,0}, + {"B:",0,0,0,1,0}, + {"V",0,0,0,1,0}, + {"W:",0,0,0,1,0}, + {"M",0,0,0,1,0}, + {"U",0,0,1,0,0}, + {"H",0,0,1,0,0}, + {"T:",0,0,0,1,0}, + {"S",0,0,1,0,0}, + {"g",0,0,0,1,0}, + {"G",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"v",0,0,0,1,0} +}; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); + +int main(int argc, char *argv[]) { + int ret=grib_tool(argc,argv); + return ret; +} + +int grib_tool_before_getopt(grib_runtime_options* options) { + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { +#if 0 + if (options->outfile && options->outfile->name) { + options->outfile->file = fopen(options->outfile->name,"w"); + if(!options->outfile->file) { + perror(options->outfile->name); + exit(1); + } + } +#endif + return 0; +} + + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; +} + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + double* v; + size_t size=0; + if ( options->repack ) { + GRIB_CHECK_NOLINE(grib_get_size(h,"values",&size),0); + + v = (double*)calloc(size,sizeof(double)); + if(!v) { + fprintf(stderr,"failed to allocate %ld bytes\n",(long)(size*sizeof(double))); + exit(1); + } + + GRIB_CHECK_NOLINE(grib_get_double_array(h,"values",v,&size),0); + GRIB_CHECK_NOLINE(grib_set_double_array(h,"values",v,size),0); + free(v); + } + grib_tools_write_message(options,h); + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) +{ + int err=0; + grib_file_close_all(&err); + if (err != GRIB_SUCCESS) { + perror(grib_tool_name); + exit(err); + } + /* if (options->outfile->file) + fclose(options->outfile->file); */ + return 0; +} diff --git a/tools/grib_copy.dox b/tools/grib_copy.dox new file mode 100644 index 000000000..3889c481c --- /dev/null +++ b/tools/grib_copy.dox @@ -0,0 +1,57 @@ +/*! \page grib_copy grib_copy +\section DESCRIPTION + Copies the content of grib files printing values of some keys. + +\section USAGE + grib_copy + [options] grib_file grib_file ... output_grib_file + +\section OPTIONS +-f \n Force. Force the execution not to fail on error. + \n \n -r \n Repack data. Sometimes after setting some keys involving properties + of the packing algorithm a repacking of data is needed. + This repacking is performed setting this -r option. + \n \n -p key[:{s/d/l}],key[:{s/d/l}],... \n + Declaration of keys to print. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be requested. Default type is string. + \n \n -P key[:{s/d/l}],key[:{s/d/l}],... \n + As -p adding the declared keys to the default list. + \n \n -w key[:{s/d/l}]=value,key[:{s/d/l}]=value,... \n + Where clause. + Only grib messages matching the key/value constraints are copied to the + output_grib_file. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be defined. Default type is string. + \n \n -B order by directive \n + Order by. The output will be ordered according the order by directive. + Order by example: "step asc, centre desc" (step ascending and centre discending) + \n \n -V \n Version. + \n \n -W width \n + Minimum width of each column in output. Default is 10. + \n \n -M \n Multi-grib support off. Turn off support for multiple fields in single grib message. + \n \n -g \n Copy GTS header. + \n \n -G \n GRIBEX compatibility mode. + \n \n -7 \n Does not fail when the message has wrong length + \n \n -v \n Verbose. + \n \n +\section grib_copy_examples grib_copy examples +-# To copy only the pressure levels from a file\n +\verbatim +> grib_copy -w levtype=pl ../data/tigge_pf_ecmwf.grib2 out.grib +\endverbatim\n +-# To copy only the fields that are not on pressure levels from a file\n +\verbatim +> grib_copy -w levtype!=pl ../data/tigge_pf_ecmwf.grib2 out.grib +\endverbatim\n +-# A grib_file with multi field messages can be converted in single field messages +with a simple grib_copy.\n +\verbatim +> grib_copy multi.grib simple.grib +\endverbatim\n +-# Use the square brackets to insert the value of a key +in the name of the output file.\n +\verbatim +> grib_copy in.grib out_[shortName].grib +\endverbatim\n +*/ diff --git a/tools/grib_copy.sh b/tools/grib_copy.sh new file mode 100755 index 000000000..6bc039e53 --- /dev/null +++ b/tools/grib_copy.sh @@ -0,0 +1,24 @@ +#!/bin/sh +set -e + +echo "-# To copy only the pressure levels from a file\\n" +echo "\verbatim" +echo "> grib_copy -w levtype=pl ../data/tigge_pf_ecmwf.grib2 out.grib" +echo "\endverbatim\\n" + +echo "-# To copy only the fields that are not on pressure levels from a file\\n" +echo "\verbatim" +echo "> grib_copy -w levtype!=pl ../data/tigge_pf_ecmwf.grib2 out.grib" +echo "\endverbatim\\n" + +echo "-# A grib_file with multi field messages can be converted in single field messages" +echo "with a simple grib_copy.\\n" +echo "\verbatim" +echo "> grib_copy multi.grib simple.grib" +echo "\endverbatim\\n" + +echo "-# Use the square brackets to insert the value of a key" +echo "in the name of the output file.\\n" +echo "\verbatim" +echo "> grib_copy in.grib out_[shortName].grib" +echo "\endverbatim\\n" diff --git a/tools/grib_corruption_check.c b/tools/grib_corruption_check.c new file mode 100644 index 000000000..2a252bf47 --- /dev/null +++ b/tools/grib_corruption_check.c @@ -0,0 +1,48 @@ +#include "grib_api.h" + +void usage(char* prog) { + printf("usage: %s gribfile\n",prog); + exit(1); +} + +int main(int argc,char* argv[]) { + FILE* fh; + int err=0; + grib_handle* h; + long binaryScaleFactor=0; + double max=0,min=0; + long paramId=0; + int count=0; + + if (argc!=2) usage(argv[0]); + + fh=fopen(argv[1],"r"); + if (!fh) { + perror(argv[1]); + exit(1); + } + + while ((h=grib_handle_new_from_file(0,fh,&err))!=NULL) { + + count++; + grib_get_long(h,"paramId",¶mId); + if (paramId!=246 && paramId!=247) {grib_handle_delete(h); continue;} + + grib_get_long(h,"binaryScaleFactor",&binaryScaleFactor); + if (binaryScaleFactor!=0) { grib_handle_delete(h); continue;} + + grib_get_double(h,"max",&max); + grib_get_double(h,"min",&min); + + if (max!=min) { + printf("grib_corruption_check: field #%d corrupted: max=%g min=%g\n",count,max,min); + grib_handle_delete(h); + return 1; + } + grib_handle_delete(h); + } + + fclose(fh); + + return 0; +} diff --git a/tools/grib_count.c b/tools/grib_count.c new file mode 100644 index 000000000..bb014d8d3 --- /dev/null +++ b/tools/grib_count.c @@ -0,0 +1,59 @@ +#include "grib_api_internal.h" + +void usage(char* prog) { + printf("usage: %s infile1 infile2 ... \n",prog); + exit(1); +} + +static int check_file(FILE* in,long *count) { + void* mesg=NULL; + size_t size=0; + int err=0; + grib_context* c=grib_context_get_default(); + + if (!in) return 1; + + while ( (err=grib_read_any_from_file_alloc (c, in, &mesg , &size))==GRIB_SUCCESS) { + grib_context_free(c,mesg); + (*count)++; + } + + if (err==GRIB_END_OF_FILE) err=GRIB_SUCCESS; + + return err; +} + +int main(int argc,char* argv[]) { + + FILE* infh; + char* filename; + int i; + int err=0; + long n=0,nn=0; + + if (argc <2) usage(argv[0]); + + n=0; + for (i=1;idump_flags = GRIB_DUMP_FLAG_VALUES + | GRIB_DUMP_FLAG_READ_ONLY; + options->dump_mode = "debug"; + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; +} + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + + grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0); + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) { + return 0; +} diff --git a/tools/grib_debug.dox b/tools/grib_debug.dox new file mode 100644 index 000000000..55235095b --- /dev/null +++ b/tools/grib_debug.dox @@ -0,0 +1,626 @@ +/*! \page grib_debug grib_debug +\section DESCRIPTION + Dump the content of a grib file in debug mode. + +\section USAGE + grib_debug + [options] grib_file grib_file ... + +\section OPTIONS +-V \n Version. + \n \n +\section grib_debug_examples grib_debug examples + +Dumping in a WMO documentation style with hexadecimal octet values (-H)\n +and with the aliases of each key listed in square brackets (-a).\n\n +grib_dump -Ha ../data/reduced_gaussian_model_level.grib1\n +\verbatim +***** FILE: ../data/reduced_gaussian_model_level.grib1 +====================== MESSAGE 1 ( length=10142 ) ====================== +====================== SECTION_0 ( length=0, padding=0 ) ====================== +1-4 identifier = GRIB +5-7 totalLength = 10142 ( 0x00 0x27 0x9E ) +8 editionNumber = 1 ( 0x01 ) [ls.edition] +====================== SECTION_1 ( length=52, padding=0 ) ====================== +1-3 section1Length = 52 ( 0x00 0x00 0x34 ) +4 gribTablesVersionNo = 128 ( 0x80 ) [table2Version] +5 identificationOfOriginatingGeneratingCentre = 98 ( 0x62 ) [European Center for Medium-Range Weather Forecasts (grib1/0.table) ] [ls.centre, identificationOfCentre, originatingCentre] +6 generatingProcessIdentifier = 128 ( 0x80 ) [generatingProcessIdentificationNumber, process] +7 gridDefinition = 255 ( 0xFF ) +8 section1Flags = 128 [10000000] +9 indicatorOfParameter = 130 ( 0x82 ) [T Temperature K (grib1/2.98.128.table) ] +10 indicatorOfTypeOfLevel = 109 ( 0x6D ) [Hybrid level level number (2 octets) (grib1/3.table) ] [ls.levelType, typeOfLevel, typeOfFirstFixedSurface, mars.levtype] +11-12 lev = 1 ( 0x00 0x01 ) [topLevel, bottomLevel, ls.level, mars.levelist] +13 yearOfCentury = 7 ( 0x07 ) +14 month = 3 ( 0x03 ) +15 day = 18 ( 0x12 ) +16 hour = 12 ( 0x0C ) +17 minute = 0 ( 0x00 ) +18 indicatorOfUnitOfTimeRange = 1 ( 0x01 ) [Hour (grib1/4.table) ] +19 periodOfTime = 0 ( 0x00 ) [P1] +20 periodOfTimeIntervals = 0 ( 0x00 ) [P2] +21 timeRangeIndicator = 0 ( 0x00 ) [Forecast product valid at reference time + P1 (P1>0) (grib1/5.table) ] +22-23 numberIncludedInAverage = 0 ( 0x00 0x00 ) +24 numberMissingFromAveragesOrAccumulations = 0 ( 0x00 ) +25 centuryOfReferenceTimeOfData = 21 ( 0x15 ) +26 identificationOfOriginatingGeneratingSubCentre = 0 ( 0x00 ) [Absent (grib1/0.table) ] [subCentre] +27-28 decimalScaleFactor = 2 ( 0x00 0x02 ) +29-40 reservedNeedNotBePresent = 12 { + 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 + } # pad reservedNeedNotBePresent +41 localDefinitionNumber = 1 ( 0x01 ) +42 marsClass = 1 ( 0x01 ) [Operational archive (mars/class.table) ] [mars.class] +43 marsType = 2 ( 0x02 ) [Analysis (mars/type.table) ] [ls.dataType, mars.type] +44-45 marsStream = 1025 ( 0x04 0x01 ) [Atmospheric model (mars/stream.table) ] [mars.stream] +46-49 experimentVersionNumber = 0001 [mars.expver] +50 perturbationNumber = 0 ( 0x00 ) +51 numberOfForecastsInEnsemble = 0 ( 0x00 ) +52 padding_local1_1 = 1 { + 00 + } # pad padding_local1_1 +====================== SECTION_2 ( length=896, padding=0 ) ====================== +1-3 section2Length = 896 ( 0x00 0x03 0x80 ) +4 numberOfVerticalCoordinateValues = 184 ( 0xB8 ) [NV, numberOfCoordinatesValues] +5 pvlLocation = 33 ( 0x21 ) +6 dataRepresentationType = 4 ( 0x04 ) [Gaussian Latitude/Longitude Grid (grib1/6.table) ] +7-8 numberOfPointsAlongAParallel = MISSING ( 0xFF 0xFF ) [geography.Ni] +9-10 numberOfPointsAlongAMeridian = 64 ( 0x00 0x40 ) [geography.Nj] +11-13 latitudeOfFirstGridPoint = 87864 ( 0x01 0x57 0x38 ) [La1] +14-16 longitudeOfFirstGridPoint = 0 ( 0x00 0x00 0x00 ) [Lo1] +17 resolutionAndComponentFlags = 0 [00000000] +18-20 latitudeOfLastGridPoint = -87864 ( 0x81 0x57 0x38 ) [La2] +21-23 longitudeOfLastGridPoint = 357188 ( 0x05 0x73 0x44 ) [Lo2] +24-25 iDirectionIncrement = MISSING ( 0xFF 0xFF ) [Di] +26-27 numberOfParallelsBetweenAPoleAndTheEquator = 32 ( 0x00 0x20 ) +28 scanningMode = 0 [00000000] +29-32 padding_grid4_1 = 4 { + 00, 00, 00, 00 + } # pad padding_grid4_1 +33-768 pv = (184,736) { + 0, 2.00004, 3.98083, 7.38719, 12.9083, 21.4136, 33.9529, 51.7466, + 76.1677, 108.716, 150.986, 204.637, 271.356, 352.824, 450.686, 566.519, + 701.813, 857.946, 1036.17, 1237.59, 1463.16, 1713.71, 1989.87, 2292.16, + 2620.9, 2976.3, 3358.43, 3767.2, 4202.42, 4663.78, 5150.86, 5663.16, + 6199.84, 6759.73, 7341.47, 7942.93, 8564.62, 9208.3, 9873.56, 10558.9, + 11262.5, 11982.7, 12713.9, 13453.2, 14192, 14922.7, 15638.1, 16329.6, + 16990.6, 17613.3, 18191, 18717, 19184.5, 19587.5, 19919.8, 20175.4, + 20348.9, 20434.2, 20426.2, 20319, 20107, 19785.4, 19348.8, 18798.8, + 18141.3, 17385.6, 16544.6, 15633.6, 14665.6, 13653.2, 12608.4, 11543.2, + 10471.3, 9405.22, 8356.25, 7335.16, 6353.92, 5422.8, 4550.21, 3743.46, + 3010.15, 2356.2, 1784.85, 1297.66, 895.194, 576.314, 336.772, 162.043, + 54.2083, 6.57563, 0.00316, 0, 0, 0, 0, 0, + 0, 0, 0, 0 +... 84 more values +} # ibmfloat pv +769-896 pl = (64,128) { + 20, 27, 36, 40, 45, 50, 60, 64, + 72, 75, 80, 90, 90, 96, 100, 108, + 108, 120, 120, 120, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 120, 120, 120, 108, + 108, 100, 96, 90, 90, 80, 75, 72, + 64, 60, 50, 45, 40, 36, 27, 20 +} # unsigned pl +====================== SECTION_4 ( length=9182, padding=0 ) ====================== +1-3 section4Length = 9182 ( 0x00 0x23 0xDE ) +4 dataFlag = 0 [00000000] +5-6 binaryScaleFactor = 0 ( 0x00 0x00 ) +7-10 referenceValue = 17402.8 +11 numberOfBitsContainingEachPackedValue = 12 ( 0x0C ) [nbp, numberOfBits, bitsPerValue] +12-9182 values = (6114,9171) { + 203.778, 203.468, 202.958, 202.348, 201.758, 201.278, 200.888, 200.558, + 200.268, 200.078, 200.068, 200.318, 200.808, 201.458, 202.138, 202.758, + 203.248, 203.588, 203.798, 203.878, 205.968, 205.418, 204.438, 203.218, + 202.008, 201.128, 200.708, 200.598, 200.478, 200.228, 199.908, 199.528, + 199.108, 198.708, 198.528, 198.748, 199.458, 200.488, 201.548, 202.478, + 203.358, 204.178, 204.808, 205.198, 205.508, 205.838, 206.068, 207.338, + 206.488, 205.198, 203.798, 202.548, 201.528, 200.848, 200.638, 200.818, + 201.028, 200.888, 200.308, 199.638, 199.228, 199.018, 198.738, 198.328, + 197.868, 197.358, 196.928, 196.858, 197.348, 198.368, 199.638, 200.758, + 201.538, 202.288, 203.338, 204.438, 205.158, 205.558, 205.938, 206.438, + 207.008, 207.468, 207.638, 207.178, 206.658, 205.398, 203.788, 202.468, + 201.338, 200.298, 199.938, 200.318, 200.608, 200.478, 200.008, 199.208, + 198.278, 197.708, 197.558, 197.318 +... 6014 more values +} # data_g1simple_packing values +====================== SECTION_5 ( length=4, padding=0 ) ====================== +1-4 7777 = 7777 +\endverbatim\n +\n \n How to obtain all the key names available in a grib file.\n\n +grib_dump -D ../data/regular_latlon_surface.grib1 +\verbatim +***** FILE: ../data/regular_latlon_surface.grib1 +====================== MESSAGE 1 ( length=1100 ) ====================== +0-0 constant oneConstant = 1 +0-0 constant oneMillionConstant = 1000000 +0-0 offset_file offset = 0 +0-0 count_file count = 1 +0-0 count_total countTotal = 1 +0-0 lookup kindOfProduct = 1196575042 [GRIB 1196575042 0-4] +0-0 lookup GRIBEditionNumber = 1 [? 1 7-1] +======> section GRIB (1100,1100,0) + 0-0 constant grib1divider = 1000 + 0-0 constant ieeeFloats = 0 + 0-0 transient dummy = 1 + ======> section section_0 (0,0,0) + ----> label empty + <===== section section_0 + 0-4 ascii identifier = GRIB + 4-7 g1_message_length totalLength = 1100 + 7-8 unsigned editionNumber = 1 [ls.edition] + ======> section section_1 (52,52,0) + 8-8 constant ECMWF = 98 + 8-8 position offsetSection1 = 8 + 8-11 section_length section1Length = 52 + 11-12 unsigned gribTablesVersionNo = 128 [table2Version] + 12-13 codetable identificationOfOriginatingGeneratingCentre = 98 [European Center for Medium-Range Weather Forecasts (grib1/0.table) ] [ls.centre, identificationOfCentre, originatingCentre] + 13-14 unsigned generatingProcessIdentifier = 128 [generatingProcessIdentificationNumber, process] + 14-15 unsigned gridDefinition = 255 + 15-16 codeflag section1Flags = 128 [10000000:(1=1) Section 2 included;(2=0) Section 3 omited:grib1/1.table] + 16-17 codetable indicatorOfParameter = 167 [2T 2 metre temperature K (grib1/2.98.128.table) ] + 17-17 sprintf marsParam = 167.128 [mars.param, ls.param] + 17-18 codetable indicatorOfTypeOfLevel = 1 [Surface (of the Earth, which includes sea surface) (grib1/3.table) ] [ls.levelType, typeOfLevel, typeOfFirstFixedSurface, mars.levtype] + 18-20 unsigned lev = 0 [topLevel, bottomLevel, ls.level, mars.levelist] + 20-21 unsigned yearOfCentury = 7 + 21-22 unsigned month = 3 + 22-23 unsigned day = 18 + 23-24 unsigned hour = 12 + 24-25 unsigned minute = 0 + 25-25 constant second = 0 + 25-26 codetable indicatorOfUnitOfTimeRange = 1 [Hour (grib1/4.table) ] + 26-27 unsigned periodOfTime = 0 [P1] + 27-28 unsigned periodOfTimeIntervals = 0 [P2] + 28-29 codetable timeRangeIndicator = 0 [Forecast product valid at reference time + P1 (P1>0) (grib1/5.table) ] + 29-31 unsigned numberIncludedInAverage = 0 + 31-32 unsigned numberMissingFromAveragesOrAccumulations = 0 + 32-33 unsigned centuryOfReferenceTimeOfData = 21 + 33-34 codetable identificationOfOriginatingGeneratingSubCentre = 0 [Absent (grib1/0.table) ] [subCentre] + 34-36 signed decimalScaleFactor = 0 + 36-36 transient setLocalDefinition = 0 + 36-48 pad reservedNeedNotBePresent = 12 { + 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 + } # pad reservedNeedNotBePresent + 48-48 g1date dataDate = 20070318 [mars.date, ls.date] + 48-48 evaluate year = 2007 + 48-48 g1monthlydate monthlyDate = 20070301 + 48-48 time dataTime = 1200 [mars.time] + 48-48 g1startstep marsStartStep = 0 [mars.startStep] + 48-48 g1endstep marsEndStep = 0 [mars.endStep] + 48-48 g1step marsStep = 0 [mars.step, ls.step, forecastTime] + 48-48 g1verificationdate verificationDate = 20070318 + 48-48 g1monthlydate monthlyVerificationDate = 20070301 + 48-48 g1day_of_the_year_date dayOfTheYearDate = 2007-078 + 48-48 constant wrongPadding = 0 + 48-48 constant localUsePresent = 1 + 48-48 g1param parameter = 167 + 48-49 unsigned localDefinitionNumber = 1 + ======> section localDefinition (11,11,0) + ======> section mars_labeling (8,8,0) + 49-50 codetable marsClass = 1 [Operational archive (mars/class.table) ] [mars.class] + 50-51 codetable marsType = 2 [Analysis (mars/type.table) ] [ls.dataType, mars.type] + 51-53 codetable marsStream = 1025 [Atmospheric model (mars/stream.table) ] [mars.stream] + 53-57 ksec1expver experimentVersionNumber = 0001 [mars.expver] + 57-57 constant SimulationsOf30Days = s3 + 57-57 constant TYPE_S3 = 22 + <===== section mars_labeling + 57-58 unsigned perturbationNumber = 0 + 58-59 unsigned numberOfForecastsInEnsemble = 0 + 59-60 pad padding_local1_1 = 1 { + 00 + } # pad padding_local1_1 + <===== section localDefinition + 60-60 transient centreForTableNumber = 98 + 60-60 section_padding localExtensionPadding = 0 {} + 60-60 section_padding section1Padding = 0 {} + 60-60 padtoeven evenpadding_sec1 = 0 {} + 60-60 concept grib1_short_name = 2T [ls.short_name] + 60-60 concept grib1_name = 2_metre_temperature [name] + 60-60 concept grib1_units = K [units] + <===== section section_1 + 60-60 bit gridDescriptionSectionPresent = 1 [GDSPresent] + 60-60 bit bitmapPresent = 0 [bitmapSectionPresent] + ======> section section_2 (32,32,0) + 60-60 position offsetSection2 = 60 + 60-63 section_length section2Length = 32 + 63-64 unsigned numberOfVerticalCoordinateValues = 0 [NV, numberOfCoordinatesValues] + 64-64 constant neitherPresent = 255 + 64-65 unsigned pvlLocation = 255 + 65-66 codetable dataRepresentationType = 0 [Latitude/Longitude Grid (grib1/6.table) ] + ======> section dataRepresentation (22,22,0) + 66-66 constant gridDefinitionTemplateNumber = 0 + 66-68 unsigned numberOfPointsAlongAParallel = 16 [Ni] + 68-70 unsigned numberOfPointsAlongAMeridian = 31 [Nj] + 70-73 signed latitudeOfFirstGridPoint = 60000 [La1] + 73-73 scale latitudeOfFirstGridPointInDegrees = 60 [geography.laFirst] + 73-76 signed longitudeOfFirstGridPoint = 0 [Lo1] + 76-76 scale longitudeOfFirstGridPointInDegrees = 0 [geography.loFirst] + 76-77 codeflag resolutionAndComponentFlags = 128 [10000000:(1=1) Direction increments given;(2=0) Earth assumed spherical with radius = 6367.47 km;(5=0) u and v components resolved relative to easterly and northerly directions:grib1/7.table] + 77-77 bit ijDirectionIncrementGiven = 1 [iDirectionIncrementGiven, jDirectionIncrementGiven, DiGiven, DjGiven] + 77-77 bit earthIsOblate = 0 + 77-77 bit resolutionAndComponentFlags3 = 0 + 77-77 bit resolutionAndComponentFlags4 = 0 + 77-77 bit uvRelativeToGrid = 0 + 77-77 bit resolutionAndComponentFlags6 = 0 + 77-77 bit resolutionAndComponentFlags7 = 0 + 77-77 bit resolutionAndComponentFlags8 = 0 + 77-80 signed latitudeOfLastGridPoint = 0 [La2] + 80-80 scale latitudeOfLastGridPointInDegrees = 0 [geography.laLast] + 80-83 signed longitudeOfLastGridPoint = 30000 [Lo2] + 83-83 transient longitudeOfLastGridPointG1to2 = 30000 + 83-83 scale longitudeOfLastGridPointInDegrees = 30 [geography.loLast] + 83-85 unsigned iDirectionIncrement = 2000 [Di] + 85-87 unsigned jDirectionIncrement = 2000 [Dj] + 87-88 codeflag scanningMode = 0 [00000000:(1=0) Points scan in +i direction;(2=0) Points scan in -j direction;(3=0) Adjacent points in i direction are consecutive :grib1/8.table] + 88-88 bit iScansNegatively = 0 + 88-88 bit jScansPositively = 0 + 88-88 bit jPointsAreConsecutive = 0 + 88-88 constant iScansPositively = 1 + 88-88 bit scanningMode4 = 0 + 88-88 bit scanningMode5 = 0 + 88-88 bit scanningMode6 = 0 + 88-88 bit scanningMode7 = 0 + 88-88 bit scanningMode8 = 0 + 88-88 latlon_increment jDirectionIncrementInDegrees = 2 [geography.jInc, geography.gridNorthSouth] + 88-88 latlon_increment iDirectionIncrementInDegrees = 2 [geography.iInc, geography.gridWestEast] + ----> iterator ITERATOR + <===== section dataRepresentation + 88-88 position endGridDefinition = 88 + 88-88 transient PVPresent = 0 + 88-88 position offsetBeforePV = 88 + 88-88 position offsetBeforePL = 88 + 88-88 transient PLPresent = 0 [reducedGrid] + 88-92 padto padding_sec2_1 = 4 { + 00, 00, 00, 00 + } # padto padding_sec2_1 + 92-92 padtoeven padding_sec2_3 = 0 {} + <===== section section_2 + 92-92 position endOfHeadersMaker = 92 + 92-92 transient missingValue = 9999 + 92-92 constant tableReference = 0 + ======> section section_4 (1004,1004,0) + 92-92 position offsetSection4 = 92 + 92-95 g1_section4_length section4Length = 1004 + 95-95 g1_half_byte_codeflag halfByte = 8 + 95-96 codeflag dataFlag = 8 [00001000:(1=0) Grid-point data;(2=0) Simple packing;(3=0) Floating point values are represented;(4=0) No additional flags at octet 14:grib1/11.table] + 96-98 signed binaryScaleFactor = -10 + 98-102 ibmfloat referenceValue = 269.587 + 102-103 unsigned numberOfBitsContainingEachPackedValue = 16 [nbp, numberOfBits, bitsPerValue] + 103-103 bit sphericalHarmonics = 0 + 103-103 bit complexPacking = 0 + 103-103 bit integerPointValues = 0 + 103-103 bit additionalFlagPresent = 0 + ======> section dataValues (993,993,0) + 103-103 constant dataRepresentationTemplateNumber = 0 + 103-103 position offsetBeforeData = 103 + 103-103 constant bitMapIndicator = 255 + 103-1096 data_g1simple_packing values = (496,993) { + 277.704, 277.797, 278.103, 274.598, 269.587, 278.345, 277.213, 278.19, + 277.853, 276.747, 274.361, 273.636, 274.593, 273.782, 273.016, 274.316, + 278.492, 278.792, 278.836, 278.333, 277.389, 278.525, 278.175, 277.255, + 277.383, 278.047, 277.877, 276.213, 273.99, 278.333, 278.58, 277.642, + 278.865, 278.997, 278.509, 278.983, 279.527, 279.414, 278.8, 278.749, + 278.895, 279.056, 278.699, 278.426, 276.601, 277.491, 279.646, 279.198, + 279.108, 279.156, 279.406, 279.527, 280.344, 280.869, 279.951, 281.621, + 281.221, 280.676, 281.049, 280.354, 279.025, 278.192, 280.05, 280.375, + 280.68, 281.269, 281.406, 281.483, 279.454, 280.641, 282.984, 282.578, + 281.797, 281.542, 281.854, 281.5, 279.917, 280.529, 282.008, 281.102, + 282.223, 282.727, 280.315, 278.539, 280.066, 280.789, 280.517, 282.883, + 283.897, 285.161, 285.779, 285.847, 281.973, 282.869, 281.926, 280.816, + 282.48, 281.894, 281.035, 281.722 + ... 396 more values + } # data_g1simple_packing values + <===== section dataValues + 1096-1096 size valuesCount = 496 + 1096-1096 concept typeOfGrid = regular_ll [ls.gridType] + 1096-1096 concept typeOfPacking = grid_simple [ls.packingType, dataRepresentation] + 1096-1096 padtoeven padding_sec4_1 = 0 {} + <===== section section_4 + ======> section section_5 (4,4,0) + ----> label gribSection5 + 1096-1096 position offsetSection5 = 1096 + 1096-1100 ascii 7777 = 7777 + <===== section section_5 +<===== section GRIB +\endverbatim\n +\n\n How to obtain a C code example from a grib file.\n\n +grib_dump -C ../data/regular_latlon_surface.grib1\n +\code +#include + +/* This code was generated automatically */ + + +int main(int argc,const char** argv) +{ + grib_handle *h = NULL; + size_t size = 0; + double* v = NULL; + FILE* f = NULL; + const char* p = NULL; + const void* buffer = NULL; + + if(argc != 2) { + fprintf(stderr,"usage: %s out\n",argv[0]); + exit(1); + } + + h = grib_handle_new_from_template(NULL,"GRIB2"); + if(!h) { + fprintf(stderr,"Cannot create grib handle\n"); + exit(1); + } + + + /* empty */ + + GRIB_CHECK(grib_set_long(h,"editionNumber",1),0); + GRIB_CHECK(grib_set_long(h,"gribTablesVersionNo",128),0); + + /* 98 = European Center for Medium-Range Weather Forecasts (grib1/0.table) */ + GRIB_CHECK(grib_set_long(h,"identificationOfOriginatingGeneratingCentre",98),0); + + GRIB_CHECK(grib_set_long(h,"generatingProcessIdentifier",128),0); + GRIB_CHECK(grib_set_long(h,"gridDefinition",255),0); + + /* 128 = 10000000 + (1=1) Section 2 included + (2=0) Section 3 omited + See grib1/1.table */ + GRIB_CHECK(grib_set_long(h,"section1Flags",128),0); + + + /* 167 = 2T 2 metre temperature K (grib1/2.98.128.table) */ + GRIB_CHECK(grib_set_long(h,"indicatorOfParameter",167),0); + + + /* 1 = Surface (of the Earth, which includes sea surface) (grib1/3.table) */ + GRIB_CHECK(grib_set_long(h,"indicatorOfTypeOfLevel",1),0); + + GRIB_CHECK(grib_set_long(h,"lev",0),0); + GRIB_CHECK(grib_set_long(h,"yearOfCentury",7),0); + GRIB_CHECK(grib_set_long(h,"month",3),0); + GRIB_CHECK(grib_set_long(h,"day",18),0); + GRIB_CHECK(grib_set_long(h,"hour",12),0); + GRIB_CHECK(grib_set_long(h,"minute",0),0); + + /* 1 = Hour (grib1/4.table) */ + GRIB_CHECK(grib_set_long(h,"indicatorOfUnitOfTimeRange",1),0); + + GRIB_CHECK(grib_set_long(h,"periodOfTime",0),0); + GRIB_CHECK(grib_set_long(h,"periodOfTimeIntervals",0),0); + + /* 0 = Forecast product valid at reference time + P1 (P1>0) (grib1/5.table) */ + GRIB_CHECK(grib_set_long(h,"timeRangeIndicator",0),0); + + GRIB_CHECK(grib_set_long(h,"numberIncludedInAverage",0),0); + GRIB_CHECK(grib_set_long(h,"numberMissingFromAveragesOrAccumulations",0),0); + GRIB_CHECK(grib_set_long(h,"centuryOfReferenceTimeOfData",21),0); + + /* 0 = Absent (grib1/0.table) */ + GRIB_CHECK(grib_set_long(h,"identificationOfOriginatingGeneratingSubCentre",0),0); + + GRIB_CHECK(grib_set_long(h,"decimalScaleFactor",0),0); + GRIB_CHECK(grib_set_long(h,"localDefinitionNumber",1),0); + + /* 1 = Operational archive (mars/class.table) */ + GRIB_CHECK(grib_set_long(h,"marsClass",1),0); + + + /* 2 = Analysis (mars/type.table) */ + GRIB_CHECK(grib_set_long(h,"marsType",2),0); + + + /* 1025 = Atmospheric model (mars/stream.table) */ + GRIB_CHECK(grib_set_long(h,"marsStream",1025),0); + + p = "0001"; + size = strlen(p)+1; + GRIB_CHECK(grib_set_string(h,"experimentVersionNumber",p,&size),0); + GRIB_CHECK(grib_set_long(h,"perturbationNumber",0),0); + GRIB_CHECK(grib_set_long(h,"numberOfForecastsInEnsemble",0),0); + GRIB_CHECK(grib_set_long(h,"numberOfVerticalCoordinateValues",0),0); + GRIB_CHECK(grib_set_long(h,"pvlLocation",255),0); + + /* 0 = Latitude/Longitude Grid (grib1/6.table) */ + GRIB_CHECK(grib_set_long(h,"dataRepresentationType",0),0); + + GRIB_CHECK(grib_set_long(h,"numberOfPointsAlongAParallel",16),0); + GRIB_CHECK(grib_set_long(h,"numberOfPointsAlongAMeridian",31),0); + GRIB_CHECK(grib_set_long(h,"latitudeOfFirstGridPoint",60000),0); + GRIB_CHECK(grib_set_long(h,"longitudeOfFirstGridPoint",0),0); + + /* 128 = 10000000 + (1=1) Direction increments given + (2=0) Earth assumed spherical with radius = 6367.47 km + (5=0) u and v components resolved relative to easterly and northerly directions + See grib1/7.table */ + GRIB_CHECK(grib_set_long(h,"resolutionAndComponentFlags",128),0); + + GRIB_CHECK(grib_set_long(h,"latitudeOfLastGridPoint",0),0); + GRIB_CHECK(grib_set_long(h,"longitudeOfLastGridPoint",30000),0); + GRIB_CHECK(grib_set_long(h,"iDirectionIncrement",2000),0); + GRIB_CHECK(grib_set_long(h,"jDirectionIncrement",2000),0); + + /* 0 = 00000000 + (1=0) Points scan in +i direction + (2=0) Points scan in -j direction + (3=0) Adjacent points in i direction are consecutive + See grib1/8.table */ + GRIB_CHECK(grib_set_long(h,"scanningMode",0),0); + + + /* ITERATOR */ + + + /* 8 = 00001000 + (1=0) Grid-point data + (2=0) Simple packing + (3=0) Floating point values are represented + (4=0) No additional flags at octet 14 + See grib1/11.table */ + GRIB_CHECK(grib_set_long(h,"dataFlag",8),0); + + GRIB_CHECK(grib_set_long(h,"numberOfBitsContainingEachPackedValue",16),0); + size = 496; + v = (double*)calloc(size,sizeof(double)); + if(!v) { + fprintf(stderr,"failed to allocate %d bytes\n",size*sizeof(double)); + exit(1); + } + + v[ 0] = 277.704; v[ 1] = 277.797; v[ 2] = 278.103; v[ 3] = 274.598; + v[ 4] = 269.587; v[ 5] = 278.345; v[ 6] = 277.213; v[ 7] = 278.19; + v[ 8] = 277.853; v[ 9] = 276.747; v[ 10] = 274.361; v[ 11] = 273.636; + v[ 12] = 274.593; v[ 13] = 273.782; v[ 14] = 273.016; v[ 15] = 274.316; + v[ 16] = 278.492; v[ 17] = 278.792; v[ 18] = 278.836; v[ 19] = 278.333; + v[ 20] = 277.389; v[ 21] = 278.525; v[ 22] = 278.175; v[ 23] = 277.255; + v[ 24] = 277.383; v[ 25] = 278.047; v[ 26] = 277.877; v[ 27] = 276.213; + v[ 28] = 273.99; v[ 29] = 278.333; v[ 30] = 278.58; v[ 31] = 277.642; + v[ 32] = 278.865; v[ 33] = 278.997; v[ 34] = 278.509; v[ 35] = 278.983; + v[ 36] = 279.527; v[ 37] = 279.414; v[ 38] = 278.8; v[ 39] = 278.749; + v[ 40] = 278.895; v[ 41] = 279.056; v[ 42] = 278.699; v[ 43] = 278.426; + v[ 44] = 276.601; v[ 45] = 277.491; v[ 46] = 279.646; v[ 47] = 279.198; + v[ 48] = 279.108; v[ 49] = 279.156; v[ 50] = 279.406; v[ 51] = 279.527; + v[ 52] = 280.344; v[ 53] = 280.869; v[ 54] = 279.951; v[ 55] = 281.621; + v[ 56] = 281.221; v[ 57] = 280.676; v[ 58] = 281.049; v[ 59] = 280.354; + v[ 60] = 279.025; v[ 61] = 278.192; v[ 62] = 280.05; v[ 63] = 280.375; + v[ 64] = 280.68; v[ 65] = 281.269; v[ 66] = 281.406; v[ 67] = 281.483; + v[ 68] = 279.454; v[ 69] = 280.641; v[ 70] = 282.984; v[ 71] = 282.578; + v[ 72] = 281.797; v[ 73] = 281.542; v[ 74] = 281.854; v[ 75] = 281.5; + v[ 76] = 279.917; v[ 77] = 280.529; v[ 78] = 282.008; v[ 79] = 281.102; + v[ 80] = 282.223; v[ 81] = 282.727; v[ 82] = 280.315; v[ 83] = 278.539; + v[ 84] = 280.066; v[ 85] = 280.789; v[ 86] = 280.517; v[ 87] = 282.883; + v[ 88] = 283.897; v[ 89] = 285.161; v[ 90] = 285.779; v[ 91] = 285.847; + v[ 92] = 281.973; v[ 93] = 282.869; v[ 94] = 281.926; v[ 95] = 280.816; + v[ 96] = 282.48; v[ 97] = 281.894; v[ 98] = 281.035; v[ 99] = 281.722; + v[ 100] = 279.978; v[ 101] = 284.138; v[ 102] = 287.234; v[ 103] = 287.831; + v[ 104] = 288.452; v[ 105] = 289.882; v[ 106] = 287.776; v[ 107] = 287.946; + v[ 108] = 281.466; v[ 109] = 284.771; v[ 110] = 283.343; v[ 111] = 282.477; + v[ 112] = 284.723; v[ 113] = 280.869; v[ 114] = 285.693; v[ 115] = 284.132; + v[ 116] = 276.881; v[ 117] = 283.388; v[ 118] = 287.295; v[ 119] = 286.764; + v[ 120] = 291.798; v[ 121] = 291.607; v[ 122] = 290.086; v[ 123] = 286.769; + v[ 124] = 284.24; v[ 125] = 280.884; v[ 126] = 286.866; v[ 127] = 284.694; + v[ 128] = 285.417; v[ 129] = 283.823; v[ 130] = 289.898; v[ 131] = 290.317; + v[ 132] = 287.031; v[ 133] = 287.949; v[ 134] = 289.263; v[ 135] = 289.869; + v[ 136] = 289.926; v[ 137] = 289.535; v[ 138] = 289.817; v[ 139] = 287.768; + v[ 140] = 290.394; v[ 141] = 290.294; v[ 142] = 287.069; v[ 143] = 281.759; + v[ 144] = 289.132; v[ 145] = 287.316; v[ 146] = 287.548; v[ 147] = 287.181; + v[ 148] = 287.645; v[ 149] = 289.492; v[ 150] = 288.956; v[ 151] = 286.634; + v[ 152] = 289.7; v[ 153] = 289.189; v[ 154] = 287.704; v[ 155] = 291.151; + v[ 156] = 286.208; v[ 157] = 291.093; v[ 158] = 284.818; v[ 159] = 282.097; + v[ 160] = 289.244; v[ 161] = 288.263; v[ 162] = 289.545; v[ 163] = 290.018; + v[ 164] = 289.881; v[ 165] = 290.215; v[ 166] = 289.999; v[ 167] = 289.447; + v[ 168] = 284.105; v[ 169] = 290.686; v[ 170] = 288.128; v[ 171] = 290.241; + v[ 172] = 289.116; v[ 173] = 289.576; v[ 174] = 291.8; v[ 175] = 286.35; + v[ 176] = 289.239; v[ 177] = 289.525; v[ 178] = 289.45; v[ 179] = 290.114; + v[ 180] = 290.301; v[ 181] = 289.429; v[ 182] = 290.005; v[ 183] = 287.195; + v[ 184] = 289.823; v[ 185] = 290.313; v[ 186] = 290.792; v[ 187] = 286.693; + v[ 188] = 291.941; v[ 189] = 290.783; v[ 190] = 290.818; v[ 191] = 287.234; + v[ 192] = 287.001; v[ 193] = 287.49; v[ 194] = 286.791; v[ 195] = 286.71; + v[ 196] = 287.182; v[ 197] = 290.49; v[ 198] = 290.322; v[ 199] = 289.957; + v[ 200] = 290.056; v[ 201] = 289.915; v[ 202] = 289.917; v[ 203] = 290.251; + v[ 204] = 290.502; v[ 205] = 290.782; v[ 206] = 291.367; v[ 207] = 291.025; + v[ 208] = 290.326; v[ 209] = 285.912; v[ 210] = 290.003; v[ 211] = 294.341; + v[ 212] = 294.048; v[ 213] = 291.771; v[ 214] = 290.675; v[ 215] = 291.203; + v[ 216] = 291.478; v[ 217] = 290.939; v[ 218] = 290.555; v[ 219] = 289.821; + v[ 220] = 290.126; v[ 221] = 291.021; v[ 222] = 291.243; v[ 223] = 290.761; + v[ 224] = 291.05; v[ 225] = 291.556; v[ 226] = 292.386; v[ 227] = 293.149; + v[ 228] = 293.301; v[ 229] = 291.821; v[ 230] = 290.157; v[ 231] = 293.427; + v[ 232] = 292.629; v[ 233] = 292.25; v[ 234] = 294.59; v[ 235] = 296.421; + v[ 236] = 296.16; v[ 237] = 290.221; v[ 238] = 290.882; v[ 239] = 290.864; + v[ 240] = 294.69; v[ 241] = 294.224; v[ 242] = 294.332; v[ 243] = 293.917; + v[ 244] = 292.863; v[ 245] = 293.005; v[ 246] = 292.814; v[ 247] = 295.443; + v[ 248] = 296.665; v[ 249] = 298.566; v[ 250] = 298.846; v[ 251] = 298.165; + v[ 252] = 297.105; v[ 253] = 294.729; v[ 254] = 294.968; v[ 255] = 293.305; + v[ 256] = 298.003; v[ 257] = 296.402; v[ 258] = 295.03; v[ 259] = 295.649; + v[ 260] = 295.811; v[ 261] = 297.203; v[ 262] = 298.222; v[ 263] = 297.12; + v[ 264] = 299.167; v[ 265] = 298.919; v[ 266] = 298.372; v[ 267] = 297.932; + v[ 268] = 296.47; v[ 269] = 295.208; v[ 270] = 294.647; v[ 271] = 294.034; + v[ 272] = 300.407; v[ 273] = 301.659; v[ 274] = 300.621; v[ 275] = 297.093; + v[ 276] = 295.676; v[ 277] = 298.434; v[ 278] = 298.906; v[ 279] = 302.369; + v[ 280] = 300.815; v[ 281] = 299.277; v[ 282] = 298.643; v[ 283] = 298.381; + v[ 284] = 296.632; v[ 285] = 294.887; v[ 286] = 295.411; v[ 287] = 293.665; + v[ 288] = 303.051; v[ 289] = 304.741; v[ 290] = 304.555; v[ 291] = 301.901; + v[ 292] = 301.846; v[ 293] = 300.793; v[ 294] = 302.141; v[ 295] = 300.521; + v[ 296] = 300.74; v[ 297] = 301.164; v[ 298] = 299.811; v[ 299] = 298.146; + v[ 300] = 298.443; v[ 301] = 293.905; v[ 302] = 295.545; v[ 303] = 296.185; + v[ 304] = 306.254; v[ 305] = 307.698; v[ 306] = 307.503; v[ 307] = 304.62; + v[ 308] = 304.458; v[ 309] = 303.097; v[ 310] = 303.69; v[ 311] = 303.482; + v[ 312] = 303.514; v[ 313] = 304.001; v[ 314] = 299.346; v[ 315] = 298.529; + v[ 316] = 297.935; v[ 317] = 295.495; v[ 318] = 295.846; v[ 319] = 296.122; + v[ 320] = 309.596; v[ 321] = 308.059; v[ 322] = 305.473; v[ 323] = 305.581; + v[ 324] = 306.11; v[ 325] = 303.994; v[ 326] = 304.602; v[ 327] = 304.286; + v[ 328] = 304.18; v[ 329] = 305.511; v[ 330] = 300.083; v[ 331] = 299.69; + v[ 332] = 297.061; v[ 333] = 296.252; v[ 334] = 296.508; v[ 335] = 298.427; + v[ 336] = 309.837; v[ 337] = 309.568; v[ 338] = 308.175; v[ 339] = 306.983; + v[ 340] = 307.399; v[ 341] = 303.002; v[ 342] = 303.582; v[ 343] = 303.765; + v[ 344] = 304.829; v[ 345] = 303.815; v[ 346] = 302.952; v[ 347] = 301.263; + v[ 348] = 296.397; v[ 349] = 298.184; v[ 350] = 297.765; v[ 351] = 299.807; + v[ 352] = 311.829; v[ 353] = 309.43; v[ 354] = 307.672; v[ 355] = 307.068; + v[ 356] = 306.384; v[ 357] = 304.862; v[ 358] = 304.397; v[ 359] = 303.944; + v[ 360] = 304.673; v[ 361] = 304.326; v[ 362] = 303.948; v[ 363] = 302.827; + v[ 364] = 297.377; v[ 365] = 296.722; v[ 366] = 298.711; v[ 367] = 300.744; + v[ 368] = 310.353; v[ 369] = 309.716; v[ 370] = 309.28; v[ 371] = 308.163; + v[ 372] = 306.711; v[ 373] = 305.75; v[ 374] = 304.74; v[ 375] = 305.384; + v[ 376] = 304.885; v[ 377] = 305.735; v[ 378] = 307.71; v[ 379] = 303.764; + v[ 380] = 303.073; v[ 381] = 300.87; v[ 382] = 300.858; v[ 383] = 302.205; + v[ 384] = 311.264; v[ 385] = 311.085; v[ 386] = 310.432; v[ 387] = 308.94; + v[ 388] = 305.619; v[ 389] = 307; v[ 390] = 306.413; v[ 391] = 307.649; + v[ 392] = 308.429; v[ 393] = 309.358; v[ 394] = 309.365; v[ 395] = 307.933; + v[ 396] = 306.15; v[ 397] = 305.126; v[ 398] = 305.611; v[ 399] = 303.336; + v[ 400] = 309.947; v[ 401] = 309.562; v[ 402] = 309.339; v[ 403] = 310.316; + v[ 404] = 308.055; v[ 405] = 307.565; v[ 406] = 310.605; v[ 407] = 308.4; + v[ 408] = 309.219; v[ 409] = 310.801; v[ 410] = 310.525; v[ 411] = 309.65; + v[ 412] = 306.611; v[ 413] = 306.033; v[ 414] = 307.988; v[ 415] = 308.941; + v[ 416] = 308.4; v[ 417] = 307.615; v[ 418] = 307.404; v[ 419] = 308.381; + v[ 420] = 309.778; v[ 421] = 311.715; v[ 422] = 308.409; v[ 423] = 307.156; + v[ 424] = 308.715; v[ 425] = 307.201; v[ 426] = 310.448; v[ 427] = 309.24; + v[ 428] = 306.716; v[ 429] = 307.307; v[ 430] = 309.062; v[ 431] = 309.776; + v[ 432] = 303.033; v[ 433] = 302.76; v[ 434] = 303.071; v[ 435] = 306.578; + v[ 436] = 309.819; v[ 437] = 305.046; v[ 438] = 309.764; v[ 439] = 307.857; + v[ 440] = 301.171; v[ 441] = 302.783; v[ 442] = 301.107; v[ 443] = 300.429; + v[ 444] = 303.189; v[ 445] = 304.585; v[ 446] = 303.709; v[ 447] = 307.132; + v[ 448] = 302.315; v[ 449] = 302.922; v[ 450] = 302.593; v[ 451] = 302.476; + v[ 452] = 302.132; v[ 453] = 305.953; v[ 454] = 300.132; v[ 455] = 301.361; + v[ 456] = 302.355; v[ 457] = 304.042; v[ 458] = 302.175; v[ 459] = 297.057; + v[ 460] = 296.072; v[ 461] = 296.644; v[ 462] = 296.895; v[ 463] = 296.22; + v[ 464] = 300.897; v[ 465] = 300.839; v[ 466] = 300.899; v[ 467] = 301.941; + v[ 468] = 302.709; v[ 469] = 301.495; v[ 470] = 302.248; v[ 471] = 301.468; + v[ 472] = 303.598; v[ 473] = 304.599; v[ 474] = 299.779; v[ 475] = 297.9; + v[ 476] = 295.564; v[ 477] = 296.015; v[ 478] = 293.688; v[ 479] = 294.294; + v[ 480] = 300.801; v[ 481] = 300.724; v[ 482] = 301.204; v[ 483] = 302.463; + v[ 484] = 302.885; v[ 485] = 305.413; v[ 486] = 305.523; v[ 487] = 303.672; + v[ 488] = 304.547; v[ 489] = 303.334; v[ 490] = 301.616; v[ 491] = 298.654; + v[ 492] = 297.975; v[ 493] = 295.379; v[ 494] = 293.83; v[ 495] = 300.082; + + GRIB_CHECK(grib_set_double_array(h,"values",v,size),0); + free(v); + + /* gribSection5 */ + +/* Save the message */ + + f = fopen(argv[1],"w"); + if(!f) { + perror(argv[1]); + exit(1); + } + + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + if(fwrite(buffer,1,size,f) != size) { + perror(argv[1]); + exit(1); + } + + if(fclose(f)) { + perror(argv[1]); + exit(1); + } + + grib_handle_delete(h); + return 0; +} +\endcode\n +*/ diff --git a/tools/grib_debug.sh b/tools/grib_debug.sh new file mode 100755 index 000000000..10dfbaa22 --- /dev/null +++ b/tools/grib_debug.sh @@ -0,0 +1,22 @@ +#!/bin/sh +set -e + +echo "Dumping in a WMO documentation style with hexadecimal octet values (-H)\\n" +echo "and with the aliases of each key listed in square brackets (-a).\\n\\n" +echo grib_dump -Ha ../data/reduced_gaussian_model_level.grib1\\n +echo "\\verbatim" +./grib_dump -Ha ../data/reduced_gaussian_model_level.grib1 +echo "\\endverbatim\\n" + +echo "\\n \\n How to obtain all the key names available in a grib file.\\n\\n" +echo grib_dump -D ../data/regular_latlon_surface.grib1 +echo "\\verbatim " +./grib_dump -D ../data/regular_latlon_surface.grib1 +echo "\\endverbatim\\n" + +echo "\\n\\n How to obtain a C code example from a grib file.\\n\\n" +echo grib_dump -C ../data/regular_latlon_surface.grib1\\n +echo "\\code " +./grib_dump -C ../data/regular_latlon_surface.grib1 +echo "\\endcode\\n" + diff --git a/tools/grib_diff.c b/tools/grib_diff.c new file mode 100644 index 000000000..b10dd7b2f --- /dev/null +++ b/tools/grib_diff.c @@ -0,0 +1,447 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +void usage(const char *prog) +{ + fprintf(stderr,"%s: [-b blacklist][-e] [-p err] file1 file2\n",prog); + exit(1); +} + +typedef struct blacklist { + struct blacklist *next; + char* key; +} blacklist; + +const char* prog; + +double maxAbsoluteError = 0; +double maxRelativeError = 0; + + +static double err(double A, double B) +{ + double relativeError; + + if(fabs(A) <= maxAbsoluteError || fabs(B) <= maxAbsoluteError) + relativeError = fabs(A-B); + else if (fabs(B) > fabs(A)) + relativeError = fabs((A - B) / B); + else + relativeError = fabs((A - B) / A); + + return relativeError; +} + + +static int same(double a,double b) +{ + return err(a,b) <= maxRelativeError; +} + + +static int compare_values(grib_handle* h1,grib_handle *h2,const char *name) +{ + size_t len1 = 0; + size_t len2 = 0; + int err; + int err1; + int err2; + int type1,type2; + + char *sval1 = NULL,*sval2 = NULL; + unsigned char *uval1 = NULL,*uval2 = NULL; + double *dval1 = NULL, *dval2 = NULL; + long *lval1 = NULL, *lval2 = NULL; + + if((err = grib_get_native_type(h1,name,&type1)) != GRIB_SUCCESS) + { + printf("Oops... cannot get type of [%s] in 1st field: %s\n",name,grib_get_error_message(err)); + return err; + } + + if((err = grib_get_native_type(h2,name,&type2)) != GRIB_SUCCESS) + { + if(err == GRIB_NOT_FOUND) + { + printf("[%s] not found in 2nd field\n",name); + return err; + } + + printf("Oops... cannot get type of [%s] in 2nd field: %s\n",name,grib_get_error_message(err)); + return err; + } + + if(type1 != type2) + { + printf("Warning, [%s] has different types: 1st field: [%s], 2nd field: [%s]\n", + name,grib_get_type_name(type1),grib_get_type_name(type2)); + /* return GRIB_TYPE_MISMATCH; */ + } + + if(type1 == GRIB_TYPE_LABEL) + return err; + + if(type1 == GRIB_TYPE_SECTION) + return err; + + + if((err = grib_get_size(h1,name,&len1)) != GRIB_SUCCESS) + { + printf("Oops... cannot get size of [%s] in 1st field: %s\n",name,grib_get_error_message(err)); + return err; + } + + if((err = grib_get_size(h2,name,&len2)) != GRIB_SUCCESS) + { + if(err == GRIB_NOT_FOUND) + { + printf("[%s] not found in 2nd field\n",name); + return err; + } + + printf("Oops... cannot get size of [%s] in 2nd field: %s\n",name,grib_get_error_message(err)); + return err; + } + + if(len1 != len2) + { + printf("[%s] has different size: 1st field: %ld, 2nd field: %ld\n",name,(long)len1,(long)len2); + return GRIB_COUNT_MISMATCH; + } + + switch(type1) + { + case GRIB_TYPE_STRING: + + sval1 = grib_context_malloc(h1->context,len1*sizeof(char)); + sval2 = grib_context_malloc(h2->context,len2*sizeof(char)); + + if((err1 = grib_get_string(h1,name,sval1,&len1)) != GRIB_SUCCESS) + { + printf("Oops... cannot get string value of [%s] in 1st field: %s\n", + name,grib_get_error_message(err1)); + } + + if((err2 = grib_get_string(h2,name,sval2,&len2)) != GRIB_SUCCESS) + { + printf("Oops... cannot get string value of [%s] in 2nd field: %s\n", + name,grib_get_error_message(err2)); + } + + if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS) + { + if(strcmp(sval1,sval2) != 0) + { + printf("[%s] string values are different: [%s] and [%s]\n", + name,sval1,sval2); + err1 = GRIB_VALUE_MISMATCH; + } + } + + grib_context_free(h1->context,sval1); + grib_context_free(h2->context,sval2); + + if(err1) return err1; + if(err2) return err2; + + break; + + case GRIB_TYPE_LONG: + + lval1 = grib_context_malloc(h1->context,len1*sizeof(long)); + lval2 = grib_context_malloc(h2->context,len2*sizeof(long)); + + if((err1 = grib_get_long_array(h1,name,lval1,&len1)) != GRIB_SUCCESS) + { + printf("Oops... cannot get long value of [%s] in 1st field: %s\n", + name,grib_get_error_message(err1)); + } + + if((err2 = grib_get_long_array(h2,name,lval2,&len2)) != GRIB_SUCCESS) + { + printf("Oops... cannot get long value of [%s] in 2nd field: %s\n", + name,grib_get_error_message(err2)); + } + + if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS) + { + int i; + for(i = 0; i < len1; i++) + if(lval1[i] != lval2[i]) + { + if(len1 == 1) + printf("[%s] long values are different: [%ld] and [%ld]\n", + name,lval1[i],lval2[i]); + else + printf("[%s] long value %d of %ld are different: [%ld] and [%ld]\n", + name,i,(long)len1,lval1[i],lval2[i]); + + err1 = GRIB_VALUE_MISMATCH; + break; + } + } + + grib_context_free(h1->context,lval1); + grib_context_free(h2->context,lval2); + + if(err1) return err1; + if(err2) return err2; + break; + + case GRIB_TYPE_DOUBLE: + dval1 = grib_context_malloc(h1->context,len1*sizeof(double)); + dval2 = grib_context_malloc(h2->context,len2*sizeof(double)); + + if((err1 = grib_get_double_array(h1,name,dval1,&len1)) != GRIB_SUCCESS) + { + printf("Oops... cannot get double value of [%s] in 1st field: %s\n", + name,grib_get_error_message(err1)); + } + + if((err2 = grib_get_double_array(h2,name,dval2,&len2)) != GRIB_SUCCESS) + { + printf("Oops... cannot get double value of [%s] in 2nd field: %s\n", + name,grib_get_error_message(err2)); + } + + if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS) + { + int i; + for(i = 0; i < len1; i++) + if(!same(dval1[i],dval2[i])) + { + if(len1 == 1) + printf("[%s] double values are different: [%g] and [%g], diff: %g\n", + name,dval1[i],dval2[i],dval1[i] - dval2[i]); + else + printf("[%s] double value %d of %ld are different: [%g] and [%g], diff: %g\n", + name,i,(long)len1,dval1[i],dval2[i],dval1[i] - dval2[i]); + + err1 = GRIB_VALUE_MISMATCH; + break; + } + } + + grib_context_free(h1->context,dval1); + grib_context_free(h2->context,dval2); + + if(err1) return err1; + if(err2) return err2; + break; + + case GRIB_TYPE_BYTES: + + uval1 = grib_context_malloc(h1->context,len1*sizeof(unsigned char)); + uval2 = grib_context_malloc(h2->context,len2*sizeof(unsigned char)); + + if((err1 = grib_get_bytes(h1,name,uval1,&len1)) != GRIB_SUCCESS) + { + printf("Oops... cannot get bytes value of [%s] in 1st field: %s\n", + name,grib_get_error_message(err1)); + } + + if((err2 = grib_get_bytes(h2,name,uval2,&len2)) != GRIB_SUCCESS) + { + printf("Oops... cannot get bytes value of [%s] in 2nd field: %s\n", + name,grib_get_error_message(err2)); + } + + if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS) + { + if(memcmp(uval1,uval2,len1) != 0) + { + int i; + for(i = 0; i < len1; i++) + if(uval1[i] != uval2[i]) + { + if(len1 == 1) + printf("[%s] byte values are different: [%02x] and [%02x]\n", + name,uval1[i],uval2[i]); + else + printf("[%s] byte value %d of %ld are different: [%02x] and [%02x]\n", + name,i,(long)len1,uval1[i],uval2[i]); + + err1 = GRIB_VALUE_MISMATCH; + break; + } + err1 = GRIB_VALUE_MISMATCH; + } + } + + grib_context_free(h1->context,uval1); + grib_context_free(h2->context,uval2); + + if(err1) return err1; + if(err2) return err2; + break; + + case GRIB_TYPE_LABEL: + break; + + default: + printf("Cannot compare [%s], unsupported type %d\n",name,type1); + return GRIB_UNABLE_TO_COMPARE_ACCESSORS; + break; + } + + return GRIB_SUCCESS; + +} + +static int in_blacklist(const char* name,blacklist* bl) { + blacklist* p=bl; + while (p) { + if (!strcmp(name,p->key)) return 1; + p=p->next; + } + return 0; +} + +static int compare_handles(grib_handle* h1,grib_handle* h2,blacklist* bl) +{ + int err = 0; + const char* name=NULL; + grib_keys_iterator* iter = grib_keys_iterator_new(h1, + GRIB_KEYS_ITERATOR_SKIP_EDITION_SPECIFIC|GRIB_KEYS_ITERATOR_SKIP_DUPLICATES,NULL); + + if (!iter) { + printf("ERROR: unable to get iterator begin\n"); + exit(1); + } + + while(grib_keys_iterator_next(iter)) + { + /* printf("--------------- %s -----------\n",iter->current->name); */ + /* We can also black list with the class*/ +/* grib_get_accessor_class_name' */ + + name=grib_keys_iterator_get_name(iter); + + if( !in_blacklist(name,bl) && compare_values(h1,h2,name)) + err++; + + } + + grib_keys_iterator_delete(iter); + + return err; +} + +static void compare_files(const char* file1,const char* file2, blacklist* bl) +{ + FILE *f1 = fopen(file1,"r"); + FILE *f2 = fopen(file2,"r"); + int e1 = 0; + int e2 = 0; + grib_handle *h1; + grib_handle *h2; + int count = 0; + int err = 0; + grib_context* c=grib_context_get_default( ); + + grib_multi_support_off(c); + + if(!f1) { + perror(file1); + exit(1); + } + + if(!f2) { + perror(file2); + exit(1); + } + + h1 = grib_handle_new_from_file(c,f1,&e1); + h2 = grib_handle_new_from_file(c,f2,&e2); + + while(h1 && h2) + { + ++count; + + printf("..............................\n"); + if(compare_handles(h1,h2,bl)) err++; + printf("..............................\n"); + if(compare_handles(h2,h1,bl)) err++; + + grib_handle_delete(h1); + grib_handle_delete(h2); + + e1 = e2 = 0; + + h1 = grib_handle_new_from_file(c,f1,&e1); + h2 = grib_handle_new_from_file(c,f2,&e2); + } + + GRIB_CHECK(e1,file1); + GRIB_CHECK(e2,file2); + + if(h1 != h2) + { + fprintf(stderr,"%s: Premature eof on %s\n",prog,h1 == 0 ? file1 : file2); + exit(1); + } + + if(err) exit(1); + +} + + + +int main(int argc, char *argv[]) +{ + extern char *optarg; + extern int optind; + char *tok=NULL; + blacklist *bl=NULL,*p=NULL; + int c; + + prog = argv[0]; + + while((c = getopt(argc, argv,"ep:b:")) != EOF) { + switch(c) { + + case 'p': + maxRelativeError = atof(optarg); + break; + + case 'e': + maxRelativeError = 1e-5; + break; + + case 'b': + tok=strtok(optarg,", "); + while (tok) { + p=(blacklist*)calloc(1,sizeof(blacklist)); + p->key=strdup(tok); + if (!bl) bl=p; + else { + p->next=bl; + bl=p; + } + tok=strtok(NULL,", "); + } + break; + + default: + usage(prog); + break; + } + } + + if(argc-optind < 2) usage(prog); + + compare_files(argv[argc-2],argv[argc-1],bl); + + return 0; + +} + diff --git a/tools/grib_distance.c b/tools/grib_distance.c new file mode 100644 index 000000000..c6e787243 --- /dev/null +++ b/tools/grib_distance.c @@ -0,0 +1,166 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include +#include +#include +#include + + +#include "grib_api.h" + +void usage(const char *prog) +{ + fprintf(stderr,"%s: in1 [in2 ... ] out\n",prog); + exit(1); +} + +int compare(const void *a, const void *b) +{ + double da = *(double*)a; + double db = *(double*)b; + return da == db ? 0 : ( da > db ? 1 : -1 ); +} + +int main(int argc, const char *argv[]) +{ + int i; + FILE *in1,*in2; + int e; + grib_handle *h1,*h2; + double* v1,*v2 = NULL; + size_t s1,s2; + double d = 0; +#if 0 + double d1 = 0; + double d2 = 0; +#endif + + if(argc < 3) usage(argv[0]); + + in1 = fopen(argv[1],"r"); + if(!in1) { + perror(argv[1]); + exit(1); + } + + in2 = fopen(argv[2],"r"); + if(!in2) { + perror(argv[2]); + exit(2); + } + + if((h1 = grib_handle_new_from_file(NULL,in1,&e)) == NULL ) + { + if(e == 0) e = -1; + GRIB_CHECK(e,argv[1]); + exit(1); + } + + if((h2 = grib_handle_new_from_file(NULL,in2,&e)) == NULL ) + { + if(e == 0) e = -1; + GRIB_CHECK(e,argv[2]); + exit(1); + } + + GRIB_CHECK(grib_get_size(h1,"values",&s1),argv[1]); + GRIB_CHECK(grib_get_size(h2,"values",&s2),argv[2]); + + /*printf("s1=%ld s2=%ld\n",(long)s1,(long)s2);*/ + assert(s1 == s2); + + v1 = (double*)calloc(s1,sizeof(double)); + assert(v1); + v2 = (double*)calloc(s2,sizeof(double)); + assert(v2); + + GRIB_CHECK(grib_get_double_array(h1,"values",v1,&s1),argv[1]); + GRIB_CHECK(grib_get_double_array(h2,"values",v2,&s2),argv[2]); + + if(0) + { + qsort(v1,sizeof(double),s1,compare); + qsort(v2,sizeof(double),s2,compare); + + /* http://people.revoledu.com/kardi/tutorial/Similarity/index.html */ + + /* http://people.revoledu.com/kardi/tutorial/Similarity/BrayCurtisDistance.html */ + /* Bray Curtis Distance, or Sorensen */ + + for(i = 0; i < s1; i++) + { + double s = v1[i]-v2[i]; + d += s * s; + } + printf("%g\n",sqrt(d/s1)); + } + + if(0) { + double d1 = 0, d2 = 0; + for(i = 0; i < s1; i++) + { + if(i) assert(v1[i] >= v1[i-1]); + if(i) assert(v2[i] >= v2[i-1]); + + d += fabs(v1[i]-v2[i]); + d1 += v1[i]; + d2 += v2[i]; + } + printf("%g\n",d/(d1+d2)); + } + + if(1) + { + double d1 = 0; + double d2 = 0; + for(i = 0; i < s1; i++) + { + d1 += v1[i] * v1[i]; + d2 += v2[i] * v2[i]; + } + + d1 = d1*d1; + d2 = d2*d2; + + if(d1 == 0) d1 = 1; + if(d2 == 0) d2 = 1; + + d = 0; + for(i = 0; i < s1; i++) + { + double x = v1[i]/d1 - v2[i]/d2; + d += x * x; + } + + printf("%g\n",sqrt(d)); + + } + + if(0) + { + /* http://people.revoledu.com/kardi/tutorial/Similarity/CanberraDistance.html */ + d = 0; + for(i = 0; i < s1; i++) + { + if(v1[i] == 0 && v2[i] == 0) + d += 0.0; + else + d += fabs(v1[i]-v2[i])/(fabs(v1[i]) + fabs(v2[i])); + } + + /*printf("%g\n",d/s1);*/ + printf("%g\n",d); + } + + return 0; +} + diff --git a/tools/grib_dump.c b/tools/grib_dump.c new file mode 100644 index 000000000..d9619a2d0 --- /dev/null +++ b/tools/grib_dump.c @@ -0,0 +1,154 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_dump + * + * + * + */ + +#include "grib_tools.h" + +grib_option grib_options[]={ +/* {id, args, help}, on, command_line, value*/ + {"S",0,0,1,0,0}, + {"O",0,"Octet mode. WMO documentation style dump.\n",0,1,0}, + {"D",0,0,0,1,0}, + {"d",0,"Print all data values.\n",0,1,0}, + {"C",0,0,0,1,0}, + {"t",0,0,0,1,0}, + {"H",0,0,0,1,0}, + {"a",0,0,0,1,0}, + {"w:",0,0,0,1,0}, + {"M",0,0,0,1,0}, + {"T:",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"V",0,0,0,1,0}, + {"q",0,0,1,0,0} +}; + +char* grib_tool_description="Dump the content of a grib file in different formats."; +char* grib_tool_name="grib_dump"; +char* grib_tool_usage="[options] grib_file grib_file ..."; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); + +/** +*grib_dump +*Dump the content of a grib file +* +*/ +int main(int argc, char *argv[]) { return grib_tool(argc,argv);} + +int grib_tool_before_getopt(grib_runtime_options* options) { + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { + + int opt=grib_options_on("C")+grib_options_on("O")+grib_options_on("D"); + + options->dump_mode = "default"; + + + if (opt > 1) { + printf("%s: simultaneous C/O/D options not allowed\n",grib_tool_name); + exit(1); + } + + if (grib_options_on("C")) { + options->dump_mode = "c_code"; + if (grib_options_on("d")) + options->dump_flags = 0; + else + options->dump_flags = GRIB_DUMP_FLAG_NO_DATA; + } + + if (grib_options_on("O")) { + options->dump_mode = "wmo"; + options->dump_flags = GRIB_DUMP_FLAG_CODED + | GRIB_DUMP_FLAG_OCTECT + | GRIB_DUMP_FLAG_VALUES + | GRIB_DUMP_FLAG_READ_ONLY; + } + + if (grib_options_on("D")) { + options->dump_mode = "debug"; + options->dump_flags = GRIB_DUMP_FLAG_VALUES + | GRIB_DUMP_FLAG_READ_ONLY; + } + + if (grib_options_on("a")) + options->dump_flags |= GRIB_DUMP_FLAG_ALIASES; + + if (grib_options_on("t")) + options->dump_flags |= GRIB_DUMP_FLAG_TYPE; + + if (grib_options_on("H")) + options->dump_flags |= GRIB_DUMP_FLAG_HEXADECIMAL; + + if (grib_options_on("d")) + options->dump_flags |= GRIB_DUMP_FLAG_ALL_DATA; + + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; +} + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + char tmp[1024]; + if (!options->current_infile->name) return 0; + sprintf(tmp,"FILE: %s ",options->current_infile->name); + if (!grib_options_on("C")) + fprintf(stdout,"***** %s\n",tmp); + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + long length=0; + char tmp[1024]; + char identifier[100]; + size_t idlen=100; + int i; + GRIB_CHECK_NOLINE(grib_get_long(h,"totalLength",&length),0); + + for (i=0;iprint_keys_count;i++) + grib_set_flag(h,options->print_keys[i].name,GRIB_ACCESSOR_FLAG_DUMP); + + sprintf(tmp,"MESSAGE %d ( length=%ld )",options->handle_count,length); + if (!grib_options_on("C")) + fprintf(stdout,"#============== %-38s ==============\n",tmp); + if (!strcmp(options->dump_mode,"default")) { + GRIB_CHECK_NOLINE(grib_get_string(h,"identifier",identifier,&idlen),0); + printf("%s {\n",identifier); + } + + grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0); + + if (!strcmp(options->dump_mode,"default")) + printf("}\n"); + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) { + return 0; +} diff --git a/tools/grib_dump.dox b/tools/grib_dump.dox new file mode 100644 index 000000000..1ba2d0d03 --- /dev/null +++ b/tools/grib_dump.dox @@ -0,0 +1,246 @@ +/*! \page grib_dump grib_dump +\section DESCRIPTION + Dump the content of a grib file in different formats. + +\section USAGE + grib_dump + [options] grib_file grib_file ... + +\section OPTIONS +-O \n Octet mode. WMO documentation style dump. + \n \n -D \n Debug mode. + \n \n -d \n Print all data values. Available only in C mode + \n \n -C \n C code mode. A C code program generating the grib message is dumped. + \n \n -t \n Print type information. + \n \n -H \n Print octet content in hexadecimal format. + \n \n -a \n Dump aliases. + \n \n -w key[:{s/d/l}]{=/!=}value,key[:{s/d/l}]{=/!=}value,... \n + Where clause. + Grib messages are processed only if they match all the key/value constraints. + A valid constraint is of type key=value or key!=value. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be specified. Default type is string. + \n \n -M \n Multi-grib support off. Turn off support for multiple fields in single grib message. + \n \n -7 \n Does not fail when the message has wrong length + \n \n -V \n Version. + \n \n -G \n GRIBEX compatibility mode. + \n \n +\section grib_dump_examples grib_dump examples +-# To dump in a WMO documentation style with hexadecimal octet values (-H).\n +\verbatim +>grib_dump -OH ../data/reduced_gaussian_model_level.grib1 +\endverbatim\n +-# To add key aliases and type information.\n +\verbatim +>grib_dump -OtaH ../data/reduced_gaussian_model_level.grib1 +\endverbatim\n +-# To obtain all the key names (computed keys included) available in a grib file.\n +\verbatim +> grib_dump -D ../data/regular_latlon_surface.grib1 +\endverbatim\n +-# To obtain a C code example from a grib file.\n +\code +>grib_dump -C ../data/regular_latlon_surface.grib1 +#include + +/* This code was generated automatically */ + + +int main(int argc,const char** argv) +{ + grib_handle *h = NULL; + size_t size = 0; + double* vdouble = NULL; + long* vlong = NULL; + FILE* f = NULL; + const char* p = NULL; + const void* buffer = NULL; + + if(argc != 2) { + fprintf(stderr,"usage: %s out\n",argv[0]); + exit(1); + } + + h = grib_handle_new_from_samples(NULL,"GRIB1"); + if(!h) { + fprintf(stderr,"Cannot create grib handle\n"); + exit(1); + } + + GRIB_CHECK(grib_set_long(h,"parametersVersion",1),0); + GRIB_CHECK(grib_set_long(h,"truncateLaplacian",0),0); + GRIB_CHECK(grib_set_long(h,"truncateDegrees",0),0); + GRIB_CHECK(grib_set_long(h,"dummy",1),0); + GRIB_CHECK(grib_set_long(h,"changingPrecision",0),0); + GRIB_CHECK(grib_set_long(h,"unitsFactor",1),0); + GRIB_CHECK(grib_set_long(h,"unitsBias",0),0); + GRIB_CHECK(grib_set_long(h,"timeRangeIndicatorFromStepRange",-1),0); + GRIB_CHECK(grib_set_long(h,"eps",0),0); + GRIB_CHECK(grib_set_long(h,"editionNumber",1),0); + GRIB_CHECK(grib_set_long(h,"productionStatusOfProcessedData",0),0); + GRIB_CHECK(grib_set_long(h,"table2Version",128),0); + + /* 98 = European Center for Medium-Range Weather Forecasts (grib1/0.table) */ + GRIB_CHECK(grib_set_long(h,"centre",98),0); + + GRIB_CHECK(grib_set_long(h,"generatingProcessIdentifier",130),0); + GRIB_CHECK(grib_set_long(h,"gridDefinition",255),0); + + /* 128 = 10000000 + (1=1) Section 2 included + (2=0) Section 3 omited + See grib1/1.table */ + GRIB_CHECK(grib_set_long(h,"section1Flags",128),0); + + + /* 167 = 2 metre temperature (K) (grib1/2.98.128.table) */ + GRIB_CHECK(grib_set_long(h,"indicatorOfParameter",167),0); + + + /* 1 = Surface (of the Earth, which includes sea surface) (grib1/3.table) */ + GRIB_CHECK(grib_set_long(h,"indicatorOfTypeOfLevel",1),0); + + GRIB_CHECK(grib_set_long(h,"level",0),0); + GRIB_CHECK(grib_set_long(h,"yearOfCentury",8),0); + GRIB_CHECK(grib_set_long(h,"month",2),0); + GRIB_CHECK(grib_set_long(h,"day",6),0); + GRIB_CHECK(grib_set_long(h,"hour",12),0); + GRIB_CHECK(grib_set_long(h,"minute",0),0); + GRIB_CHECK(grib_set_long(h,"second",0),0); + + /* 1 = Hour (grib1/4.table) */ + GRIB_CHECK(grib_set_long(h,"unitOfTimeRange",1),0); + + GRIB_CHECK(grib_set_long(h,"P1",0),0); + GRIB_CHECK(grib_set_long(h,"P2",0),0); + + /* 0 = Forecast product valid at reference time + P1 (P1>0) (grib1/5.table) */ + GRIB_CHECK(grib_set_long(h,"timeRangeIndicator",0),0); + + GRIB_CHECK(grib_set_long(h,"numberIncludedInAverage",0),0); + GRIB_CHECK(grib_set_long(h,"numberMissingFromAveragesOrAccumulations",0),0); + GRIB_CHECK(grib_set_long(h,"centuryOfReferenceTimeOfData",21),0); + + /* 0 = Unknown code table entry (grib1/0.ecmf.table) */ + GRIB_CHECK(grib_set_long(h,"subCentre",0),0); + + GRIB_CHECK(grib_set_long(h,"decimalScaleFactor",0),0); + GRIB_CHECK(grib_set_long(h,"setLocalDefinition",0),0); + GRIB_CHECK(grib_set_long(h,"dataDate",20080206),0); + GRIB_CHECK(grib_set_long(h,"dataTime",1200),0); + + /* 1 = Hour (stepUnits.table) */ + GRIB_CHECK(grib_set_long(h,"stepUnits",1),0); + + GRIB_CHECK(grib_set_long(h,"deleteLocalDefinition",0),0); + + /* 1 = MARS labelling or ensemble forecast data (grib1/localDefinitionNumber.98.table) */ + GRIB_CHECK(grib_set_long(h,"localDefinitionNumber",1),0); + + + /* 1 = Operational archive (mars/class.table) */ + GRIB_CHECK(grib_set_long(h,"marsClass",1),0); + + + /* 2 = Analysis (mars/type.table) */ + GRIB_CHECK(grib_set_long(h,"marsType",2),0); + + + /* 1025 = Atmospheric model (mars/stream.table) */ + GRIB_CHECK(grib_set_long(h,"marsStream",1025),0); + + p = "0001"; + size = strlen(p)+1; + GRIB_CHECK(grib_set_string(h,"experimentVersionNumber",p,&size),0); + GRIB_CHECK(grib_set_long(h,"perturbationNumber",0),0); + GRIB_CHECK(grib_set_long(h,"numberOfForecastsInEnsemble",0),0); + + /* x */ + + GRIB_CHECK(grib_set_long(h,"gridDescriptionSectionPresent",1),0); + GRIB_CHECK(grib_set_long(h,"GDSPresent",1),0); + GRIB_CHECK(grib_set_long(h,"bitmapPresent",0),0); + GRIB_CHECK(grib_set_long(h,"radius",6367470),0); + GRIB_CHECK(grib_set_long(h,"shapeOfTheEarth",6),0); + GRIB_CHECK(grib_set_long(h,"numberOfVerticalCoordinateValues",0),0); + GRIB_CHECK(grib_set_long(h,"pvlLocation",255),0); + + /* 0 = Latitude/Longitude Grid (grib1/6.table) */ + GRIB_CHECK(grib_set_long(h,"dataRepresentationType",0),0); + + GRIB_CHECK(grib_set_long(h,"Ni",16),0); + GRIB_CHECK(grib_set_long(h,"Nj",31),0); + GRIB_CHECK(grib_set_long(h,"latitudeOfFirstGridPoint",60000),0); + GRIB_CHECK(grib_set_long(h,"longitudeOfFirstGridPoint",0),0); + + /* 128 = 10000000 + (1=1) Direction increments given + (2=0) Earth assumed spherical with radius = 6367.47 km + (5=0) u and v components resolved relative to easterly and northerly directions + See grib1/7.table */ + GRIB_CHECK(grib_set_long(h,"resolutionAndComponentFlags",128),0); + + GRIB_CHECK(grib_set_long(h,"ijDirectionIncrementGiven",1),0); + GRIB_CHECK(grib_set_long(h,"earthIsOblate",0),0); + GRIB_CHECK(grib_set_long(h,"uvRelativeToGrid",0),0); + GRIB_CHECK(grib_set_long(h,"latitudeOfLastGridPoint",0),0); + GRIB_CHECK(grib_set_long(h,"longitudeOfLastGridPoint",30000),0); + GRIB_CHECK(grib_set_long(h,"iDirectionIncrement",2000),0); + GRIB_CHECK(grib_set_long(h,"jDirectionIncrement",2000),0); + + /* 0 = 00000000 + (1=0) Points scan in +i direction + (2=0) Points scan in -j direction + (3=0) Adjacent points in i direction are consecutive + See grib1/8.table */ + GRIB_CHECK(grib_set_long(h,"scanningMode",0),0); + + GRIB_CHECK(grib_set_long(h,"iScansNegatively",0),0); + GRIB_CHECK(grib_set_long(h,"jScansPositively",0),0); + GRIB_CHECK(grib_set_long(h,"jPointsAreConsecutive",0),0); + GRIB_CHECK(grib_set_long(h,"iScansPositively",1),0); + + /* ITERATOR */ + + + /* NEAREST */ + + GRIB_CHECK(grib_set_long(h,"PVPresent",0),0); + GRIB_CHECK(grib_set_long(h,"PLPresent",0),0); + GRIB_CHECK(grib_set_long(h,"missingValue",9999),0); + GRIB_CHECK(grib_set_long(h,"sphericalHarmonics",0),0); + GRIB_CHECK(grib_set_long(h,"complexPacking",0),0); + GRIB_CHECK(grib_set_long(h,"integerPointValues",0),0); + GRIB_CHECK(grib_set_long(h,"additionalFlagPresent",0),0); + GRIB_CHECK(grib_set_long(h,"hideThis",0),0); + GRIB_CHECK(grib_set_long(h,"bitsPerValue",16),0); + GRIB_CHECK(grib_set_long(h,"dirty_statistics",1),0); + GRIB_CHECK(grib_set_long(h,"dataLength",124),0); + GRIB_CHECK(grib_set_long(h,"changeDecimalPrecision",0),0); + GRIB_CHECK(grib_set_long(h,"decimalPrecision",0),0); + GRIB_CHECK(grib_set_long(h,"bitsPerValueAndRepack",16),0); +/* Save the message */ + + f = fopen(argv[1],"w"); + if(!f) { + perror(argv[1]); + exit(1); + } + + GRIB_CHECK(grib_get_message(h,&buffer,&size),0); + + if(fwrite(buffer,1,size,f) != size) { + perror(argv[1]); + exit(1); + } + + if(fclose(f)) { + perror(argv[1]); + exit(1); + } + + grib_handle_delete(h); + return 0; +} +\endcode\n +*/ diff --git a/tools/grib_dump.sh b/tools/grib_dump.sh new file mode 100755 index 000000000..e5f845a7c --- /dev/null +++ b/tools/grib_dump.sh @@ -0,0 +1,24 @@ +#!/bin/sh +set -e + +echo "-# To dump in a WMO documentation style with hexadecimal octet values (-H).\\n" +echo "\\verbatim" +echo ">grib_dump -OH ../data/reduced_gaussian_model_level.grib1" +echo "\\endverbatim\\n" + +echo "-# To add key aliases and type information.\\n" +echo "\\verbatim" +echo ">grib_dump -OtaH ../data/reduced_gaussian_model_level.grib1" +echo "\\endverbatim\\n" + +echo "-# To obtain all the key names (computed keys included) available in a grib file.\\n" +echo "\\verbatim " +echo "> grib_dump -D ../data/regular_latlon_surface.grib1" +echo "\\endverbatim\\n" + +echo "-# To obtain a C code example from a grib file.\\n" +echo "\\code " +echo ">grib_dump -C ../data/regular_latlon_surface.grib1" +./grib_dump -C ../data/regular_latlon_surface.grib1 +echo "\\endcode\\n" + diff --git a/tools/grib_error.c b/tools/grib_error.c new file mode 100644 index 000000000..595548fbc --- /dev/null +++ b/tools/grib_error.c @@ -0,0 +1,263 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +void usage(const char *prog) +{ + fprintf(stderr,"%s: [-d] [-e err] [-o out] file1 file2\n",prog); + exit(1); +} + +const char* prog; + +double maxAbsoluteError = 0; +double maxRelativeError = 0; +int absolute = 0; +const char* outname; + + +static double err(double A, double B) +{ + double relativeError; + + if(fabs(A) <= maxAbsoluteError || fabs(B) <= maxAbsoluteError) + relativeError = fabs(A-B); + else if (fabs(B) > fabs(A)) + relativeError = fabs((A - B) / B); + else + relativeError = fabs((A - B) / A); + + return relativeError; +} + +static int location(grib_handle* h,int n,double *lat,double* lon) +{ + + int err=0; + grib_iterator* iter = grib_iterator_new(h,0,&err); + int i = 0; + double val; + + if(!iter) + return 0; + + + while(grib_iterator_next(iter,lat,lon,&val)) + { + if(i++ == n) + { + grib_iterator_delete(iter); + return 1; + } + } + + grib_iterator_delete(iter); + return 0; + +} + +/** +* Get the next value from an iterator. +* +* @param i : the iterator +* @param lat : on exit latitude in degree +* @param lon : on exit longitude in degree +* @param value : on exit value of the point +* @return : positive value if successfull, 0 if no more data are available +*/ + + +static void compare_handles(int n,grib_handle* h1,grib_handle* h2,FILE* out) +{ + size_t len1 = 0; + size_t len2 = 0; + + double *dval1 = NULL, *dval2 = NULL, *dval3 = NULL; + double maxe = 0,mine = 0; + double maxa = 0,mina = 0; + int i,maxi = 0,maxai = 0; + double lat,lon; + + GRIB_CHECK(grib_get_size(h1,"values",&len1),NULL); + GRIB_CHECK(grib_get_size(h2,"values",&len2),NULL); + + if(len1 != len2) + { + printf("Field size mismatch %ld != %ld\n",(long)len1,(long)len2); + exit(1); + } + + dval1 = grib_context_malloc(h1->context,len1*sizeof(double)); Assert(dval1); + dval2 = grib_context_malloc(h2->context,len2*sizeof(double)); Assert(dval2); + if(out) + dval3 = grib_context_malloc(h2->context,len2*sizeof(double)); Assert(dval2); + + GRIB_CHECK(grib_get_double_array(h1,"values",dval1,&len1),NULL); + GRIB_CHECK(grib_get_double_array(h2,"values",dval2,&len2),NULL); + + + for(i = 0; i < len1; i++) + { + double e = err(dval1[i],dval2[i]); + double a = fabs(dval1[i]-dval2[i]); + if(i == 0) maxe = mine = e; + if(i == 0) maxa = mina = a; + if(out) dval3[i] = absolute ? a : e; + if(e < mine) mine = e; + if(e > maxe) { maxe = e; maxi = i; } + if(a < mina) mina = a; + if(a > maxa) { maxa = a; maxai = i; } + } + + if(out) + { + const void *buffer; + size_t size; + GRIB_CHECK(grib_set_long(h1,"generatingProcessIdentifier",255),NULL); /* To prevent Magics to scale the field */ + GRIB_CHECK(grib_set_long(h1,"numberOfBitsContainingEachPackedValue",24),NULL); + GRIB_CHECK(grib_set_double_array(h1,"values",dval3,len1),NULL); + GRIB_CHECK(grib_get_message(h1,&buffer,&size),NULL); + + if(fwrite(buffer,1,size,out) != size) + { + perror(outname); + exit(1); + } + + } + + printf("Field %ld: min relative error: %g%%, max relative error: %g%% [%g,%g,%g]\n",(long)n,mine*100,maxe*100, + dval1[maxi],dval2[maxi],fabs(dval1[maxi]-dval2[maxi])); + + if(location(h1,maxi,&lat,&lon)) + printf(" latitude = %g, longitude = %g\n",lat,lon); + + printf("Field %ld: min absolute error: %g, max absolute error: %g [%g,%g]\n",(long)n,mina,maxa, + dval1[maxai],dval2[maxai]); + if(location(h1,maxai,&lat,&lon)) + printf(" latitude = %g, longitude = %g\n",lat,lon); + + + grib_context_free(h1->context,dval1); + grib_context_free(h2->context,dval2); + grib_context_free(h2->context,dval3); +} + +static void compare_files(const char* file1,const char* file2,FILE* out) +{ + FILE *f1 = fopen(file1,"r"); + FILE *f2 = fopen(file2,"r"); + int e1 = 0; + int e2 = 0; + grib_handle *h1; + grib_handle *h2; + const void* b1; + const void* b2; + size_t s1; + size_t s2; + int count = 0; + + if(!f1) { + perror(file1); + exit(1); + } + + if(!f2) { + perror(file2); + exit(1); + } + + h1 = grib_handle_new_from_file(NULL,f1,&e1); + h2 = grib_handle_new_from_file(NULL,f2,&e2); + + while(h1 && h2) + { + ++count; + + GRIB_CHECK(grib_get_message(h1,&b1,&s1),file1); + GRIB_CHECK(grib_get_message(h2,&b2,&s2),file2); + + compare_handles(count,h1,h2,out); + + grib_handle_delete(h1); + grib_handle_delete(h2); + + e1 = e2 = 0; + + h1 = grib_handle_new_from_file(NULL,f1,&e1); + h2 = grib_handle_new_from_file(NULL,f2,&e2); + } + + + GRIB_CHECK(e1,file1); + GRIB_CHECK(e2,file2); + + if(h1 != h2) + { + fprintf(stderr,"%s: Premature eof on %s\n",prog,h1 == 0 ? file1 : file2); + exit(1); + } + + +} + +int main(int argc, char *argv[]) +{ + extern char *optarg; + extern int optind; + int c; + FILE* out = 0; + + prog = argv[0]; + + while((c = getopt(argc, argv,"ae:o:")) != EOF) { + switch(c) { + + case 'o': + outname = optarg; + out = fopen(outname,"w"); + if(!out) { + perror(outname); + exit(1); + } + break; + + case 'a': + absolute = 1; + break; + + case 'e': + maxAbsoluteError = atof(optarg); + break; + + default: + usage(prog); + break; + } + } + + if(argc-optind < 2) usage(prog); + + + compare_files(argv[argc-2],argv[argc-1],out); + + if(out) { + if(fclose(out)) + { + perror(outname); + exit(1); + } + } + + return 0; + +} + diff --git a/tools/grib_filter.c b/tools/grib_filter.c new file mode 100644 index 000000000..0c13c48d6 --- /dev/null +++ b/tools/grib_filter.c @@ -0,0 +1,109 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_filter + * + * + * + */ + +#include "grib_tools.h" + + +grib_option grib_options[]={ +/* {id, args, help}, on, command_line, value */ + {"f",0,0,0,1,0}, + {"f",0,0,1,0,0}, + {"F",0,0,1,0,0}, + {"o:",0,0,1,1,"filter.out"}, + {"q",0,0,1,0,0}, + {"M",0,0,0,1,0}, + {"I",0,0,1,0,0}, + {"V",0,0,0,1,0}, + {"g",0,0,0,1,0}, + {"G",0,0,0,1,0}, + {"T:",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"v",0,0,0,1,0} +}; +char* grib_tool_description="Apply the rules defined in rules_file to each grib " + "message\n\tin the grib files provided as arguments."; +char* grib_tool_name="grib_filter"; +char* grib_tool_usage="[options] rules_file " + "grib_file grib_file ..."; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); + +int main(int argc, char *argv[]) { return grib_tool(argc,argv);} + +int grib_tool_before_getopt(grib_runtime_options* options) { + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { + + options->action = grib_action_from_filter(options->infile_extra->name); + if (!options->action) { + fprintf(stderr,"%s: error unable to create action\n",options->infile_extra->name); + exit(1); + } + + if ( options->outfile && options->outfile->name ) + options->action->context->outfilename=options->outfile->name; + + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; +} + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + int err=0; + + if (options->current_infile->name) { + size_t len=strlen(options->current_infile->name); + grib_set_string(h,"file",options->current_infile->name,&len); + } + + err=grib_handle_apply_action(h,options->action); + if (err != GRIB_SUCCESS && options->fail) { + printf("ERROR: %s\n",grib_get_error_message(err)); + exit(err); + } + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) +{ + int err=0; + grib_file_close_all(&err); + if (err != GRIB_SUCCESS) { + perror(grib_tool_name); + exit(err); + } + + grib_file_pool_clean(); + return 0; +} diff --git a/tools/grib_filter.dox b/tools/grib_filter.dox new file mode 100644 index 000000000..e9c0031c5 --- /dev/null +++ b/tools/grib_filter.dox @@ -0,0 +1,128 @@ +/*! \page grib_filter grib_filter +Latest training course presentation on grib_filter available here. +\section DESCRIPTION + Apply the rules defined in rules_file to each grib message + in the grib files provided as arguments. + +\section USAGE + grib_filter + [options] rules_file grib_file grib_file ... + +\section OPTIONS +-f \n Force. Force the execution not to fail on error. + \n \n -o output_grib_file \n + Output grib is written to ouput_grib_file. + If an ouput grib file is required and -o is not used, the ouput grib is written to filtered.out + \n \n -M \n Multi-grib support off. Turn off support for multiple fields in single grib message. + \n \n -V \n Version. + \n \n -g \n Copy GTS header. + \n \n -G \n GRIBEX compatibility mode. + \n \n -7 \n Does not fail when the message has wrong length + \n \n -v \n Verbose. + \n \n +\section grib_filter_examples grib_filter examples +-# The grib_filter processes sequentially all grib messages contained in the input files and applies the rules to each one of them. \n + Input messages can be written to the output by using the "write" statement. The write statement can be parameterised so that output + is sent to multiple files depending on key values used in the output file name. \n + If we write a rules_file containing the only statement:\n \n +\verbatim +write "../data/split/[centre]_[dataDate]_[dataType]_[levelType].grib[edition]"; +\endverbatim\n +Applying this rules_file to the "../data/tigge_pf_ecmwf.grib2" grib file we obtain several files in the ../data/split directory containing + fields split according to their key values\n +\verbatim +>grib_filter rules_file ../data/tigge_pf_ecmwf.grib2 +>ls ../data/split +ecmf_20060619_pf_sfc.grib2 +ecmf_20060630_pf_sfc.grib2 +ecmf_20070122_pf_pl.grib2 +ecmf_20070122_pf_pt.grib2 +ecmf_20070122_pf_pv.grib2 +ecmf_20070122_pf_sfc.grib2 +\endverbatim\n +-# The key values in the file name can also be obtained in a different format by indicating explicitly the type required after a colon. + - :l for long + - :d for double + - :s for string + . +The following statement works in a slightly different way from the previous example, + including in the output file name the long values for centre and dataType.\n +\verbatim +write "../data/split/[centre:l]_[dataDate]_[dataType:l]_[levelType].grib[edition]"; +\endverbatim\n +Running the same command again we obtain a different list of files.\n +\verbatim +>grib_filter rules_file ../data/tigge_pf_ecmwf.grib2 +>ls ../data/split +98_20060619_4_sfc.grib2 +98_20060630_4_sfc.grib2 +98_20070122_4_pl.grib2 +98_20070122_4_pt.grib2 +98_20070122_4_pv.grib2 +98_20070122_4_sfc.grib2 +\endverbatim\n +-# Other statements are allowed in the grib_filter syntax: + - comments beginning with # + - print "string to print also with key values like in the file name" + - transient keyname1 = keyname2; + - set keyname = keyvalue; + - defined(keyname) to check if a key is defined in a message + - if ( condition ) { block of rules } else { block of rules }\n + The condition can be made using ==,!= and joining single block conditions with || and && \n + The statement can be any valid statement also another nested condition\n + . +A complex example of grib_filter rules is the following to change temperature in a grib edition 1 file. +\verbatim +# Temperature +if ( level == 850 && indicatorOfParameter == 11 ) { + print "found indicatorOfParameter=[indicatorOfParameter] level=[level] date=[dataDate]"; + transient oldtype = type ; + set identificationOfOriginatingGeneratingSubCentre=98; + set gribTablesVersionNo = 128; + set indicatorOfParameter = 130; + set localDefinitionNumber=1; + set marsClass="od"; + set marsStream="kwbc"; + # Negatively/Positively Perturbed Forecast + if ( oldtype == 2 || oldtype == 3 ) { + set marsType="pf"; + set experimentVersionNumber="4001"; + } + # Control Forecast + if ( oldtype == 1 ) { + set marsType="cf"; + set experimentVersionNumber="0001"; + } + set numberOfForecastsInEnsemble=11; + write; + print "indicatorOfParameter=[indicatorOfParameter] level=[level] date=[dataDate]"; + print; +} +\endverbatim\n +-# The switch statement is an enhanced version of the if statement. Its syntax is the following: +\verbatim +switch (key1,key2,...,keyn) { + case val11,val12,...,val1n: + # block of rules; + case val21,val22,...,val2n: + # block of rules; + default: + # [ block of rules ] +} +\endverbatim\n +Each value of each key given as argument to the switch statement is matched against the values specified in the case statements.\n +If there is a match, then the block or rules corresponding to the matching case statement is executed.\n +Otherwise, the default case is executed. The default case is mandatory, even if empty.\n +The "~" operator can be used to match "anything".\n\n +Following is an example showing the use of the switch statement:\n +\verbatim +processing paramId=[paramId] [shortName] [stepType] +switch (shortName,indicatorOfParameter) { + case tp: + set stepType=accum; + case ~,2 : + set typeOfLevel=surface; + default: +} +\endverbatim\n +*/ diff --git a/tools/grib_filter.h b/tools/grib_filter.h new file mode 100644 index 000000000..3e91d2d55 --- /dev/null +++ b/tools/grib_filter.h @@ -0,0 +1,70 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +/* + +Rename all yy* functions so more that one yacc output can be liked +See http://www.delorie.com/gnu/docs/automake/automake_48.html + +*/ + + +#define yymaxdepth grib_filter_maxdepth +#define yyparse grib_filter_parse +#define yylex grib_filter_lex +#define yyerror grib_filter_error +#define yylval grib_filter_lval +#define yychar grib_filter_char +#define yydebug grib_filter_debug +#define yypact grib_filter_pact +#define yyr1 grib_filter_r1 +#define yyr2 grib_filter_r2 +#define yydef grib_filter_def +#define yychk grib_filter_chk +#define yypgo grib_filter_pgo +#define yyact grib_filter_act +#define yyexca grib_filter_exca +#define yyerrflag grib_filter_errflag +#define yynerrs grib_filter_nerrs +#define yyps grib_filter_ps +#define yypv grib_filter_pv +#define yys grib_filter_s +#define yy_yys grib_filter_yys +#define yystate grib_filter_state +#define yytmp grib_filter_tmp +#define yyv grib_filter_v +#define yy_yyv grib_filter_yyv +#define yyval grib_filter_val +#define yylloc grib_filter_lloc +#define yyreds grib_filter_reds +#define yytoks grib_filter_toks +#define yylhs grib_filter_yylhs +#define yylen grib_filter_yylen +#define yydefred grib_filter_yydefred +#define yydgoto grib_filter_yydgoto +#define yysindex grib_filter_yysindex +#define yyrindex grib_filter_yyrindex +#define yygindex grib_filter_yygindex +#define yytable grib_filter_yytable +#define yycheck grib_filter_yycheck +#define yyname grib_filter_yyname +#define yyrule grib_filter_yyrule + +#define MAX_KEYS 40 +#define MAX_RULES 40 +#define MAX_SET 40 + +typedef struct key_value key_value; +struct key_value { + char* key; + grib_runtime_type value; +} diff --git a/tools/grib_filter.sh b/tools/grib_filter.sh new file mode 100755 index 000000000..63bd1f58c --- /dev/null +++ b/tools/grib_filter.sh @@ -0,0 +1,131 @@ +#!/bin/sh +set -e +echo "-# The grib_filter processes sequentially all grib messages contained in the input files and applies the rules to each one of them. \\n" +echo " Input messages can be written to the output by using the \"write\" statement. The write statement can be parameterised so that output " +echo " is sent to multiple files depending on key values used in the output file name. \\n" +echo " If we write a rules_file containing the only statement:\\n \\n" +echo "\\verbatim" +echo "write \"../data/split/[centre]_[date]_[dataType]_[levelType].grib[editionNumber]\";" +echo "\\endverbatim\\n" +echo "Applying this rules_file to the \"../data/tigge_pf_ecmwf.grib2\" grib file we obtain several files in the ../data/split directory containing " +echo " fields split according to their key values\\n " +echo "\\verbatim" + +if [[ -d ../data/split ]] +then + rm -f ../data/split/* +else + mkdir ../data/split +fi + +cat > rules_file <grib_filter rules_file ../data/tigge_pf_ecmwf.grib2" +echo ">ls ../data/split" + +./grib_filter rules_file ../data/tigge_pf_ecmwf.grib2 +ls ../data/split + +echo "\\endverbatim\\n" + +echo "-# The key values in the file name can also be obtained in a different format by indicating explicitly the type required after a colon." +echo " - :l for long" +echo " - :d for double" +echo " - :s for string" +echo " ." +echo "The following statement works in a slightly different way from the previous example, " +echo " including in the output file name the long values for centre and dataType.\\n" + +echo "\\verbatim" +echo "write \"../data/split/[centre:l]_[date]_[dataType:l]_[levelType].grib[editionNumber]\";" +echo "\\endverbatim\\n" +echo "Running the same command again we obtain a different list of files.\\n" +echo "\\verbatim" + +if [[ -d ../data/split ]] +then + rm -f ../data/split/* +else + mkdir ../data/split +fi + +cat > rules_file <grib_filter rules_file ../data/tigge_pf_ecmwf.grib2" +echo ">ls ../data/split" + +./grib_filter rules_file ../data/tigge_pf_ecmwf.grib2 +ls ../data/split + +echo "\\endverbatim\\n" + +echo "-# Other statements are allowed in the grib_filter syntax:" +echo " - if ( condition ) { block of rules } else { block of rules }\\n" +echo " The condition can be made using ==,!= and joining single block conditions with || and && \\n" +echo " The statement can be any valid statement also another nested condition\\n" +echo " - set keyname = keyvalue;" +echo " - print \"string to print also with key values like in the file name\"" +echo " - transient keyname1 = keyname2;" +echo " - comments beginning with #" +echo " ." +echo "A complex example of grib_filter rules is the following to change temperature in a grib edition 1 file." +echo "\\verbatim" + +echo "# Temperature" +echo "if ( level == 850 && indicatorOfParameter == 11 ) {" +echo " print \"found indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]\";" +echo " transient oldtype = type ;" +echo " set identificationOfOriginatingGeneratingSubCentre=98;" +echo " set gribTablesVersionNo = 128;" +echo " set indicatorOfParameter = 130;" +echo " set localDefinitionNumber=1;" +echo " set marsClass=\"od\";" +echo " set marsStream=\"kwbc\";" +echo " # Negatively/Positively Perturbed Forecast" +echo " if ( oldtype == 2 || oldtype == 3 ) {" +echo " set marsType=\"pf\";" +echo " set experimentVersionNumber=\"4001\";" +echo " }" +echo " # Control Forecast" +echo " if ( oldtype == 1 ) {" +echo " set marsType=\"cf\";" +echo " set experimentVersionNumber=\"0001\";" +echo " }" +echo " set numberOfForecastsInEnsemble=11;" +echo " write;" +echo " print \"indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]\";" +echo " print;" +echo "}" + +echo "\\endverbatim\\n" + +echo "-# The switch statement is an enhanced version of the if statement. Its syntax is the following:" +echo "\\verbatim" +echo "switch (key1,key2,...,keyn) {" +echo " case val11,val12,...,val1n:" +echo " # block of rules;" +echo " case val21,val22,...,val2n:" +echo " # block of rules;" +echo " default:" +echo " # [ block of rules ]" +echo "}" +echo "\\endverbatim\\n" +echo "Each value of each key given as argument to the switch statement is matched against the values specified in the case statements.\\n" +echo "If there is a match, then the block or rules corresponding to the matching case statement is executed.\\n" +echo "Otherwise, the default case is executed. The default case is mandatory, even if empty.\\n" +echo "The \"~\" operator can be used to match \"anything\".\\n\\n" +echo "Following is an example showing the use of the switch statement:\\n" +echo "\\verbatim" +echo "processing paramId=[paramId] [shortName] [stepType]"; +echo "switch (shortName,indicatorOfParameter) {" +echo " case "tp":" +echo " set stepType="accum";" +echo " case ~,2 :" +echo " set typeOfLevel="surface";" +echo " default:" +echo "}" +echo "\\endverbatim\\n" diff --git a/tools/grib_filtery.y b/tools/grib_filtery.y new file mode 100644 index 000000000..d4485e7c0 --- /dev/null +++ b/tools/grib_filtery.y @@ -0,0 +1,115 @@ +%{ +#include "grib_filter.h" +#include "grib_filtery.h" +#include +extern int yylex(); +extern int yylineno; +extern int grib_filter_irule; +extern key_value grib_filter_to_set[MAX_RULES][MAX_SET]; +extern char* grib_filter_keys[MAX_RULES][MAX_KEYS]; +extern long grib_filter_values[MAX_RULES][MAX_KEYS]; +extern int grib_filter_nkey[MAX_RULES]; +extern int grib_filter_nset[MAX_RULES]; +extern int grib_filter_verbose; + + +int grib_filter_wrap(void) {return 1;} + +void yyerror(const char* msg) {printf("%s at line %d\n",msg,yylineno);} + +%} + +%union { + char *str; + long lval; + double dval; +}; + +%start all + +%token IF +%token ELSE +%token END +%token FLOAT +%token SET + + +%token EQ +%token NE +%token GE +%token LE + +%token AND +%token OR +%token NOT + +%token IDENT +%token STRING + +%token INTEGER +%token FLOAT + + +%% + +all : instructions + | if_blocks + | all semi + ; + +semi : ';' + | semi ';' + ; + + +set : IDENT '=' INTEGER { + grib_filter_to_set[grib_filter_irule][grib_filter_nset[grib_filter_irule]].key=$1; + grib_runtime_type* rtt=grib_runtime_type_new(NULL); + grib_runtime_type_set_long(rtt,$3); + grib_filter_to_set[grib_filter_irule][grib_filter_nset[grib_filter_irule]].value=rtt; + grib_filter_nset[grib_filter_irule]++; + } + | IDENT '=' FLOAT { + grib_filter_to_set[grib_filter_irule][grib_filter_nset[grib_filter_irule]].key=$1; + grib_runtime_type* rtt=grib_runtime_type_new(NULL); + grib_runtime_type_set_double(rtt,$3); + grib_filter_to_set[grib_filter_irule][grib_filter_nset[grib_filter_irule]].value=rtt; + grib_filter_nset[grib_filter_irule]++; + } + | IDENT '=' STRING { + grib_filter_to_set[grib_filter_irule][grib_filter_nset[grib_filter_irule]].key=$1; + grib_runtime_type* rtt=grib_runtime_type_new(NULL); + grib_runtime_type_set_char(rtt,$3,strlen($3)); + grib_filter_to_set[grib_filter_irule][grib_filter_nset[grib_filter_irule]].value=rtt; + grib_filter_nset[grib_filter_irule]++; + } + ; + +instruction : set semi + ; + +instructions : instruction + | instruction instructions + ; + +if_blocks : if_block + | if_block if_blocks + +if_block : + IF '(' condition ')' '{' instructions '}' {grib_filter_irule++;} + ; + + +comparison : IDENT EQ INTEGER { + grib_filter_keys[grib_filter_irule][grib_filter_nkey[grib_filter_irule]]=$1; + grib_filter_values[grib_filter_irule][grib_filter_nkey[grib_filter_irule]]=$3; + grib_filter_nkey[grib_filter_irule]++; + } + ; + +condition : comparison + | condition AND condition {;} + ; + + +%% diff --git a/tools/grib_gen.c b/tools/grib_gen.c new file mode 100644 index 000000000..5eb8a75d9 --- /dev/null +++ b/tools/grib_gen.c @@ -0,0 +1,90 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_get + * + * Description: + * + * + * + * + */ + +#include +#include +#include "grib_api_internal.h" + + +void usage( char*); + +int main(int argc, char *argv[]) +{ + FILE *f=NULL; + char* infname=NULL; + int ret=0; + grib_context* gc; + grib_handle* h; + FILE* of=NULL; + const void* buffer=NULL; + size_t size=0; + char* ofname=NULL; + + if ( argc < 3 ) usage(argv[0]); + + infname=argv[1]; + ofname=argv[2]; + + f = fopen(infname,"r"); + if(!f) { + perror(infname); + exit(1); + } + + gc = grib_context_get_default(); + h=grib_handle_new(gc); + if (!h) { + printf("Error: unable to create handle\n"); + exit(1); + } + + GRIB_CHECK(grib_load_from_text_file(h,f),infname); + + if(fclose(f)) { + perror(infname); + exit(1); + } + + of = fopen(ofname,"w"); + if(!of) { + perror(ofname); + exit(1); + } + + grib_get_message(h,&buffer,&size); + + if(fwrite(buffer,1,size,of) != size) { + perror(ofname); + exit(1); + } + + if(fclose(of)) { + perror(ofname); + exit(1); + } + + return ret; + +} + +void usage(char* progname) { + printf("\nUsage: %s dump_file outfile.grib\n",progname); + exit(1); +} diff --git a/tools/grib_get.c b/tools/grib_get.c new file mode 100644 index 000000000..7b8230402 --- /dev/null +++ b/tools/grib_get.c @@ -0,0 +1,211 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_get + * + * + * + */ + +#include "grib_tools.h" + +grib_option grib_options[]={ +/* {id, args, help}, on, command_line, value*/ + {"f",0,0,0,1,0}, + {"p:",0,0,0,1,0}, + {"F:",0,0,1,1,"%g"}, + {"l:",0,0,0,1,0}, + {"P:",0,0,0,1,0}, + {"w:",0,0,0,1,0}, + {"n:",0,0,1,1,0}, + {"s:",0,0,0,1,0}, + {"V",0,0,0,1,0}, + {"W:",0,0,1,1,"8"}, + {"m",0,0,0,1,0}, + {"M",0,0,0,1,0}, + {"S",0,0,1,0,0}, + {"g",0,0,0,1,0}, + {"G",0,0,0,1,0}, + {"T:",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"v",0,0,1,0,0}, + {"i:",0,0,0,1,0} +}; + +char* grib_tool_description="Get values of some keys from a grib file." + "\n\tIt is similar to grib_ls, but fails returning an error code " + "\n\twhen an error occurs (e.g. key not found)."; +char* grib_tool_name="grib_get"; +char* grib_tool_usage="[options] grib_file grib_file ..."; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); +double lat=0; +double lon=0; +int mode=0; +grib_nearest* n=NULL; + +int main(int argc, char *argv[]) { return grib_tool(argc,argv);} + +int grib_tool_before_getopt(grib_runtime_options* options) { + options->print_keys_count=-1; + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { + char *theEnd = NULL, *end1=NULL; + size_t size=4; + int ret=0; + double min=0,max=0; + int i=0,idx=0; + char* p=NULL; + + options->print_header=0; + options->print_statistics=0; + options->default_print_width=-1; + + if (options->latlon) { + + lat = strtod(options->latlon,&theEnd); + if (*theEnd != ',') { + printf("ERROR: wrong latitude value\n"); + exit(1); + } + lon= strtod(++theEnd,&end1); + + mode=GRIB_NEAREST_SAME_POINT | GRIB_NEAREST_SAME_GRID; + + if (end1 && *end1 == ',') { + end1++; + if (*end1 != '0') { + p=end1; + while (*p != ',' && *p !='\0') p++; + if (*end1 == '4') { + options->latlon_mode=4; + } else if (*end1 == '1') { + options->latlon_mode=1; + } else { + printf("ERROR %s: wrong mode given in option -l\n",grib_tool_name); + exit(1); + } + } + if (*p == ',') { + p++; + options->latlon_mask=strdup(p); + } + } + + + } + + if (options->latlon && options->latlon_mask) { + FILE* f=NULL; + grib_handle* hh; + f=fopen(options->latlon_mask,"r"); + if(!f) { + perror(options->latlon_mask); + exit(1); + } + hh=grib_handle_new_from_file(0,f,&ret); + fclose(f); + GRIB_CHECK_NOLINE(ret,0); + n=grib_nearest_new(hh,&ret); + GRIB_CHECK_NOLINE(ret,0); + GRIB_CHECK_NOLINE(grib_nearest_find(n,hh,lat,lon,mode, + options->lats,options->lons,options->mask_values,options->distances,options->indexes,&size),0); + grib_nearest_delete(n); + n=NULL; + grib_handle_delete( hh); + + options->latlon_idx=-1; + max=options->distances[0]; + for (i=0;i<4;i++) + if (maxdistances[i]) {max=options->distances[i];idx=i;} + min=max; + for (i=0;i<4;i++) { + if ((min >= options->distances[i]) && (options->mask_values[i] >= 0.5)) { + options->latlon_idx=i; + min = options->distances[i]; + } + } + + if (options->latlon_idx<0){ + min=0; + options->latlon_idx=0; + for (i=1;i<4;i++) + if (min>options->distances[i]) { + min = options->distances[i]; + options->latlon_idx=i; + } + } + } + + return 0; +} +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; + } + + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options,grib_handle* h) { + size_t size=4; + int err = 0; + + if (!options->skip) { + if (options->set_values_count != 0) { + err=grib_set_values(h,options->set_values,options->set_values_count); + } + + if (err != GRIB_SUCCESS && options->fail) exit(err); + } + + if (options->latlon) { + int err=0; + double min; + int i; + if (!n) n=grib_nearest_new(h,&err); + GRIB_CHECK_NOLINE(err,0); + GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,mode, + options->lats,options->lons,options->values, + options->distances,options->indexes,&size),0); + min=options->distances[0]; + options->latlon_idx=0; + i=0; + for (i=1;i<4;i++) { + if (min>options->distances[i]) { + min=options->distances[i]; + options->latlon_idx=i; + } + } + + } + + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) { + + if (n) grib_nearest_delete(n); + + return 0; +} diff --git a/tools/grib_get.dox b/tools/grib_get.dox new file mode 100644 index 000000000..28835ac32 --- /dev/null +++ b/tools/grib_get.dox @@ -0,0 +1,59 @@ +/*! \page grib_get grib_get +\section DESCRIPTION + Get values of some keys from a grib file. + It is similar to grib_ls, but fails returning an error code + when an error occurs (e.g. key not found). + +\section USAGE + grib_get + [options] grib_file grib_file ... + +\section OPTIONS +-f \n Force. Force the execution not to fail on error. + \n \n -p key[:{s/d/l}],key[:{s/d/l}],... \n + Declaration of keys to print. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be requested. Default type is string. + \n \n -F format \n + C style format for floating point values. + \n \n -l Latitude,Longitude[,MODE,file] \n + Value close to the point of a Latitude/Longitude. + Allowed values for MODE are: + 4 (4 values in the nearest points are printed) Default + 1 (the value at the nearest point is printed) + file (file is used as mask. The closer point with mask value>=0.5 is printed) + \n \n -P key[:{s/d/l}],key[:{s/d/l}],... \n + As -p adding the declared keys to the default list. + \n \n -w key[:{s/d/l}]{=/!=}value,key[:{s/d/l}]{=/!=}value,... \n + Where clause. + Grib messages are processed only if they match all the key/value constraints. + A valid constraint is of type key=value or key!=value. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be specified. Default type is string. + \n \n -n namespace \n + All the keys belonging to namespace are printed. + \n \n -s key[:{s/d/l}]=value,key[:{s/d/l}]=value,... \n + Key/values to set. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be defined. By default the native type is set. + \n \n -V \n Version. + \n \n -W width \n + Minimum width of each column in output. Default is 10. + \n \n -m \n Mars keys are printed. + \n \n -M \n Multi-grib support off. Turn off support for multiple fields in single grib message. + \n \n -g \n Copy GTS header. + \n \n -G \n GRIBEX compatibility mode. + \n \n -7 \n Does not fail when the message has wrong length + \n \n -i index \n + Data value corresponding to the given index is printed. + \n \n +\section grib_get_examples grib_get examples +-# grib_get fails if a key is not found.\n +\verbatim +>grib_get -p gribname ../data/tigge_pf_ecmwf.grib2 +\endverbatim +-# To get the step of the first GRIB message in a file: \n +\verbatim +>grib_get -w count=1 -p step ../data/tigge_pf_ecmwf.grib2 +\endverbatim +*/ diff --git a/tools/grib_get.sh b/tools/grib_get.sh new file mode 100755 index 000000000..02169d694 --- /dev/null +++ b/tools/grib_get.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -e + +echo "-# grib_get fails if a key is not found.\\n " +echo "\\verbatim " +echo ">grib_get -p gribname ../data/tigge_pf_ecmwf.grib2" +set +e +./grib_get -p gribname ../data/tigge_pf_ecmwf.grib2 +set -e +echo "\\endverbatim " +echo "-# To get the step of the first GRIB message in a file: \\n" +echo "\\verbatim " +echo ">grib_get -w count=1 -p step ../data/tigge_pf_ecmwf.grib2" +echo "\\endverbatim " + + diff --git a/tools/grib_get_data.c b/tools/grib_get_data.c new file mode 100644 index 000000000..f0cafb8bd --- /dev/null +++ b/tools/grib_get_data.c @@ -0,0 +1,273 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_get_data + * + * + * + */ + +#include "grib_tools.h" + +static void print_key_values(grib_values* values,int values_count); +static grib_values* get_key_values(grib_runtime_options* options,grib_handle* h); + +grib_option grib_options[]={ +/* {id, args, help}, on, command_line, value */ + {"q",0,0,1,0,0}, + {"S",0,0,1,0,0}, + {"M",0,0,0,1,0}, + {"m:","missingValue","\n\t\tThe missing value is given through this option." + "\n\t\tAny string is allowed and it is printed in place of the missing" + "\n\t\tvalues. Default is to skip the missing values.\n",0,1,0}, + {"p:",0,0,0,1,0}, + {"F:","format","\n\t\tC style format for values. Default is \"%.10e\"\n",0,1,0}, + {"w:",0,0,0,1,0}, + {"f",0,0,0,1,0}, + {"G",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"V",0,0,0,1,0} +}; + +char* grib_tool_description="Print a latitude, longitude, data values list "; +char* grib_tool_name="grib_get_data"; +char* grib_tool_usage="[options] grib_file grib_file ..."; + +extern FILE* dump_file; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); + +int main(int argc, char *argv[]) { return grib_tool(argc,argv);} + +int grib_tool_before_getopt(grib_runtime_options* options) { + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { + + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; +} + + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + int err=0; + double *lat=0,*lon=0,*val=0; + double missing_value=9999.; + int skip_missing=1; + char *kmiss=NULL, *p=NULL; + char *missing_string=NULL; + int i=0; + grib_values* values=NULL; + grib_iterator* iter = NULL; + char* format=NULL; + char* default_format="%.10e"; + int print_keys=grib_options_on("p:"); + long numberOfPoints=0; + double *data_values=0,*lats=0,*lons=0; + int n = 0; + size_t size=0; + + if (grib_options_on("F:")) + format=grib_options_get_option("F:"); + else + format=default_format; + + if ((err=grib_get_long(h,"numberOfPoints",&numberOfPoints)) !=GRIB_SUCCESS) { + fprintf(dump_file,"ERROR: unable to get number of points\n"); + return err; + } + + iter=grib_iterator_new(h,0,&err); + + data_values=(double*)calloc(numberOfPoints+1, sizeof(double)); + if (!data_values) { + fprintf(dump_file, "ERROR: failed to allocate %ld bytes for data values (number of points=%ld)\n", + (numberOfPoints+1)*sizeof(double), numberOfPoints); + exit(GRIB_OUT_OF_MEMORY); + } + + if (iter) { + lats=(double*)calloc(numberOfPoints+1,sizeof(double)); + lons=(double*)calloc(numberOfPoints+1,sizeof(double)); + lat=lats; lon=lons; val=data_values; + while(grib_iterator_next(iter,lat++,lon++,val++)) {} + } else if (err==GRIB_NOT_IMPLEMENTED || err==GRIB_SUCCESS){ + size=numberOfPoints; + grib_get_double_array(h,"values",data_values,&size); + if (size!=numberOfPoints) { + if (!grib_options_on("q")) + fprintf(dump_file,"ERROR: wrong number of points %d\n",(int)numberOfPoints); + if (grib_options_on("f")) exit(1); + } + } else { + grib_context_log(h->context,GRIB_LOG_ERROR, + "%s",grib_get_error_message(err)); + exit(err); + } + + skip_missing=1; + if (grib_options_on("m:")) { + char* theEnd=0; + double mval=0; + skip_missing=0; + kmiss=grib_options_get_option("m:"); + p=kmiss; + while (*p != ':' && *p != '\0') p++; + if (*p == ':' && *(p+1) != '\0') { + *p='\0'; + missing_string=strdup(p+1); + } else { + missing_string=strdup(kmiss); + } + mval=strtod(kmiss,&theEnd); + if (theEnd==NULL) missing_value=mval; + grib_set_double(h,"missingValue",missing_value); + } + + if (iter) + fprintf(dump_file,"Latitude, Longitude, "); + + fprintf(dump_file,"Value"); + + if (print_keys) + for (i=0;iprint_keys_count; i++) + fprintf(dump_file,", %s",options->print_keys[i].name); + + fprintf(dump_file,"\n"); + + if (print_keys) + values=get_key_values(options,h); + + if (skip_missing==0){ + for (i=0;iprint_keys_count); + fprintf(dump_file,"\n"); + n++; + } + + } else if ( skip_missing==1 ){ + for (i=0;iprint_keys_count); + fprintf(dump_file,"\n"); + n++; + } + } + } + + if (iter) grib_iterator_delete(iter); + + free(data_values); + if (iter) { + free(lats); + free(lons); + } + + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) { + return 0; +} + + +static void print_key_values(grib_values* values,int values_count) { + int i=0; + for (i=0; iprint_keys_count;i++) { + size_t len=MAX_STRING_LEN; + ret=GRIB_SUCCESS; + + if (grib_is_missing(h,options->print_keys[i].name,&ret) && ret==GRIB_SUCCESS) { + options->print_keys[i].type=GRIB_TYPE_MISSING; + sprintf(value,"MISSING"); + + } else if ( ret != GRIB_NOT_FOUND ){ + if (options->print_keys[i].type == GRIB_TYPE_UNDEFINED) { + grib_get_native_type(h,options->print_keys[i].name,&(options->print_keys[i].type)); + } + + switch (options->print_keys[i].type) { + case GRIB_TYPE_STRING: + ret=grib_get_string( h,options->print_keys[i].name,value,&len); + break; + case GRIB_TYPE_DOUBLE: + ret=grib_get_double( h,options->print_keys[i].name, + &(options->print_keys[i].double_value)); + sprintf(value,"%g",options->print_keys[i].double_value); + break; + case GRIB_TYPE_LONG: + ret=grib_get_long( h,options->print_keys[i].name, + &(options->print_keys[i].long_value)); + sprintf(value,"%ld",(long)options->print_keys[i].long_value); + break; + default: + fprintf(dump_file,"invalid type for %s\n",options->print_keys[i].name); + exit(1); + + } + } + + if (ret != GRIB_SUCCESS) { + if (options->fail) GRIB_CHECK_NOLINE(ret,options->print_keys[i].name); + if (ret == GRIB_NOT_FOUND) strcpy(value,notfound); + else { + fprintf(dump_file,"%s %s\n",grib_get_error_message(ret),options->print_keys[i].name); + exit(ret); + } + } + options->print_keys[i].string_value=strdup(value); + } + return options->print_keys; + +} + diff --git a/tools/grib_get_data.dox b/tools/grib_get_data.dox new file mode 100644 index 000000000..312e26fd6 --- /dev/null +++ b/tools/grib_get_data.dox @@ -0,0 +1,45 @@ +/*! \page grib_get_data grib_get_data +\section DESCRIPTION + Print a latitude, longitude, data values list + +\section USAGE + grib_get_data + [options] grib_file grib_file ... + +\section OPTIONS +-M \n Multi-grib support off. Turn off support for multiple fields in single grib message. + \n \n -m missingValue \n + The missing value is given through this option. + Any string is allowed and it is printed in place of the missing + values. Default is to skip the missing values. + \n \n -p key[:{s/d/l}],key[:{s/d/l}],... \n + Declaration of keys to print. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be requested. Default type is string. + \n \n -F format \n + C style format for values. Default is "%.10e" + \n \n -w key[:{s/d/l}]{=/!=}value,key[:{s/d/l}]{=/!=}value,... \n + Where clause. + Grib messages are processed only if they match all the key/value constraints. + A valid constraint is of type key=value or key!=value. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be specified. Default type is string. + \n \n -f \n Force. Force the execution not to fail on error. + \n \n -G \n GRIBEX compatibility mode. + \n \n -7 \n Does not fail when the message has wrong length + \n \n -V \n Version. + \n \n +\section grib_get_data_examples grib_get_data examples +-# To get a latitude, longitude, value list, skipping the missing values(=9999) +\verbatim +>grib_get_data ../data/reduced_gaussian_model_level.grib2 +\endverbatim +-# If you want to define your missing value=1111 and to print the string missing in place of it +\verbatim +>grib_get_data -m 1111:missing ../data/reduced_gaussian_model_level.grib2 +\endverbatim +-# If you want to print the value of other keys with the data value list +\verbatim +>grib_get_data -p centre,level,step ../data/reduced_gaussian_model_level.grib2 +\endverbatim +*/ diff --git a/tools/grib_get_data.sh b/tools/grib_get_data.sh new file mode 100755 index 000000000..526645cbe --- /dev/null +++ b/tools/grib_get_data.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +set -e + +echo "-# To get a latitude, longitude, value list, skipping the missing values(=9999)" +echo "\\verbatim" +echo ">grib_get_data ../data/reduced_gaussian_model_level.grib2" +echo "\\endverbatim" + +echo "-# If you want to define your missing value=1111 and to print the string missing in place of it" +echo "\\verbatim" +echo ">grib_get_data -m 1111:missing ../data/reduced_gaussian_model_level.grib2" +echo "\\endverbatim" + +echo "-# If you want to print the value of other keys with the data value list" +echo "\\verbatim" +echo ">grib_get_data -p centre,level,step ../data/reduced_gaussian_model_level.grib2" +echo "\\endverbatim" + + + diff --git a/tools/grib_histogram.c b/tools/grib_histogram.c new file mode 100644 index 000000000..61154ccaf --- /dev/null +++ b/tools/grib_histogram.c @@ -0,0 +1,153 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include +#include + +#include "grib_api.h" + +void usage(const char *prog) +{ + fprintf(stderr,"%s: in1 [in2 ... ] out\n",prog); + exit(1); +} + +grib_values values[10240]; + +int main(int argc, const char *argv[]) +{ + int i,j; + FILE *in; + int e; + grib_handle *h; + double* values = NULL; + size_t size; + size_t last_size = 0; + double min,max; + long count = 10; + long intervals[10]; + const char *names[1024]; + int name_count = 0; + + if(argc < 2) usage(argv[0]); + + + for(i = 1; i < argc; i++) + { + + if(argv[i][0] == '-') { + names[name_count++] = argv[i]+1; + continue; + } + + in = fopen(argv[i],"r"); + if(!in) { + perror(argv[i]); + exit(1); + } + + while( (h = grib_handle_new_from_file(NULL,in,&e)) != NULL ) + { + long bitmap; + double delta; + GRIB_CHECK(grib_get_long(h,"bitMapIndicator",&bitmap),argv[i]); + + + GRIB_CHECK(grib_get_size(h,"values",&size),argv[i]); + + if(size > last_size) + { + if(values) + free(values); + values = (double*)malloc(size*sizeof(double)); + last_size = size; + assert(values); + } + + GRIB_CHECK(grib_get_double_array(h,"values",values,&size),argv[i]); + + for(j = 0; j < count; j++) + intervals[j] = 0; + + + if(bitmap != 255) + { + + double missing; + GRIB_CHECK(grib_get_double(h,"missingValue",&missing),argv[i]); + + min = max = missing; + + for(j = 0; j < size ; j++) + { + if((min == missing) || ((values[j] != missing) && (min>values[j]))) min = values[j]; + if((max == missing) || ((values[j] != missing) && (maxvalues[j]) min = values[j]; + if(maxonlyfiles=1; + + idx=grib_index_new(c,keys,&ret); + + if (!idx || ret) + grib_context_log(c,GRIB_LOG_FATAL, + "Unable to create index %s",grib_get_error_message(ret)); + + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + int ret=0; + printf("--- %s: processing %s\n",grib_tool_name,file); + ret=grib_index_add_file(idx,file); + if (ret) {printf("error: %s\n",grib_get_error_message(ret)); exit(ret);} + return 0; +} + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { +} + +int grib_tool_finalise_action(grib_runtime_options* options) { + grib_index_key* keys; + grib_string_list* values; + int first; + + + if (compress_index) { + grib_index_compress(idx); + } + printf("--- %s: keys included in the index file %s:\n", + grib_tool_name,options->outfile->name); + printf("--- "); + first=1; + keys=idx->keys; + while (keys) { + if (!first) printf(", "); + printf("%s",keys->name); + keys=keys->next; + first=0; + } + printf("\n"); + keys=idx->keys; + while (keys) { + printf("--- %s = { ",keys->name); + values=keys->values; + first=1; + while (values) { + if (!first) printf(", "); + printf("%s",values->value); + first=0; + values=values->next; + } + printf(" }\n"); + keys=keys->next; + } + printf("--- %d messages indexed\n",idx->count); + + if (idx->count) + grib_index_write(idx,options->outfile->name); + grib_index_delete(idx); + return 0; +} diff --git a/tools/grib_index_build.dox b/tools/grib_index_build.dox new file mode 100644 index 000000000..3abcf58bf --- /dev/null +++ b/tools/grib_index_build.dox @@ -0,0 +1,28 @@ +/*! \page grib_index_build grib_index_build +\section DESCRIPTION + Build an index file for a set of input grib files. + +\section USAGE + grib_index_build + [options] grib_file grib_file ... + +\section OPTIONS +-f \n Force. Force the execution not to fail on error. + \n \n -o output_grib_file \n + Output grib is written to ouput_grib_file. + If an ouput grib file is required and -o is not used, the ouput grib is written to filtered.out + \n \n -k key1,key2,... \n + Specify a list of keys to index on. By default the input files are indexed on the MARS keys. + \n \n -V \n Version. + \n \n -M \n Multi-grib support off. Turn off support for multiple fields in single grib message. + \n \n +\section grib_index_build_examples grib_index_build examples +-# By default grib_index_build will index on the MARS keys. \n +\verbatim +> grib_index_build ../data/reduced*.grib1 ../data/regular*.grib1 ../data/reduced*.grib2 +\endverbatim\n +-# To specify a custom list of keys to index on, use the -k option.\n +\verbatim +> grib_index_build -k paramId,dataDate ../data/reduced*.grib1 ../data/regular*.grib1 ../data/reduced*.grib2 +\endverbatim\n +*/ diff --git a/tools/grib_index_build.sh b/tools/grib_index_build.sh new file mode 100755 index 000000000..075938915 --- /dev/null +++ b/tools/grib_index_build.sh @@ -0,0 +1,14 @@ +#!/bin/sh +set -e + +echo "-# By default grib_index_build will index on the MARS keys. \\n" +echo "\\verbatim " +echo "> grib_index_build ../data/reduced*.grib1 ../data/regular*.grib1 ../data/reduced*.grib2" +#grib_index_build ../data/reduced*.grib1 ../data/regular*.grib1 ../data/reduced*.grib2 +echo "\\endverbatim\\n " + +echo "-# To specify a custom list of keys to index on, use the -k option.\\n " +echo "\\verbatim " +echo "> grib_index_build -k paramId,dataDate ../data/reduced*.grib1 ../data/regular*.grib1 ../data/reduced*.grib2" +#grib_index_build -k paramId,dataDate ../data/reduced*.grib1 ../data/regular*.grib1 ../data/reduced*.grib2 +echo "\\endverbatim\\n " diff --git a/tools/grib_info.c b/tools/grib_info.c new file mode 100644 index 000000000..fa01b3d8d --- /dev/null +++ b/tools/grib_info.c @@ -0,0 +1,120 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_info + * + * Description: + * + * + * + * + */ + +#include "grib_tools.h" + +void usage( char*); + +#define INFO_PRINT_ALL 0 +#define INFO_PRINT_VERSION (1<<0) +#define INFO_PRINT_DEFINITION_PATH (1<<1) +#define INFO_PRINT_SAMPLES_PATH (1<<2) + +int main( int argc,char* argv[]) { + char* path=NULL; + int c=0; + int nfiles=0; + unsigned long print_flags=0; + int major=GRIB_API_MAJOR_VERSION; + int minor=GRIB_API_MINOR_VERSION; + int revision=GRIB_API_REVISION_VERSION; + + while (1) { + + c = getopt (argc, argv, "vdt"); + + if (c == -1) + break; + + switch (c) { + case 'v': + print_flags|=INFO_PRINT_VERSION; + break; + case 'd': + print_flags|=INFO_PRINT_DEFINITION_PATH; + break; + case 't': + print_flags|=INFO_PRINT_SAMPLES_PATH; + break; + default: + usage(argv[0]); + } + } + + nfiles=argc-optind; + if (nfiles != 0) usage(argv[0]); + + if (print_flags == INFO_PRINT_ALL) { + printf("\n"); + printf("grib_api Version %d.%d.%d", + major,minor,revision); + if (GRIB_API_MAJOR_VERSION < 1) printf(" PRE-RELEASE"); + printf("\n"); + printf("\n"); + + + if ((path=getenv("GRIB_DEFINITION_PATH")) != NULL) { + printf("Definition files path from environment variable"); + printf(" GRIB_DEFINITION_PATH=%s\n",path); + } else { + printf("Default definition files path is used: %s\n",GRIB_DEFINITION_PATH); + printf("Definition files path can be changed setting GRIB_DEFINITION_PATH environment variable\n"); + } + printf("\n"); + + if ((path=getenv("GRIB_SAMPLES_PATH")) != NULL) { + printf("SAMPLES path from environment variable"); + printf(" GRIB_SAMPLES_PATH=%s\n",path); + } else { + printf("Default SAMPLES path is used: %s\n",GRIB_SAMPLES_PATH); + printf("SAMPLES path can be changed setting GRIB_SAMPLES_PATH environment variable\n"); + } + printf("\n"); + return 0; + } + + if (print_flags & INFO_PRINT_VERSION) + printf("%d.%d.%d ",major,minor,revision); + + if (print_flags & INFO_PRINT_DEFINITION_PATH) { + if ((path=getenv("GRIB_DEFINITION_PATH")) != NULL) { + printf("%s",path); + } else { + printf("%s",GRIB_DEFINITION_PATH); + } + } + + if (print_flags & INFO_PRINT_SAMPLES_PATH) { + if ((path=getenv("GRIB_SAMPLES_PATH")) != NULL) { + printf("%s",path); + } else { + printf("%s",GRIB_SAMPLES_PATH); + } + } + + return 0; +} + + + +void usage(char* progname) { + printf("\nUsage: %s [-v] [-d] [-t]\n",progname); + exit(1); +} diff --git a/tools/grib_keys.c b/tools/grib_keys.c new file mode 100644 index 000000000..aa2dfe4fd --- /dev/null +++ b/tools/grib_keys.c @@ -0,0 +1,176 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_keys + * + */ + +#include "grib_tools.h" + +grib_option grib_options[]={ +/* {id, args, help}, on, command_line, value*/ + {"T:","type","\n\t\tTo print the keys available in the given grib type." + "\n\t\tFor a list of the available types see -L option.\n" + ,0,1,0}, + {"F:","file","\n\t\tTo print the keys available in the grib file.\n",0,1,0}, + {"x",0,"Print the extended set of keys.\n",0,1,0}, + {"c",0,"Print only coded keys.\n",0,1,0}, + {"L",0,"List of available types.\n",0,1,0}, + {"t",0,0,0,1,0}, + {"T:",0,0,0,1,0}, + {"a",0,0,0,1,0} +}; + +char* grib_tool_description="Lists the keys available for a type of grib (-T option) or \n" + "\tin a grib message from a file (-F option)."; +char* grib_tool_name="grib_keys"; +char* grib_tool_usage="[options]"; +char name[1024]; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); + +/* Print a sorted list of files in the directory 'dir' whose extension is 'extn' */ +static void print_files_in_dir(const char* dir, const char* extension) +{ + int i, count = 0; + struct dirent **files = NULL; + + /* Get a sorted directory list */ + count = scandir(dir, &files, 0, alphasort); + if (count<0) { + fprintf(stderr, "Could not read entries in the SAMPLES path. "); + perror(dir); + exit(1); + } + + for (i=0; id_name, ".") != 0) && (strcmp(files[i]->d_name, "..") != 0) ) { + char buf[1024]; + char* extn = NULL; /* file extension */ + sprintf(buf,"%s", files[i]->d_name); + extn = strrchr(buf, '.'); + if (extn && strcmp(extn, extension) == 0) { + *extn = '\0'; /* Now buf holds the file name without the extension */ + if (strlen(buf) > 0) { + printf("%s\n", buf); + } + } + } + } +} + +int main(int argc, char *argv[]) { return grib_tool(argc,argv);} + +#define SAMPLES_PATH_DELIMITER_CHAR ':' +#define SAMPLES_PATH_DELIMITER_STR ":" + +int grib_tool_before_getopt(grib_runtime_options* options) { + grib_context *c=grib_context_get_default( ); + options->dump_mode=strdup("keys"); + if (grib_options_on("T:")) + { + grib_tools_file* infile=(grib_tools_file*)calloc(1,sizeof(grib_tools_file)); + sprintf(name,"%s",grib_options_get_option("T:")); + infile->name=grib_external_template_path(c,name); + infile->next=NULL; + options->infile=infile; + } + else if (grib_options_on("F:")) + { + grib_tools_file* infile=(grib_tools_file*)calloc(1,sizeof(grib_tools_file)); + sprintf(name,"%s",grib_options_get_option("F:")); + infile->name=name; + infile->next=NULL; + options->infile=infile; + } + + if (grib_options_on("L")) + { + #define MAX_PLEN 8192 /* big enough to hold several dir paths */ + if (strchr(c->grib_samples_path, SAMPLES_PATH_DELIMITER_CHAR)) { + /* Delimiter found so samples path contains multiple directories */ + char paths[MAX_PLEN]; + char* adir = NULL; + /* Note: strtok modifies its first argument so we copy */ + strncpy(paths, c->grib_samples_path, MAX_PLEN); + adir = strtok(paths, SAMPLES_PATH_DELIMITER_STR); + while (adir != NULL) { + printf("\nDirectory: %s:\n", adir); + print_files_in_dir(adir, ".tmpl"); + adir=strtok(NULL, SAMPLES_PATH_DELIMITER_STR); + } + } else { + /* No delimiter found so this is a single directory */ + print_files_in_dir(c->grib_samples_path, ".tmpl"); + } + + exit(0); + } + + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { + options->print_header=0; + options->print_statistics=0; + options->default_print_width=-1; + + options->dump_flags =GRIB_DUMP_FLAG_DUMP_OK; + + if (grib_options_on("x")) { + options->dump_flags =0; + } else if (grib_options_on("c")) { + options->dump_flags =GRIB_DUMP_FLAG_CODED; + } + + if (grib_options_on("a")) + options->dump_flags |= GRIB_DUMP_FLAG_ALIASES; + + if (grib_options_on("t")) + options->dump_flags |= GRIB_DUMP_FLAG_TYPE; + + if (!grib_options_on("T:") && !grib_options_on("F:") && !grib_options_on("A") ) { + + } + + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; + } + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + if (!options->current_infile->name) return 0; + + fprintf(stdout,"=================== %s \n",name); + + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options,grib_handle* h) { + if(grib_options_on("F:")) printf("------ %d --------\n",options->handle_count); + grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0); + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) { + return 0; +} diff --git a/tools/grib_keys.sh b/tools/grib_keys.sh new file mode 100755 index 000000000..febe8ad75 --- /dev/null +++ b/tools/grib_keys.sh @@ -0,0 +1,15 @@ +#!/bin/sh +set -e + +echo "-# With the -L option a list of the available templates is printed \\n" +echo "\\verbatim " +echo "> grib_keys -L \\n" +grib_keys -L +echo "\\endverbatim\\n " + +echo "-# To print the standard set of key available for a given type\\n " +echo "\\verbatim " +echo "> grib_keys -T regular_ll_sfc_grib1" +#grib_keys -T regular_ll_sfc_grib1 +echo "\\endverbatim\\n " + diff --git a/tools/grib_ls.c b/tools/grib_ls.c new file mode 100644 index 000000000..af42cd7a5 --- /dev/null +++ b/tools/grib_ls.c @@ -0,0 +1,326 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_ls + * + * + * + */ +#include "grib_tools.h" + +grib_option grib_options[]={ +/* {id, args, help}, on, command_line, value*/ + {"f",0,0,1,0,0}, + {"p:",0,0,0,1,0}, + {"F:",0,0,1,1,"%g"}, + {"P:",0,0,0,1,0}, + {"w:",0,0,0,1,0}, + {"j",0,"json output\n",0,1,0}, + {"B:",0,0,0,1,0}, + {"l:",0,0,0,1,0}, + {"s:",0,0,0,1,0}, + {"i:",0,0,0,1,0}, + {"n:",0,0,1,1,"ls"}, + {"m",0,0,0,1,0}, + {"V",0,0,0,1,0}, + {"W:",0,0,1,1,"10"}, + {"S",0,0,1,0,0}, + {"M",0,0,0,1,0}, + {"H",0,0,1,0,0}, + {"g",0,0,0,1,0}, + {"P",0,0,1,0,0}, + {"T:",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"v",0,0,1,0,0}, + {"x",0,0,0,1,0} +}; + +char* grib_tool_description="List content of grib files printing values of " + "some keys.\n\tIt does not fail when a key is not found."; +char* grib_tool_name="grib_ls"; +char* grib_tool_usage="[options] grib_file grib_file ..."; +static char* new_handle=""; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); +double lat=0; +double lon=0; +int mode=0; +static int json=0; + +grib_nearest* n=NULL; +/*double *outlats,*outlons,*values,*lsm_values,*distances;*/ + +int main(int argc, char *argv[]) { return grib_tool(argc,argv);} + +int grib_tool_before_getopt(grib_runtime_options* options) { + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { + char *theEnd = NULL, *end1=NULL; + size_t size=4; + int ret=0; + double min=0,max=0; + int i=0,idx=0; + char* p=NULL; + if (grib_options_on("j")) { + options->verbose=0; + json=1; + } + + if (options->latlon) { + + lat = strtod(options->latlon,&theEnd); + if (*theEnd != ',') { + printf("ERROR: wrong latitude value\n"); + exit(1); + } + lon= strtod(++theEnd,&end1); + + mode=GRIB_NEAREST_SAME_POINT | GRIB_NEAREST_SAME_GRID; + + if (end1 && *end1 == ',') { + end1++; + if (*end1 != '0') { + p=end1; + while (*p != ',' && *p !='\0') p++; + if (*end1 == '4') { + options->latlon_mode=4; + } else if (*end1 == '1') { + options->latlon_mode=1; + } else { + printf("ERROR %s: wrong mode given in option -l\n",grib_tool_name); + exit(1); + } + } + if (*p == ',') { + p++; + options->latlon_mask=strdup(p); + } + } + + } + + if (options->latlon && options->latlon_mask) { + FILE* f=NULL; + grib_handle* hh; + f=fopen(options->latlon_mask,"r"); + if(!f) { + perror(options->latlon_mask); + exit(1); + } + hh=grib_handle_new_from_file(0,f,&ret); + fclose(f); + GRIB_CHECK_NOLINE(ret,0); + n=grib_nearest_new(hh,&ret); + GRIB_CHECK_NOLINE(ret,0); + GRIB_CHECK_NOLINE(grib_nearest_find(n,hh,lat,lon,mode, + options->lats,options->lons,options->mask_values,options->distances,options->indexes,&size),0); + grib_nearest_delete(n); + n=NULL; + grib_handle_delete( hh); + + options->latlon_idx=-1; + max=options->distances[0]; + for (i=0;i<4;i++) + if (maxdistances[i]) {max=options->distances[i];idx=i;} + min=max; + for (i=0;i<4;i++) { + if ((min >= options->distances[i]) && (options->mask_values[i] >= 0.5)) { + options->latlon_idx=i; + min = options->distances[i]; + } + } + + if (options->latlon_idx<0){ + min=0; + options->latlon_idx=0; + for (i=1;i<4;i++) + if (min>options->distances[i]) { + min = options->distances[i]; + options->latlon_idx=i; + } + } + } + if (json) printf("[\n"); + + return 0; +} +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; + } + + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + return 0; +} + +static void print_key_values(grib_runtime_options* options,grib_handle* h) { + int i; + int ret=0; + char* s="\"keys\" : {"; + double dvalue=0; + long lvalue=0; + char value[MAX_STRING_LEN]; + size_t len=MAX_STRING_LEN; + for (i=0;iprint_keys_count;i++) { + ret=GRIB_SUCCESS; + printf("%s",s); + len=MAX_STRING_LEN; + printf("\"%s\" : ",options->print_keys[i].name); + if (grib_is_missing(h,options->print_keys[i].name,&ret) && ret==GRIB_SUCCESS) + printf("\"missing\""); + else if ( ret == GRIB_SUCCESS ) { + if (options->print_keys[i].type == GRIB_TYPE_UNDEFINED) + grib_get_native_type(h,options->print_keys[i].name,&(options->print_keys[i].type)); + switch (options->print_keys[i].type) { + case GRIB_TYPE_STRING: + ret=grib_get_string( h,options->print_keys[i].name,value,&len); + printf("\"%s\"",value); + break; + case GRIB_TYPE_DOUBLE: + ret=grib_get_double( h,options->print_keys[i].name,&dvalue); + printf("%g",dvalue); + break; + case GRIB_TYPE_LONG: + ret=grib_get_long( h,options->print_keys[i].name,&lvalue); + printf("%ld",lvalue); + break; + default: + printf("invalid_type"); + } + } + if (ret == GRIB_NOT_FOUND) printf("null"); + s=", "; + } + printf("}"); +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + size_t size=4; + double v=0; + int err=0; + int i; + + if (!options->skip) { + + if (options->set_values_count != 0) + err=grib_set_values(h,options->set_values,options->set_values_count); + + if( err != GRIB_SUCCESS && options->fail) exit(err); + } + + if (options->latlon) { + int err=0; + double min; + if (!n) n=grib_nearest_new(h,&err); + GRIB_CHECK_NOLINE(err,0); + GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,0, + options->lats,options->lons,options->values, + options->distances,options->indexes,&size),0); + + if (!options->latlon_mask) { + min=options->distances[0]; + options->latlon_idx=0; + i=0; + for (i=1;i<4;i++) { + if (min>options->distances[i]) { + min=options->distances[i]; + options->latlon_idx=i; + } + } + } + + if (json) { + char* s="\n[\n"; + double missingValue=9999; + char value[MAX_STRING_LEN]; + size_t len=MAX_STRING_LEN; + printf("%s",new_handle); + printf( "{\n"); + print_key_values(options,h); + printf("\n, \"selected\" : %d",options->latlon_idx); + printf(", \"method\" : "); + if (options->latlon_mask) printf("\"nearest_land\""); + else printf("\"nearest\""); + printf("\n, \"neighbours\" : "); + for (i=0;i<4;i++) { + printf("%s",s); + len=MAX_STRING_LEN; + printf("{\"index\" : %d, \"latitude\" : %g, \"longitude\" : %g, \"distance\" : %g, " + "\"distance_unit\" : \"km\", ", + (int)options->indexes[i],options->lats[i],options->lons[i], + options->distances[i]); + if (grib_get_double_element(h,"values",options->indexes[i],&v) == GRIB_SUCCESS) { + if (v==missingValue) printf("\"value\" : null "); + else printf("\"value\" : %g ",v); + } + + if (grib_get_string( h,"units",value,&len)==GRIB_SUCCESS) + printf(", \"unit\" : \"%s\"",value); + + if (options->latlon_mask) + printf(", \"mask_value\"=%.2f",options->mask_values[i]); + printf("}"); + s="\n,"; + } + + printf("\n]"); + printf("\n}"); + } + + } + new_handle="\n,"; + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + +int grib_tool_finalise_action(grib_runtime_options* options) { + int i=0; + if (options->latlon && options->verbose) { + + printf("Input Point: latitude=%.2f longitude=%.2f\n",lat,lon); + printf("Grid Point chosen #%d index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km)\n", + options->latlon_idx+1,(int)options->indexes[options->latlon_idx], + options->lats[options->latlon_idx], + options->lons[options->latlon_idx], + options->distances[options->latlon_idx]); + + if (options->latlon_mask) { + printf("Mask values:\n"); + for (i=0;i<4;i++) { + printf("- %d - index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km) value=%.2f\n", + i+1,(int)options->indexes[i],options->lats[i],options->lons[i], + options->distances[i],options->mask_values[i]); + } + } else { + printf("Other grid Points\n"); + for (i=0;i<4;i++) { + printf("- %d - index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km)\n", + i+1,(int)options->indexes[i],options->lats[i],options->lons[i], + options->distances[i]); + } + } + } + + if (n) grib_nearest_delete(n); + if (json) printf("\n]\n"); + + return 0; +} diff --git a/tools/grib_ls.dox b/tools/grib_ls.dox new file mode 100644 index 000000000..9df9f28cd --- /dev/null +++ b/tools/grib_ls.dox @@ -0,0 +1,89 @@ +/*! \page grib_ls grib_ls +\section DESCRIPTION + List content of grib files printing values of some keys. + It does not fail when a key is not found. + +\section USAGE + grib_ls + [options] grib_file grib_file ... + +\section OPTIONS +-p key[:{s/d/l}],key[:{s/d/l}],... \n + Declaration of keys to print. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be requested. Default type is string. + \n \n -F format \n + C style format for floating point values. + \n \n -P key[:{s/d/l}],key[:{s/d/l}],... \n + As -p adding the declared keys to the default list. + \n \n -w key[:{s/d/l}]{=/!=}value,key[:{s/d/l}]{=/!=}value,... \n + Where clause. + Grib messages are processed only if they match all the key/value constraints. + A valid constraint is of type key=value or key!=value. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be specified. Default type is string. + \n \n -j \n json output \n \n -B order by directive \n + Order by. The output will be ordered according the order by directive. + Order by example: "step asc, centre desc" (step ascending and centre discending) + \n \n -l Latitude,Longitude[,MODE,file] \n + Value close to the point of a Latitude/Longitude. + Allowed values for MODE are: + 4 (4 values in the nearest points are printed) Default + 1 (the value at the nearest point is printed) + file (file is used as mask. The closer point with mask value>=0.5 is printed) + \n \n -s key[:{s/d/l}]=value,key[:{s/d/l}]=value,... \n + Key/values to set. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be defined. By default the native type is set. + \n \n -i index \n + Data value corresponding to the given index is printed. + \n \n -n namespace \n + All the keys belonging to namespace are printed. + \n \n -m \n Mars keys are printed. + \n \n -V \n Version. + \n \n -W width \n + Minimum width of each column in output. Default is 10. + \n \n -M \n Multi-grib support off. Turn off support for multiple fields in single grib message. + \n \n -g \n Copy GTS header. + \n \n -G \n GRIBEX compatibility mode. + \n \n -7 \n Does not fail when the message has wrong length + \n \n -x \n Fast parsing option, only headers are loaded. + \n \n +\section grib_ls_examples grib_ls examples +-# Without options a default list of keys is printed. \n +The default list is different depending on the type of grib message. \n +\verbatim +> grib_ls ../data/reduced*.grib1 ../data/regular*.grib1 ../data/reduced*.grib2 \n +\endverbatim\n +-# To print offset and count number in file use the keys offset and count\n +Also the total count in a set of files is available as countTotal\n +\verbatim +> grib_ls -p offset,count,countTotal ../data/reduced*.grib1 +\endverbatim\n +-# To list only a subset of messages use the -w (where option).\n +Only the pressure levels are listed with the following line.\n +\verbatim +> grib_ls -w levelType=pl ../tigge_pf_ecmwf.grib2 +\endverbatim\n +-# All the grib messages not on pressure levels are listed as follows:\n +\verbatim +> grib_ls -w levelType!=pl ../tigge_pf_ecmwf.grib2 +\endverbatim\n +-# To get the closest grid point to a latitude/longitude.\n +\code +>grib_ls -l 51.46,-1.33,1 -p paramId,name ../data/reduced_gaussian_surface.grib2 +../data/reduced_gaussian_surface.grib2 +paramId shortName value +167 2t 282.002 +1 of 1 grib messages in ../data/reduced_gaussian_surface.grib2 + +1 of 1 total grib messages in 1 files +Input Point: latitude=51.46 longitude=-1.33 +Grid Point chosen #3 index=749 latitude=51.63 longitude=0.00 distance=93.81 (Km) +Other grid Points +- 1 - index=845 latitude=48.84 longitude=0.00 distance=306.86 (Km) +- 2 - index=944 latitude=48.84 longitude=356.40 distance=333.66 (Km) +- 3 - index=749 latitude=51.63 longitude=0.00 distance=93.81 (Km) +- 4 - index=844 latitude=51.63 longitude=356.25 distance=168.37 (Km) +\endcode\n +*/ diff --git a/tools/grib_ls.sh b/tools/grib_ls.sh new file mode 100755 index 000000000..4cefe6a02 --- /dev/null +++ b/tools/grib_ls.sh @@ -0,0 +1,35 @@ +#!/bin/sh +set -e + +echo "-# Without options a default list of keys is printed. \\n" +echo "The default list is different depending on the type of grib message. \\n" +echo "\\verbatim " +echo "> grib_ls ../data/reduced*.grib1 ../data/regular*.grib1 ../data/reduced*.grib2 \\n" +#grib_ls -W 8 ../data/reduced*.grib1 ../data/regular*.grib1 ../data/reduced*.grib2 +echo "\\endverbatim\\n " + +echo "-# To print offset and count number in file use the keys offset and count\\n " +echo "Also the total count in a set of files is available as countTotal\\n" +echo "\\verbatim " +echo "> grib_ls -p offset,count,countTotal ../data/reduced*.grib1" +#grib_ls -p offset,count,countTotal ../data/reduced*.grib1 +echo "\\endverbatim\\n " + +echo "-# To list only a subset of messages use the -w (where option).\\n " +echo "Only the pressure levels are listed with the following line.\\n " +echo "\\verbatim " +echo "> grib_ls -w levelType=pl ../tigge_pf_ecmwf.grib2 " +#grib_ls -W 8 -w levelType=pl ../data/tigge_pf_ecmwf.grib2 +echo "\\endverbatim\\n " + +echo "-# All the grib messages not on pressure levels are listed as follows:\\n " +echo "\\verbatim " +echo "> grib_ls -w levelType!=pl ../tigge_pf_ecmwf.grib2 " +#grib_ls -W 8 -w levelType!=pl ../data/tigge_pf_ecmwf.grib2 +echo "\\endverbatim\\n " + +echo "-# To get the closest grid point to a latitude/longitude.\\n" +echo "\\code " +echo ">grib_ls -l 51.46,-1.33,1 -p paramId,name ../data/reduced_gaussian_surface.grib2" +./grib_ls -l 51.46,-1.33,1 -p paramId,shortName ../data/reduced_gaussian_surface.grib2 +echo "\\endcode\\n" diff --git a/tools/grib_moments.c b/tools/grib_moments.c new file mode 100644 index 000000000..ebea26c6d --- /dev/null +++ b/tools/grib_moments.c @@ -0,0 +1,134 @@ +#include "grib_api_internal.h" + +void usage(char* prog) {printf("usage: %s split order interpolated.grib original.grib\n",prog);exit(1);} + +int get_box(grib_handle *h,double *east,double *north,double *west,double *south) { + int ret=0; + long iScansNegatively,jScansPositively; + + ret=grib_get_long(h,"iScansNegatively",&iScansNegatively); + if (ret) return ret; + ret=grib_get_long(h,"jScansPositively",&jScansPositively); + if (ret) return ret; + if (iScansNegatively) { + grib_get_double(h,"longitudeOfFirstGridPointInDegrees",west); + grib_get_double(h,"longitudeOfLastGridPointInDegrees",east); + } else { + grib_get_double(h,"longitudeOfFirstGridPointInDegrees",east); + grib_get_double(h,"longitudeOfLastGridPointInDegrees",west); + } + if (jScansPositively) { + grib_get_double(h,"latitudeOfFirstGridPointInDegrees",south); + grib_get_double(h,"latitudeOfLastGridPointInDegrees",north); + } else { + grib_get_double(h,"latitudeOfFirstGridPointInDegrees",north); + grib_get_double(h,"latitudeOfLastGridPointInDegrees",south); + } + if (*east>*west) *east-=360; + return ret; +} + +int main(int argc, char* argv[]) { + int order,count,i,j,k,l; + FILE *f1,*f2; + double *m1,*m2,*dm; + int ret=0; + long numberOfValues; + double geast,gwest,gnorth,gsouth; + double *east,*west,*north,*south; + grib_handle *h1,*h2; + grib_context *c=grib_context_get_default(); + int split=1; + + if (argc!=5) usage(argv[0]); + + split=atoi(argv[1]); + order=atoi(argv[2]); + + f1=fopen(argv[3],"r"); + if (!f1) { + perror(argv[3]); + exit(1); + } + + f2=fopen(argv[4],"r"); + if (!f2) { + perror(argv[4]); + exit(1); + } + + m1=grib_context_malloc_clear(c,sizeof(double)*order*order); + m2=grib_context_malloc_clear(c,sizeof(double)*order*order); + dm=grib_context_malloc_clear(c,sizeof(double)*order*order); + east=grib_context_malloc_clear(c,sizeof(double)*split); + south=grib_context_malloc_clear(c,sizeof(double)*split); + north=grib_context_malloc_clear(c,sizeof(double)*split); + west=grib_context_malloc_clear(c,sizeof(double)*split); + + count=0; + while ((h1=grib_handle_new_from_file(0,f1,&ret))!=NULL && (h2=grib_handle_new_from_file(0,f2,&ret))!=NULL) { + get_box(h1,&geast,&gnorth,&gwest,&gsouth); + if (split>1) { + double inc=0; + double d=(gwest-geast)/split; + + inc=0; + for (i=0;i +#include +#include + +#include "grib_api_internal.h" + +void usage(char* prog) { + printf("Usage: %s latlon_file grib_orography grib_file grib_file ...\n",prog); + exit(1); +} + +int main(int argc, char** argv) { + FILE* fin=0; + int ret=0; + char* fname=0; + float lat,lon; + double *vlat,*vlon; + int npoints=0,i=0,n=0; + grib_handle* h; + double *outlats,*outlons,*values,*lsm_values,*distances; + size_t* indexes; + + if (argc < 2) usage(argv[0]); + + fname=argv[1]; + fin=fopen(fname,"r"); + if(!fin) { perror(fname); exit(1); } + npoints=0; + while (fscanf(fin,"%g %g",&lat,&lon) != EOF) npoints++; + fclose(fin); + + vlat=(double*)malloc(npoints*sizeof(double)); + if (!vlat) {printf("unable to allocate %d bytes\n",npoints*sizeof(double));exit(1);} + vlon=(double*)malloc(npoints*sizeof(double)); + if (!vlon) {printf("unable to allocate %d bytes\n",npoints*sizeof(double));exit(1);} + outlats=(double*)malloc(npoints*sizeof(double)); + if (!outlats) {printf("unable to allocate %d bytes\n",npoints*sizeof(double));exit(1);} + outlons=(double*)malloc(npoints*sizeof(double)); + if (!outlons) {printf("unable to allocate %d bytes\n",npoints*sizeof(double));exit(1);} + values=(double*)malloc(npoints*sizeof(double)); + if (!values) {printf("unable to allocate %d bytes\n",npoints*sizeof(double));exit(1);} + lsm_values=(double*)malloc(npoints*sizeof(double)); + if (!lsm_values) {printf("unable to allocate %d bytes\n",npoints*sizeof(double));exit(1);} + distances=(double*)malloc(npoints*sizeof(double)); + if (!distances) {printf("unable to allocate %d bytes\n",npoints*sizeof(double));exit(1);} + indexes=(size_t*)malloc(npoints*sizeof(double)); + if (!indexes) {printf("unable to allocate %d bytes\n",npoints*sizeof(double));exit(1);} + + fname=argv[1]; + fin=fopen(fname,"r"); + if(!fin) { perror(fname); exit(1); } + i=0; + while (fscanf(fin,"%g %g",&lat,&lon) != EOF) {vlat[i]=lat; vlon[i]=lon>0 ? lon : lon+360; i++;} + fclose(fin); + + fname=argv[2]; + fin=fopen(fname,"r"); + if(!fin) { perror(fname); exit(1); } + h=grib_handle_new_from_file(0,fin,&ret); + if (!h || ret!=GRIB_SUCCESS) {printf(" unable to create handle\n");exit(1);} + + grib_nearest_find_multiple(h,1,vlat,vlon,npoints, + outlats,outlons,lsm_values,distances,indexes); + + grib_handle_delete(h); + + fclose(fin); + + for (n=3;n<=argc-1;n++) { + fname=argv[n]; + fin=fopen(fname,"r"); + if(!fin) { perror(fname); exit(1); } + while ((h=grib_handle_new_from_file(0,fin,&ret))!=NULL) { + grib_get_double_elements(h,"values",indexes,npoints,values); + + grib_handle_delete(h); + for (i=0;iinteger, d->float, s->string, n->namespace." + "\n\t\tSee -a option. Incompatible with -H option.\n"}, + {"d:","value", + "\n\t\tSet all the data values to \"value\".\n"}, + {"e:","tolerance","\n\t\tOnly values whose difference is more than tolerance are considered different.\n"}, + {"f",0,"Force. Force the execution not to fail on error.\n"}, + {"F:","format","\n\t\tC style format for floating point values.\n"}, + {"g",0,"Copy GTS header. \n"}, + {"G",0,"GRIBEX compatibility mode.\n"}, + {"i:","index", + "\n\t\tData value corresponding to the given index is printed.\n"}, + {"l:","Latitude,Longitude[,MODE,file]", + "\n\t\tValue close to the point of a Latitude/Longitude." + "\n\t\tAllowed values for MODE are:" + "\n\t\t4 (4 values in the nearest points are printed) Default" + "\n\t\t1 (the value at the nearest point is printed)" + "\n\t\tfile (file is used as mask. The closer point with mask value>=0.5 is printed)\n" + }, + {"n:","namespace", + "\n\t\tAll the keys belonging to namespace are printed.\n"}, + {"m",0,"Mars keys are printed.\n"}, + {"o:","output_grib_file", + "\n\t\tOutput grib is written to ouput_grib_file." + "\n\t\tIf an ouput grib file is required and -o is not used, the" + " ouput grib is written to filtered.out\n"}, + {"p:","key[:{s/d/l}],key[:{s/d/l}],...", + "\n\t\tDeclaration of keys to print." + "\n\t\tFor each key a string (key:s) or a double (key:d) or a long (key:l)" + "\n\t\ttype can be requested. Default type is string.\n"}, + {"q",0,"Quiet.\n"}, + {"r",0,"Repack data. Sometimes after setting some keys involving properties" + "\n\t\tof the packing algorithm a repacking of data is needed." + "\n\t\tThis repacking is performed setting this -r option.\n"}, + {"s:","key[:{s/d/l}]=value,key[:{s/d/l}]=value,...", + "\n\t\tKey/values to set." + "\n\t\tFor each key a string (key:s) or a double (key:d) or a long (key:l)" + "\n\t\ttype can be defined. By default the native type is set.\n"}, + {"t",0,"Print type information.\n"}, + {"w:","key[:{s/d/l}]{=/!=}value,key[:{s/d/l}]{=/!=}value,...", + "\n\t\tWhere clause." + "\n\t\tGrib messages are processed only if they match all the" + " key/value constraints." + "\n\t\tA valid constraint is of type key=value or key!=value." + "\n\t\tFor each key a string (key:s) or a double (key:d) or" + " a long (key:l)\n\t\ttype can be specified. Default type is string.\n"}, + {"v",0,"Verbose.\n"}, + {"7",0,"Does not fail when the message has wrong length\n"}, + {"A:","absolute error\n", + "\tCompare floating point values using the absolute error as tolerance.\n\t\tDefault is absolute error=0\n"}, + {"C",0,"C code mode. A C code program generating the grib message is dumped.\n"}, + {"D",0,"Debug mode.\n"}, + {"H",0,"Print octet content in hexadecimal format.\n"}, + {"M",0,"Multi-field support off. Turn off support for multiple fields in single grib message.\n"}, + {"O",0,"Octet mode. WMO documentation style dump.\n"}, + {"P:","key[:{s/d/l}],key[:{s/d/l}],...", + "\n\t\tAs -p adding the declared keys to the default list.\n"}, + {"R:","key1=relative_error1,key2=relative_error2,...\n", + "\tCompare floating point values using the relative error as tolerance." +"\n\t\tkey1=relative_error will compare key1 using relative_error1." +"\n\t\tall=relative_error will compare all the floating point keys using relative_error. Default all=0.\n"}, + {"S",0,"Strict. Only grib messages matching all the constraints are copied to" + "\n\t\tthe output file\n"}, + {"T:","T | B","Message type. T->GTS, B->BUFR. The input file is interpreted according the message type.\n"}, + {"V",0,"Version.\n"}, + {"W:","width","\n\t\tMinimum width of each column in output. Default is 10.\n"}, + {"x",0,"Fast parsing option, only headers are loaded.\n"}, + {"k:","key1,key2,...","\n\t\tSpecify a list of keys to index on. By default the input files are indexed on the MARS keys.\n"} + +}; + +int grib_options_help_count=sizeof(grib_options_help_list)/sizeof(grib_options_help); + +char* grib_options_get_option(const char* id) { + int i=0; + + for (i=0; iorderby=grib_options_get_option("B:"); + + if (grib_options_on("x")) options->mode=MODE_HEADERS_ONLY; + if (grib_options_on("T:")) { + char* x=grib_options_get_option("T:"); + if ( *x == 'T' ) options->mode=MODE_GTS; + else if ( *x == 'B' ) options->mode=MODE_BUFR; + else options->mode=MODE_GRIB; + } + + if (grib_options_on("F:")) + options->format=grib_options_get_option("F:"); + else + options->format=strdup("%g"); + + if (grib_options_on("i:")) { + options->index_on=1; + options->index=atoi(grib_options_get_option("i:")); + } + + if (grib_options_on("l:")) + options->latlon=grib_options_get_option("l:"); + + has_output=grib_options_on("U"); + has_input_extra=grib_options_on("I"); + options->repack=grib_options_on("r"); + options->gts=grib_options_on("g"); + + if (grib_options_on("d:")) { + options->constant=atof(grib_options_get_option("d:")); + options->repack=1; + } + + if (grib_options_on("G")) grib_gribex_mode_on(context); + + nfiles=argc-optind; + if ( nfiles < (1+has_output+has_input_extra) && !options->infile ) usage(); + + if (has_input_extra) { + options->infile_extra=(grib_tools_file*)calloc(1,sizeof(grib_tools_file)); + options->infile_extra->name=argv[optind]; + } + + if (!options->infile) { + for (i=optind+has_input_extra;iname=argv[i]; + if (!options->infile) options->infile=infile; + else { + p=options->infile; + while(p->next) p=p->next; + p->next=infile; + } + } + } + + if (has_output) { + options->outfile=(grib_tools_file*)calloc(1,sizeof(grib_tools_file)); + options->outfile->name=strdup(argv[argc-1]); + } + + if (grib_options_on("o:")) { + options->outfile=(grib_tools_file*)calloc(1,sizeof(grib_tools_file)); + options->outfile->name=grib_options_get_option("o:"); + } + + options->print_number=grib_options_on("N"); + options->print_header=grib_options_on("H"); + options->verbose=grib_options_on("v"); + + if (grib_options_on("q") && grib_options_command_line("q")) + options->verbose=0; + + options->fail=!grib_options_on("f"); + if (grib_options_get_option("W:")) + options->default_print_width=atoi(grib_options_get_option("W:")); + + if (grib_options_on("n:")) + options->name_space=grib_options_get_option("n:"); + + if (grib_options_on("m")) + options->name_space=strdup("mars"); + + + if (grib_options_on("P:")) karg=grib_options_get_option("P:"); + else if (grib_options_on("p:")) { + karg=grib_options_get_option("p:"); + options->name_space=NULL; + } + + options->requested_print_keys_count=MAX_KEYS; + ret = parse_keyval_string(grib_tool_name,karg,0,GRIB_TYPE_UNDEFINED, + options->requested_print_keys,&(options->requested_print_keys_count)); + if (ret == GRIB_INVALID_ARGUMENT) usage(); + GRIB_CHECK_NOLINE(ret,0); + + options->strict=grib_options_on("S"); + + if (grib_options_on("M")) grib_multi_support_off(context); + else grib_multi_support_on(context); + + if (grib_options_on("g")) grib_gts_header_on(context); + else grib_gts_header_off(context); + + if (grib_options_on("V")) { + printf("\ngrib_api Version "); + grib_print_api_version(stdout); + printf("\n\n"); + } + + if (grib_options_on("s:")) { + sarg=grib_options_get_option("s:"); + options->set_values_count=MAX_KEYS; + ret=parse_keyval_string(grib_tool_name,sarg,1,GRIB_TYPE_UNDEFINED,options->set_values,&(options->set_values_count)); + if (ret == GRIB_INVALID_ARGUMENT) usage(); + } + + if (grib_options_on("R:")) { + sarg=grib_options_get_option("R:"); + options->tolerance_count=MAX_KEYS; + ret=parse_keyval_string(grib_tool_name,sarg,1,GRIB_TYPE_DOUBLE,options->tolerance,&(options->tolerance_count)); + if (ret == GRIB_INVALID_ARGUMENT) usage(); + } + + if (grib_options_on("b:")) { + barg=grib_options_get_option("b:"); + options->set_values_count=MAX_KEYS; + ret=parse_keyval_string(grib_tool_name,barg,0,GRIB_TYPE_STRING,options->set_values,&(options->set_values_count)); + if (ret == GRIB_INVALID_ARGUMENT) usage(); + } + + if (grib_options_on("c:")) { + sarg=grib_options_get_option("c:"); + options->compare_count=MAX_KEYS; + ret=parse_keyval_string(grib_tool_name,sarg,0,GRIB_TYPE_UNDEFINED,options->compare, + &(options->compare_count)); + if (ret == GRIB_INVALID_ARGUMENT) usage(); + } + if (grib_options_on("e")) { + for (i=0;icompare[i+options->compare_count].name=names[i]; + options->compare[i+options->compare_count].type=GRIB_NAMESPACE; + } + options->compare_count+=names_count; + } + + warg=grib_options_get_option("w:"); + + options->constraints_count=MAX_KEYS; + ret=parse_keyval_string(grib_tool_name,warg,1,GRIB_TYPE_UNDEFINED, + options->constraints,&(options->constraints_count)); + if (ret == GRIB_INVALID_ARGUMENT) usage(); + + return GRIB_SUCCESS; +} + +char* grib_options_get_help(char* id) { + int i=0; + char msg[]="ERROR: help not found for option "; + char* err=(char*)calloc(1,sizeof(msg)+3); + sprintf(err,"%s%c\n",msg,*id); + for (i=0; i\n"); + for (i=0;i\n"); + printf("-%c %s\n", + grib_options[i].id[0], + grib_options_get_args(grib_options[i].id)); + printf("\n"); + printf("%s", + grib_options_get_help(grib_options[i].id)); + printf("\n"); + } + } + printf("\n"); + exit(1); +} +#endif + diff --git a/tools/grib_packing.c b/tools/grib_packing.c new file mode 100644 index 000000000..289c9cfb0 --- /dev/null +++ b/tools/grib_packing.c @@ -0,0 +1,151 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_debug + * + * Description: + * + * + * + * + */ + +#include "grib_api_internal.h" + +void usage(const char* p) +{ + printf("Usage: %s [-n minimum] [-x maximum] [-b number of bits] [-d decimal scaling] [-2] [--] [values ..]\n",p); + exit(1); +} + +unsigned long pack(double v,double ref,long bscale,long dscale) +{ + double b = grib_power(-bscale,2); + double d = grib_power( dscale,10); + return (v*d - ref)*b + 0.5; +} + +double unpack(unsigned long v,double ref,long bscale,long dscale) +{ + double b = grib_power( bscale,2); + double d = grib_power(-dscale,10); + return (v*b+ref)*d; +} + +void try(const char* txt,double v,double ref,long bscale,long dscale) +{ + double x; + if(txt) printf("%-18s : ",txt); + x = unpack(pack(v,ref,bscale,dscale),ref,bscale,dscale); + printf("%g (err=%g)\n",x,v-x); +} + +int main(int argc, char *argv[]) +{ + extern char *optarg; + extern int optind; + double min = 0,max = 100; + long bits = 16; + int g2 = 0; + long dscale = 0; + double ref; + double decimal_scale; + long bscale; + double dmin,dmax; + int err=0; + + int c; + + while((c = getopt(argc, argv,"2n:x:b:d:")) != EOF) { + switch(c) { + + case 'n': + min = atof(optarg); + break; + + case 'x': + max = atof(optarg); + break; + + case 'b': + bits = atol(optarg); + break; + + case 'd': + dscale = atol(optarg); + break; + + case '2': + g2=1; + break; + + default: + usage(argv[0]); + break; + } + } + + decimal_scale = grib_power(dscale,10) ; + + dmin = min*decimal_scale; + dmax = max*decimal_scale; + + if(g2) { + double* pref=&ref; + grib_nearest_smaller_ieee_float(dmin,pref); + } + else + grib_nearest_smaller_ibm_float(dmin,&ref); + + bscale = grib_get_binary_scale_fact(dmax,ref,bits,&err); + + printf("\n"); + + printf("Minimum value : %g\n",min); + printf("Maximum value : %g\n",max); + printf("Bits per values : %ld\n",bits); + printf("Binary scale factor : %ld\n",bscale); + printf("Decimal scale factor: %ld\n",dscale); + printf("Encoding : %s\n",g2 ? "IEEE" : "IBM"); + printf("\n"); + + if(ref != dmin) + { + printf("WARNING: reference value != scaled minimum value\n"); + printf(" reference value = %g\n",ref); + printf(" scaled minimum = %g\n",dmin); + printf(" difference = %g\n",ref-dmin); + printf("\n"); + } + + + + + printf("Packing range : [%0*lx - %0*lx]\n", + (int)(bits+7)/8*2,pack(min,ref,bscale,dscale), + (int)(bits+7)/8*2,pack(max,ref,bscale,dscale)); + + printf("Bucket size : %g\n",unpack(1,ref,bscale,dscale) - unpack(0,ref,bscale,dscale)); + + printf("\n"); + printf("Packing/unpacking :\n"); + printf("\n"); + try("Minimum",min,ref,bscale,dscale); + try("Maximum",max,ref,bscale,dscale); + + for(;optind < argc; optind++) + try(argv[optind],atof(argv[optind]),ref,bscale,dscale); + + + return 0; +} + + diff --git a/tools/grib_points.c b/tools/grib_points.c new file mode 100644 index 000000000..7ebc68bb9 --- /dev/null +++ b/tools/grib_points.c @@ -0,0 +1,195 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_ls + * + * + * + */ +#include "grib_tools.h" + +grib_option grib_options[]={ +/* {id, args, help}, on, command_line, value*/ + {"f",0,0,0,1,0}, + {"p:",0,0,1,1,0}, + {"P:",0,0,0,1,0}, + {"w:",0,0,0,1,0}, + {"B:",0,0,0,1,0}, + {"i:",0,0,0,1,0}, + {"m",0,0,0,1,0}, + {"V",0,0,0,1,0}, + {"W:",0,0,1,1,"10"}, + {"S",0,0,1,0,0}, + {"M",0,0,0,1,0}, + {"H",0,0,1,0,0}, + {"P",0,0,1,0,0}, + {"G",0,0,0,1,0}, + {"7",0,0,0,1,0}, + {"v",0,0,1,0,0} +}; + +char* grib_tool_description="Lat lon values list for given points list. "; +char* grib_tool_name="grib_points"; +char* grib_tool_usage="file_list_of_points grib_file grib_file ..."; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); +double lat=0; +double lon=0; +int mode=0; +grib_nearest* n=NULL; + +int main(int argc, char *argv[]) { return grib_tool(argc,argv);} + +int grib_tool_before_getopt(grib_runtime_options* options) { + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { + char *theEnd = NULL, *end1=NULL; + size_t size=4; + int ret=0; + double min=0,max=0; + int i=0,idx=0; + char* p=NULL; + if (options->latlon) { + + lat = strtod(options->latlon,&theEnd); + if (*theEnd != '/') { + printf("ERROR: wrong latitude value\n"); + exit(1); + } + lon= strtod(++theEnd,&end1); + if (lon<0) lon+=360; + + mode=GRIB_NEAREST_SAME_POINT | GRIB_NEAREST_SAME_GRID; + + if (end1 && *end1 == '/') { + end1++; + if (*end1 != '0') { + p=end1; + while (*p != '/' && *p !='\0') p++; + if (*end1 == '4') { + options->latlon_mode=4; + } else if (*end1 == '1') { + options->latlon_mode=1; + } else { + printf("ERROR %s: wrong mode given in option -l\n",grib_tool_name); + exit(1); + } + } + if (*p == '/') { + p++; + options->latlon_mask=strdup(p); + } + } + + + } + + if (options->latlon && options->latlon_mask) { + FILE* f=NULL; + grib_handle* hh; + f=fopen(options->latlon_mask,"r"); + if(!f) { + perror(options->latlon_mask); + exit(1); + } + hh=grib_handle_new_from_file(0,f,&ret); + fclose(f); + GRIB_CHECK_NOLINE(ret,0); + n=grib_nearest_new(hh,&ret); + GRIB_CHECK_NOLINE(ret,0); + GRIB_CHECK_NOLINE(grib_nearest_find(n,hh,lat,lon,mode, + options->lats,options->lons,options->mask_values,options->distances,options->indexes,&size),0); + grib_nearest_delete(n); + n=NULL; + grib_handle_delete( hh); + + options->latlon_idx=-1; + max=options->distances[0]; + for (i=0;i<4;i++) + if (maxdistances[i]) {max=options->distances[i];idx=i;} + min=max; + for (i=0;i<4;i++) { + if ((min >= options->distances[i]) && (options->mask_values[i] >= 0.5)) { + options->latlon_idx=i; + min = options->distances[i]; + } + } + + if (options->latlon_idx<0){ + min=0; + options->latlon_idx=0; + for (i=1;i<4;i++) + if (min>options->distances[i]) { + min = options->distances[i]; + options->latlon_idx=i; + } + } + } + + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; + } + + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + size_t size=4; + + if (options->latlon) { + int err=0; + if (!n) n=grib_nearest_new(h,&err); + GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,mode, + options->lats,options->lons,options->values, + options->distances,options->indexes,&size),0); + + } + return 0; +} + +int grib_tool_finalise_action(grib_runtime_options* options) { + double radius=6371; + int i=0; + if (options->latlon) { + printf("Input Point: latitude=%.2f longitude=%.2f\n",lat,lon); + printf("Grid Point chosen #%d index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km)\n", + options->latlon_idx+1,(int)options->indexes[options->latlon_idx], + options->lats[options->latlon_idx], + options->lons[options->latlon_idx], + options->distances[options->latlon_idx]*radius); + + if (options->latlon_mask) { + printf("Mask values:\n"); + for (i=0;i<4;i++) { + printf("- %d - index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km) value=%.2f\n", + i+1,(int)options->indexes[i],options->lats[i],options->lons[i], + options->distances[i]*radius,options->mask_values[i]); + } + } else { + printf("Other grid Points\n"); + for (i=0;i<4;i++) { + printf("- %d - index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km)\n", + i+1,(int)options->indexes[i],options->lats[i],options->lons[i], + options->distances[i]*radius); + } + } + + if (n) grib_nearest_delete(n); + } + return 0; +} diff --git a/tools/grib_repair.c b/tools/grib_repair.c new file mode 100644 index 000000000..cd795db0b --- /dev/null +++ b/tools/grib_repair.c @@ -0,0 +1,109 @@ +#include "grib_api_internal.h" + + + +static void usage(const char* name) { + fprintf(stderr,"Usage: %s in out [bad]\n", name); + exit(1); +} + + +#define SIZE 50*1024*1024 + +int main(int argc,char **argv) { + + FILE* in, *out, *bad; + char *cin, *cout, *cbad; + char buffer[SIZE]; + size_t data_len = SIZE; + long count = 0; + unsigned char *data; + + + if(argc != 3 && argc != 4) usage(argv[0]); + + cin = argv[1]; + in = fopen(argv[1],"r"); + if(!in) { + perror(argv[1]); + exit(1); + } + + cout = argv[2]; + out = fopen(argv[2],"w"); + if(!out) { + perror(argv[2]); + exit(1); + } + + if(argc == 4) { + cbad = argv[3]; + bad = fopen(argv[3],"w"); + if(!bad) { + perror(argv[3]); + exit(1); + } + } + else { + bad = out; + cbad = cout; + } + + + + for(;;) { + size_t len = SIZE; + long ret = wmo_read_grib_from_file(in,buffer,&len); + if(ret == GRIB_END_OF_FILE && len == 0) + break; + + printf("GRIB %ld: size: %ld code: %ld (%s)\n", ++count, (long)len, ret, grib_get_error_message(ret)); + + switch(ret) { + + case 0: + if(fwrite(buffer,1,len,out) != len) { + perror(cout); + exit(1); + } + break; + + case GRIB_WRONG_LENGTH: + case GRIB_PREMATURE_END_OF_FILE: + fseek(in,-4,SEEK_CUR); + memset(buffer + len - 4, '7', 4); + len = data_len = SIZE; + data = (unsigned char*)&buffer[0]; + ret = grib_read_any_from_memory(NULL, &data, &data_len, buffer, &len); + printf(" -> GRIB %ld: size: %ld code: %ld (%s)\n", count, (long)len, ret, grib_get_error_message(ret)); + if(ret == 0) { + if(fwrite(buffer,1,len,bad) != len) { + perror(cbad); + exit(1); + } + } + break; + + } + + } + + if(fclose(in)) { + perror(argv[1]); + exit(1); + } + + if(fclose(out)) { + perror(argv[2]); + exit(1); + } + + if(argc == 4) { + if(fclose(bad)) { + perror(argv[3]); + exit(1); + } + } + + return 0; +} diff --git a/tools/grib_set.c b/tools/grib_set.c new file mode 100644 index 000000000..2be30d287 --- /dev/null +++ b/tools/grib_set.c @@ -0,0 +1,165 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_set + * + * + * + */ +#include "grib_tools.h" + +grib_option grib_options[]={ + /* {id, args, help}, on, command_line, value*/ + {"s:",0,0,1,1,0}, + {"r",0,0,0,1,0}, + {"d:",0,0,0,1,0}, + /*{"n:","noise percentage","\n\t\tAdd noise to the data values. The noise added is the given percentage of the data value.\n",0,1,0},*/ + {"p:",0,0,1,1,0}, + {"P:",0,0,0,1,0}, + {"w:","key[:{s/d/l}]=value,key[:{s/d/l}]=value,...", + "\n\t\tWhere clause.\n\t\tSet is only executed for grib messages matching all the " + "key/value constraints.\n\t\tIf a grib message does not match the constraints it is" + " copied unchanged\n\t\tto the output_grib_file. This behaviour can be changed " + "setting the option -S.\n\t\tFor each key a string (key:s) or a double (key:d) or" + " a long (key:l)\n\t\ttype can be defined. Default type is string.\n",0,1,0}, + {"q",0,0,1,0,0}, + {"7",0,0,0,1,0}, + {"S",0,0,0,1,0}, + {"U",0,0,1,0,0}, + {"V",0,0,0,1,0}, + {"M",0,0,0,1,0}, + {"g",0,0,0,1,0}, + {"G",0,0,0,1,0}, + {"T:",0,0,0,1,0}, + {"f",0,0,0,1,0}, + {"v",0,0,0,1,0} +}; + +char* grib_tool_description="Sets key/value pairs in the input grib file and writes" +"\n\teach message to the output_grib_file." +"\n\tIt fails when an error occurs (e.g. key not found)."; +char* grib_tool_name="grib_set"; +char* grib_tool_usage="[options] grib_file grib_file ... output_grib_file"; + +int grib_options_count=sizeof(grib_options)/sizeof(grib_option); + +int main(int argc, char *argv[]) { return grib_tool(argc,argv);} + +int grib_tool_before_getopt(grib_runtime_options* options) { + return 0; +} + +int grib_tool_init(grib_runtime_options* options) { + if (options->set_values_count == 0 && !options->repack && !options->constant) { + printf("ERROR: please provide some keys to set through the -s option or use the -r/-d options\n"); + exit(1); + } + if (options->verbose) options->print_header=1; + /*if (grib_options_on("n:")) { + noise=atof(grib_options_get_option("n:")); + options->repack=1; + }*/ + + if (grib_options_on("n:") && grib_options_on("d:")) { + printf("Error: -n and -d options are incompatible. Choose one of the two please.\n"); + exit(1); + } + +#if 0 + if (options->outfile && options->outfile->name) { + options->outfile->file = fopen(options->outfile->name,"w"); + if(!options->outfile->file) { + perror(options->outfile->name); + exit(1); + } + } +#endif + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) { + return 0; +} + + +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) { + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) { + + int i=0; + int err=0; + + if (!options->skip) { + double* v=NULL; + size_t size=0; + if ( options->repack ) { + GRIB_CHECK_NOLINE(grib_get_size(h,"values",&size),0); + + v = (double*)calloc(size,sizeof(double)); + if(!v) { + fprintf(stderr,"failed to allocate %d bytes\n",(int)(size*sizeof(double))); + exit(1); + } + + GRIB_CHECK_NOLINE(grib_get_double_array(h,"values",v,&size),0); + } + + if (options->set_values_count != 0) + err=grib_set_values(h,options->set_values,options->set_values_count); + + if ( options->repack ) { + + if (grib_options_on("d:")) { + for(i = 0; i< size; i++) + v[i] = options->constant; + } +#if 0 + if (grib_options_on("n:")) { + for(i = 0; i< size; i++) + v[i] = options->constant; + } +#endif + + GRIB_CHECK_NOLINE(grib_set_double_array(h,"values",v,size),0); + free(v); + } + + if( err != GRIB_SUCCESS && options->fail) exit(err); + } + + if (!options->skip || !options->strict) grib_tools_write_message(options,h); + + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) { + grib_handle_delete(h); + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) { + grib_print_key_values(options,h); +} + + +int grib_tool_finalise_action(grib_runtime_options* options) +{ + int err=0; + grib_file_close_all(&err); + if (err != GRIB_SUCCESS) { + perror(grib_tool_name); + exit(err); + } + + return 0; +} diff --git a/tools/grib_set.dox b/tools/grib_set.dox new file mode 100644 index 000000000..4be27f5d1 --- /dev/null +++ b/tools/grib_set.dox @@ -0,0 +1,83 @@ +/*! \page grib_set grib_set +\section DESCRIPTION + Sets key/value pairs in the input grib file and writes + each message to the output_grib_file. + It fails when an error occurs (e.g. key not found). + +\section USAGE + grib_set + [options] grib_file grib_file ... output_grib_file + +\section OPTIONS +-s key[:{s/d/l}]=value,key[:{s/d/l}]=value,... \n + Key/values to set. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be defined. By default the native type is set. + \n \n -r \n Repack data. Sometimes after setting some keys involving properties + of the packing algorithm a repacking of data is needed. + This repacking is performed setting this -r option. + \n \n -d value \n + Set all the data values to "value". + \n \n -p key[:{s/d/l}],key[:{s/d/l}],... \n + Declaration of keys to print. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be requested. Default type is string. + \n \n -P key[:{s/d/l}],key[:{s/d/l}],... \n + As -p adding the declared keys to the default list. + \n \n -w key[:{s/d/l}]=value,key[:{s/d/l}]=value,... \n + Where clause. + Set is only executed for grib messages matching all the key/value constraints. + If a grib message does not match the constraints it is copied unchanged + to the output_grib_file. This behaviour can be changed setting the option -S. + For each key a string (key:s) or a double (key:d) or a long (key:l) + type can be defined. Default type is string. + \n \n -7 \n Does not fail when the message has wrong length + \n \n -S \n Strict. Only grib messages matching all the constraints are copied to + the output file + \n \n -V \n Version. + \n \n -M \n Multi-grib support off. Turn off support for multiple fields in single grib message. + \n \n -g \n Copy GTS header. + \n \n -G \n GRIBEX compatibility mode. + \n \n -f \n Force. Force the execution not to fail on error. + \n \n -v \n Verbose. + \n \n +\section grib_set_examples grib_set examples +-# To set productDefinitionTemplateNumber=2 only for the fields with productDefinitionTemplateNumber=11 \n +\verbatim +>grib_set -s productDefinitionTemplateNumber=2 -w productDefinitionTemplateNumber=11 ../data/tigge_pf_ecmwf.grib2 out.grib2 +\endverbatim\n +-# To set productDefinitionTemplateNumber=2 only for the fields for which productDefinitionTemplateNumber is not equal to 11 \n +\verbatim +>grib_set -s productDefinitionTemplateNumber=2 -w productDefinitionTemplateNumber!=11 tigge_pf_ecmwf.grib2 out.grib2 +\endverbatim\n +-# When a key is not used all the bits of its value should be set to 1 to indicate that it is missing. Since the length + (number of octet) is different from a key to another, the value that we have to code for missing keys is not unique. + To give an easy way to set a key to missing a string "missing" or "MISSING" is accepted by grib_set as follows:\n +\verbatim +>grib_set -s scaleFactorOfFirstFixedSurface=missing,scaledValueOfFirstFixedSurface=MISSING ../data/regular_latlon_surface.grib2 out.grib2 +\endverbatim\n +Since some values can not be set to missing you can get an error for those keys.\n +-# To set scaleFactorOfSecondFixedSurface to missing only for the fields for which scaleFactorOfSecondFixedSurface is not missing: \n +\verbatim +>grib_set -s scaleFactorOfSecondFixedSurface=missing -w scaleFactorOfSecondFixedSurface!=missing tigge_pf_ecmwf.grib2 out.grib2 +\endverbatim\n +-# It's possible to produce a grib edition 2 file from a grib edition 1 just changing the edition number with grib_set. +At this stage of development all the geography parameters, level and time information is correctly translated, for the product +definition extra set calls must be done. To do this properly, \ref grib_filter is suggested. \n +\verbatim +grib_set -s edition=2 ../data/reduced_gaussian_pressure_level.grib1 +\endverbatim\n +-# With grib edition 2 is possible to compress data using the jpeg algorithm. +To change packing algorithm from grid_simple (simple packing) to grid_jpeg (jpeg2000 packing):\n +\verbatim +>grib_set -s packingType=grid_jpeg ../data/regular_gaussian_model_level.grib2 out.grib2 +\endverbatim\n +-# It's possible to ask grib_api to calculate the number of bits per value needed to pack a given +field with a fixed number of decimal digits of precision. For example if we want to pack a temperature +expressed in Kelvin with 1 digits of precision after the decimal point we can set changeDecimalPrecision=1 \n +\verbatim +>grib_set -s changeDecimalPrecision=1 ../data/regular_latlon_surface.grib2 ../data/out.grib2 +rm -f ../data/out.grib2 | true +./grib_set -s changeDecimalPrecision=1 ../data/regular_latlon_surface.grib2 ../data/out.grib2 +\endverbatim\n +*/ diff --git a/tools/grib_set.sh b/tools/grib_set.sh new file mode 100755 index 000000000..a49008e76 --- /dev/null +++ b/tools/grib_set.sh @@ -0,0 +1,48 @@ +#!/bin/sh +set -e + +echo "-# To set productDefinitionTemplateNumber=2 only for the fields with productDefinitionTemplateNumber=11 \\n +\\verbatim +>grib_set -s productDefinitionTemplateNumber=2 -w productDefinitionTemplateNumber=11 ../data/tigge_pf_ecmwf.grib2 out.grib2 +\\endverbatim\\n" + +echo "-# To set productDefinitionTemplateNumber=2 only for the fields for which productDefinitionTemplateNumber is not equal to 11 \\n +\\verbatim +>grib_set -s productDefinitionTemplateNumber=2 -w productDefinitionTemplateNumber!=11 tigge_pf_ecmwf.grib2 out.grib2 +\\endverbatim\\n" + +echo "-# When a key is not used all the bits of its value should be set to 1 to indicate that it is missing. Since the length + (number of octet) is different from a key to another, the value that we have to code for missing keys is not unique. + To give an easy way to set a key to missing a string \"missing\" or \"MISSING\" is accepted by grib_set as follows:\n +\\verbatim +>grib_set -s scaleFactorOfFirstFixedSurface=missing,scaledValueOfFirstFixedSurface=MISSING ../data/regular_latlon_surface.grib2 out.grib2 +\\endverbatim\\n +Since some values can not be set to missing you can get an error for those keys.\\n" + +echo "-# To set scaleFactorOfSecondFixedSurface to missing only for the fields for which scaleFactorOfSecondFixedSurface is not missing: \\n +\\verbatim +>grib_set -s scaleFactorOfSecondFixedSurface=missing -w scaleFactorOfSecondFixedSurface!=missing tigge_pf_ecmwf.grib2 out.grib2 +\\endverbatim\\n" + +echo "-# It's possible to produce a grib edition 2 file from a grib edition 1 just changing the edition number with grib_set. +At this stage of development all the geography parameters, level and time information is correctly translated, for the product +definition extra set calls must be done. To do this properly, \ref grib_filter is suggested. \\n +\\verbatim +grib_set -s edition=2 ../data/reduced_gaussian_pressure_level.grib1 +\\endverbatim\\n" + +echo "-# With grib edition 2 is possible to compress data using the jpeg algorithm. +To change packing algorithm from grid_simple (simple packing) to grid_jpeg (jpeg2000 packing):\\n +\\verbatim +>grib_set -s packingType=grid_jpeg ../data/regular_gaussian_model_level.grib2 out.grib2 +\\endverbatim\\n" + +echo "-# It's possible to ask grib_api to calculate the number of bits per value needed to pack a given +field with a fixed number of decimal digits of precision. For example if we want to pack a temperature +expressed in Kelvin with 1 digits of precision after the decimal point we can set changeDecimalPrecision=1 \\n +\\verbatim +>grib_set -s changeDecimalPrecision=1 ../data/regular_latlon_surface.grib2 ../data/out.grib2 +rm -f ../data/out.grib2 | true +./grib_set -s changeDecimalPrecision=1 ../data/regular_latlon_surface.grib2 ../data/out.grib2 +\\endverbatim\\n" + diff --git a/tools/grib_split b/tools/grib_split new file mode 100755 index 000000000..1e86d8fda --- /dev/null +++ b/tools/grib_split @@ -0,0 +1,160 @@ +#!/usr/bin/perl +use strict; + +my $debug = 0; +my $total = 0; +my $previous_bitmap; + + +if($ARGV[0] eq "-d") +{ + $debug = 1; + shift @ARGV; +} + +my $out = pop @ARGV; + +unless(@ARGV >= 1 && defined $out) +{ + print STDERR "Usage: $0 [-d] in1 [in2 ...] out\n"; + exit(1); +} + +open(OUT,">$out") || die "$out: $!"; + +foreach my $in ( @ARGV ) +{ + my $gribs = 0; + my $cnt = 0; + open(IN,"<$in") || die "$in: $!"; + + + while(1) + { + + my @sections = (); +# Find header + + print "Looking for GRIB\n" if($debug); + my $grib; + while((read(IN,$grib,4) == 4) && ($grib ne "GRIB")) + { + seek(IN,-3,1); + } + + unless($grib eq "GRIB") + { + print "No more GRIBs\n" if($debug); + last; + } + + my $here = tell(IN); + my $start = $here - 4; + $gribs++; + + print "$grib found at offset $start\n" if($debug); + + my ($reserved,$discipline,$edition); + + die "$in: $!" unless(read(IN,$reserved,2) == 2); + die "$in: $!" unless(read(IN,$discipline,1) == 1); + die "$in: $!" unless(read(IN,$edition,1) == 1); + + my $grib_edition = ord($edition); + die "Un-supported edition $grib_edition" unless($grib_edition == 2); + + + my ($len1,$len2); + die "$in: $!" unless(read(IN,$len1,4) == 4); + die "$in: $!" unless(read(IN,$len2,4) == 4); + + my $msglen1 = unpack("N",$len1); die "GRIB too large" if($msglen1); + my $msglen2 = unpack("N",$len2); + my $msglen = $msglen2; + print "Message length $msglen\n" if($debug); + + while(1) + { + $here = tell(IN); + my ($seclen,$section); + + die "$in: $!" unless(read(IN,$seclen,4) == 4); + + if($seclen eq "7777") + { + print "7777 found at offset $here\n" if($debug); + die "Invalid message lenth $msglen" + unless($here+4-$start == $msglen); + last; + } + + $seclen = unpack("N",$seclen); + die "$in: $!" unless(read(IN,$section,1) == 1); + $section = ord($section); + die "Invalid section number $section" unless ($section >= 1 && $section <=7); + print "Section $section found at offset $here length $seclen\n" if($debug); + seek(IN,-5,1) or die "$in: $!"; + + my $data; + die "$in: $!" unless(read(IN,$data,$seclen) == $seclen); + + + if($section == 6) + { + # Special case for inherited bitmaps + if(unpack('C',substr($data,5,1)) == 254) + { + die "No previous bitmap" unless(defined $previous_bitmap); + $data = $previous_bitmap; + } + else + { + $previous_bitmap = $data; + } + } + + splice(@sections,$section+1); + $sections[$section] = $data; + + + if($section == 7) + { + print OUT "GRIB"; + print OUT $reserved; + print OUT $discipline; + print OUT $edition; + print OUT $len1; + + $len2 = 16 + 4; + for(my $i = 1; $i <= 7 ; $i++) + { + $len2 += length($sections[$i]) + if(defined $sections[$i]); + } + + $cnt++; + print "GRIB $cnt is $len2\n" if($debug); + $len2 = pack("N",$len2); + print OUT $len2; + + for(my $i = 1; $i <= 7 ; $i++) + { + next unless(defined $sections[$i]); + print OUT $sections[$i]; + } + print OUT "7777"; + } + + } + + } + + print "$in: $cnt field(s) found in $gribs GRIB(s)\n"; + $total += $cnt; +} + +close(OUT) or die "$out: $!"; + +print "$out: $total field(s) written\n"; + + diff --git a/tools/grib_to_netcdf.c b/tools/grib_to_netcdf.c new file mode 100644 index 000000000..fe4e2fa7d --- /dev/null +++ b/tools/grib_to_netcdf.c @@ -0,0 +1,3911 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_NETCDF + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "grib_tools.h" + +char* grib_tool_description = "Convert a GRIB file to netCDF format."; +char* grib_tool_name = "grib_to_netcdf"; +char* grib_tool_usage = "[options] grib_file grib_file ... "; + +/*=====================================================================*/ + +static grib_context* ctx = NULL; +static double missing_value = 9999; /* TODO: Get from GRIBs */ + +/*===============================================================================*/ +/* request from mars client */ +/*===============================================================================*/ + +#define NUMBER(x) (sizeof(x)/sizeof(x[0])) + +typedef int boolean; +typedef int err; +typedef off_t file_offset; + +static int false = 0; +static int true = 1; + +static int files = 0; + +struct value { + struct value *next; + char* name; +}; +typedef struct value value; + +struct request { + struct request *next; + struct parameter *params; + char* name; + int order; +}; +typedef struct request request; +/* request part */ +/* language part */ + +struct parameter { + struct parameter *next; + struct value *values; + char* name; + int count; +}; +typedef struct parameter parameter; + +static const char* get_value(const request*, const char* name, int n); +static boolean parsedate(const char *name, long* julian, long *second, boolean* isjul); + +static boolean eq_string(const char *l, const char *r) +{ + if(l && r) + return strcmp(l, r) == 0; + return false; +} + +static boolean eq_integer(const char *l, const char *r) +{ + if(l && r) + return atol(l) == atol(r); + return false; +} + +static boolean eq_null(const char *l, const char *r) +{ + return true; +} + +static boolean eq_coord(const char *l, const char *r) +{ + if(l && r) + return strcmp(l, r) == 0; + return false; +} + +static boolean eq_range(const char *l, const char *r) +{ + if(l && r) + return strcmp(l, r) == 0; + return false; +} + +static boolean eq_date(const char *l, const char *r) +{ + if(l && r) + return strcmp(l, r) == 0; + return false; +} + +static boolean eq_param(const char *l, const char *r) +{ + if(l && r) + return strcmp(l, r) == 0; + return false; +} + +static boolean eq_time(const char *l, const char *r) +{ + if(l && r) + return strcmp(l, r) == 0; + return false; +} + +static value *new_value(const char *name) +{ + value *v = calloc(sizeof(value), 1); + Assert(v); + v->name = grib_context_strdup(ctx, name); + return v; +} + +static parameter *find_parameter(const request *r, const char *parname) +{ + if(!parname) + return 0; + if(r) + { + parameter *p = r->params; + while(p) + { + if(strcmp(p->name, parname) == 0) + return p; + p = p->next; + } + } + return NULL; + +} + +static void _reqmerge(parameter *pa, const parameter *pb, request *a) +{ + const value *vb = pb->values; + + if(strcmp(pa->name, pb->name) != 0) + return; + + while(vb) + { + value *va = pa->values; + value *last = 0; + const char *nb = vb->name; + boolean add = true; + + while(va) + { + if(strcmp(va->name, nb) == 0) + { + add = false; + break; + } + + last = va; + va = va->next; + } + + if(add) + { + value* v = new_value(nb); + if(last) + last->next = v; + else + pa->values = v; + pa->count = 0; + } + + vb = vb->next; + } + +} + +/* Fast version if a && b same */ + +static boolean _reqmerge1(request *a, const request *b) +{ + parameter *pa = a->params; + const parameter *pb = b->params; + + while(pa && pb) + { + if(strcmp(pa->name, pb->name) != 0) + return false; + + _reqmerge(pa, pb, a); + + pa = pa->next; + pb = pb->next; + } + + return (pa == NULL && pb == NULL); +} +static void free_one_value(value *p) +{ + grib_context_free(ctx, p->name); + grib_context_free(ctx, p); +} + +static void free_all_values(value *p) +{ + while(p) + { + value *q = p->next; + free_one_value(p); + p = q; + } +} + +static const char *parse1(const char *p, int* x, int *n) +{ + *x = *n = 0; + while(*p && isdigit(*p)) + { + (*x) *= 10; + (*x) += *p - '0'; + (*n)++; + p++; + } + return p; +} + +static boolean is_number(const char *name) +{ + const char *p = name; + int x, n; + + if(p == 0 || *p == 0) + return false; + + if(*p == '-') + p++; + else if(*p == '+') + p++; + + p = parse1(p, &x, &n); + if(n == 0 && *p != '.') + return false; + + if(*p == '.') + { + p++; + p = parse1(p, &x, &n); + } + + if(*p == 'e' || *p == 'E') + { + p++; + if(*p == '-') + p++; + else if(*p == '+') + p++; + p = parse1(p, &x, &n); + if(n == 0) + return false; + } + + return *p == 0 ? true : false; +} +static parameter *new_parameter(char *name, value *v) +{ + parameter *p = calloc(sizeof(parameter), 1); + Assert(p); + p->name = grib_context_strdup(ctx, name); + p->values = v; + return p; +} + +static void put_value(request *r, const char *parname, const char *valname, boolean append, boolean unique, boolean ascending) +{ + parameter *p; + value *v; + + if(!r) + return; + + if((p = find_parameter(r, parname)) != NULL) + { + if(append) + { + value *a = p->values, *b = NULL, *c = NULL; + while(a) + { + b = a; + if(unique) + { + if(is_number(a->name) && is_number(valname)) + { + if(atof(a->name) == atof(valname)) + return; + } + else if(strcmp(a->name, valname) == 0) + return; + } + + if(ascending) + { + if(is_number(a->name)) + { + if(atof(valname) < atof(a->name)) + break; + } + else if(strcmp(valname, a->name) < 0) + break; + } + c = b; + a = a->next; + } + v = new_value(grib_context_strdup(ctx, valname)); + if(ascending) + { + if(c) + { + if(b && b != c) + v->next = b; + c->next = v; + } + else + { + if(a) + v->next = a; + p->values = v; + } + } + else + { + if(b) + b->next = v; + else + p->values = v; + } + /* p->count++; */ + p->count = 0; + } + else + { + if(p->values) + { + free_all_values(p->values->next); + p->values->next = NULL; + /* p->count = 1; */ + p->count = 0; + if(strcmp(p->values->name, valname) == 0) + return; + else + { + grib_context_free(ctx, p->values->name); + p->values->name = grib_context_strdup(ctx, valname); + } + } + else + { + v = new_value(grib_context_strdup(ctx, valname)); + p->values = v; + /* p->count = 1; */ + p->count = 0; + } + } + } + else + { + parameter *q = NULL; + parameter *s = r->params; + v = new_value(grib_context_strdup(ctx, valname)); + p = new_parameter(grib_context_strdup(ctx, parname), v); + while(s) + { + q = s; + s = s->next; + } + if(q) + q->next = p; + else + r->params = p; + } + +} + +static void add_value(request *r, const char *parname, const char *fmt, ...) +{ + char buffer[1024]; + va_list list; + + va_start(list, fmt); + vsprintf(buffer, fmt, list); + va_end(list); + + put_value(r, parname, buffer, true, false, false); + va_end(list); +} + +static void _reqmerge2(request *a, const request *b) +{ + const parameter *pb = b->params; + + while(pb) + { + parameter* pa = find_parameter(a, pb->name); + + if(pa == NULL) + { + value *v = pb->values; + while(v) + { + put_value(a, pb->name, v->name, true, true, false); + v = v->next; + } + + } + else + { + _reqmerge(pa, pb, a); + } + + pb = pb->next; + } +} + +static void reqmerge(request *a, const request *b) +{ + if(a && b) + { + if(!_reqmerge1(a, b)) + _reqmerge2(a, b); + } +} + +static void save_name(FILE *f, const char* name, int n) +{ + + int i = 0, cnt = 0; + + if(name == NULL) + name = "(null)"; + + cnt = fprintf(f, "%s", name); + + for(i = cnt; i < n; i++) + putc(' ', f); +} + +static void save_one_value(FILE *f, value *r) +{ + save_name(f, r->name, 0); +} + +static void save_all_values(FILE *f, value *r) +{ + while(r) + { + save_one_value(f, r); + if(r->next) + putc('/', f); + r = r->next; + } + +} + +static void save_all_parameters(FILE *f, parameter *r) +{ + while(r) + { + + if(r->values) + { + fprintf(f, ",\n "); + save_name(f, r->name, 10); + fprintf(f, " = "); + save_all_values(f, r->values); + } + + r = r->next; + } + putc('\n', f); +} + +static void save_one_request(FILE *f, const request *r) +{ + if(r) + { + save_name(f, r->name, 0); + save_all_parameters(f, r->params); + putc('\n', f); + } +} + +static void save_all_requests(FILE *f, const request *r) +{ + while(r) + { + save_one_request(f, r); + r = r->next; + } +} + +/* Not used for the moment +static void print_one_request(const request *r) +{ + save_one_request(stdout, r); +} +*/ + +static void print_all_requests(const request *r) +{ + save_all_requests(stdout, r); +} + +static void free_one_parameter(parameter *p) +{ + grib_context_free(ctx, p->name); + free_all_values(p->values); + /*free_all_requests(p->interface);*/ + grib_context_free(ctx, p); +} + +static void free_all_parameters(parameter *p) +{ + while(p) + { + parameter *q = p->next; + free_one_parameter(p); + p = q; + } +} + +static void free_one_request(request *r) +{ + grib_context_free(ctx, r->name); + free_all_parameters(r->params); + grib_context_free(ctx, r); +} + +static void free_all_requests(request *p) +{ + while(p) + { + request *q = p->next; + free_one_request(p); + p = q; + } +} + +static void set_value(request *r, const char *parname, const char *fmt, ...) +{ + char buffer[10240]; + va_list list; + + va_start(list, fmt); + vsprintf(buffer, fmt, list); + va_end(list); + + put_value(r, parname, buffer, false, false, false); +} +static err handle_to_request(request *r, grib_handle* g) +{ + grib_keys_iterator* ks; + char name[80]; + char value[80]; + size_t len = sizeof(value); + int e = 0; + + if(!g) + return -1; + + /* printf("------------\n"); */ + ks = grib_keys_iterator_new(g, GRIB_KEYS_ITERATOR_ALL_KEYS, "mars"); + + while(grib_keys_iterator_next(ks)) + { + + strcpy(name, grib_keys_iterator_get_name(ks)); + + if((e = grib_keys_iterator_get_string(ks, value, &len)) != GRIB_SUCCESS) + grib_context_log(ctx, GRIB_LOG_ERROR, "Cannot get %s as string %d (%s)", name, e, grib_get_error_message(e)); + + set_value(r, name, "%s", value); + len = sizeof(value); + } + + /* + Assert(grib_get_long(g, "validityDate", &l ) == 0); + set_value(r, "validityDate", "%ld", l); + + Assert(grib_get_long(g, "validityTime", &l ) == 0); + set_value(r, "validityTime", "%ld", l); + */ + + len = sizeof(value); + if(grib_get_string(g, "shortName", name, &len) == 0) + { + set_value(r, "param", "%s", name); + } + + len = sizeof(value); + if(grib_get_string(g, "name", name, &len) == 0) + { + if(strcmp(name,"unknown") != 0) + { + set_value(r, "_long_name", "%s", name); + } + } + + len = sizeof(value); + if(grib_get_string(g, "units", name, &len) == 0) + { + if(strcmp(name,"unknown") != 0) + { + set_value(r, "_units", "%s", name); + } + } + + len = sizeof(value); + if(grib_get_string(g, "cfName", name, &len) == 0) + { + if(strcmp(name,"unknown") != 0) + { + set_value(r, "_cf_name", "%s", name); + } + } + + grib_keys_iterator_delete(ks); + return e; +} + +/*===============================================================================*/ +/*===============================================================================*/ + +typedef boolean (*namecmp)(const char *, const char *); + +typedef struct hypercube { + request *cube; + request *r; + request *iterator; + char *set; + int count; + int size; + int max; + int* index_cache; + int index_cache_size; + namecmp *compare; +} hypercube; + +typedef struct axis_t { + const char *name; + namecmp compare; +} axis_t; + +/* This should be c++ ... */ + +typedef enum field_state { + unknown, packed_mem, packed_file, expand_mem +} field_state; + +typedef struct { + int refcnt; + request* r; +} field_request; + +/* One field .. */ + +typedef struct field { + + int refcnt; + + field_state shape; + + grib_handle* handle; + double* values; + size_t value_count; + + /* if on file */ + + file_offset offset; + size_t length; + grib_file *file; + + /* missing fields/values */ + + boolean missing; /* field is missing */ + boolean bitmap; /* field has missing values (= bitmap) */ + + field_request *r; + +} field; + +typedef struct fieldset { + + int refcnt; + + /* if fields */ + + int max; + int count; + + field **fields; + +} fieldset; + +/* + #define MISSING_VALUE(n) ((n) == missing_value) + #define MISSING_FIELD(f) ((f)->missing) + #define FIELD_HAS_BITMAP(f) ((f)->bitmap) + + #define FASTNEW(type) (type*)calloc(sizeof(type),1) + #define grib_context_free(ctx,x) grib_context_free(ctx,x) + */ + +static field *get_field(fieldset *v, int n, field_state shape); +static hypercube *new_hypercube_from_mars_request(const request *r); +static void release_field(field *g); +static int count_axis(const hypercube *h); +static const char* get_axis(const hypercube *h, int pos); +static const char* get_axis(const hypercube *h, int pos); +static int cube_order(const hypercube *h, const request *r); +static void free_hypercube(hypercube *h); +static int _cube_position(const hypercube *h, const request *r, boolean remove_holes); + +static value *clone_one_value(const value *p) +{ + value *q = calloc(sizeof(value), 1); + Assert(q); + q->next = NULL; + q->name = grib_context_strdup(ctx, p->name); + return q; +} + +static value *clone_all_values(const value *p) +{ + if(p) + { + value *q = clone_one_value(p); + q->next = clone_all_values(p->next); + /* q->alias = cone_value(p->alias); */ + return q; + } + return NULL; +} + +static parameter *clone_one_parameter(const parameter *p) +{ + parameter *q = calloc(sizeof(parameter), 1); + Assert(q); + q->next = NULL; + q->name = grib_context_strdup(ctx, p->name); + q->values = clone_all_values(p->values); + return q; +} + +static parameter *clone_all_parameters(const parameter *p) +{ + if(p) + { + parameter *q = clone_one_parameter(p); + q->next = clone_all_parameters(p->next); + return q; + } + return NULL; +} + +static request *clone_one_request(const request *r) +{ + if(r) + { + request *p = calloc(sizeof(request), 1); + Assert(p); + p->name = grib_context_strdup(ctx, r->name); + + p->params = clone_all_parameters(r->params); + p->next = NULL; + return p; + } + return NULL; +} + +static request *new_request(const char *name, parameter *p) +{ + request *r = calloc(sizeof(request), 1); + Assert(r); + r->name = grib_context_strdup(ctx, name); + r->params = p; + return r; +} + +static request *empty_request(const char *name) +{ + return new_request(name ? name : "", NULL); +} + +static field_request* new_field_request(request *r) +{ + field_request* g = grib_context_malloc_clear(ctx, sizeof(field_request)); + g->r = clone_one_request(r); + return g; +} + +static void free_field_request(field_request* g) +{ + if(!g) + return; + g->refcnt--; + if(g->refcnt <= 0) + { + free_all_requests(g->r); + grib_context_free(ctx, g); + } +} + +static void free_field(field *g) +{ + if(!g) + return; + g->refcnt--; + if(g->refcnt <= 0) + { + /*free_gribfile(g->file);*/ + free_field_request(g->r); + if(g->values) + grib_context_free(ctx, g->values); + grib_handle_delete(g->handle); + grib_context_free(ctx, g); + } +} + +static void free_fieldset(fieldset *v) +{ + int i; + if(!v) + return; + v->refcnt--; + if(v->refcnt <= 0) + { + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: free_fieldset (%d fields) : ", v->count); + + for(i = 0; i < v->count; i++) + free_field(v->fields[i]); + + grib_context_free(ctx, v->fields); + grib_context_free(ctx, v); + } +} + +static field *new_field() +{ + return grib_context_malloc_clear(ctx, sizeof(field)); +} + +#define INIT_SIZE 1024 +static void grow_fieldset(fieldset *v, int n) +{ + int i; + int m = v->count; + int x = v->max; + + if(n < v->count) + return; + + v->count = n; + + while(v->count >= v->max) + if(v->max < INIT_SIZE) + v->max = INIT_SIZE; + else + v->max += v->max / 2 + 1; + + if(v->max != x) + { + if(v->fields == NULL) + { + v->fields = (field**) grib_context_malloc(ctx, sizeof(field*) * v->max); + Assert(v->fields); + } + else + { + field** f = (field**) grib_context_malloc(ctx, sizeof(field*) * v->max); + Assert(f); + for(i = 0; i < m; i++) + f[i] = v->fields[i]; + grib_context_free(ctx, v->fields); + v->fields = f; + } + + for(i = m; i < v->max; i++) + v->fields[i] = NULL; + } +} + +static fieldset *new_fieldset(int n) +{ + fieldset *f = calloc(sizeof(fieldset), 1); + Assert(f); + grow_fieldset(f, n); + return f; +} + +static field* read_field(grib_file *file, file_offset pos, long length) +{ + field *g = new_field(); + + g->file = file; + g->offset = pos; + g->length = length; + g->shape = packed_file; + + return g; +} + +static err set_field(fieldset *v, field *g, int pos) +{ + field *h; + + if(pos >= 0) + { + grow_fieldset(v, pos + 1); + h = v->fields[pos]; + v->fields[pos] = g; + g->refcnt++; + if(h) + free_field(h); + } + return 0; +} + +static void count_parval(parameter *p) +{ + int n = 0; + value *v = p->values; + + while(v) + { + n++; + v = v->next; + } + + p->count = n; + +} + +static int count_values(const request *r, const char *parname) +{ + parameter *p = find_parameter(r, parname); + + if(p == NULL) + return 0; + if(p->count) + return p->count; + + count_parval(p); + + return p->count; +} +static const char *get_value(const request *r, const char *parname, int nth) +{ + parameter *p = find_parameter(r, parname); + value *v; + int i = 0; + + if(p == NULL) + return NULL; + + if(!p->count) + count_values(r, parname); + + v = p->values; + + while(v) + { + if(nth == i++) + return v->name; + v = v->next; + } + + return NULL; +} + +static err to_packed_mem(field *g) +{ + + if(g->shape == packed_mem) + return 0; + + if(g->shape == expand_mem) + { + if(g->values) + grib_context_free(ctx, g->values); + g->values = NULL; + g->value_count = 0; + g->shape = packed_mem; + + return 0; + } + + if(g->shape == packed_file) + { + + } + return 0; +} + +static err to_expand_mem(field *g) +{ + err e = 0; + + if(g->shape == expand_mem) + return 0; + + if(g->shape == packed_file) + { + + const void* dummy = NULL; + + grib_file* file = grib_file_open(g->file->name, "r", &e); + if(!file || !file->handle) + { + grib_context_log(ctx, GRIB_LOG_ERROR | GRIB_LOG_PERROR, "%s", g->file->name); + return -1; + } + + fseeko(file->handle, g->offset, SEEK_SET); + + g->handle = grib_handle_new_from_file(ctx, file->handle, &e); + Assert(g->handle); + + if(g->handle) + grib_get_message(g->handle, &dummy, &g->length); + + grib_file_close(file->name, &e); + if(!g->handle) + return -1; + + if(g->values) + grib_context_free(ctx, g->values); + g->values = NULL; + + } + + if(g->values == NULL) + { + size_t count = 0; + long bitmap = 0; + + if((e = grib_get_size(g->handle, "values", &g->value_count))) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get number of values %s", grib_get_error_message(e)); + return e; + } + + count = g->value_count; + + if((e = grib_set_double(g->handle, "missingValue", missing_value))) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot set missingValue %s", grib_get_error_message(e)); + return e; + } + + g->values = (double*) grib_context_malloc(ctx, sizeof(double) * g->value_count); + if((e = grib_get_double_array(g->handle, "values", g->values, &count))) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get decode values %s", grib_get_error_message(e)); + return e; + } + + if(count != g->value_count) + grib_context_log(ctx, GRIB_LOG_FATAL, "grib_api: value count mismatch %d %d", count, g->value_count); + + if((e = grib_get_long(g->handle, "bitmapPresent", &bitmap))) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get bitmapPresent %s", grib_get_error_message(e)); + return e; + } + + g->bitmap = (bitmap != 0); + +#ifdef COMEBACK + set g->missing +#endif + } + + g->shape = expand_mem; + + return e; +} + +static void set_field_state(field *g, field_state shape) +{ + switch(shape) + { + case expand_mem: + to_expand_mem(g); + break; + + case packed_mem: + to_packed_mem(g); + break; + + case packed_file: + release_field(g); + break; + + default: + grib_context_log(ctx, GRIB_LOG_FATAL, "Internal error %s %d", __FILE__, __LINE__); + break; + + } +} + +static field *get_field(fieldset *v, int n, field_state shape) +{ + field *g = v->fields[n]; + set_field_state(g, shape); + return g; +} + +static void release_field(field *g) +{ + if(g->file) + { + if(g->values) + grib_context_free(ctx, g->values); + g->values = NULL; + g->shape = packed_file; + grib_handle_delete(g->handle); + g->handle = NULL; + } +} + +static request* field_to_request(field* f) +{ + if(f->r == 0) + { + field_state state = f->shape; + request *r = empty_request( +#ifdef COMEBACK + ((f->ksec1 == NULL) || (f->ksec1[2] != mars.computeflg)) ? "GRIB" : "COMPUTED"); +#else + "GRIB"); +#endif + + set_field_state(f, packed_mem); + handle_to_request(r, f->handle); + set_field_state(f, state); + + f->r = new_field_request(r); + free_all_requests(r); + } + return f->r->r; +} + +/*===============================================================================*/ +/* hypercube from mars client */ +/*===============================================================================*/ + +static boolean eq_string(const char *, const char *); +static boolean eq_integer(const char *, const char *); +static boolean eq_range(const char *, const char *); +static boolean eq_param(const char *, const char *); +static boolean eq_coord(const char *, const char *); +static boolean eq_date(const char *, const char *); +static boolean eq_time(const char *, const char *); +static boolean eq_null(const char *, const char *); + +static axis_t axis[] = +{ + +/* From dhsbase.c 'check_grib' */ +{ "class", eq_string, }, +{ "type", eq_string, }, +{ "stream", eq_string, }, +{ "levtype", eq_string, }, + +{ "origin", eq_string, }, +{ "product", eq_string, }, +{ "section", eq_string, }, +{ "method", eq_integer, }, +{ "system", eq_integer, }, + +/* testing */ +/* {"repres", eq_null, }, */ + +/* from field order */ +{ "date", eq_date, }, +{ "refdate", eq_date, }, +{ "hdate", eq_date, }, +{ "time", eq_time, }, + +{ "reference", eq_range, }, +{ "step", eq_range, }, +{ "fcmonth", eq_integer, }, +{ "fcperiod", eq_range, }, + +{ "leadtime", eq_range, }, +{ "opttime", eq_range, }, + +{ "expver", eq_string, }, +{ "domain", eq_string, }, + +{ "diagnostic", eq_integer, }, +{ "iteration", eq_integer, }, + +{ "quantile", eq_range, }, +{ "number", eq_integer, }, + +{ "levelist", eq_coord, }, +{ "latitude", eq_coord, }, +{ "longitude", eq_coord, }, +{ "range", eq_range, }, + +{ "param", eq_param, }, + +{ "ident", eq_integer, }, +{ "obstype", eq_integer, }, +{ "instrument", eq_integer, }, + +{ "frequency", eq_integer, }, +{ "direction", eq_integer, }, + +{ "channel", eq_integer, }, }; + +static int axisindex(const char *name) +{ + int i = 0; + for(i = 0; i < NUMBER(axis); i++) + { + if(strcmp(name, axis[i].name) == 0) + return i; + } + return -1; +} + +static namecmp comparator(const char *name) +{ + static char *dontcompare = NULL; + static boolean first = 1; + int i = 0; + + if(first) + { + dontcompare = getenv("MARS_DONT_CHECK"); + first = false; + } + + if(dontcompare != NULL) + { + if(strcmp(dontcompare, name) == 0) + return eq_null; + } + + if((i = axisindex(name)) != -1) + return axis[i].compare; + grib_context_log(ctx, GRIB_LOG_ERROR, "No comparator for %s", name); + return eq_string; +} + +/********************/ +/* index accessors */ +/********************/ + +static int count_index(const hypercube *h) +{ + int i = 0, n = 0; + + for(i = 0; i < h->size; ++i) + n += h->set[i]; + return n; +} + +static int count_holes(const hypercube *h, int cnt) +{ + int i = 0, n = 0; + + for(i = 0; i < cnt; ++i) + n += h->set[i]; + + return (n == cnt) ? 0 : (cnt - n); +} + +static void reset_index(hypercube *h, int v) +{ + memset(h->set, v, h->size); +} + +static void set_index(hypercube *h, int index, int value) +{ + if(index < 0 || index >= h->count) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "Internal error, bad hypercube index %d", index); + exit(1); + } + + if(index >= h->max) + { + int old = h->max; + while(index >= h->max) + h->max += 4096; + + h->set = h->set ? grib_context_realloc(ctx, h->set, h->max) : grib_context_malloc(ctx, h->max); + Assert(h->set); + memset(h->set + old, 0, h->max - old); + } + + if(index >= h->size) + h->size = index + 1; + + h->set[index] = value; +} + +/**************************/ +/* End of index accessors */ +/**************************/ + +/*******************/ +/* axis accessors */ +/*******************/ + +static int count_axis(const hypercube *h) +{ + if(h && h->cube) + return count_values(h->cube, "axis"); + + return -1; +} + +static const char* get_axis(const hypercube *h, int pos) +{ + const char *axis = NULL; + if(pos < count_axis(h)) + { + axis = get_value(h->cube, "axis", pos); + } + return axis; +} + +static void add_axis(hypercube *h, const char *axis) +{ + add_value(h->cube, "axis", "%s", axis); +} + +static void unset_value(request *r, const char *parname) +{ + parameter *p, *q = NULL; + if(!r) + return; + + p = r->params; + while(p) + { + if(strcmp(parname, p->name) == 0) + { + if(q) + q->next = p->next; + else + r->params = p->next; + free_one_parameter(p); + return; + } + q = p; + p = p->next; + } +} + +static void reset_axis(hypercube *h) +{ + unset_value(h->cube, "axis"); +} + +static void valcpy(request *a, request *b, char *aname, char *bname) +{ + parameter *p; + if(a && b && (p = find_parameter(b, bname))) + { + boolean z = false; + value *v = p->values; + while(v) + { + put_value(a, aname, v->name, z, false, false); + z = true; + v = v->next; + } + } +} + +static void cube_values(hypercube *h, const char *p) +{ + valcpy(h->cube, h->r, (char *) p, (char *) p); +} + +static int count_dimensions(const hypercube *, const char *); + +static int set_axis(hypercube *h) +{ + int i = 0; + int count = (h && h->r) ? 1 : -1; + + reset_axis(h); + for(i = (NUMBER(axis) - 1); i >= 0; --i) + { + int n = count_dimensions(h, axis[i].name); + if(n > 1) + { + add_axis(h, axis[i].name); + cube_values(h, axis[i].name); + count *= n; + } + } + + return count; +} + +/*************************/ +/* End of axis accessors */ +/*************************/ + +/*******************/ +/* Cube dimensions */ +/*******************/ + +static int count_dimensions(const hypercube *h, const char *axis) +{ + int dims = -1; + if(h && h->r) + dims = count_values(h->r, axis); + return dims; +} + +/**************************/ +/* End of cube dimensions */ +/**************************/ + +/**************************/ +/* Auxiliary functions */ +/**************************/ + +static int count_hypercube(const request *r) +{ + int i = 0, count = 1; + for(i = 0; i < NUMBER(axis); ++i) + { + int c = count_values(r, axis[i].name); + count *= c ? c : 1; + } + + return count; +} + +static int cube_order(const hypercube *h, const request *r) +{ + return _cube_position(h, r, true); +} + +static int cube_position(const hypercube *h, const request *r) +{ + return _cube_position(h, r, false); +} + +static void reserve_index_cache(hypercube *h, int size) +{ + if(size == 0) + return; + + if(h->index_cache != 0) + grib_context_free(ctx, h->index_cache); + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: Allocating hypercube index_cache: %d entries", size); + h->index_cache = calloc(sizeof(int), size); + Assert(h->index_cache); + h->index_cache_size = size; +} + +static int _cube_position(const hypercube *h, const request *r, boolean remove_holes) +{ + request *cube = h->cube; + int c = count_axis(h); + int index = 0; + int i = 0; + int n = 1; + int ok = 0; + + if(h->index_cache == 0 || h->index_cache_size != c) + reserve_index_cache((hypercube*) h, c); + + for(i = 0; i < c; ++i) + { + const char *axis = get_axis(h, i); + const char *v = get_value(r, axis, 0); + const char *w = NULL; + int dims = count_dimensions(h, axis); + int k = 0; + int count = count_values(cube, axis); + int last = h->index_cache[i]; + + for(k = 0; k < count; k++) + { + int j = (k + last) % count; + w = get_value(cube, axis, j); + if(h->compare ? h->compare[i](w, v) : (strcmp(w, v) == 0)) + { + index += j * n; + n *= dims; + ok++; + ((hypercube*) h)->index_cache[i] = j; + break; + } + else + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: _cube_position, %s, %s != %s [%scompare function available]", axis, w, v, h->compare ? "" : "no "); + } + } + + if(remove_holes) + { + int holes = 0; + if(count_index(h) != h->size) + holes = count_holes(h, index); + index -= holes; + } + + return (ok == c) ? index : -1; +} + +static void cube_indexes(const hypercube *h, request *r, int *indexes, int size) +{ + request *cube = h->cube; + int c = count_axis(h); + int i = 0; + int index = 0; + int n = 1; + int ok = 0; + + if(size < c) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "MARS internal error in cube_indexes. size=%d < axis=%d", size, c); + } + + if(h->index_cache == 0 || h->index_cache_size != c) + reserve_index_cache((hypercube*) h, c); + + for(i = 0; i < c; ++i) + { + const char *axis = get_axis(h, i); + const char *v = get_value(r, axis, 0); + const char *w = NULL; + int dims = count_dimensions(h, axis); + int j = 0; + int k = 0; + int count = count_values(cube, axis); + int last = h->index_cache[i]; + + for(k = 0; k < count; k++) + { + j = (k + last) % count; + w = get_value(cube, axis, j); + if(h->compare ? h->compare[i](w, v) : (w == v)) + { + index += j * n; + n *= dims; + ok++; + ((hypercube*) h)->index_cache[i] = j; + break; + + } + } + indexes[i] = j; + } + +} + +/*********************************/ +/* End of Auxiliary functions */ +/*********************************/ + +static hypercube *new_hypercube(const request *r) +{ + hypercube *h = (hypercube*) calloc(sizeof(hypercube), 1); + int total = 0, count = 0; + int n = 0; + const char *val = 0; + + h->r = clone_one_request(r); + h->cube = empty_request("CUBE"); + + h->count = total = count_hypercube(r); + count = set_axis(h); + + h->compare = 0; + + if((total != count) || (count == 0)) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "Internal error while computing hypercube fields"); + grib_context_log(ctx, GRIB_LOG_ERROR, "Number of fields in request %d", total); + grib_context_log(ctx, GRIB_LOG_ERROR, "Number of fields in hypercube %d", count); + } + set_index(h, count - 1, 1); + memset(h->set, 1, count); + + /* This is expensive, but makes the iterator with only + those parameters found as axis */ + h->iterator = empty_request(0); + for(n = 0; n < NUMBER(axis); ++n) + if((val = get_value(h->r, axis[n].name, 0)) != NULL) + set_value(h->iterator, axis[n].name, val); + + return h; +} + +static void print_hypercube(const hypercube *h) +{ + print_all_requests(h->r); + print_all_requests(h->cube); + grib_context_log(ctx, GRIB_LOG_INFO, "%d active out of %d fields described\n", count_index(h), h->size); +} + +static void free_hypercube(hypercube *h) +{ + free_all_requests(h->r); + free_all_requests(h->cube); + free_all_requests(h->iterator); + grib_context_free(ctx, h->index_cache); + grib_context_free(ctx, h->compare); + grib_context_free(ctx, h->set); + grib_context_free(ctx, h); +} + +struct stuff_1 { + hypercube *c; + request *r; +}; + +static void reqcb_1(const request *r, int count, axis_t *names, char *vals[], void *data) +{ + struct stuff_1 *s = (struct stuff_1*) data; + int i; + + for(i = 0; i < count; i++) + if(vals[i]) + set_value(s->r, names[i].name, vals[i]); + + set_index(s->c, cube_position(s->c, s->r), 1); +} + +typedef void (*loopproc)(const request*, int, axis_t*, char**, void*); + +static void names_loop(const request *r, loopproc proc, void *data); + +static hypercube *new_hypercube_from_mars_request(const request *r) +{ + int i; + int n; + + struct stuff_1 s; + +#if 0 + const request *lang = mars_language_from_request(r); + int count = 0; + + count = init_axis(lang); + grib_context_log(ctx,GRIB_LOG_DEBUG,"cube %s",r->kind); + /* print_all_requests(mars_language_from_request(r)); */ + grib_context_log(ctx,GRIB_LOG_INFO,"NUMBER(axis): %d, number axisnew: %d",NUMBER(axis),count); +#endif + + s.c = new_hypercube(r); + s.r = clone_one_request(r); + + reset_index(s.c, 0); + names_loop(r, reqcb_1, &s); + + free_one_request(s.r); + + /* add single paramters */ + + for(i = 0; i < NUMBER(axis); i++) + { + int m = count_values(r, axis[i].name); + if(m == 1) + { + add_value(s.c->cube, "axis", axis[i].name); + set_value(s.c->cube, axis[i].name, get_value(r, axis[i].name, 0)); + } + } + + n = count_values(s.c->cube, "axis"); + if(n) + s.c->compare = calloc(sizeof(namecmp), n); + + for(i = 0; i < n; i++) + s.c->compare[i] = comparator(get_value(s.c->cube, "axis", i)); + + return s.c; +} + +/* This one doesn't have single parameters in CUBE */ +static hypercube *new_simple_hypercube_from_mars_request(const request *r) +{ + int i; + int n; + + struct stuff_1 s; + s.c = new_hypercube(r); + s.r = clone_one_request(r); + + reset_index(s.c, 0); + + names_loop(r, reqcb_1, &s); + + free_one_request(s.r); + n = count_values(s.c->cube, "axis"); + if(n) + s.c->compare = calloc(sizeof(namecmp), n); + + for(i = 0; i < n; i++) + s.c->compare[i] = comparator(get_value(s.c->cube, "axis", i)); + + return s.c; +} + +/*===========================================================================================*/ + +/*===========================================================================================*/ + +/* Todo: + - BUILD A TEST SUITE !! + - Print usage in log file + - consider FCMONTH and CLimatolofy + - Build logic to create validationtime when only one of DATE or TIME or STEP have multiple values: + for example: date=-1, time=12, step=24/48 + - parametrise the type of data for each axis (function fill_netcdf_dimensions & define_netcdf_dimensions) + Now, all are INT but TIME could be float + - allow user specified scale_factor + - insert 'user input request' + - ORIGIN + - Monthly means seem not to ignore STEP (data server, era40, eg retrieve 39/142) + */ + +typedef struct ncatt { + char name[1024]; + char *long_name; + char *units; + char *short_name; + char *standard_name; + request *metadata; + nc_type nctype; +} ncatt_t; + +typedef struct filter { + fieldset *fset; + hypercube *filter; + int count; + double scale_factor; + double add_offset; + double missing; + boolean bitmap; + ncatt_t att; + request *request; + boolean scale; +} dataset_t; + +typedef struct ncfile { + dataset_t *filters; + int ncid; +} ncfile_t; + +typedef struct ncoptions { + boolean usevalidtime; /* Whether to use valid TIME only or not */ + boolean auto_refdate; /* Automatic Reference Date */ + long refdate; /* Reference date */ + const char *version; + + char *title; + char *history; + char *unlimited; + boolean checkvalidtime; + request *mars_description; + boolean mmeans; /* Whether this dataset is Monthly Means */ + boolean climatology; /* Whether this dataset is climatology */ +} ncoptions_t; + +ncoptions_t setup; + +#define NC_TYPES 7 +struct nc_types_values { + double max; + double min; + double missing; +} nc_type_values[NC_TYPES] = +{ +/* In some occasions, SHRT_MIN-2 for the minimum value, makes ncview display + missing values for -32766, while NC_FILL_SHORT=-32767, and SHRT_MIN=-32768 */ +{ 0, 0, 0 }, /* NC_NAT, 'Not A Type' (c.f. NaN) */ +{ 0x7f, NC_FILL_BYTE +1, NC_FILL_BYTE }, /* NC_BYTE, signed 1 byte integer */ +{ 0xff, NC_FILL_CHAR +1, NC_FILL_CHAR }, /* NC_CHAR, ISO/ASCII character */ +{ 0x7fff, NC_FILL_SHORT+1 , NC_FILL_SHORT }, /* NC_SHORT, signed 2 byte integer */ +{ 0x7ffffff, NC_FILL_INT + 1, NC_FILL_INT }, /* NC_INT, signed 4 byte integer */ +{ FLT_MAX, -FLT_MAX, NC_FILL_FLOAT }, /* NC_FLOAT, single precision floating point number */ +{ DBL_MAX, -DBL_MAX, NC_FILL_DOUBLE }, /* NC_DOUBLE, double precision floating point number */ +}; + +static long fcmonth2days(long date, long months) +{ + long julianfrom = grib_date_to_julian(date); + long years = (long)(months/12); + long leap = (long)(years/4) - (long)(years/100); + long to = years*365 + (months%12)*32 + 1 + leap; /* FCMONTH can't be > 28 */ + long julianto = julianfrom + to; + long days = 0; + + long dd = date % 100; + long dateto = grib_julian_to_date(julianto); + long nextdate = (dateto / 100) * 100 + dd; + + julianto = grib_date_to_julian(nextdate); + days = julianto - julianfrom; + + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: date: %ld + %ld months = %ld days", date, months, days); + + return days; +} + +/* Transform MARS FCMONTHs into number of months from base date. + For example, FCMONTH=1 is current month == 0 */ +static void fcmonth2nbmonths(request *r) +{ + long n = count_values(r, "fcmonth"); + + if(n == 0) + return; + n = atol(get_value(r, "fcmonth", 0)); + set_value(r, "fcmonth", "%ld", n - 1); +} + +static long monthnumber(const char *m) +{ + const char *months[] = + { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" }; + int i = 0; + + while(i < 12) + if(strcmp(m, months[i++]) == 0) + return i; + grib_context_log(ctx, GRIB_LOG_ERROR, "Error. Translation for MONTH='%s' not found", m); + return -1; +} + +/* The argument represents 1 field */ +static void validation_time(request *r) +{ + long date = 0; + long time = 0; + long step = 0; + long fcmonthdays = 0; + long fcmonth = 0; + double v; + long julian = 0; + + long nstep = count_values(r, "step"); + long ndate = count_values(r, "date"); + long ntime = count_values(r, "time"); + long nfcmonth = count_values(r, "fcmonth"); + + static long julianrefdate = 0; + + if(nstep > 1 || ndate > 1 || ntime > 1 || nfcmonth > 1) + { + if(nstep > 1) + grib_context_log(ctx, GRIB_LOG_ERROR, "Internal error. Field has more than 1 STEP"); + if(ntime > 1) + grib_context_log(ctx, GRIB_LOG_ERROR, "Internal error. Field has more than 1 TIME"); + if(ndate > 1) + grib_context_log(ctx, GRIB_LOG_ERROR, "Internal error. Field has more than 1 DATE"); + if(nfcmonth > 1) + grib_context_log(ctx, GRIB_LOG_ERROR, "Internal error. Field has more than 1 FCMONTH"); + print_all_requests(r); + exit(1); + } + + if(nstep) + step = atol(get_value(r, "step", 0)); + + if(ndate) + { + const char* p = get_value(r, "date", 0); + if(is_number(p)) + date = atol(p); + else + { + long julian = 0, second = 0; + boolean isjul; + parsedate(p, &julian, &second, &isjul); + date = grib_julian_to_date(julian); + } + + /* Climatology */ + if(strlen(p) == 3) + { + if(setup.usevalidtime) + grib_context_log(ctx, GRIB_LOG_ERROR, "Climatology data. Setting usevalidtime=OFF"); + setup.auto_refdate = false; + setup.usevalidtime = false; + setup.climatology = true; + } + } + + if(ntime) + time = atol(get_value(r, "time", 0)); + + if(nfcmonth) + { + fcmonth = atol(get_value(r, "fcmonth", 0)); + /* FCMONTH needs base DATE */ + if(date == 0) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "Internal error: FCMONTH needs DATE"); + exit(1); + } + fcmonthdays = fcmonth2days(date, fcmonth); + } + + julian = grib_date_to_julian(date); + v = julian * 24.0 + fcmonthdays * 24.0 + time / 100.0 + step * 1.0; + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: date=%ld, julian=%ld, fcmonthdays=%ld, time=%ld, step=%ld, validation=%ld", date, julian, fcmonthdays, time, step, v); + set_value(r, "_validation", "%g", v); + set_value(r, "_juliandate", "%ld", julian); + + if(!julianrefdate) + julianrefdate = grib_date_to_julian(setup.refdate); + + set_value(r, "_validationtime", "%g", v - julianrefdate * 24.0); + + /* Remove minutes from TIME */ + if(ntime) + set_value(r, "time", "%.1lf", time / 100.0); +} + +static void free_nc_options() +{ + + if(setup.title) + grib_context_free(ctx, setup.title); + if(setup.history) + grib_context_free(ctx, setup.history); + if(setup.unlimited) + grib_context_free(ctx, setup.unlimited); + if(setup.mars_description) + free_all_requests(setup.mars_description); +} + +static void get_nc_options(const request *user_r) +{ + const char *validtime = get_value(user_r, "usevalidtime", 0); + const char *refdate = get_value(user_r, "referencedate", 0); + + const char *title = get_value(user_r, "title", 0); + const char *history = get_value(user_r, "history", 0); + const char *unlimited = get_value(user_r, "unlimited", 0); + + setup.usevalidtime = validtime ? (strcmp(validtime, "true") == 0) : false; + setup.refdate = refdate ? atol(refdate) : 19000101; + setup.auto_refdate = refdate ? (strcmp(get_value(user_r, "referencedate", 0), "AUTOMATIC") == 0) : false; + + setup.title = title ? grib_context_strdup(ctx, (title)) : NULL; + setup.history = history ? grib_context_strdup(ctx, (history)) : NULL; + setup.unlimited = unlimited ? grib_context_strdup(ctx, ((unlimited))) : NULL; + setup.checkvalidtime = getenv("checkvalidtime") ? atol(getenv("checkvalidtime")) : 1; + setup.mars_description = empty_request("MARS"); +} + +static nc_type translate_nctype(const char *name) +{ + + if(!name) + return NC_SHORT; + + if(strcmp(name, "NC_BYTE") == 0) + return NC_BYTE; + + if(strcmp(name, "NC_SHORT") == 0) + return NC_SHORT; + + if(strcmp(name, "NC_INT") == 0) + return NC_INT; + + if(strcmp(name, "NC_FLOAT") == 0) + return NC_FLOAT; + + if(strcmp(name, "NC_DOUBLE") == 0) + return NC_DOUBLE; + + grib_context_log(ctx, GRIB_LOG_ERROR, "Unknown Netcdf type '%s'. Using NC_SHORT"); + return NC_SHORT; +} + +static void check_err(const int stat, const int line, const char *file) +{ + if(stat != NC_NOERR) + { + (void) fprintf(stderr, "line %d of %s: %s\n", line, file, nc_strerror(stat)); + exit(1); + } +} + +#define DIM_ID 1 +static int set_dimension(int ncid, const char *name, int n, int xtype, const char *units, const char *long_name) +{ + + int var_id = 0; + int stat = 0; + int dim_id = DIM_ID; + int dim_vec[DIM_ID]; + + if(setup.unlimited && (strcmp(name, setup.unlimited) == 0)) + n = NC_UNLIMITED; + + stat = nc_def_dim(ncid, name, n, &dim_id); + check_err(stat, __LINE__, __FILE__); + + dim_vec[0] = dim_id; + stat = nc_def_var(ncid, name, (nc_type) xtype, 1, dim_vec, &var_id); + check_err(stat, __LINE__, __FILE__); + + if(units != NULL) + { + stat = nc_put_att_text(ncid, var_id, "units", strlen(units), units); + check_err(stat, __LINE__, __FILE__); + } + + if(long_name != NULL) + { + stat = nc_put_att_text(ncid, var_id, "long_name", strlen(long_name), long_name); + check_err(stat, __LINE__, __FILE__); + } + + return var_id; +} + +static int def_latlon(int ncid, fieldset *fs) +{ + int n = 0; + size_t l = 0; + int var_id = 0; + err e = 0; + + field *g = get_field(fs, 0, expand_mem); + + char grid_type[80]; + size_t size; + size = sizeof(grid_type); + if((e = grib_get_string(g->handle, "typeOfGrid", grid_type, &size)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get typeOfGrid %s", grib_get_error_message(e)); + return e; + } + + if(strcmp(grid_type, "regular_ll") != 0 && (strcmp(grid_type, "regular_gg") != 0) ) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "First GRIB is not on a regular lat/lon grid or on a regular Gaussian grid. Exiting.\n"); + return GRIB_GEOCALCULUS_PROBLEM; + } + + /* Define longitude */ + if((e = grib_get_size(g->handle, "distinctLongitudes", &l)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLongitudes %s", grib_get_error_message(e)); + return e; + } + n = l; + var_id = set_dimension(ncid, "longitude", n, NC_FLOAT, "degrees_east", "longitude"); + + /* Define latitude */ + if((e = grib_get_size(g->handle, "distinctLatitudes", &l)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLatitudes %s", grib_get_error_message(e)); + return e; + } + n = l; + var_id = set_dimension(ncid, "latitude", n, NC_FLOAT, "degrees_north", "latitude"); + + /* g->purge_header = true; */ + release_field(g); + + return e; +} + +static int put_latlon(int ncid, fieldset *fs) +{ + int var_id = 0; + int i = 0; + size_t n = 0; + int stat = 0; + err e = 0; + + field *g = get_field(fs, 0, expand_mem); + + double *dvalues = NULL; + float *fvalues = NULL; + long nv = 0; + + size_t ni; + size_t nj; + +#if 0 + /* Get info in degrees */ + if((e = grib_get_double(g->handle, "iDirectionIncrementInDegrees", &ew_stride)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get iDirectionIncrementInDegrees %s", grib_get_error_message(e)); + return e; + } + + if((e = grib_get_double(g->handle, "jDirectionIncrementInDegrees", &ns_stride)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get jDirectionIncrementInDegrees %s", grib_get_error_message(e)); + return e; + } + + /* Define longitude */ + if((e = grib_get_long(g->handle, "Ni", &ni)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Ni %s", grib_get_error_message(e)); + return e; + } + /* Define latitude */ + if((e = grib_get_long(g->handle, "Nj", &nj)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Nj %s", grib_get_error_message(e)); + return e; + } + +#endif + + if((e = grib_get_size(g->handle, "distinctLatitudes", &nj)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLatitudes %s", grib_get_error_message(e)); + return e; + + } + + if((e = grib_get_size(g->handle, "distinctLongitudes", &ni)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLongitudes %s", grib_get_error_message(e)); + return e; + + } + /* Compute max. # values and allocate */ + nv = ni; + if(nv < nj) + nv = nj; + + fvalues = (float *) grib_context_malloc(ctx, sizeof(float) * nv); + dvalues = (double *) grib_context_malloc(ctx, sizeof(double) * nv); + + /* longitude */ + n = ni; + stat = nc_inq_varid(ncid, "longitude", &var_id); + check_err(stat, __LINE__, __FILE__); + if((e = grib_get_double_array(g->handle, "distinctLongitudes", dvalues, &n)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLongitudes %s", grib_get_error_message(e)); + return e; + } + Assert(n == ni); + + for(i=0; i< n; i++) { fvalues[i] = dvalues[i]; } + + stat = nc_put_var_float(ncid, var_id, fvalues); + check_err(stat, __LINE__, __FILE__); + + /* latitude */ + n = nj; + stat = nc_inq_varid(ncid, "latitude", &var_id); + check_err(stat, __LINE__, __FILE__); + if((e = grib_get_double_array(g->handle, "distinctLatitudes", dvalues, &n)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLatitudes %s", grib_get_error_message(e)); + return e; + } + + Assert(n == nj); + + for(i=0; i< n; i++) { fvalues[i] = dvalues[i]; } + stat = nc_put_var_float(ncid, var_id, fvalues); + check_err(stat, __LINE__, __FILE__); + + /* g->purge_header = true; */ + release_field(g); + grib_context_free(ctx, fvalues); + grib_context_free(ctx, dvalues); + + return e; +} + +static int compute_scale(dataset_t *subset) +{ + double max = -DBL_MAX; + double min = DBL_MAX; + double median = 0; + long i = 0; + long j = 0; + int64_t scaled_max = 0; + int64_t scaled_min = 0; + int64_t scaled_median = 0; + double ao = 0.0, sf = 0.0; + double x; + + char test_scaled_max = 0; + char test_scaled_min = 0; + char test_scaled_median = 0; + + err e = 0; + + fieldset *fs = subset->fset; + int idx = subset->att.nctype; + + for(i = 0; i < fs->count; i++) + { + field *g = get_field(fs, i, expand_mem); + size_t len; + static double *vals = NULL; + static size_t vals_len = 0; + + if((e = grib_get_size(g->handle, "values", &len)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get size of values %s", grib_get_error_message(e)); + return e; + } + + if(len > vals_len) + { + if(vals) + grib_context_free(ctx, vals); + vals = (double*) grib_context_malloc(ctx, sizeof(double) * len); + vals_len = len; + } + if((e = grib_get_double_array(g->handle, "values", vals, &len)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get values %s", grib_get_error_message(e)); + return e; + } + + if(g->bitmap) + { + subset->bitmap = true; + for(j = 0; j < len; ++j) + { + if(vals[j] != (double) missing_value) + { + if(vals[j] > max) + max = vals[j]; + if(vals[j] < min) + min = vals[j]; + } + } + } + else + { + for(j = 0; j < len; ++j) + { + if(vals[j] > max) + max = vals[j]; + if(vals[j] < min) + min = vals[j]; + } + } + /* g->purge_header = true; */ + release_field(g); + } + + median = (max + min) / 2.0; + + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: max_int: %lf, min_int: %lf", nc_type_values[idx].max, nc_type_values[idx].min); + + sf = (double) ((max - min) / (double) (nc_type_values[idx].max - nc_type_values[idx].min)); + ao = ((max + min) - sf * (nc_type_values[idx].min + nc_type_values[idx].max)) / 2; + + if (min == max) { + sf = 1.0; /* Prevent divide by zero later. Constant field grib has max == min */ + } + + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: idx is: %d", idx); + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: max: %lf, min: %lf, median: %lf, scale factor: %lf, add_offset: %lf", max, min, median, sf, ao); + + x = ((median - ao)); + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: x=%lf", x); + x /= sf; + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: x=%lf", x); + + scaled_max = rint((max - ao) / sf); + scaled_min = rint((min - ao) / sf); + scaled_median = rint((median - ao) / sf); + + test_scaled_max = (char) scaled_max; + test_scaled_min = (char) scaled_min; + test_scaled_median = (char) scaled_median; + + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: scaled_max: %lld, scaled_min: %lld, scaled_median: %lld, x: %lf", scaled_max, scaled_min, scaled_median, x); + + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: test_scaled_max: %x, test_scaled_min: %x, test_scaled_median: %x", test_scaled_max, test_scaled_min, test_scaled_median, x); + + max = scaled_max * sf + ao; + min = scaled_min * sf + ao; + median = scaled_median * sf + ao; + + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: max: %lf, min: %lf, median: %lf", max, min, median); + + subset->scale_factor = sf; + subset->add_offset = ao; + + return 0; +} + +static int nc_put_att_type(int ncid, int varid, const char *name, nc_type nctype, int n, double value) +{ + int r = 0; + unsigned char val_uchar = (unsigned char) value; + short int val_short = (short int) value; + int val_int = (int) value; + float val_flt = (float) value; + double val_dbl = (double) value; + + switch(nctype) + { + case NC_BYTE: + r = nc_put_att_uchar(ncid, varid, name, nctype, n, &val_uchar); + break; + case NC_SHORT: + r = nc_put_att_short(ncid, varid, name, nctype, n, &val_short); + break; + case NC_INT: + r = nc_put_att_int(ncid, varid, name, nctype, n, &val_int); + break; + case NC_FLOAT: + r = nc_put_att_float(ncid, varid, name, nctype, n, &val_flt); + break; + case NC_DOUBLE: + r = nc_put_att_double(ncid, varid, name, nctype, n, &val_dbl); + break; + default: + grib_context_log(ctx, GRIB_LOG_ERROR, "nc_put_att_type(...): Unknown netcdf type '%d'", nctype); + break; + } + return r; +} + +static int nc_put_vara_type(int ncid, int varid, const size_t start[], const size_t count[], void *valuesp, nc_type nctype) +{ + int r = 0; + switch(nctype) + { + case NC_BYTE: + r = nc_put_vara_uchar(ncid, varid, start, count, (unsigned char *) valuesp); + break; + case NC_SHORT: + r = nc_put_vara_short(ncid, varid, start, count, (short int *) valuesp); + break; + case NC_INT: + r = nc_put_vara_int(ncid, varid, start, count, (int *) valuesp); + break; + case NC_FLOAT: + r = nc_put_vara_float(ncid, varid, start, count, (float *) valuesp); + break; + case NC_DOUBLE: + r = nc_put_vara_double(ncid, varid, start, count, (double *) valuesp); + break; + default: + grib_context_log(ctx, GRIB_LOG_ERROR, "nc_put_vara_type(...): Unknown netcdf type '%d'", nctype); + break; + } + return r; +} + +static void scale_bitmap(double *vals, long n, void *data, dataset_t *subset) +{ + int i = 0; + nc_type nctype = subset->att.nctype; + + /* + if(!subset->bitmap) + { + grib_context_log(ctx,GRIB_LOG_DEBUG,"No scale of bitmap required"); + return; + } + */ + + switch(nctype) + { + case NC_BYTE: + { + unsigned char *vscaled = (unsigned char *) data; + for(i = 0; i < n; ++i) + if(vals[i] == missing_value) + vscaled[i] = (unsigned char) subset->missing; + break; + } + + case NC_SHORT: + { + short int *vscaled = (short int *) data; + for(i = 0; i < n; ++i) + if(vals[i] == missing_value) + vscaled[i] = (short int) subset->missing; + break; + } + + case NC_INT: + { + int *vscaled = (int *) data; + for(i = 0; i < n; ++i) + if(vals[i] == missing_value) + vscaled[i] = (int) subset->missing; + break; + } + + case NC_FLOAT: + { + float *vscaled = (float *) data; + for(i = 0; i < n; ++i) + if(vals[i] == missing_value) + vscaled[i] = (float) subset->missing; + break; + } + + case NC_DOUBLE: + { + double *vscaled = (double *) data; + for(i = 0; i < n; ++i) + if(vals[i] == missing_value) + vscaled[i] = (double) subset->missing; + break; + } + + default: + grib_context_log(ctx, GRIB_LOG_ERROR, "scale(...): Unknown netcdf type %d", nctype); + break; + } + +} + +static void scale(double *vals, long n, void *data, dataset_t *g) +{ + int i = 0; + nc_type nctype = g->att.nctype; + double scale_factor = g->scale_factor; + double add_offset = g->add_offset; + + /* + if(!subset->scale) + { + grib_context_log(ctx,GRIB_LOG_DEBUG,"No scale required"); + return; + } + */ + + switch(nctype) + { + case NC_BYTE: + { + unsigned char *vscaled = (unsigned char *) data; + for(i = 0; i < n; ++i) + { + if(!g->bitmap || (vals[i] != missing_value)) + { + double d = rint((vals[i] - add_offset) / scale_factor); + Assert(d >= nc_type_values[nctype].min && d <= nc_type_values[nctype].max); + vscaled[i] = d; + } + } + break; + } + + case NC_SHORT: + { + short int *vscaled = (short int *) data; + for(i = 0; i < n; ++i) + { + if(!g->bitmap || (vals[i] != missing_value)) + { + double d = 0; + Assert(scale_factor>0); + d = rint((vals[i] - add_offset) / scale_factor); + Assert(d >= nc_type_values[nctype].min && d <= nc_type_values[nctype].max); + vscaled[i] = d; + } + } + break; + } + + case NC_INT: + { + int *vscaled = (int *) data; + for(i = 0; i < n; ++i) + { + if(!g->bitmap || (vals[i] != missing_value)) + { + double d = rint((vals[i] - add_offset) / scale_factor); + Assert(d >= nc_type_values[nctype].min && d <= nc_type_values[nctype].max); + vscaled[i] = d; + } + } + break; + } + + case NC_FLOAT: + { + float *vscaled = (float *) data; + for(i = 0; i < n; ++i) + { + if(!g->bitmap || (vals[i] != missing_value)) + { + double d = vals[i]; + Assert(d >= nc_type_values[nctype].min && d <= nc_type_values[nctype].max); + vscaled[i] = d; + } + } + break; + } + + case NC_DOUBLE: + { + double *vscaled = (double *) data; + for(i = 0; i < n; ++i) + { + if(!g->bitmap || (vals[i] != missing_value)) + { + double d = vals[i]; + Assert(d >= nc_type_values[nctype].min && d <= nc_type_values[nctype].max); + vscaled[i] = d; + } + } + break; + } + + default: + grib_context_log(ctx, GRIB_LOG_ERROR, "scale(...): Unknown netcdf type %d", nctype); + break; + } +} + +static int put_data(hypercube *h, int ncid, const char *name, dataset_t *subset) +{ + int i = 0; + int stat = 0; + int dataid = 0; + int naxis = count_axis(h); + size_t start[NC_MAX_DIMS]; + size_t count[NC_MAX_DIMS]; + fieldset *fs = subset->fset; + field *f = get_field(fs, 0, expand_mem); + + void *vscaled = NULL; + long vscaled_length = 0; + + long ni; + long nj; + err e = 0; + + /* Define longitude */ + if((e = grib_get_long(f->handle, "Ni", &ni)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Ni %s", grib_get_error_message(e)); + return e; + } + /* Define latitude */ + if((e = grib_get_long(f->handle, "Nj", &nj)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Nj %s", grib_get_error_message(e)); + return e; + } + + /* Start filling dimensions at first value */ + for(i = 0; i < 2 + naxis; ++i) + start[i] = 0; + + /* Count dimensions per axis */ + for(i = 0; i < naxis; ++i) + count[naxis - i - 1] = 1; + + count[naxis] = nj; /* latitude */ + count[naxis + 1] = ni; /* longitude */ + + /* f->purge_header = true; */ + release_field(f); + + stat = nc_inq_varid(ncid, name, &dataid); + check_err(stat, __LINE__, __FILE__); + + for(i = 0; i < fs->count; i++) + { + field *g = get_field(fs, i, expand_mem); + size_t len; + static double *vals = NULL; + static size_t vals_len = 0; + boolean missing = 0; + + request *r; + int j = 0; + int idx[1024]; + int idxsize = 1024; + + if((e = grib_get_size(g->handle, "values", &len)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get size of values %s", grib_get_error_message(e)); + return e; + } + + if(len > vals_len) + { + if(vals) + grib_context_free(ctx, vals); + vals = (double*) grib_context_malloc(ctx, sizeof(double) * len); + vals_len = len; + } + if((e = grib_get_double_array(g->handle, "values", vals, &len)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get values %s", grib_get_error_message(e)); + return e; + } + +#if 0 + boolean missing = (g->ksec4[0] < 0); /* If negative number of values, field is missing */ +#endif + + r = field_to_request(g); + if(!missing) + { + /* Reserved the maximum memory needed */ + /* This should only be done once, as all fields have the same geometry */ + if((vscaled_length == 0) || (vscaled_length < sizeof(double) * len)) + { + if(vscaled) + grib_context_free(ctx, vscaled); + vscaled = (void *) grib_context_malloc(ctx, sizeof(double) * len); + vscaled_length = sizeof(double) * len; + } + + scale(vals, len, vscaled, subset); + if(subset->bitmap) + scale_bitmap(vals, len, vscaled, subset); + + if((e = grib_get_long(g->handle, "Ni", &ni)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Ni %s", grib_get_error_message(e)); + return e; + } + /* Define latitude */ + if((e = grib_get_long(g->handle, "Nj", &nj)) != GRIB_SUCCESS) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Nj %s", grib_get_error_message(e)); + return e; + } + + if(nj != count[naxis] || ni != count[naxis + 1]) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "Grib %d has different resolution\n", i + 1); + grib_context_log(ctx, GRIB_LOG_ERROR, "lat=%d, long=%d instead of lat=%d, long=%d\n", nj, ni, count[naxis], count[naxis + 1]); + exit(1); + } + + cube_indexes(h, r, idx, idxsize); + for(j = 0; j < naxis; ++j) + start[naxis - j - 1] = idx[j]; + + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: Put data from field %d", i); + + stat = nc_put_vara_type(ncid, dataid, start, count, vscaled, subset->att.nctype); + check_err(stat, __LINE__, __FILE__); + } + + /* g->purge_header = true; */ + release_field(g); + } + grib_context_free(ctx, vscaled); + return 0; +} + +static void set_always_a_time(hypercube *h, request *data_r) +{ + if((setup.usevalidtime && count_values(data_r, "time") == 1) || (count_values(data_r, "date") <= 1 && count_values(data_r, "time") <= 1 && count_values(data_r, "step") <= 1)) + { + set_value(h->cube, "time", "%.2lf", atof(get_value(data_r, "_validationtime", 0))); + add_value(h->cube, "axis", "time"); + + { + int i = 0; + int n = count_values(h->cube, "axis"); + if(n) + { + h->compare = calloc(sizeof(namecmp), n); + Assert(h->compare); + } + + for(i = 0; i < n; i++) + h->compare[i] = comparator(get_value(h->cube, "axis", i)); + } + + } +} + +static int define_netcdf_dimensions(hypercube *h, fieldset *fs, int ncid, dataset_t *subsets, int subsetcnt, const request *data_r) +{ + const request *cube = h->cube; + int naxis = count_axis(h); + int i = 0; + int stat = 0; + int n = 0; + int var_id = 0; /* Variable ID */ + int dims[1024]; + err e = GRIB_SUCCESS; + + /* START DEFINITIONS */ + + /* Define latitude/longitude dimensions */ + e = def_latlon(ncid, fs); + if (e != GRIB_SUCCESS) + return e; + + /* Define netcdf dimensions */ + for(i = 0; i < naxis; ++i) + { + int nctype = NC_INT; + const char *axis = get_axis(h, i); + char *units = NULL; + char u[10240]; + const char *lowaxis = (axis); + char *longname = (char *) lowaxis; + n = count_values(cube, axis); + + if(count_values(data_r,"LEVTYPE") > 1) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "Cannot handle fields for different levtypes.\n"); + grib_context_log(ctx, GRIB_LOG_ERROR, "Please split input data into different files. Exiting!\n"); + exit(1); + } + + if(strcmp(axis, "levelist") == 0) + { + const char *levtype = get_value(data_r, "levtype", 0); + if(levtype) + { + if(strcmp("pl", levtype) == 0) + { + units = "millibars"; + longname = "pressure_level"; + } + + if(strcmp("ml", levtype) == 0) + { + longname = "model_level_number"; + } + } + + lowaxis = "level"; + } + + if(strcmp(axis, "number") == 0) + { + longname = "ensemble_member"; + } + + if(strcmp(axis, "date") == 0) + { + sprintf(u, "days since %ld-%02ld-%02ld 00:00:0.0", setup.refdate / 10000, (setup.refdate % 10000) / 100, (setup.refdate % 100)); + units = u; + longname = "Base_date"; + if(setup.climatology) + { + sprintf(u, "months"); + units = u; + } + } + + if(strcmp(axis, "time") == 0) + { + boolean onedtime = (count_values(cube, "date") == 0 && count_values(cube, "step") == 0); + sprintf(u, "hours since 0000-00-00 00:00:0.0"); + longname = "reference_time"; + if(setup.usevalidtime || onedtime) + { + sprintf(u, "hours since %ld-%02ld-%02ld 00:00:0.0", setup.refdate / 10000, (setup.refdate % 10000) / 100, (setup.refdate % 100)); + longname = "time"; + } + if(setup.climatology) + { + sprintf(u, "hours"); + } + units = u; + /* nctype = NC_FLOAT; */ + } + + if(strcmp(axis, "step") == 0) + { + units = "hours"; + longname = "time_step"; + if(count_values(cube, "date") == 0 && count_values(cube, "time") == 0) + { + const char *d = get_value(data_r, "date", 0); + const char *t = get_value(data_r, "time", 0); + long date = d ? atol(d) : 0; + long hour = t ? atol(t) : 0; + long min = t ? 60 * (atof(t) - hour) : 0; + sprintf(u, "hours since %ld-%02ld-%02ld %02ld:%02ld:0.0", date / 10000, (date % 10000) / 100, (date % 100), hour, min); + units = u; + } + } + + if((strcmp(axis, "fcmonth") == 0)) + { + const char *date = get_value(data_r, "date", 0); + char ymd[32] = ""; + + if(date) + { + strncat(ymd, date, 4); + strcat(ymd, "-"); + strncat(ymd, date + 4, 2); + strcat(ymd, "-"); + /* udunits is a bit tricky with month being 30.4 days */ + /* ncview doesn't display properly */ + strcat(ymd, "01"); + } + else + { + sprintf(ymd, "00-00-00"); + } + sprintf(u, "months since %s 00:00:00.0", ymd); + units = u; + longname = "time"; + } + + var_id = set_dimension(ncid, lowaxis, n, nctype, units, longname); + + if(strcmp(axis, "time") == 0) + { + if(setup.usevalidtime) + { + if(setup.mmeans) + { + char *period = "0000-01-00 00:00:00"; + stat = nc_put_att_text(ncid, var_id, "avg_period", strlen(period), period); + check_err(stat, __LINE__, __FILE__); + } + } + } + } + + /* Define data dimension */ + n = 1 + 1 + naxis; /* longitude + latitude + # axis */ + for(i = 0; i < n; ++i) + dims[i] = n - i - 1; + + for(i = 0; i < subsetcnt; ++i) + { + + printf("%s: Defining variable '%s'.\n", grib_tool_name, subsets[i].att.name); + + stat = nc_def_var(ncid, subsets[i].att.name, subsets[i].att.nctype, n, dims, &var_id); + check_err(stat, __LINE__, __FILE__); + + if(subsets[i].scale) + { + compute_scale(&subsets[i]); + stat = nc_put_att_double(ncid, var_id, "scale_factor", NC_DOUBLE, 1, &subsets[i].scale_factor); + check_err(stat, __LINE__, __FILE__); + + stat = nc_put_att_double(ncid, var_id, "add_offset", NC_DOUBLE, 1, &subsets[i].add_offset); + check_err(stat, __LINE__, __FILE__); + } + + stat = nc_put_att_type(ncid, var_id, "_FillValue", subsets[i].att.nctype, 1, nc_type_values[subsets[i].att.nctype].missing); + check_err(stat, __LINE__, __FILE__); + stat = nc_put_att_type(ncid, var_id, "missing_value", subsets[i].att.nctype, 1, nc_type_values[subsets[i].att.nctype].missing); + check_err(stat, __LINE__, __FILE__); + + if(subsets[i].att.units) + { + const char *txt = subsets[i].att.units; + stat = nc_put_att_text(ncid, var_id, "units", strlen(txt), txt); + check_err(stat, __LINE__, __FILE__); + } + + if(subsets[i].att.long_name) + { + const char *txt = subsets[i].att.long_name; + stat = nc_put_att_text(ncid, var_id, "long_name", strlen(txt), txt); + check_err(stat, __LINE__, __FILE__); + } + + if(subsets[i].att.short_name) + { + const char *txt = subsets[i].att.short_name; + stat = nc_put_att_text(ncid, var_id, "short_name", strlen(txt), txt); + check_err(stat, __LINE__, __FILE__); + } + + if(subsets[i].att.standard_name) + { + const char *txt = subsets[i].att.standard_name; + stat = nc_put_att_text(ncid, var_id, "standard_name", strlen(txt), txt); + check_err(stat, __LINE__, __FILE__); + } + +#if 0 + if(subsets[i].att.other) + { + const char *txt = subsets[i].att.long_name; + stat = nc_put_att_text(ncid, var_id, "other",strlen(txt),txt); + check_err(stat,__LINE__,__FILE__); + } +#endif + + if(subsets[i].att.metadata) + { + parameter *p = subsets[i].att.metadata->params; + + while(p) + { + const char *txt = p->values->name; + stat = nc_put_att_text(ncid, var_id, p->name, strlen(txt), txt); + check_err(stat, __LINE__, __FILE__); + + p = p->next; + } + } + + } + + /* Dimension-less variable for MARS request */ + if(0) /* reset when we have proper & fast mars_description */ + { + /* parameter *p = data_r->params; */ + parameter *p = setup.mars_description->params; + stat = nc_def_var(ncid, "MARS", NC_CHAR, 0, 0, &var_id); + check_err(stat, __LINE__, __FILE__); + + /* Store request for those parameters with single value */ + while(p) + { + /* if((p->name[0] != '_') && (p->count == 1)) */ + if(p->name[0] != '_') + { + char par[1024]; + char val[1024000] = ""; + sprintf(par, "%s", (p->name)); +#if 0 + value2string(p->values,val); +#else + sprintf(val, "%s", (p->values->name)); +#endif + stat = nc_put_att_text(ncid, var_id, par, strlen(val), (val)); + if(stat != NC_NOERR) + { + printf("Error setting request for %s = %s\n", par, val); + } + check_err(stat, __LINE__, __FILE__); + } + p = p->next; + } + } + + /* Global attributes */ + { + char timestamp[80]; + time_t now; + /* char *convention = "MARS;CF"; */ + char *convention = "CF-1.0"; + char history[10240]; + /* char *institution = "ECMWF Meteorological Archival and Retrieval System"; */ + + /* Convention */ + stat = nc_put_att_text(ncid, NC_GLOBAL, "Conventions", strlen(convention), convention); + check_err(stat, __LINE__, __FILE__); + + /* Use history provided or Timestamp */ + if(setup.history) + { + sprintf(history, "%s", setup.history); + } + else + { + int major = GRIB_API_MAJOR_VERSION; + int minor = GRIB_API_MINOR_VERSION; + int revision = GRIB_API_REVISION_VERSION; + + time(&now); + strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S GMT", gmtime(&now)); + sprintf(history, "%s by grib_to_netcdf-%d.%d.%d", timestamp, major, minor, revision); + } + stat = nc_put_att_text(ncid, NC_GLOBAL, "history", strlen(history), history); + check_err(stat, __LINE__, __FILE__); + +#if 0 + stat = nc_put_att_text(ncid, NC_GLOBAL, "source",strlen(setup.source),setup.source); + check_err(stat,__LINE__,__FILE__); + + stat = nc_put_att_text(ncid, NC_GLOBAL, "institution",strlen(institution),institution); + check_err(stat,__LINE__,__FILE__); +#endif + + if(setup.title) + { + stat = nc_put_att_text(ncid, NC_GLOBAL, "title", strlen(setup.title), setup.title); + check_err(stat, __LINE__, __FILE__); + } + + } + return e; +} + +static int fill_netcdf_dimensions(hypercube *h, fieldset *fs, int ncid) +{ + const request *cube = h->cube; + int naxis = count_axis(h); + int i = 0; + int var_id = 0; + int stat = 0; + + /* Put latitude/longitude values */ + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: Put latitude/longitude values"); + put_latlon(ncid, fs); + + /* Put netcdf axis values */ + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: Put netcdf axis values"); + for(i = 0; i < naxis; ++i) + { + int j = 0; + const char *axis = get_axis(h, i); + int n = count_values(cube, axis); + int *values = (int *) grib_context_malloc(ctx, sizeof(int) * n); + const char *lowaxis = (axis); + + if(!values) + grib_context_log(ctx, GRIB_LOG_ERROR, "fill_netcdf_dimensions: cannot allocate %ld bytes", sizeof(int) * n); + + if(strcmp("levelist", axis) == 0) + lowaxis = "level"; + + if(strcmp("date", axis) == 0) + { + if(setup.climatology) + for(j = 0; j < n; ++j) + values[j] = monthnumber(get_value(cube, axis, j)); + else + for(j = 0; j < n; ++j) + values[j] = grib_date_to_julian(atol(get_value(cube, axis, j))) - grib_date_to_julian(setup.refdate); + } + else + { + for(j = 0; j < n; ++j) + values[j] = atol(get_value(cube, axis, j)); + } + + stat = nc_inq_varid(ncid, (lowaxis), &var_id); + check_err(stat, __LINE__, __FILE__); + + if(strcmp("time", axis) == 0 && setup.unlimited != NULL && strcmp(setup.unlimited, "time") == 0 && setup.usevalidtime) + { + /* This is tricky. I'm not sure it works when time is not outer dimension */ + size_t start[NC_MAX_DIMS]; + size_t count[NC_MAX_DIMS]; + start[0] = 0; + count[0] = n; + stat = nc_put_vara_type(ncid, var_id, start, count, values, NC_INT); + check_err(stat, __LINE__, __FILE__); + } + else + { + stat = nc_put_var_int(ncid, var_id, values); + check_err(stat, __LINE__, __FILE__); + } + + grib_context_free(ctx, values); + } + + return 0; +} + +static void remove_param(request *r, void *data, const char *p) +{ + request *config = (request *) data; + const char *ignore; + int i = 0; + + while((ignore = get_value(config, p, i++)) != NULL) + unset_value(r, ignore); +} + +#define NO_TABLE -1 +#define NO_PARAM 0 + +static void paramtable(const char *p, long *param, long *table, boolean paramIdMode) +{ + const char *q = p; + int len = strlen(p); + + *param = atol(p); + + while(p && (*p != '.') && ((p - q) < len)) + ++p; + + if((*p == '.')) + *table = atol(++p); + + /* This version is grib_api... It should rely on what grib_api returns, + either param.table or paramId + */ + if(paramIdMode) + { + /* Special case for param=228015 => 15.228 */ + if((*param != NO_PARAM) && (*table == NO_TABLE) && (len == 6)) + { + + char tbl[4]; + char par[4]; + p = q; + strncpy(tbl, p, 3); + tbl[3] = '\0'; + strncpy(par, p + 3, 3); + par[3] = '\0'; + *param = atol(par); + *table = atol(tbl); + + } + } +} + +static void find_nc_attributes(const request *subset_r, const request *user_r, ncatt_t *att, const request *config_r, const request *data_r) +{ + const char *split = NULL; + int j = 0; + boolean set_param_as_name = true; + long datatable = 0; /* = atol(get_value(data_r,"_CODETABLE2",0)); */ + + if(count_values(user_r, "split") == 0) + strcat(att->name, "data"); + + while((split = get_value(user_r, "split", j++)) != NULL) + { + if(strcmp(split, "param") != 0) + { + if(count_values(data_r, split) > 1) + set_param_as_name = false; + } + } + + j = 0; + while((split = get_value(user_r, "split", j++)) != NULL) + { + boolean found = false; + request *cfg = (request *) config_r; + boolean is_param = strcmp(split, "param") == 0; + /* Only use this parameter in the name if there is more + than one value in the original request or if param */ + boolean setname = ((count_values(data_r, split) > 1) || (is_param && set_param_as_name)); + + while(cfg) + { + const char *cfgname = get_value(cfg, "NAME", 0); + const char *cfgval = get_value(cfg, "VALUE", 0); + const char *dataval = NULL; + int i = 0; + + if(strcmp(split, cfgname) == 0) + { + while((dataval = get_value(subset_r, cfgname, i++)) != NULL) + { + const char *tablestr = get_value(cfg, "TABLE2", 0); + long cfgtable = (is_param && tablestr != NULL) ? atol(get_value(cfg, "TABLE2", 0)) : -1; + + long cfgparam = atol(cfgval); + long dataparam = atol(dataval); + paramtable(dataval, &dataparam, &datatable, false); + + /* If it is not param and they're EXACTLY equal or + being param, they're the same parameter and table */ + if((!is_param && (strcmp(dataval, cfgval) == 0)) || (is_param && (dataparam == cfgparam) && (datatable == cfgtable || (datatable == 0 && (cfgtable == 128))))) + { + const char *val = NULL; + const char *metafile = NULL; + + if((val = get_value(cfg, "accuracy", 0)) != NULL) + att->nctype = translate_nctype(val); + att->long_name = grib_context_strdup(ctx, (get_value(cfg, "LONG_NAME", 0))); + att->short_name = grib_context_strdup(ctx, (get_value(cfg, "SHORT_NAME", 0))); + att->units = grib_context_strdup(ctx, (get_value(cfg, "UNITS", 0))); + + /* Check if there is more metadata for this variable */ + if((metafile = get_value(cfg, "METADATA", 0)) != NULL) + { + static const char *metadata_dir = NULL; + char metapath[1024]; + + if(!metadata_dir) + metadata_dir = getenv("METADATA_DIR"); + + sprintf(metapath, "%s/%s", metadata_dir ? metadata_dir : ".", metafile); + att->metadata = 0;/* read_request_file(metapath); */ + + } + + if(setname) + { + const char *pname = get_value(cfg, "DATA", 0); + if(strlen(att->name)) + strcat(att->name, "_"); + strcat(att->name, pname); + } + found = true; + + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: Var. name found: '%s'", att->name); + } + } + } + cfg = cfg->next; + } + + /* We have not found configuration for this attribute */ + if(!found) + { + const char *val = get_value(subset_r, split, 0); + if(val && (setname)) + { + if(strlen(att->name)) + strcat(att->name, "_"); + strcat(att->name, val); + } + } + } + + + if(!isalpha(att->name[0])) + { + char buf[1024]; + sprintf(buf,"v%s",att->name); + strcpy(att->name,buf); + } + + +} + +static request *first; +static request *last; + +static void reqcb(const request *r, int count, axis_t *names, char *vals[], void *data) +{ + request *w = clone_one_request(r); + int i; + /*request **d = (request**)data;*/ + + int *n = (int*) data; + + w->order = (*n)++; + for(i = 0; i < count; i++) + { + + if(vals[i]) + put_value(w, names[i].name, vals[i], false, false, false); + } + + if(first == NULL) + first = w; + else + last->next = w; + last = w; +} + +static boolean chk_152(int count, axis_t *names, char *vals[]) +{ + return true; +} + +static void loop(const request *r, boolean ml, int index, int count, axis_t* strings, char *values[], loopproc callback, void *data) +{ + if(index < count) + { + parameter *p = find_parameter(r, strings[index].name); + + (void) count_values(r, strings[index].name); /* force list expension */ + + if(p) + { + value *v = p->values; + + while(v) + { + values[index] = v->name; + loop(r, ml, index + 1, count, strings, values, callback, data); + v = v->next; + } + } + else + { + values[index] = NULL; + loop(r, ml, index + 1, count, strings, values, callback, data); + } + + } + else if(!ml || chk_152(count, strings, values)) + callback(r, count, strings, values, data); +} + +static void values_loop(const request *r, int count, axis_t *parnames, loopproc callback, void *data) +{ + char **values = (char**) grib_context_malloc(ctx, sizeof(char*) * count); + const char * p = get_value(r, "levtype", 0); + boolean ml = (boolean) (p && (strcmp(p, "ml") == 0)); + + if(ml) + { + p = get_value(r, "expect", 0); + if(p && atol(p) != 0) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "EXPECT provided, special treatment of LNSP"); + grib_context_log(ctx, GRIB_LOG_ERROR, "and other single level parameters disabled"); + ml = false; + } + } + + loop(r, ml, 0, count, parnames, values, callback, data); + + grib_context_free(ctx, values); +} + +static void names_loop(const request *r, loopproc proc, void *data) +{ + values_loop(r, NUMBER(axis), axis, proc, data); +} + +static request *unwind_one_request(const request *r) +{ + + int n = 0; + first = last = NULL; + names_loop(r, reqcb, &n); + return first; +} + +static int split_fieldset(fieldset *fs, request *data_r, dataset_t **subsets, const request *user_r, const request *config_r) +{ + const char *split = NULL; + int count = 1; + int i = 0; + request *s = NULL; + request *u = NULL; + dataset_t *filters = NULL; + nc_type nctype = translate_nctype(get_value(user_r, "accuracy", 0)); + + s = empty_request("filter"); + while((split = get_value(user_r, "split", i++)) != NULL) + { + int cnt = count_values(data_r, split); + if(cnt) + { + count *= count_values(data_r, split); + valcpy(s, data_r, (char *) split, (char *) split); + } + } + + u = unwind_one_request(s); + + free_all_requests(s); + + filters = calloc(sizeof(dataset_t), count); + Assert(filters); + + s = u; + for(i = 0; i < count; ++i) + { + Assert(s); + filters[i].filter = new_hypercube_from_mars_request(s); + filters[i].fset = new_fieldset(1); + filters[i].count = 0; + filters[i].request = clone_one_request(s); + filters[i].bitmap = false; + /* filters[i].mmeans = false; */ + + s = s->next; + } + + for(i = 0; i < fs->count; ++i) + { + boolean ok = false; + field *f = get_field(fs, i, packed_mem); + request *g = field_to_request(f); + int j = 0; + + while(!ok && (j < count)) + { + ok = (cube_order(filters[j].filter, g) != -1); + if(ok) + { + const char *p; + set_field(filters[j].fset, f, filters[j].count++); + filters[j].bitmap |= f->bitmap; + if((p = get_value(f->r->r, "_units", 0)) != NULL) + { + filters[j].att.units = grib_context_strdup(ctx, p); + } + if((p = get_value(f->r->r, "_long_name", 0)) != NULL) + { + filters[j].att.long_name = grib_context_strdup(ctx, p); + } + if((p = get_value(f->r->r, "_cf_name", 0)) != NULL) + { + filters[j].att.standard_name = grib_context_strdup(ctx, p); + } + } + j++; + } + if(!ok) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "Internal error. Lost field %d while splitting fieldset", i); + print_all_requests(g); + grib_context_log(ctx, GRIB_LOG_ERROR, "count is %d", count); + grib_context_log(ctx, GRIB_LOG_ERROR, "First cube is:"); + print_hypercube(filters[0].filter); + exit(1); + } + /* f->purge_header = true; */ + release_field(f); + } + + for(i = 0; i < count; ++i) + { + filters[i].att.nctype = nctype; + filters[i].scale = true; + filters[i].missing = nc_type_values[nctype].missing; + find_nc_attributes(filters[i].request, user_r, &(filters[i].att), config_r, data_r); + grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: filter[%d] found.- Var. name '%s', nctype: %d, found nctype: %d", i, filters[i].att.name, nctype, filters[i].att.nctype); + + if(strlen(filters[i].att.name) == 0) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "Variable name not found"); + exit(1); + } + + /* Check if we need scaling */ + switch(filters[i].att.nctype) + { + case NC_FLOAT: + case NC_DOUBLE: + filters[i].scale = false; + break; + default: + filters[i].scale = true; + break; + } + } + + free_all_requests(u); + *subsets = filters; + return count; +} + +static void free_subsets(dataset_t *subsets, int count) +{ + int i = 0; + + for(i = 0; i < count; ++i) + { + grib_context_free(ctx, subsets[i].att.units); + grib_context_free(ctx, subsets[i].att.long_name); + grib_context_free(ctx, subsets[i].att.short_name); + grib_context_free(ctx, subsets[i].att.standard_name); + free_all_requests(subsets[i].att.metadata); + free_hypercube(subsets[i].filter); + free_fieldset(subsets[i].fset); + free_all_requests(subsets[i].request); + } + grib_context_free(ctx, subsets); + +} + +static boolean parsedate(const char *name, long* julian, long *second, boolean* isjul) +{ + const char *p = name; + int n; + int y = 0, m = 0, d = 0, H = 0, M = 0, S = 0; + + *julian = *second = 0; + *isjul = false; + + if(p == 0 || *p == 0) + return false; + + /* year */ + p = parse1(p, &y, &n); + if(n != 2 && n != 4) + return false; + if(*p++ != '-') + return false; + + /* month */ + p = parse1(p, &m, &n); + if(n == 2) + { + /* day */ + if(*p++ != '-') + return false; + p = parse1(p, &d, &n); + if(n != 2) + return false; + } + else if(n == 3) + { + long j = grib_date_to_julian(y * 10000 + 101) + m - 1; + j = grib_julian_to_date(j); + /* julian day */; + d = j % 100; + m = (j % 10000) / 100; + *isjul = true; + } + else + return false; + + while(*p && isspace(*p)) + p++; + + /* hour */ + + p = parse1(p, &H, &n); + if(n != 0) + { + if(n != 2) + return false; + + /* minute */ + if(*p++ != ':') + return false; + + p = parse1(p, &M, &n); + if(n != 2) + return false; + + if(*p != 0) + { + /* second */ + + if(*p++ != ':') + return false; + p = parse1(p, &S, &n); + if(n != 2) + return false; + } + } + + *julian = grib_date_to_julian(y * 10000 + m * 100 + d); + *second = H * 3600 + M * 60 + S; + + return *p == 0 ? true : false; + +} + +/*=====================================================================*/ + +grib_option grib_options[] = +{ + +{ "I:", "key1,key2,...", "Ignore keys. Default method,type,stream,refdate,hdate\n", 0, 1, "method,type,stream,refdate,hdate" }, +{ "S:", "key1,key2,...", "Split according to keys. Default param,expver\n", 0, 1, "param,expver" }, +{ "R:", "date", "Reference date in the format YYYYMMDD. Default value 19000101.\n", 0, 1, "19000101" }, +{ "D:", "NC_DATATYPE", "Type of data. Possible values NC_BYTE, NC_SHORT, NC_INT, NC_FLOAT, NC_DOUBLE." + "\n\t\tDefault NC_SHORT\n", 0, 1, "NC_SHORT" }, +{ "T", 0, "Don't use time of validity.\n", 0, 1, 0 }, +{ "f", 0, 0, 0, 1, 0 }, +{ "o:", "output file", + "\n\t\tThe name of the netcdf file.\n" + , 1, 1, 0 }, +{ "k:", 0, 0, 0, 1, 0 }, +{ "V", 0, 0, 0, 1, 0 }, +{ "M", 0, 0, 0, 1, 0 } }; + +int grib_options_count = sizeof(grib_options) / sizeof(grib_option); +static fieldset *fs = NULL; +static request* data_r = NULL; +request *user_r = NULL; +int main(int argc, char *argv[]) +{ + int ret = grib_tool(argc, argv); + return ret; +} + +int grib_tool_before_getopt(grib_runtime_options* options) +{ + return 0; +} + +int grib_tool_init(grib_runtime_options* options) +{ + char* p = NULL; + char* list = NULL; + ctx = grib_context_get_default(); + options->onlyfiles = 1; + fs = new_fieldset(0); + data_r = empty_request(0); + + user_r = empty_request(0); + + if(grib_options_on("D:")) + { + set_value(user_r, "accuracy", grib_options_get_option("D:")); + } + else + set_value(user_r, "accuracy", "NC_SHORT"); + + if(grib_options_on("S:")) + { + list = grib_options_get_option("S:"); + p = strtok(list, ","); + set_value(user_r, "split", p); + p = strtok(NULL, ","); + while(p != NULL) + { + add_value(user_r, "split", p); + p = strtok(NULL, ","); + } + } + else + { + set_value(user_r, "split", "param"); + add_value(user_r, "split", "expver"); + } + + if(grib_options_on("T")) + set_value(user_r, "usevalidtime", "false"); + else + set_value(user_r, "usevalidtime", "true"); + + if(grib_options_on("R:")) + { + set_value(user_r, "referencedate", grib_options_get_option("R:")); + } + else + { + set_value(user_r, "referencedate", "19000101"); + } + + get_nc_options(user_r); + + return 0; +} + +int grib_tool_new_filename_action(grib_runtime_options* options, const char* filename) +{ + + char buf[1024] = + { 0, }; + int e = 0; + int i = 0; + + grib_handle* h = NULL; + + grib_file* file = NULL; + + printf("%s: Processing input file '%s'.\n", grib_tool_name, filename); + + file = grib_file_open(filename, "r", &e); + if(!file || !file->handle) + return e; + + fseeko(file->handle, 0, SEEK_SET); + + files++; + + while((h = grib_handle_new_from_file(ctx, file->handle, &e)) != NULL) + { + + long length; + field* g; + request *r; + + /* process only GRIB for the moment*/ + size_t size = sizeof(buf); + Assert(grib_get_string(h, "identifier", buf, &size) == 0); + if(strcmp(buf, "GRIB")) + { + grib_handle_delete(h); + continue; + } + Assert(grib_get_long(h,"totalLength",&length) == 0); + + g = read_field(file, h->offset, length); + + r = empty_request(""); + Assert(handle_to_request(r,h) == 0); + + /* Keep full MARS description */ + /* copy = clone_one_request(r); */ + /* reqmerge(setup.mars_description,copy); */ + /* reqmerge(setup.mars_description,r); */ + + if(i == 1) + { + const char *mmeans = get_value(r, "_MONTHLY_MEANS", 0); + setup.mmeans = mmeans ? (atol(mmeans) == 1) : false; + } + fcmonth2nbmonths(r); + + if(!setup.refdate) + { + if(setup.auto_refdate) + setup.refdate = atol(get_value(r, "date", 0)); + else + { + const char *p = get_value(user_r, "referencedate", 0); + if(is_number(p)) + setup.refdate = atol(p); + else + { + long julian = 0, second = 0; + boolean isjul; + parsedate(p, &julian, &second, &isjul); + setup.refdate = grib_julian_to_date(julian); + } + } + } + + validation_time(r); + if(setup.usevalidtime) + { + unset_value(r, "date"); + unset_value(r, "time"); + unset_value(r, "step"); + unset_value(r, "fcmonth"); + + set_value(r, "time", "%.2lf", atof(get_value(r, "_validationtime", 0))); + } + + g->r = new_field_request(r); + + set_field(fs, g, i++); + + reqmerge(data_r, r); + free_all_requests(r); + + grib_handle_delete(h); + + } + + grib_file_close(file->name, &e); + +#if 0 + *data_r = fieldset_to_mars_request(v); + + if(setup.checkvalidtime) + { + int cnt = request_fields(*data_r); + if(v->count != i || (cnt < i)) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "Wrong number of fields"); + grib_context_log(ctx, GRIB_LOG_ERROR, "File contains %d GRIBs, %d left in internal description, %d in request", i, v->count, cnt); + grib_context_log(ctx, GRIB_LOG_ERROR, "MARS description"); + print_all_requests(setup.mars_description); + grib_context_log(ctx, GRIB_LOG_ERROR, "Internal description"); + print_all_requests(*data_r); + return -1; + } + } + *fs = v; +#endif + return e; +} + +int grib_tool_new_file_action(grib_runtime_options* options, grib_tools_file* file) +{ + return 0; +} + +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) +{ + + return 0; +} + +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) +{ + return 0; +} + +void grib_tool_print_key_values(grib_runtime_options* options, grib_handle* h) +{ +} + +int grib_tool_finalise_action(grib_runtime_options* options) +{ + request *config_r = NULL; + hypercube *dims = NULL; + dataset_t *subsets = NULL; + int count; + int i; + int ncid; + int stat; + int err = 0; + + if(options->outfile==NULL || options->outfile->name==NULL) + { + usage(); + exit(1); + } + + if(fs->count == 0) + { + grib_context_log(ctx, GRIB_LOG_ERROR, "Input does not contain any field. Exiting!"); + return -1; + } + + printf("%s: Found %d GRIB field%s in %d file%s.\n", grib_tool_name, fs->count, fs->count>1?"s":"", files, files > 1 ? "s" : ""); + + /* + grib_context_log(ctx, GRIB_LOG_INFO, "Request representing %d fields ", fs->count); + print_all_requests(data_r); + */ + + /* Split the SOURCE from request into as many datasets as specified */ + count = split_fieldset(fs, data_r, &subsets, user_r, config_r); + remove_param(data_r, (void *) user_r, "ignore"); + remove_param(data_r, (void *) user_r, "split"); + dims = new_simple_hypercube_from_mars_request(data_r); + + /* In case there is only 1 DATE+TIME+STEP, set at least 1 time as axis */ + set_always_a_time(dims, data_r); + + /* Create netcdf file */ + + printf("%s: Creating netcdf file '%s'\n", grib_tool_name, options->outfile->name); + printf("%s: NetCDF library version: %s\n", grib_tool_name, nc_inq_libvers()); + stat = nc_create(options->outfile->name, NC_CLOBBER, &ncid); + check_err(stat, __LINE__, __FILE__); + + /* Define netcdf dataset */ + err = define_netcdf_dimensions(dims, fs, ncid, subsets, count, data_r); + if (err != GRIB_SUCCESS) { + stat = nc_close(ncid); + check_err(stat, __LINE__, __FILE__); + stat = nc_delete(options->outfile->name); + check_err(stat, __LINE__, __FILE__); + + exit(1); + } + + /* End definitions */ + stat = nc_enddef(ncid); + check_err(stat, __LINE__, __FILE__); + + /* Fill dimensions */ + fill_netcdf_dimensions(dims, fs, ncid); + + /* Put data values */ + for(i = 0; i < count; ++i) + { + if(subsets[i].fset) + { + char dataset[100]; + + sprintf(dataset, subsets[i].att.name, i + 1); + put_data(dims, ncid, dataset, &subsets[i]); + } + else + { + grib_context_log(ctx, GRIB_LOG_ERROR, "Fieldset %d is empty!!", i + 1); + } + } + + stat = nc_close(ncid); + check_err(stat, __LINE__, __FILE__); + + free_all_requests(data_r); + free_hypercube(dims); + free_fieldset(fs); + free_subsets(subsets, count); + + free_nc_options(); + printf("%s: Done.\n", grib_tool_name); + + return 0; +} + +#else +#include +#include +int main(int argc, char** argv) +{ + printf("\n"); + printf("grib_to_netcdf:\n"); + printf("\n"); + printf(" GRIB API was not compiled with NETCDF enabled\n"); + printf(" Please rerun configure with --with-netcdf=PATH_TO_NETCDF_INSTALLATION\n"); + printf(" and re-install the software.\n"); + printf("\n"); + exit(1); +} +#endif diff --git a/tools/grib_tools.c b/tools/grib_tools.c new file mode 100644 index 000000000..127884104 --- /dev/null +++ b/tools/grib_tools.c @@ -0,0 +1,945 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +/* + * C Implementation: grib_tools + * + * + * + */ + +#include "grib_tools.h" +#if HAVE_LIBJASPER +#include "jasper/jasper.h" +#endif + +GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) { + if (*a != *b) return 1; + while((*a!=0 && *b!=0) && *(a) == *(b) ) {a++;b++;} + return (*a==0 && *b==0) ? 0 : 1; +} + +static void grib_print_header(grib_runtime_options* options,grib_handle* h); +static void grib_tools_set_print_keys(grib_runtime_options* options,grib_handle* h,const char* ns); +static int grib_tool_with_orderby(grib_runtime_options* options); +static int grib_tool_without_orderby(grib_runtime_options* options); +static int grib_tool_onlyfiles(grib_runtime_options* options); +static int grib_tool_index(grib_runtime_options* options); +static int process(grib_context* c,grib_runtime_options* options,const char* path); +static int scan(grib_context* c,grib_runtime_options* options,const char* dir); + +FILE* dump_file; + +grib_runtime_options options={ + 0, /* verbose */ + 0, /* fail */ + 0, /* skip */ + 12, /* default_print_width */ + 0, /* print_header */ + 0, /* name_space */ + 0, /* print_number */ + 1, /* print_statistics */ + {{0,},}, /* grib_values requested_print_keys[MAX_KEYS] */ + 0, /* requested_print_keys_count */ + {{0,},}, /* grib_values print_keys[MAX_KEYS] */ + 0, /* print_keys_count */ + 0, /* strict */ + 0, /* multi_support */ + 0, /* set_values_count */ + {{0,},}, /* grib_values set_values[MAX_KEYS] */ + {{0,},}, /* grib_values constraints[MAX_KEYS] */ + 0, /* constraints_count */ + {{0,},}, /* grib_values compare[MAX_KEYS] */ + 0, /* compare_count */ + 0, /* handle_count */ + 0, /* filter_handle_count */ + 0, /* file_count */ + 0, /* grib_tools_file infile_extra */ + 0, /* grib_tools_file current_infile */ + 0, /* grib_tools_file infile */ + 0, /*grib_tools_file outfile */ + 0, /* grib_action action */ + 0, /* grib_rule rules */ + 0, /* int dump_flags; */ + 0, /* char* dump_mode; */ + 0, /* repack */ + 0, /* error */ + 0, /* gts */ + 0, /* orderby */ + 0, /* latlon */ + {0,}, + {0,}, + {0,}, + {0,}, + {0,}, + 4, + 0, + -1, + {0,}, + 0, /* index */ + 0, /* index_on */ + 0, /* constant */ + 0, /* dump_filename*/ + 0, /* index */ + 0, /* random */ + 0, /* format */ + 0, /* onlyfiles */ + 0, /* tolerance_count */ + 0, /* through_index */ + 0, /* index1 */ + 0, /* index2 */ + 0, /* context */ + 0, /* stop */ + 0, /* mode */ + 0, /* skip_all */ + {{0,},} /* grib_values tolerance[MAX_KEYS] */ + + }; + +static int is_index_file(const char* filename) { + FILE* fh; + char buf[8]={0,}; + char* str="GRBIDX"; + int ret=0; + + fh=fopen(filename,"r"); + if (!fh) return 0; + + fread(buf,1,1,fh); + fread(buf,6,1,fh); + + ret=!strcmp(buf,str); + + fclose(fh); + + return ret; +} + +static grib_handle* grib_handle_new_from_file_x(grib_context* c,FILE* f,int mode,int *err) { + if (mode==MODE_HEADERS_ONLY) + return grib_handle_headers_only_new_from_file(c,f,err); + if (mode==MODE_GTS) + return grib_gts_handle_new_from_file(c,f,err); + if (mode==MODE_BUFR) + return grib_bufr_handle_new_from_file(c,f,err); + + return grib_handle_new_from_file(c,f,err); +} + +int grib_tool(int argc, char **argv) +{ + int ret=0; + grib_context* c=grib_context_get_default(); + options.context=c; + + if (getenv("DOXYGEN_USAGE") && argc==1 ) usage_doxygen(); + + grib_get_runtime_options(argc,argv,&options); + + grib_tool_before_getopt(&options); + + grib_process_runtime_options(c,argc,argv,&options); + + grib_tool_init(&options); + if (options.dump_filename) { + dump_file= fopen(options.dump_filename,"w"); + if(!dump_file) { + perror(options.dump_filename); + exit(1); + } + } else { + dump_file=stdout; + } + + if (is_index_file(options.infile->name) && + ( options.infile_extra && is_index_file(options.infile_extra->name))) { + options.through_index=1; + return grib_tool_index(&options); + } + + if (options.onlyfiles) + ret=grib_tool_onlyfiles(&options); + else { + if (options.orderby) + ret=grib_tool_with_orderby(&options); + else + ret=grib_tool_without_orderby(&options); + } + + if (options.dump_filename) fclose(dump_file); + return ret; + +} + +static int grib_tool_with_orderby(grib_runtime_options* options) { + int err=0; + grib_failed *failed=NULL,*p=NULL; + grib_handle* h=NULL; + grib_context* c=NULL; + grib_tools_file* infile=NULL; + char** filenames; + size_t files_count=0; + grib_fieldset* set=NULL; + int i=0; + c=grib_context_get_default(); + + infile=options->infile; + if(infile) infile->failed=NULL; + + files_count=0; + while(infile) {files_count++;infile=infile->next;} + + filenames=(char**)grib_context_malloc_clear(c,files_count*sizeof(char*)); + + infile=options->infile; + for (i=0;iname;infile=infile->next;} + + if (grib_options_on("7")) c->no_fail_on_wrong_length=1; + + set=grib_fieldset_new_from_files(0,filenames,files_count,0,0,0,options->orderby,&err); + if (err) { + grib_context_log(c,GRIB_LOG_FATAL,"unable to create index for input file %s (%s)", + filenames[0],grib_get_error_message(err)); + exit(err); + } + + options->handle_count=0; + while(!options->skip_all && ((h = grib_fieldset_next_handle(set,&err)) + != NULL || err != GRIB_SUCCESS )) { + options->handle_count++; + options->error=err; + + if (!h) { + fprintf(dump_file,"\t\t*** unable to read message ***\n"); + if (options->fail || err==GRIB_WRONG_LENGTH) GRIB_CHECK_NOLINE(err,0); + + failed=(grib_failed*)grib_context_malloc_clear(c,sizeof(grib_failed)); + failed->count=infile->handle_count; + failed->error=err; + failed->next=NULL; + + if (!infile->failed) { + infile->failed=failed; + } else { + p=infile->failed; + while (p->next) p=p->next; + p->next=failed; + } + + continue; + } + + grib_print_header(options,h); + + grib_skip_check(options,h); + + if (options->skip && options->strict) { + grib_tool_skip_handle(options,h); + continue; + } + + grib_tool_new_handle_action(options,h); + + grib_tool_print_key_values(options,h); + + grib_handle_delete(h); + + } + + + grib_tool_finalise_action(options); + + return 0; +} + +char iobuf[1024*1024]; + +static int grib_tool_without_orderby(grib_runtime_options* options) { + int err=0; + grib_failed *failed=NULL,*p=NULL; + grib_handle* h=NULL; + grib_context* c=NULL; + grib_tools_file* infile=NULL; + + c=grib_context_get_default(); + options->file_count=0; + options->handle_count=0; + options->filter_handle_count=0; + options->current_infile=options->infile; + infile=options->infile; + infile->failed=NULL; + + if (grib_options_on("7")) c->no_fail_on_wrong_length=1; + + while (infile!=NULL && infile->name!=NULL) { + + if (options->print_statistics && options->verbose) fprintf(dump_file,"%s\n",infile->name); + infile->file = fopen(infile->name,"r"); + if(!infile->file) { + perror(infile->name); + exit(1); + } + + setvbuf(infile->file,iobuf,_IOFBF,sizeof(iobuf)); + + + options->file_count++; + infile->handle_count=0; + infile->filter_handle_count=0; + + grib_tool_new_file_action(options,infile); + + + while(!options->skip_all && ((h = grib_handle_new_from_file_x(c,infile->file,options->mode,&err)) + != NULL || err != GRIB_SUCCESS ) ) { + infile->handle_count++; + options->handle_count++; + options->error=err; + + if (!h) { + fprintf(dump_file,"\t\t*** unreadable message ***\n"); + if (options->fail ) GRIB_CHECK_NOLINE(err,0); + + failed=(grib_failed*)grib_context_malloc_clear(c,sizeof(grib_failed)); + failed->count=infile->handle_count; + failed->error=err; + failed->next=NULL; + + if (!infile->failed) { + infile->failed=failed; + } else { + p=infile->failed; + while (p->next) p=p->next; + p->next=failed; + } + + continue; + } + + grib_print_header(options,h); + + grib_skip_check(options,h); + + if (options->skip && options->strict) { + grib_tool_skip_handle(options,h); + continue; + } + + grib_tool_new_handle_action(options,h); + + grib_print_key_values(options,h); + + grib_handle_delete(h); + + } + + grib_print_file_statistics(options,infile); + + if (infile->file) fclose(infile->file); + + if (infile->handle_count==0) { + fprintf(dump_file,"no grib messages found in %s\n", infile->name); + if (options->fail) exit(1); + } + + infile=infile->next; + options->current_infile=infile; + + } + + grib_print_full_statistics(options); + + grib_tool_finalise_action(options); + + return 0; +} + +static int navigate(grib_field_tree* fields,grib_runtime_options* options) { + int err=0; + if (!fields || options->stop) return 0; + + if (fields->field) { + grib_handle* h=grib_index_get_handle(fields->field,&err); + if (!options->index2->current) + options->index2->current=grib_context_malloc_clear(options->context,sizeof(grib_field_list)); + options->index2->current->field=fields->field; + if (!h) return err; + grib_skip_check(options,h); + if (options->skip && options->strict) { + grib_tool_skip_handle(options,h); + } else { + grib_tool_new_handle_action(options,h); + grib_handle_delete(h); + } + } + + err=navigate(fields->next_level,options); + if (err) return err; + + err=navigate(fields->next,options); + + return err; +} + + +static int grib_tool_index(grib_runtime_options* options) { + int err=0; + grib_context* c=NULL; + char* f1=options->infile->name; + char* f2=options->infile_extra->name; + grib_index_key *k1,*k2; + int found=0; + + c=grib_context_get_default(); + + options->index1=grib_index_read(c,f1,&err); + if (err) + grib_context_log(c,(GRIB_LOG_FATAL) | (GRIB_LOG_PERROR) , + "unable to read index from %s",f1); + + options->index2=grib_index_read(c,f2,&err); + if (err) + grib_context_log(c,(GRIB_LOG_FATAL) | (GRIB_LOG_PERROR) , + "unable to read index from %s",f2); + + k1=options->index1->keys; + while ( k1 ) { + k2=options->index2->keys; + found=0; + while (k2) { + if ( !strcmp(k1->name,k2->name) ) { + found=1; + break; + } + k2=k2->next; + } + if (!found) { + printf("Indexes contained in the input files have different keys\n"); + printf("keys in file %s:\n",f1); + k1=options->index1->keys; + while (k1) { + printf("\t%s\n",k1->name); + k1=k1->next; + } + printf("keys in file %s:\n",f2); + k2=options->index2->keys; + while (k2) { + printf("\t%s\n",k2->name); + k2=k2->next; + } + + exit(1); + + } + + k1->value[0]=0; + k1=k1->next; + } + + k2=options->index2->keys; + while ( k2 ) { + k1=options->index1->keys; + found=0; + while (k1) { + if ( !strcmp(k1->name,k2->name) ) { + found=1; + break; + } + k1=k1->next; + } + if (!found) { + printf("Indexes contained in the input files have different keys\n"); + printf("keys in file %s:\n",f2); + k2=options->index2->keys; + while (k2) { + printf("\t%s\n",k2->name); + k2=k2->next; + } + printf("keys in file %s:\n",f1); + k1=options->index1->keys; + while (k1) { + printf("\t%s\n",k1->name); + k1=k1->next; + } + + exit(1); + + } + + k2=k2->next; + } + + navigate(options->index2->fields,options); + + grib_tool_finalise_action(options); + + return 0; +} + +static int scan(grib_context* c,grib_runtime_options* options,const char* dir) { + struct dirent *s; + DIR *d; + int err=0; + + d= opendir(dir); + if (!d) { + grib_context_log(c,(GRIB_LOG_ERROR) | (GRIB_LOG_PERROR) , "opendir %s",dir); + return GRIB_IO_PROBLEM; + } + + while ((s=readdir(d)) && (err==0)) { + if(strcmp(s->d_name,".") != 0 && strcmp(s->d_name,"..") != 0) { + char buf[1024]; + sprintf(buf,"%s/%s",dir,s->d_name); + process(c,options,buf); + } + } + return 0; +} + + +static int process(grib_context* c,grib_runtime_options* options,const char* path) { + struct stat s; + int err=0; + int ioerr=0; + if ( (err = lstat(path,&s)) ) { + ioerr=errno; + grib_context_log(c,(GRIB_LOG_ERROR) | (GRIB_LOG_PERROR),"Cannot stat %s",path); + return GRIB_IO_PROBLEM; + } + + if (S_ISDIR(s.st_mode) && !S_ISLNK(s.st_mode)) { + scan(c,options,path); + } else { + grib_tool_new_filename_action(options,path); + } + return 0; + +} + +static int grib_tool_onlyfiles(grib_runtime_options* options) { + grib_context* c=NULL; + grib_tools_file* infile=NULL; + + c=grib_context_get_default(); + infile=options->infile; + + while (infile!=NULL && infile->name!=NULL) { + + process(c,options,infile->name); + + infile=infile->next; + } + + grib_tool_finalise_action(options); + + return 0; +} + +static void grib_print_header(grib_runtime_options* options,grib_handle* h) { + + size_t strlenkey=0; + int width; + int written_to_dump = 0; /* boolean */ + if (!options->print_keys || options->handle_count!=1) + return; + + grib_tools_set_print_keys(options,h,options->name_space); + + if (options->print_keys + && options->verbose + && options->print_header) { + int j=0; + for (j=0;jprint_keys_count;j++) { + strlenkey=strlen(options->print_keys[j].name); + width= strlenkey < options->default_print_width ? + options->default_print_width+2 : strlenkey+2; + if (options->default_print_width < 0) + width=strlenkey+1; + + fprintf(dump_file,"%-*s",(int)width,options->print_keys[j].name); + written_to_dump = 1; + } + if (options->latlon) { + if (options->latlon_mode==4) { + fprintf(dump_file," value1 "); + fprintf(dump_file," value2 "); + fprintf(dump_file," value3 "); + fprintf(dump_file," value4 "); + } else { + fprintf(dump_file," value "); + } + written_to_dump = 1; + } + if (options->index_on) { + fprintf(dump_file," value(%d) ",(int)options->index); + written_to_dump = 1; + } + if (written_to_dump) { + fprintf(dump_file,"\n"); + } + } +} + + +static void grib_tools_set_print_keys(grib_runtime_options* options, grib_handle* h, const char* ns) { + int i=0; + grib_keys_iterator* kiter=NULL; + + options->print_keys_count=0; + + for (i=0;irequested_print_keys_count;i++) { + options->print_keys[options->print_keys_count].name=options->requested_print_keys[i].name; + if (strlen(options->requested_print_keys[i].name)>options->default_print_width) + options->default_print_width=strlen(options->requested_print_keys[i].name); + options->print_keys[options->print_keys_count].type=options->requested_print_keys[i].type; + options->print_keys_count++; + } + + if (ns) { + kiter=grib_keys_iterator_new(h,0,(char*)ns); + if (!kiter) { + fprintf(dump_file,"ERROR: Unable to create keys iterator\n"); + exit(1); + } + + while(grib_keys_iterator_next(kiter)) + { + const char* name = grib_keys_iterator_get_name(kiter); + + if (options->print_keys_count >= MAX_KEYS ) { + fprintf(stderr,"ERROR: keys list too long (more than %d keys)\n", + options->print_keys_count); + exit(1); + } + options->print_keys[options->print_keys_count].name=strdup(name); + if (strlen(name)>options->default_print_width) + options->default_print_width=strlen(name); + options->print_keys[options->print_keys_count].type=GRIB_TYPE_STRING; + options->print_keys_count++; + } + + grib_keys_iterator_delete(kiter); + if (options->print_keys_count==0 && options->latlon == 0 ) { + printf("ERROR: namespace \"%s\" does not contain any key\n",ns); + exit(1); + } + + } + +} + +static int to_skip(grib_handle* h,grib_values* v,int *err) { + double dvalue=0; + int ret=0; + long lvalue=0; + char value[MAX_STRING_LEN]={0,}; + size_t len=MAX_STRING_LEN; + *err=0; + + switch (v->type) { + case GRIB_TYPE_STRING: + *err=grib_get_string( h,v->name,value,&len); + ret = v->equal ? grib_inline_strcmp(value,v->string_value) : !grib_inline_strcmp(value,v->string_value); + break; + case GRIB_TYPE_DOUBLE: + *err=grib_get_double( h,v->name,&dvalue); + ret = v->equal ? (dvalue != v->double_value) : (dvalue == v->double_value); + break; + case GRIB_TYPE_LONG: + *err=grib_get_long( h,v->name,&lvalue); + ret = v->equal ? (lvalue != v->long_value) : (lvalue == v->long_value); + break; + case GRIB_TYPE_MISSING: + lvalue=grib_is_missing( h,v->name,err); + ret = (lvalue == v->equal) ? 0 : 1; + break; + default: + fprintf(dump_file,"invalid type for %s\n",v->name); + exit(1); + + } + + return ret; +} + +void grib_skip_check(grib_runtime_options* options,grib_handle* h) { + int i,ret=0; + grib_values* v=NULL; + for (i=0;i < options->constraints_count ;i++) { + v=&(options->constraints[i]); + if (v->equal) { + options->skip=1; + while (v) { + if (!to_skip(h,v,&ret)) { + if (!strcmp(v->name,"count") && !v->next) + options->skip_all=1; + options->skip=0; + break; + } + if (ret != GRIB_SUCCESS && options->fail) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to get \"%s\" (%s)", + v->name,grib_get_error_message(ret)); + exit(ret); + } + v=v->next; + } + } else { + options->skip=0; + while (v) { + if (to_skip(h,v,&ret)) { + options->skip=1; + break; + } + if (ret != GRIB_SUCCESS && options->fail) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to get \"%s\" (%s)", + v->name,grib_get_error_message(ret)); + exit(ret); + } + v=v->next; + } + } + if (options->skip==1) + break; + } + + if (!options->skip) { + options->filter_handle_count++; + if (options->current_infile) + options->current_infile->filter_handle_count++; + } +} + +void grib_print_key_values(grib_runtime_options* options,grib_handle* h) { + int i=0; + int ret=0,width=0; + int strlenvalue=0; + double dvalue=0; + long lvalue=0; + char value[MAX_STRING_LEN]; + char* notfound="not_found"; + int written_to_dump = 0; /* boolean */ + + if (!options->verbose) return; + + for (i=0;iprint_keys_count;i++) { + size_t len=MAX_STRING_LEN; + ret=GRIB_SUCCESS; + + if (grib_is_missing(h,options->print_keys[i].name,&ret) && ret==GRIB_SUCCESS) + sprintf(value,"MISSING"); + else if ( ret == GRIB_SUCCESS ) { + if (options->print_keys[i].type == GRIB_TYPE_UNDEFINED) + grib_get_native_type(h,options->print_keys[i].name,&(options->print_keys[i].type)); + switch (options->print_keys[i].type) { + case GRIB_TYPE_STRING: + ret=grib_get_string( h,options->print_keys[i].name,value,&len); + break; + case GRIB_TYPE_DOUBLE: + ret=grib_get_double( h,options->print_keys[i].name,&dvalue); + sprintf(value,options->format,dvalue); + break; + case GRIB_TYPE_LONG: + ret=grib_get_long( h,options->print_keys[i].name,&lvalue); + sprintf(value,"%d",(int)lvalue); + break; + default: + fprintf(dump_file,"invalid format option for %s\n",options->print_keys[i].name); + exit(1); + } + } + if (ret != GRIB_SUCCESS) { + if (options->fail) GRIB_CHECK_NOLINE(ret,options->print_keys[i].name); + if (ret == GRIB_NOT_FOUND) strcpy(value,notfound); + else { + fprintf(dump_file,"%s %s\n",grib_get_error_message(ret),options->print_keys[i].name); + exit(ret); + } + } + + strlenvalue = strlen(value); + + width = strlenvalue < options->default_print_width ? + options->default_print_width + 2 : + strlenvalue + 2; + + if (options->default_print_width < 0) width = strlenvalue + 1; + + if (options->print_keys_count==i+1 && options->latlon==0) width--; + + fprintf(dump_file,"%-*s",(int)width,value); + written_to_dump = 1; + } + + if (options->latlon) { + + if (options->latlon_mode==4){ + int i=0; + for (i=0;i<4;i++) { + fprintf(dump_file,options->format,options->values[i]); + fprintf(dump_file," "); + } + written_to_dump=1; + } else if (options->latlon_mode==1) { + sprintf(value,options->format,options->values[options->latlon_idx]); + strlenvalue = strlen(value); + width = strlenvalue < options->default_print_width ? + options->default_print_width + 2 : + strlenvalue + 2; + fprintf(dump_file,"%-*s",(int)width,value); + written_to_dump=1; + } + } + if (options->index_on) { + double v=0; + /*if (grib_get_double_element(h,"values",options->index,&v) != GRIB_SUCCESS) {*/ + if (1) { + size_t size; + double* values; + int err=0; + + err=grib_get_size(h,"values",&size); + if (err) { + sprintf(value,"unknown"); + if (!options->fail) exit(err); + return; + } + values=grib_context_malloc_clear(h->context,size*sizeof(double)); + grib_get_double_array(h,"values",values,&size); + v=values[options->index]; + grib_context_free(h->context,values); + } + + sprintf(value,options->format,v); + strlenvalue = strlen(value); + width = strlenvalue < options->default_print_width ? + options->default_print_width + 2 : + strlenvalue + 2; + fprintf(dump_file,"%-*s",(int)width,value); + written_to_dump=1; + } + if (written_to_dump) { + fprintf(dump_file,"\n"); + } + +} + + +void grib_print_file_statistics(grib_runtime_options* options,grib_tools_file* file) { + grib_failed* failed=NULL; + + Assert(file); + + failed=file->failed; + + if (!options->print_statistics || !options->verbose) return; + + fprintf(dump_file,"%d of %d grib messages in %s\n\n", + file->filter_handle_count, + file->handle_count, + file->name); + if (!failed) return; + /* + fprintf(dump_file,"Following bad grib messages found in %s\n", + file->name); + fprintf(dump_file,"N Error\n"); + while (failed){ + fprintf(dump_file,"%-*d %s\n", + 7,failed->count, + grib_get_error_message(failed->error)); + failed=failed->next; + } + fprintf(dump_file,"\n"); + */ +} + + void grib_print_full_statistics(grib_runtime_options* options) { + if (options->print_statistics && options->verbose) + fprintf(dump_file,"%d of %d total grib messages in %d files\n", + options->filter_handle_count,options->handle_count,options->file_count); + } + +void grib_tools_write_message(grib_runtime_options* options, grib_handle* h) { + const void *buffer; size_t size; + grib_file* of=NULL; + int err=0; + int ioerr=0; + char filename[1024]={0,}; + Assert(options->outfile!=NULL && options->outfile->name!=NULL); + + if (options->error == GRIB_WRONG_LENGTH) return; + + if ((err=grib_get_message(h,&buffer,&size))!= GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to get binary message\n"); + exit(err); + } + + err = grib_recompose_name(h,NULL,options->outfile->name,filename,0); + + of=grib_file_open(filename,"w",&err); + + if (!of || !of->handle) { + ioerr=errno; + grib_context_log(h->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "unable to open file %s\n",filename); + exit(GRIB_IO_PROBLEM); + } + + if (options->gts && h->gts_header) + fwrite(h->gts_header,1,h->gts_header_len,of->handle); + + if(fwrite(buffer,1,size,of->handle) != size) { + ioerr=errno; + grib_context_log(h->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR), + "Error writing to %s",filename); + exit(GRIB_IO_PROBLEM); + } + + if (options->gts && h->gts_header) { + char gts_trailer[4]={'\x0D','\x0D','\x0A','\x03'}; + fwrite(gts_trailer,1,4,of->handle); + } + + grib_file_close(filename,&err); + + if (err != GRIB_SUCCESS) { + grib_context_log(h->context,GRIB_LOG_ERROR,"unable to write message\n"); + exit(err); + } + + options->outfile->file=NULL; + +#if 0 + if (!options->outfile->file) { + options->outfile->file = fopen(options->outfile->name,"w"); + if(!options->outfile->file) { + perror(options->outfile->name); + exit(1); + } + } + GRIB_CHECK_NOLINE(grib_get_message(h,&buffer,&size),0); + if (options->gts && h->gts_header) + fwrite(h->gts_header,1,h->gts_header_len,options->outfile->file); + + if(fwrite(buffer,1,size,options->outfile->file) != size) + { + perror(options->outfile->name); + exit(1); + } + + if (options->gts && h->gts_header) { + char gts_trailer[4]={'\x0D','\x0D','\x0A','\x03'}; + fwrite(gts_trailer,1,4,options->outfile->file); + } +#endif + +} + + diff --git a/tools/grib_tools.h b/tools/grib_tools.h new file mode 100644 index 000000000..156d6be0f --- /dev/null +++ b/tools/grib_tools.h @@ -0,0 +1,193 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" +#include +#include +#include + +#ifndef GRIB_TOOLS_H +#define GRIB_TOOLS_H + +#ifndef S_IFMT +#define S_IFMT 0170000 /* type of file */ +#endif + +#ifndef S_IFLNK +#define S_IFLNK 0120000 /* symbolic link */ +#endif + +#ifndef S_ISLNK +#define S_ISLNK(mode) (((mode) & (S_IFMT)) == (S_IFLNK)) +#endif + +#define MAX_KEYS 1000 +#define MAX_STRING_LEN 512 +#define MAX_FAILED 1024 +#define MAX_CONSTRAINT_VALUES 500 + +#define MODE_GRIB 0 +#define MODE_HEADERS_ONLY 1 +#define MODE_GTS 2 +#define MODE_BUFR 3 + +typedef union grib_typed_value { + long* long_value; + double* double_value; + const char* string_value; +} grib_typed_value; + +/* +typedef struct grib_constraints { + const char* name; + int type; + grib_typed_value values[MAX_CONSTRAINT_VALUES]; + int count; + int error; + int equal; +} grib_constraints; +*/ + +typedef struct grib_options_help { + char* id; + char* args; + char* help; +} grib_options_help; + + +typedef struct grib_option { + char* id; + char* args; + char* help; + int on; + int command_line; + char* value; +} grib_option; + +typedef struct grib_failed grib_failed; + +struct grib_failed { + int count; + int error; + grib_failed* next; +}; + +typedef struct grib_tools_file grib_tools_file; + +struct grib_tools_file { + FILE* file; + char* name; + int handle_count; + int filter_handle_count; + grib_failed* failed; + grib_tools_file* next; +}; + +typedef struct grib_runtime_options { + int verbose; + int fail; + int skip; + int default_print_width; + int print_header; + char* name_space; + int print_number; + int print_statistics; + grib_values requested_print_keys[MAX_KEYS]; + int requested_print_keys_count; + grib_values print_keys[MAX_KEYS]; + int print_keys_count; + int strict; + int multi_support; + int set_values_count; + grib_values set_values[MAX_KEYS]; + grib_values constraints[MAX_KEYS]; + int constraints_count; + grib_values compare[MAX_KEYS]; + int compare_count; + int handle_count; + int filter_handle_count; + int file_count; + grib_tools_file* infile_extra; + grib_tools_file* current_infile; + grib_tools_file* infile; + grib_tools_file* outfile; + grib_action* action; + grib_rule* rules; + int dump_flags; + char* dump_mode; + int repack; + int error; + int gts; + char* orderby; + char* latlon; + double lats[4]; + double lons[4]; + double values[4]; + double distances[4]; + int indexes[4]; + int latlon_mode; + char* latlon_mask; + int latlon_idx; + double mask_values[4]; + int index; + int index_on; + double constant; + char* dump_filename; + grib_fieldset* idx; + int random; + char* format; + int onlyfiles; + int tolerance_count; + int through_index; + grib_index* index1; + grib_index* index2; + grib_context* context; + int stop; + int mode; + int skip_all; + grib_values tolerance[MAX_KEYS]; +} grib_runtime_options; + +extern grib_option grib_options[]; +extern int grib_options_count; +extern char* grib_tool_name; +extern char* grib_tool_description; +extern char* grib_tool_usage; + +extern FILE* dump_file; + +char* grib_options_get_option(const char* id); +int grib_options_on(const char* id); +int grib_options_get(int argc,char** argv); +int grib_options_get_values(int argc,char** argv,int values_required,int default_type, grib_values values[],int* n,int* optind); +int grib_tool(int argc, char **argv); +char* grib_options_get_help(char* id); +char* grib_options_get_args(char* id); +int grib_options_command_line(const char* id); +void usage(); +void usage_doxygen(); +int grib_tool_before_getopt(grib_runtime_options* options); +int grib_tool_init(grib_runtime_options* options); +int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file); +int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h); +int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h); +void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h); +int grib_tool_finalise_action(grib_runtime_options* options); +void grib_skip_check(grib_runtime_options* options,grib_handle* h); +void grib_print_key_values(grib_runtime_options* options,grib_handle* h); +void grib_print_file_statistics(grib_runtime_options* options,grib_tools_file* file); +void grib_print_full_statistics(grib_runtime_options* options); +int grib_get_runtime_options(int argc,char** argv,grib_runtime_options* options); +int grib_process_runtime_options(grib_context* c,int argc,char** argv,grib_runtime_options* options); +void grib_tools_write_message(grib_runtime_options* options, grib_handle* h); +int grib_tool_new_filename_action(grib_runtime_options* options,const char* file); + +#endif + diff --git a/tools/list_keys.c b/tools/list_keys.c new file mode 100755 index 000000000..560d041e8 --- /dev/null +++ b/tools/list_keys.c @@ -0,0 +1,73 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +typedef struct grib_action_if { + grib_action act; +/* Members defined in section */ +/* Members defined in if */ + grib_expression *expression; + grib_action *block_true; + grib_action *block_false; +} grib_action_if; + +typedef struct grib_action_list { + grib_action act; +/* Members defined in section */ +/* Members defined in list */ + grib_expression *expression; + grib_action *block_list; +} grib_action_list; + +void print_names(grib_action* a) { + while (a) { + if (a->op && !strcmp(a->op,"label") ) { a=a->next; continue; } + if (!strcmp(a->cclass->name,"action_class_noop") || + !strcmp(a->cclass->name,"action_class_when") ) + { a=a->next; continue; } + + if (!strcmp(a->cclass->name,"action_class_list")) { + grib_action_list* al=(grib_action_list*)a; + printf("%s\n",a->name); + print_names(al->block_list); + } else if (!strcmp(a->cclass->name,"action_class_if")) { + grib_action_if* ai=(grib_action_if*)a; + print_names(ai->block_false); + print_names(ai->block_true); + } else { + /* printf("%s (%s %s)\n",a->name,a->op,a->cclass->name); */ + printf("%s\n",a->name); + } + + a=a->next; + } +} + +int main(int argc, char *argv[]) +{ + int i = 0; + int fail = 0; + + grib_context* c = grib_context_get_default(); + grib_action* a=NULL; + + for(i = 1; i < argc; i++){ + /* printf("%s ... \n",argv[i]);fflush(stdout); */ + if(!(a=grib_parse_file(c,argv[i]))) + { + fail++; + printf("FAILED\n"); + exit(1); + } else print_names(a); + } + + return fail; +} diff --git a/tools/load.c b/tools/load.c new file mode 100644 index 000000000..48343846a --- /dev/null +++ b/tools/load.c @@ -0,0 +1,192 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include +#include +#include + + +#include "grib_api_internal.h" +#include "loady.h" +#include "load.h" + +FILE* fout; + +extern FILE* load_in; +extern int load_parse(); +extern int yylineno; + +static grib_handle *h = 0; + +static double* double_value = 0; +static size_t double_value_size = 0; +static size_t double_value_count = 0; + +static long* long_value = 0; +static size_t long_value_size = 0; +static size_t long_value_count = 0; + +static int err; + +const char *out_file; + +static void check(int code,const char* name) +{ + if(code) { + printf("%s: cannot set %s: %s\n",prog,name,grib_get_error_message(code)); + err++; + } +} + +static grib_handle* handle() +{ + if(h == 0) + h = grib_handle_new_from_template(NULL,"GRIB1"); + /* grib_dump_content(h,stdout,"debug",~0,NULL); */ + return h; +} + +void load_finish() { + const void* buffer; + size_t size; + assert(h); + GRIB_CHECK(grib_get_message(h,&buffer,&size),""); + + printf("%s: writing %ld bytes message\n",prog,(long)size); + + if(fwrite(buffer,1,size,fout) != size) + { + perror(out_file); + exit(1); + } + grib_handle_delete(h); + h = NULL; +} + +void load_missing(const char* name) +{ + printf("grib_set_missing(%s)\n",name); + check(grib_set_missing(handle(),name),name); +} + +void load_long(const char* name,long value) +{ + printf("grib_set_long(%s,%ld)\n",name,value); + check(grib_set_long(handle(),name,value),name); +} + +void load_string(const char* name,const char* value) +{ + size_t s = strlen(value); + printf("grib_set_string(%s,%s)\n",name,value); + check(grib_set_string(handle(),name,value,&s),name); +} + +void load_double(const char* name,double value) +{ + printf("grib_set_double(%s,%g)\n",name,value); + check(grib_set_double(handle(),name,value),name); +} + +void load_start_array() { + + if(double_value == NULL) + { + double_value_size = 100000; + double_value = malloc(double_value_size*sizeof(double)); + } + + if(long_value == NULL) + { + long_value_size = 100000; + long_value = malloc(long_value_size*sizeof(long)); + } + + double_value_count = 0; + long_value_count = 0; + +} + + +void load_end_array(const char* name) +{ + if(double_value_count == long_value_count) + { + printf("grib_set_long_array(%s,%ld)\n",name,(long)long_value_count); + check(grib_set_long_array(handle(),name,long_value,long_value_count),name); + } + else + { + printf("grib_set_double_array(%s,%ld)\n",name,(long)double_value_count); + check(grib_set_double_array(handle(),name,double_value,double_value_count),name); + } +} + + +void load_double_value(double value) { + + if(double_value_count == double_value_size) + { + double_value_size += 100000; + double_value = realloc(double_value,double_value_size*sizeof(double)); + } + + double_value[double_value_count++] = value; + +} + +void load_long_value(long value) { + + if(long_value_count == long_value_size) + { + long_value_size += 100000; + long_value = realloc(long_value,long_value_size*sizeof(long)); + } + + long_value[long_value_count++] = value; + + load_double_value(value); + + +} + + + +int load_wrap() { return 1; } +int load_error(const char* msg) { printf("%s line %d\n",msg,yylineno); err = 1; return 1; } + + + +int load_file(const char* in,const char* out) +{ + err = 0; + fout = fopen(out,"w"); + if(!fout) { + perror(out); + return 1; + } + + load_in = fopen(in,"r"); + if(!load_in) { + perror(in); + return 1; + } + + load_parse(); + + fclose(load_in); + if(fclose(fout)) + { + perror(out); + return 1; + } + + return err; +} diff --git a/tools/load.h b/tools/load.h new file mode 100644 index 000000000..348c4fab2 --- /dev/null +++ b/tools/load.h @@ -0,0 +1,24 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +extern char *prog; + +int load_file(const char*,const char*); +int dump_file(const char*,const char*); + +void load_finish(); +void load_long(const char* name,long value) ; +void load_missing(const char* name); +void load_string(const char* name,const char* value); +void load_double(const char* name,double value); +void load_start_array(); +void load_end_array(const char* name); +void load_double_value(double value); +void load_long_value(long value); diff --git a/tools/loadl.l b/tools/loadl.l new file mode 100644 index 000000000..4f8c45eb7 --- /dev/null +++ b/tools/loadl.l @@ -0,0 +1,82 @@ +%{ + +#include "loady.h" +#define yylval load_lval + +#include +#include + +int yylineno; + +/* Keep -Wall quiet */ +#define YY_NO_UNPUT + +/* + +This is needed for implementing "include", otherwise +flex buffer optimization break the includes. + +*/ + +#define YY_INPUT(buf,result,max_size) \ + { \ + int c = fgetc(yyin); \ + result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \ + } + + +%} + + +SIGN [\-\+] +E [eE] +DIGIT [0-9] +SIGNED {SIGN}?{DIGIT}+ +NUMB {DIGIT}+ +EXP {E}{SIGNED} +IDENT [_A-Za-z]+[_0-9\.A-Za-z]* +FLOAT1 {DIGIT}+"."{DIGIT}*{EXP}? +FLOAT2 {DIGIT}*"."{DIGIT}+{EXP}? +FLOAT3 {DIGIT}+{EXP}? + +%% + + +\"|\' { + int c,q = yytext[0]; + + yyleng = 0; + + while((c = input()) && c != q && c != '\n') + { + if(c == '\\') yytext[yyleng++] = input(); + else yytext[yyleng++] = c; + } + + yytext[yyleng++] = 0; + yylval.str = strdup(yytext); + return STRING; + } + +"missing" return MISSING; +{IDENT} { yylval.str = strdup(yytext); return IDENT; } +{NUMB} { yylval.lval = atol((const char *)yytext); return INTEGER; } +{FLOAT1} { yylval.dval = atof((const char *)yytext); return FLOAT; } +{FLOAT2} { yylval.dval = atof((const char *)yytext); return FLOAT; } +{FLOAT3} { yylval.dval = atof((const char *)yytext); return FLOAT; } + + +\# { + int c; + while((c = input()) && (c != '\n')){} + + yylineno++; + } +[ \t\r]* ; +\n yylineno++; + + +. return *yytext; + +%% + diff --git a/tools/loady.y b/tools/loady.y new file mode 100644 index 000000000..75c46bd36 --- /dev/null +++ b/tools/loady.y @@ -0,0 +1,72 @@ +%{ + +#include "grib_api.h" +#include + +extern int yylex(); +extern void yyerror(const char*); + +#include "load.h" + + + + +%} + +%union { + char *str; + long lval; + double dval; +}; + +%start all + +%token MISSING; + +%token IDENT +%token STRING + +%token INTEGER +%token FLOAT + +%% + +all : empty + | message + ; + +empty:; + +messages : message + | messages message + ; + +message : IDENT '{' accessors '}' ';' { load_finish(); } + ; + +accessors : accessor + | accessors accessor + ; + +accessor : IDENT '=' INTEGER ';' { load_long($1,$3); } + | IDENT '=' '-' INTEGER ';' { load_long($1,-$4); } + | IDENT '=' STRING ';' { load_string($1,$3); } + | IDENT '=' FLOAT ';' { load_double($1,$3); } + | IDENT '=' MISSING ';' { load_missing($1); } + | IDENT '=' '-' FLOAT ';' { load_double($1,-$4); } + | IDENT '=' '{' {load_start_array();} values ',' '}' ';' + { load_end_array($1); free($1); } + + ; + +values: value + | values ',' value + ; + +value : INTEGER { load_long_value($1); } + | '-' INTEGER { load_long_value(-$2); } + | FLOAT { load_double_value($1); } + | '-' FLOAT { load_double_value(-$2); } + ; + +%% diff --git a/tools/make_dox.ksh b/tools/make_dox.ksh new file mode 100755 index 000000000..2add4d4bf --- /dev/null +++ b/tools/make_dox.ksh @@ -0,0 +1,37 @@ +#!/bin/ksh +set -ex +set -A tools grib_dump grib_ls grib_get grib_copy grib_set grib_filter grib_compare grib_get_data grib_keys grib_index_build +export DOXYGEN_USAGE=1 + +p4 edit tools.dox + +cat tools_head.dox > tools.dox + +for tool in ${tools[@]} +do + p4 edit ${tool}.dox + +set +e + ./$tool > ${tool}.dox +set -e + +cat >> ${tool}.dox <> ${tool}.dox + +cat >> ${tool}.dox <> tools.dox <> tools.dox < +#include + +#include "grib_api.h" + +void usage(const char *prog) +{ + fprintf(stderr,"%s: file\n",prog); + exit(1); +} + + +int main(int argc, const char *argv[]) +{ + FILE *in; + int e; + grib_handle *h; + + if(argc != 2) usage(argv[0]); + + in = fopen(argv[argc-1],"r"); + if(!in) { + perror(argv[argc-1]); + exit(1); + } + + while( (h = grib_handle_new_from_file(NULL,in,&e)) != NULL ) + { + grib_keys_iterator* i = grib_keys_iterator_new(h,GRIB_KEYS_ITERATOR_ALL_KEYS,"mars"); + + while(grib_keys_iterator_next(i)) + { + char value[1024]; + size_t len = sizeof(value); + const char* name; + + name=grib_keys_iterator_get_name(i); + GRIB_CHECK(grib_get_string(h,name,value,&len),0); + + printf("%s = %s\n",name,value); + + } + + grib_keys_iterator_delete(i); + grib_handle_delete(h); + } + + GRIB_CHECK(e,argv[argc-1]); + + return 0; +} diff --git a/tools/mf.rules b/tools/mf.rules new file mode 100644 index 000000000..d0696ccea --- /dev/null +++ b/tools/mf.rules @@ -0,0 +1,125 @@ +# GRIB edition 2 +editionNumber = 2; + +# TIGGE prod = 4, test = 5 + +productionStatusOfProcessedData = 5; + +# JPEG-2000 packing +#typeOfPacking = "grid_jpeg"; +typeOfPacking = "grid_simple"; + +# Shape of the Earth +shapeOfTheEarth = 6; + + +typeOfGeneratingProcess = 4; # CF of PF +numberOfForecastsInEnsemble = 11; # 10 Members + 1 Control +#productDefinitionTemplateNumber = 1; + + +if( subCentre == 100 || subCentre == 0) +{ + # Control + typeOfProcessedData = 3; + typeOfEnsembleForecast = 1; # Low-res control forecast + + + number = 0; + +} + +if( subCentre != 100 && subCentre != 0) +{ + typeOfProcessedData = 4; +# typeOfEnsembleForecast = 2; # Negatively perturbed forecast + typeOfEnsembleForecast = 3; # Positively perturbed forecast + + number = subCentre - 100; +} + + +# typeOfEnsembleForecast = ?; + + +# Pressure level + +# Temperature +if( indicatorOfParameter == 11 && indicatorOfTypeOfLevel == 100) { productDefinitionTemplateNumber=1;tigge_short_name = 't'; } + +# Geopotential +if( indicatorOfParameter == 6 ) { productDefinitionTemplateNumber=1;tigge_short_name = 'gh'; } + +# U-component +if( indicatorOfParameter == 33 && indicatorOfTypeOfLevel == 100) { productDefinitionTemplateNumber=1;tigge_short_name = 'u'; } +if( indicatorOfParameter == 34 && indicatorOfTypeOfLevel == 100) { productDefinitionTemplateNumber=1;tigge_short_name = 'v'; } + +# Specific humidity +if( indicatorOfParameter == 51) { productDefinitionTemplateNumber=1;tigge_short_name = 'q'; } + + +# Single level +# Orography + +if( indicatorOfParameter == 8) { productDefinitionTemplateNumber=1;tigge_short_name = 'orog'; } + +# Wind +if( indicatorOfParameter == 33 && indicatorOfTypeOfLevel == 105) { productDefinitionTemplateNumber=1;tigge_short_name = '10u'; } +if( indicatorOfParameter == 34 && indicatorOfTypeOfLevel == 105) { productDefinitionTemplateNumber=1;tigge_short_name = '10v'; } + + +# Dew point +if( indicatorOfParameter == 17) { + productDefinitionTemplateNumber = 1; + tigge_short_name = '2d'; + typeOfFirstFixedSurface = 103; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 2; +} + +# 2Meter temp. +if( indicatorOfParameter == 11 && indicatorOfTypeOfLevel == 105) +{ + productDefinitionTemplateNumber = 1; + tigge_short_name = '2t'; + typeOfFirstFixedSurface = 103; + scaleFactorOfFirstFixedSurface = 0; + scaledValueOfFirstFixedSurface = 2; +} + +# Cape +if( indicatorOfParameter == 160) { productDefinitionTemplateNumber=1;tigge_short_name = 'cape'; } + +# Mean sea level pressure +if( indicatorOfParameter == 2) { productDefinitionTemplateNumber=1;tigge_short_name = 'msl'; } + +# Potential temperature +if( indicatorOfParameter == 13) { productDefinitionTemplateNumber=1;tigge_short_name = 'pt'; } + +# Snow depth +if( indicatorOfParameter == 65) { productDefinitionTemplateNumber=1;tigge_short_name = 'sd'; } + +# Snow fall +if( indicatorOfParameter == 99) { + productDefinitionTemplateNumber = 11; + tigge_short_name = 'sf'; +} + + + +if(indicatorOfParameter == 11 && indicatorOfTypeOfLevel == 1) { productDefinitionTemplateNumber=1;tigge_short_name = 'skt'; } +if(indicatorOfParameter == 121) { productDefinitionTemplateNumber = 11;tigge_short_name = 'slhf'; } +if(indicatorOfParameter == 1) { productDefinitionTemplateNumber=1;tigge_short_name = 'sp'; } +if(indicatorOfParameter == 122) { productDefinitionTemplateNumber = 11;tigge_short_name = 'sshf'; } +if(indicatorOfParameter == 111) { productDefinitionTemplateNumber = 11;tigge_short_name = 'ssr'; } +if(indicatorOfParameter == 11 && indicatorOfTypeOfLevel == 111) { productDefinitionTemplateNumber=1;tigge_short_name = 'st'; } +if(indicatorOfParameter == 112) { productDefinitionTemplateNumber = 11;tigge_short_name = 'str'; } +if(indicatorOfParameter == 71) { productDefinitionTemplateNumber=1;tigge_short_name = 'tcc'; } +if(indicatorOfParameter == 61) { productDefinitionTemplateNumber = 11;tigge_short_name = 'tp'; } +if(indicatorOfParameter == 114) { productDefinitionTemplateNumber = 11;tigge_short_name = 'ttr'; } +if(indicatorOfParameter == 167) { productDefinitionTemplateNumber = 1;tigge_short_name = 'tcw'; } + +if( indicatorOfParameter == 33 && indicatorOfTypeOfLevel == 117) +{ scaleFactorOfFirstFixedSurface=6;scaledValueOfFirstFixedSurface=2;typeOfFirstFixedSurface=109;productDefinitionTemplateNumber=1;tigge_short_name = 'u'; } + +if( indicatorOfParameter == 34 && indicatorOfTypeOfLevel == 117) { scaleFactorOfFirstFixedSurface=6;scaledValueOfFirstFixedSurface=2;typeOfFirstFixedSurface=109;productDefinitionTemplateNumber=1;tigge_short_name = 'v'; } diff --git a/tools/parser.c b/tools/parser.c new file mode 100755 index 000000000..518d3a9b4 --- /dev/null +++ b/tools/parser.c @@ -0,0 +1,35 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +int main(int argc, char *argv[]) +{ + int i = 0; + int fail = 0; + + grib_context* c = grib_context_get_default(); + grib_action* a=NULL; + + for(i = 1; i < argc; i++){ + printf("%s ... ",argv[i]);fflush(stdout); + if(!(a=grib_parse_file(c,argv[i]))) + { + fail++; + printf("FAILED\n"); + exit(1); + } + else + { + printf("OK\n"); + } + } + return fail; +} diff --git a/tools/test.c b/tools/test.c new file mode 100644 index 000000000..1eab8005c --- /dev/null +++ b/tools/test.c @@ -0,0 +1,35 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + + + +int main(int argc, char *argv[]) +{ + grib_context *c = grib_context_get_default(); + + grib_trie *t = grib_trie_new(c); + + grib_trie_insert(t,"hello","w"); + grib_trie_insert(t,"hola","e"); + + printf("%s\n",(char*)grib_trie_get(t,"hello")); + printf("%s\n",(char*)grib_trie_get(t,"hela")); + printf("%s\n",(char*)grib_trie_get(t,"hola")); + + grib_trie_remove(t,"hela"); + grib_trie_remove(t,"hola"); + + printf("%s\n",(char*)grib_trie_get(t,"hello")); + printf("%s\n",(char*)grib_trie_get(t,"hola")); + + return 0; +} diff --git a/tools/tigge_check.filter b/tools/tigge_check.filter new file mode 100644 index 000000000..0e7a53f09 --- /dev/null +++ b/tools/tigge_check.filter @@ -0,0 +1,114 @@ +# gaussian_grid + + long n = get(h,"numberOfParallelsBetweenAPoleAndTheEquator"); + static double* values = NULL; + static long last_n = 0; + double north = dget(h,"latitudeOfFirstGridPointInDegrees"); + double south = dget(h,"latitudeOfLastGridPointInDegrees"); + + double west = dget(h,"longitudeOfFirstGridPointInDegrees"); + double east = dget(h,"longitudeOfLastGridPointInDegrees"); + + int e; + + if(n != last_n) + { + + if(values) free(values); + + values = (double*)malloc(2*sizeof(double)*n); + if(!values) + { + printf("%s, field %d [%s]: failed to allocate %ld bytes\n",file,field,param,2*(long)sizeof(double)*(n)); + error++; + return; + } + + if((e = grib_get_gaussian_latitudes(n,values)) != GRIB_SUCCESS) + { + printf("%s, field %d [%s]: cannot get gaussian latitudes for N%ld: %s\n",file,field,param,n,grib_get_error_message(e)); + error++; + free(values); + last_n = 0; + return; + } + + last_n = n; + } + + values[0] = rint(values[0]*1e6)/1e6; + + if(north != values[0] || south != -values[0]) + printf("N=%ld n=%f s=%f v=%f n-v=%0.30f s-v=%0.30f\n",n,north,south,values[0],north-values[0],south+values[0]); + + CHECK(north == values[0]); + CHECK(south == -values[0]); + + CHECK(west == 0.0); + CHECK(east == 360.0 - 360.0/(4.0*n)); + + if(get(h,"PLPresent")) { + size_t count; + int e = grib_get_size(h,"pl",&count); + double *pl; + int i; + long total; + long numberOfValues = get(h,"numberOfValues"); + long numberOfDataPoints = get(h,"numberOfDataPoints"); + int nPl; + + if(e) { + printf("%s, field %d [%s]: cannot number of pl: %s\n",file,field,param,grib_get_error_message(e)); + error++; + return; + } + + pl = (double*)malloc(sizeof(double)*(count)); + CHECK(pl != NULL); + + nPl = count; + if((e = grib_get_double_array(h,"pl",pl,&count))) + { + printf("%s, field %d [%s]: cannot get pl: %s\n",file,field,param,grib_get_error_message(e)); + free(pl); + error++; + return; + + } + if(nPl != count) + printf("nPl=%ld count=%ld\n",(long)nPl,(long)count); + + CHECK(nPl == count); + + total = 0; + for(i = 0 ; i < count; i++) + total += pl[i]; + + free(pl); + + if(numberOfDataPoints != total) + printf("GAUSS numberOfValues=%ld numberOfDataPoints=%ld sum(pl)=%ld\n", + numberOfValues, + numberOfDataPoints, + total); + + CHECK(numberOfDataPoints == total); + + CHECK(missing(h,"iDirectionIncrement")); + CHECK(missing(h,"iDirectionIncrementInDegrees")); + + CHECK(eq(h,"iDirectionIncrementGiven",0)); + CHECK(eq(h,"jDirectionIncrementGiven",1)); + + } + + CHECK(eq(h,"resolutionAndComponentFlags1",0)); + CHECK(eq(h,"resolutionAndComponentFlags2",0)); + CHECK(eq(h,"resolutionAndComponentFlags6",0)); + CHECK(eq(h,"resolutionAndComponentFlags7",0)); + CHECK(eq(h,"resolutionAndComponentFlags8",0)); + + +} + + diff --git a/tools/tools.dox b/tools/tools.dox new file mode 100644 index 000000000..5e2478e65 --- /dev/null +++ b/tools/tools.dox @@ -0,0 +1,27 @@ +/*! \page tools Grib tools +The following command line tools are provided to help users in all + interactive and batch processing of grib data.\n +Use of the tools is recommended whenever possible. They provide a ready and tested solution for many +situations and their use will avoid the need to write new cod and thus speeding up your work.\n +To make easier their use the tools are provided with a common set of options +so that it's quick to apply the same options to different tools. +We suggest to begin with \ref grib_dump, \ref grib_ls and \ref grib_get to inspect +the content of some files and then to learn about the other tools +to change the content of the grib message (\ref grib_set, \ref grib_filter) +or to copy some messages from a file (\ref grib_copy) or to get a latitude/longitude/values +list of data. +A smart compare tool (\ref grib_compare) is also provided to compare grib messages focusing on some keys or +comparing data with a given precision. + + +- \ref grib_dump +- \ref grib_ls +- \ref grib_get +- \ref grib_copy +- \ref grib_set +- \ref grib_filter +- \ref grib_compare +- \ref grib_get_data +- \ref grib_keys +- \ref grib_index_build +*/ diff --git a/tools/tools_head.dox b/tools/tools_head.dox new file mode 100644 index 000000000..60c30bd75 --- /dev/null +++ b/tools/tools_head.dox @@ -0,0 +1,16 @@ +/*! \page tools Grib tools +The following command line tools are provided to help users in all + interactive and batch processing of grib data.\n +Use of the tools is recommended whenever possible. They provide a ready and tested solution for many +situations and their use will avoid the need to write new cod and thus speeding up your work.\n +To make easier their use the tools are provided with a common set of options +so that it's quick to apply the same options to different tools. +We suggest to begin with \ref grib_dump, \ref grib_ls and \ref grib_get to inspect +the content of some files and then to learn about the other tools +to change the content of the grib message (\ref grib_set, \ref grib_filter) +or to copy some messages from a file (\ref grib_copy) or to get a latitude/longitude/values +list of data. +A smart compare tool (\ref grib_compare) is also provided to compare grib messages focusing on some keys or +comparing data with a given precision. + + diff --git a/tools/xref.c b/tools/xref.c new file mode 100755 index 000000000..9283f9678 --- /dev/null +++ b/tools/xref.c @@ -0,0 +1,34 @@ +/* + * Copyright 2005-2012 ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by + * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. + */ + +#include "grib_api_internal.h" + +int main(int argc, char *argv[]) +{ + int i = 0; + int fail = 0; + + grib_context* c = grib_context_get_default(); +grib_action *a; + + for(i = 1; i < argc; i++){ + if(!(a = grib_parse_file(c,argv[i]))) + { + fail++; + exit(1); + } + else + { +grib_xref_action_branch(stdout,a,argv[i]); + + } + } + return fail; +} diff --git a/tools/xref.pl b/tools/xref.pl new file mode 100755 index 000000000..6f2069699 --- /dev/null +++ b/tools/xref.pl @@ -0,0 +1,339 @@ +#!/usr/bin/perl +use Data::Dumper; +use File::Find (); +use File::Basename; +use DBI; + +use strict; + +my $host="wrep-metadata-devel.ecmwf.int"; +my $user="max"; +my $pass="max"; + +my $dbh = DBI->connect("dbi:mysql:;host=$host",$user,$pass) or die $DBI::errstr; + +sub execute_query { + my @lines = split(/;/,$_[0]); + + foreach (@lines) + { + next unless($_ =~ /\w/); + my $s = $dbh->prepare($_); + $s->execute; + if($_=~/\s*select\b/) + { + while(my @x = $s->fetchrow_array) + { + print "@x\n"; + } + } + } +} + +my $DEFINITIONS = "../definitions"; +my @definitions; +my %definitions; + + +sub createdb { + print "creating xref database...\n"; + my $qh=$dbh->prepare("create database xref"); + $qh->execute() or die $DBI::errstr; + $dbh->disconnect(); + $dbh = DBI->connect("dbi:mysql:database=xref;host=$host",$user,$pass) or die $DBI::errstr; + my $query="create table xref ( + keyname varchar(100), + type varchar(100), + size int not null, + position int not null, + msgtype varchar(50), + file varchar(250), + flag varchar(50), + ref varchar(100)); + alter table xref add primary key (keyname,type,size,position,msgtype,file,flag,ref); + alter table xref add index (keyname); + alter table xref add index (type); + alter table xref add index (size); + alter table xref add index (position); + alter table xref add index (msgtype); + alter table xref add index (file); + alter table xref add index (flag); + alter table xref add index (ref);"; + execute_query($query); +} + +my $q=$dbh->prepare("use xref"); +$q->{HandleError}=\&createdb; +$q->execute(); + + +File::Find::find({wanted => sub {push @definitions, $File::Find::name if(/\.def$/) } }, $DEFINITIONS); + + +foreach my $name ( @definitions ) +{ + my $def = get_definition($name); + open(IN,"<$name") or "die $name: $!"; + while() + { + next if(/^\s*#/); + if(/include\s+\"(.*)\"/) + { + my $dir = dirname($name); + my $inc = get_definition("$dir/$1"); + push @{$def->{includes}}, $inc; + push @{$inc->{included_by}},$def; + } + } + close(IN); +} + + + +# First report: inclusions + +if(0) { + +foreach my $p ( sort keys %definitions ) +{ + my $def = $definitions{$p}; + + print "$def->{name}\n"; + foreach my $x ( sort @{$def->{includes}} ) + { + print " includes : $x->{name}\n"; + } + + foreach my $x ( sort @{$def->{included_by}} ) + { + print " included by: $x->{name}\n"; + } + +} +} + +print "\n\n"; + + +# Get the definition object from a path +sub get_definition { + my ($path) = @_; + + + my $def = $definitions{$path} ; + unless(defined $def) { + my $name = $path; + $name =~ s/^$DEFINITIONS\/?//o; + $def = bless( {name => $name, path => $path, + includes => [], included_by => [] + }, "xref::definition") ; + $definitions{$path} = $def; + } + return $def; +} + +sub long { @_; } +sub access { @_; } +sub string { @_; } +sub double { @_; } +sub unop { @_; } +sub binop { @_; } +sub missing { "missing"; } + +@definitions = (); +foreach my $p ( sort keys %definitions ) +{ + my $def = $definitions{$p}; + push @definitions, $def->{path} unless(@{$def->{included_by}}); +} + +local ($/); +open(IN,"./xref @definitions|") or die "xref: $!"; +my $x = ; +close(IN); + +my $xref; +eval "\$xref=[$x]"; + +my %xref; +foreach my $x ( @{$xref} ) +{ + unless($x->isa("xref::object")) { + my $p = ref $x; + eval "package $p; use base qw(xref::object);"; + } + push @{$xref{$x->name}}, $x; +} + +foreach my $name ( sort { lc $a cmp lc $b } keys %xref ) +{ + my $visible = 0; + my %edition; + + my %type; + + foreach my $x ( @{$xref{$name}} ) + { + $visible ++ if($x->visible); + $edition{$x->edition}++; + $type{$x->type}++; + + } + + next unless($visible); + + my @edition = sort keys %edition; + my @type = sort keys %type; + + print "\n",$name," [@edition] [@type]\n\n"; + foreach my $x ( sort { $a->{path} cmp $b->{path} } @{$xref{$name}} ) + { + print " ", $x->path, " " , $x->type , "[", $x->size, "] "; + $x->show; + print "\n"; + $x->insert; + } +} + + +package xref::object; +sub name { my ($self) = @_; return $self->{name}; } +sub path { my ($self) = @_; return main::get_definition($self->{path})->{name} ; } +#sub visible { my ($self) = @_; return !exists $self->{flags}->{GRIB_ACCESSOR_FLAG_HIDDEN}; } +sub visible { my ($self) = @_; return 1; } + +sub insert { + my $insert = "insert into xref (keyname,type,size,position,msgtype,file,flag,ref) values "; + my ($self) = @_; + my @flags = map { s/GRIB_ACCESSOR_FLAG_//; $_; } sort keys %{$self->{flags}}; + if (!@flags) { @flags = ("none"); }; + my @params = @{$self->{params}} unless (!$self->{params}) ; + if ($self->type eq "alias" ) {@params = ( $self->{target} )}; + if (!@params) { @params = ("none"); }; + my @values; + foreach my $flag (@flags) { + foreach my $param (@params) { + my $value=" (\"".$self->{name}."\",\"".$self->type."\",".$self->size.",".$self->position.",\"".$self->edition."\",\"".$self->path."\",\"$flag\",\"$param\")\n"; + push (@values,$value); + } + } + $insert .= join(",",@values); + #print "$insert\n"; + my $qh=$dbh->prepare($insert); + $qh->{RaiseError}=0; + $qh->{PrintError}=0; + $qh->{HandleError}=sub {}; + $qh->execute(); +} + +sub show { + my ($self) = @_; + my @flags = map { s/GRIB_ACCESSOR_FLAG_//; $_; } sort keys %{$self->{flags}}; + my @params = @{$self->{params}}; + print join(",",@flags), " (", join(",",@params), ")"; +} + +sub size { + my ($self) = @_; + return $self->{size}; +} + +sub position { + my ($self) = @_; + if ($self->{position}) { + return $self->{position}; + } else { return -1 ; } +} + +sub edition { + my ($self) = @_; + my ($e) = split("/",main::get_definition($self->{path})->{name}); + return $e; + +} + +sub type { + my ($self) = @_; + my $t = ref($self); + $t =~ s/.*:://; + return $t; +} + + +package xref::alias; +use base qw(xref::object); +sub show { + my ($self) = @_; + print "-> $self->{target}"; +} + +sub size { + return -1; +} + +package xref::unalias; +use base qw(xref::object); +sub show { + my ($self) = @_; +} + + +package xref::label; +use base qw(xref::object); +sub visible { my ($self) = @_; return 0; } + +package xref::position; +use base qw(xref::object); +#sub visible { my ($self) = @_; return 0; } + +package xref::constant; +use base qw(xref::object); + +package xref::pad; +use base qw(xref::object); +sub visible { my ($self) = @_; return 0; } +sub position { my ($self) = @_; return -1; } + +package xref::padto; +use base qw(xref::object); +sub visible { my ($self) = @_; return 0; } +sub position { my ($self) = @_; return -1; } + +package xref::padtoeven; +use base qw(xref::object); +sub visible { my ($self) = @_; return 0; } +sub position { my ($self) = @_; return -1; } + +package xref::padtomultiple; +use base qw(xref::object); +sub visible { my ($self) = @_; return 0; } +sub position { my ($self) = @_; return -1; } + +package xref::section_padding; +use base qw(xref::object); +sub visible { my ($self) = @_; return 0; } +sub position { my ($self) = @_; return -1; } + +package xref::iterator; +use base qw(xref::object); +sub visible { my ($self) = @_; return 0; } +sub position { my ($self) = @_; return -1; } + +package xref::bytes; +use base qw(xref::object); + +package xref::section_length; +use base qw(xref::object); + +package xref::scale; +use base qw(xref::object); +sub type { "real"; } +sub position { my ($self) = @_; return -1; } + +package xref::ibmfloat; +use base qw(xref::object); +sub type { "real"; } + +package xref::ieeefloat; +use base qw(xref::object); +sub type { "real"; } diff --git a/use/sh.grib_api b/use/sh.grib_api new file mode 100644 index 000000000..f45ba80ca --- /dev/null +++ b/use/sh.grib_api @@ -0,0 +1,123 @@ +# grib_api use template +# Author : ECMWF user Support +# Created the : Wed Apr 18 14:01:11 BST 2007 +# Last modification by : ECMWF User support +# Last modification the : Tue Jun 10 10:03:51 BST 2008 + + + + +######## LOCAL SETTINGS ########### +# default bit mode for this platform +NAME=grib_api +# Default mode is 32 bits except on the supercomputers +if [ "$ARCH" = "ibm_power4" ]; then + DEFAULT_MODE=64 +else + DEFAULT_MODE=32 +fi + +PACKAGE_DIR=/usr/local/lib/metaps/lib/grib_api + +if [ ! -d ${PACKAGE_DIR} ] ; then + echo "GRIB API unavailable. Directory ${PACKAGE_DIR} not present" +else + +DEFAULT_VERSION=`ls -l ${PACKAGE_DIR}/current | awk '{print $NF}' | sed 's/\///'` +EXP_VERSION=`ls -l ${PACKAGE_DIR}/exp | awk '{print $NF}' | sed 's/\///'` +EMOS_VERSION=`ls -l ${PACKAGE_DIR}/emos | awk '{print $NF}' | sed 's/\///'` +NEW_VERSION=`ls -l ${PACKAGE_DIR}/new | awk '{print $NF}' | sed 's/\///'` +OLD_VERSION=`ls -l ${PACKAGE_DIR}/old | awk '{print $NF}' | sed 's/\///'` + +UNDERSCORE="_" +############################################################# +# Set the version if not specified by the user +[ "${GRIB_API_VERSION:-}" != "" ] || GRIB_API_VERSION=$DEFAULT_VERSION + +# Set the mode if not specified by the user +[ "${GRIB_API_MODE:-}" != "" ] || GRIB_API_MODE=$DEFAULT_MODE +[ "${noUseEcho:-}" != "" ] || noUseEcho=no + +VERSION=${GRIB_API_VERSION} + +if [ "$GRIB_API_MODE" != "64" ] && [ "$GRIB_API_MODE" != "32" ] ; then + /bin/ksh -p -c 'echo "GRIB_API_MODE forced to '$DEFAULT_MODE' for '$NAME' '$VERSION'" 1>&2' + GRIB_API_MODE=$DEFAULT_MODE + +fi + +######### DO NOT MODIFY AFTER THIS LINE ############ +# +if [ "$noUseEcho" = "no" ]; then + /bin/ksh -p -c 'echo "'${NAME}' version '${VERSION}' support" 1>&2' +fi + +case $VERSION in + old) + VERSION=$OLD_VERSION;; + current) + VERSION=$DEFAULT_VERSION;; + new) + VERSION=$NEW_VERSION;; + exp) + VERSION=$EXP_VERSION;; + emos) + VERSION=$EMOS_VERSION;; +esac + +if [ "$GRIB_API_MODE" = "$DEFAULT_MODE" ]; then + local_mode="" +else + case $GRIB_API_MODE in + 64) + local_mode="64";; + 32) + local_mode="32";; + *) + /bin/ksh -p -c 'echo "Please choose either 32 bits or 64 bits mode" 1>&2';; + esac +fi + +PREFIX="/usr/local/lib" +PREFIX_JASPER=$PREFIX +if [ -d $PREFIX$local_mode ]; then + PREFIX="$PREFIX$local_mode" + UNDERSCORE="$UNDERSCORE$local_mode" + local_mode="" +fi + +PREFIX="$PREFIX/metaps/lib/$NAME" + +GRIB_API_DIR=$PREFIX/$VERSION +JASPER_DIR="$PREFIX_JASPER/metaps/lib/$NAME/jasper" +if [ -d $GRIB_API_DIR/lib$local_mode ] + then + GRIB_API_INCLUDE="-I$GRIB_API_DIR/include$local_mode"; export GRIB_API_INCLUDE + GRIB_API_LIB="-L$GRIB_API_DIR/lib$local_mode -lgrib_api_f90 -lgrib_api"; export GRIB_API_LIB + GRIB_API_LIB_PTHREAD="-L$GRIB_API_DIR/libpthread -lgrib_api_f90 -lgrib_api -lpthread"; export GRIB_API_LIB_PTHREAD + + if [ -d $JASPER_DIR$UNDERSCORE$local_mode/include ]; then + GRIB_API_LIB="$GRIB_API_LIB -L$JASPER_DIR$UNDERSCORE$local_mode/lib -ljasper"; export GRIB_API_LIB + GRIB_API_LIB_PTHREAD="$GRIB_API_LIB_PTHREAD -L$JASPER_DIR$UNDERSCORE$local_mode/lib -ljasper"; export GRIB_API_LIB_PTHREAD + GRIB_API_INCLUDE="-I$JASPER_DIR$UNDERSCORE$local_mode/include $GRIB_API_INCLUDE"; export GRIB_API_INCLUDE + else if [ -d $JASPER_DIR/include ]; then + GRIB_API_LIB="$GRIB_API_LIB -L$JASPER_DIR/lib -ljasper"; export GRIB_API_LIB + GRIB_API_LIB_PTHREAD="$GRIB_API_LIB_PTHREAD -L$JASPER_DIR/lib -ljasper"; export GRIB_API_LIB_PTHREAD + GRIB_API_INCLUDE="-I$JASPER_DIR/include $GRIB_API_INCLUDE"; export GRIB_API_INCLUDE + fi + fi + PATH=$GRIB_API_DIR/bin:$PATH + if [ "$noUseEcho" = "no" ]; then + /bin/ksh -p -c 'echo "Note that these are '$GRIB_API_MODE' bit mode versions." 1>&2' + /bin/ksh -p -c 'echo "grib_api, version '${VERSION}' enabled (GRIB_API_MODE, GRIB_API_VERSION, GRIB_API_INCLUDE, GRIB_API_LIB, GRIB_API_LIB_PTHREAD, PATH)" 1>&2' + /bin/ksh -p -c 'echo "Look at http://www.ecmwf.int/publications/manuals/grib_api/" 1>&2' + /bin/ksh -p -c 'echo "for more information." 1>&2' + fi + else + /bin/ksh -p -c 'echo "'${NAME}' '${GRIB_API_MODE}' bits version '${VERSION}' does not exist on this host" 1>&2' + /bin/ksh -p -c 'echo "The following versions are available on this platform:" 1>&2' + /bin/ksh -p -c 'echo "`/bin/ls -F '$PREFIX' | /bin/grep \/$ | /usr/bin/cut -f 1 -d / | /bin/grep "\."`" 1>&2' + +fi + +fi diff --git a/use/use.grib_api b/use/use.grib_api new file mode 100644 index 000000000..2e59ea693 --- /dev/null +++ b/use/use.grib_api @@ -0,0 +1,136 @@ +# grib_api use template +# Author : ECMWF user Support +# Created the : Wed Apr 18 14:01:11 BST 2007 +# Last modification by : ECMWF User support +# Last modification the : Tue Jun 10 20:03:51 BST 2008 + + +######## LOCAL SETTINGS ########### +# default bit mode for this platform +if ($?ARCH == 0) setenv ARCH `arch` +if ("$ARCH" == "ibm_power4") then + set DEFAULT_MODE=64 +else + set DEFAULT_MODE=32 +endif +set NAME=grib_api +set PACKAGE_DIR=/usr/local/lib/metaps/lib/grib_api/ + +if ( ! -d ${PACKAGE_DIR} ) then + echo "GRIB API unavailable directory ${PACKAGE_DIR} not present" + +else + +set DEFAULT_VERSION=`ls -l ${PACKAGE_DIR}/current | awk '{print $NF}' | sed 's/\///'` +set EXP_VERSION=`ls -l ${PACKAGE_DIR}/exp | awk '{print $NF}' | sed 's/\///'` +set NEW_VERSION=`ls -l ${PACKAGE_DIR}/new | awk '{print $NF}' | sed 's/\///'` +set OLD_VERSION=`ls -l ${PACKAGE_DIR}/old | awk '{print $NF}' | sed 's/\///'` +set EMOS_VERSION=`ls -l ${PACKAGE_DIR}/emos | awk '{print $NF}' | sed 's/\///'` + +set UNDERSCORE="_" + +# Define default version & default mode + + +if ( $?GRIB_API_VERSION == 0 ) setenv GRIB_API_VERSION $DEFAULT_VERSION + +if ( $?GRIB_API_MODE == 0 ) setenv GRIB_API_MODE $DEFAULT_MODE + +set VERSION=$GRIB_API_VERSION + +if ( "$GRIB_API_MODE" != "64" && "$GRIB_API_MODE" != "32") then + /bin/ksh -p -c 'echo "GRIB_API_MODE forced to '$DEFAULT_MODE' for '$NAME $VERSION'" 1>&2' + setenv GRIB_API_MODE $DEFAULT_MODE +endif + + +if ($?noUseEcho == 0) then + /bin/ksh -p -c 'echo "'$NAME' version '$VERSION' support" 1>&2' +endif + + +switch ($VERSION) + case old: + set VERSION=$OLD_VERSION + breaksw + case current: + set VERSION=$DEFAULT_VERSION + breaksw + case new: + VERSION=$NEW_VERSION + breaksw + case exp: + VERSION=$EXP_VERSION + breaksw + case emos: + VERSION=$EMOS_VERSION + breaksw +endsw + +if ( "$GRIB_API_MODE" == "$DEFAULT_MODE" ) then + set local_mode="" +else + if ( "$GRIB_API_MODE" == "32" ) then + set local_mode="32" + else + set local_mode="64" + endif +endif + +set PREFIX=/usr/local/lib +set PREFIX_JASPER=$PREFIX +if ( -d $PREFIX$local_mode ) then + set PREFIX="$PREFIX$local_mode" + set UNDERSCORE="$UNDERSCORE$local_mode" + set local_mode="" +endif + +set PREFIX="$PREFIX/metaps/lib/$NAME" + +set GRIB_API_DIR=$PREFIX/$VERSION +set JASPER_DIR="$PREFIX_JASPER/metaps/lib/$NAME/jasper" + +######### DO NOT MODIFY AFTER THIS LINE ############ +# +# +if ( -d $GRIB_API_DIR/lib$local_mode ) then + setenv GRIB_API_INCLUDE "-I$GRIB_API_DIR/include$local_mode" + setenv GRIB_API_LIB "-L$GRIB_API_DIR/lib$local_mode -lgrib_api_f90 -lgrib_api" + setenv GRIB_API_LIB_PTHREAD "-L$GRIB_API_DIR/libthread -lgrib_api_f90 -lgrib_api -lpthread" + + if ( -d $JASPER_DIR$UNDERSCORE$local_mode/include ) then + setenv GRIB_API_LIB "$GRIB_API_LIB -L$JASPER_DIR$UNDERSCORE$local_mode/lib -ljasper" + setenv GRIB_API_LIB_PTHREAD "$GRIB_API_LIB_PTHREAD -L$JASPER_DIR$UNDERSCORE$local_mode/lib -ljasper" + setenv GRIB_API_INCLUDE "-I$JASPER_DIR$UNDERSCORE$local_mode/include $GRIB_API_INCLUDE" + else + if ( -d $JASPER_DIR/include ) then + setenv GRIB_API_LIB "$GRIB_API_LIB -L$JASPER_DIR/lib -ljasper" + setenv GRIB_API_LIB_PTHREAD "$GRIB_API_LIB_PTHREAD -L$JASPER_DIR/lib -ljasper" + setenv GRIB_API_INCLUDE "-I$JASPER_DIR/include $GRIB_API_INCLUDE" + endif + endif + setenv PATH $GRIB_API_DIR/bin:$PATH + if ( $?noUseEcho == 0 ) then + /bin/ksh -p -c 'echo "Note that these are '$GRIB_API_MODE' bit mode versions." 1>&2' + /bin/ksh -p -c 'echo "grib_api, version '${VERSION}' enabled (GRIB_API_MODE, GRIB_API_VERSION, GRIB_API_INCLUDE, GRIB_API_LIB, GRIB_API_LIB_PTHREAD, PATH)" 1>&2' + /bin/ksh -p -c 'echo "Look at http://www.ecmwf.int/publications/manuals/grib_api/" 1>&2' + /bin/ksh -p -c 'echo "for more information." 1>&2' + endif +else + /bin/ksh -p -c 'echo "'${NAME}' '${GRIB_API_MODE}' bits version '${VERSION}' does not exist on this host" 1>&2' + /bin/ksh -p -c 'echo "The following versions are available on this platform:" 1>&2' + /bin/ksh -p -c 'echo "`/bin/ls -F '$PREFIX' | /bin/grep \/$ | /usr/bin/cut -f 1 -d / | /bin/grep "\."`" 1>&2' +endif + + +unset VERSION +unset NAME +unset DIRECTORY +unset DEFAULT_MODE +unset DEFAULT_VERSION +unset GRIB_API_DIR +unset PREFIX +unset PREFIX_JASPER + +endif +########################## diff --git a/version.sh b/version.sh new file mode 100644 index 000000000..015d200e0 --- /dev/null +++ b/version.sh @@ -0,0 +1,12 @@ +# +# Package name and versioning information for +# +# +# +# Package base name +PACKAGE_NAME='grib_api' + +# Package version +GRIB_API_MAJOR_VERSION=1 +GRIB_API_MINOR_VERSION=10 +GRIB_API_REVISION_VERSION=4